[{"data":1,"prerenderedAt":9703},["ShallowReactive",2],{"nav:algorithms":3,"lesson:\u002Falgorithms\u002Fsequences\u002Fstring-matching":374,"course-wordcounts":9571,"ref-card-index":9627},[4,28,50,71,120,152,205,230,286,306,331,352],{"module":5,"moduleNumber":6,"slug":7,"lessons":8},"Foundations",1,"foundations",[9,15,21],{"title":10,"path":11,"lessonNumber":6,"topics":12,"summary":14},"What Is an Algorithm?","\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm",[5,13],"Correctness & Induction","An algorithm is a finite, mechanical recipe that transforms inputs into outputs. We pin down what counts as an algorithm, how we write one down, and the three things we always ask of it: is it correct, is it fast, and can we prove it.\n",{"title":16,"path":17,"lessonNumber":18,"topics":19,"summary":20},"Asymptotic Analysis","\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis",2,[16],"We measure an algorithm's running time as a function of its input size, then strip away machine-specific constants and lower-order terms to compare algorithms cleanly. This lesson defines the RAM model and the $O$, $\\Omega$, $\\Theta$, $o$, and $\\omega$ notations, and shows how to read the cost of loops off the page.\n",{"title":22,"path":23,"lessonNumber":24,"topics":25,"summary":27},"Recurrences and the Master Theorem","\u002Falgorithms\u002Ffoundations\u002Frecurrences",3,[26],"Recurrences","Recursive and divide-and-conquer algorithms describe their own running time with a recurrence: $T(n)$ in terms of $T$ on smaller inputs. We solve recurrences three ways — drawing the recursion tree, guessing-and-verifying by induction, and applying the Master Theorem — using merge sort as the running example.\n",{"module":29,"moduleNumber":18,"slug":30,"lessons":31},"Divide & Conquer","divide-and-conquer",[32,38,44],{"title":33,"path":34,"lessonNumber":6,"topics":35,"summary":37},"Divide and Conquer & Mergesort","\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort",[29,36],"Comparison Sorting","Divide and conquer breaks a problem into smaller copies of itself, solves them recursively, and stitches the answers together. We meet the paradigm through mergesort — its merge step, its loop-invariant proof, and the recursion tree that pins its cost at $\\Theta(n\\log n)$ — then glimpse Karatsuba multiplication as a second example of the same idea.",{"title":39,"path":40,"lessonNumber":18,"topics":41,"summary":43},"Quicksort","\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort",[36,42],"Probabilistic Analysis","Quicksort sorts in place by partitioning around a pivot and recursing on each side. We give Lomuto and Hoare partitioning with a correctness invariant, see why a bad pivot costs $\\Theta(n^2)$ while a balanced one gives $\\Theta(n\\log n)$, and prove that randomizing the pivot makes the expected cost $\\Theta(n\\log n)$ on every input.",{"title":45,"path":46,"lessonNumber":24,"topics":47,"summary":49},"Linear-Time Selection","\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection",[48,29],"Order Statistics","Finding the $k$-th smallest element looks like it should require sorting, but it does not. Quickselect adapts quicksort's partition to recurse on just one side, achieving expected $O(n)$. The median-of-medians algorithm guarantees a good pivot with the groups-of-five trick, pushing the worst case down to a provable $O(n)$.",{"module":51,"moduleNumber":24,"slug":52,"lessons":53},"Sorting & Order Statistics","sorting",[54,60,65],{"title":55,"path":56,"lessonNumber":6,"topics":57,"summary":59},"Heaps and Heapsort","\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort",[58,36],"Heaps","A binary heap is a tree we store flat in an array, with index arithmetic standing in for pointers. We build the max-heap property bottom-up in $O(n)$ time, sort in place in $\\Theta(n\\log n)$ by repeatedly extracting the maximum, and reuse the same structure to implement a priority queue.",{"title":61,"path":62,"lessonNumber":18,"topics":63,"summary":64},"Lower Bounds for Comparison Sorting","\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds",[36],"Every sort we have seen runs in $\\Omega(n\\log n)$, and that is no accident. Modeling a sort as a decision tree of comparisons, we show any such tree must have $n!$ leaves, forcing height $\\ge \\log_2(n!) = \\Omega(n\\log n)$ — a worst-case bound no comparison sort can ever beat.",{"title":66,"path":67,"lessonNumber":24,"topics":68,"summary":70},"Sorting in Linear Time","\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting",[69],"Linear-Time Sorting","The $\\Omega(n\\log n)$ barrier only binds algorithms that compare. By instead using keys as array indices we slip past it: counting sort runs in $\\Theta(n+k)$ and is stable, radix sort layers it digit by digit, and bucket sort averages $\\Theta(n)$ on uniform data. We see exactly when each applies.",{"module":72,"moduleNumber":73,"slug":74,"lessons":75},"Data Structures",4,"data-structures",[76,82,88,93,99,105,113],{"title":77,"path":78,"lessonNumber":6,"topics":79,"summary":81},"Elementary Data Structures","\u002Falgorithms\u002Fdata-structures\u002Felementary-structures",[80],"Linear Structures","Every container is built one of two ways: **contiguous** in an array, or **linked** through pointers. We trade cache-friendly random access against $O(1)$ splicing, derive the **amortized $O(1)$** append of a doubling dynamic array, and assemble the two ordered access disciplines — the LIFO **stack** and the FIFO **queue** (with its generalization, the **deque**) — on top of both.",{"title":83,"path":84,"lessonNumber":18,"topics":85,"summary":87},"Hash Tables","\u002Falgorithms\u002Fdata-structures\u002Fhash-tables",[86],"Hashing","A hash table implements the dictionary — insert, search, delete — in expected $O(1)$ time by scattering keys across an array with a hash function. We build up from direct addressing, handle collisions by chaining and by open addressing, analyze the load factor $\\alpha$, and see how universal hashing earns its expected-time guarantee against every input.",{"title":89,"path":90,"lessonNumber":24,"topics":91,"summary":92},"Binary Search Trees","\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees",[89],"A binary search tree keeps keys ordered so that every operation follows a single root-to-leaf path. We state the BST property, give search and insert, find minimum, maximum, and successor, see that an inorder walk emits the keys in sorted order, and confront the catch — every operation costs $O(h)$, and a carelessly built tree degrades to height $h = \\Theta(n)$, motivating balance.",{"title":94,"path":95,"lessonNumber":73,"topics":96,"summary":98},"AVL Trees","\u002Falgorithms\u002Fdata-structures\u002Favl-trees",[97],"Balanced Trees","An AVL tree is the first balanced BST: at every node the two subtrees' heights differ by at most $1$. A Fibonacci-style minimal-node argument forces height $h \\le 1.44\\log_2 n = O(\\log n)$, so search, insert, and delete are all $O(\\log n)$. Insertion rebalances with at most one of four rotation cases (LL, RR, LR, RL); deletion may rotate all the way to the root.",{"title":100,"path":101,"lessonNumber":102,"topics":103,"summary":104},"Balanced Search Trees","\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees",5,[97],"An ordinary BST can degrade to height $\\Theta(n)$; balanced search trees guarantee $h = O(\\log n)$ by maintaining invariants and repairing them after every update. We meet rotations, the local restructuring primitive, then red-black trees, whose color invariants force logarithmic height, and finally B-trees, which trade tall-and-thin for short-and-wide to win on disk.",{"title":106,"path":107,"lessonNumber":108,"topics":109,"summary":112},"Disjoint Sets (Union-Find)","\u002Falgorithms\u002Fdata-structures\u002Funion-find",6,[110,111],"Disjoint Sets","Amortized Analysis","The disjoint-set data structure tracks a partition of elements into groups, answering \"are these two in the same group?\" and merging groups on demand. A forest of parent pointers, sped up by union by rank and path compression, drives every operation to near-constant $O(\\alpha(n))$ amortized time — the engine behind connectivity queries and Kruskal's minimum spanning tree.",{"title":114,"path":115,"lessonNumber":116,"topics":117,"summary":119},"Fenwick & Segment Trees","\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees",7,[118],"Range Queries","A prefix-sum array answers a range sum in $O(1)$ but pays $O(n)$ per update; a plain array updates in $O(1)$ but pays $O(n)$ per range sum. Fenwick and segment trees give us _both_ in $O(\\log n)$. The Fenwick (binary indexed) tree is a tiny array keyed by the low bit; the segment tree is a general balanced tree over canonical ranges that handles any associative aggregate and, with lazy propagation, range updates too.",{"module":121,"moduleNumber":102,"slug":122,"lessons":123},"Sequences & Strings","sequences",[124,130,135,141,147],{"title":125,"path":126,"lessonNumber":6,"topics":127,"summary":129},"Two Pointers, Sliding Windows & Prefix Sums","\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows",[128],"Array Techniques","A family of array idioms that collapse an obvious $O(n^2)$ scan into a single $O(n)$ pass by maintaining an invariant as indices move. We meet two pointers (converging on a sorted array, and a fast\u002Fslow pair for in-place rewriting), the sliding window (fixed and variable size, amortized $O(n)$), and prefix sums, which answer any range-sum in $O(1)$ and count subarrays summing to $k$.",{"title":131,"path":132,"lessonNumber":18,"topics":133,"summary":134},"Monotonic Stacks & Queues","\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks",[128],"A **monotonic stack** keeps its contents sorted by popping every element that would break the order before each push — turning a family of \"previous\u002Fnext greater (or smaller) element\" questions into a single $O(n)$ scan. We derive the next-greater-element routine and its amortized analysis, fuse two such scans to measure the **largest rectangle in a histogram** in linear time, and extend the idea to a **monotonic deque** that streams the **sliding-window maximum** in $O(n)$.",{"title":136,"path":137,"lessonNumber":24,"topics":138,"summary":140},"Binary Search on the Answer","\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer",[139],"Searching","Binary search is not really about arrays — it is about locating the boundary of a **monotone predicate** $p(x)$ in $O(\\log(\\text{range}))$ probes. We first pin down the half-open `while (lo \u003C hi)` template for $\\textsc{lower\\_bound}$ and $\\textsc{upper\\_bound}$, then generalize to \"binary search on the answer\": whenever feasibility is monotone in a numeric parameter, we binary search the parameter itself, calling a feasibility check at each step.",{"title":142,"path":143,"lessonNumber":73,"topics":144,"summary":146},"String Matching: Rabin–Karp, KMP & Z","\u002Falgorithms\u002Fsequences\u002Fstring-matching",[145],"Strings","Given a text $T$ of length $n$ and a pattern $P$ of length $m$, find every occurrence of $P$ in $T$. The naive scan costs $O(nm)$; we beat it three ways. Rabin–Karp uses a **rolling hash** to test alignments in $O(1)$ amortised each, with expected $O(n+m)$. KMP precomputes a **failure function** so the scan never re-reads a text character, for worst-case $O(n+m)$. The **Z-function** gives the same bound from a different angle and converts freely to KMP's table.",{"title":148,"path":149,"lessonNumber":102,"topics":150,"summary":151},"Tries & Prefix Trees","\u002Falgorithms\u002Fsequences\u002Ftries",[145],"A **trie** stores a set of strings in a tree keyed by _characters_, so that insert, search, and prefix-test all run in $O(L)$ time — the length of the key, _independent of how many keys are stored_. Shared prefixes are stored once, which makes tries the natural structure for autocomplete, wildcard dictionaries, board word-search, and — over the alphabet $\\{0,1\\}$ — the maximum-XOR-pair problem.",{"module":153,"moduleNumber":108,"slug":154,"lessons":155},"Graphs","graphs",[156,163,168,173,178,183,188,193,199],{"title":157,"path":158,"lessonNumber":6,"topics":159,"summary":162},"Graph Representations and Traversal","\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal",[160,161],"Graph Representations","Graph Traversal","A graph captures _relationships_ — who connects to whom. We fix the vocabulary, weigh the two standard representations (adjacency list versus matrix), then meet the two explorations you'll use constantly: breadth-first search, which finds shortest paths by number of edges, and depth-first search, whose discovery and finish times reveal a graph's hidden structure. Both run in $O(V + E)$.",{"title":164,"path":165,"lessonNumber":18,"topics":166,"summary":167},"Topological Sort and Strong Connectivity","\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc",[161],"Directed acyclic graphs model dependencies: tasks that must precede other tasks. A _topological order_ lays such a graph out in a line so every edge points forward, and depth-first finish times hand it to us almost for free. We then ask the harder question for graphs _with_ cycles: which vertices can reach each other? The answer is the strongly connected components, found by a two-pass DFS.",{"title":169,"path":170,"lessonNumber":24,"topics":171,"summary":172},"Minimum Spanning Trees","\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees",[169],"Given a weighted network, how do we connect everything as cheaply as possible? The answer is a minimum spanning tree. One lemma, the cut property, justifies _every_ correct MST algorithm, and from it two famous greedy methods fall out: Kruskal's, which grows a forest edge by edge with a union-find structure, and Prim's, which grows a single tree using a priority queue.",{"title":174,"path":175,"lessonNumber":73,"topics":176,"summary":177},"Shortest Paths","\u002Falgorithms\u002Fgraphs\u002Fshortest-paths",[174],"Finding the cheapest route through a weighted network is one of the most-used algorithms in computing. A single operation — _relaxation_ — underlies them all. Dijkstra's algorithm solves the non-negative case greedily; Bellman-Ford handles negative edges and detects negative cycles; and Floyd-Warshall finds the shortest path between _every_ pair of vertices.",{"title":179,"path":180,"lessonNumber":102,"topics":181,"summary":182},"Network Flow","\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow",[179],"How much can flow through a network from source to sink? Max-flow is a surprisingly general model — once you see a problem as flow, a whole toolbox opens up. We build flow networks, find maximum flows by repeatedly pushing along augmenting paths in the residual graph, prove the max-flow min-cut theorem, and watch bipartite matching fall out as a special case.",{"title":184,"path":185,"lessonNumber":108,"topics":186,"summary":187},"Bridges & Articulation Points","\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points",[153],"A **bridge** is an edge whose removal disconnects the graph; an **articulation point** is a vertex whose removal does. Both are single points of failure in a network. A single depth-first search computes discovery times and **low-links**, and two local criteria — $low[v] > disc[u]$ for bridges, $low[v] \\ge disc[u]$ for cut vertices — find them all in $O(V+E)$.",{"title":189,"path":190,"lessonNumber":116,"topics":191,"summary":192},"Lowest Common Ancestor & Binary Lifting","\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor",[153],"Given a rooted tree, the lowest common ancestor of $u$ and $v$ is the deepest node that is an ancestor of both. A naive walk answers one query in $O(h)$; **binary lifting** precomputes the $2^k$-th ancestor of every node in $O(n\\log n)$, then answers $k$-th-ancestor and LCA queries in $O(\\log n)$ each. We derive both jumps, apply them to tree distance, and compare against the Euler-tour + RMQ and Tarjan offline alternatives.",{"title":194,"path":195,"lessonNumber":196,"topics":197,"summary":198},"2-SAT via Implication Graphs","\u002Falgorithms\u002Fgraphs\u002Ftwo-sat",8,[153],"A boolean formula whose every clause has exactly two literals can be solved in _linear_ time — even though its three-literal cousin is NP-complete. The trick is to read each clause as a pair of implications, build a directed graph on the $2n$ literals, and ask a question we already know how to answer: which literals share a strongly connected component? The formula is satisfiable iff no variable lands in the same SCC as its own negation, and the SCCs' topological order hands us a satisfying assignment for free.",{"title":200,"path":201,"lessonNumber":202,"topics":203,"summary":204},"Eulerian Tours","\u002Falgorithms\u002Fgraphs\u002Feulerian-tours",9,[153],"An **Eulerian tour** uses every _edge_ of a graph exactly once. We give the exact parity and balance conditions under which one exists (even degree for undirected graphs, in-degree equal to out-degree for directed) and Hierholzer's $O(E)$ algorithm that constructs one by splicing closed sub-tours. We contrast this sharply with the **Hamiltonian** problem (visit every _vertex_ once), which is NP-complete: visiting edges is easy, visiting vertices is hard.",{"module":206,"moduleNumber":116,"slug":207,"lessons":208},"Greedy Algorithms","greedy",[209,214,220,225],{"title":210,"path":211,"lessonNumber":6,"topics":212,"summary":213},"The Greedy Method","\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method",[206],"A greedy algorithm builds a solution one locally-best choice at a time and never looks back. We pin down the two properties that make this work — the greedy-choice property and optimal substructure — prove the canonical activity-selection algorithm correct with an exchange argument, watch greedy fail spectacularly on the 0\u002F1 knapsack, and glimpse matroids as the theory that says exactly when greed is good.",{"title":215,"path":216,"lessonNumber":18,"topics":217,"summary":219},"Scheduling & Interval Partitioning","\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals",[218],"Greedy","Three classic scheduling problems all yield to greedy algorithms — and all three turn on a single design decision: which key to sort by. Interval scheduling sorts by **finish** time to pack the most compatible jobs; interval partitioning sorts by **start** time and proves the rooms needed equal the maximum overlap **depth**; minimizing maximum lateness sorts by **deadline** and is justified by an adjacent-swap exchange argument.",{"title":221,"path":222,"lessonNumber":24,"topics":223,"summary":224},"Huffman Codes","\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes",[206],"Huffman coding is the greedy method's most beautiful application: it builds a provably optimal prefix-free binary code by repeatedly merging the two least frequent symbols. We develop prefix-free codes as binary trees, give the algorithm with a priority queue, build a Huffman tree from example frequencies, prove optimality with the same greedy-choice-plus-substructure argument, and pin the running time at $O(n\\log n)$.",{"title":226,"path":227,"lessonNumber":73,"topics":228,"summary":229},"Matroids & Exchange Arguments","\u002Falgorithms\u002Fgreedy\u002Fmatroids",[218],"The capstone of the greedy module: _why_ and _when_ a greedy algorithm is provably optimal. We recap the two correctness templates — **greedy-stays-ahead** and the **exchange argument** — then meet the **matroid** $M=(S,\\mathcal{I})$, an abstraction whose **exchange property** is exactly the structure greedy needs. The matroid–greedy theorem says sorting by weight and taking what stays independent yields a maximum-weight basis _if and only if_ the structure is a matroid. Kruskal's MST is the canonical instance; 0\u002F1 knapsack and TSP are the canonical failures.",{"module":231,"moduleNumber":196,"slug":232,"lessons":233},"Dynamic Programming","dynamic-programming",[234,239,245,250,255,260,265,270,275,280],{"title":235,"path":236,"lessonNumber":6,"topics":237,"summary":238},"Principles of Dynamic Programming","\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples",[231,26],"Dynamic programming is recursion with memory: when a recursive solution re-solves the same subproblems again and again, we solve each one once and store the answer. We pin down the two structural conditions that make this work — overlapping subproblems and optimal substructure — contrast top-down memoization with bottom-up tabulation, and distil the whole method into a five-step recipe.",{"title":240,"path":241,"lessonNumber":18,"topics":242,"summary":244},"Sequence Alignment & LCS","\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp",[231,243],"String Structures","Two strings can be compared by asking how much of one survives inside the other. The longest common subsequence (LCS) and edit distance are the two classic answers, and they are the _same_ dynamic program wearing different costs. We derive the LCS recurrence by examining the last characters, fill a worked DP table, reconstruct the subsequence, and then show edit distance as the identical $\\Theta(mn)$ pattern.",{"title":246,"path":247,"lessonNumber":24,"topics":248,"summary":249},"Longest Increasing Subsequence","\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence",[231],"Given a sequence of numbers, how long is its longest strictly increasing subsequence? A first dynamic program indexes subproblems by the element each subsequence _ends at_, giving an $O(n^2)$ solution with parent-pointer reconstruction. A sharper idea, the patience-sorting _tails_ array searched by binary search, drops the time to $O(n\\log n)$. We then fold in the variants: non-decreasing, counting, Russian-doll envelopes, and bitonic.",{"title":251,"path":252,"lessonNumber":73,"topics":253,"summary":254},"Knapsack & Subset Problems","\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack",[231],"We start from $\\textsc{Subset-sum}$ — does some sublist hit a target $t$? — and its include\u002Fexclude recurrence over a boolean table $A(i, u)$, then bolt on values to get 0\u002F1 knapsack as the same machine with $\\lor$ promoted to $\\max$. We fill both tables, recover the chosen items, and confront the surprise that the $\\Theta(nt)$ running time is only _pseudo-polynomial_ — exponential in the bit length $b$, and unimprovable unless $\\mathrm{P}=\\mathrm{NP}$ since subset-sum is $\\textsc{NP-complete}$. The fractional variant reveals the sharp line between greedy and dynamic programming.",{"title":256,"path":257,"lessonNumber":102,"topics":258,"summary":259},"Coin Change & Unbounded Knapsack","\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded",[231],"The previous lesson let each item be taken at most once. Drop that cap — items may be reused _any number of times_ — and the 0\u002F1 knapsack collapses from a two-dimensional table to a one-dimensional one, because there is no longer a prefix of \"already-used\" items to track. We meet **unbounded knapsack**, then its most famous instance, **coin change**: the minimum-coins recurrence $C[a] = 1 + \\min_c C[a-c]$, and the counting variant where the _order of the loops_ decides whether you count unordered combinations or ordered sequences — the classic bug. Greed fails in general but works for canonical coin systems.",{"title":261,"path":262,"lessonNumber":108,"topics":263,"summary":264},"Interval DP","\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp",[231],"Many problems ask for the best way to combine a contiguous range of items, and the answer is a dynamic program over subintervals $[i,j]$ that chooses a split point $k$. We derive the pattern from matrix-chain multiplication — parenthesising a product to minimize scalar multiplications in $O(n^3)$ — distil it into a reusable template filled by increasing interval length, and then meet its sharpest variant: the \"last operation\" trick behind Burst Balloons and cutting a stick, where fixing the _last_ move (not the first) makes the two sides independent.",{"title":266,"path":267,"lessonNumber":116,"topics":268,"summary":269},"Dynamic Programming on Trees","\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp",[231],"When the subproblems of a dynamic program are _rooted subtrees_, a single post-order DFS solves the whole thing in $O(n)$: each node combines the already-computed answers of its children. We meet the archetype — maximum-weight independent set on a tree — then the \"path through a node\" pattern behind tree diameter and maximum path sum, and finally **rerooting**, which computes a per-node answer for _every_ node as root in $O(n)$ with two passes.",{"title":271,"path":272,"lessonNumber":196,"topics":273,"summary":274},"Bitmask DP","\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp",[231],"When a subproblem depends not on an index or a prefix but on _which subset_ of a small ground set has been used, we can encode that subset as the bits of an integer and index a DP table by it. With $n \\le \\sim 20$ the $2^n$ subsets fit in a table, turning $\\Theta(n!)$ brute force into $O(2^n \\cdot \\text{poly}(n))$. We meet the bit tricks, the Held–Karp TSP archetype, assignment by mask, subset-sum partitioning, and submask enumeration with its $3^n$ bound.",{"title":276,"path":277,"lessonNumber":202,"topics":278,"summary":279},"DP Optimizations","\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations",[231],"A correct DP recurrence is only half the battle; its naive evaluation is often a factor of $n$ slower than necessary. This capstone surveys five techniques, monotonic-queue, the convex hull trick, divide-and-conquer optimization, Knuth's optimization, and SOS DP, that each exploit _structure in the transition_ (a sliding window, linear costs, monotone optimal splits, the quadrangle inequality, or subset lattices) to shave an $O(n)$, $O(\\log n)$, or worse factor off the running time.",{"title":281,"path":282,"lessonNumber":283,"topics":284,"summary":285},"Dynamic Programming on Graphs","\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs",10,[231],"Many graph algorithms are dynamic programs in disguise: the subproblem is the _best value reachable under a restricted resource_ — intermediate vertices allowed, edges allowed, or a topological prefix — and edge _relaxation_ is the DP transition. We frame Floyd–Warshall as the archetype ($O(V^3)$ all-pairs shortest paths), Bellman–Ford as a DP over path length (the at-most-$K$-stops variant), DAG-DP in topological order ($O(V+E)$), and Warshall's transitive closure as the boolean analog.",{"module":287,"moduleNumber":202,"slug":288,"lessons":289},"Backtracking & Search","backtracking",[290,296,301],{"title":291,"path":292,"lessonNumber":6,"topics":293,"summary":295},"Backtracking: Subsets, Permutations & Combinations","\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals",[294],"Backtracking","Backtracking builds a solution one choice at a time and abandons a partial solution the moment it cannot be completed, exploring a state-space tree by depth-first search. We meet the universal choose\u002Fexplore\u002Fun-choose template, derive the canonical enumerations — subsets ($2^n$), permutations ($n!$), and combinations ($\\binom{n}{k}$) — handle duplicate elements by skipping equal siblings, and see how pruning turns an exponential search into a tractable one.",{"title":297,"path":298,"lessonNumber":18,"topics":299,"summary":300},"Constraint Search: N-Queens & Sudoku","\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search",[294],"Many hard puzzles are **constraint satisfaction problems**: assign each variable a value from its domain so that every constraint holds. Backtracking solves them by assigning variables one at a time and rejecting a partial assignment the instant a constraint breaks. We make the rejection cheap — $O(1)$ conflict checks for N-Queens via column and diagonal sets — and prune harder with **forward checking**, **MRV** ordering, and **constraint propagation**, which is what lets an exponential search actually finish.",{"title":302,"path":303,"lessonNumber":24,"topics":304,"summary":305},"Branch & Bound and Meet in the Middle","\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound",[294],"Plain backtracking prunes a search tree by _feasibility_; for _optimization_ problems we can prune far more aggressively by _value_. **Branch and bound** keeps the best complete solution found so far and discards any partial solution whose optimistic bound cannot beat it. **Meet in the middle** splits the instance in two, enumerates each half, and recombines by binary search — turning $2^n$ into $O(2^{n\u002F2}\\,n)$ and pushing exact search out to $n \\approx 40$.",{"module":307,"moduleNumber":283,"slug":308,"lessons":309},"Mathematical Algorithms","mathematical-algorithms",[310,316,321,326],{"title":311,"path":312,"lessonNumber":6,"topics":313,"summary":315},"Number Theory: GCD & Modular Arithmetic","\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics",[314],"Number Theory","This lesson opens the mathematical-algorithms module with the bedrock of computational number theory. We prove Euclid's recurrence $\\gcd(a,b)=\\gcd(b,\\,a\\bmod b)$ and its $O(\\log\\min(a,b))$ running time, extend it to recover Bézout coefficients $x,y$ with $ax+by=\\gcd(a,b)$, and build modular arithmetic on residue classes — including when a modular inverse $a^{-1}\\bmod m$ exists and how to compute it.",{"title":317,"path":318,"lessonNumber":18,"topics":319,"summary":320},"Modular Exponentiation & Primality","\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality",[314],"Computing $a^n \\bmod m$ naively costs $n$ multiplications; **repeated squaring** does it in $O(\\log n)$ by reading the bits of the exponent. We use this routine to state **Fermat's little theorem** (and the modular inverse it gives), then to test primality — trial division, the probabilistic **Fermat** and **Miller–Rabin** tests, and the deterministic witness set that settles primality for every 64-bit number.",{"title":322,"path":323,"lessonNumber":24,"topics":324,"summary":325},"Sieves & Factorization","\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization",[314],"The previous lesson tested one number for primality; here we ask for _all_ primes up to $n$ at once. The **sieve of Eratosthenes** cross-cuts composites in $O(n\\log\\log n)$, and a **linear sieve** does it in $O(n)$ while recording each number's **smallest prime factor**, which then factors any $x \\le n$ in $O(\\log x)$. From a factorization $x = \\prod p_i^{e_i}$ the multiplicative functions $\\tau$, $\\sigma$, and Euler's totient $\\varphi$ fall out immediately.",{"title":327,"path":328,"lessonNumber":73,"topics":329,"summary":330},"Combinatorics & Counting","\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics",[314],"Counting is the arithmetic of finite sets. We build up from permutations $n!$ and combinations $\\binom{n}{k}$, prove Pascal's rule by a bijection, and count multisets with stars and bars. The practical core is computing $\\binom{n}{k}\\bmod p$ in $O(1)$ from precomputed factorials and inverse factorials. We close with inclusion–exclusion and the Chinese Remainder Theorem, both of which lean on the modular inverse from the previous lesson.",{"module":332,"moduleNumber":333,"slug":334,"lessons":335},"Computational Geometry",11,"computational-geometry",[336,342,347],{"title":337,"path":338,"lessonNumber":6,"topics":339,"summary":341},"Geometric Primitives & Orientation","\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives",[340],"Geometry","Computational geometry is built on a single reliable primitive — the **orientation test**, a sign of a cross product that tells whether three points turn left, right, or lie collinear. From points-as-vectors and the dot and cross products we derive orientation, segment intersection, the shoelace area formula, and point-in-polygon tests, keeping all arithmetic **exact and integer** so that no floating-point rounding can corrupt a sign.",{"title":343,"path":344,"lessonNumber":18,"topics":345,"summary":346},"Convex Hull","\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull",[340],"The convex hull is the smallest convex polygon enclosing a point set — the rubber band snapped around the nails. We build it with Andrew's monotone chain, sorting by $(x,y)$ and sweeping a lower and upper hull while popping any non-left turn via the orientation primitive, in $O(n\\log n)$. A reduction from sorting shows that bound is optimal, and the hull unlocks diameter, smallest enclosing rectangle, and more through rotating calipers.",{"title":348,"path":349,"lessonNumber":24,"topics":350,"summary":351},"Sweep-Line Algorithms","\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line",[340],"The plane-sweep paradigm turns a static $2$-D geometry problem into a dynamic $1$-D ordered-set problem: a vertical line sweeps left to right, stopping at an $x$-sorted **event queue** while a balanced-BST **status structure** tracks the objects it currently crosses, ordered by $y$. We derive Bentley–Ottmann segment intersection in $O((n+k)\\log n)$, recover closest-pair in $O(n\\log n)$, and reduce skyline, rectangle-area, and overlap problems to $\\pm1$ event sweeps.",{"module":353,"moduleNumber":354,"slug":355,"lessons":356},"Intractability",12,"intractability",[357,363,367],{"title":358,"path":359,"lessonNumber":6,"topics":360,"summary":362},"P, NP, and Reductions","\u002Falgorithms\u002Fintractability\u002Fp-np-reductions",[361],"NP-Completeness","Most problems we have met so far have fast algorithms. A vast and important family seemingly does not. This lesson builds the vocabulary for that divide: decision problems, the class $\\mathsf{P}$ of problems we can solve quickly, the class $\\mathsf{NP}$ of problems whose solutions we can _check_ quickly, and polynomial-time reductions, the tool that lets us compare the difficulty of two problems without solving either.",{"title":361,"path":364,"lessonNumber":18,"topics":365,"summary":366},"\u002Falgorithms\u002Fintractability\u002Fnp-completeness",[361],"Some problems in $\\mathsf{NP}$ are universally hardest: every other problem in $\\mathsf{NP}$ reduces to them. This lesson defines $\\mathsf{NP}$-hard and $\\mathsf{NP}$-complete, states the Cook–Levin theorem that anchors the whole edifice on **SAT**, walks the web of reductions that grows from it, and gives the four-step recipe for proving a brand-new problem $\\mathsf{NP}$-complete.",{"title":368,"path":369,"lessonNumber":24,"topics":370,"summary":373},"Coping with NP-Hardness","\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness",[371,372],"Approximation","Heuristics","Proving a problem $\\mathsf{NP}$-hard is the beginning, not the end. The world still needs answers. This lesson surveys the four honest responses to hardness: approximation algorithms with a provable ratio (worked through a 2-approximation for vertex cover), heuristics and local search, exact exponential methods like branch and bound, and exploiting special structure in the instances you actually face.",{"id":375,"title":142,"blurb":376,"body":377,"description":9532,"extension":9533,"meta":9534,"module":121,"navigation":9536,"path":143,"practice":9537,"rawbody":9553,"readingTime":9554,"seo":9559,"sources":9560,"status":9567,"stem":9568,"summary":146,"topics":9569,"__hash__":9570},"course\u002F01.algorithms\u002F05.sequences\u002F04.string-matching.md","",{"type":378,"value":379,"toc":9522},"minimark",[380,790,830,835,838,883,1231,1306,1745,1749,2129,2270,2528,2716,3182,3236,3317,3761,3780,3784,4194,4205,4386,4799,5229,5381,5431,5491,5540,5897,5928,5933,6014,6387,6391,6394,6686,6894,7192,7862,7917,8011,8431,8501,8505,9330,9518],[381,382,383,384,388,389,393,394,477,478,537,538,555,556,573,574,589,590,605,606,621,622,720,721,773,774,789],"p",{},"We have spent the previous lessons treating a sequence as a bag of comparable\nkeys. A string is more rigid: its characters come in a fixed order and that order\n",[385,386,387],"em",{},"is"," the information. The fundamental question is ",[390,391,392],"strong",{},"string matching",": given a\ntext ",[395,396,399],"span",{"className":397},[398],"katex",[395,400,404,462],{"className":401,"ariaHidden":403},[402],"katex-html","true",[395,405,408,413,420,425,429,434,443,446,450,454,459],{"className":406},[407],"base",[395,409],{"className":410,"style":412},[411],"strut","height:1em;vertical-align:-0.25em;",[395,414,419],{"className":415,"style":418},[416,417],"mord","mathnormal","margin-right:0.1389em;","T",[395,421,424],{"className":422},[423],"mopen","[",[395,426,428],{"className":427},[416],"0",[395,430],{"className":431,"style":433},[432],"mspace","margin-right:0.1667em;",[395,435,438],{"className":436},[437],"minner",[395,439,442],{"className":440},[441],"mpunct","..",[395,444],{"className":445,"style":433},[432],[395,447,449],{"className":448},[416,417],"n",[395,451],{"className":452,"style":453},[432],"margin-right:0.2222em;",[395,455,458],{"className":456},[457],"mbin","−",[395,460],{"className":461,"style":453},[432],[395,463,465,468,472],{"className":464},[407],[395,466],{"className":467,"style":412},[411],[395,469,471],{"className":470},[416],"1",[395,473,476],{"className":474},[475],"mclose","]"," and a pattern ",[395,479,481],{"className":480},[398],[395,482,484,525],{"className":483,"ariaHidden":403},[402],[395,485,487,490,494,497,500,503,509,512,516,519,522],{"className":486},[407],[395,488],{"className":489,"style":412},[411],[395,491,493],{"className":492,"style":418},[416,417],"P",[395,495,424],{"className":496},[423],[395,498,428],{"className":499},[416],[395,501],{"className":502,"style":433},[432],[395,504,506],{"className":505},[437],[395,507,442],{"className":508},[441],[395,510],{"className":511,"style":433},[432],[395,513,515],{"className":514},[416,417],"m",[395,517],{"className":518,"style":453},[432],[395,520,458],{"className":521},[457],[395,523],{"className":524,"style":453},[432],[395,526,528,531,534],{"className":527},[407],[395,529],{"className":530,"style":412},[411],[395,532,471],{"className":533},[416],[395,535,476],{"className":536},[475]," over some alphabet ",[395,539,541],{"className":540},[398],[395,542,544],{"className":543,"ariaHidden":403},[402],[395,545,547,551],{"className":546},[407],[395,548],{"className":549,"style":550},[411],"height:0.6833em;",[395,552,554],{"className":553},[416],"Σ",",\nreport every shift ",[395,557,559],{"className":558},[398],[395,560,562],{"className":561,"ariaHidden":403},[402],[395,563,565,569],{"className":564},[407],[395,566],{"className":567,"style":568},[411],"height:0.4306em;",[395,570,572],{"className":571},[416,417],"s"," such that ",[395,575,577],{"className":576},[398],[395,578,580],{"className":579,"ariaHidden":403},[402],[395,581,583,586],{"className":582},[407],[395,584],{"className":585,"style":550},[411],[395,587,493],{"className":588,"style":418},[416,417]," occurs in ",[395,591,593],{"className":592},[398],[395,594,596],{"className":595,"ariaHidden":403},[402],[395,597,599,602],{"className":598},[407],[395,600],{"className":601,"style":550},[411],[395,603,419],{"className":604,"style":418},[416,417]," starting at position ",[395,607,609],{"className":608},[398],[395,610,612],{"className":611,"ariaHidden":403},[402],[395,613,615,618],{"className":614},[407],[395,616],{"className":617,"style":568},[411],[395,619,572],{"className":620},[416,417],", i.e.\n",[395,623,625],{"className":624},[398],[395,626,628,668,687,711],{"className":627,"ariaHidden":403},[402],[395,629,631,634,637,640,643,646,652,655,658,661,665],{"className":630},[407],[395,632],{"className":633,"style":412},[411],[395,635,419],{"className":636,"style":418},[416,417],[395,638,424],{"className":639},[423],[395,641,572],{"className":642},[416,417],[395,644],{"className":645,"style":433},[432],[395,647,649],{"className":648},[437],[395,650,442],{"className":651},[441],[395,653],{"className":654,"style":433},[432],[395,656,572],{"className":657},[416,417],[395,659],{"className":660,"style":453},[432],[395,662,664],{"className":663},[457],"+",[395,666],{"className":667,"style":453},[432],[395,669,671,675,678,681,684],{"className":670},[407],[395,672],{"className":673,"style":674},[411],"height:0.6667em;vertical-align:-0.0833em;",[395,676,515],{"className":677},[416,417],[395,679],{"className":680,"style":453},[432],[395,682,458],{"className":683},[457],[395,685],{"className":686,"style":453},[432],[395,688,690,693,696,699,703,708],{"className":689},[407],[395,691],{"className":692,"style":412},[411],[395,694,471],{"className":695},[416],[395,697,476],{"className":698},[475],[395,700],{"className":701,"style":702},[432],"margin-right:0.2778em;",[395,704,707],{"className":705},[706],"mrel","=",[395,709],{"className":710,"style":702},[432],[395,712,714,717],{"className":713},[407],[395,715],{"className":716,"style":550},[411],[395,718,493],{"className":719,"style":418},[416,417],". There are ",[395,722,724],{"className":723},[398],[395,725,727,745,763],{"className":726,"ariaHidden":403},[402],[395,728,730,733,736,739,742],{"className":729},[407],[395,731],{"className":732,"style":674},[411],[395,734,449],{"className":735},[416,417],[395,737],{"className":738,"style":453},[432],[395,740,458],{"className":741},[457],[395,743],{"className":744,"style":453},[432],[395,746,748,751,754,757,760],{"className":747},[407],[395,749],{"className":750,"style":674},[411],[395,752,515],{"className":753},[416,417],[395,755],{"className":756,"style":453},[432],[395,758,664],{"className":759},[457],[395,761],{"className":762,"style":453},[432],[395,764,766,770],{"className":765},[407],[395,767],{"className":768,"style":769},[411],"height:0.6444em;",[395,771,471],{"className":772},[416]," candidate shifts, and the art is to\ntest them without paying ",[395,775,777],{"className":776},[398],[395,778,780],{"className":779,"ariaHidden":403},[402],[395,781,783,786],{"className":782},[407],[395,784],{"className":785,"style":568},[411],[395,787,515],{"className":788},[416,417]," comparisons apiece.",[381,791,792,793,808,809,824,825,829],{},"The naive answer does pay that price. The three algorithms in this lesson each\nremove the redundancy in a different way: Rabin–Karp replaces a length-",[395,794,796],{"className":795},[398],[395,797,799],{"className":798,"ariaHidden":403},[402],[395,800,802,805],{"className":801},[407],[395,803],{"className":804,"style":568},[411],[395,806,515],{"className":807},[416,417],"\ncomparison by a length-",[395,810,812],{"className":811},[398],[395,813,815],{"className":814,"ariaHidden":403},[402],[395,816,818,821],{"className":817},[407],[395,819],{"className":820,"style":769},[411],[395,822,471],{"className":823},[416]," hash update, KMP remembers what a partial match already\ntold us so it never backs up over the text, and the Z-function computes a global\n",[826,827,828],"q",{},"longest prefix-match"," array that subsumes both.",[831,832,834],"h2",{"id":833},"the-naive-scan-and-why-it-wastes-work","The naive scan, and why it wastes work",[381,836,837],{},"Try every alignment; at each, compare characters until one disagrees or the whole\npattern matches.",[839,840,844],"pre",{"className":841,"code":842,"language":843,"meta":376,"style":376},"language-algorithm shiki shiki-themes Vesper Light - Orange Boost (Quick Open Adjusted) vesper","caption: $\\textsc{Naive-Match}(T, P)$ — test all $n-m+1$ alignments\nfor $s \\gets 0$ to $n - m$ do\n  $j \\gets 0$\n  while $j \u003C m$ and $T[s + j] = P[j]$ do\n    $j \\gets j + 1$\n  if $j = m$ then\n    report occurrence at shift $s$\n","algorithm",[845,846,847,853,858,863,868,873,878],"code",{"__ignoreMap":376},[395,848,850],{"class":849,"line":6},"line",[395,851,852],{},"caption: $\\textsc{Naive-Match}(T, P)$ — test all $n-m+1$ alignments\n",[395,854,855],{"class":849,"line":18},[395,856,857],{},"for $s \\gets 0$ to $n - m$ do\n",[395,859,860],{"class":849,"line":24},[395,861,862],{},"  $j \\gets 0$\n",[395,864,865],{"class":849,"line":73},[395,866,867],{},"  while $j \u003C m$ and $T[s + j] = P[j]$ do\n",[395,869,870],{"class":849,"line":102},[395,871,872],{},"    $j \\gets j + 1$\n",[395,874,875],{"class":849,"line":108},[395,876,877],{},"  if $j = m$ then\n",[395,879,880],{"class":849,"line":116},[395,881,882],{},"    report occurrence at shift $s$\n",[381,884,885,886,937,938,953,954,1057,1058,1097,1098,1136,1137,1170,1171,1195,1196,1211,1212,1222,1223,1226,1227,1230],{},"The outer loop runs ",[395,887,889],{"className":888},[398],[395,890,892,910,928],{"className":891,"ariaHidden":403},[402],[395,893,895,898,901,904,907],{"className":894},[407],[395,896],{"className":897,"style":674},[411],[395,899,449],{"className":900},[416,417],[395,902],{"className":903,"style":453},[432],[395,905,458],{"className":906},[457],[395,908],{"className":909,"style":453},[432],[395,911,913,916,919,922,925],{"className":912},[407],[395,914],{"className":915,"style":674},[411],[395,917,515],{"className":918},[416,417],[395,920],{"className":921,"style":453},[432],[395,923,664],{"className":924},[457],[395,926],{"className":927,"style":453},[432],[395,929,931,934],{"className":930},[407],[395,932],{"className":933,"style":769},[411],[395,935,471],{"className":936},[416]," times and the inner loop up to ",[395,939,941],{"className":940},[398],[395,942,944],{"className":943,"ariaHidden":403},[402],[395,945,947,950],{"className":946},[407],[395,948],{"className":949,"style":568},[411],[395,951,515],{"className":952},[416,417],", so the worst\ncase is ",[395,955,957],{"className":956},[398],[395,958,960,986,1004,1035],{"className":959,"ariaHidden":403},[402],[395,961,963,966,970,974,977,980,983],{"className":962},[407],[395,964],{"className":965,"style":412},[411],[395,967,969],{"className":968},[416],"Θ",[395,971,973],{"className":972},[423],"((",[395,975,449],{"className":976},[416,417],[395,978],{"className":979,"style":453},[432],[395,981,458],{"className":982},[457],[395,984],{"className":985,"style":453},[432],[395,987,989,992,995,998,1001],{"className":988},[407],[395,990],{"className":991,"style":674},[411],[395,993,515],{"className":994},[416,417],[395,996],{"className":997,"style":453},[432],[395,999,664],{"className":1000},[457],[395,1002],{"className":1003,"style":453},[432],[395,1005,1007,1010,1013,1017,1020,1023,1026,1029,1032],{"className":1006},[407],[395,1008],{"className":1009,"style":412},[411],[395,1011,471],{"className":1012},[416],[395,1014,1016],{"className":1015},[475],")",[395,1018],{"className":1019,"style":433},[432],[395,1021,515],{"className":1022},[416,417],[395,1024,1016],{"className":1025},[475],[395,1027],{"className":1028,"style":702},[432],[395,1030,707],{"className":1031},[706],[395,1033],{"className":1034,"style":702},[432],[395,1036,1038,1041,1046,1050,1054],{"className":1037},[407],[395,1039],{"className":1040,"style":412},[411],[395,1042,1045],{"className":1043,"style":1044},[416,417],"margin-right:0.0278em;","O",[395,1047,1049],{"className":1048},[423],"(",[395,1051,1053],{"className":1052},[416,417],"nm",[395,1055,1016],{"className":1056},[475],", realized by ",[395,1059,1061],{"className":1060},[398],[395,1062,1064,1082],{"className":1063,"ariaHidden":403},[402],[395,1065,1067,1070,1073,1076,1079],{"className":1066},[407],[395,1068],{"className":1069,"style":550},[411],[395,1071,419],{"className":1072,"style":418},[416,417],[395,1074],{"className":1075,"style":702},[432],[395,1077,707],{"className":1078},[706],[395,1080],{"className":1081,"style":702},[432],[395,1083,1085,1088],{"className":1084},[407],[395,1086],{"className":1087,"style":568},[411],[395,1089,1092],{"className":1090},[416,1091],"text",[395,1093,1096],{"className":1094},[416,1095],"texttt","aaaa...a"," and\n",[395,1099,1101],{"className":1100},[398],[395,1102,1104,1122],{"className":1103,"ariaHidden":403},[402],[395,1105,1107,1110,1113,1116,1119],{"className":1106},[407],[395,1108],{"className":1109,"style":550},[411],[395,1111,493],{"className":1112,"style":418},[416,417],[395,1114],{"className":1115,"style":702},[432],[395,1117,707],{"className":1118},[706],[395,1120],{"className":1121,"style":702},[432],[395,1123,1125,1129],{"className":1124},[407],[395,1126],{"className":1127,"style":1128},[411],"height:0.6111em;",[395,1130,1132],{"className":1131},[416,1091],[395,1133,1135],{"className":1134},[416,1095],"aaa...ab",", where every alignment matches ",[395,1138,1140],{"className":1139},[398],[395,1141,1143,1161],{"className":1142,"ariaHidden":403},[402],[395,1144,1146,1149,1152,1155,1158],{"className":1145},[407],[395,1147],{"className":1148,"style":674},[411],[395,1150,515],{"className":1151},[416,417],[395,1153],{"className":1154,"style":453},[432],[395,1156,458],{"className":1157},[457],[395,1159],{"className":1160,"style":453},[432],[395,1162,1164,1167],{"className":1163},[407],[395,1165],{"className":1166,"style":769},[411],[395,1168,471],{"className":1169},[416]," characters before\nfailing. On random or low-repetition text the inner loop almost always dies on\nthe first character, so naive matching averages ",[395,1172,1174],{"className":1173},[398],[395,1175,1177],{"className":1176,"ariaHidden":403},[402],[395,1178,1180,1183,1186,1189,1192],{"className":1179},[407],[395,1181],{"className":1182,"style":412},[411],[395,1184,1045],{"className":1185,"style":1044},[416,417],[395,1187,1049],{"className":1188},[423],[395,1190,449],{"className":1191},[416,417],[395,1193,1016],{"className":1194},[475]," and is the right\ntool when ",[395,1197,1199],{"className":1198},[398],[395,1200,1202],{"className":1201,"ariaHidden":403},[402],[395,1203,1205,1208],{"className":1204},[407],[395,1206],{"className":1207,"style":568},[411],[395,1209,515],{"className":1210},[416,417]," is tiny or the text is unstructured.",[1213,1214,1215],"sup",{},[1216,1217,471],"a",{"href":1218,"ariaDescribedBy":1219,"dataFootnoteRef":376,"id":1221},"#user-content-fn-clrs-naive",[1220],"footnote-label","user-content-fnref-clrs-naive"," The pathology is\n",[385,1224,1225],{},"repetitive"," patterns, and the cure is to stop discarding what a partial match\nrevealed. The ",[1216,1228,1229],{"href":17},"asymptotic"," gap\nbetween the worst and average cases is exactly what the next three algorithms\nclose.",[1232,1233,1235],"callout",{"type":1234},"note",[381,1236,1237,1240,1241,1278,1279,1282,1283,1298,1299,1302,1303,1305],{},[390,1238,1239],{},"Intuition."," When ",[395,1242,1244],{"className":1243},[398],[395,1245,1247,1265],{"className":1246,"ariaHidden":403},[402],[395,1248,1250,1253,1256,1259,1262],{"className":1249},[407],[395,1251],{"className":1252,"style":550},[411],[395,1254,493],{"className":1255,"style":418},[416,417],[395,1257],{"className":1258,"style":702},[432],[395,1260,707],{"className":1261},[706],[395,1263],{"className":1264,"style":702},[432],[395,1266,1268,1271],{"className":1267},[407],[395,1269],{"className":1270,"style":1128},[411],[395,1272,1274],{"className":1273},[416,1091],[395,1275,1277],{"className":1276},[416,1095],"ABABAC"," matches ",[845,1280,1281],{},"ABABA"," of the text and then\nfails on the sixth character, the naive scan slides ",[395,1284,1286],{"className":1285},[398],[395,1287,1289],{"className":1288,"ariaHidden":403},[402],[395,1290,1292,1295],{"className":1291},[407],[395,1293],{"className":1294,"style":550},[411],[395,1296,493],{"className":1297,"style":418},[416,417]," forward by one and\nre-examines those same text characters. But we already ",[385,1300,1301],{},"know"," those characters —\nthey were ",[845,1304,1281],{},". The faster algorithms exploit the pattern's internal\nstructure so that this re-reading never happens.",[1307,1308,1312,1609],"figure",{"className":1309},[1310,1311],"tikz-figure","tikz-diagram-rendered",[1313,1314,1319],"svg",{"xmlns":1315,"width":1316,"height":1317,"viewBox":1318},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","350.082","138.052","-75 -75 262.562 103.539",[1320,1321,1324,1329,1338,1341,1347,1350,1356,1359,1365,1368,1374,1377,1384,1392,1404,1415,1429,1451,1462,1473,1484,1503,1514,1525,1536,1555],"g",{"stroke":1322,"style":1323},"currentColor","stroke-miterlimit:10;stroke-width:.4",[1325,1326],"path",{"fill":1327,"d":1328},"none","M-39.225-52.153h19.916V-72.07h-19.916Z",[1320,1330,1332],{"transform":1331},"translate(-2.45 1.937)",[1325,1333],{"d":1334,"fill":1322,"stroke":1322,"className":1335,"style":1337},"M-27.645-62.011Q-28.041-62.011-28.327-62.215Q-28.612-62.420-28.759-62.754Q-28.907-63.088-28.907-63.479Q-28.907-63.914-28.733-64.375Q-28.559-64.837-28.247-65.228Q-27.935-65.619-27.525-65.854Q-27.114-66.089-26.674-66.089Q-26.406-66.089-26.189-65.951Q-25.971-65.812-25.839-65.566Q-25.800-65.716-25.692-65.812Q-25.584-65.909-25.444-65.909Q-25.321-65.909-25.237-65.836Q-25.154-65.764-25.154-65.641Q-25.154-65.588-25.163-65.557L-25.782-63.066Q-25.839-62.868-25.839-62.670Q-25.839-62.275-25.576-62.275Q-25.290-62.275-25.156-62.598Q-25.022-62.921-24.903-63.426Q-24.894-63.457-24.870-63.481Q-24.846-63.505-24.811-63.505L-24.705-63.505Q-24.657-63.505-24.635-63.472Q-24.613-63.439-24.613-63.391Q-24.727-62.960-24.818-62.707Q-24.908-62.455-25.101-62.233Q-25.294-62.011-25.593-62.011Q-25.901-62.011-26.149-62.182Q-26.397-62.354-26.468-62.644Q-26.723-62.358-27.019-62.185Q-27.316-62.011-27.645-62.011M-27.628-62.275Q-27.298-62.275-26.988-62.516Q-26.679-62.758-26.468-63.074Q-26.459-63.083-26.459-63.101L-25.962-65.065Q-26.019-65.382-26.211-65.606Q-26.402-65.830-26.692-65.830Q-27.061-65.830-27.360-65.511Q-27.659-65.193-27.826-64.784Q-27.962-64.437-28.087-63.927Q-28.212-63.417-28.212-63.092Q-28.212-62.767-28.074-62.521Q-27.935-62.275-27.628-62.275",[1336],"tikz-text","stroke-width:0.270",[1325,1339],{"fill":1327,"d":1340},"M-19.308-52.153H.608V-72.07h-19.916Z",[1320,1342,1344],{"transform":1343},"translate(17.467 1.937)",[1325,1345],{"d":1334,"fill":1322,"stroke":1322,"className":1346,"style":1337},[1336],[1325,1348],{"fill":1327,"d":1349},"M.608-52.153h19.917V-72.07H.608Z",[1320,1351,1353],{"transform":1352},"translate(37.384 1.937)",[1325,1354],{"d":1334,"fill":1322,"stroke":1322,"className":1355,"style":1337},[1336],[1325,1357],{"fill":1327,"d":1358},"M20.525-52.153h19.917V-72.07H20.525Z",[1320,1360,1362],{"transform":1361},"translate(57.3 1.937)",[1325,1363],{"d":1334,"fill":1322,"stroke":1322,"className":1364,"style":1337},[1336],[1325,1366],{"fill":1327,"d":1367},"M40.442-52.153H60.36V-72.07H40.442Z",[1320,1369,1371],{"transform":1370},"translate(77.218 1.937)",[1325,1372],{"d":1334,"fill":1322,"stroke":1322,"className":1373,"style":1337},[1336],[1325,1375],{"fill":1327,"d":1376},"M60.36-52.153h19.916V-72.07H60.36Z",[1320,1378,1380],{"transform":1379},"translate(97.603 3.125)",[1325,1381],{"d":1382,"fill":1322,"stroke":1322,"className":1383,"style":1337},"M-27.645-62.011Q-28.221-62.011-28.542-62.442Q-28.863-62.872-28.863-63.452Q-28.863-63.857-28.779-64.085L-27.900-67.583Q-27.865-67.733-27.865-67.807Q-27.865-67.944-28.432-67.944Q-28.529-67.944-28.529-68.062Q-28.529-68.119-28.498-68.190Q-28.467-68.260-28.401-68.260L-27.180-68.357Q-27.127-68.357-27.094-68.328Q-27.061-68.299-27.061-68.251L-27.061-68.216L-27.720-65.606Q-27.197-66.089-26.674-66.089Q-26.288-66.089-25.997-65.885Q-25.707-65.680-25.560-65.346Q-25.413-65.012-25.413-64.621Q-25.413-64.037-25.716-63.428Q-26.019-62.820-26.540-62.415Q-27.061-62.011-27.645-62.011M-27.628-62.275Q-27.259-62.275-26.955-62.598Q-26.652-62.921-26.494-63.316Q-26.349-63.672-26.228-64.180Q-26.107-64.687-26.107-65.008Q-26.107-65.333-26.252-65.581Q-26.397-65.830-26.692-65.830Q-27.294-65.830-27.865-65.030L-28.107-64.037Q-28.252-63.413-28.252-63.149Q-28.252-62.806-28.100-62.540Q-27.949-62.275-27.628-62.275",[1336],[1320,1385,1387],{"transform":1386},"translate(-28.356 2.733)",[1325,1388],{"d":1389,"fill":1322,"stroke":1322,"className":1390,"style":1391},"M-28.708-62.241L-28.681-62.342Q-28.638-62.401-28.587-62.409Q-27.892-62.409-27.673-62.456Q-27.494-62.503-27.451-62.714L-26.372-67.034Q-26.329-67.206-26.329-67.233Q-26.329-67.280-26.579-67.280L-27.115-67.280Q-27.673-67.280-27.970-67.126Q-28.267-66.971-28.419-66.688Q-28.572-66.405-28.779-65.799Q-28.822-65.737-28.876-65.729L-28.954-65.729Q-29.052-65.757-29.052-65.839Q-29.052-65.846-29.044-65.889L-28.482-67.510Q-28.451-67.565-28.388-67.577L-23.388-67.577Q-23.290-67.549-23.290-67.456L-23.533-65.831Q-23.552-65.753-23.634-65.729L-23.716-65.729Q-23.810-65.757-23.810-65.854Q-23.740-66.405-23.732-66.624Q-23.732-67.053-23.966-67.167Q-24.201-67.280-24.701-67.280L-25.228-67.280Q-25.400-67.280-25.462-67.266Q-25.525-67.253-25.558-67.194Q-25.591-67.135-25.634-66.975L-26.716-62.655Q-26.724-62.624-26.724-62.569Q-26.724-62.518-26.704-62.493Q-26.685-62.467-26.634-62.448Q-26.427-62.409-25.763-62.409Q-25.665-62.378-25.665-62.288L-25.693-62.182Q-25.724-62.124-25.787-62.112L-28.611-62.112Q-28.646-62.112-28.677-62.153Q-28.708-62.194-28.708-62.241",[1336],"stroke-width:0.240",[1320,1393,1395,1398],{"fill":1394},"var(--tk-soft-accent)",[1325,1396],{"d":1397},"M-39.225-26.546h19.916v-19.917h-19.916Z",[1320,1399,1401],{"transform":1400},"translate(-2.45 27.545)",[1325,1402],{"d":1334,"fill":1322,"stroke":1322,"className":1403,"style":1337},[1336],[1320,1405,1406,1409],{"fill":1394},[1325,1407],{"d":1408},"M-19.308-26.546H.608v-19.917h-19.916Z",[1320,1410,1412],{"transform":1411},"translate(17.467 27.545)",[1325,1413],{"d":1334,"fill":1322,"stroke":1322,"className":1414,"style":1337},[1336],[1320,1416,1420,1423],{"fill":1417,"stroke":1418,"style":1419},"var(--tk-soft-warn)","var(--tk-warn)","stroke-width:1.2",[1325,1421],{"d":1422},"M.608-26.546h19.917v-19.917H.608Z",[1320,1424,1426],{"transform":1425},"translate(37.852 28.732)",[1325,1427],{"d":1382,"fill":1322,"stroke":1322,"className":1428,"style":1337},[1336],[1320,1430,1432,1439,1445],{"stroke":1327,"fontSize":1431},"8",[1320,1433,1435],{"transform":1434},"translate(-33.003 28.185)",[1325,1436],{"d":1437,"fill":1322,"stroke":1322,"className":1438,"style":1391},"M-28.474-62.592Q-28.259-62.288-27.595-62.288Q-27.165-62.288-26.808-62.489Q-26.451-62.690-26.451-63.089Q-26.451-63.292-26.611-63.415Q-26.771-63.538-26.978-63.577L-27.443-63.663Q-27.759-63.733-27.974-63.940Q-28.189-64.147-28.189-64.456Q-28.189-64.819-27.984-65.091Q-27.779-65.362-27.449-65.501Q-27.119-65.639-26.763-65.639Q-26.376-65.639-26.066-65.471Q-25.755-65.303-25.755-64.952Q-25.755-64.760-25.861-64.620Q-25.966-64.479-26.154-64.479Q-26.263-64.479-26.345-64.551Q-26.427-64.624-26.427-64.737Q-26.427-64.882-26.329-64.991Q-26.232-65.100-26.091-65.120Q-26.181-65.264-26.372-65.325Q-26.564-65.385-26.779-65.385Q-27.111-65.385-27.384-65.214Q-27.658-65.042-27.658-64.729Q-27.658-64.573-27.546-64.479Q-27.435-64.385-27.259-64.342L-26.802-64.257Q-26.427-64.186-26.175-63.954Q-25.923-63.721-25.923-63.358Q-25.923-63.085-26.068-62.817Q-26.212-62.550-26.451-62.370Q-26.927-62.034-27.611-62.034Q-27.888-62.034-28.169-62.106Q-28.451-62.178-28.642-62.352Q-28.833-62.526-28.833-62.807Q-28.833-63.030-28.704-63.194Q-28.576-63.358-28.357-63.358Q-28.212-63.358-28.124-63.276Q-28.037-63.194-28.037-63.057Q-28.037-62.878-28.167-62.735Q-28.298-62.592-28.474-62.592",[1336],[1320,1440,1441],{"transform":1434},[1325,1442],{"d":1443,"fill":1322,"stroke":1322,"className":1444,"style":1391},"M-19.375-63.089L-24.688-63.089Q-24.766-63.096-24.815-63.145Q-24.863-63.194-24.863-63.272Q-24.863-63.342-24.816-63.393Q-24.770-63.444-24.688-63.456L-19.375-63.456Q-19.301-63.444-19.254-63.393Q-19.207-63.342-19.207-63.272Q-19.207-63.194-19.256-63.145Q-19.305-63.096-19.375-63.089M-19.375-64.776L-24.688-64.776Q-24.766-64.784-24.815-64.833Q-24.863-64.882-24.863-64.960Q-24.863-65.030-24.816-65.081Q-24.770-65.132-24.688-65.143L-19.375-65.143Q-19.301-65.132-19.254-65.081Q-19.207-65.030-19.207-64.960Q-19.207-64.882-19.256-64.833Q-19.305-64.784-19.375-64.776",[1336],[1320,1446,1447],{"transform":1434},[1325,1448],{"d":1449,"fill":1322,"stroke":1322,"className":1450,"style":1391},"M-16.604-61.944Q-17.307-61.944-17.707-62.344Q-18.108-62.745-18.252-63.354Q-18.397-63.964-18.397-64.663Q-18.397-65.186-18.327-65.649Q-18.256-66.112-18.063-66.524Q-17.870-66.936-17.512-67.184Q-17.155-67.432-16.604-67.432Q-16.053-67.432-15.696-67.184Q-15.338-66.936-15.147-66.526Q-14.955-66.116-14.885-65.647Q-14.815-65.178-14.815-64.663Q-14.815-63.964-14.957-63.356Q-15.100-62.749-15.500-62.346Q-15.901-61.944-16.604-61.944M-16.604-62.202Q-16.131-62.202-15.899-62.637Q-15.666-63.073-15.612-63.612Q-15.557-64.151-15.557-64.792Q-15.557-65.788-15.741-66.481Q-15.924-67.174-16.604-67.174Q-16.971-67.174-17.192-66.936Q-17.413-66.698-17.508-66.341Q-17.604-65.983-17.629-65.612Q-17.655-65.241-17.655-64.792Q-17.655-64.151-17.600-63.612Q-17.545-63.073-17.313-62.637Q-17.080-62.202-16.604-62.202",[1336],[1320,1452,1453,1456],{"fill":1394},[1325,1454],{"d":1455},"M-19.308-.938H.608v-19.917h-19.916Z",[1320,1457,1459],{"transform":1458},"translate(17.467 53.152)",[1325,1460],{"d":1334,"fill":1322,"stroke":1322,"className":1461,"style":1337},[1336],[1320,1463,1464,1467],{"fill":1394},[1325,1465],{"d":1466},"M.608-.938h19.917v-19.917H.608Z",[1320,1468,1470],{"transform":1469},"translate(37.384 53.152)",[1325,1471],{"d":1334,"fill":1322,"stroke":1322,"className":1472,"style":1337},[1336],[1320,1474,1475,1478],{"fill":1417,"stroke":1418,"style":1419},[1325,1476],{"d":1477},"M20.525-.938h19.917v-19.917H20.525Z",[1320,1479,1481],{"transform":1480},"translate(57.769 54.34)",[1325,1482],{"d":1382,"fill":1322,"stroke":1322,"className":1483,"style":1337},[1336],[1320,1485,1486,1492,1497],{"stroke":1327,"fontSize":1431},[1320,1487,1489],{"transform":1488},"translate(-33.003 53.793)",[1325,1490],{"d":1437,"fill":1322,"stroke":1322,"className":1491,"style":1391},[1336],[1320,1493,1494],{"transform":1488},[1325,1495],{"d":1443,"fill":1322,"stroke":1322,"className":1496,"style":1391},[1336],[1320,1498,1499],{"transform":1488},[1325,1500],{"d":1501,"fill":1322,"stroke":1322,"className":1502,"style":1391},"M-15.131-62.112L-17.924-62.112L-17.924-62.409Q-16.862-62.409-16.862-62.671L-16.862-66.839Q-17.291-66.624-17.971-66.624L-17.971-66.921Q-16.952-66.921-16.436-67.432L-16.291-67.432Q-16.217-67.413-16.198-67.335L-16.198-62.671Q-16.198-62.409-15.131-62.409",[1336],[1320,1504,1505,1508],{"fill":1394},[1325,1506],{"d":1507},"M.608 24.67h19.917V4.751H.608Z",[1320,1509,1511],{"transform":1510},"translate(37.384 78.76)",[1325,1512],{"d":1334,"fill":1322,"stroke":1322,"className":1513,"style":1337},[1336],[1320,1515,1516,1519],{"fill":1394},[1325,1517],{"d":1518},"M20.525 24.67h19.917V4.751H20.525Z",[1320,1520,1522],{"transform":1521},"translate(57.3 78.76)",[1325,1523],{"d":1334,"fill":1322,"stroke":1322,"className":1524,"style":1337},[1336],[1320,1526,1527,1530],{"fill":1417,"stroke":1418,"style":1419},[1325,1528],{"d":1529},"M40.442 24.67H60.36V4.751H40.442Z",[1320,1531,1533],{"transform":1532},"translate(77.686 79.947)",[1325,1534],{"d":1382,"fill":1322,"stroke":1322,"className":1535,"style":1337},[1336],[1320,1537,1538,1544,1549],{"stroke":1327,"fontSize":1431},[1320,1539,1541],{"transform":1540},"translate(-33.003 79.4)",[1325,1542],{"d":1437,"fill":1322,"stroke":1322,"className":1543,"style":1391},[1336],[1320,1545,1546],{"transform":1540},[1325,1547],{"d":1443,"fill":1322,"stroke":1322,"className":1548,"style":1391},[1336],[1320,1550,1551],{"transform":1540},[1325,1552],{"d":1553,"fill":1322,"stroke":1322,"className":1554,"style":1391},"M-15.139-62.112L-18.299-62.112L-18.299-62.319Q-18.299-62.346-18.276-62.378L-16.924-63.776Q-16.545-64.163-16.297-64.452Q-16.049-64.741-15.875-65.098Q-15.702-65.456-15.702-65.846Q-15.702-66.194-15.834-66.487Q-15.967-66.780-16.221-66.958Q-16.475-67.135-16.830-67.135Q-17.190-67.135-17.481-66.940Q-17.772-66.745-17.916-66.417L-17.862-66.417Q-17.678-66.417-17.553-66.296Q-17.428-66.174-17.428-65.983Q-17.428-65.803-17.553-65.674Q-17.678-65.546-17.862-65.546Q-18.041-65.546-18.170-65.674Q-18.299-65.803-18.299-65.983Q-18.299-66.385-18.079-66.721Q-17.858-67.057-17.493-67.245Q-17.127-67.432-16.725-67.432Q-16.245-67.432-15.829-67.245Q-15.413-67.057-15.161-66.696Q-14.909-66.335-14.909-65.846Q-14.909-65.487-15.063-65.184Q-15.217-64.882-15.469-64.622Q-15.721-64.362-16.071-64.077Q-16.420-63.792-16.588-63.639L-17.518-62.800L-16.803-62.800Q-15.428-62.800-15.389-62.839Q-15.319-62.917-15.276-63.102Q-15.233-63.288-15.190-63.577L-14.909-63.577",[1336],[1320,1556,1557],{"fill":1418,"stroke":1418},[1320,1558,1560,1567,1573,1579,1585,1591,1597,1603],{"fill":1418,"stroke":1327,"fontFamily":1559,"fontSize":1431},"cmr8",[1320,1561,1563],{"transform":1562},"translate(142.589 58.743)",[1325,1564],{"d":1565,"fill":1418,"stroke":1418,"className":1566,"style":1391},"M-29.029-73.366Q-29.029-73.846-28.796-74.262Q-28.564-74.678-28.154-74.928Q-27.744-75.178-27.267-75.178Q-26.537-75.178-26.138-74.737Q-25.740-74.296-25.740-73.565Q-25.740-73.460-25.833-73.436L-28.283-73.436L-28.283-73.366Q-28.283-72.956-28.162-72.600Q-28.040-72.245-27.769-72.028Q-27.497-71.811-27.068-71.811Q-26.704-71.811-26.408-72.040Q-26.111-72.268-26.009-72.620Q-26.001-72.667-25.915-72.682L-25.833-72.682Q-25.740-72.655-25.740-72.573Q-25.740-72.565-25.747-72.534Q-25.810-72.307-25.949-72.124Q-26.087-71.940-26.279-71.807Q-26.470-71.674-26.689-71.604Q-26.908-71.534-27.146-71.534Q-27.517-71.534-27.855-71.671Q-28.193-71.807-28.460-72.059Q-28.728-72.311-28.878-72.651Q-29.029-72.991-29.029-73.366M-28.275-73.674L-26.314-73.674Q-26.314-73.979-26.415-74.270Q-26.517-74.561-26.734-74.743Q-26.951-74.924-27.267-74.924Q-27.568-74.924-27.798-74.737Q-28.029-74.549-28.152-74.258Q-28.275-73.967-28.275-73.674M-25.154-72.444Q-25.154-72.928-24.751-73.223Q-24.349-73.518-23.798-73.637Q-23.247-73.757-22.755-73.757L-22.755-74.046Q-22.755-74.272-22.871-74.479Q-22.986-74.686-23.183-74.805Q-23.380-74.924-23.611-74.924Q-24.037-74.924-24.322-74.819Q-24.251-74.792-24.204-74.737Q-24.158-74.682-24.132-74.612Q-24.107-74.542-24.107-74.467Q-24.107-74.362-24.158-74.270Q-24.208-74.178-24.300-74.128Q-24.392-74.077-24.497-74.077Q-24.603-74.077-24.695-74.128Q-24.787-74.178-24.837-74.270Q-24.888-74.362-24.888-74.467Q-24.888-74.885-24.499-75.032Q-24.111-75.178-23.611-75.178Q-23.279-75.178-22.925-75.048Q-22.572-74.917-22.343-74.663Q-22.115-74.409-22.115-74.061L-22.115-72.260Q-22.115-72.128-22.042-72.018Q-21.970-71.909-21.841-71.909Q-21.716-71.909-21.648-72.014Q-21.579-72.120-21.579-72.260L-21.579-72.772L-21.298-72.772L-21.298-72.260Q-21.298-72.057-21.415-71.899Q-21.533-71.741-21.714-71.657Q-21.896-71.573-22.099-71.573Q-22.329-71.573-22.482-71.745Q-22.634-71.917-22.665-72.147Q-22.826-71.866-23.134-71.700Q-23.443-71.534-23.794-71.534Q-24.306-71.534-24.730-71.757Q-25.154-71.979-25.154-72.444M-24.466-72.444Q-24.466-72.159-24.240-71.973Q-24.013-71.788-23.720-71.788Q-23.474-71.788-23.249-71.905Q-23.025-72.022-22.890-72.225Q-22.755-72.428-22.755-72.682L-22.755-73.514Q-23.021-73.514-23.306-73.460Q-23.591-73.405-23.863-73.276Q-24.134-73.147-24.300-72.940Q-24.466-72.733-24.466-72.444M-20.962-73.339Q-20.962-73.835-20.712-74.260Q-20.462-74.686-20.042-74.932Q-19.622-75.178-19.122-75.178Q-18.583-75.178-18.193-75.053Q-17.802-74.928-17.802-74.514Q-17.802-74.409-17.853-74.317Q-17.904-74.225-17.996-74.174Q-18.087-74.124-18.197-74.124Q-18.302-74.124-18.394-74.174Q-18.486-74.225-18.537-74.317Q-18.587-74.409-18.587-74.514Q-18.587-74.737-18.419-74.842Q-18.642-74.901-19.115-74.901Q-19.412-74.901-19.626-74.762Q-19.841-74.624-19.972-74.393Q-20.103-74.163-20.162-73.893Q-20.220-73.624-20.220-73.339Q-20.220-72.944-20.087-72.594Q-19.954-72.245-19.683-72.028Q-19.412-71.811-19.013-71.811Q-18.638-71.811-18.363-72.028Q-18.087-72.245-17.986-72.604Q-17.970-72.667-17.908-72.667L-17.802-72.667Q-17.767-72.667-17.742-72.639Q-17.716-72.612-17.716-72.573L-17.716-72.549Q-17.849-72.069-18.234-71.801Q-18.619-71.534-19.122-71.534Q-19.486-71.534-19.820-71.671Q-20.154-71.807-20.413-72.057Q-20.673-72.307-20.818-72.643Q-20.962-72.979-20.962-73.339",[1336],[1320,1568,1569],{"transform":1562},[1325,1570],{"d":1571,"fill":1418,"stroke":1418,"className":1572,"style":1391},"M-15.529-71.612L-17.384-71.612L-17.384-71.909Q-17.111-71.909-16.943-71.956Q-16.775-72.003-16.775-72.171L-16.775-76.331Q-16.775-76.546-16.838-76.641Q-16.900-76.737-17.019-76.758Q-17.138-76.780-17.384-76.780L-17.384-77.077L-16.162-77.163L-16.162-74.460Q-16.037-74.671-15.849-74.821Q-15.662-74.971-15.435-75.055Q-15.209-75.139-14.963-75.139Q-13.795-75.139-13.795-74.061L-13.795-72.171Q-13.795-72.003-13.625-71.956Q-13.455-71.909-13.185-71.909L-13.185-71.612L-15.041-71.612L-15.041-71.909Q-14.767-71.909-14.599-71.956Q-14.431-72.003-14.431-72.171L-14.431-74.046Q-14.431-74.428-14.552-74.657Q-14.674-74.885-15.025-74.885Q-15.338-74.885-15.592-74.723Q-15.845-74.561-15.992-74.292Q-16.138-74.022-16.138-73.725L-16.138-72.171Q-16.138-72.003-15.968-71.956Q-15.799-71.909-15.529-71.909",[1336],[1320,1574,1575],{"transform":1562},[1325,1576],{"d":1577,"fill":1418,"stroke":1418,"className":1578,"style":1391},"M-9.861-71.620L-9.861-72.842Q-9.861-72.870-9.829-72.901Q-9.798-72.932-9.775-72.932L-9.669-72.932Q-9.599-72.932-9.583-72.870Q-9.521-72.549-9.382-72.309Q-9.244-72.069-9.011-71.928Q-8.779-71.788-8.470-71.788Q-8.232-71.788-8.023-71.848Q-7.814-71.909-7.677-72.057Q-7.540-72.206-7.540-72.452Q-7.540-72.706-7.751-72.872Q-7.962-73.038-8.232-73.092L-8.853-73.206Q-9.259-73.284-9.560-73.540Q-9.861-73.796-9.861-74.171Q-9.861-74.538-9.660-74.760Q-9.458-74.983-9.134-75.081Q-8.810-75.178-8.470-75.178Q-8.005-75.178-7.708-74.971L-7.486-75.155Q-7.462-75.178-7.431-75.178L-7.380-75.178Q-7.349-75.178-7.322-75.151Q-7.294-75.124-7.294-75.092L-7.294-74.108Q-7.294-74.077-7.320-74.048Q-7.345-74.018-7.380-74.018L-7.486-74.018Q-7.521-74.018-7.548-74.046Q-7.576-74.073-7.576-74.108Q-7.576-74.507-7.828-74.727Q-8.079-74.948-8.478-74.948Q-8.833-74.948-9.117-74.825Q-9.400-74.702-9.400-74.397Q-9.400-74.178-9.199-74.046Q-8.997-73.913-8.751-73.870L-8.126-73.757Q-7.697-73.667-7.388-73.370Q-7.079-73.073-7.079-72.659Q-7.079-72.089-7.478-71.811Q-7.876-71.534-8.470-71.534Q-9.021-71.534-9.372-71.870L-9.669-71.557Q-9.693-71.534-9.728-71.534L-9.775-71.534Q-9.798-71.534-9.829-71.565Q-9.861-71.596-9.861-71.620M-4.622-71.612L-6.478-71.612L-6.478-71.909Q-6.204-71.909-6.037-71.956Q-5.869-72.003-5.869-72.171L-5.869-76.331Q-5.869-76.546-5.931-76.641Q-5.994-76.737-6.113-76.758Q-6.232-76.780-6.478-76.780L-6.478-77.077L-5.255-77.163L-5.255-74.460Q-5.130-74.671-4.943-74.821Q-4.755-74.971-4.529-75.055Q-4.302-75.139-4.056-75.139Q-2.888-75.139-2.888-74.061L-2.888-72.171Q-2.888-72.003-2.718-71.956Q-2.548-71.909-2.279-71.909L-2.279-71.612L-4.134-71.612L-4.134-71.909Q-3.861-71.909-3.693-71.956Q-3.525-72.003-3.525-72.171L-3.525-74.046Q-3.525-74.428-3.646-74.657Q-3.767-74.885-4.119-74.885Q-4.431-74.885-4.685-74.723Q-4.939-74.561-5.085-74.292Q-5.232-74.022-5.232-73.725L-5.232-72.171Q-5.232-72.003-5.062-71.956Q-4.892-71.909-4.622-71.909L-4.622-71.612M0.026-71.612L-1.751-71.612L-1.751-71.909Q-1.478-71.909-1.310-71.956Q-1.142-72.003-1.142-72.171L-1.142-74.307Q-1.142-74.522-1.199-74.618Q-1.255-74.714-1.369-74.735Q-1.482-74.757-1.728-74.757L-1.728-75.053L-0.529-75.139L-0.529-72.171Q-0.529-72.003-0.382-71.956Q-0.236-71.909 0.026-71.909L0.026-71.612M-1.415-76.534Q-1.415-76.725-1.281-76.856Q-1.146-76.987-0.951-76.987Q-0.829-76.987-0.726-76.924Q-0.622-76.862-0.560-76.758Q-0.497-76.655-0.497-76.534Q-0.497-76.339-0.628-76.204Q-0.759-76.069-0.951-76.069Q-1.150-76.069-1.283-76.202Q-1.415-76.335-1.415-76.534M2.592-71.612L0.608-71.612L0.608-71.909Q0.881-71.909 1.049-71.956Q1.217-72.003 1.217-72.171L1.217-74.764L0.577-74.764L0.577-75.061L1.217-75.061L1.217-75.995Q1.217-76.260 1.335-76.497Q1.452-76.733 1.645-76.897Q1.838-77.061 2.087-77.153Q2.335-77.245 2.600-77.245Q2.885-77.245 3.110-77.087Q3.335-76.928 3.335-76.651Q3.335-76.495 3.229-76.385Q3.124-76.276 2.960-76.276Q2.803-76.276 2.694-76.385Q2.585-76.495 2.585-76.651Q2.585-76.858 2.745-76.964Q2.647-76.987 2.553-76.987Q2.323-76.987 2.151-76.831Q1.979-76.674 1.893-76.438Q1.807-76.202 1.807-75.979L1.807-75.061L2.776-75.061L2.776-74.764L1.831-74.764L1.831-72.171Q1.831-72.003 2.057-71.956Q2.284-71.909 2.592-71.909L2.592-71.612M3.745-72.573L3.745-74.764L3.042-74.764L3.042-75.018Q3.397-75.018 3.639-75.251Q3.881-75.483 3.993-75.831Q4.104-76.178 4.104-76.534L4.385-76.534L4.385-75.061L5.561-75.061L5.561-74.764L4.385-74.764L4.385-72.589Q4.385-72.268 4.504-72.040Q4.624-71.811 4.905-71.811Q5.085-71.811 5.202-71.934Q5.319-72.057 5.372-72.237Q5.424-72.417 5.424-72.589L5.424-73.061L5.706-73.061L5.706-72.573Q5.706-72.319 5.600-72.079Q5.495-71.839 5.297-71.686Q5.100-71.534 4.842-71.534Q4.526-71.534 4.274-71.657Q4.022-71.780 3.883-72.014Q3.745-72.249 3.745-72.573",[1336],[1320,1580,1581],{"transform":1562},[1325,1582],{"d":1583,"fill":1418,"stroke":1418,"className":1584,"style":1391},"M11.277-71.612L9.297-71.612L9.297-71.909Q9.566-71.909 9.734-71.954Q9.902-71.999 9.902-72.171L9.902-74.307Q9.902-74.522 9.840-74.618Q9.777-74.714 9.660-74.735Q9.543-74.757 9.297-74.757L9.297-75.053L10.465-75.139L10.465-74.354Q10.543-74.565 10.695-74.751Q10.847-74.936 11.047-75.038Q11.246-75.139 11.472-75.139Q11.719-75.139 11.910-74.995Q12.101-74.850 12.101-74.620Q12.101-74.464 11.996-74.354Q11.890-74.245 11.734-74.245Q11.578-74.245 11.469-74.354Q11.359-74.464 11.359-74.620Q11.359-74.780 11.465-74.885Q11.140-74.885 10.926-74.657Q10.711-74.428 10.615-74.089Q10.519-73.749 10.519-73.444L10.519-72.171Q10.519-72.003 10.746-71.956Q10.972-71.909 11.277-71.909L11.277-71.612M12.582-73.366Q12.582-73.846 12.814-74.262Q13.047-74.678 13.457-74.928Q13.867-75.178 14.344-75.178Q15.074-75.178 15.472-74.737Q15.871-74.296 15.871-73.565Q15.871-73.460 15.777-73.436L13.328-73.436L13.328-73.366Q13.328-72.956 13.449-72.600Q13.570-72.245 13.842-72.028Q14.113-71.811 14.543-71.811Q14.906-71.811 15.203-72.040Q15.500-72.268 15.601-72.620Q15.609-72.667 15.695-72.682L15.777-72.682Q15.871-72.655 15.871-72.573Q15.871-72.565 15.863-72.534Q15.801-72.307 15.662-72.124Q15.523-71.940 15.332-71.807Q15.140-71.674 14.922-71.604Q14.703-71.534 14.465-71.534Q14.094-71.534 13.756-71.671Q13.418-71.807 13.150-72.059Q12.883-72.311 12.732-72.651Q12.582-72.991 12.582-73.366M13.336-73.674L15.297-73.674Q15.297-73.979 15.195-74.270Q15.094-74.561 14.877-74.743Q14.660-74.924 14.344-74.924Q14.043-74.924 13.812-74.737Q13.582-74.549 13.459-74.258Q13.336-73.967 13.336-73.674M18.472-73.061L16.218-73.061L16.218-73.612L18.472-73.612L18.472-73.061M21.199-71.612L19.218-71.612L19.218-71.909Q19.488-71.909 19.656-71.954Q19.824-71.999 19.824-72.171L19.824-74.307Q19.824-74.522 19.761-74.618Q19.699-74.714 19.582-74.735Q19.465-74.757 19.218-74.757L19.218-75.053L20.386-75.139L20.386-74.354Q20.465-74.565 20.617-74.751Q20.769-74.936 20.968-75.038Q21.168-75.139 21.394-75.139Q21.640-75.139 21.832-74.995Q22.023-74.850 22.023-74.620Q22.023-74.464 21.918-74.354Q21.812-74.245 21.656-74.245Q21.500-74.245 21.390-74.354Q21.281-74.464 21.281-74.620Q21.281-74.780 21.386-74.885Q21.062-74.885 20.847-74.657Q20.633-74.428 20.537-74.089Q20.441-73.749 20.441-73.444L20.441-72.171Q20.441-72.003 20.668-71.956Q20.894-71.909 21.199-71.909L21.199-71.612M22.504-73.366Q22.504-73.846 22.736-74.262Q22.968-74.678 23.379-74.928Q23.789-75.178 24.265-75.178Q24.996-75.178 25.394-74.737Q25.793-74.296 25.793-73.565Q25.793-73.460 25.699-73.436L23.250-73.436L23.250-73.366Q23.250-72.956 23.371-72.600Q23.492-72.245 23.763-72.028Q24.035-71.811 24.465-71.811Q24.828-71.811 25.125-72.040Q25.422-72.268 25.523-72.620Q25.531-72.667 25.617-72.682L25.699-72.682Q25.793-72.655 25.793-72.573Q25.793-72.565 25.785-72.534Q25.722-72.307 25.584-72.124Q25.445-71.940 25.254-71.807Q25.062-71.674 24.843-71.604Q24.625-71.534 24.386-71.534Q24.015-71.534 23.677-71.671Q23.340-71.807 23.072-72.059Q22.804-72.311 22.654-72.651Q22.504-72.991 22.504-73.366M23.258-73.674L25.218-73.674Q25.218-73.979 25.117-74.270Q25.015-74.561 24.799-74.743Q24.582-74.924 24.265-74.924Q23.965-74.924 23.734-74.737Q23.504-74.549 23.381-74.258Q23.258-73.967 23.258-73.674M26.379-72.444Q26.379-72.928 26.781-73.223Q27.183-73.518 27.734-73.637Q28.285-73.757 28.777-73.757L28.777-74.046Q28.777-74.272 28.662-74.479Q28.547-74.686 28.349-74.805Q28.152-74.924 27.922-74.924Q27.496-74.924 27.211-74.819Q27.281-74.792 27.328-74.737Q27.375-74.682 27.400-74.612Q27.426-74.542 27.426-74.467Q27.426-74.362 27.375-74.270Q27.324-74.178 27.232-74.128Q27.140-74.077 27.035-74.077Q26.929-74.077 26.838-74.128Q26.746-74.178 26.695-74.270Q26.644-74.362 26.644-74.467Q26.644-74.885 27.033-75.032Q27.422-75.178 27.922-75.178Q28.254-75.178 28.607-75.048Q28.961-74.917 29.189-74.663Q29.418-74.409 29.418-74.061L29.418-72.260Q29.418-72.128 29.490-72.018Q29.562-71.909 29.691-71.909Q29.816-71.909 29.885-72.014Q29.953-72.120 29.953-72.260L29.953-72.772L30.234-72.772L30.234-72.260Q30.234-72.057 30.117-71.899Q30-71.741 29.818-71.657Q29.636-71.573 29.433-71.573Q29.203-71.573 29.051-71.745Q28.898-71.917 28.867-72.147Q28.707-71.866 28.398-71.700Q28.090-71.534 27.738-71.534Q27.226-71.534 26.802-71.757Q26.379-71.979 26.379-72.444M27.066-72.444Q27.066-72.159 27.293-71.973Q27.519-71.788 27.812-71.788Q28.058-71.788 28.283-71.905Q28.508-72.022 28.642-72.225Q28.777-72.428 28.777-72.682L28.777-73.514Q28.511-73.514 28.226-73.460Q27.941-73.405 27.670-73.276Q27.398-73.147 27.232-72.940Q27.066-72.733 27.066-72.444M32.343-71.534Q31.863-71.534 31.455-71.778Q31.047-72.022 30.808-72.436Q30.570-72.850 30.570-73.339Q30.570-73.831 30.828-74.247Q31.086-74.663 31.517-74.901Q31.949-75.139 32.441-75.139Q33.062-75.139 33.511-74.702L33.511-76.331Q33.511-76.546 33.449-76.641Q33.386-76.737 33.269-76.758Q33.152-76.780 32.906-76.780L32.906-77.077L34.129-77.163L34.129-72.354Q34.129-72.143 34.191-72.048Q34.254-71.952 34.371-71.930Q34.488-71.909 34.738-71.909L34.738-71.612L33.488-71.534L33.488-72.018Q33.023-71.534 32.343-71.534M32.410-71.788Q32.750-71.788 33.043-71.979Q33.336-72.171 33.488-72.467L33.488-74.299Q33.340-74.573 33.078-74.729Q32.816-74.885 32.504-74.885Q31.879-74.885 31.595-74.438Q31.312-73.991 31.312-73.331Q31.312-72.686 31.564-72.237Q31.816-71.788 32.410-71.788M35.289-71.620L35.289-72.842Q35.289-72.870 35.320-72.901Q35.351-72.932 35.375-72.932L35.480-72.932Q35.551-72.932 35.566-72.870Q35.629-72.549 35.767-72.309Q35.906-72.069 36.138-71.928Q36.371-71.788 36.679-71.788Q36.918-71.788 37.127-71.848Q37.336-71.909 37.472-72.057Q37.609-72.206 37.609-72.452Q37.609-72.706 37.398-72.872Q37.187-73.038 36.918-73.092L36.297-73.206Q35.890-73.284 35.590-73.540Q35.289-73.796 35.289-74.171Q35.289-74.538 35.490-74.760Q35.691-74.983 36.015-75.081Q36.340-75.178 36.679-75.178Q37.144-75.178 37.441-74.971L37.664-75.155Q37.687-75.178 37.718-75.178L37.769-75.178Q37.801-75.178 37.828-75.151Q37.855-75.124 37.855-75.092L37.855-74.108Q37.855-74.077 37.830-74.048Q37.804-74.018 37.769-74.018L37.664-74.018Q37.629-74.018 37.601-74.046Q37.574-74.073 37.574-74.108Q37.574-74.507 37.322-74.727Q37.070-74.948 36.672-74.948Q36.316-74.948 36.033-74.825Q35.750-74.702 35.750-74.397Q35.750-74.178 35.951-74.046Q36.152-73.913 36.398-73.870L37.023-73.757Q37.453-73.667 37.761-73.370Q38.070-73.073 38.070-72.659Q38.070-72.089 37.672-71.811Q37.273-71.534 36.679-71.534Q36.129-71.534 35.777-71.870L35.480-71.557Q35.457-71.534 35.422-71.534L35.375-71.534Q35.351-71.534 35.320-71.565Q35.289-71.596 35.289-71.620",[1336],[1320,1586,1587],{"transform":1562},[1325,1588],{"d":1589,"fill":1418,"stroke":1418,"className":1590,"style":1391},"M-28.404-63.073L-28.404-65.264L-29.107-65.264L-29.107-65.518Q-28.751-65.518-28.509-65.751Q-28.267-65.983-28.156-66.331Q-28.044-66.678-28.044-67.034L-27.763-67.034L-27.763-65.561L-26.587-65.561L-26.587-65.264L-27.763-65.264L-27.763-63.089Q-27.763-62.768-27.644-62.540Q-27.525-62.311-27.244-62.311Q-27.064-62.311-26.947-62.434Q-26.829-62.557-26.777-62.737Q-26.724-62.917-26.724-63.089L-26.724-63.561L-26.443-63.561L-26.443-63.073Q-26.443-62.819-26.548-62.579Q-26.654-62.339-26.851-62.186Q-27.048-62.034-27.306-62.034Q-27.622-62.034-27.874-62.157Q-28.126-62.280-28.265-62.514Q-28.404-62.749-28.404-63.073M-23.794-62.112L-25.650-62.112L-25.650-62.409Q-25.376-62.409-25.208-62.456Q-25.040-62.503-25.040-62.671L-25.040-66.831Q-25.040-67.046-25.103-67.141Q-25.165-67.237-25.285-67.258Q-25.404-67.280-25.650-67.280L-25.650-67.577L-24.427-67.663L-24.427-64.960Q-24.302-65.171-24.115-65.321Q-23.927-65.471-23.701-65.555Q-23.474-65.639-23.228-65.639Q-22.060-65.639-22.060-64.561L-22.060-62.671Q-22.060-62.503-21.890-62.456Q-21.720-62.409-21.451-62.409L-21.451-62.112L-23.306-62.112L-23.306-62.409Q-23.033-62.409-22.865-62.456Q-22.697-62.503-22.697-62.671L-22.697-64.546Q-22.697-64.928-22.818-65.157Q-22.939-65.385-23.290-65.385Q-23.603-65.385-23.857-65.223Q-24.111-65.061-24.257-64.792Q-24.404-64.522-24.404-64.225L-24.404-62.671Q-24.404-62.503-24.234-62.456Q-24.064-62.409-23.794-62.409L-23.794-62.112M-21.005-63.866Q-21.005-64.346-20.773-64.762Q-20.540-65.178-20.130-65.428Q-19.720-65.678-19.244-65.678Q-18.513-65.678-18.115-65.237Q-17.716-64.796-17.716-64.065Q-17.716-63.960-17.810-63.936L-20.259-63.936L-20.259-63.866Q-20.259-63.456-20.138-63.100Q-20.017-62.745-19.746-62.528Q-19.474-62.311-19.044-62.311Q-18.681-62.311-18.384-62.540Q-18.087-62.768-17.986-63.120Q-17.978-63.167-17.892-63.182L-17.810-63.182Q-17.716-63.155-17.716-63.073Q-17.716-63.065-17.724-63.034Q-17.787-62.807-17.925-62.624Q-18.064-62.440-18.255-62.307Q-18.447-62.175-18.665-62.104Q-18.884-62.034-19.122-62.034Q-19.494-62.034-19.831-62.171Q-20.169-62.307-20.437-62.559Q-20.704-62.811-20.855-63.151Q-21.005-63.491-21.005-63.866M-20.251-64.174L-18.290-64.174Q-18.290-64.479-18.392-64.770Q-18.494-65.061-18.710-65.243Q-18.927-65.424-19.244-65.424Q-19.544-65.424-19.775-65.237Q-20.005-65.049-20.128-64.758Q-20.251-64.467-20.251-64.174",[1336],[1320,1592,1593],{"transform":1562},[1325,1594],{"d":1595,"fill":1418,"stroke":1418,"className":1596,"style":1391},"M-12.460-62.112L-14.316-62.112L-14.316-62.409Q-14.042-62.409-13.874-62.456Q-13.706-62.503-13.706-62.671L-13.706-64.807Q-13.706-65.022-13.769-65.118Q-13.831-65.214-13.950-65.235Q-14.069-65.257-14.316-65.257L-14.316-65.553L-13.124-65.639L-13.124-64.905Q-13.011-65.120-12.817-65.288Q-12.624-65.456-12.386-65.548Q-12.148-65.639-11.894-65.639Q-10.933-65.639-10.757-64.928Q-10.573-65.257-10.245-65.448Q-9.917-65.639-9.538-65.639Q-8.362-65.639-8.362-64.561L-8.362-62.671Q-8.362-62.503-8.194-62.456Q-8.026-62.409-7.757-62.409L-7.757-62.112L-9.612-62.112L-9.612-62.409Q-9.339-62.409-9.171-62.454Q-9.003-62.499-9.003-62.671L-9.003-64.546Q-9.003-64.932-9.128-65.159Q-9.253-65.385-9.605-65.385Q-9.909-65.385-10.165-65.223Q-10.421-65.061-10.569-64.792Q-10.718-64.522-10.718-64.225L-10.718-62.671Q-10.718-62.503-10.548-62.456Q-10.378-62.409-10.108-62.409L-10.108-62.112L-11.964-62.112L-11.964-62.409Q-11.691-62.409-11.523-62.456Q-11.355-62.503-11.355-62.671L-11.355-64.546Q-11.355-64.932-11.480-65.159Q-11.605-65.385-11.956-65.385Q-12.261-65.385-12.517-65.223Q-12.773-65.061-12.921-64.792Q-13.069-64.522-13.069-64.225L-13.069-62.671Q-13.069-62.503-12.899-62.456Q-12.730-62.409-12.460-62.409L-12.460-62.112M-7.214-62.944Q-7.214-63.428-6.812-63.723Q-6.409-64.018-5.858-64.137Q-5.308-64.257-4.816-64.257L-4.816-64.546Q-4.816-64.772-4.931-64.979Q-5.046-65.186-5.243-65.305Q-5.441-65.424-5.671-65.424Q-6.097-65.424-6.382-65.319Q-6.312-65.292-6.265-65.237Q-6.218-65.182-6.192-65.112Q-6.167-65.042-6.167-64.967Q-6.167-64.862-6.218-64.770Q-6.269-64.678-6.360-64.628Q-6.452-64.577-6.558-64.577Q-6.663-64.577-6.755-64.628Q-6.847-64.678-6.898-64.770Q-6.948-64.862-6.948-64.967Q-6.948-65.385-6.560-65.532Q-6.171-65.678-5.671-65.678Q-5.339-65.678-4.985-65.548Q-4.632-65.417-4.403-65.163Q-4.175-64.909-4.175-64.561L-4.175-62.760Q-4.175-62.628-4.103-62.518Q-4.030-62.409-3.901-62.409Q-3.776-62.409-3.708-62.514Q-3.640-62.620-3.640-62.760L-3.640-63.272L-3.358-63.272L-3.358-62.760Q-3.358-62.557-3.476-62.399Q-3.593-62.241-3.774-62.157Q-3.956-62.073-4.159-62.073Q-4.390-62.073-4.542-62.245Q-4.694-62.417-4.726-62.647Q-4.886-62.366-5.194-62.200Q-5.503-62.034-5.855-62.034Q-6.366-62.034-6.790-62.257Q-7.214-62.479-7.214-62.944M-6.526-62.944Q-6.526-62.659-6.300-62.473Q-6.073-62.288-5.780-62.288Q-5.534-62.288-5.310-62.405Q-5.085-62.522-4.950-62.725Q-4.816-62.928-4.816-63.182L-4.816-64.014Q-5.081-64.014-5.366-63.960Q-5.651-63.905-5.923-63.776Q-6.194-63.647-6.360-63.440Q-6.526-63.233-6.526-62.944M-2.441-63.073L-2.441-65.264L-3.144-65.264L-3.144-65.518Q-2.788-65.518-2.546-65.751Q-2.304-65.983-2.192-66.331Q-2.081-66.678-2.081-67.034L-1.800-67.034L-1.800-65.561L-0.624-65.561L-0.624-65.264L-1.800-65.264L-1.800-63.089Q-1.800-62.768-1.681-62.540Q-1.562-62.311-1.280-62.311Q-1.101-62.311-0.983-62.434Q-0.866-62.557-0.814-62.737Q-0.761-62.917-0.761-63.089L-0.761-63.561L-0.480-63.561L-0.480-63.073Q-0.480-62.819-0.585-62.579Q-0.691-62.339-0.888-62.186Q-1.085-62.034-1.343-62.034Q-1.659-62.034-1.911-62.157Q-2.163-62.280-2.302-62.514Q-2.441-62.749-2.441-63.073M0.282-63.839Q0.282-64.335 0.532-64.760Q0.782-65.186 1.202-65.432Q1.622-65.678 2.122-65.678Q2.661-65.678 3.052-65.553Q3.442-65.428 3.442-65.014Q3.442-64.909 3.392-64.817Q3.341-64.725 3.249-64.674Q3.157-64.624 3.048-64.624Q2.942-64.624 2.851-64.674Q2.759-64.725 2.708-64.817Q2.657-64.909 2.657-65.014Q2.657-65.237 2.825-65.342Q2.602-65.401 2.130-65.401Q1.833-65.401 1.618-65.262Q1.403-65.124 1.272-64.893Q1.142-64.663 1.083-64.393Q1.024-64.124 1.024-63.839Q1.024-63.444 1.157-63.094Q1.290-62.745 1.561-62.528Q1.833-62.311 2.231-62.311Q2.606-62.311 2.882-62.528Q3.157-62.745 3.259-63.104Q3.274-63.167 3.337-63.167L3.442-63.167Q3.477-63.167 3.503-63.139Q3.528-63.112 3.528-63.073L3.528-63.050Q3.395-62.569 3.011-62.301Q2.626-62.034 2.122-62.034Q1.759-62.034 1.425-62.171Q1.091-62.307 0.831-62.557Q0.571-62.807 0.427-63.143Q0.282-63.479 0.282-63.839",[1336],[1320,1598,1599],{"transform":1562},[1325,1600],{"d":1601,"fill":1418,"stroke":1418,"className":1602,"style":1391},"M5.721-62.112L3.865-62.112L3.865-62.409Q4.139-62.409 4.307-62.456Q4.475-62.503 4.475-62.671L4.475-66.831Q4.475-67.046 4.412-67.141Q4.350-67.237 4.231-67.258Q4.112-67.280 3.865-67.280L3.865-67.577L5.088-67.663L5.088-64.960Q5.213-65.171 5.401-65.321Q5.588-65.471 5.815-65.555Q6.041-65.639 6.287-65.639Q7.455-65.639 7.455-64.561L7.455-62.671Q7.455-62.503 7.625-62.456Q7.795-62.409 8.065-62.409L8.065-62.112L6.209-62.112L6.209-62.409Q6.483-62.409 6.651-62.456Q6.819-62.503 6.819-62.671L6.819-64.546Q6.819-64.928 6.698-65.157Q6.576-65.385 6.225-65.385Q5.912-65.385 5.658-65.223Q5.405-65.061 5.258-64.792Q5.112-64.522 5.112-64.225L5.112-62.671Q5.112-62.503 5.282-62.456Q5.451-62.409 5.721-62.409L5.721-62.112M8.510-63.866Q8.510-64.346 8.742-64.762Q8.975-65.178 9.385-65.428Q9.795-65.678 10.272-65.678Q11.002-65.678 11.401-65.237Q11.799-64.796 11.799-64.065Q11.799-63.960 11.705-63.936L9.256-63.936L9.256-63.866Q9.256-63.456 9.377-63.100Q9.498-62.745 9.770-62.528Q10.041-62.311 10.471-62.311Q10.834-62.311 11.131-62.540Q11.428-62.768 11.530-63.120Q11.537-63.167 11.623-63.182L11.705-63.182Q11.799-63.155 11.799-63.073Q11.799-63.065 11.791-63.034Q11.729-62.807 11.590-62.624Q11.451-62.440 11.260-62.307Q11.069-62.175 10.850-62.104Q10.631-62.034 10.393-62.034Q10.022-62.034 9.684-62.171Q9.346-62.307 9.078-62.559Q8.811-62.811 8.660-63.151Q8.510-63.491 8.510-63.866M9.264-64.174L11.225-64.174Q11.225-64.479 11.123-64.770Q11.022-65.061 10.805-65.243Q10.588-65.424 10.272-65.424Q9.971-65.424 9.741-65.237Q9.510-65.049 9.387-64.758Q9.264-64.467 9.264-64.174M14.104-62.034Q13.623-62.034 13.215-62.278Q12.807-62.522 12.569-62.936Q12.330-63.350 12.330-63.839Q12.330-64.331 12.588-64.747Q12.846-65.163 13.278-65.401Q13.709-65.639 14.201-65.639Q14.823-65.639 15.272-65.202L15.272-66.831Q15.272-67.046 15.209-67.141Q15.147-67.237 15.030-67.258Q14.912-67.280 14.666-67.280L14.666-67.577L15.889-67.663L15.889-62.854Q15.889-62.643 15.951-62.548Q16.014-62.452 16.131-62.430Q16.248-62.409 16.498-62.409L16.498-62.112L15.248-62.034L15.248-62.518Q14.783-62.034 14.104-62.034M14.170-62.288Q14.510-62.288 14.803-62.479Q15.096-62.671 15.248-62.967L15.248-64.799Q15.100-65.073 14.838-65.229Q14.576-65.385 14.264-65.385Q13.639-65.385 13.356-64.938Q13.073-64.491 13.073-63.831Q13.073-63.186 13.324-62.737Q13.576-62.288 14.170-62.288",[1336],[1320,1604,1605],{"transform":1562},[1325,1606],{"d":1607,"fill":1418,"stroke":1418,"className":1608,"style":1391},"M19.945-62.944Q19.945-63.428 20.347-63.723Q20.750-64.018 21.300-64.137Q21.851-64.257 22.343-64.257L22.343-64.546Q22.343-64.772 22.228-64.979Q22.113-65.186 21.916-65.305Q21.718-65.424 21.488-65.424Q21.062-65.424 20.777-65.319Q20.847-65.292 20.894-65.237Q20.941-65.182 20.966-65.112Q20.992-65.042 20.992-64.967Q20.992-64.862 20.941-64.770Q20.890-64.678 20.798-64.628Q20.707-64.577 20.601-64.577Q20.496-64.577 20.404-64.628Q20.312-64.678 20.261-64.770Q20.211-64.862 20.211-64.967Q20.211-65.385 20.599-65.532Q20.988-65.678 21.488-65.678Q21.820-65.678 22.173-65.548Q22.527-65.417 22.755-65.163Q22.984-64.909 22.984-64.561L22.984-62.760Q22.984-62.628 23.056-62.518Q23.129-62.409 23.257-62.409Q23.382-62.409 23.451-62.514Q23.519-62.620 23.519-62.760L23.519-63.272L23.800-63.272L23.800-62.760Q23.800-62.557 23.683-62.399Q23.566-62.241 23.384-62.157Q23.203-62.073 23-62.073Q22.769-62.073 22.617-62.245Q22.464-62.417 22.433-62.647Q22.273-62.366 21.964-62.200Q21.656-62.034 21.304-62.034Q20.793-62.034 20.369-62.257Q19.945-62.479 19.945-62.944M20.632-62.944Q20.632-62.659 20.859-62.473Q21.086-62.288 21.379-62.288Q21.625-62.288 21.849-62.405Q22.074-62.522 22.209-62.725Q22.343-62.928 22.343-63.182L22.343-64.014Q22.078-64.014 21.793-63.960Q21.507-63.905 21.236-63.776Q20.964-63.647 20.798-63.440Q20.632-63.233 20.632-62.944M24.207-63.182Q24.207-63.628 24.543-63.952L25.543-64.913Q25.214-65.725 25.214-66.518Q25.214-66.866 25.371-67.167Q25.527-67.467 25.806-67.649Q26.086-67.831 26.422-67.831Q26.687-67.831 26.865-67.661Q27.043-67.491 27.121-67.239Q27.199-66.987 27.199-66.729Q27.199-66.362 26.894-65.966Q26.589-65.569 26.136-65.128Q26.519-64.217 27.488-63.096Q27.777-63.401 27.992-63.704Q28.207-64.007 28.504-64.471L28.695-64.784Q28.742-64.854 28.742-64.944Q28.742-65.124 28.584-65.194Q28.425-65.264 28.222-65.264L28.222-65.561L30.031-65.561L30.031-65.264Q29.328-65.264 29.015-64.784L28.742-64.342Q28.523-64.007 28.382-63.798Q28.242-63.589 28.060-63.352Q27.879-63.116 27.672-62.897Q27.957-62.604 28.232-62.423Q28.507-62.241 28.808-62.241Q29.043-62.241 29.250-62.354Q29.457-62.467 29.580-62.657Q29.703-62.846 29.703-63.081L29.984-63.081Q29.984-62.768 29.818-62.507Q29.652-62.245 29.380-62.094Q29.109-61.944 28.800-61.944Q28.007-61.944 27.281-62.526Q26.562-61.944 25.742-61.944Q25.371-61.944 25.017-62.089Q24.664-62.233 24.435-62.516Q24.207-62.800 24.207-63.182M25.793-62.241Q26.468-62.241 27.070-62.714Q26.797-62.960 26.527-63.284Q26.257-63.608 26.039-63.952Q25.820-64.296 25.648-64.655L25.320-64.342Q24.953-63.991 24.953-63.393Q24.953-63.120 25.047-62.858Q25.140-62.596 25.334-62.419Q25.527-62.241 25.793-62.241M26.039-65.393Q26.226-65.581 26.427-65.807Q26.629-66.034 26.773-66.280Q26.918-66.526 26.918-66.737Q26.918-67.049 26.800-67.313Q26.683-67.577 26.422-67.577Q26.129-67.577 25.964-67.309Q25.800-67.042 25.800-66.729Q25.800-66.065 26.039-65.393M30.800-62.944Q30.800-63.428 31.203-63.723Q31.605-64.018 32.156-64.137Q32.707-64.257 33.199-64.257L33.199-64.546Q33.199-64.772 33.084-64.979Q32.968-65.186 32.771-65.305Q32.574-65.424 32.343-65.424Q31.918-65.424 31.632-65.319Q31.703-65.292 31.750-65.237Q31.797-65.182 31.822-65.112Q31.847-65.042 31.847-64.967Q31.847-64.862 31.797-64.770Q31.746-64.678 31.654-64.628Q31.562-64.577 31.457-64.577Q31.351-64.577 31.259-64.628Q31.168-64.678 31.117-64.770Q31.066-64.862 31.066-64.967Q31.066-65.385 31.455-65.532Q31.843-65.678 32.343-65.678Q32.675-65.678 33.029-65.548Q33.382-65.417 33.611-65.163Q33.839-64.909 33.839-64.561L33.839-62.760Q33.839-62.628 33.912-62.518Q33.984-62.409 34.113-62.409Q34.238-62.409 34.306-62.514Q34.375-62.620 34.375-62.760L34.375-63.272L34.656-63.272L34.656-62.760Q34.656-62.557 34.539-62.399Q34.422-62.241 34.240-62.157Q34.058-62.073 33.855-62.073Q33.625-62.073 33.472-62.245Q33.320-62.417 33.289-62.647Q33.129-62.366 32.820-62.200Q32.511-62.034 32.160-62.034Q31.648-62.034 31.224-62.257Q30.800-62.479 30.800-62.944M31.488-62.944Q31.488-62.659 31.714-62.473Q31.941-62.288 32.234-62.288Q32.480-62.288 32.705-62.405Q32.929-62.522 33.064-62.725Q33.199-62.928 33.199-63.182L33.199-64.014Q32.933-64.014 32.648-63.960Q32.363-63.905 32.091-63.776Q31.820-63.647 31.654-63.440Q31.488-63.233 31.488-62.944M36.832-60.561L34.976-60.561L34.976-60.854Q35.246-60.854 35.414-60.899Q35.582-60.944 35.582-61.120L35.582-64.944Q35.582-65.151 35.425-65.204Q35.269-65.257 34.976-65.257L34.976-65.553L36.199-65.639L36.199-65.174Q36.429-65.397 36.744-65.518Q37.058-65.639 37.398-65.639Q37.871-65.639 38.275-65.393Q38.679-65.147 38.912-64.731Q39.144-64.315 39.144-63.839Q39.144-63.464 38.996-63.135Q38.847-62.807 38.578-62.555Q38.308-62.303 37.964-62.169Q37.621-62.034 37.261-62.034Q36.972-62.034 36.701-62.155Q36.429-62.276 36.222-62.487L36.222-61.120Q36.222-60.944 36.390-60.899Q36.558-60.854 36.832-60.854L36.832-60.561M36.222-64.776L36.222-62.936Q36.375-62.647 36.636-62.467Q36.898-62.288 37.207-62.288Q37.492-62.288 37.714-62.426Q37.937-62.565 38.089-62.796Q38.242-63.026 38.320-63.298Q38.398-63.569 38.398-63.839Q38.398-64.171 38.273-64.528Q38.148-64.885 37.900-65.122Q37.652-65.358 37.304-65.358Q36.980-65.358 36.685-65.202Q36.390-65.046 36.222-64.776M39.668-63.807Q39.668-64.311 39.923-64.743Q40.179-65.174 40.615-65.426Q41.050-65.678 41.550-65.678Q41.937-65.678 42.279-65.534Q42.621-65.389 42.882-65.128Q43.144-64.866 43.287-64.530Q43.429-64.194 43.429-63.807Q43.429-63.315 43.166-62.905Q42.902-62.495 42.472-62.264Q42.043-62.034 41.550-62.034Q41.058-62.034 40.625-62.266Q40.191-62.499 39.929-62.907Q39.668-63.315 39.668-63.807M41.550-62.311Q42.007-62.311 42.259-62.534Q42.511-62.757 42.599-63.108Q42.687-63.460 42.687-63.905Q42.687-64.335 42.593-64.673Q42.500-65.010 42.246-65.217Q41.992-65.424 41.550-65.424Q40.902-65.424 40.658-65.008Q40.414-64.592 40.414-63.905Q40.414-63.460 40.502-63.108Q40.589-62.757 40.841-62.534Q41.093-62.311 41.550-62.311M43.957-62.120L43.957-63.342Q43.957-63.370 43.988-63.401Q44.019-63.432 44.043-63.432L44.148-63.432Q44.218-63.432 44.234-63.370Q44.297-63.050 44.435-62.809Q44.574-62.569 44.806-62.428Q45.039-62.288 45.347-62.288Q45.586-62.288 45.795-62.348Q46.004-62.409 46.140-62.557Q46.277-62.706 46.277-62.952Q46.277-63.206 46.066-63.372Q45.855-63.538 45.586-63.592L44.964-63.706Q44.558-63.784 44.257-64.040Q43.957-64.296 43.957-64.671Q43.957-65.038 44.158-65.260Q44.359-65.483 44.683-65.581Q45.007-65.678 45.347-65.678Q45.812-65.678 46.109-65.471L46.332-65.655Q46.355-65.678 46.386-65.678L46.437-65.678Q46.468-65.678 46.496-65.651Q46.523-65.624 46.523-65.592L46.523-64.608Q46.523-64.577 46.498-64.548Q46.472-64.518 46.437-64.518L46.332-64.518Q46.297-64.518 46.269-64.546Q46.242-64.573 46.242-64.608Q46.242-65.007 45.990-65.227Q45.738-65.448 45.339-65.448Q44.984-65.448 44.701-65.325Q44.418-65.202 44.418-64.897Q44.418-64.678 44.619-64.546Q44.820-64.413 45.066-64.370L45.691-64.257Q46.121-64.167 46.429-63.870Q46.738-63.573 46.738-63.159Q46.738-62.589 46.339-62.311Q45.941-62.034 45.347-62.034Q44.797-62.034 44.445-62.370L44.148-62.057Q44.125-62.034 44.089-62.034L44.043-62.034Q44.019-62.034 43.988-62.065Q43.957-62.096 43.957-62.120M47.851-60.706Q47.851-60.745 47.875-60.768Q48.148-61.053 48.291-61.417Q48.433-61.780 48.433-62.167Q48.336-62.112 48.211-62.112Q48.019-62.112 47.882-62.245Q47.746-62.378 47.746-62.577Q47.746-62.768 47.882-62.901Q48.019-63.034 48.211-63.034Q48.691-63.034 48.691-62.159Q48.691-61.870 48.619-61.589Q48.547-61.307 48.404-61.053Q48.261-60.800 48.066-60.592Q48.035-60.561 47.996-60.561Q47.949-60.561 47.900-60.606Q47.851-60.651 47.851-60.706M47.746-65.104Q47.746-65.288 47.882-65.424Q48.019-65.561 48.211-65.561Q48.402-65.561 48.535-65.428Q48.668-65.296 48.668-65.104Q48.668-64.905 48.535-64.772Q48.402-64.639 48.211-64.639Q48.019-64.639 47.882-64.776Q47.746-64.913 47.746-65.104M49.668-62.120L49.668-63.342Q49.668-63.370 49.699-63.401Q49.730-63.432 49.754-63.432L49.859-63.432Q49.929-63.432 49.945-63.370Q50.007-63.050 50.146-62.809Q50.285-62.569 50.517-62.428Q50.750-62.288 51.058-62.288Q51.297-62.288 51.505-62.348Q51.714-62.409 51.851-62.557Q51.988-62.706 51.988-62.952Q51.988-63.206 51.777-63.372Q51.566-63.538 51.297-63.592L50.675-63.706Q50.269-63.784 49.968-64.040Q49.668-64.296 49.668-64.671Q49.668-65.038 49.869-65.260Q50.070-65.483 50.394-65.581Q50.718-65.678 51.058-65.678Q51.523-65.678 51.820-65.471L52.043-65.655Q52.066-65.678 52.097-65.678L52.148-65.678Q52.179-65.678 52.207-65.651Q52.234-65.624 52.234-65.592L52.234-64.608Q52.234-64.577 52.209-64.548Q52.183-64.518 52.148-64.518L52.043-64.518Q52.007-64.518 51.980-64.546Q51.953-64.573 51.953-64.608Q51.953-65.007 51.701-65.227Q51.449-65.448 51.050-65.448Q50.695-65.448 50.412-65.325Q50.129-65.202 50.129-64.897Q50.129-64.678 50.330-64.546Q50.531-64.413 50.777-64.370L51.402-64.257Q51.832-64.167 52.140-63.870Q52.449-63.573 52.449-63.159Q52.449-62.589 52.050-62.311Q51.652-62.034 51.058-62.034Q50.507-62.034 50.156-62.370L49.859-62.057Q49.836-62.034 49.800-62.034L49.754-62.034Q49.730-62.034 49.699-62.065Q49.668-62.096 49.668-62.120",[1336],[1610,1611,1614,1615,1639,1640,1677,1678,1715,1716,1718,1719,1744],"figcaption",{"className":1612},[1613],"tikz-cap","Why the naive scan is ",[395,1616,1618],{"className":1617},[398],[395,1619,1621],{"className":1620,"ariaHidden":403},[402],[395,1622,1624,1627,1630,1633,1636],{"className":1623},[407],[395,1625],{"className":1626,"style":412},[411],[395,1628,1045],{"className":1629,"style":1044},[416,417],[395,1631,1049],{"className":1632},[423],[395,1634,1053],{"className":1635},[416,417],[395,1637,1016],{"className":1638},[475],": on ",[395,1641,1643],{"className":1642},[398],[395,1644,1646,1664],{"className":1645,"ariaHidden":403},[402],[395,1647,1649,1652,1655,1658,1661],{"className":1648},[407],[395,1650],{"className":1651,"style":550},[411],[395,1653,419],{"className":1654,"style":418},[416,417],[395,1656],{"className":1657,"style":702},[432],[395,1659,707],{"className":1660},[706],[395,1662],{"className":1663,"style":702},[432],[395,1665,1667,1670],{"className":1666},[407],[395,1668],{"className":1669,"style":1128},[411],[395,1671,1673],{"className":1672},[416,1091],[395,1674,1676],{"className":1675},[416,1095],"aaaaab",", ",[395,1679,1681],{"className":1680},[398],[395,1682,1684,1702],{"className":1683,"ariaHidden":403},[402],[395,1685,1687,1690,1693,1696,1699],{"className":1686},[407],[395,1688],{"className":1689,"style":550},[411],[395,1691,493],{"className":1692,"style":418},[416,417],[395,1694],{"className":1695,"style":702},[432],[395,1697,707],{"className":1698},[706],[395,1700],{"className":1701,"style":702},[432],[395,1703,1705,1708],{"className":1704},[407],[395,1706],{"className":1707,"style":1128},[411],[395,1709,1711],{"className":1710},[416,1091],[395,1712,1714],{"className":1713},[416,1095],"aab"," every shift re-reads the same ",[845,1717,1216],{},"s, matching ",[395,1720,1722],{"className":1721},[398],[395,1723,1725],{"className":1724,"ariaHidden":403},[402],[395,1726,1728,1732,1735,1741],{"className":1727},[407],[395,1729],{"className":1730,"style":1731},[411],"height:0.7278em;vertical-align:-0.0833em;",[395,1733,515],{"className":1734},[416,417],[395,1736,1738],{"className":1737},[416],[395,1739,458],{"className":1740},[416],[395,1742,471],{"className":1743},[416]," of them before failing on the final character (red). Each row is one alignment",[831,1746,1748],{"id":1747},"rabinkarp-matching-by-rolling-hash","Rabin–Karp: matching by rolling hash",[381,1750,1751,1752,1771,1772,1775,1776,1779,1780,1795,1796,1811,1812,1848,1849,1866,1867,1910,1911,2048,2049,2120,2121,2124,2125,2128],{},"Rabin–Karp turns ",[826,1753,1754,1755,1770],{},"are these ",[395,1756,1758],{"className":1757},[398],[395,1759,1761],{"className":1760,"ariaHidden":403},[402],[395,1762,1764,1767],{"className":1763},[407],[395,1765],{"className":1766,"style":568},[411],[395,1768,515],{"className":1769},[416,417]," characters equal?"," into ",[826,1773,1774],{},"are these two numbers equal?"," by ",[1216,1777,1778],{"href":84},"hashing"," each window.\nInterpret each length-",[395,1781,1783],{"className":1782},[398],[395,1784,1786],{"className":1785,"ariaHidden":403},[402],[395,1787,1789,1792],{"className":1788},[407],[395,1790],{"className":1791,"style":568},[411],[395,1793,515],{"className":1794},[416,417]," block of text as an ",[395,1797,1799],{"className":1798},[398],[395,1800,1802],{"className":1801,"ariaHidden":403},[402],[395,1803,1805,1808],{"className":1804},[407],[395,1806],{"className":1807,"style":568},[411],[395,1809,515],{"className":1810},[416,417],"-digit number in base\n",[395,1813,1815],{"className":1814},[398],[395,1816,1818,1838],{"className":1817,"ariaHidden":403},[402],[395,1819,1821,1825,1829,1832,1835],{"className":1820},[407],[395,1822],{"className":1823,"style":1824},[411],"height:0.6944em;",[395,1826,1828],{"className":1827},[416,417],"b",[395,1830],{"className":1831,"style":702},[432],[395,1833,707],{"className":1834},[706],[395,1836],{"className":1837,"style":702},[432],[395,1839,1841,1844],{"className":1840},[407],[395,1842],{"className":1843,"style":412},[411],[395,1845,1847],{"className":1846},[416],"∣Σ∣"," (mapping characters to digits), reduced modulo a prime ",[395,1850,1852],{"className":1851},[398],[395,1853,1855],{"className":1854,"ariaHidden":403},[402],[395,1856,1858,1862],{"className":1857},[407],[395,1859],{"className":1860,"style":1861},[411],"height:0.625em;vertical-align:-0.1944em;",[395,1863,826],{"className":1864,"style":1865},[416,417],"margin-right:0.0359em;"," to keep\nit machine-word-sized. Precompute the pattern's hash ",[395,1868,1870],{"className":1869},[398],[395,1871,1873,1891],{"className":1872,"ariaHidden":403},[402],[395,1874,1876,1879,1882,1885,1888],{"className":1875},[407],[395,1877],{"className":1878,"style":1861},[411],[395,1880,381],{"className":1881},[416,417],[395,1883],{"className":1884,"style":702},[432],[395,1886,707],{"className":1887},[706],[395,1889],{"className":1890,"style":702},[432],[395,1892,1894,1897,1901,1904,1907],{"className":1893},[407],[395,1895],{"className":1896,"style":412},[411],[395,1898,1900],{"className":1899},[416,417],"h",[395,1902,1049],{"className":1903},[423],[395,1905,493],{"className":1906,"style":418},[416,417],[395,1908,1016],{"className":1909},[475]," and the first\nwindow's hash ",[395,1912,1914],{"className":1913},[398],[395,1915,1917,1990,2035],{"className":1916,"ariaHidden":403},[402],[395,1918,1920,1924,1981,1984,1987],{"className":1919},[407],[395,1921],{"className":1922,"style":1923},[411],"height:0.7651em;vertical-align:-0.15em;",[395,1925,1927,1931],{"className":1926},[416],[395,1928,1930],{"className":1929},[416,417],"t",[395,1932,1935],{"className":1933},[1934],"msupsub",[395,1936,1940,1972],{"className":1937},[1938,1939],"vlist-t","vlist-t2",[395,1941,1944,1967],{"className":1942},[1943],"vlist-r",[395,1945,1949],{"className":1946,"style":1948},[1947],"vlist","height:0.3011em;",[395,1950,1952,1957],{"style":1951},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[395,1953],{"className":1954,"style":1956},[1955],"pstrut","height:2.7em;",[395,1958,1964],{"className":1959},[1960,1961,1962,1963],"sizing","reset-size6","size3","mtight",[395,1965,428],{"className":1966},[416,1963],[395,1968,1971],{"className":1969},[1970],"vlist-s","​",[395,1973,1975],{"className":1974},[1943],[395,1976,1979],{"className":1977,"style":1978},[1947],"height:0.15em;",[395,1980],{},[395,1982],{"className":1983,"style":702},[432],[395,1985,707],{"className":1986},[706],[395,1988],{"className":1989,"style":702},[432],[395,1991,1993,1996,1999,2002,2005,2008,2011,2014,2020,2023,2026,2029,2032],{"className":1992},[407],[395,1994],{"className":1995,"style":412},[411],[395,1997,1900],{"className":1998},[416,417],[395,2000,1049],{"className":2001},[423],[395,2003,419],{"className":2004,"style":418},[416,417],[395,2006,424],{"className":2007},[423],[395,2009,428],{"className":2010},[416],[395,2012],{"className":2013,"style":433},[432],[395,2015,2017],{"className":2016},[437],[395,2018,442],{"className":2019},[441],[395,2021],{"className":2022,"style":433},[432],[395,2024,515],{"className":2025},[416,417],[395,2027],{"className":2028,"style":453},[432],[395,2030,458],{"className":2031},[457],[395,2033],{"className":2034,"style":453},[432],[395,2036,2038,2041,2044],{"className":2037},[407],[395,2039],{"className":2040,"style":412},[411],[395,2042,471],{"className":2043},[416],[395,2045,2047],{"className":2046},[475],"])",". Slide the window one step at a time; if\n",[395,2050,2052],{"className":2051},[398],[395,2053,2055,2111],{"className":2054,"ariaHidden":403},[402],[395,2056,2058,2061,2102,2105,2108],{"className":2057},[407],[395,2059],{"className":2060,"style":1923},[411],[395,2062,2064,2067],{"className":2063},[416],[395,2065,1930],{"className":2066},[416,417],[395,2068,2070],{"className":2069},[1934],[395,2071,2073,2094],{"className":2072},[1938,1939],[395,2074,2076,2091],{"className":2075},[1943],[395,2077,2080],{"className":2078,"style":2079},[1947],"height:0.1514em;",[395,2081,2082,2085],{"style":1951},[395,2083],{"className":2084,"style":1956},[1955],[395,2086,2088],{"className":2087},[1960,1961,1962,1963],[395,2089,572],{"className":2090},[416,417,1963],[395,2092,1971],{"className":2093},[1970],[395,2095,2097],{"className":2096},[1943],[395,2098,2100],{"className":2099,"style":1978},[1947],[395,2101],{},[395,2103],{"className":2104,"style":702},[432],[395,2106,707],{"className":2107},[706],[395,2109],{"className":2110,"style":702},[432],[395,2112,2114,2117],{"className":2113},[407],[395,2115],{"className":2116,"style":1861},[411],[395,2118,381],{"className":2119},[416,417],", the block ",[385,2122,2123],{},"might"," match, so verify it character-by-character to rule out\na hash collision (a ",[385,2126,2127],{},"spurious hit",").",[381,2130,2131,2132,2135,2136,2151,2152,2185,2186,2210,2211,2226,2227,2269],{},"The trick is the ",[390,2133,2134],{},"rolling hash",": when the window slides from position ",[395,2137,2139],{"className":2138},[398],[395,2140,2142],{"className":2141,"ariaHidden":403},[402],[395,2143,2145,2148],{"className":2144},[407],[395,2146],{"className":2147,"style":568},[411],[395,2149,572],{"className":2150},[416,417]," to\n",[395,2153,2155],{"className":2154},[398],[395,2156,2158,2176],{"className":2157,"ariaHidden":403},[402],[395,2159,2161,2164,2167,2170,2173],{"className":2160},[407],[395,2162],{"className":2163,"style":674},[411],[395,2165,572],{"className":2166},[416,417],[395,2168],{"className":2169,"style":453},[432],[395,2171,664],{"className":2172},[457],[395,2174],{"className":2175,"style":453},[432],[395,2177,2179,2182],{"className":2178},[407],[395,2180],{"className":2181,"style":769},[411],[395,2183,471],{"className":2184},[416],", we do not recompute the hash from scratch. We drop the contribution of the\ndeparting high-order digit ",[395,2187,2189],{"className":2188},[398],[395,2190,2192],{"className":2191,"ariaHidden":403},[402],[395,2193,2195,2198,2201,2204,2207],{"className":2194},[407],[395,2196],{"className":2197,"style":412},[411],[395,2199,419],{"className":2200,"style":418},[416,417],[395,2202,424],{"className":2203},[423],[395,2205,572],{"className":2206},[416,417],[395,2208,476],{"className":2209},[475],", shift the remaining digits up by one place\n(multiply by ",[395,2212,2214],{"className":2213},[398],[395,2215,2217],{"className":2216,"ariaHidden":403},[402],[395,2218,2220,2223],{"className":2219},[407],[395,2221],{"className":2222,"style":1824},[411],[395,2224,1828],{"className":2225},[416,417],"), and add the incoming low-order digit ",[395,2228,2230],{"className":2229},[398],[395,2231,2233,2257],{"className":2232,"ariaHidden":403},[402],[395,2234,2236,2239,2242,2245,2248,2251,2254],{"className":2235},[407],[395,2237],{"className":2238,"style":412},[411],[395,2240,419],{"className":2241,"style":418},[416,417],[395,2243,424],{"className":2244},[423],[395,2246,572],{"className":2247},[416,417],[395,2249],{"className":2250,"style":453},[432],[395,2252,664],{"className":2253},[457],[395,2255],{"className":2256,"style":453},[432],[395,2258,2260,2263,2266],{"className":2259},[407],[395,2261],{"className":2262,"style":412},[411],[395,2264,515],{"className":2265},[416,417],[395,2267,476],{"className":2268},[475],":",[395,2271,2274],{"className":2272},[2273],"katex-display",[395,2275,2277],{"className":2276},[398],[395,2278,2280,2336,2372,2449,2473,2515],{"className":2279,"ariaHidden":403},[402],[395,2281,2283,2287,2321,2324,2327,2330,2333],{"className":2282},[407],[395,2284],{"className":2285,"style":2286},[411],"height:0.8019em;",[395,2288,2290,2293],{"className":2289},[416],[395,2291,1900],{"className":2292},[416,417],[395,2294,2296],{"className":2295},[1934],[395,2297,2299],{"className":2298},[1938],[395,2300,2302],{"className":2301},[1943],[395,2303,2305],{"className":2304,"style":2286},[1947],[395,2306,2308,2311],{"style":2307},"top:-3.113em;margin-right:0.05em;",[395,2309],{"className":2310,"style":1956},[1955],[395,2312,2314],{"className":2313},[1960,1961,1962,1963],[395,2315,2317],{"className":2316},[416,1963],[395,2318,2320],{"className":2319},[416,1963],"′",[395,2322],{"className":2323,"style":702},[432],[395,2325],{"className":2326,"style":702},[432],[395,2328,707],{"className":2329},[706],[395,2331],{"className":2332,"style":702},[432],[395,2334],{"className":2335,"style":702},[432],[395,2337,2339,2343,2351,2354,2357,2360,2363,2366,2369],{"className":2338},[407],[395,2340],{"className":2341,"style":2342},[411],"height:1.2em;vertical-align:-0.35em;",[395,2344,2346],{"className":2345},[423],[395,2347,1049],{"className":2348},[2349,2350],"delimsizing","size1",[395,2352,1828],{"className":2353},[416,417],[395,2355],{"className":2356,"style":433},[432],[395,2358,1049],{"className":2359},[423],[395,2361,1900],{"className":2362},[416,417],[395,2364],{"className":2365,"style":453},[432],[395,2367,458],{"className":2368},[457],[395,2370],{"className":2371,"style":453},[432],[395,2373,2375,2379,2382,2385,2388,2391,2394,2437,2440,2443,2446],{"className":2374},[407],[395,2376],{"className":2377,"style":2378},[411],"height:1.1141em;vertical-align:-0.25em;",[395,2380,419],{"className":2381,"style":418},[416,417],[395,2383,424],{"className":2384},[423],[395,2386,572],{"className":2387},[416,417],[395,2389,476],{"className":2390},[475],[395,2392],{"className":2393,"style":433},[432],[395,2395,2397,2400],{"className":2396},[416],[395,2398,1828],{"className":2399},[416,417],[395,2401,2403],{"className":2402},[1934],[395,2404,2406],{"className":2405},[1938],[395,2407,2409],{"className":2408},[1943],[395,2410,2413],{"className":2411,"style":2412},[1947],"height:0.8641em;",[395,2414,2415,2418],{"style":2307},[395,2416],{"className":2417,"style":1956},[1955],[395,2419,2421],{"className":2420},[1960,1961,1962,1963],[395,2422,2424,2428,2431,2434],{"className":2423},[416,1963],[395,2425],{"className":2426,"style":2427},[432,1963],"margin-right:0.1952em;",[395,2429,515],{"className":2430},[416,417,1963],[395,2432,458],{"className":2433},[457,1963],[395,2435,471],{"className":2436},[416,1963],[395,2438,1016],{"className":2439},[475],[395,2441],{"className":2442,"style":453},[432],[395,2444,664],{"className":2445},[457],[395,2447],{"className":2448,"style":453},[432],[395,2450,2452,2455,2458,2461,2464,2467,2470],{"className":2451},[407],[395,2453],{"className":2454,"style":412},[411],[395,2456,419],{"className":2457,"style":418},[416,417],[395,2459,424],{"className":2460},[423],[395,2462,572],{"className":2463},[416,417],[395,2465],{"className":2466,"style":453},[432],[395,2468,664],{"className":2469},[457],[395,2471],{"className":2472,"style":453},[432],[395,2474,2476,2479,2482,2485,2491,2495,2498,2509,2512],{"className":2475},[407],[395,2477],{"className":2478,"style":2342},[411],[395,2480,515],{"className":2481},[416,417],[395,2483,476],{"className":2484},[475],[395,2486,2488],{"className":2487},[475],[395,2489,1016],{"className":2490},[2349,2350],[395,2492],{"className":2493,"style":2494},[432],"margin-right:0.0556em;",[395,2496],{"className":2497,"style":453},[432],[395,2499,2501],{"className":2500},[457],[395,2502,2504],{"className":2503},[416],[395,2505,2508],{"className":2506},[416,2507],"mathrm","mod",[395,2510],{"className":2511,"style":2494},[432],[395,2513],{"className":2514,"style":453},[432],[395,2516,2518,2521,2524],{"className":2517},[407],[395,2519],{"className":2520,"style":1861},[411],[395,2522,826],{"className":2523,"style":1865},[416,417],[395,2525,2527],{"className":2526},[416],".",[381,2529,2530,2531,2613,2614,2638,2639,2690,2691,2715],{},"The factor ",[395,2532,2534],{"className":2533},[398],[395,2535,2537,2604],{"className":2536,"ariaHidden":403},[402],[395,2538,2540,2544,2583,2586,2589,2598,2601],{"className":2539},[407],[395,2541],{"className":2542,"style":2543},[411],"height:0.8141em;",[395,2545,2547,2550],{"className":2546},[416],[395,2548,1828],{"className":2549},[416,417],[395,2551,2553],{"className":2552},[1934],[395,2554,2556],{"className":2555},[1938],[395,2557,2559],{"className":2558},[1943],[395,2560,2562],{"className":2561,"style":2543},[1947],[395,2563,2565,2568],{"style":2564},"top:-3.063em;margin-right:0.05em;",[395,2566],{"className":2567,"style":1956},[1955],[395,2569,2571],{"className":2570},[1960,1961,1962,1963],[395,2572,2574,2577,2580],{"className":2573},[416,1963],[395,2575,515],{"className":2576},[416,417,1963],[395,2578,458],{"className":2579},[457,1963],[395,2581,471],{"className":2582},[416,1963],[395,2584],{"className":2585,"style":2494},[432],[395,2587],{"className":2588,"style":453},[432],[395,2590,2592],{"className":2591},[457],[395,2593,2595],{"className":2594},[416],[395,2596,2508],{"className":2597},[416,2507],[395,2599],{"className":2600,"style":2494},[432],[395,2602],{"className":2603,"style":453},[432],[395,2605,2607,2610],{"className":2606},[407],[395,2608],{"className":2609,"style":1861},[411],[395,2611,826],{"className":2612,"style":1865},[416,417]," is precomputed once. Each slide is ",[395,2615,2617],{"className":2616},[398],[395,2618,2620],{"className":2619,"ariaHidden":403},[402],[395,2621,2623,2626,2629,2632,2635],{"className":2622},[407],[395,2624],{"className":2625,"style":412},[411],[395,2627,1045],{"className":2628,"style":1044},[416,417],[395,2630,1049],{"className":2631},[423],[395,2633,471],{"className":2634},[416],[395,2636,1016],{"className":2637},[475]," arithmetic,\nso building all ",[395,2640,2642],{"className":2641},[398],[395,2643,2645,2663,2681],{"className":2644,"ariaHidden":403},[402],[395,2646,2648,2651,2654,2657,2660],{"className":2647},[407],[395,2649],{"className":2650,"style":674},[411],[395,2652,449],{"className":2653},[416,417],[395,2655],{"className":2656,"style":453},[432],[395,2658,458],{"className":2659},[457],[395,2661],{"className":2662,"style":453},[432],[395,2664,2666,2669,2672,2675,2678],{"className":2665},[407],[395,2667],{"className":2668,"style":674},[411],[395,2670,515],{"className":2671},[416,417],[395,2673],{"className":2674,"style":453},[432],[395,2676,664],{"className":2677},[457],[395,2679],{"className":2680,"style":453},[432],[395,2682,2684,2687],{"className":2683},[407],[395,2685],{"className":2686,"style":769},[411],[395,2688,471],{"className":2689},[416]," window hashes costs ",[395,2692,2694],{"className":2693},[398],[395,2695,2697],{"className":2696,"ariaHidden":403},[402],[395,2698,2700,2703,2706,2709,2712],{"className":2699},[407],[395,2701],{"className":2702,"style":412},[411],[395,2704,1045],{"className":2705,"style":1044},[416,417],[395,2707,1049],{"className":2708},[423],[395,2710,449],{"className":2711},[416,417],[395,2713,1016],{"className":2714},[475]," in total.",[1307,2717,2719,2975],{"className":2718},[1310,1311],[1313,2720,2724],{"xmlns":1315,"width":2721,"height":2722,"viewBox":2723},"251.437","144.754","-75 -75 188.578 108.565",[1320,2725,2726,2729,2736,2739,2746,2749,2756,2759,2765,2768,2774,2777,2783,2786,2825,2829,2880,2922],{"stroke":1322,"style":1323},[1325,2727],{"fill":1327,"d":2728},"M-47.804-1.423h22.762v-22.762h-22.762Z",[1320,2730,2732],{"transform":2731},"translate(-2.002 1.937)",[1325,2733],{"d":2734,"fill":1322,"stroke":1322,"className":2735,"style":1337},"M-35.333-13.911Q-35.333-13.516-35.120-13.241Q-34.907-12.967-34.525-12.967Q-33.980-12.967-33.474-13.202Q-32.969-13.437-32.652-13.859Q-32.631-13.894-32.569-13.894Q-32.512-13.894-32.466-13.843Q-32.420-13.793-32.420-13.740Q-32.420-13.705-32.446-13.679Q-32.793-13.204-33.356-12.953Q-33.918-12.703-34.542-12.703Q-34.973-12.703-35.322-12.905Q-35.672-13.107-35.863-13.463Q-36.054-13.819-36.054-14.245Q-36.054-14.707-35.852-15.164Q-35.650-15.621-35.294-15.990Q-34.938-16.359-34.494-16.570Q-34.050-16.781-33.580-16.781Q-33.312-16.781-33.063-16.700Q-32.815-16.618-32.648-16.440Q-32.481-16.262-32.481-15.999Q-32.481-15.762-32.631-15.584Q-32.780-15.406-33.013-15.406Q-33.153-15.406-33.259-15.500Q-33.364-15.595-33.364-15.740Q-33.364-15.942-33.217-16.096Q-33.070-16.249-32.868-16.249Q-32.973-16.390-33.178-16.456Q-33.382-16.522-33.589-16.522Q-34.125-16.522-34.522-16.093Q-34.920-15.665-35.127-15.045Q-35.333-14.426-35.333-13.911",[1336],[1325,2737],{"fill":1327,"d":2738},"M-20.774-1.423H1.988v-22.762h-22.762Z",[1320,2740,2742],{"transform":2741},"translate(24.58 1.937)",[1325,2743],{"d":2744,"fill":1322,"stroke":1322,"className":2745,"style":1337},"M-34.801-12.703Q-35.197-12.703-35.483-12.907Q-35.768-13.112-35.915-13.446Q-36.063-13.780-36.063-14.171Q-36.063-14.606-35.889-15.067Q-35.715-15.529-35.403-15.920Q-35.091-16.311-34.681-16.546Q-34.270-16.781-33.830-16.781Q-33.562-16.781-33.345-16.643Q-33.127-16.504-32.995-16.258Q-32.956-16.408-32.848-16.504Q-32.740-16.601-32.600-16.601Q-32.477-16.601-32.393-16.528Q-32.310-16.456-32.310-16.333Q-32.310-16.280-32.319-16.249L-32.938-13.758Q-32.995-13.560-32.995-13.362Q-32.995-12.967-32.732-12.967Q-32.446-12.967-32.312-13.290Q-32.178-13.613-32.059-14.118Q-32.050-14.149-32.026-14.173Q-32.002-14.197-31.967-14.197L-31.861-14.197Q-31.813-14.197-31.791-14.164Q-31.769-14.131-31.769-14.083Q-31.883-13.652-31.974-13.399Q-32.064-13.147-32.257-12.925Q-32.450-12.703-32.749-12.703Q-33.057-12.703-33.305-12.874Q-33.553-13.046-33.624-13.336Q-33.879-13.050-34.175-12.877Q-34.472-12.703-34.801-12.703M-34.784-12.967Q-34.454-12.967-34.144-13.208Q-33.835-13.450-33.624-13.766Q-33.615-13.775-33.615-13.793L-33.118-15.757Q-33.175-16.074-33.367-16.298Q-33.558-16.522-33.848-16.522Q-34.217-16.522-34.516-16.203Q-34.815-15.885-34.982-15.476Q-35.118-15.129-35.243-14.619Q-35.368-14.109-35.368-13.784Q-35.368-13.459-35.230-13.213Q-35.091-12.967-34.784-12.967",[1336],[1325,2747],{"fill":1327,"d":2748},"M6.256-1.423h22.762v-22.762H6.256Z",[1320,2750,2752],{"transform":2751},"translate(52.078 3.125)",[1325,2753],{"d":2754,"fill":1322,"stroke":1322,"className":2755,"style":1337},"M-34.801-12.703Q-35.377-12.703-35.698-13.134Q-36.019-13.564-36.019-14.144Q-36.019-14.549-35.935-14.777L-35.056-18.275Q-35.021-18.425-35.021-18.499Q-35.021-18.636-35.588-18.636Q-35.685-18.636-35.685-18.754Q-35.685-18.811-35.654-18.882Q-35.623-18.952-35.557-18.952L-34.336-19.049Q-34.283-19.049-34.250-19.020Q-34.217-18.992-34.217-18.943L-34.217-18.908L-34.876-16.298Q-34.353-16.781-33.830-16.781Q-33.444-16.781-33.153-16.577Q-32.863-16.372-32.716-16.038Q-32.569-15.704-32.569-15.313Q-32.569-14.729-32.872-14.120Q-33.175-13.512-33.696-13.107Q-34.217-12.703-34.801-12.703M-34.784-12.967Q-34.415-12.967-34.111-13.290Q-33.808-13.613-33.650-14.008Q-33.505-14.364-33.384-14.872Q-33.263-15.379-33.263-15.700Q-33.263-16.025-33.408-16.273Q-33.553-16.522-33.848-16.522Q-34.450-16.522-35.021-15.722L-35.263-14.729Q-35.408-14.105-35.408-13.841Q-35.408-13.498-35.256-13.232Q-35.105-12.967-34.784-12.967",[1336],[1325,2757],{"fill":1327,"d":2758},"M33.286-1.423h22.762v-22.762H33.286Z",[1320,2760,2762],{"transform":2761},"translate(79.088 1.937)",[1325,2763],{"d":2734,"fill":1322,"stroke":1322,"className":2764,"style":1337},[1336],[1325,2766],{"fill":1327,"d":2767},"M60.316-1.423h22.762v-22.762H60.316Z",[1320,2769,2771],{"transform":2770},"translate(105.67 1.937)",[1325,2772],{"d":2744,"fill":1322,"stroke":1322,"className":2773,"style":1337},[1336],[1325,2775],{"fill":1327,"d":2776},"M87.346-1.423h22.762v-22.762H87.346Z",[1320,2778,2780],{"transform":2779},"translate(133.168 3.125)",[1325,2781],{"d":2754,"fill":1322,"stroke":1322,"className":2782,"style":1337},[1336],[1325,2784],{"fill":1327,"d":2785,"style":1419},"M-49.227.422V-26.03a1 1 0 0 1 1-1h77.668a1 1 0 0 1 1 1V.422a1 1 0 0 1-1 1h-77.668a1 1 0 0 1-1-1ZM30.441-27.03",[1320,2787,2788,2795,2801,2807,2813,2819],{"stroke":1327,"fontSize":1431},[1320,2789,2791],{"transform":2790},"translate(5.522 39.766)",[1325,2792],{"d":2793,"fill":1322,"stroke":1322,"className":2794,"style":1391},"M-34.599-12.835L-35.669-15.691Q-35.736-15.870-35.866-15.913Q-35.997-15.956-36.255-15.956L-36.255-16.253L-34.575-16.253L-34.575-15.956Q-35.025-15.956-35.025-15.757Q-35.021-15.742-35.019-15.724Q-35.017-15.706-35.017-15.691L-34.224-13.597L-33.513-15.507Q-33.548-15.601-33.548-15.646Q-33.548-15.691-33.583-15.691Q-33.650-15.870-33.780-15.913Q-33.911-15.956-34.165-15.956L-34.165-16.253L-32.575-16.253L-32.575-15.956Q-33.025-15.956-33.025-15.757Q-33.021-15.738-33.019-15.720Q-33.017-15.702-33.017-15.691L-32.185-13.476L-31.431-15.476Q-31.407-15.534-31.407-15.605Q-31.407-15.765-31.544-15.861Q-31.681-15.956-31.849-15.956L-31.849-16.253L-30.462-16.253L-30.462-15.956Q-30.696-15.956-30.874-15.829Q-31.052-15.702-31.134-15.476L-32.118-12.835Q-32.173-12.726-32.286-12.726L-32.345-12.726Q-32.458-12.726-32.501-12.835L-33.361-15.109L-34.216-12.835Q-34.255-12.726-34.376-12.726L-34.431-12.726Q-34.544-12.726-34.599-12.835M-28.189-12.804L-29.966-12.804L-29.966-13.101Q-29.693-13.101-29.525-13.148Q-29.357-13.195-29.357-13.363L-29.357-15.499Q-29.357-15.714-29.413-15.810Q-29.470-15.906-29.583-15.927Q-29.696-15.949-29.943-15.949L-29.943-16.245L-28.743-16.331L-28.743-13.363Q-28.743-13.195-28.597-13.148Q-28.450-13.101-28.189-13.101L-28.189-12.804M-29.630-17.726Q-29.630-17.917-29.495-18.048Q-29.361-18.179-29.165-18.179Q-29.044-18.179-28.941-18.117Q-28.837-18.054-28.775-17.950Q-28.712-17.847-28.712-17.726Q-28.712-17.531-28.843-17.396Q-28.974-17.261-29.165-17.261Q-29.364-17.261-29.497-17.394Q-29.630-17.527-29.630-17.726M-25.759-12.804L-27.614-12.804L-27.614-13.101Q-27.341-13.101-27.173-13.148Q-27.005-13.195-27.005-13.363L-27.005-15.499Q-27.005-15.714-27.068-15.810Q-27.130-15.906-27.249-15.927Q-27.368-15.949-27.614-15.949L-27.614-16.245L-26.423-16.331L-26.423-15.597Q-26.310-15.812-26.116-15.980Q-25.923-16.148-25.685-16.240Q-25.446-16.331-25.193-16.331Q-24.025-16.331-24.025-15.253L-24.025-13.363Q-24.025-13.195-23.855-13.148Q-23.685-13.101-23.415-13.101L-23.415-12.804L-25.271-12.804L-25.271-13.101Q-24.997-13.101-24.829-13.148Q-24.661-13.195-24.661-13.363L-24.661-15.238Q-24.661-15.620-24.782-15.849Q-24.903-16.077-25.255-16.077Q-25.568-16.077-25.821-15.915Q-26.075-15.753-26.222-15.484Q-26.368-15.214-26.368-14.917L-26.368-13.363Q-26.368-13.195-26.198-13.148Q-26.028-13.101-25.759-13.101L-25.759-12.804M-21.153-12.726Q-21.634-12.726-22.042-12.970Q-22.450-13.214-22.689-13.628Q-22.927-14.042-22.927-14.531Q-22.927-15.023-22.669-15.439Q-22.411-15.855-21.980-16.093Q-21.548-16.331-21.056-16.331Q-20.435-16.331-19.986-15.894L-19.986-17.523Q-19.986-17.738-20.048-17.833Q-20.111-17.929-20.228-17.950Q-20.345-17.972-20.591-17.972L-20.591-18.269L-19.368-18.355L-19.368-13.546Q-19.368-13.335-19.306-13.240Q-19.243-13.144-19.126-13.122Q-19.009-13.101-18.759-13.101L-18.759-12.804L-20.009-12.726L-20.009-13.210Q-20.474-12.726-21.153-12.726M-21.087-12.980Q-20.747-12.980-20.454-13.171Q-20.161-13.363-20.009-13.659L-20.009-15.492Q-20.157-15.765-20.419-15.921Q-20.681-16.077-20.993-16.077Q-21.618-16.077-21.902-15.630Q-22.185-15.183-22.185-14.523Q-22.185-13.878-21.933-13.429Q-21.681-12.980-21.087-12.980M-18.251-14.499Q-18.251-15.003-17.995-15.435Q-17.739-15.867-17.304-16.118Q-16.868-16.370-16.368-16.370Q-15.982-16.370-15.640-16.226Q-15.298-16.081-15.036-15.820Q-14.775-15.558-14.632-15.222Q-14.489-14.886-14.489-14.499Q-14.489-14.007-14.753-13.597Q-15.017-13.187-15.446-12.956Q-15.876-12.726-16.368-12.726Q-16.861-12.726-17.294-12.958Q-17.728-13.191-17.989-13.599Q-18.251-14.007-18.251-14.499M-16.368-13.003Q-15.911-13.003-15.659-13.226Q-15.407-13.449-15.319-13.800Q-15.232-14.152-15.232-14.597Q-15.232-15.027-15.325-15.365Q-15.419-15.702-15.673-15.909Q-15.927-16.117-16.368-16.117Q-17.017-16.117-17.261-15.700Q-17.505-15.284-17.505-14.597Q-17.505-14.152-17.417-13.800Q-17.329-13.449-17.077-13.226Q-16.825-13.003-16.368-13.003",[1336],[1320,2796,2797],{"transform":2790},[1325,2798],{"d":2799,"fill":1322,"stroke":1322,"className":2800,"style":1391},"M-12.640-12.835L-13.710-15.691Q-13.777-15.870-13.907-15.913Q-14.038-15.956-14.296-15.956L-14.296-16.253L-12.616-16.253L-12.616-15.956Q-13.066-15.956-13.066-15.757Q-13.062-15.742-13.060-15.724Q-13.058-15.706-13.058-15.691L-12.265-13.597L-11.554-15.507Q-11.589-15.601-11.589-15.646Q-11.589-15.691-11.624-15.691Q-11.691-15.870-11.821-15.913Q-11.952-15.956-12.206-15.956L-12.206-16.253L-10.616-16.253L-10.616-15.956Q-11.066-15.956-11.066-15.757Q-11.062-15.738-11.060-15.720Q-11.058-15.702-11.058-15.691L-10.226-13.476L-9.472-15.476Q-9.448-15.534-9.448-15.605Q-9.448-15.765-9.585-15.861Q-9.722-15.956-9.890-15.956L-9.890-16.253L-8.503-16.253L-8.503-15.956Q-8.737-15.956-8.915-15.829Q-9.093-15.702-9.175-15.476L-10.159-12.835Q-10.214-12.726-10.327-12.726L-10.386-12.726Q-10.499-12.726-10.542-12.835L-11.402-15.109L-12.257-12.835Q-12.296-12.726-12.417-12.726L-12.472-12.726Q-12.585-12.726-12.640-12.835",[1336],[1320,2802,2803],{"transform":2790},[1325,2804],{"d":2805,"fill":1322,"stroke":1322,"className":2806,"style":1391},"M-4.699-13.284Q-4.484-12.980-3.820-12.980Q-3.390-12.980-3.033-13.181Q-2.676-13.382-2.676-13.781Q-2.676-13.984-2.836-14.107Q-2.996-14.230-3.203-14.269L-3.668-14.355Q-3.984-14.425-4.199-14.632Q-4.414-14.839-4.414-15.148Q-4.414-15.511-4.209-15.783Q-4.004-16.054-3.674-16.193Q-3.344-16.331-2.988-16.331Q-2.601-16.331-2.291-16.163Q-1.980-15.995-1.980-15.644Q-1.980-15.452-2.086-15.312Q-2.191-15.171-2.379-15.171Q-2.488-15.171-2.570-15.243Q-2.652-15.316-2.652-15.429Q-2.652-15.574-2.554-15.683Q-2.457-15.792-2.316-15.812Q-2.406-15.956-2.597-16.017Q-2.789-16.077-3.004-16.077Q-3.336-16.077-3.609-15.906Q-3.883-15.734-3.883-15.421Q-3.883-15.265-3.771-15.171Q-3.660-15.077-3.484-15.034L-3.027-14.949Q-2.652-14.878-2.400-14.646Q-2.148-14.413-2.148-14.050Q-2.148-13.777-2.293-13.509Q-2.437-13.242-2.676-13.062Q-3.152-12.726-3.836-12.726Q-4.113-12.726-4.394-12.798Q-4.676-12.870-4.867-13.044Q-5.058-13.218-5.058-13.499Q-5.058-13.722-4.929-13.886Q-4.801-14.050-4.582-14.050Q-4.437-14.050-4.349-13.968Q-4.262-13.886-4.262-13.749Q-4.262-13.570-4.392-13.427Q-4.523-13.284-4.699-13.284",[1336],[1320,2808,2809],{"transform":2790},[1325,2810],{"d":2811,"fill":1322,"stroke":1322,"className":2812,"style":1391},"M-0.843-13.269Q-0.843-13.452-0.707-13.589Q-0.570-13.726-0.378-13.726Q-0.187-13.726-0.054-13.593Q0.079-13.460 0.079-13.269Q0.079-13.070-0.054-12.937Q-0.187-12.804-0.378-12.804Q-0.570-12.804-0.707-12.941Q-0.843-13.077-0.843-13.269M-0.843-15.796Q-0.843-15.980-0.707-16.117Q-0.570-16.253-0.378-16.253Q-0.187-16.253-0.054-16.120Q0.079-15.988 0.079-15.796Q0.079-15.597-0.054-15.464Q-0.187-15.331-0.378-15.331Q-0.570-15.331-0.707-15.468Q-0.843-15.605-0.843-15.796",[1336],[1320,2814,2815],{"transform":2790},[1325,2816],{"d":2817,"fill":1322,"stroke":1322,"className":2818,"style":1391},"M6.745-12.804L4.890-12.804L4.890-13.101Q5.163-13.101 5.331-13.148Q5.499-13.195 5.499-13.363L5.499-17.523Q5.499-17.738 5.436-17.833Q5.374-17.929 5.255-17.950Q5.136-17.972 4.890-17.972L4.890-18.269L6.112-18.355L6.112-15.652Q6.237-15.863 6.425-16.013Q6.612-16.163 6.839-16.247Q7.065-16.331 7.311-16.331Q8.479-16.331 8.479-15.253L8.479-13.363Q8.479-13.195 8.649-13.148Q8.819-13.101 9.089-13.101L9.089-12.804L7.233-12.804L7.233-13.101Q7.507-13.101 7.675-13.148Q7.843-13.195 7.843-13.363L7.843-15.238Q7.843-15.620 7.722-15.849Q7.600-16.077 7.249-16.077Q6.936-16.077 6.682-15.915Q6.429-15.753 6.282-15.484Q6.136-15.214 6.136-14.917L6.136-13.363Q6.136-13.195 6.306-13.148Q6.475-13.101 6.745-13.101L6.745-12.804M9.632-13.636Q9.632-14.120 10.034-14.415Q10.436-14.710 10.987-14.829Q11.538-14.949 12.030-14.949L12.030-15.238Q12.030-15.464 11.915-15.671Q11.800-15.878 11.602-15.997Q11.405-16.117 11.175-16.117Q10.749-16.117 10.464-16.011Q10.534-15.984 10.581-15.929Q10.628-15.874 10.653-15.804Q10.679-15.734 10.679-15.659Q10.679-15.554 10.628-15.462Q10.577-15.370 10.485-15.320Q10.393-15.269 10.288-15.269Q10.182-15.269 10.091-15.320Q9.999-15.370 9.948-15.462Q9.897-15.554 9.897-15.659Q9.897-16.077 10.286-16.224Q10.675-16.370 11.175-16.370Q11.507-16.370 11.860-16.240Q12.214-16.109 12.442-15.855Q12.671-15.601 12.671-15.253L12.671-13.452Q12.671-13.320 12.743-13.210Q12.815-13.101 12.944-13.101Q13.069-13.101 13.138-13.206Q13.206-13.312 13.206-13.452L13.206-13.964L13.487-13.964L13.487-13.452Q13.487-13.249 13.370-13.091Q13.253-12.933 13.071-12.849Q12.890-12.765 12.686-12.765Q12.456-12.765 12.304-12.937Q12.151-13.109 12.120-13.339Q11.960-13.058 11.651-12.892Q11.343-12.726 10.991-12.726Q10.479-12.726 10.056-12.949Q9.632-13.171 9.632-13.636M10.319-13.636Q10.319-13.351 10.546-13.165Q10.772-12.980 11.065-12.980Q11.311-12.980 11.536-13.097Q11.761-13.214 11.895-13.417Q12.030-13.620 12.030-13.874L12.030-14.706Q11.765-14.706 11.479-14.652Q11.194-14.597 10.923-14.468Q10.651-14.339 10.485-14.132Q10.319-13.925 10.319-13.636M13.823-12.812L13.823-14.034Q13.823-14.062 13.854-14.093Q13.886-14.124 13.909-14.124L14.014-14.124Q14.085-14.124 14.100-14.062Q14.163-13.742 14.302-13.501Q14.440-13.261 14.673-13.120Q14.905-12.980 15.214-12.980Q15.452-12.980 15.661-13.040Q15.870-13.101 16.007-13.249Q16.143-13.398 16.143-13.644Q16.143-13.898 15.932-14.064Q15.722-14.230 15.452-14.284L14.831-14.398Q14.425-14.476 14.124-14.732Q13.823-14.988 13.823-15.363Q13.823-15.730 14.024-15.952Q14.225-16.175 14.550-16.273Q14.874-16.370 15.214-16.370Q15.679-16.370 15.975-16.163L16.198-16.347Q16.222-16.370 16.253-16.370L16.304-16.370Q16.335-16.370 16.362-16.343Q16.389-16.316 16.389-16.284L16.389-15.300Q16.389-15.269 16.364-15.240Q16.339-15.210 16.304-15.210L16.198-15.210Q16.163-15.210 16.136-15.238Q16.108-15.265 16.108-15.300Q16.108-15.699 15.856-15.919Q15.604-16.140 15.206-16.140Q14.850-16.140 14.567-16.017Q14.284-15.894 14.284-15.589Q14.284-15.370 14.485-15.238Q14.686-15.105 14.932-15.062L15.557-14.949Q15.987-14.859 16.296-14.562Q16.604-14.265 16.604-13.851Q16.604-13.281 16.206-13.003Q15.807-12.726 15.214-12.726Q14.663-12.726 14.311-13.062L14.014-12.749Q13.991-12.726 13.956-12.726L13.909-12.726Q13.886-12.726 13.854-12.757Q13.823-12.788 13.823-12.812M19.061-12.804L17.206-12.804L17.206-13.101Q17.479-13.101 17.647-13.148Q17.815-13.195 17.815-13.363L17.815-17.523Q17.815-17.738 17.753-17.833Q17.690-17.929 17.571-17.950Q17.452-17.972 17.206-17.972L17.206-18.269L18.429-18.355L18.429-15.652Q18.554-15.863 18.741-16.013Q18.929-16.163 19.155-16.247Q19.382-16.331 19.628-16.331Q20.796-16.331 20.796-15.253L20.796-13.363Q20.796-13.195 20.966-13.148Q21.136-13.101 21.405-13.101L21.405-12.804L19.550-12.804L19.550-13.101Q19.823-13.101 19.991-13.148Q20.159-13.195 20.159-13.363L20.159-15.238Q20.159-15.620 20.038-15.849Q19.917-16.077 19.565-16.077Q19.253-16.077 18.999-15.915Q18.745-15.753 18.598-15.484Q18.452-15.214 18.452-14.917L18.452-13.363Q18.452-13.195 18.622-13.148Q18.792-13.101 19.061-13.101",[1336],[1320,2820,2821],{"transform":2790},[1325,2822],{"d":2823,"fill":1322,"stroke":1322,"className":2824,"style":1391},"M24.899-12.980Q24.903-12.999 24.905-13.013Q24.907-13.027 24.907-13.050L26.060-17.652Q26.099-17.839 26.099-17.867Q26.099-17.972 25.603-17.972Q25.505-18.003 25.505-18.101L25.528-18.202Q25.536-18.249 25.618-18.269L26.724-18.355Q26.774-18.355 26.808-18.325Q26.841-18.296 26.841-18.238L26.220-15.734Q26.462-16.011 26.772-16.171Q27.083-16.331 27.435-16.331Q27.888-16.331 28.169-16.105Q28.450-15.878 28.450-15.445Q28.450-15.105 28.317-14.704Q28.185-14.304 27.931-13.636Q27.833-13.421 27.833-13.230Q27.833-12.980 28.009-12.980Q28.317-12.980 28.536-13.296Q28.755-13.613 28.841-13.980Q28.868-14.050 28.931-14.050L29.032-14.050Q29.071-14.050 29.097-14.021Q29.122-13.992 29.122-13.956Q29.122-13.941 29.114-13.925Q29.040-13.636 28.890-13.365Q28.739-13.093 28.509-12.909Q28.278-12.726 27.993-12.726Q27.688-12.726 27.470-12.913Q27.251-13.101 27.251-13.406Q27.251-13.570 27.306-13.691Q27.548-14.335 27.690-14.777Q27.833-15.218 27.833-15.546Q27.833-15.781 27.737-15.929Q27.642-16.077 27.419-16.077Q26.591-16.077 26.032-15.003L25.528-12.995Q25.497-12.874 25.399-12.800Q25.302-12.726 25.177-12.726Q25.063-12.726 24.981-12.796Q24.899-12.867 24.899-12.980",[1336],[1325,2826],{"fill":1327,"stroke":2827,"d":2828,"style":1419},"var(--tk-accent)","M-20.774-29.453v-23.608a1 1 0 0 1 1-1h77.668a1 1 0 0 1 1 1v23.608a1 1 0 0 1-1 1h-77.668a1 1 0 0 1-1-1Zm79.668-24.608",[1320,2830,2831],{"fill":2827,"stroke":2827},[1320,2832,2833,2839,2844,2849,2855,2861,2867,2873],{"fill":2827,"stroke":1327},[1320,2834,2836],{"transform":2835},"translate(15.815 -49.976)",[1325,2837],{"d":2793,"fill":2827,"stroke":2827,"className":2838,"style":1391},[1336],[1320,2840,2841],{"transform":2835},[1325,2842],{"d":2799,"fill":2827,"stroke":2827,"className":2843,"style":1391},[1336],[1320,2845,2846],{"transform":2835},[1325,2847],{"d":2805,"fill":2827,"stroke":2827,"className":2848,"style":1391},[1336],[1320,2850,2851],{"transform":2835},[1325,2852],{"d":2853,"fill":2827,"stroke":2827,"className":2854,"style":1391},"M1.559-14.620L-0.914-14.620Q-0.992-14.632-1.041-14.681Q-1.089-14.730-1.089-14.804Q-1.089-14.878-1.041-14.927Q-0.992-14.976-0.914-14.988L1.559-14.988L1.559-17.468Q1.586-17.636 1.743-17.636Q1.817-17.636 1.866-17.587Q1.915-17.538 1.926-17.468L1.926-14.988L4.399-14.988Q4.567-14.956 4.567-14.804Q4.567-14.652 4.399-14.620L1.926-14.620L1.926-12.140Q1.915-12.070 1.866-12.021Q1.817-11.972 1.743-11.972Q1.586-11.972 1.559-12.140",[1336],[1320,2856,2857],{"transform":2835},[1325,2858],{"d":2859,"fill":2827,"stroke":2827,"className":2860,"style":1391},"M8.644-12.804L5.851-12.804L5.851-13.101Q6.913-13.101 6.913-13.363L6.913-17.531Q6.484-17.316 5.804-17.316L5.804-17.613Q6.823-17.613 7.339-18.124L7.484-18.124Q7.558-18.105 7.577-18.027L7.577-13.363Q7.577-13.101 8.644-13.101L8.644-12.804M10.015-13.269Q10.015-13.452 10.152-13.589Q10.288-13.726 10.480-13.726Q10.671-13.726 10.804-13.593Q10.937-13.460 10.937-13.269Q10.937-13.070 10.804-12.937Q10.671-12.804 10.480-12.804Q10.288-12.804 10.152-12.941Q10.015-13.077 10.015-13.269M10.015-15.796Q10.015-15.980 10.152-16.117Q10.288-16.253 10.480-16.253Q10.671-16.253 10.804-16.120Q10.937-15.988 10.937-15.796Q10.937-15.597 10.804-15.464Q10.671-15.331 10.480-15.331Q10.288-15.331 10.152-15.468Q10.015-15.605 10.015-15.796",[1336],[1320,2862,2863],{"transform":2835},[1325,2864],{"d":2865,"fill":2827,"stroke":2827,"className":2866,"style":1391},"M17.607-12.804L15.752-12.804L15.752-13.101Q16.025-13.101 16.193-13.148Q16.361-13.195 16.361-13.363L16.361-17.523Q16.361-17.738 16.298-17.833Q16.236-17.929 16.117-17.950Q15.998-17.972 15.752-17.972L15.752-18.269L16.974-18.355L16.974-15.652Q17.099-15.863 17.287-16.013Q17.474-16.163 17.701-16.247Q17.927-16.331 18.173-16.331Q19.341-16.331 19.341-15.253L19.341-13.363Q19.341-13.195 19.511-13.148Q19.681-13.101 19.951-13.101L19.951-12.804L18.095-12.804L18.095-13.101Q18.369-13.101 18.537-13.148Q18.705-13.195 18.705-13.363L18.705-15.238Q18.705-15.620 18.584-15.849Q18.462-16.077 18.111-16.077Q17.798-16.077 17.544-15.915Q17.291-15.753 17.144-15.484Q16.998-15.214 16.998-14.917L16.998-13.363Q16.998-13.195 17.168-13.148Q17.337-13.101 17.607-13.101L17.607-12.804M20.494-13.636Q20.494-14.120 20.896-14.415Q21.298-14.710 21.849-14.829Q22.400-14.949 22.892-14.949L22.892-15.238Q22.892-15.464 22.777-15.671Q22.662-15.878 22.464-15.997Q22.267-16.117 22.037-16.117Q21.611-16.117 21.326-16.011Q21.396-15.984 21.443-15.929Q21.490-15.874 21.515-15.804Q21.541-15.734 21.541-15.659Q21.541-15.554 21.490-15.462Q21.439-15.370 21.347-15.320Q21.255-15.269 21.150-15.269Q21.044-15.269 20.953-15.320Q20.861-15.370 20.810-15.462Q20.759-15.554 20.759-15.659Q20.759-16.077 21.148-16.224Q21.537-16.370 22.037-16.370Q22.369-16.370 22.722-16.240Q23.076-16.109 23.304-15.855Q23.533-15.601 23.533-15.253L23.533-13.452Q23.533-13.320 23.605-13.210Q23.677-13.101 23.806-13.101Q23.931-13.101 24-13.206Q24.068-13.312 24.068-13.452L24.068-13.964L24.349-13.964L24.349-13.452Q24.349-13.249 24.232-13.091Q24.115-12.933 23.933-12.849Q23.752-12.765 23.548-12.765Q23.318-12.765 23.166-12.937Q23.013-13.109 22.982-13.339Q22.822-13.058 22.513-12.892Q22.205-12.726 21.853-12.726Q21.341-12.726 20.918-12.949Q20.494-13.171 20.494-13.636M21.181-13.636Q21.181-13.351 21.408-13.165Q21.634-12.980 21.927-12.980Q22.173-12.980 22.398-13.097Q22.623-13.214 22.757-13.417Q22.892-13.620 22.892-13.874L22.892-14.706Q22.627-14.706 22.341-14.652Q22.056-14.597 21.785-14.468Q21.513-14.339 21.347-14.132Q21.181-13.925 21.181-13.636M24.685-12.812L24.685-14.034Q24.685-14.062 24.716-14.093Q24.748-14.124 24.771-14.124L24.877-14.124Q24.947-14.124 24.962-14.062Q25.025-13.742 25.164-13.501Q25.302-13.261 25.535-13.120Q25.767-12.980 26.076-12.980Q26.314-12.980 26.523-13.040Q26.732-13.101 26.869-13.249Q27.005-13.398 27.005-13.644Q27.005-13.898 26.794-14.064Q26.584-14.230 26.314-14.284L25.693-14.398Q25.287-14.476 24.986-14.732Q24.685-14.988 24.685-15.363Q24.685-15.730 24.886-15.952Q25.087-16.175 25.412-16.273Q25.736-16.370 26.076-16.370Q26.541-16.370 26.837-16.163L27.060-16.347Q27.084-16.370 27.115-16.370L27.166-16.370Q27.197-16.370 27.224-16.343Q27.252-16.316 27.252-16.284L27.252-15.300Q27.252-15.269 27.226-15.240Q27.201-15.210 27.166-15.210L27.060-15.210Q27.025-15.210 26.998-15.238Q26.970-15.265 26.970-15.300Q26.970-15.699 26.718-15.919Q26.466-16.140 26.068-16.140Q25.712-16.140 25.429-16.017Q25.146-15.894 25.146-15.589Q25.146-15.370 25.347-15.238Q25.548-15.105 25.794-15.062L26.419-14.949Q26.849-14.859 27.158-14.562Q27.466-14.265 27.466-13.851Q27.466-13.281 27.068-13.003Q26.669-12.726 26.076-12.726Q25.525-12.726 25.173-13.062L24.877-12.749Q24.853-12.726 24.818-12.726L24.771-12.726Q24.748-12.726 24.716-12.757Q24.685-12.788 24.685-12.812M29.923-12.804L28.068-12.804L28.068-13.101Q28.341-13.101 28.509-13.148Q28.677-13.195 28.677-13.363L28.677-17.523Q28.677-17.738 28.615-17.833Q28.552-17.929 28.433-17.950Q28.314-17.972 28.068-17.972L28.068-18.269L29.291-18.355L29.291-15.652Q29.416-15.863 29.603-16.013Q29.791-16.163 30.017-16.247Q30.244-16.331 30.490-16.331Q31.658-16.331 31.658-15.253L31.658-13.363Q31.658-13.195 31.828-13.148Q31.998-13.101 32.267-13.101L32.267-12.804L30.412-12.804L30.412-13.101Q30.685-13.101 30.853-13.148Q31.021-13.195 31.021-13.363L31.021-15.238Q31.021-15.620 30.900-15.849Q30.779-16.077 30.427-16.077Q30.115-16.077 29.861-15.915Q29.607-15.753 29.460-15.484Q29.314-15.214 29.314-14.917L29.314-13.363Q29.314-13.195 29.484-13.148Q29.654-13.101 29.923-13.101",[1336],[1320,2868,2869],{"transform":2835},[1325,2870],{"d":2871,"fill":2827,"stroke":2827,"className":2872,"style":1391},"M35.761-12.980Q35.765-12.999 35.767-13.013Q35.769-13.027 35.769-13.050L36.922-17.652Q36.961-17.839 36.961-17.867Q36.961-17.972 36.465-17.972Q36.367-18.003 36.367-18.101L36.390-18.202Q36.398-18.249 36.480-18.269L37.586-18.355Q37.636-18.355 37.670-18.325Q37.703-18.296 37.703-18.238L37.082-15.734Q37.324-16.011 37.634-16.171Q37.945-16.331 38.297-16.331Q38.750-16.331 39.031-16.105Q39.312-15.878 39.312-15.445Q39.312-15.105 39.179-14.704Q39.047-14.304 38.793-13.636Q38.695-13.421 38.695-13.230Q38.695-12.980 38.871-12.980Q39.179-12.980 39.398-13.296Q39.617-13.613 39.703-13.980Q39.730-14.050 39.793-14.050L39.894-14.050Q39.933-14.050 39.959-14.021Q39.984-13.992 39.984-13.956Q39.984-13.941 39.976-13.925Q39.902-13.636 39.752-13.365Q39.601-13.093 39.371-12.909Q39.140-12.726 38.855-12.726Q38.550-12.726 38.332-12.913Q38.113-13.101 38.113-13.406Q38.113-13.570 38.168-13.691Q38.410-14.335 38.552-14.777Q38.695-15.218 38.695-15.546Q38.695-15.781 38.599-15.929Q38.504-16.077 38.281-16.077Q37.453-16.077 36.894-15.003L36.390-12.995Q36.359-12.874 36.261-12.800Q36.164-12.726 36.039-12.726Q35.925-12.726 35.843-12.796Q35.761-12.867 35.761-12.980",[1336],[1320,2874,2875],{"transform":2835},[1325,2876],{"d":2877,"fill":2827,"stroke":2827,"className":2878,"style":2879},"M40.819-15.862L40.637-15.933Q40.584-15.953 40.584-16.012Q40.584-16.018 40.590-16.041L41.448-18.736Q41.484-18.851 41.576-18.917Q41.668-18.982 41.777-18.982Q41.926-18.982 42.042-18.881Q42.157-18.780 42.157-18.634Q42.157-18.549 42.119-18.473L40.933-15.903Q40.904-15.857 40.854-15.857Q40.848-15.857 40.819-15.862",[1336],"stroke-width:0.180",[1320,2881,2883,2886,2889],{"fill":1418,"stroke":1418,"style":2882},"stroke-width:.8",[1325,2884],{"fill":1327,"d":2885},"M-36.423 4.268h-14.472",[1325,2887],{"stroke":1327,"d":2888},"m-53.495 4.268 4.16 2.08-1.56-2.08 1.56-2.08",[1320,2890,2891,2898,2904,2910,2916],{"fill":1418,"stroke":1327,"fontSize":1431},[1320,2892,2894],{"transform":2893},"translate(-25.847 26.805)",[1325,2895],{"d":2896,"fill":1418,"stroke":1418,"className":2897,"style":1391},"M-34.368-12.726Q-34.849-12.726-35.257-12.970Q-35.665-13.214-35.903-13.628Q-36.142-14.042-36.142-14.531Q-36.142-15.023-35.884-15.439Q-35.626-15.855-35.194-16.093Q-34.763-16.331-34.271-16.331Q-33.650-16.331-33.200-15.894L-33.200-17.523Q-33.200-17.738-33.263-17.833Q-33.325-17.929-33.443-17.950Q-33.560-17.972-33.806-17.972L-33.806-18.269L-32.583-18.355L-32.583-13.546Q-32.583-13.335-32.521-13.240Q-32.458-13.144-32.341-13.122Q-32.224-13.101-31.974-13.101L-31.974-12.804L-33.224-12.726L-33.224-13.210Q-33.689-12.726-34.368-12.726M-34.302-12.980Q-33.962-12.980-33.669-13.171Q-33.376-13.363-33.224-13.659L-33.224-15.492Q-33.372-15.765-33.634-15.921Q-33.896-16.077-34.208-16.077Q-34.833-16.077-35.116-15.630Q-35.400-15.183-35.400-14.523Q-35.400-13.878-35.148-13.429Q-34.896-12.980-34.302-12.980M-29.458-12.804L-31.439-12.804L-31.439-13.101Q-31.169-13.101-31.001-13.146Q-30.833-13.191-30.833-13.363L-30.833-15.499Q-30.833-15.714-30.896-15.810Q-30.958-15.906-31.075-15.927Q-31.193-15.949-31.439-15.949L-31.439-16.245L-30.271-16.331L-30.271-15.546Q-30.193-15.757-30.040-15.943Q-29.888-16.128-29.689-16.230Q-29.489-16.331-29.263-16.331Q-29.017-16.331-28.825-16.187Q-28.634-16.042-28.634-15.812Q-28.634-15.656-28.739-15.546Q-28.845-15.437-29.001-15.437Q-29.157-15.437-29.267-15.546Q-29.376-15.656-29.376-15.812Q-29.376-15.972-29.271-16.077Q-29.595-16.077-29.810-15.849Q-30.025-15.620-30.120-15.281Q-30.216-14.941-30.216-14.636L-30.216-13.363Q-30.216-13.195-29.989-13.148Q-29.763-13.101-29.458-13.101L-29.458-12.804M-28.153-14.499Q-28.153-15.003-27.898-15.435Q-27.642-15.867-27.206-16.118Q-26.771-16.370-26.271-16.370Q-25.884-16.370-25.542-16.226Q-25.200-16.081-24.939-15.820Q-24.677-15.558-24.534-15.222Q-24.392-14.886-24.392-14.499Q-24.392-14.007-24.655-13.597Q-24.919-13.187-25.349-12.956Q-25.778-12.726-26.271-12.726Q-26.763-12.726-27.196-12.958Q-27.630-13.191-27.892-13.599Q-28.153-14.007-28.153-14.499M-26.271-13.003Q-25.814-13.003-25.562-13.226Q-25.310-13.449-25.222-13.800Q-25.134-14.152-25.134-14.597Q-25.134-15.027-25.228-15.365Q-25.321-15.702-25.575-15.909Q-25.829-16.117-26.271-16.117Q-26.919-16.117-27.163-15.700Q-27.407-15.284-27.407-14.597Q-27.407-14.152-27.319-13.800Q-27.232-13.449-26.980-13.226Q-26.728-13.003-26.271-13.003M-22.025-11.253L-23.880-11.253L-23.880-11.546Q-23.611-11.546-23.443-11.591Q-23.275-11.636-23.275-11.812L-23.275-15.636Q-23.275-15.843-23.431-15.896Q-23.587-15.949-23.880-15.949L-23.880-16.245L-22.657-16.331L-22.657-15.867Q-22.427-16.089-22.112-16.210Q-21.798-16.331-21.458-16.331Q-20.986-16.331-20.581-16.085Q-20.177-15.839-19.944-15.423Q-19.712-15.007-19.712-14.531Q-19.712-14.156-19.861-13.827Q-20.009-13.499-20.278-13.247Q-20.548-12.995-20.892-12.861Q-21.236-12.726-21.595-12.726Q-21.884-12.726-22.155-12.847Q-22.427-12.968-22.634-13.179L-22.634-11.812Q-22.634-11.636-22.466-11.591Q-22.298-11.546-22.025-11.546L-22.025-11.253M-22.634-15.468L-22.634-13.628Q-22.482-13.339-22.220-13.159Q-21.958-12.980-21.650-12.980Q-21.364-12.980-21.142-13.118Q-20.919-13.257-20.767-13.488Q-20.614-13.718-20.536-13.990Q-20.458-14.261-20.458-14.531Q-20.458-14.863-20.583-15.220Q-20.708-15.577-20.956-15.814Q-21.204-16.050-21.552-16.050Q-21.876-16.050-22.171-15.894Q-22.466-15.738-22.634-15.468",[1336],[1320,2899,2900],{"transform":2893},[1325,2901],{"d":2902,"fill":1418,"stroke":1418,"className":2903,"style":1391},"M-16.024-12.933L-15.997-13.034Q-15.954-13.093-15.903-13.101Q-15.208-13.101-14.989-13.148Q-14.810-13.195-14.767-13.406L-13.688-17.726Q-13.645-17.898-13.645-17.925Q-13.645-17.972-13.895-17.972L-14.431-17.972Q-14.989-17.972-15.286-17.818Q-15.583-17.663-15.735-17.380Q-15.888-17.097-16.095-16.492Q-16.138-16.429-16.192-16.421L-16.270-16.421Q-16.368-16.449-16.368-16.531Q-16.368-16.538-16.360-16.581L-15.798-18.202Q-15.767-18.257-15.704-18.269L-10.704-18.269Q-10.606-18.242-10.606-18.148L-10.849-16.523Q-10.868-16.445-10.950-16.421L-11.032-16.421Q-11.126-16.449-11.126-16.546Q-11.056-17.097-11.048-17.316Q-11.048-17.745-11.282-17.859Q-11.517-17.972-12.017-17.972L-12.544-17.972Q-12.716-17.972-12.778-17.958Q-12.841-17.945-12.874-17.886Q-12.907-17.827-12.950-17.667L-14.032-13.347Q-14.040-13.316-14.040-13.261Q-14.040-13.210-14.020-13.185Q-14.001-13.159-13.950-13.140Q-13.743-13.101-13.079-13.101Q-12.981-13.070-12.981-12.980L-13.009-12.874Q-13.040-12.816-13.103-12.804L-15.927-12.804Q-15.962-12.804-15.993-12.845Q-16.024-12.886-16.024-12.933",[1336],[1320,2905,2906],{"transform":2893},[1325,2907],{"d":2908,"fill":1418,"stroke":1418,"className":2909,"style":1391},"M-8.285-10.804L-9.461-10.804L-9.461-18.804L-8.285-18.804L-8.285-18.437L-9.094-18.437L-9.094-11.171L-8.285-11.171",[1336],[1320,2911,2912],{"transform":2893},[1325,2913],{"d":2914,"fill":1418,"stroke":1418,"className":2915,"style":1391},"M-7.299-13.284Q-7.084-12.980-6.420-12.980Q-5.990-12.980-5.633-13.181Q-5.276-13.382-5.276-13.781Q-5.276-13.984-5.436-14.107Q-5.596-14.230-5.803-14.269L-6.268-14.355Q-6.584-14.425-6.799-14.632Q-7.014-14.839-7.014-15.148Q-7.014-15.511-6.809-15.783Q-6.604-16.054-6.274-16.193Q-5.944-16.331-5.588-16.331Q-5.201-16.331-4.891-16.163Q-4.580-15.995-4.580-15.644Q-4.580-15.452-4.686-15.312Q-4.791-15.171-4.979-15.171Q-5.088-15.171-5.170-15.243Q-5.252-15.316-5.252-15.429Q-5.252-15.574-5.155-15.683Q-5.057-15.792-4.916-15.812Q-5.006-15.956-5.197-16.017Q-5.389-16.077-5.604-16.077Q-5.936-16.077-6.209-15.906Q-6.483-15.734-6.483-15.421Q-6.483-15.265-6.371-15.171Q-6.260-15.077-6.084-15.034L-5.627-14.949Q-5.252-14.878-5-14.646Q-4.748-14.413-4.748-14.050Q-4.748-13.777-4.893-13.509Q-5.037-13.242-5.276-13.062Q-5.752-12.726-6.436-12.726Q-6.713-12.726-6.994-12.798Q-7.276-12.870-7.467-13.044Q-7.658-13.218-7.658-13.499Q-7.658-13.722-7.530-13.886Q-7.401-14.050-7.182-14.050Q-7.037-14.050-6.949-13.968Q-6.862-13.886-6.862-13.749Q-6.862-13.570-6.992-13.427Q-7.123-13.284-7.299-13.284",[1336],[1320,2917,2918],{"transform":2893},[1325,2919],{"d":2920,"fill":1418,"stroke":1418,"className":2921,"style":1391},"M-2.803-10.804L-3.978-10.804L-3.978-11.171L-3.170-11.171L-3.170-18.437L-3.978-18.437L-3.978-18.804L-2.803-18.804",[1336],[1320,2923,2924,2927,2930],{"fill":1418,"stroke":1418,"style":2882},[1325,2925],{"fill":1327,"d":2926},"m68.852 4.268-21.59-1.27",[1325,2928],{"stroke":1327,"d":2929},"m44.667 2.845 4.03 2.32-1.434-2.168 1.679-1.984",[1320,2931,2932,2939,2945,2951,2957,2963,2969],{"fill":1418,"stroke":1327,"fontSize":1431},[1320,2933,2935],{"transform":2934},"translate(70.463 26.093)",[1325,2936],{"d":2937,"fill":1418,"stroke":1418,"className":2938,"style":1391},"M-36.087-13.636Q-36.087-14.120-35.685-14.415Q-35.282-14.710-34.732-14.829Q-34.181-14.949-33.689-14.949L-33.689-15.238Q-33.689-15.464-33.804-15.671Q-33.919-15.878-34.116-15.997Q-34.314-16.117-34.544-16.117Q-34.970-16.117-35.255-16.011Q-35.185-15.984-35.138-15.929Q-35.091-15.874-35.066-15.804Q-35.040-15.734-35.040-15.659Q-35.040-15.554-35.091-15.462Q-35.142-15.370-35.234-15.320Q-35.325-15.269-35.431-15.269Q-35.536-15.269-35.628-15.320Q-35.720-15.370-35.771-15.462Q-35.821-15.554-35.821-15.659Q-35.821-16.077-35.433-16.224Q-35.044-16.370-34.544-16.370Q-34.212-16.370-33.859-16.240Q-33.505-16.109-33.277-15.855Q-33.048-15.601-33.048-15.253L-33.048-13.452Q-33.048-13.320-32.976-13.210Q-32.903-13.101-32.775-13.101Q-32.650-13.101-32.581-13.206Q-32.513-13.312-32.513-13.452L-32.513-13.964L-32.232-13.964L-32.232-13.452Q-32.232-13.249-32.349-13.091Q-32.466-12.933-32.648-12.849Q-32.829-12.765-33.032-12.765Q-33.263-12.765-33.415-12.937Q-33.568-13.109-33.599-13.339Q-33.759-13.058-34.068-12.892Q-34.376-12.726-34.728-12.726Q-35.239-12.726-35.663-12.949Q-36.087-13.171-36.087-13.636M-35.400-13.636Q-35.400-13.351-35.173-13.165Q-34.946-12.980-34.653-12.980Q-34.407-12.980-34.183-13.097Q-33.958-13.214-33.823-13.417Q-33.689-13.620-33.689-13.874L-33.689-14.706Q-33.954-14.706-34.239-14.652Q-34.525-14.597-34.796-14.468Q-35.068-14.339-35.234-14.132Q-35.400-13.925-35.400-13.636M-30.122-12.726Q-30.603-12.726-31.011-12.970Q-31.419-13.214-31.657-13.628Q-31.896-14.042-31.896-14.531Q-31.896-15.023-31.638-15.439Q-31.380-15.855-30.948-16.093Q-30.517-16.331-30.025-16.331Q-29.403-16.331-28.954-15.894L-28.954-17.523Q-28.954-17.738-29.017-17.833Q-29.079-17.929-29.196-17.950Q-29.314-17.972-29.560-17.972L-29.560-18.269L-28.337-18.355L-28.337-13.546Q-28.337-13.335-28.275-13.240Q-28.212-13.144-28.095-13.122Q-27.978-13.101-27.728-13.101L-27.728-12.804L-28.978-12.726L-28.978-13.210Q-29.443-12.726-30.122-12.726M-30.056-12.980Q-29.716-12.980-29.423-13.171Q-29.130-13.363-28.978-13.659L-28.978-15.492Q-29.126-15.765-29.388-15.921Q-29.650-16.077-29.962-16.077Q-30.587-16.077-30.870-15.630Q-31.153-15.183-31.153-14.523Q-31.153-13.878-30.902-13.429Q-30.650-12.980-30.056-12.980M-25.403-12.726Q-25.884-12.726-26.292-12.970Q-26.700-13.214-26.939-13.628Q-27.177-14.042-27.177-14.531Q-27.177-15.023-26.919-15.439Q-26.661-15.855-26.230-16.093Q-25.798-16.331-25.306-16.331Q-24.685-16.331-24.236-15.894L-24.236-17.523Q-24.236-17.738-24.298-17.833Q-24.361-17.929-24.478-17.950Q-24.595-17.972-24.841-17.972L-24.841-18.269L-23.618-18.355L-23.618-13.546Q-23.618-13.335-23.556-13.240Q-23.493-13.144-23.376-13.122Q-23.259-13.101-23.009-13.101L-23.009-12.804L-24.259-12.726L-24.259-13.210Q-24.724-12.726-25.403-12.726M-25.337-12.980Q-24.997-12.980-24.704-13.171Q-24.411-13.363-24.259-13.659L-24.259-15.492Q-24.407-15.765-24.669-15.921Q-24.931-16.077-25.243-16.077Q-25.868-16.077-26.152-15.630Q-26.435-15.183-26.435-14.523Q-26.435-13.878-26.183-13.429Q-25.931-12.980-25.337-12.980",[1336],[1320,2940,2941],{"transform":2934},[1325,2942],{"d":2943,"fill":1418,"stroke":1418,"className":2944,"style":1391},"M-19.336-12.933L-19.309-13.034Q-19.266-13.093-19.215-13.101Q-18.520-13.101-18.301-13.148Q-18.122-13.195-18.079-13.406L-17-17.726Q-16.957-17.898-16.957-17.925Q-16.957-17.972-17.207-17.972L-17.743-17.972Q-18.301-17.972-18.598-17.818Q-18.895-17.663-19.047-17.380Q-19.200-17.097-19.407-16.492Q-19.450-16.429-19.504-16.421L-19.582-16.421Q-19.680-16.449-19.680-16.531Q-19.680-16.538-19.672-16.581L-19.110-18.202Q-19.079-18.257-19.016-18.269L-14.016-18.269Q-13.918-18.242-13.918-18.148L-14.161-16.523Q-14.180-16.445-14.262-16.421L-14.344-16.421Q-14.438-16.449-14.438-16.546Q-14.368-17.097-14.360-17.316Q-14.360-17.745-14.594-17.859Q-14.829-17.972-15.329-17.972L-15.856-17.972Q-16.028-17.972-16.090-17.958Q-16.153-17.945-16.186-17.886Q-16.219-17.827-16.262-17.667L-17.344-13.347Q-17.352-13.316-17.352-13.261Q-17.352-13.210-17.332-13.185Q-17.313-13.159-17.262-13.140Q-17.055-13.101-16.391-13.101Q-16.293-13.070-16.293-12.980L-16.321-12.874Q-16.352-12.816-16.415-12.804L-19.239-12.804Q-19.274-12.804-19.305-12.845Q-19.336-12.886-19.336-12.933",[1336],[1320,2946,2947],{"transform":2934},[1325,2948],{"d":2949,"fill":1418,"stroke":1418,"className":2950,"style":1391},"M-11.598-10.804L-12.774-10.804L-12.774-18.804L-11.598-18.804L-11.598-18.437L-12.407-18.437L-12.407-11.171L-11.598-11.171",[1336],[1320,2952,2953],{"transform":2934},[1325,2954],{"d":2955,"fill":1418,"stroke":1418,"className":2956,"style":1391},"M-10.612-13.284Q-10.397-12.980-9.733-12.980Q-9.303-12.980-8.946-13.181Q-8.589-13.382-8.589-13.781Q-8.589-13.984-8.749-14.107Q-8.909-14.230-9.116-14.269L-9.581-14.355Q-9.897-14.425-10.112-14.632Q-10.327-14.839-10.327-15.148Q-10.327-15.511-10.122-15.783Q-9.917-16.054-9.587-16.193Q-9.257-16.331-8.901-16.331Q-8.514-16.331-8.204-16.163Q-7.893-15.995-7.893-15.644Q-7.893-15.452-7.999-15.312Q-8.104-15.171-8.292-15.171Q-8.401-15.171-8.483-15.243Q-8.565-15.316-8.565-15.429Q-8.565-15.574-8.467-15.683Q-8.370-15.792-8.229-15.812Q-8.319-15.956-8.510-16.017Q-8.702-16.077-8.917-16.077Q-9.249-16.077-9.522-15.906Q-9.796-15.734-9.796-15.421Q-9.796-15.265-9.684-15.171Q-9.573-15.077-9.397-15.034L-8.940-14.949Q-8.565-14.878-8.313-14.646Q-8.061-14.413-8.061-14.050Q-8.061-13.777-8.206-13.509Q-8.350-13.242-8.589-13.062Q-9.065-12.726-9.749-12.726Q-10.026-12.726-10.307-12.798Q-10.589-12.870-10.780-13.044Q-10.971-13.218-10.971-13.499Q-10.971-13.722-10.842-13.886Q-10.714-14.050-10.495-14.050Q-10.350-14.050-10.262-13.968Q-10.175-13.886-10.175-13.749Q-10.175-13.570-10.305-13.427Q-10.436-13.284-10.612-13.284",[1336],[1320,2958,2959],{"transform":2934},[1325,2960],{"d":2961,"fill":1418,"stroke":1418,"className":2962,"style":1391},"M-4.353-14.620L-6.826-14.620Q-6.904-14.632-6.953-14.681Q-7.001-14.730-7.001-14.804Q-7.001-14.878-6.953-14.927Q-6.904-14.976-6.826-14.988L-4.353-14.988L-4.353-17.468Q-4.326-17.636-4.169-17.636Q-4.095-17.636-4.046-17.587Q-3.997-17.538-3.986-17.468L-3.986-14.988L-1.513-14.988Q-1.345-14.956-1.345-14.804Q-1.345-14.652-1.513-14.620L-3.986-14.620L-3.986-12.140Q-3.997-12.070-4.046-12.021Q-4.095-11.972-4.169-11.972Q-4.326-11.972-4.353-12.140",[1336],[1320,2964,2965],{"transform":2934},[1325,2966],{"d":2967,"fill":1418,"stroke":1418,"className":2968,"style":1391},"M-0.168-12.980Q-0.164-12.999-0.162-13.013Q-0.160-13.027-0.160-13.050L0.434-15.421Q0.473-15.577 0.473-15.714Q0.473-15.863 0.420-15.970Q0.367-16.077 0.235-16.077Q0.055-16.077-0.064-15.908Q-0.183-15.738-0.240-15.552Q-0.297-15.367-0.367-15.077Q-0.379-15.003-0.449-15.003L-0.550-15.003Q-0.586-15.003-0.613-15.038Q-0.640-15.074-0.640-15.101L-0.640-15.132Q-0.554-15.464-0.461-15.706Q-0.367-15.949-0.191-16.140Q-0.015-16.331 0.250-16.331Q0.453-16.331 0.647-16.249Q0.840-16.167 0.965-16.011Q1.090-15.855 1.090-15.652Q1.348-15.972 1.672-16.152Q1.996-16.331 2.375-16.331Q2.782-16.331 3.061-16.146Q3.340-15.960 3.383-15.574Q3.649-15.929 3.987-16.130Q4.325-16.331 4.731-16.331Q5.184-16.331 5.465-16.105Q5.746-15.878 5.746-15.445Q5.746-15.105 5.614-14.704Q5.481-14.304 5.227-13.636Q5.129-13.421 5.129-13.230Q5.129-12.980 5.305-12.980Q5.614-12.980 5.834-13.302Q6.055-13.624 6.137-13.980Q6.164-14.050 6.227-14.050L6.328-14.050Q6.367-14.050 6.393-14.017Q6.418-13.984 6.418-13.956Q6.418-13.941 6.410-13.925Q6.336-13.636 6.186-13.365Q6.035-13.093 5.805-12.909Q5.575-12.726 5.289-12.726Q4.981-12.726 4.762-12.913Q4.543-13.101 4.543-13.406Q4.543-13.562 4.602-13.691Q4.844-14.335 4.987-14.777Q5.129-15.218 5.129-15.546Q5.129-15.777 5.032-15.927Q4.934-16.077 4.711-16.077Q3.887-16.077 3.328-15.003L2.832-13.011Q2.801-12.886 2.696-12.806Q2.590-12.726 2.465-12.726Q2.356-12.726 2.274-12.796Q2.192-12.867 2.192-12.980Q2.196-12.999 2.198-13.013Q2.200-13.027 2.200-13.050L2.711-15.077Q2.778-15.367 2.778-15.546Q2.778-15.777 2.680-15.927Q2.582-16.077 2.360-16.077Q1.899-16.077 1.559-15.777Q1.219-15.476 0.969-15.003L0.473-13.011Q0.442-12.886 0.336-12.806Q0.231-12.726 0.106-12.726Q-0.004-12.726-0.086-12.796Q-0.168-12.867-0.168-12.980",[1336],[1320,2970,2971],{"transform":2934},[1325,2972],{"d":2973,"fill":1418,"stroke":1418,"className":2974,"style":1391},"M8.015-10.804L6.840-10.804L6.840-11.171L7.648-11.171L7.648-18.437L6.840-18.437L6.840-18.804L8.015-18.804",[1336],[1610,2976,2978,2979,2994,2995,3061,3062,3077,3078,3111,3112,3136,3137],{"className":2977},[1613],"The rolling hash slides the length-",[395,2980,2982],{"className":2981},[398],[395,2983,2985],{"className":2984,"ariaHidden":403},[402],[395,2986,2988,2991],{"className":2987},[407],[395,2989],{"className":2990,"style":568},[411],[395,2992,515],{"className":2993},[416,417]," window by one: drop the departing high digit ",[395,2996,2998],{"className":2997},[398],[395,2999,3001],{"className":3000,"ariaHidden":403},[402],[395,3002,3004,3008,3011,3014,3017,3020,3023],{"className":3003},[407],[395,3005],{"className":3006,"style":3007},[411],"height:1.0641em;vertical-align:-0.25em;",[395,3009,419],{"className":3010,"style":418},[416,417],[395,3012,424],{"className":3013},[423],[395,3015,572],{"className":3016},[416,417],[395,3018,476],{"className":3019},[475],[395,3021],{"className":3022,"style":433},[432],[395,3024,3026,3029],{"className":3025},[416],[395,3027,1828],{"className":3028},[416,417],[395,3030,3032],{"className":3031},[1934],[395,3033,3035],{"className":3034},[1938],[395,3036,3038],{"className":3037},[1943],[395,3039,3041],{"className":3040,"style":2543},[1947],[395,3042,3043,3046],{"style":2564},[395,3044],{"className":3045,"style":1956},[1955],[395,3047,3049],{"className":3048},[1960,1961,1962,1963],[395,3050,3052,3055,3058],{"className":3051},[416,1963],[395,3053,515],{"className":3054},[416,417,1963],[395,3056,458],{"className":3057},[457,1963],[395,3059,471],{"className":3060},[416,1963],", multiply the rest by ",[395,3063,3065],{"className":3064},[398],[395,3066,3068],{"className":3067,"ariaHidden":403},[402],[395,3069,3071,3074],{"className":3070},[407],[395,3072],{"className":3073,"style":1824},[411],[395,3075,1828],{"className":3076},[416,417],", add the incoming low digit ",[395,3079,3081],{"className":3080},[398],[395,3082,3084],{"className":3083,"ariaHidden":403},[402],[395,3085,3087,3090,3093,3096,3099,3105,3108],{"className":3086},[407],[395,3088],{"className":3089,"style":412},[411],[395,3091,419],{"className":3092,"style":418},[416,417],[395,3094,424],{"className":3095},[423],[395,3097,572],{"className":3098},[416,417],[395,3100,3102],{"className":3101},[416],[395,3103,664],{"className":3104},[416],[395,3106,515],{"className":3107},[416,417],[395,3109,476],{"className":3110},[475]," — one ",[395,3113,3115],{"className":3114},[398],[395,3116,3118],{"className":3117,"ariaHidden":403},[402],[395,3119,3121,3124,3127,3130,3133],{"className":3120},[407],[395,3122],{"className":3123,"style":412},[411],[395,3125,1045],{"className":3126,"style":1044},[416,417],[395,3128,1049],{"className":3129},[423],[395,3131,471],{"className":3132},[416],[395,3134,1016],{"className":3135},[475]," update giving ",[395,3138,3140],{"className":3139},[398],[395,3141,3143],{"className":3142,"ariaHidden":403},[402],[395,3144,3146,3150],{"className":3145},[407],[395,3147],{"className":3148,"style":3149},[411],"height:0.7519em;",[395,3151,3153,3156],{"className":3152},[416],[395,3154,1900],{"className":3155},[416,417],[395,3157,3159],{"className":3158},[1934],[395,3160,3162],{"className":3161},[1938],[395,3163,3165],{"className":3164},[1943],[395,3166,3168],{"className":3167,"style":3149},[1947],[395,3169,3170,3173],{"style":2564},[395,3171],{"className":3172,"style":1956},[1955],[395,3174,3176],{"className":3175},[1960,1961,1962,1963],[395,3177,3179],{"className":3178},[416,1963],[395,3180,2320],{"className":3181},[416,1963],[839,3183,3185],{"className":841,"code":3184,"language":843,"meta":376,"style":376},"caption: $\\textsc{Rabin-Karp}(T, P, b, q)$ — hash, slide, verify\n$p \\gets 0;\\ t \\gets 0;\\ \\rho \\gets b^{\\,m-1} \\bmod q$\nfor $j \\gets 0$ to $m - 1$ do          \u002F\u002F hash $P$ and window 0\n  $p \\gets (b \\cdot p + P[j]) \\bmod q$\n  $t \\gets (b \\cdot t + T[j]) \\bmod q$\nfor $s \\gets 0$ to $n - m$ do\n  if $t = p$ then                       \u002F\u002F verify, kill collisions\n    if $T[s \\mathinner{\\ldotp\\ldotp} s+m-1] = P$ then report occurrence at shift $s$\n  if $s \u003C n - m$ then                   \u002F\u002F roll window forward\n    $t \\gets (b\\,(t - T[s]\\cdot\\rho) + T[s+m]) \\bmod q$\n",[845,3186,3187,3192,3197,3202,3207,3212,3216,3221,3226,3231],{"__ignoreMap":376},[395,3188,3189],{"class":849,"line":6},[395,3190,3191],{},"caption: $\\textsc{Rabin-Karp}(T, P, b, q)$ — hash, slide, verify\n",[395,3193,3194],{"class":849,"line":18},[395,3195,3196],{},"$p \\gets 0;\\ t \\gets 0;\\ \\rho \\gets b^{\\,m-1} \\bmod q$\n",[395,3198,3199],{"class":849,"line":24},[395,3200,3201],{},"for $j \\gets 0$ to $m - 1$ do          \u002F\u002F hash $P$ and window 0\n",[395,3203,3204],{"class":849,"line":73},[395,3205,3206],{},"  $p \\gets (b \\cdot p + P[j]) \\bmod q$\n",[395,3208,3209],{"class":849,"line":102},[395,3210,3211],{},"  $t \\gets (b \\cdot t + T[j]) \\bmod q$\n",[395,3213,3214],{"class":849,"line":108},[395,3215,857],{},[395,3217,3218],{"class":849,"line":116},[395,3219,3220],{},"  if $t = p$ then                       \u002F\u002F verify, kill collisions\n",[395,3222,3223],{"class":849,"line":196},[395,3224,3225],{},"    if $T[s \\mathinner{\\ldotp\\ldotp} s+m-1] = P$ then report occurrence at shift $s$\n",[395,3227,3228],{"class":849,"line":202},[395,3229,3230],{},"  if $s \u003C n - m$ then                   \u002F\u002F roll window forward\n",[395,3232,3233],{"class":849,"line":283},[395,3234,3235],{},"    $t \\gets (b\\,(t - T[s]\\cdot\\rho) + T[s+m]) \\bmod q$\n",[1232,3237,3239],{"type":3238},"lemma",[381,3240,3241,3244,3245,3287,3288,3291,3292,3316],{},[390,3242,3243],{},"Lemma (running time)."," Rabin–Karp runs in ",[395,3246,3248],{"className":3247},[398],[395,3249,3251,3275],{"className":3250,"ariaHidden":403},[402],[395,3252,3254,3257,3260,3263,3266,3269,3272],{"className":3253},[407],[395,3255],{"className":3256,"style":412},[411],[395,3258,1045],{"className":3259,"style":1044},[416,417],[395,3261,1049],{"className":3262},[423],[395,3264,449],{"className":3265},[416,417],[395,3267],{"className":3268,"style":453},[432],[395,3270,664],{"className":3271},[457],[395,3273],{"className":3274,"style":453},[432],[395,3276,3278,3281,3284],{"className":3277},[407],[395,3279],{"className":3280,"style":412},[411],[395,3282,515],{"className":3283},[416,417],[395,3285,1016],{"className":3286},[475]," ",[385,3289,3290],{},"expected"," time and\n",[395,3293,3295],{"className":3294},[398],[395,3296,3298],{"className":3297,"ariaHidden":403},[402],[395,3299,3301,3304,3307,3310,3313],{"className":3300},[407],[395,3302],{"className":3303,"style":412},[411],[395,3305,1045],{"className":3306,"style":1044},[416,417],[395,3308,1049],{"className":3309},[423],[395,3311,1053],{"className":3312},[416,417],[395,3314,1016],{"className":3315},[475]," worst case.",[1232,3318,3320],{"type":3319},"proof",[381,3321,3322,3325,3326,3350,3351,3384,3385,3409,3410,3452,3453,3456,3457,3527,3528,3543,3544,3563,3564,3595,3596,3620,3621,3636,3637,3652,3653,3677,3678,1677,3693,3696,3697,3712,3713,3737,3738],{},[390,3323,3324],{},"Proof sketch."," Hashing the pattern and the first window is ",[395,3327,3329],{"className":3328},[398],[395,3330,3332],{"className":3331,"ariaHidden":403},[402],[395,3333,3335,3338,3341,3344,3347],{"className":3334},[407],[395,3336],{"className":3337,"style":412},[411],[395,3339,1045],{"className":3340,"style":1044},[416,417],[395,3342,1049],{"className":3343},[423],[395,3345,515],{"className":3346},[416,417],[395,3348,1016],{"className":3349},[475],"; each of the\n",[395,3352,3354],{"className":3353},[398],[395,3355,3357,3375],{"className":3356,"ariaHidden":403},[402],[395,3358,3360,3363,3366,3369,3372],{"className":3359},[407],[395,3361],{"className":3362,"style":674},[411],[395,3364,449],{"className":3365},[416,417],[395,3367],{"className":3368,"style":453},[432],[395,3370,458],{"className":3371},[457],[395,3373],{"className":3374,"style":453},[432],[395,3376,3378,3381],{"className":3377},[407],[395,3379],{"className":3380,"style":568},[411],[395,3382,515],{"className":3383},[416,417]," rolls is ",[395,3386,3388],{"className":3387},[398],[395,3389,3391],{"className":3390,"ariaHidden":403},[402],[395,3392,3394,3397,3400,3403,3406],{"className":3393},[407],[395,3395],{"className":3396,"style":412},[411],[395,3398,1045],{"className":3399,"style":1044},[416,417],[395,3401,1049],{"className":3402},[423],[395,3404,471],{"className":3405},[416],[395,3407,1016],{"className":3408},[475],", so the scan itself is ",[395,3411,3413],{"className":3412},[398],[395,3414,3416,3440],{"className":3415,"ariaHidden":403},[402],[395,3417,3419,3422,3425,3428,3431,3434,3437],{"className":3418},[407],[395,3420],{"className":3421,"style":412},[411],[395,3423,1045],{"className":3424,"style":1044},[416,417],[395,3426,1049],{"className":3427},[423],[395,3429,449],{"className":3430},[416,417],[395,3432],{"className":3433,"style":453},[432],[395,3435,664],{"className":3436},[457],[395,3438],{"className":3439,"style":453},[432],[395,3441,3443,3446,3449],{"className":3442},[407],[395,3444],{"className":3445,"style":412},[411],[395,3447,515],{"className":3448},[416,417],[395,3450,1016],{"className":3451},[475],". The only extra cost is\nverification. A real match must be verified, and there are at most as many real\nmatches as occurrences. A ",[385,3454,3455],{},"spurious"," hit happens when ",[395,3458,3460],{"className":3459},[398],[395,3461,3463,3518],{"className":3462,"ariaHidden":403},[402],[395,3464,3466,3469,3509,3512,3515],{"className":3465},[407],[395,3467],{"className":3468,"style":1923},[411],[395,3470,3472,3475],{"className":3471},[416],[395,3473,1930],{"className":3474},[416,417],[395,3476,3478],{"className":3477},[1934],[395,3479,3481,3501],{"className":3480},[1938,1939],[395,3482,3484,3498],{"className":3483},[1943],[395,3485,3487],{"className":3486,"style":2079},[1947],[395,3488,3489,3492],{"style":1951},[395,3490],{"className":3491,"style":1956},[1955],[395,3493,3495],{"className":3494},[1960,1961,1962,1963],[395,3496,572],{"className":3497},[416,417,1963],[395,3499,1971],{"className":3500},[1970],[395,3502,3504],{"className":3503},[1943],[395,3505,3507],{"className":3506,"style":1978},[1947],[395,3508],{},[395,3510],{"className":3511,"style":702},[432],[395,3513,707],{"className":3514},[706],[395,3516],{"className":3517,"style":702},[432],[395,3519,3521,3524],{"className":3520},[407],[395,3522],{"className":3523,"style":1861},[411],[395,3525,381],{"className":3526},[416,417]," but the blocks\ndiffer; for a well-chosen prime ",[395,3529,3531],{"className":3530},[398],[395,3532,3534],{"className":3533,"ariaHidden":403},[402],[395,3535,3537,3540],{"className":3536},[407],[395,3538],{"className":3539,"style":1861},[411],[395,3541,826],{"className":3542,"style":1865},[416,417]," the probability of a collision at a given\nshift is about ",[395,3545,3547],{"className":3546},[398],[395,3548,3550],{"className":3549,"ariaHidden":403},[402],[395,3551,3553,3556,3560],{"className":3552},[407],[395,3554],{"className":3555,"style":412},[411],[395,3557,3559],{"className":3558},[416],"1\u002F",[395,3561,826],{"className":3562,"style":1865},[416,417],", so the expected number of spurious verifications is\n",[395,3565,3567],{"className":3566},[398],[395,3568,3570],{"className":3569,"ariaHidden":403},[402],[395,3571,3573,3576,3579,3582,3585,3589,3592],{"className":3572},[407],[395,3574],{"className":3575,"style":412},[411],[395,3577,1045],{"className":3578,"style":1044},[416,417],[395,3580,1049],{"className":3581},[423],[395,3583,449],{"className":3584},[416,417],[395,3586,3588],{"className":3587},[416],"\u002F",[395,3590,826],{"className":3591,"style":1865},[416,417],[395,3593,1016],{"className":3594},[475],", each costing ",[395,3597,3599],{"className":3598},[398],[395,3600,3602],{"className":3601,"ariaHidden":403},[402],[395,3603,3605,3608,3611,3614,3617],{"className":3604},[407],[395,3606],{"className":3607,"style":412},[411],[395,3609,1045],{"className":3610,"style":1044},[416,417],[395,3612,1049],{"className":3613},[423],[395,3615,515],{"className":3616},[416,417],[395,3618,1016],{"className":3619},[475],". With ",[395,3622,3624],{"className":3623},[398],[395,3625,3627],{"className":3626,"ariaHidden":403},[402],[395,3628,3630,3633],{"className":3629},[407],[395,3631],{"className":3632,"style":1861},[411],[395,3634,826],{"className":3635,"style":1865},[416,417]," chosen larger than ",[395,3638,3640],{"className":3639},[398],[395,3641,3643],{"className":3642,"ariaHidden":403},[402],[395,3644,3646,3649],{"className":3645},[407],[395,3647],{"className":3648,"style":568},[411],[395,3650,515],{"className":3651},[416,417]," this contributes\n",[395,3654,3656],{"className":3655},[398],[395,3657,3659],{"className":3658,"ariaHidden":403},[402],[395,3660,3662,3665,3668,3671,3674],{"className":3661},[407],[395,3663],{"className":3664,"style":412},[411],[395,3666,1045],{"className":3667,"style":1044},[416,417],[395,3669,1049],{"className":3670},[423],[395,3672,449],{"className":3673},[416,417],[395,3675,1016],{"className":3676},[475]," expected. Adversarially, or with an unlucky ",[395,3679,3681],{"className":3680},[398],[395,3682,3684],{"className":3683,"ariaHidden":403},[402],[395,3685,3687,3690],{"className":3686},[407],[395,3688],{"className":3689,"style":1861},[411],[395,3691,826],{"className":3692,"style":1865},[416,417],[385,3694,3695],{},"every"," shift can\ncollide, forcing a length-",[395,3698,3700],{"className":3699},[398],[395,3701,3703],{"className":3702,"ariaHidden":403},[402],[395,3704,3706,3709],{"className":3705},[407],[395,3707],{"className":3708,"style":568},[411],[395,3710,515],{"className":3711},[416,417]," verification each time: ",[395,3714,3716],{"className":3715},[398],[395,3717,3719],{"className":3718,"ariaHidden":403},[402],[395,3720,3722,3725,3728,3731,3734],{"className":3721},[407],[395,3723],{"className":3724,"style":412},[411],[395,3726,1045],{"className":3727,"style":1044},[416,417],[395,3729,1049],{"className":3730},[423],[395,3732,1053],{"className":3733},[416,417],[395,3735,1016],{"className":3736},[475],". ",[395,3739,3741],{"className":3740},[398],[395,3742,3744],{"className":3743,"ariaHidden":403},[402],[395,3745,3747,3751],{"className":3746},[407],[395,3748],{"className":3749,"style":3750},[411],"height:0.675em;",[395,3752,3756],{"className":3753},[3754,3755],"enclosing","qed",[395,3757,3760],{"className":3758},[416,3759],"amsrm","□",[381,3762,3763,3764,3767,3768,3771,3772],{},"Rabin–Karp shines when you need to match ",[390,3765,3766],{},"many"," patterns of the same length at\nonce (hash them all, look each window up in a set) or when the ",[826,3769,3770],{},"comparison"," is\nnaturally numeric. The rolling-hash idea reappears in deduplication,\nplagiarism detection, and content-defined chunking.",[1213,3773,3774],{},[1216,3775,3779],{"href":3776,"ariaDescribedBy":3777,"dataFootnoteRef":376,"id":3778},"#user-content-fn-skiena-rk",[1220],"user-content-fnref-skiena-rk","2",[831,3781,3783],{"id":3782},"knuthmorrispratt-never-re-read-the-text","Knuth–Morris–Pratt: never re-read the text",[381,3785,3786,3787,3802,3803,3818,3819,3834,3835,3971,3972,3996,3997,4039,4040,4055,4056,4131,4132,4189,4190,4193],{},"KMP attacks the redundancy directly. Suppose we are matching ",[395,3788,3790],{"className":3789},[398],[395,3791,3793],{"className":3792,"ariaHidden":403},[402],[395,3794,3796,3799],{"className":3795},[407],[395,3797],{"className":3798,"style":550},[411],[395,3800,493],{"className":3801,"style":418},[416,417]," against ",[395,3804,3806],{"className":3805},[398],[395,3807,3809],{"className":3808,"ariaHidden":403},[402],[395,3810,3812,3815],{"className":3811},[407],[395,3813],{"className":3814,"style":550},[411],[395,3816,419],{"className":3817,"style":418},[416,417]," and\nhave just matched ",[395,3820,3822],{"className":3821},[398],[395,3823,3825],{"className":3824,"ariaHidden":403},[402],[395,3826,3828,3831],{"className":3827},[407],[395,3829],{"className":3830,"style":1861},[411],[395,3832,826],{"className":3833,"style":1865},[416,417]," characters, ",[395,3836,3838],{"className":3837},[398],[395,3839,3841,3880,3901,3940,3959],{"className":3840,"ariaHidden":403},[402],[395,3842,3844,3847,3850,3853,3856,3859,3865,3868,3871,3874,3877],{"className":3843},[407],[395,3845],{"className":3846,"style":412},[411],[395,3848,493],{"className":3849,"style":418},[416,417],[395,3851,424],{"className":3852},[423],[395,3854,428],{"className":3855},[416],[395,3857],{"className":3858,"style":433},[432],[395,3860,3862],{"className":3861},[437],[395,3863,442],{"className":3864},[441],[395,3866],{"className":3867,"style":433},[432],[395,3869,826],{"className":3870,"style":1865},[416,417],[395,3872],{"className":3873,"style":453},[432],[395,3875,458],{"className":3876},[457],[395,3878],{"className":3879,"style":453},[432],[395,3881,3883,3886,3889,3892,3895,3898],{"className":3882},[407],[395,3884],{"className":3885,"style":412},[411],[395,3887,471],{"className":3888},[416],[395,3890,476],{"className":3891},[475],[395,3893],{"className":3894,"style":702},[432],[395,3896,707],{"className":3897},[706],[395,3899],{"className":3900,"style":702},[432],[395,3902,3904,3907,3910,3913,3916,3919,3925,3928,3931,3934,3937],{"className":3903},[407],[395,3905],{"className":3906,"style":412},[411],[395,3908,419],{"className":3909,"style":418},[416,417],[395,3911,424],{"className":3912},[423],[395,3914,572],{"className":3915},[416,417],[395,3917],{"className":3918,"style":433},[432],[395,3920,3922],{"className":3921},[437],[395,3923,442],{"className":3924},[441],[395,3926],{"className":3927,"style":433},[432],[395,3929,572],{"className":3930},[416,417],[395,3932],{"className":3933,"style":453},[432],[395,3935,664],{"className":3936},[457],[395,3938],{"className":3939,"style":453},[432],[395,3941,3943,3947,3950,3953,3956],{"className":3942},[407],[395,3944],{"className":3945,"style":3946},[411],"height:0.7778em;vertical-align:-0.1944em;",[395,3948,826],{"className":3949,"style":1865},[416,417],[395,3951],{"className":3952,"style":453},[432],[395,3954,458],{"className":3955},[457],[395,3957],{"className":3958,"style":453},[432],[395,3960,3962,3965,3968],{"className":3961},[407],[395,3963],{"className":3964,"style":412},[411],[395,3966,471],{"className":3967},[416],[395,3969,476],{"className":3970},[475],", when ",[395,3973,3975],{"className":3974},[398],[395,3976,3978],{"className":3977,"ariaHidden":403},[402],[395,3979,3981,3984,3987,3990,3993],{"className":3980},[407],[395,3982],{"className":3983,"style":412},[411],[395,3985,493],{"className":3986,"style":418},[416,417],[395,3988,424],{"className":3989},[423],[395,3991,826],{"className":3992,"style":1865},[416,417],[395,3994,476],{"className":3995},[475],"\nmismatches ",[395,3998,4000],{"className":3999},[398],[395,4001,4003,4027],{"className":4002,"ariaHidden":403},[402],[395,4004,4006,4009,4012,4015,4018,4021,4024],{"className":4005},[407],[395,4007],{"className":4008,"style":412},[411],[395,4010,419],{"className":4011,"style":418},[416,417],[395,4013,424],{"className":4014},[423],[395,4016,572],{"className":4017},[416,417],[395,4019],{"className":4020,"style":453},[432],[395,4022,664],{"className":4023},[457],[395,4025],{"className":4026,"style":453},[432],[395,4028,4030,4033,4036],{"className":4029},[407],[395,4031],{"className":4032,"style":412},[411],[395,4034,826],{"className":4035,"style":1865},[416,417],[395,4037,476],{"className":4038},[475],". The naive scan would slide ",[395,4041,4043],{"className":4042},[398],[395,4044,4046],{"className":4045,"ariaHidden":403},[402],[395,4047,4049,4052],{"className":4048},[407],[395,4050],{"className":4051,"style":550},[411],[395,4053,493],{"className":4054,"style":418},[416,417]," by one and recompare from the\nstart. But the matched text ",[395,4057,4059],{"className":4058},[398],[395,4060,4062,4101,4119],{"className":4061,"ariaHidden":403},[402],[395,4063,4065,4068,4071,4074,4077,4080,4086,4089,4092,4095,4098],{"className":4064},[407],[395,4066],{"className":4067,"style":412},[411],[395,4069,419],{"className":4070,"style":418},[416,417],[395,4072,424],{"className":4073},[423],[395,4075,572],{"className":4076},[416,417],[395,4078],{"className":4079,"style":433},[432],[395,4081,4083],{"className":4082},[437],[395,4084,442],{"className":4085},[441],[395,4087],{"className":4088,"style":433},[432],[395,4090,572],{"className":4091},[416,417],[395,4093],{"className":4094,"style":453},[432],[395,4096,664],{"className":4097},[457],[395,4099],{"className":4100,"style":453},[432],[395,4102,4104,4107,4110,4113,4116],{"className":4103},[407],[395,4105],{"className":4106,"style":3946},[411],[395,4108,826],{"className":4109,"style":1865},[416,417],[395,4111],{"className":4112,"style":453},[432],[395,4114,458],{"className":4115},[457],[395,4117],{"className":4118,"style":453},[432],[395,4120,4122,4125,4128],{"className":4121},[407],[395,4123],{"className":4124,"style":412},[411],[395,4126,471],{"className":4127},[416],[395,4129,476],{"className":4130},[475]," equals ",[395,4133,4135],{"className":4134},[398],[395,4136,4138,4177],{"className":4137,"ariaHidden":403},[402],[395,4139,4141,4144,4147,4150,4153,4156,4162,4165,4168,4171,4174],{"className":4140},[407],[395,4142],{"className":4143,"style":412},[411],[395,4145,493],{"className":4146,"style":418},[416,417],[395,4148,424],{"className":4149},[423],[395,4151,428],{"className":4152},[416],[395,4154],{"className":4155,"style":433},[432],[395,4157,4159],{"className":4158},[437],[395,4160,442],{"className":4161},[441],[395,4163],{"className":4164,"style":433},[432],[395,4166,826],{"className":4167,"style":1865},[416,417],[395,4169],{"className":4170,"style":453},[432],[395,4172,458],{"className":4173},[457],[395,4175],{"className":4176,"style":453},[432],[395,4178,4180,4183,4186],{"className":4179},[407],[395,4181],{"className":4182,"style":412},[411],[395,4184,471],{"className":4185},[416],[395,4187,476],{"className":4188},[475],", which we know\ncompletely — so we can compute, ",[385,4191,4192],{},"in advance and from the pattern alone",", how far\nto slide so the next comparison resumes correctly without ever moving the text\npointer backward.",[381,4195,4196,4197,4200,4201,4204],{},"The information we need is the ",[390,4198,4199],{},"prefix function"," (or ",[390,4202,4203],{},"failure function","):",[1232,4206,4208],{"type":4207},"definition",[381,4209,4210,4213,4214,4231,4232,4257,4258,4261,4262,4301,4302,4341,4342,4345,4346,4385],{},[390,4211,4212],{},"Definition."," For each ",[395,4215,4217],{"className":4216},[398],[395,4218,4220],{"className":4219,"ariaHidden":403},[402],[395,4221,4223,4227],{"className":4222},[407],[395,4224],{"className":4225,"style":4226},[411],"height:0.6595em;",[395,4228,4230],{"className":4229},[416,417],"i",", let ",[395,4233,4235],{"className":4234},[398],[395,4236,4238],{"className":4237,"ariaHidden":403},[402],[395,4239,4241,4244,4248,4251,4254],{"className":4240},[407],[395,4242],{"className":4243,"style":412},[411],[395,4245,4247],{"className":4246,"style":1865},[416,417],"π",[395,4249,424],{"className":4250},[423],[395,4252,4230],{"className":4253},[416,417],[395,4255,476],{"className":4256},[475]," be the length of the longest ",[385,4259,4260],{},"proper","\nprefix of ",[395,4263,4265],{"className":4264},[398],[395,4266,4268],{"className":4267,"ariaHidden":403},[402],[395,4269,4271,4274,4277,4280,4283,4286,4292,4295,4298],{"className":4270},[407],[395,4272],{"className":4273,"style":412},[411],[395,4275,493],{"className":4276,"style":418},[416,417],[395,4278,424],{"className":4279},[423],[395,4281,428],{"className":4282},[416],[395,4284],{"className":4285,"style":433},[432],[395,4287,4289],{"className":4288},[437],[395,4290,442],{"className":4291},[441],[395,4293],{"className":4294,"style":433},[432],[395,4296,4230],{"className":4297},[416,417],[395,4299,476],{"className":4300},[475]," that is also a suffix of ",[395,4303,4305],{"className":4304},[398],[395,4306,4308],{"className":4307,"ariaHidden":403},[402],[395,4309,4311,4314,4317,4320,4323,4326,4332,4335,4338],{"className":4310},[407],[395,4312],{"className":4313,"style":412},[411],[395,4315,493],{"className":4316,"style":418},[416,417],[395,4318,424],{"className":4319},[423],[395,4321,428],{"className":4322},[416],[395,4324],{"className":4325,"style":433},[432],[395,4327,4329],{"className":4328},[437],[395,4330,442],{"className":4331},[441],[395,4333],{"className":4334,"style":433},[432],[395,4336,4230],{"className":4337},[416,417],[395,4339,476],{"className":4340},[475],". (",[826,4343,4344],{},"Proper"," means\nshorter than ",[395,4347,4349],{"className":4348},[398],[395,4350,4352],{"className":4351,"ariaHidden":403},[402],[395,4353,4355,4358,4361,4364,4367,4370,4376,4379,4382],{"className":4354},[407],[395,4356],{"className":4357,"style":412},[411],[395,4359,493],{"className":4360,"style":418},[416,417],[395,4362,424],{"className":4363},[423],[395,4365,428],{"className":4366},[416],[395,4368],{"className":4369,"style":433},[432],[395,4371,4373],{"className":4372},[437],[395,4374,442],{"className":4375},[441],[395,4377],{"className":4378,"style":433},[432],[395,4380,4230],{"className":4381},[416,417],[395,4383,476],{"className":4384},[475]," itself.)",[381,4387,4388,4389,4425,4426,4512,4513,4515,4516,4532,4533,4549,4550,4553,4554,4569,4570,4603,4604,4606,4607,4683,4684,4798],{},"For ",[395,4390,4392],{"className":4391},[398],[395,4393,4395,4413],{"className":4394,"ariaHidden":403},[402],[395,4396,4398,4401,4404,4407,4410],{"className":4397},[407],[395,4399],{"className":4400,"style":550},[411],[395,4402,493],{"className":4403,"style":418},[416,417],[395,4405],{"className":4406,"style":702},[432],[395,4408,707],{"className":4409},[706],[395,4411],{"className":4412,"style":702},[432],[395,4414,4416,4419],{"className":4415},[407],[395,4417],{"className":4418,"style":1128},[411],[395,4420,4422],{"className":4421},[416,1091],[395,4423,1277],{"className":4424},[416,1095]," we have ",[395,4427,4429],{"className":4428},[398],[395,4430,4432,4450],{"className":4431,"ariaHidden":403},[402],[395,4433,4435,4438,4441,4444,4447],{"className":4434},[407],[395,4436],{"className":4437,"style":568},[411],[395,4439,4247],{"className":4440,"style":1865},[416,417],[395,4442],{"className":4443,"style":702},[432],[395,4445,707],{"className":4446},[706],[395,4448],{"className":4449,"style":702},[432],[395,4451,4453,4456,4459,4462,4466,4469,4472,4475,4478,4481,4484,4487,4490,4493,4496,4500,4503,4506,4509],{"className":4452},[407],[395,4454],{"className":4455,"style":412},[411],[395,4457,424],{"className":4458},[423],[395,4460,428],{"className":4461},[416],[395,4463,4465],{"className":4464},[441],",",[395,4467],{"className":4468,"style":433},[432],[395,4470,428],{"className":4471},[416],[395,4473,4465],{"className":4474},[441],[395,4476],{"className":4477,"style":433},[432],[395,4479,471],{"className":4480},[416],[395,4482,4465],{"className":4483},[441],[395,4485],{"className":4486,"style":433},[432],[395,4488,3779],{"className":4489},[416],[395,4491,4465],{"className":4492},[441],[395,4494],{"className":4495,"style":433},[432],[395,4497,4499],{"className":4498},[416],"3",[395,4501,4465],{"className":4502},[441],[395,4504],{"className":4505,"style":433},[432],[395,4507,428],{"className":4508},[416],[395,4510,476],{"className":4511},[475],": after matching the prefix\n",[845,4514,1281],{}," (length ",[395,4517,4519],{"className":4518},[398],[395,4520,4522],{"className":4521,"ariaHidden":403},[402],[395,4523,4525,4528],{"className":4524},[407],[395,4526],{"className":4527,"style":769},[411],[395,4529,4531],{"className":4530},[416],"5",", index ",[395,4534,4536],{"className":4535},[398],[395,4537,4539],{"className":4538,"ariaHidden":403},[402],[395,4540,4542,4545],{"className":4541},[407],[395,4543],{"className":4544,"style":769},[411],[395,4546,4548],{"className":4547},[416],"4","), its longest border is ",[845,4551,4552],{},"ABA"," of length ",[395,4555,4557],{"className":4556},[398],[395,4558,4560],{"className":4559,"ariaHidden":403},[402],[395,4561,4563,4566],{"className":4562},[407],[395,4564],{"className":4565,"style":769},[411],[395,4567,4499],{"className":4568},[416],". So on a\nmismatch having matched ",[395,4571,4573],{"className":4572},[398],[395,4574,4576,4594],{"className":4575,"ariaHidden":403},[402],[395,4577,4579,4582,4585,4588,4591],{"className":4578},[407],[395,4580],{"className":4581,"style":1861},[411],[395,4583,826],{"className":4584,"style":1865},[416,417],[395,4586],{"className":4587,"style":702},[432],[395,4589,707],{"className":4590},[706],[395,4592],{"className":4593,"style":702},[432],[395,4595,4597,4600],{"className":4596},[407],[395,4598],{"className":4599,"style":769},[411],[395,4601,4531],{"className":4602},[416]," characters, instead of restarting we keep the\nalready-matched border ",[845,4605,4552],{}," and resume comparing at ",[395,4608,4610],{"className":4609},[398],[395,4611,4613,4643,4665],{"className":4612,"ariaHidden":403},[402],[395,4614,4616,4619,4622,4625,4628,4631,4634,4637,4640],{"className":4615},[407],[395,4617],{"className":4618,"style":412},[411],[395,4620,493],{"className":4621,"style":418},[416,417],[395,4623,424],{"className":4624},[423],[395,4626,4247],{"className":4627,"style":1865},[416,417],[395,4629,424],{"className":4630},[423],[395,4632,826],{"className":4633,"style":1865},[416,417],[395,4635],{"className":4636,"style":453},[432],[395,4638,458],{"className":4639},[457],[395,4641],{"className":4642,"style":453},[432],[395,4644,4646,4649,4652,4656,4659,4662],{"className":4645},[407],[395,4647],{"className":4648,"style":412},[411],[395,4650,471],{"className":4651},[416],[395,4653,4655],{"className":4654},[475],"]]",[395,4657],{"className":4658,"style":702},[432],[395,4660,707],{"className":4661},[706],[395,4663],{"className":4664,"style":702},[432],[395,4666,4668,4671,4674,4677,4680],{"className":4667},[407],[395,4669],{"className":4670,"style":412},[411],[395,4672,493],{"className":4673,"style":418},[416,417],[395,4675,424],{"className":4676},[423],[395,4678,4499],{"className":4679},[416],[395,4681,476],{"className":4682},[475],". The\npattern effectively slides right by ",[395,4685,4687],{"className":4686},[398],[395,4688,4690,4708,4732,4753,4771,4789],{"className":4689,"ariaHidden":403},[402],[395,4691,4693,4696,4699,4702,4705],{"className":4692},[407],[395,4694],{"className":4695,"style":3946},[411],[395,4697,826],{"className":4698,"style":1865},[416,417],[395,4700],{"className":4701,"style":453},[432],[395,4703,458],{"className":4704},[457],[395,4706],{"className":4707,"style":453},[432],[395,4709,4711,4714,4717,4720,4723,4726,4729],{"className":4710},[407],[395,4712],{"className":4713,"style":412},[411],[395,4715,4247],{"className":4716,"style":1865},[416,417],[395,4718,424],{"className":4719},[423],[395,4721,826],{"className":4722,"style":1865},[416,417],[395,4724],{"className":4725,"style":453},[432],[395,4727,458],{"className":4728},[457],[395,4730],{"className":4731,"style":453},[432],[395,4733,4735,4738,4741,4744,4747,4750],{"className":4734},[407],[395,4736],{"className":4737,"style":412},[411],[395,4739,471],{"className":4740},[416],[395,4742,476],{"className":4743},[475],[395,4745],{"className":4746,"style":702},[432],[395,4748,707],{"className":4749},[706],[395,4751],{"className":4752,"style":702},[432],[395,4754,4756,4759,4762,4765,4768],{"className":4755},[407],[395,4757],{"className":4758,"style":1731},[411],[395,4760,4531],{"className":4761},[416],[395,4763],{"className":4764,"style":453},[432],[395,4766,458],{"className":4767},[457],[395,4769],{"className":4770,"style":453},[432],[395,4772,4774,4777,4780,4783,4786],{"className":4773},[407],[395,4775],{"className":4776,"style":769},[411],[395,4778,4499],{"className":4779},[416],[395,4781],{"className":4782,"style":702},[432],[395,4784,707],{"className":4785},[706],[395,4787],{"className":4788,"style":702},[432],[395,4790,4792,4795],{"className":4791},[407],[395,4793],{"className":4794,"style":769},[411],[395,4796,3779],{"className":4797},[416]," positions, and the\ntext pointer does not move.",[1307,4800,4802,5142],{"className":4801},[1310,1311],[1313,4803,4807],{"xmlns":1315,"width":4804,"height":4805,"viewBox":4806},"402.930","119.084","-75 -75 302.197 89.313",[1320,4808,4809,4812,4819,4822,4829,4832,4838,4841,4847,4850,4856,4859,4882,4894,4900,4903,4909,4912,4918,4921,4927,4930,4936,4939,4945,4957,4964,4987,4998,5009,5020,5031,5042,5053,5067],{"stroke":1322,"style":1323},[1325,4810],{"fill":1327,"d":4811},"M-43.432-51.753h19.917V-71.67h-19.917Z",[1320,4813,4815],{"transform":4814},"translate(-3.468 3.075)",[1325,4816],{"d":4817,"fill":1322,"stroke":1322,"className":4818,"style":1337},"M-31.312-61.712L-33.043-61.712Q-33.140-61.712-33.140-61.831Q-33.140-61.888-33.109-61.958Q-33.078-62.028-33.017-62.028Q-32.327-62.028-31.927-62.639Q-31.927-62.639-31.901-62.666L-28.631-68.049Q-28.570-68.154-28.442-68.154L-28.354-68.154Q-28.231-68.154-28.218-68.049L-27.590-62.217Q-27.546-62.099-27.355-62.064Q-27.163-62.028-26.904-62.028Q-26.860-62.028-26.827-61.991Q-26.794-61.954-26.794-61.919Q-26.794-61.712-26.957-61.712L-29.189-61.712Q-29.229-61.712-29.260-61.752Q-29.290-61.791-29.290-61.831Q-29.290-61.892-29.255-61.960Q-29.220-62.028-29.163-62.028Q-28.886-62.028-28.677-62.072Q-28.469-62.116-28.425-62.270L-28.587-63.755L-30.908-63.755L-31.628-62.560Q-31.712-62.437-31.712-62.314Q-31.712-62.156-31.571-62.092Q-31.431-62.028-31.250-62.028Q-31.206-62.028-31.180-61.995Q-31.154-61.962-31.154-61.919Q-31.154-61.712-31.312-61.712M-28.939-66.994L-30.710-64.072L-28.622-64.072",[1336],[1325,4820],{"fill":1327,"d":4821},"M-23.515-51.753h19.917V-71.67h-19.917Z",[1320,4823,4825],{"transform":4824},"translate(16.193 3.075)",[1325,4826],{"d":4827,"fill":1322,"stroke":1322,"className":4828,"style":1337},"M-29.497-61.712L-32.969-61.712Q-33.078-61.712-33.078-61.831Q-33.078-61.892-33.046-61.960Q-33.013-62.028-32.951-62.028Q-32.450-62.028-32.222-62.081Q-32.094-62.129-32.024-62.358L-30.802-67.275Q-30.785-67.363-30.785-67.407Q-30.785-67.473-30.811-67.491Q-30.982-67.544-31.514-67.544Q-31.620-67.544-31.620-67.662Q-31.620-67.724-31.587-67.792Q-31.554-67.860-31.492-67.860L-28.218-67.860Q-27.814-67.860-27.421-67.724Q-27.027-67.587-26.772-67.304Q-26.517-67.021-26.517-66.608Q-26.517-66.172-26.812-65.812Q-27.106-65.452-27.544-65.228Q-27.981-65.004-28.416-64.924Q-28.056-64.889-27.728-64.731Q-27.401-64.573-27.196-64.296Q-26.992-64.019-26.992-63.654Q-26.992-63.241-27.223-62.881Q-27.453-62.521-27.840-62.259Q-28.227-61.998-28.662-61.855Q-29.097-61.712-29.497-61.712M-31.312-62.090Q-31.312-62.028-31.026-62.028L-29.677-62.028Q-29.229-62.028-28.809-62.266Q-28.390-62.503-28.137-62.896Q-27.884-63.290-27.884-63.738Q-27.884-64.032-28.005-64.270Q-28.126-64.507-28.343-64.643Q-28.561-64.779-28.855-64.779L-30.657-64.779L-31.277-62.296Q-31.312-62.156-31.312-62.090M-30.055-67.210L-30.596-65.043L-29.181-65.043Q-28.763-65.043-28.339-65.256Q-27.915-65.469-27.649-65.834Q-27.383-66.199-27.383-66.634Q-27.383-67.029-27.640-67.286Q-27.897-67.544-28.297-67.544L-29.585-67.544Q-29.844-67.544-29.919-67.497Q-29.994-67.451-30.055-67.210",[1336],[1325,4830],{"fill":1327,"d":4831},"M-3.598-51.753h19.917V-71.67H-3.598Z",[1320,4833,4835],{"transform":4834},"translate(36.366 3.075)",[1325,4836],{"d":4817,"fill":1322,"stroke":1322,"className":4837,"style":1337},[1336],[1325,4839],{"fill":1327,"d":4840},"M16.319-51.753h19.917V-71.67H16.319Z",[1320,4842,4844],{"transform":4843},"translate(56.027 3.075)",[1325,4845],{"d":4827,"fill":1322,"stroke":1322,"className":4846,"style":1337},[1336],[1325,4848],{"fill":1327,"d":4849},"M36.236-51.753h19.916V-71.67H36.236Z",[1320,4851,4853],{"transform":4852},"translate(76.2 3.075)",[1325,4854],{"d":4817,"fill":1322,"stroke":1322,"className":4855,"style":1337},[1336],[1325,4857],{"fill":1327,"d":4858},"M56.153-51.753h19.916V-71.67H56.153ZM76.07-51.753h19.916V-71.67H76.07Z",[1320,4860,4863,4870,4876],{"stroke":1327,"fontFamily":4861,"fontSize":4862},"cmmi9","9",[1320,4864,4866],{"transform":4865},"translate(113.335 .486)",[1325,4867],{"d":4868,"fill":1322,"stroke":1322,"className":4869,"style":1337},"M-32.701-62.217Q-32.701-62.345-32.632-62.461Q-32.564-62.578-32.448-62.648Q-32.331-62.718-32.195-62.718Q-31.993-62.718-31.841-62.571Q-31.690-62.424-31.690-62.217Q-31.690-62.011-31.839-61.861Q-31.989-61.712-32.195-61.712Q-32.406-61.712-32.553-61.864Q-32.701-62.015-32.701-62.217",[1336],[1320,4871,4872],{"transform":4865},[1325,4873],{"d":4874,"fill":1322,"stroke":1322,"className":4875,"style":1337},"M-28.590-62.217Q-28.590-62.345-28.521-62.461Q-28.453-62.578-28.337-62.648Q-28.220-62.718-28.084-62.718Q-27.882-62.718-27.730-62.571Q-27.579-62.424-27.579-62.217Q-27.579-62.011-27.728-61.861Q-27.878-61.712-28.084-61.712Q-28.295-61.712-28.442-61.864Q-28.590-62.015-28.590-62.217",[1336],[1320,4877,4878],{"transform":4865},[1325,4879],{"d":4880,"fill":1322,"stroke":1322,"className":4881,"style":1337},"M-24.478-62.217Q-24.478-62.345-24.409-62.461Q-24.341-62.578-24.225-62.648Q-24.108-62.718-23.972-62.718Q-23.770-62.718-23.618-62.571Q-23.467-62.424-23.467-62.217Q-23.467-62.011-23.616-61.861Q-23.766-61.712-23.972-61.712Q-24.183-61.712-24.330-61.864Q-24.478-62.015-24.478-62.217",[1336],[1320,4883,4884,4887],{"fill":1394,"stroke":2827,"style":1419},[1325,4885],{"d":4886},"M56.153-51.753h19.916V-71.67H56.153Z",[1320,4888,4890],{"transform":4889},"translate(95.412 3.075)",[1325,4891],{"d":4892,"fill":1322,"stroke":1322,"className":4893,"style":1337},"M-31.198-61.712L-33.114-61.712Q-33.153-61.712-33.184-61.752Q-33.215-61.791-33.215-61.831Q-33.215-61.888-33.182-61.958Q-33.149-62.028-33.087-62.028Q-32.683-62.028-32.316-62.198Q-31.949-62.367-31.655-62.666Q-31.646-62.674-31.639-62.677Q-31.633-62.679-31.628-62.683L-29.633-64.779L-30.776-67.372Q-30.868-67.482-31.061-67.513Q-31.255-67.544-31.523-67.544Q-31.628-67.544-31.628-67.662Q-31.628-67.860-31.466-67.860L-29.233-67.860Q-29.211-67.860-29.189-67.845Q-29.167-67.829-29.152-67.801Q-29.137-67.772-29.137-67.750Q-29.137-67.671-29.167-67.607Q-29.198-67.544-29.264-67.544Q-29.435-67.544-29.598-67.489Q-29.761-67.434-29.831-67.311L-29.009-65.439L-27.497-67.029Q-27.484-67.065-27.427-67.139Q-27.370-67.214-27.370-67.302Q-27.370-67.420-27.478-67.482Q-27.585-67.544-27.730-67.544Q-27.831-67.544-27.831-67.662Q-27.831-67.860-27.669-67.860L-25.753-67.860Q-25.713-67.860-25.682-67.820Q-25.652-67.781-25.652-67.750Q-25.652-67.680-25.685-67.612Q-25.718-67.544-25.779-67.544Q-26.588-67.544-27.212-66.906Q-27.212-66.906-27.225-66.902Q-27.238-66.898-27.238-66.889L-28.886-65.157L-27.581-62.200Q-27.475-62.090-27.286-62.059Q-27.098-62.028-26.825-62.028Q-26.781-62.028-26.753-61.995Q-26.724-61.962-26.724-61.919Q-26.724-61.712-26.887-61.712L-29.119-61.712Q-29.216-61.712-29.216-61.831Q-29.216-61.888-29.185-61.958Q-29.154-62.028-29.093-62.028Q-28.921-62.028-28.759-62.081Q-28.596-62.134-28.526-62.261L-29.515-64.503L-31.378-62.538Q-31.391-62.499-31.442-62.426Q-31.492-62.354-31.492-62.270Q-31.492-62.151-31.378-62.090Q-31.264-62.028-31.136-62.028Q-31.092-62.028-31.064-61.995Q-31.035-61.962-31.035-61.919Q-31.035-61.712-31.198-61.712",[1336],[1320,4895,4896],{"transform":1386},[1325,4897],{"d":4898,"fill":1322,"stroke":1322,"className":4899,"style":1391},"M-32.915-61.841L-32.888-61.942Q-32.845-62.001-32.794-62.009Q-32.099-62.009-31.880-62.056Q-31.701-62.103-31.658-62.314L-30.579-66.634Q-30.536-66.806-30.536-66.833Q-30.536-66.880-30.786-66.880L-31.322-66.880Q-31.880-66.880-32.177-66.726Q-32.474-66.571-32.626-66.288Q-32.779-66.005-32.986-65.400Q-33.029-65.337-33.083-65.329L-33.161-65.329Q-33.259-65.357-33.259-65.439Q-33.259-65.446-33.251-65.489L-32.689-67.110Q-32.658-67.165-32.595-67.177L-27.595-67.177Q-27.497-67.150-27.497-67.056L-27.740-65.431Q-27.759-65.353-27.841-65.329L-27.923-65.329Q-28.017-65.357-28.017-65.454Q-27.947-66.005-27.939-66.224Q-27.939-66.653-28.173-66.767Q-28.408-66.880-28.908-66.880L-29.435-66.880Q-29.607-66.880-29.669-66.866Q-29.732-66.853-29.765-66.794Q-29.798-66.735-29.841-66.575L-30.923-62.255Q-30.931-62.224-30.931-62.169Q-30.931-62.118-30.911-62.093Q-30.892-62.067-30.841-62.048Q-30.634-62.009-29.970-62.009Q-29.872-61.978-29.872-61.888L-29.900-61.782Q-29.931-61.724-29.994-61.712L-32.818-61.712Q-32.853-61.712-32.884-61.753Q-32.915-61.794-32.915-61.841",[1336],[1325,4901],{"fill":1327,"d":4902},"M-43.432-23.3h19.917v-19.917h-19.917Z",[1320,4904,4906],{"transform":4905},"translate(-3.468 31.528)",[1325,4907],{"d":4817,"fill":1322,"stroke":1322,"className":4908,"style":1337},[1336],[1325,4910],{"fill":1327,"d":4911},"M-23.515-23.3h19.917v-19.917h-19.917Z",[1320,4913,4915],{"transform":4914},"translate(16.193 31.528)",[1325,4916],{"d":4827,"fill":1322,"stroke":1322,"className":4917,"style":1337},[1336],[1325,4919],{"fill":1327,"d":4920},"M-3.598-23.3h19.917v-19.917H-3.598Z",[1320,4922,4924],{"transform":4923},"translate(36.366 31.528)",[1325,4925],{"d":4817,"fill":1322,"stroke":1322,"className":4926,"style":1337},[1336],[1325,4928],{"fill":1327,"d":4929},"M16.319-23.3h19.917v-19.917H16.319Z",[1320,4931,4933],{"transform":4932},"translate(56.027 31.528)",[1325,4934],{"d":4827,"fill":1322,"stroke":1322,"className":4935,"style":1337},[1336],[1325,4937],{"fill":1327,"d":4938},"M36.236-23.3h19.916v-19.917H36.236Z",[1320,4940,4942],{"transform":4941},"translate(76.2 31.528)",[1325,4943],{"d":4817,"fill":1322,"stroke":1322,"className":4944,"style":1337},[1336],[1320,4946,4947,4950],{"fill":1394,"stroke":2827,"style":1419},[1325,4948],{"d":4949},"M56.153-23.3h19.916v-19.917H56.153Z",[1320,4951,4953],{"transform":4952},"translate(95.963 31.528)",[1325,4954],{"d":4955,"fill":1322,"stroke":1322,"className":4956,"style":1337},"M-32.142-63.685Q-32.142-62.855-31.655-62.343Q-31.167-61.831-30.332-61.831Q-29.761-61.831-29.227-62.112Q-28.693-62.393-28.308-62.874Q-27.924-63.356-27.779-63.909Q-27.770-63.940-27.746-63.964Q-27.722-63.988-27.686-63.988L-27.581-63.988Q-27.489-63.988-27.489-63.874Q-27.651-63.237-28.104-62.692Q-28.557-62.147-29.183-61.831Q-29.809-61.514-30.477-61.514Q-31.206-61.514-31.782-61.831Q-32.358-62.147-32.687-62.712Q-33.017-63.276-33.017-64.006Q-33.017-64.771-32.668-65.507Q-32.318-66.243-31.736-66.812Q-31.154-67.381-30.402-67.719Q-29.651-68.058-28.895-68.058Q-28.425-68.058-28.027-67.853Q-27.629-67.649-27.383-67.267L-26.671-68.040Q-26.654-68.058-26.614-68.058L-26.561-68.058Q-26.474-68.058-26.474-67.939L-27.076-65.544Q-27.093-65.465-27.163-65.465L-27.300-65.465Q-27.392-65.465-27.392-65.584Q-27.352-65.764-27.352-66.014Q-27.352-66.476-27.517-66.871Q-27.682-67.267-28.012-67.504Q-28.341-67.741-28.811-67.741Q-29.550-67.741-30.167-67.383Q-30.785-67.025-31.226-66.430Q-31.668-65.834-31.905-65.111Q-32.142-64.388-32.142-63.685",[1336],[1320,4958,4960],{"transform":4959},"translate(-28.797 31.186)",[1325,4961],{"d":4962,"fill":1322,"stroke":1322,"className":4963,"style":1391},"M-30.826-61.712L-32.986-61.712Q-33.021-61.712-33.052-61.753Q-33.083-61.794-33.083-61.841L-33.060-61.942Q-33.048-61.993-32.962-62.009Q-32.521-62.009-32.363-62.048Q-32.204-62.087-32.161-62.314L-31.083-66.634Q-31.060-66.704-31.060-66.767Q-31.060-66.829-31.122-66.849Q-31.267-66.880-31.689-66.880Q-31.794-66.907-31.794-67.009L-31.763-67.110Q-31.755-67.157-31.673-67.177L-28.810-67.177Q-28.415-67.177-28.033-67.042Q-27.650-66.907-27.398-66.628Q-27.146-66.349-27.146-65.942Q-27.146-65.544-27.374-65.216Q-27.603-64.888-27.976-64.655Q-28.349-64.423-28.773-64.300Q-29.197-64.177-29.564-64.177L-30.947-64.177L-31.427-62.255Q-31.443-62.161-31.443-62.118Q-31.443-62.060-31.376-62.040Q-31.236-62.009-30.810-62.009Q-30.712-61.982-30.712-61.888L-30.740-61.782Q-30.747-61.732-30.826-61.712M-30.369-66.575L-30.900-64.446L-29.697-64.446Q-28.841-64.446-28.419-64.880Q-28.283-65.017-28.175-65.232Q-28.068-65.446-28.011-65.689Q-27.954-65.931-27.954-66.126Q-27.954-66.552-28.286-66.716Q-28.619-66.880-29.091-66.880L-29.962-66.880Q-30.134-66.880-30.197-66.866Q-30.259-66.853-30.292-66.794Q-30.326-66.735-30.369-66.575",[1336],[1320,4965,4966,4969,4972],{"fill":1418,"stroke":1418,"style":2882},[1325,4967],{"fill":1327,"d":4968},"M66.111-43.217v4.513",[1325,4970],{"stroke":1327,"d":4971},"m66.111-36.104 2.08-4.16-2.08 1.56-2.08-1.56",[1320,4973,4974,4981],{"fill":1418,"stroke":1327,"fontFamily":1559,"fontSize":1431},[1320,4975,4977],{"transform":4976},"translate(103.318 24.829)",[1325,4978],{"d":4979,"fill":1418,"stroke":1418,"className":4980,"style":1391},"M-31.306-61.712L-33.161-61.712L-33.161-62.009Q-32.888-62.009-32.720-62.056Q-32.552-62.103-32.552-62.271L-32.552-64.407Q-32.552-64.622-32.615-64.718Q-32.677-64.814-32.796-64.835Q-32.915-64.857-33.161-64.857L-33.161-65.153L-31.970-65.239L-31.970-64.505Q-31.857-64.720-31.663-64.888Q-31.470-65.056-31.232-65.148Q-30.994-65.239-30.740-65.239Q-29.779-65.239-29.603-64.528Q-29.419-64.857-29.091-65.048Q-28.763-65.239-28.384-65.239Q-27.208-65.239-27.208-64.161L-27.208-62.271Q-27.208-62.103-27.040-62.056Q-26.872-62.009-26.603-62.009L-26.603-61.712L-28.458-61.712L-28.458-62.009Q-28.185-62.009-28.017-62.054Q-27.849-62.099-27.849-62.271L-27.849-64.146Q-27.849-64.532-27.974-64.759Q-28.099-64.985-28.451-64.985Q-28.755-64.985-29.011-64.823Q-29.267-64.661-29.415-64.392Q-29.564-64.122-29.564-63.825L-29.564-62.271Q-29.564-62.103-29.394-62.056Q-29.224-62.009-28.954-62.009L-28.954-61.712L-30.810-61.712L-30.810-62.009Q-30.536-62.009-30.369-62.056Q-30.201-62.103-30.201-62.271L-30.201-64.146Q-30.201-64.532-30.326-64.759Q-30.451-64.985-30.802-64.985Q-31.107-64.985-31.363-64.823Q-31.619-64.661-31.767-64.392Q-31.915-64.122-31.915-63.825L-31.915-62.271Q-31.915-62.103-31.745-62.056Q-31.576-62.009-31.306-62.009L-31.306-61.712M-24.298-61.712L-26.076-61.712L-26.076-62.009Q-25.802-62.009-25.634-62.056Q-25.466-62.103-25.466-62.271L-25.466-64.407Q-25.466-64.622-25.523-64.718Q-25.579-64.814-25.693-64.835Q-25.806-64.857-26.052-64.857L-26.052-65.153L-24.853-65.239L-24.853-62.271Q-24.853-62.103-24.706-62.056Q-24.560-62.009-24.298-62.009L-24.298-61.712M-25.740-66.634Q-25.740-66.825-25.605-66.956Q-25.470-67.087-25.275-67.087Q-25.154-67.087-25.050-67.025Q-24.947-66.962-24.884-66.858Q-24.822-66.755-24.822-66.634Q-24.822-66.439-24.953-66.304Q-25.083-66.169-25.275-66.169Q-25.474-66.169-25.607-66.302Q-25.740-66.435-25.740-66.634M-23.755-61.720L-23.755-62.942Q-23.755-62.970-23.724-63.001Q-23.693-63.032-23.669-63.032L-23.564-63.032Q-23.494-63.032-23.478-62.970Q-23.415-62.650-23.277-62.409Q-23.138-62.169-22.906-62.028Q-22.673-61.888-22.365-61.888Q-22.126-61.888-21.917-61.948Q-21.708-62.009-21.572-62.157Q-21.435-62.306-21.435-62.552Q-21.435-62.806-21.646-62.972Q-21.857-63.138-22.126-63.192L-22.747-63.306Q-23.154-63.384-23.454-63.640Q-23.755-63.896-23.755-64.271Q-23.755-64.638-23.554-64.860Q-23.353-65.083-23.029-65.181Q-22.704-65.278-22.365-65.278Q-21.900-65.278-21.603-65.071L-21.380-65.255Q-21.357-65.278-21.326-65.278L-21.275-65.278Q-21.244-65.278-21.216-65.251Q-21.189-65.224-21.189-65.192L-21.189-64.208Q-21.189-64.177-21.214-64.148Q-21.240-64.118-21.275-64.118L-21.380-64.118Q-21.415-64.118-21.443-64.146Q-21.470-64.173-21.470-64.208Q-21.470-64.607-21.722-64.827Q-21.974-65.048-22.372-65.048Q-22.728-65.048-23.011-64.925Q-23.294-64.802-23.294-64.497Q-23.294-64.278-23.093-64.146Q-22.892-64.013-22.646-63.970L-22.021-63.857Q-21.591-63.767-21.283-63.470Q-20.974-63.173-20.974-62.759Q-20.974-62.189-21.372-61.911Q-21.771-61.634-22.365-61.634Q-22.915-61.634-23.267-61.970L-23.564-61.657Q-23.587-61.634-23.622-61.634L-23.669-61.634Q-23.693-61.634-23.724-61.665Q-23.755-61.696-23.755-61.720M-18.517-61.712L-20.372-61.712L-20.372-62.009Q-20.099-62.009-19.931-62.056Q-19.763-62.103-19.763-62.271L-19.763-64.407Q-19.763-64.622-19.826-64.718Q-19.888-64.814-20.007-64.835Q-20.126-64.857-20.372-64.857L-20.372-65.153L-19.181-65.239L-19.181-64.505Q-19.068-64.720-18.874-64.888Q-18.681-65.056-18.443-65.148Q-18.204-65.239-17.951-65.239Q-16.990-65.239-16.814-64.528Q-16.630-64.857-16.302-65.048Q-15.974-65.239-15.595-65.239Q-14.419-65.239-14.419-64.161L-14.419-62.271Q-14.419-62.103-14.251-62.056Q-14.083-62.009-13.814-62.009L-13.814-61.712L-15.669-61.712L-15.669-62.009Q-15.396-62.009-15.228-62.054Q-15.060-62.099-15.060-62.271L-15.060-64.146Q-15.060-64.532-15.185-64.759Q-15.310-64.985-15.661-64.985Q-15.966-64.985-16.222-64.823Q-16.478-64.661-16.626-64.392Q-16.775-64.122-16.775-63.825L-16.775-62.271Q-16.775-62.103-16.605-62.056Q-16.435-62.009-16.165-62.009L-16.165-61.712L-18.021-61.712L-18.021-62.009Q-17.747-62.009-17.579-62.056Q-17.411-62.103-17.411-62.271L-17.411-64.146Q-17.411-64.532-17.536-64.759Q-17.661-64.985-18.013-64.985Q-18.318-64.985-18.574-64.823Q-18.829-64.661-18.978-64.392Q-19.126-64.122-19.126-63.825L-19.126-62.271Q-19.126-62.103-18.956-62.056Q-18.786-62.009-18.517-62.009L-18.517-61.712M-13.271-62.544Q-13.271-63.028-12.869-63.323Q-12.466-63.618-11.915-63.737Q-11.365-63.857-10.872-63.857L-10.872-64.146Q-10.872-64.372-10.988-64.579Q-11.103-64.786-11.300-64.905Q-11.497-65.025-11.728-65.025Q-12.154-65.025-12.439-64.919Q-12.369-64.892-12.322-64.837Q-12.275-64.782-12.249-64.712Q-12.224-64.642-12.224-64.567Q-12.224-64.462-12.275-64.370Q-12.326-64.278-12.417-64.228Q-12.509-64.177-12.615-64.177Q-12.720-64.177-12.812-64.228Q-12.904-64.278-12.954-64.370Q-13.005-64.462-13.005-64.567Q-13.005-64.985-12.617-65.132Q-12.228-65.278-11.728-65.278Q-11.396-65.278-11.042-65.148Q-10.689-65.017-10.460-64.763Q-10.232-64.509-10.232-64.161L-10.232-62.360Q-10.232-62.228-10.160-62.118Q-10.087-62.009-9.958-62.009Q-9.833-62.009-9.765-62.114Q-9.697-62.220-9.697-62.360L-9.697-62.872L-9.415-62.872L-9.415-62.360Q-9.415-62.157-9.533-61.999Q-9.650-61.841-9.831-61.757Q-10.013-61.673-10.216-61.673Q-10.447-61.673-10.599-61.845Q-10.751-62.017-10.783-62.247Q-10.943-61.966-11.251-61.800Q-11.560-61.634-11.911-61.634Q-12.423-61.634-12.847-61.857Q-13.271-62.079-13.271-62.544M-12.583-62.544Q-12.583-62.259-12.357-62.073Q-12.130-61.888-11.837-61.888Q-11.591-61.888-11.367-62.005Q-11.142-62.122-11.007-62.325Q-10.872-62.528-10.872-62.782L-10.872-63.614Q-11.138-63.614-11.423-63.560Q-11.708-63.505-11.980-63.376Q-12.251-63.247-12.417-63.040Q-12.583-62.833-12.583-62.544M-8.497-62.673L-8.497-64.864L-9.201-64.864L-9.201-65.118Q-8.845-65.118-8.603-65.351Q-8.361-65.583-8.249-65.931Q-8.138-66.278-8.138-66.634L-7.857-66.634L-7.857-65.161L-6.681-65.161L-6.681-64.864L-7.857-64.864L-7.857-62.689Q-7.857-62.368-7.738-62.140Q-7.619-61.911-7.337-61.911Q-7.158-61.911-7.040-62.034Q-6.923-62.157-6.870-62.337Q-6.818-62.517-6.818-62.689L-6.818-63.161L-6.536-63.161L-6.536-62.673Q-6.536-62.419-6.642-62.179Q-6.747-61.939-6.945-61.786Q-7.142-61.634-7.400-61.634Q-7.716-61.634-7.968-61.757Q-8.220-61.880-8.359-62.114Q-8.497-62.349-8.497-62.673M-5.775-63.439Q-5.775-63.935-5.525-64.360Q-5.275-64.786-4.855-65.032Q-4.435-65.278-3.935-65.278Q-3.396-65.278-3.005-65.153Q-2.615-65.028-2.615-64.614Q-2.615-64.509-2.665-64.417Q-2.716-64.325-2.808-64.275Q-2.900-64.224-3.009-64.224Q-3.115-64.224-3.206-64.275Q-3.298-64.325-3.349-64.417Q-3.400-64.509-3.400-64.614Q-3.400-64.837-3.232-64.942Q-3.454-65.001-3.927-65.001Q-4.224-65.001-4.439-64.862Q-4.654-64.724-4.785-64.493Q-4.915-64.263-4.974-63.993Q-5.033-63.724-5.033-63.439Q-5.033-63.044-4.900-62.694Q-4.767-62.345-4.495-62.128Q-4.224-61.911-3.826-61.911Q-3.451-61.911-3.175-62.128Q-2.900-62.345-2.798-62.704Q-2.783-62.767-2.720-62.767L-2.615-62.767Q-2.579-62.767-2.554-62.739Q-2.529-62.712-2.529-62.673L-2.529-62.650Q-2.661-62.169-3.046-61.901Q-3.431-61.634-3.935-61.634Q-4.298-61.634-4.632-61.771Q-4.966-61.907-5.226-62.157Q-5.486-62.407-5.630-62.743Q-5.775-63.079-5.775-63.439",[1336],[1320,4982,4983],{"transform":4976},[1325,4984],{"d":4985,"fill":1418,"stroke":1418,"className":4986,"style":1391},"M-0.327-61.712L-2.183-61.712L-2.183-62.009Q-1.909-62.009-1.741-62.056Q-1.573-62.103-1.573-62.271L-1.573-66.431Q-1.573-66.646-1.636-66.741Q-1.698-66.837-1.817-66.858Q-1.936-66.880-2.183-66.880L-2.183-67.177L-0.960-67.263L-0.960-64.560Q-0.835-64.771-0.647-64.921Q-0.460-65.071-0.233-65.155Q-0.007-65.239 0.239-65.239Q1.407-65.239 1.407-64.161L1.407-62.271Q1.407-62.103 1.577-62.056Q1.747-62.009 2.017-62.009L2.017-61.712L0.161-61.712L0.161-62.009Q0.435-62.009 0.603-62.056Q0.771-62.103 0.771-62.271L0.771-64.146Q0.771-64.528 0.650-64.757Q0.528-64.985 0.177-64.985Q-0.136-64.985-0.390-64.823Q-0.643-64.661-0.790-64.392Q-0.936-64.122-0.936-63.825L-0.936-62.271Q-0.936-62.103-0.766-62.056Q-0.597-62.009-0.327-62.009",[1336],[1320,4988,4989,4992],{"fill":1394},[1325,4990],{"d":4991},"M-3.598 10.843h19.917V-9.074H-3.598Z",[1320,4993,4995],{"transform":4994},"translate(36.366 65.671)",[1325,4996],{"d":4817,"fill":1322,"stroke":1322,"className":4997,"style":1337},[1336],[1320,4999,5000,5003],{"fill":1394},[1325,5001],{"d":5002},"M16.319 10.843h19.917V-9.074H16.319Z",[1320,5004,5006],{"transform":5005},"translate(56.027 65.671)",[1325,5007],{"d":4827,"fill":1322,"stroke":1322,"className":5008,"style":1337},[1336],[1320,5010,5011,5014],{"fill":1394},[1325,5012],{"d":5013},"M36.236 10.843h19.916V-9.074H36.236Z",[1320,5015,5017],{"transform":5016},"translate(76.2 65.671)",[1325,5018],{"d":4817,"fill":1322,"stroke":1322,"className":5019,"style":1337},[1336],[1320,5021,5022,5025],{"fill":1394},[1325,5023],{"d":5024},"M56.153 10.843h19.916V-9.074H56.153Z",[1320,5026,5028],{"transform":5027},"translate(95.86 65.671)",[1325,5029],{"d":4827,"fill":1322,"stroke":1322,"className":5030,"style":1337},[1336],[1320,5032,5033,5036],{"fill":1394},[1325,5034],{"d":5035},"M76.07 10.843h19.916V-9.074H76.07Z",[1320,5037,5039],{"transform":5038},"translate(116.033 65.671)",[1325,5040],{"d":4817,"fill":1322,"stroke":1322,"className":5041,"style":1337},[1336],[1320,5043,5044,5047],{"fill":1394},[1325,5045],{"d":5046},"M95.986 10.843h19.917V-9.074H95.986Z",[1320,5048,5050],{"transform":5049},"translate(135.797 65.671)",[1325,5051],{"d":4955,"fill":1322,"stroke":1322,"className":5052,"style":1337},[1336],[1320,5054,5055,5061],{"stroke":1327},[1320,5056,5058],{"transform":5057},"translate(8.343 65.674)",[1325,5059],{"d":4962,"fill":1322,"stroke":1322,"className":5060,"style":1391},[1336],[1320,5062,5063],{"transform":5057},[1325,5064],{"d":5065,"fill":1322,"stroke":1322,"className":5066,"style":2879},"M-26.303-64.769L-26.485-64.840Q-26.538-64.860-26.538-64.919Q-26.538-64.925-26.532-64.948L-25.674-67.643Q-25.638-67.758-25.546-67.824Q-25.454-67.889-25.345-67.889Q-25.196-67.889-25.080-67.788Q-24.965-67.687-24.965-67.541Q-24.965-67.456-25.003-67.380L-26.189-64.810Q-26.218-64.764-26.268-64.764Q-26.274-64.764-26.303-64.769",[1336],[1320,5068,5069,5076,5082,5088,5094,5100,5106,5112,5118,5124,5130,5136],{"stroke":1327,"fontSize":1431},[1320,5070,5072],{"transform":5071},"translate(164.187 47.524)",[1325,5073],{"d":5074,"fill":1322,"stroke":1322,"className":5075,"style":1391},"M-33.193-61.720L-33.193-62.942Q-33.193-62.970-33.161-63.001Q-33.130-63.032-33.107-63.032L-33.001-63.032Q-32.931-63.032-32.915-62.970Q-32.853-62.650-32.714-62.409Q-32.576-62.169-32.343-62.028Q-32.111-61.888-31.802-61.888Q-31.564-61.888-31.355-61.948Q-31.146-62.009-31.009-62.157Q-30.872-62.306-30.872-62.552Q-30.872-62.806-31.083-62.972Q-31.294-63.138-31.564-63.192L-32.185-63.306Q-32.591-63.384-32.892-63.640Q-33.193-63.896-33.193-64.271Q-33.193-64.638-32.992-64.860Q-32.790-65.083-32.466-65.181Q-32.142-65.278-31.802-65.278Q-31.337-65.278-31.040-65.071L-30.818-65.255Q-30.794-65.278-30.763-65.278L-30.712-65.278Q-30.681-65.278-30.654-65.251Q-30.626-65.224-30.626-65.192L-30.626-64.208Q-30.626-64.177-30.652-64.148Q-30.677-64.118-30.712-64.118L-30.818-64.118Q-30.853-64.118-30.880-64.146Q-30.908-64.173-30.908-64.208Q-30.908-64.607-31.160-64.827Q-31.411-65.048-31.810-65.048Q-32.165-65.048-32.449-64.925Q-32.732-64.802-32.732-64.497Q-32.732-64.278-32.531-64.146Q-32.329-64.013-32.083-63.970L-31.458-63.857Q-31.029-63.767-30.720-63.470Q-30.411-63.173-30.411-62.759Q-30.411-62.189-30.810-61.911Q-31.208-61.634-31.802-61.634Q-32.353-61.634-32.704-61.970L-33.001-61.657Q-33.025-61.634-33.060-61.634L-33.107-61.634Q-33.130-61.634-33.161-61.665Q-33.193-61.696-33.193-61.720M-27.970-61.712L-29.802-61.712L-29.802-62.009Q-29.529-62.009-29.361-62.056Q-29.193-62.103-29.193-62.271L-29.193-66.431Q-29.193-66.646-29.255-66.741Q-29.318-66.837-29.437-66.858Q-29.556-66.880-29.802-66.880L-29.802-67.177L-28.579-67.263L-28.579-62.271Q-28.579-62.103-28.411-62.056Q-28.244-62.009-27.970-62.009L-27.970-61.712M-25.665-61.712L-27.443-61.712L-27.443-62.009Q-27.169-62.009-27.001-62.056Q-26.833-62.103-26.833-62.271L-26.833-64.407Q-26.833-64.622-26.890-64.718Q-26.947-64.814-27.060-64.835Q-27.173-64.857-27.419-64.857L-27.419-65.153L-26.220-65.239L-26.220-62.271Q-26.220-62.103-26.074-62.056Q-25.927-62.009-25.665-62.009L-25.665-61.712M-27.107-66.634Q-27.107-66.825-26.972-66.956Q-26.837-67.087-26.642-67.087Q-26.521-67.087-26.417-67.025Q-26.314-66.962-26.251-66.858Q-26.189-66.755-26.189-66.634Q-26.189-66.439-26.320-66.304Q-26.451-66.169-26.642-66.169Q-26.841-66.169-26.974-66.302Q-27.107-66.435-27.107-66.634M-23.349-61.634Q-23.829-61.634-24.238-61.878Q-24.646-62.122-24.884-62.536Q-25.122-62.950-25.122-63.439Q-25.122-63.931-24.865-64.347Q-24.607-64.763-24.175-65.001Q-23.744-65.239-23.251-65.239Q-22.630-65.239-22.181-64.802L-22.181-66.431Q-22.181-66.646-22.244-66.741Q-22.306-66.837-22.423-66.858Q-22.540-66.880-22.786-66.880L-22.786-67.177L-21.564-67.263L-21.564-62.454Q-21.564-62.243-21.501-62.148Q-21.439-62.052-21.322-62.030Q-21.204-62.009-20.954-62.009L-20.954-61.712L-22.204-61.634L-22.204-62.118Q-22.669-61.634-23.349-61.634M-23.283-61.888Q-22.943-61.888-22.650-62.079Q-22.357-62.271-22.204-62.567L-22.204-64.400Q-22.353-64.673-22.615-64.829Q-22.876-64.985-23.189-64.985Q-23.814-64.985-24.097-64.538Q-24.380-64.091-24.380-63.431Q-24.380-62.786-24.128-62.337Q-23.876-61.888-23.283-61.888M-20.447-63.466Q-20.447-63.946-20.214-64.362Q-19.982-64.778-19.572-65.028Q-19.161-65.278-18.685-65.278Q-17.954-65.278-17.556-64.837Q-17.158-64.396-17.158-63.665Q-17.158-63.560-17.251-63.536L-19.701-63.536L-19.701-63.466Q-19.701-63.056-19.579-62.700Q-19.458-62.345-19.187-62.128Q-18.915-61.911-18.486-61.911Q-18.122-61.911-17.826-62.140Q-17.529-62.368-17.427-62.720Q-17.419-62.767-17.333-62.782L-17.251-62.782Q-17.158-62.755-17.158-62.673Q-17.158-62.665-17.165-62.634Q-17.228-62.407-17.367-62.224Q-17.505-62.040-17.697-61.907Q-17.888-61.775-18.107-61.704Q-18.326-61.634-18.564-61.634Q-18.935-61.634-19.273-61.771Q-19.611-61.907-19.878-62.159Q-20.146-62.411-20.296-62.751Q-20.447-63.091-20.447-63.466M-19.693-63.775L-17.732-63.775Q-17.732-64.079-17.833-64.370Q-17.935-64.661-18.152-64.843Q-18.369-65.025-18.685-65.025Q-18.986-65.025-19.216-64.837Q-19.447-64.650-19.570-64.358Q-19.693-64.067-19.693-63.775",[1336],[1320,5077,5078],{"transform":5071},[1325,5079],{"d":5080,"fill":1322,"stroke":1322,"className":5081,"style":1391},"M-12.913-61.712L-13.194-61.712L-13.194-66.431Q-13.194-66.646-13.256-66.741Q-13.319-66.837-13.436-66.858Q-13.553-66.880-13.799-66.880L-13.799-67.177L-12.577-67.263L-12.577-64.775Q-12.100-65.239-11.401-65.239Q-10.920-65.239-10.512-64.995Q-10.104-64.751-9.868-64.337Q-9.631-63.923-9.631-63.439Q-9.631-63.064-9.780-62.735Q-9.928-62.407-10.198-62.155Q-10.467-61.903-10.811-61.769Q-11.155-61.634-11.514-61.634Q-11.835-61.634-12.133-61.782Q-12.432-61.931-12.639-62.192L-12.913-61.712M-12.553-64.384L-12.553-62.544Q-12.401-62.247-12.141-62.067Q-11.881-61.888-11.569-61.888Q-11.143-61.888-10.876-62.107Q-10.608-62.325-10.493-62.671Q-10.377-63.017-10.377-63.439Q-10.377-64.087-10.626-64.536Q-10.874-64.985-11.471-64.985Q-11.807-64.985-12.096-64.827Q-12.385-64.669-12.553-64.384",[1336],[1320,5083,5084],{"transform":5071},[1325,5085],{"d":5086,"fill":1322,"stroke":1322,"className":5087,"style":1391},"M-8.923-60.415Q-8.809-60.337-8.634-60.337Q-8.345-60.337-8.124-60.550Q-7.903-60.763-7.778-61.064L-7.489-61.712L-8.763-64.599Q-8.845-64.775-8.989-64.819Q-9.134-64.864-9.403-64.864L-9.403-65.161L-7.684-65.161L-7.684-64.864Q-8.106-64.864-8.106-64.681Q-8.106-64.669-8.091-64.599L-7.153-62.474L-6.321-64.384Q-6.282-64.474-6.282-64.552Q-6.282-64.692-6.384-64.778Q-6.485-64.864-6.626-64.864L-6.626-65.161L-5.274-65.161L-5.274-64.864Q-5.528-64.864-5.722-64.739Q-5.915-64.614-6.020-64.384L-7.466-61.064Q-7.579-60.810-7.745-60.587Q-7.911-60.364-8.140-60.222Q-8.368-60.079-8.634-60.079Q-8.931-60.079-9.171-60.271Q-9.411-60.462-9.411-60.751Q-9.411-60.907-9.306-61.009Q-9.200-61.110-9.052-61.110Q-8.946-61.110-8.866-61.064Q-8.786-61.017-8.739-60.939Q-8.692-60.860-8.692-60.751Q-8.692-60.630-8.753-60.542Q-8.813-60.454-8.923-60.415",[1336],[1320,5089,5090],{"transform":5071},[1325,5091],{"d":5092,"fill":1322,"stroke":1322,"className":5093,"style":1391},"M-0.923-60.278L-0.900-60.384Q-0.892-60.435-0.810-60.454Q-0.204-60.454-0.204-60.575Q-0.150-60.712-0.138-60.759L0.182-62.048Q-0.282-61.634-0.755-61.634Q-1.111-61.634-1.380-61.814Q-1.650-61.993-1.790-62.288Q-1.931-62.583-1.931-62.942Q-1.931-63.329-1.769-63.743Q-1.607-64.157-1.323-64.495Q-1.040-64.833-0.671-65.036Q-0.302-65.239 0.100-65.239Q0.350-65.239 0.567-65.101Q0.784-64.962 0.901-64.735Q0.964-64.845 1.171-65.042Q1.378-65.239 1.475-65.239Q1.522-65.239 1.555-65.204Q1.589-65.169 1.589-65.118L0.483-60.704Q0.471-60.665 0.452-60.544Q0.452-60.454 0.956-60.454Q1.061-60.427 1.061-60.329L1.030-60.224Q1.022-60.181 0.940-60.161L-0.825-60.161Q-0.868-60.161-0.896-60.202Q-0.923-60.243-0.923-60.278M-0.739-61.888Q-0.439-61.888-0.159-62.095Q0.120-62.302 0.315-62.591L0.749-64.321Q0.710-64.501 0.624-64.651Q0.538-64.802 0.401-64.894Q0.264-64.985 0.085-64.985Q-0.251-64.985-0.523-64.704Q-0.794-64.423-0.954-64.048Q-1.079-63.728-1.177-63.308Q-1.275-62.888-1.275-62.607Q-1.275-62.317-1.142-62.103Q-1.009-61.888-0.739-61.888",[1336],[1320,5095,5096],{"transform":5071},[1325,5097],{"d":5098,"fill":1322,"stroke":1322,"className":5099,"style":1391},"M9.431-63.528L4.599-63.528Q4.524-63.540 4.474-63.589Q4.423-63.638 4.423-63.712Q4.423-63.864 4.599-63.896L9.431-63.896Q9.599-63.868 9.599-63.712Q9.599-63.556 9.431-63.528",[1336],[1320,5101,5102],{"transform":5071},[1325,5103],{"d":5104,"fill":1322,"stroke":1322,"className":5105,"style":1391},"M13.122-61.888Q13.122-61.962 13.165-62.048Q13.513-62.743 13.763-63.345Q14.013-63.946 14.196-64.599L13.669-64.599Q13.442-64.599 13.265-64.515Q13.087-64.431 12.997-64.349Q12.907-64.267 12.774-64.120Q12.642-63.974 12.610-63.970L12.509-63.970Q12.470-63.970 12.444-63.999Q12.419-64.028 12.419-64.064Q12.419-64.079 12.435-64.110Q12.708-64.552 13.034-64.857Q13.360-65.161 13.747-65.161L16.821-65.161Q16.927-65.161 16.989-65.099Q17.052-65.036 17.052-64.927Q17.052-64.806 16.956-64.702Q16.860-64.599 16.732-64.599L15.669-64.599Q15.548-64.036 15.548-63.544Q15.548-62.751 15.853-62.126Q15.892-62.060 15.892-61.993Q15.892-61.857 15.771-61.745Q15.649-61.634 15.501-61.634Q15.267-61.634 15.171-62.007Q15.075-62.380 15.075-62.728Q15.075-63.032 15.118-63.345Q15.161-63.657 15.208-63.882Q15.255-64.107 15.372-64.599L14.493-64.599Q14.216-63.505 14.036-62.823Q13.857-62.142 13.763-61.911Q13.642-61.634 13.403-61.634Q13.294-61.634 13.208-61.704Q13.122-61.775 13.122-61.888",[1336],[1320,5107,5108],{"transform":5071},[1325,5109],{"d":5110,"fill":1322,"stroke":1322,"className":5111,"style":1391},"M19.548-59.712L18.372-59.712L18.372-67.712L19.548-67.712L19.548-67.345L18.739-67.345L18.739-60.079L19.548-60.079",[1336],[1320,5113,5114],{"transform":5071},[1325,5115],{"d":5116,"fill":1322,"stroke":1322,"className":5117,"style":1391},"M21.077-60.278L21.100-60.384Q21.108-60.435 21.190-60.454Q21.796-60.454 21.796-60.575Q21.850-60.712 21.862-60.759L22.182-62.048Q21.718-61.634 21.245-61.634Q20.889-61.634 20.620-61.814Q20.350-61.993 20.210-62.288Q20.069-62.583 20.069-62.942Q20.069-63.329 20.231-63.743Q20.393-64.157 20.677-64.495Q20.960-64.833 21.329-65.036Q21.698-65.239 22.100-65.239Q22.350-65.239 22.567-65.101Q22.784-64.962 22.901-64.735Q22.964-64.845 23.171-65.042Q23.378-65.239 23.475-65.239Q23.522-65.239 23.555-65.204Q23.589-65.169 23.589-65.118L22.483-60.704Q22.471-60.665 22.452-60.544Q22.452-60.454 22.956-60.454Q23.061-60.427 23.061-60.329L23.030-60.224Q23.022-60.181 22.940-60.161L21.175-60.161Q21.132-60.161 21.104-60.202Q21.077-60.243 21.077-60.278M21.261-61.888Q21.561-61.888 21.841-62.095Q22.120-62.302 22.315-62.591L22.749-64.321Q22.710-64.501 22.624-64.651Q22.538-64.802 22.401-64.894Q22.264-64.985 22.085-64.985Q21.749-64.985 21.477-64.704Q21.206-64.423 21.046-64.048Q20.921-63.728 20.823-63.308Q20.725-62.888 20.725-62.607Q20.725-62.317 20.858-62.103Q20.991-61.888 21.261-61.888",[1336],[1320,5119,5120],{"transform":5071},[1325,5121],{"d":5122,"fill":1322,"stroke":1322,"className":5123,"style":1391},"M31.431-63.528L26.599-63.528Q26.524-63.540 26.474-63.589Q26.423-63.638 26.423-63.712Q26.423-63.864 26.599-63.896L31.431-63.896Q31.599-63.868 31.599-63.712Q31.599-63.556 31.431-63.528",[1336],[1320,5125,5126],{"transform":5071},[1325,5127],{"d":5128,"fill":1322,"stroke":1322,"className":5129,"style":1391},"M37.806-61.712L35.013-61.712L35.013-62.009Q36.075-62.009 36.075-62.271L36.075-66.439Q35.646-66.224 34.966-66.224L34.966-66.521Q35.985-66.521 36.501-67.032L36.646-67.032Q36.720-67.013 36.739-66.935L36.739-62.271Q36.739-62.009 37.806-62.009L37.806-61.712M39.817-59.712L38.642-59.712L38.642-60.079L39.450-60.079L39.450-67.345L38.642-67.345L38.642-67.712L39.817-67.712",[1336],[1320,5131,5132],{"transform":5071},[1325,5133],{"d":5134,"fill":1322,"stroke":1322,"className":5135,"style":1391},"M49.145-62.689L43.832-62.689Q43.754-62.696 43.705-62.745Q43.657-62.794 43.657-62.872Q43.657-62.942 43.704-62.993Q43.750-63.044 43.832-63.056L49.145-63.056Q49.219-63.044 49.266-62.993Q49.313-62.942 49.313-62.872Q49.313-62.794 49.264-62.745Q49.215-62.696 49.145-62.689M49.145-64.376L43.832-64.376Q43.754-64.384 43.705-64.433Q43.657-64.482 43.657-64.560Q43.657-64.630 43.704-64.681Q43.750-64.732 43.832-64.743L49.145-64.743Q49.219-64.732 49.266-64.681Q49.313-64.630 49.313-64.560Q49.313-64.482 49.264-64.433Q49.215-64.384 49.145-64.376",[1336],[1320,5137,5138],{"transform":5071},[1325,5139],{"d":5140,"fill":1322,"stroke":1322,"className":5141,"style":1391},"M55.743-61.712L52.583-61.712L52.583-61.919Q52.583-61.946 52.606-61.978L53.958-63.376Q54.337-63.763 54.585-64.052Q54.833-64.341 55.007-64.698Q55.180-65.056 55.180-65.446Q55.180-65.794 55.048-66.087Q54.915-66.380 54.661-66.558Q54.407-66.735 54.052-66.735Q53.692-66.735 53.401-66.540Q53.110-66.345 52.966-66.017L53.020-66.017Q53.204-66.017 53.329-65.896Q53.454-65.775 53.454-65.583Q53.454-65.403 53.329-65.275Q53.204-65.146 53.020-65.146Q52.841-65.146 52.712-65.275Q52.583-65.403 52.583-65.583Q52.583-65.985 52.803-66.321Q53.024-66.657 53.389-66.845Q53.755-67.032 54.157-67.032Q54.637-67.032 55.053-66.845Q55.469-66.657 55.721-66.296Q55.973-65.935 55.973-65.446Q55.973-65.087 55.819-64.784Q55.665-64.482 55.413-64.222Q55.161-63.962 54.811-63.677Q54.462-63.392 54.294-63.239L53.364-62.400L54.079-62.400Q55.454-62.400 55.493-62.439Q55.563-62.517 55.606-62.702Q55.649-62.888 55.692-63.177L55.973-63.177",[1336],[1610,5143,5145,5146,5149,5150,5228],{"className":5144},[1613],"A KMP shift. After matching ABABA, P fails on ",[845,5147,5148],{},"C"," vs the text (highlighted). The longest border ABA realigns, sliding P right by ",[395,5151,5153],{"className":5152},[398],[395,5154,5156,5174,5198,5219],{"className":5155,"ariaHidden":403},[402],[395,5157,5159,5162,5165,5168,5171],{"className":5158},[407],[395,5160],{"className":5161,"style":3946},[411],[395,5163,826],{"className":5164,"style":1865},[416,417],[395,5166],{"className":5167,"style":453},[432],[395,5169,458],{"className":5170},[457],[395,5172],{"className":5173,"style":453},[432],[395,5175,5177,5180,5183,5186,5189,5192,5195],{"className":5176},[407],[395,5178],{"className":5179,"style":412},[411],[395,5181,4247],{"className":5182,"style":1865},[416,417],[395,5184,424],{"className":5185},[423],[395,5187,826],{"className":5188,"style":1865},[416,417],[395,5190],{"className":5191,"style":453},[432],[395,5193,458],{"className":5194},[457],[395,5196],{"className":5197,"style":453},[432],[395,5199,5201,5204,5207,5210,5213,5216],{"className":5200},[407],[395,5202],{"className":5203,"style":412},[411],[395,5205,471],{"className":5206},[416],[395,5208,476],{"className":5209},[475],[395,5211],{"className":5212,"style":702},[432],[395,5214,707],{"className":5215},[706],[395,5217],{"className":5218,"style":702},[432],[395,5220,5222,5225],{"className":5221},[407],[395,5223],{"className":5224,"style":769},[411],[395,5226,3779],{"className":5227},[416]," with no rescanning of the text.",[381,5230,5231,5232,5247,5248,5263,5264,5281,5282,5297,5298,5349,5350,5365,5366,2527],{},"Computing ",[395,5233,5235],{"className":5234},[398],[395,5236,5238],{"className":5237,"ariaHidden":403},[402],[395,5239,5241,5244],{"className":5240},[407],[395,5242],{"className":5243,"style":568},[411],[395,5245,4247],{"className":5246,"style":1865},[416,417]," uses the very same self-matching idea, run on ",[395,5249,5251],{"className":5250},[398],[395,5252,5254],{"className":5253,"ariaHidden":403},[402],[395,5255,5257,5260],{"className":5256},[407],[395,5258],{"className":5259,"style":550},[411],[395,5261,493],{"className":5262,"style":418},[416,417]," against itself.\nMaintain the length ",[395,5265,5267],{"className":5266},[398],[395,5268,5270],{"className":5269,"ariaHidden":403},[402],[395,5271,5273,5276],{"className":5272},[407],[395,5274],{"className":5275,"style":1824},[411],[395,5277,5280],{"className":5278,"style":5279},[416,417],"margin-right:0.0315em;","k"," of the current longest border; to extend to index ",[395,5283,5285],{"className":5284},[398],[395,5286,5288],{"className":5287,"ariaHidden":403},[402],[395,5289,5291,5294],{"className":5290},[407],[395,5292],{"className":5293,"style":4226},[411],[395,5295,4230],{"className":5296},[416,417],",\nfollow failure links downward until ",[395,5299,5301],{"className":5300},[398],[395,5302,5304,5331],{"className":5303,"ariaHidden":403},[402],[395,5305,5307,5310,5313,5316,5319,5322,5325,5328],{"className":5306},[407],[395,5308],{"className":5309,"style":412},[411],[395,5311,493],{"className":5312,"style":418},[416,417],[395,5314,424],{"className":5315},[423],[395,5317,5280],{"className":5318,"style":5279},[416,417],[395,5320,476],{"className":5321},[475],[395,5323],{"className":5324,"style":702},[432],[395,5326,707],{"className":5327},[706],[395,5329],{"className":5330,"style":702},[432],[395,5332,5334,5337,5340,5343,5346],{"className":5333},[407],[395,5335],{"className":5336,"style":412},[411],[395,5338,493],{"className":5339,"style":418},[416,417],[395,5341,424],{"className":5342},[423],[395,5344,4230],{"className":5345},[416,417],[395,5347,476],{"className":5348},[475]," or ",[395,5351,5353],{"className":5352},[398],[395,5354,5356],{"className":5355,"ariaHidden":403},[402],[395,5357,5359,5362],{"className":5358},[407],[395,5360],{"className":5361,"style":1824},[411],[395,5363,5280],{"className":5364,"style":5279},[416,417]," falls to ",[395,5367,5369],{"className":5368},[398],[395,5370,5372],{"className":5371,"ariaHidden":403},[402],[395,5373,5375,5378],{"className":5374},[407],[395,5376],{"className":5377,"style":769},[411],[395,5379,428],{"className":5380},[416],[839,5382,5384],{"className":841,"code":5383,"language":843,"meta":376,"style":376},"caption: $\\textsc{Prefix-Function}(P)$ — compute the failure array $\\pi$ in $O(m)$\n$\\pi[0] \\gets 0;\\ k \\gets 0$\nfor $i \\gets 1$ to $m - 1$ do\n  while $k > 0$ and $P[k] \\ne P[i]$ do\n    $k \\gets \\pi[k - 1]$            \u002F\u002F fall back\n  if $P[k] = P[i]$ then\n    $k \\gets k + 1$                 \u002F\u002F extend border\n  $\\pi[i] \\gets k$\nreturn $\\pi$\n",[845,5385,5386,5391,5396,5401,5406,5411,5416,5421,5426],{"__ignoreMap":376},[395,5387,5388],{"class":849,"line":6},[395,5389,5390],{},"caption: $\\textsc{Prefix-Function}(P)$ — compute the failure array $\\pi$ in $O(m)$\n",[395,5392,5393],{"class":849,"line":18},[395,5394,5395],{},"$\\pi[0] \\gets 0;\\ k \\gets 0$\n",[395,5397,5398],{"class":849,"line":24},[395,5399,5400],{},"for $i \\gets 1$ to $m - 1$ do\n",[395,5402,5403],{"class":849,"line":73},[395,5404,5405],{},"  while $k > 0$ and $P[k] \\ne P[i]$ do\n",[395,5407,5408],{"class":849,"line":102},[395,5409,5410],{},"    $k \\gets \\pi[k - 1]$            \u002F\u002F fall back\n",[395,5412,5413],{"class":849,"line":108},[395,5414,5415],{},"  if $P[k] = P[i]$ then\n",[395,5417,5418],{"class":849,"line":116},[395,5419,5420],{},"    $k \\gets k + 1$                 \u002F\u002F extend border\n",[395,5422,5423],{"class":849,"line":196},[395,5424,5425],{},"  $\\pi[i] \\gets k$\n",[395,5427,5428],{"class":849,"line":202},[395,5429,5430],{},"return $\\pi$\n",[839,5432,5434],{"className":841,"code":5433,"language":843,"meta":376,"style":376},"caption: $\\textsc{KMP-Match}(T, P)$ — scan once, never moving the text pointer back\n$\\pi \\gets \\textsc{Prefix-Function}(P)$\n$q \\gets 0$                          \u002F\u002F chars matched so far\nfor $i \\gets 0$ to $n - 1$ do\n  while $q > 0$ and $P[q] \\ne T[i]$ do\n    $q \\gets \\pi[q - 1]$             \u002F\u002F mismatch: fall back\n  if $P[q] = T[i]$ then\n    $q \\gets q + 1$\n  if $q = m$ then\n    report occurrence at shift $i - m + 1$\n    $q \\gets \\pi[q - 1]$             \u002F\u002F allow overlapping matches\n",[845,5435,5436,5441,5446,5451,5456,5461,5466,5471,5476,5481,5486],{"__ignoreMap":376},[395,5437,5438],{"class":849,"line":6},[395,5439,5440],{},"caption: $\\textsc{KMP-Match}(T, P)$ — scan once, never moving the text pointer back\n",[395,5442,5443],{"class":849,"line":18},[395,5444,5445],{},"$\\pi \\gets \\textsc{Prefix-Function}(P)$\n",[395,5447,5448],{"class":849,"line":24},[395,5449,5450],{},"$q \\gets 0$                          \u002F\u002F chars matched so far\n",[395,5452,5453],{"class":849,"line":73},[395,5454,5455],{},"for $i \\gets 0$ to $n - 1$ do\n",[395,5457,5458],{"class":849,"line":102},[395,5459,5460],{},"  while $q > 0$ and $P[q] \\ne T[i]$ do\n",[395,5462,5463],{"class":849,"line":108},[395,5464,5465],{},"    $q \\gets \\pi[q - 1]$             \u002F\u002F mismatch: fall back\n",[395,5467,5468],{"class":849,"line":116},[395,5469,5470],{},"  if $P[q] = T[i]$ then\n",[395,5472,5473],{"class":849,"line":196},[395,5474,5475],{},"    $q \\gets q + 1$\n",[395,5477,5478],{"class":849,"line":202},[395,5479,5480],{},"  if $q = m$ then\n",[395,5482,5483],{"class":849,"line":283},[395,5484,5485],{},"    report occurrence at shift $i - m + 1$\n",[395,5487,5488],{"class":849,"line":333},[395,5489,5490],{},"    $q \\gets \\pi[q - 1]$             \u002F\u002F allow overlapping matches\n",[1232,5492,5493],{"type":3238},[381,5494,5495,5497,5498,3316],{},[390,5496,3243],{}," Both procedures run in linear time, so KMP matches in\n",[395,5499,5501],{"className":5500},[398],[395,5502,5504,5528],{"className":5503,"ariaHidden":403},[402],[395,5505,5507,5510,5513,5516,5519,5522,5525],{"className":5506},[407],[395,5508],{"className":5509,"style":412},[411],[395,5511,1045],{"className":5512,"style":1044},[416,417],[395,5514,1049],{"className":5515},[423],[395,5517,449],{"className":5518},[416,417],[395,5520],{"className":5521,"style":453},[432],[395,5523,664],{"className":5524},[457],[395,5526],{"className":5527,"style":453},[432],[395,5529,5531,5534,5537],{"className":5530},[407],[395,5532],{"className":5533,"style":412},[411],[395,5535,515],{"className":5536},[416,417],[395,5538,1016],{"className":5539},[475],[1232,5541,5542],{"type":3319},[381,5543,5544,5547,5548,5563,5564,5579,5580,5595,5596,5611,5612,5627,5628,5631,5632,3287,5635,5650,5651,5712,5713,5728,5729,5744,5745,5774,5775,5799,5800,5815,5816,5831,5832,1775,5855,3737,5879],{},[390,5545,5546],{},"Proof (amortised)."," Consider the scan. The text pointer ",[395,5549,5551],{"className":5550},[398],[395,5552,5554],{"className":5553,"ariaHidden":403},[402],[395,5555,5557,5560],{"className":5556},[407],[395,5558],{"className":5559,"style":4226},[411],[395,5561,4230],{"className":5562},[416,417]," advances exactly\n",[395,5565,5567],{"className":5566},[398],[395,5568,5570],{"className":5569,"ariaHidden":403},[402],[395,5571,5573,5576],{"className":5572},[407],[395,5574],{"className":5575,"style":568},[411],[395,5577,449],{"className":5578},[416,417]," times and never retreats. The matched-length variable ",[395,5581,5583],{"className":5582},[398],[395,5584,5586],{"className":5585,"ariaHidden":403},[402],[395,5587,5589,5592],{"className":5588},[407],[395,5590],{"className":5591,"style":1861},[411],[395,5593,826],{"className":5594,"style":1865},[416,417]," increases by at\nmost ",[395,5597,5599],{"className":5598},[398],[395,5600,5602],{"className":5601,"ariaHidden":403},[402],[395,5603,5605,5608],{"className":5604},[407],[395,5606],{"className":5607,"style":769},[411],[395,5609,471],{"className":5610},[416]," per iteration, so it increases at most ",[395,5613,5615],{"className":5614},[398],[395,5616,5618],{"className":5617,"ariaHidden":403},[402],[395,5619,5621,5624],{"className":5620},[407],[395,5622],{"className":5623,"style":568},[411],[395,5625,449],{"className":5626},[416,417]," times total. Every iteration\nof the inner ",[845,5629,5630],{},"while"," strictly ",[385,5633,5634],{},"decreases",[395,5636,5638],{"className":5637},[398],[395,5639,5641],{"className":5640,"ariaHidden":403},[402],[395,5642,5644,5647],{"className":5643},[407],[395,5645],{"className":5646,"style":1861},[411],[395,5648,826],{"className":5649,"style":1865},[416,417]," (since ",[395,5652,5654],{"className":5653},[398],[395,5655,5657,5681,5703],{"className":5656,"ariaHidden":403},[402],[395,5658,5660,5663,5666,5669,5672,5675,5678],{"className":5659},[407],[395,5661],{"className":5662,"style":412},[411],[395,5664,4247],{"className":5665,"style":1865},[416,417],[395,5667,424],{"className":5668},[423],[395,5670,826],{"className":5671,"style":1865},[416,417],[395,5673],{"className":5674,"style":453},[432],[395,5676,458],{"className":5677},[457],[395,5679],{"className":5680,"style":453},[432],[395,5682,5684,5687,5690,5693,5696,5700],{"className":5683},[407],[395,5685],{"className":5686,"style":412},[411],[395,5688,471],{"className":5689},[416],[395,5691,476],{"className":5692},[475],[395,5694],{"className":5695,"style":702},[432],[395,5697,5699],{"className":5698},[706],"\u003C",[395,5701],{"className":5702,"style":702},[432],[395,5704,5706,5709],{"className":5705},[407],[395,5707],{"className":5708,"style":1861},[411],[395,5710,826],{"className":5711,"style":1865},[416,417],"), and ",[395,5714,5716],{"className":5715},[398],[395,5717,5719],{"className":5718,"ariaHidden":403},[402],[395,5720,5722,5725],{"className":5721},[407],[395,5723],{"className":5724,"style":1861},[411],[395,5726,826],{"className":5727,"style":1865},[416,417],"\ncan never go below ",[395,5730,5732],{"className":5731},[398],[395,5733,5735],{"className":5734,"ariaHidden":403},[402],[395,5736,5738,5741],{"className":5737},[407],[395,5739],{"className":5740,"style":769},[411],[395,5742,428],{"className":5743},[416],"; therefore the total number of inner-loop decrements over\nthe whole run is at most the total number of increments, ",[395,5746,5748],{"className":5747},[398],[395,5749,5751,5765],{"className":5750,"ariaHidden":403},[402],[395,5752,5754,5758,5762],{"className":5753},[407],[395,5755],{"className":5756,"style":5757},[411],"height:0.7719em;vertical-align:-0.136em;",[395,5759,5761],{"className":5760},[706],"≤",[395,5763],{"className":5764,"style":702},[432],[395,5766,5768,5771],{"className":5767},[407],[395,5769],{"className":5770,"style":568},[411],[395,5772,449],{"className":5773},[416,417],". The scan thus\ndoes ",[395,5776,5778],{"className":5777},[398],[395,5779,5781],{"className":5780,"ariaHidden":403},[402],[395,5782,5784,5787,5790,5793,5796],{"className":5783},[407],[395,5785],{"className":5786,"style":412},[411],[395,5788,1045],{"className":5789,"style":1044},[416,417],[395,5791,1049],{"className":5792},[423],[395,5794,449],{"className":5795},[416,417],[395,5797,1016],{"className":5798},[475]," work. The identical argument with ",[395,5801,5803],{"className":5802},[398],[395,5804,5806],{"className":5805,"ariaHidden":403},[402],[395,5807,5809,5812],{"className":5808},[407],[395,5810],{"className":5811,"style":4226},[411],[395,5813,4230],{"className":5814},[416,417]," ranging over ",[395,5817,5819],{"className":5818},[398],[395,5820,5822],{"className":5821,"ariaHidden":403},[402],[395,5823,5825,5828],{"className":5824},[407],[395,5826],{"className":5827,"style":550},[411],[395,5829,493],{"className":5830,"style":418},[416,417]," bounds\n",[395,5833,5835],{"className":5834},[398],[395,5836,5838],{"className":5837,"ariaHidden":403},[402],[395,5839,5841,5844],{"className":5840},[407],[395,5842],{"className":5843,"style":1824},[411],[395,5845,5848],{"className":5846},[3754,5847],"textsc",[395,5849,5851],{"className":5850},[416,1091],[395,5852,5854],{"className":5853},[416],"Prefix-Function",[395,5856,5858],{"className":5857},[398],[395,5859,5861],{"className":5860,"ariaHidden":403},[402],[395,5862,5864,5867,5870,5873,5876],{"className":5863},[407],[395,5865],{"className":5866,"style":412},[411],[395,5868,1045],{"className":5869,"style":1044},[416,417],[395,5871,1049],{"className":5872},[423],[395,5874,515],{"className":5875},[416,417],[395,5877,1016],{"className":5878},[475],[395,5880,5882],{"className":5881},[398],[395,5883,5885],{"className":5884,"ariaHidden":403},[402],[395,5886,5888,5891],{"className":5887},[407],[395,5889],{"className":5890,"style":3750},[411],[395,5892,5894],{"className":5893},[3754,3755],[395,5895,3760],{"className":5896},[416,3759],[381,5898,5899,5900,5915,5916,5919,5920,5927],{},"The key is that ",[395,5901,5903],{"className":5902},[398],[395,5904,5906],{"className":5905,"ariaHidden":403},[402],[395,5907,5909,5912],{"className":5908},[407],[395,5910],{"className":5911,"style":1861},[411],[395,5913,826],{"className":5914,"style":1865},[416,417]," is a ",[826,5917,5918],{},"potential"," that pays for the fallback: each unit of slide\nwas funded by an earlier successful character match.",[1213,5921,5922],{},[1216,5923,4499],{"href":5924,"ariaDescribedBy":5925,"dataFootnoteRef":376,"id":5926},"#user-content-fn-clrs-kmp",[1220],"user-content-fnref-clrs-kmp"," No text character\nis ever examined more than a constant number of times, the central property that\nthe naive scan lacks.",[5929,5930,5932],"h3",{"id":5931},"the-prefix-table-concretely","The prefix table, concretely",[381,5934,5935,5936,5973,5974,5998,5999,2527],{},"Here is the full table for ",[395,5937,5939],{"className":5938},[398],[395,5940,5942,5960],{"className":5941,"ariaHidden":403},[402],[395,5943,5945,5948,5951,5954,5957],{"className":5944},[407],[395,5946],{"className":5947,"style":550},[411],[395,5949,493],{"className":5950,"style":418},[416,417],[395,5952],{"className":5953,"style":702},[432],[395,5955,707],{"className":5956},[706],[395,5958],{"className":5959,"style":702},[432],[395,5961,5963,5966],{"className":5962},[407],[395,5964],{"className":5965,"style":1128},[411],[395,5967,5969],{"className":5968},[416,1091],[395,5970,5972],{"className":5971},[416,1095],"ABABACA",". Read it left to right: ",[395,5975,5977],{"className":5976},[398],[395,5978,5980],{"className":5979,"ariaHidden":403},[402],[395,5981,5983,5986,5989,5992,5995],{"className":5982},[407],[395,5984],{"className":5985,"style":412},[411],[395,5987,4247],{"className":5988,"style":1865},[416,417],[395,5990,424],{"className":5991},[423],[395,5993,4230],{"className":5994},[416,417],[395,5996,476],{"className":5997},[475],"\nis the length of the longest border of the prefix ending at column ",[395,6000,6002],{"className":6001},[398],[395,6003,6005],{"className":6004,"ariaHidden":403},[402],[395,6006,6008,6011],{"className":6007},[407],[395,6009],{"className":6010,"style":4226},[411],[395,6012,4230],{"className":6013},[416,417],[1307,6015,6017,6217],{"className":6016},[1310,1311],[1313,6018,6022],{"xmlns":1315,"width":6019,"height":6020,"viewBox":6021},"269.319","69.766","-75 -75 201.989 52.324",[1320,6023,6024,6027,6033,6036,6043,6046,6052,6055,6061,6064,6070,6073,6080,6083,6089,6092,6095,6102,6105,6111,6114,6121,6124,6131,6134,6141,6144,6150,6153,6159,6186,6213],{"stroke":1322,"style":1323},[1325,6025],{"fill":1327,"d":6026},"M-35.816-49.308h22.762V-72.07h-22.762Z",[1320,6028,6029],{"transform":4814},[1325,6030],{"d":6031,"fill":1322,"stroke":1322,"className":6032,"style":1337},"M-22.273-60.689L-24.004-60.689Q-24.101-60.689-24.101-60.808Q-24.101-60.865-24.070-60.935Q-24.039-61.005-23.978-61.005Q-23.288-61.005-22.888-61.616Q-22.888-61.616-22.862-61.643L-19.592-67.026Q-19.531-67.131-19.403-67.131L-19.315-67.131Q-19.192-67.131-19.179-67.026L-18.551-61.194Q-18.507-61.076-18.316-61.041Q-18.124-61.005-17.865-61.005Q-17.821-61.005-17.788-60.968Q-17.755-60.931-17.755-60.896Q-17.755-60.689-17.918-60.689L-20.150-60.689Q-20.190-60.689-20.221-60.729Q-20.251-60.768-20.251-60.808Q-20.251-60.869-20.216-60.937Q-20.181-61.005-20.124-61.005Q-19.847-61.005-19.638-61.049Q-19.430-61.093-19.386-61.247L-19.548-62.732L-21.869-62.732L-22.589-61.537Q-22.673-61.414-22.673-61.291Q-22.673-61.133-22.532-61.069Q-22.392-61.005-22.211-61.005Q-22.167-61.005-22.141-60.972Q-22.115-60.939-22.115-60.896Q-22.115-60.689-22.273-60.689M-19.900-65.971L-21.671-63.049L-19.583-63.049",[1336],[1325,6034],{"fill":1327,"d":6035},"M-13.054-49.308H9.71V-72.07h-22.763Z",[1320,6037,6039],{"transform":6038},"translate(19.038 3.075)",[1325,6040],{"d":6041,"fill":1322,"stroke":1322,"className":6042,"style":1337},"M-20.458-60.689L-23.930-60.689Q-24.039-60.689-24.039-60.808Q-24.039-60.869-24.007-60.937Q-23.974-61.005-23.912-61.005Q-23.411-61.005-23.183-61.058Q-23.055-61.106-22.985-61.335L-21.763-66.252Q-21.746-66.340-21.746-66.384Q-21.746-66.450-21.772-66.468Q-21.943-66.521-22.475-66.521Q-22.581-66.521-22.581-66.639Q-22.581-66.701-22.548-66.769Q-22.515-66.837-22.453-66.837L-19.179-66.837Q-18.775-66.837-18.382-66.701Q-17.988-66.564-17.733-66.281Q-17.478-65.998-17.478-65.585Q-17.478-65.149-17.773-64.789Q-18.067-64.429-18.505-64.205Q-18.942-63.981-19.377-63.901Q-19.017-63.866-18.689-63.708Q-18.362-63.550-18.157-63.273Q-17.953-62.996-17.953-62.631Q-17.953-62.218-18.184-61.858Q-18.414-61.498-18.801-61.236Q-19.188-60.975-19.623-60.832Q-20.058-60.689-20.458-60.689M-22.273-61.067Q-22.273-61.005-21.987-61.005L-20.638-61.005Q-20.190-61.005-19.770-61.243Q-19.351-61.480-19.098-61.873Q-18.845-62.267-18.845-62.715Q-18.845-63.009-18.966-63.247Q-19.087-63.484-19.304-63.620Q-19.522-63.756-19.816-63.756L-21.618-63.756L-22.238-61.273Q-22.273-61.133-22.273-61.067M-21.016-66.187L-21.557-64.020L-20.142-64.020Q-19.724-64.020-19.300-64.233Q-18.876-64.446-18.610-64.811Q-18.344-65.176-18.344-65.611Q-18.344-66.006-18.601-66.263Q-18.858-66.521-19.258-66.521L-20.546-66.521Q-20.805-66.521-20.880-66.474Q-20.955-66.428-21.016-66.187",[1336],[1325,6044],{"fill":1327,"d":6045},"M9.709-49.308H32.47V-72.07H9.709Z",[1320,6047,6049],{"transform":6048},"translate(42.056 3.075)",[1325,6050],{"d":6031,"fill":1322,"stroke":1322,"className":6051,"style":1337},[1336],[1325,6053],{"fill":1327,"d":6054},"M32.47-49.308h22.763V-72.07H32.47Z",[1320,6056,6058],{"transform":6057},"translate(64.563 3.075)",[1325,6059],{"d":6041,"fill":1322,"stroke":1322,"className":6060,"style":1337},[1336],[1325,6062],{"fill":1327,"d":6063},"M55.233-49.308h22.762V-72.07H55.233Z",[1320,6065,6067],{"transform":6066},"translate(87.58 3.075)",[1325,6068],{"d":6031,"fill":1322,"stroke":1322,"className":6069,"style":1337},[1336],[1325,6071],{"fill":1327,"d":6072},"M77.995-49.308h22.762V-72.07H77.995Z",[1320,6074,6076],{"transform":6075},"translate(110.19 3.075)",[1325,6077],{"d":6078,"fill":1322,"stroke":1322,"className":6079,"style":1337},"M-23.103-62.662Q-23.103-61.832-22.616-61.320Q-22.128-60.808-21.293-60.808Q-20.722-60.808-20.188-61.089Q-19.654-61.370-19.269-61.851Q-18.885-62.333-18.740-62.886Q-18.731-62.917-18.707-62.941Q-18.683-62.965-18.647-62.965L-18.542-62.965Q-18.450-62.965-18.450-62.851Q-18.612-62.214-19.065-61.669Q-19.518-61.124-20.144-60.808Q-20.770-60.491-21.438-60.491Q-22.167-60.491-22.743-60.808Q-23.319-61.124-23.648-61.689Q-23.978-62.253-23.978-62.983Q-23.978-63.748-23.629-64.484Q-23.279-65.220-22.697-65.789Q-22.115-66.358-21.363-66.696Q-20.612-67.035-19.856-67.035Q-19.386-67.035-18.988-66.830Q-18.590-66.626-18.344-66.244L-17.632-67.017Q-17.615-67.035-17.575-67.035L-17.522-67.035Q-17.435-67.035-17.435-66.916L-18.037-64.521Q-18.054-64.442-18.124-64.442L-18.261-64.442Q-18.353-64.442-18.353-64.561Q-18.313-64.741-18.313-64.991Q-18.313-65.453-18.478-65.848Q-18.643-66.244-18.973-66.481Q-19.302-66.718-19.772-66.718Q-20.511-66.718-21.128-66.360Q-21.746-66.002-22.187-65.407Q-22.629-64.811-22.866-64.088Q-23.103-63.365-23.103-62.662",[1336],[1325,6081],{"fill":1327,"d":6082},"M100.757-49.308h22.763V-72.07h-22.763Z",[1320,6084,6086],{"transform":6085},"translate(133.105 3.075)",[1325,6087],{"d":6031,"fill":1322,"stroke":1322,"className":6088,"style":1337},[1336],[1325,6090],{"fill":1394,"stroke":1327,"d":6091},"M55.233-26.546v-22.762h22.762v22.762Zm22.762-22.762",[1325,6093],{"fill":1327,"d":6094},"M-35.816-26.546h22.762v-22.762h-22.762Z",[1320,6096,6098],{"transform":6097},"translate(-2.312 25.662)",[1325,6099],{"d":6100,"fill":1322,"stroke":1322,"className":6101,"style":1337},"M-22.123-60.491Q-23.248-60.491-23.662-61.388Q-24.075-62.284-24.075-63.559Q-24.075-64.332-23.925-65.031Q-23.776-65.730-23.341-66.206Q-22.906-66.683-22.123-66.683Q-21.346-66.683-20.911-66.204Q-20.476-65.725-20.326-65.029Q-20.177-64.332-20.177-63.559Q-20.177-62.280-20.590-61.386Q-21.003-60.491-22.123-60.491M-22.123-60.751Q-21.605-60.751-21.354-61.262Q-21.104-61.774-21.047-62.385Q-20.990-62.996-20.990-63.704Q-20.990-64.389-21.047-64.949Q-21.104-65.510-21.357-65.967Q-21.609-66.424-22.123-66.424Q-22.528-66.424-22.765-66.147Q-23.002-65.870-23.110-65.429Q-23.218-64.987-23.242-64.594Q-23.266-64.200-23.266-63.704Q-23.266-63.198-23.242-62.770Q-23.218-62.341-23.110-61.858Q-23.002-61.375-22.763-61.063Q-22.523-60.751-22.123-60.751",[1336],[1325,6103],{"fill":1327,"d":6104},"M-13.054-26.546H9.71v-22.762h-22.763Z",[1320,6106,6108],{"transform":6107},"translate(20.45 25.662)",[1325,6109],{"d":6100,"fill":1322,"stroke":1322,"className":6110,"style":1337},[1336],[1325,6112],{"fill":1327,"d":6113},"M9.709-26.546H32.47v-22.762H9.709Z",[1320,6115,6117],{"transform":6116},"translate(43.212 25.662)",[1325,6118],{"d":6119,"fill":1322,"stroke":1322,"className":6120,"style":1337},"M-20.528-60.689L-23.560-60.689L-23.560-61.005Q-22.409-61.005-22.409-61.300L-22.409-66.024Q-22.897-65.791-23.618-65.791L-23.618-66.107Q-22.488-66.107-21.926-66.683L-21.781-66.683Q-21.746-66.683-21.713-66.650Q-21.680-66.617-21.680-66.582L-21.680-61.300Q-21.680-61.005-20.528-61.005",[1336],[1325,6122],{"fill":1327,"d":6123},"M32.47-26.546h22.763v-22.762H32.47Z",[1320,6125,6127],{"transform":6126},"translate(65.974 25.662)",[1325,6128],{"d":6129,"fill":1322,"stroke":1322,"className":6130,"style":1337},"M-20.528-60.689L-23.978-60.689L-23.978-60.922Q-23.978-60.935-23.947-60.966L-22.493-62.543Q-22.027-63.040-21.774-63.345Q-21.521-63.651-21.330-64.062Q-21.139-64.473-21.139-64.912Q-21.139-65.501-21.462-65.934Q-21.785-66.367-22.365-66.367Q-22.629-66.367-22.875-66.257Q-23.121-66.147-23.297-65.960Q-23.473-65.773-23.569-65.523L-23.490-65.523Q-23.288-65.523-23.145-65.387Q-23.002-65.251-23.002-65.035Q-23.002-64.829-23.145-64.690Q-23.288-64.552-23.490-64.552Q-23.692-64.552-23.835-64.695Q-23.978-64.837-23.978-65.035Q-23.978-65.497-23.741-65.870Q-23.503-66.244-23.103-66.463Q-22.704-66.683-22.255-66.683Q-21.732-66.683-21.278-66.468Q-20.823-66.252-20.550-65.853Q-20.278-65.453-20.278-64.912Q-20.278-64.517-20.449-64.163Q-20.621-63.809-20.886-63.530Q-21.152-63.251-21.603-62.866Q-22.053-62.482-22.132-62.407L-23.156-61.445L-22.339-61.445Q-21.688-61.445-21.251-61.456Q-20.814-61.467-20.783-61.489Q-20.713-61.572-20.658-61.812Q-20.603-62.051-20.563-62.319L-20.278-62.319",[1336],[1325,6132],{"fill":1327,"d":6133},"M55.233-26.546h22.762v-22.762H55.233Z",[1320,6135,6137],{"transform":6136},"translate(88.736 25.662)",[1325,6138],{"d":6139,"fill":1322,"stroke":1322,"className":6140,"style":1337},"M-23.534-61.410L-23.578-61.410Q-23.376-61.093-22.989-60.935Q-22.602-60.777-22.176-60.777Q-21.640-60.777-21.401-61.212Q-21.161-61.647-21.161-62.227Q-21.161-62.807-21.407-63.247Q-21.653-63.686-22.185-63.686L-22.805-63.686Q-22.831-63.686-22.864-63.715Q-22.897-63.743-22.897-63.765L-22.897-63.866Q-22.897-63.897-22.868-63.921Q-22.840-63.945-22.805-63.945L-22.286-63.985Q-21.820-63.985-21.574-64.457Q-21.328-64.930-21.328-65.448Q-21.328-65.875-21.541-66.149Q-21.754-66.424-22.176-66.424Q-22.519-66.424-22.844-66.294Q-23.169-66.165-23.354-65.910L-23.328-65.910Q-23.125-65.910-22.989-65.769Q-22.853-65.628-22.853-65.431Q-22.853-65.233-22.987-65.099Q-23.121-64.965-23.319-64.965Q-23.521-64.965-23.659-65.099Q-23.798-65.233-23.798-65.431Q-23.798-66.020-23.295-66.351Q-22.791-66.683-22.176-66.683Q-21.798-66.683-21.396-66.543Q-20.994-66.402-20.726-66.123Q-20.458-65.844-20.458-65.448Q-20.458-64.899-20.812-64.462Q-21.165-64.024-21.706-63.840Q-21.315-63.761-20.970-63.537Q-20.625-63.313-20.414-62.972Q-20.203-62.631-20.203-62.236Q-20.203-61.854-20.366-61.531Q-20.528-61.208-20.820-60.972Q-21.113-60.737-21.460-60.614Q-21.807-60.491-22.176-60.491Q-22.624-60.491-23.055-60.652Q-23.486-60.812-23.767-61.139Q-24.048-61.467-24.048-61.924Q-24.048-62.139-23.901-62.282Q-23.754-62.425-23.534-62.425Q-23.323-62.425-23.178-62.280Q-23.033-62.135-23.033-61.924Q-23.033-61.713-23.180-61.561Q-23.328-61.410-23.534-61.410",[1336],[1325,6142],{"fill":1327,"d":6143},"M77.995-26.546h22.762v-22.762H77.995Z",[1320,6145,6147],{"transform":6146},"translate(111.498 25.662)",[1325,6148],{"d":6100,"fill":1322,"stroke":1322,"className":6149,"style":1337},[1336],[1325,6151],{"fill":1327,"d":6152},"M100.757-26.546h22.763v-22.762h-22.763Z",[1320,6154,6156],{"transform":6155},"translate(134.26 25.662)",[1325,6157],{"d":6119,"fill":1322,"stroke":1322,"className":6158,"style":1337},[1336],[1320,6160,6161,6168,6174,6180],{"stroke":1327,"fontSize":1431},[1320,6162,6164],{"transform":6163},"translate(-37.836 2)",[1325,6165],{"d":6166,"fill":1322,"stroke":1322,"className":6167,"style":1391},"M-21.787-60.689L-23.947-60.689Q-23.982-60.689-24.013-60.730Q-24.044-60.771-24.044-60.818L-24.021-60.919Q-24.009-60.970-23.923-60.986Q-23.482-60.986-23.324-61.025Q-23.165-61.064-23.122-61.291L-22.044-65.611Q-22.021-65.681-22.021-65.744Q-22.021-65.806-22.083-65.826Q-22.228-65.857-22.650-65.857Q-22.755-65.884-22.755-65.986L-22.724-66.087Q-22.716-66.134-22.634-66.154L-19.771-66.154Q-19.376-66.154-18.994-66.019Q-18.611-65.884-18.359-65.605Q-18.107-65.326-18.107-64.919Q-18.107-64.521-18.335-64.193Q-18.564-63.865-18.937-63.632Q-19.310-63.400-19.734-63.277Q-20.158-63.154-20.525-63.154L-21.908-63.154L-22.388-61.232Q-22.404-61.138-22.404-61.095Q-22.404-61.037-22.337-61.017Q-22.197-60.986-21.771-60.986Q-21.673-60.959-21.673-60.865L-21.701-60.759Q-21.708-60.709-21.787-60.689M-21.330-65.552L-21.861-63.423L-20.658-63.423Q-19.802-63.423-19.380-63.857Q-19.244-63.994-19.136-64.209Q-19.029-64.423-18.972-64.666Q-18.915-64.908-18.915-65.103Q-18.915-65.529-19.247-65.693Q-19.580-65.857-20.052-65.857L-20.923-65.857Q-21.095-65.857-21.158-65.843Q-21.220-65.830-21.253-65.771Q-21.287-65.712-21.330-65.552",[1336],[1320,6169,6170],{"transform":6163},[1325,6171],{"d":6172,"fill":1322,"stroke":1322,"className":6173,"style":1391},"M-15.697-58.689L-16.873-58.689L-16.873-66.689L-15.697-66.689L-15.697-66.322L-16.506-66.322L-16.506-59.056L-15.697-59.056",[1336],[1320,6175,6176],{"transform":6163},[1325,6177],{"d":6178,"fill":1322,"stroke":1322,"className":6179,"style":1391},"M-14.816-61.291Q-14.816-61.423-14.762-61.576L-14.090-63.306Q-14-63.529-14-63.712Q-14-63.962-14.176-63.962Q-14.481-63.962-14.691-63.654Q-14.902-63.345-15.008-62.962Q-15.020-62.888-15.090-62.888L-15.191-62.888Q-15.227-62.888-15.254-62.923Q-15.281-62.959-15.281-62.986L-15.281-63.017Q-15.160-63.482-14.865-63.849Q-14.570-64.216-14.160-64.216Q-13.953-64.216-13.783-64.134Q-13.613-64.052-13.510-63.898Q-13.406-63.744-13.406-63.537Q-13.406-63.416-13.465-63.248L-14.137-61.521Q-14.223-61.287-14.223-61.115Q-14.223-60.865-14.047-60.865Q-13.734-60.865-13.520-61.183Q-13.305-61.502-13.223-61.865Q-13.195-61.935-13.137-61.935L-13.031-61.935Q-12.992-61.935-12.969-61.906Q-12.945-61.877-12.945-61.841Q-12.945-61.826-12.953-61.810Q-13.031-61.509-13.178-61.242Q-13.324-60.974-13.549-60.793Q-13.774-60.611-14.063-60.611Q-14.379-60.611-14.598-60.798Q-14.816-60.986-14.816-61.291M-13.895-65.529Q-13.895-65.709-13.748-65.847Q-13.602-65.986-13.426-65.986Q-13.289-65.986-13.197-65.898Q-13.106-65.810-13.106-65.673Q-13.106-65.498-13.250-65.357Q-13.395-65.216-13.566-65.216Q-13.699-65.216-13.797-65.308Q-13.895-65.400-13.895-65.529",[1336],[1320,6181,6182],{"transform":6163},[1325,6183],{"d":6184,"fill":1322,"stroke":1322,"className":6185,"style":1391},"M-11.251-58.689L-12.426-58.689L-12.426-59.056L-11.618-59.056L-11.618-66.322L-12.426-66.322L-12.426-66.689L-11.251-66.689",[1336],[1320,6187,6188,6195,6201,6207],{"stroke":1327,"fontSize":1431},[1320,6189,6191],{"transform":6190},"translate(-36.434 24.762)",[1325,6192],{"d":6193,"fill":1322,"stroke":1322,"className":6194,"style":1391},"M-23.525-60.865Q-23.525-60.939-23.482-61.025Q-23.134-61.720-22.884-62.322Q-22.634-62.923-22.451-63.576L-22.978-63.576Q-23.205-63.576-23.382-63.492Q-23.560-63.408-23.650-63.326Q-23.740-63.244-23.872-63.097Q-24.005-62.951-24.037-62.947L-24.138-62.947Q-24.177-62.947-24.203-62.976Q-24.228-63.005-24.228-63.041Q-24.228-63.056-24.212-63.087Q-23.939-63.529-23.613-63.834Q-23.287-64.138-22.900-64.138L-19.826-64.138Q-19.720-64.138-19.658-64.076Q-19.595-64.013-19.595-63.904Q-19.595-63.783-19.691-63.679Q-19.787-63.576-19.915-63.576L-20.978-63.576Q-21.099-63.013-21.099-62.521Q-21.099-61.728-20.794-61.103Q-20.755-61.037-20.755-60.970Q-20.755-60.834-20.876-60.722Q-20.997-60.611-21.146-60.611Q-21.380-60.611-21.476-60.984Q-21.572-61.357-21.572-61.705Q-21.572-62.009-21.529-62.322Q-21.486-62.634-21.439-62.859Q-21.392-63.084-21.275-63.576L-22.154-63.576Q-22.431-62.482-22.611-61.800Q-22.790-61.119-22.884-60.888Q-23.005-60.611-23.244-60.611Q-23.353-60.611-23.439-60.681Q-23.525-60.752-23.525-60.865",[1336],[1320,6196,6197],{"transform":6190},[1325,6198],{"d":6199,"fill":1322,"stroke":1322,"className":6200,"style":1391},"M-17.099-58.689L-18.275-58.689L-18.275-66.689L-17.099-66.689L-17.099-66.322L-17.908-66.322L-17.908-59.056L-17.099-59.056",[1336],[1320,6202,6203],{"transform":6190},[1325,6204],{"d":6205,"fill":1322,"stroke":1322,"className":6206,"style":1391},"M-16.218-61.291Q-16.218-61.423-16.163-61.576L-15.491-63.306Q-15.401-63.529-15.401-63.712Q-15.401-63.962-15.577-63.962Q-15.882-63.962-16.093-63.654Q-16.303-63.345-16.409-62.962Q-16.421-62.888-16.491-62.888L-16.593-62.888Q-16.628-62.888-16.655-62.923Q-16.682-62.959-16.682-62.986L-16.682-63.017Q-16.561-63.482-16.266-63.849Q-15.971-64.216-15.561-64.216Q-15.354-64.216-15.184-64.134Q-15.014-64.052-14.911-63.898Q-14.807-63.744-14.807-63.537Q-14.807-63.416-14.866-63.248L-15.538-61.521Q-15.624-61.287-15.624-61.115Q-15.624-60.865-15.448-60.865Q-15.135-60.865-14.921-61.183Q-14.706-61.502-14.624-61.865Q-14.596-61.935-14.538-61.935L-14.432-61.935Q-14.393-61.935-14.370-61.906Q-14.346-61.877-14.346-61.841Q-14.346-61.826-14.354-61.810Q-14.432-61.509-14.579-61.242Q-14.725-60.974-14.950-60.793Q-15.175-60.611-15.464-60.611Q-15.780-60.611-15.999-60.798Q-16.218-60.986-16.218-61.291M-15.296-65.529Q-15.296-65.709-15.149-65.847Q-15.003-65.986-14.827-65.986Q-14.690-65.986-14.598-65.898Q-14.507-65.810-14.507-65.673Q-14.507-65.498-14.651-65.357Q-14.796-65.216-14.968-65.216Q-15.100-65.216-15.198-65.308Q-15.296-65.400-15.296-65.529",[1336],[1320,6208,6209],{"transform":6190},[1325,6210],{"d":6211,"fill":1322,"stroke":1322,"className":6212,"style":1391},"M-12.653-58.689L-13.828-58.689L-13.828-59.056L-13.020-59.056L-13.020-66.322L-13.828-66.322L-13.828-66.689L-12.653-66.689",[1336],[1320,6214,6215],{"stroke":2827,"style":1419},[1325,6216],{"fill":1327,"d":6133},[1610,6218,6220,6221,6236,6237,6273,6274,6298,6299,6338,6339,6381,6382,6384,6385,2527],{"className":6219},[1613],"The prefix function ",[395,6222,6224],{"className":6223},[398],[395,6225,6227],{"className":6226,"ariaHidden":403},[402],[395,6228,6230,6233],{"className":6229},[407],[395,6231],{"className":6232,"style":568},[411],[395,6234,4247],{"className":6235,"style":1865},[416,417]," for ",[395,6238,6240],{"className":6239},[398],[395,6241,6243,6261],{"className":6242,"ariaHidden":403},[402],[395,6244,6246,6249,6252,6255,6258],{"className":6245},[407],[395,6247],{"className":6248,"style":550},[411],[395,6250,493],{"className":6251,"style":418},[416,417],[395,6253],{"className":6254,"style":702},[432],[395,6256,707],{"className":6257},[706],[395,6259],{"className":6260,"style":702},[432],[395,6262,6264,6267],{"className":6263},[407],[395,6265],{"className":6266,"style":1128},[411],[395,6268,6270],{"className":6269},[416,1091],[395,6271,5972],{"className":6272},[416,1095],". Top row: the pattern. Bottom row: ",[395,6275,6277],{"className":6276},[398],[395,6278,6280],{"className":6279,"ariaHidden":403},[402],[395,6281,6283,6286,6289,6292,6295],{"className":6282},[407],[395,6284],{"className":6285,"style":412},[411],[395,6287,4247],{"className":6288,"style":1865},[416,417],[395,6290,424],{"className":6291},[423],[395,6293,4230],{"className":6294},[416,417],[395,6296,476],{"className":6297},[475],", the length of the longest proper prefix of ",[395,6300,6302],{"className":6301},[398],[395,6303,6305],{"className":6304,"ariaHidden":403},[402],[395,6306,6308,6311,6314,6317,6320,6323,6329,6332,6335],{"className":6307},[407],[395,6309],{"className":6310,"style":412},[411],[395,6312,493],{"className":6313,"style":418},[416,417],[395,6315,424],{"className":6316},[423],[395,6318,428],{"className":6319},[416],[395,6321],{"className":6322,"style":433},[432],[395,6324,6326],{"className":6325},[437],[395,6327,442],{"className":6328},[441],[395,6330],{"className":6331,"style":433},[432],[395,6333,4230],{"className":6334},[416,417],[395,6336,476],{"className":6337},[475]," that is also a suffix. E.g. ",[395,6340,6342],{"className":6341},[398],[395,6343,6345,6372],{"className":6344,"ariaHidden":403},[402],[395,6346,6348,6351,6354,6357,6360,6363,6366,6369],{"className":6347},[407],[395,6349],{"className":6350,"style":412},[411],[395,6352,4247],{"className":6353,"style":1865},[416,417],[395,6355,424],{"className":6356},[423],[395,6358,4548],{"className":6359},[416],[395,6361,476],{"className":6362},[475],[395,6364],{"className":6365,"style":702},[432],[395,6367,707],{"className":6368},[706],[395,6370],{"className":6371,"style":702},[432],[395,6373,6375,6378],{"className":6374},[407],[395,6376],{"className":6377,"style":769},[411],[395,6379,4499],{"className":6380},[416]," because ",[845,6383,1281],{}," has border ",[845,6386,4552],{},[831,6388,6390],{"id":6389},"the-z-function-longest-prefix-match-at-every-position","The Z-function: longest prefix-match at every position",[381,6392,6393],{},"The Z-function repackages the same self-similarity into a single array, and is\noften easier to implement bug-free.",[1232,6395,6396],{"type":4207},[381,6397,6398,6400,6401,4553,6418,1677,6434,6460,6461,6476,6477,6492,6493,6508,6509,6645,6646,6670,6671,2128],{},[390,6399,4212],{}," For a string ",[395,6402,6404],{"className":6403},[398],[395,6405,6407],{"className":6406,"ariaHidden":403},[402],[395,6408,6410,6413],{"className":6409},[407],[395,6411],{"className":6412,"style":550},[411],[395,6414,6417],{"className":6415,"style":6416},[416,417],"margin-right:0.0576em;","S",[395,6419,6421],{"className":6420},[398],[395,6422,6424],{"className":6423,"ariaHidden":403},[402],[395,6425,6427,6430],{"className":6426},[407],[395,6428],{"className":6429,"style":1824},[411],[395,6431,6433],{"className":6432},[416],"ℓ",[395,6435,6437],{"className":6436},[398],[395,6438,6440],{"className":6439,"ariaHidden":403},[402],[395,6441,6443,6446,6451,6454,6457],{"className":6442},[407],[395,6444],{"className":6445,"style":412},[411],[395,6447,6450],{"className":6448,"style":6449},[416,417],"margin-right:0.0715em;","Z",[395,6452,424],{"className":6453},[423],[395,6455,4230],{"className":6456},[416,417],[395,6458,476],{"className":6459},[475]," is the length of the\nlongest substring starting at position ",[395,6462,6464],{"className":6463},[398],[395,6465,6467],{"className":6466,"ariaHidden":403},[402],[395,6468,6470,6473],{"className":6469},[407],[395,6471],{"className":6472,"style":4226},[411],[395,6474,4230],{"className":6475},[416,417]," that matches a prefix of ",[395,6478,6480],{"className":6479},[398],[395,6481,6483],{"className":6482,"ariaHidden":403},[402],[395,6484,6486,6489],{"className":6485},[407],[395,6487],{"className":6488,"style":550},[411],[395,6490,6417],{"className":6491,"style":6416},[416,417],"; that\nis, the largest ",[395,6494,6496],{"className":6495},[398],[395,6497,6499],{"className":6498,"ariaHidden":403},[402],[395,6500,6502,6505],{"className":6501},[407],[395,6503],{"className":6504,"style":1824},[411],[395,6506,5280],{"className":6507,"style":5279},[416,417]," with ",[395,6510,6512],{"className":6511},[398],[395,6513,6515,6554,6575,6614,6633],{"className":6514,"ariaHidden":403},[402],[395,6516,6518,6521,6524,6527,6530,6533,6539,6542,6545,6548,6551],{"className":6517},[407],[395,6519],{"className":6520,"style":412},[411],[395,6522,6417],{"className":6523,"style":6416},[416,417],[395,6525,424],{"className":6526},[423],[395,6528,428],{"className":6529},[416],[395,6531],{"className":6532,"style":433},[432],[395,6534,6536],{"className":6535},[437],[395,6537,442],{"className":6538},[441],[395,6540],{"className":6541,"style":433},[432],[395,6543,5280],{"className":6544,"style":5279},[416,417],[395,6546],{"className":6547,"style":453},[432],[395,6549,458],{"className":6550},[457],[395,6552],{"className":6553,"style":453},[432],[395,6555,6557,6560,6563,6566,6569,6572],{"className":6556},[407],[395,6558],{"className":6559,"style":412},[411],[395,6561,471],{"className":6562},[416],[395,6564,476],{"className":6565},[475],[395,6567],{"className":6568,"style":702},[432],[395,6570,707],{"className":6571},[706],[395,6573],{"className":6574,"style":702},[432],[395,6576,6578,6581,6584,6587,6590,6593,6599,6602,6605,6608,6611],{"className":6577},[407],[395,6579],{"className":6580,"style":412},[411],[395,6582,6417],{"className":6583,"style":6416},[416,417],[395,6585,424],{"className":6586},[423],[395,6588,4230],{"className":6589},[416,417],[395,6591],{"className":6592,"style":433},[432],[395,6594,6596],{"className":6595},[437],[395,6597,442],{"className":6598},[441],[395,6600],{"className":6601,"style":433},[432],[395,6603,4230],{"className":6604},[416,417],[395,6606],{"className":6607,"style":453},[432],[395,6609,664],{"className":6610},[457],[395,6612],{"className":6613,"style":453},[432],[395,6615,6617,6621,6624,6627,6630],{"className":6616},[407],[395,6618],{"className":6619,"style":6620},[411],"height:0.7778em;vertical-align:-0.0833em;",[395,6622,5280],{"className":6623,"style":5279},[416,417],[395,6625],{"className":6626,"style":453},[432],[395,6628,458],{"className":6629},[457],[395,6631],{"className":6632,"style":453},[432],[395,6634,6636,6639,6642],{"className":6635},[407],[395,6637],{"className":6638,"style":412},[411],[395,6640,471],{"className":6641},[416],[395,6643,476],{"className":6644},[475],". By convention ",[395,6647,6649],{"className":6648},[398],[395,6650,6652],{"className":6651,"ariaHidden":403},[402],[395,6653,6655,6658,6661,6664,6667],{"className":6654},[407],[395,6656],{"className":6657,"style":412},[411],[395,6659,6450],{"className":6660,"style":6449},[416,417],[395,6662,424],{"className":6663},[423],[395,6665,428],{"className":6666},[416],[395,6668,476],{"className":6669},[475]," is\nleft undefined (or set to ",[395,6672,6674],{"className":6673},[398],[395,6675,6677],{"className":6676,"ariaHidden":403},[402],[395,6678,6680,6683],{"className":6679},[407],[395,6681],{"className":6682,"style":1824},[411],[395,6684,6433],{"className":6685},[416],[381,6687,6688,6689,6722,6723,6726,6727,6742,6743,6878,6879,2269],{},"The linear-time computation keeps a half-open window ",[395,6690,6692],{"className":6691},[398],[395,6693,6695],{"className":6694,"ariaHidden":403},[402],[395,6696,6698,6701,6704,6709,6712,6715,6719],{"className":6697},[407],[395,6699],{"className":6700,"style":412},[411],[395,6702,424],{"className":6703},[423],[395,6705,6708],{"className":6706,"style":6707},[416,417],"margin-right:0.0197em;","l",[395,6710,4465],{"className":6711},[441],[395,6713],{"className":6714,"style":433},[432],[395,6716,6718],{"className":6717,"style":1044},[416,417],"r",[395,6720,1016],{"className":6721},[475],", the ",[390,6724,6725],{},"Z-box",":\nthe rightmost interval known to equal a prefix of ",[395,6728,6730],{"className":6729},[398],[395,6731,6733],{"className":6732,"ariaHidden":403},[402],[395,6734,6736,6739],{"className":6735},[407],[395,6737],{"className":6738,"style":550},[411],[395,6740,6417],{"className":6741,"style":6416},[416,417]," (so ",[395,6744,6746],{"className":6745},[398],[395,6747,6749,6788,6809,6848,6866],{"className":6748,"ariaHidden":403},[402],[395,6750,6752,6755,6758,6761,6764,6767,6773,6776,6779,6782,6785],{"className":6751},[407],[395,6753],{"className":6754,"style":412},[411],[395,6756,6417],{"className":6757,"style":6416},[416,417],[395,6759,424],{"className":6760},[423],[395,6762,6708],{"className":6763,"style":6707},[416,417],[395,6765],{"className":6766,"style":433},[432],[395,6768,6770],{"className":6769},[437],[395,6771,442],{"className":6772},[441],[395,6774],{"className":6775,"style":433},[432],[395,6777,6718],{"className":6778,"style":1044},[416,417],[395,6780],{"className":6781,"style":453},[432],[395,6783,458],{"className":6784},[457],[395,6786],{"className":6787,"style":453},[432],[395,6789,6791,6794,6797,6800,6803,6806],{"className":6790},[407],[395,6792],{"className":6793,"style":412},[411],[395,6795,471],{"className":6796},[416],[395,6798,476],{"className":6799},[475],[395,6801],{"className":6802,"style":702},[432],[395,6804,707],{"className":6805},[706],[395,6807],{"className":6808,"style":702},[432],[395,6810,6812,6815,6818,6821,6824,6827,6833,6836,6839,6842,6845],{"className":6811},[407],[395,6813],{"className":6814,"style":412},[411],[395,6816,6417],{"className":6817,"style":6416},[416,417],[395,6819,424],{"className":6820},[423],[395,6822,428],{"className":6823},[416],[395,6825],{"className":6826,"style":433},[432],[395,6828,6830],{"className":6829},[437],[395,6831,442],{"className":6832},[441],[395,6834],{"className":6835,"style":433},[432],[395,6837,6718],{"className":6838,"style":1044},[416,417],[395,6840],{"className":6841,"style":453},[432],[395,6843,458],{"className":6844},[457],[395,6846],{"className":6847,"style":453},[432],[395,6849,6851,6854,6857,6860,6863],{"className":6850},[407],[395,6852],{"className":6853,"style":6620},[411],[395,6855,6708],{"className":6856,"style":6707},[416,417],[395,6858],{"className":6859,"style":453},[432],[395,6861,458],{"className":6862},[457],[395,6864],{"className":6865,"style":453},[432],[395,6867,6869,6872,6875],{"className":6868},[407],[395,6870],{"className":6871,"style":412},[411],[395,6873,471],{"className":6874},[416],[395,6876,476],{"className":6877},[475],").\nFor a new index ",[395,6880,6882],{"className":6881},[398],[395,6883,6885],{"className":6884,"ariaHidden":403},[402],[395,6886,6888,6891],{"className":6887},[407],[395,6889],{"className":6890,"style":4226},[411],[395,6892,4230],{"className":6893},[416,417],[6895,6896,6897,7103],"ul",{},[6898,6899,6900,6901,6935,6936,6951,6952,6986,6987,7102],"li",{},"if ",[395,6902,6904],{"className":6903},[398],[395,6905,6907,6926],{"className":6906,"ariaHidden":403},[402],[395,6908,6910,6914,6917,6920,6923],{"className":6909},[407],[395,6911],{"className":6912,"style":6913},[411],"height:0.6986em;vertical-align:-0.0391em;",[395,6915,4230],{"className":6916},[416,417],[395,6918],{"className":6919,"style":702},[432],[395,6921,5699],{"className":6922},[706],[395,6924],{"className":6925,"style":702},[432],[395,6927,6929,6932],{"className":6928},[407],[395,6930],{"className":6931,"style":568},[411],[395,6933,6718],{"className":6934,"style":1044},[416,417],", position ",[395,6937,6939],{"className":6938},[398],[395,6940,6942],{"className":6941,"ariaHidden":403},[402],[395,6943,6945,6948],{"className":6944},[407],[395,6946],{"className":6947,"style":4226},[411],[395,6949,4230],{"className":6950},[416,417]," lies inside a known prefix-match, so its mirror\n",[395,6953,6955],{"className":6954},[398],[395,6956,6958,6977],{"className":6957,"ariaHidden":403},[402],[395,6959,6961,6965,6968,6971,6974],{"className":6960},[407],[395,6962],{"className":6963,"style":6964},[411],"height:0.7429em;vertical-align:-0.0833em;",[395,6966,4230],{"className":6967},[416,417],[395,6969],{"className":6970,"style":453},[432],[395,6972,458],{"className":6973},[457],[395,6975],{"className":6976,"style":453},[432],[395,6978,6980,6983],{"className":6979},[407],[395,6981],{"className":6982,"style":1824},[411],[395,6984,6708],{"className":6985,"style":6707},[416,417]," gives a free lower bound ",[395,6988,6990],{"className":6989},[398],[395,6991,6993,7021,7056,7090],{"className":6992,"ariaHidden":403},[402],[395,6994,6996,6999,7002,7005,7008,7011,7014,7018],{"className":6995},[407],[395,6997],{"className":6998,"style":412},[411],[395,7000,6450],{"className":7001,"style":6449},[416,417],[395,7003,424],{"className":7004},[423],[395,7006,4230],{"className":7007},[416,417],[395,7009,476],{"className":7010},[475],[395,7012],{"className":7013,"style":702},[432],[395,7015,7017],{"className":7016},[706],"←",[395,7019],{"className":7020,"style":702},[432],[395,7022,7024,7027,7035,7038,7041,7044,7047,7050,7053],{"className":7023},[407],[395,7025],{"className":7026,"style":412},[411],[395,7028,7031],{"className":7029},[7030],"mop",[395,7032,7034],{"className":7033},[416,2507],"min",[395,7036,1049],{"className":7037},[423],[395,7039,6450],{"className":7040,"style":6449},[416,417],[395,7042,424],{"className":7043},[423],[395,7045,4230],{"className":7046},[416,417],[395,7048],{"className":7049,"style":453},[432],[395,7051,458],{"className":7052},[457],[395,7054],{"className":7055,"style":453},[432],[395,7057,7059,7062,7065,7068,7071,7075,7078,7081,7084,7087],{"className":7058},[407],[395,7060],{"className":7061,"style":412},[411],[395,7063,6708],{"className":7064,"style":6707},[416,417],[395,7066,476],{"className":7067},[475],[395,7069,4465],{"className":7070},[441],[395,7072,7074],{"className":7073},[432]," ",[395,7076],{"className":7077,"style":433},[432],[395,7079,6718],{"className":7080,"style":1044},[416,417],[395,7082],{"className":7083,"style":453},[432],[395,7085,458],{"className":7086},[457],[395,7088],{"className":7089,"style":453},[432],[395,7091,7093,7096,7099],{"className":7092},[407],[395,7094],{"className":7095,"style":412},[411],[395,7097,4230],{"className":7098},[416,417],[395,7100,1016],{"className":7101},[475],";",[6898,7104,7105,7106,7121,7122,7137,7138,2527],{},"then extend the match character-by-character past ",[395,7107,7109],{"className":7108},[398],[395,7110,7112],{"className":7111,"ariaHidden":403},[402],[395,7113,7115,7118],{"className":7114},[407],[395,7116],{"className":7117,"style":568},[411],[395,7119,6718],{"className":7120,"style":1044},[416,417]," if possible, and if the\nmatch runs beyond ",[395,7123,7125],{"className":7124},[398],[395,7126,7128],{"className":7127,"ariaHidden":403},[402],[395,7129,7131,7134],{"className":7130},[407],[395,7132],{"className":7133,"style":568},[411],[395,7135,6718],{"className":7136,"style":1044},[416,417],", slide the Z-box to the new ",[395,7139,7141],{"className":7140},[398],[395,7142,7144,7174],{"className":7143,"ariaHidden":403},[402],[395,7145,7147,7150,7153,7156,7159,7162,7165,7168,7171],{"className":7146},[407],[395,7148],{"className":7149,"style":412},[411],[395,7151,424],{"className":7152},[423],[395,7154,4230],{"className":7155},[416,417],[395,7157,4465],{"className":7158},[441],[395,7160],{"className":7161,"style":433},[432],[395,7163,4230],{"className":7164},[416,417],[395,7166],{"className":7167,"style":453},[432],[395,7169,664],{"className":7170},[457],[395,7172],{"className":7173,"style":453},[432],[395,7175,7177,7180,7183,7186,7189],{"className":7176},[407],[395,7178],{"className":7179,"style":412},[411],[395,7181,6450],{"className":7182,"style":6449},[416,417],[395,7184,424],{"className":7185},[423],[395,7187,4230],{"className":7188},[416,417],[395,7190,2047],{"className":7191},[475],[1307,7193,7195,7541],{"className":7194},[1310,1311],[1313,7196,7200],{"xmlns":1315,"width":7197,"height":7198,"viewBox":7199},"232.299","168.553","-75 -75 174.225 126.415",[1320,7201,7202,7205,7211,7218,7221,7228,7235,7238,7244,7251,7254,7260,7267,7270,7275,7282,7285,7290,7297,7300,7377,7418,7441,7464],{"stroke":1322,"style":1323},[1325,7203],{"fill":1327,"d":7204},"M-65.403 9.514h22.762V-13.25h-22.762Z",[1320,7206,7207],{"transform":1331},[1325,7208],{"d":7209,"fill":1322,"stroke":1322,"className":7210,"style":1337},"M-52.400-1.767Q-52.796-1.767-53.082-1.971Q-53.367-2.176-53.514-2.510Q-53.662-2.844-53.662-3.235Q-53.662-3.670-53.488-4.131Q-53.314-4.593-53.002-4.984Q-52.690-5.375-52.280-5.610Q-51.869-5.845-51.429-5.845Q-51.161-5.845-50.944-5.707Q-50.726-5.568-50.594-5.322Q-50.555-5.472-50.447-5.568Q-50.339-5.665-50.199-5.665Q-50.076-5.665-49.992-5.592Q-49.909-5.520-49.909-5.397Q-49.909-5.344-49.918-5.313L-50.537-2.822Q-50.594-2.624-50.594-2.426Q-50.594-2.031-50.331-2.031Q-50.045-2.031-49.911-2.354Q-49.777-2.677-49.658-3.182Q-49.649-3.213-49.625-3.237Q-49.601-3.261-49.566-3.261L-49.460-3.261Q-49.412-3.261-49.390-3.228Q-49.368-3.195-49.368-3.147Q-49.482-2.716-49.573-2.463Q-49.663-2.211-49.856-1.989Q-50.049-1.767-50.348-1.767Q-50.656-1.767-50.904-1.938Q-51.152-2.110-51.223-2.400Q-51.478-2.114-51.774-1.941Q-52.071-1.767-52.400-1.767M-52.383-2.031Q-52.053-2.031-51.743-2.272Q-51.434-2.514-51.223-2.830Q-51.214-2.839-51.214-2.857L-50.717-4.821Q-50.774-5.138-50.966-5.362Q-51.157-5.586-51.447-5.586Q-51.816-5.586-52.115-5.267Q-52.414-4.949-52.581-4.540Q-52.717-4.193-52.842-3.683Q-52.967-3.173-52.967-2.848Q-52.967-2.523-52.829-2.277Q-52.690-2.031-52.383-2.031",[1336],[1320,7212,7214],{"transform":7213},"translate(-2.125 -17.908)",[1325,7215],{"d":7216,"fill":1322,"stroke":1322,"className":7217,"style":1391},"M-51.901-1.700Q-52.604-1.700-53.004-2.100Q-53.405-2.501-53.549-3.110Q-53.694-3.720-53.694-4.419Q-53.694-4.942-53.624-5.405Q-53.553-5.868-53.360-6.280Q-53.167-6.692-52.809-6.940Q-52.452-7.188-51.901-7.188Q-51.350-7.188-50.993-6.940Q-50.635-6.692-50.444-6.282Q-50.252-5.872-50.182-5.403Q-50.112-4.934-50.112-4.419Q-50.112-3.720-50.254-3.112Q-50.397-2.505-50.797-2.102Q-51.198-1.700-51.901-1.700M-51.901-1.958Q-51.428-1.958-51.196-2.393Q-50.963-2.829-50.909-3.368Q-50.854-3.907-50.854-4.548Q-50.854-5.544-51.038-6.237Q-51.221-6.931-51.901-6.931Q-52.268-6.931-52.489-6.692Q-52.709-6.454-52.805-6.097Q-52.901-5.739-52.926-5.368Q-52.952-4.997-52.952-4.548Q-52.952-3.907-52.897-3.368Q-52.842-2.829-52.610-2.393Q-52.377-1.958-51.901-1.958",[1336],[1325,7219],{"fill":1327,"d":7220},"M-38.373 9.514h22.762V-13.25h-22.762Z",[1320,7222,7224],{"transform":7223},"translate(25.048 3.125)",[1325,7225],{"d":7226,"fill":1322,"stroke":1322,"className":7227,"style":1337},"M-52.400-1.767Q-52.976-1.767-53.297-2.198Q-53.618-2.628-53.618-3.208Q-53.618-3.613-53.534-3.841L-52.655-7.339Q-52.620-7.489-52.620-7.563Q-52.620-7.700-53.187-7.700Q-53.284-7.700-53.284-7.818Q-53.284-7.875-53.253-7.946Q-53.222-8.016-53.156-8.016L-51.935-8.113Q-51.882-8.113-51.849-8.084Q-51.816-8.056-51.816-8.007L-51.816-7.972L-52.475-5.362Q-51.952-5.845-51.429-5.845Q-51.043-5.845-50.752-5.641Q-50.462-5.436-50.315-5.102Q-50.168-4.768-50.168-4.377Q-50.168-3.793-50.471-3.184Q-50.774-2.576-51.295-2.171Q-51.816-1.767-52.400-1.767M-52.383-2.031Q-52.014-2.031-51.710-2.354Q-51.407-2.677-51.249-3.072Q-51.104-3.428-50.983-3.936Q-50.862-4.443-50.862-4.764Q-50.862-5.089-51.007-5.337Q-51.152-5.586-51.447-5.586Q-52.049-5.586-52.620-4.786L-52.862-3.793Q-53.007-3.169-53.007-2.905Q-53.007-2.562-52.855-2.296Q-52.704-2.031-52.383-2.031",[1336],[1320,7229,7231],{"transform":7230},"translate(24.905 -17.908)",[1325,7232],{"d":7233,"fill":1322,"stroke":1322,"className":7234,"style":1391},"M-50.428-1.868L-53.221-1.868L-53.221-2.165Q-52.159-2.165-52.159-2.427L-52.159-6.595Q-52.588-6.380-53.268-6.380L-53.268-6.677Q-52.249-6.677-51.733-7.188L-51.588-7.188Q-51.514-7.169-51.495-7.091L-51.495-2.427Q-51.495-2.165-50.428-2.165",[1336],[1325,7236],{"fill":1327,"d":7237},"M-11.343 9.514h22.762V-13.25h-22.762Z",[1320,7239,7241],{"transform":7240},"translate(51.61 1.937)",[1325,7242],{"d":7209,"fill":1322,"stroke":1322,"className":7243,"style":1337},[1336],[1320,7245,7247],{"transform":7246},"translate(51.935 -17.908)",[1325,7248],{"d":7249,"fill":1322,"stroke":1322,"className":7250,"style":1391},"M-50.436-1.868L-53.596-1.868L-53.596-2.075Q-53.596-2.102-53.573-2.134L-52.221-3.532Q-51.842-3.919-51.594-4.208Q-51.346-4.497-51.172-4.854Q-50.999-5.212-50.999-5.602Q-50.999-5.950-51.131-6.243Q-51.264-6.536-51.518-6.714Q-51.772-6.891-52.127-6.891Q-52.487-6.891-52.778-6.696Q-53.069-6.501-53.213-6.173L-53.159-6.173Q-52.975-6.173-52.850-6.052Q-52.725-5.931-52.725-5.739Q-52.725-5.559-52.850-5.431Q-52.975-5.302-53.159-5.302Q-53.338-5.302-53.467-5.431Q-53.596-5.559-53.596-5.739Q-53.596-6.141-53.376-6.477Q-53.155-6.813-52.790-7.001Q-52.424-7.188-52.022-7.188Q-51.542-7.188-51.126-7.001Q-50.709-6.813-50.458-6.452Q-50.206-6.091-50.206-5.602Q-50.206-5.243-50.360-4.940Q-50.514-4.638-50.766-4.378Q-51.018-4.118-51.368-3.833Q-51.717-3.548-51.885-3.395L-52.815-2.556L-52.100-2.556Q-50.725-2.556-50.686-2.595Q-50.616-2.673-50.573-2.858Q-50.530-3.044-50.487-3.333L-50.206-3.333",[1336],[1325,7252],{"fill":1327,"d":7253},"M15.687 9.514h22.762V-13.25H15.687Z",[1320,7255,7257],{"transform":7256},"translate(79.108 3.125)",[1325,7258],{"d":7226,"fill":1322,"stroke":1322,"className":7259,"style":1337},[1336],[1320,7261,7263],{"transform":7262},"translate(78.965 -17.908)",[1325,7264],{"d":7265,"fill":1322,"stroke":1322,"className":7266,"style":1391},"M-53.229-2.501Q-53.038-2.227-52.682-2.100Q-52.327-1.973-51.944-1.973Q-51.608-1.973-51.399-2.159Q-51.190-2.345-51.094-2.638Q-50.999-2.931-50.999-3.243Q-50.999-3.567-51.096-3.862Q-51.194-4.157-51.407-4.341Q-51.620-4.524-51.952-4.524L-52.518-4.524Q-52.549-4.524-52.579-4.554Q-52.608-4.583-52.608-4.610L-52.608-4.692Q-52.608-4.727-52.579-4.753Q-52.549-4.778-52.518-4.778L-52.038-4.813Q-51.752-4.813-51.555-5.018Q-51.358-5.223-51.262-5.518Q-51.167-5.813-51.167-6.091Q-51.167-6.470-51.366-6.708Q-51.565-6.946-51.944-6.946Q-52.264-6.946-52.553-6.839Q-52.842-6.731-53.006-6.509Q-52.827-6.509-52.704-6.382Q-52.581-6.255-52.581-6.083Q-52.581-5.911-52.706-5.786Q-52.831-5.661-53.006-5.661Q-53.178-5.661-53.303-5.786Q-53.428-5.911-53.428-6.083Q-53.428-6.450-53.204-6.698Q-52.979-6.946-52.639-7.067Q-52.299-7.188-51.944-7.188Q-51.596-7.188-51.233-7.067Q-50.870-6.946-50.622-6.696Q-50.374-6.446-50.374-6.091Q-50.374-5.606-50.692-5.223Q-51.010-4.841-51.487-4.669Q-50.936-4.559-50.536-4.173Q-50.135-3.786-50.135-3.251Q-50.135-2.794-50.399-2.438Q-50.663-2.083-51.084-1.891Q-51.506-1.700-51.944-1.700Q-52.354-1.700-52.747-1.835Q-53.139-1.970-53.405-2.255Q-53.670-2.540-53.670-2.958Q-53.670-3.153-53.538-3.282Q-53.405-3.411-53.213-3.411Q-53.088-3.411-52.985-3.352Q-52.881-3.294-52.819-3.188Q-52.756-3.083-52.756-2.958Q-52.756-2.763-52.891-2.632Q-53.026-2.501-53.229-2.501",[1336],[1325,7268],{"fill":1327,"d":7269},"M42.717 9.514h22.762V-13.25H42.717Z",[1320,7271,7272],{"transform":2770},[1325,7273],{"d":7209,"fill":1322,"stroke":1322,"className":7274,"style":1337},[1336],[1320,7276,7278],{"transform":7277},"translate(105.995 -17.908)",[1325,7279],{"d":7280,"fill":1322,"stroke":1322,"className":7281,"style":1391},"M-51.542-3.181L-53.784-3.181L-53.784-3.477L-51.213-7.134Q-51.174-7.188-51.112-7.188L-50.967-7.188Q-50.917-7.188-50.885-7.157Q-50.854-7.126-50.854-7.075L-50.854-3.477L-50.022-3.477L-50.022-3.181L-50.854-3.181L-50.854-2.427Q-50.854-2.165-50.030-2.165L-50.030-1.868L-52.366-1.868L-52.366-2.165Q-51.542-2.165-51.542-2.427L-51.542-3.181M-51.487-6.282L-53.456-3.477L-51.487-3.477",[1336],[1325,7283],{"fill":1327,"d":7284},"M69.747 9.514h22.762V-13.25H69.747Z",[1320,7286,7287],{"transform":2779},[1325,7288],{"d":7226,"fill":1322,"stroke":1322,"className":7289,"style":1337},[1336],[1320,7291,7293],{"transform":7292},"translate(133.025 -17.908)",[1325,7294],{"d":7295,"fill":1322,"stroke":1322,"className":7296,"style":1391},"M-53.182-2.747L-53.245-2.747Q-53.104-2.395-52.780-2.184Q-52.456-1.973-52.069-1.973Q-51.475-1.973-51.225-2.407Q-50.975-2.841-50.975-3.477Q-50.975-4.071-51.145-4.518Q-51.315-4.966-51.815-4.966Q-52.112-4.966-52.317-4.886Q-52.522-4.806-52.624-4.714Q-52.725-4.622-52.840-4.489Q-52.956-4.356-53.006-4.341L-53.077-4.341Q-53.163-4.364-53.182-4.442L-53.182-7.091Q-53.151-7.188-53.077-7.188Q-53.061-7.188-53.053-7.186Q-53.045-7.184-53.038-7.181Q-52.452-6.931-51.854-6.931Q-51.272-6.931-50.655-7.188L-50.631-7.188Q-50.588-7.188-50.561-7.163Q-50.534-7.138-50.534-7.098L-50.534-7.020Q-50.534-6.989-50.557-6.966Q-50.854-6.614-51.276-6.417Q-51.698-6.220-52.159-6.220Q-52.506-6.220-52.885-6.325L-52.885-4.829Q-52.667-5.024-52.391-5.122Q-52.116-5.220-51.815-5.220Q-51.358-5.220-50.989-4.972Q-50.620-4.723-50.413-4.319Q-50.206-3.915-50.206-3.470Q-50.206-2.981-50.461-2.573Q-50.717-2.165-51.149-1.932Q-51.581-1.700-52.069-1.700Q-52.463-1.700-52.819-1.891Q-53.174-2.083-53.385-2.417Q-53.596-2.751-53.596-3.165Q-53.596-3.345-53.479-3.458Q-53.362-3.571-53.182-3.571Q-53.065-3.571-52.973-3.518Q-52.881-3.466-52.829-3.374Q-52.776-3.282-52.776-3.165Q-52.776-2.981-52.889-2.864Q-53.002-2.747-53.182-2.747",[1336],[1325,7298],{"fill":1327,"stroke":2827,"d":7299,"style":1419},"M-12.766 11.359v-25.884a1 1 0 0 1 1-1h106.12a1 1 0 0 1 1 1V11.36a1 1 0 0 1-1 1h-106.12a1 1 0 0 1-1-1Zm108.12-26.884",[1320,7301,7302],{"fill":2827,"stroke":2827},[1320,7303,7304,7311,7317,7323,7329,7335,7341,7347,7353,7359,7365,7371],{"fill":2827,"stroke":1327,"fontSize":1431},[1320,7305,7307],{"transform":7306},"translate(60.444 29.03)",[1325,7308],{"d":7309,"fill":2827,"stroke":2827,"className":7310,"style":1391},"M-49.405-1.868L-53.436-1.868Q-53.487-1.868-53.518-1.899Q-53.549-1.931-53.549-1.981L-53.549-2.083Q-53.549-2.110-53.518-2.157L-50.221-7.036L-51.397-7.036Q-51.834-7.036-52.157-6.970Q-52.479-6.903-52.709-6.692Q-52.936-6.477-53.043-6.155Q-53.151-5.833-53.151-5.485L-53.428-5.485L-53.334-7.333L-49.420-7.333Q-49.374-7.333-49.342-7.300Q-49.311-7.266-49.311-7.220L-49.311-7.134Q-49.311-7.130-49.334-7.059L-52.639-2.188L-51.405-2.188Q-51.112-2.188-50.864-2.214Q-50.616-2.239-50.387-2.321Q-50.159-2.403-49.975-2.579Q-49.737-2.817-49.655-3.171Q-49.573-3.524-49.542-4.052L-49.260-4.052L-49.405-1.868M-46.479-3.317L-48.733-3.317L-48.733-3.868L-46.479-3.868L-46.479-3.317M-44.846-1.868L-45.127-1.868L-45.127-6.587Q-45.127-6.802-45.190-6.897Q-45.252-6.993-45.370-7.014Q-45.487-7.036-45.733-7.036L-45.733-7.333L-44.510-7.419L-44.510-4.931Q-44.034-5.395-43.334-5.395Q-42.854-5.395-42.446-5.151Q-42.038-4.907-41.801-4.493Q-41.565-4.079-41.565-3.595Q-41.565-3.220-41.713-2.891Q-41.862-2.563-42.131-2.311Q-42.401-2.059-42.745-1.925Q-43.088-1.790-43.448-1.790Q-43.768-1.790-44.067-1.938Q-44.366-2.087-44.573-2.348L-44.846-1.868M-44.487-4.540L-44.487-2.700Q-44.334-2.403-44.075-2.223Q-43.815-2.044-43.502-2.044Q-43.077-2.044-42.809-2.263Q-42.542-2.481-42.426-2.827Q-42.311-3.173-42.311-3.595Q-42.311-4.243-42.559-4.692Q-42.807-5.141-43.405-5.141Q-43.741-5.141-44.030-4.983Q-44.319-4.825-44.487-4.540",[1336],[1320,7312,7313],{"transform":7306},[1325,7314],{"d":7315,"fill":2827,"stroke":2827,"className":7316,"style":1391},"M-40.798-3.563Q-40.798-4.067-40.542-4.499Q-40.286-4.931-39.850-5.182Q-39.415-5.434-38.915-5.434Q-38.528-5.434-38.186-5.290Q-37.845-5.145-37.583-4.884Q-37.321-4.622-37.179-4.286Q-37.036-3.950-37.036-3.563Q-37.036-3.071-37.300-2.661Q-37.563-2.251-37.993-2.020Q-38.423-1.790-38.915-1.790Q-39.407-1.790-39.841-2.022Q-40.274-2.255-40.536-2.663Q-40.798-3.071-40.798-3.563M-38.915-2.067Q-38.458-2.067-38.206-2.290Q-37.954-2.513-37.866-2.864Q-37.778-3.216-37.778-3.661Q-37.778-4.091-37.872-4.429Q-37.966-4.766-38.220-4.973Q-38.474-5.181-38.915-5.181Q-39.563-5.181-39.807-4.764Q-40.052-4.348-40.052-3.661Q-40.052-3.216-39.964-2.864Q-39.876-2.513-39.624-2.290Q-39.372-2.067-38.915-2.067",[1336],[1320,7318,7319],{"transform":7306},[1325,7320],{"d":7321,"fill":2827,"stroke":2827,"className":7322,"style":1391},"M-35.397-1.868L-36.893-1.868L-36.893-2.165Q-36.260-2.165-35.838-2.645L-35.069-3.556L-36.061-4.755Q-36.217-4.934-36.379-4.977Q-36.542-5.020-36.846-5.020L-36.846-5.317L-35.159-5.317L-35.159-5.020Q-35.252-5.020-35.329-4.977Q-35.405-4.934-35.405-4.845Q-35.405-4.802-35.374-4.755L-34.717-3.966L-34.237-4.540Q-34.120-4.677-34.120-4.813Q-34.120-4.903-34.170-4.962Q-34.221-5.020-34.303-5.020L-34.303-5.317L-32.815-5.317L-32.815-5.020Q-33.452-5.020-33.862-4.540L-34.542-3.739L-33.456-2.427Q-33.295-2.251-33.135-2.208Q-32.975-2.165-32.670-2.165L-32.670-1.868L-34.358-1.868L-34.358-2.165Q-34.268-2.165-34.190-2.208Q-34.112-2.251-34.112-2.341Q-34.112-2.364-34.143-2.427L-34.885-3.333L-35.471-2.645Q-35.588-2.509-35.588-2.372Q-35.588-2.286-35.538-2.225Q-35.487-2.165-35.397-2.165",[1336],[1320,7324,7325],{"transform":7306},[1325,7326],{"d":7327,"fill":2827,"stroke":2827,"className":7328,"style":1391},"M-27.534 0.132L-28.710 0.132L-28.710-7.868L-27.534-7.868L-27.534-7.501L-28.343-7.501L-28.343-0.235L-27.534-0.235",[1336],[1320,7330,7331],{"transform":7306},[1325,7332],{"d":7333,"fill":2827,"stroke":2827,"className":7334,"style":1391},"M-26.997-2.540Q-26.997-2.645-26.974-2.739L-25.982-6.716Q-25.943-6.903-25.943-6.931Q-25.943-7.036-26.439-7.036Q-26.532-7.067-26.532-7.165L-26.509-7.266Q-26.501-7.313-26.419-7.333L-25.318-7.419Q-25.275-7.419-25.236-7.388Q-25.196-7.356-25.196-7.302L-26.349-2.700Q-26.388-2.454-26.388-2.403Q-26.388-2.044-26.142-2.044Q-25.966-2.044-25.851-2.214Q-25.736-2.384-25.681-2.569Q-25.626-2.755-25.556-3.044Q-25.529-3.114-25.470-3.114L-25.364-3.114Q-25.325-3.114-25.302-3.085Q-25.279-3.056-25.279-3.020Q-25.279-3.005-25.286-2.989Q-25.404-2.481-25.595-2.136Q-25.786-1.790-26.157-1.790Q-26.501-1.790-26.749-1.997Q-26.997-2.204-26.997-2.540",[1336],[1320,7336,7337],{"transform":7306},[1325,7338],{"d":7339,"fill":2827,"stroke":2827,"className":7340,"style":1391},"M-23.885-0.462Q-23.885-0.485-23.854-0.532Q-23.561-0.794-23.395-1.161Q-23.229-1.528-23.229-1.915L-23.229-1.973Q-23.357-1.868-23.525-1.868Q-23.717-1.868-23.854-2.001Q-23.990-2.134-23.990-2.333Q-23.990-2.524-23.854-2.657Q-23.717-2.790-23.525-2.790Q-23.225-2.790-23.100-2.520Q-22.975-2.251-22.975-1.915Q-22.975-1.466-23.156-1.052Q-23.338-0.638-23.678-0.341Q-23.701-0.317-23.740-0.317Q-23.787-0.317-23.836-0.362Q-23.885-0.407-23.885-0.462",[1336],[1320,7342,7343],{"transform":7306},[1325,7344],{"d":7345,"fill":2827,"stroke":2827,"className":7346,"style":1391},"M-20.237-2.044Q-20.233-2.063-20.231-2.077Q-20.229-2.091-20.229-2.114L-19.635-4.485Q-19.596-4.641-19.596-4.778Q-19.596-4.927-19.649-5.034Q-19.702-5.141-19.834-5.141Q-20.014-5.141-20.133-4.972Q-20.252-4.802-20.309-4.616Q-20.366-4.431-20.436-4.141Q-20.448-4.067-20.518-4.067L-20.619-4.067Q-20.655-4.067-20.682-4.102Q-20.709-4.138-20.709-4.165L-20.709-4.196Q-20.623-4.528-20.530-4.770Q-20.436-5.013-20.260-5.204Q-20.084-5.395-19.819-5.395Q-19.534-5.395-19.301-5.247Q-19.069-5.098-19.002-4.845Q-18.795-5.098-18.526-5.247Q-18.256-5.395-17.940-5.395Q-17.760-5.395-17.604-5.323Q-17.448-5.251-17.354-5.114Q-17.260-4.977-17.260-4.798Q-17.260-4.583-17.393-4.425Q-17.526-4.266-17.733-4.266Q-17.866-4.266-17.959-4.350Q-18.053-4.434-18.053-4.571Q-18.053-4.747-17.932-4.880Q-17.811-5.013-17.643-5.036Q-17.776-5.141-17.955-5.141Q-18.303-5.141-18.573-4.905Q-18.842-4.669-19.037-4.309L-19.596-2.075Q-19.627-1.950-19.733-1.870Q-19.838-1.790-19.963-1.790Q-20.073-1.790-20.155-1.860Q-20.237-1.931-20.237-2.044",[1336],[1320,7348,7349],{"transform":7306},[1325,7350],{"d":7351,"fill":2827,"stroke":2827,"className":7352,"style":1391},"M-16.219 0.132L-16.301 0.132Q-16.337 0.132-16.362 0.103Q-16.387 0.073-16.387 0.034Q-16.387-0.016-16.356-0.036Q-15.969-0.372-15.686-0.821Q-15.403-1.270-15.237-1.770Q-15.071-2.270-14.997-2.788Q-14.922-3.306-14.922-3.868Q-14.922-4.438-14.997-4.954Q-15.071-5.470-15.237-5.966Q-15.403-6.462-15.682-6.909Q-15.962-7.356-16.356-7.700Q-16.387-7.720-16.387-7.770Q-16.387-7.809-16.362-7.839Q-16.337-7.868-16.301-7.868L-16.219-7.868Q-16.208-7.868-16.198-7.866Q-16.188-7.864-16.180-7.860Q-15.567-7.403-15.165-6.768Q-14.762-6.134-14.567-5.388Q-14.372-4.641-14.372-3.868Q-14.372-3.095-14.567-2.348Q-14.762-1.602-15.165-0.968Q-15.567-0.333-16.180 0.124Q-16.192 0.124-16.200 0.126Q-16.208 0.128-16.219 0.132",[1336],[1320,7354,7355],{"transform":7306},[1325,7356],{"d":7357,"fill":2827,"stroke":2827,"className":7358,"style":1391},"M-5.232-2.845L-10.545-2.845Q-10.623-2.852-10.672-2.901Q-10.720-2.950-10.720-3.028Q-10.720-3.098-10.673-3.149Q-10.627-3.200-10.545-3.212L-5.232-3.212Q-5.158-3.200-5.111-3.149Q-5.064-3.098-5.064-3.028Q-5.064-2.950-5.113-2.901Q-5.162-2.852-5.232-2.845M-5.232-4.532L-10.545-4.532Q-10.623-4.540-10.672-4.589Q-10.720-4.638-10.720-4.716Q-10.720-4.786-10.673-4.837Q-10.627-4.888-10.545-4.899L-5.232-4.899Q-5.158-4.888-5.111-4.837Q-5.064-4.786-5.064-4.716Q-5.064-4.638-5.113-4.589Q-5.162-4.540-5.232-4.532",[1336],[1320,7360,7361],{"transform":7306},[1325,7362],{"d":7363,"fill":2827,"stroke":2827,"className":7364,"style":1391},"M-0.053 0.132L-1.229 0.132L-1.229-7.868L-0.053-7.868L-0.053-7.501L-0.862-7.501L-0.862-0.235L-0.053-0.235L-0.053 0.132M3.724-1.868L0.564-1.868L0.564-2.075Q0.564-2.102 0.588-2.134L1.939-3.532Q2.318-3.919 2.566-4.208Q2.814-4.497 2.988-4.854Q3.162-5.212 3.162-5.602Q3.162-5.950 3.029-6.243Q2.896-6.536 2.642-6.714Q2.388-6.891 2.033-6.891Q1.674-6.891 1.383-6.696Q1.091-6.501 0.947-6.173L1.002-6.173Q1.185-6.173 1.310-6.052Q1.435-5.931 1.435-5.739Q1.435-5.559 1.310-5.431Q1.185-5.302 1.002-5.302Q0.822-5.302 0.693-5.431Q0.564-5.559 0.564-5.739Q0.564-6.141 0.785-6.477Q1.006-6.813 1.371-7.001Q1.736-7.188 2.138-7.188Q2.619-7.188 3.035-7.001Q3.451-6.813 3.703-6.452Q3.955-6.091 3.955-5.602Q3.955-5.243 3.800-4.940Q3.646-4.638 3.394-4.378Q3.142-4.118 2.793-3.833Q2.443-3.548 2.275-3.395L1.345-2.556L2.060-2.556Q3.435-2.556 3.474-2.595Q3.545-2.673 3.588-2.858Q3.631-3.044 3.674-3.333L3.955-3.333",[1336],[1320,7366,7367],{"transform":7306},[1325,7368],{"d":7369,"fill":2827,"stroke":2827,"className":7370,"style":1391},"M5.215-0.462Q5.215-0.485 5.246-0.532Q5.539-0.794 5.705-1.161Q5.871-1.528 5.871-1.915L5.871-1.973Q5.743-1.868 5.575-1.868Q5.383-1.868 5.246-2.001Q5.110-2.134 5.110-2.333Q5.110-2.524 5.246-2.657Q5.383-2.790 5.575-2.790Q5.875-2.790 6-2.520Q6.125-2.251 6.125-1.915Q6.125-1.466 5.944-1.052Q5.762-0.638 5.422-0.341Q5.399-0.317 5.360-0.317Q5.313-0.317 5.264-0.362Q5.215-0.407 5.215-0.462",[1336],[1320,7372,7373],{"transform":7306},[1325,7374],{"d":7375,"fill":2827,"stroke":2827,"className":7376,"style":1391},"M10.289-1.700Q9.617-1.700 9.221-2.124Q8.824-2.548 8.672-3.167Q8.520-3.786 8.520-4.454Q8.520-5.114 8.791-5.747Q9.063-6.380 9.576-6.784Q10.090-7.188 10.762-7.188Q11.051-7.188 11.299-7.089Q11.547-6.989 11.693-6.788Q11.840-6.587 11.840-6.282Q11.840-6.177 11.789-6.085Q11.738-5.993 11.647-5.942Q11.555-5.891 11.449-5.891Q11.281-5.891 11.168-6.005Q11.055-6.118 11.055-6.282Q11.055-6.442 11.164-6.559Q11.273-6.677 11.441-6.677Q11.242-6.946 10.762-6.946Q10.344-6.946 10.012-6.669Q9.680-6.391 9.504-5.973Q9.305-5.473 9.305-4.571Q9.469-4.895 9.748-5.095Q10.027-5.294 10.375-5.294Q10.859-5.294 11.244-5.048Q11.629-4.802 11.842-4.393Q12.055-3.985 12.055-3.501Q12.055-3.009 11.824-2.597Q11.594-2.184 11.184-1.942Q10.773-1.700 10.289-1.700M10.289-1.973Q10.715-1.973 10.932-2.194Q11.148-2.415 11.211-2.741Q11.273-3.067 11.273-3.501Q11.273-3.813 11.248-4.063Q11.223-4.313 11.133-4.538Q11.043-4.763 10.848-4.899Q10.652-5.036 10.336-5.036Q10.008-5.036 9.775-4.827Q9.543-4.618 9.432-4.300Q9.320-3.981 9.320-3.669Q9.324-3.630 9.326-3.597Q9.328-3.563 9.328-3.509Q9.328-3.493 9.326-3.485Q9.324-3.477 9.320-3.470Q9.320-2.895 9.547-2.434Q9.773-1.973 10.289-1.973M13.055 0.132L12.973 0.132Q12.938 0.132 12.912 0.103Q12.887 0.073 12.887 0.034Q12.887-0.016 12.918-0.036Q13.305-0.372 13.588-0.821Q13.871-1.270 14.037-1.770Q14.203-2.270 14.277-2.788Q14.352-3.306 14.352-3.868Q14.352-4.438 14.277-4.954Q14.203-5.470 14.037-5.966Q13.871-6.462 13.592-6.909Q13.313-7.356 12.918-7.700Q12.887-7.720 12.887-7.770Q12.887-7.809 12.912-7.839Q12.938-7.868 12.973-7.868L13.055-7.868Q13.066-7.868 13.076-7.866Q13.086-7.864 13.094-7.860Q13.707-7.403 14.109-6.768Q14.512-6.134 14.707-5.388Q14.902-4.641 14.902-3.868Q14.902-3.095 14.707-2.348Q14.512-1.602 14.109-0.968Q13.707-0.333 13.094 0.124Q13.082 0.124 13.074 0.126Q13.066 0.128 13.055 0.132",[1336],[1320,7378,7379],{"fill":2827,"stroke":2827},[1320,7380,7381,7388,7394,7400,7406,7412],{"fill":2827,"stroke":1327,"fontSize":1431},[1320,7382,7384],{"transform":7383},"translate(29.328 -29.506)",[1325,7385],{"d":7386,"fill":2827,"stroke":2827,"className":7387,"style":1391},"M-51.854-1.868L-53.709-1.868L-53.709-2.165Q-53.436-2.165-53.268-2.212Q-53.100-2.259-53.100-2.427L-53.100-4.563Q-53.100-4.778-53.163-4.874Q-53.225-4.970-53.344-4.991Q-53.463-5.013-53.709-5.013L-53.709-5.309L-52.518-5.395L-52.518-4.661Q-52.405-4.876-52.211-5.044Q-52.018-5.212-51.780-5.304Q-51.542-5.395-51.288-5.395Q-50.327-5.395-50.151-4.684Q-49.967-5.013-49.639-5.204Q-49.311-5.395-48.932-5.395Q-47.756-5.395-47.756-4.317L-47.756-2.427Q-47.756-2.259-47.588-2.212Q-47.420-2.165-47.151-2.165L-47.151-1.868L-49.006-1.868L-49.006-2.165Q-48.733-2.165-48.565-2.210Q-48.397-2.255-48.397-2.427L-48.397-4.302Q-48.397-4.688-48.522-4.915Q-48.647-5.141-48.999-5.141Q-49.303-5.141-49.559-4.979Q-49.815-4.817-49.963-4.548Q-50.112-4.278-50.112-3.981L-50.112-2.427Q-50.112-2.259-49.942-2.212Q-49.772-2.165-49.502-2.165L-49.502-1.868L-51.358-1.868L-51.358-2.165Q-51.084-2.165-50.917-2.212Q-50.749-2.259-50.749-2.427L-50.749-4.302Q-50.749-4.688-50.874-4.915Q-50.999-5.141-51.350-5.141Q-51.655-5.141-51.911-4.979Q-52.167-4.817-52.315-4.548Q-52.463-4.278-52.463-3.981L-52.463-2.427Q-52.463-2.259-52.293-2.212Q-52.124-2.165-51.854-2.165L-51.854-1.868M-44.846-1.868L-46.624-1.868L-46.624-2.165Q-46.350-2.165-46.182-2.212Q-46.014-2.259-46.014-2.427L-46.014-4.563Q-46.014-4.778-46.071-4.874Q-46.127-4.970-46.241-4.991Q-46.354-5.013-46.600-5.013L-46.600-5.309L-45.401-5.395L-45.401-2.427Q-45.401-2.259-45.254-2.212Q-45.108-2.165-44.846-2.165L-44.846-1.868M-46.288-6.790Q-46.288-6.981-46.153-7.112Q-46.018-7.243-45.823-7.243Q-45.702-7.243-45.598-7.181Q-45.495-7.118-45.432-7.014Q-45.370-6.911-45.370-6.790Q-45.370-6.595-45.501-6.460Q-45.631-6.325-45.823-6.325Q-46.022-6.325-46.155-6.458Q-46.288-6.591-46.288-6.790M-42.338-1.868L-44.319-1.868L-44.319-2.165Q-44.049-2.165-43.881-2.210Q-43.713-2.255-43.713-2.427L-43.713-4.563Q-43.713-4.778-43.776-4.874Q-43.838-4.970-43.956-4.991Q-44.073-5.013-44.319-5.013L-44.319-5.309L-43.151-5.395L-43.151-4.610Q-43.073-4.821-42.920-5.007Q-42.768-5.192-42.569-5.294Q-42.370-5.395-42.143-5.395Q-41.897-5.395-41.706-5.251Q-41.514-5.106-41.514-4.876Q-41.514-4.720-41.620-4.610Q-41.725-4.501-41.881-4.501Q-42.038-4.501-42.147-4.610Q-42.256-4.720-42.256-4.876Q-42.256-5.036-42.151-5.141Q-42.475-5.141-42.690-4.913Q-42.905-4.684-43.001-4.345Q-43.096-4.005-43.096-3.700L-43.096-2.427Q-43.096-2.259-42.870-2.212Q-42.643-2.165-42.338-2.165L-42.338-1.868M-39.026-1.868L-41.006-1.868L-41.006-2.165Q-40.737-2.165-40.569-2.210Q-40.401-2.255-40.401-2.427L-40.401-4.563Q-40.401-4.778-40.463-4.874Q-40.526-4.970-40.643-4.991Q-40.760-5.013-41.006-5.013L-41.006-5.309L-39.838-5.395L-39.838-4.610Q-39.760-4.821-39.608-5.007Q-39.456-5.192-39.256-5.294Q-39.057-5.395-38.831-5.395Q-38.584-5.395-38.393-5.251Q-38.202-5.106-38.202-4.876Q-38.202-4.720-38.307-4.610Q-38.413-4.501-38.569-4.501Q-38.725-4.501-38.834-4.610Q-38.944-4.720-38.944-4.876Q-38.944-5.036-38.838-5.141Q-39.163-5.141-39.377-4.913Q-39.592-4.684-39.688-4.345Q-39.784-4.005-39.784-3.700L-39.784-2.427Q-39.784-2.259-39.557-2.212Q-39.331-2.165-39.026-2.165L-39.026-1.868M-37.721-3.563Q-37.721-4.067-37.465-4.499Q-37.209-4.931-36.774-5.182Q-36.338-5.434-35.838-5.434Q-35.452-5.434-35.110-5.290Q-34.768-5.145-34.506-4.884Q-34.245-4.622-34.102-4.286Q-33.959-3.950-33.959-3.563Q-33.959-3.071-34.223-2.661Q-34.487-2.251-34.917-2.020Q-35.346-1.790-35.838-1.790Q-36.331-1.790-36.764-2.022Q-37.198-2.255-37.459-2.663Q-37.721-3.071-37.721-3.563M-35.838-2.067Q-35.381-2.067-35.129-2.290Q-34.877-2.513-34.790-2.864Q-34.702-3.216-34.702-3.661Q-34.702-4.091-34.795-4.429Q-34.889-4.766-35.143-4.973Q-35.397-5.181-35.838-5.181Q-36.487-5.181-36.731-4.764Q-36.975-4.348-36.975-3.661Q-36.975-3.216-36.887-2.864Q-36.799-2.513-36.547-2.290Q-36.295-2.067-35.838-2.067M-31.467-1.868L-33.448-1.868L-33.448-2.165Q-33.178-2.165-33.010-2.210Q-32.842-2.255-32.842-2.427L-32.842-4.563Q-32.842-4.778-32.905-4.874Q-32.967-4.970-33.084-4.991Q-33.202-5.013-33.448-5.013L-33.448-5.309L-32.280-5.395L-32.280-4.610Q-32.202-4.821-32.049-5.007Q-31.897-5.192-31.698-5.294Q-31.499-5.395-31.272-5.395Q-31.026-5.395-30.834-5.251Q-30.643-5.106-30.643-4.876Q-30.643-4.720-30.749-4.610Q-30.854-4.501-31.010-4.501Q-31.167-4.501-31.276-4.610Q-31.385-4.720-31.385-4.876Q-31.385-5.036-31.280-5.141Q-31.604-5.141-31.819-4.913Q-32.034-4.684-32.129-4.345Q-32.225-4.005-32.225-3.700L-32.225-2.427Q-32.225-2.259-31.999-2.212Q-31.772-2.165-31.467-2.165",[1336],[1320,7389,7390],{"transform":7383},[1325,7391],{"d":7392,"fill":2827,"stroke":2827,"className":7393,"style":1391},"M-26.869-2.470Q-26.869-2.602-26.815-2.755L-26.143-4.485Q-26.053-4.708-26.053-4.891Q-26.053-5.141-26.229-5.141Q-26.534-5.141-26.744-4.833Q-26.955-4.524-27.061-4.141Q-27.073-4.067-27.143-4.067L-27.244-4.067Q-27.280-4.067-27.307-4.102Q-27.334-4.138-27.334-4.165L-27.334-4.196Q-27.213-4.661-26.918-5.028Q-26.623-5.395-26.213-5.395Q-26.006-5.395-25.836-5.313Q-25.666-5.231-25.563-5.077Q-25.459-4.923-25.459-4.716Q-25.459-4.595-25.518-4.427L-26.190-2.700Q-26.276-2.466-26.276-2.294Q-26.276-2.044-26.100-2.044Q-25.787-2.044-25.573-2.362Q-25.358-2.681-25.276-3.044Q-25.248-3.114-25.190-3.114L-25.084-3.114Q-25.045-3.114-25.022-3.085Q-24.998-3.056-24.998-3.020Q-24.998-3.005-25.006-2.989Q-25.084-2.688-25.231-2.421Q-25.377-2.153-25.602-1.972Q-25.827-1.790-26.116-1.790Q-26.432-1.790-26.651-1.977Q-26.869-2.165-26.869-2.470M-25.948-6.708Q-25.948-6.888-25.801-7.026Q-25.655-7.165-25.479-7.165Q-25.342-7.165-25.250-7.077Q-25.159-6.989-25.159-6.852Q-25.159-6.677-25.303-6.536Q-25.448-6.395-25.619-6.395Q-25.752-6.395-25.850-6.487Q-25.948-6.579-25.948-6.708",[1336],[1320,7395,7396],{"transform":7383},[1325,7397],{"d":7398,"fill":2827,"stroke":2827,"className":7399,"style":1391},"M-18.944-3.684L-23.776-3.684Q-23.851-3.696-23.901-3.745Q-23.952-3.794-23.952-3.868Q-23.952-4.020-23.776-4.052L-18.944-4.052Q-18.776-4.024-18.776-3.868Q-18.776-3.712-18.944-3.684",[1336],[1320,7401,7402],{"transform":7383},[1325,7403],{"d":7404,"fill":2827,"stroke":2827,"className":7405,"style":1391},"M-17.707-2.540Q-17.707-2.645-17.684-2.739L-16.692-6.716Q-16.653-6.903-16.653-6.931Q-16.653-7.036-17.149-7.036Q-17.242-7.067-17.242-7.165L-17.219-7.266Q-17.211-7.313-17.129-7.333L-16.028-7.419Q-15.985-7.419-15.946-7.388Q-15.906-7.356-15.906-7.302L-17.059-2.700Q-17.098-2.454-17.098-2.403Q-17.098-2.044-16.852-2.044Q-16.676-2.044-16.561-2.214Q-16.446-2.384-16.391-2.569Q-16.336-2.755-16.266-3.044Q-16.238-3.114-16.180-3.114L-16.074-3.114Q-16.035-3.114-16.012-3.085Q-15.988-3.056-15.988-3.020Q-15.988-3.005-15.996-2.989Q-16.113-2.481-16.305-2.136Q-16.496-1.790-16.867-1.790Q-17.211-1.790-17.459-1.997Q-17.707-2.204-17.707-2.540",[1336],[1320,7407,7408],{"transform":7383},[1325,7409],{"d":7410,"fill":2827,"stroke":2827,"className":7411,"style":1391},"M-9.458-2.845L-14.771-2.845Q-14.849-2.852-14.898-2.901Q-14.946-2.950-14.946-3.028Q-14.946-3.098-14.899-3.149Q-14.853-3.200-14.771-3.212L-9.458-3.212Q-9.384-3.200-9.337-3.149Q-9.290-3.098-9.290-3.028Q-9.290-2.950-9.339-2.901Q-9.388-2.852-9.458-2.845M-9.458-4.532L-14.771-4.532Q-14.849-4.540-14.898-4.589Q-14.946-4.638-14.946-4.716Q-14.946-4.786-14.899-4.837Q-14.853-4.888-14.771-4.899L-9.458-4.899Q-9.384-4.888-9.337-4.837Q-9.290-4.786-9.290-4.716Q-9.290-4.638-9.339-4.589Q-9.388-4.540-9.458-4.532",[1336],[1320,7413,7414],{"transform":7383},[1325,7415],{"d":7416,"fill":2827,"stroke":2827,"className":7417,"style":1391},"M-5.222-1.868L-8.382-1.868L-8.382-2.075Q-8.382-2.102-8.359-2.134L-7.007-3.532Q-6.628-3.919-6.380-4.208Q-6.132-4.497-5.958-4.854Q-5.785-5.212-5.785-5.602Q-5.785-5.950-5.917-6.243Q-6.050-6.536-6.304-6.714Q-6.558-6.891-6.913-6.891Q-7.273-6.891-7.564-6.696Q-7.855-6.501-7.999-6.173L-7.945-6.173Q-7.761-6.173-7.636-6.052Q-7.511-5.931-7.511-5.739Q-7.511-5.559-7.636-5.431Q-7.761-5.302-7.945-5.302Q-8.124-5.302-8.253-5.431Q-8.382-5.559-8.382-5.739Q-8.382-6.141-8.162-6.477Q-7.941-6.813-7.576-7.001Q-7.210-7.188-6.808-7.188Q-6.328-7.188-5.912-7.001Q-5.495-6.813-5.244-6.452Q-4.992-6.091-4.992-5.602Q-4.992-5.243-5.146-4.940Q-5.300-4.638-5.552-4.378Q-5.804-4.118-6.154-3.833Q-6.503-3.548-6.671-3.395L-7.601-2.556L-6.886-2.556Q-5.511-2.556-5.472-2.595Q-5.402-2.673-5.359-2.858Q-5.316-3.044-5.273-3.333L-4.992-3.333",[1336],[1320,7419,7420],{"fill":2827,"stroke":2827},[1320,7421,7422,7429,7435],{"fill":2827,"stroke":1327,"fontSize":1431},[1320,7423,7425],{"transform":7424},"translate(101.243 -29.223)",[1325,7426],{"d":7427,"fill":2827,"stroke":2827,"className":7428,"style":1391},"M-53.334-2.470Q-53.334-2.602-53.280-2.755L-52.608-4.485Q-52.518-4.708-52.518-4.891Q-52.518-5.141-52.694-5.141Q-52.999-5.141-53.209-4.833Q-53.420-4.524-53.526-4.141Q-53.538-4.067-53.608-4.067L-53.709-4.067Q-53.745-4.067-53.772-4.102Q-53.799-4.138-53.799-4.165L-53.799-4.196Q-53.678-4.661-53.383-5.028Q-53.088-5.395-52.678-5.395Q-52.471-5.395-52.301-5.313Q-52.131-5.231-52.028-5.077Q-51.924-4.923-51.924-4.716Q-51.924-4.595-51.983-4.427L-52.655-2.700Q-52.741-2.466-52.741-2.294Q-52.741-2.044-52.565-2.044Q-52.252-2.044-52.038-2.362Q-51.823-2.681-51.741-3.044Q-51.713-3.114-51.655-3.114L-51.549-3.114Q-51.510-3.114-51.487-3.085Q-51.463-3.056-51.463-3.020Q-51.463-3.005-51.471-2.989Q-51.549-2.688-51.696-2.421Q-51.842-2.153-52.067-1.972Q-52.292-1.790-52.581-1.790Q-52.897-1.790-53.116-1.977Q-53.334-2.165-53.334-2.470M-52.413-6.708Q-52.413-6.888-52.266-7.026Q-52.120-7.165-51.944-7.165Q-51.807-7.165-51.715-7.077Q-51.624-6.989-51.624-6.852Q-51.624-6.677-51.768-6.536Q-51.913-6.395-52.084-6.395Q-52.217-6.395-52.315-6.487Q-52.413-6.579-52.413-6.708",[1336],[1320,7430,7431],{"transform":7424},[1325,7432],{"d":7433,"fill":2827,"stroke":2827,"className":7434,"style":1391},"M-45.167-2.845L-50.480-2.845Q-50.558-2.852-50.607-2.901Q-50.655-2.950-50.655-3.028Q-50.655-3.098-50.608-3.149Q-50.562-3.200-50.480-3.212L-45.167-3.212Q-45.093-3.200-45.046-3.149Q-44.999-3.098-44.999-3.028Q-44.999-2.950-45.048-2.901Q-45.097-2.852-45.167-2.845M-45.167-4.532L-50.480-4.532Q-50.558-4.540-50.607-4.589Q-50.655-4.638-50.655-4.716Q-50.655-4.786-50.608-4.837Q-50.562-4.888-50.480-4.899L-45.167-4.899Q-45.093-4.888-45.046-4.837Q-44.999-4.786-44.999-4.716Q-44.999-4.638-45.048-4.589Q-45.097-4.540-45.167-4.532",[1336],[1320,7436,7437],{"transform":7424},[1325,7438],{"d":7439,"fill":2827,"stroke":2827,"className":7440,"style":1391},"M-42.037-3.181L-44.279-3.181L-44.279-3.477L-41.708-7.134Q-41.669-7.188-41.607-7.188L-41.462-7.188Q-41.412-7.188-41.380-7.157Q-41.349-7.126-41.349-7.075L-41.349-3.477L-40.517-3.477L-40.517-3.181L-41.349-3.181L-41.349-2.427Q-41.349-2.165-40.525-2.165L-40.525-1.868L-42.861-1.868L-42.861-2.165Q-42.037-2.165-42.037-2.427L-42.037-3.181M-41.982-6.282L-43.951-3.477L-41.982-3.477",[1336],[1320,7442,7443,7446,7449],{"fill":1418,"stroke":1418,"style":2882},[1325,7444],{"fill":1327,"d":7445},"M54.098-47.96C37.026-61.619 17.11-61.619 2.068-49.586",[1325,7447],{"stroke":1327,"d":7448},"m.038-47.96 4.547-.975-2.517-.65-.081-2.598",[1320,7450,7451,7458],{"fill":1418,"stroke":1327,"fontFamily":1559,"fontSize":1431},[1320,7452,7454],{"transform":7453},"translate(72.59 -63.625)",[1325,7455],{"d":7456,"fill":1418,"stroke":1418,"className":7457,"style":1391},"M-53.741-3.595Q-53.741-4.091-53.491-4.516Q-53.241-4.942-52.821-5.188Q-52.401-5.434-51.901-5.434Q-51.362-5.434-50.971-5.309Q-50.581-5.184-50.581-4.770Q-50.581-4.665-50.631-4.573Q-50.682-4.481-50.774-4.431Q-50.866-4.380-50.975-4.380Q-51.081-4.380-51.172-4.431Q-51.264-4.481-51.315-4.573Q-51.366-4.665-51.366-4.770Q-51.366-4.993-51.198-5.098Q-51.420-5.157-51.893-5.157Q-52.190-5.157-52.405-5.018Q-52.620-4.880-52.751-4.649Q-52.881-4.419-52.940-4.149Q-52.999-3.880-52.999-3.595Q-52.999-3.200-52.866-2.850Q-52.733-2.501-52.461-2.284Q-52.190-2.067-51.792-2.067Q-51.417-2.067-51.141-2.284Q-50.866-2.501-50.764-2.860Q-50.749-2.923-50.686-2.923L-50.581-2.923Q-50.545-2.923-50.520-2.895Q-50.495-2.868-50.495-2.829L-50.495-2.806Q-50.627-2.325-51.012-2.057Q-51.397-1.790-51.901-1.790Q-52.264-1.790-52.598-1.927Q-52.932-2.063-53.192-2.313Q-53.452-2.563-53.596-2.899Q-53.741-3.235-53.741-3.595M-50.006-3.563Q-50.006-4.067-49.751-4.499Q-49.495-4.931-49.059-5.182Q-48.624-5.434-48.124-5.434Q-47.737-5.434-47.395-5.290Q-47.053-5.145-46.792-4.884Q-46.530-4.622-46.387-4.286Q-46.245-3.950-46.245-3.563Q-46.245-3.071-46.508-2.661Q-46.772-2.251-47.202-2.020Q-47.631-1.790-48.124-1.790Q-48.616-1.790-49.049-2.022Q-49.483-2.255-49.745-2.663Q-50.006-3.071-50.006-3.563M-48.124-2.067Q-47.667-2.067-47.415-2.290Q-47.163-2.513-47.075-2.864Q-46.987-3.216-46.987-3.661Q-46.987-4.091-47.081-4.429Q-47.174-4.766-47.428-4.973Q-47.682-5.181-48.124-5.181Q-48.772-5.181-49.016-4.764Q-49.260-4.348-49.260-3.661Q-49.260-3.216-49.172-2.864Q-49.084-2.513-48.833-2.290Q-48.581-2.067-48.124-2.067M-43.877-0.317L-45.733-0.317L-45.733-0.610Q-45.463-0.610-45.295-0.655Q-45.127-0.700-45.127-0.876L-45.127-4.700Q-45.127-4.907-45.284-4.960Q-45.440-5.013-45.733-5.013L-45.733-5.309L-44.510-5.395L-44.510-4.931Q-44.280-5.153-43.965-5.274Q-43.651-5.395-43.311-5.395Q-42.838-5.395-42.434-5.149Q-42.030-4.903-41.797-4.487Q-41.565-4.071-41.565-3.595Q-41.565-3.220-41.713-2.891Q-41.862-2.563-42.131-2.311Q-42.401-2.059-42.745-1.925Q-43.088-1.790-43.448-1.790Q-43.737-1.790-44.008-1.911Q-44.280-2.032-44.487-2.243L-44.487-0.876Q-44.487-0.700-44.319-0.655Q-44.151-0.610-43.877-0.610L-43.877-0.317M-44.487-4.532L-44.487-2.692Q-44.334-2.403-44.073-2.223Q-43.811-2.044-43.502-2.044Q-43.217-2.044-42.995-2.182Q-42.772-2.321-42.620-2.552Q-42.467-2.782-42.389-3.054Q-42.311-3.325-42.311-3.595Q-42.311-3.927-42.436-4.284Q-42.561-4.641-42.809-4.878Q-43.057-5.114-43.405-5.114Q-43.729-5.114-44.024-4.958Q-44.319-4.802-44.487-4.532",[1336],[1320,7459,7460],{"transform":7453},[1325,7461],{"d":7462,"fill":1418,"stroke":1418,"className":7463,"style":1391},"M-40.852-0.571Q-40.738-0.493-40.563-0.493Q-40.274-0.493-40.053-0.706Q-39.832-0.919-39.707-1.220L-39.418-1.868L-40.692-4.755Q-40.774-4.931-40.918-4.975Q-41.063-5.020-41.332-5.020L-41.332-5.317L-39.613-5.317L-39.613-5.020Q-40.035-5.020-40.035-4.837Q-40.035-4.825-40.020-4.755L-39.082-2.630L-38.250-4.540Q-38.211-4.630-38.211-4.708Q-38.211-4.848-38.313-4.934Q-38.414-5.020-38.555-5.020L-38.555-5.317L-37.203-5.317L-37.203-5.020Q-37.457-5.020-37.651-4.895Q-37.844-4.770-37.949-4.540L-39.395-1.220Q-39.508-0.966-39.674-0.743Q-39.840-0.520-40.069-0.378Q-40.297-0.235-40.563-0.235Q-40.860-0.235-41.100-0.427Q-41.340-0.618-41.340-0.907Q-41.340-1.063-41.235-1.165Q-41.129-1.266-40.981-1.266Q-40.875-1.266-40.795-1.220Q-40.715-1.173-40.668-1.095Q-40.621-1.016-40.621-0.907Q-40.621-0.786-40.682-0.698Q-40.742-0.610-40.852-0.571",[1336],[1320,7465,7466],{"fill":2827,"stroke":2827},[1320,7467,7468,7475,7481,7487,7493,7499,7505,7511,7517,7523,7529,7535],{"fill":2827,"stroke":1327,"fontSize":1431},[1320,7469,7471],{"transform":7470},"translate(46.019 44.68)",[1325,7472],{"d":7473,"fill":2827,"stroke":2827,"className":7474,"style":1391},"M-53.526-1.958Q-53.526-2.075-53.448-2.157L-48.901-7.036L-50.112-7.036Q-50.565-7.036-50.899-6.966Q-51.233-6.895-51.475-6.733Q-51.717-6.571-51.903-6.278Q-52.088-5.985-52.221-5.556Q-52.241-5.501-52.319-5.485L-52.397-5.485Q-52.495-5.513-52.495-5.595Q-52.495-5.602-52.487-5.645L-51.991-7.266Q-51.971-7.317-51.893-7.333L-48.053-7.333Q-47.967-7.333-47.967-7.243Q-47.967-7.130-48.038-7.059L-52.581-2.188L-51.319-2.188Q-50.756-2.188-50.391-2.278Q-50.026-2.368-49.782-2.573Q-49.538-2.778-49.364-3.112Q-49.190-3.446-49.014-3.989Q-49.006-4.032-48.924-4.052L-48.846-4.052Q-48.741-4.020-48.741-3.938Q-48.741-3.931-48.749-3.899L-49.381-1.938Q-49.401-1.884-49.479-1.868L-53.436-1.868Q-53.526-1.868-53.526-1.958",[1336],[1320,7476,7477],{"transform":7470},[1325,7478],{"d":7479,"fill":2827,"stroke":2827,"className":7480,"style":1391},"M-45.529 0.132L-46.705 0.132L-46.705-7.868L-45.529-7.868L-45.529-7.501L-46.338-7.501L-46.338-0.235L-45.529-0.235L-45.529 0.132M-42.857-3.181L-45.099-3.181L-45.099-3.477L-42.529-7.134Q-42.490-7.188-42.427-7.188L-42.283-7.188Q-42.232-7.188-42.201-7.157Q-42.170-7.126-42.170-7.075L-42.170-3.477L-41.338-3.477L-41.338-3.181L-42.170-3.181L-42.170-2.427Q-42.170-2.165-41.345-2.165L-41.345-1.868L-43.681-1.868L-43.681-2.165Q-42.857-2.165-42.857-2.427L-42.857-3.181M-42.802-6.282L-44.771-3.477L-42.802-3.477L-42.802-6.282M-39.732 0.132L-40.908 0.132L-40.908-0.235L-40.099-0.235L-40.099-7.501L-40.908-7.501L-40.908-7.868L-39.732-7.868",[1336],[1320,7482,7483],{"transform":7470},[1325,7484],{"d":7485,"fill":2827,"stroke":2827,"className":7486,"style":1391},"M-30.403-2.845L-35.716-2.845Q-35.794-2.852-35.843-2.901Q-35.891-2.950-35.891-3.028Q-35.891-3.098-35.844-3.149Q-35.798-3.200-35.716-3.212L-30.403-3.212Q-30.329-3.200-30.282-3.149Q-30.235-3.098-30.235-3.028Q-30.235-2.950-30.284-2.901Q-30.333-2.852-30.403-2.845M-30.403-4.532L-35.716-4.532Q-35.794-4.540-35.843-4.589Q-35.891-4.638-35.891-4.716Q-35.891-4.786-35.844-4.837Q-35.798-4.888-35.716-4.899L-30.403-4.899Q-30.329-4.888-30.282-4.837Q-30.235-4.786-30.235-4.716Q-30.235-4.638-30.284-4.589Q-30.333-4.540-30.403-4.532",[1336],[1320,7488,7489],{"transform":7470},[1325,7490],{"d":7491,"fill":2827,"stroke":2827,"className":7492,"style":1391},"M-25.223-1.868L-27.078-1.868L-27.078-2.165Q-26.805-2.165-26.637-2.212Q-26.469-2.259-26.469-2.427L-26.469-4.563Q-26.469-4.778-26.532-4.874Q-26.594-4.970-26.713-4.991Q-26.832-5.013-27.078-5.013L-27.078-5.309L-25.887-5.395L-25.887-4.661Q-25.774-4.876-25.580-5.044Q-25.387-5.212-25.149-5.304Q-24.911-5.395-24.657-5.395Q-23.696-5.395-23.520-4.684Q-23.336-5.013-23.008-5.204Q-22.680-5.395-22.301-5.395Q-21.125-5.395-21.125-4.317L-21.125-2.427Q-21.125-2.259-20.957-2.212Q-20.789-2.165-20.520-2.165L-20.520-1.868L-22.375-1.868L-22.375-2.165Q-22.102-2.165-21.934-2.210Q-21.766-2.255-21.766-2.427L-21.766-4.302Q-21.766-4.688-21.891-4.915Q-22.016-5.141-22.368-5.141Q-22.672-5.141-22.928-4.979Q-23.184-4.817-23.332-4.548Q-23.481-4.278-23.481-3.981L-23.481-2.427Q-23.481-2.259-23.311-2.212Q-23.141-2.165-22.871-2.165L-22.871-1.868L-24.727-1.868L-24.727-2.165Q-24.453-2.165-24.286-2.212Q-24.118-2.259-24.118-2.427L-24.118-4.302Q-24.118-4.688-24.243-4.915Q-24.368-5.141-24.719-5.141Q-25.024-5.141-25.280-4.979Q-25.536-4.817-25.684-4.548Q-25.832-4.278-25.832-3.981L-25.832-2.427Q-25.832-2.259-25.662-2.212Q-25.493-2.165-25.223-2.165L-25.223-1.868M-18.215-1.868L-19.993-1.868L-19.993-2.165Q-19.719-2.165-19.551-2.212Q-19.383-2.259-19.383-2.427L-19.383-4.563Q-19.383-4.778-19.440-4.874Q-19.496-4.970-19.610-4.991Q-19.723-5.013-19.969-5.013L-19.969-5.309L-18.770-5.395L-18.770-2.427Q-18.770-2.259-18.623-2.212Q-18.477-2.165-18.215-2.165L-18.215-1.868M-19.657-6.790Q-19.657-6.981-19.522-7.112Q-19.387-7.243-19.192-7.243Q-19.071-7.243-18.967-7.181Q-18.864-7.118-18.801-7.014Q-18.739-6.911-18.739-6.790Q-18.739-6.595-18.870-6.460Q-19-6.325-19.192-6.325Q-19.391-6.325-19.524-6.458Q-19.657-6.591-19.657-6.790M-15.786-1.868L-17.641-1.868L-17.641-2.165Q-17.368-2.165-17.200-2.212Q-17.032-2.259-17.032-2.427L-17.032-4.563Q-17.032-4.778-17.094-4.874Q-17.157-4.970-17.276-4.991Q-17.395-5.013-17.641-5.013L-17.641-5.309L-16.450-5.395L-16.450-4.661Q-16.336-4.876-16.143-5.044Q-15.950-5.212-15.711-5.304Q-15.473-5.395-15.219-5.395Q-14.051-5.395-14.051-4.317L-14.051-2.427Q-14.051-2.259-13.881-2.212Q-13.711-2.165-13.442-2.165L-13.442-1.868L-15.297-1.868L-15.297-2.165Q-15.024-2.165-14.856-2.212Q-14.688-2.259-14.688-2.427L-14.688-4.302Q-14.688-4.684-14.809-4.913Q-14.930-5.141-15.282-5.141Q-15.594-5.141-15.848-4.979Q-16.102-4.817-16.248-4.548Q-16.395-4.278-16.395-3.981L-16.395-2.427Q-16.395-2.259-16.225-2.212Q-16.055-2.165-15.786-2.165",[1336],[1320,7494,7495],{"transform":7470},[1325,7496],{"d":7497,"fill":2827,"stroke":2827,"className":7498,"style":1391},"M-10.607 0.124Q-11.220-0.333-11.622-0.968Q-12.025-1.602-12.220-2.348Q-12.415-3.095-12.415-3.868Q-12.415-4.641-12.220-5.388Q-12.025-6.134-11.622-6.768Q-11.220-7.403-10.607-7.860Q-10.595-7.864-10.587-7.866Q-10.579-7.868-10.568-7.868L-10.490-7.868Q-10.451-7.868-10.425-7.841Q-10.400-7.813-10.400-7.770Q-10.400-7.720-10.431-7.700Q-10.939-7.247-11.261-6.624Q-11.583-6.001-11.724-5.306Q-11.865-4.610-11.865-3.868Q-11.865-3.134-11.726-2.434Q-11.587-1.735-11.263-1.110Q-10.939-0.485-10.431-0.036Q-10.400-0.016-10.400 0.034Q-10.400 0.077-10.425 0.105Q-10.451 0.132-10.490 0.132L-10.568 0.132Q-10.576 0.128-10.585 0.126Q-10.595 0.124-10.607 0.124M-6.333-1.868L-9.494-1.868L-9.494-2.075Q-9.494-2.102-9.470-2.134L-8.119-3.532Q-7.740-3.919-7.492-4.208Q-7.244-4.497-7.070-4.854Q-6.896-5.212-6.896-5.602Q-6.896-5.950-7.029-6.243Q-7.162-6.536-7.415-6.714Q-7.669-6.891-8.025-6.891Q-8.384-6.891-8.675-6.696Q-8.966-6.501-9.111-6.173L-9.056-6.173Q-8.872-6.173-8.747-6.052Q-8.622-5.931-8.622-5.739Q-8.622-5.559-8.747-5.431Q-8.872-5.302-9.056-5.302Q-9.236-5.302-9.365-5.431Q-9.494-5.559-9.494-5.739Q-9.494-6.141-9.273-6.477Q-9.052-6.813-8.687-7.001Q-8.322-7.188-7.919-7.188Q-7.439-7.188-7.023-7.001Q-6.607-6.813-6.355-6.452Q-6.103-6.091-6.103-5.602Q-6.103-5.243-6.257-4.940Q-6.412-4.638-6.663-4.378Q-6.915-4.118-7.265-3.833Q-7.615-3.548-7.783-3.395L-8.712-2.556L-7.997-2.556Q-6.622-2.556-6.583-2.595Q-6.513-2.673-6.470-2.858Q-6.427-3.044-6.384-3.333L-6.103-3.333",[1336],[1320,7500,7501],{"transform":7470},[1325,7502],{"d":7503,"fill":2827,"stroke":2827,"className":7504,"style":1391},"M-4.845-0.462Q-4.845-0.485-4.814-0.532Q-4.521-0.794-4.355-1.161Q-4.189-1.528-4.189-1.915L-4.189-1.973Q-4.317-1.868-4.485-1.868Q-4.677-1.868-4.814-2.001Q-4.950-2.134-4.950-2.333Q-4.950-2.524-4.814-2.657Q-4.677-2.790-4.485-2.790Q-4.185-2.790-4.060-2.520Q-3.935-2.251-3.935-1.915Q-3.935-1.466-4.116-1.052Q-4.298-0.638-4.638-0.341Q-4.661-0.317-4.700-0.317Q-4.747-0.317-4.796-0.362Q-4.845-0.407-4.845-0.462",[1336],[1320,7506,7507],{"transform":7470},[1325,7508],{"d":7509,"fill":2827,"stroke":2827,"className":7510,"style":1391},"M0.022-1.958Q0.022-2.075 0.100-2.157L4.647-7.036L3.436-7.036Q2.983-7.036 2.649-6.966Q2.315-6.895 2.073-6.733Q1.831-6.571 1.645-6.278Q1.460-5.985 1.327-5.556Q1.307-5.501 1.229-5.485L1.151-5.485Q1.053-5.513 1.053-5.595Q1.053-5.602 1.061-5.645L1.557-7.266Q1.577-7.317 1.655-7.333L5.495-7.333Q5.581-7.333 5.581-7.243Q5.581-7.130 5.510-7.059L0.967-2.188L2.229-2.188Q2.792-2.188 3.157-2.278Q3.522-2.368 3.766-2.573Q4.010-2.778 4.184-3.112Q4.358-3.446 4.534-3.989Q4.542-4.032 4.624-4.052L4.702-4.052Q4.807-4.020 4.807-3.938Q4.807-3.931 4.799-3.899L4.167-1.938Q4.147-1.884 4.069-1.868L0.112-1.868Q0.022-1.868 0.022-1.958",[1336],[1320,7512,7513],{"transform":7470},[1325,7514],{"d":7515,"fill":2827,"stroke":2827,"className":7516,"style":1391},"M8.019 0.132L6.843 0.132L6.843-7.868L8.019-7.868L8.019-7.501L7.210-7.501L7.210-0.235L8.019-0.235L8.019 0.132M11.796-1.868L8.636-1.868L8.636-2.075Q8.636-2.102 8.660-2.134L10.011-3.532Q10.390-3.919 10.638-4.208Q10.886-4.497 11.060-4.854Q11.234-5.212 11.234-5.602Q11.234-5.950 11.101-6.243Q10.968-6.536 10.714-6.714Q10.460-6.891 10.105-6.891Q9.746-6.891 9.455-6.696Q9.163-6.501 9.019-6.173L9.074-6.173Q9.257-6.173 9.382-6.052Q9.507-5.931 9.507-5.739Q9.507-5.559 9.382-5.431Q9.257-5.302 9.074-5.302Q8.894-5.302 8.765-5.431Q8.636-5.559 8.636-5.739Q8.636-6.141 8.857-6.477Q9.078-6.813 9.443-7.001Q9.808-7.188 10.210-7.188Q10.691-7.188 11.107-7.001Q11.523-6.813 11.775-6.452Q12.027-6.091 12.027-5.602Q12.027-5.243 11.872-4.940Q11.718-4.638 11.466-4.378Q11.214-4.118 10.865-3.833Q10.515-3.548 10.347-3.395L9.417-2.556L10.132-2.556Q11.507-2.556 11.546-2.595Q11.617-2.673 11.660-2.858Q11.703-3.044 11.746-3.333L12.027-3.333L11.796-1.868M13.816 0.132L12.640 0.132L12.640-0.235L13.449-0.235L13.449-7.501L12.640-7.501L12.640-7.868L13.816-7.868",[1336],[1320,7518,7519],{"transform":7470},[1325,7520],{"d":7521,"fill":2827,"stroke":2827,"className":7522,"style":1391},"M20.784-2.845L15.471-2.845Q15.393-2.852 15.344-2.901Q15.296-2.950 15.296-3.028Q15.296-3.098 15.343-3.149Q15.389-3.200 15.471-3.212L20.784-3.212Q20.858-3.200 20.905-3.149Q20.952-3.098 20.952-3.028Q20.952-2.950 20.903-2.901Q20.854-2.852 20.784-2.845M20.784-4.532L15.471-4.532Q15.393-4.540 15.344-4.589Q15.296-4.638 15.296-4.716Q15.296-4.786 15.343-4.837Q15.389-4.888 15.471-4.899L20.784-4.899Q20.858-4.888 20.905-4.837Q20.952-4.786 20.952-4.716Q20.952-4.638 20.903-4.589Q20.854-4.540 20.784-4.532",[1336],[1320,7524,7525],{"transform":7470},[1325,7526],{"d":7527,"fill":2827,"stroke":2827,"className":7528,"style":1391},"M23.914-3.181L21.672-3.181L21.672-3.477L24.243-7.134Q24.282-7.188 24.344-7.188L24.489-7.188Q24.539-7.188 24.571-7.157Q24.602-7.126 24.602-7.075L24.602-3.477L25.434-3.477L25.434-3.181L24.602-3.181L24.602-2.427Q24.602-2.165 25.426-2.165L25.426-1.868L23.090-1.868L23.090-2.165Q23.914-2.165 23.914-2.427L23.914-3.181M23.969-6.282L22-3.477L23.969-3.477L23.969-6.282M26.321 0.132L26.239 0.132Q26.204 0.132 26.178 0.103Q26.153 0.073 26.153 0.034Q26.153-0.016 26.184-0.036Q26.571-0.372 26.854-0.821Q27.137-1.270 27.303-1.770Q27.469-2.270 27.543-2.788Q27.618-3.306 27.618-3.868Q27.618-4.438 27.543-4.954Q27.469-5.470 27.303-5.966Q27.137-6.462 26.858-6.909Q26.579-7.356 26.184-7.700Q26.153-7.720 26.153-7.770Q26.153-7.809 26.178-7.839Q26.204-7.868 26.239-7.868L26.321-7.868Q26.332-7.868 26.342-7.866Q26.352-7.864 26.360-7.860Q26.973-7.403 27.375-6.768Q27.778-6.134 27.973-5.388Q28.168-4.641 28.168-3.868Q28.168-3.095 27.973-2.348Q27.778-1.602 27.375-0.968Q26.973-0.333 26.360 0.124Q26.348 0.124 26.340 0.126Q26.332 0.128 26.321 0.132",[1336],[1320,7530,7531],{"transform":7470},[1325,7532],{"d":7533,"fill":2827,"stroke":2827,"className":7534,"style":1391},"M37.312-2.845L31.999-2.845Q31.921-2.852 31.872-2.901Q31.824-2.950 31.824-3.028Q31.824-3.098 31.871-3.149Q31.917-3.200 31.999-3.212L37.312-3.212Q37.386-3.200 37.433-3.149Q37.480-3.098 37.480-3.028Q37.480-2.950 37.431-2.901Q37.382-2.852 37.312-2.845M37.312-4.532L31.999-4.532Q31.921-4.540 31.872-4.589Q31.824-4.638 31.824-4.716Q31.824-4.786 31.871-4.837Q31.917-4.888 31.999-4.899L37.312-4.899Q37.386-4.888 37.433-4.837Q37.480-4.786 37.480-4.716Q37.480-4.638 37.431-4.589Q37.382-4.540 37.312-4.532",[1336],[1320,7536,7537],{"transform":7470},[1325,7538],{"d":7539,"fill":2827,"stroke":2827,"className":7540,"style":1391},"M43.910-1.868L40.750-1.868L40.750-2.075Q40.750-2.102 40.773-2.134L42.125-3.532Q42.504-3.919 42.752-4.208Q43-4.497 43.174-4.854Q43.347-5.212 43.347-5.602Q43.347-5.950 43.215-6.243Q43.082-6.536 42.828-6.714Q42.574-6.891 42.219-6.891Q41.859-6.891 41.568-6.696Q41.277-6.501 41.133-6.173L41.187-6.173Q41.371-6.173 41.496-6.052Q41.621-5.931 41.621-5.739Q41.621-5.559 41.496-5.431Q41.371-5.302 41.187-5.302Q41.008-5.302 40.879-5.431Q40.750-5.559 40.750-5.739Q40.750-6.141 40.970-6.477Q41.191-6.813 41.556-7.001Q41.922-7.188 42.324-7.188Q42.804-7.188 43.220-7.001Q43.636-6.813 43.888-6.452Q44.140-6.091 44.140-5.602Q44.140-5.243 43.986-4.940Q43.832-4.638 43.580-4.378Q43.328-4.118 42.978-3.833Q42.629-3.548 42.461-3.395L41.531-2.556L42.246-2.556Q43.621-2.556 43.660-2.595Q43.730-2.673 43.773-2.858Q43.816-3.044 43.859-3.333L44.140-3.333",[1336],[1610,7542,7544,7545,7582,7583,7607,7608,7663,7664,7706,7707,7845,7846,7861],{"className":7543},[1613],"Z-box copy on ",[395,7546,7548],{"className":7547},[398],[395,7549,7551,7569],{"className":7550,"ariaHidden":403},[402],[395,7552,7554,7557,7560,7563,7566],{"className":7553},[407],[395,7555],{"className":7556,"style":550},[411],[395,7558,6417],{"className":7559,"style":6416},[416,417],[395,7561],{"className":7562,"style":702},[432],[395,7564,707],{"className":7565},[706],[395,7567],{"className":7568,"style":702},[432],[395,7570,7572,7575],{"className":7571},[407],[395,7573],{"className":7574,"style":1128},[411],[395,7576,7578],{"className":7577},[416,1091],[395,7579,7581],{"className":7580},[416,1095],"ababab"," at ",[395,7584,7586],{"className":7585},[398],[395,7587,7589],{"className":7588,"ariaHidden":403},[402],[395,7590,7592,7595,7598,7604],{"className":7591},[407],[395,7593],{"className":7594,"style":4226},[411],[395,7596,4230],{"className":7597},[416,417],[395,7599,7601],{"className":7600},[416],[395,7602,707],{"className":7603},[706],[395,7605,4548],{"className":7606},[416],". The box ",[395,7609,7611],{"className":7610},[398],[395,7612,7614],{"className":7613,"ariaHidden":403},[402],[395,7615,7617,7620,7623,7626,7629,7632,7635,7638,7644,7647,7650,7653,7656,7660],{"className":7616},[407],[395,7618],{"className":7619,"style":412},[411],[395,7621,424],{"className":7622},[423],[395,7624,6708],{"className":7625,"style":6707},[416,417],[395,7627,4465],{"className":7628},[441],[395,7630],{"className":7631,"style":433},[432],[395,7633,6718],{"className":7634,"style":1044},[416,417],[395,7636,1016],{"className":7637},[475],[395,7639,7641],{"className":7640},[416],[395,7642,707],{"className":7643},[706],[395,7645,424],{"className":7646},[423],[395,7648,3779],{"className":7649},[416],[395,7651,4465],{"className":7652},[441],[395,7654],{"className":7655,"style":433},[432],[395,7657,7659],{"className":7658},[416],"6",[395,7661,1016],{"className":7662},[475]," already matches a prefix, so the mirror ",[395,7665,7667],{"className":7666},[398],[395,7668,7670,7688],{"className":7669,"ariaHidden":403},[402],[395,7671,7673,7676,7679,7682,7685],{"className":7672},[407],[395,7674],{"className":7675,"style":6964},[411],[395,7677,4230],{"className":7678},[416,417],[395,7680],{"className":7681,"style":453},[432],[395,7683,458],{"className":7684},[457],[395,7686],{"className":7687,"style":453},[432],[395,7689,7691,7694,7697,7703],{"className":7690},[407],[395,7692],{"className":7693,"style":1824},[411],[395,7695,6708],{"className":7696,"style":6707},[416,417],[395,7698,7700],{"className":7699},[416],[395,7701,707],{"className":7702},[706],[395,7704,3779],{"className":7705},[416]," gives a free bound ",[395,7708,7710],{"className":7709},[398],[395,7711,7713,7740,7797,7836],{"className":7712,"ariaHidden":403},[402],[395,7714,7716,7719,7722,7725,7728,7731,7734,7737],{"className":7715},[407],[395,7717],{"className":7718,"style":412},[411],[395,7720,6450],{"className":7721,"style":6449},[416,417],[395,7723,424],{"className":7724},[423],[395,7726,4548],{"className":7727},[416],[395,7729,476],{"className":7730},[475],[395,7732],{"className":7733,"style":702},[432],[395,7735,7017],{"className":7736},[706],[395,7738],{"className":7739,"style":702},[432],[395,7741,7743,7746,7752,7755,7758,7764,7767,7770,7773,7776,7779,7782,7785,7788,7791,7794],{"className":7742},[407],[395,7744],{"className":7745,"style":412},[411],[395,7747,7749],{"className":7748},[7030],[395,7750,7034],{"className":7751},[416,2507],[395,7753,1049],{"className":7754},[423],[395,7756,6718],{"className":7757,"style":1044},[416,417],[395,7759,7761],{"className":7760},[416],[395,7762,458],{"className":7763},[416],[395,7765,4230],{"className":7766},[416,417],[395,7768,4465],{"className":7769},[441],[395,7771],{"className":7772,"style":433},[432],[395,7774],{"className":7775,"style":433},[432],[395,7777,6450],{"className":7778,"style":6449},[416,417],[395,7780,424],{"className":7781},[423],[395,7783,3779],{"className":7784},[416],[395,7786,2047],{"className":7787},[475],[395,7789],{"className":7790,"style":702},[432],[395,7792,707],{"className":7793},[706],[395,7795],{"className":7796,"style":702},[432],[395,7798,7800,7803,7809,7812,7815,7818,7821,7824,7827,7830,7833],{"className":7799},[407],[395,7801],{"className":7802,"style":412},[411],[395,7804,7806],{"className":7805},[7030],[395,7807,7034],{"className":7808},[416,2507],[395,7810,1049],{"className":7811},[423],[395,7813,3779],{"className":7814},[416],[395,7816,4465],{"className":7817},[441],[395,7819],{"className":7820,"style":433},[432],[395,7822,4548],{"className":7823},[416],[395,7825,1016],{"className":7826},[475],[395,7828],{"className":7829,"style":702},[432],[395,7831,707],{"className":7832},[706],[395,7834],{"className":7835,"style":702},[432],[395,7837,7839,7842],{"className":7838},[407],[395,7840],{"className":7841,"style":769},[411],[395,7843,3779],{"className":7844},[416],"; here ",[395,7847,7849],{"className":7848},[398],[395,7850,7852],{"className":7851,"ariaHidden":403},[402],[395,7853,7855,7858],{"className":7854},[407],[395,7856],{"className":7857,"style":568},[411],[395,7859,6718],{"className":7860,"style":1044},[416,417]," caps the copy",[839,7863,7865],{"className":841,"code":7864,"language":843,"meta":376,"style":376},"caption: $\\textsc{Z-Function}(S)$ — longest prefix-match at each position in $O(\\ell)$\n$Z[0] \\gets \\ell;\\ l \\gets 0;\\ r \\gets 0$\nfor $i \\gets 1$ to $\\ell - 1$ do\n  if $i \u003C r$ then\n    $Z[i] \\gets \\min(r - i,\\ Z[i - l])$   \u002F\u002F copy from mirror\n  while $i + Z[i] \u003C \\ell$ and $S[Z[i]] = S[i + Z[i]]$ do\n    $Z[i] \\gets Z[i] + 1$                 \u002F\u002F extend past the box\n  if $i + Z[i] > r$ then\n    $l \\gets i;\\ r \\gets i + Z[i]$        \u002F\u002F advance Z-box\nreturn $Z$\n",[845,7866,7867,7872,7877,7882,7887,7892,7897,7902,7907,7912],{"__ignoreMap":376},[395,7868,7869],{"class":849,"line":6},[395,7870,7871],{},"caption: $\\textsc{Z-Function}(S)$ — longest prefix-match at each position in $O(\\ell)$\n",[395,7873,7874],{"class":849,"line":18},[395,7875,7876],{},"$Z[0] \\gets \\ell;\\ l \\gets 0;\\ r \\gets 0$\n",[395,7878,7879],{"class":849,"line":24},[395,7880,7881],{},"for $i \\gets 1$ to $\\ell - 1$ do\n",[395,7883,7884],{"class":849,"line":73},[395,7885,7886],{},"  if $i \u003C r$ then\n",[395,7888,7889],{"class":849,"line":102},[395,7890,7891],{},"    $Z[i] \\gets \\min(r - i,\\ Z[i - l])$   \u002F\u002F copy from mirror\n",[395,7893,7894],{"class":849,"line":108},[395,7895,7896],{},"  while $i + Z[i] \u003C \\ell$ and $S[Z[i]] = S[i + Z[i]]$ do\n",[395,7898,7899],{"class":849,"line":116},[395,7900,7901],{},"    $Z[i] \\gets Z[i] + 1$                 \u002F\u002F extend past the box\n",[395,7903,7904],{"class":849,"line":196},[395,7905,7906],{},"  if $i + Z[i] > r$ then\n",[395,7908,7909],{"class":849,"line":202},[395,7910,7911],{},"    $l \\gets i;\\ r \\gets i + Z[i]$        \u002F\u002F advance Z-box\n",[395,7913,7914],{"class":849,"line":283},[395,7915,7916],{},"return $Z$\n",[381,7918,7919,7920,7935,7936,7938,7939,7954,7955,7970,7971,7986,7987,2527],{},"Each character of ",[395,7921,7923],{"className":7922},[398],[395,7924,7926],{"className":7925,"ariaHidden":403},[402],[395,7927,7929,7932],{"className":7928},[407],[395,7930],{"className":7931,"style":550},[411],[395,7933,6417],{"className":7934,"style":6416},[416,417]," is examined a constant number of times because the inner\n",[845,7937,5630],{}," only ever advances ",[395,7940,7942],{"className":7941},[398],[395,7943,7945],{"className":7944,"ariaHidden":403},[402],[395,7946,7948,7951],{"className":7947},[407],[395,7949],{"className":7950,"style":568},[411],[395,7952,6718],{"className":7953,"style":1044},[416,417],", which moves monotonically from ",[395,7956,7958],{"className":7957},[398],[395,7959,7961],{"className":7960,"ariaHidden":403},[402],[395,7962,7964,7967],{"className":7963},[407],[395,7965],{"className":7966,"style":769},[411],[395,7968,428],{"className":7969},[416]," to ",[395,7972,7974],{"className":7973},[398],[395,7975,7977],{"className":7976,"ariaHidden":403},[402],[395,7978,7980,7983],{"className":7979},[407],[395,7981],{"className":7982,"style":1824},[411],[395,7984,6433],{"className":7985},[416],". This\nis the same amortised argument as KMP, giving ",[395,7988,7990],{"className":7989},[398],[395,7991,7993],{"className":7992,"ariaHidden":403},[402],[395,7994,7996,7999,8002,8005,8008],{"className":7995},[407],[395,7997],{"className":7998,"style":412},[411],[395,8000,1045],{"className":8001,"style":1044},[416,417],[395,8003,1049],{"className":8004},[423],[395,8006,6433],{"className":8007},[416],[395,8009,1016],{"className":8010},[475],[381,8012,8013,8014,8029,8030,8045,8046,8093,8094,8096,8097,8112,8113,8128,8129,8172,8173,8188,8189,8204,8205,589,8220,8235,8236,8293,8294,8336,8337,8388,8389,2527],{},"To match ",[395,8015,8017],{"className":8016},[398],[395,8018,8020],{"className":8019,"ariaHidden":403},[402],[395,8021,8023,8026],{"className":8022},[407],[395,8024],{"className":8025,"style":550},[411],[395,8027,493],{"className":8028,"style":418},[416,417]," in ",[395,8031,8033],{"className":8032},[398],[395,8034,8036],{"className":8035,"ariaHidden":403},[402],[395,8037,8039,8042],{"className":8038},[407],[395,8040],{"className":8041,"style":550},[411],[395,8043,419],{"className":8044,"style":418},[416,417],", run the Z-function on the concatenation ",[395,8047,8049],{"className":8048},[398],[395,8050,8052,8070],{"className":8051,"ariaHidden":403},[402],[395,8053,8055,8058,8061,8064,8067],{"className":8054},[407],[395,8056],{"className":8057,"style":550},[411],[395,8059,6417],{"className":8060,"style":6416},[416,417],[395,8062],{"className":8063,"style":702},[432],[395,8065,707],{"className":8066},[706],[395,8068],{"className":8069,"style":702},[432],[395,8071,8073,8077,8080,8083,8087,8090],{"className":8072},[407],[395,8074],{"className":8075,"style":8076},[411],"height:0.8889em;vertical-align:-0.1944em;",[395,8078,493],{"className":8079,"style":418},[416,417],[395,8081],{"className":8082,"style":433},[432],[395,8084,8086],{"className":8085},[416],"#",[395,8088],{"className":8089,"style":433},[432],[395,8091,419],{"className":8092,"style":418},[416,417],",\nwhere ",[845,8095,8086],{}," is a sentinel in neither ",[395,8098,8100],{"className":8099},[398],[395,8101,8103],{"className":8102,"ariaHidden":403},[402],[395,8104,8106,8109],{"className":8105},[407],[395,8107],{"className":8108,"style":550},[411],[395,8110,493],{"className":8111,"style":418},[416,417]," nor ",[395,8114,8116],{"className":8115},[398],[395,8117,8119],{"className":8118,"ariaHidden":403},[402],[395,8120,8122,8125],{"className":8121},[407],[395,8123],{"className":8124,"style":550},[411],[395,8126,419],{"className":8127,"style":418},[416,417],". Wherever ",[395,8130,8132],{"className":8131},[398],[395,8133,8135,8163],{"className":8134,"ariaHidden":403},[402],[395,8136,8138,8141,8144,8147,8150,8153,8156,8160],{"className":8137},[407],[395,8139],{"className":8140,"style":412},[411],[395,8142,6450],{"className":8143,"style":6449},[416,417],[395,8145,424],{"className":8146},[423],[395,8148,4230],{"className":8149},[416,417],[395,8151,476],{"className":8152},[475],[395,8154],{"className":8155,"style":702},[432],[395,8157,8159],{"className":8158},[706],"≥",[395,8161],{"className":8162,"style":702},[432],[395,8164,8166,8169],{"className":8165},[407],[395,8167],{"className":8168,"style":568},[411],[395,8170,515],{"className":8171},[416,417]," inside the\n",[395,8174,8176],{"className":8175},[398],[395,8177,8179],{"className":8178,"ariaHidden":403},[402],[395,8180,8182,8185],{"className":8181},[407],[395,8183],{"className":8184,"style":550},[411],[395,8186,419],{"className":8187,"style":418},[416,417]," portion, the prefix ",[395,8190,8192],{"className":8191},[398],[395,8193,8195],{"className":8194,"ariaHidden":403},[402],[395,8196,8198,8201],{"className":8197},[407],[395,8199],{"className":8200,"style":550},[411],[395,8202,493],{"className":8203,"style":418},[416,417]," matches in full at that spot, so ",[395,8206,8208],{"className":8207},[398],[395,8209,8211],{"className":8210,"ariaHidden":403},[402],[395,8212,8214,8217],{"className":8213},[407],[395,8215],{"className":8216,"style":550},[411],[395,8218,493],{"className":8219,"style":418},[416,417],[395,8221,8223],{"className":8222},[398],[395,8224,8226],{"className":8225,"ariaHidden":403},[402],[395,8227,8229,8232],{"className":8228},[407],[395,8230],{"className":8231,"style":550},[411],[395,8233,419],{"className":8234,"style":418},[416,417]," at\nshift ",[395,8237,8239],{"className":8238},[398],[395,8240,8242,8260,8281],{"className":8241,"ariaHidden":403},[402],[395,8243,8245,8248,8251,8254,8257],{"className":8244},[407],[395,8246],{"className":8247,"style":6964},[411],[395,8249,4230],{"className":8250},[416,417],[395,8252],{"className":8253,"style":453},[432],[395,8255,458],{"className":8256},[457],[395,8258],{"className":8259,"style":453},[432],[395,8261,8263,8266,8269,8272,8275,8278],{"className":8262},[407],[395,8264],{"className":8265,"style":412},[411],[395,8267,1049],{"className":8268},[423],[395,8270,515],{"className":8271},[416,417],[395,8273],{"className":8274,"style":453},[432],[395,8276,664],{"className":8277},[457],[395,8279],{"className":8280,"style":453},[432],[395,8282,8284,8287,8290],{"className":8283},[407],[395,8285],{"className":8286,"style":412},[411],[395,8288,471],{"className":8289},[416],[395,8291,1016],{"className":8292},[475],". The sentinel prevents a match from straddling the boundary\nand caps ",[395,8295,8297],{"className":8296},[398],[395,8298,8300,8327],{"className":8299,"ariaHidden":403},[402],[395,8301,8303,8306,8309,8312,8315,8318,8321,8324],{"className":8302},[407],[395,8304],{"className":8305,"style":412},[411],[395,8307,6450],{"className":8308,"style":6449},[416,417],[395,8310,424],{"className":8311},[423],[395,8313,4230],{"className":8314},[416,417],[395,8316,476],{"className":8317},[475],[395,8319],{"className":8320,"style":702},[432],[395,8322,5761],{"className":8323},[706],[395,8325],{"className":8326,"style":702},[432],[395,8328,8330,8333],{"className":8329},[407],[395,8331],{"className":8332,"style":568},[411],[395,8334,515],{"className":8335},[416,417],". Total length is ",[395,8338,8340],{"className":8339},[398],[395,8341,8343,8361,8379],{"className":8342,"ariaHidden":403},[402],[395,8344,8346,8349,8352,8355,8358],{"className":8345},[407],[395,8347],{"className":8348,"style":674},[411],[395,8350,449],{"className":8351},[416,417],[395,8353],{"className":8354,"style":453},[432],[395,8356,664],{"className":8357},[457],[395,8359],{"className":8360,"style":453},[432],[395,8362,8364,8367,8370,8373,8376],{"className":8363},[407],[395,8365],{"className":8366,"style":674},[411],[395,8368,515],{"className":8369},[416,417],[395,8371],{"className":8372,"style":453},[432],[395,8374,664],{"className":8375},[457],[395,8377],{"className":8378,"style":453},[432],[395,8380,8382,8385],{"className":8381},[407],[395,8383],{"className":8384,"style":769},[411],[395,8386,471],{"className":8387},[416],", so matching is ",[395,8390,8392],{"className":8391},[398],[395,8393,8395,8419],{"className":8394,"ariaHidden":403},[402],[395,8396,8398,8401,8404,8407,8410,8413,8416],{"className":8397},[407],[395,8399],{"className":8400,"style":412},[411],[395,8402,1045],{"className":8403,"style":1044},[416,417],[395,8405,1049],{"className":8406},[423],[395,8408,449],{"className":8409},[416,417],[395,8411],{"className":8412,"style":453},[432],[395,8414,664],{"className":8415},[457],[395,8417],{"className":8418,"style":453},[432],[395,8420,8422,8425,8428],{"className":8421},[407],[395,8423],{"className":8424,"style":412},[411],[395,8426,515],{"className":8427},[416,417],[395,8429,1016],{"className":8430},[475],[1232,8432,8433],{"type":1234},[381,8434,8435,8437,8438,8453,8454,8469,8470,8473,8474,8489,8490,8493,8494],{},[390,8436,1239],{}," KMP's ",[395,8439,8441],{"className":8440},[398],[395,8442,8444],{"className":8443,"ariaHidden":403},[402],[395,8445,8447,8450],{"className":8446},[407],[395,8448],{"className":8449,"style":568},[411],[395,8451,4247],{"className":8452,"style":1865},[416,417]," and the Z-function carry the same information from two\ndirections (",[395,8455,8457],{"className":8456},[398],[395,8458,8460],{"className":8459,"ariaHidden":403},[402],[395,8461,8463,8466],{"className":8462},[407],[395,8464],{"className":8465,"style":568},[411],[395,8467,4247],{"className":8468,"style":1865},[416,417]," measures borders ",[385,8471,8472],{},"ending"," at each position, ",[395,8475,8477],{"className":8476},[398],[395,8478,8480],{"className":8479,"ariaHidden":403},[402],[395,8481,8483,8486],{"className":8482},[407],[395,8484],{"className":8485,"style":550},[411],[395,8487,6450],{"className":8488,"style":6449},[416,417]," measures\nprefix-matches ",[385,8491,8492],{},"starting"," at each position) and either can be converted to the\nother in linear time. Reach for whichever you find easier to write correctly;\nZ-arrays tend to win on problems about prefixes, periods, and palindromes.",[1213,8495,8496],{},[1216,8497,4548],{"href":8498,"ariaDescribedBy":8499,"dataFootnoteRef":376,"id":8500},"#user-content-fn-erickson-z",[1220],"user-content-fnref-erickson-z",[831,8502,8504],{"id":8503},"takeaways","Takeaways",[6895,8506,8507,8657,8996,9142,9292],{},[6898,8508,8509,8512,8513,8528,8529,8544,8545,8528,8560,8575,8576,8579,8580,8631,8632,8656],{},[390,8510,8511],{},"String matching"," seeks all shifts where pattern ",[395,8514,8516],{"className":8515},[398],[395,8517,8519],{"className":8518,"ariaHidden":403},[402],[395,8520,8522,8525],{"className":8521},[407],[395,8523],{"className":8524,"style":550},[411],[395,8526,493],{"className":8527,"style":418},[416,417]," (",[395,8530,8532],{"className":8531},[398],[395,8533,8535],{"className":8534,"ariaHidden":403},[402],[395,8536,8538,8541],{"className":8537},[407],[395,8539],{"className":8540,"style":568},[411],[395,8542,515],{"className":8543},[416,417]," chars) occurs in\ntext ",[395,8546,8548],{"className":8547},[398],[395,8549,8551],{"className":8550,"ariaHidden":403},[402],[395,8552,8554,8557],{"className":8553},[407],[395,8555],{"className":8556,"style":550},[411],[395,8558,419],{"className":8559,"style":418},[416,417],[395,8561,8563],{"className":8562},[398],[395,8564,8566],{"className":8565,"ariaHidden":403},[402],[395,8567,8569,8572],{"className":8568},[407],[395,8570],{"className":8571,"style":568},[411],[395,8573,449],{"className":8574},[416,417]," chars). The ",[390,8577,8578],{},"naive scan"," tries all ",[395,8581,8583],{"className":8582},[398],[395,8584,8586,8604,8622],{"className":8585,"ariaHidden":403},[402],[395,8587,8589,8592,8595,8598,8601],{"className":8588},[407],[395,8590],{"className":8591,"style":674},[411],[395,8593,449],{"className":8594},[416,417],[395,8596],{"className":8597,"style":453},[432],[395,8599,458],{"className":8600},[457],[395,8602],{"className":8603,"style":453},[432],[395,8605,8607,8610,8613,8616,8619],{"className":8606},[407],[395,8608],{"className":8609,"style":674},[411],[395,8611,515],{"className":8612},[416,417],[395,8614],{"className":8615,"style":453},[432],[395,8617,664],{"className":8618},[457],[395,8620],{"className":8621,"style":453},[432],[395,8623,8625,8628],{"className":8624},[407],[395,8626],{"className":8627,"style":769},[411],[395,8629,471],{"className":8630},[416]," alignments in ",[395,8633,8635],{"className":8634},[398],[395,8636,8638],{"className":8637,"ariaHidden":403},[402],[395,8639,8641,8644,8647,8650,8653],{"className":8640},[407],[395,8642],{"className":8643,"style":412},[411],[395,8645,1045],{"className":8646,"style":1044},[416,417],[395,8648,1049],{"className":8649},[423],[395,8651,1053],{"className":8652},[416,417],[395,8654,1016],{"className":8655},[475],"\nworst case, but is fine for tiny patterns or unstructured text.",[6898,8658,8659,8662,8663,8665,8666,8681,8682,8706,8707,8924,8925,8970,8971,8995],{},[390,8660,8661],{},"Rabin–Karp"," compares a ",[390,8664,2134],{}," of each length-",[395,8667,8669],{"className":8668},[398],[395,8670,8672],{"className":8671,"ariaHidden":403},[402],[395,8673,8675,8678],{"className":8674},[407],[395,8676],{"className":8677,"style":568},[411],[395,8679,515],{"className":8680},[416,417]," window, updated in\n",[395,8683,8685],{"className":8684},[398],[395,8686,8688],{"className":8687,"ariaHidden":403},[402],[395,8689,8691,8694,8697,8700,8703],{"className":8690},[407],[395,8692],{"className":8693,"style":412},[411],[395,8695,1045],{"className":8696,"style":1044},[416,417],[395,8698,1049],{"className":8699},[423],[395,8701,471],{"className":8702},[416],[395,8704,1016],{"className":8705},[475]," via ",[395,8708,8710],{"className":8709},[398],[395,8711,8713,8760,8787,8858,8882,8915],{"className":8712,"ariaHidden":403},[402],[395,8714,8716,8719,8751,8754,8757],{"className":8715},[407],[395,8717],{"className":8718,"style":3149},[411],[395,8720,8722,8725],{"className":8721},[416],[395,8723,1900],{"className":8724},[416,417],[395,8726,8728],{"className":8727},[1934],[395,8729,8731],{"className":8730},[1938],[395,8732,8734],{"className":8733},[1943],[395,8735,8737],{"className":8736,"style":3149},[1947],[395,8738,8739,8742],{"style":2564},[395,8740],{"className":8741,"style":1956},[1955],[395,8743,8745],{"className":8744},[1960,1961,1962,1963],[395,8746,8748],{"className":8747},[416,1963],[395,8749,2320],{"className":8750},[416,1963],[395,8752],{"className":8753,"style":702},[432],[395,8755,707],{"className":8756},[706],[395,8758],{"className":8759,"style":702},[432],[395,8761,8763,8766,8769,8772,8775,8778,8781,8784],{"className":8762},[407],[395,8764],{"className":8765,"style":412},[411],[395,8767,1049],{"className":8768},[423],[395,8770,1828],{"className":8771},[416,417],[395,8773,1049],{"className":8774},[423],[395,8776,1900],{"className":8777},[416,417],[395,8779],{"className":8780,"style":453},[432],[395,8782,458],{"className":8783},[457],[395,8785],{"className":8786,"style":453},[432],[395,8788,8790,8793,8796,8799,8802,8805,8808,8846,8849,8852,8855],{"className":8789},[407],[395,8791],{"className":8792,"style":3007},[411],[395,8794,419],{"className":8795,"style":418},[416,417],[395,8797,424],{"className":8798},[423],[395,8800,572],{"className":8801},[416,417],[395,8803,476],{"className":8804},[475],[395,8806],{"className":8807,"style":433},[432],[395,8809,8811,8814],{"className":8810},[416],[395,8812,1828],{"className":8813},[416,417],[395,8815,8817],{"className":8816},[1934],[395,8818,8820],{"className":8819},[1938],[395,8821,8823],{"className":8822},[1943],[395,8824,8826],{"className":8825,"style":2543},[1947],[395,8827,8828,8831],{"style":2564},[395,8829],{"className":8830,"style":1956},[1955],[395,8832,8834],{"className":8833},[1960,1961,1962,1963],[395,8835,8837,8840,8843],{"className":8836},[416,1963],[395,8838,515],{"className":8839},[416,417,1963],[395,8841,458],{"className":8842},[457,1963],[395,8844,471],{"className":8845},[416,1963],[395,8847,1016],{"className":8848},[475],[395,8850],{"className":8851,"style":453},[432],[395,8853,664],{"className":8854},[457],[395,8856],{"className":8857,"style":453},[432],[395,8859,8861,8864,8867,8870,8873,8876,8879],{"className":8860},[407],[395,8862],{"className":8863,"style":412},[411],[395,8865,419],{"className":8866,"style":418},[416,417],[395,8868,424],{"className":8869},[423],[395,8871,572],{"className":8872},[416,417],[395,8874],{"className":8875,"style":453},[432],[395,8877,664],{"className":8878},[457],[395,8880],{"className":8881,"style":453},[432],[395,8883,8885,8888,8891,8894,8897,8900,8909,8912],{"className":8884},[407],[395,8886],{"className":8887,"style":412},[411],[395,8889,515],{"className":8890},[416,417],[395,8892,2047],{"className":8893},[475],[395,8895],{"className":8896,"style":2494},[432],[395,8898],{"className":8899,"style":453},[432],[395,8901,8903],{"className":8902},[457],[395,8904,8906],{"className":8905},[416],[395,8907,2508],{"className":8908},[416,2507],[395,8910],{"className":8911,"style":2494},[432],[395,8913],{"className":8914,"style":453},[432],[395,8916,8918,8921],{"className":8917},[407],[395,8919],{"className":8920,"style":1861},[411],[395,8922,826],{"className":8923,"style":1865},[416,417],", then verifies on hash\nmatches to kill collisions: ",[390,8926,8927,8928],{},"expected ",[395,8929,8931],{"className":8930},[398],[395,8932,8934,8958],{"className":8933,"ariaHidden":403},[402],[395,8935,8937,8940,8943,8946,8949,8952,8955],{"className":8936},[407],[395,8938],{"className":8939,"style":412},[411],[395,8941,1045],{"className":8942,"style":1044},[416,417],[395,8944,1049],{"className":8945},[423],[395,8947,449],{"className":8948},[416,417],[395,8950],{"className":8951,"style":453},[432],[395,8953,664],{"className":8954},[457],[395,8956],{"className":8957,"style":453},[432],[395,8959,8961,8964,8967],{"className":8960},[407],[395,8962],{"className":8963,"style":412},[411],[395,8965,515],{"className":8966},[416,417],[395,8968,1016],{"className":8969},[475],", worst case ",[395,8972,8974],{"className":8973},[398],[395,8975,8977],{"className":8976,"ariaHidden":403},[402],[395,8978,8980,8983,8986,8989,8992],{"className":8979},[407],[395,8981],{"className":8982,"style":412},[411],[395,8984,1045],{"className":8985,"style":1044},[416,417],[395,8987,1049],{"className":8988},[423],[395,8990,1053],{"className":8991},[416,417],[395,8993,1016],{"className":8994},[475],". Best for\nmany-pattern search.",[6898,8997,8998,9001,9002,3287,9005,9020,9021,9081,9082,9126,9127,2527],{},[390,8999,9000],{},"KMP"," precomputes the ",[390,9003,9004],{},"prefix\u002Ffailure function",[395,9006,9008],{"className":9007},[398],[395,9009,9011],{"className":9010,"ariaHidden":403},[402],[395,9012,9014,9017],{"className":9013},[407],[395,9015],{"className":9016,"style":568},[411],[395,9018,4247],{"className":9019,"style":1865},[416,417],", so on a mismatch the\npattern slides by ",[395,9022,9024],{"className":9023},[398],[395,9025,9027,9045,9069],{"className":9026,"ariaHidden":403},[402],[395,9028,9030,9033,9036,9039,9042],{"className":9029},[407],[395,9031],{"className":9032,"style":3946},[411],[395,9034,826],{"className":9035,"style":1865},[416,417],[395,9037],{"className":9038,"style":453},[432],[395,9040,458],{"className":9041},[457],[395,9043],{"className":9044,"style":453},[432],[395,9046,9048,9051,9054,9057,9060,9063,9066],{"className":9047},[407],[395,9049],{"className":9050,"style":412},[411],[395,9052,4247],{"className":9053,"style":1865},[416,417],[395,9055,424],{"className":9056},[423],[395,9058,826],{"className":9059,"style":1865},[416,417],[395,9061],{"className":9062,"style":453},[432],[395,9064,458],{"className":9065},[457],[395,9067],{"className":9068,"style":453},[432],[395,9070,9072,9075,9078],{"className":9071},[407],[395,9073],{"className":9074,"style":412},[411],[395,9076,471],{"className":9077},[416],[395,9079,476],{"className":9080},[475]," and the text pointer never backs up:\nworst-case ",[390,9083,9084],{},[395,9085,9087],{"className":9086},[398],[395,9088,9090,9114],{"className":9089,"ariaHidden":403},[402],[395,9091,9093,9096,9099,9102,9105,9108,9111],{"className":9092},[407],[395,9094],{"className":9095,"style":412},[411],[395,9097,1045],{"className":9098,"style":1044},[416,417],[395,9100,1049],{"className":9101},[423],[395,9103,449],{"className":9104},[416,417],[395,9106],{"className":9107,"style":453},[432],[395,9109,664],{"className":9110},[457],[395,9112],{"className":9113,"style":453},[432],[395,9115,9117,9120,9123],{"className":9116},[407],[395,9118],{"className":9119,"style":412},[411],[395,9121,515],{"className":9122},[416,417],[395,9124,1016],{"className":9125},[475],", justified by an amortised potential argument on ",[395,9128,9130],{"className":9129},[398],[395,9131,9133],{"className":9132,"ariaHidden":403},[402],[395,9134,9136,9139],{"className":9135},[407],[395,9137],{"className":9138,"style":1861},[411],[395,9140,826],{"className":9141,"style":1865},[416,417],[6898,9143,9144,9145,9148,9149,9173,9174,9176,9177,9204,9205,9247,9248,2527],{},"The ",[390,9146,9147],{},"Z-function"," computes the longest prefix-match at every position in ",[395,9150,9152],{"className":9151},[398],[395,9153,9155],{"className":9154,"ariaHidden":403},[402],[395,9156,9158,9161,9164,9167,9170],{"className":9157},[407],[395,9159],{"className":9160,"style":412},[411],[395,9162,1045],{"className":9163,"style":1044},[416,417],[395,9165,1049],{"className":9166},[423],[395,9168,449],{"className":9169},[416,417],[395,9171,1016],{"className":9172},[475],"\nvia the ",[390,9175,6725],{},"; running it on ",[395,9178,9180],{"className":9179},[398],[395,9181,9183],{"className":9182,"ariaHidden":403},[402],[395,9184,9186,9189,9192,9195,9198,9201],{"className":9185},[407],[395,9187],{"className":9188,"style":8076},[411],[395,9190,493],{"className":9191,"style":418},[416,417],[395,9193],{"className":9194,"style":433},[432],[395,9196,8086],{"className":9197},[416],[395,9199],{"className":9200,"style":433},[432],[395,9202,419],{"className":9203,"style":418},[416,417]," and finding ",[395,9206,9208],{"className":9207},[398],[395,9209,9211,9238],{"className":9210,"ariaHidden":403},[402],[395,9212,9214,9217,9220,9223,9226,9229,9232,9235],{"className":9213},[407],[395,9215],{"className":9216,"style":412},[411],[395,9218,6450],{"className":9219,"style":6449},[416,417],[395,9221,424],{"className":9222},[423],[395,9224,4230],{"className":9225},[416,417],[395,9227,476],{"className":9228},[475],[395,9230],{"className":9231,"style":702},[432],[395,9233,8159],{"className":9234},[706],[395,9236],{"className":9237,"style":702},[432],[395,9239,9241,9244],{"className":9240},[407],[395,9242],{"className":9243,"style":568},[411],[395,9245,515],{"className":9246},[416,417]," matches in\n",[390,9249,9250],{},[395,9251,9253],{"className":9252},[398],[395,9254,9256,9280],{"className":9255,"ariaHidden":403},[402],[395,9257,9259,9262,9265,9268,9271,9274,9277],{"className":9258},[407],[395,9260],{"className":9261,"style":412},[411],[395,9263,1045],{"className":9264,"style":1044},[416,417],[395,9266,1049],{"className":9267},[423],[395,9269,449],{"className":9270},[416,417],[395,9272],{"className":9273,"style":453},[432],[395,9275,664],{"className":9276},[457],[395,9278],{"className":9279,"style":453},[432],[395,9281,9283,9286,9289],{"className":9282},[407],[395,9284],{"className":9285,"style":412},[411],[395,9287,515],{"className":9288},[416,417],[395,9290,1016],{"className":9291},[475],[6898,9293,9294,9309,9310,9325,9326,9329],{},[395,9295,9297],{"className":9296},[398],[395,9298,9300],{"className":9299,"ariaHidden":403},[402],[395,9301,9303,9306],{"className":9302},[407],[395,9304],{"className":9305,"style":568},[411],[395,9307,4247],{"className":9308,"style":1865},[416,417]," and ",[395,9311,9313],{"className":9312},[398],[395,9314,9316],{"className":9315,"ariaHidden":403},[402],[395,9317,9319,9322],{"className":9318},[407],[395,9320],{"className":9321,"style":550},[411],[395,9323,6450],{"className":9324,"style":6449},[416,417]," are ",[390,9327,9328],{},"interconvertible"," in linear time — two encodings of a\nstring's self-similarity. KMP\u002FZ give worst-case guarantees; Rabin–Karp trades\nthat for simplicity and multi-pattern flexibility.",[9331,9332,9335,9340],"section",{"className":9333,"dataFootnotes":376},[9334],"footnotes",[831,9336,9339],{"className":9337,"id":1220},[9338],"sr-only","Footnotes",[9341,9342,9343,9424,9436,9506],"ol",{},[6898,9344,9346,9349,9350,9416,9417],{"id":9345},"user-content-fn-clrs-naive",[390,9347,9348],{},"CLRS",", Ch. 32 — String Matching (§32.1): the naive matcher and its ",[395,9351,9353],{"className":9352},[398],[395,9354,9356,9380,9398],{"className":9355,"ariaHidden":403},[402],[395,9357,9359,9362,9365,9368,9371,9374,9377],{"className":9358},[407],[395,9360],{"className":9361,"style":412},[411],[395,9363,1045],{"className":9364,"style":1044},[416,417],[395,9366,973],{"className":9367},[423],[395,9369,449],{"className":9370},[416,417],[395,9372],{"className":9373,"style":453},[432],[395,9375,458],{"className":9376},[457],[395,9378],{"className":9379,"style":453},[432],[395,9381,9383,9386,9389,9392,9395],{"className":9382},[407],[395,9384],{"className":9385,"style":674},[411],[395,9387,515],{"className":9388},[416,417],[395,9390],{"className":9391,"style":453},[432],[395,9393,664],{"className":9394},[457],[395,9396],{"className":9397,"style":453},[432],[395,9399,9401,9404,9407,9410,9413],{"className":9400},[407],[395,9402],{"className":9403,"style":412},[411],[395,9405,471],{"className":9406},[416],[395,9408,1016],{"className":9409},[475],[395,9411,515],{"className":9412},[416,417],[395,9414,1016],{"className":9415},[475]," bound. ",[1216,9418,9423],{"href":9419,"ariaLabel":9420,"className":9421,"dataFootnoteBackref":376},"#user-content-fnref-clrs-naive","Back to reference 1",[9422],"data-footnote-backref","↩",[6898,9425,9427,9430,9431],{"id":9426},"user-content-fn-skiena-rk",[390,9428,9429],{},"Skiena",", § — String Algorithms: the Rabin–Karp rolling hash and its use for substring search and fingerprinting. ",[1216,9432,9423],{"href":9433,"ariaLabel":9434,"className":9435,"dataFootnoteBackref":376},"#user-content-fnref-skiena-rk","Back to reference 2",[9422],[6898,9437,9439,9441,9442,9457,9458,9500,9501],{"id":9438},"user-content-fn-clrs-kmp",[390,9440,9348],{},", Ch. 32 — String Matching (§32.4): the prefix function ",[395,9443,9445],{"className":9444},[398],[395,9446,9448],{"className":9447,"ariaHidden":403},[402],[395,9449,9451,9454],{"className":9450},[407],[395,9452],{"className":9453,"style":568},[411],[395,9455,4247],{"className":9456,"style":1865},[416,417]," and the amortised ",[395,9459,9461],{"className":9460},[398],[395,9462,9464,9488],{"className":9463,"ariaHidden":403},[402],[395,9465,9467,9470,9473,9476,9479,9482,9485],{"className":9466},[407],[395,9468],{"className":9469,"style":412},[411],[395,9471,1045],{"className":9472,"style":1044},[416,417],[395,9474,1049],{"className":9475},[423],[395,9477,449],{"className":9478},[416,417],[395,9480],{"className":9481,"style":453},[432],[395,9483,664],{"className":9484},[457],[395,9486],{"className":9487,"style":453},[432],[395,9489,9491,9494,9497],{"className":9490},[407],[395,9492],{"className":9493,"style":412},[411],[395,9495,515],{"className":9496},[416,417],[395,9498,1016],{"className":9499},[475]," KMP analysis. ",[1216,9502,9423],{"href":9503,"ariaLabel":9504,"className":9505,"dataFootnoteBackref":376},"#user-content-fnref-clrs-kmp","Back to reference 3",[9422],[6898,9507,9509,9512,9513],{"id":9508},"user-content-fn-erickson-z",[390,9510,9511],{},"Erickson",", Ch. — String Matching: the Z-function \u002F failure-function duality and the Z-box linear-time computation. ",[1216,9514,9423],{"href":9515,"ariaLabel":9516,"className":9517,"dataFootnoteBackref":376},"#user-content-fnref-erickson-z","Back to reference 4",[9422],[9519,9520,9521],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark-mode .shiki span {color: var(--shiki-dark-mode);background: var(--shiki-dark-mode-bg);font-style: var(--shiki-dark-mode-font-style);font-weight: var(--shiki-dark-mode-font-weight);text-decoration: var(--shiki-dark-mode-text-decoration);}html.dark-mode .shiki span {color: var(--shiki-dark-mode);background: var(--shiki-dark-mode-bg);font-style: var(--shiki-dark-mode-font-style);font-weight: var(--shiki-dark-mode-font-weight);text-decoration: var(--shiki-dark-mode-text-decoration);}",{"title":376,"searchDepth":18,"depth":18,"links":9523},[9524,9525,9526,9529,9530,9531],{"id":833,"depth":18,"text":834},{"id":1747,"depth":18,"text":1748},{"id":3782,"depth":18,"text":3783,"children":9527},[9528],{"id":5931,"depth":24,"text":5932},{"id":6389,"depth":18,"text":6390},{"id":8503,"depth":18,"text":8504},{"id":1220,"depth":18,"text":9339},"We have spent the previous lessons treating a sequence as a bag of comparable\nkeys. A string is more rigid: its characters come in a fixed order and that order\nis the information. The fundamental question is string matching: given a\ntext T[0..n−1] and a pattern P[0..m−1] over some alphabet Σ,\nreport every shift s such that P occurs in T starting at position s, i.e.\nT[s..s+m−1]=P. There are n−m+1 candidate shifts, and the art is to\ntest them without paying m comparisons apiece.","md",{"moduleNumber":102,"lessonNumber":73,"order":9535},504,true,[9538,9542,9546,9550],{"title":9539,"slug":9540,"difficulty":9541},"Find the Index of the First Occurrence in a String","find-the-index-of-the-first-occurrence-in-a-string","Easy",{"title":9543,"slug":9544,"difficulty":9545},"Repeated String Match","repeated-string-match","Medium",{"title":9547,"slug":9548,"difficulty":9549},"Longest Happy Prefix","longest-happy-prefix","Hard",{"title":9551,"slug":9552,"difficulty":9549},"Shortest Palindrome","shortest-palindrome","---\ntitle: \"String Matching: Rabin–Karp, KMP & Z\"\nmodule: Sequences & Strings\nmoduleNumber: 5\nlessonNumber: 4\norder: 504\nsummary: >-\n  Given a text $T$ of length $n$ and a pattern $P$ of length $m$, find every\n  occurrence of $P$ in $T$. The naive scan costs $O(nm)$; we beat it three ways.\n  Rabin–Karp uses a **rolling hash** to test alignments in $O(1)$ amortised each,\n  with expected $O(n+m)$. KMP precomputes a **failure function** so the scan never\n  re-reads a text character, for worst-case $O(n+m)$. The **Z-function** gives the\n  same bound from a different angle and converts freely to KMP's table.\ntopics: [Strings]\nsources:\n  - book: CLRS\n    ref: \"Ch. 32 — String Matching\"\n  - book: Skiena\n    ref: \"§ — String Algorithms\"\n  - book: Erickson\n    ref: \"Ch. — String Matching\"\npractice:\n  - title: 'Find the Index of the First Occurrence in a String'\n    slug: find-the-index-of-the-first-occurrence-in-a-string\n    difficulty: Easy\n  - title: 'Repeated String Match'\n    slug: repeated-string-match\n    difficulty: Medium\n  - title: 'Longest Happy Prefix'\n    slug: longest-happy-prefix\n    difficulty: Hard\n  - title: 'Shortest Palindrome'\n    slug: shortest-palindrome\n    difficulty: Hard\n---\n\nWe have spent the previous lessons treating a sequence as a bag of comparable\nkeys. A string is more rigid: its characters come in a fixed order and that order\n_is_ the information. The fundamental question is **string matching**: given a\ntext $T[0 \\mathinner{\\ldotp\\ldotp} n-1]$ and a pattern $P[0 \\mathinner{\\ldotp\\ldotp} m-1]$ over some alphabet $\\Sigma$,\nreport every shift $s$ such that $P$ occurs in $T$ starting at position $s$, i.e.\n$T[s \\mathinner{\\ldotp\\ldotp} s+m-1] = P$. There are $n - m + 1$ candidate shifts, and the art is to\ntest them without paying $m$ comparisons apiece.\n\nThe naive answer does pay that price. The three algorithms in this lesson each\nremove the redundancy in a different way: Rabin–Karp replaces a length-$m$\ncomparison by a length-$1$ hash update, KMP remembers what a partial match already\ntold us so it never backs up over the text, and the Z-function computes a global\n\"longest prefix-match\" array that subsumes both.\n\n## The naive scan, and why it wastes work\n\nTry every alignment; at each, compare characters until one disagrees or the whole\npattern matches.\n\n```algorithm\ncaption: $\\textsc{Naive-Match}(T, P)$ — test all $n-m+1$ alignments\nfor $s \\gets 0$ to $n - m$ do\n  $j \\gets 0$\n  while $j \u003C m$ and $T[s + j] = P[j]$ do\n    $j \\gets j + 1$\n  if $j = m$ then\n    report occurrence at shift $s$\n```\n\nThe outer loop runs $n - m + 1$ times and the inner loop up to $m$, so the worst\ncase is $\\Theta((n-m+1)\\,m) = O(nm)$, realized by $T = \\texttt{aaaa...a}$ and\n$P = \\texttt{aaa...ab}$, where every alignment matches $m-1$ characters before\nfailing. On random or low-repetition text the inner loop almost always dies on\nthe first character, so naive matching averages $O(n)$ and is the right\ntool when $m$ is tiny or the text is unstructured.[^clrs-naive] The pathology is\n_repetitive_ patterns, and the cure is to stop discarding what a partial match\nrevealed. The [asymptotic](\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis) gap\nbetween the worst and average cases is exactly what the next three algorithms\nclose.\n\n> **Intuition.** When $P = \\texttt{ABABAC}$ matches `ABABA` of the text and then\n> fails on the sixth character, the naive scan slides $P$ forward by one and\n> re-examines those same text characters. But we already _know_ those characters —\n> they were `ABABA`. The faster algorithms exploit the pattern's internal\n> structure so that this re-reading never happens.\n\n$$\n% caption: Why the naive scan is $O(nm)$: on $T=\\texttt{aaaaab}$, $P=\\texttt{aab}$ every shift re-reads the same `a`s, matching $m{-}1$ of them before failing on the final character (red). Each row is one alignment\n\\begin{tikzpicture}[\n  >=stealth,\n  cell\u002F.style={draw, minimum size=7mm, inner sep=0, font=\\small},\n  fail\u002F.style={draw, minimum size=7mm, inner sep=0, font=\\small, draw=red!75!black, very thick, fill=red!18},\n  ok\u002F.style={draw, minimum size=7mm, inner sep=0, font=\\small, fill=acc!15}]\n  \\definecolor{acc}{HTML}{2348F2}\n  % text row\n  \\foreach \\c [count=\\i from 0] in {a,a,a,a,a,b} {\n    \\node[cell] (t\\i) at (\\i*7mm, 0) {$\\c$};\n  }\n  \\node[left=3mm of t0, font=\\footnotesize] {$T$};\n  % shift 0: aa match, b fails\n  \\node[ok] at (0*7mm,-9mm) {$a$};\n  \\node[ok] at (1*7mm,-9mm) {$a$};\n  \\node[fail] at (2*7mm,-9mm) {$b$};\n  \\node[font=\\footnotesize] at (-9mm,-9mm) {$s{=}0$};\n  % shift 1\n  \\node[ok] at (1*7mm,-18mm) {$a$};\n  \\node[ok] at (2*7mm,-18mm) {$a$};\n  \\node[fail] at (3*7mm,-18mm) {$b$};\n  \\node[font=\\footnotesize] at (-9mm,-18mm) {$s{=}1$};\n  % shift 2\n  \\node[ok] at (2*7mm,-27mm) {$a$};\n  \\node[ok] at (3*7mm,-27mm) {$a$};\n  \\node[fail] at (4*7mm,-27mm) {$b$};\n  \\node[font=\\footnotesize] at (-9mm,-27mm) {$s{=}2$};\n  \\node[font=\\footnotesize, red!75!black, align=left] at (62mm,-18mm)\n    {each shift re-reads\\\\the matched a's};\n\\end{tikzpicture}\n$$\n\n## Rabin–Karp: matching by rolling hash\n\nRabin–Karp turns \"are these $m$ characters equal?\" into \"are these two numbers\nequal?\" by [hashing](\u002Falgorithms\u002Fdata-structures\u002Fhash-tables) each window.\nInterpret each length-$m$ block of text as an $m$-digit number in base\n$b = |\\Sigma|$ (mapping characters to digits), reduced modulo a prime $q$ to keep\nit machine-word-sized. Precompute the pattern's hash $p = h(P)$ and the first\nwindow's hash $t_0 = h(T[0 \\mathinner{\\ldotp\\ldotp} m-1])$. Slide the window one step at a time; if\n$t_s = p$, the block _might_ match, so verify it character-by-character to rule out\na hash collision (a _spurious hit_).\n\nThe trick is the **rolling hash**: when the window slides from position $s$ to\n$s+1$, we do not recompute the hash from scratch. We drop the contribution of the\ndeparting high-order digit $T[s]$, shift the remaining digits up by one place\n(multiply by $b$), and add the incoming low-order digit $T[s+m]$:\n\n$$\nh' \\;=\\; \\bigl(b\\,(h - T[s]\\,b^{\\,m-1}) + T[s+m]\\bigr) \\bmod q .\n$$\n\nThe factor $b^{m-1} \\bmod q$ is precomputed once. Each slide is $O(1)$ arithmetic,\nso building all $n - m + 1$ window hashes costs $O(n)$ in total.\n\n$$\n% caption: The rolling hash slides the length-$m$ window by one: drop the departing high digit $T[s]\\,b^{m-1}$, multiply the rest by $b$, add the incoming low digit $T[s{+}m]$ — one $O(1)$ update giving $h'$\n\\begin{tikzpicture}[>=stealth, font=\\small]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\foreach \\i\u002F\\c in {0\u002Fc,1\u002Fa,2\u002Fb,3\u002Fc,4\u002Fa,5\u002Fb} {\n    \\node[draw, minimum size=8mm, inner sep=1pt] (t\\i) at (\\i*0.95,0) {$\\c$};\n  }\n  \\draw[black, very thick, rounded corners=1pt] (-0.45,-0.5) rectangle (2.35,0.5);\n  \\node[font=\\footnotesize] at (1.35,-1.3) {window $s$: hash $h$};\n  \\draw[acc, very thick, rounded corners=1pt] (0.55,0.55) rectangle (3.35,1.45);\n  \\node[font=\\footnotesize, acc] at (1.95,1.85) {window $s{+}1$: hash $h'$};\n  \\draw[->, red!75!black, thick] (0,-0.6) -- node[below, font=\\footnotesize, text=red!75!black]{drop $T[s]$} (-0.6,-0.6);\n  \\draw[->, red!75!black, thick] (3.7,-0.6) -- node[below, font=\\footnotesize, text=red!75!black]{add $T[s{+}m]$} (2.85,-0.55);\n\\end{tikzpicture}\n$$\n\n```algorithm\ncaption: $\\textsc{Rabin-Karp}(T, P, b, q)$ — hash, slide, verify\n$p \\gets 0;\\ t \\gets 0;\\ \\rho \\gets b^{\\,m-1} \\bmod q$\nfor $j \\gets 0$ to $m - 1$ do          \u002F\u002F hash $P$ and window 0\n  $p \\gets (b \\cdot p + P[j]) \\bmod q$\n  $t \\gets (b \\cdot t + T[j]) \\bmod q$\nfor $s \\gets 0$ to $n - m$ do\n  if $t = p$ then                       \u002F\u002F verify, kill collisions\n    if $T[s \\mathinner{\\ldotp\\ldotp} s+m-1] = P$ then report occurrence at shift $s$\n  if $s \u003C n - m$ then                   \u002F\u002F roll window forward\n    $t \\gets (b\\,(t - T[s]\\cdot\\rho) + T[s+m]) \\bmod q$\n```\n\n> **Lemma (running time).** Rabin–Karp runs in $O(n + m)$ _expected_ time and\n> $O(nm)$ worst case.\n>\n\n> **Proof sketch.** Hashing the pattern and the first window is $O(m)$; each of the\n> $n-m$ rolls is $O(1)$, so the scan itself is $O(n+m)$. The only extra cost is\n> verification. A real match must be verified, and there are at most as many real\n> matches as occurrences. A _spurious_ hit happens when $t_s = p$ but the blocks\n> differ; for a well-chosen prime $q$ the probability of a collision at a given\n> shift is about $1\u002Fq$, so the expected number of spurious verifications is\n> $O(n\u002Fq)$, each costing $O(m)$. With $q$ chosen larger than $m$ this contributes\n> $O(n)$ expected. Adversarially, or with an unlucky $q$, _every_ shift can\n> collide, forcing a length-$m$ verification each time: $O(nm)$. $\\qed$\n\nRabin–Karp shines when you need to match **many** patterns of the same length at\nonce (hash them all, look each window up in a set) or when the \"comparison\" is\nnaturally numeric. The rolling-hash idea reappears in deduplication,\nplagiarism detection, and content-defined chunking.[^skiena-rk]\n\n## Knuth–Morris–Pratt: never re-read the text\n\nKMP attacks the redundancy directly. Suppose we are matching $P$ against $T$ and\nhave just matched $q$ characters, $P[0 \\mathinner{\\ldotp\\ldotp} q-1] = T[s \\mathinner{\\ldotp\\ldotp} s+q-1]$, when $P[q]$\nmismatches $T[s+q]$. The naive scan would slide $P$ by one and recompare from the\nstart. But the matched text $T[s \\mathinner{\\ldotp\\ldotp} s+q-1]$ equals $P[0 \\mathinner{\\ldotp\\ldotp} q-1]$, which we know\ncompletely — so we can compute, _in advance and from the pattern alone_, how far\nto slide so the next comparison resumes correctly without ever moving the text\npointer backward.\n\nThe information we need is the **prefix function** (or **failure function**):\n\n> **Definition.** For each $i$, let $\\pi[i]$ be the length of the longest _proper_\n> prefix of $P[0 \\mathinner{\\ldotp\\ldotp} i]$ that is also a suffix of $P[0 \\mathinner{\\ldotp\\ldotp} i]$. (\"Proper\" means\n> shorter than $P[0 \\mathinner{\\ldotp\\ldotp} i]$ itself.)\n\nFor $P = \\texttt{ABABAC}$ we have $\\pi = [0,0,1,2,3,0]$: after matching the prefix\n`ABABA` (length $5$, index $4$), its longest border is `ABA` of length $3$. So on a\nmismatch having matched $q = 5$ characters, instead of restarting we keep the\nalready-matched border `ABA` and resume comparing at $P[\\pi[q-1]] = P[3]$. The\npattern effectively slides right by $q - \\pi[q-1] = 5 - 3 = 2$ positions, and the\ntext pointer does not move.\n\n$$\n% caption: A KMP shift. After matching ABABA, P fails on `C` vs the text (highlighted). The longest border ABA realigns, sliding P right by $q-\\pi[q-1]=2$ with no rescanning of the text.\n\\begin{tikzpicture}[\n  >=stealth,\n  cell\u002F.style={draw, minimum size=7mm, inner sep=0, font=\\small},\n  acccell\u002F.style={draw, minimum size=7mm, inner sep=0, font=\\small, draw=acc, very thick, fill=acc!15}]\n  \\definecolor{acc}{HTML}{2348F2}\n  % text row (cell 5 highlighted: light fill + thick accent border, label drawn once)\n  \\foreach \\c [count=\\i from 0] in {A,B,A,B,A,{},\\dots} {\n    \\node[cell] (t\\i) at (\\i*7mm, 0) {$\\c$};\n  }\n  \\node[acccell] at (5*7mm, 0) {$X$};\n  \\node[left=3mm of t0, font=\\footnotesize] {$T$};\n  % first copy of P, aligned at shift s\n  \\foreach \\c [count=\\i from 0] in {A,B,A,B,A} {\n    \\node[cell] (p\\i) at (\\i*7mm, -10mm) {$\\c$};\n  }\n  \\node[acccell] (pc) at (5*7mm, -10mm) {$C$};\n  \\node[left=3mm of p0, font=\\footnotesize] {$P$};\n  \\draw[->, red!75!black, thick] (5*7mm, -6.5mm) -- (5*7mm, -9mm)\n    node[midway, right, font=\\footnotesize, text=red!75!black] {mismatch};\n  % shifted copy of P, slid right by q - pi = 2\n  \\foreach \\c [count=\\i from 0] in {A,B,A,B,A,C} {\n    \\node[cell, fill=acc!8] (q\\i) at ({(\\i+2)*7mm}, -22mm) {$\\c$};\n  }\n  \\node[left=3mm of q0, font=\\footnotesize] {$P'$};\n  % brace-ish note\n  \\node[font=\\footnotesize] at (10.5*7mm, -16mm) {slide by $q-\\pi[q-1]=2$};\n\\end{tikzpicture}\n$$\n\nComputing $\\pi$ uses the very same self-matching idea, run on $P$ against itself.\nMaintain the length $k$ of the current longest border; to extend to index $i$,\nfollow failure links downward until $P[k] = P[i]$ or $k$ falls to $0$.\n\n```algorithm\ncaption: $\\textsc{Prefix-Function}(P)$ — compute the failure array $\\pi$ in $O(m)$\n$\\pi[0] \\gets 0;\\ k \\gets 0$\nfor $i \\gets 1$ to $m - 1$ do\n  while $k > 0$ and $P[k] \\ne P[i]$ do\n    $k \\gets \\pi[k - 1]$            \u002F\u002F fall back\n  if $P[k] = P[i]$ then\n    $k \\gets k + 1$                 \u002F\u002F extend border\n  $\\pi[i] \\gets k$\nreturn $\\pi$\n```\n\n```algorithm\ncaption: $\\textsc{KMP-Match}(T, P)$ — scan once, never moving the text pointer back\n$\\pi \\gets \\textsc{Prefix-Function}(P)$\n$q \\gets 0$                          \u002F\u002F chars matched so far\nfor $i \\gets 0$ to $n - 1$ do\n  while $q > 0$ and $P[q] \\ne T[i]$ do\n    $q \\gets \\pi[q - 1]$             \u002F\u002F mismatch: fall back\n  if $P[q] = T[i]$ then\n    $q \\gets q + 1$\n  if $q = m$ then\n    report occurrence at shift $i - m + 1$\n    $q \\gets \\pi[q - 1]$             \u002F\u002F allow overlapping matches\n```\n\n> **Lemma (running time).** Both procedures run in linear time, so KMP matches in\n> $O(n + m)$ worst case.\n>\n\n> **Proof (amortised).** Consider the scan. The text pointer $i$ advances exactly\n> $n$ times and never retreats. The matched-length variable $q$ increases by at\n> most $1$ per iteration, so it increases at most $n$ times total. Every iteration\n> of the inner `while` strictly _decreases_ $q$ (since $\\pi[q-1] \u003C q$), and $q$\n> can never go below $0$; therefore the total number of inner-loop decrements over\n> the whole run is at most the total number of increments, $\\le n$. The scan thus\n> does $O(n)$ work. The identical argument with $i$ ranging over $P$ bounds\n> $\\textsc{Prefix-Function}$ by $O(m)$. $\\qed$\n\nThe key is that $q$ is a \"potential\" that pays for the fallback: each unit of slide\nwas funded by an earlier successful character match.[^clrs-kmp] No text character\nis ever examined more than a constant number of times, the central property that\nthe naive scan lacks.\n\n### The prefix table, concretely\n\nHere is the full table for $P = \\texttt{ABABACA}$. Read it left to right: $\\pi[i]$\nis the length of the longest border of the prefix ending at column $i$.\n\n$$\n% caption: The prefix function $\\pi$ for $P=\\texttt{ABABACA}$. Top row: the pattern. Bottom row: $\\pi[i]$, the length of the longest proper prefix of $P[0\\mathinner{\\ldotp\\ldotp} i]$ that is also a suffix. E.g. $\\pi[4]=3$ because `ABABA` has border `ABA`.\n\\begin{tikzpicture}[\n  >=stealth,\n  cell\u002F.style={draw, minimum size=8mm, inner sep=0, font=\\small}]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\foreach \\c [count=\\i from 0] in {A,B,A,B,A,C,A} {\n    \\node[cell] (c\\i) at (\\i*8mm, 0) {$\\c$};\n  }\n  \\fill[acc!15] (4*8mm-4mm,-8mm-4mm) rectangle (4*8mm+4mm,-8mm+4mm);\n  \\foreach \\v [count=\\i from 0] in {0,0,1,2,3,0,1} {\n    \\node[cell] (v\\i) at (\\i*8mm, -8mm) {$\\v$};\n  }\n  \\node[left=3mm of c0, font=\\footnotesize] {$P[i]$};\n  \\node[left=3mm of v0, font=\\footnotesize] {$\\pi[i]$};\n  \\node[cell, draw=acc, very thick] at (4*8mm, -8mm) {};\n\\end{tikzpicture}\n$$\n\n## The Z-function: longest prefix-match at every position\n\nThe Z-function repackages the same self-similarity into a single array, and is\noften easier to implement bug-free.\n\n> **Definition.** For a string $S$ of length $\\ell$, $Z[i]$ is the length of the\n> longest substring starting at position $i$ that matches a prefix of $S$; that\n> is, the largest $k$ with $S[0 \\mathinner{\\ldotp\\ldotp} k-1] = S[i \\mathinner{\\ldotp\\ldotp} i+k-1]$. By convention $Z[0]$ is\n> left undefined (or set to $\\ell$).\n\nThe linear-time computation keeps a half-open window $[l, r)$, the **Z-box**:\nthe rightmost interval known to equal a prefix of $S$ (so $S[l \\mathinner{\\ldotp\\ldotp} r-1] = S[0 \\mathinner{\\ldotp\\ldotp} r-l-1]$).\nFor a new index $i$:\n\n- if $i \u003C r$, position $i$ lies inside a known prefix-match, so its mirror\n  $i - l$ gives a free lower bound $Z[i] \\gets \\min(Z[i-l],\\ r - i)$;\n- then extend the match character-by-character past $r$ if possible, and if the\n  match runs beyond $r$, slide the Z-box to the new $[i, i + Z[i])$.\n\n$$\n% caption: Z-box copy on $S=\\texttt{ababab}$ at $i{=}4$. The box $[l,r){=}[2,6)$ already matches a prefix, so the mirror $i-l{=}2$ gives a free bound $Z[4]\\gets\\min(r{-}i,\\,Z[2])=\\min(2,4)=2$; here $r$ caps the copy\n\\begin{tikzpicture}[>=stealth, font=\\small]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\foreach \\i\u002F\\c in {0\u002Fa,1\u002Fb,2\u002Fa,3\u002Fb,4\u002Fa,5\u002Fb} {\n    \\node[draw, minimum size=8mm, inner sep=1pt] (s\\i) at (\\i*0.95,0) {$\\c$};\n    \\node[font=\\footnotesize] at (\\i*0.95,0.72) {\\i};\n  }\n  \\draw[acc, very thick, rounded corners=1pt] (1.45,-0.5) rectangle (5.25,0.48);\n  \\node[font=\\footnotesize, acc] at (3.35,-0.95) {Z-box $[l,r)=[2,6)$};\n  \\node[font=\\footnotesize, acc] at (1.9,1.12) {mirror $i{-}l{=}2$};\n  \\node[font=\\footnotesize, acc] at (3.8,1.12) {$i{=}4$};\n  \\draw[->, red!75!black, thick] (3.8,1.62) .. controls (3.2,2.1) and (2.5,2.1) .. (1.9,1.62)\n    node[midway, above, font=\\footnotesize, text=red!75!black, yshift=2pt]{copy};\n  \\node[font=\\footnotesize, acc] at (3.35,-1.5) {$Z[4]=\\min(2,\\,Z[2]{=}4)=2$};\n\\end{tikzpicture}\n$$\n\n```algorithm\ncaption: $\\textsc{Z-Function}(S)$ — longest prefix-match at each position in $O(\\ell)$\n$Z[0] \\gets \\ell;\\ l \\gets 0;\\ r \\gets 0$\nfor $i \\gets 1$ to $\\ell - 1$ do\n  if $i \u003C r$ then\n    $Z[i] \\gets \\min(r - i,\\ Z[i - l])$   \u002F\u002F copy from mirror\n  while $i + Z[i] \u003C \\ell$ and $S[Z[i]] = S[i + Z[i]]$ do\n    $Z[i] \\gets Z[i] + 1$                 \u002F\u002F extend past the box\n  if $i + Z[i] > r$ then\n    $l \\gets i;\\ r \\gets i + Z[i]$        \u002F\u002F advance Z-box\nreturn $Z$\n```\n\nEach character of $S$ is examined a constant number of times because the inner\n`while` only ever advances $r$, which moves monotonically from $0$ to $\\ell$. This\nis the same amortised argument as KMP, giving $O(\\ell)$.\n\nTo match $P$ in $T$, run the Z-function on the concatenation $S = P \\,\\#\\, T$,\nwhere `#` is a sentinel in neither $P$ nor $T$. Wherever $Z[i] \\ge m$ inside the\n$T$ portion, the prefix $P$ matches in full at that spot, so $P$ occurs in $T$ at\nshift $i - (m + 1)$. The sentinel prevents a match from straddling the boundary\nand caps $Z[i] \\le m$. Total length is $n + m + 1$, so matching is $O(n + m)$.\n\n> **Intuition.** KMP's $\\pi$ and the Z-function carry the same information from two\n> directions ($\\pi$ measures borders _ending_ at each position, $Z$ measures\n> prefix-matches _starting_ at each position) and either can be converted to the\n> other in linear time. Reach for whichever you find easier to write correctly;\n> Z-arrays tend to win on problems about prefixes, periods, and palindromes.[^erickson-z]\n\n## Takeaways\n\n- **String matching** seeks all shifts where pattern $P$ ($m$ chars) occurs in\n  text $T$ ($n$ chars). The **naive scan** tries all $n-m+1$ alignments in $O(nm)$\n  worst case, but is fine for tiny patterns or unstructured text.\n- **Rabin–Karp** compares a **rolling hash** of each length-$m$ window, updated in\n  $O(1)$ via $h' = (b(h - T[s]\\,b^{m-1}) + T[s+m]) \\bmod q$, then verifies on hash\n  matches to kill collisions: **expected $O(n+m)$**, worst case $O(nm)$. Best for\n  many-pattern search.\n- **KMP** precomputes the **prefix\u002Ffailure function** $\\pi$, so on a mismatch the\n  pattern slides by $q - \\pi[q-1]$ and the text pointer never backs up:\n  worst-case **$O(n+m)$**, justified by an amortised potential argument on $q$.\n- The **Z-function** computes the longest prefix-match at every position in $O(n)$\n  via the **Z-box**; running it on $P\\,\\#\\,T$ and finding $Z[i] \\ge m$ matches in\n  **$O(n+m)$**.\n- $\\pi$ and $Z$ are **interconvertible** in linear time — two encodings of a\n  string's self-similarity. KMP\u002FZ give worst-case guarantees; Rabin–Karp trades\n  that for simplicity and multi-pattern flexibility.\n\n[^clrs-naive]: **CLRS**, Ch. 32 — String Matching (§32.1): the naive matcher and its $O((n-m+1)m)$ bound.\n[^skiena-rk]: **Skiena**, § — String Algorithms: the Rabin–Karp rolling hash and its use for substring search and fingerprinting.\n[^clrs-kmp]: **CLRS**, Ch. 32 — String Matching (§32.4): the prefix function $\\pi$ and the amortised $O(n+m)$ KMP analysis.\n[^erickson-z]: **Erickson**, Ch. — String Matching: the Z-function \u002F failure-function duality and the Z-box linear-time computation.\n",{"text":9555,"minutes":9556,"time":9557,"words":9558},"9 min read",8.955,537300,1791,{"title":142,"description":9532},[9561,9563,9565],{"book":9348,"ref":9562},"Ch. 32 — String Matching",{"book":9429,"ref":9564},"§ — String Algorithms",{"book":9511,"ref":9566},"Ch. — String Matching","available","01.algorithms\u002F05.sequences\u002F04.string-matching",[145],"srj0v0SJNS8wCuUVIsvoybgKkH1k0v7C85GRTHkIV8A",{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":9572,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":9573,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":9574,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":9575,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":9576,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":9577,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":9578,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":9579,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":9580,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":9581,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":9582,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":9583,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":9584,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":9585,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":9586,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":9587,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":9588,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":9589,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":9590,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":9558,"\u002Falgorithms\u002Fsequences\u002Ftries":9591,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":9592,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":9593,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":9594,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":9595,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":9596,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":9597,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":9598,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":9599,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":9600,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":9601,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":9602,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":9603,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":9604,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":9605,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":9606,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":9607,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":9608,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":9609,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":9610,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":9611,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":9612,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":9613,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":9614,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":9615,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":9616,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":9617,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":9588,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":9618,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":9619,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":9620,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":9621,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":9603,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":9622,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":9623,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":9584,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":9624,"\u002Falgorithms":9625,"\u002Ftheory-of-computation":9626,"\u002Fcomputer-architecture":9626,"\u002Fphysical-computing":9626,"\u002Fdatabases":9626,"\u002Fdeep-learning":9626},1763,2107,1738,2628,1723,2048,1697,1044,1542,1565,1679,1586,1388,1465,1971,1455,1533,1483,1578,1481,2704,1658,2070,1978,2080,1568,1451,1291,1543,1883,1443,1599,2038,2241,1744,1678,2288,1929,1657,1412,1554,1418,1713,1798,1694,1762,1534,1595,1262,1495,1630,2306,2142,107,0,{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":9628,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":9629,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":9630,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":9631,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":9632,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":9633,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":9634,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":9635,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":9636,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":9637,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":9638,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":9639,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":9640,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":9641,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":9642,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":9643,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":9644,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":9645,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":9646,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":9647,"\u002Falgorithms\u002Fsequences\u002Ftries":9648,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":9649,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":9650,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":9651,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":9652,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":9653,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":9654,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":9655,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":9656,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":9657,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":9658,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":9659,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":9660,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":9661,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":9662,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":9663,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":9664,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":9665,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":9666,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":9667,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":9668,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":9669,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":9670,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":9671,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":9672,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":9673,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":9674,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":9675,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":9676,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":9677,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":9678,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":9679,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":9680,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":9681,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":9682,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":9683,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":9684,"\u002Falgorithms":9685,"\u002Ftheory-of-computation":9688,"\u002Fcomputer-architecture":9691,"\u002Fphysical-computing":9694,"\u002Fdatabases":9697,"\u002Fdeep-learning":9700},{"path":11,"title":10,"module":5,"summary":14},{"path":17,"title":16,"module":5,"summary":20},{"path":23,"title":22,"module":5,"summary":27},{"path":34,"title":33,"module":29,"summary":37},{"path":40,"title":39,"module":29,"summary":43},{"path":46,"title":45,"module":29,"summary":49},{"path":56,"title":55,"module":51,"summary":59},{"path":62,"title":61,"module":51,"summary":64},{"path":67,"title":66,"module":51,"summary":70},{"path":78,"title":77,"module":72,"summary":81},{"path":84,"title":83,"module":72,"summary":87},{"path":90,"title":89,"module":72,"summary":92},{"path":95,"title":94,"module":72,"summary":98},{"path":101,"title":100,"module":72,"summary":104},{"path":107,"title":106,"module":72,"summary":112},{"path":115,"title":114,"module":72,"summary":119},{"path":126,"title":125,"module":121,"summary":129},{"path":132,"title":131,"module":121,"summary":134},{"path":137,"title":136,"module":121,"summary":140},{"path":143,"title":142,"module":121,"summary":146},{"path":149,"title":148,"module":121,"summary":151},{"path":158,"title":157,"module":153,"summary":162},{"path":165,"title":164,"module":153,"summary":167},{"path":170,"title":169,"module":153,"summary":172},{"path":175,"title":174,"module":153,"summary":177},{"path":180,"title":179,"module":153,"summary":182},{"path":185,"title":184,"module":153,"summary":187},{"path":190,"title":189,"module":153,"summary":192},{"path":195,"title":194,"module":153,"summary":198},{"path":201,"title":200,"module":153,"summary":204},{"path":211,"title":210,"module":206,"summary":213},{"path":216,"title":215,"module":206,"summary":219},{"path":222,"title":221,"module":206,"summary":224},{"path":227,"title":226,"module":206,"summary":229},{"path":236,"title":235,"module":231,"summary":238},{"path":241,"title":240,"module":231,"summary":244},{"path":247,"title":246,"module":231,"summary":249},{"path":252,"title":251,"module":231,"summary":254},{"path":257,"title":256,"module":231,"summary":259},{"path":262,"title":261,"module":231,"summary":264},{"path":267,"title":266,"module":231,"summary":269},{"path":272,"title":271,"module":231,"summary":274},{"path":277,"title":276,"module":231,"summary":279},{"path":282,"title":281,"module":231,"summary":285},{"path":292,"title":291,"module":287,"summary":295},{"path":298,"title":297,"module":287,"summary":300},{"path":303,"title":302,"module":287,"summary":305},{"path":312,"title":311,"module":307,"summary":315},{"path":318,"title":317,"module":307,"summary":320},{"path":323,"title":322,"module":307,"summary":325},{"path":328,"title":327,"module":307,"summary":330},{"path":338,"title":337,"module":332,"summary":341},{"path":344,"title":343,"module":332,"summary":346},{"path":349,"title":348,"module":332,"summary":351},{"path":359,"title":358,"module":353,"summary":362},{"path":364,"title":361,"module":353,"summary":366},{"path":369,"title":368,"module":353,"summary":373},{"path":9686,"title":9687,"module":376,"summary":376},"\u002Falgorithms","Algorithms",{"path":9689,"title":9690,"module":376,"summary":376},"\u002Ftheory-of-computation","Theory of Computation",{"path":9692,"title":9693,"module":376,"summary":376},"\u002Fcomputer-architecture","Computer Architecture",{"path":9695,"title":9696,"module":376,"summary":376},"\u002Fphysical-computing","Physical Computing",{"path":9698,"title":9699,"module":376,"summary":376},"\u002Fdatabases","Databases",{"path":9701,"title":9702,"module":376,"summary":376},"\u002Fdeep-learning","Deep Learning",1781526656139]