{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../../src/fable-library/Util.ts","webpack:///../../src/fable-library/Types.ts","webpack:///../../src/fable-library/Option.ts","webpack:///../../src/fable-library/Reflection.ts","webpack:///../../src/fable-library/Int32.ts","webpack:///../../../src/fable-library/lib/long.js","webpack:///../../src/fable-library/Long.ts","webpack:///../../src/fable-library/Date.ts","webpack:///../../../src/fable-library/lib/big.js","webpack:///../../src/fable-library/Decimal.ts","webpack:///../../src/fable-library/RegExp.ts","webpack:///../../src/fable-library/String.ts","webpack:///.fable/Fable.Reaction.3.5.0/Reaction.fs","webpack:///../../src/fable-library/Guid.ts","webpack:///../../src/fable-library/Seq.ts","webpack:///./.fable/fable-library.2.13.0/MutableMap.js","webpack:///./.fable/fable-library.2.13.0/Map.js","webpack:///./.fable/fable-library.2.13.0/MutableSet.js","webpack:///./.fable/fable-library.2.13.0/Set.js","webpack:///./.fable/fable-library.2.13.0/Array.js","webpack:///./.fable/fable-library.2.13.0/BigInt/n.js","webpack:///./.fable/fable-library.2.13.0/BigInt/z.js","webpack:///./.fable/fable-library.2.13.0/List.js","webpack:///./.fable/fable-library.2.13.0/BigInt.js","webpack:///../../src/fable-library/DateOffset.ts","webpack:///../../src/fable-library/TimeSpan.ts","webpack:///.fable/Thoth.Json.4.1.0/Decode.fs","webpack:///.fable/Thoth.Json.4.1.0/Encode.fs","webpack:///src/Client/LocalStorage.fs","webpack:///.fable/Fable.Promise.2.0.0/Promise.fs","webpack:///.fable/Thoth.Fetch.2.0.0/Fetch.fs","webpack:///../../src/fable-library/AsyncBuilder.ts","webpack:///../../src/fable-library/Async.ts","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/Types.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/Core.fs","webpack:///../../src/fable-library/MailboxProcessor.ts","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/AsyncDisposable.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/AsyncObserver.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/Create.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/Combine.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/Transform.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/AsyncObservable.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/Filter.fs","webpack:///.fable/FSharp.Control.AsyncRx.1.6.0/Builder.fs","webpack:///.fable/Fable.Reaction.3.5.0/AsyncRx.fs","webpack:///.fable/Feliz.Bulma.2.4.0/ElementBuilders.fs","webpack:///src/Client/ViewHelpers.fs","webpack:///.fable/Fable.React.7.0.1/Fable.React.FunctionComponent.fs","webpack:///./.fable/Feliz.1.17.0/ReactInterop.js","webpack:///.fable/Feliz.1.17.0/React.fs","webpack:///.fable/Fable.Elmish.3.1.0/prelude.fs","webpack:///.fable/Fable.Elmish.3.1.0/cmd.fs","webpack:///src/Client/Login.fs","webpack:///src/Client/Admin.fs","webpack:///src/Client/Account.fs","webpack:///.fable/Fable.Fetch.2.2.0/Fetch.fs","webpack:///src/Client/Startpage.fs","webpack:///src/Client/InventoryControl.fs","webpack:///src/Client/Overview.fs","webpack:///.fable/Fable.Elmish.3.1.0/ring.fs","webpack:///.fable/Fable.Elmish.React.3.0.1/common.fs","webpack:///src/Client/Main.fs","webpack:///.fable/Fable.Elmish.React.3.0.1/react.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","x","f","Long","$this","other","fromBits","str","_a","rep","utc","date","getUTCHours","getHours","rm","P","e","y","flags","precision","__","factory","matchValue","( .ctor )","caseStrategy","fieldName","lowerFirst","guidRegex","cur","MutableMap$00602","declare","pairs","comparer","this$","FSharpRef","this","contents","hashMap","Map","iterate","pair","MutableMap$00602$$Add$$5BDDA1","MutableMap$00602$$TryFindIndex$$2B595","this$$$1","k","h","GetHashCode","tryGetValue","findIndex","pair$$1","Equals","MutableMap$00602$$TryFind$$2B595","this$$$2","k$$1","matchValue$$1","getItemFromDict","MutableMap$00602$$Clear","this$$$4","clear","MutableMap$00602$$get_Count","this$$$5","sumBy","pairs$$2","values","GetZero","Add","$x$$2","$y$$3","this$$$8","k$$4","v$$1","matchValue$$4","msg","format","Error","set","MutableMap$00602$$Remove$$2B595","this$$$10","k$$6","matchValue$$6","iterator","this$$$11","toIterator","getEnumerator","delay","collect","pairs$$3","map","pair$$3","item","Clear","Contains","item$$1","matchValue$$7","equals","CopyTo","array","arrayIndex","iterateIndexed","i$$10","Remove","item$$2","matchValue$$8","k$$7","entries","k$$8","this$$$6","k$$2","matchValue$$2","MutableMap$00602$$get_Item$$2B595","has","k$$9","this$$$9","k$$5","matchValue$$5","MutableMap$00602$$ContainsKey$$2B595","keys","pair$$5","k$$10","v$$2","this$$$7","k$$3","v","matchValue$$3","MutableMap$00602$$set_Item$$5BDDA1","pair$$6","MapTree$00602","tag","fields","Union","MapTreeModule$$$size","MapTreeModule$$$sizeAux","$acc$$5","$m$$6","acc","MapTreeModule$$$empty","MapTreeModule$$$height","_arg1","MapTreeModule$$$mk","l$$1","r$$1","hl","hr","MapTreeModule$$$rebalance","t1","t2","t1h","t2h","MapTreeModule$$$add","m$$3","Compare","c$$1","MapTreeModule$$$tryFind","$comparer$$2$$26","$k$$4$$27","$m$$5$$28","comparer$$2","m$$5","some","c$$5","MapTreeModule$$$remove","comparer$$9","k$$11","m$$7","c$$7","patternInput$$1","MapTreeModule$$$spliceOutSuccessor","m$$6","patternInput","MapTreeModule$$$ofSeq","comparer$$16","c$$9","ie","$comparer$$14$$97","$acc$$10$$98","$e$$99","comparer$$14","acc$$10","MoveNext","patternInput$$2","Current","MapTreeModule$$$mkFromEnumerator","isDisposable","Dispose","MapTreeModule$002EMapIterator$00602","stack","started","Record","MapTreeModule$$$collapseLHS","$stack$$111","tail","List","head","MapTreeModule$$$mkIterator","s$$5","MapTreeModule$$$current","i$$2","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","i$$3","MapTreeModule$$$moveNext","Reset","FSharpMap","comparer$$17","tree","FSharpMap$$$$002Ector$$58ADD115","FSharpMap$$get_Tree","__$$5","FSharpMap$$Add$$5BDDA1","__$$6","k$$28","v$$24","FSharpMap$$get_Item$$2B595","__$$8","k$$29","$comparer$$1$$23","$k$$3$$24","$m$$4$$25","MapTreeModule$$$find","comparer$$1","m$$4","c$$3","FSharpMap$$Map$$Z6F6B671C","__$$18","f$$25","MapTreeModule$$$mapi","f$$11","m$$14","l2$$1","v2$$17","r2$$1","FSharpMap$$get_Count","__$$20","FSharpMap$$ContainsKey$$2B595","__$$21","k$$31","$comparer$$10$$59","$k$$12$$60","$m$$8$$61","MapTreeModule$$$mem","comparer$$10","k$$12","m$$8","c$$8","FSharpMap$$Remove$$2B595","__$$22","k$$32","FSharpMap$$TryFind$$2B595","__$$23","k$$33","add","k$$37","v$$27","m$$24","tryFind","k$$39","m$$26","f$$35","m$$37","empty","comparer$$21","toString","join","map$$2","kv","combineHash","x$$16","y$$3","res$$3","e$$1","activePatternResult3682","structuralHash","Math","abs","that","CompareTo","obj","res$$4","finished","e1","e2","kvp1","kvp2","c$$10","compare","_arg1$$1","k$$34","k$$35","kv$$1","k$$36","v$$26","kv$$2","MutableSet$00601","items","MutableSet$00601$$Add$$2B595","MutableSet$00601$$$$002Ector$$Z6150332D","MutableSet$00601$$TryFindIndex$$2B595","MutableSet$00601$$Clear","MutableSet$00601$$get_Count","MutableSet$00601$$Contains$$2B595","MutableSet$00601$$Remove$$2B595","values$$1","value$$2","i$$8","item$$3","add_","x$$1","SetTree$00601","SetTreeModule$$$SetOne","SetTreeModule$$$SetNode","SetTreeModule$$$height","SetTreeModule$$$mk","l$$2","r$$2","SetTreeModule$$$rebalance","SetTreeModule$$$add","t$$1","SetTreeModule$002ESetIterator$00601","SetTreeModule$$$collapseLHS","$stack$$104","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","$comparer$$17$$112","$l1$$113","$l2$$114","SetTreeModule$$$compareStacks","$target$$115","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","l1","l2","SetTreeModule$$$ofSeq","comparer$$20","c$$11","$comparer$$19$$126","$acc$$11$$127","$e$$128","comparer$$19","acc$$11","SetTreeModule$$$mkFromEnumerator","i$$1","SetTreeModule$$$moveNext","FSharpSet","comparer$$22","FSharpSet$$$$002Ector$$2528C5CB","FSharpSet$$get_Comparer","__$$4","FSharpSet$$get_Tree","ofSeq","elements","comparer$$30","createMutable","source","comparer$$31","MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D","map$$1","x$$21","String","res","that$$1","append","array1","array2","cons","ArrayBuffer","isView","len1","len2","newArray","concat","fill","target","targetIndex","count","f$$1","source$$1","cons$$2","len$$1","target$$2","i$$4","distinctBy","projection$$1","array$$17","eq$$1","predicate","hashSet","createMutable$$1","$arg$$3","addToSet","filter","initialize","count$$8","initializer","cons$$15","result$$7","i$$13","predicate$$13","array$$61","find","fold","folder$$4","state$$6","array$$78","reduce","delegateArg0$$2","delegateArg1$$2","equalsWith","comparer$$13","array1$$7","array2$$7","comparer$$12","array1$$6","array2$$6","i$$40","result$$13","length1","length2","compareWith","foldBack2","f$$9","array1$$11","array2$$11","state$$17","folder$$12","array1$$10","array2$$10","state$$16","acc$$8","size$$1","i$$43","foldBackIndexed2","x$$22","y$$8","acc$$9","source$$6","cons$$31","from","ofList","source$$7","cons$$32","BigNat","bound","digits","BigNatModule$002EFFT$$$pow32","$x$$1","$n$$2","BigNatModule$002EFFT$$$maxTwoPower","Int32Array","BigNatModule$$$bound","n$$10","BigNatModule$$$coeff","n$$12","i$$5","BigNatModule$$$coeff64","n$$13","i$$6","fromInteger","BigNatModule$$$setCoeff","n$$14","i$$7","v$$4","BigNatModule$$$pow64","$x$$23$$48","$n$$15$$49","x$$23","n$$15","op_Multiply","BigNatModule$$$pow32","$x$$24$$50","$n$$16$$51","x$$24","n$$16","BigNatModule$$$baseNi64","BigNatModule$$$baseMaski64","BigNatModule$$$createN","b$$4","BigNatModule$$$normN","n$$18","bound$$1","$na$$62","$i$$9$$63","na","i$$9","findLeastBound","BigNatModule$$$embed","x$$28","x$$29","r$$3","BigNatModule$$$boundInt","BigNatModule$$$one","BigNatModule$$$zero","BigNatModule$$$degree","n$$24","BigNatModule$$$isZero","p$$4","BigNatModule$$$equal","p$$7","q$$4","$pa$$96","$qa$$97","$i$$22$$98","pa","qa","i$$22","check","BigNatModule$$$compare","p$$9","q$$6","$pa$$2$$108","$qa$$2$$109","$i$$24$$110","pa$$2","qa$$2","i$$24","check$$2","BigNatModule$$$lt","p$$10","q$$7","BigNatModule$$$mulSchoolBookCarry","$r$$12$$130","$c$$8$$131","$k$$4$$132","r$$12","rak$$1","op_Addition","op_BitwiseAnd","toInt","op_Division","BigNatModule$$$mulSchoolBookOneSmall","p$$16","q$$12","value$$3","bp","r$$13","q$$13","i$$28","rak$$2","BigNatModule$$$mulSchoolBook","p$$18","q$$15","p$$15","q$$11","value$$1","r$$11","rak","pSmall","qSmall","p$$17","q$$14","value$$4","r$$14","i$$29","pai$$1","j$$1","qaj","rak$$3","BigNatModule$$$mulSchoolBookNeitherSmall","BigNatModule$002Eencoding","bigL","twoToBigL","bigK","bigN","split","splits","BigNatModule$$$mkEncoding","bigK$$2","i$$30","BigNatModule$$$table","i$$32","i$$33","i$$34","Array","BigNatModule$$$mul","p$$20","q$$17","BigNatModule$$$scaleSubInPlace","x$$57","a$$5","n$$30","patternInput$$3","j$$4","z$$7","zLo","value$$5","zHi","BigNatModule$$$scaleAddInPlace","x$$62","f$$3","a$$8","n$$32","patternInput$$4","patternInput$$5","f$$4","j$$5","z$$8","zLo$$1","value$$7","zHi$$1","BigNatModule$$$removeFactor","x$$67","a$$11","n$$34","f$$6","p$$8","pn","q$$5","qn","patternInput$$6","f64","f64$$1","$pa$$1$$103","$qa$$1$$104","$i$$23$$105","pa$$1","qa$$1","i$$23","pai","qai","check$$1","BigNatModule$$$divmod","b$$7","a$$12","x$$68","x$$27","array$$31","d$$6","p$$21","m$$2","n$$35","f$$7","BigNatModule$$$ofInt32","n$$41","BigNatModule$$$ofInt64","n$$42","x$$30","x$$31","r$$4","i$$11","BigNatModule$$$boundInt64","op_Modulus","BigNatModule$$$embed64","BigNatModule$$$toString","n$$45","degn","kten2ks","$prior$$227","$k$$11$$228","$ten2k$$229","prior","ten2k","route","digits$$4","isLeading","n$$46","patternInput$$13","digits$$2","n$$47","n$$19","i$$12","BigNatModule$$$eval32","int32ToString","BigNatModule$$$isSmall","n$$48","BigNatModule$$$getSmall","n$$49","BigInteger","signInt","BigInteger$$$$002Ector$$Z2BE94A1","BigInteger$$$nat$$Z67CCE57D","n$$1","BigNatModule$0024$0024$0024isSmall","BigNatModule$0024$0024$0024getSmall","smallLim","smallPosTab","BigInteger$$get_SignInt","BigInteger$$get_V","x$$2","BigInteger$$$op_Equality$$56F059C0","x$$3","BigNatModule$0024$0024$0024equal","BigNatModule$0024$0024$0024isZero","BigInteger$$$op_LessThan$$56F059C0","x$$5","y$$2","BigNatModule$0024$0024$0024lt","BigInteger$$$$002Ector$$Z524259A4","n$$6","BigNatModule$0024$0024$0024ofInt32","BigNatModule$0024$0024$0024ofInt64","op_UnaryNegation","op_UnaryNegation_Int32","BigInteger$$$get_One","one","BigInteger$$$get_Two","two","BigInteger$$$get_Zero","zero","tryLast","$_arg1$$4$$6","_arg1$$4","$f$$2$$19","$state$$1$$20","$xs$$8$$21","f$$2","state$$1","xs$$8","reverse","xs$$9","acc$$1","x$$6","xs$$12","fold$$1","acc$$3","x$$9","xs$$28","ys$$10","x$$15","f$$16","xs$$31","f$$24","xs$$46","unitVar0","ofArray","xs$$50","res$$1","f$$42","xs$$71","acc$$17","x$$37","BigNatModule$0024$0024$0024toString","z","n$$17","res$$2","BigNatModule$0024$0024$0024hash","obj$$1","n$$5","nn","BigInteger$0024$0024$0024get_Zero","BigInteger$0024$0024$0024get_One","BigInteger$0024$0024$0024get_Two","arguments","genericMsg","newLine","errorToString","path","error","reason","decoder","clo1","fromValue","string","arg0","sbyte","int16","uint16","uint32","min","max","datetime","datetimeOffset","timespan","decodeMaybeNull","badPathError","fieldNames","currentPath","option","defaultArg","index","requestedIndex","vArray","tokens","arr","succeed","output","_arg2","andThen","cb","ctor","d1","unwrapWith","errors","fieldValue","isUndefined","field","firstPath","firstValue","tupledArg","curValue","optional","toMap","xs","mixedArray","decoders","arg10","arg30","clo2","clo3","state","extra","uci","fi","autoDecoder","autoDecodeRecordsAndUnions","isOptional","decoderRef","decoderInfos","folder$$8","state$$12","reduceRight","delegateArg0$$4","delegateArg1$$4","autoObject","makeUnion","message","fullname","enumType","byte","int","arg20","list","keyDecoder","valueDecoder","autoObject2","decoder1","decoder2","v1","v2","( arg10@ )","( arg20@ )","runner","ar","bool","unit","float","float32","guid","makeExtra","resolver","space","encoder","nil","autoEncodeRecordsAndUnions","skipNullField","encoderRef","setters","targetKey","encode","autoEncoder","fieldTypes","seq","encoders","Value","valueEncoder","keyType","activePatternResult18614","keyEncoder","clo4","arg40","activePatternResult18618","generateEncoder","CurrentLocale","locale","generator","f1","f2","er","success","fail","PromiseBuilder","dataResolver","response","responseResolver","eitherUnitOr","cont","ResolveType","a","text","url","httpMethod","properties","headers","body","list2","init","resolve","exn","tryFetchAs","token","bearer","tkn","computation","cancellationToken","cancel","AsyncDisposable","cts","Create","fn","err","obv","disposable","agent","inbox","stopped","messageLoop","DisposeAsync","OnErrorAsync","OnCompletedAsync","OnNextAsync","_arg3","_arg9","arg00","disposables","_arg4","safeObserver","_arg5","ofAsyncWorker","worker","safeObv","mergeInner","maxConcurrent","initialModel","model","_arg7","subscriptions","SubscribeAsync","Subscriptions","Key","activePatternResult13163","_arg8","_arg10","transformAsync","nextAsync","mapper","next","flatMap","sources","chooser","pr","Bind","QueryBuilder","obs","mkAttr","mkStyle","cn","extractClasses","errorMsg","errMsg","dismiss","elems","props","modalBox","onClose","children","elms","loadingIndicatorSmall","productImg","prodId","size","cache","getDisposable","deps","useEffectReact","renderElement","withKey","propsWithKey","dispose","update","initialState","effect","dependencies","useEffectWithDeps","createDisposable","render","functionComponent","initial","ex","onError","dispatch","cmd","g","cmds","lists","state$$3","xs$$14","acc$$4","x$$10","task","arg","ofSuccess","checkError","fromDateToLocalDate","dateString","ErrorMsg","handleCommit","handleCommitResponse","email","msgs","requestReset","close","stream","content'","typ","ev","view","rememberMe","handleUser","tfaCookie","username","handleLoginRespnese","Step","cookie","sess","RememberMe","DisplayRecovery","handleTFA","userField","kc","elemId","loginField","active","loginForm","passwordRecovery","tfaForm","validEmail","validUsername","validFirstname","validLastname","validPassword","requestPath","addOrUpdate","validPass","validName","remove","usr","label'","user","txt","User","oldP","newP","completed","notCompleted","pw","handleUpdateresponse","setTo","inUse","passwd","buttons","ke","notUpdated","isUpdated","lockButton","changeForm","segment","collect$$1","query","onChange","urlSegments","location","pathname","search","hash","Usage","Notifications","drawUsage","chart","strings","projection$$4","comparer$$4","xs$$5","sort","x$$14","y$$4","point","startpage","loc","locId","els","ComparableLocations","SelectedExp","SelectedMin","CompareForm","newCC","cc","colorCodes","Inventory","drawInventory","lowered","Product","drawComparison","names","selectable","asInt","exp","inventoryList","History","Ajour","RegisteredBy","hist","drawControl","processing","inventoryControl","session","us","selectedLocation","Locations","overview","menuButton","vw","title","isActive","sl","handleAccountMessage","amsg","SubMdl","UsesTwoFactorAuth","DisplayPasswordForm","DisplayTFAForm","handleAdminMessage","SelectedUser","DisplayUserForm","Users","handleGotoAccount","lmsg","UserSession","handleLoginMessage","handleLogout","handleGotoOverview","handleUrlChanged","handleAuthenticate","modifiedProperties","prop","application","routeMode","comp","navLogo","dropdownActive","navBar","users","userForm","ix","wix'","wix","setState","program","sub","rb","reentered","syncDispatch","nextMsg","rix'","equal","lazyView2With","placeholderId","document","getElementById","nextProps","_nextState","runWith","withReactSynchronousUsing"],"mappings":"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","file":"app.a2b20482e47f0520fa15.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([376,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// tslint:disable:ban-types\nexport function bindThis(this$, source) {\n for (const key of Object.keys(source)) {\n if (typeof source[key] === \"function\") {\n source[key] = source[key].bind(this$);\n }\n }\n return source;\n}\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 const descr = Object.getOwnPropertyDescriptor(source, key);\n if (descr) {\n Object.defineProperty(target, key, descr);\n }\n }\n }\n return target;\n}\nexport function isIterable(x) {\n return x != null && typeof x === \"object\" && Symbol.iterator in x;\n}\nexport function isArrayLike(x) {\n return x != null && (Array.isArray(x) || ArrayBuffer.isView(x));\n}\nexport function isComparer(x) {\n return x != null && typeof x.Compare === \"function\";\n}\nexport function isComparable(x) {\n return x != null && typeof x.CompareTo === \"function\";\n}\nexport function isEquatable(x) {\n return x != null && typeof x.Equals === \"function\";\n}\nexport function isHashable(x) {\n return x != null && typeof x.GetHashCode === \"function\";\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 (isComparer(comparer)) {\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}\nlet ObjectRef = /** @class */ (() => {\n 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 }\n ObjectRef.idMap = new WeakMap();\n ObjectRef.count = 0;\n return ObjectRef;\n})();\nexport { ObjectRef };\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 (isHashable(x)) {\n return x.GetHashCode();\n }\n else if (isArrayLike(x)) {\n const len = x.length;\n const hashes = new Array(len);\n for (let i = 0; i < len; i++) {\n hashes[i] = structuralHash(x[i]);\n }\n return combineHashCodes(hashes);\n }\n else {\n return stringHash(String(x));\n }\n }\n }\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 (isEquatable(x)) {\n return x.Equals(y);\n }\n else if (isArrayLike(x)) {\n return isArrayLike(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 (isComparable(x)) {\n return x.CompareTo(y);\n }\n else if (isArrayLike(x) && isArrayLike(y)) {\n return compareArrays(x, y);\n }\n else if (x instanceof Date && y instanceof Date) {\n return 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, isSetter) => {\n if (!isSetter) {\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 SnakeCase: 2,\n SnakeCaseAllCaps: 3,\n KebabCase: 4,\n};\nfunction dashify(str, separator) {\n return str.replace(/[a-z]?[A-Z]/g, (m) => m.length === 1\n ? m.toLowerCase()\n : m.charAt(0) + separator + m.charAt(1).toLowerCase());\n}\nfunction changeCase(str, caseRule) {\n switch (caseRule) {\n case CaseRules.LowerFirst:\n return str.charAt(0).toLowerCase() + str.slice(1);\n case CaseRules.SnakeCase:\n return dashify(str, \"_\");\n case CaseRules.SnakeCaseAllCaps:\n return dashify(str, \"_\").toUpperCase();\n case CaseRules.KebabCase:\n return dashify(str, \"-\");\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 if (isArrayLike(col)) {\n return col.length;\n }\n else {\n let count = 0;\n for (const _ of col) {\n count++;\n }\n return count;\n }\n}\nexport function clear(col) {\n if (isArrayLike(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 undefined;\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 undefined;\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 undefined;\n }\n else if (CURRIED_KEY in f) {\n f = f[CURRIED_KEY];\n for (let 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(undefined, args.concat([a1]));\n case 2:\n return (a1) => (a2) => f.apply(undefined, args.concat([a1, a2]));\n case 3:\n return (a1) => (a2) => (a3) => f.apply(undefined, args.concat([a1, a2, a3]));\n case 4:\n return (a1) => (a2) => (a3) => (a4) => f.apply(undefined, args.concat([a1, a2, a3, a4]));\n case 5:\n return (a1) => (a2) => (a3) => (a4) => (a5) => f.apply(undefined, args.concat([a1, a2, a3, a4, a5]));\n case 6:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => f.apply(undefined, args.concat([a1, a2, a3, a4, a5, a6]));\n case 7:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => f.apply(undefined, args.concat([a1, a2, a3, a4, a5, a6, a7]));\n case 8:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => f.apply(undefined, 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 (arg) => mapArg(res, arg, mappings, idx + 1);\n }\n }\n return (arg) => mapArg(fn, arg, mappings, 0);\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","// tslint:disable: space-before-function-paren\nimport { combineHashCodes, compare, compareArrays, equalArrays, equals, identityHash, numberHash, structuralHash } 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 class SystemObject {\n toString() {\n return \"{\" + Object.entries(this).map(([k, v]) => k + \" = \" + String(v)).join(\";\\n \") + \"}\";\n }\n GetHashCode(x) {\n return identityHash(x !== null && x !== void 0 ? x : this);\n }\n Equals(x, y) {\n return x === (y !== null && y !== void 0 ? y : this);\n }\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 class List {\n constructor(head, tail) {\n this.head = head;\n this.tail = tail;\n }\n toString() {\n return \"[\" + Array.from(this).join(\"; \") + \"]\";\n }\n toJSON() {\n return Array.from(this);\n }\n [Symbol.iterator]() {\n let cur = this;\n return {\n next: () => {\n const value = cur === null || cur === void 0 ? void 0 : cur.head;\n const done = (cur === null || cur === void 0 ? void 0 : cur.tail) == null;\n cur = cur === null || cur === void 0 ? void 0 : cur.tail;\n return { done, value };\n },\n };\n }\n GetHashCode() {\n const hashes = Array.from(this).map(structuralHash);\n return combineHashCodes(hashes);\n }\n Equals(other) {\n return compareList(this, other) === 0;\n }\n CompareTo(other) {\n return compareList(this, other);\n }\n}\nexport class Union extends SystemObject {\n constructor(tag, name, ...fields) {\n super();\n this.tag = tag | 0;\n this.name = name;\n this.fields = fields;\n }\n toString() {\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 }\n toJSON() {\n return this.fields.length === 0\n ? this.name\n : [this.name].concat(this.fields);\n }\n GetHashCode() {\n const hashes = this.fields.map((x) => structuralHash(x));\n hashes.splice(0, 0, numberHash(this.tag));\n return combineHashCodes(hashes);\n }\n Equals(other) {\n return this === other\n || (sameType(this, other)\n && this.tag === other.tag\n && equalArrays(this.fields, other.fields));\n }\n CompareTo(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 }\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 class Record extends SystemObject {\n toString() {\n return \"{\" + Object.entries(this).map(([k, v]) => k + \" = \" + String(v)).join(\";\\n \") + \"}\";\n }\n toJSON() {\n return recordToJson(this);\n }\n GetHashCode() {\n const hashes = Object.values(this).map((v) => structuralHash(v));\n return combineHashCodes(hashes);\n }\n Equals(other) {\n return recordEquals(this, other);\n }\n CompareTo(other) {\n return recordCompare(this, other);\n }\n}\nexport function anonRecord(o) {\n return Object.assign(Object.create(Record.prototype), o);\n}\nexport class FSharpRef extends Record {\n constructor(contents) {\n super();\n this.contents = contents;\n }\n}\nexport const Exception = declare(function Exception(message) {\n this.stack = Error().stack;\n this.message = message;\n}, SystemObject);\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 class FSharpException extends Exception {\n toString() {\n var _a;\n // const fieldNames = getFSharpExceptionFieldNames(this);\n const fields = Object.entries(this).filter(([k, _]) => k !== \"message\" && k !== \"stack\");\n const len = fields.length;\n if (len === 0) {\n return (_a = this.message) !== null && _a !== void 0 ? _a : \"\";\n }\n else if (len === 1) {\n return this.message + \" \" + String(fields[1]);\n }\n else {\n return this.message + \" (\" + fields.map(([_, v]) => String(v)).join(\",\") + \")\";\n }\n }\n toJSON() {\n return recordToJson(this, getFSharpExceptionFieldNames);\n }\n GetHashCode() {\n const fields = Object.entries(this).filter(([k, _]) => k !== \"message\" && k !== \"stack\");\n const hashes = fields.map(([_, v]) => structuralHash(v));\n return combineHashCodes(hashes);\n }\n Equals(other) {\n return recordEquals(this, other, getFSharpExceptionFieldNames);\n }\n CompareTo(other) {\n return recordCompare(this, other, getFSharpExceptionFieldNames);\n }\n}\nexport class MatchFailureException extends FSharpException {\n constructor(arg1, arg2, arg3) {\n super();\n this.arg1 = arg1;\n this.arg2 = arg2 | 0;\n this.arg3 = arg3 | 0;\n this.message = \"The match cases were incomplete\";\n }\n}\nexport const Attribute = declare(function Attribute() { return; }, SystemObject);\n//# sourceMappingURL=Types.js.map","import { Union } from \"./Types\";\nimport { compare, equals, structuralHash } from \"./Util\";\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 if (other == null) {\n return false;\n }\n else {\n return equals(this.value, other instanceof Some ? other.value : other);\n }\n }\n CompareTo(other) {\n if (other == null) {\n return 1;\n }\n else {\n return compare(this.value, other instanceof Some ? other.value : other);\n }\n }\n}\nexport function some(x) {\n return x == null || x instanceof Some ? new Some(x) : x;\n}\nexport function value(x) {\n if (x == null) {\n throw new Error(\"Option has no value\");\n }\n else {\n return x instanceof Some ? x.value : x;\n }\n}\nexport function tryValue(x) {\n return x instanceof Some ? x.value : x;\n}\nexport function toArray(opt) {\n return (opt == null) ? [] : [value(opt)];\n}\nexport function defaultArg(opt, defaultValue) {\n return (opt != null) ? value(opt) : defaultValue;\n}\nexport function defaultArgWith(opt, defThunk) {\n return (opt != null) ? value(opt) : defThunk();\n}\nexport function filter(predicate, opt) {\n return (opt != null) ? (predicate(value(opt)) ? opt : undefined) : opt;\n}\nexport function map(mapping, opt) {\n return (opt != null) ? some(mapping(value(opt))) : undefined;\n}\nexport function map2(mapping, opt1, opt2) {\n return (opt1 != null && opt2 != null) ? mapping(value(opt1), value(opt2)) : undefined;\n}\nexport function map3(mapping, opt1, opt2, opt3) {\n return (opt1 != null && opt2 != null && opt3 != null) ? mapping(value(opt1), value(opt2), value(opt3)) : undefined;\n}\nexport function bind(binder, opt) {\n return opt != null ? binder(value(opt)) : undefined;\n}\nexport function tryOp(op, arg) {\n try {\n return some(op(arg));\n }\n catch (_a) {\n return undefined;\n }\n}\n// CHOICE\nexport class Choice extends Union {\n}\nexport class Choice3 extends Union {\n}\nexport class Choice4 extends Union {\n}\nexport class Choice5 extends Union {\n}\nexport class Choice6 extends Union {\n}\nexport class Choice7 extends Union {\n}\nexport function choice1Of2(x) {\n return new Choice(0, \"Choice1Of2\", x);\n}\nexport function choice2Of2(x) {\n return new Choice(1, \"Choice2Of2\", x);\n}\nexport function tryValueIfChoice1Of2(x) {\n return x.tag === 0 ? some(x.fields[0]) : undefined;\n}\nexport function tryValueIfChoice2Of2(x) {\n return x.tag === 1 ? some(x.fields[0]) : undefined;\n}\n// RESULT\nexport class Result extends Union {\n}\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 { anonRecord as makeAnonRecord, Record, Union } 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, construct, fields, cases, enumCases) {\n this.fullname = fullname;\n this.generics = generics;\n this.construct = construct;\n this.fields = fields;\n this.cases = cases;\n this.enumCases = enumCases;\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 class_type(fullname, generics, construct) {\n return new TypeInfo(fullname, generics, construct);\n}\nexport function record_type(fullname, generics, construct, fields) {\n return new TypeInfo(fullname, generics, construct, fields);\n}\nexport function anonRecord_type(...fields) {\n return new TypeInfo(\"\", undefined, undefined, () => fields);\n}\nexport function union_type(fullname, generics, construct, cases) {\n const t = new TypeInfo(fullname, generics, construct, undefined, () => cases().map((x, i) => typeof x === \"string\"\n ? new CaseInfo(t, i, x)\n : new CaseInfo(t, i, x[0], x[1])));\n return t;\n}\nexport function tuple_type(...generics) {\n return new TypeInfo(\"System.Tuple`\" + generics.length, generics);\n}\nexport function delegate_type(...generics) {\n return new TypeInfo(\"System.Func`\" + generics.length, generics);\n}\nexport function lambda_type(argType, returnType) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpFunc`2\", [argType, returnType]);\n}\nexport function option_type(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpOption`1\", [generic]);\n}\nexport function list_type(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Collections.FSharpList`1\", [generic]);\n}\nexport function array_type(generic) {\n return new TypeInfo(generic.fullname + \"[]\", [generic]);\n}\nexport function enum_type(fullname, underlyingType, enumCases) {\n return new TypeInfo(fullname, [underlyingType], undefined, undefined, undefined, enumCases);\n}\nexport const obj_type = new TypeInfo(\"System.Object\");\nexport const unit_type = new TypeInfo(\"Microsoft.FSharp.Core.Unit\");\nexport const char_type = new TypeInfo(\"System.Char\");\nexport const string_type = new TypeInfo(\"System.String\");\nexport const bool_type = new TypeInfo(\"System.Boolean\");\nexport const int8_type = new TypeInfo(\"System.SByte\");\nexport const uint8_type = new TypeInfo(\"System.Byte\");\nexport const int16_type = new TypeInfo(\"System.Int16\");\nexport const uint16_type = new TypeInfo(\"System.UInt16\");\nexport const int32_type = new TypeInfo(\"System.Int32\");\nexport const uint32_type = new TypeInfo(\"System.UInt32\");\nexport const float32_type = new TypeInfo(\"System.Single\");\nexport const float64_type = new TypeInfo(\"System.Double\");\nexport const decimal_type = 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 var _a;\n return isArray(t) ? (_a = t.generics) === null || _a === void 0 ? void 0 : _a[0] : undefined;\n}\nexport function isGenericType(t) {\n return t.generics != null && t.generics.length > 0;\n}\nexport function isEnum(t) {\n return t.enumCases != null && t.enumCases.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_type));\n}\nexport function getEnumUnderlyingType(t) {\n var _a;\n return (_a = t.generics) === null || _a === void 0 ? void 0 : _a[0];\n}\nexport function getEnumValues(t) {\n if (isEnum(t) && t.enumCases != null) {\n return t.enumCases.map((kv) => kv[1]);\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nexport function getEnumNames(t) {\n if (isEnum(t) && t.enumCases != null) {\n return t.enumCases.map((kv) => kv[0]);\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nfunction getEnumCase(t, v) {\n if (t.enumCases != null) {\n if (typeof v === \"string\") {\n for (const kv of t.enumCases) {\n if (kv[0] === v) {\n return kv;\n }\n }\n throw new Error(`'${v}' was not found in ${t.fullname}`);\n }\n else {\n for (const kv of t.enumCases) {\n if (kv[1] === v) {\n return kv;\n }\n }\n // .NET returns the number even if it doesn't match any of the cases\n return [\"\", v];\n }\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nexport function parseEnum(t, str) {\n // TODO: better int parsing here, parseInt ceils floats: \"4.8\" -> 4\n const value = parseInt(str, 10);\n return getEnumCase(t, isNaN(value) ? str : value)[1];\n}\nexport function tryParseEnum(t, str) {\n try {\n const v = parseEnum(t, str);\n return [true, v];\n }\n catch (_a) {\n // supress error\n }\n return [false, NaN];\n}\nexport function getEnumName(t, v) {\n return getEnumCase(t, v)[0];\n}\nexport function isEnumDefined(t, v) {\n try {\n const kv = getEnumCase(t, v);\n return kv[0] != null && kv[0] !== \"\";\n }\n catch (_a) {\n // supress error\n }\n return false;\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) && t.generics != null) {\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) && t.generics != null) {\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;\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 uci.declaringType.construct != null\n ? new uci.declaringType.construct(uci.tag, uci.name, ...values)\n : {};\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.construct != null\n ? new t.construct(...values)\n : makeAnonRecord(fields.reduce((obj, [key, _t], i) => {\n obj[key] = values[i];\n return obj;\n }, {}));\n}\nexport function makeTuple(values, _t) {\n return values;\n}\nexport function makeGenericType(t, generics) {\n return new TypeInfo(t.fullname, generics, t.construct, t.fields, t.cases);\n}\nexport function createInstance(t, consArgs) {\n // TODO: Check if consArgs length is same as t.construct?\n // (Arg types can still be different)\n if (typeof t.construct === \"function\") {\n return new t.construct(...(consArgs !== null && consArgs !== void 0 ? consArgs : []));\n }\n else {\n throw new Error(`Cannot access constructor of ${t.fullname}`);\n }\n}\nexport function getValue(propertyInfo, v) {\n return v[propertyInfo[0]];\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","// export type decimal = Decimal;\nexport 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","// Adapted from: https://github.com/dcodeIO/long.js/blob/master/src/long.js\n// Apache License 2.0: https://github.com/dcodeIO/long.js/blob/master/LICENSE\nexport default Long;\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 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 let h1 = this.unsigned ? 1 : 0;\n h1 = ((h1 << 5) + h1) ^ this.high;\n h1 = ((h1 << 5) + h1) ^ this.low;\n return h1;\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); };\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 */\nexport function isLong(obj) {\n return (obj && obj[\"__isLong__\"]) === true;\n}\n/**\n * Tests if the specified object is a Long.\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n */\n// Long.isLong = isLong;\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 * Returns a Long representing the given 32 bit integer value.\n * @function\n * @param {number} value The 32 bit integer in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromInt = fromInt;\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 negate(fromNumber(-value, unsigned));\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\n}\n/**\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n * @function\n * @param {number} value The number in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromNumber = fromNumber;\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 * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n * assumed to use 32 bits.\n * @function\n * @param {number} lowBits The low 32 bits\n * @param {number} highBits The high 32 bits\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromBits = fromBits;\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 negate(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 = add(multiply(result, power), fromNumber(value));\n }\n else {\n result = multiply(result, radixToPower);\n result = add(result, fromNumber(value));\n }\n }\n result.unsigned = unsigned;\n return result;\n}\n/**\n * Returns a Long representation of the given string, written using the specified radix.\n * @function\n * @param {string} str The textual representation of the Long\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromString = fromString;\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/**\n * Converts the specified value to a Long using the appropriate from* function for its type.\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long}\n */\n// Long.fromValue = fromValue;\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 * Signed zero.\n * @type {!Long}\n */\n// Long.ZERO = ZERO;\n/**\n * @type {!Long}\n * @inner\n */\nexport var UZERO = fromInt(0, true);\n/**\n * Unsigned zero.\n * @type {!Long}\n */\n// Long.UZERO = UZERO;\n/**\n * @type {!Long}\n * @inner\n */\nexport var ONE = fromInt(1);\n/**\n * Signed one.\n * @type {!Long}\n */\n// Long.ONE = ONE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var UONE = fromInt(1, true);\n/**\n * Unsigned one.\n * @type {!Long}\n */\n// Long.UONE = UONE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var NEG_ONE = fromInt(-1);\n/**\n * Signed negative one.\n * @type {!Long}\n */\n// Long.NEG_ONE = NEG_ONE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var MAX_VALUE = fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0, false);\n/**\n * Maximum signed value.\n * @type {!Long}\n */\n// Long.MAX_VALUE = MAX_VALUE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF | 0, 0xFFFFFFFF | 0, true);\n/**\n * Maximum unsigned value.\n * @type {!Long}\n */\n// Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n/**\n * Minimum signed value.\n * @type {!Long}\n */\n// Long.MIN_VALUE = MIN_VALUE;\n/**\n * @alias Long.prototype\n * @inner\n */\n// var LongPrototype = Long.prototype;\n/**\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 = divide($this, radixLong), rem1 = subtract(multiply(div, radixLong), $this);\n return toString(div, radix) + toInt(rem1).toString(radix);\n }\n else\n return '-' + toString(negate($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 = divide(rem, radixToPower), intval = toInt(subtract(rem, 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 * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 * @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(negate($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 * @this {!Long}\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 equals zero. This is an alias of {@link Long#isZero}.\n * @returns {boolean}\n */\n// LongPrototype.eqz = LongPrototype.isZero;\n/**\n * Tests if this Long's value is negative.\n * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 equals the specified's. This is an alias of {@link Long#equals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.eq = LongPrototype.equals;\n/**\n * Tests if this Long's value differs from the specified's.\n * @this {!Long}\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 differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.neq = LongPrototype.notEquals;\n/**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.ne = LongPrototype.notEquals;\n/**\n * Tests if this Long's value is less than the specified's.\n * @this {!Long}\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 the specified's. This is an alias of {@link Long#lessThan}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.lt = LongPrototype.lessThan;\n/**\n * Tests if this Long's value is less than or equal the specified's.\n * @this {!Long}\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 less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.lte = LongPrototype.lessThanOrEqual;\n/**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.le = LongPrototype.lessThanOrEqual;\n/**\n * Tests if this Long's value is greater than the specified's.\n * @this {!Long}\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 the specified's. This is an alias of {@link Long#greaterThan}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.gt = LongPrototype.greaterThan;\n/**\n * Tests if this Long's value is greater than or equal the specified's.\n * @this {!Long}\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 * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n/**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n/**\n * Compares this Long's value with the specified's.\n * @this {!Long}\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(subtract($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 * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n * @function\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 */\n// LongPrototype.comp = LongPrototype.compare;\n/**\n * Negates this Long's value.\n * @this {!Long}\n * @returns {!Long} Negated Long\n */\nexport function negate($this) {\n if (!$this.unsigned && equals($this, MIN_VALUE))\n return MIN_VALUE;\n return add(not($this), ONE);\n}\n;\n/**\n * Negates this Long's value. This is an alias of {@link Long#negate}.\n * @function\n * @returns {!Long} Negated Long\n */\n// LongPrototype.neg = LongPrototype.negate;\n/**\n * Returns the sum of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} addend Addend\n * @returns {!Long} Sum\n */\nexport function add($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 * @this {!Long}\n * @param {!Long|number|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\nexport function subtract($this, subtrahend) {\n if (!isLong(subtrahend))\n subtrahend = fromValue(subtrahend);\n return add($this, negate(subtrahend));\n}\n;\n/**\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n * @function\n * @param {!Long|number|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n// LongPrototype.sub = LongPrototype.subtract;\n/**\n * Returns the product of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} multiplier Multiplier\n * @returns {!Long} Product\n */\nexport function 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 multiply(negate($this), negate(multiplier));\n else\n return negate(multiply(negate($this), multiplier));\n }\n else if (isNegative(multiplier))\n return negate(multiply($this, negate(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 the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n * @function\n * @param {!Long|number|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n// LongPrototype.mul = LongPrototype.multiply;\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 * @this {!Long}\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Quotient\n */\nexport function divide($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 = shiftRight($this, 1);\n approx = shiftLeft(divide(halfThis, divisor), 1);\n if (equals(approx, ZERO)) {\n return isNegative(divisor) ? ONE : NEG_ONE;\n }\n else {\n rem = subtract($this, multiply(divisor, approx));\n res = add(approx, divide(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 divide(negate($this), negate(divisor));\n return negate(divide(negate($this), divisor));\n }\n else if (isNegative(divisor))\n return negate(divide($this, negate(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, shiftRightUnsigned($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 = multiply(approxRes, divisor);\n while (isNegative(approxRem) || greaterThan(approxRem, rem)) {\n approx -= delta;\n approxRes = fromNumber(approx, $this.unsigned);\n approxRem = 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 = add(res, approxRes);\n rem = subtract(rem, approxRem);\n }\n return res;\n}\n;\n/**\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n// LongPrototype.div = LongPrototype.divide;\n/**\n * Returns this Long modulo the specified.\n * @this {!Long}\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\nexport function modulo($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 subtract($this, multiply(divide($this, divisor), divisor));\n}\n;\n/**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n// LongPrototype.mod = LongPrototype.modulo;\n/**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n// LongPrototype.rem = LongPrototype.modulo;\n/**\n * Returns the bitwise NOT of this Long.\n * @this {!Long}\n * @returns {!Long}\n */\nexport function not($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 * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function and($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 * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function or($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 * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function xor($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 * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function shiftLeft($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 shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shl = LongPrototype.shiftLeft;\n/**\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function shiftRight($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 arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shr = LongPrototype.shiftRight;\n/**\n * Returns this Long with bits logically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function shiftRightUnsigned($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 * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n/**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n/**\n * Returns this Long with bits rotated to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\nexport const rotateLeft = function rotateLeft(numBits) {\n var b;\n if (isLong(numBits))\n numBits = numBits.toInt();\n if ((numBits &= 63) === 0)\n return this;\n if (numBits === 32)\n return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = (32 - numBits);\n return fromBits(((this.low << numBits) | (this.high >>> b)), ((this.high << numBits) | (this.low >>> b)), this.unsigned);\n }\n numBits -= 32;\n b = (32 - numBits);\n return fromBits(((this.high << numBits) | (this.low >>> b)), ((this.low << numBits) | (this.high >>> b)), this.unsigned);\n};\n/**\n * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n// LongPrototype.rotl = LongPrototype.rotateLeft;\n/**\n * Returns this Long with bits rotated to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\nexport const rotateRight = function rotateRight(numBits) {\n var b;\n if (isLong(numBits))\n numBits = numBits.toInt();\n if ((numBits &= 63) === 0)\n return this;\n if (numBits === 32)\n return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = (32 - numBits);\n return fromBits(((this.high << b) | (this.low >>> numBits)), ((this.low << b) | (this.high >>> numBits)), this.unsigned);\n }\n numBits -= 32;\n b = (32 - numBits);\n return fromBits(((this.low << b) | (this.high >>> numBits)), ((this.high << b) | (this.low >>> numBits)), this.unsigned);\n};\n/**\n * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n// LongPrototype.rotr = LongPrototype.rotateRight;\n/**\n * Converts this Long to signed.\n * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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 * @this {!Long}\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;\n//# sourceMappingURL=long.js.map","import { isValid } from \"./Int32\";\nimport * as LongLib from \"./lib/long\";\nexport default LongLib.Long;\nexport const get_Zero = LongLib.ZERO;\nexport const get_One = LongLib.ONE;\nexport const op_Addition = LongLib.add;\nexport const op_Subtraction = LongLib.subtract;\nexport const op_Multiply = LongLib.multiply;\nexport const op_Division = LongLib.divide;\nexport const op_Modulus = LongLib.modulo;\nexport const op_UnaryNegation = LongLib.negate;\nexport const op_LeftShift = LongLib.shiftLeft;\nexport const op_RightShift = LongLib.shiftRight;\nexport const op_RightShiftUnsigned = LongLib.shiftRightUnsigned;\nexport const op_BitwiseAnd = LongLib.and;\nexport const op_BitwiseOr = LongLib.or;\nexport const op_ExclusiveOr = LongLib.xor;\nexport const op_LogicalNot = LongLib.not;\nexport const op_LessThan = LongLib.lessThan;\nexport const op_LessThanOrEqual = LongLib.lessThanOrEqual;\nexport const op_GreaterThan = LongLib.greaterThan;\nexport const op_GreaterThanOrEqual = LongLib.greaterThanOrEqual;\nexport const op_Equality = LongLib.equals;\nexport const op_Inequality = LongLib.notEquals;\nexport const equals = LongLib.equals;\nexport const compare = LongLib.compare;\nexport const fromInt = LongLib.fromInt;\nexport const fromBits = LongLib.fromBits;\nexport const fromBytes = LongLib.fromBytes;\nexport const fromNumber = LongLib.fromNumber;\nexport const fromString = LongLib.fromString;\nexport const fromValue = LongLib.fromValue;\nexport const toInt = LongLib.toInt;\nexport const toBytes = LongLib.toBytes;\nexport const toNumber = LongLib.toNumber;\nexport const toString = LongLib.toString;\nexport const getLowBits = LongLib.getLowBits;\nexport const getHighBits = LongLib.getHighBits;\nexport const getLowBitsUnsigned = LongLib.getLowBitsUnsigned;\nexport const getHighBitsUnsigned = LongLib.getHighBitsUnsigned;\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 abs(x) {\n if (!x.unsigned && LongLib.isNegative(x)) {\n return op_UnaryNegation(x);\n }\n else {\n return x;\n }\n}\nexport function fromInteger(value, unsigned, kind) {\n let x = value;\n let 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:\n x = value >>> 0;\n break;\n }\n return LongLib.fromBits(x, xh >> 31, unsigned);\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 LongLib.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, LongLib.ZERO];\n}\nexport function unixEpochMillisecondsToTicks(ms, offset) {\n return op_Multiply(op_Addition(op_Addition(LongLib.fromNumber(ms), 62135596800000), offset), 10000);\n}\nexport function ticksToUnixEpochMilliseconds(ticks) {\n return LongLib.toNumber(op_Subtraction(op_Division(ticks, 10000), 62135596800000));\n}\nexport function makeRangeStepFunction(step, last, unsigned) {\n const stepComparedWithZero = LongLib.compare(step, unsigned ? LongLib.UZERO : LongLib.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 = LongLib.compare(x, last);\n if ((stepGreaterThanZero && comparedWithLast <= 0)\n || (!stepGreaterThanZero && comparedWithLast >= 0)) {\n return [x, op_Addition(x, step)];\n }\n else {\n return undefined;\n }\n };\n}\n//# sourceMappingURL=Long.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 = Number.NaN;\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 (Number.isNaN(rep)) {\n return match;\n }\n else {\n return (rep < 10 && match.length > 1) ? \"0\" + rep : \"\" + rep;\n }\n });\n}\nfunction dateToStringWithOffset(date, format) {\n var _a, _b, _c;\n const d = new Date(date.getTime() + ((_a = date.offset) !== null && _a !== void 0 ? _a : 0));\n if (typeof format !== \"string\") {\n return d.toISOString().replace(/\\.\\d+/, \"\").replace(/[A-Z]|\\.\\d+/g, \" \") + dateOffsetToString(((_b = date.offset) !== null && _b !== void 0 ? _b : 0));\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, ((_c = date.offset) !== null && _c !== void 0 ? _c : 0));\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, _provider) {\n return date.offset != null\n ? dateToStringWithOffset(date, format)\n : dateToStringWithKind(date, format);\n}\nexport 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 var _a;\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() + ((_a = date.offset) !== null && _a !== void 0 ? _a : 0), 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(input) {\n if (input === null) {\n throw new Error(\"Value cannot be null when parsing DateTime\");\n }\n if (input.trim() === \"\") {\n throw new Error(\"An empty string is not recognized as a valid DateTime\");\n }\n let date = new Date(input);\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(input);\n if (m != null) {\n let baseDate;\n let timeInSeconds = 0;\n if (m[2] != null) {\n const timeParts = m[2].split(\":\");\n timeInSeconds =\n 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, _refValue) {\n try {\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 const newDate = DateTime(d.getTime() + ts, d.kind);\n if (d.kind === 2 /* Local */) {\n const oldTzOffset = d.getTimezoneOffset();\n const newTzOffset = newDate.getTimezoneOffset();\n return oldTzOffset !== newTzOffset\n ? DateTime(newDate.getTime() + (newTzOffset - oldTzOffset) * 60000, d.kind)\n : newDate;\n }\n else {\n return newDate;\n }\n}\nexport function addDays(d, v) {\n return add(d, v * 86400000);\n}\nexport function addHours(d, v) {\n return add(d, v * 3600000);\n}\nexport function addMinutes(d, v) {\n return add(d, v * 60000);\n}\nexport function addSeconds(d, v) {\n return add(d, v * 1000);\n}\nexport function addMilliseconds(d, v) {\n return add(d, v);\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 ? add(d, -that)\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}\nexport default DateTime;\n//# sourceMappingURL=Date.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 undefined;\n }\n };\n}\n//# sourceMappingURL=Decimal.js.map","export function create(pattern, options = 0) {\n // Supported RegexOptions\n // * IgnoreCase: 0x0001\n // * Multiline: 0x0002\n // * Singleline: 0x0010\n // * ECMAScript: 0x0100 (ignored)\n if ((options & ~(1 ^ 2 ^ 16 ^ 256)) !== 0) {\n throw new Error(\"RegexOptions only supports: IgnoreCase, Multiline, Singleline and ECMAScript\");\n }\n let flags = \"g\";\n flags += options & 1 ? \"i\" : \"\"; // 0x0001 RegexOptions.IgnoreCase\n flags += options & 2 ? \"m\" : \"\";\n flags += options & 16 ? \"s\" : \"\";\n return new RegExp(pattern, flags);\n}\n// From http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\nexport function escape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n}\nexport function unescape(str) {\n return str.replace(/\\\\([\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|])/g, \"$1\");\n}\nexport function isMatch(str, pattern, options = 0) {\n let reg;\n reg = str instanceof RegExp\n ? (reg = str, str = pattern, reg.lastIndex = options, reg)\n : reg = create(pattern, options);\n return reg.test(str);\n}\nexport function match(str, pattern, options = 0) {\n let reg;\n reg = str instanceof RegExp\n ? (reg = str, str = pattern, reg.lastIndex = options, reg)\n : reg = create(pattern, options);\n return reg.exec(str);\n}\nexport function matches(str, pattern, options = 0) {\n let reg;\n reg = str instanceof RegExp\n ? (reg = str, str = pattern, reg.lastIndex = options, reg)\n : reg = create(pattern, options);\n if (!reg.global) {\n throw new Error(\"Non-global RegExp\"); // Prevent infinite loop\n }\n let m = reg.exec(str);\n const matches = [];\n while (m !== null) {\n matches.push(m);\n m = reg.exec(str);\n }\n return matches;\n}\nexport function options(reg) {\n let options = 256; // ECMAScript\n options |= reg.ignoreCase ? 1 : 0;\n options |= reg.multiline ? 2 : 0;\n return options;\n}\nexport function replace(reg, input, replacement, limit, offset = 0) {\n function replacer() {\n let res = arguments[0];\n if (limit) {\n limit--;\n const match = [];\n const len = arguments.length;\n for (let i = 0; i < len - 2; i++) {\n match.push(arguments[i]);\n }\n match.index = arguments[len - 2];\n match.input = arguments[len - 1];\n res = replacement(match);\n }\n return res;\n }\n if (typeof reg === \"string\") {\n const tmp = reg;\n reg = create(input, limit !== null && limit !== void 0 ? limit : 0);\n input = tmp;\n limit = undefined;\n }\n if (typeof replacement === \"function\") {\n limit = limit == null ? -1 : limit;\n return input.substring(0, offset) + input.substring(offset).replace(reg, replacer);\n }\n else {\n // $0 doesn't work with JS regex, see #1155\n replacement = replacement.replace(/\\$0/g, (_s) => \"$&\");\n if (limit != null) {\n let m;\n const sub1 = input.substring(offset);\n const _matches = matches(reg, sub1);\n const sub2 = matches.length > limit ? (m = _matches[limit - 1], sub1.substring(0, m.index + m[0].length)) : sub1;\n return input.substring(0, offset) + sub2.replace(reg, replacement)\n + input.substring(offset + sub2.length);\n }\n else {\n return input.replace(reg, replacement);\n }\n }\n}\nexport function split(reg, input, limit, offset = 0) {\n if (typeof reg === \"string\") {\n const tmp = reg;\n reg = create(input, limit !== null && limit !== void 0 ? limit : 0);\n input = tmp;\n limit = undefined;\n }\n input = input.substring(offset);\n return input.split(reg, limit);\n}\n//# sourceMappingURL=RegExp.js.map","import { toString as dateToString } from \"./Date\";\nimport Decimal from \"./Decimal\";\nimport Long, * as _Long from \"./Long\";\nimport { escape } from \"./RegExp\";\nconst fsFormatRegExp = /(^|[^%])%([0+\\- ]*)(\\d+)?(?:\\.(\\d+))?(\\w)/;\nconst formatRegExp = /\\{(\\d+)(,-?\\d+)?(?:\\:([a-zA-Z])(\\d{0,2})|\\:(.+?))?\\}/g;\n// These are used for formatting and only take longs and decimals into account (no bigint)\nfunction isNumeric(x) {\n return typeof x === \"number\" || x instanceof Long || x instanceof Decimal;\n}\nfunction isLessThan(x, y) {\n if (x instanceof Long) {\n return _Long.compare(x, y) < 0;\n }\n else if (x instanceof Decimal) {\n return x.cmp(y) < 0;\n }\n else {\n return x < y;\n }\n}\nfunction multiply(x, y) {\n if (x instanceof Long) {\n return _Long.op_Multiply(x, y);\n }\n else if (x instanceof Decimal) {\n return x.mul(y);\n }\n else {\n return x * y;\n }\n}\nfunction toFixed(x, dp) {\n if (x instanceof Long) {\n return String(x) + (0).toFixed(dp).substr(1);\n }\n else {\n return x.toFixed(dp);\n }\n}\nfunction toPrecision(x, sd) {\n if (x instanceof Long) {\n return String(x) + (0).toPrecision(sd).substr(1);\n }\n else {\n return x.toPrecision(sd);\n }\n}\nfunction toExponential(x, dp) {\n if (x instanceof Long) {\n return String(x) + (0).toExponential(dp).substr(1);\n }\n else {\n return x.toExponential(dp);\n }\n}\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 _Long.toString(x.unsigned ? x : _Long.fromBytes(_Long.toBytes(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, padLength, precision, format) => {\n let sign = \"\";\n if (isNumeric(rep)) {\n if (format.toLowerCase() !== \"x\") {\n if (isLessThan(rep, 0)) {\n rep = multiply(rep, -1);\n sign = \"-\";\n }\n else {\n if (flags.indexOf(\" \") >= 0) {\n sign = \" \";\n }\n else if (flags.indexOf(\"+\") >= 0) {\n sign = \"+\";\n }\n }\n }\n precision = precision == null ? null : parseInt(precision, 10);\n switch (format) {\n case \"f\":\n case \"F\":\n precision = precision != null ? precision : 6;\n rep = toFixed(rep, precision);\n break;\n case \"g\":\n case \"G\":\n rep = precision != null ? toPrecision(rep, precision) : toPrecision(rep);\n break;\n case \"e\":\n case \"E\":\n rep = precision != null ? toExponential(rep, precision) : toExponential(rep);\n break;\n case \"x\":\n rep = toHex(rep);\n break;\n case \"X\":\n rep = toHex(rep).toUpperCase();\n break;\n default: // AOid\n rep = String(rep);\n break;\n }\n }\n padLength = parseInt(padLength, 10);\n if (!isNaN(padLength)) {\n const zeroFlag = flags.indexOf(\"0\") >= 0; // Use '0' for left padding\n const minusFlag = flags.indexOf(\"-\") >= 0; // Right padding\n const ch = minusFlag || !zeroFlag ? \" \" : \"0\";\n if (ch === \"0\") {\n rep = padLeft(rep, padLength - sign.length, ch, minusFlag);\n rep = sign + rep;\n }\n else {\n rep = padLeft(sign + rep, padLength, ch, minusFlag);\n }\n }\n else {\n rep = sign + rep;\n }\n const once = prefix + 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, (_, idx, padLength, format, precision, pattern) => {\n let rep = args[idx];\n if (isNumeric(rep)) {\n precision = precision == null ? null : parseInt(precision, 10);\n switch (format) {\n case \"f\":\n case \"F\":\n precision = precision != null ? precision : 2;\n rep = toFixed(rep, precision);\n break;\n case \"g\":\n case \"G\":\n rep = precision != null ? toPrecision(rep, precision) : toPrecision(rep);\n break;\n case \"e\":\n case \"E\":\n rep = precision != null ? toExponential(rep, precision) : toExponential(rep);\n break;\n case \"p\":\n case \"P\":\n precision = precision != null ? precision : 2;\n rep = toFixed(multiply(rep, 100), precision) + \" %\";\n break;\n case \"d\":\n case \"D\":\n rep = precision != null ? padLeft(String(rep), precision, \"0\") : String(rep);\n break;\n case \"x\":\n case \"X\":\n rep = precision != null ? padLeft(toHex(rep), precision, \"0\") : toHex(rep);\n if (format === \"X\") {\n rep = rep.toUpperCase();\n }\n break;\n default:\n if (pattern) {\n let sign = \"\";\n rep = pattern.replace(/(0+)(\\.0+)?/, (_, intPart, decimalPart) => {\n if (isLessThan(rep, 0)) {\n rep = multiply(rep, -1);\n sign = \"-\";\n }\n rep = toFixed(rep, decimalPart != null ? decimalPart.length - 1 : 0);\n return padLeft(rep, (intPart || \"\").length - sign.length + (decimalPart != null ? decimalPart.length : 0), \"0\");\n });\n rep = sign + rep;\n }\n }\n }\n else if (rep instanceof Date) {\n rep = dateToString(rep, pattern || format);\n }\n padLength = parseInt((padLength || \" \").substring(1), 10);\n if (!isNaN(padLength)) {\n rep = padLeft(String(rep), Math.abs(padLength), \" \", padLength < 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 concat(...xs) {\n return xs.map((x) => String(x)).join(\"\");\n}\nexport function join(delimiter, xs) {\n if (Array.isArray(xs)) {\n return xs.join(delimiter);\n }\n else {\n return Array.from(xs).join(delimiter);\n }\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 xs.slice(startIndex, endIndexPlusOne).join(delimiter);\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 : undefined;\n removeEmpty = typeof removeEmpty === \"number\" ? removeEmpty : undefined;\n if (count && 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}\nexport function substring(str, startIndex, length) {\n if ((startIndex + (length || 0) > str.length)) {\n throw new Error(\"Invalid startIndex and/or length\");\n }\n return length != null ? str.substr(startIndex, length) : str.substr(startIndex);\n}\n//# sourceMappingURL=String.js.map","module Utils\n\nopen Fable\nopen Fable.Core.JsInterop\n\nlet tryFocus elemId =\n try\n Browser.Dom.window.document.getElementById(elemId)?focus()\n with | _ -> ()\n\n\nlet checkError (x : Thoth.Fetch.FetchError) =\n match x with\n | Thoth.Fetch.FetchFailed y ->\n if y.Status = 401 then\n LocalStorage.deleteSession ()\n Browser.Dom.window.location.reload ()\n | _ -> ()\n\nlet fromUtcToLocalDate utcString = \n try \n System.DateTime.Parse( utcString ).ToString \"dd/MM/yyyy\"\n with \n | _ -> utcString\n\nlet fromDateToLocalDate dateString =\n try\n System.DateTime.Parse dateString\n |> fun x -> x.ToString \"dd/MM/yyyy\"\n with\n | _ -> dateString","import { trim } from \"./String\";\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,2}[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[\\)\\}]{0,2}$/;\nconst guidRegexNoHyphen = /^([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})$/;\nconst guidRegexHex = /^\\{0x[0-9a-f]{8},(0x[0-9a-f]{4},){2}\\{(0x[0-9a-f]{2},){7}0x[0-9a-f]{2}\\}\\}$/;\nconst guidHexCaptures = /^([0-9a-f]{8})-(([0-9a-f]{4})-)(([0-9a-f]{4})-)([0-9a-f]{2})([0-9a-f]{2})-([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/;\nexport function toString(str, format, _provider) {\n if (format && (format === null || format === void 0 ? void 0 : format.length) > 0) {\n switch (format) {\n case \"N\":\n return str.replace(/-/g, '');\n case \"D\":\n return str;\n case \"B\":\n return \"{\" + str + \"}\";\n case \"P\":\n return \"(\" + str + \")\";\n case \"X\":\n return str.replace(guidHexCaptures, \"{0x$1,0x$3,0x$5,{0x$6,0x$7,0x$8,0x$9,0x$10,0x$11,0x$12,0x$13}}\");\n default:\n throw new Error(\"Unrecognized Guid print format\");\n }\n }\n else {\n return str;\n }\n}\n/** Validates UUID as specified in RFC4122 (versions 1-5). */\nexport function validateGuid(str, doNotThrow) {\n function hyphenateGuid(str) {\n return str.replace(guidRegexNoHyphen, \"$1-$2-$3-$4-$5\");\n }\n const wsTrimAndLowered = str.trim().toLowerCase();\n if (guidRegex.test(wsTrimAndLowered)) {\n const containersTrimmed = trim(wsTrimAndLowered, \"{\", \"}\", \"(\", \")\");\n return doNotThrow ? [true, containersTrimmed] : containersTrimmed;\n }\n else if (guidRegexNoHyphen.test(wsTrimAndLowered)) {\n const hyphenatedGuid = hyphenateGuid(wsTrimAndLowered);\n return doNotThrow ? [true, hyphenatedGuid] : hyphenatedGuid;\n }\n else if (guidRegexHex.test(wsTrimAndLowered)) {\n const hyphenatedGuid = hyphenateGuid(wsTrimAndLowered.replace(/[\\{\\},]|0x/g, ''));\n return doNotThrow ? [true, hyphenatedGuid] : hyphenatedGuid;\n }\n else if (doNotThrow) {\n return [false, \"00000000-0000-0000-0000-000000000000\"];\n }\n else {\n throw new Error(\"Guid should contain 32 digits with 4 dashes: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\n }\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 const guid = _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 return guid;\n}\n//# sourceMappingURL=Guid.js.map","import { makeRangeStepFunction as makeDecimalRangeStepFunction } from \"./Decimal\";\nimport { makeRangeStepFunction as makeLongRangeStepFunction } from \"./Long\";\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: undefined };\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}\nfunction makeSeq(f) {\n const seq = {\n [Symbol.iterator]: f,\n toString: () => \"seq [\" + Array.from(seq).join(\"; \") + \"]\",\n };\n return seq;\n}\nexport function ofArray(xs) {\n return delay(() => unfold((i) => i != null && i < xs.length ? [xs[i], i + 1] : undefined, 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, undefined];\n return unfold(() => {\n var _a, _b;\n let cur;\n if (!firstDone) {\n cur = (_a = iters[0]) === null || _a === void 0 ? void 0 : _a.next();\n if (cur != null && !cur.done) {\n return [cur.value, iters];\n }\n else {\n firstDone = true;\n iters = [undefined, ys[Symbol.iterator]()];\n }\n }\n cur = (_b = iters[1]) === null || _b === void 0 ? void 0 : _b.next();\n return cur != null && !cur.done ? [cur.value, iters] : undefined;\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;\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 = cur.value;\n hasFinished = true;\n }\n else {\n innerIter = undefined;\n }\n }\n }\n return innerIter != null ? [output, innerIter] : undefined;\n }, undefined);\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 undefined;\n }, xs[Symbol.iterator]()));\n}\nexport function compareWith(f, xs, ys) {\n const nonZero = tryFind((i) => i !== 0, map2(f, xs, ys));\n return nonZero != null ? value(nonZero) : length(xs) - length(ys);\n}\nexport function delay(f) {\n return makeSeq(() => f()[Symbol.iterator]());\n}\nexport function empty() {\n return [];\n}\nexport function singleton(y) {\n return [y];\n}\nexport function enumerateFromFunctions(factory, moveNext, current) {\n return delay(() => unfold((e) => moveNext(e) ? [current(e), e] : undefined, factory()));\n}\nexport function enumerateWhile(cond, xs) {\n return concat(unfold(() => cond() ? [xs, true] : undefined, undefined));\n}\nexport function enumerateThenFinally(xs, finalFn) {\n return delay(() => {\n let iter;\n try {\n iter = xs[Symbol.iterator]();\n }\n catch (err) {\n try {\n return empty();\n }\n finally {\n finalFn();\n }\n }\n return unfold((it) => {\n try {\n const cur = it.next();\n return !cur.done ? [cur.value, it] : undefined;\n }\n catch (err) {\n return undefined;\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 undefined;\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 ? undefined : 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] : undefined, 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 undefined;\n }\n if (Array.isArray(xs) || ArrayBuffer.isView(xs)) {\n return i < xs.length ? some(xs[i]) : undefined;\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 undefined;\n}\nexport function item(i, xs) {\n return __failIfNone(tryItem(i, xs));\n}\nexport function iterate(f, xs) {\n fold((_, x) => (f(x), undefined), undefined, xs);\n}\nexport function iterate2(f, xs, ys) {\n fold2((_, x, y) => (f(x, y), undefined), undefined, xs, ys);\n}\nexport function iterateIndexed(f, xs) {\n fold((_, x, i) => (f(i !== null && i !== void 0 ? i : 0, x), undefined), undefined, xs);\n}\nexport function iterateIndexed2(f, xs, ys) {\n fold2((_, x, y, i) => (f(i !== null && i !== void 0 ? i : 0, x, y), undefined), undefined, 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) ? undefined : 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] : undefined;\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] : undefined;\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), undefined] : undefined;\n }, undefined);\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), undefined] : undefined;\n }, undefined);\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), undefined] : undefined;\n }, undefined);\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 delay(() => {\n const iter = xs[Symbol.iterator]();\n const cur = iter.next();\n if (cur.done) {\n return empty();\n }\n const hd = cur.value;\n const tl = tail(xs);\n const ys = scan(([_, last], next) => [last, next], [hd, hd], tl);\n return skip(1, ys);\n });\n}\nexport function rangeChar(first, last) {\n return delay(() => unfold((x) => x <= last ? [x, String.fromCharCode(x.charCodeAt(0) + 1)] : undefined, 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] : undefined, 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 undefined;\n }, undefined);\n });\n}\nexport function scanBack(f, xs, seed) {\n return reverse(scan((acc, x) => f(x, acc), seed, reverse(xs)));\n}\nexport function skip(n, xs) {\n return makeSeq(() => {\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}\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 return skip(1, xs);\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 undefined;\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(() => {\n const cur = iter.next();\n if (!cur.done && f(cur.value)) {\n return [cur.value, undefined];\n }\n return undefined;\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 ? undefined : 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 undefined;\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 undefined;\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 undefined;\n}\nexport function pick(f, xs) {\n return __failIfNone(tryPick(f, xs));\n}\nexport function unfold(f, fst) {\n return makeSeq(() => {\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 const iter = {\n next() {\n const res = f(acc);\n if (res != null) {\n const v = value(res);\n if (v != null) {\n acc = v[1];\n return { done: false, value: v[0] };\n }\n }\n return { done: true, value: undefined };\n },\n };\n return iter;\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 makeSeq(() => {\n let window = [];\n const iter = source[Symbol.iterator]();\n const iter2 = {\n next() {\n let cur;\n while (window.length < windowSize) {\n if ((cur = iter.next()).done) {\n return { done: true, value: undefined };\n }\n window.push(cur.value);\n }\n const value = window;\n window = window.slice(1);\n return { done: false, value };\n },\n };\n return iter2;\n });\n}\nexport function transpose(source) {\n return makeSeq(() => {\n const iters = Array.from(source, (x) => x[Symbol.iterator]());\n const iter = {\n next() {\n if (iters.length === 0) {\n return { done: true, value: undefined }; // empty sequence\n }\n const results = Array.from(iters, (iter) => iter.next());\n if (results[0].done) {\n if (!results.every((x) => x.done)) {\n throw new Error(\"Sequences have different lengths\");\n }\n return { done: true, value: undefined };\n }\n else {\n if (!results.every((x) => !x.done)) {\n throw new Error(\"Sequences have different lengths\");\n }\n const values = results.map((x) => x.value);\n return { done: false, value: values };\n }\n },\n };\n return iter;\n });\n}\n//# sourceMappingURL=Seq.js.map","import { declare, FSharpRef } from \"./Types.js\";\nimport { iterateIndexed, toIterator, getEnumerator, delay, collect, map, sumBy, iterate } from \"./Seq.js\";\nimport { class_type } from \"./Reflection.js\";\nimport { equals, getItemFromDict, tryGetValue } from \"./Util.js\";\nimport { format } from \"./String.js\";\nexport const MutableMap$00602 = declare(function Fable_Collections_MutableMap(pairs, comparer) {\n const $this$$1 = this;\n const this$ = new FSharpRef(null);\n $this$$1.comparer = comparer;\n this$.contents = $this$$1;\n $this$$1.hashMap = new Map([]);\n $this$$1[\"init@20-1\"] = 1;\n iterate(function (pair) {\n MutableMap$00602$$Add$$5BDDA1(this$.contents, pair[0], pair[1]);\n }, pairs);\n void null;\n});\nexport function MutableMap$00602$reflection($gen$$4, $gen$$5) {\n return class_type(\"Fable.Collections.MutableMap`2\", [$gen$$4, $gen$$5], MutableMap$00602);\n}\nexport function MutableMap$00602$$$$002Ector$$6623D9B3(pairs, comparer) {\n return this instanceof MutableMap$00602 ? MutableMap$00602.call(this, pairs, comparer) : new MutableMap$00602(pairs, comparer);\n}\n\nfunction MutableMap$00602$$TryFindIndex$$2B595(this$$$1, k) {\n const h = this$$$1.comparer.GetHashCode(k) | 0;\n const matchValue = tryGetValue(this$$$1.hashMap, h, null);\n\n if (matchValue[0]) {\n return [true, h, matchValue[1].findIndex(function (pair$$1) {\n return this$$$1.comparer.Equals(k, pair$$1[0]);\n })];\n } else {\n return [false, h, -1];\n }\n}\n\nexport function MutableMap$00602$$TryFind$$2B595(this$$$2, k$$1) {\n const matchValue$$1 = MutableMap$00602$$TryFindIndex$$2B595(this$$$2, k$$1);\n var $target$$10;\n\n if (matchValue$$1[0]) {\n if (matchValue$$1[2] > -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 return getItemFromDict(this$$$2.hashMap, matchValue$$1[1])[matchValue$$1[2]];\n }\n\n case 1:\n {\n return undefined;\n }\n }\n}\nexport function MutableMap$00602$$get_Comparer(this$$$3) {\n return this$$$3.comparer;\n}\nexport function MutableMap$00602$$Clear(this$$$4) {\n this$$$4.hashMap.clear();\n}\nexport function MutableMap$00602$$get_Count(this$$$5) {\n const source = this$$$5.hashMap.values();\n return sumBy(function projection(pairs$$2) {\n return pairs$$2.length;\n }, source, {\n GetZero() {\n return 0;\n },\n\n Add($x$$2, $y$$3) {\n return $x$$2 + $y$$3;\n }\n\n }) | 0;\n}\nexport function MutableMap$00602$$get_Item$$2B595(this$$$6, k$$2) {\n const matchValue$$2 = MutableMap$00602$$TryFind$$2B595(this$$$6, k$$2);\n\n if (matchValue$$2 != null) {\n const pair$$2 = matchValue$$2;\n return pair$$2[1];\n } else {\n throw new Error(\"The item was not found in collection\");\n }\n}\nexport function MutableMap$00602$$set_Item$$5BDDA1(this$$$7, k$$3, v) {\n const matchValue$$3 = MutableMap$00602$$TryFindIndex$$2B595(this$$$7, k$$3);\n var $target$$20;\n\n if (matchValue$$3[0]) {\n if (matchValue$$3[2] > -1) {\n $target$$20 = 0;\n } else {\n $target$$20 = 1;\n }\n } else {\n $target$$20 = 1;\n }\n\n switch ($target$$20) {\n case 0:\n {\n getItemFromDict(this$$$7.hashMap, matchValue$$3[1])[matchValue$$3[2]] = [k$$3, v];\n break;\n }\n\n case 1:\n {\n if (matchValue$$3[0]) {\n const value = void getItemFromDict(this$$$7.hashMap, matchValue$$3[1]).push([k$$3, v]);\n void null;\n } else {\n this$$$7.hashMap.set(matchValue$$3[1], [[k$$3, v]]);\n }\n\n break;\n }\n }\n}\nexport function MutableMap$00602$$Add$$5BDDA1(this$$$8, k$$4, v$$1) {\n const matchValue$$4 = MutableMap$00602$$TryFindIndex$$2B595(this$$$8, k$$4);\n var $target$$24;\n\n if (matchValue$$4[0]) {\n if (matchValue$$4[2] > -1) {\n $target$$24 = 0;\n } else {\n $target$$24 = 1;\n }\n } else {\n $target$$24 = 1;\n }\n\n switch ($target$$24) {\n case 0:\n {\n const msg = format(\"An item with the same key has already been added. Key: {0}\", k$$4);\n throw new Error(msg);\n break;\n }\n\n case 1:\n {\n if (matchValue$$4[0]) {\n const value$$1 = void getItemFromDict(this$$$8.hashMap, matchValue$$4[1]).push([k$$4, v$$1]);\n void null;\n } else {\n this$$$8.hashMap.set(matchValue$$4[1], [[k$$4, v$$1]]);\n }\n\n break;\n }\n }\n}\nexport function MutableMap$00602$$ContainsKey$$2B595(this$$$9, k$$5) {\n const matchValue$$5 = MutableMap$00602$$TryFindIndex$$2B595(this$$$9, k$$5);\n var $target$$27;\n\n if (matchValue$$5[0]) {\n if (matchValue$$5[2] > -1) {\n $target$$27 = 0;\n } else {\n $target$$27 = 1;\n }\n } else {\n $target$$27 = 1;\n }\n\n switch ($target$$27) {\n case 0:\n {\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\nexport function MutableMap$00602$$Remove$$2B595(this$$$10, k$$6) {\n const matchValue$$6 = MutableMap$00602$$TryFindIndex$$2B595(this$$$10, k$$6);\n var $target$$30;\n\n if (matchValue$$6[0]) {\n if (matchValue$$6[2] > -1) {\n $target$$30 = 0;\n } else {\n $target$$30 = 1;\n }\n } else {\n $target$$30 = 1;\n }\n\n switch ($target$$30) {\n case 0:\n {\n getItemFromDict(this$$$10.hashMap, matchValue$$6[1]).splice(matchValue$$6[2], 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$$$11 = this;\n return toIterator((elems = delay(function () {\n return collect(function (pairs$$3) {\n return map(function (pair$$3) {\n return pair$$3;\n }, pairs$$3);\n }, this$$$11.hashMap.values());\n }), getEnumerator(elems)));\n};\n\nMutableMap$00602.prototype.Add = function (item) {\n const this$$$12 = this;\n MutableMap$00602$$Add$$5BDDA1(this$$$12, item[0], item[1]);\n};\n\nMutableMap$00602.prototype.Clear = function () {\n const this$$$13 = this;\n MutableMap$00602$$Clear(this$$$13);\n};\n\nMutableMap$00602.prototype.Contains = function (item$$1) {\n var p;\n const this$$$14 = this;\n const matchValue$$7 = MutableMap$00602$$TryFind$$2B595(this$$$14, item$$1[0]);\n var $target$$31;\n\n if (matchValue$$7 != null) {\n if (p = matchValue$$7, equals(p[1], item$$1[1])) {\n $target$$31 = 0;\n } else {\n $target$$31 = 1;\n }\n } else {\n $target$$31 = 1;\n }\n\n switch ($target$$31) {\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$$$15 = this;\n iterateIndexed(function action(i$$10, e) {\n array[arrayIndex + i$$10] = e;\n }, this$$$15);\n};\n\nObject.defineProperty(MutableMap$00602.prototype, \"Count\", {\n \"get\": function () {\n const this$$$16 = this;\n return MutableMap$00602$$get_Count(this$$$16) | 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$$$18 = this;\n const matchValue$$8 = MutableMap$00602$$TryFind$$2B595(this$$$18, item$$2[0]);\n\n if (matchValue$$8 != null) {\n const pair$$4 = matchValue$$8;\n\n if (equals(pair$$4[1], item$$2[1])) {\n const value$$2 = MutableMap$00602$$Remove$$2B595(this$$$18, item$$2[0]);\n void value$$2;\n } else {\n void 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$$$19 = this;\n return MutableMap$00602$$get_Count(this$$$19) | 0;\n }\n});\n\nMutableMap$00602.prototype.clear = function () {\n const this$$$20 = this;\n MutableMap$00602$$Clear(this$$$20);\n};\n\nMutableMap$00602.prototype.delete = function (k$$7) {\n const this$$$21 = this;\n return MutableMap$00602$$Remove$$2B595(this$$$21, k$$7);\n};\n\nMutableMap$00602.prototype.entries = function () {\n const this$$$22 = this;\n return map(function mapping(x) {\n return x;\n }, this$$$22);\n};\n\nMutableMap$00602.prototype.get = function (k$$8) {\n const this$$$23 = this;\n return MutableMap$00602$$get_Item$$2B595(this$$$23, k$$8);\n};\n\nMutableMap$00602.prototype.has = function (k$$9) {\n const this$$$24 = this;\n return MutableMap$00602$$ContainsKey$$2B595(this$$$24, k$$9);\n};\n\nMutableMap$00602.prototype.keys = function () {\n const this$$$25 = this;\n return map(function mapping$$1(pair$$5) {\n return pair$$5[0];\n }, this$$$25);\n};\n\nMutableMap$00602.prototype.set = function (k$$10, v$$2) {\n const this$$$26 = this;\n MutableMap$00602$$set_Item$$5BDDA1(this$$$26, k$$10, v$$2);\n return this$$$26;\n};\n\nMutableMap$00602.prototype.values = function () {\n const this$$$27 = this;\n return map(function mapping$$2(pair$$6) {\n return pair$$6[1];\n }, this$$$27);\n};","import { Record, List, declare, Union } from \"./Types.js\";\nimport { class_type, record_type, bool_type, list_type, union_type, int32_type } from \"./Reflection.js\";\nimport { value as value$$3, some } from \"./Option.js\";\nimport { iterate as iterate$$1, empty as empty$$1, toIterator, map as map$$2, unfold, getEnumerator, fold as fold$$1 } from \"./Seq.js\";\nimport { compare, structuralHash, isDisposable } from \"./Util.js\";\nimport { join, format } from \"./String.js\";\nimport { MutableMap$00602$$$$002Ector$$6623D9B3 as MutableMap$002400602$0024$0024$0024$0024002Ector$0024$00246623D9B3 } from \"./MutableMap\";\nexport const MapTree$00602 = declare(function Map_MapTree(tag, name, ...fields) {\n this.tag = tag | 0;\n this.name = name;\n this.fields = fields;\n}, Union);\nexport function MapTree$00602$reflection($gen$$3, $gen$$4) {\n return union_type(\"Map.MapTree`2\", [$gen$$3, $gen$$4], MapTree$00602, () => [\"MapEmpty\", [\"MapOne\", [[\"Item1\", $gen$$3], [\"Item2\", $gen$$4]]], [\"MapNode\", [[\"Item1\", $gen$$3], [\"Item2\", $gen$$4], [\"Item3\", MapTree$00602$reflection($gen$$3, $gen$$4)], [\"Item4\", MapTree$00602$reflection($gen$$3, $gen$$4)], [\"Item5\", int32_type]]]]);\n}\nexport function MapTreeModule$$$sizeAux($acc$$5, $m$$6) {\n MapTreeModule$$$sizeAux: while (true) {\n const acc = $acc$$5,\n m = $m$$6;\n\n switch (m.tag) {\n case 1:\n {\n return acc + 1 | 0;\n }\n\n case 2:\n {\n $acc$$5 = MapTreeModule$$$sizeAux(acc + 1, m.fields[2]);\n $m$$6 = m.fields[3];\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 return _arg1.fields[4] | 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$$14;\n\n if (l$$1.tag === 0) {\n if (r$$1.tag === 0) {\n $target$$14 = 0;\n } else {\n $target$$14 = 1;\n }\n } else {\n $target$$14 = 1;\n }\n\n switch ($target$$14) {\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 if (MapTreeModule$$$height(t2.fields[2]) > t1h + 1) {\n if (t2.fields[2].tag === 2) {\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1, k$$1, v$$1, t2.fields[2].fields[2]), t2.fields[2].fields[0], t2.fields[2].fields[1], MapTreeModule$$$mk(t2.fields[2].fields[3], t2.fields[0], t2.fields[1], t2.fields[3]));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1, k$$1, v$$1, t2.fields[2]), t2.fields[0], t2.fields[1], t2.fields[3]);\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else if (t1h > t2h + 2) {\n if (t1.tag === 2) {\n if (MapTreeModule$$$height(t1.fields[3]) > t2h + 1) {\n if (t1.fields[3].tag === 2) {\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1.fields[2], t1.fields[0], t1.fields[1], t1.fields[3].fields[2]), t1.fields[3].fields[0], t1.fields[3].fields[1], MapTreeModule$$$mk(t1.fields[3].fields[3], k$$1, v$$1, t2));\n } else {\n throw new Error(\"re balance\");\n }\n } else {\n return MapTreeModule$$$mk(t1.fields[2], t1.fields[0], t1.fields[1], MapTreeModule$$$mk(t1.fields[3], 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 c = comparer.Compare(k$$2, m$$3.fields[0]) | 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 c$$1 = comparer.Compare(k$$2, m$$3.fields[0]) | 0;\n\n if (c$$1 < 0) {\n return MapTreeModule$$$rebalance(MapTreeModule$$$add(comparer, k$$2, v$$2, m$$3.fields[2]), m$$3.fields[0], m$$3.fields[1], m$$3.fields[3]);\n } else if (c$$1 === 0) {\n return new MapTree$00602(2, \"MapNode\", k$$2, v$$2, m$$3.fields[2], m$$3.fields[3], m$$3.fields[4]);\n } else {\n return MapTreeModule$$$rebalance(m$$3.fields[2], m$$3.fields[0], m$$3.fields[1], MapTreeModule$$$add(comparer, k$$2, v$$2, m$$3.fields[3]));\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$$23, $k$$3$$24, $m$$4$$25) {\n MapTreeModule$$$find: while (true) {\n const comparer$$1 = $comparer$$1$$23,\n k$$3 = $k$$3$$24,\n m$$4 = $m$$4$$25;\n\n switch (m$$4.tag) {\n case 1:\n {\n const c$$2 = comparer$$1.Compare(k$$3, m$$4.fields[0]) | 0;\n\n if (c$$2 === 0) {\n return m$$4.fields[1];\n } else {\n throw new Error(\"key not found\");\n }\n }\n\n case 2:\n {\n const c$$3 = comparer$$1.Compare(k$$3, m$$4.fields[0]) | 0;\n\n if (c$$3 < 0) {\n $comparer$$1$$23 = comparer$$1;\n $k$$3$$24 = k$$3;\n $m$$4$$25 = m$$4.fields[2];\n continue MapTreeModule$$$find;\n } else if (c$$3 === 0) {\n return m$$4.fields[1];\n } else {\n $comparer$$1$$23 = comparer$$1;\n $k$$3$$24 = k$$3;\n $m$$4$$25 = m$$4.fields[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$$26, $k$$4$$27, $m$$5$$28) {\n MapTreeModule$$$tryFind: while (true) {\n const comparer$$2 = $comparer$$2$$26,\n k$$4 = $k$$4$$27,\n m$$5 = $m$$5$$28;\n\n switch (m$$5.tag) {\n case 1:\n {\n const c$$4 = comparer$$2.Compare(k$$4, m$$5.fields[0]) | 0;\n\n if (c$$4 === 0) {\n return some(m$$5.fields[1]);\n } else {\n return undefined;\n }\n }\n\n case 2:\n {\n const c$$5 = comparer$$2.Compare(k$$4, m$$5.fields[0]) | 0;\n\n if (c$$5 < 0) {\n $comparer$$2$$26 = comparer$$2;\n $k$$4$$27 = k$$4;\n $m$$5$$28 = m$$5.fields[2];\n continue MapTreeModule$$$tryFind;\n } else if (c$$5 === 0) {\n return some(m$$5.fields[1]);\n } else {\n $comparer$$2$$26 = comparer$$2;\n $k$$4$$27 = k$$4;\n $m$$5$$28 = m$$5.fields[3];\n continue MapTreeModule$$$tryFind;\n }\n }\n\n default:\n {\n return undefined;\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($comparer$$4$$35, $f$$1$$36, $s$$37, $acc_0$$38, $acc_1$$39) {\n MapTreeModule$$$partitionAux: while (true) {\n const comparer$$4 = $comparer$$4$$35,\n f$$1 = $f$$1$$36,\n s = $s$$37,\n acc_0 = $acc_0$$38,\n acc_1 = $acc_1$$39;\n\n switch (s.tag) {\n case 1:\n {\n return MapTreeModule$$$partition1(comparer$$4, f$$1, s.fields[0], s.fields[1], acc_0, acc_1);\n }\n\n case 2:\n {\n const acc$$2 = MapTreeModule$$$partitionAux(comparer$$4, f$$1, s.fields[3], acc_0, acc_1);\n const acc$$3 = MapTreeModule$$$partition1(comparer$$4, f$$1, s.fields[0], s.fields[1], acc$$2[0], acc$$2[1]);\n $comparer$$4$$35 = comparer$$4;\n $f$$1$$36 = f$$1;\n $s$$37 = s.fields[2];\n $acc_0$$38 = acc$$3[0];\n $acc_1$$39 = acc$$3[1];\n continue MapTreeModule$$$partitionAux;\n }\n\n default:\n {\n return [acc_0, 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($comparer$$7$$48, $f$$4$$49, $s$$2$$50, $acc$$5$$51) {\n MapTreeModule$$$filterAux: while (true) {\n const comparer$$7 = $comparer$$7$$48,\n f$$4 = $f$$4$$49,\n s$$2 = $s$$2$$50,\n acc$$5 = $acc$$5$$51;\n\n switch (s$$2.tag) {\n case 1:\n {\n return MapTreeModule$$$filter1(comparer$$7, f$$4, s$$2.fields[0], s$$2.fields[1], acc$$5);\n }\n\n case 2:\n {\n const acc$$6 = MapTreeModule$$$filterAux(comparer$$7, f$$4, s$$2.fields[2], acc$$5);\n const acc$$7 = MapTreeModule$$$filter1(comparer$$7, f$$4, s$$2.fields[0], s$$2.fields[1], acc$$6);\n $comparer$$7$$48 = comparer$$7;\n $f$$4$$49 = f$$4;\n $s$$2$$50 = s$$2.fields[3];\n $acc$$5$$51 = 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 return [m$$6.fields[0], m$$6.fields[1], new MapTree$00602(0, \"MapEmpty\")];\n }\n\n case 2:\n {\n if (m$$6.fields[2].tag === 0) {\n return [m$$6.fields[0], m$$6.fields[1], m$$6.fields[3]];\n } else {\n const patternInput = MapTreeModule$$$spliceOutSuccessor(m$$6.fields[2]);\n return [patternInput[0], patternInput[1], MapTreeModule$$$mk(patternInput[2], m$$6.fields[0], m$$6.fields[1], m$$6.fields[3])];\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 c$$6 = comparer$$9.Compare(k$$11, m$$7.fields[0]) | 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 c$$7 = comparer$$9.Compare(k$$11, m$$7.fields[0]) | 0;\n\n if (c$$7 < 0) {\n return MapTreeModule$$$rebalance(MapTreeModule$$$remove(comparer$$9, k$$11, m$$7.fields[2]), m$$7.fields[0], m$$7.fields[1], m$$7.fields[3]);\n } else if (c$$7 === 0) {\n if (m$$7.fields[2].tag === 0) {\n return m$$7.fields[3];\n } else if (m$$7.fields[3].tag === 0) {\n return m$$7.fields[2];\n } else {\n const patternInput$$1 = MapTreeModule$$$spliceOutSuccessor(m$$7.fields[3]);\n return MapTreeModule$$$mk(m$$7.fields[2], patternInput$$1[0], patternInput$$1[1], patternInput$$1[2]);\n }\n } else {\n return MapTreeModule$$$rebalance(m$$7.fields[2], m$$7.fields[0], m$$7.fields[1], MapTreeModule$$$remove(comparer$$9, k$$11, m$$7.fields[3]));\n }\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$mem($comparer$$10$$59, $k$$12$$60, $m$$8$$61) {\n MapTreeModule$$$mem: while (true) {\n const comparer$$10 = $comparer$$10$$59,\n k$$12 = $k$$12$$60,\n m$$8 = $m$$8$$61;\n\n switch (m$$8.tag) {\n case 1:\n {\n return comparer$$10.Compare(k$$12, m$$8.fields[0]) === 0;\n }\n\n case 2:\n {\n const c$$8 = comparer$$10.Compare(k$$12, m$$8.fields[0]) | 0;\n\n if (c$$8 < 0) {\n $comparer$$10$$59 = comparer$$10;\n $k$$12$$60 = k$$12;\n $m$$8$$61 = m$$8.fields[2];\n continue MapTreeModule$$$mem;\n } else if (c$$8 === 0) {\n return true;\n } else {\n $comparer$$10$$59 = comparer$$10;\n $k$$12$$60 = k$$12;\n $m$$8$$61 = m$$8.fields[3];\n continue MapTreeModule$$$mem;\n }\n }\n\n default:\n {\n return false;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$iter($f$$6$$62, $m$$9$$63) {\n MapTreeModule$$$iter: while (true) {\n const f$$6 = $f$$6$$62,\n m$$9 = $m$$9$$63;\n\n switch (m$$9.tag) {\n case 1:\n {\n f$$6(m$$9.fields[0], m$$9.fields[1]);\n break;\n }\n\n case 2:\n {\n MapTreeModule$$$iter(f$$6, m$$9.fields[2]);\n f$$6(m$$9.fields[0], m$$9.fields[1]);\n $f$$6$$62 = f$$6;\n $m$$9$$63 = m$$9.fields[3];\n continue MapTreeModule$$$iter;\n break;\n }\n\n default:\n {\n void null;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$tryPick($f$$7$$64, $m$$10$$65) {\n MapTreeModule$$$tryPick: while (true) {\n const f$$7 = $f$$7$$64,\n m$$10 = $m$$10$$65;\n\n switch (m$$10.tag) {\n case 1:\n {\n return f$$7(m$$10.fields[0], m$$10.fields[1]);\n }\n\n case 2:\n {\n const matchValue$$2 = MapTreeModule$$$tryPick(f$$7, m$$10.fields[2]);\n\n if (matchValue$$2 == null) {\n const matchValue$$3 = f$$7(m$$10.fields[0], m$$10.fields[1]);\n\n if (matchValue$$3 == null) {\n $f$$7$$64 = f$$7;\n $m$$10$$65 = m$$10.fields[3];\n continue MapTreeModule$$$tryPick;\n } else {\n return matchValue$$3;\n }\n } else {\n return matchValue$$2;\n }\n }\n\n default:\n {\n return undefined;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$exists($f$$8$$66, $m$$11$$67) {\n MapTreeModule$$$exists: while (true) {\n const f$$8 = $f$$8$$66,\n m$$11 = $m$$11$$67;\n\n switch (m$$11.tag) {\n case 1:\n {\n return f$$8(m$$11.fields[0], m$$11.fields[1]);\n }\n\n case 2:\n {\n if (MapTreeModule$$$exists(f$$8, m$$11.fields[2]) ? true : f$$8(m$$11.fields[0], m$$11.fields[1])) {\n return true;\n } else {\n $f$$8$$66 = f$$8;\n $m$$11$$67 = m$$11.fields[3];\n continue MapTreeModule$$$exists;\n }\n }\n\n default:\n {\n return false;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$forall($f$$9$$68, $m$$12$$69) {\n MapTreeModule$$$forall: while (true) {\n const f$$9 = $f$$9$$68,\n m$$12 = $m$$12$$69;\n\n switch (m$$12.tag) {\n case 1:\n {\n return f$$9(m$$12.fields[0], m$$12.fields[1]);\n }\n\n case 2:\n {\n if (MapTreeModule$$$forall(f$$9, m$$12.fields[2]) ? f$$9(m$$12.fields[0], m$$12.fields[1]) : false) {\n $f$$9$$68 = f$$9;\n $m$$12$$69 = m$$12.fields[3];\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 return new MapTree$00602(1, \"MapOne\", m$$13.fields[0], f$$10(m$$13.fields[1]));\n }\n\n case 2:\n {\n const l2 = MapTreeModule$$$map(f$$10, m$$13.fields[2]);\n const v2$$16 = f$$10(m$$13.fields[1]);\n const r2 = MapTreeModule$$$map(f$$10, m$$13.fields[3]);\n return new MapTree$00602(2, \"MapNode\", m$$13.fields[0], v2$$16, l2, r2, m$$13.fields[4]);\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 return new MapTree$00602(1, \"MapOne\", m$$14.fields[0], f$$11(m$$14.fields[0], m$$14.fields[1]));\n }\n\n case 2:\n {\n const l2$$1 = MapTreeModule$$$mapi(f$$11, m$$14.fields[2]);\n const v2$$17 = f$$11(m$$14.fields[0], m$$14.fields[1]);\n const r2$$1 = MapTreeModule$$$mapi(f$$11, m$$14.fields[3]);\n return new MapTree$00602(2, \"MapNode\", m$$14.fields[0], v2$$17, l2$$1, r2$$1, m$$14.fields[4]);\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$foldBack($f$$12$$74, $m$$15$$75, $x$$1$$76) {\n MapTreeModule$$$foldBack: while (true) {\n const f$$12 = $f$$12$$74,\n m$$15 = $m$$15$$75,\n x$$1 = $x$$1$$76;\n\n switch (m$$15.tag) {\n case 1:\n {\n return f$$12(m$$15.fields[0], m$$15.fields[1], x$$1);\n }\n\n case 2:\n {\n const x$$2 = MapTreeModule$$$foldBack(f$$12, m$$15.fields[3], x$$1);\n const x$$3 = f$$12(m$$15.fields[0], m$$15.fields[1], x$$2);\n $f$$12$$74 = f$$12;\n $m$$15$$75 = m$$15.fields[2];\n $x$$1$$76 = 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($f$$13$$77, $x$$4$$78, $m$$16$$79) {\n MapTreeModule$$$fold: while (true) {\n const f$$13 = $f$$13$$77,\n x$$4 = $x$$4$$78,\n m$$16 = $m$$16$$79;\n\n switch (m$$16.tag) {\n case 1:\n {\n return f$$13(x$$4, m$$16.fields[0], m$$16.fields[1]);\n }\n\n case 2:\n {\n const x$$5 = MapTreeModule$$$fold(f$$13, x$$4, m$$16.fields[2]);\n const x$$6 = f$$13(x$$5, m$$16.fields[0], m$$16.fields[1]);\n $f$$13$$77 = f$$13;\n $x$$4$$78 = x$$6;\n $m$$16$$79 = m$$16.fields[3];\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 cLoKey = comparer$$11.Compare(lo, m$$17.fields[0]) | 0;\n const cKeyHi = comparer$$11.Compare(m$$17.fields[0], hi) | 0;\n const x$$8 = (cLoKey <= 0 ? cKeyHi <= 0 : false) ? f$$14(m$$17.fields[0], m$$17.fields[1], x$$7) : x$$7;\n return x$$8;\n }\n\n case 2:\n {\n const cLoKey$$1 = comparer$$11.Compare(lo, m$$17.fields[0]) | 0;\n const cKeyHi$$1 = comparer$$11.Compare(m$$17.fields[0], hi) | 0;\n const x$$9 = cLoKey$$1 < 0 ? MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, m$$17.fields[2], x$$7) : x$$7;\n const x$$10 = (cLoKey$$1 <= 0 ? cKeyHi$$1 <= 0 : false) ? f$$14(m$$17.fields[0], m$$17.fields[1], x$$9) : x$$9;\n const x$$11 = cKeyHi$$1 < 0 ? MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, m$$17.fields[3], 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$$92, $acc$$8$$93) {\n MapTreeModule$$$loop: while (true) {\n const m$$19 = $m$$19$$92,\n acc$$8 = $acc$$8$$93;\n\n switch (m$$19.tag) {\n case 1:\n {\n return new List([m$$19.fields[0], m$$19.fields[1]], acc$$8);\n }\n\n case 2:\n {\n $m$$19$$92 = m$$19.fields[2];\n $acc$$8$$93 = new List([m$$19.fields[0], m$$19.fields[1]], MapTreeModule$$$loop(m$$19.fields[3], acc$$8));\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 return MapTreeModule$$$add(comparer$$13, tupledArg[0], tupledArg[1], acc$$9);\n }, MapTreeModule$$$empty(), l$$20);\n}\nexport function MapTreeModule$$$mkFromEnumerator($comparer$$14$$97, $acc$$10$$98, $e$$99) {\n MapTreeModule$$$mkFromEnumerator: while (true) {\n const comparer$$14 = $comparer$$14$$97,\n acc$$10 = $acc$$10$$98,\n e = $e$$99;\n\n if (e.MoveNext()) {\n const patternInput$$2 = e.Current;\n $comparer$$14$$97 = comparer$$14;\n $acc$$10$$98 = MapTreeModule$$$add(comparer$$14, patternInput$$2[0], patternInput$$2[1], acc$$10);\n $e$$99 = e;\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 res$$2 = MapTreeModule$$$add(comparer$$15, patternInput$$3[0], patternInput$$3[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 } else {\n void null;\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(stack, started) {\n this.stack = stack;\n this.started = started;\n}, Record);\nexport function MapTreeModule$002EMapIterator$00602$reflection($gen$$109, $gen$$110) {\n return record_type(\"Map.MapTreeModule.MapIterator`2\", [$gen$$109, $gen$$110], MapTreeModule$002EMapIterator$00602, () => [[\"stack\", list_type(MapTree$00602$reflection($gen$$109, $gen$$110))], [\"started\", bool_type]]);\n}\nexport function MapTreeModule$$$collapseLHS($stack$$111) {\n MapTreeModule$$$collapseLHS: while (true) {\n const stack = $stack$$111;\n\n if (stack.tail != null) {\n if (stack.head.tag === 1) {\n return stack;\n } else if (stack.head.tag === 2) {\n $stack$$111 = new List(stack.head.fields[2], new List(new MapTree$00602(1, \"MapOne\", stack.head.fields[0], stack.head.fields[1]), new List(stack.head.fields[3], stack.tail)));\n continue MapTreeModule$$$collapseLHS;\n } else {\n $stack$$111 = stack.tail;\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 return [matchValue$$4.head.fields[0], matchValue$$4.head.fields[1]];\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 i$$3.stack = MapTreeModule$$$collapseLHS(matchValue$$5.tail);\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 void null;\n});\nexport function MapTreeModule$002EmkIEnumerator$0027$00602$reflection($gen$$115, $gen$$116) {\n return class_type(\"Map.MapTreeModule.mkIEnumerator'`2\", [$gen$$115, $gen$$116], MapTreeModule$002EmkIEnumerator$0027$00602);\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 void null;\n};\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 undefined;\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 void null;\n});\nexport function FSharpMap$reflection($gen$$120, $gen$$121) {\n return class_type(\"Map.FSharpMap\", [$gen$$120, $gen$$121], FSharpMap);\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$$3(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 return [FSharpMap$$$$002Ector$$58ADD115(__$$19.comparer, patternInput$$4[0]), FSharpMap$$$$002Ector$$58ADD115(__$$19.comparer, patternInput$$4[1])];\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 let str;\n let strings;\n strings = map$$2(function toStr(kv) {\n return format(\"({0}, {1})\", kv[0], kv[1]);\n }, this$);\n str = join(\"; \", strings);\n return \"map [\" + str + \"]\";\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 patternInput$$5 = e$$1.Current;\n const activePatternResult3682 = patternInput$$5;\n res$$3 = combineHash(res$$3, structuralHash(activePatternResult3682[0]));\n res$$3 = combineHash(res$$3, structuralHash(activePatternResult3682[1]));\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 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(obj));\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 } else {\n void null;\n }\n }\n } finally {\n if (isDisposable(e1)) {\n e1.Dispose();\n } else {\n void null;\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 const source$$1 = MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$7));\n return map$$2(function mapping(kv$$1) {\n return kv$$1[0];\n }, source$$1);\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 const source$$2 = MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$8));\n return map$$2(function mapping$$1(kv$$2) {\n return kv$$2[1];\n }, source$$2);\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$$3(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 let _arg1$$2;\n\n const m$$42 = FSharpMap$$get_Tree(m$$41);\n _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 undefined;\n }\n }, m$$42);\n\n if (_arg1$$2 == null) {\n throw new Error(\"Key not found\");\n } else {\n const k$$43 = value$$3(_arg1$$2);\n return k$$43;\n }\n}\nexport function tryFindKey(f$$40, m$$43) {\n const m$$44 = FSharpMap$$get_Tree(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 undefined;\n }\n }, m$$44);\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 let res$$6;\n const len = FSharpMap$$get_Count(m$$46) | 0;\n res$$6 = new Array(len);\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}\nexport function createMutable(source$$3, comparer$$22) {\n const map$$1 = MutableMap$002400602$0024$0024$0024$0024002Ector$0024$00246623D9B3(source$$3, comparer$$22);\n return map$$1;\n}\nexport function groupBy(projection, xs, comparer$$23) {\n const dict = createMutable(empty$$1(), comparer$$23);\n iterate$$1(function (v$$30) {\n const key = projection(v$$30);\n\n if (dict.has(key)) {\n void dict.get(key).push(v$$30);\n } else {\n const value = dict.set(key, [v$$30]);\n void value;\n }\n }, xs);\n return map$$2(function mapping$$2(kv$$3) {\n return [kv$$3[0], kv$$3[1]];\n }, dict);\n}\nexport function countBy(projection$$1, xs$$1, comparer$$24) {\n const dict$$1 = createMutable(empty$$1(), comparer$$24);\n iterate$$1(function (value$$1) {\n const key$$1 = projection$$1(value$$1);\n const value$$2 = dict$$1.has(key$$1) ? dict$$1.set(key$$1, dict$$1.get(key$$1) + 1) : dict$$1.set(key$$1, 1);\n void value$$2;\n }, xs$$1);\n return map$$2(function mapping$$3(kv$$4) {\n return [kv$$4[0], kv$$4[1]];\n }, dict$$1);\n}\nexport function count(m$$47) {\n return FSharpMap$$get_Count(m$$47);\n}","import { declare, FSharpRef } from \"./Types.js\";\nimport { iterateIndexed, toIterator, getEnumerator, delay, collect, map, sumBy, iterate } from \"./Seq.js\";\nimport { class_type } from \"./Reflection.js\";\nimport { getItemFromDict, tryGetValue } from \"./Util.js\";\nimport { some } from \"./Option.js\";\nexport const MutableSet$00601 = declare(function Fable_Collections_MutableSet(items, comparer) {\n const $this$$1 = this;\n const this$ = new FSharpRef(null);\n $this$$1.comparer = comparer;\n this$.contents = $this$$1;\n $this$$1.hashMap = new Map([]);\n $this$$1[\"init@21-2\"] = 1;\n iterate(function (item) {\n const value = MutableSet$00601$$Add$$2B595(this$.contents, item);\n void value;\n }, items);\n void null;\n});\nexport function MutableSet$00601$reflection($gen$$4) {\n return class_type(\"Fable.Collections.MutableSet`1\", [$gen$$4], MutableSet$00601);\n}\nexport function MutableSet$00601$$$$002Ector$$Z6150332D(items, comparer) {\n return this instanceof MutableSet$00601 ? MutableSet$00601.call(this, items, comparer) : new MutableSet$00601(items, comparer);\n}\n\nfunction MutableSet$00601$$TryFindIndex$$2B595(this$$$1, k) {\n const h = this$$$1.comparer.GetHashCode(k) | 0;\n const matchValue = tryGetValue(this$$$1.hashMap, h, null);\n\n if (matchValue[0]) {\n return [true, h, matchValue[1].findIndex(function (v) {\n return this$$$1.comparer.Equals(k, v);\n })];\n } else {\n return [false, h, -1];\n }\n}\n\nfunction MutableSet$00601$$TryFind$$2B595(this$$$2, k$$1) {\n const matchValue$$1 = MutableSet$00601$$TryFindIndex$$2B595(this$$$2, k$$1);\n var $target$$9;\n\n if (matchValue$$1[0]) {\n if (matchValue$$1[2] > -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 return some(getItemFromDict(this$$$2.hashMap, matchValue$$1[1])[matchValue$$1[2]]);\n }\n\n case 1:\n {\n return undefined;\n }\n }\n}\n\nexport function MutableSet$00601$$get_Comparer(this$$$3) {\n return this$$$3.comparer;\n}\nexport function MutableSet$00601$$Clear(this$$$4) {\n this$$$4.hashMap.clear();\n}\nexport function MutableSet$00601$$get_Count(this$$$5) {\n const source = this$$$5.hashMap.values();\n return sumBy(function projection(pairs) {\n return pairs.length;\n }, source, {\n GetZero() {\n return 0;\n },\n\n Add($x$$2, $y$$3) {\n return $x$$2 + $y$$3;\n }\n\n }) | 0;\n}\nexport function MutableSet$00601$$Add$$2B595(this$$$6, k$$2) {\n const matchValue$$2 = MutableSet$00601$$TryFindIndex$$2B595(this$$$6, k$$2);\n var $target$$16;\n\n if (matchValue$$2[0]) {\n if (matchValue$$2[2] > -1) {\n $target$$16 = 0;\n } else {\n $target$$16 = 1;\n }\n } else {\n $target$$16 = 1;\n }\n\n switch ($target$$16) {\n case 0:\n {\n return false;\n }\n\n case 1:\n {\n if (matchValue$$2[0]) {\n const value$$1 = void getItemFromDict(this$$$6.hashMap, matchValue$$2[1]).push(k$$2);\n void null;\n return true;\n } else {\n this$$$6.hashMap.set(matchValue$$2[1], [k$$2]);\n return true;\n }\n }\n }\n}\nexport function MutableSet$00601$$Contains$$2B595(this$$$7, k$$3) {\n const matchValue$$3 = MutableSet$00601$$TryFindIndex$$2B595(this$$$7, k$$3);\n var $target$$19;\n\n if (matchValue$$3[0]) {\n if (matchValue$$3[2] > -1) {\n $target$$19 = 0;\n } else {\n $target$$19 = 1;\n }\n } else {\n $target$$19 = 1;\n }\n\n switch ($target$$19) {\n case 0:\n {\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\nexport function MutableSet$00601$$Remove$$2B595(this$$$8, k$$4) {\n const matchValue$$4 = MutableSet$00601$$TryFindIndex$$2B595(this$$$8, k$$4);\n var $target$$22;\n\n if (matchValue$$4[0]) {\n if (matchValue$$4[2] > -1) {\n $target$$22 = 0;\n } else {\n $target$$22 = 1;\n }\n } else {\n $target$$22 = 1;\n }\n\n switch ($target$$22) {\n case 0:\n {\n getItemFromDict(this$$$8.hashMap, matchValue$$4[1]).splice(matchValue$$4[2], 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$$$9 = this;\n return toIterator((elems = delay(function () {\n return collect(function (values$$1) {\n return map(function (value$$2) {\n return value$$2;\n }, values$$1);\n }, this$$$9.hashMap.values());\n }), getEnumerator(elems)));\n};\n\nMutableSet$00601.prototype.Add = function (item$$1) {\n const this$$$10 = this;\n const value$$3 = MutableSet$00601$$Add$$2B595(this$$$10, item$$1);\n void value$$3;\n};\n\nMutableSet$00601.prototype.Clear = function () {\n const this$$$11 = this;\n MutableSet$00601$$Clear(this$$$11);\n};\n\nMutableSet$00601.prototype.Contains = function (item$$2) {\n const this$$$12 = this;\n return MutableSet$00601$$Contains$$2B595(this$$$12, item$$2);\n};\n\nMutableSet$00601.prototype.CopyTo = function (array, arrayIndex) {\n const this$$$13 = this;\n iterateIndexed(function action(i$$8, e) {\n array[arrayIndex + i$$8] = e;\n }, this$$$13);\n};\n\nObject.defineProperty(MutableSet$00601.prototype, \"Count\", {\n \"get\": function () {\n const this$$$14 = this;\n return MutableSet$00601$$get_Count(this$$$14) | 0;\n }\n});\nObject.defineProperty(MutableSet$00601.prototype, \"IsReadOnly\", {\n \"get\": function () {\n return false;\n }\n});\n\nMutableSet$00601.prototype.Remove = function (item$$3) {\n const this$$$16 = this;\n return MutableSet$00601$$Remove$$2B595(this$$$16, item$$3);\n};\n\nObject.defineProperty(MutableSet$00601.prototype, \"size\", {\n \"get\": function () {\n const this$$$17 = this;\n return MutableSet$00601$$get_Count(this$$$17) | 0;\n }\n});\n\nMutableSet$00601.prototype.add = function (k$$5) {\n const this$$$18 = this;\n const value$$4 = MutableSet$00601$$Add$$2B595(this$$$18, k$$5);\n void value$$4;\n return this$$$18;\n};\n\nMutableSet$00601.prototype.add_ = function (k$$6) {\n const this$$$19 = this;\n return MutableSet$00601$$Add$$2B595(this$$$19, k$$6);\n};\n\nMutableSet$00601.prototype.clear = function () {\n const this$$$20 = this;\n MutableSet$00601$$Clear(this$$$20);\n};\n\nMutableSet$00601.prototype.delete = function (k$$7) {\n const this$$$21 = this;\n return MutableSet$00601$$Remove$$2B595(this$$$21, k$$7);\n};\n\nMutableSet$00601.prototype.has = function (k$$8) {\n const this$$$22 = this;\n return MutableSet$00601$$Contains$$2B595(this$$$22, k$$8);\n};\n\nMutableSet$00601.prototype.keys = function () {\n const this$$$23 = this;\n return map(function mapping(x) {\n return x;\n }, this$$$23);\n};\n\nMutableSet$00601.prototype.values = function () {\n const this$$$24 = this;\n return map(function mapping$$1(x$$1) {\n return x$$1;\n }, this$$$24);\n};\n\nMutableSet$00601.prototype.entries = function () {\n const this$$$25 = this;\n return map(function mapping$$2(v$$1) {\n return [v$$1, v$$1];\n }, this$$$25);\n};","import { List, Record, declare, Union } from \"./Types.js\";\nimport { class_type, record_type, bool_type, list_type, union_type, int32_type } from \"./Reflection.js\";\nimport { value as value$$2, some, Choice } from \"./Option.js\";\nimport { iterate as iterate$$1, delay, collect, singleton as singleton$$1, empty as empty$$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$$Z6150332D as MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D } from \"./MutableSet\";\nexport const SetTree$00601 = declare(function Set_SetTree(tag, name, ...fields) {\n this.tag = tag | 0;\n this.name = name;\n this.fields = fields;\n}, Union);\nexport function SetTree$00601$reflection($gen$$3) {\n return union_type(\"Set.SetTree`1\", [$gen$$3], SetTree$00601, () => [\"SetEmpty\", [\"SetNode\", [[\"Item1\", $gen$$3], [\"Item2\", SetTree$00601$reflection($gen$$3)], [\"Item3\", SetTree$00601$reflection($gen$$3)], [\"Item4\", int32_type]]], [\"SetOne\", [[\"Item\", $gen$$3]]]]);\n}\nexport function SetTreeModule$$$countAux($s$$4, $acc$$5) {\n SetTreeModule$$$countAux: while (true) {\n const s = $s$$4,\n acc = $acc$$5;\n\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 $s$$4 = s.fields[1];\n $acc$$5 = SetTreeModule$$$countAux(s.fields[2], acc + 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 return t.fields[3] | 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$$16;\n\n if (l$$2.tag === 0) {\n if (r$$2.tag === 0) {\n $target$$16 = 0;\n } else {\n $target$$16 = 1;\n }\n } else {\n $target$$16 = 1;\n }\n\n switch ($target$$16) {\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 if (SetTreeModule$$$height(t2.fields[1]) > t1h + 1) {\n if (t2.fields[1].tag === 1) {\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1, k$$1, t2.fields[1].fields[1]), t2.fields[1].fields[0], SetTreeModule$$$mk(t2.fields[1].fields[2], t2.fields[0], t2.fields[2]));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1, k$$1, t2.fields[1]), t2.fields[0], t2.fields[2]);\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else if (t1h > t2h + SetTreeModule$$$tolerance) {\n if (t1.tag === 1) {\n if (SetTreeModule$$$height(t1.fields[2]) > t2h + 1) {\n if (t1.fields[2].tag === 1) {\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1.fields[1], t1.fields[0], t1.fields[2].fields[1]), t1.fields[2].fields[0], SetTreeModule$$$mk(t1.fields[2].fields[2], k$$1, t2));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(t1.fields[1], t1.fields[0], SetTreeModule$$$mk(t1.fields[2], 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 c$$1 = comparer.Compare(k$$2, t$$1.fields[0]) | 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 c = comparer.Compare(k$$2, t$$1.fields[0]) | 0;\n\n if (c < 0) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$add(comparer, k$$2, t$$1.fields[1]), t$$1.fields[0], t$$1.fields[2]);\n } else if (c === 0) {\n return t$$1;\n } else {\n return SetTreeModule$$$rebalance(t$$1.fields[1], t$$1.fields[0], SetTreeModule$$$add(comparer, k$$2, t$$1.fields[2]));\n }\n }\n }\n}\nexport function SetTreeModule$$$balance(comparer$$1, t1$$1, k$$3, t2$$1) {\n var $target$$27, 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$$27 = 1;\n t1$$2 = t1$$1;\n } else if (t2$$1.tag === 2) {\n $target$$27 = 2;\n k1 = t1$$1.fields[0];\n t2$$3 = t2$$1;\n } else {\n $target$$27 = 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$$27 = 3;\n k2$$2 = t2$$1.fields[0];\n t1$$3 = t1$$1;\n } else if (t2$$1.tag === 1) {\n $target$$27 = 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$$27 = 1;\n t1$$2 = t1$$1;\n }\n } else {\n $target$$27 = 0;\n t2$$2 = t2$$1;\n }\n\n switch ($target$$27) {\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 c$$3 = comparer$$2.Compare(t$$2.fields[0], 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 c$$2 = comparer$$2.Compare(pivot, t$$2.fields[0]) | 0;\n\n if (c$$2 < 0) {\n const patternInput = SetTreeModule$$$split(comparer$$2, pivot, t$$2.fields[1]);\n return [patternInput[0], patternInput[1], SetTreeModule$$$balance(comparer$$2, patternInput[2], t$$2.fields[0], t$$2.fields[2])];\n } else if (c$$2 === 0) {\n return [t$$2.fields[1], true, t$$2.fields[2]];\n } else {\n const patternInput$$1 = SetTreeModule$$$split(comparer$$2, pivot, t$$2.fields[2]);\n return [SetTreeModule$$$balance(comparer$$2, t$$2.fields[1], t$$2.fields[0], patternInput$$1[0]), patternInput$$1[1], patternInput$$1[2]];\n }\n }\n }\n}\nexport function SetTreeModule$$$spliceOutSuccessor(t$$3) {\n switch (t$$3.tag) {\n case 2:\n {\n return [t$$3.fields[0], new SetTree$00601(0, \"SetEmpty\")];\n }\n\n case 1:\n {\n if (t$$3.fields[1].tag === 0) {\n return [t$$3.fields[0], t$$3.fields[2]];\n } else {\n const patternInput$$2 = SetTreeModule$$$spliceOutSuccessor(t$$3.fields[1]);\n return [patternInput$$2[0], SetTreeModule$$$mk(patternInput$$2[1], t$$3.fields[0], t$$3.fields[2])];\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 c$$4 = comparer$$3.Compare(k$$4, t$$4.fields[0]) | 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 c$$5 = comparer$$3.Compare(k$$4, t$$4.fields[0]) | 0;\n\n if (c$$5 < 0) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$remove(comparer$$3, k$$4, t$$4.fields[1]), t$$4.fields[0], t$$4.fields[2]);\n } else if (c$$5 === 0) {\n if (t$$4.fields[1].tag === 0) {\n return t$$4.fields[2];\n } else if (t$$4.fields[2].tag === 0) {\n return t$$4.fields[1];\n } else {\n const patternInput$$3 = SetTreeModule$$$spliceOutSuccessor(t$$4.fields[2]);\n return SetTreeModule$$$mk(t$$4.fields[1], patternInput$$3[0], patternInput$$3[1]);\n }\n } else {\n return SetTreeModule$$$rebalance(t$$4.fields[1], t$$4.fields[0], SetTreeModule$$$remove(comparer$$3, k$$4, t$$4.fields[2]));\n }\n }\n\n default:\n {\n return t$$4;\n }\n }\n}\nexport function SetTreeModule$$$mem($comparer$$4$$35, $k$$5$$36, $t$$5$$37) {\n SetTreeModule$$$mem: while (true) {\n const comparer$$4 = $comparer$$4$$35,\n k$$5 = $k$$5$$36,\n t$$5 = $t$$5$$37;\n\n switch (t$$5.tag) {\n case 2:\n {\n return comparer$$4.Compare(k$$5, t$$5.fields[0]) === 0;\n }\n\n case 0:\n {\n return false;\n }\n\n default:\n {\n const c$$6 = comparer$$4.Compare(k$$5, t$$5.fields[0]) | 0;\n\n if (c$$6 < 0) {\n $comparer$$4$$35 = comparer$$4;\n $k$$5$$36 = k$$5;\n $t$$5$$37 = t$$5.fields[1];\n continue SetTreeModule$$$mem;\n } else if (c$$6 === 0) {\n return true;\n } else {\n $comparer$$4$$35 = comparer$$4;\n $k$$5$$36 = k$$5;\n $t$$5$$37 = t$$5.fields[2];\n continue SetTreeModule$$$mem;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$iter($f$$38, $t$$6$$39) {\n SetTreeModule$$$iter: while (true) {\n const f = $f$$38,\n t$$6 = $t$$6$$39;\n\n switch (t$$6.tag) {\n case 2:\n {\n f(t$$6.fields[0]);\n break;\n }\n\n case 0:\n {\n void null;\n break;\n }\n\n default:\n {\n SetTreeModule$$$iter(f, t$$6.fields[1]);\n f(t$$6.fields[0]);\n $f$$38 = f;\n $t$$6$$39 = t$$6.fields[2];\n continue SetTreeModule$$$iter;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$foldBack($f$$1$$40, $m$$1$$41, $x$$1$$42) {\n SetTreeModule$$$foldBack: while (true) {\n const f$$1 = $f$$1$$40,\n m$$1 = $m$$1$$41,\n x$$1 = $x$$1$$42;\n\n switch (m$$1.tag) {\n case 2:\n {\n return f$$1(m$$1.fields[0], x$$1);\n }\n\n case 0:\n {\n return x$$1;\n }\n\n default:\n {\n $f$$1$$40 = f$$1;\n $m$$1$$41 = m$$1.fields[1];\n $x$$1$$42 = f$$1(m$$1.fields[0], SetTreeModule$$$foldBack(f$$1, m$$1.fields[2], x$$1));\n continue SetTreeModule$$$foldBack;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$fold($f$$2$$43, $x$$2$$44, $m$$2$$45) {\n SetTreeModule$$$fold: while (true) {\n const f$$2 = $f$$2$$43,\n x$$2 = $x$$2$$44,\n m$$2 = $m$$2$$45;\n\n switch (m$$2.tag) {\n case 2:\n {\n return f$$2(x$$2, m$$2.fields[0]);\n }\n\n case 0:\n {\n return x$$2;\n }\n\n default:\n {\n const x$$3 = SetTreeModule$$$fold(f$$2, x$$2, m$$2.fields[1]);\n const x$$4 = f$$2(x$$3, m$$2.fields[0]);\n $f$$2$$43 = f$$2;\n $x$$2$$44 = x$$4;\n $m$$2$$45 = m$$2.fields[2];\n continue SetTreeModule$$$fold;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$forall($f$$3$$46, $m$$3$$47) {\n SetTreeModule$$$forall: while (true) {\n const f$$3 = $f$$3$$46,\n m$$3 = $m$$3$$47;\n\n switch (m$$3.tag) {\n case 2:\n {\n return f$$3(m$$3.fields[0]);\n }\n\n case 0:\n {\n return true;\n }\n\n default:\n {\n if (f$$3(m$$3.fields[0]) ? SetTreeModule$$$forall(f$$3, m$$3.fields[1]) : false) {\n $f$$3$$46 = f$$3;\n $m$$3$$47 = m$$3.fields[2];\n continue SetTreeModule$$$forall;\n } else {\n return false;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$exists($f$$4$$48, $m$$4$$49) {\n SetTreeModule$$$exists: while (true) {\n const f$$4 = $f$$4$$48,\n m$$4 = $m$$4$$49;\n\n switch (m$$4.tag) {\n case 2:\n {\n return f$$4(m$$4.fields[0]);\n }\n\n case 0:\n {\n return false;\n }\n\n default:\n {\n if (f$$4(m$$4.fields[0]) ? true : SetTreeModule$$$exists(f$$4, m$$4.fields[1])) {\n return true;\n } else {\n $f$$4$$48 = f$$4;\n $m$$4$$49 = m$$4.fields[2];\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($comparer$$7$$57, $f$$5$$58, $s$$2$$59, $acc$$1$$60) {\n SetTreeModule$$$filterAux: while (true) {\n const comparer$$7 = $comparer$$7$$57,\n f$$5 = $f$$5$$58,\n s$$2 = $s$$2$$59,\n acc$$1 = $acc$$1$$60;\n\n switch (s$$2.tag) {\n case 2:\n {\n if (f$$5(s$$2.fields[0])) {\n return SetTreeModule$$$add(comparer$$7, s$$2.fields[0], 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 acc$$2 = f$$5(s$$2.fields[0]) ? SetTreeModule$$$add(comparer$$7, s$$2.fields[0], acc$$1) : acc$$1;\n $comparer$$7$$57 = comparer$$7;\n $f$$5$$58 = f$$5;\n $s$$2$$59 = s$$2.fields[1];\n $acc$$1$$60 = SetTreeModule$$$filterAux(comparer$$7, f$$5, s$$2.fields[2], 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$$64, $m$$6$$65, $acc$$3$$66) {\n SetTreeModule$$$diffAux: while (true) {\n const comparer$$9 = $comparer$$9$$64,\n m$$6 = $m$$6$$65,\n acc$$3 = $acc$$3$$66;\n\n switch (m$$6.tag) {\n case 2:\n {\n return SetTreeModule$$$remove(comparer$$9, m$$6.fields[0], acc$$3);\n }\n\n case 0:\n {\n return acc$$3;\n }\n\n default:\n {\n $comparer$$9$$64 = comparer$$9;\n $m$$6$$65 = m$$6.fields[1];\n $acc$$3$$66 = SetTreeModule$$$diffAux(comparer$$9, m$$6.fields[2], SetTreeModule$$$remove(comparer$$9, m$$6.fields[0], acc$$3));\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$$73, 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$$73 = 1;\n t$$7 = t2$$4;\n } else if (t1$$4.tag === 2) {\n if (t2$$4.tag === 0) {\n $target$$73 = 2;\n t$$8 = t1$$4;\n } else if (t2$$4.tag === 2) {\n $target$$73 = 3;\n k1$$5 = t1$$4.fields[0];\n t2$$5 = t2$$4;\n } else {\n $target$$73 = 3;\n k1$$5 = t1$$4.fields[0];\n t2$$5 = t2$$4;\n }\n } else if (t2$$4.tag === 0) {\n $target$$73 = 2;\n t$$8 = t1$$4;\n } else if (t2$$4.tag === 2) {\n $target$$73 = 4;\n k2$$17 = t2$$4.fields[0];\n t1$$5 = t1$$4;\n } else {\n $target$$73 = 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$$73) {\n case 0:\n {\n if (h1$$1 > h2$$1) {\n const patternInput$$4 = SetTreeModule$$$split(comparer$$11, k1$$4, t2$$4);\n return SetTreeModule$$$balance(comparer$$11, SetTreeModule$$$union(comparer$$11, t11$$2, patternInput$$4[0]), k1$$4, SetTreeModule$$$union(comparer$$11, t12$$2, patternInput$$4[2]));\n } else {\n const patternInput$$5 = SetTreeModule$$$split(comparer$$11, k2$$16, t1$$4);\n return SetTreeModule$$$balance(comparer$$11, SetTreeModule$$$union(comparer$$11, t21$$1, patternInput$$5[0]), k2$$16, SetTreeModule$$$union(comparer$$11, t22$$1, patternInput$$5[2]));\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$$74, $b$$3$$75, $m$$7$$76, $acc$$4$$77) {\n SetTreeModule$$$intersectionAux: while (true) {\n const comparer$$12 = $comparer$$12$$74,\n b$$3 = $b$$3$$75,\n m$$7 = $m$$7$$76,\n acc$$4 = $acc$$4$$77;\n\n switch (m$$7.tag) {\n case 2:\n {\n if (SetTreeModule$$$mem(comparer$$12, m$$7.fields[0], b$$3)) {\n return SetTreeModule$$$add(comparer$$12, m$$7.fields[0], 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 acc$$5 = SetTreeModule$$$intersectionAux(comparer$$12, b$$3, m$$7.fields[2], acc$$4);\n const acc$$6 = SetTreeModule$$$mem(comparer$$12, m$$7.fields[0], b$$3) ? SetTreeModule$$$add(comparer$$12, m$$7.fields[0], acc$$5) : acc$$5;\n $comparer$$12$$74 = comparer$$12;\n $b$$3$$75 = b$$3;\n $m$$7$$76 = m$$7.fields[1];\n $acc$$4$$77 = 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($comparer$$15$$86, $f$$8$$87, $s$$4$$88, $acc_0$$89, $acc_1$$90) {\n SetTreeModule$$$partitionAux: while (true) {\n const comparer$$15 = $comparer$$15$$86,\n f$$8 = $f$$8$$87,\n s$$4 = $s$$4$$88,\n acc_0 = $acc_0$$89,\n acc_1 = $acc_1$$90;\n\n switch (s$$4.tag) {\n case 2:\n {\n return SetTreeModule$$$partition1(comparer$$15, f$$8, s$$4.fields[0], acc_0, acc_1);\n }\n\n case 0:\n {\n return [acc_0, acc_1];\n }\n\n default:\n {\n const acc$$8 = SetTreeModule$$$partitionAux(comparer$$15, f$$8, s$$4.fields[2], acc_0, acc_1);\n const acc$$9 = SetTreeModule$$$partition1(comparer$$15, f$$8, s$$4.fields[0], acc$$8[0], acc$$8[1]);\n $comparer$$15$$86 = comparer$$15;\n $f$$8$$87 = f$$8;\n $s$$4$$88 = s$$4.fields[1];\n $acc_0$$89 = acc$$9[0];\n $acc_1$$90 = 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 return new Choice(0, \"Choice1Of2\", [s$$6.fields[0], new SetTree$00601(0, \"SetEmpty\"), new SetTree$00601(0, \"SetEmpty\")]);\n }\n\n case 0:\n {\n return new Choice(1, \"Choice2Of2\", void null);\n }\n\n default:\n {\n return new Choice(0, \"Choice1Of2\", [s$$6.fields[0], s$$6.fields[1], s$$6.fields[2]]);\n }\n }\n}\nexport function SetTreeModule$$$minimumElementAux($s$$7$$95, $n$$1$$96) {\n SetTreeModule$$$minimumElementAux: while (true) {\n const s$$7 = $s$$7$$95,\n n$$1 = $n$$1$$96;\n\n switch (s$$7.tag) {\n case 2:\n {\n return s$$7.fields[0];\n }\n\n case 0:\n {\n return n$$1;\n }\n\n default:\n {\n $s$$7$$95 = s$$7.fields[1];\n $n$$1$$96 = s$$7.fields[0];\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 return some(s$$8.fields[0]);\n }\n\n case 0:\n {\n return undefined;\n }\n\n default:\n {\n return some(SetTreeModule$$$minimumElementAux(s$$8.fields[1], s$$8.fields[0]));\n }\n }\n}\nexport function SetTreeModule$$$maximumElementAux($s$$9$$98, $n$$2$$99) {\n SetTreeModule$$$maximumElementAux: while (true) {\n const s$$9 = $s$$9$$98,\n n$$2 = $n$$2$$99;\n\n switch (s$$9.tag) {\n case 2:\n {\n return s$$9.fields[0];\n }\n\n case 0:\n {\n return n$$2;\n }\n\n default:\n {\n $s$$9$$98 = s$$9.fields[2];\n $n$$2$$99 = s$$9.fields[0];\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 return some(s$$10.fields[0]);\n }\n\n case 0:\n {\n return undefined;\n }\n\n default:\n {\n return some(SetTreeModule$$$maximumElementAux(s$$10.fields[2], s$$10.fields[0]));\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$$2(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$$2(matchValue$$5);\n return k$$28;\n }\n}\nexport const SetTreeModule$002ESetIterator$00601 = declare(function Set_SetTreeModule_SetIterator(stack, started) {\n this.stack = stack;\n this.started = started;\n}, Record);\nexport function SetTreeModule$002ESetIterator$00601$reflection($gen$$103) {\n return record_type(\"Set.SetTreeModule.SetIterator`1\", [$gen$$103], SetTreeModule$002ESetIterator$00601, () => [[\"stack\", list_type(SetTree$00601$reflection($gen$$103))], [\"started\", bool_type]]);\n}\nexport function SetTreeModule$$$collapseLHS($stack$$104) {\n SetTreeModule$$$collapseLHS: while (true) {\n const stack = $stack$$104;\n\n if (stack.tail != null) {\n if (stack.head.tag === 2) {\n return stack;\n } else if (stack.head.tag === 1) {\n $stack$$104 = new List(stack.head.fields[1], new List(SetTreeModule$$$SetOne(stack.head.fields[0]), new List(stack.head.fields[2], stack.tail)));\n continue SetTreeModule$$$collapseLHS;\n } else {\n $stack$$104 = stack.tail;\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 return matchValue$$6.head.fields[0];\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 i$$1.stack = SetTreeModule$$$collapseLHS(matchValue$$7.tail);\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 void null;\n});\nexport function SetTreeModule$002EmkIEnumerator$00601$reflection($gen$$108) {\n return class_type(\"Set.SetTreeModule.mkIEnumerator`1\", [$gen$$108], SetTreeModule$002EmkIEnumerator$00601);\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 void null;\n};\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 undefined;\n }\n }, en);\n}\nexport function SetTreeModule$$$compareStacks($comparer$$17$$112, $l1$$113, $l2$$114) {\n SetTreeModule$$$compareStacks: while (true) {\n const comparer$$17 = $comparer$$17$$112,\n l1 = $l1$$113,\n l2 = $l2$$114;\n var $target$$115, 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$$115 = 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$$115 = 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$$115 = 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$$115 = 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$$115 = 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$$115 = 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$$115 = 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$$115 = 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$$115 = 8;\n n1k$$4 = l1.head.fields[0];\n t1$$11 = l1.tail;\n } else if (l1.head.tag === 1) {\n $target$$115 = 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$$115 = 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$$115 = 8;\n n1k$$4 = l1.head.fields[0];\n t1$$11 = l1.tail;\n } else if (l1.head.tag === 1) {\n $target$$115 = 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$$115 = 3;\n t1$$6 = l1.tail;\n t2$$6 = l2.tail;\n }\n } else {\n $target$$115 = 2;\n }\n } else if (l2.tail != null) {\n $target$$115 = 1;\n } else {\n $target$$115 = 0;\n }\n\n switch ($target$$115) {\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 $comparer$$17$$112 = comparer$$17;\n $l1$$113 = t1$$6;\n $l2$$114 = 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 $comparer$$17$$112 = comparer$$17;\n $l1$$113 = t1$$7;\n $l2$$114 = 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 $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(new SetTree$00601(0, \"SetEmpty\"), t1$$8);\n $l2$$114 = 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 $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(n1r, t1$$9);\n $l2$$114 = 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 $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(n1r$$1, t1$$10);\n $l2$$114 = new List(n2r$$1, t2$$10);\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 8:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(new SetTree$00601(0, \"SetEmpty\"), new List(SetTreeModule$$$SetOne(n1k$$4), t1$$11));\n $l2$$114 = l2;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 9:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(n1l, new List(SetTreeModule$$$SetNode(n1k$$5, new SetTree$00601(0, \"SetEmpty\"), n1r$$2, 0), t1$$12));\n $l2$$114 = l2;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 10:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = l1;\n $l2$$114 = 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 $comparer$$17$$112 = comparer$$17;\n $l1$$113 = l1;\n $l2$$114 = 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$$120, $acc$$10$$121) {\n SetTreeModule$$$loop: while (true) {\n const m$$8 = $m$$8$$120,\n acc$$10 = $acc$$10$$121;\n\n switch (m$$8.tag) {\n case 2:\n {\n return new List(m$$8.fields[0], acc$$10);\n }\n\n case 0:\n {\n return acc$$10;\n }\n\n default:\n {\n $m$$8$$120 = m$$8.fields[1];\n $acc$$10$$121 = new List(m$$8.fields[0], SetTreeModule$$$loop(m$$8.fields[2], acc$$10));\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$$126, $acc$$11$$127, $e$$128) {\n SetTreeModule$$$mkFromEnumerator: while (true) {\n const comparer$$19 = $comparer$$19$$126,\n acc$$11 = $acc$$11$$127,\n e = $e$$128;\n\n if (e.MoveNext()) {\n $comparer$$19$$126 = comparer$$19;\n $acc$$11$$127 = SetTreeModule$$$add(comparer$$19, e.Current, acc$$11);\n $e$$128 = e;\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 } else {\n void null;\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 void null;\n});\nexport function FSharpSet$reflection($gen$$133) {\n return class_type(\"Set.FSharpSet\", [$gen$$133], FSharpSet);\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 const matchValue$$10 = FSharpSet$$get_Tree(s$$27);\n\n if (matchValue$$10.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 return [FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$27), patternInput$$6[0]), FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$27), patternInput$$6[1])];\n }\n}\nexport function FSharpSet$$Filter$$Z1D55A0D7(s$$28, f$$12) {\n const matchValue$$11 = FSharpSet$$get_Tree(s$$28);\n\n if (matchValue$$11.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$$7597B8F7(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 const matchValue$$12 = FSharpSet$$get_Tree(a$$4);\n\n if (matchValue$$12.tag === 0) {\n return a$$4;\n } else {\n const matchValue$$13 = FSharpSet$$get_Tree(b$$5);\n\n if (matchValue$$13.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 }\n}\nexport function FSharpSet$$$op_Addition(a$$5, b$$6) {\n const matchValue$$14 = FSharpSet$$get_Tree(b$$6);\n\n if (matchValue$$14.tag === 0) {\n return a$$5;\n } else {\n const matchValue$$15 = FSharpSet$$get_Tree(a$$5);\n\n if (matchValue$$15.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 }\n}\nexport function FSharpSet$$$Intersection$$Z3BE9BFE0(a$$6, b$$7) {\n const matchValue$$16 = FSharpSet$$get_Tree(b$$7);\n\n if (matchValue$$16.tag === 0) {\n return b$$7;\n } else {\n const matchValue$$17 = FSharpSet$$get_Tree(a$$6);\n\n if (matchValue$$17.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 }\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 var strings;\n const this$ = this;\n return \"set [\" + (strings = map$$1(function (x$$21) {\n let copyOfStruct = x$$21;\n return String(copyOfStruct);\n }, this$), (join(\"; \", strings))) + \"]\";\n};\n\nFSharpSet.prototype.GetHashCode = function () {\n const this$$$1 = this;\n let res = 0;\n const e$$1 = SetTreeModule$$$mkIEnumerator(FSharpSet$$get_Tree(this$$$1));\n\n while (e$$1.MoveNext()) {\n const x$$22 = res | 0;\n const y$$4 = structuralHash(e$$1.Current) | 0;\n res = (x$$22 << 1) + y$$4 + 631;\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$$7597B8F7(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}\nexport function createMutable(source, comparer$$31) {\n const set = MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D(source, comparer$$31);\n return set;\n}\nexport function distinct(xs, comparer$$32) {\n return delay(function () {\n const set$$1 = MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D(empty$$1(), comparer$$32);\n return collect(function (x$$33) {\n return MutableSet$002400601$0024$0024Add$0024$00242B595(set$$1, x$$33) ? singleton$$1(x$$33) : empty$$1();\n }, xs);\n });\n}\nexport function distinctBy(projection, xs$$1, comparer$$33) {\n return delay(function () {\n const set$$2 = MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D(empty$$1(), comparer$$33);\n return collect(function (x$$34) {\n return MutableSet$002400601$0024$0024Add$0024$00242B595(set$$2, projection(x$$34)) ? singleton$$1(x$$34) : empty$$1();\n }, xs$$1);\n });\n}\nexport function unionWith(s1$$4, s2$$4) {\n return fold$$1(function folder(acc$$14, x$$35) {\n return acc$$14.add(x$$35);\n }, s1$$4, s2$$4);\n}\nexport function intersectWith(s1$$5, s2$$5, comparer$$34) {\n const s2$$6 = ofSeq(s2$$5, comparer$$34);\n iterate$$1(function (x$$36) {\n if (!FSharpSet$$Contains$$2B595(s2$$6, x$$36)) {\n const value = s1$$5.delete(x$$36);\n void value;\n } else {\n void null;\n }\n }, s1$$5);\n}\nexport function exceptWith(s1$$6, s2$$7) {\n iterate$$1(function (x$$37) {\n const value$$1 = s1$$6.delete(x$$37);\n void value$$1;\n }, s2$$7);\n}\nexport function isSubsetOf(s1$$7, s2$$8, comparer$$35) {\n return isSubset(ofSeq(s1$$7, comparer$$35), ofSeq(s2$$8, comparer$$35));\n}\nexport function isSupersetOf(s1$$8, s2$$9, comparer$$36) {\n return isSuperset(ofSeq(s1$$8, comparer$$36), ofSeq(s2$$9, comparer$$36));\n}\nexport function isProperSubsetOf(s1$$9, s2$$10, comparer$$37) {\n return isProperSubset(ofSeq(s1$$9, comparer$$37), ofSeq(s2$$10, comparer$$37));\n}\nexport function isProperSupersetOf(s1$$10, s2$$11, comparer$$38) {\n return isProperSuperset(ofSeq(s1$$10, comparer$$38), ofSeq(s2$$11, comparer$$38));\n}","import { defaultArg, value as value$$15, some } from \"./Option.js\";\nimport { min as min$$1, 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\";\nconst indexNotFoundMsg = \"An index satisfying the predicate was not found in the collection.\";\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 } else {\n void null;\n }\n\n return array$$5[array$$5.length - 1];\n}\nexport function tryLast(array$$6) {\n if (array$$6.length === 0) {\n return undefined;\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 return source.map(function (delegateArg0, delegateArg1) {\n return f(delegateArg1, delegateArg0);\n });\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 return source$$1.map(function mapping$$1(x$$1) {\n return f$$1(x$$1);\n });\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 } else {\n void null;\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 } else {\n void null;\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 } else {\n void null;\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 } else {\n void null;\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 let acc = state;\n const res = new cons$$7(matchValue);\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 res[i$$9] = patternInput[0];\n acc = patternInput[1];\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 let acc$$1 = state$$1;\n const res$$1 = new cons$$8(matchValue$$1);\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 res$$1[i$$10] = patternInput$$1[0];\n acc$$1 = patternInput$$1[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 var arr$$4;\n const arrays$$1 = Array.isArray(arrays) ? arrays : 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 (arr$$4 = arrays$$1[0], ArrayBuffer.isView(arr$$4)) {\n let totalIdx = 0;\n let totalLength = 0;\n\n for (let idx = 0; idx <= arrays$$1.length - 1; idx++) {\n const arr$$5 = arrays$$1[idx];\n totalLength = totalLength + arr$$5.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$$6 = arrays$$1[idx$$1];\n\n for (let j = 0; j <= arr$$6.length - 1; j++) {\n result$$4[totalIdx] = arr$$6[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 dict.set(key, matchValue$$3[1] + 1);\n } else {\n dict.set(key, 1);\n const value$$3 = keys.push(key);\n void value$$3;\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 const arg00 = projection$$1($arg$$3);\n return addToSet(arg00, 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$$79) {\n loop: while (true) {\n const i$$12 = $i$$12$$79;\n\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 $i$$12$$79 = i$$12 + 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 dict$$1.set(key$$2, new List(v, matchValue$$4[1]));\n } else {\n addToDict(dict$$1, key$$2, new List(v, new List()));\n const value$$5 = keys$$1.push(key$$2);\n void value$$5;\n }\n }\n\n const result$$6 = map(function (key$$3) {\n var array$$28;\n return [key$$3, (array$$28 = cons$$11.from(getItemFromDict(dict$$1, key$$3)), (array$$28.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 } else {\n void null;\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 } else {\n void null;\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 const array$$35 = array$$33.slice();\n return array$$35.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 } else {\n void null;\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 const count$$15 = count$$14 | 0;\n return array$$41.slice(count$$15);\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 } else {\n void null;\n }\n\n if (count$$16 > array$$43.length) {\n throw new Error(\"count is greater than array length\\\\nParameter name: count\");\n } else {\n void null;\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 const count$$19 = count$$18 | 0;\n return array$$45.slice(0, 0 + count$$19);\n }\n}\nexport function addInPlace(x$$3, array$$47) {\n const value$$7 = array$$47.push(x$$3);\n void value$$7;\n}\nexport function addRangeInPlace(range, array$$49) {\n iterate$$1(function (x$$4) {\n const value$$8 = array$$49.push(x$$4);\n void value$$8;\n }, range);\n}\nexport function removeInPlace(item$$5, array$$51) {\n const i$$18 = array$$51.indexOf(item$$5);\n\n if (i$$18 > -1) {\n const value$$9 = array$$51.splice(i$$18, 1);\n void value$$9;\n return true;\n } else {\n return false;\n }\n}\nexport function removeAllInPlace(predicate$$9, array$$54) {\n const countRemoveAll = function countRemoveAll(count$$20) {\n const i$$19 = array$$54.findIndex(predicate$$9);\n\n if (i$$19 > -1) {\n const value$$10 = array$$54.splice(i$$19, 1);\n void value$$10;\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$$59) {\n const matchValue$$5 = array$$59.find(predicate$$11);\n\n if (matchValue$$5 == null) {\n throw new Error(indexNotFoundMsg);\n } else {\n const res$$4 = value$$15(matchValue$$5);\n return res$$4;\n }\n}\nexport function tryFind(predicate$$13, array$$61) {\n return array$$61.find(predicate$$13);\n}\nexport function findIndex(predicate$$15, array$$63) {\n const matchValue$$6 = array$$63.findIndex(predicate$$15);\n\n if (matchValue$$6 > -1) {\n return matchValue$$6 | 0;\n } else {\n throw new Error(indexNotFoundMsg);\n }\n}\nexport function tryFindIndex(predicate$$17, array$$65) {\n const matchValue$$7 = array$$65.findIndex(predicate$$17);\n\n if (matchValue$$7 > -1) {\n return matchValue$$7;\n } else {\n return undefined;\n }\n}\nexport function pick(chooser, array$$67) {\n const loop$$1 = function loop$$1($i$$22$$149) {\n loop$$1: while (true) {\n const i$$22 = $i$$22$$149;\n\n if (i$$22 >= array$$67.length) {\n throw new Error(indexNotFoundMsg);\n } else {\n const matchValue$$8 = chooser(array$$67[i$$22]);\n\n if (matchValue$$8 != null) {\n const res$$5 = value$$15(matchValue$$8);\n return res$$5;\n } else {\n $i$$22$$149 = i$$22 + 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$$68) {\n const loop$$2 = function loop$$2($i$$23$$152) {\n loop$$2: while (true) {\n const i$$23 = $i$$23$$152;\n\n if (i$$23 >= array$$68.length) {\n return undefined;\n } else {\n const matchValue$$9 = chooser$$1(array$$68[i$$23]);\n\n if (matchValue$$9 == null) {\n $i$$23$$152 = i$$23 + 1;\n continue loop$$2;\n } else {\n return matchValue$$9;\n }\n }\n\n break;\n }\n };\n\n return loop$$2(0);\n}\nexport function findBack(predicate$$19, array$$69) {\n const loop$$3 = function loop$$3($i$$24$$155) {\n loop$$3: while (true) {\n const i$$24 = $i$$24$$155;\n\n if (i$$24 < 0) {\n throw new Error(indexNotFoundMsg);\n } else if (predicate$$19(array$$69[i$$24])) {\n return array$$69[i$$24];\n } else {\n $i$$24$$155 = i$$24 - 1;\n continue loop$$3;\n }\n\n break;\n }\n };\n\n return loop$$3(array$$69.length - 1);\n}\nexport function tryFindBack(predicate$$20, array$$70) {\n const loop$$4 = function loop$$4($i$$25$$158) {\n loop$$4: while (true) {\n const i$$25 = $i$$25$$158;\n\n if (i$$25 < 0) {\n return undefined;\n } else if (predicate$$20(array$$70[i$$25])) {\n return some(array$$70[i$$25]);\n } else {\n $i$$25$$158 = i$$25 - 1;\n continue loop$$4;\n }\n\n break;\n }\n };\n\n return loop$$4(array$$70.length - 1);\n}\nexport function findLastIndex(predicate$$21, array$$71) {\n const loop$$5 = function loop$$5($i$$26$$161) {\n loop$$5: while (true) {\n const i$$26 = $i$$26$$161;\n\n if (i$$26 < 0) {\n return -1 | 0;\n } else if (predicate$$21(array$$71[i$$26])) {\n return i$$26 | 0;\n } else {\n $i$$26$$161 = i$$26 - 1;\n continue loop$$5;\n }\n\n break;\n }\n };\n\n return loop$$5(array$$71.length - 1) | 0;\n}\nexport function findIndexBack(predicate$$22, array$$72) {\n const loop$$6 = function loop$$6($i$$27$$164) {\n loop$$6: while (true) {\n const i$$27 = $i$$27$$164;\n\n if (i$$27 < 0) {\n throw new Error(indexNotFoundMsg);\n } else if (predicate$$22(array$$72[i$$27])) {\n return i$$27 | 0;\n } else {\n $i$$27$$164 = i$$27 - 1;\n continue loop$$6;\n }\n\n break;\n }\n };\n\n return loop$$6(array$$72.length - 1) | 0;\n}\nexport function tryFindIndexBack(predicate$$23, array$$73) {\n const loop$$7 = function loop$$7($i$$28$$167) {\n loop$$7: while (true) {\n const i$$28 = $i$$28$$167;\n\n if (i$$28 < 0) {\n return undefined;\n } else if (predicate$$23(array$$73[i$$28])) {\n return i$$28;\n } else {\n $i$$28$$167 = i$$28 - 1;\n continue loop$$7;\n }\n\n break;\n }\n };\n\n return loop$$7(array$$73.length - 1);\n}\nexport function choose(chooser$$2, array$$74, cons$$30) {\n const arr$$7 = array$$74.filter(function f$$7(x$$5) {\n const option = chooser$$2(x$$5);\n return option != null;\n });\n return map(function g(x$$6) {\n const option$$1 = chooser$$2(x$$6);\n return value$$15(option$$1);\n }, arr$$7, cons$$30);\n}\nexport function foldIndexed(folder$$2, state$$4, array$$76) {\n return array$$76.reduce(function (delegateArg0$$1, delegateArg1$$1, delegateArg2) {\n return folder$$2(delegateArg2, delegateArg0$$1, delegateArg1$$1);\n }, state$$4);\n}\nexport function fold(folder$$4, state$$6, array$$78) {\n return array$$78.reduce(function (delegateArg0$$2, delegateArg1$$2) {\n return folder$$4(delegateArg0$$2, delegateArg1$$2);\n }, state$$6);\n}\nexport function iterate(action, array$$80) {\n for (let i$$30 = 0; i$$30 <= array$$80.length - 1; i$$30++) {\n action(array$$80[i$$30]);\n }\n}\nexport function iterateIndexed(action$$1, array$$81) {\n for (let i$$31 = 0; i$$31 <= array$$81.length - 1; i$$31++) {\n action$$1(i$$31, array$$81[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 } else {\n void null;\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 } else {\n void null;\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$$82) {\n return array$$82.length === 0;\n}\nexport function forAll(predicate$$25, array$$83) {\n return array$$83.every(predicate$$25);\n}\nexport function permute(f$$8, array$$85) {\n const size = array$$85.length | 0;\n const res$$7 = array$$85.slice();\n const checkFlags = new Int32Array(size);\n iterateIndexed(function (i$$34, x$$9) {\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 } else {\n void null;\n }\n\n res$$7[j$$1] = x$$9;\n checkFlags[j$$1] = 1;\n }, array$$85);\n let isValid;\n isValid = checkFlags.every(function predicate$$27(y) {\n return 1 === y;\n });\n\n if (!isValid) {\n throw new Error(\"Not a valid permutation\");\n } else {\n void null;\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 for (let i$$35 = 0; i$$35 <= length; i$$35++) {\n target$$5[i$$35 + lower$$1] = source$$5[i$$35];\n }\n}\nexport function sortInPlaceBy(projection$$3, xs, comparer) {\n xs.sort(function (x$$11, y$$1) {\n return comparer.Compare(projection$$3(x$$11), projection$$3(y$$1));\n });\n}\nexport function sortInPlace(xs$$1, comparer$$1) {\n xs$$1.sort(function (x$$12, y$$2) {\n return comparer$$1.Compare(x$$12, y$$2);\n });\n}\nexport function sort(xs$$2, comparer$$2) {\n const xs$$3 = xs$$2.slice();\n xs$$3.sort(function comparer$$3(x$$13, y$$3) {\n return comparer$$2.Compare(x$$13, y$$3);\n });\n return xs$$3;\n}\nexport function sortBy(projection$$4, xs$$4, comparer$$4) {\n const xs$$5 = xs$$4.slice();\n xs$$5.sort(function comparer$$5(x$$14, y$$4) {\n return comparer$$4.Compare(projection$$4(x$$14), projection$$4(y$$4));\n });\n return xs$$5;\n}\nexport function sortDescending(xs$$6, comparer$$6) {\n const xs$$7 = xs$$6.slice();\n xs$$7.sort(function comparer$$7(x$$15, y$$5) {\n return comparer$$6.Compare(x$$15, y$$5) * -1;\n });\n return xs$$7;\n}\nexport function sortByDescending(projection$$5, xs$$8, comparer$$8) {\n const xs$$9 = xs$$8.slice();\n xs$$9.sort(function comparer$$9(x$$16, y$$6) {\n return comparer$$8.Compare(projection$$5(x$$16), projection$$5(y$$6)) * -1;\n });\n return xs$$9;\n}\nexport function sortWith(comparer$$10, xs$$10) {\n const xs$$11 = xs$$10.slice();\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$$226) {\n loop$$8: while (true) {\n const state$$9 = $state$$9$$226;\n const matchValue$$10 = generator(state$$9);\n\n if (matchValue$$10 != null) {\n const x$$17 = matchValue$$10[0];\n const s$$2 = matchValue$$10[1];\n const value$$11 = res$$8.push(x$$17);\n void value$$11;\n $state$$9$$226 = s$$2;\n continue loop$$8;\n } else {\n void null;\n }\n\n break;\n }\n };\n\n loop$$8(state$$8);\n return res$$8;\n}\nexport function unzip(array$$95) {\n const len$$8 = array$$95.length | 0;\n const res1$$1 = new Array(len$$8);\n const res2$$1 = new Array(len$$8);\n iterateIndexed(function (i$$36, tupledArg) {\n res1$$1[i$$36] = tupledArg[0];\n res2$$1[i$$36] = tupledArg[1];\n }, array$$95);\n return [res1$$1, res2$$1];\n}\nexport function unzip3(array$$96) {\n const len$$11 = array$$96.length | 0;\n const res1$$2 = new Array(len$$11);\n const res2$$2 = new Array(len$$11);\n const res3 = new Array(len$$11);\n iterateIndexed(function (i$$37, tupledArg$$1) {\n res1$$2[i$$37] = tupledArg$$1[0];\n res2$$2[i$$37] = tupledArg$$1[1];\n res3[i$$37] = tupledArg$$1[2];\n }, array$$96);\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 } else {\n void null;\n }\n\n let result$$10;\n const len$$15 = array1$$4.length | 0;\n result$$10 = new Array(len$$15);\n\n for (let i$$38 = 0; i$$38 <= array1$$4.length - 1; i$$38++) {\n result$$10[i$$38] = [array1$$4[i$$38], array2$$4[i$$38]];\n }\n\n return result$$10;\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 } else {\n void null;\n }\n\n let result$$11;\n const len$$16 = array1$$5.length | 0;\n result$$11 = new Array(len$$16);\n\n for (let i$$39 = 0; i$$39 <= array1$$5.length - 1; i$$39++) {\n result$$11[i$$39] = [array1$$5[i$$39], array2$$5[i$$39], array3[i$$39]];\n }\n\n return result$$11;\n}\nexport function chunkBySize(chunkSize, array$$97) {\n if (chunkSize < 1) {\n throw new Error(\"The input must be positive.\\\\nParameter name: size\");\n } else {\n void null;\n }\n\n if (array$$97.length === 0) {\n return [[]];\n } else {\n const result$$12 = [];\n\n for (let x$$18 = 0; x$$18 <= ~~Math.ceil(array$$97.length / chunkSize) - 1; x$$18++) {\n const start$$8 = x$$18 * chunkSize | 0;\n const slice = array$$97.slice(start$$8, start$$8 + chunkSize);\n const value$$12 = result$$12.push(slice);\n void value$$12;\n }\n\n return result$$12;\n }\n}\nexport function splitAt(index$$4, array$$100) {\n if (index$$4 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: index\");\n } else {\n void null;\n }\n\n if (index$$4 > array$$100.length) {\n throw new Error(\"The input sequence has an insufficient number of elements.\\\\nParameter name: index\");\n } else {\n void null;\n }\n\n return [array$$100.slice(0, 0 + index$$4), array$$100.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$$40 = 0;\n let result$$13 = 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$$40 < length1 ? result$$13 === 0 : false) {\n result$$13 = comparer$$12(array1$$6[i$$40], array2$$6[i$$40]);\n i$$40 = i$$40 + 1;\n }\n\n return result$$13 | 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$$103) {\n if (array$$103.length === 1) {\n return array$$103[0];\n } else if (array$$103.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$$104) {\n if (array$$104.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n } else {\n return array$$104[0];\n }\n}\nexport function tryHead(array$$105) {\n if (array$$105.length === 0) {\n return undefined;\n } else {\n return some(array$$105[0]);\n }\n}\nexport function tail(array$$106) {\n if (array$$106.length === 0) {\n throw new Error(\"Not enough elements\\\\nParameter name: array\");\n } else {\n void null;\n }\n\n return array$$106.slice(1);\n}\nexport function item(index$$5, array$$108) {\n return array$$108[index$$5];\n}\nexport function tryItem(index$$6, array$$109) {\n if (index$$6 < 0 ? true : index$$6 >= array$$109.length) {\n return undefined;\n } else {\n return some(array$$109[index$$6]);\n }\n}\nexport function foldBackIndexed(folder$$6, array$$110, state$$10) {\n return array$$110.reduceRight(function (delegateArg0$$3, delegateArg1$$3, delegateArg2$$1) {\n return folder$$6(delegateArg2$$1, delegateArg1$$3, delegateArg0$$3);\n }, state$$10);\n}\nexport function foldBack(folder$$8, array$$112, state$$12) {\n return array$$112.reduceRight(function (delegateArg0$$4, delegateArg1$$4) {\n return folder$$8(delegateArg1$$4, delegateArg0$$4);\n }, 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 } else {\n void null;\n }\n\n for (let i$$42 = 0; i$$42 <= array1$$8.length - 1; i$$42++) {\n acc$$6 = folder$$10(i$$42, acc$$6, array1$$8[i$$42], array2$$8[i$$42]);\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$$21, y$$7) {\n return folder$$11(acc$$7, x$$21, 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 } else {\n void null;\n }\n\n const size$$1 = array1$$10.length | 0;\n\n for (let i$$43 = 1; i$$43 <= size$$1; i$$43++) {\n acc$$8 = folder$$12(i$$43 - 1, array1$$10[size$$1 - i$$43], array2$$10[size$$1 - i$$43], 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$$22, y$$8, acc$$9) {\n return f$$9(x$$22, y$$8, acc$$9);\n }, array1$$11, array2$$11, state$$17);\n}\nexport function reduce(reduction, array$$114) {\n if (array$$114.length === 0) {\n throw new Error(\"The input array was empty\");\n } else {\n void null;\n }\n\n return array$$114.reduce(reduction);\n}\nexport function reduceBack(reduction$$2, array$$116) {\n if (array$$116.length === 0) {\n throw new Error(\"The input array was empty\");\n } else {\n void null;\n }\n\n return array$$116.reduceRight(reduction$$2);\n}\nexport function forAll2(predicate$$29, array1$$12, array2$$12) {\n return fold2(function (acc$$10, x$$23, y$$9) {\n return acc$$10 ? predicate$$29(x$$23, y$$9) : false;\n }, true, array1$$12, array2$$12);\n}\nexport function existsOffset($predicate$$30$$281, $array$$118$$282, $index$$7$$283) {\n existsOffset: while (true) {\n const predicate$$30 = $predicate$$30$$281,\n array$$118 = $array$$118$$282,\n index$$7 = $index$$7$$283;\n\n if (index$$7 === array$$118.length) {\n return false;\n } else if (predicate$$30(array$$118[index$$7])) {\n return true;\n } else {\n $predicate$$30$$281 = predicate$$30;\n $array$$118$$282 = array$$118;\n $index$$7$$283 = index$$7 + 1;\n continue existsOffset;\n }\n\n break;\n }\n}\nexport function exists(predicate$$31, array$$119) {\n return existsOffset(predicate$$31, array$$119, 0);\n}\nexport function existsOffset2($predicate$$32$$286, $array1$$13$$287, $array2$$13$$288, $index$$8$$289) {\n existsOffset2: while (true) {\n const predicate$$32 = $predicate$$32$$286,\n array1$$13 = $array1$$13$$287,\n array2$$13 = $array2$$13$$288,\n index$$8 = $index$$8$$289;\n\n if (index$$8 === array1$$13.length) {\n return false;\n } else if (predicate$$32(array1$$13[index$$8], array2$$13[index$$8])) {\n return true;\n } else {\n $predicate$$32$$286 = predicate$$32;\n $array1$$13$$287 = array1$$13;\n $array2$$13$$288 = array2$$13;\n $index$$8$$289 = index$$8 + 1;\n continue existsOffset2;\n }\n\n break;\n }\n}\nexport function exists2(predicate$$33, array1$$14, array2$$14) {\n if (array1$$14.length !== array2$$14.length) {\n throw new Error(\"Arrays had different lengths\");\n } else {\n void null;\n }\n\n return existsOffset2(predicate$$33, array1$$14, array2$$14, 0);\n}\nexport function sum(array$$120, adder) {\n let acc$$11 = adder.GetZero();\n\n for (let i$$44 = 0; i$$44 <= array$$120.length - 1; i$$44++) {\n acc$$11 = adder.Add(acc$$11, array$$120[i$$44]);\n }\n\n return acc$$11;\n}\nexport function sumBy(projection$$6, array$$121, adder$$1) {\n let acc$$12 = adder$$1.GetZero();\n\n for (let i$$45 = 0; i$$45 <= array$$121.length - 1; i$$45++) {\n acc$$12 = adder$$1.Add(acc$$12, projection$$6(array$$121[i$$45]));\n }\n\n return acc$$12;\n}\nexport function maxBy(projection$$7, xs$$12, comparer$$14) {\n return reduce(function (x$$24, y$$10) {\n return comparer$$14.Compare(projection$$7(y$$10), projection$$7(x$$24)) > 0 ? y$$10 : x$$24;\n }, xs$$12);\n}\nexport function max(xs$$13, comparer$$15) {\n return reduce(function (x$$25, y$$11) {\n return comparer$$15.Compare(y$$11, x$$25) > 0 ? y$$11 : x$$25;\n }, xs$$13);\n}\nexport function minBy(projection$$8, xs$$14, comparer$$16) {\n return reduce(function (x$$26, y$$12) {\n return comparer$$16.Compare(projection$$8(y$$12), projection$$8(x$$26)) > 0 ? x$$26 : y$$12;\n }, xs$$14);\n}\nexport function min(xs$$15, comparer$$17) {\n return reduce(function (x$$27, y$$13) {\n return comparer$$17.Compare(y$$13, x$$27) > 0 ? x$$27 : y$$13;\n }, xs$$15);\n}\nexport function average(array$$122, averager) {\n if (array$$122.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n } else {\n void null;\n }\n\n let total = averager.GetZero();\n\n for (let i$$46 = 0; i$$46 <= array$$122.length - 1; i$$46++) {\n total = averager.Add(total, array$$122[i$$46]);\n }\n\n return averager.DivideByInt(total, array$$122.length);\n}\nexport function averageBy(projection$$9, array$$123, averager$$1) {\n if (array$$123.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n } else {\n void null;\n }\n\n let total$$1 = averager$$1.GetZero();\n\n for (let i$$47 = 0; i$$47 <= array$$123.length - 1; i$$47++) {\n total$$1 = averager$$1.Add(total$$1, projection$$9(array$$123[i$$47]));\n }\n\n return averager$$1.DivideByInt(total$$1, array$$123.length);\n}\nexport function ofSeq(source$$6, cons$$31) {\n return cons$$31.from(source$$6);\n}\nexport function ofList(source$$7, cons$$32) {\n return cons$$32.from(source$$7);\n}\nexport function toList(source$$8) {\n const len$$17 = source$$8.length | 0;\n let target$$6 = new List();\n\n for (let i$$48 = len$$17 - 1; i$$48 >= 0; i$$48--) {\n target$$6 = new List(source$$8[i$$48], target$$6);\n }\n\n return target$$6;\n}\nexport function windowed(windowSize, source$$9) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n } else {\n void null;\n }\n\n let res$$9;\n const len$$18 = max$$1(comparePrimitives, 0, source$$9.length - windowSize) | 0;\n res$$9 = new Array(len$$18);\n\n for (let i$$49 = windowSize; i$$49 <= source$$9.length; i$$49++) {\n res$$9[i$$49 - windowSize] = source$$9.slice(i$$49 - windowSize, i$$49 - 1 + 1);\n }\n\n return res$$9;\n}\nexport function splitInto(chunks, array$$124) {\n if (chunks < 1) {\n throw new Error(\"The input must be positive.\\\\nParameter name: chunks\");\n } else {\n void null;\n }\n\n if (array$$124.length === 0) {\n return [[]];\n } else {\n const result$$14 = [];\n const chunks$$1 = min$$1(comparePrimitives, chunks, array$$124.length) | 0;\n const minChunkSize = ~~(array$$124.length / chunks$$1) | 0;\n const chunksWithExtraItem = array$$124.length % chunks$$1 | 0;\n\n for (let i$$50 = 0; i$$50 <= chunks$$1 - 1; i$$50++) {\n const chunkSize$$1 = (i$$50 < chunksWithExtraItem ? minChunkSize + 1 : minChunkSize) | 0;\n const start$$11 = i$$50 * minChunkSize + min$$1(comparePrimitives, chunksWithExtraItem, i$$50) | 0;\n const slice$$1 = array$$124.slice(start$$11, start$$11 + chunkSize$$1);\n const value$$13 = result$$14.push(slice$$1);\n void value$$13;\n }\n\n return result$$14;\n }\n}\nexport function transpose(arrays$$2, cons$$33) {\n var value$$14;\n const arrays$$3 = Array.isArray(arrays$$2) ? arrays$$2 : Array.from(arrays$$2);\n const len$$20 = arrays$$3.length | 0;\n\n if (len$$20 === 0) {\n return new Array(0);\n } else {\n const lenInner = arrays$$3[0].length | 0;\n\n if (value$$14 = (forAll(function predicate$$34(a) {\n return a.length === lenInner;\n }, arrays$$3)), (!value$$14)) {\n throw new Error(\"Arrays had different lengths\");\n } else {\n void null;\n }\n\n const result$$15 = new Array(lenInner);\n\n for (let i$$51 = 0; i$$51 <= lenInner - 1; i$$51++) {\n result$$15[i$$51] = new cons$$33(len$$20);\n\n for (let j$$2 = 0; j$$2 <= len$$20 - 1; j$$2++) {\n result$$15[i$$51][j$$2] = arrays$$3[j$$2][i$$51];\n }\n }\n\n return result$$15;\n }\n}","import { List, declare, Record } from \"../Types.js\";\nimport { record_type, array_type, int32_type } from \"../Reflection.js\";\nimport { op_LeftShift, op_BitwiseAnd, op_Addition, compare, op_Subtraction, op_Division, equals, toInt, op_Modulus, op_Multiply, fromInteger, fromBits } from \"../Long.js\";\nimport { ofList, copy, initialize, map, fill } from \"../Array.js\";\nimport { int32ToString } from \"../Util.js\";\nimport { isNullOrEmpty, join } from \"../String.js\";\nexport const BigNat = declare(function BigInt_BigNat(bound, digits) {\n this.bound = bound | 0;\n this.digits = digits;\n}, Record);\nexport function BigNat$reflection() {\n return record_type(\"BigInt.BigNat\", [], BigNat, () => [[\"bound\", int32_type], [\"digits\", array_type(int32_type)]]);\n}\nexport function BigNatModule$002EFFT$$$pow32($x$$1, $n$$2) {\n BigNatModule$002EFFT$$$pow32: while (true) {\n const x = $x$$1,\n n = $n$$2;\n\n if (n === 0) {\n return 1;\n } else if (n % 2 === 0) {\n $x$$1 = x * x;\n $n$$2 = ~~(n / 2);\n continue BigNatModule$002EFFT$$$pow32;\n } else {\n return x * BigNatModule$002EFFT$$$pow32(x * x, ~~(n / 2)) | 0;\n }\n\n break;\n }\n}\nexport function BigNatModule$002EFFT$$$leastBounding2Power(b) {\n const findBounding2Power = function findBounding2Power($b$$1$$4, $tp$$5, $i$$6) {\n findBounding2Power: while (true) {\n const b$$1 = $b$$1$$4,\n tp = $tp$$5,\n i = $i$$6;\n\n if (b$$1 <= tp) {\n return [tp, i];\n } else {\n $b$$1$$4 = b$$1;\n $tp$$5 = tp * 2;\n $i$$6 = i + 1;\n continue findBounding2Power;\n }\n\n break;\n }\n };\n\n return findBounding2Power(b, 1, 0);\n}\nexport const BigNatModule$002EFFT$$$p = fromBits(2013265921, 0, false);\nconst BigNatModule$002EFFT$$$patternInput$004075 = [27, 15, 31, 440564289];\nexport const BigNatModule$002EFFT$$$w = BigNatModule$002EFFT$$$patternInput$004075[3];\nexport const BigNatModule$002EFFT$$$m = BigNatModule$002EFFT$$$patternInput$004075[1];\nexport const BigNatModule$002EFFT$$$k = BigNatModule$002EFFT$$$patternInput$004075[0];\nexport const BigNatModule$002EFFT$$$g = BigNatModule$002EFFT$$$patternInput$004075[2];\nexport const BigNatModule$002EFFT$$$primeP = BigNatModule$002EFFT$$$p;\nexport const BigNatModule$002EFFT$$$maxBitsInsideFp = 30;\nexport const BigNatModule$002EFFT$002EFp$$$p = 2013265921;\nexport const BigNatModule$002EFFT$002EFp$$$p64 = fromBits(2013265921, 0, true);\nexport function BigNatModule$002EFFT$002EFp$$$toInt(x$$1) {\n return ~~x$$1;\n}\nexport function BigNatModule$002EFFT$002EFp$$$ofInt32(x$$2) {\n return x$$2 >>> 0;\n}\nexport const BigNatModule$002EFFT$002EFp$$$mzero = 0;\nexport const BigNatModule$002EFFT$002EFp$$$mone = 1;\nexport const BigNatModule$002EFFT$002EFp$$$mtwo = 2;\nexport function BigNatModule$002EFFT$002EFp$$$mpow($x$$3$$9, $n$$1$$10) {\n BigNatModule$002EFFT$002EFp$$$mpow: while (true) {\n const x$$3 = $x$$3$$9,\n n$$1 = $n$$1$$10;\n\n if (n$$1 === 0) {\n return BigNatModule$002EFFT$002EFp$$$mone;\n } else if (n$$1 % 2 === 0) {\n $x$$3$$9 = toInt(op_Modulus(op_Multiply(fromInteger(x$$3, true, 6), fromInteger(x$$3, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n $n$$1$$10 = ~~(n$$1 / 2);\n continue BigNatModule$002EFFT$002EFp$$$mpow;\n } else {\n const y$$2 = BigNatModule$002EFFT$002EFp$$$mpow(toInt(op_Modulus(op_Multiply(fromInteger(x$$3, true, 6), fromInteger(x$$3, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0, ~~(n$$1 / 2));\n return toInt(op_Modulus(op_Multiply(fromInteger(x$$3, true, 6), fromInteger(y$$2, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n }\n\n break;\n }\n}\nexport function BigNatModule$002EFFT$002EFp$$$mpowL($x$$7$$11, $n$$2$$12) {\n BigNatModule$002EFFT$002EFp$$$mpowL: while (true) {\n const x$$7 = $x$$7$$11,\n n$$2 = $n$$2$$12;\n\n if (equals(n$$2, fromBits(0, 0, false))) {\n return BigNatModule$002EFFT$002EFp$$$mone;\n } else if (equals(op_Modulus(n$$2, fromBits(2, 0, false)), fromBits(0, 0, false))) {\n $x$$7$$11 = toInt(op_Modulus(op_Multiply(fromInteger(x$$7, true, 6), fromInteger(x$$7, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n $n$$2$$12 = op_Division(n$$2, fromBits(2, 0, false));\n continue BigNatModule$002EFFT$002EFp$$$mpowL;\n } else {\n const y$$5 = BigNatModule$002EFFT$002EFp$$$mpowL(toInt(op_Modulus(op_Multiply(fromInteger(x$$7, true, 6), fromInteger(x$$7, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0, op_Division(n$$2, fromBits(2, 0, false)));\n return toInt(op_Modulus(op_Multiply(fromInteger(x$$7, true, 6), fromInteger(y$$5, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n }\n\n break;\n }\n}\nexport function BigNatModule$002EFFT$002EFp$$$m2PowNthRoot(n$$3) {\n return BigNatModule$002EFFT$002EFp$$$mpow(BigNatModule$002EFFT$$$w >>> 0, BigNatModule$002EFFT$$$pow32(2, BigNatModule$002EFFT$$$k - n$$3));\n}\nexport function BigNatModule$002EFFT$002EFp$$$minv(x$$11) {\n return BigNatModule$002EFFT$002EFp$$$mpowL(x$$11, op_Subtraction(BigNatModule$002EFFT$$$primeP, fromBits(2, 0, false)));\n}\nexport function BigNatModule$002EFFT$$$computeFFT(lambda, mu, n$$4, w, u, res, offset) {\n if (n$$4 === 1) {\n res[offset] = u[mu];\n } else {\n const halfN = ~~(n$$4 / 2) | 0;\n const ww = toInt(op_Modulus(op_Multiply(fromInteger(w, true, 6), fromInteger(w, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n const offsetHalfN = offset + halfN | 0;\n BigNatModule$002EFFT$$$computeFFT(lambda * 2, mu, halfN, ww, u, res, offset);\n BigNatModule$002EFFT$$$computeFFT(lambda * 2, lambda + mu, halfN, ww, u, res, offsetHalfN);\n let wj = BigNatModule$002EFFT$002EFp$$$mone;\n\n for (let j = 0; j <= halfN - 1; j++) {\n const even = res[offset + j];\n const odd = res[offsetHalfN + j];\n let y$$8;\n const x$$13 = wj;\n y$$8 = toInt(op_Modulus(op_Multiply(fromInteger(x$$13, true, 6), fromInteger(odd, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n res[offset + j] = (even + y$$8) % BigNatModule$002EFFT$002EFp$$$p;\n let y$$10;\n const x$$15 = wj;\n y$$10 = toInt(op_Modulus(op_Multiply(fromInteger(x$$15, true, 6), fromInteger(odd, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n res[offsetHalfN + j] = (even + BigNatModule$002EFFT$002EFp$$$p - y$$10) % BigNatModule$002EFFT$002EFp$$$p;\n const y$$11 = wj;\n wj = toInt(op_Modulus(op_Multiply(fromInteger(w, true, 6), fromInteger(y$$11, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n }\n }\n}\nexport function BigNatModule$002EFFT$$$computFftInPlace(n$$5, w$$1, u$$1) {\n const res$$1 = fill(new Uint32Array(n$$5), 0, n$$5, BigNatModule$002EFFT$002EFp$$$mzero);\n BigNatModule$002EFFT$$$computeFFT(1, 0, n$$5, w$$1, u$$1, res$$1, 0);\n return res$$1;\n}\nexport function BigNatModule$002EFFT$$$computeInverseFftInPlace(n$$6, w$$2, uT) {\n const bigKInv = BigNatModule$002EFFT$002EFp$$$minv(n$$6 >>> 0);\n return map(function (y$$12) {\n return toInt(op_Modulus(op_Multiply(fromInteger(bigKInv, true, 6), fromInteger(y$$12, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n }, BigNatModule$002EFFT$$$computFftInPlace(n$$6, BigNatModule$002EFFT$002EFp$$$minv(w$$2), uT), Uint32Array);\n}\nexport const BigNatModule$002EFFT$$$maxTwoPower = 29;\nexport const BigNatModule$002EFFT$$$twoPowerTable = initialize(BigNatModule$002EFFT$$$maxTwoPower - 1, function (i$$1) {\n return BigNatModule$002EFFT$$$pow32(2, i$$1);\n}, Int32Array);\nexport function BigNatModule$002EFFT$$$computeFftPaddedPolynomialProduct(bigK, k, u$$2, v) {\n const w$$3 = BigNatModule$002EFFT$002EFp$$$m2PowNthRoot(k);\n const uT$$1 = BigNatModule$002EFFT$$$computFftInPlace(bigK, w$$3, u$$2);\n const vT = BigNatModule$002EFFT$$$computFftInPlace(bigK, w$$3, v);\n const rT = initialize(bigK, function (i$$2) {\n const x$$19 = uT$$1[i$$2];\n const y$$14 = vT[i$$2];\n return toInt(op_Modulus(op_Multiply(fromInteger(x$$19, true, 6), fromInteger(y$$14, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n }, Uint32Array);\n const r = BigNatModule$002EFFT$$$computeInverseFftInPlace(bigK, w$$3, rT);\n return r;\n}\nexport function BigNatModule$002EFFT$$$padTo(n$$8, u$$3) {\n const uBound = u$$3.length | 0;\n return initialize(n$$8, function (i$$3) {\n return i$$3 < uBound ? BigNatModule$002EFFT$002EFp$$$ofInt32(u$$3[i$$3]) : BigNatModule$002EFFT$002EFp$$$mzero;\n }, Uint32Array);\n}\nexport function BigNatModule$002EFFT$$$computeFftPolynomialProduct(degu, u$$4, degv, v$$1) {\n const deguv = degu + degv | 0;\n const bound = deguv + 1 | 0;\n const patternInput = BigNatModule$002EFFT$$$leastBounding2Power(bound);\n const w$$4 = BigNatModule$002EFFT$002EFp$$$m2PowNthRoot(patternInput[1]);\n const u$$5 = BigNatModule$002EFFT$$$padTo(patternInput[0], u$$4);\n const v$$2 = BigNatModule$002EFFT$$$padTo(patternInput[0], v$$1);\n const uT$$2 = BigNatModule$002EFFT$$$computFftInPlace(patternInput[0], w$$4, u$$5);\n const vT$$1 = BigNatModule$002EFFT$$$computFftInPlace(patternInput[0], w$$4, v$$2);\n const rT$$1 = initialize(patternInput[0], function (i$$4) {\n const x$$20 = uT$$2[i$$4];\n const y$$15 = vT$$1[i$$4];\n return toInt(op_Modulus(op_Multiply(fromInteger(x$$20, true, 6), fromInteger(y$$15, true, 6)), BigNatModule$002EFFT$002EFp$$$p64)) >>> 0;\n }, Uint32Array);\n const r$$1 = BigNatModule$002EFFT$$$computeInverseFftInPlace(patternInput[0], w$$4, rT$$1);\n return map(BigNatModule$002EFFT$002EFp$$$toInt, r$$1, Int32Array);\n}\nexport const BigNatModule$002EFFT$$$mzero = BigNatModule$002EFFT$002EFp$$$mzero;\nexport const BigNatModule$002EFFT$$$mone = BigNatModule$002EFFT$002EFp$$$mone;\nexport const BigNatModule$002EFFT$$$maxFp = (BigNatModule$002EFFT$002EFp$$$p + BigNatModule$002EFFT$002EFp$$$p - BigNatModule$002EFFT$$$mone) % BigNatModule$002EFFT$002EFp$$$p;\nexport function BigNatModule$$$bound(n$$10) {\n return n$$10.bound;\n}\nexport function BigNatModule$$$setBound(n$$11, v$$3) {\n n$$11.bound = v$$3;\n}\nexport function BigNatModule$$$coeff(n$$12, i$$5) {\n return n$$12.digits[i$$5];\n}\nexport function BigNatModule$$$coeff64(n$$13, i$$6) {\n return fromInteger(BigNatModule$$$coeff(n$$13, i$$6), false, 2);\n}\nexport function BigNatModule$$$setCoeff(n$$14, i$$7, v$$4) {\n n$$14.digits[i$$7] = v$$4;\n}\nexport function BigNatModule$$$pow64($x$$23$$48, $n$$15$$49) {\n BigNatModule$$$pow64: while (true) {\n const x$$23 = $x$$23$$48,\n n$$15 = $n$$15$$49;\n\n if (n$$15 === 0) {\n return fromBits(1, 0, false);\n } else if (n$$15 % 2 === 0) {\n $x$$23$$48 = op_Multiply(x$$23, x$$23);\n $n$$15$$49 = ~~(n$$15 / 2);\n continue BigNatModule$$$pow64;\n } else {\n return op_Multiply(x$$23, BigNatModule$$$pow64(op_Multiply(x$$23, x$$23), ~~(n$$15 / 2)));\n }\n\n break;\n }\n}\nexport function BigNatModule$$$pow32($x$$24$$50, $n$$16$$51) {\n BigNatModule$$$pow32: while (true) {\n const x$$24 = $x$$24$$50,\n n$$16 = $n$$16$$51;\n\n if (n$$16 === 0) {\n return 1;\n } else if (n$$16 % 2 === 0) {\n $x$$24$$50 = x$$24 * x$$24;\n $n$$16$$51 = ~~(n$$16 / 2);\n continue BigNatModule$$$pow32;\n } else {\n return x$$24 * BigNatModule$$$pow32(x$$24 * x$$24, ~~(n$$16 / 2)) | 0;\n }\n\n break;\n }\n}\nexport function BigNatModule$$$hash(n$$17) {\n let res$$2 = 0;\n\n for (let i$$8 = 0; i$$8 <= n$$17.bound - 1; i$$8++) {\n res$$2 = n$$17.digits[i$$8] + (res$$2 << 3);\n }\n\n return res$$2 | 0;\n}\nexport function BigNatModule$$$maxInt(a, b$$2) {\n if (a < b$$2) {\n return b$$2 | 0;\n } else {\n return a | 0;\n }\n}\nexport function BigNatModule$$$minInt(a$$1, b$$3) {\n if (a$$1 < b$$3) {\n return a$$1 | 0;\n } else {\n return b$$3 | 0;\n }\n}\nexport const BigNatModule$$$baseBits = 24;\nexport const BigNatModule$$$baseN = 16777216;\nexport const BigNatModule$$$baseMask = 16777215;\nexport const BigNatModule$$$baseNi64 = fromBits(16777216, 0, false);\nexport const BigNatModule$$$baseMaski64 = fromBits(16777215, 0, false);\nexport const BigNatModule$$$baseMaskU = fromBits(16777215, 0, true);\nexport const BigNatModule$$$baseMask32A = 16777215;\nexport const BigNatModule$$$baseMask32B = 255;\nexport const BigNatModule$$$baseShift32B = 24;\nexport const BigNatModule$$$baseMask64A = 16777215;\nexport const BigNatModule$$$baseMask64B = 16777215;\nexport const BigNatModule$$$baseMask64C = 65535;\nexport const BigNatModule$$$baseShift64B = 24;\nexport const BigNatModule$$$baseShift64C = 48;\nexport function BigNatModule$$$divbase(x$$25) {\n return ~~(x$$25 >>> 0 >>> BigNatModule$$$baseBits);\n}\nexport function BigNatModule$$$modbase(x$$26) {\n return x$$26 & BigNatModule$$$baseMask;\n}\nexport function BigNatModule$$$createN(b$$4) {\n return new BigNat(b$$4, new Int32Array(b$$4));\n}\nexport function BigNatModule$$$copyN(x$$27) {\n return new BigNat(x$$27.bound, copy(x$$27.digits, Int32Array));\n}\nexport function BigNatModule$$$normN(n$$18) {\n const findLeastBound = function findLeastBound($na$$62, $i$$9$$63) {\n findLeastBound: while (true) {\n const na = $na$$62,\n i$$9 = $i$$9$$63;\n\n if (i$$9 === -1 ? true : na[i$$9] !== 0) {\n return i$$9 + 1 | 0;\n } else {\n $na$$62 = na;\n $i$$9$$63 = i$$9 - 1;\n continue findLeastBound;\n }\n\n break;\n }\n };\n\n const bound$$1 = findLeastBound(n$$18.digits, n$$18.bound - 1) | 0;\n n$$18.bound = bound$$1;\n return n$$18;\n}\nexport const BigNatModule$$$boundInt = 2;\nexport const BigNatModule$$$boundInt64 = 3;\nexport const BigNatModule$$$boundBase = 1;\nexport function BigNatModule$$$embed(x$$28) {\n const x$$29 = (x$$28 < 0 ? 0 : x$$28) | 0;\n\n if (x$$29 < BigNatModule$$$baseN) {\n const r$$2 = BigNatModule$$$createN(1);\n r$$2.digits[0] = x$$29;\n return BigNatModule$$$normN(r$$2);\n } else {\n const r$$3 = BigNatModule$$$createN(BigNatModule$$$boundInt);\n\n for (let i$$10 = 0; i$$10 <= BigNatModule$$$boundInt - 1; i$$10++) {\n r$$3.digits[i$$10] = ~~(x$$29 / BigNatModule$$$pow32(BigNatModule$$$baseN, i$$10)) % BigNatModule$$$baseN;\n }\n\n return BigNatModule$$$normN(r$$3);\n }\n}\nexport function BigNatModule$$$embed64(x$$30) {\n const x$$31 = compare(x$$30, fromBits(0, 0, false)) < 0 ? fromBits(0, 0, false) : x$$30;\n const r$$4 = BigNatModule$$$createN(BigNatModule$$$boundInt64);\n\n for (let i$$11 = 0; i$$11 <= BigNatModule$$$boundInt64 - 1; i$$11++) {\n r$$4.digits[i$$11] = ~~toInt(op_Modulus(op_Division(x$$31, BigNatModule$$$pow64(BigNatModule$$$baseNi64, i$$11)), BigNatModule$$$baseNi64));\n }\n\n return BigNatModule$$$normN(r$$4);\n}\nexport function BigNatModule$$$eval32(n$$19) {\n if (n$$19.bound === 1) {\n return n$$19.digits[0] | 0;\n } else {\n let acc = 0;\n\n for (let i$$12 = n$$19.bound - 1; i$$12 >= 0; i$$12--) {\n acc = n$$19.digits[i$$12] + BigNatModule$$$baseN * acc;\n }\n\n return acc | 0;\n }\n}\nexport function BigNatModule$$$eval64(n$$20) {\n if (n$$20.bound === 1) {\n return fromInteger(n$$20.digits[0], false, 2);\n } else {\n let acc$$1 = fromBits(0, 0, false);\n\n for (let i$$13 = n$$20.bound - 1; i$$13 >= 0; i$$13--) {\n acc$$1 = op_Addition(fromInteger(n$$20.digits[i$$13], false, 2), op_Multiply(BigNatModule$$$baseNi64, acc$$1));\n }\n\n return acc$$1;\n }\n}\nexport const BigNatModule$$$one = BigNatModule$$$embed(1);\nexport const BigNatModule$$$zero = BigNatModule$$$embed(0);\nexport function BigNatModule$$$restrictTo(d, n$$21) {\n return new BigNat(BigNatModule$$$minInt(d, n$$21.bound), n$$21.digits);\n}\nexport function BigNatModule$$$shiftUp(d$$1, n$$22) {\n const m = BigNatModule$$$createN(n$$22.bound + d$$1);\n\n for (let i$$14 = 0; i$$14 <= n$$22.bound - 1; i$$14++) {\n m.digits[i$$14 + d$$1] = n$$22.digits[i$$14];\n }\n\n return m;\n}\nexport function BigNatModule$$$shiftDown(d$$2, n$$23) {\n if (n$$23.bound - d$$2 <= 0) {\n return BigNatModule$$$zero;\n } else {\n const m$$1 = BigNatModule$$$createN(n$$23.bound - d$$2);\n\n for (let i$$15 = 0; i$$15 <= m$$1.bound - 1; i$$15++) {\n m$$1.digits[i$$15] = n$$23.digits[i$$15 + d$$2];\n }\n\n return m$$1;\n }\n}\nexport function BigNatModule$$$degree(n$$24) {\n return n$$24.bound - 1;\n}\nexport function BigNatModule$$$addP($i$$16$$75, $n$$25$$76, $c$$77, $p$$78, $q$$79, $r$$5$$80) {\n BigNatModule$$$addP: while (true) {\n const i$$16 = $i$$16$$75,\n n$$25 = $n$$25$$76,\n c = $c$$77,\n p = $p$$78,\n q = $q$$79,\n r$$5 = $r$$5$$80;\n\n if (i$$16 < n$$25) {\n const x$$32 = (i$$16 < p.bound ? p.digits[i$$16] : 0) + (i$$16 < q.bound ? q.digits[i$$16] : 0) + c | 0;\n r$$5.digits[i$$16] = BigNatModule$$$modbase(x$$32);\n const c$$1 = BigNatModule$$$divbase(x$$32) | 0;\n $i$$16$$75 = i$$16 + 1;\n $n$$25$$76 = n$$25;\n $c$$77 = c$$1;\n $p$$78 = p;\n $q$$79 = q;\n $r$$5$$80 = r$$5;\n continue BigNatModule$$$addP;\n } else {\n void null;\n }\n\n break;\n }\n}\nexport function BigNatModule$$$add(p$$1, q$$1) {\n const rbound = 1 + BigNatModule$$$maxInt(p$$1.bound, q$$1.bound) | 0;\n const r$$6 = BigNatModule$$$createN(rbound);\n BigNatModule$$$addP(0, rbound, 0, p$$1, q$$1, r$$6);\n return BigNatModule$$$normN(r$$6);\n}\nexport function BigNatModule$$$subP($i$$19$$83, $n$$26$$84, $c$$2$$85, $p$$2$$86, $q$$2$$87, $r$$7$$88) {\n BigNatModule$$$subP: while (true) {\n const i$$19 = $i$$19$$83,\n n$$26 = $n$$26$$84,\n c$$2 = $c$$2$$85,\n p$$2 = $p$$2$$86,\n q$$2 = $q$$2$$87,\n r$$7 = $r$$7$$88;\n\n if (i$$19 < n$$26) {\n const x$$33 = (i$$19 < p$$2.bound ? p$$2.digits[i$$19] : 0) - (i$$19 < q$$2.bound ? q$$2.digits[i$$19] : 0) + c$$2 | 0;\n\n if (x$$33 > 0) {\n r$$7.digits[i$$19] = BigNatModule$$$modbase(x$$33);\n const c$$3 = BigNatModule$$$divbase(x$$33) | 0;\n $i$$19$$83 = i$$19 + 1;\n $n$$26$$84 = n$$26;\n $c$$2$$85 = c$$3;\n $p$$2$$86 = p$$2;\n $q$$2$$87 = q$$2;\n $r$$7$$88 = r$$7;\n continue BigNatModule$$$subP;\n } else {\n const x$$34 = x$$33 + BigNatModule$$$baseN | 0;\n r$$7.digits[i$$19] = BigNatModule$$$modbase(x$$34);\n const c$$4 = BigNatModule$$$divbase(x$$34) - 1 | 0;\n $i$$19$$83 = i$$19 + 1;\n $n$$26$$84 = n$$26;\n $c$$2$$85 = c$$4;\n $p$$2$$86 = p$$2;\n $q$$2$$87 = q$$2;\n $r$$7$$88 = r$$7;\n continue BigNatModule$$$subP;\n }\n } else {\n const underflow = c$$2 !== 0;\n return underflow;\n }\n\n break;\n }\n}\nexport function BigNatModule$$$sub(p$$3, q$$3) {\n const rbound$$1 = BigNatModule$$$maxInt(p$$3.bound, q$$3.bound) | 0;\n const r$$8 = BigNatModule$$$createN(rbound$$1);\n const underflow$$1 = BigNatModule$$$subP(0, rbound$$1, 0, p$$3, q$$3, r$$8);\n\n if (underflow$$1) {\n return BigNatModule$$$embed(0);\n } else {\n return BigNatModule$$$normN(r$$8);\n }\n}\nexport function BigNatModule$$$isZero(p$$4) {\n return p$$4.bound === 0;\n}\nexport function BigNatModule$$$IsZero(p$$5) {\n return BigNatModule$$$isZero(p$$5);\n}\nexport function BigNatModule$$$isOne(p$$6) {\n if (p$$6.bound === 1) {\n return p$$6.digits[0] === 1;\n } else {\n return false;\n }\n}\nexport function BigNatModule$$$equal(p$$7, q$$4) {\n if (p$$7.bound === q$$4.bound) {\n const check = function check($pa$$96, $qa$$97, $i$$22$$98) {\n check: while (true) {\n const pa = $pa$$96,\n qa = $qa$$97,\n i$$22 = $i$$22$$98;\n\n if (i$$22 === -1) {\n return true;\n } else if (pa[i$$22] === qa[i$$22]) {\n $pa$$96 = pa;\n $qa$$97 = qa;\n $i$$22$$98 = i$$22 - 1;\n continue check;\n } else {\n return false;\n }\n\n break;\n }\n };\n\n return check(p$$7.digits, q$$4.digits, p$$7.bound - 1);\n } else {\n return false;\n }\n}\nexport function BigNatModule$$$shiftCompare(p$$8, pn, q$$5, qn) {\n if (p$$8.bound + pn < q$$5.bound + qn) {\n return -1 | 0;\n } else if (p$$8.bound + pn > q$$5.bound + pn) {\n return 1;\n } else {\n const check$$1 = function check$$1($pa$$1$$103, $qa$$1$$104, $i$$23$$105) {\n check$$1: while (true) {\n const pa$$1 = $pa$$1$$103,\n qa$$1 = $qa$$1$$104,\n i$$23 = $i$$23$$105;\n\n if (i$$23 === -1) {\n return 0;\n } else {\n const pai = (i$$23 < pn ? 0 : pa$$1[i$$23 - pn]) | 0;\n const qai = (i$$23 < qn ? 0 : qa$$1[i$$23 - qn]) | 0;\n\n if (pai === qai) {\n $pa$$1$$103 = pa$$1;\n $qa$$1$$104 = qa$$1;\n $i$$23$$105 = i$$23 - 1;\n continue check$$1;\n } else if (pai < qai) {\n return -1 | 0;\n } else {\n return 1;\n }\n }\n\n break;\n }\n };\n\n return check$$1(p$$8.digits, q$$5.digits, p$$8.bound + pn - 1) | 0;\n }\n}\nexport function BigNatModule$$$compare(p$$9, q$$6) {\n if (p$$9.bound < q$$6.bound) {\n return -1 | 0;\n } else if (p$$9.bound > q$$6.bound) {\n return 1;\n } else {\n const check$$2 = function check$$2($pa$$2$$108, $qa$$2$$109, $i$$24$$110) {\n check$$2: while (true) {\n const pa$$2 = $pa$$2$$108,\n qa$$2 = $qa$$2$$109,\n i$$24 = $i$$24$$110;\n\n if (i$$24 === -1) {\n return 0;\n } else if (pa$$2[i$$24] === qa$$2[i$$24]) {\n $pa$$2$$108 = pa$$2;\n $qa$$2$$109 = qa$$2;\n $i$$24$$110 = i$$24 - 1;\n continue check$$2;\n } else if (pa$$2[i$$24] < qa$$2[i$$24]) {\n return -1 | 0;\n } else {\n return 1;\n }\n\n break;\n }\n };\n\n return check$$2(p$$9.digits, q$$6.digits, p$$9.bound - 1) | 0;\n }\n}\nexport function BigNatModule$$$lt(p$$10, q$$7) {\n return BigNatModule$$$compare(p$$10, q$$7) === -1;\n}\nexport function BigNatModule$$$gt(p$$11, q$$8) {\n return BigNatModule$$$compare(p$$11, q$$8) === 1;\n}\nexport function BigNatModule$$$lte(p$$12, q$$9) {\n return BigNatModule$$$compare(p$$12, q$$9) !== 1;\n}\nexport function BigNatModule$$$gte(p$$13, q$$10) {\n return BigNatModule$$$compare(p$$13, q$$10) !== -1;\n}\nexport function BigNatModule$$$min(a$$2, b$$5) {\n if (BigNatModule$$$lt(a$$2, b$$5)) {\n return a$$2;\n } else {\n return b$$5;\n }\n}\nexport function BigNatModule$$$max(a$$3, b$$6) {\n if (BigNatModule$$$lt(a$$3, b$$6)) {\n return b$$6;\n } else {\n return a$$3;\n }\n}\nexport function BigNatModule$$$contributeArr($a$$4$$123, $i$$25$$124, $c$$5$$125) {\n BigNatModule$$$contributeArr: while (true) {\n const a$$4 = $a$$4$$123,\n i$$25 = $i$$25$$124,\n c$$5 = $c$$5$$125;\n const x$$35 = op_Addition(fromInteger(a$$4[i$$25], false, 2), c$$5);\n const c$$6 = op_Division(x$$35, BigNatModule$$$baseNi64);\n let x$$38;\n const value = op_BitwiseAnd(x$$35, BigNatModule$$$baseMaski64);\n x$$38 = ~~toInt(value);\n a$$4[i$$25] = x$$38;\n\n if (compare(c$$6, fromBits(0, 0, false)) > 0) {\n $a$$4$$123 = a$$4;\n $i$$25$$124 = i$$25 + 1;\n $c$$5$$125 = c$$6;\n continue BigNatModule$$$contributeArr;\n } else {\n void null;\n }\n\n break;\n }\n}\nexport function BigNatModule$$$scale(k$$2, p$$14) {\n const rbound$$2 = p$$14.bound + BigNatModule$$$boundInt | 0;\n const r$$9 = BigNatModule$$$createN(rbound$$2);\n const k$$3 = fromInteger(k$$2, false, 2);\n\n for (let i$$26 = 0; i$$26 <= p$$14.bound - 1; i$$26++) {\n const kpi = op_Multiply(k$$3, fromInteger(p$$14.digits[i$$26], false, 2));\n BigNatModule$$$contributeArr(r$$9.digits, i$$26, kpi);\n }\n\n return BigNatModule$$$normN(r$$9);\n}\nexport function BigNatModule$$$mulSchoolBookBothSmall(p$$15, q$$11) {\n var value$$1;\n const r$$11 = BigNatModule$$$createN(2);\n const rak = op_Multiply(fromInteger(p$$15, false, 2), fromInteger(q$$11, false, 2));\n BigNatModule$$$setCoeff(r$$11, 0, (value$$1 = op_BitwiseAnd(rak, BigNatModule$$$baseMaski64), (~~toInt(value$$1))));\n BigNatModule$$$setCoeff(r$$11, 1, ~~toInt(op_Division(rak, BigNatModule$$$baseNi64)));\n return BigNatModule$$$normN(r$$11);\n}\nexport function BigNatModule$$$mulSchoolBookCarry($r$$12$$130, $c$$8$$131, $k$$4$$132) {\n var value$$2;\n\n BigNatModule$$$mulSchoolBookCarry: while (true) {\n const r$$12 = $r$$12$$130,\n c$$8 = $c$$8$$131,\n k$$4 = $k$$4$$132;\n\n if (compare(c$$8, fromBits(0, 0, false)) > 0) {\n const rak$$1 = op_Addition(BigNatModule$$$coeff64(r$$12, k$$4), c$$8);\n BigNatModule$$$setCoeff(r$$12, k$$4, (value$$2 = op_BitwiseAnd(rak$$1, BigNatModule$$$baseMaski64), (~~toInt(value$$2))));\n $r$$12$$130 = r$$12;\n $c$$8$$131 = op_Division(rak$$1, BigNatModule$$$baseNi64);\n $k$$4$$132 = k$$4 + 1;\n continue BigNatModule$$$mulSchoolBookCarry;\n } else {\n void null;\n }\n\n break;\n }\n}\nexport function BigNatModule$$$mulSchoolBookOneSmall(p$$16, q$$12) {\n var value$$3;\n const bp = BigNatModule$$$bound(p$$16) | 0;\n const rbound$$3 = bp + 1 | 0;\n const r$$13 = BigNatModule$$$createN(rbound$$3);\n const q$$13 = fromInteger(q$$12, false, 2);\n let c$$9 = fromBits(0, 0, false);\n\n for (let i$$28 = 0; i$$28 <= bp - 1; i$$28++) {\n const rak$$2 = op_Addition(op_Addition(c$$9, BigNatModule$$$coeff64(r$$13, i$$28)), op_Multiply(BigNatModule$$$coeff64(p$$16, i$$28), q$$13));\n BigNatModule$$$setCoeff(r$$13, i$$28, (value$$3 = op_BitwiseAnd(rak$$2, BigNatModule$$$baseMaski64), (~~toInt(value$$3))));\n c$$9 = op_Division(rak$$2, BigNatModule$$$baseNi64);\n }\n\n BigNatModule$$$mulSchoolBookCarry(r$$13, c$$9, bp);\n return BigNatModule$$$normN(r$$13);\n}\nexport function BigNatModule$$$mulSchoolBookNeitherSmall(p$$17, q$$14) {\n var value$$4;\n const rbound$$4 = p$$17.bound + q$$14.bound | 0;\n const r$$14 = BigNatModule$$$createN(rbound$$4);\n\n for (let i$$29 = 0; i$$29 <= p$$17.bound - 1; i$$29++) {\n const pai$$1 = fromInteger(p$$17.digits[i$$29], false, 2);\n let c$$10 = fromBits(0, 0, false);\n let k$$5 = i$$29 | 0;\n\n for (let j$$1 = 0; j$$1 <= q$$14.bound - 1; j$$1++) {\n const qaj = fromInteger(q$$14.digits[j$$1], false, 2);\n const rak$$3 = op_Addition(op_Addition(fromInteger(r$$14.digits[k$$5], false, 2), c$$10), op_Multiply(pai$$1, qaj));\n r$$14.digits[k$$5] = (value$$4 = op_BitwiseAnd(rak$$3, BigNatModule$$$baseMaski64), (~~toInt(value$$4)));\n c$$10 = op_Division(rak$$3, BigNatModule$$$baseNi64);\n k$$5 = k$$5 + 1;\n }\n\n BigNatModule$$$mulSchoolBookCarry(r$$14, c$$10, k$$5);\n }\n\n return BigNatModule$$$normN(r$$14);\n}\nexport function BigNatModule$$$mulSchoolBook(p$$18, q$$15) {\n const pSmall = BigNatModule$$$bound(p$$18) === 1;\n const qSmall = BigNatModule$$$bound(q$$15) === 1;\n\n if (pSmall ? qSmall : false) {\n return BigNatModule$$$mulSchoolBookBothSmall(BigNatModule$$$coeff(p$$18, 0), BigNatModule$$$coeff(q$$15, 0));\n } else if (pSmall) {\n return BigNatModule$$$mulSchoolBookOneSmall(q$$15, BigNatModule$$$coeff(p$$18, 0));\n } else if (qSmall) {\n return BigNatModule$$$mulSchoolBookOneSmall(p$$18, BigNatModule$$$coeff(q$$15, 0));\n } else {\n return BigNatModule$$$mulSchoolBookNeitherSmall(p$$18, q$$15);\n }\n}\nexport const BigNatModule$002Eencoding = declare(function BigInt_BigNatModule_encoding(bigL, twoToBigL, k, bigK, bigN, split, splits) {\n this.bigL = bigL | 0;\n this.twoToBigL = twoToBigL | 0;\n this.k = k | 0;\n this.bigK = bigK | 0;\n this.bigN = bigN | 0;\n this.split = split | 0;\n this.splits = splits;\n}, Record);\nexport function BigNatModule$002Eencoding$reflection() {\n return record_type(\"BigInt.BigNatModule.encoding\", [], BigNatModule$002Eencoding, () => [[\"bigL\", int32_type], [\"twoToBigL\", int32_type], [\"k\", int32_type], [\"bigK\", int32_type], [\"bigN\", int32_type], [\"split\", int32_type], [\"splits\", array_type(int32_type)]]);\n}\nexport function BigNatModule$$$mkEncoding(bigL, k$$6, bigK$$2, bigN) {\n return new BigNatModule$002Eencoding(bigL, BigNatModule$$$pow32(2, bigL), k$$6, bigK$$2, bigN, ~~(BigNatModule$$$baseBits / bigL), initialize(~~(BigNatModule$$$baseBits / bigL), function (i$$30) {\n return BigNatModule$$$pow32(2, bigL * i$$30);\n }, Int32Array));\n}\nexport const BigNatModule$$$table = [BigNatModule$$$mkEncoding(1, 28, 268435456, 268435456), BigNatModule$$$mkEncoding(2, 26, 67108864, 134217728), BigNatModule$$$mkEncoding(3, 24, 16777216, 50331648), BigNatModule$$$mkEncoding(4, 22, 4194304, 16777216), BigNatModule$$$mkEncoding(5, 20, 1048576, 5242880), BigNatModule$$$mkEncoding(6, 18, 262144, 1572864), BigNatModule$$$mkEncoding(7, 16, 65536, 458752), BigNatModule$$$mkEncoding(8, 14, 16384, 131072), BigNatModule$$$mkEncoding(9, 12, 4096, 36864), BigNatModule$$$mkEncoding(10, 10, 1024, 10240), BigNatModule$$$mkEncoding(11, 8, 256, 2816), BigNatModule$$$mkEncoding(12, 6, 64, 768), BigNatModule$$$mkEncoding(13, 4, 16, 208)];\nexport function BigNatModule$$$calculateTableTow(bigL$$1) {\n const k$$7 = BigNatModule$002EFFT$$$maxBitsInsideFp - 2 * bigL$$1 | 0;\n const bigK$$3 = BigNatModule$$$pow64(fromBits(2, 0, false), k$$7);\n const N = op_Multiply(bigK$$3, fromInteger(bigL$$1, false, 2));\n return [bigL$$1, k$$7, bigK$$3, N];\n}\nexport function BigNatModule$$$encodingGivenResultBits(bitsRes) {\n const selectFrom = function selectFrom($i$$31$$145) {\n selectFrom: while (true) {\n const i$$31 = $i$$31$$145;\n\n if (i$$31 + 1 < BigNatModule$$$table.length ? bitsRes < BigNatModule$$$table[i$$31 + 1].bigN : false) {\n $i$$31$$145 = i$$31 + 1;\n continue selectFrom;\n } else {\n return BigNatModule$$$table[i$$31];\n }\n\n break;\n }\n };\n\n if (bitsRes >= BigNatModule$$$table[0].bigN) {\n throw new Error(\"Product is huge, around 268435456 bits, beyond quickmul\");\n } else {\n return selectFrom(0);\n }\n}\nexport const BigNatModule$$$bitmask = initialize(BigNatModule$$$baseBits, function (i$$32) {\n return BigNatModule$$$pow32(2, i$$32) - 1;\n}, Int32Array);\nexport const BigNatModule$$$twopowers = initialize(BigNatModule$$$baseBits, function (i$$33) {\n return BigNatModule$$$pow32(2, i$$33);\n}, Int32Array);\nexport const BigNatModule$$$twopowersI64 = initialize(BigNatModule$$$baseBits, function (i$$34) {\n return BigNatModule$$$pow64(fromBits(2, 0, false), i$$34);\n}, Array);\nexport function BigNatModule$$$wordBits(word) {\n const hi = function hi($k$$8$$147) {\n hi: while (true) {\n const k$$8 = $k$$8$$147;\n\n if (k$$8 === 0) {\n return 0;\n } else if ((word & BigNatModule$$$twopowers[k$$8 - 1]) !== 0) {\n return k$$8 | 0;\n } else {\n $k$$8$$147 = k$$8 - 1;\n continue hi;\n }\n\n break;\n }\n };\n\n return hi(BigNatModule$$$baseBits) | 0;\n}\nexport function BigNatModule$$$bits(u$$6) {\n if (u$$6.bound === 0) {\n return 0;\n } else {\n return BigNatModule$$$degree(u$$6) * BigNatModule$$$baseBits + BigNatModule$$$wordBits(u$$6.digits[BigNatModule$$$degree(u$$6)]) | 0;\n }\n}\nexport function BigNatModule$$$extractBits(n$$27, enc, bi) {\n const bj = bi + enc.bigL - 1 | 0;\n const biw = ~~(bi / BigNatModule$$$baseBits) | 0;\n const bjw = ~~(bj / BigNatModule$$$baseBits) | 0;\n\n if (biw !== bjw) {\n const x$$47 = (biw < n$$27.bound ? n$$27.digits[biw] : 0) | 0;\n const y$$17 = (bjw < n$$27.bound ? n$$27.digits[bjw] : 0) | 0;\n const xbit = bi % BigNatModule$$$baseBits | 0;\n const nxbits = BigNatModule$$$baseBits - xbit | 0;\n const x$$48 = x$$47 >> xbit | 0;\n const y$$18 = y$$17 << nxbits | 0;\n const x$$49 = x$$48 | y$$18 | 0;\n const x$$50 = x$$49 & BigNatModule$$$bitmask[enc.bigL] | 0;\n return x$$50 | 0;\n } else {\n const x$$51 = (biw < n$$27.bound ? n$$27.digits[biw] : 0) | 0;\n const xbit$$1 = bi % BigNatModule$$$baseBits | 0;\n const x$$52 = x$$51 >> xbit$$1 | 0;\n const x$$53 = x$$52 & BigNatModule$$$bitmask[enc.bigL] | 0;\n return x$$53 | 0;\n }\n}\nexport function BigNatModule$$$encodePoly(enc$$1, n$$28) {\n const poly = fill(new Uint32Array(enc$$1.bigK), 0, enc$$1.bigK, BigNatModule$002EFFT$002EFp$$$ofInt32(0));\n const biMax = n$$28.bound * BigNatModule$$$baseBits | 0;\n\n const encoder = function encoder($i$$38$$154, $bi$$1$$155) {\n encoder: while (true) {\n const i$$38 = $i$$38$$154,\n bi$$1 = $bi$$1$$155;\n\n if (i$$38 === enc$$1.bigK ? true : bi$$1 > biMax) {\n void null;\n } else {\n const pi = BigNatModule$$$extractBits(n$$28, enc$$1, bi$$1) | 0;\n poly[i$$38] = BigNatModule$002EFFT$002EFp$$$ofInt32(pi);\n const i$$39 = i$$38 + 1 | 0;\n const bi$$2 = bi$$1 + enc$$1.bigL | 0;\n $i$$38$$154 = i$$39;\n $bi$$1$$155 = bi$$2;\n continue encoder;\n }\n\n break;\n }\n };\n\n encoder(0, 0);\n return poly;\n}\nexport function BigNatModule$$$decodeResultBits(enc$$2, poly$$1) {\n let n$$29 = 0;\n\n for (let i$$40 = 0; i$$40 <= poly$$1.length - 1; i$$40++) {\n if (poly$$1[i$$40] !== BigNatModule$002EFFT$$$mzero) {\n n$$29 = i$$40;\n } else {\n void null;\n }\n }\n\n const rbits = BigNatModule$002EFFT$$$maxBitsInsideFp + enc$$2.bigL * n$$29 + 1 | 0;\n return rbits + 1 | 0;\n}\nexport function BigNatModule$$$decodePoly(enc$$3, poly$$2) {\n const rbound$$5 = ~~(BigNatModule$$$decodeResultBits(enc$$3, poly$$2) / BigNatModule$$$baseBits) + 1 | 0;\n const r$$15 = BigNatModule$$$createN(rbound$$5);\n\n const evaluate = function evaluate($i$$41$$160, $j$$2$$161, $d$$3$$162) {\n evaluate: while (true) {\n const i$$41 = $i$$41$$160,\n j$$2 = $j$$2$$161,\n d$$3 = $d$$3$$162;\n\n if (i$$41 === enc$$3.bigK) {\n void null;\n } else {\n if (j$$2 >= rbound$$5) {\n void null;\n } else {\n const x$$54 = op_Multiply(fromInteger(BigNatModule$002EFFT$002EFp$$$toInt(poly$$2[i$$41]), false, 2), BigNatModule$$$twopowersI64[d$$3]);\n BigNatModule$$$contributeArr(r$$15.digits, j$$2, x$$54);\n }\n\n const i$$43 = i$$41 + 1 | 0;\n const d$$4 = d$$3 + enc$$3.bigL | 0;\n const patternInput$$1 = d$$4 >= BigNatModule$$$baseBits ? [j$$2 + 1, d$$4 - BigNatModule$$$baseBits] : [j$$2, d$$4];\n $i$$41$$160 = i$$43;\n $j$$2$$161 = patternInput$$1[0];\n $d$$3$$162 = patternInput$$1[1];\n continue evaluate;\n }\n\n break;\n }\n };\n\n evaluate(0, 0, 0);\n return BigNatModule$$$normN(r$$15);\n}\nexport function BigNatModule$$$quickMulUsingFft(u$$7, v$$5) {\n const bitsRes$$1 = BigNatModule$$$bits(u$$7) + BigNatModule$$$bits(v$$5) | 0;\n const enc$$4 = BigNatModule$$$encodingGivenResultBits(bitsRes$$1);\n const upoly = BigNatModule$$$encodePoly(enc$$4, u$$7);\n const vpoly = BigNatModule$$$encodePoly(enc$$4, v$$5);\n const rpoly = BigNatModule$002EFFT$$$computeFftPaddedPolynomialProduct(enc$$4.bigK, enc$$4.k, upoly, vpoly);\n const r$$17 = BigNatModule$$$decodePoly(enc$$4, rpoly);\n return BigNatModule$$$normN(r$$17);\n}\nexport const BigNatModule$$$minDigitsKaratsuba = 16;\nexport function BigNatModule$$$recMulKaratsuba(mul, p$$19, q$$16) {\n const bp$$1 = p$$19.bound | 0;\n const bq = q$$16.bound | 0;\n const bmax = BigNatModule$$$maxInt(bp$$1, bq) | 0;\n\n if (bmax > BigNatModule$$$minDigitsKaratsuba) {\n const k$$9 = ~~(bmax / 2) | 0;\n const a0 = BigNatModule$$$restrictTo(k$$9, p$$19);\n const a1 = BigNatModule$$$shiftDown(k$$9, p$$19);\n const b0 = BigNatModule$$$restrictTo(k$$9, q$$16);\n const b1 = BigNatModule$$$shiftDown(k$$9, q$$16);\n const q0 = mul(a0, b0);\n const q1 = mul(BigNatModule$$$add(a0, a1), BigNatModule$$$add(b0, b1));\n const q2 = mul(a1, b1);\n const p1 = BigNatModule$$$sub(q1, BigNatModule$$$add(q0, q2));\n const r$$18 = BigNatModule$$$add(q0, BigNatModule$$$shiftUp(k$$9, BigNatModule$$$add(p1, BigNatModule$$$shiftUp(k$$9, q2))));\n return r$$18;\n } else {\n return BigNatModule$$$mulSchoolBook(p$$19, q$$16);\n }\n}\nexport function BigNatModule$$$mulKaratsuba(x$$55, y$$19) {\n return BigNatModule$$$recMulKaratsuba(BigNatModule$$$mulKaratsuba, x$$55, y$$19);\n}\nexport const BigNatModule$$$productDigitsUpperSchoolBook = ~~(64000 / BigNatModule$$$baseBits);\nexport const BigNatModule$$$singleDigitForceSchoolBook = ~~(32000 / BigNatModule$$$baseBits);\nexport const BigNatModule$$$productDigitsUpperFft = ~~(BigNatModule$$$table[0].bigN / BigNatModule$$$baseBits);\nexport function BigNatModule$$$mul(p$$20, q$$17) {\n return BigNatModule$$$mulSchoolBook(p$$20, q$$17);\n}\nexport function BigNatModule$$$scaleSubInPlace(x$$57, f, a$$5, n$$30) {\n const patternInput$$2 = [x$$57.digits, BigNatModule$$$degree(x$$57)];\n const patternInput$$3 = [a$$5.digits, BigNatModule$$$degree(a$$5)];\n const f$$1 = fromInteger(f, false, 2);\n let j$$4 = 0;\n let z$$7 = op_Multiply(f$$1, fromInteger(patternInput$$3[0][0], false, 2));\n\n while (compare(z$$7, fromBits(0, 0, false)) > 0 ? true : j$$4 < patternInput$$3[1]) {\n if (j$$4 > patternInput$$2[1]) {\n throw new Error(\"scaleSubInPlace: pre-condition did not apply, result would be -ve\");\n } else {\n void null;\n }\n\n let zLo;\n let value$$6;\n const x$$59 = z$$7;\n const value$$5 = op_BitwiseAnd(x$$59, BigNatModule$$$baseMaski64);\n value$$6 = ~~toInt(value$$5);\n zLo = value$$6;\n let zHi;\n const x$$60 = z$$7;\n zHi = op_Division(x$$60, BigNatModule$$$baseNi64);\n\n if (zLo <= patternInput$$2[0][j$$4 + n$$30]) {\n patternInput$$2[0][j$$4 + n$$30] = patternInput$$2[0][j$$4 + n$$30] - zLo;\n } else {\n patternInput$$2[0][j$$4 + n$$30] = patternInput$$2[0][j$$4 + n$$30] + (BigNatModule$$$baseN - zLo);\n zHi = op_Addition(zHi, fromBits(1, 0, false));\n }\n\n if (j$$4 < patternInput$$3[1]) {\n z$$7 = op_Addition(zHi, op_Multiply(f$$1, fromInteger(patternInput$$3[0][j$$4 + 1], false, 2)));\n } else {\n z$$7 = zHi;\n }\n\n j$$4 = j$$4 + 1;\n }\n\n void BigNatModule$$$normN(x$$57);\n}\nexport function BigNatModule$$$scaleSub(x$$61, f$$2, a$$7, n$$31) {\n const freshx = BigNatModule$$$add(x$$61, BigNatModule$$$zero);\n BigNatModule$$$scaleSubInPlace(freshx, f$$2, a$$7, n$$31);\n return BigNatModule$$$normN(freshx);\n}\nexport function BigNatModule$$$scaleAddInPlace(x$$62, f$$3, a$$8, n$$32) {\n const patternInput$$4 = [x$$62.digits, BigNatModule$$$degree(x$$62)];\n const patternInput$$5 = [a$$8.digits, BigNatModule$$$degree(a$$8)];\n const f$$4 = fromInteger(f$$3, false, 2);\n let j$$5 = 0;\n let z$$8 = op_Multiply(f$$4, fromInteger(patternInput$$5[0][0], false, 2));\n\n while (compare(z$$8, fromBits(0, 0, false)) > 0 ? true : j$$5 < patternInput$$5[1]) {\n if (j$$5 > patternInput$$4[1]) {\n throw new Error(\"scaleSubInPlace: pre-condition did not apply, result would be -ve\");\n } else {\n void null;\n }\n\n let zLo$$1;\n let value$$8;\n const x$$64 = z$$8;\n const value$$7 = op_BitwiseAnd(x$$64, BigNatModule$$$baseMaski64);\n value$$8 = ~~toInt(value$$7);\n zLo$$1 = value$$8;\n let zHi$$1;\n const x$$65 = z$$8;\n zHi$$1 = op_Division(x$$65, BigNatModule$$$baseNi64);\n\n if (zLo$$1 < BigNatModule$$$baseN - patternInput$$4[0][j$$5 + n$$32]) {\n patternInput$$4[0][j$$5 + n$$32] = patternInput$$4[0][j$$5 + n$$32] + zLo$$1;\n } else {\n patternInput$$4[0][j$$5 + n$$32] = zLo$$1 - (BigNatModule$$$baseN - patternInput$$4[0][j$$5 + n$$32]);\n zHi$$1 = op_Addition(zHi$$1, fromBits(1, 0, false));\n }\n\n if (j$$5 < patternInput$$5[1]) {\n z$$8 = op_Addition(zHi$$1, op_Multiply(f$$4, fromInteger(patternInput$$5[0][j$$5 + 1], false, 2)));\n } else {\n z$$8 = zHi$$1;\n }\n\n j$$5 = j$$5 + 1;\n }\n\n void BigNatModule$$$normN(x$$62);\n}\nexport function BigNatModule$$$scaleAdd(x$$66, f$$5, a$$10, n$$33) {\n const freshx$$1 = BigNatModule$$$add(x$$66, BigNatModule$$$zero);\n BigNatModule$$$scaleAddInPlace(freshx$$1, f$$5, a$$10, n$$33);\n return BigNatModule$$$normN(freshx$$1);\n}\nexport function BigNatModule$$$removeFactor(x$$67, a$$11, n$$34) {\n const patternInput$$6 = [BigNatModule$$$degree(a$$11), BigNatModule$$$degree(x$$67)];\n\n if (patternInput$$6[1] < patternInput$$6[0] + n$$34) {\n return 0;\n } else {\n let f$$6;\n\n if (patternInput$$6[0] === 0) {\n if (patternInput$$6[1] === n$$34) {\n f$$6 = ~~(x$$67.digits[n$$34] / a$$11.digits[0]);\n } else {\n const f64 = op_Division(op_Addition(op_Multiply(fromInteger(x$$67.digits[patternInput$$6[1]], false, 2), BigNatModule$$$baseNi64), fromInteger(x$$67.digits[patternInput$$6[1] - 1], false, 2)), fromInteger(a$$11.digits[0], false, 2));\n f$$6 = ~~toInt(f64);\n }\n } else if (patternInput$$6[1] === patternInput$$6[0] + n$$34) {\n f$$6 = ~~(x$$67.digits[patternInput$$6[1]] / (a$$11.digits[patternInput$$6[0]] + 1));\n } else {\n const f64$$1 = op_Division(op_Addition(op_Multiply(fromInteger(x$$67.digits[patternInput$$6[1]], false, 2), BigNatModule$$$baseNi64), fromInteger(x$$67.digits[patternInput$$6[1] - 1], false, 2)), op_Addition(fromInteger(a$$11.digits[patternInput$$6[0]], false, 2), fromBits(1, 0, false)));\n f$$6 = ~~toInt(f64$$1);\n }\n\n if (f$$6 === 0) {\n const lte = BigNatModule$$$shiftCompare(a$$11, n$$34, x$$67, 0) !== 1;\n\n if (lte) {\n return 1;\n } else {\n return 0;\n }\n } else {\n return f$$6 | 0;\n }\n }\n}\nexport function BigNatModule$$$divmod(b$$7, a$$12) {\n if (BigNatModule$$$isZero(a$$12)) {\n throw new Error();\n } else if (BigNatModule$$$degree(b$$7) < BigNatModule$$$degree(a$$12)) {\n return [BigNatModule$$$zero, b$$7];\n } else {\n const x$$68 = BigNatModule$$$copyN(b$$7);\n const d$$6 = BigNatModule$$$createN(BigNatModule$$$degree(b$$7) - BigNatModule$$$degree(a$$12) + 1 + 1);\n let p$$21 = BigNatModule$$$degree(b$$7) | 0;\n const m$$2 = BigNatModule$$$degree(a$$12) | 0;\n let n$$35 = p$$21 - m$$2 | 0;\n\n const Invariant = function Invariant(tupledArg) {\n void null;\n };\n\n let finished = false;\n\n while (!finished) {\n Invariant([d$$6, x$$68, n$$35, p$$21]);\n const f$$7 = BigNatModule$$$removeFactor(x$$68, a$$12, n$$35) | 0;\n\n if (f$$7 > 0) {\n BigNatModule$$$scaleSubInPlace(x$$68, f$$7, a$$12, n$$35);\n BigNatModule$$$scaleAddInPlace(d$$6, f$$7, BigNatModule$$$one, n$$35);\n Invariant([d$$6, x$$68, n$$35, p$$21]);\n } else {\n finished = f$$7 === 0 ? n$$35 === 0 : false;\n\n if (!finished) {\n if (p$$21 === m$$2 + n$$35) {\n Invariant([d$$6, x$$68, n$$35 - 1, p$$21]);\n n$$35 = n$$35 - 1;\n } else {\n Invariant([d$$6, x$$68, n$$35 - 1, p$$21 - 1]);\n n$$35 = n$$35 - 1;\n p$$21 = p$$21 - 1;\n }\n } else {\n void null;\n }\n }\n }\n\n return [BigNatModule$$$normN(d$$6), BigNatModule$$$normN(x$$68)];\n }\n}\nexport function BigNatModule$$$div(b$$8, a$$13) {\n return BigNatModule$$$divmod(b$$8, a$$13)[0];\n}\nexport function BigNatModule$$$rem(b$$9, a$$14) {\n return BigNatModule$$$divmod(b$$9, a$$14)[1];\n}\nexport function BigNatModule$$$bitAnd(a$$15, b$$10) {\n const rbound$$6 = BigNatModule$$$minInt(a$$15.bound, b$$10.bound) | 0;\n const r$$19 = BigNatModule$$$createN(rbound$$6);\n\n for (let i$$44 = 0; i$$44 <= r$$19.bound - 1; i$$44++) {\n r$$19.digits[i$$44] = a$$15.digits[i$$44] & b$$10.digits[i$$44];\n }\n\n return BigNatModule$$$normN(r$$19);\n}\nexport function BigNatModule$$$bitOr(a$$16, b$$11) {\n const rbound$$7 = BigNatModule$$$maxInt(a$$16.bound, b$$11.bound) | 0;\n const r$$20 = BigNatModule$$$createN(rbound$$7);\n\n for (let i$$45 = 0; i$$45 <= a$$16.bound - 1; i$$45++) {\n r$$20.digits[i$$45] = r$$20.digits[i$$45] | a$$16.digits[i$$45];\n }\n\n for (let i$$46 = 0; i$$46 <= b$$11.bound - 1; i$$46++) {\n r$$20.digits[i$$46] = r$$20.digits[i$$46] | b$$11.digits[i$$46];\n }\n\n return BigNatModule$$$normN(r$$20);\n}\nexport function BigNatModule$$$bitXor(a$$17, b$$12) {\n const rbound$$8 = BigNatModule$$$maxInt(a$$17.bound, b$$12.bound) | 0;\n const r$$21 = BigNatModule$$$createN(rbound$$8);\n\n for (let i$$47 = 0; i$$47 <= a$$17.bound - 1; i$$47++) {\n r$$21.digits[i$$47] = r$$21.digits[i$$47] ^ a$$17.digits[i$$47];\n }\n\n for (let i$$48 = 0; i$$48 <= b$$12.bound - 1; i$$48++) {\n r$$21.digits[i$$48] = r$$21.digits[i$$48] ^ b$$12.digits[i$$48];\n }\n\n return BigNatModule$$$normN(r$$21);\n}\nexport function BigNatModule$$$hcf(a$$18, b$$13) {\n const hcfloop = function hcfloop($a$$19$$206, $b$$14$$207) {\n hcfloop: while (true) {\n const a$$19 = $a$$19$$206,\n b$$14 = $b$$14$$207;\n\n if (BigNatModule$$$equal(BigNatModule$$$zero, a$$19)) {\n return b$$14;\n } else {\n const patternInput$$8 = BigNatModule$$$divmod(b$$14, a$$19);\n $a$$19$$206 = patternInput$$8[1];\n $b$$14$$207 = a$$19;\n continue hcfloop;\n }\n\n break;\n }\n };\n\n if (BigNatModule$$$lt(a$$18, b$$13)) {\n return hcfloop(a$$18, b$$13);\n } else {\n return hcfloop(b$$13, a$$18);\n }\n}\nexport const BigNatModule$$$two = BigNatModule$$$embed(2);\nexport function BigNatModule$$$powi(x$$69, n$$36) {\n const power = function power($acc$$2$$210, $x$$70$$211, $n$$37$$212) {\n power: while (true) {\n const acc$$2 = $acc$$2$$210,\n x$$70 = $x$$70$$211,\n n$$37 = $n$$37$$212;\n\n if (n$$37 === 0) {\n return acc$$2;\n } else if (n$$37 % 2 === 0) {\n $acc$$2$$210 = acc$$2;\n $x$$70$$211 = BigNatModule$$$mul(x$$70, x$$70);\n $n$$37$$212 = ~~(n$$37 / 2);\n continue power;\n } else {\n $acc$$2$$210 = BigNatModule$$$mul(x$$70, acc$$2);\n $x$$70$$211 = BigNatModule$$$mul(x$$70, x$$70);\n $n$$37$$212 = ~~(n$$37 / 2);\n continue power;\n }\n\n break;\n }\n };\n\n return power(BigNatModule$$$one, x$$69, n$$36);\n}\nexport function BigNatModule$$$pow(x$$71, n$$38) {\n const power$$1 = function power$$1($acc$$3$$215, $x$$72$$216, $n$$39$$217) {\n power$$1: while (true) {\n const acc$$3 = $acc$$3$$215,\n x$$72 = $x$$72$$216,\n n$$39 = $n$$39$$217;\n\n if (BigNatModule$$$isZero(n$$39)) {\n return acc$$3;\n } else {\n const patternInput$$9 = BigNatModule$$$divmod(n$$39, BigNatModule$$$two);\n\n if (BigNatModule$$$isZero(patternInput$$9[1])) {\n $acc$$3$$215 = acc$$3;\n $x$$72$$216 = BigNatModule$$$mul(x$$72, x$$72);\n $n$$39$$217 = patternInput$$9[0];\n continue power$$1;\n } else {\n $acc$$3$$215 = BigNatModule$$$mul(x$$72, acc$$3);\n $x$$72$$216 = BigNatModule$$$mul(x$$72, x$$72);\n $n$$39$$217 = patternInput$$9[0];\n continue power$$1;\n }\n }\n\n break;\n }\n };\n\n return power$$1(BigNatModule$$$one, x$$71, n$$38);\n}\nexport function BigNatModule$$$toFloat(n$$40) {\n const basef = BigNatModule$$$baseN;\n\n const evalFloat = function evalFloat($acc$$4$$219, $k$$10$$220, $i$$49$$221) {\n evalFloat: while (true) {\n const acc$$4 = $acc$$4$$219,\n k$$10 = $k$$10$$220,\n i$$49 = $i$$49$$221;\n\n if (i$$49 === n$$40.bound) {\n return acc$$4;\n } else {\n $acc$$4$$219 = acc$$4 + k$$10 * n$$40.digits[i$$49];\n $k$$10$$220 = k$$10 * basef;\n $i$$49$$221 = i$$49 + 1;\n continue evalFloat;\n }\n\n break;\n }\n };\n\n return evalFloat(0, 1, 0);\n}\nexport function BigNatModule$$$ofInt32(n$$41) {\n return BigNatModule$$$embed(n$$41);\n}\nexport function BigNatModule$$$ofInt64(n$$42) {\n return BigNatModule$$$embed64(n$$42);\n}\nexport function BigNatModule$$$toUInt32(n$$43) {\n const matchValue = n$$43.bound | 0;\n\n switch (matchValue) {\n case 0:\n {\n return 0;\n }\n\n case 1:\n {\n const value$$9 = n$$43.digits[0] | 0;\n return value$$9 >>> 0;\n }\n\n case 2:\n {\n const patternInput$$10 = [n$$43.digits[0], n$$43.digits[1]];\n\n if (patternInput$$10[1] > BigNatModule$$$baseMask32B) {\n throw new Error();\n } else {\n void null;\n }\n\n return ((patternInput$$10[0] & BigNatModule$$$baseMask32A) >>> 0) + ((patternInput$$10[1] & BigNatModule$$$baseMask32B) >>> 0 << BigNatModule$$$baseShift32B >>> 0);\n }\n\n default:\n {\n throw new Error();\n }\n }\n}\nexport function BigNatModule$$$toUInt64(n$$44) {\n const matchValue$$1 = n$$44.bound | 0;\n\n switch (matchValue$$1) {\n case 0:\n {\n return fromBits(0, 0, true);\n }\n\n case 1:\n {\n const value$$10 = n$$44.digits[0] | 0;\n return fromInteger(value$$10, true, 2);\n }\n\n case 2:\n {\n const patternInput$$11 = [n$$44.digits[0], n$$44.digits[1]];\n return op_Addition(fromInteger(patternInput$$11[0] & BigNatModule$$$baseMask64A, true, 2), op_LeftShift(fromInteger(patternInput$$11[1] & BigNatModule$$$baseMask64B, true, 2), BigNatModule$$$baseShift64B));\n }\n\n case 3:\n {\n const patternInput$$12 = [n$$44.digits[0], n$$44.digits[1], n$$44.digits[2]];\n\n if (patternInput$$12[2] > BigNatModule$$$baseMask64C) {\n throw new Error();\n } else {\n void null;\n }\n\n return op_Addition(op_Addition(fromInteger(patternInput$$12[0] & BigNatModule$$$baseMask64A, true, 2), op_LeftShift(fromInteger(patternInput$$12[1] & BigNatModule$$$baseMask64B, true, 2), BigNatModule$$$baseShift64B)), op_LeftShift(fromInteger(patternInput$$12[2] & BigNatModule$$$baseMask64C, true, 2), BigNatModule$$$baseShift64C));\n }\n\n default:\n {\n throw new Error();\n }\n }\n}\nexport function BigNatModule$$$toString(n$$45) {\n const degn = BigNatModule$$$degree(n$$45) | 0;\n\n const route = function route($prior$$227, $k$$11$$228, $ten2k$$229) {\n route: while (true) {\n const prior = $prior$$227,\n k$$11 = $k$$11$$228,\n ten2k = $ten2k$$229;\n\n if (BigNatModule$$$degree(ten2k) > degn) {\n return new List([k$$11, ten2k], prior);\n } else {\n $prior$$227 = new List([k$$11, ten2k], prior);\n $k$$11$$228 = k$$11 + 1;\n $ten2k$$229 = BigNatModule$$$mul(ten2k, ten2k);\n continue route;\n }\n\n break;\n }\n };\n\n const kten2ks = route(new List(), 0, BigNatModule$$$embed(10));\n\n const collect = function collect(isLeading, digits, n$$46, _arg1$$1) {\n if (_arg1$$1.tail != null) {\n const patternInput$$13 = BigNatModule$$$divmod(n$$46, _arg1$$1.head[1]);\n\n if (isLeading ? BigNatModule$$$isZero(patternInput$$13[0]) : false) {\n const digits$$1 = collect(isLeading, digits, patternInput$$13[1], _arg1$$1.tail);\n return digits$$1;\n } else {\n const digits$$2 = collect(false, digits, patternInput$$13[1], _arg1$$1.tail);\n const digits$$3 = collect(isLeading, digits$$2, patternInput$$13[0], _arg1$$1.tail);\n return digits$$3;\n }\n } else {\n const n$$47 = BigNatModule$$$eval32(n$$46) | 0;\n\n if (isLeading ? n$$47 === 0 : false) {\n return digits;\n } else {\n return new List(int32ToString(n$$47), digits);\n }\n }\n };\n\n const digits$$4 = collect(true, new List(), n$$45, kten2ks);\n\n if (digits$$4.tail == null) {\n return \"0\";\n } else {\n let arg00;\n arg00 = ofList(digits$$4, Array);\n return join(\"\", arg00);\n }\n}\nexport function BigNatModule$$$ofString(str) {\n const len = str.length | 0;\n\n if (isNullOrEmpty(str)) {\n throw new Error(\"empty string\\\\nParameter name: str\");\n } else {\n void null;\n }\n\n const ten = BigNatModule$$$embed(10);\n\n const build = function build($acc$$5$$235, $i$$50$$236) {\n build: while (true) {\n const acc$$5 = $acc$$5$$235,\n i$$50 = $i$$50$$236;\n\n if (i$$50 === len) {\n return acc$$5;\n } else {\n const c$$12 = str[i$$50];\n const d$$7 = c$$12.charCodeAt(0) - \"0\".charCodeAt(0) | 0;\n\n if (0 <= d$$7 ? d$$7 <= 9 : false) {\n $acc$$5$$235 = BigNatModule$$$add(BigNatModule$$$mul(ten, acc$$5), BigNatModule$$$embed(d$$7));\n $i$$50$$236 = i$$50 + 1;\n continue build;\n } else {\n throw new Error();\n }\n }\n\n break;\n }\n };\n\n return build(BigNatModule$$$embed(0), 0);\n}\nexport function BigNatModule$$$isSmall(n$$48) {\n return n$$48.bound <= 1;\n}\nexport function BigNatModule$$$getSmall(n$$49) {\n if (0 < n$$49.bound) {\n return n$$49.digits[0] | 0;\n } else {\n return 0;\n }\n}\nexport function BigNatModule$$$factorial(n$$50) {\n const productR = function productR(a$$20, b$$15) {\n if (BigNatModule$$$equal(a$$20, b$$15)) {\n return a$$20;\n } else {\n const m$$3 = BigNatModule$$$div(BigNatModule$$$add(a$$20, b$$15), BigNatModule$$$ofInt32(2));\n return BigNatModule$$$mul(productR(a$$20, m$$3), productR(BigNatModule$$$add(m$$3, BigNatModule$$$one), b$$15));\n }\n };\n\n return productR(BigNatModule$$$one, n$$50);\n}","import { declare, Record } from \"../Types.js\";\nimport { class_type } from \"../Reflection.js\";\nimport { BigNatModule$$$factorial as BigNatModule$0024$0024$0024factorial, BigNatModule$$$ofString as BigNatModule$0024$0024$0024ofString, BigNatModule$$$toFloat as BigNatModule$0024$0024$0024toFloat, BigNatModule$$$toUInt64 as BigNatModule$0024$0024$0024toUInt64, BigNatModule$$$toUInt32 as BigNatModule$0024$0024$0024toUInt32, BigNatModule$$$pow as BigNatModule$0024$0024$0024pow, BigNatModule$$$rem as BigNatModule$0024$0024$0024rem, BigNatModule$$$two as BigNatModule$0024$0024$0024two, BigNatModule$$$lte as BigNatModule$0024$0024$0024lte, BigNatModule$$$hcf as BigNatModule$0024$0024$0024hcf, BigNatModule$$$bitXor as BigNatModule$0024$0024$0024bitXor, BigNatModule$$$bitOr as BigNatModule$0024$0024$0024bitOr, BigNatModule$$$bitAnd as BigNatModule$0024$0024$0024bitAnd, BigNatModule$$$divmod as BigNatModule$0024$0024$0024divmod, BigNatModule$$$mul as BigNatModule$0024$0024$0024mul, BigNatModule$$$isOne as BigNatModule$0024$0024$0024isOne, BigNatModule$$$sub as BigNatModule$0024$0024$0024sub, BigNatModule$$$gte as BigNatModule$0024$0024$0024gte, BigNatModule$$$scale as BigNatModule$0024$0024$0024scale, BigNatModule$$$add as BigNatModule$0024$0024$0024add, BigNatModule$$$one as BigNatModule$0024$0024$0024one, BigNatModule$$$ofInt64 as BigNatModule$0024$0024$0024ofInt64, BigNatModule$$$toString as BigNatModule$0024$0024$0024toString, BigNatModule$$$hash as BigNatModule$0024$0024$0024hash, BigNatModule$$$gt as BigNatModule$0024$0024$0024gt, BigNatModule$$$lt as BigNatModule$0024$0024$0024lt, BigNatModule$$$isZero as BigNatModule$0024$0024$0024isZero, BigNatModule$$$equal as BigNatModule$0024$0024$0024equal, BigNatModule$$$getSmall as BigNatModule$0024$0024$0024getSmall, BigNatModule$$$isSmall as BigNatModule$0024$0024$0024isSmall, BigNatModule$$$ofInt32 as BigNatModule$0024$0024$0024ofInt32 } from \"./n\";\nimport { initialize } from \"../Array.js\";\nimport { op_Addition, op_Multiply, fromValue, equals, compare, fromBits, op_UnaryNegation, fromInteger } from \"../Long.js\";\nimport { op_UnaryNegation_Int32 } from \"../Int32.js\";\nimport Decimal from \"../Decimal.js\";\nexport const BigInteger = declare(function BigInt_BigInteger(signInt, v) {\n const $this$$1 = this;\n void null;\n $this$$1.signInt = signInt;\n $this$$1.v = v;\n void null;\n}, Record);\nexport function BigInteger$reflection() {\n return class_type(\"BigInt.BigInteger\", undefined, BigInteger);\n}\nexport function BigInteger$$$$002Ector$$Z2BE94A1(signInt, v) {\n return this instanceof BigInteger ? BigInteger.call(this, signInt, v) : new BigInteger(signInt, v);\n}\n\n(function BigInteger$$$$002Ecctor() {\n BigInteger.smallLim = 4096;\n BigInteger.smallPosTab = initialize(BigInteger.smallLim, BigNatModule$0024$0024$0024ofInt32, Array);\n BigInteger.one = BigInteger$$$$002Ector$$Z524259A4(1);\n BigInteger.two = BigInteger$$$$002Ector$$Z524259A4(2);\n BigInteger.zero = BigInteger$$$$002Ector$$Z524259A4(0);\n void null;\n})();\n\nexport function BigInteger$$$nat$$Z67CCE57D(n$$1) {\n if (BigNatModule$0024$0024$0024isSmall(n$$1) ? BigNatModule$0024$0024$0024getSmall(n$$1) < BigInteger.smallLim : false) {\n return BigInteger.smallPosTab[BigNatModule$0024$0024$0024getSmall(n$$1)];\n } else {\n return n$$1;\n }\n}\nexport function BigInteger$$$create$$Z2BE94A1(s, n$$2) {\n return BigInteger$$$$002Ector$$Z2BE94A1(s, BigInteger$$$nat$$Z67CCE57D(n$$2));\n}\nexport function BigInteger$$$posn$$Z67CCE57D(n$$3) {\n return BigInteger$$$$002Ector$$Z2BE94A1(1, BigInteger$$$nat$$Z67CCE57D(n$$3));\n}\nexport function BigInteger$$$negn$$Z67CCE57D(n$$4) {\n return BigInteger$$$$002Ector$$Z2BE94A1(-1, BigInteger$$$nat$$Z67CCE57D(n$$4));\n}\nexport function BigInteger$$get_Sign(x) {\n if (BigInteger$$get_IsZero(x)) {\n return 0;\n } else {\n return x.signInt | 0;\n }\n}\nexport function BigInteger$$get_SignInt(x$$1) {\n return x$$1.signInt;\n}\nexport function BigInteger$$get_V(x$$2) {\n return x$$2.v;\n}\nexport function BigInteger$$$op_Equality$$56F059C0(x$$3, y) {\n const matchValue = [BigInteger$$get_SignInt(x$$3), BigInteger$$get_SignInt(y)];\n var $target$$12;\n\n if (matchValue[0] === -1) {\n if (matchValue[1] === -1) {\n $target$$12 = 1;\n } else if (matchValue[1] === 0) {\n $target$$12 = 8;\n } else if (matchValue[1] === 1) {\n $target$$12 = 3;\n } else {\n $target$$12 = 9;\n }\n } else if (matchValue[0] === 0) {\n if (matchValue[1] === -1) {\n $target$$12 = 6;\n } else if (matchValue[1] === 0) {\n $target$$12 = 4;\n } else if (matchValue[1] === 1) {\n $target$$12 = 5;\n } else {\n $target$$12 = 9;\n }\n } else if (matchValue[0] === 1) {\n if (matchValue[1] === -1) {\n $target$$12 = 2;\n } else if (matchValue[1] === 0) {\n $target$$12 = 7;\n } else if (matchValue[1] === 1) {\n $target$$12 = 0;\n } else {\n $target$$12 = 9;\n }\n } else {\n $target$$12 = 9;\n }\n\n switch ($target$$12) {\n case 0:\n {\n return BigNatModule$0024$0024$0024equal(BigInteger$$get_V(x$$3), BigInteger$$get_V(y));\n }\n\n case 1:\n {\n return BigNatModule$0024$0024$0024equal(BigInteger$$get_V(x$$3), BigInteger$$get_V(y));\n }\n\n case 2:\n {\n if (BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$3))) {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y));\n } else {\n return false;\n }\n }\n\n case 3:\n {\n if (BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$3))) {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y));\n } else {\n return false;\n }\n }\n\n case 4:\n {\n return true;\n }\n\n case 5:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y));\n }\n\n case 6:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y));\n }\n\n case 7:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$3));\n }\n\n case 8:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$3));\n }\n\n case 9:\n {\n throw new Error(\"signs should be +/- 1 or 0\\\\nParameter name: x\");\n }\n }\n}\nexport function BigInteger$$$op_Inequality$$56F059C0(x$$4, y$$1) {\n return !BigInteger$$$op_Equality$$56F059C0(x$$4, y$$1);\n}\nexport function BigInteger$$$op_LessThan$$56F059C0(x$$5, y$$2) {\n const matchValue$$1 = [BigInteger$$get_SignInt(x$$5), BigInteger$$get_SignInt(y$$2)];\n var $target$$17;\n\n if (matchValue$$1[0] === -1) {\n if (matchValue$$1[1] === -1) {\n $target$$17 = 1;\n } else if (matchValue$$1[1] === 0) {\n $target$$17 = 8;\n } else if (matchValue$$1[1] === 1) {\n $target$$17 = 3;\n } else {\n $target$$17 = 9;\n }\n } else if (matchValue$$1[0] === 0) {\n if (matchValue$$1[1] === -1) {\n $target$$17 = 6;\n } else if (matchValue$$1[1] === 0) {\n $target$$17 = 4;\n } else if (matchValue$$1[1] === 1) {\n $target$$17 = 5;\n } else {\n $target$$17 = 9;\n }\n } else if (matchValue$$1[0] === 1) {\n if (matchValue$$1[1] === -1) {\n $target$$17 = 2;\n } else if (matchValue$$1[1] === 0) {\n $target$$17 = 7;\n } else if (matchValue$$1[1] === 1) {\n $target$$17 = 0;\n } else {\n $target$$17 = 9;\n }\n } else {\n $target$$17 = 9;\n }\n\n switch ($target$$17) {\n case 0:\n {\n return BigNatModule$0024$0024$0024lt(BigInteger$$get_V(x$$5), BigInteger$$get_V(y$$2));\n }\n\n case 1:\n {\n return BigNatModule$0024$0024$0024lt(BigInteger$$get_V(y$$2), BigInteger$$get_V(x$$5));\n }\n\n case 2:\n {\n return false;\n }\n\n case 3:\n {\n if (!BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$5))) {\n return true;\n } else {\n return !BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$2));\n }\n }\n\n case 4:\n {\n return false;\n }\n\n case 5:\n {\n return !BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$2));\n }\n\n case 6:\n {\n return false;\n }\n\n case 7:\n {\n return false;\n }\n\n case 8:\n {\n return !BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$5));\n }\n\n case 9:\n {\n throw new Error(\"signs should be +/- 1 or 0\\\\nParameter name: x\");\n }\n }\n}\nexport function BigInteger$$$op_GreaterThan$$56F059C0(x$$6, y$$3) {\n const matchValue$$2 = [BigInteger$$get_SignInt(x$$6), BigInteger$$get_SignInt(y$$3)];\n var $target$$20;\n\n if (matchValue$$2[0] === -1) {\n if (matchValue$$2[1] === -1) {\n $target$$20 = 1;\n } else if (matchValue$$2[1] === 0) {\n $target$$20 = 8;\n } else if (matchValue$$2[1] === 1) {\n $target$$20 = 3;\n } else {\n $target$$20 = 9;\n }\n } else if (matchValue$$2[0] === 0) {\n if (matchValue$$2[1] === -1) {\n $target$$20 = 6;\n } else if (matchValue$$2[1] === 0) {\n $target$$20 = 4;\n } else if (matchValue$$2[1] === 1) {\n $target$$20 = 5;\n } else {\n $target$$20 = 9;\n }\n } else if (matchValue$$2[0] === 1) {\n if (matchValue$$2[1] === -1) {\n $target$$20 = 2;\n } else if (matchValue$$2[1] === 0) {\n $target$$20 = 7;\n } else if (matchValue$$2[1] === 1) {\n $target$$20 = 0;\n } else {\n $target$$20 = 9;\n }\n } else {\n $target$$20 = 9;\n }\n\n switch ($target$$20) {\n case 0:\n {\n return BigNatModule$0024$0024$0024gt(BigInteger$$get_V(x$$6), BigInteger$$get_V(y$$3));\n }\n\n case 1:\n {\n return BigNatModule$0024$0024$0024gt(BigInteger$$get_V(y$$3), BigInteger$$get_V(x$$6));\n }\n\n case 2:\n {\n if (!BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$6))) {\n return true;\n } else {\n return !BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$3));\n }\n }\n\n case 3:\n {\n return false;\n }\n\n case 4:\n {\n return false;\n }\n\n case 5:\n {\n return false;\n }\n\n case 6:\n {\n return !BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$3));\n }\n\n case 7:\n {\n return !BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$6));\n }\n\n case 8:\n {\n return false;\n }\n\n case 9:\n {\n throw new Error(\"signs should be +/- 1 or 0\\\\nParameter name: x\");\n }\n }\n}\nexport function BigInteger$$$compare$$56F059C0(n$$5, nn) {\n if (BigInteger$$$op_LessThan$$56F059C0(n$$5, nn)) {\n return -1 | 0;\n } else if (BigInteger$$$op_Equality$$56F059C0(n$$5, nn)) {\n return 0;\n } else {\n return 1;\n }\n}\nexport function BigInteger$$$hash$$Z665282C2(z) {\n if (BigInteger$$get_SignInt(z) === 0) {\n return 1;\n } else {\n return BigInteger$$get_SignInt(z) + BigNatModule$0024$0024$0024hash(BigInteger$$get_V(z)) | 0;\n }\n}\n\nBigInteger.prototype.toString = function () {\n const x$$7 = this;\n const matchValue$$3 = BigInteger$$get_SignInt(x$$7) | 0;\n\n switch (matchValue$$3) {\n case -1:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$7)) ? \"0\" : \"-\" + BigNatModule$0024$0024$0024toString(BigInteger$$get_V(x$$7));\n }\n\n case 0:\n {\n return \"0\";\n }\n\n case 1:\n {\n return BigNatModule$0024$0024$0024toString(BigInteger$$get_V(x$$7));\n }\n\n default:\n {\n throw new Error(\"signs should be +/- 1 or 0\");\n }\n }\n};\n\nexport function BigInteger$$get_StructuredDisplayString(x$$8) {\n return String(x$$8);\n}\n\nBigInteger.prototype.Equals = function (obj) {\n const this$ = this;\n return obj instanceof BigInteger ? BigInteger$$$op_Equality$$56F059C0(this$, obj) : false;\n};\n\nBigInteger.prototype.GetHashCode = function () {\n const x$$9 = this;\n return BigInteger$$$hash$$Z665282C2(x$$9) | 0;\n};\n\nexport function BigInteger$$$$002Ector$$Z524259A4(n$$6) {\n if (n$$6 >= 0) {\n return BigInteger$$$$002Ector$$Z2BE94A1.call(this, 1, BigInteger$$$nat$$Z67CCE57D(BigNatModule$0024$0024$0024ofInt32(n$$6)));\n } else if (n$$6 === -2147483648) {\n return BigInteger$$$$002Ector$$Z2BE94A1.call(this, -1, BigInteger$$$nat$$Z67CCE57D(BigNatModule$0024$0024$0024ofInt64(op_UnaryNegation(fromInteger(n$$6, false, 2)))));\n } else {\n return BigInteger$$$$002Ector$$Z2BE94A1.call(this, -1, BigInteger$$$nat$$Z67CCE57D(BigNatModule$0024$0024$0024ofInt32(op_UnaryNegation_Int32(n$$6))));\n }\n}\nexport function BigInteger$$$$002Ector$$Z524259C1(n$$7) {\n if (compare(n$$7, fromBits(0, 0, false)) >= 0) {\n return BigInteger$$$$002Ector$$Z2BE94A1.call(this, 1, BigInteger$$$nat$$Z67CCE57D(BigNatModule$0024$0024$0024ofInt64(n$$7)));\n } else if (equals(n$$7, fromBits(0, 2147483648, false))) {\n return BigInteger$$$$002Ector$$Z2BE94A1.call(this, -1, BigInteger$$$nat$$Z67CCE57D(BigNatModule$0024$0024$0024add(BigNatModule$0024$0024$0024ofInt64(fromBits(4294967295, 2147483647, false)), BigNatModule$0024$0024$0024one)));\n } else {\n return BigInteger$$$$002Ector$$Z2BE94A1.call(this, -1, BigInteger$$$nat$$Z67CCE57D(BigNatModule$0024$0024$0024ofInt64(op_UnaryNegation(n$$7))));\n }\n}\nexport function BigInteger$$$get_One() {\n return BigInteger.one;\n}\nexport function BigInteger$$$get_Two() {\n return BigInteger.two;\n}\nexport function BigInteger$$$get_Zero() {\n return BigInteger.zero;\n}\nexport function BigInteger$$$op_UnaryNegation$$Z665282C2(z$$1) {\n const matchValue$$4 = BigInteger$$get_SignInt(z$$1) | 0;\n\n if (matchValue$$4 === 0) {\n return BigInteger$$$get_Zero();\n } else {\n return BigInteger$$$create$$Z2BE94A1(op_UnaryNegation_Int32(matchValue$$4), BigInteger$$get_V(z$$1));\n }\n}\nexport function BigInteger$$$Scale$$Z320F31E(k, z$$2) {\n if (BigInteger$$get_SignInt(z$$2) === 0) {\n return BigInteger$$$get_Zero();\n } else if (k < 0) {\n return BigInteger$$$create$$Z2BE94A1(op_UnaryNegation_Int32(BigInteger$$get_SignInt(z$$2)), BigNatModule$0024$0024$0024scale(op_UnaryNegation_Int32(k), BigInteger$$get_V(z$$2)));\n } else {\n return BigInteger$$$create$$Z2BE94A1(BigInteger$$get_SignInt(z$$2), BigNatModule$0024$0024$0024scale(k, BigInteger$$get_V(z$$2)));\n }\n}\nexport function BigInteger$$$subnn$$6A57060(nx, ny) {\n if (BigNatModule$0024$0024$0024gte(nx, ny)) {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024sub(nx, ny));\n } else {\n return BigInteger$$$negn$$Z67CCE57D(BigNatModule$0024$0024$0024sub(ny, nx));\n }\n}\nexport function BigInteger$$$addnn$$6A57060(nx$$1, ny$$1) {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024add(nx$$1, ny$$1));\n}\nexport function BigInteger$$get_IsZero(x$$10) {\n if (BigInteger$$get_SignInt(x$$10) === 0) {\n return true;\n } else {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$10));\n }\n}\nexport function BigInteger$$get_IsOne(x$$11) {\n if (BigInteger$$get_SignInt(x$$11) === 1) {\n return BigNatModule$0024$0024$0024isOne(BigInteger$$get_V(x$$11));\n } else {\n return false;\n }\n}\nexport function BigInteger$$$op_Addition$$56F059C0(x$$12, y$$4) {\n if (BigInteger$$get_IsZero(y$$4)) {\n return x$$12;\n } else if (BigInteger$$get_IsZero(x$$12)) {\n return y$$4;\n } else {\n const matchValue$$5 = [BigInteger$$get_SignInt(x$$12), BigInteger$$get_SignInt(y$$4)];\n var $target$$38;\n\n if (matchValue$$5[0] === -1) {\n if (matchValue$$5[1] === -1) {\n $target$$38 = 1;\n } else if (matchValue$$5[1] === 1) {\n $target$$38 = 3;\n } else {\n $target$$38 = 4;\n }\n } else if (matchValue$$5[0] === 1) {\n if (matchValue$$5[1] === -1) {\n $target$$38 = 2;\n } else if (matchValue$$5[1] === 1) {\n $target$$38 = 0;\n } else {\n $target$$38 = 4;\n }\n } else {\n $target$$38 = 4;\n }\n\n switch ($target$$38) {\n case 0:\n {\n return BigInteger$$$addnn$$6A57060(BigInteger$$get_V(x$$12), BigInteger$$get_V(y$$4));\n }\n\n case 1:\n {\n return BigInteger$$$op_UnaryNegation$$Z665282C2(BigInteger$$$addnn$$6A57060(BigInteger$$get_V(x$$12), BigInteger$$get_V(y$$4)));\n }\n\n case 2:\n {\n return BigInteger$$$subnn$$6A57060(BigInteger$$get_V(x$$12), BigInteger$$get_V(y$$4));\n }\n\n case 3:\n {\n return BigInteger$$$subnn$$6A57060(BigInteger$$get_V(y$$4), BigInteger$$get_V(x$$12));\n }\n\n case 4:\n {\n throw new Error(\"signs should be +/- 1\\\\nParameter name: x\");\n }\n }\n }\n}\nexport function BigInteger$$$op_Subtraction$$56F059C0(x$$13, y$$5) {\n if (BigInteger$$get_IsZero(y$$5)) {\n return x$$13;\n } else if (BigInteger$$get_IsZero(x$$13)) {\n return BigInteger$$$op_UnaryNegation$$Z665282C2(y$$5);\n } else {\n const matchValue$$6 = [BigInteger$$get_SignInt(x$$13), BigInteger$$get_SignInt(y$$5)];\n var $target$$41;\n\n if (matchValue$$6[0] === -1) {\n if (matchValue$$6[1] === -1) {\n $target$$41 = 1;\n } else if (matchValue$$6[1] === 1) {\n $target$$41 = 3;\n } else {\n $target$$41 = 4;\n }\n } else if (matchValue$$6[0] === 1) {\n if (matchValue$$6[1] === -1) {\n $target$$41 = 2;\n } else if (matchValue$$6[1] === 1) {\n $target$$41 = 0;\n } else {\n $target$$41 = 4;\n }\n } else {\n $target$$41 = 4;\n }\n\n switch ($target$$41) {\n case 0:\n {\n return BigInteger$$$subnn$$6A57060(BigInteger$$get_V(x$$13), BigInteger$$get_V(y$$5));\n }\n\n case 1:\n {\n return BigInteger$$$subnn$$6A57060(BigInteger$$get_V(y$$5), BigInteger$$get_V(x$$13));\n }\n\n case 2:\n {\n return BigInteger$$$addnn$$6A57060(BigInteger$$get_V(x$$13), BigInteger$$get_V(y$$5));\n }\n\n case 3:\n {\n return BigInteger$$$op_UnaryNegation$$Z665282C2(BigInteger$$$addnn$$6A57060(BigInteger$$get_V(x$$13), BigInteger$$get_V(y$$5)));\n }\n\n case 4:\n {\n throw new Error(\"signs should be +/- 1\\\\nParameter name: x\");\n }\n }\n }\n}\nexport function BigInteger$$$op_Multiply$$56F059C0(x$$14, y$$6) {\n if (BigInteger$$get_IsZero(x$$14)) {\n return x$$14;\n } else if (BigInteger$$get_IsZero(y$$6)) {\n return y$$6;\n } else if (BigInteger$$get_IsOne(x$$14)) {\n return y$$6;\n } else if (BigInteger$$get_IsOne(y$$6)) {\n return x$$14;\n } else {\n const m = BigNatModule$0024$0024$0024mul(BigInteger$$get_V(x$$14), BigInteger$$get_V(y$$6));\n return BigInteger$$$create$$Z2BE94A1(BigInteger$$get_SignInt(x$$14) * BigInteger$$get_SignInt(y$$6), m);\n }\n}\nexport function BigInteger$$$DivRem$$56F059C0(x$$15, y$$7) {\n if (BigInteger$$get_IsZero(y$$7)) {\n throw new Error();\n } else {\n void null;\n }\n\n if (BigInteger$$get_IsZero(x$$15)) {\n return [BigInteger$$$get_Zero(), BigInteger$$$get_Zero()];\n } else {\n const patternInput = BigNatModule$0024$0024$0024divmod(BigInteger$$get_V(x$$15), BigInteger$$get_V(y$$7));\n const matchValue$$7 = [BigInteger$$get_SignInt(x$$15), BigInteger$$get_SignInt(y$$7)];\n var $target$$46;\n\n if (matchValue$$7[0] === -1) {\n if (matchValue$$7[1] === -1) {\n $target$$46 = 1;\n } else if (matchValue$$7[1] === 1) {\n $target$$46 = 3;\n } else {\n $target$$46 = 4;\n }\n } else if (matchValue$$7[0] === 1) {\n if (matchValue$$7[1] === -1) {\n $target$$46 = 2;\n } else if (matchValue$$7[1] === 1) {\n $target$$46 = 0;\n } else {\n $target$$46 = 4;\n }\n } else {\n $target$$46 = 4;\n }\n\n switch ($target$$46) {\n case 0:\n {\n return [BigInteger$$$posn$$Z67CCE57D(patternInput[0]), BigInteger$$$posn$$Z67CCE57D(patternInput[1])];\n }\n\n case 1:\n {\n return [BigInteger$$$posn$$Z67CCE57D(patternInput[0]), BigInteger$$$negn$$Z67CCE57D(patternInput[1])];\n }\n\n case 2:\n {\n return [BigInteger$$$negn$$Z67CCE57D(patternInput[0]), BigInteger$$$posn$$Z67CCE57D(patternInput[1])];\n }\n\n case 3:\n {\n return [BigInteger$$$negn$$Z67CCE57D(patternInput[0]), BigInteger$$$negn$$Z67CCE57D(patternInput[1])];\n }\n\n case 4:\n {\n throw new Error(\"signs should be +/- 1\\\\nParameter name: x\");\n }\n }\n }\n}\nexport function BigInteger$$$op_Division$$56F059C0(x$$16, y$$8) {\n const tuple = BigInteger$$$DivRem$$56F059C0(x$$16, y$$8);\n return tuple[0];\n}\nexport function BigInteger$$$op_Modulus$$56F059C0(x$$17, y$$9) {\n const tuple$$1 = BigInteger$$$DivRem$$56F059C0(x$$17, y$$9);\n return tuple$$1[1];\n}\nexport function BigInteger$$$op_RightShift$$62E082A2(x$$18, y$$10) {\n return BigInteger$$$op_Division$$56F059C0(x$$18, BigInteger$$$Pow$$62E082A2(BigInteger$$$get_Two(), y$$10));\n}\nexport function BigInteger$$$op_LeftShift$$62E082A2(x$$19, y$$11) {\n return BigInteger$$$op_Multiply$$56F059C0(x$$19, BigInteger$$$Pow$$62E082A2(BigInteger$$$get_Two(), y$$11));\n}\nexport function BigInteger$$$op_BitwiseAnd$$56F059C0(x$$20, y$$12) {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024bitAnd(BigInteger$$get_V(x$$20), BigInteger$$get_V(y$$12)));\n}\nexport function BigInteger$$$op_BitwiseOr$$56F059C0(x$$21, y$$13) {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024bitOr(BigInteger$$get_V(x$$21), BigInteger$$get_V(y$$13)));\n}\nexport function BigInteger$$$op_ExclusiveOr$$56F059C0(x$$22, y$$14) {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024bitXor(BigInteger$$get_V(x$$22), BigInteger$$get_V(y$$14)));\n}\nexport function BigInteger$$$GreatestCommonDivisor$$56F059C0(x$$23, y$$15) {\n const matchValue$$8 = [BigInteger$$get_SignInt(x$$23), BigInteger$$get_SignInt(y$$15)];\n\n if (matchValue$$8[0] === 0) {\n if (matchValue$$8[1] === 0) {\n return BigInteger$$$get_Zero();\n } else {\n return BigInteger$$$posn$$Z67CCE57D(BigInteger$$get_V(y$$15));\n }\n } else if (matchValue$$8[1] === 0) {\n return BigInteger$$$posn$$Z67CCE57D(BigInteger$$get_V(x$$23));\n } else {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024hcf(BigInteger$$get_V(x$$23), BigInteger$$get_V(y$$15)));\n }\n}\nexport function BigInteger$$get_IsNegative(x$$24) {\n if (BigInteger$$get_SignInt(x$$24) === -1) {\n return !BigInteger$$get_IsZero(x$$24);\n } else {\n return false;\n }\n}\nexport function BigInteger$$get_IsPositive(x$$25) {\n if (BigInteger$$get_SignInt(x$$25) === 1) {\n return !BigInteger$$get_IsZero(x$$25);\n } else {\n return false;\n }\n}\nexport function BigInteger$$$Abs$$Z665282C2(x$$26) {\n if (BigInteger$$get_SignInt(x$$26) === -1) {\n return BigInteger$$$op_UnaryNegation$$Z665282C2(x$$26);\n } else {\n return x$$26;\n }\n}\nexport function BigInteger$$$op_LessThanOrEqual$$56F059C0(x$$27, y$$16) {\n const matchValue$$9 = [BigInteger$$get_SignInt(x$$27), BigInteger$$get_SignInt(y$$16)];\n var $target$$68;\n\n if (matchValue$$9[0] === -1) {\n if (matchValue$$9[1] === -1) {\n $target$$68 = 1;\n } else if (matchValue$$9[1] === 0) {\n $target$$68 = 6;\n } else if (matchValue$$9[1] === 1) {\n $target$$68 = 3;\n } else {\n $target$$68 = 9;\n }\n } else if (matchValue$$9[0] === 0) {\n if (matchValue$$9[1] === -1) {\n $target$$68 = 8;\n } else if (matchValue$$9[1] === 0) {\n $target$$68 = 4;\n } else if (matchValue$$9[1] === 1) {\n $target$$68 = 7;\n } else {\n $target$$68 = 9;\n }\n } else if (matchValue$$9[0] === 1) {\n if (matchValue$$9[1] === -1) {\n $target$$68 = 2;\n } else if (matchValue$$9[1] === 0) {\n $target$$68 = 5;\n } else if (matchValue$$9[1] === 1) {\n $target$$68 = 0;\n } else {\n $target$$68 = 9;\n }\n } else {\n $target$$68 = 9;\n }\n\n switch ($target$$68) {\n case 0:\n {\n return BigNatModule$0024$0024$0024lte(BigInteger$$get_V(x$$27), BigInteger$$get_V(y$$16));\n }\n\n case 1:\n {\n return BigNatModule$0024$0024$0024lte(BigInteger$$get_V(y$$16), BigInteger$$get_V(x$$27));\n }\n\n case 2:\n {\n if (BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$27))) {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$16));\n } else {\n return false;\n }\n }\n\n case 3:\n {\n return true;\n }\n\n case 4:\n {\n return true;\n }\n\n case 5:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$27));\n }\n\n case 6:\n {\n return true;\n }\n\n case 7:\n {\n return true;\n }\n\n case 8:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$16));\n }\n\n case 9:\n {\n throw new Error(\"signs should be +/- 1 or 0\\\\nParameter name: x\");\n }\n }\n}\nexport function BigInteger$$$op_GreaterThanOrEqual$$56F059C0(x$$28, y$$17) {\n const matchValue$$10 = [BigInteger$$get_SignInt(x$$28), BigInteger$$get_SignInt(y$$17)];\n var $target$$71;\n\n if (matchValue$$10[0] === -1) {\n if (matchValue$$10[1] === -1) {\n $target$$71 = 1;\n } else if (matchValue$$10[1] === 0) {\n $target$$71 = 6;\n } else if (matchValue$$10[1] === 1) {\n $target$$71 = 3;\n } else {\n $target$$71 = 9;\n }\n } else if (matchValue$$10[0] === 0) {\n if (matchValue$$10[1] === -1) {\n $target$$71 = 8;\n } else if (matchValue$$10[1] === 0) {\n $target$$71 = 4;\n } else if (matchValue$$10[1] === 1) {\n $target$$71 = 7;\n } else {\n $target$$71 = 9;\n }\n } else if (matchValue$$10[0] === 1) {\n if (matchValue$$10[1] === -1) {\n $target$$71 = 2;\n } else if (matchValue$$10[1] === 0) {\n $target$$71 = 5;\n } else if (matchValue$$10[1] === 1) {\n $target$$71 = 0;\n } else {\n $target$$71 = 9;\n }\n } else {\n $target$$71 = 9;\n }\n\n switch ($target$$71) {\n case 0:\n {\n return BigNatModule$0024$0024$0024gte(BigInteger$$get_V(x$$28), BigInteger$$get_V(y$$17));\n }\n\n case 1:\n {\n return BigNatModule$0024$0024$0024gte(BigInteger$$get_V(y$$17), BigInteger$$get_V(x$$28));\n }\n\n case 2:\n {\n return true;\n }\n\n case 3:\n {\n if (BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$28))) {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$17));\n } else {\n return false;\n }\n }\n\n case 4:\n {\n return true;\n }\n\n case 5:\n {\n return true;\n }\n\n case 6:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(x$$28));\n }\n\n case 7:\n {\n return BigNatModule$0024$0024$0024isZero(BigInteger$$get_V(y$$17));\n }\n\n case 8:\n {\n return true;\n }\n\n case 9:\n {\n throw new Error(\"signs should be +/- 1 or 0\\\\nParameter name: x\");\n }\n }\n}\nexport function BigInteger$$$Pow$$62E082A2(x$$29, y$$18) {\n if (y$$18 < 0) {\n throw new Error(\"y\");\n } else {\n void null;\n }\n\n const matchValue$$11 = [BigInteger$$get_IsZero(x$$29), y$$18];\n\n if (matchValue$$11[0]) {\n if (matchValue$$11[1] === 0) {\n return BigInteger$$$get_One();\n } else {\n return BigInteger$$$get_Zero();\n }\n } else {\n const yval = BigInteger$$$$002Ector$$Z524259A4(y$$18);\n return BigInteger$$$create$$Z2BE94A1(BigNatModule$0024$0024$0024isZero(BigNatModule$0024$0024$0024rem(BigInteger$$get_V(yval), BigNatModule$0024$0024$0024two)) ? 1 : BigInteger$$get_SignInt(x$$29), BigNatModule$0024$0024$0024pow(BigInteger$$get_V(x$$29), BigInteger$$get_V(yval)));\n }\n}\nexport function BigInteger$$get_ToInt32(x$$30) {\n if (BigInteger$$get_IsZero(x$$30)) {\n return 0;\n } else {\n const u = BigNatModule$0024$0024$0024toUInt32(BigInteger$$get_V(x$$30));\n\n if (u <= 2147483647 >>> 0) {\n return BigInteger$$get_SignInt(x$$30) * ~~u | 0;\n } else if (BigInteger$$get_SignInt(x$$30) === -1 ? u === 2147483647 + 1 >>> 0 : false) {\n return -2147483648 | 0;\n } else {\n throw new Error();\n }\n }\n}\nexport function BigInteger$$get_ToUInt32(x$$31) {\n if (BigInteger$$get_IsZero(x$$31)) {\n return 0;\n } else {\n return BigNatModule$0024$0024$0024toUInt32(BigInteger$$get_V(x$$31));\n }\n}\nexport function BigInteger$$get_ToInt64(x$$32) {\n if (BigInteger$$get_IsZero(x$$32)) {\n return fromBits(0, 0, false);\n } else {\n const u$$1 = BigNatModule$0024$0024$0024toUInt64(BigInteger$$get_V(x$$32));\n\n if (compare(u$$1, fromValue(fromBits(4294967295, 2147483647, false), true)) <= 0) {\n return op_Multiply(fromInteger(BigInteger$$get_SignInt(x$$32), false, 2), fromValue(u$$1, false));\n } else if (BigInteger$$get_SignInt(x$$32) === -1 ? equals(u$$1, fromValue(op_Addition(fromBits(4294967295, 2147483647, false), fromBits(1, 0, false)), true)) : false) {\n return fromBits(0, 2147483648, false);\n } else {\n throw new Error();\n }\n }\n}\nexport function BigInteger$$get_ToUInt64(x$$33) {\n if (BigInteger$$get_IsZero(x$$33)) {\n return fromBits(0, 0, true);\n } else {\n return BigNatModule$0024$0024$0024toUInt64(BigInteger$$get_V(x$$33));\n }\n}\nexport function BigInteger$$get_ToDouble(x$$34) {\n const matchValue$$12 = BigInteger$$get_SignInt(x$$34) | 0;\n\n switch (matchValue$$12) {\n case -1:\n {\n return -BigNatModule$0024$0024$0024toFloat(BigInteger$$get_V(x$$34));\n }\n\n case 0:\n {\n return 0;\n }\n\n case 1:\n {\n return BigNatModule$0024$0024$0024toFloat(BigInteger$$get_V(x$$34));\n }\n\n default:\n {\n throw new Error(\"signs should be +/- 1 or 0\\\\nParameter name: x\");\n }\n }\n}\nexport function BigInteger$$get_ToSByte(x$$35) {\n return (BigInteger$$get_ToInt32(x$$35) + 0x80 & 0xFF) - 0x80;\n}\nexport function BigInteger$$get_ToByte(x$$36) {\n return BigInteger$$get_ToUInt32(x$$36) & 0xFF;\n}\nexport function BigInteger$$get_ToInt16(x$$37) {\n return (BigInteger$$get_ToInt32(x$$37) + 0x8000 & 0xFFFF) - 0x8000;\n}\nexport function BigInteger$$get_ToUInt16(x$$38) {\n return BigInteger$$get_ToUInt32(x$$38) & 0xFFFF;\n}\nexport function BigInteger$$get_ToSingle(x$$39) {\n return BigInteger$$get_ToDouble(x$$39);\n}\nexport function BigInteger$$get_ToDecimal(x$$40) {\n return new Decimal(BigInteger$$get_ToDouble(x$$40));\n}\nexport function BigInteger$$$Parse$$Z721C83C5(text) {\n if (text == null) {\n throw new Error(\"text\");\n } else {\n void null;\n }\n\n const text$$1 = text.trim();\n const len = text$$1.length | 0;\n\n if (len === 0) {\n throw new Error();\n } else {\n void null;\n }\n\n const matchValue$$13 = [text$$1[0], len];\n\n if (matchValue$$13[0] === \"+\") {\n if (matchValue$$13[1] === 1) {\n throw new Error();\n } else {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024ofString(text$$1.slice(1, len - 1 + 1)));\n }\n } else if (matchValue$$13[0] === \"-\") {\n if (matchValue$$13[1] === 1) {\n throw new Error();\n } else {\n return BigInteger$$$negn$$Z67CCE57D(BigNatModule$0024$0024$0024ofString(text$$1.slice(1, len - 1 + 1)));\n }\n } else {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024ofString(text$$1));\n }\n}\nexport function BigInteger$$get_IsSmall(x$$41) {\n if (BigInteger$$get_IsZero(x$$41)) {\n return true;\n } else {\n return BigNatModule$0024$0024$0024isSmall(BigInteger$$get_V(x$$41));\n }\n}\nexport function BigInteger$$$Factorial$$Z665282C2(x$$42) {\n if (BigInteger$$get_IsNegative(x$$42)) {\n throw new Error(\"mustBeNonNegative\\\\nParameter name: x\");\n } else {\n void null;\n }\n\n if (BigInteger$$get_IsPositive(x$$42)) {\n return BigInteger$$$posn$$Z67CCE57D(BigNatModule$0024$0024$0024factorial(BigInteger$$get_V(x$$42)));\n } else {\n return BigInteger$$$get_One();\n }\n}\nexport function BigInteger$$$op_UnaryPlus$$Z665282C2(n1) {\n return n1;\n}\nexport function BigInteger$$$FromInt64$$Z524259C1(x$$43) {\n return BigInteger$$$$002Ector$$Z524259C1(x$$43);\n}\nexport function BigInteger$$$FromInt32$$Z524259A4(x$$44) {\n return BigInteger$$$$002Ector$$Z524259A4(x$$44);\n}\n\nBigInteger.prototype.CompareTo = function (obj$$1) {\n const this$$$1 = this;\n\n if (obj$$1 instanceof BigInteger) {\n return BigInteger$$$compare$$56F059C0(this$$$1, obj$$1) | 0;\n } else {\n throw new Error(\"the objects are not comparable\\\\nParameter name: obj\");\n }\n};","import { defaultArg, value as value$$1, some } from \"./Option.js\";\nimport { List } from \"./Types.js\";\nimport { transpose as transpose$$1, pairwise as pairwise$$1, 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 { getItemFromDict, addToDict, tryGetValue, addToSet, count } from \"./Util.js\";\nimport { ofList } from \"./Array.js\";\nimport { splitInto as splitInto$$1, chunkBySize as chunkBySize$$1, 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 return _arg1.head;\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function tryHead(_arg1$$1) {\n if (_arg1$$1.tail != null) {\n return some(_arg1$$1.head);\n } else {\n return undefined;\n }\n}\nexport function tail(_arg1$$2) {\n if (_arg1$$2.tail != null) {\n return _arg1$$2.tail;\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function last($_arg1$$3$$5) {\n last: while (true) {\n const _arg1$$3 = $_arg1$$3$$5;\n\n if (_arg1$$3.tail != null) {\n if (_arg1$$3.tail.tail == null) {\n return _arg1$$3.head;\n } else {\n $_arg1$$3$$5 = _arg1$$3.tail;\n continue last;\n }\n } else {\n throw new Error(\"List was empty\");\n }\n\n break;\n }\n}\nexport function tryLast($_arg1$$4$$6) {\n tryLast: while (true) {\n const _arg1$$4 = $_arg1$$4$$6;\n\n if (_arg1$$4.tail != null) {\n if (_arg1$$4.tail.tail == null) {\n return some(_arg1$$4.head);\n } else {\n $_arg1$$4$$6 = _arg1$$4.tail;\n continue tryLast;\n }\n } else {\n return undefined;\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$$10, $ys$$1$$11) {\n loop: while (true) {\n const xs$$4 = $xs$$4$$10,\n ys$$1 = $ys$$1$$11;\n\n if (xs$$4.tail != null) {\n if (ys$$1.tail != null) {\n const matchValue$$1 = comparer(xs$$4.head, ys$$1.head) | 0;\n\n if (matchValue$$1 === 0) {\n $xs$$4$$10 = xs$$4.tail;\n $ys$$1$$11 = ys$$1.tail;\n continue loop;\n } else {\n return matchValue$$1 | 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($f$$12, $i$$13, $acc$$14, $_arg1$$5$$15) {\n foldIndexedAux: while (true) {\n const f = $f$$12,\n i = $i$$13,\n acc = $acc$$14,\n _arg1$$5 = $_arg1$$5$$15;\n\n if (_arg1$$5.tail != null) {\n $f$$12 = f;\n $i$$13 = i + 1;\n $acc$$14 = f(i, acc, _arg1$$5.head);\n $_arg1$$5$$15 = _arg1$$5.tail;\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($f$$2$$19, $state$$1$$20, $xs$$8$$21) {\n fold: while (true) {\n const f$$2 = $f$$2$$19,\n state$$1 = $state$$1$$20,\n xs$$8 = $xs$$8$$21;\n\n if (xs$$8.tail != null) {\n $f$$2$$19 = f$$2;\n $state$$1$$20 = f$$2(state$$1, xs$$8.head);\n $xs$$8$$21 = xs$$8.tail;\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 const xs$$13 = fold$$1(function (acc$$3, x$$9) {\n return new List(x$$9, acc$$3);\n }, new List(), xs$$12);\n return reverse(xs$$13);\n}\nexport function concat(lists) {\n const xs$$15 = 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 return reverse(xs$$15);\n}\nexport function foldIndexed2Aux($f$$5$$31, $i$$1$$32, $acc$$5$$33, $bs$$34, $cs$$35) {\n foldIndexed2Aux: while (true) {\n const f$$5 = $f$$5$$31,\n i$$1 = $i$$1$$32,\n acc$$5 = $acc$$5$$33,\n bs = $bs$$34,\n cs = $cs$$35;\n var $target$$36, x$$11, xs$$16, y$$1, ys$$3;\n\n if (bs.tail != null) {\n if (cs.tail != null) {\n $target$$36 = 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$$36 = 2;\n }\n } else if (cs.tail == null) {\n $target$$36 = 0;\n } else {\n $target$$36 = 2;\n }\n\n switch ($target$$36) {\n case 0:\n {\n return acc$$5;\n }\n\n case 1:\n {\n $f$$5$$31 = f$$5;\n $i$$1$$32 = i$$1 + 1;\n $acc$$5$$33 = f$$5(i$$1, acc$$5, x$$11, y$$1);\n $bs$$34 = xs$$16;\n $cs$$35 = 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$$51, $state$$8$$52) {\n unfoldInner: while (true) {\n const acc$$6 = $acc$$6$$51,\n state$$8 = $state$$8$$52;\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 $acc$$6$$51 = new List(x$$12, acc$$6);\n $state$$8$$52 = 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($f$$10$$53, $i$$2$$54, $acc$$7$$55, $bs$$1$$56, $cs$$1$$57, $ds$$58) {\n foldIndexed3Aux: while (true) {\n const f$$10 = $f$$10$$53,\n i$$2 = $i$$2$$54,\n acc$$7 = $acc$$7$$55,\n bs$$1 = $bs$$1$$56,\n cs$$1 = $cs$$1$$57,\n ds = $ds$$58;\n var $target$$59, 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$$59 = 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$$59 = 2;\n }\n } else {\n $target$$59 = 2;\n }\n } else if (cs$$1.tail == null) {\n if (ds.tail == null) {\n $target$$59 = 0;\n } else {\n $target$$59 = 2;\n }\n } else {\n $target$$59 = 2;\n }\n\n switch ($target$$59) {\n case 0:\n {\n return acc$$7;\n }\n\n case 1:\n {\n $f$$10$$53 = f$$10;\n $i$$2$$54 = i$$2 + 1;\n $acc$$7$$55 = f$$10(i$$2, acc$$7, x$$13, y$$2, z);\n $bs$$1$$56 = xs$$20;\n $cs$$1$$57 = ys$$7;\n $ds$$58 = 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 const xs$$24 = scan$$1(f$$13, state$$11, xs$$23);\n return ofSeq(xs$$24);\n}\nexport function scanBack(f$$14, xs$$25, state$$12) {\n const xs$$26 = scanBack$$1(f$$14, xs$$25, state$$12);\n return ofSeq(xs$$26);\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 const xs$$30 = collect$$1(f$$15, xs$$29);\n return ofSeq(xs$$30);\n}\nexport function map(f$$16, xs$$31) {\n const xs$$32 = fold(function (acc$$11, x$$16) {\n return new List(f$$16(x$$16), acc$$11);\n }, new List(), xs$$31);\n return reverse(xs$$32);\n}\nexport function mapIndexed(f$$17, xs$$33) {\n const xs$$34 = 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 return reverse(xs$$34);\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 const xs$$37 = 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 return reverse(xs$$37);\n}\nexport function mapIndexed2(f$$19, xs$$38, ys$$12) {\n const xs$$39 = 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 return reverse(xs$$39);\n}\nexport function map3(f$$20, xs$$40, ys$$13, zs$$3) {\n const xs$$41 = 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 return reverse(xs$$41);\n}\nexport function mapIndexed3(f$$21, xs$$42, ys$$14, zs$$4) {\n const xs$$43 = 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 return reverse(xs$$43);\n}\nexport function mapFold(f$$22, s, xs$$44) {\n const patternInput$$1 = fold(function foldFn(tupledArg, x$$23) {\n const patternInput = f$$22(tupledArg[1], x$$23);\n return [new List(patternInput[0], tupledArg[0]), patternInput[1]];\n }, [new List(), s], xs$$44);\n return [reverse(patternInput$$1[0]), patternInput$$1[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 }, void 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 }, void 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 }, void 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 }, void 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($f$$28$$120, $i$$10$$121, $_arg1$$9$$122) {\n tryPickIndexedAux: while (true) {\n const f$$28 = $f$$28$$120,\n i$$10 = $i$$10$$121,\n _arg1$$9 = $_arg1$$9$$122;\n\n if (_arg1$$9.tail != null) {\n const result = f$$28(i$$10, _arg1$$9.head);\n\n if (result == null) {\n $f$$28$$120 = f$$28;\n $i$$10$$121 = i$$10 + 1;\n $_arg1$$9$$122 = _arg1$$9.tail;\n continue tryPickIndexedAux;\n } else {\n return result;\n }\n } else {\n return undefined;\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) : undefined;\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) : undefined;\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 let xs$$61;\n xs$$61 = reverse(xs$$59);\n return find(f$$36, xs$$61);\n}\nexport function tryFindBack(f$$37, xs$$62) {\n let xs$$64;\n xs$$64 = reverse(xs$$62);\n return tryFind(f$$37, xs$$64);\n}\nexport function tryFindIndex(f$$38, xs$$65) {\n return tryPickIndexed(function (i$$12, x$$35) {\n return f$$38(x$$35) ? i$$12 : undefined;\n }, xs$$65);\n}\nexport function tryFindIndexBack(f$$39, xs$$66) {\n const array = ofList(xs$$66, Array);\n return tryFindIndexBack$$1(f$$39, 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 const array$$1 = ofList(xs$$68, Array);\n return findIndexBack$$1(f$$41, array$$1) | 0;\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 const xs$$72 = 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 return reverse(xs$$72);\n}\nexport function partition(f$$43, xs$$73) {\n return fold(function (tupledArg$$1, x$$38) {\n return f$$43(x$$38) ? [new List(x$$38, tupledArg$$1[0]), tupledArg$$1[1]] : [tupledArg$$1[0], new List(x$$38, tupledArg$$1[1])];\n }, [new List(), new List()], reverse(xs$$73));\n}\nexport function choose(f$$44, xs$$74) {\n const xs$$75 = 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 return reverse(xs$$75);\n}\nexport function contains(value, list, eq) {\n const loop$$1 = function loop$$1($xs$$76$$162) {\n loop$$1: while (true) {\n const xs$$76 = $xs$$76$$162;\n\n if (xs$$76.tail != null) {\n if (eq.Equals(value, xs$$76.head)) {\n return true;\n } else {\n $xs$$76$$162 = xs$$76.tail;\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 = 0; i$$15 <= n$$2 - 1; i$$15++) {\n xs$$78 = new List(f$$46(i$$15), xs$$78);\n }\n\n return reverse(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 return fold(f$$47, _arg1$$16.head, _arg1$$16.tail);\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 return foldBack(f$$48, _arg1$$17.tail, _arg1$$17.head);\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($f$$51$$180, $_arg1$$18$$181) {\n exists: while (true) {\n const f$$51 = $f$$51$$180,\n _arg1$$18 = $_arg1$$18$$181;\n\n if (_arg1$$18.tail != null) {\n if (f$$51(_arg1$$18.head)) {\n return true;\n } else {\n $f$$51$$180 = f$$51;\n $_arg1$$18$$181 = _arg1$$18.tail;\n continue exists;\n }\n } else {\n return false;\n }\n\n break;\n }\n}\nexport function exists2($f$$52$$182, $bs$$2$$183, $cs$$2$$184) {\n exists2: while (true) {\n const f$$52 = $f$$52$$182,\n bs$$2 = $bs$$2$$183,\n cs$$2 = $cs$$2$$184;\n var $target$$185, x$$44, xs$$82, y$$12, ys$$18;\n\n if (bs$$2.tail != null) {\n if (cs$$2.tail != null) {\n $target$$185 = 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$$185 = 2;\n }\n } else if (cs$$2.tail == null) {\n $target$$185 = 0;\n } else {\n $target$$185 = 2;\n }\n\n switch ($target$$185) {\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 $f$$52$$182 = f$$52;\n $bs$$2$$183 = xs$$82;\n $cs$$2$$184 = 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(function (tupledArg$$2, tupledArg$$3) {\n return [new List(tupledArg$$2[0], tupledArg$$3[0]), new List(tupledArg$$2[1], tupledArg$$3[1])];\n }, xs$$83, [new List(), new List()]);\n}\nexport function unzip3(xs$$84) {\n return foldBack(function (tupledArg$$4, tupledArg$$5) {\n return [new List(tupledArg$$4[0], tupledArg$$5[0]), new List(tupledArg$$4[1], tupledArg$$5[1]), new List(tupledArg$$4[2], tupledArg$$5[2])];\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 let xs$$89;\n const xs$$88 = ofList(xs$$87, Array);\n xs$$88.sort(function comparer$$2(x$$49, y$$17) {\n return comparer$$1.Compare(x$$49, y$$17);\n });\n xs$$89 = xs$$88;\n return ofArray(xs$$89);\n}\nexport function sortBy(projection, xs$$90, comparer$$3) {\n let xs$$92;\n const xs$$91 = ofList(xs$$90, Array);\n xs$$91.sort(function comparer$$4(x$$50, y$$18) {\n return comparer$$3.Compare(projection(x$$50), projection(y$$18));\n });\n xs$$92 = xs$$91;\n return ofArray(xs$$92);\n}\nexport function sortDescending(xs$$93, comparer$$5) {\n let xs$$95;\n const xs$$94 = ofList(xs$$93, Array);\n xs$$94.sort(function comparer$$6(x$$51, y$$19) {\n return comparer$$5.Compare(x$$51, y$$19) * -1;\n });\n xs$$95 = xs$$94;\n return ofArray(xs$$95);\n}\nexport function sortByDescending(projection$$1, xs$$96, comparer$$7) {\n let xs$$98;\n const xs$$97 = ofList(xs$$96, Array);\n xs$$97.sort(function comparer$$8(x$$52, y$$20) {\n return comparer$$7.Compare(projection$$1(x$$52), projection$$1(y$$20)) * -1;\n });\n xs$$98 = xs$$97;\n return ofArray(xs$$98);\n}\nexport function sortWith(comparer$$9, xs$$99) {\n let xs$$101;\n const xs$$100 = ofList(xs$$99, Array);\n xs$$100.sort(comparer$$9);\n xs$$101 = xs$$100;\n return ofArray(xs$$101);\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 let xs$$110;\n let array$$3;\n array$$3 = ofList(xs$$109, Array);\n xs$$110 = permute$$1(f$$55, array$$3);\n return ofArray(xs$$110);\n}\nexport function chunkBySize(chunkSize, xs$$111) {\n let xs$$114;\n let xs$$112;\n let array$$4;\n array$$4 = ofList(xs$$111, Array);\n xs$$112 = chunkBySize$$1(chunkSize, array$$4);\n xs$$114 = ofArray(xs$$112);\n return map(function f$$56(xs$$113) {\n return ofArray(xs$$113);\n }, xs$$114);\n}\nexport function skip(i$$16, xs$$115) {\n const skipInner = function skipInner($i$$17$$240, $xs$$116$$241) {\n skipInner: while (true) {\n const i$$17 = $i$$17$$240,\n xs$$116 = $xs$$116$$241;\n\n if (i$$17 === 0) {\n return xs$$116;\n } else if (xs$$116.tail != null) {\n $i$$17$$240 = i$$17 - 1;\n $xs$$116$$241 = xs$$116.tail;\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$$16 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$242, i$$20, xs$$119;\n\n if (i$$16 === 0) {\n $target$$242 = 0;\n } else if (i$$16 === 1) {\n if (xs$$115.tail != null) {\n $target$$242 = 1;\n } else {\n $target$$242 = 2;\n i$$20 = i$$16;\n xs$$119 = xs$$115;\n }\n } else {\n $target$$242 = 2;\n i$$20 = i$$16;\n xs$$119 = xs$$115;\n }\n\n switch ($target$$242) {\n case 0:\n {\n return xs$$115;\n }\n\n case 1:\n {\n return xs$$115.tail;\n }\n\n case 2:\n {\n return skipInner(i$$20, xs$$119);\n }\n }\n }\n}\nexport function skipWhile($predicate$$243, $xs$$120$$244) {\n skipWhile: while (true) {\n const predicate = $predicate$$243,\n xs$$120 = $xs$$120$$244;\n var $target$$245, h$$4, t$$4;\n\n if (xs$$120.tail != null) {\n if (predicate(xs$$120.head)) {\n $target$$245 = 0;\n h$$4 = xs$$120.head;\n t$$4 = xs$$120.tail;\n } else {\n $target$$245 = 1;\n }\n } else {\n $target$$245 = 1;\n }\n\n switch ($target$$245) {\n case 0:\n {\n $predicate$$243 = predicate;\n $xs$$120$$244 = t$$4;\n continue skipWhile;\n }\n\n case 1:\n {\n return xs$$120;\n }\n }\n\n break;\n }\n}\nexport function takeSplitAux($error$$246, $i$$21$$247, $acc$$25$$248, $xs$$121$$249) {\n takeSplitAux: while (true) {\n const error = $error$$246,\n i$$21 = $i$$21$$247,\n acc$$25 = $acc$$25$$248,\n xs$$121 = $xs$$121$$249;\n\n if (i$$21 === 0) {\n return [reverse(acc$$25), xs$$121];\n } else if (xs$$121.tail != null) {\n $error$$246 = error;\n $i$$21$$247 = i$$21 - 1;\n $acc$$25$$248 = new List(xs$$121.head, acc$$25);\n $xs$$121$$249 = xs$$121.tail;\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$$121];\n }\n }\n\n break;\n }\n}\nexport function take(i$$22, xs$$123) {\n if (i$$22 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$252, i$$25, xs$$124;\n\n if (i$$22 === 0) {\n $target$$252 = 0;\n } else if (i$$22 === 1) {\n if (xs$$123.tail != null) {\n $target$$252 = 1;\n } else {\n $target$$252 = 2;\n i$$25 = i$$22;\n xs$$124 = xs$$123;\n }\n } else {\n $target$$252 = 2;\n i$$25 = i$$22;\n xs$$124 = xs$$123;\n }\n\n switch ($target$$252) {\n case 0:\n {\n return new List();\n }\n\n case 1:\n {\n return new List(xs$$123.head, new List());\n }\n\n case 2:\n {\n const tuple = takeSplitAux(true, i$$25, new List(), xs$$124);\n return tuple[0];\n }\n }\n }\n}\nexport function takeWhile(predicate$$1, xs$$125) {\n if (xs$$125.tail != null) {\n if (xs$$125.tail.tail == null) {\n if (predicate$$1(xs$$125.head)) {\n return xs$$125;\n } else {\n return xs$$125.tail;\n }\n } else {\n if (!predicate$$1(xs$$125.head)) {\n return new List();\n } else {\n return new List(xs$$125.head, takeWhile(predicate$$1, xs$$125.tail));\n }\n }\n } else {\n return xs$$125;\n }\n}\nexport function truncate(i$$26, xs$$127) {\n if (i$$26 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$257, i$$29, xs$$128;\n\n if (i$$26 === 0) {\n $target$$257 = 0;\n } else if (i$$26 === 1) {\n if (xs$$127.tail != null) {\n $target$$257 = 1;\n } else {\n $target$$257 = 2;\n i$$29 = i$$26;\n xs$$128 = xs$$127;\n }\n } else {\n $target$$257 = 2;\n i$$29 = i$$26;\n xs$$128 = xs$$127;\n }\n\n switch ($target$$257) {\n case 0:\n {\n return new List();\n }\n\n case 1:\n {\n return new List(xs$$127.head, new List());\n }\n\n case 2:\n {\n const tuple$$1 = takeSplitAux(false, i$$29, new List(), xs$$128);\n return tuple$$1[0];\n }\n }\n }\n}\nexport function splitAt(i$$30, xs$$129) {\n if (i$$30 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$260, i$$33, xs$$131;\n\n if (i$$30 === 0) {\n $target$$260 = 0;\n } else if (i$$30 === 1) {\n if (xs$$129.tail != null) {\n $target$$260 = 1;\n } else {\n $target$$260 = 2;\n i$$33 = i$$30;\n xs$$131 = xs$$129;\n }\n } else {\n $target$$260 = 2;\n i$$33 = i$$30;\n xs$$131 = xs$$129;\n }\n\n switch ($target$$260) {\n case 0:\n {\n return [new List(), xs$$129];\n }\n\n case 1:\n {\n return [new List(xs$$129.head, new List()), xs$$129.tail];\n }\n\n case 2:\n {\n return takeSplitAux(true, i$$33, new List(), xs$$131);\n }\n }\n }\n}\nexport function outOfRange() {\n throw new Error(\"Index out of range\");\n}\nexport function slice(lower, upper, xs$$132) {\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 let res$$2;\n const state$$13 = new List();\n res$$2 = foldIndexed(function f$$57(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 }, state$$13, xs$$132);\n\n if (lower$$1 > lastIndex + 1 ? true : hasUpper ? upper > lastIndex : false) {\n outOfRange();\n } else {\n void null;\n }\n\n return reverse(res$$2);\n }\n}\nexport function distinctBy(projection$$4, xs$$134, eq$$2) {\n const hashSet = createMutable([], eq$$2);\n return filter(function f$$58($arg$$1) {\n const arg00$$1 = projection$$4($arg$$1);\n return addToSet(arg00$$1, hashSet);\n }, xs$$134);\n}\nexport function distinct(xs$$136, eq$$3) {\n return distinctBy(function (x$$68) {\n return x$$68;\n }, xs$$136, eq$$3);\n}\nexport function exactlyOne(xs$$137) {\n if (xs$$137.tail != null) {\n if (xs$$137.tail.tail != null) {\n throw new Error(\"Input list too long\\\\nParameter name: list\");\n } else {\n return xs$$137.head;\n }\n } else {\n throw new Error(\"The input sequence was empty\\\\nParameter name: list\");\n }\n}\nexport function groupBy(projection$$5, xs$$139, eq$$4) {\n const dict = createMutable$$1([], eq$$4);\n let keys = new List();\n iterate(function f$$59(v$$2) {\n const key = projection$$5(v$$2);\n const matchValue$$16 = tryGetValue(dict, key, null);\n\n if (matchValue$$16[0]) {\n dict.set(key, new List(v$$2, matchValue$$16[1]));\n } else {\n addToDict(dict, key, new List(v$$2, new List()));\n keys = new List(key, keys);\n }\n }, xs$$139);\n let result$$1 = new List();\n const xs$$141 = keys;\n iterate(function f$$60(key$$1) {\n result$$1 = new List([key$$1, reverse(getItemFromDict(dict, key$$1))], result$$1);\n }, xs$$141);\n return result$$1;\n}\nexport function countBy(projection$$6, xs$$142, eq$$5) {\n const dict$$1 = createMutable$$1([], eq$$5);\n let keys$$1 = new List();\n iterate(function f$$61(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 dict$$1.set(key$$2, matchValue$$17[1] + 1);\n } else {\n dict$$1.set(key$$2, 1);\n keys$$1 = new List(key$$2, keys$$1);\n }\n }, xs$$142);\n let result$$2 = new List();\n const xs$$144 = keys$$1;\n iterate(function f$$62(key$$3) {\n result$$2 = new List([key$$3, getItemFromDict(dict$$1, key$$3)], result$$2);\n }, xs$$144);\n return result$$2;\n}\nexport function where(predicate$$2, source) {\n return filter(predicate$$2, source);\n}\nexport function pairwise(source$$1) {\n const xs$$145 = pairwise$$1(source$$1);\n return ofSeq(xs$$145);\n}\nexport function windowed(windowSize, source$$2) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n } else {\n void null;\n }\n\n let res$$3 = new List();\n\n for (let i$$35 = length(source$$2); i$$35 >= windowSize; i$$35--) {\n res$$3 = new List(slice(i$$35 - windowSize, i$$35 - 1, source$$2), res$$3);\n }\n\n return res$$3;\n}\nexport function splitInto(chunks, source$$3) {\n let xs$$148;\n let xs$$146;\n let array$$5;\n array$$5 = ofList(source$$3, Array);\n xs$$146 = splitInto$$1(chunks, array$$5);\n xs$$148 = ofArray(xs$$146);\n return map(function f$$63(xs$$147) {\n return ofArray(xs$$147);\n }, xs$$148);\n}\nexport function transpose(lists$$1) {\n let xs$$150;\n let source$$5;\n source$$5 = transpose$$1(lists$$1);\n xs$$150 = map$$1(ofSeq, source$$5);\n return ofSeq(xs$$150);\n}","import { BigInteger$$$op_Inequality$$56F059C0 as BigInteger$0024$0024$0024op_Inequality$0024$002456F059C0, BigInteger$$$op_Equality$$56F059C0 as BigInteger$0024$0024$0024op_Equality$0024$002456F059C0, BigInteger$$$op_GreaterThanOrEqual$$56F059C0 as BigInteger$0024$0024$0024op_GreaterThanOrEqual$0024$002456F059C0, BigInteger$$$op_GreaterThan$$56F059C0 as BigInteger$0024$0024$0024op_GreaterThan$0024$002456F059C0, BigInteger$$$op_LessThanOrEqual$$56F059C0 as BigInteger$0024$0024$0024op_LessThanOrEqual$0024$002456F059C0, BigInteger$$$op_LessThan$$56F059C0 as BigInteger$0024$0024$0024op_LessThan$0024$002456F059C0, BigInteger$$$op_ExclusiveOr$$56F059C0 as BigInteger$0024$0024$0024op_ExclusiveOr$0024$002456F059C0, BigInteger$$$op_BitwiseOr$$56F059C0 as BigInteger$0024$0024$0024op_BitwiseOr$0024$002456F059C0, BigInteger$$$op_BitwiseAnd$$56F059C0 as BigInteger$0024$0024$0024op_BitwiseAnd$0024$002456F059C0, BigInteger$$$op_LeftShift$$62E082A2 as BigInteger$0024$0024$0024op_LeftShift$0024$002462E082A2, BigInteger$$$op_RightShift$$62E082A2 as BigInteger$0024$0024$0024op_RightShift$0024$002462E082A2, BigInteger$$$op_UnaryPlus$$Z665282C2 as BigInteger$0024$0024$0024op_UnaryPlus$0024$0024Z665282C2, BigInteger$$$op_UnaryNegation$$Z665282C2 as BigInteger$0024$0024$0024op_UnaryNegation$0024$0024Z665282C2, BigInteger$$$op_Modulus$$56F059C0 as BigInteger$0024$0024$0024op_Modulus$0024$002456F059C0, BigInteger$$$op_Division$$56F059C0 as BigInteger$0024$0024$0024op_Division$0024$002456F059C0, BigInteger$$$op_Multiply$$56F059C0 as BigInteger$0024$0024$0024op_Multiply$0024$002456F059C0, BigInteger$$$op_Subtraction$$56F059C0 as BigInteger$0024$0024$0024op_Subtraction$0024$002456F059C0, BigInteger$$$op_Addition$$56F059C0 as BigInteger$0024$0024$0024op_Addition$0024$002456F059C0, BigInteger$$get_IsOne as BigInteger$0024$0024get_IsOne, BigInteger$$get_IsZero as BigInteger$0024$0024get_IsZero, BigInteger$$get_Sign as BigInteger$0024$0024get_Sign, BigInteger$$get_ToDecimal as BigInteger$0024$0024get_ToDecimal, BigInteger$$get_ToDouble as BigInteger$0024$0024get_ToDouble, BigInteger$$get_ToSingle as BigInteger$0024$0024get_ToSingle, BigInteger$$get_ToUInt64 as BigInteger$0024$0024get_ToUInt64, BigInteger$$get_ToInt64 as BigInteger$0024$0024get_ToInt64, BigInteger$$get_ToUInt32 as BigInteger$0024$0024get_ToUInt32, BigInteger$$get_ToInt32 as BigInteger$0024$0024get_ToInt32, BigInteger$$get_ToUInt16 as BigInteger$0024$0024get_ToUInt16, BigInteger$$get_ToInt16 as BigInteger$0024$0024get_ToInt16, BigInteger$$get_ToByte as BigInteger$0024$0024get_ToByte, BigInteger$$get_ToSByte as BigInteger$0024$0024get_ToSByte, BigInteger$$$$002Ector$$Z524259A4 as BigInteger$0024$0024$0024$0024002Ector$0024$0024Z524259A4, BigInteger$$$$002Ector$$Z524259C1 as BigInteger$0024$0024$0024$0024002Ector$0024$0024Z524259C1, BigInteger$$$get_Two as BigInteger$0024$0024$0024get_Two, BigInteger$$$get_One as BigInteger$0024$0024$0024get_One, BigInteger$$$Abs$$Z665282C2 as BigInteger$0024$0024$0024Abs$0024$0024Z665282C2, BigInteger$$$Pow$$62E082A2 as BigInteger$0024$0024$0024Pow$0024$002462E082A2, BigInteger$$$GreatestCommonDivisor$$56F059C0 as BigInteger$0024$0024$0024GreatestCommonDivisor$0024$002456F059C0, BigInteger$$$DivRem$$56F059C0 as BigInteger$0024$0024$0024DivRem$0024$002456F059C0, BigInteger$$$Parse$$Z721C83C5 as BigInteger$0024$0024$0024Parse$0024$0024Z721C83C5, BigInteger$$$get_Zero as BigInteger$0024$0024$0024get_Zero, BigInteger } from \"./BigInt/z\";\nimport { fromInteger } from \"./Long.js\";\nimport { min, comparePrimitives, equals as equals$$1, structuralHash } from \"./Util.js\";\nimport { delay, unfold, rangeNumber } from \"./Seq.js\";\nimport { fold, head, skipWhile, find, ofSeq } from \"./List.js\";\nimport { List } from \"./Types.js\";\nimport { fill, reverse, ofList } from \"./Array.js\";\nexport function isBigInt(x) {\n return x instanceof BigInteger;\n}\nexport function tryParse(str) {\n try {\n const res = BigInteger$0024$0024$0024Parse$0024$0024Z721C83C5(str);\n return [true, res];\n } catch (matchValue) {\n return [false, BigInteger$0024$0024$0024get_Zero()];\n }\n}\nexport function parse(arg00) {\n return BigInteger$0024$0024$0024Parse$0024$0024Z721C83C5(arg00);\n}\nexport function divRem(arg00$$1, arg01) {\n return BigInteger$0024$0024$0024DivRem$0024$002456F059C0(arg00$$1, arg01);\n}\nexport function greatestCommonDivisor(arg00$$2, arg01$$1) {\n return BigInteger$0024$0024$0024GreatestCommonDivisor$0024$002456F059C0(arg00$$2, arg01$$1);\n}\nexport function pow(arg00$$3, arg01$$2) {\n return BigInteger$0024$0024$0024Pow$0024$002462E082A2(arg00$$3, arg01$$2);\n}\nexport function abs(arg00$$4) {\n return BigInteger$0024$0024$0024Abs$0024$0024Z665282C2(arg00$$4);\n}\nexport const zero = BigInteger$0024$0024$0024get_Zero();\nexport const one = BigInteger$0024$0024$0024get_One();\nexport const two = BigInteger$0024$0024$0024get_Two();\nexport function fromString(s) {\n return BigInteger$0024$0024$0024Parse$0024$0024Z721C83C5(s);\n}\nexport function fromZero() {\n return BigInteger$0024$0024$0024get_Zero();\n}\nexport function fromOne() {\n return BigInteger$0024$0024$0024get_One();\n}\nexport function fromInt64(i) {\n return BigInteger$0024$0024$0024$0024002Ector$0024$0024Z524259C1(i);\n}\nexport function fromInt32(i$$1) {\n var value;\n\n if (i$$1 > 2147483647) {\n return BigInteger$0024$0024$0024$0024002Ector$0024$0024Z524259C1((value = i$$1, (fromInteger(value, false, 6))));\n } else {\n return BigInteger$0024$0024$0024$0024002Ector$0024$0024Z524259A4(i$$1);\n }\n}\nexport function toSByte(x$$1) {\n return BigInteger$0024$0024get_ToSByte(x$$1);\n}\nexport function toByte(x$$2) {\n return BigInteger$0024$0024get_ToByte(x$$2);\n}\nexport function toInt16(x$$3) {\n return BigInteger$0024$0024get_ToInt16(x$$3);\n}\nexport function toUInt16(x$$4) {\n return BigInteger$0024$0024get_ToUInt16(x$$4);\n}\nexport function toInt32(x$$5) {\n return BigInteger$0024$0024get_ToInt32(x$$5);\n}\nexport function toUInt32(x$$6) {\n return BigInteger$0024$0024get_ToUInt32(x$$6);\n}\nexport function toInt64(x$$7) {\n return BigInteger$0024$0024get_ToInt64(x$$7);\n}\nexport function toUInt64(x$$8) {\n return BigInteger$0024$0024get_ToUInt64(x$$8);\n}\nexport function toSingle(x$$9) {\n return BigInteger$0024$0024get_ToSingle(x$$9);\n}\nexport function toDouble(x$$10) {\n return BigInteger$0024$0024get_ToDouble(x$$10);\n}\nexport function toDecimal(x$$11) {\n return BigInteger$0024$0024get_ToDecimal(x$$11);\n}\nexport function sign(x$$12) {\n return BigInteger$0024$0024get_Sign(x$$12);\n}\nexport function isZero(x$$13) {\n return BigInteger$0024$0024get_IsZero(x$$13);\n}\nexport function isOne(x$$14) {\n return BigInteger$0024$0024get_IsOne(x$$14);\n}\nexport function hash(x$$15) {\n return structuralHash(x$$15);\n}\nexport function compare(x$$16, y) {\n return x$$16.CompareTo(y);\n}\nexport function equals(x$$17, y$$1) {\n return equals$$1(x$$17, y$$1);\n}\nexport function toString(x$$18) {\n return String(x$$18);\n}\nexport const get_Zero = BigInteger$0024$0024$0024get_Zero();\nexport const get_One = BigInteger$0024$0024$0024get_One();\nexport function op_Addition(arg00$$5, arg01$$3) {\n return BigInteger$0024$0024$0024op_Addition$0024$002456F059C0(arg00$$5, arg01$$3);\n}\nexport function op_Subtraction(arg00$$6, arg01$$4) {\n return BigInteger$0024$0024$0024op_Subtraction$0024$002456F059C0(arg00$$6, arg01$$4);\n}\nexport function op_Multiply(arg00$$7, arg01$$5) {\n return BigInteger$0024$0024$0024op_Multiply$0024$002456F059C0(arg00$$7, arg01$$5);\n}\nexport function op_Division(arg00$$8, arg01$$6) {\n return BigInteger$0024$0024$0024op_Division$0024$002456F059C0(arg00$$8, arg01$$6);\n}\nexport function op_Modulus(arg00$$9, arg01$$7) {\n return BigInteger$0024$0024$0024op_Modulus$0024$002456F059C0(arg00$$9, arg01$$7);\n}\nexport function op_UnaryNegation(arg00$$10) {\n return BigInteger$0024$0024$0024op_UnaryNegation$0024$0024Z665282C2(arg00$$10);\n}\nexport function op_UnaryPlus(arg00$$11) {\n return BigInteger$0024$0024$0024op_UnaryPlus$0024$0024Z665282C2(arg00$$11);\n}\nexport function op_RightShift(arg00$$12, arg01$$8) {\n return BigInteger$0024$0024$0024op_RightShift$0024$002462E082A2(arg00$$12, arg01$$8);\n}\nexport function op_LeftShift(arg00$$13, arg01$$9) {\n return BigInteger$0024$0024$0024op_LeftShift$0024$002462E082A2(arg00$$13, arg01$$9);\n}\nexport function op_BitwiseAnd(arg00$$14, arg01$$10) {\n return BigInteger$0024$0024$0024op_BitwiseAnd$0024$002456F059C0(arg00$$14, arg01$$10);\n}\nexport function op_BitwiseOr(arg00$$15, arg01$$11) {\n return BigInteger$0024$0024$0024op_BitwiseOr$0024$002456F059C0(arg00$$15, arg01$$11);\n}\nexport function op_ExclusiveOr(arg00$$16, arg01$$12) {\n return BigInteger$0024$0024$0024op_ExclusiveOr$0024$002456F059C0(arg00$$16, arg01$$12);\n}\nexport function op_LessThan(arg00$$17, arg01$$13) {\n return BigInteger$0024$0024$0024op_LessThan$0024$002456F059C0(arg00$$17, arg01$$13);\n}\nexport function op_LessThanOrEqual(arg00$$18, arg01$$14) {\n return BigInteger$0024$0024$0024op_LessThanOrEqual$0024$002456F059C0(arg00$$18, arg01$$14);\n}\nexport function op_GreaterThan(arg00$$19, arg01$$15) {\n return BigInteger$0024$0024$0024op_GreaterThan$0024$002456F059C0(arg00$$19, arg01$$15);\n}\nexport function op_GreaterThanOrEqual(arg00$$20, arg01$$16) {\n return BigInteger$0024$0024$0024op_GreaterThanOrEqual$0024$002456F059C0(arg00$$20, arg01$$16);\n}\nexport function op_Equality(arg00$$21, arg01$$17) {\n return BigInteger$0024$0024$0024op_Equality$0024$002456F059C0(arg00$$21, arg01$$17);\n}\nexport function op_Inequality(arg00$$22, arg01$$18) {\n return BigInteger$0024$0024$0024op_Inequality$0024$002456F059C0(arg00$$22, arg01$$18);\n}\n\nfunction flipTwosComplement(currByte, lowBitFound) {\n if (lowBitFound) {\n return [(currByte ^ 255) & 255, true];\n } else if (currByte === 0) {\n return [0, false];\n } else {\n let firstBitIndex;\n const list = ofSeq(rangeNumber(0, 1, 7));\n firstBitIndex = find(function predicate(i$$2) {\n return (currByte & 1 << i$$2) > 0;\n }, list);\n return [(currByte ^ 254 << firstBitIndex) & 255, true];\n }\n}\n\nexport function toByteArray(value$$1) {\n if (equals$$1(value$$1, zero)) {\n return new Uint8Array([0]);\n } else {\n const isPositive = value$$1.CompareTo(zero) > 0;\n const value$$2 = isPositive ? value$$1 : BigInteger$0024$0024$0024op_Multiply$0024$002456F059C0(BigInteger$0024$0024$0024$0024002Ector$0024$0024Z524259A4(-1), value$$1);\n let mask32;\n let i$$3;\n i$$3 = fromInteger(4294967295, false, 6);\n mask32 = fromInt64(i$$3);\n\n const loop = function loop($accumBytes$$74, $consumeValue$$75, $lowBitFound$$1$$76) {\n var value$$9, value$$10, value$$11;\n\n loop: while (true) {\n const accumBytes = $accumBytes$$74,\n consumeValue = $consumeValue$$75,\n lowBitFound$$1 = $lowBitFound$$1$$76;\n\n if (consumeValue.CompareTo(zero) <= 0) {\n let accumBytes$$1;\n\n if (isPositive) {\n accumBytes$$1 = skipWhile(function predicate$$1(b) {\n return b === 0;\n }, accumBytes);\n } else {\n accumBytes$$1 = skipWhile(function predicate$$2(b$$1) {\n return b$$1 === 255;\n }, accumBytes);\n }\n\n const isHighBitOne = (head(accumBytes$$1) & 128) !== 0;\n const accumBytes$$2 = (isPositive ? isHighBitOne : false) ? new List(0, accumBytes$$1) : (!isPositive ? !isHighBitOne : false) ? new List(255, accumBytes$$1) : accumBytes$$1;\n let array;\n array = ofList(accumBytes$$2, Uint8Array);\n return reverse(array, Uint8Array);\n } else {\n let currValue;\n const x$$19 = BigInteger$0024$0024$0024op_BitwiseAnd$0024$002456F059C0(consumeValue, mask32);\n currValue = toUInt32(x$$19);\n\n if (isPositive) {\n let b0;\n b0 = currValue & 0xFF;\n let b1;\n const value$$5 = currValue >>> 8;\n b1 = value$$5 & 0xFF;\n let b2;\n const value$$6 = currValue >>> 16;\n b2 = value$$6 & 0xFF;\n let b3;\n const value$$7 = currValue >>> 24;\n b3 = value$$7 & 0xFF;\n $accumBytes$$74 = new List(b3, new List(b2, new List(b1, new List(b0, accumBytes))));\n $consumeValue$$75 = BigInteger$0024$0024$0024op_RightShift$0024$002462E082A2(consumeValue, 32);\n $lowBitFound$$1$$76 = false;\n continue loop;\n } else {\n const patternInput = flipTwosComplement((currValue & 0xFF), lowBitFound$$1);\n const patternInput$$1 = flipTwosComplement((value$$9 = currValue >>> 8, (value$$9 & 0xFF)), patternInput[1]);\n const patternInput$$2 = flipTwosComplement((value$$10 = currValue >>> 16, (value$$10 & 0xFF)), patternInput$$1[1]);\n const patternInput$$3 = flipTwosComplement((value$$11 = currValue >>> 24, (value$$11 & 0xFF)), patternInput$$2[1]);\n $accumBytes$$74 = new List(patternInput$$3[0], new List(patternInput$$2[0], new List(patternInput$$1[0], new List(patternInput[0], accumBytes))));\n $consumeValue$$75 = BigInteger$0024$0024$0024op_RightShift$0024$002462E082A2(consumeValue, 32);\n $lowBitFound$$1$$76 = patternInput$$3[1];\n continue loop;\n }\n }\n\n break;\n }\n };\n\n return loop(new List(), value$$2, false);\n }\n}\nexport function fromByteArray(bytes) {\n if (bytes == null) {\n throw new Error(\"bytes\");\n } else {\n void null;\n }\n\n if (bytes.length === 0) {\n return zero;\n } else {\n const isPositive$$1 = (bytes[bytes.length - 1] & 128) === 0;\n const buffer = fill(new Uint8Array(4), 0, 4, 0);\n\n const loop$$1 = function loop$$1($accumUInt32$$80, $currIndex$$81, $bytesRemaining$$82, $lowBitFound$$6$$83) {\n loop$$1: while (true) {\n const accumUInt32 = $accumUInt32$$80,\n currIndex = $currIndex$$81,\n bytesRemaining = $bytesRemaining$$82,\n lowBitFound$$6 = $lowBitFound$$6$$83;\n\n if (bytesRemaining === 0) {\n let value$$14;\n value$$14 = fold(function folder(acc, value$$12) {\n var i$$4;\n return BigInteger$0024$0024$0024op_Addition$0024$002456F059C0(BigInteger$0024$0024$0024op_LeftShift$0024$002462E082A2(acc, 32), (i$$4 = (fromInteger(value$$12, false, 6)), (fromInt64(i$$4))));\n }, zero, accumUInt32);\n\n if (isPositive$$1) {\n return value$$14;\n } else {\n return BigInteger$0024$0024$0024op_Multiply$0024$002456F059C0(BigInteger$0024$0024$0024$0024002Ector$0024$0024Z524259A4(-1), value$$14);\n }\n } else {\n const bytesToProcess = min(comparePrimitives, bytesRemaining, 4) | 0;\n\n for (let i$$5 = 0; i$$5 <= bytesToProcess - 1; i$$5++) {\n buffer[i$$5] = bytes[currIndex + i$$5];\n }\n\n if (isPositive$$1) {\n fill(buffer, bytesToProcess, 4 - bytesToProcess, 0);\n const value$$15 = (((buffer[0] | buffer[1] << 8 >>> 0) >>> 0 | buffer[2] << 16 >>> 0) >>> 0 | buffer[3] << 24 >>> 0) >>> 0;\n $accumUInt32$$80 = new List(value$$15, accumUInt32);\n $currIndex$$81 = currIndex + bytesToProcess;\n $bytesRemaining$$82 = bytesRemaining - bytesToProcess;\n $lowBitFound$$6$$83 = false;\n continue loop$$1;\n } else {\n fill(buffer, bytesToProcess, 4 - bytesToProcess, 255);\n const patternInput$$4 = flipTwosComplement(buffer[0], lowBitFound$$6);\n const patternInput$$5 = flipTwosComplement(buffer[1], patternInput$$4[1]);\n const patternInput$$6 = flipTwosComplement(buffer[2], patternInput$$5[1]);\n const patternInput$$7 = flipTwosComplement(buffer[3], patternInput$$6[1]);\n const value$$16 = (((patternInput$$4[0] | patternInput$$5[0] << 8 >>> 0) >>> 0 | patternInput$$6[0] << 16 >>> 0) >>> 0 | patternInput$$7[0] << 24 >>> 0) >>> 0;\n $accumUInt32$$80 = new List(value$$16, accumUInt32);\n $currIndex$$81 = currIndex + bytesToProcess;\n $bytesRemaining$$82 = bytesRemaining - bytesToProcess;\n $lowBitFound$$6$$83 = patternInput$$7[1];\n continue loop$$1;\n }\n }\n\n break;\n }\n };\n\n return loop$$1(new List(), 0, bytes.length, false);\n }\n}\nexport function makeRangeStepFunction(step, last) {\n const stepComparedWithZero = step.CompareTo(zero) | 0;\n\n if (stepComparedWithZero === 0) {\n throw new Error(\"The step of a range cannot be zero\");\n } else {\n void null;\n }\n\n const stepGreaterThanZero = stepComparedWithZero > 0;\n return function (x$$20) {\n const comparedWithLast = x$$20.CompareTo(last) | 0;\n return ((stepGreaterThanZero ? comparedWithLast <= 0 : false) ? true : !stepGreaterThanZero ? comparedWithLast >= 0 : false) ? [x$$20, BigInteger$0024$0024$0024op_Addition$0024$002456F059C0(x$$20, step)] : undefined;\n };\n}\nexport function range(first, step$$1, last$$1) {\n const stepFn = makeRangeStepFunction(step$$1, last$$1);\n return delay(function () {\n return unfold(stepFn, first);\n });\n}","/**\n * DateTimeOffset functions.\n *\n * Note: DateOffset 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 * However, this means that in order to construct an UTC date\n * from a DateOffset with offset of +5 hours, you first need\n * to subtract those 5 hours, than add the \"local\" offset.\n * As said, all kinds of messed up.\n *\n * Basically; invariant: date.getTime() always return UTC time.\n */\nimport { create as createDate, dateOffsetToString, daysInMonth, offsetRegex, parseRaw } from \"./Date\";\nimport { fromValue, ticksToUnixEpochMilliseconds, unixEpochMillisecondsToTicks } from \"./Long\";\nimport { compareDates, padWithZeros } from \"./Util\";\nexport default function DateTimeOffset(value, offset) {\n const d = new Date(value);\n d.offset = offset != null ? offset : new Date().getTimezoneOffset() * -60000;\n return d;\n}\nexport function fromDate(date, offset) {\n const isUtc = date.kind === 1 /* UTC */;\n const offset2 = isUtc ? 0 : date.getTimezoneOffset() * -60000;\n if (offset != null && offset !== offset2) {\n throw new Error(isUtc\n ? \"The UTC Offset for Utc DateTime instances must be 0.\"\n : \"The UTC Offset of the local dateTime parameter does not match the offset argument.\");\n }\n return DateTimeOffset(date.getTime(), offset2);\n}\nexport function fromTicks(ticks, offset) {\n ticks = fromValue(ticks);\n const epoc = ticksToUnixEpochMilliseconds(ticks) - offset;\n return DateTimeOffset(epoc, offset);\n}\nexport function getUtcTicks(date) {\n return unixEpochMillisecondsToTicks(date.getTime(), 0);\n}\nexport function minValue() {\n // This is \"0001-01-01T00:00:00.000Z\", actual JS min value is -8640000000000000\n return DateTimeOffset(-62135596800000, 0);\n}\nexport function maxValue() {\n // This is \"9999-12-31T23:59:59.999Z\", actual JS max value is 8640000000000000\n return DateTimeOffset(253402300799999, 0);\n}\nexport function parse(str) {\n const date = parseRaw(str);\n const offsetMatch = offsetRegex.exec(str);\n const offset = offsetMatch == null\n ? date.getTimezoneOffset() * -60000\n : (offsetMatch[0] === \"Z\"\n ? 0\n : parseInt(offsetMatch[1], 10) * 3600000\n + parseInt(offsetMatch[2], 10) * 60000);\n return DateTimeOffset(date.getTime(), offset);\n}\nexport function tryParse(v, _refValue) {\n try {\n return [true, parse(v)];\n }\n catch (_err) {\n return [false, minValue()];\n }\n}\nexport function create(year, month, day, h, m, s, ms, offset) {\n if (offset == null) {\n offset = ms;\n ms = 0;\n }\n if (offset !== 0) {\n if (offset % 60000 !== 0) {\n throw new Error(\"Offset must be specified in whole minutes\");\n }\n if (~~(offset / 3600000) > 14) {\n throw new Error(\"Offset must be within plus or minus 14 hour\");\n }\n }\n let date;\n if (offset === 0) {\n date = new Date(Date.UTC(year, month - 1, day, h, m, s, ms));\n if (year <= 99) {\n date.setFullYear(year, month - 1, day);\n }\n }\n else {\n const str = padWithZeros(year, 4) + \"-\" +\n padWithZeros(month, 2) + \"-\" +\n padWithZeros(day, 2) + \"T\" +\n padWithZeros(h, 2) + \":\" +\n padWithZeros(m, 2) + \":\" +\n padWithZeros(s, 2) + \".\" +\n padWithZeros(ms, 3) +\n dateOffsetToString(offset);\n date = new Date(str);\n }\n const dateValue = date.getTime();\n if (isNaN(dateValue)) {\n throw new Error(\"The parameters describe an unrepresentable Date\");\n }\n return DateTimeOffset(dateValue, offset);\n}\nexport function now() {\n const date = new Date();\n const offset = date.getTimezoneOffset() * -60000;\n return DateTimeOffset(date.getTime(), offset);\n}\nexport function utcNow() {\n const date = now();\n return DateTimeOffset(date.getTime(), 0);\n}\nexport function toUniversalTime(date) {\n return DateTimeOffset(date.getTime(), 0);\n}\nexport function toLocalTime(date) {\n return DateTimeOffset(date.getTime(), date.getTimezoneOffset() * -60000);\n}\nexport function timeOfDay(d) {\n var _a;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n return d2.getUTCHours() * 3600000\n + d2.getUTCMinutes() * 60000\n + d2.getUTCSeconds() * 1000\n + d2.getUTCMilliseconds();\n}\nexport function date(d) {\n var _a;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n return createDate(d2.getUTCFullYear(), d2.getUTCMonth() + 1, d2.getUTCDate(), 0, 0, 0, 0);\n}\nexport function day(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCDate();\n}\nexport function hour(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCHours();\n}\nexport function millisecond(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCMilliseconds();\n}\nexport function minute(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCMinutes();\n}\nexport function month(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCMonth() + 1;\n}\nexport function second(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCSeconds();\n}\nexport function year(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCFullYear();\n}\nexport function dayOfWeek(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCDay();\n}\nexport function dayOfYear(d) {\n var _a;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n const _year = d2.getUTCFullYear();\n const _month = d2.getUTCMonth() + 1;\n let _day = d2.getUTCDate();\n for (let i = 1; i < _month; i++) {\n _day += daysInMonth(_year, i);\n }\n return _day;\n}\nexport function add(d, ts) {\n var _a;\n return DateTimeOffset(d.getTime() + ts, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addDays(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 86400000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addHours(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 3600000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addMinutes(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 60000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addSeconds(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 1000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addMilliseconds(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addYears(d, v) {\n var _a;\n const newMonth = d.getUTCMonth() + 1;\n const newYear = d.getUTCFullYear() + v;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, d.getUTCDate());\n return create(newYear, newMonth, newDay, d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds(), ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addMonths(d, v) {\n var _a, _b;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n let newMonth = d2.getUTCMonth() + 1 + 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 = d2.getUTCFullYear() + yearOffset;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, d2.getUTCDate());\n return create(newYear, newMonth, newDay, d2.getUTCHours(), d2.getUTCMinutes(), d2.getUTCSeconds(), d2.getUTCMilliseconds(), ((_b = d.offset) !== null && _b !== void 0 ? _b : 0));\n}\nexport function subtract(d, that) {\n var _a;\n return typeof that === \"number\"\n ? DateTimeOffset(d.getTime() - that, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0))\n : d.getTime() - that.getTime();\n}\nexport function equals(d1, d2) {\n return d1.getTime() === d2.getTime();\n}\nexport function equalsExact(d1, d2) {\n return d1.getTime() === d2.getTime() && d1.offset === d2.offset;\n}\nexport function compare(d1, d2) {\n return compareDates(d1, d2);\n}\nexport const compareTo = compare;\nexport function op_Addition(x, y) {\n return add(x, y);\n}\nexport function op_Subtraction(x, y) {\n return subtract(x, y);\n}\n//# sourceMappingURL=DateOffset.js.map","// tslint:disable:max-line-length\nimport { fromNumber, op_Division, op_Multiply, toNumber } from \"./Long\";\nimport { comparePrimitives, padLeftAndRightWithZeros, padWithZeros } from \"./Util\";\n// TimeSpan in runtime just becomes a number representing milliseconds\n/**\n * Calls:\n * - `Math.ceil` if the `value` is **negative**\n * - `Math.floor` if the `value` is **positive**\n * @param value Value to round\n */\nfunction signedRound(value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n}\nexport function create(d = 0, h = 0, m = 0, s = 0, ms = 0) {\n switch (arguments.length) {\n case 1:\n // ticks\n return fromTicks(arguments[0]);\n case 3:\n // h,m,s\n d = 0, h = arguments[0], m = arguments[1], s = arguments[2], ms = 0;\n break;\n default:\n // d,h,m,s,ms\n break;\n }\n return d * 86400000 + h * 3600000 + m * 60000 + s * 1000 + ms;\n}\nexport function fromTicks(ticks) {\n return toNumber(op_Division(ticks, 10000));\n}\nexport function fromDays(d) {\n return create(d, 0, 0, 0);\n}\nexport function fromHours(h) {\n return create(h, 0, 0);\n}\nexport function fromMinutes(m) {\n return create(0, m, 0);\n}\nexport function fromSeconds(s) {\n return create(0, 0, s);\n}\nexport function days(ts) {\n return signedRound(ts / 86400000);\n}\nexport function hours(ts) {\n return signedRound(ts % 86400000 / 3600000);\n}\nexport function minutes(ts) {\n return signedRound(ts % 3600000 / 60000);\n}\nexport function seconds(ts) {\n return signedRound(ts % 60000 / 1000);\n}\nexport function milliseconds(ts) {\n return signedRound(ts % 1000);\n}\nexport function ticks(ts) {\n return op_Multiply(fromNumber(ts), 10000);\n}\nexport function totalDays(ts) {\n return ts / 86400000;\n}\nexport function totalHours(ts) {\n return ts / 3600000;\n}\nexport function totalMinutes(ts) {\n return ts / 60000;\n}\nexport function totalSeconds(ts) {\n return ts / 1000;\n}\nexport function negate(ts) {\n return ts * -1;\n}\nexport function add(ts1, ts2) {\n return ts1 + ts2;\n}\nexport function subtract(ts1, ts2) {\n return ts1 - ts2;\n}\nexport const op_Addition = add;\nexport const op_Subtraction = subtract;\nexport const compare = comparePrimitives;\nexport const compareTo = comparePrimitives;\nexport function duration(x) {\n return Math.abs(x);\n}\nexport function toString(ts, format = \"c\", _provider) {\n if ([\"c\", \"g\", \"G\"].indexOf(format) === -1) {\n throw new Error(\"Custom formats are not supported\");\n }\n const d = Math.abs(days(ts));\n const h = Math.abs(hours(ts));\n const m = Math.abs(minutes(ts));\n const s = Math.abs(seconds(ts));\n const ms = Math.abs(milliseconds(ts));\n const sign = ts < 0 ? \"-\" : \"\";\n return `${sign}${d === 0 && (format === \"c\" || format === \"g\") ? \"\" : format === \"c\" ? d + \".\" : d + \":\"}${format === \"g\" ? h : padWithZeros(h, 2)}:${padWithZeros(m, 2)}:${padWithZeros(s, 2)}${ms === 0 && (format === \"c\" || format === \"g\") ? \"\" : format === \"g\" ? \".\" + padWithZeros(ms, 3) : \".\" + padLeftAndRightWithZeros(ms, 3, 7)}`;\n}\nexport function parse(str) {\n const firstDot = str.search(\"\\\\.\");\n const firstColon = str.search(\"\\\\:\");\n if (firstDot === -1 && firstColon === -1) { // There is only a day ex: 4\n const d = parseInt(str, 0);\n if (isNaN(d)) {\n throw new Error(`String '${str}' was not recognized as a valid TimeSpan.`);\n }\n else {\n return create(d, 0, 0, 0, 0);\n }\n }\n if (firstColon > 0) { // process time part\n // WIP: (-?)(((\\d+)\\.)?([0-9]|0[0-9]|1[0-9]|2[0-3]):(\\d+)(:\\d+(\\.\\d{1,7})?)?|\\d+(?:(?!\\.)))\n const r = /^(-?)((\\d+)\\.)?(?:0*)([0-9]|0[0-9]|1[0-9]|2[0-3]):(?:0*)([0-5][0-9]|[0-9])(:(?:0*)([0-5][0-9]|[0-9]))?\\.?(\\d+)?$/.exec(str);\n if (r != null && r[4] != null && r[5] != null) {\n let d = 0;\n let ms = 0;\n let s = 0;\n const sign = r[1] != null && r[1] === \"-\" ? -1 : 1;\n const h = +r[4];\n const m = +r[5];\n if (r[3] != null) {\n d = +r[3];\n }\n if (r[7] != null) {\n s = +r[7];\n }\n if (r[8] != null) {\n // Depending on the number of decimals passed, we need to adapt the numbers\n switch (r[8].length) {\n case 1:\n ms = +r[8] * 100;\n break;\n case 2:\n ms = +r[8] * 10;\n break;\n case 3:\n ms = +r[8];\n break;\n case 4:\n ms = +r[8] / 10;\n break;\n case 5:\n ms = +r[8] / 100;\n break;\n case 6:\n ms = +r[8] / 1000;\n break;\n case 7:\n ms = +r[8] / 10000;\n break;\n default:\n throw new Error(`String '${str}' was not recognized as a valid TimeSpan.`);\n }\n }\n return sign * create(d, h, m, s, ms);\n }\n }\n throw new Error(`String '${str}' was not recognized as a valid TimeSpan.`);\n}\nexport function tryParse(v, _refValue) {\n try {\n return [true, parse(v)];\n }\n catch (_err) {\n return [false, 0];\n }\n}\n//# sourceMappingURL=TimeSpan.js.map","\nnamespace Thoth.Json\nopen System.Text.RegularExpressions\n\n[]\nmodule Decode =\n\n open System.Globalization\n open Fable.Core\n open Fable.Core.JsInterop\n\n module internal Helpers =\n []\n let jsTypeof (_ : JsonValue) : string = jsNative\n\n []\n let isSyntaxError (_ : JsonValue) : bool = jsNative\n\n let inline getField (fieldName: string) (o: JsonValue) = o?(fieldName)\n let inline isString (o: JsonValue) : bool = o :? string\n\n let inline isBoolean (o: JsonValue) : bool = o :? bool\n\n let inline isNumber (o: JsonValue) : bool = jsTypeof o = \"number\"\n\n let inline isArray (o: JsonValue) : bool = JS.Constructors.Array.isArray(o)\n\n []\n let isObject (_ : JsonValue) : bool = jsNative\n\n let inline isNaN (o: JsonValue) : bool = JS.Constructors.Number.isNaN(!!o)\n\n let inline isNullValue (o: JsonValue): bool = isNull o\n\n /// is the value an integer? This returns false for 1.1, NaN, Infinite, ...\n []\n let isIntegralValue (_: JsonValue) : bool = jsNative\n\n []\n let isBetweenInclusive(_v: JsonValue, _min: obj, _max: obj) = jsNative\n\n []\n let isIntFinite (_: JsonValue) : bool = jsNative\n\n let isUndefined (o: JsonValue): bool = jsTypeof o = \"undefined\"\n\n []\n let anyToString (_: JsonValue) : string = jsNative\n\n let inline isFunction (o: JsonValue) : bool = jsTypeof o = \"function\"\n\n let inline objectKeys (o: JsonValue) : string seq = upcast JS.Constructors.Object.keys(o)\n let inline asBool (o: JsonValue): bool = unbox o\n let inline asInt (o: JsonValue): int = unbox o\n let inline asFloat (o: JsonValue): float = unbox o\n let inline asFloat32 (o: JsonValue): float32 = unbox o\n let inline asString (o: JsonValue): string = unbox o\n let inline asArray (o: JsonValue): JsonValue[] = unbox o\n\n let private genericMsg msg value newLine =\n try\n \"Expecting \"\n + msg\n + \" but instead got:\"\n + (if newLine then \"\\n\" else \" \")\n + (Helpers.anyToString value)\n with\n | _ ->\n \"Expecting \"\n + msg\n + \" but decoder failed. Couldn't report given value due to circular structure.\"\n + (if newLine then \"\\n\" else \" \")\n\n let private errorToString (path : string, error) =\n let reason =\n match error with\n | BadPrimitive (msg, value) ->\n genericMsg msg value false\n | BadType (msg, value) ->\n genericMsg msg value true\n | BadPrimitiveExtra (msg, value, reason) ->\n genericMsg msg value false + \"\\nReason: \" + reason\n | BadField (msg, value) ->\n genericMsg msg value true\n | BadPath (msg, value, fieldName) ->\n genericMsg msg value true + (\"\\nNode `\" + fieldName + \"` is unkown.\")\n | TooSmallArray (msg, value) ->\n \"Expecting \" + msg + \".\\n\" + (Helpers.anyToString value)\n | BadOneOf messages ->\n \"The following errors were found:\\n\\n\" + String.concat \"\\n\\n\" messages\n | FailMessage msg ->\n \"The following `failure` occurred with the decoder: \" + msg\n\n match error with\n | BadOneOf _ ->\n // Don't need to show the path here because each error case will show it's own path\n reason\n | _ ->\n \"Error at: `\" + path + \"`\\n\" + reason\n\n ///////////////\n // Runners ///\n /////////////\n\n let fromValue (path : string) (decoder : Decoder<'T>) =\n fun value ->\n match decoder path value with\n | Ok success ->\n Ok success\n | Error error ->\n Error (errorToString error)\n\n let fromString (decoder : Decoder<'T>) =\n fun value ->\n try\n let json = JS.JSON.parse value\n fromValue \"$\" decoder json\n with\n | ex when Helpers.isSyntaxError ex ->\n Error(\"Given an invalid JSON: \" + ex.Message)\n\n let unsafeFromString (decoder : Decoder<'T>) =\n fun value ->\n match fromString decoder value with\n | Ok x -> x\n | Error msg -> failwith msg\n\n []\n let decodeValue (path : string) (decoder : Decoder<'T>) = fromValue path decoder\n\n []\n let decodeString (decoder : Decoder<'T>) = fromString decoder\n\n //////////////////\n // Primitives ///\n ////////////////\n\n let string : Decoder =\n fun path value ->\n if Helpers.isString value then\n Ok(Helpers.asString value)\n else\n (path, BadPrimitive(\"a string\", value)) |> Error\n\n let guid : Decoder =\n fun path value ->\n if Helpers.isString value then\n match System.Guid.TryParse (Helpers.asString value) with\n | true, x -> Ok x\n | _ -> (path, BadPrimitive(\"a guid\", value)) |> Error\n else (path, BadPrimitive(\"a guid\", value)) |> Error\n\n let unit : Decoder =\n fun path value ->\n if Helpers.isNullValue value then\n Ok ()\n else\n (path, BadPrimitive(\"null\", value)) |> Error\n\n let inline private integral\n (name : string)\n (tryParse : (string -> bool * 'T))\n (min : 'T)\n (max : 'T)\n (conv : float -> 'T) : Decoder< 'T > =\n\n fun path value ->\n if Helpers.isNumber value then\n let value : float = unbox value\n if Helpers.isIntegralValue value then\n if (float min) <= value && value <= (float max) then\n Ok(conv value)\n else\n (path, BadPrimitiveExtra(name, value, \"Value was either too large or too small for \" + name)) |> Error\n else\n (path, BadPrimitiveExtra(name, value, \"Value is not an integral value\")) |> Error\n elif Helpers.isString value then\n match tryParse (Helpers.asString value) with\n | true, x -> Ok x\n | _ -> (path, BadPrimitive(name, value)) |> Error\n else\n (path, BadPrimitive(name, value)) |> Error\n\n let sbyte : Decoder =\n integral\n \"a sbyte\"\n System.SByte.TryParse\n System.SByte.MinValue\n System.SByte.MaxValue\n sbyte\n\n /// Alias to Decode.uint8\n let byte : Decoder =\n integral\n \"a byte\"\n System.Byte.TryParse\n System.Byte.MinValue\n System.Byte.MaxValue\n byte\n\n let int16 : Decoder =\n integral\n \"an int16\"\n System.Int16.TryParse\n System.Int16.MinValue\n System.Int16.MaxValue\n int16\n\n let uint16 : Decoder =\n integral\n \"an uint16\"\n System.UInt16.TryParse\n System.UInt16.MinValue\n System.UInt16.MaxValue\n uint16\n\n let int : Decoder =\n integral\n \"an int\"\n System.Int32.TryParse\n System.Int32.MinValue\n System.Int32.MaxValue\n int\n\n let uint32 : Decoder =\n integral\n \"an uint32\"\n System.UInt32.TryParse\n System.UInt32.MinValue\n System.UInt32.MaxValue\n uint32\n\n let int64 : Decoder =\n integral\n \"an int64\"\n System.Int64.TryParse\n System.Int64.MinValue\n System.Int64.MaxValue\n int64\n\n let uint64 : Decoder =\n integral\n \"an uint64\"\n System.UInt64.TryParse\n System.UInt64.MinValue\n System.UInt64.MaxValue\n uint64\n\n let bigint : Decoder =\n fun path value ->\n if Helpers.isNumber value then\n Helpers.asInt value |> bigint |> Ok\n elif Helpers.isString value then\n // TODO: BigInt.TryParse has been added in Fable 2.1.4\n // Don't use it for now to support lower Fable versions\n try\n bigint.Parse (Helpers.asString value) |> Ok\n with _ ->\n (path, BadPrimitive(\"a bigint\", value)) |> Error\n else\n (path, BadPrimitive(\"a bigint\", value)) |> Error\n\n let bool : Decoder =\n fun path value ->\n if Helpers.isBoolean value then\n Ok(Helpers.asBool value)\n else\n (path, BadPrimitive(\"a boolean\", value)) |> Error\n\n let float : Decoder =\n fun path value ->\n if Helpers.isNumber value then\n Ok(Helpers.asFloat value)\n else\n (path, BadPrimitive(\"a float\", value)) |> Error\n\n let float32 : Decoder =\n fun path value ->\n if Helpers.isNumber value then\n Ok(Helpers.asFloat32 value)\n else\n (path, BadPrimitive(\"a float32\", value)) |> Error\n\n let decimal : Decoder =\n fun path value ->\n if Helpers.isNumber value then\n Helpers.asFloat value |> decimal |> Ok\n elif Helpers.isString value then\n match System.Decimal.TryParse (Helpers.asString value) with\n | true, x -> Ok x\n | _ -> (path, BadPrimitive(\"a decimal\", value)) |> Error\n else\n (path, BadPrimitive(\"a decimal\", value)) |> Error\n\n let datetime : Decoder =\n fun path value ->\n if Helpers.isString value then\n match System.DateTime.TryParse (Helpers.asString value) with\n | true, x -> x.ToUniversalTime() |> Ok\n | _ -> (path, BadPrimitive(\"a datetime\", value)) |> Error\n else\n (path, BadPrimitive(\"a datetime\", value)) |> Error\n\n let datetimeOffset : Decoder =\n fun path value ->\n if Helpers.isString value then\n match System.DateTimeOffset.TryParse(Helpers.asString value) with\n | true, x -> Ok x\n | _ -> (path, BadPrimitive(\"a datetimeoffset\", value)) |> Error\n else\n (path, BadPrimitive(\"a datetime\", value)) |> Error\n\n let timespan : Decoder =\n fun path value ->\n if Helpers.isString value then\n match System.TimeSpan.TryParse(Helpers.asString value) with\n | true, x -> Ok x\n | _ -> (path, BadPrimitive(\"a timespan\", value)) |> Error\n else\n (path, BadPrimitive(\"a timespan\", value)) |> Error\n\n /////////////////////////\n // Object primitives ///\n ///////////////////////\n\n let private decodeMaybeNull path (decoder : Decoder<'T>) value =\n // The decoder may be an option decoder so give it an opportunity to check null values\n match decoder path value with\n | Ok v -> Ok(Some v)\n | Error _ when Helpers.isNullValue value -> Ok None\n | Error er -> Error er\n\n let optional (fieldName : string) (decoder : Decoder<'value>) : Decoder<'value option> =\n fun path value ->\n if Helpers.isObject value then\n let fieldValue = Helpers.getField fieldName value\n if Helpers.isUndefined fieldValue then Ok None\n else decodeMaybeNull (path + \".\" + fieldName) decoder fieldValue\n else\n Error(path, BadType(\"an object\", value))\n\n let private badPathError fieldNames currentPath value =\n let currentPath = defaultArg currentPath (\"$\"::fieldNames |> String.concat \".\")\n let msg = \"an object with path `\" + (String.concat \".\" fieldNames) + \"`\"\n Error(currentPath, BadPath (msg, value, List.tryLast fieldNames |> Option.defaultValue \"\"))\n\n let optionalAt (fieldNames : string list) (decoder : Decoder<'value>) : Decoder<'value option> =\n fun firstPath firstValue ->\n ((firstPath, firstValue, None), fieldNames)\n ||> List.fold (fun (curPath, curValue, res) field ->\n match res with\n | Some _ -> curPath, curValue, res\n | None ->\n if Helpers.isNullValue curValue then\n let res = badPathError fieldNames (Some curPath) firstValue\n curPath, curValue, Some res\n elif Helpers.isObject curValue then\n let curValue = Helpers.getField field curValue\n curPath + \".\" + field, curValue, None\n else\n let res = Error(curPath, BadType(\"an object\", curValue))\n curPath, curValue, Some res)\n |> function\n | _, _, Some res -> res\n | lastPath, lastValue, None ->\n if Helpers.isUndefined lastValue then Ok None\n else decodeMaybeNull lastPath decoder lastValue\n\n let field (fieldName: string) (decoder : Decoder<'value>) : Decoder<'value> =\n fun path value ->\n if Helpers.isObject value then\n let fieldValue = Helpers.getField fieldName value\n if Helpers.isUndefined fieldValue then\n Error(path, BadField (\"an object with a field named `\" + fieldName + \"`\", value))\n else\n decoder (path + \".\" + fieldName) fieldValue\n else\n Error(path, BadType(\"an object\", value))\n\n let at (fieldNames: string list) (decoder : Decoder<'value>) : Decoder<'value> =\n fun firstPath firstValue ->\n ((firstPath, firstValue, None), fieldNames)\n ||> List.fold (fun (curPath, curValue, res) field ->\n match res with\n | Some _ -> curPath, curValue, res\n | None ->\n if Helpers.isNullValue curValue then\n let res = badPathError fieldNames (Some curPath) firstValue\n curPath, curValue, Some res\n elif Helpers.isObject curValue then\n let curValue = Helpers.getField field curValue\n if Helpers.isUndefined curValue then\n let res = badPathError fieldNames None firstValue\n curPath, curValue, Some res\n else\n curPath + \".\" + field, curValue, None\n else\n let res = Error(curPath, BadType(\"an object\", curValue))\n curPath, curValue, Some res)\n |> function\n | _, _, Some res -> res\n | lastPath, lastValue, None ->\n decoder lastPath lastValue\n\n let index (requestedIndex: int) (decoder : Decoder<'value>) : Decoder<'value> =\n fun path value ->\n let currentPath = path + \".[\" + (Operators.string requestedIndex) + \"]\"\n if Helpers.isArray value then\n let vArray = Helpers.asArray value\n if requestedIndex < vArray.Length then\n decoder currentPath (vArray.[requestedIndex])\n else\n let msg =\n \"a longer array. Need index `\"\n + (requestedIndex.ToString())\n + \"` but there are only `\"\n + (vArray.Length.ToString())\n + \"` entries\"\n\n (currentPath, TooSmallArray(msg, value))\n |> Error\n else\n (currentPath, BadPrimitive(\"an array\", value))\n |> Error\n\n let option (decoder : Decoder<'value>) : Decoder<'value option> =\n fun path value ->\n if Helpers.isNullValue value then Ok None\n else decoder path value |> Result.map Some\n\n //////////////////////\n // Data structure ///\n ////////////////////\n\n let list (decoder : Decoder<'value>) : Decoder<'value list> =\n fun path value ->\n if Helpers.isArray value then\n let mutable i = -1\n let tokens = Helpers.asArray value\n (Ok [], tokens) ||> Array.fold (fun acc value ->\n i <- i + 1\n match acc with\n | Error _ -> acc\n | Ok acc ->\n match decoder (path + \".[\" + (i.ToString()) + \"]\") value with\n | Error er -> Error er\n | Ok value -> Ok (value::acc))\n |> Result.map List.rev\n else\n (path, BadPrimitive (\"a list\", value))\n |> Error\n\n let seq (decoder : Decoder<'value>) : Decoder<'value seq> =\n fun path value ->\n if Helpers.isArray value then\n let mutable i = -1\n let tokens = Helpers.asArray value\n (Ok (seq []), tokens) ||> Array.fold (fun acc value ->\n i <- i + 1\n match acc with\n | Error _ -> acc\n | Ok acc ->\n match decoder (path + \".[\" + (i.ToString()) + \"]\") value with\n | Error er -> Error er\n | Ok value -> Ok (Seq.append [value] acc))\n |> Result.map Seq.rev\n else\n (path, BadPrimitive (\"a seq\", value))\n |> Error\n\n let array (decoder : Decoder<'value>) : Decoder<'value array> =\n fun path value ->\n if Helpers.isArray value then\n let mutable i = -1\n let tokens = Helpers.asArray value\n let arr = Array.zeroCreate tokens.Length\n (Ok arr, tokens) ||> Array.fold (fun acc value ->\n i <- i + 1\n match acc with\n | Error _ -> acc\n | Ok acc ->\n match decoder (path + \".[\" + (i.ToString()) + \"]\") value with\n | Error er -> Error er\n | Ok value -> acc.[i] <- value; Ok acc)\n else\n (path, BadPrimitive (\"an array\", value))\n |> Error\n\n let keys: Decoder =\n fun path value ->\n if Helpers.isObject value then\n Helpers.objectKeys value |> List.ofSeq |> Ok\n else\n (path, BadPrimitive (\"an object\", value))\n |> Error\n\n let keyValuePairs (decoder : Decoder<'value>) : Decoder<(string * 'value) list> =\n fun path value ->\n match keys path value with\n | Ok objectKeys ->\n (Ok [], objectKeys) ||> List.fold (fun acc prop ->\n match acc with\n | Error _ -> acc\n | Ok acc ->\n match Helpers.getField prop value |> decoder path with\n | Error er -> Error er\n | Ok value -> (prop, value)::acc |> Ok)\n |> Result.map List.rev\n | Error e -> Error e\n\n //////////////////////////////\n // Inconsistent Structure ///\n ////////////////////////////\n\n let oneOf (decoders : Decoder<'value> list) : Decoder<'value> =\n fun path value ->\n let rec runner (decoders : Decoder<'value> list) (errors : string list) =\n match decoders with\n | head::tail ->\n match fromValue path head value with\n | Ok v ->\n Ok v\n | Error error -> runner tail (errors @ [error])\n | [] -> (path, BadOneOf errors) |> Error\n\n runner decoders []\n\n //////////////////////\n // Fancy decoding ///\n ////////////////////\n\n let nil (output : 'a) : Decoder<'a> =\n fun path value ->\n if Helpers.isNullValue value then\n Ok output\n else\n (path, BadPrimitive(\"null\", value)) |> Error\n\n let value _ v = Ok v\n\n let succeed (output : 'a) : Decoder<'a> =\n fun _ _ ->\n Ok output\n\n let fail (msg: string) : Decoder<'a> =\n fun path _ ->\n (path, FailMessage msg) |> Error\n\n let andThen (cb: 'a -> Decoder<'b>) (decoder : Decoder<'a>) : Decoder<'b> =\n fun path value ->\n match decoder path value with\n | Error error -> Error error\n | Ok result -> cb result path value\n\n let all (decoders: Decoder<'a> list): Decoder<'a list> =\n fun path value ->\n let rec runner (decoders: Decoder<'a> list) (values: 'a list) =\n match decoders with\n | decoder :: tail ->\n match decoder path value with\n | Ok value -> runner tail (values @ [ value ])\n | Error error -> Error error\n | [] -> Ok values\n\n runner decoders []\n\n /////////////////////\n // Map functions ///\n ///////////////////\n\n let map\n (ctor : 'a -> 'value)\n (d1 : Decoder<'a>) : Decoder<'value> =\n fun path value ->\n match d1 path value with\n | Ok v1 -> Ok (ctor v1)\n | Error er -> Error er\n\n let map2\n (ctor : 'a -> 'b -> 'value)\n (d1 : Decoder<'a>)\n (d2 : Decoder<'b>) : Decoder<'value> =\n fun path value ->\n match d1 path value, d2 path value with\n | Ok v1, Ok v2 -> Ok (ctor v1 v2)\n | Error er,_ -> Error er\n | _,Error er -> Error er\n\n let map3\n (ctor : 'a -> 'b -> 'c -> 'value)\n (d1 : Decoder<'a>)\n (d2 : Decoder<'b>)\n (d3 : Decoder<'c>) : Decoder<'value> =\n fun path value ->\n match d1 path value, d2 path value, d3 path value with\n | Ok v1, Ok v2, Ok v3 -> Ok (ctor v1 v2 v3)\n | Error er,_,_ -> Error er\n | _,Error er,_ -> Error er\n | _,_,Error er -> Error er\n\n let map4\n (ctor : 'a -> 'b -> 'c -> 'd -> 'value)\n (d1 : Decoder<'a>)\n (d2 : Decoder<'b>)\n (d3 : Decoder<'c>)\n (d4 : Decoder<'d>) : Decoder<'value> =\n fun path value ->\n match d1 path value, d2 path value, d3 path value, d4 path value with\n | Ok v1, Ok v2, Ok v3, Ok v4 -> Ok (ctor v1 v2 v3 v4)\n | Error er,_,_,_ -> Error er\n | _,Error er,_,_ -> Error er\n | _,_,Error er,_ -> Error er\n | _,_,_,Error er -> Error er\n\n let map5\n (ctor : 'a -> 'b -> 'c -> 'd -> 'e -> 'value)\n (d1 : Decoder<'a>)\n (d2 : Decoder<'b>)\n (d3 : Decoder<'c>)\n (d4 : Decoder<'d>)\n (d5 : Decoder<'e>) : Decoder<'value> =\n fun path value ->\n match d1 path value, d2 path value, d3 path value, d4 path value, d5 path value with\n | Ok v1, Ok v2, Ok v3, Ok v4, Ok v5 -> Ok (ctor v1 v2 v3 v4 v5)\n | Error er,_,_,_,_ -> Error er\n | _,Error er,_,_,_ -> Error er\n | _,_,Error er,_,_ -> Error er\n | _,_,_,Error er,_ -> Error er\n | _,_,_,_,Error er -> Error er\n\n let map6\n (ctor : 'a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'value)\n (d1 : Decoder<'a>)\n (d2 : Decoder<'b>)\n (d3 : Decoder<'c>)\n (d4 : Decoder<'d>)\n (d5 : Decoder<'e>)\n (d6 : Decoder<'f>) : Decoder<'value> =\n fun path value ->\n match d1 path value, d2 path value, d3 path value, d4 path value, d5 path value, d6 path value with\n | Ok v1, Ok v2, Ok v3, Ok v4, Ok v5, Ok v6 -> Ok (ctor v1 v2 v3 v4 v5 v6)\n | Error er,_,_,_,_,_ -> Error er\n | _,Error er,_,_,_,_ -> Error er\n | _,_,Error er,_,_,_ -> Error er\n | _,_,_,Error er,_,_ -> Error er\n | _,_,_,_,Error er,_ -> Error er\n | _,_,_,_,_,Error er -> Error er\n\n let map7\n (ctor : 'a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'value)\n (d1 : Decoder<'a>)\n (d2 : Decoder<'b>)\n (d3 : Decoder<'c>)\n (d4 : Decoder<'d>)\n (d5 : Decoder<'e>)\n (d6 : Decoder<'f>)\n (d7 : Decoder<'g>) : Decoder<'value> =\n fun path value ->\n match d1 path value, d2 path value, d3 path value, d4 path value, d5 path value, d6 path value, d7 path value with\n | Ok v1, Ok v2, Ok v3, Ok v4, Ok v5, Ok v6, Ok v7 -> Ok (ctor v1 v2 v3 v4 v5 v6 v7)\n | Error er,_,_,_,_,_,_ -> Error er\n | _,Error er,_,_,_,_,_ -> Error er\n | _,_,Error er,_,_,_,_ -> Error er\n | _,_,_,Error er,_,_,_ -> Error er\n | _,_,_,_,Error er,_,_ -> Error er\n | _,_,_,_,_,Error er,_ -> Error er\n | _,_,_,_,_,_,Error er -> Error er\n\n let map8\n (ctor : 'a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> 'value)\n (d1 : Decoder<'a>)\n (d2 : Decoder<'b>)\n (d3 : Decoder<'c>)\n (d4 : Decoder<'d>)\n (d5 : Decoder<'e>)\n (d6 : Decoder<'f>)\n (d7 : Decoder<'g>)\n (d8 : Decoder<'h>) : Decoder<'value> =\n fun path value ->\n match d1 path value, d2 path value, d3 path value, d4 path value, d5 path value, d6 path value, d7 path value, d8 path value with\n | Ok v1, Ok v2, Ok v3, Ok v4, Ok v5, Ok v6, Ok v7, Ok v8 -> Ok (ctor v1 v2 v3 v4 v5 v6 v7 v8)\n | Error er,_,_,_,_,_,_,_ -> Error er\n | _,Error er,_,_,_,_,_,_ -> Error er\n | _,_,Error er,_,_,_,_,_ -> Error er\n | _,_,_,Error er,_,_,_,_ -> Error er\n | _,_,_,_,Error er,_,_,_ -> Error er\n | _,_,_,_,_,Error er,_,_ -> Error er\n | _,_,_,_,_,_,Error er,_ -> Error er\n | _,_,_,_,_,_,_,Error er -> Error er\n\n let dict (decoder : Decoder<'value>) : Decoder> =\n map Map.ofList (keyValuePairs decoder)\n\n //////////////////////\n // Object builder ///\n ////////////////////\n\n type IRequiredGetter =\n abstract Field : string -> Decoder<'a> -> 'a\n abstract At : List -> Decoder<'a> -> 'a\n abstract Raw : Decoder<'a> -> 'a\n\n type IOptionalGetter =\n abstract Field : string -> Decoder<'a> -> 'a option\n abstract At : List -> Decoder<'a> -> 'a option\n abstract Raw : Decoder<'a> -> 'a option\n\n type IGetters =\n abstract Required: IRequiredGetter\n abstract Optional: IOptionalGetter\n\n let private unwrapWith (errors: ResizeArray) path (decoder: Decoder<'T>) value: 'T =\n match decoder path value with\n | Ok v -> v\n | Error er -> errors.Add(er); Unchecked.defaultof<'T>\n\n type Getters<'T>(path: string, v: 'T) =\n let mutable errors = ResizeArray()\n let required =\n { new IRequiredGetter with\n member __.Field (fieldName : string) (decoder : Decoder<_>) =\n unwrapWith errors path (field fieldName decoder) v\n member __.At (fieldNames : string list) (decoder : Decoder<_>) =\n unwrapWith errors path (at fieldNames decoder) v\n member __.Raw (decoder: Decoder<_>) =\n unwrapWith errors path decoder v }\n let optional =\n { new IOptionalGetter with\n member __.Field (fieldName : string) (decoder : Decoder<_>) =\n unwrapWith errors path (optional fieldName decoder) v\n member __.At (fieldNames : string list) (decoder : Decoder<_>) =\n unwrapWith errors path (optionalAt fieldNames decoder) v\n member __.Raw (decoder: Decoder<_>) =\n match decoder path v with\n | Ok v -> Some v\n | Error((_, reason) as error) ->\n match reason with\n | BadPrimitive(_,v)\n | BadPrimitiveExtra(_,v,_)\n | BadType(_,v) ->\n if Helpers.isNullValue v then None\n else errors.Add(error); Unchecked.defaultof<_>\n | BadField _\n | BadPath _ -> None\n | TooSmallArray _\n | FailMessage _\n | BadOneOf _ -> errors.Add(error); Unchecked.defaultof<_> }\n member __.Errors: _ list = Seq.toList errors\n interface IGetters with\n member __.Required = required\n member __.Optional = optional\n\n let object (builder: IGetters -> 'value) : Decoder<'value> =\n fun path v ->\n let getters = Getters(path, v)\n let result = builder getters\n match getters.Errors with\n | [] -> Ok result\n | fst::_ as errors ->\n if errors.Length > 1 then\n let errors = List.map errorToString errors\n (path, BadOneOf errors) |> Error\n else\n Error fst\n\n ///////////////////////\n // Tuples decoders ///\n ////////////////////\n\n let tuple2 (decoder1: Decoder<'T1>) (decoder2: Decoder<'T2>) : Decoder<'T1 * 'T2> =\n index 0 decoder1\n |> andThen (fun v1 ->\n index 1 decoder2\n |> andThen (fun v2 ->\n succeed (v1, v2)\n )\n )\n\n let tuple3 (decoder1: Decoder<'T1>)\n (decoder2: Decoder<'T2>)\n (decoder3: Decoder<'T3>) : Decoder<'T1 * 'T2 * 'T3> =\n index 0 decoder1\n |> andThen (fun v1 ->\n index 1 decoder2\n |> andThen (fun v2 ->\n index 2 decoder3\n |> andThen (fun v3 ->\n succeed (v1, v2, v3)\n )\n )\n )\n\n let tuple4 (decoder1: Decoder<'T1>)\n (decoder2: Decoder<'T2>)\n (decoder3: Decoder<'T3>)\n (decoder4: Decoder<'T4>) : Decoder<'T1 * 'T2 * 'T3 * 'T4> =\n index 0 decoder1\n |> andThen (fun v1 ->\n index 1 decoder2\n |> andThen (fun v2 ->\n index 2 decoder3\n |> andThen (fun v3 ->\n index 3 decoder4\n |> andThen (fun v4 ->\n succeed (v1, v2, v3, v4)\n )\n )\n )\n )\n\n let tuple5 (decoder1: Decoder<'T1>)\n (decoder2: Decoder<'T2>)\n (decoder3: Decoder<'T3>)\n (decoder4: Decoder<'T4>)\n (decoder5: Decoder<'T5>) : Decoder<'T1 * 'T2 * 'T3 * 'T4 * 'T5> =\n index 0 decoder1\n |> andThen (fun v1 ->\n index 1 decoder2\n |> andThen (fun v2 ->\n index 2 decoder3\n |> andThen (fun v3 ->\n index 3 decoder4\n |> andThen (fun v4 ->\n index 4 decoder5\n |> andThen (fun v5 ->\n succeed (v1, v2, v3, v4, v5)\n )\n )\n )\n )\n )\n\n let tuple6 (decoder1: Decoder<'T1>)\n (decoder2: Decoder<'T2>)\n (decoder3: Decoder<'T3>)\n (decoder4: Decoder<'T4>)\n (decoder5: Decoder<'T5>)\n (decoder6: Decoder<'T6>) : Decoder<'T1 * 'T2 * 'T3 * 'T4 * 'T5 * 'T6> =\n index 0 decoder1\n |> andThen (fun v1 ->\n index 1 decoder2\n |> andThen (fun v2 ->\n index 2 decoder3\n |> andThen (fun v3 ->\n index 3 decoder4\n |> andThen (fun v4 ->\n index 4 decoder5\n |> andThen (fun v5 ->\n index 5 decoder6\n |> andThen (fun v6 ->\n succeed (v1, v2, v3, v4, v5, v6)\n )\n )\n )\n )\n )\n )\n\n let tuple7 (decoder1: Decoder<'T1>)\n (decoder2: Decoder<'T2>)\n (decoder3: Decoder<'T3>)\n (decoder4: Decoder<'T4>)\n (decoder5: Decoder<'T5>)\n (decoder6: Decoder<'T6>)\n (decoder7: Decoder<'T7>) : Decoder<'T1 * 'T2 * 'T3 * 'T4 * 'T5 * 'T6 * 'T7> =\n index 0 decoder1\n |> andThen (fun v1 ->\n index 1 decoder2\n |> andThen (fun v2 ->\n index 2 decoder3\n |> andThen (fun v3 ->\n index 3 decoder4\n |> andThen (fun v4 ->\n index 4 decoder5\n |> andThen (fun v5 ->\n index 5 decoder6\n |> andThen (fun v6 ->\n index 6 decoder7\n |> andThen (fun v7 ->\n succeed (v1, v2, v3, v4, v5, v6, v7)\n )\n )\n )\n )\n )\n )\n )\n\n let tuple8 (decoder1: Decoder<'T1>)\n (decoder2: Decoder<'T2>)\n (decoder3: Decoder<'T3>)\n (decoder4: Decoder<'T4>)\n (decoder5: Decoder<'T5>)\n (decoder6: Decoder<'T6>)\n (decoder7: Decoder<'T7>)\n (decoder8: Decoder<'T8>) : Decoder<'T1 * 'T2 * 'T3 * 'T4 * 'T5 * 'T6 * 'T7 * 'T8> =\n index 0 decoder1\n |> andThen (fun v1 ->\n index 1 decoder2\n |> andThen (fun v2 ->\n index 2 decoder3\n |> andThen (fun v3 ->\n index 3 decoder4\n |> andThen (fun v4 ->\n index 4 decoder5\n |> andThen (fun v5 ->\n index 5 decoder6\n |> andThen (fun v6 ->\n index 6 decoder7\n |> andThen (fun v7 ->\n index 7 decoder8\n |> andThen (fun v8 ->\n succeed (v1, v2, v3, v4, v5, v6, v7, v8)\n )\n )\n )\n )\n )\n )\n )\n )\n\n ////////////\n // Enum ///\n /////////\n\n #if !FABLE_REPL_LIB\n module Enum =\n\n let inline byte<'TEnum when 'TEnum : enum> : Decoder<'TEnum> =\n byte\n |> andThen (fun value ->\n LanguagePrimitives.EnumOfValue value\n |> succeed\n )\n\n let inline sbyte<'TEnum when 'TEnum : enum> : Decoder<'TEnum> =\n sbyte\n |> andThen (fun value ->\n LanguagePrimitives.EnumOfValue value\n |> succeed\n )\n\n let inline int16<'TEnum when 'TEnum : enum> : Decoder<'TEnum> =\n int16\n |> andThen (fun value ->\n LanguagePrimitives.EnumOfValue value\n |> succeed\n )\n\n let inline uint16<'TEnum when 'TEnum : enum> : Decoder<'TEnum> =\n uint16\n |> andThen (fun value ->\n LanguagePrimitives.EnumOfValue value\n |> succeed\n )\n\n let inline int<'TEnum when 'TEnum : enum> : Decoder<'TEnum> =\n int\n |> andThen (fun value ->\n LanguagePrimitives.EnumOfValue value\n |> succeed\n )\n\n let inline uint32<'TEnum when 'TEnum : enum> : Decoder<'TEnum> =\n uint32\n |> andThen (fun value ->\n LanguagePrimitives.EnumOfValue value\n |> succeed\n )\n #endif\n\n //////////////////\n // Reflection ///\n ////////////////\n\n open FSharp.Reflection\n\n // As generics are erased by Fable, let's just do an unsafe cast for performance\n let inline boxDecoder (d: Decoder<'T>): BoxedDecoder =\n !!d // d >> Result.map box\n\n let inline unboxDecoder (d: BoxedDecoder): Decoder<'T> =\n !!d // d >> Result.map unbox\n\n // This is used to force Fable use a generic comparer for map keys\n let private toMap<'key, 'value when 'key: comparison> (xs: ('key*'value) seq) = Map.ofSeq xs\n let private toSet<'key when 'key: comparison> (xs: 'key seq) = Set.ofSeq xs\n\n let private autoObject (decoderInfos: (string * BoxedDecoder)[]) (path : string) (value: JsonValue) =\n if not (Helpers.isObject value) then\n (path, BadPrimitive (\"an object\", value)) |> Error\n else\n (decoderInfos, Ok []) ||> Array.foldBack (fun (name, decoder) acc ->\n match acc with\n | Error _ -> acc\n | Ok result ->\n Helpers.getField name value\n |> decoder (path + \".\" + name)\n |> Result.map (fun v -> v::result))\n\n let inline private enumDecoder<'UnderlineType when 'UnderlineType : equality>\n (decoder : Decoder<'UnderlineType>)\n (toString : 'UnderlineType -> string)\n (t: System.Type) =\n\n fun path value ->\n match decoder path value with\n | Ok enumValue ->\n System.Enum.GetValues(t)\n |> Seq.cast<'UnderlineType>\n |> Seq.contains enumValue\n |> function\n | true ->\n System.Enum.Parse(t, toString enumValue)\n |> Ok\n | false ->\n (path, BadPrimitiveExtra(t.FullName, value, \"Unkown value provided for the enum\"))\n |> Error\n | Error msg ->\n Error msg\n\n let private autoObject2 (keyDecoder: BoxedDecoder) (valueDecoder: BoxedDecoder) (path : string) (value: JsonValue) =\n if not (Helpers.isObject value) then\n (path, BadPrimitive (\"an object\", value)) |> Error\n else\n (Ok [], Helpers.objectKeys(value)) ||> Seq.fold (fun acc name ->\n match acc with\n | Error _ -> acc\n | Ok acc ->\n match keyDecoder path name with\n | Error er -> Error er\n | Ok k ->\n Helpers.getField name value\n |> valueDecoder (path + \".\" + name)\n |> function\n | Error er -> Error er\n | Ok v -> (k,v)::acc |> Ok)\n\n let private mixedArray msg (decoders: BoxedDecoder[]) (path: string) (values: JsonValue[]): Result =\n if decoders.Length <> values.Length then\n (path, sprintf \"Expected %i %s but got %i\" decoders.Length msg values.Length\n |> FailMessage) |> Error\n else\n (values, decoders, Ok [])\n |||> Array.foldBack2 (fun value decoder acc ->\n match acc with\n | Error _ -> acc\n | Ok result -> decoder path value |> Result.map (fun v -> v::result))\n\n let rec private makeUnion extra caseStrategy t name (path : string) (values: JsonValue[]) =\n let uci =\n FSharpType.GetUnionCases(t, allowAccessToPrivateRepresentation=true)\n |> Array.tryFind (fun x -> x.Name = name)\n match uci with\n | None -> (path, FailMessage(\"Cannot find case \" + name + \" in \" + t.FullName)) |> Error\n | Some uci ->\n if values.Length = 0 then\n FSharpValue.MakeUnion(uci, [||], allowAccessToPrivateRepresentation=true) |> Ok\n else\n let decoders = uci.GetFields() |> Array.map (fun fi -> autoDecoder extra caseStrategy false fi.PropertyType)\n mixedArray \"union fields\" decoders path values\n |> Result.map (fun values -> FSharpValue.MakeUnion(uci, List.toArray values, allowAccessToPrivateRepresentation=true))\n\n and private autoDecodeRecordsAndUnions extra (caseStrategy : CaseStrategy) (isOptional : bool) (t: System.Type) : BoxedDecoder =\n // Add the decoder to extra in case one of the fields is recursive\n let decoderRef = ref Unchecked.defaultof<_>\n let extra = extra |> Map.add t.FullName decoderRef\n let decoder =\n if FSharpType.IsRecord(t, allowAccessToPrivateRepresentation=true) then\n let decoders =\n FSharpType.GetRecordFields(t, allowAccessToPrivateRepresentation=true)\n |> Array.map (fun fi ->\n let name = Util.Casing.convert caseStrategy fi.Name\n name, autoDecoder extra caseStrategy false fi.PropertyType)\n fun path value ->\n autoObject decoders path value\n |> Result.map (fun xs -> FSharpValue.MakeRecord(t, List.toArray xs, allowAccessToPrivateRepresentation=true))\n\n elif FSharpType.IsUnion(t, allowAccessToPrivateRepresentation=true) then\n fun path (value: JsonValue) ->\n if Helpers.isString(value) then\n let name = Helpers.asString value\n makeUnion extra caseStrategy t name path [||]\n elif Helpers.isArray(value) then\n let values = Helpers.asArray value\n let name = Helpers.asString values.[0]\n makeUnion extra caseStrategy t name path values.[1..]\n else (path, BadPrimitive(\"a string or array\", value)) |> Error\n\n else\n if isOptional then\n // The error will only happen at runtime if the value is not null\n // See https://github.com/MangelMaxime/Thoth/pull/84#issuecomment-444837773\n boxDecoder(fun path value -> Error(path, BadType(\"an extra coder for \" + t.FullName, value)))\n else\n // Don't use failwithf here, for some reason F#/Fable compiles it as a function\n // when the return type is a function too, so it doesn't fail immediately\n sprintf \"Cannot generate auto decoder for %s. Please pass an extra decoder.\" t.FullName |> failwith\n decoderRef := decoder\n decoder\n\n and private autoDecoder (extra: Map>) caseStrategy (isOptional : bool) (t: System.Type) : BoxedDecoder =\n let fullname = t.FullName\n match Map.tryFind fullname extra with\n | Some decoderRef -> fun path value -> decoderRef.contents path value\n | None ->\n if t.IsArray then\n let decoder = t.GetElementType() |> autoDecoder extra caseStrategy false\n array decoder |> boxDecoder\n elif t.IsEnum then\n let enumType = System.Enum.GetUnderlyingType(t).FullName\n if enumType = typeof.FullName then\n enumDecoder sbyte Operators.string t |> boxDecoder\n elif enumType = typeof.FullName then\n enumDecoder byte Operators.string t |> boxDecoder\n elif enumType = typeof.FullName then\n enumDecoder int16 Operators.string t |> boxDecoder\n elif enumType = typeof.FullName then\n enumDecoder uint16 Operators.string t |> boxDecoder\n elif enumType = typeof.FullName then\n enumDecoder int Operators.string t |> boxDecoder\n elif enumType = typeof.FullName then\n enumDecoder uint32 Operators.string t |> boxDecoder\n else\n failwithf\n \"\"\"Cannot generate auto decoder for %s.\nThoth.Json.Net only support the folluwing enum types:\n- sbyte\n- byte\n- int16\n- uint16\n- int\n- uint32\nIf you can't use one of these types, please pass an extra decoder.\n \"\"\" t.FullName\n elif t.IsGenericType then\n if FSharpType.IsTuple(t) then\n let decoders = FSharpType.GetTupleElements(t) |> Array.map (autoDecoder extra caseStrategy false)\n fun path value ->\n if Helpers.isArray value then\n mixedArray \"tuple elements\" decoders path (Helpers.asArray value)\n |> Result.map (fun xs -> FSharpValue.MakeTuple(List.toArray xs, t))\n else (path, BadPrimitive (\"an array\", value)) |> Error\n else\n let fullname = t.GetGenericTypeDefinition().FullName\n if fullname = typedefof.FullName then\n t.GenericTypeArguments.[0] |> (autoDecoder extra caseStrategy true) |> option |> boxDecoder\n elif fullname = typedefof.FullName then\n t.GenericTypeArguments.[0] |> (autoDecoder extra caseStrategy false) |> list |> boxDecoder\n // Disable seq support because I don't know how to implement it on Thoth.Json.Net side\n // elif fullname = typedefof.FullName then\n // t.GenericTypeArguments.[0] |> (autoDecoder extra caseStrategy false) |> seq |> boxDecoder\n elif fullname = typedefof< Map >.FullName then\n let keyDecoder = t.GenericTypeArguments.[0] |> autoDecoder extra caseStrategy false\n let valueDecoder = t.GenericTypeArguments.[1] |> autoDecoder extra caseStrategy false\n oneOf [\n autoObject2 keyDecoder valueDecoder\n list (tuple2 keyDecoder valueDecoder)\n ] |> map (fun ar -> toMap (unbox ar) |> box)\n elif fullname = typedefof< Set >.FullName then\n let decoder = t.GenericTypeArguments.[0] |> autoDecoder extra caseStrategy false\n fun path value ->\n match array decoder path value with\n | Error er -> Error er\n | Ok ar -> toSet (unbox ar) |> box |> Ok\n else\n autoDecodeRecordsAndUnions extra caseStrategy isOptional t\n else\n if fullname = typeof.FullName then\n boxDecoder bool\n elif fullname = typedefof.FullName then\n boxDecoder unit\n elif fullname = typeof.FullName then\n boxDecoder string\n elif fullname = typeof.FullName then\n boxDecoder sbyte\n elif fullname = typeof.FullName then\n boxDecoder byte\n elif fullname = typeof.FullName then\n boxDecoder int16\n elif fullname = typeof.FullName then\n boxDecoder uint16\n elif fullname = typeof.FullName then\n boxDecoder int\n elif fullname = typeof.FullName then\n boxDecoder uint32\n elif fullname = typeof.FullName then\n boxDecoder float\n elif fullname = typeof.FullName then\n boxDecoder float32\n // These number types require extra libraries in Fable. To prevent penalizing\n // all users, extra decoders (withInt64, etc) must be passed when they're needed.\n\n // elif fullname = typeof.FullName then\n // boxDecoder int64\n // elif fullname = typeof.FullName then\n // boxDecoder uint64\n // elif fullname = typeof.FullName then\n // boxDecoder bigint\n // elif fullname = typeof.FullName then\n // boxDecoder decimal\n elif fullname = typeof.FullName then\n boxDecoder datetime\n elif fullname = typeof.FullName then\n boxDecoder datetimeOffset\n elif fullname = typeof.FullName then\n boxDecoder timespan\n elif fullname = typeof.FullName then\n boxDecoder guid\n elif fullname = typeof.FullName then\n fun _ v -> Ok v\n else autoDecodeRecordsAndUnions extra caseStrategy isOptional t\n\n let private makeExtra (extra: ExtraCoders option) =\n match extra with\n | None -> Map.empty\n | Some e -> Map.map (fun _ (_,dec) -> ref dec) e.Coders\n\n type Auto =\n static member generateDecoderCached<'T>(?caseStrategy : CaseStrategy, ?extra: ExtraCoders, [] ?resolver: ITypeResolver<'T>): Decoder<'T> =\n let t = Util.resolveType resolver\n let caseStrategy = defaultArg caseStrategy PascalCase\n\n let key =\n t.FullName\n |> (+) (Operators.string caseStrategy)\n |> (+) (extra |> Option.map (fun e -> e.Hash) |> Option.defaultValue \"\")\n\n Util.CachedDecoders.GetOrAdd(key, fun _ ->\n autoDecoder (makeExtra extra) caseStrategy false t) |> unboxDecoder\n\n static member generateDecoder<'T>(?caseStrategy : CaseStrategy, ?extra: ExtraCoders, [] ?resolver: ITypeResolver<'T>): Decoder<'T> =\n let caseStrategy = defaultArg caseStrategy PascalCase\n Util.resolveType resolver\n |> autoDecoder (makeExtra extra) caseStrategy false |> unboxDecoder\n\n static member fromString<'T>(json: string, ?caseStrategy : CaseStrategy, ?extra: ExtraCoders, [] ?resolver: ITypeResolver<'T>): Result<'T, string> =\n let decoder = Auto.generateDecoder(?caseStrategy=caseStrategy, ?extra=extra, ?resolver=resolver)\n fromString decoder json\n\n static member unsafeFromString<'T>(json: string, ?caseStrategy : CaseStrategy, ?extra: ExtraCoders, [] ?resolver: ITypeResolver<'T>): 'T =\n let decoder = Auto.generateDecoder(?caseStrategy=caseStrategy, ?extra=extra, ?resolver=resolver)\n match fromString decoder json with\n | Ok x -> x\n | Error msg -> failwith msg\n","namespace Thoth.Json\nopen System.Text.RegularExpressions\n\n[]\nmodule Encode =\n\n open System.Collections.Generic\n open System.Globalization\n open Fable.Core\n open Fable.Core.JsInterop\n\n []\n let private arrayFrom(x: JsonValue seq): JsonValue = jsNative\n\n ///**Description**\n /// Encode a string\n ///\n ///**Parameters**\n /// * `value` - parameter of type `string`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let inline string (value : string) : JsonValue =\n box value\n\n ///**Description**\n /// Encode a GUID\n ///\n ///**Parameters**\n /// * `value` - parameter of type `System.Guid`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let guid (value : System.Guid) : JsonValue =\n box (value.ToString())\n\n ///**Description**\n /// Encode a Float. `Infinity` and `NaN` are encoded as `null`.\n ///\n ///**Parameters**\n /// * `value` - parameter of type `float`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let inline float (value : float) : JsonValue =\n box value\n\n let inline float32 (value : float32) : JsonValue =\n box value\n\n ///**Description**\n /// Encode a Decimal.\n ///\n ///**Parameters**\n /// * `value` - parameter of type `decimal`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let decimal (value : decimal) : JsonValue =\n value.ToString() |> string\n\n ///**Description**\n /// Encode null\n ///\n ///**Parameters**\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let nil : JsonValue =\n box null\n\n ///**Description**\n /// Encode a bool\n ///**Parameters**\n /// * `value` - parameter of type `bool`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let inline bool (value : bool) : JsonValue =\n box value\n\n ///**Description**\n /// Encode an object\n ///\n ///**Parameters**\n /// * `values` - parameter of type `(string * Value) list`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let object (values : (string * JsonValue) seq) : JsonValue =\n let o = obj()\n for (key, value) in values do\n o?(key) <- value\n box o\n\n ///**Description**\n /// Encode an array\n ///\n ///**Parameters**\n /// * `values` - parameter of type `Value array`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let inline array (values : JsonValue array) : JsonValue =\n box values\n\n ///**Description**\n /// Encode a list\n ///**Parameters**\n /// * `values` - parameter of type `Value list`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let list (values : JsonValue list) : JsonValue =\n // Don't use List.toArray as it may create a typed array\n arrayFrom values\n\n let seq (values : JsonValue seq) : JsonValue =\n arrayFrom values\n\n ///**Description**\n /// Encode a dictionary\n ///**Parameters**\n /// * `values` - parameter of type `Map`\n ///\n ///**Output Type**\n /// * `Value`\n ///\n ///**Exceptions**\n ///\n let dict (values : Map) : JsonValue =\n values\n |> Map.toList\n |> object\n\n let bigint (value : bigint) : JsonValue =\n box (value.ToString())\n\n let datetimeOffset (value : System.DateTimeOffset) : JsonValue =\n value.ToString(\"O\", CultureInfo.InvariantCulture) |> string\n\n /// **Description**\n /// Encode a timespan\n /// **Parameters**\n /// * `value` - parameter of type `System.TimeSpan`\n ///\n /// **Output Type**\n /// * `Value`\n ///\n /// **Exceptions**\n ///\n let timespan (value : System.TimeSpan) : JsonValue =\n value.ToString() |> string\n\n let sbyte (value : sbyte) : JsonValue =\n box (value.ToString(CultureInfo.InvariantCulture))\n\n let byte (value : byte) : JsonValue =\n box (value.ToString(CultureInfo.InvariantCulture))\n\n let int16 (value : int16) : JsonValue =\n box (value.ToString(CultureInfo.InvariantCulture))\n\n let uint16 (value : uint16) : JsonValue =\n box (value.ToString(CultureInfo.InvariantCulture))\n\n let inline int (value : int) : JsonValue =\n box value\n\n let inline uint32 (value : uint32) : JsonValue =\n box value\n\n let int64 (value : int64) : JsonValue =\n box (value.ToString(CultureInfo.InvariantCulture))\n\n let uint64 (value : uint64) : JsonValue =\n box (value.ToString(CultureInfo.InvariantCulture))\n\n let unit () : JsonValue =\n box null\n\n let tuple2\n (enc1 : Encoder<'T1>)\n (enc2 : Encoder<'T2>)\n (v1, v2) : JsonValue =\n box [| enc1 v1\n enc2 v2 |]\n\n let tuple3\n (enc1 : Encoder<'T1>)\n (enc2 : Encoder<'T2>)\n (enc3 : Encoder<'T3>)\n (v1, v2, v3) : JsonValue =\n box [| enc1 v1\n enc2 v2\n enc3 v3 |]\n\n let tuple4\n (enc1 : Encoder<'T1>)\n (enc2 : Encoder<'T2>)\n (enc3 : Encoder<'T3>)\n (enc4 : Encoder<'T4>)\n (v1, v2, v3, v4) : JsonValue =\n box [| enc1 v1\n enc2 v2\n enc3 v3\n enc4 v4 |]\n\n let tuple5\n (enc1 : Encoder<'T1>)\n (enc2 : Encoder<'T2>)\n (enc3 : Encoder<'T3>)\n (enc4 : Encoder<'T4>)\n (enc5 : Encoder<'T5>)\n (v1, v2, v3, v4, v5) : JsonValue =\n box [| enc1 v1\n enc2 v2\n enc3 v3\n enc4 v4\n enc5 v5 |]\n\n let tuple6\n (enc1 : Encoder<'T1>)\n (enc2 : Encoder<'T2>)\n (enc3 : Encoder<'T3>)\n (enc4 : Encoder<'T4>)\n (enc5 : Encoder<'T5>)\n (enc6 : Encoder<'T6>)\n (v1, v2, v3, v4, v5, v6) : JsonValue =\n box [| enc1 v1\n enc2 v2\n enc3 v3\n enc4 v4\n enc5 v5\n enc6 v6 |]\n\n let tuple7\n (enc1 : Encoder<'T1>)\n (enc2 : Encoder<'T2>)\n (enc3 : Encoder<'T3>)\n (enc4 : Encoder<'T4>)\n (enc5 : Encoder<'T5>)\n (enc6 : Encoder<'T6>)\n (enc7 : Encoder<'T7>)\n (v1, v2, v3, v4, v5, v6, v7) : JsonValue =\n box [| enc1 v1\n enc2 v2\n enc3 v3\n enc4 v4\n enc5 v5\n enc6 v6\n enc7 v7 |]\n\n let tuple8\n (enc1 : Encoder<'T1>)\n (enc2 : Encoder<'T2>)\n (enc3 : Encoder<'T3>)\n (enc4 : Encoder<'T4>)\n (enc5 : Encoder<'T5>)\n (enc6 : Encoder<'T6>)\n (enc7 : Encoder<'T7>)\n (enc8 : Encoder<'T8>)\n (v1, v2, v3, v4, v5, v6, v7, v8) : JsonValue =\n box [| enc1 v1\n enc2 v2\n enc3 v3\n enc4 v4\n enc5 v5\n enc6 v6\n enc7 v7\n enc8 v8 |]\n\n\n ////////////\n // Enum ///\n /////////\n\n module Enum =\n\n let byte<'TEnum when 'TEnum : enum> (value : 'TEnum) : JsonValue =\n LanguagePrimitives.EnumToValue value\n |> byte\n\n let sbyte<'TEnum when 'TEnum : enum> (value : 'TEnum) : JsonValue =\n LanguagePrimitives.EnumToValue value\n |> sbyte\n\n let int16<'TEnum when 'TEnum : enum> (value : 'TEnum) : JsonValue =\n LanguagePrimitives.EnumToValue value\n |> int16\n\n let uint16<'TEnum when 'TEnum : enum> (value : 'TEnum) : JsonValue =\n LanguagePrimitives.EnumToValue value\n |> uint16\n\n let int<'TEnum when 'TEnum : enum> (value : 'TEnum) : JsonValue =\n LanguagePrimitives.EnumToValue value\n |> int\n\n let uint32<'TEnum when 'TEnum : enum> (value : 'TEnum) : JsonValue =\n LanguagePrimitives.EnumToValue value\n |> uint32\n\n /// **Description**\n ///\n /// The DateTime is always encoded using UTC representation\n ///\n /// **Parameters**\n /// * `value` - parameter of type `System.DateTime`\n ///\n /// **Output Type**\n /// * `Value`\n ///\n /// **Exceptions**\n ///\n let datetime (value : System.DateTime) : JsonValue =\n value.ToString(\"O\", CultureInfo.InvariantCulture) |> string\n\n ///**Description**\n /// Convert a `Value` into a prettified string.\n ///**Parameters**\n /// * `space` - parameter of type `int` - Amount of indentation\n /// * `value` - parameter of type `obj` - Value to convert\n ///\n ///**Output Type**\n /// * `string`\n ///\n ///**Exceptions**\n ///\n let toString (space: int) (value: JsonValue) : string =\n JS.JSON.stringify(value, !!null, space)\n\n ///**Description**\n /// Encode an option\n ///**Parameters**\n /// * `encoder` - parameter of type `'a -> Value`\n ///\n ///**Output Type**\n /// * `'a option -> Value`\n ///\n ///**Exceptions**\n ///\n let option (encoder : 'a -> JsonValue) =\n Option.map encoder >> Option.defaultWith (fun _ -> nil)\n\n //////////////////\n // Reflection ///\n ////////////////\n\n open FSharp.Reflection\n open Fable.Core.DynamicExtensions\n\n // As generics are erased by Fable, let's just do an unsafe cast for performance\n let inline boxEncoder (d: Encoder<'T>): BoxedEncoder =\n !!d\n\n let inline unboxEncoder (d: BoxedEncoder): Encoder<'T> =\n !!d\n\n let rec private autoEncodeRecordsAndUnions extra (caseStrategy : CaseStrategy) (skipNullField : bool) (t: System.Type) : BoxedEncoder =\n // Add the encoder to extra in case one of the fields is recursive\n let encoderRef = ref Unchecked.defaultof<_>\n let extra = extra |> Map.add t.FullName encoderRef\n let encoder =\n if FSharpType.IsRecord(t, allowAccessToPrivateRepresentation=true) then\n let setters =\n FSharpType.GetRecordFields(t, allowAccessToPrivateRepresentation=true)\n |> Array.map (fun fi ->\n let targetKey = Util.Casing.convert caseStrategy fi.Name\n let encode = autoEncoder extra caseStrategy skipNullField fi.PropertyType\n fun (source: obj) (target: JsonValue) ->\n let value = FSharpValue.GetRecordField(source, fi)\n if not skipNullField || (skipNullField && not (isNull value)) then // Discard null fields\n target.[targetKey] <- encode value\n target)\n fun (source: obj) ->\n (JsonValue(), setters) ||> Seq.fold (fun target set -> set source target)\n elif FSharpType.IsUnion(t, allowAccessToPrivateRepresentation=true) then\n fun (value: obj) ->\n let info, fields = FSharpValue.GetUnionFields(value, t, allowAccessToPrivateRepresentation=true)\n match fields.Length with\n | 0 -> string info.Name\n | len ->\n let fieldTypes = info.GetFields()\n let target = Array.zeroCreate (len + 1)\n target.[0] <- string info.Name\n for i = 1 to len do\n let encode = autoEncoder extra caseStrategy skipNullField fieldTypes.[i-1].PropertyType\n target.[i] <- encode fields.[i-1]\n array target\n else\n // Don't use failwithf here, for some reason F#/Fable compiles it as a function\n // when the return type is a function too, so it doesn't fail immediately\n sprintf \"Cannot generate auto encoder for %s. Please pass an extra encoder.\" t.FullName\n |> failwith\n encoderRef := encoder\n encoder\n\n and private autoEncoder (extra: Map>) caseStrategy (skipNullField : bool) (t: System.Type) : BoxedEncoder =\n let fullname = t.FullName\n match Map.tryFind fullname extra with\n | Some encoderRef -> fun v -> encoderRef.contents v\n | None ->\n if t.IsArray then\n let encoder = t.GetElementType() |> autoEncoder extra caseStrategy skipNullField\n fun (value: obj) ->\n value :?> obj seq |> Seq.map encoder |> seq\n elif t.IsEnum then\n let enumType = System.Enum.GetUnderlyingType(t).FullName\n if enumType = typeof.FullName then\n boxEncoder sbyte\n elif enumType = typeof.FullName then\n boxEncoder byte\n elif enumType = typeof.FullName then\n boxEncoder int16\n elif enumType = typeof.FullName then\n boxEncoder uint16\n elif enumType = typeof.FullName then\n boxEncoder int\n elif enumType = typeof.FullName then\n boxEncoder uint32\n else\n failwithf\n \"\"\"Cannot generate auto encoder for %s.\nThoth.Json.Net only support the folluwing enum types:\n- sbyte\n- byte\n- int16\n- uint16\n- int\n- uint32\nIf you can't use one of these types, please pass an extra encoder.\n \"\"\" t.FullName\n elif t.IsGenericType then\n if FSharpType.IsTuple(t) then\n let encoders =\n FSharpType.GetTupleElements(t)\n |> Array.map (autoEncoder extra caseStrategy skipNullField)\n fun (value: obj) ->\n FSharpValue.GetTupleFields(value)\n |> Seq.mapi (fun i x -> encoders.[i] x) |> seq\n else\n let fullname = t.GetGenericTypeDefinition().FullName\n if fullname = typedefof.FullName then\n // Evaluate lazily so we don't need to generate the encoder for null values\n let encoder = lazy\n t.GenericTypeArguments.[0]\n |> autoEncoder extra caseStrategy skipNullField\n |> option\n |> boxEncoder\n boxEncoder(fun (value: obj) ->\n if isNull value then nil\n else encoder.Value value)\n elif fullname = typedefof.FullName\n || fullname = typedefof>.FullName then\n // Disable seq support for now because I don't know how to implements to on Thoth.Json.Net\n // || fullname = typedefof.FullName then\n let encoder = t.GenericTypeArguments.[0] |> autoEncoder extra caseStrategy skipNullField\n fun (value: obj) ->\n value :?> obj seq |> Seq.map encoder |> seq\n elif fullname = typedefof< Map >.FullName then\n let keyType = t.GenericTypeArguments.[0]\n let valueEncoder = t.GenericTypeArguments.[1] |> autoEncoder extra caseStrategy skipNullField\n if keyType.FullName = typeof.FullName\n || keyType.FullName = typeof.FullName then\n fun value ->\n // Fable compiles Guids as strings so this works, but maybe we should make the conversion explicit\n // (see dotnet version) in case Fable implementation of Guids change\n (JsonValue(), value :?> Map)\n ||> Seq.fold (fun target (KeyValue(k,v)) ->\n target.[k] <- valueEncoder v\n target)\n else\n let keyEncoder = keyType |> autoEncoder extra caseStrategy skipNullField\n fun value ->\n value :?> Map |> Seq.map (fun (KeyValue(k,v)) ->\n array [|keyEncoder k; valueEncoder v|]) |> seq\n else\n autoEncodeRecordsAndUnions extra caseStrategy skipNullField t\n else\n if fullname = typeof.FullName then\n boxEncoder bool\n elif fullname = typeof.FullName then\n boxEncoder unit\n elif fullname = typeof.FullName then\n boxEncoder string\n elif fullname = typeof.FullName then\n boxEncoder sbyte\n elif fullname = typeof.FullName then\n boxEncoder byte\n elif fullname = typeof.FullName then\n boxEncoder int16\n elif fullname = typeof.FullName then\n boxEncoder uint16\n elif fullname = typeof.FullName then\n boxEncoder int\n elif fullname = typeof.FullName then\n boxEncoder uint32\n elif fullname = typeof.FullName then\n boxEncoder float\n elif fullname = typeof.FullName then\n boxEncoder float32\n // These number types require extra libraries in Fable. To prevent penalizing\n // all users, extra encoders (withInt64, etc) must be passed when they're needed.\n\n // elif fullname = typeof.FullName then\n // boxEncoder int64\n // elif fullname = typeof.FullName then\n // boxEncoder uint64\n // elif fullname = typeof.FullName then\n // boxEncoder bigint\n // elif fullname = typeof.FullName then\n // boxEncoder decimal\n elif fullname = typeof.FullName then\n boxEncoder datetime\n elif fullname = typeof.FullName then\n boxEncoder datetimeOffset\n elif fullname = typeof.FullName then\n boxEncoder timespan\n elif fullname = typeof.FullName then\n boxEncoder guid\n elif fullname = typeof.FullName then\n boxEncoder id\n else\n autoEncodeRecordsAndUnions extra caseStrategy skipNullField t\n\n let private makeExtra (extra: ExtraCoders option) =\n match extra with\n | None -> Map.empty\n | Some e -> Map.map (fun _ (enc,_) -> ref enc) e.Coders\n\n type Auto =\n static member generateEncoderCached<'T>(?caseStrategy : CaseStrategy, ?extra: ExtraCoders, ?skipNullField: bool, [] ?resolver: ITypeResolver<'T>): Encoder<'T> =\n let t = Util.resolveType resolver\n let caseStrategy = defaultArg caseStrategy PascalCase\n let skipNullField = defaultArg skipNullField true\n\n let key =\n t.FullName\n |> (+) (Operators.string caseStrategy)\n |> (+) (extra |> Option.map (fun e -> e.Hash) |> Option.defaultValue \"\")\n\n Util.CachedEncoders.GetOrAdd(key , fun _ ->\n autoEncoder (makeExtra extra) caseStrategy skipNullField t) |> unboxEncoder\n\n static member generateEncoder<'T>(?caseStrategy : CaseStrategy, ?extra: ExtraCoders, ?skipNullField: bool, [] ?resolver: ITypeResolver<'T>): Encoder<'T> =\n let caseStrategy = defaultArg caseStrategy PascalCase\n let skipNullField = defaultArg skipNullField true\n Util.resolveType resolver\n |> autoEncoder (makeExtra extra) caseStrategy skipNullField |> unboxEncoder\n\n static member toString(space : int, value : 'T, ?caseStrategy : CaseStrategy, ?extra: ExtraCoders, ?skipNullField: bool, [] ?resolver: ITypeResolver<'T>) : string =\n let encoder = Auto.generateEncoder(?caseStrategy=caseStrategy, ?extra=extra, ?skipNullField=skipNullField, ?resolver=resolver)\n encoder value |> toString space\n\n ///**Description**\n /// Convert a `Value` into a prettified string.\n ///**Parameters**\n /// * `space` - parameter of type `int` - Amount of indentation\n /// * `value` - parameter of type `obj` - Value to convert\n ///\n ///**Output Type**\n /// * `string`\n ///\n ///**Exceptions**\n ///\n []\n let encode (space: int) (value: JsonValue) : string = toString space value\n","namespace Feliz\r\n\r\nopen Fable.Core\r\nopen Fable.Core.JsInterop\r\nopen Fable.React\r\nopen Feliz.ReactApi\r\n\r\n[]\r\nmodule Interop =\r\n let reactApi : IReactApi = importDefault \"react\"\r\n let reactElement (name: string) (props: 'a) : ReactElement = import \"createElement\" \"react\"\r\n let mkAttr (key: string) (value: obj) : IReactProperty = unbox (key, value)\r\n let mkStyle (key: string) (value: obj) : IStyleAttribute = unbox (key, value)\r\n let inline reactElementWithChild (name: string) (child: 'a) =\r\n reactElement name (createObj [ \"children\" ==> [| child |] ])\r\n let inline reactElementWithChildren (name: string) (children: #seq) =\r\n reactElement name (createObj [ \"children\" ==> reactApi.Children.toArray (Array.ofSeq children) ])\r\n let inline createElement name (properties: IReactProperty list) : ReactElement =\r\n reactElement name (createObj !!properties)\r\n","\n[]\nmodule Promise\n\n#nowarn \"1182\" // Unused values\n\nopen System\nopen Fable.Core\nopen Fable.Core.JsInterop\n\nlet inline private (!!) (x:obj): 'T = unbox x\n\n[]\n/// The promise function receives two other function parameters: success and fail\nlet create (f: ('T->unit)->(Exception->unit)->unit): JS.Promise<'T> = jsNative\n\n[ setTimeout(resolve, $0))\")>]\nlet sleep (ms: int): JS.Promise = jsNative\n\n[]\nlet lift<'T> (a: 'T): JS.Promise<'T> = jsNative\n\n/// Creates promise (in rejected state) with supplied reason.\nlet reject<'T> reason : JS.Promise<'T> = JS.Promise.reject<'T> reason\n\n[]\nlet bind (a: 'T->JS.Promise<'R>) (pr: JS.Promise<'T>): JS.Promise<'R> = jsNative\n\n[]\nlet map (a: 'T->'R) (pr: JS.Promise<'T>): JS.Promise<'R> = jsNative\n\n[]\nlet iter (a: 'T->unit) (pr: JS.Promise<'T>): unit = jsNative\n\n[]\n/// This version of `catch` fakes a function returning just 'T, as opposed to `Promise<'T>`. If you need to return `Promise<'T>`, use `catchBind`.\nlet catch (fail: Exception->'T) (pr: JS.Promise<'T>): JS.Promise<'T> = jsNative\n\n[]\n/// This is a version of `catch` that fakes a function returning Promise<'T> as opposed to just 'T. If you need to return just 'T, use `catch`.\nlet catchBind (fail: Exception->JS.Promise<'T>) (pr: JS.Promise<'T>): JS.Promise<'T> = jsNative\n\n[]\n/// Used to catch errors at the end of a promise chain.\nlet catchEnd (fail: Exception->unit) (pr: JS.Promise<'T>): unit = jsNative\n\n[]\n/// A combination of `map/bind` and `catch/catchBind`, this function applies the `success` continuation when the input promise resolves successfully, or `fail` continuation when the input promise fails. Both continuations may return either naked value `'R` or another promise `Promise<'R>`. Use the erased-cast operator `!^` to cast values when returning, for example:\n/// ```\n/// somePromise |> Promise.either (fun x -> !^(string x)) (fun err -> ^!(Promise.lift err.Message))\n/// ```\nlet either (success: 'T->U2<'R, JS.Promise<'R>>) (fail: 'E->U2<'R, JS.Promise<'R>>) (pr: JS.Promise<'T>): JS.Promise<'R> = jsNative\n\n[]\nlet eitherEnd (success: 'T->unit) (fail: 'E->unit) (pr: JS.Promise<'T>): unit = jsNative\n\n[]\nlet start (pr: JS.Promise<'T>): unit = jsNative\n\n[]\nlet tryStart (fail: Exception->unit) (pr: JS.Promise<'T>): unit = jsNative\n\n[]\nlet Parallel (pr: seq>): JS.Promise<'T[]> = jsNative\n\n[]\nlet all (pr: seq>): JS.Promise<'T[]> = jsNative\n\nlet result (a: JS.Promise<'A>): JS.Promise> =\n either (U2.Case1 << Ok) (U2.Case1 << Error) a\n\nlet mapResult (fn: 'A -> 'B) (a: JS.Promise>): JS.Promise> =\n a |> map (Result.map fn)\n\nlet bindResult (fn: 'A -> JS.Promise<'B>) (a: JS.Promise>): JS.Promise> =\n a |> bind (fun a ->\n match a with\n | Ok a ->\n result (fn a)\n | Error e ->\n lift (Error e))\n\nlet mapResultError (fn: 'B -> 'C) (a: JS.Promise>): JS.Promise> =\n a |> map (Result.mapError fn)\n\nlet tap (fn: 'A -> unit) (a: JS.Promise<'A>): JS.Promise<'A> =\n a |> map (fun x -> fn x; x)\n\ntype PromiseBuilder() =\n []\n member x.Bind(p: JS.Promise<'T>, f: 'T->JS.Promise<'R>): JS.Promise<'R> = jsNative\n\n [ $2)\")>]\n member x.Combine(p1: JS.Promise, p2: JS.Promise<'T>): JS.Promise<'T> = jsNative\n\n member x.For(seq: seq<'T>, body: 'T->JS.Promise): JS.Promise =\n // (lift (), seq)\n // ||> Seq.fold (fun p a ->\n // bind (fun () -> body a) p)\n let mutable p = lift ()\n for a in seq do\n p <- !!p?``then``(fun () -> body a)\n p\n\n []\n member x.For(p: JS.Promise<'T>, f: 'T->JS.Promise<'R>): JS.Promise<'R> = jsNative\n\n member x.While(guard, p): JS.Promise =\n if guard()\n then bind (fun () -> x.While(guard, p)) p\n else lift()\n\n []\n member x.Return(a: 'T): JS.Promise<'T> = jsNative\n\n []\n member x.ReturnFrom(p: JS.Promise<'T>): JS.Promise<'T> = jsNative\n\n []\n member x.Zero(): JS.Promise = jsNative\n\n member x.TryFinally(p: JS.Promise<'T>, compensation: unit->unit): JS.Promise<'T> =\n either (fun (x: 'T) -> compensation(); U2.Case1 x) (fun er -> compensation(); raise !!er) p\n\n []\n member x.TryWith(p: JS.Promise<'T>, catchHandler: Exception->JS.Promise<'T>): JS.Promise<'T> = jsNative\n\n member x.Delay(generator: unit->JS.Promise<'T>): JS.Promise<'T> =\n !!createObj[\n \"then\" ==> fun f1 f2 ->\n try generator()?``then``(f1,f2)\n with er ->\n if box f2 = null\n then !!JS.Promise.reject(er)\n else\n try !!JS.Promise.resolve(f2(er))\n with er -> !!JS.Promise.reject(er)\n \"catch\" ==> fun f ->\n try generator()?catch(f)\n with er ->\n try !!JS.Promise.resolve(f(er))\n with er -> !!JS.Promise.reject(er)\n ]\n\n member x.Run(p:JS.Promise<'T>): JS.Promise<'T> =\n create (fun success fail ->\n try\n let p : JS.Promise<'T> = !!JS.Promise.resolve(p)\n p?``then``(success, fail)\n with\n er -> fail(er)\n )\n\n member x.Using<'T, 'R when 'T :> IDisposable>(resource: 'T, binder: 'T->JS.Promise<'R>): JS.Promise<'R> =\n x.TryFinally(binder(resource), fun () -> resource.Dispose())\n\n [ $3(a,b))\")>]\n []\n member x.Merge(a: JS.Promise<'T1>, b: JS.Promise<'T2>, [] resultSelector : 'T1 -> 'T2 -> 'R): JS.Promise<'R> = jsNative\n","module Thoth.Fetch\n\nopen Fetch\nopen Fable.Core\nopen Fable.Core.JsInterop\nopen Thoth.Json\n\ntype FetchError =\n | PreparingRequestFailed of exn\n | DecodingFailed of string\n | FetchFailed of Response\n | NetworkError of exn\n\nmodule Helper =\n\n []\n type GlobalFetch =\n []\n static member fetch (req: RequestInfo, ?init: RequestInit): JS.Promise = jsNative\n\n let fetch (url: string) (init: RequestProperties list): JS.Promise =\n GlobalFetch.fetch (RequestInfo.Url url, requestProps init)\n\n let withContentTypeJson data headers =\n match data with\n | Some _ -> ContentType \"application/json\" :: headers\n | _ -> headers\n\n let encode data caseStrategy extra dataResolver =\n let encoder =\n Encode.Auto.generateEncoderCached (?caseStrategy = caseStrategy, ?extra = extra, ?resolver = dataResolver)\n\n data\n |> encoder\n |> Encode.toString 0\n\n let withBody data caseStrategy extra dataResolver properties =\n data\n |> Option.map (fun data ->\n encode data caseStrategy extra dataResolver\n |> (!^)\n |> Body\n |> fun body -> body :: properties)\n |> Option.defaultValue properties\n\n let withProperties custom properties =\n custom\n |> Option.map ((@) properties)\n |> Option.defaultValue properties\n\n let eitherUnit (responseResolver: ITypeResolver<'Response>) cont =\n if responseResolver.ResolveType().FullName = typedefof.FullName then Ok(unbox())\n else cont()\n\n let resolve (response: Response) caseStrategy extra (decoder: Decoder<'Response> option)\n (responseResolver: ITypeResolver<'Response> option) =\n\n let decoder =\n decoder\n |> Option.defaultValue\n (Decode.Auto.generateDecoderCached\n (?caseStrategy = caseStrategy, ?extra = extra, ?resolver = responseResolver))\n\n let decode body = Decode.fromString decoder body\n\n let eitherUnitOr = eitherUnit responseResolver.Value\n\n promise {\n let! result =\n if response.Ok then\n promise {\n let! body = response.text()\n return eitherUnitOr <| fun () ->\n match decode body with\n | Ok value -> Ok value\n | Error msg -> DecodingFailed msg |> Error\n }\n else\n FetchFailed response |> Error\n |> Promise.lift\n return result\n }\n\n let message error =\n match error with\n | PreparingRequestFailed exn ->\n \"[Thoth.Fetch] Request preparation failed:\\n\\n\" + exn.Message\n | DecodingFailed msg ->\n \"[Thoth.Fetch] Error while decoding the response:\\n\\n\" + msg\n | FetchFailed response ->\n \"[Thoth.Fetch] Request failed:\\n\\n\" + string response.Status + \" \" + response.StatusText + \" for URL \" + response.Url\n | NetworkError exn ->\n \"[Thoth.Fetch] A network error occured:\\n\\n\" + exn.Message\n\nopen Helper\n\ntype Fetch =\n\n /// **Description**\n ///\n /// Send a request to the specified resource and decodes the response.\n ///\n /// If fetch and decoding succeed, we return `Ok 'Response`.\n ///\n /// If we fail, we return `Error (FetchError)` containing an better explanation.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `httpMethod` - optional parameter of type `HttpMethod` - HttpMethod used for Request, defaults to **GET**\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise>`\n ///\n /// **Exceptions**\n ///\n static member tryFetchAs<'Data, 'Response> (url: string, ?decoder: Decoder<'Response>, ?data: 'Data,\n ?httpMethod: HttpMethod, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy,\n ?extra: ExtraCoders,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n try\n let properties =\n [ Method <| defaultArg httpMethod HttpMethod.GET\n requestHeaders (defaultArg headers [] |> withContentTypeJson data) ]\n |> withBody data caseStrategy extra dataResolver\n |> withProperties properties\n\n promise {\n let! response = fetch url properties\n return! resolve response caseStrategy extra decoder responseResolver\n }\n |> Promise.catch (NetworkError >> Error)\n\n with exn -> promise { return PreparingRequestFailed exn |> Error }\n\n /// **Description**\n ///\n /// Send a request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"` if data is provided.\n ///\n //// An exception will be thrown if fetch fails.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `httpMethod` - optional parameter of type `HttpMethod` - HttpMethod used, defaults to **GET**\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise<'Response>`\n ///\n /// **Exceptions**\n /// * `System.Exception` - Contains information explaining why the request failed\n ///\n static member fetchAs<'Data, 'Response> (url: string, ?decoder: Decoder<'Response>, ?data: 'Data,\n ?httpMethod: HttpMethod, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy, ?extra: ExtraCoders,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n promise {\n let! result = Fetch.tryFetchAs<'Data, 'Response>\n (url, ?decoder = decoder, ?httpMethod = httpMethod, ?data = data, ?properties = properties,\n ?headers = headers, ?caseStrategy = caseStrategy, ?extra = extra,\n ?responseResolver = responseResolver, ?dataResolver = dataResolver)\n let response =\n match result with\n | Ok response -> response\n | Error error -> failwith (message error)\n return response\n }\n\n /// **Description**\n ///\n /// Send a **GET** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"` if data is provided.\n ///\n //// An exception will be thrown if the request fails.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise<'Response>`\n ///\n /// **Exceptions**\n /// * `System.Exception` - Contains information explaining why the request failed\n ///\n static member get<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy,\n ?extra: ExtraCoders, ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.fetchAs\n (url, ?data = data, ?properties = properties, ?headers = headers, ?caseStrategy = caseStrategy, ?extra = extra,\n ?decoder = decoder, ?responseResolver = responseResolver, ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **GET** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"`.\n ///\n //// If we fail, we return `Error (FetchError)` containing an better explanation.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise>`\n ///\n /// **Exceptions**\n ///\n static member tryGet<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy, ?extra: ExtraCoders,\n ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.tryFetchAs\n (url, ?data = data, ?properties = properties, ?headers = headers, ?caseStrategy = caseStrategy, ?extra = extra,\n ?decoder = decoder, ?responseResolver = responseResolver, ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **POST** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"` if data is provided.\n ///\n //// An exception will be thrown if the request fails.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise<'Response>`\n ///\n /// **Exceptions**\n /// * `System.Exception` - Contains information explaining why the request failed\n ///\n static member post<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy,\n ?extra: ExtraCoders, ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.fetchAs\n (url, httpMethod = HttpMethod.POST, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **POST** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"`.\n ///\n //// If we failed, we return `Error (FetchError)` containing an better explanation.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise>`\n ///\n /// **Exceptions**\n ///\n static member tryPost<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy, ?extra: ExtraCoders,\n ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.tryFetchAs\n (url, httpMethod = HttpMethod.POST, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **PUT** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"` if data is provided.\n ///\n //// An exception will be thrown if the request fails.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise<'Response>`\n ///\n /// **Exceptions**\n /// * `System.Exception` - Contains information explaining why the request failed\n ///\n static member put<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy,\n ?extra: ExtraCoders, ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.fetchAs\n (url, httpMethod = HttpMethod.PUT, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **PUT** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"`.\n ///\n //// If we failed, we return `Error (FetchError)` containing an better explanation.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise>`\n ///\n /// **Exceptions**\n ///\n static member tryPut<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy, ?extra: ExtraCoders,\n ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.tryFetchAs\n (url, httpMethod = HttpMethod.PUT, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **PATCH** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"` if data is provided.\n ///\n //// An exception will be thrown if the request fails.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise<'Response>`\n ///\n /// **Exceptions**\n /// * `System.Exception` - Contains information explaining why the request failed\n ///\n static member patch<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy,\n ?extra: ExtraCoders, ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.fetchAs\n (url, httpMethod = HttpMethod.PATCH, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **PATCH** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"`.\n ///\n //// If we failed, we return `Error (FetchError)` containing an better explanation.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise>`\n ///\n /// **Exceptions**\n ///\n static member tryPatch<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy, ?extra: ExtraCoders,\n ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.tryFetchAs\n (url, httpMethod = HttpMethod.PATCH, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **DELETE** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"` if data is provided.\n ///\n //// An exception will be thrown if the request fails.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise<'Response>`\n ///\n /// **Exceptions**\n /// * `System.Exception` - Contains information explaining why the request failed\n ///\n static member delete<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy, ?extra: ExtraCoders,\n ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.fetchAs\n (url, httpMethod = HttpMethod.DELETE, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\n\n /// **Description**\n ///\n /// Send a **DELETE** request to the specified resource and decodes the response.\n ///\n /// This method set the `ContentType` header to `\"application/json\"`.\n ///\n //// If we failed, we return `Error (FetchError)` containing an better explanation.\n ///\n /// **Parameters**\n /// * `url` - parameter of type `string` - URL to request\n /// * `data` - optional parameter of type `'Data` - Data sent via the body, it will be converted to JSON before\n /// * `properties` - optional parameter of type `RequestProperties list` - Parameters passed to fetch\n /// * `headers` - optional parameter of type `HttpRequestHeaders list` - Parameters passed to fetch's properties\n /// * `caseStrategy` - optional parameter of type `CaseStrategy` - Options passed to Thoth.Json to control JSON keys representation\n /// * `extra` - optional parameter of type `ExtraCoders` - Options passed to Thoth.Json to extends the known coders\n /// * `decoder` - parameter of type `Decoder<'Response>` - Decoder applied to the server response\n /// * `responseResolver` - optional parameter of type `ITypeResolver<'Response>` - Used by Fable to provide generic type info\n /// * `dataResolver` - parameter of type `ITypeResolver<'Data> option` - Used by Fable to provide generic type info\n ///\n /// **Output Type**\n /// * `JS.Promise>`\n ///\n /// **Exceptions**\n ///\n static member tryDelete<'Data, 'Response> (url: string, ?data: 'Data, ?properties: RequestProperties list,\n ?headers: HttpRequestHeaders list, ?caseStrategy: CaseStrategy,\n ?extra: ExtraCoders, ?decoder: Decoder<'Response>,\n [] ?responseResolver: ITypeResolver<'Response>,\n [] ?dataResolver: ITypeResolver<'Data>) =\n Fetch.tryFetchAs\n (url, httpMethod = HttpMethod.DELETE, ?data = data, ?properties = properties, ?headers = headers,\n ?caseStrategy = caseStrategy, ?extra = extra, ?decoder = decoder, ?responseResolver = responseResolver,\n ?dataResolver = dataResolver)\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 constructor() {\n this.callCount = 0;\n }\n static get maxTrampolineCallCount() {\n return 2000;\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 { choice1Of2, choice2Of2 } from \"./Option\";\nimport { map } from \"./Seq\";\n// Implemented just for type references\nexport 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(choice1Of2(x)),\n onError: (ex) => ctx.onSuccess(choice2Of2(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 = undefined;\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}\nexport default Async;\n//# sourceMappingURL=Async.js.map","module InventoryList\n\nopen ApiDataTypes\nopen Thoth.Fetch\nopen Feliz\nopen Feliz.Bulma\n\nlet private colorCodes = [|\n \"#c70098\"\n \"#f5a207\"\n|]\n\ntype private CompareEntry = {\n Location : Location.Location\n Inventory : Product.Inventory [] option\n ColorCode : string\n}\n\ntype private Model = {\n Location : Location.Location\n Inventory : Product.Inventory [] option\n Filter : string option\n ErrorMsg : string option\n SelectedExp : Product.Inventory option\n SelectedMin : Product.Inventory option\n\n ComparableLocations : Location.Location [] option\n CompareForm : bool\n Compare : CompareEntry []\n ColorCodeCounter : int\n}\n\nand private Message =\n | InventoryResponse of Result\n | ComparableResponse of Result\n | UpdateFilter of string\n | DismissError\n | SelectExp of Product.Inventory\n | SelectMin of Product.Inventory\n | DismissSelected\n | ToggleCompareForm\n | SelectCompareLocation of Location.Location\n | RemoveCompareLocation of int\n | CompareResponse of int * Result\n\nlet private init x = {\n Location = x\n Inventory = None\n Filter = None\n ErrorMsg = None\n SelectedExp = None\n SelectedMin = None\n ComparableLocations = None\n CompareForm = false\n Compare = [||]\n ColorCodeCounter = 0\n}\n\nlet private update (model:Model) msg =\n match msg with\n | InventoryResponse res ->\n match res with\n | Ok x -> {model with Inventory = Some x}\n | Error err ->\n let errMsg =\n match err with\n | _ -> ( sprintf \"Noe gikk galt. Kunne ikke laste inventar for %s.\" model.Location.Name)\n {model with ErrorMsg = Some errMsg}\n \n | ComparableResponse res ->\n match res with\n | Ok x -> {model with ComparableLocations = Some x}\n | Error err ->\n let errMsg =\n match err with\n | _ -> \"Noe gikk galt. Kunne ikke laste sammenlignbare lager.\"\n {model with ErrorMsg = Some errMsg}\n\n | UpdateFilter x ->\n let y =\n match x with\n | null | \"\" -> None\n | z -> Some z\n {model with Filter = y}\n \n | DismissError -> {model with ErrorMsg = None}\n\n | SelectExp x -> {model with SelectedExp = Some x; SelectedMin = None}\n | SelectMin x -> {model with SelectedMin = Some x; SelectedExp = None}\n | DismissSelected -> {model with SelectedExp = None; SelectedMin = None}\n\n | ToggleCompareForm -> {model with CompareForm = not model.CompareForm}\n\n | SelectCompareLocation x -> \n \n let cc =\n colorCodes.[model.ColorCodeCounter]\n let y =\n Array.append [| \n {Location =x; Inventory = None; ColorCode = cc}|]\n model.Compare\n |> Array.distinctBy (fun z -> z.Location.Id)\n \n let newCC =\n model.ColorCodeCounter + 1\n |> function\n | c when c >= colorCodes.Length -> 0\n | c -> c\n {model with Compare = y; CompareForm = false; ColorCodeCounter = newCC}\n \n | RemoveCompareLocation locId ->\n let y =\n model.Compare\n |> Array.filter(fun z -> z.Location.Id <> locId )\n {model with Compare = y}\n \n | CompareResponse (locId, res ) ->\n match res with\n | Ok x ->\n let y =\n model.Compare\n |> Array.map(fun z ->\n if z.Location.Id = locId then\n {z with Inventory = Some x}\n else z\n )\n {model with Compare = y}\n \n | Error err ->\n let errMsg =\n match err with\n | _ -> \"Noe gikk galt. Kunne ikke laste lagerbeholdning for lager.\"\n {model with ErrorMsg = Some errMsg}\n\n\nlet private fetchInventory locId dispatch =\n promise {\n let requestPath =\n sprintf \"/api/inventory/%i\" locId\n let! res = Promises.tryGet requestPath\n dispatch (InventoryResponse res)\n }\n\n\nlet private fetchComparableLocations locId dispatch =\n promise {\n let requestPath = \n sprintf \"/api/location/comparable/%i\" locId\n let! res = Promises.tryGet requestPath\n dispatch (ComparableResponse res)\n }\n\nlet private fetchCompareInventory locId dispatch =\n promise {\n let requestPath =\n sprintf \"/api/inventory/%i\" locId\n let! res = Promises.tryGet requestPath\n dispatch (CompareResponse (locId, res))\n }\n\n\nlet private drawExp (x : Product.Inventory) dispatch =\n Bulma.modal [\n Bulma.modal.isActive\n prop.children [\n Bulma.modalBackground[\n prop.style [style.backgroundColor \"rgba(10,10,10,.4)\"]\n prop.onClick (fun _ -> dispatch DismissSelected)]\n Bulma.card [\n Bulma.modalCardHead [\n Bulma.modalCardTitle \"Produkter utløper på dato\"\n Bulma.delete [\n prop.onClick (fun _ -> dispatch DismissSelected)\n ]\n ]\n Bulma.modalCardBody [\n prop.style [\n style.backgroundColor \"#6bc0ae\"\n style.color \"#fff\"\n style.textAlign.center\n style.fontWeight.bold\n ]\n prop.children [\n Html.h5 [\n prop.style [style.color \"#fff\"]\n prop.className \"title is-5\"\n prop.text x.Product.Name\n ]\n\n Html.ul [\n x.Expirations\n |> Array.map(fun y ->\n Html.li [\n prop.text (sprintf \"%i stk utløper %s\" y.Quantity (Utils.fromDateToLocalDate y.Expires))\n ]\n )\n |> Fable.React.Helpers.ofArray\n ]\n ]\n ]\n Bulma.modalCardFoot [\n Bulma.button.button [\n Bulma.button.isSmall\n prop.onClick (fun _ -> dispatch DismissSelected)\n prop.text \"Lukk\"\n ]\n ]\n ]\n ]\n ]\n\nlet private drawBelowMin (x : Product.Inventory) dispatch =\n Bulma.modal [\n Bulma.modal.isActive\n prop.children [\n Bulma.modalBackground[\n prop.style [style.backgroundColor \"rgba(10,10,10,.4)\"]\n prop.onClick (fun _ -> dispatch DismissSelected)]\n Bulma.card [\n Bulma.modalCardHead [\n Bulma.modalCardTitle \"Antall produkter under minimumsgrensen\"\n Bulma.delete [\n prop.onClick (fun _ -> dispatch DismissSelected)\n ]\n ]\n Bulma.modalCardBody [\n prop.style [\n style.backgroundColor \"#6bc0ae\"\n style.color \"#fff\"\n style.textAlign.center\n style.fontWeight.bold\n ]\n prop.children [\n Html.h5 [\n prop.style [style.color \"#fff\"]\n prop.className \"title is-5\"\n prop.text x.Product.Name\n ]\n\n Html.p [\n prop.text \n (sprintf \"Lagerbeholdning ligger under minimumsbeholdningen på %i stk spesifisert for dette produktet.\" x.RequiredMinimum)\n ]\n ]\n ]\n Bulma.modalCardFoot [\n Bulma.button.button [\n Bulma.button.isSmall\n prop.onClick (fun _ -> dispatch DismissSelected)\n prop.text \"Lukk\"\n ]\n ]\n ]\n ]\n ]\n\n\nlet private drawInventoryEntry (x: Product.Inventory) (y:CompareEntry []) dispatch =\n Html.tr [\n prop.className \"product-row\"\n prop.children [\n Html.td [\n prop.style [\n style.width (length.rem 3.2)\n style.padding (length.px 5)\n ]\n prop.children [\n ViewHelpers.productImg x.Product.Id 3.1\n ]\n ]\n Html.td [\n Html.span [\n prop.style [style.fontWeight.bold]\n prop.text x.Product.Name\n ]\n Html.br []\n Html.span [\n prop.style [\n style.fontSize (length.rem 0.8)\n ] \n prop.text (sprintf \"Produktnummer: %s\" x.Product.ProductNumber)\n ]\n ]\n Html.td [\n prop.style [style.fontStyle.italic; style.fontWeight.bold]\n prop.text (sprintf \"%i stk\" x.Quantity)\n ]\n Html.td [\n y\n |> Array.map(fun z ->\n match z.Inventory with\n | None -> Html.none\n | Some i ->\n i\n |> Array.tryFind (fun e -> e.Product.Id = x.Product.Id)\n |> function\n | None -> Html.none\n | Some e ->\n Html.span [\n prop.style [\n style.fontStyle.italic\n style.fontWeight.bold\n style.color z.ColorCode\n ]\n prop.text (sprintf \"%i stk\" e.Quantity)\n ]\n )\n |> Fable.React.Helpers.ofArray\n ]\n Html.td [\n if x.BelowMinimum then\n Bulma.icon [\n Bulma.icon.isMedium\n prop.style [\n style.cursor.pointer\n ]\n prop.onClick (fun _ -> dispatch (SelectMin x))\n prop.children [\n Html.i [\n prop.className \"fas fa-arrow-alt-circle-down fa-lg\"\n ]\n ]\n ]\n \n if x.Expirations.Length > 0 then\n Bulma.icon [\n Bulma.icon.isMedium\n prop.style [\n style.cursor.pointer\n ]\n prop.onClick (fun _ -> dispatch (SelectExp x))\n prop.children [\n Html.i [\n prop.className \"fas fa-clock fa-lg\"\n ]\n ]\n ]\n\n ]\n ]\n ]\n\n\nlet private drawInventory model dispatch (x : Product.Inventory []) =\n let y =\n match model.Filter with\n | None -> x\n | Some f ->\n let lowered = f.ToLower()\n x\n |> Array.filter(fun z -> \n z.Product.Name.ToLower().Contains(lowered) ||\n z.Product.ProductNumber.ToLower().Contains(lowered)\n )\n Bulma.table [\n Bulma.table.isFullWidth\n prop.children [\n Html.thead [\n prop.style [style.fontSize (length.rem 0.8)]\n prop.children [\n Html.th []\n Html.th \"Produkt\"\n Html.th \"Antall\"\n Html.th []\n Html.th \"Merknad\"\n ]\n ]\n Html.tbody [\n y\n |> Array.map(fun y -> drawInventoryEntry y model.Compare dispatch)\n |> Fable.React.Helpers.ofArray\n ]\n ]\n ]\n\n\nlet private drawComparison model dispatch =\n Html.div [\n prop.style [\n style.marginTop (length.px 20)\n ]\n prop.children [\n Html.div [\n prop.style [\n style.display.flex\n style.alignItems.center\n ]\n prop.children [\n Html.h5 [\n prop.style [\n style.color \"#fff\"\n style.marginBottom (length.px 3)\n style.marginLeft (length.px 15)\n style.marginRight (length.px 10)\n ]\n prop.className \"title is-5\"\n prop.text \"Sammenlign lager\"\n ]\n\n if not model.CompareForm then\n Bulma.button.button [\n prop.className \"icon-button\"\n Bulma.button.isSmall\n prop.onClick (fun _ -> dispatch ToggleCompareForm)\n prop.children [Html.i [prop.className \"fas fa-plus\"]]\n ]\n else\n match model.ComparableLocations with\n | None -> ViewHelpers.loadingIndicatorSmall ()\n | Some x ->\n let selectable =\n x\n |> Array.filter(fun y -> \n model.Compare\n |> Array.exists(fun z -> z.Location.Id = y.Id)\n |> not\n )\n \n if selectable.Length > 0 then\n Bulma.select [\n Bulma.select.isSmall\n prop.value -1\n\n prop.onChange (fun (y:string) ->\n try\n let asInt = int y\n selectable\n |> Array.tryFind(fun z -> z.Id = asInt)\n |> function\n | None -> ()\n | Some z ->\n dispatch (SelectCompareLocation z)\n fetchCompareInventory z.Id dispatch\n |> Promise.start\n with | _ -> ()\n )\n prop.children [\n Html.option [\n prop.value -1\n prop.hidden true\n prop.text \"Velg lager\"\n ]\n\n selectable\n |> Array.map(fun y -> Html.option [prop.value y.Id; prop.text y.Name])\n |> Fable.React.Helpers.ofArray\n ]\n ]\n else\n Html.span [\n prop.style [\n style.color \"#fff\"\n style.fontSize (length.rem 0.8)\n ]\n prop.text \"Ingen lager å velge mellom.\"\n ]\n\n Bulma.button.button [\n prop.className \"icon-button\"\n Bulma.button.isSmall\n prop.style [style.marginLeft (length.px 10)]\n prop.onClick (fun _ -> dispatch ToggleCompareForm)\n prop.children [Html.i [prop.className \"fas fa-times\"]]\n ]\n ]\n \n ]\n\n Bulma.table [\n prop.style [style.marginBottom 0]\n prop.children [\n Html.thead []\n Html.tbody [\n model.Compare\n |> Array.map(fun y ->\n Html.tr [\n prop.className \"notification-row\"\n prop.children [\n Html.td [\n prop.style [\n style.display.flex\n style.alignItems.center\n ]\n prop.children [\n Bulma.icon [\n prop.children [\n Html.i [\n prop.style [\n style.color y.ColorCode\n style.marginRight (length.px 5)\n ]\n prop.className \"fas fa-circle\"\n ]\n ]\n ]\n Html.span [\n prop.style [style.marginRight (length.px 5)]\n prop.text y.Location.Name\n ]\n\n Bulma.button.button [\n prop.className \"icon-button\"\n Bulma.button.isSmall\n prop.onClick (fun _ -> dispatch (RemoveCompareLocation y.Location.Id))\n prop.children [Html.i [prop.className \"fas fa-times\"]]\n ]\n ]\n ]\n Html.td [\n if y.Inventory.IsNone then\n ViewHelpers.loadingIndicatorSmall ()\n ]\n ]\n ]\n )\n |> Fable.React.Helpers.ofArray\n ]\n ]\n ]\n ]\n ]\n\nlet private view model dispatch =\n Html.div [\n\n prop.children [\n Html.div [\n prop.style [\n style.textAlign.right\n ]\n prop.children [\n Html.span [\n prop.style [style.color \"#fff\"; style.fontWeight.bold]\n prop.text \"Lagerbeholdning\"\n ]\n ]\n ]\n Html.div [\n prop.style [\n style.custom (\"border\", \"solid 1px #4d8398\")\n style.borderRadius 5\n style.padding (length.vw 1)\n style.backgroundColor \"#e0f1f1\"\n style.overflowY.scroll\n style.maxHeight (length.vh 70)\n ]\n prop.children [\n match model.ErrorMsg with\n | None -> ()\n | Some err -> ViewHelpers.errorMsg err (fun _ -> dispatch DismissError)\n match model.Inventory with\n | None -> ViewHelpers.loadingIndicatorSmall ()\n | Some x ->\n\n Bulma.field.div [\n Bulma.control.div [\n Bulma.control.hasIconsLeft\n prop.children [\n Bulma.input.text [\n prop.defaultValue (\n match model.Filter with\n | None -> \"\"\n | Some f -> f\n )\n prop.placeholder \"Søk blandt produkter ..\"\n prop.onChange (UpdateFilter >> dispatch)\n prop.style [style.marginBottom (length.px 5)]\n ]\n\n Bulma.icon [\n Bulma.icon.isLeft\n prop.children [Html.i [prop.className \"fas fa-search\"]]\n ]\n ]\n ]\n ]\n drawInventory model dispatch x\n match model.SelectedExp with\n | None -> ()\n | Some exp -> drawExp exp dispatch\n\n match model.SelectedMin with\n | None -> ()\n | Some m -> drawBelowMin m dispatch\n ]\n ]\n\n drawComparison model dispatch\n ]\n ]\n\n\nlet inventoryList location =\n React.functionComponent (\"inventory-list\", (fun (props : {|loc : Location.Location|}) -> \n let initialModel = init props.loc\n let model, dispatch = React.useReducer(update, initialModel)\n\n React.useEffect((fun _ ->\n fetchInventory props.loc.Id dispatch\n |> Promise.start\n fetchComparableLocations props.loc.Id dispatch\n |> Promise.start\n ), [||])\n\n view model dispatch\n )) {| loc = location|}","namespace Fable.Reaction\n\nopen Browser\nopen Browser.Types\nopen FSharp.Control\n\nmodule WebSocket =\n\n exception WSError of string\n\n /// Websocket channel operator. Passes string items as ws messages to\n /// the server. Received ws messages will be forwarded down stream.\n /// JSON encode/decode of application messages is left to the client.\n let channel (uri: string) (source: IAsyncObservable) : IAsyncObservable =\n let subscribe (down: IAsyncObserver) : Async =\n async {\n let websocket = WebSocket.Create uri\n let mutable disposable = AsyncDisposable.Empty\n let mutable disposed = false\n\n let cancel () = async {\n disposed <- true\n do! disposable.DisposeAsync ()\n websocket.close ()\n }\n\n let serverObs n = async {\n if not disposed then\n match n with\n | OnNext msg ->\n try\n websocket.send msg\n with\n | ex ->\n printfn \"OnNext failed, closing channel\"\n Async.StartImmediate (cancel ())\n | OnError ex ->\n Async.StartImmediate (cancel ())\n | OnCompleted ->\n Async.StartImmediate (cancel ())\n }\n\n let onMessage (ev : MessageEvent) =\n let msg = (string ev.data)\n Async.StartImmediate (down.OnNextAsync msg)\n\n let onOpen _ =\n let action = async {\n let! disposable' = source.SubscribeAsync serverObs\n disposable <- disposable'\n }\n Async.StartImmediate action\n\n let onError ev =\n let ex = WSError (ev.ToString ())\n Async.StartImmediate (async {\n do! down.OnErrorAsync ex\n do! cancel ()\n })\n\n let onClose ev =\n Async.StartImmediate (async {\n do! down.OnCompletedAsync ()\n do! cancel ()\n })\n\n websocket.onmessage <- onMessage\n websocket.onclose <- onClose\n websocket.onopen <- onOpen\n websocket.onerror <- onError\n\n return AsyncDisposable.Create cancel\n }\n\n AsyncRx.create subscribe\n\n /// Websocket message channel operator. Items {'msg} will be encoded\n /// to JSON using `encode` and passed as over the ws channel to the server.\n /// Data received on the ws channel as strings (JSON) will be\n /// decoded using `decode` and forwarded down stream as messages {'msg}.\n let msgChannel<'msg> (uri: string) (encode: 'msg -> string) (decode: string -> 'msg option) (source: IAsyncObservable<'msg>) : IAsyncObservable<'msg> =\n source\n |> AsyncRx.map encode\n |> channel uri\n |> AsyncRx.choose decode\n\n /// Websocket message channel operator. Items {'msg} will be encoded\n /// to JSON using `encode` and passed as over the ws channel to the server.\n /// Data received on the ws channel as strings (JSON) will be\n /// decoded using `decode` and forwarded down stream as messages {Result<'msg, exn>}.\n let msgResultChannel<'msg> (uri: string) (encode: 'msg -> string) (decode: string -> Result<'msg, exn>) (source: IAsyncObservable<'msg>) : IAsyncObservable> =\n source\n |> AsyncRx.map encode\n |> channel uri\n |> AsyncRx.map decode\n","import { defaultCancellationToken } from \"./Async\";\nimport { fromContinuations } from \"./Async\";\nimport { startImmediate } from \"./Async\";\nclass QueueCell {\n constructor(message) {\n this.value = message;\n }\n}\nclass MailboxQueue {\n add(message) {\n const itCell = new QueueCell(message);\n if (this.firstAndLast) {\n this.firstAndLast[1].next = itCell;\n this.firstAndLast = [this.firstAndLast[0], itCell];\n }\n else {\n this.firstAndLast = [itCell, itCell];\n }\n }\n tryGet() {\n if (this.firstAndLast) {\n const value = this.firstAndLast[0].value;\n if (this.firstAndLast[0].next) {\n this.firstAndLast = [this.firstAndLast[0].next, this.firstAndLast[1]];\n }\n else {\n delete this.firstAndLast;\n }\n return value;\n }\n return void 0;\n }\n}\nexport class MailboxProcessor {\n constructor(body, cancellationToken) {\n this.body = body;\n this.cancellationToken = cancellationToken || defaultCancellationToken;\n this.messages = new MailboxQueue();\n }\n}\nfunction __processEvents($this) {\n if ($this.continuation) {\n const value = $this.messages.tryGet();\n if (value) {\n const cont = $this.continuation;\n delete $this.continuation;\n cont(value);\n }\n }\n}\nexport function startInstance($this) {\n startImmediate($this.body($this), $this.cancellationToken);\n}\nexport function receive($this) {\n return fromContinuations((conts) => {\n if ($this.continuation) {\n throw new Error(\"Receive can only be called once!\");\n }\n $this.continuation = conts[0];\n __processEvents($this);\n });\n}\nexport function post($this, message) {\n $this.messages.add(message);\n __processEvents($this);\n}\nexport function postAndAsyncReply($this, buildMessage) {\n let result;\n let continuation;\n function checkCompletion() {\n if (result !== void 0 && continuation !== void 0) {\n continuation(result);\n }\n }\n const reply = {\n reply: (res) => {\n result = res;\n checkCompletion();\n },\n };\n $this.messages.add(buildMessage(reply));\n __processEvents($this);\n return fromContinuations((conts) => {\n continuation = conts[0];\n checkCompletion();\n });\n}\nexport function start(body, cancellationToken) {\n const mbox = new MailboxProcessor(body, cancellationToken);\n startInstance(mbox);\n return mbox;\n}\nexport default MailboxProcessor;\n//# sourceMappingURL=MailboxProcessor.js.map","namespace FSharp.Control\n\nopen System\nopen System.Threading\n\nopen FSharp.Control.Core\n\n/// Overloads and extensions for AsyncDisposable\ntype AsyncDisposable private (cancel) =\n let mutable isDisposed = 0\n interface IAsyncRxDisposable with\n member this.DisposeAsync () = async {\n#if FABLE_COMPILER\n if isDisposed = 0 then\n isDisposed <- 1\n do! cancel ()\n#else\n if System.Threading.Interlocked.Exchange(&isDisposed, 1) = 0 then\n do! cancel ()\n#endif\n }\n\n static member Create cancel : IAsyncRxDisposable =\n AsyncDisposable cancel :> IAsyncRxDisposable\n\n static member Empty : IAsyncRxDisposable =\n let cancel () = async {\n return ()\n }\n AsyncDisposable cancel :> IAsyncRxDisposable\n\n static member Composite (disposables: IAsyncRxDisposable seq) : IAsyncRxDisposable =\n let cancel () = async {\n for d in disposables do\n do! d.DisposeAsync ()\n }\n AsyncDisposable cancel :> IAsyncRxDisposable\n\ntype Disposable (cancel) =\n let mutable isDisposed = 0\n interface IDisposable with\n member this.Dispose () =\n#if FABLE_COMPILER\n if isDisposed = 0 then\n isDisposed <- 1\n cancel ()\n#else\n if System.Threading.Interlocked.Exchange(&isDisposed, 1) = 0 then\n cancel ()\n#endif\n\n static member Create (cancel) : IDisposable =\n new Disposable(cancel) :> IDisposable\n\n static member Empty : IDisposable =\n let cancel () =\n ()\n\n new Disposable(cancel) :> IDisposable\n\n static member Composite (disposables: IDisposable seq) : IDisposable =\n let cancel () =\n for d in disposables do\n d.Dispose ()\n\n new Disposable (cancel) :> IDisposable\n\n[]\nmodule AsyncDisposable =\n type IAsyncRxDisposable with\n member this.ToDisposable () =\n { new IDisposable with member __.Dispose () = this.DisposeAsync () |> Async.Start' }\n\n type System.IDisposable with\n member this.ToAsyncDisposable () : IAsyncRxDisposable =\n AsyncDisposable.Create (fun () -> async { this.Dispose () })\n\n let canceller () =\n let cts = new CancellationTokenSource()\n let cancel () = async {\n cts.Cancel ()\n }\n AsyncDisposable.Create cancel, cts.Token\n\n","namespace FSharp.Control\n\nopen System\nopen FSharp.Control.Core\n\ntype AsyncObserver<'T> (fn: Notification<'T> -> Async) =\n\n interface IAsyncObserver<'T> with\n member this.OnNextAsync (x: 'T) = OnNext x |> fn\n member this.OnErrorAsync err = OnError err |> fn\n member this.OnCompletedAsync () = OnCompleted |> fn\n\n static member Create (fn) : IAsyncObserver<'T> =\n AsyncObserver<'T> fn :> IAsyncObserver<'T>\n\ntype Observer<'T> (fn: Notification<'T> -> unit) =\n interface IObserver<'T> with\n member this.OnNext (x: 'T) = OnNext x |> fn\n member this.OnError err = OnError err |> fn\n member this.OnCompleted () = OnCompleted |> fn\n\n static member Create (fn) : IObserver<'T> =\n Observer<'T> fn :> IObserver<'T>\n\n[]\nmodule AsyncObserver =\n type IAsyncObserver<'T> with\n /// Convert async observer (IAsyncObserver) to an observer (IObserver).\n member this.ToObserver () =\n { new IObserver<'T> with\n member __.OnNext x = this.OnNextAsync x |> Async.Start'\n member __.OnError err = this.OnErrorAsync err |> Async.Start'\n member __.OnCompleted () = this.OnCompletedAsync () |> Async.Start'\n }\n\n type IObserver<'T> with\n /// Convert observer (IObserver) to an async observer (IAsyncObserver).\n member this.ToAsyncObserver () =\n { new IAsyncObserver<'T> with\n member __.OnNextAsync x = async { this.OnNext x }\n member __.OnErrorAsync err = async { this.OnError err }\n member __.OnCompletedAsync () = async { this.OnCompleted () }\n }\n\n /// Safe observer that wraps the given observer. Makes sure that invocations are serialized and that the Rx grammar\n /// (OnNext* (OnError|OnCompleted)?) is not violated.\n let safeObserver (obv: IAsyncObserver<'TSource>) (disposable: IAsyncRxDisposable): IAsyncObserver<'TSource> =\n let agent = MailboxProcessor.Start (fun inbox ->\n let rec messageLoop stopped = async {\n let! n = inbox.Receive ()\n\n if stopped then\n return! messageLoop stopped\n\n let! stop = async {\n match n with\n | OnNext x ->\n try\n do! obv.OnNextAsync x\n return false\n with\n | ex ->\n do! obv.OnErrorAsync ex\n return true\n | OnError ex ->\n do! disposable.DisposeAsync ()\n do! obv.OnErrorAsync ex\n return true\n | OnCompleted ->\n do! disposable.DisposeAsync ()\n do! obv.OnCompletedAsync ()\n return true\n }\n return! messageLoop stop\n }\n messageLoop false)\n { new IAsyncObserver<'TSource> with\n member this.OnNextAsync x = async {\n OnNext x |> agent.Post\n }\n member this.OnErrorAsync err = async {\n OnError err |> agent.Post\n }\n member this.OnCompletedAsync () = async {\n OnCompleted |> agent.Post\n }\n }\n\n type private Msg =\n | Disposable of IAsyncRxDisposable\n | Dispose\n\n let autoDetachObserver (obv: IAsyncObserver<'TSource>) : IAsyncObserver<'TSource>*(Async->Async) =\n let agent = MailboxProcessor.Start((fun inbox ->\n let rec messageLoop disposables = async {\n let! cmd = inbox.Receive ()\n\n let! disposables' = async {\n match cmd with\n | Disposable disp -> return disp :: disposables\n | Dispose ->\n for disp in disposables do\n do! disp.DisposeAsync ()\n return []\n }\n return! messageLoop disposables'\n }\n messageLoop []))\n let cancel () = async {\n agent.Post Dispose\n }\n let safeObv = AsyncDisposable.Create cancel |> safeObserver obv\n\n // Auto-detaches (disposes) the disposable when the observer completes with success or error.\n let autoDetach (disposable: Async) = async {\n let! disp = disposable\n agent.Post (Disposable disp)\n return disp\n }\n safeObv, autoDetach","namespace FSharp.Control\n\nopen System.Threading\n\nopen FSharp.Control.Core\n\nopen System.Runtime.CompilerServices\n[]\ndo ()\n\n\n[]\nmodule internal Create =\n\n /// Creates an async observable (`AsyncObservable{'TSource}`) from the\n /// given subscribe function.\n let create (subscribe : IAsyncObserver<'TSource> -> Async) : IAsyncObservable<'TSource> =\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribe o }\n\n // Create async observable from async worker function\n let ofAsyncWorker (worker: IAsyncObserver<'TSource> -> CancellationToken -> Async) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv : IAsyncObserver<'TSource>) : Async =\n let disposable, token = canceller ()\n let safeObv = safeObserver aobv disposable\n\n async {\n Async.Start' (worker safeObv token, token)\n return disposable\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns the async observable sequence whose single element is the result of the given async workflow.\n let ofAsync (workflow : Async<'TSource>) : IAsyncObservable<'TSource> =\n ofAsyncWorker(fun obv _ -> async {\n try\n let! result = workflow\n do! obv.OnNextAsync result\n do! obv.OnCompletedAsync ()\n with\n | ex ->\n do! obv.OnErrorAsync ex\n })\n\n /// Returns an observable sequence containing the single specified element.\n let single (value: 'TSource) =\n let subscribeAsync (aobv : IAsyncObserver<'TSource>) : Async =\n let safeObv = safeObserver aobv AsyncDisposable.Empty\n\n async {\n do! safeObv.OnNextAsync value\n do! safeObv.OnCompletedAsync ()\n return AsyncDisposable.Empty\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns an observable sequence with no elements.\n let inline empty<'TSource> () : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv : IAsyncObserver<_>) : Async =\n async {\n do! aobv.OnCompletedAsync ()\n return AsyncDisposable.Empty\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns an empty observable sequence that never completes.\n let inline never<'TSource> () : IAsyncObservable<'TSource> =\n let subscribeAsync (_ : IAsyncObserver<_>) : Async =\n async {\n return AsyncDisposable.Empty\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns the observable sequence that terminates exceptionally\n /// with the specified exception.\n let inline fail<'TSource> (error: exn) : IAsyncObservable<'TSource> =\n ofAsyncWorker (fun obv _ -> obv.OnErrorAsync error)\n\n /// Returns the async observable sequence whose elements are pulled\n /// from the given enumerable sequence.\n let ofSeq (xs: seq<'TSource>) : IAsyncObservable<'TSource> =\n ofAsyncWorker (fun obv token -> async {\n for x in xs do\n try\n do! obv.OnNextAsync x\n with ex ->\n do! obv.OnErrorAsync ex\n\n do! obv.OnCompletedAsync ()\n })\n\n // Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes.\n let defer (factory: unit -> IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv : IAsyncObserver<'TSource>) : Async =\n async {\n let result =\n try\n factory ()\n with\n | ex ->\n fail ex\n\n return! result.SubscribeAsync aobv\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns an observable sequence that triggers the increasing sequence starting with 0 after the given msecs, and\n /// the after each period.\n let interval (msecs: int) (period: int) : IAsyncObservable =\n let subscribeAsync (aobv : IAsyncObserver) : Async =\n let cancel, token = canceller ()\n async {\n let rec handler (msecs : int) next = async {\n do! Async.Sleep msecs\n do! aobv.OnNextAsync next\n\n if period > 0 then\n return! handler period (next + 1)\n else\n do! aobv.OnCompletedAsync ()\n }\n\n Async.Start' (handler msecs 0, token)\n return cancel\n }\n\n { new IAsyncObservable with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns an observable sequence that triggers the value 0\n /// after the given duetime in milliseconds.\n let timer (dueTime: int) : IAsyncObservable =\n interval dueTime 0\n","namespace FSharp.Control\n\nopen System.Collections.Generic\n\n[]\nmodule internal Combine =\n type Key = int\n type Model<'a> = {\n Subscriptions: Map\n Queue: List>\n IsStopped: bool\n Key: Key\n }\n\n []\n type private Msg<'a> =\n | InnerObservable of IAsyncObservable<'a>\n | InnerCompleted of Key\n | OuterCompleted\n | Dispose\n\n let mergeInner (maxConcurrent: int) (source: IAsyncObservable>) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv: IAsyncObserver<'TSource>) =\n let safeObv, autoDetach = autoDetachObserver aobv\n\n let initialModel = {\n Subscriptions = Map.empty\n Queue = new List> ()\n IsStopped = false\n Key = 0\n }\n\n let agent =\n MailboxProcessor.Start(fun inbox ->\n let obv key = {\n new IAsyncObserver<'TSource> with\n member __.OnNextAsync x = safeObv.OnNextAsync x\n member __.OnErrorAsync err = safeObv.OnErrorAsync err\n member __.OnCompletedAsync () = async {\n Msg.InnerCompleted key |> inbox.Post\n }\n }\n\n let update msg model =\n async {\n match msg with\n | Msg.InnerObservable xs ->\n if maxConcurrent = 0 || model.Subscriptions.Count < maxConcurrent then\n let! inner = xs.SubscribeAsync (obv model.Key)\n return { model with Subscriptions = model.Subscriptions.Add (model.Key, inner); Key = model.Key + 1 }\n else\n model.Queue.Add xs\n return model\n | Msg.InnerCompleted key ->\n let subscriptions = model.Subscriptions.Remove key\n\n if model.Queue.Count > 0 then\n let xs = model.Queue.[0]\n model.Queue.RemoveAt 0\n let! inner = xs.SubscribeAsync (obv model.Key)\n\n return { model with Subscriptions = subscriptions.Add (model.Key, inner); Key = model.Key + 1 }\n else if subscriptions.Count > 0 then\n return { model with Subscriptions = subscriptions }\n else\n if model.IsStopped then\n do! safeObv.OnCompletedAsync ()\n return { model with Subscriptions = Map.empty }\n | Msg.OuterCompleted ->\n if model.Subscriptions.Count = 0 then\n do! safeObv.OnCompletedAsync ()\n return { model with IsStopped = true }\n | Msg.Dispose ->\n for KeyValue(key, dispose) in model.Subscriptions do\n do! dispose.DisposeAsync ()\n return initialModel\n }\n\n let rec messageLoop (model : Model<'TSource>) = async {\n let! msg = inbox.Receive ()\n let! newModel = update msg model\n return! messageLoop newModel\n }\n\n messageLoop initialModel\n )\n async {\n let obv = {\n new IAsyncObserver> with\n member this.OnNextAsync xs = async {\n Msg.InnerObservable xs |> agent.Post\n }\n member this.OnErrorAsync err = async {\n do! safeObv.OnErrorAsync err\n agent.Post Msg.Dispose\n }\n member this.OnCompletedAsync () = async {\n Msg.OuterCompleted |> agent.Post\n }\n }\n let! dispose = source.SubscribeAsync obv |> autoDetach\n let cancel () =\n async {\n do! dispose.DisposeAsync ()\n agent.Post Msg.Dispose\n }\n return AsyncDisposable.Create cancel\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns an observable sequence that contains the elements of each given sequences, in sequential order.\n let concatSeq (sources: seq>) : IAsyncObservable<'TSource> =\n Create.ofSeq(sources)\n |> mergeInner 1\n\n type private Notifications<'TSource, 'TOther> =\n | Source of Notification<'TSource>\n | Other of Notification<'TOther>\n\n /// Merges the specified observable sequences into one observable sequence by combining elements of the sources into\n /// tuples. Returns an observable sequence containing the combined results.\n let combineLatest (other: IAsyncObservable<'TOther>) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource*'TOther> =\n let subscribeAsync (aobv: IAsyncObserver<'TSource*'TOther>) =\n let safeObv, autoDetach = autoDetachObserver aobv\n\n let agent = MailboxProcessor.Start(fun inbox ->\n let rec messageLoop (source: option<'TSource>) (other: option<'TOther>) = async {\n let! cn = inbox.Receive ()\n\n let onNextOption n =\n async {\n match n with\n | OnNext x ->\n return Some x\n | OnError ex ->\n do! safeObv.OnErrorAsync ex\n return None\n | OnCompleted ->\n do! safeObv.OnCompletedAsync ()\n return None\n }\n\n let! source', other' = async {\n match cn with\n | Source n ->\n let! onNextOptionN = onNextOption n\n return onNextOptionN, other\n | Other n ->\n let! onNextOptionN = onNextOption n\n return source, onNextOptionN\n }\n let c = source' |> Option.bind (fun a -> other' |> Option.map (fun b -> a, b))\n match c with\n | Some x -> do! safeObv.OnNextAsync x\n | _ -> ()\n\n return! messageLoop source' other'\n }\n\n messageLoop None None\n )\n\n async {\n let! dispose1 =\n AsyncObserver (fun (n : Notification<'TSource>) -> async { Source n |> agent.Post })\n |> source.SubscribeAsync\n let! dispose2 =\n AsyncObserver (fun (n : Notification<'TOther>) -> async { Other n |> agent.Post })\n |> other.SubscribeAsync\n\n return AsyncDisposable.Composite [ dispose1; dispose2 ]\n }\n { new IAsyncObservable<'TSource*'TOther> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Merges the specified observable sequences into one observable sequence by combining the values into tuples only\n /// when the first observable sequence produces an element. Returns the combined observable sequence.\n let withLatestFrom (other: IAsyncObservable<'TOther>) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource*'TOther> =\n let subscribeAsync (aobv: IAsyncObserver<'TSource*'TOther>) =\n let safeObv, autoDetach = autoDetachObserver aobv\n\n let agent = MailboxProcessor.Start(fun inbox ->\n let rec messageLoop (latest : option<'TOther>) = async {\n let! cn = inbox.Receive()\n\n let onNextOption n =\n async {\n match n with\n | OnNext x ->\n return Some x\n | OnError ex ->\n do! safeObv.OnErrorAsync ex\n return None\n | OnCompleted ->\n do! safeObv.OnCompletedAsync ()\n return None\n }\n\n let! source', latest' = async {\n match cn with\n | Source n ->\n let! onNextOptionN = onNextOption n\n return onNextOptionN, latest\n | Other n ->\n let! onNextOptionN = onNextOption n\n return None, onNextOptionN\n }\n let c = source' |> Option.bind (fun a -> latest' |> Option.map (fun b -> a, b))\n match c with\n | Some x -> do! safeObv.OnNextAsync x\n | _ -> ()\n\n return! messageLoop latest'\n }\n\n messageLoop None\n )\n\n async {\n let! dispose1 =\n AsyncObserver (fun (n : Notification<'TOther>) -> async { Other n |> agent.Post })\n |> other.SubscribeAsync |> autoDetach\n let! dispose2 =\n AsyncObserver (fun (n : Notification<'TSource>) -> async { Source n |> agent.Post })\n |> source.SubscribeAsync |> autoDetach\n\n return AsyncDisposable.Composite [\n dispose1\n dispose2\n ]\n }\n { new IAsyncObservable<'TSource*'TOther> with member __.SubscribeAsync o = subscribeAsync o }\n\n let zipSeq (sequence: seq<'TOther>) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource*'TOther> =\n let subscribeAsync (aobv: IAsyncObserver<'TSource*'TOther>) =\n async {\n let safeObv, autoDetach = autoDetachObserver aobv\n\n let enumerator = sequence.GetEnumerator ()\n let _obv n =\n async {\n match n with\n | OnNext x ->\n try\n if enumerator.MoveNext () then\n let b = x, enumerator.Current\n do! safeObv.OnNextAsync b\n else\n do! safeObv.OnCompletedAsync ()\n with\n | ex -> do! safeObv.OnErrorAsync ex\n | OnError ex -> do! safeObv.OnErrorAsync ex\n | OnCompleted -> do! safeObv.OnCompletedAsync ()\n\n }\n return! AsyncObserver _obv |> source.SubscribeAsync |> autoDetach\n }\n { new IAsyncObservable<'TSource*'TOther> with member __.SubscribeAsync o = subscribeAsync o }\n","namespace FSharp.Control\n\nopen System\nopen FSharp.Control.Core\n\n[]\nmodule internal Transform =\n /// Returns an observable sequence whose elements are the result of invoking the async mapper function on each\n /// element of the source.\n let transformAsync<'TSource, 'TResult> (nextAsync: ('TResult -> Async) -> 'TSource -> Async) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TResult> =\n let subscribeAsync (aobv : IAsyncObserver<'TResult>) : Async =\n { new IAsyncObserver<'TSource> with\n member __.OnNextAsync x = nextAsync aobv.OnNextAsync x\n member __.OnErrorAsync err = aobv.OnErrorAsync err\n member __.OnCompletedAsync () = aobv.OnCompletedAsync ()\n }\n |> source.SubscribeAsync\n { new IAsyncObservable<'TResult> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns an observable sequence whose elements are the result of invoking the async mapper function on each\n /// element of the source.\n let mapAsync (mapperAsync: 'TSource -> Async<'TResult>) : Stream<'TSource, 'TResult> =\n transformAsync (fun next x -> async {\n let! b = mapperAsync x\n return! next b\n })\n\n /// Returns an observable sequence whose elements are the result of invoking the mapper function on each element of\n /// the source.\n let map (mapper:'TSource -> 'TResult) : Stream<'TSource, 'TResult> =\n transformAsync (fun next x -> next (mapper x) )\n\n /// Returns an observable sequence whose elements are the result of invoking the async mapper function by\n /// incorporating the element's index on each element of the source.\n let mapiAsync (mapper:'TSource*int -> Async<'TResult>) : Stream<'TSource, 'TResult> =\n Combine.zipSeq infinite\n >=> mapAsync mapper\n\n /// Returns an observable sequence whose elements are the result of invoking the mapper function and incorporating\n /// the element's index on each element of the source.\n let mapi (mapper:'TSource*int -> 'TResult) : Stream<'TSource, 'TResult> =\n Combine.zipSeq infinite\n >=> map mapper\n\n /// Projects each element of an observable sequence into an observable sequence and merges the resulting observable\n /// sequences back into one observable sequence.\n let flatMap (mapper:'TSource -> IAsyncObservable<'TResult>) : Stream<'TSource, 'TResult> =\n map mapper\n >=> Combine.mergeInner 0\n\n /// Projects each element of an observable sequence into an observable sequence by incorporating the element's index\n /// on each element of the source. Merges the resulting observable sequences back into one observable sequence.\n let flatMapi (mapper:'TSource*int -> IAsyncObservable<'TResult>) : Stream<'TSource, 'TResult> =\n mapi mapper\n >=> Combine.mergeInner 0\n\n /// Asynchronously projects each element of an observable sequence into an observable sequence and merges the\n /// resulting observable sequences back into one observable sequence.\n let flatMapAsync (mapper:'TSource -> Async>) : Stream<'TSource, 'TResult> =\n mapAsync mapper\n >=> Combine.mergeInner 0\n\n /// Asynchronously projects each element of an observable sequence into an observable sequence by incorporating the\n /// element's index on each element of the source. Merges the resulting observable sequences back into one\n /// observable sequence.\n let flatMapiAsync (mapperAsync:'TSource*int -> Async>) : Stream<'TSource, 'TResult> =\n mapiAsync mapperAsync\n >=> Combine.mergeInner 0\n\n let concatMap (mapper:'TSource -> IAsyncObservable<'TResult>) : Stream<'TSource, 'TResult> =\n map mapper\n >=> Combine.mergeInner 1\n\n type InnerSubscriptionCmd<'T> =\n | InnerObservable of IAsyncObservable<'T>\n | InnerCompleted of int\n | Completed\n | Dispose\n\n /// Transforms an observable sequence of observable sequences into an observable sequence producing values only from\n /// the most recent observable sequence.\n let switchLatest (source: IAsyncObservable>) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv : IAsyncObserver<'TSource>) =\n let safeObv, autoDetach = autoDetachObserver aobv\n let innerAgent =\n let obv (mb: MailboxProcessor>) (id: int) = {\n new IAsyncObserver<'TSource> with\n member __.OnNextAsync x = safeObv.OnNextAsync x\n member __.OnErrorAsync err = safeObv.OnErrorAsync err\n member __.OnCompletedAsync () = async {\n mb.Post (InnerCompleted id)\n }\n }\n\n MailboxProcessor.Start(fun inbox ->\n let rec messageLoop (current: IAsyncRxDisposable option, isStopped, currentId) = async {\n let! cmd = inbox.Receive ()\n\n let! (current', isStopped', currentId') = async {\n match cmd with\n | InnerObservable xs ->\n let nextId = currentId + 1\n if current.IsSome then\n do! current.Value.DisposeAsync ()\n let! inner = xs.SubscribeAsync (obv inbox nextId)\n return Some inner, isStopped, nextId\n | InnerCompleted idx ->\n if isStopped && idx = currentId then\n do! safeObv.OnCompletedAsync ()\n return (None, true, currentId)\n else\n return (current, isStopped, currentId)\n | Completed ->\n if current.IsNone then\n do! safeObv.OnCompletedAsync ()\n return (current, true, currentId)\n | Dispose ->\n if current.IsSome then\n do! current.Value.DisposeAsync ()\n return (None, true, currentId)\n }\n\n return! messageLoop (current', isStopped', currentId')\n }\n\n messageLoop (None, false, 0)\n )\n\n async {\n let obv (ns: Notification>) =\n async {\n match ns with\n | OnNext xs -> InnerObservable xs |> innerAgent.Post\n | OnError e -> do! safeObv.OnErrorAsync e\n | OnCompleted -> innerAgent.Post Completed\n }\n\n let! dispose = AsyncObserver obv |> source.SubscribeAsync |> autoDetach\n let cancel () =\n async {\n do! dispose.DisposeAsync ()\n innerAgent.Post Dispose\n }\n return AsyncDisposable.Create cancel\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Asynchronosly transforms the items emitted by an source sequence into observable streams, and mirror those items\n /// emitted by the most-recently transformed observable sequence.\n let flatMapLatestAsync (mapperAsync: 'TSource -> Async>) : Stream<'TSource, 'TResult> =\n mapAsync mapperAsync\n >=> switchLatest\n\n /// Transforms the items emitted by an source sequence into observable streams, and mirror those items emitted by\n /// the most-recently transformed observable sequence.\n let flatMapLatest (mapper: 'TSource -> IAsyncObservable<'TResult>) : Stream<'TSource, 'TResult> =\n map mapper\n >=> switchLatest\n\n /// Returns an observable sequence containing the first sequence's elements, followed by the elements of the handler\n /// sequence in case an exception occurred.\n let catch (handler: exn -> IAsyncObservable<'TSource>) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv: IAsyncObserver<'TSource>) =\n async {\n let mutable disposable = AsyncDisposable.Empty\n\n let rec action (source: IAsyncObservable<_>) = async {\n let _obv = {\n new IAsyncObserver<'TSource> with\n member __.OnNextAsync x = aobv.OnNextAsync x\n member __.OnErrorAsync err =\n let nextSource = handler err\n action nextSource\n\n member __.OnCompletedAsync () = aobv.OnCompletedAsync ()\n\n }\n do! disposable.DisposeAsync ()\n let! subscription = source.SubscribeAsync _obv\n disposable <- subscription\n }\n do! action source\n\n return AsyncDisposable.Create disposable.DisposeAsync\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n let retry (retryCount: int) (source: IAsyncObservable<'TSource>) =\n let mutable count = retryCount\n\n let factory exn =\n match count with\n | 0 -> Create.fail exn\n | _ ->\n count <- count - 1\n source\n\n catch factory source\n\n type Cmd =\n | Connect\n | Dispose\n\n /// Share a single subscription among multple observers. Returns a new Observable that multicasts (shares) the\n /// original Observable. As long as there is at least one Subscriber this Observable will be subscribed and emitting\n /// data. When all subscribers have unsubscribed it will unsubscribe from the source Observable.\n let share (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let dispatch, stream = Subjects.subject<'TSource> ()\n\n let mb = MailboxProcessor.Start(fun inbox ->\n let rec messageLoop (count: int) (subscription: IAsyncRxDisposable) = async {\n let! cmd = inbox.Receive ()\n\n let! count', subscription' =\n async {\n match cmd with\n | Connect ->\n if count = 0 then\n let! disposable = source.SubscribeAsync dispatch\n return count + 1, disposable\n else\n return count + 1, subscription\n | Dispose ->\n if count = 1 then\n do! subscription.DisposeAsync ()\n return count - 1, AsyncDisposable.Empty\n else\n return count - 1, subscription\n }\n return! messageLoop count' subscription'\n }\n messageLoop 0 AsyncDisposable.Empty)\n\n let subscribeAsync (aobv: IAsyncObserver<'TSource>) =\n async {\n mb.Post Connect\n\n let! disposable = stream.SubscribeAsync aobv\n let cancel () =\n mb.Post Dispose\n disposable.DisposeAsync ()\n\n return AsyncDisposable.Create cancel\n }\n\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n let toObservable (source: IAsyncObservable<'TSource>) : IObservable<'TSource> =\n let mutable subscription : IAsyncRxDisposable = AsyncDisposable.Empty\n\n { new IObservable<'TSource> with\n member __.Subscribe obv =\n async {\n let aobv = obv.ToAsyncObserver ()\n let! disposable = source.SubscribeAsync aobv\n subscription <- disposable\n } |> Async.Start'\n\n subscription.ToDisposable ()\n }","namespace FSharp.Control\n\nopen System\nopen System.Threading\n\nopen FSharp.Control.Core\n\n/// Overloads and extensions for AsyncObservable\n[]\nmodule AsyncObservable =\n type IAsyncObservable<'TSource> with\n /// Repeat each element of the sequence n times Subscribes the async observer to the async observable, ignores\n /// the disposable\n member this.RunAsync (obv: IAsyncObserver<'TSource>) =\n this.SubscribeAsync obv |> Async.Ignore\n\n /// Subscribes the observer function (`Notification{'a} -> Async{unit}`) to the AsyncObservable, ignores the\n /// disposable.\n member this.RunAsync<'a> (obv: Notification<'TSource> -> Async) =\n this.SubscribeAsync (AsyncObserver obv) |> Async.Ignore\n\n member this.Run (obv: IAsyncObserver<'TSource>) =\n this.RunAsync obv |> Async.Start'\n\n /// Subscribes the async observer function (`Notification{'a} -> Async{unit}`) to the AsyncObservable\n member this.SubscribeAsync<'TSource> (obv: Notification<'TSource> -> Async) : Async =\n this.SubscribeAsync (AsyncObserver obv)\n\n /// Returns an observable sequence that contains the elements of the given sequences concatenated together.\n let (++) source other = Combine.concatSeq [source; other]\n\n\n[]\nmodule Observable =\n type IObservable<'a> with\n /// Subscribes a dispatch function taking notifications.\n member this.Subscribe<'a> (dispatch: Notification<'a> -> unit) : IDisposable =\n this.Subscribe (Observer dispatch)\n\n /// Convert observable (IObservable) to async observable (IAsyncObservable).\n member this.ToAsyncObservable<'a> () : IAsyncObservable<'a> =\n { new IAsyncObservable<'a> with\n member __.SubscribeAsync aobv =\n async {\n let obv = aobv.ToObserver ()\n let disposable = this.Subscribe obv\n return disposable.ToAsyncDisposable ()\n }\n }\n\n/// A single module that contains all the operators. Nicer and shorter way than writing AsyncObservable. We want to\n/// prefix our operators so we don't mix e.g. `map` with other modules.\nmodule AsyncRx =\n\n // Aggregate Region\n\n /// Groups the elements of an observable sequence according to a specified key mapper function. Returns a sequence\n /// of observable groups, each of which corresponds to a given key.\n let groupBy (keyMapper: 'a -> 'g) (source: IAsyncObservable<'a>) : IAsyncObservable> =\n Aggregation.groupBy keyMapper source\n\n /// Applies an accumulator function over an observable sequence and returns each intermediate result. The seed value\n /// is used as the initial accumulator value. Returns an observable sequence containing the accumulated values.\n let scanInit (initial: 's) (accumulator: 's -> 'a -> 's) (source: IAsyncObservable<'a>) : IAsyncObservable<'s> =\n Aggregation.scanInitAsync initial (fun s x -> async { return accumulator s x } ) source\n\n /// Applies an async accumulator function over an observable sequence and returns each intermediate result. The seed\n /// value is used as the initial accumulator value. Returns an observable sequence containing the accumulated\n /// values.\n let scanInitAsync (initial: 's) (accumulator: 's -> 'a -> Async<'s>) (source: IAsyncObservable<'a>) : IAsyncObservable<'s> =\n Aggregation.scanInitAsync initial accumulator source\n\n /// Applies an async accumulator function over an observable sequence and returns each intermediate result. The\n /// first value is used as the initial accumulator value. Returns an observable sequence containing the accumulated\n /// values.\n let scan (accumulator: 'a -> 'a -> 'a) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Aggregation.scanAsync (fun s x -> async { return accumulator s x } ) source\n\n /// Applies an async accumulator function over an observable sequence and returns each intermediate result. The\n /// first value is used as the initial accumulator value. Returns an observable sequence containing the accumulated\n /// values.\n let scanAsync (accumulator: 'a -> 'a -> Async<'a>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Aggregation.scanAsync accumulator source\n\n let reduceAsync (accumulator: 'a -> 'a -> Async<'a>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Aggregation.reduceAsync accumulator source\n\n let max (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Aggregation.max source\n\n let min (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Aggregation.min source\n\n // Combine Region\n\n /// Merges the specified observable sequences into one observable sequence by combining elements of the sources into\n /// tuples. Returns an observable sequence containing the combined results.\n let combineLatest (other: IAsyncObservable<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a*'b> =\n Combine.combineLatest other source\n\n /// Concatenates an observable sequence with another observable sequence.\n let concat (other : IAsyncObservable<'a>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Combine.concatSeq [source; other]\n\n /// Returns an observable sequence that contains the elements of each given sequences, in sequential order.\n let concatSeq (sources: seq>) : IAsyncObservable<'a> =\n Combine.concatSeq sources\n\n /// Merges an observable sequence of observable sequences into an observable sequence.\n let mergeInner (source: IAsyncObservable>) : IAsyncObservable<'a> =\n Combine.mergeInner 0 source\n\n /// Merges an observable sequence with another observable sequence.\n let merge (other : IAsyncObservable<'a>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Create.ofSeq [source; other] |> mergeInner\n\n /// Merges a sequence of observable sequences.\n let mergeSeq (sources: seq>) : IAsyncObservable<'a> =\n Create.ofSeq sources |> mergeInner\n\n /// Prepends a sequence of values to an observable sequence. Returns the source sequence prepended with the\n /// specified values.\n let startWith (items : seq<'a>) (source: IAsyncObservable<'a>) =\n Combine.concatSeq [Create.ofSeq items; source]\n\n /// Merges the specified observable sequences into one observable sequence by combining the values into tuples only\n /// when the first observable sequence produces an element. Returns the combined observable sequence.\n let withLatestFrom (other: IAsyncObservable<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a*'b> =\n Combine.withLatestFrom other source\n\n /// Zip given sequence with source. Combines one and one item from each stream into one tuple.\n let zipSeq (sequence: seq<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a*'b> =\n Combine.zipSeq sequence source\n\n // Create Region\n\n /// Creates an async observable (`AsyncObservable{'a}`) from the\n /// given subscribe function.\n let create (subscribe : IAsyncObserver<'a> -> Async) : IAsyncObservable<'a> =\n Create.create subscribe\n\n // Returns an observable sequence that invokes the specified factory\n // function whenever a new observer subscribes.\n let defer (factory: unit -> IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Create.defer factory\n\n /// Returns an observable sequence with no elements.\n let empty<'a> () : IAsyncObservable<'a> =\n Create.empty<'a> ()\n\n /// Returns an empty observable sequence that never completes.\n let never<'a> () : IAsyncObservable<'a> =\n Create.never<'a> ()\n\n /// Returns the observable sequence that terminates exceptionally with the specified exception.\n let fail<'a> (error: exn) : IAsyncObservable<'a> =\n Create.fail<'a> error\n\n /// Returns an observable sequence that triggers the increasing sequence starting with 0 after msecs and then\n /// repeats with the given period.\n let interval (msecs: int) (period: int) : IAsyncObservable =\n Create.interval msecs period\n\n /// Returns the async observable sequence whose single element is the result of the given async workflow.\n let ofAsync (workflow: Async<'a>) : IAsyncObservable<'a> =\n Create.ofAsync workflow\n\n let ofAsyncWorker (worker: IAsyncObserver<'a> -> CancellationToken -> Async) : IAsyncObservable<'a> =\n Create.ofAsyncWorker worker\n\n /// Returns the async observable sequence whose elements are pulled from the given enumerable sequence.\n let ofSeq (xs: seq<'a>) : IAsyncObservable<'a> =\n Create.ofSeq xs\n\n /// Returns an observable sequence containing the single specified element.\n let single (x : 'a) : IAsyncObservable<'a> =\n Create.single x\n\n /// Returns an observable sequence that triggers the value 0 after the given duetime.\n let timer (dueTime: int) : IAsyncObservable =\n Create.timer dueTime\n\n // Filter Region\n\n /// Applies the given function to each element of the stream and returns the stream comprised of the results for\n /// each element where the function returns Some with some value.\n let choose (chooser: 'a -> 'b option) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Filter.choose chooser source\n\n /// Applies the given async function to each element of the stream and returns the stream comprised of the results\n /// for each element where the function returns Some with some value.\n let chooseAsync (chooser: 'a -> Async<'b option>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Filter.chooseAsync chooser source\n\n /// Return an observable sequence only containing the distinct contiguous elementsfrom the source sequence.\n let distinctUntilChanged (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Filter.distinctUntilChanged source\n\n /// Bypasses a specified number of elements in an observable sequence and then returns the remaining elements.\n let skip (count: int) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n Filter.skip count source\n\n /// Filters the elements of an observable sequence based on a predicate. Returns an observable sequence that\n /// contains elements from the input sequence that satisfy the condition.\n let filter (predicate: 'a -> bool) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Filter.filter predicate source\n\n /// Filters the elements of an observable sequence based on an async predicate. Returns an observable sequence that\n /// contains elements from the input sequence that satisfy the condition.\n let filterAsync (predicate: 'a -> Async) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Filter.filterAsync predicate source\n\n /// Returns a specified number of contiguous elements from the start of an observable sequence.\n let take (count: int) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Filter.take count source\n\n /// Returns a specified number of contiguous elements from the end of an observable sequence.\n let takeLast (count: int) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Filter.takeLast count source\n\n /// Returns the values from the source observable sequence until the other observable sequence produces a value.\n let takeUntil (other: IAsyncObservable<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Filter.takeUntil other source\n\n\n // Timeshift Region\n\n /// Ignores values from an observable sequence which are followed by\n /// another value before the given timeout.\n let debounce (msecs: int) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Timeshift.debounce msecs source\n\n /// Time shifts the observable sequence by the given timeout. The\n /// relative time intervals between the values are preserved.\n let delay (msecs: int) (source: IAsyncObservable<_>) : IAsyncObservable<'a> =\n Timeshift.delay msecs source\n\n /// Samples the observable sequence at each interval.\n let sample (msecs: int) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Timeshift.sample msecs source\n\n // Transform Region\n\n /// Returns an observable sequence containing the first sequence's elements, followed by the elements of the handler\n /// sequence in case an exception occurred.\n let catch (handler: exn -> IAsyncObservable<'a>) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Transform.catch handler source\n\n /// Retries the given Observable retryCount number of times.\n let retry (retryCount: int) (source: IAsyncObservable<'a>) : IAsyncObservable<'a>=\n Transform.retry retryCount source\n\n /// Projects each element of an observable sequence into an observable sequence and merges the resulting observable\n /// sequences back into one observable sequence.\n let flatMap (mapper:'a -> IAsyncObservable<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.flatMap mapper source\n\n /// Asynchronously projects each element of an observable sequence into an observable sequence and merges the\n /// resulting observable sequences back into one observable sequence.\n let flatMapAsync (mapperAsync:'a -> Async>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.flatMapAsync mapperAsync source\n\n /// Projects each element of an observable sequence into an observable sequence by incorporating the element's index\n /// on each element of the source. Merges the resulting observable sequences back into one observable sequence.\n let flatMapi (mapper:'a*int -> IAsyncObservable<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.flatMapi mapper source\n\n /// Asynchronously projects each element of an observable sequence into an observable sequence by incorporating the\n /// element's index on each element of the source. Merges the resulting observable sequences back into one\n /// observable sequence.\n let flatMapiAsync (mapperAsync:'a*int -> Async>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.flatMapiAsync mapperAsync source\n\n /// Transforms the items emitted by an source sequence into observable streams, and mirror those items emitted by\n /// the most-recently transformed observable sequence.\n let flatMapLatest (mapper: 'a -> IAsyncObservable<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.flatMapLatest mapper source\n\n /// Asynchronosly transforms the items emitted by an source sequence into observable streams, and mirror those items\n /// emitted by the most-recently transformed observable sequence.\n let flatMapLatestAsync (mapperAsync: 'a -> Async>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.flatMapLatestAsync mapperAsync source\n\n let concatMap (mapper:'a -> IAsyncObservable<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.concatMap mapper source\n\n /// Returns an observable sequence whose elements are the result of invoking the mapper function on each element of\n /// the source.\n let map (mapper:'a -> 'b) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.map mapper source\n\n /// Returns an observable sequence whose elements are the result of invoking the async mapper function on each\n /// element of the source.\n let mapAsync (mapperAsync: 'a -> Async<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.mapAsync mapperAsync source\n\n /// Returns an observable sequence whose elements are the result of invoking the mapper function and incorporating\n /// the element's index on each element of the source.\n let mapi (mapper:'a*int -> 'b) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.mapi mapper source\n\n /// Returns an observable sequence whose elements are the result of invoking the async mapper function by\n /// incorporating the element's index on each element of the source.\n let mapiAsync (mapper:'a*int -> Async<'b>) (source: IAsyncObservable<'a>) : IAsyncObservable<'b> =\n Transform.mapiAsync mapper source\n\n /// Transforms an observable sequence of observable sequences into an observable sequence producing values only from\n /// the most recent observable sequence.\n let switchLatest (source: IAsyncObservable>) : IAsyncObservable<'a> =\n Transform.switchLatest source\n\n /// Share a single subscription among multple observers. Returns a new Observable that multicasts (shares) the\n /// original Observable. As long as there is at least one Subscriber this Observable will be subscribed and emitting\n /// data. When all subscribers have unsubscribed it will unsubscribe from the source Observable.\n let share (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Transform.share source\n\n /// Convert an async observable to an observable.\n let toObservable (source: IAsyncObservable<'a>) : IObservable<'a> =\n Transform.toObservable source\n\n // Subjects Region\n\n /// A subject is both an observable sequence as well as an observer. Each notification is broadcasted to all\n /// subscribed observers.\n let subject<'a> () : IAsyncObserver<'a> * IAsyncObservable<'a> =\n Subjects.subject<'a> ()\n\n /// A mailbox subject is a subscribable mailbox. Each message is broadcasted to all subscribed observers.\n let mbSubject<'a> () : MailboxProcessor>*IAsyncObservable<'a> =\n Subjects.mbSubject<'a> ()\n\n /// A cold subject that only supports a single subscriber. Will await the caller if no-one is subscribing.\n let singleSubject<'a> () : IAsyncObserver<'a> * IAsyncObservable<'a> =\n Subjects.singleSubject<'a> ()\n\n // Tap Region\n\n /// Tap asynchronously into the stream performing side effects by the given async actions.\n let tapAsync (onNextAsync: 'a -> Async) (onErrorAsync: exn -> Async) (onCompletedAsync: unit -> Async) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Tap.tapAsync onNextAsync onErrorAsync onCompletedAsync source\n\n /// Tap asynchronously into the stream performing side effects by the given `onNextAsync` action.\n let tapOnNextAsync (onNextAsync: 'a -> Async) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Tap.tapOnNextAsync onNextAsync source\n\n /// Tap synchronously into the stream performing side effects by the given `onNext` action.\n let tapOnNext (onNext: 'a -> unit) (source: IAsyncObservable<'a>) : IAsyncObservable<'a> =\n Tap.tapOnNext onNext source\n","namespace FSharp.Control\n\nopen System.Collections.Generic\nopen FSharp.Control.Core\n\n[]\nmodule internal Filter =\n /// Applies the given async function to each element of the stream and returns the stream comprised of the results\n /// for each element where the function returns Some with some value.\n let chooseAsync (chooser: 'TSource -> Async<'TResult option>) : Stream<'TSource, 'TResult> =\n Transform.transformAsync (fun next a -> async {\n match! chooser a with\n | Some b -> return! next b\n | None -> return ()\n })\n\n /// Applies the given function to each element of the stream and returns the stream comprised of the results for\n /// each element where the function returns Some with some value.\n let choose (chooser: 'TSource -> 'TResult option) : Stream<'TSource, 'TResult> =\n Transform.transformAsync (fun next a ->\n match chooser a with\n | Some b -> next b\n | None -> Async.empty\n )\n\n /// Filters the elements of an observable sequence based on an async predicate. Returns an observable sequence that\n /// contains elements from the input sequence that satisfy the condition.\n let filterAsync (predicate: 'TSource -> Async) : Stream<'TSource> =\n Transform.transformAsync (fun next a -> async {\n match! predicate a with\n | true -> return! next a\n | _ -> return ()\n })\n\n\n /// Filters the elements of an observable sequence based on a predicate. Returns an observable sequence that\n /// contains elements from the input sequence that satisfy the condition.\n let filter (predicate: 'TSource -> bool) : Stream<'TSource> =\n Transform.transformAsync (fun next a ->\n match predicate a with\n | true -> next a\n | _ -> Async.empty\n )\n\n /// Return an observable sequence only containing the distinct contiguous elementsfrom the source sequence.\n let distinctUntilChanged (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv : IAsyncObserver<'TSource>) =\n let safeObv, autoDetach = autoDetachObserver aobv\n let agent = MailboxProcessor.Start(fun inbox ->\n let rec messageLoop (latest: Notification<'TSource>) = async {\n let! n = inbox.Receive ()\n\n let! latest' = async {\n match n with\n | OnNext x ->\n if n <> latest then\n try\n do! safeObv.OnNextAsync x\n with\n | ex -> do! safeObv.OnErrorAsync ex\n | OnError err ->\n do! safeObv.OnErrorAsync err\n | OnCompleted ->\n do! safeObv.OnCompletedAsync ()\n return n\n }\n\n return! messageLoop latest'\n }\n\n messageLoop OnCompleted // Use as sentinel value as it will not match any OnNext value\n )\n\n async {\n let obv n =\n async {\n agent.Post n\n }\n return! AsyncObserver obv |> source.SubscribeAsync |> autoDetach\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Bypasses a specified number of elements in an observable sequence and then returns the remaining elements.\n let skip (count: int) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let subscribeAsync (obvAsync : IAsyncObserver<'TSource>) =\n let safeObv, autoDetach = autoDetachObserver obvAsync\n\n async {\n let mutable remaining = count\n\n let _obv (n : Notification<'TSource>) =\n async {\n match n with\n | OnNext x ->\n if remaining <= 0 then\n do! safeObv.OnNextAsync x\n else\n remaining <- remaining - 1\n\n | OnError ex -> do! safeObv.OnErrorAsync ex\n | OnCompleted -> do! safeObv.OnCompletedAsync ()\n }\n\n return! source.SubscribeAsync (AsyncObserver.Create _obv) |> autoDetach\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns a specified number of contiguous elements from the start of an observable sequence.\n let take (count: int) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let subscribeAsync (obvAsync : IAsyncObserver<'TSource>) =\n let safeObv, autoDetach = autoDetachObserver obvAsync\n\n async {\n let mutable remaining = count\n\n let _obv (n : Notification<'TSource>) : Async =\n match n, remaining with\n | OnNext x, n when n > 1 ->\n remaining <- n - 1\n safeObv.OnNextAsync x\n | OnNext x, n when n = 1 ->\n async {\n remaining <- 0\n do! safeObv.OnNextAsync x\n do! safeObv.OnCompletedAsync ()\n }\n | OnNext _, _ -> Async.empty\n | OnError ex, _ -> safeObv.OnErrorAsync ex\n | OnCompleted, _ -> safeObv.OnCompletedAsync ()\n\n return! source.SubscribeAsync (AsyncObserver.Create _obv) |> autoDetach\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns a specified number of contiguous elements from the end of an observable sequence.\n let takeLast (count: int) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv : IAsyncObserver<'TSource>) =\n let safeObv, autoDetach = autoDetachObserver aobv\n let queue = List<'TSource> ()\n\n async {\n let _obv (n : Notification<'TSource>) =\n async {\n match n with\n | OnNext x ->\n queue.Add x\n if queue.Count > count then\n queue.RemoveAt 0\n | OnError ex -> do! safeObv.OnErrorAsync ex\n | OnCompleted ->\n for item in queue do\n do! safeObv.OnNextAsync item\n do! safeObv.OnCompletedAsync ()\n }\n\n return! source.SubscribeAsync (AsyncObserver.Create _obv) |> autoDetach\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Returns the values from the source observable sequence until the other observable sequence produces a value.\n let takeUntil (other: IAsyncObservable<'TResult>) (source: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> =\n let subscribeAsync (aobv : IAsyncObserver<'TSource>) =\n let safeObv, autoDetach = autoDetachObserver aobv\n\n async {\n let _obv (n : Notification<'TResult>) =\n match n with\n | OnNext x -> safeObv.OnCompletedAsync ()\n | OnError ex -> safeObv.OnErrorAsync ex\n | OnCompleted -> Async.empty\n\n let! sub2 = AsyncObserver _obv |> other.SubscribeAsync\n let! sub1 = source.SubscribeAsync safeObv |> autoDetach\n\n return AsyncDisposable.Composite [ sub1; sub2 ]\n }\n { new IAsyncObservable<'TSource> with member __.SubscribeAsync o = subscribeAsync o }\n","namespace FSharp.Control\nopen System.Threading\n\nopen FSharp.Control.Core\n\ntype QueryBuilder () =\n member this.Zero () : IAsyncObservable<_> = Create.empty ()\n member this.Yield (x: 'TSource) : IAsyncObservable<'TSource> = Create.single x\n member this.YieldFrom (xs: IAsyncObservable<'TSource>) : IAsyncObservable<'TSource> = xs\n member this.Combine (xs: IAsyncObservable<'TSource>, ys: IAsyncObservable<'TSource>) =\n Combine.concatSeq [xs; ys]\n member this.Delay (fn) = fn ()\n member this.Bind(source: IAsyncObservable<'TSource>, fn: 'TSource -> IAsyncObservable<'TResult>) : IAsyncObservable<'TResult> =\n Transform.flatMap fn source\n member x.For(source: IAsyncObservable<_>, func: 'TSource -> IAsyncObservable<'TResult>) : IAsyncObservable<'TResult> =\n Transform.concatMap func source\n\n // Async to AsyncObservable conversion\n member this.Bind (source: Async<'TSource>, fn: 'TSource -> IAsyncObservable<'TResult>) =\n Create.ofAsync source\n |> Transform.flatMap fn\n member this.YieldFrom (xs: Async<'x>) = Create.ofAsync xs\n\n // Sequence to AsyncObservable conversion\n member x.For(source: seq<'TSource>, func: 'TSource -> IAsyncObservable<'TResult>) : IAsyncObservable<'TResult> =\n Create.ofSeq source\n |> Transform.concatMap func\n\n[]\nmodule QueryBuilder =\n /// Query builder for an async reactive event source\n let asyncRx = QueryBuilder ()\n\n /// We extend AsyncBuilder to use `use!` for resource managemnt when using async builder.\n type AsyncBuilder with\n member builder.Using(resource:#IAsyncRxDisposable, f: #IAsyncRxDisposable -> Async<'TSource>) =\n let mutable x = 0\n let disposeFunction _ =\n#if !FABLE_COMPILER\n if Interlocked.CompareExchange(&x, 1, 0) = 0 then\n#endif\n resource.DisposeAsync()\n |> Async.Start' // Dispose is best effort.\n\n async.TryFinally(f resource, disposeFunction)\n\n","namespace Fable.Reaction\n\nopen System.Threading\n\nopen Browser\nopen Browser.Types\n\nopen Fable.Core.JsInterop\nopen Fetch\n\nopen FSharp.Control\n\ntype TaggedStream<'msg, 'tag> = IAsyncObservable<'msg> * 'tag\n\n/// AsyncRx Extensions\n[]\nmodule AsyncRx =\n /// Returns an observable that produces a notification when the\n /// promise resolves. The observable will also complete after\n /// producing an event.\n let ofPromise (pr: Fable.Core.JS.Promise<_>) =\n QueryBuilderExtension.ofPromise pr\n\n let msgRequest (url:string) (encode: 'msg -> string) (decode: string -> 'msg option) (msgs: IAsyncObservable<'msg>) =\n asyncRx {\n let! body = msgs |> AsyncRx.map encode\n\n let init = [\n Body !!body\n Method Fetch.Types.HttpMethod.POST\n Fetch.requestHeaders [\n HttpRequestHeaders.ContentType \"application/json\"\n ]\n ]\n\n let! response = GlobalFetch.fetch(RequestInfo.Url url, Fetch.requestProps init)\n yield! response.text ()\n }\n\n /// Returns an async observable of Window events.\n let ofEvent<'ev> event : IAsyncObservable<'ev> =\n let cts = new CancellationTokenSource ()\n\n let subscribe (obv: IAsyncObserver<'ev>) : Async =\n async {\n let mb = MailboxProcessor.Start(fun inbox ->\n let rec messageLoop _ = async {\n let! ev = inbox.Receive ()\n do! obv.OnNextAsync ev\n\n return! messageLoop ()\n }\n messageLoop ()\n , cts.Token)\n\n window.addEventListener (event, unbox mb.Post)\n let cancel () = async {\n cts.Cancel ()\n window.removeEventListener (event, unbox mb.Post)\n }\n return AsyncDisposable.Create cancel\n }\n\n AsyncRx.create subscribe\n\n /// Returns an async observable of mouse events.\n let ofMouseMove () : IAsyncObservable = ofEvent \"mousemove\"\n\n /// Debounces an async observable sequence to the animation frame rate.\n let requestAnimationFrame<'msg> (source: IAsyncObservable<'msg>) : IAsyncObservable<'msg> =\n let subscribeAsync (aobv : IAsyncObserver<'msg>) : Async =\n let mutable lastRequest = None\n\n { new IAsyncObserver<'msg> with\n member __.OnNextAsync x = async {\n match lastRequest with\n | Some r -> window.cancelAnimationFrame r\n | _ -> ()\n\n lastRequest <-\n window.requestAnimationFrame (fun _ ->\n aobv.OnNextAsync x |> Async.StartImmediate\n ) |> Some\n }\n member __.OnErrorAsync err = aobv.OnErrorAsync err\n member __.OnCompletedAsync () = aobv.OnCompletedAsync ()\n }\n |> source.SubscribeAsync\n { new IAsyncObservable<'msg> with member __.SubscribeAsync o = subscribeAsync o }\n\n /// Websocket channel operator. Passes string items as ws messages to\n /// the server. Received ws messages will be forwarded down stream.\n /// JSON encode/decode of application messages is left to the client.\n let inline channel (uri: string) (source: IAsyncObservable) : IAsyncObservable =\n Fable.Reaction.WebSocket.channel uri source\n\n /// Websocket message channel operator. Items {'msg} will be encoded\n /// to JSON using `encode` and passed as over the ws channel to the server.\n /// Data received on the ws channel as strings (JSON) will be\n /// decoded using `decode` and forwarded down stream as messages {'msg}.\n let inline msgChannel<'msg> (uri: string) (encode: 'msg -> string) (decode: string -> 'msg option) (source: IAsyncObservable<'msg>) : IAsyncObservable<'msg> =\n Fable.Reaction.WebSocket.msgChannel uri encode decode source\n\n /// Websocket message channel operator. Items {'msg} will be encoded\n /// to JSON using `encode` and passed as over the ws channel to the server.\n /// Data received on the ws channel as strings (JSON) will be\n /// decoded using `decode` and forwarded down stream as messages {Result<'msg, exn>}.\n let msgResultChannel<'msg> (uri: string) (encode: 'msg -> string) (decode: string -> Result<'msg, exn>) (source: IAsyncObservable<'msg>) : IAsyncObservable> =\n Fable.Reaction.WebSocket.msgResultChannel uri encode decode source\n\n /// Tags an async observable with an identifier.\n let tag<'msg, 'tag> (tag : 'tag) (obs: IAsyncObservable<'msg>) : TaggedStream<'msg, 'tag> = obs, tag\n","module Feliz.Bulma.ElementBuilders\r\n\r\nopen Feliz\r\nopen Feliz.Bulma\r\n\r\nmodule Helpers =\r\n let [] private ClassName = \"className\"\r\n\r\n let inline internal getClasses (xs:IReactProperty list) =\r\n xs\r\n |> List.choose (unbox >> function\r\n | (k, v) when k = ClassName -> Some (string v)\r\n | _ -> None)\r\n\r\n let extractClasses (xs:IReactProperty list) =\r\n xs\r\n |> List.rev\r\n |> List.fold (fun (classes, props) x ->\r\n match unbox x with\r\n | (k, v) when k = ClassName -> string v :: classes, props\r\n | _ -> classes, x :: props) ([], [])\r\n\r\n let combineClasses cn (xs:IReactProperty list) =\r\n xs\r\n |> extractClasses\r\n |> fun (classes, props) -> (cn :: classes |> prop.classes) :: props\r\n\r\nmodule Div =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.div (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.div [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.div [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.div [ prop.className cn; prop.text value ]\r\n\r\nmodule Nav =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.nav (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.nav [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Article =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.article (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.article [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Section =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.section (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.section [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Footer =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.footer (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.footer [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Label =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.label (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.label [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.label [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.label [ prop.className cn; prop.text value ]\r\n\r\nmodule Input =\r\n let inline propsWithType (cn:string) (typ: IReactProperty) (xs:IReactProperty list) =\r\n Html.input (typ :: Helpers.combineClasses cn xs)\r\n\r\nmodule Textarea =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.textarea (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.textarea [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Button =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.button (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.button [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.button [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.button [ prop.className cn; prop.text value ]\r\n\r\nmodule Span =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.span (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.span [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.span [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.span [ prop.className cn; prop.text value ]\r\n\r\nmodule Figure =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.figure (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.figure [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Progress =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.progress (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.progress [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.progress [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.progress [ prop.className cn; prop.text value ]\r\n\r\nmodule Table =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.table (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.table [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule H1 =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.h1 (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.h1 [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.h1 [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.h1 [ prop.className cn; prop.text value ]\r\n\r\nmodule H2 =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.h2 (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.h2 [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.h2 [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.h2 [ prop.className cn; prop.text value ]\r\n\r\nmodule H3 =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.h3 (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.h3 [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.h3 [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.h3 [ prop.className cn; prop.text value ]\r\n\r\nmodule H4 =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.h4 (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.h4 [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.h4 [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.h4 [ prop.className cn; prop.text value ]\r\n\r\nmodule H5 =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.h5 (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.h5 [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.h5 [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.h5 [ prop.className cn; prop.text value ]\r\n\r\nmodule H6 =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.h6 (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.h6 [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.h6 [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.h6 [ prop.className cn; prop.text value ]\r\n\r\nmodule Hr =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.hr (Helpers.combineClasses cn xs)\r\n\r\nmodule Aside =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.aside (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.aside [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule P =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.p (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.p [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.p [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.p [ prop.className cn; prop.text value ]\r\n\r\nmodule Ul =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.ul (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.ul [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Li =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.li (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.li [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule Header =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.header (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.header [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n\r\nmodule A =\r\n let inline props (cn:string) (xs:IReactProperty list) = Html.a (Helpers.combineClasses cn xs)\r\n let inline children (cn:string) (children:seq) = Html.a [ prop.className cn; prop.children children ]\r\n let inline valueElm (cn:string) (value:ReactElement) = value |> List.singleton |> children cn\r\n let inline valueStr (cn:string) (value:string) = Html.a [ prop.className cn; prop.text value ]\r\n let inline valueInt (cn:string) (value:int) = Html.a [ prop.className cn; prop.text value ]\r\n","module ViewHelpers\n\nopen Feliz\nopen Feliz.Bulma\n\nlet errorMsg (errMsg : string) dismiss =\n Bulma.notification [\n color.isDanger\n prop.style [ style.padding (length.px 10) ]\n prop.children [\n Html.text errMsg\n Bulma.delete [\n prop.onClick dismiss\n ]\n ]\n ]\n\nlet modalBox onClose (children : seq) =\n Bulma.modal [\n Bulma.modal.isActive\n prop.children [\n Bulma.modalBackground [ prop.onClick onClose ]\n Bulma.modalContent [\n Bulma.box children\n ]\n ]\n ]\n\n\nlet loadingIndicatorSmall () =\n Bulma.button.button [\n prop.style [\n style.custom (\"background\", \"none\")\n style.custom (\"border\", \"none\")\n ]\n Bulma.button.isLoading\n Bulma.button.isSmall\n ]\n\nlet loadingIndicatorMedium () =\n Bulma.button.button [\n prop.style [\n style.custom (\"background\", \"none\")\n style.custom (\"border\", \"none\")\n ]\n Bulma.button.isLoading\n Bulma.button.isMedium\n ]\n\nlet loadingIndicatorLarge () =\n Bulma.button.button [\n prop.style [\n style.custom (\"background\", \"none\")\n style.custom (\"border\", \"none\")\n ]\n Bulma.button.isLoading\n Bulma.button.isLarge\n ]\n\n\nlet productImg prodId (size:float) =\n Html.div [\n prop.style [\n style.display.flex\n style.alignItems.center\n style.justifyContent.center\n style.width (length.rem size)\n style.height (length.rem size)\n style.margin.auto\n style.borderRadius (length.percent 50)\n style.custom (\"border\", \"solid 3px #4d8398\")\n style.overflowY.hidden\n style.overflowX.hidden\n style.backgroundImage (sprintf \"url(%s)\" (sprintf \"/api/product/image/%i\" prodId))\n style.custom (\"background-position\", \"center center\")\n style.backgroundSize.cover\n ]\n ]","namespace Fable.React\r\n\r\nopen System\r\nopen System.Runtime.CompilerServices\r\nopen Fable.Core\r\nopen Fable.Core.JsInterop\r\n\r\n#if FABLE_COMPILER\r\ntype internal Cache() =\r\n static let cache =\r\n let cache = JS.Constructors.Map.Create()\r\n#if DEBUG\r\n // Clear the cache when HMR is fired\r\n Cache.OnHMR(fun () -> cache.clear())\r\n#endif\r\n cache\r\n\r\n static member GetOrAdd(key: string, valueFactory: string->'T): 'T =\r\n if cache.has(key) then cache.get(key) :?> 'T\r\n else let v = valueFactory key in cache.set(key, box v) |> ignore; v\r\n\r\n [ {\r\n if (status === 'apply') $0();\r\n });\r\n }\"\"\")>]\r\n static member OnHMR(callback: unit->unit): unit = jsNative\r\n\r\n []\r\n static member IsHMRApplied: bool = jsNative\r\n#endif\r\n\r\ntype FunctionComponent =\r\n#if !FABLE_REPL_LIB\r\n /// Creates a lazy React component from a function in another file\r\n /// ATTENTION: Requires fable-compiler 2.3 or above\r\n /// Pass the external reference directly into the argument (avoid pipes)\r\n static member inline Lazy(f: 'Props -> ReactElement, fallback: ReactElement): 'Props -> ReactElement =\r\n#if FABLE_COMPILER\r\n let elemType = ReactBindings.React.``lazy``(fun () ->\r\n // React.lazy requires a default export\r\n (importValueDynamic f).``then``(fun x -> createObj [\"default\" ==> x]))\r\n fun props ->\r\n ReactElementType.create\r\n ReactBindings.React.Suspense\r\n (createObj [\"fallback\" ==> fallback])\r\n [ReactElementType.create elemType props []]\r\n#else\r\n fun _ ->\r\n div [] [] // React.lazy is not compatible with SSR, so just use an empty div\r\n#endif\r\n#endif\r\n\r\n /// Creates a function React component that can use hooks to manage the component's life cycle,\r\n /// and is displayed in React dev tools (use `displayName` to customize the name).\r\n /// Uses React.memo if `memoizeWith` is specified (check `equalsButFunctions` and `memoEqualsButFunctions` helpers).\r\n /// When you need a key to optimize collections in React you can use `withKey` argument or define a `key` field in the props object.\r\n static member Of(render: 'Props->ReactElement,\r\n ?displayName: string,\r\n ?memoizeWith: 'Props -> 'Props -> bool,\r\n ?withKey: 'Props -> string\r\n#if FABLE_COMPILER\r\n ,[] ?__callingMemberName: string\r\n ,[] ?__callingSourceFile: string\r\n ,[] ?__callingSourceLine: int\r\n#endif\r\n ): 'Props -> ReactElement =\r\n#if FABLE_COMPILER\r\n let prepareRenderFunction _ =\r\n let displayName = defaultArg displayName __callingMemberName.Value\r\n render?displayName <- displayName\r\n let elemType =\r\n match memoizeWith with\r\n | Some areEqual ->\r\n#if DEBUG\r\n // In development mode, force rerenders always when HMR is fired\r\n let areEqual x y =\r\n not Cache.IsHMRApplied && areEqual x y\r\n#endif\r\n let memoElement = ReactElementType.memoWith areEqual render\r\n memoElement?displayName <- \"Memo(\" + displayName + \")\"\r\n memoElement\r\n | None -> ReactElementType.ofFunction render\r\n fun props ->\r\n let props =\r\n match withKey with\r\n | Some f -> props?key <- f props; props\r\n | None -> props\r\n ReactElementType.create elemType props []\r\n\r\n // Cache the render function to prevent recreating the component every time when FunctionComponent.Of\r\n // is called inside another function (including generic values: let MyCom<'T> = ...)\r\n let cacheKey = __callingSourceFile.Value + \"#L\" + (string __callingSourceLine.Value)\r\n Cache.GetOrAdd(cacheKey, prepareRenderFunction)\r\n#else\r\n let elemType = ReactElementType.ofFunction render\r\n fun props ->\r\n ReactElementType.create elemType props []\r\n#endif\r\n","import {\r\n useEffect as useEffectReact,\r\n useLayoutEffect as useLayoutEffectReact,\r\n useDebugValue as useDebugValueReact } from 'react'\r\n\r\nexport const useEffect = getDisposable => {\r\n useEffectReact(() => {\r\n const disposable = getDisposable()\r\n return () => {\r\n disposable.Dispose();\r\n }\r\n })\r\n}\r\n\r\nexport const useEffectWithDeps = (getDisposable, deps) => {\r\n useEffectReact(() => {\r\n const disposable = getDisposable()\r\n return () => {\r\n disposable.Dispose();\r\n }\r\n }, deps)\r\n}\r\n\r\nexport const useLayoutEffect = getDisposable => {\r\n useLayoutEffectReact(() => {\r\n const disposable = getDisposable()\r\n return () => {\r\n disposable.Dispose();\r\n }\r\n })\r\n}\r\n\r\nexport const useLayoutEffectWithDeps = (getDisposable, deps) => {\r\n useLayoutEffectReact(() => {\r\n const disposable = getDisposable()\r\n return () => {\r\n disposable.Dispose();\r\n }\r\n }, deps)\r\n}\r\n\r\nexport const useDebugValue = (value, formatter) => useDebugValueReact(value, formatter)","namespace Feliz\r\n\r\nopen System\r\nopen System.ComponentModel\r\nopen Fable.Core\r\nopen Fable.Core.JsInterop\r\nopen Browser.Types\r\n\r\nmodule internal ReactInterop =\r\n let useDebugValueWithFormatter<'t>(value: 't, formatter: 't -> string) : unit = import \"useDebugValue\" \"./ReactInterop.js\"\r\n let useEffect (effect: obj) : unit = import \"useEffect\" \"./ReactInterop.js\"\r\n let useEffectWithDeps (effect: obj) (deps: obj) : unit = import \"useEffectWithDeps\" \"./ReactInterop.js\"\r\n let useLayoutEffect (effect: obj) : unit = import \"useLayoutEffect\" \"./ReactInterop.js\"\r\n let useLayoutEffectWithDeps (effect: obj) (deps: obj) : unit = import \"useLayoutEffectWithDeps\" \"./ReactInterop.js\"\r\n\r\n[]\r\n[]\r\nmodule Helpers =\r\n let inline optDispose (disposeOption: #IDisposable option) =\r\n { new IDisposable with member _.Dispose () = disposeOption |> Option.iter (fun d -> d.Dispose()) }\r\n\r\ntype internal Internal() =\r\n static let propsWithKey (withKey: ('props -> string) option) props =\r\n match withKey with\r\n | Some f ->\r\n props?key <- f props\r\n props\r\n | None -> props\r\n static member\r\n functionComponent\r\n (\r\n renderElement: 'props -> ReactElement,\r\n ?name: string,\r\n ?withKey: 'props -> string\r\n )\r\n : 'props -> Fable.React.ReactElement =\r\n name |> Option.iter (fun name -> renderElement?displayName <- name)\r\n fun props ->\r\n let props = props |> propsWithKey withKey\r\n Interop.reactApi.createElement(renderElement, props)\r\n static member\r\n memo\r\n (\r\n renderElement: 'props -> ReactElement,\r\n ?name: string,\r\n ?areEqual: 'props -> 'props -> bool,\r\n ?withKey: 'props -> string\r\n )\r\n : 'props -> Fable.React.ReactElement =\r\n let memoElementType = Interop.reactApi.memo(renderElement, (defaultArg areEqual (unbox null)))\r\n name |> Option.iter (fun name -> renderElement?displayName <- name)\r\n fun props ->\r\n let props = props |> propsWithKey withKey\r\n Interop.reactApi.createElement(memoElementType, props)\r\n\r\ntype React =\r\n /// Creates a disposable instance by providing the implementation of the dispose member.\r\n static member createDisposable(dispose: unit -> unit) =\r\n { new IDisposable with member _.Dispose() = dispose() }\r\n\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline fragment xs = Fable.React.Helpers.fragment [] xs\r\n\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline keyedFragment(key: int, xs) = Fable.React.Helpers.fragment [ !!(\"key\", key) ] xs\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline keyedFragment(key: string, xs) = Fable.React.Helpers.fragment [ !!(\"key\", key) ] xs\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline keyedFragment(key: System.Guid, xs) = Fable.React.Helpers.fragment [ !!(\"key\", string key) ] xs\r\n\r\n /// The `useState` hook that create a state variable for React function components from a initialization function.\r\n []\r\n static member useState<'t>(initializer: unit -> 't) = Interop.reactApi.useState 't,'t>(initializer)\r\n\r\n /// Accepts a reducer and returns the current state paired with a dispatch.\r\n []\r\n static member useReducer(update, initialState) = Interop.reactApi.useReducer update initialState\r\n\r\n /// The `useEffect` hook that creates a disposable effect for React function components\r\n /// This effect has no dependencies which means the effect is re-executed on every re-render.\r\n /// To make the effect run once (for example you subscribe once to web sockets) then provide an empty array\r\n /// for the dependencies: `React.useEffect(disposableEffect, [| |])`.\r\n []\r\n static member useEffect(effect: unit -> #IDisposable) : unit = ReactInterop.useEffect(effect)\r\n /// The `useEffect` hook that creates a disposable effect for React function components\r\n /// This effect has no dependencies which means the effect is re-executed on every re-render.\r\n /// To make the effect run once (for example you subscribe once to web sockets) then provide an empty array\r\n /// for the dependencies: `React.useEffect(disposableEffect, [| |])`.\r\n []\r\n static member inline useEffect(effect: unit -> #IDisposable option) = React.useEffect(effect >> Helpers.optDispose)\r\n /// The `useEffect` hook that creates a disposable effect for React function components.\r\n /// This effect takes a array of *dependencies*.\r\n /// Whenever any of these dependencies change, the effect is re-executed. To execute the effect only once,\r\n /// you have to explicitly provide an empty array for the dependencies: `React.useEffect(effect, [| |])`.\r\n []\r\n static member useEffect(effect: unit -> #IDisposable, dependencies: obj []) : unit = ReactInterop.useEffectWithDeps effect dependencies\r\n /// The `useEffect` hook that creates a disposable effect for React function components.\r\n /// This effect takes a array of *dependencies*.\r\n /// Whenever any of these dependencies change, the effect is re-executed. To execute the effect only once,\r\n /// you have to explicitly provide an empty array for the dependencies: `React.useEffect(effect, [| |])`.\r\n []\r\n static member inline useEffect(effect: unit -> #IDisposable option, dependencies: obj []) = React.useEffect(effect >> Helpers.optDispose, dependencies)\r\n\r\n /// The `useLayoutEffect` hook that creates a disposable effect for React function components\r\n /// This effect has no dependencies which means the effect is re-executed on every re-render.\r\n /// To make the effect run once (for example you subscribe once to web sockets) then provide an empty array\r\n /// for the dependencies: `React.useLayoutEffect(disposableEffect, [| |])`.\r\n /// The signature is identical to useEffect, but it fires synchronously after all DOM mutations. Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside useLayoutEffect will be flushed synchronously, before the browser has a chance to paint.\r\n []\r\n static member useLayoutEffect(effect: unit -> #IDisposable) : unit = ReactInterop.useLayoutEffect(effect)\r\n /// The `useLayoutEffect` hook that creates a disposable effect for React function components\r\n /// This effect has no dependencies which means the effect is re-executed on every re-render.\r\n /// To make the effect run once (for example you subscribe once to web sockets) then provide an empty array\r\n /// for the dependencies: `React.useLayoutEffect(disposableEffect, [| |])`.\r\n /// The signature is identical to useEffect, but it fires synchronously after all DOM mutations. Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside useLayoutEffect will be flushed synchronously, before the browser has a chance to paint.\r\n []\r\n static member inline useLayoutEffect(effect: unit -> #IDisposable option) = React.useLayoutEffect(effect >> Helpers.optDispose)\r\n /// The `useLayoutEffect` hook that creates a disposable effect for React function components.\r\n /// This effect takes a array of *dependencies*.\r\n /// Whenever any of these dependencies change, the effect is re-executed. To execute the effect only once,\r\n /// you have to explicitly provide an empty array for the dependencies: `React.useLayoutEffect(effect, [| |])`.\r\n /// The signature is identical to useEffect, but it fires synchronously after all DOM mutations. Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside useLayoutEffect will be flushed synchronously, before the browser has a chance to paint.\r\n []\r\n static member useLayoutEffect(effect: unit -> #IDisposable, dependencies: obj []) : unit = ReactInterop.useLayoutEffectWithDeps effect dependencies\r\n /// The `useLayoutEffect` hook that creates a disposable effect for React function components.\r\n /// This effect takes a array of *dependencies*.\r\n /// Whenever any of these dependencies change, the effect is re-executed. To execute the effect only once,\r\n /// you have to explicitly provide an empty array for the dependencies: `React.useLayoutEffect(effect, [| |])`.\r\n /// The signature is identical to useEffect, but it fires synchronously after all DOM mutations. Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside useLayoutEffect will be flushed synchronously, before the browser has a chance to paint.\r\n []\r\n static member inline useLayoutEffect(effect: unit -> #IDisposable option, dependencies: obj []) =\r\n React.useLayoutEffect(effect >> Helpers.optDispose, dependencies)\r\n /// The signature is identical to useEffect, but it fires synchronously after all DOM mutations. Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside useLayoutEffect will be flushed synchronously, before the browser has a chance to paint.\r\n /// This effect is executed on every (re)render\r\n []\r\n static member useLayoutEffect(effect: unit -> unit) =\r\n ReactInterop.useLayoutEffect\r\n (fun _ ->\r\n effect()\r\n React.createDisposable(ignore))\r\n\r\n /// The signature is identical to useEffect, but it fires synchronously after all DOM mutations. Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside useLayoutEffect will be flushed synchronously, before the browser has a chance to paint.\r\n []\r\n static member useLayoutEffect(effect: unit -> unit, dependencies: obj []) =\r\n ReactInterop.useLayoutEffectWithDeps\r\n (fun _ ->\r\n effect()\r\n React.createDisposable(ignore))\r\n dependencies\r\n\r\n []\r\n static member inline useLayoutEffectOnce(effect: unit -> unit) =\r\n React.useLayoutEffect(effect, [| |])\r\n\r\n []\r\n static member inline useLayoutEffectOnce(effect: unit -> #IDisposable) =\r\n React.useLayoutEffect(effect, [| |])\r\n\r\n []\r\n static member inline useLayoutEffectOnce(effect: unit -> #IDisposable option) =\r\n React.useLayoutEffect(effect, [| |])\r\n\r\n /// React hook to define and use an effect only once when a function component renders for the first time.\r\n /// This an alias for `React.useEffect(effect, [| |])` which explicitly provide an empty array for the dependencies of the effect which means the effect will only run once.\r\n []\r\n static member useEffectOnce(effect: unit -> unit) =\r\n React.useEffect(effect, [| |])\r\n\r\n /// React hook to define and use a disposable effect only once when a function component renders for the first time.\r\n /// This an alias for `React.useEffect(effect, [| |])` which explicitly provide an empty array for the dependencies of the effect which means the effect will only run once.\r\n []\r\n static member useEffectOnce(effect: unit -> #IDisposable) =\r\n React.useEffect(effect, [| |])\r\n /// React hook to define and use a disposable effect only once when a function component renders for the first time.\r\n /// This an alias for `React.useEffect(effect, [| |])` which explicitly provide an empty array for the dependencies of the effect which means the effect will only run once.\r\n []\r\n static member useEffectOnce(effect: unit -> #IDisposable option) =\r\n React.useEffect(effect >> Helpers.optDispose, [| |])\r\n\r\n /// The `useEffect` hook that creates an effect for React function components.\r\n /// This effect is executed *every time* the function component re-renders.\r\n ///\r\n /// To make the effect run only once, write: `React.useEffect(effect, [| |])` which explicitly states\r\n /// that this effect has no dependencies and should only run once on initial render.\r\n []\r\n static member useEffect(effect: unit -> unit) : unit =\r\n ReactInterop.useEffect\r\n (fun _ ->\r\n effect()\r\n React.createDisposable(ignore))\r\n\r\n /// The `useEffect` hook that creates an effect for React function components. This effect takes a array of *dependencies*.\r\n /// Whenever any of these dependencies change, the effect is re-executed. To execute the effect only once,\r\n /// you have to explicitly provide an empty array for the dependencies: `React.useEffect(effect, [| |])`.\r\n []\r\n static member useEffect(effect: unit -> unit, dependencies: obj []) : unit =\r\n ReactInterop.useEffectWithDeps\r\n (fun _ ->\r\n effect()\r\n React.createDisposable(ignore))\r\n dependencies\r\n\r\n /// Can be used to display a label for custom hooks in React DevTools.\r\n []\r\n static member useDebugValue(value: string) =\r\n ReactInterop.useDebugValueWithFormatter(value, id)\r\n\r\n /// Can be used to display a label for custom hooks in React DevTools.\r\n []\r\n static member useDebugValue(value: 't, formatter: 't -> string) =\r\n ReactInterop.useDebugValueWithFormatter(value, formatter)\r\n\r\n /// \r\n /// The `useCallback` hook. Returns a memoized callback. Pass an inline callback and an array of dependencies.\r\n /// `useCallback` will return a memoized version of the callback that only changes if one of the dependencies has changed.\r\n /// \r\n /// A callback function to be memoized.\r\n /// An array of dependencies upon which the callback function depends.\r\n /// If not provided, defaults to empty array, representing dependencies that never change.\r\n []\r\n static member useCallback(callbackFunction: 'a -> 'b, ?dependencies: obj array) =\r\n Interop.reactApi.useCallback callbackFunction (defaultArg dependencies [||])\r\n\r\n /// Returns a mutable ref object whose .current property is initialized to the passed argument (initialValue). The returned object will persist for the full lifetime of the component.\r\n ///\r\n /// Essentially, useRef is like a container that can hold a mutable value in its .current property.\r\n []\r\n static member useRef(initialValue) = Interop.reactApi.useRef(initialValue)\r\n\r\n /// A specialized version of React.useRef() that creates a reference to an input element.\r\n ///\r\n /// Useful for controlling the internal properties and methods that element, for example to enable focus().\r\n []\r\n static member useInputRef() : IRefValue = React.useRef(None)\r\n\r\n /// A specialized version of React.useRef() that creates a reference to a button element.\r\n []\r\n static member useButtonRef() : IRefValue = React.useRef(None)\r\n\r\n /// A specialized version of React.useRef() that creates a reference to a generic HTML element.\r\n ///\r\n /// Useful for controlling the internal properties and methods that element, for integration with third-party libraries that require a Html element.\r\n []\r\n static member useElementRef() : IRefValue = React.useRef(None)\r\n\r\n /// \r\n /// The `useMemo` hook. Returns a memoized value. Pass a \"create\" function and an array of dependencies.\r\n /// `useMemo` will only recompute the memoized value when one of the dependencies has changed.\r\n /// \r\n /// A create function returning a value to be memoized.\r\n /// An array of dependencies upon which the create function depends.\r\n /// If not provided, defaults to empty array, representing dependencies that never change.\r\n []\r\n static member useMemo(createFunction: unit -> 'a, ?dependencies: obj array) =\r\n Interop.reactApi.useMemo createFunction (defaultArg dependencies [||])\r\n\r\n //\r\n // React.functionComponent\r\n //\r\n\r\n /// \r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// A render function that returns an element.\r\n /// A function to derive a component key from the props.\r\n static member functionComponent(render: 'props -> ReactElement, ?withKey: 'props -> string) =\r\n Internal.functionComponent(render, ?withKey=withKey)\r\n\r\n /// \r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// The component name to display in the React dev tools.\r\n /// A render function that returns an element.\r\n /// A function to derive a component key from the props.\r\n static member functionComponent(name: string, render: 'props -> ReactElement, ?withKey: 'props -> string) =\r\n Internal.functionComponent(render, name, ?withKey=withKey)\r\n\r\n /// \r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// A render function that returns a list of elements.\r\n /// A function to derive a component key from the props.\r\n static member functionComponent(render: 'props -> #seq, ?withKey: 'props -> string) =\r\n Internal.functionComponent(render >> React.fragment, ?withKey=withKey)\r\n\r\n /// \r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// A render function that returns a list of elements.\r\n /// The component name to display in the React dev tools.\r\n /// A function to derive a component key from the props.\r\n static member functionComponent(name: string, render: 'props -> #seq, ?withKey: 'props -> string) =\r\n Internal.functionComponent(render >> React.fragment, name, ?withKey=withKey)\r\n\r\n //\r\n // React.memo\r\n //\r\n\r\n /// \r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// A render function or a React.functionComponent.\r\n /// A custom comparison function to use instead of React's default shallow compare.\r\n /// A function to derive a component key from the props.\r\n static member memo(render: 'props -> ReactElement, ?withKey: 'props -> string, ?areEqual: 'props -> 'props -> bool) =\r\n Internal.memo(render, ?areEqual=areEqual, ?withKey=withKey)\r\n\r\n /// \r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// The component name to display in the React dev tools.\r\n /// A render function or a React.functionComponent.\r\n /// A custom comparison function to use instead of React's default shallow compare.\r\n /// A function to derive a component key from the props.\r\n static member memo(name: string, render: 'props -> ReactElement, ?withKey: 'props -> string, ?areEqual: 'props -> 'props -> bool) =\r\n Internal.memo(render, name, ?areEqual=areEqual, ?withKey=withKey)\r\n\r\n /// \r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// A render function that returns a list of elements.\r\n /// A function to derive a component key from the props.\r\n /// A custom comparison function to use instead of React's default shallow compare.\r\n static member memo(render: 'props -> #seq, ?withKey: 'props -> string, ?areEqual: 'props -> 'props -> bool) =\r\n Internal.memo(render >> React.fragment, ?areEqual=areEqual, ?withKey=withKey)\r\n\r\n /// \r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// \r\n /// The component name to display in the React dev tools.\r\n /// A render function that returns a list of elements.\r\n /// A function to derive a component key from the props.\r\n /// A custom comparison function to use instead of React's default shallow compare.\r\n static member memo(name: string, render: 'props -> #seq, ?withKey: 'props -> string, ?areEqual: 'props -> 'props -> bool) =\r\n Internal.memo(render >> React.fragment, name, ?areEqual=areEqual, ?withKey=withKey)\r\n\r\n //\r\n // React.useContext\r\n //\r\n\r\n /// \r\n /// Creates a Context object. When React renders a component that subscribes to this Context object\r\n /// it will read the current context value from the closest matching Provider above it in the tree.\r\n /// \r\n /// The component name to display in the React dev tools.\r\n /// A default value that is only used when a component does not have a matching Provider above it in the tree.\r\n static member createContext<'a>(?name: string, ?defaultValue: 'a) =\r\n let contextObject = Interop.reactApi.createContext (defaultArg defaultValue Fable.Core.JS.undefined<'a>)\r\n name |> Option.iter (fun name -> contextObject?displayName <- name)\r\n contextObject\r\n\r\n /// \r\n /// A Provider component that allows consuming components to subscribe to context changes.\r\n /// \r\n /// A context object returned from a previous React.createContext call.\r\n /// The context value to be provided to descendant components.\r\n /// A child element.\r\n static member contextProvider(contextObject: Fable.React.IContext<'a>, contextValue: 'a, child: ReactElement) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Provider, createObj [\"value\" ==> contextValue], [child])\r\n /// \r\n /// A Provider component that allows consuming components to subscribe to context changes.\r\n /// \r\n /// A context object returned from a previous React.createContext call.\r\n /// The context value to be provided to descendant components.\r\n /// A sequence of child elements.\r\n static member contextProvider(contextObject: Fable.React.IContext<'a>, contextValue: 'a, children: #seq) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Provider, createObj [\"value\" ==> contextValue], children)\r\n\r\n /// \r\n /// A Consumer component that subscribes to context changes.\r\n /// \r\n /// A context object returned from a previous React.createContext call.\r\n /// A render function that returns an element.\r\n static member contextConsumer(contextObject: Fable.React.IContext<'a>, render: 'a -> ReactElement) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Consumer, null, [!!render])\r\n /// \r\n /// A Consumer component that subscribes to context changes.\r\n /// \r\n /// A context object returned from a previous React.createContext call.\r\n /// A render function that returns a sequence of elements.\r\n static member contextConsumer(contextObject: Fable.React.IContext<'a>, render: 'a -> #seq) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Consumer, null, [!!(render >> React.fragment)])\r\n\r\n /// \r\n /// The `useContext` hook. Accepts a context object (the value returned from React.createContext) and returns the current context value for that context.\r\n /// The current context value is determined by the value prop of the nearest Provider component above the calling component in the tree.\r\n /// \r\n /// A context object returned from a previous React.createContext call.\r\n []\r\n static member useContext(contextObject: Fable.React.IContext<'a>) = Interop.reactApi.useContext contextObject\r\n\r\n /// \r\n /// Creates a callback that keeps the same reference during the entire lifecycle of the component while having access to\r\n /// the current value of the dependencies on every call.\r\n ///\r\n /// This hook should only be used for (like a dispatch) functions that are not used to provide information during render.\r\n ///\r\n /// This is not a complete replacement for the `useCallback` hook. It returns a callback that does not need explicit\r\n /// dependency declarations and never causes a re-render.\r\n /// \r\n /// The function call.\r\n []\r\n static member useCallbackRef(callback: ('a -> 'b)) =\r\n let lastRenderCallbackRef = React.useRef(callback)\r\n\r\n let callbackRef =\r\n React.useCallback((fun (arg: 'a) ->\r\n lastRenderCallbackRef.current(arg)\r\n ), [||])\r\n\r\n React.useLayoutEffect(fun () ->\r\n // render is commited - it's safe to update the callback\r\n lastRenderCallbackRef.current <- callback\r\n )\r\n\r\n callbackRef\r\n\r\n /// \r\n /// Just like React.useState except that the updater function uses the previous state of the state variable as input and allows you to compute the next value using it.\r\n /// This is extremely useful in cases where defining helpers functions inside the definition of a React function component would actually cache the initial value (because they become closures) during first render as opposed to using the current value after multiple render cycles.\r\n /// \r\n static member useStateWithUpdater (initial: 't) : ('t * (('t -> 't) -> unit)) = import \"useState\" \"react\"\r\n\r\n /// \r\n /// Forwards a given ref, allowing you to pass it further down to a child.\r\n /// \r\n /// A render function that returns an element.\r\n static member forwardRef(render: ('props * IRefValue<'t> -> ReactElement)) : ('props * IRefValue<'t> -> ReactElement) =\r\n let forwardRefType = Interop.reactApi.forwardRef(Func<'props,IRefValue<'t>,ReactElement> (fun props ref -> render(props,ref)))\r\n fun (props, ref) ->\r\n Interop.reactApi.createElement(forwardRefType, {| props = props; ref = ref |} |> JsInterop.toPlainJsObj)\r\n\r\n /// \r\n /// Forwards a given ref, allowing you to pass it further down to a child.\r\n /// \r\n /// The component name to display in the React dev tools.\r\n /// A render function that returns an element.\r\n static member forwardRef(name: string, render: ('props * IRefValue<'t> -> ReactElement)) : ('props * IRefValue<'t> -> ReactElement) =\r\n let forwardRefType = Interop.reactApi.forwardRef(Func<'props,IRefValue<'t>,ReactElement> (fun props ref -> render(props,ref)))\r\n render?displayName <- name\r\n fun (props, ref) ->\r\n Interop.reactApi.createElement(forwardRefType, {| props = props; ref = ref |} |> JsInterop.toPlainJsObj)\r\n\r\n /// \r\n /// Highlights potential problems in an application by enabling additional checks\r\n /// and warnings for descendants. As well as double rendering function components.\r\n ///\r\n /// This *does not do anything* in production mode. You do not need to hide it\r\n /// with compiler directives.\r\n /// \r\n /// The elements that will be rendered with additional\r\n /// checks and warnings.\r\n static member strictMode(children: ReactElement list) =\r\n Interop.reactApi.createElement(Interop.reactApi.StrictMode, None, children)\r\n\r\n /// \r\n /// Lets you define a component that is loaded dynamically. Which helps with code\r\n /// splitting.\r\n /// \r\n /// \r\n /// The dynamicImport of the component.\r\n ///\r\n /// Such as `let asyncComponent : JS.Promise ReactElement> = JsInterop.importDynamic \"./CodeSplitting.fs\"`.\r\n ///\r\n /// Where you would then pass in `asyncComponent`.\r\n /// \r\n /// The props to be passed to the component.\r\n static member lazy'<'t,'props>(dynamicImport: JS.Promise<'t>, props: 'props) =\r\n Interop.reactApi.createElement(Interop.reactApi.lazy'(fun () -> dynamicImport),props)\r\n /// \r\n /// Lets you define a component that is loaded dynamically. Which helps with code\r\n /// splitting.\r\n /// \r\n /// \r\n /// The dynamicImport of the component.\r\n ///\r\n /// Such as `let asyncComponent : JS.Promise ReactElement> = JsInterop.importDynamic \"./CodeSplitting.fs\"`.\r\n ///\r\n /// Where you would then pass in `fun () -> asyncComponent`.\r\n /// \r\n /// The props to be passed to the component.\r\n static member lazy'<'t,'props>(dynamicImport: unit -> JS.Promise<'t>, props: 'props) =\r\n Interop.reactApi.createElement(Interop.reactApi.lazy'(dynamicImport),props)\r\n\r\n /// \r\n /// Lets you specify a loading indicator whenever a child element is not yet ready\r\n /// to render.\r\n ///\r\n /// Currently this is only usable with `React.lazy'`.\r\n /// \r\n /// The elements that will be rendered within the suspense block.\r\n static member suspense(children: ReactElement list) =\r\n Interop.reactApi.createElement(Interop.reactApi.Suspense, {| fallback = Html.none |} |> JsInterop.toPlainJsObj, children)\r\n /// \r\n /// Lets you specify a loading indicator whenever a child element is not yet ready\r\n /// to render.\r\n ///\r\n /// Currently this is only usable with `React.lazy'`.\r\n /// \r\n /// The elements that will be rendered within the suspense block.\r\n /// The element that will be rendered while the children are loading.\r\n static member suspense(children: ReactElement list, fallback: ReactElement) =\r\n Interop.reactApi.createElement(Interop.reactApi.Suspense, {| fallback = fallback |} |> JsInterop.toPlainJsObj, children)\r\n\r\n /// \r\n /// Allows you to override the behavior of a given ref.\r\n ///\r\n /// \r\n /// The ref you want to override.\r\n /// A function that returns a new ref with changed behavior.\r\n []\r\n static member useImperativeHandle(ref: IRefValue<'t>, createHandle: unit -> 't) =\r\n Interop.reactApi.useImperativeHandleNoDeps ref createHandle\r\n\r\n /// \r\n /// Lets you specify a loading indicator whenever a child element is not yet ready\r\n /// to render.\r\n ///\r\n /// Currently this is only usable with `React.lazy'`.\r\n /// \r\n /// The ref you want to override.\r\n /// A function that returns a new ref with changed behavior.\r\n /// An array of dependencies upon which the imperative handle function depends.\r\n []\r\n static member useImperativeHandle(ref: IRefValue<'t>, createHandle: unit -> 't, dependencies: obj []) =\r\n Interop.reactApi.useImperativeHandle ref createHandle dependencies\r\n\r\n /// \r\n /// Creates a CancellationToken that is cancelled when a component is unmounted.\r\n /// \r\n []\r\n static member inline useCancellationToken () =\r\n let cts = React.useRef(new System.Threading.CancellationTokenSource())\r\n let token = React.useRef(cts.current.Token)\r\n\r\n React.useEffectOnce(fun () ->\r\n React.createDisposable(fun () ->\r\n cts.current.Cancel()\r\n cts.current.Dispose()\r\n )\r\n )\r\n\r\n token\r\n\r\n[]\r\nmodule ReactOverloadMagic =\r\n type React with\r\n /// Creates a disposable instance by merging multiple IDisposables.\r\n static member inline createDisposable([] disposables: #IDisposable []) =\r\n React.createDisposable(fun () ->\r\n disposables\r\n |> Array.iter (fun d -> d.Dispose())\r\n )\r\n /// Creates a disposable instance by merging multiple IDisposable options.\r\n static member inline createDisposable([] disposables: #IDisposable option []) =\r\n React.createDisposable(fun () ->\r\n disposables\r\n |> Array.iter (Option.iter (fun d -> d.Dispose()))\r\n )\r\n /// Creates a disposable instance by merging multiple IDisposable refs.\r\n static member inline createDisposable([] disposables: IRefValue<#IDisposable> []) =\r\n React.createDisposable(fun () ->\r\n disposables\r\n |> Array.iter (fun d -> d.current.Dispose())\r\n )\r\n\r\n /// Creates a disposable instance by merging multiple IDisposable refs.\r\n static member inline createDisposable([] disposables: IRefValue<#IDisposable option> []) =\r\n React.createDisposable(fun () ->\r\n disposables\r\n |> Array.iter (fun d -> d.current |> Option.iter (fun d -> d.Dispose()))\r\n )\r\n\r\n /// The `useState` hook that create a state variable for React function components.\r\n []\r\n static member useState<'t>(initial: 't) = Interop.reactApi.useState<'t,'t>(initial)\r\n","module App\n\nopen System\nopen Elmish\nopen Thoth.Json\nopen Thoth.Fetch\nopen Shared\nopen Feliz\nopen Feliz.Bulma\nopen Feliz.Router\n\ntype SubModel =\n | Overview\n | LoginModel of Login.Model\n | AdminModel of Admin.Model\n | AccountModel of Account.Model\n\ntype Model = {\n CurrentUrl : string list\n UserSession : ApiDataTypes.UserSession option\n SubMdl : SubModel\n}\n\ntype Message =\n | Authenticate of Result\n | Exn of Exception\n | LoginMessage of Login.Message\n | AdminMessage of Admin.Message\n | AccountMessage of Account.Message\n | Logout\n | GotoOverview\n //| GotoAdmin\n | GotoAccount\n | UrlChanged of string list\n\nlet locale = Locale.Locale\n\nlet init () =\n match LocalStorage.tryGetSession () with\n | Ok us ->\n let p () =\n Promises.tryPost\n \"/api/auth/validate\" \"\"\n let a () =\n Promises.tryPost\n \"/api/auth/admin/validate\" \"\"\n let cmds = Cmd.batch [\n Cmd.OfPromise.perform p () Authenticate\n ]\n { CurrentUrl = []; UserSession = Some us; SubMdl = Overview }, cmds\n | _ ->\n let mdl, cmd = Login.init ()\n let cmds = Cmd.batch [\n Cmd.map LoginMessage cmd\n ]\n {\n CurrentUrl = []\n UserSession = None\n SubMdl = LoginModel mdl\n }, cmds\n\nlet private handleAuthenticate model res =\n match res with\n | Ok x when x -> model, Cmd.none\n | _ ->\n LocalStorage.deleteSession ()\n let mdl, cmd = Login.init ()\n { model with SubMdl = LoginModel mdl }, Cmd.map LoginMessage cmd\n\nlet private handleLoginMessage model lmsg =\n match model.SubMdl with\n | LoginModel lmdl ->\n match lmsg with\n | Login.Message.Success uSession ->\n { model with UserSession = Some uSession; SubMdl = Overview }, Cmd.none\n | _ ->\n let mdl, cmd = Login.update lmsg lmdl\n { model with SubMdl = LoginModel mdl }, Cmd.map LoginMessage cmd\n | _ -> model, Cmd.none\n\nlet private handleAccountMessage model amsg =\n match model.SubMdl with\n | AccountModel amdl ->\n let mdl, cmd = Account.update amsg amdl\n { model with SubMdl = AccountModel mdl }, Cmd.none\n | _ -> model, Cmd.none\n\nlet private handleAdminMessage model amsg =\n match model.SubMdl with\n | AdminModel amdl ->\n let mdl, cmd = Admin.update amsg amdl\n { model with SubMdl = AdminModel mdl }, Cmd.map AdminMessage cmd\n | _ -> model, Cmd.none\n\nlet private handleLogout model =\n LocalStorage.deleteSession ()\n let mdl, cmd = Login.init ()\n { model with\n UserSession = None\n SubMdl = LoginModel mdl\n }, Cmd.map LoginMessage cmd\n\nlet private handleGotoOverview model =\n match model.UserSession with\n | Some us -> { model with SubMdl = Overview }, Cmd.none\n | None ->\n LocalStorage.deleteSession ()\n let mdl, cmd = Login.init ()\n { model with SubMdl = LoginModel mdl }, Cmd.map LoginMessage cmd\n(*\nlet private handleGotoAdmin model =\n match model.UserSession with\n | Some us when us.IsAdmin ->\n let mdl, cmd = Admin.init us\n { model with SubMdl = AdminModel mdl }, Cmd.map AdminMessage cmd\n | _ -> model, Cmd.none\n*)\n\nlet private handleGotoAccount model =\n match model.UserSession with\n | Some us ->\n let mdl, cmd = Account.init us\n { model with SubMdl = AccountModel mdl }, Cmd.map AccountMessage cmd\n | None ->\n LocalStorage.deleteSession ()\n let mdl, cmd = Login.init ()\n { model with SubMdl = LoginModel mdl }, Cmd.map LoginMessage cmd\n\nlet private handleUrlChanged model path =\n match path with\n | [\"passwordreset\"; token ] -> model, Cmd.none\n | _ -> model, Cmd.none\n\nlet update (msg: Message) (model : Model) =\n match msg with\n | Authenticate res -> handleAuthenticate model res\n | LoginMessage lmsg -> handleLoginMessage model lmsg\n | AdminMessage amsg -> handleAdminMessage model amsg\n | AccountMessage amsg -> handleAccountMessage model amsg\n | Logout -> handleLogout model\n | GotoOverview -> handleGotoOverview model\n //| GotoAdmin -> handleGotoAdmin model\n | GotoAccount -> handleGotoAccount model\n | UrlChanged path -> handleUrlChanged model path\n | Exn exn -> printfn \"EXCEPTION: %A\" exn; model, Cmd.none\n\nlet navBar model dispatch =\n let navLogo =\n Bulma.navbarItem.div [\n prop.style [ style.cursor.pointer ]\n prop.onClick(fun _ -> dispatch GotoOverview)\n prop.children [\n //Html.img [ prop.src \"/img/logo.png\" ]\n //Html.span \"North Aid\"\n ]\n ]\n let navBurger updateActive active =\n Bulma.navbarBurger [\n prop.onClick(fun _ -> updateActive (not active))\n prop.children [\n Html.span []\n Html.span []\n Html.span []\n ]\n ]\n let navMenu ddActive updateDD active =\n Bulma.navbarEnd.div [\n match model.UserSession with\n | None -> ()\n | Some us ->\n (*if us.IsAdmin then\n Bulma.navbarItem.div [\n prop.style [ style.cursor.pointer ]\n prop.onClick(fun _ -> dispatch GotoAdmin)\n prop.children [ Html.i [ prop.className \"fas fa-cog\" ] ]\n ]\n *)\n Bulma.navbarItem.div [\n Bulma.navbarItem.hasDropdown\n Bulma.navbarItem.isHoverable\n prop.style [ style.zIndex 10000 ]\n if ddActive then Bulma.navbarItem.isActive\n prop.onClick(fun _ -> updateDD (not ddActive))\n prop.children [\n Bulma.navbarLink.div [\n Html.text us.Firstname\n ]\n Bulma.navbarDropdown.div [\n (*Bulma.navbarItem.div [\n prop.onClick(fun _ -> dispatch GotoAccount)\n prop.style [ style.cursor.pointer]\n prop.text locale.account.account\n ]*)\n //Bulma.navbarDivider []\n Bulma.navbarItem.div [\n prop.onClick(fun _ -> dispatch Logout)\n prop.style [ style.cursor.pointer]\n prop.text locale.fields.logout\n ]\n ]\n ]\n ]\n ]\n let plays = Option.defaultValue \"none\"\n React.functionComponent(\"NavBar\", fun (props : {| isActive : bool; dropdownActive : bool |}) ->\n let active, updateActive = React.useState(props.isActive)\n let ddActive, updateDD = React.useState(props.dropdownActive)\n Bulma.navbar [\n //color.isLight\n prop.children [\n Bulma.navbarBrand.div [\n navLogo\n navBurger updateActive active\n ]\n Bulma.navbarMenu [\n Bulma.navbarMenu.isFixedTop\n if active then Bulma.navbarMenu.isActive\n prop.children [\n Bulma.navbarStart.div []\n navMenu ddActive updateDD active\n ]\n ]\n ]\n ]\n ) {| isActive = false; dropdownActive = false |}\n\nlet homeView =\n Html.div [\n prop.style [\n style.display.flex\n style.width (length.vw 100)\n style.height (length.vh 100)\n style.justifyContent.center\n style.alignItems.center\n ]\n prop.children [\n Html.h3 [\n prop.className \"title is-3\"\n prop.text \"Develop me\"\n ]\n ]\n ]\n\nlet render (model: Model) (dispatch: Message -> unit) =\n Html.div [\n Router.router [\n Router.onUrlChanged (UrlChanged >> dispatch)\n ]\n match model.SubMdl with\n | LoginModel _ -> ()\n | _ -> navBar model dispatch\n match model.SubMdl with\n | LoginModel mdl -> Login.view mdl (LoginMessage >> dispatch)\n | AdminModel mdl -> Admin.view mdl (AdminMessage >> dispatch)\n | AccountModel mdl -> Account.view mdl (AccountMessage >> dispatch)\n | Overview -> \n match model.UserSession with\n | Some us -> Overview.overview us\n | None -> ()\n ]\n","(**\nCmd\n---------\nCore abstractions for dispatching messages in Elmish.\n\n*)\n\nnamespace Elmish\n\nopen System\n\n/// Dispatch - feed new message into the processing loop\ntype Dispatch<'msg> = 'msg -> unit\n\n/// Subscription - return immediately, but may schedule dispatch of a message at any time\ntype Sub<'msg> = Dispatch<'msg> -> unit\n\n/// Cmd - container for subscriptions that may produce messages\ntype Cmd<'msg> = Sub<'msg> list\n\n/// Cmd module for creating and manipulating commands\n[]\nmodule Cmd =\n /// Execute the commands using the supplied dispatcher\n let internal exec onError (dispatch: Dispatch<'msg>) (cmd: Cmd<'msg>) =\n cmd |> List.iter (fun call -> try call dispatch with ex -> onError ex)\n\n /// None - no commands, also known as `[]`\n let none : Cmd<'msg> =\n []\n\n /// When emitting the message, map to another type\n let map (f: 'a -> 'msg) (cmd: Cmd<'a>) : Cmd<'msg> =\n cmd |> List.map (fun g -> (fun dispatch -> f >> dispatch) >> g)\n\n /// Aggregate multiple commands\n let batch (cmds: #seq>) : Cmd<'msg> =\n cmds |> List.concat\n\n /// Command to call the subscriber\n let ofSub (sub: Sub<'msg>) : Cmd<'msg> =\n [sub]\n\n module OfFunc =\n /// Command to evaluate a simple function and map the result\n /// into success or error (of exception)\n let either (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n try\n task arg\n |> (ofSuccess >> dispatch)\n with x ->\n x |> (ofError >> dispatch)\n [bind]\n\n /// Command to evaluate a simple function and map the success to a message\n /// discarding any possible error\n let perform (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n try\n task arg\n |> (ofSuccess >> dispatch)\n with x ->\n ()\n [bind]\n\n /// Command to evaluate a simple function and map the error (in case of exception)\n let attempt (task: 'a -> unit) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n try\n task arg\n with x ->\n x |> (ofError >> dispatch)\n [bind]\n\n /// Command to issue a specific message\n let result (msg:'msg) : Cmd<'msg> =\n [fun dispatch -> dispatch msg]\n\n module OfAsyncWith =\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let either (start: Async -> unit) \n (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n dispatch (match r with\n | Choice1Of2 x -> ofSuccess x\n | Choice2Of2 x -> ofError x)\n }\n [bind >> start]\n\n /// Command that will evaluate an async block and map the success\n let perform (start: Async -> unit) \n (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n match r with\n | Choice1Of2 x -> dispatch (ofSuccess x)\n | _ -> ()\n }\n [bind >> start]\n\n /// Command that will evaluate an async block and map the error (of exception)\n let attempt (start: Async -> unit) \n (task: 'a -> Async<_>)\n (arg: 'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n match r with\n | Choice2Of2 x -> dispatch (ofError x)\n | _ -> ()\n }\n [bind >> start]\n\n /// Command that will evaluate an async block to the message\n let result (start: Async -> unit) \n (task: Async<'msg>) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task\n dispatch r\n }\n [bind >> start]\n\n module OfAsync =\n#if FABLE_COMPILER\n let start x = Timer.delay 0 (fun _ -> Async.StartImmediate x)\n#else\n let inline start x = Async.Start x\n#endif \n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let inline either (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.either start task arg ofSuccess ofError\n\n /// Command that will evaluate an async block and map the success\n let inline perform (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.perform start task arg ofSuccess\n\n /// Command that will evaluate an async block and map the error (of exception)\n let inline attempt (task: 'a -> Async<_>)\n (arg: 'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.attempt start task arg ofError\n\n /// Command that will evaluate an async block to the message\n let inline result (task: Async<'msg>) : Cmd<'msg> =\n OfAsyncWith.result start task\n\n module OfAsyncImmediate =\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let inline either (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.either Async.StartImmediate task arg ofSuccess ofError\n\n /// Command that will evaluate an async block and map the success\n let inline perform (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.perform Async.StartImmediate task arg ofSuccess\n\n /// Command that will evaluate an async block and map the error (of exception)\n let inline attempt (task: 'a -> Async<_>)\n (arg: 'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.attempt Async.StartImmediate task arg ofError\n\n /// Command that will evaluate an async block to the message\n let inline result (task: Async<'msg>) : Cmd<'msg> =\n OfAsyncWith.result Async.StartImmediate task\n\n#if FABLE_COMPILER\n module OfPromise =\n /// Command to call `promise` block and map the results\n let either (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: #exn -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n (task arg)\n .``then``(ofSuccess >> dispatch)\n .catch(unbox >> ofError >> dispatch)\n |> ignore\n [bind]\n\n /// Command to call `promise` block and map the success\n let perform (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg) =\n let bind dispatch =\n (task arg)\n .``then``(ofSuccess >> dispatch)\n |> ignore\n [bind]\n\n /// Command to call `promise` block and map the error\n let attempt (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofError: #exn -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n (task arg)\n .catch(unbox >> ofError >> dispatch)\n |> ignore\n [bind]\n\n /// Command to dispatch the `promise` result\n let result (task: Fable.Core.JS.Promise<'msg>) =\n let bind dispatch =\n task.``then`` dispatch\n |> ignore\n [bind]\n\n []\n let inline ofPromise (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfPromise.either task arg ofSuccess ofError \n#else\n open System.Threading.Tasks\n module OfTask =\n /// Command to call a task and map the results\n let inline either (task: 'a -> Task<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.either (task >> Async.AwaitTask) arg ofSuccess ofError\n\n /// Command to call a task and map the success\n let inline perform (task: 'a -> Task<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsync.perform (task >> Async.AwaitTask) arg ofSuccess\n\n /// Command to call a task and map the error\n let inline attempt (task: 'a -> Task<_>)\n (arg:'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.attempt (task >> Async.AwaitTask) arg ofError\n\n /// Command and map the task success\n let inline result (task: Task<'msg>) : Cmd<'msg> =\n OfAsync.result (task |> Async.AwaitTask)\n\n []\n let inline ofTask (task: 'a -> Task<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfTask.either task arg ofSuccess ofError\n#endif\n\n // Synonymous with `OfFunc.result`, may be removed in the future\n let inline ofMsg (msg:'msg) : Cmd<'msg> =\n OfFunc.result msg\n\n []\n let inline ofAsync (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.either task arg ofSuccess ofError\n\n []\n let inline ofFunc (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfFunc.either task arg ofSuccess ofError\n\n []\n let inline performFunc (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfFunc.perform task arg ofSuccess\n\n []\n let attemptFunc (task: 'a -> unit) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfFunc.attempt task arg ofError\n\n","module Login\n\nopen Feliz\nopen Feliz.Bulma\nopen Elmish\nopen ApiDataTypes\n\ntype FetchError = Thoth.Fetch.FetchError\ntype GenericResult = Result\n\nlet locale = Locale.Locale\n\nmodule PasswordRecovery =\n open Fable.Reaction\n open FSharp.Control\n\n type private Model = {\n Email : string\n ErrorMsg : string option\n Processing : bool\n Sent : bool\n OnClose : unit -> unit\n }\n\n type private Message =\n | UpdateEmail of string\n | Commit of string\n | CommitResponse of GenericResult\n | DismissError\n\n let private init onClose = {\n Email = \"\"\n ErrorMsg = None\n Processing = false\n Sent = false\n OnClose = onClose\n }\n\n let private handleDefault model =\n { model with\n ErrorMsg = Some locale.login.reseterror\n Processing = false\n }\n\n let private handleCommit model (x : string) =\n if x.Length > 0 then\n { model with\n Processing = true\n ErrorMsg = None\n }\n else\n { model with\n ErrorMsg = Some locale.fields.``invalid-email``\n }\n\n let private handleCommitResponse model (res : GenericResult) =\n match res with\n | Ok x ->\n if x.Result = Shared.SuccessIndicator then\n { model with Sent = true }\n else\n { model with\n ErrorMsg = Some x.Message\n Processing = false\n }\n | _ -> handleDefault model\n\n let private update (model : Model) msg =\n match msg with\n | UpdateEmail x -> { model with Email = x }\n | Commit x -> handleCommit model x\n | CommitResponse res -> handleCommitResponse model res\n | DismissError -> { model with ErrorMsg = None }\n\n let private requestReset email =\n let p = Promises.tryPost \"/api/user/initpasswordreset\" email\n AsyncRx.ofPromise p |> AsyncRx.map(CommitResponse)\n\n let private stream model msgs =\n let commit =\n msgs\n |> AsyncRx.choose (\n function\n | Commit x when x.Length > 0 -> Some x\n | _ -> None)\n |> AsyncRx.flatMap requestReset\n AsyncRx.mergeSeq [ msgs; commit ] |> AsyncRx.tag \"msgs\"\n\n let private view model dispatch =\n let content' =\n Bulma.box [\n if not model.Sent then\n Bulma.field.div [\n Bulma.label locale.fields.email\n Bulma.input.email [\n prop.placeholder \"eksempel@eksempel.no\"\n prop.defaultValue model.Email\n prop.onChange(UpdateEmail >> dispatch)\n ]\n ]\n Bulma.button.button [\n prop.style [ style.marginBottom (length.px 10) ]\n Bulma.color.isInfo\n if model.Processing then Bulma.button.isLoading\n prop.onClick(fun _ ->\n if not model.Processing then\n dispatch (Commit model.Email)\n )\n prop.text locale.login.reset\n ]\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg ->\n ViewHelpers.errorMsg errMsg (fun _ ->\n dispatch DismissError)\n else\n Html.div [\n prop.style [\n style.display.flex\n style.justifyContent.center\n style.alignItems.center\n style.minHeight (length.px 50)\n style.flexDirection.column\n style.textAlign.center\n ]\n prop.children [\n Html.p [ Html.text locale.login.resetsent ]\n Bulma.button.button [\n prop.onClick(fun _ -> model.OnClose ())\n prop.style [ style.marginTop (length.px 20) ]\n prop.children [\n Bulma.icon [\n Bulma.icon.isLeft\n Bulma.icon.isSmall\n prop.children [\n Html.i [\n prop.className \"fas fa-check\"\n ]\n ]\n ]\n Html.span [ Html.text \"Ok\" ]\n ]\n ]\n ]\n ]\n ]\n Bulma.modal [\n Bulma.modal.isActive\n prop.children [\n Bulma.modalBackground [ prop.onClick(fun _ -> model.OnClose ())]\n Bulma.modalContent [\n prop.style [ style.maxWidth (length.px 350) ]\n prop.children [ content' ]\n ]\n ]\n ]\n\n let passwordRecovery x =\n React.functionComponent(\"PasswordRecovery\", fun (props : {| close : unit -> unit |}) ->\n let initialModel = init props.close\n let model = Fable.React.HookBindings.Hooks.useReducer (update , initialModel)\n let dispatch, _ =\n Reaction.useStatefulStream(model.current, model.update, stream)\n view model.current dispatch\n ) x\n\n\ntype LoginStep =\n | User\n | TFA\n\ntype Model = {\n Step : LoginStep\n Email : string\n Password : string\n TFAToken : string\n RememberMe : bool\n FocusPassword : bool\n ErrorMsg : string option\n Processing : bool\n DisplayRecovery : bool\n}\n\ntype Message =\n | UpdateEmail of string\n | UpdatePassword of string\n | UpdateTFAToken of string\n | ToggleRememberMe\n | DismissError\n | TryLogin\n | LoginResponse of Result\n | Success of UserSession\n | ToggleRecovery\n\nlet init () =\n let rememberMe = LocalStorage.tryGetRememberMe ()\n {\n Step = User\n Email = match rememberMe with | Ok x -> x | _ -> \"\"\n Password = \"\"\n TFAToken = \"\"\n RememberMe = match rememberMe with | Ok _ -> true | _ -> false\n FocusPassword = match rememberMe with | Ok _ -> true | _ -> false\n ErrorMsg = None\n Processing = false\n DisplayRecovery = false\n }, Cmd.none\n\ntype private LoginData = string * string * string\n\nlet private handleUser model =\n if model.Email.Length > 0 && model.Password.Length > 0 then\n let tfaCookie =\n match LocalStorage.tryGetTFACookie () with\n | Ok x -> x\n | _ -> \"\"\n if model.RememberMe then LocalStorage.storeRememberMe model.Email\n let p () =\n Promises.tryPost\n \"/api/auth/signin\" (model.Email, model.Password, tfaCookie)\n let cmd = Cmd.OfPromise.perform p () LoginResponse\n { model with\n Processing = true\n ErrorMsg = None\n }, cmd\n else\n { model with\n ErrorMsg = Some locale.fields.``invalid-username``\n }, Cmd.none\n\nlet private handleTFA model =\n if model.TFAToken.Length > 0 then\n let p () =\n Promises.tryPost\n \"/api/auth/tfa/signin\"\n (model.Email, model.Password, model.TFAToken)\n let cmd = Cmd.OfPromise.perform p () LoginResponse\n { model with Processing = true; ErrorMsg = None }, cmd\n else\n { model with\n ErrorMsg = Some locale.fields.``invalid-code``\n }, Cmd.none\n\nlet private handleLoginRespnese model (res : Result) =\n match res with\n | Error _ ->\n { model with\n Processing = false\n ErrorMsg = Some locale.login.loginerror\n }, Cmd.none\n | Ok x ->\n match x.Result with\n | Shared.SuccessIndicator ->\n if model.Step = TFA && x.Message.Length > 0 then\n LocalStorage.storeTFACookie x.Message\n LocalStorage.storeSession x.Session\n model, Cmd.ofMsg (Success x.Session)\n | Shared.ProgressIndicator ->\n { model with\n Step = TFA\n Processing = false\n ErrorMsg = None\n }, Cmd.none\n | _ ->\n { model with\n Processing = false\n ErrorMsg = Some x.Message\n }, Cmd.none\n\nlet update msg (model : Model) =\n match msg with\n | UpdateEmail x -> { model with Email = x }, Cmd.none\n | UpdatePassword x -> { model with Password = x }, Cmd.none\n | UpdateTFAToken x -> { model with TFAToken = x }, Cmd.none\n | ToggleRememberMe ->\n if model.RememberMe then LocalStorage.deleteRememberMe()\n { model with RememberMe = not model.RememberMe }, Cmd.none\n | DismissError -> { model with ErrorMsg = None }, Cmd.none\n | TryLogin ->\n match model.Step with\n | User -> handleUser model\n | TFA -> handleTFA model\n | LoginResponse res -> handleLoginRespnese model res\n | ToggleRecovery -> { model with DisplayRecovery = not model.DisplayRecovery }, Cmd.none\n | _ -> model, Cmd.none\n\nlet private userField model dispatch =\n Bulma.field.div [\n Bulma.label locale.login.username\n Bulma.control.div [\n control.hasIconsLeft\n prop.children [\n Bulma.input.text [\n if not model.FocusPassword then prop.autoFocus true\n prop.placeholder locale.login.username\n prop.defaultValue model.Email\n prop.required true\n prop.onChange (UpdateEmail >> dispatch)\n prop.id \"loginpage-user\"\n prop.onKeyDown(fun kc ->\n if kc.key = \"Enter\" then\n Utils.tryFocus \"loginpage-password\"\n )\n ]\n Bulma.icon [\n icon.isSmall\n icon.isLeft\n prop.children [\n Html.i [ prop.className \"fa fa-user\" ]\n ]\n ]\n ]\n ]\n ]\n\nlet private passwordField model dispatch =\n Bulma.field.div [\n Bulma.label locale.fields.password\n Bulma.control.div [\n control.hasIconsLeft\n prop.children [\n Bulma.input.password [\n if model.FocusPassword then prop.autoFocus true\n prop.placeholder locale.fields.password\n prop.required true\n prop.onChange (UpdatePassword >> dispatch)\n prop.onKeyDown(fun kc ->\n if kc.key = \"Enter\" then dispatch TryLogin\n )\n prop.id \"loginpage-password\"\n ]\n Bulma.icon [\n icon.isSmall\n icon.isLeft\n prop.children [\n Html.i [ prop.className \"fa fa-lock\" ]\n ]\n ]\n ]\n ]\n ]\n\nlet private tfaField model dispatch =\n Bulma.field.div [\n Bulma.label locale.login.receivedcode\n Bulma.control.div [\n control.hasIconsLeft\n prop.children [\n Bulma.input.text [\n if model.FocusPassword then prop.autoFocus true\n prop.placeholder locale.login.code\n prop.required true\n prop.onChange (UpdateTFAToken >> dispatch)\n prop.onKeyDown(fun kc ->\n if kc.key = \"Enter\" then dispatch TryLogin\n )\n prop.id \"loginpage-tfa\"\n prop.value model.TFAToken\n ]\n Bulma.icon [\n icon.isSmall\n icon.isLeft\n prop.children [\n Html.i [ prop.className \"fa fa-lock\" ]\n ]\n ]\n ]\n ]\n ]\n\nlet private loginField model dispatch =\n let active = model.Email.Length > 0 && model.Password.Length >= 0\n Bulma.field.div [\n Bulma.button.a [\n if model.Processing then Bulma.button.isLoading\n prop.disabled (not active)\n prop.text locale.login.submit\n prop.onClick (fun _ -> dispatch TryLogin)\n prop.style [ style.marginTop (length.px 20) ]\n color.isPrimary\n prop.id \"loginpage-login\"\n ]\n ]\n\nlet private rememberMeField model dispatch =\n Bulma.field.div [\n Bulma.label [\n Bulma.input.checkbox [\n prop.style[ style.marginRight (length.px 5) ]\n prop.isChecked model.RememberMe\n prop.onChange(fun (_ : bool) -> dispatch ToggleRememberMe)\n ]\n Html.text locale.login.rememberme\n ]\n ]\n\nlet private loginForm (model : Model) dispatch =\n Bulma.box [\n (*Html.img [\n prop.src \"/img/logo.png\"\n prop.style [ style.marginBottom (length.px 30) ]\n\n ]*)\n userField model dispatch\n passwordField model dispatch\n rememberMeField model dispatch\n (*Html.a [\n prop.onClick(fun _ -> dispatch ToggleRecovery)\n prop.style [\n style.fontSize (length.rem 0.8)\n style.fontStyle.italic\n ]\n prop.children [ Html.text locale.login.forgotpwd ]\n ]*)\n if model.DisplayRecovery then\n PasswordRecovery.passwordRecovery\n {| close = (fun _ -> dispatch ToggleRecovery) |}\n loginField model dispatch\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg ->\n ViewHelpers.errorMsg errMsg (fun _ -> dispatch DismissError)\n ]\n\n\nlet tfaForm model dispatch =\n Bulma.box [\n Html.img [\n prop.src \"/img/logo.png\"\n prop.style [ style.marginBottom (length.px 30) ]\n ]\n tfaField model dispatch\n loginField model dispatch\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg ->\n ViewHelpers.errorMsg errMsg (fun _ -> dispatch DismissError)\n ]\n\nlet view model dispatch =\n Bulma.hero [\n hero.isFullHeight\n color.isLight\n prop.children [ Bulma.heroBody [ Bulma.container [\n Bulma.columns [\n columns.isCentered\n prop.children [\n Bulma.column [\n column.isOneThird\n prop.children [\n match model.Step with\n | User -> loginForm model dispatch\n | TFA -> tfaForm model dispatch\n ]\n ]\n ]\n ]\n ] ] ]\n ]\n","module Admin\n\nopen Elmish\nopen Thoth.Fetch\nopen Feliz\nopen Feliz.Bulma\nopen ApiDataTypes\n\ntype FetchError = Thoth.Fetch.FetchError\ntype GenericResult = Result\n\ntype EditType =\n | Create\n | Update\n\nlet locale = Locale.Locale\n\nmodule LocationForm =\n open Fable.Reaction\n open FSharp.Control\n\n type private Model = {\n Location : Location.Location\n EditType : EditType\n OnClose : unit -> unit\n Processing : bool\n ErrorMsg : string option\n }\n and private Message =\n | UpdateName of string\n | DismissError\n | Commit of Location.Location\n | Remove of Location.Location\n | CommitResponse of GenericResult\n\n let private init (x: Location.Location option) onClose =\n {\n Location =\n match x with\n | Some y -> y\n | None ->\n {\n Id = -1\n Name = \"\"\n }\n EditType = if x.IsSome then Update else Create\n OnClose = onClose\n Processing = false\n ErrorMsg = None\n }\n\n let private handleCommit model (x : Location.Location) =\n if x.Name.Length > 0 then\n { model with Processing = true }\n else\n { model with ErrorMsg = Some locale.group.``invalid-group`` }\n\n let private handleCommitResponse model (res : GenericResult) =\n match res with\n | Ok x ->\n if x.Result = Shared.SuccessIndicator then\n model.OnClose ()\n model\n else\n { model with ErrorMsg = Some x.Message }\n | Error x ->\n Utils.checkError x\n { model with\n ErrorMsg = Some locale.fields.``action-error`` }\n\n let private update model msg =\n match msg with\n | UpdateName x -> { model with Location = { model.Location with Name = x } }\n | DismissError -> { model with ErrorMsg = None }\n | Commit x -> handleCommit model x\n | Remove _ -> { model with Processing = true }\n | CommitResponse res -> handleCommitResponse model res\n\n let private addOrUpdate (x : Location.Location) =\n let p =\n Promises.tryPost\n \"/api/location/add\" x\n AsyncRx.ofPromise p\n |> AsyncRx.map CommitResponse\n\n let private remove (x : Location.Location) =\n let p =\n Promises.tryPost\n (sprintf \"/api/location/remove/%i\" x.Id) \"\"\n AsyncRx.ofPromise p\n |> AsyncRx.map CommitResponse\n\n let private stream model msgs =\n let commit =\n msgs\n |> AsyncRx.choose (\n function\n | Commit x when (x.Name.Length > 0) -> Some x\n | _ -> None)\n |> AsyncRx.flatMap addOrUpdate\n let remove =\n msgs\n |> AsyncRx.choose (function | Remove x -> Some x | _ -> None)\n |> AsyncRx.flatMap remove\n AsyncRx.mergeSeq [\n msgs\n commit\n remove\n ] |> AsyncRx.tag \"msgs\"\n\n let private view model dispatch =\n let nameInput =\n Bulma.field.div [\n Bulma.label [ Html.text locale.fields.name ]\n Bulma.input.text [\n prop.onChange (UpdateName >> dispatch)\n prop.defaultValue model.Location.Name\n prop.placeholder locale.fields.name\n ]\n ]\n let addButton =\n Bulma.button.button [\n Bulma.color.isInfo\n Bulma.button.isSmall\n if model.Processing then Bulma.button.isLoading\n prop.style [ style.marginRight (length.px 20)]\n prop.onClick (fun _ ->\n if not model.Processing then\n dispatch (Commit model.Location)\n )\n prop.children [\n Bulma.icon [\n Bulma.icon.isSmall\n Bulma.icon.isLeft\n prop.children [\n Html.i [ prop.className\n (if model.EditType = Create then\n \"fas fa-plus\"\n else \"fas fa-sync\")\n ]\n ]\n ]\n Html.span [ Html.text\n (if model.EditType = Create then\n locale.fields.add\n else\n locale.fields.update)\n ]\n ]\n ]\n let cancelButton =\n Bulma.button.button [\n Bulma.button.isSmall\n if model.Processing then Bulma.button.isLoading\n prop.style [ style.marginRight (length.px 20) ]\n prop.onClick (fun _ ->\n if not model.Processing then\n model.OnClose ()\n )\n prop.children [\n Html.text locale.fields.cancel\n ]\n ]\n let deleteButton =\n Bulma.button.button [\n Bulma.color.isDanger\n Bulma.button.isSmall\n if model.Processing then Bulma.button.isLoading\n prop.onClick (fun _ ->\n if not model.Processing then\n dispatch (Remove model.Location)\n )\n prop.children [\n Bulma.icon [\n Bulma.icon.isSmall\n Bulma.icon.isLeft\n prop.children [\n Html.i [ prop.className \"fas fa-trash\" ]\n ]\n ]\n Html.span [ Html.text locale.fields.delete ]\n ]\n ]\n ViewHelpers.modalBox (fun _ -> model.OnClose()) [\n nameInput\n addButton\n cancelButton\n if model.EditType = Update then\n deleteButton\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg ->\n ViewHelpers.errorMsg errMsg (fun _ -> dispatch DismissError)\n ]\n let groupForm x =\n React.functionComponent (\"GroupForm\",\n fun (props : {| loc : Location.Location option; close : unit -> unit |}) ->\n let initialModel = init props.loc props.close\n let model =\n Fable.React.HookBindings.Hooks.useReducer (update , initialModel)\n let dispatch, _ =\n Reaction.useStatefulStream (model.current, model.update, stream)\n view model.current dispatch\n ) x\n\nmodule UserForm =\n open Fable.Reaction\n open FSharp.Control\n\n type private Model = {\n User : User.UserForm\n EditType : EditType\n OnClose : unit -> unit\n Processing : bool\n ErrorMsg : string option\n }\n\n type private Message =\n | UpdateUsername of string\n | UpdateEmail of string\n | UpdateFirstname of string\n | UpdateLastname of string\n | UpdatePassword of string\n | UpdateIsAdmin of bool\n | DismissError\n | Commit of User.UserForm * bool\n | Remove of User.UserForm\n | CommitResponse of GenericResult\n\n let private init (x : User.User option) onClose =\n {\n User =\n match x with\n | Some usr -> {\n Id = usr.Id\n Username = usr.Username\n Email = usr.Email\n Firstname = usr.Firstname\n Lastname = usr.Lastname\n Password = \"\"\n IsAdmin = usr.IsAdmin\n }\n | None -> {\n Id = -1\n Username = \"\"\n Email = \"\"\n Firstname = \"\"\n Lastname = \"\"\n Password = \"\"\n IsAdmin = false\n }\n EditType = if x.IsSome then Update else Create\n OnClose = onClose\n Processing = false\n ErrorMsg = None\n }\n\n let private handleCommit model (x : User.UserForm) =\n let validEmail = x.Email.Length > 0\n let validUsername = x.Username.Length > 0\n let validFirstname = x.Firstname.Length > 0\n let validLastname = x.Lastname.Length > 0\n let validPassword = (x.Password.Length > 0) || model.EditType = Update\n let allValid =\n validEmail && validUsername && validFirstname &&\n validLastname && validPassword\n if allValid then { model with Processing = true }\n elif not validUsername then { model with ErrorMsg = Some locale.fields.``invalid-username`` }\n elif not validEmail then { model with ErrorMsg = Some locale.fields.``invalid-email`` }\n elif not validFirstname then { model with ErrorMsg = Some locale.fields.``invalid-firstname`` }\n elif not validLastname then { model with ErrorMsg = Some locale.fields.``invalid-lastname`` }\n else { model with ErrorMsg = Some locale.fields.``invalid-pwd`` }\n\n let private handleCommitResponse model (res : GenericResult) =\n match res with\n | Ok x ->\n if x.Result = Shared.SuccessIndicator then\n model.OnClose()\n model\n else\n { model with ErrorMsg = Some x.Message }\n | Error x ->\n Utils.checkError x\n { model with\n ErrorMsg = Some locale.fields.``action-error`` }\n\n let private update model msg =\n match msg with\n | UpdateUsername x -> { model with User = { model.User with Username = x } }\n | UpdateEmail x -> { model with User = { model.User with Email = x } }\n | UpdateFirstname x -> { model with User = { model.User with Firstname = x } }\n | UpdateLastname x -> { model with User = { model.User with Lastname = x } }\n | UpdatePassword x -> { model with User = { model.User with Password = x } }\n | UpdateIsAdmin x -> { model with User = { model.User with IsAdmin = x } }\n | DismissError -> { model with ErrorMsg = None }\n | Commit (x, _) -> handleCommit model x\n | Remove _ -> { model with Processing = true }\n | CommitResponse res -> handleCommitResponse model res\n\n let private addOrUpdate (x : User.UserForm) =\n let p = Promises.tryPost \"/api/user/add\" x\n AsyncRx.ofPromise p\n |> AsyncRx.map CommitResponse\n\n let private remove (x : User.UserForm) =\n let p = Promises.tryPost (sprintf \"/api/user/remove/%i\" x.Id) \"\"\n AsyncRx.ofPromise p\n |> AsyncRx.map CommitResponse\n\n let private stream model msgs =\n let validate (x : User.UserForm) validatePassword =\n let validPass = if validatePassword then x.Password.Length > 0 else true\n let validEmail = x.Email.Length > 0 && x.Username.Length > 0\n let validName = x.Firstname.Length > 0 && x.Lastname.Length > 0\n if validEmail && validName && validPass then Some x\n else None\n let commit =\n msgs\n |> AsyncRx.choose (\n function\n | Commit (x, validatePassword) -> validate x validatePassword\n | _ -> None\n )\n |> AsyncRx.flatMap addOrUpdate\n let remove =\n msgs\n |> AsyncRx.choose (function | Remove x -> Some x | _ -> None)\n |> AsyncRx.flatMap remove\n AsyncRx.mergeSeq [\n msgs\n commit\n remove\n ] |> AsyncRx.tag \"msgs\"\n\n let private view model dispatch =\n let label' (txt : string) = Bulma.label [\n prop.style [ style.fontSize (length.rem 0.8)]\n prop.children [ Html.text txt ]\n ]\n ViewHelpers.modalBox (fun _ -> model.OnClose()) [\n Bulma.field.div [\n label' locale.fields.username\n Bulma.input.text [\n Bulma.input.isSmall\n prop.onChange (UpdateUsername >> dispatch)\n prop.defaultValue model.User.Username\n prop.placeholder locale.fields.username\n ]\n ]\n Bulma.field.div [\n label' locale.fields.email\n Bulma.input.text [\n Bulma.input.isSmall\n prop.onChange (UpdateEmail >> dispatch)\n prop.defaultValue model.User.Email\n prop.placeholder locale.fields.email\n ]\n ]\n Bulma.field.div [\n label' locale.fields.firstname\n Bulma.input.text [\n Bulma.input.isSmall\n prop.onChange (UpdateFirstname >> dispatch)\n prop.defaultValue model.User.Firstname\n prop.placeholder locale.fields.firstname\n ]\n ]\n Bulma.field.div [\n label' locale.fields.lastname\n Bulma.input.text [\n Bulma.input.isSmall\n prop.onChange (UpdateLastname >> dispatch)\n prop.defaultValue model.User.Lastname\n prop.placeholder locale.fields.lastname\n ]\n ]\n if model.EditType = Create then\n Bulma.field.div [\n label' locale.fields.password\n Bulma.input.password [\n Bulma.input.isSmall\n prop.onChange (UpdatePassword >> dispatch)\n prop.defaultValue model.User.Password\n prop.placeholder locale.fields.password\n ]\n ]\n Bulma.field.div [\n Bulma.label [\n prop.style [ style.fontSize (length.rem 0.8) ]\n prop.children [\n Bulma.input.checkbox [\n prop.style [ style.marginRight (length.px 5) ]\n prop.isChecked model.User.IsAdmin\n prop.onChange (UpdateIsAdmin >> dispatch)\n ]\n Html.text locale.admin.admin\n ]\n ]\n ]\n Bulma.button.button [\n Bulma.color.isInfo\n Bulma.button.isSmall\n if model.Processing then Bulma.button.isLoading\n prop.style [ style.marginRight (length.px 20)]\n prop.onClick (fun _ ->\n if not model.Processing then\n dispatch (Commit (model.User, model.EditType = Create))\n )\n prop.children [\n Bulma.icon [\n Bulma.icon.isSmall\n Bulma.icon.isLeft\n prop.children [\n Html.i [\n prop.className (\n if model.EditType = Create then\n \"fas fa-plus\"\n else\n \"fas fa-sync\"\n )\n ]\n ]\n ]\n Html.span [\n Html.text (\n if model.EditType = Create then\n locale.fields.add\n else\n locale.fields.update\n )\n ]\n ]\n ]\n Bulma.button.button [\n Bulma.button.isSmall\n if model.Processing then Bulma.button.isLoading\n prop.style [ style.marginRight (length.px 20) ]\n prop.onClick(fun _ -> if not model.Processing then model.OnClose ())\n prop.text locale.fields.cancel\n ]\n if model.EditType = Update then\n Bulma.button.button [\n Bulma.color.isDanger\n Bulma.button.isSmall\n if model.Processing then Bulma.button.isLoading\n prop.onClick (fun _ ->\n if not model.Processing then\n dispatch (Remove model.User)\n )\n prop.children [\n Bulma.icon [\n Bulma.icon.isSmall\n Bulma.icon.isLeft\n prop.children [\n Html.i [ prop.className \"fas fa-trash\" ]\n ]\n ]\n Html.span locale.fields.remove\n ]\n ]\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg ->\n ViewHelpers.errorMsg errMsg (fun _ -> dispatch DismissError)\n ]\n\n let userForm x =\n React.functionComponent (\"UserForm\",\n fun (props : {| user : User.User option; close : unit -> unit |}) ->\n let initialModel = init props.user props.close\n let model = Fable.React.HookBindings.Hooks.useReducer (update , initialModel)\n let dispatch, _ =\n Reaction.useStatefulStream(model.current, model.update, stream)\n view model.current dispatch\n ) x\n\ntype Model = {\n UserSession : UserSession\n Users : User.User [] option\n ErrorMsg : string option\n SelectedUser : User.User option\n DisplayUserForm : bool\n}\n\ntype Message =\n | UsersResponse of Result\n | SelectUser of User.User\n | ToggleUserForm\n | CloseForms\n\nlet init userSession =\n let mdl = {\n UserSession = userSession\n Users = None\n ErrorMsg = None\n SelectedUser = None\n DisplayUserForm = false\n }\n let u () = Promises.tryGet \"/api/user/all\"\n let cmds = Cmd.batch [\n Cmd.OfPromise.perform u () UsersResponse\n ]\n mdl, cmds\n\nlet update msg model =\n match msg with\n | UsersResponse res ->\n match res with\n | Ok x ->\n { model with Users = Some x }, Cmd.none\n | Error x ->\n Utils.checkError x\n { model with ErrorMsg = Some locale.admin.``users-load-error`` }, Cmd.none\n | SelectUser x ->\n { model with SelectedUser = Some x }, Cmd.none\n | ToggleUserForm ->\n { model with DisplayUserForm = not model.DisplayUserForm }, Cmd.none\n | CloseForms ->\n let u () = Promises.tryGet \"/api/user/all\"\n let cmds = Cmd.batch [\n Cmd.OfPromise.perform u () UsersResponse\n ]\n { model with SelectedUser = None; DisplayUserForm = false }, cmds\n\nlet userList model dispatch =\n let userList users =\n Bulma.table [\n Bulma.table.isFullWidth\n Bulma.table.isHoverable\n prop.children [\n Html.thead [\n Html.tr [\n Html.th locale.fields.username\n Html.th locale.fields.email\n Html.th locale.admin.admin\n ]\n ]\n Html.tbody [\n users\n |> Array.map(fun x ->\n Html.tr [\n prop.style [ style.cursor.pointer ]\n prop.onClick(fun _ -> dispatch (SelectUser x))\n prop.children [\n Html.td [ Html.text x.Username ]\n Html.td [ Html.text x.Email ]\n Html.td [\n Html.text (\n if x.IsAdmin then\n locale.fields.yes\n else\n locale.fields.no\n )\n ]\n ]\n ]\n )\n |> Fable.React.Helpers.ofArray\n ]\n ]\n ]\n Html.div [\n prop.style [ style.marginBottom (length.px 20) ]\n prop.children [\n Html.h3 [\n prop.className \"title is-3\"\n prop.text locale.admin.users\n ]\n match model.Users with\n | None -> Bulma.button.button [ Bulma.button.isLoading ]\n | Some users ->\n userList users\n Bulma.button.button [\n Bulma.button.isSmall\n prop.onClick(fun _ -> dispatch ToggleUserForm)\n prop.children [ Html.i [ prop.className \"fas fa-plus\" ] ]\n ]\n match model.SelectedUser with\n | None -> ()\n | Some x ->\n UserForm.userForm\n {|\n close = (fun _ -> dispatch CloseForms)\n user = Some x\n |}\n if model.DisplayUserForm then\n UserForm.userForm\n {|\n close = (fun _ -> dispatch CloseForms)\n user = None\n |}\n ]\n ]\n\nlet view model dispatch =\n Bulma.column [\n Bulma.column.isHalf\n Bulma.column.isOffsetOneQuarter\n prop.onKeyUp(fun ke ->\n if ke.key = \"Escape\" then\n dispatch CloseForms\n )\n prop.children [\n userList model dispatch\n ]\n ]\n","module Account\n\nopen Elmish\nopen Feliz\nopen Fable.Reaction\nopen FSharp.Control\nopen Feliz.Bulma\nopen Thoth.Fetch\nopen ApiDataTypes\n\ntype FetchError = Thoth.Fetch.FetchError\ntype GenericResult = Result\n\nlet locale = Locale.Locale\n\nmodule UpdatePasswordForm =\n open FSharp.Control\n open Fable.Reaction\n\n type private Model = {\n User : User.User\n OldPassword : string\n NewPassword : string\n RepeatPassword : string\n OnClose : unit -> unit\n Processing : bool\n ErrorMsg : string option\n Completed : bool\n }\n\n type private Message =\n | UpdateOld of string\n | UpdateNew of string\n | UpdateRepeat of string\n | Commit of string * string * string\n | CommitResponse of GenericResult\n | DismissError\n\n let private init x y =\n {\n User = x\n OldPassword = \"\"\n NewPassword = \"\"\n RepeatPassword = \"\"\n OnClose = y\n Processing = false\n ErrorMsg = None\n Completed = false\n }\n\n let private update model msg =\n match msg with\n | UpdateOld x -> { model with OldPassword = x }\n | UpdateNew x -> { model with NewPassword = x }\n | UpdateRepeat x -> { model with RepeatPassword = x }\n | Commit (o, n, r) ->\n if o.Length > 0 && n.Length > 0 && n = r then\n { model with Processing = true}\n elif o.Length = 0 then\n { model with\n ErrorMsg = Some locale.account.``old-pwd-missing`` }\n elif n.Length = 0 then\n { model with\n ErrorMsg = Some locale.account.``new-pwd-missing`` }\n else\n { model with\n ErrorMsg = Some locale.account.``pwd-does-not-match`` }\n | CommitResponse res ->\n match res with\n | Ok x ->\n if x.Result = Shared.SuccessIndicator then\n { model with Completed = true}\n else\n { model with Processing = false; ErrorMsg = Some x.Message }\n | _ ->\n { model with\n Processing = false\n ErrorMsg = Some locale.account.``pwd-update-error``\n }\n | DismissError -> { model with ErrorMsg = None }\n\n let private commitNewPassword oldP newP =\n let p =\n Promises.tryPost\n \"/api/user/changepassword\" (oldP, newP)\n AsyncRx.ofPromise p\n |> AsyncRx.map CommitResponse\n\n let private stream model msgs =\n let commit =\n msgs\n |> AsyncRx.choose (\n function\n | Commit (o, n, r) ->\n if o.Length > 0 && n.Length > 0 && n = r then Some (o, n)\n else None\n | _ -> None\n )\n |> AsyncRx.flatMap(fun (oldP, newP) -> commitNewPassword oldP newP)\n AsyncRx.mergeSeq [\n msgs\n commit\n ] |> AsyncRx.tag \"msgs\"\n\n let private view model dispatch =\n let completed =\n Html.div [\n prop.style [\n style.width (length.percent 100)\n style.textAlign.center\n ]\n prop.children [\n Html.h5 [ Html.text locale.account.``pwd-updated`` ]\n Bulma.button.button [\n prop.onClick (fun _ -> model.OnClose())\n prop.children [\n Bulma.icon [\n Bulma.icon.isSmall\n Bulma.icon.isLeft\n prop.children [\n Html.i [ prop.className \"fas fa-check\" ]\n ]\n ]\n Html.span [ Html.text \"Ok\"]\n ]\n ]\n ]\n ]\n let notCompleted = [\n Bulma.field.div [\n Bulma.label locale.account.``old-pwd``\n Bulma.input.password [\n prop.autoFocus true\n prop.onChange(UpdateOld >> dispatch)\n prop.placeholder locale.account.``old-pwd``\n ]\n ]\n Bulma.field.div [\n Bulma.label locale.account.``new-pwd``\n Bulma.input.password [\n prop.onChange(UpdateNew >> dispatch)\n prop.placeholder locale.account.``new-pwd``\n ]\n ]\n Bulma.field.div [\n Bulma.label locale.account.``repeat-pwd``\n Bulma.input.password [\n prop.onChange(UpdateRepeat >> dispatch)\n prop.placeholder locale.account.``new-pwd``\n ]\n ]\n Bulma.button.button [\n Bulma.button.isSmall\n if model.Processing then Bulma.button.isLoading\n prop.style [\n style.marginBottom (length.px 10)\n style.marginRight(length.px 10)\n ]\n prop.onClick(fun _ ->\n if not model.Processing then\n dispatch (Commit\n (\n model.OldPassword,\n model.NewPassword,\n model.RepeatPassword\n )\n )\n )\n prop.children [\n Bulma.icon [\n Bulma.icon.isSmall\n Bulma.icon.isLeft\n prop.children [ Html.i [ prop.className \"fas fa-sync\" ] ]\n ]\n Html.span locale.fields.change\n ]\n ]\n Bulma.button.button [\n if model.Processing then Bulma.button.isLoading\n Bulma.button.isSmall\n prop.onClick(fun _ -> if not model.Processing then model.OnClose ())\n prop.children [\n Html.text locale.fields.cancel\n ]\n ]\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg ->\n ViewHelpers.errorMsg errMsg (fun _ -> dispatch DismissError)\n ]\n ViewHelpers.modalBox (fun _ -> model.OnClose ()) [\n if model.Completed then\n completed\n else\n notCompleted |> Html.div\n ]\n\n let changeForm x =\n React.functionComponent(\"PasswordForm\",\n fun (props : {| user : User.User ; close : unit -> unit |}) ->\n let initialModel = init props.user props.close\n let model = Fable.React.HookBindings.Hooks.useReducer (update, initialModel)\n let dispatch, _ =\n Reaction.useStatefulStream(model.current, model.update, stream)\n view model.current dispatch\n ) x\n\nmodule UpdateTFAForm =\n type private Model = {\n Password : string\n Updated : bool\n SetTo : bool\n Processing : bool\n OnClose : bool option -> unit\n ErrorMsg : string option\n }\n\n type private Message =\n | UpdatePassword of string\n | Commit of string\n | UpdateResponse of GenericResult\n | DismissError\n\n let private init setTo onClose = {\n Password = \"\"\n Updated = false\n SetTo = setTo\n OnClose = onClose\n Processing = false\n ErrorMsg = None\n }\n\n let private handleCommit model (pw : string) =\n if pw.Length > 0 then\n { model with ErrorMsg = None; Processing = true }\n else\n { model with ErrorMsg = Some locale.fields.``invalid-pwd`` }\n\n let private handleUpdateresponse model (res : GenericResult) =\n match res with\n | Ok x ->\n if x.Result = Shared.SuccessIndicator then\n { model with Updated = true; Processing = false }\n else\n { model with ErrorMsg = Some x.Message; Processing = false }\n | Error x ->\n Utils.checkError x\n { model with\n ErrorMsg = Some locale.account.``tfa-error``\n Processing = false }\n\n let private update model msg =\n match msg with\n | UpdatePassword x -> { model with Password = x }\n | Commit pw -> handleCommit model pw\n | UpdateResponse res -> handleUpdateresponse model res\n | DismissError -> { model with ErrorMsg = None }\n\n let private updateTFA (pw, setTo) =\n let requestPath =\n sprintf \"/api/auth/tfa/%s\" (if setTo then \"enable\" else \"disable\")\n let p = Promises.tryPost requestPath pw\n AsyncRx.ofPromise p |> AsyncRx.map UpdateResponse\n\n let private stream model msgs =\n let commit =\n msgs\n |> AsyncRx.choose (\n function\n | Commit x when x.Length > 0 -> Some (x, model.SetTo)\n | _ -> None\n )\n |> AsyncRx.flatMap updateTFA\n AsyncRx.mergeSeq [ msgs; commit ] |> AsyncRx.tag \"msgs\"\n\n let private view model dispatch =\n let passwd =\n Bulma.field.div [\n prop.style [ style.textAlign.center ]\n prop.children [\n Bulma.label locale.fields.password\n Bulma.input.password [\n prop.onChange(UpdatePassword >> dispatch)\n prop.onKeyDown(fun ke ->\n if ke.key = \"Enter\" then\n dispatch (Commit model.Password)\n )\n prop.autoFocus true\n prop.placeholder locale.fields.password\n ]\n ]\n ]\n let buttons =\n Html.div [\n Bulma.button.button [\n Bulma.color.isInfo\n if model.Processing then Bulma.button.isLoading\n prop.onClick(fun _ ->\n if not model.Processing then\n dispatch (Commit model.Password))\n prop.style [\n style.marginBottom (length.px 10)\n style.marginRight (length.px 10)\n ]\n prop.children [\n Bulma.icon [\n Bulma.icon.isLeft\n prop.children [ Html.i [ prop.className \"fas fa-sync\" ] ]\n ]\n Html.span (\n if model.SetTo then\n locale.account.``enable-tfa``\n else\n locale.account.``disable-tfa``\n )\n ]\n ]\n Bulma.button.button [\n if model.Processing then Bulma.button.isLoading\n prop.onClick(fun _ ->\n if not model.Processing then\n model.OnClose None\n )\n prop.text locale.fields.cancel\n ]\n ]\n let notUpdated = [\n passwd\n buttons\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg ->\n ViewHelpers.errorMsg errMsg (fun _ -> dispatch DismissError)\n ]\n let isUpdated = [\n Html.p (\n if model.SetTo then\n locale.account.``tfa-activated``\n else\n locale.account.``tfa-deactivated``\n )\n Bulma.button.button [\n prop.style [ style.marginTop (length.px 20) ]\n prop.onClick(fun _ -> model.OnClose (Some model.SetTo))\n prop.text locale.fields.close\n ]\n ]\n ViewHelpers.modalBox (fun _ -> model.OnClose None) [\n Html.div [\n prop.style [\n style.display.flex\n style.alignItems.center\n style.justifyContent.center\n style.flexDirection.column\n ]\n if model.Updated then\n prop.children isUpdated\n else\n prop.children notUpdated\n ]\n ]\n\n let tfaForm x =\n React.functionComponent (\"TFAForm\",\n fun (props : {| inUse : bool; close : bool option -> unit |}) ->\n let initialModel = init props.inUse props.close\n let model = Fable.React.HookBindings.Hooks.useReducer (update, initialModel)\n let dispatch, _ =\n Reaction.useStatefulStream(model.current, model.update, stream)\n view model.current dispatch\n ) x\n\ntype Model = {\n UserSession : UserSession\n User : User.User option\n UsesTwoFactorAuth : bool option\n DisplayPasswordForm : bool\n DisplayTFAForm : bool\n}\n\ntype Message =\n | UserResponse of Result\n | TFAResponse of Result\n | TogglePasswordForm\n | ToggleTFAForm\n | CloseTFAForm of bool option\n\nlet init userSession =\n let mdl = {\n UserSession = userSession\n User = None\n UsesTwoFactorAuth = None\n DisplayPasswordForm = false\n DisplayTFAForm = false\n }\n let p () = Promises.tryGet \"/api/user/loggedinuser\"\n let t () = Promises.tryGet \"/api/auth/tfa/enabled\"\n let cmds = Cmd.batch [\n Cmd.OfPromise.perform p () UserResponse\n Cmd.OfPromise.perform t () TFAResponse\n ]\n mdl, cmds\n\nlet update msg model =\n match msg with\n | UserResponse res ->\n match res with\n | Ok usr -> { model with User = Some usr }, Cmd.none\n | Error x ->\n Utils.checkError x\n model, Cmd.none\n | TFAResponse res ->\n match res with\n | Ok x -> { model with UsesTwoFactorAuth = Some x }, Cmd.none\n | Error x ->\n Utils.checkError x\n model, Cmd.none\n | TogglePasswordForm ->\n { model with\n DisplayPasswordForm = not model.DisplayPasswordForm\n }, Cmd.none\n | ToggleTFAForm ->\n { model with\n DisplayTFAForm = not model.DisplayTFAForm\n }, Cmd.none\n | CloseTFAForm x ->\n match x with\n | Some newState ->\n { model with\n UsesTwoFactorAuth = Some newState\n DisplayTFAForm = false\n }, Cmd.none\n | None -> { model with DisplayTFAForm = false }, Cmd.none\n\nlet view model dispatch =\n let userTable (usr : User.User) =\n Bulma.table [\n Html.head []\n Html.tbody [\n Html.tr [\n Html.th locale.fields.username\n Html.td usr.Username\n ]\n Html.tr [\n Html.th locale.fields.email\n Html.td usr.Email\n ]\n Html.tr [\n Html.th locale.fields.firstname\n Html.td usr.Firstname\n ]\n Html.tr [\n Html.th locale.fields.lastname\n Html.td usr.Lastname\n ]\n ]\n ]\n let lockButton =\n Bulma.button.button [\n Bulma.color.isInfo\n prop.onClick(fun _ -> dispatch TogglePasswordForm)\n prop.children [\n Bulma.icon [\n Bulma.icon.isLeft\n prop.children [ Html.i [ prop.className \"fas fa-lock\" ] ]\n ]\n Html.span [ Html.text locale.account.``change-pwd`` ]\n ]\n ]\n let tfaToggle x =\n Bulma.field.div [\n Bulma.button.button [\n Bulma.color.isInfo\n prop.onClick(fun _ -> dispatch ToggleTFAForm)\n prop.children [\n Bulma.icon [\n Bulma.icon.isLeft\n prop.children [ Html.i [\n if x then \"fas fa-check\"\n else \"fas fa-times\"\n |> prop.className\n ] ]\n ]\n Html.span [\n if x then\n locale.account.``tfa-enabled``\n else\n locale.account.``tfa-disabled``\n |> Html.text\n ]\n ]\n ]\n Html.p [\n prop.style [\n style.fontSize (length.rem 0.8)\n style.fontStyle.italic\n ]\n prop.children [\n Html.text locale.account.``tfa-desc``\n ]\n ]\n ]\n let accountDropdown update state = [\n Bulma.dropdownTrigger [\n Bulma.button.button [\n Bulma.color.isInfo\n prop.onClick(fun _ -> update(not state ))\n prop.children [\n Html.span locale.language\n Html.span [\n prop.className \"icon is-small\"\n prop.children [\n Html.i [\n prop.className \"fas fa-angle-down\"\n prop.ariaHidden true\n ]\n ]\n ]\n ]\n ]\n ]\n Bulma.dropdownMenu [\n prop.id \"dropdown-menu\"\n prop.children [\n Bulma.dropdownContent [\n Html.a [\n prop.className \"dropdown-item\"\n prop.onClick(fun _ ->\n if Locale.CurrentLocale <> Locale.NO then\n Locale.setLanguage Locale.Norwegian\n else\n update(not state) )\n prop.text \"Norsk bokmål\"\n ]\n Html.a [\n prop.className \"dropdown-item\"\n prop.onClick(fun _ ->\n if Locale.CurrentLocale <> Locale.EN then\n Locale.setLanguage Locale.English\n else\n update(not state) )\n prop.text \"English\"\n ]\n ]\n ]\n ]\n ]\n Bulma.column [\n Bulma.column.isHalf\n Bulma.column.isOffsetOneQuarter\n prop.onKeyUp(fun ke ->\n if ke.key = \"Escape\" then\n if model.DisplayPasswordForm then dispatch TogglePasswordForm\n if model.DisplayTFAForm then dispatch ToggleTFAForm)\n prop.children [\n Html.h3 [\n prop.className \"title is-3\"\n prop.text locale.account.account\n ]\n Html.br []\n match model.User with\n | None -> Bulma.button.button [ Bulma.button.isLoading ]\n | Some usr ->\n Html.div [ userTable usr ]\n Bulma.field.div [ lockButton ]\n if model.DisplayPasswordForm then\n UpdatePasswordForm.changeForm\n {|\n user = usr\n close = (fun _ -> dispatch TogglePasswordForm)\n |}\n match model.UsesTwoFactorAuth with\n | None -> ()\n | Some x ->\n tfaToggle x\n if model.DisplayTFAForm then\n UpdateTFAForm.tfaForm\n {|\n inUse = not x\n close = (fun x -> dispatch (CloseTFAForm x))\n |}\n\n React.functionComponent (fun _ ->\n let (state, update) = React.useState(false)\n Bulma.field.div [\n Bulma.dropdown [\n if state then\n dropdown.isActive\n prop.children (accountDropdown update state)\n ]\n ]\n ) ()\n ]\n ]\n\n","namespace Feliz.Router\r\n\r\nopen System\r\nopen Browser.Dom\r\nopen Fable.React\r\nopen Elmish\r\nopen Fable.Core\r\n\r\ntype IUrlSearchParamters =\r\n abstract entries : unit -> seq\r\n\r\n/// Determines whether the router will push a new entry to the history of modify the current one.\r\n[]\r\ntype HistoryMode =\r\n /// A new history will be added to the entries such that if the user clicks the back button,\r\n /// the previous page will be shown, this is the default bahavior of the router.\r\n | PushState = 1\r\n /// Only modifies the current history entry and does not add a new one to the history stack. Clicking the back button will *not* have the effect of retuning to the previous page.\r\n | ReplaceState = 2\r\n\r\n/// Determines whether the router will use path or hash based routes\r\n[]\r\ntype RouteMode =\r\n | Hash = 1\r\n | Path = 2\r\n\r\n[]\r\nmodule internal Router =\r\n let customNavigationEvent = \"CUSTOM_NAVIGATION_EVENT\"\r\n let hashPrefix = sprintf \"#/%s\"\r\n let combine xs = String.concat \"/\" xs\r\n\r\n []\r\n let encodeURIComponent (value: string) : string = jsNative\r\n []\r\n let decodeURIComponent (value: string) : string = jsNative\r\n\r\n let encodeQueryString queryStringPairs =\r\n queryStringPairs\r\n |> List.map (fun (key, value) -> encodeURIComponent key, encodeURIComponent value)\r\n |> List.map (fun (key, value) -> String.concat \"=\" [ key; value ])\r\n |> String.concat \"&\"\r\n |> function\r\n | \"\" -> \"\"\r\n | pairs -> sprintf \"?%s\" pairs\r\n\r\n let encodeQueryStringInts queryStringIntPairs =\r\n queryStringIntPairs\r\n |> List.map (fun (key, value: int) -> encodeURIComponent key, (string value))\r\n |> List.map (fun (key, value) -> String.concat \"=\" [ key; value ])\r\n |> String.concat \"&\"\r\n |> function\r\n | \"\" -> \"\"\r\n | pairs -> sprintf \"?%s\" pairs\r\n\r\n let encodeParts xs routeMode =\r\n let normalizeRoute : (string -> string) =\r\n if routeMode = RouteMode.Hash then\r\n function\r\n | path when path.StartsWith \"/\" -> sprintf \"#%s\" path\r\n | path when path.StartsWith \"#/\" -> path\r\n | path when path.StartsWith \"#\" -> \"#/\" + path.Substring(1, path.Length - 1)\r\n | path -> sprintf \"#/%s\" path\r\n else\r\n (fun path -> if path.StartsWith \"/\" then path else sprintf \"/%s\" path)\r\n\r\n xs\r\n |> List.map (fun (part: string) ->\r\n if part.Contains \"?\" || part.StartsWith \"#\" || part.StartsWith \"/\"\r\n then part\r\n else encodeURIComponent part)\r\n |> combine\r\n |> normalizeRoute\r\n\r\n let nav xs (mode: HistoryMode) (routeMode: RouteMode) : Elmish.Cmd<_> =\r\n Cmd.ofSub (fun _ ->\r\n if mode = HistoryMode.PushState\r\n then history.pushState ((), \"\", encodeParts xs routeMode)\r\n else history.replaceState((), \"\", encodeParts xs routeMode)\r\n let ev = document.createEvent(\"CustomEvent\")\r\n ev.initEvent (customNavigationEvent, true, true)\r\n window.dispatchEvent ev |> ignore\r\n )\r\n\r\n /// Parses the URL into multiple path segments\r\n let urlSegments (path: string) (mode: RouteMode) =\r\n if path.StartsWith \"#\"\r\n // remove the hash sign\r\n then path.Substring(1, path.Length - 1)\r\n elif mode = RouteMode.Hash && (path.EndsWith \"#\" || path.EndsWith \"#/\")\r\n then \"\"\r\n // return as is\r\n else path\r\n |> fun p -> p.Split '/' // split the url segments\r\n |> List.ofArray\r\n |> List.filter (String.IsNullOrWhiteSpace >> not)\r\n |> List.map (fun segment -> segment.TrimEnd '#')\r\n |> List.collect (fun segment ->\r\n if segment = \"?\"\r\n then [ ]\r\n elif segment.StartsWith \"?\"\r\n then [ segment ]\r\n else\r\n match segment.Split [| '?' |] with\r\n | [| value |] -> [decodeURIComponent value]\r\n | [| value; \"\" |] -> [decodeURIComponent value]\r\n | [| value; query |] -> [ decodeURIComponent value; \"?\" + query ]\r\n | _ -> [])\r\n\r\n []\r\n let createUrlSearchParams (queryString: string) : IUrlSearchParamters = jsNative\r\n\r\n []\r\n let navigatorUserAgent : string = jsNative\r\n\r\ntype RouterProperties = {\r\n urlChanged: string list -> unit\r\n application: ReactElement\r\n routeMode: RouteMode\r\n}\r\n\r\ntype RouterComponent(props: RouterProperties) =\r\n inherit Fable.React.PureStatelessComponent(props)\r\n\r\n override this.render() =\r\n this.props.application\r\n\r\n override this.componentDidMount() =\r\n let onChange (ev: _) =\r\n match props.routeMode with\r\n | RouteMode.Path -> window.location.pathname + window.location.search\r\n | _ -> window.location.hash\r\n |> fun path -> Router.urlSegments path props.routeMode\r\n |> this.props.urlChanged\r\n\r\n // listen to path changes\r\n if Router.navigatorUserAgent.Contains \"Trident\" ||\r\n Router.navigatorUserAgent.Contains \"MSIE\" then\r\n window.addEventListener(\"hashchange\", unbox onChange)\r\n else\r\n window.addEventListener(\"popstate\", unbox onChange)\r\n\r\n // listen to custom navigation events published by `Router.navigate()`\r\n window.addEventListener(Router.customNavigationEvent, unbox onChange)\r\n\r\n override this.componentWillUnmount() =\r\n // clean up when the router isn't in view anymore\r\n window.removeEventListener(\"popstate\", unbox null)\r\n window.removeEventListener(\"hashchange\", unbox null)\r\n window.removeEventListener(Router.customNavigationEvent, unbox null)\r\n\r\n/// Defines a property for the `router` element\r\ntype IRouterProperty = interface end\r\n\r\ntype Router =\r\n /// An event that is triggered when the URL in the address bar changes, whether by hand or programmatically using `Router.navigate(...)`.\r\n /// The event arguments are the parts of the URL, segmented into strings:\r\n ///\r\n /// `segment \"#/\" => [ ]`\r\n ///\r\n /// `segment \"#/home\" => [ \"home\" ]`\r\n ///\r\n /// `segment \"#/home/settings\" => [ \"home\"; \"settings\" ]`\r\n ///\r\n /// `segment \"#/users/1\" => [ \"users\"; \"1\" ]`\r\n ///\r\n /// `segment \"#/users/1/details\" => [ \"users\"; \"1\"; \"details\" ]`\r\n ///\r\n /// with query string parameters\r\n ///\r\n /// `segment \"#/users?id=1\" => [ \"users\"; \"?id=1\" ]`\r\n ///\r\n /// `segment \"#/home/users?id=1\" => [ \"home\"; \"users\"; \"?id=1\" ]`\r\n ///\r\n /// `segment \"#/users?id=1&format=json\" => [ \"users\"; \"?id=1&format=json\" ]`\r\n static member onUrlChanged (eventHandler: string list -> unit) : IRouterProperty = unbox (\"onUrlChanged\", eventHandler)\r\n\r\n /// The element that is rendered inside where the `router` is placed. Usually this contains the root application but it could also be part of another root element.\r\n ///\r\n /// It will keep listening for URL changes as long as the `router` is rendered on screen somewhere.\r\n static member application (app: ReactElement) : IRouterProperty = unbox (\"application\", app)\r\n\r\n /// The content that is rendered inside where the `router` is placed. Usually this contains the root application but it could also be part of another root element.\r\n ///\r\n /// It will keep listening for URL changes as long as the `router` is rendered on screen somewhere.\r\n static member application (app: ReactElement list) : IRouterProperty = unbox (\"application\", Fable.React.Helpers.fragment [ ] app)\r\n\r\n /// Use # based routes (default)\r\n static member hashMode : IRouterProperty = unbox (\"routeMode\", RouteMode.Hash)\r\n\r\n /// Use full (HTML 5) based routes instead of # based.\r\n /// You have to be careful about which requests you want forwarded to the server and which ones should be handled locally.\r\n /// To keep the request local, you have to use the 'Router.navigate' function for all the URL transitions.\r\n static member pathMode : IRouterProperty = unbox (\"routeMode\", RouteMode.Path)\r\n\r\n /// Parses the current URL of the page and returns the cleaned URL segments. This is default when working with hash URLs. When working with path-based URLs, use Router.currentPath() instead.\r\n static member currentUrl() =\r\n Router.urlSegments window.location.hash RouteMode.Hash\r\n\r\n /// Parses the current URL of the page and returns the cleaned URL segments. This is default when working with path URLs. When working with hash-based (#) URLs, use Router.currentUrl() instead.\r\n static member currentPath() =\r\n let fullPath = window.location.pathname + window.location.search\r\n Router.urlSegments fullPath RouteMode.Path\r\n\r\n /// Initializes the router as an element of the page to starts listening to URL changes.\r\n static member router (properties: IRouterProperty list) : ReactElement =\r\n let defaultProperties : RouterProperties =\r\n { urlChanged = fun _ -> ignore()\r\n application = nothing\r\n routeMode = RouteMode.Hash }\r\n\r\n let modifiedProperties =\r\n (defaultProperties, properties)\r\n ||> List.fold (fun state prop ->\r\n let (key, value) = unbox prop\r\n match key with\r\n | \"onUrlChanged\" -> { state with urlChanged = unbox value }\r\n | \"application\" -> { state with application = unbox value }\r\n | \"routeMode\" -> { state with routeMode = unbox value }\r\n | _ -> state)\r\n\r\n ofType(modifiedProperties) [| |]\r\n\r\n static member navigate([] xs: string array) =\r\n Router.nav (List.ofArray xs) HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2;string segment3 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(fullPath: string) : Cmd<_> =\r\n Router.nav [ fullPath ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(fullPath: string, mode) : Cmd<_> =\r\n Router.nav [ fullPath ] mode RouteMode.Hash\r\n static member navigate(segment: string, value: int) : Cmd<_> =\r\n Router.nav [segment; string value ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, value: int, mode) : Cmd<_> =\r\n Router.nav [segment; string value ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, value1: int) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, value1: int, mode) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] mode RouteMode.Hash\r\n\r\n static member navigatePath([] xs: string array) =\r\n Router.nav (List.ofArray xs) HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2;string segment3 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(fullPath: string) : Cmd<_> =\r\n Router.nav [ fullPath ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(fullPath: string, mode) : Cmd<_> =\r\n Router.nav [ fullPath ] mode RouteMode.Path\r\n static member navigatePath(segment: string, value: int) : Cmd<_> =\r\n Router.nav [segment; string value ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, value: int, mode) : Cmd<_> =\r\n Router.nav [segment; string value ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, value1: int) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, value1: int, mode) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] mode RouteMode.Path\r\n\r\n static member format([] xs: string array) =\r\n Router.encodeParts (List.ofArray xs) RouteMode.Hash\r\n static member format(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(fullPath: string) : string =\r\n Router.encodeParts [ fullPath ] RouteMode.Hash\r\n static member format(fullPath: string list) : string =\r\n Router.encodeParts fullPath RouteMode.Hash\r\n static member format(segment: string, value: int) : string =\r\n Router.encodeParts [segment; string value ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2 ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, value1: int) : string =\r\n Router.encodeParts [segment1; segment2; string value1 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; segment4 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; string value3 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, value2: int, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2; string value3 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, value2: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; string value2; segment2 ] RouteMode.Hash\r\n\r\n static member formatPath([] xs: string array) =\r\n Router.encodeParts (List.ofArray xs) RouteMode.Path\r\n static member formatPath(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(fullPath: string) : string =\r\n Router.encodeParts [ fullPath ] RouteMode.Path\r\n static member formatPath(fullPath: string list) : string =\r\n Router.encodeParts fullPath RouteMode.Path\r\n static member formatPath(segment: string, value: int) : string =\r\n Router.encodeParts [segment; string value ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2 ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, value1: int) : string =\r\n Router.encodeParts [segment1; segment2; string value1 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; segment4 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; string value3 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, value2: int, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2; string value3 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, value2: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; string value2; segment2 ] RouteMode.Path\r\n \r\n /// Executes a programmatic navigation command. Useful when using Feliz.Router in standalone React applications.\r\n static member execute(cmd: Cmd<_>) = \r\n let dispatch msg = ignore()\r\n cmd |> List.iter (fun f -> f dispatch)\r\n\r\nmodule Route =\r\n let (|Int|_|) (input: string) =\r\n match Int32.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Int64|_|) (input: string) =\r\n match Int64.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Guid|_|) (input: string) =\r\n match Guid.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Number|_|) (input: string) =\r\n match Double.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Decimal|_|) (input: string) =\r\n match Decimal.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Bool|_|) (input: string) =\r\n match input.ToLower() with\r\n | (\"1\"|\"true\") -> Some true\r\n | (\"0\"|\"false\") -> Some false\r\n | \"\" -> Some true\r\n | _ -> None\r\n\r\n /// Used to parse the query string parameter of the route.\r\n ///\r\n /// For example to match against\r\n ///\r\n /// `/users?id={value}`\r\n ///\r\n /// You can pattern match:\r\n ///\r\n /// `[ \"users\"; Route.Query [ \"id\", value ] ] -> value`\r\n ///\r\n /// When `{value}` is an integer then you can pattern match:\r\n ///\r\n /// `[ \"users\"; Route.Query [ \"id\", Route.Int userId ] ] -> userId`\r\n let (|Query|_|) (input: string) =\r\n try\r\n let urlParams = Router.createUrlSearchParams input\r\n Some [ for entry in urlParams.entries() -> entry.[0], entry.[1] ]\r\n with | _ -> None\r\n","module Startpage\n\nopen ApiDataTypes\nopen Feliz\nopen Feliz.Bulma\nopen Thoth.Fetch\nopen Feliz.Recharts\n\ntype private Model = {\n Location : Location.Location\n Notifications : Product.Notification [] option\n ErrorMsg : string option\n Usage : Product.Usage [] option\n}\nand private Message =\n | NotificationsResponse of Result\n | UsageResponse of Result\n\nlet private init x = {\n Location = x\n Notifications = None\n ErrorMsg = None\n Usage = None\n}\n\nlet private update model msg =\n match msg with\n | NotificationsResponse res ->\n match res with\n | Ok x -> {model with Notifications = Some x}\n | Error err ->\n let errMsg =\n match err with\n | _ -> (sprintf \"Noe gikk galt. Kunne ikke laste merknader for %s.\" model.Location.Name)\n {model with ErrorMsg = Some errMsg}\n \n | UsageResponse res ->\n match res with\n | Ok x -> {model with Usage = Some x}\n | Error err ->\n let errMsg =\n match err with\n | _ -> \"Noe gikk galt. Kunne ikke laste forbruk.\"\n {model with ErrorMsg = Some errMsg}\n\n\nlet private fetchNotifications locId dispatch =\n promise {\n let requestPath =\n sprintf \"/api/notification/%i\" locId\n let! res = Promises.tryGet requestPath\n dispatch (NotificationsResponse res)\n }\n\nlet private fetchUsage locId dispatch =\n promise {\n let requestPath =\n sprintf \"/api/inventory/usage/%i\" locId\n\n let! res = Promises.tryGet requestPath\n dispatch (UsageResponse res)\n }\n\n\nlet private drawNotifications model dispatch =\n Html.div [\n prop.style [\n style.marginTop (length.px 20)\n ]\n prop.children [\n Html.h5 [\n prop.style [\n style.color \"#fff\"\n style.marginBottom (length.px 3)\n style.marginLeft (length.px 15)\n ]\n prop.className \"title is-5\"\n prop.text \"Merknader\"\n ]\n\n Html.div [\n match model.Notifications with\n | None ->\n ViewHelpers.loadingIndicatorSmall()\n \n | Some x ->\n\n Bulma.table [\n prop.style [style.marginBottom 0]\n prop.children [\n Html.thead []\n Html.tbody [\n x\n |> Array.map(fun y ->\n Html.tr [\n prop.className \"notification-row\"\n prop.children [\n Html.td [\n prop.children [\n match y.Type with\n | Shared.NotificationType.BelowMin ->\n Html.i [prop.className \"fas fa-arrow-alt-circle-down fa-lg\"]\n | Shared.NotificationType.Expires ->\n Html.i [prop.className \"fas fa-clock fa-lg\"]\n | _ -> Html.none\n ]\n ]\n Html.td y.Text\n ]\n ]\n )\n |> Fable.React.Helpers.ofArray\n ]\n ]\n ]\n ]\n ]\n ]\n\ntype DataPoint = {``uke``: string; ``forbruk``:int; ``mottak``: int; }\n\nlet private drawUsage model dispatch =\n Html.div [\n prop.style [\n style.marginTop (length.px 20)\n style.minHeight (length.px 300)\n ]\n prop.children [\n Html.div [\n prop.style [\n style.textAlign.left\n ]\n prop.children [\n Html.span [\n prop.style [style.color \"#fff\"; style.fontWeight.bold]\n prop.text \"Ukentlig forbruk og leveranse av helsemateriell\"\n ]\n ]\n ]\n match model.Usage with\n | None -> ViewHelpers.loadingIndicatorMedium ()\n | Some x ->\n\n Html.div [\n prop.style [\n style.backgroundColor \"#fff\"\n style.paddingTop (length.px 20)\n style.paddingBottom (length.px 15)\n style.maxWidth (length.px 600)\n style.borderRadius 10\n style.paddingRight (length.px 5)\n ]\n prop.children [\n let data =\n x\n |> Array.sortBy(fun y -> y.Year, y.Week)\n |> Array.map (fun y -> \n {\n uke = string y.Week\n forbruk = - y.Usage\n mottak = y.Added\n }\n )\n Recharts.responsiveContainer [\n responsiveContainer.height (length.percent 100)\n responsiveContainer.width (length.percent 100)\n responsiveContainer.minHeight (length.px 250)\n responsiveContainer.chart (\n Recharts.barChart [\n barChart.data data\n barChart.children [\n Recharts.cartesianGrid [ cartesianGrid.strokeDasharray(3, 3) ]\n Recharts.xAxis [ \n xAxis.dataKey (fun point -> point.uke)\n Recharts.Interop.mkXAxisAttr \"tick\" {| fill = \"#131313\"|}\n Interop.mkXAxisAttr \"stroke\" \"#131313\"\n \n ]\n Recharts.yAxis [\n Interop.mkYAxisAttr \"tick\" {|fill=\"#131313\"|}\n Interop.mkYAxisAttr \"stroke\" \"#131313\"\n ]\n Recharts.tooltip [ ]\n //Recharts.legend [\n \n //]\n\n Recharts.referenceLine [\n referenceLine.y 0\n referenceLine.stroke \"#131313\"\n ]\n\n Recharts.bar [\n bar.dataKey (fun point -> point.mottak)\n bar.fill \"#26c74c\"\n ]\n\n Recharts.bar [\n bar.dataKey (fun point -> point.forbruk)\n bar.fill \"#e86e2c\"\n ]\n\n ]\n ]\n )\n ]\n\n Html.div [\n prop.style [style.display.flex; style.justifyContent.center]\n prop.children [\n Html.div [\n prop.style [\n style.display.flex\n style.marginRight (length.px 10)\n ]\n prop.children [\n Bulma.icon [\n Html.i [\n prop.style [style.color \"#26c74c\"]\n prop.className \"fas fa-circle\"\n ]\n ]\n\n Html.span \"Mottak\"\n ]\n ]\n Html.div [\n Bulma.icon [\n Html.i [\n prop.style [style.color \"#e86e2c\"]\n prop.className \"fas fa-circle\"\n ]\n ]\n\n Html.span \"Forbruk\"\n ]\n ]\n ]\n ]\n ]\n ]\n ]\n\nlet private view model dispatch =\n Html.div [\n drawUsage model dispatch\n drawNotifications model dispatch\n ]\n\n\nlet startpage location =\n React.functionComponent (\"startpage\", (fun (props : {|loc : Location.Location|}) -> \n let initialModel = init props.loc\n let model, dispatch = React.useReducer(update, initialModel)\n\n React.useEffect((fun _ ->\n fetchNotifications props.loc.Id dispatch\n |> Promise.start\n\n fetchUsage props.loc.Id dispatch\n |> Promise.start\n ), [||])\n\n view model dispatch\n )) {| loc = location|}","module InventoryControl\n\nopen ApiDataTypes\nopen Thoth.Fetch\nopen Feliz\nopen Feliz.Bulma\n\ntype private Model = {\n UserSession : UserSession\n Location : Location.Location\n Inventory : Product.Inventory [] option\n Control : Product.InventoryControl []\n Notes : string\n ErrorMsg : string option\n Processing : bool\n Registered : bool\n History : Product.ControlLog [] option\n}\nand private Message =\n | InventoryResponse of Result\n | HistoryResponse of Result\n | Reset\n | ToggleAjour of int\n | UpdateQuantity of int * int\n | UpdateNotes of string\n | DismissError\n | Commit\n | CommitResponse of Result\n\n\nlet private init us x = {\n UserSession = us\n Location = x\n Inventory = None\n Control = [||]\n Notes = \"\"\n ErrorMsg = None\n Processing = false\n Registered = false\n History = None\n}\n\nlet private update model msg =\n match msg with\n | InventoryResponse res ->\n match res with\n | Ok x ->\n let y =\n x\n |> Array.map(fun z -> \n {\n Product = z.Product\n Ajour = false\n Original = z.Quantity\n Quantity = z.Quantity\n } : Product.InventoryControl\n )\n {model with Inventory = Some x; Control = y}\n | Error err ->\n let errMsg =\n match err with\n | _ -> \"Noe gikk galt. Kunne ikke laste lagerbeholdning.\"\n {model with ErrorMsg = Some errMsg}\n \n | HistoryResponse res ->\n match res with\n | Ok x -> {model with History = Some x}\n | Error err ->\n let errMsg =\n match err with\n | _ -> \"Noe gikk galt. Kunne ikke laste kontrollhistorikk.\"\n {model with ErrorMsg = Some errMsg}\n \n | Reset ->\n match model.Inventory with\n | Some x ->\n let y =\n x\n |> Array.map(fun z -> \n {\n Product = z.Product\n Ajour = false\n Original = z.Quantity\n Quantity = z.Quantity\n } : Product.InventoryControl\n )\n {model with Control = y}\n | None -> model\n \n | ToggleAjour pId ->\n let x =\n model.Control\n |> Array.map(fun y ->\n if y.Product.Id = pId then\n {y with Ajour = not y.Ajour}\n else y\n )\n {model with Control = x}\n \n | UpdateQuantity (pId, x) ->\n let x =\n model.Control\n |> Array.map(fun y ->\n if y.Product.Id = pId then\n {y with Quantity = x}\n else y\n )\n {model with Control = x}\n \n\n \n | UpdateNotes x -> {model with Notes = x}\n\n | DismissError -> {model with ErrorMsg = None}\n\n | Commit ->\n {model with Processing = true}\n \n | CommitResponse res ->\n match res with\n | Ok x ->\n if x.Result = Shared.SuccessIndicator then\n let l : Product.ControlLog = {\n RegisteredBy = sprintf \"%s %s\" model.UserSession.Firstname model.UserSession.Lastname\n Registered = System.DateTime.Now.ToString \"yyyy-MM-dd\"\n }\n let hist =\n match model.History with\n | None -> [|l|]\n | Some h -> Array.append [|l|] h\n {model with Registered = true; ErrorMsg = None; History = Some hist}\n else {model with Processing = false; ErrorMsg = Some x.Message}\n | Error err ->\n let errMsg =\n match err with\n | _ -> \"Noe gikk galt. Kunne ikke registrere kontroll.\"\n {model with Processing = false; ErrorMsg = Some errMsg}\n\nlet private fetchInventory locId dispatch =\n promise {\n let requestPath =\n sprintf \"/api/inventory/%i\" locId\n let! res = Promises.tryGet requestPath\n dispatch (InventoryResponse res)\n }\n\nlet private commit locId (x:Product.InventoryControl []) dispatch =\n promise {\n dispatch Commit\n let requestPath =\n sprintf \"/api/control/register/%i\" locId\n \n let! res =\n Promises.tryPost\n requestPath x\n \n dispatch (CommitResponse res)\n }\n\nlet private fetchHistory locId dispatch =\n promise {\n let requestPath =\n sprintf \"/api/control/%i\" locId\n let! res =\n Promises.tryGet requestPath\n \n dispatch (HistoryResponse res)\n }\n\n\nlet private drawControlEntry (x: Product.InventoryControl) processing dispatch =\n Html.tr [\n prop.className \"product-row\"\n prop.children [\n Html.td [\n prop.style [\n style.width (length.rem 3.2)\n style.padding (length.px 5)\n ]\n prop.children [\n ViewHelpers.productImg x.Product.Id 3.1\n ]\n ]\n Html.td [\n Html.span [\n prop.style [style.fontWeight.bold]\n prop.text x.Product.Name\n ]\n Html.br []\n Html.span [\n prop.style [\n style.fontSize (length.rem 0.8)\n ] \n prop.text (sprintf \"Produktnummer: %s\" x.Product.ProductNumber)\n ]\n ]\n Html.td [\n prop.style [style.fontStyle.italic; style.fontWeight.bold]\n prop.children [\n Html.span [\n prop.style [\n if not x.Ajour && x.Original <> x.Quantity then\n style.textDecorationLine.lineThrough\n style.opacity 0.7\n ]\n prop.text (sprintf \"%i stk\" x.Original)\n ]\n if not x.Ajour && x.Original <> x.Quantity then\n Html.span [\n prop.style [style.marginLeft (length.px 10)]\n prop.text (sprintf \"%i stk\" x.Quantity)\n ]\n ]\n ]\n Html.td [\n Bulma.icon [\n Bulma.icon.isMedium\n prop.style [\n style.cursor.pointer\n ]\n prop.onClick (fun _ -> \n if not processing then\n dispatch (ToggleAjour x.Product.Id))\n prop.children [\n Html.i [\n prop.className (\n if x.Ajour then \"fas fa-check-circle\"\n else \"far fa-circle\"\n )\n ]\n ]\n ]\n ]\n Html.td [\n if not x.Ajour then\n Bulma.input.number [\n Bulma.input.isSmall\n prop.style [\n style.maxWidth (length.px 60)\n ]\n prop.defaultValue x.Quantity\n prop.disabled ( x.Ajour || processing )\n prop.onChange (fun (y:string) ->\n try\n let asInt = int y\n dispatch (UpdateQuantity (x.Product.Id, asInt))\n with | _ -> ()\n )\n ]\n ]\n ]\n ]\n\n\nlet private drawControl model dispatch =\n Bulma.table [\n Bulma.table.isFullWidth\n prop.children [\n Html.thead [\n prop.style [style.fontSize (length.rem 0.8)]\n prop.children [\n Html.th []\n Html.th \"Produkt\"\n Html.th \"Antall\"\n Html.th [\n prop.style [style.width (length.px 70)]\n prop.text \"Ajour\"\n ]\n Html.th [\n prop.style [style.width (length.px 100)]\n prop.text \"Endre\"\n ]\n ]\n ]\n Html.tbody [\n model.Control\n |> Array.map(fun y -> drawControlEntry y model.Processing dispatch)\n |> Fable.React.Helpers.ofArray\n ]\n ]\n ]\n\nlet private drawControlHistory model dispatch =\n Html.div [\n prop.style [\n style.marginTop (length.px 20)\n ]\n prop.children [\n Html.h5 [\n prop.style [\n style.color \"#fff\"\n style.marginBottom (length.px 3)\n style.marginLeft (length.px 15)\n ]\n prop.className \"title is-5\"\n prop.text \"Siste gjennomførte kontroller\"\n ]\n\n match model.History with\n | None -> ViewHelpers.loadingIndicatorSmall ()\n | Some x ->\n\n Bulma.table [\n prop.style [style.marginBottom 0]\n prop.children [\n Html.thead []\n Html.tbody [\n x\n |> Array.map(fun y ->\n Html.tr [\n prop.style [style.fontSize (length.rem 0.8)]\n prop.className \"notification-row\"\n prop.children [\n Html.td (Utils.fromDateToLocalDate y.Registered)\n Html.td y.RegisteredBy\n ]\n ]\n )\n |> Fable.React.Helpers.ofArray\n\n if x.Length = 0 then\n Html.tr [\n prop.className \"notification-row\"\n prop.children [\n Html.td []\n Html.td \"Ingen registrerte kontroller.\"\n ]\n ]\n ]\n ]\n ]\n ]\n ]\n\nlet private view model dispatch =\n Html.div [\n Html.div [\n prop.style [\n style.textAlign.right\n ]\n prop.children [\n Html.span [\n prop.style [style.color \"#fff\"; style.fontWeight.bold]\n prop.text \"Lagerkontroll\"\n ]\n ]\n ]\n Html.div [\n prop.style [\n style.custom (\"border\", \"solid 1px #4d8398\")\n style.borderRadius 5\n style.padding (length.vw 1)\n style.backgroundColor \"#e0f1f1\"\n style.overflowY.scroll\n style.maxHeight (length.vh 70)\n ]\n prop.children [\n match model.Inventory with\n | None -> ViewHelpers.loadingIndicatorSmall ()\n | Some _ ->\n drawControl model dispatch\n ]\n ]\n match model.ErrorMsg with\n | None -> ()\n | Some err -> ViewHelpers.errorMsg err (fun _ -> dispatch DismissError)\n \n Html.div [\n prop.style [\n style.marginTop (length.px 10)\n style.display.flex\n style.justifyContent.spaceBetween\n ]\n prop.children [\n if not model.Registered then\n Bulma.button.button [\n Bulma.button.isSmall\n if model.Processing then\n Bulma.button.isLoading\n prop.style [\n ]\n prop.onClick (fun _ -> \n if not model.Processing then dispatch Reset)\n prop.text \"Nullstill\"\n ]\n\n Bulma.button.button [\n Bulma.button.isSmall\n if model.Processing then\n Bulma.button.isLoading\n prop.style [\n\n ]\n prop.onClick (fun _ ->\n if not model.Processing then\n commit model.Location.Id model.Control dispatch\n |> Promise.start\n )\n prop.text \"Registrer kontroll\"\n ]\n else\n Html.span [\n prop.style [\n style.color \"#fff\"\n style.fontWeight.bold\n ]\n prop.text \"Kontroll er registrert.\"\n ]\n ]\n ] \n\n drawControlHistory model dispatch\n ]\n\n\nlet inventoryControl session location =\n React.functionComponent (\"inventory-control\", (fun (props : {|us : UserSession; loc : Location.Location|}) -> \n let initialModel = init props.us props.loc\n let model, dispatch = React.useReducer(update, initialModel)\n\n React.useEffect((fun _ ->\n fetchInventory props.loc.Id dispatch\n |> Promise.start\n fetchHistory props.loc.Id dispatch\n |> Promise.start\n ), [||])\n\n view model dispatch\n )) {|us = session; loc = location|}","module Overview\n\nopen ApiDataTypes\nopen Thoth.Fetch\nopen Feliz\nopen Feliz.Bulma\n\ntype private View =\n | Start\n | Inventory\n | Control\n | ActiveOrders\n | Webshop\n | Reports\n | Settings\n | Support\n\ntype private Model = {\n Session : UserSession\n CurrentView : View\n Locations : Location.Location [] option\n SelectedLocation : Location.Location option\n ErrorMsg : string option\n}\nand private Message =\n | LocationsResponse of Result\n | SelectLocation of int\n | DismissError\n | SelectView of View\n\nlet private init session = {\n Session = session\n CurrentView = Start\n Locations = None\n SelectedLocation = None\n ErrorMsg = None\n}\n\nlet private update model msg =\n match msg with\n | LocationsResponse res ->\n match res with\n | Ok x -> \n let selectedLocation =\n match model.SelectedLocation with\n | Some l -> Some l\n | None ->\n x\n |> Array.tryFind (fun y -> y.Id = model.Session.LocationId)\n {model with Locations = Some x; SelectedLocation = selectedLocation}\n | Error err ->\n let errMsg =\n match err with\n | _ -> \"Noe gikk galt. Kunne ikke laste lager.\"\n {model with ErrorMsg = Some errMsg}\n \n | SelectLocation locId -> \n match model.Locations with\n | Some x ->\n let y =\n x\n |> Array.tryFind (fun z -> z.Id = locId)\n |> function\n | Some z -> Some z\n | None -> model.SelectedLocation\n {model with SelectedLocation = y}\n\n | None -> model\n\n | DismissError -> {model with ErrorMsg = None}\n\n | SelectView x -> {model with CurrentView = x}\n\nlet private fetchLocations dispatch =\n promise {\n let requestPath = \"/api/location/all\"\n let! res = Promises.tryGet requestPath\n dispatch (LocationsResponse res)\n }\n\n\nlet private drawMenu model dispatch =\n let menuButton vw (title:string) =\n let isActive = vw = model.CurrentView\n Bulma.button.button [\n Bulma.button.isFullWidth\n prop.className (if isActive then \"menu-button-active\" else \"menu-button\")\n prop.onClick (fun _ -> dispatch (SelectView vw))\n prop.text title\n ]\n Html.div [\n prop.style [\n style.paddingLeft (length.vw 2)\n style.paddingRight (length.vw 2)\n style.display.flex\n style.flexDirection.column\n style.alignItems.center\n ]\n prop.children [\n\n Html.img [\n prop.src \"/logo.png\"\n ]\n menuButton\n Start\n \"Startside\"\n \n menuButton\n Inventory\n \"Largerbeholdning\"\n \n menuButton\n Control\n \"Kontroll lager\"\n \n menuButton\n ActiveOrders\n \"Aktive bestillingsavtaler\"\n \n menuButton\n Webshop\n \"Nettbutikk/ekstrabestillinger\"\n \n menuButton\n Reports\n \"Rapporter\"\n \n menuButton\n Settings\n \"Innstillinger\"\n \n menuButton\n Support\n \"Support\"\n ]\n ]\n\nlet private view model dispatch =\n Bulma.columns [\n Bulma.column [\n Bulma.column.isOneQuarter\n prop.children [\n drawMenu model dispatch\n ]\n ]\n Bulma.column [\n Bulma.column.isThreeQuarters\n prop.className \"content-column\"\n prop.children [\n match model.ErrorMsg with\n | None -> ()\n | Some errMsg -> ViewHelpers.errorMsg errMsg (fun _ -> dispatch DismissError)\n match model.Locations with\n | None ->\n Html.div [\n prop.style [\n style.width (length.percent 100)\n style.height (length.vh 80)\n style.display.flex\n style.justifyContent.center\n style.alignItems.center\n ]\n prop.children [\n ViewHelpers.loadingIndicatorLarge ()\n ]\n ]\n \n | Some x ->\n\n Bulma.select [\n Bulma.select.isLarge\n prop.className \"location-select\"\n prop.value (\n match model.SelectedLocation with\n | None -> -1\n | Some sl -> sl.Id\n )\n prop.onChange (fun (x:string) ->\n try\n let asInt = int x\n dispatch (SelectLocation asInt)\n with | _ -> ()\n )\n prop.children [\n Html.option [prop.hidden true; prop.value -1; prop.text \"Ingen lager valgt.\"]\n\n x\n |> Array.map (fun l -> \n Html.option [prop.value l.Id; prop.text l.Name]\n )\n |> Fable.React.Helpers.ofArray\n ] \n ]\n\n match model.SelectedLocation with\n | None -> ()\n | Some l ->\n match model.CurrentView with\n | Start -> Startpage.startpage l\n | Inventory ->\n InventoryList.inventoryList l\n \n | Control ->\n InventoryControl.inventoryControl model.Session l\n | _ -> ()\n ]\n ]\n ]\n\n\nlet overview session =\n React.functionComponent (\"overview\", (fun ( props : {| session : UserSession |}) ->\n let initialModel = init props.session\n let model, dispatch = React.useReducer(update, initialModel)\n\n React.useEffect ((fun _ -> \n fetchLocations dispatch\n |> Promise.start\n ),[||])\n view model dispatch\n )) {| session = session |}","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)","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 Main\n\nopen Fable.Core.JsInterop\n\nimportAll \"./public/style.scss\"\n\nopen Elmish\nopen Elmish.React\nopen Elmish.Debug\nopen Elmish.HMR\nopen App\n\n// App\nProgram.mkProgram init update render\n|> Program.withReactSynchronous \"feliz-app\"\n|> Program.run\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"],"sourceRoot":""}