@datagrok-libraries/bio 5.16.0 → 5.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "Datagrok bio library",
7
- "version": "5.16.0",
7
+ "version": "5.16.1",
8
8
  "description": "",
9
9
  "dependencies": {
10
10
  "@datagrok-libraries/utils": "^1.10.1",
@@ -11,9 +11,18 @@ export interface ITreeHelper {
11
11
  toNewick(node: NodeType | null): string;
12
12
  getLeafList<TNode extends NodeType>(node: TNode): TNode[];
13
13
  getNodeList<TNode extends NodeType>(node: TNode): TNode[];
14
- treeFilterByLeaves(node: NodeType, leaves: {
14
+ /** Filters tree by leaves (by set).
15
+ * An internal node will be eliminated only if all its subs (children/leaves) are filtered out by {link @leaves}.
16
+ */
17
+ filterTreeByLeaves(node: NodeType, leaves: {
15
18
  [name: string]: any;
16
19
  }): NodeType | null;
20
+ /** Collects nodes by leaves (by set).
21
+ * Node will be returned only if all its subs (children/leaves) are present in {@link leaves}.
22
+ */
23
+ getNodesByLeaves<TNode extends NodeType>(node: TNode, leaves: {
24
+ [name: string]: any;
25
+ }): TNode[];
17
26
  treeCutAsLeaves(node: NodeType, cutHeight: number, currentHeight?: number): NodeType[];
18
27
  treeCutAsTree(node: NodeType, cutHeight: number, keepShorts?: boolean, currentHeight?: number): NodeType | null;
19
28
  /** Reorder the grid's rows according to the leaves' order in the tree.
@@ -1 +1 @@
1
- {"version":3,"file":"tree-helper.d.ts","sourceRoot":"","sources":["tree-helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,cAAc,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAGjD,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAE3G,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;IAExC,WAAW,CAAC,KAAK,SAAS,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;IAE1D,WAAW,CAAC,KAAK,SAAS,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;IAE1D,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,QAAQ,GAAG,IAAI,CAAC;IAErF,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAEvF,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IAEhH;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9F,YAAY,CAAC,IAAI,EAAE,cAAc,EAC/B,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAE5F;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,cAAc,EAChC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAErF;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,EACnE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAE/D,kFAAkF;IAClF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;CACtC;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,CAO1D"}
1
+ {"version":3,"file":"tree-helper.d.ts","sourceRoot":"","sources":["tree-helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,cAAc,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAGjD,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAE3G,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;IAExC,WAAW,CAAC,KAAK,SAAS,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;IAE1D,WAAW,CAAC,KAAK,SAAS,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;IAE1D;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,QAAQ,GAAG,IAAI,CAAC;IAErF;;OAEG;IACH,gBAAgB,CAAC,KAAK,SAAS,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,KAAK,EAAE,CAAC;IAEhG,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAEvF,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IAEhH;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9F,YAAY,CAAC,IAAI,EAAE,cAAc,EAC/B,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAE5F;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,cAAc,EAChC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAErF;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,EACnE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAE/D,kFAAkF;IAClF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;CACtC;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,CAO1D"}
@@ -17,4 +17,4 @@ export function getTreeHelper() {
17
17
  return res;
18
18
  });
19
19
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0cmVlLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBa0R0QyxNQUFNLFVBQWdCLGFBQWE7O1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFFbEYsTUFBTSxHQUFHLEdBQWdCLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsRUFBaUIsQ0FBQztRQUNuRyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7Tm9kZUN1dHRlZFR5cGUsIE5vZGVUeXBlfSBmcm9tICcuL2luZGV4JztcblxuXG5leHBvcnQgaW50ZXJmYWNlIElUcmVlSGVscGVyIHtcbiAgLyoqIEdlbmVyYXRlcyBkYXRhIGZyYW1lIHdpdGggcm93IHBlciBub2RlLCBwYXJlbnQgcmVsYXRpb24sIGRpc3RhbmNlLCBhbm5vdGF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdpY2sgICAgICAgICAgICAgICAgTmV3aWNrIGZvcm1hdCBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICAgICAgICAgUmVzdWx0IGRhdGEgZnJhbWUgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbm9kZVByZWZpeCAgICAgICAgICAgIFByZWZpeCBmb3Igbm9kZXMgd2l0aCBhdXRvIGdlbmVyYXRlZCBuYW1lICAgKlxuICAgKiBAcGFyYW0ge2Jvb2x9ICAgZW1wdHlQYXJlbnRSb290U2tpcCAgIFNraXAgcm93IHdpdGggcm9vdCBub2RlIGFuZCBlbXB0eSBwYXJlbnQgKGZvciBOZXR3b3JrIERpYWdyYW0pXG4gICAqL1xuICBuZXdpY2tUb0RmKG5ld2ljazogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIG5vZGVQcmVmaXg/OiBzdHJpbmcsIGVtcHR5UGFyZW50Um9vdFNraXA/OiBib29sZWFuKTogREcuRGF0YUZyYW1lO1xuXG4gIHRvTmV3aWNrKG5vZGU6IE5vZGVUeXBlIHwgbnVsbCk6IHN0cmluZztcblxuICBnZXRMZWFmTGlzdDxUTm9kZSBleHRlbmRzIE5vZGVUeXBlPihub2RlOiBUTm9kZSk6IFROb2RlW107XG5cbiAgZ2V0Tm9kZUxpc3Q8VE5vZGUgZXh0ZW5kcyBOb2RlVHlwZT4obm9kZTogVE5vZGUpOiBUTm9kZVtdO1xuXG4gIHRyZWVGaWx0ZXJCeUxlYXZlcyhub2RlOiBOb2RlVHlwZSwgbGVhdmVzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSk6IE5vZGVUeXBlIHwgbnVsbDtcblxuICB0cmVlQ3V0QXNMZWF2ZXMobm9kZTogTm9kZVR5cGUsIGN1dEhlaWdodDogbnVtYmVyLCBjdXJyZW50SGVpZ2h0PzogbnVtYmVyKTogTm9kZVR5cGVbXTtcblxuICB0cmVlQ3V0QXNUcmVlKG5vZGU6IE5vZGVUeXBlLCBjdXRIZWlnaHQ6IG51bWJlciwga2VlcFNob3J0cz86IGJvb2xlYW4sIGN1cnJlbnRIZWlnaHQ/OiBudW1iZXIpOiBOb2RlVHlwZSB8IG51bGw7XG5cbiAgLyoqIFJlb3JkZXIgdGhlIGdyaWQncyByb3dzIGFjY29yZGluZyB0byB0aGUgbGVhdmVzJyBvcmRlciBpbiB0aGUgdHJlZS5cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gbGVhZkNvbE5hbWUgQ29sdW1uIG5hbWUgZm9yIGxlYWYgbmFtZSBpbiBuZXdpY2ssIG51bGwgLSB1c2Ugcm93IGluZGV4XG4gICAqL1xuICBzZXRHcmlkT3JkZXIodHJlZTogTm9kZVR5cGUsIGdyaWQ6IERHLkdyaWQsIGxlYWZDb2xOYW1lOiBzdHJpbmcgfCBudWxsKTogW05vZGVUeXBlLCBzdHJpbmdbXV07XG5cbiAgbWFya0NsdXN0ZXJzKHRyZWU6IE5vZGVDdXR0ZWRUeXBlLFxuICAgIGRhdGFEZjogREcuRGF0YUZyYW1lLCBsZWFmQ29sTmFtZTogc3RyaW5nIHwgbnVsbCwgY2x1c3RlckNvbE5hbWU6IHN0cmluZywgbmE/OiBhbnkpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsfSBsZWFmQ29sTmFtZSBDb2x1bW4gbmFtZSBmb3IgbGVhZiBuYW1lIGluIG5ld2ljaywgbnVsbCAtIHVzZSByb3cgaW5kZXhcbiAgICovXG4gIGJ1aWxkQ2x1c3RlcnModHJlZTogTm9kZUN1dHRlZFR5cGUsXG4gICAgY2x1c3RlckRmOiBERy5EYXRhRnJhbWUsIGNsdXN0ZXJDb2xOYW1lOiBzdHJpbmcsIGxlYWZDb2xOYW1lOiBzdHJpbmcgfCBudWxsKTogdm9pZDtcblxuICAvKiogTW9kaWZpZXMgdGhlIHRyZWUgKHtAbGluayBub2RlfSkgY3V0dGluZyBhdCB7QGxpbmsgY3V0SGVpZ2h0fSBjcmVhdGluZyBleHRyYSBub2Rlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gbGVhZkNvbE5hbWUgQ29sdW1uIG5hbWUgZm9yIGxlYWYgbmFtZSBpbiBuZXdpY2ssIG51bGwgLSB1c2Ugcm93IGluZGV4XG4gICAqL1xuICBjdXRUcmVlVG9HcmlkKG5vZGU6IE5vZGVUeXBlLCBjdXRIZWlnaHQ6IG51bWJlciwgZGF0YURmOiBERy5EYXRhRnJhbWUsXG4gICAgbGVhZkNvbE5hbWU6IHN0cmluZywgY2x1c3RlckNvbE5hbWU6IHN0cmluZywgbmE/OiBhbnkpOiB2b2lkO1xuXG4gIC8qKiBHZW5lcmF0ZSB0cmVlIHN0cnVjdHVyZXMgd2l0aCB7QGxpbmsgc2l6ZX0gbm9kZXMgbnVtYmVyIChjb3VudGluZyBpbnRlcm5hbCkuKi9cbiAgZ2VuZXJhdGVUcmVlKHNpemU6IG51bWJlcik6IE5vZGVUeXBlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJlZUhlbHBlcigpOiBQcm9taXNlPElUcmVlSGVscGVyPiB7XG4gIGNvbnN0IGZ1bmNMaXN0ID0gREcuRnVuYy5maW5kKHtwYWNrYWdlOiAnRGVuZHJvZ3JhbScsIG5hbWU6ICdnZXRUcmVlSGVscGVyJ30pO1xuICBpZiAoZnVuY0xpc3QubGVuZ3RoID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignUGFja2FnZSBcIlBoeWxvVHJlZVZpZXdlclwiXCIgbXVzdCBiZSBpbnN0YWxsZWQgZm9yIFRyZWVIZWxwZXIuJyk7XG5cbiAgY29uc3QgcmVzOiBJVHJlZUhlbHBlciA9IChhd2FpdCBmdW5jTGlzdFswXS5wcmVwYXJlKCkuY2FsbCgpKS5nZXRPdXRwdXRQYXJhbVZhbHVlKCkgYXMgSVRyZWVIZWxwZXI7XG4gIHJldHVybiByZXM7XG59XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0cmVlLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBMER0QyxNQUFNLFVBQWdCLGFBQWE7O1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFFbEYsTUFBTSxHQUFHLEdBQWdCLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsRUFBaUIsQ0FBQztRQUNuRyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7Tm9kZUN1dHRlZFR5cGUsIE5vZGVUeXBlfSBmcm9tICcuL2luZGV4JztcblxuXG5leHBvcnQgaW50ZXJmYWNlIElUcmVlSGVscGVyIHtcbiAgLyoqIEdlbmVyYXRlcyBkYXRhIGZyYW1lIHdpdGggcm93IHBlciBub2RlLCBwYXJlbnQgcmVsYXRpb24sIGRpc3RhbmNlLCBhbm5vdGF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdpY2sgICAgICAgICAgICAgICAgTmV3aWNrIGZvcm1hdCBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICAgICAgICAgUmVzdWx0IGRhdGEgZnJhbWUgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbm9kZVByZWZpeCAgICAgICAgICAgIFByZWZpeCBmb3Igbm9kZXMgd2l0aCBhdXRvIGdlbmVyYXRlZCBuYW1lICAgKlxuICAgKiBAcGFyYW0ge2Jvb2x9ICAgZW1wdHlQYXJlbnRSb290U2tpcCAgIFNraXAgcm93IHdpdGggcm9vdCBub2RlIGFuZCBlbXB0eSBwYXJlbnQgKGZvciBOZXR3b3JrIERpYWdyYW0pXG4gICAqL1xuICBuZXdpY2tUb0RmKG5ld2ljazogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIG5vZGVQcmVmaXg/OiBzdHJpbmcsIGVtcHR5UGFyZW50Um9vdFNraXA/OiBib29sZWFuKTogREcuRGF0YUZyYW1lO1xuXG4gIHRvTmV3aWNrKG5vZGU6IE5vZGVUeXBlIHwgbnVsbCk6IHN0cmluZztcblxuICBnZXRMZWFmTGlzdDxUTm9kZSBleHRlbmRzIE5vZGVUeXBlPihub2RlOiBUTm9kZSk6IFROb2RlW107XG5cbiAgZ2V0Tm9kZUxpc3Q8VE5vZGUgZXh0ZW5kcyBOb2RlVHlwZT4obm9kZTogVE5vZGUpOiBUTm9kZVtdO1xuXG4gIC8qKiBGaWx0ZXJzIHRyZWUgYnkgbGVhdmVzIChieSBzZXQpLlxuICAgKiBBbiBpbnRlcm5hbCBub2RlIHdpbGwgYmUgZWxpbWluYXRlZCBvbmx5IGlmIGFsbCBpdHMgc3VicyAoY2hpbGRyZW4vbGVhdmVzKSBhcmUgZmlsdGVyZWQgb3V0IGJ5IHtsaW5rIEBsZWF2ZXN9LlxuICAgKi9cbiAgZmlsdGVyVHJlZUJ5TGVhdmVzKG5vZGU6IE5vZGVUeXBlLCBsZWF2ZXM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogTm9kZVR5cGUgfCBudWxsO1xuXG4gIC8qKiBDb2xsZWN0cyBub2RlcyBieSBsZWF2ZXMgKGJ5IHNldCkuXG4gICAqIE5vZGUgd2lsbCBiZSByZXR1cm5lZCBvbmx5IGlmIGFsbCBpdHMgc3VicyAoY2hpbGRyZW4vbGVhdmVzKSBhcmUgcHJlc2VudCBpbiB7QGxpbmsgbGVhdmVzfS5cbiAgICovXG4gIGdldE5vZGVzQnlMZWF2ZXM8VE5vZGUgZXh0ZW5kcyBOb2RlVHlwZT4obm9kZTogVE5vZGUsIGxlYXZlczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBUTm9kZVtdO1xuXG4gIHRyZWVDdXRBc0xlYXZlcyhub2RlOiBOb2RlVHlwZSwgY3V0SGVpZ2h0OiBudW1iZXIsIGN1cnJlbnRIZWlnaHQ/OiBudW1iZXIpOiBOb2RlVHlwZVtdO1xuXG4gIHRyZWVDdXRBc1RyZWUobm9kZTogTm9kZVR5cGUsIGN1dEhlaWdodDogbnVtYmVyLCBrZWVwU2hvcnRzPzogYm9vbGVhbiwgY3VycmVudEhlaWdodD86IG51bWJlcik6IE5vZGVUeXBlIHwgbnVsbDtcblxuICAvKiogUmVvcmRlciB0aGUgZ3JpZCdzIHJvd3MgYWNjb3JkaW5nIHRvIHRoZSBsZWF2ZXMnIG9yZGVyIGluIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsfSBsZWFmQ29sTmFtZSBDb2x1bW4gbmFtZSBmb3IgbGVhZiBuYW1lIGluIG5ld2ljaywgbnVsbCAtIHVzZSByb3cgaW5kZXhcbiAgICovXG4gIHNldEdyaWRPcmRlcih0cmVlOiBOb2RlVHlwZSwgZ3JpZDogREcuR3JpZCwgbGVhZkNvbE5hbWU6IHN0cmluZyB8IG51bGwpOiBbTm9kZVR5cGUsIHN0cmluZ1tdXTtcblxuICBtYXJrQ2x1c3RlcnModHJlZTogTm9kZUN1dHRlZFR5cGUsXG4gICAgZGF0YURmOiBERy5EYXRhRnJhbWUsIGxlYWZDb2xOYW1lOiBzdHJpbmcgfCBudWxsLCBjbHVzdGVyQ29sTmFtZTogc3RyaW5nLCBuYT86IGFueSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bGx9IGxlYWZDb2xOYW1lIENvbHVtbiBuYW1lIGZvciBsZWFmIG5hbWUgaW4gbmV3aWNrLCBudWxsIC0gdXNlIHJvdyBpbmRleFxuICAgKi9cbiAgYnVpbGRDbHVzdGVycyh0cmVlOiBOb2RlQ3V0dGVkVHlwZSxcbiAgICBjbHVzdGVyRGY6IERHLkRhdGFGcmFtZSwgY2x1c3RlckNvbE5hbWU6IHN0cmluZywgbGVhZkNvbE5hbWU6IHN0cmluZyB8IG51bGwpOiB2b2lkO1xuXG4gIC8qKiBNb2RpZmllcyB0aGUgdHJlZSAoe0BsaW5rIG5vZGV9KSBjdXR0aW5nIGF0IHtAbGluayBjdXRIZWlnaHR9IGNyZWF0aW5nIGV4dHJhIG5vZGVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsfSBsZWFmQ29sTmFtZSBDb2x1bW4gbmFtZSBmb3IgbGVhZiBuYW1lIGluIG5ld2ljaywgbnVsbCAtIHVzZSByb3cgaW5kZXhcbiAgICovXG4gIGN1dFRyZWVUb0dyaWQobm9kZTogTm9kZVR5cGUsIGN1dEhlaWdodDogbnVtYmVyLCBkYXRhRGY6IERHLkRhdGFGcmFtZSxcbiAgICBsZWFmQ29sTmFtZTogc3RyaW5nLCBjbHVzdGVyQ29sTmFtZTogc3RyaW5nLCBuYT86IGFueSk6IHZvaWQ7XG5cbiAgLyoqIEdlbmVyYXRlIHRyZWUgc3RydWN0dXJlcyB3aXRoIHtAbGluayBzaXplfSBub2RlcyBudW1iZXIgKGNvdW50aW5nIGludGVybmFsKS4qL1xuICBnZW5lcmF0ZVRyZWUoc2l6ZTogbnVtYmVyKTogTm9kZVR5cGU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUcmVlSGVscGVyKCk6IFByb21pc2U8SVRyZWVIZWxwZXI+IHtcbiAgY29uc3QgZnVuY0xpc3QgPSBERy5GdW5jLmZpbmQoe3BhY2thZ2U6ICdEZW5kcm9ncmFtJywgbmFtZTogJ2dldFRyZWVIZWxwZXInfSk7XG4gIGlmIChmdW5jTGlzdC5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYWNrYWdlIFwiUGh5bG9UcmVlVmlld2VyXCJcIiBtdXN0IGJlIGluc3RhbGxlZCBmb3IgVHJlZUhlbHBlci4nKTtcblxuICBjb25zdCByZXM6IElUcmVlSGVscGVyID0gKGF3YWl0IGZ1bmNMaXN0WzBdLnByZXBhcmUoKS5jYWxsKCkpLmdldE91dHB1dFBhcmFtVmFsdWUoKSBhcyBJVHJlZUhlbHBlcjtcbiAgcmV0dXJuIHJlcztcbn1cbiJdfQ==