-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathPacktDataStructuresAlgorithms.min.js.map
1 lines (1 loc) · 139 KB
/
PacktDataStructuresAlgorithms.min.js.map
1
{"version":3,"sources":["webpack://PacktDataStructuresAlgorithms/webpack/universalModuleDefinition","webpack://PacktDataStructuresAlgorithms/webpack/bootstrap","webpack://PacktDataStructuresAlgorithms/./src/js/util.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/quicksort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/min-max-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/linked-list-models.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/queue.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/insertion-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/node.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/binary-search-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/dictionary.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/doubly-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/deque.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/breadth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/sudoku-solver.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/backtracking/rat-in-maze.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/knapsack.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/greedy/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/dynamic-programing/min-coin-change.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search-recursive.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/sequential-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/interpolation-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/search/binary-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/shell-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/selection-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/radix-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/merge-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/counting-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bucket-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort-improved.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/bubble-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/shuffle/fisher–yates.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/kruskal.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/prim.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/floyd-warshall.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/dijkstra.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/graph/depth-first-search.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/graph.js","webpack://PacktDataStructuresAlgorithms/./src/js/algorithms/sorting/heap-sort.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/heap.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/avl-tree.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/fibonacci.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/factorial.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/models/value-pair-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing-lazy.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-linear-probing.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table-separate-chaining.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/hash-table.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/set.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/sorted-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/circular-linked-list.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/palindrome-checker.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hot-potato.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/balanced-symbols.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/base-converter.js","webpack://PacktDataStructuresAlgorithms/./src/js/others/hanoi.js","webpack://PacktDataStructuresAlgorithms/./src/js/data-structures/stack-array.js","webpack://PacktDataStructuresAlgorithms/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","lesserEquals","a","b","compareFn","comp","Compare","LESS_THAN","EQUALS","biggerEquals","BIGGER_THAN","defaultCompare","defaultEquals","defaultToString","item","undefined","String","toString","swap","array","_ref","reverseCompare","defaultDiff","Number","DOES_NOT_EXIST","ValuePair","key","_classCallCheck","this","LinkedList","equalsFn","arguments","length","_util","count","head","element","node","_linkedListModels","Node","current","next","index","previous","getElementAt","indexOf","removeAt","size","objString","Stack","items","isEmpty","result","quick","left","right","pivot","Math","floor","j","partition","quickSort","findMaxValue","max","findMinValue","min","DoublyNode","prev","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","Queue","lowestCount","insertionSort","temp","BinarySearchTree","_node","insertNode","searchNode","callback","inOrderTraverseNode","preOrderTraverseNode","postOrderTraverseNode","minNode","maxNode","removeNode","aux","Dictionary","toStrFn","table","tableKey","_valuePair","valuePair","hasKey","keyValues","map","values","callbackFn","valuePairs","keys","DoublyLinkedList","tail","_get","Deque","addBack","Colors","WHITE","GREY","BLACK","initializeColor","vertices","color","breadthFirstSearch","graph","startVertex","getVertices","adjList","getAdjList","queue","_queue2","default","enqueue","u","dequeue","neighbors","w","BFS","distances","predecessors","sudokuSolver","matrix","solveSudoku","row","col","checkBlankSpaces","UNASSIGNED","num","isSafe","usedInRow","usedInCol","boxStartRow","boxStartCol","usedInBox","ratInAMaze","maze","solution","findPath","x","y","knapSack","capacity","weights","load","val","findValues","kS","k","console","log","minCoinChange","coins","amount","change","total","coin","push","cache","makeChange","newMin","newAmount","concat","binarySearch","high","_quicksort","binarySearchRecursive","low","mid","sequentialSearch","interpolationSearch","diffFn","position","delta","sortedArray","shellSort","increment","selectionSort","indexMin","radixSort","radixBase","minValue","_minMaxSearch","maxValue","significantDigit","countingSortForRadix","getBucketIndex","bucketsIndex","buckets","mergeSort","_array","middle","slice","merge","countingSort","sortedIndex","counts","Array","forEach","bucketSort","bucketSize","_insertionSort","apply","_toConsumableArray","sortBuckets","bucketCount","createBuckets","modifiedBubbleSort","bubbleSort","shuffle","currentIndex","randomIndex","random","INF","MAX_SAFE_INTEGER","find","parent","union","kruskal","ne","v","cost","initializeCost","minKey","visited","minIndex","prim","floydWarshall","dist","isFinite","Infinity","minDistance","dijkstra","src","depthFirstSearchVisit","DFSVisit","depthFirstSearch","f","time","DFS","discovery","finished","Graph","isDirected","_dictionary2","includes","set","addVertex","heapify","heapSize","largest","buildMaxHeap","MinHeap","heap","siftUp","getLeftIndex","getRightIndex","siftDown","getParentIndex","shift","removedValue","pop","maxIndex","MaxHeap","BalanceFactor","UNBALANCED_RIGHT","SLIGHTLY_UNBALANCED_RIGHT","BALANCED","SLIGHTLY_UNBALANCED_LEFT","UNBALANCED_LEFT","AVLTree","getNodeHeight","tmp","rotationRR","rotationLL","heightDifference","balanceFactor","getBalanceFactor","rotationLR","rotationRL","fibonacci","fibonacciIterative","fibNMinus2","fibNMinus1","fibN","fibonacciMemoization","memo","fibonacciMem","factorialIterative","number","factorial","ValuePairLazy","isDeleted","HashTableLinearProbingLazy","hash","charCodeAt","loseloseHashCode","hashCode","_valuePairLazy","HashTableLinearProbing","verifyRemoveSideEffect","removedPosition","posHash","HashTableSeparateChaining","_linkedList2","linkedList","getHead","remove","HashTable","Set","has","otherSet","unionSet","add","intersectionSet","otherValues","biggerSet","smallerSet","differenceSet","isSubset","every","StackLinkedList","_doublyLinkedList2","clear","SortedLinkedList","getIndexNextSortedElement","pos","CircularLinkedList","removed","palindromeChecker","aString","deque","_deque2","lowerString","toLocaleLowerCase","split","join","isEqual","firstChar","lastChar","charAt","removeFront","removeBack","hotPotato","elementsList","elimitatedList","eliminated","winner","parenthesesChecker","symbols","stack","_stack2","balanced","symbol","top","decimalToBinary","decNumber","remStack","rem","binaryString","baseConverter","base","baseString","hanoiStack","plates","source","dest","helper","towerOfHanoi","sourceName","helperName","destName","moves","move","hanoi","StackArray","util"],"mappings":"CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,IACA,mBAAAG,eAAAC,IACAD,OAAA,mCAAAH,GACA,iBAAAC,QACAA,QAAA,8BAAAD,IAEAD,EAAA,8BAAAC,IARA,CASCK,OAAA,WACD,mBCTA,IAAAC,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAP,QAGA,IAAAC,EAAAI,EAAAE,IACAC,EAAAD,EACAE,GAAA,EACAT,YAUA,OANAU,EAAAH,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAQ,GAAA,EAGAR,EAAAD,QA2CA,OAtCAM,EAAAM,EAAAF,EAGAJ,EAAAO,EAAAR,EAGAC,EAAAQ,EAAA,SAAAd,EAAAe,EAAAC,GACAV,EAAAW,EAAAjB,EAAAe,IACAG,OAAAC,eAAAnB,EAAAe,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAvB,GACAkB,OAAAC,eAAAnB,EAAA,cAAiDwB,OAAA,KAIjDlB,EAAAmB,EAAA,SAAAxB,GACA,IAAAe,EAAAf,KAAAyB,WACA,WAA2B,OAAAzB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAK,EAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDtB,EAAAyB,EAAA,GAIAzB,IAAA0B,EAAA,mJC3DgBC,aAAT,SAAsBC,EAAGC,EAAGC,GACjC,IAAMC,EAAOD,EAAUF,EAAGC,GAC1B,OAAOE,IAASC,EAAQC,WAAaF,IAASC,EAAQE,UAGxCC,aAAT,SAAsBP,EAAGC,EAAGC,GACjC,IAAMC,EAAOD,EAAUF,EAAGC,GAC1B,OAAOE,IAASC,EAAQI,aAAeL,IAASC,EAAQE,UAG1CG,eAAT,SAAwBT,EAAGC,GAChC,OAAID,IAAMC,EACD,EAEFD,EAAIC,EAAIG,EAAQC,UAAYD,EAAQI,eAG7BE,cAAT,SAAuBV,EAAGC,GAC/B,OAAOD,IAAMC,KAGCU,gBAAT,SAAyBC,GAC9B,OAAa,OAATA,EACK,YACWC,IAATD,EACF,YACkB,iBAATA,GAAqBA,aAAgBE,OACrD,GAAUF,EAELA,EAAKG,cAGEC,KAAT,SAAcC,EAAOjB,EAAGC,GAAG,IAAAiB,GAIRD,EAAMhB,GAAIgB,EAAMjB,IAAvCiB,EAAMjB,GAJyBkB,EAAA,GAIrBD,EAAMhB,GAJeiB,EAAA,MAMlBC,eAAT,SAAwBjB,GAC7B,OAAO,SAACF,EAAGC,GAAJ,OAAUC,EAAUD,EAAGD,OAGhBoB,YAAT,SAAqBpB,EAAGC,GAC7B,OAAOoB,OAAOrB,GAAKqB,OAAOpB,IAnDrB,IAAMG,aACXC,WAAY,EACZG,YAAa,EACbF,OAAQ,GAGGgB,kBAAkB,0aCNlBC,qBACX,SAAAA,EAAYC,EAAKlC,gGAAOmC,CAAAC,KAAAH,GACtBG,KAAKF,IAAMA,EACXE,KAAKpC,MAAQA,+CAGb,WAAYoC,KAAKF,IAAjB,KAAyBE,KAAKpC,MAA9B,qcCHiBqC,aACnB,SAAAA,IAAsC,IAA1BC,EAA0BC,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAArB,2GAAAe,CAAAC,KAAAC,GACpCD,KAAKE,SAAWA,EAChBF,KAAKM,MAAQ,EACbN,KAAKO,UAAOpB,yCAETqB,GACH,IAAMC,EAAO,IAAAC,EAAAC,KAASH,GAClBI,SACJ,GAAiB,MAAbZ,KAAKO,KAEPP,KAAKO,KAAOE,MACP,CAEL,IADAG,EAAUZ,KAAKO,KACQ,MAAhBK,EAAQC,MACbD,EAAUA,EAAQC,KAEpBD,EAAQC,KAAOJ,EAEjBT,KAAKM,6CAEMQ,GACX,GAAIA,GAAS,GAAKA,GAASd,KAAKM,MAAO,CAErC,IADA,IAAIG,EAAOT,KAAKO,KACP3D,EAAI,EAAGA,EAAIkE,GAAiB,MAARL,EAAc7D,IACzC6D,EAAOA,EAAKI,KAEd,OAAOJ,kCAIJD,EAASM,GACd,GAAIA,GAAS,GAAKA,GAASd,KAAKM,MAAO,CACrC,IAAMG,EAAO,IAAAC,EAAAC,KAASH,GACtB,GAAc,IAAVM,EAAa,CACf,IAAMF,EAAUZ,KAAKO,KACrBE,EAAKI,KAAOD,EACZZ,KAAKO,KAAOE,MACP,CACL,IAAMM,EAAWf,KAAKgB,aAAaF,EAAQ,GAC3CL,EAAKI,KAAOE,EAASF,KACrBE,EAASF,KAAOJ,EAGlB,OADAT,KAAKM,SACE,EAET,OAAO,mCAEAQ,GACP,GAAIA,GAAS,GAAKA,EAAQd,KAAKM,MAAO,CACpC,IAAIM,EAAUZ,KAAKO,KACnB,GAAc,IAAVO,EACFd,KAAKO,KAAOK,EAAQC,SACf,CACL,IAAME,EAAWf,KAAKgB,aAAaF,EAAQ,GAC3CF,EAAUG,EAASF,KACnBE,EAASF,KAAOD,EAAQC,KAG1B,OADAb,KAAKM,QACEM,EAAQJ,wCAIZA,GACL,IAAMM,EAAQd,KAAKiB,QAAQT,GAC3B,OAAOR,KAAKkB,SAASJ,mCAEfN,GAEN,IADA,IAAII,EAAUZ,KAAKO,KACV3D,EAAI,EAAGA,EAAIoD,KAAKmB,QAAqB,MAAXP,EAAiBhE,IAAK,CACvD,GAAIoD,KAAKE,SAASM,EAASI,EAAQJ,SACjC,OAAO5D,EAETgE,EAAUA,EAAQC,KAEpB,OAAQ,oCAGR,OAAuB,IAAhBb,KAAKmB,sCAGZ,OAAOnB,KAAKM,wCAGZ,OAAON,KAAKO,qCAGZP,KAAKO,UAAOpB,EACZa,KAAKM,MAAQ,qCAGb,GAAiB,MAAbN,KAAKO,KACP,MAAO,GAIT,IAFA,IAAIa,KAAepB,KAAKO,KAAKC,QACzBI,EAAUZ,KAAKO,KAAKM,KACfjE,EAAI,EAAGA,EAAIoD,KAAKmB,QAAqB,MAAXP,EAAiBhE,IAClDwE,EAAeA,EAAf,IAA4BR,EAAQJ,QACpCI,EAAUA,EAAQC,KAEpB,OAAOO,qBApGUnB,gcCDAoB,aACnB,SAAAA,iGAActB,CAAAC,KAAAqB,GACZrB,KAAKM,MAAQ,EACbN,KAAKsB,gDAEFd,GACHR,KAAKsB,MAAMtB,KAAKM,OAASE,EACzBR,KAAKM,sCAGL,IAAIN,KAAKuB,UAAT,CAGAvB,KAAKM,QACL,IAAMkB,EAASxB,KAAKsB,MAAMtB,KAAKM,OAE/B,cADON,KAAKsB,MAAMtB,KAAKM,OAChBkB,kCAGP,IAAIxB,KAAKuB,UAGT,OAAOvB,KAAKsB,MAAMtB,KAAKM,MAAQ,qCAG/B,OAAsB,IAAfN,KAAKM,qCAGZ,OAAON,KAAKM,sCAMZN,KAAKsB,SACLtB,KAAKM,MAAQ,qCAGb,GAAIN,KAAKuB,UACP,MAAO,GAGT,IADA,IAAIH,KAAepB,KAAKsB,MAAM,GACrB1E,EAAI,EAAGA,EAAIoD,KAAKM,MAAO1D,IAC9BwE,EAAeA,EAAf,IAA4BpB,KAAKsB,MAAM1E,GAEzC,OAAOwE,qBA7CUC,yJCuBrB,SAASI,EAAMlC,EAAOmC,EAAMC,EAAOnD,GACjC,IAAIsC,SAUJ,OATIvB,EAAMa,OAAS,IACjBU,EA1BJ,SAAmBvB,EAAOmC,EAAMC,EAAOnD,GAKrC,IAJA,IAAMoD,EAAQrC,EAAMsC,KAAKC,OAAOH,EAAQD,GAAQ,IAC5C9E,EAAI8E,EACJK,EAAIJ,EAED/E,GAAKmF,GAAG,CACb,KAAOvD,EAAUe,EAAM3C,GAAIgF,KAAWvB,EAAA3B,QAAQC,WAC5C/B,IAGF,KAAO4B,EAAUe,EAAMwC,GAAIH,KAAWvB,EAAA3B,QAAQI,aAC5CiD,IAGEnF,GAAKmF,KAEP,EAAA1B,EAAAf,MAAKC,EAAO3C,EAAGmF,GACfnF,IACAmF,KAGJ,OAAOnF,EAKGoF,CAAUzC,EAAOmC,EAAMC,EAAOnD,GAClCkD,EAAOZ,EAAQ,GACjBW,EAAMlC,EAAOmC,EAAMZ,EAAQ,EAAGtC,GAE5BsC,EAAQa,GACVF,EAAMlC,EAAOuB,EAAOa,EAAOnD,IAGxBe,qDAEO0C,UAAT,SAAmB1C,GAAmC,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC3D,OAAO0C,EAAMlC,EAAO,EAAGA,EAAMa,OAAS,EAAG5B,0LCrC3B0D,aAAT,SAAsB3C,GAAmC,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC9D,GAAIQ,GAASA,EAAMa,OAAS,EAAG,CAE7B,IADA,IAAI+B,EAAM5C,EAAM,GACP3C,EAAI,EAAGA,EAAI2C,EAAMa,OAAQxD,IAC5B4B,EAAU2D,EAAK5C,EAAM3C,MAAQyD,EAAA3B,QAAQC,YACvCwD,EAAM5C,EAAM3C,IAGhB,OAAOuF,MAIKC,aAAT,SAAsB7C,GAAmC,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC9D,GAAIQ,GAASA,EAAMa,OAAS,EAAG,CAE7B,IADA,IAAIiC,EAAM9C,EAAM,GACP3C,EAAI,EAAGA,EAAI2C,EAAMa,OAAQxD,IAC5B4B,EAAU6D,EAAK9C,EAAM3C,MAAQyD,EAAA3B,QAAQI,cACvCuD,EAAM9C,EAAM3C,IAGhB,OAAOyF,mRCtBE1B,SACX,SAAAA,EAAYH,EAASK,GAAMd,EAAAC,KAAAW,GACzBX,KAAKQ,QAAUA,EACfR,KAAKa,KAAOA,KAGHyB,uBACX,SAAAA,EAAY9B,EAASK,EAAM0B,GAAMxC,EAAAC,KAAAsC,GAAA,IAAAE,mKAAAC,CAAAzC,MAAAsC,EAAAI,WAAApF,OAAAqF,eAAAL,IAAAvF,KAAAiD,KACzBQ,EAASK,IADgB,OAE/B2B,EAAKD,KAAOA,EAFmBC,2UADH7B,6aCJXiC,aACnB,SAAAA,iGAAc7C,CAAAC,KAAA4C,GACZ5C,KAAKM,MAAQ,EACbN,KAAK6C,YAAc,EACnB7C,KAAKsB,mDAGCd,GACNR,KAAKsB,MAAMtB,KAAKM,OAASE,EACzBR,KAAKM,0CAIL,IAAIN,KAAKuB,UAAT,CAGA,IAAMC,EAASxB,KAAKsB,MAAMtB,KAAK6C,aAG/B,cAFO7C,KAAKsB,MAAMtB,KAAK6C,aACvB7C,KAAK6C,cACErB,kCAIP,IAAIxB,KAAKuB,UAGT,OAAOvB,KAAKsB,MAAMtB,KAAK6C,+CAIvB,OAAuB,IAAhB7C,KAAKmB,uCAIZnB,KAAKsB,SACLtB,KAAKM,MAAQ,EACbN,KAAK6C,YAAc,iCAInB,OAAO7C,KAAKM,MAAQN,KAAK6C,+CAIzB,GAAI7C,KAAKuB,UACP,MAAO,GAGT,IADA,IAAIH,KAAepB,KAAKsB,MAAMtB,KAAK6C,aAC1BjG,EAAIoD,KAAK6C,YAAc,EAAGjG,EAAIoD,KAAKM,MAAO1D,IACjDwE,EAAeA,EAAf,IAA4BpB,KAAKsB,MAAM1E,GAEzC,OAAOwE,qBAnDUwB,iOCARE,gBAAgB,SAACvD,GAG5B,IAHkE,IAA/Bf,EAA+B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC1DqB,EAAWb,EAAXa,OACJ2C,SACKnG,EAAI,EAAGA,EAAIwD,EAAQxD,IAAK,CAC/B,IAAImF,EAAInF,EAGR,IAFAmG,EAAOxD,EAAM3C,GAENmF,EAAI,GAAKvD,EAAUe,EAAMwC,EAAI,GAAIgB,KAAU1C,EAAA3B,QAAQI,aAExDS,EAAMwC,GAAKxC,EAAMwC,EAAI,GACrBA,IAGFxC,EAAMwC,GAAKgB,EAEb,OAAOxD,2aCjBIoB,gBACX,SAAAA,EAAYb,gGAAKC,CAAAC,KAAAW,GACfX,KAAKF,IAAMA,EACXE,KAAK0B,KAAO,KACZ1B,KAAK2B,MAAQ,kDAGb,SAAU3B,KAAKF,qcCJEkD,aACnB,SAAAA,IAAwC,IAA5BxE,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,4GAAAgB,CAAAC,KAAAgD,GACtChD,KAAKxB,UAAYA,EACjBwB,KAAK9D,KAAO,8CAEP4D,GAEY,MAAbE,KAAK9D,KACP8D,KAAK9D,KAAO,IAAA+G,EAAAtC,KAASb,GAErBE,KAAKkD,WAAWlD,KAAK9D,KAAM4D,sCAGpBW,EAAMX,GACXE,KAAKxB,UAAUsB,EAAKW,EAAKX,OAASO,EAAA3B,QAAQC,UAC3B,MAAb8B,EAAKiB,KACPjB,EAAKiB,KAAO,IAAAuB,EAAAtC,KAASb,GAErBE,KAAKkD,WAAWzC,EAAKiB,KAAM5B,GAEN,MAAdW,EAAKkB,MACdlB,EAAKkB,MAAQ,IAAAsB,EAAAtC,KAASb,GAEtBE,KAAKkD,WAAWzC,EAAKkB,MAAO7B,qCAI9B,OAAOE,KAAK9D,oCAEP4D,GACL,OAAOE,KAAKmD,WAAWnD,KAAK9D,KAAM4D,sCAEzBW,EAAMX,GACf,OAAY,MAARW,IAGAT,KAAKxB,UAAUsB,EAAKW,EAAKX,OAASO,EAAA3B,QAAQC,UACrCqB,KAAKmD,WAAW1C,EAAKiB,KAAM5B,GACzBE,KAAKxB,UAAUsB,EAAKW,EAAKX,OAASO,EAAA3B,QAAQI,aAC5CkB,KAAKmD,WAAW1C,EAAKkB,MAAO7B,4CAIvBsD,GACdpD,KAAKqD,oBAAoBrD,KAAK9D,KAAMkH,+CAElB3C,EAAM2C,GACZ,MAAR3C,IACFT,KAAKqD,oBAAoB5C,EAAKiB,KAAM0B,GACpCA,EAAS3C,EAAKX,KACdE,KAAKqD,oBAAoB5C,EAAKkB,MAAOyB,6CAGxBA,GACfpD,KAAKsD,qBAAqBtD,KAAK9D,KAAMkH,gDAElB3C,EAAM2C,GACb,MAAR3C,IACF2C,EAAS3C,EAAKX,KACdE,KAAKsD,qBAAqB7C,EAAKiB,KAAM0B,GACrCpD,KAAKsD,qBAAqB7C,EAAKkB,MAAOyB,8CAGxBA,GAChBpD,KAAKuD,sBAAsBvD,KAAK9D,KAAMkH,iDAElB3C,EAAM2C,GACd,MAAR3C,IACFT,KAAKuD,sBAAsB9C,EAAKiB,KAAM0B,GACtCpD,KAAKuD,sBAAsB9C,EAAKkB,MAAOyB,GACvCA,EAAS3C,EAAKX,oCAIhB,OAAOE,KAAKwD,QAAQxD,KAAK9D,sCAEnBuE,GAEN,IADA,IAAIG,EAAUH,EACI,MAAXG,GAAmC,MAAhBA,EAAQc,MAChCd,EAAUA,EAAQc,KAEpB,OAAOd,gCAGP,OAAOZ,KAAKyD,QAAQzD,KAAK9D,sCAEnBuE,GAEN,IADA,IAAIG,EAAUH,EACI,MAAXG,GAAoC,MAAjBA,EAAQe,OAChCf,EAAUA,EAAQe,MAEpB,OAAOf,iCAEFd,GACLE,KAAK9D,KAAO8D,KAAK0D,WAAW1D,KAAK9D,KAAM4D,sCAE9BW,EAAMX,GACf,GAAY,MAARW,EACF,OAAO,KAET,GAAIT,KAAKxB,UAAUsB,EAAKW,EAAKX,OAASO,EAAA3B,QAAQC,UAE5C,OADA8B,EAAKiB,KAAO1B,KAAK0D,WAAWjD,EAAKiB,KAAM5B,GAChCW,EACF,GAAIT,KAAKxB,UAAUsB,EAAKW,EAAKX,OAASO,EAAA3B,QAAQI,YAEnD,OADA2B,EAAKkB,MAAQ3B,KAAK0D,WAAWjD,EAAKkB,MAAO7B,GAClCW,EAQT,GAAiB,MAAbA,EAAKiB,MAA8B,MAAdjB,EAAKkB,MAE5B,OADAlB,EAAO,KAIT,GAAiB,MAAbA,EAAKiB,KAEP,OADAjB,EAAOA,EAAKkB,MAEP,GAAkB,MAAdlB,EAAKkB,MAEd,OADAlB,EAAOA,EAAKiB,KAId,IAAMiC,EAAM3D,KAAKwD,QAAQ/C,EAAKkB,OAG9B,OAFAlB,EAAKX,IAAM6D,EAAI7D,IACfW,EAAKkB,MAAQ3B,KAAK0D,WAAWjD,EAAKkB,MAAOgC,EAAI7D,KACtCW,qBAjIUuC,8cCAAY,aACnB,SAAAA,IAAuC,IAA3BC,EAA2B1D,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAApB,6GAAAc,CAAAC,KAAA4D,GACrC5D,KAAK6D,QAAUA,EACf7D,KAAK8D,+CAEHhE,EAAKlC,GACP,GAAW,MAAPkC,GAAwB,MAATlC,EAAe,CAChC,IAAMmG,EAAW/D,KAAK6D,QAAQ/D,GAE9B,OADAE,KAAK8D,MAAMC,GAAY,IAAAC,EAAAnE,UAAcC,EAAKlC,IACnC,EAET,OAAO,8BAELkC,GACF,IAAMmE,EAAYjE,KAAK8D,MAAM9D,KAAK6D,QAAQ/D,IAC1C,OAAoB,MAAbmE,OAAoB9E,EAAY8E,EAAUrG,qCAE5CkC,GACL,OAAwC,MAAjCE,KAAK8D,MAAM9D,KAAK6D,QAAQ/D,mCAE1BA,GACL,QAAIE,KAAKkE,OAAOpE,YACPE,KAAK8D,MAAM9D,KAAK6D,QAAQ/D,KACxB,oCAKT,OAAOE,KAAKmE,YAAYC,IAAI,SAAAH,GAAA,OAAaA,EAAUrG,uCAGnD,OAAOoC,KAAKmE,YAAYC,IAAI,SAAAH,GAAA,OAAaA,EAAUnE,0CAGnD,OAAOxC,OAAO+G,OAAOrE,KAAK8D,uCAEpBQ,GAEN,IADA,IAAMC,EAAavE,KAAKmE,YACfvH,EAAI,EAAGA,EAAI2H,EAAWnE,OAAQxD,IAAK,CAC1C,IAAM4E,EAAS8C,EAAWC,EAAW3H,GAAGkD,IAAKyE,EAAW3H,GAAGgB,OAC3D,IAAe,IAAX4D,EACF,yCAKJ,OAAuB,IAAhBxB,KAAKmB,sCAGZ,OAAO7D,OAAOkH,KAAKxE,KAAK8D,OAAO1D,uCAG/BJ,KAAK8D,4CAGL,GAAI9D,KAAKuB,UACP,MAAO,GAIT,IAFA,IAAMgD,EAAavE,KAAKmE,YACpB/C,KAAemD,EAAW,GAAGlF,WACxBzC,EAAI,EAAGA,EAAI2H,EAAWnE,OAAQxD,IACrCwE,EAAeA,EAAf,IAA4BmD,EAAW3H,GAAGyC,WAE5C,OAAO+B,qBA/DUwC,2fCCAa,cACnB,SAAAA,IAAsC,IAA1BvE,EAA0BC,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAArB,2GAAAe,CAAAC,KAAAyE,GAAA,IAAAjC,mKAAAC,CAAAzC,MAAAyE,EAAA/B,WAAApF,OAAAqF,eAAA8B,IAAA1H,KAAAiD,KAC9BE,IAD8B,OAEpCsC,EAAKkC,UAAOvF,EAFwBqD,wWAIjChC,GACH,IAAMC,EAAO,IAAAC,EAAA4B,WAAe9B,GACX,MAAbR,KAAKO,MACPP,KAAKO,KAAOE,EACZT,KAAK0E,KAAOjE,IAGZT,KAAK0E,KAAK7D,KAAOJ,EACjBA,EAAK8B,KAAOvC,KAAK0E,KACjB1E,KAAK0E,KAAOjE,GAEdT,KAAKM,uCAEAE,EAASM,GACd,GAAIA,GAAS,GAAKA,GAASd,KAAKM,MAAO,CACrC,IAAMG,EAAO,IAAAC,EAAA4B,WAAe9B,GACxBI,EAAUZ,KAAKO,KACnB,GAAc,IAAVO,EACe,MAAbd,KAAKO,MACPP,KAAKO,KAAOE,EACZT,KAAK0E,KAAOjE,IAEZA,EAAKI,KAAOb,KAAKO,KACjBP,KAAKO,KAAKgC,KAAO9B,EACjBT,KAAKO,KAAOE,QAET,GAAIK,IAAUd,KAAKM,OACxBM,EAAUZ,KAAK0E,MACP7D,KAAOJ,EACfA,EAAK8B,KAAO3B,EACZZ,KAAK0E,KAAOjE,MACP,CACL,IAAMM,EAAWf,KAAKgB,aAAaF,EAAQ,GAC3CF,EAAUG,EAASF,KACnBJ,EAAKI,KAAOD,EACZG,EAASF,KAAOJ,EAChBG,EAAQ2B,KAAO9B,EACfA,EAAK8B,KAAOxB,EAGd,OADAf,KAAKM,SACE,EAET,OAAO,mCAEAQ,GACP,GAAIA,GAAS,GAAKA,EAAQd,KAAKM,MAAO,CACpC,IAAIM,EAAUZ,KAAKO,KACnB,GAAc,IAAVO,EACFd,KAAKO,KAAOP,KAAKO,KAAKM,KAEH,IAAfb,KAAKM,MAEPN,KAAK0E,UAAOvF,EAEZa,KAAKO,KAAKgC,UAAOpD,OAEd,GAAI2B,IAAUd,KAAKM,MAAQ,EAEhCM,EAAUZ,KAAK0E,KACf1E,KAAK0E,KAAO9D,EAAQ2B,KACpBvC,KAAK0E,KAAK7D,UAAO1B,MACZ,CAEL,IAAM4B,GADNH,EAAUZ,KAAKgB,aAAaF,IACHyB,KAEzBxB,EAASF,KAAOD,EAAQC,KACxBD,EAAQC,KAAK0B,KAAOxB,EAGtB,OADAf,KAAKM,QACEM,EAAQJ,yCAIXA,GAGN,IAFA,IAAII,EAAUZ,KAAKO,KACfO,EAAQ,EACM,MAAXF,GAAiB,CACtB,GAAIZ,KAAKE,SAASM,EAASI,EAAQJ,SACjC,OAAOM,EAETA,IACAF,EAAUA,EAAQC,KAEpB,OAAQ,oCAGR,OAAOb,KAAKO,uCAGZ,OAAOP,KAAK0E,gSAGZC,CAAAF,EAAAxG,UAAAyE,WAAApF,OAAAqF,eAAA8B,EAAAxG,WAAA,QAAA+B,MAAAjD,KAAAiD,MACAA,KAAK0E,UAAOvF,qCAGZ,GAAiB,MAAba,KAAKO,KACP,MAAO,GAIT,IAFA,IAAIa,KAAepB,KAAKO,KAAKC,QACzBI,EAAUZ,KAAKO,KAAKM,KACN,MAAXD,GACLQ,EAAeA,EAAf,IAA4BR,EAAQJ,QACpCI,EAAUA,EAAQC,KAEpB,OAAOO,4CAGP,GAAiB,MAAbpB,KAAK0E,KACP,MAAO,GAIT,IAFA,IAAItD,KAAepB,KAAK0E,KAAKlE,QACzBO,EAAWf,KAAK0E,KAAKnC,KACN,MAAZxB,GACLK,EAAeA,EAAf,IAA4BL,EAASP,QACrCO,EAAWA,EAASwB,KAEtB,OAAOnB,8BA1HUqD,gcCFAG,aACnB,SAAAA,iGAAc7E,CAAAC,KAAA4E,GACZ5E,KAAKM,MAAQ,EACbN,KAAK6C,YAAc,EACnB7C,KAAKsB,oDAGEd,GACP,GAAIR,KAAKuB,UACPvB,KAAK6E,QAAQrE,QACR,GAAIR,KAAK6C,YAAc,EAC5B7C,KAAK6C,cACL7C,KAAKsB,MAAMtB,KAAK6C,aAAerC,MAC1B,CACL,IAAK,IAAI5D,EAAIoD,KAAKM,MAAO1D,EAAI,EAAGA,IAC9BoD,KAAKsB,MAAM1E,GAAKoD,KAAKsB,MAAM1E,EAAI,GAEjCoD,KAAKM,QACLN,KAAKsB,MAAM,GAAKd,mCAIZA,GACNR,KAAKsB,MAAMtB,KAAKM,OAASE,EACzBR,KAAKM,8CAIL,IAAIN,KAAKuB,UAAT,CAGA,IAAMC,EAASxB,KAAKsB,MAAMtB,KAAK6C,aAG/B,cAFO7C,KAAKsB,MAAMtB,KAAK6C,aACvB7C,KAAK6C,cACErB,wCAIP,IAAIxB,KAAKuB,UAAT,CAGAvB,KAAKM,QACL,IAAMkB,EAASxB,KAAKsB,MAAMtB,KAAKM,OAE/B,cADON,KAAKsB,MAAMtB,KAAKM,OAChBkB,uCAIP,IAAIxB,KAAKuB,UAGT,OAAOvB,KAAKsB,MAAMtB,KAAK6C,gDAIvB,IAAI7C,KAAKuB,UAGT,OAAOvB,KAAKsB,MAAMtB,KAAKM,MAAQ,qCAI/B,OAAuB,IAAhBN,KAAKmB,uCAIZnB,KAAKsB,SACLtB,KAAKM,MAAQ,EACbN,KAAK6C,YAAc,iCAInB,OAAO7C,KAAKM,MAAQN,KAAK6C,+CAIzB,GAAI7C,KAAKuB,UACP,MAAO,GAGT,IADA,IAAIH,KAAepB,KAAKsB,MAAMtB,KAAK6C,aAC1BjG,EAAIoD,KAAK6C,YAAc,EAAGjG,EAAIoD,KAAKM,MAAO1D,IACjDwE,EAAeA,EAAf,IAA4BpB,KAAKsB,MAAM1E,GAEzC,OAAOwE,qBAnFUwD,sRCAfE,GACJC,MAAO,EACPC,KAAM,EACNC,MAAO,GAGHC,EAAkB,SAAAC,GAEtB,IADA,IAAMC,KACGxI,EAAI,EAAGA,EAAIuI,EAAS/E,OAAQxD,IACnCwI,EAAMD,EAASvI,IAAMkI,EAAOC,MAE9B,OAAOK,GAGIC,qBAAqB,SAACC,EAAOC,EAAanC,GACrD,IAAM+B,EAAWG,EAAME,cACjBC,EAAUH,EAAMI,aAChBN,EAAQF,EAAgBC,GACxBQ,EAAQ,IAAAC,EAAAC,QAId,IAFAF,EAAMG,QAAQP,IAENI,EAAMpE,WAAW,CACvB,IAAMwE,EAAIJ,EAAMK,UACVC,EAAYR,EAAQ/H,IAAIqI,GAC9BX,EAAMW,GAAKjB,EAAOE,KAClB,IAAK,IAAIpI,EAAI,EAAGA,EAAIqJ,EAAU7F,OAAQxD,IAAK,CACzC,IAAMsJ,EAAID,EAAUrJ,GAChBwI,EAAMc,KAAOpB,EAAOC,QACtBK,EAAMc,GAAKpB,EAAOE,KAClBW,EAAMG,QAAQI,IAGlBd,EAAMW,GAAKjB,EAAOG,MACd7B,GACFA,EAAS2C,KAKFI,MAAM,SAACb,EAAOC,GACzB,IAAMJ,EAAWG,EAAME,cACjBC,EAAUH,EAAMI,aAChBN,EAAQF,EAAgBC,GACxBQ,EAAQ,IAAAC,EAAAC,QACRO,KACAC,KACNV,EAAMG,QAAQP,GACd,IAAK,IAAI3I,EAAI,EAAGA,EAAIuI,EAAS/E,OAAQxD,IACnCwJ,EAAUjB,EAASvI,IAAM,EACzByJ,EAAalB,EAASvI,IAAM,KAE9B,MAAQ+I,EAAMpE,WAAW,CACvB,IAAMwE,EAAIJ,EAAMK,UACVC,EAAYR,EAAQ/H,IAAIqI,GAC9BX,EAAMW,GAAKjB,EAAOE,KAClB,IAAK,IAAIpI,EAAI,EAAGA,EAAIqJ,EAAU7F,OAAQxD,IAAK,CACzC,IAAMsJ,EAAID,EAAUrJ,GAChBwI,EAAMc,KAAOpB,EAAOC,QACtBK,EAAMc,GAAKpB,EAAOE,KAClBoB,EAAUF,GAAKE,EAAUL,GAAK,EAC9BM,EAAaH,GAAKH,EAClBJ,EAAMG,QAAQI,IAGlBd,EAAMW,GAAKjB,EAAOG,MAEpB,OACEmB,YACAC,gMCDYC,aAAT,SAAsBC,GAC3B,OAA4B,IAjC9B,SAASC,EAAYD,GACnB,IAAIE,EAAM,EACNC,EAAM,EACNC,GAAmB,EAEvB,IAAKF,EAAM,EAAGA,EAAMF,EAAOnG,OAAQqG,IAAO,CACxC,IAAKC,EAAM,EAAGA,EAAMH,EAAOE,GAAKrG,OAAQsG,IACtC,GAAIH,EAAOE,GAAKC,KAASE,EAAY,CACnCD,GAAmB,EACnB,MAGJ,IAAyB,IAArBA,EACF,MAGJ,IAAyB,IAArBA,EACF,OAAO,EAGT,IAAK,IAAIE,EAAM,EAAGA,GAAO,EAAGA,IAC1B,GAAIC,EAAOP,EAAQE,EAAKC,EAAKG,GAAM,CAEjC,GADAN,EAAOE,GAAKC,GAAOG,EACfL,EAAYD,GACd,OAAO,EAETA,EAAOE,GAAKC,GAAOE,EAGvB,OAAO,EAIHJ,CAAYD,GACPA,EAEF,uBA1ET,IAAMK,EAAa,EA+BnB,SAASE,EAAOP,EAAQE,EAAKC,EAAKG,GAChC,OA9BF,SAAmBN,EAAQE,EAAKI,GAC9B,IAAK,IAAIH,EAAM,EAAGA,EAAMH,EAAOnG,OAAQsG,IACrC,GAAIH,EAAOE,GAAKC,KAASG,EACvB,OAAO,EAGX,OAAO,EAyBJE,CAAUR,EAAQE,EAAKI,KAtB5B,SAAmBN,EAAQG,EAAKG,GAC9B,IAAK,IAAIJ,EAAM,EAAGA,EAAMF,EAAOnG,OAAQqG,IACrC,GAAIF,EAAOE,GAAKC,KAASG,EACvB,OAAO,EAGX,OAAO,EAiBJG,CAAUT,EAAQG,EAAKG,KAd5B,SAAmBN,EAAQU,EAAaC,EAAaL,GACnD,IAAK,IAAIJ,EAAM,EAAGA,EAAM,EAAGA,IACzB,IAAK,IAAIC,EAAM,EAAGA,EAAM,EAAGA,IACzB,GAAIH,EAAOE,EAAMQ,GAAaP,EAAMQ,KAAiBL,EACnD,OAAO,EAIb,OAAO,EAOJM,CAAUZ,EAAQE,EAAOA,EAAM,EAAIC,EAAOA,EAAM,EAAIG,mLCPzCO,WAAT,SAAoBC,GAEzB,IADA,IAAMC,KACG1K,EAAI,EAAGA,EAAIyK,EAAKjH,OAAQxD,IAAK,CACpC0K,EAAS1K,MACT,IAAK,IAAImF,EAAI,EAAGA,EAAIsF,EAAKzK,GAAGwD,OAAQ2B,IAClCuF,EAAS1K,GAAGmF,GAAK,EAGrB,OAAuC,IA5BzC,SAASwF,EAASF,EAAMG,EAAGC,EAAGH,GAC5B,IAAMzJ,EAAIwJ,EAAKjH,OACf,OAAIoH,IAAM3J,EAAI,GAAK4J,IAAM5J,EAAI,GAC3ByJ,EAASE,GAAGC,GAAK,GACV,IAEkB,IAd7B,SAAgBJ,EAAMG,EAAGC,GACvB,IAAM5J,EAAIwJ,EAAKjH,OACf,OAAIoH,GAAK,GAAKC,GAAK,GAAKD,EAAI3J,GAAK4J,EAAI5J,GAAoB,IAAfwJ,EAAKG,GAAGC,GAY9CX,CAAOO,EAAMG,EAAGC,KAClBH,EAASE,GAAGC,GAAK,IACbF,EAASF,EAAMG,EAAI,EAAGC,EAAGH,MAGzBC,EAASF,EAAMG,EAAGC,EAAI,EAAGH,KAG7BA,EAASE,GAAGC,GAAK,GACV,IAaLF,CAASF,EAAM,EAAG,EAAGC,GAChBA,EAEF,gMCvCOI,SAAT,SAAkBC,EAAUC,EAASvD,GAI1C,IAHA,IAAMxG,EAAIwG,EAAOjE,OACbyH,EAAO,EACPC,EAAM,EACDlL,EAAI,EAAGA,EAAIiB,GAAKgK,EAAOF,EAAU/K,IACxC,GAAIgL,EAAQhL,IAAM+K,EAAWE,EAC3BC,GAAOzD,EAAOzH,GACdiL,GAAQD,EAAQhL,OAEX,CACL,IAAMe,GAAKgK,EAAWE,GAAQD,EAAQhL,GACtCkL,GAAOnK,EAAI0G,EAAOzH,GAClBiL,GAAQD,EAAQhL,GAIpB,OAAOkL,kLChBOJ,SAAT,SAASA,EAASC,EAAUC,EAASvD,EAAQxG,GAClD,GAAU,IAANA,GAAwB,IAAb8J,EACb,OAAO,EAET,GAAIC,EAAQ/J,EAAI,GAAK8J,EACnB,OAAOD,EAASC,EAAUC,EAASvD,EAAQxG,EAAI,GAEjD,IAAMS,EAAI+F,EAAOxG,EAAI,GAAK6J,EAASC,EAAWC,EAAQ/J,EAAI,GAAI+J,EAASvD,EAAQxG,EAAI,GAC7EU,EAAImJ,EAASC,EAAUC,EAASvD,EAAQxG,EAAI,GAClD,OAAOS,EAAIC,EAAID,EAAIC,+HCTrB,SAASwJ,EAAWlK,EAAG8J,EAAUK,GAI/B,IAHA,IAAIpL,EAAIiB,EACJoK,EAAIN,EAED/K,EAAI,GAAKqL,EAAI,GACdD,EAAGpL,GAAGqL,KAAOD,EAAGpL,EAAI,GAAGqL,IACzBC,QAAQC,IACA,QAAUvL,EAAI,iCAAmCgL,QAAQhL,EAAI,GAAK,IAAMyH,OAAOzH,EAAI,IAG3FqL,GAAKD,IADLpL,GACWqL,IAEXrL,uDAKU8K,SAAT,SAAkBC,EAAUC,EAASvD,EAAQxG,GAElD,IADA,IAAMmK,KACGpL,EAAI,EAAGA,GAAKiB,EAAGjB,IACtBoL,EAAGpL,MAEL,IAAK,IAAIA,EAAI,EAAGA,GAAKiB,EAAGjB,IACtB,IAAK,IAAIsJ,EAAI,EAAGA,GAAKyB,EAAUzB,IAC7B,GAAU,IAANtJ,GAAiB,IAANsJ,EACb8B,EAAGpL,GAAGsJ,GAAK,OACN,GAAI0B,EAAQhL,EAAI,IAAMsJ,EAAG,CAC9B,IAAM5H,EAAI+F,EAAOzH,EAAI,GAAKoL,EAAGpL,EAAI,GAAGsJ,EAAI0B,EAAQhL,EAAI,IAC9C2B,EAAIyJ,EAAGpL,EAAI,GAAGsJ,GACpB8B,EAAGpL,GAAGsJ,GAAK5H,EAAIC,EAAID,EAAIC,OAGvByJ,EAAGpL,GAAGsJ,GAAK8B,EAAGpL,EAAI,GAAGsJ,GAO3B,OADA6B,EAAWlK,EAAG8J,EAAUK,GACjBA,EAAGnK,GAAG8J,mLCvCCS,cAAT,SAAuBC,EAAOC,GAGnC,IAFA,IAAMC,KACFC,EAAQ,EACH5L,EAAIyL,EAAMjI,OAAQxD,GAAK,EAAGA,IAEjC,IADA,IAAM6L,EAAOJ,EAAMzL,GACZ4L,EAAQC,GAAQH,GACrBC,EAAOG,KAAKD,GACZD,GAASC,EAGb,OAAOF,kLCVOH,cAAT,SAAuBC,EAAOC,GACnC,IAAMK,KA6BN,OA3BmB,SAAbC,EAAchL,GAClB,IAAKA,EACH,SAEF,GAAI+K,EAAM/K,GACR,OAAO+K,EAAM/K,GAKf,IAHA,IAAIyE,KACAwG,SACAC,SACKlM,EAAI,EAAGA,EAAIyL,EAAMjI,OAAQxD,IAAK,CACrC,IAAM6L,EAAOJ,EAAMzL,IACnBkM,EAAYlL,EAAQ6K,IACH,IACfI,EAASD,EAAWE,IAGpBA,GAAa,IACZD,EAAOzI,OAASiC,EAAIjC,OAAS,IAAMiC,EAAIjC,UACvCyI,EAAOzI,SAAW0I,KAEnBzG,GAAOoG,GAAMM,OAAOF,IAIxB,OAAQF,EAAM/K,GAASyE,EAElBuG,CAAWN,iMCZJU,aAAT,SAAsBzJ,EAAO3B,GAAmC,IAA5BY,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAG/DkK,GAFc,EAAAC,EAAAjH,WAAU1C,GAELa,OAAS,EAClC,OAnBF,SAAS+I,EAAsB5J,EAAO3B,EAAOwL,EAAKH,GAAkC,IAA5BzK,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAClF,GAAIqK,GAAOH,EAAM,CACf,IAAMI,EAAMxH,KAAKC,OAAOsH,EAAMH,GAAQ,GAChCzI,EAAUjB,EAAM8J,GACtB,OAAI7K,EAAUgC,EAAS5C,KAAWyC,EAAA3B,QAAQC,UACjCwK,EAAsB5J,EAAO3B,EAAOyL,EAAM,EAAGJ,EAAMzK,GACjDA,EAAUgC,EAAS5C,KAAWyC,EAAA3B,QAAQI,YACxCqK,EAAsB5J,EAAO3B,EAAOwL,EAAKC,EAAM,EAAG7K,GAElD6K,EAGX,OAAAhJ,EAAAT,eAOOuJ,CAAsB5J,EAAO3B,EAFxB,EAEoCqL,EAAMzK,0LCpBxC8K,iBAAT,SAA0B/J,EAAO3B,GACtC,IADuE,IAA1BsC,EAA0BC,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAArB,cAC9DpC,EAAI,EAAGA,EAAI2C,EAAMa,OAAQxD,IAChC,GAAIsD,EAAStC,EAAO2B,EAAM3C,IACxB,OAAOA,EAGX,OAAAyD,EAAAT,sMCEc2J,oBAAT,SACLhK,EACA3B,GAUA,IANA,IAHAY,EAGA2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAFAmB,EAEAC,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAArB,cADAwK,EACArJ,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAX,YAEI0J,EAAM,EACNH,EAFe1J,EAAXa,OAEY,EAChBqJ,GAAY,EACZC,GAAS,EAEXN,GAAOH,IACP,EAAA5I,EAAAxB,cAAajB,EAAO2B,EAAM6J,GAAM5K,KAChC,EAAA6B,EAAAhC,cAAaT,EAAO2B,EAAM0J,GAAOzK,IACjC,CAGA,GAFAkL,EAAQF,EAAO5L,EAAO2B,EAAM6J,IAAQI,EAAOjK,EAAM0J,GAAO1J,EAAM6J,IAC9DK,EAAWL,EAAMvH,KAAKC,OAAOmH,EAAOG,GAAOM,GACvCxJ,EAASX,EAAMkK,GAAW7L,GAC5B,OAAO6L,EAELjL,EAAUe,EAAMkK,GAAW7L,KAAWyC,EAAA3B,QAAQC,UAChDyK,EAAMK,EAAW,EAEjBR,EAAOQ,EAAW,EAGtB,OAAApJ,EAAAT,6MCnCcoJ,aAAT,SAAsBzJ,EAAO3B,GAIlC,IAJqE,IAA5BY,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC/D4K,GAAc,EAAAT,EAAAjH,WAAU1C,GAC1B6J,EAAM,EACNH,EAAOU,EAAYvJ,OAAS,EACzBgJ,GAAOH,GAAM,CAClB,IAAMI,EAAMxH,KAAKC,OAAOsH,EAAMH,GAAQ,GAChCzI,EAAUmJ,EAAYN,GAE5B,GAAI7K,EAAUgC,EAAS5C,KAAWyC,EAAA3B,QAAQC,UACxCyK,EAAMC,EAAM,MAEP,IAAI7K,EAAUgC,EAAS5C,KAAWyC,EAAA3B,QAAQI,YAK/C,OAAOuK,EAJPJ,EAAOI,EAAM,GAOjB,OAAAhJ,EAAAT,sMCpBcgK,UAAT,SAAmBrK,GAExB,IAF2D,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eACvD8K,EAAYtK,EAAMa,OAAS,EACxByJ,EAAY,GAAG,CACpB,IAAK,IAAIjN,EAAIiN,EAAWjN,EAAI2C,EAAMa,OAAQxD,IAAK,CAG7C,IAFA,IAAImF,EAAInF,EACFmG,EAAOxD,EAAM3C,GACZmF,GAAK8H,GAAarL,EAAUe,EAAMwC,EAAI8H,GAAY9G,KAAU1C,EAAA3B,QAAQI,aACzES,EAAMwC,GAAKxC,EAAMwC,EAAI8H,GACrB9H,GAAK8H,EAEPtK,EAAMwC,GAAKgB,EAGX8G,EADgB,IAAdA,EACU,EAEAhI,KAAKC,MAAmB,EAAZ+H,EAAiB,IAG7C,OAAOtK,8MClBIuK,gBAAgB,SAACvK,GAG5B,IAHkE,IAA/Bf,EAA+B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC1DqB,EAAWb,EAAXa,OACJ2J,SACKnN,EAAI,EAAGA,EAAIwD,EAAS,EAAGxD,IAAK,CACnCmN,EAAWnN,EAEX,IAAK,IAAImF,EAAInF,EAAGmF,EAAI3B,EAAQ2B,IACtBvD,EAAUe,EAAMwK,GAAWxK,EAAMwC,MAAQ1B,EAAA3B,QAAQI,cAEnDiL,EAAWhI,GAGXnF,IAAMmN,IAER,EAAA1J,EAAAf,MAAKC,EAAO3C,EAAGmN,GAGnB,OAAOxK,yLCSOyK,UAAT,SAAmBzK,GAAuB,IAAhB0K,EAAgB9J,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAJ,GAC3C,GAAIZ,EAAMa,OAAS,EACjB,OAAOb,EAMT,IAJA,IAAM2K,GAAW,EAAAC,EAAA/H,cAAa7C,GACxB6K,GAAW,EAAAD,EAAAjI,cAAa3C,GAE1B8K,EAAmB,GACfD,EAAWF,GAAYG,GAAoB,GAEjD9K,EAAQ+K,EAAqB/K,EAAO0K,EAAWI,EAAkBH,GAEjEG,GAAoBJ,EAEtB,OAAO1K,GAxCT,IAAMgL,EAAiB,SAAC3M,EAAOsM,EAAUG,EAAkBJ,GAApC,OACrBpI,KAAKC,OAAQlE,EAAQsM,GAAYG,EAAoBJ,IAEjDK,EAAuB,SAAC/K,EAAO0K,EAAWI,EAAkBH,GAIhE,IAHA,IAAIM,SACEC,KACA9G,KACG/G,EAAI,EAAGA,EAAIqN,EAAWrN,IAC7B6N,EAAQ7N,GAAK,EAEf,IAAK,IAAIA,EAAI,EAAGA,EAAI2C,EAAMa,OAAQxD,IAChC4N,EAAeD,EAAehL,EAAM3C,GAAIsN,EAAUG,EAAkBJ,GACpEQ,EAAQD,KAEV,IAAK,IAAI5N,EAAI,EAAGA,EAAIqN,EAAWrN,IAC7B6N,EAAQ7N,IAAM6N,EAAQ7N,EAAI,GAE5B,IAAK,IAAIA,EAAI2C,EAAMa,OAAS,EAAGxD,GAAK,EAAGA,IACrC4N,EAAeD,EAAehL,EAAM3C,GAAIsN,EAAUG,EAAkBJ,GACpEtG,IAAM8G,EAAQD,IAAiBjL,EAAM3C,GAEvC,IAAK,IAAIA,EAAI,EAAGA,EAAI2C,EAAMa,OAAQxD,IAChC2C,EAAM3C,GAAK+G,EAAI/G,GAEjB,OAAO2C,yLCfOmL,UAAT,SAASA,EAAUnL,GAAmC,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC3D,GAAIQ,EAAMa,OAAS,EAAG,KAAAuK,EACDpL,EAAXa,EADYuK,EACZvK,OACFwK,EAAS/I,KAAKC,MAAM1B,EAAS,GAC7BsB,EAAOgJ,EAAUnL,EAAMsL,MAAM,EAAGD,GAASpM,GACzCmD,EAAQ+I,EAAUnL,EAAMsL,MAAMD,EAAQxK,GAAS5B,GACrDe,EAfJ,SAAemC,EAAMC,EAAOnD,GAI1B,IAHA,IAAI5B,EAAI,EACJmF,EAAI,EACFP,KACC5E,EAAI8E,EAAKtB,QAAU2B,EAAIJ,EAAMvB,QAClCoB,EAAOkH,KAAKlK,EAAUkD,EAAK9E,GAAI+E,EAAMI,MAAQ1B,EAAA3B,QAAQC,UAAY+C,EAAK9E,KAAO+E,EAAMI,MAErF,OAAOP,EAAOuH,OAAOnM,EAAI8E,EAAKtB,OAASsB,EAAKmJ,MAAMjO,GAAK+E,EAAMkJ,MAAM9I,IAQzD+I,CAAMpJ,EAAMC,EAAOnD,GAE7B,OAAOe,yLCjBOwL,aAAT,SAAsBxL,GAC3B,GAAIA,EAAMa,OAAS,EACjB,OAAOb,EAET,IAAM6K,GAAW,EAAAD,EAAAjI,cAAa3C,GAC1ByL,EAAc,EACZC,EAAS,IAAIC,MAAMd,EAAW,GAcpC,OAbA7K,EAAM4L,QAAQ,SAAA3K,GACPyK,EAAOzK,KACVyK,EAAOzK,GAAW,GAEpByK,EAAOzK,OAGTyK,EAAOE,QAAQ,SAAC3K,EAAS5D,GACvB,KAAO4D,EAAU,GACfjB,EAAMyL,KAAiBpO,EACvB4D,MAGGjB,iTCUO6L,WAAT,SAAoB7L,GAAuB,IAAhB8L,EAAgBlL,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAH,EAC7C,OAAIZ,EAAMa,OAAS,EACVb,EAZX,SAAqBkL,GAEnB,IADA,IAAMd,KACG/M,EAAI,EAAGA,EAAI6N,EAAQrK,OAAQxD,IAChB,MAAd6N,EAAQ7N,MACV,EAAA0O,EAAAxI,eAAc2H,EAAQ7N,IACtB+M,EAAYjB,KAAZ6C,MAAA5B,EAAA6B,EAAoBf,EAAQ7N,MAGhC,OAAO+M,EAOA8B,CAnCT,SAAuBlM,EAAO8L,GAG5B,IAFA,IAAInB,EAAW3K,EAAM,GACjB6K,EAAW7K,EAAM,GACZ3C,EAAI,EAAGA,EAAI2C,EAAMa,OAAQxD,IAC5B2C,EAAM3C,GAAKsN,EACbA,EAAW3K,EAAM3C,GACR2C,EAAM3C,GAAKwN,IACpBA,EAAW7K,EAAM3C,IAKrB,IAFA,IAAM8O,EAAc7J,KAAKC,OAAOsI,EAAWF,GAAYmB,GAAc,EAC/DZ,KACG7N,EAAI,EAAGA,EAAI8O,EAAa9O,IAC/B6N,EAAQ7N,MAEV,IAAK,IAAIA,EAAI,EAAGA,EAAI2C,EAAMa,OAAQxD,IAChC6N,EAAQ5I,KAAKC,OAAOvC,EAAM3C,GAAKsN,GAAYmB,IAAa3C,KAAKnJ,EAAM3C,IAErE,OAAO6N,EAgBSkB,CAAcpM,EAAO8L,2LClCvBO,mBAAT,SAA4BrM,GAEjC,IAFoE,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC5DqB,EAAWb,EAAXa,OACCxD,EAAI,EAAGA,EAAIwD,EAAQxD,IAE1B,IAAK,IAAImF,EAAI,EAAGA,EAAI3B,EAAS,EAAIxD,EAAGmF,IAE9BvD,EAAUe,EAAMwC,GAAIxC,EAAMwC,EAAI,MAAQ1B,EAAA3B,QAAQI,cAEhD,EAAAuB,EAAAf,MAAKC,EAAOwC,EAAGA,EAAI,GAIzB,OAAOxC,yLCZOsM,WAAT,SAAoBtM,GAEzB,IAF4D,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eACpDqB,EAAWb,EAAXa,OACCxD,EAAI,EAAGA,EAAIwD,EAAQxD,IAE1B,IAAK,IAAImF,EAAI,EAAGA,EAAI3B,EAAS,EAAG2B,IAE1BvD,EAAUe,EAAMwC,GAAIxC,EAAMwC,EAAI,MAAQ1B,EAAA3B,QAAQI,cAEhD,EAAAuB,EAAAf,MAAKC,EAAOwC,EAAGA,EAAI,GAIzB,OAAOxC,yLCZOuM,QAAT,SAAiBvM,GAEtB,IADA,IAAIwM,EAAexM,EAAMa,OACD,IAAjB2L,GAAoB,CACzB,IAAMC,EAAcnK,KAAKC,MAAMD,KAAKoK,SAAWF,GAC/CA,KACA,EAAA1L,EAAAf,MAAKC,EAAOwM,EAAcC,GAE5B,OAAOzM,gLCTT,IAAM2M,EAAMvM,OAAOwM,iBACbC,EAAO,SAACxP,EAAGyP,GACf,KAAOA,EAAOzP,IACZA,EAAIyP,EAAOzP,GAEb,OAAOA,GAEH0P,EAAQ,SAAC1P,EAAGmF,EAAGsK,GACnB,OAAIzP,IAAMmF,IACRsK,EAAOtK,GAAKnF,GACL,IAmBE2P,UAAU,SAAAjH,GASrB,IAT8B,IACtBlF,EAAWkF,EAAXlF,OACFiM,KACFG,EAAK,EACLlO,SACAC,SACAwH,SACA0G,SACEC,EAvBe,SAAApH,GAGrB,IAFA,IAAMoH,KACEtM,EAAWkF,EAAXlF,OACCxD,EAAI,EAAGA,EAAIwD,EAAQxD,IAAK,CAC/B8P,EAAK9P,MACL,IAAK,IAAImF,EAAI,EAAGA,EAAI3B,EAAQ2B,IACN,IAAhBuD,EAAM1I,GAAGmF,GACX2K,EAAK9P,GAAGmF,GAAKmK,EAEbQ,EAAK9P,GAAGmF,GAAKuD,EAAM1I,GAAGmF,GAI5B,OAAO2K,EAUMC,CAAerH,GACrBkH,EAAKpM,EAAS,GAAG,CACtB,IAAK,IAAIxD,EAAI,EAAGyF,EAAM6J,EAAKtP,EAAIwD,EAAQxD,IACrC,IAAK,IAAImF,EAAI,EAAGA,EAAI3B,EAAQ2B,IACtB2K,EAAK9P,GAAGmF,GAAKM,IACfA,EAAMqK,EAAK9P,GAAGmF,GACdzD,EAAIyH,EAAInJ,EACR2B,EAAIkO,EAAI1K,GAIdgE,EAAIqG,EAAKrG,EAAGsG,GACZI,EAAIL,EAAKK,EAAGJ,GACRC,EAAMvG,EAAG0G,EAAGJ,IACdG,IAEFE,EAAKpO,GAAGC,GAAKmO,EAAKnO,GAAGD,GAAK4N,EAE5B,OAAOG,gLCvDT,IAAMH,EAAMvM,OAAOwM,iBACbS,EAAS,SAACtH,EAAOxF,EAAK+M,GAI1B,IAFA,IAAIxK,EAAM6J,EACNY,EAAW,EACNL,EAAI,EAAGA,EAAInH,EAAMlF,OAAQqM,KACb,IAAfI,EAAQJ,IAAgB3M,EAAI2M,GAAKpK,IACnCA,EAAMvC,EAAI2M,GACVK,EAAWL,GAGf,OAAOK,GAEIC,OAAO,SAAAzH,GAKlB,IAJA,IAAM+G,KACAvM,KACA+M,KACEzM,EAAWkF,EAAXlF,OACCxD,EAAI,EAAGA,EAAIwD,EAAQxD,IAC1BkD,EAAIlD,GAAKsP,EACTW,EAAQjQ,IAAK,EAEfkD,EAAI,GAAK,EACTuM,EAAO,IAAM,EACb,IAAK,IAAIzP,EAAI,EAAGA,EAAIwD,EAAS,EAAGxD,IAAK,CACnC,IAAMmJ,EAAI6G,EAAOtH,EAAOxF,EAAK+M,GAC7BA,EAAQ9G,IAAK,EACb,IAAK,IAAI0G,EAAI,EAAGA,EAAIrM,EAAQqM,IACtBnH,EAAMS,GAAG0G,KAAOI,EAAQJ,IAAMnH,EAAMS,GAAG0G,GAAK3M,EAAI2M,KAClDJ,EAAOI,GAAK1G,EACZjG,EAAI2M,GAAKnH,EAAMS,GAAG0G,IAIxB,OAAOJ,gLClCIW,gBAAgB,SAAA1H,GAG3B,IAFA,IAAM2H,KACE7M,EAAWkF,EAAXlF,OACCxD,EAAI,EAAGA,EAAIwD,EAAQxD,IAAK,CAC/BqQ,EAAKrQ,MACL,IAAK,IAAImF,EAAI,EAAGA,EAAI3B,EAAQ2B,IACtBnF,IAAMmF,EACRkL,EAAKrQ,GAAGmF,GAAK,EACHmL,SAAS5H,EAAM1I,GAAGmF,IAG5BkL,EAAKrQ,GAAGmF,GAAKuD,EAAM1I,GAAGmF,GAFtBkL,EAAKrQ,GAAGmF,GAAKoL,IAMnB,IAAK,IAAIlF,EAAI,EAAGA,EAAI7H,EAAQ6H,IAC1B,IAAK,IAAIrL,EAAI,EAAGA,EAAIwD,EAAQxD,IAC1B,IAAK,IAAImF,EAAI,EAAGA,EAAI3B,EAAQ2B,IACtBkL,EAAKrQ,GAAGqL,GAAKgF,EAAKhF,GAAGlG,GAAKkL,EAAKrQ,GAAGmF,KACpCkL,EAAKrQ,GAAGmF,GAAKkL,EAAKrQ,GAAGqL,GAAKgF,EAAKhF,GAAGlG,IAK1C,OAAOkL,gLCxBT,IAAMf,EAAMvM,OAAOwM,iBACbiB,EAAc,SAACH,EAAMJ,GAGzB,IAFA,IAAIxK,EAAM6J,EACNY,GAAY,EACPL,EAAI,EAAGA,EAAIQ,EAAK7M,OAAQqM,KACZ,IAAfI,EAAQJ,IAAgBQ,EAAKR,IAAMpK,IACrCA,EAAM4K,EAAKR,GACXK,EAAWL,GAGf,OAAOK,GAEIO,WAAW,SAAC/H,EAAOgI,GAI9B,IAHA,IAAML,KACAJ,KACEzM,EAAWkF,EAAXlF,OACCxD,EAAI,EAAGA,EAAIwD,EAAQxD,IAC1BqQ,EAAKrQ,GAAKsP,EACVW,EAAQjQ,IAAK,EAEfqQ,EAAKK,GAAO,EACZ,IAAK,IAAI1Q,EAAI,EAAGA,EAAIwD,EAAS,EAAGxD,IAAK,CACnC,IAAMmJ,EAAIqH,EAAYH,EAAMJ,GAC5BA,EAAQ9G,IAAK,EACb,IAAK,IAAI0G,EAAI,EAAGA,EAAIrM,EAAQqM,KACrBI,EAAQJ,IAAsB,IAAhBnH,EAAMS,GAAG0G,IAAYQ,EAAKlH,KAAOmG,GAAOe,EAAKlH,GAAKT,EAAMS,GAAG0G,GAAKQ,EAAKR,KACtFQ,EAAKR,GAAKQ,EAAKlH,GAAKT,EAAMS,GAAG0G,IAInC,OAAOQ,gLC5BT,IAAMnI,GACJC,MAAO,EACPC,KAAM,EACNC,MAAO,GAGHC,EAAkB,SAAAC,GAEtB,IADA,IAAMC,KACGxI,EAAI,EAAGA,EAAIuI,EAAS/E,OAAQxD,IACnCwI,EAAMD,EAASvI,IAAMkI,EAAOC,MAE9B,OAAOK,GAGHmI,EAAwB,SAAxBA,EAAyBxH,EAAGX,EAAOK,EAASrC,GAChDgC,EAAMW,GAAKjB,EAAOE,KACd5B,GACFA,EAAS2C,GAIX,IADA,IAAME,EAAYR,EAAQ/H,IAAIqI,GACrBnJ,EAAI,EAAGA,EAAIqJ,EAAU7F,OAAQxD,IAAK,CACzC,IAAMsJ,EAAID,EAAUrJ,GAChBwI,EAAMc,KAAOpB,EAAOC,OACtBwI,EAAsBrH,EAAGd,EAAOK,EAASrC,GAG7CgC,EAAMW,GAAKjB,EAAOG,OAgBduI,GAZOC,mBAAmB,SAACnI,EAAOlC,GAKtC,IAJA,IAAM+B,EAAWG,EAAME,cACjBC,EAAUH,EAAMI,aAChBN,EAAQF,EAAgBC,GAErBvI,EAAI,EAAGA,EAAIuI,EAAS/E,OAAQxD,IAC/BwI,EAAMD,EAASvI,MAAQkI,EAAOC,OAChCwI,EAAsBpI,EAASvI,GAAIwI,EAAOK,EAASrC,IAKxC,SAAXoK,EAAYzH,EAAGX,EAAOlI,EAAGwQ,EAAGvP,EAAGwP,EAAMlI,GAEzCL,EAAMW,GAAKjB,EAAOE,KAClB9H,EAAE6I,KAAO4H,EAAKrN,MAEd,IADA,IAAM2F,EAAYR,EAAQ/H,IAAIqI,GACrBnJ,EAAI,EAAGA,EAAIqJ,EAAU7F,OAAQxD,IAAK,CACzC,IAAMsJ,EAAID,EAAUrJ,GAChBwI,EAAMc,KAAOpB,EAAOC,QACtB5G,EAAE+H,GAAKH,EACPyH,EAAStH,EAAGd,EAAOlI,EAAGwQ,EAAGvP,EAAGwP,EAAMlI,IAGtCL,EAAMW,GAAKjB,EAAOG,MAClByI,EAAE3H,KAAO4H,EAAKrN,QAIHsN,MAAM,SAAAtI,GAQjB,IAPA,IAAMH,EAAWG,EAAME,cACjBC,EAAUH,EAAMI,aAChBN,EAAQF,EAAgBC,GACxBjI,KACAwQ,KACAvP,KACAwP,GAASrN,MAAO,GACb1D,EAAI,EAAGA,EAAIuI,EAAS/E,OAAQxD,IACnC8Q,EAAEvI,EAASvI,IAAM,EACjBM,EAAEiI,EAASvI,IAAM,EACjBuB,EAAEgH,EAASvI,IAAM,KAEnB,IAAK,IAAIA,EAAI,EAAGA,EAAIuI,EAAS/E,OAAQxD,IAC/BwI,EAAMD,EAASvI,MAAQkI,EAAOC,OAChCyI,EAASrI,EAASvI,GAAIwI,EAAOlI,EAAGwQ,EAAGvP,EAAGwP,EAAMlI,GAGhD,OACEoI,UAAW3Q,EACX4Q,SAAUJ,EACVrH,aAAclI,4dCjFG4P,aACnB,SAAAA,IAAgC,IAApBC,EAAoB7N,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,IAAAA,UAAA,gGAAAJ,CAAAC,KAAA+N,GAC9B/N,KAAKgO,WAAaA,EAClBhO,KAAKmF,YACLnF,KAAKyF,QAAU,IAAAwI,EAAApI,oDAEP4G,GACHzM,KAAKmF,SAAS+I,SAASzB,KAC1BzM,KAAKmF,SAASuD,KAAK+D,GACnBzM,KAAKyF,QAAQ0I,IAAI1B,uCAGbnO,EAAGC,GACJyB,KAAKyF,QAAQ/H,IAAIY,IACpB0B,KAAKoO,UAAU9P,GAEZ0B,KAAKyF,QAAQ/H,IAAIa,IACpByB,KAAKoO,UAAU7P,GAEjByB,KAAKyF,QAAQ/H,IAAIY,GAAGoK,KAAKnK,IACD,IAApByB,KAAKgO,YACPhO,KAAKyF,QAAQ/H,IAAIa,GAAGmK,KAAKpK,yCAI3B,OAAO0B,KAAKmF,8CAGZ,OAAOnF,KAAKyF,2CAIZ,IADA,IAAIrH,EAAI,GACCxB,EAAI,EAAGA,EAAIoD,KAAKmF,SAAS/E,OAAQxD,IAAK,CAC7CwB,GAAQ4B,KAAKmF,SAASvI,GAAtB,OAEA,IADA,IAAMqJ,EAAYjG,KAAKyF,QAAQ/H,IAAIsC,KAAKmF,SAASvI,IACxCmF,EAAI,EAAGA,EAAIkE,EAAU7F,OAAQ2B,IACpC3D,GAAQ6H,EAAUlE,GAAlB,IAEF3D,GAAK,KAEP,OAAOA,qBAxCU2P,6JCArB,SAASM,EAAQ9O,EAAOuB,EAAOwN,EAAU9P,GACvC,IAAI+P,EAAUzN,EACRY,EAAQ,EAAIZ,EAAS,EACrBa,EAAS,EAAIb,EAAS,EACxBY,EAAO4M,GAAY9P,EAAUe,EAAMmC,GAAOnC,EAAMuB,IAAU,IAC5DyN,EAAU7M,GAERC,EAAQ2M,GAAY9P,EAAUe,EAAMoC,GAAQpC,EAAMgP,IAAY,IAChEA,EAAU5M,GAER4M,IAAYzN,KACd,EAAAT,EAAAf,MAAKC,EAAOuB,EAAOyN,GACnBF,EAAQ9O,EAAOgP,EAASD,EAAU9P,+DAWvB,SAAkBe,GAAmC,IAA5Bf,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAC9DuP,EAAW/O,EAAMa,OAErB,KAVF,SAAsBb,EAAOf,GAC3B,IAAK,IAAI5B,EAAIiF,KAAKC,MAAMvC,EAAMa,OAAS,GAAIxD,GAAK,EAAGA,GAAK,EACtDyR,EAAQ9O,EAAO3C,EAAG2C,EAAMa,OAAQ5B,GAOlCgQ,CAAajP,EAAOf,GACb8P,EAAW,IAChB,EAAAjO,EAAAf,MAAKC,EAAO,IAAK+O,GACjBD,EAAQ9O,EAAO,EAAG+O,EAAU9P,GAE9B,OAAOe,6jBC9BIkP,uBACX,SAAAA,IAAwC,IAA5BjQ,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAAAgB,EAAAC,KAAAyO,GACtCzO,KAAKxB,UAAYA,EACjBwB,KAAK0O,uDAEM5N,GACX,OAAQ,EAAIA,EAAS,wCAETA,GACZ,OAAQ,EAAIA,EAAS,yCAERA,GACb,GAAc,IAAVA,EAGJ,OAAOe,KAAKC,OAAOhB,EAAQ,GAAK,kCAGhC,OAAOd,KAAK0O,KAAKtO,yCAGjB,OAAOJ,KAAKmB,QAAU,kCAGtBnB,KAAK0O,8CAGL,OAAO1O,KAAKuB,eAAYpC,EAAYa,KAAK0O,KAAK,kCAEzC9Q,GACL,GAAa,MAATA,EAAe,CACjB,IAAMkD,EAAQd,KAAK0O,KAAKtO,OAGxB,OAFAJ,KAAK0O,KAAKhG,KAAK9K,GACfoC,KAAK2O,OAAO7N,IACL,EAET,OAAO,mCAEAA,GACP,IAAIN,EAAUM,EACRY,EAAO1B,KAAK4O,aAAa9N,GACzBa,EAAQ3B,KAAK6O,cAAc/N,GAC3BK,EAAOnB,KAAKmB,OAEhBO,EAAOP,GACPnB,KAAKxB,UAAUwB,KAAK0O,KAAKlO,GAAUR,KAAK0O,KAAKhN,MAAWrB,EAAA3B,QAAQI,cAEhE0B,EAAUkB,GAGVC,EAAQR,GACRnB,KAAKxB,UAAUwB,KAAK0O,KAAKlO,GAAUR,KAAK0O,KAAK/M,MAAYtB,EAAA3B,QAAQI,cAEjE0B,EAAUmB,GAERb,IAAUN,KACZ,EAAAH,EAAAf,MAAKU,KAAK0O,KAAM5N,EAAON,GACvBR,KAAK8O,SAAStO,mCAGXM,GAEL,IADA,IAAIuL,EAASrM,KAAK+O,eAAejO,GAE/BA,EAAQ,GACRd,KAAKxB,UAAUwB,KAAK0O,KAAKrC,GAASrM,KAAK0O,KAAK5N,MAAYT,EAAA3B,QAAQI,cAEhE,EAAAuB,EAAAf,MAAKU,KAAK0O,KAAMrC,EAAQvL,GACxBA,EAAQuL,EACRA,EAASrM,KAAK+O,eAAejO,qCAI/B,IAAId,KAAKuB,UAAT,CAGA,GAAoB,IAAhBvB,KAAKmB,OACP,OAAOnB,KAAK0O,KAAKM,QAEnB,IAAMC,EAAejP,KAAK0O,KAAK,GAG/B,OAFA1O,KAAK0O,KAAK,GAAK1O,KAAK0O,KAAKQ,MACzBlP,KAAK8O,SAAS,GACPG,mCAED1P,GACFA,IACFS,KAAK0O,KAAOnP,GAGd,IADA,IAAM4P,EAAWtN,KAAKC,MAAM9B,KAAKmB,OAAS,GAAK,EACtCvE,EAAI,EAAGA,GAAKuS,EAAUvS,IAC7BoD,KAAK8O,SAASlS,GAEhB,OAAOoD,KAAK0O,0CAGZ,OAAO1O,KAAK0O,gBAGHU,oBACX,SAAAA,IAAwC,IAA5B5Q,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,eAAAgB,EAAAC,KAAAoP,GAAA,IAAA5M,mKAAAC,CAAAzC,MAAAoP,EAAA1M,WAAApF,OAAAqF,eAAAyM,IAAArS,KAAAiD,KAChCxB,IADgC,OAEtCgE,EAAKhE,UAAYA,EACjBgE,EAAKhE,WAAY,EAAA6B,EAAAZ,gBAAejB,GAHMgE,2UADbiM,yeC/FvBY,GACJC,iBAAkB,EAClBC,0BAA2B,EAC3BC,SAAU,EACVC,yBAA0B,EAC1BC,gBAAiB,GAGEC,cACnB,SAAAA,IAAwC,IAA5BnR,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,4GAAAgB,CAAAC,KAAA2P,GAAA,IAAAnN,mKAAAC,CAAAzC,MAAA2P,EAAAjN,WAAApF,OAAAqF,eAAAgN,IAAA5S,KAAAiD,KAChCxB,IADgC,OAEtCgE,EAAKhE,UAAYA,EACjBgE,EAAKtG,KAAO,KAH0BsG,iXAK1B/B,GACZ,OAAY,MAARA,GACM,EAEHoB,KAAKM,IAAInC,KAAK4P,cAAcnP,EAAKiB,MAAO1B,KAAK4P,cAAcnP,EAAKkB,QAAU,qCAaxElB,GACT,IAAMoP,EAAMpP,EAAKiB,KAGjB,OAFAjB,EAAKiB,KAAOmO,EAAIlO,MAChBkO,EAAIlO,MAAQlB,EACLoP,qCAaEpP,GACT,IAAMoP,EAAMpP,EAAKkB,MAGjB,OAFAlB,EAAKkB,MAAQkO,EAAInO,KACjBmO,EAAInO,KAAOjB,EACJoP,qCAMEpP,GAET,OADAA,EAAKiB,KAAO1B,KAAK8P,WAAWrP,EAAKiB,MAC1B1B,KAAK+P,WAAWtP,sCAMdA,GAET,OADAA,EAAKkB,MAAQ3B,KAAK+P,WAAWtP,EAAKkB,OAC3B3B,KAAK8P,WAAWrP,4CAERA,GACf,IAAMuP,EAAmBhQ,KAAK4P,cAAcnP,EAAKiB,MAAQ1B,KAAK4P,cAAcnP,EAAKkB,OACjF,OAAQqO,GACN,KAAM,EACJ,OAAOX,EAAcC,iBACvB,KAAM,EACJ,OAAOD,EAAcE,0BACvB,KAAK,EACH,OAAOF,EAAcI,yBACvB,KAAK,EACH,OAAOJ,EAAcK,gBACvB,QACE,OAAOL,EAAcG,yCAGpB1P,GACLE,KAAK9D,KAAO8D,KAAKkD,WAAWlD,KAAK9D,KAAM4D,sCAE9BW,EAAMX,GACf,GAAY,MAARW,EACF,OAAO,IAAAwC,EAAAtC,KAASb,GACX,GAAIE,KAAKxB,UAAUsB,EAAKW,EAAKX,OAASO,EAAA3B,QAAQC,UACnD8B,EAAKiB,KAAO1B,KAAKkD,WAAWzC,EAAKiB,KAAM5B,OAClC,IAAIE,KAAKxB,UAAUsB,EAAKW,EAAKX,OAASO,EAAA3B,QAAQI,YAGnD,OAAO2B,EAFPA,EAAKkB,MAAQ3B,KAAKkD,WAAWzC,EAAKkB,MAAO7B,GAK3C,IAAMmQ,EAAgBjQ,KAAKkQ,iBAAiBzP,GAC5C,GAAIwP,IAAkBZ,EAAcK,gBAAiB,CACnD,GAAI1P,KAAKxB,UAAUsB,EAAKW,EAAKiB,KAAK5B,OAASO,EAAA3B,QAAQC,UAKjD,OAAOqB,KAAKmQ,WAAW1P,GAHvBA,EAAOT,KAAK+P,WAAWtP,GAM3B,GAAIwP,IAAkBZ,EAAcC,iBAAkB,CACpD,GAAItP,KAAKxB,UAAUsB,EAAKW,EAAKkB,MAAM7B,OAASO,EAAA3B,QAAQI,YAKlD,OAAOkB,KAAKoQ,WAAW3P,GAHvBA,EAAOT,KAAK8P,WAAWrP,GAM3B,OAAOA,qCAEEA,EAAMX,GAEf,GAAY,OADZW,mVAAwBA,EAAMX,IAE5B,OAAOW,EAGT,IAAMwP,EAAgBjQ,KAAKkQ,iBAAiBzP,GAC5C,GAAIwP,IAAkBZ,EAAcK,gBAAiB,CAEnD,GACE1P,KAAKkQ,iBAAiBzP,EAAKiB,QAAU2N,EAAcG,UACnDxP,KAAKkQ,iBAAiBzP,EAAKiB,QAAU2N,EAAcI,yBAEnD,OAAOzP,KAAK+P,WAAWtP,GAGzB,GAAIT,KAAKkQ,iBAAiBzP,EAAKiB,QAAU2N,EAAcE,0BACrD,OAAOvP,KAAKmQ,WAAW1P,EAAKiB,MAGhC,GAAIuO,IAAkBZ,EAAcC,iBAAkB,CAEpD,GACEtP,KAAKkQ,iBAAiBzP,EAAKkB,SAAW0N,EAAcG,UACpDxP,KAAKkQ,iBAAiBzP,EAAKkB,SAAW0N,EAAcE,0BAEpD,OAAOvP,KAAK8P,WAAWrP,GAGzB,GAAIT,KAAKkQ,iBAAiBzP,EAAKkB,SAAW0N,EAAcI,yBACtD,OAAOzP,KAAKoQ,WAAW3P,EAAKkB,OAGhC,OAAOlB,8BAjJUkP,qMCZLU,UAAT,SAASA,EAAUxS,GACxB,OAAIA,EAAI,EACC,EAELA,GAAK,EACA,EAEFwS,EAAUxS,EAAI,GAAKwS,EAAUxS,EAAI,MAG1ByS,mBAAT,SAA4BzS,GACjC,GAAIA,EAAI,EAAK,OAAO,EAIpB,IAHA,IAAI0S,EAAa,EACbC,EAAa,EACbC,EAAO5S,EACFjB,EAAI,EAAGA,GAAKiB,EAAGjB,IACtB6T,EAAOD,EAAaD,EACpBA,EAAaC,EACbA,EAAaC,EAEf,OAAOA,KAGOC,qBAAT,SAA8B7S,GACnC,GAAIA,EAAI,EAAK,OAAO,EACpB,IAAM8S,GAAQ,EAAG,GAMjB,OALqB,SAAfC,EAAe/J,GACnB,OAAiB,MAAb8J,EAAK9J,GAAuB8J,EAAK9J,IACrC8J,EAAK9J,GAAO+J,EAAa/J,EAAM,GAAK+J,EAAa/J,EAAM,GAC/C8J,EAAK9J,GAAO+J,EAAa/J,EAAM,GAAK+J,EAAa/J,EAAM,IAE1D+J,CAAa/S,mLC/BNgT,mBAAT,SAA4BC,GACjC,KAAIA,EAAS,GAAb,CAIA,IADA,IAAItI,EAAQ,EACH3K,EAAIiT,EAAQjT,EAAI,EAAGA,IAC1B2K,GAAS3K,EAEX,OAAO2K,MAGOuI,UAAT,SAASA,EAAUlT,GACxB,KAAIA,EAAI,GAGR,OAAU,IAANA,GAAiB,IAANA,EACN,EAEFA,EAAIkT,EAAUlT,EAAI,iNChBdmT,0BACX,SAAAA,EAAYlR,EAAKlC,GAA0B,IAAnBqT,EAAmB9Q,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,IAAAA,UAAA,gGAAAJ,CAAAC,KAAAgR,GAAA,IAAAxO,mKAAAC,CAAAzC,MAAAgR,EAAAtO,WAAApF,OAAAqF,eAAAqO,IAAAjU,KAAAiD,KACnCF,EAAKlC,IAD8B,OAEzC4E,EAAK1C,IAAMA,EACX0C,EAAK5E,MAAQA,EACb4E,EAAKyO,UAAYA,EAJwBzO,ixBCAxB0O,aACnB,SAAAA,IAAuC,IAA3BrN,EAA2B1D,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAApB,6GAAAc,CAAAC,KAAAkR,GACrClR,KAAK6D,QAAUA,EACf7D,KAAK8D,4DAEUhE,GACf,GAAmB,iBAARA,EACT,OAAOA,EAIT,IAFA,IAAMiE,EAAW/D,KAAK6D,QAAQ/D,GAC1BqR,EAAO,EACFvU,EAAI,EAAGA,EAAImH,EAAS3D,OAAQxD,IACnCuU,GAAQpN,EAASqN,WAAWxU,GAE9B,OAAOuU,EAAO,oCAEPrR,GACP,OAAOE,KAAKqR,iBAAiBvR,+BAE3BA,EAAKlC,GACP,GAAW,MAAPkC,GAAwB,MAATlC,EAAe,CAChC,IAAM6L,EAAWzJ,KAAKsR,SAASxR,GAC/B,GAC0B,MAAxBE,KAAK8D,MAAM2F,IACc,MAAxBzJ,KAAK8D,MAAM2F,IAAqBzJ,KAAK8D,MAAM2F,GAAUwH,UAEtDjR,KAAK8D,MAAM2F,GAAY,IAAA8H,EAAAP,cAAkBlR,EAAKlC,OACzC,CAEL,IADA,IAAIkD,EAAQ2I,EAAW,EACK,MAArBzJ,KAAK8D,MAAMhD,KAAmBd,KAAK8D,MAAM2F,GAAUwH,WACxDnQ,IAEFd,KAAK8D,MAAMhD,GAAS,IAAAyQ,EAAAP,cAAkBlR,EAAKlC,GAE7C,OAAO,EAET,OAAO,8BAELkC,GACF,IAAM2J,EAAWzJ,KAAKsR,SAASxR,GAC/B,GAA4B,MAAxBE,KAAK8D,MAAM2F,GAAmB,CAChC,GAAIzJ,KAAK8D,MAAM2F,GAAU3J,MAAQA,IAAQE,KAAK8D,MAAM2F,GAAUwH,UAC5D,OAAOjR,KAAK8D,MAAM2F,GAAU7L,MAG9B,IADA,IAAIkD,EAAQ2I,EAAW,EAEA,MAArBzJ,KAAK8D,MAAMhD,KACVd,KAAK8D,MAAMhD,GAAOhB,MAAQA,GAAOE,KAAK8D,MAAMhD,GAAOmQ,YACpD,CACA,GAAIjR,KAAK8D,MAAMhD,GAAOhB,MAAQA,GAAOE,KAAK8D,MAAMhD,GAAOmQ,UACrD,OAEFnQ,IAEF,GACuB,MAArBd,KAAK8D,MAAMhD,IACXd,KAAK8D,MAAMhD,GAAOhB,MAAQA,IACzBE,KAAK8D,MAAMhD,GAAOmQ,UAEnB,OAAOjR,KAAK8D,MAAM2F,GAAU7L,sCAK3BkC,GACL,IAAM2J,EAAWzJ,KAAKsR,SAASxR,GAC/B,GAA4B,MAAxBE,KAAK8D,MAAM2F,GAAmB,CAChC,GAAIzJ,KAAK8D,MAAM2F,GAAU3J,MAAQA,IAAQE,KAAK8D,MAAM2F,GAAUwH,UAE5D,OADAjR,KAAK8D,MAAM2F,GAAUwH,WAAY,GAC1B,EAGT,IADA,IAAInQ,EAAQ2I,EAAW,EAEA,MAArBzJ,KAAK8D,MAAMhD,KACVd,KAAK8D,MAAMhD,GAAOhB,MAAQA,GAAOE,KAAK8D,MAAMhD,GAAOmQ,YAEpDnQ,IAEF,GACuB,MAArBd,KAAK8D,MAAMhD,IACXd,KAAK8D,MAAMhD,GAAOhB,MAAQA,IACzBE,KAAK8D,MAAMhD,GAAOmQ,UAGnB,OADAjR,KAAK8D,MAAMhD,GAAOmQ,WAAY,GACvB,EAGX,OAAO,oCAGP,OAAuB,IAAhBjR,KAAKmB,sCAGZ,IAAIb,EAAQ,EAIZ,OAHAhD,OAAO+G,OAAOrE,KAAK8D,OAAOqH,QAAQ,SAAAlH,GAChC3D,IAAiC,IAAxB2D,EAAUgN,UAAqB,EAAI,IAEvC3Q,kCAGPN,KAAK8D,4CAGL,OAAO9D,KAAK8D,yCAGZ,GAAI9D,KAAKuB,UACP,MAAO,GAIT,IAFA,IAAMiD,EAAOlH,OAAOkH,KAAKxE,KAAK8D,OAC1B1C,MAAgBoD,EAAK,GAArB,OAA8BxE,KAAK8D,MAAMU,EAAK,IAAInF,WAAlD,IACKzC,EAAI,EAAGA,EAAI4H,EAAKpE,OAAQxD,IAC/BwE,EAAeA,EAAf,KAA6BoD,EAAK5H,GAAlC,OAA2CoD,KAAK8D,MAC9CU,EAAK5H,IACLyC,WAFF,IAIF,OAAO+B,qBApHU8P,8cCAAM,aACnB,SAAAA,IAAuC,IAA3B3N,EAA2B1D,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAApB,6GAAAc,CAAAC,KAAAwR,GACrCxR,KAAK6D,QAAUA,EACf7D,KAAK8D,4DAEUhE,GACf,GAAmB,iBAARA,EACT,OAAOA,EAIT,IAFA,IAAMiE,EAAW/D,KAAK6D,QAAQ/D,GAC1BqR,EAAO,EACFvU,EAAI,EAAGA,EAAImH,EAAS3D,OAAQxD,IACnCuU,GAAQpN,EAASqN,WAAWxU,GAE9B,OAAOuU,EAAO,oCAEPrR,GACP,OAAOE,KAAKqR,iBAAiBvR,+BAE3BA,EAAKlC,GACP,GAAW,MAAPkC,GAAwB,MAATlC,EAAe,CAChC,IAAM6L,EAAWzJ,KAAKsR,SAASxR,GAC/B,GAA4B,MAAxBE,KAAK8D,MAAM2F,GACbzJ,KAAK8D,MAAM2F,GAAY,IAAAzF,EAAAnE,UAAcC,EAAKlC,OACrC,CAEL,IADA,IAAIkD,EAAQ2I,EAAW,EACK,MAArBzJ,KAAK8D,MAAMhD,IAChBA,IAEFd,KAAK8D,MAAMhD,GAAS,IAAAkD,EAAAnE,UAAcC,EAAKlC,GAEzC,OAAO,EAET,OAAO,8BAELkC,GACF,IAAM2J,EAAWzJ,KAAKsR,SAASxR,GAC/B,GAA4B,MAAxBE,KAAK8D,MAAM2F,GAAmB,CAChC,GAAIzJ,KAAK8D,MAAM2F,GAAU3J,MAAQA,EAC/B,OAAOE,KAAK8D,MAAM2F,GAAU7L,MAG9B,IADA,IAAIkD,EAAQ2I,EAAW,EACK,MAArBzJ,KAAK8D,MAAMhD,IAAkBd,KAAK8D,MAAMhD,GAAOhB,MAAQA,GAC5DgB,IAEF,GAAyB,MAArBd,KAAK8D,MAAMhD,IAAkBd,KAAK8D,MAAMhD,GAAOhB,MAAQA,EACzD,OAAOE,KAAK8D,MAAM2F,GAAU7L,sCAK3BkC,GACL,IAAM2J,EAAWzJ,KAAKsR,SAASxR,GAC/B,GAA4B,MAAxBE,KAAK8D,MAAM2F,GAAmB,CAChC,GAAIzJ,KAAK8D,MAAM2F,GAAU3J,MAAQA,EAG/B,cAFOE,KAAK8D,MAAM2F,GAClBzJ,KAAKyR,uBAAuB3R,EAAK2J,IAC1B,EAGT,IADA,IAAI3I,EAAQ2I,EAAW,EACK,MAArBzJ,KAAK8D,MAAMhD,IAAkBd,KAAK8D,MAAMhD,GAAOhB,MAAQA,GAC5DgB,IAEF,GAAyB,MAArBd,KAAK8D,MAAMhD,IAAkBd,KAAK8D,MAAMhD,GAAOhB,MAAQA,EAGzD,cAFOE,KAAK8D,MAAMhD,GAClBd,KAAKyR,uBAAuB3R,EAAKgB,IAC1B,EAGX,OAAO,iDAEchB,EAAK4R,GAG1B,IAFA,IAAMP,EAAOnR,KAAKsR,SAASxR,GACvBgB,EAAQ4Q,EAAkB,EACF,MAArB1R,KAAK8D,MAAMhD,IAAgB,CAChC,IAAM6Q,EAAU3R,KAAKsR,SAAStR,KAAK8D,MAAMhD,GAAOhB,MAC5C6R,GAAWR,GAAQQ,GAAWD,KAChC1R,KAAK8D,MAAM4N,GAAmB1R,KAAK8D,MAAMhD,UAClCd,KAAK8D,MAAMhD,GAClB4Q,EAAkB5Q,GAEpBA,uCAIF,OAAuB,IAAhBd,KAAKmB,sCAGZ,OAAO7D,OAAOkH,KAAKxE,KAAK8D,OAAO1D,uCAG/BJ,KAAK8D,4CAGL,OAAO9D,KAAK8D,yCAGZ,GAAI9D,KAAKuB,UACP,MAAO,GAIT,IAFA,IAAMiD,EAAOlH,OAAOkH,KAAKxE,KAAK8D,OAC1B1C,MAAgBoD,EAAK,GAArB,OAA8BxE,KAAK8D,MAAMU,EAAK,IAAInF,WAAlD,IACKzC,EAAI,EAAGA,EAAI4H,EAAKpE,OAAQxD,IAC/BwE,EAAeA,EAAf,KAA6BoD,EAAK5H,GAAlC,OAA2CoD,KAAK8D,MAC9CU,EAAK5H,IACLyC,WAFF,IAIF,OAAO+B,qBA3GUoQ,2fCCAI,aACnB,SAAAA,IAAuC,IAA3B/N,EAA2B1D,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAApB,6GAAAc,CAAAC,KAAA4R,GACrC5R,KAAK6D,QAAUA,EACf7D,KAAK8D,4DAEUhE,GACf,GAAmB,iBAARA,EACT,OAAOA,EAIT,IAFA,IAAMiE,EAAW/D,KAAK6D,QAAQ/D,GAC1BqR,EAAO,EACFvU,EAAI,EAAGA,EAAImH,EAAS3D,OAAQxD,IACnCuU,GAAQpN,EAASqN,WAAWxU,GAE9B,OAAOuU,EAAO,oCAEPrR,GACP,OAAOE,KAAKqR,iBAAiBvR,+BAE3BA,EAAKlC,GACP,GAAW,MAAPkC,GAAwB,MAATlC,EAAe,CAChC,IAAM6L,EAAWzJ,KAAKsR,SAASxR,GAK/B,OAJ4B,MAAxBE,KAAK8D,MAAM2F,KACbzJ,KAAK8D,MAAM2F,GAAY,IAAAoI,EAAAhM,SAEzB7F,KAAK8D,MAAM2F,GAAUf,KAAK,IAAA1E,EAAAnE,UAAcC,EAAKlC,KACtC,EAET,OAAO,8BAELkC,GACF,IAAM2J,EAAWzJ,KAAKsR,SAASxR,GACzBgS,EAAa9R,KAAK8D,MAAM2F,GAC9B,GAAkB,MAAdqI,IAAuBA,EAAWvQ,UAEpC,IADA,IAAIX,EAAUkR,EAAWC,UACP,MAAXnR,GAAiB,CACtB,GAAIA,EAAQJ,QAAQV,MAAQA,EAC1B,OAAOc,EAAQJ,QAAQ5C,MAEzBgD,EAAUA,EAAQC,qCAKjBf,GACL,IAAM2J,EAAWzJ,KAAKsR,SAASxR,GACzBgS,EAAa9R,KAAK8D,MAAM2F,GAC9B,GAAkB,MAAdqI,IAAuBA,EAAWvQ,UAEpC,IADA,IAAIX,EAAUkR,EAAWC,UACP,MAAXnR,GAAiB,CACtB,GAAIA,EAAQJ,QAAQV,MAAQA,EAK1B,OAJAgS,EAAWE,OAAOpR,EAAQJ,SACtBsR,EAAWvQ,kBACNvB,KAAK8D,MAAM2F,IAEb,EAET7I,EAAUA,EAAQC,KAGtB,OAAO,oCAGP,OAAuB,IAAhBb,KAAKmB,sCAGZ,IAAIb,EAAQ,EAIZ,OAHAhD,OAAO+G,OAAOrE,KAAK8D,OAAOqH,QAAQ,SAAA2G,GAChCxR,GAASwR,EAAW3Q,SAEfb,kCAGPN,KAAK8D,4CAGL,OAAO9D,KAAK8D,yCAGZ,GAAI9D,KAAKuB,UACP,MAAO,GAIT,IAFA,IAAMiD,EAAOlH,OAAOkH,KAAKxE,KAAK8D,OAC1B1C,MAAgBoD,EAAK,GAArB,OAA8BxE,KAAK8D,MAAMU,EAAK,IAAInF,WAAlD,IACKzC,EAAI,EAAGA,EAAI4H,EAAKpE,OAAQxD,IAC/BwE,EAAeA,EAAf,KAA6BoD,EAAK5H,GAAlC,OAA2CoD,KAAK8D,MAC9CU,EAAK5H,IACLyC,WAFF,IAIF,OAAO+B,qBAzFUwQ,8cCDAK,aACnB,SAAAA,IAAuC,IAA3BpO,EAA2B1D,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAApB,6GAAAc,CAAAC,KAAAiS,GACrCjS,KAAK6D,QAAUA,EACf7D,KAAK8D,4DAEUhE,GACf,GAAmB,iBAARA,EACT,OAAOA,EAIT,IAFA,IAAMiE,EAAW/D,KAAK6D,QAAQ/D,GAC1BqR,EAAO,EACFvU,EAAI,EAAGA,EAAImH,EAAS3D,OAAQxD,IACnCuU,GAAQpN,EAASqN,WAAWxU,GAE9B,OAAOuU,EAAO,oCAUPrR,GACP,OAAOE,KAAKqR,iBAAiBvR,+BAE3BA,EAAKlC,GACP,GAAW,MAAPkC,GAAwB,MAATlC,EAAe,CAChC,IAAM6L,EAAWzJ,KAAKsR,SAASxR,GAE/B,OADAE,KAAK8D,MAAM2F,GAAY,IAAAzF,EAAAnE,UAAcC,EAAKlC,IACnC,EAET,OAAO,8BAELkC,GACF,IAAMmE,EAAYjE,KAAK8D,MAAM9D,KAAKsR,SAASxR,IAC3C,OAAoB,MAAbmE,OAAoB9E,EAAY8E,EAAUrG,qCAE5CkC,GACL,IAAMqR,EAAOnR,KAAKsR,SAASxR,GACrBmE,EAAYjE,KAAK8D,MAAMqN,GAC7B,OAAiB,MAAblN,WACKjE,KAAK8D,MAAMqN,IACX,sCAKT,OAAOnR,KAAK8D,wCAGZ,OAAuB,IAAhB9D,KAAKmB,sCAGZ,OAAO7D,OAAOkH,KAAKxE,KAAK8D,OAAO1D,uCAG/BJ,KAAK8D,4CAGL,GAAI9D,KAAKuB,UACP,MAAO,GAIT,IAFA,IAAMiD,EAAOlH,OAAOkH,KAAKxE,KAAK8D,OAC1B1C,MAAgBoD,EAAK,GAArB,OAA8BxE,KAAK8D,MAAMU,EAAK,IAAInF,WAAlD,IACKzC,EAAI,EAAGA,EAAI4H,EAAKpE,OAAQxD,IAC/BwE,EAAeA,EAAf,KAA6BoD,EAAK5H,GAAlC,OAA2CoD,KAAK8D,MAAMU,EAAK5H,IAAIyC,WAA/D,IAEF,OAAO+B,qBArEU6Q,gcCHAC,aACnB,SAAAA,iGAAcnS,CAAAC,KAAAkS,GACZlS,KAAKsB,+CAEHd,GACF,OAAKR,KAAKmS,IAAI3R,KACZR,KAAKsB,MAAMd,GAAWA,GACf,kCAIJA,GACL,QAAIR,KAAKmS,IAAI3R,YACJR,KAAKsB,MAAMd,IACX,+BAIPA,GACF,OAAOlD,OAAOW,UAAUC,eAAenB,KAAKiD,KAAKsB,MAAOd,oCAGxD,OAAOlD,OAAO+G,OAAOrE,KAAKsB,qCAEtB8Q,GACJ,IAAMC,EAAW,IAAIH,EAGrB,OAFAlS,KAAKqE,SAAS8G,QAAQ,SAAAvN,GAAA,OAASyU,EAASC,IAAI1U,KAC5CwU,EAAS/N,SAAS8G,QAAQ,SAAAvN,GAAA,OAASyU,EAASC,IAAI1U,KACzCyU,uCAEID,GACX,IAAMG,EAAkB,IAAIL,EACtB7N,EAASrE,KAAKqE,SACdmO,EAAcJ,EAAS/N,SACzBoO,EAAYpO,EACZqO,EAAaF,EAUjB,OATIA,EAAYpS,OAASiE,EAAOjE,OAAS,IACvCqS,EAAYD,EACZE,EAAarO,GAEfqO,EAAWvH,QAAQ,SAAAvN,GACb6U,EAAUvE,SAAStQ,IACrB2U,EAAgBD,IAAI1U,KAGjB2U,qCAEEH,GACT,IAAMO,EAAgB,IAAIT,EAM1B,OALAlS,KAAKqE,SAAS8G,QAAQ,SAAAvN,GACfwU,EAASD,IAAIvU,IAChB+U,EAAcL,IAAI1U,KAGf+U,qCAEEP,GACT,GAAIpS,KAAKmB,OAASiR,EAASjR,OACzB,OAAO,EAET,IAAIyR,GAAW,EAQf,OAPA5S,KAAKqE,SAASwO,MAAM,SAAAjV,GAClB,QAAKwU,EAASD,IAAIvU,KAChBgV,GAAW,GACJ,KAIJA,oCAGP,OAAuB,IAAhB5S,KAAKmB,sCAGZ,OAAO7D,OAAOkH,KAAKxE,KAAKsB,OAAOlB,uCAG/BJ,KAAKsB,4CAGL,GAAItB,KAAKuB,UACP,MAAO,GAIT,IAFA,IAAM8C,EAASrE,KAAKqE,SAChBjD,KAAeiD,EAAO,GACjBzH,EAAI,EAAGA,EAAIyH,EAAOjE,OAAQxD,IACjCwE,EAAeA,EAAf,IAA4BiD,EAAOzH,GAAGyC,WAExC,OAAO+B,qBAxFU8Q,8eCEAY,aACnB,SAAAA,iGAAc/S,CAAAC,KAAA8S,GACZ9S,KAAKsB,MAAQ,IAAAyR,EAAAlN,+CAEVrF,GACHR,KAAKsB,MAAMoH,KAAKlI,iCAGhB,IAAIR,KAAKuB,UAAT,CAGA,IAAMC,EAASxB,KAAKsB,MAAMJ,SAASlB,KAAKmB,OAAS,GACjD,OAAOK,kCAGP,IAAIxB,KAAKuB,UAGT,OAAOvB,KAAKsB,MAAMN,aAAahB,KAAKmB,OAAS,GAAGX,0CAGhD,OAAOR,KAAKsB,MAAMC,yCAGlB,OAAOvB,KAAKsB,MAAMH,uCAGlBnB,KAAKsB,MAAM0R,2CAGX,OAAOhT,KAAKsB,MAAMjC,8BA9BDyT,gvBCCAG,cACnB,SAAAA,IAAkE,IAAtD/S,EAAsDC,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAArB,cAA5BR,EAA4B2B,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAAtB,4GAAAgB,CAAAC,KAAAiT,GAAA,IAAAzQ,mKAAAC,CAAAzC,MAAAiT,EAAAvQ,WAAApF,OAAAqF,eAAAsQ,IAAAlW,KAAAiD,KAC1DE,IAD0D,OAEhEsC,EAAKtC,SAAWA,EAChBsC,EAAKhE,UAAYA,EAH+CgE,wWAK7DhC,GACH,GAAIR,KAAKuB,UACPoD,EAAAsO,EAAAhV,UAAAyE,WAAApF,OAAAqF,eAAAsQ,EAAAhV,WAAA,OAAA+B,MAAAjD,KAAAiD,KAAWQ,OACN,CACL,IAAMM,EAAQd,KAAKkT,0BAA0B1S,GAC7CmE,EAAAsO,EAAAhV,UAAAyE,WAAApF,OAAAqF,eAAAsQ,EAAAhV,WAAA,SAAA+B,MAAAjD,KAAAiD,KAAaQ,EAASM,mCAGnBN,GAAoB,IAAXM,EAAWX,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAH,EACtB,GAAIH,KAAKuB,UACP,OAAAoD,EAAAsO,EAAAhV,UAAAyE,WAAApF,OAAAqF,eAAAsQ,EAAAhV,WAAA,SAAA+B,MAAAjD,KAAAiD,KAAoBQ,EAAmB,IAAVM,EAAcA,EAAQ,GAErD,IAAMqS,EAAMnT,KAAKkT,0BAA0B1S,GAC3C,OAAAmE,EAAAsO,EAAAhV,UAAAyE,WAAApF,OAAAqF,eAAAsQ,EAAAhV,WAAA,SAAA+B,MAAAjD,KAAAiD,KAAoBQ,EAAS2S,qDAEL3S,GAGxB,IAFA,IAAII,EAAUZ,KAAKO,KACf3D,EAAI,EACDA,EAAIoD,KAAKmB,QAAUP,EAAShE,IAAK,CACtC,IAAM6B,EAAOuB,KAAKxB,UAAUgC,EAASI,EAAQJ,SAC7C,GAAI/B,IAAS4B,EAAA3B,QAAQC,UACnB,OAAO/B,EAETgE,EAAUA,EAAQC,KAEpB,OAAOjE,8BA/BUqW,2fCCAG,cACnB,SAAAA,IAAsC,IAA1BlT,EAA0BC,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,GAAAE,EAAArB,cAAA,mGAAAe,CAAAC,KAAAoT,oKAAA3Q,CAAAzC,MAAAoT,EAAA1Q,WAAApF,OAAAqF,eAAAyQ,IAAArW,KAAAiD,KAC9BE,0WAEHM,GACH,IAAMC,EAAO,IAAAC,EAAAC,KAASH,GAEL,MAAbR,KAAKO,KACPP,KAAKO,KAAOE,EAEFT,KAAKgB,aAAahB,KAAKmB,OAAS,GAClCN,KAAOJ,EAGjBA,EAAKI,KAAOb,KAAKO,KACjBP,KAAKM,uCAEAE,EAASM,GACd,GAAIA,GAAS,GAAKA,GAASd,KAAKM,MAAO,CACrC,IAAMG,EAAO,IAAAC,EAAAC,KAASH,GAClBI,EAAUZ,KAAKO,KACnB,GAAc,IAAVO,EACe,MAAbd,KAAKO,MAEPP,KAAKO,KAAOE,EACZA,EAAKI,KAAOb,KAAKO,OAEjBE,EAAKI,KAAOD,EACZA,EAAUZ,KAAKgB,aAAahB,KAAKmB,QAEjCnB,KAAKO,KAAOE,EACZG,EAAQC,KAAOb,KAAKO,UAEjB,CACL,IAAMQ,EAAWf,KAAKgB,aAAaF,EAAQ,GAC3CL,EAAKI,KAAOE,EAASF,KACrBE,EAASF,KAAOJ,EAGlB,OADAT,KAAKM,SACE,EAET,OAAO,mCAEAQ,GACP,GAAIA,GAAS,GAAKA,EAAQd,KAAKM,MAAO,CACpC,IAAIM,EAAUZ,KAAKO,KACnB,GAAc,IAAVO,EACF,GAAoB,IAAhBd,KAAKmB,OACPnB,KAAKO,UAAOpB,MACP,CACL,IAAMkU,EAAUrT,KAAKO,KACrBK,EAAUZ,KAAKgB,aAAahB,KAAKmB,OAAS,GAC1CnB,KAAKO,KAAOP,KAAKO,KAAKM,KACtBD,EAAQC,KAAOb,KAAKO,KACpBK,EAAUyS,MAEP,CAEL,IAAMtS,EAAWf,KAAKgB,aAAaF,EAAQ,GAC3CF,EAAUG,EAASF,KACnBE,EAASF,KAAOD,EAAQC,KAG1B,OADAb,KAAKM,QACEM,EAAQJ,qCA/DA4S,6MCFLE,kBAAT,SAA2BC,GAChC,QACcpU,IAAZoU,GACY,OAAZA,GACa,OAAZA,GAAuC,IAAnBA,EAAQnT,OAE7B,OAAO,EAQT,IANA,IAAMoT,EAAQ,IAAAC,EAAA5N,QACR6N,EAAcH,EAAQI,oBAAoBC,MAAM,KAAKC,KAAK,IAC5DC,GAAU,EACVC,SACAC,SAEKpX,EAAI,EAAGA,EAAI8W,EAAYtT,OAAQxD,IACtC4W,EAAM3O,QAAQ6O,EAAYO,OAAOrX,IAGnC,KAAO4W,EAAMrS,OAAS,GAAK2S,GACzBC,EAAYP,EAAMU,cAClBF,EAAWR,EAAMW,aACbJ,IAAcC,IAChBF,GAAU,GAId,OAAOA,mOC1BOM,UAAT,SAAmBC,EAAcxN,GAItC,IAHA,IAAMlB,EAAQ,IAAAC,EAAAC,QACRyO,KAEG1X,EAAI,EAAGA,EAAIyX,EAAajU,OAAQxD,IACvC+I,EAAMG,QAAQuO,EAAazX,IAG7B,KAAO+I,EAAMxE,OAAS,GAAG,CACvB,IAAK,IAAIvE,EAAI,EAAGA,EAAIiK,EAAKjK,IACvB+I,EAAMG,QAAQH,EAAMK,WAEtBsO,EAAe5L,KAAK/C,EAAMK,WAG5B,OACEuO,WAAYD,EACZE,OAAQ7O,EAAMK,4OChBFyO,mBAAT,SAA4BC,GASjC,IARA,IAAMC,EAAQ,IAAAC,EAAA/O,QAGVgP,GAAW,EACX/T,EAAQ,EACRgU,SACAC,SAEGjU,EAAQ4T,EAAQtU,QAAUyU,GAC/BC,EAASJ,EAAQT,OAAOnT,GARZ,MASFG,QAAQ6T,IAAW,EAC3BH,EAAMjM,KAAKoM,GACFH,EAAMpT,UACfsT,GAAW,GAEXE,EAAMJ,EAAMzF,MAdF,MAeEjO,QAAQ8T,KAdR,MAcyB9T,QAAQ6T,KAC3CD,GAAW,IAGf/T,IAEF,SAAI+T,IAAYF,EAAMpT,4OCvBRyT,gBAAT,SAAyBC,GAM9B,IALA,IAAMC,EAAW,IAAAN,EAAA/O,QACbiL,EAASmE,EACTE,SACAC,EAAe,GAEZtE,EAAS,GACdqE,EAAMtT,KAAKC,MAAMgP,EAAS,GAC1BoE,EAASxM,KAAKyM,GACdrE,EAASjP,KAAKC,MAAMgP,EAAS,GAG/B,MAAQoE,EAAS3T,WACf6T,GAAgBF,EAAShG,MAAM7P,WAGjC,OAAO+V,KAGOC,cAAT,SAAuBJ,EAAWK,GACvC,IAAMJ,EAAW,IAAAN,EAAA/O,QAEbiL,EAASmE,EACTE,SACAI,EAAa,GAEjB,KAAMD,GAAQ,GAAKA,GAAQ,IACzB,MAAO,GAGT,KAAOxE,EAAS,GACdqE,EAAMtT,KAAKC,MAAMgP,EAASwE,GAC1BJ,EAASxM,KAAKyM,GACdrE,EAASjP,KAAKC,MAAMgP,EAASwE,GAG/B,MAAQJ,EAAS3T,WACfgU,GAhBa,uCAgBQL,EAAShG,OAGhC,OAAOqG,mOChBOC,WAAT,SAAoBC,GAKzB,IAJA,IAAMC,EAAS,IAAAd,EAAA/O,QACT8P,EAAO,IAAAf,EAAA/O,QACP+P,EAAS,IAAAhB,EAAA/O,QAENjJ,EAAI6Y,EAAQ7Y,EAAI,EAAGA,IAC1B8Y,EAAOhN,KAAK9L,GAGd,OAjCF,SAASiZ,EAAaJ,EAAQC,EAAQE,EAAQD,EAAMG,EAAYC,EAAYC,GAAsB,IAAZC,EAAY9V,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,MAChG,GAAIsV,GAAU,EACZ,OAAOQ,EAET,GAAe,IAAXR,EAAc,CAChBE,EAAKjN,KAAKgN,EAAOxG,OACjB,IAAMgH,KACNA,EAAKJ,GAAcJ,EAAOrW,WAC1B6W,EAAKH,GAAcH,EAAOvW,WAC1B6W,EAAKF,GAAYL,EAAKtW,WACtB4W,EAAMvN,KAAKwN,OACN,CACLL,EAAaJ,EAAS,EAAGC,EAAQC,EAAMC,EAAQE,EAAYE,EAAUD,EAAYE,GACjFN,EAAKjN,KAAKgN,EAAOxG,OACjB,IAAMgH,KACNA,EAAKJ,GAAcJ,EAAOrW,WAC1B6W,EAAKH,GAAcH,EAAOvW,WAC1B6W,EAAKF,GAAYL,EAAKtW,WACtB4W,EAAMvN,KAAKwN,GACXL,EAAaJ,EAAS,EAAGG,EAAQF,EAAQC,EAAMI,EAAYD,EAAYE,EAAUC,GAEnF,OAAOA,EAYAJ,CAAaJ,EAAQC,EAAQE,EAAQD,EAAM,SAAU,SAAU,WAGxDQ,MAAT,SAASA,EAAMV,EAAQC,EAAQE,EAAQD,GAAkB,IAAZM,EAAY9V,UAAAC,OAAA,QAAAjB,IAAAgB,UAAA,GAAAA,UAAA,MAC9D,OAAIsV,GAAU,EACLQ,GAEM,IAAXR,EACFQ,EAAMvN,MAAMgN,EAAQC,KAEpBQ,EAAMV,EAAS,EAAGC,EAAQC,EAAMC,EAAQK,GACxCA,EAAMvN,MAAMgN,EAAQC,IACpBQ,EAAMV,EAAS,EAAGG,EAAQF,EAAQC,EAAMM,IAEnCA,wdChDYG,aACnB,SAAAA,iGAAcrW,CAAAC,KAAAoW,GACZpW,KAAKsB,gDAEFd,GACHR,KAAKsB,MAAMoH,KAAKlI,iCAIhB,OAAOR,KAAKsB,MAAM4N,qCAIlB,OAAOlP,KAAKsB,MAAMtB,KAAKsB,MAAMlB,OAAS,qCAItC,OAA6B,IAAtBJ,KAAKsB,MAAMlB,sCAIlB,OAAOJ,KAAKsB,MAAMlB,uCAIlBJ,KAAKsB,2CAIL,OAAOtB,KAAKsB,yCAIZ,OAAOtB,KAAKsB,MAAMjC,8BAjCD+W,urDCIZvQ,sFACAA,kFACAsQ,qFACAX,6FACAH,kGACAL,uGACAP,iGAGA5O,sFACAA,0FACAA,kGACAA,2FAGAA,iGACAA,mGACAA,iGACAA,gGACAA,oFAGAA,2FAGAA,0FACAA,0GACAA,uGACAA,2GACAA,mGAGAA,0FACAA,0FACAA,mGACAA,qGACAA,iGAGAA,wFACAA,oFAGA4I,oFACAW,yFACAvJ,sFAGAA,+FACAR,2FACAc,yFACAsH,yFACAG,iFACAP,2FACAL,uFACAD,iFACAR,oFAGAT,uFAEAD,kGACAD,kGACAR,4FACAL,+FACAjI,4FACA4H,wFACAzI,wFACA+H,4FACAF,4FACAF,2FAEAZ,qGACAO,yGACAD,kGACApH,8FACAE,uGAGA4G,+FACAZ,sGACAA,2FACAV,+FACAA,6FACAA,yFACAN,6FACAd,oBA5FGjG,mNAGCgW,OAAOhW","file":"PacktDataStructuresAlgorithms.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"PacktDataStructuresAlgorithms\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PacktDataStructuresAlgorithms\"] = factory();\n\telse\n\t\troot[\"PacktDataStructuresAlgorithms\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 61);\n","export const Compare = {\n LESS_THAN: -1,\n BIGGER_THAN: 1,\n EQUALS: 0\n};\n\nexport const DOES_NOT_EXIST = -1;\n\nexport function lesserEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.LESS_THAN || comp === Compare.EQUALS;\n}\n\nexport function biggerEquals(a, b, compareFn) {\n const comp = compareFn(a, b);\n return comp === Compare.BIGGER_THAN || comp === Compare.EQUALS;\n}\n\nexport function defaultCompare(a, b) {\n if (a === b) {\n return 0;\n }\n return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;\n}\n\nexport function defaultEquals(a, b) {\n return a === b;\n}\n\nexport function defaultToString(item) {\n if (item === null) {\n return 'NULL';\n } else if (item === undefined) {\n return 'UNDEFINED';\n } else if (typeof item === 'string' || item instanceof String) {\n return `${item}`;\n }\n return item.toString();\n}\n\nexport function swap(array, a, b) {\n /* const temp = array[a];\n array[a] = array[b];\n array[b] = temp; */\n [array[a], array[b]] = [array[b], array[a]];\n}\nexport function reverseCompare(compareFn) {\n return (a, b) => compareFn(b, a);\n}\n\nexport function defaultDiff(a, b) {\n return Number(a) - Number(b);\n}\n","export class ValuePair {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n toString() {\n return `[#${this.key}: ${this.value}]`;\n }\n}\n","import { defaultEquals } from '../util';\nimport { Node } from './models/linked-list-models';\n\nexport default class LinkedList {\n constructor(equalsFn = defaultEquals) {\n this.equalsFn = equalsFn;\n this.count = 0;\n this.head = undefined;\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n // catches null && undefined\n this.head = node;\n } else {\n current = this.head;\n while (current.next != null) {\n current = current.next;\n }\n current.next = node;\n }\n this.count++;\n }\n getElementAt(index) {\n if (index >= 0 && index <= this.count) {\n let node = this.head;\n for (let i = 0; i < index && node != null; i++) {\n node = node.next;\n }\n return node;\n }\n return undefined;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n if (index === 0) {\n const current = this.head;\n node.next = current;\n this.head = node;\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = current.next;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n remove(element) {\n const index = this.indexOf(element);\n return this.removeAt(index);\n }\n indexOf(element) {\n let current = this.head;\n for (let i = 0; i < this.size() && current != null; i++) {\n if (this.equalsFn(element, current.element)) {\n return i;\n }\n current = current.next;\n }\n return -1;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return this.count;\n }\n getHead() {\n return this.head;\n }\n clear() {\n this.head = undefined;\n this.count = 0;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n for (let i = 1; i < this.size() && current != null; i++) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Stack {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n push(element) {\n this.items[this.count] = element;\n this.count++;\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n isEmpty() {\n return this.count === 0;\n }\n size() {\n return this.count;\n }\n clear() {\n /* while (!this.isEmpty()) {\n this.pop();\n } */\n this.items = {};\n this.count = 0;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[0]}`;\n for (let i = 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nfunction partition(array, left, right, compareFn) {\n const pivot = array[Math.floor((right + left) / 2)];\n let i = left;\n let j = right;\n // console.log('pivot is ' + pivot + '; left is ' + left + '; right is ' + right);\n while (i <= j) {\n while (compareFn(array[i], pivot) === Compare.LESS_THAN) {\n i++;\n // console.log('i = ' + i);\n }\n while (compareFn(array[j], pivot) === Compare.BIGGER_THAN) {\n j--;\n // console.log('j = ' + j);\n }\n if (i <= j) {\n // console.log('swap ' + array[i] + ' with ' + array[j]);\n swap(array, i, j);\n i++;\n j--;\n }\n }\n return i;\n}\nfunction quick(array, left, right, compareFn) {\n let index;\n if (array.length > 1) {\n index = partition(array, left, right, compareFn);\n if (left < index - 1) {\n quick(array, left, index - 1, compareFn);\n }\n if (index < right) {\n quick(array, index, right, compareFn);\n }\n }\n return array;\n}\nexport function quickSort(array, compareFn = defaultCompare) {\n return quick(array, 0, array.length - 1, compareFn);\n}\n","import { defaultCompare, Compare } from '../../util';\n\nexport function findMaxValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(max, array[i]) === Compare.LESS_THAN) {\n max = array[i];\n }\n }\n return max;\n }\n return undefined;\n}\nexport function findMinValue(array, compareFn = defaultCompare) {\n if (array && array.length > 0) {\n let min = array[0];\n for (let i = 1; i < array.length; i++) {\n if (compareFn(min, array[i]) === Compare.BIGGER_THAN) {\n min = array[i];\n }\n }\n return min;\n }\n return undefined;\n}\n","export class Node {\n constructor(element, next) {\n this.element = element;\n this.next = next;\n }\n}\nexport class DoublyNode extends Node {\n constructor(element, next, prev) {\n super(element, next);\n this.prev = prev;\n }\n}\n","// @ts-check\n\nexport default class Queue {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n enqueue(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n dequeue() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport const insertionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let temp;\n for (let i = 1; i < length; i++) {\n let j = i;\n temp = array[i];\n // console.log('to be inserted ' + temp);\n while (j > 0 && compareFn(array[j - 1], temp) === Compare.BIGGER_THAN) {\n // console.log('shift ' + array[j - 1]);\n array[j] = array[j - 1];\n j--;\n }\n // console.log('insert ' + temp);\n array[j] = temp;\n }\n return array;\n};\n","export class Node {\n constructor(key) {\n this.key = key;\n this.left = null;\n this.right = null;\n }\n toString() {\n return `${this.key}`;\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport { Node } from './models/node';\n\nexport default class BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.root = null;\n }\n insert(key) {\n // special case: first key\n if (this.root == null) {\n this.root = new Node(key);\n } else {\n this.insertNode(this.root, key);\n }\n }\n insertNode(node, key) {\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n if (node.left == null) {\n node.left = new Node(key);\n } else {\n this.insertNode(node.left, key);\n }\n } else if (node.right == null) {\n node.right = new Node(key);\n } else {\n this.insertNode(node.right, key);\n }\n }\n getRoot() {\n return this.root;\n }\n search(key) {\n return this.searchNode(this.root, key);\n }\n searchNode(node, key) {\n if (node == null) {\n return false;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n return this.searchNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n return this.searchNode(node.right, key);\n }\n return true;\n }\n inOrderTraverse(callback) {\n this.inOrderTraverseNode(this.root, callback);\n }\n inOrderTraverseNode(node, callback) {\n if (node != null) {\n this.inOrderTraverseNode(node.left, callback);\n callback(node.key);\n this.inOrderTraverseNode(node.right, callback);\n }\n }\n preOrderTraverse(callback) {\n this.preOrderTraverseNode(this.root, callback);\n }\n preOrderTraverseNode(node, callback) {\n if (node != null) {\n callback(node.key);\n this.preOrderTraverseNode(node.left, callback);\n this.preOrderTraverseNode(node.right, callback);\n }\n }\n postOrderTraverse(callback) {\n this.postOrderTraverseNode(this.root, callback);\n }\n postOrderTraverseNode(node, callback) {\n if (node != null) {\n this.postOrderTraverseNode(node.left, callback);\n this.postOrderTraverseNode(node.right, callback);\n callback(node.key);\n }\n }\n min() {\n return this.minNode(this.root);\n }\n minNode(node) {\n let current = node;\n while (current != null && current.left != null) {\n current = current.left;\n }\n return current;\n }\n max() {\n return this.maxNode(this.root);\n }\n maxNode(node) {\n let current = node;\n while (current != null && current.right != null) {\n current = current.right;\n }\n return current;\n }\n remove(key) {\n this.root = this.removeNode(this.root, key);\n }\n removeNode(node, key) {\n if (node == null) {\n return null;\n }\n if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.removeNode(node.left, key);\n return node;\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.removeNode(node.right, key);\n return node;\n }\n // key is equal to node.item\n // handle 3 special conditions\n // 1 - a leaf node\n // 2 - a node with only 1 child\n // 3 - a node with 2 children\n // case 1\n if (node.left == null && node.right == null) {\n node = null;\n return node;\n }\n // case 2\n if (node.left == null) {\n node = node.right;\n return node;\n } else if (node.right == null) {\n node = node.left;\n return node;\n }\n // case 3\n const aux = this.minNode(node.right);\n node.key = aux.key;\n node.right = this.removeNode(node.right, aux.key);\n return node;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class Dictionary {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n set(key, value) {\n if (key != null && value != null) {\n const tableKey = this.toStrFn(key);\n this.table[tableKey] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.toStrFn(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n hasKey(key) {\n return this.table[this.toStrFn(key)] != null;\n }\n remove(key) {\n if (this.hasKey(key)) {\n delete this.table[this.toStrFn(key)];\n return true;\n }\n return false;\n }\n values() {\n return this.keyValues().map(valuePair => valuePair.value);\n }\n keys() {\n return this.keyValues().map(valuePair => valuePair.key);\n }\n keyValues() {\n return Object.values(this.table);\n }\n forEach(callbackFn) {\n const valuePairs = this.keyValues();\n for (let i = 0; i < valuePairs.length; i++) {\n const result = callbackFn(valuePairs[i].key, valuePairs[i].value);\n if (result === false) {\n break;\n }\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const valuePairs = this.keyValues();\n let objString = `${valuePairs[0].toString()}`;\n for (let i = 1; i < valuePairs.length; i++) {\n objString = `${objString},${valuePairs[i].toString()}`;\n }\n return objString;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { DoublyNode } from './models/linked-list-models';\n\nexport default class DoublyLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n this.tail = undefined;\n }\n push(element) {\n const node = new DoublyNode(element);\n if (this.head == null) {\n this.head = node;\n this.tail = node; // NEW\n } else {\n // attach to the tail node // NEW\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new DoublyNode(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) { // NEW\n this.head = node;\n this.tail = node; // NEW\n } else {\n node.next = this.head;\n this.head.prev = node; // NEW\n this.head = node;\n }\n } else if (index === this.count) { // last item NEW\n current = this.tail;\n current.next = node;\n node.prev = current;\n this.tail = node;\n } else {\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n node.next = current;\n previous.next = node;\n current.prev = node; // NEW\n node.prev = previous; // NEW\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n this.head = this.head.next;\n // if there is only one item, then we update tail as well //NEW\n if (this.count === 1) {\n // {2}\n this.tail = undefined;\n } else {\n this.head.prev = undefined;\n }\n } else if (index === this.count - 1) {\n // last item //NEW\n current = this.tail;\n this.tail = current.prev;\n this.tail.next = undefined;\n } else {\n current = this.getElementAt(index);\n const previous = current.prev;\n // link previous with current's next - skip it to remove\n previous.next = current.next;\n current.next.prev = previous; // NEW\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n indexOf(element) {\n let current = this.head;\n let index = 0;\n while (current != null) {\n if (this.equalsFn(element, current.element)) {\n return index;\n }\n index++;\n current = current.next;\n }\n return -1;\n }\n getHead() {\n return this.head;\n }\n getTail() {\n return this.tail;\n }\n clear() {\n super.clear();\n this.tail = undefined;\n }\n toString() {\n if (this.head == null) {\n return '';\n }\n let objString = `${this.head.element}`;\n let current = this.head.next;\n while (current != null) {\n objString = `${objString},${current.element}`;\n current = current.next;\n }\n return objString;\n }\n inverseToString() {\n if (this.tail == null) {\n return '';\n }\n let objString = `${this.tail.element}`;\n let previous = this.tail.prev;\n while (previous != null) {\n objString = `${objString},${previous.element}`;\n previous = previous.prev;\n }\n return objString;\n }\n}\n","// @ts-check\n\nexport default class Deque {\n constructor() {\n this.count = 0;\n this.lowestCount = 0;\n this.items = {};\n }\n\n addFront(element) {\n if (this.isEmpty()) {\n this.addBack(element);\n } else if (this.lowestCount > 0) {\n this.lowestCount--;\n this.items[this.lowestCount] = element;\n } else {\n for (let i = this.count; i > 0; i--) {\n this.items[i] = this.items[i - 1];\n }\n this.count++;\n this.items[0] = element;\n }\n }\n\n addBack(element) {\n this.items[this.count] = element;\n this.count++;\n }\n\n removeFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items[this.lowestCount];\n delete this.items[this.lowestCount];\n this.lowestCount++;\n return result;\n }\n\n removeBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n this.count--;\n const result = this.items[this.count];\n delete this.items[this.count];\n return result;\n }\n\n peekFront() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.lowestCount];\n }\n\n peekBack() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items[this.count - 1];\n }\n\n isEmpty() {\n return this.size() === 0;\n }\n\n clear() {\n this.items = {};\n this.count = 0;\n this.lowestCount = 0;\n }\n\n size() {\n return this.count - this.lowestCount;\n }\n\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n let objString = `${this.items[this.lowestCount]}`;\n for (let i = this.lowestCount + 1; i < this.count; i++) {\n objString = `${objString},${this.items[i]}`;\n }\n return objString;\n }\n}\n","import Queue from '../../data-structures/queue';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nexport const breadthFirstSearch = (graph, startVertex, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n\n queue.enqueue(startVertex);\n\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n if (callback) {\n callback(u);\n }\n }\n};\n\nexport const BFS = (graph, startVertex) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const queue = new Queue();\n const distances = {};\n const predecessors = {};\n queue.enqueue(startVertex);\n for (let i = 0; i < vertices.length; i++) {\n distances[vertices[i]] = 0;\n predecessors[vertices[i]] = null;\n }\n while (!queue.isEmpty()) {\n const u = queue.dequeue();\n const neighbors = adjList.get(u);\n color[u] = Colors.GREY;\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n color[w] = Colors.GREY;\n distances[w] = distances[u] + 1;\n predecessors[w] = u;\n queue.enqueue(w);\n }\n }\n color[u] = Colors.BLACK;\n }\n return {\n distances,\n predecessors\n };\n};\n","const UNASSIGNED = 0;\n\nfunction usedInRow(matrix, row, num) {\n for (let col = 0; col < matrix.length; col++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInCol(matrix, col, num) {\n for (let row = 0; row < matrix.length; row++) {\n if (matrix[row][col] === num) {\n return true;\n }\n }\n return false;\n}\n\nfunction usedInBox(matrix, boxStartRow, boxStartCol, num) {\n for (let row = 0; row < 3; row++) {\n for (let col = 0; col < 3; col++) {\n if (matrix[row + boxStartRow][col + boxStartCol] === num) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isSafe(matrix, row, col, num) {\n return (\n !usedInRow(matrix, row, num) &&\n !usedInCol(matrix, col, num) &&\n !usedInBox(matrix, row - (row % 3), col - (col % 3), num)\n );\n}\nfunction solveSudoku(matrix) {\n let row = 0;\n let col = 0;\n let checkBlankSpaces = false;\n\n for (row = 0; row < matrix.length; row++) {\n for (col = 0; col < matrix[row].length; col++) {\n if (matrix[row][col] === UNASSIGNED) {\n checkBlankSpaces = true;\n break;\n }\n }\n if (checkBlankSpaces === true) {\n break;\n }\n }\n if (checkBlankSpaces === false) {\n return true;\n }\n\n for (let num = 1; num <= 9; num++) {\n if (isSafe(matrix, row, col, num)) {\n matrix[row][col] = num;\n if (solveSudoku(matrix)) {\n return true;\n }\n matrix[row][col] = UNASSIGNED;\n }\n }\n return false;\n}\n\nexport function sudokuSolver(matrix) {\n if (solveSudoku(matrix) === true) {\n return matrix;\n }\n return 'NO SOLUTION EXISTS!';\n}\n","function isSafe(maze, x, y) {\n const n = maze.length;\n if (x >= 0 && y >= 0 && x < n && y < n && maze[x][y] !== 0) {\n return true;\n }\n return false;\n}\n\nfunction findPath(maze, x, y, solution) {\n const n = maze.length;\n if (x === n - 1 && y === n - 1) {\n solution[x][y] = 1;\n return true;\n }\n if (isSafe(maze, x, y) === true) {\n solution[x][y] = 1;\n if (findPath(maze, x + 1, y, solution)) {\n return true;\n }\n if (findPath(maze, x, y + 1, solution)) {\n return true;\n }\n solution[x][y] = 0;\n return false;\n }\n return false;\n}\n\nexport function ratInAMaze(maze) {\n const solution = [];\n for (let i = 0; i < maze.length; i++) {\n solution[i] = [];\n for (let j = 0; j < maze[i].length; j++) {\n solution[i][j] = 0;\n }\n }\n if (findPath(maze, 0, 0, solution) === true) {\n return solution;\n }\n return 'NO PATH FOUND';\n}\n","export function knapSack(capacity, weights, values) {\n const n = values.length;\n let load = 0;\n let val = 0;\n for (let i = 0; i < n && load < capacity; i++) {\n if (weights[i] <= capacity - load) {\n val += values[i];\n load += weights[i];\n // console.log('using item ' + (i + 1) + ' for the solution');\n } else {\n const r = (capacity - load) / weights[i];\n val += r * values[i];\n load += weights[i];\n // console.log('using ratio of ' + r + ' for item ' + (i + 1) + ' for the solution');\n }\n }\n return val;\n}\n","export function knapSack(capacity, weights, values, n) {\n if (n === 0 || capacity === 0) {\n return 0;\n }\n if (weights[n - 1] > capacity) {\n return knapSack(capacity, weights, values, n - 1);\n }\n const a = values[n - 1] + knapSack(capacity - weights[n - 1], weights, values, n - 1);\n const b = knapSack(capacity, weights, values, n - 1);\n return a > b ? a : b;\n}\n","function findValues(n, capacity, kS) {\n let i = n;\n let k = capacity;\n // console.log('Items that are part of the solution:');\n while (i > 0 && k > 0) {\n if (kS[i][k] !== kS[i - 1][k]) {\n console.log(\n 'item ' + i + ' can be part of solution w,v: ' + weights[i - 1] + ',' + values[i - 1]\n );\n i--;\n k -= kS[i][k];\n } else {\n i--;\n }\n }\n}\n\nexport function knapSack(capacity, weights, values, n) {\n const kS = [];\n for (let i = 0; i <= n; i++) {\n kS[i] = [];\n }\n for (let i = 0; i <= n; i++) {\n for (let w = 0; w <= capacity; w++) {\n if (i === 0 || w === 0) {\n kS[i][w] = 0;\n } else if (weights[i - 1] <= w) {\n const a = values[i - 1] + kS[i - 1][w - weights[i - 1]];\n const b = kS[i - 1][w];\n kS[i][w] = a > b ? a : b; // max(a,b)\n // console.log(a + ' can be part of the solution');\n } else {\n kS[i][w] = kS[i - 1][w];\n }\n }\n // console.log(kS[i].join());\n }\n // extra algorithm to find the items that are part of the solution\n findValues(n, capacity, kS);\n return kS[n][capacity];\n}\n","export function minCoinChange(coins, amount) {\n const change = [];\n let total = 0;\n for (let i = coins.length; i >= 0; i--) {\n const coin = coins[i];\n while (total + coin <= amount) {\n change.push(coin);\n total += coin;\n }\n }\n return change;\n}\n","export function minCoinChange(coins, amount) {\n const cache = [];\n\n const makeChange = (value) => {\n if (!value) {\n return [];\n }\n if (cache[value]) {\n return cache[value];\n }\n let min = [];\n let newMin;\n let newAmount;\n for (let i = 0; i < coins.length; i++) {\n const coin = coins[i];\n newAmount = value - coin;\n if (newAmount >= 0) {\n newMin = makeChange(newAmount);\n }\n if (\n newAmount >= 0 &&\n (newMin.length < min.length - 1 || !min.length) &&\n (newMin.length || !newAmount)\n ) {\n min = [coin].concat(newMin);\n // console.log('new Min ' + min + ' for ' + amount);\n }\n }\n return (cache[value] = min);\n };\n return makeChange(amount);\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nfunction binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {\n if (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (compareFn(element, value) === Compare.LESS_THAN) {\n return binarySearchRecursive(array, value, mid + 1, high, compareFn);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n return binarySearchRecursive(array, value, low, mid - 1, compareFn);\n } else {\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n const low = 0;\n const high = sortedArray.length - 1;\n return binarySearchRecursive(array, value, low, high, compareFn);\n}\n","import { defaultEquals, DOES_NOT_EXIST } from '../../util';\n\nexport function sequentialSearch(array, value, equalsFn = defaultEquals) {\n for (let i = 0; i < array.length; i++) {\n if (equalsFn(value, array[i])) {\n return i;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import {\n biggerEquals,\n Compare,\n defaultCompare,\n defaultEquals,\n defaultDiff,\n DOES_NOT_EXIST,\n lesserEquals\n} from '../../util';\n\nexport function interpolationSearch(\n array,\n value,\n compareFn = defaultCompare,\n equalsFn = defaultEquals,\n diffFn = defaultDiff\n) {\n const { length } = array;\n let low = 0;\n let high = length - 1;\n let position = -1;\n let delta = -1;\n while (\n low <= high &&\n biggerEquals(value, array[low], compareFn) &&\n lesserEquals(value, array[high], compareFn)\n ) {\n delta = diffFn(value, array[low]) / diffFn(array[high], array[low]);\n position = low + Math.floor((high - low) * delta);\n if (equalsFn(array[position], value)) {\n return position;\n }\n if (compareFn(array[position], value) === Compare.LESS_THAN) {\n low = position + 1;\n } else {\n high = position - 1;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare, DOES_NOT_EXIST } from '../../util';\nimport { quickSort } from '../sorting/quicksort';\n\nexport function binarySearch(array, value, compareFn = defaultCompare) {\n const sortedArray = quickSort(array);\n let low = 0;\n let high = sortedArray.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = sortedArray[mid];\n // console.log('mid element is ' + element);\n if (compareFn(element, value) === Compare.LESS_THAN) {\n low = mid + 1;\n // console.log('low is ' + low);\n } else if (compareFn(element, value) === Compare.BIGGER_THAN) {\n high = mid - 1;\n // console.log('high is ' + high);\n } else {\n // console.log('found it');\n return mid;\n }\n }\n return DOES_NOT_EXIST;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nexport function shellSort(array, compareFn = defaultCompare) {\n let increment = array.length / 2;\n while (increment > 0) {\n for (let i = increment; i < array.length; i++) {\n let j = i;\n const temp = array[i];\n while (j >= increment && compareFn(array[j - increment], temp) === Compare.BIGGER_THAN) {\n array[j] = array[j - increment];\n j -= increment;\n }\n array[j] = temp;\n }\n if (increment === 2) {\n increment = 1;\n } else {\n increment = Math.floor((increment * 5) / 11);\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport const selectionSort = (array, compareFn = defaultCompare) => {\n const { length } = array;\n let indexMin;\n for (let i = 0; i < length - 1; i++) {\n indexMin = i;\n // console.log('index ' + array[i]);\n for (let j = i; j < length; j++) {\n if (compareFn(array[indexMin], array[j]) === Compare.BIGGER_THAN) {\n // console.log('new index min ' + array[j]);\n indexMin = j;\n }\n }\n if (i !== indexMin) {\n // console.log('swap ' + array[i] + ' with ' + array[indexMin]);\n swap(array, i, indexMin);\n }\n }\n return array;\n};\n","import { findMaxValue, findMinValue } from '../search/min-max-search';\n\nconst getBucketIndex = (value, minValue, significantDigit, radixBase) =>\n Math.floor(((value - minValue) / significantDigit) % radixBase);\n\nconst countingSortForRadix = (array, radixBase, significantDigit, minValue) => {\n let bucketsIndex;\n const buckets = [];\n const aux = [];\n for (let i = 0; i < radixBase; i++) {\n buckets[i] = 0;\n }\n for (let i = 0; i < array.length; i++) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n buckets[bucketsIndex]++;\n }\n for (let i = 1; i < radixBase; i++) {\n buckets[i] += buckets[i - 1];\n }\n for (let i = array.length - 1; i >= 0; i--) {\n bucketsIndex = getBucketIndex(array[i], minValue, significantDigit, radixBase);\n aux[--buckets[bucketsIndex]] = array[i];\n }\n for (let i = 0; i < array.length; i++) {\n array[i] = aux[i];\n }\n return array;\n};\nexport function radixSort(array, radixBase = 10) {\n if (array.length < 2) {\n return array;\n }\n const minValue = findMinValue(array);\n const maxValue = findMaxValue(array);\n // Perform counting sort for each significant digit, starting at 1\n let significantDigit = 1;\n while ((maxValue - minValue) / significantDigit >= 1) {\n // console.log('radix sort for digit ' + significantDigit);\n array = countingSortForRadix(array, radixBase, significantDigit, minValue);\n // console.log(array.join());\n significantDigit *= radixBase;\n }\n return array;\n}\n","import { Compare, defaultCompare } from '../../util';\n\nfunction merge(left, right, compareFn) {\n let i = 0;\n let j = 0;\n const result = [];\n while (i < left.length && j < right.length) {\n result.push(compareFn(left[i], right[j]) === Compare.LESS_THAN ? left[i++] : right[j++]);\n }\n return result.concat(i < left.length ? left.slice(i) : right.slice(j));\n}\nexport function mergeSort(array, compareFn = defaultCompare) {\n if (array.length > 1) {\n const { length } = array;\n const middle = Math.floor(length / 2);\n const left = mergeSort(array.slice(0, middle), compareFn);\n const right = mergeSort(array.slice(middle, length), compareFn);\n array = merge(left, right, compareFn);\n }\n return array;\n}\n","import { findMaxValue } from '../search/min-max-search';\n\nexport function countingSort(array) {\n if (array.length < 2) {\n return array;\n }\n const maxValue = findMaxValue(array);\n let sortedIndex = 0;\n const counts = new Array(maxValue + 1);\n array.forEach(element => {\n if (!counts[element]) {\n counts[element] = 0;\n }\n counts[element]++;\n });\n // console.log('Frequencies: ' + counts.join());\n counts.forEach((element, i) => {\n while (element > 0) {\n array[sortedIndex++] = i;\n element--;\n }\n });\n return array;\n}\n","import { insertionSort } from './insertion-sort';\n\nfunction createBuckets(array, bucketSize) {\n let minValue = array[0];\n let maxValue = array[0];\n for (let i = 1; i < array.length; i++) {\n if (array[i] < minValue) {\n minValue = array[i];\n } else if (array[i] > maxValue) {\n maxValue = array[i];\n }\n }\n const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;\n const buckets = [];\n for (let i = 0; i < bucketCount; i++) {\n buckets[i] = [];\n }\n for (let i = 0; i < array.length; i++) {\n buckets[Math.floor((array[i] - minValue) / bucketSize)].push(array[i]);\n }\n return buckets;\n}\nfunction sortBuckets(buckets) {\n const sortedArray = [];\n for (let i = 0; i < buckets.length; i++) {\n if (buckets[i] != null) {\n insertionSort(buckets[i]);\n sortedArray.push(...buckets[i]);\n }\n }\n return sortedArray;\n}\nexport function bucketSort(array, bucketSize = 5) {\n if (array.length < 2) {\n return array;\n }\n const buckets = createBuckets(array, bucketSize);\n return sortBuckets(buckets);\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function modifiedBubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1 - i; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { Compare, defaultCompare, swap } from '../../util';\n\nexport function bubbleSort(array, compareFn = defaultCompare) {\n const { length } = array;\n for (let i = 0; i < length; i++) {\n // console.log('--- ');\n for (let j = 0; j < length - 1; j++) {\n // console.log('compare ' + array[j] + ' with ' + array[j + 1]);\n if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {\n // console.log('swap ' + array[j] + ' with ' + array[j + 1]);\n swap(array, j, j + 1);\n }\n }\n }\n return array;\n}\n","import { swap } from '../../util';\n\nexport function shuffle(array) {\n let currentIndex = array.length;\n while (currentIndex !== 0) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n swap(array, currentIndex, randomIndex);\n }\n return array;\n}\n","const INF = Number.MAX_SAFE_INTEGER;\nconst find = (i, parent) => {\n while (parent[i]) {\n i = parent[i]; // eslint-disable-line prefer-destructuring\n }\n return i;\n};\nconst union = (i, j, parent) => {\n if (i !== j) {\n parent[j] = i;\n return true;\n }\n return false;\n};\nconst initializeCost = graph => {\n const cost = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n cost[i] = [];\n for (let j = 0; j < length; j++) {\n if (graph[i][j] === 0) {\n cost[i][j] = INF;\n } else {\n cost[i][j] = graph[i][j];\n }\n }\n }\n return cost;\n};\nexport const kruskal = graph => {\n const { length } = graph;\n const parent = [];\n let ne = 0;\n let a;\n let b;\n let u;\n let v;\n const cost = initializeCost(graph);\n while (ne < length - 1) {\n for (let i = 0, min = INF; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (cost[i][j] < min) {\n min = cost[i][j];\n a = u = i;\n b = v = j;\n }\n }\n }\n u = find(u, parent);\n v = find(v, parent);\n if (union(u, v, parent)) {\n ne++;\n }\n cost[a][b] = cost[b][a] = INF;\n }\n return parent;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minKey = (graph, key, visited) => {\n // Initialize min value\n let min = INF;\n let minIndex = 0;\n for (let v = 0; v < graph.length; v++) {\n if (visited[v] === false && key[v] < min) {\n min = key[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const prim = graph => {\n const parent = [];\n const key = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n key[i] = INF;\n visited[i] = false;\n }\n key[0] = 0;\n parent[0] = -1;\n for (let i = 0; i < length - 1; i++) {\n const u = minKey(graph, key, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {\n parent[v] = u;\n key[v] = graph[u][v];\n }\n }\n }\n return parent;\n};\n","export const floydWarshall = graph => {\n const dist = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = [];\n for (let j = 0; j < length; j++) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (!isFinite(graph[i][j])) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = graph[i][j];\n }\n }\n }\n for (let k = 0; k < length; k++) {\n for (let i = 0; i < length; i++) {\n for (let j = 0; j < length; j++) {\n if (dist[i][k] + dist[k][j] < dist[i][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n","const INF = Number.MAX_SAFE_INTEGER;\nconst minDistance = (dist, visited) => {\n let min = INF;\n let minIndex = -1;\n for (let v = 0; v < dist.length; v++) {\n if (visited[v] === false && dist[v] <= min) {\n min = dist[v];\n minIndex = v;\n }\n }\n return minIndex;\n};\nexport const dijkstra = (graph, src) => {\n const dist = [];\n const visited = [];\n const { length } = graph;\n for (let i = 0; i < length; i++) {\n dist[i] = INF;\n visited[i] = false;\n }\n dist[src] = 0;\n for (let i = 0; i < length - 1; i++) {\n const u = minDistance(dist, visited);\n visited[u] = true;\n for (let v = 0; v < length; v++) {\n if (!visited[v] && graph[u][v] !== 0 && dist[u] !== INF && dist[u] + graph[u][v] < dist[v]) {\n dist[v] = dist[u] + graph[u][v];\n }\n }\n }\n return dist;\n};\n","// import Graph from '../../data-structures/graph';\n\nconst Colors = {\n WHITE: 0,\n GREY: 1,\n BLACK: 2\n};\n\nconst initializeColor = vertices => {\n const color = {};\n for (let i = 0; i < vertices.length; i++) {\n color[vertices[i]] = Colors.WHITE;\n }\n return color;\n};\n\nconst depthFirstSearchVisit = (u, color, adjList, callback) => {\n color[u] = Colors.GREY;\n if (callback) {\n callback(u);\n }\n // console.log('Discovered ' + u);\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n depthFirstSearchVisit(w, color, adjList, callback);\n }\n }\n color[u] = Colors.BLACK;\n // console.log('explored ' + u);\n};\n\nexport const depthFirstSearch = (graph, callback) => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n depthFirstSearchVisit(vertices[i], color, adjList, callback);\n }\n }\n};\n\nconst DFSVisit = (u, color, d, f, p, time, adjList) => {\n // console.log('discovered ' + u);\n color[u] = Colors.GREY;\n d[u] = ++time.count;\n const neighbors = adjList.get(u);\n for (let i = 0; i < neighbors.length; i++) {\n const w = neighbors[i];\n if (color[w] === Colors.WHITE) {\n p[w] = u;\n DFSVisit(w, color, d, f, p, time, adjList);\n }\n }\n color[u] = Colors.BLACK;\n f[u] = ++time.count;\n // console.log('explored ' + u);\n};\n\nexport const DFS = graph => {\n const vertices = graph.getVertices();\n const adjList = graph.getAdjList();\n const color = initializeColor(vertices);\n const d = {};\n const f = {};\n const p = {};\n const time = { count: 0 };\n for (let i = 0; i < vertices.length; i++) {\n f[vertices[i]] = 0;\n d[vertices[i]] = 0;\n p[vertices[i]] = null;\n }\n for (let i = 0; i < vertices.length; i++) {\n if (color[vertices[i]] === Colors.WHITE) {\n DFSVisit(vertices[i], color, d, f, p, time, adjList);\n }\n }\n return {\n discovery: d,\n finished: f,\n predecessors: p\n };\n};\n","import Dictionary from './dictionary';\n\nexport default class Graph {\n constructor(isDirected = false) {\n this.isDirected = isDirected;\n this.vertices = [];\n this.adjList = new Dictionary();\n }\n addVertex(v) {\n if (!this.vertices.includes(v)) {\n this.vertices.push(v);\n this.adjList.set(v, []); // initialize adjacency list with array as well;\n }\n }\n addEdge(a, b) {\n if (!this.adjList.get(a)) {\n this.addVertex(a);\n }\n if (!this.adjList.get(b)) {\n this.addVertex(b);\n }\n this.adjList.get(a).push(b);\n if (this.isDirected !== true) {\n this.adjList.get(b).push(a);\n }\n }\n getVertices() {\n return this.vertices;\n }\n getAdjList() {\n return this.adjList;\n }\n toString() {\n let s = '';\n for (let i = 0; i < this.vertices.length; i++) {\n s += `${this.vertices[i]} -> `;\n const neighbors = this.adjList.get(this.vertices[i]);\n for (let j = 0; j < neighbors.length; j++) {\n s += `${neighbors[j]} `;\n }\n s += '\\n';\n }\n return s;\n }\n}\n","import { defaultCompare, swap } from '../../util';\n\nfunction heapify(array, index, heapSize, compareFn) {\n let largest = index;\n const left = (2 * index) + 1;\n const right = (2 * index) + 2;\n if (left < heapSize && compareFn(array[left], array[index]) > 0) {\n largest = left;\n }\n if (right < heapSize && compareFn(array[right], array[largest]) > 0) {\n largest = right;\n }\n if (largest !== index) {\n swap(array, index, largest);\n heapify(array, largest, heapSize, compareFn);\n }\n}\n\nfunction buildMaxHeap(array, compareFn) {\n for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {\n heapify(array, i, array.length, compareFn);\n }\n return array;\n}\n\nexport default function heapSort(array, compareFn = defaultCompare) {\n let heapSize = array.length;\n buildMaxHeap(array, compareFn);\n while (heapSize > 1) {\n swap(array, 0, --heapSize);\n heapify(array, 0, heapSize, compareFn);\n }\n return array;\n}\n","import { Compare, defaultCompare, reverseCompare, swap } from '../util';\n\nexport class MinHeap {\n constructor(compareFn = defaultCompare) {\n this.compareFn = compareFn;\n this.heap = [];\n }\n getLeftIndex(index) {\n return (2 * index) + 1;\n }\n getRightIndex(index) {\n return (2 * index) + 2;\n }\n getParentIndex(index) {\n if (index === 0) {\n return undefined;\n }\n return Math.floor((index - 1) / 2);\n }\n size() {\n return this.heap.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n clear() {\n this.heap = [];\n }\n findMinimum() {\n return this.isEmpty() ? undefined : this.heap[0];\n }\n insert(value) {\n if (value != null) {\n const index = this.heap.length;\n this.heap.push(value);\n this.siftUp(index);\n return true;\n }\n return false;\n }\n siftDown(index) {\n let element = index;\n const left = this.getLeftIndex(index);\n const right = this.getRightIndex(index);\n const size = this.size();\n if (\n left < size &&\n this.compareFn(this.heap[element], this.heap[left]) === Compare.BIGGER_THAN\n ) {\n element = left;\n }\n if (\n right < size &&\n this.compareFn(this.heap[element], this.heap[right]) === Compare.BIGGER_THAN\n ) {\n element = right;\n }\n if (index !== element) {\n swap(this.heap, index, element);\n this.siftDown(element);\n }\n }\n siftUp(index) {\n let parent = this.getParentIndex(index);\n while (\n index > 0 &&\n this.compareFn(this.heap[parent], this.heap[index]) === Compare.BIGGER_THAN\n ) {\n swap(this.heap, parent, index);\n index = parent;\n parent = this.getParentIndex(index);\n }\n }\n extract() {\n if (this.isEmpty()) {\n return undefined;\n }\n if (this.size() === 1) {\n return this.heap.shift();\n }\n const removedValue = this.heap[0];\n this.heap[0] = this.heap.pop();\n this.siftDown(0);\n return removedValue;\n }\n heapify(array) {\n if (array) {\n this.heap = array;\n }\n const maxIndex = Math.floor(this.size() / 2) - 1;\n for (let i = 0; i <= maxIndex; i++) {\n this.siftDown(i);\n }\n return this.heap;\n }\n getAsArray() {\n return this.heap;\n }\n}\nexport class MaxHeap extends MinHeap {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.compareFn = reverseCompare(compareFn);\n }\n}\n","import { Compare, defaultCompare } from '../util';\nimport BinarySearchTree from './binary-search-tree';\nimport { Node } from './models/node';\n\nconst BalanceFactor = {\n UNBALANCED_RIGHT: 1,\n SLIGHTLY_UNBALANCED_RIGHT: 2,\n BALANCED: 3,\n SLIGHTLY_UNBALANCED_LEFT: 4,\n UNBALANCED_LEFT: 5\n};\n\nexport default class AVLTree extends BinarySearchTree {\n constructor(compareFn = defaultCompare) {\n super(compareFn);\n this.compareFn = compareFn;\n this.root = null;\n }\n getNodeHeight(node) {\n if (node == null) {\n return -1;\n }\n return Math.max(this.getNodeHeight(node.left), this.getNodeHeight(node.right)) + 1;\n }\n /**\n * Left left case: rotate right\n *\n * b a\n * / \\ / \\\n * a e -> rotationLL(b) -> c b\n * / \\ / \\\n * c d d e\n *\n * @param node Node<T>\n */\n rotationLL(node) {\n const tmp = node.left;\n node.left = tmp.right;\n tmp.right = node;\n return tmp;\n }\n /**\n * Right right case: rotate left\n *\n * a b\n * / \\ / \\\n * c b -> rotationRR(a) -> a e\n * / \\ / \\\n * d e c d\n *\n * @param node Node<T>\n */\n rotationRR(node) {\n const tmp = node.right;\n node.right = tmp.left;\n tmp.left = node;\n return tmp;\n }\n /**\n * Left right case: rotate left then right\n * @param node Node<T>\n */\n rotationLR(node) {\n node.left = this.rotationRR(node.left);\n return this.rotationLL(node);\n }\n /**\n * Right left case: rotate right then left\n * @param node Node<T>\n */\n rotationRL(node) {\n node.right = this.rotationLL(node.right);\n return this.rotationRR(node);\n }\n getBalanceFactor(node) {\n const heightDifference = this.getNodeHeight(node.left) - this.getNodeHeight(node.right);\n switch (heightDifference) {\n case -2:\n return BalanceFactor.UNBALANCED_RIGHT;\n case -1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT;\n case 1:\n return BalanceFactor.SLIGHTLY_UNBALANCED_LEFT;\n case 2:\n return BalanceFactor.UNBALANCED_LEFT;\n default:\n return BalanceFactor.BALANCED;\n }\n }\n insert(key) {\n this.root = this.insertNode(this.root, key);\n }\n insertNode(node, key) {\n if (node == null) {\n return new Node(key);\n } else if (this.compareFn(key, node.key) === Compare.LESS_THAN) {\n node.left = this.insertNode(node.left, key);\n } else if (this.compareFn(key, node.key) === Compare.BIGGER_THAN) {\n node.right = this.insertNode(node.right, key);\n } else {\n return node; // duplicated key\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n if (this.compareFn(key, node.left.key) === Compare.LESS_THAN) {\n // Left left case\n node = this.rotationLL(node);\n } else {\n // Left right case\n return this.rotationLR(node);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n if (this.compareFn(key, node.right.key) === Compare.BIGGER_THAN) {\n // Right right case\n node = this.rotationRR(node);\n } else {\n // Right left case\n return this.rotationRL(node);\n }\n }\n return node;\n }\n removeNode(node, key) {\n node = super.removeNode(node, key); // {1}\n if (node == null) {\n return node;\n }\n // verify if tree is balanced\n const balanceFactor = this.getBalanceFactor(node);\n if (balanceFactor === BalanceFactor.UNBALANCED_LEFT) {\n // Left left case\n if (\n this.getBalanceFactor(node.left) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT\n ) {\n return this.rotationLL(node);\n }\n // Left right case\n if (this.getBalanceFactor(node.left) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT) {\n return this.rotationLR(node.left);\n }\n }\n if (balanceFactor === BalanceFactor.UNBALANCED_RIGHT) {\n // Right right case\n if (\n this.getBalanceFactor(node.right) === BalanceFactor.BALANCED ||\n this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_RIGHT\n ) {\n return this.rotationRR(node);\n }\n // Right left case\n if (this.getBalanceFactor(node.right) === BalanceFactor.SLIGHTLY_UNBALANCED_LEFT) {\n return this.rotationRL(node.right);\n }\n }\n return node;\n }\n}\n","export function fibonacci(n) {\n if (n < 1) {\n return 0;\n }\n if (n <= 2) {\n return 1;\n }\n return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\nexport function fibonacciIterative(n) {\n if (n < 1) { return 0; }\n let fibNMinus2 = 0;\n let fibNMinus1 = 1;\n let fibN = n;\n for (let i = 2; i <= n; i++) {\n fibN = fibNMinus1 + fibNMinus2;\n fibNMinus2 = fibNMinus1;\n fibNMinus1 = fibN;\n }\n return fibN;\n}\n\nexport function fibonacciMemoization(n) {\n if (n < 1) { return 0; }\n const memo = [0, 1];\n const fibonacciMem = num => {\n if (memo[num] != null) { return memo[num]; }\n memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2);\n return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));\n };\n return fibonacciMem(n);\n}\n","export function factorialIterative(number) {\n if (number < 0) {\n return undefined;\n }\n let total = 1;\n for (let n = number; n > 1; n--) {\n total *= n;\n }\n return total;\n}\n\nexport function factorial(n) {\n if (n < 0) {\n return undefined;\n }\n if (n === 1 || n === 0) {\n return 1;\n }\n return n * factorial(n - 1);\n}\n","import { ValuePair } from './value-pair';\n\nexport class ValuePairLazy extends ValuePair {\n constructor(key, value, isDeleted = false) {\n super(key, value);\n this.key = key;\n this.value = value;\n this.isDeleted = isDeleted;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePairLazy } from './models/value-pair-lazy';\n\nexport default class HashTableLinearProbingLazy {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (\n this.table[position] == null ||\n (this.table[position] != null && this.table[position].isDeleted)\n ) {\n this.table[position] = new ValuePairLazy(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null && !this.table[position].isDeleted) {\n index++;\n }\n this.table[index] = new ValuePairLazy(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n if (this.table[index].key === key && this.table[index].isDeleted) {\n return undefined;\n }\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key && !this.table[position].isDeleted) {\n this.table[position].isDeleted = true;\n return true;\n }\n let index = position + 1;\n while (\n this.table[index] != null &&\n (this.table[index].key !== key || this.table[index].isDeleted)\n ) {\n index++;\n }\n if (\n this.table[index] != null &&\n this.table[index].key === key &&\n !this.table[index].isDeleted\n ) {\n this.table[index].isDeleted = true;\n return true;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(valuePair => {\n count += valuePair.isDeleted === true ? 0 : 1;\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableLinearProbing {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new ValuePair(key, value);\n } else {\n let index = position + 1;\n while (this.table[index] != null) {\n index++;\n }\n this.table[index] = new ValuePair(key, value);\n }\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n return this.table[position].value;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n return this.table[position].value;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n if (this.table[position] != null) {\n if (this.table[position].key === key) {\n delete this.table[position];\n this.verifyRemoveSideEffect(key, position);\n return true;\n }\n let index = position + 1;\n while (this.table[index] != null && this.table[index].key !== key) {\n index++;\n }\n if (this.table[index] != null && this.table[index].key === key) {\n delete this.table[index];\n this.verifyRemoveSideEffect(key, index);\n return true;\n }\n }\n return false;\n }\n verifyRemoveSideEffect(key, removedPosition) {\n const hash = this.hashCode(key);\n let index = removedPosition + 1;\n while (this.table[index] != null) {\n const posHash = this.hashCode(this.table[index].key);\n if (posHash <= hash || posHash <= removedPosition) {\n this.table[removedPosition] = this.table[index];\n delete this.table[index];\n removedPosition = index;\n }\n index++;\n }\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport LinkedList from './linked-list';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTableSeparateChaining {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n if (this.table[position] == null) {\n this.table[position] = new LinkedList();\n }\n this.table[position].push(new ValuePair(key, value));\n return true;\n }\n return false;\n }\n get(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n return current.element.value;\n }\n current = current.next;\n }\n }\n return undefined;\n }\n remove(key) {\n const position = this.hashCode(key);\n const linkedList = this.table[position];\n if (linkedList != null && !linkedList.isEmpty()) {\n let current = linkedList.getHead();\n while (current != null) {\n if (current.element.key === key) {\n linkedList.remove(current.element);\n if (linkedList.isEmpty()) {\n delete this.table[position];\n }\n return true;\n }\n current = current.next;\n }\n }\n return false;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n let count = 0;\n Object.values(this.table).forEach(linkedList => {\n count += linkedList.size();\n });\n return count;\n }\n clear() {\n this.table = {};\n }\n getTable() {\n return this.table;\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[\n keys[i]\n ].toString()}}`;\n }\n return objString;\n }\n}\n","import { defaultToString } from '../util';\nimport { ValuePair } from './models/value-pair';\n\nexport default class HashTable {\n constructor(toStrFn = defaultToString) {\n this.toStrFn = toStrFn;\n this.table = {};\n }\n loseloseHashCode(key) {\n if (typeof key === 'number') {\n return key;\n }\n const tableKey = this.toStrFn(key);\n let hash = 0;\n for (let i = 0; i < tableKey.length; i++) {\n hash += tableKey.charCodeAt(i);\n }\n return hash % 37;\n }\n /* djb2HashCode(key) {\n const tableKey = this.toStrFn(key);\n let hash = 5381;\n for (let i = 0; i < tableKey.length; i++) {\n hash = (hash * 33) + tableKey.charCodeAt(i);\n }\n return hash % 1013;\n } */\n hashCode(key) {\n return this.loseloseHashCode(key);\n }\n put(key, value) {\n if (key != null && value != null) {\n const position = this.hashCode(key);\n this.table[position] = new ValuePair(key, value);\n return true;\n }\n return false;\n }\n get(key) {\n const valuePair = this.table[this.hashCode(key)];\n return valuePair == null ? undefined : valuePair.value;\n }\n remove(key) {\n const hash = this.hashCode(key);\n const valuePair = this.table[hash];\n if (valuePair != null) {\n delete this.table[hash];\n return true;\n }\n return false;\n }\n getTable() {\n return this.table;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.table).length;\n }\n clear() {\n this.table = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const keys = Object.keys(this.table);\n let objString = `{${keys[0]} => ${this.table[keys[0]].toString()}}`;\n for (let i = 1; i < keys.length; i++) {\n objString = `${objString},{${keys[i]} => ${this.table[keys[i]].toString()}}`;\n }\n return objString;\n }\n}\n","export default class Set {\n constructor() {\n this.items = {};\n }\n add(element) {\n if (!this.has(element)) {\n this.items[element] = element;\n return true;\n }\n return false;\n }\n delete(element) {\n if (this.has(element)) {\n delete this.items[element];\n return true;\n }\n return false;\n }\n has(element) {\n return Object.prototype.hasOwnProperty.call(this.items, element);\n }\n values() {\n return Object.values(this.items);\n }\n union(otherSet) {\n const unionSet = new Set();\n this.values().forEach(value => unionSet.add(value));\n otherSet.values().forEach(value => unionSet.add(value));\n return unionSet;\n }\n intersection(otherSet) {\n const intersectionSet = new Set();\n const values = this.values();\n const otherValues = otherSet.values();\n let biggerSet = values;\n let smallerSet = otherValues;\n if (otherValues.length - values.length > 0) {\n biggerSet = otherValues;\n smallerSet = values;\n }\n smallerSet.forEach(value => {\n if (biggerSet.includes(value)) {\n intersectionSet.add(value);\n }\n });\n return intersectionSet;\n }\n difference(otherSet) {\n const differenceSet = new Set();\n this.values().forEach(value => {\n if (!otherSet.has(value)) {\n differenceSet.add(value);\n }\n });\n return differenceSet;\n }\n isSubsetOf(otherSet) {\n if (this.size() > otherSet.size()) {\n return false;\n }\n let isSubset = true;\n this.values().every(value => {\n if (!otherSet.has(value)) {\n isSubset = false;\n return false;\n }\n return true;\n });\n return isSubset;\n }\n isEmpty() {\n return this.size() === 0;\n }\n size() {\n return Object.keys(this.items).length;\n }\n clear() {\n this.items = {};\n }\n toString() {\n if (this.isEmpty()) {\n return '';\n }\n const values = this.values();\n let objString = `${values[0]}`;\n for (let i = 1; i < values.length; i++) {\n objString = `${objString},${values[i].toString()}`;\n }\n return objString;\n }\n}\n","import DoublyLinkedList from './doubly-linked-list';\n\nexport default class StackLinkedList {\n constructor() {\n this.items = new DoublyLinkedList();\n }\n push(element) {\n this.items.push(element);\n }\n pop() {\n if (this.isEmpty()) {\n return undefined;\n }\n const result = this.items.removeAt(this.size() - 1);\n return result;\n }\n peek() {\n if (this.isEmpty()) {\n return undefined;\n }\n return this.items.getElementAt(this.size() - 1).element;\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n size() {\n return this.items.size();\n }\n clear() {\n this.items.clear();\n }\n toString() {\n return this.items.toString();\n }\n}\n","import { Compare, defaultCompare, defaultEquals } from '../util';\nimport LinkedList from './linked-list';\n\nexport default class SortedLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {\n super(equalsFn);\n this.equalsFn = equalsFn;\n this.compareFn = compareFn;\n }\n push(element) {\n if (this.isEmpty()) {\n super.push(element);\n } else {\n const index = this.getIndexNextSortedElement(element);\n super.insert(element, index);\n }\n }\n insert(element, index = 0) {\n if (this.isEmpty()) {\n return super.insert(element, index === 0 ? index : 0);\n }\n const pos = this.getIndexNextSortedElement(element);\n return super.insert(element, pos);\n }\n getIndexNextSortedElement(element) {\n let current = this.head;\n let i = 0;\n for (; i < this.size() && current; i++) {\n const comp = this.compareFn(element, current.element);\n if (comp === Compare.LESS_THAN) {\n return i;\n }\n current = current.next;\n }\n return i;\n }\n}\n","import { defaultEquals } from '../util';\nimport LinkedList from './linked-list';\nimport { Node } from './models/linked-list-models';\n\nexport default class CircularLinkedList extends LinkedList {\n constructor(equalsFn = defaultEquals) {\n super(equalsFn);\n }\n push(element) {\n const node = new Node(element);\n let current;\n if (this.head == null) {\n this.head = node;\n } else {\n current = this.getElementAt(this.size() - 1);\n current.next = node;\n }\n // set node.next to head - to have circular list\n node.next = this.head;\n this.count++;\n }\n insert(element, index) {\n if (index >= 0 && index <= this.count) {\n const node = new Node(element);\n let current = this.head;\n if (index === 0) {\n if (this.head == null) {\n // if no node in list\n this.head = node;\n node.next = this.head;\n } else {\n node.next = current;\n current = this.getElementAt(this.size());\n // update last element\n this.head = node;\n current.next = this.head;\n }\n } else {\n const previous = this.getElementAt(index - 1);\n node.next = previous.next;\n previous.next = node;\n }\n this.count++;\n return true;\n }\n return false;\n }\n removeAt(index) {\n if (index >= 0 && index < this.count) {\n let current = this.head;\n if (index === 0) {\n if (this.size() === 1) {\n this.head = undefined;\n } else {\n const removed = this.head;\n current = this.getElementAt(this.size() - 1);\n this.head = this.head.next;\n current.next = this.head;\n current = removed;\n }\n } else {\n // no need to update last element for circular list\n const previous = this.getElementAt(index - 1);\n current = previous.next;\n previous.next = current.next;\n }\n this.count--;\n return current.element;\n }\n return undefined;\n }\n}\n","import Deque from '../data-structures/deque';\n\nexport function palindromeChecker(aString) {\n if (\n aString === undefined ||\n aString === null ||\n (aString !== null && aString.length === 0)\n ) {\n return false;\n }\n const deque = new Deque();\n const lowerString = aString.toLocaleLowerCase().split(' ').join('');\n let isEqual = true;\n let firstChar;\n let lastChar;\n\n for (let i = 0; i < lowerString.length; i++) {\n deque.addBack(lowerString.charAt(i));\n }\n\n while (deque.size() > 1 && isEqual) {\n firstChar = deque.removeFront();\n lastChar = deque.removeBack();\n if (firstChar !== lastChar) {\n isEqual = false;\n }\n }\n\n return isEqual;\n}\n","import Queue from '../data-structures/queue';\n\nexport function hotPotato(elementsList, num) {\n const queue = new Queue();\n const elimitatedList = [];\n\n for (let i = 0; i < elementsList.length; i++) {\n queue.enqueue(elementsList[i]);\n }\n\n while (queue.size() > 1) {\n for (let i = 0; i < num; i++) {\n queue.enqueue(queue.dequeue());\n }\n elimitatedList.push(queue.dequeue());\n }\n\n return {\n eliminated: elimitatedList,\n winner: queue.dequeue()\n };\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function parenthesesChecker(symbols) {\n const stack = new Stack();\n const opens = '([{';\n const closers = ')]}';\n let balanced = true;\n let index = 0;\n let symbol;\n let top;\n\n while (index < symbols.length && balanced) {\n symbol = symbols.charAt(index);\n if (opens.indexOf(symbol) >= 0) {\n stack.push(symbol);\n } else if (stack.isEmpty()) {\n balanced = false;\n } else {\n top = stack.pop();\n if (!(opens.indexOf(top) === closers.indexOf(symbol))) {\n balanced = false;\n }\n }\n index++;\n }\n if (balanced && stack.isEmpty()) {\n return true;\n }\n return false;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nexport function decimalToBinary(decNumber) {\n const remStack = new Stack();\n let number = decNumber;\n let rem;\n let binaryString = '';\n\n while (number > 0) {\n rem = Math.floor(number % 2);\n remStack.push(rem);\n number = Math.floor(number / 2);\n }\n\n while (!remStack.isEmpty()) {\n binaryString += remStack.pop().toString();\n }\n\n return binaryString;\n}\n\nexport function baseConverter(decNumber, base) {\n const remStack = new Stack();\n const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let number = decNumber;\n let rem;\n let baseString = '';\n\n if (!(base >= 2 && base <= 36)) {\n return '';\n }\n\n while (number > 0) {\n rem = Math.floor(number % base);\n remStack.push(rem);\n number = Math.floor(number / base);\n }\n\n while (!remStack.isEmpty()) {\n baseString += digits[remStack.pop()];\n }\n\n return baseString;\n}\n","// @ts-check\nimport Stack from '../data-structures/stack';\n\nfunction towerOfHanoi(plates, source, helper, dest, sourceName, helperName, destName, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n } else {\n towerOfHanoi(plates - 1, source, dest, helper, sourceName, destName, helperName, moves);\n dest.push(source.pop());\n const move = {};\n move[sourceName] = source.toString();\n move[helperName] = helper.toString();\n move[destName] = dest.toString();\n moves.push(move);\n towerOfHanoi(plates - 1, helper, source, dest, helperName, sourceName, destName, moves);\n }\n return moves;\n}\n\nexport function hanoiStack(plates) {\n const source = new Stack();\n const dest = new Stack();\n const helper = new Stack();\n\n for (let i = plates; i > 0; i--) {\n source.push(i);\n }\n\n return towerOfHanoi(plates, source, helper, dest, 'source', 'helper', 'dest');\n}\n\nexport function hanoi(plates, source, helper, dest, moves = []) {\n if (plates <= 0) {\n return moves;\n }\n if (plates === 1) {\n moves.push([source, dest]);\n } else {\n hanoi(plates - 1, source, dest, helper, moves);\n moves.push([source, dest]);\n hanoi(plates - 1, helper, source, dest, moves);\n }\n return moves;\n}\n","// @ts-check\n\nexport default class StackArray {\n constructor() {\n this.items = [];\n }\n push(element) {\n this.items.push(element);\n }\n\n pop() {\n return this.items.pop();\n }\n\n peek() {\n return this.items[this.items.length - 1];\n }\n\n isEmpty() {\n return this.items.length === 0;\n }\n\n size() {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n\n toArray() {\n return this.items;\n }\n\n toString() {\n return this.items.toString();\n }\n}\n","import * as _util from './util';\n\n// chapters 05 and 07\nexport const util = _util;\n\n// chapter 03\nexport { default as StackArray } from './data-structures/stack-array';\nexport { default as Stack } from './data-structures/stack';\nexport { hanoi } from './others/hanoi';\nexport { hanoiStack } from './others/hanoi';\nexport { baseConverter } from './others/base-converter';\nexport { decimalToBinary } from './others/base-converter';\nexport { parenthesesChecker } from './others/balanced-symbols';\n\n// chapter 04\nexport { default as Queue } from './data-structures/queue';\nexport { default as Deque } from './data-structures/deque';\nexport { default as hotPotato } from './others/hot-potato';\nexport { default as palindromeChecker } from './others/palindrome-checker';\n\n// chapter 05\nexport { default as LinkedList } from './data-structures/linked-list';\nexport { default as DoublyLinkedList } from './data-structures/doubly-linked-list';\nexport { default as CircularLinkedList } from './data-structures/circular-linked-list';\nexport { default as SortedLinkedList } from './data-structures/sorted-linked-list';\nexport { default as StackLinkedList } from './data-structures/stack-linked-list';\n\n// chapter 06\nexport { default as Set } from './data-structures/set';\n\n// chapter 07\nexport { default as Dictionary } from './data-structures/dictionary';\nexport { default as HashTable } from './data-structures/hash-table';\nexport { default as HashTableSeparateChaining } from './data-structures/hash-table-separate-chaining';\nexport { default as HashTableLinearProbing } from './data-structures/hash-table-linear-probing';\nexport { default as HashTableLinearProbingLazy } from './data-structures/hash-table-linear-probing-lazy';\n\n// chapter 08\nexport { default as factorialIterative } from './others/factorial';\nexport { default as factorial } from './others/factorial';\nexport { default as fibonacci } from './others/fibonacci';\nexport { default as fibonacciIterative } from './others/fibonacci';\nexport { default as fibonacciMemoization } from './others/fibonacci';\n\n// chapter 09\nexport { default as BinarySearchTree } from './data-structures/binary-search-tree';\nexport { default as AVLTree } from './data-structures/avl-tree';\n\n// chapter 10\nexport { MinHeap } from './data-structures/heap';\nexport { MaxHeap } from './data-structures/heap';\nexport { default as heapSort } from './algorithms/sorting/heap-sort';\n\n// chapter 11\nexport { default as Graph } from './data-structures/graph';\nexport { breadthFirstSearch } from './algorithms/graph/breadth-first-search';\nexport { BFS } from './algorithms/graph/breadth-first-search';\nexport { depthFirstSearch } from './algorithms/graph/depth-first-search';\nexport { DFS } from './algorithms/graph/depth-first-search';\nexport { dijkstra } from './algorithms/graph/dijkstra';\nexport { floydWarshall } from './algorithms/graph/floyd-warshall';\nexport { prim } from './algorithms/graph/prim';\nexport { kruskal } from './algorithms/graph/kruskal';\n\n// chapter 12\nexport { shuffle } from './algorithms/shuffle/fisher–yates';\n\nexport { bubbleSort } from './algorithms/sorting/bubble-sort';\nexport { modifiedBubbleSort } from './algorithms/sorting/bubble-sort-improved';\nexport { bucketSort } from './algorithms/sorting/bucket-sort';\nexport { countingSort } from './algorithms/sorting/counting-sort';\nexport { insertionSort } from './algorithms/sorting/insertion-sort';\nexport { mergeSort } from './algorithms/sorting/merge-sort';\nexport { quickSort } from './algorithms/sorting/quicksort';\nexport { radixSort } from './algorithms/sorting/radix-sort';\nexport { selectionSort } from './algorithms/sorting/selection-sort';\nexport { shellSort } from './algorithms/sorting/shell-sort';\n\nexport { binarySearch } from './algorithms/search/binary-search';\nexport { interpolationSearch } from './algorithms/search/interpolation-search';\nexport { sequentialSearch } from './algorithms/search/sequential-search';\nexport { findMaxValue } from './algorithms/search/min-max-search';\nexport { findMinValue } from './algorithms/search/min-max-search';\n\n// chapter 14\nexport { binarySearch as binarySearchRecursive } from './algorithms/search/binary-search-recursive';\nexport { minCoinChange } from './algorithms/dynamic-programing/min-coin-change';\nexport { minCoinChange as minCoinChangeGreedy } from './algorithms/greedy/min-coin-change';\nexport { knapSack } from './algorithms/dynamic-programing/knapsack';\nexport { knapSack as knapSackRecursive } from './algorithms/dynamic-programing/knapsack-recursive';\nexport { knapSack as knapSackGreedy } from './algorithms/greedy/knapsack';\nexport { ratInAMaze } from './algorithms/backtracking/rat-in-maze';\nexport { sudokuSolver } from './algorithms/backtracking/sudoku-solver';\n"],"sourceRoot":""}