@dbx-tools/shared-mastra 0.6.15 → 0.6.27
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/lib/src/marker.d.ts +8 -0
- package/lib/src/marker.js +11 -1
- package/lib/src/wire.d.ts +7 -7
- package/lib/src/wire.js +25 -1
- package/package.json +4 -4
- package/src/marker.ts +11 -0
- package/src/wire.ts +40 -0
package/lib/src/marker.d.ts
CHANGED
|
@@ -58,6 +58,14 @@ export type MarkerType = string;
|
|
|
58
58
|
* bogus label to obscure (drop the marker entirely).
|
|
59
59
|
*/
|
|
60
60
|
export declare function isUuid(id: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Build the exact embed marker the agent should place in prose.
|
|
63
|
+
*
|
|
64
|
+
* Tool results return this complete value so the model copies one opaque token
|
|
65
|
+
* rather than reconstructing it from `type` plus `id`. Reconstruction is where
|
|
66
|
+
* valid-looking but never-minted UUIDs enter transcripts and produce a 404.
|
|
67
|
+
*/
|
|
68
|
+
export declare function formatMarker(type: MarkerType, id: string): string;
|
|
61
69
|
/** One marker found in agent prose, with its source span. */
|
|
62
70
|
export interface ParsedMarker {
|
|
63
71
|
/** Marker kind token (e.g. `chart`, `data`); see {@link MarkerType}. */
|
package/lib/src/marker.js
CHANGED
|
@@ -80,6 +80,16 @@ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
|
|
|
80
80
|
export function isUuid(id) {
|
|
81
81
|
return UUID_RE.test(id);
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Build the exact embed marker the agent should place in prose.
|
|
85
|
+
*
|
|
86
|
+
* Tool results return this complete value so the model copies one opaque token
|
|
87
|
+
* rather than reconstructing it from `type` plus `id`. Reconstruction is where
|
|
88
|
+
* valid-looking but never-minted UUIDs enter transcripts and produce a 404.
|
|
89
|
+
*/
|
|
90
|
+
export function formatMarker(type, id) {
|
|
91
|
+
return `[${type}:${id}]`;
|
|
92
|
+
}
|
|
83
93
|
/**
|
|
84
94
|
* Parse every embed marker out of `text`, in source order. A single
|
|
85
95
|
* regex pass means matches never overlap, so callers can splice the
|
|
@@ -120,4 +130,4 @@ export function parseMarkers(text) {
|
|
|
120
130
|
export function stripIncompleteMarkerTail(text) {
|
|
121
131
|
return text.replace(/\[[^\s[\]]*$/, "");
|
|
122
132
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBWUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxTQUFTLEdBQUcsMENBQTBDLENBQUM7QUFFN0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sR0FBRyxpRUFBaUUsQ0FBQztBQUVsRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEVBQVU7SUFDL0IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFjRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sR0FBRyxHQUFtQixFQUFFLENBQUM7SUFDL0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLDZEQUE2RDtZQUM3RCxvREFBb0Q7WUFDcEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3BCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLO1lBQ0wsR0FBRyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFZO0lBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnQtcHJvc2UgZW1iZWQgbWFya2VyIGdyYW1tYXIuXG4gKlxuICogVGhlIE1hc3RyYSBhZ2VudCBpcyBpbnN0cnVjdGVkIHRvIGRlZmVyIHZpc3VhbGl6YXRpb25zIHRvIHRoZSBob3N0XG4gKiBVSSBieSBlbWJlZGRpbmcgbWFya2VycyBpbiBpdHMgbWFya2Rvd24gcmVwbHk7IHRoZSBVSSBwYXJzZXMgdGhlbVxuICogb3V0IGFuZCBzd2FwcyBpbiB0aGUgbWF0Y2hpbmcgc2xvdC4gVGhpcyBtb2R1bGUgaXMgdGhlIHNpbmdsZVxuICogc291cmNlIG9mIHRydXRoIGZvciB0aGF0IGdyYW1tYXIgc28gZXZlcnkgY29uc3VtZXIgcGFyc2VzIG1hcmtlcnNcbiAqIHRoZSBzYW1lIHdheSBhbmQgY2FuJ3QgZHJpZnQgZnJvbSB0aGUgc2hhcGVzIGRvY3VtZW50ZWQgb25cbiAqIHtAbGluayBDaGFydFNjaGVtYX0gLyB7QGxpbmsgU3RhdGVtZW50RGF0YVNjaGVtYX0gaW4gYHByb3RvY29sLnRzYFxuICogYW5kIHRoZSBpbnN0cnVjdGlvbnMgdGhlIHNlcnZlciBoYW5kcyB0aGUgbW9kZWwuXG4gKlxuICogT25lIGdyYW1tYXIsIG9wZW4tZW5kZWQgdHlwZS4gQSBtYXJrZXIgaXMgYFs8dHlwZT46PGlkPl1gLiBUaGVcbiAqIGA8dHlwZT5gIGlzIGFuIG9wYXF1ZSB0b2tlbiB0aGF0IG5hbWVzIHRoZSBlbWJlZCBraW5kOyB0aGUgaG9zdFxuICogcmVzb2x2ZXMgaXQgYWdhaW5zdCB0aGUgZ2VuZXJpYyBgL2VtYmVkLzx0eXBlPi88aWQ+YCByb3V0ZSwgd2hpY2hcbiAqIDQwNHMgYW55IHR5cGUgdGhlIHNlcnZlciBkb2Vzbid0IHJlZ2lzdGVyLiBUaGUgZ3JhbW1hciBkb2VzIE5PVFxuICogaGFyZC1jb2RlIHRoZSBrbm93biB0eXBlcyAtIG5ldyBlbWJlZCBraW5kcyB3b3JrIGVuZCB0byBlbmRcbiAqIHdpdGhvdXQgdG91Y2hpbmcgdGhpcyByZWdleC4gVG9kYXkgdGhlIHNlcnZlciByZWdpc3RlcnM6XG4gKlxuICogICAtIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgLSB0aGUgYDxjaGFydElkPmAgaXMgYSB2NCBVVUlEIG1pbnRlZCBieVxuICogICAgIHRoZSBjaGFydCBzdWJzeXN0ZW0gKGBwcmVwYXJlX2NoYXJ0YCAvIGByZW5kZXJfZGF0YWApIGFuZFxuICogICAgIHJlc29sdmVzIHRvIGEgY2FjaGVkIEVjaGFydHMgc3BlYy5cbiAqICAgLSBgW2RhdGE6PHN0YXRlbWVudElkPl1gIC0gdGhlIGA8c3RhdGVtZW50SWQ+YCBpcyBhIERhdGFicmlja3NcbiAqICAgICBzdGF0ZW1lbnQgaWQgKGEgdGltZS1vcmRlcmVkIFVVSUQpIGFuZCByZXNvbHZlcyB0byB0aGVcbiAqICAgICBzdGF0ZW1lbnQncyByb3dzLlxuICpcbiAqIFRoZSBgPGlkPmAgb2YgYSByZWFsIGVtYmVkIGlzIFVVSUQtc2hhcGVkIChgOC00LTQtNC0xMmAgaGV4KTogYm90aFxuICogaWQga2luZHMgYWJvdmUgYXJlIFVVSURzLCBqdXN0IGRpZmZlcmVudCB2ZXJzaW9ucyAoY2hhcnQgPSB2NCxcbiAqIHN0YXRlbWVudCA9IHY3LXN0eWxlKS4gVGhlIGdyYW1tYXIgZGVsaWJlcmF0ZWx5IGNhcHR1cmVzIEFOWVxuICogbm9uLWJyYWNrZXQgaWQgdG9rZW4sIG5vdCBqdXN0IFVVSUQtc2hhcGVkIG9uZXMsIHNvIGEgZmFicmljYXRlZFxuICogbWFya2VyIHRoZSBtb2RlbCBnbHVlZCB0b2dldGhlciBmcm9tIGEgbGFiZWxcbiAqIChlLmcuIGBbY2hhcnQ6cGxhY2Vob2xkZXJdYCBvclxuICogYFtjaGFydDowMWYxNjNiNi0xZWFjLXJlZ2lvbi1maWxsLW9vc11gKSBzdGlsbCBwYXJzZXMgYXMgYSBtYXJrZXIuXG4gKiBNYXRjaGluZyBpdCAtIHJhdGhlciB0aGFuIGxldHRpbmcgdGhlIGJyb2FkIHJlZ2V4IG1pc3MgaXQgLSBpcyB3aGF0XG4gKiBsZXRzIHRoZSBob3N0IFVJIGNvbnN1bWUgYW5kIG9ic2N1cmUgdGhlIGJvZ3VzIG1hcmtlciBpbnN0ZWFkIG9mXG4gKiBsZWFraW5nIHRoZSBsaXRlcmFsIGBbY2hhcnQ6Li4uXWAgdGV4dCBpbnRvIHRoZSByZW5kZXJlZCBwcm9zZS5cbiAqIFdoZXRoZXIgYW4gaWQgaXMgYSBnZW51aW5lIGVtYmVkIGlzIGEgc2VwYXJhdGUge0BsaW5rIGlzVXVpZH1cbiAqIGNoZWNrIHRoZSBjYWxsZXIgcnVucyBvbiB7QGxpbmsgUGFyc2VkTWFya2VyLmlkfS5cbiAqXG4gKiBQYXJzZSBldmVyeXRoaW5nIHRocm91Z2gge0BsaW5rIHBhcnNlTWFya2Vyc30sIHZhbGlkYXRlIHRoZSBpZCB3aXRoXG4gKiB7QGxpbmsgaXNVdWlkfSwgYW5kIGJyYW5jaCBvbiB0aGUgcmV0dXJuZWQge0BsaW5rIFBhcnNlZE1hcmtlci50eXBlfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqXG4gKiBUaGUgZW1iZWQga2luZCBuYW1lZCBieSBhIG1hcmtlcidzIGA8dHlwZT5gIHNlZ21lbnQuIExlZnQgYXMgYW5cbiAqIG9wZW4gYHN0cmluZ2AgKG5vdCBhIGNsb3NlZCB1bmlvbikgc28gdGhlIGdyYW1tYXIgc3RheXMgZ2VuZXJpYzpcbiAqIHRoZSBhdXRob3JpdGF0aXZlIHNldCBvZiBzdXBwb3J0ZWQgdHlwZXMgbGl2ZXMgaW4gdGhlIHNlcnZlcidzXG4gKiBgL2VtYmVkLzp0eXBlLzppZGAgcmVzb2x2ZXIgcmVnaXN0cnksIGFuZCBhbiB1bmtub3duIHR5cGUgc2ltcGx5XG4gKiA0MDRzLiBUaGUgdHdvIHR5cGVzIHRoZSBzZXJ2ZXIgc2hpcHMgdG9kYXkgYXJlIGBcImNoYXJ0XCJgIGFuZFxuICogYFwiZGF0YVwiYC5cbiAqL1xuZXhwb3J0IHR5cGUgTWFya2VyVHlwZSA9IHN0cmluZztcblxuLyoqXG4gKiBTaW5nbGUgbWF0Y2hlciBmb3IgQU5ZIGVtYmVkIG1hcmtlciwgcmVnYXJkbGVzcyBvZiB0eXBlLiBNYXRjaGVzXG4gKiBgWzx0eXBlPjo8aWQ+XWAuIENhcHR1cmUgZ3JvdXAgMSBpcyB0aGUgbWFya2VyIHR5cGUgdG9rZW4gKGUuZy5cbiAqIGBjaGFydGAsIGBkYXRhYCk7IGdyb3VwIDIgaXMgdGhlIGlkIC0gYW55IHJ1biBvZiBub24tYnJhY2tldCxcbiAqIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIE5PVCBjb25zdHJhaW5lZCB0byBhIFVVSUQgc2hhcGUuXG4gKlxuICogTmVpdGhlciB0aGUgdHlwZSBub3IgdGhlIGlkIHNoYXBlIGlzIGVudW1lcmF0ZWQgaGVyZS4gVGhlIHR5cGUgaXNcbiAqIGxlZnQgb3BlbiBiZWNhdXNlIHRoZSBzZXJ2ZXIncyByZXNvbHZlciByZWdpc3RyeSBkZWNpZGVzIHdoaWNoXG4gKiB0eXBlcyBhcmUgcmVhbCBhbmQgNDA0cyB0aGUgcmVzdCwgc28gYSBuZXcgZW1iZWQga2luZCBuZWVkcyBub1xuICogZ3JhbW1hciBjaGFuZ2UuIFRoZSBpZCBpcyBsZWZ0IGJyb2FkIG9uIHB1cnBvc2U6IGEgZmFicmljYXRlZFxuICogbWFya2VyIHRoZSBtb2RlbCBlbWl0cyBmcm9tIGEgbGFiZWwgKGUuZy4gYFtjaGFydDpwbGFjZWhvbGRlcl1gKVxuICogTVVTVCBzdGlsbCBtYXRjaCBzbyB0aGUgaG9zdCBVSSBjYW4gY29uc3VtZSBhbmQgb2JzY3VyZSBpdCByYXRoZXJcbiAqIHRoYW4gbGVhayB0aGUgbGl0ZXJhbCBgW2NoYXJ0Oi4uLl1gIHRleHQgaW50byB0aGUgcHJvc2UuIFRoZSBpZCBpc1xuICogdGhlbiB2YWxpZGF0ZWQgd2l0aCB7QGxpbmsgaXNVdWlkfSBkb3duc3RyZWFtOyBub24tVVVJRCBpZHMgcmVzb2x2ZVxuICogdG8gbm8gZW1iZWQuXG4gKlxuICogU2FmZSB0byBzaGFyZSBhcyBhIGAvZ2AgY29uc3RhbnQ6IGl0J3Mgb25seSBldmVyIGNvbnN1bWVkIHZpYVxuICoge0BsaW5rIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGx9LCB3aGljaCBjbG9uZXMgdGhlIHJlZ2V4IGFuZFxuICogbmV2ZXIgYWR2YW5jZXMgdGhpcyBvYmplY3QncyBgbGFzdEluZGV4YC4gKEEgYC5leGVjKClgL2AudGVzdCgpYFxuICogbG9vcCB3b3VsZCBuZWVkIGEgZnJlc2ggcmVnZXggZWFjaCB0aW1lLCBidXQgd2UgZG9uJ3QgZG8gdGhhdC4pXG4gKi9cbmNvbnN0IE1BUktFUl9SRSA9IC9cXFsoW0EtWmEtel1bQS1aYS16MC05Xy1dKik6KFteXFxdXFxzXSspXFxdL2c7XG5cbi8qKlxuICogVVVJRCBtYXRjaGVyIChgOC00LTQtNC0xMmAgaGV4LCBhbnkgdmVyc2lvbikgYW5jaG9yZWQgdG8gdGhlIHdob2xlXG4gKiBzdHJpbmcuIENvdmVycyB2NCBjaGFydCBpZHMgYW5kIHRpbWUtb3JkZXJlZCAodjctc3R5bGUpIHN0YXRlbWVudFxuICogaWRzIGFsaWtlLiBVc2VkIGJ5IHtAbGluayBpc1V1aWR9IHRvIHRlbGwgYSBnZW51aW5lIGVtYmVkIGlkIGFwYXJ0XG4gKiBmcm9tIGEgbGFiZWwgdGhlIG1vZGVsIGZhYnJpY2F0ZWQgaW50byBhIG1hcmtlci5cbiAqL1xuY29uc3QgVVVJRF9SRSA9IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pO1xuXG4vKipcbiAqIFdoZXRoZXIgYGlkYCBpcyBhIFVVSUQtc2hhcGVkIGVtYmVkIGlkLiBUaGUgbWFya2VyIGdyYW1tYXJcbiAqICh7QGxpbmsgTUFSS0VSX1JFfSkgbWF0Y2hlcyBhbnkgbm9uLWJyYWNrZXQgaWQgdG9rZW4gc28gZmFicmljYXRlZFxuICogbWFya2VycyBkb24ndCBsZWFrIGFzIGxpdGVyYWwgcHJvc2U7IHRoaXMgaXMgdGhlIGd1YXJkIGNhbGxlcnMgcnVuXG4gKiB0byBkZWNpZGUgd2hldGhlciBhbiBpZCBpcyBhIHJlYWwgZW1iZWQgKHJlbmRlciB0aGUgc2xvdCkgb3IgYVxuICogYm9ndXMgbGFiZWwgdG8gb2JzY3VyZSAoZHJvcCB0aGUgbWFya2VyIGVudGlyZWx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXVpZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBVVUlEX1JFLnRlc3QoaWQpO1xufVxuXG4vKiogT25lIG1hcmtlciBmb3VuZCBpbiBhZ2VudCBwcm9zZSwgd2l0aCBpdHMgc291cmNlIHNwYW4uICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZE1hcmtlciB7XG4gIC8qKiBNYXJrZXIga2luZCB0b2tlbiAoZS5nLiBgY2hhcnRgLCBgZGF0YWApOyBzZWUge0BsaW5rIE1hcmtlclR5cGV9LiAqL1xuICB0eXBlOiBNYXJrZXJUeXBlO1xuICAvKiogUmF3IGlkIGNhcHR1cmVkIGZyb20gdGhlIG1hcmtlciAoY2hhcnQgaWQgb3Igc3RhdGVtZW50IGlkKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIEluZGV4IG9mIHRoZSBtYXJrZXIncyBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHNvdXJjZSB0ZXh0LiAqL1xuICBzdGFydDogbnVtYmVyO1xuICAvKiogSW5kZXggb25lIHBhc3QgdGhlIG1hcmtlcidzIGxhc3QgY2hhcmFjdGVyLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJzZSBldmVyeSBlbWJlZCBtYXJrZXIgb3V0IG9mIGB0ZXh0YCwgaW4gc291cmNlIG9yZGVyLiBBIHNpbmdsZVxuICogcmVnZXggcGFzcyBtZWFucyBtYXRjaGVzIG5ldmVyIG92ZXJsYXAsIHNvIGNhbGxlcnMgY2FuIHNwbGljZSB0aGVcbiAqIHNwYW5zIGRpcmVjdGx5IHdpdGhvdXQgYSBzb3J0L2RlZHVwZSBzdGVwLiBUaGlzIGlzIHRoZSBvbmUgZW50cnlcbiAqIHBvaW50IGZvciBtYXJrZXIgcGFyc2luZzogdHlwZSBicmFuY2hpbmcgcnVucyBvbiB0aGUgcmV0dXJuZWRcbiAqIG1hcmtlcnMuIFRoZSBncmFtbWFyICh7QGxpbmsgTUFSS0VSX1JFfSkgbWF0Y2hlcyBhbnkgbm9uLWJyYWNrZXQgaWRcbiAqIHRva2VuLCBzbyBhIHJldHVybmVkIHtAbGluayBQYXJzZWRNYXJrZXIuaWR9IGlzIE5PVCBndWFyYW50ZWVkIHRvXG4gKiBiZSBhIHJlYWwgZW1iZWQgaWQgLSBydW4gaXQgdGhyb3VnaCB7QGxpbmsgaXNVdWlkfSB0byB0ZWxsIGFcbiAqIGdlbnVpbmUgZW1iZWQgYXBhcnQgZnJvbSBhIGZhYnJpY2F0ZWQgbGFiZWwsIHdoaWNoIHRoZSBjYWxsZXIgdGhlblxuICogb2JzY3VyZXMgcmF0aGVyIHRoYW4gcmVuZGVyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNYXJrZXJzKHRleHQ6IHN0cmluZyk6IFBhcnNlZE1hcmtlcltdIHtcbiAgY29uc3Qgb3V0OiBQYXJzZWRNYXJrZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRleHQubWF0Y2hBbGwoTUFSS0VSX1JFKSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gbWF0Y2guaW5kZXggPz8gMDtcbiAgICBvdXQucHVzaCh7XG4gICAgICAvLyBHcm91cCAxIGlzIHRoZSBgPHR5cGU+YCB0b2tlbjsgdGhlIHNlcnZlcidzIGVtYmVkIHJlZ2lzdHJ5XG4gICAgICAvLyAobm90IHRoaXMgcGFyc2VyKSBkZWNpZGVzIHdoZXRoZXIgaXQncyBzdXBwb3J0ZWQuXG4gICAgICB0eXBlOiBtYXRjaFsxXSA/PyBcIlwiLFxuICAgICAgaWQ6IG1hdGNoWzJdID8/IFwiXCIsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZDogc3RhcnQgKyBtYXRjaFswXS5sZW5ndGgsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBTdHJpcCBhIHRyYWlsaW5nIHBhcnRpYWwgbWFya2VyIChgW2NoYXJ0YCwgYFtkYXRhOjAxZjFgLCAuLi4pIHRoYXRcbiAqIGhhc24ndCByZWNlaXZlZCBpdHMgY2xvc2luZyBgXWAgeWV0LiBXaGlsZSB0aGUgbW9kZWwgc3RyZWFtc1xuICogdGV4dC1kZWx0YXMgYSBtYXJrZXIgYXJyaXZlcyBhY3Jvc3Mgc2V2ZXJhbCBjaHVua3MsIGFuZCByZW5kZXJpbmdcbiAqIGVhY2ggaW50ZXJpbSBzdGF0ZSB3b3VsZCBicmllZmx5IGZsYXNoIHRoZSBsaXRlcmFsIGBbY2hhcnQ6YWJjLWBcbiAqIHByZWZpeCBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2tldCBzd2FwcyBpdCBmb3IgYSBzbG90LiBIaWRpbmcgYW55XG4gKiB0cmFpbGluZyBgWzxub24td2hpdGVzcGFjZS1ub24tYnJhY2tldD4uLi5gIHN1ZmZpeCBrZWVwcyB0aGUgcHJvc2VcbiAqIHN0YWJsZSB1bnRpbCBlaXRoZXIgYSBgXWAgKGZ1bGwgbWFya2VyKSBvciB3aGl0ZXNwYWNlIChkZWZpbml0ZWx5XG4gKiBub3QgYSBtYXJrZXIpIGxhbmRzLiBQZXJzaXN0ZWQgdHJhbnNjcmlwdHMgbmV2ZXIgZW5kIG1pZC1tYXJrZXIsXG4gKiBzbyB0aGlzIGlzIGEgbm8tb3Agb24gcmVsb2FkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBJbmNvbXBsZXRlTWFya2VyVGFpbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cXFtbXlxcc1tcXF1dKiQvLCBcIlwiKTtcbn1cbiJdfQ==
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBWUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxTQUFTLEdBQUcsMENBQTBDLENBQUM7QUFFN0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sR0FBRyxpRUFBaUUsQ0FBQztBQUVsRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEVBQVU7SUFDL0IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWdCLEVBQUUsRUFBVTtJQUN2RCxPQUFPLElBQUksSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFjRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sR0FBRyxHQUFtQixFQUFFLENBQUM7SUFDL0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLDZEQUE2RDtZQUM3RCxvREFBb0Q7WUFDcEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3BCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLO1lBQ0wsR0FBRyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFZO0lBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnQtcHJvc2UgZW1iZWQgbWFya2VyIGdyYW1tYXIuXG4gKlxuICogVGhlIE1hc3RyYSBhZ2VudCBpcyBpbnN0cnVjdGVkIHRvIGRlZmVyIHZpc3VhbGl6YXRpb25zIHRvIHRoZSBob3N0XG4gKiBVSSBieSBlbWJlZGRpbmcgbWFya2VycyBpbiBpdHMgbWFya2Rvd24gcmVwbHk7IHRoZSBVSSBwYXJzZXMgdGhlbVxuICogb3V0IGFuZCBzd2FwcyBpbiB0aGUgbWF0Y2hpbmcgc2xvdC4gVGhpcyBtb2R1bGUgaXMgdGhlIHNpbmdsZVxuICogc291cmNlIG9mIHRydXRoIGZvciB0aGF0IGdyYW1tYXIgc28gZXZlcnkgY29uc3VtZXIgcGFyc2VzIG1hcmtlcnNcbiAqIHRoZSBzYW1lIHdheSBhbmQgY2FuJ3QgZHJpZnQgZnJvbSB0aGUgc2hhcGVzIGRvY3VtZW50ZWQgb25cbiAqIHtAbGluayBDaGFydFNjaGVtYX0gLyB7QGxpbmsgU3RhdGVtZW50RGF0YVNjaGVtYX0gaW4gYHByb3RvY29sLnRzYFxuICogYW5kIHRoZSBpbnN0cnVjdGlvbnMgdGhlIHNlcnZlciBoYW5kcyB0aGUgbW9kZWwuXG4gKlxuICogT25lIGdyYW1tYXIsIG9wZW4tZW5kZWQgdHlwZS4gQSBtYXJrZXIgaXMgYFs8dHlwZT46PGlkPl1gLiBUaGVcbiAqIGA8dHlwZT5gIGlzIGFuIG9wYXF1ZSB0b2tlbiB0aGF0IG5hbWVzIHRoZSBlbWJlZCBraW5kOyB0aGUgaG9zdFxuICogcmVzb2x2ZXMgaXQgYWdhaW5zdCB0aGUgZ2VuZXJpYyBgL2VtYmVkLzx0eXBlPi88aWQ+YCByb3V0ZSwgd2hpY2hcbiAqIDQwNHMgYW55IHR5cGUgdGhlIHNlcnZlciBkb2Vzbid0IHJlZ2lzdGVyLiBUaGUgZ3JhbW1hciBkb2VzIE5PVFxuICogaGFyZC1jb2RlIHRoZSBrbm93biB0eXBlcyAtIG5ldyBlbWJlZCBraW5kcyB3b3JrIGVuZCB0byBlbmRcbiAqIHdpdGhvdXQgdG91Y2hpbmcgdGhpcyByZWdleC4gVG9kYXkgdGhlIHNlcnZlciByZWdpc3RlcnM6XG4gKlxuICogICAtIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgLSB0aGUgYDxjaGFydElkPmAgaXMgYSB2NCBVVUlEIG1pbnRlZCBieVxuICogICAgIHRoZSBjaGFydCBzdWJzeXN0ZW0gKGBwcmVwYXJlX2NoYXJ0YCAvIGByZW5kZXJfZGF0YWApIGFuZFxuICogICAgIHJlc29sdmVzIHRvIGEgY2FjaGVkIEVjaGFydHMgc3BlYy5cbiAqICAgLSBgW2RhdGE6PHN0YXRlbWVudElkPl1gIC0gdGhlIGA8c3RhdGVtZW50SWQ+YCBpcyBhIERhdGFicmlja3NcbiAqICAgICBzdGF0ZW1lbnQgaWQgKGEgdGltZS1vcmRlcmVkIFVVSUQpIGFuZCByZXNvbHZlcyB0byB0aGVcbiAqICAgICBzdGF0ZW1lbnQncyByb3dzLlxuICpcbiAqIFRoZSBgPGlkPmAgb2YgYSByZWFsIGVtYmVkIGlzIFVVSUQtc2hhcGVkIChgOC00LTQtNC0xMmAgaGV4KTogYm90aFxuICogaWQga2luZHMgYWJvdmUgYXJlIFVVSURzLCBqdXN0IGRpZmZlcmVudCB2ZXJzaW9ucyAoY2hhcnQgPSB2NCxcbiAqIHN0YXRlbWVudCA9IHY3LXN0eWxlKS4gVGhlIGdyYW1tYXIgZGVsaWJlcmF0ZWx5IGNhcHR1cmVzIEFOWVxuICogbm9uLWJyYWNrZXQgaWQgdG9rZW4sIG5vdCBqdXN0IFVVSUQtc2hhcGVkIG9uZXMsIHNvIGEgZmFicmljYXRlZFxuICogbWFya2VyIHRoZSBtb2RlbCBnbHVlZCB0b2dldGhlciBmcm9tIGEgbGFiZWxcbiAqIChlLmcuIGBbY2hhcnQ6cGxhY2Vob2xkZXJdYCBvclxuICogYFtjaGFydDowMWYxNjNiNi0xZWFjLXJlZ2lvbi1maWxsLW9vc11gKSBzdGlsbCBwYXJzZXMgYXMgYSBtYXJrZXIuXG4gKiBNYXRjaGluZyBpdCAtIHJhdGhlciB0aGFuIGxldHRpbmcgdGhlIGJyb2FkIHJlZ2V4IG1pc3MgaXQgLSBpcyB3aGF0XG4gKiBsZXRzIHRoZSBob3N0IFVJIGNvbnN1bWUgYW5kIG9ic2N1cmUgdGhlIGJvZ3VzIG1hcmtlciBpbnN0ZWFkIG9mXG4gKiBsZWFraW5nIHRoZSBsaXRlcmFsIGBbY2hhcnQ6Li4uXWAgdGV4dCBpbnRvIHRoZSByZW5kZXJlZCBwcm9zZS5cbiAqIFdoZXRoZXIgYW4gaWQgaXMgYSBnZW51aW5lIGVtYmVkIGlzIGEgc2VwYXJhdGUge0BsaW5rIGlzVXVpZH1cbiAqIGNoZWNrIHRoZSBjYWxsZXIgcnVucyBvbiB7QGxpbmsgUGFyc2VkTWFya2VyLmlkfS5cbiAqXG4gKiBQYXJzZSBldmVyeXRoaW5nIHRocm91Z2gge0BsaW5rIHBhcnNlTWFya2Vyc30sIHZhbGlkYXRlIHRoZSBpZCB3aXRoXG4gKiB7QGxpbmsgaXNVdWlkfSwgYW5kIGJyYW5jaCBvbiB0aGUgcmV0dXJuZWQge0BsaW5rIFBhcnNlZE1hcmtlci50eXBlfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqXG4gKiBUaGUgZW1iZWQga2luZCBuYW1lZCBieSBhIG1hcmtlcidzIGA8dHlwZT5gIHNlZ21lbnQuIExlZnQgYXMgYW5cbiAqIG9wZW4gYHN0cmluZ2AgKG5vdCBhIGNsb3NlZCB1bmlvbikgc28gdGhlIGdyYW1tYXIgc3RheXMgZ2VuZXJpYzpcbiAqIHRoZSBhdXRob3JpdGF0aXZlIHNldCBvZiBzdXBwb3J0ZWQgdHlwZXMgbGl2ZXMgaW4gdGhlIHNlcnZlcidzXG4gKiBgL2VtYmVkLzp0eXBlLzppZGAgcmVzb2x2ZXIgcmVnaXN0cnksIGFuZCBhbiB1bmtub3duIHR5cGUgc2ltcGx5XG4gKiA0MDRzLiBUaGUgdHdvIHR5cGVzIHRoZSBzZXJ2ZXIgc2hpcHMgdG9kYXkgYXJlIGBcImNoYXJ0XCJgIGFuZFxuICogYFwiZGF0YVwiYC5cbiAqL1xuZXhwb3J0IHR5cGUgTWFya2VyVHlwZSA9IHN0cmluZztcblxuLyoqXG4gKiBTaW5nbGUgbWF0Y2hlciBmb3IgQU5ZIGVtYmVkIG1hcmtlciwgcmVnYXJkbGVzcyBvZiB0eXBlLiBNYXRjaGVzXG4gKiBgWzx0eXBlPjo8aWQ+XWAuIENhcHR1cmUgZ3JvdXAgMSBpcyB0aGUgbWFya2VyIHR5cGUgdG9rZW4gKGUuZy5cbiAqIGBjaGFydGAsIGBkYXRhYCk7IGdyb3VwIDIgaXMgdGhlIGlkIC0gYW55IHJ1biBvZiBub24tYnJhY2tldCxcbiAqIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIE5PVCBjb25zdHJhaW5lZCB0byBhIFVVSUQgc2hhcGUuXG4gKlxuICogTmVpdGhlciB0aGUgdHlwZSBub3IgdGhlIGlkIHNoYXBlIGlzIGVudW1lcmF0ZWQgaGVyZS4gVGhlIHR5cGUgaXNcbiAqIGxlZnQgb3BlbiBiZWNhdXNlIHRoZSBzZXJ2ZXIncyByZXNvbHZlciByZWdpc3RyeSBkZWNpZGVzIHdoaWNoXG4gKiB0eXBlcyBhcmUgcmVhbCBhbmQgNDA0cyB0aGUgcmVzdCwgc28gYSBuZXcgZW1iZWQga2luZCBuZWVkcyBub1xuICogZ3JhbW1hciBjaGFuZ2UuIFRoZSBpZCBpcyBsZWZ0IGJyb2FkIG9uIHB1cnBvc2U6IGEgZmFicmljYXRlZFxuICogbWFya2VyIHRoZSBtb2RlbCBlbWl0cyBmcm9tIGEgbGFiZWwgKGUuZy4gYFtjaGFydDpwbGFjZWhvbGRlcl1gKVxuICogTVVTVCBzdGlsbCBtYXRjaCBzbyB0aGUgaG9zdCBVSSBjYW4gY29uc3VtZSBhbmQgb2JzY3VyZSBpdCByYXRoZXJcbiAqIHRoYW4gbGVhayB0aGUgbGl0ZXJhbCBgW2NoYXJ0Oi4uLl1gIHRleHQgaW50byB0aGUgcHJvc2UuIFRoZSBpZCBpc1xuICogdGhlbiB2YWxpZGF0ZWQgd2l0aCB7QGxpbmsgaXNVdWlkfSBkb3duc3RyZWFtOyBub24tVVVJRCBpZHMgcmVzb2x2ZVxuICogdG8gbm8gZW1iZWQuXG4gKlxuICogU2FmZSB0byBzaGFyZSBhcyBhIGAvZ2AgY29uc3RhbnQ6IGl0J3Mgb25seSBldmVyIGNvbnN1bWVkIHZpYVxuICoge0BsaW5rIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGx9LCB3aGljaCBjbG9uZXMgdGhlIHJlZ2V4IGFuZFxuICogbmV2ZXIgYWR2YW5jZXMgdGhpcyBvYmplY3QncyBgbGFzdEluZGV4YC4gKEEgYC5leGVjKClgL2AudGVzdCgpYFxuICogbG9vcCB3b3VsZCBuZWVkIGEgZnJlc2ggcmVnZXggZWFjaCB0aW1lLCBidXQgd2UgZG9uJ3QgZG8gdGhhdC4pXG4gKi9cbmNvbnN0IE1BUktFUl9SRSA9IC9cXFsoW0EtWmEtel1bQS1aYS16MC05Xy1dKik6KFteXFxdXFxzXSspXFxdL2c7XG5cbi8qKlxuICogVVVJRCBtYXRjaGVyIChgOC00LTQtNC0xMmAgaGV4LCBhbnkgdmVyc2lvbikgYW5jaG9yZWQgdG8gdGhlIHdob2xlXG4gKiBzdHJpbmcuIENvdmVycyB2NCBjaGFydCBpZHMgYW5kIHRpbWUtb3JkZXJlZCAodjctc3R5bGUpIHN0YXRlbWVudFxuICogaWRzIGFsaWtlLiBVc2VkIGJ5IHtAbGluayBpc1V1aWR9IHRvIHRlbGwgYSBnZW51aW5lIGVtYmVkIGlkIGFwYXJ0XG4gKiBmcm9tIGEgbGFiZWwgdGhlIG1vZGVsIGZhYnJpY2F0ZWQgaW50byBhIG1hcmtlci5cbiAqL1xuY29uc3QgVVVJRF9SRSA9IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pO1xuXG4vKipcbiAqIFdoZXRoZXIgYGlkYCBpcyBhIFVVSUQtc2hhcGVkIGVtYmVkIGlkLiBUaGUgbWFya2VyIGdyYW1tYXJcbiAqICh7QGxpbmsgTUFSS0VSX1JFfSkgbWF0Y2hlcyBhbnkgbm9uLWJyYWNrZXQgaWQgdG9rZW4gc28gZmFicmljYXRlZFxuICogbWFya2VycyBkb24ndCBsZWFrIGFzIGxpdGVyYWwgcHJvc2U7IHRoaXMgaXMgdGhlIGd1YXJkIGNhbGxlcnMgcnVuXG4gKiB0byBkZWNpZGUgd2hldGhlciBhbiBpZCBpcyBhIHJlYWwgZW1iZWQgKHJlbmRlciB0aGUgc2xvdCkgb3IgYVxuICogYm9ndXMgbGFiZWwgdG8gb2JzY3VyZSAoZHJvcCB0aGUgbWFya2VyIGVudGlyZWx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXVpZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBVVUlEX1JFLnRlc3QoaWQpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBleGFjdCBlbWJlZCBtYXJrZXIgdGhlIGFnZW50IHNob3VsZCBwbGFjZSBpbiBwcm9zZS5cbiAqXG4gKiBUb29sIHJlc3VsdHMgcmV0dXJuIHRoaXMgY29tcGxldGUgdmFsdWUgc28gdGhlIG1vZGVsIGNvcGllcyBvbmUgb3BhcXVlIHRva2VuXG4gKiByYXRoZXIgdGhhbiByZWNvbnN0cnVjdGluZyBpdCBmcm9tIGB0eXBlYCBwbHVzIGBpZGAuIFJlY29uc3RydWN0aW9uIGlzIHdoZXJlXG4gKiB2YWxpZC1sb29raW5nIGJ1dCBuZXZlci1taW50ZWQgVVVJRHMgZW50ZXIgdHJhbnNjcmlwdHMgYW5kIHByb2R1Y2UgYSA0MDQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRNYXJrZXIodHlwZTogTWFya2VyVHlwZSwgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgWyR7dHlwZX06JHtpZH1dYDtcbn1cblxuLyoqIE9uZSBtYXJrZXIgZm91bmQgaW4gYWdlbnQgcHJvc2UsIHdpdGggaXRzIHNvdXJjZSBzcGFuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRNYXJrZXIge1xuICAvKiogTWFya2VyIGtpbmQgdG9rZW4gKGUuZy4gYGNoYXJ0YCwgYGRhdGFgKTsgc2VlIHtAbGluayBNYXJrZXJUeXBlfS4gKi9cbiAgdHlwZTogTWFya2VyVHlwZTtcbiAgLyoqIFJhdyBpZCBjYXB0dXJlZCBmcm9tIHRoZSBtYXJrZXIgKGNoYXJ0IGlkIG9yIHN0YXRlbWVudCBpZCkuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBJbmRleCBvZiB0aGUgbWFya2VyJ3MgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzb3VyY2UgdGV4dC4gKi9cbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqIEluZGV4IG9uZSBwYXN0IHRoZSBtYXJrZXIncyBsYXN0IGNoYXJhY3Rlci4gKi9cbiAgZW5kOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyc2UgZXZlcnkgZW1iZWQgbWFya2VyIG91dCBvZiBgdGV4dGAsIGluIHNvdXJjZSBvcmRlci4gQSBzaW5nbGVcbiAqIHJlZ2V4IHBhc3MgbWVhbnMgbWF0Y2hlcyBuZXZlciBvdmVybGFwLCBzbyBjYWxsZXJzIGNhbiBzcGxpY2UgdGhlXG4gKiBzcGFucyBkaXJlY3RseSB3aXRob3V0IGEgc29ydC9kZWR1cGUgc3RlcC4gVGhpcyBpcyB0aGUgb25lIGVudHJ5XG4gKiBwb2ludCBmb3IgbWFya2VyIHBhcnNpbmc6IHR5cGUgYnJhbmNoaW5nIHJ1bnMgb24gdGhlIHJldHVybmVkXG4gKiBtYXJrZXJzLiBUaGUgZ3JhbW1hciAoe0BsaW5rIE1BUktFUl9SRX0pIG1hdGNoZXMgYW55IG5vbi1icmFja2V0IGlkXG4gKiB0b2tlbiwgc28gYSByZXR1cm5lZCB7QGxpbmsgUGFyc2VkTWFya2VyLmlkfSBpcyBOT1QgZ3VhcmFudGVlZCB0b1xuICogYmUgYSByZWFsIGVtYmVkIGlkIC0gcnVuIGl0IHRocm91Z2gge0BsaW5rIGlzVXVpZH0gdG8gdGVsbCBhXG4gKiBnZW51aW5lIGVtYmVkIGFwYXJ0IGZyb20gYSBmYWJyaWNhdGVkIGxhYmVsLCB3aGljaCB0aGUgY2FsbGVyIHRoZW5cbiAqIG9ic2N1cmVzIHJhdGhlciB0aGFuIHJlbmRlcmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWFya2Vycyh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRNYXJrZXJbXSB7XG4gIGNvbnN0IG91dDogUGFyc2VkTWFya2VyW10gPSBbXTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKE1BUktFUl9SRSkpIHtcbiAgICBjb25zdCBzdGFydCA9IG1hdGNoLmluZGV4ID8/IDA7XG4gICAgb3V0LnB1c2goe1xuICAgICAgLy8gR3JvdXAgMSBpcyB0aGUgYDx0eXBlPmAgdG9rZW47IHRoZSBzZXJ2ZXIncyBlbWJlZCByZWdpc3RyeVxuICAgICAgLy8gKG5vdCB0aGlzIHBhcnNlcikgZGVjaWRlcyB3aGV0aGVyIGl0J3Mgc3VwcG9ydGVkLlxuICAgICAgdHlwZTogbWF0Y2hbMV0gPz8gXCJcIixcbiAgICAgIGlkOiBtYXRjaFsyXSA/PyBcIlwiLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQ6IHN0YXJ0ICsgbWF0Y2hbMF0ubGVuZ3RoLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogU3RyaXAgYSB0cmFpbGluZyBwYXJ0aWFsIG1hcmtlciAoYFtjaGFydGAsIGBbZGF0YTowMWYxYCwgLi4uKSB0aGF0XG4gKiBoYXNuJ3QgcmVjZWl2ZWQgaXRzIGNsb3NpbmcgYF1gIHlldC4gV2hpbGUgdGhlIG1vZGVsIHN0cmVhbXNcbiAqIHRleHQtZGVsdGFzIGEgbWFya2VyIGFycml2ZXMgYWNyb3NzIHNldmVyYWwgY2h1bmtzLCBhbmQgcmVuZGVyaW5nXG4gKiBlYWNoIGludGVyaW0gc3RhdGUgd291bGQgYnJpZWZseSBmbGFzaCB0aGUgbGl0ZXJhbCBgW2NoYXJ0OmFiYy1gXG4gKiBwcmVmaXggYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNrZXQgc3dhcHMgaXQgZm9yIGEgc2xvdC4gSGlkaW5nIGFueVxuICogdHJhaWxpbmcgYFs8bm9uLXdoaXRlc3BhY2Utbm9uLWJyYWNrZXQ+Li4uYCBzdWZmaXgga2VlcHMgdGhlIHByb3NlXG4gKiBzdGFibGUgdW50aWwgZWl0aGVyIGEgYF1gIChmdWxsIG1hcmtlcikgb3Igd2hpdGVzcGFjZSAoZGVmaW5pdGVseVxuICogbm90IGEgbWFya2VyKSBsYW5kcy4gUGVyc2lzdGVkIHRyYW5zY3JpcHRzIG5ldmVyIGVuZCBtaWQtbWFya2VyLFxuICogc28gdGhpcyBpcyBhIG5vLW9wIG9uIHJlbG9hZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwSW5jb21wbGV0ZU1hcmtlclRhaWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFxbW15cXHNbXFxdXSokLywgXCJcIik7XG59XG4iXX0=
|
package/lib/src/wire.d.ts
CHANGED
|
@@ -327,7 +327,7 @@ export type MastraSuggestionsResponse = z.infer<typeof MastraSuggestionsResponse
|
|
|
327
327
|
* discriminator value behave the same as if it were a
|
|
328
328
|
* `z.enum([...])`.
|
|
329
329
|
*/
|
|
330
|
-
export declare const ChartTypeSchema: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"scatter">, z.ZodLiteral<"pie">]>;
|
|
330
|
+
export declare const ChartTypeSchema: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"horizontalBar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"combo">, z.ZodLiteral<"waterfall">, z.ZodLiteral<"scatter">, z.ZodLiteral<"heatmap">, z.ZodLiteral<"radar">, z.ZodLiteral<"pie">, z.ZodLiteral<"funnel">, z.ZodLiteral<"treemap">, z.ZodLiteral<"custom">]>;
|
|
331
331
|
export type ChartType = z.infer<typeof ChartTypeSchema>;
|
|
332
332
|
/**
|
|
333
333
|
* Resolved chart plan a settled chart entry carries on its
|
|
@@ -335,7 +335,7 @@ export type ChartType = z.infer<typeof ChartTypeSchema>;
|
|
|
335
335
|
* straight into `<ReactECharts option={...}>`.
|
|
336
336
|
*/
|
|
337
337
|
export declare const ChartResultSchema: z.ZodObject<{
|
|
338
|
-
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"scatter">, z.ZodLiteral<"pie">]>;
|
|
338
|
+
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"horizontalBar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"combo">, z.ZodLiteral<"waterfall">, z.ZodLiteral<"scatter">, z.ZodLiteral<"heatmap">, z.ZodLiteral<"radar">, z.ZodLiteral<"pie">, z.ZodLiteral<"funnel">, z.ZodLiteral<"treemap">, z.ZodLiteral<"custom">]>;
|
|
339
339
|
option: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
340
340
|
}, z.core.$strip>;
|
|
341
341
|
export type ChartResult = z.infer<typeof ChartResultSchema>;
|
|
@@ -357,7 +357,7 @@ export declare const ChartSchema: z.ZodObject<{
|
|
|
357
357
|
chartId: z.ZodString;
|
|
358
358
|
error: z.ZodOptional<z.ZodString>;
|
|
359
359
|
result: z.ZodOptional<z.ZodObject<{
|
|
360
|
-
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"scatter">, z.ZodLiteral<"pie">]>;
|
|
360
|
+
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"horizontalBar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"combo">, z.ZodLiteral<"waterfall">, z.ZodLiteral<"scatter">, z.ZodLiteral<"heatmap">, z.ZodLiteral<"radar">, z.ZodLiteral<"pie">, z.ZodLiteral<"funnel">, z.ZodLiteral<"treemap">, z.ZodLiteral<"custom">]>;
|
|
361
361
|
option: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
362
362
|
}, z.core.$strip>>;
|
|
363
363
|
}, z.core.$strip>;
|
|
@@ -788,7 +788,7 @@ export type GenieDatasetData = z.infer<typeof GenieDatasetDataSchema>;
|
|
|
788
788
|
*/
|
|
789
789
|
export declare const GenieDatasetChartSchema: z.ZodObject<{
|
|
790
790
|
chartId: z.ZodString;
|
|
791
|
-
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"scatter">, z.ZodLiteral<"pie">]>;
|
|
791
|
+
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"horizontalBar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"combo">, z.ZodLiteral<"waterfall">, z.ZodLiteral<"scatter">, z.ZodLiteral<"heatmap">, z.ZodLiteral<"radar">, z.ZodLiteral<"pie">, z.ZodLiteral<"funnel">, z.ZodLiteral<"treemap">, z.ZodLiteral<"custom">]>;
|
|
792
792
|
}, z.core.$strip>;
|
|
793
793
|
export type GenieDatasetChart = z.infer<typeof GenieDatasetChartSchema>;
|
|
794
794
|
/**
|
|
@@ -806,7 +806,7 @@ export declare const GenieDatasetSchema: z.ZodObject<{
|
|
|
806
806
|
}, z.core.$strip>;
|
|
807
807
|
chart: z.ZodOptional<z.ZodObject<{
|
|
808
808
|
chartId: z.ZodString;
|
|
809
|
-
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"scatter">, z.ZodLiteral<"pie">]>;
|
|
809
|
+
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"horizontalBar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"combo">, z.ZodLiteral<"waterfall">, z.ZodLiteral<"scatter">, z.ZodLiteral<"heatmap">, z.ZodLiteral<"radar">, z.ZodLiteral<"pie">, z.ZodLiteral<"funnel">, z.ZodLiteral<"treemap">, z.ZodLiteral<"custom">]>;
|
|
810
810
|
}, z.core.$strip>>;
|
|
811
811
|
}, z.core.$strip>;
|
|
812
812
|
export type GenieDataset = z.infer<typeof GenieDatasetSchema>;
|
|
@@ -842,7 +842,7 @@ export declare const GenieSummaryItemSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
842
842
|
}, z.core.$strip>;
|
|
843
843
|
chart: z.ZodOptional<z.ZodObject<{
|
|
844
844
|
chartId: z.ZodString;
|
|
845
|
-
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"scatter">, z.ZodLiteral<"pie">]>;
|
|
845
|
+
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"horizontalBar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"combo">, z.ZodLiteral<"waterfall">, z.ZodLiteral<"scatter">, z.ZodLiteral<"heatmap">, z.ZodLiteral<"radar">, z.ZodLiteral<"pie">, z.ZodLiteral<"funnel">, z.ZodLiteral<"treemap">, z.ZodLiteral<"custom">]>;
|
|
846
846
|
}, z.core.$strip>>;
|
|
847
847
|
}, z.core.$strip>;
|
|
848
848
|
}, z.core.$strip>], "type">;
|
|
@@ -875,7 +875,7 @@ export declare const GenieAgentResultSchema: z.ZodObject<{
|
|
|
875
875
|
}, z.core.$strip>;
|
|
876
876
|
chart: z.ZodOptional<z.ZodObject<{
|
|
877
877
|
chartId: z.ZodString;
|
|
878
|
-
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"scatter">, z.ZodLiteral<"pie">]>;
|
|
878
|
+
chartType: z.ZodUnion<readonly [z.ZodLiteral<"bar">, z.ZodLiteral<"horizontalBar">, z.ZodLiteral<"line">, z.ZodLiteral<"area">, z.ZodLiteral<"combo">, z.ZodLiteral<"waterfall">, z.ZodLiteral<"scatter">, z.ZodLiteral<"heatmap">, z.ZodLiteral<"radar">, z.ZodLiteral<"pie">, z.ZodLiteral<"funnel">, z.ZodLiteral<"treemap">, z.ZodLiteral<"custom">]>;
|
|
879
879
|
}, z.core.$strip>>;
|
|
880
880
|
}, z.core.$strip>;
|
|
881
881
|
}, z.core.$strip>], "type">>;
|
package/lib/src/wire.js
CHANGED
|
@@ -286,14 +286,38 @@ export const ChartTypeSchema = z
|
|
|
286
286
|
z
|
|
287
287
|
.literal("bar")
|
|
288
288
|
.describe("comparing a numeric value across a small/medium set of discrete categories (top-N, ranking, group-by)"),
|
|
289
|
+
z
|
|
290
|
+
.literal("horizontalBar")
|
|
291
|
+
.describe("same as bar but categories on the y-axis - prefer when category labels are long or there are many categories"),
|
|
289
292
|
z
|
|
290
293
|
.literal("line")
|
|
291
294
|
.describe("ordered-axis trend (time series, sequence, rank) where the x-axis has natural order"),
|
|
292
295
|
z.literal("area").describe("stacked-trend emphasis - cumulative or composition over time"),
|
|
296
|
+
z
|
|
297
|
+
.literal("combo")
|
|
298
|
+
.describe("mixed bar + line (or area) series on shared categories - e.g. volume bars with a rate/trend line; set each series' `type`"),
|
|
299
|
+
z
|
|
300
|
+
.literal("waterfall")
|
|
301
|
+
.describe("bridge / running-total of signed step values (start -> deltas -> end) across ordered categories"),
|
|
293
302
|
z
|
|
294
303
|
.literal("scatter")
|
|
295
304
|
.describe("two-numeric-axis correlations between fields (e.g. price vs. quantity)"),
|
|
305
|
+
z
|
|
306
|
+
.literal("heatmap")
|
|
307
|
+
.describe("matrix intensity across two category axes - x labels in `categories`, one series per matrix row holding that row's values"),
|
|
308
|
+
z
|
|
309
|
+
.literal("radar")
|
|
310
|
+
.describe("multi-dimension comparison across a fixed set of axes (one indicator per category, one or more series of values)"),
|
|
296
311
|
z.literal("pie").describe("parts-of-a-whole when 2-7 categories sum to a meaningful total"),
|
|
312
|
+
z
|
|
313
|
+
.literal("funnel")
|
|
314
|
+
.describe("ordered stages that shrink (conversion, pipeline, attrition) - `{name, value}` slices"),
|
|
315
|
+
z
|
|
316
|
+
.literal("treemap")
|
|
317
|
+
.describe("parts-of-a-whole as nested rectangles when there are more than ~7 categories or a flat hierarchy of `{name, value}` slices"),
|
|
318
|
+
z
|
|
319
|
+
.literal("custom")
|
|
320
|
+
.describe("escape hatch for a chart none of the above can express (sankey, boxplot, candlestick, sunburst, gauge, network graph, calendar, parallel, ...) - hand-write the complete Echarts option instead of a plan"),
|
|
297
321
|
])
|
|
298
322
|
.describe("The chart shape that best matches the data and intent.");
|
|
299
323
|
/**
|
|
@@ -573,4 +597,4 @@ export const GenieAgentResultSchema = z.object({
|
|
|
573
597
|
summary: z.array(GenieSummaryItemSchema),
|
|
574
598
|
error: z.string().optional(),
|
|
575
599
|
});
|
|
576
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFHSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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LENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0lBQ2pFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7S0FDakIsQ0FBQztJQUNGLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdkIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDbEMsT0FBTyxFQUFFLGtCQUFrQjtLQUM1QixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBTUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixjQUFjLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztJQUN4QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IGNvbnRyYWN0IGZvciBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYDogdGhlXG4gKiBkZXBlbmRlbmN5LWZyZWUgem9kIHNjaGVtYXMgKyBpbmZlcnJlZCB0eXBlcyBldmVyeSBjb25zdW1lciAodGhlXG4gKiBSZWFjdCBjbGllbnQsIGJyb3dzZXIgYnVuZGxlcywgdGhlIHNlcnZlciBwbHVnaW4pIHNoYXJlcy5cbiAqXG4gKiBLZXB0IGZyZWUgb2YgYHBnYCwgYGZhc3RlbWJlZGAsIGFuZCB0aGUgTWFzdHJhIHJ1bnRpbWUgc28gdGhlXG4gKiBjbGllbnQgY2FuIGltcG9ydCB0aGVzZSBzY2hlbWFzIHdpdGhvdXQgZHJhZ2dpbmcgaW4gc2VydmVyLW9ubHlcbiAqIGRlcGVuZGVuY2llcy4gVGhyZWUgbGF5ZXJzIGxpdmUgaGVyZTpcbiAqXG4gKiAgIDEuIFRoZSBkZXNjcmlwdG9yIHB1Ymxpc2hlZCBieSBgTWFzdHJhUGx1Z2luLmNsaWVudENvbmZpZygpYFxuICogICAgICBwbHVzIHRoZSBSRVNUIHBheWxvYWRzIGl0cyByb3V0ZXMgcmV0dXJuIChtb2RlbHMsIGhpc3RvcnksXG4gKiAgICAgIHN1Z2dlc3Rpb25zLCBjaGFydCBlbWJlZHMsIHN0YXRlbWVudCBkYXRhKS4gVGhlIHNlcnZlclxuICogICAgICBkZXJpdmVzIGV2ZXJ5IHBhdGggZnJvbSB0aGUgcGx1Z2luIG1vdW50IGFuZCBwdWJsaXNoZXMgdGhlXG4gKiAgICAgIHJlc29sdmVkIHBhdGhzIHNvIHRoZSBjbGllbnQgY29tcG9zZXMgVVJMcyB3aXRob3V0XG4gKiAgICAgIGhhcmQtY29kaW5nIGAvYXBpL21hc3RyYWAgLSByZW5hbWUgdGhlIHBsdWdpbiBhbmQgdGhlIGNsaWVudFxuICogICAgICBrZWVwcyB3b3JraW5nLlxuICogICAyLiBUaGUgYGN0eC53cml0ZXJgIGV2ZW50IHZvY2FidWxhcnk6IHRoZSB3aXJlLWRlcml2ZWRcbiAqICAgICAge0BsaW5rIEdlbmllQ2hhdEV2ZW50fXMgZnJvbSBgQGRieC10b29scy9nZW5pZS1zaGFyZWRgIHBsdXNcbiAqICAgICAgdGhlIE1hc3RyYS1vbmx5IGFnZW50IGxpZmVjeWNsZSBldmVudHMsIHVuaWZpZWQgYXNcbiAqICAgICAge0BsaW5rIEdlbmllV3JpdGVyRXZlbnR9IHNvIHN1YnNjcmliZXJzIG5hcnJvdyBib3RoIGhhbHZlc1xuICogICAgICB3aXRoIGEgc2luZ2xlIGBzd2l0Y2ggKGV2ZW50LnR5cGUpYC5cbiAqICAgMy4gVGhlIEdlbmllIGFnZW50J3Mgd29ya2Zsb3cgb3V0cHV0IHNoYXBlc1xuICogICAgICAoe0BsaW5rIEdlbmllQWdlbnRSZXN1bHR9IGFuZCBpdHMgc3VtbWFyeSAvIGRhdGFzZXQgaXRlbXMpLlxuICpcbiAqIFRoZSByb3V0ZSBzZWdtZW50cyBsaXZlIGluIHRoZSBzaWJsaW5nIGByb3V0ZXMudHNgXG4gKiAoe0BsaW5rIE1BU1RSQV9ST1VURVN9KSBhbmQgdGhlIGVtYmVkLW1hcmtlciBncmFtbWFyIGluIGBtYXJrZXIudHNgLFxuICogc28gdGhpcyBmaWxlIHN0YXlzIHB1cmVseSBkZWNsYXJhdGl2ZSAoc2NoZW1hcyArIGluZmVycmVkIHR5cGVzKS5cbiAqIFRoZSBicm93c2VyIGNsaWVudCB0aGF0IGRyaXZlcyB0aGVzZSByb3V0ZXMgKGBNYXN0cmFQbHVnaW5DbGllbnRgKVxuICogc2hpcHMgZnJvbSBgQGRieC10b29scy9hcHBraXQtbWFzdHJhLXVpYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2VuaWVNb2RlbCwgdHlwZSBHZW5pZUNoYXRFdmVudCwgdHlwZSBNZXNzYWdlU3RhdHVzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGllbnQgY29uZmlnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OLXNhZmUgZGVzY3JpcHRvciBwdWJsaXNoZWQgYnkgdGhlIE1hc3RyYSBwbHVnaW4nc1xuICogYGNsaWVudENvbmZpZygpYC5cbiAqXG4gKiBPbmx5IHRoZSBpcnJlZHVjaWJsZSBkYXRhIGxpdmVzIGhlcmU6IGBiYXNlUGF0aGAgKHRoZSBvbmUgcGF0aCB0aGVcbiAqIGNsaWVudCBjYW4ndCBvdGhlcndpc2Uga25vdywgc2luY2UgaXQgZW5jb2RlcyB0aGUgcGx1Z2luJ3MgbW91bnRcbiAqIG5hbWUpIHBsdXMgdGhlIHJ1bnRpbWUgYWdlbnQgcm9zdGVyLiBFdmVyeSBjb25jcmV0ZSBlbmRwb2ludCBVUkwgaXNcbiAqIGRlcml2ZWQgZnJvbSBgYmFzZVBhdGhgIGJ5IHRoZSBicm93c2VyIGNsaWVudFxuICogKGBNYXN0cmFQbHVnaW5DbGllbnRgKSB1c2luZyB0aGUgc2hhcmVkIHtAbGluayBNQVNUUkFfUk9VVEVTfVxuICogc2VnbWVudHMsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBwdWJsaXNoIHBlci1yb3V0ZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGJhc2VQYXRoYDogcGx1Z2luIG1vdW50IHBhdGguIEFsd2F5cyBgL2FwaS88cGx1Z2luTmFtZT5gLiBGZWVkXG4gKiAgICAgaXQgdG8gYG5ldyBNYXN0cmFQbHVnaW5DbGllbnQoY29uZmlnKWAgKGZyb21cbiAqICAgICBgQGRieC10b29scy9hcHBraXQtbWFzdHJhLXVpYCkgdG8gZ2V0IGEgdHlwZWQgY2xpZW50IG92ZXIgZXZlcnlcbiAqICAgICByb3V0ZSBwbHVzIHRoZSBzdGFuZGFyZCBhZ2VudCBzdHJlYW0uXG4gKiAgIC0gYGRlZmF1bHRBZ2VudGA6IGFnZW50IGlkIHRoZSBjbGllbnQgY29udmVyc2VzIHdpdGggd2hlbiBpdFxuICogICAgIGRvZXNuJ3QgbmFtZSBvbmUuXG4gKiAgIC0gYGFnZW50c2A6IGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgaWQgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICogICAtIGBmZWVkYmFja0VuYWJsZWRgOiB3aGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIGxvZyB1c2VyIGZlZWRiYWNrIHRvXG4gKiAgICAgTUxmbG93IChNTGZsb3cgdHJhY2luZyBpcyBjb25maWd1cmVkKS4gRHJpdmVzIHdoZXRoZXIgdGhlIGNoYXQgVUlcbiAqICAgICBzdXJmYWNlcyB0aHVtYnMgLyBjb21tZW50IGNvbnRyb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgIHNvIGFcbiAqICAgICBjb25maWcgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHNlcnZlciAod2l0aG91dCB0aGUgZmllbGQpIHBhcnNlc1xuICogICAgIGNsZWFubHkgdG8gXCJvZmZcIi5cbiAqICAgLSBgY2hhdEFsd2F5c0F2YWlsYWJsZWA6IHdoZXRoZXIgdGhlIGFnZW50cycgRGF0YWJyaWNrcyBjYWxscyBydW4gYXMgdGhlXG4gKiAgICAgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIHJhdGhlciB0aGFuIG9uLWJlaGFsZi1vZiB0aGUgc2lnbmVkLWluIHVzZXIuIFdoZW5cbiAqICAgICBgdHJ1ZWAgdGhlIGNoYXQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIHNvIGEgVUkgdGhhdFxuICogICAgIGhpZGVzIGNoYXQgd2hlbiB0aGUgT0JPIHRva2VuIGlzIGFic2VudCBzaG91bGQgc2hvdyBpdCBhbnl3YXkuIERlZmF1bHRzXG4gKiAgICAgdG8gYGZhbHNlYCAodGhlIE9CTyAvIGBcInVzZXJcImAgaWRlbnRpdHkgbW9kZSksIHNvIGFuIG9sZGVyIHNlcnZlciB3aXRob3V0XG4gKiAgICAgdGhlIGZpZWxkIGtlZXBzIHRoZSBPQk8tZ2F0ZWQgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGJhc2VQYXRoOiB6LnN0cmluZygpLFxuICBkZWZhdWx0QWdlbnQ6IHouc3RyaW5nKCksXG4gIGFnZW50czogei5hcnJheSh6LnN0cmluZygpKSxcbiAgZmVlZGJhY2tFbmFibGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2hhdEFsd2F5c0F2YWlsYWJsZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUNsaWVudENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZGVmYXVsdC1tb2RlbFs/YWdlbnRJZD1dYC4gVGhlXG4gKiBzdGF0aWMgZGVmYXVsdCBtb2RlbCB0aGUgYWdlbnQgcmVzb2x2ZXMgdG8gd2hlbiB0aGUgY2xpZW50IHBpbnMgbm8gbW9kZWwsXG4gKiBhcyBib3RoIHRoZSByYXcgc2VydmluZy1lbmRwb2ludCBgbW9kZWxgIGlkIGFuZCBhIGBkaXNwbGF5TmFtZWAgKHRoZVxuICogaHVtYW5pemVkIGxhYmVsIHRoZSBwaWNrZXIgc2hvd3MpLiBCb3RoIGFyZSBgbnVsbGAgd2hlbiB0aGUgYWdlbnQgZGVjaWRlc1xuICogaXRzIG1vZGVsIGR5bmFtaWNhbGx5IGF0IGNhbGwgdGltZSAobm90aGluZyBzdGF0aWMgdG8gYWR2ZXJ0aXNlKS4gTGV0cyB0aGVcbiAqIHBpY2tlciBsYWJlbCBpdHMgZGVmYXVsdCBvcHRpb24gV0lUSE9VVCB3YWl0aW5nIG9uIHRoZSBgL21vZGVsc2AgY2F0YWxvZ3VlLFxuICogc28gaXQgbmV2ZXIgZmxhc2hlcyBhIHJhdyBpZCBvbiBsb2FkLiBLZXB0IG9mZiB0aGUgc3RhdGljIGJvb3RzdHJhcFxuICogYGNsaWVudENvbmZpZ2Agb24gcHVycG9zZTogaXQgaXMgcGVyLWFnZW50IGFuZCBjYW4gYmUgZHluYW1pYywgc28gaXQgaXNcbiAqIGZldGNoZWQgbGlrZSBgL21vZGVsc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgZGlzcGxheU5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgRGVmYXVsdE1vZGVsUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbW9kZWwgY2F0YWxvZ3VlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9tb2RlbHNgLiBXcmFwcyB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgbW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYX0gKHJlLWV4cG9ydGVkIGZyb21cbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGApIHNvIHRoZSBjYXRhbG9ndWVcbiAqIGRlc2NyaXB0b3IgaGFzIGEgc2luZ2xlIGRlZmluaXRpb24gdGhlIGNsaWVudCwgc2VydmVyLCBhbmQgdGhlXG4gKiBzdGFuZGFsb25lIGBAZGJ4LXRvb2xzL21vZGVsYCB0b29sa2l0IGFsbCBhZ3JlZSBvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5kcG9pbnRzOiB6LmFycmF5KG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjaGF0IGhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIHNoYXBlIGZvciBhbiBBSSBTREsgVjUgYFVJTWVzc2FnZWAuIERlZmluZWQgbG9jYWxseVxuICogc28gdGhlIHNoYXJlZCB0eXBlcyBwYWNrYWdlIHN0YXlzIGRlcGVuZGVuY3ktZnJlZSAobm8gYGFpYFxuICogaW1wb3J0KS4gVGhlIHJ1bnRpbWUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBgL2hpc3RvcnlgIGVuZHBvaW50XG4gKiBhcmUgcHJvZHVjZWQgYnkgYHRvQUlTZGtWNU1lc3NhZ2VzYCBhbmQgYXJlIDE6MSBjb21wYXRpYmxlIHdpdGhcbiAqIGBVSU1lc3NhZ2VgIGZyb20gdGhlIGBhaWAgcGFja2FnZTsgY2xpZW50cyBjYW4gc2FmZWx5IGNhc3Qgd2hlblxuICogbmVlZGVkLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJvbGU6IHouZW51bShbXCJzeXN0ZW1cIiwgXCJ1c2VyXCIsIFwiYXNzaXN0YW50XCJdKSxcbiAgcGFydHM6IHouYXJyYXkoei51bmtub3duKCkpLnJlYWRvbmx5KCksXG4gIG1ldGFkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vaGlzdG9yeWAuXG4gKlxuICogRmllbGRzOlxuICogICAtIGB1aU1lc3NhZ2VzYDogcGFnZSBvZiBVSS1mb3JtYXR0ZWQgbWVzc2FnZXMsIG9sZGVzdCAtPiBuZXdlc3QuXG4gKiAgICAgQWx3YXlzIGNocm9ub2xvZ2ljYWwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBwYWdpbmF0aW9uXG4gKiAgICAgb3JkZXIgc28gdGhlIGNsaWVudCBjYW4gcHJlcGVuZCB0aGUgYXJyYXkgdG8gdGhlIGxpdmVcbiAqICAgICB0cmFuc2NyaXB0IHdpdGhvdXQgc29ydGluZy5cbiAqICAgLSBgcGFnZWA6IHplcm8taW5kZXhlZCBwYWdlIHRoYXQgcHJvZHVjZWQgdGhpcyByZXNwb25zZS5cbiAqICAgLSBgcGVyUGFnZWA6IG51bWJlciBvZiBpdGVtcyByZXF1ZXN0ZWQgcGVyIHBhZ2UuXG4gKiAgIC0gYHRvdGFsYDogdG90YWwgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSB0aHJlYWQuXG4gKiAgIC0gYGhhc01vcmVgOiB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIG9sZGVyIHBhZ2UgaXMgc3RpbGxcbiAqICAgICBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFIaXN0b3J5UmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVpTWVzc2FnZXM6IHouYXJyYXkoTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVNjaGVtYSksXG4gIHBhZ2U6IHoubnVtYmVyKCksXG4gIHBlclBhZ2U6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLFxuICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhSGlzdG9yeVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhSGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS9oaXN0b3J5YC4gRGVsZXRlc1xuICogZXZlcnkgcGVyc2lzdGVkIG1lc3NhZ2UgKyB3b3JrZmxvdyBzbmFwc2hvdCB0aWVkIHRvIHRoZSBjYWxsZXInc1xuICogdGhyZWFkLCBzbyB0aGUgbmV4dCBjaGF0IHR1cm4gc3RhcnRzIGZyb20gYSBjbGVhbiBzbGF0ZS4gVGhlXG4gKiBzZXNzaW9uIGNvb2tpZSB0aGF0IGFuY2hvcnMgdGhlIHRocmVhZCBpZCBpcyBwcmVzZXJ2ZWQgc28gdGhlXG4gKiBjYWxsZXIgZG9lc24ndCBsb3NlIGl0cyBpZGVudGl0eSAtIG9ubHkgdGhlIGNvbnRlbnRzIGdvIGF3YXkuXG4gKlxuICogYG9rYCBpcyBhbHdheXMgYHRydWVgIG9uIHN1Y2Nlc3M7IHRoZSByZXNwb25zZSBvYmplY3QgaXMga2VwdFxuICogYXMgYSBzdHJ1Y3QgKHZzIGEgYmFyZSAyMDQpIHNvIGZ1dHVyZSBmaWVsZHMgKGUuZy4gYGRlbGV0ZWRBdGAsXG4gKiBgbWVzc2FnZXNgKSBjYW4gYmUgYWRkZWQgd2l0aG91dCBidW1waW5nIHRoZSBjb250cmFjdC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIGhpc3Rvcnkgd2FzIGNsZWFyZWQuXG4gKiAgIC0gYHRocmVhZElkYDogdGhyZWFkIGlkIHRoYXQgd2FzIHdpcGVkLlxuICogICAtIGBjbGVhcmVkYDogbnVtYmVyIG9mIG1lc3NhZ2VzIHRoZSB0aHJlYWQgaGVsZCBiZWZvcmVcbiAqICAgICBkZWxldGlvbi4gVXNlZnVsIGZvciBjbGllbnQtc2lkZSBcImNsZWFyZWQgMTIgbWVzc2FnZXNcIlxuICogICAgIHRvYXN0czsgYDBgIGlzIHJlcG9ydGVkIHdoZW4gdGhlIHRocmVhZCB3YXMgYWxyZWFkeSBlbXB0eVxuICogICAgIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBjbGVhcmVkOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFDbGVhckhpc3RvcnlSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhyZWFkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEEgc2luZ2xlIGNvbnZlcnNhdGlvbiB0aHJlYWQgdGhlIHJlc291cmNlIChhdXRoZW50aWNhdGVkIHVzZXIpIG93bnMsXG4gKiBhcyByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L3RocmVhZHNgLiBNaXJyb3JzIE1hc3RyYSdzXG4gKiBgU3RvcmFnZVRocmVhZFR5cGVgIGJ1dCB3aXRoIEpTT04tc2FmZSBJU08tODYwMSB0aW1lc3RhbXBzICh0aGUgd2lyZVxuICogY2FuJ3QgY2FycnkgYERhdGVgKS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGlkYDogdGhyZWFkIGlkLiBQYXNzIGl0IGJhY2sgYXMgdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyXG4gKiAgICAgKGBUSFJFQURfSURfSEVBREVSYCkgb24gYSBzdHJlYW0gLyBoaXN0b3J5IC8gZGVsZXRlIGNhbGwgdG8gYWN0XG4gKiAgICAgb24gdGhpcyBjb252ZXJzYXRpb24uXG4gKiAgIC0gYHRpdGxlYDogaHVtYW4tcmVhZGFibGUgdGl0bGUuIFByZXNlbnQgb25jZSB0aGUgYWdlbnQncyBtZW1vcnlcbiAqICAgICBoYXMgYXV0by1nZW5lcmF0ZWQgb25lIChhZnRlciB0aGUgZmlyc3QgdHVybik7IGFic2VudCBvbiBhXG4gKiAgICAgYnJhbmQtbmV3IHRocmVhZCwgc28gdGhlIFVJIGZhbGxzIGJhY2sgdG8gYSBwbGFjZWhvbGRlci5cbiAqICAgLSBgcmVzb3VyY2VJZGA6IG93bmluZyByZXNvdXJjZSAodGhlIHVzZXIgaWQpLiBBbHdheXMgdGhlIGNhbGxlcidzXG4gKiAgICAgb3duIHJlc291cmNlIC0gdGhlIGxpc3Qgcm91dGUgZmlsdGVycyBieSBpdCBzZXJ2ZXItc2lkZS5cbiAqICAgLSBgY3JlYXRlZEF0YCAvIGB1cGRhdGVkQXRgOiBJU08tODYwMSB0aW1lc3RhbXBzLiBgdXBkYXRlZEF0YCBpc1xuICogICAgIHRoZSBuYXR1cmFsIHNvcnQga2V5IGZvciBcIm1vc3QgcmVjZW50IGNvbnZlcnNhdGlvbnMgZmlyc3RcIi5cbiAqICAgLSBgbWV0YWRhdGFgOiBvcGFxdWUgdGhyZWFkIG1ldGFkYXRhLCBwYXNzZWQgdGhyb3VnaCB1bnRvdWNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFUaHJlYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXNvdXJjZUlkOiB6LnN0cmluZygpLFxuICBjcmVhdGVkQXQ6IHouc3RyaW5nKCksXG4gIHVwZGF0ZWRBdDogei5zdHJpbmcoKSxcbiAgbWV0YWRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVRocmVhZCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVRocmVhZFNjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vdGhyZWFkc2AuIE9uZSBwYWdlIG9mIHRoZVxuICogY2FsbGVyJ3MgY29udmVyc2F0aW9uIHRocmVhZHMsIG5ld2VzdCAoYHVwZGF0ZWRBdGAgREVTQykgZmlyc3QuXG4gKlxuICogRmllbGRzOlxuICogICAtIGB0aHJlYWRzYDogcGFnZSBvZiB0aHJlYWRzIGZvciB0aGUgY2FsbGVyJ3MgcmVzb3VyY2UuXG4gKiAgIC0gYHBhZ2VgOiB6ZXJvLWluZGV4ZWQgcGFnZSB0aGF0IHByb2R1Y2VkIHRoaXMgcmVzcG9uc2UuXG4gKiAgIC0gYHBlclBhZ2VgOiBudW1iZXIgb2YgaXRlbXMgcmVxdWVzdGVkIHBlciBwYWdlLlxuICogICAtIGB0b3RhbGA6IHRvdGFsIG51bWJlciBvZiB0aHJlYWRzIHRoZSByZXNvdXJjZSBvd25zLlxuICogICAtIGBoYXNNb3JlYDogdHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSBtb3JlIHBhZ2UgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICB0aHJlYWRzOiB6LmFycmF5KE1hc3RyYVRocmVhZFNjaGVtYSksXG4gIHBhZ2U6IHoubnVtYmVyKCksXG4gIHBlclBhZ2U6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLFxuICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVGhyZWFkc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYERFTEVURSAke2Jhc2VQYXRofS90aHJlYWRzYCAodGhyZWFkIGlkXG4gKiBzdXBwbGllZCB2aWEgdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC8gYHRocmVhZElkYCBxdWVyeSkuIFdpcGVzXG4gKiB0aGUgbmFtZWQgdGhyZWFkIGFuZCBldmVyeSBtZXNzYWdlIG9uIGl0LlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgdGhyZWFkIHdhcyBkZWxldGVkLlxuICogICAtIGB0aHJlYWRJZGA6IHRocmVhZCBpZCB0aGF0IHdhcyByZW1vdmVkLlxuICogICAtIGBkZWxldGVkYDogYHRydWVgIHdoZW4gYSB0aHJlYWQgcm93IGV4aXN0ZWQgYW5kIHdhcyByZW1vdmVkLFxuICogICAgIGBmYWxzZWAgd2hlbiBpdCB3YXMgYWxyZWFkeSBnb25lIChjYWxsIGlzIGlkZW1wb3RlbnQpLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9rOiB6LmxpdGVyYWwodHJ1ZSksXG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIHRocmVhZElkOiB6LnN0cmluZygpLFxuICBkZWxldGVkOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhRGVsZXRlVGhyZWFkUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFEZWxldGVUaHJlYWRSZXNwb25zZVNjaGVtYT47XG5cbi8qKiBMb25nZXN0IHRocmVhZCB0aXRsZSB0aGUgcmVuYW1lIHJvdXRlIGFjY2VwdHMgKHRyaW1tZWQgc2VydmVyLXNpZGUpLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9USFJFQURfVElUTEVfTUFYID0gMjAwO1xuXG4vKipcbiAqIEpTT04gYm9keSBmb3IgYFBBVENIICR7YmFzZVBhdGh9L3RocmVhZHNgICh0aHJlYWQgaWQgc3VwcGxpZWQgdmlhIHRoZVxuICogdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXIgLyBgdGhyZWFkSWRgIHF1ZXJ5KS4gUmVuYW1lcyBhIHNpbmdsZVxuICogY29udmVyc2F0aW9uLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgdGl0bGVgOiB0aGUgbmV3IGh1bWFuLXJlYWRhYmxlIHRpdGxlLiBUcmltbWVkIGFuZCBjYXBwZWQgYXRcbiAqICAgICB7QGxpbmsgTUFTVFJBX1RIUkVBRF9USVRMRV9NQVh9IGNoYXJhY3RlcnMgc2VydmVyLXNpZGU7IG11c3QgYmVcbiAqICAgICBub24tZW1wdHkgYWZ0ZXIgdHJpbW1pbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFVcGRhdGVUaHJlYWRSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICB0aXRsZTogei5zdHJpbmcoKS50cmltKCkubWluKDEpLm1heChNQVNUUkFfVEhSRUFEX1RJVExFX01BWCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFVcGRhdGVUaHJlYWRSZXF1ZXN0U2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYFBBVENIICR7YmFzZVBhdGh9L3RocmVhZHNgLiBFY2hvZXMgdGhlXG4gKiByZW5hbWVkIHRocmVhZCBpbiBpdHMgcG9zdC11cGRhdGUgd2lyZSBzaGFwZSBzbyB0aGUgY2xpZW50IGNhbiByZWZsZWN0XG4gKiB0aGUgbmV3IHRpdGxlIHdpdGhvdXQgYSByZS1mZXRjaC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYG9rYDogbGl0ZXJhbCBgdHJ1ZWAgb24gc3VjY2Vzcy5cbiAqICAgLSBgYWdlbnRJZGA6IGFnZW50IHdob3NlIHRocmVhZCB3YXMgcmVuYW1lZC5cbiAqICAgLSBgdGhyZWFkYDogdGhlIHVwZGF0ZWQgdGhyZWFkIChjYXJyaWVzIHRoZSBuZXcgYHRpdGxlYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFVcGRhdGVUaHJlYWRSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgdGhyZWFkOiBNYXN0cmFUaHJlYWRTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVXBkYXRlVGhyZWFkUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VnZ2VzdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vc3VnZ2VzdGlvbnNgLlxuICpcbiAqIENhcnJpZXMgdGhlIGN1cmF0ZWQgc3RhcnRlciBxdWVzdGlvbnMgZm9yIGFuIGFnZW50J3MgR2VuaWUgc3BhY2UgLVxuICogdGhlIGBzYW1wbGVfcXVlc3Rpb25zYCBhbiBhdXRob3IgY29uZmlndXJlZCBvbiB0aGUgc3BhY2UsIHN1cmZhY2VkXG4gKiBhcyBvbmUtdGFwIHByb21wdHMgb24gdGhlIGNoYXQncyBlbXB0eSBzdGF0ZS4gYHF1ZXN0aW9uc2AgaXMgZW1wdHlcbiAqIHdoZW4gdGhlIGFnZW50IGhhcyBubyBHZW5pZSBzcGFjZSAob3IgdGhlIHNwYWNlIGRlZmluZXMgbm9uZSksIHNvXG4gKiB0aGUgY2xpZW50IHJlbmRlcnMgbm90aGluZyBpbiB0aGF0IGNhc2UgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvXG4gKiBidWlsdC1pbiBleGFtcGxlIHByb21wdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBxdWVzdGlvbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXJ0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBBbGxvd2VkIGNoYXJ0IHR5cGVzIHRoZSBwbGFubmVyIGNhbiBwaWNrLiBEZWZpbmVkIGFzIGFcbiAqIGRpc2NyaW1pbmF0ZWQgbGl0ZXJhbCB1bmlvbiBzbyBlYWNoIHZhcmlhbnQgY2FycmllcyBpdHMgb3duXG4gKiBgLmRlc2NyaWJlKClgIGNsYXVzZSAtIHRoZSBzZXJ2ZXItc2lkZSBwbGFubmVyJ3MgcHJvbXB0XG4gKiBmb3JtYXR0ZXIgd2Fsa3MgYC5vcHRpb25zYCB0byBpbmxpbmUgdGhlIGRlc2NyaXB0aW9ucyBpbnRvIHRoZVxuICogbW9kZWwgaW5zdHJ1Y3Rpb25zLCBrZWVwaW5nIHRoZSBwcm9tcHQgaW4gbG9jay1zdGVwIHdpdGggdGhlXG4gKiBzY2hlbWEgYnkgY29uc3RydWN0aW9uLiBUaGUgcnVudGltZSB0eXBlIGlzIHRoZSBwbGFpbiBzdHJpbmdcbiAqIHVuaW9uIChgXCJiYXJcIiB8IFwibGluZVwiIHwgLi4uYCksIHNvIGNvbnN1bWVycyB0aGF0IGp1c3QgbmVlZCBhXG4gKiBkaXNjcmltaW5hdG9yIHZhbHVlIGJlaGF2ZSB0aGUgc2FtZSBhcyBpZiBpdCB3ZXJlIGFcbiAqIGB6LmVudW0oWy4uLl0pYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0VHlwZVNjaGVtYSA9IHpcbiAgLnVuaW9uKFtcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImJhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcImNvbXBhcmluZyBhIG51bWVyaWMgdmFsdWUgYWNyb3NzIGEgc21hbGwvbWVkaXVtIHNldCBvZiBkaXNjcmV0ZSBjYXRlZ29yaWVzICh0b3AtTiwgcmFua2luZywgZ3JvdXAtYnkpXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwibGluZVwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQtYXhpcyB0cmVuZCAodGltZSBzZXJpZXMsIHNlcXVlbmNlLCByYW5rKSB3aGVyZSB0aGUgeC1heGlzIGhhcyBuYXR1cmFsIG9yZGVyXCIsXG4gICAgICApLFxuICAgIHoubGl0ZXJhbChcImFyZWFcIikuZGVzY3JpYmUoXCJzdGFja2VkLXRyZW5kIGVtcGhhc2lzIC0gY3VtdWxhdGl2ZSBvciBjb21wb3NpdGlvbiBvdmVyIHRpbWVcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJzY2F0dGVyXCIpXG4gICAgICAuZGVzY3JpYmUoXCJ0d28tbnVtZXJpYy1heGlzIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGZpZWxkcyAoZS5nLiBwcmljZSB2cy4gcXVhbnRpdHkpXCIpLFxuICAgIHoubGl0ZXJhbChcInBpZVwiKS5kZXNjcmliZShcInBhcnRzLW9mLWEtd2hvbGUgd2hlbiAyLTcgY2F0ZWdvcmllcyBzdW0gdG8gYSBtZWFuaW5nZnVsIHRvdGFsXCIpLFxuICBdKVxuICAuZGVzY3JpYmUoXCJUaGUgY2hhcnQgc2hhcGUgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGRhdGEgYW5kIGludGVudC5cIik7XG5leHBvcnQgdHlwZSBDaGFydFR5cGUgPSB6LmluZmVyPHR5cGVvZiBDaGFydFR5cGVTY2hlbWE+O1xuXG4vKipcbiAqIFJlc29sdmVkIGNoYXJ0IHBsYW4gYSBzZXR0bGVkIGNoYXJ0IGVudHJ5IGNhcnJpZXMgb24gaXRzXG4gKiBgcmVzdWx0YCBmaWVsZC4gYG9wdGlvbmAgaXMgdGhlIGZ1bGwgRWNoYXJ0cyBzcGVjOyBwYXNzXG4gKiBzdHJhaWdodCBpbnRvIGA8UmVhY3RFQ2hhcnRzIG9wdGlvbj17Li4ufT5gLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxuICBvcHRpb246IHpcbiAgICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRnVsbHktcmVzb2x2ZWQgRWNoYXJ0cyBgRUNoYXJ0c09wdGlvbmAgSlNPTiBmb3IgdGhpcyBjaGFydCAtIGRyb3AgZGlyZWN0bHkgaW50byBhbiBFY2hhcnRzIGluc3RhbmNlIChvciBgPFJlYWN0RUNoYXJ0cyBvcHRpb249ey4uLn0gLz5gKSB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4gSW5jbHVkZXMgdGl0bGUgLyB0b29sdGlwIC8gbGVnZW5kIC8gZ3JpZCAvIGF4aXMgLyBzZXJpZXMgZGVmYXVsdHMgYWxyZWFkeSBtZXJnZWQgaW4uXCIsXG4gICAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ2hhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBDaGFydFJlc3VsdFNjaGVtYT47XG5cbi8qKlxuICogV2lyZS1mb3JtYXQgQU5EIHNlcnZlci1zaWRlIGNhY2hlIHNoYXBlIGZvciBhIGNoYXJ0IGVudHJ5LlxuICogVGhyZWUgbGlmZWN5Y2xlIHN0YXRlcyBpbmZlcnJlZCBmcm9tIHRoZSB0d28gb3B0aW9uYWwgZmllbGRzXG4gKiAobm8gZGlzY3JpbWluYXRvciBuZWVkZWQpOlxuICpcbiAqICAgLSBgcmVzdWx0YCBzZXQgICAgICAgICAgICAgICAgICAgIC0+IGNoYXJ0IGlzIHJlYWR5IHRvIHJlbmRlclxuICogICAtIGBlcnJvcmAgc2V0ICAgICAgICAgICAgICAgICAgICAgLT4gcGxhbm5lciAvIGRhdGEgZmV0Y2ggZmFpbGVkXG4gKiAgIC0gYm90aCBgcmVzdWx0YCBhbmQgYGVycm9yYCB1bnNldCAtPiBzdGlsbCBwcm9jZXNzaW5nXG4gKlxuICogYG9wdGlvbmAgaXMgdHlwZWQgYXMgYSBnZW5lcmljIHJlY29yZCBzbyB0aGlzIHBhY2thZ2Ugc3RheXNcbiAqIGRlcGVuZGVuY3ktZnJlZSBvZiBgZWNoYXJ0c2AuIFRoZSBzZXJ2ZXIgKGBjaGFydC50c2ApIGltcG9ydHNcbiAqIHRoaXMgc2NoZW1hIGRpcmVjdGx5OyB0aGUgZGVtbyBjbGllbnQgcG9sbHMgdGhlXG4gKiBgL2VtYmVkL2NoYXJ0LzppZGAgcm91dGUgYW5kIHBhcnNlcyByZXNwb25zZXMgYWdhaW5zdCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydElkOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJPcGFxdWUgaWQgbWludGVkIGJ5IHRoZSBjaGFydCBzdWJzeXN0ZW0uIEVtYmVkIHZlcmJhdGltIGFzIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgaW4gYWdlbnQgcHJvc2U7IHRoZSBob3N0IFVJIHJlc29sdmVzIGl0IGFnYWluc3QgdGhpcyBjYWNoZSBlbnRyeS5cIixcbiAgICApLFxuICBlcnJvcjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFcnJvciBtZXNzYWdlIHdoZW4gdGhlIGNoYXJ0IGZhaWxlZCAoZGF0YSBmZXRjaCBlcnJvciwgcGxhbm5lciBlcnJvciwgZW1wdHkgZGF0YXNldCkuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGByZXN1bHRgOyBhYnNlbnQgb24gc3VjY2VzcyBhbmQgd2hpbGUgcHJvY2Vzc2luZy5cIixcbiAgICApLFxuICByZXN1bHQ6IENoYXJ0UmVzdWx0U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgXCJSZXNvbHZlZCBjaGFydCBwbGFuLiBBYnNlbnQgd2hpbGUgcHJvY2Vzc2luZyBhbmQgd2hlbiB0aGUgcnVuIGVycm9yZWQuXCIsXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9lbWJlZC9kYXRhLzppZGAuXG4gKlxuICogTWlycm9ycyB0aGUgYWdlbnQtc2lkZSBgZ2V0X3N0YXRlbWVudGAgdG9vbCdzIG91dHB1dCBzbyB0aGVcbiAqIGhvc3QgVUkgYW5kIHRoZSBMTE0gc2VlIHRoZSBleGFjdCBzYW1lIHNoYXBlIGZvciB0aGUgc2FtZVxuICogc3RhdGVtZW50OyB0aGUgcm91dGUgaXMgd2hhdCByZXNvbHZlcyBgW2RhdGE6PHN0YXRlbWVudF9pZD5dYFxuICogbWFya2VycyB0aGUgYWdlbnQgZW1iZWRzIGluIHByb3NlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgY29sdW1uc2A6IGNvbHVtbiBuYW1lcyBpbiBkZWNsYXJhdGlvbiBvcmRlci5cbiAqICAgLSBgcm93c2A6IHJvdyByZWNvcmRzIGtleWVkIGJ5IGNvbHVtbiBuYW1lLiBDZWxsIHZhbHVlcyBhcmVcbiAqICAgICBlaXRoZXIgY29lcmNlZCBudW1iZXJzIG9yIHRoZSBvcmlnaW5hbCBzdHJpbmdzIChHZW5pZSAvXG4gKiAgICAgU3RhdGVtZW50IEV4ZWN1dGlvbiByZXR1cm5zIGV2ZXJ5IGNlbGwgYXMgYHN0cmluZyB8IG51bGxgO1xuICogICAgIG51bWVyaWMtbG9va2luZyBjZWxscyBhcmUgY29lcmNlZCBzZXJ2ZXItc2lkZSBzbyB0aGUgVUlcbiAqICAgICBjYW4gZm9ybWF0IHdpdGggYHRhYnVsYXItbnVtc2Agd2l0aG91dCByZS1wYXJzaW5nKS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgdXBzdHJlYW0gKGluZGVwZW5kZW50IG9mIHRoZVxuICogICAgIGBsaW1pdGAgY2FwKS4gQ29tcGFyZSBhZ2FpbnN0IGByb3dzLmxlbmd0aGAgdG8gZGV0ZWN0XG4gKiAgICAgdHJ1bmNhdGlvbiAtIGB0cnVuY2F0ZWRgIGlzIHRoZSBwcmVjb21wdXRlZCBmbGFnLlxuICogICAtIGB0cnVuY2F0ZWRgOiBgdHJ1ZWAgd2hlbiB0aGUgc2VydmVyIGNsaXBwZWQgcm93cyB0byBob25vclxuICogICAgIHRoZSByb3V0ZSdzIHJvdyBjYXA7IHRoZSBVSSBzaG91bGQgc3VyZmFjZSBhIFwic2hvd2luZyBOIG9mXG4gKiAgICAgTSByb3dzXCIgYWZmb3JkYW5jZSBpbiB0aGF0IGNhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0ZW1lbnREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxuICB0cnVuY2F0ZWQ6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBTdGF0ZW1lbnREYXRhID0gei5pbmZlcjx0eXBlb2YgU3RhdGVtZW50RGF0YVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHdyaXRlciBzdXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUaGUgYFRvb2xTdHJlYW1gLXNoYXBlZCB3cml0ZXIgdGhlIE1hc3RyYSBHZW5pZSBhZ2VudCBhbmQgY2hhcnRcbiAqIGhlbHBlcnMgcHVibGlzaCBldmVudHMgdGhyb3VnaC4gRGVmaW5lZCBoZXJlICh2cyBpbXBvcnRlZCBmcm9tXG4gKiBgQG1hc3RyYS9jb3JlYCkgc28gaGVscGVycyBpbiBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCBjYW5cbiAqIGFjY2VwdCBhbnkgb2JqZWN0IHdpdGggYSBgLndyaXRlYCBtZXRob2Qgd2l0aG91dCBkcmFnZ2luZ1xuICogTWFzdHJhJ3MgZnVsbCBgVG9vbFN0cmVhbWAgKGFuZCBpdHMgYWdlbnQgLyB0b29sIHR5cGluZ3MpIGludG9cbiAqIGNhbGwgc2l0ZXMuIFRoZSBhY3R1YWwgTWFzdHJhIGBjdHgud3JpdGVyYCBpcyBhc3NpZ25hYmxlIHRvXG4gKiB0aGlzIHNoYXBlIHNvIGNhbGxlcnMgcGFzcyBpdCBzdHJhaWdodCB0aHJvdWdoLlxuICpcbiAqIEtlcHQgYXMgYSBwbGFpbiBUeXBlU2NyaXB0IGludGVyZmFjZSAodnMgYSB6b2Qgc2NoZW1hKSBiZWNhdXNlXG4gKiB0aGUgY29udHJhY3QgaXMgYSBtZXRob2QgLSB6b2QgY2FuIG9ubHkgdmFsaWRhdGUgdGhlIHNoYXBlIHZpYVxuICogYHouY3VzdG9tYCwgd2hpY2ggYWRkcyBub2lzZSB3aXRob3V0IGJ1eWluZyBhbnkgcnVudGltZSBjaGVjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFXcml0ZXIge1xuICB3cml0ZTogKGNodW5rOiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tIG1hc3RyYS1vbmx5IGdlbmllLWFnZW50IGV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiB0aGUgR2VuaWUgdG9vbCBpbnZvY2F0aW9uIHN0YXJ0ZWQuXG4gKiBFbWl0dGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNhbGxpbmcgYWdlbnQgaW52b2tlcyB0aGUgR2VuaWVcbiAqIHRvb2wsIGJlZm9yZSBhbnkgaW5uZXIgYWdlbnQgLyB3aXJlIGFjdGl2aXR5LCBzbyB0aGUgVUkgY2FuXG4gKiBwb3AgYSBcIlRoaW5raW5nLi4uXCIgcGlsbCB0aGUgaW5zdGFudCB0aGUgbW9kZWwgZGVjaWRlcyB0b1xuICogZGVsZWdhdGUuIGBjb252ZXJzYXRpb25JZGAgLyBgbWVzc2FnZUlkYCBhcmUgYWJzZW50IG9uIHRoaXNcbiAqIGZpcnN0IGVtaXQgKG5vIEdlbmllIHJvdW5kLXRyaXAgeWV0KS4gRmllbGQgbmFtZXMgYXJlXG4gKiBjYW1lbENhc2UgKHZzIHRoZSBzbmFrZV9jYXNlIHdpcmUgZXZlbnRzKSB0byBtaXJyb3IgdGhlXG4gKiBHZW5pZSBhZ2VudCdzIG93biBpbnRlcm5hbCBkYXRhIHBsdW1iaW5nLlxuICovXG5leHBvcnQgY29uc3QgU3RhcnRlZEV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGFydGVkXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKipcbiAgICogR2VuaWUgY29udmVyc2F0aW9uIGlkLCBwb3B1bGF0ZWQgb25seSB3aGVuIHRoaXMgYHN0YXJ0ZWRgXG4gICAqIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGEgZm9sbG93LXVwIHR1cm4gb24gYW4gZXhpc3RpbmdcbiAgICogY29udmVyc2F0aW9uLiBBYnNlbnQgb24gdGhlIGZpcnN0IHR1cm4uXG4gICAqL1xuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogR2VuaWUgbWVzc2FnZSBpZCwgcG9wdWxhdGVkIG9ubHkgYWZ0ZXIgdGhlIGZpcnN0IHdpcmVcbiAgICogYG1lc3NhZ2VgIGV2ZW50IGxhbmRzLiBBYnNlbnQgb24gdGhlIGltbWVkaWF0ZS1vbi1pbnZva2VcbiAgICogZW1pdC5cbiAgICovXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogUXVlc3Rpb24gdGhlIEdlbmllIGFnZW50IHNlbnQgdG8gR2VuaWUuICovXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIFN0YXJ0ZWRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXJ0ZWRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvblxuICogZmluaXNoZWQuIENhcnJpZXMgdGhlIGh5ZHJhdGVkIGBzdGF0ZW1lbnRJZHNgIChyb3dzIGFyZSBmZXRjaGVkXG4gKiB2aWEgYGdldFN0YXRlbWVudGAgc2VwYXJhdGVseSkgYW5kIEdlbmllJ3MgZmluYWwgcHJvc2UgYW5zd2VyXG4gKiBzbyB0aGUgVUkgY2FuIG1vdmUgZnJvbSBcInRoaW5raW5nXCIgdG8gXCJhbnN3ZXJlZFwiIHdpdGhvdXRcbiAqIHdhaXRpbmcgZm9yIHRoZSBHZW5pZSBhZ2VudCdzIHdob2xlIHJlYXNvbmluZyBsb29wIHRvIGVuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFza0dlbmllRG9uZUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhc2tfZ2VuaWVfZG9uZVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBHZW5pZSdzIG5hdHVyYWwtbGFuZ3VhZ2UgYW5zd2VyIGZvciB0aGUgdHVybiwgaWYgYW55LiAqL1xuICBhbnN3ZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFN0YXRlbWVudCBpZHMgZm9yIGFueSBub24tZW1wdHkgcmVzdWx0IHNldHMgdGhpcyB0dXJuIHByb2R1Y2VkLiAqL1xuICBzdGF0ZW1lbnRJZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIC8qKlxuICAgKiBUZXJtaW5hbCB3aXJlIHN0YXR1cyAoYENPTVBMRVRFRGAgLyBgRkFJTEVEYCAvIGBDQU5DRUxMRURgKS5cbiAgICogTWlycm9ycyB0aGUgc291cmNlIGByZXN1bHRgIGV2ZW50J3Mgc3RhdHVzIHNvIHN1YnNjcmliZXJzXG4gICAqIGNhbiByZWFjdCB0byBhc2stbGV2ZWwgY29tcGxldGlvbiB3aXRob3V0IHJlLXdhbGtpbmcgaGlzdG9yeS5cbiAgICogVHJlYXRlZCBhcyBgei5jdXN0b208TWVzc2FnZVN0YXR1cz5gIGJlY2F1c2UgdGhlIFNESyBpcyB0aGVcbiAgICogc291cmNlIG9mIHRydXRoIGZvciB0aGUgZW51bSB2YWx1ZXMuXG4gICAqL1xuICBzdGF0dXM6IHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiksXG59KTtcbmV4cG9ydCB0eXBlIEFza0dlbmllRG9uZUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGVycm9yIGV2ZW50OiB0ZXJtaW5hbCBHZW5pZSBhZ2VudCAvIHRyYW5zcG9ydFxuICogZXJyb3IuIEdlbmllJ3Mgb3duIGBGQUlMRURgIC8gYENBTkNFTExFRGAgY29tZSB0aHJvdWdoIHRoZVxuICogd2lyZSdzIGByZXN1bHRgIGV2ZW50IC0gdGhpcyB2YXJpYW50IGlzIGZvciBmYWlsdXJlcyB0aGUgd2lyZVxuICogY2FuJ3QgcmVwcmVzZW50IChuZXR3b3JrLCBHZW5pZSBhZ2VudCBjcmFzaCwgcGxhbm5lciBlcnJvcixcbiAqIGV0Yy4pIHBsdXMgYSBVSS1mcmllbmRseSBtaXJyb3Igb2YgYHJlc3VsdGAgd2hlbiB0aGUgc3RhdHVzIGlzXG4gKiBub24tYENPTVBMRVRFRGAuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImVycm9yXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvcjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhR2VuaWVFcnJvckV2ZW50ID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IHRoZSBpbm5lciBHZW5pZSBhZ2VudCdzXG4gKiBzdHJ1Y3R1cmVkLW91dHB1dCBjb2VyY2lvbiBoYXMgbGFuZGVkLiBGaXJlcyBvbmNlIHBlciBHZW5pZVxuICogdG9vbCBpbnZvY2F0aW9uLCBBRlRFUiBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgY29tcGxldGVzIChpLmUuXG4gKiB0aGUgaW5uZXIgbG9vcCArIE1hc3RyYSdzIHN0cnVjdHVyaW5nIHBhc3MgaGF2ZSBib3RoXG4gKiBmaW5pc2hlZCkgYW5kIEJFRk9SRSB0aGUgd3JhcHBlciBoeWRyYXRlcyBlYWNoIGBkYXRhYCBpdGVtXG4gKiB3aXRoIGEgY2hhcnQuIFNpZ25hbHMgdG8gdGhlIGhvc3QgVUkgdGhhdCB0aGUgYWdlbnQgaGFzXG4gKiBzdG9wcGVkIHJlYXNvbmluZyBhbmQgaXMgbW92aW5nIGludG8gY2hhcnQgZ2VuZXJhdGlvbi5cbiAqXG4gKiBUaGUgc3RydWN0dXJpbmcgcGFzcyBpdHNlbGYgaXMgb3BhcXVlIChpdCBydW5zIGluc2lkZVxuICogTWFzdHJhJ3MgYGFnZW50LmdlbmVyYXRlKC4uLilgIHRvZ2V0aGVyIHdpdGggdGhlIHRvb2wgbG9vcClcbiAqIHNvIHRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgd2UgY2FuIG9mZmVyOyB3ZSBjYW4ndCBmaXJlIGFcbiAqIFwic3VtbWFyeSBzdGFydGVkXCIgZXZlbnQgdGhlIHdheSB3ZSBmaXJlIGBzdGFydGVkYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1bW1hcnlFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic3VtbWFyeVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYWdlbnQncyBzdHJ1Y3R1cmVkIHN1bW1hcnkuICovXG4gIGl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKiBDb3VudCBvZiBgdGV4dGAgLyBwcm9zZSBpdGVtcyBpbiB0aGUgc3VtbWFyeS4gKi9cbiAgdGV4dEl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKlxuICAgKiBDb3VudCBvZiBgZGF0YWAgaXRlbXMgdGhlIHdyYXBwZXIgd2lsbCBoeWRyYXRlIGludG8gY2hhcnRzLlxuICAgKiBUaGUgaG9zdCBVSSBjYW4gdXNlIHRoaXMgdG8gc2VlZCBOIGNoYXJ0IHNrZWxldG9ucyBiZWZvcmVcbiAgICogdGhlIHBlci1jaGFydCBldmVudHMgYXJyaXZlLlxuICAgKi9cbiAgZGF0YUl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1bW1hcnlFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN1bW1hcnlFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgZXZlbnQgdW5pb24uIEVhY2ggdmFyaWFudCB1c2VzIHRoZSBzYW1lIGZsYXRcbiAqIGB7dHlwZSwgLi4uZmllbGRzfWAgc2hhcGUgYXMge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSBzb1xuICogc3Vic2NyaWJlcnMgdW5pb24gYm90aCB3aXRoIGEgc2luZ2xlIGBzd2l0Y2ggKGV2ZW50LnR5cGUpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRFdmVudFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFN0YXJ0ZWRFdmVudFNjaGVtYSxcbiAgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWEsXG4gIE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYSxcbiAgU3VtbWFyeUV2ZW50U2NoZW1hLFxuXSk7XG5leHBvcnQgdHlwZSBHZW5pZUFnZW50RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIFRoZSB1bmlmaWVkIHdyaXRlci1ldmVudCB2b2NhYnVsYXJ5IHN1YnNjcmliZXJzIHNlZSBvblxuICogYGN0eC53cml0ZXJgOiB0aGUgd2lyZS1kZXJpdmVkIHtAbGluayBHZW5pZUNoYXRFdmVudH0gdW5pb25cbiAqICoqcGx1cyoqIE1hc3RyYS1vbmx5IGV2ZW50cyBmcm9tIHtAbGluayBHZW5pZUFnZW50RXZlbnR9LiBFYWNoXG4gKiB2YXJpYW50IGlzIGEgZmxhdCBge3R5cGUsIC4uLmZpZWxkc31gIG9iamVjdDsgY29uc3VtZXJzIG5hcnJvd1xuICogb24gYHR5cGVgIGFuZCByZWFkIGZpZWxkcyBpbmxpbmUgLSB0aGVyZSBpcyBubyBwYXlsb2FkIHdyYXBwZXJcbiAqIGFuZCBubyB3cml0ZXItYm91bmRhcnkgdHJhbnNsYXRvci5cbiAqXG4gKiBDb21wb3NlZCB2aWEgYHoudW5pb25gIChub3QgYHouZGlzY3JpbWluYXRlZFVuaW9uYCkgYmVjYXVzZVxuICogYm90aCBoYWx2ZXMgYXJlIHRoZW1zZWx2ZXMgZGlzY3JpbWluYXRlZCB1bmlvbnMgb24gdGhlIHNhbWVcbiAqIGB0eXBlYCBrZXkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVdyaXRlckV2ZW50U2NoZW1hID0gei51bmlvbihbXG4gIGdlbmllTW9kZWwuR2VuaWVDaGF0RXZlbnRTY2hlbWEsXG4gIEdlbmllQWdlbnRFdmVudFNjaGVtYSxcbl0pO1xuZXhwb3J0IHR5cGUgR2VuaWVXcml0ZXJFdmVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllV3JpdGVyRXZlbnRTY2hlbWE+O1xuXG4vKiogRGlzY3JpbWluYXRvciB0eXBlIGZvciB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0uICovXG5leHBvcnQgdHlwZSBHZW5pZVdyaXRlckV2ZW50VHlwZSA9IEdlbmllV3JpdGVyRXZlbnRbXCJ0eXBlXCJdO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1bW1hcnkgKyBkYXRhc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRhYnVsYXIgcGF5bG9hZCBlbWJlZGRlZCBpbiBldmVyeSB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX1cbiAqIGB2aXN1YWxpemVgIGRhdGFzZXQuIEFsd2F5cyBwcmVzZW50OiBoeWRyYXRlZCBieSB0aGUgd29ya2Zsb3cnc1xuICogYWdlbnQgc3RlcCBiZWZvcmUgdGhlIGZpbmFsaXplIHN0ZXAgcnVucywgc28gY29uc3VtZXJzIGNhbiByZW5kZXJcbiAqIGEgdGFibGUgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiBjaGFydC1wbGFubmVyIG91dGNvbWUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBjb2x1bW5zYDogY29sdW1uIG5hbWVzIGluIGRpc3BsYXkgb3JkZXIuXG4gKiAgIC0gYHJvd3NgOiB0YWJ1bGFyIHJvd3Mga2V5ZWQgYnkgY29sdW1uIG5hbWUuXG4gKiAgIC0gYHJvd0NvdW50YDogdG90YWwgcm93IGNvdW50IEdlbmllIHJlcG9ydGVkIChtYXkgZXhjZWVkXG4gKiAgICAgYHJvd3MubGVuZ3RoYCB3aGVuIHRoZSBzdGF0ZW1lbnQgd2FzIHRydW5jYXRlZCkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXREYXRhID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYT47XG5cbi8qKlxuICogU2xpbSBjaGFydCByZWZlcmVuY2UgYXR0YWNoZWQgdG8gYSB2aXN1YWxpemUgZGF0YXNldC4gT25seVxuICogcHJlc2VudCB3aGVuIHBsYW5uaW5nIHN1Y2NlZWRlZC5cbiAqXG4gKiBgb3B0aW9uYCBpcyBpbnRlbnRpb25hbGx5IE5PVCBpbmNsdWRlZC4gVGhlIHJlc29sdmVkIEVjaGFydHNcbiAqIHNwZWMgbGl2ZXMgb2ZmLWJhbmQgaW4gdGhlIGNoYXJ0IGNhY2hlOiB0aGUgaG9zdCBVSSBmZXRjaGVzIGl0XG4gKiBieSBgY2hhcnRJZGAgZnJvbSB0aGUgcGx1Z2luJ3MgZW1iZWQgcm91dGUgKGRlcml2ZWQgZnJvbVxuICogYGJhc2VQYXRoYCArIHtAbGluayBNQVNUUkFfUk9VVEVTfS5lbWJlZCwgaS5lLiBgL2VtYmVkL2NoYXJ0LzppZGA7XG4gKiBzZWUge0BsaW5rIENoYXJ0fSkuIEVtYmVkZGluZyB0aGUgZnVsbCBzcGVjIGlubGluZSB3b3VsZFxuICogaW5mbGF0ZSBldmVyeSBkYXRhc2V0IGJ5IHNldmVyYWwgS0IgcGVyIGNoYXJ0IGFuZCByb3VuZC10cmlwXG4gKiB0aHJvdWdoIHRoZSBMTE0gY29udGV4dCBmb3IgemVybyBiZW5lZml0ICh0aGUgbW9kZWwgb25seSBuZWVkc1xuICogdGhlIGBjaGFydElkYCB0byBwbGFjZSBhIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgbWFya2VyIGluIGl0c1xuICogcmVwbHkpLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHouc3RyaW5nKCksXG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXRDaGFydCA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldENoYXJ0U2NoZW1hPjtcblxuLyoqXG4gKiBEYXRhc2V0IGJ1bmRsZSBhdHRhY2hlZCB0byBhIHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfSBgdmlzdWFsaXplYFxuICogaXRlbS4gYGRhdGFgIGlzIGFsd2F5cyBwb3B1bGF0ZWQ7IGBjaGFydGAgaXMgYmVzdC1lZmZvcnQgYW5kXG4gKiBhYnNlbnQgd2hlbiB0aGUgd29ya2Zsb3cncyBjaGFydC1wbGFubmVyIGZhaWxlZCAodGltZW91dCxcbiAqIG1hbGZvcm1lZCBwbGFuLCBhYm9ydCkgc28gdGhlIGhvc3QgVUkgY2FuIHN0aWxsIHJlbmRlciB0aGVcbiAqIHVuZGVybHlpbmcgdGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGRhdGE6IEdlbmllRGF0YXNldERhdGFTY2hlbWEsXG4gIGNoYXJ0OiBHZW5pZURhdGFzZXRDaGFydFNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXRTY2hlbWE+O1xuXG4vKipcbiAqIE9uZSBpdGVtIGluc2lkZSB0aGUgR2VuaWUgd29ya2Zsb3cncyBmaW5hbCBzdW1tYXJ5LiBUaGVcbiAqIHdvcmtmbG93IHByb2R1Y2VzIGEgbWl4ZWQgc2VxdWVuY2Ugb2Y6XG4gKlxuICogICAtIGBzdHJpbmdgOiBhIG1hcmtkb3duIHBhcmFncmFwaCAoaW50ZXJwcmV0YXRpb24sIGNhbGxvdXRzLFxuICogICAgIHRyYW5zaXRpb25zIGJldHdlZW4gZGF0YSBibG9ja3MpLlxuICogICAtIGB2aXN1YWxpemVgOiBhIHJlcXVlc3QgZnJvbSB0aGUgYWdlbnQgc3RlcCB0byB2aXN1YWxpemUgYVxuICogICAgIHNwZWNpZmljIEdlbmllIHN0YXRlbWVudCBhdCB0aGlzIHBvc2l0aW9uIGluIHRoZSBwcm9zZS5cbiAqICAgICBUaGUgZmluYWxpemUgc3RlcCBoeWRyYXRlcyBgZGF0YXNldC5kYXRhYCAocm93cyBmcm9tIHRoZVxuICogICAgIG1hdGNoaW5nIGBzdGF0ZW1lbnRJZGApIGFuZCBhdHRhY2hlcyBgZGF0YXNldC5jaGFydGAgYWZ0ZXJcbiAqICAgICBydW5uaW5nIHRoZSBjaGFydC1wbGFubmVyLiBUaGUgYWdlbnQgTkVWRVIgcGlja3MgdGhlIGNoYXJ0XG4gKiAgICAgdHlwZSAtIGl0IG9ubHkgbWFya3Mgd2hlcmUgYSB2aXN1YWxpemF0aW9uIGJlbG9uZ3MuXG4gKlxuICogVGhlIGhvc3QgVUkgd2Fsa3MgdGhlIGFycmF5IGluIGRpc3BsYXkgb3JkZXIgdG8gY29tcG9zZSB0aGVcbiAqIGZpbmFsIGFzc2lzdGFudCBtZXNzYWdlLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2aXN1YWxpemVcIiksXG4gICAgc3RhdGVtZW50SWQ6IHouc3RyaW5nKCksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRhdGFzZXQ6IEdlbmllRGF0YXNldFNjaGVtYSxcbiAgfSksXG5dKTtcbmV4cG9ydCB0eXBlIEdlbmllU3VtbWFyeUl0ZW0gPSB6LmluZmVyPHR5cGVvZiBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbVR5cGUgPSBHZW5pZVN1bW1hcnlJdGVtW1widHlwZVwiXTtcblxuLyoqXG4gKiBUaGUgR2VuaWUgYWdlbnQncyBmaW5hbCBvdXRwdXQgc2hhcGUgLSB3aGF0IHRoZSBjYWxsaW5nIGFnZW50J3NcbiAqIEdlbmllIHRvb2wgcmV0dXJucyB0byB0aGUgY2FsbGluZyBMTE0uIFRoZSBgc3VtbWFyeWAgYXJyYXkgaXNcbiAqIHRoZSB1c2VyLWZhY2luZyByZW5kZXJhYmxlOyBgY29udmVyc2F0aW9uSWRgIGxldHMgdGhlIGNhbGxpbmdcbiAqIGFnZW50IChvciB0aGUgVUkpIGZvbGxvdyB1cCBpbiB0aGUgc2FtZSBHZW5pZSB0aHJlYWQgb24gdGhlXG4gKiBuZXh0IHR1cm4uXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdW1tYXJ5OiB6LmFycmF5KEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5pZUFnZW50UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYT47XG4iXX0=
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFHSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFHSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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Q0FDSCxDQUFDLENBQUM7QUFNSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ25CLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgY29udHJhY3QgZm9yIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgOiB0aGVcbiAqIGRlcGVuZGVuY3ktZnJlZSB6b2Qgc2NoZW1hcyArIGluZmVycmVkIHR5cGVzIGV2ZXJ5IGNvbnN1bWVyICh0aGVcbiAqIFJlYWN0IGNsaWVudCwgYnJvd3NlciBidW5kbGVzLCB0aGUgc2VydmVyIHBsdWdpbikgc2hhcmVzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBgcGdgLCBgZmFzdGVtYmVkYCwgYW5kIHRoZSBNYXN0cmEgcnVudGltZSBzbyB0aGVcbiAqIGNsaWVudCBjYW4gaW1wb3J0IHRoZXNlIHNjaGVtYXMgd2l0aG91dCBkcmFnZ2luZyBpbiBzZXJ2ZXItb25seVxuICogZGVwZW5kZW5jaWVzLiBUaHJlZSBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gVGhlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IGBNYXN0cmFQbHVnaW4uY2xpZW50Q29uZmlnKClgXG4gKiAgICAgIHBsdXMgdGhlIFJFU1QgcGF5bG9hZHMgaXRzIHJvdXRlcyByZXR1cm4gKG1vZGVscywgaGlzdG9yeSxcbiAqICAgICAgc3VnZ2VzdGlvbnMsIGNoYXJ0IGVtYmVkcywgc3RhdGVtZW50IGRhdGEpLiBUaGUgc2VydmVyXG4gKiAgICAgIGRlcml2ZXMgZXZlcnkgcGF0aCBmcm9tIHRoZSBwbHVnaW4gbW91bnQgYW5kIHB1Ymxpc2hlcyB0aGVcbiAqICAgICAgcmVzb2x2ZWQgcGF0aHMgc28gdGhlIGNsaWVudCBjb21wb3NlcyBVUkxzIHdpdGhvdXRcbiAqICAgICAgaGFyZC1jb2RpbmcgYC9hcGkvbWFzdHJhYCAtIHJlbmFtZSB0aGUgcGx1Z2luIGFuZCB0aGUgY2xpZW50XG4gKiAgICAgIGtlZXBzIHdvcmtpbmcuXG4gKiAgIDIuIFRoZSBgY3R4LndyaXRlcmAgZXZlbnQgdm9jYWJ1bGFyeTogdGhlIHdpcmUtZGVyaXZlZFxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9cyBmcm9tIGBAZGJ4LXRvb2xzL2dlbmllLXNoYXJlZGAgcGx1c1xuICogICAgICB0aGUgTWFzdHJhLW9ubHkgYWdlbnQgbGlmZWN5Y2xlIGV2ZW50cywgdW5pZmllZCBhc1xuICogICAgICB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0gc28gc3Vic2NyaWJlcnMgbmFycm93IGJvdGggaGFsdmVzXG4gKiAgICAgIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICogICAzLiBUaGUgR2VuaWUgYWdlbnQncyB3b3JrZmxvdyBvdXRwdXQgc2hhcGVzXG4gKiAgICAgICh7QGxpbmsgR2VuaWVBZ2VudFJlc3VsdH0gYW5kIGl0cyBzdW1tYXJ5IC8gZGF0YXNldCBpdGVtcykuXG4gKlxuICogVGhlIHJvdXRlIHNlZ21lbnRzIGxpdmUgaW4gdGhlIHNpYmxpbmcgYHJvdXRlcy50c2BcbiAqICh7QGxpbmsgTUFTVFJBX1JPVVRFU30pIGFuZCB0aGUgZW1iZWQtbWFya2VyIGdyYW1tYXIgaW4gYG1hcmtlci50c2AsXG4gKiBzbyB0aGlzIGZpbGUgc3RheXMgcHVyZWx5IGRlY2xhcmF0aXZlIChzY2hlbWFzICsgaW5mZXJyZWQgdHlwZXMpLlxuICogVGhlIGJyb3dzZXIgY2xpZW50IHRoYXQgZHJpdmVzIHRoZXNlIHJvdXRlcyAoYE1hc3RyYVBsdWdpbkNsaWVudGApXG4gKiBzaGlwcyBmcm9tIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmEtdWlgLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZW5pZU1vZGVsLCB0eXBlIEdlbmllQ2hhdEV2ZW50LCB0eXBlIE1lc3NhZ2VTdGF0dXMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcbmltcG9ydCB7IG1vZGVsIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNsaWVudCBjb25maWcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEpTT04tc2FmZSBkZXNjcmlwdG9yIHB1Ymxpc2hlZCBieSB0aGUgTWFzdHJhIHBsdWdpbidzXG4gKiBgY2xpZW50Q29uZmlnKClgLlxuICpcbiAqIE9ubHkgdGhlIGlycmVkdWNpYmxlIGRhdGEgbGl2ZXMgaGVyZTogYGJhc2VQYXRoYCAodGhlIG9uZSBwYXRoIHRoZVxuICogY2xpZW50IGNhbid0IG90aGVyd2lzZSBrbm93LCBzaW5jZSBpdCBlbmNvZGVzIHRoZSBwbHVnaW4ncyBtb3VudFxuICogbmFtZSkgcGx1cyB0aGUgcnVudGltZSBhZ2VudCByb3N0ZXIuIEV2ZXJ5IGNvbmNyZXRlIGVuZHBvaW50IFVSTCBpc1xuICogZGVyaXZlZCBmcm9tIGBiYXNlUGF0aGAgYnkgdGhlIGJyb3dzZXIgY2xpZW50XG4gKiAoYE1hc3RyYVBsdWdpbkNsaWVudGApIHVzaW5nIHRoZSBzaGFyZWQge0BsaW5rIE1BU1RSQV9ST1VURVN9XG4gKiBzZWdtZW50cywgc28gdGhlcmUncyBub3RoaW5nIHRvIHB1Ymxpc2ggcGVyLXJvdXRlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgYmFzZVBhdGhgOiBwbHVnaW4gbW91bnQgcGF0aC4gQWx3YXlzIGAvYXBpLzxwbHVnaW5OYW1lPmAuIEZlZWRcbiAqICAgICBpdCB0byBgbmV3IE1hc3RyYVBsdWdpbkNsaWVudChjb25maWcpYCAoZnJvbVxuICogICAgIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmEtdWlgKSB0byBnZXQgYSB0eXBlZCBjbGllbnQgb3ZlciBldmVyeVxuICogICAgIHJvdXRlIHBsdXMgdGhlIHN0YW5kYXJkIGFnZW50IHN0cmVhbS5cbiAqICAgLSBgZGVmYXVsdEFnZW50YDogYWdlbnQgaWQgdGhlIGNsaWVudCBjb252ZXJzZXMgd2l0aCB3aGVuIGl0XG4gKiAgICAgZG9lc24ndCBuYW1lIG9uZS5cbiAqICAgLSBgYWdlbnRzYDogZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBpZCBpbiByZWdpc3RyYXRpb24gb3JkZXIuXG4gKiAgIC0gYGZlZWRiYWNrRW5hYmxlZGA6IHdoZXRoZXIgdGhlIHNlcnZlciBjYW4gbG9nIHVzZXIgZmVlZGJhY2sgdG9cbiAqICAgICBNTGZsb3cgKE1MZmxvdyB0cmFjaW5nIGlzIGNvbmZpZ3VyZWQpLiBEcml2ZXMgd2hldGhlciB0aGUgY2hhdCBVSVxuICogICAgIHN1cmZhY2VzIHRodW1icyAvIGNvbW1lbnQgY29udHJvbHMuIERlZmF1bHRzIHRvIGBmYWxzZWAgc28gYVxuICogICAgIGNvbmZpZyBwdWJsaXNoZWQgYnkgYW4gb2xkZXIgc2VydmVyICh3aXRob3V0IHRoZSBmaWVsZCkgcGFyc2VzXG4gKiAgICAgY2xlYW5seSB0byBcIm9mZlwiLlxuICogICAtIGBjaGF0QWx3YXlzQXZhaWxhYmxlYDogd2hldGhlciB0aGUgYWdlbnRzJyBEYXRhYnJpY2tzIGNhbGxzIHJ1biBhcyB0aGVcbiAqICAgICBhcHAgc2VydmljZSBwcmluY2lwYWwgcmF0aGVyIHRoYW4gb24tYmVoYWxmLW9mIHRoZSBzaWduZWQtaW4gdXNlci4gV2hlblxuICogICAgIGB0cnVlYCB0aGUgY2hhdCB3b3JrcyBmb3IgYW55IGNhbGxlciB3aG8gY2FuIG9wZW4gdGhlIGFwcCwgc28gYSBVSSB0aGF0XG4gKiAgICAgaGlkZXMgY2hhdCB3aGVuIHRoZSBPQk8gdG9rZW4gaXMgYWJzZW50IHNob3VsZCBzaG93IGl0IGFueXdheS4gRGVmYXVsdHNcbiAqICAgICB0byBgZmFsc2VgICh0aGUgT0JPIC8gYFwidXNlclwiYCBpZGVudGl0eSBtb2RlKSwgc28gYW4gb2xkZXIgc2VydmVyIHdpdGhvdXRcbiAqICAgICB0aGUgZmllbGQga2VlcHMgdGhlIE9CTy1nYXRlZCBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgYmFzZVBhdGg6IHouc3RyaW5nKCksXG4gIGRlZmF1bHRBZ2VudDogei5zdHJpbmcoKSxcbiAgYWdlbnRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBmZWVkYmFja0VuYWJsZWQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBjaGF0QWx3YXlzQXZhaWxhYmxlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhQ2xpZW50Q29uZmlnID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhQ2xpZW50Q29uZmlnU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9kZWZhdWx0LW1vZGVsWz9hZ2VudElkPV1gLiBUaGVcbiAqIHN0YXRpYyBkZWZhdWx0IG1vZGVsIHRoZSBhZ2VudCByZXNvbHZlcyB0byB3aGVuIHRoZSBjbGllbnQgcGlucyBubyBtb2RlbCxcbiAqIGFzIGJvdGggdGhlIHJhdyBzZXJ2aW5nLWVuZHBvaW50IGBtb2RlbGAgaWQgYW5kIGEgYGRpc3BsYXlOYW1lYCAodGhlXG4gKiBodW1hbml6ZWQgbGFiZWwgdGhlIHBpY2tlciBzaG93cykuIEJvdGggYXJlIGBudWxsYCB3aGVuIHRoZSBhZ2VudCBkZWNpZGVzXG4gKiBpdHMgbW9kZWwgZHluYW1pY2FsbHkgYXQgY2FsbCB0aW1lIChub3RoaW5nIHN0YXRpYyB0byBhZHZlcnRpc2UpLiBMZXRzIHRoZVxuICogcGlja2VyIGxhYmVsIGl0cyBkZWZhdWx0IG9wdGlvbiBXSVRIT1VUIHdhaXRpbmcgb24gdGhlIGAvbW9kZWxzYCBjYXRhbG9ndWUsXG4gKiBzbyBpdCBuZXZlciBmbGFzaGVzIGEgcmF3IGlkIG9uIGxvYWQuIEtlcHQgb2ZmIHRoZSBzdGF0aWMgYm9vdHN0cmFwXG4gKiBgY2xpZW50Q29uZmlnYCBvbiBwdXJwb3NlOiBpdCBpcyBwZXItYWdlbnQgYW5kIGNhbiBiZSBkeW5hbWljLCBzbyBpdCBpc1xuICogZmV0Y2hlZCBsaWtlIGAvbW9kZWxzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRNb2RlbFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBhZ2VudElkOiB6LnN0cmluZygpLFxuICBtb2RlbDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBkaXNwbGF5TmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBEZWZhdWx0TW9kZWxSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIERlZmF1bHRNb2RlbFJlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtb2RlbCBjYXRhbG9ndWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L21vZGVsc2AuIFdyYXBzIHRoZSBzaGFyZWRcbiAqIHtAbGluayBtb2RlbC5TZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hfSAocmUtZXhwb3J0ZWQgZnJvbVxuICogYEBkYngtdG9vbHMvc2hhcmVkLW1vZGVsYCkgc28gdGhlIGNhdGFsb2d1ZVxuICogZGVzY3JpcHRvciBoYXMgYSBzaW5nbGUgZGVmaW5pdGlvbiB0aGUgY2xpZW50LCBzZXJ2ZXIsIGFuZCB0aGVcbiAqIHN0YW5kYWxvbmUgYEBkYngtdG9vbHMvbW9kZWxgIHRvb2xraXQgYWxsIGFncmVlIG9uLlxuICovXG5leHBvcnQgY29uc3QgU2VydmluZ0VuZHBvaW50c1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBlbmRwb2ludHM6IHouYXJyYXkobW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYSksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXQgaGlzdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFN0cnVjdHVyYWwgc2hhcGUgZm9yIGFuIEFJIFNESyBWNSBgVUlNZXNzYWdlYC4gRGVmaW5lZCBsb2NhbGx5XG4gKiBzbyB0aGUgc2hhcmVkIHR5cGVzIHBhY2thZ2Ugc3RheXMgZGVwZW5kZW5jeS1mcmVlIChubyBgYWlgXG4gKiBpbXBvcnQpLiBUaGUgcnVudGltZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGAvaGlzdG9yeWAgZW5kcG9pbnRcbiAqIGFyZSBwcm9kdWNlZCBieSBgdG9BSVNka1Y1TWVzc2FnZXNgIGFuZCBhcmUgMToxIGNvbXBhdGlibGUgd2l0aFxuICogYFVJTWVzc2FnZWAgZnJvbSB0aGUgYGFpYCBwYWNrYWdlOyBjbGllbnRzIGNhbiBzYWZlbHkgY2FzdCB3aGVuXG4gKiBuZWVkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcm9sZTogei5lbnVtKFtcInN5c3RlbVwiLCBcInVzZXJcIiwgXCJhc3Npc3RhbnRcIl0pLFxuICBwYXJ0czogei5hcnJheSh6LnVua25vd24oKSkucmVhZG9ubHkoKSxcbiAgbWV0YWRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFIaXN0b3J5VUlNZXNzYWdlU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9oaXN0b3J5YC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYHVpTWVzc2FnZXNgOiBwYWdlIG9mIFVJLWZvcm1hdHRlZCBtZXNzYWdlcywgb2xkZXN0IC0+IG5ld2VzdC5cbiAqICAgICBBbHdheXMgY2hyb25vbG9naWNhbCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIHBhZ2luYXRpb25cbiAqICAgICBvcmRlciBzbyB0aGUgY2xpZW50IGNhbiBwcmVwZW5kIHRoZSBhcnJheSB0byB0aGUgbGl2ZVxuICogICAgIHRyYW5zY3JpcHQgd2l0aG91dCBzb3J0aW5nLlxuICogICAtIGBwYWdlYDogemVyby1pbmRleGVkIHBhZ2UgdGhhdCBwcm9kdWNlZCB0aGlzIHJlc3BvbnNlLlxuICogICAtIGBwZXJQYWdlYDogbnVtYmVyIG9mIGl0ZW1zIHJlcXVlc3RlZCBwZXIgcGFnZS5cbiAqICAgLSBgdG90YWxgOiB0b3RhbCBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIHRocmVhZC5cbiAqICAgLSBgaGFzTW9yZWA6IHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgb2xkZXIgcGFnZSBpcyBzdGlsbFxuICogICAgIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUhpc3RvcnlSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdWlNZXNzYWdlczogei5hcnJheShNYXN0cmFIaXN0b3J5VUlNZXNzYWdlU2NoZW1hKSxcbiAgcGFnZTogei5udW1iZXIoKSxcbiAgcGVyUGFnZTogei5udW1iZXIoKSxcbiAgdG90YWw6IHoubnVtYmVyKCksXG4gIGhhc01vcmU6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFIaXN0b3J5UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFIaXN0b3J5UmVzcG9uc2VTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgREVMRVRFICR7YmFzZVBhdGh9L2hpc3RvcnlgLiBEZWxldGVzXG4gKiBldmVyeSBwZXJzaXN0ZWQgbWVzc2FnZSArIHdvcmtmbG93IHNuYXBzaG90IHRpZWQgdG8gdGhlIGNhbGxlcidzXG4gKiB0aHJlYWQsIHNvIHRoZSBuZXh0IGNoYXQgdHVybiBzdGFydHMgZnJvbSBhIGNsZWFuIHNsYXRlLiBUaGVcbiAqIHNlc3Npb24gY29va2llIHRoYXQgYW5jaG9ycyB0aGUgdGhyZWFkIGlkIGlzIHByZXNlcnZlZCBzbyB0aGVcbiAqIGNhbGxlciBkb2Vzbid0IGxvc2UgaXRzIGlkZW50aXR5IC0gb25seSB0aGUgY29udGVudHMgZ28gYXdheS5cbiAqXG4gKiBgb2tgIGlzIGFsd2F5cyBgdHJ1ZWAgb24gc3VjY2VzczsgdGhlIHJlc3BvbnNlIG9iamVjdCBpcyBrZXB0XG4gKiBhcyBhIHN0cnVjdCAodnMgYSBiYXJlIDIwNCkgc28gZnV0dXJlIGZpZWxkcyAoZS5nLiBgZGVsZXRlZEF0YCxcbiAqIGBtZXNzYWdlc2ApIGNhbiBiZSBhZGRlZCB3aXRob3V0IGJ1bXBpbmcgdGhlIGNvbnRyYWN0LlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgaGlzdG9yeSB3YXMgY2xlYXJlZC5cbiAqICAgLSBgdGhyZWFkSWRgOiB0aHJlYWQgaWQgdGhhdCB3YXMgd2lwZWQuXG4gKiAgIC0gYGNsZWFyZWRgOiBudW1iZXIgb2YgbWVzc2FnZXMgdGhlIHRocmVhZCBoZWxkIGJlZm9yZVxuICogICAgIGRlbGV0aW9uLiBVc2VmdWwgZm9yIGNsaWVudC1zaWRlIFwiY2xlYXJlZCAxMiBtZXNzYWdlc1wiXG4gKiAgICAgdG9hc3RzOyBgMGAgaXMgcmVwb3J0ZWQgd2hlbiB0aGUgdGhyZWFkIHdhcyBhbHJlYWR5IGVtcHR5XG4gKiAgICAgKGNhbGwgaXMgaWRlbXBvdGVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGVhckhpc3RvcnlSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksXG4gIGNsZWFyZWQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aHJlYWRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQSBzaW5nbGUgY29udmVyc2F0aW9uIHRocmVhZCB0aGUgcmVzb3VyY2UgKGF1dGhlbnRpY2F0ZWQgdXNlcikgb3ducyxcbiAqIGFzIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vdGhyZWFkc2AuIE1pcnJvcnMgTWFzdHJhJ3NcbiAqIGBTdG9yYWdlVGhyZWFkVHlwZWAgYnV0IHdpdGggSlNPTi1zYWZlIElTTy04NjAxIHRpbWVzdGFtcHMgKHRoZSB3aXJlXG4gKiBjYW4ndCBjYXJyeSBgRGF0ZWApLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgaWRgOiB0aHJlYWQgaWQuIFBhc3MgaXQgYmFjayBhcyB0aGUgdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXJcbiAqICAgICAoYFRIUkVBRF9JRF9IRUFERVJgKSBvbiBhIHN0cmVhbSAvIGhpc3RvcnkgLyBkZWxldGUgY2FsbCB0byBhY3RcbiAqICAgICBvbiB0aGlzIGNvbnZlcnNhdGlvbi5cbiAqICAgLSBgdGl0bGVgOiBodW1hbi1yZWFkYWJsZSB0aXRsZS4gUHJlc2VudCBvbmNlIHRoZSBhZ2VudCdzIG1lbW9yeVxuICogICAgIGhhcyBhdXRvLWdlbmVyYXRlZCBvbmUgKGFmdGVyIHRoZSBmaXJzdCB0dXJuKTsgYWJzZW50IG9uIGFcbiAqICAgICBicmFuZC1uZXcgdGhyZWFkLCBzbyB0aGUgVUkgZmFsbHMgYmFjayB0byBhIHBsYWNlaG9sZGVyLlxuICogICAtIGByZXNvdXJjZUlkYDogb3duaW5nIHJlc291cmNlICh0aGUgdXNlciBpZCkuIEFsd2F5cyB0aGUgY2FsbGVyJ3NcbiAqICAgICBvd24gcmVzb3VyY2UgLSB0aGUgbGlzdCByb3V0ZSBmaWx0ZXJzIGJ5IGl0IHNlcnZlci1zaWRlLlxuICogICAtIGBjcmVhdGVkQXRgIC8gYHVwZGF0ZWRBdGA6IElTTy04NjAxIHRpbWVzdGFtcHMuIGB1cGRhdGVkQXRgIGlzXG4gKiAgICAgdGhlIG5hdHVyYWwgc29ydCBrZXkgZm9yIFwibW9zdCByZWNlbnQgY29udmVyc2F0aW9ucyBmaXJzdFwiLlxuICogICAtIGBtZXRhZGF0YWA6IG9wYXF1ZSB0aHJlYWQgbWV0YWRhdGEsIHBhc3NlZCB0aHJvdWdoIHVudG91Y2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVRocmVhZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlc291cmNlSWQ6IHouc3RyaW5nKCksXG4gIGNyZWF0ZWRBdDogei5zdHJpbmcoKSxcbiAgdXBkYXRlZEF0OiB6LnN0cmluZygpLFxuICBtZXRhZGF0YTogei51bmtub3duKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVGhyZWFkID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhVGhyZWFkU2NoZW1hPjtcblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS90aHJlYWRzYC4gT25lIHBhZ2Ugb2YgdGhlXG4gKiBjYWxsZXIncyBjb252ZXJzYXRpb24gdGhyZWFkcywgbmV3ZXN0IChgdXBkYXRlZEF0YCBERVNDKSBmaXJzdC5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYHRocmVhZHNgOiBwYWdlIG9mIHRocmVhZHMgZm9yIHRoZSBjYWxsZXIncyByZXNvdXJjZS5cbiAqICAgLSBgcGFnZWA6IHplcm8taW5kZXhlZCBwYWdlIHRoYXQgcHJvZHVjZWQgdGhpcyByZXNwb25zZS5cbiAqICAgLSBgcGVyUGFnZWA6IG51bWJlciBvZiBpdGVtcyByZXF1ZXN0ZWQgcGVyIHBhZ2UuXG4gKiAgIC0gYHRvdGFsYDogdG90YWwgbnVtYmVyIG9mIHRocmVhZHMgdGhlIHJlc291cmNlIG93bnMuXG4gKiAgIC0gYGhhc01vcmVgOiB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIG1vcmUgcGFnZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFUaHJlYWRzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRocmVhZHM6IHouYXJyYXkoTWFzdHJhVGhyZWFkU2NoZW1hKSxcbiAgcGFnZTogei5udW1iZXIoKSxcbiAgcGVyUGFnZTogei5udW1iZXIoKSxcbiAgdG90YWw6IHoubnVtYmVyKCksXG4gIGhhc01vcmU6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFUaHJlYWRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFUaHJlYWRzUmVzcG9uc2VTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgREVMRVRFICR7YmFzZVBhdGh9L3RocmVhZHNgICh0aHJlYWQgaWRcbiAqIHN1cHBsaWVkIHZpYSB0aGUgdGhyZWFkLXNlbGVjdGlvbiBoZWFkZXIgLyBgdGhyZWFkSWRgIHF1ZXJ5KS4gV2lwZXNcbiAqIHRoZSBuYW1lZCB0aHJlYWQgYW5kIGV2ZXJ5IG1lc3NhZ2Ugb24gaXQuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBva2A6IGxpdGVyYWwgYHRydWVgIG9uIHN1Y2Nlc3MuXG4gKiAgIC0gYGFnZW50SWRgOiBhZ2VudCB3aG9zZSB0aHJlYWQgd2FzIGRlbGV0ZWQuXG4gKiAgIC0gYHRocmVhZElkYDogdGhyZWFkIGlkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKiAgIC0gYGRlbGV0ZWRgOiBgdHJ1ZWAgd2hlbiBhIHRocmVhZCByb3cgZXhpc3RlZCBhbmQgd2FzIHJlbW92ZWQsXG4gKiAgICAgYGZhbHNlYCB3aGVuIGl0IHdhcyBhbHJlYWR5IGdvbmUgKGNhbGwgaXMgaWRlbXBvdGVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFEZWxldGVUaHJlYWRSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksXG4gIGRlbGV0ZWQ6IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFEZWxldGVUaHJlYWRSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYURlbGV0ZVRocmVhZFJlc3BvbnNlU2NoZW1hPjtcblxuLyoqIExvbmdlc3QgdGhyZWFkIHRpdGxlIHRoZSByZW5hbWUgcm91dGUgYWNjZXB0cyAodHJpbW1lZCBzZXJ2ZXItc2lkZSkuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1RIUkVBRF9USVRMRV9NQVggPSAyMDA7XG5cbi8qKlxuICogSlNPTiBib2R5IGZvciBgUEFUQ0ggJHtiYXNlUGF0aH0vdGhyZWFkc2AgKHRocmVhZCBpZCBzdXBwbGllZCB2aWEgdGhlXG4gKiB0aHJlYWQtc2VsZWN0aW9uIGhlYWRlciAvIGB0aHJlYWRJZGAgcXVlcnkpLiBSZW5hbWVzIGEgc2luZ2xlXG4gKiBjb252ZXJzYXRpb24uXG4gKlxuICogRmllbGRzOlxuICogICAtIGB0aXRsZWA6IHRoZSBuZXcgaHVtYW4tcmVhZGFibGUgdGl0bGUuIFRyaW1tZWQgYW5kIGNhcHBlZCBhdFxuICogICAgIHtAbGluayBNQVNUUkFfVEhSRUFEX1RJVExFX01BWH0gY2hhcmFjdGVycyBzZXJ2ZXItc2lkZTsgbXVzdCBiZVxuICogICAgIG5vbi1lbXB0eSBhZnRlciB0cmltbWluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRpdGxlOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkubWF4KE1BU1RSQV9USFJFQURfVElUTEVfTUFYKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVXBkYXRlVGhyZWFkUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVVwZGF0ZVRocmVhZFJlcXVlc3RTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgUEFUQ0ggJHtiYXNlUGF0aH0vdGhyZWFkc2AuIEVjaG9lcyB0aGVcbiAqIHJlbmFtZWQgdGhyZWFkIGluIGl0cyBwb3N0LXVwZGF0ZSB3aXJlIHNoYXBlIHNvIHRoZSBjbGllbnQgY2FuIHJlZmxlY3RcbiAqIHRoZSBuZXcgdGl0bGUgd2l0aG91dCBhIHJlLWZldGNoLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgb2tgOiBsaXRlcmFsIGB0cnVlYCBvbiBzdWNjZXNzLlxuICogICAtIGBhZ2VudElkYDogYWdlbnQgd2hvc2UgdGhyZWFkIHdhcyByZW5hbWVkLlxuICogICAtIGB0aHJlYWRgOiB0aGUgdXBkYXRlZCB0aHJlYWQgKGNhcnJpZXMgdGhlIG5ldyBgdGl0bGVgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVVwZGF0ZVRocmVhZFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBvazogei5saXRlcmFsKHRydWUpLFxuICBhZ2VudElkOiB6LnN0cmluZygpLFxuICB0aHJlYWQ6IE1hc3RyYVRocmVhZFNjaGVtYSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhVXBkYXRlVGhyZWFkUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFVcGRhdGVUaHJlYWRSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdWdnZXN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9zdWdnZXN0aW9uc2AuXG4gKlxuICogQ2FycmllcyB0aGUgY3VyYXRlZCBzdGFydGVyIHF1ZXN0aW9ucyBmb3IgYW4gYWdlbnQncyBHZW5pZSBzcGFjZSAtXG4gKiB0aGUgYHNhbXBsZV9xdWVzdGlvbnNgIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIHRoZSBzcGFjZSwgc3VyZmFjZWRcbiAqIGFzIG9uZS10YXAgcHJvbXB0cyBvbiB0aGUgY2hhdCdzIGVtcHR5IHN0YXRlLiBgcXVlc3Rpb25zYCBpcyBlbXB0eVxuICogd2hlbiB0aGUgYWdlbnQgaGFzIG5vIEdlbmllIHNwYWNlIChvciB0aGUgc3BhY2UgZGVmaW5lcyBub25lKSwgc29cbiAqIHRoZSBjbGllbnQgcmVuZGVycyBub3RoaW5nIGluIHRoYXQgY2FzZSByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG9cbiAqIGJ1aWx0LWluIGV4YW1wbGUgcHJvbXB0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXN0aW9uczogei5hcnJheSh6LnN0cmluZygpKSxcbn0pO1xuZXhwb3J0IHR5cGUgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2hhcnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEFsbG93ZWQgY2hhcnQgdHlwZXMgdGhlIHBsYW5uZXIgY2FuIHBpY2suIERlZmluZWQgYXMgYVxuICogZGlzY3JpbWluYXRlZCBsaXRlcmFsIHVuaW9uIHNvIGVhY2ggdmFyaWFudCBjYXJyaWVzIGl0cyBvd25cbiAqIGAuZGVzY3JpYmUoKWAgY2xhdXNlIC0gdGhlIHNlcnZlci1zaWRlIHBsYW5uZXIncyBwcm9tcHRcbiAqIGZvcm1hdHRlciB3YWxrcyBgLm9wdGlvbnNgIHRvIGlubGluZSB0aGUgZGVzY3JpcHRpb25zIGludG8gdGhlXG4gKiBtb2RlbCBpbnN0cnVjdGlvbnMsIGtlZXBpbmcgdGhlIHByb21wdCBpbiBsb2NrLXN0ZXAgd2l0aCB0aGVcbiAqIHNjaGVtYSBieSBjb25zdHJ1Y3Rpb24uIFRoZSBydW50aW1lIHR5cGUgaXMgdGhlIHBsYWluIHN0cmluZ1xuICogdW5pb24gKGBcImJhclwiIHwgXCJsaW5lXCIgfCAuLi5gKSwgc28gY29uc3VtZXJzIHRoYXQganVzdCBuZWVkIGFcbiAqIGRpc2NyaW1pbmF0b3IgdmFsdWUgYmVoYXZlIHRoZSBzYW1lIGFzIGlmIGl0IHdlcmUgYVxuICogYHouZW51bShbLi4uXSlgLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRUeXBlU2NoZW1hID0gelxuICAudW5pb24oW1xuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiYmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiY29tcGFyaW5nIGEgbnVtZXJpYyB2YWx1ZSBhY3Jvc3MgYSBzbWFsbC9tZWRpdW0gc2V0IG9mIGRpc2NyZXRlIGNhdGVnb3JpZXMgKHRvcC1OLCByYW5raW5nLCBncm91cC1ieSlcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJob3Jpem9udGFsQmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwic2FtZSBhcyBiYXIgYnV0IGNhdGVnb3JpZXMgb24gdGhlIHktYXhpcyAtIHByZWZlciB3aGVuIGNhdGVnb3J5IGxhYmVscyBhcmUgbG9uZyBvciB0aGVyZSBhcmUgbWFueSBjYXRlZ29yaWVzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwibGluZVwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQtYXhpcyB0cmVuZCAodGltZSBzZXJpZXMsIHNlcXVlbmNlLCByYW5rKSB3aGVyZSB0aGUgeC1heGlzIGhhcyBuYXR1cmFsIG9yZGVyXCIsXG4gICAgICApLFxuICAgIHoubGl0ZXJhbChcImFyZWFcIikuZGVzY3JpYmUoXCJzdGFja2VkLXRyZW5kIGVtcGhhc2lzIC0gY3VtdWxhdGl2ZSBvciBjb21wb3NpdGlvbiBvdmVyIHRpbWVcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjb21ib1wiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm1peGVkIGJhciArIGxpbmUgKG9yIGFyZWEpIHNlcmllcyBvbiBzaGFyZWQgY2F0ZWdvcmllcyAtIGUuZy4gdm9sdW1lIGJhcnMgd2l0aCBhIHJhdGUvdHJlbmQgbGluZTsgc2V0IGVhY2ggc2VyaWVzJyBgdHlwZWBcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ3YXRlcmZhbGxcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJicmlkZ2UgLyBydW5uaW5nLXRvdGFsIG9mIHNpZ25lZCBzdGVwIHZhbHVlcyAoc3RhcnQgLT4gZGVsdGFzIC0+IGVuZCkgYWNyb3NzIG9yZGVyZWQgY2F0ZWdvcmllc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInNjYXR0ZXJcIilcbiAgICAgIC5kZXNjcmliZShcInR3by1udW1lcmljLWF4aXMgY29ycmVsYXRpb25zIGJldHdlZW4gZmllbGRzIChlLmcuIHByaWNlIHZzLiBxdWFudGl0eSlcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJoZWF0bWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibWF0cml4IGludGVuc2l0eSBhY3Jvc3MgdHdvIGNhdGVnb3J5IGF4ZXMgLSB4IGxhYmVscyBpbiBgY2F0ZWdvcmllc2AsIG9uZSBzZXJpZXMgcGVyIG1hdHJpeCByb3cgaG9sZGluZyB0aGF0IHJvdydzIHZhbHVlc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInJhZGFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibXVsdGktZGltZW5zaW9uIGNvbXBhcmlzb24gYWNyb3NzIGEgZml4ZWQgc2V0IG9mIGF4ZXMgKG9uZSBpbmRpY2F0b3IgcGVyIGNhdGVnb3J5LCBvbmUgb3IgbW9yZSBzZXJpZXMgb2YgdmFsdWVzKVwiLFxuICAgICAgKSxcbiAgICB6LmxpdGVyYWwoXCJwaWVcIikuZGVzY3JpYmUoXCJwYXJ0cy1vZi1hLXdob2xlIHdoZW4gMi03IGNhdGVnb3JpZXMgc3VtIHRvIGEgbWVhbmluZ2Z1bCB0b3RhbFwiKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImZ1bm5lbFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQgc3RhZ2VzIHRoYXQgc2hyaW5rIChjb252ZXJzaW9uLCBwaXBlbGluZSwgYXR0cml0aW9uKSAtIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ0cmVlbWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwicGFydHMtb2YtYS13aG9sZSBhcyBuZXN0ZWQgcmVjdGFuZ2xlcyB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gfjcgY2F0ZWdvcmllcyBvciBhIGZsYXQgaGllcmFyY2h5IG9mIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjdXN0b21cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJlc2NhcGUgaGF0Y2ggZm9yIGEgY2hhcnQgbm9uZSBvZiB0aGUgYWJvdmUgY2FuIGV4cHJlc3MgKHNhbmtleSwgYm94cGxvdCwgY2FuZGxlc3RpY2ssIHN1bmJ1cnN0LCBnYXVnZSwgbmV0d29yayBncmFwaCwgY2FsZW5kYXIsIHBhcmFsbGVsLCAuLi4pIC0gaGFuZC13cml0ZSB0aGUgY29tcGxldGUgRWNoYXJ0cyBvcHRpb24gaW5zdGVhZCBvZiBhIHBsYW5cIixcbiAgICAgICksXG4gIF0pXG4gIC5kZXNjcmliZShcIlRoZSBjaGFydCBzaGFwZSB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgZGF0YSBhbmQgaW50ZW50LlwiKTtcbmV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9IHouaW5mZXI8dHlwZW9mIENoYXJ0VHlwZVNjaGVtYT47XG5cbi8qKlxuICogUmVzb2x2ZWQgY2hhcnQgcGxhbiBhIHNldHRsZWQgY2hhcnQgZW50cnkgY2FycmllcyBvbiBpdHNcbiAqIGByZXN1bHRgIGZpZWxkLiBgb3B0aW9uYCBpcyB0aGUgZnVsbCBFY2hhcnRzIHNwZWM7IHBhc3NcbiAqIHN0cmFpZ2h0IGludG8gYDxSZWFjdEVDaGFydHMgb3B0aW9uPXsuLi59PmAuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRUeXBlOiBDaGFydFR5cGVTY2hlbWEsXG4gIG9wdGlvbjogelxuICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJGdWxseS1yZXNvbHZlZCBFY2hhcnRzIGBFQ2hhcnRzT3B0aW9uYCBKU09OIGZvciB0aGlzIGNoYXJ0IC0gZHJvcCBkaXJlY3RseSBpbnRvIGFuIEVjaGFydHMgaW5zdGFuY2UgKG9yIGA8UmVhY3RFQ2hhcnRzIG9wdGlvbj17Li4ufSAvPmApIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLiBJbmNsdWRlcyB0aXRsZSAvIHRvb2x0aXAgLyBsZWdlbmQgLyBncmlkIC8gYXhpcyAvIHNlcmllcyBkZWZhdWx0cyBhbHJlYWR5IG1lcmdlZCBpbi5cIixcbiAgICApLFxufSk7XG5leHBvcnQgdHlwZSBDaGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIENoYXJ0UmVzdWx0U2NoZW1hPjtcblxuLyoqXG4gKiBXaXJlLWZvcm1hdCBBTkQgc2VydmVyLXNpZGUgY2FjaGUgc2hhcGUgZm9yIGEgY2hhcnQgZW50cnkuXG4gKiBUaHJlZSBsaWZlY3ljbGUgc3RhdGVzIGluZmVycmVkIGZyb20gdGhlIHR3byBvcHRpb25hbCBmaWVsZHNcbiAqIChubyBkaXNjcmltaW5hdG9yIG5lZWRlZCk6XG4gKlxuICogICAtIGByZXN1bHRgIHNldCAgICAgICAgICAgICAgICAgICAgLT4gY2hhcnQgaXMgcmVhZHkgdG8gcmVuZGVyXG4gKiAgIC0gYGVycm9yYCBzZXQgICAgICAgICAgICAgICAgICAgICAtPiBwbGFubmVyIC8gZGF0YSBmZXRjaCBmYWlsZWRcbiAqICAgLSBib3RoIGByZXN1bHRgIGFuZCBgZXJyb3JgIHVuc2V0IC0+IHN0aWxsIHByb2Nlc3NpbmdcbiAqXG4gKiBgb3B0aW9uYCBpcyB0eXBlZCBhcyBhIGdlbmVyaWMgcmVjb3JkIHNvIHRoaXMgcGFja2FnZSBzdGF5c1xuICogZGVwZW5kZW5jeS1mcmVlIG9mIGBlY2hhcnRzYC4gVGhlIHNlcnZlciAoYGNoYXJ0LnRzYCkgaW1wb3J0c1xuICogdGhpcyBzY2hlbWEgZGlyZWN0bHk7IHRoZSBkZW1vIGNsaWVudCBwb2xscyB0aGVcbiAqIGAvZW1iZWQvY2hhcnQvOmlkYCByb3V0ZSBhbmQgcGFyc2VzIHJlc3BvbnNlcyBhZ2FpbnN0IGl0LlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIk9wYXF1ZSBpZCBtaW50ZWQgYnkgdGhlIGNoYXJ0IHN1YnN5c3RlbS4gRW1iZWQgdmVyYmF0aW0gYXMgYFtjaGFydDo8Y2hhcnRJZD5dYCBpbiBhZ2VudCBwcm9zZTsgdGhlIGhvc3QgVUkgcmVzb2x2ZXMgaXQgYWdhaW5zdCB0aGlzIGNhY2hlIGVudHJ5LlwiLFxuICAgICksXG4gIGVycm9yOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgY2hhcnQgZmFpbGVkIChkYXRhIGZldGNoIGVycm9yLCBwbGFubmVyIGVycm9yLCBlbXB0eSBkYXRhc2V0KS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHJlc3VsdGA7IGFic2VudCBvbiBzdWNjZXNzIGFuZCB3aGlsZSBwcm9jZXNzaW5nLlwiLFxuICAgICksXG4gIHJlc3VsdDogQ2hhcnRSZXN1bHRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcbiAgICBcIlJlc29sdmVkIGNoYXJ0IHBsYW4uIEFic2VudCB3aGlsZSBwcm9jZXNzaW5nIGFuZCB3aGVuIHRoZSBydW4gZXJyb3JlZC5cIixcbiAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ2hhcnQgPSB6LmluZmVyPHR5cGVvZiBDaGFydFNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGVtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogV2lyZS1mb3JtYXQgcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L2VtYmVkL2RhdGEvOmlkYC5cbiAqXG4gKiBNaXJyb3JzIHRoZSBhZ2VudC1zaWRlIGBnZXRfc3RhdGVtZW50YCB0b29sJ3Mgb3V0cHV0IHNvIHRoZVxuICogaG9zdCBVSSBhbmQgdGhlIExMTSBzZWUgdGhlIGV4YWN0IHNhbWUgc2hhcGUgZm9yIHRoZSBzYW1lXG4gKiBzdGF0ZW1lbnQ7IHRoZSByb3V0ZSBpcyB3aGF0IHJlc29sdmVzIGBbZGF0YTo8c3RhdGVtZW50X2lkPl1gXG4gKiBtYXJrZXJzIHRoZSBhZ2VudCBlbWJlZHMgaW4gcHJvc2UuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBjb2x1bW5zYDogY29sdW1uIG5hbWVzIGluIGRlY2xhcmF0aW9uIG9yZGVyLlxuICogICAtIGByb3dzYDogcm93IHJlY29yZHMga2V5ZWQgYnkgY29sdW1uIG5hbWUuIENlbGwgdmFsdWVzIGFyZVxuICogICAgIGVpdGhlciBjb2VyY2VkIG51bWJlcnMgb3IgdGhlIG9yaWdpbmFsIHN0cmluZ3MgKEdlbmllIC9cbiAqICAgICBTdGF0ZW1lbnQgRXhlY3V0aW9uIHJldHVybnMgZXZlcnkgY2VsbCBhcyBgc3RyaW5nIHwgbnVsbGA7XG4gKiAgICAgbnVtZXJpYy1sb29raW5nIGNlbGxzIGFyZSBjb2VyY2VkIHNlcnZlci1zaWRlIHNvIHRoZSBVSVxuICogICAgIGNhbiBmb3JtYXQgd2l0aCBgdGFidWxhci1udW1zYCB3aXRob3V0IHJlLXBhcnNpbmcpLlxuICogICAtIGByb3dDb3VudGA6IHRvdGFsIHJvdyBjb3VudCB1cHN0cmVhbSAoaW5kZXBlbmRlbnQgb2YgdGhlXG4gKiAgICAgYGxpbWl0YCBjYXApLiBDb21wYXJlIGFnYWluc3QgYHJvd3MubGVuZ3RoYCB0byBkZXRlY3RcbiAqICAgICB0cnVuY2F0aW9uIC0gYHRydW5jYXRlZGAgaXMgdGhlIHByZWNvbXB1dGVkIGZsYWcuXG4gKiAgIC0gYHRydW5jYXRlZGA6IGB0cnVlYCB3aGVuIHRoZSBzZXJ2ZXIgY2xpcHBlZCByb3dzIHRvIGhvbm9yXG4gKiAgICAgdGhlIHJvdXRlJ3Mgcm93IGNhcDsgdGhlIFVJIHNob3VsZCBzdXJmYWNlIGEgXCJzaG93aW5nIE4gb2ZcbiAqICAgICBNIHJvd3NcIiBhZmZvcmRhbmNlIGluIHRoYXQgY2FzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlbWVudERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHJvd3M6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCksXG4gIHRydW5jYXRlZDogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFN0YXRlbWVudERhdGEgPSB6LmluZmVyPHR5cGVvZiBTdGF0ZW1lbnREYXRhU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gd3JpdGVyIHN1cmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRoZSBgVG9vbFN0cmVhbWAtc2hhcGVkIHdyaXRlciB0aGUgTWFzdHJhIEdlbmllIGFnZW50IGFuZCBjaGFydFxuICogaGVscGVycyBwdWJsaXNoIGV2ZW50cyB0aHJvdWdoLiBEZWZpbmVkIGhlcmUgKHZzIGltcG9ydGVkIGZyb21cbiAqIGBAbWFzdHJhL2NvcmVgKSBzbyBoZWxwZXJzIGluIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgIGNhblxuICogYWNjZXB0IGFueSBvYmplY3Qgd2l0aCBhIGAud3JpdGVgIG1ldGhvZCB3aXRob3V0IGRyYWdnaW5nXG4gKiBNYXN0cmEncyBmdWxsIGBUb29sU3RyZWFtYCAoYW5kIGl0cyBhZ2VudCAvIHRvb2wgdHlwaW5ncykgaW50b1xuICogY2FsbCBzaXRlcy4gVGhlIGFjdHVhbCBNYXN0cmEgYGN0eC53cml0ZXJgIGlzIGFzc2lnbmFibGUgdG9cbiAqIHRoaXMgc2hhcGUgc28gY2FsbGVycyBwYXNzIGl0IHN0cmFpZ2h0IHRocm91Z2guXG4gKlxuICogS2VwdCBhcyBhIHBsYWluIFR5cGVTY3JpcHQgaW50ZXJmYWNlICh2cyBhIHpvZCBzY2hlbWEpIGJlY2F1c2VcbiAqIHRoZSBjb250cmFjdCBpcyBhIG1ldGhvZCAtIHpvZCBjYW4gb25seSB2YWxpZGF0ZSB0aGUgc2hhcGUgdmlhXG4gKiBgei5jdXN0b21gLCB3aGljaCBhZGRzIG5vaXNlIHdpdGhvdXQgYnV5aW5nIGFueSBydW50aW1lIGNoZWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYVdyaXRlciB7XG4gIHdyaXRlOiAoY2h1bms6IHVua25vd24pID0+IHVua25vd247XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0gbWFzdHJhLW9ubHkgZ2VuaWUtYWdlbnQgZXZlbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IHRoZSBHZW5pZSB0b29sIGludm9jYXRpb24gc3RhcnRlZC5cbiAqIEVtaXR0ZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgY2FsbGluZyBhZ2VudCBpbnZva2VzIHRoZSBHZW5pZVxuICogdG9vbCwgYmVmb3JlIGFueSBpbm5lciBhZ2VudCAvIHdpcmUgYWN0aXZpdHksIHNvIHRoZSBVSSBjYW5cbiAqIHBvcCBhIFwiVGhpbmtpbmcuLi5cIiBwaWxsIHRoZSBpbnN0YW50IHRoZSBtb2RlbCBkZWNpZGVzIHRvXG4gKiBkZWxlZ2F0ZS4gYGNvbnZlcnNhdGlvbklkYCAvIGBtZXNzYWdlSWRgIGFyZSBhYnNlbnQgb24gdGhpc1xuICogZmlyc3QgZW1pdCAobm8gR2VuaWUgcm91bmQtdHJpcCB5ZXQpLiBGaWVsZCBuYW1lcyBhcmVcbiAqIGNhbWVsQ2FzZSAodnMgdGhlIHNuYWtlX2Nhc2Ugd2lyZSBldmVudHMpIHRvIG1pcnJvciB0aGVcbiAqIEdlbmllIGFnZW50J3Mgb3duIGludGVybmFsIGRhdGEgcGx1bWJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGFydGVkRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInN0YXJ0ZWRcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIC8qKlxuICAgKiBHZW5pZSBjb252ZXJzYXRpb24gaWQsIHBvcHVsYXRlZCBvbmx5IHdoZW4gdGhpcyBgc3RhcnRlZGBcbiAgICogZXZlbnQgY29ycmVzcG9uZHMgdG8gYSBmb2xsb3ctdXAgdHVybiBvbiBhbiBleGlzdGluZ1xuICAgKiBjb252ZXJzYXRpb24uIEFic2VudCBvbiB0aGUgZmlyc3QgdHVybi5cbiAgICovXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBHZW5pZSBtZXNzYWdlIGlkLCBwb3B1bGF0ZWQgb25seSBhZnRlciB0aGUgZmlyc3Qgd2lyZVxuICAgKiBgbWVzc2FnZWAgZXZlbnQgbGFuZHMuIEFic2VudCBvbiB0aGUgaW1tZWRpYXRlLW9uLWludm9rZVxuICAgKiBlbWl0LlxuICAgKi9cbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBRdWVzdGlvbiB0aGUgR2VuaWUgYWdlbnQgc2VudCB0byBHZW5pZS4gKi9cbiAgY29udGVudDogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3RhcnRlZEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgU3RhcnRlZEV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IG9uZSBgYXNrX2dlbmllYCBpbnZvY2F0aW9uXG4gKiBmaW5pc2hlZC4gQ2FycmllcyB0aGUgaHlkcmF0ZWQgYHN0YXRlbWVudElkc2AgKHJvd3MgYXJlIGZldGNoZWRcbiAqIHZpYSBgZ2V0U3RhdGVtZW50YCBzZXBhcmF0ZWx5KSBhbmQgR2VuaWUncyBmaW5hbCBwcm9zZSBhbnN3ZXJcbiAqIHNvIHRoZSBVSSBjYW4gbW92ZSBmcm9tIFwidGhpbmtpbmdcIiB0byBcImFuc3dlcmVkXCIgd2l0aG91dFxuICogd2FpdGluZyBmb3IgdGhlIEdlbmllIGFnZW50J3Mgd2hvbGUgcmVhc29uaW5nIGxvb3AgdG8gZW5kLlxuICovXG5leHBvcnQgY29uc3QgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImFza19nZW5pZV9kb25lXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIEdlbmllJ3MgbmF0dXJhbC1sYW5ndWFnZSBhbnN3ZXIgZm9yIHRoZSB0dXJuLCBpZiBhbnkuICovXG4gIGFuc3dlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogU3RhdGVtZW50IGlkcyBmb3IgYW55IG5vbi1lbXB0eSByZXN1bHQgc2V0cyB0aGlzIHR1cm4gcHJvZHVjZWQuICovXG4gIHN0YXRlbWVudElkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgLyoqXG4gICAqIFRlcm1pbmFsIHdpcmUgc3RhdHVzIChgQ09NUExFVEVEYCAvIGBGQUlMRURgIC8gYENBTkNFTExFRGApLlxuICAgKiBNaXJyb3JzIHRoZSBzb3VyY2UgYHJlc3VsdGAgZXZlbnQncyBzdGF0dXMgc28gc3Vic2NyaWJlcnNcbiAgICogY2FuIHJlYWN0IHRvIGFzay1sZXZlbCBjb21wbGV0aW9uIHdpdGhvdXQgcmUtd2Fsa2luZyBoaXN0b3J5LlxuICAgKiBUcmVhdGVkIGFzIGB6LmN1c3RvbTxNZXNzYWdlU3RhdHVzPmAgYmVjYXVzZSB0aGUgU0RLIGlzIHRoZVxuICAgKiBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBlbnVtIHZhbHVlcy5cbiAgICovXG4gIHN0YXR1czogei5jdXN0b208TWVzc2FnZVN0YXR1cz4oKHYpID0+IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSxcbn0pO1xuZXhwb3J0IHR5cGUgQXNrR2VuaWVEb25lRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBBc2tHZW5pZURvbmVFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgZXJyb3IgZXZlbnQ6IHRlcm1pbmFsIEdlbmllIGFnZW50IC8gdHJhbnNwb3J0XG4gKiBlcnJvci4gR2VuaWUncyBvd24gYEZBSUxFRGAgLyBgQ0FOQ0VMTEVEYCBjb21lIHRocm91Z2ggdGhlXG4gKiB3aXJlJ3MgYHJlc3VsdGAgZXZlbnQgLSB0aGlzIHZhcmlhbnQgaXMgZm9yIGZhaWx1cmVzIHRoZSB3aXJlXG4gKiBjYW4ndCByZXByZXNlbnQgKG5ldHdvcmssIEdlbmllIGFnZW50IGNyYXNoLCBwbGFubmVyIGVycm9yLFxuICogZXRjLikgcGx1cyBhIFVJLWZyaWVuZGx5IG1pcnJvciBvZiBgcmVzdWx0YCB3aGVuIHRoZSBzdGF0dXMgaXNcbiAqIG5vbi1gQ09NUExFVEVEYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBNYXN0cmFHZW5pZUVycm9yRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogdGhlIGlubmVyIEdlbmllIGFnZW50J3NcbiAqIHN0cnVjdHVyZWQtb3V0cHV0IGNvZXJjaW9uIGhhcyBsYW5kZWQuIEZpcmVzIG9uY2UgcGVyIEdlbmllXG4gKiB0b29sIGludm9jYXRpb24sIEFGVEVSIGBhZ2VudC5nZW5lcmF0ZSguLi4pYCBjb21wbGV0ZXMgKGkuZS5cbiAqIHRoZSBpbm5lciBsb29wICsgTWFzdHJhJ3Mgc3RydWN0dXJpbmcgcGFzcyBoYXZlIGJvdGhcbiAqIGZpbmlzaGVkKSBhbmQgQkVGT1JFIHRoZSB3cmFwcGVyIGh5ZHJhdGVzIGVhY2ggYGRhdGFgIGl0ZW1cbiAqIHdpdGggYSBjaGFydC4gU2lnbmFscyB0byB0aGUgaG9zdCBVSSB0aGF0IHRoZSBhZ2VudCBoYXNcbiAqIHN0b3BwZWQgcmVhc29uaW5nIGFuZCBpcyBtb3ZpbmcgaW50byBjaGFydCBnZW5lcmF0aW9uLlxuICpcbiAqIFRoZSBzdHJ1Y3R1cmluZyBwYXNzIGl0c2VsZiBpcyBvcGFxdWUgKGl0IHJ1bnMgaW5zaWRlXG4gKiBNYXN0cmEncyBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgdG9nZXRoZXIgd2l0aCB0aGUgdG9vbCBsb29wKVxuICogc28gdGhpcyBpcyB0aGUgZWFybGllc3QgaG9vayB3ZSBjYW4gb2ZmZXI7IHdlIGNhbid0IGZpcmUgYVxuICogXCJzdW1tYXJ5IHN0YXJ0ZWRcIiBldmVudCB0aGUgd2F5IHdlIGZpcmUgYHN0YXJ0ZWRgLlxuICovXG5leHBvcnQgY29uc3QgU3VtbWFyeUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdW1tYXJ5XCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKiogVG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhZ2VudCdzIHN0cnVjdHVyZWQgc3VtbWFyeS4gKi9cbiAgaXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqIENvdW50IG9mIGB0ZXh0YCAvIHByb3NlIGl0ZW1zIGluIHRoZSBzdW1tYXJ5LiAqL1xuICB0ZXh0SXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqXG4gICAqIENvdW50IG9mIGBkYXRhYCBpdGVtcyB0aGUgd3JhcHBlciB3aWxsIGh5ZHJhdGUgaW50byBjaGFydHMuXG4gICAqIFRoZSBob3N0IFVJIGNhbiB1c2UgdGhpcyB0byBzZWVkIE4gY2hhcnQgc2tlbGV0b25zIGJlZm9yZVxuICAgKiB0aGUgcGVyLWNoYXJ0IGV2ZW50cyBhcnJpdmUuXG4gICAqL1xuICBkYXRhSXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3VtbWFyeUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgU3VtbWFyeUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBldmVudCB1bmlvbi4gRWFjaCB2YXJpYW50IHVzZXMgdGhlIHNhbWUgZmxhdFxuICogYHt0eXBlLCAuLi5maWVsZHN9YCBzaGFwZSBhcyB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHNvXG4gKiBzdWJzY3JpYmVycyB1bmlvbiBib3RoIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudEV2ZW50U2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgU3RhcnRlZEV2ZW50U2NoZW1hLFxuICBBc2tHZW5pZURvbmVFdmVudFNjaGVtYSxcbiAgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hLFxuICBTdW1tYXJ5RXZlbnRTY2hlbWEsXG5dKTtcbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRFdmVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogVGhlIHVuaWZpZWQgd3JpdGVyLWV2ZW50IHZvY2FidWxhcnkgc3Vic2NyaWJlcnMgc2VlIG9uXG4gKiBgY3R4LndyaXRlcmA6IHRoZSB3aXJlLWRlcml2ZWQge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSB1bmlvblxuICogKipwbHVzKiogTWFzdHJhLW9ubHkgZXZlbnRzIGZyb20ge0BsaW5rIEdlbmllQWdlbnRFdmVudH0uIEVhY2hcbiAqIHZhcmlhbnQgaXMgYSBmbGF0IGB7dHlwZSwgLi4uZmllbGRzfWAgb2JqZWN0OyBjb25zdW1lcnMgbmFycm93XG4gKiBvbiBgdHlwZWAgYW5kIHJlYWQgZmllbGRzIGlubGluZSAtIHRoZXJlIGlzIG5vIHBheWxvYWQgd3JhcHBlclxuICogYW5kIG5vIHdyaXRlci1ib3VuZGFyeSB0cmFuc2xhdG9yLlxuICpcbiAqIENvbXBvc2VkIHZpYSBgei51bmlvbmAgKG5vdCBgei5kaXNjcmltaW5hdGVkVW5pb25gKSBiZWNhdXNlXG4gKiBib3RoIGhhbHZlcyBhcmUgdGhlbXNlbHZlcyBkaXNjcmltaW5hdGVkIHVuaW9ucyBvbiB0aGUgc2FtZVxuICogYHR5cGVgIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllV3JpdGVyRXZlbnRTY2hlbWEgPSB6LnVuaW9uKFtcbiAgZ2VuaWVNb2RlbC5HZW5pZUNoYXRFdmVudFNjaGVtYSxcbiAgR2VuaWVBZ2VudEV2ZW50U2NoZW1hLFxuXSk7XG5leHBvcnQgdHlwZSBHZW5pZVdyaXRlckV2ZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVXcml0ZXJFdmVudFNjaGVtYT47XG5cbi8qKiBEaXNjcmltaW5hdG9yIHR5cGUgZm9yIHtAbGluayBHZW5pZVdyaXRlckV2ZW50fS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllV3JpdGVyRXZlbnRUeXBlID0gR2VuaWVXcml0ZXJFdmVudFtcInR5cGVcIl07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VtbWFyeSArIGRhdGFzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGFidWxhciBwYXlsb2FkIGVtYmVkZGVkIGluIGV2ZXJ5IHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfVxuICogYHZpc3VhbGl6ZWAgZGF0YXNldC4gQWx3YXlzIHByZXNlbnQ6IGh5ZHJhdGVkIGJ5IHRoZSB3b3JrZmxvdydzXG4gKiBhZ2VudCBzdGVwIGJlZm9yZSB0aGUgZmluYWxpemUgc3RlcCBydW5zLCBzbyBjb25zdW1lcnMgY2FuIHJlbmRlclxuICogYSB0YWJsZSBmYWxsYmFjayByZWdhcmRsZXNzIG9mIGNoYXJ0LXBsYW5uZXIgb3V0Y29tZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGNvbHVtbnNgOiBjb2x1bW4gbmFtZXMgaW4gZGlzcGxheSBvcmRlci5cbiAqICAgLSBgcm93c2A6IHRhYnVsYXIgcm93cyBrZXllZCBieSBjb2x1bW4gbmFtZS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgR2VuaWUgcmVwb3J0ZWQgKG1heSBleGNlZWRcbiAqICAgICBgcm93cy5sZW5ndGhgIHdoZW4gdGhlIHN0YXRlbWVudCB3YXMgdHJ1bmNhdGVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHJvd3M6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldERhdGEgPSB6LmluZmVyPHR5cGVvZiBHZW5pZURhdGFzZXREYXRhU2NoZW1hPjtcblxuLyoqXG4gKiBTbGltIGNoYXJ0IHJlZmVyZW5jZSBhdHRhY2hlZCB0byBhIHZpc3VhbGl6ZSBkYXRhc2V0LiBPbmx5XG4gKiBwcmVzZW50IHdoZW4gcGxhbm5pbmcgc3VjY2VlZGVkLlxuICpcbiAqIGBvcHRpb25gIGlzIGludGVudGlvbmFsbHkgTk9UIGluY2x1ZGVkLiBUaGUgcmVzb2x2ZWQgRWNoYXJ0c1xuICogc3BlYyBsaXZlcyBvZmYtYmFuZCBpbiB0aGUgY2hhcnQgY2FjaGU6IHRoZSBob3N0IFVJIGZldGNoZXMgaXRcbiAqIGJ5IGBjaGFydElkYCBmcm9tIHRoZSBwbHVnaW4ncyBlbWJlZCByb3V0ZSAoZGVyaXZlZCBmcm9tXG4gKiBgYmFzZVBhdGhgICsge0BsaW5rIE1BU1RSQV9ST1VURVN9LmVtYmVkLCBpLmUuIGAvZW1iZWQvY2hhcnQvOmlkYDtcbiAqIHNlZSB7QGxpbmsgQ2hhcnR9KS4gRW1iZWRkaW5nIHRoZSBmdWxsIHNwZWMgaW5saW5lIHdvdWxkXG4gKiBpbmZsYXRlIGV2ZXJ5IGRhdGFzZXQgYnkgc2V2ZXJhbCBLQiBwZXIgY2hhcnQgYW5kIHJvdW5kLXRyaXBcbiAqIHRocm91Z2ggdGhlIExMTSBjb250ZXh0IGZvciB6ZXJvIGJlbmVmaXQgKHRoZSBtb2RlbCBvbmx5IG5lZWRzXG4gKiB0aGUgYGNoYXJ0SWRgIHRvIHBsYWNlIGEgYFtjaGFydDo8Y2hhcnRJZD5dYCBtYXJrZXIgaW4gaXRzXG4gKiByZXBseSkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXRDaGFydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRJZDogei5zdHJpbmcoKSxcbiAgY2hhcnRUeXBlOiBDaGFydFR5cGVTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWE+O1xuXG4vKipcbiAqIERhdGFzZXQgYnVuZGxlIGF0dGFjaGVkIHRvIGEge0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19IGB2aXN1YWxpemVgXG4gKiBpdGVtLiBgZGF0YWAgaXMgYWx3YXlzIHBvcHVsYXRlZDsgYGNoYXJ0YCBpcyBiZXN0LWVmZm9ydCBhbmRcbiAqIGFic2VudCB3aGVuIHRoZSB3b3JrZmxvdydzIGNoYXJ0LXBsYW5uZXIgZmFpbGVkICh0aW1lb3V0LFxuICogbWFsZm9ybWVkIHBsYW4sIGFib3J0KSBzbyB0aGUgaG9zdCBVSSBjYW4gc3RpbGwgcmVuZGVyIHRoZVxuICogdW5kZXJseWluZyB0YWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGF0YTogR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSxcbiAgY2hhcnQ6IEdlbmllRGF0YXNldENoYXJ0U2NoZW1hLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldCA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldFNjaGVtYT47XG5cbi8qKlxuICogT25lIGl0ZW0gaW5zaWRlIHRoZSBHZW5pZSB3b3JrZmxvdydzIGZpbmFsIHN1bW1hcnkuIFRoZVxuICogd29ya2Zsb3cgcHJvZHVjZXMgYSBtaXhlZCBzZXF1ZW5jZSBvZjpcbiAqXG4gKiAgIC0gYHN0cmluZ2A6IGEgbWFya2Rvd24gcGFyYWdyYXBoIChpbnRlcnByZXRhdGlvbiwgY2FsbG91dHMsXG4gKiAgICAgdHJhbnNpdGlvbnMgYmV0d2VlbiBkYXRhIGJsb2NrcykuXG4gKiAgIC0gYHZpc3VhbGl6ZWA6IGEgcmVxdWVzdCBmcm9tIHRoZSBhZ2VudCBzdGVwIHRvIHZpc3VhbGl6ZSBhXG4gKiAgICAgc3BlY2lmaWMgR2VuaWUgc3RhdGVtZW50IGF0IHRoaXMgcG9zaXRpb24gaW4gdGhlIHByb3NlLlxuICogICAgIFRoZSBmaW5hbGl6ZSBzdGVwIGh5ZHJhdGVzIGBkYXRhc2V0LmRhdGFgIChyb3dzIGZyb20gdGhlXG4gKiAgICAgbWF0Y2hpbmcgYHN0YXRlbWVudElkYCkgYW5kIGF0dGFjaGVzIGBkYXRhc2V0LmNoYXJ0YCBhZnRlclxuICogICAgIHJ1bm5pbmcgdGhlIGNoYXJ0LXBsYW5uZXIuIFRoZSBhZ2VudCBORVZFUiBwaWNrcyB0aGUgY2hhcnRcbiAqICAgICB0eXBlIC0gaXQgb25seSBtYXJrcyB3aGVyZSBhIHZpc3VhbGl6YXRpb24gYmVsb25ncy5cbiAqXG4gKiBUaGUgaG9zdCBVSSB3YWxrcyB0aGUgYXJyYXkgaW4gZGlzcGxheSBvcmRlciB0byBjb21wb3NlIHRoZVxuICogZmluYWwgYXNzaXN0YW50IG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1wiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInZpc3VhbGl6ZVwiKSxcbiAgICBzdGF0ZW1lbnRJZDogei5zdHJpbmcoKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGF0YXNldDogR2VuaWVEYXRhc2V0U2NoZW1hLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbSA9IHouaW5mZXI8dHlwZW9mIEdlbmllU3VtbWFyeUl0ZW1TY2hlbWE+O1xuXG4vKiogRGlzY3JpbWluYXRvciB0eXBlIGZvciB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX0uICovXG5leHBvcnQgdHlwZSBHZW5pZVN1bW1hcnlJdGVtVHlwZSA9IEdlbmllU3VtbWFyeUl0ZW1bXCJ0eXBlXCJdO1xuXG4vKipcbiAqIFRoZSBHZW5pZSBhZ2VudCdzIGZpbmFsIG91dHB1dCBzaGFwZSAtIHdoYXQgdGhlIGNhbGxpbmcgYWdlbnQnc1xuICogR2VuaWUgdG9vbCByZXR1cm5zIHRvIHRoZSBjYWxsaW5nIExMTS4gVGhlIGBzdW1tYXJ5YCBhcnJheSBpc1xuICogdGhlIHVzZXItZmFjaW5nIHJlbmRlcmFibGU7IGBjb252ZXJzYXRpb25JZGAgbGV0cyB0aGUgY2FsbGluZ1xuICogYWdlbnQgKG9yIHRoZSBVSSkgZm9sbG93IHVwIGluIHRoZSBzYW1lIEdlbmllIHRocmVhZCBvbiB0aGVcbiAqIG5leHQgdHVybi5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN1bW1hcnk6IHouYXJyYXkoR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50UmVzdWx0U2NoZW1hPjtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"zod": "4.3.6",
|
|
15
|
-
"@dbx-tools/shared-core": "0.6.
|
|
16
|
-
"@dbx-tools/shared-
|
|
17
|
-
"@dbx-tools/shared-
|
|
15
|
+
"@dbx-tools/shared-core": "0.6.27",
|
|
16
|
+
"@dbx-tools/shared-genie": "0.6.27",
|
|
17
|
+
"@dbx-tools/shared-model": "0.6.27"
|
|
18
18
|
},
|
|
19
19
|
"main": "./lib/index.js",
|
|
20
20
|
"license": "UNLICENSED",
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
|
-
"version": "0.6.
|
|
24
|
+
"version": "0.6.27",
|
|
25
25
|
"types": "./lib/index.d.ts",
|
|
26
26
|
"type": "module",
|
|
27
27
|
"exports": {
|
package/src/marker.ts
CHANGED
|
@@ -94,6 +94,17 @@ export function isUuid(id: string): boolean {
|
|
|
94
94
|
return UUID_RE.test(id);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Build the exact embed marker the agent should place in prose.
|
|
99
|
+
*
|
|
100
|
+
* Tool results return this complete value so the model copies one opaque token
|
|
101
|
+
* rather than reconstructing it from `type` plus `id`. Reconstruction is where
|
|
102
|
+
* valid-looking but never-minted UUIDs enter transcripts and produce a 404.
|
|
103
|
+
*/
|
|
104
|
+
export function formatMarker(type: MarkerType, id: string): string {
|
|
105
|
+
return `[${type}:${id}]`;
|
|
106
|
+
}
|
|
107
|
+
|
|
97
108
|
/** One marker found in agent prose, with its source span. */
|
|
98
109
|
export interface ParsedMarker {
|
|
99
110
|
/** Marker kind token (e.g. `chart`, `data`); see {@link MarkerType}. */
|
package/src/wire.ts
CHANGED
|
@@ -321,16 +321,56 @@ export const ChartTypeSchema = z
|
|
|
321
321
|
.describe(
|
|
322
322
|
"comparing a numeric value across a small/medium set of discrete categories (top-N, ranking, group-by)",
|
|
323
323
|
),
|
|
324
|
+
z
|
|
325
|
+
.literal("horizontalBar")
|
|
326
|
+
.describe(
|
|
327
|
+
"same as bar but categories on the y-axis - prefer when category labels are long or there are many categories",
|
|
328
|
+
),
|
|
324
329
|
z
|
|
325
330
|
.literal("line")
|
|
326
331
|
.describe(
|
|
327
332
|
"ordered-axis trend (time series, sequence, rank) where the x-axis has natural order",
|
|
328
333
|
),
|
|
329
334
|
z.literal("area").describe("stacked-trend emphasis - cumulative or composition over time"),
|
|
335
|
+
z
|
|
336
|
+
.literal("combo")
|
|
337
|
+
.describe(
|
|
338
|
+
"mixed bar + line (or area) series on shared categories - e.g. volume bars with a rate/trend line; set each series' `type`",
|
|
339
|
+
),
|
|
340
|
+
z
|
|
341
|
+
.literal("waterfall")
|
|
342
|
+
.describe(
|
|
343
|
+
"bridge / running-total of signed step values (start -> deltas -> end) across ordered categories",
|
|
344
|
+
),
|
|
330
345
|
z
|
|
331
346
|
.literal("scatter")
|
|
332
347
|
.describe("two-numeric-axis correlations between fields (e.g. price vs. quantity)"),
|
|
348
|
+
z
|
|
349
|
+
.literal("heatmap")
|
|
350
|
+
.describe(
|
|
351
|
+
"matrix intensity across two category axes - x labels in `categories`, one series per matrix row holding that row's values",
|
|
352
|
+
),
|
|
353
|
+
z
|
|
354
|
+
.literal("radar")
|
|
355
|
+
.describe(
|
|
356
|
+
"multi-dimension comparison across a fixed set of axes (one indicator per category, one or more series of values)",
|
|
357
|
+
),
|
|
333
358
|
z.literal("pie").describe("parts-of-a-whole when 2-7 categories sum to a meaningful total"),
|
|
359
|
+
z
|
|
360
|
+
.literal("funnel")
|
|
361
|
+
.describe(
|
|
362
|
+
"ordered stages that shrink (conversion, pipeline, attrition) - `{name, value}` slices",
|
|
363
|
+
),
|
|
364
|
+
z
|
|
365
|
+
.literal("treemap")
|
|
366
|
+
.describe(
|
|
367
|
+
"parts-of-a-whole as nested rectangles when there are more than ~7 categories or a flat hierarchy of `{name, value}` slices",
|
|
368
|
+
),
|
|
369
|
+
z
|
|
370
|
+
.literal("custom")
|
|
371
|
+
.describe(
|
|
372
|
+
"escape hatch for a chart none of the above can express (sankey, boxplot, candlestick, sunburst, gauge, network graph, calendar, parallel, ...) - hand-write the complete Echarts option instead of a plan",
|
|
373
|
+
),
|
|
334
374
|
])
|
|
335
375
|
.describe("The chart shape that best matches the data and intent.");
|
|
336
376
|
export type ChartType = z.infer<typeof ChartTypeSchema>;
|