{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../../src/fable-library/Int32.ts","webpack:///../../src/fable-library/Util.ts","webpack:///../../src/fable-library/Long.js","webpack:///../../../src/fable-library/lib/big.js","webpack:///../../src/fable-library/Decimal.ts","webpack:///../../src/fable-library/Types.js","webpack:///../../src/fable-library/Option.js","webpack:///../../src/fable-library/Seq.ts","webpack:///../../src/fable-library/Reflection.ts","webpack:///../../src/fable-library/Date.ts","webpack:///../../src/fable-library/String.ts","webpack:///./.fable/fable-library.2.3.21/System.Collections.Generic.js","webpack:///./.fable/fable-library.2.3.21/MutableMap.js","webpack:///./.fable/fable-library.2.3.21/Map.js","webpack:///./.fable/fable-library.2.3.21/MutableSet.js","webpack:///./.fable/fable-library.2.3.21/Set.js","webpack:///./.fable/fable-library.2.3.21/List.js","webpack:///../../src/fable-library/AsyncBuilder.ts","webpack:///../../src/fable-library/Async.ts","webpack:///src/Client/Views.fs","webpack:///src/Client/Shuffle.fs","webpack:///.fable/Fable.Elmish.3.0.4/ring.fs","webpack:///./.fable/fable-library.2.3.21/Array.js","webpack:///.fable/Fable.Elmish.3.0.4/program.fs","webpack:///src/Client/EventMessages.fs","webpack:///.fable/Fable.Elmish.React.3.0.1/common.fs","webpack:///src/Client/Client.fs","webpack:///.fable/Fable.React.5.2.6/Fable.React.Extensions.fs"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","wasm","this","low","rm","P","x","e","y","Union","k","declare","tag","field","f","xs","cur","Comparer$00601","Compare","x$$1","y$$1","compare","EqualityComparer$00601","Equals","x$$4","y$$3","equals","GetHashCode","x$$5","structuralHash","MutableMap$00602","comparer","Map","MutableMap$00602$$TryFindIndex$$2B595","this$","h","matchValue","tryGetValue","findIndex","pair","MutableMap$00602$$TryFind$$2B595","this$$$1","k$$1","$target$$6","matchValue$$1","i$$1","h$$2","getItemFromDict","MutableMap$00602$$Clear","this$$$3","clear","MutableMap$00602$$get_Count","this$$$4","sumBy","pairs$$1","values","GetZero","Add","$x$$2","$y$$3","MutableMap$00602$$Add$$5BDDA1","this$$$7","k$$4","v$$1","i$$4","$target$$8","matchValue$$4","msg","toText","printf","Error","h$$9","h$$10","set","MutableMap$00602$$Remove$$2B595","this$$$9","k$$6","i$$8","$target$$10","matchValue$$6","i$$9","h$$14","iterator","this$$$10","toIterator","getEnumerator","delay","collect","pairs$$2","map","pair$$2","item","Clear","Contains","item$$1","matchValue$$7","CopyTo","array","arrayIndex","iterateIndexed","i$$10","Remove","item$$2","matchValue$$8","k$$7","entries","k$$8","this$$$5","k$$2","matchValue$$2","MutableMap$00602$$get_Item$$2B595","has","k$$9","this$$$8","k$$5","i$$6","$target$$9","matchValue$$5","MutableMap$00602$$ContainsKey$$2B595","keys","pair$$4","k$$10","v$$2","this$$$6","k$$3","v","i$$2","$target$$7","matchValue$$3","i$$3","h$$4","h$$5","h$$6","MutableMap$00602$$set_Item$$5BDDA1","pair$$5","MapTree$00602","fields","MapTreeModule$$$size","MapTreeModule$$$sizeAux","acc","MapTreeModule$$$find","comparer$$1","m$$4","v2$$1","k2$$2","v2$$2","r$$3","l$$3","k2$$3","c$$3","MapTreeModule$$$mem","comparer$$10","k$$12","m$$8","k2$$10","r$$9","l$$9","k2$$11","c$$8","MapTreeModule$002EMapIterator$00602","arg1","arg2","stack","started","Record","MapTreeModule$$$collapseLHS","tail","List","head","k$$26","l$$21","r$$20","rest$$1","v$$22","MapTreeModule$$$mkIterator","s$$5","MapTreeModule$$$current","MapTreeModule$$$alreadyFinished","MapTreeModule$$$notStarted","MapTreeModule$002EmkIEnumerator$0027$00602","s$$6","MapTreeModule$$$mkIEnumerator","s$$7","MapTreeModule$002EmkIEnumerator$0027$00602$$$$002Ector$$Z26BC498C","MapTreeModule$$$toSeq","s$$8","unfold","en$$1","MoveNext","Current","rest$$2","MapTreeModule$$$moveNext","Reset","Dispose","FSharpMap","comparer$$17","tree","FSharpMap$$get_Tree","__$$5","FSharpMap$$get_Item$$2B595","__$$8","k$$29","FSharpMap$$get_Count","__$$20","FSharpMap$$ContainsKey$$2B595","__$$21","k$$31","toString","join","map$$2","kv","combineHash","x$$16","res$$3","e$$1","activePatternResult3536","y$$4","Math","abs","that","CompareTo","obj","m2","res$$4","finished","e1","e2","kvp1","kvp2","c$$10","isDisposable","_arg1$$1","k$$34","k$$35","kv$$1","k$$36","v$$26","kv$$2","MutableSet$00601","MutableSet$00601$$$$002Ector$$Z79760D57","MutableSet$00601$$TryFindIndex$$2B595","MutableSet$00601$$Clear","MutableSet$00601$$get_Count","pairs","MutableSet$00601$$Add$$2B595","MutableSet$00601$$Contains$$2B595","MutableSet$00601$$Remove$$2B595","i$$7","values$$1","value$$1","add","add_","SetTree$00601","SetTreeModule$$$SetOne","SetTreeModule$$$SetNode","l$$1","r$$1","SetTreeModule$002ESetIterator$00601","SetTreeModule$$$collapseLHS","l$$19","r$$19","SetTreeModule$$$mkIterator","s$$13","SetTreeModule$$$current","SetTreeModule$$$alreadyFinished","SetTreeModule$$$notStarted","SetTreeModule$002EmkIEnumerator$00601","s$$14","SetTreeModule$$$mkIEnumerator","s$$15","SetTreeModule$002EmkIEnumerator$00601$$$$002Ector$$Z5B395D56","SetTreeModule$$$compare","comparer$$18","s1","s2","l1","l2","SetTreeModule$$$compareStacks","$target$$50","t1$$6","t2$$6","n1k","n2k","t1$$7","t2$$7","n1k$$1","n2k$$1","n2r","t1$$8","t2$$8","emp","n1k$$2","n1r","n2k$$2","t1$$9","t2$$9","n1k$$3","n1r$$1","n2k$$3","n2r$$1","t1$$10","t2$$10","n1k$$4","t1$$11","n1k$$5","n1l","n1r$$2","t1$$12","n2k$$4","t2$$11","n2k$$5","n2l","n2r$$2","t2$$12","c$$7","c$$9","$l2$$57","$l2$$59","SetTreeModule$$$moveNext","FSharpSet","comparer$$22","FSharpSet$$get_Comparer","__$$4","FSharpSet$$get_Tree","createMutable","source","comparer$$32","MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z79760D57","iterate$$1","MutableSet$002400601$0024$0024Add$0024$00242B595","fold","$arg$$12","$arg$$13","$arg$$14","f$$2","state$$1","xs$$8","reverse","xs$$9","acc$$1","x$$6","ofSeq","xs$$12","fold$$1","acc$$3","x$$9","iterate","f$$24","xs$$46","unitVar0","x$$24","map$$1","x$$21","String","x$$22","res","that$$1","dispatch","cmd","sub","shuffle","speakers","validate","projection","xs$$1","comparer$$34","li$$1","hashSet","strippedSpeakers","lengthDistinct","randomOrder","usedIndexes","speaker","randomNumber","fromThisList","lastIndex","order","empty$$1","x$$37","shuffledSpeakers","introducers","shuffledIntoers","isAnySpeakerIntroingThemselves","introer","isSpeakerIntoringAfterSpeach","_arg1","isIntroing","shuffleIntoers","text","ex","size","target","targetIndex","count","max","fill","__","wix","rix","items","rix'","ix","source$$7","wix'","from","setState","program","arg","patternInput","model","rb","reentered","state","syncDispatch","nextMsg","model'","cmd'","acc$$10","x$$15","placeholderId","view","props","equal","lazyView2With","lastRequest","document","getElementById","currentModel","hasShuffled","message","speakersIntroers","nextProps","_nextState","init","update","description","ev","preventDefault","shufflerFooter","tupledArg","runWith","withReactBatchedUsing"],"mappings":"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","file":"app.02d05d6178a20dd72bcb.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([183,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export var NumberStyles;\n(function (NumberStyles) {\n // None = 0x00000000,\n // AllowLeadingWhite = 0x00000001,\n // AllowTrailingWhite = 0x00000002,\n // AllowLeadingSign = 0x00000004,\n // AllowTrailingSign = 0x00000008,\n // AllowParentheses = 0x00000010,\n // AllowDecimalPoint = 0x00000020,\n // AllowThousands = 0x00000040,\n // AllowExponent = 0x00000080,\n // AllowCurrencySymbol = 0x00000100,\n NumberStyles[NumberStyles[\"AllowHexSpecifier\"] = 512] = \"AllowHexSpecifier\";\n // Integer = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign,\n // HexNumber = AllowLeadingWhite | AllowTrailingWhite | AllowHexSpecifier,\n // Number = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign |\n // AllowTrailingSign | AllowDecimalPoint | AllowThousands,\n // Float = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign |\n // AllowDecimalPoint | AllowExponent,\n // Currency = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |\n // AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol,\n // Any = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |\n // AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol | AllowExponent,\n})(NumberStyles || (NumberStyles = {}));\nfunction validResponse(regexMatch, radix) {\n const [_all, sign, prefix, digits] = regexMatch;\n return {\n sign: sign || \"\",\n prefix: prefix || \"\",\n digits,\n radix,\n };\n}\nfunction getRange(unsigned, bitsize) {\n switch (bitsize) {\n case 8: return unsigned ? [0, 255] : [-128, 127];\n case 16: return unsigned ? [0, 65535] : [-32768, 32767];\n case 32: return unsigned ? [0, 4294967295] : [-2147483648, 2147483647];\n default: throw new Error(\"Invalid bit size.\");\n }\n}\nfunction getInvalidDigits(radix) {\n switch (radix) {\n case 2: return /[^0-1]/;\n case 8: return /[^0-7]/;\n case 10: return /[^0-9]/;\n case 16: return /[^0-9a-fA-F]/;\n default:\n throw new Error(\"Invalid Base.\");\n }\n}\nfunction getRadix(prefix, style) {\n if (style & NumberStyles.AllowHexSpecifier) {\n return 16;\n }\n else {\n switch (prefix) {\n case \"0b\":\n case \"0B\": return 2;\n case \"0o\":\n case \"0O\": return 8;\n case \"0x\":\n case \"0X\": return 16;\n default: return 10;\n }\n }\n}\nexport function isValid(str, style, radix) {\n const integerRegex = /^\\s*([\\+\\-])?(0[xXoObB])?([0-9a-fA-F]+)\\s*$/;\n const res = integerRegex.exec(str.replace(/_/g, \"\"));\n if (res != null) {\n const [_all, sign, prefix, digits] = res;\n radix = radix || getRadix(prefix, style);\n const invalidDigits = getInvalidDigits(radix);\n if (!invalidDigits.test(digits)) {\n return validResponse(res, radix);\n }\n }\n return null;\n}\nexport function parse(str, style, unsigned, bitsize, radix) {\n const res = isValid(str, style, radix);\n if (res != null) {\n let v = Number.parseInt(res.sign + res.digits, res.radix);\n if (!Number.isNaN(v)) {\n const [umin, umax] = getRange(true, bitsize);\n if (!unsigned && res.radix !== 10 && v >= umin && v <= umax) {\n v = v << (32 - bitsize) >> (32 - bitsize);\n }\n const [min, max] = getRange(unsigned, bitsize);\n if (v >= min && v <= max) {\n return v;\n }\n }\n }\n throw new Error(\"Input string was not in a correct format.\");\n}\nexport function tryParse(str, style, unsigned, bitsize) {\n try {\n const v = parse(str, style, unsigned, bitsize);\n return [true, v];\n }\n catch (_a) {\n // supress error\n }\n return [false, 0];\n}\nexport function op_UnaryNegation_Int8(x) {\n return x === -128 ? x : -x;\n}\nexport function op_UnaryNegation_Int16(x) {\n return x === -32768 ? x : -x;\n}\nexport function op_UnaryNegation_Int32(x) {\n return x === -2147483648 ? x : -x;\n}\n//# sourceMappingURL=Int32.js.map","// tslint:disable:ban-types\n// Object.assign flattens getters and setters\n// See https://stackoverflow.com/questions/37054596/js-es5-how-to-assign-objects-with-setters-and-getters\nexport function extend(target, ...sources) {\n for (const source of sources) {\n for (const key of Object.keys(source)) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n }\n }\n return target;\n}\nexport function isDisposable(x) {\n return x != null && typeof x.Dispose === \"function\";\n}\nexport class Comparer {\n constructor(f) {\n this.Compare = f || compare;\n }\n}\nexport function comparerFromEqualityComparer(comparer) {\n // Sometimes IEqualityComparer also implements IComparer\n if (typeof comparer.Compare === \"function\") {\n return new Comparer(comparer.Compare);\n }\n else {\n return new Comparer((x, y) => {\n const xhash = comparer.GetHashCode(x);\n const yhash = comparer.GetHashCode(y);\n if (xhash === yhash) {\n return comparer.Equals(x, y) ? 0 : -1;\n }\n else {\n return xhash < yhash ? -1 : 1;\n }\n });\n }\n}\n// TODO: Move these three methods to Map and Set modules\nexport function containsValue(v, map) {\n for (const kv of map) {\n if (equals(v, kv[1])) {\n return true;\n }\n }\n return false;\n}\nexport function tryGetValue(map, key, defaultValue) {\n return map.has(key) ? [true, map.get(key)] : [false, defaultValue];\n}\nexport function addToSet(v, set) {\n if (set.has(v)) {\n return false;\n }\n set.add(v);\n return true;\n}\nexport function assertEqual(actual, expected, msg) {\n if (!equals(actual, expected)) {\n throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {\n actual,\n expected,\n });\n }\n}\nexport function assertNotEqual(actual, expected, msg) {\n if (equals(actual, expected)) {\n throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {\n actual,\n expected,\n });\n }\n}\nexport class Lazy {\n constructor(factory) {\n this.factory = factory;\n this.isValueCreated = false;\n }\n get Value() {\n if (!this.isValueCreated) {\n this.createdValue = this.factory();\n this.isValueCreated = true;\n }\n return this.createdValue;\n }\n get IsValueCreated() {\n return this.isValueCreated;\n }\n}\nexport function lazyFromValue(v) {\n return new Lazy(() => v);\n}\nexport function padWithZeros(i, length) {\n let str = i.toString(10);\n while (str.length < length) {\n str = \"0\" + str;\n }\n return str;\n}\nexport function padLeftAndRightWithZeros(i, lengthLeft, lengthRight) {\n let str = i.toString(10);\n while (str.length < lengthLeft) {\n str = \"0\" + str;\n }\n while (str.length < lengthRight) {\n str = str + \"0\";\n }\n return str;\n}\nexport function dateOffset(date) {\n const date1 = date;\n return typeof date1.offset === \"number\"\n ? date1.offset\n : (date.kind === 1 /* UTC */\n ? 0 : date.getTimezoneOffset() * -60000);\n}\nexport function int16ToString(i, radix) {\n i = i < 0 && radix != null && radix !== 10 ? 0xFFFF + i + 1 : i;\n return i.toString(radix);\n}\nexport function int32ToString(i, radix) {\n i = i < 0 && radix != null && radix !== 10 ? 0xFFFFFFFF + i + 1 : i;\n return i.toString(radix);\n}\nexport class ObjectRef {\n static id(o) {\n if (!ObjectRef.idMap.has(o)) {\n ObjectRef.idMap.set(o, ++ObjectRef.count);\n }\n return ObjectRef.idMap.get(o);\n }\n}\nObjectRef.idMap = new WeakMap();\nObjectRef.count = 0;\nexport function stringHash(s) {\n let i = 0;\n let h = 5381;\n const len = s.length;\n while (i < len) {\n h = (h * 33) ^ s.charCodeAt(i++);\n }\n return h;\n}\nexport function numberHash(x) {\n return x * 2654435761 | 0;\n}\n// From https://stackoverflow.com/a/37449594\nexport function combineHashCodes(hashes) {\n if (hashes.length === 0) {\n return 0;\n }\n return hashes.reduce((h1, h2) => {\n return ((h1 << 5) + h1) ^ h2;\n });\n}\nexport function identityHash(x) {\n if (x == null) {\n return 0;\n }\n switch (typeof x) {\n case \"boolean\":\n return x ? 1 : 0;\n case \"number\":\n return numberHash(x);\n case \"string\":\n return stringHash(x);\n default:\n return numberHash(ObjectRef.id(x));\n }\n}\nexport function structuralHash(x) {\n if (x == null) {\n return 0;\n }\n switch (typeof x) {\n case \"boolean\":\n return x ? 1 : 0;\n case \"number\":\n return numberHash(x);\n case \"string\":\n return stringHash(x);\n default: {\n if (typeof x.GetHashCode === \"function\") {\n return x.GetHashCode();\n }\n else if (isArray(x)) {\n const ar = x;\n const len = ar.length;\n const hashes = new Array(len);\n for (let i = 0; i < len; i++) {\n hashes[i] = structuralHash(ar[i]);\n }\n return combineHashCodes(hashes);\n }\n else {\n return stringHash(String(x));\n }\n }\n }\n}\nexport function isArray(x) {\n return Array.isArray(x) || ArrayBuffer.isView(x);\n}\nexport function isIterable(x) {\n return x != null && typeof x === \"object\" && Symbol.iterator in x;\n}\nexport function equalArraysWith(x, y, eq) {\n if (x == null) {\n return y == null;\n }\n if (y == null) {\n return false;\n }\n if (x.length !== y.length) {\n return false;\n }\n for (let i = 0; i < x.length; i++) {\n if (!eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n}\nexport function equalArrays(x, y) {\n return equalArraysWith(x, y, equals);\n}\n// export function equalObjects(x: { [k: string]: any }, y: { [k: string]: any }): boolean {\n// if (x == null) { return y == null; }\n// if (y == null) { return false; }\n// const xKeys = Object.keys(x);\n// const yKeys = Object.keys(y);\n// if (xKeys.length !== yKeys.length) {\n// return false;\n// }\n// xKeys.sort();\n// yKeys.sort();\n// for (let i = 0; i < xKeys.length; i++) {\n// if (xKeys[i] !== yKeys[i] || !equals(x[xKeys[i]], y[yKeys[i]])) {\n// return false;\n// }\n// }\n// return true;\n// }\nexport function equals(x, y) {\n if (x === y) {\n return true;\n }\n else if (x == null) {\n return y == null;\n }\n else if (y == null) {\n return false;\n }\n else if (typeof x !== \"object\") {\n return false;\n }\n else if (typeof x.Equals === \"function\") {\n return x.Equals(y);\n }\n else if (isArray(x)) {\n return isArray(y) && equalArrays(x, y);\n }\n else if (x instanceof Date) {\n return (y instanceof Date) && compareDates(x, y) === 0;\n }\n else {\n return false;\n }\n}\nexport function compareDates(x, y) {\n let xtime;\n let ytime;\n // DateTimeOffset and DateTime deals with equality differently.\n if (\"offset\" in x && \"offset\" in y) {\n xtime = x.getTime();\n ytime = y.getTime();\n }\n else {\n xtime = x.getTime() + dateOffset(x);\n ytime = y.getTime() + dateOffset(y);\n }\n return xtime === ytime ? 0 : (xtime < ytime ? -1 : 1);\n}\nexport function comparePrimitives(x, y) {\n return x === y ? 0 : (x < y ? -1 : 1);\n}\nexport function compareArraysWith(x, y, comp) {\n if (x == null) {\n return y == null ? 0 : 1;\n }\n if (y == null) {\n return -1;\n }\n if (x.length !== y.length) {\n return x.length < y.length ? -1 : 1;\n }\n for (let i = 0, j = 0; i < x.length; i++) {\n j = comp(x[i], y[i]);\n if (j !== 0) {\n return j;\n }\n }\n return 0;\n}\nexport function compareArrays(x, y) {\n return compareArraysWith(x, y, compare);\n}\nexport function compareObjects(x, y) {\n if (x == null) {\n return y == null ? 0 : 1;\n }\n if (y == null) {\n return -1;\n }\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y);\n if (xKeys.length !== yKeys.length) {\n return xKeys.length < yKeys.length ? -1 : 1;\n }\n xKeys.sort();\n yKeys.sort();\n for (let i = 0, j = 0; i < xKeys.length; i++) {\n const key = xKeys[i];\n if (key !== yKeys[i]) {\n return key < yKeys[i] ? -1 : 1;\n }\n else {\n j = compare(x[key], y[key]);\n if (j !== 0) {\n return j;\n }\n }\n }\n return 0;\n}\nexport function compare(x, y) {\n if (x === y) {\n return 0;\n }\n else if (x == null) {\n return y == null ? 0 : -1;\n }\n else if (y == null) {\n return 1;\n }\n else if (typeof x !== \"object\") {\n return x < y ? -1 : 1;\n }\n else if (typeof x.CompareTo === \"function\") {\n return x.CompareTo(y);\n }\n else if (isArray(x)) {\n return isArray(y) && compareArrays(x, y);\n }\n else if (x instanceof Date) {\n return (y instanceof Date) && compareDates(x, y);\n }\n else {\n return 1;\n }\n}\nexport function min(comparer, x, y) {\n return comparer(x, y) < 0 ? x : y;\n}\nexport function max(comparer, x, y) {\n return comparer(x, y) > 0 ? x : y;\n}\nexport function createAtom(value) {\n let atom = value;\n return (value) => {\n if (value === void 0) {\n return atom;\n }\n else {\n atom = value;\n return void 0;\n }\n };\n}\nconst CaseRules = {\n None: 0,\n LowerFirst: 1,\n};\nfunction changeCase(str, caseRule) {\n switch (caseRule) {\n case CaseRules.LowerFirst:\n return str.charAt(0).toLowerCase() + str.slice(1);\n case CaseRules.None:\n default:\n return str;\n }\n}\nexport function createObj(fields, caseRule = CaseRules.None) {\n function fail(kvPair) {\n throw new Error(\"Cannot infer key and value of \" + String(kvPair));\n }\n const o = {};\n const definedCaseRule = caseRule;\n for (let kvPair of fields) {\n let caseRule = CaseRules.None;\n if (kvPair == null) {\n fail(kvPair);\n }\n // Deflate unions and use the defined case rule\n if (typeof kvPair.toJSON === \"function\") {\n kvPair = kvPair.toJSON();\n caseRule = definedCaseRule;\n }\n if (Array.isArray(kvPair)) {\n switch (kvPair.length) {\n case 0:\n fail(kvPair);\n break;\n case 1:\n o[changeCase(kvPair[0], caseRule)] = true;\n break;\n case 2:\n const value = kvPair[1];\n o[changeCase(kvPair[0], caseRule)] = value;\n break;\n default:\n o[changeCase(kvPair[0], caseRule)] = kvPair.slice(1);\n }\n }\n else if (typeof kvPair === \"string\") {\n o[changeCase(kvPair, caseRule)] = true;\n }\n else {\n fail(kvPair);\n }\n }\n return o;\n}\nexport function jsOptions(mutator) {\n const opts = {};\n mutator(opts);\n return opts;\n}\nexport function round(value, digits = 0) {\n const m = Math.pow(10, digits);\n const n = +(digits ? value * m : value).toFixed(8);\n const i = Math.floor(n);\n const f = n - i;\n const e = 1e-8;\n const r = (f > 0.5 - e && f < 0.5 + e) ? ((i % 2 === 0) ? i : i + 1) : Math.round(n);\n return digits ? r / m : r;\n}\nexport function sign(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n}\nexport function randomNext(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n}\nexport function randomBytes(buffer) {\n if (buffer == null) {\n throw new Error(\"Buffer cannot be null\");\n }\n for (let i = 0; i < buffer.length; i += 6) {\n // Pick random 48-bit number. Fill buffer in 2 24-bit chunks to avoid bitwise truncation.\n let r = Math.floor(Math.random() * 281474976710656); // Low 24 bits = chunk 1.\n const rhi = Math.floor(r / 16777216); // High 24 bits shifted via division = chunk 2.\n for (let j = 0; j < 6 && i + j < buffer.length; j++) {\n if (j === 3) {\n r = rhi;\n }\n buffer[i + j] = r & 255;\n r >>>= 8;\n }\n }\n}\nexport function unescapeDataString(s) {\n // https://stackoverflow.com/a/4458580/524236\n return decodeURIComponent((s).replace(/\\+/g, \"%20\"));\n}\nexport function escapeDataString(s) {\n return encodeURIComponent(s).replace(/!/g, \"%21\")\n .replace(/'/g, \"%27\")\n .replace(/\\(/g, \"%28\")\n .replace(/\\)/g, \"%29\")\n .replace(/\\*/g, \"%2A\");\n}\nexport function escapeUriString(s) {\n return encodeURI(s);\n}\n// ICollection.Clear and Count members can be called on Arrays\n// or Dictionaries so we need a runtime check (see #1120)\nexport function count(col) {\n return isArray(col) ? col.length : col.size;\n}\nexport function clear(col) {\n if (isArray(col)) {\n col.splice(0);\n }\n else {\n col.clear();\n }\n}\nconst CURRIED_KEY = \"__CURRIED__\";\nexport function uncurry(arity, f) {\n // f may be a function option with None value\n if (f == null) {\n return null;\n }\n // The function is already uncurried\n if (f.length > 1) {\n // if (CURRIED_KEY in f) { // This doesn't always work\n return f;\n }\n let uncurriedFn;\n switch (arity) {\n case 2:\n uncurriedFn = (a1, a2) => f(a1)(a2);\n break;\n case 3:\n uncurriedFn = (a1, a2, a3) => f(a1)(a2)(a3);\n break;\n case 4:\n uncurriedFn = (a1, a2, a3, a4) => f(a1)(a2)(a3)(a4);\n break;\n case 5:\n uncurriedFn = (a1, a2, a3, a4, a5) => f(a1)(a2)(a3)(a4)(a5);\n break;\n case 6:\n uncurriedFn = (a1, a2, a3, a4, a5, a6) => f(a1)(a2)(a3)(a4)(a5)(a6);\n break;\n case 7:\n uncurriedFn = (a1, a2, a3, a4, a5, a6, a7) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7);\n break;\n case 8:\n uncurriedFn = (a1, a2, a3, a4, a5, a6, a7, a8) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8);\n break;\n default:\n throw new Error(\"Uncurrying to more than 8-arity is not supported: \" + arity);\n }\n uncurriedFn[CURRIED_KEY] = f;\n return uncurriedFn;\n}\nexport function curry(arity, f) {\n if (f == null) {\n return null;\n }\n if (CURRIED_KEY in f) {\n return f[CURRIED_KEY];\n }\n switch (arity) {\n case 2:\n return (a1) => (a2) => f(a1, a2);\n case 3:\n return (a1) => (a2) => (a3) => f(a1, a2, a3);\n case 4:\n return (a1) => (a2) => (a3) => (a4) => f(a1, a2, a3, a4);\n case 5:\n return (a1) => (a2) => (a3) => (a4) => (a5) => f(a1, a2, a3, a4, a5);\n case 6:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => f(a1, a2, a3, a4, a5, a6);\n case 7:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => f(a1, a2, a3, a4, a5, a6, a7);\n case 8:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => f(a1, a2, a3, a4, a5, a6, a7, a8);\n default:\n throw new Error(\"Currying to more than 8-arity is not supported: \" + arity);\n }\n}\nexport function partialApply(arity, f, args) {\n if (f == null) {\n return null;\n }\n else if (CURRIED_KEY in f) {\n f = f[CURRIED_KEY];\n for (var i = 0; i < args.length; i++) {\n f = f(args[i]);\n }\n return f;\n }\n else {\n switch (arity) {\n case 1:\n // Wrap arguments to make sure .concat doesn't destruct arrays. Example\n // [1,2].concat([3,4],5) --> [1,2,3,4,5] // fails\n // [1,2].concat([[3,4],5]) --> [1,2,[3,4],5] // ok\n return (a1) => f.apply(null, args.concat([a1]));\n case 2:\n return (a1) => (a2) => f.apply(null, args.concat([a1, a2]));\n case 3:\n return (a1) => (a2) => (a3) => f.apply(null, args.concat([a1, a2, a3]));\n case 4:\n return (a1) => (a2) => (a3) => (a4) => f.apply(null, args.concat([a1, a2, a3, a4]));\n case 5:\n return (a1) => (a2) => (a3) => (a4) => (a5) => f.apply(null, args.concat([a1, a2, a3, a4, a5]));\n case 6:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => f.apply(null, args.concat([a1, a2, a3, a4, a5, a6]));\n case 7:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => f.apply(null, args.concat([a1, a2, a3, a4, a5, a6, a7]));\n case 8:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => f.apply(null, args.concat([a1, a2, a3, a4, a5, a6, a7, a8]));\n default:\n throw new Error(\"Partially applying to more than 8-arity is not supported: \" + arity);\n }\n }\n}\nexport function mapCurriedArgs(fn, mappings) {\n function mapArg(fn, arg, mappings, idx) {\n const mapping = mappings[idx];\n if (mapping !== 0) {\n const expectedArity = mapping[0];\n const actualArity = mapping[1];\n if (expectedArity > 1) {\n arg = curry(expectedArity, arg);\n }\n if (actualArity > 1) {\n arg = uncurry(actualArity, arg);\n }\n }\n const res = fn(arg);\n if (idx + 1 === mappings.length) {\n return res;\n }\n else {\n return function (arg) {\n return mapArg(res, arg, mappings, idx + 1);\n };\n }\n }\n return function (arg) {\n return mapArg(fn, arg, mappings, 0);\n };\n}\nexport function addToDict(dict, k, v) {\n if (dict.has(k)) {\n throw new Error(\"An item with the same key has already been added. Key: \" + k);\n }\n dict.set(k, v);\n}\nexport function getItemFromDict(map, key) {\n if (map.has(key)) {\n return map.get(key);\n }\n else {\n throw new Error(`The given key '${key}' was not present in the dictionary.`);\n }\n}\n//# sourceMappingURL=Util.js.map","// Adapted from: https://github.com/dcodeIO/long.js/blob/f572e3a17d313730cf11eb838f6d2a5e31626f8a/src/long.js\n// Apache License 2.0: https://github.com/dcodeIO/long.js/blob/master/LICENSE\n/* tslint:disable */\nimport { isValid } from \"./Int32\";\nimport { combineHashCodes } from \"./Util\";\n/**\n * wasm optimizations, to do native i64 multiplication and divide\n */\nvar wasm = null;\ntry {\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\n ])), {}).exports;\n}\ncatch (e) {\n // no wasm support :(\n}\n/**\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n * See the from* functions below for more convenient ways of constructing Longs.\n * @exports Long\n * @class A Long class for representing a 64 bit two's-complement integer value.\n * @param {number} low The low (signed) 32 bits of the long\n * @param {number} high The high (signed) 32 bits of the long\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @constructor\n */\nexport default function Long(low, high, unsigned) {\n /**\n * The low 32 bits as a signed value.\n * @type {number}\n */\n this.low = low | 0;\n /**\n * The high 32 bits as a signed value.\n * @type {number}\n */\n this.high = high | 0;\n /**\n * Whether unsigned or not.\n * @type {boolean}\n */\n this.unsigned = !!unsigned;\n}\nLong.prototype.GetHashCode = function () {\n return combineHashCodes([this.unsigned ? 1 : 0, this.high, this.low]);\n};\nLong.prototype.Equals = function (x) { return equals(this, x); };\nLong.prototype.CompareTo = function (x) { return compare(this, x); };\nLong.prototype.toString = function (radix) { return toString(this, radix); };\nLong.prototype.toJSON = function () { return toString(this); };\nexport const neg = op_UnaryNegation;\nexport const not = op_LogicalNot;\nexport const add = op_Addition;\nexport const sub = op_Subtraction;\nexport const mul = op_Multiply;\nexport const div = op_Division;\nexport const mod = op_Modulus;\nexport const shl = op_LeftShift;\nexport const shr = op_RightShift;\nexport const and = op_BitwiseAnd;\nexport const or = op_BitwiseOr;\nexport const xor = op_ExclusiveOr;\n// The internal representation of a long is the two given signed, 32-bit values.\n// We use 32-bit pieces because these are the size of integers on which\n// Javascript performs bit-operations. For operations like addition and\n// multiplication, we split each number into 16 bit pieces, which can easily be\n// multiplied within Javascript's floating-point representation without overflow\n// or change in sign.\n//\n// In the algorithms below, we frequently reduce the negative case to the\n// positive case by negating the input(s) and then post-processing the result.\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n// a positive number, it overflows back into a negative). Not handling this\n// case would often result in infinite recursion.\n//\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n// methods on which they depend.\n/**\n * An indicator used to reliably determine if an object is a Long or not.\n * @type {boolean}\n * @const\n * @private\n */\nLong.prototype.__isLong__;\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\n/**\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n * @inner\n */\nfunction isLong(obj) {\n return (obj && obj[\"__isLong__\"]) === true;\n}\n/**\n * A cache of the Long representations of small integer values.\n * @type {!Object}\n * @inner\n */\nvar INT_CACHE = {};\n/**\n * A cache of the Long representations of small unsigned integer values.\n * @type {!Object}\n * @inner\n */\nvar UINT_CACHE = {};\n/**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromInt(value, unsigned) {\n var obj, cachedObj, cache;\n if (unsigned) {\n value >>>= 0;\n if (cache = (0 <= value && value < 256)) {\n cachedObj = UINT_CACHE[value];\n if (cachedObj)\n return cachedObj;\n }\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\n if (cache)\n UINT_CACHE[value] = obj;\n return obj;\n }\n else {\n value |= 0;\n if (cache = (-128 <= value && value < 128)) {\n cachedObj = INT_CACHE[value];\n if (cachedObj)\n return cachedObj;\n }\n obj = fromBits(value, value < 0 ? -1 : 0, false);\n if (cache)\n INT_CACHE[value] = obj;\n return obj;\n }\n}\n/**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromNumber(value, unsigned) {\n if (isNaN(value))\n return unsigned ? UZERO : ZERO;\n if (unsigned) {\n if (value < 0)\n return UZERO;\n if (value >= TWO_PWR_64_DBL)\n return MAX_UNSIGNED_VALUE;\n }\n else {\n if (value <= -TWO_PWR_63_DBL)\n return MIN_VALUE;\n if (value + 1 >= TWO_PWR_63_DBL)\n return MAX_VALUE;\n }\n if (value < 0)\n return op_UnaryNegation(fromNumber(-value, unsigned));\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\n}\n/**\n * @param {number} value\n * @param {boolean} unsigned\n * @param {number} kind\n * @returns {!Long}\n * @inner\n */\nexport function fromInteger(value, unsigned, kind) {\n var x;\n var xh = 0;\n switch (kind) {\n case 0:\n x = value << 24 >> 24;\n xh = x;\n break;\n case 4:\n x = value << 24 >>> 24;\n break;\n case 1:\n x = value << 16 >> 16;\n xh = x;\n break;\n case 5:\n x = value << 16 >>> 16;\n break;\n case 2:\n x = value >> 0;\n xh = x;\n break;\n case 6: x = value >>> 0;\n }\n return fromBits(x, xh >> 31, unsigned);\n}\n/**\n * @param {number} lowBits\n * @param {number} highBits\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromBits(lowBits, highBits, unsigned) {\n return new Long(lowBits, highBits, unsigned);\n}\n/**\n * @function\n * @param {number} base\n * @param {number} exponent\n * @returns {number}\n * @inner\n */\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n/**\n * @param {string} str\n * @param {(boolean|number)=} unsigned\n * @param {number=} radix\n * @returns {!Long}\n * @inner\n */\nexport function fromString(str, unsigned, radix) {\n if (str.length === 0)\n throw Error('empty string');\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\n return ZERO;\n if (typeof unsigned === 'number') {\n // For goog.math.long compatibility\n radix = unsigned,\n unsigned = false;\n }\n else {\n unsigned = !!unsigned;\n }\n radix = radix || 10;\n if (radix < 2 || 36 < radix)\n throw RangeError('radix');\n var p = str.indexOf('-');\n if (p > 0)\n throw Error('interior hyphen');\n else if (p === 0) {\n return op_UnaryNegation(fromString(str.substring(1), unsigned, radix));\n }\n // Do several (8) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 8));\n var result = ZERO;\n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix);\n if (size < 8) {\n var power = fromNumber(pow_dbl(radix, size));\n result = op_Addition(op_Multiply(result, power), fromNumber(value));\n }\n else {\n result = op_Multiply(result, radixToPower);\n result = op_Addition(result, fromNumber(value));\n }\n }\n result.unsigned = unsigned;\n return result;\n}\nfunction getMaxValue(unsigned, radix, isNegative) {\n switch (radix) {\n case 2: return unsigned ?\n \"1111111111111111111111111111111111111111111111111111111111111111\" :\n (isNegative ? \"1000000000000000000000000000000000000000000000000000000000000000\"\n : \"111111111111111111111111111111111111111111111111111111111111111\");\n case 8: return unsigned ?\n \"1777777777777777777777\" :\n (isNegative ? \"1000000000000000000000\" : \"777777777777777777777\");\n case 10: return unsigned ?\n \"18446744073709551615\" :\n (isNegative ? \"9223372036854775808\" : \"9223372036854775807\");\n case 16: return unsigned ?\n \"FFFFFFFFFFFFFFFF\" :\n (isNegative ? \"8000000000000000\" : \"7FFFFFFFFFFFFFFF\");\n default: throw new Error(\"Invalid radix.\");\n }\n}\nexport function parse(str, style, unsigned, bitsize, radix) {\n const res = isValid(str, style, radix);\n if (res != null) {\n const lessOrEqual = (x, y) => {\n const len = Math.max(x.length, y.length);\n return x.padStart(len, \"0\") <= y.padStart(len, \"0\");\n };\n const isNegative = res.sign === \"-\";\n const maxValue = getMaxValue(unsigned || res.radix !== 10, res.radix, isNegative);\n if (lessOrEqual(res.digits.toUpperCase(), maxValue)) {\n str = isNegative ? res.sign + res.digits : res.digits;\n return fromString(str, unsigned, res.radix);\n }\n }\n throw new Error(\"Input string was not in a correct format.\");\n}\nexport function tryParse(str, style, unsigned, bitsize) {\n try {\n const v = parse(str, style, unsigned, bitsize);\n return [true, v];\n }\n catch (_a) {\n // supress error\n }\n return [false, ZERO];\n}\n/**\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromValue(val, unsigned) {\n if (typeof val === 'number')\n return fromNumber(val, unsigned);\n if (typeof val === 'string')\n return fromString(val, unsigned);\n // Throws for non-objects, converts non-instanceof Long:\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\n}\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n// no runtime penalty for these.\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_16_DBL = 1 << 16;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_24_DBL = 1 << 24;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n/**\n * @type {!Long}\n * @const\n * @inner\n */\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n/**\n * @type {!Long}\n * @inner\n */\nexport var ZERO = fromInt(0);\n/**\n * @type {!Long}\n * @inner\n */\nexport var UZERO = fromInt(0, true);\n/**\n * @type {!Long}\n * @inner\n */\nexport var ONE = fromInt(1);\n/**\n * @type {!Long}\n * @inner\n */\nexport var UONE = fromInt(1, true);\n/**\n * @type {!Long}\n * @inner\n */\nexport var NEG_ONE = fromInt(-1);\n/**\n * @type {!Long}\n * @inner\n */\nexport var MAX_VALUE = fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0, false);\n/**\n * @type {!Long}\n * @inner\n */\nexport var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF | 0, 0xFFFFFFFF | 0, true);\n/**\n * @type {!Long}\n * @inner\n */\nexport var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n/**\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n * @returns {number}\n */\nexport function toInt($this) {\n return $this.unsigned ? $this.low >>> 0 : $this.low;\n}\n;\n/**\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n * @returns {number}\n */\nexport function toNumber($this) {\n if ($this.unsigned)\n return (($this.high >>> 0) * TWO_PWR_32_DBL) + ($this.low >>> 0);\n return $this.high * TWO_PWR_32_DBL + ($this.low >>> 0);\n}\n;\n/**\n * Converts the Long to a string written in the specified radix.\n * @param {number=} radix Radix (2-36), defaults to 10\n * @returns {string}\n * @override\n * @throws {RangeError} If `radix` is out of range\n */\nexport function toString($this, radix) {\n radix = radix || 10;\n if (radix < 2 || 36 < radix)\n throw RangeError('radix');\n if (isZero($this))\n return '0';\n if (isNegative($this)) { // Unsigned Longs are never negative\n if (equals($this, MIN_VALUE)) {\n // We need to change the Long value before it can be negated, so we remove\n // the bottom-most digit in this base and then recurse to do the rest.\n var radixLong = fromNumber(radix), div = op_Division($this, radixLong), rem1 = op_Subtraction(op_Multiply(div, radixLong), $this);\n return toString(div, radix) + toInt(rem1).toString(radix);\n }\n else\n return '-' + toString(op_UnaryNegation($this), radix);\n }\n // Do several (6) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 6), $this.unsigned), rem = $this;\n var result = '';\n while (true) {\n var remDiv = op_Division(rem, radixToPower), intval = toInt(op_Subtraction(rem, op_Multiply(remDiv, radixToPower))) >>> 0, digits = intval.toString(radix);\n rem = remDiv;\n if (isZero(rem))\n return digits + result;\n else {\n while (digits.length < 6)\n digits = '0' + digits;\n result = '' + digits + result;\n }\n }\n}\n;\n/**\n * Gets the high 32 bits as a signed integer.\n * @returns {number} Signed high bits\n */\nexport function getHighBits($this) {\n return $this.high;\n}\n;\n/**\n * Gets the high 32 bits as an unsigned integer.\n * @returns {number} Unsigned high bits\n */\nexport function getHighBitsUnsigned($this) {\n return $this.high >>> 0;\n}\n;\n/**\n * Gets the low 32 bits as a signed integer.\n * @returns {number} Signed low bits\n */\nexport function getLowBits($this) {\n return $this.low;\n}\n;\n/**\n * Gets the low 32 bits as an unsigned integer.\n * @returns {number} Unsigned low bits\n */\nexport function getLowBitsUnsigned($this) {\n return $this.low >>> 0;\n}\n;\n/**\n * Gets the number of bits needed to represent the absolute value of this Long.\n * @returns {number}\n */\nexport function getNumBitsAbs($this) {\n if (isNegative($this)) // Unsigned Longs are never negative\n return equals($this, MIN_VALUE) ? 64 : getNumBitsAbs(op_UnaryNegation($this));\n var val = $this.high != 0 ? $this.high : $this.low;\n for (var bit = 31; bit > 0; bit--)\n if ((val & (1 << bit)) != 0)\n break;\n return $this.high != 0 ? bit + 33 : bit + 1;\n}\n;\n/**\n * Tests if this Long's value equals zero.\n * @returns {boolean}\n */\nexport function isZero($this) {\n return $this.high === 0 && $this.low === 0;\n}\n;\n/**\n * Tests if this Long's value is negative.\n * @returns {boolean}\n */\nexport function isNegative($this) {\n return !$this.unsigned && $this.high < 0;\n}\n;\n/**\n * Tests if this Long's value is positive.\n * @returns {boolean}\n */\nexport function isPositive($this) {\n return $this.unsigned || $this.high >= 0;\n}\n;\n/**\n * Tests if this Long's value is odd.\n * @returns {boolean}\n */\nexport function isOdd($this) {\n return ($this.low & 1) === 1;\n}\n;\n/**\n * Tests if this Long's value is even.\n * @returns {boolean}\n */\nexport function isEven($this) {\n return ($this.low & 1) === 0;\n}\n;\n/**\n * Tests if this Long's value equals the specified's.\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function equals($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n if ($this.unsigned !== other.unsigned && ($this.high >>> 31) === 1 && (other.high >>> 31) === 1)\n return false;\n return $this.high === other.high && $this.low === other.low;\n}\n;\n/**\n * Tests if this Long's value differs from the specified's.\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function notEquals($this, other) {\n return !equals($this, /* validates */ other);\n}\n;\n/**\n * Tests if this Long's value is less than the specified's.\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function lessThan($this, other) {\n return compare($this, /* validates */ other) < 0;\n}\n;\n/**\n * Tests if this Long's value is less than or equal the specified's.\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function lessThanOrEqual($this, other) {\n return compare($this, /* validates */ other) <= 0;\n}\n;\n/**\n * Tests if this Long's value is greater than the specified's.\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function greaterThan($this, other) {\n return compare($this, /* validates */ other) > 0;\n}\n;\n/**\n * Tests if this Long's value is greater than or equal the specified's.\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function greaterThanOrEqual($this, other) {\n return compare($this, /* validates */ other) >= 0;\n}\n;\n/**\n * Compares this Long's value with the specified's.\n * @param {!Long|number|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\nexport function compare($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n if (equals($this, other))\n return 0;\n var thisNeg = isNegative($this), otherNeg = isNegative(other);\n if (thisNeg && !otherNeg)\n return -1;\n if (!thisNeg && otherNeg)\n return 1;\n // At this point the sign bits are the same\n if (!$this.unsigned)\n return isNegative(op_Subtraction($this, other)) ? -1 : 1;\n // Both are positive if at least one is unsigned\n return (other.high >>> 0) > ($this.high >>> 0) || (other.high === $this.high && (other.low >>> 0) > ($this.low >>> 0)) ? -1 : 1;\n}\n;\n/**\n * Absolute value of the given number.\n */\nexport function abs($this) {\n if (!$this.unsigned && isNegative($this))\n return op_UnaryNegation($this);\n else\n return $this;\n}\n/**\n * Negates this Long's value.\n * @returns {!Long} Negated Long\n */\nexport function op_UnaryNegation($this) {\n if (!$this.unsigned && equals($this, MIN_VALUE))\n return MIN_VALUE;\n return op_Addition(op_LogicalNot($this), ONE);\n}\n;\n/**\n * Returns the sum of this and the specified Long.\n * @param {!Long|number|string} addend Addend\n * @returns {!Long} Sum\n */\nexport function op_Addition($this, addend) {\n if (!isLong(addend))\n addend = fromValue(addend);\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n var a48 = $this.high >>> 16;\n var a32 = $this.high & 0xFFFF;\n var a16 = $this.low >>> 16;\n var a00 = $this.low & 0xFFFF;\n var b48 = addend.high >>> 16;\n var b32 = addend.high & 0xFFFF;\n var b16 = addend.low >>> 16;\n var b00 = addend.low & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 + b48;\n c48 &= 0xFFFF;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, $this.unsigned);\n}\n;\n/**\n * Returns the difference of this and the specified Long.\n * @param {!Long|number|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\nexport function op_Subtraction($this, subtrahend) {\n if (!isLong(subtrahend))\n subtrahend = fromValue(subtrahend);\n return op_Addition($this, op_UnaryNegation(subtrahend));\n}\n;\n/**\n * Returns the product of this and the specified Long.\n * @param {!Long|number|string} multiplier Multiplier\n * @returns {!Long} Product\n */\nexport function op_Multiply($this, multiplier) {\n if (isZero($this))\n return $this.unsigned ? UZERO : ZERO;\n if (!isLong(multiplier))\n multiplier = fromValue(multiplier);\n // use wasm support if present\n if (wasm) {\n var low = wasm.mul($this.low, $this.high, multiplier.low, multiplier.high);\n return fromBits(low, wasm.get_high(), $this.unsigned);\n }\n if (isZero(multiplier))\n return $this.unsigned ? UZERO : ZERO;\n if (equals($this, MIN_VALUE))\n return isOdd(multiplier) ? MIN_VALUE : ZERO;\n if (equals(multiplier, MIN_VALUE))\n return isOdd($this) ? MIN_VALUE : ZERO;\n if (isNegative($this)) {\n if (isNegative(multiplier))\n return op_Multiply(op_UnaryNegation($this), op_UnaryNegation(multiplier));\n else\n return op_UnaryNegation(op_Multiply(op_UnaryNegation($this), multiplier));\n }\n else if (isNegative(multiplier))\n return op_UnaryNegation(op_Multiply($this, op_UnaryNegation(multiplier)));\n // If both longs are small, use float multiplication\n if (lessThan($this, TWO_PWR_24) && lessThan(multiplier, TWO_PWR_24))\n return fromNumber(toNumber($this) * toNumber(multiplier), $this.unsigned);\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n // We can skip products that would overflow.\n var a48 = $this.high >>> 16;\n var a32 = $this.high & 0xFFFF;\n var a16 = $this.low >>> 16;\n var a00 = $this.low & 0xFFFF;\n var b48 = multiplier.high >>> 16;\n var b32 = multiplier.high & 0xFFFF;\n var b16 = multiplier.low >>> 16;\n var b00 = multiplier.low & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xFFFF;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, $this.unsigned);\n}\n;\n/**\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\n * unsigned if this Long is unsigned.\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Quotient\n */\nexport function op_Division($this, divisor) {\n if (!isLong(divisor))\n divisor = fromValue(divisor);\n if (isZero(divisor))\n throw Error('division by zero');\n // use wasm support if present\n if (wasm) {\n // guard against signed division overflow: the largest\n // negative number / -1 would be 1 larger than the largest\n // positive number, due to two's complement.\n if (!$this.unsigned &&\n $this.high === -0x80000000 &&\n divisor.low === -1 && divisor.high === -1) {\n // be consistent with non-wasm code path\n return $this;\n }\n var low = ($this.unsigned ? wasm.div_u : wasm.div_s)($this.low, $this.high, divisor.low, divisor.high);\n return fromBits(low, wasm.get_high(), $this.unsigned);\n }\n if (isZero($this))\n return $this.unsigned ? UZERO : ZERO;\n var approx, rem, res;\n if (!$this.unsigned) {\n // This section is only relevant for signed longs and is derived from the\n // closure library as a whole.\n if (equals($this, MIN_VALUE)) {\n if (equals(divisor, ONE) || equals(divisor, NEG_ONE))\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n else if (equals(divisor, MIN_VALUE))\n return ONE;\n else {\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n var halfThis = op_RightShift($this, 1);\n approx = op_LeftShift(op_Division(halfThis, divisor), 1);\n if (equals(approx, ZERO)) {\n return isNegative(divisor) ? ONE : NEG_ONE;\n }\n else {\n rem = op_Subtraction($this, op_Multiply(divisor, approx));\n res = op_Addition(approx, op_Division(rem, divisor));\n return res;\n }\n }\n }\n else if (equals(divisor, MIN_VALUE))\n return $this.unsigned ? UZERO : ZERO;\n if (isNegative($this)) {\n if (isNegative(divisor))\n return op_Division(op_UnaryNegation($this), op_UnaryNegation(divisor));\n return op_UnaryNegation(op_Division(op_UnaryNegation($this), divisor));\n }\n else if (isNegative(divisor))\n return op_UnaryNegation(op_Division($this, op_UnaryNegation(divisor)));\n res = ZERO;\n }\n else {\n // The algorithm below has not been made for unsigned longs. It's therefore\n // required to take special care of the MSB prior to running it.\n if (!divisor.unsigned)\n divisor = toUnsigned(divisor);\n if (greaterThan(divisor, $this))\n return UZERO;\n if (greaterThan(divisor, op_RightShiftUnsigned($this, 1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\n return UONE;\n res = UZERO;\n }\n // Repeat the following until the remainder is less than other: find a\n // floating-point that approximates remainder / other *from below*, add this\n // into the result, and subtract it from the remainder. It is critical that\n // the approximate value is less than or equal to the real value so that the\n // remainder never becomes negative.\n rem = $this;\n while (greaterThanOrEqual(rem, divisor)) {\n // Approximate the result of division. This may be a little greater or\n // smaller than the actual value.\n approx = Math.max(1, Math.floor(toNumber(rem) / toNumber(divisor)));\n // We will tweak the approximate result by changing it in the 48-th digit or\n // the smallest non-fractional digit, whichever is larger.\n var log2 = Math.ceil(Math.log(approx) / Math.LN2), delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48), \n // Decrease the approximation until it is smaller than the remainder. Note\n // that if it is too large, the product overflows and is negative.\n approxRes = fromNumber(approx), approxRem = op_Multiply(approxRes, divisor);\n while (isNegative(approxRem) || greaterThan(approxRem, rem)) {\n approx -= delta;\n approxRes = fromNumber(approx, $this.unsigned);\n approxRem = op_Multiply(approxRes, divisor);\n }\n // We know the answer can't be zero... and actually, zero would cause\n // infinite recursion since we would make no progress.\n if (isZero(approxRes))\n approxRes = ONE;\n res = op_Addition(res, approxRes);\n rem = op_Subtraction(rem, approxRem);\n }\n return res;\n}\n;\n/**\n * Returns this Long modulo the specified.\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\nexport function op_Modulus($this, divisor) {\n if (!isLong(divisor))\n divisor = fromValue(divisor);\n // use wasm support if present\n if (wasm) {\n var low = ($this.unsigned ? wasm.rem_u : wasm.rem_s)($this.low, $this.high, divisor.low, divisor.high);\n return fromBits(low, wasm.get_high(), $this.unsigned);\n }\n return op_Subtraction($this, op_Multiply(op_Division($this, divisor), divisor));\n}\n;\n/**\n * Returns the bitwise NOT of this Long.\n * @returns {!Long}\n */\nexport function op_LogicalNot($this) {\n return fromBits(~$this.low, ~$this.high, $this.unsigned);\n}\n;\n/**\n * Returns the bitwise AND of this Long and the specified.\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function op_BitwiseAnd($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n return fromBits($this.low & other.low, $this.high & other.high, $this.unsigned);\n}\n;\n/**\n * Returns the bitwise OR of this Long and the specified.\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function op_BitwiseOr($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n return fromBits($this.low | other.low, $this.high | other.high, $this.unsigned);\n}\n;\n/**\n * Returns the bitwise XOR of this Long and the given one.\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function op_ExclusiveOr($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n return fromBits($this.low ^ other.low, $this.high ^ other.high, $this.unsigned);\n}\n;\n/**\n * Returns this Long with bits shifted to the left by the given amount.\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function op_LeftShift($this, numBits) {\n if (isLong(numBits))\n numBits = toInt(numBits);\n if ((numBits &= 63) === 0)\n return $this;\n else if (numBits < 32)\n return fromBits($this.low << numBits, ($this.high << numBits) | ($this.low >>> (32 - numBits)), $this.unsigned);\n else\n return fromBits(0, $this.low << (numBits - 32), $this.unsigned);\n}\n;\n/**\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function op_RightShift($this, numBits) {\n if (isLong(numBits))\n numBits = toInt(numBits);\n if ((numBits &= 63) === 0)\n return $this;\n else if (numBits < 32)\n return fromBits(($this.low >>> numBits) | ($this.high << (32 - numBits)), $this.high >> numBits, $this.unsigned);\n else\n return fromBits($this.high >> (numBits - 32), $this.high >= 0 ? 0 : -1, $this.unsigned);\n}\n;\n/**\n * Returns this Long with bits logically shifted to the right by the given amount.\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function op_RightShiftUnsigned($this, numBits) {\n if (isLong(numBits))\n numBits = toInt(numBits);\n numBits &= 63;\n if (numBits === 0)\n return $this;\n else {\n var high = $this.high;\n if (numBits < 32) {\n var low = $this.low;\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, $this.unsigned);\n }\n else if (numBits === 32)\n return fromBits(high, 0, $this.unsigned);\n else\n return fromBits(high >>> (numBits - 32), 0, $this.unsigned);\n }\n}\n;\n/**\n * Converts this Long to signed.\n * @returns {!Long} Signed long\n */\nexport function toSigned($this) {\n if (!$this.unsigned)\n return $this;\n return fromBits($this.low, $this.high, false);\n}\n;\n/**\n * Converts this Long to unsigned.\n * @returns {!Long} Unsigned long\n */\nexport function toUnsigned($this) {\n if ($this.unsigned)\n return $this;\n return fromBits($this.low, $this.high, true);\n}\n;\n/**\n * Converts this Long to its byte representation.\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @returns {!Array.} Byte representation\n */\nexport function toBytes($this, le) {\n return le ? toBytesLE($this) : toBytesBE($this);\n}\n;\n/**\n * Converts this Long to its little endian byte representation.\n * @returns {!Array.} Little endian byte representation\n */\nexport function toBytesLE($this) {\n var hi = $this.high, lo = $this.low;\n return [\n lo & 0xff,\n lo >>> 8 & 0xff,\n lo >>> 16 & 0xff,\n lo >>> 24,\n hi & 0xff,\n hi >>> 8 & 0xff,\n hi >>> 16 & 0xff,\n hi >>> 24\n ];\n}\n;\n/**\n * Converts this Long to its big endian byte representation.\n * @returns {!Array.} Big endian byte representation\n */\nexport function toBytesBE($this) {\n var hi = $this.high, lo = $this.low;\n return [\n hi >>> 24,\n hi >>> 16 & 0xff,\n hi >>> 8 & 0xff,\n hi & 0xff,\n lo >>> 24,\n lo >>> 16 & 0xff,\n lo >>> 8 & 0xff,\n lo & 0xff\n ];\n}\n;\n/**\n * Creates a Long from its byte representation.\n * @param {!Array.} bytes Byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @returns {Long} The corresponding Long value\n */\nexport function fromBytes(bytes, unsigned, le) {\n return le ? fromBytesLE(bytes, unsigned) : fromBytesBE(bytes, unsigned);\n}\n;\n/**\n * Creates a Long from its little endian byte representation.\n * @param {!Array.} bytes Little endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\nexport function fromBytesLE(bytes, unsigned) {\n return new Long(bytes[0] |\n bytes[1] << 8 |\n bytes[2] << 16 |\n bytes[3] << 24, bytes[4] |\n bytes[5] << 8 |\n bytes[6] << 16 |\n bytes[7] << 24, unsigned);\n}\n;\n/**\n * Creates a Long from its big endian byte representation.\n * @param {!Array.} bytes Big endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\nexport function fromBytesBE(bytes, unsigned) {\n return new Long(bytes[4] << 24 |\n bytes[5] << 16 |\n bytes[6] << 8 |\n bytes[7], bytes[0] << 24 |\n bytes[1] << 16 |\n bytes[2] << 8 |\n bytes[3], unsigned);\n}\n;\nexport function unixEpochMillisecondsToTicks(ms, offset) {\n return op_Multiply(op_Addition(op_Addition(fromNumber(ms), 62135596800000), offset), 10000);\n}\nexport function ticksToUnixEpochMilliseconds(ticks) {\n return toNumber(op_Subtraction(op_Division(ticks, 10000), 62135596800000));\n}\nexport function makeRangeStepFunction(step, last, unsigned) {\n const stepComparedWithZero = compare(step, unsigned ? UZERO : ZERO);\n if (stepComparedWithZero === 0) {\n throw new Error(\"The step of a range cannot be zero\");\n }\n const stepGreaterThanZero = stepComparedWithZero > 0;\n return (x) => {\n const comparedWithLast = compare(x, last);\n if ((stepGreaterThanZero && comparedWithLast <= 0)\n || (!stepGreaterThanZero && comparedWithLast >= 0)) {\n return [x, op_Addition(x, step)];\n }\n else {\n return null;\n }\n };\n}\n//# sourceMappingURL=Long.js.map","// https://github.com/MikeMcl/big.js/blob/01b3ce3a6b0ba7b42442ea48ec4ffc88d1669ec4/big.mjs\n/* tslint:disable */\nimport { combineHashCodes } from \"../Util\";\n// The shared prototype object.\nvar P = {\n GetHashCode() { return combineHashCodes([this.s, this.e].concat(this.c)); },\n Equals(x) { return !this.cmp(x); },\n CompareTo(x) { return this.cmp(x); },\n};\n/*\n * big.js v5.2.2\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\n * Copyright (c) 2018 Michael Mclaughlin \n * https://github.com/MikeMcl/big.js/LICENCE\n */\n/************************************** EDITABLE DEFAULTS *****************************************/\n// The default values below must be integers within the stated ranges.\n/*\n * The maximum number of decimal places (DP) of the results of operations involving division:\n * div and sqrt, and pow with negative exponents.\n */\nvar DP = 28, // 0 to MAX_DP\n/*\n * The rounding mode (RM) used when rounding to the above decimal places.\n *\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\n * 3 Away from zero. (ROUND_UP)\n */\nRM = 1, // 0, 1, 2 or 3\n// The maximum value of DP and Big.DP.\nMAX_DP = 1E6, // 0 to 1000000\n// The maximum magnitude of the exponent argument to the pow method.\nMAX_POWER = 1E6, // 1 to 1000000\n/*\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\n * (JavaScript numbers: -7)\n * -1000000 is the minimum recommended exponent value of a Big.\n */\nNE = -29, // 0 to -1000000\n/*\n * The positive exponent (PE) at and above which toString returns exponential notation.\n * (JavaScript numbers: 21)\n * 1000000 is the maximum recommended exponent value of a Big.\n * (This limit is not enforced or checked.)\n */\nPE = 29, // 0 to 1000000\n/**************************************************************************************************/\n// Error messages.\nNAME = '[big.js] ', INVALID = NAME + 'Invalid ', INVALID_DP = INVALID + 'decimal places', INVALID_RM = INVALID + 'rounding mode', DIV_BY_ZERO = NAME + 'Division by zero', UNDEFINED = void 0, NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\n/*\n * Create and return a Big constructor.\n *\n */\nfunction _Big_() {\n /*\n * The Big constructor and exported function.\n * Create and return a new instance of a Big number object.\n *\n * n {number|string|Big} A numeric value.\n */\n function Big(n) {\n var x = this;\n // Enable constructor usage without new.\n if (!(x instanceof Big))\n return n === UNDEFINED ? _Big_() : new Big(n);\n // Duplicate.\n if (n instanceof Big) {\n x.s = n.s;\n x.e = n.e;\n x.c = n.c.slice();\n normalize(x);\n }\n else {\n parse(x, n);\n }\n /*\n * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which\n * points to Object.\n */\n x.constructor = Big;\n }\n Big.prototype = P;\n Big.DP = DP;\n Big.RM = RM;\n Big.NE = NE;\n Big.PE = PE;\n Big.version = '5.2.2';\n return Big;\n}\nfunction normalize(x) {\n x = round(x, DP, 0);\n if (x.c.length > 1 && !x.c[0]) {\n let i = x.c.findIndex(x => x);\n x.c = x.c.slice(i);\n x.e = x.e - i;\n }\n}\n/*\n * Parse the number or string value passed to a Big constructor.\n *\n * x {Big} A Big number instance.\n * n {number|string} A numeric value.\n */\nfunction parse(x, n) {\n var e, i, nl;\n // Minus zero?\n if (n === 0 && 1 / n < 0)\n n = '-0';\n else if (!NUMERIC.test(n += ''))\n throw Error(INVALID + 'number');\n // Determine sign.\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\n // Decimal point?\n if ((e = n.indexOf('.')) > -1)\n n = n.replace('.', '');\n // Exponential form?\n if ((i = n.search(/e/i)) > 0) {\n // Determine exponent.\n if (e < 0)\n e = i;\n e += +n.slice(i + 1);\n n = n.substring(0, i);\n }\n else if (e < 0) {\n // Integer.\n e = n.length;\n }\n nl = n.length;\n // Determine leading zeros before decimal point.\n for (i = 0; i < e && i < nl && n.charAt(i) == '0';)\n ++i;\n // older version (ignores decimal point).\n // // Determine leading zeros.\n // for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\n if (i == nl) {\n // Zero.\n x.c = [x.e = 0];\n }\n else {\n x.e = e - i - 1;\n x.c = [];\n // Convert string to array of digits without leading zeros\n for (e = 0; i < nl;)\n x.c[e++] = +n.charAt(i++);\n // older version (doesn't keep trailing zeroes).\n // // Determine trailing zeros.\n // for (; nl > 0 && n.charAt(--nl) == '0';);\n // // Convert string to array of digits without leading/trailing zeros.\n // for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\n }\n x = round(x, Big.DP, Big.RM);\n return x;\n}\n/*\n * Round Big x to a maximum of dp decimal places using rounding mode rm.\n * Called by stringify, P.div, P.round and P.sqrt.\n *\n * x {Big} The Big to round.\n * dp {number} Integer, 0 to MAX_DP inclusive.\n * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)\n * [more] {boolean} Whether the result of division was truncated.\n */\nfunction round(x, dp, rm, more) {\n var xc = x.c, i = x.e + dp + 1;\n if (i < xc.length) {\n if (rm === 1) {\n // xc[i] is the digit after the digit that may be rounded up.\n more = xc[i] >= 5;\n }\n else if (rm === 2) {\n more = xc[i] > 5 || xc[i] == 5 &&\n (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);\n }\n else if (rm === 3) {\n more = more || !!xc[0];\n }\n else {\n more = false;\n if (rm !== 0)\n throw Error(INVALID_RM);\n }\n if (i < 1) {\n xc.length = 1;\n if (more) {\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n x.e = -dp;\n xc[0] = 1;\n }\n else {\n // Zero.\n xc[0] = x.e = 0;\n }\n }\n else {\n // Remove any digits after the required decimal places.\n xc.length = i--;\n // Round up?\n if (more) {\n // Rounding up may mean the previous digit has to be rounded up.\n for (; ++xc[i] > 9;) {\n xc[i] = 0;\n if (!i--) {\n ++x.e;\n xc.unshift(1);\n }\n }\n }\n // Remove trailing zeros.\n for (i = xc.length; !xc[--i];)\n xc.pop();\n }\n }\n else if (rm < 0 || rm > 3 || rm !== ~~rm) {\n throw Error(INVALID_RM);\n }\n return x;\n}\n/*\n * Return a string representing the value of Big x in normal or exponential notation.\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\n *\n * x {Big}\n * id? {number} Caller id.\n * 1 toExponential\n * 2 toFixed\n * 3 toPrecision\n * 4 valueOf\n * n? {number|undefined} Caller's argument.\n * k? {number|undefined}\n */\nfunction stringify(x, id, n, k) {\n var e, s, Big = x.constructor, z = !x.c[0];\n if (n !== UNDEFINED) {\n if (n !== ~~n || n < (id == 3) || n > MAX_DP) {\n throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);\n }\n x = new Big(x);\n // The index of the digit that may be rounded up.\n n = k - x.e;\n // Round?\n if (x.c.length > ++k)\n round(x, n, Big.RM);\n // toFixed: recalculate k as x.e may have changed if value rounded up.\n if (id == 2)\n k = x.e + n + 1;\n // Append zeros?\n for (; x.c.length < k;)\n x.c.push(0);\n }\n e = x.e;\n s = x.c.join('');\n n = s.length;\n // Exponential notation?\n if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\n // Normal notation.\n }\n else if (e < 0) {\n for (; ++e;)\n s = '0' + s;\n s = '0.' + s;\n }\n else if (e > 0) {\n if (++e > n)\n for (e -= n; e--;)\n s += '0';\n else if (e < n)\n s = s.slice(0, e) + '.' + s.slice(e);\n }\n else if (n > 1) {\n s = s.charAt(0) + '.' + s.slice(1);\n }\n return x.s < 0 && (!z || id == 4) ? '-' + s : s;\n}\n// Prototype/instance methods\n/*\n * Return a new Big whose value is the absolute value of this Big.\n */\nP.abs = function () {\n var x = new this.constructor(this);\n x.s = 1;\n return x;\n};\n/*\n * Return 1 if the value of this Big is greater than the value of Big y,\n * -1 if the value of this Big is less than the value of Big y, or\n * 0 if they have the same value.\n*/\nP.cmp = function (y) {\n var isneg, Big = this.constructor, x = new Big(this), y = new Big(y), xc = x.c, yc = y.c, i = x.s, j = y.s, k = x.e, l = y.e;\n // Either zero?\n if (!xc[0] || !yc[0])\n return !xc[0] ? !yc[0] ? 0 : -j : i;\n // Signs differ?\n if (i != j)\n return i;\n isneg = i < 0;\n // Compare exponents.\n if (k != l)\n return k > l ^ isneg ? 1 : -1;\n // Compare digit by digit.\n j = Math.max(xc.length, yc.length);\n for (i = 0; i < j; i++) {\n k = i < xc.length ? xc[i] : 0;\n l = i < yc.length ? yc[i] : 0;\n if (k != l)\n return k > l ^ isneg ? 1 : -1;\n }\n return 0;\n // old version (doesn't compare well trailing zeroes, e.g. 1.0 with 1.00)\n // j = (k = xc.length) < (l = yc.length) ? k : l;\n // // Compare digit by digit.\n // for (i = -1; ++i < j;) {\n // if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\n // }\n // // Compare lengths.\n // return k == l ? 0 : k > l ^ isneg ? 1 : -1;\n};\n/*\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\n */\nP.div = function (y) {\n var Big = this.constructor, x = new Big(this), y = new Big(y), a = x.c, // dividend\n b = y.c, // divisor\n k = x.s == y.s ? 1 : -1, dp = Big.DP;\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP)\n throw Error(INVALID_DP);\n // Divisor is zero?\n if (!b[0])\n throw Error(DIV_BY_ZERO);\n // Dividend is 0? Return +-0.\n if (!a[0])\n return new Big(k * 0);\n var bl, bt, n, cmp, ri, bz = b.slice(), ai = bl = b.length, al = a.length, r = a.slice(0, bl), // remainder\n rl = r.length, q = y, // quotient\n qc = q.c = [], qi = 0, d = dp + (q.e = x.e - y.e) + 1; // number of digits of the result\n q.s = k;\n k = d < 0 ? 0 : d;\n // Create version of divisor with leading zero.\n bz.unshift(0);\n // Add zeros to make remainder as long as divisor.\n for (; rl++ < bl;)\n r.push(0);\n do {\n // n is how many times the divisor goes into current remainder.\n for (n = 0; n < 10; n++) {\n // Compare divisor and remainder.\n if (bl != (rl = r.length)) {\n cmp = bl > rl ? 1 : -1;\n }\n else {\n for (ri = -1, cmp = 0; ++ri < bl;) {\n if (b[ri] != r[ri]) {\n cmp = b[ri] > r[ri] ? 1 : -1;\n break;\n }\n }\n }\n // If divisor < remainder, subtract divisor from remainder.\n if (cmp < 0) {\n // Remainder can't be more than 1 digit longer than divisor.\n // Equalise lengths using divisor with extra leading zero?\n for (bt = rl == bl ? b : bz; rl;) {\n if (r[--rl] < bt[rl]) {\n ri = rl;\n for (; ri && !r[--ri];)\n r[ri] = 9;\n --r[ri];\n r[rl] += 10;\n }\n r[rl] -= bt[rl];\n }\n for (; !r[0];)\n r.shift();\n }\n else {\n break;\n }\n }\n // Add the digit n to the result array.\n qc[qi++] = cmp ? n : ++n;\n // Update the remainder.\n if (r[0] && cmp)\n r[rl] = a[ai] || 0;\n else\n r = [a[ai]];\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\n // Leading zero? Do not remove if result is simply zero (qi == 1).\n if (!qc[0] && qi != 1) {\n // There can't be more than one zero.\n qc.shift();\n q.e--;\n }\n // Round?\n if (qi > d)\n round(q, dp, Big.RM, r[0] !== UNDEFINED);\n return q;\n};\n/*\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\n */\nP.eq = function (y) {\n return !this.cmp(y);\n};\n/*\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\n * false.\n */\nP.gt = function (y) {\n return this.cmp(y) > 0;\n};\n/*\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\n * return false.\n */\nP.gte = function (y) {\n return this.cmp(y) > -1;\n};\n/*\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\n */\nP.lt = function (y) {\n return this.cmp(y) < 0;\n};\n/*\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\n * return false.\n */\nP.lte = function (y) {\n return this.cmp(y) < 1;\n};\n/*\n * Return a new Big whose value is the value of this Big minus the value of Big y.\n */\nP.minus = P.sub = function (y) {\n var i, j, t, xlty, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n // Signs differ?\n if (a != b) {\n y.s = -b;\n return x.plus(y);\n }\n var xc = x.c.slice(), xe = x.e, yc = y.c, ye = y.e;\n // Either zero?\n if (!xc[0] || !yc[0]) {\n // y is non-zero? x is non-zero? Or both are zero.\n return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);\n }\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\n if (a = xe - ye) {\n if (xlty = a < 0) {\n a = -a;\n t = xc;\n }\n else {\n ye = xe;\n t = yc;\n }\n t.reverse();\n for (b = a; b--;)\n t.push(0);\n t.reverse();\n }\n else {\n // Exponents equal. Check digit by digit.\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\n for (a = b = 0; b < j; b++) {\n if (xc[b] != yc[b]) {\n xlty = xc[b] < yc[b];\n break;\n }\n }\n }\n // x < y? Point xc to the array of the bigger number.\n if (xlty) {\n t = xc;\n xc = yc;\n yc = t;\n y.s = -y.s;\n }\n /*\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\n * needs to start at yc.length.\n */\n if ((b = (j = yc.length) - (i = xc.length)) > 0)\n for (; b--;)\n xc[i++] = 0;\n // Subtract yc from xc.\n for (b = i; j > a;) {\n if (xc[--j] < yc[j]) {\n for (i = j; i && !xc[--i];)\n xc[i] = 9;\n --xc[i];\n xc[j] += 10;\n }\n xc[j] -= yc[j];\n }\n // Remove trailing zeros.\n for (; xc[--b] === 0;)\n xc.pop();\n // Remove leading zeros and adjust exponent accordingly.\n for (; xc[0] === 0;) {\n xc.shift();\n --ye;\n }\n if (!xc[0]) {\n // n - n = +0\n y.s = 1;\n // Result must be zero.\n xc = [ye = 0];\n }\n y.c = xc;\n y.e = ye;\n return y;\n};\n/*\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\n */\nP.mod = function (y) {\n var ygtx, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n if (!y.c[0])\n throw Error(DIV_BY_ZERO);\n x.s = y.s = 1;\n ygtx = y.cmp(x) == 1;\n x.s = a;\n y.s = b;\n if (ygtx)\n return new Big(x);\n a = Big.DP;\n b = Big.RM;\n Big.DP = Big.RM = 0;\n x = x.div(y);\n Big.DP = a;\n Big.RM = b;\n return this.minus(x.times(y));\n};\n/*\n * Return a new Big whose value is the value of this Big plus the value of Big y.\n */\nP.plus = P.add = function (y) {\n var t, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n // Signs differ?\n if (a != b) {\n y.s = -b;\n return x.minus(y);\n }\n var xe = x.e, xc = x.c, ye = y.e, yc = y.c;\n // Either zero? y is non-zero? x is non-zero? Or both are zero.\n if (!xc[0] || !yc[0])\n return yc[0] ? y : new Big(xc[0] ? x : a * 0);\n xc = xc.slice();\n // Prepend zeros to equalise exponents.\n // Note: reverse faster than unshifts.\n if (a = xe - ye) {\n if (a > 0) {\n ye = xe;\n t = yc;\n }\n else {\n a = -a;\n t = xc;\n }\n t.reverse();\n for (; a--;)\n t.push(0);\n t.reverse();\n }\n // Point xc to the longer array.\n if (xc.length - yc.length < 0) {\n t = yc;\n yc = xc;\n xc = t;\n }\n a = yc.length;\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\n for (b = 0; a; xc[a] %= 10)\n b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n if (b) {\n xc.unshift(b);\n ++ye;\n }\n // Remove trailing zeros.\n for (a = xc.length; xc[--a] === 0;)\n xc.pop();\n y.c = xc;\n y.e = ye;\n return y;\n};\n/*\n * Return a Big whose value is the value of this Big raised to the power n.\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\n * mode Big.RM.\n *\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\n */\nP.pow = function (n) {\n var Big = this.constructor, x = new Big(this), y = new Big(1), one = new Big(1), isneg = n < 0;\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER)\n throw Error(INVALID + 'exponent');\n if (isneg)\n n = -n;\n for (;;) {\n if (n & 1)\n y = y.times(x);\n n >>= 1;\n if (!n)\n break;\n x = x.times(x);\n }\n return isneg ? one.div(y) : y;\n};\n/*\n * Return a new Big whose value is the value of this Big rounded using rounding mode rm\n * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a\n * multiple of 10**-dp.\n * If dp is not specified, round to 0 decimal places.\n * If rm is not specified, use Big.RM.\n *\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\n * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)\n */\nP.round = function (dp, rm) {\n var Big = this.constructor;\n if (dp === UNDEFINED)\n dp = 0;\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP)\n throw Error(INVALID_DP);\n return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);\n};\n/*\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\n */\nP.sqrt = function () {\n var r, c, t, Big = this.constructor, x = new Big(this), s = x.s, e = x.e, half = new Big(0.5);\n // Zero?\n if (!x.c[0])\n return new Big(x);\n // Negative?\n if (s < 0)\n throw Error(NAME + 'No square root');\n // Estimate.\n s = Math.sqrt(x + '');\n // Math.sqrt underflow/overflow?\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\n if (s === 0 || s === 1 / 0) {\n c = x.c.join('');\n if (!(c.length + e & 1))\n c += '0';\n s = Math.sqrt(c);\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\n r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\n }\n else {\n r = new Big(s);\n }\n e = r.e + (Big.DP += 4);\n // Newton-Raphson iteration.\n do {\n t = r;\n r = half.times(t.plus(x.div(t)));\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\n return round(r, Big.DP -= 4, Big.RM);\n};\n/*\n * Return a new Big whose value is the value of this Big times the value of Big y.\n */\nP.times = P.mul = function (y) {\n var c, Big = this.constructor, x = new Big(this), y = new Big(y), xc = x.c, yc = y.c, a = xc.length, b = yc.length, i = x.e, j = y.e;\n // Determine sign of result.\n y.s = x.s == y.s ? 1 : -1;\n // Return signed 0 if either 0.\n if (!xc[0] || !yc[0])\n return new Big(y.s * 0);\n // Initialise exponent of result as x.e + y.e.\n y.e = i + j;\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\n if (a < b) {\n c = xc;\n xc = yc;\n yc = c;\n j = a;\n a = b;\n b = j;\n }\n // Initialise coefficient array of result with zeros.\n for (c = new Array(j = a + b); j--;)\n c[j] = 0;\n // Multiply.\n // i is initially xc.length.\n for (i = b; i--;) {\n b = 0;\n // a is yc.length.\n for (j = a + i; j > i;) {\n // Current sum of products at this digit position, plus carry.\n b = c[j] + yc[i] * xc[j - i - 1] + b;\n c[j--] = b % 10;\n // carry\n b = b / 10 | 0;\n }\n c[j] = (c[j] + b) % 10;\n }\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\n if (b)\n ++y.e;\n else\n c.shift();\n // Remove trailing zeros.\n for (i = c.length; !c[--i];)\n c.pop();\n y.c = c;\n return y;\n};\n/*\n * Return a string representing the value of this Big in exponential notation to dp fixed decimal\n * places and rounded using Big.RM.\n *\n * dp? {number} Integer, 0 to MAX_DP inclusive.\n */\nP.toExponential = function (dp) {\n return stringify(this, 1, dp, dp);\n};\n/*\n * Return a string representing the value of this Big in normal notation to dp fixed decimal\n * places and rounded using Big.RM.\n *\n * dp? {number} Integer, 0 to MAX_DP inclusive.\n *\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\n */\nP.toFixed = function (dp) {\n return stringify(this, 2, dp, this.e + dp);\n};\n/*\n * Return a string representing the value of this Big rounded to sd significant digits using\n * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent\n * the integer part of the value in normal notation.\n *\n * sd {number} Integer, 1 to MAX_DP inclusive.\n */\nP.toPrecision = function (sd) {\n return stringify(this, 3, sd, sd - 1);\n};\n/*\n * Return a string representing the value of this Big.\n * Return exponential notation if this Big has a positive exponent equal to or greater than\n * Big.PE, or a negative exponent equal to or less than Big.NE.\n * Omit the sign for negative zero.\n */\nP.toString = function () {\n return stringify(this);\n};\n/*\n * Return a string representing the value of this Big.\n * Return exponential notation if this Big has a positive exponent equal to or greater than\n * Big.PE, or a negative exponent equal to or less than Big.NE.\n * Include the sign for negative zero.\n */\nP.valueOf = P.toJSON = function () {\n return stringify(this, 4);\n};\n// Export\nexport var Big = _Big_();\nexport default Big;\n//# sourceMappingURL=big.js.map","import Decimal from \"./lib/big\";\nexport default Decimal;\nexport const get_Zero = new Decimal(0);\nexport const get_One = new Decimal(1);\nexport const get_MinusOne = new Decimal(-1);\nexport const get_MaxValue = new Decimal(\"79228162514264337593543950335\");\nexport const get_MinValue = new Decimal(\"-79228162514264337593543950335\");\nexport function compare(x, y) {\n return x.cmp(y);\n}\nexport function equals(x, y) {\n return !x.cmp(y);\n}\nexport function abs(x) {\n return x.abs();\n}\nexport function round(x, digits = 0) {\n return x.round(digits, 2 /* ROUND_HALF_EVEN */);\n}\nexport function truncate(x) {\n return x.round(0, 0 /* ROUND_DOWN */);\n}\nexport function ceiling(x) {\n return x.round(0, x.cmp(0) >= 0 ? 3 /* ROUND_UP */ : 0 /* ROUND_DOWN */);\n}\nexport function floor(x) {\n return x.round(0, x.cmp(0) >= 0 ? 0 /* ROUND_DOWN */ : 3 /* ROUND_UP */);\n}\nexport function pow(x, n) {\n return x.pow(n);\n}\nexport function sqrt(x) {\n return x.sqrt();\n}\nexport function op_Addition(x, y) {\n return x.add(y);\n}\nexport function op_Subtraction(x, y) {\n return x.sub(y);\n}\nexport function op_Multiply(x, y) {\n return x.mul(y);\n}\nexport function op_Division(x, y) {\n return x.div(y);\n}\nexport function op_Modulus(x, y) {\n return x.mod(y);\n}\nexport function op_UnaryNegation(x) {\n const x2 = new Decimal(x);\n x2.s = -x2.s || 0;\n return x2;\n}\nexport const add = op_Addition;\nexport const subtract = op_Subtraction;\nexport const multiply = op_Multiply;\nexport const divide = op_Division;\nexport const remainder = op_Modulus;\nexport const negate = op_UnaryNegation;\nexport function toString(x) {\n return x.toString();\n}\nexport function tryParse(str) {\n try {\n return [true, new Decimal(str.trim())];\n }\n catch (_a) {\n return [false, get_Zero];\n }\n}\nexport function parse(str) {\n const [ok, value] = tryParse(str);\n if (ok) {\n return value;\n }\n else {\n throw new Error(\"Input string was not in a correct format.\");\n }\n}\nexport function toNumber(x) {\n return +x;\n}\nfunction decimalToHex(dec, bitSize) {\n const hex = new Uint8Array(bitSize / 4 | 0);\n let hexCount = 1;\n for (let d = 0; d < dec.length; d++) {\n let value = dec[d];\n for (let i = 0; i < hexCount; i++) {\n const digit = hex[i] * 10 + value | 0;\n hex[i] = digit & 0xF;\n value = digit >> 4;\n }\n if (value !== 0) {\n hex[hexCount++] = value;\n }\n }\n return hex.slice(0, hexCount); // digits in reverse order\n}\nfunction hexToDecimal(hex, bitSize) {\n const dec = new Uint8Array(bitSize * 301 / 1000 + 1 | 0);\n let decCount = 1;\n for (let d = hex.length - 1; d >= 0; d--) {\n let carry = hex[d];\n for (let i = 0; i < decCount; i++) {\n const val = dec[i] * 16 + carry | 0;\n dec[i] = (val % 10) | 0;\n carry = (val / 10) | 0;\n }\n while (carry > 0) {\n dec[decCount++] = (carry % 10) | 0;\n carry = (carry / 10) | 0;\n }\n }\n return dec.slice(0, decCount); // digits in reverse order\n}\nfunction setInt32Bits(hexDigits, bits, offset) {\n for (let i = 0; i < 8; i++) {\n hexDigits[offset + i] = (bits >> (i * 4)) & 0xF;\n }\n}\nfunction getInt32Bits(hexDigits, offset) {\n let bits = 0;\n for (let i = 0; i < 8; i++) {\n bits = bits | (hexDigits[offset + i] << (i * 4));\n }\n return bits;\n}\nexport function fromIntArray(bits) {\n return fromInts(bits[0], bits[1], bits[2], bits[3]);\n}\nexport function fromInts(low, mid, high, signExp) {\n const isNegative = signExp < 0;\n const scale = (signExp >> 16) & 0x7F;\n return fromParts(low, mid, high, isNegative, scale);\n}\nexport function fromParts(low, mid, high, isNegative, scale) {\n const bitSize = 96;\n const hexDigits = new Uint8Array(bitSize / 4);\n setInt32Bits(hexDigits, low, 0);\n setInt32Bits(hexDigits, mid, 8);\n setInt32Bits(hexDigits, high, 16);\n const decDigits = hexToDecimal(hexDigits, bitSize);\n scale = scale & 0x7F;\n const big = new Decimal(0);\n big.c = Array.from(decDigits.reverse());\n big.e = decDigits.length - scale - 1;\n big.s = isNegative ? -1 : 1;\n const d = new Decimal(big);\n return d;\n}\nexport function getBits(d) {\n const bitSize = 96;\n const decDigits = Uint8Array.from(d.c);\n const hexDigits = decimalToHex(decDigits, bitSize);\n const low = getInt32Bits(hexDigits, 0);\n const mid = getInt32Bits(hexDigits, 8);\n const high = getInt32Bits(hexDigits, 16);\n const decStr = d.toString();\n const dotPos = decStr.indexOf(\".\");\n const scale = dotPos < 0 ? 0 : decStr.length - dotPos - 1;\n const signExp = ((scale & 0x7F) << 16) | (d.s < 0 ? 0x80000000 : 0);\n return [low, mid, high, signExp];\n}\nexport function makeRangeStepFunction(step, last) {\n const stepComparedWithZero = step.cmp(get_Zero);\n if (stepComparedWithZero === 0) {\n throw new Error(\"The step of a range cannot be zero\");\n }\n const stepGreaterThanZero = stepComparedWithZero > 0;\n return (x) => {\n const comparedWithLast = x.cmp(last);\n if ((stepGreaterThanZero && comparedWithLast <= 0)\n || (!stepGreaterThanZero && comparedWithLast >= 0)) {\n return [x, op_Addition(x, step)];\n }\n else {\n return null;\n }\n };\n}\n//# sourceMappingURL=Decimal.js.map","import { combineHashCodes, compare, compareArrays, equals, equalArrays, identityHash, structuralHash, numberHash } from \"./Util\";\nfunction sameType(x, y) {\n return y != null && Object.getPrototypeOf(x).constructor === Object.getPrototypeOf(y).constructor;\n}\n// Taken from Babel helpers\nfunction inherits(subClass, superClass) {\n // if (typeof superClass !== \"function\" && superClass !== null) {\n // throw new TypeError(\n // \"Super expression must either be null or a function, not \" +\n // typeof superClass\n // );\n // }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n });\n // if (superClass)\n // Object.setPrototypeOf\n // ? Object.setPrototypeOf(subClass, superClass)\n // : (subClass.__proto__ = superClass);\n}\nexport function declare(cons, superClass) {\n inherits(cons, superClass || SystemObject);\n return cons;\n}\nexport function SystemObject() {\n}\nSystemObject.prototype.toString = function () {\n return \"{\" + Object.keys(this).map(k => k + \" = \" + String(this[k])).join(\";\\n \") + \"}\";\n};\nSystemObject.prototype.GetHashCode = function () {\n return identityHash(this);\n};\nSystemObject.prototype.Equals = function (other) {\n return this === other;\n};\nfunction compareList(self, other) {\n if (self === other) {\n return 0;\n }\n else {\n if (other == null) {\n return -1;\n }\n while (self.tail != null) {\n if (other.tail == null) {\n return 1;\n }\n const res = compare(self.head, other.head);\n if (res !== 0) {\n return res;\n }\n self = self.tail;\n other = other.tail;\n }\n return other.tail == null ? 0 : -1;\n }\n}\nexport function List(head, tail) {\n this.head = head;\n this.tail = tail;\n}\nList.prototype.toString = function () {\n return \"[\" + Array.from(this).map(x => String(x)).join(\"; \") + \"]\";\n};\nList.prototype.toJSON = function () {\n return Array.from(this);\n};\nList.prototype[Symbol.iterator] = function () {\n let cur = this;\n return {\n next: () => {\n const tmp = cur;\n cur = cur.tail;\n return { done: tmp.tail == null, value: tmp.head };\n },\n };\n};\nList.prototype.GetHashCode = function () {\n const hashes = Array.from(this).map(structuralHash);\n return combineHashCodes(hashes);\n};\nList.prototype.Equals = function (other) {\n return compareList(this, other) === 0;\n};\nList.prototype.CompareTo = function (other) {\n return compareList(this, other);\n};\nexport function Union(tag, name, ...fields) {\n this.tag = tag | 0;\n this.name = name;\n this.fields = fields;\n}\nUnion.prototype.toString = function () {\n const len = this.fields.length;\n if (len === 0) {\n return this.name;\n }\n else if (len === 1) {\n return this.name + \" \" + String(this.fields[0]);\n }\n else {\n return this.name + \" (\" + this.fields.map(x => String(x)).join(\",\") + \")\";\n }\n};\nUnion.prototype.toJSON = function () {\n return this.fields.length === 0\n ? this.name\n : [this.name].concat(this.fields);\n};\nUnion.prototype.GetHashCode = function () {\n let hashes = this.fields.map(x => structuralHash(x));\n hashes.splice(0, 0, numberHash(this.tag));\n return combineHashCodes(hashes);\n};\nUnion.prototype.Equals = function (other) {\n return this === other\n || (sameType(this, other)\n && this.tag === other.tag\n && equalArrays(this.fields, other.fields));\n};\nUnion.prototype.CompareTo = function (other) {\n if (this === other) {\n return 0;\n }\n else if (!sameType(this, other)) {\n return -1;\n }\n else if (this.tag === other.tag) {\n return compareArrays(this.fields, other.fields);\n }\n else {\n return this.tag < other.tag ? -1 : 1;\n }\n};\nfunction recordToJson(record, getFieldNames) {\n const o = {};\n const keys = getFieldNames == null ? Object.keys(record) : getFieldNames(record);\n for (let i = 0; i < keys.length; i++) {\n o[keys[i]] = record[keys[i]];\n }\n return o;\n}\nfunction recordEquals(self, other, getFieldNames) {\n if (self === other) {\n return true;\n }\n else if (!sameType(self, other)) {\n return false;\n }\n else {\n const thisNames = getFieldNames == null ? Object.keys(self) : getFieldNames(self);\n for (let i = 0; i < thisNames.length; i++) {\n if (!equals(self[thisNames[i]], other[thisNames[i]])) {\n return false;\n }\n }\n return true;\n }\n}\nfunction recordCompare(self, other, getFieldNames) {\n if (self === other) {\n return 0;\n }\n else if (!sameType(self, other)) {\n return -1;\n }\n else {\n const thisNames = getFieldNames == null ? Object.keys(self) : getFieldNames(self);\n for (let i = 0; i < thisNames.length; i++) {\n const result = compare(self[thisNames[i]], other[thisNames[i]]);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n }\n}\nexport function Record() {\n}\nRecord.prototype.toString = function () {\n return \"{\" + Object.keys(this).map(k => k + \" = \" + String(this[k])).join(\";\\n \") + \"}\";\n};\nRecord.prototype.toJSON = function () {\n return recordToJson(this);\n};\nRecord.prototype.GetHashCode = function () {\n const hashes = Object.keys(this).map(k => structuralHash(this[k]));\n return combineHashCodes(hashes);\n};\nRecord.prototype.Equals = function (other) {\n return recordEquals(this, other);\n};\nRecord.prototype.CompareTo = function (other) {\n return recordCompare(this, other);\n};\nexport function anonRecord(o) {\n return Object.assign(Object.create(Record.prototype), o);\n}\nexport const FSharpRef = declare(function FSharpRef(contents) {\n this.contents = contents;\n}, Record);\n// EXCEPTIONS\nexport const Exception = declare(function Exception(msg) {\n this.stack = Error().stack;\n this.message = msg;\n});\nexport function isException(x) {\n return x instanceof Error || x instanceof Exception;\n}\nfunction getFSharpExceptionFieldNames(self) {\n return Object.keys(self).filter(k => k !== \"message\" && k !== \"stack\");\n}\nexport const FSharpException = declare(function FSharpException() {\n Exception.call(this);\n}, Exception);\nFSharpException.prototype.toString = function () {\n const fieldNames = getFSharpExceptionFieldNames(this);\n const len = fieldNames.length;\n if (len === 0) {\n return this.message;\n }\n else if (len === 1) {\n return this.message + \" \" + String(this[fieldNames[0]]);\n }\n else {\n return this.message + \" (\" + fieldNames.map(k => String(this[k])).join(\",\") + \")\";\n }\n};\nFSharpException.prototype.toJSON = function () {\n return recordToJson(this, getFSharpExceptionFieldNames);\n};\nFSharpException.prototype.GetHashCode = function () {\n const hashes = getFSharpExceptionFieldNames(this).map(k => structuralHash(this[k]));\n return combineHashCodes(hashes);\n};\nFSharpException.prototype.Equals = function (other) {\n return recordEquals(this, other, getFSharpExceptionFieldNames);\n};\nFSharpException.prototype.CompareTo = function (other) {\n return recordCompare(this, other, getFSharpExceptionFieldNames);\n};\nexport const MatchFailureException = declare(function MatchFailureException(arg1, arg2, arg3) {\n this.arg1 = arg1;\n this.arg2 = arg2 | 0;\n this.arg3 = arg3 | 0;\n this.message = \"The match cases were incomplete\";\n}, FSharpException);\nexport const Attribute = declare(function Attribute() { });\n//# sourceMappingURL=Types.js.map","import { declare, Union } from \"./Types\";\nimport { compare, equals, structuralHash } from \"./Util\";\n// Options are erased in runtime by Fable, but we have\n// the `Some` type below to wrap values that would evaluate\n// to null in runtime. These two rules must be followed:\n// 1- None is always null in runtime, a non-strict null check\n// (`x == null`) is enough to check the case of an option.\n// 2- To get the value of an option the `getValue` helper\n// below must **always** be used.\n// export type Option = T | Some;\n// Using a class here for better compatibility with TS files importing Some\nexport class Some {\n constructor(value) {\n this.value = value;\n }\n // Don't add \"Some\" for consistency with erased options\n toString() {\n return String(this.value);\n }\n toJSON() {\n return this.value;\n }\n GetHashCode() {\n return structuralHash(this.value);\n }\n Equals(other) {\n return other == null\n ? false\n : equals(this.value, other instanceof Some ? other.value : other);\n }\n CompareTo(other) {\n return other == null\n ? 1\n : compare(this.value, other instanceof Some ? other.value : other);\n }\n}\nexport function some(x) {\n return x == null || x instanceof Some ? new Some(x) : x;\n}\nexport function value(x, acceptNull) {\n if (x == null) {\n if (!acceptNull) {\n throw new Error(\"Option has no value\");\n }\n return null;\n }\n else {\n return x instanceof Some ? x.value : x;\n }\n}\nexport function defaultArg(arg, defaultValue, f) {\n return arg == null ? defaultValue : (f != null ? f(value(arg)) : value(arg));\n}\nexport function defaultArgWith(arg, defThunk) {\n return arg == null ? defThunk() : value(arg);\n}\nexport function filter(predicate, arg) {\n return arg != null ? (!predicate(value(arg)) ? null : arg) : arg;\n}\nexport function map(predicate, ...args) {\n return args.every(x => x != null) ? predicate.apply(null, args) : null;\n}\n// CHOICE\nexport const Choice = declare(function Choice(tag, name, field) {\n Union.call(this, tag, name, field);\n}, Union);\nexport function choice1(x) {\n return new Choice(0, \"Choice1Of2\", x);\n}\nexport function choice2(x) {\n return new Choice(1, \"Choice2Of2\", x);\n}\nexport function tryValueIfChoice1(x) {\n return x.tag === 0 ? some(x.fields[0]) : null;\n}\nexport function tryValueIfChoice2(x) {\n return x.tag === 1 ? some(x.fields[0]) : null;\n}\n// RESULT\nexport const Result = declare(function Result(tag, name, field) {\n Union.call(this, tag, name, field);\n}, Union);\nexport function ok(x) {\n return new Result(0, \"Ok\", x);\n}\nexport function error(x) {\n return new Result(1, \"Error\", x);\n}\nexport function mapOk(f, result) {\n return result.tag === 0 ? ok(f(result.fields[0])) : result;\n}\nexport function mapError(f, result) {\n return result.tag === 1 ? error(f(result.fields[0])) : result;\n}\nexport function bindOk(f, result) {\n return result.tag === 0 ? f(result.fields[0]) : result;\n}\n//# sourceMappingURL=Option.js.map","import { makeRangeStepFunction as makeLongRangeStepFunction } from \"./Long\";\nimport { makeRangeStepFunction as makeDecimalRangeStepFunction } from \"./Decimal\";\nimport { some, value } from \"./Option\";\nimport { compare, equals } from \"./Util\";\nexport class Enumerator {\n constructor(iter) {\n this.iter = iter;\n }\n MoveNext() {\n const cur = this.iter.next();\n this.current = cur.value;\n return !cur.done;\n }\n get Current() {\n return this.current;\n }\n Reset() {\n throw new Error(\"JS iterators cannot be reset\");\n }\n Dispose() {\n return;\n }\n}\nexport function getEnumerator(o) {\n return new Enumerator(o[Symbol.iterator]());\n}\nexport function toIterator(en) {\n return {\n next() {\n return en.MoveNext()\n ? { done: false, value: en.Current }\n : { done: true, value: null };\n },\n };\n}\n// export function toIterable(en: IEnumerable): Iterable {\n// return {\n// [Symbol.iterator]() {\n// return toIterator(en.GetEnumerator());\n// },\n// };\n// }\nfunction __failIfNone(res) {\n if (res == null) {\n throw new Error(\"Seq did not contain any matching element\");\n }\n return value(res);\n}\nexport function ofArray(xs) {\n return delay(() => unfold((i) => i < xs.length ? [xs[i], i + 1] : null, 0));\n}\nexport function allPairs(xs, ys) {\n let firstEl = true;\n const ysCache = [];\n return collect((x) => {\n if (firstEl) {\n firstEl = false;\n return map((y) => {\n ysCache.push(y);\n return [x, y];\n }, ys);\n }\n else {\n return ysCache.map(y => [x, y]);\n // return map(function (i) {\n // return [x, ysCache[i]];\n // }, rangeNumber(0, 1, ysCache.length - 1));\n }\n }, xs);\n}\nexport function append(xs, ys) {\n return delay(() => {\n let firstDone = false;\n const i = xs[Symbol.iterator]();\n let iters = [i, null];\n return unfold(() => {\n let cur;\n if (!firstDone) {\n cur = iters[0].next();\n if (!cur.done) {\n return [cur.value, iters];\n }\n else {\n firstDone = true;\n iters = [null, ys[Symbol.iterator]()];\n }\n }\n cur = iters[1].next();\n return !cur.done ? [cur.value, iters] : null;\n }, iters);\n });\n}\nexport function average(xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count++;\n return averager.Add(acc, x);\n }, averager.GetZero(), xs);\n return averager.DivideByInt(total, count);\n}\nexport function averageBy(f, xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count++;\n return averager.Add(acc, f(x));\n }, averager.GetZero(), xs);\n return averager.DivideByInt(total, count);\n}\nexport function concat(xs) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n let output = { value: null };\n return unfold((innerIter) => {\n let hasFinished = false;\n while (!hasFinished) {\n if (innerIter == null) {\n const cur = iter.next();\n if (!cur.done) {\n innerIter = cur.value[Symbol.iterator]();\n }\n else {\n hasFinished = true;\n }\n }\n else {\n const cur = innerIter.next();\n if (!cur.done) {\n output = { value: cur.value };\n hasFinished = true;\n }\n else {\n innerIter = null;\n }\n }\n }\n return innerIter != null && output != null ? [output.value, innerIter] : null;\n }, null);\n });\n}\nexport function collect(f, xs) {\n return concat(map(f, xs));\n}\nexport function choose(f, xs) {\n return delay(() => unfold((iter) => {\n let cur = iter.next();\n while (!cur.done) {\n const y = f(cur.value);\n if (y != null) {\n return [value(y), iter];\n }\n cur = iter.next();\n }\n return null;\n }, xs[Symbol.iterator]()));\n}\nexport function compareWith(f, xs, ys) {\n const nonZero = tryFind((i) => i !== 0, map2((x, y) => f(x, y), xs, ys));\n return nonZero != null ? value(nonZero) : length(xs) - length(ys);\n}\nexport function delay(f) {\n return {\n [Symbol.iterator]: () => f()[Symbol.iterator](),\n };\n}\nexport function empty() {\n return unfold(() => void 0);\n}\nexport function enumerateFromFunctions(factory, moveNext, current) {\n return delay(() => unfold((e) => moveNext(e) ? [current(e), e] : null, factory()));\n}\nexport function enumerateWhile(cond, xs) {\n return concat(unfold(() => cond() ? [xs, true] : null));\n}\nexport function enumerateThenFinally(xs, finalFn) {\n return delay(() => {\n let iter;\n try {\n iter = xs[Symbol.iterator]();\n }\n catch (err) {\n return void 0;\n }\n finally {\n finalFn();\n }\n return unfold((it) => {\n try {\n const cur = it.next();\n return !cur.done ? [cur.value, it] : null;\n }\n catch (err) {\n return void 0;\n }\n finally {\n finalFn();\n }\n }, iter);\n });\n}\nexport function enumerateUsing(disp, work) {\n let isDisposed = false;\n const disposeOnce = () => {\n if (!isDisposed) {\n isDisposed = true;\n disp.Dispose();\n }\n };\n try {\n return enumerateThenFinally(work(disp), disposeOnce);\n }\n catch (err) {\n return void 0;\n }\n finally {\n disposeOnce();\n }\n}\nexport function exactlyOne(xs) {\n const iter = xs[Symbol.iterator]();\n const fst = iter.next();\n if (fst.done) {\n throw new Error(\"Seq was empty\");\n }\n const snd = iter.next();\n if (!snd.done) {\n throw new Error(\"Seq had multiple items\");\n }\n return fst.value;\n}\nexport function except(itemsToExclude, source) {\n const exclusionItems = Array.from(itemsToExclude);\n const testIsNotInExclusionItems = (element) => !exclusionItems.some((excludedItem) => equals(excludedItem, element));\n return filter(testIsNotInExclusionItems, source);\n}\nexport function exists(f, xs) {\n let cur;\n for (const iter = xs[Symbol.iterator]();;) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n if (f(cur.value)) {\n return true;\n }\n }\n return false;\n}\nexport function exists2(f, xs, ys) {\n let cur1;\n let cur2;\n for (const iter1 = xs[Symbol.iterator](), iter2 = ys[Symbol.iterator]();;) {\n cur1 = iter1.next();\n cur2 = iter2.next();\n if (cur1.done || cur2.done) {\n break;\n }\n if (f(cur1.value, cur2.value)) {\n return true;\n }\n }\n return false;\n}\nexport function forAll(f, xs) {\n return !exists((x) => !f(x), xs);\n}\nexport function forAll2(f, xs, ys) {\n return !exists2((x, y) => !f(x, y), xs, ys);\n}\nexport function contains(i, xs) {\n return exists((x) => equals(x, i), xs);\n}\nexport function filter(f, xs) {\n return delay(() => unfold((iter) => {\n let cur = iter.next();\n while (!cur.done) {\n if (f(cur.value)) {\n return [cur.value, iter];\n }\n cur = iter.next();\n }\n return null;\n }, xs[Symbol.iterator]()));\n}\nexport function where(f, xs) {\n return filter(f, xs);\n}\nexport function fold(f, acc, xs) {\n if (Array.isArray(xs) || ArrayBuffer.isView(xs)) {\n return xs.reduce(f, acc);\n }\n else {\n let cur;\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n acc = f(acc, cur.value, i);\n }\n return acc;\n }\n}\nexport function foldBack(f, xs, acc) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n for (let i = arr.length - 1; i >= 0; i--) {\n acc = f(arr[i], acc, i);\n }\n return acc;\n}\nexport function fold2(f, acc, xs, ys) {\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n let cur1;\n let cur2;\n for (let i = 0;; i++) {\n cur1 = iter1.next();\n cur2 = iter2.next();\n if (cur1.done || cur2.done) {\n break;\n }\n acc = f(acc, cur1.value, cur2.value, i);\n }\n return acc;\n}\nexport function foldBack2(f, xs, ys, acc) {\n const ar1 = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n const ar2 = Array.isArray(ys) || ArrayBuffer.isView(ys) ? ys : Array.from(ys);\n for (let i = ar1.length - 1; i >= 0; i--) {\n acc = f(ar1[i], ar2[i], acc, i);\n }\n return acc;\n}\nexport function tryHead(xs) {\n const iter = xs[Symbol.iterator]();\n const cur = iter.next();\n return cur.done ? null : some(cur.value);\n}\nexport function head(xs) {\n return __failIfNone(tryHead(xs));\n}\nexport function initialize(n, f) {\n return delay(() => unfold((i) => i < n ? [f(i), i + 1] : null, 0));\n}\nexport function initializeInfinite(f) {\n return delay(() => unfold((i) => [f(i), i + 1], 0));\n}\nexport function tryItem(i, xs) {\n if (i < 0) {\n return null;\n }\n if (Array.isArray(xs) || ArrayBuffer.isView(xs)) {\n return i < xs.length ? some(xs[i]) : null;\n }\n for (let j = 0, iter = xs[Symbol.iterator]();; j++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n if (j === i) {\n return some(cur.value);\n }\n }\n return null;\n}\nexport function item(i, xs) {\n return __failIfNone(tryItem(i, xs));\n}\nexport function iterate(f, xs) {\n fold((_, x) => f(x), null, xs);\n}\nexport function iterate2(f, xs, ys) {\n fold2((_, x, y) => f(x, y), null, xs, ys);\n}\nexport function iterateIndexed(f, xs) {\n fold((_, x, i) => f(i, x), null, xs);\n}\nexport function iterateIndexed2(f, xs, ys) {\n fold2((_, x, y, i) => f(i, x, y), null, xs, ys);\n}\nexport function isEmpty(xs) {\n const i = xs[Symbol.iterator]();\n return i.next().done;\n}\nexport function tryLast(xs) {\n return isEmpty(xs) ? null : some(reduce((_, x) => x, xs));\n}\nexport function last(xs) {\n return __failIfNone(tryLast(xs));\n}\nexport function length(xs) {\n return Array.isArray(xs) || ArrayBuffer.isView(xs)\n ? xs.length\n : fold((acc, x) => acc + 1, 0, xs);\n}\nexport function map(f, xs) {\n return delay(() => unfold((iter) => {\n const cur = iter.next();\n return !cur.done ? [f(cur.value), iter] : null;\n }, xs[Symbol.iterator]()));\n}\nexport function mapIndexed(f, xs) {\n return delay(() => {\n let i = 0;\n return unfold((iter) => {\n const cur = iter.next();\n return !cur.done ? [f(i++, cur.value), iter] : null;\n }, xs[Symbol.iterator]());\n });\n}\nexport function indexed(xs) {\n return mapIndexed((i, x) => [i, x], xs);\n}\nexport function map2(f, xs, ys) {\n return delay(() => {\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n return unfold(() => {\n const cur1 = iter1.next();\n const cur2 = iter2.next();\n return !cur1.done && !cur2.done ? [f(cur1.value, cur2.value), null] : null;\n });\n });\n}\nexport function mapIndexed2(f, xs, ys) {\n return delay(() => {\n let i = 0;\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n return unfold(() => {\n const cur1 = iter1.next();\n const cur2 = iter2.next();\n return !cur1.done && !cur2.done ? [f(i++, cur1.value, cur2.value), null] : null;\n });\n });\n}\nexport function map3(f, xs, ys, zs) {\n return delay(() => {\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n const iter3 = zs[Symbol.iterator]();\n return unfold(() => {\n const cur1 = iter1.next();\n const cur2 = iter2.next();\n const cur3 = iter3.next();\n return !cur1.done && !cur2.done && !cur3.done ? [f(cur1.value, cur2.value, cur3.value), null] : null;\n });\n });\n}\nexport function mapFold(f, acc, xs, transform) {\n const result = [];\n let r;\n let cur;\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n [r, acc] = f(acc, cur.value);\n result.push(r);\n }\n return transform !== void 0 ? [transform(result), acc] : [result, acc];\n}\nexport function mapFoldBack(f, xs, acc, transform) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n const result = [];\n let r;\n for (let i = arr.length - 1; i >= 0; i--) {\n [r, acc] = f(arr[i], acc);\n result.push(r);\n }\n return transform !== void 0 ? [transform(result), acc] : [result, acc];\n}\nexport function max(xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(acc, x) === 1 ? acc : x, xs);\n}\nexport function maxBy(f, xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(f(acc), f(x)) === 1 ? acc : x, xs);\n}\nexport function min(xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(acc, x) === -1 ? acc : x, xs);\n}\nexport function minBy(f, xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(f(acc), f(x)) === -1 ? acc : x, xs);\n}\nexport function pairwise(xs) {\n return skip(2, scan((last, next) => [last[1], next], [0, 0], xs));\n}\nexport function rangeChar(first, last) {\n return delay(() => unfold((x) => x <= last ? [x, String.fromCharCode(x.charCodeAt(0) + 1)] : null, first));\n}\nexport function rangeLong(first, step, last, unsigned) {\n const stepFn = makeLongRangeStepFunction(step, last, unsigned);\n return delay(() => unfold(stepFn, first));\n}\nexport function rangeDecimal(first, step, last) {\n const stepFn = makeDecimalRangeStepFunction(step, last);\n return delay(() => unfold(stepFn, first));\n}\nexport function rangeNumber(first, step, last) {\n if (step === 0) {\n throw new Error(\"Step cannot be 0\");\n }\n return delay(() => unfold((x) => step > 0 && x <= last || step < 0 && x >= last ? [x, x + step] : null, first));\n}\nexport function readOnly(xs) {\n return map((x) => x, xs);\n}\nexport function reduce(f, xs) {\n if (Array.isArray(xs) || ArrayBuffer.isView(xs)) {\n return xs.reduce(f);\n }\n const iter = xs[Symbol.iterator]();\n let cur = iter.next();\n if (cur.done) {\n throw new Error(\"Seq was empty\");\n }\n let acc = cur.value;\n while (true) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n acc = f(acc, cur.value);\n }\n return acc;\n}\nexport function reduceBack(f, xs) {\n const ar = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n if (ar.length === 0) {\n throw new Error(\"Seq was empty\");\n }\n let acc = ar[ar.length - 1];\n for (let i = ar.length - 2; i >= 0; i--) {\n acc = f(ar[i], acc, i);\n }\n return acc;\n}\nexport function replicate(n, x) {\n return initialize(n, () => x);\n}\nexport function reverse(xs) {\n const ar = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs.slice(0) : Array.from(xs);\n return ofArray(ar.reverse());\n}\nexport function scan(f, seed, xs) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n return unfold((acc) => {\n if (acc == null) {\n return [seed, seed];\n }\n const cur = iter.next();\n if (!cur.done) {\n acc = f(acc, cur.value);\n return [acc, acc];\n }\n return void 0;\n }, null);\n });\n}\nexport function scanBack(f, xs, seed) {\n return reverse(scan((acc, x) => f(x, acc), seed, reverse(xs)));\n}\nexport function singleton(y) {\n return [y];\n}\nexport function skip(n, xs) {\n return {\n [Symbol.iterator]: () => {\n const iter = xs[Symbol.iterator]();\n for (let i = 1; i <= n; i++) {\n if (iter.next().done) {\n throw new Error(\"Seq has not enough elements\");\n }\n }\n return iter;\n },\n };\n}\nexport function skipWhile(f, xs) {\n return delay(() => {\n let hasPassed = false;\n return filter((x) => hasPassed || (hasPassed = !f(x)), xs);\n });\n}\nexport function sortWith(f, xs) {\n const ys = Array.from(xs);\n return ofArray(ys.sort(f));\n}\nexport function sum(xs, adder) {\n return fold((acc, x) => adder.Add(acc, x), adder.GetZero(), xs);\n}\nexport function sumBy(f, xs, adder) {\n return fold((acc, x) => adder.Add(acc, f(x)), adder.GetZero(), xs);\n}\nexport function tail(xs) {\n const iter = xs[Symbol.iterator]();\n const cur = iter.next();\n if (cur.done) {\n throw new Error(\"Seq was empty\");\n }\n return {\n [Symbol.iterator]: () => iter,\n };\n}\nexport function take(n, xs, truncate = false) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n return unfold((i) => {\n if (i < n) {\n const cur = iter.next();\n if (!cur.done) {\n return [cur.value, i + 1];\n }\n if (!truncate) {\n throw new Error(\"Seq has not enough elements\");\n }\n }\n return void 0;\n }, 0);\n });\n}\nexport function truncate(n, xs) {\n return take(n, xs, true);\n}\nexport function takeWhile(f, xs) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n return unfold((i) => {\n const cur = iter.next();\n if (!cur.done && f(cur.value)) {\n return [cur.value, null];\n }\n return void 0;\n }, 0);\n });\n}\nexport function tryFind(f, xs, defaultValue) {\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n if (f(cur.value, i)) {\n return some(cur.value);\n }\n }\n return defaultValue === void 0 ? null : some(defaultValue);\n}\nexport function find(f, xs) {\n return __failIfNone(tryFind(f, xs));\n}\nexport function tryFindBack(f, xs, defaultValue) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs.slice(0) : Array.from(xs);\n return tryFind(f, arr.reverse(), defaultValue);\n}\nexport function findBack(f, xs) {\n return __failIfNone(tryFindBack(f, xs));\n}\nexport function tryFindIndex(f, xs) {\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n if (f(cur.value, i)) {\n return i;\n }\n }\n return null;\n}\nexport function findIndex(f, xs) {\n return __failIfNone(tryFindIndex(f, xs));\n}\nexport function tryFindIndexBack(f, xs) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs.slice(0) : Array.from(xs);\n for (let i = arr.length - 1; i >= 0; i--) {\n if (f(arr[i], i)) {\n return i;\n }\n }\n return null;\n}\nexport function findIndexBack(f, xs) {\n return __failIfNone(tryFindIndexBack(f, xs));\n}\nexport function tryPick(f, xs) {\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n const y = f(cur.value, i);\n if (y != null) {\n return y;\n }\n }\n return null;\n}\nexport function pick(f, xs) {\n return __failIfNone(tryPick(f, xs));\n}\nexport function unfold(f, fst) {\n return {\n [Symbol.iterator]: () => {\n // Capture a copy of the first value in the closure\n // so the sequence is restarted every time, see #1230\n let acc = fst;\n return {\n next: () => {\n const res = f(acc);\n if (res != null) {\n acc = res[1];\n return { done: false, value: res[0] };\n }\n return { done: true };\n },\n };\n },\n };\n}\nexport function zip(xs, ys) {\n return map2((x, y) => [x, y], xs, ys);\n}\nexport function zip3(xs, ys, zs) {\n return map3((x, y, z) => [x, y, z], xs, ys, zs);\n}\nexport function windowed(windowSize, source) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n }\n return {\n [Symbol.iterator]: () => {\n let window = [];\n const iter = source[Symbol.iterator]();\n return {\n next: () => {\n let cur;\n while (window.length < windowSize) {\n if ((cur = iter.next()).done) {\n return { done: true };\n }\n window.push(cur.value);\n }\n const value = window;\n window = window.slice(1);\n return { done: false, value };\n },\n };\n },\n };\n}\n//# sourceMappingURL=Seq.js.map","import { Record, Union, anonRecord as makeAnonRecord } from \"./Types\";\nimport { compareArraysWith, equalArraysWith } from \"./Util\";\nexport class CaseInfo {\n constructor(declaringType, tag, name, fields) {\n this.declaringType = declaringType;\n this.tag = tag;\n this.name = name;\n this.fields = fields;\n }\n}\nexport class TypeInfo {\n constructor(fullname, generics, constructor, fields, cases) {\n this.fullname = fullname;\n this.generics = generics;\n this.constructor = constructor;\n this.fields = fields;\n this.cases = cases;\n }\n toString() {\n return fullName(this);\n }\n Equals(other) {\n return equals(this, other);\n }\n CompareTo(other) {\n return compare(this, other);\n }\n}\nexport function getGenerics(t) {\n return t.generics != null ? t.generics : [];\n}\nexport function equals(t1, t2) {\n if (t1.fullname === \"\") { // Anonymous records\n return t2.fullname === \"\"\n && equalArraysWith(getRecordElements(t1), getRecordElements(t2), ([k1, v1], [k2, v2]) => k1 === k2 && equals(v1, v2));\n }\n else {\n return t1.fullname === t2.fullname\n && equalArraysWith(getGenerics(t1), getGenerics(t2), equals);\n }\n}\n// System.Type is not comparable in .NET, but let's implement this\n// in case users want to create a dictionary with types as keys\nexport function compare(t1, t2) {\n if (t1.fullname !== t2.fullname) {\n return t1.fullname < t2.fullname ? -1 : 1;\n }\n else {\n return compareArraysWith(getGenerics(t1), getGenerics(t2), compare);\n }\n}\nexport function type(fullname, generics) {\n return new TypeInfo(fullname, generics);\n}\nexport function record(fullname, generics, constructor, fields) {\n return new TypeInfo(fullname, generics, constructor, fields);\n}\nexport function anonRecord(...fields) {\n return new TypeInfo(\"\", null, null, () => fields);\n}\nexport function union(fullname, generics, constructor, cases) {\n const t = new TypeInfo(fullname, generics, constructor, null, () => cases().map((x, i) => typeof x === \"string\" ? new CaseInfo(t, i, x) : new CaseInfo(t, i, x[0], x[1])));\n return t;\n}\nexport function tuple(...generics) {\n return new TypeInfo(\"System.Tuple`\" + generics.length, generics);\n}\nexport function delegate(...generics) {\n return new TypeInfo(\"System.Func`\" + generics.length, generics);\n}\nexport function lambda(argType, returnType) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpFunc`2\", [argType, returnType]);\n}\nexport function option(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpOption`1\", [generic]);\n}\nexport function list(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Collections.FSharpList`1\", [generic]);\n}\nexport function array(generic) {\n return new TypeInfo(generic.fullname + \"[]\", [generic]);\n}\nexport const obj = new TypeInfo(\"System.Object\");\nexport const unit = new TypeInfo(\"Microsoft.FSharp.Core.Unit\");\nexport const char = new TypeInfo(\"System.Char\");\nexport const string = new TypeInfo(\"System.String\");\nexport const bool = new TypeInfo(\"System.Boolean\");\nexport const int8 = new TypeInfo(\"System.SByte\");\nexport const uint8 = new TypeInfo(\"System.Byte\");\nexport const int16 = new TypeInfo(\"System.Int16\");\nexport const uint16 = new TypeInfo(\"System.UInt16\");\nexport const int32 = new TypeInfo(\"System.Int32\");\nexport const uint32 = new TypeInfo(\"System.UInt32\");\nexport const float32 = new TypeInfo(\"System.Single\");\nexport const float64 = new TypeInfo(\"System.Double\");\nexport const decimal = new TypeInfo(\"System.Decimal\");\nexport function name(info) {\n if (Array.isArray(info)) {\n return info[0];\n }\n else if (info instanceof CaseInfo) {\n return info.name;\n }\n else {\n const i = info.fullname.lastIndexOf(\".\");\n return i === -1 ? info.fullname : info.fullname.substr(i + 1);\n }\n}\nexport function fullName(t) {\n const gen = t.generics != null && !isArray(t) ? t.generics : [];\n if (gen.length > 0) {\n return t.fullname + \"[\" + gen.map((x) => fullName(x)).join(\",\") + \"]\";\n }\n else {\n return t.fullname;\n }\n}\nexport function namespace(t) {\n const i = t.fullname.lastIndexOf(\".\");\n return i === -1 ? \"\" : t.fullname.substr(0, i);\n}\nexport function isArray(t) {\n return t.fullname.endsWith(\"[]\");\n}\nexport function getElementType(t) {\n return isArray(t) ? t.generics[0] : null;\n}\nexport function isGenericType(t) {\n return t.generics != null && t.generics.length > 0;\n}\n/**\n * This doesn't replace types for fields (records) or cases (unions)\n * but it should be enough for type comparison purposes\n */\nexport function getGenericTypeDefinition(t) {\n return t.generics == null ? t : new TypeInfo(t.fullname, t.generics.map(() => obj));\n}\n// FSharpType\nexport function getUnionCases(t) {\n if (t.cases != null) {\n return t.cases();\n }\n else {\n throw new Error(`${t.fullname} is not an F# union type`);\n }\n}\nexport function getRecordElements(t) {\n if (t.fields != null) {\n return t.fields();\n }\n else {\n throw new Error(`${t.fullname} is not an F# record type`);\n }\n}\nexport function getTupleElements(t) {\n if (isTuple(t)) {\n return t.generics;\n }\n else {\n throw new Error(`${t.fullname} is not a tuple type`);\n }\n}\nexport function getFunctionElements(t) {\n if (isFunction(t)) {\n const gen = t.generics;\n return [gen[0], gen[1]];\n }\n else {\n throw new Error(`${t.fullname} is not an F# function type`);\n }\n}\nexport function isUnion(t) {\n return t instanceof TypeInfo ? t.cases != null : t instanceof Union;\n}\nexport function isRecord(t) {\n return t instanceof TypeInfo ? t.fields != null : t instanceof Record;\n}\nexport function isTuple(t) {\n return t.fullname.startsWith(\"System.Tuple\");\n}\n// In .NET this is false for delegates\nexport function isFunction(t) {\n return t.fullname === \"Microsoft.FSharp.Core.FSharpFunc`2\";\n}\n// FSharpValue\nexport function getUnionFields(v, t) {\n const cases = getUnionCases(t);\n const case_ = cases[v.tag];\n if (case_ == null) {\n throw new Error(`Cannot find case ${v.name} in union type`);\n }\n return [case_, v.fields];\n}\nexport function getUnionCaseFields(uci) {\n return uci.fields == null ? [] : uci.fields.map((t, i) => [\"Data\" + i, t]);\n}\nexport function getRecordFields(v) {\n return Object.keys(v).map((k) => v[k]);\n}\nexport function getRecordField(v, field) {\n return v[field[0]];\n}\nexport function getTupleFields(v) {\n return v;\n}\nexport function getTupleField(v, i) {\n return v[i];\n}\nexport function makeUnion(uci, values) {\n const expectedLength = (uci.fields || []).length;\n if (values.length !== expectedLength) {\n throw new Error(`Expected an array of length ${expectedLength} but got ${values.length}`);\n }\n return new uci.declaringType.constructor(uci.tag, uci.name, ...values);\n}\nexport function makeRecord(t, values) {\n const fields = getRecordElements(t);\n if (fields.length !== values.length) {\n throw new Error(`Expected an array of length ${fields.length} but got ${values.length}`);\n }\n return t.constructor != null\n ? new t.constructor(...values)\n : makeAnonRecord(fields.reduce((obj, [key,], i) => {\n obj[key] = values[i];\n return obj;\n }, {}));\n}\nexport function makeTuple(values, t) {\n return values;\n}\n// Fable.Core.Reflection\nfunction assertUnion(x) {\n if (!(x instanceof Union)) {\n throw new Error(`Value is not an F# union type`);\n }\n}\nexport function getCaseTag(x) {\n assertUnion(x);\n return x.tag;\n}\nexport function getCaseName(x) {\n assertUnion(x);\n return x.name;\n}\nexport function getCaseFields(x) {\n assertUnion(x);\n return x.fields;\n}\n//# sourceMappingURL=Reflection.js.map","/**\n * DateTimeOffset functions.\n *\n * Note: Date instances are always DateObjects in local\n * timezone (because JS dates are all kinds of messed up).\n * A local date returns UTC epoc when `.getTime()` is called.\n *\n * Basically; invariant: date.getTime() always return UTC time.\n */\nimport { fromValue, ticksToUnixEpochMilliseconds, unixEpochMillisecondsToTicks } from \"./Long\";\nimport { compareDates, dateOffset, padWithZeros } from \"./Util\";\nexport const offsetRegex = /(?:Z|[+-](\\d+):?([0-5]?\\d)?)\\s*$/;\nexport function dateOffsetToString(offset) {\n const isMinus = offset < 0;\n offset = Math.abs(offset);\n const hours = ~~(offset / 3600000);\n const minutes = (offset % 3600000) / 60000;\n return (isMinus ? \"-\" : \"+\") +\n padWithZeros(hours, 2) + \":\" +\n padWithZeros(minutes, 2);\n}\nexport function dateToHalfUTCString(date, half) {\n const str = date.toISOString();\n return half === \"first\"\n ? str.substring(0, str.indexOf(\"T\"))\n : str.substring(str.indexOf(\"T\") + 1, str.length - 1);\n}\nfunction dateToISOString(d, utc) {\n if (utc) {\n return d.toISOString();\n }\n else {\n // JS Date is always local\n const printOffset = d.kind == null ? true : d.kind === 2 /* Local */;\n return padWithZeros(d.getFullYear(), 4) + \"-\" +\n padWithZeros(d.getMonth() + 1, 2) + \"-\" +\n padWithZeros(d.getDate(), 2) + \"T\" +\n padWithZeros(d.getHours(), 2) + \":\" +\n padWithZeros(d.getMinutes(), 2) + \":\" +\n padWithZeros(d.getSeconds(), 2) + \".\" +\n padWithZeros(d.getMilliseconds(), 3) +\n (printOffset ? dateOffsetToString(d.getTimezoneOffset() * -60000) : \"\");\n }\n}\nfunction dateToISOStringWithOffset(dateWithOffset, offset) {\n const str = dateWithOffset.toISOString();\n return str.substring(0, str.length - 1) + dateOffsetToString(offset);\n}\nfunction dateToStringWithCustomFormat(date, format, utc) {\n return format.replace(/(\\w)\\1*/g, (match) => {\n let rep = match;\n switch (match.substring(0, 1)) {\n case \"y\":\n const y = utc ? date.getUTCFullYear() : date.getFullYear();\n rep = match.length < 4 ? y % 100 : y;\n break;\n case \"M\":\n rep = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n break;\n case \"d\":\n rep = utc ? date.getUTCDate() : date.getDate();\n break;\n case \"H\":\n rep = utc ? date.getUTCHours() : date.getHours();\n break;\n case \"h\":\n const h = utc ? date.getUTCHours() : date.getHours();\n rep = h > 12 ? h % 12 : h;\n break;\n case \"m\":\n rep = utc ? date.getUTCMinutes() : date.getMinutes();\n break;\n case \"s\":\n rep = utc ? date.getUTCSeconds() : date.getSeconds();\n break;\n case \"f\":\n rep = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n break;\n }\n if (rep !== match && rep < 10 && match.length > 1) {\n rep = \"0\" + rep;\n }\n return rep;\n });\n}\nfunction dateToStringWithOffset(date, format) {\n const d = new Date(date.getTime() + date.offset);\n if (typeof format !== \"string\") {\n return d.toISOString().replace(/\\.\\d+/, \"\").replace(/[A-Z]|\\.\\d+/g, \" \") + dateOffsetToString(date.offset);\n }\n else if (format.length === 1) {\n switch (format) {\n case \"D\":\n case \"d\": return dateToHalfUTCString(d, \"first\");\n case \"T\":\n case \"t\": return dateToHalfUTCString(d, \"second\");\n case \"O\":\n case \"o\": return dateToISOStringWithOffset(d, date.offset);\n default: throw new Error(\"Unrecognized Date print format\");\n }\n }\n else {\n return dateToStringWithCustomFormat(d, format, true);\n }\n}\nfunction dateToStringWithKind(date, format) {\n const utc = date.kind === 1 /* UTC */;\n if (typeof format !== \"string\") {\n return utc ? date.toUTCString() : date.toLocaleString();\n }\n else if (format.length === 1) {\n switch (format) {\n case \"D\":\n case \"d\":\n return utc ? dateToHalfUTCString(date, \"first\") : date.toLocaleDateString();\n case \"T\":\n case \"t\":\n return utc ? dateToHalfUTCString(date, \"second\") : date.toLocaleTimeString();\n case \"O\":\n case \"o\":\n return dateToISOString(date, utc);\n default:\n throw new Error(\"Unrecognized Date print format\");\n }\n }\n else {\n return dateToStringWithCustomFormat(date, format, utc);\n }\n}\nexport function toString(date, format) {\n return date.offset != null\n ? dateToStringWithOffset(date, format)\n : dateToStringWithKind(date, format);\n}\nexport default function DateTime(value, kind) {\n const d = new Date(value);\n d.kind = (kind == null ? 0 /* Unspecified */ : kind) | 0;\n return d;\n}\nexport function fromTicks(ticks, kind) {\n ticks = fromValue(ticks);\n kind = kind != null ? kind : 0 /* Unspecified */;\n let date = DateTime(ticksToUnixEpochMilliseconds(ticks), kind);\n // Ticks are local to offset (in this case, either UTC or Local/Unknown).\n // If kind is anything but UTC, that means that the tick number was not\n // in utc, thus getTime() cannot return UTC, and needs to be shifted.\n if (kind !== 1 /* UTC */) {\n date = DateTime(date.getTime() - dateOffset(date), kind);\n }\n return date;\n}\nexport function fromDateTimeOffset(date, kind) {\n switch (kind) {\n case 1 /* UTC */: return DateTime(date.getTime(), 1 /* UTC */);\n case 2 /* Local */: return DateTime(date.getTime(), 2 /* Local */);\n default:\n const d = DateTime(date.getTime() + date.offset, kind);\n return DateTime(d.getTime() - dateOffset(d), kind);\n }\n}\nexport function getTicks(date) {\n return unixEpochMillisecondsToTicks(date.getTime(), dateOffset(date));\n}\nexport function minValue() {\n // This is \"0001-01-01T00:00:00.000Z\", actual JS min value is -8640000000000000\n return DateTime(-62135596800000, 0 /* Unspecified */);\n}\nexport function maxValue() {\n // This is \"9999-12-31T23:59:59.999Z\", actual JS max value is 8640000000000000\n return DateTime(253402300799999, 0 /* Unspecified */);\n}\nexport function parseRaw(str) {\n let date = new Date(str);\n if (isNaN(date.getTime())) {\n // Try to check strings JS Date cannot parse (see #1045, #1422)\n // tslint:disable-next-line:max-line-length\n const m = /^\\s*(\\d+[^\\w\\s:]\\d+[^\\w\\s:]\\d+)?\\s*(\\d+:\\d+(?::\\d+(?:\\.\\d+)?)?)?\\s*([AaPp][Mm])?\\s*([+-]\\d+(?::\\d+)?)?\\s*$/.exec(str);\n if (m != null) {\n let baseDate = null;\n let timeInSeconds = 0;\n if (m[2] != null) {\n const timeParts = m[2].split(\":\");\n timeInSeconds = parseInt(timeParts[0], 10) * 3600 +\n parseInt(timeParts[1] || \"0\", 10) * 60 +\n parseFloat(timeParts[2] || \"0\");\n if (m[3] != null && m[3].toUpperCase() === \"PM\") {\n timeInSeconds += 720;\n }\n }\n if (m[4] != null) { // There's an offset, parse as UTC\n if (m[1] != null) {\n baseDate = new Date(m[1] + \" UTC\");\n }\n else {\n const d = new Date();\n baseDate = new Date(d.getUTCFullYear() + \"/\" + (d.getUTCMonth() + 1) + \"/\" + d.getUTCDate());\n }\n const offsetParts = m[4].substr(1).split(\":\");\n let offsetInMinutes = parseInt(offsetParts[0], 10) * 60 + parseInt(offsetParts[1] || \"0\", 10);\n if (m[4][0] === \"+\") {\n offsetInMinutes *= -1;\n }\n timeInSeconds += offsetInMinutes * 60;\n }\n else {\n if (m[1] != null) {\n baseDate = new Date(m[1]);\n }\n else {\n const d = new Date();\n baseDate = new Date(d.getFullYear() + \"/\" + (d.getMonth() + 1) + \"/\" + d.getDate());\n }\n }\n date = new Date(baseDate.getTime() + timeInSeconds * 1000);\n // correct for daylight savings time\n date = new Date(date.getTime() + (date.getTimezoneOffset() - baseDate.getTimezoneOffset()) * 60000);\n }\n else {\n throw new Error(\"The string is not a valid Date.\");\n }\n }\n return date;\n}\nexport function parse(str, detectUTC = false) {\n const date = parseRaw(str);\n const offset = offsetRegex.exec(str);\n // .NET always parses DateTime as Local if there's offset info (even \"Z\")\n // Newtonsoft.Json uses UTC if the offset is \"Z\"\n const kind = offset != null\n ? (detectUTC && offset[0] === \"Z\" ? 1 /* UTC */ : 2 /* Local */)\n : 0 /* Unspecified */;\n return DateTime(date.getTime(), kind);\n}\nexport function tryParse(v) {\n try {\n // if value is null or whitespace, parsing fails\n if (v === null || v.trim() === \"\") {\n return [false, minValue()];\n }\n return [true, parse(v)];\n }\n catch (_err) {\n return [false, minValue()];\n }\n}\nexport function create(year, month, day, h = 0, m = 0, s = 0, ms = 0, kind) {\n const dateValue = kind === 1 /* UTC */\n ? Date.UTC(year, month - 1, day, h, m, s, ms)\n : new Date(year, month - 1, day, h, m, s, ms).getTime();\n if (isNaN(dateValue)) {\n throw new Error(\"The parameters describe an unrepresentable Date.\");\n }\n const date = DateTime(dateValue, kind);\n if (year <= 99) {\n date.setFullYear(year, month - 1, day);\n }\n return date;\n}\nexport function now() {\n return DateTime(Date.now(), 2 /* Local */);\n}\nexport function utcNow() {\n return DateTime(Date.now(), 1 /* UTC */);\n}\nexport function today() {\n return date(now());\n}\nexport function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\nexport function daysInMonth(year, month) {\n return month === 2\n ? (isLeapYear(year) ? 29 : 28)\n : (month >= 8 ? (month % 2 === 0 ? 31 : 30) : (month % 2 === 0 ? 30 : 31));\n}\nexport function toUniversalTime(date) {\n return date.kind === 1 /* UTC */ ? date : DateTime(date.getTime(), 1 /* UTC */);\n}\nexport function toLocalTime(date) {\n return date.kind === 2 /* Local */ ? date : DateTime(date.getTime(), 2 /* Local */);\n}\nexport function specifyKind(d, kind) {\n return create(year(d), month(d), day(d), hour(d), minute(d), second(d), millisecond(d), kind);\n}\nexport function timeOfDay(d) {\n return hour(d) * 3600000\n + minute(d) * 60000\n + second(d) * 1000\n + millisecond(d);\n}\nexport function date(d) {\n return create(year(d), month(d), day(d), 0, 0, 0, 0, d.kind);\n}\nexport function day(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCDate() : d.getDate();\n}\nexport function hour(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCHours() : d.getHours();\n}\nexport function millisecond(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCMilliseconds() : d.getMilliseconds();\n}\nexport function minute(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCMinutes() : d.getMinutes();\n}\nexport function month(d) {\n return (d.kind === 1 /* UTC */ ? d.getUTCMonth() : d.getMonth()) + 1;\n}\nexport function second(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCSeconds() : d.getSeconds();\n}\nexport function year(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCFullYear() : d.getFullYear();\n}\nexport function dayOfWeek(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCDay() : d.getDay();\n}\nexport function dayOfYear(d) {\n const _year = year(d);\n const _month = month(d);\n let _day = day(d);\n for (let i = 1; i < _month; i++) {\n _day += daysInMonth(_year, i);\n }\n return _day;\n}\nexport function add(d, ts) {\n return DateTime(d.getTime() + ts, d.kind);\n}\nexport function addDays(d, v) {\n return DateTime(d.getTime() + v * 86400000, d.kind);\n}\nexport function addHours(d, v) {\n return DateTime(d.getTime() + v * 3600000, d.kind);\n}\nexport function addMinutes(d, v) {\n return DateTime(d.getTime() + v * 60000, d.kind);\n}\nexport function addSeconds(d, v) {\n return DateTime(d.getTime() + v * 1000, d.kind);\n}\nexport function addMilliseconds(d, v) {\n return DateTime(d.getTime() + v, d.kind);\n}\nexport function addYears(d, v) {\n const newMonth = month(d);\n const newYear = year(d) + v;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, day(d));\n return create(newYear, newMonth, newDay, hour(d), minute(d), second(d), millisecond(d), d.kind);\n}\nexport function addMonths(d, v) {\n let newMonth = month(d) + v;\n let newMonth_ = 0;\n let yearOffset = 0;\n if (newMonth > 12) {\n newMonth_ = newMonth % 12;\n yearOffset = Math.floor(newMonth / 12);\n newMonth = newMonth_;\n }\n else if (newMonth < 1) {\n newMonth_ = 12 + newMonth % 12;\n yearOffset = Math.floor(newMonth / 12) + (newMonth_ === 12 ? -1 : 0);\n newMonth = newMonth_;\n }\n const newYear = year(d) + yearOffset;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, day(d));\n return create(newYear, newMonth, newDay, hour(d), minute(d), second(d), millisecond(d), d.kind);\n}\nexport function subtract(d, that) {\n return typeof that === \"number\"\n ? DateTime(d.getTime() - that, d.kind)\n : d.getTime() - that.getTime();\n}\nexport function toLongDateString(d) {\n return d.toDateString();\n}\nexport function toShortDateString(d) {\n return d.toLocaleDateString();\n}\nexport function toLongTimeString(d) {\n return d.toLocaleTimeString();\n}\nexport function toShortTimeString(d) {\n return d.toLocaleTimeString().replace(/:\\d\\d(?!:)/, \"\");\n}\nexport function equals(d1, d2) {\n return d1.getTime() === d2.getTime();\n}\nexport const compare = compareDates;\nexport const compareTo = compareDates;\nexport function op_Addition(x, y) {\n return add(x, y);\n}\nexport function op_Subtraction(x, y) {\n return subtract(x, y);\n}\nexport function isDaylightSavingTime(x) {\n const jan = new Date(x.getFullYear(), 0, 1);\n const jul = new Date(x.getFullYear(), 6, 1);\n return isDST(jan.getTimezoneOffset(), jul.getTimezoneOffset(), x.getTimezoneOffset());\n}\nfunction isDST(janOffset, julOffset, tOffset) {\n return Math.min(janOffset, julOffset) === tOffset;\n}\n//# sourceMappingURL=Date.js.map","import { toString as dateToString } from \"./Date\";\nimport Long, { fromBytes as longFromBytes, toBytes as longToBytes, toString as longToString } from \"./Long\";\nimport { escape } from \"./RegExp\";\nconst fsFormatRegExp = /(^|[^%])%([0+ ]*)(-?\\d+)?(?:\\.(\\d+))?(\\w)/;\nconst formatRegExp = /\\{(\\d+)(,-?\\d+)?(?:\\:([a-zA-Z])(\\d{0,2})|\\:(.+?))?\\}/g;\n// RFC 4122 compliant. From https://stackoverflow.com/a/13653180/3922220\n// const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n// Relax GUID parsing, see #1637\nconst guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\nfunction cmp(x, y, ic) {\n function isIgnoreCase(i) {\n return i === true ||\n i === 1 /* CurrentCultureIgnoreCase */ ||\n i === 3 /* InvariantCultureIgnoreCase */ ||\n i === 5 /* OrdinalIgnoreCase */;\n }\n function isOrdinal(i) {\n return i === 4 /* Ordinal */ ||\n i === 5 /* OrdinalIgnoreCase */;\n }\n if (x == null) {\n return y == null ? 0 : -1;\n }\n if (y == null) {\n return 1;\n } // everything is bigger than null\n if (isOrdinal(ic)) {\n if (isIgnoreCase(ic)) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n return (x === y) ? 0 : (x < y ? -1 : 1);\n }\n else {\n if (isIgnoreCase(ic)) {\n x = x.toLocaleLowerCase();\n y = y.toLocaleLowerCase();\n }\n return x.localeCompare(y);\n }\n}\nexport function compare(...args) {\n switch (args.length) {\n case 2: return cmp(args[0], args[1], false);\n case 3: return cmp(args[0], args[1], args[2]);\n case 4: return cmp(args[0], args[1], args[2] === true);\n case 5: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), false);\n case 6: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), args[5]);\n case 7: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), args[5] === true);\n default: throw new Error(\"String.compare: Unsupported number of parameters\");\n }\n}\nexport function compareOrdinal(x, y) {\n return cmp(x, y, 4 /* Ordinal */);\n}\nexport function compareTo(x, y) {\n return cmp(x, y, 0 /* CurrentCulture */);\n}\nexport function startsWith(str, pattern, ic) {\n if (str.length >= pattern.length) {\n return cmp(str.substr(0, pattern.length), pattern, ic) === 0;\n }\n return false;\n}\nexport function indexOfAny(str, anyOf, ...args) {\n if (str == null || str === \"\") {\n return -1;\n }\n const startIndex = (args.length > 0) ? args[0] : 0;\n if (startIndex < 0) {\n throw new Error(\"Start index cannot be negative\");\n }\n const length = (args.length > 1) ? args[1] : str.length - startIndex;\n if (length < 0) {\n throw new Error(\"Length cannot be negative\");\n }\n if (length > str.length - startIndex) {\n throw new Error(\"Invalid startIndex and length\");\n }\n str = str.substr(startIndex, length);\n for (const c of anyOf) {\n const index = str.indexOf(c);\n if (index > -1) {\n return index + startIndex;\n }\n }\n return -1;\n}\nfunction toHex(x) {\n if (x instanceof Long) {\n return longToString(x.unsigned ? x : longFromBytes(longToBytes(x), true), 16);\n }\n else {\n return (Number(x) >>> 0).toString(16);\n }\n}\nexport function printf(input) {\n return {\n input,\n cont: fsFormat(input),\n };\n}\nexport function toConsole(arg) {\n // Don't remove the lambda here, see #1357\n return arg.cont((x) => { console.log(x); });\n}\nexport function toConsoleError(arg) {\n return arg.cont((x) => { console.error(x); });\n}\nexport function toText(arg) {\n return arg.cont((x) => x);\n}\nexport function toFail(arg) {\n return arg.cont((x) => { throw new Error(x); });\n}\nfunction formatOnce(str2, rep) {\n return str2.replace(fsFormatRegExp, (_, prefix, flags, pad, precision, format) => {\n switch (format) {\n case \"f\":\n case \"F\":\n rep = Number(rep).toFixed(precision || 6);\n break;\n case \"g\":\n case \"G\":\n rep = Number(rep).toPrecision(precision);\n break;\n case \"e\":\n case \"E\":\n rep = Number(rep).toExponential(precision);\n break;\n case \"O\":\n case \"A\":\n rep = String(rep);\n break;\n case \"x\":\n rep = toHex(rep);\n break;\n case \"X\":\n rep = toHex(rep).toUpperCase();\n break;\n }\n const plusPrefix = flags.indexOf(\"+\") >= 0 && parseInt(rep, 10) >= 0;\n pad = parseInt(pad, 10);\n if (!isNaN(pad)) {\n const ch = pad >= 0 && flags.indexOf(\"0\") >= 0 ? \"0\" : \" \";\n rep = padLeft(String(rep), Math.abs(pad) - (plusPrefix ? 1 : 0), ch, pad < 0);\n }\n const once = prefix + (plusPrefix ? \"+\" + rep : rep);\n return once.replace(/%/g, \"%%\");\n });\n}\nfunction createPrinter(str, cont) {\n return (...args) => {\n // Make a copy as the function may be used several times\n let strCopy = str;\n for (const arg of args) {\n strCopy = formatOnce(strCopy, arg);\n }\n return fsFormatRegExp.test(strCopy)\n ? createPrinter(strCopy, cont)\n : cont(strCopy.replace(/%%/g, \"%\"));\n };\n}\nexport function fsFormat(str) {\n return (cont) => {\n return fsFormatRegExp.test(str)\n ? createPrinter(str, cont)\n : cont(str);\n };\n}\nexport function format(str, ...args) {\n if (typeof str === \"object\" && args.length > 0) {\n // Called with culture info\n str = args[0];\n args.shift();\n }\n return str.replace(formatRegExp, (match, idx, pad, format, precision, pattern) => {\n let rep = args[idx];\n let padSymbol = \" \";\n const isNumericType = (typeof rep === \"number\") || (rep instanceof Long);\n // TODO: || (rep instanceof Decimal) || (rep instanceof BigInt);\n if (isNumericType) {\n switch (format) {\n case \"f\":\n case \"F\":\n rep = precision ? rep.toFixed(precision) : rep.toFixed(2);\n break;\n case \"g\":\n case \"G\":\n rep = precision ? rep.toPrecision(precision) : rep.toPrecision();\n break;\n case \"e\":\n case \"E\":\n rep = precision ? rep.toExponential(precision) : rep.toExponential();\n break;\n case \"p\":\n case \"P\":\n rep = (precision ? (rep * 100).toFixed(precision) : (rep * 100).toFixed(2)) + \" %\";\n break;\n case \"d\":\n case \"D\":\n rep = precision ? padLeft(rep.toString(), precision, \"0\") : rep.toString();\n break;\n case \"x\":\n case \"X\":\n rep = precision ? padLeft(toHex(rep), precision, \"0\") : toHex(rep);\n if (format === \"X\") {\n rep = rep.toUpperCase();\n }\n break;\n default:\n const m = /^(0+)(\\.0+)?$/.exec(pattern);\n if (m != null) {\n let decs = 0;\n if (m[2] != null) {\n rep = rep.toFixed(decs = m[2].length - 1);\n }\n pad = \",\" + (m[1].length + (decs ? decs + 1 : 0)).toString();\n padSymbol = \"0\";\n }\n else if (pattern) {\n rep = pattern;\n }\n }\n }\n else if (rep instanceof Date) {\n rep = dateToString(rep, pattern || format);\n }\n pad = parseInt((pad || \"\").substring(1), 10);\n if (!isNaN(pad)) {\n rep = padLeft(String(rep), Math.abs(pad), padSymbol, pad < 0);\n }\n return rep;\n });\n}\nexport function endsWith(str, search) {\n const idx = str.lastIndexOf(search);\n return idx >= 0 && idx === str.length - search.length;\n}\nexport function initialize(n, f) {\n if (n < 0) {\n throw new Error(\"String length must be non-negative\");\n }\n const xs = new Array(n);\n for (let i = 0; i < n; i++) {\n xs[i] = f(i);\n }\n return xs.join(\"\");\n}\nexport function insert(str, startIndex, value) {\n if (startIndex < 0 || startIndex > str.length) {\n throw new Error(\"startIndex is negative or greater than the length of this instance.\");\n }\n return str.substring(0, startIndex) + value + str.substring(startIndex);\n}\nexport function isNullOrEmpty(str) {\n return typeof str !== \"string\" || str.length === 0;\n}\nexport function isNullOrWhiteSpace(str) {\n return typeof str !== \"string\" || /^\\s*$/.test(str);\n}\nexport function join(delimiter, ...xs) {\n return xs.map((x) => String(x)).join(delimiter);\n}\nexport function joinWithIndices(delimiter, xs, startIndex, count) {\n const endIndexPlusOne = startIndex + count;\n if (endIndexPlusOne > xs.length) {\n throw new Error(\"Index and count must refer to a location within the buffer.\");\n }\n return join(delimiter, ...xs.slice(startIndex, endIndexPlusOne));\n}\n/** Validates UUID as specified in RFC4122 (versions 1-5). Trims braces. */\nexport function validateGuid(str, doNotThrow) {\n const trimmedAndLowered = trim(str, \"{\", \"}\").toLowerCase();\n if (guidRegex.test(trimmedAndLowered)) {\n return doNotThrow ? [true, trimmedAndLowered] : trimmedAndLowered;\n }\n else if (doNotThrow) {\n return [false, \"00000000-0000-0000-0000-000000000000\"];\n }\n throw new Error(\"Guid should contain 32 digits with 4 dashes: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\n}\n// From https://gist.github.com/LeverOne/1308368\nexport function newGuid() {\n let b = \"\";\n for (let a = 0; a++ < 36;) {\n b += a * 51 & 52\n ? (a ^ 15 ? 8 ^ Math.random() * (a ^ 20 ? 16 : 4) : 4).toString(16)\n : \"-\";\n }\n return b;\n}\n// Maps for number <-> hex string conversion\nlet _convertMapsInitialized = false;\nlet _byteToHex;\nlet _hexToByte;\nfunction initConvertMaps() {\n _byteToHex = new Array(256);\n _hexToByte = {};\n for (let i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n }\n _convertMapsInitialized = true;\n}\n/** Parse a UUID into it's component bytes */\n// Adapted from https://github.com/zefferus/uuid-parse\nexport function guidToArray(s) {\n if (!_convertMapsInitialized) {\n initConvertMaps();\n }\n let i = 0;\n const buf = new Uint8Array(16);\n s.toLowerCase().replace(/[0-9a-f]{2}/g, ((oct) => {\n switch (i) {\n // .NET saves first three byte groups with different endianness\n // See https://stackoverflow.com/a/16722909/3922220\n case 0:\n case 1:\n case 2:\n case 3:\n buf[3 - i++] = _hexToByte[oct];\n break;\n case 4:\n case 5:\n buf[9 - i++] = _hexToByte[oct];\n break;\n case 6:\n case 7:\n buf[13 - i++] = _hexToByte[oct];\n break;\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n buf[i++] = _hexToByte[oct];\n break;\n }\n }));\n // Zero out remaining bytes if string was short\n while (i < 16) {\n buf[i++] = 0;\n }\n return buf;\n}\n/** Convert UUID byte array into a string */\nexport function arrayToGuid(buf) {\n if (buf.length !== 16) {\n throw new Error(\"Byte array for GUID must be exactly 16 bytes long\");\n }\n if (!_convertMapsInitialized) {\n initConvertMaps();\n }\n return _byteToHex[buf[3]] + _byteToHex[buf[2]] +\n _byteToHex[buf[1]] + _byteToHex[buf[0]] + \"-\" +\n _byteToHex[buf[5]] + _byteToHex[buf[4]] + \"-\" +\n _byteToHex[buf[7]] + _byteToHex[buf[6]] + \"-\" +\n _byteToHex[buf[8]] + _byteToHex[buf[9]] + \"-\" +\n _byteToHex[buf[10]] + _byteToHex[buf[11]] +\n _byteToHex[buf[12]] + _byteToHex[buf[13]] +\n _byteToHex[buf[14]] + _byteToHex[buf[15]];\n}\nfunction notSupported(name) {\n throw new Error(\"The environment doesn't support '\" + name + \"', please use a polyfill.\");\n}\nexport function toBase64String(inArray) {\n let str = \"\";\n for (let i = 0; i < inArray.length; i++) {\n str += String.fromCharCode(inArray[i]);\n }\n return typeof btoa === \"function\" ? btoa(str) : notSupported(\"btoa\");\n}\nexport function fromBase64String(b64Encoded) {\n const binary = typeof atob === \"function\" ? atob(b64Encoded) : notSupported(\"atob\");\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\nexport function padLeft(str, len, ch, isRight) {\n ch = ch || \" \";\n len = len - str.length;\n for (let i = 0; i < len; i++) {\n str = isRight ? str + ch : ch + str;\n }\n return str;\n}\nexport function padRight(str, len, ch) {\n return padLeft(str, len, ch, true);\n}\nexport function remove(str, startIndex, count) {\n if (startIndex >= str.length) {\n throw new Error(\"startIndex must be less than length of string\");\n }\n if (typeof count === \"number\" && (startIndex + count) > str.length) {\n throw new Error(\"Index and count must refer to a location within the string.\");\n }\n return str.slice(0, startIndex) + (typeof count === \"number\" ? str.substr(startIndex + count) : \"\");\n}\nexport function replace(str, search, replace) {\n return str.replace(new RegExp(escape(search), \"g\"), replace);\n}\nexport function replicate(n, x) {\n return initialize(n, () => x);\n}\nexport function getCharAtIndex(input, index) {\n if (index < 0 || index >= input.length) {\n throw new Error(\"Index was outside the bounds of the array.\");\n }\n return input[index];\n}\nexport function split(str, splitters, count, removeEmpty) {\n count = typeof count === \"number\" ? count : null;\n removeEmpty = typeof removeEmpty === \"number\" ? removeEmpty : null;\n if (count < 0) {\n throw new Error(\"Count cannot be less than zero\");\n }\n if (count === 0) {\n return [];\n }\n if (!Array.isArray(splitters)) {\n if (removeEmpty === 0) {\n return str.split(splitters, count);\n }\n const len = arguments.length;\n splitters = Array(len - 1);\n for (let key = 1; key < len; key++) {\n splitters[key - 1] = arguments[key];\n }\n }\n splitters = splitters.map((x) => escape(x));\n splitters = splitters.length > 0 ? splitters : [\" \"];\n let i = 0;\n const splits = [];\n const reg = new RegExp(splitters.join(\"|\"), \"g\");\n while (count == null || count > 1) {\n const m = reg.exec(str);\n if (m === null) {\n break;\n }\n if (!removeEmpty || (m.index - i) > 0) {\n count = count != null ? count - 1 : count;\n splits.push(str.substring(i, m.index));\n }\n i = reg.lastIndex;\n }\n if (!removeEmpty || (str.length - i) > 0) {\n splits.push(str.substring(i));\n }\n return splits;\n}\nexport function trim(str, ...chars) {\n if (chars.length === 0) {\n return str.trim();\n }\n const pattern = \"[\" + escape(chars.join(\"\")) + \"]+\";\n return str.replace(new RegExp(\"^\" + pattern), \"\").replace(new RegExp(pattern + \"$\"), \"\");\n}\nexport function trimStart(str, ...chars) {\n return chars.length === 0\n ? str.trimStart()\n : str.replace(new RegExp(\"^[\" + escape(chars.join(\"\")) + \"]+\"), \"\");\n}\nexport function trimEnd(str, ...chars) {\n return chars.length === 0\n ? str.trimEnd()\n : str.replace(new RegExp(\"[\" + escape(chars.join(\"\")) + \"]+$\"), \"\");\n}\nexport function filter(pred, x) {\n return x.split(\"\").filter((c) => pred(c)).join(\"\");\n}\n//# sourceMappingURL=String.js.map","import { declare } from \"./Types.js\";\nimport { type } from \"./Reflection.js\";\nimport { structuralHash, equals, compare } from \"./Util.js\";\nexport const Comparer$00601 = declare(function System_Collections_Generic_Comparer() {});\nexport function Comparer$00601$reflection($gen$$3) {\n return type(\"System.Collections.Generic.Comparer`1\", [$gen$$3]);\n}\nexport function Comparer$00601$$$$002Ector() {\n return this instanceof Comparer$00601 ? Comparer$00601.call(this) : new Comparer$00601();\n}\nexport function Comparer$00601$$$get_Default() {\n return {\n Compare(x, y) {\n return compare(x, y);\n }\n\n };\n}\n\nComparer$00601.prototype.Compare = function (x$$1, y$$1) {\n return compare(x$$1, y$$1);\n};\n\nexport const EqualityComparer$00601 = declare(function System_Collections_Generic_EqualityComparer() {});\nexport function EqualityComparer$00601$reflection($gen$$4) {\n return type(\"System.Collections.Generic.EqualityComparer`1\", [$gen$$4]);\n}\nexport function EqualityComparer$00601$$$$002Ector() {\n return this instanceof EqualityComparer$00601 ? EqualityComparer$00601.call(this) : new EqualityComparer$00601();\n}\nexport function EqualityComparer$00601$$$get_Default() {\n return {\n Equals(x$$2, y$$2) {\n return equals(x$$2, y$$2);\n },\n\n GetHashCode(x$$3) {\n return structuralHash(x$$3);\n }\n\n };\n}\n\nEqualityComparer$00601.prototype.Equals = function (x$$4, y$$3) {\n return equals(x$$4, y$$3);\n};\n\nEqualityComparer$00601.prototype.GetHashCode = function (x$$5) {\n return structuralHash(x$$5);\n};","import { declare } from \"./Types.js\";\nimport { type } from \"./Reflection.js\";\nimport { EqualityComparer$00601$$$get_Default as EqualityComparer$002400601$0024$0024$0024get_Default } from \"./System.Collections.Generic\";\nimport { equals, getItemFromDict, tryGetValue } from \"./Util.js\";\nimport { iterateIndexed, toIterator, getEnumerator, delay, collect, map, sumBy } from \"./Seq.js\";\nimport { toText, printf } from \"./String.js\";\nexport const MutableMap$00602 = declare(function Fable_Collections_MutableMap(comparer) {\n const $this$$1 = this;\n $this$$1.comparer = comparer;\n $this$$1[\"entries@23\"] = new Map([]);\n});\nexport function MutableMap$00602$reflection($gen$$4, $gen$$5) {\n return type(\"Fable.Collections.MutableMap`2\", [$gen$$4, $gen$$5]);\n}\nexport function MutableMap$00602$$$$002Ector$$Z79760D57(comparer) {\n return this instanceof MutableMap$00602 ? MutableMap$00602.call(this, comparer) : new MutableMap$00602(comparer);\n}\nexport function MutableMap$00602$$$$002Ector() {\n return MutableMap$00602$$$$002Ector$$Z79760D57.call(this, EqualityComparer$002400601$0024$0024$0024get_Default());\n}\n\nfunction MutableMap$00602$$TryFindIndex$$2B595(this$, k) {\n const h = this$.comparer.GetHashCode(k) | 0;\n const matchValue = tryGetValue(this$[\"entries@23\"], h, null);\n\n if (matchValue[0]) {\n const pairs = matchValue[1];\n return [true, h, pairs.findIndex(function (pair) {\n return this$.comparer.Equals(k, pair[0]);\n })];\n } else {\n return [false, h, -1];\n }\n}\n\nexport function MutableMap$00602$$TryFind$$2B595(this$$$1, k$$1) {\n var i, h$$1;\n const matchValue$$1 = MutableMap$00602$$TryFindIndex$$2B595(this$$$1, k$$1);\n var $target$$6;\n\n if (matchValue$$1[0]) {\n if (i = matchValue$$1[2] | 0, (h$$1 = matchValue$$1[1] | 0, i > -1)) {\n $target$$6 = 0;\n } else {\n $target$$6 = 1;\n }\n } else {\n $target$$6 = 1;\n }\n\n switch ($target$$6) {\n case 0:\n {\n const i$$1 = matchValue$$1[2] | 0;\n const h$$2 = matchValue$$1[1] | 0;\n return getItemFromDict(this$$$1[\"entries@23\"], h$$2)[i$$1];\n }\n\n case 1:\n {\n return null;\n }\n }\n}\nexport function MutableMap$00602$$get_Comparer(this$$$2) {\n return this$$$2.comparer;\n}\nexport function MutableMap$00602$$Clear(this$$$3) {\n this$$$3[\"entries@23\"].clear();\n}\nexport function MutableMap$00602$$get_Count(this$$$4) {\n return sumBy(function projection(pairs$$1) {\n return pairs$$1.length;\n }, this$$$4[\"entries@23\"].values(), {\n GetZero() {\n return 0;\n },\n\n Add($x$$2, $y$$3) {\n return $x$$2 + $y$$3;\n }\n\n });\n}\nexport function MutableMap$00602$$get_Item$$2B595(this$$$5, k$$2) {\n const matchValue$$2 = MutableMap$00602$$TryFind$$2B595(this$$$5, k$$2);\n\n if (matchValue$$2 != null) {\n const pair$$1 = matchValue$$2;\n return pair$$1[1];\n } else {\n throw new Error(\"The item was not found in collection\");\n }\n}\nexport function MutableMap$00602$$set_Item$$5BDDA1(this$$$6, k$$3, v) {\n var i$$2, h$$3;\n const matchValue$$3 = MutableMap$00602$$TryFindIndex$$2B595(this$$$6, k$$3);\n var $target$$7;\n\n if (matchValue$$3[0]) {\n if (i$$2 = matchValue$$3[2] | 0, (h$$3 = matchValue$$3[1] | 0, i$$2 > -1)) {\n $target$$7 = 0;\n } else {\n $target$$7 = 1;\n }\n } else {\n $target$$7 = 1;\n }\n\n switch ($target$$7) {\n case 0:\n {\n const i$$3 = matchValue$$3[2] | 0;\n const h$$4 = matchValue$$3[1] | 0;\n getItemFromDict(this$$$6[\"entries@23\"], h$$4)[i$$3] = [k$$3, v];\n break;\n }\n\n case 1:\n {\n if (matchValue$$3[0]) {\n const h$$5 = matchValue$$3[1] | 0;\n const value = getItemFromDict(this$$$6[\"entries@23\"], h$$5).push([k$$3, v]);\n null, null;\n } else {\n const h$$6 = matchValue$$3[1] | 0;\n this$$$6[\"entries@23\"].set(h$$6, [[k$$3, v]]);\n }\n\n break;\n }\n }\n}\nexport function MutableMap$00602$$Add$$5BDDA1(this$$$7, k$$4, v$$1) {\n var i$$4, h$$7;\n const matchValue$$4 = MutableMap$00602$$TryFindIndex$$2B595(this$$$7, k$$4);\n var $target$$8;\n\n if (matchValue$$4[0]) {\n if (i$$4 = matchValue$$4[2] | 0, (h$$7 = matchValue$$4[1] | 0, i$$4 > -1)) {\n $target$$8 = 0;\n } else {\n $target$$8 = 1;\n }\n } else {\n $target$$8 = 1;\n }\n\n switch ($target$$8) {\n case 0:\n {\n const i$$5 = matchValue$$4[2] | 0;\n const h$$8 = matchValue$$4[1] | 0;\n const msg = toText(printf(\"An item with the same key has already been added. Key: %A\"))(k$$4);\n throw new Error(msg);\n break;\n }\n\n case 1:\n {\n if (matchValue$$4[0]) {\n const h$$9 = matchValue$$4[1] | 0;\n const value$$1 = getItemFromDict(this$$$7[\"entries@23\"], h$$9).push([k$$4, v$$1]);\n null, null;\n } else {\n const h$$10 = matchValue$$4[1] | 0;\n this$$$7[\"entries@23\"].set(h$$10, [[k$$4, v$$1]]);\n }\n\n break;\n }\n }\n}\nexport function MutableMap$00602$$ContainsKey$$2B595(this$$$8, k$$5) {\n var i$$6, h$$11;\n const matchValue$$5 = MutableMap$00602$$TryFindIndex$$2B595(this$$$8, k$$5);\n var $target$$9;\n\n if (matchValue$$5[0]) {\n if (i$$6 = matchValue$$5[2] | 0, (h$$11 = matchValue$$5[1] | 0, i$$6 > -1)) {\n $target$$9 = 0;\n } else {\n $target$$9 = 1;\n }\n } else {\n $target$$9 = 1;\n }\n\n switch ($target$$9) {\n case 0:\n {\n const i$$7 = matchValue$$5[2] | 0;\n const h$$12 = matchValue$$5[1] | 0;\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\nexport function MutableMap$00602$$Remove$$2B595(this$$$9, k$$6) {\n var i$$8, h$$13;\n const matchValue$$6 = MutableMap$00602$$TryFindIndex$$2B595(this$$$9, k$$6);\n var $target$$10;\n\n if (matchValue$$6[0]) {\n if (i$$8 = matchValue$$6[2] | 0, (h$$13 = matchValue$$6[1] | 0, i$$8 > -1)) {\n $target$$10 = 0;\n } else {\n $target$$10 = 1;\n }\n } else {\n $target$$10 = 1;\n }\n\n switch ($target$$10) {\n case 0:\n {\n const i$$9 = matchValue$$6[2] | 0;\n const h$$14 = matchValue$$6[1] | 0;\n getItemFromDict(this$$$9[\"entries@23\"], h$$14).splice(i$$9, 1);\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\n\nMutableMap$00602.prototype[Symbol.iterator] = function () {\n var elems;\n const this$$$10 = this;\n return toIterator((elems = delay(function () {\n return collect(function (pairs$$2) {\n return map(function (pair$$2) {\n return pair$$2;\n }, pairs$$2);\n }, this$$$10[\"entries@23\"].values());\n }), getEnumerator(elems)));\n};\n\nMutableMap$00602.prototype.Add = function (item) {\n const this$$$11 = this;\n MutableMap$00602$$Add$$5BDDA1(this$$$11, item[0], item[1]);\n};\n\nMutableMap$00602.prototype.Clear = function () {\n const this$$$12 = this;\n MutableMap$00602$$Clear(this$$$12);\n};\n\nMutableMap$00602.prototype.Contains = function (item$$1) {\n var p;\n const this$$$13 = this;\n const matchValue$$7 = MutableMap$00602$$TryFind$$2B595(this$$$13, item$$1[0]);\n var $target$$11;\n\n if (matchValue$$7 != null) {\n if (p = matchValue$$7, equals(p[1], item$$1[1])) {\n $target$$11 = 0;\n } else {\n $target$$11 = 1;\n }\n } else {\n $target$$11 = 1;\n }\n\n switch ($target$$11) {\n case 0:\n {\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n};\n\nMutableMap$00602.prototype.CopyTo = function (array, arrayIndex) {\n const this$$$14 = this;\n iterateIndexed(function action(i$$10, e) {\n array[arrayIndex + i$$10] = e;\n }, this$$$14);\n};\n\nObject.defineProperty(MutableMap$00602.prototype, \"Count\", {\n \"get\": function () {\n const this$$$15 = this;\n return MutableMap$00602$$get_Count(this$$$15) | 0;\n }\n});\nObject.defineProperty(MutableMap$00602.prototype, \"IsReadOnly\", {\n \"get\": function () {\n return false;\n }\n});\n\nMutableMap$00602.prototype.Remove = function (item$$2) {\n const this$$$17 = this;\n const matchValue$$8 = MutableMap$00602$$TryFind$$2B595(this$$$17, item$$2[0]);\n\n if (matchValue$$8 != null) {\n const pair$$3 = matchValue$$8;\n\n if (equals(pair$$3[1], item$$2[1])) {\n MutableMap$00602$$Remove$$2B595(this$$$17, item$$2[0]), null;\n }\n\n return true;\n } else {\n return false;\n }\n};\n\nObject.defineProperty(MutableMap$00602.prototype, \"size\", {\n \"get\": function () {\n const this$$$18 = this;\n return MutableMap$00602$$get_Count(this$$$18) | 0;\n }\n});\n\nMutableMap$00602.prototype.clear = function () {\n const this$$$19 = this;\n MutableMap$00602$$Clear(this$$$19);\n};\n\nMutableMap$00602.prototype.delete = function (k$$7) {\n const this$$$20 = this;\n return MutableMap$00602$$Remove$$2B595(this$$$20, k$$7);\n};\n\nMutableMap$00602.prototype.entries = function () {\n const this$$$21 = this;\n return map(function mapping(x) {\n return x;\n }, this$$$21);\n};\n\nMutableMap$00602.prototype.get = function (k$$8) {\n const this$$$22 = this;\n return MutableMap$00602$$get_Item$$2B595(this$$$22, k$$8);\n};\n\nMutableMap$00602.prototype.has = function (k$$9) {\n const this$$$23 = this;\n return MutableMap$00602$$ContainsKey$$2B595(this$$$23, k$$9);\n};\n\nMutableMap$00602.prototype.keys = function () {\n const this$$$24 = this;\n return map(function mapping$$1(pair$$4) {\n return pair$$4[0];\n }, this$$$24);\n};\n\nMutableMap$00602.prototype.set = function (k$$10, v$$2) {\n const this$$$25 = this;\n MutableMap$00602$$set_Item$$5BDDA1(this$$$25, k$$10, v$$2);\n return this$$$25;\n};\n\nMutableMap$00602.prototype.values = function () {\n const this$$$26 = this;\n return map(function mapping$$2(pair$$5) {\n return pair$$5[1];\n }, this$$$26);\n};","import { Record, List, declare, Union } from \"./Types.js\";\nimport { type, record, bool, list, union, int32 } from \"./Reflection.js\";\nimport { value as value$$4, some } from \"./Option.js\";\nimport { empty as empty$$1, iterate as iterate$$1, toIterator, map as map$$2, unfold, getEnumerator, fold as fold$$1 } from \"./Seq.js\";\nimport { compare, structuralHash, isDisposable } from \"./Util.js\";\nimport { join, toText, printf } from \"./String.js\";\nimport { MutableMap$00602$$Add$$5BDDA1 as MutableMap$002400602$0024$0024Add$0024$00245BDDA1, MutableMap$00602$$$$002Ector$$Z79760D57 as MutableMap$002400602$0024$0024$0024$0024002Ector$0024$0024Z79760D57 } from \"./MutableMap\";\nexport const MapTree$00602 = declare(function Map_MapTree(tag, name, ...fields) {\n Union.call(this, tag, name, ...fields);\n}, Union);\nexport function MapTree$00602$reflection($gen$$3, $gen$$4) {\n return union(\"Map.MapTree`2\", [$gen$$3, $gen$$4], MapTree$00602, () => [\"MapEmpty\", [\"MapOne\", [$gen$$3, $gen$$4]], [\"MapNode\", [$gen$$3, $gen$$4, MapTree$00602$reflection($gen$$3, $gen$$4), MapTree$00602$reflection($gen$$3, $gen$$4), int32]]]);\n}\nexport function MapTreeModule$$$sizeAux(acc, m) {\n MapTreeModule$$$sizeAux: while (true) {\n switch (m.tag) {\n case 1:\n {\n return acc + 1 | 0;\n }\n\n case 2:\n {\n const r = m.fields[3];\n const l = m.fields[2];\n const $acc$$5 = acc;\n acc = MapTreeModule$$$sizeAux($acc$$5 + 1, l);\n m = r;\n continue MapTreeModule$$$sizeAux;\n }\n\n default:\n {\n return acc | 0;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$size(x) {\n return MapTreeModule$$$sizeAux(0, x);\n}\nexport function MapTreeModule$$$empty() {\n return new MapTree$00602(0, \"MapEmpty\");\n}\nexport function MapTreeModule$$$height(_arg1) {\n switch (_arg1.tag) {\n case 1:\n {\n return 1;\n }\n\n case 2:\n {\n const h = _arg1.fields[4] | 0;\n return h | 0;\n }\n\n default:\n {\n return 0;\n }\n }\n}\nexport function MapTreeModule$$$isEmpty(m$$1) {\n if (m$$1.tag === 0) {\n return true;\n } else {\n return false;\n }\n}\nexport function MapTreeModule$$$mk(l$$1, k, v, r$$1) {\n var $target$$6;\n\n if (l$$1.tag === 0) {\n if (r$$1.tag === 0) {\n $target$$6 = 0;\n } else {\n $target$$6 = 1;\n }\n } else {\n $target$$6 = 1;\n }\n\n switch ($target$$6) {\n case 0:\n {\n return new MapTree$00602(1, \"MapOne\", k, v);\n }\n\n case 1:\n {\n const hl = MapTreeModule$$$height(l$$1) | 0;\n const hr = MapTreeModule$$$height(r$$1) | 0;\n const m$$2 = (hl < hr ? hr : hl) | 0;\n return new MapTree$00602(2, \"MapNode\", k, v, l$$1, r$$1, m$$2 + 1);\n }\n }\n}\nexport function MapTreeModule$$$rebalance(t1, k$$1, v$$1, t2) {\n const t1h = MapTreeModule$$$height(t1) | 0;\n const t2h = MapTreeModule$$$height(t2) | 0;\n\n if (t2h > t1h + 2) {\n if (t2.tag === 2) {\n const t2v = t2.fields[1];\n const t2r = t2.fields[3];\n const t2l = t2.fields[2];\n const t2k = t2.fields[0];\n\n if (MapTreeModule$$$height(t2l) > t1h + 1) {\n if (t2l.tag === 2) {\n const t2lv = t2l.fields[1];\n const t2lr = t2l.fields[3];\n const t2ll = t2l.fields[2];\n const t2lk = t2l.fields[0];\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1, k$$1, v$$1, t2ll), t2lk, t2lv, MapTreeModule$$$mk(t2lr, t2k, t2v, t2r));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1, k$$1, v$$1, t2l), t2k, t2v, t2r);\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else if (t1h > t2h + 2) {\n if (t1.tag === 2) {\n const t1v = t1.fields[1];\n const t1r = t1.fields[3];\n const t1l = t1.fields[2];\n const t1k = t1.fields[0];\n\n if (MapTreeModule$$$height(t1r) > t2h + 1) {\n if (t1r.tag === 2) {\n const t1rv = t1r.fields[1];\n const t1rr = t1r.fields[3];\n const t1rl = t1r.fields[2];\n const t1rk = t1r.fields[0];\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1l, t1k, t1v, t1rl), t1rk, t1rv, MapTreeModule$$$mk(t1rr, k$$1, v$$1, t2));\n } else {\n throw new Error(\"re balance\");\n }\n } else {\n return MapTreeModule$$$mk(t1l, t1k, t1v, MapTreeModule$$$mk(t1r, k$$1, v$$1, t2));\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return MapTreeModule$$$mk(t1, k$$1, v$$1, t2);\n }\n}\nexport function MapTreeModule$$$add(comparer, k$$2, v$$2, m$$3) {\n switch (m$$3.tag) {\n case 1:\n {\n const k2 = m$$3.fields[0];\n const c = comparer.Compare(k$$2, k2) | 0;\n\n if (c < 0) {\n return new MapTree$00602(2, \"MapNode\", k$$2, v$$2, new MapTree$00602(0, \"MapEmpty\"), m$$3, 2);\n } else if (c === 0) {\n return new MapTree$00602(1, \"MapOne\", k$$2, v$$2);\n } else {\n return new MapTree$00602(2, \"MapNode\", k$$2, v$$2, m$$3, new MapTree$00602(0, \"MapEmpty\"), 2);\n }\n }\n\n case 2:\n {\n const v2 = m$$3.fields[1];\n const r$$2 = m$$3.fields[3];\n const l$$2 = m$$3.fields[2];\n const k2$$1 = m$$3.fields[0];\n const h$$1 = m$$3.fields[4] | 0;\n const c$$1 = comparer.Compare(k$$2, k2$$1) | 0;\n\n if (c$$1 < 0) {\n return MapTreeModule$$$rebalance(MapTreeModule$$$add(comparer, k$$2, v$$2, l$$2), k2$$1, v2, r$$2);\n } else if (c$$1 === 0) {\n return new MapTree$00602(2, \"MapNode\", k$$2, v$$2, l$$2, r$$2, h$$1);\n } else {\n return MapTreeModule$$$rebalance(l$$2, k2$$1, v2, MapTreeModule$$$add(comparer, k$$2, v$$2, r$$2));\n }\n }\n\n default:\n {\n return new MapTree$00602(1, \"MapOne\", k$$2, v$$2);\n }\n }\n}\nexport function MapTreeModule$$$find(comparer$$1, k$$3, m$$4) {\n MapTreeModule$$$find: while (true) {\n switch (m$$4.tag) {\n case 1:\n {\n const v2$$1 = m$$4.fields[1];\n const k2$$2 = m$$4.fields[0];\n const c$$2 = comparer$$1.Compare(k$$3, k2$$2) | 0;\n\n if (c$$2 === 0) {\n return v2$$1;\n } else {\n throw new Error(\"key not found\");\n }\n }\n\n case 2:\n {\n const v2$$2 = m$$4.fields[1];\n const r$$3 = m$$4.fields[3];\n const l$$3 = m$$4.fields[2];\n const k2$$3 = m$$4.fields[0];\n const c$$3 = comparer$$1.Compare(k$$3, k2$$3) | 0;\n\n if (c$$3 < 0) {\n const $comparer$$1$$7 = comparer$$1;\n const $k$$3$$8 = k$$3;\n comparer$$1 = $comparer$$1$$7;\n k$$3 = $k$$3$$8;\n m$$4 = l$$3;\n continue MapTreeModule$$$find;\n } else if (c$$3 === 0) {\n return v2$$2;\n } else {\n const $comparer$$1$$9 = comparer$$1;\n const $k$$3$$10 = k$$3;\n comparer$$1 = $comparer$$1$$9;\n k$$3 = $k$$3$$10;\n m$$4 = r$$3;\n continue MapTreeModule$$$find;\n }\n }\n\n default:\n {\n throw new Error(\"key not found\");\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$tryFind(comparer$$2, k$$4, m$$5) {\n MapTreeModule$$$tryFind: while (true) {\n switch (m$$5.tag) {\n case 1:\n {\n const v2$$3 = m$$5.fields[1];\n const k2$$4 = m$$5.fields[0];\n const c$$4 = comparer$$2.Compare(k$$4, k2$$4) | 0;\n\n if (c$$4 === 0) {\n return some(v2$$3);\n } else {\n return null;\n }\n }\n\n case 2:\n {\n const v2$$4 = m$$5.fields[1];\n const r$$4 = m$$5.fields[3];\n const l$$4 = m$$5.fields[2];\n const k2$$5 = m$$5.fields[0];\n const c$$5 = comparer$$2.Compare(k$$4, k2$$5) | 0;\n\n if (c$$5 < 0) {\n const $comparer$$2$$11 = comparer$$2;\n const $k$$4$$12 = k$$4;\n comparer$$2 = $comparer$$2$$11;\n k$$4 = $k$$4$$12;\n m$$5 = l$$4;\n continue MapTreeModule$$$tryFind;\n } else if (c$$5 === 0) {\n return some(v2$$4);\n } else {\n const $comparer$$2$$13 = comparer$$2;\n const $k$$4$$14 = k$$4;\n comparer$$2 = $comparer$$2$$13;\n k$$4 = $k$$4$$14;\n m$$5 = r$$4;\n continue MapTreeModule$$$tryFind;\n }\n }\n\n default:\n {\n return null;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$partition1(comparer$$3, f, k$$5, v$$3, acc1, acc2) {\n if (f(k$$5, v$$3)) {\n return [MapTreeModule$$$add(comparer$$3, k$$5, v$$3, acc1), acc2];\n } else {\n return [acc1, MapTreeModule$$$add(comparer$$3, k$$5, v$$3, acc2)];\n }\n}\nexport function MapTreeModule$$$partitionAux($arg$$21, $arg$$22, $arg$$23, $arg$$24, $arg$$25) {\n MapTreeModule$$$partitionAux: while (true) {\n const comparer$$4 = $arg$$21,\n f$$1 = $arg$$22,\n s = $arg$$23,\n acc_0 = $arg$$24,\n acc_1 = $arg$$25;\n const acc$$1 = [acc_0, acc_1];\n\n switch (s.tag) {\n case 1:\n {\n const v$$4 = s.fields[1];\n const k$$6 = s.fields[0];\n return MapTreeModule$$$partition1(comparer$$4, f$$1, k$$6, v$$4, acc$$1[0], acc$$1[1]);\n }\n\n case 2:\n {\n const v$$5 = s.fields[1];\n const r$$5 = s.fields[3];\n const l$$5 = s.fields[2];\n const k$$7 = s.fields[0];\n const acc$$2 = MapTreeModule$$$partitionAux(comparer$$4, f$$1, r$$5, acc$$1[0], acc$$1[1]);\n const acc$$3 = MapTreeModule$$$partition1(comparer$$4, f$$1, k$$7, v$$5, acc$$2[0], acc$$2[1]);\n $arg$$21 = comparer$$4;\n $arg$$22 = f$$1;\n $arg$$23 = l$$5;\n $arg$$24 = acc$$3[0];\n $arg$$25 = acc$$3[1];\n continue MapTreeModule$$$partitionAux;\n }\n\n default:\n {\n return acc$$1;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$partition(comparer$$5, f$$2, s$$1) {\n return MapTreeModule$$$partitionAux(comparer$$5, f$$2, s$$1, MapTreeModule$$$empty(), MapTreeModule$$$empty());\n}\nexport function MapTreeModule$$$filter1(comparer$$6, f$$3, k$$8, v$$6, acc$$4) {\n if (f$$3(k$$8, v$$6)) {\n return MapTreeModule$$$add(comparer$$6, k$$8, v$$6, acc$$4);\n } else {\n return acc$$4;\n }\n}\nexport function MapTreeModule$$$filterAux($arg$$34, $arg$$35, $arg$$36, $arg$$37) {\n MapTreeModule$$$filterAux: while (true) {\n const comparer$$7 = $arg$$34,\n f$$4 = $arg$$35,\n s$$2 = $arg$$36,\n acc$$5 = $arg$$37;\n\n switch (s$$2.tag) {\n case 1:\n {\n const v$$7 = s$$2.fields[1];\n const k$$9 = s$$2.fields[0];\n return MapTreeModule$$$filter1(comparer$$7, f$$4, k$$9, v$$7, acc$$5);\n }\n\n case 2:\n {\n const v$$8 = s$$2.fields[1];\n const r$$6 = s$$2.fields[3];\n const l$$6 = s$$2.fields[2];\n const k$$10 = s$$2.fields[0];\n const acc$$6 = MapTreeModule$$$filterAux(comparer$$7, f$$4, l$$6, acc$$5);\n const acc$$7 = MapTreeModule$$$filter1(comparer$$7, f$$4, k$$10, v$$8, acc$$6);\n $arg$$34 = comparer$$7;\n $arg$$35 = f$$4;\n $arg$$36 = r$$6;\n $arg$$37 = acc$$7;\n continue MapTreeModule$$$filterAux;\n }\n\n default:\n {\n return acc$$5;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$filter(comparer$$8, f$$5, s$$3) {\n return MapTreeModule$$$filterAux(comparer$$8, f$$5, s$$3, MapTreeModule$$$empty());\n}\nexport function MapTreeModule$$$spliceOutSuccessor(m$$6) {\n switch (m$$6.tag) {\n case 1:\n {\n const v2$$5 = m$$6.fields[1];\n const k2$$6 = m$$6.fields[0];\n return [k2$$6, v2$$5, new MapTree$00602(0, \"MapEmpty\")];\n }\n\n case 2:\n {\n const v2$$6 = m$$6.fields[1];\n const r$$7 = m$$6.fields[3];\n const l$$7 = m$$6.fields[2];\n const k2$$7 = m$$6.fields[0];\n\n if (l$$7.tag === 0) {\n return [k2$$7, v2$$6, r$$7];\n } else {\n const patternInput = MapTreeModule$$$spliceOutSuccessor(l$$7);\n const v3 = patternInput[1];\n const l$0027 = patternInput[2];\n const k3 = patternInput[0];\n return [k3, v3, MapTreeModule$$$mk(l$0027, k2$$7, v2$$6, r$$7)];\n }\n }\n\n default:\n {\n throw new Error(\"internal error: Map.spliceOutSuccessor\");\n }\n }\n}\nexport function MapTreeModule$$$remove(comparer$$9, k$$11, m$$7) {\n switch (m$$7.tag) {\n case 1:\n {\n const k2$$8 = m$$7.fields[0];\n const c$$6 = comparer$$9.Compare(k$$11, k2$$8) | 0;\n\n if (c$$6 === 0) {\n return new MapTree$00602(0, \"MapEmpty\");\n } else {\n return m$$7;\n }\n }\n\n case 2:\n {\n const v2$$7 = m$$7.fields[1];\n const r$$8 = m$$7.fields[3];\n const l$$8 = m$$7.fields[2];\n const k2$$9 = m$$7.fields[0];\n const c$$7 = comparer$$9.Compare(k$$11, k2$$9) | 0;\n\n if (c$$7 < 0) {\n return MapTreeModule$$$rebalance(MapTreeModule$$$remove(comparer$$9, k$$11, l$$8), k2$$9, v2$$7, r$$8);\n } else if (c$$7 === 0) {\n if (l$$8.tag === 0) {\n return r$$8;\n } else if (r$$8.tag === 0) {\n return l$$8;\n } else {\n const patternInput$$1 = MapTreeModule$$$spliceOutSuccessor(r$$8);\n const sv = patternInput$$1[1];\n const sk = patternInput$$1[0];\n const r$0027 = patternInput$$1[2];\n return MapTreeModule$$$mk(l$$8, sk, sv, r$0027);\n }\n } else {\n return MapTreeModule$$$rebalance(l$$8, k2$$9, v2$$7, MapTreeModule$$$remove(comparer$$9, k$$11, r$$8));\n }\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$mem(comparer$$10, k$$12, m$$8) {\n MapTreeModule$$$mem: while (true) {\n switch (m$$8.tag) {\n case 1:\n {\n const k2$$10 = m$$8.fields[0];\n return comparer$$10.Compare(k$$12, k2$$10) === 0;\n }\n\n case 2:\n {\n const r$$9 = m$$8.fields[3];\n const l$$9 = m$$8.fields[2];\n const k2$$11 = m$$8.fields[0];\n const c$$8 = comparer$$10.Compare(k$$12, k2$$11) | 0;\n\n if (c$$8 < 0) {\n const $comparer$$10$$41 = comparer$$10;\n const $k$$12$$42 = k$$12;\n comparer$$10 = $comparer$$10$$41;\n k$$12 = $k$$12$$42;\n m$$8 = l$$9;\n continue MapTreeModule$$$mem;\n } else if (c$$8 === 0) {\n return true;\n } else {\n const $comparer$$10$$43 = comparer$$10;\n const $k$$12$$44 = k$$12;\n comparer$$10 = $comparer$$10$$43;\n k$$12 = $k$$12$$44;\n m$$8 = r$$9;\n continue MapTreeModule$$$mem;\n }\n }\n\n default:\n {\n return false;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$iter($arg$$45, $arg$$46) {\n MapTreeModule$$$iter: while (true) {\n const f$$6 = $arg$$45,\n m$$9 = $arg$$46;\n\n switch (m$$9.tag) {\n case 1:\n {\n const v2$$8 = m$$9.fields[1];\n const k2$$12 = m$$9.fields[0];\n f$$6(k2$$12, v2$$8);\n break;\n }\n\n case 2:\n {\n const v2$$9 = m$$9.fields[1];\n const r$$10 = m$$9.fields[3];\n const l$$10 = m$$9.fields[2];\n const k2$$13 = m$$9.fields[0];\n MapTreeModule$$$iter(f$$6, l$$10);\n f$$6(k2$$13, v2$$9);\n $arg$$45 = f$$6;\n $arg$$46 = r$$10;\n continue MapTreeModule$$$iter;\n break;\n }\n\n default:\n {}\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$tryPick($arg$$47, $arg$$48) {\n MapTreeModule$$$tryPick: while (true) {\n const f$$7 = $arg$$47,\n m$$10 = $arg$$48;\n\n switch (m$$10.tag) {\n case 1:\n {\n const v2$$10 = m$$10.fields[1];\n const k2$$14 = m$$10.fields[0];\n return f$$7(k2$$14, v2$$10);\n }\n\n case 2:\n {\n const v2$$11 = m$$10.fields[1];\n const r$$11 = m$$10.fields[3];\n const l$$11 = m$$10.fields[2];\n const k2$$15 = m$$10.fields[0];\n const matchValue$$2 = MapTreeModule$$$tryPick(f$$7, l$$11);\n\n if (matchValue$$2 == null) {\n const matchValue$$3 = f$$7(k2$$15, v2$$11);\n\n if (matchValue$$3 == null) {\n $arg$$47 = f$$7;\n $arg$$48 = r$$11;\n continue MapTreeModule$$$tryPick;\n } else {\n const res$$1 = matchValue$$3;\n return res$$1;\n }\n } else {\n const res = matchValue$$2;\n return res;\n }\n }\n\n default:\n {\n return null;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$exists($arg$$49, $arg$$50) {\n MapTreeModule$$$exists: while (true) {\n const f$$8 = $arg$$49,\n m$$11 = $arg$$50;\n\n switch (m$$11.tag) {\n case 1:\n {\n const v2$$12 = m$$11.fields[1];\n const k2$$16 = m$$11.fields[0];\n return f$$8(k2$$16, v2$$12);\n }\n\n case 2:\n {\n const v2$$13 = m$$11.fields[1];\n const r$$12 = m$$11.fields[3];\n const l$$12 = m$$11.fields[2];\n const k2$$17 = m$$11.fields[0];\n\n if (MapTreeModule$$$exists(f$$8, l$$12) ? true : f$$8(k2$$17, v2$$13)) {\n return true;\n } else {\n $arg$$49 = f$$8;\n $arg$$50 = r$$12;\n continue MapTreeModule$$$exists;\n }\n }\n\n default:\n {\n return false;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$forall($arg$$51, $arg$$52) {\n MapTreeModule$$$forall: while (true) {\n const f$$9 = $arg$$51,\n m$$12 = $arg$$52;\n\n switch (m$$12.tag) {\n case 1:\n {\n const v2$$14 = m$$12.fields[1];\n const k2$$18 = m$$12.fields[0];\n return f$$9(k2$$18, v2$$14);\n }\n\n case 2:\n {\n const v2$$15 = m$$12.fields[1];\n const r$$13 = m$$12.fields[3];\n const l$$13 = m$$12.fields[2];\n const k2$$19 = m$$12.fields[0];\n\n if (MapTreeModule$$$forall(f$$9, l$$13) ? f$$9(k2$$19, v2$$15) : false) {\n $arg$$51 = f$$9;\n $arg$$52 = r$$13;\n continue MapTreeModule$$$forall;\n } else {\n return false;\n }\n }\n\n default:\n {\n return true;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$map(f$$10, m$$13) {\n switch (m$$13.tag) {\n case 1:\n {\n const v$$9 = m$$13.fields[1];\n const k$$13 = m$$13.fields[0];\n return new MapTree$00602(1, \"MapOne\", k$$13, f$$10(v$$9));\n }\n\n case 2:\n {\n const v$$10 = m$$13.fields[1];\n const r$$14 = m$$13.fields[3];\n const l$$14 = m$$13.fields[2];\n const k$$14 = m$$13.fields[0];\n const h$$2 = m$$13.fields[4] | 0;\n const l2 = MapTreeModule$$$map(f$$10, l$$14);\n const v2$$16 = f$$10(v$$10);\n const r2 = MapTreeModule$$$map(f$$10, r$$14);\n return new MapTree$00602(2, \"MapNode\", k$$14, v2$$16, l2, r2, h$$2);\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$mapi(f$$11, m$$14) {\n switch (m$$14.tag) {\n case 1:\n {\n const v$$11 = m$$14.fields[1];\n const k$$15 = m$$14.fields[0];\n return new MapTree$00602(1, \"MapOne\", k$$15, f$$11(k$$15, v$$11));\n }\n\n case 2:\n {\n const v$$12 = m$$14.fields[1];\n const r$$15 = m$$14.fields[3];\n const l$$15 = m$$14.fields[2];\n const k$$16 = m$$14.fields[0];\n const h$$3 = m$$14.fields[4] | 0;\n const l2$$1 = MapTreeModule$$$mapi(f$$11, l$$15);\n const v2$$17 = f$$11(k$$16, v$$12);\n const r2$$1 = MapTreeModule$$$mapi(f$$11, r$$15);\n return new MapTree$00602(2, \"MapNode\", k$$16, v2$$17, l2$$1, r2$$1, h$$3);\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$foldBack($arg$$57, $arg$$58, $arg$$59) {\n MapTreeModule$$$foldBack: while (true) {\n const f$$12 = $arg$$57,\n m$$15 = $arg$$58,\n x$$1 = $arg$$59;\n\n switch (m$$15.tag) {\n case 1:\n {\n const v$$13 = m$$15.fields[1];\n const k$$17 = m$$15.fields[0];\n return f$$12(k$$17, v$$13, x$$1);\n }\n\n case 2:\n {\n const v$$14 = m$$15.fields[1];\n const r$$16 = m$$15.fields[3];\n const l$$16 = m$$15.fields[2];\n const k$$18 = m$$15.fields[0];\n const x$$2 = MapTreeModule$$$foldBack(f$$12, r$$16, x$$1);\n const x$$3 = f$$12(k$$18, v$$14, x$$2);\n $arg$$57 = f$$12;\n $arg$$58 = l$$16;\n $arg$$59 = x$$3;\n continue MapTreeModule$$$foldBack;\n }\n\n default:\n {\n return x$$1;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$fold($arg$$60, $arg$$61, $arg$$62) {\n MapTreeModule$$$fold: while (true) {\n const f$$13 = $arg$$60,\n x$$4 = $arg$$61,\n m$$16 = $arg$$62;\n\n switch (m$$16.tag) {\n case 1:\n {\n const v$$15 = m$$16.fields[1];\n const k$$19 = m$$16.fields[0];\n return f$$13(x$$4, k$$19, v$$15);\n }\n\n case 2:\n {\n const v$$16 = m$$16.fields[1];\n const r$$17 = m$$16.fields[3];\n const l$$17 = m$$16.fields[2];\n const k$$20 = m$$16.fields[0];\n const x$$5 = MapTreeModule$$$fold(f$$13, x$$4, l$$17);\n const x$$6 = f$$13(x$$5, k$$20, v$$16);\n $arg$$60 = f$$13;\n $arg$$61 = x$$6;\n $arg$$62 = r$$17;\n continue MapTreeModule$$$fold;\n }\n\n default:\n {\n return x$$4;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, m$$17, x$$7) {\n switch (m$$17.tag) {\n case 1:\n {\n const v$$17 = m$$17.fields[1];\n const k$$21 = m$$17.fields[0];\n const cLoKey = comparer$$11.Compare(lo, k$$21) | 0;\n const cKeyHi = comparer$$11.Compare(k$$21, hi) | 0;\n const x$$8 = (cLoKey <= 0 ? cKeyHi <= 0 : false) ? f$$14(k$$21, v$$17, x$$7) : x$$7;\n return x$$8;\n }\n\n case 2:\n {\n const v$$18 = m$$17.fields[1];\n const r$$18 = m$$17.fields[3];\n const l$$18 = m$$17.fields[2];\n const k$$22 = m$$17.fields[0];\n const cLoKey$$1 = comparer$$11.Compare(lo, k$$22) | 0;\n const cKeyHi$$1 = comparer$$11.Compare(k$$22, hi) | 0;\n const x$$9 = cLoKey$$1 < 0 ? MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, l$$18, x$$7) : x$$7;\n const x$$10 = (cLoKey$$1 <= 0 ? cKeyHi$$1 <= 0 : false) ? f$$14(k$$22, v$$18, x$$9) : x$$9;\n const x$$11 = cKeyHi$$1 < 0 ? MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, r$$18, x$$10) : x$$10;\n return x$$11;\n }\n\n default:\n {\n return x$$7;\n }\n }\n}\nexport function MapTreeModule$$$foldSection(comparer$$12, lo$$1, hi$$1, f$$15, m$$18, x$$12) {\n if (comparer$$12.Compare(lo$$1, hi$$1) === 1) {\n return x$$12;\n } else {\n return MapTreeModule$$$foldFromTo(comparer$$12, lo$$1, hi$$1, f$$15, m$$18, x$$12);\n }\n}\nexport function MapTreeModule$$$loop(m$$19, acc$$8) {\n MapTreeModule$$$loop: while (true) {\n switch (m$$19.tag) {\n case 1:\n {\n const v$$19 = m$$19.fields[1];\n const k$$23 = m$$19.fields[0];\n return new List([k$$23, v$$19], acc$$8);\n }\n\n case 2:\n {\n const v$$20 = m$$19.fields[1];\n const r$$19 = m$$19.fields[3];\n const l$$19 = m$$19.fields[2];\n const k$$24 = m$$19.fields[0];\n const $acc$$8$$75 = acc$$8;\n m$$19 = l$$19;\n acc$$8 = new List([k$$24, v$$20], MapTreeModule$$$loop(r$$19, $acc$$8$$75));\n continue MapTreeModule$$$loop;\n }\n\n default:\n {\n return acc$$8;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$toList(m$$20) {\n return MapTreeModule$$$loop(m$$20, new List());\n}\nexport function MapTreeModule$$$ofList(comparer$$13, l$$20) {\n return fold$$1(function (acc$$9, tupledArg) {\n const k$$25 = tupledArg[0];\n const v$$21 = tupledArg[1];\n return MapTreeModule$$$add(comparer$$13, k$$25, v$$21, acc$$9);\n }, MapTreeModule$$$empty(), l$$20);\n}\nexport function MapTreeModule$$$mkFromEnumerator(comparer$$14, acc$$10, e) {\n MapTreeModule$$$mkFromEnumerator: while (true) {\n if (e.MoveNext()) {\n const patternInput$$2 = e.Current;\n const y = patternInput$$2[1];\n const x$$13 = patternInput$$2[0];\n const $acc$$10$$77 = acc$$10;\n const $comparer$$14$$76 = comparer$$14;\n const $e$$78 = e;\n comparer$$14 = $comparer$$14$$76;\n acc$$10 = MapTreeModule$$$add($comparer$$14$$76, x$$13, y, $acc$$10$$77);\n e = $e$$78;\n continue MapTreeModule$$$mkFromEnumerator;\n } else {\n return acc$$10;\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$ofArray(comparer$$15, arr) {\n let res$$2 = MapTreeModule$$$empty();\n\n for (let i = 0; i <= arr.length - 1; i++) {\n const patternInput$$3 = arr[i];\n const y$$1 = patternInput$$3[1];\n const x$$14 = patternInput$$3[0];\n res$$2 = MapTreeModule$$$add(comparer$$15, x$$14, y$$1, res$$2);\n }\n\n return res$$2;\n}\nexport function MapTreeModule$$$ofSeq(comparer$$16, c$$9) {\n const ie = getEnumerator(c$$9);\n\n try {\n return MapTreeModule$$$mkFromEnumerator(comparer$$16, MapTreeModule$$$empty(), ie);\n } finally {\n if (isDisposable(ie)) {\n ie.Dispose();\n }\n }\n}\nexport function MapTreeModule$$$copyToArray(s$$4, arr$$1, i$$1) {\n let j = i$$1 | 0;\n MapTreeModule$$$iter(function f$$16(x$$15, y$$2) {\n arr$$1[j] = [x$$15, y$$2];\n j = j + 1;\n }, s$$4);\n}\nexport const MapTreeModule$002EMapIterator$00602 = declare(function Map_MapTreeModule_MapIterator(arg1, arg2) {\n this.stack = arg1;\n this.started = arg2;\n}, Record);\nexport function MapTreeModule$002EMapIterator$00602$reflection($gen$$79, $gen$$80) {\n return record(\"Map.MapTreeModule.MapIterator`2\", [$gen$$79, $gen$$80], MapTreeModule$002EMapIterator$00602, () => [[\"stack\", list(MapTree$00602$reflection($gen$$79, $gen$$80))], [\"started\", bool]]);\n}\nexport function MapTreeModule$$$collapseLHS(stack) {\n MapTreeModule$$$collapseLHS: while (true) {\n if (stack.tail != null) {\n if (stack.head.tag === 1) {\n return stack;\n } else if (stack.head.tag === 2) {\n const k$$26 = stack.head.fields[0];\n const l$$21 = stack.head.fields[2];\n const r$$20 = stack.head.fields[3];\n const rest$$1 = stack.tail;\n const v$$22 = stack.head.fields[1];\n stack = new List(l$$21, new List(new MapTree$00602(1, \"MapOne\", k$$26, v$$22), new List(r$$20, rest$$1)));\n continue MapTreeModule$$$collapseLHS;\n } else {\n const rest = stack.tail;\n stack = rest;\n continue MapTreeModule$$$collapseLHS;\n }\n } else {\n return new List();\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$mkIterator(s$$5) {\n return new MapTreeModule$002EMapIterator$00602(MapTreeModule$$$collapseLHS(new List(s$$5, new List())), false);\n}\nexport function MapTreeModule$$$notStarted() {\n throw new Error(\"enumeration not started\");\n}\nexport function MapTreeModule$$$alreadyFinished() {\n throw new Error(\"enumeration already finished\");\n}\nexport function MapTreeModule$$$current(i$$2) {\n if (i$$2.started) {\n const matchValue$$4 = i$$2.stack;\n\n if (matchValue$$4.tail == null) {\n return MapTreeModule$$$alreadyFinished();\n } else if (matchValue$$4.head.tag === 1) {\n const k$$27 = matchValue$$4.head.fields[0];\n const v$$23 = matchValue$$4.head.fields[1];\n return [k$$27, v$$23];\n } else {\n throw new Error(\"Please report error: Map iterator, unexpected stack for current\");\n }\n } else {\n return MapTreeModule$$$notStarted();\n }\n}\nexport function MapTreeModule$$$moveNext(i$$3) {\n if (i$$3.started) {\n const matchValue$$5 = i$$3.stack;\n\n if (matchValue$$5.tail == null) {\n return false;\n } else if (matchValue$$5.head.tag === 1) {\n const rest$$2 = matchValue$$5.tail;\n i$$3.stack = MapTreeModule$$$collapseLHS(rest$$2);\n return !(i$$3.stack.tail == null);\n } else {\n throw new Error(\"Please report error: Map iterator, unexpected stack for moveNext\");\n }\n } else {\n i$$3.started = true;\n return !(i$$3.stack.tail == null);\n }\n}\nexport const MapTreeModule$002EmkIEnumerator$0027$00602 = declare(function Map_MapTreeModule_mkIEnumerator_(s$$6) {\n const $this$$1 = this;\n $this$$1.s = s$$6;\n $this$$1.i = MapTreeModule$$$mkIterator($this$$1.s);\n});\nexport function MapTreeModule$002EmkIEnumerator$0027$00602$reflection($gen$$81, $gen$$82) {\n return type(\"Map.MapTreeModule.mkIEnumerator'`2\", [$gen$$81, $gen$$82]);\n}\nexport function MapTreeModule$002EmkIEnumerator$0027$00602$$$$002Ector$$Z26BC498C(s$$6) {\n return this instanceof MapTreeModule$002EmkIEnumerator$0027$00602 ? MapTreeModule$002EmkIEnumerator$0027$00602.call(this, s$$6) : new MapTreeModule$002EmkIEnumerator$0027$00602(s$$6);\n}\nObject.defineProperty(MapTreeModule$002EmkIEnumerator$0027$00602.prototype, \"Current\", {\n \"get\": function () {\n const __ = this;\n return MapTreeModule$$$current(__.i);\n }\n});\n\nMapTreeModule$002EmkIEnumerator$0027$00602.prototype.MoveNext = function () {\n const __$$1 = this;\n return MapTreeModule$$$moveNext(__$$1.i);\n};\n\nMapTreeModule$002EmkIEnumerator$0027$00602.prototype.Reset = function () {\n const __$$2 = this;\n __$$2.i = MapTreeModule$$$mkIterator(__$$2.s);\n};\n\nMapTreeModule$002EmkIEnumerator$0027$00602.prototype.Dispose = function () {};\n\nexport function MapTreeModule$$$mkIEnumerator(s$$7) {\n return MapTreeModule$002EmkIEnumerator$0027$00602$$$$002Ector$$Z26BC498C(s$$7);\n}\nexport function MapTreeModule$$$toSeq(s$$8) {\n const en = MapTreeModule$$$mkIEnumerator(s$$8);\n return unfold(function generator(en$$1) {\n if (en$$1.MoveNext()) {\n return [en$$1.Current, en$$1];\n } else {\n return null;\n }\n }, en);\n}\nexport const FSharpMap = declare(function Map_Map(comparer$$17, tree) {\n const $this$$2 = this;\n $this$$2.comparer = comparer$$17;\n $this$$2.tree = tree;\n});\nexport function FSharpMap$reflection($gen$$83, $gen$$84) {\n return type(\"Map.FSharpMap\", [$gen$$83, $gen$$84]);\n}\nexport function FSharpMap$$$$002Ector$$58ADD115(comparer$$17, tree) {\n return this instanceof FSharpMap ? FSharpMap.call(this, comparer$$17, tree) : new FSharpMap(comparer$$17, tree);\n}\nexport function FSharpMap$$get_Comparer(__$$4) {\n return __$$4.comparer;\n}\nexport function FSharpMap$$get_Tree(__$$5) {\n return __$$5.tree;\n}\nexport function FSharpMap$$Add$$5BDDA1(__$$6, k$$28, v$$24) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$6.comparer, MapTreeModule$$$add(__$$6.comparer, k$$28, v$$24, __$$6.tree));\n}\nexport function FSharpMap$$get_IsEmpty(__$$7) {\n return MapTreeModule$$$isEmpty(__$$7.tree);\n}\nexport function FSharpMap$$get_Item$$2B595(__$$8, k$$29) {\n return MapTreeModule$$$find(__$$8.comparer, k$$29, __$$8.tree);\n}\nexport function FSharpMap$$TryGetValue$$5BDDA1(__$$9, k$$30, defValue) {\n const matchValue$$6 = MapTreeModule$$$tryFind(__$$9.comparer, k$$30, __$$9.tree);\n\n if (matchValue$$6 == null) {\n return [false, defValue];\n } else {\n const v$$25 = value$$4(matchValue$$6);\n return [true, v$$25];\n }\n}\nexport function FSharpMap$$TryPick$$72321DD7(__$$10, f$$17) {\n return MapTreeModule$$$tryPick(f$$17, __$$10.tree);\n}\nexport function FSharpMap$$Exists$$Z395DDC35(__$$11, f$$18) {\n return MapTreeModule$$$exists(f$$18, __$$11.tree);\n}\nexport function FSharpMap$$Filter$$Z395DDC35(__$$12, f$$19) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$12.comparer, MapTreeModule$$$filter(__$$12.comparer, f$$19, __$$12.tree));\n}\nexport function FSharpMap$$ForAll$$Z395DDC35(__$$13, f$$20) {\n return MapTreeModule$$$forall(f$$20, __$$13.tree);\n}\nexport function FSharpMap$$Fold(__$$14, f$$21, acc$$11) {\n return MapTreeModule$$$foldBack(f$$21, __$$14.tree, acc$$11);\n}\nexport function FSharpMap$$FoldSection(__$$15, lo$$2, hi$$2, f$$22, acc$$12) {\n return MapTreeModule$$$foldSection(__$$15.comparer, lo$$2, hi$$2, f$$22, __$$15.tree, acc$$12);\n}\nexport function FSharpMap$$Iterate$$1DCFB91D(__$$16, f$$23) {\n MapTreeModule$$$iter(f$$23, __$$16.tree);\n}\nexport function FSharpMap$$MapRange$$6DC7247(__$$17, f$$24) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$17.comparer, MapTreeModule$$$map(f$$24, __$$17.tree));\n}\nexport function FSharpMap$$Map$$Z6F6B671C(__$$18, f$$25) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$18.comparer, MapTreeModule$$$mapi(f$$25, __$$18.tree));\n}\nexport function FSharpMap$$Partition$$Z395DDC35(__$$19, f$$26) {\n const patternInput$$4 = MapTreeModule$$$partition(__$$19.comparer, f$$26, __$$19.tree);\n const r2$$2 = patternInput$$4[1];\n const r1 = patternInput$$4[0];\n return [FSharpMap$$$$002Ector$$58ADD115(__$$19.comparer, r1), FSharpMap$$$$002Ector$$58ADD115(__$$19.comparer, r2$$2)];\n}\nexport function FSharpMap$$get_Count(__$$20) {\n return MapTreeModule$$$size(__$$20.tree);\n}\nexport function FSharpMap$$ContainsKey$$2B595(__$$21, k$$31) {\n return MapTreeModule$$$mem(__$$21.comparer, k$$31, __$$21.tree);\n}\nexport function FSharpMap$$Remove$$2B595(__$$22, k$$32) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$22.comparer, MapTreeModule$$$remove(__$$22.comparer, k$$32, __$$22.tree));\n}\nexport function FSharpMap$$TryFind$$2B595(__$$23, k$$33) {\n return MapTreeModule$$$tryFind(__$$23.comparer, k$$33, __$$23.tree);\n}\nexport function FSharpMap$$ToList(__$$24) {\n return MapTreeModule$$$toList(__$$24.tree);\n}\n\nFSharpMap.prototype.toString = function () {\n const this$ = this;\n return \"map [\" + join(\"; \", ...map$$2(function mapping(kv) {\n return toText(printf(\"(%A, %A)\"))(kv[0])(kv[1]);\n }, this$)) + \"]\";\n};\n\nFSharpMap.prototype.GetHashCode = function () {\n const this$$$1 = this;\n\n const combineHash = function combineHash(x$$16, y$$3) {\n return (x$$16 << 1) + y$$3 + 631;\n };\n\n let res$$3 = 0;\n const e$$1 = MapTreeModule$$$mkIEnumerator(FSharpMap$$get_Tree(this$$$1));\n\n while (e$$1.MoveNext()) {\n const activePatternResult3536 = e$$1.Current;\n const y$$4 = activePatternResult3536[1];\n const x$$17 = activePatternResult3536[0];\n res$$3 = combineHash(res$$3, structuralHash(x$$17));\n res$$3 = combineHash(res$$3, structuralHash(y$$4));\n }\n\n return Math.abs(res$$3) | 0;\n};\n\nFSharpMap.prototype.Equals = function (that) {\n const this$$$2 = this;\n return this$$$2.CompareTo(that) === 0;\n};\n\nFSharpMap.prototype[Symbol.iterator] = function () {\n const __$$25 = this;\n return toIterator(MapTreeModule$$$mkIEnumerator(__$$25.tree));\n};\n\nFSharpMap.prototype.CompareTo = function (obj) {\n const m$$22 = this;\n const m2 = obj;\n let res$$4 = 0;\n let finished = false;\n const e1 = MapTreeModule$$$mkIEnumerator(FSharpMap$$get_Tree(m$$22));\n\n try {\n const e2 = MapTreeModule$$$mkIEnumerator(FSharpMap$$get_Tree(m2));\n\n try {\n while (!finished ? res$$4 === 0 : false) {\n const matchValue$$7 = [e1.MoveNext(), e2.MoveNext()];\n\n if (matchValue$$7[0]) {\n if (matchValue$$7[1]) {\n const kvp1 = e1.Current;\n const kvp2 = e2.Current;\n const c$$10 = m$$22.comparer.Compare(kvp1[0], kvp2[0]) | 0;\n res$$4 = c$$10 !== 0 ? c$$10 : compare(kvp1[1], kvp2[1]);\n } else {\n res$$4 = 1;\n }\n } else if (matchValue$$7[1]) {\n res$$4 = -1;\n } else {\n finished = true;\n }\n }\n\n return res$$4 | 0;\n } finally {\n if (isDisposable(e2)) {\n e2.Dispose();\n }\n }\n } finally {\n if (isDisposable(e1)) {\n e1.Dispose();\n }\n }\n};\n\nObject.defineProperty(FSharpMap.prototype, \"size\", {\n \"get\": function () {\n const this$$$3 = this;\n return FSharpMap$$get_Count(this$$$3) | 0;\n }\n});\n\nFSharpMap.prototype.clear = function () {\n throw new Error(\"Map cannot be mutated\");\n};\n\nFSharpMap.prototype.delete = function (_arg1$$1) {\n throw new Error(\"Map cannot be mutated\");\n};\n\nFSharpMap.prototype.entries = function () {\n const this$$$4 = this;\n return MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$4));\n};\n\nFSharpMap.prototype.get = function (k$$34) {\n const this$$$5 = this;\n return FSharpMap$$get_Item$$2B595(this$$$5, k$$34);\n};\n\nFSharpMap.prototype.has = function (k$$35) {\n const this$$$6 = this;\n return FSharpMap$$ContainsKey$$2B595(this$$$6, k$$35);\n};\n\nFSharpMap.prototype.keys = function () {\n const this$$$7 = this;\n return map$$2(function mapping$$1(kv$$1) {\n return kv$$1[0];\n }, MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$7)));\n};\n\nFSharpMap.prototype.set = function (k$$36, v$$26) {\n throw new Error(\"Map cannot be mutated\");\n};\n\nFSharpMap.prototype.values = function () {\n const this$$$8 = this;\n return map$$2(function mapping$$2(kv$$2) {\n return kv$$2[1];\n }, MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$8)));\n};\n\nexport function isEmpty(m$$23) {\n return FSharpMap$$get_IsEmpty(m$$23);\n}\nexport function add(k$$37, v$$27, m$$24) {\n return FSharpMap$$Add$$5BDDA1(m$$24, k$$37, v$$27);\n}\nexport function find(k$$38, m$$25) {\n return FSharpMap$$get_Item$$2B595(m$$25, k$$38);\n}\nexport function tryFind(k$$39, m$$26) {\n return FSharpMap$$TryFind$$2B595(m$$26, k$$39);\n}\nexport function remove(k$$40, m$$27) {\n return FSharpMap$$Remove$$2B595(m$$27, k$$40);\n}\nexport function containsKey(k$$41, m$$28) {\n return FSharpMap$$ContainsKey$$2B595(m$$28, k$$41);\n}\nexport function iterate(f$$27, m$$29) {\n FSharpMap$$Iterate$$1DCFB91D(m$$29, f$$27);\n}\nexport function tryPick(f$$28, m$$30) {\n return FSharpMap$$TryPick$$72321DD7(m$$30, f$$28);\n}\nexport function pick(f$$29, m$$31) {\n const matchValue$$8 = tryPick(f$$29, m$$31);\n\n if (matchValue$$8 != null) {\n const res$$5 = value$$4(matchValue$$8);\n return res$$5;\n } else {\n throw new Error(\"key not found\");\n }\n}\nexport function exists(f$$30, m$$32) {\n return FSharpMap$$Exists$$Z395DDC35(m$$32, f$$30);\n}\nexport function filter(f$$31, m$$33) {\n return FSharpMap$$Filter$$Z395DDC35(m$$33, f$$31);\n}\nexport function partition(f$$32, m$$34) {\n return FSharpMap$$Partition$$Z395DDC35(m$$34, f$$32);\n}\nexport function forAll(f$$33, m$$35) {\n return FSharpMap$$ForAll$$Z395DDC35(m$$35, f$$33);\n}\nexport function mapRange(f$$34, m$$36) {\n return FSharpMap$$MapRange$$6DC7247(m$$36, f$$34);\n}\nexport function map(f$$35, m$$37) {\n return FSharpMap$$Map$$Z6F6B671C(m$$37, f$$35);\n}\nexport function fold(f$$36, z, m$$38) {\n return MapTreeModule$$$fold(f$$36, z, FSharpMap$$get_Tree(m$$38));\n}\nexport function foldBack(f$$37, m$$39, z$$1) {\n return MapTreeModule$$$foldBack(f$$37, FSharpMap$$get_Tree(m$$39), z$$1);\n}\nexport function toSeq(m$$40) {\n return MapTreeModule$$$toSeq(FSharpMap$$get_Tree(m$$40));\n}\nexport function findKey(f$$38, m$$41) {\n const _arg1$$2 = MapTreeModule$$$tryPick(function f$$39(k$$42, v$$28) {\n if (f$$38(k$$42, v$$28)) {\n return some(k$$42);\n } else {\n return null;\n }\n }, FSharpMap$$get_Tree(m$$41));\n\n if (_arg1$$2 == null) {\n throw new Error(\"Key not found\");\n } else {\n const k$$43 = value$$4(_arg1$$2);\n return k$$43;\n }\n}\nexport function tryFindKey(f$$40, m$$43) {\n return MapTreeModule$$$tryPick(function f$$41(k$$44, v$$29) {\n if (f$$40(k$$44, v$$29)) {\n return some(k$$44);\n } else {\n return null;\n }\n }, FSharpMap$$get_Tree(m$$43));\n}\nexport function ofList(l$$22, comparer$$18) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$18, MapTreeModule$$$ofList(comparer$$18, l$$22));\n}\nexport function ofSeq(l$$23, comparer$$19) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$19, MapTreeModule$$$ofSeq(comparer$$19, l$$23));\n}\nexport function ofArray(array, comparer$$20) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$20, MapTreeModule$$$ofArray(comparer$$20, array));\n}\nexport function toList(m$$45) {\n return FSharpMap$$ToList(m$$45);\n}\nexport function toArray(m$$46) {\n const res$$6 = new Array(FSharpMap$$get_Count(m$$46));\n MapTreeModule$$$copyToArray(FSharpMap$$get_Tree(m$$46), res$$6, 0);\n return res$$6;\n}\nexport function empty(comparer$$21) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$21, new MapTree$00602(0, \"MapEmpty\"));\n}\n\nfunction createMutablePrivate(comparer$$22, tree$0027) {\n let tree$$1 = tree$0027;\n return {\n get size() {\n return MapTreeModule$$$size(tree$$1);\n },\n\n clear() {\n tree$$1 = new MapTree$00602(0, \"MapEmpty\");\n },\n\n delete(x$$18) {\n if (MapTreeModule$$$mem(comparer$$22, x$$18, tree$$1)) {\n tree$$1 = MapTreeModule$$$remove(comparer$$22, x$$18, tree$$1);\n return true;\n } else {\n return false;\n }\n },\n\n entries() {\n return MapTreeModule$$$toSeq(tree$$1);\n },\n\n get(k$$45) {\n return MapTreeModule$$$find(comparer$$22, k$$45, tree$$1);\n },\n\n has(x$$19) {\n return MapTreeModule$$$mem(comparer$$22, x$$19, tree$$1);\n },\n\n keys() {\n return map$$2(function mapping$$3(kv$$3) {\n return kv$$3[0];\n }, MapTreeModule$$$toSeq(tree$$1));\n },\n\n set(k$$46, v$$30) {\n const this$$$9 = this;\n tree$$1 = MapTreeModule$$$add(comparer$$22, k$$46, v$$30, tree$$1);\n return this$$$9;\n },\n\n values() {\n return map$$2(function mapping$$4(kv$$4) {\n return kv$$4[1];\n }, MapTreeModule$$$toSeq(tree$$1));\n },\n\n [Symbol.iterator]() {\n return toIterator(MapTreeModule$$$mkIEnumerator(tree$$1));\n },\n\n GetEnumerator() {\n return MapTreeModule$$$mkIEnumerator(tree$$1);\n }\n\n };\n}\n\nexport function createMutable(source$$5, comparer$$23) {\n const map$$1 = MutableMap$002400602$0024$0024$0024$0024002Ector$0024$0024Z79760D57(comparer$$23);\n iterate$$1(function (forLoopVar) {\n const value = forLoopVar[1];\n const key = forLoopVar[0];\n MutableMap$002400602$0024$0024Add$0024$00245BDDA1(map$$1, key, value);\n }, source$$5);\n return map$$1;\n}\nexport function groupBy(projection, xs, comparer$$24) {\n const dict = createMutable(empty$$1(), comparer$$24);\n iterate$$1(function (v$$31) {\n const key$$1 = projection(v$$31);\n\n if (dict.has(key$$1)) {\n dict.get(key$$1).push(v$$31);\n } else {\n dict.set(key$$1, [v$$31]), null;\n }\n }, xs);\n return map$$2(function mapping$$5(kv$$5) {\n return [kv$$5[0], kv$$5[1]];\n }, dict);\n}\nexport function countBy(projection$$1, xs$$1, comparer$$25) {\n const dict$$1 = createMutable(empty$$1(), comparer$$25);\n iterate$$1(function (value$$2) {\n const key$$2 = projection$$1(value$$2);\n dict$$1.has(key$$2) ? dict$$1.set(key$$2, dict$$1.get(key$$2) + 1) : dict$$1.set(key$$2, 1), null;\n }, xs$$1);\n return map$$2(function mapping$$6(kv$$6) {\n return [kv$$6[0], kv$$6[1]];\n }, dict$$1);\n}\nexport function count(m$$47) {\n return FSharpMap$$get_Count(m$$47);\n}","import { declare } from \"./Types.js\";\nimport { type } from \"./Reflection.js\";\nimport { EqualityComparer$00601$$$get_Default as EqualityComparer$002400601$0024$0024$0024get_Default } from \"./System.Collections.Generic\";\nimport { getItemFromDict, tryGetValue } from \"./Util.js\";\nimport { some } from \"./Option.js\";\nimport { iterateIndexed, toIterator, getEnumerator, delay, collect, map, sumBy } from \"./Seq.js\";\nexport const MutableSet$00601 = declare(function Fable_Collections_MutableSet(comparer) {\n const $this$$1 = this;\n $this$$1.comparer = comparer;\n $this$$1.entries = new Map([]);\n});\nexport function MutableSet$00601$reflection($gen$$4) {\n return type(\"Fable.Collections.MutableSet`1\", [$gen$$4]);\n}\nexport function MutableSet$00601$$$$002Ector$$Z79760D57(comparer) {\n return this instanceof MutableSet$00601 ? MutableSet$00601.call(this, comparer) : new MutableSet$00601(comparer);\n}\nexport function MutableSet$00601$$$$002Ector() {\n return MutableSet$00601$$$$002Ector$$Z79760D57.call(this, EqualityComparer$002400601$0024$0024$0024get_Default());\n}\n\nfunction MutableSet$00601$$TryFindIndex$$2B595(this$, k) {\n const h = this$.comparer.GetHashCode(k) | 0;\n const matchValue = tryGetValue(this$.entries, h, null);\n\n if (matchValue[0]) {\n const values = matchValue[1];\n return [true, h, values.findIndex(function (v) {\n return this$.comparer.Equals(k, v);\n })];\n } else {\n return [false, h, -1];\n }\n}\n\nfunction MutableSet$00601$$TryFind$$2B595(this$$$1, k$$1) {\n var i, h$$1;\n const matchValue$$1 = MutableSet$00601$$TryFindIndex$$2B595(this$$$1, k$$1);\n var $target$$5;\n\n if (matchValue$$1[0]) {\n if (i = matchValue$$1[2] | 0, (h$$1 = matchValue$$1[1] | 0, i > -1)) {\n $target$$5 = 0;\n } else {\n $target$$5 = 1;\n }\n } else {\n $target$$5 = 1;\n }\n\n switch ($target$$5) {\n case 0:\n {\n const i$$1 = matchValue$$1[2] | 0;\n const h$$2 = matchValue$$1[1] | 0;\n return some(getItemFromDict(this$$$1.entries, h$$2)[i$$1]);\n }\n\n case 1:\n {\n return null;\n }\n }\n}\n\nexport function MutableSet$00601$$get_Comparer(this$$$2) {\n return this$$$2.comparer;\n}\nexport function MutableSet$00601$$Clear(this$$$3) {\n this$$$3.entries.clear();\n}\nexport function MutableSet$00601$$get_Count(this$$$4) {\n return sumBy(function projection(pairs) {\n return pairs.length;\n }, this$$$4.entries.values(), {\n GetZero() {\n return 0;\n },\n\n Add($x$$2, $y$$3) {\n return $x$$2 + $y$$3;\n }\n\n });\n}\nexport function MutableSet$00601$$Add$$2B595(this$$$5, k$$2) {\n var i$$2, h$$3;\n const matchValue$$2 = MutableSet$00601$$TryFindIndex$$2B595(this$$$5, k$$2);\n var $target$$6;\n\n if (matchValue$$2[0]) {\n if (i$$2 = matchValue$$2[2] | 0, (h$$3 = matchValue$$2[1] | 0, i$$2 > -1)) {\n $target$$6 = 0;\n } else {\n $target$$6 = 1;\n }\n } else {\n $target$$6 = 1;\n }\n\n switch ($target$$6) {\n case 0:\n {\n const i$$3 = matchValue$$2[2] | 0;\n const h$$4 = matchValue$$2[1] | 0;\n return false;\n }\n\n case 1:\n {\n if (matchValue$$2[0]) {\n const h$$5 = matchValue$$2[1] | 0;\n const value = getItemFromDict(this$$$5.entries, h$$5).push(k$$2);\n null, null;\n return true;\n } else {\n const h$$6 = matchValue$$2[1] | 0;\n this$$$5.entries.set(h$$6, [k$$2]);\n return true;\n }\n }\n }\n}\nexport function MutableSet$00601$$Contains$$2B595(this$$$6, k$$3) {\n var i$$4, h$$7;\n const matchValue$$3 = MutableSet$00601$$TryFindIndex$$2B595(this$$$6, k$$3);\n var $target$$7;\n\n if (matchValue$$3[0]) {\n if (i$$4 = matchValue$$3[2] | 0, (h$$7 = matchValue$$3[1] | 0, i$$4 > -1)) {\n $target$$7 = 0;\n } else {\n $target$$7 = 1;\n }\n } else {\n $target$$7 = 1;\n }\n\n switch ($target$$7) {\n case 0:\n {\n const i$$5 = matchValue$$3[2] | 0;\n const h$$8 = matchValue$$3[1] | 0;\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\nexport function MutableSet$00601$$Remove$$2B595(this$$$7, k$$4) {\n var i$$6, h$$9;\n const matchValue$$4 = MutableSet$00601$$TryFindIndex$$2B595(this$$$7, k$$4);\n var $target$$8;\n\n if (matchValue$$4[0]) {\n if (i$$6 = matchValue$$4[2] | 0, (h$$9 = matchValue$$4[1] | 0, i$$6 > -1)) {\n $target$$8 = 0;\n } else {\n $target$$8 = 1;\n }\n } else {\n $target$$8 = 1;\n }\n\n switch ($target$$8) {\n case 0:\n {\n const i$$7 = matchValue$$4[2] | 0;\n const h$$10 = matchValue$$4[1] | 0;\n getItemFromDict(this$$$7.entries, h$$10).splice(i$$7, 1);\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\n\nMutableSet$00601.prototype[Symbol.iterator] = function () {\n var elems;\n const this$$$8 = this;\n return toIterator((elems = delay(function () {\n return collect(function (values$$1) {\n return map(function (value$$1) {\n return value$$1;\n }, values$$1);\n }, this$$$8.entries.values());\n }), getEnumerator(elems)));\n};\n\nMutableSet$00601.prototype.Add = function (item) {\n const this$$$9 = this;\n MutableSet$00601$$Add$$2B595(this$$$9, item), null;\n};\n\nMutableSet$00601.prototype.Clear = function () {\n const this$$$10 = this;\n MutableSet$00601$$Clear(this$$$10);\n};\n\nMutableSet$00601.prototype.Contains = function (item$$1) {\n const this$$$11 = this;\n return MutableSet$00601$$Contains$$2B595(this$$$11, item$$1);\n};\n\nMutableSet$00601.prototype.CopyTo = function (array, arrayIndex) {\n const this$$$12 = this;\n iterateIndexed(function action(i$$8, e) {\n array[arrayIndex + i$$8] = e;\n }, this$$$12);\n};\n\nObject.defineProperty(MutableSet$00601.prototype, \"Count\", {\n \"get\": function () {\n const this$$$13 = this;\n return MutableSet$00601$$get_Count(this$$$13) | 0;\n }\n});\nObject.defineProperty(MutableSet$00601.prototype, \"IsReadOnly\", {\n \"get\": function () {\n return false;\n }\n});\n\nMutableSet$00601.prototype.Remove = function (item$$2) {\n const this$$$15 = this;\n return MutableSet$00601$$Remove$$2B595(this$$$15, item$$2);\n};\n\nObject.defineProperty(MutableSet$00601.prototype, \"size\", {\n \"get\": function () {\n const this$$$16 = this;\n return MutableSet$00601$$get_Count(this$$$16) | 0;\n }\n});\n\nMutableSet$00601.prototype.add = function (k$$5) {\n const this$$$17 = this;\n MutableSet$00601$$Add$$2B595(this$$$17, k$$5), null;\n return this$$$17;\n};\n\nMutableSet$00601.prototype.add_ = function (k$$6) {\n const this$$$18 = this;\n return MutableSet$00601$$Add$$2B595(this$$$18, k$$6);\n};\n\nMutableSet$00601.prototype.clear = function () {\n const this$$$19 = this;\n MutableSet$00601$$Clear(this$$$19);\n};\n\nMutableSet$00601.prototype.delete = function (k$$7) {\n const this$$$20 = this;\n return MutableSet$00601$$Remove$$2B595(this$$$20, k$$7);\n};\n\nMutableSet$00601.prototype.has = function (k$$8) {\n const this$$$21 = this;\n return MutableSet$00601$$Contains$$2B595(this$$$21, k$$8);\n};\n\nMutableSet$00601.prototype.values = function () {\n const this$$$22 = this;\n return map(function mapping(x) {\n return x;\n }, this$$$22);\n};","import { List, Record, declare, Union } from \"./Types.js\";\nimport { type, record, bool, list, union as union$$1, int32 } from \"./Reflection.js\";\nimport { value as value$$3, some, Choice } from \"./Option.js\";\nimport { empty as empty$$1, iterate as iterate$$1, fold as fold$$1, toIterator, map as map$$1, reduce, getEnumerator, unfold } from \"./Seq.js\";\nimport { structuralHash, isDisposable } from \"./Util.js\";\nimport { join } from \"./String.js\";\nimport { MutableSet$00601$$Add$$2B595 as MutableSet$002400601$0024$0024Add$0024$00242B595, MutableSet$00601$$$$002Ector$$Z79760D57 as MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z79760D57 } from \"./MutableSet\";\nexport const SetTree$00601 = declare(function Set_SetTree(tag, name, ...fields) {\n Union.call(this, tag, name, ...fields);\n}, Union);\nexport function SetTree$00601$reflection($gen$$3) {\n return union$$1(\"Set.SetTree`1\", [$gen$$3], SetTree$00601, () => [\"SetEmpty\", [\"SetNode\", [$gen$$3, SetTree$00601$reflection($gen$$3), SetTree$00601$reflection($gen$$3), int32]], [\"SetOne\", [$gen$$3]]]);\n}\nexport function SetTreeModule$$$countAux(s, acc) {\n SetTreeModule$$$countAux: while (true) {\n switch (s.tag) {\n case 2:\n {\n return acc + 1 | 0;\n }\n\n case 0:\n {\n return acc | 0;\n }\n\n default:\n {\n const r = s.fields[2];\n const l = s.fields[1];\n const $acc$$4 = acc;\n s = l;\n acc = SetTreeModule$$$countAux(r, $acc$$4 + 1);\n continue SetTreeModule$$$countAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$count(s$$1) {\n return SetTreeModule$$$countAux(s$$1, 0);\n}\nexport function SetTreeModule$$$SetOne(n) {\n return new SetTree$00601(2, \"SetOne\", n);\n}\nexport function SetTreeModule$$$SetNode(x, l$$1, r$$1, h) {\n return new SetTree$00601(1, \"SetNode\", x, l$$1, r$$1, h);\n}\nexport function SetTreeModule$$$height(t) {\n switch (t.tag) {\n case 2:\n {\n return 1;\n }\n\n case 1:\n {\n const h$$1 = t.fields[3] | 0;\n return h$$1 | 0;\n }\n\n default:\n {\n return 0;\n }\n }\n}\nexport const SetTreeModule$$$tolerance = 2;\nexport function SetTreeModule$$$mk(l$$2, k, r$$2) {\n var $target$$5;\n\n if (l$$2.tag === 0) {\n if (r$$2.tag === 0) {\n $target$$5 = 0;\n } else {\n $target$$5 = 1;\n }\n } else {\n $target$$5 = 1;\n }\n\n switch ($target$$5) {\n case 0:\n {\n return SetTreeModule$$$SetOne(k);\n }\n\n case 1:\n {\n const hl = SetTreeModule$$$height(l$$2) | 0;\n const hr = SetTreeModule$$$height(r$$2) | 0;\n const m = (hl < hr ? hr : hl) | 0;\n return SetTreeModule$$$SetNode(k, l$$2, r$$2, m + 1);\n }\n }\n}\nexport function SetTreeModule$$$rebalance(t1, k$$1, t2) {\n const t1h = SetTreeModule$$$height(t1) | 0;\n const t2h = SetTreeModule$$$height(t2) | 0;\n\n if (t2h > t1h + SetTreeModule$$$tolerance) {\n if (t2.tag === 1) {\n const t2r = t2.fields[2];\n const t2l = t2.fields[1];\n const t2k = t2.fields[0];\n\n if (SetTreeModule$$$height(t2l) > t1h + 1) {\n if (t2l.tag === 1) {\n const t2lr = t2l.fields[2];\n const t2ll = t2l.fields[1];\n const t2lk = t2l.fields[0];\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1, k$$1, t2ll), t2lk, SetTreeModule$$$mk(t2lr, t2k, t2r));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1, k$$1, t2l), t2k, t2r);\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else if (t1h > t2h + SetTreeModule$$$tolerance) {\n if (t1.tag === 1) {\n const t1r = t1.fields[2];\n const t1l = t1.fields[1];\n const t1k = t1.fields[0];\n\n if (SetTreeModule$$$height(t1r) > t2h + 1) {\n if (t1r.tag === 1) {\n const t1rr = t1r.fields[2];\n const t1rl = t1r.fields[1];\n const t1rk = t1r.fields[0];\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1l, t1k, t1rl), t1rk, SetTreeModule$$$mk(t1rr, k$$1, t2));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(t1l, t1k, SetTreeModule$$$mk(t1r, k$$1, t2));\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(t1, k$$1, t2);\n }\n}\nexport function SetTreeModule$$$add(comparer, k$$2, t$$1) {\n switch (t$$1.tag) {\n case 2:\n {\n const k2$$1 = t$$1.fields[0];\n const c$$1 = comparer.Compare(k$$2, k2$$1) | 0;\n\n if (c$$1 < 0) {\n return SetTreeModule$$$SetNode(k$$2, new SetTree$00601(0, \"SetEmpty\"), t$$1, 2);\n } else if (c$$1 === 0) {\n return t$$1;\n } else {\n return SetTreeModule$$$SetNode(k$$2, t$$1, new SetTree$00601(0, \"SetEmpty\"), 2);\n }\n }\n\n case 0:\n {\n return SetTreeModule$$$SetOne(k$$2);\n }\n\n default:\n {\n const r$$3 = t$$1.fields[2];\n const l$$3 = t$$1.fields[1];\n const k2 = t$$1.fields[0];\n const c = comparer.Compare(k$$2, k2) | 0;\n\n if (c < 0) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$add(comparer, k$$2, l$$3), k2, r$$3);\n } else if (c === 0) {\n return t$$1;\n } else {\n return SetTreeModule$$$rebalance(l$$3, k2, SetTreeModule$$$add(comparer, k$$2, r$$3));\n }\n }\n }\n}\nexport function SetTreeModule$$$balance(comparer$$1, t1$$1, k$$3, t2$$1) {\n var $target$$6, t2$$2, t1$$2, k1, t2$$3, k2$$2, t1$$3, h1, h2, k1$$1, k2$$3, t11, t12, t21, t22;\n\n if (t1$$1.tag === 2) {\n if (t2$$1.tag === 0) {\n $target$$6 = 1;\n t1$$2 = t1$$1;\n } else if (t2$$1.tag === 2) {\n $target$$6 = 2;\n k1 = t1$$1.fields[0];\n t2$$3 = t2$$1;\n } else {\n $target$$6 = 2;\n k1 = t1$$1.fields[0];\n t2$$3 = t2$$1;\n }\n } else if (t1$$1.tag === 1) {\n if (t2$$1.tag === 2) {\n $target$$6 = 3;\n k2$$2 = t2$$1.fields[0];\n t1$$3 = t1$$1;\n } else if (t2$$1.tag === 1) {\n $target$$6 = 4;\n h1 = t1$$1.fields[3];\n h2 = t2$$1.fields[3];\n k1$$1 = t1$$1.fields[0];\n k2$$3 = t2$$1.fields[0];\n t11 = t1$$1.fields[1];\n t12 = t1$$1.fields[2];\n t21 = t2$$1.fields[1];\n t22 = t2$$1.fields[2];\n } else {\n $target$$6 = 1;\n t1$$2 = t1$$1;\n }\n } else {\n $target$$6 = 0;\n t2$$2 = t2$$1;\n }\n\n switch ($target$$6) {\n case 0:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, t2$$2);\n }\n\n case 1:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, t1$$2);\n }\n\n case 2:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, SetTreeModule$$$add(comparer$$1, k1, t2$$3));\n }\n\n case 3:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, SetTreeModule$$$add(comparer$$1, k2$$2, t1$$3));\n }\n\n case 4:\n {\n if (h1 + SetTreeModule$$$tolerance < h2) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$balance(comparer$$1, t1$$1, k$$3, t21), k2$$3, t22);\n } else if (h2 + SetTreeModule$$$tolerance < h1) {\n return SetTreeModule$$$rebalance(t11, k1$$1, SetTreeModule$$$balance(comparer$$1, t12, k$$3, t2$$1));\n } else {\n return SetTreeModule$$$mk(t1$$1, k$$3, t2$$1);\n }\n }\n }\n}\nexport function SetTreeModule$$$split(comparer$$2, pivot, t$$2) {\n switch (t$$2.tag) {\n case 2:\n {\n const k1$$3 = t$$2.fields[0];\n const c$$3 = comparer$$2.Compare(k1$$3, pivot) | 0;\n\n if (c$$3 < 0) {\n return [t$$2, false, new SetTree$00601(0, \"SetEmpty\")];\n } else if (c$$3 === 0) {\n return [new SetTree$00601(0, \"SetEmpty\"), true, new SetTree$00601(0, \"SetEmpty\")];\n } else {\n return [new SetTree$00601(0, \"SetEmpty\"), false, t$$2];\n }\n }\n\n case 0:\n {\n return [new SetTree$00601(0, \"SetEmpty\"), false, new SetTree$00601(0, \"SetEmpty\")];\n }\n\n default:\n {\n const t12$$1 = t$$2.fields[2];\n const t11$$1 = t$$2.fields[1];\n const k1$$2 = t$$2.fields[0];\n const c$$2 = comparer$$2.Compare(pivot, k1$$2) | 0;\n\n if (c$$2 < 0) {\n const patternInput = SetTreeModule$$$split(comparer$$2, pivot, t11$$1);\n const t11Lo = patternInput[0];\n const t11Hi = patternInput[2];\n const havePivot = patternInput[1];\n return [t11Lo, havePivot, SetTreeModule$$$balance(comparer$$2, t11Hi, k1$$2, t12$$1)];\n } else if (c$$2 === 0) {\n return [t11$$1, true, t12$$1];\n } else {\n const patternInput$$1 = SetTreeModule$$$split(comparer$$2, pivot, t12$$1);\n const t12Lo = patternInput$$1[0];\n const t12Hi = patternInput$$1[2];\n const havePivot$$1 = patternInput$$1[1];\n return [SetTreeModule$$$balance(comparer$$2, t11$$1, k1$$2, t12Lo), havePivot$$1, t12Hi];\n }\n }\n }\n}\nexport function SetTreeModule$$$spliceOutSuccessor(t$$3) {\n switch (t$$3.tag) {\n case 2:\n {\n const k2$$4 = t$$3.fields[0];\n return [k2$$4, new SetTree$00601(0, \"SetEmpty\")];\n }\n\n case 1:\n {\n const r$$4 = t$$3.fields[2];\n const l$$4 = t$$3.fields[1];\n const k2$$5 = t$$3.fields[0];\n\n if (l$$4.tag === 0) {\n return [k2$$5, r$$4];\n } else {\n const patternInput$$2 = SetTreeModule$$$spliceOutSuccessor(l$$4);\n const l$0027 = patternInput$$2[1];\n const k3 = patternInput$$2[0];\n return [k3, SetTreeModule$$$mk(l$0027, k2$$5, r$$4)];\n }\n }\n\n default:\n {\n throw new Error(\"internal error: Set.spliceOutSuccessor\");\n }\n }\n}\nexport function SetTreeModule$$$remove(comparer$$3, k$$4, t$$4) {\n switch (t$$4.tag) {\n case 2:\n {\n const k2$$6 = t$$4.fields[0];\n const c$$4 = comparer$$3.Compare(k$$4, k2$$6) | 0;\n\n if (c$$4 === 0) {\n return new SetTree$00601(0, \"SetEmpty\");\n } else {\n return t$$4;\n }\n }\n\n case 1:\n {\n const r$$5 = t$$4.fields[2];\n const l$$5 = t$$4.fields[1];\n const k2$$7 = t$$4.fields[0];\n const c$$5 = comparer$$3.Compare(k$$4, k2$$7) | 0;\n\n if (c$$5 < 0) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$remove(comparer$$3, k$$4, l$$5), k2$$7, r$$5);\n } else if (c$$5 === 0) {\n if (l$$5.tag === 0) {\n return r$$5;\n } else if (r$$5.tag === 0) {\n return l$$5;\n } else {\n const patternInput$$3 = SetTreeModule$$$spliceOutSuccessor(r$$5);\n const sk = patternInput$$3[0];\n const r$0027 = patternInput$$3[1];\n return SetTreeModule$$$mk(l$$5, sk, r$0027);\n }\n } else {\n return SetTreeModule$$$rebalance(l$$5, k2$$7, SetTreeModule$$$remove(comparer$$3, k$$4, r$$5));\n }\n }\n\n default:\n {\n return t$$4;\n }\n }\n}\nexport function SetTreeModule$$$mem(comparer$$4, k$$5, t$$5) {\n SetTreeModule$$$mem: while (true) {\n switch (t$$5.tag) {\n case 2:\n {\n const k2$$9 = t$$5.fields[0];\n return comparer$$4.Compare(k$$5, k2$$9) === 0;\n }\n\n case 0:\n {\n return false;\n }\n\n default:\n {\n const r$$6 = t$$5.fields[2];\n const l$$6 = t$$5.fields[1];\n const k2$$8 = t$$5.fields[0];\n const c$$6 = comparer$$4.Compare(k$$5, k2$$8) | 0;\n\n if (c$$6 < 0) {\n const $comparer$$4$$7 = comparer$$4;\n const $k$$5$$8 = k$$5;\n comparer$$4 = $comparer$$4$$7;\n k$$5 = $k$$5$$8;\n t$$5 = l$$6;\n continue SetTreeModule$$$mem;\n } else if (c$$6 === 0) {\n return true;\n } else {\n const $comparer$$4$$9 = comparer$$4;\n const $k$$5$$10 = k$$5;\n comparer$$4 = $comparer$$4$$9;\n k$$5 = $k$$5$$10;\n t$$5 = r$$6;\n continue SetTreeModule$$$mem;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$iter($arg$$11, $arg$$12) {\n SetTreeModule$$$iter: while (true) {\n const f = $arg$$11,\n t$$6 = $arg$$12;\n\n switch (t$$6.tag) {\n case 2:\n {\n const k2$$11 = t$$6.fields[0];\n f(k2$$11);\n break;\n }\n\n case 0:\n {\n break;\n }\n\n default:\n {\n const r$$7 = t$$6.fields[2];\n const l$$7 = t$$6.fields[1];\n const k2$$10 = t$$6.fields[0];\n SetTreeModule$$$iter(f, l$$7);\n f(k2$$10);\n $arg$$11 = f;\n $arg$$12 = r$$7;\n continue SetTreeModule$$$iter;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$foldBack($arg$$13, $arg$$14, $arg$$15) {\n SetTreeModule$$$foldBack: while (true) {\n const f$$1 = $arg$$13,\n m$$1 = $arg$$14,\n x$$1 = $arg$$15;\n\n switch (m$$1.tag) {\n case 2:\n {\n const k$$7 = m$$1.fields[0];\n return f$$1(k$$7, x$$1);\n }\n\n case 0:\n {\n return x$$1;\n }\n\n default:\n {\n const r$$8 = m$$1.fields[2];\n const l$$8 = m$$1.fields[1];\n const k$$6 = m$$1.fields[0];\n $arg$$13 = f$$1;\n $arg$$14 = l$$8;\n $arg$$15 = f$$1(k$$6, SetTreeModule$$$foldBack(f$$1, r$$8, x$$1));\n continue SetTreeModule$$$foldBack;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$fold($arg$$16, $arg$$17, $arg$$18) {\n SetTreeModule$$$fold: while (true) {\n const f$$2 = $arg$$16,\n x$$2 = $arg$$17,\n m$$2 = $arg$$18;\n\n switch (m$$2.tag) {\n case 2:\n {\n const k$$9 = m$$2.fields[0];\n return f$$2(x$$2, k$$9);\n }\n\n case 0:\n {\n return x$$2;\n }\n\n default:\n {\n const r$$9 = m$$2.fields[2];\n const l$$9 = m$$2.fields[1];\n const k$$8 = m$$2.fields[0];\n const x$$3 = SetTreeModule$$$fold(f$$2, x$$2, l$$9);\n const x$$4 = f$$2(x$$3, k$$8);\n $arg$$16 = f$$2;\n $arg$$17 = x$$4;\n $arg$$18 = r$$9;\n continue SetTreeModule$$$fold;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$forall($arg$$19, $arg$$20) {\n SetTreeModule$$$forall: while (true) {\n const f$$3 = $arg$$19,\n m$$3 = $arg$$20;\n\n switch (m$$3.tag) {\n case 2:\n {\n const k2$$13 = m$$3.fields[0];\n return f$$3(k2$$13);\n }\n\n case 0:\n {\n return true;\n }\n\n default:\n {\n const r$$10 = m$$3.fields[2];\n const l$$10 = m$$3.fields[1];\n const k2$$12 = m$$3.fields[0];\n\n if (f$$3(k2$$12) ? SetTreeModule$$$forall(f$$3, l$$10) : false) {\n $arg$$19 = f$$3;\n $arg$$20 = r$$10;\n continue SetTreeModule$$$forall;\n } else {\n return false;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$exists($arg$$21, $arg$$22) {\n SetTreeModule$$$exists: while (true) {\n const f$$4 = $arg$$21,\n m$$4 = $arg$$22;\n\n switch (m$$4.tag) {\n case 2:\n {\n const k2$$15 = m$$4.fields[0];\n return f$$4(k2$$15);\n }\n\n case 0:\n {\n return false;\n }\n\n default:\n {\n const r$$11 = m$$4.fields[2];\n const l$$11 = m$$4.fields[1];\n const k2$$14 = m$$4.fields[0];\n\n if (f$$4(k2$$14) ? true : SetTreeModule$$$exists(f$$4, l$$11)) {\n return true;\n } else {\n $arg$$21 = f$$4;\n $arg$$22 = r$$11;\n continue SetTreeModule$$$exists;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$isEmpty(m$$5) {\n if (m$$5.tag === 0) {\n return true;\n } else {\n return false;\n }\n}\nexport function SetTreeModule$$$subset(comparer$$5, a, b) {\n return SetTreeModule$$$forall(function (x$$5) {\n return SetTreeModule$$$mem(comparer$$5, x$$5, b);\n }, a);\n}\nexport function SetTreeModule$$$psubset(comparer$$6, a$$1, b$$1) {\n if (SetTreeModule$$$forall(function (x$$6) {\n return SetTreeModule$$$mem(comparer$$6, x$$6, b$$1);\n }, a$$1)) {\n return SetTreeModule$$$exists(function (x$$7) {\n return !SetTreeModule$$$mem(comparer$$6, x$$7, a$$1);\n }, b$$1);\n } else {\n return false;\n }\n}\nexport function SetTreeModule$$$filterAux($arg$$23, $arg$$24, $arg$$25, $arg$$26) {\n SetTreeModule$$$filterAux: while (true) {\n const comparer$$7 = $arg$$23,\n f$$5 = $arg$$24,\n s$$2 = $arg$$25,\n acc$$1 = $arg$$26;\n\n switch (s$$2.tag) {\n case 2:\n {\n const k$$11 = s$$2.fields[0];\n\n if (f$$5(k$$11)) {\n return SetTreeModule$$$add(comparer$$7, k$$11, acc$$1);\n } else {\n return acc$$1;\n }\n }\n\n case 0:\n {\n return acc$$1;\n }\n\n default:\n {\n const r$$12 = s$$2.fields[2];\n const l$$12 = s$$2.fields[1];\n const k$$10 = s$$2.fields[0];\n const acc$$2 = f$$5(k$$10) ? SetTreeModule$$$add(comparer$$7, k$$10, acc$$1) : acc$$1;\n $arg$$23 = comparer$$7;\n $arg$$24 = f$$5;\n $arg$$25 = l$$12;\n $arg$$26 = SetTreeModule$$$filterAux(comparer$$7, f$$5, r$$12, acc$$2);\n continue SetTreeModule$$$filterAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$filter(comparer$$8, f$$6, s$$3) {\n return SetTreeModule$$$filterAux(comparer$$8, f$$6, s$$3, new SetTree$00601(0, \"SetEmpty\"));\n}\nexport function SetTreeModule$$$diffAux(comparer$$9, m$$6, acc$$3) {\n SetTreeModule$$$diffAux: while (true) {\n switch (m$$6.tag) {\n case 2:\n {\n const k$$13 = m$$6.fields[0];\n return SetTreeModule$$$remove(comparer$$9, k$$13, acc$$3);\n }\n\n case 0:\n {\n return acc$$3;\n }\n\n default:\n {\n const r$$13 = m$$6.fields[2];\n const l$$13 = m$$6.fields[1];\n const k$$12 = m$$6.fields[0];\n const $acc$$3$$31 = acc$$3;\n const $comparer$$9$$30 = comparer$$9;\n comparer$$9 = $comparer$$9$$30;\n m$$6 = l$$13;\n acc$$3 = SetTreeModule$$$diffAux($comparer$$9$$30, r$$13, SetTreeModule$$$remove($comparer$$9$$30, k$$12, $acc$$3$$31));\n continue SetTreeModule$$$diffAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$diff(comparer$$10, a$$2, b$$2) {\n return SetTreeModule$$$diffAux(comparer$$10, b$$2, a$$2);\n}\nexport function SetTreeModule$$$union(comparer$$11, t1$$4, t2$$4) {\n var $target$$32, h1$$1, h2$$1, k1$$4, k2$$16, t11$$2, t12$$2, t21$$1, t22$$1, t$$7, t$$8, k1$$5, t2$$5, k2$$17, t1$$5;\n\n if (t1$$4.tag === 0) {\n $target$$32 = 1;\n t$$7 = t2$$4;\n } else if (t1$$4.tag === 2) {\n if (t2$$4.tag === 0) {\n $target$$32 = 2;\n t$$8 = t1$$4;\n } else if (t2$$4.tag === 2) {\n $target$$32 = 3;\n k1$$5 = t1$$4.fields[0];\n t2$$5 = t2$$4;\n } else {\n $target$$32 = 3;\n k1$$5 = t1$$4.fields[0];\n t2$$5 = t2$$4;\n }\n } else if (t2$$4.tag === 0) {\n $target$$32 = 2;\n t$$8 = t1$$4;\n } else if (t2$$4.tag === 2) {\n $target$$32 = 4;\n k2$$17 = t2$$4.fields[0];\n t1$$5 = t1$$4;\n } else {\n $target$$32 = 0;\n h1$$1 = t1$$4.fields[3];\n h2$$1 = t2$$4.fields[3];\n k1$$4 = t1$$4.fields[0];\n k2$$16 = t2$$4.fields[0];\n t11$$2 = t1$$4.fields[1];\n t12$$2 = t1$$4.fields[2];\n t21$$1 = t2$$4.fields[1];\n t22$$1 = t2$$4.fields[2];\n }\n\n switch ($target$$32) {\n case 0:\n {\n if (h1$$1 > h2$$1) {\n const patternInput$$4 = SetTreeModule$$$split(comparer$$11, k1$$4, t2$$4);\n const lo = patternInput$$4[0];\n const hi = patternInput$$4[2];\n return SetTreeModule$$$balance(comparer$$11, SetTreeModule$$$union(comparer$$11, t11$$2, lo), k1$$4, SetTreeModule$$$union(comparer$$11, t12$$2, hi));\n } else {\n const patternInput$$5 = SetTreeModule$$$split(comparer$$11, k2$$16, t1$$4);\n const lo$$1 = patternInput$$5[0];\n const hi$$1 = patternInput$$5[2];\n return SetTreeModule$$$balance(comparer$$11, SetTreeModule$$$union(comparer$$11, t21$$1, lo$$1), k2$$16, SetTreeModule$$$union(comparer$$11, t22$$1, hi$$1));\n }\n }\n\n case 1:\n {\n return t$$7;\n }\n\n case 2:\n {\n return t$$8;\n }\n\n case 3:\n {\n return SetTreeModule$$$add(comparer$$11, k1$$5, t2$$5);\n }\n\n case 4:\n {\n return SetTreeModule$$$add(comparer$$11, k2$$17, t1$$5);\n }\n }\n}\nexport function SetTreeModule$$$intersectionAux(comparer$$12, b$$3, m$$7, acc$$4) {\n SetTreeModule$$$intersectionAux: while (true) {\n switch (m$$7.tag) {\n case 2:\n {\n const k$$15 = m$$7.fields[0];\n\n if (SetTreeModule$$$mem(comparer$$12, k$$15, b$$3)) {\n return SetTreeModule$$$add(comparer$$12, k$$15, acc$$4);\n } else {\n return acc$$4;\n }\n }\n\n case 0:\n {\n return acc$$4;\n }\n\n default:\n {\n const r$$14 = m$$7.fields[2];\n const l$$14 = m$$7.fields[1];\n const k$$14 = m$$7.fields[0];\n const acc$$5 = SetTreeModule$$$intersectionAux(comparer$$12, b$$3, r$$14, acc$$4);\n const acc$$6 = SetTreeModule$$$mem(comparer$$12, k$$14, b$$3) ? SetTreeModule$$$add(comparer$$12, k$$14, acc$$5) : acc$$5;\n const $b$$3$$34 = b$$3;\n const $comparer$$12$$33 = comparer$$12;\n comparer$$12 = $comparer$$12$$33;\n b$$3 = $b$$3$$34;\n m$$7 = l$$14;\n acc$$4 = acc$$6;\n continue SetTreeModule$$$intersectionAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$intersection(comparer$$13, a$$3, b$$4) {\n return SetTreeModule$$$intersectionAux(comparer$$13, b$$4, a$$3, new SetTree$00601(0, \"SetEmpty\"));\n}\nexport function SetTreeModule$$$partition1(comparer$$14, f$$7, k$$16, acc1, acc2) {\n if (f$$7(k$$16)) {\n return [SetTreeModule$$$add(comparer$$14, k$$16, acc1), acc2];\n } else {\n return [acc1, SetTreeModule$$$add(comparer$$14, k$$16, acc2)];\n }\n}\nexport function SetTreeModule$$$partitionAux($arg$$40, $arg$$41, $arg$$42, $arg$$43, $arg$$44) {\n SetTreeModule$$$partitionAux: while (true) {\n const comparer$$15 = $arg$$40,\n f$$8 = $arg$$41,\n s$$4 = $arg$$42,\n acc_0 = $arg$$43,\n acc_1 = $arg$$44;\n const acc$$7 = [acc_0, acc_1];\n\n switch (s$$4.tag) {\n case 2:\n {\n const k$$18 = s$$4.fields[0];\n return SetTreeModule$$$partition1(comparer$$15, f$$8, k$$18, acc$$7[0], acc$$7[1]);\n }\n\n case 0:\n {\n return acc$$7;\n }\n\n default:\n {\n const r$$15 = s$$4.fields[2];\n const l$$15 = s$$4.fields[1];\n const k$$17 = s$$4.fields[0];\n const acc$$8 = SetTreeModule$$$partitionAux(comparer$$15, f$$8, r$$15, acc$$7[0], acc$$7[1]);\n const acc$$9 = SetTreeModule$$$partition1(comparer$$15, f$$8, k$$17, acc$$8[0], acc$$8[1]);\n $arg$$40 = comparer$$15;\n $arg$$41 = f$$8;\n $arg$$42 = l$$15;\n $arg$$43 = acc$$9[0];\n $arg$$44 = acc$$9[1];\n continue SetTreeModule$$$partitionAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$partition(comparer$$16, f$$9, s$$5) {\n const seed = [new SetTree$00601(0, \"SetEmpty\"), new SetTree$00601(0, \"SetEmpty\")];\n return SetTreeModule$$$partitionAux(comparer$$16, f$$9, s$$5, seed[0], seed[1]);\n}\nexport function SetTreeModule$$$$007CMatchSetNode$007CMatchSetEmpty$007C(s$$6) {\n switch (s$$6.tag) {\n case 2:\n {\n const k2$$19 = s$$6.fields[0];\n return new Choice(0, \"Choice1Of2\", [k2$$19, new SetTree$00601(0, \"SetEmpty\"), new SetTree$00601(0, \"SetEmpty\")]);\n }\n\n case 0:\n {\n return new Choice(1, \"Choice2Of2\", null);\n }\n\n default:\n {\n const r$$16 = s$$6.fields[2];\n const l$$16 = s$$6.fields[1];\n const k2$$18 = s$$6.fields[0];\n return new Choice(0, \"Choice1Of2\", [k2$$18, l$$16, r$$16]);\n }\n }\n}\nexport function SetTreeModule$$$minimumElementAux(s$$7, n$$1) {\n SetTreeModule$$$minimumElementAux: while (true) {\n switch (s$$7.tag) {\n case 2:\n {\n const k$$20 = s$$7.fields[0];\n return k$$20;\n }\n\n case 0:\n {\n return n$$1;\n }\n\n default:\n {\n const l$$17 = s$$7.fields[1];\n const k$$19 = s$$7.fields[0];\n s$$7 = l$$17;\n n$$1 = k$$19;\n continue SetTreeModule$$$minimumElementAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$minimumElementOpt(s$$8) {\n switch (s$$8.tag) {\n case 2:\n {\n const k$$22 = s$$8.fields[0];\n return some(k$$22);\n }\n\n case 0:\n {\n return null;\n }\n\n default:\n {\n const l$$18 = s$$8.fields[1];\n const k$$21 = s$$8.fields[0];\n return some(SetTreeModule$$$minimumElementAux(l$$18, k$$21));\n }\n }\n}\nexport function SetTreeModule$$$maximumElementAux(s$$9, n$$2) {\n SetTreeModule$$$maximumElementAux: while (true) {\n switch (s$$9.tag) {\n case 2:\n {\n const k$$24 = s$$9.fields[0];\n return k$$24;\n }\n\n case 0:\n {\n return n$$2;\n }\n\n default:\n {\n const r$$17 = s$$9.fields[2];\n const k$$23 = s$$9.fields[0];\n s$$9 = r$$17;\n n$$2 = k$$23;\n continue SetTreeModule$$$maximumElementAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$maximumElementOpt(s$$10) {\n switch (s$$10.tag) {\n case 2:\n {\n const k$$26 = s$$10.fields[0];\n return some(k$$26);\n }\n\n case 0:\n {\n return null;\n }\n\n default:\n {\n const r$$18 = s$$10.fields[2];\n const k$$25 = s$$10.fields[0];\n return some(SetTreeModule$$$maximumElementAux(r$$18, k$$25));\n }\n }\n}\nexport function SetTreeModule$$$minimumElement(s$$11) {\n const matchValue$$4 = SetTreeModule$$$minimumElementOpt(s$$11);\n\n if (matchValue$$4 == null) {\n throw new Error(\"Set contains no elements\");\n } else {\n const k$$27 = value$$3(matchValue$$4);\n return k$$27;\n }\n}\nexport function SetTreeModule$$$maximumElement(s$$12) {\n const matchValue$$5 = SetTreeModule$$$maximumElementOpt(s$$12);\n\n if (matchValue$$5 == null) {\n throw new Error(\"Set contains no elements\");\n } else {\n const k$$28 = value$$3(matchValue$$5);\n return k$$28;\n }\n}\nexport const SetTreeModule$002ESetIterator$00601 = declare(function Set_SetTreeModule_SetIterator(arg1, arg2) {\n this.stack = arg1;\n this.started = arg2;\n}, Record);\nexport function SetTreeModule$002ESetIterator$00601$reflection($gen$$48) {\n return record(\"Set.SetTreeModule.SetIterator`1\", [$gen$$48], SetTreeModule$002ESetIterator$00601, () => [[\"stack\", list(SetTree$00601$reflection($gen$$48))], [\"started\", bool]]);\n}\nexport function SetTreeModule$$$collapseLHS(stack) {\n SetTreeModule$$$collapseLHS: while (true) {\n if (stack.tail != null) {\n if (stack.head.tag === 2) {\n return stack;\n } else if (stack.head.tag === 1) {\n const k$$29 = stack.head.fields[0];\n const l$$19 = stack.head.fields[1];\n const r$$19 = stack.head.fields[2];\n const rest$$1 = stack.tail;\n stack = new List(l$$19, new List(SetTreeModule$$$SetOne(k$$29), new List(r$$19, rest$$1)));\n continue SetTreeModule$$$collapseLHS;\n } else {\n const rest = stack.tail;\n stack = rest;\n continue SetTreeModule$$$collapseLHS;\n }\n } else {\n return new List();\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$mkIterator(s$$13) {\n return new SetTreeModule$002ESetIterator$00601(SetTreeModule$$$collapseLHS(new List(s$$13, new List())), false);\n}\nexport function SetTreeModule$$$notStarted() {\n throw new Error(\"Enumeration not started\");\n}\nexport function SetTreeModule$$$alreadyFinished() {\n throw new Error(\"Enumeration already started\");\n}\nexport function SetTreeModule$$$current(i) {\n if (i.started) {\n const matchValue$$6 = i.stack;\n\n if (matchValue$$6.tail == null) {\n return SetTreeModule$$$alreadyFinished();\n } else if (matchValue$$6.head.tag === 2) {\n const k$$30 = matchValue$$6.head.fields[0];\n return k$$30;\n } else {\n throw new Error(\"Please report error: Set iterator, unexpected stack for current\");\n }\n } else {\n return SetTreeModule$$$notStarted();\n }\n}\nexport function SetTreeModule$$$moveNext(i$$1) {\n if (i$$1.started) {\n const matchValue$$7 = i$$1.stack;\n\n if (matchValue$$7.tail == null) {\n return false;\n } else if (matchValue$$7.head.tag === 2) {\n const rest$$2 = matchValue$$7.tail;\n i$$1.stack = SetTreeModule$$$collapseLHS(rest$$2);\n return !(i$$1.stack.tail == null);\n } else {\n throw new Error(\"Please report error: Set iterator, unexpected stack for moveNext\");\n }\n } else {\n i$$1.started = true;\n return !(i$$1.stack.tail == null);\n }\n}\nexport const SetTreeModule$002EmkIEnumerator$00601 = declare(function Set_SetTreeModule_mkIEnumerator(s$$14) {\n const $this$$1 = this;\n $this$$1.s = s$$14;\n $this$$1.i = SetTreeModule$$$mkIterator($this$$1.s);\n});\nexport function SetTreeModule$002EmkIEnumerator$00601$reflection($gen$$49) {\n return type(\"Set.SetTreeModule.mkIEnumerator`1\", [$gen$$49]);\n}\nexport function SetTreeModule$002EmkIEnumerator$00601$$$$002Ector$$Z5B395D56(s$$14) {\n return this instanceof SetTreeModule$002EmkIEnumerator$00601 ? SetTreeModule$002EmkIEnumerator$00601.call(this, s$$14) : new SetTreeModule$002EmkIEnumerator$00601(s$$14);\n}\nObject.defineProperty(SetTreeModule$002EmkIEnumerator$00601.prototype, \"Current\", {\n \"get\": function () {\n const __ = this;\n return SetTreeModule$$$current(__.i);\n }\n});\n\nSetTreeModule$002EmkIEnumerator$00601.prototype.MoveNext = function () {\n const __$$1 = this;\n return SetTreeModule$$$moveNext(__$$1.i);\n};\n\nSetTreeModule$002EmkIEnumerator$00601.prototype.Reset = function () {\n const __$$2 = this;\n __$$2.i = SetTreeModule$$$mkIterator(__$$2.s);\n};\n\nSetTreeModule$002EmkIEnumerator$00601.prototype.Dispose = function () {};\n\nexport function SetTreeModule$$$mkIEnumerator(s$$15) {\n return SetTreeModule$002EmkIEnumerator$00601$$$$002Ector$$Z5B395D56(s$$15);\n}\nexport function SetTreeModule$$$toSeq(s$$16) {\n const en = SetTreeModule$$$mkIEnumerator(s$$16);\n return unfold(function generator(en$$1) {\n if (en$$1.MoveNext()) {\n return [en$$1.Current, en$$1];\n } else {\n return null;\n }\n }, en);\n}\nexport function SetTreeModule$$$compareStacks(comparer$$17, l1, l2) {\n SetTreeModule$$$compareStacks: while (true) {\n var $target$$50, t1$$6, t2$$6, n1k, n2k, t1$$7, t2$$7, n1k$$1, n2k$$1, n2r, t1$$8, t2$$8, emp, n1k$$2, n1r, n2k$$2, t1$$9, t2$$9, n1k$$3, n1r$$1, n2k$$3, n2r$$1, t1$$10, t2$$10, n1k$$4, t1$$11, n1k$$5, n1l, n1r$$2, t1$$12, n2k$$4, t2$$11, n2k$$5, n2l, n2r$$2, t2$$12;\n\n if (l1.tail != null) {\n if (l2.tail != null) {\n if (l2.head.tag === 2) {\n if (l1.head.tag === 2) {\n $target$$50 = 4;\n n1k = l1.head.fields[0];\n n2k = l2.head.fields[0];\n t1$$7 = l1.tail;\n t2$$7 = l2.tail;\n } else if (l1.head.tag === 1) {\n if (l1.head.fields[1].tag === 0) {\n $target$$50 = 6;\n emp = l1.head.fields[1];\n n1k$$2 = l1.head.fields[0];\n n1r = l1.head.fields[2];\n n2k$$2 = l2.head.fields[0];\n t1$$9 = l1.tail;\n t2$$9 = l2.tail;\n } else {\n $target$$50 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n }\n } else {\n $target$$50 = 10;\n n2k$$4 = l2.head.fields[0];\n t2$$11 = l2.tail;\n }\n } else if (l2.head.tag === 1) {\n if (l2.head.fields[1].tag === 0) {\n if (l1.head.tag === 2) {\n $target$$50 = 5;\n n1k$$1 = l1.head.fields[0];\n n2k$$1 = l2.head.fields[0];\n n2r = l2.head.fields[2];\n t1$$8 = l1.tail;\n t2$$8 = l2.tail;\n } else if (l1.head.tag === 1) {\n if (l1.head.fields[1].tag === 0) {\n $target$$50 = 7;\n n1k$$3 = l1.head.fields[0];\n n1r$$1 = l1.head.fields[2];\n n2k$$3 = l2.head.fields[0];\n n2r$$1 = l2.head.fields[2];\n t1$$10 = l1.tail;\n t2$$10 = l2.tail;\n } else {\n $target$$50 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n }\n } else {\n $target$$50 = 11;\n n2k$$5 = l2.head.fields[0];\n n2l = l2.head.fields[1];\n n2r$$2 = l2.head.fields[2];\n t2$$12 = l2.tail;\n }\n } else if (l1.head.tag === 2) {\n $target$$50 = 8;\n n1k$$4 = l1.head.fields[0];\n t1$$11 = l1.tail;\n } else if (l1.head.tag === 1) {\n $target$$50 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n } else {\n $target$$50 = 11;\n n2k$$5 = l2.head.fields[0];\n n2l = l2.head.fields[1];\n n2r$$2 = l2.head.fields[2];\n t2$$12 = l2.tail;\n }\n } else if (l1.head.tag === 2) {\n $target$$50 = 8;\n n1k$$4 = l1.head.fields[0];\n t1$$11 = l1.tail;\n } else if (l1.head.tag === 1) {\n $target$$50 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n } else {\n $target$$50 = 3;\n t1$$6 = l1.tail;\n t2$$6 = l2.tail;\n }\n } else {\n $target$$50 = 2;\n }\n } else if (l2.tail != null) {\n $target$$50 = 1;\n } else {\n $target$$50 = 0;\n }\n\n switch ($target$$50) {\n case 0:\n {\n return 0;\n }\n\n case 1:\n {\n return -1 | 0;\n }\n\n case 2:\n {\n return 1;\n }\n\n case 3:\n {\n const $comparer$$17$$51 = comparer$$17;\n comparer$$17 = $comparer$$17$$51;\n l1 = t1$$6;\n l2 = t2$$6;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 4:\n {\n const c$$7 = comparer$$17.Compare(n1k, n2k) | 0;\n\n if (c$$7 !== 0) {\n return c$$7 | 0;\n } else {\n const $comparer$$17$$52 = comparer$$17;\n comparer$$17 = $comparer$$17$$52;\n l1 = t1$$7;\n l2 = t2$$7;\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 5:\n {\n const c$$8 = comparer$$17.Compare(n1k$$1, n2k$$1) | 0;\n\n if (c$$8 !== 0) {\n return c$$8 | 0;\n } else {\n const $comparer$$17$$53 = comparer$$17;\n comparer$$17 = $comparer$$17$$53;\n l1 = new List(new SetTree$00601(0, \"SetEmpty\"), t1$$8);\n l2 = new List(n2r, t2$$8);\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 6:\n {\n const c$$9 = comparer$$17.Compare(n1k$$2, n2k$$2) | 0;\n\n if (c$$9 !== 0) {\n return c$$9 | 0;\n } else {\n const $comparer$$17$$54 = comparer$$17;\n comparer$$17 = $comparer$$17$$54;\n l1 = new List(n1r, t1$$9);\n l2 = new List(emp, t2$$9);\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 7:\n {\n const c$$10 = comparer$$17.Compare(n1k$$3, n2k$$3) | 0;\n\n if (c$$10 !== 0) {\n return c$$10 | 0;\n } else {\n const $comparer$$17$$55 = comparer$$17;\n comparer$$17 = $comparer$$17$$55;\n l1 = new List(n1r$$1, t1$$10);\n l2 = new List(n2r$$1, t2$$10);\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 8:\n {\n const $comparer$$17$$56 = comparer$$17;\n const $l2$$57 = l2;\n comparer$$17 = $comparer$$17$$56;\n l1 = new List(new SetTree$00601(0, \"SetEmpty\"), new List(SetTreeModule$$$SetOne(n1k$$4), t1$$11));\n l2 = $l2$$57;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 9:\n {\n const $comparer$$17$$58 = comparer$$17;\n const $l2$$59 = l2;\n comparer$$17 = $comparer$$17$$58;\n l1 = new List(n1l, new List(SetTreeModule$$$SetNode(n1k$$5, new SetTree$00601(0, \"SetEmpty\"), n1r$$2, 0), t1$$12));\n l2 = $l2$$59;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 10:\n {\n const $comparer$$17$$60 = comparer$$17;\n const $l1$$61 = l1;\n comparer$$17 = $comparer$$17$$60;\n l1 = $l1$$61;\n l2 = new List(new SetTree$00601(0, \"SetEmpty\"), new List(SetTreeModule$$$SetOne(n2k$$4), t2$$11));\n continue SetTreeModule$$$compareStacks;\n }\n\n case 11:\n {\n const $comparer$$17$$62 = comparer$$17;\n const $l1$$63 = l1;\n comparer$$17 = $comparer$$17$$62;\n l1 = $l1$$63;\n l2 = new List(n2l, new List(SetTreeModule$$$SetNode(n2k$$5, new SetTree$00601(0, \"SetEmpty\"), n2r$$2, 0), t2$$12));\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$compare(comparer$$18, s1, s2) {\n if (s1.tag === 0) {\n if (s2.tag === 0) {\n return 0;\n } else {\n return -1 | 0;\n }\n } else if (s2.tag === 0) {\n return 1;\n } else {\n return SetTreeModule$$$compareStacks(comparer$$18, new List(s1, new List()), new List(s2, new List())) | 0;\n }\n}\nexport function SetTreeModule$$$choose(s$$17) {\n return SetTreeModule$$$minimumElement(s$$17);\n}\nexport function SetTreeModule$$$loop(m$$8, acc$$10) {\n SetTreeModule$$$loop: while (true) {\n switch (m$$8.tag) {\n case 2:\n {\n const k$$32 = m$$8.fields[0];\n return new List(k$$32, acc$$10);\n }\n\n case 0:\n {\n return acc$$10;\n }\n\n default:\n {\n const r$$20 = m$$8.fields[2];\n const l$$20 = m$$8.fields[1];\n const k$$31 = m$$8.fields[0];\n const $acc$$10$$64 = acc$$10;\n m$$8 = l$$20;\n acc$$10 = new List(k$$31, SetTreeModule$$$loop(r$$20, $acc$$10$$64));\n continue SetTreeModule$$$loop;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$toList(s$$18) {\n return SetTreeModule$$$loop(s$$18, new List());\n}\nexport function SetTreeModule$$$copyToArray(s$$19, arr, i$$2) {\n let j = i$$2 | 0;\n SetTreeModule$$$iter(function (x$$8) {\n arr[j] = x$$8;\n j = j + 1;\n }, s$$19);\n}\nexport function SetTreeModule$$$mkFromEnumerator(comparer$$19, acc$$11, e) {\n SetTreeModule$$$mkFromEnumerator: while (true) {\n if (e.MoveNext()) {\n const $acc$$11$$66 = acc$$11;\n const $comparer$$19$$65 = comparer$$19;\n const $e$$67 = e;\n comparer$$19 = $comparer$$19$$65;\n acc$$11 = SetTreeModule$$$add($comparer$$19$$65, $e$$67.Current, $acc$$11$$66);\n e = $e$$67;\n continue SetTreeModule$$$mkFromEnumerator;\n } else {\n return acc$$11;\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$ofSeq(comparer$$20, c$$11) {\n const ie = getEnumerator(c$$11);\n\n try {\n return SetTreeModule$$$mkFromEnumerator(comparer$$20, new SetTree$00601(0, \"SetEmpty\"), ie);\n } finally {\n if (isDisposable(ie)) {\n ie.Dispose();\n }\n }\n}\nexport function SetTreeModule$$$ofArray(comparer$$21, arr$$1) {\n let acc$$12 = new SetTree$00601(0, \"SetEmpty\");\n\n for (let i$$3 = 0; i$$3 <= arr$$1.length - 1; i$$3++) {\n acc$$12 = SetTreeModule$$$add(comparer$$21, arr$$1[i$$3], acc$$12);\n }\n\n return acc$$12;\n}\nexport const FSharpSet = declare(function Set_Set(comparer$$22, tree) {\n const $this$$2 = this;\n $this$$2.comparer = comparer$$22;\n $this$$2.tree = tree;\n});\nexport function FSharpSet$reflection($gen$$68) {\n return type(\"Set.FSharpSet\", [$gen$$68]);\n}\nexport function FSharpSet$$$$002Ector$$2528C5CB(comparer$$22, tree) {\n return this instanceof FSharpSet ? FSharpSet.call(this, comparer$$22, tree) : new FSharpSet(comparer$$22, tree);\n}\nexport function FSharpSet$$get_Comparer(__$$4) {\n return __$$4.comparer;\n}\nexport function FSharpSet$$get_Tree(__$$5) {\n return __$$5.tree;\n}\nexport function FSharpSet$$Add$$2B595(s$$20, x$$9) {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$20), SetTreeModule$$$add(FSharpSet$$get_Comparer(s$$20), x$$9, FSharpSet$$get_Tree(s$$20)));\n}\nexport function FSharpSet$$Remove$$2B595(s$$21, x$$10) {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$21), SetTreeModule$$$remove(FSharpSet$$get_Comparer(s$$21), x$$10, FSharpSet$$get_Tree(s$$21)));\n}\nexport function FSharpSet$$get_Count(s$$22) {\n return SetTreeModule$$$count(FSharpSet$$get_Tree(s$$22));\n}\nexport function FSharpSet$$Contains$$2B595(s$$23, x$$11) {\n return SetTreeModule$$$mem(FSharpSet$$get_Comparer(s$$23), x$$11, FSharpSet$$get_Tree(s$$23));\n}\nexport function FSharpSet$$Iterate$$5028453F(s$$24, x$$12) {\n SetTreeModule$$$iter(x$$12, FSharpSet$$get_Tree(s$$24));\n}\nexport function FSharpSet$$Fold(s$$25, f$$10, z) {\n return SetTreeModule$$$fold(function (x$$13, z$$1) {\n return f$$10(z$$1, x$$13);\n }, z, FSharpSet$$get_Tree(s$$25));\n}\nexport function FSharpSet$$get_IsEmpty(s$$26) {\n return SetTreeModule$$$isEmpty(FSharpSet$$get_Tree(s$$26));\n}\nexport function FSharpSet$$Partition$$Z1D55A0D7(s$$27, f$$11) {\n if (FSharpSet$$get_Tree(s$$27).tag === 0) {\n return [s$$27, s$$27];\n } else {\n const patternInput$$6 = SetTreeModule$$$partition(FSharpSet$$get_Comparer(s$$27), f$$11, FSharpSet$$get_Tree(s$$27));\n const t2$$13 = patternInput$$6[1];\n const t1$$13 = patternInput$$6[0];\n return [FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$27), t1$$13), FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$27), t2$$13)];\n }\n}\nexport function FSharpSet$$Filter$$Z1D55A0D7(s$$28, f$$12) {\n if (FSharpSet$$get_Tree(s$$28).tag === 0) {\n return s$$28;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$28), SetTreeModule$$$filter(FSharpSet$$get_Comparer(s$$28), f$$12, FSharpSet$$get_Tree(s$$28)));\n }\n}\nexport function FSharpSet$$Map$$38806891(s$$29, f$$13, comparer$$23) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$23, SetTreeModule$$$fold(function (acc$$13, k$$33) {\n return SetTreeModule$$$add(comparer$$23, f$$13(k$$33), acc$$13);\n }, new SetTree$00601(0, \"SetEmpty\"), FSharpSet$$get_Tree(s$$29)));\n}\nexport function FSharpSet$$Exists$$Z1D55A0D7(s$$30, f$$14) {\n return SetTreeModule$$$exists(f$$14, FSharpSet$$get_Tree(s$$30));\n}\nexport function FSharpSet$$ForAll$$Z1D55A0D7(s$$31, f$$15) {\n return SetTreeModule$$$forall(f$$15, FSharpSet$$get_Tree(s$$31));\n}\nexport function FSharpSet$$$op_Subtraction(a$$4, b$$5) {\n if (FSharpSet$$get_Tree(a$$4).tag === 0) {\n return a$$4;\n } else if (FSharpSet$$get_Tree(b$$5).tag === 0) {\n return a$$4;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(a$$4), SetTreeModule$$$diff(FSharpSet$$get_Comparer(a$$4), FSharpSet$$get_Tree(a$$4), FSharpSet$$get_Tree(b$$5)));\n }\n}\nexport function FSharpSet$$$op_Addition(a$$5, b$$6) {\n if (FSharpSet$$get_Tree(b$$6).tag === 0) {\n return a$$5;\n } else if (FSharpSet$$get_Tree(a$$5).tag === 0) {\n return b$$6;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(a$$5), SetTreeModule$$$union(FSharpSet$$get_Comparer(a$$5), FSharpSet$$get_Tree(a$$5), FSharpSet$$get_Tree(b$$6)));\n }\n}\nexport function FSharpSet$$$Intersection$$Z3BE9BFE0(a$$6, b$$7) {\n if (FSharpSet$$get_Tree(b$$7).tag === 0) {\n return b$$7;\n } else if (FSharpSet$$get_Tree(a$$6).tag === 0) {\n return a$$6;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(a$$6), SetTreeModule$$$intersection(FSharpSet$$get_Comparer(a$$6), FSharpSet$$get_Tree(a$$6), FSharpSet$$get_Tree(b$$7)));\n }\n}\nexport function FSharpSet$$$IntersectionMany$$Z15B59630(sets) {\n return reduce(FSharpSet$$$Intersection$$Z3BE9BFE0, sets);\n}\nexport function FSharpSet$$$Equality$$Z3BE9BFE0(a$$7, b$$8) {\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(a$$7), FSharpSet$$get_Tree(a$$7), FSharpSet$$get_Tree(b$$8)) === 0;\n}\nexport function FSharpSet$$$Compare$$Z3BE9BFE0(a$$8, b$$9) {\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(a$$8), FSharpSet$$get_Tree(a$$8), FSharpSet$$get_Tree(b$$9));\n}\nexport function FSharpSet$$get_Choose(x$$14) {\n return SetTreeModule$$$choose(FSharpSet$$get_Tree(x$$14));\n}\nexport function FSharpSet$$get_MinimumElement(x$$15) {\n return SetTreeModule$$$minimumElement(FSharpSet$$get_Tree(x$$15));\n}\nexport function FSharpSet$$get_MaximumElement(x$$16) {\n return SetTreeModule$$$maximumElement(FSharpSet$$get_Tree(x$$16));\n}\nexport function FSharpSet$$IsSubsetOf$$6A20B1FF(x$$17, y) {\n return SetTreeModule$$$subset(FSharpSet$$get_Comparer(x$$17), FSharpSet$$get_Tree(x$$17), FSharpSet$$get_Tree(y));\n}\nexport function FSharpSet$$IsSupersetOf$$6A20B1FF(x$$18, y$$1) {\n return SetTreeModule$$$subset(FSharpSet$$get_Comparer(x$$18), FSharpSet$$get_Tree(y$$1), FSharpSet$$get_Tree(x$$18));\n}\nexport function FSharpSet$$IsProperSubsetOf$$6A20B1FF(x$$19, y$$2) {\n return SetTreeModule$$$psubset(FSharpSet$$get_Comparer(x$$19), FSharpSet$$get_Tree(x$$19), FSharpSet$$get_Tree(y$$2));\n}\nexport function FSharpSet$$IsProperSupersetOf$$6A20B1FF(x$$20, y$$3) {\n return SetTreeModule$$$psubset(FSharpSet$$get_Comparer(x$$20), FSharpSet$$get_Tree(y$$3), FSharpSet$$get_Tree(x$$20));\n}\n\nFSharpSet.prototype.toString = function () {\n const this$ = this;\n return \"set [\" + join(\"; \", ...map$$1(function (x$$21) {\n let copyOfStruct = x$$21;\n return String(copyOfStruct);\n }, this$)) + \"]\";\n};\n\nFSharpSet.prototype.GetHashCode = function () {\n const this$$$1 = this;\n\n const combineHash = function combineHash(x$$22, y$$4) {\n return (x$$22 << 1) + y$$4 + 631;\n };\n\n let res = 0;\n const e$$1 = SetTreeModule$$$mkIEnumerator(FSharpSet$$get_Tree(this$$$1));\n\n while (e$$1.MoveNext()) {\n res = combineHash(res, structuralHash(e$$1.Current));\n }\n\n return Math.abs(res) | 0;\n};\n\nFSharpSet.prototype.Equals = function (that) {\n const this$$$2 = this;\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(this$$$2), FSharpSet$$get_Tree(this$$$2), FSharpSet$$get_Tree(that)) === 0;\n};\n\nFSharpSet.prototype.CompareTo = function (that$$1) {\n const this$$$3 = this;\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(this$$$3), FSharpSet$$get_Tree(this$$$3), FSharpSet$$get_Tree(that$$1)) | 0;\n};\n\nFSharpSet.prototype[Symbol.iterator] = function () {\n const s$$32 = this;\n return toIterator(SetTreeModule$$$mkIEnumerator(FSharpSet$$get_Tree(s$$32)));\n};\n\nexport function isEmpty(s$$33) {\n return FSharpSet$$get_IsEmpty(s$$33);\n}\nexport function contains(x$$23, s$$34) {\n return FSharpSet$$Contains$$2B595(s$$34, x$$23);\n}\nexport function add(x$$24, s$$35) {\n return FSharpSet$$Add$$2B595(s$$35, x$$24);\n}\nexport function singleton(x$$25, comparer$$24) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$24, new SetTree$00601(2, \"SetOne\", x$$25));\n}\nexport function remove(x$$26, s$$36) {\n return FSharpSet$$Remove$$2B595(s$$36, x$$26);\n}\nexport function union(s1$$2, s2$$2) {\n return FSharpSet$$$op_Addition(s1$$2, s2$$2);\n}\nexport function unionMany(sets$$1, comparer$$25) {\n return fold$$1(FSharpSet$$$op_Addition, FSharpSet$$$$002Ector$$2528C5CB(comparer$$25, new SetTree$00601(0, \"SetEmpty\")), sets$$1);\n}\nexport function intersect(s1$$3, s2$$3) {\n return FSharpSet$$$Intersection$$Z3BE9BFE0(s1$$3, s2$$3);\n}\nexport function intersectMany(sets$$2) {\n return FSharpSet$$$IntersectionMany$$Z15B59630(sets$$2);\n}\nexport function iterate(f$$16, s$$37) {\n FSharpSet$$Iterate$$5028453F(s$$37, f$$16);\n}\nexport function empty(comparer$$26) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$26, new SetTree$00601(0, \"SetEmpty\"));\n}\nexport function forAll(f$$17, s$$38) {\n return FSharpSet$$ForAll$$Z1D55A0D7(s$$38, f$$17);\n}\nexport function exists(f$$18, s$$39) {\n return FSharpSet$$Exists$$Z1D55A0D7(s$$39, f$$18);\n}\nexport function filter(f$$19, s$$40) {\n return FSharpSet$$Filter$$Z1D55A0D7(s$$40, f$$19);\n}\nexport function partition(f$$20, s$$41) {\n return FSharpSet$$Partition$$Z1D55A0D7(s$$41, f$$20);\n}\nexport function fold(f$$21, z$$2, s$$42) {\n return SetTreeModule$$$fold(f$$21, z$$2, FSharpSet$$get_Tree(s$$42));\n}\nexport function foldBack(f$$22, s$$43, z$$3) {\n return SetTreeModule$$$foldBack(f$$22, FSharpSet$$get_Tree(s$$43), z$$3);\n}\nexport function map(f$$23, s$$44, comparer$$27) {\n return FSharpSet$$Map$$38806891(s$$44, f$$23, comparer$$27);\n}\nexport function count(s$$45) {\n return FSharpSet$$get_Count(s$$45);\n}\nexport function minimumElement(s$$46) {\n return FSharpSet$$get_MinimumElement(s$$46);\n}\nexport function maximumElement(s$$47) {\n return FSharpSet$$get_MaximumElement(s$$47);\n}\nexport function ofList(li, comparer$$28) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$28, SetTreeModule$$$ofSeq(comparer$$28, li));\n}\nexport function ofArray(arr$$2, comparer$$29) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$29, SetTreeModule$$$ofArray(comparer$$29, arr$$2));\n}\nexport function toList(s$$48) {\n return SetTreeModule$$$toList(FSharpSet$$get_Tree(s$$48));\n}\nexport function toArray(s$$49, cons) {\n const n$$3 = count(s$$49) | 0;\n const res$$1 = new cons(n$$3);\n SetTreeModule$$$copyToArray(FSharpSet$$get_Tree(s$$49), res$$1, 0);\n return res$$1;\n}\nexport function toSeq(s$$50) {\n return SetTreeModule$$$toSeq(FSharpSet$$get_Tree(s$$50));\n}\nexport function ofSeq(elements, comparer$$30) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$30, SetTreeModule$$$ofSeq(comparer$$30, elements));\n}\nexport function difference(x$$28, y$$6) {\n return FSharpSet$$$op_Subtraction(x$$28, y$$6);\n}\nexport function isSubset(x$$29, y$$7) {\n return FSharpSet$$IsSubsetOf$$6A20B1FF(x$$29, y$$7);\n}\nexport function isSuperset(x$$30, y$$8) {\n return FSharpSet$$IsSupersetOf$$6A20B1FF(x$$30, y$$8);\n}\nexport function isProperSubset(x$$31, y$$9) {\n return FSharpSet$$IsProperSubsetOf$$6A20B1FF(x$$31, y$$9);\n}\nexport function isProperSuperset(x$$32, y$$10) {\n return FSharpSet$$IsProperSupersetOf$$6A20B1FF(x$$32, y$$10);\n}\nexport function minElement(s$$51) {\n return FSharpSet$$get_MinimumElement(s$$51);\n}\nexport function maxElement(s$$52) {\n return FSharpSet$$get_MaximumElement(s$$52);\n}\n\nfunction createMutablePrivate(comparer$$31, tree$0027) {\n let tree$$1 = tree$0027;\n return {\n get size() {\n return SetTreeModule$$$count(tree$$1);\n },\n\n add(x$$33) {\n const this$$$4 = this;\n tree$$1 = SetTreeModule$$$add(comparer$$31, x$$33, tree$$1);\n return this$$$4;\n },\n\n add_(x$$34) {\n if (SetTreeModule$$$mem(comparer$$31, x$$34, tree$$1)) {\n return false;\n } else {\n tree$$1 = SetTreeModule$$$add(comparer$$31, x$$34, tree$$1);\n return true;\n }\n },\n\n clear() {\n tree$$1 = new SetTree$00601(0, \"SetEmpty\");\n },\n\n delete(x$$35) {\n if (SetTreeModule$$$mem(comparer$$31, x$$35, tree$$1)) {\n tree$$1 = SetTreeModule$$$remove(comparer$$31, x$$35, tree$$1);\n return true;\n } else {\n return false;\n }\n },\n\n has(x$$36) {\n return SetTreeModule$$$mem(comparer$$31, x$$36, tree$$1);\n },\n\n values() {\n return SetTreeModule$$$toSeq(tree$$1);\n },\n\n [Symbol.iterator]() {\n return toIterator(SetTreeModule$$$mkIEnumerator(tree$$1));\n },\n\n GetEnumerator() {\n return SetTreeModule$$$mkIEnumerator(tree$$1);\n }\n\n };\n}\n\nexport function createMutable(source, comparer$$32) {\n const set = MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z79760D57(comparer$$32);\n iterate$$1(function (item) {\n MutableSet$002400601$0024$0024Add$0024$00242B595(set, item), null;\n }, source);\n return set;\n}\nexport function distinct(xs, comparer$$33) {\n return createMutable(xs, comparer$$33);\n}\nexport function distinctBy(projection, xs$$1, comparer$$34) {\n const li$$1 = [];\n const hashSet = createMutable(empty$$1(), comparer$$34);\n iterate$$1(function (x$$37) {\n if (hashSet.add_(projection(x$$37))) {\n li$$1.push(x$$37);\n }\n }, xs$$1);\n return li$$1;\n}\nexport function unionWith(s1$$4, s2$$4) {\n return fold$$1(function folder(acc$$14, x$$38) {\n return acc$$14.add(x$$38);\n }, s1$$4, s2$$4);\n}\nexport function intersectWith(s1$$5, s2$$5, comparer$$35) {\n const s2$$6 = ofSeq(s2$$5, comparer$$35);\n iterate$$1(function (x$$39) {\n if (!FSharpSet$$Contains$$2B595(s2$$6, x$$39)) {\n s1$$5.delete(x$$39), null;\n }\n }, s1$$5);\n}\nexport function exceptWith(s1$$6, s2$$7) {\n iterate$$1(function (x$$40) {\n s1$$6.delete(x$$40), null;\n }, s2$$7);\n}\nexport function isSubsetOf(s1$$7, s2$$8, comparer$$36) {\n return isSubset(ofSeq(s1$$7, comparer$$36), ofSeq(s2$$8, comparer$$36));\n}\nexport function isSupersetOf(s1$$8, s2$$9, comparer$$37) {\n return isSuperset(ofSeq(s1$$8, comparer$$37), ofSeq(s2$$9, comparer$$37));\n}\nexport function isProperSubsetOf(s1$$9, s2$$10, comparer$$38) {\n return isProperSubset(ofSeq(s1$$9, comparer$$38), ofSeq(s2$$10, comparer$$38));\n}\nexport function isProperSupersetOf(s1$$10, s2$$11, comparer$$39) {\n return isProperSuperset(ofSeq(s1$$10, comparer$$39), ofSeq(s2$$11, comparer$$39));\n}","import { defaultArg, value as value$$1, some } from \"./Option.js\";\nimport { List } from \"./Types.js\";\nimport { collect as collect$$1, scanBack as scanBack$$1, scan as scan$$1, foldBack2 as foldBack2$$1, fold2 as fold2$$1, fold as fold$$1, map as map$$1 } from \"./Seq.js\";\nimport { partialApply, getItemFromDict, addToDict, tryGetValue, addToSet, count, uncurry } from \"./Util.js\";\nimport { ofList } from \"./Array.js\";\nimport { permute as permute$$1, findIndexBack as findIndexBack$$1, tryFindIndexBack as tryFindIndexBack$$1 } from \"./Array\";\nimport { createMutable } from \"./Set.js\";\nimport { createMutable as createMutable$$1 } from \"./Map.js\";\nexport function head(_arg1) {\n if (_arg1.tail != null) {\n const x = _arg1.head;\n return x;\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function tryHead(_arg1$$1) {\n if (_arg1$$1.tail != null) {\n const x$$1 = _arg1$$1.head;\n return some(x$$1);\n } else {\n return null;\n }\n}\nexport function tail(_arg1$$2) {\n if (_arg1$$2.tail != null) {\n const xs = _arg1$$2.tail;\n return xs;\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function last(_arg1$$3) {\n last: while (true) {\n if (_arg1$$3.tail != null) {\n if (_arg1$$3.tail.tail == null) {\n const x$$2 = _arg1$$3.head;\n return x$$2;\n } else {\n const xs$$1 = _arg1$$3.tail;\n _arg1$$3 = xs$$1;\n continue last;\n }\n } else {\n throw new Error(\"List was empty\");\n }\n\n break;\n }\n}\nexport function tryLast(_arg1$$4) {\n tryLast: while (true) {\n if (_arg1$$4.tail != null) {\n if (_arg1$$4.tail.tail == null) {\n const x$$3 = _arg1$$4.head;\n return some(x$$3);\n } else {\n const xs$$2 = _arg1$$4.tail;\n _arg1$$4 = xs$$2;\n continue tryLast;\n }\n } else {\n return null;\n }\n\n break;\n }\n}\nexport function compareWith(comparer, xs$$3, ys) {\n if (xs$$3 === ys) {\n return 0;\n } else {\n const loop = function loop(xs$$4, ys$$1) {\n loop: while (true) {\n if (xs$$4.tail != null) {\n if (ys$$1.tail != null) {\n const x$$4 = xs$$4.head;\n const xs$$5 = xs$$4.tail;\n const y = ys$$1.head;\n const ys$$2 = ys$$1.tail;\n const matchValue$$1 = comparer(x$$4, y) | 0;\n\n if (matchValue$$1 === 0) {\n xs$$4 = xs$$5;\n ys$$1 = ys$$2;\n continue loop;\n } else {\n const res = matchValue$$1 | 0;\n return res | 0;\n }\n } else {\n return 1;\n }\n } else if (ys$$1.tail == null) {\n return 0;\n } else {\n return -1 | 0;\n }\n\n break;\n }\n };\n\n return loop(xs$$3, ys) | 0;\n }\n}\nexport function foldIndexedAux($arg$$5, $arg$$6, $arg$$7, $arg$$8) {\n foldIndexedAux: while (true) {\n const f = $arg$$5,\n i = $arg$$6,\n acc = $arg$$7,\n _arg1$$5 = $arg$$8;\n\n if (_arg1$$5.tail != null) {\n const xs$$6 = _arg1$$5.tail;\n const x$$5 = _arg1$$5.head;\n $arg$$5 = f;\n $arg$$6 = i + 1;\n $arg$$7 = f(i, acc, x$$5);\n $arg$$8 = xs$$6;\n continue foldIndexedAux;\n } else {\n return acc;\n }\n\n break;\n }\n}\nexport function foldIndexed(f$$1, state, xs$$7) {\n return foldIndexedAux(f$$1, 0, state, xs$$7);\n}\nexport function fold($arg$$12, $arg$$13, $arg$$14) {\n fold: while (true) {\n const f$$2 = $arg$$12,\n state$$1 = $arg$$13,\n xs$$8 = $arg$$14;\n\n if (xs$$8.tail != null) {\n const t = xs$$8.tail;\n const h = xs$$8.head;\n $arg$$12 = f$$2;\n $arg$$13 = f$$2(state$$1, h);\n $arg$$14 = t;\n continue fold;\n } else {\n return state$$1;\n }\n\n break;\n }\n}\nexport function reverse(xs$$9) {\n return fold(function (acc$$1, x$$6) {\n return new List(x$$6, acc$$1);\n }, new List(), xs$$9);\n}\nexport function foldBack(f$$3, xs$$10, state$$2) {\n return fold(function (acc$$2, x$$7) {\n return f$$3(x$$7, acc$$2);\n }, state$$2, reverse(xs$$10));\n}\nexport function toSeq(xs$$11) {\n return map$$1(function (x$$8) {\n return x$$8;\n }, xs$$11);\n}\nexport function ofSeq(xs$$12) {\n return reverse(fold$$1(function (acc$$3, x$$9) {\n return new List(x$$9, acc$$3);\n }, new List(), xs$$12));\n}\nexport function concat(lists) {\n return reverse(fold$$1(function (state$$3, xs$$14) {\n return fold(function f$$4(acc$$4, x$$10) {\n return new List(x$$10, acc$$4);\n }, state$$3, xs$$14);\n }, new List(), lists));\n}\nexport function foldIndexed2Aux($arg$$18, $arg$$19, $arg$$20, $arg$$21, $arg$$22) {\n foldIndexed2Aux: while (true) {\n const f$$5 = $arg$$18,\n i$$1 = $arg$$19,\n acc$$5 = $arg$$20,\n bs = $arg$$21,\n cs = $arg$$22;\n var $target$$23, x$$11, xs$$16, y$$1, ys$$3;\n\n if (bs.tail != null) {\n if (cs.tail != null) {\n $target$$23 = 1;\n x$$11 = bs.head;\n xs$$16 = bs.tail;\n y$$1 = cs.head;\n ys$$3 = cs.tail;\n } else {\n $target$$23 = 2;\n }\n } else if (cs.tail == null) {\n $target$$23 = 0;\n } else {\n $target$$23 = 2;\n }\n\n switch ($target$$23) {\n case 0:\n {\n return acc$$5;\n }\n\n case 1:\n {\n $arg$$18 = f$$5;\n $arg$$19 = i$$1 + 1;\n $arg$$20 = f$$5(i$$1, acc$$5, x$$11, y$$1);\n $arg$$21 = xs$$16;\n $arg$$22 = ys$$3;\n continue foldIndexed2Aux;\n }\n\n case 2:\n {\n throw new Error(\"Lists had different lengths\");\n }\n }\n\n break;\n }\n}\nexport function foldIndexed2(f$$6, state$$4, xs$$17, ys$$4) {\n return foldIndexed2Aux(f$$6, 0, state$$4, xs$$17, ys$$4);\n}\nexport function fold2(f$$7, state$$5, xs$$18, ys$$5) {\n return fold2$$1(f$$7, state$$5, xs$$18, ys$$5);\n}\nexport function foldBack2(f$$8, xs$$19, ys$$6, state$$6) {\n return foldBack2$$1(f$$8, xs$$19, ys$$6, state$$6);\n}\nexport function unfold(f$$9, state$$7) {\n const unfoldInner = function unfoldInner(acc$$6, state$$8) {\n unfoldInner: while (true) {\n const matchValue$$3 = f$$9(state$$8);\n\n if (matchValue$$3 != null) {\n const x$$12 = matchValue$$3[0];\n const state$$9 = matchValue$$3[1];\n const $acc$$6$$38 = acc$$6;\n acc$$6 = new List(x$$12, $acc$$6$$38);\n state$$8 = state$$9;\n continue unfoldInner;\n } else {\n return reverse(acc$$6);\n }\n\n break;\n }\n };\n\n return unfoldInner(new List(), state$$7);\n}\nexport function foldIndexed3Aux($arg$$39, $arg$$40, $arg$$41, $arg$$42, $arg$$43, $arg$$44) {\n foldIndexed3Aux: while (true) {\n const f$$10 = $arg$$39,\n i$$2 = $arg$$40,\n acc$$7 = $arg$$41,\n bs$$1 = $arg$$42,\n cs$$1 = $arg$$43,\n ds = $arg$$44;\n var $target$$45, x$$13, xs$$20, y$$2, ys$$7, z, zs;\n\n if (bs$$1.tail != null) {\n if (cs$$1.tail != null) {\n if (ds.tail != null) {\n $target$$45 = 1;\n x$$13 = bs$$1.head;\n xs$$20 = bs$$1.tail;\n y$$2 = cs$$1.head;\n ys$$7 = cs$$1.tail;\n z = ds.head;\n zs = ds.tail;\n } else {\n $target$$45 = 2;\n }\n } else {\n $target$$45 = 2;\n }\n } else if (cs$$1.tail == null) {\n if (ds.tail == null) {\n $target$$45 = 0;\n } else {\n $target$$45 = 2;\n }\n } else {\n $target$$45 = 2;\n }\n\n switch ($target$$45) {\n case 0:\n {\n return acc$$7;\n }\n\n case 1:\n {\n $arg$$39 = f$$10;\n $arg$$40 = i$$2 + 1;\n $arg$$41 = f$$10(i$$2, acc$$7, x$$13, y$$2, z);\n $arg$$42 = xs$$20;\n $arg$$43 = ys$$7;\n $arg$$44 = zs;\n continue foldIndexed3Aux;\n }\n\n case 2:\n {\n throw new Error(\"Lists had different lengths\");\n }\n }\n\n break;\n }\n}\nexport function foldIndexed3(f$$11, seed, xs$$21, ys$$8, zs$$1) {\n return foldIndexed3Aux(f$$11, 0, seed, xs$$21, ys$$8, zs$$1);\n}\nexport function fold3(f$$12, state$$10, xs$$22, ys$$9, zs$$2) {\n return foldIndexed3(function (_arg1$$6, acc$$8, x$$14, y$$3, z$$1) {\n return f$$12(acc$$8, x$$14, y$$3, z$$1);\n }, state$$10, xs$$22, ys$$9, zs$$2);\n}\nexport function scan(f$$13, state$$11, xs$$23) {\n return ofSeq(scan$$1(f$$13, state$$11, xs$$23));\n}\nexport function scanBack(f$$14, xs$$25, state$$12) {\n return ofSeq(scanBack$$1(f$$14, xs$$25, state$$12));\n}\nexport function length(xs$$27) {\n return fold(function (acc$$9, _arg1$$7) {\n return acc$$9 + 1;\n }, 0, xs$$27);\n}\nexport function append(xs$$28, ys$$10) {\n return fold(function (acc$$10, x$$15) {\n return new List(x$$15, acc$$10);\n }, ys$$10, reverse(xs$$28));\n}\nexport function collect(f$$15, xs$$29) {\n return ofSeq(collect$$1(f$$15, xs$$29));\n}\nexport function map(f$$16, xs$$31) {\n return reverse(fold(function (acc$$11, x$$16) {\n return new List(f$$16(x$$16), acc$$11);\n }, new List(), xs$$31));\n}\nexport function mapIndexed(f$$17, xs$$33) {\n return reverse(foldIndexed(function (i$$3, acc$$12, x$$17) {\n return new List(f$$17(i$$3, x$$17), acc$$12);\n }, new List(), xs$$33));\n}\nexport function indexed(xs$$35) {\n return mapIndexed(function (i$$4, x$$18) {\n return [i$$4, x$$18];\n }, xs$$35);\n}\nexport function map2(f$$18, xs$$36, ys$$11) {\n return reverse(fold2(function (acc$$13, x$$19, y$$4) {\n return new List(f$$18(x$$19, y$$4), acc$$13);\n }, new List(), xs$$36, ys$$11));\n}\nexport function mapIndexed2(f$$19, xs$$38, ys$$12) {\n return reverse(foldIndexed2(function (i$$5, acc$$14, x$$20, y$$5) {\n return new List(f$$19(i$$5, x$$20, y$$5), acc$$14);\n }, new List(), xs$$38, ys$$12));\n}\nexport function map3(f$$20, xs$$40, ys$$13, zs$$3) {\n return reverse(fold3(function (acc$$15, x$$21, y$$6, z$$2) {\n return new List(f$$20(x$$21, y$$6, z$$2), acc$$15);\n }, new List(), xs$$40, ys$$13, zs$$3));\n}\nexport function mapIndexed3(f$$21, xs$$42, ys$$14, zs$$4) {\n return reverse(foldIndexed3(function (i$$6, acc$$16, x$$22, y$$7, z$$3) {\n return new List(f$$21(i$$6, x$$22, y$$7, z$$3), acc$$16);\n }, new List(), xs$$42, ys$$14, zs$$4));\n}\nexport function mapFold(f$$22, s, xs$$44) {\n const foldFn = function foldFn(tupledArg) {\n const nxs = tupledArg[0];\n const fs = tupledArg[1];\n return function (x$$23) {\n const patternInput = f$$22(fs, x$$23);\n const nx = patternInput[0];\n const fs$$1 = patternInput[1];\n return [new List(nx, nxs), fs$$1];\n };\n };\n\n const patternInput$$1 = fold(uncurry(2, foldFn), [new List(), s], xs$$44);\n const s$$1 = patternInput$$1[1];\n const nxs$$1 = patternInput$$1[0];\n return [reverse(nxs$$1), s$$1];\n}\nexport function mapFoldBack(f$$23, xs$$45, s$$2) {\n return mapFold(function (s$$3, v) {\n return f$$23(v, s$$3);\n }, s$$2, reverse(xs$$45));\n}\nexport function iterate(f$$24, xs$$46) {\n fold(function (unitVar0, x$$24) {\n f$$24(x$$24);\n }, null, xs$$46);\n}\nexport function iterate2(f$$25, xs$$47, ys$$15) {\n fold2(function (unitVar0$$1, x$$25, y$$8) {\n f$$25(x$$25, y$$8);\n }, null, xs$$47, ys$$15);\n}\nexport function iterateIndexed(f$$26, xs$$48) {\n foldIndexed(function (i$$7, unitVar1, x$$26) {\n f$$26(i$$7, x$$26);\n }, null, xs$$48);\n}\nexport function iterateIndexed2(f$$27, xs$$49, ys$$16) {\n foldIndexed2(function (i$$8, unitVar1$$1, x$$27, y$$9) {\n f$$27(i$$8, x$$27, y$$9);\n }, null, xs$$49, ys$$16);\n}\nexport function ofArray(xs$$50) {\n let res$$1 = new List();\n\n for (let i$$9 = count(xs$$50) - 1; i$$9 >= 0; i$$9--) {\n res$$1 = new List(xs$$50[i$$9], res$$1);\n }\n\n return res$$1;\n}\nexport function empty() {\n return new List();\n}\nexport function isEmpty(_arg1$$8) {\n if (_arg1$$8.tail == null) {\n return true;\n } else {\n return false;\n }\n}\nexport function tryPickIndexedAux($arg$$98, $arg$$99, $arg$$100) {\n tryPickIndexedAux: while (true) {\n const f$$28 = $arg$$98,\n i$$10 = $arg$$99,\n _arg1$$9 = $arg$$100;\n\n if (_arg1$$9.tail != null) {\n const xs$$51 = _arg1$$9.tail;\n const x$$28 = _arg1$$9.head;\n const result = f$$28(i$$10, x$$28);\n\n if (result == null) {\n $arg$$98 = f$$28;\n $arg$$99 = i$$10 + 1;\n $arg$$100 = xs$$51;\n continue tryPickIndexedAux;\n } else {\n return result;\n }\n } else {\n return null;\n }\n\n break;\n }\n}\nexport function tryPickIndexed(f$$29, xs$$52) {\n return tryPickIndexedAux(f$$29, 0, xs$$52);\n}\nexport function tryPick(f$$30, xs$$53) {\n return tryPickIndexed(function (_arg1$$10, x$$29) {\n return f$$30(x$$29);\n }, xs$$53);\n}\nexport function pick(f$$31, xs$$54) {\n const matchValue$$5 = tryPick(f$$31, xs$$54);\n\n if (matchValue$$5 != null) {\n const x$$30 = value$$1(matchValue$$5);\n return x$$30;\n } else {\n throw new Error(\"List did not contain any matching elements\");\n }\n}\nexport function tryFindIndexed(f$$32, xs$$55) {\n return tryPickIndexed(function (i$$11, x$$31) {\n return f$$32(i$$11, x$$31) ? some(x$$31) : null;\n }, xs$$55);\n}\nexport function tryFind(f$$33, xs$$56) {\n return tryPickIndexed(function (_arg1$$11, x$$32) {\n return f$$33(x$$32) ? some(x$$32) : null;\n }, xs$$56);\n}\nexport function findIndexed(f$$34, xs$$57) {\n const matchValue$$6 = tryFindIndexed(f$$34, xs$$57);\n\n if (matchValue$$6 != null) {\n const x$$33 = value$$1(matchValue$$6);\n return x$$33;\n } else {\n throw new Error(\"List did not contain any matching elements\");\n }\n}\nexport function find(f$$35, xs$$58) {\n return findIndexed(function (_arg1$$12, x$$34) {\n return f$$35(x$$34);\n }, xs$$58);\n}\nexport function findBack(f$$36, xs$$59) {\n return find(f$$36, reverse(xs$$59));\n}\nexport function tryFindBack(f$$37, xs$$62) {\n return tryFind(f$$37, reverse(xs$$62));\n}\nexport function tryFindIndex(f$$38, xs$$65) {\n return tryPickIndexed(function (i$$12, x$$35) {\n return f$$38(x$$35) ? i$$12 : null;\n }, xs$$65);\n}\nexport function tryFindIndexBack(f$$39, xs$$66) {\n return tryFindIndexBack$$1(f$$39, ofList(xs$$66, Array));\n}\nexport function findIndex(f$$40, xs$$67) {\n const matchValue$$7 = tryFindIndex(f$$40, xs$$67);\n\n if (matchValue$$7 != null) {\n const x$$36 = matchValue$$7 | 0;\n return x$$36 | 0;\n } else {\n throw new Error(\"List did not contain any matching elements\");\n }\n}\nexport function findIndexBack(f$$41, xs$$68) {\n return findIndexBack$$1(f$$41, ofList(xs$$68, Array));\n}\nexport function item(n, xs$$69) {\n return findIndexed(function (i$$13, _arg1$$13) {\n return n === i$$13;\n }, xs$$69);\n}\nexport function tryItem(n$$1, xs$$70) {\n return tryFindIndexed(function (i$$14, _arg1$$14) {\n return n$$1 === i$$14;\n }, xs$$70);\n}\nexport function filter(f$$42, xs$$71) {\n return reverse(fold(function (acc$$17, x$$37) {\n return f$$42(x$$37) ? new List(x$$37, acc$$17) : acc$$17;\n }, new List(), xs$$71));\n}\nexport function partition(f$$43, xs$$73) {\n return fold(uncurry(2, function (tupledArg$$1) {\n const lacc = tupledArg$$1[0];\n const racc = tupledArg$$1[1];\n return function (x$$38) {\n return f$$43(x$$38) ? [new List(x$$38, lacc), racc] : [lacc, new List(x$$38, racc)];\n };\n }), [new List(), new List()], reverse(xs$$73));\n}\nexport function choose(f$$44, xs$$74) {\n return reverse(fold(function (acc$$18, x$$39) {\n const matchValue$$8 = f$$44(x$$39);\n\n if (matchValue$$8 == null) {\n return acc$$18;\n } else {\n const y$$10 = value$$1(matchValue$$8);\n return new List(y$$10, acc$$18);\n }\n }, new List(), xs$$74));\n}\nexport function contains(value, list, eq) {\n const loop$$1 = function loop$$1(xs$$76) {\n loop$$1: while (true) {\n if (xs$$76.tail != null) {\n const v$$1 = xs$$76.head;\n const rest = xs$$76.tail;\n\n if (eq.Equals(value, v$$1)) {\n return true;\n } else {\n xs$$76 = rest;\n continue loop$$1;\n }\n } else {\n return false;\n }\n\n break;\n }\n };\n\n return loop$$1(list);\n}\nexport function except(itemsToExclude, array$$2, eq$$1) {\n if (isEmpty(array$$2)) {\n return array$$2;\n } else {\n const cached = createMutable(itemsToExclude, eq$$1);\n return filter(function f$$45(arg00) {\n return addToSet(arg00, cached);\n }, array$$2);\n }\n}\nexport function initialize(n$$2, f$$46) {\n let xs$$78 = new List();\n\n for (let i$$15 = 1; i$$15 <= n$$2; i$$15++) {\n xs$$78 = new List(f$$46(n$$2 - i$$15), xs$$78);\n }\n\n return xs$$78;\n}\nexport function replicate(n$$3, x$$40) {\n return initialize(n$$3, function (_arg1$$15) {\n return x$$40;\n });\n}\nexport function reduce(f$$47, _arg1$$16) {\n if (_arg1$$16.tail != null) {\n const t$$1 = _arg1$$16.tail;\n const h$$1 = _arg1$$16.head;\n return fold(f$$47, h$$1, t$$1);\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function reduceBack(f$$48, _arg1$$17) {\n if (_arg1$$17.tail != null) {\n const t$$2 = _arg1$$17.tail;\n const h$$2 = _arg1$$17.head;\n return foldBack(f$$48, t$$2, h$$2);\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function forAll(f$$49, xs$$79) {\n return fold(function (acc$$19, x$$41) {\n return acc$$19 ? f$$49(x$$41) : false;\n }, true, xs$$79);\n}\nexport function forAll2(f$$50, xs$$80, ys$$17) {\n return fold2(function (acc$$20, x$$42, y$$11) {\n return acc$$20 ? f$$50(x$$42, y$$11) : false;\n }, true, xs$$80, ys$$17);\n}\nexport function exists($arg$$144, $arg$$145) {\n exists: while (true) {\n const f$$51 = $arg$$144,\n _arg1$$18 = $arg$$145;\n\n if (_arg1$$18.tail != null) {\n const xs$$81 = _arg1$$18.tail;\n const x$$43 = _arg1$$18.head;\n\n if (f$$51(x$$43)) {\n return true;\n } else {\n $arg$$144 = f$$51;\n $arg$$145 = xs$$81;\n continue exists;\n }\n } else {\n return false;\n }\n\n break;\n }\n}\nexport function exists2($arg$$146, $arg$$147, $arg$$148) {\n exists2: while (true) {\n const f$$52 = $arg$$146,\n bs$$2 = $arg$$147,\n cs$$2 = $arg$$148;\n var $target$$149, x$$44, xs$$82, y$$12, ys$$18;\n\n if (bs$$2.tail != null) {\n if (cs$$2.tail != null) {\n $target$$149 = 1;\n x$$44 = bs$$2.head;\n xs$$82 = bs$$2.tail;\n y$$12 = cs$$2.head;\n ys$$18 = cs$$2.tail;\n } else {\n $target$$149 = 2;\n }\n } else if (cs$$2.tail == null) {\n $target$$149 = 0;\n } else {\n $target$$149 = 2;\n }\n\n switch ($target$$149) {\n case 0:\n {\n return false;\n }\n\n case 1:\n {\n if (f$$52(x$$44, y$$12)) {\n return true;\n } else {\n $arg$$146 = f$$52;\n $arg$$147 = xs$$82;\n $arg$$148 = ys$$18;\n continue exists2;\n }\n }\n\n case 2:\n {\n throw new Error(\"Lists had different lengths\");\n }\n }\n\n break;\n }\n}\nexport function unzip(xs$$83) {\n return foldBack(uncurry(2, function (tupledArg$$2) {\n const x$$45 = tupledArg$$2[0];\n const y$$13 = tupledArg$$2[1];\n return function (tupledArg$$3) {\n const lacc$$1 = tupledArg$$3[0];\n const racc$$1 = tupledArg$$3[1];\n return [new List(x$$45, lacc$$1), new List(y$$13, racc$$1)];\n };\n }), xs$$83, [new List(), new List()]);\n}\nexport function unzip3(xs$$84) {\n return foldBack(uncurry(2, function (tupledArg$$4) {\n const x$$46 = tupledArg$$4[0];\n const y$$14 = tupledArg$$4[1];\n const z$$4 = tupledArg$$4[2];\n return function (tupledArg$$5) {\n const lacc$$2 = tupledArg$$5[0];\n const macc = tupledArg$$5[1];\n const racc$$2 = tupledArg$$5[2];\n return [new List(x$$46, lacc$$2), new List(y$$14, macc), new List(z$$4, racc$$2)];\n };\n }), xs$$84, [new List(), new List(), new List()]);\n}\nexport function zip(xs$$85, ys$$19) {\n return map2(function (x$$47, y$$15) {\n return [x$$47, y$$15];\n }, xs$$85, ys$$19);\n}\nexport function zip3(xs$$86, ys$$20, zs$$5) {\n return map3(function (x$$48, y$$16, z$$5) {\n return [x$$48, y$$16, z$$5];\n }, xs$$86, ys$$20, zs$$5);\n}\nexport function sort(xs$$87, comparer$$1) {\n var comparer$$2, xs$$88;\n return ofArray((comparer$$2 = function comparer$$2(x$$49, y$$17) {\n return comparer$$1.Compare(x$$49, y$$17);\n }, (xs$$88 = ofList(xs$$87, Array), (xs$$88.sort(comparer$$2), xs$$88))));\n}\nexport function sortBy(projection, xs$$90, comparer$$3) {\n var comparer$$4, xs$$91;\n return ofArray((comparer$$4 = function comparer$$4(x$$50, y$$18) {\n return comparer$$3.Compare(projection(x$$50), projection(y$$18));\n }, (xs$$91 = ofList(xs$$90, Array), (xs$$91.sort(comparer$$4), xs$$91))));\n}\nexport function sortDescending(xs$$93, comparer$$5) {\n var comparer$$6, xs$$94;\n return ofArray((comparer$$6 = function comparer$$6(x$$51, y$$19) {\n return comparer$$5.Compare(x$$51, y$$19) * -1;\n }, (xs$$94 = ofList(xs$$93, Array), (xs$$94.sort(comparer$$6), xs$$94))));\n}\nexport function sortByDescending(projection$$1, xs$$96, comparer$$7) {\n var comparer$$8, xs$$97;\n return ofArray((comparer$$8 = function comparer$$8(x$$52, y$$20) {\n return comparer$$7.Compare(projection$$1(x$$52), projection$$1(y$$20)) * -1;\n }, (xs$$97 = ofList(xs$$96, Array), (xs$$97.sort(comparer$$8), xs$$97))));\n}\nexport function sortWith(comparer$$9, xs$$99) {\n var xs$$100;\n return ofArray((xs$$100 = ofList(xs$$99, Array), (xs$$100.sort(comparer$$9), xs$$100)));\n}\nexport function sum(xs$$102, adder) {\n return fold(function (acc$$21, x$$53) {\n return adder.Add(acc$$21, x$$53);\n }, adder.GetZero(), xs$$102);\n}\nexport function sumBy(f$$53, xs$$103, adder$$1) {\n return fold(function (acc$$22, x$$54) {\n return adder$$1.Add(acc$$22, f$$53(x$$54));\n }, adder$$1.GetZero(), xs$$103);\n}\nexport function maxBy(projection$$2, xs$$104, comparer$$11) {\n return reduce(function (x$$55, y$$21) {\n return comparer$$11.Compare(projection$$2(y$$21), projection$$2(x$$55)) > 0 ? y$$21 : x$$55;\n }, xs$$104);\n}\nexport function max(li, comparer$$12) {\n return reduce(function (x$$56, y$$22) {\n return comparer$$12.Compare(y$$22, x$$56) > 0 ? y$$22 : x$$56;\n }, li);\n}\nexport function minBy(projection$$3, xs$$105, comparer$$13) {\n return reduce(function (x$$57, y$$23) {\n return comparer$$13.Compare(projection$$3(y$$23), projection$$3(x$$57)) > 0 ? x$$57 : y$$23;\n }, xs$$105);\n}\nexport function min(xs$$106, comparer$$14) {\n return reduce(function (x$$58, y$$24) {\n return comparer$$14.Compare(y$$24, x$$58) > 0 ? x$$58 : y$$24;\n }, xs$$106);\n}\nexport function average(xs$$107, averager) {\n const total = fold(function (acc$$23, x$$59) {\n return averager.Add(acc$$23, x$$59);\n }, averager.GetZero(), xs$$107);\n return averager.DivideByInt(total, length(xs$$107));\n}\nexport function averageBy(f$$54, xs$$108, averager$$1) {\n const total$$1 = fold(function (acc$$24, x$$60) {\n return averager$$1.Add(acc$$24, f$$54(x$$60));\n }, averager$$1.GetZero(), xs$$108);\n return averager$$1.DivideByInt(total$$1, length(xs$$108));\n}\nexport function permute(f$$55, xs$$109) {\n return ofArray(permute$$1(f$$55, ofList(xs$$109, Array)));\n}\nexport function skip(i$$16, xs$$111) {\n var i$$18;\n\n const skipInner = function skipInner(i$$17, xs$$112) {\n skipInner: while (true) {\n if (i$$17 === 0) {\n return xs$$112;\n } else if (xs$$112.tail != null) {\n const xs$$113 = xs$$112.tail;\n const $i$$17$$172 = i$$17;\n i$$17 = $i$$17$$172 - 1;\n xs$$112 = xs$$113;\n continue skipInner;\n } else {\n throw new Error(\"The input sequence has an insufficient number of elements.\");\n }\n\n break;\n }\n };\n\n if (i$$18 = i$$16 | 0, i$$18 < 0) {\n const i$$19 = i$$16 | 0;\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$173, i$$20, xs$$115;\n\n if (i$$16 === 0) {\n $target$$173 = 0;\n } else if (i$$16 === 1) {\n if (xs$$111.tail != null) {\n $target$$173 = 1;\n } else {\n $target$$173 = 2;\n i$$20 = i$$16;\n xs$$115 = xs$$111;\n }\n } else {\n $target$$173 = 2;\n i$$20 = i$$16;\n xs$$115 = xs$$111;\n }\n\n switch ($target$$173) {\n case 0:\n {\n return xs$$111;\n }\n\n case 1:\n {\n const xs$$114 = xs$$111.tail;\n return xs$$114;\n }\n\n case 2:\n {\n return skipInner(i$$20, xs$$115);\n }\n }\n }\n}\nexport function skipWhile($arg$$174, $arg$$175) {\n var t$$3, h$$3;\n\n skipWhile: while (true) {\n const predicate = $arg$$174,\n xs$$116 = $arg$$175;\n var $target$$176, h$$4, t$$4;\n\n if (xs$$116.tail != null) {\n if (t$$3 = xs$$116.tail, (h$$3 = xs$$116.head, predicate(h$$3))) {\n $target$$176 = 0;\n h$$4 = xs$$116.head;\n t$$4 = xs$$116.tail;\n } else {\n $target$$176 = 1;\n }\n } else {\n $target$$176 = 1;\n }\n\n switch ($target$$176) {\n case 0:\n {\n $arg$$174 = predicate;\n $arg$$175 = t$$4;\n continue skipWhile;\n }\n\n case 1:\n {\n return xs$$116;\n }\n }\n\n break;\n }\n}\nexport function takeSplitAux(error, i$$21, acc$$25, xs$$117) {\n takeSplitAux: while (true) {\n if (i$$21 === 0) {\n return [reverse(acc$$25), xs$$117];\n } else if (xs$$117.tail != null) {\n const xs$$118 = xs$$117.tail;\n const x$$61 = xs$$117.head;\n const $acc$$25$$179 = acc$$25;\n const $error$$177 = error;\n const $i$$21$$178 = i$$21;\n error = $error$$177;\n i$$21 = $i$$21$$178 - 1;\n acc$$25 = new List(x$$61, $acc$$25$$179);\n xs$$117 = xs$$118;\n continue takeSplitAux;\n } else {\n if (error) {\n throw new Error(\"The input sequence has an insufficient number of elements.\");\n } else {\n return [reverse(acc$$25), xs$$117];\n }\n }\n\n break;\n }\n}\nexport function take(i$$22, xs$$119) {\n var i$$23;\n\n if (i$$23 = i$$22 | 0, i$$23 < 0) {\n const i$$24 = i$$22 | 0;\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$180, i$$25, xs$$120;\n\n if (i$$22 === 0) {\n $target$$180 = 0;\n } else if (i$$22 === 1) {\n if (xs$$119.tail != null) {\n $target$$180 = 1;\n } else {\n $target$$180 = 2;\n i$$25 = i$$22;\n xs$$120 = xs$$119;\n }\n } else {\n $target$$180 = 2;\n i$$25 = i$$22;\n xs$$120 = xs$$119;\n }\n\n switch ($target$$180) {\n case 0:\n {\n return new List();\n }\n\n case 1:\n {\n const x$$62 = xs$$119.head;\n return new List(x$$62, new List());\n }\n\n case 2:\n {\n return takeSplitAux(true, i$$25, new List(), xs$$120)[0];\n }\n }\n }\n}\nexport function takeWhile(predicate$$1, xs$$121) {\n if (xs$$121.tail != null) {\n if (xs$$121.tail.tail == null) {\n const nil = xs$$121.tail;\n const x$$63 = xs$$121.head;\n\n if (predicate$$1(x$$63)) {\n return xs$$121;\n } else {\n return nil;\n }\n } else {\n const x$$64 = xs$$121.head;\n const xs$$122 = xs$$121.tail;\n\n if (!predicate$$1(x$$64)) {\n return new List();\n } else {\n return new List(x$$64, takeWhile(predicate$$1, xs$$122));\n }\n }\n } else {\n return xs$$121;\n }\n}\nexport function truncate(i$$26, xs$$123) {\n var i$$27;\n\n if (i$$27 = i$$26 | 0, i$$27 < 0) {\n const i$$28 = i$$26 | 0;\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$183, i$$29, xs$$124;\n\n if (i$$26 === 0) {\n $target$$183 = 0;\n } else if (i$$26 === 1) {\n if (xs$$123.tail != null) {\n $target$$183 = 1;\n } else {\n $target$$183 = 2;\n i$$29 = i$$26;\n xs$$124 = xs$$123;\n }\n } else {\n $target$$183 = 2;\n i$$29 = i$$26;\n xs$$124 = xs$$123;\n }\n\n switch ($target$$183) {\n case 0:\n {\n return new List();\n }\n\n case 1:\n {\n const x$$65 = xs$$123.head;\n return new List(x$$65, new List());\n }\n\n case 2:\n {\n return takeSplitAux(false, i$$29, new List(), xs$$124)[0];\n }\n }\n }\n}\nexport function splitAt(i$$30, xs$$125) {\n var i$$31;\n\n if (i$$31 = i$$30 | 0, i$$31 < 0) {\n const i$$32 = i$$30 | 0;\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$184, i$$33, xs$$127;\n\n if (i$$30 === 0) {\n $target$$184 = 0;\n } else if (i$$30 === 1) {\n if (xs$$125.tail != null) {\n $target$$184 = 1;\n } else {\n $target$$184 = 2;\n i$$33 = i$$30;\n xs$$127 = xs$$125;\n }\n } else {\n $target$$184 = 2;\n i$$33 = i$$30;\n xs$$127 = xs$$125;\n }\n\n switch ($target$$184) {\n case 0:\n {\n return [new List(), xs$$125];\n }\n\n case 1:\n {\n const xs$$126 = xs$$125.tail;\n const x$$66 = xs$$125.head;\n return [new List(x$$66, new List()), xs$$126];\n }\n\n case 2:\n {\n return takeSplitAux(true, i$$33, new List(), xs$$127);\n }\n }\n }\n}\nexport function outOfRange() {\n throw new Error(\"Index out of range\");\n}\nexport function slice(lower, upper, xs$$128) {\n const lower$$1 = defaultArg(lower, 0) | 0;\n const hasUpper = upper != null;\n\n if (lower$$1 < 0) {\n return outOfRange();\n } else if (hasUpper ? upper < lower$$1 : false) {\n return new List();\n } else {\n let lastIndex = -1 | 0;\n const res$$2 = foldIndexed(function f$$56(i$$34, acc$$26, x$$67) {\n lastIndex = i$$34;\n\n if (lower$$1 <= i$$34 ? !hasUpper ? true : i$$34 <= upper : false) {\n return new List(x$$67, acc$$26);\n } else {\n return acc$$26;\n }\n }, new List(), xs$$128);\n\n if (lower$$1 > lastIndex + 1 ? true : hasUpper ? upper > lastIndex : false) {\n outOfRange();\n }\n\n return reverse(res$$2);\n }\n}\nexport function distinctBy(projection$$4, xs$$130, eq$$2) {\n const hashSet = createMutable([], eq$$2);\n return filter(function f$$57($arg$$1) {\n return addToSet(projection$$4($arg$$1), hashSet);\n }, xs$$130);\n}\nexport function distinct(xs$$132, eq$$3) {\n return distinctBy(function (x$$68) {\n return x$$68;\n }, xs$$132, eq$$3);\n}\nexport function exactlyOne(xs$$133) {\n if (xs$$133.tail != null) {\n if (xs$$133.tail.tail != null) {\n const x1 = xs$$133.head;\n const x2 = xs$$133.tail.head;\n const xs$$134 = xs$$133.tail.tail;\n throw new Error(\"Input list too long\\\\nParameter name: list\");\n } else {\n const x$$69 = xs$$133.head;\n return x$$69;\n }\n } else {\n throw new Error(\"The input sequence was empty\\\\nParameter name: list\");\n }\n}\nexport function groupBy(projection$$5, xs$$135, eq$$4) {\n const dict = createMutable$$1([], eq$$4);\n let keys = new List();\n iterate(function f$$58(v$$2) {\n const key = projection$$5(v$$2);\n const matchValue$$16 = tryGetValue(dict, key, null);\n\n if (matchValue$$16[0]) {\n const prev = matchValue$$16[1];\n dict.set(key, new List(v$$2, prev));\n } else {\n addToDict(dict, key, new List(v$$2, new List()));\n keys = new List(key, keys);\n }\n }, xs$$135);\n let result$$1 = new List();\n iterate(function f$$59(key$$1) {\n result$$1 = new List([key$$1, reverse(getItemFromDict(dict, key$$1))], result$$1);\n }, keys);\n return result$$1;\n}\nexport function countBy(projection$$6, xs$$138, eq$$5) {\n const dict$$1 = createMutable$$1([], eq$$5);\n let keys$$1 = new List();\n iterate(function f$$60(v$$3) {\n const key$$2 = projection$$6(v$$3);\n const matchValue$$17 = tryGetValue(dict$$1, key$$2, 0);\n\n if (matchValue$$17[0]) {\n const prev$$1 = matchValue$$17[1] | 0;\n dict$$1.set(key$$2, prev$$1 + 1);\n } else {\n dict$$1.set(key$$2, 1);\n keys$$1 = new List(key$$2, keys$$1);\n }\n }, xs$$138);\n let result$$2 = new List();\n iterate(function f$$61(key$$3) {\n result$$2 = new List([key$$3, getItemFromDict(dict$$1, key$$3)], result$$2);\n }, keys$$1);\n return result$$2;\n}\nexport function where(predicate$$2, xs$$141) {\n return filter(predicate$$2, xs$$141);\n}\nexport function pairwise(xs$$142) {\n const inner = function inner(xs$$143, acc$$27, x1$$1) {\n inner: while (true) {\n if (xs$$143.tail != null) {\n const xs$$144 = xs$$143.tail;\n const x2$$1 = xs$$143.head;\n let copyOfStruct = acc$$27;\n copyOfStruct.push([x1$$1, x2$$1]);\n const $acc$$27$$196 = acc$$27;\n xs$$143 = xs$$144;\n acc$$27 = $acc$$27$$196;\n x1$$1 = x2$$1;\n continue inner;\n } else {\n return ofArray(acc$$27);\n }\n\n break;\n }\n };\n\n var $target$$197, x1$$2, x2$$2, xs$$145;\n\n if (xs$$142.tail != null) {\n if (xs$$142.tail.tail != null) {\n $target$$197 = 1;\n x1$$2 = xs$$142.head;\n x2$$2 = xs$$142.tail.head;\n xs$$145 = xs$$142.tail.tail;\n } else {\n $target$$197 = 0;\n }\n } else {\n $target$$197 = 0;\n }\n\n switch ($target$$197) {\n case 0:\n {\n return new List();\n }\n\n case 1:\n {\n const acc$$28 = [];\n acc$$28.push([x1$$2, x2$$2]);\n return function (arg00$$2) {\n const clo1 = partialApply(2, inner, [arg00$$2]);\n return function (arg10) {\n const clo2 = clo1(arg10);\n return function (arg20) {\n return clo2(arg20);\n };\n };\n }(xs$$145)(acc$$28)(x2$$2);\n }\n }\n}\nexport function windowed(windowSize, source) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n }\n\n let res$$3 = new List();\n\n for (let i$$35 = length(source); i$$35 >= windowSize; i$$35--) {\n res$$3 = new List(slice(i$$35 - windowSize, i$$35 - 1, source), res$$3);\n }\n\n return res$$3;\n}","export class CancellationToken {\n constructor(cancelled = false) {\n this._id = 0;\n this._cancelled = cancelled;\n this._listeners = new Map();\n }\n get isCancelled() {\n return this._cancelled;\n }\n cancel() {\n if (!this._cancelled) {\n this._cancelled = true;\n for (const [, listener] of this._listeners) {\n listener();\n }\n }\n }\n addListener(f) {\n const id = this._id;\n this._listeners.set(this._id++, f);\n return id;\n }\n removeListener(id) {\n return this._listeners.delete(id);\n }\n register(f, state) {\n const $ = this;\n const id = this.addListener(state == null ? f : () => f(state));\n return { Dispose() { $.removeListener(id); } };\n }\n}\nexport class OperationCanceledError extends Error {\n constructor() {\n super(\"The operation was canceled\");\n Object.setPrototypeOf(this, OperationCanceledError.prototype);\n }\n}\nexport class Trampoline {\n static get maxTrampolineCallCount() {\n return 2000;\n }\n constructor() {\n this.callCount = 0;\n }\n incrementAndCheck() {\n return this.callCount++ > Trampoline.maxTrampolineCallCount;\n }\n hijack(f) {\n this.callCount = 0;\n setTimeout(f, 0);\n }\n}\nexport function protectedCont(f) {\n return (ctx) => {\n if (ctx.cancelToken.isCancelled) {\n ctx.onCancel(new OperationCanceledError());\n }\n else if (ctx.trampoline.incrementAndCheck()) {\n ctx.trampoline.hijack(() => {\n try {\n f(ctx);\n }\n catch (err) {\n ctx.onError(err);\n }\n });\n }\n else {\n try {\n f(ctx);\n }\n catch (err) {\n ctx.onError(err);\n }\n }\n };\n}\nexport function protectedBind(computation, binder) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: (x) => {\n try {\n binder(x)(ctx);\n }\n catch (ex) {\n ctx.onError(ex);\n }\n },\n onError: ctx.onError,\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n}\nexport function protectedReturn(value) {\n return protectedCont((ctx) => ctx.onSuccess(value));\n}\nexport class AsyncBuilder {\n Bind(computation, binder) {\n return protectedBind(computation, binder);\n }\n Combine(computation1, computation2) {\n return this.Bind(computation1, () => computation2);\n }\n Delay(generator) {\n return protectedCont((ctx) => generator()(ctx));\n }\n For(sequence, body) {\n const iter = sequence[Symbol.iterator]();\n let cur = iter.next();\n return this.While(() => !cur.done, this.Delay(() => {\n const res = body(cur.value);\n cur = iter.next();\n return res;\n }));\n }\n Return(value) {\n return protectedReturn(value);\n }\n ReturnFrom(computation) {\n return computation;\n }\n TryFinally(computation, compensation) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: (x) => {\n compensation();\n ctx.onSuccess(x);\n },\n onError: (x) => {\n compensation();\n ctx.onError(x);\n },\n onCancel: (x) => {\n compensation();\n ctx.onCancel(x);\n },\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n }\n TryWith(computation, catchHandler) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: ctx.onSuccess,\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n onError: (ex) => {\n try {\n catchHandler(ex)(ctx);\n }\n catch (ex2) {\n ctx.onError(ex2);\n }\n },\n });\n });\n }\n Using(resource, binder) {\n return this.TryFinally(binder(resource), () => resource.Dispose());\n }\n While(guard, computation) {\n if (guard()) {\n return this.Bind(computation, () => this.While(guard, computation));\n }\n else {\n return this.Return(void 0);\n }\n }\n Zero() {\n return protectedCont((ctx) => ctx.onSuccess(void 0));\n }\n}\nexport const singleton = new AsyncBuilder();\n//# sourceMappingURL=AsyncBuilder.js.map","import { OperationCanceledError, Trampoline } from \"./AsyncBuilder\";\nimport { CancellationToken } from \"./AsyncBuilder\";\nimport { protectedCont } from \"./AsyncBuilder\";\nimport { protectedBind } from \"./AsyncBuilder\";\nimport { protectedReturn } from \"./AsyncBuilder\";\nimport { choice1, choice2 } from \"./Option\";\nimport { map } from \"./Seq\";\n// Implemented just for type references\nexport default class Async {\n}\nfunction emptyContinuation(x) {\n // NOP\n}\n// MakeAsync: body:(AsyncActivation<'T> -> AsyncReturn) -> Async<'T>\nexport function makeAsync(body) {\n return body;\n}\n// Invoke: computation: Async<'T> -> ctxt:AsyncActivation<'T> -> AsyncReturn\nexport function invoke(computation, ctx) {\n return computation(ctx);\n}\n// CallThenInvoke: ctxt:AsyncActivation<'T> -> result1:'U -> part2:('U -> Async<'T>) -> AsyncReturn\nexport function callThenInvoke(ctx, result1, part2) {\n return part2(result1)(ctx);\n}\n// Bind: ctxt:AsyncActivation<'T> -> part1:Async<'U> -> part2:('U -> Async<'T>) -> AsyncReturn\nexport function bind(ctx, part1, part2) {\n return protectedBind(part1, part2)(ctx);\n}\nexport function createCancellationToken(arg) {\n const token = new CancellationToken(typeof arg === \"boolean\" ? arg : false);\n if (typeof arg === \"number\") {\n setTimeout(() => { token.cancel(); }, arg);\n }\n return token;\n}\nexport function cancel(token) {\n token.cancel();\n}\nexport function cancelAfter(token, ms) {\n setTimeout(() => { token.cancel(); }, ms);\n}\nexport function isCancellationRequested(token) {\n return token != null && token.isCancelled;\n}\nexport function startChild(computation) {\n const promise = startAsPromise(computation);\n // JS Promises are hot, computation has already started\n // but we delay returning the result\n return protectedCont((ctx) => protectedReturn(awaitPromise(promise))(ctx));\n}\nexport function awaitPromise(p) {\n return fromContinuations((conts) => p.then(conts[0]).catch((err) => (err instanceof OperationCanceledError\n ? conts[2] : conts[1])(err)));\n}\nexport function cancellationToken() {\n return protectedCont((ctx) => ctx.onSuccess(ctx.cancelToken));\n}\nexport const defaultCancellationToken = new CancellationToken();\nexport function catchAsync(work) {\n return protectedCont((ctx) => {\n work({\n onSuccess: (x) => ctx.onSuccess(choice1(x)),\n onError: (ex) => ctx.onSuccess(choice2(ex)),\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n}\nexport function fromContinuations(f) {\n return protectedCont((ctx) => f([ctx.onSuccess, ctx.onError, ctx.onCancel]));\n}\nexport function ignore(computation) {\n return protectedBind(computation, (x) => protectedReturn(void 0));\n}\nexport function parallel(computations) {\n return awaitPromise(Promise.all(map((w) => startAsPromise(w), computations)));\n}\nexport function sleep(millisecondsDueTime) {\n return protectedCont((ctx) => {\n let tokenId;\n const timeoutId = setTimeout(() => {\n ctx.cancelToken.removeListener(tokenId);\n ctx.onSuccess(void 0);\n }, millisecondsDueTime);\n tokenId = ctx.cancelToken.addListener(() => {\n clearTimeout(timeoutId);\n ctx.onCancel(new OperationCanceledError());\n });\n });\n}\nexport function start(computation, cancellationToken) {\n return startWithContinuations(computation, cancellationToken);\n}\nexport function startImmediate(computation, cancellationToken) {\n return start(computation, cancellationToken);\n}\nexport function startWithContinuations(computation, continuation, exceptionContinuation, cancellationContinuation, cancelToken) {\n if (typeof continuation !== \"function\") {\n cancelToken = continuation;\n continuation = null;\n }\n const trampoline = new Trampoline();\n computation({\n onSuccess: continuation ? continuation : emptyContinuation,\n onError: exceptionContinuation ? exceptionContinuation : emptyContinuation,\n onCancel: cancellationContinuation ? cancellationContinuation : emptyContinuation,\n cancelToken: cancelToken ? cancelToken : defaultCancellationToken,\n trampoline,\n });\n}\nexport function startAsPromise(computation, cancellationToken) {\n return new Promise((resolve, reject) => startWithContinuations(computation, resolve, reject, reject, cancellationToken ? cancellationToken : defaultCancellationToken));\n}\n//# sourceMappingURL=Async.js.map","module Views\r\n\r\nopen Fable.React\r\nopen Fable.React.Props\r\nopen Elmish\r\nopen System\r\nopen EventMessages\r\nopen Fulma\r\nopen Types\r\n\r\nlet tableFor speakersIntroers =\r\n table [Class \"table is-fullwidth\"] [\r\n thead [] [\r\n tr [] [\r\n td [] [\r\n str \"Speaker\"\r\n ]\r\n td [] [\r\n str \"Introducer\"\r\n ]\r\n ]\r\n ]\r\n tbody []\r\n (\r\n speakersIntroers.Speakers\r\n |> Seq.map2 (fun introer speaker -> tr [][\r\n td [] [ str speaker.Name ]\r\n td [] [ str introer.Name ]]) speakersIntroers.Introducers\r\n )\r\n ]\r\n\r\nlet shufflerFooter =\r\n footer [Class \"footer\"] [ str \"©\"\r\n str (DateTime.Now.Year |> string)\r\n str \"| A \"; a [ Href \"https://raph.ws/\"; Target \"_blank\"] [str \"Raphael Haddad\"]; str \" project |\"\r\n a [Href \"https://github.com/RaphHaddad/speaker-shuffler\"; Target \"_blank\"] [str \"Source\"] ]\r\n\r\nlet description =\r\n div [][\r\n h1 [Class \"subtitle is-1\"] [ str \"SpeekUp shuffler\" ]\r\n img [Alt \"SpeekUp logo - SpeekUp is an internal Telstra Purple program that helps people get better at public speaking\"\r\n Class \"speekup-logo\"\r\n Src \"SpeekUpLogo.png\"\r\n ]\r\n p [] [str \"This is a speaker shuffling application designed for speaking courses. Specifically,\r\nthe speaking course called 'SpeekUp'.\"]\r\n p [] [\r\n str \"SpeekUp is a public speaking course created by \"\r\n a [Href \"https://twitter.com/David_Cook\";\r\n Target \"_blank\"] [\r\n str \"David Cook. \"\r\n ]\r\n str \"It is run internally at \";\r\n a [Href \"https://www.telstra.com.au/business-enterprise/services/telstra-purple\"\r\n Target \"_blank\"] [\r\n str \"Telstra Purple \"\r\n ]\r\n str \"with the purpose of helping people become better public speakers.\"\r\n ]\r\n br []\r\n p [] [str \"Shuffling Rules:\"]\r\n ul [] [\r\n li [] [str \"Speakers can't introduce themselves\"]\r\n li [] [str \"Speakers can't introduce after speaking\"]\r\n ]\r\n ]\r\n\r\nlet initialView (model:SpeakersIntroducers) (dispatch:Dispatch) =\r\n div [] [\r\n description\r\n form [] [\r\n textarea [\r\n Class \"textarea\"\r\n Placeholder \"Enter speakers seperated by a new line\"\r\n OnChange (fun ev -> ev.Value\r\n |> AddSpeakers\r\n |> dispatch)\r\n ] []\r\n button [\r\n Class \"button is-primary\"\r\n OnClick (fun e -> dispatch ShuffleSpeakers\r\n e.preventDefault())\r\n ] [str \"Shuffle Speakers\"]\r\n ]\r\n (match model.ErrorMessage, model.Introducers |> Seq.length with\r\n | Some message, _ -> div [Class \"has-text-danger\"] [str message]\r\n | _, 0 -> div [] []\r\n | None, x when x > 0 -> tableFor model)\r\n shufflerFooter\r\n ]","module Shuffle\r\n\r\nopen Types\r\nopen System\r\n\r\nlet shuffle speakers =\r\n let validate speakers =\r\n let strippedSpeakers = speakers\r\n |> Seq.filter (fun s -> s.Name\r\n |> String.IsNullOrWhiteSpace\r\n |> not)\r\n\r\n let lengthDistinct = strippedSpeakers\r\n |> Seq.distinctBy (fun s -> s.Name.ToUpperInvariant())\r\n |> Seq.length\r\n let length = strippedSpeakers\r\n |> Seq.length\r\n\r\n let noDuplicates = length = lengthDistinct\r\n\r\n match noDuplicates, lengthDistinct with\r\n | false, 1 -> Some \"More than one speaker required with different names\"\r\n | true, 1 -> Some \"More than one speaker required\"\r\n | false, _ -> Some \"Speakers must have different names\"\r\n | _,_ -> None\r\n\r\n let randomOrder usedIndexes speaker =\r\n let randomNumber fromThisList =\r\n let rand = System.Random()\r\n\r\n let randomIndex = rand.Next(0, fromThisList |> Seq.length)\r\n\r\n fromThisList\r\n |> Seq.item (randomIndex)\r\n\r\n let lastIndex = (speakers |> Seq.length) - 1\r\n let order = [0..lastIndex]\r\n |> Seq.filter (fun i -> usedIndexes\r\n |> Seq.contains i\r\n |> not)\r\n |> randomNumber\r\n\r\n { speaker with Order = order}, order::usedIndexes\r\n\r\n let rec shuffleIntoers shuffledSpeakers =\r\n let shuffledIntoers = shuffledSpeakers\r\n |> Seq.mapFold randomOrder []\r\n |> fst\r\n |> Seq.sortBy (fun i -> i.Order)\r\n\r\n let isAnySpeakerIntroingThemselves =\r\n shuffledIntoers\r\n |> Seq.exists2 (fun speaker introer ->\r\n (introer.Name = speaker.Name) &&\r\n introer.Order = speaker.Order) shuffledSpeakers\r\n\r\n let isSpeakerIntoringAfterSpeach =\r\n let isIntroing speaker (introer: option) =\r\n match introer with\r\n | Some introer -> speaker.Name = introer.Name\r\n | None -> false\r\n\r\n let length = shuffledIntoers |> Seq.length\r\n match length with\r\n | l when l <= 2 -> false\r\n | _ -> shuffledIntoers\r\n |> Seq.mapi2 (fun i speaker _ ->\r\n isIntroing speaker (shuffledIntoers |> Seq.tryItem(i + 1))) shuffledSpeakers\r\n |> Seq.exists (fun x -> x)\r\n\r\n match isAnySpeakerIntroingThemselves, isSpeakerIntoringAfterSpeach with\r\n | false, false -> shuffledIntoers\r\n | _ -> shuffleIntoers shuffledSpeakers\r\n\r\n let shuffle speakers =\r\n speakers\r\n |> Seq.filter (fun s -> s.Name\r\n |> String.IsNullOrWhiteSpace\r\n |> not)\r\n |> Seq.mapFold randomOrder []\r\n |> fst\r\n |> Seq.sortBy (fun s -> s.Order)\r\n\r\n match (validate speakers) with\r\n | Some error -> Error error\r\n | None ->\r\n let shuffledSpeakers = shuffle speakers\r\n let introducers = shuffleIntoers shuffledSpeakers\r\n\r\n Shuffled ({Speakers = shuffledSpeakers\r\n Introducers = introducers\r\n ErrorMessage = None\r\n })","namespace Elmish\nopen System\n\n[]\ntype internal RingState<'item> =\n | Writable of wx:'item array * ix:int\n | ReadWritable of rw:'item array * wix:int * rix:int\n\ntype internal RingBuffer<'item>(size) =\n let doubleSize ix (items: 'item array) =\n seq { yield! items |> Seq.skip ix\n yield! items |> Seq.take ix\n for _ in 0..items.Length do\n yield Unchecked.defaultof<'item> }\n |> Array.ofSeq\n\n let mutable state : 'item RingState =\n Writable (Array.zeroCreate (max size 10), 0)\n\n member __.Pop() =\n match state with\n | ReadWritable (items, wix, rix) ->\n let rix' = (rix + 1) % items.Length\n match rix' = wix with\n | true -> \n state <- Writable(items, wix)\n | _ ->\n state <- ReadWritable(items, wix, rix')\n Some items.[rix]\n | _ ->\n None\n\n member __.Push (item:'item) =\n match state with\n | Writable (items, ix) ->\n items.[ix] <- item\n let wix = (ix + 1) % items.Length\n state <- ReadWritable(items, wix, ix)\n | ReadWritable (items, wix, rix) ->\n items.[wix] <- item\n let wix' = (wix + 1) % items.Length\n match wix' = rix with\n | true -> \n state <- ReadWritable(items |> doubleSize rix, items.Length, 0)\n | _ -> \n state <- ReadWritable(items, wix', rix)","import { defaultArg, value as value$$12, some } from \"./Option.js\";\nimport { compare, addToDict, addToSet, getItemFromDict, tryGetValue, max as max$$1, comparePrimitives } from \"./Util.js\";\nimport { createMutable } from \"./Map.js\";\nimport { createMutable as createMutable$$1 } from \"./Set.js\";\nimport { List } from \"./Types.js\";\nimport { iterate as iterate$$1 } from \"./Seq.js\";\n\nfunction indexNotFound() {\n throw new Error(\"An index satisfying the predicate was not found in the collection.\");\n}\n\nexport function append(array1, array2, cons) {\n if (ArrayBuffer.isView(array1)) {\n const len1 = array1.length | 0;\n const len2 = array2.length | 0;\n const newArray = new cons(len1 + len2);\n\n for (let i = 0; i <= len1 - 1; i++) {\n newArray[i] = array1[i];\n }\n\n for (let i$$1 = 0; i$$1 <= len2 - 1; i$$1++) {\n newArray[i$$1 + len1] = array2[i$$1];\n }\n\n return newArray;\n } else {\n return array1.concat(array2);\n }\n}\nexport function filter(predicate, array) {\n return array.filter(predicate);\n}\nexport function fill(target, targetIndex, count, value) {\n target.fill(value, targetIndex, targetIndex + count);\n return target;\n}\nexport function getSubArray(array$$3, start$$1, count$$2) {\n return array$$3.slice(start$$1, start$$1 + count$$2);\n}\nexport function last(array$$5) {\n if (array$$5.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n\n return array$$5[array$$5.length - 1];\n}\nexport function tryLast(array$$6) {\n if (array$$6.length === 0) {\n return null;\n } else {\n return some(array$$6[array$$6.length - 1]);\n }\n}\nexport function mapIndexed(f, source, cons$$1) {\n if (ArrayBuffer.isView(source)) {\n const len = source.length | 0;\n const target$$1 = new cons$$1(len);\n\n for (let i$$2 = 0; i$$2 <= len - 1; i$$2++) {\n target$$1[i$$2] = f(i$$2, source[i$$2]);\n }\n\n return target$$1;\n } else {\n const mapping = function mapping(x, i$$3) {\n return f(i$$3, x);\n };\n\n return source.map(mapping);\n }\n}\nexport function map(f$$1, source$$1, cons$$2) {\n if (ArrayBuffer.isView(source$$1)) {\n const len$$1 = source$$1.length | 0;\n const target$$2 = new cons$$2(len$$1);\n\n for (let i$$4 = 0; i$$4 <= len$$1 - 1; i$$4++) {\n target$$2[i$$4] = f$$1(source$$1[i$$4]);\n }\n\n return target$$2;\n } else {\n const mapping$$1 = function mapping$$1(x$$1) {\n return f$$1(x$$1);\n };\n\n return source$$1.map(mapping$$1);\n }\n}\nexport function mapIndexed2(f$$2, source1, source2, cons$$3) {\n if (source1.length !== source2.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result = new cons$$3(source1.length);\n\n for (let i$$5 = 0; i$$5 <= source1.length - 1; i$$5++) {\n result[i$$5] = f$$2(i$$5, source1[i$$5], source2[i$$5]);\n }\n\n return result;\n}\nexport function map2(f$$3, source1$$1, source2$$1, cons$$4) {\n if (source1$$1.length !== source2$$1.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$1 = new cons$$4(source1$$1.length);\n\n for (let i$$6 = 0; i$$6 <= source1$$1.length - 1; i$$6++) {\n result$$1[i$$6] = f$$3(source1$$1[i$$6], source2$$1[i$$6]);\n }\n\n return result$$1;\n}\nexport function mapIndexed3(f$$4, source1$$2, source2$$2, source3, cons$$5) {\n if (source1$$2.length !== source2$$2.length ? true : source2$$2.length !== source3.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$2 = new cons$$5(source1$$2.length);\n\n for (let i$$7 = 0; i$$7 <= source1$$2.length - 1; i$$7++) {\n result$$2[i$$7] = f$$4(i$$7, source1$$2[i$$7], source2$$2[i$$7], source3[i$$7]);\n }\n\n return result$$2;\n}\nexport function map3(f$$5, source1$$3, source2$$3, source3$$1, cons$$6) {\n if (source1$$3.length !== source2$$3.length ? true : source2$$3.length !== source3$$1.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$3 = new cons$$6(source1$$3.length);\n\n for (let i$$8 = 0; i$$8 <= source1$$3.length - 1; i$$8++) {\n result$$3[i$$8] = f$$5(source1$$3[i$$8], source2$$3[i$$8], source3$$1[i$$8]);\n }\n\n return result$$3;\n}\nexport function mapFold(mapping$$2, state, array$$9, cons$$7) {\n const matchValue = array$$9.length | 0;\n\n if (matchValue === 0) {\n return [[], state];\n } else {\n const len$$2 = matchValue | 0;\n let acc = state;\n const res = new cons$$7(len$$2);\n\n for (let i$$9 = 0; i$$9 <= array$$9.length - 1; i$$9++) {\n const patternInput = mapping$$2(acc, array$$9[i$$9]);\n const s$0027 = patternInput[1];\n const h$0027 = patternInput[0];\n res[i$$9] = h$0027;\n acc = s$0027;\n }\n\n return [res, acc];\n }\n}\nexport function mapFoldBack(mapping$$3, array$$10, state$$1, cons$$8) {\n const matchValue$$1 = array$$10.length | 0;\n\n if (matchValue$$1 === 0) {\n return [[], state$$1];\n } else {\n const len$$3 = matchValue$$1 | 0;\n let acc$$1 = state$$1;\n const res$$1 = new cons$$8(len$$3);\n\n for (let i$$10 = array$$10.length - 1; i$$10 >= 0; i$$10--) {\n const patternInput$$1 = mapping$$3(array$$10[i$$10], acc$$1);\n const s$0027$$1 = patternInput$$1[1];\n const h$0027$$1 = patternInput$$1[0];\n res$$1[i$$10] = h$0027$$1;\n acc$$1 = s$0027$$1;\n }\n\n return [res$$1, acc$$1];\n }\n}\nexport function indexed(source$$2) {\n const len$$4 = source$$2.length | 0;\n const target$$3 = new Array(len$$4);\n\n for (let i$$11 = 0; i$$11 <= len$$4 - 1; i$$11++) {\n target$$3[i$$11] = [i$$11, source$$2[i$$11]];\n }\n\n return target$$3;\n}\nexport function truncate(count$$4, array$$11) {\n const count$$5 = max$$1(comparePrimitives, 0, count$$4) | 0;\n return array$$11.slice(0, 0 + count$$5);\n}\nexport function concat(arrays, cons$$9) {\n const arrays$$1 = Array.from(arrays);\n const matchValue$$2 = arrays$$1.length | 0;\n\n switch (matchValue$$2) {\n case 0:\n {\n return new cons$$9(0);\n }\n\n case 1:\n {\n return arrays$$1[0];\n }\n\n default:\n {\n if (ArrayBuffer.isView(arrays$$1[0])) {\n let totalIdx = 0;\n let totalLength = 0;\n\n for (let idx = 0; idx <= arrays$$1.length - 1; idx++) {\n const arr$$4 = arrays$$1[idx];\n totalLength = totalLength + arr$$4.length;\n }\n\n const result$$4 = new cons$$9(totalLength);\n\n for (let idx$$1 = 0; idx$$1 <= arrays$$1.length - 1; idx$$1++) {\n const arr$$5 = arrays$$1[idx$$1];\n\n for (let j = 0; j <= arr$$5.length - 1; j++) {\n result$$4[totalIdx] = arr$$5[j];\n totalIdx = totalIdx + 1;\n }\n }\n\n return result$$4;\n } else {\n return arrays$$1[0].concat(...arrays$$1.slice(1));\n }\n }\n }\n}\nexport function collect(mapping$$4, array$$14, cons$$10) {\n const mapped = map(mapping$$4, array$$14, Array);\n return concat(mapped, cons$$10);\n}\nexport function countBy(projection, array$$15, eq) {\n const dict = createMutable([], eq);\n const keys = [];\n\n for (let idx$$2 = 0; idx$$2 <= array$$15.length - 1; idx$$2++) {\n const value$$2 = array$$15[idx$$2];\n const key = projection(value$$2);\n const matchValue$$3 = tryGetValue(dict, key, 0);\n\n if (matchValue$$3[0]) {\n const prev = matchValue$$3[1] | 0;\n dict.set(key, prev + 1);\n } else {\n dict.set(key, 1);\n keys.push(key), null;\n }\n }\n\n const result$$5 = map(function (key$$1) {\n return [key$$1, getItemFromDict(dict, key$$1)];\n }, keys, Array);\n return result$$5;\n}\nexport function distinctBy(projection$$1, array$$17, eq$$1) {\n const hashSet = createMutable$$1([], eq$$1);\n return filter(function predicate$$2($arg$$3) {\n return addToSet(projection$$1($arg$$3), hashSet);\n }, array$$17);\n}\nexport function distinct(array$$19, eq$$2) {\n return distinctBy(function (x$$2) {\n return x$$2;\n }, array$$19, eq$$2);\n}\nexport function where(predicate$$3, array$$20) {\n return array$$20.filter(predicate$$3);\n}\nexport function contains(value$$4, array$$22, eq$$3) {\n const loop = function loop(i$$12) {\n loop: while (true) {\n if (i$$12 >= array$$22.length) {\n return false;\n } else if (eq$$3.Equals(value$$4, array$$22[i$$12])) {\n return true;\n } else {\n const $i$$12$$51 = i$$12;\n i$$12 = $i$$12$$51 + 1;\n continue loop;\n }\n\n break;\n }\n };\n\n return loop(0);\n}\nexport function except(itemsToExclude, array$$23, eq$$4) {\n if (array$$23.length === 0) {\n return array$$23;\n } else {\n const cached = createMutable$$1(itemsToExclude, eq$$4);\n return array$$23.filter(function predicate$$5(arg00$$1) {\n return addToSet(arg00$$1, cached);\n });\n }\n}\nexport function groupBy(projection$$2, array$$26, cons$$11, eq$$5) {\n const dict$$1 = createMutable([], eq$$5);\n const keys$$1 = [];\n\n for (let idx$$3 = 0; idx$$3 <= array$$26.length - 1; idx$$3++) {\n const v = array$$26[idx$$3];\n const key$$2 = projection$$2(v);\n const matchValue$$4 = tryGetValue(dict$$1, key$$2, null);\n\n if (matchValue$$4[0]) {\n const prev$$1 = matchValue$$4[1];\n dict$$1.set(key$$2, new List(v, prev$$1));\n } else {\n addToDict(dict$$1, key$$2, new List(v, new List()));\n keys$$1.push(key$$2), null;\n }\n }\n\n const result$$6 = map(function (key$$3) {\n return [key$$3, cons$$11.from(getItemFromDict(dict$$1, key$$3)).reverse()];\n }, keys$$1, Array);\n return result$$6;\n}\nexport function empty(cons$$12) {\n return new cons$$12(0);\n}\nexport function singleton(value$$6, cons$$14) {\n const ar = new cons$$14(1);\n ar[0] = value$$6;\n return ar;\n}\nexport function initialize(count$$8, initializer, cons$$15) {\n if (count$$8 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n\n const result$$7 = new cons$$15(count$$8);\n\n for (let i$$13 = 0; i$$13 <= count$$8 - 1; i$$13++) {\n result$$7[i$$13] = initializer(i$$13);\n }\n\n return result$$7;\n}\nexport function pairwise(array$$30) {\n if (array$$30.length < 2) {\n return [];\n } else {\n const count$$9 = array$$30.length - 1 | 0;\n const result$$8 = new Array(count$$9);\n\n for (let i$$14 = 0; i$$14 <= count$$9 - 1; i$$14++) {\n result$$8[i$$14] = [array$$30[i$$14], array$$30[i$$14 + 1]];\n }\n\n return result$$8;\n }\n}\nexport function replicate(count$$10, initial, cons$$16) {\n if (count$$10 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n\n const result$$9 = new cons$$16(count$$10);\n\n for (let i$$15 = 0; i$$15 <= result$$9.length - 1; i$$15++) {\n result$$9[i$$15] = initial;\n }\n\n return result$$9;\n}\nexport function copy(array$$31, cons$$17) {\n return array$$31.slice();\n}\nexport function reverse(array$$33, cons$$18) {\n return array$$33.slice().reverse();\n}\nexport function scan(folder, state$$2, array$$37, cons$$19) {\n const res$$2 = new cons$$19(array$$37.length + 1);\n res$$2[0] = state$$2;\n\n for (let i$$16 = 0; i$$16 <= array$$37.length - 1; i$$16++) {\n res$$2[i$$16 + 1] = folder(res$$2[i$$16], array$$37[i$$16]);\n }\n\n return res$$2;\n}\nexport function scanBack(folder$$1, array$$38, state$$3, cons$$20) {\n const res$$3 = new cons$$20(array$$38.length + 1);\n res$$3[array$$38.length] = state$$3;\n\n for (let i$$17 = array$$38.length - 1; i$$17 >= 0; i$$17--) {\n res$$3[i$$17] = folder$$1(array$$38[i$$17], res$$3[i$$17 + 1]);\n }\n\n return res$$3;\n}\nexport function skip(count$$11, array$$39, cons$$21) {\n if (count$$11 > array$$39.length) {\n throw new Error(\"count is greater than array length\\\\nParameter name: count\");\n }\n\n if (count$$11 === array$$39.length) {\n return new cons$$21(0);\n } else {\n const count$$12 = (count$$11 < 0 ? 0 : count$$11) | 0;\n return array$$39.slice(count$$12);\n }\n}\nexport function skipWhile(predicate$$7, array$$41, cons$$23) {\n let count$$14 = 0;\n\n while (count$$14 < array$$41.length ? predicate$$7(array$$41[count$$14]) : false) {\n count$$14 = count$$14 + 1;\n }\n\n if (count$$14 === array$$41.length) {\n return new cons$$23(0);\n } else {\n return array$$41.slice(count$$14);\n }\n}\nexport function take(count$$16, array$$43, cons$$25) {\n if (count$$16 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n\n if (count$$16 > array$$43.length) {\n throw new Error(\"count is greater than array length\\\\nParameter name: count\");\n }\n\n if (count$$16 === 0) {\n return new cons$$25(0);\n } else {\n return array$$43.slice(0, 0 + count$$16);\n }\n}\nexport function takeWhile(predicate$$8, array$$45, cons$$27) {\n let count$$18 = 0;\n\n while (count$$18 < array$$45.length ? predicate$$8(array$$45[count$$18]) : false) {\n count$$18 = count$$18 + 1;\n }\n\n if (count$$18 === 0) {\n return new cons$$27(0);\n } else {\n return array$$45.slice(0, 0 + count$$18);\n }\n}\nexport function addRangeInPlace(range, array$$47) {\n iterate$$1(function (x$$3) {\n array$$47.push(x$$3), null;\n }, range);\n}\nexport function removeInPlace(item$$4, array$$49) {\n const i$$18 = array$$49.indexOf(item$$4);\n\n if (i$$18 > -1) {\n array$$49.splice(i$$18, 1), null;\n return true;\n } else {\n return false;\n }\n}\nexport function removeAllInPlace(predicate$$9, array$$52) {\n const countRemoveAll = function countRemoveAll(count$$20) {\n const i$$19 = array$$52.findIndex(predicate$$9);\n\n if (i$$19 > -1) {\n array$$52.splice(i$$19, 1), null;\n return countRemoveAll(count$$20) + 1 | 0;\n } else {\n return count$$20 | 0;\n }\n };\n\n return countRemoveAll(0) | 0;\n}\nexport function copyTo(source$$3, sourceIndex, target$$4, targetIndex$$1, count$$21) {\n const diff = targetIndex$$1 - sourceIndex | 0;\n\n for (let i$$20 = sourceIndex; i$$20 <= sourceIndex + count$$21 - 1; i$$20++) {\n target$$4[i$$20 + diff] = source$$3[i$$20];\n }\n}\nexport function partition(f$$6, source$$4, cons$$29) {\n const len$$7 = source$$4.length | 0;\n const res1 = new cons$$29(len$$7);\n const res2 = new cons$$29(len$$7);\n let iTrue = 0;\n let iFalse = 0;\n\n for (let i$$21 = 0; i$$21 <= len$$7 - 1; i$$21++) {\n if (f$$6(source$$4[i$$21])) {\n res1[iTrue] = source$$4[i$$21];\n iTrue = iTrue + 1;\n } else {\n res2[iFalse] = source$$4[i$$21];\n iFalse = iFalse + 1;\n }\n }\n\n return [truncate(iTrue, res1), truncate(iFalse, res2)];\n}\nexport function find(predicate$$11, array$$57) {\n const matchValue$$5 = array$$57.find(predicate$$11);\n\n if (matchValue$$5 == null) {\n return indexNotFound();\n } else {\n const res$$4 = value$$12(matchValue$$5);\n return res$$4;\n }\n}\nexport function tryFind(predicate$$13, array$$59) {\n return array$$59.find(predicate$$13);\n}\nexport function findIndex(predicate$$15, array$$61) {\n var index;\n const matchValue$$6 = array$$61.findIndex(predicate$$15);\n\n if (index = matchValue$$6 | 0, index > -1) {\n const index$$1 = matchValue$$6 | 0;\n return index$$1 | 0;\n } else {\n return indexNotFound() | 0;\n }\n}\nexport function tryFindIndex(predicate$$17, array$$63) {\n var index$$2;\n const matchValue$$7 = array$$63.findIndex(predicate$$17);\n\n if (index$$2 = matchValue$$7 | 0, index$$2 > -1) {\n const index$$3 = matchValue$$7 | 0;\n return index$$3;\n } else {\n return null;\n }\n}\nexport function pick(chooser, array$$65) {\n const loop$$1 = function loop$$1(i$$22) {\n loop$$1: while (true) {\n if (i$$22 >= array$$65.length) {\n return indexNotFound();\n } else {\n const matchValue$$8 = chooser(array$$65[i$$22]);\n\n if (matchValue$$8 != null) {\n const res$$5 = value$$12(matchValue$$8);\n return res$$5;\n } else {\n const $i$$22$$88 = i$$22;\n i$$22 = $i$$22$$88 + 1;\n continue loop$$1;\n }\n }\n\n break;\n }\n };\n\n return loop$$1(0);\n}\nexport function tryPick(chooser$$1, array$$66) {\n const loop$$2 = function loop$$2(i$$23) {\n loop$$2: while (true) {\n if (i$$23 >= array$$66.length) {\n return null;\n } else {\n const matchValue$$9 = chooser$$1(array$$66[i$$23]);\n\n if (matchValue$$9 == null) {\n const $i$$23$$91 = i$$23;\n i$$23 = $i$$23$$91 + 1;\n continue loop$$2;\n } else {\n const res$$6 = matchValue$$9;\n return res$$6;\n }\n }\n\n break;\n }\n };\n\n return loop$$2(0);\n}\nexport function findBack(predicate$$19, array$$67) {\n const loop$$3 = function loop$$3(i$$24) {\n loop$$3: while (true) {\n if (i$$24 < 0) {\n return indexNotFound();\n } else if (predicate$$19(array$$67[i$$24])) {\n return array$$67[i$$24];\n } else {\n const $i$$24$$94 = i$$24;\n i$$24 = $i$$24$$94 - 1;\n continue loop$$3;\n }\n\n break;\n }\n };\n\n return loop$$3(array$$67.length - 1);\n}\nexport function tryFindBack(predicate$$20, array$$68) {\n const loop$$4 = function loop$$4(i$$25) {\n loop$$4: while (true) {\n if (i$$25 < 0) {\n return null;\n } else if (predicate$$20(array$$68[i$$25])) {\n return some(array$$68[i$$25]);\n } else {\n const $i$$25$$97 = i$$25;\n i$$25 = $i$$25$$97 - 1;\n continue loop$$4;\n }\n\n break;\n }\n };\n\n return loop$$4(array$$68.length - 1);\n}\nexport function findLastIndex(predicate$$21, array$$69) {\n const loop$$5 = function loop$$5(i$$26) {\n loop$$5: while (true) {\n if (i$$26 < 0) {\n return -1 | 0;\n } else if (predicate$$21(array$$69[i$$26])) {\n return i$$26 | 0;\n } else {\n const $i$$26$$100 = i$$26;\n i$$26 = $i$$26$$100 - 1;\n continue loop$$5;\n }\n\n break;\n }\n };\n\n return loop$$5(array$$69.length - 1) | 0;\n}\nexport function findIndexBack(predicate$$22, array$$70) {\n const loop$$6 = function loop$$6(i$$27) {\n loop$$6: while (true) {\n if (i$$27 < 0) {\n return indexNotFound() | 0;\n } else if (predicate$$22(array$$70[i$$27])) {\n return i$$27 | 0;\n } else {\n const $i$$27$$103 = i$$27;\n i$$27 = $i$$27$$103 - 1;\n continue loop$$6;\n }\n\n break;\n }\n };\n\n return loop$$6(array$$70.length - 1) | 0;\n}\nexport function tryFindIndexBack(predicate$$23, array$$71) {\n const loop$$7 = function loop$$7(i$$28) {\n loop$$7: while (true) {\n if (i$$28 < 0) {\n return null;\n } else if (predicate$$23(array$$71[i$$28])) {\n return i$$28;\n } else {\n const $i$$28$$106 = i$$28;\n i$$28 = $i$$28$$106 - 1;\n continue loop$$7;\n }\n\n break;\n }\n };\n\n return loop$$7(array$$71.length - 1);\n}\nexport function choose(chooser$$2, array$$72, cons$$30) {\n const f$$7 = function f$$7(x$$4) {\n return chooser$$2(x$$4) != null;\n };\n\n const g = function g(x$$5) {\n return value$$12(chooser$$2(x$$5));\n };\n\n const arr$$6 = array$$72.filter(f$$7);\n return map(g, arr$$6, cons$$30);\n}\nexport function foldIndexed(folder$$2, state$$4, array$$74) {\n const folder$$3 = function folder$$3(acc$$2, x$$6, i$$29) {\n return folder$$2(i$$29, acc$$2, x$$6);\n };\n\n return array$$74.reduce(folder$$3, state$$4);\n}\nexport function fold(folder$$4, state$$6, array$$76) {\n const folder$$5 = folder$$4;\n return array$$76.reduce(folder$$5, state$$6);\n}\nexport function iterate(action, array$$78) {\n for (let i$$30 = 0; i$$30 <= array$$78.length - 1; i$$30++) {\n action(array$$78[i$$30]);\n }\n}\nexport function iterateIndexed(action$$1, array$$79) {\n for (let i$$31 = 0; i$$31 <= array$$79.length - 1; i$$31++) {\n action$$1(i$$31, array$$79[i$$31]);\n }\n}\nexport function iterate2(action$$2, array1$$2, array2$$2) {\n if (array1$$2.length !== array2$$2.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n for (let i$$32 = 0; i$$32 <= array1$$2.length - 1; i$$32++) {\n action$$2(array1$$2[i$$32], array2$$2[i$$32]);\n }\n}\nexport function iterateIndexed2(action$$3, array1$$3, array2$$3) {\n if (array1$$3.length !== array2$$3.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n for (let i$$33 = 0; i$$33 <= array1$$3.length - 1; i$$33++) {\n action$$3(i$$33, array1$$3[i$$33], array2$$3[i$$33]);\n }\n}\nexport function isEmpty(array$$80) {\n return array$$80.length === 0;\n}\nexport function forAll(predicate$$25, array$$81) {\n return array$$81.every(predicate$$25);\n}\nexport function permute(f$$8, array$$83) {\n const size = array$$83.length | 0;\n const res$$7 = new array$$83.constructor(array$$83.length);\n const checkFlags = new Array(size);\n iterateIndexed(function (i$$34, x$$8) {\n const j$$1 = f$$8(i$$34) | 0;\n\n if (j$$1 < 0 ? true : j$$1 >= size) {\n throw new Error(\"Not a valid permutation\");\n }\n\n res$$7[j$$1] = x$$8;\n checkFlags[j$$1] = 1;\n }, array$$83);\n const isValid = forAll(function (y) {\n return 1 === y;\n }, checkFlags);\n\n if (!isValid) {\n throw new Error(\"Not a valid permutation\");\n }\n\n return res$$7;\n}\nexport function setSlice(target$$5, lower, upper, source$$5) {\n const lower$$1 = defaultArg(lower, 0) | 0;\n const upper$$1 = defaultArg(upper, 0) | 0;\n const length = (upper$$1 > 0 ? upper$$1 : target$$5.length - 1) - lower$$1 | 0;\n\n if (ArrayBuffer.isView(target$$5) ? source$$5.length <= length : false) {\n return target$$5.set(source$$5, lower$$1);\n } else {\n for (let i$$35 = 0; i$$35 <= length; i$$35++) {\n target$$5[i$$35 + lower$$1] = source$$5[i$$35];\n }\n }\n}\nexport function sortInPlaceBy(projection$$3, xs, comparer) {\n xs.sort(function (x$$10, y$$1) {\n return comparer.Compare(projection$$3(x$$10), projection$$3(y$$1));\n });\n}\nexport function sortInPlace(xs$$1, comparer$$1) {\n xs$$1.sort(function (x$$11, y$$2) {\n return comparer$$1.Compare(x$$11, y$$2);\n });\n}\n\nfunction copyArray(array$$84) {\n const result$$10 = new array$$84.constructor(array$$84.length);\n\n for (let i$$36 = 0; i$$36 <= array$$84.length - 1; i$$36++) {\n result$$10[i$$36] = array$$84[i$$36];\n }\n\n return result$$10;\n}\n\nexport function sort(xs$$2, comparer$$2) {\n const comparer$$3 = function comparer$$3(x$$12, y$$3) {\n return comparer$$2.Compare(x$$12, y$$3);\n };\n\n const xs$$3 = copyArray(xs$$2);\n xs$$3.sort(comparer$$3);\n return xs$$3;\n}\nexport function sortBy(projection$$4, xs$$4, comparer$$4) {\n const comparer$$5 = function comparer$$5(x$$13, y$$4) {\n return comparer$$4.Compare(projection$$4(x$$13), projection$$4(y$$4));\n };\n\n const xs$$5 = copyArray(xs$$4);\n xs$$5.sort(comparer$$5);\n return xs$$5;\n}\nexport function sortDescending(xs$$6, comparer$$6) {\n const comparer$$7 = function comparer$$7(x$$14, y$$5) {\n return comparer$$6.Compare(x$$14, y$$5) * -1;\n };\n\n const xs$$7 = copyArray(xs$$6);\n xs$$7.sort(comparer$$7);\n return xs$$7;\n}\nexport function sortByDescending(projection$$5, xs$$8, comparer$$8) {\n const comparer$$9 = function comparer$$9(x$$15, y$$6) {\n return comparer$$8.Compare(projection$$5(x$$15), projection$$5(y$$6)) * -1;\n };\n\n const xs$$9 = copyArray(xs$$8);\n xs$$9.sort(comparer$$9);\n return xs$$9;\n}\nexport function sortWith(comparer$$10, xs$$10) {\n const xs$$11 = copyArray(xs$$10);\n xs$$11.sort(comparer$$10);\n return xs$$11;\n}\nexport function unfold(generator, state$$8) {\n const res$$8 = [];\n\n const loop$$8 = function loop$$8(state$$9) {\n loop$$8: while (true) {\n const matchValue$$10 = generator(state$$9);\n\n if (matchValue$$10 != null) {\n const x$$16 = matchValue$$10[0];\n const s$0027$$2 = matchValue$$10[1];\n res$$8.push(x$$16), null;\n state$$9 = s$0027$$2;\n continue loop$$8;\n }\n\n break;\n }\n };\n\n loop$$8(state$$8);\n return res$$8;\n}\nexport function unzip(array$$86) {\n const len$$9 = array$$86.length | 0;\n const res1$$1 = new Array(len$$9);\n const res2$$1 = new Array(len$$9);\n iterateIndexed(function (i$$37, tupledArg) {\n const item1 = tupledArg[0];\n const item2 = tupledArg[1];\n res1$$1[i$$37] = item1;\n res2$$1[i$$37] = item2;\n }, array$$86);\n return [res1$$1, res2$$1];\n}\nexport function unzip3(array$$87) {\n const len$$12 = array$$87.length | 0;\n const res1$$2 = new Array(len$$12);\n const res2$$2 = new Array(len$$12);\n const res3 = new Array(len$$12);\n iterateIndexed(function (i$$38, tupledArg$$1) {\n const item1$$1 = tupledArg$$1[0];\n const item2$$1 = tupledArg$$1[1];\n const item3 = tupledArg$$1[2];\n res1$$2[i$$38] = item1$$1;\n res2$$2[i$$38] = item2$$1;\n res3[i$$38] = item3;\n }, array$$87);\n return [res1$$2, res2$$2, res3];\n}\nexport function zip(array1$$4, array2$$4) {\n if (array1$$4.length !== array2$$4.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$11 = new Array(array1$$4.length);\n\n for (let i$$39 = 0; i$$39 <= array1$$4.length - 1; i$$39++) {\n result$$11[i$$39] = [array1$$4[i$$39], array2$$4[i$$39]];\n }\n\n return result$$11;\n}\nexport function zip3(array1$$5, array2$$5, array3) {\n if (array1$$5.length !== array2$$5.length ? true : array2$$5.length !== array3.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$12 = new Array(array1$$5.length);\n\n for (let i$$40 = 0; i$$40 <= array1$$5.length - 1; i$$40++) {\n result$$12[i$$40] = [array1$$5[i$$40], array2$$5[i$$40], array3[i$$40]];\n }\n\n return result$$12;\n}\nexport function chunkBySize(chunkSize, array$$88) {\n if (chunkSize < 1) {\n throw new Error(\"The input must be positive.\\\\nParameter name: size\");\n }\n\n if (array$$88.length === 0) {\n return [[]];\n } else {\n const result$$13 = [];\n\n for (let x$$17 = 0; x$$17 <= ~~Math.ceil(array$$88.length / chunkSize) - 1; x$$17++) {\n const start$$8 = x$$17 * chunkSize | 0;\n const slice = array$$88.slice(start$$8, start$$8 + chunkSize);\n result$$13.push(slice), null;\n }\n\n return result$$13;\n }\n}\nexport function splitAt(index$$4, array$$91) {\n if (index$$4 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: index\");\n }\n\n if (index$$4 > array$$91.length) {\n throw new Error(\"The input sequence has an insufficient number of elements.\\\\nParameter name: index\");\n }\n\n return [array$$91.slice(0, 0 + index$$4), array$$91.slice(index$$4)];\n}\nexport function compareWith(comparer$$12, array1$$6, array2$$6) {\n if (array1$$6 == null) {\n if (array2$$6 == null) {\n return 0;\n } else {\n return -1 | 0;\n }\n } else if (array2$$6 == null) {\n return 1;\n } else {\n let i$$41 = 0;\n let result$$14 = 0;\n const length1 = array1$$6.length | 0;\n const length2 = array2$$6.length | 0;\n\n if (length1 > length2) {\n return 1;\n } else if (length1 < length2) {\n return -1 | 0;\n } else {\n while (i$$41 < length1 ? result$$14 === 0 : false) {\n result$$14 = comparer$$12(array1$$6[i$$41], array2$$6[i$$41]);\n i$$41 = i$$41 + 1;\n }\n\n return result$$14 | 0;\n }\n }\n}\nexport function equalsWith(comparer$$13, array1$$7, array2$$7) {\n return compareWith(compare, array1$$7, array2$$7) === 0;\n}\nexport function exactlyOne(array$$94) {\n if (array$$94.length === 1) {\n return array$$94[0];\n } else if (array$$94.length === 0) {\n throw new Error(\"The input sequence was empty\\\\nParameter name: array\");\n } else {\n throw new Error(\"Input array too long\\\\nParameter name: array\");\n }\n}\nexport function head(array$$95) {\n if (array$$95.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n } else {\n return array$$95[0];\n }\n}\nexport function tryHead(array$$96) {\n if (array$$96.length === 0) {\n return null;\n } else {\n return some(array$$96[0]);\n }\n}\nexport function tail(array$$97) {\n if (array$$97.length === 0) {\n throw new Error(\"Not enough elements\\\\nParameter name: array\");\n }\n\n return array$$97.slice(1);\n}\nexport function item(index$$5, array$$99) {\n return array$$99[index$$5];\n}\nexport function tryItem(index$$6, array$$100) {\n if (index$$6 < 0 ? true : index$$6 >= array$$100.length) {\n return null;\n } else {\n return some(array$$100[index$$6]);\n }\n}\nexport function foldBackIndexed(folder$$6, array$$101, state$$10) {\n const folder$$7 = function folder$$7(acc$$4, x$$18, i$$42) {\n return folder$$6(i$$42, x$$18, acc$$4);\n };\n\n return array$$101.reduceRight(folder$$7, state$$10);\n}\nexport function foldBack(folder$$8, array$$103, state$$12) {\n const folder$$9 = function folder$$9(acc$$5, x$$19) {\n return folder$$8(x$$19, acc$$5);\n };\n\n return array$$103.reduceRight(folder$$9, state$$12);\n}\nexport function foldIndexed2(folder$$10, state$$14, array1$$8, array2$$8) {\n let acc$$6 = state$$14;\n\n if (array1$$8.length !== array2$$8.length) {\n throw new Error(\"Arrays have different lengths\");\n }\n\n for (let i$$43 = 0; i$$43 <= array1$$8.length - 1; i$$43++) {\n acc$$6 = folder$$10(i$$43, acc$$6, array1$$8[i$$43], array2$$8[i$$43]);\n }\n\n return acc$$6;\n}\nexport function fold2(folder$$11, state$$15, array1$$9, array2$$9) {\n return foldIndexed2(function (_arg1, acc$$7, x$$20, y$$7) {\n return folder$$11(acc$$7, x$$20, y$$7);\n }, state$$15, array1$$9, array2$$9);\n}\nexport function foldBackIndexed2(folder$$12, array1$$10, array2$$10, state$$16) {\n let acc$$8 = state$$16;\n\n if (array1$$10.length !== array2$$10.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const size$$1 = array1$$10.length | 0;\n\n for (let i$$44 = 1; i$$44 <= size$$1; i$$44++) {\n acc$$8 = folder$$12(i$$44 - 1, array1$$10[size$$1 - i$$44], array2$$10[size$$1 - i$$44], acc$$8);\n }\n\n return acc$$8;\n}\nexport function foldBack2(f$$9, array1$$11, array2$$11, state$$17) {\n return foldBackIndexed2(function (_arg1$$1, x$$21, y$$8, acc$$9) {\n return f$$9(x$$21, y$$8, acc$$9);\n }, array1$$11, array2$$11, state$$17);\n}\nexport function reduce(reduction, array$$105) {\n if (array$$105.length === 0) {\n throw new Error(\"The input array was empty\");\n }\n\n return array$$105.reduce(reduction);\n}\nexport function reduceBack(reduction$$2, array$$107) {\n if (array$$107.length === 0) {\n throw new Error(\"The input array was empty\");\n }\n\n return array$$107.reduceRight(reduction$$2);\n}\nexport function forAll2(predicate$$27, array1$$12, array2$$12) {\n return fold2(function (acc$$10, x$$22, y$$9) {\n return acc$$10 ? predicate$$27(x$$22, y$$9) : false;\n }, true, array1$$12, array2$$12);\n}\nexport function existsOffset($arg$$178, $arg$$179, $arg$$180) {\n existsOffset: while (true) {\n const predicate$$28 = $arg$$178,\n array$$109 = $arg$$179,\n index$$7 = $arg$$180;\n\n if (index$$7 === array$$109.length) {\n return false;\n } else if (predicate$$28(array$$109[index$$7])) {\n return true;\n } else {\n $arg$$178 = predicate$$28;\n $arg$$179 = array$$109;\n $arg$$180 = index$$7 + 1;\n continue existsOffset;\n }\n\n break;\n }\n}\nexport function exists(predicate$$29, array$$110) {\n return existsOffset(predicate$$29, array$$110, 0);\n}\nexport function existsOffset2($arg$$183, $arg$$184, $arg$$185, $arg$$186) {\n existsOffset2: while (true) {\n const predicate$$30 = $arg$$183,\n array1$$13 = $arg$$184,\n array2$$13 = $arg$$185,\n index$$8 = $arg$$186;\n\n if (index$$8 === array1$$13.length) {\n return false;\n } else if (predicate$$30(array1$$13[index$$8], array2$$13[index$$8])) {\n return true;\n } else {\n $arg$$183 = predicate$$30;\n $arg$$184 = array1$$13;\n $arg$$185 = array2$$13;\n $arg$$186 = index$$8 + 1;\n continue existsOffset2;\n }\n\n break;\n }\n}\nexport function exists2(predicate$$31, array1$$14, array2$$14) {\n if (array1$$14.length !== array2$$14.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n return existsOffset2(predicate$$31, array1$$14, array2$$14, 0);\n}\nexport function sum(array$$111, adder) {\n let acc$$11 = adder.GetZero();\n\n for (let i$$45 = 0; i$$45 <= array$$111.length - 1; i$$45++) {\n acc$$11 = adder.Add(acc$$11, array$$111[i$$45]);\n }\n\n return acc$$11;\n}\nexport function sumBy(projection$$6, array$$112, adder$$1) {\n let acc$$12 = adder$$1.GetZero();\n\n for (let i$$46 = 0; i$$46 <= array$$112.length - 1; i$$46++) {\n acc$$12 = adder$$1.Add(acc$$12, projection$$6(array$$112[i$$46]));\n }\n\n return acc$$12;\n}\nexport function maxBy(projection$$7, xs$$12, comparer$$14) {\n return reduce(function (x$$23, y$$10) {\n return comparer$$14.Compare(projection$$7(y$$10), projection$$7(x$$23)) > 0 ? y$$10 : x$$23;\n }, xs$$12);\n}\nexport function max(xs$$13, comparer$$15) {\n return reduce(function (x$$24, y$$11) {\n return comparer$$15.Compare(y$$11, x$$24) > 0 ? y$$11 : x$$24;\n }, xs$$13);\n}\nexport function minBy(projection$$8, xs$$14, comparer$$16) {\n return reduce(function (x$$25, y$$12) {\n return comparer$$16.Compare(projection$$8(y$$12), projection$$8(x$$25)) > 0 ? x$$25 : y$$12;\n }, xs$$14);\n}\nexport function min(xs$$15, comparer$$17) {\n return reduce(function (x$$26, y$$13) {\n return comparer$$17.Compare(y$$13, x$$26) > 0 ? x$$26 : y$$13;\n }, xs$$15);\n}\nexport function average(array$$113, averager) {\n if (array$$113.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n\n let total = averager.GetZero();\n\n for (let i$$47 = 0; i$$47 <= array$$113.length - 1; i$$47++) {\n total = averager.Add(total, array$$113[i$$47]);\n }\n\n return averager.DivideByInt(total, array$$113.length);\n}\nexport function averageBy(projection$$9, array$$114, averager$$1) {\n if (array$$114.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n\n let total$$1 = averager$$1.GetZero();\n\n for (let i$$48 = 0; i$$48 <= array$$114.length - 1; i$$48++) {\n total$$1 = averager$$1.Add(total$$1, projection$$9(array$$114[i$$48]));\n }\n\n return averager$$1.DivideByInt(total$$1, array$$114.length);\n}\nexport function ofSeq(source$$7, cons$$31) {\n return cons$$31.from(source$$7);\n}\nexport function ofList(source$$8, cons$$32) {\n return cons$$32.from(source$$8);\n}\nexport function toList(source$$9) {\n const len$$18 = source$$9.length | 0;\n let target$$7 = new List();\n\n for (let i$$49 = len$$18 - 1; i$$49 >= 0; i$$49--) {\n target$$7 = new List(source$$9[i$$49], target$$7);\n }\n\n return target$$7;\n}\nexport function windowed(windowSize, source$$10) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n }\n\n const res$$9 = new Array(max$$1(comparePrimitives, 0, source$$10.length - windowSize));\n\n for (let i$$50 = windowSize; i$$50 <= source$$10.length; i$$50++) {\n res$$9[i$$50 - windowSize] = source$$10.slice(i$$50 - windowSize, i$$50 - 1 + 1);\n }\n\n return res$$9;\n}","(**\nProgram\n---------\nCore abstractions for creating and running the dispatch loop.\n\n*)\n\nnamespace Elmish\n\n\n/// Program type captures various aspects of program behavior\ntype Program<'arg, 'model, 'msg, 'view> = private {\n init : 'arg -> 'model * Cmd<'msg>\n update : 'msg -> 'model -> 'model * Cmd<'msg>\n subscribe : 'model -> Cmd<'msg>\n view : 'model -> Dispatch<'msg> -> 'view\n setState : 'model -> Dispatch<'msg> -> unit\n onError : (string*exn) -> unit\n syncDispatch: Dispatch<'msg> -> Dispatch<'msg>\n}\n\n/// Program module - functions to manipulate program instances\n[]\n[]\nmodule Program =\n /// Typical program, new commands are produced by `init` and `update` along with the new state.\n let mkProgram \n (init : 'arg -> 'model * Cmd<'msg>) \n (update : 'msg -> 'model -> 'model * Cmd<'msg>)\n (view : 'model -> Dispatch<'msg> -> 'view) =\n { init = init\n update = update\n view = view\n setState = fun model -> view model >> ignore\n subscribe = fun _ -> Cmd.none\n onError = Log.onError\n syncDispatch = id }\n\n /// Simple program that produces only new state with `init` and `update`.\n let mkSimple \n (init : 'arg -> 'model) \n (update : 'msg -> 'model -> 'model)\n (view : 'model -> Dispatch<'msg> -> 'view) =\n { init = init >> fun state -> state,Cmd.none\n update = fun msg -> update msg >> fun state -> state,Cmd.none\n view = view\n setState = fun model -> view model >> ignore\n subscribe = fun _ -> Cmd.none\n onError = Log.onError\n syncDispatch = id }\n\n /// Subscribe to external source of events.\n /// The subscription is called once - with the initial model, but can dispatch new messages at any time.\n let withSubscription (subscribe : 'model -> Cmd<'msg>) (program: Program<'arg, 'model, 'msg, 'view>) =\n let sub model =\n Cmd.batch [ program.subscribe model\n subscribe model ]\n { program with subscribe = sub }\n\n /// Trace all the updates to the console\n let withConsoleTrace (program: Program<'arg, 'model, 'msg, 'view>) =\n let traceInit (arg:'arg) =\n let initModel,cmd = program.init arg\n Log.toConsole (\"Initial state:\", initModel)\n initModel,cmd\n\n let traceUpdate msg model =\n Log.toConsole (\"New message:\", msg)\n let newModel,cmd = program.update msg model\n Log.toConsole (\"Updated state:\", newModel)\n newModel,cmd\n\n { program with\n init = traceInit \n update = traceUpdate }\n\n /// Trace all the messages as they update the model\n let withTrace trace (program: Program<'arg, 'model, 'msg, 'view>) =\n let update msg model =\n let state,cmd = program.update msg model\n trace msg state\n state,cmd\n { program\n with update = update }\n\n /// Handle dispatch loop exceptions\n let withErrorHandler onError (program: Program<'arg, 'model, 'msg, 'view>) =\n { program\n with onError = onError }\n\n /// For library authors only: map existing error handler and return new `Program` \n let mapErrorHandler map (program: Program<'arg, 'model, 'msg, 'view>) =\n { program\n with onError = map program.onError }\n\n /// For library authors only: get the current error handler \n let onError (program: Program<'arg, 'model, 'msg, 'view>) =\n program.onError\n\n /// For library authors only: function to render the view with the latest state \n let withSetState (setState:'model -> Dispatch<'msg> -> unit)\n (program: Program<'arg, 'model, 'msg, 'view>) = \n { program\n with setState = setState }\n\n /// For library authors only: return the function to render the state \n let setState (program: Program<'arg, 'model, 'msg, 'view>) = \n program.setState\n\n /// For library authors only: return the view function \n let view (program: Program<'arg, 'model, 'msg, 'view>) = \n program.view\n\n /// For library authors only: function to synchronize the dispatch function\n let withSyncDispatch (syncDispatch:Dispatch<'msg> -> Dispatch<'msg>)\n (program: Program<'arg, 'model, 'msg, 'view>) = \n { program\n with syncDispatch = syncDispatch }\n\n /// For library authors only: map the program type\n let map mapInit mapUpdate mapView mapSetState mapSubscribe\n (program: Program<'arg, 'model, 'msg, 'view>) =\n { init = mapInit program.init\n update = mapUpdate program.update\n view = mapView program.view\n setState = mapSetState program.setState\n subscribe = mapSubscribe program.subscribe\n onError = program.onError\n syncDispatch = id }\n\n /// Start the program loop.\n /// arg: argument to pass to the init() function.\n /// program: program created with 'mkSimple' or 'mkProgram'.\n let runWith (arg: 'arg) (program: Program<'arg, 'model, 'msg, 'view>) =\n let (model,cmd) = program.init arg\n let rb = RingBuffer 10\n let mutable reentered = false\n let mutable state = model \n let rec dispatch msg = \n if reentered then\n rb.Push msg\n else\n reentered <- true\n let mutable nextMsg = Some msg\n while Option.isSome nextMsg do\n let msg = nextMsg.Value\n try\n let (model',cmd') = program.update msg state\n program.setState model' syncDispatch\n cmd' |> Cmd.exec syncDispatch\n state <- model'\n with ex ->\n program.onError (sprintf \"Unable to process the message: %A\" msg, ex)\n nextMsg <- rb.Pop()\n reentered <- false\n and syncDispatch = program.syncDispatch dispatch \n\n program.setState model syncDispatch\n let sub = \n try \n program.subscribe model \n with ex ->\n program.onError (\"Unable to subscribe:\", ex)\n Cmd.none\n sub @ cmd |> Cmd.exec syncDispatch\n\n /// Start the dispatch loop with `unit` for the init() function.\n let run (program: Program) = runWith () program\n","namespace Elmish.React\n\n[]\nmodule Helpers =\n open Fable.React.Props\n open Fable.Core.JsInterop\n\n /// `Ref` callback that sets the value of an input textbox after DOM element is created.\n /// Can be used instead of `DefaultValue` and `Value` props to override input box value.\n let inline valueOrDefault value =\n Ref <| (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)\n\n[]\nmodule Program =\n\n module Internal =\n\n open Fable.React\n open Browser\n open Elmish\n\n let withReactBatchedUsing lazyView2With placeholderId (program:Program<_,_,_,_>) =\n let mutable lastRequest = None\n let setState model dispatch =\n match lastRequest with\n | Some r -> window.cancelAnimationFrame r\n | _ -> ()\n\n lastRequest <- Some (window.requestAnimationFrame (fun _ ->\n ReactDom.render(\n lazyView2With (fun x y -> obj.ReferenceEquals(x,y)) (Program.view program) model dispatch,\n document.getElementById placeholderId\n )))\n\n program\n |> Program.withSetState setState\n\n let withReactSynchronousUsing lazyView2With placeholderId (program:Elmish.Program<_,_,_,_>) =\n let setState model dispatch =\n ReactDom.render(\n lazyView2With (fun x y -> obj.ReferenceEquals(x,y)) (Program.view program) model dispatch,\n document.getElementById placeholderId\n )\n\n program\n |> Program.withSetState setState\n\n let withReactHydrateUsing lazyView2With placeholderId (program:Elmish.Program<_,_,_,_>) =\n let setState model dispatch =\n ReactDom.hydrate(\n lazyView2With (fun x y -> obj.ReferenceEquals(x,y)) (Program.view program) model dispatch,\n document.getElementById placeholderId\n )\n\n program\n |> Program.withSetState setState\n\n\n /// Renders React root component inside html element identified by placeholderId.\n /// Uses `requestAnimationFrame` to batch updates to prevent drops in frame rate.\n /// NOTE: This may have unexpected effects in React controlled inputs, see https://github.com/elmish/react/issues/12\n let withReactBatched placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactBatchedUsing lazyView2With placeholderId program\n\n /// Renders React root component inside html element identified by placeholderId.\n /// New renders are triggered immediately after an update.\n let withReactSynchronous placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactSynchronousUsing lazyView2With placeholderId program\n\n []\n let withReact placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactBatchedUsing lazyView2With placeholderId program\n\n []\n let withReactUnoptimized placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactSynchronousUsing lazyView2With placeholderId program\n\n /// Renders React root component inside html element identified by placeholderId using `React.hydrate`.\n let withReactHydrate placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactHydrateUsing lazyView2With placeholderId program\n","namespace Elmish.React\n\nopen Fable.React\nopen Elmish\n\ntype LazyProps<'model> = {\n model:'model\n render:unit->ReactElement\n equal:'model->'model->bool\n}\n\nmodule Components =\n type LazyView<'model>(props) =\n inherit Component,obj>(props)\n\n override this.shouldComponentUpdate(nextProps, _nextState) =\n not <| this.props.equal this.props.model nextProps.model\n\n override this.render () =\n this.props.render ()\n\n[]\nmodule Common =\n /// Avoid rendering the view unless the model has changed.\n /// equal: function to compare the previous and the new states\n /// view: function to render the model\n /// state: new state to render\n let lazyViewWith (equal:'model->'model->bool)\n (view:'model->ReactElement)\n (state:'model) =\n ofType,_,_>\n { render = fun () -> view state\n equal = equal\n model = state }\n []\n\n /// Avoid rendering the view unless the model has changed.\n /// equal: function to compare the previous and the new states\n /// view: function to render the model using the dispatch\n /// state: new state to render\n /// dispatch: dispatch function\n let lazyView2With (equal:'model->'model->bool)\n (view:'model->'msg Dispatch->ReactElement)\n (state:'model)\n (dispatch:'msg Dispatch) =\n ofType,_,_>\n { render = fun () -> view state dispatch\n equal = equal\n model = state }\n []\n\n /// Avoid rendering the view unless the model has changed.\n /// equal: function to compare the previous and the new model (a tuple of two states)\n /// view: function to render the model using the dispatch\n /// state1: new state to render\n /// state2: new state to render\n /// dispatch: dispatch function\n let lazyView3With (equal:_->_->bool) (view:_->_->_->ReactElement) state1 state2 (dispatch:'msg Dispatch) =\n ofType,_,_>\n { render = fun () -> view state1 state2 dispatch\n equal = equal\n model = (state1,state2) }\n []\n\n /// Avoid rendering the view unless the model has changed.\n /// view: function of model to render the view\n let lazyView (view:'model->ReactElement) =\n lazyViewWith (=) view\n\n /// Avoid rendering the view unless the model has changed.\n /// view: function of two arguments to render the model using the dispatch\n let lazyView2 (view:'model->'msg Dispatch->ReactElement) =\n lazyView2With (=) view\n\n /// Avoid rendering the view unless the model has changed.\n /// view: function of three arguments to render the model using the dispatch\n let lazyView3 (view:_->_->_->ReactElement) =\n lazyView3With (=) view\n\n\n","module Client\r\n\r\nopen Elmish\r\nopen Elmish.React\r\n\r\nopen EventMessages\r\nopen Views\r\n\r\nopen Types\r\nopen Shuffle\r\n\r\nlet init () =\r\n { Speakers = Seq.empty\r\n Introducers = Seq.empty\r\n ErrorMessage = None},\r\n Cmd.ofMsg Stop\r\n\r\nlet update msg (currentModel:SpeakersIntroducers) =\r\n match msg with\r\n | ShuffleSpeakers ->\r\n let hasShuffled = shuffle currentModel.Speakers\r\n match hasShuffled with\r\n | Shuffled speakersIntroers -> ({ Speakers = speakersIntroers.Speakers\r\n Introducers = speakersIntroers.Introducers\r\n ErrorMessage = None}), Cmd.none\r\n | Error message -> ({Speakers = currentModel.Speakers\r\n Introducers = []\r\n ErrorMessage = Some message}), Cmd.none\r\n | AddSpeakers speakerNames ->\r\n let speakers = speakerNames.Split('\\n')\r\n |> Seq.map (fun n -> { Name = n; Order = 0 })\r\n {Speakers = speakers\r\n Introducers = []\r\n ErrorMessage = None}, Cmd.none\r\n | _ -> {Speakers = currentModel.Speakers\r\n Introducers = []\r\n ErrorMessage = None}, Cmd.none\r\n\r\n#if DEBUG\r\nopen Elmish.Debug\r\nopen Elmish.HMR\r\n#endif\r\n\r\nProgram.mkProgram init update initialView\r\n#if DEBUG\r\n|> Program.withConsoleTrace\r\n#endif\r\n|> Program.withReactBatched \"elmish-app\"\r\n#if DEBUG\r\n|> Program.withDebugger\r\n#endif\r\n|> Program.run\r\n","[]\nmodule Fable.React.Extensions\n\ntype Browser.Types.Event with\n /// Access the value from target\n /// Equivalent to `(this.target :?> HTMLInputElement).value`\n member this.Value =\n (this.target :?> Browser.Types.HTMLInputElement).value\n\n /// Access the checked property from target\n /// Equivalent to `(this.target :?> HTMLInputElement).checked`\n member this.Checked =\n (this.target :?> Browser.Types.HTMLInputElement).``checked``\n"],"sourceRoot":""}