pax_global_header00006660000000000000000000000064133400726450014516gustar00rootroot0000000000000052 comment=4c1f038f2725d6eae2e49b61d01456400694bac4 d3-hierarchy-1.1.8/000077500000000000000000000000001334007264500140075ustar00rootroot00000000000000d3-hierarchy-1.1.8/.eslintrc.json000066400000000000000000000003421334007264500166020ustar00rootroot00000000000000{ "extends": "eslint:recommended", "parserOptions": { "sourceType": "module", "ecmaVersion": 8 }, "env": { "es6": true, "node": true, "browser": true }, "rules": { "no-cond-assign": 0 } } d3-hierarchy-1.1.8/.gitignore000066400000000000000000000000771334007264500160030ustar00rootroot00000000000000*.sublime-workspace .DS_Store dist/ node_modules npm-debug.log d3-hierarchy-1.1.8/.npmignore000066400000000000000000000000421334007264500160020ustar00rootroot00000000000000*.sublime-* dist/*.zip img/ test/ d3-hierarchy-1.1.8/LICENSE000066400000000000000000000027031334007264500150160ustar00rootroot00000000000000Copyright 2010-2016 Mike Bostock All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. d3-hierarchy-1.1.8/README.md000066400000000000000000001221201334007264500152640ustar00rootroot00000000000000# d3-hierarchy Many datasets are intrinsically hierarchical. Consider [geographic entities](https://www.census.gov/geo/reference/hierarchy.html), such as census blocks, census tracts, counties and states; the command structure of businesses and governments; file systems and software packages. And even non-hierarchical data may be arranged empirically into a hierarchy, as with [*k*-means clustering](https://en.wikipedia.org/wiki/K-means_clustering) or [phylogenetic trees](https://bl.ocks.org/mbostock/c034d66572fd6bd6815a). This module implements several popular techniques for visualizing hierarchical data: **Node-link diagrams** show topology using discrete marks for nodes and links, such as a circle for each node and a line connecting each parent and child. The [“tidy” tree](#tree) is delightfully compact, while the [dendrogram](#cluster) places leaves at the same level. (These have both polar and Cartesian forms.) [Indented trees](https://bl.ocks.org/mbostock/1093025) are useful for interactive browsing. **Adjacency diagrams** show topology through the relative placement of nodes. They may also encode a quantitative dimension in the area of each node, for example to show revenue or file size. The [“icicle” diagram](#partition) uses rectangles, while the “sunburst” uses annular segments. **Enclosure diagrams** also use an area encoding, but show topology through containment. A [treemap](#treemap) recursively subdivides area into rectangles. [Circle-packing](#pack) tightly nests circles; this is not as space-efficient as a treemap, but perhaps more readily shows topology. A good hierarchical visualization facilitates rapid multiscale inference: micro-observations of individual elements and macro-observations of large groups. ## Installing If you use NPM, `npm install d3-hierarchy`. Otherwise, download the [latest release](https://github.com/d3/d3-hierarchy/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-hierarchy.v1.min.js) or as part of [D3 4.0](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported: ```html ``` [Try d3-hierarchy in your browser.](https://tonicdev.com/npm/d3-hierarchy) ## API Reference * [Hierarchy](#hierarchy) ([Stratify](#stratify)) * [Cluster](#cluster) * [Tree](#tree) * [Treemap](#treemap) ([Treemap Tiling](#treemap-tiling)) * [Partition](#partition) * [Pack](#pack) ### Hierarchy Before you can compute a hierarchical layout, you need a root node. If your data is already in a hierarchical format, such as JSON, you can pass it directly to [d3.hierarchy](#hierarchy); otherwise, you can rearrange tabular data, such as comma-separated values (CSV), into a hierarchy using [d3.stratify](#stratify). # d3.hierarchy(data[, children]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/index.js#L12 "Source") Constructs a root node from the specified hierarchical *data*. The specified *data* must be an object representing the root node. For example: ```json { "name": "Eve", "children": [ { "name": "Cain" }, { "name": "Seth", "children": [ { "name": "Enos" }, { "name": "Noam" } ] }, { "name": "Abel" }, { "name": "Awan", "children": [ { "name": "Enoch" } ] }, { "name": "Azura" } ] } ``` The specified *children* accessor function is invoked for each datum, starting with the root *data*, and must return an array of data representing the children, or null if the current datum has no children. If *children* is not specified, it defaults to: ```js function children(d) { return d.children; } ``` The returned node and each descendant has the following properties: * *node*.data - the associated data, as specified to the [constructor](#hierarchy). * *node*.depth - zero for the root node, and increasing by one for each descendant generation. * *node*.height - zero for leaf nodes, and the greatest distance from any descendant leaf for internal nodes. * *node*.parent - the parent node, or null for the root node. * *node*.children - an array of child nodes, if any; undefined for leaf nodes. * *node*.value - the summed value of the node and its [descendants](#node_descendants); optional, see [*node*.sum](#node_sum) and [*node*.count](#node_count). This method can also be used to test if a node is an `instanceof d3.hierarchy` and to extend the node prototype. # node.ancestors() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/ancestors.js "Source") Returns the array of ancestors nodes, starting with this node, then followed by each parent up to the root. # node.descendants() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/descendants.js "Source") Returns the array of descendant nodes, starting with this node, then followed by each child in topological order. # node.leaves() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/leaves.js "Source") Returns the array of leaf nodes in traversal order; leaves are nodes with no children. # node.path(target) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/path.js "Source") Returns the shortest path through the hierarchy from this *node* to the specified *target* node. The path starts at this *node*, ascends to the least common ancestor of this *node* and the *target* node, and then descends to the *target* node. This is particularly useful for [hierarchical edge bundling](https://bl.ocks.org/mbostock/7607999). # node.links() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/links.js "Source") Returns an array of links for this *node*, where each *link* is an object that defines source and target properties. The source of each link is the parent node, and the target is a child node. # node.sum(value) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/sum.js "Source") Evaluates the specified *value* function for this *node* and each descendant in [post-order traversal](#node_eachAfter), and returns this *node*. The *node*.value property of each node is set to the numeric value returned by the specified function plus the combined value of all descendants. The function is passed the node’s data, and must return a non-negative number. The *value* accessor is evaluated for *node* and every descendant, including internal nodes; if you only want leaf nodes to have internal value, then return zero for any node with children. [For example](http://bl.ocks.org/mbostock/b4c0f143db88a9eb01a315a1063c1d77), as an alternative to [*node*.count](#node_count): ```js root.sum(function(d) { return d.value ? 1 : 0; }); ``` You must call *node*.sum or [*node*.count](#node_count) before invoking a hierarchical layout that requires *node*.value, such as [d3.treemap](#treemap). Since the API supports [method chaining](https://en.wikipedia.org/wiki/Method_chaining), you can invoke *node*.sum and [*node*.sort](#node_sort) before computing the layout, and then subsequently generate an array of all [descendant nodes](#node_descendants) like so: ```js var treemap = d3.treemap() .size([width, height]) .padding(2); var nodes = treemap(root .sum(function(d) { return d.value; }) .sort(function(a, b) { return b.height - a.height || b.value - a.value; })) .descendants(); ``` This example assumes that the node data has a value field. # node.count() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/count.js "Source") Computes the number of leaves under this *node* and assigns it to *node*.value, and similarly for every descendant of *node*. If this *node* is a leaf, its count is one. Returns this *node*. See also [*node*.sum](#node_sum). # node.sort(compare) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/sort.js "Source") Sorts the children of this *node*, if any, and each of this *node*’s descendants’ children, in [pre-order traversal](#node_eachBefore) using the specified *compare* function, and returns this *node*. The specified function is passed two nodes *a* and *b* to compare. If *a* should be before *b*, the function must return a value less than zero; if *b* should be before *a*, the function must return a value greater than zero; otherwise, the relative order of *a* and *b* are not specified. See [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) for more. Unlike [*node*.sum](#node_sum), the *compare* function is passed two [nodes](#hierarchy) rather than two nodes’ data. For example, if the data has a value property, this sorts nodes by the descending aggregate value of the node and all its descendants, as is recommended for [circle-packing](#pack): ```js root .sum(function(d) { return d.value; }) .sort(function(a, b) { return b.value - a.value; }); `````` Similarly, to sort nodes by descending height (greatest distance from any descendant leaf) and then descending value, as is recommended for [treemaps](#treemap) and [icicles](#partition): ```js root .sum(function(d) { return d.value; }) .sort(function(a, b) { return b.height - a.height || b.value - a.value; }); ``` To sort nodes by descending height and then ascending id, as is recommended for [trees](#tree) and [dendrograms](#cluster): ```js root .sum(function(d) { return d.value; }) .sort(function(a, b) { return b.height - a.height || a.id.localeCompare(b.id); }); ``` You must call *node*.sort before invoking a hierarchical layout if you want the new sort order to affect the layout; see [*node*.sum](#node_sum) for an example. # node.each(function) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/each.js "Source") Invokes the specified *function* for *node* and each descendant in [breadth-first order](https://en.wikipedia.org/wiki/Breadth-first_search), such that a given *node* is only visited if all nodes of lesser depth have already been visited, as well as all preceding nodes of the same depth. The specified function is passed the current *node*. # node.eachAfter(function) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/eachAfter.js "Source") Invokes the specified *function* for *node* and each descendant in [post-order traversal](https://en.wikipedia.org/wiki/Tree_traversal#Post-order), such that a given *node* is only visited after all of its descendants have already been visited. The specified function is passed the current *node*. # node.eachBefore(function) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/eachBefore.js "Source") Invokes the specified *function* for *node* and each descendant in [pre-order traversal](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order), such that a given *node* is only visited after all of its ancestors have already been visited. The specified function is passed the current *node*. # node.copy() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/hierarchy/index.js#L39 "Source") Return a deep copy of the subtree starting at this *node*. (The returned deep copy shares the same data, however.) The returned node is the root of a new tree; the returned node’s parent is always null and its depth is always zero. #### Stratify Consider the following table of relationships: Name | Parent ------|-------- Eve | Cain | Eve Seth | Eve Enos | Seth Noam | Seth Abel | Eve Awan | Eve Enoch | Awan Azura | Eve These names are conveniently unique, so we can unambiguously represent the hierarchy as a CSV file: ``` name,parent Eve, Cain,Eve Seth,Eve Enos,Seth Noam,Seth Abel,Eve Awan,Eve Enoch,Awan Azura,Eve ``` To parse the CSV using [d3.csvParse](https://github.com/d3/d3-dsv#csvParse): ```js var table = d3.csvParse(text); ``` This returns: ```json [ {"name": "Eve", "parent": ""}, {"name": "Cain", "parent": "Eve"}, {"name": "Seth", "parent": "Eve"}, {"name": "Enos", "parent": "Seth"}, {"name": "Noam", "parent": "Seth"}, {"name": "Abel", "parent": "Eve"}, {"name": "Awan", "parent": "Eve"}, {"name": "Enoch", "parent": "Awan"}, {"name": "Azura", "parent": "Eve"} ] ``` To convert to a hierarchy: ```js var root = d3.stratify() .id(function(d) { return d.name; }) .parentId(function(d) { return d.parent; }) (table); ``` This returns: [Stratify](https://tonicdev.com/mbostock/56fed33d8630b01300f72daa) This hierarchy can now be passed to a hierarchical layout, such as [d3.tree](#_tree), for visualization. # d3.stratify() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js "Source") Constructs a new stratify operator with the default settings. # stratify(data) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js#L20 "Source") Generates a new hierarchy from the specified tabular *data*. # stratify.id([id]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js#L64 "Source") If *id* is specified, sets the id accessor to the given function and returns this stratify operator. Otherwise, returns the current id accessor, which defaults to: ```js function id(d) { return d.id; } ``` The id accessor is invoked for each element in the input data passed to the [stratify operator](#_stratify), being passed the current datum (*d*) and the current index (*i*). The returned string is then used to identify the node’s relationships in conjunction with the [parent id](#stratify_parentId). For leaf nodes, the id may be undefined; otherwise, the id must be unique. (Null and the empty string are equivalent to undefined.) # stratify.parentId([parentId]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/stratify.js#L68 "Source") If *parentId* is specified, sets the parent id accessor to the given function and returns this stratify operator. Otherwise, returns the current parent id accessor, which defaults to: ```js function parentId(d) { return d.parentId; } ``` The parent id accessor is invoked for each element in the input data passed to the [stratify operator](#_stratify), being passed the current datum (*d*) and the current index (*i*). The returned string is then used to identify the node’s relationships in conjunction with the [id](#stratify_id). For the root node, the parent id should be undefined. (Null and the empty string are equivalent to undefined.) There must be exactly one root node in the input data, and no circular relationships. ### Cluster [Dendrogram](http://bl.ocks.org/mbostock/ff91c1558bc570b08539547ccc90050b) The **cluster layout** produces [dendrograms](http://en.wikipedia.org/wiki/Dendrogram): node-link diagrams that place leaf nodes of the tree at the same depth. Dendograms are typically less compact than [tidy trees](#tree), but are useful when all the leaves should be at the same level, such as for hierarchical clustering or [phylogenetic tree diagrams](http://bl.ocks.org/mbostock/c034d66572fd6bd6815a). # d3.cluster() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/cluster.js "Source") Creates a new cluster layout with default settings. # cluster(root) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/cluster.js#L39 "Source") Lays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants: * *node*.x - the *x*-coordinate of the node * *node*.y - the *y*-coordinate of the node The coordinates *x* and *y* represent an arbitrary coordinate system; for example, you can treat *x* as an angle and *y* as a radius to produce a [radial layout](http://bl.ocks.org/mbostock/4739610f6d96aaad2fb1e78a72b385ab). You may want to call [*root*.sort](#node_sort) before passing the hierarchy to the cluster layout. # cluster.size([size]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/cluster.js#L75 "Source") If *size* is specified, sets this cluster layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this cluster layout. If *size* is not specified, returns the current layout size, which defaults to [1, 1]. A layout size of null indicates that a [node size](#cluster_nodeSize) will be used instead. The coordinates *x* and *y* represent an arbitrary coordinate system; for example, to produce a [radial layout](http://bl.ocks.org/mbostock/4739610f6d96aaad2fb1e78a72b385ab), a size of [360, *radius*] corresponds to a breadth of 360° and a depth of *radius*. # cluster.nodeSize([size]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/cluster.js#L79 "Source") If *size* is specified, sets this cluster layout’s node size to the specified two-element array of numbers [*width*, *height*] and returns this cluster layout. If *size* is not specified, returns the current node size, which defaults to null. A node size of null indicates that a [layout size](#cluster_size) will be used instead. When a node size is specified, the root node is always positioned at ⟨0, 0⟩. # cluster.separation([separation]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/cluster.js#L71 "Source") If *separation* is specified, sets the separation accessor to the specified function and returns this cluster layout. If *separation* is not specified, returns the current separation accessor, which defaults to: ```js function separation(a, b) { return a.parent == b.parent ? 1 : 2; } ``` The separation accessor is used to separate neighboring leaves. The separation function is passed two leaves *a* and *b*, and must return the desired separation. The nodes are typically siblings, though the nodes may be more distantly related if the layout decides to place such nodes adjacent. ### Tree [Tidy Tree](http://bl.ocks.org/mbostock/9d0899acb5d3b8d839d9d613a9e1fe04) The **tree** layout produces tidy node-link diagrams of trees using the [Reingold–Tilford “tidy” algorithm](http://reingold.co/tidier-drawings.pdf), improved to run in linear time by [Buchheim *et al.*](http://dirk.jivas.de/papers/buchheim02improving.pdf) Tidy trees are typically more compact than [dendograms](#cluster). # d3.tree() [<>](https://github.com/d3/d3-hierarchy/blob/master/src/tree.js "Source") Creates a new tree layout with default settings. # tree(root) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/tree.js#L106 "Source") Lays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants: * *node*.x - the *x*-coordinate of the node * *node*.y - the *y*-coordinate of the node The coordinates *x* and *y* represent an arbitrary coordinate system; for example, you can treat *x* as an angle and *y* as a radius to produce a [radial layout](http://bl.ocks.org/mbostock/2e12b0bd732e7fe4000e2d11ecab0268). You may want to call [*root*.sort](#node_sort) before passing the hierarchy to the tree layout. # tree.size([size]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/tree.js#L228 "Source") If *size* is specified, sets this tree layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this tree layout. If *size* is not specified, returns the current layout size, which defaults to [1, 1]. A layout size of null indicates that a [node size](#tree_nodeSize) will be used instead. The coordinates *x* and *y* represent an arbitrary coordinate system; for example, to produce a [radial layout](http://bl.ocks.org/mbostock/2e12b0bd732e7fe4000e2d11ecab0268), a size of [360, *radius*] corresponds to a breadth of 360° and a depth of *radius*. # tree.nodeSize([size]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/tree.js#L232 "Source") If *size* is specified, sets this tree layout’s node size to the specified two-element array of numbers [*width*, *height*] and returns this tree layout. If *size* is not specified, returns the current node size, which defaults to null. A node size of null indicates that a [layout size](#tree_size) will be used instead. When a node size is specified, the root node is always positioned at ⟨0, 0⟩. # tree.separation([separation]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/tree.js#L224 "Source") If *separation* is specified, sets the separation accessor to the specified function and returns this tree layout. If *separation* is not specified, returns the current separation accessor, which defaults to: ```js function separation(a, b) { return a.parent == b.parent ? 1 : 2; } ``` A variation that is more appropriate for radial layouts reduces the separation gap proportionally to the radius: ```js function separation(a, b) { return (a.parent == b.parent ? 1 : 2) / a.depth; } ``` The separation accessor is used to separate neighboring nodes. The separation function is passed two nodes *a* and *b*, and must return the desired separation. The nodes are typically siblings, though the nodes may be more distantly related if the layout decides to place such nodes adjacent. ### Treemap [Treemap](http://bl.ocks.org/mbostock/6bbb0a7ff7686b124d80) Introduced by [Ben Shneiderman](http://www.cs.umd.edu/hcil/treemap-history/) in 1991, a **treemap** recursively subdivides area into rectangles according to each node’s associated value. D3’s treemap implementation supports an extensible [tiling method](#treemap_tile): the default [squarified](#treemapSquarify) method seeks to generate rectangles with a [golden](https://en.wikipedia.org/wiki/Golden_ratio) aspect ratio; this offers better readability and size estimation than [slice-and-dice](#treemapSliceDice), which simply alternates between horizontal and vertical subdivision by depth. # d3.treemap() Creates a new treemap layout with default settings. # treemap(root) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L18 "Source") Lays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants: * *node*.x0 - the left edge of the rectangle * *node*.y0 - the top edge of the rectangle * *node*.x1 - the right edge of the rectangle * *node*.y1 - the bottom edge of the rectangle You must call [*root*.sum](#node_sum) before passing the hierarchy to the treemap layout. You probably also want to call [*root*.sort](#node_sort) to order the hierarchy before computing the layout. # treemap.tile([tile]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L61 "Source") If *tile* is specified, sets the [tiling method](#treemap-tiling) to the specified function and returns this treemap layout. If *tile* is not specified, returns the current tiling method, which defaults to [d3.treemapSquarify](#treemapSquarify) with the golden ratio. # treemap.size([size]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L57 "Source") If *size* is specified, sets this treemap layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this treemap layout. If *size* is not specified, returns the current size, which defaults to [1, 1]. # treemap.round([round]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L53 "Source") If *round* is specified, enables or disables rounding according to the given boolean and returns this treemap layout. If *round* is not specified, returns the current rounding state, which defaults to false. # treemap.padding([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L65 "Source") If *padding* is specified, sets the [inner](#treemap_paddingInner) and [outer](#treemap_paddingOuter) padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current inner padding function. # treemap.paddingInner([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L69 "Source") If *padding* is specified, sets the inner padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current inner padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The inner padding is used to separate a node’s adjacent children. # treemap.paddingOuter([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L73 "Source") If *padding* is specified, sets the [top](#treemap_paddingTop), [right](#treemap_paddingRight), [bottom](#treemap_paddingBottom) and [left](#treemap_paddingLeft) padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current top padding function. # treemap.paddingTop([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L77 "Source") If *padding* is specified, sets the top padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current top padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The top padding is used to separate the top edge of a node from its children. # treemap.paddingRight([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L81 "Source") If *padding* is specified, sets the right padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current right padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The right padding is used to separate the right edge of a node from its children. # treemap.paddingBottom([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L85 "Source") If *padding* is specified, sets the bottom padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current bottom padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The bottom padding is used to separate the bottom edge of a node from its children. # treemap.paddingLeft([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/index.js#L89 "Source") If *padding* is specified, sets the left padding to the specified number or function and returns this treemap layout. If *padding* is not specified, returns the current left padding function, which defaults to the constant zero. If *padding* is a function, it is invoked for each node with children, being passed the current node. The left padding is used to separate the left edge of a node from its children. #### Treemap Tiling Several built-in tiling methods are provided for use with [*treemap*.tile](#treemap_tile). # d3.treemapBinary(node, x0, y0, x1, y1) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/binary.js "Source") Recursively partitions the specified *nodes* into an approximately-balanced binary tree, choosing horizontal partitioning for wide rectangles and vertical partitioning for tall rectangles. # d3.treemapDice(node, x0, y0, x1, y1) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/dice.js "Source") Divides the rectangular area specified by *x0*, *y0*, *x1*, *y1* horizontally according the value of each of the specified *node*’s children. The children are positioned in order, starting with the left edge (*x0*) of the given rectangle. If the sum of the children’s values is less than the specified *node*’s value (*i.e.*, if the specified *node* has a non-zero internal value), the remaining empty space will be positioned on the right edge (*x1*) of the given rectangle. # d3.treemapSlice(node, x0, y0, x1, y1) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/slice.js "Source") Divides the rectangular area specified by *x0*, *y0*, *x1*, *y1* vertically according the value of each of the specified *node*’s children. The children are positioned in order, starting with the top edge (*y0*) of the given rectangle. If the sum of the children’s values is less than the specified *node*’s value (*i.e.*, if the specified *node* has a non-zero internal value), the remaining empty space will be positioned on the bottom edge (*y1*) of the given rectangle. # d3.treemapSliceDice(node, x0, y0, x1, y1) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/sliceDice.js "Source") If the specified *node* has odd depth, delegates to [treemapSlice](#treemapSlice); otherwise delegates to [treemapDice](#treemapDice). # d3.treemapSquarify(node, x0, y0, x1, y1) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/squarify.js "Source") Implements the [squarified treemap](https://www.win.tue.nl/~vanwijk/stm.pdf) algorithm by Bruls *et al.*, which seeks to produce rectangles of a given [aspect ratio](#squarify_ratio). # d3.treemapResquarify(node, x0, y0, x1, y1) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/resquarify.js "Source") Like [d3.treemapSquarify](#treemapSquarify), except preserves the topology (node adjacencies) of the previous layout computed by d3.treemapResquarify, if there is one and it used the same [target aspect ratio](#squarify_ratio). This tiling method is good for animating changes to treemaps because it only changes node sizes and not their relative positions, thus avoiding distracting shuffling and occlusion. The downside of a stable update, however, is a suboptimal layout for subsequent updates: only the first layout uses the Bruls *et al.* squarified algorithm. # squarify.ratio(ratio) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/treemap/squarify.js#L58 "Source") Specifies the desired aspect ratio of the generated rectangles. The *ratio* must be specified as a number greater than or equal to one. Note that the orientation of the generated rectangles (tall or wide) is not implied by the ratio; for example, a ratio of two will attempt to produce a mixture of rectangles whose *width*:*height* ratio is either 2:1 or 1:2. (However, you can approximately achieve this result by generating a square treemap at different dimensions, and then [stretching the treemap](http://bl.ocks.org/mbostock/5c50a377e76a1974248bd628befdec95) to the desired aspect ratio.) Furthermore, the specified *ratio* is merely a hint to the tiling algorithm; the rectangles are not guaranteed to have the specified aspect ratio. If not specified, the aspect ratio defaults to the golden ratio, φ = (1 + sqrt(5)) / 2, per [Kong *et al.*](http://vis.stanford.edu/papers/perception-treemaps) ### Partition [Partition](http://bl.ocks.org/mbostock/2e73ec84221cb9773f4c) The **partition layout** produces adjacency diagrams: a space-filling variant of a node-link tree diagram. Rather than drawing a link between parent and child in the hierarchy, nodes are drawn as solid areas (either arcs or rectangles), and their placement relative to other nodes reveals their position in the hierarchy. The size of the nodes encodes a quantitative dimension that would be difficult to show in a node-link diagram. # d3.partition() Creates a new partition layout with the default settings. # partition(root) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/partition.js#L10 "Source") Lays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants: * *node*.x0 - the left edge of the rectangle * *node*.y0 - the top edge of the rectangle * *node*.x1 - the right edge of the rectangle * *node*.y1 - the bottom edge of the rectangle You must call [*root*.sum](#node_sum) before passing the hierarchy to the partition layout. You probably also want to call [*root*.sort](#node_sort) to order the hierarchy before computing the layout. # partition.size([size]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/partition.js#L43 "Source") If *size* is specified, sets this partition layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this partition layout. If *size* is not specified, returns the current size, which defaults to [1, 1]. # partition.round([round]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/partition.js#L39 "Source") If *round* is specified, enables or disables rounding according to the given boolean and returns this partition layout. If *round* is not specified, returns the current rounding state, which defaults to false. # partition.padding([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/partition.js#L47 "Source") If *padding* is specified, sets the padding to the specified number and returns this partition layout. If *padding* is not specified, returns the current padding, which defaults to zero. The padding is used to separate a node’s adjacent children. ### Pack [Circle-Packing](http://bl.ocks.org/mbostock/ca5b03a33affa4160321) Enclosure diagrams use containment (nesting) to represent a hierarchy. The size of the leaf circles encodes a quantitative dimension of the data. The enclosing circles show the approximate cumulative size of each subtree, but due to wasted space there is some distortion; only the leaf nodes can be compared accurately. Although [circle packing](http://en.wikipedia.org/wiki/Circle_packing) does not use space as efficiently as a [treemap](#treemap), the “wasted” space more prominently reveals the hierarchical structure. # d3.pack() Creates a new pack layout with the default settings. # pack(root) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/pack/index.js#L15 "Source") Lays out the specified *root* [hierarchy](#hierarchy), assigning the following properties on *root* and its descendants: * *node*.x - the *x*-coordinate of the circle’s center * *node*.y - the *y*-coordinate of the circle’s center * *node*.r - the radius of the circle You must call [*root*.sum](#node_sum) before passing the hierarchy to the pack layout. You probably also want to call [*root*.sort](#node_sort) to order the hierarchy before computing the layout. # pack.radius([radius]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/pack/index.js#L30 "Source") If *radius* is specified, sets the pack layout’s radius accessor to the specified function and returns this pack layout. If *radius* is not specified, returns the current radius accessor, which defaults to null. If the radius accessor is null, the radius of each leaf circle is derived from the leaf *node*.value (computed by [*node*.sum](#node_sum)); the radii are then scaled proportionally to fit the [layout size](#pack_size). If the radius accessor is not null, the radius of each leaf circle is specified exactly by the function. # pack.size([size]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/pack/index.js#L34 "Source") If *size* is specified, sets this pack layout’s size to the specified two-element array of numbers [*width*, *height*] and returns this pack layout. If *size* is not specified, returns the current size, which defaults to [1, 1]. # pack.padding([padding]) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/pack/index.js#L38 "Source") If *padding* is specified, sets this pack layout’s padding accessor to the specified number or function and returns this pack layout. If *padding* is not specified, returns the current padding accessor, which defaults to the constant zero. When siblings are packed, tangent siblings will be separated by approximately the specified padding; the enclosing parent circle will also be separated from its children by approximately the specified padding. If an [explicit radius](#pack_radius) is not specified, the padding is approximate because a two-pass algorithm is needed to fit within the [layout size](#pack_size): the circles are first packed without padding; a scaling factor is computed and applied to the specified padding; and lastly the circles are re-packed with padding. # d3.packSiblings(circles) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/pack/siblings.js "Source") Packs the specified array of *circles*, each of which must have a *circle*.r property specifying the circle’s radius. Assigns the following properties to each circle: * *circle*.x - the *x*-coordinate of the circle’s center * *circle*.y - the *y*-coordinate of the circle’s center The circles are positioned according to the front-chain packing algorithm by [Wang *et al.*](https://dl.acm.org/citation.cfm?id=1124851) # d3.packEnclose(circles) [<>](https://github.com/d3/d3-hierarchy/blob/master/src/pack/enclose.js "Source") Computes the [smallest circle](https://en.wikipedia.org/wiki/Smallest-circle_problem) that encloses the specified array of *circles*, each of which must have a *circle*.r property specifying the circle’s radius, and *circle*.x and *circle*.y properties specifying the circle’s center. The enclosing circle is computed using the [Matoušek-Sharir-Welzl algorithm](http://www.inf.ethz.ch/personal/emo/PublFiles/SubexLinProg_ALG16_96.pdf). (See also [Apollonius’ Problem](https://bl.ocks.org/mbostock/751fdd637f4bc2e3f08b).) d3-hierarchy-1.1.8/d3-hierarchy.sublime-project000066400000000000000000000005241334007264500213200ustar00rootroot00000000000000{ "folders": [ { "path": ".", "file_exclude_patterns": ["*.sublime-workspace"], "folder_exclude_patterns": ["dist"] } ], "build_systems": [ { "name": "yarn test", "cmd": ["yarn", "test"], "file_regex": "\\((...*?):([0-9]*):([0-9]*)\\)", "working_dir": "$project_path" } ] } d3-hierarchy-1.1.8/img/000077500000000000000000000000001334007264500145635ustar00rootroot00000000000000d3-hierarchy-1.1.8/img/cluster.png000066400000000000000000001233011334007264500167520ustar00rootroot00000000000000PNG  IHDRx6, iCCPICC ProfileHT̤Z #k(ҫ@%@P+ ,E\"kAD(v .l ;wwo{\a lQ'#6. @zT3׿mt4S<7)r"7)4sl.]-(+Q.b4i>&2 (lw4: ʖ._-ʮ6:22N!o55l,a:{[9tРçC׬6miCfϝiSQ3a.;piQ3>fEΰhi }~~KIY>3epnJd pVZD/i^$,cFlo\)=J&yH(xa0=tt?i>+'Bl6f8:['T>pO+TBd3PA @bh*R~NCPtF7g)"sa&‘"g¹p .+p3|<ma"^H$#"d R#H҆t!7 ahDa8LVL)ӌ b0߰T:eac<2l>[m^`q8gspF\;7*xS >gGaGE& B10B N"XEl# 'H$C )JZO*!5.ޒd#9'#ɟ( e!ELFSQRT;5MF^>~XȰd2kedee^ee=d˞!R(g %ǖ[#W&wZܸD>C~  > \< hME6ҪhhÊ8ECEbb11%%[hJeJg$tn@g'h4g˜9s>()+')(7*(VaTiQyQ5Q S]z@K5E5g5Z 갺zJ~B}5^j55S5wkբijvkzPbx0%NƘXBG{BP'JgN#].S7Ywn^*zD}~^.1 Z * s Q܌2*n㌙i{M`;2)tiL`Vivǜbac^o>hA`bj;vfignYeJ*jUkku-ZV׶Il6u}w7؏:9$8;a*2C[Wk8~rwv:sg %ͫ7vp2\\JܴnnOuݹ#G=^yZz<.^vrr&+i%f%ge*UW X]Zcڼծ'O[ Emؖ.oeEw69o:g͖}[p Z~zGK~ܖg;p;;ntY[$_[4+xWn,sض^^^IIPI>};})M)(,k,W/Ra?w 5|n_EsAeaO~bTWZ]XFP# s;~d{=\/=h1c ~}"DIɆSʛhMP汖Ik\kmmMXRsFLYϑ坛<{~]Pǒc/ xe<_qrטZ_onצ7Z{{wp[[ݎ};ܻ{}?ău =*~7%ރO"< =/yOOGFY?;3;|/ѫS=;6Zzַ*okپ>ć*k?1?u}<2 KWm=̘EVANNM 8;@MOBK;QB=4Q)K`iCY6ӵ(~| ɉ_fО9ŧCPc[s W"LBOYiTXtXML:com.adobe.xmp 888 310 X!/IDATxVuOqCt+?Dyn@E$@(0 `lc-]ۣ3v<>cıg{l]{/>%ZrtY߂qt>ZkFc[o3\7ހ%_n_bo>g)}&$D"#8.iz>[n%I/enb^t >@j#LH$D"ܼys(L_ļ:88p|zpjD"4I֭[l@~( ij &}&$D"hn.]4$H9|'Q"믿|/"M$H$@ssu @w&߬2L %D_FĤZD"47]C*{0 h]vXNևD"H$-Lp2(_j9>!&D"H[1C0 ebwD H$iŪ}&$f5A?%fGɋi*P;,2kB%5V$4@|R#K 2U݇D"$qDI`as`yRRV1$-M0(cSdlYi|/ع$whnpe?`{%Is2f:88p$ir$Xמ J<yۈ;X͟"fi)AQR-hOWڑH$ҚAJdJ R%NjE],'T*~X@7jb()*L~>n%;3) ;Vd #,~0u(D:wg9y{⿺^Dy:b䧙ۜ:#ވo%{ga>܆%eYy v?2!q0|M\~˽ kZf}Ӳx bSXX[~B XrשD"mewSb֛caO?~i[c027;c v8Up{ xP7G/QK)l"zw&S(J<.s,{MiQV-ٹ=XZ[qxK  Tj'!@Hgf '2e!&DY⍉Z._hgu-_hi%7 [ĝt Ь%yPnhVfUơ#Fr[l*jZ''&+  XXh?Jvp&fynd|tO"-2?! +F(1=:͛”={,l_fv4<CkDP;| QClfM&h5<,+/G+zhNX3C^ԛ+9v ƠFHɭCa%W;5̬¤!Oe&8/n!V!iz:4Z~M36F R. CڪgmjMص պ Ϲ/:vU[,'--'A#iz^Ŕ4f]TÒ&?9jf$A3 GM퇖{ m'*4wG3kkDTC"-E v^J 6Zࡔ[RD{ff-Z}w^!tFfV$bRÝT ^vتg{lBG#;z.^9L9!"h4u‰6 mD>Dq#"Nd[i|4+%;&<š%{^ rՒAaf+4W!5@H˟'2xN=~HŻ"Y[BG4'k ŕ7+Z|MS3<ȊM'>"5e%tR O?ϧ衇Xϟŋ= /<6hUU h~WΪe-xO eCh͡e<.\'H͕ Όڀ ը ;B H|ը;=465 ]; +޺{5;{G}K_w|ԩSߜԷN>}j,x)~(޵$_>s eDsH~n'tE$;ThLSgLYUw1'?O}S0}3S/*Icw}QI|gK-a!x燞>g"+Cȼ<FhEx +r@se<$׳ ډ/4BbfDr-c{?^HQ1+ltR[p:g~9evLL7y֝4ث( 4TΛ,^k naxe;g?Br_Ƞ2S0**~pş" V^΋|uSE)9N ; Na2?hZ!{ Ǝ=ON9Iz?Ns{_fwwE3hݴ цDV-Qz +:Ph[/¿ rğOFxN ڗ^z y֧jo{<6 իW3BQ ߋq5ɖ<9c[V*ufi]35ӱy^~$Z)-|ç(Sv\2 z텙7=, L}@s|oi7t܍e\[\Ob WPPQDs4-ܗʳ+(WN"-"V[84\˜Ơsnkio3kmhOku9lyuJzTλ#>;6猎3_oբRIOR^zA";)thr:aЮˢ H3c2'\BpϞ;g8 4E5GS1mK;[xW!^ 5d &SR#O削mrn:gSP@sw~_LDfzU$@sD.^O;|eig#8v#Ӻ""5XJ*f%四@4ӡ}nZ$݋H 4/<։,R)~_CDyȞy8rX֪^:|z( vXj~BVi73k0.}7OJtVYF -%HhҠHKߡ}n8s `L 2INy/_PvnJxi~G̣L%J?[rY^FGsbI+6p@&8;94tt?FjFBSo?pr̔I3,XQ]38@q!hMx z$v~Bc TuOs4{$$ߡn.\(®TZN"ɳ[,Liy=SHy[t@OhQ&zbN'ocԼdh1fIf|{EfNO{$$uג4M=v-  5KN$z$;7~t 7Q^+%)z8GV拙Dz@4ᭀt]7LZ#A,#&i\8S3kµP$ &%'6Cy?V*OB<\M|yvt^5utOnkeǡ}IݘFpM%[nI;̽=ʒH[NܰKӬpaMYRѧJ9\HL$#i4v\1)KN"m,ab+ah!``ځ7ng!X=h"&D"hέp25@[=5d20"pI'D"h' XNnyf{zj[oF$ &]xj}H$@sA@\)VODD ZN/bH$Bi̅mL.D,!D֭[*bҤdD"\V=/cx4d[rNb'H$pUO8sook-IrUR99D"hL=~ 55夓TNN"HGx;^pŋ M|)]N:9R9~ BLiĪ<3T^nсyA+4ʢ}@stҥi(p Mρ夝׭[_NI]4=0 =[ם [M:5K4CӂlH{![F؋,47" s<:ytu{!1q~H(0@3p$4W [9jZEhczG-p K<|˅<2.&V}WFgEdIFe&,_.+|azqЈ2 "ak{؉V 葿y Tm9cfQ%8h^\G`L'?2$VOfK4Mxz,2@UYrjI"m|+- Z!\fnr@L;UIRGw3K{ވVS8#-fщ xL\VjWY`AAFuY{uy!p{T w19a"ЬDd+s=7vZA4)uzp=/I;, X^~Q#'3~caO?=4OFlscI6<oEnNK61! yW6xy1N:aegI8^\|%a)6B9Q˰=+ nt5̫eGyh>.ۢ6(@euG:_kh3̆.T`јppp9u]:8hrX8w Q{%Y8U.+硡SW-'>!x0kf+ '?dVvF2~%=1Fs诮<^;jZ8svLoGic$ \S|X*$ WӔ St-*%];mۼ[ܹUU%.&E:{G}k_;;֏s3Bw߃>E'c\\^+1fE9cD3@?ɛyŒOIreˊ0H:{`FY^I0gURBO gо,.+vbIb29 9K~™.ˬby.IzP4];|-ؤ gǛv^xZt^9wS")v)%̭df'wk\(m+&RC ejİ]?"]%*",ǵŏ*ѤZ][ԭ]Wǹs1BJ27-QRz~!t8_s "qDz*|9 4G*'n?5G۱cCW62 pE?)jX[ }N\M/+|/A9vls|)9zp&)4cX9VXI}vNy^ 4qTfq@ ޿3b>n>9߼ki ngo}1FICeUCYR0ŋ+ N^1]3*LV -xT&9[Uhq kz;~[Bar˲fMy"UE6)<>pc ٳgCis<0R?peFmC+HB7,0,Rܫb͋v>^oK(]MOF(;@}^ >w7:_D5͊  \w gІ$ͥY&-IʾÝXo6˒p(ppp@FU!Jt=TX4Ed bI&L\8s:b 5ۘG+Xb `G}^g0琹 Lh _ko1P.>)&{N,Ůy ^27jnZgeN߯lReMz˕pLBO.37'iNfˏV&ի%j:2 _ S5!ފJNTQڜYN{#iFC\.ZՔakM5%kw ڙQ'431Ȍp~QjZ"eV}a;(Dāfg8sކph(_թ>=]8fUeE_4[PHUIIV?"?;U! Mt<$M37Ĥ9 @pDýĩKi|'8'A8IG~W z.q$Nd^`̐)ډw5پ> <]¼g'8Yp0leRc[0_~]No||IKp~HlD=}vZ]W}`,GT8 .2m2ld"8a']R40u͹L> 9- hNVT|M&E+,^`)Ցpzg-(< Gî1\hBыx@lPͭU'P"} gxIs@u(^C1*\?!yCJ?cAut!lCV-گsΩs2uR^9Qv5Qhiɡtac|A`D_oiL m+8$ \SF‡V7m j;pМ-`aIظ$SfgыDф}&YpuHVڼE]Ѯ}'4ѐqM \pL8\AKI%XI#$mhYخ'D|f{ѶGlV}{læ-(V':{K goEmC@)wI:1D"7I$'>F(4l_|g0oϹýd'8I80ƙD;еi K5_!mFpӴ WI2 ? ?8ɤy8/LqS&]~:BT0Dvbb UxB3ۆ,luyiT<}EڞǧJjVZ1؊k9xtVhorp`DC;2mJQ@sbq)S5/qr!mm  H;Xr$o]?۽.W8\XuXmBVUԆf΄]8)Ahrv֌[E=n aW<" ;57˖'OJ/v[p+ Q̞D: *h] gq&*\v2o޼y%Hj!rD"֯Iv>G3|9a.]#YUn6lxMl$3a]=Ty1K~E2&'Ziy8Gs*"{q#;>cbL 2픩'LYri0gB" Vey$pfp&)vyb(HC" `R'H$aـ!L1hUBPۺ(%%9H ߪ)ׯӜfDBu3_L1)KN"Dp*^YD$@ssp8 B%DL0)G"}7$N"NDqj3pKٌg(DZ3q1Nܼy樐H$T'S g7sv]!BLika0'D"<Ky3av#uDLd1Ic͛7{$.]U8=)I"4\='3Y 3*!6Pn݂ ^C vH$#7;*!F .5'͋hDI"m`Bw_{[wL]y1H VGeUgbI;crl]֙hvǢ58#enfDݽpwm;<{W~懷{O?w pL¤"2.mbq"M6,M,ęrl?S3۹8 aklijuIe[oi#9~fzS62\[9DZ\,./ږF9\_\k<$_ܺO塮aa(hU&byMb%Ŏz_ KvH30tt':8u v\9,Z!~>ރsJY%ُ)6ݬXn`#^ i+gyN؆fQ%r--5+YZϻWxGS d .ϥbbuzlp&-hjV"h&!XXgi>b}:cAZ_<\@sI׈ 3! i1ɷD:д$h6hvRA4WoJtMs02WS;}[ h^aw޻}4+_~F*hgH70*hELmǶtGbO3JMf^G8Nj\1FScYoRYbZAS%e؆/aCh.thnGpyթ9$KM 4Df|7T!MKϻ,3j yNhc.C6^M3 V1ދ}U/ p{O8WA}gϛ)o3܌OׂSe0L q}LnXK=ܸ8sB?$;jτIlqzQ /;\@s0 i&sG:1-37Ę]ZdL"m 2 8s{67NNGmjI6PD"H$͛p& `M EHef$;P3ID"H˪aɎ̞h".pD UfLC"H$@sY3~ =ӏ/grF&2I$D"h@ WvyCG~\fFGȤ$D"4W6VbwOH12s#D"H$*v5%o J5˺@m$H$iX١dy^wAjB=#rh3KXC]I$DL4/!ߏɊ0Hvx#12v3_gl)IF$D"ļ N4bnYş'vV1Mߋ?c×R,q͆QZڱ}m@TC"H$^`/y^ n,4=׫}PtBC2V%fl15- Yl5!Y9btmkɄ?ZJH$(-ƽ>Eׯ_4XΝ;fGPef8,h"ϒ(tM@|T%^UtHf&@3uᙛDI; ?hZ4- Ty)-81]Nu?$DW ,׾aZl%T@jݸq˗/QScIŎg|CyAq4fը߃g4v:#w=/ ctD"DHFLt^xbmmmEBʄosjN #\#Ir$ҌO~ 4 .*;¯^AU3yqR&4>HChN9{#X`coiސ:MrJ\Zo O;@sb2lތh R 4hLrdX;tEұdi;F<mF-&>ϡ%gUi|7pNƆ^z^qi gkfWD"敜j)x_}Dd)#J<MM༐0-f/ӂR&K|lνu%h!hb˟F;pړΧ^J=M30ɲ࠙< :M'UὸAWJ=~V NI"K0*穐Fγl)s[{zsqېv>[4?R&dzs،.Af;O{O|.iʂdؾA/N3iG@\>D$i p:-JxMcJi9 SjNUΖEg|t)lx@SSc)ZJD"\J;gp[nCTQH'33]}( [̷pVX=Fց14-9d8s&$DZ`$.KQu1bLg7"=m$|$DEPB1G3UEKv=[7xG3]Y]`ŔC{#&,fl|8KwUPJI"L%ոp)m?BHS'Ac=UO?t7hNVpe1w{t3,<4.EfG܊ v?gYBL];) 44s(pjp^&Q&DZ X# S($F9VuRΆ(HgӷFo._hvL]yL˴ܤɊcZ.%?wt6F\z@4;J{h%_ѵ2t]h&fDy#JvNTtm٠-\g8sFim̕7$H;I$ief/ۭ#<˕4`7*O7N6i|zo1#N|/ u3G۬͜aX﹕Wr*4Ӷt +tVoL< uO8isASٰTol&@I"f x+ޱG1ީu{Ùm`W?i|Aās袰~꣖YtdQ?\m9tUK3eJᦈ2I$ҴQI66\HLdb#LbuN;RFQ95pd4DqTˀu0_>&@hDI"|Nas4`GG+[ZcUeʎ="Md"Mj@M596-΄hZtLD8q4kLmAy13Pf.E,͌1&Gz\2_7lvB&D(7˄3W4aE"N_0.DAǁpcȹm$qQq?\lmz'TͫW@s`gM@s8asOҔ*gnhbpi>˄3W4'$N慼/\5i>, 0Z@jJj/v3[ gY6FAsXgz $ŞmhUhnqq[x>^U8s%Is<0Ld/5f/4wid!G$; tf4ۓq޼v+CiW;uK dhnϫDӌqMPny5~hnhNF\ }1R\IҜ(D:| 9,0Y3w!oO}E=YЍlNĀ6d;R] tDZ z19+k*Ui1?`EG $T ]!6~(sȵ|1(D :Riޏ"Kz=YTIB (T:6HQ-˱ͅOM-%ug3c Y5n/ThAS-t5cpIs$i) w`ZRFi*a6|EӚ#W!K -QizO(Ę^&=$4Wp+ڝF˄3OHqH;4Wǐ.xpBd<˙d6ɸ겎#e,ƁM(T3TWDUY ۓ|[{QV%;74ҟNWÙ'ᚁ]鮚D5,˶%.3H*}idt67)s<(#U,5 ႞YQ3WZ57x=:_''hNW#\`Is5\WiwI"6AɗSJQ.G qX Ѱ 1"ؙ!vx8#BH; 8 ~*P@, cyd/:vO2lG31-#l~R NBoxY{"53pAS-t5pC!fNSIijrRzF)ԙouTCmÈO91cO".&mZS}4*wKO xŖfeV]2֔/+V$4֊|˚} s"&@{̈DFq$_W0FHW_}( k$:Ldʆ7f{8ȖaH^3Ӓ=Y d.!Yd3{cV]5`Z>M:oE׷Jh^|YM8U?" L+ObҌh&b^םr/o^G'+M9̕wu8S4ow(23".eG}|׿5d,]V~ JNVdkof vtAaA\Ѹ$dE"g.hv t"A,G,x 7Cha9fдIkM#ao-(bcQE&+`||衇~?>{~|8wܣ>E2a_0=\}lhʙvɆ$D#g*LذF4HCGA]~}:VXobIMij:o-FFK2sʉkLpEd[a vف^xꩧ"+|}?#en"he>ȚDa gwI&SөHA-/8$L؎14K3 I;j xw…vs&)Z dfDPcnܦiU"wcٞ#^ F9|t3!\$>سmB 7O|ߍW_}P~L 4} {&oebAkb,/` @q?O>d?JfYy!9P79# 6lI3 I; ըsm.VIfF}^gD5#7j8b[Vp,qt7厚ɇTp<]ӆ*Q_*lNկ~D( {饗& #?~o>|s+_ ,;=%@w߃>zG~!35A aυ%cHDit!xř]*"-VÚ%i|FwnE>%m۟B/ggПZ3??˿KXp/|oo/e7{=XX@ EQI%-)f*&5&$QPߏU5; 3_7 m0oL5<ʺ[w ۵}?Oy$R… ™XX@ȟH)1; G+ٓq cN>|lgnn1++@YAx>1&@󊩙ď<#O>?jTu]4ho!LO0(P&'?Iq2/b~_t˿VgΜI+![#]"]sYM-#~UͫWv޵O@\N4qү2s\RO:k6؛wyX!+ХmM)L@8o޼̌HڀD-4VkGI޽K0a:MGy wW8kNHT)Mkinj:n~M|;~G[ַ:g?}s_ԧ>e }ӟЗe=}o2g"k;wN g>)BL^zs9VIkgv2lBCwèUOЃ&hN h.AUJU!,qS ʵZ<̹aԼG"7iiEC8sZ;^Dw?[i3Lڧm4nJJ 4 uoH eih{u=g /+aw^DSN&Ё2@[`MyK}~a vD!p´0 H7|SMxX۰ev\G"&23yۉ}4}xnhY6*y'*Zh2NW#I@jyW^ARQΞ=%fG}ж]uiSlkEQ꫍n7aT6[;88P '5N˞2ð{D\F6=p ye޼W|>b zD~ax|l;$&1Q~0ZV"g8S҉]w°'r'#C ,Sb,(XS"&<4o~KWl 1Wbsk&| x4N`i4lo s־sgizs@+oyÙ wXDK@Ѐ 9nLj#Jx$}t+|p2JPQ#}'ňf̧[%/ϟ?ߎkq{;$ImV@xOw`9 9tHGDnPȭMjj̹onTt2RF(ul0%]Ec+sI .'o[̛_r vrF&PlQεEa>`wZPeނF0HHS`* ;52{Yӟ48b.{HeCF%DpuIH3Q'|e!5~׮]{$Jq㡢g3zT'LmsIv'i=3F, 04u' ʅIa-wӨ64L)u;k1Lt zB0HIז~@KOx'Nr !J ڙG8Un${򩕐 ih;E۶K˄hTD{܀Mo牒 +奘,q;8Y^\ M? 6j7 "9h^p'eb 0CE}&Wx-NJvi*) `U 4)=9+@8jBeanpDܙKkzƟL{#藖ǚdEG^ݏ}0!R7bq#7)OyO A#M,GF'yÙ8Sh$k4X)Cw;Q? d>q=88X= R`#ɎQL}iHs=0^i$1o{$76ﯳ#SD, V  !8,&$Mb&359$Y(/ލa!UO=S]cR]rW}}?uhKh;S-BsW$gt&W4HH.@Ph͞P/"Eht .0e=hƞ9طǯ-9LELlãװ?ZASU1U]L/grar^g",*͕z͒WXr"h qS]bgx~R"UJuU^_S#hTIp49楜^-\ ;JTPt le_dɘ!T fIW\34sKPPi_%cTu+;SV> uGg;),RT=k pJu3#4%P9b"M&W1CF9a˙-kl4q&fzMB||$WlD^; Ijha* <ByTvOt) ^8 lf4XWm{hyg4s7ʞ8ZBsyUgYd mnvDڞnf`W4v9hfB^w"\-`^ Zs^xG۳As@4m/LOҎa%.C)}dx`teX\4PFz9sfv v5s5A G\pBd:ꢆ qCjBk%I3y@sC@YAt-?N|ӎfϰ~?$ :N#m P+̀yggD1pw%)’͕3jWS8jBPclnbfSi GrʈޱexPh& ]΅IU(gWj oXEDhEA+l_)-s8)k9jb͙@ (Dx2H,m:eSdQa; ƀ F/+9@-gDjʇ~ \A箂j*RKoqCMX2PҴ]\ 4y Ug.+BՖ\;f VS>p)u?95\K} `n{)VBv⥓,}fm?ĕA. 9W|q6&4qkOY!2J޸/PN4:'d\uxfo]}K΃l Aql/^鎩J0d&JsM5iLHsBߩHiΝ<8 UtLTI+C6l/;GUՖ6}3Rn 'IYwÔvm19S6/u6?\lHBf9G$m Lk/>A+1i/;G6@]ekYwN퍄G$AoZ;ń *D~ &l ?B PYtzz0 m'kuJݡ/YW|43OdَcwIFh0{đY)m4_25c}]p NŲ{DbA`M3W7oY籭~8 [o53ݻwoG1QAɚ`~!4yGw5Yg)wiN|bBX Z4SF͋/D8ah3B &X hYd]#-gx''';'~.kB-̔GGG][:i-qnT `MAZf3˙-c͹FLwL@ք Z1h5-\xb%t&7 w1!jfZnA{A&gukvgq}0zIč91^U,8A'ahx-6 < 6MBWgw> "u^cv#XǏĦoy4ϼ<|\؞:V/١ {ァ\󲮜2|o&n+H&O|5їm/m5ͤgF7N<qit$ٴmǠ)^kCOz0IHǾa2v>Џ?Z~]bۀS?f=Ą.eq{fhqSɅLr&]^]\9/B%5[BH/w}^rE4]4MřMb KqQ\ð7}L#9}mOҡz޲ܐ>Z}0U=Z*l/@ڣQ=zdAėj?l@0 vT&BFn|1{vg᚜MGx &sEoѦ<^S^&ݺuKL63ĚoUTRAк@Tsm>C?Ȓ;3L r옞ݳ֛'=FP=`vv5>73ѽy4u" @1U1%$dʝQc/ 5Yy5݂{^(@°}=;w('W%]1뾥kK\T{A";whDSn]Yo>) _05/S|Tð}]ɮFɈ?W,Ě3ޝLJ*d Tt<.͋:,,.-/]S/_.7MLcbʧэ0i<LLםT3]aZ@2IEl^Io3W>_WvAtRX#mx;==Uq#l3\en޼hg91KjwԓIϖFߨcE<3>aZ@[!畈f6k=x+2!*(:ƃ5nyDjڵkDc+v=/kf2PvtQȜ3M_fs& ۗMwyGg; ZG"C}ǒMh|y||;"OOO:?4IЬfE-LLlUỴNZi`O44aؾht(+g:Ǧ w+8A[+@ {䄗d4 \IlļlNoiʠsq`Ld{rfb4G:GJ)lkӆwt+M^srfjA.Hҽ.Yt oZ/}mzd%M2J[LVjnܻOM^3tMĺrfj+#@C_lB-?r1{=ceN=n.O6hΫن!C?ڈψ2բƺrR%wli~``A.>ejϏ/×,i?j)'c%)8܇JM%IK%p/fi2~.}\ʖJ3#D ?$dԤLfK%~g1zR&W\LrfM6͕M&zL%m0jpD5EN8(%{oUkXxNo5^}4o߾=4QMOV̠[k9GR0Ah͛|@"ף:r;&?!v|,aг齊}{NvK; \YΜ9ɦ9,\!oy;/}yswn|'''z[|pxY A畲䬓 :o i`eHCu[2'ɪ@s\AgX^%YhNFGcf晆8w-?fq=M_uTSz077`]IgtSr^tc9|޿,Q*F5dyc}GJVXȖqt*W(y]2sֹϹ@Y7 <&\80Mr']|#az4"NiniFȯ+YDU1EZE3/n q.g(1ËuO#EC]˾":̋ .ER9\rsUk.g R#[ai,X1g u<g3M[LIGpY!W R?z$v&I ?v$xW1&k::&/r s$a\N oA6`LCt0҅(y rFA$82>^GD2PZjFyE^b\xJ*fh,g͆ Vry. J ͝P9rTU3Z஧b$yd)UmQY1ɞ] |Wʙ=q嬹>SX Aznns'ҥH( XY#Dl h^rE/g>ό,c}xA]}wɗHMUT3- X~hW^IIAE, z90CGs Qx||g.AmpmKէ.ey8e M=I'SxFTx' ]dOg }d$tNGL}^dzp zTnLPCO9K0ɕ‘+Eo\ҩ

NgY4xerʆhZ#.A\k7^zzzɚT} Tn*^aY09W-J<^btE4+ 45{K9}޲p0>h-'E=ӌʀ}IXٜh +'ϬVrtُTA\H-P Rɋ&%3Xa%WLȕe/OKƍ:hVT4{d q;,4K9C>*s0AСn6#+70 ZaIg( Ά bKrݻwٍg7uV7FZ K*r}،Ug>WOeEsGK/ĔI*Di`>JM^)); 줓a:RPmρW4 }1k=_@-#Պ2 L f@/[$sRWKo _ OPA܅g)KBϾjj9 ጟ<;hd0(i>$fccqn) }&B el6\GZAkE NctG^vaW^IdaeKB*:Tq|P Jz+g}Bm^p6<2!$\ eTWOՖ9a:ܫۥZRo~K.=/Nr7oތ{mqih1TkQ l9%q^&I#9y?߽Q~~v=v7V5 D ܸ A7-d?w?g^ǞUv:AfJ.:2 ^z{'zꩧ~ŋ %=|~W_}2ݬZ5 345 Kh~ő\>M4  E~ !s_~@GCZ֐tCMt:וPeaמGӖnzt]W,F$9؃ڏҏΣ֏ut6ma((עxuI_ E;`Dc?ė_~gyR򗿤y䑟'pBĚ>,nI?o&"/_{5@o9OvtS)zPeV'c2KJrdža^>::o7Qs$Wel LՁflVq#4\GǾil1h$40Ėr0B@aEt[siΠyİO?iӃ.e7{YO He~_=X5Uwމ.]tQ'v$}Hу|;>xu]C=~3ڞ))@R9LS̚ywzQбL|t:AuxTﲮ XΧa:{lʤMQ+Y.<1N4{UPZOe0K h*lśg{y';e 6Y4祙 EtbQ&AJ@R=^F-lnnIkjOՖ{'ߙ-ýw&Vj'GYz\ϵ Kfe>5,Z3ݗxc>Og?|h/Dg}s[;+՗~|_7ߥ42_>ÏNq ^Dܹ'h+EĢh޾} v/F-e)13qY/!ɒ|F h;T7LN3:|K4٧1$Fbi z6' <;u&䝞; M.ĢL4t(Mp:S O~St:ĦĚ_/}+_׾v2>(E'xɒy%1 hW43Ht$B$Ake4GCR4^Yy*[GIVQyau}:]ˏh桽󳪥X A6AAr:hš: Kɪ/3,cufOcdNWJW:eҗ7޽ND"ׯK/>_H8>[76Q78o?G?K)r({||\:F9>AMɞLgZ2hS.wAShIUӳ)qJL*vtwW}tMnΕV48իX AдM.}hYch' )'!wӾ&5uOl8XS;ܒg PY^믿Ԫ_q2Cȫ- %y䑟== B}G_=SO=_Y0Vŋ?<٦I1'''{肾M$ {v:3.k4v(O/1n>ZMYݗ#;;=wFㅕS x0rthN\;> OLhr٪fA@?2!ΑFEFNmjcv t #}Mr}… \Τ'_5uN_|%x Bɣ#޿3  0υ!.Sd.Z<氀^oU;uMst.42!;]ybK=ȇ(4Я_~5B8oݺE72# *-DrPRHѝ?&ÔQ4@ejDt`Q&A |^y^{ʕ+:r1ݻhXN bLI(.KTLrۧd}Y{eT<L8/\&Am;yI믿NHq!М9So֗1QU(HY&Iò3NKWfb{?ccU]s]qDSsGS+^! F4XfNACO(F:LŠs/"ڗ u1T]ax&&YAs3RFIvIc0D/RDsS(ҭ_;7l:Ѱͥ=4D)Ά4w# :(댆/ >2ֱ#N-C'ͤF}gaI%<.\`ʤe-hx%{ǖf> !^ 5/ ZT4k_+{>Dy>վU6j҈k;a6^stzw<VA+&EX%Hݮ7syV19y[2a({ʟ(w-eM4v9A-/H}l0BlϹ8aH dJcG/]S/_.7M+8_G'@tLc 7 _'1 KhH_}ڬh _tmf0#: C9n8ab](aWv4ؤg ΘSiVfSr Z"Nn7Y9hMY ̎ |6եgэ7trL iO-{1OlRxY>Ƒ:pM͒hN\DCe@|rAft7&NU̳4GV3aIENDB`d3-hierarchy-1.1.8/img/pack.png000066400000000000000000002553161334007264500162230ustar00rootroot00000000000000PNG  IHDRp6 iCCPICC ProfileHT̤Z #k(ҫ@%@P+ ,E\"kAD(v .l ;wwo{\a lQ'#6. @zT3׿mt4S<7)r"7)4sl.]-(+Q.b4i>&2 (lw4: ʖ._-ʮ6:22N!o55l,a:{[9tРçC׬6miCfϝiSQ3a.;piQ3>fEΰhi }~~KIY>3epnJd pVZD/i^$,cFlo\)=J&yH(xa0=tt?i>+'Bl6f8:['T>pO+TBd3PA @bh*R~NCPtF7g)"sa&‘"g¹p .+p3|<ma"^H$#"d R#H҆t!7 ahDa8LVL)ӌ b0߰T:eac<2l>[m^`q8gspF\;7*xS >gGaGE& B10B N"XEl# 'H$C )JZO*!5.ޒd#9'#ɟ( e!ELFSQRT;5MF^>~XȰd2kedee^ee=d˞!R(g %ǖ[#W&wZܸD>C~  > \< hME6ҪhhÊ8ECEbb11%%[hJeJg$tn@g'h4g˜9s>()+')(7*(VaTiQyQ5Q S]z@K5E5g5Z 갺zJ~B}5^j55S5wkբijvkzPbx0%NƘXBG{BP'JgN#].S7Ywn^*zD}~^.1 Z * s Q܌2*n㌙i{M`;2)tiL`Vivǜbac^o>hA`bj;vfignYeJ*jUkku-ZV׶Il6u}w7؏:9$8;a*2C[Wk8~rwv:sg %ͫ7vp2\\JܴnnOuݹ#G=^yZz<.^vrr&+i%f%ge*UW X]Zcڼծ'O[ Emؖ.oeEw69o:g͖}[p Z~zGK~ܖg;p;;ntY[$_[4+xWn,sض^^^IIPI>};})M)(,k,W/Ra?w 5|n_EsAeaO~bTWZ]XFP# s;~d{=\/=h1c ~}"DIɆSʛhMP汖Ik\kmmMXRsFLYϑ坛<{~]Pǒc/ xe<_qrטZ_onצ7Z{{wp[[ݎ};ܻ{}?ău =*~7%ރO"< =/yOOGFY?;3;|/ѫS=;6Zzַ*okپ>ć*k?1?u}<2 KWm=̘EVANNM 8;@MOBK;QB=4Q)K`iCY6ӵ(~| ɉ_fО9ŧCPc[s W"LBOYiTXtXML:com.adobe.xmp 880 310 1z|N3Im0s?9po߇,^3&щ<É|R൘h5PA^5)q 7kxRX{cxB Z{8MIY]Dwb1B;?ru_=v .Ǽxf]W7J9~Qf@)5n\=RT}³*p o/mM@j6T@o q fVwYTXv$(ٓO.X \5g+gR+VoPն%J?k (M G^V~}W g FOűgZkOZ,# Wxɵ~7.6.PpuAʵsv: OJȎBܸeW1>7S|ϓؤ_ºэq鏂MNC֙aܟ8l>|l}+1knI&3%f|[&p^ĵޞwߞ RNa+y|?܍\薼^߶|#4$Ԩ:_ $Ŋcj+ f;`dԇ\YU3ﭳ;Q~y@CŸW1ژ}zL62HuDmuMJm܏Iob/QJ3I}=0j[ߵ& )et/:^M[L(Hf#۱+Yn_I,liz-^>6s&PXr@`kj+leb(+n)j׾Kk]׭~GOU My (ЉHSkIαDy2$E%IRZuE$%Q]{"8 5'Ӄ5bgPBD|NB|~z#R2վS[귗^r9[4c'˜ְb%"bG_˜RsH[CK|jw]ڹ@241r2%b;?ц B5g5gh$ĹKUjhh!_&5~p=vL0YiW}xc[N]U|ڿTᛋ JssN[5.Zcu:W[t]3CIWZdMaXWQ% nyHd=}RP]xp PYOuGSozjп2&M%><2.vL̟zR`L"=ޞHٺ ucE_6{\g'Ml|[5+pO|n@b4=(ml\@JQ sn n{ s'\%~?\FL(*j}̓oC?Fћ2͌뮪JEJ))w6~ iR; 7-u:_kRB#T82* ɾJ jH r0+S.\ɉEEJs19Eo|dg ,13(XLo?˺7I%5W"SM^h" اgv-ZzS@9]<*p[%sc`yVss/Gf/ c[%:纚@I!&CCȑI%|Gto?8C$ݛia Pn.3Fڭ2֖xlٯkʻR6f(Y Ul] tC9&Li /(ÒO>Xok[y e`zvCo!$Ha9BH5zj gCb(ڊ (uSg7>Uh}^:6y4Z8s?ufFP,[;S&2Ge3r6Qob)/8繚qV;C++홻 a&'_T y (-]0`J2<`cҌ)!͛ɓl\*J(֜w;PJ#$&BFR˞'j/#;֑d-5pvܳpN@y='#Z[2]5Y4)?#&P4݁wz p??= Roy˂O? LJPNUB\eZ;N$L@21>r.T EۥzK$D6=.&?"`dd\2J%gq$?6}ٲ?e0(s>QW¼&Aoa !g%M6,'W,*ɩ|aΛM-M?Kοnf/LÿHoY.Q%Yń>&Cvk=a%׿6";zY^,Cun4Hgs?ٚ!%}w/k3t}qvl5Aꄕ#A R}sKGsYF(7iP,Tt;Tvl3*yJBIUV* u4AZ?P>@k7;S-Ynkš8(ls0Pˑ1)46ӛZ>*"c Szjs퍕!Ag&קΦ? 8H7@'3;2:)vDH}teTH7TUUR1#kGV]?^n*yFH\vkw |@4>hfQL1,QPZ88"6%0"C%o7^o+)!1ϘoqCRRY%RVk1Ziy) Ift>2j_*~!A\": @g p$ (Kk^H9-xpYaa(.w:e Um~ ,KO ѕ芄̑JI"{naTc]?:tab17"L"cu<6{R6G=[՞%Lfz9UUf0?ʼ + zEbޚ4D%/F>Ct`7TY9j.~7"5͋6mBcP.(D_oXդpXT9d~t5ٓ,ke%.8:,RgvHl5C'eE\CoFbB֞"Pyo(ns Z;@䊟*K&-!Y@=exq|( )6!caM9>%4aӊ:#M(R-͕hU6t6u騬4O!CTyyJ_j7$b6ȩ傷ߏH+sAKFtExpJe.3h!%_oRJfl0܃Jw͜QJVo<(;_ZReѹ)fH2$4DPFW2U:]i( B4'(cƘAf۩$RFDhׂLIt;R7k+R" O{]:Jm-2GO'ef[(-j!ʴ/In-&D{PvK&[1HDЩaWLmhݬ [X@I;VY3 ZޜJpw޵B!v*/22 ѡRhi PYWO8 <݁%3:$ge^ٛN}9&+KJ%tNąM]$,Y2:&w jvsZ[bJ1@96jh`H 1/D)GIV⧘OCJ32b#ځ2uP0-ѩ6wk,Ɩ^B.}2HuK#C-8!: ΙH= @2?Gee,ӌ#,HzI54'- $d^) St8g{yeo=J~CJGT>6_ƷRR8ۿGw\n鏂ʖ3#-{jYmGpj$#z@afTTSP O_4YnN+718D VF7ni۾/۰HHz֛:rWkkiv2]V'ڇ;S JDO4yP6ĵQ4Ik5c2!8l_p>* R(9c#`z$ =ffLUY>6c3QNyxރڼdžݬxHK3HE3^"nJ{-g*Fg 魠v{׶nwslUϜaޚR͡IEJnρosyM7ýEjOigq%LRz֛SJK3˛{,FJlz-)?j"vFQu6| tq#,xuAd ?b{T×L(yN#WhIe,YR F3҃=J0{i)Ei^5R Wl?nm?/Ji(Cswjvʎm4b߉m!hon`L1%Oݸ"6cnRi 䅱WӦTR-)Oʪ'PGB5JH6݂dWW6nx&@ό{K ut5Xqw3(YqJ>$H!o!řx̝0cȳ%s̡# 3N;$t!Tlw$ξp̜j5LP 3M $4xh~T*@j F-?@MN|_݈XvvgmqgrOpS5ˠ|;uOgk]@l{wlkk8|NU#6mAU扱?fKtsRz or`/Zɹ=uؠ!ưD-_Hg8--vns3%J0 Ǒ%<93o[J6jy%&d\ldrl-Q5}-\RDB̡z]sP2RȀ9;9s3$H ht }Gfg_e%1&";j']UjK+ix);5Os&x9n׺Qthx@Id؈¢Dx 5OLyM[?8j}4ɾdҤJ%hE7LG6*14jtPZ9'Ysa k^Ш"}F 8M9P#h7blB7Ɯ>Od wm5hC9هm?3sp٭ AI|{;t)I9$49*8&#J^;O \@o<$s ps .Jqs[%r{k([t칱gj/PZSsĐ),b'o ZU䙜!~ksH+O:I687+Lɯ$FX6f.9A@RkD²lgUq-iVjep89j+-arn_<~& MH2p}( iqضAA&)&,:hQɦJRubԧ@Owc=g6{ܸ lx-N1o%SxT!oApd5W2Aj`dXbd b5&(4eJ ˰ CA1#B-b5uWڞBU !ŽIs$ThKWR0@(ސ!R*S=-(L5ۋYc.I)"9P^LY-f-V T5Orʩhg$r8P˻B1|} ((9NNEG:MκWa4tw0hN|[5-<>^ `B'gSݺ$bg-HAJeb1]62oyZDi9ZLRgU+ҞUJW2!Qg!k#)u-'yKF'}iH9BR\?WiT㖼H(5=\&_Lds2CqtVpETRD&3#J"IEZ`vSb.ƚI} ʵgp -ԳȷI&W\ރmi.rG:D9+A':]_YPӴ(m:TEiZNƭQ(uzpV] himdZ.rqFpor oݏ(Ep%Q=QA#¿?)*UB|YHh*W2Gy%#ZC>۽H';S6z>e ŠH»DQeÌ9[p7$ ͢ " s9L'OM36ϗhcs2NnVky6b[cs^C`{;0텦1˗-&,UR5W}Ub*3;@ O 5,2܌yv6I`k(K)U@Y6=Fc}xҙ6\Ľ3[pLs4XxO,W )N3X%T6rQW8ИQ[\EեY |'ɠ7@h馳{WB/ox}V,ÿ߱$\;8[?:Ԛ(E'p7T~SOZ%_^mǻ/QbH=[q]u,p*&n#sBCtbejGmy=I < c4qlqj\ *#dÞ-bGB! seʌ g:ǐx#ttGuh/93Ґfz78:9җHRR)Af4`_yMl\Au㷟-/9x/G_tYRak̐9g]jT,ܽl\|3XU$ GE#RdGDtFW)%`)8J|ƈTlD6CKx]і_g:oKf}cnfc6P\' NwܻN/5vHmAHA*))n";o\k uwk7;ΡͶC𻽷m#FW_Y̾'VvzCy[Ըy|劓lo3ݩ_H^6#ʙ{iT4J y<; ̎S׆8+WuF'ljixq.Ɂ2dc+5=@]*uH Blk(NmWw>Gu?6%y]zx |{f +A (g2@Ic إn(q`enSuJAC CNxLY@I8#as[ 'E/]KUPP%Ǯ_>.LKg #~{]WOTP-xoc ߡs_+ OEvn2jcV.؎ܖi:Z?$}M (fN+c;Fes ,:Nm G+x6CzN.3=cK 8İTVFz2a_L[hf΍ɾkb`0Fl 3p91)op`3;LI$[(m0AA?+]ED{!2חoȇAou@m؉,Pݿ?dEcCpzC!ܺyy]7~u#~0\f: E_ODu7 PV<%Bxσ.ȲEzkmkG~n>Mh8%I^WO 3 Gfz@Π=(u?!i[3K2u։#%D*.i>չ,OK%ޥB,J*,M֮1(kTm;x{(5J (3!*ZWgrxISŌlI5\LʻUeBtXNٿmd@NNmb$124j'y0PvFJAk/-k@y` (݇$D '?x8(ފ[પ=;1rHA d ]sǏp5͹J+,wF͛S&t7*7yLH !3OY@S3w;q|Zϛ7{Eqxkv^ׅ26Wmgz 8;}j #TʇsIZY-E Okp(/PUs cwTeu. 7xU& *a\riKYs(bQZPK𐈢qఞ>8[Bᔜ +p>˚ 9(;k~i4 14:!ǁ gVjd)Z#v (9h .h7P~T!pQqY4ctt8gK_s!`$ґfT<-̥SBVse yM!)hJ3JIaō\q}*DF?琪5vuQc7vod -+vVq "j^tel/ʛ8sξ{ 1W" `ZlMvU +:ed =#6'{?UW=?j2~J:7k2M˚.GB%.o.[iDKi*fGĜL/Xdr؊ Xڀ2 5S3Y: }I(z\Y?,N-{N\dIo,4BA*GO~0F+(ML9]QG u 3LHIJTid@I\'}Xk1;&)i N)e$_JKd&)`NIpa +R[7 ^ J+"fTC-`jVU y/tN*|;2ffh*TK;/C7V%S\XʚsM.eǣu^B -ޢDq8a<%tO&D9ٽ;*o:-:>GZr4 U>\ PrCA+=п QkU~ZEP.e!EU2wEB-BKQ(cpg=GTdNxc=~fl9JPp".2qqa<$fw҂^qL WXU+ޫ#5jdz^A vMr2EPdSA$Gz8}_VRlPDQ/\uE=Eh#VXy" ~jz42|YD:4Ffp% ty PZnE(7KR63cG?wj^ﴹió-* (KoU,G=#S\P%f$e1Tϟdmi4:A )k3 'LMY{2%eRR zbm gu5i*4_zC\R @ DZ*}4F/4-dAt:%&;zZ&L\c^ njp~ts8)WqFh4DrHN[@:,E% U/oVRuجE;l<G l=l|tj*-oTX@8i 2#Ds C$L#hj1+AttM /Q8bl^nZsQ\Zd8GgN0E !r:N;>(9v4OoOwۙv/'~rY$?L0^θTIv' N.JIO #K_d,:ys.N4tFkʋ9/ſ[+"=)PfZcTT״Ad"s)Ì?YQl.%(?KO;t _1u_˅#?eZr0zH[.2Cpozn=j`;s "mϛBV,qrweZ;J[je04J1GL礅Ʊ?w}q*ʧJʳOMsk'J:(QVJ]:)u~vbl"UXW_.vSq*)/3EcFngϦ09%TJ/i ͏n!f%}Qgh0BJ42fA4MJkxVQuŪ˜NIH[bVg!8 2jQ-|rwYmS@Ғb>abR3,_*SlHT%59g~r RLx'mm$9܊ ~iR7'.E~‡-ƉrdZcu'z@lŗ*.>\~XnOԞs(J[+Mvl4u6~=eGG6D&%*JD_12^`kOh ǧzZP hOR@%4|X|5< t:̀]Y$0%?5L.K/L9pI@gc%F$Yw*syŔf6YPXRְJwUt)[s_;Xv\~]is_#wENϳ[˴\m(efi7OO|~E?n"_`Fyaʓ.-\Av¼q;|iS3sKv2ZW=~2ӮE3W)ZS͋}@2<1l- 'TԵ\Ia9Д<ި~k{B6P #VpGjTU@u|9wRcv=wK idP wnCM|τ߶@g;UjHʋP |UR%5Zy? aVuDh! 5<z?u4lY'K-Pn~|Em ՏzV CAn JPoF# oAiԀFh%Ũ+xH(geh?ⳐE -xI虶2?FBP-յz˾]-ck^LыL+ExNo+9{M<8*͏,ezw3hlwSTPP*R*_E)O@Jf(hNr%zA,W0+o &$' x#lr r[d#nƿG(Vm1V1Z0Ӹ^U(zڵqپ u`B4BŹHIES0=lć?$.B#,26Z釷KkeE DbvS7]m!΀L_<ڎzؔGP *֣>mHz}Ѥ"t(J21JX _ubV»MJWC6 Ф')_$]Fd<.&&G(3};=l)7E@:}(FWCs@30iRh2(NirB%OPeZluf ʈi>f Ez5d9-oݜXʣzf؅ Kݑ3VUPeB⌜ZA*mut_^l Y JG6=P2Rܯ`S L(/(L47HI׍ S*j+[~%̡H0RXw4єUݢm|feQ'N9a]ׅ86v:Y-&1'Fq%,k$X_7tJ΢07<Js @BM[p-Q~V#F^b'@ɍ;ғ.zԝ?ݧU8La%>w@b~E;ʝMppWnyB{RF}#ٖ&6D)s-Wfyo~)5s,\>R)YL?w聘?+JocRh)4a<\zbq^A%z8זx?ԊBJb)Rw Tu}d{OR/!8HƼvi@,Oem2dıLZ QIJIÖlfw$u5BJ*z%0ԈnɈ̅EsETr^-\Yf_,OP$D'p {7Zt>pI!fd؟Ɛn}݈IbOfEjЛ&VGbDRSp 5@I{{f%S#(};]j5.&Q?VZ8PZ LS _Οѐ\/w@| (lލ%|PC6}#$_EksmMD] x=>S j o\r/ՉZ,RshO$'K-YKiɖ7q:LoA$G6>BNbY\i}@@ѰaGE@/[{Pkv;'\&@PZ UjMj[dhL۸TϋV*bäʾV)H%9_t<ֹ.EVҊXz3[K+80)U 0/\Vey]dž'9y5!6`!,>PV輜 )cŘujJ:DwJMeKTvԮ0]@I u^}H[9p8=Ҟ .ѥ뽟)I« 2ǸPIN\Dx(C[ ͺ*B?x6.(˷vԮ\; uRd? v"Dߥk ?ܕMN[t3TДáSbK~+' ̒ \:Z~eV<Z桩Jp:Hy!Pz*CR@q@Y"-{tbr@y(u>4)gX 5Mec]## 㜃$^)0(}ױswO=7=vP[޾{a.P[J 6PJ/irJ ʭ.-ڌFM$[X]]'!Z#0K7pQ255U}n%gЛ1S݋D6g.)bD_IdW2JsG{xl1 YV~*{E 㼁%o{^ȫnϺOjG씙l@I-@9涁ٱΫE\'vQ%AWEzkm$2Fv"g9ld3HL~zR(~хWP٪̇uVF's]sS~g,Ii=g;yuJ< t3pzV'&OPjӡP}RhD(I"/fh8q7ʮtl={[AIgtYu@[QY^Kp MIɚwOs&As|1o }7}!"VqM G O ,{UvJBv0Q9Q9^&ks%$4 a\SoոNىHA^zb4eˡ]2NQ*X? 0KiR@I+|D"@E{9 {bHYD@"jY2es S:3:9#?fđg+5M-!Y @L?M!d+}o=NMހ*DɎRJkiӖ}䁒"ę A\w]Q$f?+h=& sjTJbe꽟AIDV5u#-fe :D u#O#2 0K7p)q܉=Fe&|>E?m;?[ɞZLMS&%79`{bB8q"%'`u!.nB<*T,ƛfwY\pT f&Ic?/3c7 U@ɔQbc:m"<5Bu؎Em!hz{,r?HJF[ Rrܟz'E:?R괫)jVI'DirHA^K߬DMHllvI⾏霶J J481 y͐m-~O0җ2sΚe9%*U? ~`GBrf|u2|gR4g.@\LCEJCt҈nA)oɱKPĿEQ$o{eJUᢜp\6\-ݼ m a!Voe("JGia쮈ʡl.h̻; rPЋ@OP?|<ǛA..E\KbꂻQ-Sԕj(szln~I4%Jd+z:x\ʎ^{tнb@ZށO0Zˍ]7~u4P4 fDҸLAwVV;k$= YޕUn%2]%U ,T[X/tGz qf2 &K撙Z/?Ȟ=G?/4;EꂹP@(e0-p 3/x j5/UbZ[4}dPbKs6B=誽@"V(34KJ>q}cNZ(-BqAo}CȲ(߁2?Z pMHb"iV:6Y'5G`d`>Cʰ7MPևLO9/(ZM)CV.%l(AaĎhs[dOР VD?0W] q4:`Jhf-1u7MU A"5mf*&%@U%C1yRz82Mo+n<CnД7H濝puM0Z.b8ɗ j/->:ntl4Bզm} O/(#aA+HȝsI&~" @]0>2_ʚSj˜ȷ([<)Qd:_8Lx@IwVI.*

Y@ o[7z=/xCCGJj2]~0,b %zR( kAV#֣J *n,SS6q'ҾB䨐Ťj?ol {ѕ~tw!tg1iPf0R4;/mA]o I"UσLO %QL2۟. H,xrFNk젪#@D,2|/Ik7?Ԅ;HeCggd2-$W+h抴VфJb K:`&d\@zv-T6jT  +P~'|"[HE[&y[o{e FS/_{)@0^S@aG!VFQ~#D?(b (sE|"͞ yQCYPtфXW zi(-Y1b˧m~@zO?Ev\T@iPÖYTh.12ʬ9)9JDY݋e `"s';cGjИN6d\]yRۑ2g} 9E)+3=QXe'nK=5+HP.w;Pa.TBL4ý3^q392=䎡$PPR}"+_VJ=Ve~x}VS=!bh(e~UqTHtV*OrxeJ #Si)25OI EȪ7s2ot[Ms5@9DcC(S׾%4-Ԍ-<2pLⶴ⓭Uksv:--es3Kw(J[MNZ>#PfTb;?:[&%h?roM%V*?Q 3El^/7_ H-jHCe@b(7_G!T,&8..$ ebux23\ICL`;: A0B4Pr䕉Y2e%V7<,ɑDq9q[w"rgOtpk/iLY 5' AJ#@K:X9ݼU</ڛ&LJAN(^cI"1@Rp"PW 5GgBVMlmòJ}vj߉l 6/8 SA%Ne͏ dKӬ9$\$ngj /I9\x޷Hypv$c 4V VATY-c {Ǿ/Q }y2= [4mv!&{yQjwXs *o)Lޮ{FsJEPTl>e:jA uWwse>8œm@Sem4@^%=dǁZ)UD3/0 :M% Yc'gY5ӻRQwdF;*f RM 'dwckk!4ET-L훾;b*P: '=.^L(Q-t÷RT=PKAA#K( 0Y ؓ*Hl7 O:vA|D=O:!ۭΆwPd,%Ϳ:U@-~N|Tr@/Xsk6x z< go, gQ"=M(}2z TF%mY(١ޛH)[3Ը)OGUsSaf|*='"p8<ϽkVa32/>T[M+9C29ꫪRxf}Ms!Ȇmv%='(%43.bP"].eyb{0Pg?/d%^1~4hd$Exa^|[~LaqR٦WpA5O|uXӜOe*ԜW{?%b/w6V6d 2d?9?> ?n|Cxi>S&wGI,7 }sTٮs76gRT}33[9PZE$G,G}Yw ;e;Ai͎H}rY~:+z z+\St1pشU<\Tcc*uQ:lPJK^I=u?Jsz7D:F7Sj$iJ@hmh|dmȽX[.?BDS:&ÖIXft%w^zv_}.Ay[/koH(߷sA˷;z,LQrmDO,QwM/YK UQ4IGzqj y@vÀ.sQa| H_^Ad{({n:J<ŀ&y̐%ex)9k%pD yvB[zP/_KfC9\OuU[+pH')MvU"ۮf,_|EJ.trgң)SU%Wk~kPP|-QU̇SuYճ=|0ᒽ;)ҍ+ j3R Z{Qz׭U@ A8U1Ry&Y;GlzprrzL5{5GY`hf`n~`z݆')=2ȫ&JX~5HB oۧc4 4s YB*oÝ(&_JݏC%bo B>eIr.$*W 𤘻)wo{W?U-hEߗ*t~`WF@SI#؈qϟhRVxq]ka`jsSBLguJR#(.%/Em559P ; rF7 7R=X߸ntW+eF^gzpC寮P?#gv+ol/[wk+۱ä́|RTVnۏ JP/ŋD7RJ2E򷊚Ŏj⅛N64}]*^ژ"E>IH!bs yU.}䦅p+rS%/T P2Tʣ:0y΅īk1.Luho 6?ed'}ıRjwpZޙ7ʘTz[!, ^ *.ft^\[%1TQ9FD+RqEjȏo#6{}Vpr6 zGە/5JN>>1gC~S2Զgm{'9${m`m7p=G*ĨκC63wQ9PJ-{R9,NwˏMPj!GȗI\O'ɗ"*dŗ\x( f%JwŀW}r1Ri(?,Vm]ଝF߻x%"􏃨LfUCNdX @Q Z}5~;^nCsֿxqK-Q5U- wjr@D0TB:JoxQ2 (7لnW%%n?% fФBCC ǖN(;fD|ָpν//VǽfdLM'Gk1PS>NSKH)fc>J2h)a&ߝҔD%$1]=#gch[}:}Jٓ=hs$XJ|M-wJsHQ J7J(GexnUYVdV'V$ʔ%U{pq N$jkoU>dk쥦jRK}bw6Fl.Ga`4E fe b"ǃE8ń`ɹ^$3&Mj0ٍ IA VnufƮS.Iw |. `JgŲo ;~^Rf:ΧF Kv4feT6s 9t6Uaœ(ތl:tO {Nf{ʓ^D5YA߆GdFx?)@wMŌ岘g(*QC݄l[߯|!w"]x!MZa ERg*,3+.`s&FYߓ)QJ،Wv3{*|9iĀr%M:6XU~ZJ[]yrW/ZE4p דQop>YeLiz\@=QِƠf/S&hi:˷\oGۅ&o!m$ʿkn9ߔ[?RlE ye~nkljD^TƵۓ+9GeR"<,.ASV{%xo&k{%AIzڬ$L]ҿ"YPV`hXmn0PX"@ߴ3m3VEP2/;@)LÇ2䮤QG{SOk2pֽb#5HS)翳hOې 3Bdj]_l-.l6b TDTNG-ģ+%dR4gegUԥE@)"9UvXy$Bo[--øKvej`9!€$ʤDxR>c*͑+g+_7`'RPΤ%tO¤j'Q#A(+(,R6`!T=ǤSu4ʔj$N$:w L9a BSpX%5˹rwϹ`uv|IRv_S)fG:q@YxKD5yɔQ1n|,Rb w1oર9QJm:^@)Whp:y<@)d˜7m򓤞W[VJ{*s)HXjn4#WH\nڳ8$g/}Ag]{ߗ+)<ᶛ_D̄Dxk .'=A'"@bSk-x Sd5A3²\ oTE(\]C[h;Vʎx/kGEIRH8SOLy.Nv"\8=5rH&H/\C&,fla( y3VN#57q&{Y>k5&&ƺ Ʌptn㿒3OGj_-so sGMGXt(½'YԞS˟ݹx> 70ܤf;"Cqrҝ߷|ay"D=rPQ˃:  8X 0Me:n!v{ݣzg#~aB'mye2&EAwk䃅"J.i+GE'z+H{ʖ$}XjtŲqz&TgjE! ;wacvPVr+Zxʥ<`%*)4U{qCYU]qc4vc? %~_f`au9T 10 ?@nAyҬ$/ 6xLnm FFۀIz _ƶbM}+<ʺ+@o?@q]tbް닃٫ Igl  m0e6+C]ֵTrOsgP)>}:"KӤS,W2]aq'y)zqV^Sh/4oYM=^2:FM;f1⁚zћc#]+Ó6=ssM{c+z{Ԍ\sS['.mF߽h'eɾ`8>N#Yڤc̋WEf?0pz=}Q1=.Uit;~upu;քoxNL-z*-r+^^lLW>N;A2 i٨j=N%y9д\&{rCOR@9怪W$N6r'}?|W%Dl/]Iduam/o`MVL-gP zOɽwy2זzd+uvZ x!^U߷TG v3S.W>{7F!d"m{\r9o;"0}W L#Oc-̇0z#E p38xMCImpp_ tmagF%P߳"d]0yY4GV<7?jh([vӽON2~ t]/%1BXhlmg cʕ;N_.BEKahI/oE@:2)b <罪|v<lXcy"ŶqY XʉlYW(ASs[ve\ xnL_4'< śtUbD1Aǥ rYUq{j}C=ɤ(+a"=N_ϵ2JM2ҜC5t#3F_$3>w)B]@Qon!@J0OP6Xu) (g{PP;L0 @ VH)~( huχBIE#3=9|yԖg"e{ljyg Pb-0*Dqͣ$#g'jL~5D&QH @E{ IJ_Fc)%ꈚTXmύHdѫY9]Cǩ WN膶hom'9lO V;&yy{ 1"d䷗!}2(cQx((*<ʹ:棤վr\eR,̎&hs4-RƛgijbsCG,XLm6 (cfNOn8CJh-lJ1%czQf41,[ 'CUdw.7H Ua`%ϘSLMʓZiq pw{a9uxñcE `#`Ao I:|Lk lpJ;o(.n =b}W$( ֙`Za (1J?e"}͒bjEVpHR>/{6K)X?|mXNJYQ-kZ/DW~zX{%r9L݄f:tw߱X6Q1JF}~{[W³9İf_[[6hژJEDD:9۩?_)uR ;<#c LͮyF'5[?ïm,c*1%r3YN&Ry.mi2_-,)^^EJf̨uAZ#4Z'So t!2bއ~O< 22mruDM .7# `݈{pRW%Je"jd2W5o= @7}10S6fUB6}qR(YQfx#W3;m3jwW].B(* o0RZ٭uZv9}rcwݹ+!'ኣYU2Q@('[ɯO,FBPn?5@{5X4 )/w7X@c] JrݣxD=FloG$`q3nYpS*ۃԥ||'3V&f1jj@[4j2!7'704FzjbM*тXxdk u8^.!2Vq}D8H e5|{7^ ;1+OE'{vM(|(pMC@Rİ,t IRdӣ'h&Xt(3@UY-sE` `!NLZ*(Z]{-6P*NuSA< iso#%)F ?uS+G1x#W^0Wq:2ݤWw?1PfBmrp"D,-Y6?/m'`@ S")SlIȋ#|Y+@i0[M ڔJ =ogߨE;7x;9! kcu{Jf!pgLrX[.K7D^f㳉l c8i=ϮijNVU$g݄RPj Mɷlb q$5 }Ԥ*ݬ)+xK1Fԣ;\`@Dϴc&̂Bt&mir TK}fS+@0;MJ_WP g4Y ƾ)*+FwU#]ER݇c,_ X)Q 7H(LΟ _HEϫ+4y9靛.됔2&%)ߎ?\dJ݌{(&Y4ҥm}Zp@o7b QSu?f0(f3%?_S//z @)v'HG&*Jr<t!T`Ea<:wY={#P.i=HB#Gi;,' oᦀ&biE/RZEbCFYG7\]o}pKb|?[rWǟR(yY hkbx9Ty*]Y! YwVjɁ/GίRKv@3Hg?zkNoH(A]QI[%+.j3h{Dٽ_ƒxF0s2iN^sua͚P$JiPzFE!"_ǭ+9,t!BR+)VBIn ;Ũ>V2YÔz| i'(Q"|d(rEfQUߔ[&5/]'#xE )$k2ob>;F[2"!5#JEeޚ'HkGD`n(_$p K]ywδ䡆ƝqeHc@Va{(xpt:T侞(A }k+3S ;FM4yn L?kh2&Rb &(_9m*]J7lit0)'e(SDl6,39Vپ:P ;v4Q7*p.># HBΫ3[K@/"&OmjՎ*PR G4F|&rajeJ?s|ѡ;`%T(Qu¡KK-^^Prŵa%k '崍z4e%ޓ$ 7 2 {!2,L 9LyKG N"%QKH" uU>#BtMkdHTq o_bB"&G:GZkPXT]'o PfT\[\FK?dV+y0mU`x6졯mߟWm8,MoCbh 8n%'DJ7tZ%%6pTC*JB;;| 'ʹ ³p1已2]"Δ-. 1_-di)2qu Tj4R8z =Q_ /J*@6?E N{bf{^n.H\IS8Rp*ǒ2~'2d:>s)>ߐwҕo&hH ?xk(Ydcg9[;Vm..+ZYlvjX;#]̣nGp$8rR&y:\ @Vzz5m*FJ,5K]Y6áEӎme e~[Jhҡ=[RɁי5|׽vc "5e}lqVcW亷v*վ/Sxnn_#,EecWgBY}c ^_)Zh "|fSj4U |_ 6=V]jA1Uqcs3!,(&i;?V#AuA$J'C/?6Vg*e!R-u fε xSj$UTK j92yczkMFGIFcsmdfm=!P7Jw;?t(^cGR+.Ljx!2{&kVʭuIHeF;,)5>p@xw%G*=F-5?[CO1#Àӻ MfHɓ4JFMcA2A}mkc"Y%+YXeG혘7)h@ZBII7,jTq67w/$8?BTPsU ۶j-'n*xUb2M y ˜t Ps;Px. :H7~X#ch FʔdM>ZX&0j) SLMQbl\PiKeYnenU= WF>]½:GJ-0{޼?O<r:QQN|:s1y\ڗlm,taj:#>LjJQkFE|ӷ%[M}7B+=e:>'u=um2hssD)^\/kDBhl3PHO1YrUW,EmfRȮ,N_謃/2nXc4\񏂑q|T:cY7BHQ,Oア#1퇱\*Y6&ܱDp0_N1q ko$*ZTٚ# ƣsl_ ;ޞ* 摅C̆4/V@V['p1z%/ ~# %{g P 'K9-G+c +eLq˂J(YoIwʁe_Zp!Ӿ=թ>5XM iD'Hc@*w1IƔhF4eX)[#7?[3ٕNeQeI=8)o?;;FJiJR1P3MkVAV1*r$J=i=5WT'SwŨaJYÞ:_o#%u_^4"*&c-Gɮbag,NHfzosD|˯ZXߨ,.knsLxHB>fRK^k'5b\NY"K,d ,lA9ǰ@fJJ )f/>j8 %yPmV9v (As Vbҙ}&ð\+]; H&4z*Yjj^u"X~3f\y]Ҥ MR~W51%!IÄTtā&5K|\~b+쩾7[`y|:AS^Vy<hOXoY4*HJYɸy$FG^k,R#ь/m ѡ_(PD4UҌD2uKd^ 2]k@c@&ʑ*/tE#)d=@"sN!/K|gJVoޔ4ohL+`/R֒[=G0;.T4;~X+) O=4mx?hR(wszUF'ENaM8t,/y|Y +zִFDĝr+g-Eщ û4(D9VSR͙1x'^qIOj0ڷw$%$[[ηax-?[JŘ}U=l r5;໑vu9<ZzJ\ڪs(hm=U۱j_:+ yd{8!xhFux(zH 33C_N$Lt k󗩚qقuC6|XwG_R\';bg>7 URI jo-8pZ{ WޟOu%(.T!F^X+tبApf[U^$U8n\K;7Ne/'(uv?aZԳ+̠ hRS Igݑ% "_Ѷ\(9_hp5lLVzg SDJoW03]J^6?8 'cQcLP@cZ닧ޙ}* tbX)ѝ؝rn% R^Xk!wXI|-ȧ+ăwή.\"~I%Az%MD8mm [)W4Kߴ@ФI-儵:^#W^UMDl-"z\e@ʂrը?eϪJ=r`e˔`d4l Wqo90F"a7w8߀CJZ0FrUPB:M4F:J8tJSI@o'<2TRu(=V"5T|'1𺎵I27qA9f~yItua^:QBMXr7շwV1>%3L "iBK9 /Km9JPmj+hKmd-'ٰM?a2e?)>u8-|FيKȟY-Jf?cP )J&Дp-3;-#]WSQ&JɁHCj88bb]104ϴ~NQyOkȍoIJ1P034c4%E̫/>(Osn}4',ɍcLM'{%SP.x ~=n{NP3g7Tq830PumZ|gΔU翫8"'R ݈ Ssen0Y1u;˨ Aփ n[<[غL~ewK8=^;/ۖNvI*ŚݡP6m;^%fƷR7@Z%II/yiq VjTچK H|e1%_J^wd:׬K 3Ʉ l g7ZrF&bꅱޔj 3Tޡ; LRo:Y`I8ױbҲd06LW/dk;\*x|io* Gr偓$۰˱B6.:!(\?s'2U;Za麚L q| ǐ_u GCl/\Mh ^_iZPj(߿TypV*o0] M'xU$0߿t\MMvD2C:MȔIEʸRuw*Jr ^v1^.*rH]iB xq+^F0%Xuy5xNLHh ꦕdR7UxX,_;j.\#jңkuncbPiU3h#i~{$.wosJHG`w$"-oHF[,(+G **fRaN 4xi h ,"UCxՅ؛s \o.(^NLjS z m8ҀLJ:[ *>pzuYh1|fέ kq ! ~RSr[V`{ne+\ X=KhFF9t"ܾ|eiAƪqB|ʇ}unJߗ hqxyPr[TB 5km"h%ljW/[483rNVmm "R&UDW e߫!2ـ3V Q1LqqQQ('yDwO;CL.luǗKPFA :&L}=hɡa¤c7%b949WF٦N?*:)%$@WY^d=SP3Y5O?lhQ2(Vad^Ovx|xuT Qf#/ jafRDFC,۪OÅ/ïPfކPu#Ś:AUIe/Lpfݾ>[ {U+Sʒz}xow ز4#k U (3@J*ݘX﹠p[\_ (gjU|K*:[v`44 ] qT]!3 MB+ooxɵ5ϾC_^%:J`t%Yj5#q/ *z5pJ4sW^5dpHtV#S=tTZ\QT5|#p)$@9?MtFl+$I+$ktֈVo:>Kj@z4\?9]RH=zH,I)GyIMِ hAd6ÆFwaz a?9?JV_(hnH+ 9ӒQ2 dق+8Bptk(|ёa@i FxL\ RyS%WoNtz:r6' Y81h<3yF6|W U\pZ&xh Cq1@;@ I8Ɠ)icX@ӗTt.G * Z!e!Ru gU21ڊ u;,ȩ -ʦ锴t2 b&,L){E?[wlv'W8Pk?}o؎T(+älP#V&Fþ( zfU8cVTEjx"11Oɕb;WHP%J뼯 ~$X]X:muBߥ5 +Àѱ=Pf"ʅ:Oen;I'EhLl@ق+@UGP:eۅsTrk52 ( .\D@hƗ6fو]ғjufEjŋM!VDʶ-5E(~Ĺ2BV_@gS~7iژ]w졲 4ƬBĐqyZ밒9 r9` Ƣ?OK}ӖI+1@Kqh'Yx1 1P.i}' $̨r8×mtN ;M Pve=iak-yZ@ >uf>C#Un/tx1,{Kjb$i6̾RAX- cV2qfHW(a%ϽA6~b=,le{qbfV8_!q aPn¤?l ^632qּVO5QvU-x%+h_ |ħFcr.ǯg^V4fu0RCQ՚LxVG[PX6ڻv?FCvwzSj욁 d/ M&YB,1ׁyaC!dꈬa?DhA4Ξ }Yؘه"X"ocW3~:wzuv&xj.JfsuUN2+W@c}ε^*\f_loyL^N%;/q&.J)ޓq_\ D9J,*`UJ+0 wYPK7M!Ăb)8XREujx:-#~!̝2v~Q1֦X 02dqr\/d/:9!\䨳URr>[gingLMDdGw.s% 7sV. h^54ȅH[?뤀ԺEpamwݹa3\і@}('E|"; CA~x{]e2_DK)N8o5H SG$ Eu(\}ɤތ9UFnwJO֞ (9 r(ںÏŀf0mM͡d-Z͎ғ;5 =Ć,zEB=XÙv1WuJ$D"%%f&a{6kqy5B(^xH&x֌A(7%g]˔e:)3ʰQQAЏV!>ơ.[s7ZQ`}^r:K S&I0<`A (1p\GE>FV{}M1@yJ#y91I- ^&u+J#F Sҏ\չ]Un 1Wz ۑ ų0 IsxHs` İ- ?{PFFX#P i1)>4pڡ5brmF~b-Ӿ(#iA1n KZ7-={"+;G::âVg(q~-7\Pf:i5,k4)a2MeUPl@Ò@1;݉Z9n: ztqBݤиo@hGS8 }ɀro@ T%#VdlR@x >9^!=,y[N?2PWP%9(P\qCqt?5H JV+rc eJ.W[CL}f ݷ`tEhIrqkfqLܱ1ȸ I0#39mC7q )ʑ"S qNÝKMReO SK-9]Y`Xp]hI51|`Gfj,oii]կW\@Wk2  U[_/1#j\/yL0L Lbv{`+fCoԣb薼p-0݆pi>;$jD`LgbUߔ[Y.#']]14JRRV14%x9VK ]uRX1ELRrzC酎MnM *^g-&}{sn^p<-TSu~22/KD~|qQv_h_#4w#DRVы['K($9>nSHKLI*Fh]bBL'5ȅ{};ףse?Fu^M K1ɓ#2Rqw)/E/ H+D*Re v9X7JuNtɞҁRPjN^}I OT%|bw,+! fru@F)<7JSF/$ٟ]VζԖoQC@)-%X ON)(^|ە@mɡް-,NJ,u_v%鷇bK[7beŴrơN>z"Lm)e11ʏ GI]ԦYi8eřǸP:D8k*odW-(-=|(Mպ^}c?x xZSh˾’TN'&'eZZuFRț;I(K-5yJЖO te,]?@d~wrl۟Զ!EbQź&aQs 8yC/Շ?"b)L(1഼sHF% K)aSFcˀJ ENrW] ] _(6lK]{IGCy4(N|V jv9$xgU$I_qm@jǯfYLe".j4KA_}рhIS얇*>ϡ OoJgDG_WT䝡geVwUR$h97w1 gWH75_iî#Zh^'hY@`rIz#]yYf2Ѩ9CJ9j`2kHZƔlK J=? #?=nK0IßZ!=1-Xh Ϭ1Lȿ/dp(8)e@% oY)C 4,pW3t͹01m(YePyk;OH.(ze&&} Jon^?9]J뽋/Hu9,dDx0ڳQNO8-V~rE^cDOuYF-W'u0 g ܾFȁ9\؀ Վ]%H{ndD"lZqЈ]t$z^Ff&]޳_F6 '4dHU+aa׎+-n&׬4` ~.ZϿ*3 XWf$pΔVvT:bBfQ1㩮)]IrvJ4)LLr[艗`yDz-\+>WKB JX&}JVP+ElK\48|,hqRUbdRq}/>GB4- *3:h +/Tk.쑷z||~!3i:kc?G9(<Ñm #,G{LY?y[?:H7'5H(%K"8Ah@ښk/$hql՟C"Q7xWX8KT#)e!K2{S#d4[TES!JXlLaM1݇);)ߐ{lW ZuAz)2lBBoP.m]_Mȣ/qrfQN'N^7ectxS׆U FHyލ##J(˓1?5"/Y˵FJef-J_Ÿ-o@ >wN`@TMD~hn%;#;"s}$ޤbrшzI4y45 롯 Wy<"XX8 3^1L.H~WI![FScp :*D (\ |%Wԗl*[ e—Bq {H,+ +JY7"^yh&AOOʓF˯$lP̚]|_T7A. x_Zy&Oݑo Jg0.G(z0wȇc$?d9ӫTpfL!^؟CYƎN2Yo:Je-.TYћ*\]z6;i?/x`7*נva()ϥ3g"-x~h tBIW:onAOޟdvL!Z0(OH,@qs"  5H[]nJ rk vSVZWoطi9D ~ҥbeOp{k`L\HG*ԕf\(6BAOtI 3q8<-p`XWJ8RUlbV.ҝXw:z8Z&N< p"um|sdMJSrY<ќ-'tw>CTi"QXCr:J d&Xēn& 2%W?wgGU]Z. gY>UU?3.0C Ơ5 b䏃7X@7\災wֽXߖs4_l}䭓R\NS8}蔣0g; 7` T)_1Z|iVBĂ'Ai)h҈9Ӽ^;3|L?S^1@H$)T K!mM1;37࿚4!Ri,Wʆ1ם@0SMf)w1^X)I4-!d&5 )C“\튾ޟN\ARmUY>I=wj;Q^1s_a\|8d)FW^OqyC4)E NYBYf7<(}}x;+Ixk%MSr#T{dl#bJi]v2-mg΁ДM;L&}MM3@kk/l^rQ:2vJ7TķZ!j;v7 )$(ɬO Nl|4&sӏNW_nă>җgUCj2>Wl_P^rp暛e1|s'[[uqO޻}:k/* YU)mW8 zu"J-7D/ہoDo߆w_ږ]}Vey8?*c\>sFQ[1y0ΔtSFEt.^Dr/ (5FoG?c^a֜=q!|2uPs[hݍwۊNzSs'jwtx>~|^jJƊ-ZI/MkdrĈzŽ|i (3) +yTܹseϹ,b>ʚzg]8K7{jޫ|?%V>LXIהW`BYrHA €C< %A*7jI:X׆'if$(7OS {g9m#J< ETvwܝ^'-o$6jBTy* d"q|i|x[PZ J4hn~tܱt4ɻM.Yz@aLsѕbu(mTU-kͪgڿ,/A=Jz3 y5Hnлtpl)ٟR }ᤳB{RzdEzjvDRL#ŇNVK.xV@R_:L( EcB_ڛBYL׹o 'fpUSnr ^_Ȋr3)@BXnBN&ОcXG_OKPRJ%)VO5Wtt45G|cKHS7*L2_jglϿ z8s''rJņIKqw:%>x1R`h(MMZd$>A I|:YT_=`,V0%wڍ*'N}]2P-bסfz Y#h\-3ɩ w;BUC=,pVt*i]cor_ʇC{qSfݚ'6#ŝ;:B`Rr6<8od02hapB̨MGc,zR(*L?7 R AW[*}9rK}H1,׈P]C'xM~_eMx^LD/>O:ݱ )ܧ`BnRQ4BJF;`<<14MMԠ'RҽuS29)ÔN:7kcbBk6U>cU?žz!B903@w <,#}=STQ/@>9+ (Sxڏ|N-' ,IT琨|h4wv "S7k (%KL[ Pj@y4vF=uQíP 9;f2j*ԖgjHͳz#z6/n.‘|5WpPuR8rlOP>Oȅ2ۃ%&1؀ ,<Ѝo+4n\ _nmLlmK378wA >~y:ϙH}#IQeЕfA˵,OgFzeođ&3R= UKja]ox L}JÚU*g,۵I:`;3ţԩdw5+L{:88\1-E;2/&Jn~wUl@'ف|hPxW*z5e{hq=&I<rJ_j#xk8#R=:\OΎ)FʟNשՙP ܖwRdB8_Wt=CqNF]ۨsd1;hRdk˓E&"Cqor()vݛe+=% (qx @`roaCܞ Fk/+jћּdc4|]cdBI#1v I4_w K$ѱ~5ݫ* cF%;%>y-4!?azs|I1 3yS!;ݤoXro/ir ƅ+օ ܚ 6i7&q(;bO6Y+u8# (1 Mj\1&Fe#_UJbS/gP2xYebU;}V5,`+tUVs5#vr'/JO{KdܖR9wImj@"T9aLވ IZd+~ cQ@K)M|0lhTAmwNfvge]iܒ% 5J(,1>2FJ,\2]{mMؤVh:&g0{u.LqMiٌĚĀ~IGGGG?}xEL 7`8GQeN 8/|MaT J[;d{sn 3 >G62( HcA9FL' + lRaA#I[~/L82%PFZ)zHӬU]oPb{l3<9d '"OpHTtA'gX^Od8}մ S:F[ح$Jmvmˎ 6 S3咽{G)Si(nO6n³{Dm}\ ?~ G.LVnX+}!Jc{}GN':+b Y 3Mr1g_5/I3Z\k֧a˾z EHX{fON{eMg;{*7z>AEZ^va,[`Qru#q?};8~r3bC'F}N|kp ='-~ J=b-sRN8mXOG )-/4wJ i4n2]׊#~׹79y:GhZt4n1"d0sٝ5/B*Qa 7reda!3゚QRqoi+BpM`%ߝ[F݉?g^D GpJYI XGyoq,$_La]̣D2g~Hd=MXխzEc}U !Y\UY߇q 46/ rI|75iiz;-Yj?p %4C^=(1bo:P:m~ƐUTc>X_3YHm[ZzPeSr.jwNny4MVƤ?Iys2R"èQr ({:`~1+tg'9 @zp{ܒ? SJs aww-plM-Z Bv`9uǢi|Y7b$޻Qޤ !唕v҉P'f`Wj[(s;d ,~z7yj@ [GA} v_|sXZQM'GNg.4cn b撻pR`끘gNi(eXۨ)8O90PY,%鍧̆.E on}BLaKl|ÏxxB(U P&*UJe1:z\1S0?;'E4TSye:%O#BSWژ!7D:0;fEvN!À2"JdKy+J fl~}D$;}。ć@bNҢڂ_n;hM\g/t'^atb$tTryyX# _>6{{9kpQNxi, PVsPO<^ xvn1BfQY)^| 8M2`W,wK1Ud9ot`egRb*^Dc,wͺ$䵋)9_1k-ڠqۨݴHq$W=tT8}Ȁ? mK-QXlۊ~%h*pɋ)x4ɏM:(eɢP7[4ʰXNL1󼁵LvP|=lqN8{Nj$ (}E+ǰ܍i^@F+J r$K<62̱IiMczєapā̋D-EtqJC-Hs Ó~(_!vjP'`C ]$\v՞:qG2K Aǽ˼Pz8[O)}ЌhaSiD(τW Sy!Ȕo>_p"P G+qHM~D ,3Kgc?;*l`ʘWmy'Jc4B{VrZMnp_qӉ J\8"-9蚳W3FuA r4/ ڠY yU}G<ٛGCrbSHm L 8p^]Sg7 >v}yְ> m!eva$V@Tqe D\*AJ&02' ֦|B"8)Wƾ"@)bg㽎%6;i?Nt'D@x“ENtJϊγ 5l -D!UzyyZF"i|kqʹކж벑6qYˑ.*&p+ovH.8=N9̈ahbrTUAS?|6*`yWSTzY( _G7TQw1hq_3v, er2"Չx? T&'e_|'Q]XNyW$,'9\f/ iVkom-HL;iR[d`a$9/ (,{!6ڳ{շI33(l0zldq+Q0a;oTȽpZ7sXݓGW ۗHG\鬽R(Pjbri{?B;r Z+̻]<z'x+j/%( @؇Ga*̮) UlW"ړAAGu`?49=̉7#mjM!T}EUkpS|}EՔ#`ؘ##rȚ? * ?` r~pL7ϤV k` L3vuՒ (H@ V\oXl6cu_& S*F,!~1AJ2HPB5c<6DsM ޛ! 9G)^ 7Y;e$/kcFJ;e_))Ɇ@Pr=ǶL)0+;&S o1d8(JOfOTg}x݋lHNVn@J2'jZ#9T5R"RIL\>CaB>DD(I[شh X}эqIj)ތ-#j1Pj-g@foTd%vAEZ]g)7jq_?/N96Vt|+}2JFo.B,t&y,vyʣÔsQ")2ҔѨLGl2llY!BEOZ2Esvu+q~.1ht5pҋK7K"eJ%H=L-CrY88z()wO(viMtL谝cb+/:̡b`mҷ6k)Ld[vg\sё"Qwm(nR'_f~ɤuqŪ)pig֞>w]`x/c=Eq.2|$ٲae&VӈS(axgV0>nLķ@9q+d;xgG͊(Y!PB$.o/vH Y@Kz2JzFgemѮZdrݛ\C~0{(GXT&:G")Ǽ"aKlPV V٠B\jI+c(=wq< 3o_GBx8)7>sÈM]D ܦwg)x3YvX[=* ;M'.LvwoyOO&1 OŴEo=_jI%tQ0wҋSnsi2!J1; RHswʰ}~!h8==,QQz?%\+k ݲ%vt+ Gfoa Jr#Ӽ`vPR RZNt~:9<XD r˙/o[p$I+E>Ӟa79}tD6w1|0np ܰh[j@M~sv% u+ F\4}qGYS;[HJEW2'KLth(eDeNqHX;MQj d*ъ CBs}U]`>ㅁ;t+Ui'\儣פG_)J/' J(EW^D01,9߯r>#YoSJ|p]B\ Rʮm^Pdw^r't1a~V)phw:]ZGXRLP2m|vCy/,@/3$a-K:/wp'TXuǛRm ’M"{G[.,tpg|PJ(K.E78-.8ZɫZ'[ܦ@)!_‚OcݰG3kJ'ajM9ݓAdC"\I8zpam:XN(OJXJħEֿtc_QniWO *UDs<5~dVYع<̇4Eϴ~҆KwKW2_r ̖sɪdI2Ƨ1=JOx7&{7 dJtORSS`eQ2&_@81/P߽K5}+~peL;T _ă;WRv)c;4=~Ҁt!6rVަؓ2_Nk;gjZtHLo]Vv7o M [8Ub~GP\WB5md+}->TU*f2 Vdwmq8̰rnKoFj[?{\`#[+)>)-VL{]R5Hö YJx٫)0ʜхS~eҮG(%`:8";`3_]1&2%!z-{n%`e`8N9gLdq #m5da)6yxu>-/_Nmի *t1PY,LU# D'Lg>,W ۤ2jU2Փ (iDf7tV;iq^`T%i f$kpmǽwƐJm1a{"UGCcj5Mq=n9Sgy󿴣!wDY@diUW4wUOt[ڴ1jl͸M84mtOvmysc!d'eX,ZJnCHWSX5Y)Zy"aSm%Y.O+vC0}ŰOB(q羱aL#,Nkos."\zKfv$i5,؈,1x{&i|]<֓͑]O~:{}\d-WG^^]I,ll3ݫfܦ_ߵv(e:+泐8IU#aREjXtlxEs'*{z@b+p[W2rӒ]IQ2>/ 1ŝ,-)3ds2EEjJZAʴ“63_bޤIY掄')\茊2+)/>(YۯSiztL%Lytjїhz=, uEe" _MbYE^K/w[kה!T~V;lVR'G,9} ޚ5 hg+[7Ih9#[ǜ۲*8 GXoF6pM_Q |V.,!5̟[z!6 O"IN9?k/'|gk(^.UqJŢIC6xф O2{@8. /D67QHl04uF) ,DfaonAPҪv[UQjYdGSh2~PYCs7Û[dH)DAJ @G\ 1v++ }dEi5\3v+92;E\[؅#`iO/SfsNF%z;덤z-f !58-sdzN6"Z:ȨDe҅㫇 X{K6=IN(L_Rd͌yJg1E6dav5].r@ժb l_#&ljEbo+{ϔw,o$Oޘ0r٦ښuJX)"牖X)}n`{.d]\1c/;T.)(RRI)oa\s˰Fh^bv,*#.uU[9Q.ʛm dԐM%r7G[M|3^T{hGr^>)TyWjZSR6ʼM*~ոI2r's2)m$] Mr9`=}'~LݱNoxll<ڳ5@p1ɘRE]·l(T^`wQʙ_* ϙ PqOw+;>kۯ=è?,ځ '9eɉ%jQ^d.hHE@0t.:ܶp\V"ǍZU%&]OtsY\@3f =<|~3%QƷ*oZ)j3&s̔0)qZG4K}s|qsdX$sg_V+?[Lx2!P5zͣmAs ՜jcS|LX&R9H]rKmиmn.+@(%EF "0@_} %Elw+ f:kTsTS~9@{#>3:Ry+AOZsң#SVۧ/Dz*vSΨ2lpV)CSe(H:g9UV RRqVY+eLZ:I'zc"\l3"%|MbY߶&[W o5 [+SZAHTd)sIYU'Ņrc[ϧ]ݷ Ab ,8Ym4Rkcv# Չ!R(9i:meE˟az5~{dt|B|s0?5xFضv~YYăY&ʔ_"Av9ռ7ny)'`i A`M HDonYxP-A&~[ISU!O-NxC6 4I&Ͱ<8HBp%;7WѶejlZ.6BIyķd/ ltoͨuI@.4NI gќ ͔@yi+)7:7Xyn떣N7D2xg;r`8I_?0r#)Ŵz7ɼJx̌Զ5S/鲲Eau 4_v$$3rX)[Xgݦw}bԡ\CmttRFV#Uɘ2br̔ݦ+' G2ɴ$Y^2#6kFA ~jSkؿk'˔coAe sL~P\1|%փOv@簏B'(#vSÍ~ &B"67[oW#Pb_op?}n֣FDcDf6Id%~eQz1W1VΰEW~y@8%vTZ !;GaQ'2؇3c,UFOٜ2'hF^  :m9\pE: 1 8iBuwH~'IEH^i~z}?n(&|(xac5 +tWvaOJU&}~%? kӃ\,|k4Eܽ/8q_9ĀʐMWe _RoWΜd)t*M!8c(B89+I21uY"D8Б!=٭,HV]8$y~Oy'LZ—#ML2;@ {k,keH֝~QnX89]͑JOoXqSNwac9P.Ndf^y'ؼT EdVMSb3HmH2CلIV9YBvK* ›OɩCd> i rt)>+& 0Ze ׌(y0J+DZz7. P6⦜l'SîsN#bX qMa4vJ0Djm+ ;oP ~W!Te_!{ïU'Rdg7oA1ǸZfz@nyRƚNU̴"(֋E1#cQ4HjTϕ MIo VZ ˯IRLVʄ s< &lI{ff}S*RJw^,ɭ_CB"N´\+ʲHƊmAG/]܈@~R)@y+9@ JP&gXRz0>mW(EX:lrt[>]\f3"ָRěg3uS)K'取mߚ%&Tu<ͩ%_⻸Eq_r*]z}TtW0Jᦜk ݒ\.qIg[:V%P%Qy β>e4yϏbBӮS2_¶x2,".(8Fj㿾=S]UF)ge؆' 1ݱ.@'񢨵\@O pjKL5N( }9P6.pYI ˉr%&/;A-BZsZ%d#-UO5ZVqc{61"R e *W }Ni Mދ҉h[(4ɾtc,H/i=Aaqg'kHm3m^3Yv)^ z=瑚ʶN3ٛ@mݸMk tҦ;yypMF)?pgk͓"8"(N.y1NbPoήƫ:ܗ 4Y/#QstDRv(<74wp}6$ž(imMWP(Kd.GDxڰTRǜA"948߉8bXIO#Xb{Zݽr'w &~ b2;0` c1K}oIžUXQ)NZ"Z8?׵3)NMɊ`t7XP;huXـ-M*Ľ`/Grl-GF3<*F~hHw{זQbÆAѪko6lU]U3kѴ=U5t+h(]0:'G=A鑉Qk&HTMsdȗ MIdE¤IS'V@x}Y6GvqѬ rA٩8A(çmo\3:A@?c::ޒ6 13ɥ|“ΐ P܀6׭5r#q=M|M!{O֊ m{i<_Zffz3Wp@kPo}er&]MY9/ @ߚWӇ+*B )bbGs ])bO<ʥA^235+H)SHh(StQxv3?уIJz08'9/CN9BgLTt'u8WxՀE*"L[U ywSo{-S*, f)gOw 3D8w`/M9joSyoǥwcP(YTi*[:t֖5Dϻk!Ivz\8*Mq5~/ؚŒQѧMb,"E r)/ /MycuRbS޸ha~a=BPQFR SGq4Vf)^d ;%b%T ǟa/=_:',^To{8)M2} Χ4繍u1}`-CH;lVB]0192e#5L셓<g{L+'NGA/?M9M!׹F8Hɴ bn~X6q8۲oЍ1YliKZP+~l1aqyv/>9cA3% vݙNT8+y m_z~cunͽ_΅ Pf/NZܻضeOm?()y DYVcY3{&263kL"-+%;'jS%9**wn #7Fқ/N ^4+'-4ɴ5c}txq+ȴV#T5 liy\]%Zx_hk@HQ.yF(WG)&΀sOmb4f/R"3o;`hB٣[ @uI#l}Bg, PʐQE/A~]#Иx[̔iւ\:r "3@QiQ7Wi5\hE⏤H[)ܐ+ow⹄SVm)y :\K1L 1dΐ7[l$kIJU˘8jaBvTbI5Fqu:֔!Uyx֙~I2;VChUj9`r2ʤw ivG=7GvC#'31R馣.X80AB30Xr3ݫۍpE4CȎǜoGCJ(K-<)'F4/-0LLX7,N_p@1PIJ1K: wox"TbR${T2wDB91)f6t2e1%/3ûU{$uh] w"aPf3HG..X-/`}+'Zٱl\t$b*̆YNF![']f#aQm#\TTiɱ,Nf/2DΖ. # P{\%p @@pRR OsҪDzOOF: V'.^><'?O<B%8`MOʲ,,5XGg'*5sUꫲQRHNUe%'(s0sߥR+硕|z<ֻdM[yukLxJŘ)a~#qkíH[G#&<,|j4\VY2Ni#2R*ܧJOkB"|Xnټ1픺<[PׄI52S]0ӢB.3cWü@dD~=c9#dM PTx2)-7>#F BλiYZ;|_<@~r,+!,˫|ծmp_6UM\`r9`KC.mSh2>H8V[;r촛I}`)E昴\j^=Ғ|m) %>PϙlQt,gx٬53 e4ڐ4cWcQ^>PbX]DqĆ7 er7 ̊we+^oXpPZ×|'pSN“_}0sUy5 /mYc=8ެ|AVf) BsU}6>}F"^&sп?-sa%aj#x$u|LH_M} nFᢟm,XyF`5ܿԆLZJQM{'Gr7O>+]T6ͱ6Rw<߼XGq$dJNU7`% 0Y/Eyn-2b&F5ǢHuy=dB P΁]7qNL6M(%;NjڶvHelDܴZ+iH>E*pZehO~(ߍ )KdLt_C a^.mKX$a̝~QdwOX4PF505jbG3-խ*\'Njҹ?7[ܙU7n=ڑm}24h3E( gfנ>}%( Prc>.hEnJJzpr,`U8gX1!L,@o@hpa6n0 c m/ Ҩs :K#8934xjnTmI }=/V.fӵS/k^fjLB:_ku(;1E* X@k Bg<~g 3KWVSҠ%,h4 iH+ǝ:TJdf'ピl_Z^)hvU>dP/ bW6Z 8-:\e+tI;g8y\gCfNl` XHHhUt“([2L1 q1Q,#%sf$v%}KQdΩ(U̢+9BzRJL.Vc.. (om|-%2eBo.O(%Qo3=2%X-I)ٚbwJc%:f܋SOPy<$ Y-RϨ9{)z 5[j R (@Yj^yO=Z(>P6a{{˔%6ɻIaE6w M?LjҘO fb>y{K UgkȞdy _d{ǕQbK'(4gjƸ\qď>?{տ4=r3HX/I+~Zv3ݮKċ)@!{)ncke %q11@~?+ 2vt,- 7<̔Jwps/Y™ t+ao @%KgԒ9,2PdjFht7KDG=@'\S(8+2&>W@?8ԏmO (6Q(}$ǰ+,NgOnӕ?"jz~.$ S\s3tǕKF ?lHvj]6> C$B[+q|~X:U[XĬ~vm{X-kE2"d1=6fEHR`B\ox WLct&ϕH۾{^ Pb(F4_tI7I!d;'YfkfoЉ 2N;f.i\mMȐ탉S;1%S^ #aO 4198O:;j~:0^Cb "{  6ak((ovюTagd[$vm0kFUU8H鸖(kz_,eFG?LA<%lE\¥iuL<~ߵ2-?OyH|(mz wk%ϗ<4e9v|i.y2:lxW.&j*SUO %ߵvϕ Xz+ [ (3"Ȍ-jx2[5-oモ0Ny$[ -@f VlH V1@;ʐDT4؛xi5Wډo5"$ThLI?]R^}q)D!լp;'x;,:HY2)-ɽRUVD^\6o h͍4eD_/g__# kwv(3wfPkϴ⅌Jl"]NM j;/a$-gakLm盛ZgJU!>M}\va ⠽~Ӽb|Zy\(4l{q!߽Ksvvb̏oAce!lۀp`Iɺ㚁 Rאv]\;Ha_?Zp+@Y4?<w,ltW<+_ƉA׺״['nq׸@u<)a`8g ^-jIi+-v82wH|3Yx&"׵Gv')a,15Bdc@r5b8gj%^vmCzC?T)f{#Ձcl~¦BUXeWs`*1@m-C XlN1Q6S+C~3p8J"=%O@1򑹓[IwV6?W 9 >(A#(@y%⑮{9B3fDztFH4L!t}Iv?S#>Hw&lYKhق]`4 HvU#M']q(azR5C&'-WҦ,]+#9rFjc9 ')F~FsJٳ S*C P8잇׳r R͉ו!D({#cH tOÌ6I5٠fw.PׄI{@I~ Zm[sϟKPfO89F V#{E8?AlYOqC0\ "bJ(s=`#A|)qk\3&f9 ?K?)܋{Gv?ԏ#&a6|dKC GU2ցe׬{e4LPk홴""eg5U,vpA;Wcl~xz@VE D5`G'>7_3@yJ+Bt2`%9jŕOQFn s5l1[1QZg3~:F(q.V{nG T[$6@ph?^KoiԶP}۹\2lfx{ 1x؂:q%?xL>j/@YDY O5SFuNBϟS% Pz,v 'p.*Q(\ zYzoF2F=[B ٶKJD}f(HK'gZ[C=d2ҳ tNK';Lٲ1-]e/PF`.6叉M"4)צbjð O[ q5Fò^#GE<@o҅v1An/voj4p~wL^3v𰐧k( ]5}Y$F]F(*}.2K*6@ov|[J(iUK㩀~U$]"tv_CJ֓.j9KBvdh`]NI0 S*#9PSCg3?/4FHunse@aic'!X^W")je*Bayf9ɤ 0-gh/xZ0C Pw4Jx{h]sZ<SNVi Ѯ %"bs8772o쯄 C2i j*i_18md>8%8Jji=sV_)N띬W1fT(~@ oL P.kZc:'v|:mXK8,w!'$܈3. HWf\}Q!C Cv5Q-[9 %_m"Y8W9(֓[o?iZtSv;X mD7\w#B HO4.;KM JGW##b#V@t$Ky?y$S{tdI'9Jׅ]4Y&> >^Ue,БwOܷUq}w~GB r<@Y-jk8![t 8f=w:5^p7عn{_wo{gutv}q||ZQKD𱖡sO5fTכ̙\ޅ͠Yר#ļD3|s6b#h#"坵;DbWhR&`e0E-&Z?O)q 4z>, ('` XY 5K Pte2Wzάknyz@c'kx꯹( -sX7]`>}Xzx_h+qSfLeOF5&SO6gryUR6ʀjD+/gV%.ILa#"V:N>N֦ J0I. ,X ̄GVcOc<_3v^z[ʂ.&6}\EqGȀ:}5nƚj"j>t|N-WG%Y|9Bun #*FVɒΧ|a(vq8X!KsLXS*XvO/2*2eAQ/{AA͝g<8gs3}Ӥ3 Na#936_)&LYqBI^{[=z ø d>jˀLJ \;FCw*@Y莋 OTDnp/m9k9֑T)n_vi>\yQiG: y~L^Sa(5\3#ܢ7.&k~k7˻0ڴoDr9n}2/ .<'sXųb!ʼnF(MGSa!OXth#}UKGG3-TM(LT! 7hIjOuYNe#V'R|R)n vVs}dxUֵo{ȕ~e3fkn 8#aZu3ny|X}ӭFeG~kkWn#!P`7 9u8xWkf^c:~-np 5;Z.͂w;c&7Gv|n}Dʼn% Xbx|+^RaJe_[c{.:ԯDŠ粑V),s' (^(nMVL~1O h΍Y^ۻhڕ9\  rB;(s:$*k9؁\cfg9k~-؆2 nflG1%x. %ОWw&+8ѦݎPuHh^Fz(QUt_[\l]E~s g, gsC\@1(*@Yx'hK01+ls-z7m0""(ia6q5" Z U܋DAn >Eu6޻Q{aƴ>Έ&*/Ga|p}!2'Y[7Po=/- &Yxpi;s 1&Sfu(@ C (3Ee΍a_=́,sn~ܾ}Wʵ1lcqvfaqsYOC:t'*EO[kx,Rwbx۔v]Ns+"Rۛ3`e:u`ޖq T4oO=(t7Lei%Ew>35HA7+rȮaʳ%} J~n4L1?IE|Q^lؤk i'W!/<)ټD (1<[fL^4)@Pw1RjNpRr!㖫={04"HN S{מHΐ&&&3"8(M*Q_4"Dj<'$rs%MpSfI:)+7̰r So eNW=}o=_Ɉ{2t0d"W O{\4)|EvŔ PD??#>pg*%xtc4kLk5a@&{BZ7ŔI׹9ڃs^ln֞:g+CF&-6ޘ n+ ]< ˻ܕٵD;ӝ2iV@P])/5syJfg`ˏwtv[ -7O; ~M ]Se/xR.~`{1w`Y]dޞ%~gLK|K%R#X'OϷA'=. h/ 1:'"(!-op QGbpg` (ٝټD:r"={N0ü@Q6bڲMcBLqQ+ĔK[ƠsZ00/aULe5v٫g|uDȦ:vQMհd{Rn{h+y`Si$S`U)),~czpm1V"~gkK^&j"䲷< WiI쥞YdcK1<ǥ{bh+a##Mc-CVˆ)ݮ:M%4A=jx!:8Λ1PlZvXоhs<}+@_j&ܦBn&fNU7i K6֙M~}J~!U1K`<hw͗? O;,%;TdruHZ 9LtOs􆎦G[:qhGԘhW֚'e4*Q.<{AT /ߠ3d=}%gؑsk ݙ s]irΙ1u]?4w\d#BW7r~}#A v ]ږÕcT2ϚA?@DfJ QUeZ{R.wRZrY9SObF`BFӑf11:GOSjۍc$-jLlFYѷ5z;0^Bvr-t%ܓ7ffWN)x&Ww2Ia2;b2ĥp1}.L^ ]iZ] 7]1%Ѡ)?B߈s]ZJ=rqm? r>4f#h^9i3!}%7=+F\Rhybƀt& V:D(#b} 7Lo.y˰.(148ERޛd.P/ t`(ފHG%#fV]-UMoG?%GqwgVd2J6dx%'Y:^e^IpW+,,,huYkhC.ӌ]`@v=1PG*)&}^ 7-v)@y_%A 'H[OV{R96b IZvh']AO|ps~ϽK#j!ѝQ:%NU$zՓt0n_{"(=hs֒1] u)aRv7R0DVK&׃u,5^)cÓJ@Cw|ݎmI9PGR#>̡.$pE(H&(T 0s (Cxސ(8S=lugF dzBW#Irɻ$yg})0KiY9@ D&VcSòa!@zkj*;R\+qڨn5hqESZvWI8`cdj3 lf(9RtL}zm؎&WL^{cSCPf{mt/Ub9;R@)̞MN2mVAߍ- r0\jQGz ;wPK?)ØbJ(/BQlziZ.UHY2ܷH )(ډ2?TYaƑ]@iőEF٥?LҫA].-WZ71u]o 1%)aښ14.>ռLJܤ]t&^t^cWkm}uy J=)"r[SJ~z' ˱aUzz7@?ľO1Z` 1@Y1PN{jnWJC7oF$Ow{; r#*w.ulS*@xMhrmv8/_=yUH`jLTבRTtĵhc62('#d O-gmaЍu<#s<ᭂܪ- H H7vl.{= kt~DW r݆[ ze^l(iTt /OzO{nLaedc~WZ:HwI'|w†xgDs*T7h*@YX@'epdd~oh\3#?\#_H+{K78c~چ%&y޾I|sY!W=цϞ$u3Pr-V|c|u9*4J[9s1r s>%yhJdG.,ƬehAlD/A#27)5! `%˥x <>ʮ^I"쀁a=A?~y,qdRd5wrύBPZB|DaEώ8/i\ ֠*Ds#N~$@F_4L[gS%l%NDRǓ{wSK*fc~Ow5RBh7XҌ-+aUO-bbV\cCeejmi^V\}#f9)tD(rm=n_((,AgLzuq;dRwZpY _ єv, @,}2?3OlT6djJJn+3!,V筠 Iy㔴*ֳ%Ù^8gI e lz9+ 5(U"ސ98onӷ *!@罛 n_|wȅW.J-eP]6([Fn]c 庁M<ڗr|wb܀7(GohNkl}[:>B4OmbzO#o`ٍ}FhJz"5髨ďۗ@G`N&!d1~)%Tc"1FXv_e$}*u6kH'fH|kCIR}ؠmi`#~"hpX+&"Thwӻ(sяXo/l77w_kD_$kZw&f5KY뺨 z)u],1Ibkt{ kVH_IAuZu|%o#\̕OÓr6G2摅g8J*2mnRYfSF Gp7yqwd$o% 1 :iX1FXă&~miϦGAw^$i+˛j+`վcCGY߃ܠmʡt^::zhR:F;"JhވA+jՏ_JQZ&M P#1ShTsQ/uIENDB`d3-hierarchy-1.1.8/img/partition.png000066400000000000000000000644001334007264500173060ustar00rootroot00000000000000PNG  IHDRxZh iCCPICC ProfileHT̤Z #k(ҫ@%@P+ ,E\"kAD(v .l ;wwo{\a lQ'#6. @zT3׿mt4S<7)r"7)4sl.]-(+Q.b4i>&2 (lw4: ʖ._-ʮ6:22N!o55l,a:{[9tРçC׬6miCfϝiSQ3a.;piQ3>fEΰhi }~~KIY>3epnJd pVZD/i^$,cFlo\)=J&yH(xa0=tt?i>+'Bl6f8:['T>pO+TBd3PA @bh*R~NCPtF7g)"sa&‘"g¹p .+p3|<ma"^H$#"d R#H҆t!7 ahDa8LVL)ӌ b0߰T:eac<2l>[m^`q8gspF\;7*xS >gGaGE& B10B N"XEl# 'H$C )JZO*!5.ޒd#9'#ɟ( e!ELFSQRT;5MF^>~XȰd2kedee^ee=d˞!R(g %ǖ[#W&wZܸD>C~  > \< hME6ҪhhÊ8ECEbb11%%[hJeJg$tn@g'h4g˜9s>()+')(7*(VaTiQyQ5Q S]z@K5E5g5Z 갺zJ~B}5^j55S5wkբijvkzPbx0%NƘXBG{BP'JgN#].S7Ywn^*zD}~^.1 Z * s Q܌2*n㌙i{M`;2)tiL`Vivǜbac^o>hA`bj;vfignYeJ*jUkku-ZV׶Il6u}w7؏:9$8;a*2C[Wk8~rwv:sg %ͫ7vp2\\JܴnnOuݹ#G=^yZz<.^vrr&+i%f%ge*UW X]Zcڼծ'O[ Emؖ.oeEw69o:g͖}[p Z~zGK~ܖg;p;;ntY[$_[4+xWn,sض^^^IIPI>};})M)(,k,W/Ra?w 5|n_EsAeaO~bTWZ]XFP# s;~d{=\/=h1c ~}"DIɆSʛhMP汖Ik\kmmMXRsFLYϑ坛<{~]Pǒc/ xe<_qrטZ_onצ7Z{{wp[[ݎ};ܻ{}?ău =*~7%ރO"< =/yOOGFY?;3;|/ѫS=;6Zzַ*okپ>ć*k?1?u}<2 KWm=̘EVANNM 8;@MOBK;QB=4Q)K`iCY6ӵ(~| ɉ_fО9ŧCPc[s W"LBOYiTXtXML:com.adobe.xmp 888 346 ҍ\nIDATxk\ @Bn@ [v ١p@38Ti9kZ B+ H|xFAY-M M&@ T& D@*D h?" DQ9zx: ɞbcܓl u:*_fg+c&}[&jt-Z{/cnt'IcFGs={4}R>ݲ}4r$ɏfd+{0~g+3u k8l^%z8Y-6v ]O]?J{և$?w͏ {htd)l{ҧ':'=JHxbmfshC^ăs6^7~BUDZ;i}Ɣmk&,'Ggb~Gէ=i0Z~ EJp,847"’.FWԸ!^預"Q}{[ѕ \XkZ%ۅ)>dU4уza݆F0Ă%X4观z4i~;~*\4ٴC F Xƽv޼?\NP!ׇOX1^d[>8No!*q-oc%t*v$?|z}=h͎lW>] mӿy$~ aF[tS[ZϏQ};HLWo{6DGdИXv&OPkD/c*ƈTavA(|tM>@wʌ!?TQ)W-2}4g,q~a&εy^5?:^'vCFz cgo{miCf5-R4[TL`{ϥIR aXdVr7/%~}& i`ej8oê4=c{t#cMlkz[ZFP;l IĒ$r G7& zaíU)tVŤXkg9'Ԕ8ۂBxciWqqu>~=Jpcd/Xw{جHC&kY'֘Faz6?_ӧ!yrEfOu1:c~y>͆{~?7xzO `&A[Ҿ?W/ftϺVCSp؏e&/LGRtНocH {, T LpQeG i.4047Y*zܙ z ~xeqᡂwY leR_R0I=rx-?ќDv:=b]G)B~qC"zho)\9nN*M*\=#<,ULbfˤ Y5M{YUb*^uW$IhA֒ Yb ~|L+Ilz)w讍[ZأG9-H+=ZU؉ qp8Η|"ih[Cݶg&=L?Ok,㡣T|~P:c\l0zP5?a~?jgCuߴSj~8)O4XGQ(^A+M u֥Ur68ъ; -K/<Qɇ/[DJrِDpQF^ciq`xB42C\̸9!gi\_ղ~Pb ?1A V_5Gsk?jOu~R~Xl^ǧA2@h*L@+?6(VM່e!r F*/E{I&u2sVK1[9S~hZsճ.ʛT9Ni笻Vf$$+U;ji4/],]D34,s4ݸOJjS)0;DvU>%7D=ѡǖQrU~Vo<6N|vaI܋VDsϞ=(-;i~hҝˤ2wYM3Cgܣ18OGS ~K, ?uWXtU`Χ w~/|?9O{DKs4}zQ/0edžc~7]*h&ތD>Oiϒ^/&GQ$/UuPb~Z ;?G_52YǾ><F;gp _𷫇&D:e5ι'DŽDN4)Y_Ng'Ms.P#9ZF7/3y{ R6Ui$]s@&:'.ل_Mi̭q򦻝t{}p|F'XΞ|ѡg(*=r~_3~A)3eЃn,'bkڟWî &$>:np/[Xq/۳-3<4!Ƽs&_ %$s vV%QV'5/*Gƞ,D33j'M'POf2UˤIB 5;rIQimĤT̯)ЭX^BL~EDNp]h̒.OߝcN{'b ~p͐,gY;im7.(߰={z˷ۜ;ŭT3hG픵?ºw~HlC26};}e۳e^; R@s.`9|-?9dԝT7r-6 wbWWA̽3F]?0׼X;ӝl} X_Wo,N|މJ5FG]E ,`~H9Ŭ;8Kq4&y>7M/dhpųH?T4Q @$R (M M&@ DhHh@4H@4Q @$@*D ~D h?" DhH#& D@*@4HA$ЁM M&@ T& D@*D ~D h?" [e},9_*Х=7|4_~T7GhH%EGH"SmȬXIB2gİ-R_w4.Ԛ-IodNtR_-=~7:_p^ےUG]i4wͻbӃhHf2X:YUd\$^0qR$[m0l'c^ЪKCu4Zb l,B9TՒy<+c$c:Se^!+:}5StH$m1 `rrQ@`3yed'N\+})-HD Zhj;|>Wp)D@*DsC4I!oJ́l21)&l}ΥIR 1ཏr`WDӰ넬&JӣKĂNS6X{4+3E[83Q&Eȟdq5K1єbY}V)Nv杜sNM -JOx(⹜v;sy`O!@$R $ NOĴHXrzj#PWCePRN֓aokiF\b*^uW$IhA֒ Yb ԭBD\> =x"Kp Is b]E&hQN iz!ą][kjUa'~J?=yM E'SEoZHԫ!zhbY?TFC\8F'VϝWfdeT[9]'%=T9uWѬ\TvjGmwU2#'wMw.7ψMfQk;/zqMUWXGOM e ɌIqcRDp.6~/{4ωÀw[}ӪY2HLi|d,o+ ݪXx^vɶ-8ruAR u^FB/ѴvԻMr:;`>+9PN|O!@$R+ңɴC' hRb H:0&`|@HLb:A+S*CL6Lhh+3)!Gl$ը4 5=?3Ҩ*dykh"JqZq1꩙%]I;M tNE7#y{x1* 9pXc@*xI4_PL/;1V}MZa'[]?Xnkt&[25Kji Od>@$R/[|EbuS>B4H@4M M&@ T& D@*D ~D h?" DAhHh@4H@4Q @$R (M&@ T7@4HA$ЁM M&@ T& D@*D ~D h?" ۊnwd.W;LK/1n<}iz+5*/ZX 4klπ#B4H¢+R]ުG Kדg4N-$/xd,ɒ Zcd}Qq6y+ BT eϥEykպ㭼k-~TkrWݕ D@*'F$r͝deԶAݫp)Ha)u]*cn%N$19C:=cٌteFXQuKi1Ӝh8?`՘Ύ#$U8:9u(D UώjglFoz!l _N}H ejN\ˬi;vzf U_y'HXyiWra1M hʉ>/,*2u;uDzwءѴH^FșNgj_s?(5K!2tRZ,5\8%uBbK[vDB2 IHd6bLsA!\f W"UO 9ZZq-ܻniҢÒ tyzێ|2|:D@*#z"R~A4:M)2 s'z74*Bx)^$A+2e,dFSkY .mkQ,Jځ1/LR奚ȶ'`.=~lPgꋂVa5%,E3\ꌽ9tǷңմMtkmxn@Uۉ C4HY29[|{K4"ǔ}c>M-6rfK19U!d_oQl8_M%E, :k}:KOjy6./E3l&z K[/YiWrNwm&@ T?K46j !qVDI\I^jZ5K|3ay9Ⱥw/,N,/e0yBeS[fH"PUÓ;!t~hUUܯo],/h.DS-˙,N.i!xմ`蜚wB4Hɺ`IwSKhRikQ]hGw>f蔔ag7z@W}:у#Es7[*Ʌh-yj&'%˃h dITQ{Dᄾ1<ϝ$(̿cI.Zu1hN vߝ q9R3E6œ҉U3ՙMf :ExVˉhLfT4_p[-WAx3LelT˔E1M9*),l{?!j,Iih,:sJ$\tv ZZq/M=eB4 Tr;b*^uW$I.U:rdve!rL5*7AJ[&&7}!UgNJ;ZO+˧ I/h]OudT*DTZa%> 1X=O͒2Çx{߅*bg\`)DH>gj#g*s1qTo[scrnGnqDO|;3M.<[ DE{(/ݻH*]OX;T(-᝖)k;M-T;ȼ;=TA4@ T*Z5;^g 4>|d8ƯH:!Gl=79hJ: Cgk z]ߠ4 JSrv)I5* ѼyKuhzju*[r @$RN4kiWhHhRY-BnB?_m!۾a1:YhU e7S+2TuY2/S9p:I6"١ϩQ]2~ٌ,5Ȋ݊HA\]6J5\`8d|/loBc/K_xzzJkλZi焝Pø4?NO!@$R cb}u9t Rfgn2eJ팤T5K&m*I_ $UN ܙ/ZaS=uTNk3BIM7w\*'JlTlKI"}˓`ˣ[1]W4fcBjN9meYHu=8B4H@4}giUEAߤԼS$K _ J&b*^uW$xӉ¾Ғ=CF󂮢xB"v/SU'uI>N77GEܬKcvۗ7m2îS\tRL|9F(iVEe{wR>hHESdqU1œ8F'VϝD9XjHʔ H0ngj#gtA)st"*RaD&&[Z΢rVjZ_Βt[YlT+ţ[9HM_Z P_B% M M~KbrD(M6}aTcż(?6ҭU$и:u0:3&;̓U)Bs)I3ɐD #afB2aeF+<Ԗb$lH$yGS:i+?M pY9aDS_ڟ;GMet4- )v1PЏ4c&E?#Gf]uƖYQW3>m*ttT[ RU&$MKnV6؀$*_:";= T3]syN\=%>S3f}'.Nwɂ ~D ~"wRN CtzXy9h{/-[nHDvm{^V!/%FW[76yrNqMD 濤7@*D3mc~ @$R (M M&@ GHb$ ~D  "<hHh@4H@4Q @$R ((M M&@ TR4}~X+gPE #+澱UϠKJ7C;D@*)n?Bȱސ[RKDN,ڐf.ZmO wZt볛gH>TB[* ~T:t[KhHE3jlh\Q %&~ٌrQȻKJM_WVTgͲ7XD*TV͖9[]D>`/adH DEFӴ2ݘ.FʃՍ/Yt;ْ"˳|ė\^ꪃzq9+9ᰶᚾvP.f{'.kG]/vD@*.$ղ)[WvFgnRD}3ՙR#͒AhZ$V<ӹhfm/oupJ3f.[@HycIj9-D\:-]mvS4ْelY胭F7 +[E9K7rygGzLfvhyYZøV(#&@ T?[4r9]B});)yi~3-WUڪ F_2)r7˕npm=2;]ѢgWP+}9rZG/.˛bQW B4^v[qaN\;#êwy946fPa=@$Rx'Skj&=_ҳI3[Yw-Ѭ\)u']JUY5jkJwhv;BF]c۝(1+/|_M%wz80.lT3\[놕skقhHh1kM')va.z4#Fh81u.$_ D[4 ]M:cgyL.$'wKE|UIBuW3D0J>Ko7Z^ϯϛk,.{hH@$>ߣ.ާjqj.| Ḏi3)V3BIő,I!SLVUp1JHLtsMf7VUIBHLL19'/-;eNw_j| Q>]ƴXbLZ8̙qAf. W7Ds#&@ T?R4_QewbrK}vZ5?S fJwku?_`0&5jwռgh?"Rh;fBdnn@$@*D34?B4H@4Q @$R`&@ T7:PУ ~D h?" DhHh@4H@4Q @$R~GtK#L h?" Ƣi&!֛>cyoQ*5obNy-!@$R~[Ѭ(pn'c,*"nGƃ_eqL;lzz<ѰՁV埦[e>uRN\(.<-վ; O_, ~D _"~/t1Xd59hTVRШhM.M+/wtTr^i\y*9o/&Z;NA4!@$R-|NJ;ZO"MWQnifJꮈEDn ~D ,'SBdpCIQ @$R=`&@ T7:PУ ~D h?" DhHh@4H@4Q @$R~_t'%{旆3жI>G(D@*hjejFȰMB,-ucƪՠ:iμNiS h?" EsrY䎿}nGƃ_ԙΒ̵WN.Gq'tX &_bw$㸰ĵݗB9rRm0H&@ T*ӈ;TђD̯R;#zYV_(b!!Z[gA$c%]Z5Kgd-ޥ>O`GhHrGs1r:5$Bu"X])Վ/_d'z6j=Idx*DyΧ} RT1WDD.OvYyvw\Lsu4QN Rsb4;LY70H&@ T)Hxr&Jgb:A'T4EuE4YϢӗDsB=5zb܉-prLy%&I?x]4EsѣOmEr,R!Tѵ h?" DruAظyvIWi$fI1 DS-gND6#>M6~K5!F`A&4g] p=_\v? zL'G;(ҪhO͔kY2k`ѴvԻ9wM&D@*OMx2?!ٖ1Fk%JLg Ivvd?h*zFxcC? /]oIc~ekhOb+i\?~eÜ|h깘;,wҧNw[M  h?" #6M o tࡠG@*D ~D h?" DAhHh@4Hl2hڍ)~W=(j?~帏oh?" {'[NawA7I)^Vȉ%W7Zq =QxKmX:{|kwIuTgКA4 T'?^&YDϗmIP ۊL4+v+ʦ&2ɱ@Q酳L9xD9ɲŦQ,;KL7v2*$ -JIݨݎ E=$9PRBG5qD$ZWo'.(3*;;qKwȞc9))[MD f^"Q1Mc,7Jb*%v(iYGw  {cO3Ir"Z: ֜:D=na% t%]C,#m$h(v7{!.Nsj̥CդםaNu @*F<@*w}AA&@ T& D@*D ~D h?" DhHEӝ<;O8MbtFh?" a[$jC6%L|ϐD+ QejfAn?gQ@ּ+6C8Iͫ?= ~D {f.R9)j.y*eBl8-`=HGVz{搸_([{2tq,%mEp1{PBu\/~~7Zf*[}5SdSΟHD+HحٗY_Zhj;ZU;y2+B4H@4Es<ۭgt,KlD_:-]pڄ?XHgt;3-ټbϢX,""˼6ɻb _,qCfV;>=Bd-\K`rȟd5x"Q۴~4@$RK$0RM M&@ T& D@*D ~D h?" D\u~D Dx(h?" DhHh@4H@4QP @$R (M I$U@$RK$ЁM WhX@$RУM M&@ T& D@*D ~D h?"4p4{l4>>Wh%3 btҍYM. `D*f:!dmag5yF140 '|a83[C i&!񺂔TBʃiۏ:ѝ~֯l.QuT'Y^n ZT`ME&dtd)-ɞl$|DMJh+{hXy9*Θf//8i\=j>x;^'XI?ԍ)ddEݮT"&St(^gЉ$4f2ƗX5";Ă%"١A#y^O;暾Nvl괚&B&UD9sQ3Siӏ{{hK4l UA^ևO=e>bSR߾?SLO[hBd.|>͘YriD{xVˉhQ&Rg.Ld`FȗL7_/M=02uւn_>xzF !V ;hΞF[Ƕ=u>.>>6ټtGcjOȦ[e 8i[eуiۤ_GҝwJ䐨hbꅦJ仾#GfX+Z|=M%RremE꺔\ąh^:^nNMu'.ݸ 5YzN< ;!D*"~[֓W&I[ئu~___ghoWEsL39K-k9~=aO299艕os'bʢh=ESIuR̖bB4$+[-Y= PWE [;-SvX/SV{4)hX@$//lX|z_OxUУi:4g{GJ||a|K4tޗ\t4V2eAy/aCS쩟* W\q=U>lɥIKiD6Mx$IBu8V - .ɽӖx'q:C:Qp$}~jhB4 WMḃ}`YO9I_ 4S> ż&}7R+k}lrzh6 (NZ-DјH?=1N"sAf:9Vr]4<|'dXf;lP;Ǭ;oCr__Y;i0'Z `G*f/Nͦӿwסy}!q/+;st"MW ׀~M7q:-6Z7hX@$RP `Hh@4H& D@*D ~D h?" H D@*Dx(h?" DhHh@4H@4QP @$R (M h=P}^ >(s~z}:+<_h?" kۏDڐYda[пt=Y li ![eJ5c(_tX+9;U__}[W^y фhHxHhH.@ z4H@4Q @$R (M M&@ T& D@**b77oQ񿦦qiڝ;+!ܞ ~Db*" Sz4QУ h?" DhHh@4H@4Q 8XHh@4H?!pοh >+??d5>8  `Tg0pjxmOayS3྅hId>*r8hmm"KպbI?RY\?&%{a9ݽ]:eWz6rnz㿦m/^}r&L5o_3!YkL; GBh!Ȓy<olf )VFJws'#.|9Xo L;,lfS*v+j$25oe3WX]gͱ*N0.|ѬjC\:w[&UDϤbPLڽ{ "QF-M a;G§LY\zL.r;ge*9fhsld·zo!C:?Wv.R]}PZ 5tT_ِzp7#n`o@+%:#єaz VRLd}?~8z^\ ;/ {k';ѽk>%yOEr;~?b2>{,ߏg':u~Y?DAA&UDh>1%Rb}l0|ī3L+J.SzѼfi`gEso}6Mfκ4ÅY*MsZA&[?fB4Q V kbh% HmVOVz=?[60ip{8=cM=VwϞ{lT>CaNZ:/χӿӌɷpt=y{bR H_)3.z8kU4]VIDN R] 4 dJ2h|k|Ng\4Es"Aq{J8t~>|bo& D*"~T!7Nkuf|B^۠@~qsD `Hūj;}1hܰ?gXr|xD@*D3a;9LOn^zڦ>Ίm) D@* pM %CA&@ T& D@*D ~D h?" DhHmES;^mdxn{qB4H7h?" ]"<hHh@4H>C@$RK$ЁM M&@ T& DR8G*" MhHh@4H& D@*D ~D h?"mF~8}MwRjOKyOKJhX@$5!>B>f/; 1 Q3_]ԗxWmt?-h:ztUUƽ[Ui! ڐcI$)Ss&z?ӊ[tFȵoSUkwZwSX3Yݬπ,B4 H#5LźGGqO,nlSB?"IɾƷ{ xKmzk]J{}.ȱWuη9ݽ]dWxt{<:2l.Y'BJDRB: xC^t1:u " != :9|0[;3߸6n}<I0#%?(XrlQds6(ٳ\)m>v7vζ\SxPdke#=_d&s3S _I58~$l6^Mq4gENfM[kn$:ȭfMyFr[L7GG4nJ4><*WH4SѴdC/}@4k=|嶡7nyrxIvRfQ{ᴲNpx}<}(ܽEF8SpjfL#}g2X5t,Nn G\Qr͢M M*H3qlIA4 @4)&R&h hRM"~:[Nukņݫ{Tk]ݹ3 Ӌyu @$T?A4kizܨ6w_Mjm=t+o gn3gn(ּmg?P/zPT7 w DH|h:jslcWXmޯ뚦m=ai^ڶNa/UR{9TYZ=Y=9)u>n/WhզgX7 bcMZ8~7d՛|-S8|s-\_S|y-mf5nrң˞YM @* `v"HpK"M"M @$TIA4 @4)D?HDh S,؞EZgvD?H.,oX G4)F4 @4)&R& @*Ѥ &R& ME< }ߏ&~17*ja#vm){3_R;Zj" X g"25MK$Eq:"G)M0| RcǛ7aٽ^ҴrS/;z֫^h,m)ߡtBW/V5m7*.w^>p}UKC~I'W:mѪ_gY뭳vZ3}ZgW X R'370tLǏմ0R'B#T}ش;4Ήv6u7jeW2S8|O~s843-ѧa-*Ybq_}sfj9[SZ0Ad.ﺷ)m+*eV50ޠ5S>`Us%{.^)\\G[m W;~Vۢي0{օfڪtԴʲnQJ8aؽϭj9^X/Z1,Kɶ8?<ՇJIljȫԗ,U{$ݏºv EBlfzk\{52Wrjn/'^{4B4"H*B]c8ژ.Q!ESQ5p G#+3#C'3BџJdjqbph٭zx9R4]ů-4&튥VJ޶ nIԲf*߸+eψfiwl6JNoۇC)Um<ϻ8vᢣx홳:W¬YsM4QBV2y}XNKTq2uLóhR(hVD*Ǣi'$yt sk M]]|hB]MycE]j>w!IA4"Td#xdu$pNnD4)&`@$T|=Kc"D?HDBA4 EZ3o]/K)_TdeO4{j\7|KQ!@DH`y#"H0GaD?HDh hRM"M  @*Ѥ @DHy]զQo?Xʠ88\i59៬|ݥ{_t'k'k%1YT "?hX ]IENDB`d3-hierarchy-1.1.8/img/stratify.png000066400000000000000000001011361334007264500171400ustar00rootroot00000000000000PNG  IHDRx8\ iCCPICC ProfileHT̤Z #k(ҫ@%@P+ ,E\"kAD(v .l ;wwo{\a lQ'#6. @zT3׿mt4S<7)r"7)4sl.]-(+Q.b4i>&2 (lw4: ʖ._-ʮ6:22N!o55l,a:{[9tРçC׬6miCfϝiSQ3a.;piQ3>fEΰhi }~~KIY>3epnJd pVZD/i^$,cFlo\)=J&yH(xa0=tt?i>+'Bl6f8:['T>pO+TBd3PA @bh*R~NCPtF7g)"sa&‘"g¹p .+p3|<ma"^H$#"d R#H҆t!7 ahDa8LVL)ӌ b0߰T:eac<2l>[m^`q8gspF\;7*xS >gGaGE& B10B N"XEl# 'H$C )JZO*!5.ޒd#9'#ɟ( e!ELFSQRT;5MF^>~XȰd2kedee^ee=d˞!R(g %ǖ[#W&wZܸD>C~  > \< hME6ҪhhÊ8ECEbb11%%[hJeJg$tn@g'h4g˜9s>()+')(7*(VaTiQyQ5Q S]z@K5E5g5Z 갺zJ~B}5^j55S5wkբijvkzPbx0%NƘXBG{BP'JgN#].S7Ywn^*zD}~^.1 Z * s Q܌2*n㌙i{M`;2)tiL`Vivǜbac^o>hA`bj;vfignYeJ*jUkku-ZV׶Il6u}w7؏:9$8;a*2C[Wk8~rwv:sg %ͫ7vp2\\JܴnnOuݹ#G=^yZz<.^vrr&+i%f%ge*UW X]Zcڼծ'O[ Emؖ.oeEw69o:g͖}[p Z~zGK~ܖg;p;;ntY[$_[4+xWn,sض^^^IIPI>};})M)(,k,W/Ra?w 5|n_EsAeaO~bTWZ]XFP# s;~d{=\/=h1c ~}"DIɆSʛhMP汖Ik\kmmMXRsFLYϑ坛<{~]Pǒc/ xe<_qrטZ_onצ7Z{{wp[[ݎ};ܻ{}?ău =*~7%ރO"< =/yOOGFY?;3;|/ѫS=;6Zzַ*okپ>ć*k?1?u}<2 KWm=̘EVANNM 8;@MOBK;QB=4Q)K`iCY6ӵ(~| ɉ_fО9ŧCPc[s W"LBOYiTXtXML:com.adobe.xmp 888 312 dTuIDATxs֙߿#ڑ7;YtflIٙr3ie2o )vj Nd*6dal $XE)1d9,(ݙ=@"Ex>ш<M @hM&B@h;FhKNҘ w܇<iŽ#0Zh{{BӔ/zyaҩDG @h鹯 '|c8:6ۇb;Jgf{==x"3D=q?ӗ5|\j&/e'~' _Ǐ/,,45kkkhީLD3O<IbNagg b˗%By<JDxHZbv|}i$&!T*!9D ʵSF2yY6UhHxح-zrNx ,Ix1w>|~m%Q &l5y6.;Bo`|DfScTQBsSÿϿ4˧'2cPh*-Cv)_3gmiԋ~9҂O`ç2Q!>z(DrżXry*D G*,W-!7 wN[Kh.--?v\e/ѮMLӖ MU^ta5YϊKun(4U vxnW2sX=֎HG*ًm Ӄ-]ݵck+knAgJ{!D"JJ]R$Di_z_ϞRФNϒ$%kmT& 9U$bWDև(藁D.ޗ7ȉZ~[b|R2m&͛B}iZ_p61|ˊK<.T^\ `3Ֆs%FzJPTCA6Vq XcDAE@?lTH\elvKa6 NJ 'b@7%pۣGդ=d$y0cDQ@0R:&Tfd/D=sF2GW_h*1Zd&|-ȥ͢1Uwe>%3䉧 M{4:ǒ1$h^KN1(]YEbkų_\Sٞ~C͋>HPZq;TʾEI.)҄v"0O_W`})GrBS 0ia,zBsvvV/4) 躱L:%EgP_Ehv+c}]3!x6@c7)q9>DH"c\TŠ)C*̶/%1D7i M,5[~Th:`dMh?PZI5/r1 [Qh"zYVS_VESmM D=|)і'd&R+NF)0Fmd 'Ehܟ]H \9F SCx|mQh&4B|&ccg_b0 qMSnc*k-+4WWW[[ZІl8).J`?i[zu_|%Qz{~)qxsB[~FeHGIi7]ݻwo> ׮][ZZ?<$kJ߰;Jƪ,0/AU֎G=9-^8 Q").u,ͤѕ_$WfJy5KM jNR%O 2d Tގ┻طoloÇϟ{1 ţ$3NMM]v~>%͐'T7қQ M6%FzȪHBeZZK;-X0[rZvd `Iϳ}C7DQ$^ܲ%P<=x.yӃg2)2ﮭ[[i^{T*4Q( WwXLB"([=>*$ꃣǭ CšS:~(NtP{Aб2iz-EBJ~ZRvR^Kk "̎'_M<ًG'yF(>8ʫڀTnlxyD=%IGحKopG6,4% RKX$>>7%"w4$F0SbBy5>,f.SMxR˕-9$Xmڈfeq񽁰.G@VP0*Q[/'KZ4fԶU?2 c}쯦/I=_Q4xk<͠(g+@$L{aCESpX5Rb8mp\8F#U, tTB$~kR^*P J˲cQ$r-62Bm c|P-[ׇɡ%?|L^Y쿲eg% ”^]x}:m 64-֎v+#- A6F*eusҺDC574hkiin:''c//8VիW{{^ Pxt景gp6?Zdޣa׹WPdŴڭ |M"㓲%LNѵqlq@ւeͯ~.xpa0(c&TG2]Fd(Znl7gV%\T9[.%!CJu)rٳʺTgqxZ'4O.ɽTRgz IƋ0}R:T&48Ӊfml:EٰpcUKI-EZ J,<6]h³gbt4u,}#C\|\A(YSeF?IRYfl\P$@_aW*ED4`.RSKmt(7OXIGdi&RJ,;Z.FA9,+Q['SfBew}rbb|{_thhzǩ]'|1>땄&` KFB[)ݥ 1Ƌ΂a9r(f2zg&f#(GWT14r]U1 MwQ&KJ*ŅU)23adq+)c3gN&B͕Mhr쟢~LfγՃ^hPg;z qo.ݸF]gӸamHDO%RQ** Q@,I+{B4t+W|TxM2#J[p Y͆tff}뙙q Ϧ{Ҫ{k MKCKQuɡ:fĕ JN.wJL.uuRh:yٰvHRTF-aeTu!]+47`{rB|GfASP8|݅}9[W͙辰|PhEM`#h, #tn11@qy?c|!Yɲi=*+l(]9e(ڬTn&# (ʟeK{V& Jh:zV QyFa*4 "HE;OƣeR7u m' &UNh:Uٰr5Cg^+(c%ZVq^h:hQ˗~q-}|ww}_~WYO,'ӣGi7Tn2,@S3b}8!ܮ]|QEFhݣ٭rY{CU9Tjy5,˩M4NlXlTtjrXO'ݼhR 4>~}P77w>~}sC{JF2myF[&秅m\ k;&SaͰǡ MVhϧ.Osb c/a-/\=(v쪘Bi_雊oa[_Ll5v4mM.  hMϟ;0lG&&CFB>nRT6 &B}]rq[Nh 4&BY}n;Gǯ|wg~!w3Cx4fgGwq@hfF>a]_s=πZM,G+@߃op('B]x>|2rwE76L:h؎78%E[ow/>zNA{+rF^ "=5yaoG'FspCLϽ]w'vq@hܥ߽{P?pڵ%#J6.Dqb%xcUy,0/A Vx]F")Nw:u?+l}U_h_׿>~xaaq,'4o_[[C[8[ájo;~P}0T|tci&Nw,OŧSrjÖ_oIw褛Xm)O yBb{;rw.oloÇϟ{1 ۳$3NMM]v~>bb&y_'-OޕkLRbbcS%=dUj>B#↍*BHS_)_"STlsFBɓ'ԶST}(BCkm9Tn(korgǓ3C^&;SfP{!|&4<ۚ{J/8*MB"۝*oUtӫ-TAc#4yǏ p9iO? o|gtt/k^ )"V0N=v]R'3HMΕYIhV*1ۗ(?~#2褵#Qjl9T͍nvorGC7c#MP)dű#ɣH!qZWR3Koƣ6Opٍ4H7IRm XiЦ _hjٳggggz^л=h;ՋLSB'4][9ҼTh&pXE Q>GDO}ڞP8T2H@qJ6"v@0"j\//,#BX *>2"WB9.G@&R?N=: M HBy Hν>/;BnfG3NMj#Ʊ.\ HKf^٭KopG6,4+x$>>7%"w4$օ-ͺW;MjKU3W⯷J$ Bs.>Dv=Q9nhV6auM` Mm]]]r}v` <4Grw'pzLKQ D´GR"r|cUǥĜSwDž(:fqsPgA/C$Dg¸$xQoXƚ06j4PT$٬o"Ex]qDl/bhw)"(hˑpL>ʝqjP0NySm+UP5UGhZzKqF.ržдBHJ/`q˕Sp,Ä8jf;Ԣxpa0(ƩC6u@!$g}7[ UY"wO˝=LTgqxZd7m}مřܭ&7B^}.wvOuJ]縩J3hBRulr2\ Ma8Sf[/'K%"JP-fIh³gbt4u,wWt^ވ4AKưӡ=//Vg Oє MGFپ[LGҨ-(:&]F[WVDy-J(4Ç透g**Ҥ:)5u(qP911տ[?~qj& ,dY"*D]:1^M3 rb($DS,N!1[*BhWe[)&B8"74DIی1Qtp:8G4[ զ MKܜ^&/\l_hS7O@*:W?Th +ǩE2ߺ9i]-1.CwBB3N'iq7I):fgtXx8V'yV.p:]yڭ'ΒHEd(N,/nu˕Sp! ֥\Yb6qVg]#JmJhjU5T,:M&d0fmSMІeqja.V1ǏygPW3=︛{FFFfb.3UfVS-s>H[L :%J #x$YƧZ?bEYE_J>~vNE1[WAόRm4]L;au=,Ro7{?RY\\,y=z4FSFAq+SvG] UU{4w3UPÅ5OW˫ƓޥDF7e6X6*[uÔE9n^R 4m&4?~/M;ig>ѡ=%3Wwj(zC_JjW2Ljbbm`mR6vAHaM`[ sc߻8`g&mhuI:ij0ya8ra7vt(X*Uej=f#I鎎_]l˾w.˵ft0~Fhg=j I&B@h 4֭s˟|7~wGrq[KhF0Ϯ/'dޞg m) ` P%kptmzu_|m=Gz^8<9}ȍ9Ryw?Ծ/\vmiilMSJVV\ļo*OXk|qԓowaTHKmK3tct*.F~Y&](5pYҶzTI71Z*߃ ~Z7lM(N}>|]/I5H"k0;*|5$g/$s(jRee$6b/۰T$H->bۆr@<ߔp :(Rrм9Ҫv=ݫÝ&Uj i$4ˆfeq񽁰.G@VP0*Q[/'KZ4fԶU?2 c}쯦/I=L$3ĉf =ڰ)R8yYqA)1{ F8.T#h~ԑªch |W:*o!H4_ŵD|)/b(eZ XeYGj1v d[hP[bm<ϩ<*-wr<Ǩz#,[]^u&ù4=CLfWLښ1.L'j:'듸]s*]?SuΥhVnݩcەqUVpcCӲa8jO=R0dar9,/Q[7'K1PsM6#xr2bmm]zEGe i[V% ν"3bnlk1%(gr" +p&f̵/k~uLpIŃ{1^G0!Φu>ZLwVQj}7ԟZpQ)nH+u֥]Srgϲ*RўSgԧ=,jfx*fNSHY yMXn"4͓NhZ *?_H.0VкDo.RDy[`Ӆf=9-<{/FG#]72tʕ˗ 7?TIpCO^^,:]6EQ^ *]{B?)RiQHi6#ŵwOIEeuSje3.ev+9MvRTe/i@crKt^hhaT8թN*r!3{fP6LG$Dy߅rXV>NZh)dCc5̈́f/:3WVb^3Sv\V2LMcU2@m MRTm҉rxtyAhjszZ./ YiR6GIpPJI-YJJXyssse!8X^I%.~Jd9/™o\ZN%SNmh^68QrXD9i]AH` ͍,؞\j~G/=YwԿ:fco%s$T~$Kc, T<|!FX/>)FbH;cd. ~-pS!k)ڗCrXDoݜ.ѲB)%oE_;ow绻o>J>~vNE1[YA):%x8k )789ZGU_]d=;Й*z k7捂SRwWl*1HkeÊeU3 Xz:EK& 4$᾿qcS25i{uf32>?-lZ|T8u|MW| m)xa M_EAKeW|BHJTT} bbqlmR6vAUpEX@@hg~~܇.74لg>71q2qC,즲(4$] wl{w[ G'rB 4sV9O>~l;?NםK1;8KB3K4: 슼nO֞ynrob? 8^ixC8),{ NN?+/zyaҩDGvq@h(y.z{~)qxsB[7s`鹯 '|c8:6ۇb;B.u|||ݻ7k׮---Qq9E (1Dd x xO^0:IqשYaBs|׿ Mc99~څ濯zU{)[2鉶KmK3tct*VNP5'jK ~Zwuۑ{sxc{O>|x܋ٞ%yvjjw٪3L[a3|)[J U tLv걤JQ^bD^ܰq]Ei+EKy@m}Hh>y4W}y`*дoEz` Yqۭr-`;Mxzf(dtYd+rSt8|G35VI7BՑz<L9B>~ f?7?ja:Uz}THǭ C+sAh ':4x h'r!?Ih #rRZJH:"% ҫy).r%h(4 +r hI Nkrˊ@y)(ԣH^д0$(?݁#@fv;ޡ\Ǻxp16 },/Uywg/۰Ь}Vr@<ߔp :(RrVzN.~2NLNj}ܫg?Ca1DKk|j.^kd0Yٰv)k֥Z4-$4wuuզGF؁Mjzz[45OHhU@k<9]UX} ãO+'Í MˆT7LYoݜ.V!FX-%42>>^n:''c/8VիW{{^U/*#1ODu!ޣa׹WPdڛXQ<6p~XLvܣ6*pԺT ,d!U},=^ė]=iq_ ^+PX q6+: wEE_^'`QNS+ژq*!<˿ݪ]/4ͽϺK|J\YVe]*ڳ8<]Px1,fɟ5KmZ﹒@ M8[sJj*ӈKj{*/4^ɵbMsZ&Ýд(S0erҺT["R%bf=9-<{/FG#]r:pJg[bz=gf~ނ X %cÞ ]pOAQpL3Jw A hJuy#eyBl_WPJ-&#iH.r-+g+umutGf3EiRQYZ9ƌx2cUPThxYRTe/1yrliZyԙXF2~$x8~y! SSKmw|& ǺVC?+ SǩE28i-![G~^#BӮeY]wvw-v{ ]?8帧9L~#aeX>RQHWK1Ƌ{iXNWE"~)-BQRKq!4VEXݲnie$K\m(:W8uV;raţLhۭڅjSUt⭜RmqO`1z%~v$:ۥTO/{T,4ɂl4)VS0eusҺT[b]ʇ,b%%f3gN͕Ϳhlb%ܨEY٨>Iv^cn~K7N!4~v衳9RY<ʆj"4-"[r*\u:WxMbaY׈Rv.Zq(ƩCU8p Yۭ*Ϛ6a)4\l#/G7|Q Cx['Pxe#5!Іeqja.V1ǏygPW3=︛{FFFvsRz">r$ֳ΃i<.Ie⏤XQVd Q !#KBx,^ ' ç0ֽdC,-[mڦ}تY+^bIٜen.N/pd _y-cl( 6P3uPl015[ 33c4MMUְ>K[LrKZu9ΓZ]xnY>_[;.$RJ*1|ܥtjCa8 SF~NZj˨nMY=p?ۏ#_zrA>>uҳ_ffaq94 °H,1"|aI1B߯CRY cHilZ@QSUqCP?_ ٲk`jxx{֭X "f%k \gg-rozG嶓@%BM6*VS0eusҺT[U?ѡ=%3Wwj(zC_JjW2Ljbbm`mR6vAHaM`[ sc߻8`g&mhuI:ij0ya8ra7vt(X*Uej=f#I鎎_]l˾w.˵ft0~Fhg=j I&B@h 4֭s˟|7~wGrq[KhF0Ϯ/'dޞg m) ` P%kptmzu_|m=Gz^8<9}ȍy+/Zh^ݻwo> ׮][ZZ?<$kռ{+1ʢAx<~VZ;*koxb jjR[Lz}=X])J*h)濛HA^?-˷`W ͋( p>|8Jr;k's&P̯O=%ITl X~VF54s!"A8 Fͣk)BCk-jcU/ %lOɝOV Bȣk4KQlEnj{M:y >S?Y!ۙ*vUw) bXk$ /Z" s1B-R,²,#pf5Bd}Tq-\|P[m<ϩU9*-wr<Ǩ",[]^u&ù4=CLfW+,z:V9^Sdxg+&t43BjcK+}wxzB6_@k<9VqgU ݘ״XڭST$l\D kHc A0T{&ZZZ+؋h,wޞ+ qѮy{֒]^A\1 jM6>jcՅB7{׆ZWpo8UM5ֺEiv]K@.~egSq$mLwւQj7ԟ階pQ)nH+u֥]SrgϲRў邌Sua|F?kڌzϧzps֜u>X,rJYBwBӢXTVBri*օ̵u "R%bЬl'4gϜh2YF\y7@Ig~y3ڧbiq|$c8ġGk//~Psw.=!M4n(k4HY aZ;tuyE AҤ6:)G۸g:i]*ˌVrQh$4kJ _-cr Kc2R>ZAh/+ީѥ6Zzk8*B1)5hYa3woV,k_[}t{CCCe&4+Qf\Du 1hǏy'PW3=ų{FFFΗя4 c.KKt/-H, O7SdeE9J zΖ%!HQ@Xh46|!fk#mSe5%1QwG&R6Om(kŠt*Ӭ޻/|=336N#4xOZuo sii(w7etuQ72yR:@+&G @ʌT̜67sչHN d hT8H)QG]Nk^l}8_"Zo]A`g ͍,؞\j~G/=wԿ(:Ϲ||/{B0,Rm'5\ns;~'_&n ͝}ОL۫;5{dւiaDЪI*&t3{qhmSlvzV@h~u4xㅝ+4{QA.5ZQW['(wq1&L>Ѿ됑`= avDHt5|WߵݽC.n5 ` M&@h 4`k t:gff:2kkkH;&Ք :BӘt:$c@hiL<O$&:paa3336{ ᐅ 4 oRYB&MM\~ԃ"!Y 4+ w` B|-&͊BSKGaZB1`;͚L& 4L:q'4EQDC4fmm iD"a *fd\XX@ M&l5yV9O>~l;?yBӊhtyz9ۓz{ BӊP%k2-܇@64-IzsK絏Ãӧ~ފ\3/ۼDt03"@nyw?Ծ/\vmiilt!4[O<=TQdQDQ.N`|Jr;k's!4JBO|"Xd]am!C괻 AЙ 'I)sII@RjvORnjFdm1,JB˛֖WгŁi;o}BSmn?#Oez'~=*{_Z<B*m]f[m+U! ڹfUxꠠLmXN(R@2ӶՍ@_kM&D)BiMO@P,کp!Kh`DSJBXfK$+T2t%: hR,Ky"u"sjAkR%Hk&H˵7gp3ңG]y>DX"(A`|Dŗ.M ύ+WtwxmT<3{-34s刣S6訹Ǡ՞Ćbў4-E>*,7*2OhY 4MqY44X4666Fy=ɻ߮+=EB/bnRvAsJC>&)t* J}]UΕ4 yrʡ(ը\ Gũgo+J>aT Yi>ՈYQMȣ޸C^{>ߡ0)L'a0QNC>?}^鎐uH4k'ݜR]|蝱V2;+  .^ |{Y=bPҖ~JeɁO ݕ%/ Ь7O׿tR>34?To~7f@Mf>=S=)3GhoŎ'֠YBӞ^{Dh7*U'gF*0~\{ 7dqWR-wT/*-jeDs)o|vޜ&[_9'`{G'j7y9sZzKp-,6)' mVx44U7' KhTƀ9sORh~_z[ԙ3?L4iJьfP9^dZ6=45Ҁ3:&`ДCM=$?R<϶ `0+.sRG4,u:CS.;4s vtyhvCQ2+8\^|^5uoW-mDsUw"K v7&B7K u>>>1KuO\w8{њ4įaݨѴY/B@JVgoe1qN^v#- ڲ:OϸA3vH>d Ugj%MW{h%ֶ*cc>nyC3Zj <):7۰ϧzY[s㪭&3@=2U_uRqj/{sYarb+ƺԿNX44Q.Whynw\]sHh̓\?H/. Ƨ?΁?==|6!eOFFi9#/0p(xMQ&\;lwДҦ/ost@IUy|*KF3{=%ŵS.;Q4 { De 7$~6cyޘzMea(c2Pٖ 1OmJGp:œ4ݡ2,~jl@,5}'wwL 4WFWPZ-;?fڟDi;O>-}' = ƗUJ">OOy]_FO,+π d\WV|IoYK~^He\If-f $'@ػK<*Rk }KIkoꂼz婞?;O.F.*|hŠLu.))yҏ\S5Hh򞲒e2&zFoSg$/lW2 -^S,4gI]JJ>xhnrV܂3?synw寏 jhn9Q9.OnRǥd $WV<}rsJt7T6Z9uq,;oo0trAeraaᥞesAX~97jt]߈3C3 )$}cʬMFθ<\Q|L4z`$'whuX+KwgRQjFIYWzWZ($NW}MTQKeʾ[3|V54I?c;8PKsxɱʓ*1f9UH̵eJֶ fNkKmK2kW fмi:,͏-#REb M94YViɠ{śAhh=M [ ~ 4Д.GLBsxjW%9ZH<,ގ헯&)=phf9GS1][ {]{zbc>8/4XXW+=m(L*4 4e;vyСRӧO߿_O'4m]RQ44(kt5 {;g핶K:FɭޤEY"c&H]RʋViSELRP=|wxVګS>>pAO Mi(^i&뭱=n|7 '5 E,WanjnQU=.L9͈EDChBCEo2_|1i Mf,"L3+ ͔MntŞ--4J+BY9Ro )4}]^<(a Sq(kr>b6S0+vvMYG$_`C3v7kheh %YB3*'=4w555u֭Y9<#>ؐ>](\!fvn-/4ņB3 өycbsv۷@l 4 M 4@h M矍}=BhգB\44-9"G=!4ECS / @hfPBsbbX BNsyp8B3Yњ>O1t4d @h.B$Ąh'S&@h&tfIENDB`d3-hierarchy-1.1.8/img/tree.png000066400000000000000000001026671334007264500162440ustar00rootroot00000000000000PNG  IHDRx6, iCCPICC ProfileHT̤Z #k(ҫ@%@P+ ,E\"kAD(v .l ;wwo{\a lQ'#6. @zT3׿mt4S<7)r"7)4sl.]-(+Q.b4i>&2 (lw4: ʖ._-ʮ6:22N!o55l,a:{[9tРçC׬6miCfϝiSQ3a.;piQ3>fEΰhi }~~KIY>3epnJd pVZD/i^$,cFlo\)=J&yH(xa0=tt?i>+'Bl6f8:['T>pO+TBd3PA @bh*R~NCPtF7g)"sa&‘"g¹p .+p3|<ma"^H$#"d R#H҆t!7 ahDa8LVL)ӌ b0߰T:eac<2l>[m^`q8gspF\;7*xS >gGaGE& B10B N"XEl# 'H$C )JZO*!5.ޒd#9'#ɟ( e!ELFSQRT;5MF^>~XȰd2kedee^ee=d˞!R(g %ǖ[#W&wZܸD>C~  > \< hME6ҪhhÊ8ECEbb11%%[hJeJg$tn@g'h4g˜9s>()+')(7*(VaTiQyQ5Q S]z@K5E5g5Z 갺zJ~B}5^j55S5wkբijvkzPbx0%NƘXBG{BP'JgN#].S7Ywn^*zD}~^.1 Z * s Q܌2*n㌙i{M`;2)tiL`Vivǜbac^o>hA`bj;vfignYeJ*jUkku-ZV׶Il6u}w7؏:9$8;a*2C[Wk8~rwv:sg %ͫ7vp2\\JܴnnOuݹ#G=^yZz<.^vrr&+i%f%ge*UW X]Zcڼծ'O[ Emؖ.oeEw69o:g͖}[p Z~zGK~ܖg;p;;ntY[$_[4+xWn,sض^^^IIPI>};})M)(,k,W/Ra?w 5|n_EsAeaO~bTWZ]XFP# s;~d{=\/=h1c ~}"DIɆSʛhMP汖Ik\kmmMXRsFLYϑ坛<{~]Pǒc/ xe<_qrטZ_onצ7Z{{wp[[ݎ};ܻ{}?ău =*~7%ރO"< =/yOOGFY?;3;|/ѫS=;6Zzַ*okپ>ć*k?1?u}<2 KWm=̘EVANNM 8;@MOBK;QB=4Q)K`iCY6ӵ(~| ɉ_fО9ŧCPc[s W"LBOYiTXtXML:com.adobe.xmp 888 310 X!y%IDATx ֕oO`:iLL?I};ӋNL'aF2b,?aɶ`=-#Vےwx$>)@X$E|"A},2;;;V,,q;S{ݾ}͛׮]{mݻw)mELZf" 08~;qLt_dyq"oQ.uMעǚ܎H=ÊvwN(~FMlma/GX?~d766A.($ љq*\__E^A"CLS~T/1"0 ,ӗX  say00iq[TU bV#URf\K1YdtX`@f6˛`梶 D+bW IoAgA:Mewܡ*g8YA&ZeԢ; ,;[tB)2Tt {R7XrY`+ Do(,N+f|.ޢ ҩ-|wˢ9hԨ'"[Evv9Fc7p ٵF"~_k@4hHr]| zoL+&}uMML˗2ƠetD3m;TbW$66Ϥia^6¬,#=5hH; 5잇jcgjc}D3+f}&!Y!egpbN+ ͑®h5 ðdZ:-MX^Ж'"ǐ9PNEa-DNUS!Yhq)quEQQ/CjRQYLʦC^nU͑ gX^reZi@<4łӀ\24Ǡ9<,$j,dS9<\6666q.\O) C47oL;,4^uw(@4gi.<=yzفj k6`hL\W^Y[[d;듏9*9 r$*>h9S0Msn@4vKZquu>h%Ȳ,Udy{ 4`},ᢙABYĦa40ҦY3 ijX~DӪ9"nYYfIHDDhM G O㛤8:7o޼tس$2}1IQ,o~ܹs@M]vkk,%y~~ h夂PJ"!̴h!2MS.VմK@R u[hќWxf0] +N'9t t˶oqmm}q}}];"^V7n8gE%T9HeeY똆f*- }BzJ);X1[ hW49F2C?vN M\YYiZ?M9J"/=%A.ik+Q(g !5,hRIŋ3MSjx{PrfO,hrFZ2{ܹJ6 f eaPb0/$d y`ªF\8o#8 !I8}:Eڒ4ȳtGTiu 3[-Zpx™`G# @dT0s $}4$a<3NEѾ$p9:r_Q1C 1(O 2N͡)_ֹ_*-$Ⱕd4WRdMK;~i㱯M7id" YGyh5ܦא ,͢i9^EJ >Ӡ<|.\% g:e)d\3hkk )Gg:N[557yi$fᛆ/Isv7 +y1$ -Uܜ2 Oh;ʚr;Ne s@4gεkPS%unV r-!L9(Mg·yy (m y5}Faɇ[F3]\m.t̷#cgYU/W5hZI@4g Ztp gsؽ׼op~et2EW¾8i~?a^o)ۚa+Bzd*͢lM4hGvAJ QE/^8$Kr \!5ݥAV6ٷb8F] u!M]Lx¼}F?w[&ݠڱk>";4;Z-mDyX>vD4CH ;E3+ѾAbuu_p:N ;n(OQɣyJyh|'"58}KŐ͟VmTyD@]{iyZwLc}v ?=wH[jRϾM#۱ԜO+Z {$#}yygh9eEJ Nt"CrEA"cQM a:tʓ 2m92L_f+饝"1 3n]KM>$MmUUJ݃~a5~Q%ϿK?kvԐÜe-5u5D|S(="4E+ˉa%)DJ o<(r4{_Nn1F ̥*YK 4P4U[%*[{ÂrPzW*O֒qP B|'Deҗ_7o;{ׇzЮ=~{gKЅxcʨ=͹&cb%<5^:h8W\T)d=3.{~vQw@|"Ѳhϊ< =WPF';<~Y4Ix~8qُP~%5u ԩS2&+#}NT[Pu[]uMW4EӶ½n tQY>D`(ٜ"hf\paee@I&Ծ4!ⷿ{Ko)T7e+b25ő4tuuUG(Y CXS2c<? Q8>.oD7M RpN+g)n"U]E#a2m502i+ LT]RϤ7h&$ ZFAÙ\p'iuvXqEG[ }#:x$ ~teJz'Vxb`{veѬ[F@JnND7bhF\NRB#[0|nkYMԯ ќ<,ÆNgϞtҁ™\`AK[pޱ sQ`gB=;"}>V:QiFxpѴUxRܥH?O]D"hzϜ9spv#< !x8y(yY4:laL$yY4hZ:7]6rj"@4e)>\n:4%PO9w:ɉG(ԗ>Ơed7Vj;Nޒ<{YIqSecMT9uJM'lӭP3T#@@4g ¹AÙmm:ݲL&΂Éh8s!M~t<2i{e')(!ew#1H&bqcߔ =}o˦>cXcg^Ay_h5Ds&`#ɃsXܔ\___`krsߒRNSR4"1M*~#FZ ќ =?S/kO>=z8i: ,LsHpAۢß,}7-!sW;2Fϓ5H'L,lr^†LZzl]$WP29Ȳmv#QYxOjgsCVmz5NVCk5j,Z O:Y  grhy~+,0˰rK]rxoA+f/_̵VVV=/B١G6#=.w 0[G* GI*8VؕhvU DE4 Keu^WG5$j@į)BPu7k:7T)%Zؒ/5M8&`K/4z_942z@1_ї+根1 ήTϳH=\"]FCMa4qhJyݝ g=)ǾyႶ.DjRlл1<"@4' = O&Qaݻ\^Zi޺Z26$1-ہv>:a!d$7o1Fُ*H;gk@H!6:3_r1Z R8Oxg5G # $r>t ijqͽ{.]/ئit1h:$9J8ߡN521#hλE͸‘$IW\7v~xSpѵk,ks2@B}}S(7'߻w~#},M۰VQJvh]] -FV+3%hmX5 Ds߈7.yM}z+wSGR:,ґFߠ#hxDs?ggg,! %~!oIdR y6<#y wxJMSK/sL4 \cz?1-Ai"@ b&GyP^x! DZYNDp?AG~#WWWiE±F")bs(P&eA/Ϧ9(Yqhm1M|l=h$TP\2:AMSN g4],7._H|.YW`(6kkktB%g}Ϣ CkH à&'=CRȧkǡ)tE-ǹz"dtV^_@z و6DzIJ >gGyq}sA_}kkw>]SIFE@7/A Jg:j5ʼn&ZMr2h@/Wް1P s 5p0tnZ'O|7g`KȬHMVm2:Uڝإ3l^muB12N0IW6+W|ĩS~=2ov:kv\p!.AE?{\G>D0ZPfB{ӂoA-h+TV9Ac(7}Hm)Z汪΢)GM/NדQA*ςt"ĭzW"{0{ qQiçm>*MY>?o#f,i}5~=Z{~/d@Ђ'RIUV3J&v p-_v8ќkw?wOi<΂gjYy(zrg͖c(U\[[>GS#A;f&-(&7m=sFp 7Oa8h**s LrR~+uJ=9ٹoKE$mf,tfj+vtՐ@et^󭭭:_]]e Y3f&-(89Stھ&2yh*DB@'9:-_O* >]F&y z׵FaCbT[>=;1,٫TZ`PoMA&:3ClAo@|e*fS'Ck666s}<]SSru.3p,-!s%/JtBZ,}-K; )9$\gqJF2 z[fje[>;9Me E(mA Tn ,|ih.edmmNEK`|z$'mFq(tN~8ݮ+, \C[APMTet2 mpNDs )Y7lrX9#-,6II6R$p~Σ%Wz)򾓹g(ΓDkY݌N hfqj\bh@gq #y:&qh~z@`s8LsRzS_IAL*ѬgȲ$͈4 \QaJTiGG{o-DsN!sLy+'mT͏֚\L%KGh5̃{s'O>c; n3w9Iк([Ar r昝g ל{z~ & GQ̻w&&C*#[haa#tMrV#8S6pgNw^z"O~y?+hw$VpQ,dGYCMZ88p@4gja7|KEZlwI~`$SG?o> |g|~$|O:u+We/<s-~uoM0__QS҃!GYN-UgpqthtA24} ʹ@?7irWᨂv&:)ig3Jg0M0wr3II{Ct{ss~X Xw)uphփ}DӖNQiA0TtHә&Q؆, &SG%*}zC: ܢז.GF_ Ϣ m,E3-MhaM,gVÏӴհ8isM:[Lwvv I<^?ztt:0Yo˝Xy b{eLQVf7r!Rh$2Ӣ)ԛ. M `QtjI7ctبVG;"0U)RcY:aC Ԗ'`@4s,B?mt s!ɿYlUТjdF ~B@3hݻkkkqC~^])Ĩ:#•x܅S6 `NO` c XV8lIߑh8}w666K#v,۳ȳN `smE'Q:_rfǐ:5ΰ咾#LE& $20yMDO `0z}\鄊Hܒ-@\5uㄝ*ՑRDS#3ݰn 2<ܜIpypc w]?:ꢙ,@je4VH=i 7\ׯ_ Npr~\ԝp{jg~ih1hza b&/jʈjH758*dw+76u-4UոxbY4oܸ1\4hhvd4\9bM `a\΅G;cgpYkK */I/u0@ޒ宒\9Z>L1`|@ ԷA@<#ݴ*3 yu=}n`&8*C$[[[c|Sxne־ TviK{|oM@R> 3:Q ɥ{kkkt@.X['V.M>7Yg ZUe$]دOo U}}ٺg a&8.¤\nnnwx%r;9ag N."Fitf7ݦVAEQP5 58ϯPOb[?D[݈lMc#&&?mso\9(I'zJ;I~T;JY%eHMK9}SHM0N~)il>x:ǓrA"gFw e)yh^Qs8@4 ꛺y:~Lvvv5/yp| %w\$@4BG\nQ pgV iad$[?/N)^ JC')#y";QTO EYN2?ߕWopJVb[%^ ߏ(4Q:QFks:Qv:k @4"BQ:.M B@EX\O} q}R,9MóUJxX7A_6˰y):Rڪ#Y+L$h2݊T'VᓆZa:QjlgQS5t{D, TYsD38̕_V*LJ%`u4UMu+< cycj."ƴ_Du^w g#e%'Д(BTv iܖw 3(m|[hE9s666:_d3/={,u2q}?og 40fZ-ٞhB2"ntOT֑EBQU5ԵR桛q!KoVlP)Y(QKQD;\h۠OB9Gd7`E/Y*={chA'kJ`^jG2[ubѴ4 hVZGy셻S9e0赆f`^͵ `6K?XJF%CXpˊ\SS9]rh6f7^}P:6v?w[&ݠ}D{H PU\t5TvM:jRud%{([L MALMOڴ9nZ% `Nt:3d7QuL;<*;Γo}v,eJnW>EYA>꾑\d|ϩn% <9iٖfPٽ>2YoE ^E놅,وQ)-RD}f   nMyΝcWnnɁQ#i7#e5޻uVJeY.H'=nc$kGwD{ZPYMM~:Ruԍ'RtO%Mp>ﱍꑋpRHB:KW“+++^z7߬(#,p::kOW%9ڪFӓ5 m826R&;Qxhcpm"y^CCEԺv4YxV% Ϝ9C^pW^tR9FH)XOv5o/G:y6UێsT$q0DYK(EMO T7P3tC @GtB)Se!-0dW%\'9_ԩS=ܳ>K@/I.qtիW\˱r@6;:ɶw$Yw3zy9+HF=M(]4x3qc z*z!O,OE 5٭H=ÔT4w Esߡs.uygYo^pA? ~o OS7~IM|饗hkNq󕕕A2ϟ?(׼$HuPsPY(Vƾ=?:2 ]pQހ8 ;;;jQxd˗x7|XV/ UROZ`߹z6$ +d@$ e<"x6|(RkMpp#AQ%ENn*Wӿԓtck(H|BO%zë>[ ˆsM!nq5Hn%rrKKf`<ʍ I?JCt2t[їl NZCy(>_~23Mu/e͝G}GUtCu7TW+n*E{p^QoKa4 -G9yd^Cm$PU*-ZNnirr)@tL&X4lJ'WCHNFnoooMʁ^X N;*-TN/җ9\hee>N<|VɳЖ'Ym磺Yv $^*T%+-.lZj\\[I[n#~%5tiOD,RDNjrݍ -ltJV"]Ï$%;}G,j-+b:d('秾:vhzgPqvWZ4k|M:M.i$KT)7RElv:(-P-n^ w$7 &X<~;ÀQ˭-zD+Z$t4:;G쫃[09}@}:NJTW+հTfޒ4TʊhuZKh m{XB4h3me-#BeJy$kz=/&}e>} G>@iӰ 0&{f7Z;nJ0O4y=-D4+ r$: 4Gb,]D@ٜcx(z_P uȔ}͜0tӠNVtT*D=֢֭R9C|qr  l VDe677G*{g'veG?V۵Ҽgv>NC}nq"iM  ਎=NRX1׳9GXwtGm$ SIM IA=]RgΒq`m\QOt48bDn5&Xx0SGоо b:f~G:tbY`*t0i^7@uN'M˗߲ &d^oy>h@;MUb]ݰf$qTmvFS6<ղQ5s<ֳ9>~H heѼqD3mOTɢ#Bl?H!,$ A4&X(-W}7*K:G>,[&ݠfFxZ\O<N`8yF$5&X6 wnmmZUi-Őph¼noʦ'i[#xGA;³重<6"黆d8S=KErea9F;M>vSDְ{nN4MKv5mYdn@4A]5Aj8Fstr:<D5e1vID_򔌾_ چgQ"6 G^׈̡Gr4&/ZV[).BSJjGEك [.aGBlBlO :)vccoX8*w๏喕\h*`e:/]/ ]b]d6Mˏuwsss$HZ.TW2Y{ Yvg^hg|?ȵE PWɋŋK2]p mi8rFo]4ЩNm7F#ɳ N;NʢIwOM[f`X^g4&ד4Џ p>x',9IslYJW4Of9Da4Sp*>ep5\[[W/h5^plt~V$MCwS#"xE1NYZܠsĞQA4C?$ ѵFT۩bt53hA,gh& * Ңn@z6ϊ2Hem8k7OpssH7zcL$fOEM#W{QM \"8SĹsoAog 5t﹪^ ֺ[^carGV̭hgփtWtC(Yr'V9w7R&#*sl ]}z;I4UyFMgѿ@rDPU#הݹ(mqJvrߚ~'ż '!gT0AL.S9h)5N[s<[[[<>dT5lIf2Ql „>j*l d #)'fR40IkN'LU?0-D7@^QQxhY /tL%N71zd CٷN3h:i_%-%eػmTr' WnL>HS= `Wo 00hm| z>eZB4yӾzwӧOd&΃ Vjޡs! dJ4],;FA%hY 2Hc7L%r1l9,姫]J/2WShG4!tU>UQ? mrO*<[*Sײz|{ e5Ѭ(hW4? `p#[p35G.&]}p}[8qČű>Ϗ K.U>2W[!cc뎨?j~l[LR*(8͢ɢoY-lH hyu F~Nnxe O[(^7;V`?+=z_=[^nt…ϕ~f 7x.#\j^{/g}O>${DQ~I9r=XC~ ra8!]B4PQ9` g_Ea>AOo=t^r1!r!pn(&ȁRY&D#藚~凴(8,Ր mۡTjϞ! A8 1?'jxfj9iŋHėlEԇ+V86wJGlfp$q|n@ Nxy>tb9t"1DFWWWuzw*3anYoֹ{UE24 ϵlh5ܦאuP0E˴u[5T"k);L;RD,"\A+c9&ZwвN6VAZվSZ?#::v Dضv>d]єe\5ty;n;9#%hEBJ`k}&ODY!ܹܿsltMOȔCd є XC{DsP "GRg:p{{{ v;ax"̋sf5ezFħ,j Þy5|TC-QOaVӿLDf)WC]r gvMF0G_Dj\u1Pz?^ :j v:P% ?|IYj楈f y\h!*&҂@4q0ܿgܓZZ>īpTFJEf.#m0i.,e?%Gi3nwvs> چWэ%GP{PM(k443~M ̘hnllev$m ܡǥhZYsƙoY(QaP)yQд ~&-bʅS{,M*pJf\>}zx҆MY0)Ma8^єenE+)gviYJ4M DC<p2ʊM^v+{$裏ʢIwfH=9U" O G:\Ί:bZ$g6T)3R*F7 D'^\&IN9JY2E=%Ց tZ9Wt<M&IPbq<ž@Av2D$+67LO'OvEq4INeS-ȅEj>$&AQ:JrŢ \;T]vtv Z,*eLM[f`X^z2Ίhi LilG4&M&N߀s 9H 8^YUSPr[|2[&in֓reHpѰ‚`;*g4ޔw#2Te5i2n&M75!Kvvv#\ҷT(ԭ'MN*e"j=ʇDY6ͽm$EZO:& er ʖii֓jgj[h`btHg)E` M&\DΝ;3|:O&仝$Q`R XrRm=C&Sfmmo9RCd5 $)=tyEoER{w^wWe8h qG4e]΂yw^r`^C+)p7Xf,k}TrxbCkN%IZy#GF+$hwL%Q>h:ə~oyiuEȵ<իC"%).5q%j) 2"Dy(V#QD,t33sr- э%Zwޭt3 rs zj,7nS3GV,kQvנ|\I e; X*ghlm)_\jھoL `zx[&ud$Ql:P̝;we,9yH:`m =|+MwS+ `Aw4Gy^=g_mh-फ़g@W 38nlg 7\j策B vCo2B pu.7f11Of*fN!K-uZzݒUzy/vi(0׶@miiS Do}W@B@h j vj,*Aer;w- ONNt%;O?|-(E'&pC+~+i*em9- MR;pǵ" xaY@hl6CCMSZf6S~M2%oWsXPaO5<"KZWVOq0J8H@ 'su}e9$N 4P~]͌:bѠ2rm Ikի>cANu\TCs:qʶ@6$2H:M倲 |k8 @ja6YRw8*MHL:99a'f͵@cAyt}?LSW IsZ+a:M[PP_ԛ$FnnΚ}6toVjK&3 zi2v^o햒BSvǴ1Xii|%~ƮjP$ٔ!RwӤ#7ܼ-AI=ξ VC;cAY8N4ϊS&_/ &uЂ p'Ue{55^:fIḾu%{NRUkyqJ"'IQΐ'I@hPUڭ3Ʌn~!*kL铓S\{ܒ]lF}@h'$ %lZ3nV ?Iy%˝q- J&ׁWY[vgݏG;OHm?M}Zw+GO4MFH ]D4)S7$N򞬓(N<U2a>RuqR~w0P3I}Bh{ $Vjf'P&GDHh[ ҚI߬p自/\-noz:c'wtU e(KC!HՏwhizq1dN24KcӼFtNBglW곣IE}iJѓJ1ꄦtDu9]MCx(ɯ$㾰 GGxWpӷ4EnN@0hM|B/J͈f>eNt8i2&E9N1əS3Q#t$}|ԁF9yJSm'(OWQ?D5!)B( 7N5d>G$§35eNIMmRZSB%A&¬T<:+I 6+ 1O4`ϳOZE.a\rkR۝R&@hk$l%׹/-x=O J8SOۋtPO_,~pk WPA[6F.KRJbk{k:s=ŷ=lJv1MPYW`#tLsVDt%Ë7(`ϛ4-pC_y2./G*UiSmk/_BJޮܢ˿"ﱾ( [ktx\6ΓuڹI#{8Msx?ӫҍxӁHRyLDFBÝ|zZcj]@Ҥ{{J߂ =]PÐ:ReFiP|6#SN,+Grv"o'R;l G/ϯXћ_LI_Çlt:_ѿW_ա -q'`gxGG{=z4{ 4h !lL [lZ[ZNһկ"qB-e:,dTɱhᅳ*4?΃o/{-gbP?__7[owoSû{_>x'|b ?g}h{=B?Jߗ m!4h J昛kA[L ܆%&W=\fKϗҩ :/^Zb/} l 7|Ѥ)4qr]Y#?J|Wn>z vB஠" &&WȔ\ kӜeN+73jPm<2orMҸK 2[/^]|5t䃧zdO?#|Fj15I.k]9hiyЯ Ee{oA=*p-y[S,xg6uIp V.CZGX#"i'Q/7̥lZVh\RY~h];Lz(B@:- v,%;,9 CO$~h՘̆IHJiST=ͣ3ճs2_n6AJu#f%  &8Dx%AJvEוT&מ7$ kOWhN }_߹P 4a%UWqp$7u֔Z"ԩ̆|M-Sx'MONNH rye(gL#SH Jէj^)x3x]Bhp=;=朋oT8@35äx"G2zY%/Hx؞P}PU1* P iZ) 6t[v%&X+XRJxgV}笪3·Y-54[{CڂI#~yE$NXJ͵Z=zs~g$WP)4}/\yp4]XI'B5G}m/IG|<) [}¦Ֆ;5h}sk'/Ӳhȏ?hѤ%I A %r]Xe+YH60rdqdo.4c %ЧԮ|G%&77 A3Fo[Z>VTuae9)KmYt<- ^חtM;q211ǩqaU- ǏGt8}%=g@jdgLǓvEt39ӟnR6bzZ9m& o[8̩ÐGԠ2[;6C7Ih -~^^GKJ”R ͡ :iL&קGt< Iz9T/ݪץ%4]1M9f34IBjO/i3CoP4q6wk7%&]rp8}G2?szX!4ݠ,4K.vD3 }'pq%Ym2&LnOmfo2+vmrń`/ Ѿ,yzj%?$7- }T.o +EkU VC f@zPz̧LIϑ y4']Y`e6ͭ,ky KQ]Bh}ﰢ 'Eh*ά:Z악YQ*T(3ZiBbp[492 Bk?09RէnjjS:)򌃝Wl*5Mzad '+Z`&8]kթLmn^ItNl'YqjY٠2YJU&o7t8 O< I4 -7sP5Llps(0Jj}<IOygBu,@PpЛ{ Мm{XVT6M 7u]3h<g8MMnڨu$FEN?bj m5|4IENDB`d3-hierarchy-1.1.8/img/treemap.png000066400000000000000000002104021334007264500167250ustar00rootroot00000000000000PNG  IHDRxhEΫ iCCPICC ProfileHT̤Z #k(ҫ@%@P+ ,E\"kAD(v .l ;wwo{\a lQ'#6. @zT3׿mt4S<7)r"7)4sl.]-(+Q.b4i>&2 (lw4: ʖ._-ʮ6:22N!o55l,a:{[9tРçC׬6miCfϝiSQ3a.;piQ3>fEΰhi }~~KIY>3epnJd pVZD/i^$,cFlo\)=J&yH(xa0=tt?i>+'Bl6f8:['T>pO+TBd3PA @bh*R~NCPtF7g)"sa&‘"g¹p .+p3|<ma"^H$#"d R#H҆t!7 ahDa8LVL)ӌ b0߰T:eac<2l>[m^`q8gspF\;7*xS >gGaGE& B10B N"XEl# 'H$C )JZO*!5.ޒd#9'#ɟ( e!ELFSQRT;5MF^>~XȰd2kedee^ee=d˞!R(g %ǖ[#W&wZܸD>C~  > \< hME6ҪhhÊ8ECEbb11%%[hJeJg$tn@g'h4g˜9s>()+')(7*(VaTiQyQ5Q S]z@K5E5g5Z 갺zJ~B}5^j55S5wkբijvkzPbx0%NƘXBG{BP'JgN#].S7Ywn^*zD}~^.1 Z * s Q܌2*n㌙i{M`;2)tiL`Vivǜbac^o>hA`bj;vfignYeJ*jUkku-ZV׶Il6u}w7؏:9$8;a*2C[Wk8~rwv:sg %ͫ7vp2\\JܴnnOuݹ#G=^yZz<.^vrr&+i%f%ge*UW X]Zcڼծ'O[ Emؖ.oeEw69o:g͖}[p Z~zGK~ܖg;p;;ntY[$_[4+xWn,sض^^^IIPI>};})M)(,k,W/Ra?w 5|n_EsAeaO~bTWZ]XFP# s;~d{=\/=h1c ~}"DIɆSʛhMP汖Ik\kmmMXRsFLYϑ坛<{~]Pǒc/ xe<_qrטZ_onצ7Z{{wp[[ݎ};ܻ{}?ău =*~7%ރO"< =/yOOGFY?;3;|/ѫS=;6Zzַ*okپ>ć*k?1?u}<2 KWm=̘EVANNM 8;@MOBK;QB=4Q)K`iCY6ӵ(~| ɉ_fО9ŧCPc[s W"LBOYiTXtXML:com.adobe.xmp 888 360 `10pIDATxO} T"D! RJYDDRY~֭( 3a>$Py*5,( ,H4OEU!QHr$DUl_&s9o?~?!~?A$>$Y &m ~o+_r._C OIͧ}YEm7MM44!G444444BM|$MMMMMMMM,Hu#h 5R$Qm74v7qg d)t豏+1MM΃f/ϕϙL ʋՙ |)%zлZD{c\!.I#-T{o>j݋ IK~-h"3fC_ 27+rCq'a+!aJQPpwπϟNS9UI2%Xi^4F~X[3/_`(MєDB m(Fh^A޸:3ﵻVlwˆ(z^.(J`aJZL{9'{aW}Iv^lcϹ 9avk>cgZ5'a8)̻Q W؅'_V}pnbIxxC\'b:kwO^VRdp>x^X9(;,ah#˦&>G?֮\ =`( pKT44)Zc SAb.'v.(hוZxKi4Oz]#㽴Eƺp[^ d t;]d!zji0#2Gzg8쯿̿b;]wxY`!f3N ( h Ga>JC;W4?$dBw3d˟뗥/?Go_oiU/hv':Rzx1[ @HzW9Rko>Y &ocƝٝ? xa4@S MOv'JnFeD^xa~sC -G Y(ϺѺ7t3 ǎ _׺=AuM[Zg@{\=akT% /~*;),TjC9s2 zo-Y SnGK}GdF|D=ɞZJ-+&Ad1YZ?ϚWI?Au4yiVҞ_>?¸S_|xK{+_WCO9 x~By[\^o2pؓPw(ŧIrzC{Icd޶$5T-+ z OrR?JPm2)hRM-HSͦ_O:7a1􋃽s+| C.cEA~p=iE=OĞԺ=;1Ĺ, h<̋yܲ< ^ckQ}V>Ӡ%Ǚ|lgMkg#Z[Ѡ\wH:oVzpY j8ZhC~VG88硄ê6eP"̹@QZvz:JH>+٭>c&}oʑ=n/0@AIyAxu{WV%Qyt5k ;Eh`,x4F[b98p62uN\f;Yh&Ygx^>G0 oY&w2ZV¼*W`Mxoɂ':o8B3rx_دhIG 4g ;hʪ(R'\U{zFI^nkre͆M (bAw0eH9pE'3Kq:*kvNs4hb S=1m҃ynGL?ߞΠƈOo'dk!(ƀv`$;'fF83݄<١w['~2H;6hZC#&G蓣:7kt1a+qA3:ޑa5% 絇r4#A>MCcpf$aBYf}Έ_ mX+S_ $ago2/FMo>Z}yib#jXl4Ð&EHf;ctNI:sGG13Eo /Ljvv;s$ЃjhKcs]5=f7YldZBu*Sg -L266of*9/{>ᘺGyǣ@:Zc%uͮڰ3m$<@S<м̰wb HwMi 'y~NCG.P/ ]!܎SHΰpBU4((MwX>(mR4]hAav)^r8궲A/5~%l/G/^*2P4MCsQۊ<|ԛ\RoKGu_AD=T'+v~/_^?#h٨\4Y8x&m-Yf yҨ$BK[*ȼʋ9І͋+)~&C[)VycH}}\YX^ɞYçC*YE~d| K :&i>4Qg=IH:̋g=:7 ,y5.[dߪ5ݺŏK?5a΁,ܘ99^ĔB@碩zƖU<'lf.y.B-Ӽõ,.Ǽ;TjQ \A>'q6n J+v*s[4Iɪ X8nՑnC_v3b%w.J6WX !i^Q+ʄf*I R`6!ydA%ud)58ځ'VZN^@bՉ i4w$C ,-eKINf+icW!f+(A}`K}tIPZ^T-:WY~W+Qڧda\Nϟ4gg5 'uYZuo3w{|U+l,^XfO kKBIf2%:?>h^8T 4\JkuuwP6>?r+Q"]~=d*mEWU.k+v B(MY.DԘbN+"ЉtE$YoMh Z)ʆzwA( ZɯZG7šDVʣ78ąYf=YL.ox%TЃIKT/slu< zM5]U YɺFߍ}.X{@i\~3sfRJf[β| p$݉Eד^Y& T)?=@T2|YRg' Z47EnNJƀ So}%L\fqQ @.ISj1Uyh}'k-S͑JS='QʩUx;>*$M&zLB?ej@tЈ%O֣,>2[mTv>*ٜj_Ss44OM_75?*z,Zȳg Ygk*yef$?.lvh~lƿ^]gf gjМTx<˃W1͵ZiH]O1T|Z4Y-<34<.6M(ybfXP݊>4шP64.*oZ MDLÃ'F-j\}3KJ D9ؗwu:O&EJ䢇bĭtytM;}&w?Gq{峟itsdhj43(RNRi0ԤӤfԠ3 jnzk)m%D{;s :u꽓3LN 袃fkV&v$G{4uϫ&]Wـ_KOH,4g'K?^bjTk ?4*%Aת+[󂂦Pvȅ^?}޽DZBy湨z#@3TM`mp.EȪu _ԢlK ~u9l.mZذ{.w"I-dxBAB6KR2 ~QHbI@݇UvRzXOtA[lc2+D_].fpQϠ&!(C㡇nu-K2GщN_sOPy<@|sG .iWţ1&s54uu=HpwGYǨfԨZ;LcGDqq*{w5ނ:ԥ6\"fk&Мs̔؜ GGecf&N|Q?ņ\Lr6{ s17 ^Ve(psW)!Q/_OXHC;\ 3P>3o "?'Zzw.t0P_^b),AzƯO%j1r b3Dkhac*iRK&i"yu]_.*(F垊O+Z?x͖:l&e`:]'2|+h6(~6zTx\쿻f}VXm O.r6iŊU'V P%(/4! #4R6A(4F>^>@(uyi%( y&PeUJ3o?_f2CмZ}IM1%.:rf%ǚ6J5_w36h>J}GfQh&?4VQm5MB2A,b[Jݜ?^,&-!ƦAPk{OiMQ&4^Qft).ԓ3;ASΣ͉O|46CfҮq`@O?}xϖ=6{w6}i}MM.,=^إ:}lrd:eѠdjTCD<Ҥ2<˦+ 4ATrAZjzptfhaMwX€*?^7s7O#5(ݙ`j;u_WKx|l8 Rxjh}iLPgnHmL:!hˏmۘᦸ@@o7'37R;{?S^+~?JCcSM ʠԇy<sӧMؐ=6Pl>yp&s4!R^93.FR@S3{x4ؠO<dm0wߕݛ8Ҍ6y8*quw\˟Of{06;/'h ؖ?Gn  D^__?巿УTyͺ.a';ca߲ Rx=W*-4jQMJ}GJP)fo6t`4%&EHf; vb%dO `NJ,4&s__73nwOF9Fˆif&uʣtk  $dfQr ;wG%A"a 23G4tiQ~~$MGgG=!<9ڬn |  =W*4OuQF>Mͣh)7Q k?k,ad5 BF<܊uxq c5?Vprcq. 0ݷo =LȻuft).htm/nި0xipFI= :6Pz2SL1'6AA~5'` N.Ҽt59k:*r.A C21h|j2(!h"hC rZ騡s&~LP_Si>9>̍M<w Q:u& O߯ۤZR9(ۤ[[jI' :DpS\ &E>wsM}Ԏ;0A{y4[+5447~.p~ౕ_|R0A`Sփ!xu*^m†fMΣYioͣ.t; y441atɧzFM|Ѥk tډnn%DwAA`TBćMhKE@ t$(YYQ]OF?W֗>=|MoX0DX#h"h^O۟}/ؠ _d 5Z^CҪ/|nGw{|Xt0 ~9<-o״⑃ vAAznr5h~1j?_gT˾u,Ч\' )[_ h"h"h"hbAʠIv-囵v,遨ɹ^44/'ͣ.hk=hjH<(lGO3}˄sMryX\ RXAAAM:C\JM&KoYry=AG4;4Wkz/"hkzglgO]PD-4 Q"Nk &&&tf)yYV3EԨD#h"h"hO?~Z:_X~%:IzGn]rGӿV6Zjv44;ӻ(k"KN7'fMEwjIV*a߬s &&"`NL݄0tN QxNAAA_?)kO~__#>3o 쮲H`"Oi-#hvwfM&]XH$ PN@37xOAᬄCMMD(4鍦7TRti1KP4螊@Ml'gXDDB+*.2t.'$]V? h"h"hI{We/pB54}kJ Jt5@&&&tjy/U񲰱9Ѡu*>&&&&]e74"#]/7DDDB:#K긚qߐjy2; irF_|\ntmiAAAAA;<M,HuGJX[ܿէ)קj+J3.ݽ{&&&&'lrZSl#h%dHNxVj+ 9Yq)+k"-R.&*hF8FCPw+Bzfto139ݑyMMMM"g);N鄧H#O ͅ,ސrl nwHxsbJk璹y|䩏>Kl'9.yi)/;IAM:hm}jw}s7#_73nw;644444/hJb)/QJ!*r)1&uj@gxc"{/<aC!|ʖ#,ch+Mg A ǎ [L^ûn1ՠ<sB |'qI./f'u6|PYM)lkvkxRA5\#KtO _ADC=a[FLmpx8C˸ZZܷ-L3%!W߂yA@S/VP-EY4ja1C*hذ) Pұ" ~M iOĞKzR 3cHv ŨųibѳX>Cg%55~P3Whp'MW M(FM̋#h"աI ҽ^F_84s[ZтwT~yQ@SW3rPЬXB+^xS}MJjab rݣʢsnB Rd'H:IvPפ]d''_*!7BO}_WمL|d>7`bg@5_8AMP~M.訚GoEDDDDm_MHTt賓]:ejѰ΀/EԶpNQ4$TBDDDDd? 4@JKؠpa7]5ZM|ĄPC}M'dq;VF,V~QYv4b[he9-*bw[L,)1Ǥ6X5$fTYRp5'!աI]QTՀ*BaS!mR+1h#+ʾz0]1hX524$MMMMMͯ.Ҽ̊‚$Q R&&&&&&..RZɲwDZJI4d^奜5^huTr#/E'AMBDDDDмśm.!+f_%;\˂rWeʁ6sP(k+]tB{4$MMMMk 򲋱#%ΰc꿔m=ٗC`8W QcW^ h"աI|fUsg&~ y\\.S+Txa+g`ykM:4 AAAAA̶A~fAtEhu1'QkE88U䓮eq+{~QXvIHuhub)=i\&!h"h"hqLh"&_ Q+ӑ&k-~05Z԰7׵:kJ &T&!h^CT2]>&(="KQMM3M{ 䤅L0ų! A)v%MdLاB 9a7u v O9=UG$_9~hjRI5a3|L< AMBм~Yr qGH'\ip+ T! ߑĘ @<Jz,}b`i=_tXƚS2Fyty )v@:Zwe&2̪Cwzz;m>&&)&qYIZĵjvqW&$)a/ĨLQ@T|7AR}~ʔ®d}0vT>CAj:h}Vu ;:/h.M ]6S;'!h"աI 4{jW`݄}b^ډYO넌M)QtfxizmŸҝڡxT8'G7IORsJd5pP$zSԘykߗw=tG =P*K( m}tvBkaȉÿW$'KQ%*5 B\ZBI?=@ihRЌ Wvl|,b  Y݇zA3ǛWh}6O Α$Oz͉ua/!w6JO&MzjBa{'w@7kg/tۈ3B14F).߬l7 #h"h"h~q_LeJ( [$=9$?fc%_ao45UAN=~?,d4Chf[6 xqyͮe[4$ <?5%L^4#)g+,{ 4ƺԻjz\MoN*=1KF3;Nh=Ȼ{> -M#Mp=֤t(A*9}P.YaHؗe4aͪ=FvXȱ2tNKvb"~towDrpn0Vh^l.&r\4)&=G <=_H< 4R)Y\0s1O%&AAA{Wj* oak65ŤGJiG)E ~$צ2&y> ˑ̺P]Ov-Ļt2}=(ES3ڦfXY_ԑhd˗. h"hbl̸ va_o! `JB6(HANR=!W}`+%:R)Y8}2h<*@4Ar4 AA6z4F-{)!*!h"h^eeNTǶbʷZ"8yGXP>T["OA&Z@$ʀ!H&,DD,/GAMBD hKєȄH͂0<ʗ2444f;ФFsZ4VAq`=h&fA3`I +9S g &J&!h"hP MM͋]LIڻlɼK9x Ya$='˅V%hS&MM4 AA@3fvPد.FެOnomOBGޗ44+hnfKȊ~ٷeAXv9櫃f;ZDg+j'`BDD44F(u#X|_@;L|R,:sCZ/@.̒#h"h^GД];&ŽRqwPf_]a,am+4 &&y43āPsfd; #}?G4OӲi4UwP033x8L90ulTDDм}pU-d[rZRVbk{4%&&s4G%eu %i᫮7T[_?sp-zx+AsѶ>cBˣnT]%vXzѱɃNw:MeJ8'844/u, _?G B 4𺘓õ"2}^~#h"hb &!h"h^3Є|ĵ,hq'!ѓ9XVD)+Bk'Vp",.\K 9ME\InJuKrP=_A ZRYD @Ă mMM h^s9i1 ],((h&3[AP*8] K_4q8]Xl ؅8f;\ MtY S>'ݚUC yASfwB\\;կhXAvSTT~b+7 hqq*aB*8Vd؋X(a YoMTc ž 68&&ѼSB4.h=k+15䟲~M-Q1˃2cR*Ǭ/n5HEeL;%QʣR^³2UW rlpMMMM+ WB$/,FYPٕI7T@_04Y}?s+P2^ 8&X444448hQ+FkmʚϮ%ZѣI%;qH,H"ZXЦ:eM웱|kKr&|dv$;&&k i4a=~=4Y7P}^u:n@_2\V{{䆓φ`2 1Tp6PrCK-1/(MY#|W4~AA h^ynLй8k̊l!”~D=E,͇YcSV ".#V)M,NBB[ƬWa>avLRs%3 * n;BWGDDĂAb6"gnv܏V_E湗yAǢ76bÿWc<1kuͯqI=y͒kMMu=ԥm=HD,|7x)4Noa3 (@/]y+"h"h^$ܒc-r[n9'WKzXe1?rsipYsk?@Hg\ɝ C0J|u:*['WxiW1#3jvY#h?;X~7GG{`bEz/UIo: c/);xvw;}89K@FGr>Ѫy15$Г,pqJ;:a5%q)4B,l('F\7<~vͫOz͉ua/!w6JtM!=F3;EܓżąEҳ||sʑ%gW"y@3.ai.~}FA|^۠\%W>~葱GA<WBaK;x ]X-,T"BBLoI6!ob Y#2h,;BM ܟ@y"Fus2WnZN;!uc7&:_qiM99aoҼQsNȃ6))H*h$MAi\~c!`9W C\i>%ې5B  dž J i"*\A8qs:Id<24y(#s;!bSa.fSS Yxt40FI2ҭ#h"h^]\A3!G]=Qxzf=UФH*dF\5KY-b q;Ph&hJ nt.+7hǽĵQ3#Bzm^BDQ/JOyb~wJ63"kPI yA3k*>tM(WK/e?~m\.M웱`_i $v\(Hd$4e,@σȥb~Ro{I ݑ0hf"lm^<}Pܖ#òX6T(E(YnX,"e"h^QԱ2;l.A˽ȅͶ?t F=6M(|xryorn 䂈5 B(+^6*t+z7R]Mx9lH.t4SG@&!i4YoBo!3AI1ؗ;0cҜ) L8SVK/aQ,PgaK0ҭOӼxZORP>(>TUV10A({SؾbH&ႌW6oQ'2A*'cJBf%v7~Ԙ4ԴNwE]մh@? f6&tZakhRMLϲgq)H[`2>DOEcG2 (o\x*HAםE|í~%U("AG5Oh *aAм ͶA߬/nB8M2NTz4$Ny( s4e~Or8$¤hiGr=t^uD+IAt&WAw?Gq{1iNRm@mQz=Bfbizogtܰiq@SȤFkUr2ڔG/AI7̈́`|Y=|?=3)7_?PƤ9ݏhjgLn1N{ ]Ov M1y1P;Q,3l,MŮhǣ . 9zx4URѣyޯ8 )VSHhLc|oF`w4&1x aVu~2,{<W6d)oi>PGjPˌlg|nwv/haNN6PL=5f$j| h"hb69YN˞YNW GXSǖΨ8]YSEà  Z%8`e6#v.-~RF8\Q&eVSF4$PfC]t-K 8t~MG= =}L&"ia9AG,O4BVcOYn̳izmVcˌ?`j7I9YďpvtSrm 5)"&&&,'yywr6lbEJMQQInr !vblcɱ"^B9*ku?u)# I! wJ"LJ~N1㏠>FHKuYGPFg4&\ ,4"h~=h>P~>.>o^W,w̋w_ܝS${_#hb 9k!#LNԐN4& 0me*.i5_VDEբrKQ CH+hGRN0?!>H~~bI|=59£dh P)U3c=L}k'=05 #՗UuHzͼ]z_;ŧX$!=*kg0Of?ɋk!4uXTvpc?p%{ #mA0fyTso6锹A ZA]{?(wS&H㤪ԛ=M#KixsfSlV| hl/8rmHj F>u?*%/_OU\Iyx:|vWSA*Gά-;zm'x1[w$]ǧbtL F3~Em2{Z9Գ{"S:*U,L,tiQ2*kT3ĠAO/+?E(0g( Q&|W!Iӽn[sQBd"!Wuqo2D#աҪ2#0@r?{V:)6}b:j[% ZzH-/Gːj xi# 5i: ƩNzRN'`?]kmwڰ Xk-k^gd3hA")lKpf|Y7hF7ThWlo$@54M+y3r$rU׋dTJ8s!͕P\Z \zCթ/o+\6l^, MR0 FvȔcBC(6묤kY] 8KG%Ͷo/8^NH+gGu_Pʿ[;4@g+!Jc 3mG0!t*L=JV3Jf[X }Iy |aU4+* С7_?(4!ZiDE ^X 9m|( &d5`pkŋպ}>p8,hHX,i HdM^jTɡ&Gc'~Y2N+2C@㞍3t40edk6oIr$m2ܚ3k XIeqZMje'ŧKvvMyGfI~ i3b?lc щQI2(0 4ChlC^qbHiXrmByi~Nϊ>,"JP@[,@`}父AJâ@s= 6C ?0. .,=Y X' GVÏѠDдB`,>t m~e 7߽G!Nrua pUUπYAEuճAS=)b?ť1 >8y$TSr76hý}%?/'t=JDfl!f=NZT!?3m.o.of`ˆ,Y0+[7hmJ,g?/Eӊ}%a84Cie_.,h؊I] WB=cOmVL 6xKށΙ|z_mFEeohX4I!C&D2мz~U` Ki[H~f[ސcEQE3"^2MNĐ244^.T Qv;9A.0Km6V^g1wp™,ȷi02vZ#T[Lg"I¿"9 h}q쉳ϲ0 oǻE~z6ip> ; L/߾yL}|_L>2>.uNʱ#ƳTk-5U_RwԜԛm7jDE7L+dBK h'h~Q#|}$ĉE?ʛXbyc!>qft[ޢAq/*mo! 497S" heG|4S,('(R+@lDl\PycW}vxUV_᪠6KXLӹV]کD 52Pd7;"8n艳h>38 e8@E;~_?rhw MGHl^Ƃ]ߜ-`?4"GU@'$6EB@DH]JJ@s/>Nw\-% vTwX=( 41YʔYjC4»7֥lgwx4-y !gU4Q tMtYg3'4I90ފ_WW}j hj$g~%+zՉ@X4 hf|wqjgEd/<􂃔?">~N ۱CBA\ KW/t{=S!EF,v_od¡_Z^WMsЌ>Հ~6бJAWK2FKj.S[gOhrk*Z'نFPD@P T El5\*"gKQ]7Wn|+1~Nf3ᕺ?4 -󛊗τ*3Q̀QxBp=~g6ai ү# .|x" ΚȩⲖY%Ȉ'4I9y$"C@xjLEU ?*ꊀAu6#O`s?Ҙ$CKyȗI_Ru%5h}ȷ1~"mxOWo~`wBZ iu(ts,Ek۵Kfupvipב_>oOhrk3I4w2_iME/)?KF?LhT^6XxOkЌZCd[4b4@SUgf^V 20qc?3F f樳Y>^3M}24^m%./W+GۅB#}0JXO/4 CW1vGfaKF'3z!'4I!C&}H0r4)QN33^mȴiTg]o# ' fi5KaZflQ%6DG iAjEYU! h붭A. H\~Au kU0&EHh;uvŧ҇\~oy}47{j+#y'szN /Z''2IEzB@=ٟ}0xF $Ly4 hB@7# l^Q2JK%$Gޓ%9_(7~'4I!0q66Z{ e˻P :;T'dϓ"989ͰE#)!m'C4#=!I ͼ+jиpzV]4mTg&פ/}GsS2$M7.y/پ䃊9rM}urJ@d]z3b1nOo6ʆ\-s_CB q/]A'`tgiCg)4(YHzKrMH`,h(mm2I` !f!׊3 Z d/l/(k{ɪӾ A$@Sg@AD^!s=ki6v6kLK8R2ik϶9)dm&eI?+ZcwxX!P6Gw0KUٳ_WW}IMtٓ'#ˆh-ʰBʠyEزB3 O ÊgΙ2f,>פkTA8g,Euuѿ< 6M =\v5*4ypSB۫IRVxuIwQAȘ14МHVi AH=6>=n /Sphǁ߮_rl^/GƄ/7X qhWphf䪁j5/wT6.,QqiQ$3I T~q?׍h|!?>}]vHؾm& sqmg7@4aq4$6H'TjCiߒF$PRDy&Uv$)D,hntT#QTt,T;qN ݻdžlNoy:ѣƓ@[bb19I*29giGXK@Q@)} G6,V\%uJ%MRh !x8Qb4(yDAe}f&l|^3| 4I!I Lo*84IS'y*b=)\xƺ-y#8x](^0e隘_ogm&){Ȅ~*8GLs-p1z:(3*Vˋ' KW/t{=S!EF&OꅉOYsf}*[Jl٢]P*AoV/VE0߿&I 2d.hf  ě~ l5eWi.#X÷zje֠$:Gx]B*V)[j~tw}R#CBCNC&Σ9ؽ&yWBnH|#nR*仙.=Am?ZmZx ye,b)QJ:%@# la;+ȝ=|WW/H)!NJng Α|kN 2}rM3i:ˣchlDS@3kqUn$MVAJ҄ZiXY9ݫGBp&ʢɄWgY41}VF_ehJK,:曊p;-/# ?hZf{R|!NJzhf  bJoYx ٰERY raK*5 $*"~21cd#9*SU$MZpCo~gz!h.Ēӻ ݁ :؎/KѧPχ.IC٥_G~L@6B&<3va@3 TphM+Ig옊׺\xGC G,˿r!`ٺwcMX5*X,45+[l釆IsHW?.4xXO,ϖʘF 34s1!MF wXX4?taaA,l 葾h4I!C ̘ۍ3LX[-!f~tnvPU<=y7g骗=&92 I 24 ]J $y[呐fj-@fޅz4@Vu %3 ~(hlQVbqU,C@&)!N@#J=+H{\rdy6#4pZ e3M"Ae-G4I!p:͑pFhێ3gsp OyUvl0vMޛ{뇤(07J~ 1%ZJ6h'igxBc*twѥG1g+Oh@a$NߪRgxVFb4c5XN Mr Il .,!F*t>u5CS4X.O6]KIϦuRFQNjӁFA@&9Ar@l]*=1(ֹY>Ui?"hC=崵/0/hU$ҬĝM zeLp:(h$9Ar̢1mڪtQtn[wL(}oa`FM4@3^p:(h$qۣd|'ޙq~hBtQ6sڴi Kfya% *.`YևTh@p:|s)<?tgh ~vnΑaAGx=$Ʃ7#IL@3@scYūom_a9>p*^p:()5;0p< RΝHm 8N868Fx<51;= uG4 I@&M4wM&aBD;V h\evTl:qs@9DEȜ,wD@t6{Ɓf/8?\s4;7f;r[ᡡ\9NWNt4 h"C&*84UGh!BNpGg):!o;<<O߼Q rܙQ^zݬ)0́)Ǐp`n\(x9WN h$EL@3A(Q4:ԓ'OXx21]"2sg6h@,?t?ùEpB h.hRNݚF*[#{|I,krT${V?5yttl }_Q:{ D$XF@3A\=`aXBďݽ<Γ2OIg=D ^HBnFak^[ ˄DvtխS;gԀc*=mʉbȗo&įk'yMw.nlluJإ2KZ\Wn5\ֆ >t%I@3F&([;ywo-zgF)wtAJg50A[V YǕ6r/Wm}n5HT @7Ѝ*5Vsѽ){{g"bi }o AIV^ę-QKf867[z/`ɰ\+QلJ}r r|O H`{^*]I4鮝9˝ P 8 ï d^:,I*}L^. pL=znWĢIX4Ң9¬7<#_LA 6$*J hL1>-ϋh.w:t p4i9IÁe碛Gi0PcN-SϚB9W+BtmdI"M=j!-.2hzsB*]37 1u,5w^cZVe`<]!*s3Td6~w_G[~kqPR@I49T1ƒ=S91h5Q#KdzhWEgD z蟡yrtNq<)spxV(.T:w"5ڦp1$IFZP>g,w̥t8H iR J=ZenL~WM!N4Ջh"exs9`h1!Д xr;f2Oφ.Y@Q{/.ȷ=Lm?B# 9/nṒa@ [FѮ( j~5}SϚD0Z,iYUzhK/ ![4kvALEnO@=zWP"-l k!c;39rdC"Njy)@ԋ|^&Jfxz׏]a*1 Sa*jNR8Ƽl ҧL:uNl5p~{}j|EȈ?uQT,)sJan;]uxg=) r ;(LycyЉݰP ʚ.Ev7Ve2)UvFTƉT3wPG#dk|ȗgGxMRhvK&22Ao W]" [-xȂ7C|X[\Y=:Y>=LMc@]c?FgeGt2Y'qv:rQOǟX:aç꣙<Ț>d\ z'mr5LoCkp;5]Ue1wʆƖyCۘknwrQ؀ .]}4U4 x$ ъ[X xJ#gB1N::q5~-ՎʚNV5'F;qZ4_q˜|Eb{e97wYDI:n66i2A'vjޣGag{>ً8*6RMVpX-V K:mGT17ݑ7̭]?xu篺;$nļm'e}$V4NUPH?dAs"lY6.f65#l8 @]P>R._wAA}hhP"}6$hzX) MZ#j@ȅN@abw̚u>8Q( Uwͪsn7n*/t V?k+_qJqwYC4 WDҜ'$7kFzeF*Q4 P›D[4Y UljĤbk NH[GL1e?Bx*𦢭w~͹8 v":II^sz:YNfY MYeZI/19A>x>AgKs11ߣh9KfMf̣atn'ͯC lqzv)8!ؑ7ja9%C bVą1;2cV8UM͛U[!_yaNUrS}s:%v߹Y&wAм {5ghq0rC P*S,(Ќa@S0hn )xwM(j~4Xqrm`7؉$%B;< Y?+֜$7"d.߻[F4!| f'W4X"D9kt Mvj{V3AÌj@$(H2@XVΈ&&tQȵN,G= 1gMrme%7}nm룫3 )^k!Jb9 ʢ٭,Xi_q QHBiD|1)ZЌa$عbQ( z>:$ a2pDt6 $!VfoGXV&Ee9P[YMmR;P0дSV٧Gy]Jn[O1L5;tT~"#~*(t\~ik>ɩ'O();^bhXMŋO1F'\ GtQ>v3i5=@xbk43H>b|HANOmeuEegie.Y%8enԕۇg9'cZtFgr _ xYmR& ItV,4Tu/MطU;8(tBvcU-\924"ψ雤t;s7؉$稉E(e(@n~ȯi*q2&^Iyص=AO*{[qyzrY4"5#c;~](W;aWm|Z.]w ѳΧZM%Ф<PvL/[\ <"$EL$(C hn,&SůԭӲ@B Ao΀%rh 0YN\M3&U~MrK[_hu;;T4Q;nmp5]1 (dRJka=!խD\\:_"e .}tp1`"L,A5MOtUe4 hJqo:uU9gin8m+vMS""E*kR(h:(4OKCtQөv}gs"͘jzSE( A'E3c1٢!4ŜЖα2Jw+>,pP:_@f ]B?㥏-W(mL`dh&pX#WG7[Jgi`43[\28cNsMNæ$iHz(%l:|(0+U+aЬGMuӓIfhy\^}Ž)l(Bhsc EU\DYt ΩpXH<4qukq#E95W=ҎDaдh$RӦCLL4ZUC@3@3*~H_'54K&{@3TDO_am8W@@3SQ𒾇+3f?eK%MDVL"uni9d틴nj]Z|)f&;8P}j)0"zsjˤs# ʧPLԁp['љ-&WMM^#%B? +)z#G!iO8,њdKE9p~ǢYpr\k?h"fW]%Li!wMz4dep,WyH2'`WCp,/tT M@l%G!B>KMNMs}E B~QUMt&xM9u5}%lwg@n̘[9XR(rLvR @~00Ssԃ1fTY }_1E3L3 Dk4IE ĉ{X'حTnc<ٓxX%ݭwdyQAY,gZLGt5ES~g14_vP8e*m4NN 4\~% xCb^;@DhҪ)CovWh5J0,?}a\.BOz leo>A RVDG^8H0l/,^F`@4A~0*zz%* i=_[bY3Skn#Or˱a(45E&r2eqFJm ,epd,tU{Ryٯ D@3@SCY9\ וLk_Б:mE'^%O u&/:%l9ԲG{v HڷF Aei(z72Su:|}@nC!K&{@3H[,ݸ_ӏŢ7 X@M(.U1F(ޅCFm,*ò!;s1U !f=͏ǡ U+ST9OHGЇ񜠮2 4G9 V&kc:?Mg4 4eUI">b_O2A':Bf 6hg٭~l3U~xCni>fKP' {w=hVvޅ|A9G5}9)w*؏"ո:5E<D[FeGU!P/#sr͚̘_O$R5;u鞄ĥth<4-^}n Z4Asz}1.:2W5[V=4 h43k{A  SfEB|Pb̠.S+ĤP]óA3hm#4 hL4u)d9 ߩ׺M[hfnJ:dԖ@4!_j!_.\ippC] yA3 wD&MfMܯ`5vM!twyAwdTAsM"[bHl csXnW-7Q:& DZUCysBB:&1!L[Q'I@fsB]d4z*ih+c͡s᠜"pβpnZVrm,Z4V%(AWI@)`Qv=&thɎ<;|)2ePCgMb*.eֆ9%+ӰV[ rDE@=oBt>ɆHs ȅ=j5|(U>wy\*h< tltX0Z$S+%" j`U:FvF/K/BvEN:ja "=cM>MmXn lYAXyl84gju(y!:'Fy,a)tRΚzU\*%΅}쒕izqO z֞VrsҲpUX/CF:M@b#q,{M}Y4E(:k]ԉ5iY/| -2}&cͩDV Gև`\]\ 5 Nzwt@.M.Wt'vuqE@AӂA'M ӓ&yc1p{HtM hЌ*&;| h:kR쫨TJ hS;ge)EK%A3B4! ۣ=u@H_ _-AmjHY(W I[82,Fk 2ejcH&ͣVѼKTKxV- {=wB۹/1z_> T$)=ms^%x/k&I@hA cZqM:!'9>%1-yQV\L9W47x%)$M3~ΪholEY.lH0р DC0hCY-EAʜ5s̆UV)y^H@fPQQt 2VG$zefЌO)_ 075)UTJ vaTͺ0hr4MQ}L]\|hb^4kub&ً{ 4 h2ԊclAMWpEץHh qNٚ<*C*EWԀ7NO~S5 Mwq!vϠݦtOp 4)>q*T2F;J@7g[ @/N-F[4i :?⠑4 huBƐR_ՠo [VP j0 [ Z|W?;}ttӄhd44c EZ^4^ɕ>M ^QmׁLAs"K42#^&hBj\{>5@$@4=f.wI&ۨΖrR+VfX4 XێEt`gN|>HYXػR,L܊@)+&.:ڕ![1d۞R h<|$y:iݯ2FiQ̢`d=;16a#FƟR|N|\O$ xp+;3w}5d>A94p-TmV=ԛ($@D( &-Qv" 2˫ꪾWKps%4R9l4(HX30&̈gkx0nقB!아 D57v~҄9TV#ϒ9$v&M4oD>=Rh["* DQs8Sw[Y !xǐlh KN(hfhBtC驯hhz0Rϵu@0'^y:Bs{$9&%ʤ8ȿd{u|/iͣs+~S#ݣ鉮51}4 h$N# &]*5I~[É$8LI􀠉Rm32 uSq=;%ә+RӏB`p"_7@_`X&<%odS|FӏVAEQi<Ĺ>bЩ/U+H63O(hf6hQ 1g[)K;gkzuȋq<[g\砌{RJiU 4ʹ96N-~Ex[6dJeǚs0ϭq,hfE dy*}4X߻*J>0IRcduN(hf흷LFIJ=<ť_!]$@Nr0 4/v嵥|_(w?|ܠ.zʤ!n/ A|H}nv9h[}hr$ y4 hm8V2ȔE<:e%g4!nNMO&^,@P\VHЩHEj.yZq}e-pOŜZ[,A2J:R-m0/^nCnea*YsiBvߣC|bœ~!TŊ B|4IghIT~ت' ZuNu!I@3-V㒠DRR5eH|R!O.~n@/P:'|H 4}Sr)Q@oX >3vP7ik4PFA+2"M:z=ȿGhd8y4b <3 9t$yܠɊDp$?$dvI=Qr٩e('D\7Ь儣#3),T ~HMP$. ,Fd xN =j1sg?[(Si&M Mi i+,YS(jE@MnšLT8'7 Jr `@&يh|mź\M80>\ )Ý]oX^́ܥHD j 퐉gQL.j*\!0XLGI5"ivFJ\aNqgqطcCHH,k_h#4 &%!~) bxJRE#h\'r߫dnv}`Y+Fe t1/??ܢ LA&J+PDA˷o#=!wYyj2ELO:(X jzK'$pEg~]33: Wu$ǎٴ'jCQy*L klZ4)h~yA Xr-o1@FoE>֎Ϭ--4 FB1WٳZ; "p,3e9_%)X IV\UNK*j=: 眪em u“F箦ZD9R ͒ϢՋ絢YT`ӈ&M 4)h6M).w<] \\()KhzvOOfF4[|,lH5f c!;'+7d?cu5qщ 4L-4=8TE x>KWs-Z:UЦ\(hRФIAfۦ w88[^%KFv'cM3Qi ZTjOei)XD r ج:CO8 ͈T'ݪp뚲tK=Ɗ(,JRl{p ؒQ`~3dx4s Y; 4'>HS (-h.0ͻ Hzh$d+_47sxX"(yD"Ag 4EqC+msw7vgf_ ͞:oN!S3,XC5&3$0 xp=d:$:0$ mt::^$jECM[&lN%H:Y/ 'Jb#( ߒwMPn7 ҩ/{Ñh 6q6ִpF;jnvyCrh1lj|),/þ;k|х,L,3MM6{_n4hN;qMBBeV)_4[()p@I,eI9`UA>Vvf+? jtxP=!\̪4{0ٜBw?"5s^sDSu1Hp(}z,` ?#y)n=A棁z+2dgH! -ۧH\ ,6uXkЄkK~s:S;e@sg7C7$1]`Zm{/`aJyW'y)v i2[1м O3˰ (KgNfa~-;"Ž4`^݄(z `󙄔 Gb}h΃̃@ X '%ktf LAn t˵p9JI k 9h%O`٩L ]0J23m%Jw0|nqp!qT`c*ac~FU6%NÂ&F$DZqYW=907jgn' Poo7*Ϧ (PݱpNtsi1 ^ P/Y%0h>s'B)riĝ1l 4' x@S!稜]_@*1Hg ۠tz= D1aDtɄ/{2lVq#M]㫛!y;q8`os EE+fF LAnfp%]jr+ybTx.u*?hI23Z{⠐J_xj2zZ>8e/Q yMK9; x^+@3@Rkehb12MZ& >J/Lo:R#e˻|l#ygIq x @o~f2S>RC 'àhY4(:fj%Z!wXߝXD:lqϴE`hdo 7#ؤB:fqW#jN,d7%Q^Pьw㇄-0M taUuPV{ϥ+93)5h㠤l\hҩbWjI5@/->8ff<[\WCM/NҌ :{yLAVKKuG s @31BQ: svplځpuye/#;!l,0^Hnh>Yt~$ͣq=rٖۺɲ@g?H]"7Y` 4rV3QörSP9)hx7ܜx :K:@fu_qm4ƺwG\]tP35w/x*g#r )Iyozev1DPoB0ggiq/)ؕ@(Kr<3 h.#: C "C?OpNao@4ʢ#4gUT_M(<٬yrU%|9q^l"=QLeӀ=h|<$'-ݢb^M'?y6ܡ8>(lo>v1d LA&]n4$GU6$tK$WxUJ^m:|`1r d^dW?ww4[L݋1qeߝ'Ix_-q6N)gh,hO/r=S4 )t# =`$EwtɠEMٌǀ'Fsg6Ayw^A t,([Jr S:ڣIA&MZPeCrXΔ|ĐMhE|T p|d\hXh?bFNicp$'yp/(i;dG~.|'M6g79`bz0K)@*W{ {]@@S$Hkh^1OBj͟TϿt_Z UPRpQfx>r'2PмY9?r.x(ӕr7UY\0:u׬tsT?} o$xGGAQYDG<7Hmd%GO( u3BA{v (eUb/mH$7* $+M@A`>M .ԅ~iQ`Z{_4qSQeo%ODswtdC@A.|8jrgCLW(Q@w0Rn}Vy wt~xhpZR7xUo!0&*l:h@([ |y~1wt+D44Ԕ& .8ܢ"7AJ']hs NANfnU_h ͻ  rziȚ\b=9ݨUC~GjQ.{RX)IrX'*‘jR/)^"^FIڧ4{4jRW/Z!ghQ rD6D/< /~ԍ$SW[4f}3hl(h],.ɍ赦rgKKFߝ\2NF8W!94a _XG-ʒ )hv BZ.දU=ʹWXw)^M< @n:uDZ 9L (Ĉ&= fڟf >Ѽb2Iw20&}'hTБ8zJ28W|نo#_Կl!ءyAF&$X`~iy M kNEW WM沫.U мPTpp]f C_FJ%qFǦЛLf&v9]FAx|n$Wm|ttl4IfhP 6ՙBu=Nbӱj% MǴ7U0w_Zl7Ј2kOUz[\&C>ۖ ~ ~`q3\ͷE5ٲXUbRh80g/fHJGИ8 Jɷ0dP/$(pLI[|a 4k[ %B );X ¥ʖv jbl$dHd=שּׁ~MuмG=vBA^U Dm (j2P ٲ!hܼQ14;._kr"fbZz~'_SaE4&Z.\K5L}JAf/͍{#]hTFJeAӃl3fZfFZ t36)xݦIAI䨺by᪰&ݺY8FX A MDd  a:#ld,J(zԌHA涀f%`]4nf ocBM/])ϼkE)+LMm\@&wӉ_lꑦ"I Qb~x&! oH) 4;֢hN]+ c:D \xچ'pV롓/VB/jVȥ2hjwڧ4{ 4 E?&'/Hps7o5h71+󲟏J,f_Zh.fpdLi@pL' ,);abH\MޥCݡd9N}JAZy-y4)hbI5!o+R`\7\cG =t15ˌ6f"tKjqbM sᛛ<Ȯ~S^$X쫗/2%f?Qм[*Vt2y~lӰ76ߖRJ&`d$ںXF%#E nd</m߉te|ȰyA7.YIiS/gL=&uYϣD!֛#˴Y/R#>h)\J1L.o'a/pO~qLc<ϙ-~%ϺĚe%saw4`>7>LT'NJ46Gs;M 1!],v\|<'5ҰyAG.YłX0oљq.8:Z_&dfؼшf!5;I#j  ꭱI 4ՄS>9ƠYurpgc5h<~M7Q\3<.wګ4rX*2^8R& ^rJWev|hveo[ٱp!v4 4D=E" kA,2V>1jbܼ@t1m6+nrx`"|,煔i8^fk{%mj6Kbv5ɿtQD9r'IAqsX)G 12:Cd7Ǹ7=eJ4;Qk\?r0~>COѴ #EU-FF/_M0is=&_ oa7҅0k/fO|1>6=2l3PJ7(fi tOw N(hǿIBW5Ó84. oyC{ҕ7WMp]Kkco>9 shp"Ь9I\'RG:ou|#gh}spyۅo*U4S{z4&h#dkmLJ.;쁯 |DRw]c(hR`[2i_9nl>hb-勔ّh(hvI]w\Pg 4I_A3DCkfE 2vYY99!V9Nh1f bTϵ)NmD+YZE< @.JA:Q J 4)h^^GSM(6"CrLlE)hvqƕ‡b >hZXZUSEb+(@4otY%eRͦIA)L׿9SOyN B﷫!RV#նW6|_fW[M W#`l#7c&FP48h-]r+nUMp<\[h2ī͌6IxGHk%ጯwpԋ oUsŋslemԵ(h4|{Kh4I䫗c ͻvmRФy+x*c u`|G#מ-XҜ逧N;Tي>|i.!D .yk}Ya\z ^M9YYI>[seZkZεi_Ԁ9Ml K .F-(h^SڨEje[s0ŴihY+@CPNq Yшy9)gہ&j:h"n.te%~lkQL,\>y@ٶTSO7)hޫKS>OAy>r;`s)hҕrf6ьC:5!ʸ Ĝ{dCD^e#zfGij/U0Q?髪X(AIkZ [iRɻ䷺ܶ4hzF4Ni$H i>'X_>O=s4{ꐂf>HEK0 "| Qx@3 &ёe^yIWa4ۭIYLɻ?+t&5@S̪ry/5o; $G]ءrΎ ?mAu]#y'#Q >ǴZ #dD. q@7 )j\" vK!=  -ʡWA0Ķ?M6qvX c@=|9'?B?=)s΃:b=7i͐Q }ēob4JAV 3mv3id4_[@t3Ȼ q=!>M 4Ab=|`P>A}Y{ prz}{:|҉KM޿i`# s~"yĔ7> M#h}?7 R~sB-FAo.L!G3ͻjc@0_0l%';"t}0-!n*;?w'@L\4_ h Z~<Q3'QLF@!?}h@~# !"-+c)hҕF4Mҕ&VL ,H4)h҈fOD4 E }I8>, 0$p6Bnb K:oGQhcCƆCc叴q|(hj)`4MRм':+&ͯθ]ʳ^Ü-n,/vwëU1/ukH_)@WSxUzXթAePo(0M 4BeV|n:ܧW}l&P~S;WD[h$i0{xI}{g(% h[&])hދ*"H$ @%_y$kuU鮎a5rkL~ոفGW',0d*#U!348Ɨ &4)hBМ=QmR,AK<&cd~ufK\$1=E{3!4Ṙ<B\uOb7u4Єin1 ty_l|[f!<f>K2%OH68*hn??#yt]UF6~2&BY-jmͣz6r*G 4oh.ENawн?y6ܡTAY@AcŐ+^Ⲃ|fi*n^Eb4)h 4) HQ㬪:ވhPY3j?NcIfmKSaq0 NH\\sjeߕ#DU9;/;'Y5`YSvAj@7 %xIRTygA3찫|d|VsUIy'Qz0 %NQneCw=h ga5C-  =y%)WB? "GN  4.;G#>4"h\Di+!e @- BƐ}shD6T.KW٥%4&͎w4CMUPQ@y1; Y;As'p"2v …(4`!ES@CNo:֒Cdcrr>;~Ϋ83gaxc_]:y@! p" x.(ҙ\q!痏}VYIL C)h0h^Yˠrf90+f_M$<c?K(T<:A9h֫f< H6z|9LL,L5DT$f#H~8j~hLPмYfzk?{*Ȗ&МwrsS!NVl3$4EB#IhSФIAM,JTP C`I$唺FCXM3+c04?*ob(f Uz6d9&olldrh`Pм髪v2rka/xLRmZo)`)zFE| `:~2d&; ?yS`Ry0*Vk6ĿI h~R~Q:5r72y44?8bv@ c?"{yCA&׹aѾc:9 b#(K*<`iN!s^_imzY-ʅ<><\+$M$%(hRмyfl D%$wdcCQ#G!=Jۆ9f6Pw_ e<&{2RwRA I 3x'z}(h(벖@nڨeR&U96}8KHA 0 APނ$[[;;q)hRмS߮~M7N`GyKY<r=͐6G3 >4<{gh6h"r6?&ùۂ7>4iUP>7Ȇ94)cCMhZJ/kd^>dSj#O[Gr OSUL;r+˩1+t7PIA:] {ۅ3/sBNwqg ] uy9ըFJ|X! }Vgu9;D(t kLg<^4QTB=/$v6G< `q![@5J&$8KɷUs.DA2MzˇWZZ!YS`i#%/[ L!%KDXɥ'c&k&»ԁ^\Bo+uNB-(zIFm{@r1dq]9x| G)B0*CjR>ǧ9/VOf)6Lagk@]A syp :^͒2փlMSzY&Qyj8;,z,._@1P>D'*p5?jR#Sӓ+4)h^eeAЛ}D%Bk+uNAS/ޣ(?R?W]4٬2>40?ϭ(hRķ)K#Dne\5ؚ 2^GMS6%-K>VX&R\kBK~] 4^ f!/[ksuZ!xKܥ*M!,+ hK/-6E4sNj -o}3c1tN{'ZY_OnSR&yKdB&͛޿y^ Tý>#ýʝivb e>(hRl_חm_ka|͠2?TS=feKH4}*h h_@Q9gEA?fh|Y4\f K}h9zHZaPCLUVE#1Fiuz&͛bVz̻zO扒eESɄPx#pL4!pz(%2湗8I Ax5?R2lьe0 }qs} mAP~1o?:h~(V! 梠IA&DCɈ XIMP6&S-9Ӭlrѳ@95T!n ˈZl5Ru4}&I9gF)h`a(yZT?E_hҋGXkIq Y\A&Qм.jM4t=ű@s{Wq8$1JBI쑮/^$;h#o_Lh~y~ԡPhnG!8}ga\\|3TAo 梠IA-6@ӆhB" 7FoA}OQ~ ":o[] ͊w={l(JRWGBlxSU'Xwlw; sk5<%Oɠ ?NPФy=iI4z4@ytR6^jbe nX@SN_ `QA`>o QAR#){~Д[؏o 0 Ҫ(h{ЌLf0S+4}4I4 !B DODF擷8Z2^-`Ubֳ KMvԜ!.^Q-S!SMs:IAZ@3@TuSAhh -@(40+4>eL'5*^4!E7-ASѓɫ@SP0|j0Мjk+ЄmԺA&MX,8h2A#yx^ [WU|D90h86\}Ə"v0>q0o*UTh0P 1oxxj5{4Vތi Ld$Zɏ `yIir  wN=Bt\TP. bxE[#]*;#}-K&~#M(9*q:.N㏏;)\^ NJy<'Jz4Z<},u^aԆA@S8]P'b59'^NWɼtw˱̻֛(hҕ:u=(g~?\|\\(U-cų 3εBJ"> pD3t00U$&ߊW 4yE@f;ML:I t٥z)mpmkI{=Od`4G喟-yIeDolCfЄM~}M\8.FżwdmnA+M3ѷ%;OBG2JA&6Nz۹Rt]M,ŝax,ϷW7.#n~ X%/6AEH|G˿R-~8 T*,.WXF+` ·}qXY$)rQsz"G Ȗ2t3܌xv&͂H~,+9mQ׋uH 4Tk"Md_΋B8$@Y6eHzѢWUEm~۔=gsUgmŠliM\Yz.GA摴Ukb<|1OΌ7)hҕ&]^k,ষJhiUqf}-aV^`8?:'#Ġ 559yV (ͶC͠f+ETDNvV=hYf Yʿ> [LLϖꠉ&͛f@KZxש9iZ{6=a&])hҵ8ϭ xѸ 4H9/"+xeEd-FdHL6d&+45l HzZ48& XQ|4R?%!gE+:RV?\AMj:9 b#i5l. 4o{[a$Lt@w"Hj#J]/D 4rrou[VJqy4{a%%ycyAjLJDp|dܮ4!nb?$vCB90 2l^v,AH~em k17pkl(hYTm{H =落$[FB?Gc}ps7s*6;:3%uT'Bh*˄Yg[lR4lRД??]>ySΣI. h@cO/5ߊ9-As}jDDOmNfbQװg/$#DJHiUn/Dir$j=M BxXVJ{ 6HoAKR`'*-:279<0yW?ɼx~^Hh a&~w"1࿤?V~ J?x_om|P"Io7!9NB )JzbK̐ A q4 gfk ]/EohdTO-{!slSN4oh.0F}Vyx9Q4=ܜSutaN&hLBqc_" :gW ?AN"[B tkwh$ϯMr8_TUMPVM fH`UѲaaN;m9/{ƶ|(14S )zg>}y-Mj}.:/d&Q {K9(hB<Ay0Ch 9Ab*%9.;_arѬ#'XYiD: 0tB'tRФ+uk6L~$K~Eʳ^Ü6%̰̐CD8Ɋ}H#^DQ.|VtMG Lv0Ŋh/,VhL),uۼ'͍MI5kQ.! i+sWoUژ/<u$hBIjyH;AS@͑eW[ AsG3hVN>`ao=h3#?~PФIW ZhؼmysfH-`40SN"ȸ4ɍWBꂰjn rMo}#򛼎aR [tYY95*mo4*z8T'Oơtj?끢PФI(hҕf+ :` 4ʒaw0 w{7l޶97ht/X]\rANܡs I=FC E< ׽[OL)oP`4Bذ6^B@窣g`bE93ؖG³y+yh; /^d3-/.test(key)), output: { file: `dist/${meta.name}.js`, name: "d3", format: "umd", indent: false, extend: true, banner: `// ${meta.homepage} v${meta.version} Copyright ${(new Date).getFullYear()} ${meta.author.name}`, globals: Object.assign({}, ...Object.keys(meta.dependencies || {}).filter(key => /^d3-/.test(key)).map(key => ({[key]: "d3"}))) }, plugins: [] }; export default [ config, { ...config, output: { ...config.output, file: `dist/${meta.name}.min.js` }, plugins: [ ...config.plugins, terser({ output: { preamble: config.output.banner } }) ] } ]; d3-hierarchy-1.1.8/src/000077500000000000000000000000001334007264500145765ustar00rootroot00000000000000d3-hierarchy-1.1.8/src/accessors.js000066400000000000000000000002461334007264500171230ustar00rootroot00000000000000export function optional(f) { return f == null ? null : required(f); } export function required(f) { if (typeof f !== "function") throw new Error; return f; } d3-hierarchy-1.1.8/src/array.js000066400000000000000000000003721334007264500162540ustar00rootroot00000000000000export var slice = Array.prototype.slice; export function shuffle(array) { var m = array.length, t, i; while (m) { i = Math.random() * m-- | 0; t = array[m]; array[m] = array[i]; array[i] = t; } return array; } d3-hierarchy-1.1.8/src/cluster.js000066400000000000000000000040551334007264500166210ustar00rootroot00000000000000function defaultSeparation(a, b) { return a.parent === b.parent ? 1 : 2; } function meanX(children) { return children.reduce(meanXReduce, 0) / children.length; } function meanXReduce(x, c) { return x + c.x; } function maxY(children) { return 1 + children.reduce(maxYReduce, 0); } function maxYReduce(y, c) { return Math.max(y, c.y); } function leafLeft(node) { var children; while (children = node.children) node = children[0]; return node; } function leafRight(node) { var children; while (children = node.children) node = children[children.length - 1]; return node; } export default function() { var separation = defaultSeparation, dx = 1, dy = 1, nodeSize = false; function cluster(root) { var previousNode, x = 0; // First walk, computing the initial x & y values. root.eachAfter(function(node) { var children = node.children; if (children) { node.x = meanX(children); node.y = maxY(children); } else { node.x = previousNode ? x += separation(node, previousNode) : 0; node.y = 0; previousNode = node; } }); var left = leafLeft(root), right = leafRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; // Second walk, normalizing x & y to the desired size. return root.eachAfter(nodeSize ? function(node) { node.x = (node.x - root.x) * dx; node.y = (root.y - node.y) * dy; } : function(node) { node.x = (node.x - x0) / (x1 - x0) * dx; node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; }); } cluster.separation = function(x) { return arguments.length ? (separation = x, cluster) : separation; }; cluster.size = function(x) { return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); }; cluster.nodeSize = function(x) { return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); }; return cluster; } d3-hierarchy-1.1.8/src/constant.js000066400000000000000000000001701334007264500167630ustar00rootroot00000000000000export function constantZero() { return 0; } export default function(x) { return function() { return x; }; } d3-hierarchy-1.1.8/src/hierarchy/000077500000000000000000000000001334007264500165545ustar00rootroot00000000000000d3-hierarchy-1.1.8/src/hierarchy/ancestors.js000066400000000000000000000002121334007264500211060ustar00rootroot00000000000000export default function() { var node = this, nodes = [node]; while (node = node.parent) { nodes.push(node); } return nodes; } d3-hierarchy-1.1.8/src/hierarchy/count.js000066400000000000000000000004071334007264500202430ustar00rootroot00000000000000function count(node) { var sum = 0, children = node.children, i = children && children.length; if (!i) sum = 1; else while (--i >= 0) sum += children[i].value; node.value = sum; } export default function() { return this.eachAfter(count); } d3-hierarchy-1.1.8/src/hierarchy/descendants.js000066400000000000000000000001711334007264500214040ustar00rootroot00000000000000export default function() { var nodes = []; this.each(function(node) { nodes.push(node); }); return nodes; } d3-hierarchy-1.1.8/src/hierarchy/each.js000066400000000000000000000005751334007264500200210ustar00rootroot00000000000000export default function(callback) { var node = this, current, next = [node], children, i, n; do { current = next.reverse(), next = []; while (node = current.pop()) { callback(node), children = node.children; if (children) for (i = 0, n = children.length; i < n; ++i) { next.push(children[i]); } } } while (next.length); return this; } d3-hierarchy-1.1.8/src/hierarchy/eachAfter.js000066400000000000000000000005411334007264500207740ustar00rootroot00000000000000export default function(callback) { var node = this, nodes = [node], next = [], children, i, n; while (node = nodes.pop()) { next.push(node), children = node.children; if (children) for (i = 0, n = children.length; i < n; ++i) { nodes.push(children[i]); } } while (node = next.pop()) { callback(node); } return this; } d3-hierarchy-1.1.8/src/hierarchy/eachBefore.js000066400000000000000000000004321334007264500211340ustar00rootroot00000000000000export default function(callback) { var node = this, nodes = [node], children, i; while (node = nodes.pop()) { callback(node), children = node.children; if (children) for (i = children.length - 1; i >= 0; --i) { nodes.push(children[i]); } } return this; } d3-hierarchy-1.1.8/src/hierarchy/index.js000066400000000000000000000035221334007264500202230ustar00rootroot00000000000000import node_count from "./count"; import node_each from "./each"; import node_eachBefore from "./eachBefore"; import node_eachAfter from "./eachAfter"; import node_sum from "./sum"; import node_sort from "./sort"; import node_path from "./path"; import node_ancestors from "./ancestors"; import node_descendants from "./descendants"; import node_leaves from "./leaves"; import node_links from "./links"; export default function hierarchy(data, children) { var root = new Node(data), valued = +data.value && (root.value = data.value), node, nodes = [root], child, childs, i, n; if (children == null) children = defaultChildren; while (node = nodes.pop()) { if (valued) node.value = +node.data.value; if ((childs = children(node.data)) && (n = childs.length)) { node.children = new Array(n); for (i = n - 1; i >= 0; --i) { nodes.push(child = node.children[i] = new Node(childs[i])); child.parent = node; child.depth = node.depth + 1; } } } return root.eachBefore(computeHeight); } function node_copy() { return hierarchy(this).eachBefore(copyData); } function defaultChildren(d) { return d.children; } function copyData(node) { node.data = node.data.data; } export function computeHeight(node) { var height = 0; do node.height = height; while ((node = node.parent) && (node.height < ++height)); } export function Node(data) { this.data = data; this.depth = this.height = 0; this.parent = null; } Node.prototype = hierarchy.prototype = { constructor: Node, count: node_count, each: node_each, eachAfter: node_eachAfter, eachBefore: node_eachBefore, sum: node_sum, sort: node_sort, path: node_path, ancestors: node_ancestors, descendants: node_descendants, leaves: node_leaves, links: node_links, copy: node_copy }; d3-hierarchy-1.1.8/src/hierarchy/leaves.js000066400000000000000000000002441334007264500203710ustar00rootroot00000000000000export default function() { var leaves = []; this.eachBefore(function(node) { if (!node.children) { leaves.push(node); } }); return leaves; } d3-hierarchy-1.1.8/src/hierarchy/links.js000066400000000000000000000003661334007264500202370ustar00rootroot00000000000000export default function() { var root = this, links = []; root.each(function(node) { if (node !== root) { // Don’t include the root’s parent, if any. links.push({source: node.parent, target: node}); } }); return links; } d3-hierarchy-1.1.8/src/hierarchy/path.js000066400000000000000000000011361334007264500200470ustar00rootroot00000000000000export default function(end) { var start = this, ancestor = leastCommonAncestor(start, end), nodes = [start]; while (start !== ancestor) { start = start.parent; nodes.push(start); } var k = nodes.length; while (end !== ancestor) { nodes.splice(k, 0, end); end = end.parent; } return nodes; } function leastCommonAncestor(a, b) { if (a === b) return a; var aNodes = a.ancestors(), bNodes = b.ancestors(), c = null; a = aNodes.pop(); b = bNodes.pop(); while (a === b) { c = a; a = aNodes.pop(); b = bNodes.pop(); } return c; } d3-hierarchy-1.1.8/src/hierarchy/sort.js000066400000000000000000000002271334007264500201020ustar00rootroot00000000000000export default function(compare) { return this.eachBefore(function(node) { if (node.children) { node.children.sort(compare); } }); } d3-hierarchy-1.1.8/src/hierarchy/sum.js000066400000000000000000000004101334007264500177110ustar00rootroot00000000000000export default function(value) { return this.eachAfter(function(node) { var sum = +value(node.data) || 0, children = node.children, i = children && children.length; while (--i >= 0) sum += children[i].value; node.value = sum; }); } d3-hierarchy-1.1.8/src/index.js000066400000000000000000000014601334007264500162440ustar00rootroot00000000000000export {default as cluster} from "./cluster"; export {default as hierarchy} from "./hierarchy/index"; export {default as pack} from "./pack/index"; export {default as packSiblings} from "./pack/siblings"; export {default as packEnclose} from "./pack/enclose"; export {default as partition} from "./partition"; export {default as stratify} from "./stratify"; export {default as tree} from "./tree"; export {default as treemap} from "./treemap/index"; export {default as treemapBinary} from "./treemap/binary"; export {default as treemapDice} from "./treemap/dice"; export {default as treemapSlice} from "./treemap/slice"; export {default as treemapSliceDice} from "./treemap/sliceDice"; export {default as treemapSquarify} from "./treemap/squarify"; export {default as treemapResquarify} from "./treemap/resquarify"; d3-hierarchy-1.1.8/src/pack/000077500000000000000000000000001334007264500155145ustar00rootroot00000000000000d3-hierarchy-1.1.8/src/pack/enclose.js000066400000000000000000000056401334007264500175070ustar00rootroot00000000000000import {shuffle, slice} from "../array"; export default function(circles) { var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e; while (i < n) { p = circles[i]; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function extendBasis(B, p) { var i, j; if (enclosesWeakAll(p, B)) return [p]; // If we get here then B must have at least one element. for (i = 0; i < B.length; ++i) { if (enclosesNot(p, B[i]) && enclosesWeakAll(encloseBasis2(B[i], p), B)) { return [B[i], p]; } } // If we get here then B must have at least two elements. for (i = 0; i < B.length - 1; ++i) { for (j = i + 1; j < B.length; ++j) { if (enclosesNot(encloseBasis2(B[i], B[j]), p) && enclosesNot(encloseBasis2(B[i], p), B[j]) && enclosesNot(encloseBasis2(B[j], p), B[i]) && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { return [B[i], B[j], p]; } } } // If we get here then something is very wrong. throw new Error; } function enclosesNot(a, b) { var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; return dr < 0 || dr * dr < dx * dx + dy * dy; } function enclosesWeak(a, b) { var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } function enclosesWeakAll(a, B) { for (var i = 0; i < B.length; ++i) { if (!enclosesWeak(a, B[i])) { return false; } } return true; } function encloseBasis(B) { switch (B.length) { case 1: return encloseBasis1(B[0]); case 2: return encloseBasis2(B[0], B[1]); case 3: return encloseBasis3(B[0], B[1], B[2]); } } function encloseBasis1(a) { return { x: a.x, y: a.y, r: a.r }; } function encloseBasis2(a, b) { var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, l = Math.sqrt(x21 * x21 + y21 * y21); return { x: (x1 + x2 + x21 / l * r21) / 2, y: (y1 + y2 + y21 / l * r21) / 2, r: (l + r1 + r2) / 2 }; } function encloseBasis3(a, b, c) { var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x3 = c.x, y3 = c.y, r3 = c.r, a2 = x1 - x2, a3 = x1 - x3, b2 = y1 - y2, b3 = y1 - y3, c2 = r2 - r1, c3 = r3 - r1, d1 = x1 * x1 + y1 * y1 - r1 * r1, d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, ab = a3 * b2 - a2 * b3, xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, xb = (b3 * c2 - b2 * c3) / ab, ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, yb = (a2 * c3 - a3 * c2) / ab, A = xb * xb + yb * yb - 1, B = 2 * (r1 + xa * xb + ya * yb), C = xa * xa + ya * ya - r1 * r1, r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); return { x: x1 + xa + xb * r, y: y1 + ya + yb * r, r: r }; } d3-hierarchy-1.1.8/src/pack/index.js000066400000000000000000000035751334007264500171730ustar00rootroot00000000000000import {packEnclose} from "./siblings"; import {optional} from "../accessors"; import constant, {constantZero} from "../constant"; function defaultRadius(d) { return Math.sqrt(d.value); } export default function() { var radius = null, dx = 1, dy = 1, padding = constantZero; function pack(root) { root.x = dx / 2, root.y = dy / 2; if (radius) { root.eachBefore(radiusLeaf(radius)) .eachAfter(packChildren(padding, 0.5)) .eachBefore(translateChild(1)); } else { root.eachBefore(radiusLeaf(defaultRadius)) .eachAfter(packChildren(constantZero, 1)) .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); } return root; } pack.radius = function(x) { return arguments.length ? (radius = optional(x), pack) : radius; }; pack.size = function(x) { return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; }; pack.padding = function(x) { return arguments.length ? (padding = typeof x === "function" ? x : constant(+x), pack) : padding; }; return pack; } function radiusLeaf(radius) { return function(node) { if (!node.children) { node.r = Math.max(0, +radius(node) || 0); } }; } function packChildren(padding, k) { return function(node) { if (children = node.children) { var children, i, n = children.length, r = padding(node) * k || 0, e; if (r) for (i = 0; i < n; ++i) children[i].r += r; e = packEnclose(children); if (r) for (i = 0; i < n; ++i) children[i].r -= r; node.r = e + r; } }; } function translateChild(k) { return function(node) { var parent = node.parent; node.r *= k; if (parent) { node.x = parent.x + k * node.x; node.y = parent.y + k * node.y; } }; } d3-hierarchy-1.1.8/src/pack/siblings.js000066400000000000000000000061371334007264500176730ustar00rootroot00000000000000import enclose from "./enclose"; function place(b, a, c) { var dx = b.x - a.x, x, a2, dy = b.y - a.y, y, b2, d2 = dx * dx + dy * dy; if (d2) { a2 = a.r + c.r, a2 *= a2; b2 = b.r + c.r, b2 *= b2; if (a2 > b2) { x = (d2 + b2 - a2) / (2 * d2); y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); c.x = b.x - x * dx - y * dy; c.y = b.y - x * dy + y * dx; } else { x = (d2 + a2 - b2) / (2 * d2); y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); c.x = a.x + x * dx - y * dy; c.y = a.y + x * dy + y * dx; } } else { c.x = a.x + c.r; c.y = a.y; } } function intersects(a, b) { var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } function score(node) { var a = node._, b = node.next._, ab = a.r + b.r, dx = (a.x * b.r + b.x * a.r) / ab, dy = (a.y * b.r + b.y * a.r) / ab; return dx * dx + dy * dy; } function Node(circle) { this._ = circle; this.next = null; this.previous = null; } export function packEnclose(circles) { if (!(n = circles.length)) return 0; var a, b, c, n, aa, ca, i, j, k, sj, sk; // Place the first circle. a = circles[0], a.x = 0, a.y = 0; if (!(n > 1)) return a.r; // Place the second circle. b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; if (!(n > 2)) return a.r + b.r; // Place the third circle. place(b, a, c = circles[2]); // Initialize the front-chain using the first three circles a, b and c. a = new Node(a), b = new Node(b), c = new Node(c); a.next = c.previous = b; b.next = a.previous = c; c.next = b.previous = a; // Attempt to place each remaining circle… pack: for (i = 3; i < n; ++i) { place(a._, b._, c = circles[i]), c = new Node(c); // Find the closest intersecting circle on the front-chain, if any. // “Closeness” is determined by linear distance along the front-chain. // “Ahead” or “behind” is likewise determined by linear distance. j = b.next, k = a.previous, sj = b._.r, sk = a._.r; do { if (sj <= sk) { if (intersects(j._, c._)) { b = j, a.next = b, b.previous = a, --i; continue pack; } sj += j._.r, j = j.next; } else { if (intersects(k._, c._)) { a = k, a.next = b, b.previous = a, --i; continue pack; } sk += k._.r, k = k.previous; } } while (j !== k.next); // Success! Insert the new circle c between a and b. c.previous = a, c.next = b, a.next = b.previous = b = c; // Compute the new closest circle pair to the centroid. aa = score(a); while ((c = c.next) !== b) { if ((ca = score(c)) < aa) { a = c, aa = ca; } } b = a.next; } // Compute the enclosing circle of the front chain. a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a); // Translate the circles to put the enclosing circle around the origin. for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; return c.r; } export default function(circles) { packEnclose(circles); return circles; } d3-hierarchy-1.1.8/src/partition.js000066400000000000000000000023621334007264500171500ustar00rootroot00000000000000import roundNode from "./treemap/round"; import treemapDice from "./treemap/dice"; export default function() { var dx = 1, dy = 1, padding = 0, round = false; function partition(root) { var n = root.height + 1; root.x0 = root.y0 = padding; root.x1 = dx; root.y1 = dy / n; root.eachBefore(positionNode(dy, n)); if (round) root.eachBefore(roundNode); return root; } function positionNode(dy, n) { return function(node) { if (node.children) { treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); } var x0 = node.x0, y0 = node.y0, x1 = node.x1 - padding, y1 = node.y1 - padding; if (x1 < x0) x0 = x1 = (x0 + x1) / 2; if (y1 < y0) y0 = y1 = (y0 + y1) / 2; node.x0 = x0; node.y0 = y0; node.x1 = x1; node.y1 = y1; }; } partition.round = function(x) { return arguments.length ? (round = !!x, partition) : round; }; partition.size = function(x) { return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; }; partition.padding = function(x) { return arguments.length ? (padding = +x, partition) : padding; }; return partition; } d3-hierarchy-1.1.8/src/stratify.js000066400000000000000000000036161334007264500170070ustar00rootroot00000000000000import {required} from "./accessors"; import {Node, computeHeight} from "./hierarchy/index"; var keyPrefix = "$", // Protect against keys like “__proto__”. preroot = {depth: -1}, ambiguous = {}; function defaultId(d) { return d.id; } function defaultParentId(d) { return d.parentId; } export default function() { var id = defaultId, parentId = defaultParentId; function stratify(data) { var d, i, n = data.length, root, parent, node, nodes = new Array(n), nodeId, nodeKey, nodeByKey = {}; for (i = 0; i < n; ++i) { d = data[i], node = nodes[i] = new Node(d); if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { nodeKey = keyPrefix + (node.id = nodeId); nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; } } for (i = 0; i < n; ++i) { node = nodes[i], nodeId = parentId(data[i], i, data); if (nodeId == null || !(nodeId += "")) { if (root) throw new Error("multiple roots"); root = node; } else { parent = nodeByKey[keyPrefix + nodeId]; if (!parent) throw new Error("missing: " + nodeId); if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); if (parent.children) parent.children.push(node); else parent.children = [node]; node.parent = parent; } } if (!root) throw new Error("no root"); root.parent = preroot; root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); root.parent = null; if (n > 0) throw new Error("cycle"); return root; } stratify.id = function(x) { return arguments.length ? (id = required(x), stratify) : id; }; stratify.parentId = function(x) { return arguments.length ? (parentId = required(x), stratify) : parentId; }; return stratify; } d3-hierarchy-1.1.8/src/tree.js000066400000000000000000000156241334007264500161030ustar00rootroot00000000000000import {Node} from "./hierarchy/index"; function defaultSeparation(a, b) { return a.parent === b.parent ? 1 : 2; } // function radialSeparation(a, b) { // return (a.parent === b.parent ? 1 : 2) / a.depth; // } // This function is used to traverse the left contour of a subtree (or // subforest). It returns the successor of v on this contour. This successor is // either given by the leftmost child of v or by the thread of v. The function // returns null if and only if v is on the highest level of its subtree. function nextLeft(v) { var children = v.children; return children ? children[0] : v.t; } // This function works analogously to nextLeft. function nextRight(v) { var children = v.children; return children ? children[children.length - 1] : v.t; } // Shifts the current subtree rooted at w+. This is done by increasing // prelim(w+) and mod(w+) by shift. function moveSubtree(wm, wp, shift) { var change = shift / (wp.i - wm.i); wp.c -= change; wp.s += shift; wm.c += change; wp.z += shift; wp.m += shift; } // All other shifts, applied to the smaller subtrees between w- and w+, are // performed by this function. To prepare the shifts, we have to adjust // change(w+), shift(w+), and change(w-). function executeShifts(v) { var shift = 0, change = 0, children = v.children, i = children.length, w; while (--i >= 0) { w = children[i]; w.z += shift; w.m += shift; shift += w.s + (change += w.c); } } // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, // returns the specified (default) ancestor. function nextAncestor(vim, v, ancestor) { return vim.a.parent === v.parent ? vim.a : ancestor; } function TreeNode(node, i) { this._ = node; this.parent = null; this.children = null; this.A = null; // default ancestor this.a = this; // ancestor this.z = 0; // prelim this.m = 0; // mod this.c = 0; // change this.s = 0; // shift this.t = null; // thread this.i = i; // number } TreeNode.prototype = Object.create(Node.prototype); function treeRoot(root) { var tree = new TreeNode(root, 0), node, nodes = [tree], child, children, i, n; while (node = nodes.pop()) { if (children = node._.children) { node.children = new Array(n = children.length); for (i = n - 1; i >= 0; --i) { nodes.push(child = node.children[i] = new TreeNode(children[i], i)); child.parent = node; } } } (tree.parent = new TreeNode(null, 0)).children = [tree]; return tree; } // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm export default function() { var separation = defaultSeparation, dx = 1, dy = 1, nodeSize = null; function tree(root) { var t = treeRoot(root); // Compute the layout using Buchheim et al.’s algorithm. t.eachAfter(firstWalk), t.parent.m = -t.z; t.eachBefore(secondWalk); // If a fixed node size is specified, scale x and y. if (nodeSize) root.eachBefore(sizeNode); // If a fixed tree size is specified, scale x and y based on the extent. // Compute the left-most, right-most, and depth-most nodes for extents. else { var left = root, right = root, bottom = root; root.eachBefore(function(node) { if (node.x < left.x) left = node; if (node.x > right.x) right = node; if (node.depth > bottom.depth) bottom = node; }); var s = left === right ? 1 : separation(left, right) / 2, tx = s - left.x, kx = dx / (right.x + s + tx), ky = dy / (bottom.depth || 1); root.eachBefore(function(node) { node.x = (node.x + tx) * kx; node.y = node.depth * ky; }); } return root; } // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is // applied recursively to the children of v, as well as the function // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the // node v is placed to the midpoint of its outermost children. function firstWalk(v) { var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; if (children) { executeShifts(v); var midpoint = (children[0].z + children[children.length - 1].z) / 2; if (w) { v.z = w.z + separation(v._, w._); v.m = v.z - midpoint; } else { v.z = midpoint; } } else if (w) { v.z = w.z + separation(v._, w._); } v.parent.A = apportion(v, w, v.parent.A || siblings[0]); } // Computes all real x-coordinates by summing up the modifiers recursively. function secondWalk(v) { v._.x = v.z + v.parent.m; v.m += v.parent.m; } // The core of the algorithm. Here, a new subtree is combined with the // previous subtrees. Threads are used to traverse the inside and outside // contours of the left and right subtree up to the highest common level. The // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the // superscript o means outside and i means inside, the subscript - means left // subtree and + means right subtree. For summing up the modifiers along the // contour, we use respective variables si+, si-, so-, and so+. Whenever two // nodes of the inside contours conflict, we compute the left one of the // greatest uncommon ancestors using the function ANCESTOR and call MOVE // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. // Finally, we add a new thread (if necessary). function apportion(v, w, ancestor) { if (w) { var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { vom = nextLeft(vom); vop = nextRight(vop); vop.a = v; shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); if (shift > 0) { moveSubtree(nextAncestor(vim, v, ancestor), v, shift); sip += shift; sop += shift; } sim += vim.m; sip += vip.m; som += vom.m; sop += vop.m; } if (vim && !nextRight(vop)) { vop.t = vim; vop.m += sim - sop; } if (vip && !nextLeft(vom)) { vom.t = vip; vom.m += sip - som; ancestor = v; } } return ancestor; } function sizeNode(node) { node.x *= dx; node.y = node.depth * dy; } tree.separation = function(x) { return arguments.length ? (separation = x, tree) : separation; }; tree.size = function(x) { return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); }; tree.nodeSize = function(x) { return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); }; return tree; } d3-hierarchy-1.1.8/src/treemap/000077500000000000000000000000001334007264500162335ustar00rootroot00000000000000d3-hierarchy-1.1.8/src/treemap/binary.js000066400000000000000000000023621334007264500200600ustar00rootroot00000000000000export default function(parent, x0, y0, x1, y1) { var nodes = parent.children, i, n = nodes.length, sum, sums = new Array(n + 1); for (sums[0] = sum = i = 0; i < n; ++i) { sums[i + 1] = sum += nodes[i].value; } partition(0, n, parent.value, x0, y0, x1, y1); function partition(i, j, value, x0, y0, x1, y1) { if (i >= j - 1) { var node = nodes[i]; node.x0 = x0, node.y0 = y0; node.x1 = x1, node.y1 = y1; return; } var valueOffset = sums[i], valueTarget = (value / 2) + valueOffset, k = i + 1, hi = j - 1; while (k < hi) { var mid = k + hi >>> 1; if (sums[mid] < valueTarget) k = mid + 1; else hi = mid; } if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; var valueLeft = sums[k] - valueOffset, valueRight = value - valueLeft; if ((x1 - x0) > (y1 - y0)) { var xk = (x0 * valueRight + x1 * valueLeft) / value; partition(i, k, valueLeft, x0, y0, xk, y1); partition(k, j, valueRight, xk, y0, x1, y1); } else { var yk = (y0 * valueRight + y1 * valueLeft) / value; partition(i, k, valueLeft, x0, y0, x1, yk); partition(k, j, valueRight, x0, yk, x1, y1); } } } d3-hierarchy-1.1.8/src/treemap/dice.js000066400000000000000000000004651334007264500175020ustar00rootroot00000000000000export default function(parent, x0, y0, x1, y1) { var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (x1 - x0) / parent.value; while (++i < n) { node = nodes[i], node.y0 = y0, node.y1 = y1; node.x0 = x0, node.x1 = x0 += node.value * k; } } d3-hierarchy-1.1.8/src/treemap/index.js000066400000000000000000000053721334007264500177070ustar00rootroot00000000000000import roundNode from "./round"; import squarify from "./squarify"; import {required} from "../accessors"; import constant, {constantZero} from "../constant"; export default function() { var tile = squarify, round = false, dx = 1, dy = 1, paddingStack = [0], paddingInner = constantZero, paddingTop = constantZero, paddingRight = constantZero, paddingBottom = constantZero, paddingLeft = constantZero; function treemap(root) { root.x0 = root.y0 = 0; root.x1 = dx; root.y1 = dy; root.eachBefore(positionNode); paddingStack = [0]; if (round) root.eachBefore(roundNode); return root; } function positionNode(node) { var p = paddingStack[node.depth], x0 = node.x0 + p, y0 = node.y0 + p, x1 = node.x1 - p, y1 = node.y1 - p; if (x1 < x0) x0 = x1 = (x0 + x1) / 2; if (y1 < y0) y0 = y1 = (y0 + y1) / 2; node.x0 = x0; node.y0 = y0; node.x1 = x1; node.y1 = y1; if (node.children) { p = paddingStack[node.depth + 1] = paddingInner(node) / 2; x0 += paddingLeft(node) - p; y0 += paddingTop(node) - p; x1 -= paddingRight(node) - p; y1 -= paddingBottom(node) - p; if (x1 < x0) x0 = x1 = (x0 + x1) / 2; if (y1 < y0) y0 = y1 = (y0 + y1) / 2; tile(node, x0, y0, x1, y1); } } treemap.round = function(x) { return arguments.length ? (round = !!x, treemap) : round; }; treemap.size = function(x) { return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; }; treemap.tile = function(x) { return arguments.length ? (tile = required(x), treemap) : tile; }; treemap.padding = function(x) { return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); }; treemap.paddingInner = function(x) { return arguments.length ? (paddingInner = typeof x === "function" ? x : constant(+x), treemap) : paddingInner; }; treemap.paddingOuter = function(x) { return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); }; treemap.paddingTop = function(x) { return arguments.length ? (paddingTop = typeof x === "function" ? x : constant(+x), treemap) : paddingTop; }; treemap.paddingRight = function(x) { return arguments.length ? (paddingRight = typeof x === "function" ? x : constant(+x), treemap) : paddingRight; }; treemap.paddingBottom = function(x) { return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant(+x), treemap) : paddingBottom; }; treemap.paddingLeft = function(x) { return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant(+x), treemap) : paddingLeft; }; return treemap; } d3-hierarchy-1.1.8/src/treemap/resquarify.js000066400000000000000000000020051334007264500207600ustar00rootroot00000000000000import treemapDice from "./dice"; import treemapSlice from "./slice"; import {phi, squarifyRatio} from "./squarify"; export default (function custom(ratio) { function resquarify(parent, x0, y0, x1, y1) { if ((rows = parent._squarify) && (rows.ratio === ratio)) { var rows, row, nodes, i, j = -1, n, m = rows.length, value = parent.value; while (++j < m) { row = rows[j], nodes = row.children; for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); value -= row.value; } } else { parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); rows.ratio = ratio; } } resquarify.ratio = function(x) { return custom((x = +x) > 1 ? x : 1); }; return resquarify; })(phi); d3-hierarchy-1.1.8/src/treemap/round.js000066400000000000000000000002461334007264500177220ustar00rootroot00000000000000export default function(node) { node.x0 = Math.round(node.x0); node.y0 = Math.round(node.y0); node.x1 = Math.round(node.x1); node.y1 = Math.round(node.y1); } d3-hierarchy-1.1.8/src/treemap/slice.js000066400000000000000000000004651334007264500176750ustar00rootroot00000000000000export default function(parent, x0, y0, x1, y1) { var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (y1 - y0) / parent.value; while (++i < n) { node = nodes[i], node.x0 = x0, node.x1 = x1; node.y0 = y0, node.y1 = y0 += node.value * k; } } d3-hierarchy-1.1.8/src/treemap/sliceDice.js000066400000000000000000000002521334007264500204540ustar00rootroot00000000000000import dice from "./dice"; import slice from "./slice"; export default function(parent, x0, y0, x1, y1) { (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1); } d3-hierarchy-1.1.8/src/treemap/squarify.js000066400000000000000000000035141334007264500204370ustar00rootroot00000000000000import treemapDice from "./dice"; import treemapSlice from "./slice"; export var phi = (1 + Math.sqrt(5)) / 2; export function squarifyRatio(ratio, parent, x0, y0, x1, y1) { var rows = [], nodes = parent.children, row, nodeValue, i0 = 0, i1 = 0, n = nodes.length, dx, dy, value = parent.value, sumValue, minValue, maxValue, newRatio, minRatio, alpha, beta; while (i0 < n) { dx = x1 - x0, dy = y1 - y0; // Find the next non-empty node. do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); minValue = maxValue = sumValue; alpha = Math.max(dy / dx, dx / dy) / (value * ratio); beta = sumValue * sumValue * alpha; minRatio = Math.max(maxValue / beta, beta / minValue); // Keep adding nodes while the aspect ratio maintains or improves. for (; i1 < n; ++i1) { sumValue += nodeValue = nodes[i1].value; if (nodeValue < minValue) minValue = nodeValue; if (nodeValue > maxValue) maxValue = nodeValue; beta = sumValue * sumValue * alpha; newRatio = Math.max(maxValue / beta, beta / minValue); if (newRatio > minRatio) { sumValue -= nodeValue; break; } minRatio = newRatio; } // Position and record the row orientation. rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); value -= sumValue, i0 = i1; } return rows; } export default (function custom(ratio) { function squarify(parent, x0, y0, x1, y1) { squarifyRatio(ratio, parent, x0, y0, x1, y1); } squarify.ratio = function(x) { return custom((x = +x) > 1 ? x : 1); }; return squarify; })(phi); d3-hierarchy-1.1.8/test/000077500000000000000000000000001334007264500147665ustar00rootroot00000000000000d3-hierarchy-1.1.8/test/data/000077500000000000000000000000001334007264500156775ustar00rootroot00000000000000d3-hierarchy-1.1.8/test/data/flare-one.json000066400000000000000000002011601334007264500204420ustar00rootroot00000000000000{ "name": "flare", "children": [ { "name": "flex", "children": [ { "name": "FlareVis", "value": 4116, "depth": 2, "x": 935.2343017399683, "y": 416.5647569543915, "dy": 83.43524304560857, "dx": 24.765698260031854 } ], "depth": 1, "value": 4116, "x": 935.2343017399683, "y": 416.5647569543915, "dy": 83.43524304560857, "dx": 24.765698260031854 }, { "name": "display", "children": [ { "name": "LineSprite", "value": 1732, "depth": 2, "x": 903.0136228812531, "y": 473.0140353025222, "dx": 32.220678858715104, "dy": 26.98596469747787 }, { "name": "RectSprite", "value": 3623, "depth": 2, "x": 903.0136228812531, "y": 416.5647569543915, "dy": 56.44927834813067, "dx": 32.220678858715104 }, { "name": "DirtySprite", "value": 8833, "depth": 2, "x": 849.8660493314809, "y": 416.5647569543915, "dx": 53.14757354977226, "dy": 83.43524304560856 }, { "name": "TextSprite", "value": 10066, "depth": 2, "x": 789.2995967839877, "y": 416.5647569543915, "dx": 60.56645254749321, "dy": 83.43524304560856 } ], "depth": 1, "value": 24254, "x": 789.2995967839877, "y": 416.5647569543915, "dx": 145.93470495598058, "dy": 83.43524304560856 }, { "name": "physics", "children": [ { "name": "IForce", "value": 319, "depth": 2, "x": 952.3960179290807, "y": 395.5039821002078, "dy": 21.0607748541837, "dx": 7.603982070919373 }, { "name": "DragForce", "value": 1082, "depth": 2, "x": 926.604454917373, "y": 395.5039821002078, "dx": 25.791563011707716, "dy": 21.0607748541837 }, { "name": "GravityForce", "value": 1336, "depth": 2, "x": 926.604454917373, "y": 375.4203309901511, "dy": 20.083651110056678, "dx": 33.39554508262711 }, { "name": "SpringForce", "value": 1681, "depth": 2, "x": 906.0937091066693, "y": 375.4203309901511, "dx": 20.510745810703742, "dy": 41.14442596424038 }, { "name": "Spring", "value": 2213, "depth": 2, "x": 936.3069271604885, "y": 328.5298410105336, "dy": 46.890489979617534, "dx": 23.693072839511615 }, { "name": "Particle", "value": 2822, "depth": 2, "x": 906.0937091066693, "y": 328.5298410105336, "dy": 46.890489979617534, "dx": 30.213218053819194 }, { "name": "Simulation", "value": 9983, "depth": 2, "x": 849.1650619059793, "y": 328.5298410105336, "dx": 56.92864720068992, "dy": 88.03491594385791 }, { "name": "NBodyForce", "value": 10498, "depth": 2, "x": 789.2995967839877, "y": 328.5298410105336, "dx": 59.86546512199167, "dy": 88.03491594385795 } ], "depth": 1, "value": 29934, "x": 789.2995967839877, "y": 328.5298410105336, "dy": 88.03491594385791, "dx": 170.70040321601243 }, { "name": "data", "children": [ { "name": "DataSet", "value": 586, "depth": 2, "x": 772.3670122233924, "y": 482.62602831302314, "dy": 17.373971686976965, "dx": 16.932584560595274 }, { "name": "DataTable", "value": 772, "depth": 2, "x": 750.0599213005604, "y": 482.62602831302314, "dx": 22.307090922832007, "dy": 17.373971686976965 }, { "name": "DataField", "value": 1759, "depth": 2, "x": 750.0599213005604, "y": 460.1217453988902, "dy": 22.504282914132922, "dx": 39.23967548342725 }, { "name": "DataSchema", "value": 2165, "depth": 2, "x": 750.0599213005604, "y": 432.4231822896817, "dy": 27.698563109208507, "dx": 39.23967548342726 }, { "name": "DataUtil", "value": 3322, "depth": 2, "x": 700.6351653385684, "y": 466.25729919830496, "dx": 49.42475596199197, "dy": 33.742700801695094 }, { "name": "DataSource", "value": 3331, "depth": 2, "x": 700.6351653385684, "y": 432.4231822896817, "dx": 49.42475596199197, "dy": 33.834116908623265 }, { "name": "converters", "children": [ { "name": "Converters", "value": 721, "depth": 3, "x": 773.6643575039083, "y": 409.27294327523515, "dy": 23.15023901444649, "dx": 15.6352392800794 }, { "name": "IDataConverter", "value": 1314, "depth": 3, "x": 745.1696218395194, "y": 409.27294327523515, "dx": 28.494735664388813, "dy": 23.15023901444647 }, { "name": "JSONConverter", "value": 2220, "depth": 3, "x": 745.1696218395194, "y": 384.0181370776572, "dy": 25.254806197577977, "dx": 44.12997494446823 }, { "name": "DelimitedTextConverter", "value": 4294, "depth": 3, "x": 700.6351653385684, "y": 384.0181370776572, "dx": 44.534456500951, "dy": 48.40504521202445 }, { "name": "GraphMLConverter", "value": 9800, "depth": 3, "x": 700.6351653385684, "y": 328.5298410105336, "dy": 55.48829606712362, "dx": 88.66443144541923 } ], "depth": 2, "value": 18349, "x": 700.6351653385684, "y": 328.5298410105336, "dy": 103.89334127914809, "dx": 88.66443144541923 } ], "depth": 1, "value": 30284, "x": 700.6351653385684, "y": 328.5298410105336, "dx": 88.66443144541923, "dy": 171.47015898946648 }, { "name": "scale", "children": [ { "name": "LinearScale", "value": 1316, "depth": 2, "x": 935.8332746038465, "y": 301.19208717458787, "dy": 27.33775383594569, "dx": 24.166725396153538 }, { "name": "RootScale", "value": 1756, "depth": 2, "x": 903.5864890448452, "y": 301.19208717458787, "dx": 32.24678555900127, "dy": 27.337753835945698 }, { "name": "ScaleType", "value": 1821, "depth": 2, "x": 933.8336720709789, "y": 266.2545801563838, "dy": 34.937507018204066, "dx": 26.166327929021108 }, { "name": "IScaleMap", "value": 2105, "depth": 2, "x": 903.5864890448452, "y": 266.2545801563838, "dy": 34.937507018204066, "dx": 30.24718302613368 }, { "name": "QuantileScale", "value": 2435, "depth": 2, "x": 858.5556413461463, "y": 301.383356911025, "dx": 45.030847698698885, "dy": 27.14648409950853 }, { "name": "LogScale", "value": 3151, "depth": 2, "x": 858.5556413461463, "y": 266.2545801563838, "dx": 45.030847698698885, "dy": 35.12877675464122 }, { "name": "OrdinalScale", "value": 3770, "depth": 2, "x": 912.4203493250774, "y": 226.4764057487506, "dy": 39.77817440763318, "dx": 47.57965067492262 }, { "name": "Scale", "value": 4268, "depth": 2, "x": 858.5556413461463, "y": 226.4764057487506, "dy": 39.77817440763318, "dx": 53.86470797893101 }, { "name": "QuantitativeScale", "value": 4839, "depth": 2, "x": 914.0021316036359, "y": 173.6631838927838, "dy": 52.813221855966816, "dx": 45.99786839636408 }, { "name": "TimeScale", "value": 5833, "depth": 2, "x": 858.5556413461463, "y": 173.6631838927838, "dy": 52.813221855966816, "dx": 55.44649025748954 } ], "depth": 1, "value": 31294, "x": 858.5556413461463, "y": 173.6631838927838, "dy": 154.86665711774975, "dx": 101.44435865385367 }, { "name": "analytics", "children": [ { "name": "optimization", "children": [ { "name": "AspectRatioBanker", "value": 7074, "depth": 3, "x": 786.3283212475167, "y": 279.3611891344525, "dx": 72.22732009862966, "dy": 49.16865187608107 } ], "depth": 2, "value": 7074, "x": 786.3283212475167, "y": 279.3611891344525, "dx": 72.22732009862966, "dy": 49.16865187608109 }, { "name": "cluster", "children": [ { "name": "MergeEdge", "value": 743, "depth": 3, "x": 819.818393842407, "y": 269.73210898022955, "dx": 38.73724750373932, "dy": 9.62908015422289 }, { "name": "CommunityStructure", "value": 3812, "depth": 3, "x": 819.818393842407, "y": 220.32961429934417, "dy": 49.4024946808854, "dx": 38.73724750373932 }, { "name": "AgglomerativeCluster", "value": 3938, "depth": 3, "x": 786.3283212475167, "y": 220.32961429934417, "dx": 33.49007259489034, "dy": 59.031574835108316 }, { "name": "HierarchicalCluster", "value": 6714, "depth": 3, "x": 786.3283212475167, "y": 173.6631838927838, "dy": 46.66643040656039, "dx": 72.22732009862966 } ], "depth": 2, "value": 15207, "x": 786.3283212475167, "y": 173.6631838927838, "dy": 105.6980052416687, "dx": 72.22732009862966 }, { "name": "graph", "children": [ { "name": "SpanningTree", "value": 3416, "depth": 3, "x": 744.2092103719817, "y": 287.8139996272023, "dx": 42.11911087553484, "dy": 40.71584138333121 }, { "name": "BetweennessCentrality", "value": 3534, "depth": 3, "x": 700.6351653385684, "y": 287.8139996272023, "dx": 43.57404503341336, "dy": 40.715841383331224 }, { "name": "LinkDistance", "value": 5731, "depth": 3, "x": 744.1550729423057, "y": 219.59299633095887, "dy": 68.22100329624345, "dx": 42.173248305211004 }, { "name": "ShortestPaths", "value": 5914, "depth": 3, "x": 700.6351653385684, "y": 219.59299633095887, "dy": 68.22100329624345, "dx": 43.5199076037372 }, { "name": "MaxFlowMinCut", "value": 7840, "depth": 3, "x": 700.6351653385684, "y": 173.6631838927838, "dy": 45.92981243817507, "dx": 85.6931559089482 } ], "depth": 2, "value": 26435, "x": 700.6351653385684, "y": 173.6631838927838, "dx": 85.6931559089482, "dy": 154.86665711774975 } ], "depth": 1, "value": 48716, "x": 700.6351653385684, "y": 173.6631838927838, "dy": 154.86665711774975, "dx": 157.92047600757786 }, { "name": "query", "children": [ { "name": "Count", "value": 781, "depth": 2, "x": 926.0680549718331, "y": 162.10826169299364, "dx": 33.93194502816679, "dy": 11.55492219979015 }, { "name": "Sum", "value": 791, "depth": 2, "x": 943.5739482758383, "y": 137.93317478587832, "dy": 24.175086907115315, "dx": 16.42605172416152 }, { "name": "Minimum", "value": 843, "depth": 2, "x": 926.0680549718331, "y": 137.93317478587832, "dx": 17.505893304005262, "dy": 24.175086907115315 }, { "name": "Maximum", "value": 843, "depth": 2, "x": 901.7044969267644, "y": 156.2927123373505, "dy": 17.370471555433284, "dx": 24.363558045068793 }, { "name": "Average", "value": 891, "depth": 2, "x": 901.7044969267644, "y": 137.93317478587832, "dx": 24.363558045068793, "dy": 18.35953755147219 }, { "name": "Distinct", "value": 933, "depth": 2, "x": 941.4369609667818, "y": 112.70084731341917, "dy": 25.232327472459144, "dx": 18.563039033218132 }, { "name": "Or", "value": 970, "depth": 2, "x": 922.1377671165981, "y": 112.70084731341917, "dy": 25.232327472459144, "dx": 19.29919385018379 }, { "name": "And", "value": 1027, "depth": 2, "x": 901.7044969267644, "y": 112.70084731341917, "dy": 25.232327472459144, "dx": 20.433270189833763 }, { "name": "Xor", "value": 1101, "depth": 2, "x": 873.3843620109773, "y": 154.1460182708354, "dx": 28.320134915787133, "dy": 19.51716562194837 }, { "name": "Variable", "value": 1124, "depth": 2, "x": 873.3843620109773, "y": 134.22113710910065, "dx": 28.320134915787133, "dy": 19.924881161734756 }, { "name": "Literal", "value": 1214, "depth": 2, "x": 873.3843620109773, "y": 112.70084731341917, "dx": 28.320134915787133, "dy": 21.520289795681485 }, { "name": "Not", "value": 1554, "depth": 2, "x": 931.7462843335556, "y": 85.08869942750047, "dy": 27.612147885918706, "dx": 28.25371566644435 }, { "name": "Range", "value": 1594, "depth": 2, "x": 902.7653172986055, "y": 85.08869942750047, "dy": 27.612147885918706, "dx": 28.980967034950083 }, { "name": "AggregateExpression", "value": 1616, "depth": 2, "x": 873.3843620109773, "y": 85.08869942750047, "dy": 27.612147885918706, "dx": 29.380955287628193 }, { "name": "Variance", "value": 1876, "depth": 2, "x": 835.7103569257114, "y": 148.66457807709676, "dx": 37.67400508526593, "dy": 24.998605815687025 }, { "name": "IsA", "value": 2039, "depth": 2, "x": 835.7103569257114, "y": 121.49391855780797, "dx": 37.67400508526593, "dy": 27.1706595192888 }, { "name": "If", "value": 2732, "depth": 2, "x": 835.7103569257114, "y": 85.08869942750047, "dx": 37.67400508526593, "dy": 36.4052191303075 }, { "name": "BinaryExpression", "value": 2893, "depth": 2, "x": 923.1210320601111, "y": 45.70700288244543, "dy": 39.38169654505504, "dx": 36.87896793988887 }, { "name": "Fn", "value": 3240, "depth": 2, "x": 881.8186275923475, "y": 45.70700288244543, "dy": 39.38169654505504, "dx": 41.302404467763616 }, { "name": "ExpressionIterator", "value": 3617, "depth": 2, "x": 835.7103569257114, "y": 45.70700288244543, "dy": 39.38169654505504, "dx": 46.108270666636116 }, { "name": "CompositeExpression", "value": 3677, "depth": 2, "x": 919.6135544729445, "y": 0, "dy": 45.70700288244543, "dx": 40.38644552705544 }, { "name": "Match", "value": 3748, "depth": 2, "x": 878.4472782054972, "y": 0, "dy": 45.70700288244543, "dx": 41.166276267447316 }, { "name": "Arithmetic", "value": 3891, "depth": 2, "x": 835.7103569257114, "y": 0, "dy": 45.70700288244543, "dx": 42.73692127978589 }, { "name": "StringUtil", "value": 4130, "depth": 2, "x": 782.2191240975537, "y": 134.9024321916815, "dx": 53.491232828157614, "dy": 38.76075170110229 }, { "name": "DateUtil", "value": 4141, "depth": 2, "x": 782.2191240975537, "y": 96.03844362164163, "dx": 53.491232828157614, "dy": 38.86398857003987 }, { "name": "Comparison", "value": 5103, "depth": 2, "x": 782.2191240975537, "y": 48.145921604516914, "dx": 53.491232828157614, "dy": 47.89252201712472 }, { "name": "Expression", "value": 5130, "depth": 2, "x": 782.2191240975537, "y": 0, "dx": 53.491232828157614, "dy": 48.145921604516914 }, { "name": "Query", "value": 13896, "depth": 2, "x": 700.6351653385684, "y": 88.1545876425491, "dx": 81.58395875898532, "dy": 85.50859625023469 }, { "name": "methods", "children": [ { "name": "_", "value": 264, "depth": 3, "x": 766.5129221940109, "y": 79.71623836874782, "dx": 15.706201903542778, "dy": 8.438349273801279 }, { "name": "count", "value": 277, "depth": 3, "x": 766.5129221940109, "y": 70.86236432010023, "dy": 8.8538740486476, "dx": 15.706201903542778 }, { "name": "sum", "value": 280, "depth": 3, "x": 766.5129221940109, "y": 61.912599938795786, "dy": 8.949764381304435, "dx": 15.706201903542775 }, { "name": "min", "value": 283, "depth": 3, "x": 755.6850168622141, "y": 75.03359379067244, "dx": 10.827905331796865, "dy": 13.120993851876658 }, { "name": "max", "value": 283, "depth": 3, "x": 755.6850168622141, "y": 61.912599938795786, "dx": 10.827905331796865, "dy": 13.120993851876658 }, { "name": "average", "value": 287, "depth": 3, "x": 744.6084140581321, "y": 75.14690116417742, "dx": 11.076602804081954, "dy": 13.007686478371676 }, { "name": "distinct", "value": 292, "depth": 3, "x": 744.6084140581321, "y": 61.912599938795786, "dx": 11.076602804081954, "dy": 13.234301225381635 }, { "name": "select", "value": 296, "depth": 3, "x": 769.8768068340628, "y": 49.87278665864039, "dy": 12.039813280155395, "dx": 12.342317263490902 }, { "name": "where", "value": 299, "depth": 3, "x": 757.4093985172257, "y": 49.87278665864039, "dy": 12.039813280155395, "dx": 12.467408316837094 }, { "name": "update", "value": 307, "depth": 3, "x": 744.6084140581321, "y": 49.87278665864039, "dy": 12.039813280155395, "dx": 12.800984459093604 }, { "name": "orderby", "value": 307, "depth": 3, "x": 732.0190550491207, "y": 75.91238670290329, "dx": 12.58935900901142, "dy": 12.242200939645807 }, { "name": "or", "value": 323, "depth": 3, "x": 732.0190550491207, "y": 63.03215574685901, "dx": 12.58935900901142, "dy": 12.880230956044285 }, { "name": "and", "value": 330, "depth": 3, "x": 732.0190550491207, "y": 49.87278665864039, "dx": 12.58935900901142, "dy": 13.15936908821862 }, { "name": "variance", "value": 335, "depth": 3, "x": 770.5243931300814, "y": 35.49211011348346, "dy": 14.380676545156934, "dx": 11.694730967472196 }, { "name": "xor", "value": 354, "depth": 3, "x": 758.1663789137078, "y": 35.49211011348346, "dy": 14.380676545156934, "dx": 12.358014216373636 }, { "name": "stddev", "value": 363, "depth": 3, "x": 745.494177895223, "y": 35.49211011348346, "dy": 14.380676545156934, "dx": 12.672201018484829 }, { "name": "not", "value": 386, "depth": 3, "x": 732.0190550491207, "y": 35.49211011348346, "dy": 14.380676545156934, "dx": 13.475122846102327 }, { "name": "fn", "value": 460, "depth": 3, "x": 717.6053626068057, "y": 72.13293442603444, "dx": 14.413692442314991, "dy": 16.021653216514665 }, { "name": "isa", "value": 461, "depth": 3, "x": 717.6053626068057, "y": 56.076451528614285, "dx": 14.413692442314991, "dy": 16.056482897420146 }, { "name": "mod", "value": 591, "depth": 3, "x": 717.6053626068057, "y": 35.49211011348346, "dx": 14.413692442314991, "dy": 20.58434141513082 }, { "name": "add", "value": 593, "depth": 3, "x": 766.1132138142358, "y": 17.008186531062805, "dy": 18.483923582420655, "dx": 16.10591028331794 }, { "name": "eq", "value": 594, "depth": 3, "x": 749.9801434798497, "y": 17.008186531062805, "dy": 18.483923582420655, "dx": 16.13307033438601 }, { "name": "div", "value": 595, "depth": 3, "x": 733.8199130943957, "y": 17.008186531062805, "dy": 18.483923582420655, "dx": 16.160230385454 }, { "name": "lt", "value": 597, "depth": 3, "x": 717.6053626068057, "y": 17.008186531062805, "dy": 18.483923582420655, "dx": 16.214550487589978 }, { "name": "neq", "value": 599, "depth": 3, "x": 700.6351653385684, "y": 70.43454844679844, "dx": 16.970197268237307, "dy": 17.720039195750665 }, { "name": "sub", "value": 600, "depth": 3, "x": 700.6351653385684, "y": 52.68492654788295, "dx": 16.970197268237307, "dy": 17.749621898915496 }, { "name": "mul", "value": 603, "depth": 3, "x": 700.6351653385684, "y": 34.84655653947288, "dx": 16.970197268237307, "dy": 17.838370008410074 }, { "name": "gt", "value": 603, "depth": 3, "x": 700.6351653385684, "y": 17.008186531062805, "dx": 16.970197268237307, "dy": 17.838370008410074 }, { "name": "lte", "value": 619, "depth": 3, "x": 763.9483315968982, "y": 0, "dy": 17.008186531062805, "dx": 18.27079250065549 }, { "name": "gte", "value": 625, "depth": 3, "x": 745.5004393304852, "y": 0, "dy": 17.008186531062805, "dx": 18.447892266413103 }, { "name": "iff", "value": 748, "depth": 3, "x": 723.4220018660419, "y": 0, "dy": 17.008186531062805, "dx": 22.0784374644432 }, { "name": "range", "value": 772, "depth": 3, "x": 700.6351653385684, "y": 0, "dy": 17.008186531062805, "dx": 22.78683652747347 } ], "depth": 2, "value": 14326, "x": 700.6351653385684, "y": 0, "dx": 81.58395875898532, "dy": 88.1545876425491 } ], "depth": 1, "value": 89721, "x": 700.6351653385684, "y": 0, "dy": 173.6631838927838, "dx": 259.3648346614316 }, { "name": "animate", "children": [ { "name": "Pause", "value": 449, "depth": 2, "x": 691.2272858088489, "y": 476.04041231869496, "dy": 23.959587681305074, "dx": 9.40787952971948 }, { "name": "ISchedulable", "value": 1041, "depth": 2, "x": 669.4152533134403, "y": 476.04041231869496, "dx": 21.81203249540861, "dy": 23.959587681305074 }, { "name": "TransitionEvent", "value": 1116, "depth": 2, "x": 669.4152533134403, "y": 458.0948419479991, "dy": 17.94557037069586, "dx": 31.21991202512811 }, { "name": "Parallel", "value": 5176, "depth": 2, "x": 607.4067097055874, "y": 458.0948419479991, "dx": 62.00854360785282, "dy": 41.905158052000935 }, { "name": "Sequence", "value": 5534, "depth": 2, "x": 654.2681056214014, "y": 398.1772508859822, "dy": 59.91759106201692, "dx": 46.367059717166946 }, { "name": "Scheduler", "value": 5593, "depth": 2, "x": 607.4067097055874, "y": 398.1772508859822, "dy": 59.91759106201692, "dx": 46.86139591581401 }, { "name": "FunctionSequence", "value": 5842, "depth": 2, "x": 548.9916299901313, "y": 449.7933406208565, "dx": 58.415079715456116, "dy": 50.2066593791435 }, { "name": "Tween", "value": 6006, "depth": 2, "x": 548.9916299901313, "y": 398.1772508859822, "dx": 58.415079715456116, "dy": 51.616089734874336 }, { "name": "Transition", "value": 9201, "depth": 2, "x": 647.4028518541164, "y": 311.40428612909676, "dy": 86.77296475688539, "dx": 53.232313484452035 }, { "name": "Easing", "value": 17010, "depth": 2, "x": 548.9916299901313, "y": 311.40428612909676, "dy": 86.77296475688539, "dx": 98.41122186398513 }, { "name": "Transitioner", "value": 19975, "depth": 2, "x": 434.38054906816967, "y": 412.5046594070213, "dx": 114.6110809219616, "dy": 87.49534059297872 }, { "name": "interpolate", "children": [ { "name": "DateInterpolator", "value": 1375, "depth": 3, "x": 527.6581877168373, "y": 380.14778913471855, "dy": 32.35687027230277, "dx": 21.33344227329391 }, { "name": "NumberInterpolator", "value": 1382, "depth": 3, "x": 506.21613882833395, "y": 380.14778913471855, "dx": 21.442048888503408, "dy": 32.35687027230277 }, { "name": "ObjectInterpolator", "value": 1629, "depth": 3, "x": 527.90165568548, "y": 341.371184354273, "dy": 38.776604780445524, "dx": 21.089974304651264 }, { "name": "PointInterpolator", "value": 1675, "depth": 3, "x": 506.21613882833395, "y": 341.371184354273, "dy": 38.776604780445524, "dx": 21.68551685714605 }, { "name": "ArrayInterpolator", "value": 1983, "depth": 3, "x": 477.80971217823753, "y": 377.45927281581635, "dx": 28.406426650096403, "dy": 35.04538659120493 }, { "name": "RectangleInterpolator", "value": 2042, "depth": 3, "x": 477.80971217823753, "y": 341.371184354273, "dx": 28.406426650096403, "dy": 36.08808846154336 }, { "name": "ColorInterpolator", "value": 2047, "depth": 3, "x": 514.6989997804475, "y": 311.40428612909676, "dy": 29.966898225176223, "dx": 34.29263020968381 }, { "name": "MatrixInterpolator", "value": 2202, "depth": 3, "x": 477.80971217823753, "y": 311.40428612909676, "dy": 29.966898225176223, "dx": 36.88928760220995 }, { "name": "Interpolator", "value": 8746, "depth": 3, "x": 434.38054906816967, "y": 311.40428612909676, "dx": 43.42916311006785, "dy": 101.10037327792452 } ], "depth": 2, "value": 23081, "x": 434.38054906816967, "y": 311.40428612909676, "dx": 114.6110809219616, "dy": 101.10037327792452 } ], "depth": 1, "value": 100024, "x": 434.38054906816967, "y": 311.40428612909676, "dx": 266.2546162703987, "dy": 188.59571387090324 }, { "name": "util", "children": [ { "name": "IEvaluable", "value": 335, "depth": 2, "x": 685.2567659506185, "y": 300.4682882346967, "dx": 15.378399387949798, "dy": 10.935997894400012 }, { "name": "IPredicate", "value": 383, "depth": 2, "x": 685.2567659506185, "y": 287.9653413882642, "dy": 12.50294684643247, "dx": 15.378399387949798 }, { "name": "IValueProxy", "value": 874, "depth": 2, "x": 685.2567659506185, "y": 259.43381255332434, "dy": 28.53152883493989, "dx": 15.378399387949798 }, { "name": "Orientation", "value": 1486, "depth": 2, "x": 648.4529332445333, "y": 291.1344373801209, "dx": 36.803832706085274, "dy": 20.26984874897585 }, { "name": "Filter", "value": 2324, "depth": 2, "x": 648.4529332445333, "y": 259.43381255332434, "dx": 36.803832706085274, "dy": 31.700624826796595 }, { "name": "Property", "value": 5559, "depth": 2, "x": 594.7541127686467, "y": 259.43381255332434, "dx": 53.69882047588662, "dy": 51.970473575772395 }, { "name": "Stats", "value": 6557, "depth": 2, "x": 648.9941312935687, "y": 195.69044545609944, "dy": 63.74336709722491, "dx": 51.64103404499974 }, { "name": "Sort", "value": 6887, "depth": 2, "x": 594.7541127686467, "y": 195.69044545609944, "dy": 63.74336709722491, "dx": 54.24001852492195 }, { "name": "Dates", "value": 8217, "depth": 2, "x": 523.2773522241083, "y": 253.69134963076482, "dx": 71.47676054453832, "dy": 57.71293649833194 }, { "name": "Arrays", "value": 8258, "depth": 2, "x": 523.2773522241083, "y": 195.69044545609944, "dx": 71.47676054453832, "dy": 58.000904174665365 }, { "name": "math", "children": [ { "name": "IMatrix", "value": 2815, "depth": 3, "x": 674.5683147463614, "y": 141.47605452894786, "dy": 54.214390927151584, "dx": 26.066850592206933 }, { "name": "DenseMatrix", "value": 3165, "depth": 3, "x": 645.2604702972193, "y": 141.47605452894786, "dx": 29.30784444914208, "dy": 54.21439092715158 }, { "name": "SparseMatrix", "value": 3366, "depth": 3, "x": 645.2604702972193, "y": 110.96006124118996, "dy": 30.515993287757894, "dx": 55.374695041349014 } ], "depth": 2, "value": 9346, "x": 645.2604702972193, "y": 110.96006124118996, "dy": 84.73038421490948, "dx": 55.374695041349014 }, { "name": "Colors", "value": 10001, "depth": 2, "x": 586.0049251326, "y": 110.96006124118996, "dy": 84.73038421490948, "dx": 59.25554516461931 }, { "name": "heap", "children": [ { "name": "HeapNode", "value": 1233, "depth": 3, "x": 523.2773522241083, "y": 185.8224409470805, "dx": 62.72757290849162, "dy": 9.868004509018927 }, { "name": "FibonacciHeap", "value": 9354, "depth": 3, "x": 523.2773522241083, "y": 110.96006124118996, "dy": 74.86237970589056, "dx": 62.72757290849161 } ], "depth": 2, "value": 10587, "x": 523.2773522241083, "y": 110.96006124118996, "dy": 84.73038421490948, "dx": 62.72757290849162 }, { "name": "Geometry", "value": 10993, "depth": 2, "x": 434.38054906816967, "y": 249.32383973836147, "dx": 88.89680315593867, "dy": 62.08044639073529 }, { "name": "palette", "children": [ { "name": "Palette", "value": 1229, "depth": 3, "x": 507.7591978294189, "y": 209.56473827728755, "dy": 39.75910146107391, "dx": 15.518154394689418 }, { "name": "ShapePalette", "value": 2059, "depth": 3, "x": 481.7609228915299, "y": 209.56473827728755, "dx": 25.998274937888976, "dy": 39.75910146107391 }, { "name": "SizePalette", "value": 2291, "depth": 3, "x": 481.7609228915299, "y": 181.86154440644805, "dy": 27.703193870839502, "dx": 41.51642933257841 }, { "name": "ColorPalette", "value": 6367, "depth": 3, "x": 434.38054906816967, "y": 181.86154440644805, "dx": 47.38037382336024, "dy": 67.46229533191342 } ], "depth": 2, "value": 11946, "x": 434.38054906816967, "y": 181.86154440644805, "dx": 88.89680315593867, "dy": 67.46229533191341 }, { "name": "Displays", "value": 12555, "depth": 2, "x": 434.38054906816967, "y": 110.96006124118996, "dx": 88.89680315593867, "dy": 70.90148316525807 }, { "name": "Maths", "value": 17705, "depth": 2, "x": 620.5312046753896, "y": 0, "dy": 110.96006124118996, "dx": 80.10396066317878 }, { "name": "Shapes", "value": 19118, "depth": 2, "x": 534.0343100152003, "y": 0, "dy": 110.96006124118996, "dx": 86.49689466018934 }, { "name": "Strings", "value": 22026, "depth": 2, "x": 434.38054906816967, "y": 0, "dy": 110.96006124118996, "dx": 99.65376094703058 } ], "depth": 1, "value": 165157, "x": 434.38054906816967, "y": 0, "dx": 266.2546162703987, "dy": 311.40428612909676 }, { "name": "vis", "children": [ { "name": "events", "children": [ { "name": "VisualizationEvent", "value": 1117, "depth": 3, "x": 418.62333660057726, "y": 464.4124140817659, "dy": 35.5875859182341, "dx": 15.757212467592435 }, { "name": "TooltipEvent", "value": 1701, "depth": 3, "x": 394.6277963970189, "y": 464.4124140817659, "dx": 23.995540203558317, "dy": 35.58758591823408 }, { "name": "SelectionEvent", "value": 1880, "depth": 3, "x": 368.10715231548477, "y": 464.4124140817659, "dx": 26.520644081534176, "dy": 35.58758591823408 }, { "name": "DataEvent", "value": 2313, "depth": 3, "x": 335.4782960598526, "y": 464.4124140817659, "dx": 32.6288562556322, "dy": 35.58758591823408 } ], "depth": 2, "value": 7011, "x": 335.4782960598526, "y": 464.4124140817659, "dx": 98.90225300831708, "dy": 35.5875859182341 }, { "name": "Visualization", "value": 16540, "depth": 2, "x": 335.4782960598526, "y": 380.45596406214185, "dy": 83.95645001962409, "dx": 98.90225300831708 }, { "name": "axis", "children": [ { "name": "AxisLabel", "value": 636, "depth": 3, "x": 316.07082851145486, "y": 483.5482162024146, "dx": 19.40746754839775, "dy": 16.451783797585335 }, { "name": "AxisGridLine", "value": 652, "depth": 3, "x": 316.07082851145486, "y": 466.6825510514309, "dy": 16.86566515098374, "dx": 19.407467548397733 }, { "name": "Axes", "value": 1302, "depth": 3, "x": 296.4524102288354, "y": 466.6825510514309, "dx": 19.61841828261947, "dy": 33.317448948569094 }, { "name": "CartesianAxes", "value": 6703, "depth": 3, "x": 296.4524102288354, "y": 380.45596406214185, "dy": 86.22658698928906, "dx": 39.025885831017206 }, { "name": "Axis", "value": 24593, "depth": 3, "x": 193.17428580806634, "y": 380.45596406214185, "dx": 103.27812442076903, "dy": 119.54403593785815 } ], "depth": 2, "value": 33886, "x": 193.17428580806634, "y": 380.45596406214185, "dx": 142.30401025178625, "dy": 119.54403593785815 }, { "name": "legend", "children": [ { "name": "LegendItem", "value": 4614, "depth": 3, "x": 401.57079536588736, "y": 309.8568312512283, "dy": 70.59913281091357, "dx": 32.809753702282286 }, { "name": "LegendRange", "value": 10530, "depth": 3, "x": 326.69287891919646, "y": 309.8568312512283, "dx": 74.87791644669092, "dy": 70.59913281091357 }, { "name": "Legend", "value": 20859, "depth": 3, "x": 326.69287891919646, "y": 212.61519685457975, "dy": 97.24163439664852, "dx": 107.68767014897321 } ], "depth": 2, "value": 36003, "x": 326.69287891919646, "y": 212.61519685457975, "dy": 167.8407672075621, "dx": 107.68767014897321 }, { "name": "controls", "children": [ { "name": "IControl", "value": 763, "depth": 3, "x": 313.16513526764305, "y": 352.140484614673, "dy": 28.31547944746875, "dx": 13.527743651553388 }, { "name": "Control", "value": 1353, "depth": 3, "x": 289.1768821083354, "y": 352.140484614673, "dx": 23.98825315930765, "dy": 28.315479447468743 }, { "name": "AnchorControl", "value": 2138, "depth": 3, "x": 289.1768821083354, "y": 323.5306098232325, "dy": 28.609874791440536, "dx": 37.51599681086104 }, { "name": "DragControl", "value": 2649, "depth": 3, "x": 240.8399807166266, "y": 352.9436007381369, "dx": 48.33690139170882, "dy": 27.512363324004866 }, { "name": "ExpandControl", "value": 2832, "depth": 3, "x": 240.8399807166266, "y": 323.5306098232325, "dx": 48.33690139170882, "dy": 29.41299091490442 }, { "name": "ClickControl", "value": 3824, "depth": 3, "x": 288.01912668375917, "y": 273.8912331273824, "dy": 49.639376695850125, "dx": 38.673752235437284 }, { "name": "ControlList", "value": 4665, "depth": 3, "x": 240.8399807166266, "y": 273.8912331273824, "dy": 49.639376695850125, "dx": 47.17914596713257 }, { "name": "HoverControl", "value": 4896, "depth": 3, "x": 193.17428580806634, "y": 328.89034608857173, "dx": 47.66569490856025, "dy": 51.565617973570056 }, { "name": "PanZoomControl", "value": 5222, "depth": 3, "x": 193.17428580806634, "y": 273.8912331273824, "dx": 47.66569490856025, "dy": 54.999112961189326 }, { "name": "SelectionControl", "value": 7862, "depth": 3, "x": 262.280828907556, "y": 212.61519685457975, "dy": 61.276036272802685, "dx": 64.41205001164047 }, { "name": "TooltipControl", "value": 8435, "depth": 3, "x": 193.17428580806634, "y": 212.61519685457975, "dy": 61.276036272802685, "dx": 69.10654309948964 } ], "depth": 2, "value": 44639, "x": 193.17428580806634, "y": 212.61519685457975, "dy": 167.8407672075621, "dx": 133.51859311113012 }, { "name": "data", "children": [ { "name": "EdgeSprite", "value": 3301, "depth": 3, "x": 134.28115602824815, "y": 471.86119589261443, "dx": 58.8931297798182, "dy": 28.138804107385567 }, { "name": "Tree", "value": 7147, "depth": 3, "x": 134.28115602824815, "y": 410.93782935051024, "dy": 60.92336654210418, "dx": 58.893129779818196 }, { "name": "render", "children": [ { "name": "IRenderer", "value": 353, "depth": 4, "x": 118.35319281224477, "y": 488.8739960989091, "dx": 15.927963216003377, "dy": 11.126003901090826 }, { "name": "ArrowType", "value": 698, "depth": 4, "x": 118.35319281224477, "y": 466.8741356939193, "dy": 21.999860404989814, "dx": 15.927963216003375 }, { "name": "ShapeRenderer", "value": 2247, "depth": 4, "x": 84.29978334853442, "y": 466.8741356939193, "dx": 34.053409463710345, "dy": 33.12586430608064 }, { "name": "EdgeRenderer", "value": 5569, "depth": 4, "x": 84.29978334853442, "y": 410.93782935051024, "dy": 55.93630634340908, "dx": 49.98137267971373 } ], "depth": 3, "value": 8867, "x": 84.29978334853442, "y": 410.93782935051024, "dx": 49.98137267971372, "dy": 89.06217064948974 }, { "name": "TreeBuilder", "value": 9930, "depth": 3, "x": 139.86180445182828, "y": 317.43061948248, "dy": 93.50720986803027, "dx": 53.31248135623807 }, { "name": "DataSprite", "value": 10349, "depth": 3, "x": 84.29978334853442, "y": 317.43061948248, "dy": 93.50720986803027, "dx": 55.562021103293844 }, { "name": "ScaleBinding", "value": 11275, "depth": 3, "x": 0, "y": 432.8548205846939, "dx": 84.29978334853442, "dy": 67.14517941530607 }, { "name": "NodeSprite", "value": 19382, "depth": 3, "x": 0, "y": 317.43061948248, "dx": 84.29978334853442, "dy": 115.42420110221394 }, { "name": "DataList", "value": 19788, "depth": 3, "x": 98.39761300309718, "y": 212.61519685457975, "dy": 104.81542262790023, "dx": 94.77667280496917 }, { "name": "Data", "value": 20544, "depth": 3, "x": 0, "y": 212.61519685457975, "dy": 104.81542262790023, "dx": 98.39761300309718 } ], "depth": 2, "value": 110583, "x": 0, "y": 212.61519685457975, "dx": 193.17428580806634, "dy": 287.3848031454203 }, { "name": "operator", "children": [ { "name": "IOperator", "value": 1286, "depth": 3, "x": 418.26421466147815, "y": 172.55625762210622, "dy": 40.05893923247354, "dx": 16.11633440669152 }, { "name": "SortOperator", "value": 2023, "depth": 3, "x": 392.9116917184477, "y": 172.55625762210622, "dx": 25.352522943030483, "dy": 40.058939232473534 }, { "name": "Operator", "value": 2490, "depth": 3, "x": 361.7066585359732, "y": 172.55625762210622, "dx": 31.20503318247449, "dy": 40.058939232473534 }, { "name": "OperatorSwitch", "value": 2581, "depth": 3, "x": 406.6783911205107, "y": 125.78283504182015, "dy": 46.77342258028606, "dx": 27.702157947658975 }, { "name": "OperatorSequence", "value": 4190, "depth": 3, "x": 361.7066585359732, "y": 125.78283504182015, "dy": 46.77342258028606, "dx": 44.971732584537484 }, { "name": "OperatorList", "value": 5248, "depth": 3, "x": 361.7066585359732, "y": 89.53015128737601, "dy": 36.252683754444135, "dx": 72.67389053219648 }, { "name": "filter", "children": [ { "name": "GraphDistanceFilter", "value": 3165, "depth": 4, "x": 333.36391491418345, "y": 156.55474775337132, "dy": 56.060449101208434, "dx": 28.34274362178968 }, { "name": "VisibilityFilter", "value": 3509, "depth": 4, "x": 301.9406329650966, "y": 156.55474775337132, "dx": 31.42328194908688, "dy": 56.060449101208434 }, { "name": "FisheyeTreeFilter", "value": 5219, "depth": 4, "x": 255.20420991229398, "y": 156.55474775337132, "dx": 46.73642305280263, "dy": 56.060449101208434 } ], "depth": 3, "value": 11893, "x": 255.20420991229398, "y": 156.55474775337132, "dx": 106.5024486236792, "dy": 56.060449101208434 }, { "name": "distortion", "children": [ { "name": "FisheyeDistortion", "value": 3444, "depth": 4, "x": 302.49701957611774, "y": 127.353898894562, "dx": 59.20963895985541, "dy": 29.200848858809323 }, { "name": "BifocalDistortion", "value": 4461, "depth": 4, "x": 302.49701957611774, "y": 89.53015128737601, "dy": 37.82374760718598, "dx": 59.2096389598554 }, { "name": "Distortion", "value": 6314, "depth": 4, "x": 255.20420991229398, "y": 89.53015128737601, "dx": 47.29280966382379, "dy": 67.0245964659953 } ], "depth": 3, "value": 14219, "x": 255.20420991229398, "y": 89.53015128737601, "dx": 106.5024486236792, "dy": 67.02459646599532 }, { "name": "encoder", "children": [ { "name": "ShapeEncoder", "value": 1690, "depth": 4, "x": 413.3073255910091, "y": 49.26952945250109, "dy": 40.260621834874925, "dx": 21.07322347716058 }, { "name": "SizeEncoder", "value": 1830, "depth": 4, "x": 390.4883912932553, "y": 49.26952945250109, "dx": 22.818934297753803, "dy": 40.26062183487492 }, { "name": "ColorEncoder", "value": 3179, "depth": 4, "x": 350.8482863027857, "y": 49.26952945250109, "dx": 39.64010499046959, "dy": 40.26062183487492 }, { "name": "Encoder", "value": 4060, "depth": 4, "x": 393.01180219973116, "y": 0, "dy": 49.26952945250109, "dx": 41.3687468684385 }, { "name": "PropertyEncoder", "value": 4138, "depth": 4, "x": 350.8482863027857, "y": 0, "dy": 49.26952945250109, "dx": 42.16351589694545 } ], "depth": 3, "value": 14897, "x": 350.8482863027857, "y": 0, "dy": 89.53015128737601, "dx": 83.53226276538396 }, { "name": "label", "children": [ { "name": "StackedAreaLabeler", "value": 3202, "depth": 4, "x": 311.0306990102441, "y": 49.15900012244461, "dy": 40.371151164931405, "dx": 39.81758729254159 }, { "name": "RadialLabeler", "value": 3899, "depth": 4, "x": 311.0306990102441, "y": 0, "dy": 49.15900012244461, "dx": 39.81758729254156 }, { "name": "Labeler", "value": 9956, "depth": 4, "x": 255.20420991229398, "y": 0, "dx": 55.82648909795014, "dy": 89.53015128737601 } ], "depth": 3, "value": 17057, "x": 255.20420991229398, "y": 0, "dy": 89.53015128737601, "dx": 95.6440763904917 }, { "name": "layout", "children": [ { "name": "RandomLayout", "value": 870, "depth": 4, "x": 244.08299407115499, "y": 173.3424091866044, "dy": 39.27278766797533, "dx": 11.121215841139032 }, { "name": "PieLayout", "value": 2728, "depth": 4, "x": 209.21095175549198, "y": 173.3424091866044, "dx": 34.872042315662995, "dy": 39.27278766797533 }, { "name": "IndentedTreeLayout", "value": 3174, "depth": 4, "x": 209.21095175549198, "y": 138.69765430662852, "dy": 34.6447548799759, "dx": 45.993258156802014 }, { "name": "BundledEdgeRouter", "value": 3727, "depth": 4, "x": 150.93833583916583, "y": 180.506725866676, "dx": 58.27261591632613, "dy": 32.10847098790376 }, { "name": "DendrogramLayout", "value": 4853, "depth": 4, "x": 150.93833583916583, "y": 138.69765430662852, "dx": 58.27261591632613, "dy": 41.80907156004748 }, { "name": "IcicleTreeLayout", "value": 4864, "depth": 4, "x": 211.442952556897, "y": 82.89838381495278, "dy": 55.79927049167575, "dx": 43.76125735539696 }, { "name": "AxisLayout", "value": 6725, "depth": 4, "x": 150.93833583916583, "y": 82.89838381495278, "dy": 55.79927049167575, "dx": 60.504616717731196 }, { "name": "Layout", "value": 7881, "depth": 4, "x": 87.88575351484963, "y": 149.8667188552365, "dx": 63.05258232431621, "dy": 62.74847799934324 }, { "name": "ForceDirectedLayout", "value": 8411, "depth": 4, "x": 87.88575351484963, "y": 82.89838381495278, "dx": 63.05258232431621, "dy": 66.96833504028372 }, { "name": "StackedAreaLayout", "value": 9121, "depth": 4, "x": 199.9683475647211, "y": 0, "dy": 82.89838381495278, "dx": 55.23586234757286 }, { "name": "TreeMapLayout", "value": 9191, "depth": 4, "x": 144.30857222906255, "y": 0, "dy": 82.89838381495278, "dx": 55.65977533565857 }, { "name": "CircleLayout", "value": 9317, "depth": 4, "x": 87.88575351484963, "y": 0, "dy": 82.89838381495278, "dx": 56.42281871421292 }, { "name": "CirclePackingLayout", "value": 12003, "depth": 4, "x": 0, "y": 144.05120857254758, "dx": 87.88575351484963, "dy": 68.56398828203217 }, { "name": "RadialTreeLayout", "value": 12348, "depth": 4, "x": 0, "y": 73.51649830790258, "dx": 87.88575351484963, "dy": 70.534710264645 }, { "name": "NodeLinkTreeLayout", "value": 12870, "depth": 4, "x": 0, "y": 0, "dx": 87.88575351484963, "dy": 73.51649830790258 } ], "depth": 3, "value": 108083, "x": 0, "y": 0, "dx": 255.20420991229398, "dy": 212.61519685457975 } ], "depth": 2, "value": 183967, "x": 0, "y": 0, "dy": 212.61519685457975, "dx": 434.38054906816967 } ], "depth": 1, "value": 432629, "x": 0, "y": 0, "dx": 434.38054906816967, "dy": 500 } ], "depth": 0, "value": 956129, "y": 0, "x": 0, "dx": 960, "dy": 500 } d3-hierarchy-1.1.8/test/data/flare-pack.json000066400000000000000000000411531334007264500206030ustar00rootroot00000000000000{"children":[{"children":[{"children":[{"children":[{"value":12870,"r":34.76,"x":95.67,"y":529.46,"name":"NodeLinkTreeLayout"},{"value":12348,"r":34.05,"x":164.49,"y":529.46,"name":"RadialTreeLayout"},{"value":12003,"r":33.57,"x":130.78,"y":588.08,"name":"CirclePackingLayout"},{"value":9317,"r":29.58,"x":130.74,"y":475.51,"name":"CircleLayout"},{"value":9191,"r":29.38,"x":72.06,"y":469.82,"name":"TreeMapLayout"},{"value":9121,"r":29.27,"x":189.43,"y":471.26,"name":"StackedAreaLayout"},{"value":8411,"r":28.1,"x":69.13,"y":586.44,"name":"ForceDirectedLayout"},{"value":7881,"r":27.2,"x":191.45,"y":584.46,"name":"Layout"},{"value":6725,"r":25.13,"x":38.22,"y":512.54,"name":"AxisLayout"},{"value":4864,"r":21.37,"x":217.53,"y":513.39,"name":"IcicleTreeLayout"},{"value":4853,"r":21.35,"x":28.66,"y":558.03,"name":"DendrogramLayout"},{"value":3727,"r":18.71,"x":224.72,"y":552.82,"name":"BundledEdgeRouter"},{"value":3174,"r":17.26,"x":104.75,"y":436.55,"name":"IndentedTreeLayout"},{"value":2728,"r":16,"x":157.83,"y":438.85,"name":"PieLayout"},{"value":870,"r":9.04,"x":95.75,"y":612.34,"name":"RandomLayout"}],"value":108083,"r":120.16,"x":124.8,"y":535.18,"name":"layout"},{"children":[{"value":9956,"r":30.58,"x":276.03,"y":530.85,"name":"Labeler"},{"value":3899,"r":19.13,"x":325.74,"y":530.85,"name":"RadialLabeler"},{"value":3202,"r":17.34,"x":310.59,"y":564.04,"name":"StackedAreaLabeler"}],"value":17057,"r":50.1,"x":295.07,"y":535.18,"name":"label"},{"children":[{"value":4138,"r":19.71,"x":255.27,"y":628.41,"name":"PropertyEncoder"},{"value":4060,"r":19.52,"x":294.51,"y":628.41,"name":"Encoder"},{"value":3179,"r":17.28,"x":275.07,"y":659.66,"name":"ColorEncoder"},{"value":1830,"r":13.11,"x":275.05,"y":602.22,"name":"SizeEncoder"},{"value":1690,"r":12.6,"x":249.98,"y":596.54,"name":"ShapeEncoder"}],"value":14897,"r":48.95,"x":265.11,"y":629.59,"name":"encoder"},{"children":[{"value":6314,"r":24.35,"x":243.38,"y":438.32,"name":"Distortion"},{"value":4461,"r":20.47,"x":288.19,"y":438.32,"name":"BifocalDistortion"},{"value":3444,"r":17.98,"x":269.29,"y":471.8,"name":"FisheyeDistortion"}],"value":14219,"r":45.7,"x":263.77,"y":444.64,"name":"distortion"},{"children":[{"value":5219,"r":22.14,"x":177.78,"y":382.14,"name":"FisheyeTreeFilter"},{"value":3509,"r":18.15,"x":218.07,"y":382.14,"name":"VisibilityFilter"},{"value":3165,"r":17.24,"x":201.62,"y":413.47,"name":"GraphDistanceFilter"}],"value":11893,"r":41.69,"x":195.79,"y":389.73,"name":"filter"},{"value":5248,"r":22.2,"x":199.25,"y":656.53,"name":"OperatorList"},{"value":4190,"r":19.84,"x":134.55,"y":395.52,"name":"OperatorSequence"},{"value":2581,"r":15.57,"x":162.58,"y":665.55,"name":"OperatorSwitch"},{"value":2490,"r":15.29,"x":317.38,"y":473.71,"name":"Operator"},{"value":2023,"r":13.78,"x":317.45,"y":595.02,"name":"SortOperator"},{"value":1286,"r":10.99,"x":136.03,"y":665.85,"name":"IOperator"}],"value":183967,"r":179.69,"x":183.79,"y":527.21,"name":"operator"},{"children":[{"value":20544,"r":43.92,"x":465.64,"y":523.73,"name":"Data"},{"value":19788,"r":43.11,"x":552.67,"y":523.73,"name":"DataList"},{"value":19382,"r":42.66,"x":509.96,"y":598.11,"name":"NodeSprite"},{"value":11275,"r":32.54,"x":509.87,"y":461.36,"name":"ScaleBinding"},{"value":10349,"r":31.17,"x":447.01,"y":450.99,"name":"DataSprite"},{"value":9930,"r":30.54,"x":572.35,"y":452.77,"name":"TreeBuilder"},{"children":[{"value":5569,"r":22.87,"x":415.39,"y":596.78,"name":"EdgeRenderer"},{"value":2247,"r":14.53,"x":452.79,"y":596.78,"name":"ShapeRenderer"},{"value":698,"r":8.1,"x":440.07,"y":615.49,"name":"ArrowType"},{"value":353,"r":5.76,"x":439.54,"y":581.42,"name":"IRenderer"}],"value":8867,"r":37.39,"x":429.92,"y":596.78,"name":"render"},{"value":7147,"r":25.91,"x":577.78,"y":588.01,"name":"Tree"},{"value":3301,"r":17.61,"x":415.43,"y":488.17,"name":"EdgeSprite"}],"value":110583,"r":135.24,"x":498.72,"y":527.21,"name":"data"},{"children":[{"value":8435,"r":28.14,"x":348.45,"y":706.7,"name":"TooltipControl"},{"value":7862,"r":27.17,"x":403.77,"y":706.7,"name":"SelectionControl"},{"value":5222,"r":22.14,"x":376.99,"y":748.1,"name":"PanZoomControl"},{"value":4896,"r":21.44,"x":376.97,"y":666.13,"name":"HoverControl"},{"value":4665,"r":20.93,"x":335.13,"y":659.47,"name":"ControlList"},{"value":3824,"r":18.95,"x":336.09,"y":752.14,"name":"ClickControl"},{"value":2832,"r":16.31,"x":414.69,"y":664.61,"name":"ExpandControl"},{"value":2649,"r":15.77,"x":414.9,"y":748.17,"name":"DragControl"},{"value":2138,"r":14.17,"x":438.27,"y":683.92,"name":"AnchorControl"},{"value":1353,"r":11.27,"x":434.6,"y":729.65,"name":"Control"},{"value":763,"r":8.46,"x":320.11,"y":729.86,"name":"IControl"}],"value":44639,"r":80.69,"x":374.88,"y":704.1,"name":"controls"},{"children":[{"value":20859,"r":44.26,"x":342.73,"y":356.97,"name":"Legend"},{"value":10530,"r":31.44,"x":418.43,"y":356.97,"name":"LegendRange"},{"value":4614,"r":20.81,"x":390.51,"y":401.15,"name":"LegendItem"}],"value":36003,"r":75.7,"x":374.17,"y":356.97,"name":"legend"},{"children":[{"value":24593,"r":48.05,"x":220.48,"y":282.04,"name":"Axis"},{"value":6703,"r":25.09,"x":293.62,"y":282.04,"name":"CartesianAxes"},{"value":1302,"r":11.06,"x":272.01,"y":311.01,"name":"Axes"},{"value":652,"r":7.82,"x":270.99,"y":258.15,"name":"AxisGridLine"},{"value":636,"r":7.73,"x":262.37,"y":245.2,"name":"AxisLabel"}],"value":33886,"r":73.14,"x":245.57,"y":282.04,"name":"axis"},{"value":16540,"r":39.41,"x":258.36,"y":733.24,"name":"Visualization"},{"children":[{"value":2313,"r":14.74,"x":467.14,"y":357.49,"name":"DataEvent"},{"value":1880,"r":13.29,"x":495.16,"y":357.49,"name":"SelectionEvent"},{"value":1701,"r":12.64,"x":482.53,"y":380.13,"name":"TooltipEvent"},{"value":1117,"r":10.24,"x":482.41,"y":337.72,"name":"VisualizationEvent"}],"value":7011,"r":32.64,"x":482.47,"y":360.12,"name":"events"}],"value":432629,"r":315.57,"x":318.94,"y":513.1,"name":"vis"},{"children":[{"value":22026,"r":45.48,"x":753.19,"y":509.88,"name":"Strings"},{"value":19118,"r":42.37,"x":841.03,"y":509.88,"name":"Shapes"},{"value":17705,"r":40.77,"x":800.11,"y":582.25,"name":"Maths"},{"value":12555,"r":34.33,"x":799.88,"y":445.15,"name":"Displays"},{"children":[{"value":6367,"r":24.45,"x":712.78,"y":424.58,"name":"ColorPalette"},{"value":2291,"r":14.67,"x":751.9,"y":424.58,"name":"SizePalette"},{"value":2059,"r":13.9,"x":740.71,"y":450.87,"name":"ShapePalette"},{"value":1229,"r":10.74,"x":739.92,"y":402.18,"name":"Palette"}],"value":11946,"r":39.81,"x":727.62,"y":428.52,"name":"palette"},{"value":10993,"r":32.13,"x":727.21,"y":583.01,"name":"Geometry"},{"children":[{"value":9354,"r":29.64,"x":862.99,"y":433.86,"name":"FibonacciHeap"},{"value":1233,"r":10.76,"x":903.39,"y":433.86,"name":"HeapNode"}],"value":10587,"r":40.4,"x":873.75,"y":433.86,"name":"heap"},{"value":10001,"r":30.64,"x":871.28,"y":576.34,"name":"Colors"},{"children":[{"value":3366,"r":17.78,"x":657.72,"y":475.96,"name":"SparseMatrix"},{"value":3165,"r":17.24,"x":692.74,"y":475.96,"name":"DenseMatrix"},{"value":2815,"r":16.26,"x":675.75,"y":504.83,"name":"IMatrix"}],"value":9346,"r":36.87,"x":674.93,"y":484.23,"name":"math"},{"value":8258,"r":27.85,"x":677.89,"y":548.88,"name":"Arrays"},{"value":8217,"r":27.78,"x":908.93,"y":492.25,"name":"Dates"},{"value":6887,"r":25.43,"x":917.61,"y":544.75,"name":"Sort"},{"value":6557,"r":24.81,"x":779.29,"y":389.7,"name":"Stats"},{"value":5559,"r":22.85,"x":826.92,"y":391.35,"name":"Property"},{"value":2324,"r":14.77,"x":757.95,"y":618.43,"name":"Filter"},{"value":1486,"r":11.81,"x":844.98,"y":609.67,"name":"Orientation"},{"value":874,"r":9.06,"x":779.87,"y":627.79,"name":"IValueProxy"},{"value":383,"r":6,"x":829.56,"y":618.58,"name":"IPredicate"},{"value":335,"r":5.61,"x":862.31,"y":611.46,"name":"IEvaluable"}],"value":165157,"r":156.21,"x":790.72,"y":513.1,"name":"util"},{"children":[{"children":[{"value":8746,"r":28.66,"x":609.83,"y":775.35,"name":"Interpolator"},{"value":2202,"r":14.38,"x":652.86,"y":775.35,"name":"MatrixInterpolator"},{"value":2047,"r":13.86,"x":643.08,"y":801.85,"name":"ColorInterpolator"},{"value":2042,"r":13.85,"x":643.08,"y":748.88,"name":"RectangleInterpolator"},{"value":1983,"r":13.65,"x":619.8,"y":734.25,"name":"ArrayInterpolator"},{"value":1675,"r":12.54,"x":620.3,"y":815.2,"name":"PointInterpolator"},{"value":1629,"r":12.37,"x":668.81,"y":753.88,"name":"ObjectInterpolator"},{"value":1382,"r":11.39,"x":667.74,"y":796.4,"name":"NumberInterpolator"},{"value":1375,"r":11.36,"x":596.49,"y":813.09,"name":"DateInterpolator"}],"value":23081,"r":58.97,"x":629.28,"y":778.57,"name":"interpolate"},{"value":19975,"r":43.31,"x":731.56,"y":778.57,"name":"Transitioner"},{"value":17010,"r":39.97,"x":694.37,"y":853.08,"name":"Easing"},{"value":9201,"r":29.39,"x":692.76,"y":717.09,"name":"Transition"},{"value":6006,"r":23.75,"x":643.52,"y":697.09,"name":"Tween"},{"value":5842,"r":23.42,"x":631.48,"y":860.93,"name":"FunctionSequence"},{"value":5593,"r":22.92,"x":744.96,"y":713.71,"name":"Scheduler"},{"value":5534,"r":22.8,"x":755.77,"y":840.08,"name":"Sequence"},{"value":5176,"r":22.05,"x":598.22,"y":703.74,"name":"Parallel"},{"value":1116,"r":10.24,"x":603.2,"y":842.68,"name":"TransitionEvent"},{"value":1041,"r":9.89,"x":673.9,"y":682.64,"name":"ISchedulable"},{"value":449,"r":6.49,"x":760.97,"y":738.38,"name":"Pause"}],"value":100024,"r":126.6,"x":677.28,"y":772.16,"name":"animate"},{"children":[{"children":[{"value":772,"r":8.51,"x":623,"y":278,"name":"range"},{"value":748,"r":8.38,"x":639.9,"y":278,"name":"iff"},{"value":625,"r":7.66,"x":631.58,"y":291.71,"name":"gte"},{"value":619,"r":7.62,"x":631.58,"y":264.33,"name":"lte"},{"value":603,"r":7.52,"x":616.46,"y":263.35,"name":"gt"},{"value":603,"r":7.52,"x":616.42,"y":292.62,"name":"mul"},{"value":600,"r":7.51,"x":646.69,"y":263.64,"name":"sub"},{"value":599,"r":7.5,"x":646.72,"y":292.34,"name":"neq"},{"value":597,"r":7.49,"x":607.25,"y":275.21,"name":"lt"},{"value":595,"r":7.47,"x":601.83,"y":289.15,"name":"div"},{"value":594,"r":7.47,"x":655.58,"y":275.69,"name":"eq"},{"value":593,"r":7.46,"x":661.4,"y":289.44,"name":"add"},{"value":591,"r":7.45,"x":624.75,"y":250.89,"name":"mod"},{"value":461,"r":6.58,"x":624.59,"y":304.12,"name":"isa"},{"value":460,"r":6.57,"x":638.73,"y":252.03,"name":"fn"},{"value":386,"r":6.02,"x":638.83,"y":303.31,"name":"not"},{"value":363,"r":5.84,"x":632.74,"y":313.49,"name":"stddev"},{"value":354,"r":5.77,"x":603.19,"y":262.59,"name":"xor"},{"value":335,"r":5.61,"x":659.8,"y":263.31,"name":"variance"},{"value":330,"r":5.57,"x":650.31,"y":304.9,"name":"and"},{"value":323,"r":5.51,"x":612.54,"y":305.06,"name":"or"},{"value":307,"r":5.37,"x":650.65,"y":251.39,"name":"orderby"},{"value":307,"r":5.37,"x":611.94,"y":251.28,"name":"update"},{"value":299,"r":5.3,"x":602.2,"y":301.92,"name":"where"},{"value":296,"r":5.27,"x":660.79,"y":302.16,"name":"select"},{"value":292,"r":5.24,"x":633.32,"y":241.53,"name":"distinct"},{"value":287,"r":5.19,"x":601.39,"y":251.78,"name":"average"},{"value":283,"r":5.15,"x":661.1,"y":252.63,"name":"max"},{"value":283,"r":5.15,"x":595.04,"y":278.5,"name":"min"},{"value":280,"r":5.13,"x":667.83,"y":278.61,"name":"sum"},{"value":277,"r":5.1,"x":669.18,"y":268.47,"name":"count"},{"value":264,"r":4.98,"x":594.16,"y":268.41,"name":"_"}],"value":14326,"r":44.17,"x":631.12,"y":276.99,"name":"methods"},{"value":13896,"r":36.12,"x":711.42,"y":276.99,"name":"Query"},{"value":5130,"r":21.95,"x":677.5,"y":324.13,"name":"Expression"},{"value":5103,"r":21.89,"x":677.49,"y":229.94,"name":"Comparison"},{"value":4141,"r":19.72,"x":639.22,"y":213.62,"name":"DateUtil"},{"value":4130,"r":19.69,"x":639.15,"y":340.36,"name":"StringUtil"},{"value":3891,"r":19.11,"x":717.74,"y":222.12,"name":"Arithmetic"},{"value":3748,"r":18.76,"x":717.53,"y":331.54,"name":"Match"},{"value":3677,"r":18.58,"x":601.75,"y":221.54,"name":"CompositeExpression"},{"value":3617,"r":18.43,"x":601.88,"y":332.35,"name":"ExpressionIterator"},{"value":3240,"r":17.44,"x":669.09,"y":191.51,"name":"Fn"},{"value":2893,"r":16.48,"x":668.51,"y":361.49,"name":"BinaryExpression"},{"value":2732,"r":16.02,"x":747.77,"y":314.37,"name":"If"},{"value":2039,"r":13.84,"x":745.26,"y":240.25,"name":"IsA"},{"value":1876,"r":13.27,"x":697.9,"y":356.85,"name":"Variance"},{"value":1616,"r":12.32,"x":698.25,"y":197.46,"name":"AggregateExpression"},{"value":1594,"r":12.23,"x":583.75,"y":307.62,"name":"Range"},{"value":1554,"r":12.08,"x":583.88,"y":246.46,"name":"Not"},{"value":1214,"r":10.68,"x":755.87,"y":262.35,"name":"Literal"},{"value":1124,"r":10.27,"x":756.11,"y":289.44,"name":"Variable"},{"value":1101,"r":10.17,"x":614.92,"y":357.8,"name":"Xor"},{"value":1027,"r":9.82,"x":643.47,"y":369.55,"name":"And"},{"value":970,"r":9.54,"x":615.23,"y":196.86,"name":"Or"},{"value":933,"r":9.36,"x":643.14,"y":184.8,"name":"Distinct"},{"value":891,"r":9.15,"x":578.72,"y":286.84,"name":"Average"},{"value":843,"r":8.9,"x":579.03,"y":266.86,"name":"Maximum"},{"value":843,"r":8.9,"x":769.84,"y":276.06,"name":"Minimum"},{"value":791,"r":8.62,"x":719.7,"y":358.83,"name":"Sum"},{"value":781,"r":8.56,"x":718.92,"y":194.47,"name":"Count"}],"value":89721,"r":107.82,"x":670.93,"y":277.82,"name":"query"},{"children":[{"children":[{"value":7840,"r":27.13,"x":450.08,"y":127.82,"name":"MaxFlowMinCut"},{"value":5914,"r":23.57,"x":500.78,"y":127.82,"name":"ShortestPaths"},{"value":5731,"r":23.2,"x":478.85,"y":169.12,"name":"LinkDistance"},{"value":3534,"r":18.22,"x":478.5,"y":92.48,"name":"BetweennessCentrality"},{"value":3416,"r":17.91,"x":443.57,"y":83.25,"name":"SpanningTree"}],"value":26435,"r":66.97,"x":462.21,"y":128.63,"name":"graph"},{"children":[{"value":6714,"r":25.11,"x":556.16,"y":120,"name":"HierarchicalCluster"},{"value":3938,"r":19.23,"x":600.49,"y":120,"name":"AgglomerativeCluster"},{"value":3812,"r":18.92,"x":583.77,"y":154.29,"name":"CommunityStructure"},{"value":743,"r":8.35,"x":582.37,"y":99.21,"name":"MergeEdge"}],"value":15207,"r":45.99,"x":575.17,"y":128.63,"name":"cluster"},{"children":[{"value":7074,"r":25.77,"x":533.97,"y":187.38,"name":"AspectRatioBanker"}],"value":7074,"r":25.77,"x":533.97,"y":187.38,"name":"optimization"}],"value":48716,"r":112.96,"x":508.2,"y":128.63,"name":"analytics"},{"children":[{"value":5833,"r":23.4,"x":483.77,"y":848.77,"name":"TimeScale"},{"value":4839,"r":21.32,"x":528.49,"y":848.77,"name":"QuantitativeScale"},{"value":4268,"r":20.02,"x":508.11,"y":884.73,"name":"Scale"},{"value":3770,"r":18.81,"x":508.05,"y":814.23,"name":"OrdinalScale"},{"value":3151,"r":17.2,"x":472.31,"y":809.82,"name":"LogScale"},{"value":2435,"r":15.12,"x":472.98,"y":885.75,"name":"QuantileScale"},{"value":2105,"r":14.06,"x":540.9,"y":815.64,"name":"IScaleMap"},{"value":1821,"r":13.08,"x":540.97,"y":880.82,"name":"ScaleType"},{"value":1756,"r":12.84,"x":452.37,"y":866.86,"name":"RootScale"},{"value":1316,"r":11.12,"x":453.95,"y":831.38,"name":"LinearScale"}],"value":31294,"r":65.15,"x":500.96,"y":847.5,"name":"scale"},{"children":[{"children":[{"value":9800,"r":30.33,"x":808.41,"y":292.56,"name":"GraphMLConverter"},{"value":4294,"r":20.08,"x":858.82,"y":292.56,"name":"DelimitedTextConverter"},{"value":2220,"r":14.44,"x":841.68,"y":322.52,"name":"JSONConverter"},{"value":1314,"r":11.11,"x":841,"y":266.97,"name":"IDataConverter"},{"value":721,"r":8.23,"x":824.21,"y":257.38,"name":"Converters"}],"value":18349,"r":50.41,"x":828.49,"y":292.56,"name":"converters"},{"value":3331,"r":17.69,"x":896.59,"y":292.56,"name":"DataSource"},{"value":3322,"r":17.66,"x":887.39,"y":326.69,"name":"DataUtil"},{"value":2165,"r":14.26,"x":885.76,"y":262.51,"name":"DataSchema"},{"value":1759,"r":12.85,"x":867.33,"y":242.62,"name":"DataField"},{"value":772,"r":8.51,"x":864.43,"y":339.26,"name":"DataTable"},{"value":586,"r":7.42,"x":847.6,"y":237.98,"name":"DataSet"}],"value":30284,"r":69.04,"x":846.96,"y":294.99,"name":"data"},{"children":[{"value":10498,"r":31.4,"x":349.07,"y":885.99,"name":"NBodyForce"},{"value":9983,"r":30.62,"x":411.09,"y":885.99,"name":"Simulation"},{"value":2822,"r":16.28,"x":380.68,"y":921.68,"name":"Particle"},{"value":2213,"r":14.42,"x":380.65,"y":852.8,"name":"Spring"},{"value":1681,"r":12.56,"x":355.7,"y":842.53,"name":"SpringForce"},{"value":1336,"r":11.2,"x":404.93,"y":844.62,"name":"GravityForce"},{"value":1082,"r":10.08,"x":354.87,"y":927.05,"name":"DragForce"},{"value":319,"r":5.47,"x":402.42,"y":921.02,"name":"IForce"}],"value":29934,"r":62.01,"x":379.69,"y":885.77,"name":"physics"},{"children":[{"value":10066,"r":30.74,"x":307.18,"y":138.37,"name":"TextSprite"},{"value":8833,"r":28.8,"x":366.72,"y":138.37,"name":"DirtySprite"},{"value":3623,"r":18.44,"x":338.52,"y":176.28,"name":"RectSprite"},{"value":1732,"r":12.75,"x":338.34,"y":108.03,"name":"LineSprite"}],"value":24254,"r":59.54,"x":335.97,"y":138.37,"name":"display"},{"children":[{"value":4116,"r":19.66,"x":797.48,"y":688.84,"name":"FlareVis"}],"value":4116,"r":19.66,"x":797.48,"y":688.84,"name":"flex"}],"value":956129,"x":480,"y":480,"r":480,"name":"flare"} d3-hierarchy-1.1.8/test/data/flare-phi.json000066400000000000000000002011521334007264500204420ustar00rootroot00000000000000{ "name": "flare", "children": [ { "name": "flex", "children": [ { "name": "FlareVis", "value": 4116, "depth": 2, "x": 790.7194112928278, "y": 487.79344950711175, "dx": 169.28058870717229, "dy": 12.206550492888255 } ], "depth": 1, "value": 4116, "x": 790.7194112928278, "y": 487.79344950711175, "dx": 169.28058870717229, "dy": 12.206550492888255 }, { "name": "display", "children": [ { "name": "LineSprite", "value": 1732, "depth": 2, "x": 935.493808421004, "y": 452.31237120870725, "dy": 35.481078298404476, "dx": 24.506191578995978 }, { "name": "RectSprite", "value": 3623, "depth": 2, "x": 884.231722918289, "y": 452.31237120870725, "dx": 51.26208550271502, "dy": 35.48107829840448 }, { "name": "DirtySprite", "value": 8833, "depth": 2, "x": 884.231722918289, "y": 393.7868129248964, "dy": 58.52555828381083, "dx": 75.76827708171095 }, { "name": "TextSprite", "value": 10066, "depth": 2, "x": 884.231722918289, "y": 327.0916618227975, "dy": 66.69515110209893, "dx": 75.76827708171093 } ], "depth": 1, "value": 24254, "x": 884.231722918289, "y": 327.0916618227975, "dy": 160.70178768431424, "dx": 75.76827708171095 }, { "name": "physics", "children": [ { "name": "IForce", "value": 319, "depth": 2, "x": 874.2804784775859, "y": 471.7004115614407, "dy": 16.093037945670986, "dx": 9.951244440703022 }, { "name": "DragForce", "value": 1082, "depth": 2, "x": 840.5273547006557, "y": 471.7004115614407, "dx": 33.75312377693026, "dy": 16.09303794567097 }, { "name": "GravityForce", "value": 1336, "depth": 2, "x": 864.8783798825721, "y": 437.0446688904276, "dy": 34.65574267101313, "dx": 19.35334303571698 }, { "name": "SpringForce", "value": 1681, "depth": 2, "x": 840.5273547006557, "y": 437.0446688904276, "dy": 34.65574267101313, "dx": 24.35102518191635 }, { "name": "Spring", "value": 2213, "depth": 2, "x": 790.7194112928278, "y": 465.48817611987795, "dx": 49.80794340782794, "dy": 22.30527338723381 }, { "name": "Particle", "value": 2822, "depth": 2, "x": 790.7194112928278, "y": 437.0446688904276, "dx": 49.80794340782794, "dy": 28.44350722945036 }, { "name": "Simulation", "value": 9983, "depth": 2, "x": 838.6512626401297, "y": 327.0916618227975, "dy": 109.95300706763012, "dx": 45.58046027815926 }, { "name": "NBodyForce", "value": 10498, "depth": 2, "x": 790.7194112928278, "y": 327.0916618227975, "dy": 109.95300706763012, "dx": 47.931851347302 } ], "depth": 1, "value": 29934, "x": 790.7194112928278, "y": 327.0916618227975, "dy": 160.70178768431424, "dx": 93.51231162546127 }, { "name": "data", "children": [ { "name": "DataSet", "value": 586, "depth": 2, "x": 944.1010428620283, "y": 308.58816865716614, "dy": 18.503493165631404, "dx": 15.89895713797167 }, { "name": "DataTable", "value": 772, "depth": 2, "x": 923.1556590556902, "y": 308.58816865716614, "dx": 20.945383806338103, "dy": 18.503493165631404 }, { "name": "DataField", "value": 1759, "depth": 2, "x": 943.4838950761873, "y": 255.12152124778652, "dy": 53.4666474093796, "dx": 16.51610492381269 }, { "name": "DataSchema", "value": 2165, "depth": 2, "x": 923.1556590556902, "y": 255.12152124778652, "dy": 53.4666474093796, "dx": 20.328236020497148 }, { "name": "DataUtil", "value": 3322, "depth": 2, "x": 876.7479725160284, "y": 291.15527117343834, "dx": 46.40768653966173, "dy": 35.93639064935917 }, { "name": "DataSource", "value": 3331, "depth": 2, "x": 876.7479725160284, "y": 255.12152124778652, "dx": 46.40768653966173, "dy": 36.03374992565183 }, { "name": "converters", "children": [ { "name": "Converters", "value": 721, "depth": 3, "x": 945.8931347083565, "y": 229.46312592757943, "dy": 25.65839532020709, "dx": 14.106865291643544 }, { "name": "IDataConverter", "value": 1314, "depth": 3, "x": 920.1838129424484, "y": 229.46312592757943, "dx": 25.709321765908037, "dy": 25.65839532020709 }, { "name": "JSONConverter", "value": 2220, "depth": 3, "x": 876.7479725160284, "y": 229.46312592757943, "dx": 43.43584042641997, "dy": 25.65839532020709 }, { "name": "DelimitedTextConverter", "value": 4294, "depth": 3, "x": 934.6357168996612, "y": 144.47383717481824, "dy": 84.9892887527612, "dx": 25.36428310033872 }, { "name": "GraphMLConverter", "value": 9800, "depth": 3, "x": 876.7479725160284, "y": 144.47383717481824, "dy": 84.9892887527612, "dx": 57.88774438363285 } ], "depth": 2, "value": 18349, "x": 876.7479725160284, "y": 144.47383717481824, "dy": 110.64768407296829, "dx": 83.25202748397157 } ], "depth": 1, "value": 30284, "x": 876.7479725160284, "y": 144.47383717481824, "dy": 182.6178246479793, "dx": 83.25202748397157 }, { "name": "scale", "children": [ { "name": "LinearScale", "value": 1316, "depth": 2, "x": 862.4183799022032, "y": 280.9867928495138, "dy": 46.104868973283764, "dx": 14.329592613825172 }, { "name": "RootScale", "value": 1756, "depth": 2, "x": 843.2977380861873, "y": 280.9867928495138, "dy": 46.104868973283764, "dx": 19.120641816015958 }, { "name": "ScaleType", "value": 1821, "depth": 2, "x": 843.2977380861873, "y": 253.65705118273326, "dy": 27.329741666780514, "dx": 33.45023442984109 }, { "name": "IScaleMap", "value": 2105, "depth": 2, "x": 790.7194112928278, "y": 306.9928638254844, "dx": 52.57832679335952, "dy": 20.098797997313113 }, { "name": "QuantileScale", "value": 2435, "depth": 2, "x": 790.7194112928278, "y": 283.74318538203664, "dx": 52.57832679335952, "dy": 23.24967844344773 }, { "name": "LogScale", "value": 3151, "depth": 2, "x": 790.7194112928278, "y": 253.65705118273326, "dx": 52.57832679335952, "dy": 30.08613419930341 }, { "name": "OrdinalScale", "value": 3770, "depth": 2, "x": 836.3986722160201, "y": 206.75086870301007, "dy": 46.90618247972319, "dx": 40.34930030000827 }, { "name": "Scale", "value": 4268, "depth": 2, "x": 790.7194112928278, "y": 206.75086870301007, "dy": 46.90618247972319, "dx": 45.67926092319239 }, { "name": "QuantitativeScale", "value": 4839, "depth": 2, "x": 837.7400819838819, "y": 144.47383717481824, "dy": 62.27703152819183, "dx": 39.00789053214655 }, { "name": "TimeScale", "value": 5833, "depth": 2, "x": 790.7194112928278, "y": 144.47383717481824, "dy": 62.27703152819183, "dx": 47.02067069105411 } ], "depth": 1, "value": 31294, "x": 790.7194112928278, "y": 144.47383717481824, "dy": 182.6178246479793, "dx": 86.02856122320065 }, { "name": "analytics", "children": [ { "name": "optimization", "children": [ { "name": "AspectRatioBanker", "value": 7074, "depth": 3, "x": 935.4189407070668, "y": 0, "dy": 144.47383717481824, "dx": 24.581059292933215 } ], "depth": 2, "value": 7074, "x": 935.4189407070668, "y": 0, "dy": 144.47383717481824, "dx": 24.58105929293322 }, { "name": "cluster", "children": [ { "name": "MergeEdge", "value": 743, "depth": 3, "x": 928.3490551047271, "y": 91.714276108648, "dy": 52.75956106617026, "dx": 7.069885602339685 }, { "name": "CommunityStructure", "value": 3812, "depth": 3, "x": 854.6052954571732, "y": 118.52294081556136, "dx": 73.7437596475539, "dy": 25.950896359256888 }, { "name": "AgglomerativeCluster", "value": 3938, "depth": 3, "x": 854.6052954571732, "y": 91.714276108648, "dx": 73.7437596475539, "dy": 26.808664706913355 }, { "name": "HierarchicalCluster", "value": 6714, "depth": 3, "x": 790.7194112928278, "y": 91.714276108648, "dx": 63.88588416434541, "dy": 52.75956106617025 } ], "depth": 2, "value": 15207, "x": 790.7194112928278, "y": 91.714276108648, "dx": 144.699529414239, "dy": 52.75956106617026 }, { "name": "graph", "children": [ { "name": "SpanningTree", "value": 3416, "depth": 3, "x": 866.0058621180006, "y": 67.00834067870228, "dx": 69.4130785890662, "dy": 24.705935429945708 }, { "name": "BetweennessCentrality", "value": 3534, "depth": 3, "x": 908.9423276759, "y": 0, "dy": 67.00834067870228, "dx": 26.476613031166863 }, { "name": "LinkDistance", "value": 5731, "depth": 3, "x": 866.0058621180006, "y": 0, "dy": 67.00834067870228, "dx": 42.936465557899446 }, { "name": "ShortestPaths", "value": 5914, "depth": 3, "x": 790.7194112928278, "y": 52.27860438358298, "dx": 75.2864508251728, "dy": 39.43567172506501 }, { "name": "MaxFlowMinCut", "value": 7840, "depth": 3, "x": 790.7194112928278, "y": 0, "dx": 75.2864508251728, "dy": 52.27860438358298 } ], "depth": 2, "value": 26435, "x": 790.7194112928278, "y": 0, "dx": 144.699529414239, "dy": 91.714276108648 } ], "depth": 1, "value": 48716, "x": 790.7194112928278, "y": 0, "dy": 144.47383717481824, "dx": 169.28058870717223 }, { "name": "query", "children": [ { "name": "Count", "value": 781, "depth": 2, "x": 765.2427237575578, "y": 484.6102055322057, "dx": 25.476687535269935, "dy": 15.389794467794331 }, { "name": "Sum", "value": 791, "depth": 2, "x": 778.3864493341995, "y": 452.4118391296756, "dy": 32.19836640253008, "dx": 12.332961958628175 }, { "name": "Minimum", "value": 843, "depth": 2, "x": 765.2427237575578, "y": 452.4118391296756, "dx": 13.143725576641708, "dy": 32.19836640253008 }, { "name": "Maximum", "value": 843, "depth": 2, "x": 737.1075992620857, "y": 484.95807288575804, "dy": 15.041927114241957, "dx": 28.13512449547203 }, { "name": "Average", "value": 891, "depth": 2, "x": 737.1075992620857, "y": 469.0596659358296, "dx": 28.13512449547203, "dy": 15.8984069499284 }, { "name": "Distinct", "value": 933, "depth": 2, "x": 737.1075992620857, "y": 452.4118391296756, "dx": 28.13512449547203, "dy": 16.647826806153983 }, { "name": "Or", "value": 970, "depth": 2, "x": 773.933272600181, "y": 423.40197640313784, "dy": 29.009862726537786, "dx": 16.78613869264666 }, { "name": "And", "value": 1027, "depth": 2, "x": 756.1607319431209, "y": 423.40197640313784, "dy": 29.009862726537786, "dx": 17.772540657060038 }, { "name": "Xor", "value": 1101, "depth": 2, "x": 737.1075992620857, "y": 423.40197640313784, "dy": 29.009862726537786, "dx": 19.053132681035155 }, { "name": "Variable", "value": 1124, "depth": 2, "x": 701.1522935407348, "y": 484.3062015087727, "dx": 35.95530572135092, "dy": 15.693798491227312 }, { "name": "Literal", "value": 1214, "depth": 2, "x": 701.1522935407348, "y": 467.35578214191327, "dx": 35.95530572135092, "dy": 16.950419366859403 }, { "name": "Not", "value": 1554, "depth": 2, "x": 701.1522935407348, "y": 445.65812835599934, "dx": 35.95530572135092, "dy": 21.697653785913932 }, { "name": "Range", "value": 1594, "depth": 2, "x": 701.1522935407348, "y": 423.40197640313784, "dx": 35.95530572135092, "dy": 22.256151952861526 }, { "name": "AggregateExpression", "value": 1616, "depth": 2, "x": 664.9020573131023, "y": 477.6202483940464, "dx": 36.250236227632506, "dy": 22.379751605953572 }, { "name": "Variance", "value": 1876, "depth": 2, "x": 664.9020573131023, "y": 451.63979417822407, "dx": 36.250236227632506, "dy": 25.98045421582236 }, { "name": "IsA", "value": 2039, "depth": 2, "x": 664.9020573131023, "y": 423.40197640313784, "dx": 36.250236227632506, "dy": 28.237817775086242 }, { "name": "If", "value": 2732, "depth": 2, "x": 763.1811152607328, "y": 373.5975001549723, "dy": 49.80447624816554, "dx": 27.53829603209499 }, { "name": "BinaryExpression", "value": 2893, "depth": 2, "x": 734.0199547845795, "y": 373.5975001549723, "dy": 49.80447624816554, "dx": 29.161160476153302 }, { "name": "Fn", "value": 3240, "depth": 2, "x": 701.3610678358284, "y": 373.5975001549723, "dy": 49.80447624816554, "dx": 32.65888694875102 }, { "name": "ExpressionIterator", "value": 3617, "depth": 2, "x": 664.9020573131023, "y": 373.5975001549723, "dy": 49.80447624816554, "dx": 36.45901052272607 }, { "name": "CompositeExpression", "value": 3677, "depth": 2, "x": 603.5562178115133, "y": 469.9092326861215, "dx": 61.34583950158902, "dy": 30.090767313878473 }, { "name": "Match", "value": 3748, "depth": 2, "x": 603.5562178115133, "y": 439.23743614208655, "dx": 61.34583950158902, "dy": 30.671796544034954 }, { "name": "Arithmetic", "value": 3891, "depth": 2, "x": 603.5562178115133, "y": 407.39539762745477, "dx": 61.34583950158902, "dy": 31.842038514631806 }, { "name": "StringUtil", "value": 4130, "depth": 2, "x": 603.5562178115133, "y": 373.5975001549723, "dx": 61.34583950158902, "dy": 33.79789747248249 }, { "name": "DateUtil", "value": 4141, "depth": 2, "x": 546.4679686210536, "y": 463.5847535927188, "dx": 57.088249190459706, "dy": 36.41524640728118 }, { "name": "Comparison", "value": 5103, "depth": 2, "x": 546.4679686210536, "y": 418.7098435670352, "dx": 57.088249190459706, "dy": 44.874910025683626 }, { "name": "Expression", "value": 5130, "depth": 2, "x": 546.4679686210536, "y": 373.5975001549723, "dx": 57.088249190459706, "dy": 45.112343412062906 }, { "name": "Query", "value": 13896, "depth": 2, "x": 434.38054906816967, "y": 437.76170583776826, "dx": 112.08741955288392, "dy": 62.23829416223174 }, { "name": "methods", "children": [ { "name": "_", "value": 264, "depth": 3, "x": 539.1241407695699, "y": 419.71465733564946, "dy": 18.047048502118777, "dx": 7.343827851483715 }, { "name": "count", "value": 277, "depth": 3, "x": 531.4186850314601, "y": 419.71465733564946, "dy": 18.047048502118777, "dx": 7.705455738109806 }, { "name": "sum", "value": 280, "depth": 3, "x": 515.7574157875763, "y": 428.7862643091834, "dx": 15.661269243883828, "dy": 8.975441528584827 }, { "name": "min", "value": 283, "depth": 3, "x": 515.7574157875763, "y": 419.71465733564946, "dx": 15.661269243883828, "dy": 9.07160697353395 }, { "name": "max", "value": 283, "depth": 3, "x": 536.3855017395291, "y": 405.62357417548066, "dy": 14.09108316016883, "dx": 10.082466881524462 }, { "name": "average", "value": 287, "depth": 3, "x": 526.1605264921881, "y": 405.62357417548066, "dy": 14.09108316016883, "dx": 10.224975247341066 }, { "name": "distinct", "value": 292, "depth": 3, "x": 515.7574157875763, "y": 405.62357417548066, "dy": 14.09108316016883, "dx": 10.403110704611816 }, { "name": "select", "value": 296, "depth": 3, "x": 501.6674266442413, "y": 427.21526795302645, "dx": 14.08998914333498, "dy": 10.546437884741806 }, { "name": "where", "value": 299, "depth": 3, "x": 501.6674266442413, "y": 416.56194049512845, "dx": 14.08998914333498, "dy": 10.653327457897998 }, { "name": "update", "value": 307, "depth": 3, "x": 501.6674266442413, "y": 405.62357417548066, "dx": 14.08998914333498, "dy": 10.938366319647775 }, { "name": "orderby", "value": 307, "depth": 3, "x": 535.8472995964347, "y": 391.11210956506835, "dy": 14.511464610412292, "dx": 10.620669024618943 }, { "name": "or", "value": 323, "depth": 3, "x": 524.6731103620638, "y": 391.11210956506835, "dy": 14.511464610412292, "dx": 11.17418923437095 }, { "name": "and", "value": 330, "depth": 3, "x": 513.2567560359263, "y": 391.11210956506835, "dy": 14.511464610412292, "dx": 11.416354326137503 }, { "name": "variance", "value": 335, "depth": 3, "x": 501.6674266442413, "y": 391.11210956506835, "dy": 14.511464610412292, "dx": 11.589329391685041 }, { "name": "xor", "value": 354, "depth": 3, "x": 536.3212047952113, "y": 373.5975001549723, "dy": 17.51460941009607, "dx": 10.1467638258423 }, { "name": "stddev", "value": 363, "depth": 3, "x": 525.9164723975256, "y": 373.5975001549723, "dy": 17.51460941009607, "dx": 10.404732397685779 }, { "name": "not", "value": 386, "depth": 3, "x": 514.8524869829065, "y": 373.5975001549723, "dy": 17.51460941009607, "dx": 11.063985414619038 }, { "name": "fn", "value": 460, "depth": 3, "x": 501.6674266442413, "y": 373.5975001549723, "dy": 17.51460941009607, "dx": 13.185060338665174 }, { "name": "isa", "value": 461, "depth": 3, "x": 479.49405326626606, "y": 427.32426800439885, "dx": 22.173373377975224, "dy": 10.437437833369415 }, { "name": "mod", "value": 591, "depth": 3, "x": 479.49405326626606, "y": 413.9435179837452, "dx": 22.173373377975224, "dy": 13.380750020653641 }, { "name": "add", "value": 593, "depth": 3, "x": 479.49405326626606, "y": 400.51748623713337, "dx": 22.173373377975224, "dy": 13.426031746611859 }, { "name": "eq", "value": 594, "depth": 3, "x": 479.49405326626606, "y": 387.0688136275424, "dx": 22.173373377975224, "dy": 13.448672609590966 }, { "name": "div", "value": 595, "depth": 3, "x": 479.49405326626606, "y": 373.5975001549723, "dx": 22.173373377975224, "dy": 13.471313472570078 }, { "name": "lt", "value": 597, "depth": 3, "x": 456.0062385588978, "y": 425.0015356869924, "dx": 23.48781470736825, "dy": 12.760170150775878 }, { "name": "neq", "value": 599, "depth": 3, "x": 456.0062385588978, "y": 412.1986178975204, "dx": 23.48781470736825, "dy": 12.802917789471946 }, { "name": "sub", "value": 600, "depth": 3, "x": 456.0062385588978, "y": 399.37432628870044, "dx": 23.48781470736825, "dy": 12.82429160881998 }, { "name": "mul", "value": 603, "depth": 3, "x": 456.0062385588978, "y": 386.48591322183637, "dx": 23.48781470736825, "dy": 12.888413066864079 }, { "name": "gt", "value": 603, "depth": 3, "x": 456.0062385588978, "y": 373.5975001549723, "dx": 23.48781470736825, "dy": 12.888413066864079 }, { "name": "lte", "value": 619, "depth": 3, "x": 434.38054906816967, "y": 423.39208090374126, "dx": 21.625689490728124, "dy": 14.369624934027001 }, { "name": "gte", "value": 625, "depth": 3, "x": 434.38054906816967, "y": 408.8831704291582, "dx": 21.625689490728124, "dy": 14.508910474583027 }, { "name": "iff", "value": 748, "depth": 3, "x": 434.38054906816967, "y": 391.51890637317723, "dx": 21.625689490728124, "dy": 17.364264055980968 }, { "name": "range", "value": 772, "depth": 3, "x": 434.38054906816967, "y": 373.5975001549723, "dx": 21.625689490728124, "dy": 17.921406218204954 } ], "depth": 2, "value": 14326, "x": 434.38054906816967, "y": 373.5975001549723, "dx": 112.08741955288392, "dy": 64.16420568279597 } ], "depth": 1, "value": 89721, "x": 434.38054906816967, "y": 373.5975001549723, "dx": 356.33886222465804, "dy": 126.40249984502773 }, { "name": "animate", "children": [ { "name": "Pause", "value": 449, "depth": 2, "x": 769.2755214127112, "y": 363.0859317899207, "dx": 21.443889880116515, "dy": 10.511568365051588 }, { "name": "ISchedulable", "value": 1041, "depth": 2, "x": 769.2755214127112, "y": 338.715012707474, "dy": 24.37091908244674, "dx": 21.44388988011651 }, { "name": "TransitionEvent", "value": 1116, "depth": 2, "x": 769.2755214127112, "y": 312.58826371995184, "dy": 26.126748987522152, "dx": 21.443889880116515 }, { "name": "Parallel", "value": 5176, "depth": 2, "x": 681.1465649215188, "y": 344.1125507817075, "dx": 88.12895649119247, "dy": 29.48494937326478 }, { "name": "Sequence", "value": 5534, "depth": 2, "x": 681.1465649215188, "y": 312.58826371995184, "dx": 88.12895649119247, "dy": 31.52428706175566 }, { "name": "Scheduler", "value": 5593, "depth": 2, "x": 755.5814645148489, "y": 232.67972567074852, "dy": 79.90853804920333, "dx": 35.13794677797887 }, { "name": "FunctionSequence", "value": 5842, "depth": 2, "x": 718.8791786080094, "y": 232.67972567074852, "dy": 79.90853804920333, "dx": 36.70228590683945 }, { "name": "Tween", "value": 6006, "depth": 2, "x": 681.1465649215188, "y": 232.67972567074852, "dy": 79.90853804920333, "dx": 37.732613686490545 }, { "name": "Transition", "value": 9201, "depth": 2, "x": 587.7689963602684, "y": 324.13031298052863, "dx": 93.37756856125041, "dy": 49.467187174443666 }, { "name": "Easing", "value": 17010, "depth": 2, "x": 587.7689963602684, "y": 232.67972567074852, "dx": 93.37756856125041, "dy": 91.4505873097801 }, { "name": "Transitioner", "value": 19975, "depth": 2, "x": 434.38054906816967, "y": 308.22141911348285, "dx": 153.38844729209865, "dy": 65.37608104148944 }, { "name": "interpolate", "children": [ { "name": "DateInterpolator", "value": 1375, "depth": 3, "x": 571.0101483223688, "y": 267.03222624428435, "dy": 41.189192869198486, "dx": 16.758848037899494 }, { "name": "NumberInterpolator", "value": 1382, "depth": 3, "x": 534.3113181826485, "y": 289.3162498855744, "dx": 36.69883013972027, "dy": 18.90516922790844 }, { "name": "ObjectInterpolator", "value": 1629, "depth": 3, "x": 534.3113181826485, "y": 267.03222624428435, "dx": 36.69883013972027, "dy": 22.28402364129005 }, { "name": "PointInterpolator", "value": 1675, "depth": 3, "x": 563.2906992177004, "y": 232.67972567074852, "dy": 34.35250057353583, "dx": 24.478297142567815 }, { "name": "ArrayInterpolator", "value": 1983, "depth": 3, "x": 534.3113181826485, "y": 232.67972567074852, "dy": 34.35250057353583, "dx": 28.979381035051926 }, { "name": "RectangleInterpolator", "value": 2042, "depth": 3, "x": 492.5034796178293, "y": 283.7012890848605, "dx": 41.80783856481923, "dy": 24.52013002862236 }, { "name": "ColorInterpolator", "value": 2047, "depth": 3, "x": 492.5034796178293, "y": 259.12111956057544, "dx": 41.80783856481923, "dy": 24.580169524285033 }, { "name": "MatrixInterpolator", "value": 2202, "depth": 3, "x": 492.5034796178293, "y": 232.67972567074852, "dx": 41.80783856481923, "dy": 26.441393889826895 }, { "name": "Interpolator", "value": 8746, "depth": 3, "x": 434.38054906816967, "y": 232.67972567074852, "dx": 58.12293054965967, "dy": 75.54169344273431 } ], "depth": 2, "value": 23081, "x": 434.38054906816967, "y": 232.67972567074852, "dx": 153.38844729209865, "dy": 75.54169344273431 } ], "depth": 1, "value": 100024, "x": 434.38054906816967, "y": 232.67972567074852, "dx": 356.33886222465804, "dy": 140.91777448422377 }, { "name": "util", "children": [ { "name": "IEvaluable", "value": 335, "depth": 2, "x": 771.0580345099646, "y": 224.1259938958484, "dx": 19.661376782863037, "dy": 8.553731774900085 }, { "name": "IPredicate", "value": 383, "depth": 2, "x": 771.0580345099646, "y": 214.346652792008, "dx": 19.661376782863037, "dy": 9.779341103840407 }, { "name": "IValueProxy", "value": 874, "depth": 2, "x": 771.0580345099646, "y": 192.03034959421032, "dy": 22.31630319779769, "dx": 19.661376782863037 }, { "name": "Orientation", "value": 1486, "depth": 2, "x": 724.0041114303747, "y": 216.8254020881407, "dx": 47.05392307958997, "dy": 15.854323582607805 }, { "name": "Filter", "value": 2324, "depth": 2, "x": 724.0041114303747, "y": 192.03034959421032, "dx": 47.05392307958997, "dy": 24.795052493930374 }, { "name": "Property", "value": 5559, "depth": 2, "x": 760.1094449726414, "y": 100.85896111895399, "dy": 91.17138847525634, "dx": 30.609966320186228 }, { "name": "Stats", "value": 6557, "depth": 2, "x": 724.0041114303747, "y": 100.85896111895399, "dy": 91.17138847525634, "dx": 36.105333542266784 }, { "name": "Sort", "value": 6887, "depth": 2, "x": 635.0326058140586, "y": 193.81962784230024, "dx": 88.97150561631608, "dy": 38.86009782844826 }, { "name": "Dates", "value": 8217, "depth": 2, "x": 635.0326058140586, "y": 147.4549663269293, "dx": 88.97150561631608, "dy": 46.36466151537093 }, { "name": "Arrays", "value": 8258, "depth": 2, "x": 635.0326058140586, "y": 100.85896111895399, "dx": 88.97150561631608, "dy": 46.59600520797532 }, { "name": "math", "children": [ { "name": "IMatrix", "value": 2815, "depth": 3, "x": 612.8400574749467, "y": 169.00076430717422, "dy": 63.678961363574274, "dx": 22.192548339111895 }, { "name": "DenseMatrix", "value": 3165, "depth": 3, "x": 561.3517685929787, "y": 201.82014632367873, "dx": 51.48828888196795, "dy": 30.859579347069758 }, { "name": "SparseMatrix", "value": 3366, "depth": 3, "x": 561.3517685929787, "y": 169.00076430717422, "dx": 51.48828888196795, "dy": 32.81938201650452 } ], "depth": 2, "value": 9346, "x": 561.3517685929787, "y": 169.00076430717422, "dx": 73.68083722107986, "dy": 63.678961363574274 }, { "name": "Colors", "value": 10001, "depth": 2, "x": 561.3517685929787, "y": 100.85896111895399, "dx": 73.68083722107986, "dy": 68.14180318822024 }, { "name": "heap", "children": [ { "name": "HeapNode", "value": 1233, "depth": 3, "x": 738.0227416618886, "y": 89.11256468373435, "dx": 52.69666963093902, "dy": 11.746396435219634 }, { "name": "FibonacciHeap", "value": 9354, "depth": 3, "x": 738.0227416618886, "y": 0, "dy": 89.11256468373435, "dx": 52.69666963093902 } ], "depth": 2, "value": 10587, "x": 738.0227416618886, "y": 0, "dy": 100.85896111895399, "dx": 52.69666963093902 }, { "name": "Geometry", "value": 10993, "depth": 2, "x": 683.3052117428452, "y": 0, "dy": 100.85896111895399, "dx": 54.717529919043415 }, { "name": "palette", "children": [ { "name": "Palette", "value": 1229, "depth": 3, "x": 670.2065089564977, "y": 53.75598572278419, "dy": 47.102975396169796, "dx": 13.098702786347506 }, { "name": "ShapePalette", "value": 2059, "depth": 3, "x": 623.8441353839903, "y": 78.56355276476695, "dx": 46.362373572507444, "dy": 22.295408354187032 }, { "name": "SizePalette", "value": 2291, "depth": 3, "x": 623.8441353839903, "y": 53.75598572278419, "dx": 46.362373572507444, "dy": 24.80756704198276 }, { "name": "ColorPalette", "value": 6367, "depth": 3, "x": 623.8441353839903, "y": 0, "dy": 53.75598572278419, "dx": 59.46107635885494 } ], "depth": 2, "value": 11946, "x": 623.8441353839903, "y": 0, "dy": 100.85896111895399, "dx": 59.46107635885496 }, { "name": "Displays", "value": 12555, "depth": 2, "x": 561.3517685929787, "y": 0, "dy": 100.85896111895399, "dx": 62.49236679101156 }, { "name": "Maths", "value": 17705, "depth": 2, "x": 434.38054906816967, "y": 162.6769296504151, "dx": 126.9712195248091, "dy": 70.00279602033342 }, { "name": "Shapes", "value": 19118, "depth": 2, "x": 434.38054906816967, "y": 87.08735301575061, "dx": 126.9712195248091, "dy": 75.5895766346645 }, { "name": "Strings", "value": 22026, "depth": 2, "x": 434.38054906816967, "y": 0, "dx": 126.9712195248091, "dy": 87.08735301575061 } ], "depth": 1, "value": 165157, "x": 434.38054906816967, "y": 0, "dx": 356.33886222465804, "dy": 232.67972567074852 }, { "name": "vis", "children": [ { "name": "events", "children": [ { "name": "VisualizationEvent", "value": 1117, "depth": 3, "x": 404.60134327999646, "y": 481.1693717921445, "dx": 29.77920578817315, "dy": 18.83062820785551 }, { "name": "TooltipEvent", "value": 1701, "depth": 3, "x": 404.60134327999646, "y": 452.4935449509965, "dy": 28.675826841147956, "dx": 29.77920578817315 }, { "name": "SelectionEvent", "value": 1880, "depth": 3, "x": 360.2918294865933, "y": 478.6997053441148, "dx": 44.30951379340315, "dy": 21.300294655885175 }, { "name": "DataEvent", "value": 2313, "depth": 3, "x": 360.2918294865933, "y": 452.4935449509965, "dx": 44.30951379340315, "dy": 26.206160393118303 } ], "depth": 2, "value": 7011, "x": 360.2918294865933, "y": 452.4935449509965, "dx": 74.0887195815763, "dy": 47.50645504900348 }, { "name": "Visualization", "value": 16540, "depth": 2, "x": 360.2918294865933, "y": 340.41869592653285, "dy": 112.07484902446366, "dx": 74.0887195815763 }, { "name": "axis", "children": [ { "name": "AxisLabel", "value": 636, "depth": 3, "x": 330.3068819807528, "y": 489.35174189974157, "dx": 29.984947505840587, "dy": 10.648258100258431 }, { "name": "AxisGridLine", "value": 652, "depth": 3, "x": 330.3068819807528, "y": 478.43560309255827, "dx": 29.984947505840587, "dy": 10.916138807183287 }, { "name": "Axes", "value": 1302, "depth": 3, "x": 299.9960111324573, "y": 478.43560309255827, "dx": 30.3108708482955, "dy": 21.564396907441733 }, { "name": "CartesianAxes", "value": 6703, "depth": 3, "x": 299.9960111324573, "y": 422.62627781434117, "dy": 55.80932527821711, "dx": 60.29581835413609 }, { "name": "Axis", "value": 24593, "depth": 3, "x": 140.4291262962074, "y": 422.62627781434117, "dx": 159.56688483624987, "dy": 77.37372218565883 } ], "depth": 2, "value": 33886, "x": 140.4291262962074, "y": 422.62627781434117, "dx": 219.86270319038596, "dy": 77.37372218565885 }, { "name": "legend", "children": [ { "name": "LegendItem", "value": 4614, "depth": 3, "x": 332.11510775450324, "y": 340.41869592653285, "dy": 82.20758188780835, "dx": 28.176721732090126 }, { "name": "LegendRange", "value": 10530, "depth": 3, "x": 267.8106257781467, "y": 340.41869592653285, "dx": 64.30448197635654, "dy": 82.20758188780832 }, { "name": "Legend", "value": 20859, "depth": 3, "x": 140.4291262962074, "y": 340.41869592653285, "dx": 127.3814994819393, "dy": 82.20758188780832 } ], "depth": 2, "value": 36003, "x": 140.4291262962074, "y": 340.41869592653285, "dx": 219.86270319038596, "dy": 82.20758188780835 }, { "name": "controls", "children": [ { "name": "IControl", "value": 763, "depth": 3, "x": 125.65764403777771, "y": 474.0686452019673, "dy": 25.931354798032714, "dx": 14.771482258429671 }, { "name": "Control", "value": 1353, "depth": 3, "x": 99.46391468567369, "y": 474.0686452019673, "dx": 26.193729352104025, "dy": 25.93135479803271 }, { "name": "AnchorControl", "value": 2138, "depth": 3, "x": 58.072788776731784, "y": 474.0686452019673, "dx": 41.3911259089419, "dy": 25.931354798032714 }, { "name": "DragControl", "value": 2649, "depth": 3, "x": 116.98345858109822, "y": 417.3476164300598, "dy": 56.721028771907484, "dx": 23.445667715109167 }, { "name": "ExpandControl", "value": 2832, "depth": 3, "x": 91.91810147683654, "y": 417.3476164300598, "dy": 56.721028771907484, "dx": 25.06535710426168 }, { "name": "ClickControl", "value": 3824, "depth": 3, "x": 58.072788776731784, "y": 417.3476164300598, "dy": 56.721028771907484, "dx": 33.84531270010475 }, { "name": "ControlList", "value": 4665, "depth": 3, "x": 0, "y": 459.67227598015154, "dx": 58.072788776731784, "dy": 40.327724019848446 }, { "name": "HoverControl", "value": 4896, "depth": 3, "x": 0, "y": 417.3476164300598, "dx": 58.072788776731784, "dy": 42.32465955009175 }, { "name": "PanZoomControl", "value": 5222, "depth": 3, "x": 106.35129286905953, "y": 340.41869592653285, "dy": 76.92892050352695, "dx": 34.07783342714785 }, { "name": "SelectionControl", "value": 7862, "depth": 3, "x": 55.045293940634295, "y": 340.41869592653285, "dy": 76.92892050352695, "dx": 51.30599892842523 }, { "name": "TooltipControl", "value": 8435, "depth": 3, "x": 0, "y": 340.41869592653285, "dy": 76.92892050352695, "dx": 55.045293940634295 } ], "depth": 2, "value": 44639, "x": 0, "y": 340.41869592653285, "dx": 140.4291262962074, "dy": 159.58130407346715 }, { "name": "data", "children": [ { "name": "EdgeSprite", "value": 3301, "depth": 3, "x": 354.82599525481953, "y": 319.58793058740207, "dx": 79.55455381335017, "dy": 20.83076533913084 }, { "name": "Tree", "value": 7147, "depth": 3, "x": 398.87559114984737, "y": 218.53253036297298, "dy": 101.05540022442906, "dx": 35.504957918322305 }, { "name": "render", "children": [ { "name": "IRenderer", "value": 353, "depth": 4, "x": 384.83795461689584, "y": 306.96368430052206, "dx": 14.037636532951549, "dy": 12.624246286879952 }, { "name": "ArrowType", "value": 698, "depth": 4, "x": 384.83795461689584, "y": 282.00129362561484, "dy": 24.96239067490723, "dx": 14.037636532951524 }, { "name": "ShapeRenderer", "value": 2247, "depth": 4, "x": 354.82599525481953, "y": 282.00129362561484, "dx": 30.011959362076293, "dy": 37.58663696178718 }, { "name": "EdgeRenderer", "value": 5569, "depth": 4, "x": 354.82599525481953, "y": 218.53253036297298, "dy": 63.468763262641886, "dx": 44.049595895027835 } ], "depth": 3, "value": 8867, "x": 354.82599525481953, "y": 218.53253036297298, "dy": 101.05540022442906, "dx": 44.04959589502784 }, { "name": "TreeBuilder", "value": 9930, "depth": 3, "x": 271.30092164462394, "y": 280.73480500261405, "dx": 83.52507361019556, "dy": 59.683890923918796 }, { "name": "DataSprite", "value": 10349, "depth": 3, "x": 271.30092164462394, "y": 218.53253036297298, "dx": 83.52507361019556, "dy": 62.202274639641075 }, { "name": "ScaleBinding", "value": 11275, "depth": 3, "x": 374.4032910455165, "y": 124.15802468832392, "dy": 94.37450567464907, "dx": 59.97725802265316 }, { "name": "NodeSprite", "value": 19382, "depth": 3, "x": 271.30092164462394, "y": 124.15802468832392, "dy": 94.37450567464907, "dx": 103.10236940089256 }, { "name": "DataList", "value": 19788, "depth": 3, "x": 354.36915197759333, "y": 0, "dy": 124.15802468832392, "dx": 80.01139709057634 }, { "name": "Data", "value": 20544, "depth": 3, "x": 271.30092164462394, "y": 0, "dy": 124.15802468832392, "dx": 83.06823033296942 } ], "depth": 2, "value": 110583, "x": 271.30092164462394, "y": 0, "dy": 340.41869592653285, "dx": 163.07962742354573 }, { "name": "operator", "children": [ { "name": "IOperator", "value": 1286, "depth": 3, "x": 246.54356860292762, "y": 314.3414630510892, "dy": 26.07723287544365, "dx": 24.75735304169631 }, { "name": "SortOperator", "value": 2023, "depth": 3, "x": 207.5979035925456, "y": 314.3414630510892, "dx": 38.94566501038203, "dy": 26.07723287544365 }, { "name": "Operator", "value": 2490, "depth": 3, "x": 240.02099363246163, "y": 274.3784385991779, "dy": 39.963024451911274, "dx": 31.279928012162298 }, { "name": "OperatorSwitch", "value": 2581, "depth": 3, "x": 207.5979035925456, "y": 274.3784385991779, "dy": 39.963024451911274, "dx": 32.423090039916026 }, { "name": "OperatorSequence", "value": 4190, "depth": 3, "x": 243.01996745536687, "y": 200.00040176677038, "dy": 74.37803683240755, "dx": 28.280954189257063 }, { "name": "OperatorList", "value": 5248, "depth": 3, "x": 207.5979035925456, "y": 200.00040176677038, "dy": 74.37803683240755, "dx": 35.422063862821254 }, { "name": "filter", "children": [ { "name": "GraphDistanceFilter", "value": 3165, "depth": 4, "x": 182.75379114222343, "y": 276.4636265162213, "dy": 63.95506941031152, "dx": 24.84411245032217 }, { "name": "VisibilityFilter", "value": 3509, "depth": 4, "x": 114.24212811966042, "y": 314.70623733799215, "dx": 68.51166302256301, "dy": 25.71245858854069 }, { "name": "FisheyeTreeFilter", "value": 5219, "depth": 4, "x": 114.24212811966042, "y": 276.4636265162213, "dx": 68.51166302256301, "dy": 38.24261082177084 } ], "depth": 3, "value": 11893, "x": 114.24212811966042, "y": 276.4636265162213, "dx": 93.35577547288518, "dy": 63.95506941031152 }, { "name": "distortion", "children": [ { "name": "FisheyeDistortion", "value": 3444, "depth": 4, "x": 184.98609610055485, "y": 200.00040176677038, "dy": 76.46322474945093, "dx": 22.611807491990756 }, { "name": "BifocalDistortion", "value": 4461, "depth": 4, "x": 114.24212811966042, "y": 244.80678701670385, "dx": 70.74396798089442, "dy": 31.656839499517456 }, { "name": "Distortion", "value": 6314, "depth": 4, "x": 114.24212811966042, "y": 200.00040176677038, "dx": 70.74396798089442, "dy": 44.80638524993348 } ], "depth": 3, "value": 14219, "x": 114.24212811966042, "y": 200.00040176677038, "dx": 93.35577547288518, "dy": 76.46322474945093 }, { "name": "encoder", "children": [ { "name": "ShapeEncoder", "value": 1690, "depth": 4, "x": 62.868830390345444, "y": 323.90386976672335, "dx": 51.37329772931498, "dy": 16.514826159809445 }, { "name": "SizeEncoder", "value": 1830, "depth": 4, "x": 95.47328506822373, "y": 274.9554885628857, "dy": 48.94838120383767, "dx": 18.76884305143669 }, { "name": "ColorEncoder", "value": 3179, "depth": 4, "x": 62.868830390345444, "y": 274.9554885628857, "dy": 48.94838120383767, "dx": 32.60445467787828 }, { "name": "Encoder", "value": 4060, "depth": 4, "x": 0, "y": 307.99851760298964, "dx": 62.868830390345444, "dy": 32.42017832354321 }, { "name": "PropertyEncoder", "value": 4138, "depth": 4, "x": 0, "y": 274.9554885628857, "dx": 62.868830390345444, "dy": 33.04302904010392 } ], "depth": 3, "value": 14897, "x": 0, "y": 274.9554885628857, "dx": 114.24212811966042, "dy": 65.46320736364714 }, { "name": "label", "children": [ { "name": "StackedAreaLabeler", "value": 3202, "depth": 4, "x": 66.68198555193406, "y": 241.15656053568372, "dx": 47.56014256772636, "dy": 33.79892802720198 }, { "name": "RadialLabeler", "value": 3899, "depth": 4, "x": 66.68198555193406, "y": 200.00040176677038, "dy": 41.15615876891334, "dx": 47.56014256772636 }, { "name": "Labeler", "value": 9956, "depth": 4, "x": 0, "y": 200.00040176677038, "dx": 66.68198555193406, "dy": 74.95508679611531 } ], "depth": 3, "value": 17057, "x": 0, "y": 200.00040176677038, "dx": 114.24212811966042, "dy": 74.95508679611531 }, { "name": "layout", "children": [ { "name": "RandomLayout", "value": 870, "depth": 4, "x": 262.11596860938045, "y": 152.44859103209555, "dy": 47.55181073467483, "dx": 9.18495303524349 }, { "name": "PieLayout", "value": 2728, "depth": 4, "x": 199.80609181167196, "y": 178.02118460577532, "dx": 62.309876797708505, "dy": 21.979217160995063 }, { "name": "IndentedTreeLayout", "value": 3174, "depth": 4, "x": 199.80609181167196, "y": 152.44859103209555, "dx": 62.309876797708505, "dy": 25.572593573679757 }, { "name": "BundledEdgeRouter", "value": 3727, "depth": 4, "x": 160.4585976020719, "y": 152.44859103209555, "dx": 39.347494209600065, "dy": 47.55181073467483 }, { "name": "DendrogramLayout", "value": 4853, "depth": 4, "x": 238.58484096231615, "y": 77.97989190841493, "dy": 74.46869912368062, "dx": 32.71608068230779 }, { "name": "IcicleTreeLayout", "value": 4864, "depth": 4, "x": 205.79460472931692, "y": 77.97989190841493, "dy": 74.46869912368062, "dx": 32.79023623299922 }, { "name": "AxisLayout", "value": 6725, "depth": 4, "x": 160.4585976020719, "y": 77.97989190841493, "dy": 74.46869912368062, "dx": 45.33600712724502 }, { "name": "Layout", "value": 7881, "depth": 4, "x": 93.4290462379333, "y": 140.97488996995602, "dx": 67.02955136413858, "dy": 59.02551179681434 }, { "name": "ForceDirectedLayout", "value": 8411, "depth": 4, "x": 93.4290462379333, "y": 77.97989190841493, "dx": 67.02955136413858, "dy": 62.9949980615411 }, { "name": "StackedAreaLayout", "value": 9121, "depth": 4, "x": 212.58112087063915, "y": 0, "dy": 77.97989190841493, "dx": 58.719800773984765 }, { "name": "TreeMapLayout", "value": 9191, "depth": 4, "x": 153.4106692848817, "y": 0, "dy": 77.97989190841493, "dx": 59.170451585757476 }, { "name": "CircleLayout", "value": 9317, "depth": 4, "x": 93.4290462379333, "y": 0, "dy": 77.97989190841493, "dx": 59.98162304694837 }, { "name": "CirclePackingLayout", "value": 12003, "depth": 4, "x": 0, "y": 135.50442308789167, "dx": 93.4290462379333, "dy": 64.49597867887871 }, { "name": "RadialTreeLayout", "value": 12348, "depth": 4, "x": 0, "y": 69.1546484709797, "dx": 93.4290462379333, "dy": 66.34977461691199 }, { "name": "NodeLinkTreeLayout", "value": 12870, "depth": 4, "x": 0, "y": 0, "dx": 93.4290462379333, "dy": 69.1546484709797 } ], "depth": 3, "value": 108083, "x": 0, "y": 0, "dy": 200.00040176677038, "dx": 271.30092164462394 } ], "depth": 2, "value": 183967, "x": 0, "y": 0, "dy": 340.41869592653285, "dx": 271.30092164462394 } ], "depth": 1, "value": 432629, "x": 0, "y": 0, "dx": 434.38054906816967, "dy": 500 } ], "depth": 0, "value": 956129, "y": 0, "x": 0, "dx": 960, "dy": 500 } d3-hierarchy-1.1.8/test/data/flare.csv000066400000000000000000000174651334007264500175220ustar00rootroot00000000000000id,value flare, flare.analytics, flare.analytics.cluster, flare.analytics.cluster.AgglomerativeCluster,3938 flare.analytics.cluster.CommunityStructure,3812 flare.analytics.cluster.HierarchicalCluster,6714 flare.analytics.cluster.MergeEdge,743 flare.analytics.graph, flare.analytics.graph.BetweennessCentrality,3534 flare.analytics.graph.LinkDistance,5731 flare.analytics.graph.MaxFlowMinCut,7840 flare.analytics.graph.ShortestPaths,5914 flare.analytics.graph.SpanningTree,3416 flare.analytics.optimization, flare.analytics.optimization.AspectRatioBanker,7074 flare.animate, flare.animate.Easing,17010 flare.animate.FunctionSequence,5842 flare.animate.interpolate, flare.animate.interpolate.ArrayInterpolator,1983 flare.animate.interpolate.ColorInterpolator,2047 flare.animate.interpolate.DateInterpolator,1375 flare.animate.interpolate.Interpolator,8746 flare.animate.interpolate.MatrixInterpolator,2202 flare.animate.interpolate.NumberInterpolator,1382 flare.animate.interpolate.ObjectInterpolator,1629 flare.animate.interpolate.PointInterpolator,1675 flare.animate.interpolate.RectangleInterpolator,2042 flare.animate.ISchedulable,1041 flare.animate.Parallel,5176 flare.animate.Pause,449 flare.animate.Scheduler,5593 flare.animate.Sequence,5534 flare.animate.Transition,9201 flare.animate.Transitioner,19975 flare.animate.TransitionEvent,1116 flare.animate.Tween,6006 flare.data, flare.data.converters, flare.data.converters.Converters,721 flare.data.converters.DelimitedTextConverter,4294 flare.data.converters.GraphMLConverter,9800 flare.data.converters.IDataConverter,1314 flare.data.converters.JSONConverter,2220 flare.data.DataField,1759 flare.data.DataSchema,2165 flare.data.DataSet,586 flare.data.DataSource,3331 flare.data.DataTable,772 flare.data.DataUtil,3322 flare.display, flare.display.DirtySprite,8833 flare.display.LineSprite,1732 flare.display.RectSprite,3623 flare.display.TextSprite,10066 flare.flex, flare.flex.FlareVis,4116 flare.physics, flare.physics.DragForce,1082 flare.physics.GravityForce,1336 flare.physics.IForce,319 flare.physics.NBodyForce,10498 flare.physics.Particle,2822 flare.physics.Simulation,9983 flare.physics.Spring,2213 flare.physics.SpringForce,1681 flare.query, flare.query.AggregateExpression,1616 flare.query.And,1027 flare.query.Arithmetic,3891 flare.query.Average,891 flare.query.BinaryExpression,2893 flare.query.Comparison,5103 flare.query.CompositeExpression,3677 flare.query.Count,781 flare.query.DateUtil,4141 flare.query.Distinct,933 flare.query.Expression,5130 flare.query.ExpressionIterator,3617 flare.query.Fn,3240 flare.query.If,2732 flare.query.IsA,2039 flare.query.Literal,1214 flare.query.Match,3748 flare.query.Maximum,843 flare.query.methods, flare.query.methods.add,593 flare.query.methods.and,330 flare.query.methods.average,287 flare.query.methods.count,277 flare.query.methods.distinct,292 flare.query.methods.div,595 flare.query.methods.eq,594 flare.query.methods.fn,460 flare.query.methods.gt,603 flare.query.methods.gte,625 flare.query.methods.iff,748 flare.query.methods.isa,461 flare.query.methods.lt,597 flare.query.methods.lte,619 flare.query.methods.max,283 flare.query.methods.min,283 flare.query.methods.mod,591 flare.query.methods.mul,603 flare.query.methods.neq,599 flare.query.methods.not,386 flare.query.methods.or,323 flare.query.methods.orderby,307 flare.query.methods.range,772 flare.query.methods.select,296 flare.query.methods.stddev,363 flare.query.methods.sub,600 flare.query.methods.sum,280 flare.query.methods.update,307 flare.query.methods.variance,335 flare.query.methods.where,299 flare.query.methods.xor,354 flare.query.methods._,264 flare.query.Minimum,843 flare.query.Not,1554 flare.query.Or,970 flare.query.Query,13896 flare.query.Range,1594 flare.query.StringUtil,4130 flare.query.Sum,791 flare.query.Variable,1124 flare.query.Variance,1876 flare.query.Xor,1101 flare.scale, flare.scale.IScaleMap,2105 flare.scale.LinearScale,1316 flare.scale.LogScale,3151 flare.scale.OrdinalScale,3770 flare.scale.QuantileScale,2435 flare.scale.QuantitativeScale,4839 flare.scale.RootScale,1756 flare.scale.Scale,4268 flare.scale.ScaleType,1821 flare.scale.TimeScale,5833 flare.util, flare.util.Arrays,8258 flare.util.Colors,10001 flare.util.Dates,8217 flare.util.Displays,12555 flare.util.Filter,2324 flare.util.Geometry,10993 flare.util.heap, flare.util.heap.FibonacciHeap,9354 flare.util.heap.HeapNode,1233 flare.util.IEvaluable,335 flare.util.IPredicate,383 flare.util.IValueProxy,874 flare.util.math, flare.util.math.DenseMatrix,3165 flare.util.math.IMatrix,2815 flare.util.math.SparseMatrix,3366 flare.util.Maths,17705 flare.util.Orientation,1486 flare.util.palette, flare.util.palette.ColorPalette,6367 flare.util.palette.Palette,1229 flare.util.palette.ShapePalette,2059 flare.util.palette.SizePalette,2291 flare.util.Property,5559 flare.util.Shapes,19118 flare.util.Sort,6887 flare.util.Stats,6557 flare.util.Strings,22026 flare.vis, flare.vis.axis, flare.vis.axis.Axes,1302 flare.vis.axis.Axis,24593 flare.vis.axis.AxisGridLine,652 flare.vis.axis.AxisLabel,636 flare.vis.axis.CartesianAxes,6703 flare.vis.controls, flare.vis.controls.AnchorControl,2138 flare.vis.controls.ClickControl,3824 flare.vis.controls.Control,1353 flare.vis.controls.ControlList,4665 flare.vis.controls.DragControl,2649 flare.vis.controls.ExpandControl,2832 flare.vis.controls.HoverControl,4896 flare.vis.controls.IControl,763 flare.vis.controls.PanZoomControl,5222 flare.vis.controls.SelectionControl,7862 flare.vis.controls.TooltipControl,8435 flare.vis.data, flare.vis.data.Data,20544 flare.vis.data.DataList,19788 flare.vis.data.DataSprite,10349 flare.vis.data.EdgeSprite,3301 flare.vis.data.NodeSprite,19382 flare.vis.data.render, flare.vis.data.render.ArrowType,698 flare.vis.data.render.EdgeRenderer,5569 flare.vis.data.render.IRenderer,353 flare.vis.data.render.ShapeRenderer,2247 flare.vis.data.ScaleBinding,11275 flare.vis.data.Tree,7147 flare.vis.data.TreeBuilder,9930 flare.vis.events, flare.vis.events.DataEvent,2313 flare.vis.events.SelectionEvent,1880 flare.vis.events.TooltipEvent,1701 flare.vis.events.VisualizationEvent,1117 flare.vis.legend, flare.vis.legend.Legend,20859 flare.vis.legend.LegendItem,4614 flare.vis.legend.LegendRange,10530 flare.vis.operator, flare.vis.operator.distortion, flare.vis.operator.distortion.BifocalDistortion,4461 flare.vis.operator.distortion.Distortion,6314 flare.vis.operator.distortion.FisheyeDistortion,3444 flare.vis.operator.encoder, flare.vis.operator.encoder.ColorEncoder,3179 flare.vis.operator.encoder.Encoder,4060 flare.vis.operator.encoder.PropertyEncoder,4138 flare.vis.operator.encoder.ShapeEncoder,1690 flare.vis.operator.encoder.SizeEncoder,1830 flare.vis.operator.filter, flare.vis.operator.filter.FisheyeTreeFilter,5219 flare.vis.operator.filter.GraphDistanceFilter,3165 flare.vis.operator.filter.VisibilityFilter,3509 flare.vis.operator.IOperator,1286 flare.vis.operator.label, flare.vis.operator.label.Labeler,9956 flare.vis.operator.label.RadialLabeler,3899 flare.vis.operator.label.StackedAreaLabeler,3202 flare.vis.operator.layout, flare.vis.operator.layout.AxisLayout,6725 flare.vis.operator.layout.BundledEdgeRouter,3727 flare.vis.operator.layout.CircleLayout,9317 flare.vis.operator.layout.CirclePackingLayout,12003 flare.vis.operator.layout.DendrogramLayout,4853 flare.vis.operator.layout.ForceDirectedLayout,8411 flare.vis.operator.layout.IcicleTreeLayout,4864 flare.vis.operator.layout.IndentedTreeLayout,3174 flare.vis.operator.layout.Layout,7881 flare.vis.operator.layout.NodeLinkTreeLayout,12870 flare.vis.operator.layout.PieLayout,2728 flare.vis.operator.layout.RadialTreeLayout,12348 flare.vis.operator.layout.RandomLayout,870 flare.vis.operator.layout.StackedAreaLayout,9121 flare.vis.operator.layout.TreeMapLayout,9191 flare.vis.operator.Operator,2490 flare.vis.operator.OperatorList,5248 flare.vis.operator.OperatorSequence,4190 flare.vis.operator.OperatorSwitch,2581 flare.vis.operator.SortOperator,2023 flare.vis.Visualization,16540 d3-hierarchy-1.1.8/test/data/flare.json000066400000000000000000000265621334007264500176760ustar00rootroot00000000000000{ "name": "flare", "children": [ { "name": "analytics", "children": [ { "name": "cluster", "children": [ {"name": "AgglomerativeCluster", "value": 3938}, {"name": "CommunityStructure", "value": 3812}, {"name": "HierarchicalCluster", "value": 6714}, {"name": "MergeEdge", "value": 743} ] }, { "name": "graph", "children": [ {"name": "BetweennessCentrality", "value": 3534}, {"name": "LinkDistance", "value": 5731}, {"name": "MaxFlowMinCut", "value": 7840}, {"name": "ShortestPaths", "value": 5914}, {"name": "SpanningTree", "value": 3416} ] }, { "name": "optimization", "children": [ {"name": "AspectRatioBanker", "value": 7074} ] } ] }, { "name": "animate", "children": [ {"name": "Easing", "value": 17010}, {"name": "FunctionSequence", "value": 5842}, { "name": "interpolate", "children": [ {"name": "ArrayInterpolator", "value": 1983}, {"name": "ColorInterpolator", "value": 2047}, {"name": "DateInterpolator", "value": 1375}, {"name": "Interpolator", "value": 8746}, {"name": "MatrixInterpolator", "value": 2202}, {"name": "NumberInterpolator", "value": 1382}, {"name": "ObjectInterpolator", "value": 1629}, {"name": "PointInterpolator", "value": 1675}, {"name": "RectangleInterpolator", "value": 2042} ] }, {"name": "ISchedulable", "value": 1041}, {"name": "Parallel", "value": 5176}, {"name": "Pause", "value": 449}, {"name": "Scheduler", "value": 5593}, {"name": "Sequence", "value": 5534}, {"name": "Transition", "value": 9201}, {"name": "Transitioner", "value": 19975}, {"name": "TransitionEvent", "value": 1116}, {"name": "Tween", "value": 6006} ] }, { "name": "data", "children": [ { "name": "converters", "children": [ {"name": "Converters", "value": 721}, {"name": "DelimitedTextConverter", "value": 4294}, {"name": "GraphMLConverter", "value": 9800}, {"name": "IDataConverter", "value": 1314}, {"name": "JSONConverter", "value": 2220} ] }, {"name": "DataField", "value": 1759}, {"name": "DataSchema", "value": 2165}, {"name": "DataSet", "value": 586}, {"name": "DataSource", "value": 3331}, {"name": "DataTable", "value": 772}, {"name": "DataUtil", "value": 3322} ] }, { "name": "display", "children": [ {"name": "DirtySprite", "value": 8833}, {"name": "LineSprite", "value": 1732}, {"name": "RectSprite", "value": 3623}, {"name": "TextSprite", "value": 10066} ] }, { "name": "flex", "children": [ {"name": "FlareVis", "value": 4116} ] }, { "name": "physics", "children": [ {"name": "DragForce", "value": 1082}, {"name": "GravityForce", "value": 1336}, {"name": "IForce", "value": 319}, {"name": "NBodyForce", "value": 10498}, {"name": "Particle", "value": 2822}, {"name": "Simulation", "value": 9983}, {"name": "Spring", "value": 2213}, {"name": "SpringForce", "value": 1681} ] }, { "name": "query", "children": [ {"name": "AggregateExpression", "value": 1616}, {"name": "And", "value": 1027}, {"name": "Arithmetic", "value": 3891}, {"name": "Average", "value": 891}, {"name": "BinaryExpression", "value": 2893}, {"name": "Comparison", "value": 5103}, {"name": "CompositeExpression", "value": 3677}, {"name": "Count", "value": 781}, {"name": "DateUtil", "value": 4141}, {"name": "Distinct", "value": 933}, {"name": "Expression", "value": 5130}, {"name": "ExpressionIterator", "value": 3617}, {"name": "Fn", "value": 3240}, {"name": "If", "value": 2732}, {"name": "IsA", "value": 2039}, {"name": "Literal", "value": 1214}, {"name": "Match", "value": 3748}, {"name": "Maximum", "value": 843}, { "name": "methods", "children": [ {"name": "add", "value": 593}, {"name": "and", "value": 330}, {"name": "average", "value": 287}, {"name": "count", "value": 277}, {"name": "distinct", "value": 292}, {"name": "div", "value": 595}, {"name": "eq", "value": 594}, {"name": "fn", "value": 460}, {"name": "gt", "value": 603}, {"name": "gte", "value": 625}, {"name": "iff", "value": 748}, {"name": "isa", "value": 461}, {"name": "lt", "value": 597}, {"name": "lte", "value": 619}, {"name": "max", "value": 283}, {"name": "min", "value": 283}, {"name": "mod", "value": 591}, {"name": "mul", "value": 603}, {"name": "neq", "value": 599}, {"name": "not", "value": 386}, {"name": "or", "value": 323}, {"name": "orderby", "value": 307}, {"name": "range", "value": 772}, {"name": "select", "value": 296}, {"name": "stddev", "value": 363}, {"name": "sub", "value": 600}, {"name": "sum", "value": 280}, {"name": "update", "value": 307}, {"name": "variance", "value": 335}, {"name": "where", "value": 299}, {"name": "xor", "value": 354}, {"name": "_", "value": 264} ] }, {"name": "Minimum", "value": 843}, {"name": "Not", "value": 1554}, {"name": "Or", "value": 970}, {"name": "Query", "value": 13896}, {"name": "Range", "value": 1594}, {"name": "StringUtil", "value": 4130}, {"name": "Sum", "value": 791}, {"name": "Variable", "value": 1124}, {"name": "Variance", "value": 1876}, {"name": "Xor", "value": 1101} ] }, { "name": "scale", "children": [ {"name": "IScaleMap", "value": 2105}, {"name": "LinearScale", "value": 1316}, {"name": "LogScale", "value": 3151}, {"name": "OrdinalScale", "value": 3770}, {"name": "QuantileScale", "value": 2435}, {"name": "QuantitativeScale", "value": 4839}, {"name": "RootScale", "value": 1756}, {"name": "Scale", "value": 4268}, {"name": "ScaleType", "value": 1821}, {"name": "TimeScale", "value": 5833} ] }, { "name": "util", "children": [ {"name": "Arrays", "value": 8258}, {"name": "Colors", "value": 10001}, {"name": "Dates", "value": 8217}, {"name": "Displays", "value": 12555}, {"name": "Filter", "value": 2324}, {"name": "Geometry", "value": 10993}, { "name": "heap", "children": [ {"name": "FibonacciHeap", "value": 9354}, {"name": "HeapNode", "value": 1233} ] }, {"name": "IEvaluable", "value": 335}, {"name": "IPredicate", "value": 383}, {"name": "IValueProxy", "value": 874}, { "name": "math", "children": [ {"name": "DenseMatrix", "value": 3165}, {"name": "IMatrix", "value": 2815}, {"name": "SparseMatrix", "value": 3366} ] }, {"name": "Maths", "value": 17705}, {"name": "Orientation", "value": 1486}, { "name": "palette", "children": [ {"name": "ColorPalette", "value": 6367}, {"name": "Palette", "value": 1229}, {"name": "ShapePalette", "value": 2059}, {"name": "SizePalette", "value": 2291} ] }, {"name": "Property", "value": 5559}, {"name": "Shapes", "value": 19118}, {"name": "Sort", "value": 6887}, {"name": "Stats", "value": 6557}, {"name": "Strings", "value": 22026} ] }, { "name": "vis", "children": [ { "name": "axis", "children": [ {"name": "Axes", "value": 1302}, {"name": "Axis", "value": 24593}, {"name": "AxisGridLine", "value": 652}, {"name": "AxisLabel", "value": 636}, {"name": "CartesianAxes", "value": 6703} ] }, { "name": "controls", "children": [ {"name": "AnchorControl", "value": 2138}, {"name": "ClickControl", "value": 3824}, {"name": "Control", "value": 1353}, {"name": "ControlList", "value": 4665}, {"name": "DragControl", "value": 2649}, {"name": "ExpandControl", "value": 2832}, {"name": "HoverControl", "value": 4896}, {"name": "IControl", "value": 763}, {"name": "PanZoomControl", "value": 5222}, {"name": "SelectionControl", "value": 7862}, {"name": "TooltipControl", "value": 8435} ] }, { "name": "data", "children": [ {"name": "Data", "value": 20544}, {"name": "DataList", "value": 19788}, {"name": "DataSprite", "value": 10349}, {"name": "EdgeSprite", "value": 3301}, {"name": "NodeSprite", "value": 19382}, { "name": "render", "children": [ {"name": "ArrowType", "value": 698}, {"name": "EdgeRenderer", "value": 5569}, {"name": "IRenderer", "value": 353}, {"name": "ShapeRenderer", "value": 2247} ] }, {"name": "ScaleBinding", "value": 11275}, {"name": "Tree", "value": 7147}, {"name": "TreeBuilder", "value": 9930} ] }, { "name": "events", "children": [ {"name": "DataEvent", "value": 2313}, {"name": "SelectionEvent", "value": 1880}, {"name": "TooltipEvent", "value": 1701}, {"name": "VisualizationEvent", "value": 1117} ] }, { "name": "legend", "children": [ {"name": "Legend", "value": 20859}, {"name": "LegendItem", "value": 4614}, {"name": "LegendRange", "value": 10530} ] }, { "name": "operator", "children": [ { "name": "distortion", "children": [ {"name": "BifocalDistortion", "value": 4461}, {"name": "Distortion", "value": 6314}, {"name": "FisheyeDistortion", "value": 3444} ] }, { "name": "encoder", "children": [ {"name": "ColorEncoder", "value": 3179}, {"name": "Encoder", "value": 4060}, {"name": "PropertyEncoder", "value": 4138}, {"name": "ShapeEncoder", "value": 1690}, {"name": "SizeEncoder", "value": 1830} ] }, { "name": "filter", "children": [ {"name": "FisheyeTreeFilter", "value": 5219}, {"name": "GraphDistanceFilter", "value": 3165}, {"name": "VisibilityFilter", "value": 3509} ] }, {"name": "IOperator", "value": 1286}, { "name": "label", "children": [ {"name": "Labeler", "value": 9956}, {"name": "RadialLabeler", "value": 3899}, {"name": "StackedAreaLabeler", "value": 3202} ] }, { "name": "layout", "children": [ {"name": "AxisLayout", "value": 6725}, {"name": "BundledEdgeRouter", "value": 3727}, {"name": "CircleLayout", "value": 9317}, {"name": "CirclePackingLayout", "value": 12003}, {"name": "DendrogramLayout", "value": 4853}, {"name": "ForceDirectedLayout", "value": 8411}, {"name": "IcicleTreeLayout", "value": 4864}, {"name": "IndentedTreeLayout", "value": 3174}, {"name": "Layout", "value": 7881}, {"name": "NodeLinkTreeLayout", "value": 12870}, {"name": "PieLayout", "value": 2728}, {"name": "RadialTreeLayout", "value": 12348}, {"name": "RandomLayout", "value": 870}, {"name": "StackedAreaLayout", "value": 9121}, {"name": "TreeMapLayout", "value": 9191} ] }, {"name": "Operator", "value": 2490}, {"name": "OperatorList", "value": 5248}, {"name": "OperatorSequence", "value": 4190}, {"name": "OperatorSwitch", "value": 2581}, {"name": "SortOperator", "value": 2023} ] }, {"name": "Visualization", "value": 16540} ] } ] } d3-hierarchy-1.1.8/test/data/simple.json000066400000000000000000000005431334007264500200650ustar00rootroot00000000000000{ "children": [ { "children": [ { "value": 1 }, { "value": 2 }, { "value": 3 } ] }, { "children": [ { "value": 4 }, { "value": 3 }, { "value": 2 } ] } ] } d3-hierarchy-1.1.8/test/data/simple2.json000066400000000000000000000003511334007264500201440ustar00rootroot00000000000000{ "children": [ { "value": 6 }, { "value": 6 }, { "value": 4 }, { "value": 3 }, { "value": 2 }, { "value": 2 }, { "value": 1 } ] } d3-hierarchy-1.1.8/test/data/simple3.json000066400000000000000000000003331334007264500201450ustar00rootroot00000000000000{ "children": [ { "foo": 6 }, { "foo": 6 }, { "foo": 4 }, { "foo": 3 }, { "foo": 2 }, { "foo": 2 }, { "foo": 1 } ] } d3-hierarchy-1.1.8/test/hierarchy/000077500000000000000000000000001334007264500167445ustar00rootroot00000000000000d3-hierarchy-1.1.8/test/hierarchy/links-test.js000066400000000000000000000007571334007264500214100ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"); tape("node.links() returns an array of {source, target}", function(test) { var root = d3_hierarchy.hierarchy({id: "root", children: [{id: "a"}, {id: "b", children: [{id: "ba"}]}]}), a = root.children[0], b = root.children[1], ba = root.children[1].children[0]; test.deepEqual(root.links(), [ {source: root, target: a}, {source: root, target: b}, {source: b, target: ba} ]); test.end(); }); d3-hierarchy-1.1.8/test/pack/000077500000000000000000000000001334007264500157045ustar00rootroot00000000000000d3-hierarchy-1.1.8/test/pack/bench-enclose.js000066400000000000000000000205061334007264500207520ustar00rootroot00000000000000/* eslint-disable */ var d3 = Object.assign({}, require("../../"), require("d3-array"), require("d3-random")), benchmark = require("benchmark"); var slice = Array.prototype.slice, shuffle = d3.shuffle; var n = 0, m = 1000, r = d3.randomLogNormal(10), x = d3.randomUniform(0, 100), y = x, circles0, circles1; function extendBasis(B, p) { var i, j; if (enclosesWeakAll(p, B)) return [p]; // If we get here then B must have at least one element. for (i = 0; i < B.length; ++i) { if (enclosesNot(p, B[i]) && enclosesWeakAll(encloseBasis2(B[i], p), B)) { return [B[i], p]; } } // If we get here then B must have at least two elements. for (i = 0; i < B.length - 1; ++i) { for (j = i + 1; j < B.length; ++j) { if (enclosesNot(encloseBasis2(B[i], B[j]), p) && enclosesNot(encloseBasis2(B[i], p), B[j]) && enclosesNot(encloseBasis2(B[j], p), B[i]) && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { return [B[i], B[j], p]; } } } // If we get here then something is very wrong. throw new Error; } function enclosesNot(a, b) { var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; return dr < 0 || dr * dr < dx * dx + dy * dy; } function enclosesWeak(a, b) { var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } function enclosesWeakAll(a, B) { for (var i = 0; i < B.length; ++i) { if (!enclosesWeak(a, B[i])) { return false; } } return true; } function encloseBasis(B) { switch (B.length) { case 1: return encloseBasis1(B[0]); case 2: return encloseBasis2(B[0], B[1]); case 3: return encloseBasis3(B[0], B[1], B[2]); } } function encloseBasis1(a) { return { x: a.x, y: a.y, r: a.r }; } function encloseBasis2(a, b) { var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, l = Math.sqrt(x21 * x21 + y21 * y21); return { x: (x1 + x2 + x21 / l * r21) / 2, y: (y1 + y2 + y21 / l * r21) / 2, r: (l + r1 + r2) / 2 }; } function encloseBasis3(a, b, c) { var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x3 = c.x, y3 = c.y, r3 = c.r, a2 = x1 - x2, a3 = x1 - x3, b2 = y1 - y2, b3 = y1 - y3, c2 = r2 - r1, c3 = r3 - r1, d1 = x1 * x1 + y1 * y1 - r1 * r1, d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, ab = a3 * b2 - a2 * b3, xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, xb = (b3 * c2 - b2 * c3) / ab, ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, yb = (a2 * c3 - a3 * c2) / ab, A = xb * xb + yb * yb - 1, B = 2 * (r1 + xa * xb + ya * yb), C = xa * xa + ya * ya - r1 * r1, r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); return { x: x1 + xa + xb * r, y: y1 + ya + yb * r, r: r }; } function encloseCircular(L) { var i = 0, n = L.length, j = 0, B = [], p, e, k = 0; if (n) do { p = L[i]; ++k; if (!(e && enclosesWeak(e, p))) { e = encloseBasis(B = extendBasis(B, p)); j = i; } i = (i + 1) % n; } while (i != j); return e; } function encloseCircularShuffle(L) { var i = 0, n = shuffle(L = slice.call(L)).length, j = 0, B = [], p, e, k = 0; if (n) do { p = L[i]; ++k; if (!(e && enclosesWeak(e, p))) { e = encloseBasis(B = extendBasis(B, p)); j = i; } i = (i + 1) % n; } while (i != j); return e; } function encloseLazyShuffle(L) { var i = 0, j, n = (L = slice.call(L)).length, B = [], p, e; while (i < n) { p = L[j = i + (Math.random() * (n - i) | 0)], L[j] = L[i], L[i] = p; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function encloseNoShuffle(L) { var i = 0, n = L.length, B = [], p, e; while (i < n) { p = L[i]; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function encloseShuffle(L) { var i = 0, n = shuffle(L = slice.call(L)).length, B = [], p, e; while (i < n) { p = L[i]; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function enclosePrePass(L) { var i, n = L.length, B = [], p, e; for (i = 0; i < n; ++i) { p = L[i]; if (!(e && enclosesWeak(e, p))) e = encloseBasis(B = extendBasis(B, p)); } for (i = 0; i < n;) { p = L[i]; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function enclosePrePassThenLazyShuffle(L) { var i, j, n = (L = slice.call(L)).length, B = [], p, e; for (i = 0; i < n; ++i) { p = L[i]; if (!(e && enclosesWeak(e, p))) e = encloseBasis(B = extendBasis(B, p)); } for (i = 0; i < n;) { p = L[j = i + (Math.random() * (n - i) | 0)], L[j] = L[i], L[i] = p; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function encloseShufflePrePass(L) { var i, n = shuffle(L = slice.call(L)).length, B = [], p, e; for (i = 0; i < n; ++i) { p = L[i]; if (!(e && enclosesWeak(e, p))) e = encloseBasis(B = extendBasis(B, p)); } for (i = 0; i < n;) { p = L[i]; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function encloseCompletePasses(L) { var i, n = L.length, B = [], p, e, dirty = false; do { for (i = 0, dirty = false; i < n; ++i) { p = L[i]; if (!(e && enclosesWeak(e, p))) e = encloseBasis(B = extendBasis(B, p)), dirty = true; } } while (dirty); return e; } function encloseShuffleCompletePasses(L) { var i, n = shuffle(L = slice.call(L)).length, B = [], p, e, dirty = false; do { for (i = 0, dirty = false; i < n; ++i) { p = L[i]; if (!(e && enclosesWeak(e, p))) e = encloseBasis(B = extendBasis(B, p)), dirty = true; } } while (dirty); return e; } function recycle(event) { circles0 = d3.packSiblings(new Array(10).fill().map(() => ({r: r(), x: x(), y: y()}))); circles1 = circles0.slice().reverse(); } (new benchmark.Suite) .add("encloseNoShuffle (forward)", {onCycle: recycle, fn: () => encloseNoShuffle(circles0)}) .add("encloseNoShuffle (reverse)", {onCycle: recycle, fn: () => encloseNoShuffle(circles1)}) .add("enclosePrePass (forward)", {onCycle: recycle, fn: () => enclosePrePass(circles0)}) .add("enclosePrePass (reverse)", {onCycle: recycle, fn: () => enclosePrePass(circles1)}) .add("encloseCompletePasses (forward)", {onCycle: recycle, fn: () => encloseCompletePasses(circles0)}) .add("encloseCompletePasses (reverse)", {onCycle: recycle, fn: () => encloseCompletePasses(circles1)}) .add("encloseCircular (forward)", {onCycle: recycle, fn: () => encloseCircular(circles0)}) .add("encloseCircular (reverse)", {onCycle: recycle, fn: () => encloseCircular(circles1)}) .add("encloseShufflePrePass (forward)", {onCycle: recycle, fn: () => encloseShufflePrePass(circles0)}) .add("encloseShufflePrePass (reverse)", {onCycle: recycle, fn: () => encloseShufflePrePass(circles1)}) .add("encloseShuffleCompletePasses (forward)", {onCycle: recycle, fn: () => encloseShuffleCompletePasses(circles0)}) .add("encloseShuffleCompletePasses (reverse)", {onCycle: recycle, fn: () => encloseShuffleCompletePasses(circles1)}) .add("enclosePrePassThenLazyShuffle (forward)", {onCycle: recycle, fn: () => enclosePrePassThenLazyShuffle(circles0)}) .add("enclosePrePassThenLazyShuffle (reverse)", {onCycle: recycle, fn: () => enclosePrePassThenLazyShuffle(circles1)}) .add("encloseShuffle (forward)", {onCycle: recycle, fn: () => encloseShuffle(circles0)}) .add("encloseShuffle (reverse)", {onCycle: recycle, fn: () => encloseShuffle(circles1)}) .add("encloseLazyShuffle (forward)", {onCycle: recycle, fn: () => encloseLazyShuffle(circles0)}) .add("encloseLazyShuffle (reverse)", {onCycle: recycle, fn: () => encloseLazyShuffle(circles1)}) .add("encloseCircularShuffle (forward)", {onCycle: recycle, fn: () => encloseCircularShuffle(circles0)}) .add("encloseCircularShuffle (reverse)", {onCycle: recycle, fn: () => encloseCircularShuffle(circles1)}) .on("start", recycle) .on("cycle", event => console.log(event.target + "")) .run(); d3-hierarchy-1.1.8/test/pack/find-bugs.js000066400000000000000000000017041334007264500201220ustar00rootroot00000000000000/* eslint-disable */ var d3 = Object.assign({}, require("../../"), require("d3-random")); var n = 0, r = d3.randomLogNormal(4); while (true) { if (!(n % 100)) process.stdout.write("."); if (!(n % 10000)) process.stdout.write("\n" + n + " "); ++n; var radii = new Array(20).fill().map(r).map(Math.ceil); try { if (intersectsAny(d3.packSiblings(radii.map(r => ({r: r}))))) { throw new Error("overlap"); } } catch (error) { process.stdout.write("\n"); process.stdout.write(JSON.stringify(radii)); process.stdout.write("\n"); throw error; } } function intersectsAny(circles) { for (var i = 0, n = circles.length; i < n; ++i) { for (var j = i + 1, ci = circles[i], cj; j < n; ++j) { if (intersects(ci, cj = circles[j])) { return true; } } } return false; } function intersects(a, b) { var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr * dr > dx * dx + dy * dy; } d3-hierarchy-1.1.8/test/pack/find-enclose-bugs.js000066400000000000000000000022251334007264500215470ustar00rootroot00000000000000/* eslint-disable */ var d3 = Object.assign({}, require("../../"), require("d3-array"), require("d3-random")); var n = 0, m = 1000, r = d3.randomLogNormal(10), x = d3.randomUniform(0, 100), y = x; while (true) { if (!(n % 10)) process.stdout.write("."); if (!(n % 1000)) process.stdout.write("\n" + n + " "); ++n; var circles = new Array(20).fill().map(() => ({r: r(), x: x(), y: y()})), circles2, enclose = d3.packEnclose(circles), enclose2; if (circles.some(circle => !encloses(enclose, circle))) { console.log(JSON.stringify(circles)); } for (var i = 0; i < m; ++i) { if (!equals(enclose, enclose2 = d3.packEnclose(circles2 = d3.shuffle(circles.slice())))) { console.log(JSON.stringify(enclose)); console.log(JSON.stringify(enclose2)); console.log(JSON.stringify(circles)); console.log(JSON.stringify(circles2)); } } } function encloses(a, b) { var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } function equals(a, b) { return Math.abs(a.r - b.r) < 1e-6 && Math.abs(a.x - b.x) < 1e-6 && Math.abs(a.y - b.y) < 1e-6; } d3-hierarchy-1.1.8/test/pack/find-place-bugs.js000066400000000000000000000032101334007264500211760ustar00rootroot00000000000000/* eslint-disable */ // Look for numerical inconsistencies between the place() and intersects() // methods from pack/siblings.js // The place and intersect functions are not exported, so we duplicate them here function place(a, b, c) { var dx = b.x - a.x, x, a2, dy = b.y - a.y, y, b2, d2 = dx * dx + dy * dy; if (d2) { a2 = a.r + c.r, a2 *= a2; b2 = b.r + c.r, b2 *= b2; if (a2 > b2) { x = (d2 + b2 - a2) / (2 * d2); y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); c.x = b.x - x * dx - y * dy; c.y = b.y - x * dy + y * dx; } else { x = (d2 + a2 - b2) / (2 * d2); y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); c.x = a.x + x * dx - y * dy; c.y = a.y + x * dy + y * dx; } } else { c.x = a.x + c.r; c.y = a.y; } // This last part is not part of the original function! if (intersects(a, c) || intersects(b, c)) { console.log(`a = {x: ${a.x}, y: ${a.y}, r: ${a.r}},`); console.log(`b = {x: ${b.x}, y: ${b.y}, r: ${b.r}},`); console.log(`c = {r: ${c.r}}`); console.log(); } } function intersects(a, b) { var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } // Create n random circles. // The first two are placed touching on the x-axis; the rest are unplaced function randomCircles(n) { const r = []; for (var i = 0; i < n; i++) { r.push({ r: Math.random() * (1 << (Math.random() * 30)) }); } r[0].x = -r[1].r, r[1].x = r[0].r, r[0].y = r[1].y = 0; return r; } function test() { for(;;) { const [a,b,c,d] = randomCircles(4); place(b, a, c); place(a, c, d); } } test(); d3-hierarchy-1.1.8/test/pack/flare-test.js000066400000000000000000000034211334007264500203100ustar00rootroot00000000000000var fs = require("fs"), tape = require("tape"), d3_queue = require("d3-queue"), d3_dsv = require("d3-dsv"), d3_hierarchy = require("../../"); tape("pack(flare) produces the expected result", test( "test/data/flare.csv", "test/data/flare-pack.json" )); function test(input, expected) { return function(test) { d3_queue.queue() .defer(fs.readFile, input, "utf8") .defer(fs.readFile, expected, "utf8") .await(ready); function ready(error, inputText, expectedText) { if (error) throw error; var stratify = d3_hierarchy.stratify() .parentId(function(d) { var i = d.id.lastIndexOf("."); return i >= 0 ? d.id.slice(0, i) : null; }); var pack = d3_hierarchy.pack() .size([960, 960]); var data = d3_dsv.csvParse(inputText), expected = JSON.parse(expectedText), actual = pack(stratify(data) .sum(function(d) { return d.value; }) .sort(function(a, b) { return b.value - a.value || a.data.id.localeCompare(b.data.id); })); (function visit(node) { node.name = node.data.id.slice(node.data.id.lastIndexOf(".") + 1); node.x = round(node.x); node.y = round(node.y); node.r = round(node.r); delete node.id; delete node.parent; delete node.data; delete node.depth; delete node.height; if (node.children) node.children.forEach(visit); })(actual); (function visit(node) { node.x = round(node.x); node.y = round(node.y); node.r = round(node.r); if (node.children) node.children.forEach(visit); })(expected); test.deepEqual(actual, expected); test.end(); } }; } function round(x) { return Math.round(x * 100) / 100; } d3-hierarchy-1.1.8/test/pack/siblings-test.js000066400000000000000000000065641334007264500210440ustar00rootroot00000000000000var tape = require("tape"), d3 = require("../../"); tape("packSiblings(circles) produces a non-overlapping layout of circles", function(test) { permute([100, 200, 500, 70, 3].map(circleValue), p => intersectsAny(d3.packSiblings(p)) && test.fail(p.map(c => c.r))); permute([3, 30, 50, 400, 600].map(circleValue), p => intersectsAny(d3.packSiblings(p)) && test.fail(p.map(c => c.r))); permute([1, 1, 3, 30, 50, 400, 600].map(circleValue), p => intersectsAny(d3.packSiblings(p)) && test.fail(p.map(c => c.r))); test.equal(intersectsAny(d3.packSiblings([0.24155803737254639, 0.06349736576607135, 0.4721808601742349, 0.7469141449305542, 1.6399276349079663].map(circleRadius))), false); test.equal(intersectsAny(d3.packSiblings([2, 9071, 79, 51, 325, 867, 546, 19773, 371, 16, 165781, 10474, 6928, 40201, 31062, 14213, 8626, 12, 299, 1075, 98918, 4738, 664, 2694, 2619, 51237, 21431, 99, 5920, 1117, 321, 519162, 33559, 234, 4207].map(circleValue))), false); test.equal(intersectsAny(d3.packSiblings([0.3371386860049076, 58.65337373332081, 2.118883785686244, 1.7024669121097333, 5.834919697833051, 8.949453403094978, 6.792586534702093, 105.30490014617664, 6.058936212213754, 0.9535722042975694, 313.7636051642043].map(circleRadius))), false); test.equal(intersectsAny(d3.packSiblings([6.26551789195159, 1.707773433636342, 9.43220282933871, 9.298909705475646, 5.753163715613753, 8.882383159012575, 0.5819319661882536, 2.0234859171687747, 2.096171518434433, 9.762727931304937].map(circleRadius))), false); test.equal(intersectsAny(d3.packSiblings([9.153035316963035, 9.86048622524424, 8.3974499571329, 7.8338007571397865, 8.78260490259886, 6.165829618300345, 7.134819943097564, 7.803701771392344, 5.056638985134191, 7.424601077645588, 8.538658023474753, 2.4616388562274896, 0.5444633747829343, 9.005740508584667].map(circleRadius))), false); test.equal(intersectsAny(d3.packSiblings([2.23606797749979, 52.07088264296293, 5.196152422706632, 20.09975124224178, 357.11557267679996, 4.898979485566356, 14.7648230602334, 17.334875731491763].map(circleRadius))), false); test.end(); }); tape("packSiblings(circles) can successfully pack a circle with a tiny radius", function(test) { test.equal(intersectsAny(d3.packSiblings([ 0.5672035864083508, 0.6363498687452267, 0.5628456216244132, 1.5619458670239148, 1.5658933259424268, 0.9195955097595698, 0.4747083763630309, 0.38341282734497434, 1.3475593361729394, 0.7492342961633259, 1.0716990115071823, 0.31686823341701664, 2.8766442376551415e-7 ].map(circleRadius))), false); test.end(); }); function swap(array, i, j) { var t = array[i]; array[i] = array[j]; array[j] = t; } function permute(array, f, n) { if (n == null) n = array.length; if (n === 1) return void f(array); for (var i = 0; i < n - 1; ++i) { permute(array, f, n - 1); swap(array, n & 1 ? 0 : i, n - 1); } permute(array, f, n - 1); } function circleValue(value) { return {r: Math.sqrt(value)}; } function circleRadius(radius) { return {r: radius}; } function intersectsAny(circles) { for (var i = 0, n = circles.length; i < n; ++i) { for (var j = i + 1, ci = circles[i]; j < n; ++j) { if (intersects(ci, circles[j])) { return true; } } } return false; } function intersects(a, b) { var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } d3-hierarchy-1.1.8/test/stratify-test.js000066400000000000000000000234531334007264500201550ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../"); tape("stratify() has the expected defaults", function(test) { var s = d3_hierarchy.stratify(); test.equal(s.id()({id: "foo"}), "foo"); test.equal(s.parentId()({parentId: "bar"}), "bar"); test.end(); }); tape("stratify(data) returns the root node", function(test) { var s = d3_hierarchy.stratify(), root = s([ {id: "a"}, {id: "aa", parentId: "a"}, {id: "ab", parentId: "a"}, {id: "aaa", parentId: "aa"} ]); test.ok(root instanceof d3_hierarchy.hierarchy); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 2, data: {id: "a"}, children: [ { id: "aa", depth: 1, height: 1, data: {id: "aa", parentId: "a"}, children: [ { id: "aaa", depth: 2, height: 0, data: {id: "aaa", parentId: "aa"} } ] }, { id: "ab", depth: 1, height: 0, data: {id: "ab", parentId: "a"} } ] }); test.end(); }); tape("stratify(data) does not require the data to be in topological order", function(test) { var s = d3_hierarchy.stratify(), root = s([ {id: "aaa", parentId: "aa"}, {id: "aa", parentId: "a"}, {id: "ab", parentId: "a"}, {id: "a"} ]); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 2, data: {id: "a"}, children: [ { id: "aa", depth: 1, height: 1, data: {id: "aa", parentId: "a"}, children: [ { id: "aaa", depth: 2, height: 0, data: {id: "aaa", parentId: "aa"} } ] }, { id: "ab", depth: 1, height: 0, data: {id: "ab", parentId: "a"} } ] }); test.end(); }); tape("stratify(data) preserves the input order of siblings", function(test) { var s = d3_hierarchy.stratify(), root = s([ {id: "aaa", parentId: "aa"}, {id: "ab", parentId: "a"}, {id: "aa", parentId: "a"}, {id: "a"} ]); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 2, data: {id: "a"}, children: [ { id: "ab", depth: 1, height: 0, data: {id: "ab", parentId: "a"} }, { id: "aa", depth: 1, height: 1, data: {id: "aa", parentId: "a"}, children: [ { id: "aaa", depth: 2, height: 0, data: {id: "aaa", parentId: "aa"} } ] } ] }); test.end(); }); tape("stratify(data) treats an empty parentId as the root", function(test) { var s = d3_hierarchy.stratify(), root = s([ {id: "a", parentId: ""}, {id: "aa", parentId: "a"}, {id: "ab", parentId: "a"}, {id: "aaa", parentId: "aa"} ]); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 2, data: {id: "a", parentId: ""}, children: [ { id: "aa", depth: 1, height: 1, data: {id: "aa", parentId: "a"}, children: [ { id: "aaa", depth: 2, height: 0, data: {id: "aaa", parentId: "aa"} } ] }, { id: "ab", depth: 1, height: 0, data: {id: "ab", parentId: "a"} } ] }); test.end(); }); tape("stratify(data) does not treat a falsy but non-empty parentId as the root", function(test) { var s = d3_hierarchy.stratify(), root = s([ {id: 0, parentId: null}, {id: 1, parentId: 0}, {id: 2, parentId: 0} ]); test.deepEqual(noparent(root), { id: "0", depth: 0, height: 1, data: {id: 0, parentId: null}, children: [ { id: "1", depth: 1, height: 0, data: {id: 1, parentId: 0} }, { id: "2", depth: 1, height: 0, data: {id: 2, parentId: 0} } ] }); test.end(); }); tape("stratify(data) throws an error if the data does not have a single root", function(test) { var s = d3_hierarchy.stratify(); test.throws(function() { s([{id: "a"}, {id: "b"}]); }, /\bmultiple roots\b/); test.throws(function() { s([{id: "a", parentId: "a"}]); }, /\bno root\b/); test.throws(function() { s([{id: "a", parentId: "b"}, {id: "b", parentId: "a"}]); }, /\bno root\b/); test.end(); }); tape("stratify(data) throws an error if the hierarchy is cyclical", function(test) { var s = d3_hierarchy.stratify(); test.throws(function() { s([{id: "root"}, {id: "a", parentId: "a"}]); }, /\bcycle\b/); test.throws(function() { s([{id: "root"}, {id: "a", parentId: "b"}, {id: "b", parentId: "a"}]); }, /\bcycle\b/); test.end(); }); tape("stratify(data) throws an error if multiple parents have the same id", function(test) { var s = d3_hierarchy.stratify(); test.throws(function() { s([{id: "a"}, {id: "b", parentId: "a"}, {id: "b", parentId: "a"}, {id: "c", parentId: "b"}]); }, /\bambiguous\b/); test.end(); }); tape("stratify(data) throws an error if the specified parent is not found", function(test) { var s = d3_hierarchy.stratify(); test.throws(function() { s([{id: "a"}, {id: "b", parentId: "c"}]); }, /\bmissing\b/); test.end(); }); tape("stratify(data) allows the id to be undefined for leaf nodes", function(test) { var s = d3_hierarchy.stratify(), root = s([ {id: "a"}, {parentId: "a"}, {parentId: "a"} ]); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 1, data: {id: "a"}, children: [ { depth: 1, height: 0, data: {parentId: "a"} }, { depth: 1, height: 0, data: {parentId: "a"} } ] }); test.end(); }); tape("stratify(data) allows the id to be non-unique for leaf nodes", function(test) { var s = d3_hierarchy.stratify(), root = s([ {id: "a", parentId: null}, {id: "b", parentId: "a"}, {id: "b", parentId: "a"} ]); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 1, data: {id: "a", parentId: null}, children: [ { id: "b", depth: 1, height: 0, data: {id: "b", parentId: "a"} }, { id: "b", depth: 1, height: 0, data: {id: "b", parentId: "a"} } ] }); test.end(); }); tape("stratify(data) coerces the id to a string, if not null and not empty", function(test) { var s = d3_hierarchy.stratify(); test.strictEqual(s([{id: {toString: function() { return "a"}}}]).id, "a"); test.strictEqual(s([{id: ""}]).id, undefined); test.strictEqual(s([{id: null}]).id, undefined); test.strictEqual(s([{id: undefined}]).id, undefined); test.strictEqual(s([{}]).id, undefined); test.end(); }); tape("stratify(data) allows the id to be undefined for leaf nodes", function(test) { var s = d3_hierarchy.stratify(), o = {parentId: {toString: function() { return "a"; }}}, root = s([{id: "a"}, o]); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 1, data: {id: "a"}, children: [ { depth: 1, height: 0, data: o } ] }); test.end(); }); tape("stratify.id(id) observes the specified id function", function(test) { var foo = function(d) { return d.foo; }, s = d3_hierarchy.stratify().id(foo), root = s([ {foo: "a"}, {foo: "aa", parentId: "a"}, {foo: "ab", parentId: "a"}, {foo: "aaa", parentId: "aa"} ]); test.equal(s.id(), foo); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 2, data: {foo: "a"}, children: [ { id: "aa", depth: 1, height: 1, data: {foo: "aa", parentId: "a"}, children: [ { id: "aaa", depth: 2, height: 0, data: {foo: "aaa", parentId:"aa" } } ] }, { id: "ab", depth: 1, height: 0, data: {foo: "ab", parentId:"a" } } ] }); test.end(); }); tape("stratify.id(id) tests that id is a function", function(test) { var s = d3_hierarchy.stratify(); test.throws(function() { s.id(42); }); test.throws(function() { s.id(null); }); test.end(); }); tape("stratify.parentId(id) observes the specified parent id function", function(test) { var foo = function(d) { return d.foo; }, s = d3_hierarchy.stratify().parentId(foo), root = s([ {id: "a"}, {id: "aa", foo: "a"}, {id: "ab", foo: "a"}, {id: "aaa", foo: "aa"} ]); test.equal(s.parentId(), foo); test.deepEqual(noparent(root), { id: "a", depth: 0, height: 2, data: {id: "a"}, children: [ { id: "aa", depth: 1, height: 1, data: {id: "aa", foo: "a"}, children: [ { id: "aaa", depth: 2, height: 0, data: {id: "aaa", foo: "aa"} } ] }, { id: "ab", depth: 1, height: 0, data: {id: "ab", foo: "a"} } ] }); test.end(); }); tape("stratify.parentId(id) tests that id is a function", function(test) { var s = d3_hierarchy.stratify(); test.throws(function() { s.parentId(42); }); test.throws(function() { s.parentId(null); }); test.end(); }); function noparent(node) { var copy = {}; for (var k in node) { if (node.hasOwnProperty(k)) switch (k) { case "children": copy.children = node.children.map(noparent); break; case "parent": break; default: copy[k] = node[k]; break; } } return copy; } d3-hierarchy-1.1.8/test/treemap/000077500000000000000000000000001334007264500164235ustar00rootroot00000000000000d3-hierarchy-1.1.8/test/treemap/binary-test.js000066400000000000000000000015571334007264500212320ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"), round = require("./round"); tape("treemapBinary(parent, x0, y0, x1, y1) generates a binary treemap layout", function(test) { var tile = d3_hierarchy.treemapBinary, root = { value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 6, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 4.20, y0: 2.33, y1: 4.00}, {x0: 4.20, x1: 5.40, y0: 2.33, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); d3-hierarchy-1.1.8/test/treemap/dice-test.js000066400000000000000000000024261334007264500206460ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"), round = require("./round"); tape("treemapDice(parent, x0, y0, x1, y1) generates a diced layout", function(test) { var tile = d3_hierarchy.treemapDice, root = { value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 4, 6); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 1.00, y0: 0.00, y1: 6.00}, {x0: 1.00, x1: 2.00, y0: 0.00, y1: 6.00}, {x0: 2.00, x1: 2.67, y0: 0.00, y1: 6.00}, {x0: 2.67, x1: 3.17, y0: 0.00, y1: 6.00}, {x0: 3.17, x1: 3.50, y0: 0.00, y1: 6.00}, {x0: 3.50, x1: 3.83, y0: 0.00, y1: 6.00}, {x0: 3.83, x1: 4.00, y0: 0.00, y1: 6.00} ]); test.end(); }); tape("treemapDice(parent, x0, y0, x1, y1) handles a degenerate empty parent", function(test) { var tile = d3_hierarchy.treemapDice, root = { value: 0, children: [ {value: 0}, {value: 0} ] }; tile(root, 0, 0, 0, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 0.00, y0: 0.00, y1: 4.00}, {x0: 0.00, x1: 0.00, y0: 0.00, y1: 4.00} ]); test.end(); }); d3-hierarchy-1.1.8/test/treemap/flare-test.js000066400000000000000000000044721334007264500210360ustar00rootroot00000000000000var fs = require("fs"), tape = require("tape"), d3_queue = require("d3-queue"), d3_dsv = require("d3-dsv"), d3_hierarchy = require("../../"); tape("treemap(flare) produces the expected result with a squarified ratio of φ", test( "test/data/flare.csv", "test/data/flare-phi.json", d3_hierarchy.treemapSquarify )); tape("treemap(flare) produces the expected result with a squarified ratio of 1", test( "test/data/flare.csv", "test/data/flare-one.json", d3_hierarchy.treemapSquarify.ratio(1) )); function test(input, expected, tile) { return function(test) { d3_queue.queue() .defer(fs.readFile, input, "utf8") .defer(fs.readFile, expected, "utf8") .await(ready); function ready(error, inputText, expectedText) { if (error) throw error; var stratify = d3_hierarchy.stratify() .parentId(function(d) { var i = d.id.lastIndexOf("."); return i >= 0 ? d.id.slice(0, i) : null; }); var treemap = d3_hierarchy.treemap() .tile(tile) .size([960, 500]); var data = d3_dsv.csvParse(inputText), expected = JSON.parse(expectedText), actual = treemap(stratify(data) .sum(function(d) { return d.value; }) .sort(function(a, b) { return b.value - a.value || a.data.id.localeCompare(b.data.id); })); (function visit(node) { node.name = node.data.id.slice(node.data.id.lastIndexOf(".") + 1); node.x0 = round(node.x0); node.y0 = round(node.y0); node.x1 = round(node.x1); node.y1 = round(node.y1); delete node.id; delete node.parent; delete node.data; delete node._squarify; delete node.height; if (node.children) node.children.forEach(visit); })(actual); (function visit(node) { node.x0 = round(node.x); node.y0 = round(node.y); node.x1 = round(node.x + node.dx); node.y1 = round(node.y + node.dy); delete node.x; delete node.y; delete node.dx; delete node.dy; if (node.children) { node.children.reverse(); // D3 3.x bug node.children.forEach(visit); } })(expected); test.deepEqual(actual, expected); test.end(); } }; } function round(x) { return Math.round(x * 100) / 100; } d3-hierarchy-1.1.8/test/treemap/index-test.js000066400000000000000000000165601334007264500210550ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"), round = require("./round"), simple = require("../data/simple2"); tape("treemap() has the expected defaults", function(test) { var treemap = d3_hierarchy.treemap(); test.equal(treemap.tile(), d3_hierarchy.treemapSquarify); test.deepEqual(treemap.size(), [1, 1]); test.deepEqual(treemap.round(), false); test.end(); }); tape("treemap.round(round) observes the specified rounding", function(test) { var treemap = d3_hierarchy.treemap().size([600, 400]).round(true), root = treemap(d3_hierarchy.hierarchy(simple).sum(defaultValue).sort(descendingValue)), nodes = root.descendants().map(round); test.deepEqual(treemap.round(), true); test.deepEqual(nodes, [ {x0: 0, x1: 600, y0: 0, y1: 400}, {x0: 0, x1: 300, y0: 0, y1: 200}, {x0: 0, x1: 300, y0: 200, y1: 400}, {x0: 300, x1: 471, y0: 0, y1: 233}, {x0: 471, x1: 600, y0: 0, y1: 233}, {x0: 300, x1: 540, y0: 233, y1: 317}, {x0: 300, x1: 540, y0: 317, y1: 400}, {x0: 540, x1: 600, y0: 233, y1: 400} ]); test.end(); }); tape("treemap.round(round) coerces the specified round to boolean", function(test) { var treemap = d3_hierarchy.treemap().round("yes"); test.strictEqual(treemap.round(), true); test.end(); }); tape("treemap.padding(padding) sets the inner and outer padding to the specified value", function(test) { var treemap = d3_hierarchy.treemap().padding("42"); test.strictEqual(treemap.padding()(), 42); test.strictEqual(treemap.paddingInner()(), 42); test.strictEqual(treemap.paddingOuter()(), 42); test.strictEqual(treemap.paddingTop()(), 42); test.strictEqual(treemap.paddingRight()(), 42); test.strictEqual(treemap.paddingBottom()(), 42); test.strictEqual(treemap.paddingLeft()(), 42); test.end(); }); tape("treemap.paddingInner(padding) observes the specified padding", function(test) { var treemap = d3_hierarchy.treemap().size([6, 4]).paddingInner(0.5), root = treemap(d3_hierarchy.hierarchy(simple).sum(defaultValue).sort(descendingValue)), nodes = root.descendants().map(round); test.strictEqual(treemap.paddingInner()(), 0.5); test.deepEqual(treemap.size(), [6, 4]); test.deepEqual(nodes, [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 4.00}, {x0: 0.00, x1: 2.75, y0: 0.00, y1: 1.75}, {x0: 0.00, x1: 2.75, y0: 2.25, y1: 4.00}, {x0: 3.25, x1: 4.61, y0: 0.00, y1: 2.13}, {x0: 5.11, x1: 6.00, y0: 0.00, y1: 2.13}, {x0: 3.25, x1: 5.35, y0: 2.63, y1: 3.06}, {x0: 3.25, x1: 5.35, y0: 3.56, y1: 4.00}, {x0: 5.85, x1: 6.00, y0: 2.63, y1: 4.00} ]); test.end(); }); tape("treemap.paddingOuter(padding) observes the specified padding", function(test) { var treemap = d3_hierarchy.treemap().size([6, 4]).paddingOuter(0.5), root = treemap(d3_hierarchy.hierarchy(simple).sum(defaultValue).sort(descendingValue)), nodes = root.descendants().map(round); test.strictEqual(treemap.paddingOuter()(), 0.5); test.strictEqual(treemap.paddingTop()(), 0.5); test.strictEqual(treemap.paddingRight()(), 0.5); test.strictEqual(treemap.paddingBottom()(), 0.5); test.strictEqual(treemap.paddingLeft()(), 0.5); test.deepEqual(treemap.size(), [6, 4]); test.deepEqual(nodes, [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 4.00}, {x0: 0.50, x1: 3.00, y0: 0.50, y1: 2.00}, {x0: 0.50, x1: 3.00, y0: 2.00, y1: 3.50}, {x0: 3.00, x1: 4.43, y0: 0.50, y1: 2.25}, {x0: 4.43, x1: 5.50, y0: 0.50, y1: 2.25}, {x0: 3.00, x1: 5.00, y0: 2.25, y1: 2.88}, {x0: 3.00, x1: 5.00, y0: 2.88, y1: 3.50}, {x0: 5.00, x1: 5.50, y0: 2.25, y1: 3.50} ]); test.end(); }); tape("treemap.size(size) observes the specified size", function(test) { var treemap = d3_hierarchy.treemap().size([6, 4]), root = treemap(d3_hierarchy.hierarchy(simple).sum(defaultValue).sort(descendingValue)), nodes = root.descendants().map(round); test.deepEqual(treemap.size(), [6, 4]); test.deepEqual(nodes, [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 4.00}, {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 5.40, y0: 2.33, y1: 3.17}, {x0: 3.00, x1: 5.40, y0: 3.17, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); tape("treemap.size(size) coerces the specified size to numbers", function(test) { var treemap = d3_hierarchy.treemap().size(["6", {valueOf: function() { return 4; }}]); test.strictEqual(treemap.size()[0], 6); test.strictEqual(treemap.size()[1], 4); test.end(); }); tape("treemap.size(size) makes defensive copies", function(test) { var size = [6, 4], treemap = d3_hierarchy.treemap().size(size), root = (size[1] = 100, treemap(d3_hierarchy.hierarchy(simple).sum(defaultValue).sort(descendingValue))), nodes = root.descendants().map(round); test.deepEqual(treemap.size(), [6, 4]); treemap.size()[1] = 100; test.deepEqual(treemap.size(), [6, 4]); test.deepEqual(nodes, [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 4.00}, {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 5.40, y0: 2.33, y1: 3.17}, {x0: 3.00, x1: 5.40, y0: 3.17, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); tape("treemap.tile(tile) observes the specified tile function", function(test) { var treemap = d3_hierarchy.treemap().size([6, 4]).tile(d3_hierarchy.treemapSlice), root = treemap(d3_hierarchy.hierarchy(simple).sum(defaultValue).sort(descendingValue)), nodes = root.descendants().map(round); test.equal(treemap.tile(), d3_hierarchy.treemapSlice); test.deepEqual(nodes, [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 4.00}, {x0: 0.00, x1: 6.00, y0: 0.00, y1: 1.00}, {x0: 0.00, x1: 6.00, y0: 1.00, y1: 2.00}, {x0: 0.00, x1: 6.00, y0: 2.00, y1: 2.67}, {x0: 0.00, x1: 6.00, y0: 2.67, y1: 3.17}, {x0: 0.00, x1: 6.00, y0: 3.17, y1: 3.50}, {x0: 0.00, x1: 6.00, y0: 3.50, y1: 3.83}, {x0: 0.00, x1: 6.00, y0: 3.83, y1: 4.00} ]); test.end(); }); tape("treemap(data) observes the specified values", function(test) { var foo = function(d) { return d.foo; }, treemap = d3_hierarchy.treemap().size([6, 4]), root = treemap(d3_hierarchy.hierarchy(require("../data/simple3")).sum(foo).sort(descendingValue)), nodes = root.descendants().map(round); test.deepEqual(treemap.size(), [6, 4]); test.deepEqual(nodes, [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 4.00}, {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 5.40, y0: 2.33, y1: 3.17}, {x0: 3.00, x1: 5.40, y0: 3.17, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); tape("treemap(data) observes the specified sibling order", function(test) { var treemap = d3_hierarchy.treemap(), root = treemap(d3_hierarchy.hierarchy(simple).sum(defaultValue).sort(ascendingValue)); test.deepEqual(root.descendants().map(function(d) { return d.value; }), [24, 1, 2, 2, 3, 4, 6, 6]); test.end(); }); function defaultValue(d) { return d.value; } function ascendingValue(a, b) { return a.value - b.value; } function descendingValue(a, b) { return b.value - a.value; } d3-hierarchy-1.1.8/test/treemap/resquarify-test.js000066400000000000000000000047251334007264500221400ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"), round = require("./round"); tape("treemapResquarify(parent, x0, y0, x1, y1) produces a stable update", function(test) { var tile = d3_hierarchy.treemapResquarify, root = {value: 20, children: [{value: 10}, {value: 10}]}; tile(root, 0, 0, 20, 10); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 10, y0: 0, y1: 10}, {x0: 10, x1: 20, y0: 0, y1: 10} ]); tile(root, 0, 0, 10, 20); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 5, y0: 0, y1: 20}, {x0: 5, x1: 10, y0: 0, y1: 20} ]); test.end(); }); tape("treemapResquarify.ratio(ratio) observes the specified ratio", function(test) { var tile = d3_hierarchy.treemapResquarify.ratio(1), root = { value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 6, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 4.20, y0: 2.33, y1: 4.00}, {x0: 4.20, x1: 5.40, y0: 2.33, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); tape("treemapResquarify.ratio(ratio) is stable if the ratio is unchanged", function(test) { var root = {value: 20, children: [{value: 10}, {value: 10}]}; d3_hierarchy.treemapResquarify(root, 0, 0, 20, 10); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 10, y0: 0, y1: 10}, {x0: 10, x1: 20, y0: 0, y1: 10} ]); d3_hierarchy.treemapResquarify.ratio((1 + Math.sqrt(5)) / 2)(root, 0, 0, 10, 20); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 5, y0: 0, y1: 20}, {x0: 5, x1: 10, y0: 0, y1: 20} ]); test.end(); }); tape("treemapResquarify.ratio(ratio) is unstable if the ratio is changed", function(test) { var root = {value: 20, children: [{value: 10}, {value: 10}]}; d3_hierarchy.treemapResquarify(root, 0, 0, 20, 10); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 10, y0: 0, y1: 10}, {x0: 10, x1: 20, y0: 0, y1: 10} ]); d3_hierarchy.treemapResquarify.ratio(1)(root, 0, 0, 10, 20); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 10, y0: 0, y1: 10}, {x0: 0, x1: 10, y0: 10, y1: 20} ]); test.end(); }); d3-hierarchy-1.1.8/test/treemap/round.js000066400000000000000000000003001334007264500201010ustar00rootroot00000000000000module.exports = function(d) { return { x0: round(d.x0), y0: round(d.y0), x1: round(d.x1), y1: round(d.y1) }; }; function round(x) { return Math.round(x * 100) / 100; } d3-hierarchy-1.1.8/test/treemap/slice-test.js000066400000000000000000000024331334007264500210370ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"), round = require("./round"); tape("treemapSlice(parent, x0, y0, x1, y1) generates a sliced layout", function(test) { var tile = d3_hierarchy.treemapSlice, root = { value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 6, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 1.00}, {x0: 0.00, x1: 6.00, y0: 1.00, y1: 2.00}, {x0: 0.00, x1: 6.00, y0: 2.00, y1: 2.67}, {x0: 0.00, x1: 6.00, y0: 2.67, y1: 3.17}, {x0: 0.00, x1: 6.00, y0: 3.17, y1: 3.50}, {x0: 0.00, x1: 6.00, y0: 3.50, y1: 3.83}, {x0: 0.00, x1: 6.00, y0: 3.83, y1: 4.00} ]); test.end(); }); tape("treemapSlice(parent, x0, y0, x1, y1) handles a degenerate empty parent", function(test) { var tile = d3_hierarchy.treemapSlice, root = { value: 0, children: [ {value: 0}, {value: 0} ] }; tile(root, 0, 0, 4, 0); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 4.00, y0: 0.00, y1: 0.00}, {x0: 0.00, x1: 4.00, y0: 0.00, y1: 0.00} ]); test.end(); }); d3-hierarchy-1.1.8/test/treemap/sliceDice-test.js000066400000000000000000000032321334007264500216220ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"), round = require("./round"); tape("treemapSliceDice(parent, x0, y0, x1, y1) uses slice for odd depth", function(test) { var tile = d3_hierarchy.treemapSliceDice, root = { depth: 1, value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 6, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 6.00, y0: 0.00, y1: 1.00}, {x0: 0.00, x1: 6.00, y0: 1.00, y1: 2.00}, {x0: 0.00, x1: 6.00, y0: 2.00, y1: 2.67}, {x0: 0.00, x1: 6.00, y0: 2.67, y1: 3.17}, {x0: 0.00, x1: 6.00, y0: 3.17, y1: 3.50}, {x0: 0.00, x1: 6.00, y0: 3.50, y1: 3.83}, {x0: 0.00, x1: 6.00, y0: 3.83, y1: 4.00} ]); test.end(); }); tape("treemapSliceDice(parent, x0, y0, x1, y1) uses dice for even depth", function(test) { var tile = d3_hierarchy.treemapSliceDice, root = { depth: 2, value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 4, 6); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 1.00, y0: 0.00, y1: 6.00}, {x0: 1.00, x1: 2.00, y0: 0.00, y1: 6.00}, {x0: 2.00, x1: 2.67, y0: 0.00, y1: 6.00}, {x0: 2.67, x1: 3.17, y0: 0.00, y1: 6.00}, {x0: 3.17, x1: 3.50, y0: 0.00, y1: 6.00}, {x0: 3.50, x1: 3.83, y0: 0.00, y1: 6.00}, {x0: 3.83, x1: 4.00, y0: 0.00, y1: 6.00} ]); test.end(); }); d3-hierarchy-1.1.8/test/treemap/squarify-test.js000066400000000000000000000075371334007264500216150ustar00rootroot00000000000000var tape = require("tape"), d3_hierarchy = require("../../"), round = require("./round"); tape("treemapSquarify(parent, x0, y0, x1, y1) generates a squarified layout", function(test) { var tile = d3_hierarchy.treemapSquarify, root = { value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 6, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 5.40, y0: 2.33, y1: 3.17}, {x0: 3.00, x1: 5.40, y0: 3.17, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); tape("treemapSquarify(parent, x0, y0, x1, y1) does not produce a stable update", function(test) { var tile = d3_hierarchy.treemapSquarify, root = {value: 20, children: [{value: 10}, {value: 10}]}; tile(root, 0, 0, 20, 10); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 10, y0: 0, y1: 10}, {x0: 10, x1: 20, y0: 0, y1: 10} ]); tile(root, 0, 0, 10, 20); test.deepEqual(root.children.map(round), [ {x0: 0, x1: 10, y0: 0, y1: 10}, {x0: 0, x1: 10, y0: 10, y1: 20} ]); test.end(); }); tape("treemapSquarify.ratio(ratio) observes the specified ratio", function(test) { var tile = d3_hierarchy.treemapSquarify.ratio(1), root = { value: 24, children: [ {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 6, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 4.20, y0: 2.33, y1: 4.00}, {x0: 4.20, x1: 5.40, y0: 2.33, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); tape("treemapSquarify(parent, x0, y0, x1, y1) handles a degenerate tall empty parent", function(test) { var tile = d3_hierarchy.treemapSquarify, root = { value: 0, children: [ {value: 0}, {value: 0} ] }; tile(root, 0, 0, 0, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 0.00, y0: 0.00, y1: 4.00}, {x0: 0.00, x1: 0.00, y0: 0.00, y1: 4.00} ]); test.end(); }); tape("treemapSquarify(parent, x0, y0, x1, y1) handles a degenerate wide empty parent", function(test) { var tile = d3_hierarchy.treemapSquarify, root = { value: 0, children: [ {value: 0}, {value: 0} ] }; tile(root, 0, 0, 4, 0); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 4.00, y0: 0.00, y1: 0.00}, {x0: 0.00, x1: 4.00, y0: 0.00, y1: 0.00} ]); test.end(); }); tape("treemapSquarify(parent, x0, y0, x1, y1) handles a leading zero value", function(test) { var tile = d3_hierarchy.treemapSquarify, root = { value: 24, children: [ {value: 0}, {value: 6}, {value: 6}, {value: 4}, {value: 3}, {value: 2}, {value: 2}, {value: 1} ] }; tile(root, 0, 0, 6, 4); test.deepEqual(root.children.map(round), [ {x0: 0.00, x1: 3.00, y0: 0.00, y1: 0.00}, {x0: 0.00, x1: 3.00, y0: 0.00, y1: 2.00}, {x0: 0.00, x1: 3.00, y0: 2.00, y1: 4.00}, {x0: 3.00, x1: 4.71, y0: 0.00, y1: 2.33}, {x0: 4.71, x1: 6.00, y0: 0.00, y1: 2.33}, {x0: 3.00, x1: 5.40, y0: 2.33, y1: 3.17}, {x0: 3.00, x1: 5.40, y0: 3.17, y1: 4.00}, {x0: 5.40, x1: 6.00, y0: 2.33, y1: 4.00} ]); test.end(); }); d3-hierarchy-1.1.8/yarn.lock000066400000000000000000001011421334007264500156310ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@babel/code-frame@^7.0.0-beta.47": version "7.0.0-rc.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-rc.3.tgz#d77a587401f818a3168700f596e41cd6905947b2" dependencies: "@babel/highlight" "7.0.0-rc.3" "@babel/highlight@7.0.0-rc.3": version "7.0.0-rc.3" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-rc.3.tgz#c2ee83f8e5c0c387279a8c48e06fef2e32027004" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" "@types/node@*": version "10.9.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.1.tgz#06f002136fbcf51e730995149050bb3c45ee54e6" acorn-jsx@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" dependencies: acorn "^5.0.3" acorn@^5.0.3, acorn@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.2.tgz#91fa871883485d06708800318404e72bfb26dcc5" ajv-keywords@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" ajv@^6.0.1, ajv@^6.5.0: version "6.5.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: sprintf-js "~1.0.2" array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: chalk "^1.1.3" esutils "^2.0.2" js-tokens "^3.0.2" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" benchmark@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" dependencies: lodash "^4.17.4" platform "^1.3.3" brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: callsites "^0.2.0" callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" has-ansi "^2.0.0" strip-ansi "^3.0.0" supports-color "^2.0.0" chalk@^2.0.0, chalk@^2.1.0: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" color-convert@^1.9.0: version "1.9.2" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" dependencies: color-name "1.1.1" color-name@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" commander@2: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" commander@~2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: nice-try "^1.0.4" path-key "^2.0.1" semver "^5.5.0" shebang-command "^1.2.0" which "^1.2.9" d3-array@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" d3-dsv@1: version "1.0.10" resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.10.tgz#4371c489a2a654a297aca16fcaf605a6f31a6f51" dependencies: commander "2" iconv-lite "0.4" rw "1" d3-queue@3: version "3.0.7" resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618" d3-random@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.1.tgz#de6a1fc321e31c4f7468709cd0e7858c3c850315" debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" dependencies: object-keys "^1.0.12" defined@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" dependencies: globby "^5.0.0" is-path-cwd "^1.0.0" is-path-in-cwd "^1.0.0" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" rimraf "^2.2.8" doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: esutils "^2.0.2" es-abstract@^1.5.0: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" has "^1.0.1" is-callable "^1.1.3" is-regex "^1.0.4" es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" dependencies: is-callable "^1.1.1" is-date-object "^1.0.1" is-symbol "^1.0.1" escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" eslint-scope@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint-utils@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" eslint@5: version "5.4.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.4.0.tgz#d068ec03006bb9e06b429dc85f7e46c1b69fac62" dependencies: ajv "^6.5.0" babel-code-frame "^6.26.0" chalk "^2.1.0" cross-spawn "^6.0.5" debug "^3.1.0" doctrine "^2.1.0" eslint-scope "^4.0.0" eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" espree "^4.0.0" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" globals "^11.7.0" ignore "^4.0.2" imurmurhash "^0.1.4" inquirer "^5.2.0" is-resolvable "^1.1.0" js-yaml "^3.11.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.5" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" pluralize "^7.0.0" progress "^2.0.0" regexpp "^2.0.0" require-uncached "^1.0.3" semver "^5.5.0" strip-ansi "^4.0.0" strip-json-comments "^2.0.1" table "^4.0.3" text-table "^0.2.0" espree@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" dependencies: acorn "^5.6.0" acorn-jsx "^4.1.1" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" dependencies: estraverse "^4.1.0" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" external-editor@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" tmp "^0.0.33" fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" flat-cache@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" dependencies: circular-json "^0.3.1" del "^2.0.2" graceful-fs "^4.1.2" write "^0.2.1" for-each@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" dependencies: is-callable "^1.1.3" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" globals@^11.7.0: version "11.7.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" dependencies: array-union "^1.0.1" arrify "^1.0.0" glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" has@^1.0.1, has@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: function-bind "^1.1.1" iconv-lite@0.4, iconv-lite@^0.4.17: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: safer-buffer ">= 2.1.2 < 3" ignore@^4.0.2: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" inquirer@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" external-editor "^2.1.0" figures "^2.0.0" lodash "^4.3.0" mute-stream "0.0.7" run-async "^2.2.0" rxjs "^5.5.2" string-width "^2.1.0" strip-ansi "^4.0.0" through "^2.3.6" is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" is-path-in-cwd@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" dependencies: path-is-inside "^1.0.1" is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: has "^1.0.1" is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" js-yaml@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: argparse "^1.0.7" esprima "^4.0.0" json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object-inspect@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" object-keys@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" dependencies: mimic-fn "^1.0.0" optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" wordwrap "~1.0.0" os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" path-parse@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" platform@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" regexpp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.0.tgz#b2a7534a85ca1b033bcf5ce9ff8e56d4e0755365" require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" resolve@~1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" dependencies: path-parse "^1.0.5" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" dependencies: onetime "^2.0.0" signal-exit "^3.0.2" resumer@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" dependencies: through "~2.3.4" rimraf@^2.2.8: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" rollup-plugin-terser@1: version "1.0.1" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-1.0.1.tgz#ba5f497cbc9aa38ba19d3ee2167c04ea3ed279af" dependencies: "@babel/code-frame" "^7.0.0-beta.47" terser "^3.7.5" rollup@0.64: version "0.64.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.64.1.tgz#9188ee368e5fcd43ffbc00ec414e72eeb5de87ba" dependencies: "@types/estree" "0.0.39" "@types/node" "*" run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: is-promise "^2.1.0" rw@1: version "1.3.3" resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" rxjs@^5.5.2: version "5.5.11" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" dependencies: symbol-observable "1.0.1" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" semver@^5.5.0: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" dependencies: is-fullwidth-code-point "^2.0.0" source-map-support@~0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" string.prototype.trim@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" dependencies: define-properties "^1.1.2" es-abstract "^1.5.0" function-bind "^1.0.2" strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: ansi-regex "^3.0.0" strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: has-flag "^3.0.0" symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" table@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" dependencies: ajv "^6.0.1" ajv-keywords "^3.0.0" chalk "^2.1.0" lodash "^4.17.4" slice-ansi "1.0.0" string-width "^2.1.1" tape@4: version "4.9.1" resolved "https://registry.yarnpkg.com/tape/-/tape-4.9.1.tgz#1173d7337e040c76fbf42ec86fcabedc9b3805c9" dependencies: deep-equal "~1.0.1" defined "~1.0.0" for-each "~0.3.3" function-bind "~1.1.1" glob "~7.1.2" has "~1.0.3" inherits "~2.0.3" minimist "~1.2.0" object-inspect "~1.6.0" resolve "~1.7.1" resumer "~0.0.0" string.prototype.trim "~1.1.2" through "~2.3.8" terser@^3.7.5: version "3.8.1" resolved "https://registry.yarnpkg.com/terser/-/terser-3.8.1.tgz#cb70070ac9e0a71add169dfb63c0a64fca2738ac" dependencies: commander "~2.16.0" source-map "~0.6.1" source-map-support "~0.5.6" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" through@^2.3.6, through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: os-tmpdir "~1.0.2" type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: prelude-ls "~1.1.2" uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: punycode "^2.1.0" which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" dependencies: mkdirp "^0.5.1"