[{"data":1,"prerenderedAt":6059},["ShallowReactive",2],{"nav:algorithms":3,"lesson:\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":374,"course-wordcounts":5927,"ref-card-index":5983},[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":343,"blurb":376,"body":377,"description":5892,"extension":5893,"meta":5894,"module":332,"navigation":5896,"path":344,"practice":5897,"rawbody":5908,"readingTime":5909,"seo":5914,"sources":5915,"status":5923,"stem":5924,"summary":346,"topics":5925,"__hash__":5926},"course\u002F01.algorithms\u002F11.computational-geometry\u002F02.convex-hull.md","",{"type":378,"value":379,"toc":5881},"minimark",[380,445,1003,1097,1102,1164,1171,1205,1410,1589,1593,1636,1732,1974,2057,2180,2676,3065,3147,3311,3377,3511,3687,3691,3980,3984,3991,4136,4180,4231,4296,4830,5206,5213,5217,5371,5466,5484,5488,5771,5877],[381,382,383,384,388,389,440,441],"p",{},"The previous lesson gave us a single, deceptively far-reaching operation: the\n",[385,386,387],"strong",{},"orientation"," of an ordered triple of points ",[390,391,394],"span",{"className":392},[393],"katex",[390,395,399],{"className":396,"ariaHidden":398},[397],"katex-html","true",[390,400,403,408,414,419,424,429,432,435],{"className":401},[402],"base",[390,404],{"className":405,"style":407},[406],"strut","height:0.8778em;vertical-align:-0.1944em;",[390,409,413],{"className":410},[411,412],"mord","mathnormal","A",[390,415,418],{"className":416},[417],"mpunct",",",[390,420],{"className":421,"style":423},[422],"mspace","margin-right:0.1667em;",[390,425,428],{"className":426,"style":427},[411,412],"margin-right:0.0502em;","B",[390,430,418],{"className":431},[417],[390,433],{"className":434,"style":423},[422],[390,436,439],{"className":437,"style":438},[411,412],"margin-right:0.0715em;","C",", read off the sign of\nthe ",[442,443,444],"a",{"href":338},"cross product",[390,446,449],{"className":447},[448],"katex-display",[390,450,452],{"className":451},[393],[390,453,455,482,506,527,551,626,733,791,849,950],{"className":454,"ariaHidden":398},[397],[390,456,458,462,467,470,474,479],{"className":457},[402],[390,459],{"className":460,"style":461},[406],"height:1em;vertical-align:-0.25em;",[390,463,466],{"className":464},[465],"mopen","(",[390,468,428],{"className":469,"style":427},[411,412],[390,471],{"className":472,"style":473},[422],"margin-right:0.2222em;",[390,475,478],{"className":476},[477],"mbin","−",[390,480],{"className":481,"style":473},[422],[390,483,485,488,491,496,499,503],{"className":484},[402],[390,486],{"className":487,"style":461},[406],[390,489,413],{"className":490},[411,412],[390,492,495],{"className":493},[494],"mclose",")",[390,497],{"className":498,"style":473},[422],[390,500,502],{"className":501},[477],"×",[390,504],{"className":505,"style":473},[422],[390,507,509,512,515,518,521,524],{"className":508},[402],[390,510],{"className":511,"style":461},[406],[390,513,466],{"className":514},[465],[390,516,439],{"className":517,"style":438},[411,412],[390,519],{"className":520,"style":473},[422],[390,522,478],{"className":523},[477],[390,525],{"className":526,"style":473},[422],[390,528,530,533,536,539,543,548],{"className":529},[402],[390,531],{"className":532,"style":461},[406],[390,534,413],{"className":535},[411,412],[390,537,495],{"className":538},[494],[390,540],{"className":541,"style":542},[422],"margin-right:0.2778em;",[390,544,547],{"className":545},[546],"mrel","=",[390,549],{"className":550,"style":542},[422],[390,552,554,557,560,617,620,623],{"className":553},[402],[390,555],{"className":556,"style":461},[406],[390,558,466],{"className":559},[465],[390,561,563,566],{"className":562},[411],[390,564,428],{"className":565,"style":427},[411,412],[390,567,570],{"className":568},[569],"msupsub",[390,571,575,608],{"className":572},[573,574],"vlist-t","vlist-t2",[390,576,579,603],{"className":577},[578],"vlist-r",[390,580,584],{"className":581,"style":583},[582],"vlist","height:0.1514em;",[390,585,587,592],{"style":586},"top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;",[390,588],{"className":589,"style":591},[590],"pstrut","height:2.7em;",[390,593,599],{"className":594},[595,596,597,598],"sizing","reset-size6","size3","mtight",[390,600,602],{"className":601},[411,412,598],"x",[390,604,607],{"className":605},[606],"vlist-s","​",[390,609,611],{"className":610},[578],[390,612,615],{"className":613,"style":614},[582],"height:0.15em;",[390,616],{},[390,618],{"className":619,"style":473},[422],[390,621,478],{"className":622},[477],[390,624],{"className":625,"style":473},[422],[390,627,629,633,674,677,680,724,727,730],{"className":628},[402],[390,630],{"className":631,"style":632},[406],"height:1.0361em;vertical-align:-0.2861em;",[390,634,636,639],{"className":635},[411],[390,637,413],{"className":638},[411,412],[390,640,642],{"className":641},[569],[390,643,645,666],{"className":644},[573,574],[390,646,648,663],{"className":647},[578],[390,649,651],{"className":650,"style":583},[582],[390,652,654,657],{"style":653},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[390,655],{"className":656,"style":591},[590],[390,658,660],{"className":659},[595,596,597,598],[390,661,602],{"className":662},[411,412,598],[390,664,607],{"className":665},[606],[390,667,669],{"className":668},[578],[390,670,672],{"className":671,"style":614},[582],[390,673],{},[390,675,495],{"className":676},[494],[390,678,466],{"className":679},[465],[390,681,683,686],{"className":682},[411],[390,684,439],{"className":685,"style":438},[411,412],[390,687,689],{"className":688},[569],[390,690,692,715],{"className":691},[573,574],[390,693,695,712],{"className":694},[578],[390,696,698],{"className":697,"style":583},[582],[390,699,701,704],{"style":700},"top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;",[390,702],{"className":703,"style":591},[590],[390,705,707],{"className":706},[595,596,597,598],[390,708,711],{"className":709,"style":710},[411,412,598],"margin-right:0.0359em;","y",[390,713,607],{"className":714},[606],[390,716,718],{"className":717},[578],[390,719,722],{"className":720,"style":721},[582],"height:0.2861em;",[390,723],{},[390,725],{"className":726,"style":473},[422],[390,728,478],{"className":729},[477],[390,731],{"className":732,"style":473},[422],[390,734,736,739,779,782,785,788],{"className":735},[402],[390,737],{"className":738,"style":632},[406],[390,740,742,745],{"className":741},[411],[390,743,413],{"className":744},[411,412],[390,746,748],{"className":747},[569],[390,749,751,771],{"className":750},[573,574],[390,752,754,768],{"className":753},[578],[390,755,757],{"className":756,"style":583},[582],[390,758,759,762],{"style":653},[390,760],{"className":761,"style":591},[590],[390,763,765],{"className":764},[595,596,597,598],[390,766,711],{"className":767,"style":710},[411,412,598],[390,769,607],{"className":770},[606],[390,772,774],{"className":773},[578],[390,775,777],{"className":776,"style":721},[582],[390,778],{},[390,780,495],{"className":781},[494],[390,783],{"className":784,"style":473},[422],[390,786,478],{"className":787},[477],[390,789],{"className":790,"style":473},[422],[390,792,794,797,800,840,843,846],{"className":793},[402],[390,795],{"className":796,"style":632},[406],[390,798,466],{"className":799},[465],[390,801,803,806],{"className":802},[411],[390,804,428],{"className":805,"style":427},[411,412],[390,807,809],{"className":808},[569],[390,810,812,832],{"className":811},[573,574],[390,813,815,829],{"className":814},[578],[390,816,818],{"className":817,"style":583},[582],[390,819,820,823],{"style":586},[390,821],{"className":822,"style":591},[590],[390,824,826],{"className":825},[595,596,597,598],[390,827,711],{"className":828,"style":710},[411,412,598],[390,830,607],{"className":831},[606],[390,833,835],{"className":834},[578],[390,836,838],{"className":837,"style":721},[582],[390,839],{},[390,841],{"className":842,"style":473},[422],[390,844,478],{"className":845},[477],[390,847],{"className":848,"style":473},[422],[390,850,852,855,895,898,901,941,944,947],{"className":851},[402],[390,853],{"className":854,"style":632},[406],[390,856,858,861],{"className":857},[411],[390,859,413],{"className":860},[411,412],[390,862,864],{"className":863},[569],[390,865,867,887],{"className":866},[573,574],[390,868,870,884],{"className":869},[578],[390,871,873],{"className":872,"style":583},[582],[390,874,875,878],{"style":653},[390,876],{"className":877,"style":591},[590],[390,879,881],{"className":880},[595,596,597,598],[390,882,711],{"className":883,"style":710},[411,412,598],[390,885,607],{"className":886},[606],[390,888,890],{"className":889},[578],[390,891,893],{"className":892,"style":721},[582],[390,894],{},[390,896,495],{"className":897},[494],[390,899,466],{"className":900},[465],[390,902,904,907],{"className":903},[411],[390,905,439],{"className":906,"style":438},[411,412],[390,908,910],{"className":909},[569],[390,911,913,933],{"className":912},[573,574],[390,914,916,930],{"className":915},[578],[390,917,919],{"className":918,"style":583},[582],[390,920,921,924],{"style":700},[390,922],{"className":923,"style":591},[590],[390,925,927],{"className":926},[595,596,597,598],[390,928,602],{"className":929},[411,412,598],[390,931,607],{"className":932},[606],[390,934,936],{"className":935},[578],[390,937,939],{"className":938,"style":614},[582],[390,940],{},[390,942],{"className":943,"style":473},[422],[390,945,478],{"className":946},[477],[390,948],{"className":949,"style":473},[422],[390,951,953,956,996,999],{"className":952},[402],[390,954],{"className":955,"style":461},[406],[390,957,959,962],{"className":958},[411],[390,960,413],{"className":961},[411,412],[390,963,965],{"className":964},[569],[390,966,968,988],{"className":967},[573,574],[390,969,971,985],{"className":970},[578],[390,972,974],{"className":973,"style":583},[582],[390,975,976,979],{"style":653},[390,977],{"className":978,"style":591},[590],[390,980,982],{"className":981},[595,596,597,598],[390,983,602],{"className":984},[411,412,598],[390,986,607],{"className":987},[606],[390,989,991],{"className":990},[578],[390,992,994],{"className":993,"style":614},[582],[390,995],{},[390,997,495],{"className":998},[494],[390,1000,1002],{"className":1001},[411],".",[381,1004,1005,1006,1009,1010,1063,1064,1067,1068,1071,1072,1075,1076,1093,1094,1002],{},"A ",[385,1007,1008],{},"positive"," value means ",[390,1011,1013],{"className":1012},[393],[390,1014,1016,1036,1054],{"className":1015,"ariaHidden":398},[397],[390,1017,1019,1023,1026,1029,1033],{"className":1018},[402],[390,1020],{"className":1021,"style":1022},[406],"height:0.6833em;",[390,1024,413],{"className":1025},[411,412],[390,1027],{"className":1028,"style":542},[422],[390,1030,1032],{"className":1031},[546],"→",[390,1034],{"className":1035,"style":542},[422],[390,1037,1039,1042,1045,1048,1051],{"className":1038},[402],[390,1040],{"className":1041,"style":1022},[406],[390,1043,428],{"className":1044,"style":427},[411,412],[390,1046],{"className":1047,"style":542},[422],[390,1049,1032],{"className":1050},[546],[390,1052],{"className":1053,"style":542},[422],[390,1055,1057,1060],{"className":1056},[402],[390,1058],{"className":1059,"style":1022},[406],[390,1061,439],{"className":1062,"style":438},[411,412]," turns ",[385,1065,1066],{},"counterclockwise"," (a left\nturn), a ",[385,1069,1070],{},"negative"," value means clockwise (a right turn), and ",[385,1073,1074],{},"zero"," means\nthe three points are collinear. That one branch-free, multiplication-only test,\nwith no divisions, no square roots, and no angles, is the entire geometric engine\nof this lesson. We now use it to solve the foundational problem of computational\ngeometry: given ",[390,1077,1079],{"className":1078},[393],[390,1080,1082],{"className":1081,"ariaHidden":398},[397],[390,1083,1085,1089],{"className":1084},[402],[390,1086],{"className":1087,"style":1088},[406],"height:0.4306em;",[390,1090,1092],{"className":1091},[411,412],"n"," points in the plane, find their ",[385,1095,1096],{},"convex hull",[1098,1099,1101],"h2",{"id":1100},"the-problem","The problem",[1103,1104,1106],"callout",{"type":1105},"definition",[381,1107,1108,1111,1112,1114,1115,1132,1133,1148,1149,1002],{},[385,1109,1110],{},"Definition."," The ",[385,1113,1096],{}," of a finite point set ",[390,1116,1118],{"className":1117},[393],[390,1119,1121],{"className":1120,"ariaHidden":398},[397],[390,1122,1124,1127],{"className":1123},[402],[390,1125],{"className":1126,"style":1022},[406],[390,1128,1131],{"className":1129,"style":1130},[411,412],"margin-right:0.1389em;","P"," is the smallest\nconvex polygon that contains every point of ",[390,1134,1136],{"className":1135},[393],[390,1137,1139],{"className":1138,"ariaHidden":398},[397],[390,1140,1142,1145],{"className":1141},[402],[390,1143],{"className":1144,"style":1022},[406],[390,1146,1131],{"className":1147,"style":1130},[411,412],". Equivalently, it is the\nintersection of all convex sets containing ",[390,1150,1152],{"className":1151},[393],[390,1153,1155],{"className":1154,"ariaHidden":398},[397],[390,1156,1158,1161],{"className":1157},[402],[390,1159],{"className":1160,"style":1022},[406],[390,1162,1131],{"className":1163,"style":1130},[411,412],[381,1165,1166,1167,1170],{},"The mental picture is exact and worth keeping: hammer a nail into the plane at\neach point, stretch a rubber band wide enough to enclose them all, and let go.\nThe band snaps taut around the outermost points and traces the hull; the points\nit touches are the ",[385,1168,1169],{},"hull vertices",", and everything else lands strictly inside.",[1172,1173,1177,1199],"figure",{"className":1174},[1175,1176],"tikz-figure","tikz-diagram-rendered",[1178,1179,1184],"svg",{"xmlns":1180,"width":1181,"height":1182,"viewBox":1183},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","189.846","150.607","-75 -75 142.384 112.955",[1185,1186,1189,1194],"g",{"stroke":1187,"style":1188},"currentColor","stroke-miterlimit:10;stroke-width:.4",[1190,1191],"path",{"stroke":1192,"d":1193},"none","M-61.077 9.66a2.263 2.263 0 1 0-4.526 0 2.263 2.263 0 0 0 4.526 0M-15.553 32.423a2.263 2.263 0 1 0-4.526 0 2.263 2.263 0 0 0 4.526 0M47.043 15.351a2.263 2.263 0 1 0-4.526 0 2.263 2.263 0 0 0 4.526 0M64.114-35.864a2.263 2.263 0 1 0-4.525 0 2.263 2.263 0 0 0 4.525 0M12.9-70.007a2.263 2.263 0 1 0-4.526 0 2.263 2.263 0 0 0 4.526 0M-49.697-52.936a2.263 2.263 0 1 0-4.525 0 2.263 2.263 0 0 0 4.525 0M-9.862-13.102a2.263 2.263 0 1 0-4.526 0 2.263 2.263 0 0 0 4.526 0M12.9-30.173a2.263 2.263 0 1 0-4.526 0 2.263 2.263 0 0 0 4.526 0M-21.244-35.864a2.263 2.263 0 1 0-4.526 0 2.263 2.263 0 0 0 4.526 0m-2.263 0",[1190,1195],{"fill":1192,"stroke":1196,"d":1197,"style":1198},"var(--tk-accent)","m-63.34 9.66 45.524 22.763L44.78 15.35l17.071-51.215-51.214-34.143-62.596 17.071Z","stroke-width:.8",[1200,1201,1204],"figcaption",{"className":1202},[1203],"tikz-cap","The convex hull is the smallest convex polygon enclosing the points",[381,1206,1207,1208,1212,1213,1269,1270,1295,1296,1313,1314,1366,1367,1002],{},"A hull algorithm must report the vertices in boundary order (say\ncounterclockwise). The naive approaches are slow: testing each ordered pair to\nsee whether all other points lie on one side of the line through it identifies\nhull ",[1209,1210,1211],"em",{},"edges"," in ",[390,1214,1216],{"className":1215},[393],[390,1217,1219],{"className":1218,"ariaHidden":398},[397],[390,1220,1222,1226,1231,1234,1266],{"className":1221},[402],[390,1223],{"className":1224,"style":1225},[406],"height:1.0641em;vertical-align:-0.25em;",[390,1227,1230],{"className":1228,"style":1229},[411,412],"margin-right:0.0278em;","O",[390,1232,466],{"className":1233},[465],[390,1235,1237,1240],{"className":1236},[411],[390,1238,1092],{"className":1239},[411,412],[390,1241,1243],{"className":1242},[569],[390,1244,1246],{"className":1245},[573],[390,1247,1249],{"className":1248},[578],[390,1250,1253],{"className":1251,"style":1252},[582],"height:0.8141em;",[390,1254,1256,1259],{"style":1255},"top:-3.063em;margin-right:0.05em;",[390,1257],{"className":1258,"style":591},[590],[390,1260,1262],{"className":1261},[595,596,597,598],[390,1263,1265],{"className":1264},[411,598],"3",[390,1267,495],{"className":1268},[494],"; gift-wrapping (Jarvis march) pivots from one hull vertex\nto the next in ",[390,1271,1273],{"className":1272},[393],[390,1274,1276],{"className":1275,"ariaHidden":398},[397],[390,1277,1279,1282,1285,1288,1292],{"className":1278},[402],[390,1280],{"className":1281,"style":461},[406],[390,1283,1230],{"className":1284,"style":1229},[411,412],[390,1286,466],{"className":1287},[465],[390,1289,1291],{"className":1290},[411,412],"nh",[390,1293,495],{"className":1294},[494]," time, where ",[390,1297,1299],{"className":1298},[393],[390,1300,1302],{"className":1301,"ariaHidden":398},[397],[390,1303,1305,1309],{"className":1304},[402],[390,1306],{"className":1307,"style":1308},[406],"height:0.6944em;",[390,1310,1312],{"className":1311},[411,412],"h"," is the number of hull vertices, good when\nthe hull is tiny but ",[390,1315,1317],{"className":1316},[393],[390,1318,1320],{"className":1319,"ariaHidden":398},[397],[390,1321,1323,1326,1330,1333,1363],{"className":1322},[402],[390,1324],{"className":1325,"style":1225},[406],[390,1327,1329],{"className":1328},[411],"Θ",[390,1331,466],{"className":1332},[465],[390,1334,1336,1339],{"className":1335},[411],[390,1337,1092],{"className":1338},[411,412],[390,1340,1342],{"className":1341},[569],[390,1343,1345],{"className":1344},[573],[390,1346,1348],{"className":1347},[578],[390,1349,1351],{"className":1350,"style":1252},[582],[390,1352,1353,1356],{"style":1255},[390,1354],{"className":1355,"style":591},[590],[390,1357,1359],{"className":1358},[595,596,597,598],[390,1360,1362],{"className":1361},[411,598],"2",[390,1364,495],{"className":1365},[494]," when every point is a vertex. We can do\nbetter, and provably best, in ",[390,1368,1370],{"className":1369},[393],[390,1371,1373],{"className":1372,"ariaHidden":398},[397],[390,1374,1376,1379,1382,1385,1388,1391,1401,1404,1407],{"className":1375},[402],[390,1377],{"className":1378,"style":461},[406],[390,1380,1230],{"className":1381,"style":1229},[411,412],[390,1383,466],{"className":1384},[465],[390,1386,1092],{"className":1387},[411,412],[390,1389],{"className":1390,"style":423},[422],[390,1392,1395],{"className":1393},[1394],"mop",[390,1396,1400],{"className":1397,"style":1399},[411,1398],"mathrm","margin-right:0.0139em;","log",[390,1402],{"className":1403,"style":423},[422],[390,1405,1092],{"className":1406},[411,412],[390,1408,495],{"className":1409},[494],[1172,1411,1413,1518],{"className":1412},[1175,1176],[1178,1414,1418],{"xmlns":1180,"width":1415,"height":1416,"viewBox":1417},"205.269","166.390","-75 -75 153.951 124.792",[1185,1419,1420,1423,1432,1435,1442,1445,1452,1455,1462,1465,1472,1477,1486],{"stroke":1187,"style":1188},[1190,1421],{"stroke":1192,"d":1422},"M-49.651 11.924a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1185,1424,1426],{"transform":1425},"translate(-10.498 1.062)",[1190,1427],{"d":1428,"fill":1187,"stroke":1187,"className":1429,"style":1431},"M-50.217 13.669L-51.962 13.669Q-51.997 13.669-52.030 13.631Q-52.063 13.594-52.063 13.563Q-52.063 13.493-52.030 13.425Q-51.997 13.357-51.936 13.357Q-51.641 13.357-51.536 13.306Q-51.430 13.256-51.369 13.023L-50.358 8.997Q-50.358 8.958-50.332 8.817Q-50.305 8.676-50.305 8.602Q-50.305 8.206-50.569 8.206Q-50.855 8.206-50.989 8.529Q-51.123 8.852-51.241 9.358Q-51.259 9.441-51.334 9.441L-51.439 9.441Q-51.487 9.441-51.509 9.402Q-51.531 9.362-51.531 9.322Q-51.369 8.703-51.169 8.325Q-50.969 7.947-50.547 7.947Q-50.235 7.947-49.995 8.114Q-49.756 8.281-49.686 8.575Q-49.106 7.947-48.499 7.947Q-48.104 7.947-47.818 8.151Q-47.532 8.356-47.385 8.690Q-47.238 9.024-47.238 9.415Q-47.238 9.841-47.411 10.305Q-47.585 10.768-47.893 11.159Q-48.200 11.550-48.613 11.788Q-49.026 12.025-49.470 12.025Q-49.738 12.025-49.954 11.884Q-50.169 11.744-50.305 11.502L-50.701 13.084Q-50.710 13.137-50.718 13.179Q-50.727 13.220-50.727 13.247Q-50.727 13.357-50.151 13.357Q-50.107 13.357-50.081 13.387Q-50.055 13.418-50.055 13.471Q-50.055 13.669-50.217 13.669M-49.453 11.761Q-49.084 11.761-48.780 11.438Q-48.477 11.115-48.319 10.720Q-48.174 10.364-48.053 9.856Q-47.932 9.349-47.932 9.028Q-47.932 8.698-48.075 8.452Q-48.218 8.206-48.517 8.206Q-49.114 8.206-49.686 9.006Q-49.686 9.037-49.694 9.046L-50.182 10.997Q-50.116 11.318-49.934 11.539Q-49.752 11.761-49.453 11.761",[1430],"tikz-text","stroke-width:0.270",[1190,1433],{"stroke":1192,"d":1434},"M35.707-59.208a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.121 0",[1185,1436,1438],{"transform":1437},"translate(82.908 -76.986)",[1190,1439],{"d":1440,"fill":1187,"stroke":1187,"className":1441,"style":1431},"M-50.151 12.025Q-50.547 12.025-50.833 11.821Q-51.118 11.616-51.265 11.282Q-51.413 10.948-51.413 10.557Q-51.413 10.122-51.239 9.661Q-51.065 9.199-50.753 8.808Q-50.441 8.417-50.031 8.182Q-49.620 7.947-49.180 7.947Q-48.912 7.947-48.695 8.085Q-48.477 8.224-48.345 8.470Q-48.306 8.320-48.198 8.224Q-48.090 8.127-47.950 8.127Q-47.827 8.127-47.743 8.200Q-47.660 8.272-47.660 8.395Q-47.660 8.448-47.669 8.479L-48.288 10.970Q-48.345 11.168-48.345 11.366Q-48.345 11.761-48.082 11.761Q-47.796 11.761-47.662 11.438Q-47.528 11.115-47.409 10.610Q-47.400 10.579-47.376 10.555Q-47.352 10.531-47.317 10.531L-47.211 10.531Q-47.163 10.531-47.141 10.564Q-47.119 10.597-47.119 10.645Q-47.233 11.076-47.324 11.329Q-47.414 11.581-47.607 11.803Q-47.800 12.025-48.099 12.025Q-48.407 12.025-48.655 11.854Q-48.903 11.682-48.974 11.392Q-49.229 11.678-49.525 11.851Q-49.822 12.025-50.151 12.025M-50.134 11.761Q-49.804 11.761-49.494 11.520Q-49.185 11.278-48.974 10.962Q-48.965 10.953-48.965 10.935L-48.468 8.971Q-48.525 8.654-48.717 8.430Q-48.908 8.206-49.198 8.206Q-49.567 8.206-49.866 8.525Q-50.165 8.843-50.332 9.252Q-50.468 9.599-50.593 10.109Q-50.718 10.619-50.718 10.944Q-50.718 11.269-50.580 11.515Q-50.441 11.761-50.134 11.761",[1430],[1190,1443],{"stroke":1192,"d":1444},"M64.16-2.302a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1185,1446,1448],{"transform":1447},"translate(111.829 -20.08)",[1190,1449],{"d":1450,"fill":1187,"stroke":1187,"className":1451,"style":1431},"M-50.151 12.025Q-50.727 12.025-51.048 11.594Q-51.369 11.164-51.369 10.584Q-51.369 10.179-51.285 9.951L-50.406 6.453Q-50.371 6.303-50.371 6.229Q-50.371 6.092-50.938 6.092Q-51.035 6.092-51.035 5.974Q-51.035 5.917-51.004 5.846Q-50.973 5.776-50.907 5.776L-49.686 5.679Q-49.633 5.679-49.600 5.708Q-49.567 5.736-49.567 5.785L-49.567 5.820L-50.226 8.430Q-49.703 7.947-49.180 7.947Q-48.794 7.947-48.503 8.151Q-48.213 8.356-48.066 8.690Q-47.919 9.024-47.919 9.415Q-47.919 9.999-48.222 10.608Q-48.525 11.216-49.046 11.621Q-49.567 12.025-50.151 12.025M-50.134 11.761Q-49.765 11.761-49.461 11.438Q-49.158 11.115-49 10.720Q-48.855 10.364-48.734 9.856Q-48.613 9.349-48.613 9.028Q-48.613 8.703-48.758 8.455Q-48.903 8.206-49.198 8.206Q-49.800 8.206-50.371 9.006L-50.613 9.999Q-50.758 10.623-50.758 10.887Q-50.758 11.230-50.606 11.496Q-50.455 11.761-50.134 11.761",[1430],[1190,1453],{"stroke":1192,"d":1454},"M7.254-30.755a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.121 0",[1185,1456,1458],{"transform":1457},"translate(47.727 -47.853)",[1190,1459],{"d":1460,"fill":1187,"stroke":1187,"className":1461,"style":1431},"M-50.683 10.817Q-50.683 11.212-50.470 11.487Q-50.257 11.761-49.875 11.761Q-49.330 11.761-48.824 11.526Q-48.319 11.291-48.002 10.869Q-47.981 10.834-47.919 10.834Q-47.862 10.834-47.816 10.885Q-47.770 10.935-47.770 10.988Q-47.770 11.023-47.796 11.049Q-48.143 11.524-48.706 11.775Q-49.268 12.025-49.892 12.025Q-50.323 12.025-50.672 11.823Q-51.022 11.621-51.213 11.265Q-51.404 10.909-51.404 10.483Q-51.404 10.021-51.202 9.564Q-51 9.107-50.644 8.738Q-50.288 8.369-49.844 8.158Q-49.400 7.947-48.930 7.947Q-48.662 7.947-48.413 8.028Q-48.165 8.110-47.998 8.288Q-47.831 8.466-47.831 8.729Q-47.831 8.966-47.981 9.144Q-48.130 9.322-48.363 9.322Q-48.503 9.322-48.609 9.228Q-48.714 9.133-48.714 8.988Q-48.714 8.786-48.567 8.632Q-48.420 8.479-48.218 8.479Q-48.323 8.338-48.528 8.272Q-48.732 8.206-48.939 8.206Q-49.475 8.206-49.872 8.635Q-50.270 9.063-50.477 9.683Q-50.683 10.302-50.683 10.817",[1430],[1190,1463],{"stroke":1192,"d":1464},"M64.16 40.377a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1185,1466,1468],{"transform":1467},"translate(119.665 29.515)",[1190,1469],{"d":1470,"fill":1187,"stroke":1187,"className":1471,"style":1431},"M-50.371 13.563Q-50.371 13.493-50.338 13.425Q-50.305 13.357-50.244 13.357Q-49.883 13.357-49.730 13.326Q-49.646 13.308-49.602 13.269Q-49.558 13.229-49.536 13.181Q-49.514 13.132-49.488 13.023L-49.119 11.537Q-49.642 12.025-50.151 12.025Q-50.547 12.025-50.833 11.821Q-51.118 11.616-51.265 11.282Q-51.413 10.948-51.413 10.557Q-51.413 10.122-51.239 9.661Q-51.065 9.199-50.753 8.808Q-50.441 8.417-50.031 8.182Q-49.620 7.947-49.180 7.947Q-48.903 7.947-48.670 8.110Q-48.438 8.272-48.319 8.531Q-48.227 8.386-48.005 8.167Q-47.783 7.947-47.677 7.947Q-47.633 7.947-47.603 7.978Q-47.572 8.008-47.572 8.052L-47.572 8.092L-48.820 13.084Q-48.829 13.137-48.837 13.179Q-48.846 13.220-48.846 13.247Q-48.846 13.357-48.271 13.357Q-48.227 13.357-48.200 13.387Q-48.174 13.418-48.174 13.471Q-48.174 13.669-48.336 13.669L-50.270 13.669Q-50.305 13.669-50.338 13.631Q-50.371 13.594-50.371 13.563M-50.134 11.761Q-49.800 11.761-49.494 11.524Q-49.189 11.287-48.974 10.962L-48.468 8.971Q-48.525 8.654-48.717 8.430Q-48.908 8.206-49.198 8.206Q-49.567 8.206-49.866 8.525Q-50.165 8.843-50.332 9.252Q-50.468 9.599-50.593 10.109Q-50.718 10.619-50.718 10.944Q-50.718 11.269-50.580 11.515Q-50.441 11.761-50.134 11.761",[1430],[1190,1473],{"fill":1192,"stroke":1474,"d":1475,"style":1476},"gray","m-49.99 10.438 81.792-68.16M-49.47 11.636 59.736-2.014M-49.916 10.531 3.276-29.362","stroke-dasharray:3.0,3.0",[1185,1478,1480,1483],{"fill":1196,"stroke":1196,"style":1479},"stroke-width:1.2",[1190,1481],{"fill":1192,"d":1482},"m-49.52 12.487 106.202 26.55",[1190,1484],{"stroke":1192,"d":1485},"m59.786 39.814-4.346-3.725 1.242 2.949-2.484 2.018",[1185,1487,1488],{"fill":1196,"stroke":1196},[1185,1489,1492,1500,1506,1512],{"fill":1196,"stroke":1192,"fontFamily":1490,"fontSize":1491},"cmr8","8",[1185,1493,1495],{"transform":1494},"translate(41.11 31.23)",[1190,1496],{"d":1497,"fill":1196,"stroke":1196,"className":1498,"style":1499},"M-51.492 10.197Q-51.492 9.701-51.242 9.276Q-50.992 8.850-50.572 8.604Q-50.152 8.358-49.652 8.358Q-49.113 8.358-48.722 8.483Q-48.332 8.608-48.332 9.022Q-48.332 9.127-48.382 9.219Q-48.433 9.311-48.525 9.361Q-48.617 9.412-48.726 9.412Q-48.832 9.412-48.923 9.361Q-49.015 9.311-49.066 9.219Q-49.117 9.127-49.117 9.022Q-49.117 8.799-48.949 8.694Q-49.171 8.635-49.644 8.635Q-49.941 8.635-50.156 8.774Q-50.371 8.912-50.502 9.143Q-50.632 9.373-50.691 9.643Q-50.750 9.912-50.750 10.197Q-50.750 10.592-50.617 10.942Q-50.484 11.291-50.212 11.508Q-49.941 11.725-49.543 11.725Q-49.168 11.725-48.892 11.508Q-48.617 11.291-48.515 10.932Q-48.500 10.869-48.437 10.869L-48.332 10.869Q-48.296 10.869-48.271 10.897Q-48.246 10.924-48.246 10.963L-48.246 10.986Q-48.378 11.467-48.763 11.735Q-49.148 12.002-49.652 12.002Q-50.015 12.002-50.349 11.865Q-50.683 11.729-50.943 11.479Q-51.203 11.229-51.347 10.893Q-51.492 10.557-51.492 10.197",[1430],"stroke-width:0.240",[1185,1501,1502],{"transform":1494},[1190,1503],{"d":1504,"fill":1196,"stroke":1196,"className":1505,"style":1499},"M-46.063 11.924L-47.919 11.924L-47.919 11.627Q-47.645 11.627-47.477 11.580Q-47.309 11.533-47.309 11.365L-47.309 7.205Q-47.309 6.990-47.372 6.895Q-47.434 6.799-47.553 6.778Q-47.672 6.756-47.919 6.756L-47.919 6.459L-46.696 6.373L-46.696 9.076Q-46.571 8.865-46.383 8.715Q-46.196 8.565-45.969 8.481Q-45.743 8.397-45.497 8.397Q-44.329 8.397-44.329 9.475L-44.329 11.365Q-44.329 11.533-44.159 11.580Q-43.989 11.627-43.719 11.627L-43.719 11.924L-45.575 11.924L-45.575 11.627Q-45.301 11.627-45.133 11.580Q-44.965 11.533-44.965 11.365L-44.965 9.490Q-44.965 9.108-45.086 8.879Q-45.208 8.651-45.559 8.651Q-45.872 8.651-46.126 8.813Q-46.379 8.975-46.526 9.244Q-46.672 9.514-46.672 9.811L-46.672 11.365Q-46.672 11.533-46.502 11.580Q-46.333 11.627-46.063 11.627L-46.063 11.924M-43.274 10.229Q-43.274 9.725-43.018 9.293Q-42.762 8.861-42.327 8.610Q-41.891 8.358-41.391 8.358Q-41.004 8.358-40.663 8.502Q-40.321 8.647-40.059 8.908Q-39.797 9.170-39.655 9.506Q-39.512 9.842-39.512 10.229Q-39.512 10.721-39.776 11.131Q-40.040 11.541-40.469 11.772Q-40.899 12.002-41.391 12.002Q-41.883 12.002-42.317 11.770Q-42.751 11.537-43.012 11.129Q-43.274 10.721-43.274 10.229M-41.391 11.725Q-40.934 11.725-40.682 11.502Q-40.430 11.279-40.342 10.928Q-40.254 10.576-40.254 10.131Q-40.254 9.701-40.348 9.363Q-40.442 9.026-40.696 8.819Q-40.950 8.611-41.391 8.611Q-42.040 8.611-42.284 9.028Q-42.528 9.444-42.528 10.131Q-42.528 10.576-42.440 10.928Q-42.352 11.279-42.100 11.502Q-41.848 11.725-41.391 11.725M-38.985 11.916L-38.985 10.694Q-38.985 10.666-38.954 10.635Q-38.922 10.604-38.899 10.604L-38.794 10.604Q-38.723 10.604-38.708 10.666Q-38.645 10.986-38.506 11.227Q-38.368 11.467-38.135 11.608Q-37.903 11.748-37.594 11.748Q-37.356 11.748-37.147 11.688Q-36.938 11.627-36.801 11.479Q-36.665 11.330-36.665 11.084Q-36.665 10.830-36.876 10.664Q-37.086 10.498-37.356 10.444L-37.977 10.330Q-38.383 10.252-38.684 9.996Q-38.985 9.740-38.985 9.365Q-38.985 8.998-38.784 8.776Q-38.583 8.553-38.258 8.455Q-37.934 8.358-37.594 8.358Q-37.129 8.358-36.833 8.565L-36.610 8.381Q-36.586 8.358-36.555 8.358L-36.504 8.358Q-36.473 8.358-36.446 8.385Q-36.419 8.412-36.419 8.444L-36.419 9.428Q-36.419 9.459-36.444 9.488Q-36.469 9.518-36.504 9.518L-36.610 9.518Q-36.645 9.518-36.672 9.490Q-36.700 9.463-36.700 9.428Q-36.700 9.029-36.952 8.809Q-37.204 8.588-37.602 8.588Q-37.958 8.588-38.241 8.711Q-38.524 8.834-38.524 9.139Q-38.524 9.358-38.323 9.490Q-38.122 9.623-37.876 9.666L-37.251 9.779Q-36.821 9.869-36.512 10.166Q-36.204 10.463-36.204 10.877Q-36.204 11.447-36.602 11.725Q-37.001 12.002-37.594 12.002Q-38.145 12.002-38.497 11.666L-38.794 11.979Q-38.817 12.002-38.852 12.002L-38.899 12.002Q-38.922 12.002-38.954 11.971Q-38.985 11.940-38.985 11.916M-35.676 10.170Q-35.676 9.690-35.444 9.274Q-35.211 8.858-34.801 8.608Q-34.391 8.358-33.915 8.358Q-33.184 8.358-32.786 8.799Q-32.387 9.240-32.387 9.971Q-32.387 10.076-32.481 10.100L-34.930 10.100L-34.930 10.170Q-34.930 10.580-34.809 10.936Q-34.688 11.291-34.417 11.508Q-34.145 11.725-33.715 11.725Q-33.352 11.725-33.055 11.496Q-32.758 11.268-32.657 10.916Q-32.649 10.869-32.563 10.854L-32.481 10.854Q-32.387 10.881-32.387 10.963Q-32.387 10.971-32.395 11.002Q-32.458 11.229-32.596 11.412Q-32.735 11.596-32.926 11.729Q-33.118 11.861-33.336 11.932Q-33.555 12.002-33.794 12.002Q-34.165 12.002-34.502 11.865Q-34.840 11.729-35.108 11.477Q-35.376 11.225-35.526 10.885Q-35.676 10.545-35.676 10.170M-34.922 9.861L-32.961 9.861Q-32.961 9.557-33.063 9.266Q-33.165 8.975-33.381 8.793Q-33.598 8.611-33.915 8.611Q-34.215 8.611-34.446 8.799Q-34.676 8.986-34.799 9.278Q-34.922 9.569-34.922 9.861M-29.969 11.924L-31.825 11.924L-31.825 11.627Q-31.551 11.627-31.383 11.580Q-31.215 11.533-31.215 11.365L-31.215 9.229Q-31.215 9.014-31.278 8.918Q-31.340 8.822-31.460 8.801Q-31.579 8.779-31.825 8.779L-31.825 8.483L-30.633 8.397L-30.633 9.131Q-30.520 8.916-30.327 8.748Q-30.133 8.580-29.895 8.488Q-29.657 8.397-29.403 8.397Q-28.235 8.397-28.235 9.475L-28.235 11.365Q-28.235 11.533-28.065 11.580Q-27.895 11.627-27.626 11.627L-27.626 11.924L-29.481 11.924L-29.481 11.627Q-29.208 11.627-29.040 11.580Q-28.872 11.533-28.872 11.365L-28.872 9.490Q-28.872 9.108-28.993 8.879Q-29.114 8.651-29.465 8.651Q-29.778 8.651-30.032 8.813Q-30.286 8.975-30.432 9.244Q-30.579 9.514-30.579 9.811L-30.579 11.365Q-30.579 11.533-30.409 11.580Q-30.239 11.627-29.969 11.627L-29.969 11.924M-26.700 11.459Q-26.700 11.276-26.563 11.139Q-26.426 11.002-26.235 11.002Q-26.044 11.002-25.911 11.135Q-25.778 11.268-25.778 11.459Q-25.778 11.658-25.911 11.791Q-26.044 11.924-26.235 11.924Q-26.426 11.924-26.563 11.787Q-26.700 11.651-26.700 11.459M-26.700 8.932Q-26.700 8.748-26.563 8.611Q-26.426 8.475-26.235 8.475Q-26.044 8.475-25.911 8.608Q-25.778 8.740-25.778 8.932Q-25.778 9.131-25.911 9.264Q-26.044 9.397-26.235 9.397Q-26.426 9.397-26.563 9.260Q-26.700 9.123-26.700 8.932",[1430],[1185,1507,1508],{"transform":1494},[1190,1509],{"d":1510,"fill":1196,"stroke":1196,"className":1511,"style":1499},"M-20.931 11.092Q-20.931 10.608-20.529 10.313Q-20.126 10.018-19.576 9.899Q-19.025 9.779-18.533 9.779L-18.533 9.490Q-18.533 9.264-18.648 9.057Q-18.763 8.850-18.960 8.731Q-19.158 8.611-19.388 8.611Q-19.814 8.611-20.099 8.717Q-20.029 8.744-19.982 8.799Q-19.935 8.854-19.910 8.924Q-19.884 8.994-19.884 9.069Q-19.884 9.174-19.935 9.266Q-19.986 9.358-20.078 9.408Q-20.169 9.459-20.275 9.459Q-20.380 9.459-20.472 9.408Q-20.564 9.358-20.615 9.266Q-20.665 9.174-20.665 9.069Q-20.665 8.651-20.277 8.504Q-19.888 8.358-19.388 8.358Q-19.056 8.358-18.703 8.488Q-18.349 8.619-18.121 8.873Q-17.892 9.127-17.892 9.475L-17.892 11.276Q-17.892 11.408-17.820 11.518Q-17.747 11.627-17.619 11.627Q-17.494 11.627-17.425 11.522Q-17.357 11.416-17.357 11.276L-17.357 10.764L-17.076 10.764L-17.076 11.276Q-17.076 11.479-17.193 11.637Q-17.310 11.795-17.492 11.879Q-17.673 11.963-17.876 11.963Q-18.107 11.963-18.259 11.791Q-18.412 11.619-18.443 11.389Q-18.603 11.670-18.912 11.836Q-19.220 12.002-19.572 12.002Q-20.083 12.002-20.507 11.779Q-20.931 11.557-20.931 11.092M-20.244 11.092Q-20.244 11.377-20.017 11.563Q-19.790 11.748-19.497 11.748Q-19.251 11.748-19.027 11.631Q-18.802 11.514-18.667 11.311Q-18.533 11.108-18.533 10.854L-18.533 10.022Q-18.798 10.022-19.083 10.076Q-19.369 10.131-19.640 10.260Q-19.912 10.389-20.078 10.596Q-20.244 10.803-20.244 11.092M-14.869 11.924L-16.701 11.924L-16.701 11.627Q-16.427 11.627-16.259 11.580Q-16.091 11.533-16.091 11.365L-16.091 7.205Q-16.091 6.990-16.154 6.895Q-16.216 6.799-16.335 6.778Q-16.454 6.756-16.701 6.756L-16.701 6.459L-15.478 6.373L-15.478 11.365Q-15.478 11.533-15.310 11.580Q-15.142 11.627-14.869 11.627L-14.869 11.924M-12.509 11.924L-14.341 11.924L-14.341 11.627Q-14.068 11.627-13.900 11.580Q-13.732 11.533-13.732 11.365L-13.732 7.205Q-13.732 6.990-13.794 6.895Q-13.857 6.799-13.976 6.778Q-14.095 6.756-14.341 6.756L-14.341 6.459L-13.119 6.373L-13.119 11.365Q-13.119 11.533-12.951 11.580Q-12.783 11.627-12.509 11.627",[1430],[1185,1513,1514],{"transform":1494},[1190,1515],{"d":1516,"fill":1196,"stroke":1196,"className":1517,"style":1499},"M-7.309 11.924L-9.141 11.924L-9.141 11.627Q-8.867 11.627-8.699 11.580Q-8.531 11.533-8.531 11.365L-8.531 7.205Q-8.531 6.990-8.594 6.895Q-8.656 6.799-8.775 6.778Q-8.895 6.756-9.141 6.756L-9.141 6.459L-7.918 6.373L-7.918 11.365Q-7.918 11.533-7.750 11.580Q-7.582 11.627-7.309 11.627L-7.309 11.924M-6.863 10.170Q-6.863 9.690-6.631 9.274Q-6.399 8.858-5.988 8.608Q-5.578 8.358-5.102 8.358Q-4.371 8.358-3.973 8.799Q-3.574 9.240-3.574 9.971Q-3.574 10.076-3.668 10.100L-6.117 10.100L-6.117 10.170Q-6.117 10.580-5.996 10.936Q-5.875 11.291-5.604 11.508Q-5.332 11.725-4.902 11.725Q-4.539 11.725-4.242 11.496Q-3.945 11.268-3.844 10.916Q-3.836 10.869-3.750 10.854L-3.668 10.854Q-3.574 10.881-3.574 10.963Q-3.574 10.971-3.582 11.002Q-3.645 11.229-3.783 11.412Q-3.922 11.596-4.113 11.729Q-4.305 11.861-4.524 11.932Q-4.742 12.002-4.981 12.002Q-5.352 12.002-5.690 11.865Q-6.027 11.729-6.295 11.477Q-6.563 11.225-6.713 10.885Q-6.863 10.545-6.863 10.170M-6.109 9.861L-4.149 9.861Q-4.149 9.557-4.250 9.266Q-4.352 8.975-4.568 8.793Q-4.785 8.611-5.102 8.611Q-5.402 8.611-5.633 8.799Q-5.863 8.986-5.986 9.278Q-6.109 9.569-6.109 9.861M-1.020 11.924L-3.004 11.924L-3.004 11.627Q-2.731 11.627-2.563 11.580Q-2.395 11.533-2.395 11.365L-2.395 8.772L-3.035 8.772L-3.035 8.475L-2.395 8.475L-2.395 7.541Q-2.395 7.276-2.277 7.039Q-2.160 6.803-1.967 6.639Q-1.774 6.475-1.525 6.383Q-1.277 6.291-1.012 6.291Q-0.727 6.291-0.502 6.449Q-0.277 6.608-0.277 6.885Q-0.277 7.041-0.383 7.151Q-0.488 7.260-0.652 7.260Q-0.809 7.260-0.918 7.151Q-1.027 7.041-1.027 6.885Q-1.027 6.678-0.867 6.572Q-0.965 6.549-1.059 6.549Q-1.289 6.549-1.461 6.705Q-1.633 6.861-1.719 7.098Q-1.805 7.334-1.805 7.557L-1.805 8.475L-0.836 8.475L-0.836 8.772L-1.781 8.772L-1.781 11.365Q-1.781 11.533-1.555 11.580Q-1.328 11.627-1.020 11.627L-1.020 11.924M0.133 10.963L0.133 8.772L-0.570 8.772L-0.570 8.518Q-0.215 8.518 0.027 8.285Q0.269 8.053 0.381 7.705Q0.492 7.358 0.492 7.002L0.773 7.002L0.773 8.475L1.949 8.475L1.949 8.772L0.773 8.772L0.773 10.947Q0.773 11.268 0.893 11.496Q1.012 11.725 1.293 11.725Q1.473 11.725 1.590 11.602Q1.707 11.479 1.760 11.299Q1.812 11.119 1.812 10.947L1.812 10.475L2.094 10.475L2.094 10.963Q2.094 11.217 1.988 11.457Q1.883 11.697 1.685 11.850Q1.488 12.002 1.230 12.002Q0.914 12.002 0.662 11.879Q0.410 11.756 0.271 11.522Q0.133 11.287 0.133 10.963",[1430],[1200,1519,1521,1522,1538,1539,1555,1556],{"className":1520},[1203],"Gift-wrapping: from ",[390,1523,1525],{"className":1524},[393],[390,1526,1528],{"className":1527,"ariaHidden":398},[397],[390,1529,1531,1535],{"className":1530},[402],[390,1532],{"className":1533,"style":1534},[406],"height:0.625em;vertical-align:-0.1944em;",[390,1536,381],{"className":1537},[411,412]," pick ",[390,1540,1542],{"className":1541},[393],[390,1543,1545],{"className":1544,"ariaHidden":398},[397],[390,1546,1548,1551],{"className":1547},[402],[390,1549],{"className":1550,"style":1534},[406],[390,1552,1554],{"className":1553,"style":710},[411,412],"q"," so every other point lies left of ray ",[390,1557,1559],{"className":1558},[393],[390,1560,1562,1580],{"className":1561,"ariaHidden":398},[397],[390,1563,1565,1568,1571,1574,1577],{"className":1564},[402],[390,1566],{"className":1567,"style":1534},[406],[390,1569,381],{"className":1570},[411,412],[390,1572],{"className":1573,"style":542},[422],[390,1575,1032],{"className":1576},[546],[390,1578],{"className":1579,"style":542},[422],[390,1581,1583,1586],{"className":1582},[402],[390,1584],{"className":1585,"style":1534},[406],[390,1587,1554],{"className":1588,"style":710},[411,412],[1098,1590,1592],{"id":1591},"andrews-monotone-chain","Andrew's monotone chain",[381,1594,1595,1596,1635],{},"The cleanest ",[390,1597,1599],{"className":1598},[393],[390,1600,1602],{"className":1601,"ariaHidden":398},[397],[390,1603,1605,1608,1611,1614,1617,1620,1626,1629,1632],{"className":1604},[402],[390,1606],{"className":1607,"style":461},[406],[390,1609,1230],{"className":1610,"style":1229},[411,412],[390,1612,466],{"className":1613},[465],[390,1615,1092],{"className":1616},[411,412],[390,1618],{"className":1619,"style":423},[422],[390,1621,1623],{"className":1622},[1394],[390,1624,1400],{"className":1625,"style":1399},[411,1398],[390,1627],{"className":1628,"style":423},[422],[390,1630,1092],{"className":1631},[411,412],[390,1633,495],{"className":1634},[494]," algorithm sorts the points once and sweeps them with a\nstack, building the boundary in two passes.",[1103,1637,1639],{"type":1638},"note",[381,1640,1641,1644,1645,1675,1676,1691,1692,1707,1708,1711,1712,1715,1716,1719,1720,1723,1724,1727,1728,1731],{},[385,1642,1643],{},"Idea."," Sort the points by ",[390,1646,1648],{"className":1647},[393],[390,1649,1651],{"className":1650,"ariaHidden":398},[397],[390,1652,1654,1657,1660,1663,1666,1669,1672],{"className":1653},[402],[390,1655],{"className":1656,"style":461},[406],[390,1658,466],{"className":1659},[465],[390,1661,602],{"className":1662},[411,412],[390,1664,418],{"className":1665},[417],[390,1667],{"className":1668,"style":423},[422],[390,1670,711],{"className":1671,"style":710},[411,412],[390,1673,495],{"className":1674},[494]," — primarily by ",[390,1677,1679],{"className":1678},[393],[390,1680,1682],{"className":1681,"ariaHidden":398},[397],[390,1683,1685,1688],{"className":1684},[402],[390,1686],{"className":1687,"style":1088},[406],[390,1689,602],{"className":1690},[411,412],", breaking ties by ",[390,1693,1695],{"className":1694},[393],[390,1696,1698],{"className":1697,"ariaHidden":398},[397],[390,1699,1701,1704],{"className":1700},[402],[390,1702],{"className":1703,"style":1534},[406],[390,1705,711],{"className":1706,"style":710},[411,412],".\nSweep ",[385,1709,1710],{},"left to right"," to build the ",[385,1713,1714],{},"lower hull",", then ",[385,1717,1718],{},"right to left"," to\nbuild the ",[385,1721,1722],{},"upper hull",". In each sweep, maintain the invariant that the points\ncurrently on the stack make ",[1209,1725,1726],{},"only counterclockwise turns",". Before pushing a new\npoint, ",[385,1729,1730],{},"pop"," the top of the stack while the last three points fail to turn\nleft. Concatenating the two chains closes the polygon.",[381,1733,1734,1735,1759,1760,1775,1776,1827,1828,1859,1860,1875,1876,1905,1906,1921,1922,1925,1926,1941,1942,1957,1958,1973],{},"The pop condition is pure orientation. Suppose the stack ends in ",[390,1736,1738],{"className":1737},[393],[390,1739,1741],{"className":1740,"ariaHidden":398},[397],[390,1742,1744,1747,1750,1753,1756],{"className":1743},[402],[390,1745],{"className":1746,"style":407},[406],[390,1748,413],{"className":1749},[411,412],[390,1751,418],{"className":1752},[417],[390,1754],{"className":1755,"style":423},[422],[390,1757,428],{"className":1758,"style":427},[411,412]," and we are\nabout to add ",[390,1761,1763],{"className":1762},[393],[390,1764,1766],{"className":1765,"ariaHidden":398},[397],[390,1767,1769,1772],{"className":1768},[402],[390,1770],{"className":1771,"style":1022},[406],[390,1773,439],{"className":1774,"style":438},[411,412],". If ",[390,1777,1779],{"className":1778},[393],[390,1780,1782,1800,1818],{"className":1781,"ariaHidden":398},[397],[390,1783,1785,1788,1791,1794,1797],{"className":1784},[402],[390,1786],{"className":1787,"style":1022},[406],[390,1789,413],{"className":1790},[411,412],[390,1792],{"className":1793,"style":542},[422],[390,1795,1032],{"className":1796},[546],[390,1798],{"className":1799,"style":542},[422],[390,1801,1803,1806,1809,1812,1815],{"className":1802},[402],[390,1804],{"className":1805,"style":1022},[406],[390,1807,428],{"className":1808,"style":427},[411,412],[390,1810],{"className":1811,"style":542},[422],[390,1813,1032],{"className":1814},[546],[390,1816],{"className":1817,"style":542},[422],[390,1819,1821,1824],{"className":1820},[402],[390,1822],{"className":1823,"style":1022},[406],[390,1825,439],{"className":1826,"style":438},[411,412]," is a left turn (cross product ",[390,1829,1831],{"className":1830},[393],[390,1832,1834,1848],{"className":1833,"ariaHidden":398},[397],[390,1835,1837,1841,1845],{"className":1836},[402],[390,1838],{"className":1839,"style":1840},[406],"height:0.5782em;vertical-align:-0.0391em;",[390,1842,1844],{"className":1843},[546],">",[390,1846],{"className":1847,"style":542},[422],[390,1849,1851,1855],{"className":1850},[402],[390,1852],{"className":1853,"style":1854},[406],"height:0.6444em;",[390,1856,1858],{"className":1857},[411],"0","), ",[390,1861,1863],{"className":1862},[393],[390,1864,1866],{"className":1865,"ariaHidden":398},[397],[390,1867,1869,1872],{"className":1868},[402],[390,1870],{"className":1871,"style":1022},[406],[390,1873,428],{"className":1874,"style":427},[411,412]," is\na genuine corner of the hull-so-far and we keep it. If it is a right turn or\ncollinear (cross product ",[390,1877,1879],{"className":1878},[393],[390,1880,1882,1896],{"className":1881,"ariaHidden":398},[397],[390,1883,1885,1889,1893],{"className":1884},[402],[390,1886],{"className":1887,"style":1888},[406],"height:0.7719em;vertical-align:-0.136em;",[390,1890,1892],{"className":1891},[546],"≤",[390,1894],{"className":1895,"style":542},[422],[390,1897,1899,1902],{"className":1898},[402],[390,1900],{"className":1901,"style":1854},[406],[390,1903,1858],{"className":1904},[411],"), then ",[390,1907,1909],{"className":1908},[393],[390,1910,1912],{"className":1911,"ariaHidden":398},[397],[390,1913,1915,1918],{"className":1914},[402],[390,1916],{"className":1917,"style":1022},[406],[390,1919,428],{"className":1920,"style":427},[411,412]," is ",[1554,1923,1924],{},"inside"," the corner that ",[390,1927,1929],{"className":1928},[393],[390,1930,1932],{"className":1931,"ariaHidden":398},[397],[390,1933,1935,1938],{"className":1934},[402],[390,1936],{"className":1937,"style":1022},[406],[390,1939,439],{"className":1940,"style":438},[411,412]," opens\nup (the rubber band would not touch ",[390,1943,1945],{"className":1944},[393],[390,1946,1948],{"className":1947,"ariaHidden":398},[397],[390,1949,1951,1954],{"className":1950},[402],[390,1952],{"className":1953,"style":1022},[406],[390,1955,428],{"className":1956,"style":427},[411,412],"), so we pop ",[390,1959,1961],{"className":1960},[393],[390,1962,1964],{"className":1963,"ariaHidden":398},[397],[390,1965,1967,1970],{"className":1966},[402],[390,1968],{"className":1969,"style":1022},[406],[390,1971,428],{"className":1972,"style":427},[411,412]," and re-test with the new\ntop. This is exactly the rejection drawn below.",[1172,1975,1977,2053],{"className":1976},[1175,1176],[1178,1978,1982],{"xmlns":1180,"width":1979,"height":1980,"viewBox":1981},"215.017","105.526","-75 -75 161.262 79.145",[1185,1983,1984,1987,1993,1996,2004,2034,2041,2045],{"stroke":1187,"style":1188},[1190,1985],{"stroke":1192,"d":1986},"M-48.692-12.825a2.546 2.546 0 1 0-5.091 0 2.546 2.546 0 0 0 5.091 0m-2.545 0",[1185,1988,1990],{"fill":1989},"var(--tk-warn)",[1190,1991],{"stroke":1192,"d":1992},"M8.214-52.658a2.546 2.546 0 1 0-5.092 0 2.546 2.546 0 0 0 5.092 0m-2.546 0",[1190,1994],{"stroke":1192,"d":1995},"M70.81-27.051a2.546 2.546 0 1 0-5.092 0 2.546 2.546 0 0 0 5.092 0m-2.546 0",[1185,1997,1999],{"transform":1998},"translate(-11.033 10.366)",[1190,2000],{"d":2001,"fill":1187,"stroke":1187,"className":2002,"style":2003},"M-48.815-12.825L-50.788-12.825Q-50.885-12.825-50.885-12.957Q-50.846-13.177-50.758-13.177Q-50.353-13.177-50.058-13.338Q-49.762-13.499-49.548-13.836Q-49.528-13.855-49.528-13.855L-45.959-19.876Q-45.881-19.983-45.768-19.983L-45.636-19.983Q-45.607-19.983-45.578-19.971Q-45.549-19.959-45.527-19.932Q-45.505-19.905-45.505-19.876L-44.899-13.416Q-44.899-13.372-44.855-13.284Q-44.758-13.177-44.108-13.177Q-44.006-13.177-44.006-13.045Q-44.040-12.913-44.062-12.869Q-44.084-12.825-44.176-12.825L-46.676-12.825Q-46.769-12.825-46.769-12.957Q-46.716-13.177-46.637-13.177Q-45.846-13.177-45.798-13.445L-45.949-15.096L-48.415-15.096L-49.216-13.753Q-49.289-13.645-49.289-13.504Q-49.289-13.328-49.120-13.252Q-48.952-13.177-48.747-13.177Q-48.649-13.177-48.649-13.045Q-48.683-12.903-48.703-12.864Q-48.722-12.825-48.815-12.825M-46.286-18.684L-48.219-15.447L-45.988-15.447",[1430],"stroke-width:0.300",[1185,2005,2006],{"fill":1989,"stroke":1989},[1185,2007,2009,2016,2022,2028],{"fill":1989,"stroke":1192,"fontSize":2008},"10",[1185,2010,2012],{"transform":2011},"translate(31.195 -48.612)",[1190,2013],{"d":2014,"fill":1989,"stroke":1989,"className":2015,"style":2003},"M-46.935-12.825L-50.739-12.825Q-50.837-12.825-50.837-12.957Q-50.832-12.981-50.817-13.040Q-50.802-13.098-50.778-13.137Q-50.754-13.177-50.705-13.177Q-50.422-13.177-50.212-13.191Q-50.002-13.206-49.855-13.245Q-49.738-13.289-49.665-13.513L-48.298-19.007Q-48.278-19.104-48.278-19.143Q-48.278-19.251-48.395-19.265Q-48.586-19.304-49.118-19.304Q-49.216-19.304-49.216-19.436Q-49.211-19.461-49.196-19.522Q-49.181-19.583-49.154-19.619Q-49.128-19.656-49.089-19.656L-45.505-19.656Q-45.177-19.656-44.858-19.575Q-44.538-19.495-44.267-19.319Q-43.996-19.143-43.837-18.882Q-43.678-18.621-43.678-18.274Q-43.678-17.898-43.871-17.576Q-44.064-17.254-44.369-17.014Q-44.675-16.775-45.029-16.621Q-45.383-16.468-45.768-16.394Q-45.495-16.394-45.214-16.287Q-44.933-16.179-44.714-15.994Q-44.494-15.808-44.360-15.550Q-44.225-15.291-44.225-14.993Q-44.225-14.392-44.645-13.894Q-45.065-13.396-45.702-13.111Q-46.340-12.825-46.935-12.825M-48.898-13.255Q-48.898-13.177-48.556-13.177L-47.126-13.177Q-46.637-13.177-46.188-13.448Q-45.739-13.719-45.468-14.168Q-45.197-14.617-45.197-15.105Q-45.197-15.403-45.321-15.669Q-45.446-15.935-45.680-16.089Q-45.915-16.243-46.217-16.243L-48.166-16.243L-48.859-13.474Q-48.898-13.338-48.898-13.255M-47.487-18.963L-48.097-16.507L-46.579-16.507Q-46.100-16.507-45.649-16.751Q-45.197-16.995-44.911-17.415Q-44.626-17.835-44.626-18.304Q-44.626-18.738-44.897-19.021Q-45.168-19.304-45.597-19.304L-46.969-19.304Q-47.238-19.304-47.331-19.256Q-47.424-19.207-47.487-18.963",[1430],[1185,2017,2018],{"transform":2011},[1190,2019],{"d":2020,"fill":1989,"stroke":1989,"className":2021,"style":2003},"M-36.716-10.345Q-37.273-10.784-37.676-11.353Q-38.079-11.922-38.335-12.566Q-38.591-13.211-38.718-13.914Q-38.845-14.617-38.845-15.325Q-38.845-16.043-38.718-16.746Q-38.591-17.449-38.330-18.098Q-38.069-18.748-37.664-19.314Q-37.258-19.881-36.716-20.305Q-36.716-20.325-36.668-20.325L-36.575-20.325Q-36.546-20.325-36.521-20.298Q-36.497-20.271-36.497-20.237Q-36.497-20.193-36.516-20.174Q-37.005-19.695-37.329-19.148Q-37.654-18.601-37.852-17.984Q-38.049-17.366-38.137-16.704Q-38.225-16.043-38.225-15.325Q-38.225-12.146-36.526-10.496Q-36.497-10.467-36.497-10.413Q-36.497-10.388-36.524-10.357Q-36.550-10.325-36.575-10.325L-36.668-10.325Q-36.716-10.325-36.716-10.345M-33.386-10.887L-35.676-10.887L-35.676-11.233Q-35.335-11.233-35.115-11.292Q-34.895-11.350-34.895-11.555L-34.895-16.375Q-34.895-16.648-35.090-16.717Q-35.286-16.785-35.676-16.785L-35.676-17.137L-34.197-17.244L-34.197-16.624Q-33.923-16.927-33.560-17.085Q-33.196-17.244-32.786-17.244Q-32.195-17.244-31.721-16.924Q-31.248-16.604-30.982-16.084Q-30.715-15.564-30.715-14.983Q-30.715-14.378-31.011-13.855Q-31.306-13.333-31.817-13.023Q-32.327-12.713-32.937-12.713Q-33.665-12.713-34.168-13.304L-34.168-11.555Q-34.168-11.350-33.945-11.292Q-33.723-11.233-33.386-11.233L-33.386-10.887M-34.168-16.184L-34.168-13.797Q-33.992-13.440-33.679-13.208Q-33.367-12.976-32.996-12.976Q-32.649-12.976-32.383-13.162Q-32.117-13.347-31.936-13.660Q-31.755-13.972-31.670-14.317Q-31.585-14.661-31.585-14.983Q-31.585-15.384-31.729-15.850Q-31.873-16.316-32.168-16.636Q-32.463-16.956-32.883-16.956Q-33.289-16.956-33.628-16.748Q-33.967-16.541-34.168-16.184",[1430],[1185,2023,2024],{"transform":2011},[1190,2025],{"d":2026,"fill":1989,"stroke":1989,"className":2027,"style":2003},"M-27.595-12.713Q-28.196-12.713-28.708-13.018Q-29.221-13.323-29.519-13.836Q-29.817-14.348-29.817-14.954Q-29.817-15.413-29.653-15.838Q-29.490-16.262-29.184-16.597Q-28.879-16.931-28.474-17.119Q-28.069-17.307-27.595-17.307Q-26.980-17.307-26.474-16.983Q-25.969-16.658-25.676-16.114Q-25.383-15.569-25.383-14.954Q-25.383-14.353-25.681-13.838Q-25.979-13.323-26.489-13.018Q-26.999-12.713-27.595-12.713M-27.595-13.006Q-26.794-13.006-26.526-13.587Q-26.257-14.168-26.257-15.066Q-26.257-15.569-26.311-15.899Q-26.365-16.228-26.545-16.497Q-26.657-16.663-26.831-16.787Q-27.004-16.912-27.197-16.978Q-27.390-17.044-27.595-17.044Q-27.907-17.044-28.188-16.902Q-28.469-16.761-28.655-16.497Q-28.840-16.214-28.891-15.874Q-28.943-15.535-28.943-15.066Q-28.943-14.505-28.845-14.058Q-28.747-13.611-28.452-13.308Q-28.157-13.006-27.595-13.006M-22.546-10.887L-24.836-10.887L-24.836-11.233Q-24.494-11.233-24.275-11.292Q-24.055-11.350-24.055-11.555L-24.055-16.375Q-24.055-16.648-24.250-16.717Q-24.446-16.785-24.836-16.785L-24.836-17.137L-23.357-17.244L-23.357-16.624Q-23.083-16.927-22.720-17.085Q-22.356-17.244-21.946-17.244Q-21.355-17.244-20.881-16.924Q-20.407-16.604-20.141-16.084Q-19.875-15.564-19.875-14.983Q-19.875-14.378-20.171-13.855Q-20.466-13.333-20.976-13.023Q-21.487-12.713-22.097-12.713Q-22.824-12.713-23.327-13.304L-23.327-11.555Q-23.327-11.350-23.105-11.292Q-22.883-11.233-22.546-11.233L-22.546-10.887M-23.327-16.184L-23.327-13.797Q-23.152-13.440-22.839-13.208Q-22.527-12.976-22.156-12.976Q-21.809-12.976-21.543-13.162Q-21.277-13.347-21.096-13.660Q-20.915-13.972-20.830-14.317Q-20.744-14.661-20.744-14.983Q-20.744-15.384-20.888-15.850Q-21.032-16.316-21.328-16.636Q-21.623-16.956-22.043-16.956Q-22.449-16.956-22.788-16.748Q-23.127-16.541-23.327-16.184M-16.994-10.887L-19.284-10.887L-19.284-11.233Q-18.943-11.233-18.723-11.292Q-18.503-11.350-18.503-11.555L-18.503-16.375Q-18.503-16.648-18.699-16.717Q-18.894-16.785-19.284-16.785L-19.284-17.137L-17.805-17.244L-17.805-16.624Q-17.532-16.927-17.168-17.085Q-16.804-17.244-16.394-17.244Q-15.803-17.244-15.329-16.924Q-14.856-16.604-14.590-16.084Q-14.324-15.564-14.324-14.983Q-14.324-14.378-14.619-13.855Q-14.914-13.333-15.425-13.023Q-15.935-12.713-16.545-12.713Q-17.273-12.713-17.776-13.304L-17.776-11.555Q-17.776-11.350-17.553-11.292Q-17.331-11.233-16.994-11.233L-16.994-10.887M-17.776-16.184L-17.776-13.797Q-17.600-13.440-17.287-13.208Q-16.975-12.976-16.604-12.976Q-16.257-12.976-15.991-13.162Q-15.725-13.347-15.544-13.660Q-15.364-13.972-15.278-14.317Q-15.193-14.661-15.193-14.983Q-15.193-15.384-15.337-15.850Q-15.481-16.316-15.776-16.636Q-16.072-16.956-16.491-16.956Q-16.897-16.956-17.236-16.748Q-17.575-16.541-17.776-16.184",[1430],[1185,2029,2030],{"transform":2011},[1190,2031],{"d":2032,"fill":1989,"stroke":1989,"className":2033,"style":2003},"M-11.216-12.713Q-11.826-12.713-12.336-13.033Q-12.847-13.352-13.137-13.887Q-13.428-14.422-13.428-15.017Q-13.428-15.603-13.162-16.131Q-12.895-16.658-12.419-16.983Q-11.943-17.307-11.357-17.307Q-10.898-17.307-10.559-17.154Q-10.220-17-10-16.726Q-9.780-16.453-9.668-16.082Q-9.556-15.711-9.556-15.266Q-9.556-15.135-9.658-15.135L-12.554-15.135L-12.554-15.027Q-12.554-14.197-12.219-13.601Q-11.885-13.006-11.128-13.006Q-10.820-13.006-10.559-13.142Q-10.298-13.279-10.105-13.523Q-9.912-13.767-9.844-14.046Q-9.834-14.080-9.807-14.107Q-9.780-14.134-9.746-14.134L-9.658-14.134Q-9.556-14.134-9.556-14.007Q-9.697-13.440-10.166-13.076Q-10.635-12.713-11.216-12.713M-12.544-15.384L-10.264-15.384Q-10.264-15.760-10.369-16.145Q-10.474-16.531-10.718-16.787Q-10.962-17.044-11.357-17.044Q-11.924-17.044-12.234-16.514Q-12.544-15.984-12.544-15.384M-6.826-12.713Q-7.417-12.713-7.905-13.033Q-8.393-13.352-8.664-13.875Q-8.935-14.397-8.935-14.983Q-8.935-15.589-8.640-16.109Q-8.345-16.629-7.837-16.936Q-7.329-17.244-6.719-17.244Q-6.352-17.244-6.025-17.090Q-5.698-16.936-5.459-16.663L-5.459-18.743Q-5.459-19.012-5.539-19.131Q-5.620-19.251-5.769-19.278Q-5.918-19.304-6.235-19.304L-6.235-19.656L-4.756-19.763L-4.756-13.733Q-4.756-13.470-4.675-13.350Q-4.595-13.230-4.446-13.203Q-4.297-13.177-3.979-13.177L-3.979-12.825L-5.488-12.713L-5.488-13.343Q-5.747-13.045-6.103-12.879Q-6.460-12.713-6.826-12.713M-7.847-13.694Q-7.676-13.367-7.390-13.172Q-7.104-12.976-6.768-12.976Q-6.352-12.976-6.006-13.216Q-5.659-13.455-5.488-13.836L-5.488-16.233Q-5.605-16.453-5.784-16.626Q-5.962-16.800-6.184-16.892Q-6.406-16.985-6.655-16.985Q-7.178-16.985-7.495-16.690Q-7.812-16.394-7.939-15.935Q-8.066-15.476-8.066-14.973Q-8.066-14.573-8.025-14.275Q-7.983-13.977-7.847-13.694M-2.974-10.325L-3.066-10.325Q-3.154-10.325-3.154-10.413Q-3.154-10.457-3.135-10.476Q-1.426-12.146-1.426-15.325Q-1.426-18.504-3.115-20.154Q-3.154-20.179-3.154-20.237Q-3.154-20.271-3.127-20.298Q-3.101-20.325-3.066-20.325L-2.974-20.325Q-2.944-20.325-2.925-20.305Q-2.207-19.739-1.728-18.929Q-1.250-18.118-1.028-17.200Q-0.806-16.282-0.806-15.325Q-0.806-14.617-0.925-13.931Q-1.045-13.245-1.306-12.578Q-1.567-11.912-1.968-11.348Q-2.368-10.784-2.925-10.345Q-2.944-10.325-2.974-10.325",[1430],[1185,2035,2037],{"transform":2036},"translate(123.034 -3.86)",[1190,2038],{"d":2039,"fill":1187,"stroke":1187,"className":2040,"style":2003},"M-49.777-14.983Q-49.777-14.383-49.545-13.926Q-49.313-13.470-48.871-13.213Q-48.429-12.957-47.829-12.957Q-47.199-12.957-46.615-13.279Q-46.032-13.601-45.619-14.141Q-45.207-14.680-45.055-15.286Q-45.036-15.345-44.977-15.345L-44.855-15.345Q-44.816-15.345-44.792-15.318Q-44.767-15.291-44.767-15.257Q-44.767-15.247-44.777-15.227Q-44.948-14.534-45.439-13.926Q-45.929-13.318-46.613-12.962Q-47.297-12.605-48.019-12.605Q-48.800-12.605-49.421-12.957Q-50.041-13.308-50.385-13.933Q-50.729-14.558-50.729-15.345Q-50.729-16.184-50.353-17.007Q-49.977-17.830-49.342-18.472Q-48.708-19.114-47.895-19.495Q-47.082-19.876-46.247-19.876Q-45.915-19.876-45.612-19.776Q-45.309-19.676-45.050-19.471Q-44.792-19.265-44.626-18.997L-43.835-19.856Q-43.835-19.876-43.786-19.876L-43.727-19.876Q-43.688-19.876-43.664-19.842Q-43.639-19.807-43.639-19.773L-44.318-17.073Q-44.318-17.005-44.396-17.005L-44.577-17.005Q-44.655-17.005-44.655-17.117Q-44.616-17.337-44.616-17.644Q-44.616-18.133-44.782-18.565Q-44.948-18.997-45.297-19.261Q-45.646-19.524-46.149-19.524Q-46.965-19.524-47.643-19.114Q-48.322-18.704-48.793-18.037Q-49.264-17.371-49.521-16.558Q-49.777-15.745-49.777-14.983",[1430],[1190,2042],{"fill":1192,"stroke":1989,"d":2043,"style":2044},"M-51.237-12.825 5.668-52.658M5.668-52.658l62.596 25.607","stroke-dasharray:3.0,3.0;stroke-width:.8",[1185,2046,2047,2050],{"fill":1196,"stroke":1196,"style":1479},[1190,2048],{"fill":1192,"d":2049},"M-51.237-12.825 65.087-26.673",[1190,2051],{"stroke":1192,"d":2052},"m68.264-27.051-5.386-1.937 2.209 2.315-1.604 2.769",[1200,2054,2056],{"className":2055},[1203],"Pop while the last three points don't turn counterclockwise",[381,2058,2059,2060,2111,2112,2115,2116,2131,2132,2147,2148,2163,2164,2179],{},"Here ",[390,2061,2063],{"className":2062},[393],[390,2064,2066,2084,2102],{"className":2065,"ariaHidden":398},[397],[390,2067,2069,2072,2075,2078,2081],{"className":2068},[402],[390,2070],{"className":2071,"style":1022},[406],[390,2073,413],{"className":2074},[411,412],[390,2076],{"className":2077,"style":542},[422],[390,2079,1032],{"className":2080},[546],[390,2082],{"className":2083,"style":542},[422],[390,2085,2087,2090,2093,2096,2099],{"className":2086},[402],[390,2088],{"className":2089,"style":1022},[406],[390,2091,428],{"className":2092,"style":427},[411,412],[390,2094],{"className":2095,"style":542},[422],[390,2097,1032],{"className":2098},[546],[390,2100],{"className":2101,"style":542},[422],[390,2103,2105,2108],{"className":2104},[402],[390,2106],{"className":2107,"style":1022},[406],[390,2109,439],{"className":2110,"style":438},[411,412]," bends to the ",[385,2113,2114],{},"right",", so the chain dips below the convex\nboundary at ",[390,2117,2119],{"className":2118},[393],[390,2120,2122],{"className":2121,"ariaHidden":398},[397],[390,2123,2125,2128],{"className":2124},[402],[390,2126],{"className":2127,"style":1022},[406],[390,2129,428],{"className":2130,"style":427},[411,412],". The algorithm pops ",[390,2133,2135],{"className":2134},[393],[390,2136,2138],{"className":2137,"ariaHidden":398},[397],[390,2139,2141,2144],{"className":2140},[402],[390,2142],{"className":2143,"style":1022},[406],[390,2145,428],{"className":2146,"style":427},[411,412]," and the corrected edge runs straight from\n",[390,2149,2151],{"className":2150},[393],[390,2152,2154],{"className":2153,"ariaHidden":398},[397],[390,2155,2157,2160],{"className":2156},[402],[390,2158],{"className":2159,"style":1022},[406],[390,2161,413],{"className":2162},[411,412]," to ",[390,2165,2167],{"className":2166},[393],[390,2168,2170],{"className":2169,"ariaHidden":398},[397],[390,2171,2173,2176],{"className":2172},[402],[390,2174],{"className":2175,"style":1022},[406],[390,2177,439],{"className":2178,"style":438},[411,412],", restoring the all-left-turns invariant.",[381,2181,2182,2183,2317,2318,2371,2372,2424,2425,2477,2478,2530,2531,2583,2584,1002],{},"Inside the left-to-right sweep this plays out as a stack that grows and\noccasionally collapses. Below, the stack holds ",[390,2184,2186],{"className":2185},[393],[390,2187,2189],{"className":2188,"ariaHidden":398},[397],[390,2190,2192,2195,2237,2277],{"className":2191},[402],[390,2193],{"className":2194,"style":1534},[406],[390,2196,2198,2201],{"className":2197},[411],[390,2199,381],{"className":2200},[411,412],[390,2202,2204],{"className":2203},[569],[390,2205,2207,2229],{"className":2206},[573,574],[390,2208,2210,2226],{"className":2209},[578],[390,2211,2214],{"className":2212,"style":2213},[582],"height:0.3011em;",[390,2215,2216,2219],{"style":653},[390,2217],{"className":2218,"style":591},[590],[390,2220,2222],{"className":2221},[595,596,597,598],[390,2223,2225],{"className":2224},[411,598],"1",[390,2227,607],{"className":2228},[606],[390,2230,2232],{"className":2231},[578],[390,2233,2235],{"className":2234,"style":614},[582],[390,2236],{},[390,2238,2240,2243],{"className":2239},[411],[390,2241,381],{"className":2242},[411,412],[390,2244,2246],{"className":2245},[569],[390,2247,2249,2269],{"className":2248},[573,574],[390,2250,2252,2266],{"className":2251},[578],[390,2253,2255],{"className":2254,"style":2213},[582],[390,2256,2257,2260],{"style":653},[390,2258],{"className":2259,"style":591},[590],[390,2261,2263],{"className":2262},[595,596,597,598],[390,2264,1362],{"className":2265},[411,598],[390,2267,607],{"className":2268},[606],[390,2270,2272],{"className":2271},[578],[390,2273,2275],{"className":2274,"style":614},[582],[390,2276],{},[390,2278,2280,2283],{"className":2279},[411],[390,2281,381],{"className":2282},[411,412],[390,2284,2286],{"className":2285},[569],[390,2287,2289,2309],{"className":2288},[573,574],[390,2290,2292,2306],{"className":2291},[578],[390,2293,2295],{"className":2294,"style":2213},[582],[390,2296,2297,2300],{"style":653},[390,2298],{"className":2299,"style":591},[590],[390,2301,2303],{"className":2302},[595,596,597,598],[390,2304,1265],{"className":2305},[411,598],[390,2307,607],{"className":2308},[606],[390,2310,2312],{"className":2311},[578],[390,2313,2315],{"className":2314,"style":614},[582],[390,2316],{}," when ",[390,2319,2321],{"className":2320},[393],[390,2322,2324],{"className":2323,"ariaHidden":398},[397],[390,2325,2327,2330],{"className":2326},[402],[390,2328],{"className":2329,"style":1534},[406],[390,2331,2333,2336],{"className":2332},[411],[390,2334,381],{"className":2335},[411,412],[390,2337,2339],{"className":2338},[569],[390,2340,2342,2363],{"className":2341},[573,574],[390,2343,2345,2360],{"className":2344},[578],[390,2346,2348],{"className":2347,"style":2213},[582],[390,2349,2350,2353],{"style":653},[390,2351],{"className":2352,"style":591},[590],[390,2354,2356],{"className":2355},[595,596,597,598],[390,2357,2359],{"className":2358},[411,598],"4",[390,2361,607],{"className":2362},[606],[390,2364,2366],{"className":2365},[578],[390,2367,2369],{"className":2368,"style":614},[582],[390,2370],{}," arrives;\nthe turn at ",[390,2373,2375],{"className":2374},[393],[390,2376,2378],{"className":2377,"ariaHidden":398},[397],[390,2379,2381,2384],{"className":2380},[402],[390,2382],{"className":2383,"style":1534},[406],[390,2385,2387,2390],{"className":2386},[411],[390,2388,381],{"className":2389},[411,412],[390,2391,2393],{"className":2392},[569],[390,2394,2396,2416],{"className":2395},[573,574],[390,2397,2399,2413],{"className":2398},[578],[390,2400,2402],{"className":2401,"style":2213},[582],[390,2403,2404,2407],{"style":653},[390,2405],{"className":2406,"style":591},[590],[390,2408,2410],{"className":2409},[595,596,597,598],[390,2411,1265],{"className":2412},[411,598],[390,2414,607],{"className":2415},[606],[390,2417,2419],{"className":2418},[578],[390,2420,2422],{"className":2421,"style":614},[582],[390,2423],{}," is a right turn, so ",[390,2426,2428],{"className":2427},[393],[390,2429,2431],{"className":2430,"ariaHidden":398},[397],[390,2432,2434,2437],{"className":2433},[402],[390,2435],{"className":2436,"style":1534},[406],[390,2438,2440,2443],{"className":2439},[411],[390,2441,381],{"className":2442},[411,412],[390,2444,2446],{"className":2445},[569],[390,2447,2449,2469],{"className":2448},[573,574],[390,2450,2452,2466],{"className":2451},[578],[390,2453,2455],{"className":2454,"style":2213},[582],[390,2456,2457,2460],{"style":653},[390,2458],{"className":2459,"style":591},[590],[390,2461,2463],{"className":2462},[595,596,597,598],[390,2464,1265],{"className":2465},[411,598],[390,2467,607],{"className":2468},[606],[390,2470,2472],{"className":2471},[578],[390,2473,2475],{"className":2474,"style":614},[582],[390,2476],{}," pops, and now the turn at ",[390,2479,2481],{"className":2480},[393],[390,2482,2484],{"className":2483,"ariaHidden":398},[397],[390,2485,2487,2490],{"className":2486},[402],[390,2488],{"className":2489,"style":1534},[406],[390,2491,2493,2496],{"className":2492},[411],[390,2494,381],{"className":2495},[411,412],[390,2497,2499],{"className":2498},[569],[390,2500,2502,2522],{"className":2501},[573,574],[390,2503,2505,2519],{"className":2504},[578],[390,2506,2508],{"className":2507,"style":2213},[582],[390,2509,2510,2513],{"style":653},[390,2511],{"className":2512,"style":591},[590],[390,2514,2516],{"className":2515},[595,596,597,598],[390,2517,1362],{"className":2518},[411,598],[390,2520,607],{"className":2521},[606],[390,2523,2525],{"className":2524},[578],[390,2526,2528],{"className":2527,"style":614},[582],[390,2529],{}," is\nstill a right turn, so ",[390,2532,2534],{"className":2533},[393],[390,2535,2537],{"className":2536,"ariaHidden":398},[397],[390,2538,2540,2543],{"className":2539},[402],[390,2541],{"className":2542,"style":1534},[406],[390,2544,2546,2549],{"className":2545},[411],[390,2547,381],{"className":2548},[411,412],[390,2550,2552],{"className":2551},[569],[390,2553,2555,2575],{"className":2554},[573,574],[390,2556,2558,2572],{"className":2557},[578],[390,2559,2561],{"className":2560,"style":2213},[582],[390,2562,2563,2566],{"style":653},[390,2564],{"className":2565,"style":591},[590],[390,2567,2569],{"className":2568},[595,596,597,598],[390,2570,1362],{"className":2571},[411,598],[390,2573,607],{"className":2574},[606],[390,2576,2578],{"className":2577},[578],[390,2579,2581],{"className":2580,"style":614},[582],[390,2582],{}," pops too, leaving the taut chain ",[390,2585,2587],{"className":2586},[393],[390,2588,2590],{"className":2589,"ariaHidden":398},[397],[390,2591,2593,2596,2636],{"className":2592},[402],[390,2594],{"className":2595,"style":1534},[406],[390,2597,2599,2602],{"className":2598},[411],[390,2600,381],{"className":2601},[411,412],[390,2603,2605],{"className":2604},[569],[390,2606,2608,2628],{"className":2607},[573,574],[390,2609,2611,2625],{"className":2610},[578],[390,2612,2614],{"className":2613,"style":2213},[582],[390,2615,2616,2619],{"style":653},[390,2617],{"className":2618,"style":591},[590],[390,2620,2622],{"className":2621},[595,596,597,598],[390,2623,2225],{"className":2624},[411,598],[390,2626,607],{"className":2627},[606],[390,2629,2631],{"className":2630},[578],[390,2632,2634],{"className":2633,"style":614},[582],[390,2635],{},[390,2637,2639,2642],{"className":2638},[411],[390,2640,381],{"className":2641},[411,412],[390,2643,2645],{"className":2644},[569],[390,2646,2648,2668],{"className":2647},[573,574],[390,2649,2651,2665],{"className":2650},[578],[390,2652,2654],{"className":2653,"style":2213},[582],[390,2655,2656,2659],{"style":653},[390,2657],{"className":2658,"style":591},[590],[390,2660,2662],{"className":2661},[595,596,597,598],[390,2663,2359],{"className":2664},[411,598],[390,2666,607],{"className":2667},[606],[390,2669,2671],{"className":2670},[578],[390,2672,2674],{"className":2673,"style":614},[582],[390,2675],{},[1172,2677,2679,2902],{"className":2678},[1175,1176],[1178,2680,2684],{"xmlns":1180,"width":2681,"height":2682,"viewBox":2683},"213.297","128.900","-75 -75 159.973 96.675",[1185,2685,2686,2689,2705,2708,2722,2725,2739,2742,2756,2759,2763,2768,2772,2837,2845,2853,2861],{"stroke":1187,"style":1188},[1190,2687],{"stroke":1192,"d":2688},"M-46.165-1.288a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,2690,2691,2698],{"stroke":1192},[1185,2692,2694],{"transform":2693},"translate(-13.984 9.05)",[1190,2695],{"d":2696,"fill":1187,"stroke":1187,"className":2697,"style":1431},"M-46.730 0.457L-48.475 0.457Q-48.510 0.457-48.543 0.419Q-48.576 0.382-48.576 0.351Q-48.576 0.281-48.543 0.213Q-48.510 0.145-48.449 0.145Q-48.154 0.145-48.049 0.094Q-47.943 0.044-47.882-0.189L-46.871-4.215Q-46.871-4.254-46.845-4.395Q-46.818-4.536-46.818-4.610Q-46.818-5.006-47.082-5.006Q-47.368-5.006-47.502-4.683Q-47.636-4.360-47.754-3.854Q-47.772-3.771-47.847-3.771L-47.952-3.771Q-48-3.771-48.022-3.810Q-48.044-3.850-48.044-3.890Q-47.882-4.509-47.682-4.887Q-47.482-5.265-47.060-5.265Q-46.748-5.265-46.508-5.098Q-46.269-4.931-46.199-4.637Q-45.619-5.265-45.012-5.265Q-44.617-5.265-44.331-5.061Q-44.045-4.856-43.898-4.522Q-43.751-4.188-43.751-3.797Q-43.751-3.371-43.924-2.907Q-44.098-2.444-44.406-2.053Q-44.713-1.662-45.126-1.424Q-45.539-1.187-45.983-1.187Q-46.251-1.187-46.467-1.328Q-46.682-1.468-46.818-1.710L-47.214-0.128Q-47.223-0.075-47.231-0.033Q-47.240 0.008-47.240 0.035Q-47.240 0.145-46.664 0.145Q-46.620 0.145-46.594 0.175Q-46.568 0.206-46.568 0.259Q-46.568 0.457-46.730 0.457M-45.966-1.451Q-45.597-1.451-45.293-1.774Q-44.990-2.097-44.832-2.492Q-44.687-2.848-44.566-3.356Q-44.445-3.863-44.445-4.184Q-44.445-4.514-44.588-4.760Q-44.731-5.006-45.030-5.006Q-45.627-5.006-46.199-4.206Q-46.199-4.175-46.207-4.166L-46.695-2.215Q-46.629-1.894-46.447-1.673Q-46.265-1.451-45.966-1.451",[1430],[1185,2699,2700],{"transform":2693},[1190,2701],{"d":2702,"fill":1187,"stroke":1187,"className":2703,"style":2704},"M-40.602-0.288L-42.893-0.288L-42.893-0.546Q-42.017-0.546-42.017-0.719L-42.017-3.798Q-42.210-3.710-42.442-3.673Q-42.673-3.637-42.928-3.637L-42.928-3.894Q-42.550-3.894-42.229-3.979Q-41.909-4.064-41.680-4.278L-41.560-4.278Q-41.528-4.278-41.503-4.255Q-41.478-4.231-41.478-4.193L-41.478-0.719Q-41.478-0.546-40.602-0.546",[1430],"stroke-width:0.180",[1190,2706],{"stroke":1192,"d":2707},"M-12.875-29.456a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.121 0",[1185,2709,2710,2716],{"stroke":1192},[1185,2711,2713],{"transform":2712},"translate(28.884 -35.772)",[1190,2714],{"d":2696,"fill":1187,"stroke":1187,"className":2715,"style":1431},[1430],[1185,2717,2718],{"transform":2712},[1190,2719],{"d":2720,"fill":1187,"stroke":1187,"className":2721,"style":2704},"M-40.602-0.288L-43.212-0.288L-43.212-0.473Q-43.206-0.496-43.186-0.522L-42.035-1.577Q-41.695-1.888-41.515-2.074Q-41.334-2.260-41.189-2.520Q-41.044-2.781-41.044-3.077Q-41.044-3.350-41.170-3.565Q-41.296-3.780-41.516-3.900Q-41.736-4.020-42.011-4.020Q-42.187-4.020-42.357-3.963Q-42.527-3.906-42.659-3.799Q-42.790-3.692-42.870-3.534Q-42.782-3.534-42.704-3.490Q-42.626-3.446-42.582-3.370Q-42.539-3.294-42.539-3.197Q-42.539-3.057-42.635-2.960Q-42.732-2.863-42.875-2.863Q-43.013-2.863-43.113-2.963Q-43.212-3.062-43.212-3.197Q-43.212-3.522-43.022-3.770Q-42.831-4.017-42.528-4.148Q-42.225-4.278-41.909-4.278Q-41.528-4.278-41.185-4.143Q-40.842-4.009-40.628-3.736Q-40.414-3.464-40.414-3.077Q-40.414-2.802-40.539-2.575Q-40.664-2.348-40.844-2.176Q-41.024-2.005-41.349-1.765Q-41.674-1.524-41.759-1.457L-42.515-0.853L-41.982-0.853Q-41.493-0.853-41.162-0.861Q-40.831-0.868-40.816-0.883Q-40.757-0.953-40.725-1.088Q-40.693-1.223-40.661-1.434L-40.414-1.434",[1430],[1190,2723],{"stroke":1192,"d":2724},"M25.536-39.698a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1185,2726,2727,2733],{"stroke":1192},[1185,2728,2730],{"transform":2729},"translate(67.295 -46.015)",[1190,2731],{"d":2696,"fill":1187,"stroke":1187,"className":2732,"style":1431},[1430],[1185,2734,2735],{"transform":2729},[1190,2736],{"d":2737,"fill":1187,"stroke":1187,"className":2738,"style":2704},"M-42.870-0.739Q-42.574-0.402-41.844-0.402Q-41.586-0.402-41.406-0.530Q-41.226-0.657-41.138-0.865Q-41.050-1.073-41.050-1.331Q-41.050-1.726-41.257-1.997Q-41.463-2.268-41.850-2.268L-42.316-2.268Q-42.380-2.283-42.395-2.345L-42.395-2.412Q-42.380-2.468-42.316-2.485L-41.914-2.509Q-41.704-2.509-41.535-2.651Q-41.367-2.793-41.274-3.007Q-41.182-3.221-41.182-3.437Q-41.182-3.725-41.367-3.890Q-41.551-4.056-41.844-4.056Q-42.105-4.056-42.329-3.988Q-42.553-3.921-42.700-3.763Q-42.571-3.745-42.492-3.656Q-42.413-3.566-42.413-3.437Q-42.413-3.300-42.508-3.205Q-42.603-3.109-42.744-3.109Q-42.878-3.109-42.975-3.206Q-43.072-3.303-43.072-3.437Q-43.072-3.725-42.881-3.916Q-42.691-4.108-42.410-4.193Q-42.128-4.278-41.844-4.278Q-41.569-4.278-41.268-4.187Q-40.968-4.097-40.760-3.908Q-40.552-3.719-40.552-3.437Q-40.552-3.068-40.798-2.796Q-41.044-2.523-41.416-2.394Q-40.997-2.301-40.680-2.018Q-40.362-1.735-40.362-1.337Q-40.362-0.974-40.581-0.708Q-40.801-0.443-41.147-0.303Q-41.493-0.162-41.844-0.162Q-42.067-0.162-42.314-0.210Q-42.562-0.259-42.782-0.369Q-43.001-0.478-43.133-0.657Q-43.265-0.836-43.265-1.091Q-43.265-1.240-43.163-1.343Q-43.060-1.445-42.911-1.445Q-42.761-1.445-42.659-1.343Q-42.556-1.240-42.556-1.091Q-42.556-0.959-42.645-0.858Q-42.735-0.757-42.870-0.739",[1430],[1190,2740],{"stroke":1192,"d":2741},"M66.507-8.97a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,2743,2744,2750],{"stroke":1192},[1185,2745,2747],{"transform":2746},"translate(117.846 1.367)",[1190,2748],{"d":2696,"fill":1187,"stroke":1187,"className":2749,"style":1431},[1430],[1185,2751,2752],{"transform":2746},[1190,2753],{"d":2754,"fill":1187,"stroke":1187,"className":2755,"style":2704},"M-41.513-1.267L-43.368-1.267L-43.368-1.524L-41.273-4.231Q-41.235-4.278-41.176-4.278L-41.044-4.278Q-41.003-4.278-40.976-4.250Q-40.948-4.223-40.948-4.182L-40.948-1.524L-40.259-1.524L-40.259-1.267L-40.948-1.267L-40.948-0.719Q-40.948-0.546-40.271-0.546L-40.271-0.288L-42.190-0.288L-42.190-0.546Q-41.513-0.546-41.513-0.719L-41.513-1.267M-41.472-3.607L-43.078-1.524L-41.472-1.524",[1430],[1190,2757],{"fill":1192,"stroke":1989,"d":2758,"style":1476},"m-48.286-1.288 33.29-28.168 38.41-10.242",[1190,2760],{"fill":1192,"stroke":2761,"d":2762,"style":1476},"var(--tk-line)","M23.414-39.698 64.385-8.97",[1185,2764,2765],{"fill":1989},[1190,2766],{"stroke":1192,"d":2767},"M-12.875-29.456a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1185,2769,2770],{"fill":1989},[1190,2771],{"stroke":1192,"d":2724},[1185,2773,2774],{"fill":1989,"stroke":1989},[1185,2775,2776,2783,2789,2795,2801,2807,2813,2819,2825,2831],{"fill":1989,"stroke":1192},[1185,2777,2779],{"transform":2778},"translate(27.927 -54.705)",[1190,2780],{"d":2781,"fill":1989,"stroke":1989,"className":2782,"style":1499},"M-42.227-9.237L-43.828-9.237Q-43.863-9.237-43.897-9.278Q-43.930-9.319-43.930-9.354L-43.899-9.460Q-43.867-9.522-43.813-9.530Q-43.621-9.530-43.537-9.546Q-43.453-9.561-43.401-9.628Q-43.348-9.694-43.309-9.835L-42.418-13.405Q-42.379-13.561-42.379-13.698Q-42.379-13.847-42.432-13.954Q-42.485-14.061-42.617-14.061Q-42.797-14.061-42.916-13.892Q-43.035-13.722-43.092-13.536Q-43.149-13.351-43.219-13.061Q-43.231-12.987-43.301-12.987L-43.403-12.987Q-43.438-12.987-43.465-13.022Q-43.492-13.058-43.492-13.085L-43.492-13.116Q-43.406-13.448-43.313-13.690Q-43.219-13.933-43.043-14.124Q-42.867-14.315-42.602-14.315Q-42.320-14.315-42.090-14.171Q-41.860-14.026-41.793-13.772Q-41.274-14.315-40.715-14.315Q-40.180-14.315-39.860-13.931Q-39.539-13.546-39.539-13.003Q-39.539-12.479-39.820-11.940Q-40.102-11.401-40.569-11.056Q-41.035-10.710-41.570-10.710Q-41.809-10.710-42.010-10.827Q-42.211-10.944-42.340-11.155L-42.684-9.780Q-42.695-9.741-42.715-9.620Q-42.715-9.530-42.211-9.530Q-42.106-9.499-42.106-9.405L-42.141-9.300Q-42.172-9.245-42.227-9.237M-41.785-13.354L-42.219-11.628Q-42.160-11.354-41.990-11.159Q-41.820-10.964-41.555-10.964Q-41.219-10.964-40.940-11.255Q-40.660-11.546-40.524-11.901Q-40.399-12.194-40.297-12.628Q-40.195-13.061-40.195-13.339Q-40.195-13.624-40.328-13.843Q-40.461-14.061-40.731-14.061Q-40.942-14.061-41.137-13.960Q-41.332-13.858-41.492-13.702Q-41.653-13.546-41.785-13.354",[1430],[1185,2784,2785],{"transform":2778},[1190,2786],{"d":2787,"fill":1989,"stroke":1989,"className":2788,"style":2704},"M-38.663-10.127Q-38.367-9.790-37.637-9.790Q-37.379-9.790-37.199-9.918Q-37.019-10.045-36.931-10.253Q-36.843-10.461-36.843-10.719Q-36.843-11.114-37.050-11.385Q-37.256-11.656-37.643-11.656L-38.109-11.656Q-38.173-11.671-38.188-11.733L-38.188-11.800Q-38.173-11.856-38.109-11.873L-37.707-11.897Q-37.497-11.897-37.328-12.039Q-37.160-12.181-37.067-12.395Q-36.975-12.609-36.975-12.825Q-36.975-13.113-37.160-13.278Q-37.344-13.444-37.637-13.444Q-37.898-13.444-38.122-13.376Q-38.346-13.309-38.493-13.151Q-38.364-13.133-38.285-13.044Q-38.206-12.954-38.206-12.825Q-38.206-12.688-38.301-12.593Q-38.396-12.497-38.537-12.497Q-38.671-12.497-38.768-12.594Q-38.865-12.691-38.865-12.825Q-38.865-13.113-38.674-13.304Q-38.484-13.496-38.203-13.581Q-37.921-13.666-37.637-13.666Q-37.362-13.666-37.061-13.575Q-36.761-13.485-36.553-13.296Q-36.345-13.107-36.345-12.825Q-36.345-12.456-36.591-12.184Q-36.837-11.911-37.209-11.782Q-36.790-11.689-36.473-11.406Q-36.155-11.123-36.155-10.725Q-36.155-10.362-36.374-10.096Q-36.594-9.831-36.940-9.691Q-37.286-9.550-37.637-9.550Q-37.860-9.550-38.107-9.598Q-38.355-9.647-38.575-9.757Q-38.794-9.866-38.926-10.045Q-39.058-10.224-39.058-10.479Q-39.058-10.628-38.956-10.731Q-38.853-10.833-38.704-10.833Q-38.554-10.833-38.452-10.731Q-38.349-10.628-38.349-10.479Q-38.349-10.347-38.438-10.246Q-38.528-10.145-38.663-10.127",[1430],[1185,2790,2791],{"transform":2778},[1190,2792],{"d":2793,"fill":1989,"stroke":1989,"className":2794,"style":1499},"M-34.445-9.382Q-34.445-9.405-34.414-9.452Q-34.121-9.714-33.955-10.081Q-33.789-10.448-33.789-10.835L-33.789-10.893Q-33.917-10.788-34.085-10.788Q-34.277-10.788-34.414-10.921Q-34.550-11.054-34.550-11.253Q-34.550-11.444-34.414-11.577Q-34.277-11.710-34.085-11.710Q-33.785-11.710-33.660-11.440Q-33.535-11.171-33.535-10.835Q-33.535-10.386-33.716-9.972Q-33.898-9.558-34.238-9.261Q-34.261-9.237-34.300-9.237Q-34.347-9.237-34.396-9.282Q-34.445-9.327-34.445-9.382",[1430],[1185,2796,2797],{"transform":2778},[1190,2798],{"d":2799,"fill":1989,"stroke":1989,"className":2800,"style":1499},"M-30.003-9.237L-31.604-9.237Q-31.639-9.237-31.673-9.278Q-31.706-9.319-31.706-9.354L-31.675-9.460Q-31.643-9.522-31.589-9.530Q-31.397-9.530-31.313-9.546Q-31.229-9.561-31.177-9.628Q-31.124-9.694-31.085-9.835L-30.194-13.405Q-30.155-13.561-30.155-13.698Q-30.155-13.847-30.208-13.954Q-30.261-14.061-30.393-14.061Q-30.573-14.061-30.692-13.892Q-30.811-13.722-30.868-13.536Q-30.925-13.351-30.995-13.061Q-31.007-12.987-31.077-12.987L-31.178-12.987Q-31.214-12.987-31.241-13.022Q-31.268-13.058-31.268-13.085L-31.268-13.116Q-31.182-13.448-31.089-13.690Q-30.995-13.933-30.819-14.124Q-30.643-14.315-30.378-14.315Q-30.096-14.315-29.866-14.171Q-29.636-14.026-29.569-13.772Q-29.050-14.315-28.491-14.315Q-27.956-14.315-27.636-13.931Q-27.315-13.546-27.315-13.003Q-27.315-12.479-27.596-11.940Q-27.878-11.401-28.345-11.056Q-28.811-10.710-29.346-10.710Q-29.585-10.710-29.786-10.827Q-29.987-10.944-30.116-11.155L-30.460-9.780Q-30.471-9.741-30.491-9.620Q-30.491-9.530-29.987-9.530Q-29.882-9.499-29.882-9.405L-29.917-9.300Q-29.948-9.245-30.003-9.237M-29.561-13.354L-29.995-11.628Q-29.936-11.354-29.766-11.159Q-29.596-10.964-29.331-10.964Q-28.995-10.964-28.716-11.255Q-28.436-11.546-28.300-11.901Q-28.175-12.194-28.073-12.628Q-27.971-13.061-27.971-13.339Q-27.971-13.624-28.104-13.843Q-28.237-14.061-28.507-14.061Q-28.718-14.061-28.913-13.960Q-29.108-13.858-29.268-13.702Q-29.428-13.546-29.561-13.354",[1430],[1185,2802,2803],{"transform":2778},[1190,2804],{"d":2805,"fill":1989,"stroke":1989,"className":2806,"style":2704},"M-24.172-9.676L-26.782-9.676L-26.782-9.861Q-26.776-9.884-26.756-9.910L-25.605-10.965Q-25.265-11.276-25.085-11.462Q-24.904-11.648-24.759-11.908Q-24.614-12.169-24.614-12.465Q-24.614-12.738-24.740-12.953Q-24.866-13.168-25.086-13.288Q-25.306-13.408-25.581-13.408Q-25.757-13.408-25.927-13.351Q-26.097-13.294-26.229-13.187Q-26.360-13.080-26.440-12.922Q-26.352-12.922-26.274-12.878Q-26.196-12.834-26.152-12.758Q-26.109-12.682-26.109-12.585Q-26.109-12.445-26.205-12.348Q-26.302-12.251-26.445-12.251Q-26.583-12.251-26.683-12.351Q-26.782-12.450-26.782-12.585Q-26.782-12.910-26.592-13.158Q-26.401-13.405-26.098-13.536Q-25.795-13.666-25.479-13.666Q-25.098-13.666-24.755-13.531Q-24.412-13.397-24.198-13.124Q-23.984-12.852-23.984-12.465Q-23.984-12.190-24.109-11.963Q-24.234-11.736-24.414-11.564Q-24.594-11.393-24.919-11.153Q-25.244-10.912-25.329-10.845L-26.085-10.241L-25.552-10.241Q-25.063-10.241-24.732-10.249Q-24.401-10.256-24.386-10.271Q-24.327-10.341-24.295-10.476Q-24.263-10.611-24.231-10.822L-23.984-10.822",[1430],[1185,2808,2809],{"transform":2778},[1190,2810],{"d":2811,"fill":1989,"stroke":1989,"className":2812,"style":1499},"M-18.092-9.237L-19.947-9.237L-19.947-9.530Q-19.678-9.530-19.510-9.575Q-19.342-9.620-19.342-9.796L-19.342-13.620Q-19.342-13.827-19.498-13.880Q-19.654-13.933-19.947-13.933L-19.947-14.229L-18.725-14.315L-18.725-13.851Q-18.494-14.073-18.180-14.194Q-17.865-14.315-17.526-14.315Q-17.053-14.315-16.649-14.069Q-16.244-13.823-16.012-13.407Q-15.779-12.991-15.779-12.515Q-15.779-12.140-15.928-11.811Q-16.076-11.483-16.346-11.231Q-16.615-10.979-16.959-10.845Q-17.303-10.710-17.662-10.710Q-17.951-10.710-18.223-10.831Q-18.494-10.952-18.701-11.163L-18.701-9.796Q-18.701-9.620-18.533-9.575Q-18.365-9.530-18.092-9.530L-18.092-9.237M-18.701-13.452L-18.701-11.612Q-18.549-11.323-18.287-11.143Q-18.026-10.964-17.717-10.964Q-17.432-10.964-17.209-11.102Q-16.986-11.241-16.834-11.472Q-16.682-11.702-16.604-11.974Q-16.526-12.245-16.526-12.515Q-16.526-12.847-16.651-13.204Q-16.776-13.561-17.024-13.798Q-17.272-14.034-17.619-14.034Q-17.943-14.034-18.238-13.878Q-18.533-13.722-18.701-13.452",[1430],[1185,2814,2815],{"transform":2778},[1190,2816],{"d":2817,"fill":1989,"stroke":1989,"className":2818,"style":1499},"M-15.016-12.483Q-15.016-12.987-14.760-13.419Q-14.504-13.851-14.068-14.102Q-13.633-14.354-13.133-14.354Q-12.746-14.354-12.404-14.210Q-12.063-14.065-11.801-13.804Q-11.539-13.542-11.397-13.206Q-11.254-12.870-11.254-12.483Q-11.254-11.991-11.518-11.581Q-11.781-11.171-12.211-10.940Q-12.641-10.710-13.133-10.710Q-13.625-10.710-14.059-10.942Q-14.492-11.175-14.754-11.583Q-15.016-11.991-15.016-12.483M-13.133-10.987Q-12.676-10.987-12.424-11.210Q-12.172-11.433-12.084-11.784Q-11.996-12.136-11.996-12.581Q-11.996-13.011-12.090-13.349Q-12.184-13.686-12.438-13.893Q-12.691-14.101-13.133-14.101Q-13.781-14.101-14.025-13.684Q-14.270-13.268-14.270-12.581Q-14.270-12.136-14.182-11.784Q-14.094-11.433-13.842-11.210Q-13.590-10.987-13.133-10.987M-8.887-9.237L-10.742-9.237L-10.742-9.530Q-10.473-9.530-10.305-9.575Q-10.137-9.620-10.137-9.796L-10.137-13.620Q-10.137-13.827-10.293-13.880Q-10.449-13.933-10.742-13.933L-10.742-14.229L-9.520-14.315L-9.520-13.851Q-9.289-14.073-8.975-14.194Q-8.660-14.315-8.320-14.315Q-7.848-14.315-7.443-14.069Q-7.039-13.823-6.807-13.407Q-6.574-12.991-6.574-12.515Q-6.574-12.140-6.723-11.811Q-6.871-11.483-7.141-11.231Q-7.410-10.979-7.754-10.845Q-8.098-10.710-8.457-10.710Q-8.746-10.710-9.018-10.831Q-9.289-10.952-9.496-11.163L-9.496-9.796Q-9.496-9.620-9.328-9.575Q-9.160-9.530-8.887-9.530L-8.887-9.237M-9.496-13.452L-9.496-11.612Q-9.344-11.323-9.082-11.143Q-8.820-10.964-8.512-10.964Q-8.227-10.964-8.004-11.102Q-7.781-11.241-7.629-11.472Q-7.477-11.702-7.399-11.974Q-7.320-12.245-7.320-12.515Q-7.320-12.847-7.445-13.204Q-7.570-13.561-7.818-13.798Q-8.066-14.034-8.414-14.034Q-8.738-14.034-9.033-13.878Q-9.328-13.722-9.496-13.452",[1430],[1185,2820,2821],{"transform":2778},[1190,2822],{"d":2823,"fill":1989,"stroke":1989,"className":2824,"style":1499},"M-45.669 0.704Q-46.282 0.247-46.684-0.388Q-47.087-1.022-47.282-1.768Q-47.477-2.515-47.477-3.288Q-47.477-4.061-47.282-4.808Q-47.087-5.554-46.684-6.188Q-46.282-6.823-45.669-7.280Q-45.657-7.284-45.649-7.286Q-45.641-7.288-45.630-7.288L-45.552-7.288Q-45.513-7.288-45.487-7.261Q-45.462-7.233-45.462-7.190Q-45.462-7.140-45.493-7.120Q-46.001-6.667-46.323-6.044Q-46.645-5.421-46.786-4.726Q-46.927-4.030-46.927-3.288Q-46.927-2.554-46.788-1.854Q-46.649-1.155-46.325-0.530Q-46.001 0.095-45.493 0.544Q-45.462 0.564-45.462 0.614Q-45.462 0.657-45.487 0.685Q-45.513 0.712-45.552 0.712L-45.630 0.712Q-45.638 0.708-45.647 0.706Q-45.657 0.704-45.669 0.704M-42.735-1.288L-44.716-1.288L-44.716-1.585Q-44.446-1.585-44.278-1.630Q-44.110-1.675-44.110-1.847L-44.110-3.983Q-44.110-4.198-44.173-4.294Q-44.235-4.390-44.352-4.411Q-44.470-4.433-44.716-4.433L-44.716-4.729L-43.548-4.815L-43.548-4.030Q-43.470-4.241-43.317-4.427Q-43.165-4.612-42.966-4.714Q-42.766-4.815-42.540-4.815Q-42.294-4.815-42.102-4.671Q-41.911-4.526-41.911-4.296Q-41.911-4.140-42.016-4.030Q-42.122-3.921-42.278-3.921Q-42.434-3.921-42.544-4.030Q-42.653-4.140-42.653-4.296Q-42.653-4.456-42.548-4.561Q-42.872-4.561-43.087-4.333Q-43.302-4.104-43.397-3.765Q-43.493-3.425-43.493-3.120L-43.493-1.847Q-43.493-1.679-43.266-1.632Q-43.040-1.585-42.735-1.585L-42.735-1.288M-39.571-1.288L-41.349-1.288L-41.349-1.585Q-41.075-1.585-40.907-1.632Q-40.739-1.679-40.739-1.847L-40.739-3.983Q-40.739-4.198-40.796-4.294Q-40.852-4.390-40.966-4.411Q-41.079-4.433-41.325-4.433L-41.325-4.729L-40.126-4.815L-40.126-1.847Q-40.126-1.679-39.979-1.632Q-39.833-1.585-39.571-1.585L-39.571-1.288M-41.013-6.210Q-41.013-6.401-40.878-6.532Q-40.743-6.663-40.548-6.663Q-40.427-6.663-40.323-6.601Q-40.220-6.538-40.157-6.434Q-40.095-6.331-40.095-6.210Q-40.095-6.015-40.225-5.880Q-40.356-5.745-40.548-5.745Q-40.747-5.745-40.880-5.878Q-41.013-6.011-41.013-6.210M-39.071-0.679Q-39.071-0.960-38.860-1.171Q-38.649-1.382-38.364-1.472Q-38.520-1.597-38.599-1.786Q-38.677-1.976-38.677-2.175Q-38.677-2.530-38.446-2.823Q-38.813-3.163-38.813-3.632Q-38.813-3.983-38.610-4.253Q-38.407-4.522-38.087-4.669Q-37.766-4.815-37.423-4.815Q-36.903-4.815-36.532-4.534Q-36.169-4.905-35.622-4.905Q-35.442-4.905-35.315-4.778Q-35.188-4.651-35.188-4.472Q-35.188-4.366-35.266-4.288Q-35.345-4.210-35.454-4.210Q-35.563-4.210-35.640-4.286Q-35.716-4.362-35.716-4.472Q-35.716-4.573-35.677-4.624Q-35.669-4.632-35.665-4.638Q-35.661-4.643-35.661-4.647Q-36.036-4.647-36.356-4.393Q-36.036-4.054-36.036-3.632Q-36.036-3.362-36.153-3.145Q-36.270-2.929-36.475-2.770Q-36.681-2.612-36.923-2.530Q-37.165-2.448-37.423-2.448Q-37.641-2.448-37.854-2.507Q-38.067-2.565-38.263-2.686Q-38.356-2.546-38.356-2.366Q-38.356-2.159-38.220-2.007Q-38.083-1.854-37.876-1.854L-37.181-1.854Q-36.692-1.854-36.280-1.770Q-35.868-1.686-35.589-1.429Q-35.309-1.171-35.309-0.679Q-35.309-0.315-35.630-0.083Q-35.950 0.149-36.391 0.251Q-36.833 0.353-37.188 0.353Q-37.544 0.353-37.987 0.251Q-38.431 0.149-38.751-0.083Q-39.071-0.315-39.071-0.679M-38.567-0.679Q-38.567-0.483-38.423-0.335Q-38.278-0.186-38.065-0.097Q-37.852-0.007-37.612 0.040Q-37.372 0.087-37.188 0.087Q-36.946 0.087-36.616 0.009Q-36.286-0.069-36.050-0.243Q-35.813-0.417-35.813-0.679Q-35.813-1.085-36.224-1.194Q-36.634-1.304-37.196-1.304L-37.876-1.304Q-38.145-1.304-38.356-1.126Q-38.567-0.948-38.567-0.679M-37.423-2.714Q-36.700-2.714-36.700-3.632Q-36.700-4.554-37.423-4.554Q-38.149-4.554-38.149-3.632Q-38.149-2.714-37.423-2.714M-32.895-1.288L-34.751-1.288L-34.751-1.585Q-34.477-1.585-34.309-1.632Q-34.141-1.679-34.141-1.847L-34.141-6.007Q-34.141-6.222-34.204-6.317Q-34.266-6.413-34.386-6.434Q-34.505-6.456-34.751-6.456L-34.751-6.753L-33.528-6.839L-33.528-4.136Q-33.403-4.347-33.216-4.497Q-33.028-4.647-32.802-4.731Q-32.575-4.815-32.329-4.815Q-31.161-4.815-31.161-3.737L-31.161-1.847Q-31.161-1.679-30.991-1.632Q-30.821-1.585-30.552-1.585L-30.552-1.288L-32.407-1.288L-32.407-1.585Q-32.134-1.585-31.966-1.632Q-31.798-1.679-31.798-1.847L-31.798-3.722Q-31.798-4.104-31.919-4.333Q-32.040-4.561-32.391-4.561Q-32.704-4.561-32.958-4.399Q-33.212-4.237-33.358-3.968Q-33.505-3.698-33.505-3.401L-33.505-1.847Q-33.505-1.679-33.335-1.632Q-33.165-1.585-32.895-1.585",[1430],[1185,2826,2827],{"transform":2778},[1190,2828],{"d":2829,"fill":1989,"stroke":1989,"className":2830,"style":1499},"M-29.707-2.249L-29.707-4.440L-30.410-4.440L-30.410-4.694Q-30.054-4.694-29.812-4.927Q-29.570-5.159-29.459-5.507Q-29.347-5.854-29.347-6.210L-29.066-6.210L-29.066-4.737L-27.890-4.737L-27.890-4.440L-29.066-4.440L-29.066-2.265Q-29.066-1.944-28.947-1.716Q-28.828-1.487-28.547-1.487Q-28.367-1.487-28.250-1.610Q-28.133-1.733-28.080-1.913Q-28.027-2.093-28.027-2.265L-28.027-2.737L-27.746-2.737L-27.746-2.249Q-27.746-1.995-27.851-1.755Q-27.957-1.515-28.154-1.362Q-28.351-1.210-28.609-1.210Q-28.925-1.210-29.177-1.333Q-29.429-1.456-29.568-1.690Q-29.707-1.925-29.707-2.249",[1430],[1185,2832,2833],{"transform":2778},[1190,2834],{"d":2835,"fill":1989,"stroke":1989,"className":2836,"style":1499},"M-23.569-2.249L-23.569-4.440L-24.272-4.440L-24.272-4.694Q-23.916-4.694-23.674-4.927Q-23.432-5.159-23.321-5.507Q-23.209-5.854-23.209-6.210L-22.928-6.210L-22.928-4.737L-21.752-4.737L-21.752-4.440L-22.928-4.440L-22.928-2.265Q-22.928-1.944-22.809-1.716Q-22.690-1.487-22.409-1.487Q-22.229-1.487-22.112-1.610Q-21.994-1.733-21.942-1.913Q-21.889-2.093-21.889-2.265L-21.889-2.737L-21.608-2.737L-21.608-2.249Q-21.608-1.995-21.713-1.755Q-21.819-1.515-22.016-1.362Q-22.213-1.210-22.471-1.210Q-22.787-1.210-23.039-1.333Q-23.291-1.456-23.430-1.690Q-23.569-1.925-23.569-2.249M-20.205-2.241L-20.205-3.983Q-20.205-4.198-20.268-4.294Q-20.330-4.390-20.450-4.411Q-20.569-4.433-20.815-4.433L-20.815-4.729L-19.569-4.815L-19.569-2.265L-19.569-2.241Q-19.569-1.929-19.514-1.767Q-19.459-1.604-19.309-1.534Q-19.159-1.464-18.838-1.464Q-18.409-1.464-18.135-1.802Q-17.862-2.140-17.862-2.585L-17.862-3.983Q-17.862-4.198-17.924-4.294Q-17.987-4.390-18.106-4.411Q-18.225-4.433-18.471-4.433L-18.471-4.729L-17.225-4.815L-17.225-2.030Q-17.225-1.819-17.162-1.724Q-17.100-1.628-16.981-1.606Q-16.862-1.585-16.616-1.585L-16.616-1.288L-17.838-1.210L-17.838-1.831Q-18.006-1.542-18.287-1.376Q-18.569-1.210-18.889-1.210Q-20.205-1.210-20.205-2.241M-14.162-1.288L-16.143-1.288L-16.143-1.585Q-15.873-1.585-15.705-1.630Q-15.537-1.675-15.537-1.847L-15.537-3.983Q-15.537-4.198-15.600-4.294Q-15.662-4.390-15.780-4.411Q-15.897-4.433-16.143-4.433L-16.143-4.729L-14.975-4.815L-14.975-4.030Q-14.897-4.241-14.744-4.427Q-14.592-4.612-14.393-4.714Q-14.194-4.815-13.967-4.815Q-13.721-4.815-13.530-4.671Q-13.338-4.526-13.338-4.296Q-13.338-4.140-13.444-4.030Q-13.549-3.921-13.705-3.921Q-13.862-3.921-13.971-4.030Q-14.080-4.140-14.080-4.296Q-14.080-4.456-13.975-4.561Q-14.299-4.561-14.514-4.333Q-14.729-4.104-14.825-3.765Q-14.920-3.425-14.920-3.120L-14.920-1.847Q-14.920-1.679-14.694-1.632Q-14.467-1.585-14.162-1.585L-14.162-1.288M-10.928-1.288L-12.784-1.288L-12.784-1.585Q-12.510-1.585-12.342-1.632Q-12.174-1.679-12.174-1.847L-12.174-3.983Q-12.174-4.198-12.237-4.294Q-12.299-4.390-12.418-4.411Q-12.537-4.433-12.784-4.433L-12.784-4.729L-11.592-4.815L-11.592-4.081Q-11.479-4.296-11.286-4.464Q-11.092-4.632-10.854-4.724Q-10.616-4.815-10.362-4.815Q-9.194-4.815-9.194-3.737L-9.194-1.847Q-9.194-1.679-9.024-1.632Q-8.854-1.585-8.584-1.585L-8.584-1.288L-10.440-1.288L-10.440-1.585Q-10.166-1.585-9.998-1.632Q-9.830-1.679-9.830-1.847L-9.830-3.722Q-9.830-4.104-9.952-4.333Q-10.073-4.561-10.424-4.561Q-10.737-4.561-10.991-4.399Q-11.244-4.237-11.391-3.968Q-11.537-3.698-11.537-3.401L-11.537-1.847Q-11.537-1.679-11.368-1.632Q-11.198-1.585-10.928-1.585L-10.928-1.288M-8.096-1.296L-8.096-2.518Q-8.096-2.546-8.065-2.577Q-8.034-2.608-8.010-2.608L-7.905-2.608Q-7.834-2.608-7.819-2.546Q-7.756-2.226-7.618-1.985Q-7.479-1.745-7.246-1.604Q-7.014-1.464-6.705-1.464Q-6.467-1.464-6.258-1.524Q-6.049-1.585-5.912-1.733Q-5.776-1.882-5.776-2.128Q-5.776-2.382-5.987-2.548Q-6.198-2.714-6.467-2.768L-7.088-2.882Q-7.494-2.960-7.795-3.216Q-8.096-3.472-8.096-3.847Q-8.096-4.214-7.895-4.436Q-7.694-4.659-7.369-4.757Q-7.045-4.854-6.705-4.854Q-6.241-4.854-5.944-4.647L-5.721-4.831Q-5.698-4.854-5.666-4.854L-5.616-4.854Q-5.584-4.854-5.557-4.827Q-5.530-4.800-5.530-4.768L-5.530-3.784Q-5.530-3.753-5.555-3.724Q-5.580-3.694-5.616-3.694L-5.721-3.694Q-5.756-3.694-5.784-3.722Q-5.811-3.749-5.811-3.784Q-5.811-4.183-6.063-4.403Q-6.315-4.624-6.713-4.624Q-7.069-4.624-7.352-4.501Q-7.635-4.378-7.635-4.073Q-7.635-3.854-7.434-3.722Q-7.233-3.589-6.987-3.546L-6.362-3.433Q-5.932-3.343-5.623-3.046Q-5.315-2.749-5.315-2.335Q-5.315-1.765-5.713-1.487Q-6.112-1.210-6.705-1.210Q-7.256-1.210-7.608-1.546L-7.905-1.233Q-7.928-1.210-7.963-1.210L-8.010-1.210Q-8.034-1.210-8.065-1.241Q-8.096-1.272-8.096-1.296M-4.385 0.712L-4.467 0.712Q-4.502 0.712-4.528 0.683Q-4.553 0.653-4.553 0.614Q-4.553 0.564-4.522 0.544Q-4.135 0.208-3.852-0.241Q-3.569-0.690-3.403-1.190Q-3.237-1.690-3.162-2.208Q-3.088-2.726-3.088-3.288Q-3.088-3.858-3.162-4.374Q-3.237-4.890-3.403-5.386Q-3.569-5.882-3.848-6.329Q-4.127-6.776-4.522-7.120Q-4.553-7.140-4.553-7.190Q-4.553-7.229-4.528-7.259Q-4.502-7.288-4.467-7.288L-4.385-7.288Q-4.373-7.288-4.364-7.286Q-4.354-7.284-4.346-7.280Q-3.733-6.823-3.330-6.188Q-2.928-5.554-2.733-4.808Q-2.537-4.061-2.537-3.288Q-2.537-2.515-2.733-1.768Q-2.928-1.022-3.330-0.388Q-3.733 0.247-4.346 0.704Q-4.358 0.704-4.366 0.706Q-4.373 0.708-4.385 0.712",[1430],[1185,2838,2839,2842],{"fill":1989,"stroke":1989,"style":1198},[1190,2840],{"fill":1192,"d":2841},"M-4.754-52.502c-3.805 5.851-5.305 9.751-5.993 14.077",[1190,2843],{"stroke":1192,"d":2844},"m-11.156-35.857 2.708-3.782-2.3 1.214-1.808-1.867",[1185,2846,2847,2850],{"fill":1989,"stroke":1989,"style":1198},[1190,2848],{"fill":1192,"d":2849},"M11.891-53.783c4.55 2.755 6.91 4.819 8.614 6.937",[1190,2851],{"stroke":1192,"d":2852},"m22.134-44.82-.987-4.545-.642 2.52-2.599.088",[1185,2854,2855,2858],{"fill":1196,"stroke":1196,"style":1479},[1190,2856],{"fill":1192,"d":2857},"M-48.286-1.288 61.193-8.752",[1190,2859],{"stroke":1192,"d":2860},"m64.385-8.97-5.282-2.206 2.09 2.424-1.741 2.684",[1185,2862,2863],{"fill":1196,"stroke":1196},[1185,2864,2865,2872,2878,2884,2890,2896],{"fill":1196,"stroke":1192},[1185,2866,2868],{"transform":2867},"translate(47.036 14.804)",[1190,2869],{"d":2870,"fill":1196,"stroke":1196,"className":2871,"style":1499},"M-46.224-1.288L-48.020-1.288L-48.020-1.585Q-47.751-1.585-47.583-1.630Q-47.415-1.675-47.415-1.847L-47.415-6.007Q-47.415-6.222-47.477-6.317Q-47.540-6.413-47.657-6.434Q-47.774-6.456-48.020-6.456L-48.020-6.753L-46.798-6.839L-46.798-3.073L-45.700-3.960Q-45.493-4.140-45.493-4.288Q-45.493-4.354-45.546-4.397Q-45.599-4.440-45.669-4.440L-45.669-4.737L-44.134-4.737L-44.134-4.440Q-44.665-4.440-45.263-3.960L-45.872-3.464L-44.798-2.065Q-44.661-1.890-44.554-1.782Q-44.446-1.675-44.311-1.630Q-44.177-1.585-43.950-1.585L-43.950-1.288L-45.575-1.288L-45.575-1.585Q-45.333-1.585-45.333-1.737Q-45.333-1.815-45.376-1.886Q-45.419-1.956-45.501-2.065L-46.302-3.112L-46.829-2.686L-46.829-1.847Q-46.829-1.679-46.661-1.632Q-46.493-1.585-46.224-1.585",[1430],[1185,2873,2874],{"transform":2867},[1190,2875],{"d":2876,"fill":1196,"stroke":1196,"className":2877,"style":1499},"M-43.798-3.042Q-43.798-3.522-43.565-3.938Q-43.333-4.354-42.923-4.604Q-42.513-4.854-42.036-4.854Q-41.306-4.854-40.907-4.413Q-40.509-3.972-40.509-3.241Q-40.509-3.136-40.602-3.112L-43.052-3.112L-43.052-3.042Q-43.052-2.632-42.931-2.276Q-42.809-1.921-42.538-1.704Q-42.266-1.487-41.837-1.487Q-41.474-1.487-41.177-1.716Q-40.880-1.944-40.778-2.296Q-40.770-2.343-40.684-2.358L-40.602-2.358Q-40.509-2.331-40.509-2.249Q-40.509-2.241-40.516-2.210Q-40.579-1.983-40.718-1.800Q-40.856-1.616-41.048-1.483Q-41.239-1.350-41.458-1.280Q-41.677-1.210-41.915-1.210Q-42.286-1.210-42.624-1.347Q-42.962-1.483-43.229-1.735Q-43.497-1.987-43.647-2.327Q-43.798-2.667-43.798-3.042M-43.044-3.351L-41.083-3.351Q-41.083-3.655-41.184-3.946Q-41.286-4.237-41.503-4.419Q-41.720-4.601-42.036-4.601Q-42.337-4.601-42.567-4.413Q-42.798-4.226-42.921-3.934Q-43.044-3.643-43.044-3.351M-38.138 0.263L-39.993 0.263L-39.993-0.030Q-39.724-0.030-39.556-0.075Q-39.388-0.120-39.388-0.296L-39.388-4.120Q-39.388-4.327-39.544-4.380Q-39.700-4.433-39.993-4.433L-39.993-4.729L-38.770-4.815L-38.770-4.351Q-38.540-4.573-38.225-4.694Q-37.911-4.815-37.571-4.815Q-37.099-4.815-36.694-4.569Q-36.290-4.323-36.057-3.907Q-35.825-3.491-35.825-3.015Q-35.825-2.640-35.974-2.311Q-36.122-1.983-36.391-1.731Q-36.661-1.479-37.005-1.345Q-37.349-1.210-37.708-1.210Q-37.997-1.210-38.268-1.331Q-38.540-1.452-38.747-1.663L-38.747-0.296Q-38.747-0.120-38.579-0.075Q-38.411-0.030-38.138-0.030L-38.138 0.263M-38.747-3.952L-38.747-2.112Q-38.595-1.823-38.333-1.643Q-38.071-1.464-37.763-1.464Q-37.477-1.464-37.255-1.602Q-37.032-1.741-36.880-1.972Q-36.727-2.202-36.649-2.474Q-36.571-2.745-36.571-3.015Q-36.571-3.347-36.696-3.704Q-36.821-4.061-37.069-4.298Q-37.317-4.534-37.665-4.534Q-37.989-4.534-38.284-4.378Q-38.579-4.222-38.747-3.952M-34.677-2.249L-34.677-4.440L-35.380-4.440L-35.380-4.694Q-35.024-4.694-34.782-4.927Q-34.540-5.159-34.429-5.507Q-34.317-5.854-34.317-6.210L-34.036-6.210L-34.036-4.737L-32.860-4.737L-32.860-4.440L-34.036-4.440L-34.036-2.265Q-34.036-1.944-33.917-1.716Q-33.798-1.487-33.516-1.487Q-33.337-1.487-33.220-1.610Q-33.102-1.733-33.050-1.913Q-32.997-2.093-32.997-2.265L-32.997-2.737L-32.716-2.737L-32.716-2.249Q-32.716-1.995-32.821-1.755Q-32.927-1.515-33.124-1.362Q-33.321-1.210-33.579-1.210Q-33.895-1.210-34.147-1.333Q-34.399-1.456-34.538-1.690Q-34.677-1.925-34.677-2.249M-31.516-1.753Q-31.516-1.936-31.380-2.073Q-31.243-2.210-31.052-2.210Q-30.860-2.210-30.727-2.077Q-30.595-1.944-30.595-1.753Q-30.595-1.554-30.727-1.421Q-30.860-1.288-31.052-1.288Q-31.243-1.288-31.380-1.425Q-31.516-1.561-31.516-1.753M-31.516-4.280Q-31.516-4.464-31.380-4.601Q-31.243-4.737-31.052-4.737Q-30.860-4.737-30.727-4.604Q-30.595-4.472-30.595-4.280Q-30.595-4.081-30.727-3.948Q-30.860-3.815-31.052-3.815Q-31.243-3.815-31.380-3.952Q-31.516-4.089-31.516-4.280",[1430],[1185,2879,2880],{"transform":2867},[1190,2881],{"d":2882,"fill":1196,"stroke":1196,"className":2883,"style":1499},"M-24.603 0.263L-26.204 0.263Q-26.239 0.263-26.273 0.222Q-26.306 0.181-26.306 0.146L-26.275 0.040Q-26.243-0.022-26.189-0.030Q-25.997-0.030-25.913-0.046Q-25.829-0.061-25.777-0.128Q-25.724-0.194-25.685-0.335L-24.794-3.905Q-24.755-4.061-24.755-4.198Q-24.755-4.347-24.808-4.454Q-24.861-4.561-24.993-4.561Q-25.173-4.561-25.292-4.392Q-25.411-4.222-25.468-4.036Q-25.525-3.851-25.595-3.561Q-25.607-3.487-25.677-3.487L-25.779-3.487Q-25.814-3.487-25.841-3.522Q-25.868-3.558-25.868-3.585L-25.868-3.616Q-25.782-3.948-25.689-4.190Q-25.595-4.433-25.419-4.624Q-25.243-4.815-24.978-4.815Q-24.696-4.815-24.466-4.671Q-24.236-4.526-24.169-4.272Q-23.650-4.815-23.091-4.815Q-22.556-4.815-22.236-4.431Q-21.915-4.046-21.915-3.503Q-21.915-2.979-22.196-2.440Q-22.478-1.901-22.945-1.556Q-23.411-1.210-23.946-1.210Q-24.185-1.210-24.386-1.327Q-24.587-1.444-24.716-1.655L-25.060-0.280Q-25.071-0.241-25.091-0.120Q-25.091-0.030-24.587-0.030Q-24.482 0.001-24.482 0.095L-24.517 0.200Q-24.548 0.255-24.603 0.263M-24.161-3.854L-24.595-2.128Q-24.536-1.854-24.366-1.659Q-24.196-1.464-23.931-1.464Q-23.595-1.464-23.316-1.755Q-23.036-2.046-22.900-2.401Q-22.775-2.694-22.673-3.128Q-22.571-3.561-22.571-3.839Q-22.571-4.124-22.704-4.343Q-22.837-4.561-23.107-4.561Q-23.318-4.561-23.513-4.460Q-23.708-4.358-23.868-4.202Q-24.029-4.046-24.161-3.854",[1430],[1185,2885,2886],{"transform":2867},[1190,2887],{"d":2888,"fill":1196,"stroke":1196,"className":2889,"style":2704},"M-18.771-0.176L-21.062-0.176L-21.062-0.434Q-20.186-0.434-20.186-0.607L-20.186-3.686Q-20.379-3.598-20.611-3.561Q-20.842-3.525-21.097-3.525L-21.097-3.782Q-20.719-3.782-20.398-3.867Q-20.078-3.952-19.849-4.166L-19.729-4.166Q-19.697-4.166-19.672-4.143Q-19.647-4.119-19.647-4.081L-19.647-0.607Q-19.647-0.434-18.771-0.434",[1430],[1185,2891,2892],{"transform":2867},[1190,2893],{"d":2894,"fill":1196,"stroke":1196,"className":2895,"style":1499},"M-16.158 0.263L-17.759 0.263Q-17.794 0.263-17.828 0.222Q-17.861 0.181-17.861 0.146L-17.830 0.040Q-17.798-0.022-17.744-0.030Q-17.552-0.030-17.468-0.046Q-17.384-0.061-17.332-0.128Q-17.279-0.194-17.240-0.335L-16.349-3.905Q-16.310-4.061-16.310-4.198Q-16.310-4.347-16.363-4.454Q-16.416-4.561-16.548-4.561Q-16.728-4.561-16.847-4.392Q-16.966-4.222-17.023-4.036Q-17.080-3.851-17.150-3.561Q-17.162-3.487-17.232-3.487L-17.334-3.487Q-17.369-3.487-17.396-3.522Q-17.423-3.558-17.423-3.585L-17.423-3.616Q-17.337-3.948-17.244-4.190Q-17.150-4.433-16.974-4.624Q-16.798-4.815-16.533-4.815Q-16.251-4.815-16.021-4.671Q-15.791-4.526-15.724-4.272Q-15.205-4.815-14.646-4.815Q-14.111-4.815-13.791-4.431Q-13.470-4.046-13.470-3.503Q-13.470-2.979-13.751-2.440Q-14.033-1.901-14.500-1.556Q-14.966-1.210-15.501-1.210Q-15.740-1.210-15.941-1.327Q-16.142-1.444-16.271-1.655L-16.615-0.280Q-16.626-0.241-16.646-0.120Q-16.646-0.030-16.142-0.030Q-16.037 0.001-16.037 0.095L-16.072 0.200Q-16.103 0.255-16.158 0.263M-15.716-3.854L-16.150-2.128Q-16.091-1.854-15.921-1.659Q-15.751-1.464-15.486-1.464Q-15.150-1.464-14.871-1.755Q-14.591-2.046-14.455-2.401Q-14.330-2.694-14.228-3.128Q-14.126-3.561-14.126-3.839Q-14.126-4.124-14.259-4.343Q-14.392-4.561-14.662-4.561Q-14.873-4.561-15.068-4.460Q-15.263-4.358-15.423-4.202Q-15.584-4.046-15.716-3.854",[1430],[1185,2897,2898],{"transform":2867},[1190,2899],{"d":2900,"fill":1196,"stroke":1196,"className":2901,"style":2704},"M-11.237-1.155L-13.092-1.155L-13.092-1.412L-10.997-4.119Q-10.959-4.166-10.900-4.166L-10.768-4.166Q-10.727-4.166-10.700-4.138Q-10.672-4.111-10.672-4.070L-10.672-1.412L-9.983-1.412L-9.983-1.155L-10.672-1.155L-10.672-0.607Q-10.672-0.434-9.995-0.434L-9.995-0.176L-11.914-0.176L-11.914-0.434Q-11.237-0.434-11.237-0.607L-11.237-1.155M-11.196-3.495L-12.802-1.412L-11.196-1.412",[1430],[1200,2903,2905,2906,2958,2959,3011,3012,3064],{"className":2904},[1203],"One sweep step: ",[390,2907,2909],{"className":2908},[393],[390,2910,2912],{"className":2911,"ariaHidden":398},[397],[390,2913,2915,2918],{"className":2914},[402],[390,2916],{"className":2917,"style":1534},[406],[390,2919,2921,2924],{"className":2920},[411],[390,2922,381],{"className":2923},[411,412],[390,2925,2927],{"className":2926},[569],[390,2928,2930,2950],{"className":2929},[573,574],[390,2931,2933,2947],{"className":2932},[578],[390,2934,2936],{"className":2935,"style":2213},[582],[390,2937,2938,2941],{"style":653},[390,2939],{"className":2940,"style":591},[590],[390,2942,2944],{"className":2943},[595,596,597,598],[390,2945,2359],{"className":2946},[411,598],[390,2948,607],{"className":2949},[606],[390,2951,2953],{"className":2952},[578],[390,2954,2956],{"className":2955,"style":614},[582],[390,2957],{}," arrives and cascades two pops, ",[390,2960,2962],{"className":2961},[393],[390,2963,2965],{"className":2964,"ariaHidden":398},[397],[390,2966,2968,2971],{"className":2967},[402],[390,2969],{"className":2970,"style":1534},[406],[390,2972,2974,2977],{"className":2973},[411],[390,2975,381],{"className":2976},[411,412],[390,2978,2980],{"className":2979},[569],[390,2981,2983,3003],{"className":2982},[573,574],[390,2984,2986,3000],{"className":2985},[578],[390,2987,2989],{"className":2988,"style":2213},[582],[390,2990,2991,2994],{"style":653},[390,2992],{"className":2993,"style":591},[590],[390,2995,2997],{"className":2996},[595,596,597,598],[390,2998,1265],{"className":2999},[411,598],[390,3001,607],{"className":3002},[606],[390,3004,3006],{"className":3005},[578],[390,3007,3009],{"className":3008,"style":614},[582],[390,3010],{}," then ",[390,3013,3015],{"className":3014},[393],[390,3016,3018],{"className":3017,"ariaHidden":398},[397],[390,3019,3021,3024],{"className":3020},[402],[390,3022],{"className":3023,"style":1534},[406],[390,3025,3027,3030],{"className":3026},[411],[390,3028,381],{"className":3029},[411,412],[390,3031,3033],{"className":3032},[569],[390,3034,3036,3056],{"className":3035},[573,574],[390,3037,3039,3053],{"className":3038},[578],[390,3040,3042],{"className":3041,"style":2213},[582],[390,3043,3044,3047],{"style":653},[390,3045],{"className":3046,"style":591},[590],[390,3048,3050],{"className":3049},[595,596,597,598],[390,3051,1362],{"className":3052},[411,598],[390,3054,607],{"className":3055},[606],[390,3057,3059],{"className":3058},[578],[390,3060,3062],{"className":3061,"style":614},[582],[390,3063],{},", leaving the lower chain taut",[3066,3067,3071],"pre",{"className":3068,"code":3069,"language":3070,"meta":376,"style":376},"language-algorithm shiki shiki-themes Vesper Light - Orange Boost (Quick Open Adjusted) vesper","caption: $\\textsc{Monotone-Chain}(P)$ — convex hull of points $P$ in $O(n\\log n)$\nsort $P$ ascending by $(x, y)$, removing duplicates\n$L \\gets [\\,]$ \u002F\u002F lower hull\nfor each point $p$ in $P$ (left to right) do\n  while $|L| \\ge 2$ and $\\text{cross}(L_{-2}, L_{-1}, p) \\le 0$ do\n    pop $L$\n  push $p$ onto $L$\n$U \\gets [\\,]$ \u002F\u002F upper hull\nfor each point $p$ in $P$ (right to left) do\n  while $|U| \\ge 2$ and $\\text{cross}(U_{-2}, U_{-1}, p) \\le 0$ do\n    pop $U$\n  push $p$ onto $U$\ndrop the last element of $L$ and of $U$ \u002F\u002F shared endpoints\nreturn $L$ concatenated with $U$ \u002F\u002F counterclockwise\n","algorithm",[3072,3073,3074,3080,3085,3090,3095,3100,3105,3110,3115,3120,3125,3130,3135,3141],"code",{"__ignoreMap":376},[390,3075,3077],{"class":3076,"line":6},"line",[390,3078,3079],{},"caption: $\\textsc{Monotone-Chain}(P)$ — convex hull of points $P$ in $O(n\\log n)$\n",[390,3081,3082],{"class":3076,"line":18},[390,3083,3084],{},"sort $P$ ascending by $(x, y)$, removing duplicates\n",[390,3086,3087],{"class":3076,"line":24},[390,3088,3089],{},"$L \\gets [\\,]$ \u002F\u002F lower hull\n",[390,3091,3092],{"class":3076,"line":73},[390,3093,3094],{},"for each point $p$ in $P$ (left to right) do\n",[390,3096,3097],{"class":3076,"line":102},[390,3098,3099],{},"  while $|L| \\ge 2$ and $\\text{cross}(L_{-2}, L_{-1}, p) \\le 0$ do\n",[390,3101,3102],{"class":3076,"line":108},[390,3103,3104],{},"    pop $L$\n",[390,3106,3107],{"class":3076,"line":116},[390,3108,3109],{},"  push $p$ onto $L$\n",[390,3111,3112],{"class":3076,"line":196},[390,3113,3114],{},"$U \\gets [\\,]$ \u002F\u002F upper hull\n",[390,3116,3117],{"class":3076,"line":202},[390,3118,3119],{},"for each point $p$ in $P$ (right to left) do\n",[390,3121,3122],{"class":3076,"line":283},[390,3123,3124],{},"  while $|U| \\ge 2$ and $\\text{cross}(U_{-2}, U_{-1}, p) \\le 0$ do\n",[390,3126,3127],{"class":3076,"line":333},[390,3128,3129],{},"    pop $U$\n",[390,3131,3132],{"class":3076,"line":354},[390,3133,3134],{},"  push $p$ onto $U$\n",[390,3136,3138],{"class":3076,"line":3137},13,[390,3139,3140],{},"drop the last element of $L$ and of $U$ \u002F\u002F shared endpoints\n",[390,3142,3144],{"class":3076,"line":3143},14,[390,3145,3146],{},"return $L$ concatenated with $U$ \u002F\u002F counterclockwise\n",[381,3148,2059,3149,3262,3263,3310],{},[390,3150,3152],{"className":3151},[393],[390,3153,3155],{"className":3154,"ariaHidden":398},[397],[390,3156,3158,3162,3210,3213,3216],{"className":3157},[402],[390,3159],{"className":3160,"style":3161},[406],"height:0.8917em;vertical-align:-0.2083em;",[390,3163,3165,3169],{"className":3164},[411],[390,3166,3168],{"className":3167},[411,412],"L",[390,3170,3172],{"className":3171},[569],[390,3173,3175,3201],{"className":3174},[573,574],[390,3176,3178,3198],{"className":3177},[578],[390,3179,3181],{"className":3180,"style":2213},[582],[390,3182,3183,3186],{"style":653},[390,3184],{"className":3185,"style":591},[590],[390,3187,3189],{"className":3188},[595,596,597,598],[390,3190,3192,3195],{"className":3191},[411,598],[390,3193,478],{"className":3194},[411,598],[390,3196,2225],{"className":3197},[411,598],[390,3199,607],{"className":3200},[606],[390,3202,3204],{"className":3203},[578],[390,3205,3208],{"className":3206,"style":3207},[582],"height:0.2083em;",[390,3209],{},[390,3211,418],{"className":3212},[417],[390,3214],{"className":3215,"style":423},[422],[390,3217,3219,3222],{"className":3218},[411],[390,3220,3168],{"className":3221},[411,412],[390,3223,3225],{"className":3224},[569],[390,3226,3228,3254],{"className":3227},[573,574],[390,3229,3231,3251],{"className":3230},[578],[390,3232,3234],{"className":3233,"style":2213},[582],[390,3235,3236,3239],{"style":653},[390,3237],{"className":3238,"style":591},[590],[390,3240,3242],{"className":3241},[595,596,597,598],[390,3243,3245,3248],{"className":3244},[411,598],[390,3246,478],{"className":3247},[411,598],[390,3249,1362],{"className":3250},[411,598],[390,3252,607],{"className":3253},[606],[390,3255,3257],{"className":3256},[578],[390,3258,3260],{"className":3259,"style":3207},[582],[390,3261],{}," denote the top two stack elements and\n",[390,3264,3266],{"className":3265},[393],[390,3267,3269],{"className":3268,"ariaHidden":398},[397],[390,3270,3272,3275,3283,3286,3289,3292,3295,3298,3301,3304,3307],{"className":3271},[402],[390,3273],{"className":3274,"style":461},[406],[390,3276,3279],{"className":3277},[411,3278],"text",[390,3280,3282],{"className":3281},[411],"cross",[390,3284,466],{"className":3285},[465],[390,3287,413],{"className":3288},[411,412],[390,3290,418],{"className":3291},[417],[390,3293],{"className":3294,"style":423},[422],[390,3296,428],{"className":3297,"style":427},[411,412],[390,3299,418],{"className":3300},[417],[390,3302],{"className":3303,"style":423},[422],[390,3305,439],{"className":3306,"style":438},[411,412],[390,3308,495],{"className":3309},[494]," is the orientation value above. The last point of each\nchain is the first point of the other (the global min and max under the sort\norder), so we drop one copy of each to avoid duplicating the two extreme\nvertices.",[1103,3312,3314],{"type":3313},"proof",[381,3315,3316,3319,3320,3335,3336,3353,3354],{},[385,3317,3318],{},"Correctness."," After the left-to-right sweep, ",[390,3321,3323],{"className":3322},[393],[390,3324,3326],{"className":3325,"ariaHidden":398},[397],[390,3327,3329,3332],{"className":3328},[402],[390,3330],{"className":3331,"style":1022},[406],[390,3333,3168],{"className":3334},[411,412]," is exactly the lower\nboundary: every consecutive triple turns counterclockwise (the loop guarantees\nit), and no point lies below the chain, because any point we popped was strictly\nabove the segment that replaced it. The symmetric claim holds for ",[390,3337,3339],{"className":3338},[393],[390,3340,3342],{"className":3341,"ariaHidden":398},[397],[390,3343,3345,3348],{"className":3344},[402],[390,3346],{"className":3347,"style":1022},[406],[390,3349,3352],{"className":3350,"style":3351},[411,412],"margin-right:0.109em;","U",". A polygon\nwhose every interior angle is a left turn is convex, and it contains all points\nsince none lies below the lower chain or above the upper chain. ",[390,3355,3357],{"className":3356},[393],[390,3358,3360],{"className":3359,"ariaHidden":398},[397],[390,3361,3363,3367],{"className":3362},[402],[390,3364],{"className":3365,"style":3366},[406],"height:0.675em;",[390,3368,3372],{"className":3369},[3370,3371],"enclosing","qed",[390,3373,3376],{"className":3374},[411,3375],"amsrm","□",[381,3378,3379,1111,3382,3385,3386,3425,3426,3429,3430,3445,3446,3470,3471,3510],{},[385,3380,3381],{},"Complexity.",[442,3383,3384],{"href":56},"sort"," costs ",[390,3387,3389],{"className":3388},[393],[390,3390,3392],{"className":3391,"ariaHidden":398},[397],[390,3393,3395,3398,3401,3404,3407,3410,3416,3419,3422],{"className":3394},[402],[390,3396],{"className":3397,"style":461},[406],[390,3399,1329],{"className":3400},[411],[390,3402,466],{"className":3403},[465],[390,3405,1092],{"className":3406},[411,412],[390,3408],{"className":3409,"style":423},[422],[390,3411,3413],{"className":3412},[1394],[390,3414,1400],{"className":3415,"style":1399},[411,1398],[390,3417],{"className":3418,"style":423},[422],[390,3420,1092],{"className":3421},[411,412],[390,3423,495],{"className":3424},[494],". Each sweep is linear despite the\ninner ",[3072,3427,3428],{},"while",": a point is pushed once and popped at most once, so the total number\nof pop operations across a sweep is at most ",[390,3431,3433],{"className":3432},[393],[390,3434,3436],{"className":3435,"ariaHidden":398},[397],[390,3437,3439,3442],{"className":3438},[402],[390,3440],{"className":3441,"style":1088},[406],[390,3443,1092],{"className":3444},[411,412],". The work after sorting is\ntherefore ",[390,3447,3449],{"className":3448},[393],[390,3450,3452],{"className":3451,"ariaHidden":398},[397],[390,3453,3455,3458,3461,3464,3467],{"className":3454},[402],[390,3456],{"className":3457,"style":461},[406],[390,3459,1329],{"className":3460},[411],[390,3462,466],{"className":3463},[465],[390,3465,1092],{"className":3466},[411,412],[390,3468,495],{"className":3469},[494],", and the sort dominates: ",[390,3472,3474],{"className":3473},[393],[390,3475,3477],{"className":3476,"ariaHidden":398},[397],[390,3478,3480,3483,3486,3489,3492,3495,3501,3504,3507],{"className":3479},[402],[390,3481],{"className":3482,"style":461},[406],[390,3484,1230],{"className":3485,"style":1229},[411,412],[390,3487,466],{"className":3488},[465],[390,3490,1092],{"className":3491},[411,412],[390,3493],{"className":3494,"style":423},[422],[390,3496,3498],{"className":3497},[1394],[390,3499,1400],{"className":3500,"style":1399},[411,1398],[390,3502],{"className":3503,"style":423},[422],[390,3505,1092],{"className":3506},[411,412],[390,3508,495],{"className":3509},[494]," overall.",[1172,3512,3514,3667],{"className":3513},[1175,1176],[1178,3515,3519],{"xmlns":1180,"width":3516,"height":3517,"viewBox":3518},"277.384","180.305","-75 -75 208.038 135.228",[1185,3520,3521,3524,3531,3534,3541,3544,3551,3554,3561,3564,3571,3574,3581,3586,3591,3596,3599,3603,3638],{"stroke":1187,"style":1188},[1190,3522],{"stroke":1192,"d":3523},"M-47.359 8.951a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3525,3527],{"transform":3526},"translate(-12.79 -23.954)",[1190,3528],{"d":3529,"fill":1187,"stroke":1187,"className":3530,"style":1431},"M-47.318 35.981L-49.049 35.981Q-49.146 35.981-49.146 35.862Q-49.146 35.805-49.115 35.735Q-49.084 35.665-49.023 35.665Q-48.333 35.665-47.933 35.054Q-47.933 35.054-47.907 35.027L-44.637 29.644Q-44.576 29.539-44.448 29.539L-44.360 29.539Q-44.237 29.539-44.224 29.644L-43.596 35.476Q-43.552 35.594-43.361 35.629Q-43.169 35.665-42.910 35.665Q-42.866 35.665-42.833 35.702Q-42.800 35.739-42.800 35.774Q-42.800 35.981-42.963 35.981L-45.195 35.981Q-45.235 35.981-45.266 35.941Q-45.296 35.902-45.296 35.862Q-45.296 35.801-45.261 35.733Q-45.226 35.665-45.169 35.665Q-44.892 35.665-44.683 35.621Q-44.475 35.577-44.431 35.423L-44.593 33.938L-46.914 33.938L-47.634 35.133Q-47.718 35.256-47.718 35.379Q-47.718 35.537-47.577 35.601Q-47.437 35.665-47.256 35.665Q-47.212 35.665-47.186 35.698Q-47.160 35.731-47.160 35.774Q-47.160 35.981-47.318 35.981M-44.945 30.699L-46.716 33.621L-44.628 33.621",[1430],[1190,3532],{"stroke":1192,"d":3533},"M6.701 35.981a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3535,3537],{"transform":3536},"translate(50.335 12.004)",[1190,3538],{"d":3539,"fill":1187,"stroke":1187,"className":3540,"style":1431},"M-45.503 35.981L-48.975 35.981Q-49.084 35.981-49.084 35.862Q-49.084 35.801-49.052 35.733Q-49.019 35.665-48.957 35.665Q-48.456 35.665-48.228 35.612Q-48.100 35.564-48.030 35.335L-46.808 30.418Q-46.791 30.330-46.791 30.286Q-46.791 30.220-46.817 30.202Q-46.988 30.149-47.520 30.149Q-47.626 30.149-47.626 30.031Q-47.626 29.969-47.593 29.901Q-47.560 29.833-47.498 29.833L-44.224 29.833Q-43.820 29.833-43.427 29.969Q-43.033 30.106-42.778 30.389Q-42.523 30.672-42.523 31.085Q-42.523 31.521-42.818 31.881Q-43.112 32.241-43.550 32.465Q-43.987 32.689-44.422 32.769Q-44.062 32.804-43.734 32.962Q-43.407 33.120-43.202 33.397Q-42.998 33.674-42.998 34.039Q-42.998 34.452-43.229 34.812Q-43.459 35.172-43.846 35.434Q-44.233 35.695-44.668 35.838Q-45.103 35.981-45.503 35.981M-47.318 35.603Q-47.318 35.665-47.032 35.665L-45.683 35.665Q-45.235 35.665-44.815 35.427Q-44.396 35.190-44.143 34.797Q-43.890 34.403-43.890 33.955Q-43.890 33.661-44.011 33.423Q-44.132 33.186-44.349 33.050Q-44.567 32.914-44.861 32.914L-46.663 32.914L-47.283 35.397Q-47.318 35.537-47.318 35.603M-46.061 30.483L-46.602 32.650L-45.187 32.650Q-44.769 32.650-44.345 32.437Q-43.921 32.224-43.655 31.859Q-43.389 31.494-43.389 31.059Q-43.389 30.664-43.646 30.407Q-43.903 30.149-44.303 30.149L-45.591 30.149Q-45.850 30.149-45.925 30.196Q-46 30.242-46.061 30.483",[1430],[1190,3542],{"stroke":1192,"d":3543},"M87.791 27.872a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3545,3547],{"transform":3546},"translate(131.526 3.895)",[1190,3548],{"d":3549,"fill":1187,"stroke":1187,"className":3550,"style":1431},"M-48.148 34.008Q-48.148 34.838-47.661 35.350Q-47.173 35.862-46.338 35.862Q-45.767 35.862-45.233 35.581Q-44.699 35.300-44.314 34.819Q-43.930 34.337-43.785 33.784Q-43.776 33.753-43.752 33.729Q-43.728 33.705-43.692 33.705L-43.587 33.705Q-43.495 33.705-43.495 33.819Q-43.657 34.456-44.110 35.001Q-44.563 35.546-45.189 35.862Q-45.815 36.179-46.483 36.179Q-47.212 36.179-47.788 35.862Q-48.364 35.546-48.693 34.981Q-49.023 34.417-49.023 33.687Q-49.023 32.922-48.674 32.186Q-48.324 31.450-47.742 30.881Q-47.160 30.312-46.408 29.974Q-45.657 29.635-44.901 29.635Q-44.431 29.635-44.033 29.840Q-43.635 30.044-43.389 30.426L-42.677 29.653Q-42.660 29.635-42.620 29.635L-42.567 29.635Q-42.480 29.635-42.480 29.754L-43.082 32.149Q-43.099 32.228-43.169 32.228L-43.306 32.228Q-43.398 32.228-43.398 32.109Q-43.358 31.929-43.358 31.679Q-43.358 31.217-43.523 30.822Q-43.688 30.426-44.018 30.189Q-44.347 29.952-44.817 29.952Q-45.556 29.952-46.173 30.310Q-46.791 30.668-47.232 31.263Q-47.674 31.859-47.911 32.582Q-48.148 33.305-48.148 34.008",[1430],[1190,3552],{"stroke":1192,"d":3553},"M114.821-18.079a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3555,3557],{"transform":3556},"translate(168.03 -50.984)",[1190,3558],{"d":3559,"fill":1187,"stroke":1187,"className":3560,"style":1431},"M-45.762 35.981L-48.983 35.981Q-49.093 35.981-49.093 35.862Q-49.093 35.801-49.060 35.733Q-49.027 35.665-48.966 35.665Q-48.465 35.665-48.236 35.612Q-48.118 35.568-48.039 35.335L-46.817 30.418Q-46.799 30.330-46.799 30.286Q-46.799 30.220-46.826 30.202Q-46.997 30.149-47.529 30.149Q-47.634 30.149-47.634 30.031Q-47.634 29.969-47.601 29.901Q-47.568 29.833-47.507 29.833L-44.224 29.833Q-43.587 29.833-43.095 30.134Q-42.603 30.435-42.337 30.960Q-42.071 31.485-42.071 32.118Q-42.071 32.813-42.372 33.513Q-42.673 34.214-43.196 34.773Q-43.719 35.331-44.387 35.656Q-45.055 35.981-45.762 35.981M-47.300 35.603Q-47.300 35.665-47.015 35.665L-45.916 35.665Q-45.402 35.665-44.912 35.451Q-44.422 35.238-44.035 34.865Q-43.789 34.619-43.576 34.241Q-43.363 33.863-43.213 33.439Q-43.064 33.015-42.987 32.588Q-42.910 32.162-42.910 31.789Q-42.910 31.419-43.020 31.116Q-43.130 30.813-43.343 30.598Q-43.556 30.382-43.853 30.266Q-44.149 30.149-44.532 30.149L-45.573 30.149Q-45.833 30.149-45.907 30.196Q-45.982 30.242-46.043 30.483L-47.265 35.397Q-47.300 35.537-47.300 35.603",[1430],[1190,3562],{"stroke":1192,"d":3563},"M60.761-50.515a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3565,3567],{"transform":3566},"translate(104.458 -92.348)",[1190,3568],{"d":3569,"fill":1187,"stroke":1187,"className":3570,"style":1431},"M-43.917 35.981L-49.001 35.981Q-49.111 35.981-49.111 35.862Q-49.111 35.801-49.078 35.733Q-49.045 35.665-48.983 35.665Q-48.482 35.665-48.254 35.612Q-48.135 35.568-48.056 35.335L-46.834 30.418Q-46.817 30.330-46.817 30.286Q-46.817 30.220-46.843 30.202Q-47.015 30.149-47.546 30.149Q-47.652 30.149-47.652 30.031Q-47.652 29.969-47.619 29.901Q-47.586 29.833-47.529 29.833L-42.559 29.833Q-42.515 29.833-42.484 29.868Q-42.453 29.903-42.453 29.952L-42.660 31.789Q-42.677 31.894-42.765 31.894L-42.849 31.894Q-42.945 31.894-42.945 31.771Q-42.901 31.244-42.901 31.129Q-42.901 30.778-43.027 30.574Q-43.152 30.369-43.363 30.281Q-43.574 30.193-43.829 30.171Q-44.084 30.149-44.492 30.149L-45.564 30.149Q-45.824 30.149-45.898 30.196Q-45.973 30.242-46.035 30.483L-46.571 32.632L-45.855 32.632Q-45.376 32.632-45.145 32.571Q-44.914 32.509-44.776 32.312Q-44.637 32.114-44.523 31.661Q-44.505 31.582-44.422 31.582L-44.343 31.582Q-44.303 31.582-44.272 31.613Q-44.242 31.644-44.242 31.688L-44.242 31.723L-44.791 33.920Q-44.822 33.999-44.892 33.999L-44.971 33.999Q-45.015 33.999-45.048 33.962Q-45.081 33.924-45.081 33.885Q-45.081 33.832-45.035 33.648Q-44.989 33.463-44.989 33.344Q-44.989 33.081-45.233 33.015Q-45.477 32.949-45.872 32.949L-46.646 32.949L-47.256 35.397Q-47.292 35.537-47.292 35.603Q-47.292 35.665-47.006 35.665L-45.872 35.665Q-45.222 35.665-44.809 35.568Q-44.396 35.471-44.130 35.254Q-43.864 35.036-43.664 34.693Q-43.464 34.351-43.178 33.687Q-43.134 33.621-43.082 33.621L-42.998 33.621Q-42.954 33.621-42.928 33.654Q-42.901 33.687-42.901 33.731Q-42.901 33.766-42.910 33.775L-43.829 35.919Q-43.859 35.981-43.917 35.981",[1430],[1190,3572],{"stroke":1192,"d":3573},"M-20.329-45.109a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3575,3577],{"transform":3576},"translate(23.434 -86.943)",[1190,3578],{"d":3579,"fill":1187,"stroke":1187,"className":3580,"style":1431},"M-46.373 35.981L-49.014 35.981Q-49.111 35.981-49.111 35.862Q-49.111 35.801-49.078 35.733Q-49.045 35.665-48.983 35.665Q-48.482 35.665-48.254 35.612Q-48.135 35.568-48.056 35.335L-46.834 30.418Q-46.817 30.330-46.817 30.286Q-46.817 30.220-46.843 30.202Q-47.015 30.149-47.546 30.149Q-47.652 30.149-47.652 30.031Q-47.652 29.969-47.619 29.901Q-47.586 29.833-47.529 29.833L-42.686 29.833Q-42.638 29.833-42.607 29.868Q-42.576 29.903-42.576 29.952L-42.783 31.789Q-42.792 31.833-42.820 31.863Q-42.849 31.894-42.893 31.894L-42.972 31.894Q-43.073 31.894-43.073 31.771Q-43.029 31.222-43.029 31.112Q-43.029 30.664-43.229 30.453Q-43.429 30.242-43.730 30.196Q-44.031 30.149-44.558 30.149L-45.564 30.149Q-45.824 30.149-45.898 30.196Q-45.973 30.242-46.035 30.483L-46.602 32.751L-45.907 32.751Q-45.441 32.751-45.211 32.687Q-44.980 32.624-44.844 32.413Q-44.708 32.202-44.602 31.780Q-44.571 31.696-44.501 31.696L-44.422 31.696Q-44.378 31.696-44.345 31.729Q-44.312 31.762-44.312 31.806Q-44.312 31.824-44.321 31.841L-44.870 34.039Q-44.888 34.118-44.971 34.118L-45.050 34.118Q-45.151 34.118-45.151 33.999Q-45.151 33.951-45.105 33.766Q-45.059 33.582-45.059 33.463Q-45.059 33.204-45.299 33.133Q-45.538 33.063-45.925 33.063L-46.681 33.063L-47.265 35.423Q-47.265 35.440-47.267 35.456Q-47.270 35.471-47.274 35.493Q-47.274 35.590-47.204 35.612Q-46.953 35.665-46.320 35.665Q-46.272 35.665-46.243 35.698Q-46.215 35.731-46.215 35.774Q-46.215 35.981-46.373 35.981",[1430],[1185,3582,3583],{"fill":2761},[1190,3584],{"stroke":1192,"d":3585},"M6.701-4.564a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3587,3588],{"fill":2761},[1190,3589],{"stroke":1192,"d":3590},"M33.731-18.079a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,3592,3593],{"fill":2761},[1190,3594],{"stroke":1192,"d":3595},"M47.246 8.951a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1190,3597],{"fill":1192,"stroke":1196,"d":3598,"style":1479},"M-47.404 9.99 2.511 34.926m4.377.823 76.47-7.647m3.486-2.232 24.676-41.948",[1190,3600],{"fill":1192,"stroke":1196,"d":3601,"style":3602},"M110.706-19.272 60.628-49.319m-4.306-1.04-76.457 5.097m-3.354 2.23L-48.442 6.877","stroke-dasharray:3.0,3.0;stroke-width:1.2",[1185,3604,3605],{"fill":1196,"stroke":1196},[1185,3606,3607,3614,3620,3626,3632],{"fill":1196,"stroke":1192,"fontFamily":1490,"fontSize":1491},[1185,3608,3610],{"transform":3609},"translate(68.3 17.644)",[1190,3611],{"d":3612,"fill":1196,"stroke":1196,"className":3613,"style":1499},"M-47.328 35.981L-49.160 35.981L-49.160 35.684Q-48.886 35.684-48.718 35.637Q-48.550 35.590-48.550 35.422L-48.550 31.262Q-48.550 31.047-48.613 30.952Q-48.675 30.856-48.794 30.835Q-48.914 30.813-49.160 30.813L-49.160 30.516L-47.937 30.430L-47.937 35.422Q-47.937 35.590-47.769 35.637Q-47.601 35.684-47.328 35.684L-47.328 35.981M-46.882 34.286Q-46.882 33.782-46.626 33.350Q-46.371 32.919-45.935 32.667Q-45.500 32.415-45 32.415Q-44.613 32.415-44.271 32.559Q-43.929 32.704-43.667 32.965Q-43.406 33.227-43.263 33.563Q-43.121 33.899-43.121 34.286Q-43.121 34.778-43.384 35.188Q-43.648 35.598-44.078 35.829Q-44.507 36.059-45 36.059Q-45.492 36.059-45.925 35.827Q-46.359 35.594-46.621 35.186Q-46.882 34.778-46.882 34.286M-45 35.782Q-44.542 35.782-44.291 35.559Q-44.039 35.336-43.951 34.985Q-43.863 34.633-43.863 34.188Q-43.863 33.758-43.957 33.420Q-44.050 33.083-44.304 32.876Q-44.558 32.669-45 32.669Q-45.648 32.669-45.892 33.085Q-46.136 33.501-46.136 34.188Q-46.136 34.633-46.048 34.985Q-45.960 35.336-45.709 35.559Q-45.457 35.782-45 35.782",[1430],[1185,3615,3616],{"transform":3609},[1190,3617],{"d":3618,"fill":1196,"stroke":1196,"className":3619,"style":1499},"M-41.281 35.950L-42.351 33.094Q-42.417 32.915-42.548 32.872Q-42.679 32.829-42.937 32.829L-42.937 32.532L-41.257 32.532L-41.257 32.829Q-41.707 32.829-41.707 33.028Q-41.703 33.044-41.701 33.061Q-41.699 33.079-41.699 33.094L-40.906 35.188L-40.195 33.278Q-40.230 33.184-40.230 33.139Q-40.230 33.094-40.265 33.094Q-40.332 32.915-40.462 32.872Q-40.593 32.829-40.847 32.829L-40.847 32.532L-39.257 32.532L-39.257 32.829Q-39.707 32.829-39.707 33.028Q-39.703 33.047-39.701 33.065Q-39.699 33.083-39.699 33.094L-38.867 35.309L-38.113 33.309Q-38.089 33.251-38.089 33.180Q-38.089 33.020-38.226 32.924Q-38.363 32.829-38.531 32.829L-38.531 32.532L-37.144 32.532L-37.144 32.829Q-37.378 32.829-37.556 32.956Q-37.734 33.083-37.816 33.309L-38.800 35.950Q-38.855 36.059-38.968 36.059L-39.027 36.059Q-39.140 36.059-39.183 35.950L-40.042 33.676L-40.898 35.950Q-40.937 36.059-41.058 36.059L-41.113 36.059Q-41.226 36.059-41.281 35.950",[1430],[1185,3621,3622],{"transform":3609},[1190,3623],{"d":3624,"fill":1196,"stroke":1196,"className":3625,"style":1499},"M-36.964 34.227Q-36.964 33.747-36.731 33.331Q-36.499 32.915-36.089 32.665Q-35.679 32.415-35.202 32.415Q-34.472 32.415-34.073 32.856Q-33.675 33.297-33.675 34.028Q-33.675 34.133-33.768 34.157L-36.218 34.157L-36.218 34.227Q-36.218 34.637-36.097 34.993Q-35.975 35.348-35.704 35.565Q-35.432 35.782-35.003 35.782Q-34.639 35.782-34.343 35.553Q-34.046 35.325-33.944 34.973Q-33.936 34.926-33.850 34.911L-33.768 34.911Q-33.675 34.938-33.675 35.020Q-33.675 35.028-33.682 35.059Q-33.745 35.286-33.884 35.469Q-34.022 35.653-34.214 35.786Q-34.405 35.919-34.624 35.989Q-34.843 36.059-35.081 36.059Q-35.452 36.059-35.790 35.922Q-36.128 35.786-36.395 35.534Q-36.663 35.282-36.813 34.942Q-36.964 34.602-36.964 34.227M-36.210 33.919L-34.249 33.919Q-34.249 33.614-34.350 33.323Q-34.452 33.032-34.669 32.850Q-34.886 32.669-35.202 32.669Q-35.503 32.669-35.733 32.856Q-35.964 33.044-36.087 33.335Q-36.210 33.626-36.210 33.919M-31.179 35.981L-33.159 35.981L-33.159 35.684Q-32.889 35.684-32.722 35.639Q-32.554 35.594-32.554 35.422L-32.554 33.286Q-32.554 33.071-32.616 32.975Q-32.679 32.879-32.796 32.858Q-32.913 32.836-33.159 32.836L-33.159 32.540L-31.991 32.454L-31.991 33.239Q-31.913 33.028-31.761 32.842Q-31.608 32.657-31.409 32.555Q-31.210 32.454-30.983 32.454Q-30.737 32.454-30.546 32.598Q-30.354 32.743-30.354 32.973Q-30.354 33.129-30.460 33.239Q-30.565 33.348-30.722 33.348Q-30.878 33.348-30.987 33.239Q-31.097 33.129-31.097 32.973Q-31.097 32.813-30.991 32.708Q-31.315 32.708-31.530 32.936Q-31.745 33.165-31.841 33.504Q-31.936 33.844-31.936 34.149L-31.936 35.422Q-31.936 35.590-31.710 35.637Q-31.483 35.684-31.179 35.684",[1430],[1185,3627,3628],{"transform":3609},[1190,3629],{"d":3630,"fill":1196,"stroke":1196,"className":3631,"style":1499},"M-26.997 34.254Q-26.997 33.758-26.747 33.333Q-26.497 32.907-26.077 32.661Q-25.657 32.415-25.157 32.415Q-24.618 32.415-24.227 32.540Q-23.837 32.665-23.837 33.079Q-23.837 33.184-23.887 33.276Q-23.938 33.368-24.030 33.419Q-24.122 33.469-24.231 33.469Q-24.337 33.469-24.428 33.419Q-24.520 33.368-24.571 33.276Q-24.622 33.184-24.622 33.079Q-24.622 32.856-24.454 32.751Q-24.676 32.692-25.149 32.692Q-25.446 32.692-25.661 32.831Q-25.876 32.969-26.007 33.200Q-26.137 33.430-26.196 33.700Q-26.255 33.969-26.255 34.254Q-26.255 34.649-26.122 34.999Q-25.989 35.348-25.717 35.565Q-25.446 35.782-25.048 35.782Q-24.673 35.782-24.397 35.565Q-24.122 35.348-24.020 34.989Q-24.005 34.926-23.942 34.926L-23.837 34.926Q-23.801 34.926-23.776 34.954Q-23.751 34.981-23.751 35.020L-23.751 35.044Q-23.883 35.524-24.268 35.792Q-24.653 36.059-25.157 36.059Q-25.520 36.059-25.854 35.922Q-26.188 35.786-26.448 35.536Q-26.708 35.286-26.852 34.950Q-26.997 34.614-26.997 34.254",[1430],[1185,3633,3634],{"transform":3609},[1190,3635],{"d":3636,"fill":1196,"stroke":1196,"className":3637,"style":1499},"M-21.569 35.981L-23.424 35.981L-23.424 35.684Q-23.151 35.684-22.983 35.637Q-22.815 35.590-22.815 35.422L-22.815 31.262Q-22.815 31.047-22.878 30.952Q-22.940 30.856-23.059 30.835Q-23.178 30.813-23.424 30.813L-23.424 30.516L-22.202 30.430L-22.202 33.133Q-22.077 32.922-21.889 32.772Q-21.702 32.622-21.475 32.538Q-21.249 32.454-21.003 32.454Q-19.835 32.454-19.835 33.532L-19.835 35.422Q-19.835 35.590-19.665 35.637Q-19.495 35.684-19.225 35.684L-19.225 35.981L-21.081 35.981L-21.081 35.684Q-20.807 35.684-20.639 35.637Q-20.471 35.590-20.471 35.422L-20.471 33.547Q-20.471 33.165-20.592 32.936Q-20.714 32.708-21.065 32.708Q-21.378 32.708-21.632 32.870Q-21.885 33.032-22.032 33.301Q-22.178 33.571-22.178 33.868L-22.178 35.422Q-22.178 35.590-22.008 35.637Q-21.839 35.684-21.569 35.684L-21.569 35.981M-18.682 35.149Q-18.682 34.665-18.280 34.370Q-17.878 34.075-17.327 33.956Q-16.776 33.836-16.284 33.836L-16.284 33.547Q-16.284 33.321-16.399 33.114Q-16.514 32.907-16.712 32.788Q-16.909 32.669-17.139 32.669Q-17.565 32.669-17.850 32.774Q-17.780 32.801-17.733 32.856Q-17.686 32.911-17.661 32.981Q-17.635 33.051-17.635 33.126Q-17.635 33.231-17.686 33.323Q-17.737 33.415-17.829 33.465Q-17.921 33.516-18.026 33.516Q-18.132 33.516-18.223 33.465Q-18.315 33.415-18.366 33.323Q-18.417 33.231-18.417 33.126Q-18.417 32.708-18.028 32.561Q-17.639 32.415-17.139 32.415Q-16.807 32.415-16.454 32.545Q-16.100 32.676-15.872 32.930Q-15.643 33.184-15.643 33.532L-15.643 35.333Q-15.643 35.465-15.571 35.575Q-15.499 35.684-15.370 35.684Q-15.245 35.684-15.176 35.579Q-15.108 35.473-15.108 35.333L-15.108 34.821L-14.827 34.821L-14.827 35.333Q-14.827 35.536-14.944 35.694Q-15.061 35.852-15.243 35.936Q-15.424 36.020-15.628 36.020Q-15.858 36.020-16.010 35.848Q-16.163 35.676-16.194 35.446Q-16.354 35.727-16.663 35.893Q-16.971 36.059-17.323 36.059Q-17.835 36.059-18.258 35.836Q-18.682 35.614-18.682 35.149M-17.995 35.149Q-17.995 35.434-17.768 35.620Q-17.542 35.805-17.249 35.805Q-17.003 35.805-16.778 35.688Q-16.553 35.571-16.419 35.368Q-16.284 35.165-16.284 34.911L-16.284 34.079Q-16.549 34.079-16.835 34.133Q-17.120 34.188-17.391 34.317Q-17.663 34.446-17.829 34.653Q-17.995 34.860-17.995 35.149M-12.674 35.981L-14.452 35.981L-14.452 35.684Q-14.178 35.684-14.010 35.637Q-13.842 35.590-13.842 35.422L-13.842 33.286Q-13.842 33.071-13.899 32.975Q-13.956 32.879-14.069 32.858Q-14.182 32.836-14.428 32.836L-14.428 32.540L-13.229 32.454L-13.229 35.422Q-13.229 35.590-13.083 35.637Q-12.936 35.684-12.674 35.684L-12.674 35.981M-14.116 31.059Q-14.116 30.868-13.981 30.737Q-13.846 30.606-13.651 30.606Q-13.530 30.606-13.426 30.669Q-13.323 30.731-13.260 30.835Q-13.198 30.938-13.198 31.059Q-13.198 31.254-13.329 31.389Q-13.460 31.524-13.651 31.524Q-13.850 31.524-13.983 31.391Q-14.116 31.258-14.116 31.059M-10.245 35.981L-12.100 35.981L-12.100 35.684Q-11.827 35.684-11.659 35.637Q-11.491 35.590-11.491 35.422L-11.491 33.286Q-11.491 33.071-11.553 32.975Q-11.616 32.879-11.735 32.858Q-11.854 32.836-12.100 32.836L-12.100 32.540L-10.909 32.454L-10.909 33.188Q-10.796 32.973-10.602 32.805Q-10.409 32.637-10.171 32.545Q-9.932 32.454-9.678 32.454Q-8.510 32.454-8.510 33.532L-8.510 35.422Q-8.510 35.590-8.341 35.637Q-8.171 35.684-7.901 35.684L-7.901 35.981L-9.757 35.981L-9.757 35.684Q-9.483 35.684-9.315 35.637Q-9.147 35.590-9.147 35.422L-9.147 33.547Q-9.147 33.165-9.268 32.936Q-9.389 32.708-9.741 32.708Q-10.053 32.708-10.307 32.870Q-10.561 33.032-10.708 33.301Q-10.854 33.571-10.854 33.868L-10.854 35.422Q-10.854 35.590-10.684 35.637Q-10.514 35.684-10.245 35.684",[1430],[1185,3639,3640],{"fill":1196,"stroke":1196},[1185,3641,3642,3649,3655,3661],{"fill":1196,"stroke":1192,"fontFamily":1490,"fontSize":1491},[1185,3643,3645],{"transform":3644},"translate(59.128 -99.363)",[1190,3646],{"d":3647,"fill":1196,"stroke":1196,"className":3648,"style":1499},"M-48.558 35.028L-48.558 33.286Q-48.558 33.071-48.621 32.975Q-48.683 32.879-48.802 32.858Q-48.921 32.836-49.167 32.836L-49.167 32.540L-47.921 32.454L-47.921 35.004L-47.921 35.028Q-47.921 35.340-47.867 35.502Q-47.812 35.665-47.662 35.735Q-47.511 35.805-47.191 35.805Q-46.761 35.805-46.488 35.467Q-46.214 35.129-46.214 34.684L-46.214 33.286Q-46.214 33.071-46.277 32.975Q-46.339 32.879-46.459 32.858Q-46.578 32.836-46.824 32.836L-46.824 32.540L-45.578 32.454L-45.578 35.239Q-45.578 35.450-45.515 35.545Q-45.453 35.641-45.334 35.663Q-45.214 35.684-44.968 35.684L-44.968 35.981L-46.191 36.059L-46.191 35.438Q-46.359 35.727-46.640 35.893Q-46.921 36.059-47.242 36.059Q-48.558 36.059-48.558 35.028M-42.640 37.532L-44.496 37.532L-44.496 37.239Q-44.226 37.239-44.058 37.194Q-43.890 37.149-43.890 36.973L-43.890 33.149Q-43.890 32.942-44.046 32.889Q-44.203 32.836-44.496 32.836L-44.496 32.540L-43.273 32.454L-43.273 32.919Q-43.042 32.696-42.728 32.575Q-42.414 32.454-42.074 32.454Q-41.601 32.454-41.197 32.700Q-40.792 32.946-40.560 33.362Q-40.328 33.778-40.328 34.254Q-40.328 34.629-40.476 34.958Q-40.625 35.286-40.894 35.538Q-41.164 35.790-41.507 35.924Q-41.851 36.059-42.210 36.059Q-42.500 36.059-42.771 35.938Q-43.042 35.817-43.250 35.606L-43.250 36.973Q-43.250 37.149-43.082 37.194Q-42.914 37.239-42.640 37.239L-42.640 37.532M-43.250 33.317L-43.250 35.157Q-43.097 35.446-42.835 35.626Q-42.574 35.805-42.265 35.805Q-41.980 35.805-41.757 35.667Q-41.535 35.528-41.382 35.297Q-41.230 35.067-41.152 34.795Q-41.074 34.524-41.074 34.254Q-41.074 33.922-41.199 33.565Q-41.324 33.208-41.572 32.971Q-41.820 32.735-42.167 32.735Q-42.492 32.735-42.787 32.891Q-43.082 33.047-43.250 33.317M-37.921 37.532L-39.777 37.532L-39.777 37.239Q-39.507 37.239-39.339 37.194Q-39.171 37.149-39.171 36.973L-39.171 33.149Q-39.171 32.942-39.328 32.889Q-39.484 32.836-39.777 32.836L-39.777 32.540L-38.554 32.454L-38.554 32.919Q-38.324 32.696-38.009 32.575Q-37.695 32.454-37.355 32.454Q-36.882 32.454-36.478 32.700Q-36.074 32.946-35.841 33.362Q-35.609 33.778-35.609 34.254Q-35.609 34.629-35.757 34.958Q-35.906 35.286-36.175 35.538Q-36.445 35.790-36.789 35.924Q-37.132 36.059-37.492 36.059Q-37.781 36.059-38.052 35.938Q-38.324 35.817-38.531 35.606L-38.531 36.973Q-38.531 37.149-38.363 37.194Q-38.195 37.239-37.921 37.239L-37.921 37.532M-38.531 33.317L-38.531 35.157Q-38.378 35.446-38.117 35.626Q-37.855 35.805-37.546 35.805Q-37.261 35.805-37.039 35.667Q-36.816 35.528-36.664 35.297Q-36.511 35.067-36.433 34.795Q-36.355 34.524-36.355 34.254Q-36.355 33.922-36.480 33.565Q-36.605 33.208-36.853 32.971Q-37.101 32.735-37.449 32.735Q-37.773 32.735-38.068 32.891Q-38.363 33.047-38.531 33.317",[1430],[1185,3650,3651],{"transform":3644},[1190,3652],{"d":3653,"fill":1196,"stroke":1196,"className":3654,"style":1499},"M-34.839 34.227Q-34.839 33.747-34.606 33.331Q-34.374 32.915-33.964 32.665Q-33.554 32.415-33.077 32.415Q-32.347 32.415-31.948 32.856Q-31.550 33.297-31.550 34.028Q-31.550 34.133-31.643 34.157L-34.093 34.157L-34.093 34.227Q-34.093 34.637-33.972 34.993Q-33.850 35.348-33.579 35.565Q-33.307 35.782-32.878 35.782Q-32.514 35.782-32.218 35.553Q-31.921 35.325-31.819 34.973Q-31.811 34.926-31.725 34.911L-31.643 34.911Q-31.550 34.938-31.550 35.020Q-31.550 35.028-31.557 35.059Q-31.620 35.286-31.759 35.469Q-31.897 35.653-32.089 35.786Q-32.280 35.919-32.499 35.989Q-32.718 36.059-32.956 36.059Q-33.327 36.059-33.665 35.922Q-34.003 35.786-34.270 35.534Q-34.538 35.282-34.688 34.942Q-34.839 34.602-34.839 34.227M-34.085 33.919L-32.124 33.919Q-32.124 33.614-32.225 33.323Q-32.327 33.032-32.544 32.850Q-32.761 32.669-33.077 32.669Q-33.378 32.669-33.608 32.856Q-33.839 33.044-33.962 33.335Q-34.085 33.626-34.085 33.919M-29.054 35.981L-31.034 35.981L-31.034 35.684Q-30.764 35.684-30.597 35.639Q-30.429 35.594-30.429 35.422L-30.429 33.286Q-30.429 33.071-30.491 32.975Q-30.554 32.879-30.671 32.858Q-30.788 32.836-31.034 32.836L-31.034 32.540L-29.866 32.454L-29.866 33.239Q-29.788 33.028-29.636 32.842Q-29.483 32.657-29.284 32.555Q-29.085 32.454-28.858 32.454Q-28.612 32.454-28.421 32.598Q-28.229 32.743-28.229 32.973Q-28.229 33.129-28.335 33.239Q-28.440 33.348-28.597 33.348Q-28.753 33.348-28.862 33.239Q-28.972 33.129-28.972 32.973Q-28.972 32.813-28.866 32.708Q-29.190 32.708-29.405 32.936Q-29.620 33.165-29.716 33.504Q-29.811 33.844-29.811 34.149L-29.811 35.422Q-29.811 35.590-29.585 35.637Q-29.358 35.684-29.054 35.684",[1430],[1185,3656,3657],{"transform":3644},[1190,3658],{"d":3659,"fill":1196,"stroke":1196,"className":3660,"style":1499},"M-24.872 34.254Q-24.872 33.758-24.622 33.333Q-24.372 32.907-23.952 32.661Q-23.532 32.415-23.032 32.415Q-22.493 32.415-22.102 32.540Q-21.712 32.665-21.712 33.079Q-21.712 33.184-21.762 33.276Q-21.813 33.368-21.905 33.419Q-21.997 33.469-22.106 33.469Q-22.212 33.469-22.303 33.419Q-22.395 33.368-22.446 33.276Q-22.497 33.184-22.497 33.079Q-22.497 32.856-22.329 32.751Q-22.551 32.692-23.024 32.692Q-23.321 32.692-23.536 32.831Q-23.751 32.969-23.882 33.200Q-24.012 33.430-24.071 33.700Q-24.130 33.969-24.130 34.254Q-24.130 34.649-23.997 34.999Q-23.864 35.348-23.592 35.565Q-23.321 35.782-22.923 35.782Q-22.548 35.782-22.272 35.565Q-21.997 35.348-21.895 34.989Q-21.880 34.926-21.817 34.926L-21.712 34.926Q-21.676 34.926-21.651 34.954Q-21.626 34.981-21.626 35.020L-21.626 35.044Q-21.758 35.524-22.143 35.792Q-22.528 36.059-23.032 36.059Q-23.395 36.059-23.729 35.922Q-24.063 35.786-24.323 35.536Q-24.583 35.286-24.727 34.950Q-24.872 34.614-24.872 34.254",[1430],[1185,3662,3663],{"transform":3644},[1190,3664],{"d":3665,"fill":1196,"stroke":1196,"className":3666,"style":1499},"M-19.444 35.981L-21.299 35.981L-21.299 35.684Q-21.026 35.684-20.858 35.637Q-20.690 35.590-20.690 35.422L-20.690 31.262Q-20.690 31.047-20.753 30.952Q-20.815 30.856-20.934 30.835Q-21.053 30.813-21.299 30.813L-21.299 30.516L-20.077 30.430L-20.077 33.133Q-19.952 32.922-19.764 32.772Q-19.577 32.622-19.350 32.538Q-19.124 32.454-18.878 32.454Q-17.710 32.454-17.710 33.532L-17.710 35.422Q-17.710 35.590-17.540 35.637Q-17.370 35.684-17.100 35.684L-17.100 35.981L-18.956 35.981L-18.956 35.684Q-18.682 35.684-18.514 35.637Q-18.346 35.590-18.346 35.422L-18.346 33.547Q-18.346 33.165-18.467 32.936Q-18.589 32.708-18.940 32.708Q-19.253 32.708-19.507 32.870Q-19.760 33.032-19.907 33.301Q-20.053 33.571-20.053 33.868L-20.053 35.422Q-20.053 35.590-19.883 35.637Q-19.714 35.684-19.444 35.684L-19.444 35.981M-16.557 35.149Q-16.557 34.665-16.155 34.370Q-15.753 34.075-15.202 33.956Q-14.651 33.836-14.159 33.836L-14.159 33.547Q-14.159 33.321-14.274 33.114Q-14.389 32.907-14.587 32.788Q-14.784 32.669-15.014 32.669Q-15.440 32.669-15.725 32.774Q-15.655 32.801-15.608 32.856Q-15.561 32.911-15.536 32.981Q-15.510 33.051-15.510 33.126Q-15.510 33.231-15.561 33.323Q-15.612 33.415-15.704 33.465Q-15.796 33.516-15.901 33.516Q-16.007 33.516-16.098 33.465Q-16.190 33.415-16.241 33.323Q-16.292 33.231-16.292 33.126Q-16.292 32.708-15.903 32.561Q-15.514 32.415-15.014 32.415Q-14.682 32.415-14.329 32.545Q-13.975 32.676-13.747 32.930Q-13.518 33.184-13.518 33.532L-13.518 35.333Q-13.518 35.465-13.446 35.575Q-13.374 35.684-13.245 35.684Q-13.120 35.684-13.051 35.579Q-12.983 35.473-12.983 35.333L-12.983 34.821L-12.702 34.821L-12.702 35.333Q-12.702 35.536-12.819 35.694Q-12.936 35.852-13.118 35.936Q-13.299 36.020-13.503 36.020Q-13.733 36.020-13.885 35.848Q-14.038 35.676-14.069 35.446Q-14.229 35.727-14.538 35.893Q-14.846 36.059-15.198 36.059Q-15.710 36.059-16.133 35.836Q-16.557 35.614-16.557 35.149M-15.870 35.149Q-15.870 35.434-15.643 35.620Q-15.417 35.805-15.124 35.805Q-14.878 35.805-14.653 35.688Q-14.428 35.571-14.294 35.368Q-14.159 35.165-14.159 34.911L-14.159 34.079Q-14.424 34.079-14.710 34.133Q-14.995 34.188-15.266 34.317Q-15.538 34.446-15.704 34.653Q-15.870 34.860-15.870 35.149M-10.549 35.981L-12.327 35.981L-12.327 35.684Q-12.053 35.684-11.885 35.637Q-11.717 35.590-11.717 35.422L-11.717 33.286Q-11.717 33.071-11.774 32.975Q-11.831 32.879-11.944 32.858Q-12.057 32.836-12.303 32.836L-12.303 32.540L-11.104 32.454L-11.104 35.422Q-11.104 35.590-10.958 35.637Q-10.811 35.684-10.549 35.684L-10.549 35.981M-11.991 31.059Q-11.991 30.868-11.856 30.737Q-11.721 30.606-11.526 30.606Q-11.405 30.606-11.301 30.669Q-11.198 30.731-11.135 30.835Q-11.073 30.938-11.073 31.059Q-11.073 31.254-11.204 31.389Q-11.335 31.524-11.526 31.524Q-11.725 31.524-11.858 31.391Q-11.991 31.258-11.991 31.059M-8.120 35.981L-9.975 35.981L-9.975 35.684Q-9.702 35.684-9.534 35.637Q-9.366 35.590-9.366 35.422L-9.366 33.286Q-9.366 33.071-9.428 32.975Q-9.491 32.879-9.610 32.858Q-9.729 32.836-9.975 32.836L-9.975 32.540L-8.784 32.454L-8.784 33.188Q-8.671 32.973-8.477 32.805Q-8.284 32.637-8.046 32.545Q-7.807 32.454-7.553 32.454Q-6.385 32.454-6.385 33.532L-6.385 35.422Q-6.385 35.590-6.216 35.637Q-6.046 35.684-5.776 35.684L-5.776 35.981L-7.632 35.981L-7.632 35.684Q-7.358 35.684-7.190 35.637Q-7.022 35.590-7.022 35.422L-7.022 33.547Q-7.022 33.165-7.143 32.936Q-7.264 32.708-7.616 32.708Q-7.928 32.708-8.182 32.870Q-8.436 33.032-8.583 33.301Q-8.729 33.571-8.729 33.868L-8.729 35.422Q-8.729 35.590-8.559 35.637Q-8.389 35.684-8.120 35.684",[1430],[1200,3668,3670,3671,3686],{"className":3669},[1203],"Monotone chain builds the lower chain (",[390,3672,3674],{"className":3673},[393],[390,3675,3677],{"className":3676,"ariaHidden":398},[397],[390,3678,3680,3683],{"className":3679},[402],[390,3681],{"className":3682,"style":1088},[406],[390,3684,602],{"className":3685},[411,412]," increasing) then the upper chain back",[1098,3688,3690],{"id":3689},"graham-scan-the-classic-alternative","Graham scan: the classic alternative",[381,3692,3693,3694,3733,3734,3737,3738,3753,3754,3769,3770,3822,3823,3826,3827,3879,3880,1002,3919,3928,3929,3959,3960,3979],{},"The original ",[390,3695,3697],{"className":3696},[393],[390,3698,3700],{"className":3699,"ariaHidden":398},[397],[390,3701,3703,3706,3709,3712,3715,3718,3724,3727,3730],{"className":3702},[402],[390,3704],{"className":3705,"style":461},[406],[390,3707,1230],{"className":3708,"style":1229},[411,412],[390,3710,466],{"className":3711},[465],[390,3713,1092],{"className":3714},[411,412],[390,3716],{"className":3717,"style":423},[422],[390,3719,3721],{"className":3720},[1394],[390,3722,1400],{"className":3723,"style":1399},[411,1398],[390,3725],{"className":3726,"style":423},[422],[390,3728,1092],{"className":3729},[411,412],[390,3731,495],{"className":3732},[494]," hull algorithm, ",[385,3735,3736],{},"Graham's scan",", has the same skeleton\nbut a different ordering. Pick the point with the lowest ",[390,3739,3741],{"className":3740},[393],[390,3742,3744],{"className":3743,"ariaHidden":398},[397],[390,3745,3747,3750],{"className":3746},[402],[390,3748],{"className":3749,"style":1534},[406],[390,3751,711],{"className":3752,"style":710},[411,412],"-coordinate (ties\nbroken by ",[390,3755,3757],{"className":3756},[393],[390,3758,3760],{"className":3759,"ariaHidden":398},[397],[390,3761,3763,3766],{"className":3762},[402],[390,3764],{"className":3765,"style":1088},[406],[390,3767,602],{"className":3768},[411,412],") as a pivot ",[390,3771,3773],{"className":3772},[393],[390,3774,3776],{"className":3775,"ariaHidden":398},[397],[390,3777,3779,3782],{"className":3778},[402],[390,3780],{"className":3781,"style":1534},[406],[390,3783,3785,3788],{"className":3784},[411],[390,3786,381],{"className":3787},[411,412],[390,3789,3791],{"className":3790},[569],[390,3792,3794,3814],{"className":3793},[573,574],[390,3795,3797,3811],{"className":3796},[578],[390,3798,3800],{"className":3799,"style":2213},[582],[390,3801,3802,3805],{"style":653},[390,3803],{"className":3804,"style":591},[590],[390,3806,3808],{"className":3807},[595,596,597,598],[390,3809,1858],{"className":3810},[411,598],[390,3812,607],{"className":3813},[606],[390,3815,3817],{"className":3816},[578],[390,3818,3820],{"className":3819,"style":614},[582],[390,3821],{},"; it is certainly a hull vertex. Sort the remaining\npoints by ",[385,3824,3825],{},"polar angle"," around ",[390,3828,3830],{"className":3829},[393],[390,3831,3833],{"className":3832,"ariaHidden":398},[397],[390,3834,3836,3839],{"className":3835},[402],[390,3837],{"className":3838,"style":1534},[406],[390,3840,3842,3845],{"className":3841},[411],[390,3843,381],{"className":3844},[411,412],[390,3846,3848],{"className":3847},[569],[390,3849,3851,3871],{"className":3850},[573,574],[390,3852,3854,3868],{"className":3853},[578],[390,3855,3857],{"className":3856,"style":2213},[582],[390,3858,3859,3862],{"style":653},[390,3860],{"className":3861,"style":591},[590],[390,3863,3865],{"className":3864},[595,596,597,598],[390,3866,1858],{"className":3867},[411,598],[390,3869,607],{"className":3870},[606],[390,3872,3874],{"className":3873},[578],[390,3875,3877],{"className":3876,"style":614},[582],[390,3878],{},", then scan them in that angular order,\nmaintaining a stack and popping whenever the last three points fail to turn left,\nthe identical orientation test. Because the points are visited in angular order,\none pass suffices to trace the whole boundary, again in ",[390,3881,3883],{"className":3882},[393],[390,3884,3886],{"className":3885,"ariaHidden":398},[397],[390,3887,3889,3892,3895,3898,3901,3904,3910,3913,3916],{"className":3888},[402],[390,3890],{"className":3891,"style":461},[406],[390,3893,1230],{"className":3894,"style":1229},[411,412],[390,3896,466],{"className":3897},[465],[390,3899,1092],{"className":3900},[411,412],[390,3902],{"className":3903,"style":423},[422],[390,3905,3907],{"className":3906},[1394],[390,3908,1400],{"className":3909,"style":1399},[411,1398],[390,3911],{"className":3912,"style":423},[422],[390,3914,1092],{"className":3915},[411,412],[390,3917,495],{"className":3918},[494],[3920,3921,3922],"sup",{},[442,3923,2225],{"href":3924,"ariaDescribedBy":3925,"dataFootnoteRef":376,"id":3927},"#user-content-fn-clrs-graham",[3926],"footnote-label","user-content-fnref-clrs-graham","\nMonotone chain is usually preferred in practice precisely because it avoids the\npolar-angle sort: comparing ",[390,3930,3932],{"className":3931},[393],[390,3933,3935],{"className":3934,"ariaHidden":398},[397],[390,3936,3938,3941,3944,3947,3950,3953,3956],{"className":3937},[402],[390,3939],{"className":3940,"style":461},[406],[390,3942,466],{"className":3943},[465],[390,3945,602],{"className":3946},[411,412],[390,3948,418],{"className":3949},[417],[390,3951],{"className":3952,"style":423},[422],[390,3954,711],{"className":3955,"style":710},[411,412],[390,3957,495],{"className":3958},[494]," lexicographically uses only the coordinates,\nwhereas sorting by angle requires either ",[390,3961,3963],{"className":3962},[393],[390,3964,3966],{"className":3965,"ariaHidden":398},[397],[390,3967,3969,3972],{"className":3968},[402],[390,3970],{"className":3971,"style":1854},[406],[390,3973,3975],{"className":3974},[1394],[390,3976,3978],{"className":3977},[411,1398],"atan2"," (floating point,\nslow, imprecise) or cross-product comparisons with careful handling of the pivot,\nwhich means more code and more numerical fragility for the same asymptotics.",[1098,3981,3983],{"id":3982},"degeneracies","Degeneracies",[381,3985,3986,3987,3990],{},"Real inputs are not in ",[1554,3988,3989],{},"general position,"," and the hull is where edge cases bite.",[3992,3993,3994,4001],"ul",{},[3995,3996,3997,4000],"li",{},[385,3998,3999],{},"Duplicate points"," must be removed first (the sort makes this a linear scan);\na repeated point can otherwise wedge a zero-length edge into the chain and break\nthe turn test.",[3995,4002,4003,4006,4007,4034,4035,4038,4039,4067,4068,4071,4072,4075,4076,4079,4080,4107,4108,4135],{},[385,4004,4005],{},"Collinear points on a hull edge"," are a deliberate policy choice, and it lives\nentirely in the comparison operator. Using ",[390,4008,4010],{"className":4009},[393],[390,4011,4013,4025],{"className":4012,"ariaHidden":398},[397],[390,4014,4016,4019,4022],{"className":4015},[402],[390,4017],{"className":4018,"style":1888},[406],[390,4020,1892],{"className":4021},[546],[390,4023],{"className":4024,"style":542},[422],[390,4026,4028,4031],{"className":4027},[402],[390,4029],{"className":4030,"style":1854},[406],[390,4032,1858],{"className":4033},[411]," in the pop condition (as\nabove) ",[385,4036,4037],{},"discards"," collinear points, keeping only true corners — the minimal\nvertex set. Using ",[390,4040,4042],{"className":4041},[393],[390,4043,4045,4058],{"className":4044,"ariaHidden":398},[397],[390,4046,4048,4051,4055],{"className":4047},[402],[390,4049],{"className":4050,"style":1840},[406],[390,4052,4054],{"className":4053},[546],"\u003C",[390,4056],{"className":4057,"style":542},[422],[390,4059,4061,4064],{"className":4060},[402],[390,4062],{"className":4063,"style":1854},[406],[390,4065,1858],{"className":4066},[411]," ",[385,4069,4070],{},"keeps"," collinear points on the boundary, so a flat\nedge with interior points reports all of them. Problems like ",[1209,4073,4074],{},"Erect the Fence",",\nwhich ask for ",[1209,4077,4078],{},"every"," point lying on the fence, want the ",[390,4081,4083],{"className":4082},[393],[390,4084,4086,4098],{"className":4085,"ariaHidden":398},[397],[390,4087,4089,4092,4095],{"className":4088},[402],[390,4090],{"className":4091,"style":1840},[406],[390,4093,4054],{"className":4094},[546],[390,4096],{"className":4097,"style":542},[422],[390,4099,4101,4104],{"className":4100},[402],[390,4102],{"className":4103,"style":1854},[406],[390,4105,1858],{"className":4106},[411]," variant; most\ngeometry that follows (diameter, area) wants the lean ",[390,4109,4111],{"className":4110},[393],[390,4112,4114,4126],{"className":4113,"ariaHidden":398},[397],[390,4115,4117,4120,4123],{"className":4116},[402],[390,4118],{"className":4119,"style":1888},[406],[390,4121,1892],{"className":4122},[546],[390,4124],{"className":4125,"style":542},[422],[390,4127,4129,4132],{"className":4128},[402],[390,4130],{"className":4131,"style":1854},[406],[390,4133,1858],{"className":4134},[411]," hull. Decide which\none your caller needs and pick the inequality accordingly.",[1098,4137,4139,4140],{"id":4138},"a-lower-bound-ωnlogn","A lower bound: ",[390,4141,4143],{"className":4142},[393],[390,4144,4146],{"className":4145,"ariaHidden":398},[397],[390,4147,4149,4152,4156,4159,4162,4165,4171,4174,4177],{"className":4148},[402],[390,4150],{"className":4151,"style":461},[406],[390,4153,4155],{"className":4154},[411],"Ω",[390,4157,466],{"className":4158},[465],[390,4160,1092],{"className":4161},[411,412],[390,4163],{"className":4164,"style":423},[422],[390,4166,4168],{"className":4167},[1394],[390,4169,1400],{"className":4170,"style":1399},[411,1398],[390,4172],{"className":4173,"style":423},[422],[390,4175,1092],{"className":4176},[411,412],[390,4178,495],{"className":4179},[494],[381,4181,4182,4183,4222,4223,4226,4227,4230],{},"The ",[390,4184,4186],{"className":4185},[393],[390,4187,4189],{"className":4188,"ariaHidden":398},[397],[390,4190,4192,4195,4198,4201,4204,4207,4213,4216,4219],{"className":4191},[402],[390,4193],{"className":4194,"style":461},[406],[390,4196,1230],{"className":4197,"style":1229},[411,412],[390,4199,466],{"className":4200},[465],[390,4202,1092],{"className":4203},[411,412],[390,4205],{"className":4206,"style":423},[422],[390,4208,4210],{"className":4209},[1394],[390,4211,1400],{"className":4212,"style":1399},[411,1398],[390,4214],{"className":4215,"style":423},[422],[390,4217,1092],{"className":4218},[411,412],[390,4220,495],{"className":4221},[494]," running time is not an artifact of these particular algorithms.\n",[385,4224,4225],{},"No"," comparison-based hull algorithm can beat it, by the same\n",[442,4228,4229],{"href":62},"lower-bound argument"," that pins\ncomparison sorting.",[1103,4232,4234],{"type":4233},"theorem",[381,4235,4236,4239,4240,4255,4256,4295],{},[385,4237,4238],{},"Theorem."," Computing the convex hull of ",[390,4241,4243],{"className":4242},[393],[390,4244,4246],{"className":4245,"ariaHidden":398},[397],[390,4247,4249,4252],{"className":4248},[402],[390,4250],{"className":4251,"style":1088},[406],[390,4253,1092],{"className":4254},[411,412]," points (reported in boundary\norder) requires ",[390,4257,4259],{"className":4258},[393],[390,4260,4262],{"className":4261,"ariaHidden":398},[397],[390,4263,4265,4268,4271,4274,4277,4280,4286,4289,4292],{"className":4264},[402],[390,4266],{"className":4267,"style":461},[406],[390,4269,4155],{"className":4270},[411],[390,4272,466],{"className":4273},[465],[390,4275,1092],{"className":4276},[411,412],[390,4278],{"className":4279,"style":423},[422],[390,4281,4283],{"className":4282},[1394],[390,4284,1400],{"className":4285,"style":1399},[411,1398],[390,4287],{"className":4288,"style":423},[422],[390,4290,1092],{"className":4291},[411,412],[390,4293,495],{"className":4294},[494]," time in the algebraic decision-tree model.",[1103,4297,4298],{"type":3313},[381,4299,4300,4303,4304,4319,4320,4432,4433,4553,4554,4613,4614,4616,4617,4632,4633,4686,4687,4727,4728,4767,4768,4807,4808,4811,4812],{},[385,4301,4302],{},"Proof sketch (reduction from sorting)."," Given ",[390,4305,4307],{"className":4306},[393],[390,4308,4310],{"className":4309,"ariaHidden":398},[397],[390,4311,4313,4316],{"className":4312},[402],[390,4314],{"className":4315,"style":1088},[406],[390,4317,1092],{"className":4318},[411,412]," reals ",[390,4321,4323],{"className":4322},[393],[390,4324,4326],{"className":4325,"ariaHidden":398},[397],[390,4327,4329,4332,4372,4375,4378,4383,4386,4389,4392],{"className":4328},[402],[390,4330],{"className":4331,"style":1534},[406],[390,4333,4335,4338],{"className":4334},[411],[390,4336,602],{"className":4337},[411,412],[390,4339,4341],{"className":4340},[569],[390,4342,4344,4364],{"className":4343},[573,574],[390,4345,4347,4361],{"className":4346},[578],[390,4348,4350],{"className":4349,"style":2213},[582],[390,4351,4352,4355],{"style":653},[390,4353],{"className":4354,"style":591},[590],[390,4356,4358],{"className":4357},[595,596,597,598],[390,4359,2225],{"className":4360},[411,598],[390,4362,607],{"className":4363},[606],[390,4365,4367],{"className":4366},[578],[390,4368,4370],{"className":4369,"style":614},[582],[390,4371],{},[390,4373,418],{"className":4374},[417],[390,4376],{"className":4377,"style":423},[422],[390,4379,4382],{"className":4380},[4381],"minner","…",[390,4384],{"className":4385,"style":423},[422],[390,4387,418],{"className":4388},[417],[390,4390],{"className":4391,"style":423},[422],[390,4393,4395,4398],{"className":4394},[411],[390,4396,602],{"className":4397},[411,412],[390,4399,4401],{"className":4400},[569],[390,4402,4404,4424],{"className":4403},[573,574],[390,4405,4407,4421],{"className":4406},[578],[390,4408,4410],{"className":4409,"style":583},[582],[390,4411,4412,4415],{"style":653},[390,4413],{"className":4414,"style":591},[590],[390,4416,4418],{"className":4417},[595,596,597,598],[390,4419,1092],{"className":4420},[411,412,598],[390,4422,607],{"className":4423},[606],[390,4425,4427],{"className":4426},[578],[390,4428,4430],{"className":4429,"style":614},[582],[390,4431],{}," to\nsort, map each to the planar point ",[390,4434,4436],{"className":4435},[393],[390,4437,4439],{"className":4438,"ariaHidden":398},[397],[390,4440,4442,4446,4449,4491,4494,4497,4550],{"className":4441},[402],[390,4443],{"className":4444,"style":4445},[406],"height:1.0728em;vertical-align:-0.2587em;",[390,4447,466],{"className":4448},[465],[390,4450,4452,4455],{"className":4451},[411],[390,4453,602],{"className":4454},[411,412],[390,4456,4458],{"className":4457},[569],[390,4459,4461,4483],{"className":4460},[573,574],[390,4462,4464,4480],{"className":4463},[578],[390,4465,4468],{"className":4466,"style":4467},[582],"height:0.3117em;",[390,4469,4470,4473],{"style":653},[390,4471],{"className":4472,"style":591},[590],[390,4474,4476],{"className":4475},[595,596,597,598],[390,4477,4479],{"className":4478},[411,412,598],"i",[390,4481,607],{"className":4482},[606],[390,4484,4486],{"className":4485},[578],[390,4487,4489],{"className":4488,"style":614},[582],[390,4490],{},[390,4492,418],{"className":4493},[417],[390,4495],{"className":4496,"style":423},[422],[390,4498,4500,4503],{"className":4499},[411],[390,4501,602],{"className":4502},[411,412],[390,4504,4506],{"className":4505},[569],[390,4507,4509,4541],{"className":4508},[573,574],[390,4510,4512,4538],{"className":4511},[578],[390,4513,4515,4527],{"className":4514,"style":1252},[582],[390,4516,4518,4521],{"style":4517},"top:-2.4413em;margin-left:0em;margin-right:0.05em;",[390,4519],{"className":4520,"style":591},[590],[390,4522,4524],{"className":4523},[595,596,597,598],[390,4525,4479],{"className":4526},[411,412,598],[390,4528,4529,4532],{"style":1255},[390,4530],{"className":4531,"style":591},[590],[390,4533,4535],{"className":4534},[595,596,597,598],[390,4536,1362],{"className":4537},[411,598],[390,4539,607],{"className":4540},[606],[390,4542,4544],{"className":4543},[578],[390,4545,4548],{"className":4546,"style":4547},[582],"height:0.2587em;",[390,4549],{},[390,4551,495],{"className":4552},[494],". These points lie on the\nparabola ",[390,4555,4557],{"className":4556},[393],[390,4558,4560,4578],{"className":4559,"ariaHidden":398},[397],[390,4561,4563,4566,4569,4572,4575],{"className":4562},[402],[390,4564],{"className":4565,"style":1534},[406],[390,4567,711],{"className":4568,"style":710},[411,412],[390,4570],{"className":4571,"style":542},[422],[390,4573,547],{"className":4574},[546],[390,4576],{"className":4577,"style":542},[422],[390,4579,4581,4584],{"className":4580},[402],[390,4582],{"className":4583,"style":1252},[406],[390,4585,4587,4590],{"className":4586},[411],[390,4588,602],{"className":4589},[411,412],[390,4591,4593],{"className":4592},[569],[390,4594,4596],{"className":4595},[573],[390,4597,4599],{"className":4598},[578],[390,4600,4602],{"className":4601,"style":1252},[582],[390,4603,4604,4607],{"style":1255},[390,4605],{"className":4606,"style":591},[590],[390,4608,4610],{"className":4609},[595,596,597,598],[390,4611,1362],{"className":4612},[411,598],", which is convex, so ",[385,4615,4078],{}," point is a hull vertex and the\nhull is the entire set. Reading the hull off in boundary order lists the points\nby increasing ",[390,4618,4620],{"className":4619},[393],[390,4621,4623],{"className":4622,"ariaHidden":398},[397],[390,4624,4626,4629],{"className":4625},[402],[390,4627],{"className":4628,"style":1088},[406],[390,4630,602],{"className":4631},[411,412]," — that is, it sorts the ",[390,4634,4636],{"className":4635},[393],[390,4637,4639],{"className":4638,"ariaHidden":398},[397],[390,4640,4642,4646],{"className":4641},[402],[390,4643],{"className":4644,"style":4645},[406],"height:0.5806em;vertical-align:-0.15em;",[390,4647,4649,4652],{"className":4648},[411],[390,4650,602],{"className":4651},[411,412],[390,4653,4655],{"className":4654},[569],[390,4656,4658,4678],{"className":4657},[573,574],[390,4659,4661,4675],{"className":4660},[578],[390,4662,4664],{"className":4663,"style":4467},[582],[390,4665,4666,4669],{"style":653},[390,4667],{"className":4668,"style":591},[590],[390,4670,4672],{"className":4671},[595,596,597,598],[390,4673,4479],{"className":4674},[411,412,598],[390,4676,607],{"className":4677},[606],[390,4679,4681],{"className":4680},[578],[390,4682,4684],{"className":4683,"style":614},[582],[390,4685],{},". A hull algorithm running in\n",[390,4688,4690],{"className":4689},[393],[390,4691,4693],{"className":4692,"ariaHidden":398},[397],[390,4694,4696,4699,4703,4706,4709,4712,4718,4721,4724],{"className":4695},[402],[390,4697],{"className":4698,"style":461},[406],[390,4700,4702],{"className":4701},[411,412],"o",[390,4704,466],{"className":4705},[465],[390,4707,1092],{"className":4708},[411,412],[390,4710],{"className":4711,"style":423},[422],[390,4713,4715],{"className":4714},[1394],[390,4716,1400],{"className":4717,"style":1399},[411,1398],[390,4719],{"className":4720,"style":423},[422],[390,4722,1092],{"className":4723},[411,412],[390,4725,495],{"className":4726},[494]," would thus sort in ",[390,4729,4731],{"className":4730},[393],[390,4732,4734],{"className":4733,"ariaHidden":398},[397],[390,4735,4737,4740,4743,4746,4749,4752,4758,4761,4764],{"className":4736},[402],[390,4738],{"className":4739,"style":461},[406],[390,4741,4702],{"className":4742},[411,412],[390,4744,466],{"className":4745},[465],[390,4747,1092],{"className":4748},[411,412],[390,4750],{"className":4751,"style":423},[422],[390,4753,4755],{"className":4754},[1394],[390,4756,1400],{"className":4757,"style":1399},[411,1398],[390,4759],{"className":4760,"style":423},[422],[390,4762,1092],{"className":4763},[411,412],[390,4765,495],{"className":4766},[494],", contradicting the\n",[390,4769,4771],{"className":4770},[393],[390,4772,4774],{"className":4773,"ariaHidden":398},[397],[390,4775,4777,4780,4783,4786,4789,4792,4798,4801,4804],{"className":4776},[402],[390,4778],{"className":4779,"style":461},[406],[390,4781,4155],{"className":4782},[411],[390,4784,466],{"className":4785},[465],[390,4787,1092],{"className":4788},[411,412],[390,4790],{"className":4791,"style":423},[422],[390,4793,4795],{"className":4794},[1394],[390,4796,1400],{"className":4797,"style":1399},[411,1398],[390,4799],{"className":4800,"style":423},[422],[390,4802,1092],{"className":4803},[411,412],[390,4805,495],{"className":4806},[494]," comparison-sorting bound established in the\n",[385,4809,4810],{},"sorting-lower-bounds"," lesson. ",[390,4813,4815],{"className":4814},[393],[390,4816,4818],{"className":4817,"ariaHidden":398},[397],[390,4819,4821,4824],{"className":4820},[402],[390,4822],{"className":4823,"style":3366},[406],[390,4825,4827],{"className":4826},[3370,3371],[390,4828,3376],{"className":4829},[411,3375],[1172,4831,4833,4977],{"className":4832},[1175,1176],[1178,4834,4838],{"xmlns":1180,"width":4835,"height":4836,"viewBox":4837},"244.421","199.021","-75 -75 183.316 149.266",[1185,4839,4840,4843,4846,4853,4856,4863,4866,4873,4876,4883,4886,4893,4896,4899,4906,4909,4930],{"stroke":1187,"style":1188},[1190,4841],{"fill":1192,"stroke":1196,"d":4842,"style":1198},"m-51.959-56.44 2.177 6.442 2.177 6.22 2.178 5.997 2.177 5.776 2.177 5.554 2.177 5.331 2.177 5.11 2.178 4.887 2.177 4.665 2.177 4.443 2.177 4.22 2.177 4 2.178 3.776 2.177 3.555 2.177 3.332 2.177 3.11 2.177 2.889 2.178 2.666 2.177 2.443 2.177 2.222 2.177 2 2.177 1.777 2.178 1.556 2.177 1.333 2.177 1.111 2.177.89 2.177.666 2.178.444 2.177.223h2.177l2.177-.22 2.177-.445 2.178-.666 2.177-.888 2.177-1.11 2.177-1.332 2.177-1.555 2.178-1.776 2.177-1.999 2.177-2.22 2.177-2.444 2.178-2.665 2.177-2.887 2.177-3.11 2.177-3.33 2.177-3.554L50.37 6.22l2.177-3.998 2.177-4.22L56.9-6.439l2.177-4.664 2.178-4.886 2.177-5.109 2.177-5.33 2.177-5.553 2.177-5.775 2.178-5.997 2.177-6.219 2.177-6.441",[1190,4844],{"stroke":1192,"d":4845},"M-45.357-43.423a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.12 0",[1185,4847,4849],{"transform":4848},"translate(-69.185 -88.824)",[1190,4850],{"d":4851,"fill":1187,"stroke":1187,"className":4852,"style":1499},"M15.867 40.226L13.074 40.226L13.074 39.929Q14.136 39.929 14.136 39.667L14.136 35.499Q13.707 35.714 13.027 35.714L13.027 35.417Q14.046 35.417 14.562 34.906L14.707 34.906Q14.781 34.925 14.800 35.003L14.800 39.667Q14.800 39.929 15.867 39.929",[1430],[1190,4854],{"stroke":1192,"d":4855},"M-15.481 19.314a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.121 0",[1185,4857,4859],{"transform":4858},"translate(-39.305 -26.087)",[1190,4860],{"d":4861,"fill":1187,"stroke":1187,"className":4862,"style":1499},"M15.859 40.226L12.699 40.226L12.699 40.019Q12.699 39.992 12.722 39.960L14.074 38.562Q14.453 38.175 14.701 37.886Q14.949 37.597 15.123 37.240Q15.296 36.882 15.296 36.492Q15.296 36.144 15.164 35.851Q15.031 35.558 14.777 35.380Q14.523 35.203 14.168 35.203Q13.808 35.203 13.517 35.398Q13.226 35.593 13.082 35.921L13.136 35.921Q13.320 35.921 13.445 36.042Q13.570 36.163 13.570 36.355Q13.570 36.535 13.445 36.663Q13.320 36.792 13.136 36.792Q12.957 36.792 12.828 36.663Q12.699 36.535 12.699 36.355Q12.699 35.953 12.919 35.617Q13.140 35.281 13.505 35.093Q13.871 34.906 14.273 34.906Q14.753 34.906 15.169 35.093Q15.585 35.281 15.837 35.642Q16.089 36.003 16.089 36.492Q16.089 36.851 15.935 37.154Q15.781 37.456 15.529 37.716Q15.277 37.976 14.927 38.261Q14.578 38.546 14.410 38.699L13.480 39.538L14.195 39.538Q15.570 39.538 15.609 39.499Q15.679 39.421 15.722 39.236Q15.765 39.050 15.808 38.761L16.089 38.761",[1430],[1190,4864],{"stroke":1192,"d":4865},"M14.394 40.226a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,4867,4869],{"transform":4868},"translate(-9.425 -5.174)",[1190,4870],{"d":4871,"fill":1187,"stroke":1187,"className":4872,"style":1499},"M13.066 39.593Q13.257 39.867 13.613 39.994Q13.968 40.121 14.351 40.121Q14.687 40.121 14.896 39.935Q15.105 39.749 15.201 39.456Q15.296 39.163 15.296 38.851Q15.296 38.527 15.199 38.232Q15.101 37.937 14.888 37.753Q14.675 37.570 14.343 37.570L13.777 37.570Q13.746 37.570 13.716 37.540Q13.687 37.511 13.687 37.484L13.687 37.402Q13.687 37.367 13.716 37.341Q13.746 37.316 13.777 37.316L14.257 37.281Q14.543 37.281 14.740 37.076Q14.937 36.871 15.033 36.576Q15.128 36.281 15.128 36.003Q15.128 35.624 14.929 35.386Q14.730 35.148 14.351 35.148Q14.031 35.148 13.742 35.255Q13.453 35.363 13.289 35.585Q13.468 35.585 13.591 35.712Q13.714 35.839 13.714 36.011Q13.714 36.183 13.589 36.308Q13.464 36.433 13.289 36.433Q13.117 36.433 12.992 36.308Q12.867 36.183 12.867 36.011Q12.867 35.644 13.091 35.396Q13.316 35.148 13.656 35.027Q13.996 34.906 14.351 34.906Q14.699 34.906 15.062 35.027Q15.425 35.148 15.673 35.398Q15.921 35.648 15.921 36.003Q15.921 36.488 15.603 36.871Q15.285 37.253 14.808 37.425Q15.359 37.535 15.759 37.921Q16.160 38.308 16.160 38.843Q16.160 39.300 15.896 39.656Q15.632 40.011 15.210 40.203Q14.789 40.394 14.351 40.394Q13.941 40.394 13.548 40.259Q13.156 40.124 12.890 39.839Q12.625 39.554 12.625 39.136Q12.625 38.941 12.757 38.812Q12.890 38.683 13.082 38.683Q13.207 38.683 13.310 38.742Q13.414 38.800 13.476 38.906Q13.539 39.011 13.539 39.136Q13.539 39.331 13.404 39.462Q13.269 39.593 13.066 39.593",[1430],[1190,4874],{"stroke":1192,"d":4875},"M44.27 19.314a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1185,4877,4879],{"transform":4878},"translate(20.455 -26.087)",[1190,4880],{"d":4881,"fill":1187,"stroke":1187,"className":4882,"style":1499},"M14.753 38.913L12.511 38.913L12.511 38.617L15.082 34.960Q15.121 34.906 15.183 34.906L15.328 34.906Q15.378 34.906 15.410 34.937Q15.441 34.968 15.441 35.019L15.441 38.617L16.273 38.617L16.273 38.913L15.441 38.913L15.441 39.667Q15.441 39.929 16.265 39.929L16.265 40.226L13.929 40.226L13.929 39.929Q14.753 39.929 14.753 39.667L14.753 38.913M14.808 35.812L12.839 38.617L14.808 38.617",[1430],[1190,4884],{"stroke":1192,"d":4885},"M74.145-43.423a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1185,4887,4889],{"transform":4888},"translate(50.336 -88.824)",[1190,4890],{"d":4891,"fill":1187,"stroke":1187,"className":4892,"style":1499},"M13.113 39.347L13.050 39.347Q13.191 39.699 13.515 39.910Q13.839 40.121 14.226 40.121Q14.820 40.121 15.070 39.687Q15.320 39.253 15.320 38.617Q15.320 38.023 15.150 37.576Q14.980 37.128 14.480 37.128Q14.183 37.128 13.978 37.208Q13.773 37.288 13.671 37.380Q13.570 37.472 13.455 37.605Q13.339 37.738 13.289 37.753L13.218 37.753Q13.132 37.730 13.113 37.652L13.113 35.003Q13.144 34.906 13.218 34.906Q13.234 34.906 13.242 34.908Q13.250 34.910 13.257 34.913Q13.843 35.163 14.441 35.163Q15.023 35.163 15.640 34.906L15.664 34.906Q15.707 34.906 15.734 34.931Q15.761 34.956 15.761 34.996L15.761 35.074Q15.761 35.105 15.738 35.128Q15.441 35.480 15.019 35.677Q14.597 35.874 14.136 35.874Q13.789 35.874 13.410 35.769L13.410 37.265Q13.628 37.070 13.904 36.972Q14.179 36.874 14.480 36.874Q14.937 36.874 15.306 37.122Q15.675 37.371 15.882 37.775Q16.089 38.179 16.089 38.624Q16.089 39.113 15.834 39.521Q15.578 39.929 15.146 40.162Q14.714 40.394 14.226 40.394Q13.832 40.394 13.476 40.203Q13.121 40.011 12.910 39.677Q12.699 39.343 12.699 38.929Q12.699 38.749 12.816 38.636Q12.933 38.523 13.113 38.523Q13.230 38.523 13.322 38.576Q13.414 38.628 13.466 38.720Q13.519 38.812 13.519 38.929Q13.519 39.113 13.406 39.230Q13.293 39.347 13.113 39.347",[1430],[1190,4894],{"fill":1192,"d":4895},"M-65.403 51.728h156.34",[1190,4897],{"stroke":1192,"d":4898},"m92.937 51.728-3.2-1.6 1.2 1.6-1.2 1.6",[1185,4900,4902],{"transform":4901},"translate(84.197 13.44)",[1190,4903],{"d":4904,"fill":1187,"stroke":1187,"className":4905,"style":1431},"M13.002 39.936Q13.178 40.063 13.451 40.063Q13.741 40.063 13.954 39.809Q14.167 39.554 14.246 39.237L14.650 37.624Q14.738 37.247 14.738 37.058Q14.738 36.833 14.611 36.671Q14.483 36.508 14.264 36.508Q13.846 36.508 13.514 36.858Q13.183 37.207 13.064 37.660Q13.046 37.743 12.976 37.743L12.866 37.743Q12.778 37.743 12.778 37.624Q12.910 37.084 13.332 36.666Q13.754 36.249 14.281 36.249Q14.615 36.249 14.890 36.420Q15.165 36.592 15.279 36.886Q15.437 36.614 15.683 36.431Q15.929 36.249 16.215 36.249Q16.553 36.249 16.826 36.416Q17.098 36.583 17.098 36.904Q17.098 37.132 16.955 37.301Q16.813 37.471 16.575 37.471Q16.435 37.471 16.329 37.378Q16.224 37.286 16.224 37.141Q16.224 36.956 16.347 36.814Q16.470 36.671 16.654 36.636Q16.474 36.508 16.197 36.508Q15.907 36.508 15.696 36.765Q15.485 37.022 15.406 37.339L15.002 38.947Q14.910 39.308 14.910 39.505Q14.910 39.738 15.039 39.901Q15.169 40.063 15.398 40.063Q15.683 40.063 15.931 39.894Q16.180 39.725 16.353 39.453Q16.527 39.180 16.593 38.912Q16.602 38.881 16.626 38.857Q16.650 38.833 16.685 38.833L16.791 38.833Q16.830 38.833 16.856 38.870Q16.883 38.908 16.883 38.947Q16.795 39.294 16.575 39.613Q16.356 39.932 16.039 40.129Q15.723 40.327 15.380 40.327Q15.042 40.327 14.767 40.158Q14.492 39.989 14.369 39.685Q14.220 39.954 13.971 40.140Q13.723 40.327 13.442 40.327Q13.099 40.327 12.825 40.160Q12.550 39.993 12.550 39.668Q12.550 39.444 12.699 39.272Q12.849 39.101 13.082 39.101Q13.227 39.101 13.330 39.193Q13.433 39.286 13.433 39.435Q13.433 39.611 13.310 39.758Q13.187 39.905 13.002 39.936",[1430],[1190,4907],{"fill":1192,"d":4908},"M-47.478 49.636v4.183M-17.602 49.636v4.183M12.273 49.636v4.183M42.148 49.636v4.183M72.024 49.636v4.183",[1185,4910,4911,4918,4924],{"stroke":1192},[1185,4912,4914],{"transform":4913},"translate(-16.756 26.217)",[1190,4915],{"d":4916,"fill":1187,"stroke":1187,"className":4917,"style":1499},"M12.554 40.218L12.554 38.996Q12.554 38.968 12.585 38.937Q12.617 38.906 12.640 38.906L12.746 38.906Q12.816 38.906 12.832 38.968Q12.894 39.288 13.033 39.529Q13.171 39.769 13.404 39.910Q13.636 40.050 13.945 40.050Q14.183 40.050 14.392 39.990Q14.601 39.929 14.738 39.781Q14.875 39.632 14.875 39.386Q14.875 39.132 14.664 38.966Q14.453 38.800 14.183 38.746L13.562 38.632Q13.156 38.554 12.855 38.298Q12.554 38.042 12.554 37.667Q12.554 37.300 12.755 37.078Q12.957 36.855 13.281 36.757Q13.605 36.660 13.945 36.660Q14.410 36.660 14.707 36.867L14.929 36.683Q14.953 36.660 14.984 36.660L15.035 36.660Q15.066 36.660 15.093 36.687Q15.121 36.714 15.121 36.746L15.121 37.730Q15.121 37.761 15.095 37.790Q15.070 37.820 15.035 37.820L14.929 37.820Q14.894 37.820 14.867 37.792Q14.839 37.765 14.839 37.730Q14.839 37.331 14.587 37.111Q14.335 36.890 13.937 36.890Q13.582 36.890 13.298 37.013Q13.015 37.136 13.015 37.441Q13.015 37.660 13.216 37.792Q13.418 37.925 13.664 37.968L14.289 38.081Q14.718 38.171 15.027 38.468Q15.335 38.765 15.335 39.179Q15.335 39.749 14.937 40.027Q14.539 40.304 13.945 40.304Q13.394 40.304 13.043 39.968L12.746 40.281Q12.722 40.304 12.687 40.304L12.640 40.304Q12.617 40.304 12.585 40.273Q12.554 40.242 12.554 40.218M15.863 38.531Q15.863 38.027 16.119 37.595Q16.375 37.163 16.810 36.912Q17.246 36.660 17.746 36.660Q18.132 36.660 18.474 36.804Q18.816 36.949 19.078 37.210Q19.339 37.472 19.482 37.808Q19.625 38.144 19.625 38.531Q19.625 39.023 19.361 39.433Q19.097 39.843 18.668 40.074Q18.238 40.304 17.746 40.304Q17.253 40.304 16.820 40.072Q16.386 39.839 16.125 39.431Q15.863 39.023 15.863 38.531M17.746 40.027Q18.203 40.027 18.455 39.804Q18.707 39.581 18.794 39.230Q18.882 38.878 18.882 38.433Q18.882 38.003 18.789 37.665Q18.695 37.328 18.441 37.121Q18.187 36.913 17.746 36.913Q17.097 36.913 16.853 37.330Q16.609 37.746 16.609 38.433Q16.609 38.878 16.697 39.230Q16.785 39.581 17.037 39.804Q17.289 40.027 17.746 40.027M22.117 40.226L20.136 40.226L20.136 39.929Q20.406 39.929 20.574 39.884Q20.742 39.839 20.742 39.667L20.742 37.531Q20.742 37.316 20.679 37.220Q20.617 37.124 20.500 37.103Q20.382 37.081 20.136 37.081L20.136 36.785L21.304 36.699L21.304 37.484Q21.382 37.273 21.535 37.087Q21.687 36.902 21.886 36.800Q22.085 36.699 22.312 36.699Q22.558 36.699 22.750 36.843Q22.941 36.988 22.941 37.218Q22.941 37.374 22.835 37.484Q22.730 37.593 22.574 37.593Q22.418 37.593 22.308 37.484Q22.199 37.374 22.199 37.218Q22.199 37.058 22.304 36.953Q21.980 36.953 21.765 37.181Q21.550 37.410 21.455 37.749Q21.359 38.089 21.359 38.394L21.359 39.667Q21.359 39.835 21.585 39.882Q21.812 39.929 22.117 39.929L22.117 40.226M24.046 39.265L24.046 37.074L23.343 37.074L23.343 36.820Q23.699 36.820 23.941 36.587Q24.183 36.355 24.294 36.007Q24.406 35.660 24.406 35.304L24.687 35.304L24.687 36.777L25.863 36.777L25.863 37.074L24.687 37.074L24.687 39.249Q24.687 39.570 24.806 39.798Q24.925 40.027 25.207 40.027Q25.386 40.027 25.503 39.904Q25.621 39.781 25.673 39.601Q25.726 39.421 25.726 39.249L25.726 38.777L26.007 38.777L26.007 39.265Q26.007 39.519 25.902 39.759Q25.796 39.999 25.599 40.152Q25.402 40.304 25.144 40.304Q24.828 40.304 24.576 40.181Q24.324 40.058 24.185 39.824Q24.046 39.589 24.046 39.265M26.726 38.472Q26.726 37.992 26.959 37.576Q27.191 37.160 27.601 36.910Q28.011 36.660 28.488 36.660Q29.218 36.660 29.617 37.101Q30.015 37.542 30.015 38.273Q30.015 38.378 29.921 38.402L27.472 38.402L27.472 38.472Q27.472 38.882 27.593 39.238Q27.714 39.593 27.986 39.810Q28.257 40.027 28.687 40.027Q29.050 40.027 29.347 39.798Q29.644 39.570 29.746 39.218Q29.753 39.171 29.839 39.156L29.921 39.156Q30.015 39.183 30.015 39.265Q30.015 39.273 30.007 39.304Q29.945 39.531 29.806 39.714Q29.668 39.898 29.476 40.031Q29.285 40.163 29.066 40.234Q28.847 40.304 28.609 40.304Q28.238 40.304 27.900 40.167Q27.562 40.031 27.294 39.779Q27.027 39.527 26.877 39.187Q26.726 38.847 26.726 38.472M27.480 38.163L29.441 38.163Q29.441 37.859 29.339 37.568Q29.238 37.277 29.021 37.095Q28.804 36.913 28.488 36.913Q28.187 36.913 27.957 37.101Q27.726 37.288 27.603 37.580Q27.480 37.871 27.480 38.163M32.320 40.304Q31.839 40.304 31.431 40.060Q31.023 39.816 30.785 39.402Q30.546 38.988 30.546 38.499Q30.546 38.007 30.804 37.591Q31.062 37.175 31.494 36.937Q31.925 36.699 32.418 36.699Q33.039 36.699 33.488 37.136L33.488 35.507Q33.488 35.292 33.425 35.197Q33.363 35.101 33.246 35.080Q33.128 35.058 32.882 35.058L32.882 34.761L34.105 34.675L34.105 39.484Q34.105 39.695 34.168 39.790Q34.230 39.886 34.347 39.908Q34.464 39.929 34.714 39.929L34.714 40.226L33.464 40.304L33.464 39.820Q33 40.304 32.320 40.304M32.386 40.050Q32.726 40.050 33.019 39.859Q33.312 39.667 33.464 39.371L33.464 37.538Q33.316 37.265 33.054 37.109Q32.793 36.953 32.480 36.953Q31.855 36.953 31.572 37.400Q31.289 37.847 31.289 38.507Q31.289 39.152 31.541 39.601Q31.793 40.050 32.386 40.050",[1430],[1185,4919,4920],{"transform":4913},[1190,4921],{"d":4922,"fill":1187,"stroke":1187,"className":4923,"style":1499},"M38.516 39.937Q38.683 40.050 38.926 40.050Q39.176 40.050 39.373 39.824Q39.570 39.597 39.629 39.339L39.988 37.898Q40.066 37.593 40.066 37.433Q40.066 37.222 39.949 37.087Q39.832 36.953 39.621 36.953Q39.367 36.953 39.139 37.099Q38.910 37.246 38.754 37.476Q38.598 37.706 38.539 37.953Q38.527 38.027 38.461 38.027L38.355 38.027Q38.324 38.027 38.297 37.992Q38.269 37.956 38.269 37.929L38.269 37.898Q38.348 37.585 38.547 37.312Q38.746 37.038 39.035 36.869Q39.324 36.699 39.637 36.699Q39.933 36.699 40.193 36.843Q40.453 36.988 40.562 37.249Q40.711 37.007 40.930 36.853Q41.148 36.699 41.402 36.699Q41.601 36.699 41.789 36.765Q41.976 36.831 42.098 36.970Q42.219 37.109 42.219 37.304Q42.219 37.515 42.088 37.671Q41.957 37.828 41.750 37.828Q41.617 37.828 41.523 37.744Q41.430 37.660 41.430 37.523Q41.430 37.359 41.537 37.230Q41.644 37.101 41.805 37.066Q41.629 36.953 41.387 36.953Q41.219 36.953 41.072 37.062Q40.926 37.171 40.826 37.335Q40.726 37.499 40.683 37.667L40.324 39.105Q40.254 39.449 40.254 39.570Q40.254 39.785 40.371 39.917Q40.488 40.050 40.699 40.050Q41.078 40.050 41.379 39.744Q41.680 39.437 41.773 39.050Q41.801 38.980 41.859 38.980L41.965 38.980Q42.004 38.980 42.027 39.009Q42.051 39.038 42.051 39.074Q42.051 39.089 42.043 39.105Q41.965 39.417 41.766 39.691Q41.566 39.964 41.281 40.134Q40.996 40.304 40.683 40.304Q40.383 40.304 40.123 40.160Q39.863 40.015 39.750 39.753Q39.605 39.988 39.389 40.146Q39.172 40.304 38.918 40.304Q38.719 40.304 38.531 40.238Q38.344 40.171 38.223 40.033Q38.101 39.894 38.101 39.699Q38.101 39.488 38.234 39.333Q38.367 39.179 38.570 39.179Q38.715 39.179 38.803 39.261Q38.891 39.343 38.891 39.484Q38.891 39.644 38.785 39.773Q38.680 39.902 38.516 39.937",[1430],[1185,4925,4926],{"transform":4913},[1190,4927],{"d":4928,"fill":1187,"stroke":1187,"className":4929,"style":2704},"M43.391 40.983Q43.391 40.869 43.441 40.769L43.957 39.471Q44.009 39.334 44.009 39.219Q44.009 39.017 43.860 39.017Q43.696 39.017 43.560 39.133Q43.424 39.249 43.334 39.420Q43.245 39.592 43.207 39.753Q43.186 39.791 43.133 39.808L43.037 39.808Q42.966 39.788 42.966 39.723Q42.966 39.717 42.972 39.688Q43.060 39.345 43.305 39.073Q43.550 38.800 43.872 38.800Q44.030 38.800 44.175 38.861Q44.320 38.921 44.408 39.039Q44.496 39.158 44.496 39.322Q44.496 39.445 44.455 39.539L43.939 40.834Q43.883 40.948 43.883 41.086Q43.883 41.291 44.027 41.291Q44.194 41.291 44.330 41.175Q44.466 41.059 44.557 40.889Q44.648 40.719 44.689 40.552Q44.710 40.520 44.754 40.497L44.850 40.497Q44.929 40.526 44.929 40.582Q44.929 40.588 44.921 40.617Q44.871 40.828 44.743 41.034Q44.616 41.241 44.425 41.373Q44.235 41.505 44.015 41.505Q43.769 41.505 43.580 41.365Q43.391 41.226 43.391 40.983M44.100 37.810Q44.100 37.670 44.210 37.566Q44.320 37.462 44.461 37.462Q44.563 37.462 44.638 37.533Q44.713 37.605 44.713 37.708Q44.713 37.848 44.601 37.952Q44.490 38.056 44.352 38.056Q44.250 38.056 44.175 37.982Q44.100 37.907 44.100 37.810",[1430],[1185,4931,4932],{"fill":1196,"stroke":1196},[1185,4933,4934,4941,4947,4953,4959,4965,4971],{"fill":1196,"stroke":1192,"fontFamily":1490,"fontSize":1491},[1185,4935,4937],{"transform":4936},"translate(-30.364 -103.607)",[1190,4938],{"d":4939,"fill":1196,"stroke":1196,"className":4940,"style":1499},"M14.441 40.226L12.585 40.226L12.585 39.929Q12.859 39.929 13.027 39.882Q13.195 39.835 13.195 39.667L13.195 35.507Q13.195 35.292 13.132 35.197Q13.070 35.101 12.951 35.080Q12.832 35.058 12.585 35.058L12.585 34.761L13.808 34.675L13.808 37.378Q13.933 37.167 14.121 37.017Q14.308 36.867 14.535 36.783Q14.761 36.699 15.007 36.699Q16.175 36.699 16.175 37.777L16.175 39.667Q16.175 39.835 16.345 39.882Q16.515 39.929 16.785 39.929L16.785 40.226L14.929 40.226L14.929 39.929Q15.203 39.929 15.371 39.882Q15.539 39.835 15.539 39.667L15.539 37.792Q15.539 37.410 15.418 37.181Q15.296 36.953 14.945 36.953Q14.632 36.953 14.378 37.115Q14.125 37.277 13.978 37.546Q13.832 37.816 13.832 38.113L13.832 39.667Q13.832 39.835 14.002 39.882Q14.171 39.929 14.441 39.929",[1430],[1185,4942,4943],{"transform":4936},[1190,4944],{"d":4945,"fill":1196,"stroke":1196,"className":4946,"style":1499},"M17.681 39.273L17.681 37.531Q17.681 37.316 17.618 37.220Q17.556 37.124 17.437 37.103Q17.318 37.081 17.072 37.081L17.072 36.785L18.318 36.699L18.318 39.249L18.318 39.273Q18.318 39.585 18.372 39.747Q18.427 39.910 18.577 39.980Q18.728 40.050 19.048 40.050Q19.478 40.050 19.751 39.712Q20.025 39.374 20.025 38.929L20.025 37.531Q20.025 37.316 19.962 37.220Q19.900 37.124 19.780 37.103Q19.661 37.081 19.415 37.081L19.415 36.785L20.661 36.699L20.661 39.484Q20.661 39.695 20.724 39.790Q20.786 39.886 20.905 39.908Q21.025 39.929 21.271 39.929L21.271 40.226L20.048 40.304L20.048 39.683Q19.880 39.972 19.599 40.138Q19.318 40.304 18.997 40.304Q17.681 40.304 17.681 39.273M23.630 40.226L21.798 40.226L21.798 39.929Q22.072 39.929 22.239 39.882Q22.407 39.835 22.407 39.667L22.407 35.507Q22.407 35.292 22.345 35.197Q22.282 35.101 22.163 35.080Q22.044 35.058 21.798 35.058L21.798 34.761L23.021 34.675L23.021 39.667Q23.021 39.835 23.189 39.882Q23.357 39.929 23.630 39.929L23.630 40.226M25.989 40.226L24.157 40.226L24.157 39.929Q24.431 39.929 24.599 39.882Q24.767 39.835 24.767 39.667L24.767 35.507Q24.767 35.292 24.704 35.197Q24.642 35.101 24.523 35.080Q24.404 35.058 24.157 35.058L24.157 34.761L25.380 34.675L25.380 39.667Q25.380 39.835 25.548 39.882Q25.716 39.929 25.989 39.929",[1430],[1185,4948,4949],{"transform":4936},[1190,4950],{"d":4951,"fill":1196,"stroke":1196,"className":4952,"style":1499},"M34.998 39.249L29.685 39.249Q29.607 39.242 29.558 39.193Q29.510 39.144 29.510 39.066Q29.510 38.996 29.557 38.945Q29.603 38.894 29.685 38.882L34.998 38.882Q35.072 38.894 35.119 38.945Q35.166 38.996 35.166 39.066Q35.166 39.144 35.117 39.193Q35.068 39.242 34.998 39.249M34.998 37.562L29.685 37.562Q29.607 37.554 29.558 37.505Q29.510 37.456 29.510 37.378Q29.510 37.308 29.557 37.257Q29.603 37.206 29.685 37.195L34.998 37.195Q35.072 37.206 35.119 37.257Q35.166 37.308 35.166 37.378Q35.166 37.456 35.117 37.505Q35.068 37.554 34.998 37.562",[1430],[1185,4954,4955],{"transform":4936},[1190,4956],{"d":4957,"fill":1196,"stroke":1196,"className":4958,"style":1499},"M38.818 39.394Q38.818 38.910 39.220 38.615Q39.623 38.320 40.173 38.201Q40.724 38.081 41.216 38.081L41.216 37.792Q41.216 37.566 41.101 37.359Q40.986 37.152 40.789 37.033Q40.591 36.913 40.361 36.913Q39.935 36.913 39.650 37.019Q39.720 37.046 39.767 37.101Q39.814 37.156 39.839 37.226Q39.865 37.296 39.865 37.371Q39.865 37.476 39.814 37.568Q39.763 37.660 39.671 37.710Q39.580 37.761 39.474 37.761Q39.369 37.761 39.277 37.710Q39.185 37.660 39.134 37.568Q39.084 37.476 39.084 37.371Q39.084 36.953 39.472 36.806Q39.861 36.660 40.361 36.660Q40.693 36.660 41.046 36.790Q41.400 36.921 41.628 37.175Q41.857 37.429 41.857 37.777L41.857 39.578Q41.857 39.710 41.929 39.820Q42.002 39.929 42.130 39.929Q42.255 39.929 42.324 39.824Q42.392 39.718 42.392 39.578L42.392 39.066L42.673 39.066L42.673 39.578Q42.673 39.781 42.556 39.939Q42.439 40.097 42.257 40.181Q42.076 40.265 41.873 40.265Q41.642 40.265 41.490 40.093Q41.337 39.921 41.306 39.691Q41.146 39.972 40.837 40.138Q40.529 40.304 40.177 40.304Q39.666 40.304 39.242 40.081Q38.818 39.859 38.818 39.394M39.505 39.394Q39.505 39.679 39.732 39.865Q39.959 40.050 40.252 40.050Q40.498 40.050 40.722 39.933Q40.947 39.816 41.082 39.613Q41.216 39.410 41.216 39.156L41.216 38.324Q40.951 38.324 40.666 38.378Q40.380 38.433 40.109 38.562Q39.837 38.691 39.671 38.898Q39.505 39.105 39.505 39.394M44.880 40.226L43.048 40.226L43.048 39.929Q43.322 39.929 43.490 39.882Q43.658 39.835 43.658 39.667L43.658 35.507Q43.658 35.292 43.595 35.197Q43.533 35.101 43.414 35.080Q43.294 35.058 43.048 35.058L43.048 34.761L44.271 34.675L44.271 39.667Q44.271 39.835 44.439 39.882Q44.607 39.929 44.880 39.929L44.880 40.226M47.240 40.226L45.408 40.226L45.408 39.929Q45.681 39.929 45.849 39.882Q46.017 39.835 46.017 39.667L46.017 35.507Q46.017 35.292 45.955 35.197Q45.892 35.101 45.773 35.080Q45.654 35.058 45.408 35.058L45.408 34.761L46.630 34.675L46.630 39.667Q46.630 39.835 46.798 39.882Q46.966 39.929 47.240 39.929",[1430],[1185,4960,4961],{"transform":4936},[1190,4962],{"d":4963,"fill":1196,"stroke":1196,"className":4964,"style":1499},"M52.408 41.777L50.553 41.777L50.553 41.484Q50.822 41.484 50.990 41.439Q51.158 41.394 51.158 41.218L51.158 37.394Q51.158 37.187 51.002 37.134Q50.846 37.081 50.553 37.081L50.553 36.785L51.775 36.699L51.775 37.163Q52.006 36.941 52.320 36.820Q52.635 36.699 52.974 36.699Q53.447 36.699 53.851 36.945Q54.256 37.191 54.488 37.607Q54.721 38.023 54.721 38.499Q54.721 38.874 54.572 39.203Q54.424 39.531 54.154 39.783Q53.885 40.035 53.541 40.169Q53.197 40.304 52.838 40.304Q52.549 40.304 52.277 40.183Q52.006 40.062 51.799 39.851L51.799 41.218Q51.799 41.394 51.967 41.439Q52.135 41.484 52.408 41.484L52.408 41.777M51.799 37.562L51.799 39.402Q51.951 39.691 52.213 39.871Q52.474 40.050 52.783 40.050Q53.068 40.050 53.291 39.912Q53.514 39.773 53.666 39.542Q53.818 39.312 53.896 39.040Q53.974 38.769 53.974 38.499Q53.974 38.167 53.849 37.810Q53.724 37.453 53.476 37.216Q53.228 36.980 52.881 36.980Q52.557 36.980 52.262 37.136Q51.967 37.292 51.799 37.562",[1430],[1185,4966,4967],{"transform":4936},[1190,4968],{"d":4969,"fill":1196,"stroke":1196,"className":4970,"style":1499},"M55.484 38.531Q55.484 38.027 55.740 37.595Q55.996 37.163 56.432 36.912Q56.867 36.660 57.367 36.660Q57.754 36.660 58.096 36.804Q58.437 36.949 58.699 37.210Q58.961 37.472 59.103 37.808Q59.246 38.144 59.246 38.531Q59.246 39.023 58.982 39.433Q58.719 39.843 58.289 40.074Q57.859 40.304 57.367 40.304Q56.875 40.304 56.441 40.072Q56.008 39.839 55.746 39.431Q55.484 39.023 55.484 38.531M57.367 40.027Q57.824 40.027 58.076 39.804Q58.328 39.581 58.416 39.230Q58.504 38.878 58.504 38.433Q58.504 38.003 58.410 37.665Q58.316 37.328 58.062 37.121Q57.809 36.913 57.367 36.913Q56.719 36.913 56.475 37.330Q56.230 37.746 56.230 38.433Q56.230 38.878 56.318 39.230Q56.406 39.581 56.658 39.804Q56.910 40.027 57.367 40.027M61.590 40.226L59.812 40.226L59.812 39.929Q60.086 39.929 60.254 39.882Q60.422 39.835 60.422 39.667L60.422 37.531Q60.422 37.316 60.365 37.220Q60.309 37.124 60.195 37.103Q60.082 37.081 59.836 37.081L59.836 36.785L61.035 36.699L61.035 39.667Q61.035 39.835 61.182 39.882Q61.328 39.929 61.590 39.929L61.590 40.226M60.148 35.304Q60.148 35.113 60.283 34.982Q60.418 34.851 60.613 34.851Q60.734 34.851 60.838 34.913Q60.941 34.976 61.004 35.080Q61.066 35.183 61.066 35.304Q61.066 35.499 60.935 35.634Q60.805 35.769 60.613 35.769Q60.414 35.769 60.281 35.636Q60.148 35.503 60.148 35.304M64.019 40.226L62.164 40.226L62.164 39.929Q62.437 39.929 62.605 39.882Q62.773 39.835 62.773 39.667L62.773 37.531Q62.773 37.316 62.711 37.220Q62.648 37.124 62.529 37.103Q62.410 37.081 62.164 37.081L62.164 36.785L63.355 36.699L63.355 37.433Q63.469 37.218 63.662 37.050Q63.855 36.882 64.094 36.790Q64.332 36.699 64.586 36.699Q65.754 36.699 65.754 37.777L65.754 39.667Q65.754 39.835 65.924 39.882Q66.094 39.929 66.363 39.929L66.363 40.226L64.508 40.226L64.508 39.929Q64.781 39.929 64.949 39.882Q65.117 39.835 65.117 39.667L65.117 37.792Q65.117 37.410 64.996 37.181Q64.875 36.953 64.523 36.953Q64.211 36.953 63.957 37.115Q63.703 37.277 63.557 37.546Q63.410 37.816 63.410 38.113L63.410 39.667Q63.410 39.835 63.580 39.882Q63.750 39.929 64.019 39.929",[1430],[1185,4972,4973],{"transform":4936},[1190,4974],{"d":4975,"fill":1196,"stroke":1196,"className":4976,"style":1499},"M67.206 39.265L67.206 37.074L66.503 37.074L66.503 36.820Q66.859 36.820 67.101 36.587Q67.343 36.355 67.454 36.007Q67.566 35.660 67.566 35.304L67.847 35.304L67.847 36.777L69.023 36.777L69.023 37.074L67.847 37.074L67.847 39.249Q67.847 39.570 67.966 39.798Q68.085 40.027 68.366 40.027Q68.546 40.027 68.663 39.904Q68.781 39.781 68.833 39.601Q68.886 39.421 68.886 39.249L68.886 38.777L69.167 38.777L69.167 39.265Q69.167 39.519 69.062 39.759Q68.956 39.999 68.759 40.152Q68.562 40.304 68.304 40.304Q67.988 40.304 67.736 40.181Q67.484 40.058 67.345 39.824Q67.206 39.589 67.206 39.265M69.929 40.218L69.929 38.996Q69.929 38.968 69.960 38.937Q69.991 38.906 70.015 38.906L70.120 38.906Q70.191 38.906 70.206 38.968Q70.269 39.288 70.407 39.529Q70.546 39.769 70.779 39.910Q71.011 40.050 71.320 40.050Q71.558 40.050 71.767 39.990Q71.976 39.929 72.113 39.781Q72.249 39.632 72.249 39.386Q72.249 39.132 72.038 38.966Q71.827 38.800 71.558 38.746L70.937 38.632Q70.531 38.554 70.230 38.298Q69.929 38.042 69.929 37.667Q69.929 37.300 70.130 37.078Q70.331 36.855 70.656 36.757Q70.980 36.660 71.320 36.660Q71.784 36.660 72.081 36.867L72.304 36.683Q72.327 36.660 72.359 36.660L72.409 36.660Q72.441 36.660 72.468 36.687Q72.495 36.714 72.495 36.746L72.495 37.730Q72.495 37.761 72.470 37.790Q72.445 37.820 72.409 37.820L72.304 37.820Q72.269 37.820 72.241 37.792Q72.214 37.765 72.214 37.730Q72.214 37.331 71.962 37.111Q71.710 36.890 71.312 36.890Q70.956 36.890 70.673 37.013Q70.390 37.136 70.390 37.441Q70.390 37.660 70.591 37.792Q70.792 37.925 71.038 37.968L71.663 38.081Q72.093 38.171 72.402 38.468Q72.710 38.765 72.710 39.179Q72.710 39.749 72.312 40.027Q71.913 40.304 71.320 40.304Q70.769 40.304 70.417 39.968L70.120 40.281Q70.097 40.304 70.062 40.304L70.015 40.304Q69.991 40.304 69.960 40.273Q69.929 40.242 69.929 40.218",[1430],[1200,4978,4980,4981,5153,5154],{"className":4979},[1203],"Lifting ",[390,4982,4984],{"className":4983},[393],[390,4985,4987,5044],{"className":4986,"ariaHidden":398},[397],[390,4988,4990,4994,5034,5037,5041],{"className":4989},[402],[390,4991],{"className":4992,"style":4993},[406],"height:0.661em;vertical-align:-0.15em;",[390,4995,4997,5000],{"className":4996},[411],[390,4998,602],{"className":4999},[411,412],[390,5001,5003],{"className":5002},[569],[390,5004,5006,5026],{"className":5005},[573,574],[390,5007,5009,5023],{"className":5008},[578],[390,5010,5012],{"className":5011,"style":4467},[582],[390,5013,5014,5017],{"style":653},[390,5015],{"className":5016,"style":591},[590],[390,5018,5020],{"className":5019},[595,596,597,598],[390,5021,4479],{"className":5022},[411,412,598],[390,5024,607],{"className":5025},[606],[390,5027,5029],{"className":5028},[578],[390,5030,5032],{"className":5031,"style":614},[582],[390,5033],{},[390,5035],{"className":5036,"style":542},[422],[390,5038,5040],{"className":5039},[546],"↦",[390,5042],{"className":5043,"style":542},[422],[390,5045,5047,5050,5053,5093,5096,5099,5150],{"className":5046},[402],[390,5048],{"className":5049,"style":4445},[406],[390,5051,466],{"className":5052},[465],[390,5054,5056,5059],{"className":5055},[411],[390,5057,602],{"className":5058},[411,412],[390,5060,5062],{"className":5061},[569],[390,5063,5065,5085],{"className":5064},[573,574],[390,5066,5068,5082],{"className":5067},[578],[390,5069,5071],{"className":5070,"style":4467},[582],[390,5072,5073,5076],{"style":653},[390,5074],{"className":5075,"style":591},[590],[390,5077,5079],{"className":5078},[595,596,597,598],[390,5080,4479],{"className":5081},[411,412,598],[390,5083,607],{"className":5084},[606],[390,5086,5088],{"className":5087},[578],[390,5089,5091],{"className":5090,"style":614},[582],[390,5092],{},[390,5094,418],{"className":5095},[417],[390,5097],{"className":5098,"style":423},[422],[390,5100,5102,5105],{"className":5101},[411],[390,5103,602],{"className":5104},[411,412],[390,5106,5108],{"className":5107},[569],[390,5109,5111,5142],{"className":5110},[573,574],[390,5112,5114,5139],{"className":5113},[578],[390,5115,5117,5128],{"className":5116,"style":1252},[582],[390,5118,5119,5122],{"style":4517},[390,5120],{"className":5121,"style":591},[590],[390,5123,5125],{"className":5124},[595,596,597,598],[390,5126,4479],{"className":5127},[411,412,598],[390,5129,5130,5133],{"style":1255},[390,5131],{"className":5132,"style":591},[590],[390,5134,5136],{"className":5135},[595,596,597,598],[390,5137,1362],{"className":5138},[411,598],[390,5140,607],{"className":5141},[606],[390,5143,5145],{"className":5144},[578],[390,5146,5148],{"className":5147,"style":4547},[582],[390,5149],{},[390,5151,495],{"className":5152},[494]," puts every point on a convex parabola, so the hull sorts the ",[390,5155,5157],{"className":5156},[393],[390,5158,5160],{"className":5159,"ariaHidden":398},[397],[390,5161,5163,5166],{"className":5162},[402],[390,5164],{"className":5165,"style":4645},[406],[390,5167,5169,5172],{"className":5168},[411],[390,5170,602],{"className":5171},[411,412],[390,5173,5175],{"className":5174},[569],[390,5176,5178,5198],{"className":5177},[573,574],[390,5179,5181,5195],{"className":5180},[578],[390,5182,5184],{"className":5183,"style":4467},[582],[390,5185,5186,5189],{"style":653},[390,5187],{"className":5188,"style":591},[590],[390,5190,5192],{"className":5191},[595,596,597,598],[390,5193,4479],{"className":5194},[411,412,598],[390,5196,607],{"className":5197},[606],[390,5199,5201],{"className":5200},[578],[390,5202,5204],{"className":5203,"style":614},[582],[390,5205],{},[381,5207,5208,5209,5212],{},"So monotone chain and Graham scan are asymptotically optimal: the sort they pay\nfor is, in a precise sense, ",[1209,5210,5211],{},"the same sort"," the problem secretly requires.",[1098,5214,5216],{"id":5215},"what-the-hull-is-good-for","What the hull is good for",[381,5218,5219,5220,5235,5236,5270,5271,5274,5275,5278,5279,5286,5287,5290,5291,5315,5316,5319,5320,5370],{},"The hull is rarely the final answer. It is a preprocessing step that collapses\n",[390,5221,5223],{"className":5222},[393],[390,5224,5226],{"className":5225,"ariaHidden":398},[397],[390,5227,5229,5232],{"className":5228},[402],[390,5230],{"className":5231,"style":1088},[406],[390,5233,1092],{"className":5234},[411,412]," messy points down to an ordered convex polygon of ",[390,5237,5239],{"className":5238},[393],[390,5240,5242,5261],{"className":5241,"ariaHidden":398},[397],[390,5243,5245,5249,5252,5255,5258],{"className":5244},[402],[390,5246],{"className":5247,"style":5248},[406],"height:0.8304em;vertical-align:-0.136em;",[390,5250,1312],{"className":5251},[411,412],[390,5253],{"className":5254,"style":542},[422],[390,5256,1892],{"className":5257},[546],[390,5259],{"className":5260,"style":542},[422],[390,5262,5264,5267],{"className":5263},[402],[390,5265],{"className":5266,"style":1088},[406],[390,5268,1092],{"className":5269},[411,412]," vertices, after\nwhich many ",[1554,5272,5273],{},"extremal"," questions become easy. The key technique is ",[385,5276,5277],{},"rotating\ncalipers",": walk two pointers around the hull in tandem, exploiting the fact that\nas one supporting line rotates, the farthest or nearest vertex advances\nmonotonically.",[3920,5280,5281],{},[442,5282,1362],{"href":5283,"ariaDescribedBy":5284,"dataFootnoteRef":376,"id":5285},"#user-content-fn-skiena-hull",[3926],"user-content-fnref-skiena-hull"," This computes the polygon ",[385,5288,5289],{},"diameter"," (the\nfarthest pair of points in the whole set, which must be two hull vertices) in\n",[390,5292,5294],{"className":5293},[393],[390,5295,5297],{"className":5296,"ariaHidden":398},[397],[390,5298,5300,5303,5306,5309,5312],{"className":5299},[402],[390,5301],{"className":5302,"style":461},[406],[390,5304,1230],{"className":5305,"style":1229},[411,412],[390,5307,466],{"className":5308},[465],[390,5310,1092],{"className":5311},[411,412],[390,5313,495],{"className":5314},[494]," time ",[1209,5317,5318],{},"after"," the hull, rather than the ",[390,5321,5323],{"className":5322},[393],[390,5324,5326],{"className":5325,"ariaHidden":398},[397],[390,5327,5329,5332,5335,5338,5367],{"className":5328},[402],[390,5330],{"className":5331,"style":1225},[406],[390,5333,1329],{"className":5334},[411],[390,5336,466],{"className":5337},[465],[390,5339,5341,5344],{"className":5340},[411],[390,5342,1092],{"className":5343},[411,412],[390,5345,5347],{"className":5346},[569],[390,5348,5350],{"className":5349},[573],[390,5351,5353],{"className":5352},[578],[390,5354,5356],{"className":5355,"style":1252},[582],[390,5357,5358,5361],{"style":1255},[390,5359],{"className":5360,"style":591},[590],[390,5362,5364],{"className":5363},[595,596,597,598],[390,5365,1362],{"className":5366},[411,598],[390,5368,495],{"className":5369},[494]," of checking all pairs.",[1172,5372,5374,5462],{"className":5373},[1175,1176],[1178,5375,5379],{"xmlns":1180,"width":5376,"height":5377,"viewBox":5378},"186.301","195.758","-75 -75 139.725 146.818",[1185,5380,5381,5384,5387,5392,5397,5400,5413,5416,5439],{"stroke":1187,"style":1188},[1190,5382],{"stroke":1192,"d":5383},"M-59.665 35.981a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0M-2.902 52.2a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0M51.158 25.17a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0M56.564-23.485a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0M2.504-50.515a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0M-51.556-18.079a2.121 2.121 0 1 0-4.242 0 2.121 2.121 0 0 0 4.242 0m-2.121 0",[1190,5385],{"fill":1192,"stroke":1196,"d":5386,"style":1198},"M-61.786 35.981-5.025 52.2l54.06-27.03 5.405-48.652L.381-50.513l-54.058 32.436Z",[1185,5388,5389],{"fill":1196},[1190,5390],{"stroke":1192,"d":5391},"M-2.903 52.2a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1185,5393,5394],{"fill":1196},[1190,5395],{"stroke":1192,"d":5396},"M2.503-50.513a2.121 2.121 0 1 0-4.243 0 2.121 2.121 0 0 0 4.243 0m-2.122 0",[1190,5398],{"fill":1192,"stroke":1196,"d":5399,"style":1479},"M-5.025 52.2.381-50.514",[1185,5401,5403,5406],{"fill":5402,"stroke":1196},"var(--tk-bg)",[1190,5404],{"fill":5402,"stroke":1192,"d":5405},"M-6.6-7.044h35.59v-8.555H-6.6Z",[1185,5407,5409],{"transform":5408},"translate(64.795 -60.743)",[1190,5410],{"d":5411,"fill":1196,"stroke":1196,"className":5412,"style":1499},"M-67.840 52.277Q-68.321 52.277-68.729 52.033Q-69.137 51.789-69.375 51.375Q-69.614 50.961-69.614 50.472Q-69.614 49.980-69.356 49.564Q-69.098 49.148-68.666 48.910Q-68.235 48.672-67.743 48.672Q-67.122 48.672-66.672 49.109L-66.672 47.480Q-66.672 47.265-66.735 47.170Q-66.797 47.074-66.915 47.053Q-67.032 47.031-67.278 47.031L-67.278 46.734L-66.055 46.648L-66.055 51.457Q-66.055 51.668-65.993 51.763Q-65.930 51.859-65.813 51.881Q-65.696 51.902-65.446 51.902L-65.446 52.199L-66.696 52.277L-66.696 51.793Q-67.161 52.277-67.840 52.277M-67.774 52.023Q-67.434 52.023-67.141 51.832Q-66.848 51.640-66.696 51.344L-66.696 49.511Q-66.844 49.238-67.106 49.082Q-67.368 48.926-67.680 48.926Q-68.305 48.926-68.588 49.373Q-68.872 49.820-68.872 50.480Q-68.872 51.125-68.620 51.574Q-68.368 52.023-67.774 52.023M-63.079 52.199L-64.856 52.199L-64.856 51.902Q-64.582 51.902-64.415 51.855Q-64.247 51.808-64.247 51.640L-64.247 49.504Q-64.247 49.289-64.303 49.193Q-64.360 49.097-64.473 49.076Q-64.586 49.054-64.832 49.054L-64.832 48.758L-63.633 48.672L-63.633 51.640Q-63.633 51.808-63.487 51.855Q-63.340 51.902-63.079 51.902L-63.079 52.199M-64.520 47.277Q-64.520 47.086-64.385 46.955Q-64.250 46.824-64.055 46.824Q-63.934 46.824-63.831 46.886Q-63.727 46.949-63.665 47.053Q-63.602 47.156-63.602 47.277Q-63.602 47.472-63.733 47.607Q-63.864 47.742-64.055 47.742Q-64.254 47.742-64.387 47.609Q-64.520 47.476-64.520 47.277M-62.481 51.367Q-62.481 50.883-62.079 50.588Q-61.676 50.293-61.125 50.174Q-60.575 50.054-60.082 50.054L-60.082 49.765Q-60.082 49.539-60.198 49.332Q-60.313 49.125-60.510 49.006Q-60.707 48.886-60.938 48.886Q-61.364 48.886-61.649 48.992Q-61.579 49.019-61.532 49.074Q-61.485 49.129-61.459 49.199Q-61.434 49.269-61.434 49.344Q-61.434 49.449-61.485 49.541Q-61.536 49.633-61.627 49.683Q-61.719 49.734-61.825 49.734Q-61.930 49.734-62.022 49.683Q-62.114 49.633-62.165 49.541Q-62.215 49.449-62.215 49.344Q-62.215 48.926-61.827 48.779Q-61.438 48.633-60.938 48.633Q-60.606 48.633-60.252 48.763Q-59.899 48.894-59.670 49.148Q-59.442 49.402-59.442 49.750L-59.442 51.551Q-59.442 51.683-59.370 51.793Q-59.297 51.902-59.168 51.902Q-59.043 51.902-58.975 51.797Q-58.907 51.691-58.907 51.551L-58.907 51.039L-58.625 51.039L-58.625 51.551Q-58.625 51.754-58.743 51.912Q-58.860 52.070-59.041 52.154Q-59.223 52.238-59.426 52.238Q-59.657 52.238-59.809 52.066Q-59.961 51.894-59.993 51.664Q-60.153 51.945-60.461 52.111Q-60.770 52.277-61.122 52.277Q-61.633 52.277-62.057 52.054Q-62.481 51.832-62.481 51.367M-61.793 51.367Q-61.793 51.652-61.567 51.838Q-61.340 52.023-61.047 52.023Q-60.801 52.023-60.577 51.906Q-60.352 51.789-60.217 51.586Q-60.082 51.383-60.082 51.129L-60.082 50.297Q-60.348 50.297-60.633 50.351Q-60.918 50.406-61.190 50.535Q-61.461 50.664-61.627 50.871Q-61.793 51.078-61.793 51.367M-56.403 52.199L-58.258 52.199L-58.258 51.902Q-57.985 51.902-57.817 51.855Q-57.649 51.808-57.649 51.640L-57.649 49.504Q-57.649 49.289-57.711 49.193Q-57.774 49.097-57.893 49.076Q-58.012 49.054-58.258 49.054L-58.258 48.758L-57.067 48.672L-57.067 49.406Q-56.954 49.191-56.760 49.023Q-56.567 48.855-56.329 48.763Q-56.090 48.672-55.836 48.672Q-54.875 48.672-54.700 49.383Q-54.516 49.054-54.188 48.863Q-53.860 48.672-53.481 48.672Q-52.305 48.672-52.305 49.750L-52.305 51.640Q-52.305 51.808-52.137 51.855Q-51.969 51.902-51.700 51.902L-51.700 52.199L-53.555 52.199L-53.555 51.902Q-53.282 51.902-53.114 51.857Q-52.946 51.812-52.946 51.640L-52.946 49.765Q-52.946 49.379-53.071 49.152Q-53.196 48.926-53.547 48.926Q-53.852 48.926-54.108 49.088Q-54.364 49.250-54.512 49.519Q-54.661 49.789-54.661 50.086L-54.661 51.640Q-54.661 51.808-54.491 51.855Q-54.321 51.902-54.051 51.902L-54.051 52.199L-55.907 52.199L-55.907 51.902Q-55.633 51.902-55.465 51.855Q-55.297 51.808-55.297 51.640L-55.297 49.765Q-55.297 49.379-55.422 49.152Q-55.547 48.926-55.899 48.926Q-56.204 48.926-56.459 49.088Q-56.715 49.250-56.864 49.519Q-57.012 49.789-57.012 50.086L-57.012 51.640Q-57.012 51.808-56.842 51.855Q-56.672 51.902-56.403 51.902L-56.403 52.199M-51.254 50.445Q-51.254 49.965-51.022 49.549Q-50.790 49.133-50.379 48.883Q-49.969 48.633-49.493 48.633Q-48.762 48.633-48.364 49.074Q-47.965 49.515-47.965 50.246Q-47.965 50.351-48.059 50.375L-50.508 50.375L-50.508 50.445Q-50.508 50.855-50.387 51.211Q-50.266 51.566-49.995 51.783Q-49.723 52-49.293 52Q-48.930 52-48.633 51.771Q-48.336 51.543-48.235 51.191Q-48.227 51.144-48.141 51.129L-48.059 51.129Q-47.965 51.156-47.965 51.238Q-47.965 51.246-47.973 51.277Q-48.036 51.504-48.174 51.687Q-48.313 51.871-48.504 52.004Q-48.696 52.136-48.915 52.207Q-49.133 52.277-49.372 52.277Q-49.743 52.277-50.081 52.140Q-50.418 52.004-50.686 51.752Q-50.954 51.500-51.104 51.160Q-51.254 50.820-51.254 50.445M-50.500 50.136L-48.540 50.136Q-48.540 49.832-48.641 49.541Q-48.743 49.250-48.959 49.068Q-49.176 48.886-49.493 48.886Q-49.793 48.886-50.024 49.074Q-50.254 49.261-50.377 49.553Q-50.500 49.844-50.500 50.136M-46.852 51.238L-46.852 49.047L-47.555 49.047L-47.555 48.793Q-47.200 48.793-46.957 48.560Q-46.715 48.328-46.604 47.980Q-46.493 47.633-46.493 47.277L-46.211 47.277L-46.211 48.750L-45.036 48.750L-45.036 49.047L-46.211 49.047L-46.211 51.222Q-46.211 51.543-46.092 51.771Q-45.973 52-45.692 52Q-45.512 52-45.395 51.877Q-45.278 51.754-45.225 51.574Q-45.172 51.394-45.172 51.222L-45.172 50.750L-44.891 50.750L-44.891 51.238Q-44.891 51.492-44.997 51.732Q-45.102 51.972-45.299 52.125Q-45.497 52.277-45.754 52.277Q-46.071 52.277-46.323 52.154Q-46.575 52.031-46.713 51.797Q-46.852 51.562-46.852 51.238M-44.172 50.445Q-44.172 49.965-43.940 49.549Q-43.707 49.133-43.297 48.883Q-42.887 48.633-42.411 48.633Q-41.680 48.633-41.282 49.074Q-40.883 49.515-40.883 50.246Q-40.883 50.351-40.977 50.375L-43.426 50.375L-43.426 50.445Q-43.426 50.855-43.305 51.211Q-43.184 51.566-42.913 51.783Q-42.641 52-42.211 52Q-41.848 52-41.551 51.771Q-41.254 51.543-41.153 51.191Q-41.145 51.144-41.059 51.129L-40.977 51.129Q-40.883 51.156-40.883 51.238Q-40.883 51.246-40.891 51.277Q-40.954 51.504-41.092 51.687Q-41.231 51.871-41.422 52.004Q-41.614 52.136-41.832 52.207Q-42.051 52.277-42.290 52.277Q-42.661 52.277-42.999 52.140Q-43.336 52.004-43.604 51.752Q-43.872 51.500-44.022 51.160Q-44.172 50.820-44.172 50.445M-43.418 50.136L-41.457 50.136Q-41.457 49.832-41.559 49.541Q-41.661 49.250-41.877 49.068Q-42.094 48.886-42.411 48.886Q-42.711 48.886-42.942 49.074Q-43.172 49.261-43.295 49.553Q-43.418 49.844-43.418 50.136M-38.387 52.199L-40.368 52.199L-40.368 51.902Q-40.098 51.902-39.930 51.857Q-39.762 51.812-39.762 51.640L-39.762 49.504Q-39.762 49.289-39.825 49.193Q-39.887 49.097-40.004 49.076Q-40.122 49.054-40.368 49.054L-40.368 48.758L-39.200 48.672L-39.200 49.457Q-39.122 49.246-38.969 49.060Q-38.817 48.875-38.618 48.773Q-38.418 48.672-38.192 48.672Q-37.946 48.672-37.754 48.816Q-37.563 48.961-37.563 49.191Q-37.563 49.347-37.668 49.457Q-37.774 49.566-37.930 49.566Q-38.086 49.566-38.196 49.457Q-38.305 49.347-38.305 49.191Q-38.305 49.031-38.200 48.926Q-38.524 48.926-38.739 49.154Q-38.954 49.383-39.049 49.722Q-39.145 50.062-39.145 50.367L-39.145 51.640Q-39.145 51.808-38.918 51.855Q-38.692 51.902-38.387 51.902",[1430],[1190,5414],{"fill":1192,"stroke":1989,"d":5415,"style":2044},"m-32.055 65.714 70.278-35.139M-42.867-28.889l70.279-35.139",[1185,5417,5418],{"fill":1989,"stroke":1989},[1185,5419,5420,5427,5433],{"fill":1989,"stroke":1192,"fontFamily":1490,"fontSize":1491},[1185,5421,5423],{"transform":5422},"translate(72.004 11.46)",[1190,5424],{"d":5425,"fill":1989,"stroke":1989,"className":5426,"style":1499},"M-69.614 52.191L-69.614 50.969Q-69.614 50.941-69.582 50.910Q-69.551 50.879-69.528 50.879L-69.422 50.879Q-69.352 50.879-69.336 50.941Q-69.274 51.261-69.135 51.502Q-68.997 51.742-68.764 51.883Q-68.532 52.023-68.223 52.023Q-67.985 52.023-67.776 51.963Q-67.567 51.902-67.430 51.754Q-67.293 51.605-67.293 51.359Q-67.293 51.105-67.504 50.939Q-67.715 50.773-67.985 50.719L-68.606 50.605Q-69.012 50.527-69.313 50.271Q-69.614 50.015-69.614 49.640Q-69.614 49.273-69.413 49.051Q-69.211 48.828-68.887 48.730Q-68.563 48.633-68.223 48.633Q-67.758 48.633-67.461 48.840L-67.239 48.656Q-67.215 48.633-67.184 48.633L-67.133 48.633Q-67.102 48.633-67.075 48.660Q-67.047 48.687-67.047 48.719L-67.047 49.703Q-67.047 49.734-67.073 49.763Q-67.098 49.793-67.133 49.793L-67.239 49.793Q-67.274 49.793-67.301 49.765Q-67.329 49.738-67.329 49.703Q-67.329 49.304-67.581 49.084Q-67.832 48.863-68.231 48.863Q-68.586 48.863-68.870 48.986Q-69.153 49.109-69.153 49.414Q-69.153 49.633-68.952 49.765Q-68.750 49.898-68.504 49.941L-67.879 50.054Q-67.450 50.144-67.141 50.441Q-66.832 50.738-66.832 51.152Q-66.832 51.722-67.231 52Q-67.629 52.277-68.223 52.277Q-68.774 52.277-69.125 51.941L-69.422 52.254Q-69.446 52.277-69.481 52.277L-69.528 52.277Q-69.551 52.277-69.582 52.246Q-69.614 52.215-69.614 52.191M-65.622 51.246L-65.622 49.504Q-65.622 49.289-65.684 49.193Q-65.747 49.097-65.866 49.076Q-65.985 49.054-66.231 49.054L-66.231 48.758L-64.985 48.672L-64.985 51.222L-64.985 51.246Q-64.985 51.558-64.930 51.720Q-64.875 51.883-64.725 51.953Q-64.575 52.023-64.254 52.023Q-63.825 52.023-63.551 51.685Q-63.278 51.347-63.278 50.902L-63.278 49.504Q-63.278 49.289-63.340 49.193Q-63.403 49.097-63.522 49.076Q-63.641 49.054-63.887 49.054L-63.887 48.758L-62.641 48.672L-62.641 51.457Q-62.641 51.668-62.579 51.763Q-62.516 51.859-62.397 51.881Q-62.278 51.902-62.032 51.902L-62.032 52.199L-63.254 52.277L-63.254 51.656Q-63.422 51.945-63.704 52.111Q-63.985 52.277-64.305 52.277Q-65.622 52.277-65.622 51.246M-59.704 53.750L-61.559 53.750L-61.559 53.457Q-61.290 53.457-61.122 53.412Q-60.954 53.367-60.954 53.191L-60.954 49.367Q-60.954 49.160-61.110 49.107Q-61.266 49.054-61.559 49.054L-61.559 48.758L-60.336 48.672L-60.336 49.136Q-60.106 48.914-59.791 48.793Q-59.477 48.672-59.137 48.672Q-58.665 48.672-58.260 48.918Q-57.856 49.164-57.624 49.580Q-57.391 49.996-57.391 50.472Q-57.391 50.847-57.540 51.176Q-57.688 51.504-57.957 51.756Q-58.227 52.008-58.571 52.142Q-58.915 52.277-59.274 52.277Q-59.563 52.277-59.834 52.156Q-60.106 52.035-60.313 51.824L-60.313 53.191Q-60.313 53.367-60.145 53.412Q-59.977 53.457-59.704 53.457L-59.704 53.750M-60.313 49.535L-60.313 51.375Q-60.161 51.664-59.899 51.844Q-59.637 52.023-59.329 52.023Q-59.043 52.023-58.821 51.885Q-58.598 51.746-58.446 51.515Q-58.293 51.285-58.215 51.013Q-58.137 50.742-58.137 50.472Q-58.137 50.140-58.262 49.783Q-58.387 49.426-58.635 49.189Q-58.883 48.953-59.231 48.953Q-59.555 48.953-59.850 49.109Q-60.145 49.265-60.313 49.535M-54.985 53.750L-56.840 53.750L-56.840 53.457Q-56.571 53.457-56.403 53.412Q-56.235 53.367-56.235 53.191L-56.235 49.367Q-56.235 49.160-56.391 49.107Q-56.547 49.054-56.840 49.054L-56.840 48.758L-55.618 48.672L-55.618 49.136Q-55.387 48.914-55.073 48.793Q-54.758 48.672-54.418 48.672Q-53.946 48.672-53.541 48.918Q-53.137 49.164-52.905 49.580Q-52.672 49.996-52.672 50.472Q-52.672 50.847-52.821 51.176Q-52.969 51.504-53.239 51.756Q-53.508 52.008-53.852 52.142Q-54.196 52.277-54.555 52.277Q-54.844 52.277-55.116 52.156Q-55.387 52.035-55.594 51.824L-55.594 53.191Q-55.594 53.367-55.426 53.412Q-55.258 53.457-54.985 53.457L-54.985 53.750M-55.594 49.535L-55.594 51.375Q-55.442 51.664-55.180 51.844Q-54.918 52.023-54.610 52.023Q-54.325 52.023-54.102 51.885Q-53.879 51.746-53.727 51.515Q-53.575 51.285-53.497 51.013Q-53.418 50.742-53.418 50.472Q-53.418 50.140-53.543 49.783Q-53.668 49.426-53.916 49.189Q-54.165 48.953-54.512 48.953Q-54.836 48.953-55.131 49.109Q-55.426 49.265-55.594 49.535",[1430],[1185,5428,5429],{"transform":5422},[1190,5430],{"d":5431,"fill":1989,"stroke":1989,"className":5432,"style":1499},"M-51.901 50.504Q-51.901 50-51.645 49.568Q-51.389 49.136-50.953 48.885Q-50.518 48.633-50.018 48.633Q-49.631 48.633-49.289 48.777Q-48.948 48.922-48.686 49.183Q-48.424 49.445-48.282 49.781Q-48.139 50.117-48.139 50.504Q-48.139 50.996-48.403 51.406Q-48.666 51.816-49.096 52.047Q-49.526 52.277-50.018 52.277Q-50.510 52.277-50.944 52.045Q-51.377 51.812-51.639 51.404Q-51.901 50.996-51.901 50.504M-50.018 52Q-49.561 52-49.309 51.777Q-49.057 51.554-48.969 51.203Q-48.881 50.851-48.881 50.406Q-48.881 49.976-48.975 49.638Q-49.069 49.301-49.323 49.094Q-49.577 48.886-50.018 48.886Q-50.666 48.886-50.910 49.303Q-51.155 49.719-51.155 50.406Q-51.155 50.851-51.067 51.203Q-50.979 51.554-50.727 51.777Q-50.475 52-50.018 52M-45.647 52.199L-47.627 52.199L-47.627 51.902Q-47.358 51.902-47.190 51.857Q-47.022 51.812-47.022 51.640L-47.022 49.504Q-47.022 49.289-47.084 49.193Q-47.147 49.097-47.264 49.076Q-47.381 49.054-47.627 49.054L-47.627 48.758L-46.459 48.672L-46.459 49.457Q-46.381 49.246-46.229 49.060Q-46.077 48.875-45.877 48.773Q-45.678 48.672-45.452 48.672Q-45.205 48.672-45.014 48.816Q-44.823 48.961-44.823 49.191Q-44.823 49.347-44.928 49.457Q-45.034 49.566-45.190 49.566Q-45.346 49.566-45.455 49.457Q-45.565 49.347-45.565 49.191Q-45.565 49.031-45.459 48.926Q-45.784 48.926-45.998 49.154Q-46.213 49.383-46.309 49.722Q-46.405 50.062-46.405 50.367L-46.405 51.640Q-46.405 51.808-46.178 51.855Q-45.952 51.902-45.647 51.902L-45.647 52.199M-43.717 51.238L-43.717 49.047L-44.420 49.047L-44.420 48.793Q-44.065 48.793-43.823 48.560Q-43.580 48.328-43.469 47.980Q-43.358 47.633-43.358 47.277L-43.077 47.277L-43.077 48.750L-41.901 48.750L-41.901 49.047L-43.077 49.047L-43.077 51.222Q-43.077 51.543-42.957 51.771Q-42.838 52-42.557 52Q-42.377 52-42.260 51.877Q-42.143 51.754-42.090 51.574Q-42.037 51.394-42.037 51.222L-42.037 50.750L-41.756 50.750L-41.756 51.238Q-41.756 51.492-41.862 51.732Q-41.967 51.972-42.164 52.125Q-42.362 52.277-42.619 52.277Q-42.936 52.277-43.188 52.154Q-43.440 52.031-43.578 51.797Q-43.717 51.562-43.717 51.238M-39.178 52.199L-40.955 52.199L-40.955 51.902Q-40.682 51.902-40.514 51.855Q-40.346 51.808-40.346 51.640L-40.346 49.504Q-40.346 49.289-40.403 49.193Q-40.459 49.097-40.573 49.076Q-40.686 49.054-40.932 49.054L-40.932 48.758L-39.733 48.672L-39.733 51.640Q-39.733 51.808-39.586 51.855Q-39.440 51.902-39.178 51.902L-39.178 52.199M-40.619 47.277Q-40.619 47.086-40.485 46.955Q-40.350 46.824-40.155 46.824Q-40.034 46.824-39.930 46.886Q-39.827 46.949-39.764 47.053Q-39.702 47.156-39.702 47.277Q-39.702 47.472-39.832 47.607Q-39.963 47.742-40.155 47.742Q-40.354 47.742-40.487 47.609Q-40.619 47.476-40.619 47.277M-36.748 52.199L-38.604 52.199L-38.604 51.902Q-38.330 51.902-38.162 51.855Q-37.994 51.808-37.994 51.640L-37.994 49.504Q-37.994 49.289-38.057 49.193Q-38.119 49.097-38.239 49.076Q-38.358 49.054-38.604 49.054L-38.604 48.758L-37.412 48.672L-37.412 49.406Q-37.299 49.191-37.106 49.023Q-36.912 48.855-36.674 48.763Q-36.436 48.672-36.182 48.672Q-35.014 48.672-35.014 49.750L-35.014 51.640Q-35.014 51.808-34.844 51.855Q-34.674 51.902-34.405 51.902L-34.405 52.199L-36.260 52.199L-36.260 51.902Q-35.987 51.902-35.819 51.855Q-35.651 51.808-35.651 51.640L-35.651 49.765Q-35.651 49.383-35.772 49.154Q-35.893 48.926-36.244 48.926Q-36.557 48.926-36.811 49.088Q-37.065 49.250-37.211 49.519Q-37.358 49.789-37.358 50.086L-37.358 51.640Q-37.358 51.808-37.188 51.855Q-37.018 51.902-36.748 51.902L-36.748 52.199M-33.959 52.808Q-33.959 52.527-33.748 52.316Q-33.537 52.105-33.252 52.015Q-33.409 51.890-33.487 51.701Q-33.565 51.511-33.565 51.312Q-33.565 50.957-33.334 50.664Q-33.702 50.324-33.702 49.855Q-33.702 49.504-33.498 49.234Q-33.295 48.965-32.975 48.818Q-32.655 48.672-32.311 48.672Q-31.791 48.672-31.420 48.953Q-31.057 48.582-30.510 48.582Q-30.330 48.582-30.203 48.709Q-30.077 48.836-30.077 49.015Q-30.077 49.121-30.155 49.199Q-30.233 49.277-30.342 49.277Q-30.452 49.277-30.528 49.201Q-30.604 49.125-30.604 49.015Q-30.604 48.914-30.565 48.863Q-30.557 48.855-30.553 48.849Q-30.549 48.844-30.549 48.840Q-30.924 48.840-31.244 49.094Q-30.924 49.433-30.924 49.855Q-30.924 50.125-31.041 50.342Q-31.159 50.558-31.364 50.717Q-31.569 50.875-31.811 50.957Q-32.053 51.039-32.311 51.039Q-32.530 51.039-32.743 50.980Q-32.955 50.922-33.151 50.801Q-33.244 50.941-33.244 51.121Q-33.244 51.328-33.108 51.480Q-32.971 51.633-32.764 51.633L-32.069 51.633Q-31.580 51.633-31.168 51.717Q-30.756 51.801-30.477 52.058Q-30.198 52.316-30.198 52.808Q-30.198 53.172-30.518 53.404Q-30.838 53.636-31.280 53.738Q-31.721 53.840-32.077 53.840Q-32.432 53.840-32.875 53.738Q-33.319 53.636-33.639 53.404Q-33.959 53.172-33.959 52.808M-33.455 52.808Q-33.455 53.004-33.311 53.152Q-33.166 53.301-32.953 53.390Q-32.741 53.480-32.500 53.527Q-32.260 53.574-32.077 53.574Q-31.834 53.574-31.504 53.496Q-31.174 53.418-30.938 53.244Q-30.702 53.070-30.702 52.808Q-30.702 52.402-31.112 52.293Q-31.522 52.183-32.084 52.183L-32.764 52.183Q-33.034 52.183-33.244 52.361Q-33.455 52.539-33.455 52.808M-32.311 50.773Q-31.588 50.773-31.588 49.855Q-31.588 48.933-32.311 48.933Q-33.037 48.933-33.037 49.855Q-33.037 50.773-32.311 50.773",[1430],[1185,5434,5435],{"transform":5422},[1190,5436],{"d":5437,"fill":1989,"stroke":1989,"className":5438,"style":1499},"M-24.952 52.199L-26.784 52.199L-26.784 51.902Q-26.510 51.902-26.342 51.855Q-26.174 51.808-26.174 51.640L-26.174 47.480Q-26.174 47.265-26.237 47.170Q-26.299 47.074-26.418 47.053Q-26.538 47.031-26.784 47.031L-26.784 46.734L-25.561 46.648L-25.561 51.640Q-25.561 51.808-25.393 51.855Q-25.225 51.902-24.952 51.902L-24.952 52.199M-22.647 52.199L-24.424 52.199L-24.424 51.902Q-24.151 51.902-23.983 51.855Q-23.815 51.808-23.815 51.640L-23.815 49.504Q-23.815 49.289-23.872 49.193Q-23.928 49.097-24.041 49.076Q-24.155 49.054-24.401 49.054L-24.401 48.758L-23.202 48.672L-23.202 51.640Q-23.202 51.808-23.055 51.855Q-22.909 51.902-22.647 51.902L-22.647 52.199M-24.088 47.277Q-24.088 47.086-23.954 46.955Q-23.819 46.824-23.624 46.824Q-23.502 46.824-23.399 46.886Q-23.295 46.949-23.233 47.053Q-23.170 47.156-23.170 47.277Q-23.170 47.472-23.301 47.607Q-23.432 47.742-23.624 47.742Q-23.823 47.742-23.956 47.609Q-24.088 47.476-24.088 47.277M-20.217 52.199L-22.073 52.199L-22.073 51.902Q-21.799 51.902-21.631 51.855Q-21.463 51.808-21.463 51.640L-21.463 49.504Q-21.463 49.289-21.526 49.193Q-21.588 49.097-21.708 49.076Q-21.827 49.054-22.073 49.054L-22.073 48.758L-20.881 48.672L-20.881 49.406Q-20.768 49.191-20.575 49.023Q-20.381 48.855-20.143 48.763Q-19.905 48.672-19.651 48.672Q-18.483 48.672-18.483 49.750L-18.483 51.640Q-18.483 51.808-18.313 51.855Q-18.143 51.902-17.874 51.902L-17.874 52.199L-19.729 52.199L-19.729 51.902Q-19.456 51.902-19.288 51.855Q-19.120 51.808-19.120 51.640L-19.120 49.765Q-19.120 49.383-19.241 49.154Q-19.362 48.926-19.713 48.926Q-20.026 48.926-20.280 49.088Q-20.534 49.250-20.680 49.519Q-20.827 49.789-20.827 50.086L-20.827 51.640Q-20.827 51.808-20.657 51.855Q-20.487 51.902-20.217 51.902L-20.217 52.199M-17.428 50.445Q-17.428 49.965-17.196 49.549Q-16.963 49.133-16.553 48.883Q-16.143 48.633-15.666 48.633Q-14.936 48.633-14.538 49.074Q-14.139 49.515-14.139 50.246Q-14.139 50.351-14.233 50.375L-16.682 50.375L-16.682 50.445Q-16.682 50.855-16.561 51.211Q-16.440 51.566-16.168 51.783Q-15.897 52-15.467 52Q-15.104 52-14.807 51.771Q-14.510 51.543-14.409 51.191Q-14.401 51.144-14.315 51.129L-14.233 51.129Q-14.139 51.156-14.139 51.238Q-14.139 51.246-14.147 51.277Q-14.209 51.504-14.348 51.687Q-14.487 51.871-14.678 52.004Q-14.870 52.136-15.088 52.207Q-15.307 52.277-15.545 52.277Q-15.916 52.277-16.254 52.140Q-16.592 52.004-16.860 51.752Q-17.127 51.500-17.278 51.160Q-17.428 50.820-17.428 50.445M-16.674 50.136L-14.713 50.136Q-14.713 49.832-14.815 49.541Q-14.916 49.250-15.133 49.068Q-15.350 48.886-15.666 48.886Q-15.967 48.886-16.198 49.074Q-16.428 49.261-16.551 49.553Q-16.674 49.844-16.674 50.136",[1430],[1185,5440,5441],{"fill":1989,"stroke":1989},[1185,5442,5443,5450,5456],{"fill":1989,"stroke":1192,"fontFamily":1490,"fontSize":1491},[1185,5444,5446],{"transform":5445},"translate(7.625 -115.58)",[1190,5447],{"d":5448,"fill":1989,"stroke":1989,"className":5449,"style":1499},"M-67.774 53.750L-69.629 53.750L-69.629 53.457Q-69.360 53.457-69.192 53.412Q-69.024 53.367-69.024 53.191L-69.024 49.367Q-69.024 49.160-69.180 49.107Q-69.336 49.054-69.629 49.054L-69.629 48.758L-68.407 48.672L-68.407 49.136Q-68.176 48.914-67.862 48.793Q-67.547 48.672-67.207 48.672Q-66.735 48.672-66.331 48.918Q-65.926 49.164-65.694 49.580Q-65.461 49.996-65.461 50.472Q-65.461 50.847-65.610 51.176Q-65.758 51.504-66.028 51.756Q-66.297 52.008-66.641 52.142Q-66.985 52.277-67.344 52.277Q-67.633 52.277-67.905 52.156Q-68.176 52.035-68.383 51.824L-68.383 53.191Q-68.383 53.367-68.215 53.412Q-68.047 53.457-67.774 53.457L-67.774 53.750M-68.383 49.535L-68.383 51.375Q-68.231 51.664-67.969 51.844Q-67.707 52.023-67.399 52.023Q-67.114 52.023-66.891 51.885Q-66.668 51.746-66.516 51.515Q-66.364 51.285-66.286 51.013Q-66.207 50.742-66.207 50.472Q-66.207 50.140-66.332 49.783Q-66.457 49.426-66.706 49.189Q-66.954 48.953-67.301 48.953Q-67.625 48.953-67.920 49.109Q-68.215 49.265-68.383 49.535M-64.840 51.367Q-64.840 50.883-64.438 50.588Q-64.036 50.293-63.485 50.174Q-62.934 50.054-62.442 50.054L-62.442 49.765Q-62.442 49.539-62.557 49.332Q-62.672 49.125-62.870 49.006Q-63.067 48.886-63.297 48.886Q-63.723 48.886-64.008 48.992Q-63.938 49.019-63.891 49.074Q-63.844 49.129-63.819 49.199Q-63.793 49.269-63.793 49.344Q-63.793 49.449-63.844 49.541Q-63.895 49.633-63.987 49.683Q-64.079 49.734-64.184 49.734Q-64.290 49.734-64.381 49.683Q-64.473 49.633-64.524 49.541Q-64.575 49.449-64.575 49.344Q-64.575 48.926-64.186 48.779Q-63.797 48.633-63.297 48.633Q-62.965 48.633-62.612 48.763Q-62.258 48.894-62.030 49.148Q-61.801 49.402-61.801 49.750L-61.801 51.551Q-61.801 51.683-61.729 51.793Q-61.657 51.902-61.528 51.902Q-61.403 51.902-61.334 51.797Q-61.266 51.691-61.266 51.551L-61.266 51.039L-60.985 51.039L-60.985 51.551Q-60.985 51.754-61.102 51.912Q-61.219 52.070-61.401 52.154Q-61.582 52.238-61.786 52.238Q-62.016 52.238-62.168 52.066Q-62.321 51.894-62.352 51.664Q-62.512 51.945-62.821 52.111Q-63.129 52.277-63.481 52.277Q-63.993 52.277-64.416 52.054Q-64.840 51.832-64.840 51.367M-64.153 51.367Q-64.153 51.652-63.926 51.838Q-63.700 52.023-63.407 52.023Q-63.161 52.023-62.936 51.906Q-62.711 51.789-62.577 51.586Q-62.442 51.383-62.442 51.129L-62.442 50.297Q-62.707 50.297-62.993 50.351Q-63.278 50.406-63.549 50.535Q-63.821 50.664-63.987 50.871Q-64.153 51.078-64.153 51.367M-58.684 52.199L-60.665 52.199L-60.665 51.902Q-60.395 51.902-60.227 51.857Q-60.059 51.812-60.059 51.640L-60.059 49.504Q-60.059 49.289-60.122 49.193Q-60.184 49.097-60.301 49.076Q-60.418 49.054-60.665 49.054L-60.665 48.758L-59.497 48.672L-59.497 49.457Q-59.418 49.246-59.266 49.060Q-59.114 48.875-58.915 48.773Q-58.715 48.672-58.489 48.672Q-58.243 48.672-58.051 48.816Q-57.860 48.961-57.860 49.191Q-57.860 49.347-57.965 49.457Q-58.071 49.566-58.227 49.566Q-58.383 49.566-58.493 49.457Q-58.602 49.347-58.602 49.191Q-58.602 49.031-58.497 48.926Q-58.821 48.926-59.036 49.154Q-59.250 49.383-59.346 49.722Q-59.442 50.062-59.442 50.367L-59.442 51.640Q-59.442 51.808-59.215 51.855Q-58.989 51.902-58.684 51.902L-58.684 52.199M-57.282 51.367Q-57.282 50.883-56.879 50.588Q-56.477 50.293-55.926 50.174Q-55.375 50.054-54.883 50.054L-54.883 49.765Q-54.883 49.539-54.999 49.332Q-55.114 49.125-55.311 49.006Q-55.508 48.886-55.739 48.886Q-56.165 48.886-56.450 48.992Q-56.379 49.019-56.332 49.074Q-56.286 49.129-56.260 49.199Q-56.235 49.269-56.235 49.344Q-56.235 49.449-56.286 49.541Q-56.336 49.633-56.428 49.683Q-56.520 49.734-56.625 49.734Q-56.731 49.734-56.823 49.683Q-56.915 49.633-56.965 49.541Q-57.016 49.449-57.016 49.344Q-57.016 48.926-56.627 48.779Q-56.239 48.633-55.739 48.633Q-55.407 48.633-55.053 48.763Q-54.700 48.894-54.471 49.148Q-54.243 49.402-54.243 49.750L-54.243 51.551Q-54.243 51.683-54.170 51.793Q-54.098 51.902-53.969 51.902Q-53.844 51.902-53.776 51.797Q-53.707 51.691-53.707 51.551L-53.707 51.039L-53.426 51.039L-53.426 51.551Q-53.426 51.754-53.543 51.912Q-53.661 52.070-53.842 52.154Q-54.024 52.238-54.227 52.238Q-54.457 52.238-54.610 52.066Q-54.762 51.894-54.793 51.664Q-54.954 51.945-55.262 52.111Q-55.571 52.277-55.922 52.277Q-56.434 52.277-56.858 52.054Q-57.282 51.832-57.282 51.367M-56.594 51.367Q-56.594 51.652-56.368 51.838Q-56.141 52.023-55.848 52.023Q-55.602 52.023-55.377 51.906Q-55.153 51.789-55.018 51.586Q-54.883 51.383-54.883 51.129L-54.883 50.297Q-55.149 50.297-55.434 50.351Q-55.719 50.406-55.991 50.535Q-56.262 50.664-56.428 50.871Q-56.594 51.078-56.594 51.367M-51.219 52.199L-53.051 52.199L-53.051 51.902Q-52.778 51.902-52.610 51.855Q-52.442 51.808-52.442 51.640L-52.442 47.480Q-52.442 47.265-52.504 47.170Q-52.567 47.074-52.686 47.053Q-52.805 47.031-53.051 47.031L-53.051 46.734L-51.829 46.648L-51.829 51.640Q-51.829 51.808-51.661 51.855Q-51.493 51.902-51.219 51.902L-51.219 52.199M-48.860 52.199L-50.692 52.199L-50.692 51.902Q-50.418 51.902-50.250 51.855Q-50.082 51.808-50.082 51.640L-50.082 47.480Q-50.082 47.265-50.145 47.170Q-50.207 47.074-50.327 47.053Q-50.446 47.031-50.692 47.031L-50.692 46.734L-49.469 46.648L-49.469 51.640Q-49.469 51.808-49.301 51.855Q-49.133 51.902-48.860 51.902L-48.860 52.199M-48.415 50.445Q-48.415 49.965-48.182 49.549Q-47.950 49.133-47.540 48.883Q-47.129 48.633-46.653 48.633Q-45.922 48.633-45.524 49.074Q-45.125 49.515-45.125 50.246Q-45.125 50.351-45.219 50.375L-47.668 50.375L-47.668 50.445Q-47.668 50.855-47.547 51.211Q-47.426 51.566-47.155 51.783Q-46.883 52-46.454 52Q-46.090 52-45.793 51.771Q-45.497 51.543-45.395 51.191Q-45.387 51.144-45.301 51.129L-45.219 51.129Q-45.125 51.156-45.125 51.238Q-45.125 51.246-45.133 51.277Q-45.196 51.504-45.334 51.687Q-45.473 51.871-45.665 52.004Q-45.856 52.136-46.075 52.207Q-46.293 52.277-46.532 52.277Q-46.903 52.277-47.241 52.140Q-47.579 52.004-47.846 51.752Q-48.114 51.500-48.264 51.160Q-48.415 50.820-48.415 50.445M-47.661 50.136L-45.700 50.136Q-45.700 49.832-45.801 49.541Q-45.903 49.250-46.120 49.068Q-46.336 48.886-46.653 48.886Q-46.954 48.886-47.184 49.074Q-47.415 49.261-47.538 49.553Q-47.661 49.844-47.661 50.136M-42.723 52.199L-44.555 52.199L-44.555 51.902Q-44.282 51.902-44.114 51.855Q-43.946 51.808-43.946 51.640L-43.946 47.480Q-43.946 47.265-44.008 47.170Q-44.071 47.074-44.190 47.053Q-44.309 47.031-44.555 47.031L-44.555 46.734L-43.332 46.648L-43.332 51.640Q-43.332 51.808-43.165 51.855Q-42.997 51.902-42.723 51.902",[1430],[1185,5451,5452],{"transform":5445},[1190,5453],{"d":5454,"fill":1989,"stroke":1989,"className":5455,"style":1499},"M-39.385 50.472Q-39.385 49.976-39.135 49.551Q-38.885 49.125-38.465 48.879Q-38.045 48.633-37.545 48.633Q-37.006 48.633-36.615 48.758Q-36.225 48.883-36.225 49.297Q-36.225 49.402-36.275 49.494Q-36.326 49.586-36.418 49.636Q-36.510 49.687-36.619 49.687Q-36.725 49.687-36.816 49.636Q-36.908 49.586-36.959 49.494Q-37.010 49.402-37.010 49.297Q-37.010 49.074-36.842 48.969Q-37.064 48.910-37.537 48.910Q-37.834 48.910-38.049 49.049Q-38.264 49.187-38.395 49.418Q-38.525 49.648-38.584 49.918Q-38.643 50.187-38.643 50.472Q-38.643 50.867-38.510 51.217Q-38.377 51.566-38.105 51.783Q-37.834 52-37.436 52Q-37.061 52-36.785 51.783Q-36.510 51.566-36.408 51.207Q-36.393 51.144-36.330 51.144L-36.225 51.144Q-36.189 51.144-36.164 51.172Q-36.139 51.199-36.139 51.238L-36.139 51.261Q-36.271 51.742-36.656 52.010Q-37.041 52.277-37.545 52.277Q-37.908 52.277-38.242 52.140Q-38.576 52.004-38.836 51.754Q-39.096 51.504-39.240 51.168Q-39.385 50.832-39.385 50.472M-35.553 51.367Q-35.553 50.883-35.150 50.588Q-34.748 50.293-34.197 50.174Q-33.646 50.054-33.154 50.054L-33.154 49.765Q-33.154 49.539-33.270 49.332Q-33.385 49.125-33.582 49.006Q-33.779 48.886-34.010 48.886Q-34.436 48.886-34.721 48.992Q-34.650 49.019-34.603 49.074Q-34.557 49.129-34.531 49.199Q-34.506 49.269-34.506 49.344Q-34.506 49.449-34.557 49.541Q-34.607 49.633-34.699 49.683Q-34.791 49.734-34.896 49.734Q-35.002 49.734-35.094 49.683Q-35.186 49.633-35.236 49.541Q-35.287 49.449-35.287 49.344Q-35.287 48.926-34.898 48.779Q-34.510 48.633-34.010 48.633Q-33.678 48.633-33.324 48.763Q-32.971 48.894-32.742 49.148Q-32.514 49.402-32.514 49.750L-32.514 51.551Q-32.514 51.683-32.441 51.793Q-32.369 51.902-32.240 51.902Q-32.115 51.902-32.047 51.797Q-31.978 51.691-31.978 51.551L-31.978 51.039L-31.697 51.039L-31.697 51.551Q-31.697 51.754-31.814 51.912Q-31.932 52.070-32.113 52.154Q-32.295 52.238-32.498 52.238Q-32.728 52.238-32.881 52.066Q-33.033 51.894-33.064 51.664Q-33.225 51.945-33.533 52.111Q-33.842 52.277-34.193 52.277Q-34.705 52.277-35.129 52.054Q-35.553 51.832-35.553 51.367M-34.865 51.367Q-34.865 51.652-34.639 51.838Q-34.412 52.023-34.119 52.023Q-33.873 52.023-33.648 51.906Q-33.424 51.789-33.289 51.586Q-33.154 51.383-33.154 51.129L-33.154 50.297Q-33.420 50.297-33.705 50.351Q-33.990 50.406-34.262 50.535Q-34.533 50.664-34.699 50.871Q-34.865 51.078-34.865 51.367M-29.490 52.199L-31.322 52.199L-31.322 51.902Q-31.049 51.902-30.881 51.855Q-30.713 51.808-30.713 51.640L-30.713 47.480Q-30.713 47.265-30.775 47.170Q-30.838 47.074-30.957 47.053Q-31.076 47.031-31.322 47.031L-31.322 46.734L-30.100 46.648L-30.100 51.640Q-30.100 51.808-29.932 51.855Q-29.764 51.902-29.490 51.902L-29.490 52.199M-27.186 52.199L-28.963 52.199L-28.963 51.902Q-28.689 51.902-28.521 51.855Q-28.353 51.808-28.353 51.640L-28.353 49.504Q-28.353 49.289-28.410 49.193Q-28.467 49.097-28.580 49.076Q-28.693 49.054-28.939 49.054L-28.939 48.758L-27.740 48.672L-27.740 51.640Q-27.740 51.808-27.594 51.855Q-27.447 51.902-27.186 51.902L-27.186 52.199M-28.627 47.277Q-28.627 47.086-28.492 46.955Q-28.357 46.824-28.162 46.824Q-28.041 46.824-27.937 46.886Q-27.834 46.949-27.771 47.053Q-27.709 47.156-27.709 47.277Q-27.709 47.472-27.840 47.607Q-27.971 47.742-28.162 47.742Q-28.361 47.742-28.494 47.609Q-28.627 47.476-28.627 47.277M-24.803 53.750L-26.658 53.750L-26.658 53.457Q-26.389 53.457-26.221 53.412Q-26.053 53.367-26.053 53.191L-26.053 49.367Q-26.053 49.160-26.209 49.107Q-26.365 49.054-26.658 49.054L-26.658 48.758L-25.436 48.672L-25.436 49.136Q-25.205 48.914-24.891 48.793Q-24.576 48.672-24.236 48.672Q-23.764 48.672-23.359 48.918Q-22.955 49.164-22.723 49.580Q-22.490 49.996-22.490 50.472Q-22.490 50.847-22.639 51.176Q-22.787 51.504-23.057 51.756Q-23.326 52.008-23.670 52.142Q-24.014 52.277-24.373 52.277Q-24.662 52.277-24.934 52.156Q-25.205 52.035-25.412 51.824L-25.412 53.191Q-25.412 53.367-25.244 53.412Q-25.076 53.457-24.803 53.457L-24.803 53.750M-25.412 49.535L-25.412 51.375Q-25.260 51.664-24.998 51.844Q-24.736 52.023-24.428 52.023Q-24.143 52.023-23.920 51.885Q-23.697 51.746-23.545 51.515Q-23.393 51.285-23.314 51.013Q-23.236 50.742-23.236 50.472Q-23.236 50.140-23.361 49.783Q-23.486 49.426-23.734 49.189Q-23.982 48.953-24.330 48.953Q-24.654 48.953-24.949 49.109Q-25.244 49.265-25.412 49.535",[1430],[1185,5457,5458],{"transform":5445},[1190,5459],{"d":5460,"fill":1989,"stroke":1989,"className":5461,"style":1499},"M-21.719 50.445Q-21.719 49.965-21.486 49.549Q-21.254 49.133-20.844 48.883Q-20.434 48.633-19.957 48.633Q-19.227 48.633-18.828 49.074Q-18.430 49.515-18.430 50.246Q-18.430 50.351-18.523 50.375L-20.973 50.375L-20.973 50.445Q-20.973 50.855-20.852 51.211Q-20.730 51.566-20.459 51.783Q-20.187 52-19.758 52Q-19.395 52-19.098 51.771Q-18.801 51.543-18.699 51.191Q-18.691 51.144-18.605 51.129L-18.523 51.129Q-18.430 51.156-18.430 51.238Q-18.430 51.246-18.437 51.277Q-18.500 51.504-18.639 51.687Q-18.777 51.871-18.969 52.004Q-19.160 52.136-19.379 52.207Q-19.598 52.277-19.836 52.277Q-20.207 52.277-20.545 52.140Q-20.883 52.004-21.150 51.752Q-21.418 51.500-21.568 51.160Q-21.719 50.820-21.719 50.445M-20.965 50.136L-19.004 50.136Q-19.004 49.832-19.105 49.541Q-19.207 49.250-19.424 49.068Q-19.641 48.886-19.957 48.886Q-20.258 48.886-20.488 49.074Q-20.719 49.261-20.842 49.553Q-20.965 49.844-20.965 50.136M-15.934 52.199L-17.914 52.199L-17.914 51.902Q-17.645 51.902-17.477 51.857Q-17.309 51.812-17.309 51.640L-17.309 49.504Q-17.309 49.289-17.371 49.193Q-17.434 49.097-17.551 49.076Q-17.668 49.054-17.914 49.054L-17.914 48.758L-16.746 48.672L-16.746 49.457Q-16.668 49.246-16.516 49.060Q-16.363 48.875-16.164 48.773Q-15.965 48.672-15.738 48.672Q-15.492 48.672-15.301 48.816Q-15.109 48.961-15.109 49.191Q-15.109 49.347-15.215 49.457Q-15.320 49.566-15.477 49.566Q-15.633 49.566-15.742 49.457Q-15.852 49.347-15.852 49.191Q-15.852 49.031-15.746 48.926Q-16.070 48.926-16.285 49.154Q-16.500 49.383-16.596 49.722Q-16.691 50.062-16.691 50.367L-16.691 51.640Q-16.691 51.808-16.465 51.855Q-16.238 51.902-15.934 51.902",[1430],[1200,5463,5465],{"className":5464},[1203],"Rotating calipers: two parallel supporting lines turn around the hull; the diameter is the widest antipodal pair",[381,5467,5468,5469,5472,5473,5476,5477],{},"The same caliper sweep yields the ",[385,5470,5471],{},"smallest enclosing rectangle"," (its optimal\norientation always has a side flush with a hull edge), the width of the point set,\nand the ",[385,5474,5475],{},"convex layers"," (peel the hull, recurse on the interior). Whenever a\nproblem cares only about the outermost shape of a point cloud (collision bounds,\nfitting, nearest-feature queries), computing the hull first is the standard\nopening move.",[3920,5478,5479],{},[442,5480,1265],{"href":5481,"ariaDescribedBy":5482,"dataFootnoteRef":376,"id":5483},"#user-content-fn-clrs-hull",[3926],"user-content-fnref-clrs-hull",[1098,5485,5487],{"id":5486},"takeaways","Takeaways",[3992,5489,5490,5495,5611,5618,5627,5688,5735],{},[3995,5491,4182,5492,5494],{},[385,5493,1096],{}," is the smallest convex polygon enclosing a point set (the\nrubber band around the nails), and reporting it in boundary order is the\nfoundational problem of planar computational geometry.",[3995,5496,5497,5499,5500,5530,5531,5534,5535,5538,5539,5542,5543,5570,5571,5610],{},[385,5498,1592],{}," sorts by ",[390,5501,5503],{"className":5502},[393],[390,5504,5506],{"className":5505,"ariaHidden":398},[397],[390,5507,5509,5512,5515,5518,5521,5524,5527],{"className":5508},[402],[390,5510],{"className":5511,"style":461},[406],[390,5513,466],{"className":5514},[465],[390,5516,602],{"className":5517},[411,412],[390,5519,418],{"className":5520},[417],[390,5522],{"className":5523,"style":423},[422],[390,5525,711],{"className":5526,"style":710},[411,412],[390,5528,495],{"className":5529},[494],", then sweeps a ",[385,5532,5533],{},"lower"," and\n",[385,5536,5537],{},"upper"," hull, ",[385,5540,5541],{},"popping"," any vertex where the last three points fail to turn\ncounterclockwise (cross product ",[390,5544,5546],{"className":5545},[393],[390,5547,5549,5561],{"className":5548,"ariaHidden":398},[397],[390,5550,5552,5555,5558],{"className":5551},[402],[390,5553],{"className":5554,"style":1888},[406],[390,5556,1892],{"className":5557},[546],[390,5559],{"className":5560,"style":542},[422],[390,5562,5564,5567],{"className":5563},[402],[390,5565],{"className":5566,"style":1854},[406],[390,5568,1858],{"className":5569},[411],"). It is ",[390,5572,5574],{"className":5573},[393],[390,5575,5577],{"className":5576,"ariaHidden":398},[397],[390,5578,5580,5583,5586,5589,5592,5595,5601,5604,5607],{"className":5579},[402],[390,5581],{"className":5582,"style":461},[406],[390,5584,1230],{"className":5585,"style":1229},[411,412],[390,5587,466],{"className":5588},[465],[390,5590,1092],{"className":5591},[411,412],[390,5593],{"className":5594,"style":423},[422],[390,5596,5598],{"className":5597},[1394],[390,5599,1400],{"className":5600,"style":1399},[411,1398],[390,5602],{"className":5603,"style":423},[422],[390,5605,1092],{"className":5606},[411,412],[390,5608,495],{"className":5609},[494],", dominated by the\nsort.",[3995,5612,5613,5614,5617],{},"The pop condition is the ",[385,5615,5616],{},"orientation primitive"," from the previous lesson:\nkeep left turns, reject right turns and (by policy) collinear points.",[3995,5619,5620,5623,5624,5626],{},[385,5621,5622],{},"Graham scan"," achieves the same bound by sorting on ",[385,5625,3825],{},"; monotone\nchain avoids angle computation and is more numerically stable.",[3995,5628,5629,5631,5632,5659,5660,5687],{},[385,5630,3983],{},", namely duplicates and collinear hull-edge points, are handled\nby deduplicating and by choosing ",[390,5633,5635],{"className":5634},[393],[390,5636,5638,5650],{"className":5637,"ariaHidden":398},[397],[390,5639,5641,5644,5647],{"className":5640},[402],[390,5642],{"className":5643,"style":1840},[406],[390,5645,4054],{"className":5646},[546],[390,5648],{"className":5649,"style":542},[422],[390,5651,5653,5656],{"className":5652},[402],[390,5654],{"className":5655,"style":1854},[406],[390,5657,1858],{"className":5658},[411]," (keep collinear) versus ",[390,5661,5663],{"className":5662},[393],[390,5664,5666,5678],{"className":5665,"ariaHidden":398},[397],[390,5667,5669,5672,5675],{"className":5668},[402],[390,5670],{"className":5671,"style":1888},[406],[390,5673,1892],{"className":5674},[546],[390,5676],{"className":5677,"style":542},[422],[390,5679,5681,5684],{"className":5680},[402],[390,5682],{"className":5683,"style":1854},[406],[390,5685,1858],{"className":5686},[411]," (drop them).",[3995,5689,5690,5691,5730,5731,5734],{},"Any hull algorithm is ",[390,5692,5694],{"className":5693},[393],[390,5695,5697],{"className":5696,"ariaHidden":398},[397],[390,5698,5700,5703,5706,5709,5712,5715,5721,5724,5727],{"className":5699},[402],[390,5701],{"className":5702,"style":461},[406],[390,5704,4155],{"className":5705},[411],[390,5707,466],{"className":5708},[465],[390,5710,1092],{"className":5711},[411,412],[390,5713],{"className":5714,"style":423},[422],[390,5716,5718],{"className":5717},[1394],[390,5719,1400],{"className":5720,"style":1399},[411,1398],[390,5722],{"className":5723,"style":423},[422],[390,5725,1092],{"className":5726},[411,412],[390,5728,495],{"className":5729},[494]," by ",[385,5732,5733],{},"reduction from sorting"," (lift\npoints onto a parabola), so these algorithms are optimal.",[3995,5736,5737,5738,5741,5742,5745,5746,5770],{},"The hull is a ",[385,5739,5740],{},"preprocessing"," step: ",[385,5743,5744],{},"rotating calipers"," give the diameter,\nsmallest enclosing rectangle, and width in ",[390,5747,5749],{"className":5748},[393],[390,5750,5752],{"className":5751,"ariaHidden":398},[397],[390,5753,5755,5758,5761,5764,5767],{"className":5754},[402],[390,5756],{"className":5757,"style":461},[406],[390,5759,1230],{"className":5760,"style":1229},[411,412],[390,5762,466],{"className":5763},[465],[390,5765,1092],{"className":5766},[411,412],[390,5768,495],{"className":5769},[494]," once the hull is built.",[5772,5773,5776,5781],"section",{"className":5774,"dataFootnotes":376},[5775],"footnotes",[1098,5777,5780],{"className":5778,"id":3926},[5779],"sr-only","Footnotes",[5782,5783,5784,5838,5850],"ol",{},[3995,5785,5787,5790,5791,5830,5831],{"id":5786},"user-content-fn-clrs-graham",[385,5788,5789],{},"CLRS",", Ch. 33 — Computational Geometry (§33.3): Graham's scan sorts by polar angle around the lowest point and maintains a stack of left turns, in ",[390,5792,5794],{"className":5793},[393],[390,5795,5797],{"className":5796,"ariaHidden":398},[397],[390,5798,5800,5803,5806,5809,5812,5815,5821,5824,5827],{"className":5799},[402],[390,5801],{"className":5802,"style":461},[406],[390,5804,1230],{"className":5805,"style":1229},[411,412],[390,5807,466],{"className":5808},[465],[390,5810,1092],{"className":5811},[411,412],[390,5813],{"className":5814,"style":423},[422],[390,5816,5818],{"className":5817},[1394],[390,5819,1400],{"className":5820,"style":1399},[411,1398],[390,5822],{"className":5823,"style":423},[422],[390,5825,1092],{"className":5826},[411,412],[390,5828,495],{"className":5829},[494],". ",[442,5832,5837],{"href":5833,"ariaLabel":5834,"className":5835,"dataFootnoteBackref":376},"#user-content-fnref-clrs-graham","Back to reference 1",[5836],"data-footnote-backref","↩",[3995,5839,5841,5844,5845],{"id":5840},"user-content-fn-skiena-hull",[385,5842,5843],{},"Skiena",", § — Convex Hull: the hull as the most basic geometric structure, with rotating calipers for farthest-pair and enclosing-shape queries. ",[442,5846,5837],{"href":5847,"ariaLabel":5848,"className":5849,"dataFootnoteBackref":376},"#user-content-fnref-skiena-hull","Back to reference 2",[5836],[3995,5851,5853,5855,5856,5871,5872],{"id":5852},"user-content-fn-clrs-hull",[385,5854,5789],{},", Ch. 33 — Computational Geometry (§33.3): the convex hull as a preprocessing primitive reducing ",[390,5857,5859],{"className":5858},[393],[390,5860,5862],{"className":5861,"ariaHidden":398},[397],[390,5863,5865,5868],{"className":5864},[402],[390,5866],{"className":5867,"style":1088},[406],[390,5869,1092],{"className":5870},[411,412]," points to an ordered convex polygon. ",[442,5873,5837],{"href":5874,"ariaLabel":5875,"className":5876,"dataFootnoteBackref":376},"#user-content-fnref-clrs-hull","Back to reference 3",[5836],[5878,5879,5880],"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":5882},[5883,5884,5885,5886,5887,5889,5890,5891],{"id":1100,"depth":18,"text":1101},{"id":1591,"depth":18,"text":1592},{"id":3689,"depth":18,"text":3690},{"id":3982,"depth":18,"text":3983},{"id":4138,"depth":18,"text":5888},"A lower bound: Ω(nlogn)",{"id":5215,"depth":18,"text":5216},{"id":5486,"depth":18,"text":5487},{"id":3926,"depth":18,"text":5780},"The previous lesson gave us a single, deceptively far-reaching operation: the\norientation of an ordered triple of points A,B,C, read off the sign of\nthe cross product","md",{"moduleNumber":333,"lessonNumber":18,"order":5895},1102,true,[5898,5901,5904],{"title":4074,"slug":5899,"difficulty":5900},"erect-the-fence","Hard",{"title":5902,"slug":5903,"difficulty":5900},"Maximum Number of Visible Points","maximum-number-of-visible-points",{"title":5905,"slug":5906,"difficulty":5907},"Minimum Area Rectangle II","minimum-area-rectangle-ii","Medium","---\ntitle: Convex Hull\nmodule: Computational Geometry\nmoduleNumber: 11\nlessonNumber: 2\norder: 1102\nsummary: >-\n  The convex hull is the smallest convex polygon enclosing a point set — the\n  rubber band snapped around the nails. We build it with Andrew's monotone chain,\n  sorting by $(x,y)$ and sweeping a lower and upper hull while popping any\n  non-left turn via the orientation primitive, in $O(n\\log n)$. A reduction from\n  sorting shows that bound is optimal, and the hull unlocks diameter, smallest\n  enclosing rectangle, and more through rotating calipers.\ntopics: [Geometry]\nsources:\n  - book: CLRS\n    ref: \"Ch. 33 — Computational Geometry (§33.3)\"\n  - book: Skiena\n    ref: \"§ — Convex Hull\"\n  - book: Erickson\n    ref: \"Ch. — (geometry)\"\npractice:\n  - title: 'Erect the Fence'\n    slug: erect-the-fence\n    difficulty: Hard\n  - title: 'Maximum Number of Visible Points'\n    slug: maximum-number-of-visible-points\n    difficulty: Hard\n  - title: 'Minimum Area Rectangle II'\n    slug: minimum-area-rectangle-ii\n    difficulty: Medium\n---\n\nThe previous lesson gave us a single, deceptively far-reaching operation: the\n**orientation** of an ordered triple of points $A, B, C$, read off the sign of\nthe [cross product](\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives)\n\n$$\n(B - A) \\times (C - A) = (B_x - A_x)(C_y - A_y) - (B_y - A_y)(C_x - A_x).\n$$\n\nA **positive** value means $A \\to B \\to C$ turns **counterclockwise** (a left\nturn), a **negative** value means clockwise (a right turn), and **zero** means\nthe three points are collinear. That one branch-free, multiplication-only test,\nwith no divisions, no square roots, and no angles, is the entire geometric engine\nof this lesson. We now use it to solve the foundational problem of computational\ngeometry: given $n$ points in the plane, find their **convex hull**.\n\n## The problem\n\n> **Definition.** The **convex hull** of a finite point set $P$ is the smallest\n> convex polygon that contains every point of $P$. Equivalently, it is the\n> intersection of all convex sets containing $P$.\n\nThe mental picture is exact and worth keeping: hammer a nail into the plane at\neach point, stretch a rubber band wide enough to enclose them all, and let go.\nThe band snaps taut around the outermost points and traces the hull; the points\nit touches are the **hull vertices**, and everything else lands strictly inside.\n\n$$\n% caption: The convex hull is the smallest convex polygon enclosing the points\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, fill, inner sep=1.6pt},\n  scale=1.0]\n  \\definecolor{acc}{HTML}{2348F2}\n  % hull vertices\n  \\node (a) at (0.0,0.4) {};\n  \\node (b) at (1.6,-0.4) {};\n  \\node (c) at (3.8,0.2) {};\n  \\node (d) at (4.4,2.0) {};\n  \\node (e) at (2.6,3.2) {};\n  \\node (f) at (0.4,2.6) {};\n  % interior points (plain)\n  \\node at (1.8,1.2) {};\n  \\node at (2.6,1.8) {};\n  \\node at (1.4,2.0) {};\n  % hull polygon in accent\n  \\draw[acc, thick] (a.center) -- (b.center) -- (c.center) -- (d.center)\n    -- (e.center) -- (f.center) -- cycle;\n\\end{tikzpicture}\n$$\n\nA hull algorithm must report the vertices in boundary order (say\ncounterclockwise). The naive approaches are slow: testing each ordered pair to\nsee whether all other points lie on one side of the line through it identifies\nhull _edges_ in $O(n^3)$; gift-wrapping (Jarvis march) pivots from one hull vertex\nto the next in $O(nh)$ time, where $h$ is the number of hull vertices, good when\nthe hull is tiny but $\\Theta(n^2)$ when every point is a vertex. We can do\nbetter, and provably best, in $O(n\\log n)$.\n\n$$\n% caption: Gift-wrapping: from $p$ pick $q$ so every other point lies left of ray $p\\to q$\n\\begin{tikzpicture}[\n  every node\u002F.style={font=\\small},\n  dot\u002F.style={circle, fill, inner sep=1.5pt},\n  >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[dot, label=left:$p$] (p) at (0,0) {};\n  \\node[dot, label=above:$a$] (a) at (3,2.5) {};\n  \\node[dot, label=above:$b$] (b) at (4,0.5) {};\n  \\node[dot, label=above left:$c$] (c) at (2,1.5) {};\n  \\node[dot, label=right:$q$] (q) at (4,-1) {};\n  \\draw[dashed, gray] (p) -- (a);\n  \\draw[dashed, gray] (p) -- (b);\n  \\draw[dashed, gray] (p) -- (c);\n  \\draw[acc, very thick, ->] (p) -- (q);\n  \\node[acc, font=\\footnotesize] at (2.4,-1.0) {chosen: all left};\n\\end{tikzpicture}\n$$\n\n## Andrew's monotone chain\n\nThe cleanest $O(n\\log n)$ algorithm sorts the points once and sweeps them with a\nstack, building the boundary in two passes.\n\n> **Idea.** Sort the points by $(x, y)$ — primarily by $x$, breaking ties by $y$.\n> Sweep **left to right** to build the **lower hull**, then **right to left** to\n> build the **upper hull**. In each sweep, maintain the invariant that the points\n> currently on the stack make _only counterclockwise turns_. Before pushing a new\n> point, **pop** the top of the stack while the last three points fail to turn\n> left. Concatenating the two chains closes the polygon.\n\nThe pop condition is pure orientation. Suppose the stack ends in $A, B$ and we are\nabout to add $C$. If $A \\to B \\to C$ is a left turn (cross product $> 0$), $B$ is\na genuine corner of the hull-so-far and we keep it. If it is a right turn or\ncollinear (cross product $\\le 0$), then $B$ is \"inside\" the corner that $C$ opens\nup (the rubber band would not touch $B$), so we pop $B$ and re-test with the new\ntop. This is exactly the rejection drawn below.\n\n$$\n% caption: Pop while the last three points don't turn counterclockwise\n\\begin{tikzpicture}[\n  >=stealth, scale=1.0,\n  pt\u002F.style={circle, fill, inner sep=1.8pt}]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[pt] (A) at (0,0) {};\n  \\node[pt, fill=red!75!black] (B) at (2.0,1.4) {};\n  \\node[pt] (C) at (4.2,0.5) {};\n  \\node[below left] at (A) {$A$};\n  \\node[above, red!75!black] at (B.north) {$B$ (popped)};\n  \\node[below right] at (C) {$C$};\n  % rejected edges through B (right turn): red, dashed\n  \\draw[dashed, thick, red!75!black] (A.center) -- (B.center);\n  \\draw[dashed, thick, red!75!black] (B.center) -- (C.center);\n  % corrected hull edge A -> C in accent (the kept left turn)\n  \\draw[acc, very thick, ->] (A.center) -- (C.center);\n\\end{tikzpicture}\n$$\n\nHere $A \\to B \\to C$ bends to the **right**, so the chain dips below the convex\nboundary at $B$. The algorithm pops $B$ and the corrected edge runs straight from\n$A$ to $C$, restoring the all-left-turns invariant.\n\nInside the left-to-right sweep this plays out as a stack that grows and\noccasionally collapses. Below, the stack holds $p_1 p_2 p_3$ when $p_4$ arrives;\nthe turn at $p_3$ is a right turn, so $p_3$ pops, and now the turn at $p_2$ is\nstill a right turn, so $p_2$ pops too, leaving the taut chain $p_1 p_4$.\n\n$$\n% caption: One sweep step: $p_4$ arrives and cascades two pops, $p_3$ then $p_2$, leaving\n%          the lower chain taut\n\\begin{tikzpicture}[\n  every node\u002F.style={font=\\small},\n  dot\u002F.style={circle, fill, inner sep=1.5pt},\n  >=stealth, scale=0.9]\n  \\definecolor{acc}{HTML}{2348F2}\n  % BEFORE: stack p1 p2 p3, then p4 incoming\n  \\node[dot, label=below left:$p_1$] (q1) at (0,0)    {};\n  \\node[dot, label=above:$p_2$]      (q2) at (1.3,1.1){};\n  \\node[dot, label=above:$p_3$]      (q3) at (2.8,1.5){};\n  \\node[dot, label=below right:$p_4$](q4) at (4.4,0.3){};\n  % current stacked chain (before p4 processed) — discarded, so thin red dashed\n  \\draw[red!75!black, thin, dashed] (q1.center) -- (q2.center) -- (q3.center);\n  % p4 about to be added: dashed grey lead-in\n  \\draw[dashed, black!45] (q3.center) -- (q4.center);\n  % the popped vertices marked red, the cascade arrow\n  \\node[dot, fill=red!75!black] at (q2) {};\n  \\node[dot, fill=red!75!black] at (q3) {};\n  \\node[red!75!black, font=\\footnotesize, align=center] at (2.0,2.35)\n    {$p_3,p_2$ pop\\\\(right turns)};\n  \\draw[red!75!black, ->, thick] (1.7,2.0) to[bend right=12] (1.45,1.35);\n  \\draw[red!75!black, ->, thick] (2.35,2.05) to[bend left=10] (2.75,1.7);\n  % AFTER: corrected chain p1 -> p4\n  \\draw[acc, very thick, ->] (q1.center) -- (q4.center);\n  \\node[acc, font=\\footnotesize] at (2.6,-0.5) {kept: $p_1 p_4$};\n\\end{tikzpicture}\n$$\n\n```algorithm\ncaption: $\\textsc{Monotone-Chain}(P)$ — convex hull of points $P$ in $O(n\\log n)$\nsort $P$ ascending by $(x, y)$, removing duplicates\n$L \\gets [\\,]$ \u002F\u002F lower hull\nfor each point $p$ in $P$ (left to right) do\n  while $|L| \\ge 2$ and $\\text{cross}(L_{-2}, L_{-1}, p) \\le 0$ do\n    pop $L$\n  push $p$ onto $L$\n$U \\gets [\\,]$ \u002F\u002F upper hull\nfor each point $p$ in $P$ (right to left) do\n  while $|U| \\ge 2$ and $\\text{cross}(U_{-2}, U_{-1}, p) \\le 0$ do\n    pop $U$\n  push $p$ onto $U$\ndrop the last element of $L$ and of $U$ \u002F\u002F shared endpoints\nreturn $L$ concatenated with $U$ \u002F\u002F counterclockwise\n```\n\nHere $L_{-1}, L_{-2}$ denote the top two stack elements and\n$\\text{cross}(A, B, C)$ is the orientation value above. The last point of each\nchain is the first point of the other (the global min and max under the sort\norder), so we drop one copy of each to avoid duplicating the two extreme\nvertices.\n\n> **Correctness.** After the left-to-right sweep, $L$ is exactly the lower\n> boundary: every consecutive triple turns counterclockwise (the loop guarantees\n> it), and no point lies below the chain, because any point we popped was strictly\n> above the segment that replaced it. The symmetric claim holds for $U$. A polygon\n> whose every interior angle is a left turn is convex, and it contains all points\n> since none lies below the lower chain or above the upper chain. $\\qed$\n\n**Complexity.** The [sort](\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort) costs $\\Theta(n\\log n)$. Each sweep is linear despite the\ninner `while`: a point is pushed once and popped at most once, so the total number\nof pop operations across a sweep is at most $n$. The work after sorting is\ntherefore $\\Theta(n)$, and the sort dominates: $O(n\\log n)$ overall.\n\n$$\n% caption: Monotone chain builds the lower chain ($x$ increasing) then the upper chain\n%          back\n\\begin{tikzpicture}[\n  every node\u002F.style={font=\\small},\n  dot\u002F.style={circle, fill, inner sep=1.5pt},\n  >=stealth, scale=0.95]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[dot, label=left:$A$]  (A) at (0,1)   {};\n  \\node[dot, label=below:$B$] (B) at (2,0)   {};\n  \\node[dot, label=below:$C$] (C) at (5,0.3) {};\n  \\node[dot, label=right:$D$] (D) at (6,2)   {};\n  \\node[dot, label=above:$E$] (E) at (4,3.2) {};\n  \\node[dot, label=above:$F$] (F) at (1,3)   {};\n  \\node[dot, fill=black!45] at (2,1.5)   {};\n  \\node[dot, fill=black!45] at (3,2)     {};\n  \\node[dot, fill=black!45] at (3.5,1)   {};\n  \\draw[acc, very thick] (A) -- (B) -- (C) -- (D);\n  \\draw[acc, very thick, dashed] (D) -- (E) -- (F) -- (A);\n  \\node[acc, font=\\footnotesize] at (3.3,-0.55) {lower chain};\n  \\node[acc, font=\\footnotesize] at (3.0,3.75) {upper chain};\n\\end{tikzpicture}\n$$\n\n## Graham scan: the classic alternative\n\nThe original $O(n\\log n)$ hull algorithm, **Graham's scan**, has the same skeleton\nbut a different ordering. Pick the point with the lowest $y$-coordinate (ties\nbroken by $x$) as a pivot $p_0$; it is certainly a hull vertex. Sort the remaining\npoints by **polar angle** around $p_0$, then scan them in that angular order,\nmaintaining a stack and popping whenever the last three points fail to turn left,\nthe identical orientation test. Because the points are visited in angular order,\none pass suffices to trace the whole boundary, again in $O(n\\log n)$.[^clrs-graham]\nMonotone chain is usually preferred in practice precisely because it avoids the\npolar-angle sort: comparing $(x, y)$ lexicographically uses only the coordinates,\nwhereas sorting by angle requires either $\\operatorname{atan2}$ (floating point,\nslow, imprecise) or cross-product comparisons with careful handling of the pivot,\nwhich means more code and more numerical fragility for the same asymptotics.\n\n## Degeneracies\n\nReal inputs are not in \"general position,\" and the hull is where edge cases bite.\n\n- **Duplicate points** must be removed first (the sort makes this a linear scan);\n  a repeated point can otherwise wedge a zero-length edge into the chain and break\n  the turn test.\n- **Collinear points on a hull edge** are a deliberate policy choice, and it lives\n  entirely in the comparison operator. Using $\\le 0$ in the pop condition (as\n  above) **discards** collinear points, keeping only true corners — the minimal\n  vertex set. Using $\u003C 0$ **keeps** collinear points on the boundary, so a flat\n  edge with interior points reports all of them. Problems like _Erect the Fence_,\n  which ask for _every_ point lying on the fence, want the $\u003C 0$ variant; most\n  geometry that follows (diameter, area) wants the lean $\\le 0$ hull. Decide which\n  one your caller needs and pick the inequality accordingly.\n\n## A lower bound: $\\Omega(n\\log n)$\n\nThe $O(n\\log n)$ running time is not an artifact of these particular algorithms.\n**No** comparison-based hull algorithm can beat it, by the same\n[lower-bound argument](\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds) that pins\ncomparison sorting.\n\n> **Theorem.** Computing the convex hull of $n$ points (reported in boundary\n> order) requires $\\Omega(n\\log n)$ time in the algebraic decision-tree model.\n\n> **Proof sketch (reduction from sorting).** Given $n$ reals $x_1, \\dots, x_n$ to\n> sort, map each to the planar point $(x_i, x_i^2)$. These points lie on the\n> parabola $y = x^2$, which is convex, so **every** point is a hull vertex and the\n> hull is the entire set. Reading the hull off in boundary order lists the points\n> by increasing $x$ — that is, it sorts the $x_i$. A hull algorithm running in\n> $o(n\\log n)$ would thus sort in $o(n\\log n)$, contradicting the\n> $\\Omega(n\\log n)$ comparison-sorting bound established in the\n> **sorting-lower-bounds** lesson. $\\qed$\n\n$$\n% caption: Lifting $x_i\\mapsto(x_i,x_i^2)$ puts every point on a convex parabola, so the\n%          hull sorts the $x_i$\n\\begin{tikzpicture}[\n  every node\u002F.style={font=\\small},\n  dot\u002F.style={circle, fill, inner sep=1.5pt},\n  >=stealth, yscale=0.7, scale=1.05]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\draw[acc, thick] plot[domain=-2.15:2.15, samples=60] (\\x, {\\x*\\x});\n  \\foreach \\x\u002F\\lab in {-2\u002F1,-1\u002F2,0\u002F3,1\u002F4,2\u002F5}\n    \\node[dot, label={[font=\\footnotesize]above left:\\lab}] at (\\x, {\\x*\\x}) {};\n  \\draw[->] (-2.6,-0.55) -- (2.7,-0.55) node[right] {$x$};\n  \\foreach \\x in {-2,-1,0,1,2}\n    \\draw (\\x,-0.45) -- (\\x,-0.65);\n  \\node[font=\\footnotesize] at (0,-1.15) {sorted $x_i$};\n  \\node[acc, font=\\footnotesize] at (0,5.05) {hull $=$ all points};\n\\end{tikzpicture}\n$$\n\nSo monotone chain and Graham scan are asymptotically optimal: the sort they pay\nfor is, in a precise sense, _the same sort_ the problem secretly requires.\n\n## What the hull is good for\n\nThe hull is rarely the final answer. It is a preprocessing step that collapses\n$n$ messy points down to an ordered convex polygon of $h \\le n$ vertices, after\nwhich many \"extremal\" questions become easy. The key technique is **rotating\ncalipers**: walk two pointers around the hull in tandem, exploiting the fact that\nas one supporting line rotates, the farthest or nearest vertex advances\nmonotonically.[^skiena-hull] This computes the polygon **diameter** (the\nfarthest pair of points in the whole set, which must be two hull vertices) in\n$O(n)$ time _after_ the hull, rather than the $\\Theta(n^2)$ of checking all pairs.\n\n$$\n% caption: Rotating calipers: two parallel supporting lines turn around the hull; the\n%          diameter is the widest antipodal pair\n\\begin{tikzpicture}[\n  every node\u002F.style={font=\\small},\n  dot\u002F.style={circle, fill, inner sep=1.5pt},\n  >=stealth, scale=0.95]\n  \\definecolor{acc}{HTML}{2348F2}\n  % a convex hull\n  \\node[dot] (h0) at (0.3,0.6)  {};\n  \\node[dot] (h1) at (2.4,0.0)  {};\n  \\node[dot] (h2) at (4.4,1.0)  {};\n  \\node[dot] (h3) at (4.6,2.8)  {};\n  \\node[dot] (h4) at (2.6,3.8)  {};\n  \\node[dot] (h5) at (0.6,2.6)  {};\n  \\draw[acc, thick] (h0.center) -- (h1.center) -- (h2.center) -- (h3.center)\n    -- (h4.center) -- (h5.center) -- cycle;\n  % the antipodal diameter pair (h1 and h4), highlighted\n  \\node[dot, fill=acc] at (h1) {};\n  \\node[dot, fill=acc] at (h4) {};\n  \\draw[acc, very thick] (h1.center) -- (h4.center);\n  \\node[acc, font=\\footnotesize, fill=white, inner sep=1.5pt] at (3.0,2.35) {diameter};\n  % two parallel supporting calipers (perpendicular pair of dashed lines)\n  \\draw[red!75!black, thick, dashed] ($(h1)+(-1.0,-0.5)$) -- ($(h1)+(1.6,0.8)$);\n  \\draw[red!75!black, thick, dashed] ($(h4)+(-1.6,-0.8)$) -- ($(h4)+(1.0,0.5)$);\n  \\node[red!75!black, font=\\footnotesize] at (3.7,-0.35) {supporting line};\n  \\node[red!75!black, font=\\footnotesize] at (1.3,4.35) {parallel caliper};\n\\end{tikzpicture}\n$$\n\nThe same caliper sweep yields the **smallest enclosing rectangle** (its optimal\norientation always has a side flush with a hull edge), the width of the point set,\nand the **convex layers** (peel the hull, recurse on the interior). Whenever a\nproblem cares only about the outermost shape of a point cloud (collision bounds,\nfitting, nearest-feature queries), computing the hull first is the standard\nopening move.[^clrs-hull]\n\n## Takeaways\n\n- The **convex hull** is the smallest convex polygon enclosing a point set (the\n  rubber band around the nails), and reporting it in boundary order is the\n  foundational problem of planar computational geometry.\n- **Andrew's monotone chain** sorts by $(x, y)$, then sweeps a **lower** and\n  **upper** hull, **popping** any vertex where the last three points fail to turn\n  counterclockwise (cross product $\\le 0$). It is $O(n\\log n)$, dominated by the\n  sort.\n- The pop condition is the **orientation primitive** from the previous lesson:\n  keep left turns, reject right turns and (by policy) collinear points.\n- **Graham scan** achieves the same bound by sorting on **polar angle**; monotone\n  chain avoids angle computation and is more numerically stable.\n- **Degeneracies**, namely duplicates and collinear hull-edge points, are handled\n  by deduplicating and by choosing $\u003C0$ (keep collinear) versus $\\le 0$ (drop them).\n- Any hull algorithm is $\\Omega(n\\log n)$ by **reduction from sorting** (lift\n  points onto a parabola), so these algorithms are optimal.\n- The hull is a **preprocessing** step: **rotating calipers** give the diameter,\n  smallest enclosing rectangle, and width in $O(n)$ once the hull is built.\n\n[^clrs-graham]: **CLRS**, Ch. 33 — Computational Geometry (§33.3): Graham's scan sorts by polar angle around the lowest point and maintains a stack of left turns, in $O(n\\log n)$.\n[^skiena-hull]: **Skiena**, § — Convex Hull: the hull as the most basic geometric structure, with rotating calipers for farthest-pair and enclosing-shape queries.\n[^clrs-hull]: **CLRS**, Ch. 33 — Computational Geometry (§33.3): the convex hull as a preprocessing primitive reducing $n$ points to an ordered convex polygon.\n",{"text":5910,"minutes":5911,"time":5912,"words":5913},"8 min read",7.995,479700,1599,{"title":343,"description":5892},[5916,5918,5920],{"book":5789,"ref":5917},"Ch. 33 — Computational Geometry (§33.3)",{"book":5843,"ref":5919},"§ — Convex Hull",{"book":5921,"ref":5922},"Erickson","Ch. — (geometry)","available","01.algorithms\u002F11.computational-geometry\u002F02.convex-hull",[340],"dFDrnfIFSJ9ZltrAcKRHclqqidkr49jsAl1kPFgSHHU",{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":5928,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":5929,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":5930,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":5931,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":5932,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":5933,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":5934,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":5935,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":5936,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":5937,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":5938,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":5939,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":5940,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":5941,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":5942,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":5943,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":5944,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":5945,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":5946,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":5947,"\u002Falgorithms\u002Fsequences\u002Ftries":5948,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":5949,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":5950,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":5951,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":5952,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":5953,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":5954,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":5955,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":5956,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":5957,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":5958,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":5959,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":5913,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":5960,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":5961,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":5962,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":5963,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":5964,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":5965,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":5966,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":5967,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":5968,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":5969,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":5970,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":5971,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":5972,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":5973,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":5944,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":5974,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":5975,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":5976,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":5977,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":5913,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":5978,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":5979,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":5940,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":5980,"\u002Falgorithms":5981,"\u002Ftheory-of-computation":5982,"\u002Fcomputer-architecture":5982,"\u002Fphysical-computing":5982,"\u002Fdatabases":5982,"\u002Fdeep-learning":5982},1763,2107,1738,2628,1723,2048,1697,1044,1542,1565,1679,1586,1388,1465,1971,1455,1533,1483,1578,1791,1481,2704,1658,2070,1978,2080,1568,1451,1291,1543,1883,1443,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":5984,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":5985,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":5986,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":5987,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":5988,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":5989,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":5990,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":5991,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":5992,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":5993,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":5994,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":5995,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":5996,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":5997,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":5998,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":5999,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":6000,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":6001,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":6002,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":6003,"\u002Falgorithms\u002Fsequences\u002Ftries":6004,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":6005,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":6006,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":6007,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":6008,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":6009,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":6010,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":6011,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":6012,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":6013,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":6014,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":6015,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":6016,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":6017,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":6018,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":6019,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":6020,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":6021,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":6022,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":6023,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":6024,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":6025,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":6026,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":6027,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":6028,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":6029,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":6030,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":6031,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":6032,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":6033,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":6034,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":6035,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":6036,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":6037,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":6038,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":6039,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":6040,"\u002Falgorithms":6041,"\u002Ftheory-of-computation":6044,"\u002Fcomputer-architecture":6047,"\u002Fphysical-computing":6050,"\u002Fdatabases":6053,"\u002Fdeep-learning":6056},{"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":6042,"title":6043,"module":376,"summary":376},"\u002Falgorithms","Algorithms",{"path":6045,"title":6046,"module":376,"summary":376},"\u002Ftheory-of-computation","Theory of Computation",{"path":6048,"title":6049,"module":376,"summary":376},"\u002Fcomputer-architecture","Computer Architecture",{"path":6051,"title":6052,"module":376,"summary":376},"\u002Fphysical-computing","Physical Computing",{"path":6054,"title":6055,"module":376,"summary":376},"\u002Fdatabases","Databases",{"path":6057,"title":6058,"module":376,"summary":376},"\u002Fdeep-learning","Deep Learning",1781560528346]