{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal/index.mjs","../../node_modules/@ethersproject/logger/lib.esm/index.js","../../node_modules/@ethersproject/logger/lib.esm/_version.js","../../node_modules/@ethersproject/bytes/lib.esm/_version.js","../../node_modules/@ethersproject/bytes/lib.esm/index.js","../../node_modules/@ethersproject/bignumber/lib.esm/_version.js","../../node_modules/@ethersproject/bignumber/lib.esm/bignumber.js","../../node_modules/bn.js/lib/bn.js","../../node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js","../../node_modules/js-sha3/src/sha3.js","../../node_modules/@ethersproject/address/lib.esm/_version.js","../../node_modules/@ethersproject/address/lib.esm/index.js","../../node_modules/@ethersproject/keccak256/lib.esm/index.js","../../node_modules/@ethersproject/units/lib.esm/index.js","../../node_modules/@ethersproject/units/lib.esm/_version.js","../../node_modules/bulma-toast/dist/bulma-toast.min.js","../../src/Faucet.svelte","../../src/main.js"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot_spread(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_spread_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_spread_changes_fn(dirty) | get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value = ret) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction claim_element(nodes, name, attributes, svg) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeName === name) {\n let j = 0;\n const remove = [];\n while (j < node.attributes.length) {\n const attribute = node.attributes[j++];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n for (let k = 0; k < remove.length; k++) {\n node.removeAttribute(remove[k]);\n }\n return nodes.splice(i, 1)[0];\n }\n }\n return svg ? svg_element(name) : element(name);\n}\nfunction claim_text(nodes, data) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 3) {\n node.data = '' + data;\n return nodes.splice(i, 1)[0];\n }\n }\n return text(data);\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n node.style.setProperty(key, value, important ? 'important' : '');\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, false, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(anchor = null) {\n this.a = anchor;\n this.e = this.n = null;\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.h(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\nconst active_docs = new Set();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = node.ownerDocument;\n active_docs.add(doc);\n const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = doc.head.appendChild(element('style')).sheet);\n const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n if (!current_rules[name]) {\n current_rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ''}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n active_docs.forEach(doc => {\n const stylesheet = doc.__svelte_stylesheet;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n doc.__svelte_rules = {};\n });\n active_docs.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error('Function called outside component initialization');\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach(fn => fn(event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n flushing = false;\n seen_callbacks.clear();\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = program.b - t;\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, classes_to_add) {\n const attributes = Object.assign({}, ...args);\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${String(value).replace(/\"/g, '"').replace(/'/g, ''')}\"`;\n }\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(parent_component ? parent_component.$$.context : context || []),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(parent_component ? parent_component.$$.context : options.context || []),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false\n };\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n };\n}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.37.0' }, detail)));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * \n * \n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to seperate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_space, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_current_component, get_custom_elements_slots, get_slot_changes, get_slot_context, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, listen, listen_dev, loop, loop_guard, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, update_slot, update_slot_spread, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","\"use strict\";\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nimport { version } from \"./_version\";\nlet _globalLogger = null;\nfunction _checkNormalize() {\n try {\n const missing = [];\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n }\n ;\n }\n catch (error) {\n missing.push(form);\n }\n });\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\");\n }\n }\n catch (error) {\n return error.message;\n }\n return null;\n}\nconst _normalizeError = _checkNormalize();\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ///////////////////\n // Generic Errors\n // Unknown Error\n ErrorCode[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n // Not Implemented\n ErrorCode[\"NOT_IMPLEMENTED\"] = \"NOT_IMPLEMENTED\";\n // Unsupported Operation\n // - operation\n ErrorCode[\"UNSUPPORTED_OPERATION\"] = \"UNSUPPORTED_OPERATION\";\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n ErrorCode[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n // Some sort of bad response from the server\n ErrorCode[\"SERVER_ERROR\"] = \"SERVER_ERROR\";\n // Timeout\n ErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n ///////////////////\n // Operational Errors\n // Buffer Overrun\n ErrorCode[\"BUFFER_OVERRUN\"] = \"BUFFER_OVERRUN\";\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n ErrorCode[\"NUMERIC_FAULT\"] = \"NUMERIC_FAULT\";\n ///////////////////\n // Argument Errors\n // Missing new operator to an object\n // - name: The name of the class\n ErrorCode[\"MISSING_NEW\"] = \"MISSING_NEW\";\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n ErrorCode[\"INVALID_ARGUMENT\"] = \"INVALID_ARGUMENT\";\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"MISSING_ARGUMENT\"] = \"MISSING_ARGUMENT\";\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"UNEXPECTED_ARGUMENT\"] = \"UNEXPECTED_ARGUMENT\";\n ///////////////////\n // Blockchain Errors\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n ErrorCode[\"CALL_EXCEPTION\"] = \"CALL_EXCEPTION\";\n // Insufficien funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n ErrorCode[\"INSUFFICIENT_FUNDS\"] = \"INSUFFICIENT_FUNDS\";\n // Nonce has already been used\n // - transaction: the transaction attempted\n ErrorCode[\"NONCE_EXPIRED\"] = \"NONCE_EXPIRED\";\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n ErrorCode[\"REPLACEMENT_UNDERPRICED\"] = \"REPLACEMENT_UNDERPRICED\";\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n ErrorCode[\"UNPREDICTABLE_GAS_LIMIT\"] = \"UNPREDICTABLE_GAS_LIMIT\";\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n ErrorCode[\"TRANSACTION_REPLACED\"] = \"TRANSACTION_REPLACED\";\n})(ErrorCode || (ErrorCode = {}));\n;\nexport class Logger {\n constructor(version) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n _log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n }\n debug(...args) {\n this._log(Logger.levels.DEBUG, args);\n }\n info(...args) {\n this._log(Logger.levels.INFO, args);\n }\n warn(...args) {\n this._log(Logger.levels.WARNING, args);\n }\n makeError(message, code, params) {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, {});\n }\n if (!code) {\n code = Logger.errors.UNKNOWN_ERROR;\n }\n if (!params) {\n params = {};\n }\n const messageDetails = [];\n Object.keys(params).forEach((key) => {\n try {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key]));\n }\n catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${code}`);\n messageDetails.push(`version=${this.version}`);\n const reason = message;\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n // @TODO: Any??\n const error = new Error(message);\n error.reason = reason;\n error.code = code;\n Object.keys(params).forEach(function (key) {\n error[key] = params[key];\n });\n return error;\n }\n throwError(message, code, params) {\n throw this.makeError(message, code, params);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, params) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code, params);\n }\n assertArgument(condition, message, name, value) {\n if (!!condition) {\n return;\n }\n this.throwArgumentError(message, name, value);\n }\n checkNormalize(message) {\n if (message == null) {\n message = \"platform missing String.prototype.normalize\";\n }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n checkSafeUint53(value, message) {\n if (typeof (value) !== \"number\") {\n return;\n }\n if (message == null) {\n message = \"value not safe\";\n }\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n checkArgumentCount(count, expectedCount, message) {\n if (message) {\n message = \": \" + message;\n }\n else {\n message = \"\";\n }\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n checkNew(target, kind) {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n checkAbstract(target, kind) {\n if (target === kind) {\n this.throwError(\"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \"new\" });\n }\n else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setCensorship(censorship, permanent) {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n if (_permanentCensorErrors) {\n if (!censorship) {\n return;\n }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n static from(version) {\n return new Logger(version);\n }\n}\nLogger.errors = ErrorCode;\nLogger.levels = LogLevel;\n//# sourceMappingURL=index.js.map","export const version = \"logger/5.4.0\";\n//# sourceMappingURL=_version.js.map","export const version = \"bytes/5.4.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n///////////////////////////////\nfunction isHexable(value) {\n return !!(value.toHexString);\n}\nfunction addSlice(array) {\n if (array.slice) {\n return array;\n }\n array.slice = function () {\n const args = Array.prototype.slice.call(arguments);\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\n };\n return array;\n}\nexport function isBytesLike(value) {\n return ((isHexString(value) && !(value.length % 2)) || isBytes(value));\n}\nexport function isBytes(value) {\n if (value == null) {\n return false;\n }\n if (value.constructor === Uint8Array) {\n return true;\n }\n if (typeof (value) === \"string\") {\n return false;\n }\n if (value.length == null) {\n return false;\n }\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n if (typeof (v) !== \"number\" || v < 0 || v >= 256 || (v % 1)) {\n return false;\n }\n }\n return true;\n}\nexport function arrayify(value, options) {\n if (!options) {\n options = {};\n }\n if (typeof (value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid arrayify value\");\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value = parseInt(String(value / 256));\n }\n if (result.length === 0) {\n result.push(0);\n }\n return addSlice(new Uint8Array(result));\n }\n if (options.allowMissingPrefix && typeof (value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n if (isHexable(value)) {\n value = value.toHexString();\n }\n if (isHexString(value)) {\n let hex = value.substring(2);\n if (hex.length % 2) {\n if (options.hexPad === \"left\") {\n hex = \"0x0\" + hex.substring(2);\n }\n else if (options.hexPad === \"right\") {\n hex += \"0\";\n }\n else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n const result = [];\n for (let i = 0; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return addSlice(new Uint8Array(result));\n }\n if (isBytes(value)) {\n return addSlice(new Uint8Array(value));\n }\n return logger.throwArgumentError(\"invalid arrayify value\", \"value\", value);\n}\nexport function concat(items) {\n const objects = items.map(item => arrayify(item));\n const length = objects.reduce((accum, item) => (accum + item.length), 0);\n const result = new Uint8Array(length);\n objects.reduce((offset, object) => {\n result.set(object, offset);\n return offset + object.length;\n }, 0);\n return addSlice(result);\n}\nexport function stripZeros(value) {\n let result = arrayify(value);\n if (result.length === 0) {\n return result;\n }\n // Find the first non-zero entry\n let start = 0;\n while (start < result.length && result[start] === 0) {\n start++;\n }\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n return result;\n}\nexport function zeroPad(value, length) {\n value = arrayify(value);\n if (value.length > length) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[0]);\n }\n const result = new Uint8Array(length);\n result.set(value, length - value.length);\n return addSlice(result);\n}\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (length && value.length !== 2 + 2 * length) {\n return false;\n }\n return true;\n}\nconst HexCharacters = \"0123456789abcdef\";\nexport function hexlify(value, options) {\n if (!options) {\n options = {};\n }\n if (typeof (value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid hexlify value\");\n let hex = \"\";\n while (value) {\n hex = HexCharacters[value & 0xf] + hex;\n value = Math.floor(value / 16);\n }\n if (hex.length) {\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n return \"0x\" + hex;\n }\n return \"0x00\";\n }\n if (typeof (value) === \"bigint\") {\n value = value.toString(16);\n if (value.length % 2) {\n return (\"0x0\" + value);\n }\n return \"0x\" + value;\n }\n if (options.allowMissingPrefix && typeof (value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n if (isHexable(value)) {\n return value.toHexString();\n }\n if (isHexString(value)) {\n if (value.length % 2) {\n if (options.hexPad === \"left\") {\n value = \"0x0\" + value.substring(2);\n }\n else if (options.hexPad === \"right\") {\n value += \"0\";\n }\n else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n return value.toLowerCase();\n }\n if (isBytes(value)) {\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n let v = value[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n }\n return logger.throwArgumentError(\"invalid hexlify value\", \"value\", value);\n}\n/*\nfunction unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {\n if (typeof(value) === \"string\" && value.length % 2 && value.substring(0, 2) === \"0x\") {\n return \"0x0\" + value.substring(2);\n }\n return value;\n}\n*/\nexport function hexDataLength(data) {\n if (typeof (data) !== \"string\") {\n data = hexlify(data);\n }\n else if (!isHexString(data) || (data.length % 2)) {\n return null;\n }\n return (data.length - 2) / 2;\n}\nexport function hexDataSlice(data, offset, endOffset) {\n if (typeof (data) !== \"string\") {\n data = hexlify(data);\n }\n else if (!isHexString(data) || (data.length % 2)) {\n logger.throwArgumentError(\"invalid hexData\", \"value\", data);\n }\n offset = 2 + 2 * offset;\n if (endOffset != null) {\n return \"0x\" + data.substring(offset, 2 + 2 * endOffset);\n }\n return \"0x\" + data.substring(offset);\n}\nexport function hexConcat(items) {\n let result = \"0x\";\n items.forEach((item) => {\n result += hexlify(item).substring(2);\n });\n return result;\n}\nexport function hexValue(value) {\n const trimmed = hexStripZeros(hexlify(value, { hexPad: \"left\" }));\n if (trimmed === \"0x\") {\n return \"0x0\";\n }\n return trimmed;\n}\nexport function hexStripZeros(value) {\n if (typeof (value) !== \"string\") {\n value = hexlify(value);\n }\n if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n value = value.substring(2);\n let offset = 0;\n while (offset < value.length && value[offset] === \"0\") {\n offset++;\n }\n return \"0x\" + value.substring(offset);\n}\nexport function hexZeroPad(value, length) {\n if (typeof (value) !== \"string\") {\n value = hexlify(value);\n }\n else if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n if (value.length > 2 * length + 2) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[1]);\n }\n while (value.length < 2 * length + 2) {\n value = \"0x0\" + value.substring(2);\n }\n return value;\n}\nexport function splitSignature(signature) {\n const result = {\n r: \"0x\",\n s: \"0x\",\n _vs: \"0x\",\n recoveryParam: 0,\n v: 0\n };\n if (isBytesLike(signature)) {\n const bytes = arrayify(signature);\n if (bytes.length !== 65) {\n logger.throwArgumentError(\"invalid signature string; must be 65 bytes\", \"signature\", signature);\n }\n // Get the r, s and v\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n result.v = bytes[64];\n // Allow a recid to be used as the v\n if (result.v < 27) {\n if (result.v === 0 || result.v === 1) {\n result.v += 27;\n }\n else {\n logger.throwArgumentError(\"signature invalid v byte\", \"signature\", signature);\n }\n }\n // Compute recoveryParam from v\n result.recoveryParam = 1 - (result.v % 2);\n // Compute _vs from recoveryParam and s\n if (result.recoveryParam) {\n bytes[32] |= 0x80;\n }\n result._vs = hexlify(bytes.slice(32, 64));\n }\n else {\n result.r = signature.r;\n result.s = signature.s;\n result.v = signature.v;\n result.recoveryParam = signature.recoveryParam;\n result._vs = signature._vs;\n // If the _vs is available, use it to populate missing s, v and recoveryParam\n // and verify non-missing s, v and recoveryParam\n if (result._vs != null) {\n const vs = zeroPad(arrayify(result._vs), 32);\n result._vs = hexlify(vs);\n // Set or check the recid\n const recoveryParam = ((vs[0] >= 128) ? 1 : 0);\n if (result.recoveryParam == null) {\n result.recoveryParam = recoveryParam;\n }\n else if (result.recoveryParam !== recoveryParam) {\n logger.throwArgumentError(\"signature recoveryParam mismatch _vs\", \"signature\", signature);\n }\n // Set or check the s\n vs[0] &= 0x7f;\n const s = hexlify(vs);\n if (result.s == null) {\n result.s = s;\n }\n else if (result.s !== s) {\n logger.throwArgumentError(\"signature v mismatch _vs\", \"signature\", signature);\n }\n }\n // Use recid and v to populate each other\n if (result.recoveryParam == null) {\n if (result.v == null) {\n logger.throwArgumentError(\"signature missing v and recoveryParam\", \"signature\", signature);\n }\n else if (result.v === 0 || result.v === 1) {\n result.recoveryParam = result.v;\n }\n else {\n result.recoveryParam = 1 - (result.v % 2);\n }\n }\n else {\n if (result.v == null) {\n result.v = 27 + result.recoveryParam;\n }\n else if (result.recoveryParam !== (1 - (result.v % 2))) {\n logger.throwArgumentError(\"signature recoveryParam mismatch v\", \"signature\", signature);\n }\n }\n if (result.r == null || !isHexString(result.r)) {\n logger.throwArgumentError(\"signature missing or invalid r\", \"signature\", signature);\n }\n else {\n result.r = hexZeroPad(result.r, 32);\n }\n if (result.s == null || !isHexString(result.s)) {\n logger.throwArgumentError(\"signature missing or invalid s\", \"signature\", signature);\n }\n else {\n result.s = hexZeroPad(result.s, 32);\n }\n const vs = arrayify(result.s);\n if (vs[0] >= 128) {\n logger.throwArgumentError(\"signature s out of range\", \"signature\", signature);\n }\n if (result.recoveryParam) {\n vs[0] |= 0x80;\n }\n const _vs = hexlify(vs);\n if (result._vs) {\n if (!isHexString(result._vs)) {\n logger.throwArgumentError(\"signature invalid _vs\", \"signature\", signature);\n }\n result._vs = hexZeroPad(result._vs, 32);\n }\n // Set or check the _vs\n if (result._vs == null) {\n result._vs = _vs;\n }\n else if (result._vs !== _vs) {\n logger.throwArgumentError(\"signature _vs mismatch v and s\", \"signature\", signature);\n }\n }\n return result;\n}\nexport function joinSignature(signature) {\n signature = splitSignature(signature);\n return hexlify(concat([\n signature.r,\n signature.s,\n (signature.recoveryParam ? \"0x1c\" : \"0x1b\")\n ]));\n}\n//# sourceMappingURL=index.js.map","export const version = \"bignumber/5.4.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardless.\n *\n */\nimport _BN from \"bn.js\";\nvar BN = _BN.BN;\nimport { hexlify, isBytes, isHexString } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nconst _constructorGuard = {};\nconst MAX_SAFE = 0x1fffffffffffff;\nexport function isBigNumberish(value) {\n return (value != null) && (BigNumber.isBigNumber(value) ||\n (typeof (value) === \"number\" && (value % 1) === 0) ||\n (typeof (value) === \"string\" && !!value.match(/^-?[0-9]+$/)) ||\n isHexString(value) ||\n (typeof (value) === \"bigint\") ||\n isBytes(value));\n}\n// Only warn about passing 10 into radix once\nlet _warnedToStringRadix = false;\nexport class BigNumber {\n constructor(constructorGuard, hex) {\n logger.checkNew(new.target, BigNumber);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot call constructor directly; use BigNumber.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new (BigNumber)\"\n });\n }\n this._hex = hex;\n this._isBigNumber = true;\n Object.freeze(this);\n }\n fromTwos(value) {\n return toBigNumber(toBN(this).fromTwos(value));\n }\n toTwos(value) {\n return toBigNumber(toBN(this).toTwos(value));\n }\n abs() {\n if (this._hex[0] === \"-\") {\n return BigNumber.from(this._hex.substring(1));\n }\n return this;\n }\n add(other) {\n return toBigNumber(toBN(this).add(toBN(other)));\n }\n sub(other) {\n return toBigNumber(toBN(this).sub(toBN(other)));\n }\n div(other) {\n const o = BigNumber.from(other);\n if (o.isZero()) {\n throwFault(\"division by zero\", \"div\");\n }\n return toBigNumber(toBN(this).div(toBN(other)));\n }\n mul(other) {\n return toBigNumber(toBN(this).mul(toBN(other)));\n }\n mod(other) {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"cannot modulo negative values\", \"mod\");\n }\n return toBigNumber(toBN(this).umod(value));\n }\n pow(other) {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"cannot raise to negative values\", \"pow\");\n }\n return toBigNumber(toBN(this).pow(value));\n }\n and(other) {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"cannot 'and' negative values\", \"and\");\n }\n return toBigNumber(toBN(this).and(value));\n }\n or(other) {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"cannot 'or' negative values\", \"or\");\n }\n return toBigNumber(toBN(this).or(value));\n }\n xor(other) {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"cannot 'xor' negative values\", \"xor\");\n }\n return toBigNumber(toBN(this).xor(value));\n }\n mask(value) {\n if (this.isNegative() || value < 0) {\n throwFault(\"cannot mask negative values\", \"mask\");\n }\n return toBigNumber(toBN(this).maskn(value));\n }\n shl(value) {\n if (this.isNegative() || value < 0) {\n throwFault(\"cannot shift negative values\", \"shl\");\n }\n return toBigNumber(toBN(this).shln(value));\n }\n shr(value) {\n if (this.isNegative() || value < 0) {\n throwFault(\"cannot shift negative values\", \"shr\");\n }\n return toBigNumber(toBN(this).shrn(value));\n }\n eq(other) {\n return toBN(this).eq(toBN(other));\n }\n lt(other) {\n return toBN(this).lt(toBN(other));\n }\n lte(other) {\n return toBN(this).lte(toBN(other));\n }\n gt(other) {\n return toBN(this).gt(toBN(other));\n }\n gte(other) {\n return toBN(this).gte(toBN(other));\n }\n isNegative() {\n return (this._hex[0] === \"-\");\n }\n isZero() {\n return toBN(this).isZero();\n }\n toNumber() {\n try {\n return toBN(this).toNumber();\n }\n catch (error) {\n throwFault(\"overflow\", \"toNumber\", this.toString());\n }\n return null;\n }\n toBigInt() {\n try {\n return BigInt(this.toString());\n }\n catch (e) { }\n return logger.throwError(\"this platform does not support BigInt\", Logger.errors.UNSUPPORTED_OPERATION, {\n value: this.toString()\n });\n }\n toString() {\n // Lots of people expect this, which we do not support, so check (See: #889)\n if (arguments.length > 0) {\n if (arguments[0] === 10) {\n if (!_warnedToStringRadix) {\n _warnedToStringRadix = true;\n logger.warn(\"BigNumber.toString does not accept any parameters; base-10 is assumed\");\n }\n }\n else if (arguments[0] === 16) {\n logger.throwError(\"BigNumber.toString does not accept any parameters; use bigNumber.toHexString()\", Logger.errors.UNEXPECTED_ARGUMENT, {});\n }\n else {\n logger.throwError(\"BigNumber.toString does not accept parameters\", Logger.errors.UNEXPECTED_ARGUMENT, {});\n }\n }\n return toBN(this).toString(10);\n }\n toHexString() {\n return this._hex;\n }\n toJSON(key) {\n return { type: \"BigNumber\", hex: this.toHexString() };\n }\n static from(value) {\n if (value instanceof BigNumber) {\n return value;\n }\n if (typeof (value) === \"string\") {\n if (value.match(/^-?0x[0-9a-f]+$/i)) {\n return new BigNumber(_constructorGuard, toHex(value));\n }\n if (value.match(/^-?[0-9]+$/)) {\n return new BigNumber(_constructorGuard, toHex(new BN(value)));\n }\n return logger.throwArgumentError(\"invalid BigNumber string\", \"value\", value);\n }\n if (typeof (value) === \"number\") {\n if (value % 1) {\n throwFault(\"underflow\", \"BigNumber.from\", value);\n }\n if (value >= MAX_SAFE || value <= -MAX_SAFE) {\n throwFault(\"overflow\", \"BigNumber.from\", value);\n }\n return BigNumber.from(String(value));\n }\n const anyValue = value;\n if (typeof (anyValue) === \"bigint\") {\n return BigNumber.from(anyValue.toString());\n }\n if (isBytes(anyValue)) {\n return BigNumber.from(hexlify(anyValue));\n }\n if (anyValue) {\n // Hexable interface (takes piority)\n if (anyValue.toHexString) {\n const hex = anyValue.toHexString();\n if (typeof (hex) === \"string\") {\n return BigNumber.from(hex);\n }\n }\n else {\n // For now, handle legacy JSON-ified values (goes away in v6)\n let hex = anyValue._hex;\n // New-form JSON\n if (hex == null && anyValue.type === \"BigNumber\") {\n hex = anyValue.hex;\n }\n if (typeof (hex) === \"string\") {\n if (isHexString(hex) || (hex[0] === \"-\" && isHexString(hex.substring(1)))) {\n return BigNumber.from(hex);\n }\n }\n }\n }\n return logger.throwArgumentError(\"invalid BigNumber value\", \"value\", value);\n }\n static isBigNumber(value) {\n return !!(value && value._isBigNumber);\n }\n}\n// Normalize the hex string\nfunction toHex(value) {\n // For BN, call on the hex string\n if (typeof (value) !== \"string\") {\n return toHex(value.toString(16));\n }\n // If negative, prepend the negative sign to the normalized positive value\n if (value[0] === \"-\") {\n // Strip off the negative sign\n value = value.substring(1);\n // Cannot have mulitple negative signs (e.g. \"--0x04\")\n if (value[0] === \"-\") {\n logger.throwArgumentError(\"invalid hex\", \"value\", value);\n }\n // Call toHex on the positive component\n value = toHex(value);\n // Do not allow \"-0x00\"\n if (value === \"0x00\") {\n return value;\n }\n // Negate the value\n return \"-\" + value;\n }\n // Add a \"0x\" prefix if missing\n if (value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n // Normalize zero\n if (value === \"0x\") {\n return \"0x00\";\n }\n // Make the string even length\n if (value.length % 2) {\n value = \"0x0\" + value.substring(2);\n }\n // Trim to smallest even-length string\n while (value.length > 4 && value.substring(0, 4) === \"0x00\") {\n value = \"0x\" + value.substring(4);\n }\n return value;\n}\nfunction toBigNumber(value) {\n return BigNumber.from(toHex(value));\n}\nfunction toBN(value) {\n const hex = BigNumber.from(value).toHexString();\n if (hex[0] === \"-\") {\n return (new BN(\"-\" + hex.substring(3), 16));\n }\n return new BN(hex.substring(2), 16);\n}\nfunction throwFault(fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value != null) {\n params.value = value;\n }\n return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);\n}\n// value should have no prefix\nexport function _base36To16(value) {\n return (new BN(value, 36)).toString(16);\n}\n// value should have no prefix\nexport function _base16To36(value) {\n return (new BN(value, 16)).toString(36);\n}\n//# sourceMappingURL=bignumber.js.map","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","\"use strict\";\nimport { arrayify, hexZeroPad, isBytes } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { BigNumber, isBigNumberish } from \"./bignumber\";\nconst _constructorGuard = {};\nconst Zero = BigNumber.from(0);\nconst NegativeOne = BigNumber.from(-1);\nfunction throwFault(message, fault, operation, value) {\n const params = { fault: fault, operation: operation };\n if (value !== undefined) {\n params.value = value;\n }\n return logger.throwError(message, Logger.errors.NUMERIC_FAULT, params);\n}\n// Constant to pull zeros from for multipliers\nlet zeros = \"0\";\nwhile (zeros.length < 256) {\n zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n if (typeof (decimals) !== \"number\") {\n try {\n decimals = BigNumber.from(decimals).toNumber();\n }\n catch (e) { }\n }\n if (typeof (decimals) === \"number\" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) {\n return (\"1\" + zeros.substring(0, decimals));\n }\n return logger.throwArgumentError(\"invalid decimal size\", \"decimals\", decimals);\n}\nexport function formatFixed(value, decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n const multiplier = getMultiplier(decimals);\n // Make sure wei is a big number (convert as necessary)\n value = BigNumber.from(value);\n const negative = value.lt(Zero);\n if (negative) {\n value = value.mul(NegativeOne);\n }\n let fraction = value.mod(multiplier).toString();\n while (fraction.length < multiplier.length - 1) {\n fraction = \"0\" + fraction;\n }\n // Strip training 0\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\n const whole = value.div(multiplier).toString();\n if (multiplier.length === 1) {\n value = whole;\n }\n else {\n value = whole + \".\" + fraction;\n }\n if (negative) {\n value = \"-\" + value;\n }\n return value;\n}\nexport function parseFixed(value, decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n const multiplier = getMultiplier(decimals);\n if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.,]+$/)) {\n logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n }\n // Is it negative?\n const negative = (value.substring(0, 1) === \"-\");\n if (negative) {\n value = value.substring(1);\n }\n if (value === \".\") {\n logger.throwArgumentError(\"missing value\", \"value\", value);\n }\n // Split it into a whole and fractional part\n const comps = value.split(\".\");\n if (comps.length > 2) {\n logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n }\n let whole = comps[0], fraction = comps[1];\n if (!whole) {\n whole = \"0\";\n }\n if (!fraction) {\n fraction = \"0\";\n }\n // Get significant digits to check truncation for underflow\n {\n const sigFraction = fraction.replace(/^([0-9]*?)(0*)$/, (all, sig, zeros) => (sig));\n if (sigFraction.length > multiplier.length - 1) {\n throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n }\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < multiplier.length - 1) {\n fraction += \"0\";\n }\n const wholeValue = BigNumber.from(whole);\n const fractionValue = BigNumber.from(fraction);\n let wei = (wholeValue.mul(multiplier)).add(fractionValue);\n if (negative) {\n wei = wei.mul(NegativeOne);\n }\n return wei;\n}\nexport class FixedFormat {\n constructor(constructorGuard, signed, width, decimals) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new FixedFormat\"\n });\n }\n this.signed = signed;\n this.width = width;\n this.decimals = decimals;\n this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n this._multiplier = getMultiplier(decimals);\n Object.freeze(this);\n }\n static from(value) {\n if (value instanceof FixedFormat) {\n return value;\n }\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n if (!match) {\n logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n }\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n const check = (key, type, defaultValue) => {\n if (value[key] == null) {\n return defaultValue;\n }\n if (typeof (value[key]) !== type) {\n logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n }\n return value[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n }\n if (decimals > 80) {\n logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n }\n return new FixedFormat(_constructorGuard, signed, width, decimals);\n }\n}\nexport class FixedNumber {\n constructor(constructorGuard, hex, value, format) {\n logger.checkNew(new.target, FixedNumber);\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new FixedFormat\"\n });\n }\n this.format = format;\n this._hex = hex;\n this._value = value;\n this._isFixedNumber = true;\n Object.freeze(this);\n }\n _checkFormat(other) {\n if (this.format.name !== other.format.name) {\n logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n }\n addUnsafe(other) {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format);\n }\n subUnsafe(other) {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format);\n }\n mulUnsafe(other) {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format);\n }\n divUnsafe(other) {\n this._checkFormat(other);\n const a = parseFixed(this._value, this.format.decimals);\n const b = parseFixed(other._value, other.format.decimals);\n return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format);\n }\n floor() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (this.isNegative() && hasFraction) {\n result = result.subUnsafe(ONE);\n }\n return result;\n }\n ceiling() {\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n let result = FixedNumber.from(comps[0], this.format);\n const hasFraction = !comps[1].match(/^(0*)$/);\n if (!this.isNegative() && hasFraction) {\n result = result.addUnsafe(ONE);\n }\n return result;\n }\n // @TODO: Support other rounding algorithms\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // If we are already in range, we're done\n const comps = this.toString().split(\".\");\n if (comps.length === 1) {\n comps.push(\"0\");\n }\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n }\n if (comps[1].length <= decimals) {\n return this;\n }\n const factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n const bump = BUMP.toFormat(this.format);\n return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n }\n isZero() {\n return (this._value === \"0.0\" || this._value === \"0\");\n }\n isNegative() {\n return (this._value[0] === \"-\");\n }\n toString() { return this._value; }\n toHexString(width) {\n if (width == null) {\n return this._hex;\n }\n if (width % 8) {\n logger.throwArgumentError(\"invalid byte width\", \"width\", width);\n }\n const hex = BigNumber.from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString();\n return hexZeroPad(hex, width / 8);\n }\n toUnsafeFloat() { return parseFloat(this.toString()); }\n toFormat(format) {\n return FixedNumber.fromString(this._value, format);\n }\n static fromValue(value, decimals, format) {\n // If decimals looks more like a format, and there is no format, shift the parameters\n if (format == null && decimals != null && !isBigNumberish(decimals)) {\n format = decimals;\n decimals = null;\n }\n if (decimals == null) {\n decimals = 0;\n }\n if (format == null) {\n format = \"fixed\";\n }\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n }\n static fromString(value, format) {\n if (format == null) {\n format = \"fixed\";\n }\n const fixedFormat = FixedFormat.from(format);\n const numeric = parseFixed(value, fixedFormat.decimals);\n if (!fixedFormat.signed && numeric.lt(Zero)) {\n throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n }\n let hex = null;\n if (fixedFormat.signed) {\n hex = numeric.toTwos(fixedFormat.width).toHexString();\n }\n else {\n hex = numeric.toHexString();\n hex = hexZeroPad(hex, fixedFormat.width / 8);\n }\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static fromBytes(value, format) {\n if (format == null) {\n format = \"fixed\";\n }\n const fixedFormat = FixedFormat.from(format);\n if (arrayify(value).length > fixedFormat.width / 8) {\n throw new Error(\"overflow\");\n }\n let numeric = BigNumber.from(value);\n if (fixedFormat.signed) {\n numeric = numeric.fromTwos(fixedFormat.width);\n }\n const hex = numeric.toTwos((fixedFormat.signed ? 0 : 1) + fixedFormat.width).toHexString();\n const decimal = formatFixed(numeric, fixedFormat.decimals);\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n }\n static from(value, format) {\n if (typeof (value) === \"string\") {\n return FixedNumber.fromString(value, format);\n }\n if (isBytes(value)) {\n return FixedNumber.fromBytes(value, format);\n }\n try {\n return FixedNumber.fromValue(value, 0, format);\n }\n catch (error) {\n // Allow NUMERIC_FAULT to bubble up\n if (error.code !== Logger.errors.INVALID_ARGUMENT) {\n throw error;\n }\n }\n return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n }\n static isFixedNumber(value) {\n return !!(value && value._isFixedNumber);\n }\n}\nconst ONE = FixedNumber.from(1);\nconst BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","/**\r\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\r\n *\r\n * @version 0.5.7\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2015-2016\r\n * @license MIT\r\n */\r\n/*jslint bitwise: true */\r\n(function () {\r\n 'use strict';\r\n\r\n var root = typeof window === 'object' ? window : {};\r\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\r\n if (NODE_JS) {\r\n root = global;\r\n }\r\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\r\n var HEX_CHARS = '0123456789abcdef'.split('');\r\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\r\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\r\n var PADDING = [6, 1536, 393216, 100663296];\r\n var SHIFT = [0, 8, 16, 24];\r\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\r\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\r\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\r\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\r\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\r\n var BITS = [224, 256, 384, 512];\r\n var SHAKE_BITS = [128, 256];\r\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];\r\n\r\n var createOutputMethod = function (bits, padding, outputType) {\r\n return function (message) {\r\n return new Keccak(bits, padding, bits).update(message)[outputType]();\r\n };\r\n };\r\n\r\n var createShakeOutputMethod = function (bits, padding, outputType) {\r\n return function (message, outputBits) {\r\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\r\n };\r\n };\r\n\r\n var createMethod = function (bits, padding) {\r\n var method = createOutputMethod(bits, padding, 'hex');\r\n method.create = function () {\r\n return new Keccak(bits, padding, bits);\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createOutputMethod(bits, padding, type);\r\n }\r\n return method;\r\n };\r\n\r\n var createShakeMethod = function (bits, padding) {\r\n var method = createShakeOutputMethod(bits, padding, 'hex');\r\n method.create = function (outputBits) {\r\n return new Keccak(bits, padding, outputBits);\r\n };\r\n method.update = function (message, outputBits) {\r\n return method.create(outputBits).update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createShakeOutputMethod(bits, padding, type);\r\n }\r\n return method;\r\n };\r\n\r\n var algorithms = [\r\n {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},\r\n {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},\r\n {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}\r\n ];\r\n\r\n var methods = {}, methodNames = [];\r\n\r\n for (var i = 0; i < algorithms.length; ++i) {\r\n var algorithm = algorithms[i];\r\n var bits = algorithm.bits;\r\n for (var j = 0; j < bits.length; ++j) {\r\n var methodName = algorithm.name +'_' + bits[j];\r\n methodNames.push(methodName);\r\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\r\n }\r\n }\r\n\r\n function Keccak(bits, padding, outputBits) {\r\n this.blocks = [];\r\n this.s = [];\r\n this.padding = padding;\r\n this.outputBits = outputBits;\r\n this.reset = true;\r\n this.block = 0;\r\n this.start = 0;\r\n this.blockCount = (1600 - (bits << 1)) >> 5;\r\n this.byteCount = this.blockCount << 2;\r\n this.outputBlocks = outputBits >> 5;\r\n this.extraBytes = (outputBits & 31) >> 3;\r\n\r\n for (var i = 0; i < 50; ++i) {\r\n this.s[i] = 0;\r\n }\r\n }\r\n\r\n Keccak.prototype.update = function (message) {\r\n var notString = typeof message !== 'string';\r\n if (notString && message.constructor === ArrayBuffer) {\r\n message = new Uint8Array(message);\r\n }\r\n var length = message.length, blocks = this.blocks, byteCount = this.byteCount,\r\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\r\n\r\n while (index < length) {\r\n if (this.reset) {\r\n this.reset = false;\r\n blocks[0] = this.block;\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n if (notString) {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n }\r\n this.lastByteIndex = i;\r\n if (i >= byteCount) {\r\n this.start = i - byteCount;\r\n this.block = blocks[blockCount];\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n this.reset = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n Keccak.prototype.finalize = function () {\r\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\r\n blocks[i >> 2] |= this.padding[i & 3];\r\n if (this.lastByteIndex === this.byteCount) {\r\n blocks[0] = blocks[blockCount];\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n blocks[blockCount - 1] |= 0x80000000;\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n };\r\n\r\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var hex = '', block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n block = s[i];\r\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\r\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\r\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\r\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n i = 0;\r\n }\r\n }\r\n if (extraBytes) {\r\n block = s[i];\r\n if (extraBytes > 0) {\r\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\r\n }\r\n if (extraBytes > 1) {\r\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\r\n }\r\n if (extraBytes > 2) {\r\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\r\n }\r\n }\r\n return hex;\r\n };\r\n\r\n Keccak.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var bytes = this.outputBits >> 3;\r\n var buffer;\r\n if (extraBytes) {\r\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\r\n } else {\r\n buffer = new ArrayBuffer(bytes);\r\n }\r\n var array = new Uint32Array(buffer);\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n array[j] = s[i];\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n array[i] = s[i];\r\n buffer = buffer.slice(0, bytes);\r\n }\r\n return buffer;\r\n };\r\n\r\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\r\n\r\n Keccak.prototype.digest = Keccak.prototype.array = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var array = [], offset, block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n offset = j << 2;\r\n block = s[i];\r\n array[offset] = block & 0xFF;\r\n array[offset + 1] = (block >> 8) & 0xFF;\r\n array[offset + 2] = (block >> 16) & 0xFF;\r\n array[offset + 3] = (block >> 24) & 0xFF;\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n offset = j << 2;\r\n block = s[i];\r\n if (extraBytes > 0) {\r\n array[offset] = block & 0xFF;\r\n }\r\n if (extraBytes > 1) {\r\n array[offset + 1] = (block >> 8) & 0xFF;\r\n }\r\n if (extraBytes > 2) {\r\n array[offset + 2] = (block >> 16) & 0xFF;\r\n }\r\n }\r\n return array;\r\n };\r\n\r\n var f = function (s) {\r\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\r\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\r\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\r\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\r\n for (n = 0; n < 48; n += 2) {\r\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\r\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\r\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\r\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\r\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\r\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\r\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\r\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\r\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\r\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\r\n\r\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\r\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\r\n s[0] ^= h;\r\n s[1] ^= l;\r\n s[10] ^= h;\r\n s[11] ^= l;\r\n s[20] ^= h;\r\n s[21] ^= l;\r\n s[30] ^= h;\r\n s[31] ^= l;\r\n s[40] ^= h;\r\n s[41] ^= l;\r\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\r\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\r\n s[2] ^= h;\r\n s[3] ^= l;\r\n s[12] ^= h;\r\n s[13] ^= l;\r\n s[22] ^= h;\r\n s[23] ^= l;\r\n s[32] ^= h;\r\n s[33] ^= l;\r\n s[42] ^= h;\r\n s[43] ^= l;\r\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\r\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\r\n s[4] ^= h;\r\n s[5] ^= l;\r\n s[14] ^= h;\r\n s[15] ^= l;\r\n s[24] ^= h;\r\n s[25] ^= l;\r\n s[34] ^= h;\r\n s[35] ^= l;\r\n s[44] ^= h;\r\n s[45] ^= l;\r\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\r\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\r\n s[6] ^= h;\r\n s[7] ^= l;\r\n s[16] ^= h;\r\n s[17] ^= l;\r\n s[26] ^= h;\r\n s[27] ^= l;\r\n s[36] ^= h;\r\n s[37] ^= l;\r\n s[46] ^= h;\r\n s[47] ^= l;\r\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\r\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\r\n s[8] ^= h;\r\n s[9] ^= l;\r\n s[18] ^= h;\r\n s[19] ^= l;\r\n s[28] ^= h;\r\n s[29] ^= l;\r\n s[38] ^= h;\r\n s[39] ^= l;\r\n s[48] ^= h;\r\n s[49] ^= l;\r\n\r\n b0 = s[0];\r\n b1 = s[1];\r\n b32 = (s[11] << 4) | (s[10] >>> 28);\r\n b33 = (s[10] << 4) | (s[11] >>> 28);\r\n b14 = (s[20] << 3) | (s[21] >>> 29);\r\n b15 = (s[21] << 3) | (s[20] >>> 29);\r\n b46 = (s[31] << 9) | (s[30] >>> 23);\r\n b47 = (s[30] << 9) | (s[31] >>> 23);\r\n b28 = (s[40] << 18) | (s[41] >>> 14);\r\n b29 = (s[41] << 18) | (s[40] >>> 14);\r\n b20 = (s[2] << 1) | (s[3] >>> 31);\r\n b21 = (s[3] << 1) | (s[2] >>> 31);\r\n b2 = (s[13] << 12) | (s[12] >>> 20);\r\n b3 = (s[12] << 12) | (s[13] >>> 20);\r\n b34 = (s[22] << 10) | (s[23] >>> 22);\r\n b35 = (s[23] << 10) | (s[22] >>> 22);\r\n b16 = (s[33] << 13) | (s[32] >>> 19);\r\n b17 = (s[32] << 13) | (s[33] >>> 19);\r\n b48 = (s[42] << 2) | (s[43] >>> 30);\r\n b49 = (s[43] << 2) | (s[42] >>> 30);\r\n b40 = (s[5] << 30) | (s[4] >>> 2);\r\n b41 = (s[4] << 30) | (s[5] >>> 2);\r\n b22 = (s[14] << 6) | (s[15] >>> 26);\r\n b23 = (s[15] << 6) | (s[14] >>> 26);\r\n b4 = (s[25] << 11) | (s[24] >>> 21);\r\n b5 = (s[24] << 11) | (s[25] >>> 21);\r\n b36 = (s[34] << 15) | (s[35] >>> 17);\r\n b37 = (s[35] << 15) | (s[34] >>> 17);\r\n b18 = (s[45] << 29) | (s[44] >>> 3);\r\n b19 = (s[44] << 29) | (s[45] >>> 3);\r\n b10 = (s[6] << 28) | (s[7] >>> 4);\r\n b11 = (s[7] << 28) | (s[6] >>> 4);\r\n b42 = (s[17] << 23) | (s[16] >>> 9);\r\n b43 = (s[16] << 23) | (s[17] >>> 9);\r\n b24 = (s[26] << 25) | (s[27] >>> 7);\r\n b25 = (s[27] << 25) | (s[26] >>> 7);\r\n b6 = (s[36] << 21) | (s[37] >>> 11);\r\n b7 = (s[37] << 21) | (s[36] >>> 11);\r\n b38 = (s[47] << 24) | (s[46] >>> 8);\r\n b39 = (s[46] << 24) | (s[47] >>> 8);\r\n b30 = (s[8] << 27) | (s[9] >>> 5);\r\n b31 = (s[9] << 27) | (s[8] >>> 5);\r\n b12 = (s[18] << 20) | (s[19] >>> 12);\r\n b13 = (s[19] << 20) | (s[18] >>> 12);\r\n b44 = (s[29] << 7) | (s[28] >>> 25);\r\n b45 = (s[28] << 7) | (s[29] >>> 25);\r\n b26 = (s[38] << 8) | (s[39] >>> 24);\r\n b27 = (s[39] << 8) | (s[38] >>> 24);\r\n b8 = (s[48] << 14) | (s[49] >>> 18);\r\n b9 = (s[49] << 14) | (s[48] >>> 18);\r\n\r\n s[0] = b0 ^ (~b2 & b4);\r\n s[1] = b1 ^ (~b3 & b5);\r\n s[10] = b10 ^ (~b12 & b14);\r\n s[11] = b11 ^ (~b13 & b15);\r\n s[20] = b20 ^ (~b22 & b24);\r\n s[21] = b21 ^ (~b23 & b25);\r\n s[30] = b30 ^ (~b32 & b34);\r\n s[31] = b31 ^ (~b33 & b35);\r\n s[40] = b40 ^ (~b42 & b44);\r\n s[41] = b41 ^ (~b43 & b45);\r\n s[2] = b2 ^ (~b4 & b6);\r\n s[3] = b3 ^ (~b5 & b7);\r\n s[12] = b12 ^ (~b14 & b16);\r\n s[13] = b13 ^ (~b15 & b17);\r\n s[22] = b22 ^ (~b24 & b26);\r\n s[23] = b23 ^ (~b25 & b27);\r\n s[32] = b32 ^ (~b34 & b36);\r\n s[33] = b33 ^ (~b35 & b37);\r\n s[42] = b42 ^ (~b44 & b46);\r\n s[43] = b43 ^ (~b45 & b47);\r\n s[4] = b4 ^ (~b6 & b8);\r\n s[5] = b5 ^ (~b7 & b9);\r\n s[14] = b14 ^ (~b16 & b18);\r\n s[15] = b15 ^ (~b17 & b19);\r\n s[24] = b24 ^ (~b26 & b28);\r\n s[25] = b25 ^ (~b27 & b29);\r\n s[34] = b34 ^ (~b36 & b38);\r\n s[35] = b35 ^ (~b37 & b39);\r\n s[44] = b44 ^ (~b46 & b48);\r\n s[45] = b45 ^ (~b47 & b49);\r\n s[6] = b6 ^ (~b8 & b0);\r\n s[7] = b7 ^ (~b9 & b1);\r\n s[16] = b16 ^ (~b18 & b10);\r\n s[17] = b17 ^ (~b19 & b11);\r\n s[26] = b26 ^ (~b28 & b20);\r\n s[27] = b27 ^ (~b29 & b21);\r\n s[36] = b36 ^ (~b38 & b30);\r\n s[37] = b37 ^ (~b39 & b31);\r\n s[46] = b46 ^ (~b48 & b40);\r\n s[47] = b47 ^ (~b49 & b41);\r\n s[8] = b8 ^ (~b0 & b2);\r\n s[9] = b9 ^ (~b1 & b3);\r\n s[18] = b18 ^ (~b10 & b12);\r\n s[19] = b19 ^ (~b11 & b13);\r\n s[28] = b28 ^ (~b20 & b22);\r\n s[29] = b29 ^ (~b21 & b23);\r\n s[38] = b38 ^ (~b30 & b32);\r\n s[39] = b39 ^ (~b31 & b33);\r\n s[48] = b48 ^ (~b40 & b42);\r\n s[49] = b49 ^ (~b41 & b43);\r\n\r\n s[0] ^= RC[n];\r\n s[1] ^= RC[n + 1];\r\n }\r\n };\r\n\r\n if (COMMON_JS) {\r\n module.exports = methods;\r\n } else {\r\n for (var i = 0; i < methodNames.length; ++i) {\r\n root[methodNames[i]] = methods[methodNames[i]];\r\n }\r\n }\r\n})();\r\n","export const version = \"address/5.4.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { arrayify, concat, hexDataLength, hexDataSlice, isHexString, stripZeros } from \"@ethersproject/bytes\";\nimport { BigNumber, _base16To36, _base36To16 } from \"@ethersproject/bignumber\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { encode } from \"@ethersproject/rlp\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nfunction getChecksumAddress(address) {\n if (!isHexString(address, 20)) {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = arrayify(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// Shims for environments that are missing some required constants and functions\nconst MAX_SAFE_INTEGER = 0x1fffffffffffff;\nfunction log10(x) {\n if (Math.log10) {\n return Math.log10(x);\n }\n return Math.log(x) / Math.LN10;\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\nconst safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nexport function getAddress(address) {\n let result = null;\n if (typeof (address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") {\n address = \"0x\" + address;\n }\n result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n // Maybe ICAP? (we only support direct mode)\n }\n else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n result = _base36To16(address.substring(4));\n while (result.length < 40) {\n result = \"0\" + result;\n }\n result = getChecksumAddress(\"0x\" + result);\n }\n else {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n return result;\n}\nexport function isAddress(address) {\n try {\n getAddress(address);\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function getIcapAddress(address) {\n let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getContractAddress(transaction) {\n let from = null;\n try {\n from = getAddress(transaction.from);\n }\n catch (error) {\n logger.throwArgumentError(\"missing from address\", \"transaction\", transaction);\n }\n const nonce = stripZeros(arrayify(BigNumber.from(transaction.nonce).toHexString()));\n return getAddress(hexDataSlice(keccak256(encode([from, nonce])), 12));\n}\nexport function getCreate2Address(from, salt, initCodeHash) {\n if (hexDataLength(salt) !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", salt);\n }\n if (hexDataLength(initCodeHash) !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", initCodeHash);\n }\n return getAddress(hexDataSlice(keccak256(concat([\"0xff\", getAddress(from), salt, initCodeHash])), 12));\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nimport sha3 from \"js-sha3\";\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function keccak256(data) {\n return '0x' + sha3.keccak_256(arrayify(data));\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nimport { formatFixed, parseFixed } from \"@ethersproject/bignumber\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nconst names = [\n \"wei\",\n \"kwei\",\n \"mwei\",\n \"gwei\",\n \"szabo\",\n \"finney\",\n \"ether\",\n];\n// Some environments have issues with RegEx that contain back-tracking, so we cannot\n// use them.\nexport function commify(value) {\n const comps = String(value).split(\".\");\n if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === \".\" || value === \"-.\") {\n logger.throwArgumentError(\"invalid value\", \"value\", value);\n }\n // Make sure we have at least one whole digit (0 if none)\n let whole = comps[0];\n let negative = \"\";\n if (whole.substring(0, 1) === \"-\") {\n negative = \"-\";\n whole = whole.substring(1);\n }\n // Make sure we have at least 1 whole digit with no leading zeros\n while (whole.substring(0, 1) === \"0\") {\n whole = whole.substring(1);\n }\n if (whole === \"\") {\n whole = \"0\";\n }\n let suffix = \"\";\n if (comps.length === 2) {\n suffix = \".\" + (comps[1] || \"0\");\n }\n while (suffix.length > 2 && suffix[suffix.length - 1] === \"0\") {\n suffix = suffix.substring(0, suffix.length - 1);\n }\n const formatted = [];\n while (whole.length) {\n if (whole.length <= 3) {\n formatted.unshift(whole);\n break;\n }\n else {\n const index = whole.length - 3;\n formatted.unshift(whole.substring(index));\n whole = whole.substring(0, index);\n }\n }\n return negative + formatted.join(\",\") + suffix;\n}\nexport function formatUnits(value, unitName) {\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return formatFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function parseUnits(value, unitName) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(\"value must be a string\", \"value\", value);\n }\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return parseFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function formatEther(wei) {\n return formatUnits(wei, 18);\n}\nexport function parseEther(ether) {\n return parseUnits(ether, 18);\n}\n//# sourceMappingURL=index.js.map","export const version = \"units/5.4.0\";\n//# sourceMappingURL=_version.js.map","/*!\n * bulma-toast 2.4.0 \n * (c) 2018-present @rfoel \n * Released under the MIT License.\n */\n(function(a,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?b(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],b):(a=\"undefined\"==typeof globalThis?a||self:globalThis,b(a.bulmaToast={}))})(this,function(a){'use strict';function b(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function c(a){for(var c,d=1;d=a.children.length&&a.remove()}},{key:\"onAnimationEnd\",value:function(){var a=0\n import { onMount } from 'svelte';\n import { getAddress } from '@ethersproject/address';\n import { formatEther } from '@ethersproject/units';\n import { setDefaults as setToast, toast } from 'bulma-toast';\n\n let address = null;\n let faucetInfo = {\n account: '0x0000000000000000000000000000000000000000',\n network: 'Testnet',\n payout: 1,\n };\n\n $: document.title = `GSYS ${faucetInfo.network} Faucet`;\n\n onMount(async () => {\n const res = await fetch('/api/info');\n faucetInfo = await res.json();\n faucetInfo.network = capitalize(faucetInfo.network);\n faucetInfo.payout = parseInt(formatEther(faucetInfo.payout));\n });\n\n setToast({\n position: 'bottom-center',\n dismissible: true,\n pauseOnHover: true,\n closeOnClick: false,\n animate: { in: 'fadeIn', out: 'fadeOut' },\n });\n\n async function handleRequest() {\n try {\n address = getAddress(address);\n } catch (error) {\n toast({ message: error.reason, type: 'is-warning' });\n return;\n }\n\n let formData = new FormData();\n formData.append('address', address);\n const res = await fetch('/api/claim', {\n method: 'POST',\n body: formData,\n });\n let message = await res.text();\n let type = res.ok ? 'is-success' : 'is-warning';\n toast({ message, type });\n }\n\n function capitalize(str) {\n const lower = str.toLowerCase();\n return str.charAt(0).toUpperCase() + lower.slice(1);\n }\n\n\n\n \n \n \n \n \n \n \n \n \n GSYS Faucet\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n Receive {faucetInfo.payout} GSYS per request\n \n \n Serving from {faucetInfo.account}\n \n \n \n \n \n \n \n \n Request\n \n \n \n \n \n \n \n \n\n\n\n","import App from './App.svelte';\n\nconst app = new App({\n target: document.body,\n});\n\nexport default app;\n"],"names":["noop","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","element","name","document","createElement","text","data","createTextNode","space","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","getAttribute","setAttribute","set_data","wholeText","set_input_value","input","current_component","set_current_component","component","onMount","Error","get_current_component","$$","on_mount","push","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","add_render_callback","flushing","seen_callbacks","Set","flush","i","length","update","pop","callback","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","outroing","transition_in","block","local","delete","mount_component","customElement","on_destroy","m","new_on_destroy","map","filter","destroy_component","detaching","d","make_dirty","then","fill","init","instance","create_fragment","not_equal","props","parent_component","bound","on_disconnect","context","Map","callbacks","skip_bound","ready","ret","rest","hydrate","nodes","Array","from","childNodes","children","l","c","intro","SvelteComponent","[object Object]","this","$destroy","type","index","indexOf","splice","$$props","obj","$$set","keys","_permanentCensorErrors","_censorErrors","LogLevels","debug","default","info","warning","error","off","_logLevel","_globalLogger","_normalizeError","missing","form","normalize","join","String","fromCharCode","message","_checkNormalize","LogLevel","ErrorCode","Logger","version","defineProperty","enumerable","writable","logLevel","args","level","toLowerCase","throwArgumentError","console","log","apply","_log","levels","DEBUG","INFO","WARNING","code","params","makeError","errors","UNKNOWN_ERROR","messageDetails","key","JSON","stringify","toString","reason","throwError","INVALID_ARGUMENT","argument","condition","UNSUPPORTED_OPERATION","operation","NUMERIC_FAULT","fault","count","expectedCount","MISSING_ARGUMENT","UNEXPECTED_ARGUMENT","kind","MISSING_NEW","censorship","permanent","globalLogger","warn","logger","isHexable","addSlice","array","slice","prototype","call","arguments","Uint8Array","isBytes","constructor","v","arrayify","checkSafeUint53","result","unshift","parseInt","allowMissingPrefix","substring","toHexString","isHexString","hex","hexPad","match","HexCharacters","hexlify","Math","floor","hexZeroPad","BN","module","exports","assert","val","msg","inherits","ctor","superCtor","super_","TempCtor","number","base","endian","isBN","negative","words","red","_init","Buffer","wordSize","window","require$$0","e","parseHex4Bits","string","charCodeAt","parseHexByte","lowerBound","r","parseBase","str","start","end","mul","len","min","num","isArray","max","left","right","cmp","_initNumber","_initArray","replace","_parseHex","_parseBase","toArray","ceil","j","w","strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","copy","dest","clone","_expand","size","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","self","out","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","res","q","andln","iushrn","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","undefined","_strip","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","_constructorGuard","MAX_SAFE","_warnedToStringRadix","BigNumber","constructorGuard","checkNew","_hex","_isBigNumber","freeze","toBigNumber","toBN","other","throwFault","isNegative","BigInt","toHex","anyValue","Zero","NegativeOne","getMultiplier","decimals","formatFixed","multiplier","fraction","whole","parseFixed","comps","all","sig","wholeValue","fractionValue","wei","FixedFormat","signed","_multiplier","check","defaultValue","FixedNumber","format","_value","_isFixedNumber","_checkFormat","fromValue","hasFraction","subUnsafe","ONE","addUnsafe","factor","bump","BUMP","toFormat","mulUnsafe","divUnsafe","parseFloat","fromString","isBigNumber","isBigNumberish","fixedFormat","numeric","decimal","fromBytes","root","JS_SHA3_NO_NODE_JS","process","versions","global","COMMON_JS","JS_SHA3_NO_COMMON_JS","HEX_CHARS","SHIFT","RC","BITS","OUTPUT_TYPES","createOutputMethod","outputType","Keccak","createShakeOutputMethod","outputBits","createMethod","method","algorithms","methods","methodNames","algorithm","methodName","blocks","reset","blockCount","byteCount","outputBlocks","extraBytes","notString","ArrayBuffer","lastByteIndex","f","finalize","arrayBuffer","buffer","bytes","Uint32Array","digest","offset","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","getChecksumAddress","address","chars","expanded","hashed","sha3","keccak_256","toUpperCase","ibanLookup","safeDigits","log10","LN10","getAddress","checksum","ibanChecksum","names","formatEther","unitName","formatUnits","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","TypeError","configurable","position","remove","appendTo","body","offsetTop","offsetBottom","offsetLeft","offsetRight","single","lastElementChild","duration","closeOnClick","opacity","concat","animate","dismissible","pauseOnHover","speed","onAnimationEnd","classList","className","destroy","insertAdjacentElement","insertAdjacentHTML","pause","resume","removeParent","animation","OAnimation","MozAnimation","WebkitAnimation","style","timer","remaining","clearTimeout","Date","setTimeout","resetDefaults","setDefaults","setDoc","toast","payout","account","faucetInfo","network","fetch","json","lower","charAt","capitalize","setToast","in","title","formData","FormData","ok","outros"],"mappings":"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"}
\n \n
\n \n Request\n \n