@dbx-tools/appkit-mastra 0.9.36 → 0.9.38

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/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
6
- export const PACKAGE_VERSION = "0.9.36";
6
+ export const PACKAGE_VERSION = "0.9.38";
7
7
  export * as agents from "./src/agents.ts";
8
8
  export * as chart from "./src/chart.ts";
9
9
  export * as chat from "./src/chat.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
2
- export declare const PACKAGE_VERSION = "0.9.36";
2
+ export declare const PACKAGE_VERSION = "0.9.38";
3
3
  export * as agents from "./src/agents.ts";
4
4
  export * as chart from "./src/chart.ts";
5
5
  export * as chat from "./src/chat.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
5
- export const PACKAGE_VERSION = "0.9.36";
5
+ export const PACKAGE_VERSION = "0.9.38";
6
6
  export * as agents from "./src/agents.js";
7
7
  export * as chart from "./src/chart.js";
8
8
  export * as chat from "./src/chat.js";
@@ -57,4 +57,4 @@ export { TYPOGRAPHY_RULE } from "./src/style.js";
57
57
  export { TITLE_INSTRUCTIONS } from "./src/summarize.js";
58
58
  export { TRACE_IO_LIMIT, MLFLOW_SPAN_INPUTS_ATTR, MLFLOW_SPAN_OUTPUTS_ATTR } from "./src/trace-io.js";
59
59
  export { DEFAULT_SKILL_FOLDERS } from "./src/workspaces.js";
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7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c0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMzZcIjtcbmV4cG9ydCAqIGFzIGFnZW50cyBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgKiBhcyBjaGFydCBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXQgZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGV2YWx1YXRpb24gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVzeXN0ZW1zIGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzYW5kYm94IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZ1Nhbml0aXplIGZyb20gXCIuL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbFBhdGhzIGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0ICogYXMgc3RhdGVtZW50IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCAqIGFzIHN0b3JhZ2VTY2hlbWEgZnJvbSBcIi4vc3JjL3N0b3JhZ2Utc2NoZW1hLnRzXCI7XG5leHBvcnQgKiBhcyBzdHlsZSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCAqIGFzIHN1bW1hcml6ZSBmcm9tIFwiLi9zcmMvc3VtbWFyaXplLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFjZUlvIGZyb20gXCIuL3NyYy90cmFjZS1pby50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IEZBTExCQUNLX0FHRU5UX0lELCBERUZBVUxUX0FHRU5UX01BWF9TVEVQUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYVRvb2xzLCBBcHBLaXRUb29sT3B0aW9ucywgVG9vbGtpdE9wdGlvbnMsIE1hc3RyYVBsdWdpblRvb2xraXRQcm92aWRlciwgTWFzdHJhUGx1Z2lucywgTWFzdHJhVG9vbHNGbiwgTWFzdHJhQWdlbnRXb3Jrc3BhY2VSZXNvbHZlciwgTWFzdHJhQWdlbnREZWZpbml0aW9uLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVN0b3JhZ2VDb25maWdPdmVycmlkZSwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUsIEFnZW50RGVmYXVsdE1vZGVsLCBCdWlsdEFnZW50cyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB7IGNoYXJ0UGxhblNjaGVtYSwgY2hhcnRQbGFubmVyUmVxdWVzdFNjaGVtYSwgY2hhcnRUb29sT3V0cHV0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgdHlwZSB7IENoYXJ0UGxhbm5lclJlcXVlc3QsIENoYXJ0VG9vbE91dHB1dCwgUHJlcGFyZUNoYXJ0T3B0aW9ucywgRmV0Y2hDaGFydE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1VTRVJfTkFNRV9LRVksIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIE1BU1RSQV9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBVc2VyLCBNYXN0cmFNZW1vcnlDb25maWcsIE1hc3RyYU1jcENvbmZpZywgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgbW9kZWxDYXRhbG9ndWVEZWZhdWx0cywgZ2VuaWVTdWdnZXN0aW9uRGVmYXVsdHMsIHN0YXRlbWVudERhdGFEZWZhdWx0cywgY2hhcnRGZXRjaERlZmF1bHRzLCBmZWVkYmFja1dyaXRlRGVmYXVsdHMgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRXZhbERyaXZlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0IHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2ZpbGVzeXN0ZW1zLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0dFTklFX0FMSUFTLCBHRU5JRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVTcGFjZUNvbmZpZywgR2VuaWVTcGFjZXNDb25maWcgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB7IElERU5USVRZX0VOViwgSURFTlRJVFlfTU9ERVMsIERFRkFVTFRfSURFTlRJVFlfTU9ERSwgVVNFUl9JRF9IRUFERVIsIFVTRVJfRU1BSUxfSEVBREVSLCByZXF1ZXN0VXNlcklkLCByZXF1ZXN0VXNlckVtYWlsLCB1c2VTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXNvbHZlZE1jcCB9IGZyb20gXCIuL3NyYy9tY3AudHNcIjtcbmV4cG9ydCB7IE1lbW9yeUJ1aWxkZXIgfSBmcm9tIFwiLi9zcmMvbWVtb3J5LnRzXCI7XG5leHBvcnQgdHlwZSB7IExvZ0ZlZWRiYWNrUGFyYW1zIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHsgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgTW9udHlTYW5kYm94IH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0IHsgTWFzdHJhUGx1Z2luLCBtYXN0cmEgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBzdHJpcFN0YWxlQ2hhcnRzUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCB7IEFJVE9PTFNfU09VUkNFIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQWlUb29sc1NvdXJjZSwgUmVtb3RlU2tpbGxTb3VyY2VPcHRpb25zLCBSZW1vdGVTa2lsbFNvdXJjZSwgUmVtb3RlU2tpbGxzT3B0aW9uLCBQcm92aXNpb25SZW1vdGVTa2lsbHNPcHRpb25zLCBQcm92aXNpb25lZFJlbW90ZVNraWxscywgUmVtb3RlU2tpbGxDYWNoZUVudHJ5LCBSZW1vdGVTa2lsbHNNZXRhZGF0YSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NGZXRjaEluaXQgfSBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0IHsgRGF0YWJyaWNrc1NhbmRib3ggfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFTZXJ2ZXIgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF0dHJpYnV0ZWRJZGVudGl0eSwgTWFzdHJhQXBpR2F0ZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCB9IGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0IHsgU1RBVEVNRU5UX1JPV19DQVAgfSBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgeyBUWVBPR1JBUEhZX1JVTEUgfSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCB7IFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3VtbWFyaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB7IFRSQUNFX0lPX0xJTUlULCBNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSIH0gZnJvbSBcIi4vc3JjL3RyYWNlLWlvLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNjaGVtYUlzc3VlcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX1NLSUxMX0ZPTERFUlMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VNb3VudENvbnRleHQsIFNraWxsRm9sZGVyVmFsdWUsIFNraWxsRm9sZGVyT3B0aW9ucywgV29ya3NwYWNlTW91bnRDb250cmlidXRpb24sIFdvcmtzcGFjZU1vdW50UmVzb2x2ZXIsIERlZmF1bHRTa2lsbEZvbGRlck5hbWUsIFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24sIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7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c0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMzhcIjtcbmV4cG9ydCAqIGFzIGFnZW50cyBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgKiBhcyBjaGFydCBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXQgZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGV2YWx1YXRpb24gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVzeXN0ZW1zIGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzYW5kYm94IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZ1Nhbml0aXplIGZyb20gXCIuL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbFBhdGhzIGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0ICogYXMgc3RhdGVtZW50IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCAqIGFzIHN0b3JhZ2VTY2hlbWEgZnJvbSBcIi4vc3JjL3N0b3JhZ2Utc2NoZW1hLnRzXCI7XG5leHBvcnQgKiBhcyBzdHlsZSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCAqIGFzIHN1bW1hcml6ZSBmcm9tIFwiLi9zcmMvc3VtbWFyaXplLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFjZUlvIGZyb20gXCIuL3NyYy90cmFjZS1pby50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IEZBTExCQUNLX0FHRU5UX0lELCBERUZBVUxUX0FHRU5UX01BWF9TVEVQUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYVRvb2xzLCBBcHBLaXRUb29sT3B0aW9ucywgVG9vbGtpdE9wdGlvbnMsIE1hc3RyYVBsdWdpblRvb2xraXRQcm92aWRlciwgTWFzdHJhUGx1Z2lucywgTWFzdHJhVG9vbHNGbiwgTWFzdHJhQWdlbnRXb3Jrc3BhY2VSZXNvbHZlciwgTWFzdHJhQWdlbnREZWZpbml0aW9uLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVN0b3JhZ2VDb25maWdPdmVycmlkZSwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUsIEFnZW50RGVmYXVsdE1vZGVsLCBCdWlsdEFnZW50cyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB7IGNoYXJ0UGxhblNjaGVtYSwgY2hhcnRQbGFubmVyUmVxdWVzdFNjaGVtYSwgY2hhcnRUb29sT3V0cHV0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgdHlwZSB7IENoYXJ0UGxhbm5lclJlcXVlc3QsIENoYXJ0VG9vbE91dHB1dCwgUHJlcGFyZUNoYXJ0T3B0aW9ucywgRmV0Y2hDaGFydE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1VTRVJfTkFNRV9LRVksIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIE1BU1RSQV9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBVc2VyLCBNYXN0cmFNZW1vcnlDb25maWcsIE1hc3RyYU1jcENvbmZpZywgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgbW9kZWxDYXRhbG9ndWVEZWZhdWx0cywgZ2VuaWVTdWdnZXN0aW9uRGVmYXVsdHMsIHN0YXRlbWVudERhdGFEZWZhdWx0cywgY2hhcnRGZXRjaERlZmF1bHRzLCBmZWVkYmFja1dyaXRlRGVmYXVsdHMgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRXZhbERyaXZlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0IHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2ZpbGVzeXN0ZW1zLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0dFTklFX0FMSUFTLCBHRU5JRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVTcGFjZUNvbmZpZywgR2VuaWVTcGFjZXNDb25maWcgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB7IElERU5USVRZX0VOViwgSURFTlRJVFlfTU9ERVMsIERFRkFVTFRfSURFTlRJVFlfTU9ERSwgVVNFUl9JRF9IRUFERVIsIFVTRVJfRU1BSUxfSEVBREVSLCByZXF1ZXN0VXNlcklkLCByZXF1ZXN0VXNlckVtYWlsLCB1c2VTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXNvbHZlZE1jcCB9IGZyb20gXCIuL3NyYy9tY3AudHNcIjtcbmV4cG9ydCB7IE1lbW9yeUJ1aWxkZXIgfSBmcm9tIFwiLi9zcmMvbWVtb3J5LnRzXCI7XG5leHBvcnQgdHlwZSB7IExvZ0ZlZWRiYWNrUGFyYW1zIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHsgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgTW9udHlTYW5kYm94IH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0IHsgTWFzdHJhUGx1Z2luLCBtYXN0cmEgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBzdHJpcFN0YWxlQ2hhcnRzUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCB7IEFJVE9PTFNfU09VUkNFIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQWlUb29sc1NvdXJjZSwgUmVtb3RlU2tpbGxTb3VyY2VPcHRpb25zLCBSZW1vdGVTa2lsbFNvdXJjZSwgUmVtb3RlU2tpbGxzT3B0aW9uLCBQcm92aXNpb25SZW1vdGVTa2lsbHNPcHRpb25zLCBQcm92aXNpb25lZFJlbW90ZVNraWxscywgUmVtb3RlU2tpbGxDYWNoZUVudHJ5LCBSZW1vdGVTa2lsbHNNZXRhZGF0YSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NGZXRjaEluaXQgfSBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0IHsgRGF0YWJyaWNrc1NhbmRib3ggfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFTZXJ2ZXIgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF0dHJpYnV0ZWRJZGVudGl0eSwgTWFzdHJhQXBpR2F0ZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCB9IGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0IHsgU1RBVEVNRU5UX1JPV19DQVAgfSBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgeyBUWVBPR1JBUEhZX1JVTEUgfSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCB7IFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3VtbWFyaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB7IFRSQUNFX0lPX0xJTUlULCBNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSIH0gZnJvbSBcIi4vc3JjL3RyYWNlLWlvLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNjaGVtYUlzc3VlcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX1NLSUxMX0ZPTERFUlMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VNb3VudENvbnRleHQsIFNraWxsRm9sZGVyVmFsdWUsIFNraWxsRm9sZGVyT3B0aW9ucywgV29ya3NwYWNlTW91bnRDb250cmlidXRpb24sIFdvcmtzcGFjZU1vdW50UmVzb2x2ZXIsIERlZmF1bHRTa2lsbEZvbGRlck5hbWUsIFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24sIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuIl19
@@ -77,6 +77,7 @@ export declare const chartPlannerRequestSchema: z.ZodObject<{
77
77
  description: z.ZodOptional<z.ZodString>;
78
78
  data: z.ZodReadonly<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
79
79
  }, z.core.$strip>;
80
+ /** Validated title, description, and tabular rows passed to the chart-planning model. */
80
81
  export type ChartPlannerRequest = z.infer<typeof chartPlannerRequestSchema>;
81
82
  /**
82
83
  * Agent-facing result of either chart-producing tool.
package/lib/src/chart.js CHANGED
@@ -1025,4 +1025,4 @@ export function buildRenderDataTool(config) {
1025
1025
  },
1026
1026
  });
1027
1027
  }
1028
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxFQUNILE1BQU0sRUFDTixXQUFXLEdBRVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBZ0MsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUUxQyw2RUFBNkU7QUFFN0U7Ozs7OztHQU1HO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRXBDLHNEQUFzRDtBQUN0RCxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQztBQUU3QyxtRUFBbUU7QUFDbkUsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUM7QUFFeEMsdURBQXVEO0FBQ3ZELE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBRXRDLG9FQUFvRTtBQUNwRSxNQUFN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QUM7WUFDckM7Ozs7Ozs7O09BUUM7WUFDRDs7Ozs7Ozs7OztPQVVDO1lBQ0Q7Ozs7O09BS0M7U0FDRixDQUFDO1FBQ0YsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxZQUFZLEVBQUUscUJBQXFCO1FBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQTRCLENBQUM7WUFDbEUsTUFBTSxHQUFHLEdBQUcsTUFBeUQsQ0FBQztZQUN0RSxPQUFPLFlBQVksQ0FBQztnQkFDbEIsTUFBTTtnQkFDTixPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUM7Z0JBQzVDLEtBQUs7Z0JBQ0wsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbEQsR0FBRyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3ZFLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGFydCBwbGFubmVyICsgY2hhcnQgY2FjaGUuXG4gKlxuICogU2VsZi1jb250YWluZWQgY2hhcnQgc3Vic3lzdGVtIHdpdGggdHdvIGxheWVyczpcbiAqXG4gKiAgIDEuIElubmVyIHBsYW5uZXIgYWdlbnQgKHByaXZhdGUpLiBQdXJlIGRhdGFzZXQtaW4gL1xuICogICAgICBgRUNoYXJ0c09wdGlvbmAtb3V0IGJyYWluLiBEcml2ZW4gYnkge0BsaW5rIHByZXBhcmVDaGFydH07XG4gKiAgICAgIGNhbGxlcnMgbmV2ZXIgaW5zdGFudGlhdGUgaXQgZGlyZWN0bHkuXG4gKiAgIDIuIHtAbGluayBwcmVwYXJlQ2hhcnR9OiBvcmNoZXN0cmF0aW9uIG9uIHRvcCBvZiB0aGUgcGxhbm5lci5cbiAqICAgICAgTWludHMgYSBgY2hhcnRJZGAsIGNhY2hlcyBhbiBlbXB0eSBgeyBjaGFydElkIH1gIHJlY29yZFxuICogICAgICBzeW5jaHJvbm91c2x5LCB0aGVuIHJlc29sdmVzIHRoZSBkYXRhc2V0IGFuZCBydW5zIHRoZVxuICogICAgICBwbGFubmVyIGluIHRoZSBiYWNrZ3JvdW5kLiBUaGUgdGVybWluYWwgZW50cnkgc2V0dGxlcyB3aXRoXG4gKiAgICAgIGVpdGhlciBgcmVzdWx0YCAoc3VjY2Vzcykgb3IgYGVycm9yYCAoZmFpbHVyZSkuIEJvdGhcbiAqICAgICAgdW5kZWZpbmVkIG1lYW5zIHRoZSBlbnRyeSBpcyBzdGlsbCBwcm9jZXNzaW5nLlxuICpcbiAqIFRoZSBjYWNoZSBzdXJmYWNlICh7QGxpbmsgZmV0Y2hDaGFydH0pIGlzIHRoZSBvbmx5IHN0YXRlIHRoZVxuICogSFRUUCByb3V0ZSBhbmQgdGhlIGNoYXJ0LXByb2R1Y2luZyB0b29scyBzaGFyZS4gYHByZXBhcmVDaGFydGBcbiAqIGlzIGRhdGFzZXQtYWdub3N0aWMgLSBjYWxsZXJzIHN1cHBseSBhIGByZXNvbHZlRGF0YWAgY2FsbGJhY2tcbiAqIHRoYXQgZmV0Y2hlcyB0aGUgcm93cyBob3dldmVyIHRoZXkgbGlrZSAoR2VuaWUgc3RhdGVtZW50LCBpbmxpbmVcbiAqIGRhdGFzZXQsIGN1c3RvbSBBUEkpLiBUaGUgbW9kdWxlIGhhcyBubyBrbm93bGVkZ2Ugb2YgR2VuaWUgb3JcbiAqIHN0YXRlbWVudCBpZHM7IHRob3NlIGNvbmNlcm5zIGxpdmUgaW4gdGhlIHRvb2xzIHRoYXQgd3JhcCBpdC5cbiAqXG4gKiBXaXJlLWZvcm1hdCBzY2hlbWFzIGxpdmUgaW4gYEBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYWAgc29cbiAqIHRoZSBkZW1vIGNsaWVudCBhbmQgYW55IG90aGVyIFVJIGNvbnN1bWVyIHNoYXJlIHRoZSBleGFjdCBzYW1lXG4gKiBzaGFwZSB0aGlzIG1vZHVsZSByZWFkcyBhbmQgd3JpdGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBBcHBLaXRFcnJvciwgQ2FjaGVNYW5hZ2VyLCBFeGVjdXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGFzeW5jVXRpbHMsXG4gIGVycm9yVXRpbHMsXG4gIGhhc2gsXG4gIGpzb24sXG4gIGxvZyxcbiAgb2JqZWN0LFxuICBzdHJpbmdVdGlscyxcbiAgdHlwZSBCcmFuZENvbnRleHQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBtYXJrZXJzLCB3aXJlLCB0eXBlIENoYXJ0LCB0eXBlIENoYXJ0UmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IEFnZW50IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZVVzZXJLZXksIHR5cGUgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBidWlsZE1vZGVsIH0gZnJvbSBcIi4vbW9kZWwudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9jaGFydFwiKTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUVEwgZm9yIGNhY2hlZCBjaGFydCBlbnRyaWVzLiBPbmUgaG91ciBiYWxhbmNlcyBcImxvbmcgZW5vdWdoIGZvclxuICogdGhlIGhvc3QgVUkgdG8gZmV0Y2ggdGhlIGNoYXJ0IHdlbGwgYWZ0ZXIgdGhlIG1vZGVsIGZpbmlzaGVkXG4gKiB0YWxraW5nXCIgYWdhaW5zdCBcInNob3J0IGVub3VnaCB0aGF0IGFiYW5kb25lZCBjaGFydCBpZHMgZG9uJ3RcbiAqIHBpbiBzdG9yYWdlXCIuIE1hdGNoZXMgdGhlIHR5cGljYWwgRGF0YWJyaWNrcyBPQk8gdG9rZW4gbGlmZXRpbWVcbiAqIHNvIGFueSBkYXRhIHJlLXJlc29sdXRpb24gc3RheXMgaW5zaWRlIHRoZSBvcmlnaW5hbCBhdXRoIHdpbmRvdy5cbiAqL1xuY29uc3QgQ0hBUlRfQ0FDSEVfVFRMX1NFQyA9IDYwICogNjA7XG5cbi8qKiBDYWNoZSBuYW1lc3BhY2U7IGtlZXBzIHRoZSBjaGFydCBrZXlzcGFjZSB0aWR5LiAqL1xuY29uc3QgQ0hBUlRfQ0FDSEVfTkFNRVNQQUNFID0gXCJtYXN0cmE6Y2hhcnRcIjtcblxuLyoqIERlZmF1bHQgc2VydmVyLXNpZGUgbG9uZy1wb2xsIGJ1ZGdldCBmb3Ige0BsaW5rIGZldGNoQ2hhcnR9LiAqL1xuY29uc3QgREVGQVVMVF9GRVRDSF9USU1FT1VUX01TID0gNjBfMDAwO1xuXG4vKiogRGVmYXVsdCBpbnRlci1wb2xsIHNsZWVwIGZvciB7QGxpbmsgZmV0Y2hDaGFydH0uICovXG5jb25zdCBERUZBVUxUX0ZFVENIX0lOVEVSVkFMX01TID0gMjUwO1xuXG4vKiogU3RhYmxlIHRleHQgc3RvcmVkIG9uIGEgY2hhcnQgZW50cnkgd2hvc2UgcGxhbm5lciBydW4gZmFpbGVkLiAqL1xuY29uc3QgQ0hBUlRfRkFJTEVEX01FU1NBR0UgPSBcIkNoYXJ0IGdlbmVyYXRpb24gZmFpbGVkXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NoZW1hcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogT25lIHNlcmllcyBkYXRhIHBvaW50LiBXaWRlIHZhcmlhbnQgc2V0IHNvIHRoZSBwbGFubmVyIGFnZW50IGNhblxuICogZmFpdGhmdWxseSBwYXNzIHRocm91Z2ggd2hhdGV2ZXIgdGhlIFNRTCByb3cgc2V0IGNvbnRhaW5lZFxuICogKG51bWJlcnMsIHN0cmluZ2lmaWVkIG51bWJlcnMsIG51bGxzIGZvciBtaXNzaW5nIG1lYXN1cmVtZW50cyxcbiAqIGBbeCwgeV1gIHR1cGxlcyBmb3Igc2NhdHRlciwgYFt4LCB5LCB2YWx1ZV1gIHRyaXBsZXMgZm9yIGhlYXRtYXAsXG4gKiBge25hbWUsIHZhbHVlfWAgc2xpY2VzIGZvciBwaWUgLyBmdW5uZWwgLyB0cmVlbWFwKSB3aXRob3V0IHRoZVxuICogc3RydWN0dXJlZC1vdXRwdXQgZ3VhcmQgcmVqZWN0aW5nIHRoZSB3aG9sZSBwbGFuLlxuICpcbiAqIFRocmVlIGxheWVycyBvZiB0b2xlcmFuY2U6XG4gKlxuICogICAxLiB7QGxpbmsgei5wcmVwcm9jZXNzfSBub3JtYWxpemVzIHdpcmUgc2hhcGVzIEJFRk9SRSB1bmlvblxuICogICAgICBkaXNwYXRjaDogc3RyaW5naWZpZWQgbnVtYmVycyBwYXJzZSB0byBudW1iZXJzLCBmaW5pdGVcbiAqICAgICAgY2hlY2tzIHJlamVjdCBgTmFOYCAvIGBJbmZpbml0eWAsIDItLzMtZWxlbWVudCBhcnJheXMgY29lcmNlXG4gKiAgICAgIHR1cGxlIGNvbXBvbmVudHMsIGFuZCBge3ZhbHVlfWAgb2JqZWN0cyB3aXRoIG1pc3NpbmcgL1xuICogICAgICBzdHJpbmdpZmllZCBgdmFsdWVgIGdldCBjb2VyY2VkIG9yIHJlamVjdGVkIHVuaWZvcm1seS5cbiAqICAgICAgQW55dGhpbmcgbm90IGhhbmRsZWFibGUgYmVjb21lcyBgbnVsbGAuXG4gKiAgIDIuIFRoZSB1bmlvbiBhY2NlcHRzIGBudWxsYCBhcyBhIGZpcnN0LWNsYXNzIHZhcmlhbnQuIEVjaGFydHNcbiAqICAgICAgcmVuZGVycyBudWxsIGFzIGEgZ2FwIG9uIGJhciAvIGxpbmUgLyBhcmVhICh3aGljaCBpcyB0aGVcbiAqICAgICAgcmlnaHQgdmlzdWFsIHNpZ25hbCBmb3IgXCJtaXNzaW5nIHJlYWRpbmdcIikuIFNjYXR0ZXIsIGhlYXRtYXAsXG4gKiAgICAgIGFuZCBzbGljZSBjaGFydHMgZmlsdGVyIG51bGxzIGluIHtAbGluayBwbGFuVG9FY2hhcnRzT3B0aW9ufVxuICogICAgICBiZWNhdXNlIEVjaGFydHMgY3Jhc2hlcyBvbiBudWxsIHR1cGxlcyAvIHNsaWNlcy5cbiAqICAgMy4ge0BsaW5rIHoudW5pb24jY2F0Y2h9IGJhY2tzdG9wcyB0aGUgd2hvbGUgdGhpbmc6IGlmXG4gKiAgICAgIHByZXByb2Nlc3Mgc29tZWhvdyBwcm9kdWNlcyBhIHNoYXBlIHRoYXQgc3RpbGwgZG9lc24ndFxuICogICAgICBtYXRjaCBhbnkgdmFyaWFudCwgdGhlIGJhZCBpdGVtIGJlY29tZXMgYG51bGxgIGluc3RlYWQgb2ZcbiAqICAgICAgdGFraW5nIGRvd24gdGhlIGVudGlyZSBjaGFydCB3aXRoIGFcbiAqICAgICAgYFN0cnVjdHVyZWQgb3V0cHV0IHZhbGlkYXRpb24gZmFpbGVkYCBlcnJvci5cbiAqL1xuY29uc3QgY2hhcnREYXRhUG9pbnRTY2hlbWEgPSB6XG4gIC5wcmVwcm9jZXNzKFxuICAgICh2KSA9PiB7XG4gICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHYpID8gdiA6IG51bGw7XG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdC50b051bWJlcih2KSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgLy8gU2NhdHRlciBgW3gsIHldYCBvciBoZWF0bWFwIGBbeEluZGV4LCB5SW5kZXgsIHZhbHVlXWAuIENvZXJjZVxuICAgICAgLy8gc3RyaW5naWZpZWQgY29tcG9uZW50czsgcmVqZWN0IGlmIGFueSBjb21wb25lbnQgaXMgbm9uLWZpbml0ZS5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpICYmICh2Lmxlbmd0aCA9PT0gMiB8fCB2Lmxlbmd0aCA9PT0gMykpIHtcbiAgICAgICAgY29uc3QgbnVtcyA9IHYubWFwKChjKSA9PiBvYmplY3QudG9OdW1iZXIoYykpO1xuICAgICAgICByZXR1cm4gbnVtcy5ldmVyeSgobikgPT4gbiAhPT0gdW5kZWZpbmVkKSA/IG51bXMgOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgXCJ2YWx1ZVwiIGluIHYpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdiBhcyB7IG5hbWU/OiB1bmtub3duOyB2YWx1ZTogdW5rbm93biB9O1xuICAgICAgICBjb25zdCB2YWwgPSBvYmplY3QudG9OdW1iZXIob2JqLnZhbHVlKTtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gQ29lcmNlIG51bWVyaWMgLyBib29sZWFuIC8gbnVsbGlzaCBuYW1lcyB0byBzdHJpbmdzIHNvIGFcbiAgICAgICAgLy8gcGllIHNsaWNlIGtleWVkIG9uIGEgeWVhciAoYDIwMjRgKSBvciBjYXRlZ29yeSBpZCBpc1xuICAgICAgICAvLyBhY2NlcHRlZCB3aXRob3V0IHJvdW5kLXRyaXBwaW5nIHRocm91Z2ggdGhlIGNhdGNoIGFybS5cbiAgICAgICAgY29uc3QgcmF3TmFtZSA9IG9iai5uYW1lO1xuICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mIHJhd05hbWUgPT09IFwic3RyaW5nXCIgPyByYXdOYW1lIDogcmF3TmFtZSA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhyYXdOYW1lKTtcbiAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWU6IHZhbCB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB6LnVuaW9uKFtcbiAgICAgIHoubnVtYmVyKCksXG4gICAgICB6Lm51bGwoKSxcbiAgICAgIC8vIGBbeCwgeV1gIHNjYXR0ZXIgb3IgYFt4LCB5LCB2YWx1ZV1gIGhlYXRtYXAgY2VsbC4gTW9kZWxsZWQgYXMgYVxuICAgICAgLy8gbGVuZ3RoLWNvbnN0cmFpbmVkIGhvbW9nZW5lb3VzIGFycmF5IHJhdGhlciB0aGFuIGB6LnR1cGxlYDpcbiAgICAgIC8vIFpvZCBlbWl0cyBhIHR1cGxlIGFzIEpTT04gU2NoZW1hIDIwMjAtMTIgYHByZWZpeEl0ZW1zYCwgYW5kXG4gICAgICAvLyBEYXRhYnJpY2tzJyBHZW1pbmkgZW5kcG9pbnRzIHJlamVjdCBhIGByZXNwb25zZV9qc29uX3NjaGVtYWBcbiAgICAgIC8vIGNvbnRhaW5pbmcgaXQgKFwibXVzdCBiZSBhIGJvb2xlYW4gb3IgYW4gb2JqZWN0XCIsIHNpbmNlXG4gICAgICAvLyBgaXRlbXNgIGlzIGFic2VudCkuIGBtaW5JdGVtc2AgLyBgbWF4SXRlbXNgICsgYGl0ZW1zYCBpcyB3aGF0XG4gICAgICAvLyBldmVyeSBwcm92aWRlciB1bmRlcnN0YW5kcy5cbiAgICAgIHouYXJyYXkoei5udW1iZXIoKSkubWluKDIpLm1heCgzKSxcbiAgICAgIHoub2JqZWN0KHsgbmFtZTogei5zdHJpbmcoKSwgdmFsdWU6IHoubnVtYmVyKCkgfSksXG4gICAgXSksXG4gIClcbiAgLmNhdGNoKG51bGwpO1xuXG4vKiogUGVyLXNlcmllcyBtYXJrIHR5cGUgdXNlZCBieSBgY29tYm9gIGNoYXJ0cyAoYmFyICsgbGluZSBvdmVybGF5KS4gKi9cbmNvbnN0IHNlcmllc01hcmtUeXBlU2NoZW1hID0gelxuICAudW5pb24oW3oubGl0ZXJhbChcImJhclwiKSwgei5saXRlcmFsKFwibGluZVwiKSwgei5saXRlcmFsKFwiYXJlYVwiKV0pXG4gIC5kZXNjcmliZShcbiAgICBcIk1hcmsgdHlwZSBmb3IgdGhpcyBzZXJpZXMuIFJlcXVpcmVkIGZvciBgY29tYm9gIChtaXggYmFyIGFuZCBsaW5lL2FyZWEpOyB1c2UgbnVsbCBmb3Igb3RoZXIgY2hhcnQgdHlwZXMuXCIsXG4gICk7XG5cbi8qKlxuICogQ29tcGFjdCwgbW9kZWwtZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gb2YgYW4gRWNoYXJ0cyBzcGVjLiBUaGVcbiAqIHBsYW5uZXIgYWdlbnQgZW1pdHMgdGhpczsge0BsaW5rIHBsYW5Ub0VjaGFydHNPcHRpb259IGV4cGFuZHMgaXRcbiAqIGludG8gYSByZWFsIGBFQ2hhcnRzT3B0aW9uYCBKU09OLiBUd28gbGF5ZXJzIGJlY2F1c2UgbGV0dGluZyB0aGVcbiAqIG1vZGVsIGZpbGwgaW4gYSBmdWxseS10eXBlZCBgRUNoYXJ0c09wdGlvbmAgaXMgYnJpdHRsZSAoaHVuZHJlZHNcbiAqIG9mIG9wdGlvbmFsIGZpZWxkcywgZGVlcCB1bmlvbnMsIHZlcnNpb24tZGVwZW5kZW50IHNoYXBlcykuIEFcbiAqIHNtYWxsIFwiY2hhcnQgcGxhblwiIHNjaGVtYSBpcyBtdWNoIG1vcmUgcmVsaWFibGUgZm9yIGEgZmFzdCBtb2RlbFxuICogYW5kIGtlZXBzIGFuaW1hdGlvbiAvIHRvb2x0aXAgLyBzdHlsaW5nIGRlZmF1bHRzIGNvbnNpc3RlbnRcbiAqIGFjcm9zcyBjaGFydHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGFydFBsYW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0VHlwZTogd2lyZS5DaGFydFR5cGVTY2hlbWEsXG4gIHRpdGxlOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm51bGxhYmxlKClcbiAgICAuZGVmYXVsdChudWxsKVxuICAgIC5kZXNjcmliZShcbiAgICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBTaG9ydCB0aXRsZSBzaG93biBhYm92ZSB0aGUgY2hhcnQuIFVzZSBudWxsIHRvIGZhbGwgYmFjayB0byB0aGVcbiAgICAgICAgXFxgdGl0bGVcXGAgYXJndW1lbnQgdGhlIGNhbGxlciBwYXNzZWQgaW4uXG4gICAgICBgKSxcbiAgICApLFxuICB4QXhpc0xhYmVsOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm51bGxhYmxlKClcbiAgICAuZGVmYXVsdChudWxsKVxuICAgIC5kZXNjcmliZShcbiAgICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBBeGlzIGxhYmVsIGZvciB0aGUgcHJpbWFyeSAodXN1YWxseSBib3R0b20gLyB2YWx1ZSkgYXhpcy5cbiAgICAgICAgVXNlZCBmb3IgYmFyIC8gaG9yaXpvbnRhbEJhciAvIGxpbmUgLyBhcmVhIC8gY29tYm8gLyB3YXRlcmZhbGxcbiAgICAgICAgLyBzY2F0dGVyIC8gaGVhdG1hcDsgdXNlIG51bGwgZm9yIHBpZSAvIGZ1bm5lbCAvIHRyZWVtYXAgLyByYWRhci5cbiAgICAgIGApLFxuICAgICksXG4gIHlBeGlzTGFiZWw6IHpcbiAgICAuc3RyaW5nKClcbiAgICAubnVsbGFibGUoKVxuICAgIC5kZWZhdWx0KG51bGwpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIEF4aXMgbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgKHVzdWFsbHkgbGVmdCkgYXhpcy4gVXNlZCBmb3JcbiAgICAgICAgYmFyIC8gaG9yaXpvbnRhbEJhciAvIGxpbmUgLyBhcmVhIC8gY29tYm8gLyB3YXRlcmZhbGwgL1xuICAgICAgICBzY2F0dGVyIC8gaGVhdG1hcDsgdXNlIG51bGwgZm9yIHBpZSAvIGZ1bm5lbCAvIHRyZWVtYXAgLyByYWRhci5cbiAgICAgIGApLFxuICAgICksXG4gIGNhdGVnb3JpZXM6IHpcbiAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAubnVsbGFibGUoKVxuICAgIC5kZWZhdWx0KG51bGwpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIFByaW1hcnkgY2F0ZWdvcnkgbGFiZWxzLiBGb3IgXFxgYmFyXFxgIC8gXFxgaG9yaXpvbnRhbEJhclxcYCAvXG4gICAgICAgIFxcYGxpbmVcXGAgLyBcXGBhcmVhXFxgIC8gXFxgY29tYm9cXGAgLyBcXGB3YXRlcmZhbGxcXGA6IG9uZSBsYWJlbCBwZXJcbiAgICAgICAgZGF0YSBwb2ludC4gRm9yIFxcYGhlYXRtYXBcXGA6IHgtYXhpcyBjYXRlZ29yaWVzLiBGb3IgXFxgcmFkYXJcXGA6XG4gICAgICAgIGluZGljYXRvciBuYW1lcy4gVXNlIG51bGwgZm9yIFxcYHNjYXR0ZXJcXGAgKFxcYFt4LCB5XVxcYCB0dXBsZXMpIGFuZFxuICAgICAgICBzbGljZSBjaGFydHMgKFxcYHBpZVxcYCAvIFxcYGZ1bm5lbFxcYCAvIFxcYHRyZWVtYXBcXGAsIGVhY2ggc2xpY2VcbiAgICAgICAgY2FycmllcyBpdHMgb3duIFxcYG5hbWVcXGApLlxuICAgICAgYCksXG4gICAgKSxcbiAgeUNhdGVnb3JpZXM6IHpcbiAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAubnVsbGFibGUoKVxuICAgIC5kZWZhdWx0KG51bGwpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIFktYXhpcyAocm93KSBsYWJlbHMgZm9yIFxcYGhlYXRtYXBcXGAuIFVzZSBudWxsIHdoZW4gdGhlXG4gICAgICAgIHJvdyBsYWJlbHMgY29tZSBmcm9tIHRoZSBzZXJpZXMgbmFtZXMsIHdoaWNoIGlzIHRoZSBwcmVmZXJyZWRcbiAgICAgICAgd2F5IHRvIGJ1aWxkIGEgaGVhdG1hcC4gVXNlIG51bGwgZm9yIGV2ZXJ5IG90aGVyIGNoYXJ0IHR5cGUuXG4gICAgICBgKSxcbiAgICApLFxuICBzZXJpZXM6IHpcbiAgICAuYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXG4gICAgICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgICAgICBMZWdlbmQgbmFtZSBmb3IgdGhpcyBzZXJpZXMuXG4gICAgICAgICAgYCksXG4gICAgICAgICksXG4gICAgICAgIHR5cGU6IHNlcmllc01hcmtUeXBlU2NoZW1hLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgICAgICAgeUF4aXNJbmRleDogelxuICAgICAgICAgIC51bmlvbihbei5saXRlcmFsKDApLCB6LmxpdGVyYWwoMSldKVxuICAgICAgICAgIC5udWxsYWJsZSgpXG4gICAgICAgICAgLmRlZmF1bHQobnVsbClcbiAgICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgICBcIldoaWNoIHktYXhpcyB0byBiaW5kICgwID0gbGVmdCwgMSA9IHJpZ2h0KS4gVXNlIG9uIGBjb21ib2Agd2hlbiBzZXJpZXMgaGF2ZSBkaWZmZXJlbnQgdW5pdHMgb3Igc2NhbGVzOyB1c2UgbnVsbCBvdGhlcndpc2UuXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgZGF0YTogei5hcnJheShjaGFydERhdGFQb2ludFNjaGVtYSkuZGVzY3JpYmUoXG4gICAgICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgICAgICBEYXRhIHBvaW50cy4gRm9yIGNhdGVnb3J5IGNoYXJ0cyAoXFxgYmFyXFxgIC8gXFxgaG9yaXpvbnRhbEJhclxcYFxuICAgICAgICAgICAgLyBcXGBsaW5lXFxgIC8gXFxgYXJlYVxcYCAvIFxcYGNvbWJvXFxgIC8gXFxgd2F0ZXJmYWxsXFxgIC8gXFxgcmFkYXJcXGApLFxuICAgICAgICAgICAgYW4gYXJyYXkgb2YgbnVtYmVycyBhbGlnbmVkIHRvIFxcYGNhdGVnb3JpZXNcXGA7IGZvclxuICAgICAgICAgICAgXFxgd2F0ZXJmYWxsXFxgIHRob3NlIG51bWJlcnMgYXJlIHNpZ25lZCBkZWx0YXMgKG9uZSBzZXJpZXNcbiAgICAgICAgICAgIG9ubHkgLSBuZXZlciBhIGN1bXVsYXRpdmUgYmFzZSBzZXJpZXMpLiBGb3IgXFxgaGVhdG1hcFxcYCxcbiAgICAgICAgICAgIG9uZSBzZXJpZXMgcGVyIG1hdHJpeCByb3csIGhvbGRpbmcgdGhhdCByb3cncyBudW1iZXJzXG4gICAgICAgICAgICBhbGlnbmVkIHRvIFxcYGNhdGVnb3JpZXNcXGAuIEZvciBcXGBzY2F0dGVyXFxgLCBhbiBhcnJheSBvZlxuICAgICAgICAgICAgXFxgW3gsIHldXFxgIG51bWVyaWMgdHVwbGVzLiBGb3IgXFxgcGllXFxgIC8gXFxgZnVubmVsXFxgIC9cbiAgICAgICAgICAgIFxcYHRyZWVtYXBcXGAsIGFuIGFycmF5IG9mIFxcYHtuYW1lLCB2YWx1ZX1cXGAgb2JqZWN0cy5cbiAgICAgICAgICBgKSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAuZGVzY3JpYmUoXG4gICAgICBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgICAgICAgT25lIG9yIG1vcmUgc2VyaWVzIHRvIHBsb3QuIFJlcXVpcmVkIGZvciBldmVyeSBjaGFydCB0eXBlXG4gICAgICAgIGV4Y2VwdCBcXGBjdXN0b21cXGAsIHdoaWNoIGNhcnJpZXMgaXRzIHNlcmllcyBpbnNpZGUgXFxgb3B0aW9uXFxgLlxuICAgICAgICBTbGljZSBjaGFydHMgKFxcYHBpZVxcYCAvIFxcYGZ1bm5lbFxcYCAvIFxcYHRyZWVtYXBcXGApIGFuZFxuICAgICAgICBcXGB3YXRlcmZhbGxcXGAgLyBcXGBoZWF0bWFwXFxgIHVzZSBleGFjdGx5IG9uZSBzZXJpZXM7IFxcYGJhclxcYCAvXG4gICAgICAgIFxcYGxpbmVcXGAgLyBcXGBhcmVhXFxgIC8gXFxgY29tYm9cXGAgLyBcXGByYWRhclxcYCAvIFxcYHNjYXR0ZXJcXGAgY2FuXG4gICAgICAgIGNhcnJ5IG11bHRpcGxlIHNlcmllcy5cbiAgICAgIGApLFxuICAgICksXG4gIG9wdGlvbjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5udWxsYWJsZSgpXG4gICAgLmRlZmF1bHQobnVsbClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgICAgICAgUmVxdWlyZWQgZm9yIFxcYGN1c3RvbVxcYDsgdXNlIG51bGwgZm9yIGV2ZXJ5IG90aGVyIGNoYXJ0IHR5cGUuIEFcbiAgICAgICAgQ09NUExFVEUgRWNoYXJ0cyBvcHRpb24sIGFzIGEgSlNPTiBvYmplY3QgZW5jb2RlZCBpbiBhIHN0cmluZzpcbiAgICAgICAgXFxgc2VyaWVzXFxgIChlYWNoIHdpdGggaXRzIG93biBcXGB0eXBlXFxgIGFuZCB0aGF0IHNlcmllcycgb3duIGRhdGFcbiAgICAgICAgc2hhcGUpIHBsdXMgd2hhdGV2ZXIgZWxzZSB0aGUgY2hhcnQgbmVlZHMgLSBhIGNvb3JkaW5hdGUgc3lzdGVtLFxuICAgICAgICBcXGB2aXN1YWxNYXBcXGAsIGF4ZXMuIFBsYWluIEpTT04gdmFsdWVzIG9ubHksIG5ldmVyIGEgSmF2YVNjcmlwdFxuICAgICAgICBmdW5jdGlvbi4gQSBjZW50ZXJlZCB0aXRsZSBpcyBmaWxsZWQgaW4gd2hlbiB0aGUgb2JqZWN0IG9taXRzXG4gICAgICAgIG9uZS5cbiAgICAgIGApLFxuICAgICksXG59KTtcblxudHlwZSBDaGFydFBsYW4gPSB6LmluZmVyPHR5cGVvZiBjaGFydFBsYW5TY2hlbWE+O1xudHlwZSBDaGFydFBsYW5JbnB1dCA9IHouaW5wdXQ8dHlwZW9mIGNoYXJ0UGxhblNjaGVtYT47XG5cbi8qKlxuICogQ2Fub25pY2FsIHBsYW5uZXIgaW5wdXQgc2hhcGUuIFRvb2xzIHRoYXQgc291cmNlIHJvd3MgZnJvbSBhblxuICogaW5saW5lIGRhdGFzZXQgKGByZW5kZXJfZGF0YWApIHVzZSBpdCBhcyB0aGVpciBgaW5wdXRTY2hlbWFgXG4gKiB2ZXJiYXRpbTsgdG9vbHMgdGhhdCByZXNvbHZlIHJvd3MgZnJvbSBhIHJlbW90ZSAoYHByZXBhcmVfY2hhcnRgXG4gKiBvdmVyIGEgR2VuaWUgc3RhdGVtZW50KSBgb21pdCh7IGRhdGEgfSlgIGFuZCBgZXh0ZW5kYCB3aXRoIHRoZWlyXG4gKiBvd24gaWRlbnRpZmllciBmaWVsZCwgc28gdGhlIGZpZWxkLWxldmVsIGAuZGVzY3JpYmUoKWAgdGV4dFxuICogc3RheXMgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoLiBTZXJ2ZXItb25seSAtIHRoZSBVSSBuZXZlclxuICogc2VlcyBhIHBsYW5uZXIgcmVxdWVzdCwgb25seSB0aGUgcmVzb2x2ZWQge0BsaW5rIENoYXJ0fS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoYXJ0UGxhbm5lclJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFxuICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBDb25jaXNlIHRpdGxlIHNob3duIGFib3ZlIHRoZSBjaGFydCAoZS5nLiBcIlRvcCAxMCBTS1VzIGJ5IFJldmVudWVcIikuXG4gICAgICBgKSxcbiAgKSxcbiAgZGVzY3JpcHRpb246IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBPbmUtbGluZSBpbnRlbnQgdGhlIGNoYXJ0LXBsYW5uZXIgdXNlcyB3aGVuIHBpY2tpbmcgYSBjaGFydCB0eXBlXG4gICAgICAgIGFuZCBheGlzIGVuY29kaW5ncyAoZS5nLiBcImNvbXBhcmUgcXVhcnRlcmx5IHJldmVudWUgYWNyb3NzXG4gICAgICAgIHJlZ2lvbnNcIiwgXCJoaWdobGlnaHQgdGhlIHN0ZWVwIGRyb3AgYWZ0ZXIgcG9zaXRpb24gNVwiKS4gTm90IHNob3duXG4gICAgICAgIHRvIHRoZSB1c2VyLlxuICAgICAgYCksXG4gICAgKSxcbiAgZGF0YTogelxuICAgIC5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpXG4gICAgLm5vbmVtcHR5KFwiRGF0YSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHJvd1wiKVxuICAgIC5yZWFkb25seSgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIFRhYnVsYXIgZGF0YXNldCB0byBjaGFydC4gT25lIG9iamVjdCBwZXIgcm93LCBrZXllZCBieSBjb2x1bW5cbiAgICAgICAgbmFtZS4gVmFsdWVzIG1heSBiZSBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucywgb3IgbnVsbC4gVGhlXG4gICAgICAgIGNoYXJ0LXBsYW5uZXIgZGVjaWRlcyB3aGljaCBjb2x1bW5zIGFyZSBjYXRlZ29yaWVzIHZzLiBudW1lcmljXG4gICAgICAgIHNlcmllcy4gQ2FwIGF0IGEgZmV3IGh1bmRyZWQgcm93cyBmb3IgbGVnaWJpbGl0eTsgc2FtcGxlIC9cbiAgICAgICAgYWdncmVnYXRlIGxhcmdlciBkYXRhc2V0cyBmaXJzdC5cbiAgICAgIGApLFxuICAgICksXG59KTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRQbGFubmVyUmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIGNoYXJ0UGxhbm5lclJlcXVlc3RTY2hlbWE+O1xuXG4vKipcbiAqIEFnZW50LWZhY2luZyByZXN1bHQgb2YgZWl0aGVyIGNoYXJ0LXByb2R1Y2luZyB0b29sLlxuICpcbiAqIGBtYXJrZXJgIGlzIGRlbGliZXJhdGVseSByZWR1bmRhbnQgd2l0aCBgY2hhcnRJZGA6IHRoZSBob3N0IHN0aWxsIGtleXMgdGhlXG4gKiBjYWNoZSBieSBpZCwgd2hpbGUgdGhlIG1vZGVsIGdldHMgdGhlIGV4YWN0IG9wYXF1ZSB0b2tlbiB0byBjb3B5IGludG8gcHJvc2VcbiAqIGFuZCBoYXMgbm8gcmVhc29uIHRvIGludmVudCBvciByZXR5cGUgYSBVVUlELlxuICovXG5leHBvcnQgY29uc3QgY2hhcnRUb29sT3V0cHV0U2NoZW1hID0gd2lyZS5DaGFydFNjaGVtYS5waWNrKHsgY2hhcnRJZDogdHJ1ZSB9KS5leHRlbmQoe1xuICBtYXJrZXI6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkV4YWN0IGVtYmVkIG1hcmtlci4gQ29weSB0aGlzIGNvbXBsZXRlIHZhbHVlIHZlcmJhdGltIG9udG8gaXRzIG93biBsaW5lOyBuZXZlciBjb25zdHJ1Y3QgYSBtYXJrZXIgZnJvbSBjaGFydElkLlwiLFxuICAgICksXG59KTtcblxuLyoqIFJlc3VsdCByZXR1cm5lZCBzeW5jaHJvbm91c2x5IHdoaWxlIGNoYXJ0IHBsYW5uaW5nIGNvbnRpbnVlcyBpbiB0aGUgYmFja2dyb3VuZC4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0VG9vbE91dHB1dCA9IHouaW5mZXI8dHlwZW9mIGNoYXJ0VG9vbE91dHB1dFNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwbGFubmVyIGluc3RydWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBGb3JtYXQge0BsaW5rIHdpcmUuQ2hhcnRUeXBlU2NoZW1hfSdzIHZhcmlhbnRzIGFzIGEgc2luZ2xlXG4gKiBodW1hbi1mcmllbmRseSBzdHJpbmcgb2YgYGAgYDx2YWx1ZT5gIGZvciA8ZGVzY3JpcHRpb24+IGBgXG4gKiBjbGF1c2VzIGpvaW5lZCBieSBzZW1pY29sb25zLCBkcmF3biBmcm9tIGVhY2ggdmFyaWFudCdzIG93blxuICogYC5kZXNjcmliZSgpYCBzbyB0aGUgcGxhbm5lciBwcm9tcHQgc3RheXMgaW4gbG9jay1zdGVwIHdpdGhcbiAqIHRoZSBzY2hlbWEgYnkgY29uc3RydWN0aW9uLlxuICovXG5mdW5jdGlvbiBmb3JtYXRDaGFydFR5cGVQaWNrZXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHdpcmUuQ2hhcnRUeXBlU2NoZW1hLm9wdGlvbnNcbiAgICAubWFwKChvcHQpID0+IGBcXGAke29wdC52YWx1ZX1cXGAgZm9yICR7b3B0LmRlc2NyaXB0aW9uID8/IFwiXCJ9YClcbiAgICAuam9pbihcIjsgXCIpO1xufVxuXG4vKipcbiAqIFN5c3RlbSBwcm9tcHQgZm9yIHRoZSBpbm5lciBjaGFydC1wbGFubmluZyBhZ2VudC4gVHVuZWQgZm9yIGFcbiAqIGZhc3QtdGllciBtb2RlbCAoSGFpa3UsIEdQVC01LW1pbmksIEdlbWluaSBGbGFzaCBMaXRlKS5cbiAqL1xuY29uc3QgQ0hBUlRfUExBTk5FUl9JTlNUUlVDVElPTlMgPSBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgWW91IGRlc2lnbiBBcGFjaGUgRWNoYXJ0cyB2aXN1YWxpemF0aW9ucy4gVGhlIHVzZXIgZ2l2ZXMgeW91IGFcbiAgdGFidWxhciBkYXRhc2V0IChyb3dzIG9mIG9iamVjdHMpIHBsdXMgYSB0aXRsZSBhbmQgYW4gb3B0aW9uYWxcbiAgZGVzY3JpcHRpb24gb2YgdGhlIGludGVudC4gWW91IHByb2R1Y2UgYSBzbWFsbCBjaGFydCBwbGFuIChjaGFydFxuICB0eXBlLCBheGlzIGxhYmVscywgY2F0ZWdvcmllcywgc2VyaWVzKSB0aGF0IGJlc3QgY29udmV5cyB0aGUgZGF0YS5cblxuICBEZWNpc2lvbiBndWlkZS4gUGljayB0aGUgY2hhcnQgdHlwZSB3aG9zZSBkYXRhIHNoYXBlIG1hdGNoZXMgdGhlXG4gIGRhdGFzZXQgYW5kIHRoZSB1c2VyJ3MgaW50ZW50OiAke2Zvcm1hdENoYXJ0VHlwZVBpY2tlcigpfS5cblxuICBXaGVuIGluIGRvdWJ0IGJldHdlZW4gYmFyIGFuZCBsaW5lLCBwcmVmZXIgYmFyIGZvciB1bm9yZGVyZWRcbiAgY2F0ZWdvcmllcyBhbmQgbGluZSBmb3Igb3JkZXJlZCBvbmVzIChkYXRlcywgdGltZSBidWNrZXRzLCByYW5rcykuXG4gIFByZWZlciBcXGBob3Jpem9udGFsQmFyXFxgIHdoZW4gY2F0ZWdvcnkgbGFiZWxzIGFyZSBsb25nLiBQcmVmZXJcbiAgXFxgY29tYm9cXGAgd2hlbiBvbmUgbWVhc3VyZSBpcyBhIGNvdW50L3ZvbHVtZSBhbmQgYW5vdGhlciBpcyBhXG4gIHJhdGUvdHJlbmQuIFByZWZlciBcXGB3YXRlcmZhbGxcXGAgZm9yIGJyaWRnZXMgb2Ygc2lnbmVkIGRlbHRhcy5cbiAgUHJlZmVyIFxcYHNjYXR0ZXJcXGAgd2hlbiBjb3JyZWxhdGluZyB0d28gbnVtZXJpYyBmaWVsZHMgKG5vXG4gIGNhdGVnb3J5IGF4aXMpLiBQcmVmZXIgXFxgaGVhdG1hcFxcYCBmb3IgYSBjYXRlZ29yeSB4IGNhdGVnb3J5XG4gIG1hdHJpeC4gUHJlZmVyIFxcYHJhZGFyXFxgIGZvciBzY29yaW5nIHRoZSBzYW1lIGVudGl0aWVzIGFjcm9zcyBhXG4gIGZpeGVkIHNldCBvZiBkaW1lbnNpb25zLiBOZXZlciBwaWNrIHBpZSBmb3IgbW9yZSB0aGFuIDcgc2xpY2VzXG4gICh1c2UgXFxgdHJlZW1hcFxcYCBpbnN0ZWFkKS4gUHJlZmVyIFxcYGZ1bm5lbFxcYCBmb3Igb3JkZXJlZCBjb252ZXJzaW9uXG4gIHN0YWdlcy5cblxuICBGb3IgYmFyIC8gaG9yaXpvbnRhbEJhciAvIGxpbmUgLyBhcmVhIC8gY29tYm8gLyB3YXRlcmZhbGw6IHBpY2sgb25lXG4gIGNvbHVtbiBhcyB0aGUgY2F0ZWdvcnkgYXhpcyAodXN1YWxseSB0aGUgb25seSBzdHJpbmctdmFsdWVkIGNvbHVtbilcbiAgYW5kIG9uZSBvciBtb3JlIG51bWVyaWMgY29sdW1ucyBhcyBzZXJpZXMuIFNvcnQgY2F0ZWdvcmllcyBieSB0aGVcbiAgcHJpbWFyeSBzZXJpZXMgdmFsdWUgZGVzY2VuZGluZyB1bmxlc3MgdGhlIGRhdGEgaXMgbmF0dXJhbGx5IG9yZGVyZWRcbiAgKGRhdGVzLCByYW5rcywgZnVubmVsIHN0YWdlcywgd2F0ZXJmYWxsIHN0ZXBzKS4gRm9yIFxcYGNvbWJvXFxgLCBzZXRcbiAgZWFjaCBzZXJpZXMnIFxcYHR5cGVcXGAgdG8gXFxgYmFyXFxgLCBcXGBsaW5lXFxgLCBvciBcXGBhcmVhXFxgLCBhbmQgdXNlXG4gIFxcYHlBeGlzSW5kZXg6IDFcXGAgd2hlbiBhIHNlcmllcyBuZWVkcyBhIHNlY29uZCBzY2FsZS5cblxuICBGb3Igd2F0ZXJmYWxsLCBlbWl0IGV4YWN0bHkgT05FIHNlcmllcyBob2xkaW5nIHRoZSBzaWduZWQgc3RlcCB2YWx1ZXNcbiAgKGRlbHRhcyksIG9uZSBwZXIgY2F0ZWdvcnksIGluIG9yZGVyIC0gcG9zaXRpdmUgZm9yIGEgcmlzZSwgbmVnYXRpdmVcbiAgZm9yIGEgZHJvcC4gRG8gTk9UIGFkZCBhIGN1bXVsYXRpdmUgLyBydW5uaW5nLXRvdGFsIC8gYmFzZSBzZXJpZXMgYW5kXG4gIGRvIE5PVCBjb252ZXJ0IHRoZSBkZWx0YXMgaW50byBydW5uaW5nIHRvdGFscyB5b3Vyc2VsZjsgdGhlIHJ1bm5pbmdcbiAgdG90YWwgaXMgY29tcHV0ZWQgZm9yIHlvdSwgYW5kIGEgaGFuZC1idWlsdCBiYXNlIHNlcmllcyByZW5kZXJzIGFzIGFcbiAgcGxhaW4gYmFyIGNoYXJ0IGluc3RlYWQgb2YgYSBicmlkZ2UuXG5cbiAgRm9yIHBpZSAvIGZ1bm5lbCAvIHRyZWVtYXA6IHBpY2sgdGhlIGNhdGVnb3J5IGNvbHVtbiBmb3Igc2xpY2UgbmFtZXNcbiAgYW5kIG9uZSBudW1lcmljIGNvbHVtbiBmb3Igc2xpY2UgdmFsdWVzLiBFbWl0IGEgc2luZ2xlIHNlcmllcyBvZlxuICBcXGB7bmFtZSwgdmFsdWV9XFxgIG9iamVjdHMuXG5cbiAgRm9yIHNjYXR0ZXI6IHBpY2sgdHdvIG51bWVyaWMgY29sdW1ucyBhbmQgZW1pdCBcXGBbeCwgeV1cXGAgdHVwbGVzIGluXG4gIG9uZSBvciBtb3JlIHNlcmllcyAob25lIHNlcmllcyBwZXIgZ3JvdXAgaWYgYSBncm91cGluZyBjb2x1bW4gZXhpc3RzKS5cblxuICBGb3IgaGVhdG1hcDogcGljayB0d28gY2F0ZWdvcnkgY29sdW1ucyBhbmQgb25lIG51bWVyaWMgbWVhc3VyZS4gUHV0XG4gIHRoZSB4LWF4aXMgY2F0ZWdvcmllcyBpbiBcXGBjYXRlZ29yaWVzXFxgLCB0aGVuIGVtaXQgT05FIFNFUklFUyBQRVIgUk9XXG4gIG9mIHRoZSBtYXRyaXggLSB0aGUgc2VyaWVzIFxcYG5hbWVcXGAgaXMgdGhlIHJvdyBsYWJlbCBhbmQgXFxgZGF0YVxcYCBpc1xuICB0aGUgcm93J3MgbnVtYmVycywgb25lIHBlciBlbnRyeSBpbiBcXGBjYXRlZ29yaWVzXFxgLCBpbiB0aGUgc2FtZSBvcmRlci5cbiAgRG8gbm90IGNvbXB1dGUgY2VsbCBpbmRpY2VzLlxuXG4gIEZvciByYWRhcjogXFxgY2F0ZWdvcmllc1xcYCBhcmUgdGhlIGluZGljYXRvciBuYW1lczsgZWFjaCBzZXJpZXMgaXMgYW5cbiAgYXJyYXkgb2YgbnVtYmVycyAob25lIHZhbHVlIHBlciBpbmRpY2F0b3IpLlxuXG4gIEZvciBhbnl0aGluZyB0aGUgdHlwZXMgYWJvdmUgY2Fubm90IGV4cHJlc3MgLSBhIHNhbmtleSwgYm94cGxvdCxcbiAgY2FuZGxlc3RpY2ssIHN1bmJ1cnN0LCBnYXVnZSwgbmV0d29yayBncmFwaCwgY2FsZW5kYXIsIHBhcmFsbGVsLVxuICBjb29yZGluYXRlcyBwbG90LCBvciBhbnkgb3RoZXIgRWNoYXJ0cyBzZXJpZXMgLSB1c2UgXFxgY3VzdG9tXFxgIGFuZFxuICBoYW5kLXdyaXRlIHRoZSB3aG9sZSBFY2hhcnRzIG9wdGlvbiBpbnRvIFxcYG9wdGlvblxcYCBhcyBhIEpTT04gc3RyaW5nLlxuICBJbmNsdWRlIGV2ZXJ5IHBhcnQgdGhhdCBjaGFydCBuZWVkczogdGhlIHNlcmllcyB3aXRoIHRoZWlyIG93blxuICBcXGB0eXBlXFxgIGFuZCBkYXRhIHNoYXBlLCBwbHVzIGFueSBjb29yZGluYXRlIHN5c3RlbSwgXFxgdmlzdWFsTWFwXFxgLFxuICBvciBheGVzLiBMZWF2ZSBcXGBzZXJpZXNcXGAsIFxcYGNhdGVnb3JpZXNcXGAsIGFuZCB0aGUgYXhpcyBsYWJlbHMgb3V0O1xuICB0aGV5IGFyZSBpZ25vcmVkIGZvciBcXGBjdXN0b21cXGAuIFByZWZlciBhIGxpc3RlZCB0eXBlIHdoZW5ldmVyIG9uZVxuICBnZW51aW5lbHkgZml0cyAtIFxcYGN1c3RvbVxcYCBnaXZlcyB1cCB0aGUgc2hhcmVkIHRvb2x0aXAsIGxlZ2VuZCwgYW5kXG4gIGdyaWQgZGVmYXVsdHMsIHNvIGl0IGlzIHRoZSBhbnN3ZXIgZm9yIGFuIHVuc3VwcG9ydGVkIGNoYXJ0IHNoYXBlLFxuICBub3QgYSB3YXkgdG8gcmVzdHlsZSBhIHN1cHBvcnRlZCBvbmUuXG5cbiAgS2VlcCBzZXJpZXMgbmFtZXMgaHVtYW4tcmVhZGFibGUgKHVzZSB0aGUgY29sdW1uIG5hbWU7IHRpdGxlIGNhc2UgaXRcbiAgbGlnaHRseSBpZiBuZWVkZWQpLiBLZWVwIHRpdGxlcyBjb25jaXNlOyBkbyBub3QgcmVwZWF0IHRoZSB1c2VyJ3NcbiAgdGl0bGUgaW4geEF4aXNMYWJlbCAvIHlBeGlzTGFiZWwuXG5gKTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGxhbm5lciBhZ2VudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIE9uZSBwbGFubmVyIGBBZ2VudGAgcGVyIHBsdWdpbiBjb25maWcuIENhY2hlZCBvbiBjb25maWcgb2JqZWN0XG4gKiBpZGVudGl0eSBzbyBjYWxsZXJzIGNhbiBgcHJlcGFyZUNoYXJ0KHsgY29uZmlnLCAuLi4gfSlgIGZyb20gYVxuICogaG90IHBhdGggd2l0aG91dCBwYXlpbmcgdGhlIEFnZW50LWNvbnN0cnVjdG9yIGNvc3QgZXZlcnkgY2FsbC5cbiAqIGBXZWFrTWFwYCBsZXRzIHJldGlyZWQgY29uZmlncyAoZS5nLiB0ZXN0IHJlY29uZmlndXJhdGlvbnMpXG4gKiByZWxlYXNlIHRoZWlyIGFnZW50IHdpdGhvdXQgbWFudWFsIGV2aWN0aW9uLlxuICovXG5jb25zdCBwbGFubmVyQWdlbnRzID0gbmV3IFdlYWtNYXA8TWFzdHJhUGx1Z2luQ29uZmlnLCBBZ2VudD4oKTtcblxuZnVuY3Rpb24gZ2V0UGxhbm5lckFnZW50KGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnKTogQWdlbnQge1xuICBsZXQgYWdlbnQgPSBwbGFubmVyQWdlbnRzLmdldChjb25maWcpO1xuICBpZiAoIWFnZW50KSB7XG4gICAgYWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgICAgaWQ6IFwiY2hhcnRfcGxhbm5lclwiLFxuICAgICAgbmFtZTogXCJDaGFydCBQbGFubmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQaWNrcyBjaGFydCB0eXBlIGFuZCBheGlzIGVuY29kaW5ncyBmb3IgYSBkYXRhc2V0LlwiLFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBDSEFSVF9QTEFOTkVSX0lOU1RSVUNUSU9OUyxcbiAgICAgIG1vZGVsOiAoeyByZXF1ZXN0Q29udGV4dCB9KSA9PlxuICAgICAgICBidWlsZE1vZGVsKGNvbmZpZywgcmVxdWVzdENvbnRleHQsIHsgbW9kZWxDbGFzczogbW9kZWwuTW9kZWxDbGFzcy5DaGF0RmFzdCB9KSxcbiAgICB9KTtcbiAgICBwbGFubmVyQWdlbnRzLnNldChjb25maWcsIGFnZW50KTtcbiAgfVxuICByZXR1cm4gYWdlbnQ7XG59XG5cbi8qKlxuICogUnVuIHRoZSBwbGFubmVyIGFnYWluc3QgYHJlcXVlc3RgIGFuZCByZXR1cm4gdGhlIHJlc29sdmVkXG4gKiBFY2hhcnRzIHNwZWMuIFRocm93cyBvbiBwbGFubmVyIGZhaWx1cmUgLSB7QGxpbmsgcHJlcGFyZUNoYXJ0fVxuICogY2F0Y2hlcyBhbmQgc3Rhc2hlcyB0aGUgZXJyb3IgaW4gdGhlIGNhY2hlIGVudHJ5LlxuICovXG5hc3luYyBmdW5jdGlvbiBydW5DaGFydFBsYW5uZXIoXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICByZXF1ZXN0OiBDaGFydFBsYW5uZXJSZXF1ZXN0LFxuICBvcHRpb25zOiB7IHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQ7IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwgfSA9IHt9LFxuKTogUHJvbWlzZTxDaGFydFJlc3VsdD4ge1xuICBjb25zdCB7IHRpdGxlLCBkZXNjcmlwdGlvbiwgZGF0YSB9ID0gcmVxdWVzdDtcbiAgY29uc3QgeyByZXF1ZXN0Q29udGV4dCwgYWJvcnRTaWduYWwgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHByb21wdCA9IHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oe1xuICAgIFRpdGxlOiB0aXRsZSxcbiAgICAuLi4oZGVzY3JpcHRpb24gPyB7IERlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9IDoge30pLFxuICAgIFwiRGF0YXNldCAoSlNPTiwgb25lIHJvdyBwZXIgb2JqZWN0KVwiOiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSxcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFBsYW5uZXJBZ2VudChjb25maWcpLmdlbmVyYXRlKHByb21wdCwge1xuICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHsgc2NoZW1hOiBjaGFydFBsYW5TY2hlbWEgfSxcbiAgICAuLi4ocmVxdWVzdENvbnRleHQgPyB7IHJlcXVlc3RDb250ZXh0IH0gOiB7fSksXG4gICAgLi4uKGFib3J0U2lnbmFsID8geyBhYm9ydFNpZ25hbCB9IDoge30pLFxuICB9KTtcbiAgY29uc3QgcGxhbiA9IGNoYXJ0UGxhblNjaGVtYS5wYXJzZShyZXN1bHQub2JqZWN0KTtcbiAgY29uc3Qgb3B0aW9uID0gcGxhblRvRWNoYXJ0c09wdGlvbihwbGFuLCB0aXRsZSwgY29uZmlnLmJyYW5kKTtcbiAgcmV0dXJuIHsgY2hhcnRUeXBlOiBwbGFuLmNoYXJ0VHlwZSwgb3B0aW9uIH07XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjYWNoZSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBjYW5vbmljYWwgY2FjaGUga2V5IGZvciBhIGBjaGFydElkYCBvd25lZCBieSBgdXNlcktleWAuXG4gKlxuICogVGhlIGlkZW50aXR5IGlzIHBhcnQgb2YgdGhlIGtleSwgbm90IGEgZmlsdGVyIGFwcGxpZWQgYWZ0ZXIgdGhlIHJlYWQsIHNvIGFcbiAqIGNoYXJ0IGlkIGd1ZXNzZWQgb3IgY29waWVkIGZyb20gYW5vdGhlciB1c2VyJ3MgdHJhbnNjcmlwdCByZXNvbHZlcyB0byBhXG4gKiBkaWZmZXJlbnQga2V5IGFuZCBzaW1wbHkgbWlzc2VzLiBUaGF0IG1pc3MgaXMgd2hhdCB0aGUgSFRUUCByb3V0ZSB0dXJucyBpbnRvXG4gKiBhIDQwNCwgd2hpY2ggaXMgYWxzbyB0aGUgYW5zd2VyIHRoYXQgbGVha3MgdGhlIGxlYXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBjaGFydENhY2hlS2V5KGNoYXJ0SWQ6IHN0cmluZywgdXNlcktleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBDYWNoZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKSkuZ2VuZXJhdGVLZXkoW0NIQVJUX0NBQ0hFX05BTUVTUEFDRSwgY2hhcnRJZF0sIHVzZXJLZXkpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgYSB7QGxpbmsgQ2hhcnR9IGVudHJ5IHVuZGVyIGl0cyBgY2hhcnRJZGAsIG93bmVkIGJ5IGB1c2VyS2V5YC5cbiAqIFJlZnJlc2hlcyB0aGUgVFRMIG9uIGV2ZXJ5IHdyaXRlLiBDYWNoZS1sYXllciBmYWlsdXJlcyBhcmUgbG9nZ2VkIGFuZFxuICogc3dhbGxvd2VkIHNvIGJhY2tncm91bmQgcnVubmVycyBuZXZlciB0aHJvdyBpbnRvIHRoZVxuICogdW5oYW5kbGVkLXJlamVjdGlvbiBzdHJlYW0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ2hhcnQoZW50cnk6IENoYXJ0LCB1c2VyS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCBjaGFydENhY2hlS2V5KGVudHJ5LmNoYXJ0SWQsIHVzZXJLZXkpO1xuICAgIGF3YWl0IENhY2hlTWFuYWdlci5nZXRJbnN0YW5jZVN5bmMoKS5zZXQoa2V5LCBlbnRyeSwge1xuICAgICAgdHRsOiBDSEFSVF9DQUNIRV9UVExfU0VDLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihcIndyaXRlLWVycm9yXCIsIHtcbiAgICAgIGNoYXJ0SWQ6IGVudHJ5LmNoYXJ0SWQsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIExvb2sgdXAgYSBjaGFydCBgdXNlcktleWAgb3ducy4gUmV0dXJucyBgdW5kZWZpbmVkYCBvbiBtaXNzLCBvblxuICogZXhwaXJ5LCB3aGVuIGFub3RoZXIgaWRlbnRpdHkgb3ducyB0aGUgaWQsIG9yIHdoZW4gdGhlIGNhY2hlIGxheWVyIGlzXG4gKiB1bmhlYWx0aHkgLSBuZXZlciB0aHJvd3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRDaGFydChjaGFydElkOiBzdHJpbmcsIHVzZXJLZXk6IHN0cmluZyk6IFByb21pc2U8Q2hhcnQgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCBjaGFydENhY2hlS2V5KGNoYXJ0SWQsIHVzZXJLZXkpO1xuICAgIGNvbnN0IHYgPSBhd2FpdCBDYWNoZU1hbmFnZXIuZ2V0SW5zdGFuY2VTeW5jKCkuZ2V0PENoYXJ0PihrZXkpO1xuICAgIHJldHVybiB2ID8/IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJyZWFkLWVycm9yXCIsIHtcbiAgICAgIGNoYXJ0SWQsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwcmVwYXJlQ2hhcnQgb3JjaGVzdHJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogSW5wdXRzIHRvIHtAbGluayBwcmVwYXJlQ2hhcnR9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVwYXJlQ2hhcnRPcHRpb25zIHtcbiAgLyoqIFBsdWdpbiBjb25maWc7IHJlc29sdmVzIHRoZSBwbGFubmVyIGFnZW50J3MgbW9kZWwuICovXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnO1xuICAvKipcbiAgICogSWRlbnRpdHkgdGhhdCBvd25zIHRoZSBtaW50ZWQgY2hhcnQuIE9ubHkgYSB7QGxpbmsgZmV0Y2hDaGFydH0gY2FsbFxuICAgKiBjYXJyeWluZyB0aGUgc2FtZSBrZXkgcmVzb2x2ZXMgaXQuIFVzZSB7QGxpbmsgcmVzb2x2ZVVzZXJLZXl9LlxuICAgKi9cbiAgdXNlcktleTogc3RyaW5nO1xuICAvKiogRGlzcGxheSB0aXRsZSBmb3J3YXJkZWQgdG8gdGhlIHBsYW5uZXIgYWdlbnQuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaW50ZW50IGhpbnQgZm9yd2FyZGVkIHRvIHRoZSBwbGFubmVyIGFnZW50LiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSByb3dzIHRvIGNoYXJ0LiBDYWxsZWQgb25jZSwgaW4gdGhlIGJhY2tncm91bmQuXG4gICAqIEFueSB0aHJvd24gZXJyb3IgbGFuZHMgaW4gdGhlIGNhY2hlIGFzIHRoZSBlbnRyeSdzIGBlcnJvcmBcbiAgICogZmllbGQgKG5ldmVyIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlciBvZiB7QGxpbmsgcHJlcGFyZUNoYXJ0fSkuXG4gICAqIEFuIGVtcHR5IGByb3dzYCBhcnJheSBpcyByZWplY3RlZCBhcyBgXCJkYXRhc2V0IGhhcyBubyByb3dzO1xuICAgKiBub3RoaW5nIHRvIGNoYXJ0XCJgLlxuICAgKi9cbiAgcmVzb2x2ZURhdGE6IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTx7IHJvd3M6IFJlYWRvbmx5QXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IH0+O1xuICAvKipcbiAgICogUGVyLXJlcXVlc3QgYFJlcXVlc3RDb250ZXh0YC4gRm9yd2FyZGVkIHRvIHRoZSBwbGFubmVyIGFnZW50IHNvXG4gICAqIHVzZXItc2NvcGVkIG1vZGVsIHJlc29sdXRpb24gKE9CTykgc3RheXMgaW4gZWZmZWN0LlxuICAgKi9cbiAgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDtcbiAgLyoqXG4gICAqIENvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gRm9yd2FyZGVkIHRvIGByZXNvbHZlRGF0YWAgYW5kIHRoZVxuICAgKiBwbGFubmVyIGFnZW50LiBOb3RlOiB0aGUgY2hhcnQgdGFzayBjb250aW51ZXMgcnVubmluZyBpbiB0aGVcbiAgICogYmFja2dyb3VuZCBhZnRlciB0aGUgcGFyZW50IHJlcXVlc3QgZW5kcywgc28gZXh0ZXJuYWwgYWJvcnRcbiAgICogc2lnbmFscyBhcmUgYmVzdC1lZmZvcnQ7IHR5cGljYWwgdXNlIGlzIHRvIGxlYXZlIHRoaXMgdW5zZXRcbiAgICogYW5kIGxldCB0aGUgMWggVFRMIGNhcCBzdGFsZSBlbnRyaWVzLlxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogTWludCBhIGBjaGFydElkYCwgY2FjaGUgYW4gZW1wdHkgYHsgY2hhcnRJZCB9YCBwbGFjZWhvbGRlclxuICogc3luY2hyb25vdXNseSwgYW5kIGtpY2sgb2ZmIGEgYmFja2dyb3VuZCB0YXNrIHRoYXQgcmVzb2x2ZXMgdGhlXG4gKiBkYXRhc2V0IGFuZCBydW5zIHRoZSBwbGFubmVyLiBSZXR1cm5zIHRoZSBgY2hhcnRJZGAgb25jZSB0aGVcbiAqIHBsYWNlaG9sZGVyIGxhbmRzIHNvIHRoZSBmaXJzdCB7QGxpbmsgZmV0Y2hDaGFydH0gY2FsbCBhbHdheXNcbiAqIHNlZXMgYW4gZW50cnkgKG5vIHNwdXJpb3VzIDQwNCByYWNlKS5cbiAqXG4gKiBUaGUgYmFja2dyb3VuZCB0YXNrIHN3YWxsb3dzIGl0cyBvd24gZmFpbHVyZXMgYW5kIHdyaXRlcyB0aGVtXG4gKiBhcyBgZXJyb3JgIGVudHJpZXMsIHNvIGNhbGxlcnMgbmV2ZXIgc2VlIGEgcmVqZWN0ZWQgcHJvbWlzZS5cbiAqIENhY2hlIHN0YXRlIG1hY2hpbmU6XG4gKlxuICogICAtIGp1c3QgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnM6IGB7IGNoYXJ0SWQgfWAgKHByb2Nlc3NpbmcpXG4gKiAgIC0gb24gcGxhbm5lciBzdWNjZXNzOiAgICAgICAgICAgYHsgY2hhcnRJZCwgcmVzdWx0IH1gXG4gKiAgIC0gb24gZGF0YSAvIHBsYW5uZXIgZmFpbHVyZTogICAgYHsgY2hhcnRJZCwgZXJyb3IgfWBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVDaGFydChvcHRzOiBQcmVwYXJlQ2hhcnRPcHRpb25zKTogUHJvbWlzZTxDaGFydFRvb2xPdXRwdXQ+IHtcbiAgY29uc3QgY2hhcnRJZCA9IGhhc2guaWQoKTtcbiAgYXdhaXQgd3JpdGVDaGFydCh7IGNoYXJ0SWQgfSwgb3B0cy51c2VyS2V5KTtcbiAgbG9nZ2VyLmRlYnVnKFwicXVldWVkXCIsIHsgY2hhcnRJZCB9KTtcbiAgLy8gRmlyZS1hbmQtZm9yZ2V0LiBGYWlsdXJlcyBsYW5kIGluIHRoZSBjYWNoZSBhcyBgZXJyb3JgIGVudHJpZXM7XG4gIC8vIG5ldmVyIGVzY2FwZSBpbnRvIGFuIHVuaGFuZGxlZCByZWplY3Rpb24uXG4gIHZvaWQgcnVuUHJlcGFyZUNoYXJ0KGNoYXJ0SWQsIG9wdHMpO1xuICByZXR1cm4geyBjaGFydElkLCBtYXJrZXI6IG1hcmtlcnMuZm9ybWF0TWFya2VyKFwiY2hhcnRcIiwgY2hhcnRJZCkgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHJlcGFyZUNoYXJ0KGNoYXJ0SWQ6IHN0cmluZywgb3B0czogUHJlcGFyZUNoYXJ0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvcHRzLnJlc29sdmVEYXRhKG9wdHMuc2lnbmFsKTtcbiAgICBpZiAoZGF0YS5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEV4ZWN1dGlvbkVycm9yKFwiRGF0YXNldCBoYXMgbm8gcm93czsgbm90aGluZyB0byBjaGFydFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQ2hhcnRQbGFubmVyKFxuICAgICAgb3B0cy5jb25maWcsXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBvcHRzLnRpdGxlID8/IFwiQ2hhcnRcIixcbiAgICAgICAgLi4uKG9wdHMuZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uOiBvcHRzLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgIGRhdGE6IGRhdGEucm93cyBhcyBDaGFydFBsYW5uZXJSZXF1ZXN0W1wiZGF0YVwiXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLihvcHRzLnJlcXVlc3RDb250ZXh0ID8geyByZXF1ZXN0Q29udGV4dDogb3B0cy5yZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgICAgICAuLi4ob3B0cy5zaWduYWwgPyB7IGFib3J0U2lnbmFsOiBvcHRzLnNpZ25hbCB9IDoge30pLFxuICAgICAgfSxcbiAgICApO1xuICAgIGF3YWl0IHdyaXRlQ2hhcnQoeyBjaGFydElkLCByZXN1bHQgfSwgb3B0cy51c2VyS2V5KTtcbiAgICBsb2dnZXIuaW5mbyhcImRvbmVcIiwge1xuICAgICAgY2hhcnRJZCxcbiAgICAgIGNoYXJ0VHlwZTogcmVzdWx0LmNoYXJ0VHlwZSxcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJlcnJvclwiLCB7IGNoYXJ0SWQsIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIC8vIFRoZSBlbnRyeSdzIGBlcnJvcmAgaXMgcmVuZGVyZWQgaW4gdGhlIGNoYXQsIHNvIG9ubHkgYW4gQXBwS2l0RXJyb3Inc1xuICAgIC8vIG93biBtZXNzYWdlIHRyYXZlbHM7IGFueXRoaW5nIGVsc2UgY291bGQgY2FycnkgdXBzdHJlYW0gcHJvdmlkZXIgZGV0YWlsLlxuICAgIGNvbnN0IGVyclRleHQgPSBlcnIgaW5zdGFuY2VvZiBBcHBLaXRFcnJvciA/IGVyci5tZXNzYWdlIDogQ0hBUlRfRkFJTEVEX01FU1NBR0U7XG4gICAgYXdhaXQgd3JpdGVDaGFydCh7IGNoYXJ0SWQsIGVycm9yOiBlcnJUZXh0IH0sIG9wdHMudXNlcktleSk7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsb25nLXBvbGwgZmV0Y2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogSW5wdXRzIHRvIHtAbGluayBmZXRjaENoYXJ0fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hDaGFydE9wdGlvbnMge1xuICAvKipcbiAgICogSWRlbnRpdHkgdGhlIGNoYXJ0IG11c3QgYmVsb25nIHRvLiBBIGNoYXJ0IG1pbnRlZCB1bmRlciBhIGRpZmZlcmVudCBrZXlcbiAgICogaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiB1bmtub3duIGlkLiBVc2Uge0BsaW5rIHJlc29sdmVVc2VyS2V5fS5cbiAgICovXG4gIHVzZXJLZXk6IHN0cmluZztcbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIHBvbGxpbmcgYnVkZ2V0IGluIG1zLiBXaGVuIHRoZSBlbnRyeSBzdGF5cyBpblxuICAgKiB0aGUgcHJvY2Vzc2luZyBzdGF0ZSBwYXN0IHRoaXMgd2luZG93LCB0aGUgaGVscGVyIHJldHVybnMgdGhlXG4gICAqIGxhc3Qgc2VlbiB2YWx1ZSAoc3RpbGwgcHJvY2Vzc2luZykgc28gdGhlIGNsaWVudCBjYW4gcmUtcG9sbC5cbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRkVUQ0hfVElNRU9VVF9NU30gKDYwcykuXG4gICAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQb2xsIGludGVydmFsIGluIG1zLiBEZWZhdWx0cyB0b1xuICAgKiB7QGxpbmsgREVGQVVMVF9GRVRDSF9JTlRFUlZBTF9NU30gKDI1MG1zKS5cbiAgICovXG4gIGludGVydmFsTXM/OiBudW1iZXI7XG4gIC8qKiBFeHRlcm5hbCBjYW5jZWxsYXRpb24gaGFuZGxlIChlLmcuIHJlcXVlc3QgYHJlcS5zaWduYWxgKS4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogTG9uZy1wb2xsIHRoZSBjaGFydCBjYWNoZSB1bnRpbCB0aGUgZW50cnkgc2V0dGxlcyAoYHJlc3VsdGAgb3JcbiAqIGBlcnJvcmAgc2V0KSwgdGhlIGVudHJ5IGlzIG1pc3NpbmcsIG9yIHRoZSBzZXJ2ZXItc2lkZSB0aW1lb3V0XG4gKiBlbGFwc2VzLlxuICpcbiAqIFJldHVybnM6XG4gKiAgIC0gdGhlIHJlc29sdmVkIHtAbGluayBDaGFydH0gd2hlbiBpdCBzZXR0bGVkLCBlcnJvcmVkLCBvclxuICogICAgIHN0YXllZCBpbiBwcm9jZXNzaW5nIHBhc3QgYHRpbWVvdXRNc2AgKHNvIHRoZSBjbGllbnQgY2FuXG4gKiAgICAgcmUtcG9sbCk7XG4gKiAgIC0gYHVuZGVmaW5lZGAgd2hlbiB0aGUgZW50cnkgaXMgbWlzc2luZywgZXhwaXJlZCwgb3Igb3duZWQgYnlcbiAqICAgICBhbm90aGVyIGlkZW50aXR5ICh0aGUgY29uc3VtZXIgc2hvdWxkIHRyZWF0IGFzIDQwNCkuXG4gKlxuICogYHNpZ25hbGAgbGV0cyB0aGUgY2FsbGVyIGNhbmNlbCBhaGVhZCBvZiB0aW1lb3V0IChlLmcuIHRoZSBIVFRQXG4gKiByZXF1ZXN0IGNsb3NlZCkuIENhbmNlbGxhdGlvbiBwcm9wYWdhdGVzIHRvIHRoZSBpbnRlci1wb2xsIHNsZWVwXG4gKiBzbyB0aGUgaGVscGVyIHJldHVybnMgaW1tZWRpYXRlbHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaENoYXJ0KFxuICBjaGFydElkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEZldGNoQ2hhcnRPcHRpb25zLFxuKTogUHJvbWlzZTxDaGFydCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zLnRpbWVvdXRNcyA/PyBERUZBVUxUX0ZFVENIX1RJTUVPVVRfTVM7XG4gIGNvbnN0IGludGVydmFsTXMgPSBvcHRpb25zLmludGVydmFsTXMgPz8gREVGQVVMVF9GRVRDSF9JTlRFUlZBTF9NUztcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1zO1xuXG4gIGxldCBsYXN0OiBDaGFydCB8IHVuZGVmaW5lZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBvcHRpb25zLnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBsYXN0ID0gYXdhaXQgcmVhZENoYXJ0KGNoYXJ0SWQsIG9wdGlvbnMudXNlcktleSk7XG4gICAgaWYgKCFsYXN0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChsYXN0LnJlc3VsdCAhPT0gdW5kZWZpbmVkIHx8IGxhc3QuZXJyb3IgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGxhc3Q7XG4gICAgY29uc3QgcmVtYWluaW5nID0gZGVhZGxpbmUgLSBEYXRlLm5vdygpO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCkgcmV0dXJuIGxhc3Q7XG4gICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcChNYXRoLm1pbihpbnRlcnZhbE1zLCByZW1haW5pbmcpLCBvcHRpb25zLnNpZ25hbCk7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZWNoYXJ0cyB0aGVtZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhbiBFY2hhcnRzIG9wdGlvbiB0aGF0IGNhcnJpZXMgYnJhbmQgaWRlbnRpdHk6IHRoZSBzZXJpZXNcbiAqIGNvbG9yIGN5Y2xlIGFuZCB0aGUgYmFzZSBmb250IHN0YWNrLiBEZXJpdmVkIGZyb20gYSB7QGxpbmsgQnJhbmRDb250ZXh0fVxuICogYnkge0BsaW5rIGJyYW5kQ2hhcnRUaGVtZX0gYW5kIG1lcmdlZCBpbnRvIGV2ZXJ5IHNwZWMgYnlcbiAqIHtAbGluayBwbGFuVG9FY2hhcnRzT3B0aW9ufS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgY2FycmllcyBubyB0ZXh0IENPTE9SLiBBIHNwZWMgaXMgcGxhbm5lZCBoZXJlLCBvbiB0aGVcbiAqIHNlcnZlciwgYW5kIHJlYWQgbGF0ZXIgaW4gYSBicm93c2VyIHdob3NlIGxpZ2h0L2RhcmsgdGhlbWUgdGhpcyBjb2RlXG4gKiBjYW5ub3Qga25vdzsgYmFraW5nIGluIHRoZSBicmFuZCdzIHNpbmdsZSAobGlnaHQpIGZvcmVncm91bmQgcHJvZHVjZWRcbiAqIG5lYXItYmxhY2sgbGFiZWxzIHRoYXQgZGlzYXBwZWFyZWQgYWdhaW5zdCBhIGRhcmsgY2hhdCBzdXJmYWNlLiBUaGVcbiAqIHJlbmRlcmVyIHJlc29sdmVzIGNocm9tZSBjb2xvcnMgZnJvbSBBcHBLaXQncyBsaXZlIENTUyB0b2tlbnMgaW5zdGVhZFxuICogKGBAZGJ4LXRvb2xzL3VpLW1hc3RyYWAncyBgY2hhcnQtdGhlbWVgICsgYG5vcm1hbGl6ZUNoYXJ0T3B0aW9uYCksXG4gKiBsZWF2aW5nIHRoaXMgdGhlbWUgdGhlIHBhcnRzIHRoYXQgcmVhZCB0aGUgc2FtZSBpbiBlaXRoZXIgbW9kZS5cbiAqL1xuaW50ZXJmYWNlIENoYXJ0VGhlbWUge1xuICBjb2xvcjogc3RyaW5nW107XG4gIHRleHRTdHlsZTogeyBmb250RmFtaWx5OiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBBcHBLaXQncyBjYXRlZ29yaWNhbCBjaGFydCBwYWxldHRlIChgLS1jaGFydC1jYXQtMWAgLi4gYC0tY2hhcnQtY2F0LThgIGZyb21cbiAqIGBAZGF0YWJyaWNrcy9hcHBraXQtdWlgKSwgYXMgaGV4LiBTZXJ2ZXItcmVuZGVyZWQgY2hhcnQgc3BlY3MgY2Fubm90IHJlYWQgdGhlXG4gKiBicm93c2VyJ3MgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzLCBzbyB0aGUgdmFsdWVzIGFyZSBtaXJyb3JlZCBoZXJlIHRvIGtlZXAgYVxuICogZ2VuZXJhdGVkIGNoYXJ0IHZpc3VhbGx5IGNvbnNpc3RlbnQgd2l0aCB0aGUgQXBwS2l0LXN0eWxlZCBVSSBhcm91bmQgaXQuXG4gKiBLZWVwIGluIHN5bmMgd2l0aCBBcHBLaXQncyBzdHlsZXNoZWV0IGlmIGl0IGNoYW5nZXMuXG4gKi9cbmNvbnN0IEFQUEtJVF9DSEFSVF9QQUxFVFRFID0gW1xuICBcIiMyNDYzRUJcIiwgLy8gYmx1ZVxuICBcIiMyRUI4OEFcIiwgLy8gdGVhbFxuICBcIiNBQjQ3QkRcIiwgLy8gcHVycGxlXG4gIFwiI0Y2OUUyM1wiLCAvLyBhbWJlclxuICBcIiNERDJDNERcIiwgLy8gcm9zZVxuICBcIiMxQkEzQkJcIiwgLy8gY3lhblxuICBcIiM5QjYxRDFcIiwgLy8gbGF2ZW5kZXJcbiAgXCIjMzRCMjYyXCIsIC8vIGVtZXJhbGRcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogRXhwYW5kIHR3byBicmFuZCBoZXggY29sb3JzIGludG8gYSBsZWdpYmxlIGNhdGVnb3JpY2FsIGN5Y2xlLiBFY2hhcnRzXG4gKiByZXBlYXRzIHRoZSBgY29sb3JgIGFycmF5IGFjcm9zcyBzZXJpZXMgLyBjYXRlZ29yaWVzLCBzbyBhIGdvb2QgZGVmYXVsdFxuICogbmVlZHMgc2V2ZXJhbCBkaXN0aW5jdCBodWVzLCBub3QgdHdvLiBXZSBzZWVkIHdpdGggdGhlIGJyYW5kIHByaW1hcnkgYW5kXG4gKiBhY2NlbnQgKHRoZSBpZGVudGl0eSBjb2xvcnMpIGFuZCBmb2xsb3cgd2l0aCBBcHBLaXQncyBvd24gY2F0ZWdvcmljYWwgY2hhcnRcbiAqIHBhbGV0dGUsIHNvIG11bHRpLXNlcmllcyAvIG1hbnktc2xpY2UgY2hhcnRzIHN0YXkgcmVhZGFibGUgYW5kIG1hdGNoIHRoZVxuICogc3Vycm91bmRpbmcgQXBwS2l0IFVJIHdoaWxlIHRoZSBmaXJzdCBvbmUgb3IgdHdvIG1hcmtzIGxhbmQgb24tYnJhbmQuXG4gKi9cbmZ1bmN0aW9uIGJyYW5kQ29sb3JDeWNsZShwcmltYXJ5OiBzdHJpbmcsIGFjY2VudDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBzcHJlYWQgPSBBUFBLSVRfQ0hBUlRfUEFMRVRURTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZXR1cm4gW3ByaW1hcnksIGFjY2VudCwgLi4uc3ByZWFkXS5maWx0ZXIoKGMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBjLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNlZW4uaGFzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBzZWVuLmFkZChrZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBEZXJpdmUgYW4gRWNoYXJ0cyB7QGxpbmsgQ2hhcnRUaGVtZX0gZnJvbSBhIGJyYW5kIGNvbnRleHQ6IHRoZSBwcmltYXJ5ICtcbiAqIGFjY2VudCBjb2xvcnMgc2VlZCB0aGUgc2VyaWVzIGN5Y2xlIGFuZCB0aGUgc2FucyBzdGFjayBiZWNvbWVzIHRoZSBiYXNlXG4gKiBmb250LiBUZXh0IGNvbG9ycyBhcmUgdGhlIHJlbmRlcmVyJ3Mgam9iIC0gc2VlIHtAbGluayBDaGFydFRoZW1lfS5cbiAqL1xuZnVuY3Rpb24gYnJhbmRDaGFydFRoZW1lKGJyYW5kOiBCcmFuZENvbnRleHQpOiBDaGFydFRoZW1lIHtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogYnJhbmRDb2xvckN5Y2xlKGJyYW5kLmNvbG9ycy5wcmltYXJ5LCBicmFuZC5jb2xvcnMuYWNjZW50KSxcbiAgICB0ZXh0U3R5bGU6IHsgZm9udEZhbWlseTogYnJhbmQudHlwb2dyYXBoeS5zYW5zIH0sXG4gIH07XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVjaGFydHMgZXhwYW5zaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbnR5cGUgTmFtZWRTbGljZSA9IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogbnVtYmVyIH07XG50eXBlIFNjYXR0ZXJQb2ludCA9IFtudW1iZXIsIG51bWJlcl07XG50eXBlIEhlYXRtYXBDZWxsID0gW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4vKiogS2VlcCBvbmx5IGB7bmFtZSwgdmFsdWV9YCBzbGljZXM7IGRyb3AgbnVsbHMgLyBiYXJlIG51bWJlcnMgLyB0dXBsZXMuICovXG5mdW5jdGlvbiBuYW1lZFNsaWNlcyhkYXRhOiBDaGFydFBsYW5bXCJzZXJpZXNcIl1bbnVtYmVyXVtcImRhdGFcIl0pOiBOYW1lZFNsaWNlW10ge1xuICByZXR1cm4gZGF0YS5maWx0ZXIoXG4gICAgKGQpOiBkIGlzIE5hbWVkU2xpY2UgPT4gZCAhPT0gbnVsbCAmJiB0eXBlb2YgZCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkKSxcbiAgKTtcbn1cblxuLyoqIEtlZXAgb25seSBmaW5pdGUgbnVtYmVycyAoY2F0ZWdvcnkgLyByYWRhciAvIHdhdGVyZmFsbCBzZXJpZXMpLiAqL1xuZnVuY3Rpb24gbnVtZXJpY1BvaW50cyhkYXRhOiBDaGFydFBsYW5bXCJzZXJpZXNcIl1bbnVtYmVyXVtcImRhdGFcIl0pOiBudW1iZXJbXSB7XG4gIHJldHVybiBkYXRhLmZpbHRlcigoZCk6IGQgaXMgbnVtYmVyID0+IHR5cGVvZiBkID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZShkKSk7XG59XG5cbi8qKiBLZWVwIG9ubHkgYFt4LCB5XWAgc2NhdHRlciB0dXBsZXMuICovXG5mdW5jdGlvbiBzY2F0dGVyUG9pbnRzKGRhdGE6IENoYXJ0UGxhbltcInNlcmllc1wiXVtudW1iZXJdW1wiZGF0YVwiXSk6IFNjYXR0ZXJQb2ludFtdIHtcbiAgcmV0dXJuIGRhdGEuZmlsdGVyKFxuICAgIChkKTogZCBpcyBTY2F0dGVyUG9pbnQgPT4gQXJyYXkuaXNBcnJheShkKSAmJiBkLmxlbmd0aCA9PT0gMixcbiAgKSBhcyBTY2F0dGVyUG9pbnRbXTtcbn1cblxuLyoqIEtlZXAgb25seSBgW3hJbmRleCwgeUluZGV4LCB2YWx1ZV1gIGhlYXRtYXAgY2VsbHMuICovXG5mdW5jdGlvbiBoZWF0bWFwQ2VsbHMoZGF0YTogQ2hhcnRQbGFuW1wic2VyaWVzXCJdW251bWJlcl1bXCJkYXRhXCJdKTogSGVhdG1hcENlbGxbXSB7XG4gIHJldHVybiBkYXRhLmZpbHRlcigoZCk6IGQgaXMgSGVhdG1hcENlbGwgPT4gQXJyYXkuaXNBcnJheShkKSAmJiBkLmxlbmd0aCA9PT0gMykgYXMgSGVhdG1hcENlbGxbXTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgaGVhdG1hcCdzIGNlbGxzIGFuZCByb3cgbGFiZWxzIGZyb20gZWl0aGVyIHNoYXBlIHRoZVxuICogcGxhbm5lciBtYXkgcHJvZHVjZS5cbiAqXG4gKiBUaGUgZG9jdW1lbnRlZCBzaGFwZSBpcyBPTkUgc2VyaWVzIG9mIGBbeEluZGV4LCB5SW5kZXgsIHZhbHVlXWBcbiAqIHRyaXBsZXMsIGJ1dCBpbmRleCBhcml0aG1ldGljIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgYm9va2tlZXBpbmcgYVxuICogZmFzdCBtb2RlbCBnZXRzIHdyb25nLCBhbmQgdGhlIGZhaWx1cmUgaXMgc2lsZW50IChldmVyeSBjZWxsIGlzXG4gKiBkcm9wcGVkIGFuZCB0aGUgZ3JpZCByZW5kZXJzIGVtcHR5KS4gU28gdGhlIHJvdy1wZXItc2VyaWVzIHNoYXBlIGl0XG4gKiBhbHJlYWR5IHByb2R1Y2VzIHJlbGlhYmx5IGZvciBiYXIgY2hhcnRzIC0gb25lIHNlcmllcyBwZXIgbWF0cml4XG4gKiByb3csIG51bWJlcnMgYWxpZ25lZCB0byBgY2F0ZWdvcmllc2AgLSBpcyBhY2NlcHRlZCB0b28gYW5kIHR1cm5lZFxuICogaW50byB0cmlwbGVzIGhlcmUuXG4gKlxuICogUm93IG9yZGVyIHJlYWRzIHRvcC10by1ib3R0b206IEVjaGFydHMnIGNhdGVnb3J5IHktYXhpcyBjb3VudHMgaW5kZXhcbiAqIDAgZnJvbSB0aGUgQk9UVE9NLCBzbyBhIHJvdy1kZXJpdmVkIG1hdHJpeCByZXZlcnNlcyBib3RoIHRoZSBheGlzXG4gKiBsYWJlbHMgYW5kIHRoZSByb3cgaW5kaWNlcywgcHV0dGluZyB0aGUgZmlyc3Qgc2VyaWVzIGF0IHRoZSB0b3AgdGhlXG4gKiB3YXkgdGhlIG1vZGVsIGxpc3RlZCBpdC5cbiAqL1xuZnVuY3Rpb24gaGVhdG1hcE1hdHJpeChwbGFuOiBDaGFydFBsYW4pOiB7IGNlbGxzOiBIZWF0bWFwQ2VsbFtdOyB5Q2F0ZWdvcmllczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IHRyaXBsZXMgPSBoZWF0bWFwQ2VsbHMocGxhbi5zZXJpZXNbMF0/LmRhdGEgPz8gW10pO1xuICBpZiAodHJpcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHsgY2VsbHM6IHRyaXBsZXMsIHlDYXRlZ29yaWVzOiBwbGFuLnlDYXRlZ29yaWVzID8/IFtdIH07XG4gIH1cbiAgY29uc3Qgcm93cyA9IHBsYW4uc2VyaWVzLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCB2YWx1ZXM6IG51bWVyaWNQb2ludHMocy5kYXRhKSB9KSk7XG4gIGNvbnN0IGxhYmVscyA9IHBsYW4ueUNhdGVnb3JpZXMgPz8gcm93cy5tYXAoKHIpID0+IHIubmFtZSk7XG4gIGNvbnN0IGxhc3RSb3cgPSByb3dzLmxlbmd0aCAtIDE7XG4gIHJldHVybiB7XG4gICAgY2VsbHM6IHJvd3MuZmxhdE1hcCgocm93LCByb3dJbmRleCkgPT5cbiAgICAgIHJvdy52YWx1ZXMubWFwKCh2YWx1ZSwgY29sdW1uSW5kZXgpOiBIZWF0bWFwQ2VsbCA9PiBbY29sdW1uSW5kZXgsIGxhc3RSb3cgLSByb3dJbmRleCwgdmFsdWVdKSxcbiAgICApLFxuICAgIHlDYXRlZ29yaWVzOiBbLi4ubGFiZWxzXS5yZXZlcnNlKCksXG4gIH07XG59XG5cbi8qKiBTZXF1ZW50aWFsIGxpZ2h0LXRvLWJyYW5kIHJhbXAgZm9yIGhlYXRtYXAgaW50ZW5zaXR5LiAqL1xuY29uc3QgSEVBVE1BUF9SQU1QID0gW1wiI0VBRjFGRVwiLCBcIiM5Q0JERjdcIiwgXCIjNEM4NkVFXCIsIFwiIzI0NjNFQlwiLCBcIiMxNDM4N0ZcIl07XG5cbi8qKiBBYm92ZSB0aGlzIG1hbnkgY2VsbHMsIHByaW50ZWQgdmFsdWVzIG92ZXJsYXAgYW5kIGFyZSBzdXBwcmVzc2VkLiAqL1xuY29uc3QgSEVBVE1BUF9MQUJFTF9NQVhfQ0VMTFMgPSA2MDtcblxuLyoqIFJpc2luZyBzdGVwIGZpbGwgKGVtZXJhbGQpIGFuZCBmYWxsaW5nIHN0ZXAgZmlsbCAocm9zZSkuICovXG5jb25zdCBXQVRFUkZBTExfSU5DUkVBU0VfQ09MT1IgPSBcIiMyRUI4OEFcIjtcbmNvbnN0IFdBVEVSRkFMTF9ERUNSRUFTRV9DT0xPUiA9IFwiI0REMkM0RFwiO1xuXG4vKiogU2VyaWVzIG5hbWVzIHRoZSB3YXRlcmZhbGwgZXhwYW5zaW9uIGVtaXRzLiAqL1xuY29uc3QgV0FURVJGQUxMX0hFTFBFUl9OQU1FID0gXCJSdW5uaW5nIHRvdGFsXCI7XG5jb25zdCBXQVRFUkZBTExfSU5DUkVBU0VfTkFNRSA9IFwiSW5jcmVhc2VcIjtcbmNvbnN0IFdBVEVSRkFMTF9ERUNSRUFTRV9OQU1FID0gXCJEZWNyZWFzZVwiO1xuXG4vKipcbiAqIEEgbW9kZWwgYXNrZWQgZm9yIGEgYnJpZGdlIG9mdGVuIGJ1aWxkcyB0aGUgcnVubmluZyB0b3RhbCBpdHNlbGYgYW5kXG4gKiBoYW5kcyBiYWNrIGEgY3VtdWxhdGl2ZS1iYXNlIHNlcmllcyBhbG9uZ3NpZGUgdGhlIGRlbHRhcyAtIHdoaWNoXG4gKiByZW5kZXJzIGFzIHR3byBwbGFpbiBiYXIgc2VyaWVzLCBub3QgYSB3YXRlcmZhbGwgKHRoZSBiYXNlIGJhcnMgYXJlXG4gKiB0aGUgdGFsbCBvbmVzKS4gVGhlIGJhc2UgaXMgcmVjb2duaXphYmxlIGJ5IG5hbWUsIHNvIGl0IGlzIGRyb3BwZWRcbiAqIGhlcmUgYW5kIHRoZSBydW5uaW5nIHRvdGFsIHJlY29tcHV0ZWQgZnJvbSB0aGUgZGVsdGFzLlxuICovXG5jb25zdCBXQVRFUkZBTExfQkFTRV9OQU1FID0gL1xcYihiYXNlfGN1bXVsYXRpdmV8cnVubmluZ3xoZWxwZXJ8dG90YWx8c3RhcnQoaW5nKT8pXFxiL2k7XG5cbi8qKlxuICogUGljayB0aGUgc2lnbmVkLWRlbHRhIHNlcmllcyBvdXQgb2YgYSB3YXRlcmZhbGwgcGxhbiwgaWdub3JpbmcgYW55XG4gKiBjdW11bGF0aXZlLWJhc2Ugc2VyaWVzIHRoZSBwbGFubmVyIGJ1aWx0IGJ5IGhhbmRcbiAqICh7QGxpbmsgV0FURVJGQUxMX0JBU0VfTkFNRX0pLiBGYWxscyBiYWNrIHRvIHRoZSBmaXJzdCBzZXJpZXMgd2hlblxuICogZXZlcnkgbmFtZSBsb29rcyBsaWtlIGEgYmFzZSwgc2luY2UgZHJvcHBpbmcgdGhlbSBhbGwgd291bGQgbGVhdmVcbiAqIG5vdGhpbmcgdG8gcGxvdC5cbiAqL1xuZnVuY3Rpb24gd2F0ZXJmYWxsRGVsdGFTZXJpZXMoXG4gIHNlcmllczogQ2hhcnRQbGFuW1wic2VyaWVzXCJdLFxuKTogQ2hhcnRQbGFuW1wic2VyaWVzXCJdW251bWJlcl0gfCB1bmRlZmluZWQge1xuICByZXR1cm4gc2VyaWVzLmZpbmQoKHMpID0+ICFXQVRFUkZBTExfQkFTRV9OQU1FLnRlc3Qocy5uYW1lKSkgPz8gc2VyaWVzWzBdO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBzdGFja2VkIHRyYW5zcGFyZW50LWJhc2UgKyBpbmNyZWFzZSArIGRlY3JlYXNlIHNlcmllcyB0aGF0XG4gKiBFY2hhcnRzIHVzZXMgZm9yIGEgd2F0ZXJmYWxsIChpdCBoYXMgbm8gbmF0aXZlIHdhdGVyZmFsbCB0eXBlKS5cbiAqIFZhbHVlcyBhcmUgc2lnbmVkIGRlbHRhczsgdGhlIHRyYW5zcGFyZW50IGhlbHBlciBjYXJyaWVzIHRoZSBydW5uaW5nXG4gKiB0b3RhbCBzbyBlYWNoIHZpc2libGUgYmFyIHN0YXJ0cyB3aGVyZSB0aGUgcHJldmlvdXMgb25lIGVuZGVkLlxuICpcbiAqIFRoZSBoZWxwZXIgaXMgYHNpbGVudGAsIHNvIHdpdGggYW4gaXRlbS10cmlnZ2VyZWQgdG9vbHRpcCBpdCBpc1xuICogaW52aXNpYmxlIHRvIGJvdGggdGhlIGV5ZSBhbmQgdGhlIHBvaW50ZXIgLSB0aGUgYWx0ZXJuYXRpdmUsIGFuIGF4aXNcbiAqIHRvb2x0aXAgdGhhdCBoaWRlcyB0aGUgaGVscGVyIHJvdywgbmVlZHMgYSBmdW5jdGlvbiBmb3JtYXR0ZXIsIGFuZFxuICogdGhpcyBzcGVjIGhhcyB0byBzdXJ2aXZlIEpTT04gc2VyaWFsaXphdGlvbiB0byB0aGUgYnJvd3Nlci5cbiAqL1xuZnVuY3Rpb24gd2F0ZXJmYWxsU2VyaWVzKHZhbHVlczogbnVtYmVyW10pOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBoZWxwZXJzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBpbmNyZWFzZXM6IEFycmF5PG51bWJlciB8IFwiLVwiPiA9IFtdO1xuICBjb25zdCBkZWNyZWFzZXM6IEFycmF5PG51bWJlciB8IFwiLVwiPiA9IFtdO1xuICBsZXQgY3VtdWxhdGl2ZSA9IDA7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgIGhlbHBlcnMucHVzaChjdW11bGF0aXZlKTtcbiAgICAgIGluY3JlYXNlcy5wdXNoKHZhbHVlKTtcbiAgICAgIGRlY3JlYXNlcy5wdXNoKFwiLVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVscGVycy5wdXNoKGN1bXVsYXRpdmUgKyB2YWx1ZSk7XG4gICAgICBpbmNyZWFzZXMucHVzaChcIi1cIik7XG4gICAgICBkZWNyZWFzZXMucHVzaCgtdmFsdWUpO1xuICAgIH1cbiAgICBjdW11bGF0aXZlICs9IHZhbHVlO1xuICB9XG4gIGNvbnN0IHRyYW5zcGFyZW50ID0geyBib3JkZXJDb2xvcjogXCJ0cmFuc3BhcmVudFwiLCBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH07XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogV0FURVJGQUxMX0hFTFBFUl9OQU1FLFxuICAgICAgdHlwZTogXCJiYXJcIixcbiAgICAgIHN0YWNrOiBcInRvdGFsXCIsXG4gICAgICBzaWxlbnQ6IHRydWUsXG4gICAgICBpdGVtU3R5bGU6IHRyYW5zcGFyZW50LFxuICAgICAgZW1waGFzaXM6IHsgaXRlbVN0eWxlOiB0cmFuc3BhcmVudCB9LFxuICAgICAgZGF0YTogaGVscGVycyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFdBVEVSRkFMTF9JTkNSRUFTRV9OQU1FLFxuICAgICAgdHlwZTogXCJiYXJcIixcbiAgICAgIHN0YWNrOiBcInRvdGFsXCIsXG4gICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IFdBVEVSRkFMTF9JTkNSRUFTRV9DT0xPUiB9LFxuICAgICAgZGF0YTogaW5jcmVhc2VzLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogV0FURVJGQUxMX0RFQ1JFQVNFX05BTUUsXG4gICAgICB0eXBlOiBcImJhclwiLFxuICAgICAgc3RhY2s6IFwidG90YWxcIixcbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogV0FURVJGQUxMX0RFQ1JFQVNFX0NPTE9SIH0sXG4gICAgICBkYXRhOiBkZWNyZWFzZXMsXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBFeHBhbmQgYSB7QGxpbmsgQ2hhcnRQbGFufSBpbnRvIGEgZnVsbCBFY2hhcnRzIGBFQ2hhcnRzT3B0aW9uYFxuICogSlNPTi4gQ2VudHJhbGl6ZWQgaGVyZSBzbyB0aGUgcGxhbm5lciBhZ2VudCBvbmx5IGZpbGxzIGluIHRoZVxuICogY29tcGFjdCBwbGFuIHNoYXBlOyB0b29sdGlwIC8gYW5pbWF0aW9uIC8gY29sb3IgLyBncmlkIGRlZmF1bHRzXG4gKiBzdGF5IGNvbnNpc3RlbnQgYWNyb3NzIGNoYXJ0cyBhbmQgYXJlIGVhc3kgdG8gdHVuZSB3aXRob3V0XG4gKiByZXRyYWluaW5nIG1vZGVsIGJlaGF2aW91ci5cbiAqXG4gKiBXaGVuIGBicmFuZGAgaXMgc2V0LCB0aGUgcmVzb2x2ZWQgc3BlYyBpcyB0aGVtZWQgd2l0aCB0aGUgYnJhbmQncyBzZXJpZXNcbiAqIGNvbG9yIGN5Y2xlIGFuZCBiYXNlIHRleHQgc3R5bGUgKHNlZSB7QGxpbmsgYnJhbmRDaGFydFRoZW1lfSk7IG90aGVyd2lzZVxuICogRWNoYXJ0cycgZGVmYXVsdHMgYXBwbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbGFuVG9FY2hhcnRzT3B0aW9uKFxuICBpbnB1dDogQ2hhcnRQbGFuSW5wdXQsXG4gIGZhbGxiYWNrVGl0bGU6IHN0cmluZyxcbiAgYnJhbmQ/OiBCcmFuZENvbnRleHQsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHBsYW4gPSBjaGFydFBsYW5TY2hlbWEucGFyc2UoaW5wdXQpO1xuICBjb25zdCBiYXNlVGl0bGUgPSBwbGFuLnRpdGxlID8/IGZhbGxiYWNrVGl0bGU7XG4gIGNvbnN0IGdyaWQgPSB7IGxlZnQ6IDQ4LCByaWdodDogMjQsIHRvcDogNTYsIGJvdHRvbTogNDgsIGNvbnRhaW5MYWJlbDogdHJ1ZSB9O1xuICBjb25zdCB0aGVtZSA9IGJyYW5kID8gYnJhbmRDaGFydFRoZW1lKGJyYW5kKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGhlbWVkID0gKG9wdGlvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PlxuICAgIHRoZW1lID8geyAuLi50aGVtZSwgLi4ub3B0aW9uIH0gOiBvcHRpb247XG4gIGNvbnN0IHRpdGxlID0geyB0ZXh0OiBiYXNlVGl0bGUsIGxlZnQ6IFwiY2VudGVyXCIgfTtcbiAgY29uc3QgbGVnZW5kID0geyBib3R0b206IDAgfTtcblxuICBpZiAocGxhbi5jaGFydFR5cGUgPT09IFwiY3VzdG9tXCIpIHtcbiAgICAvLyBUaGUgb3B0aW9uIGFycml2ZXMgYXMgYSBKU09OIFNUUklORywgbm90IGEgbmVzdGVkIG9iamVjdDogdGhpcyBwbGFuIGlzXG4gICAgLy8gdGhlIHBsYW5uZXIncyBwcm92aWRlci1lbmZvcmNlZCBzdHJ1Y3R1cmVkIG91dHB1dCwgYW5kIGEgZnJlZS1mb3JtXG4gICAgLy8gb2JqZWN0IGJlY29tZXMgYW4gdW5jb25zdHJhaW5lZCBgYWRkaXRpb25hbFByb3BlcnRpZXNgIHNjaGVtYSB0aGF0XG4gICAgLy8gc3RyaWN0IE9wZW5BSSBhbmQgR2VtaW5pIGVuZHBvaW50cyByZWplY3QgLSB3aGljaCB3b3VsZCBicmVhayBFVkVSWVxuICAgIC8vIGNoYXJ0LCBub3QganVzdCB0aGlzIG9uZSAoc2FtZSBjbGFzcyBvZiBoYXphcmQgYXMgdGhlIGBwcmVmaXhJdGVtc2BcbiAgICAvLyBub3RlIG9uIGBjaGFydERhdGFQb2ludFNjaGVtYWApLiBBIG1hbGZvcm1lZCBzdHJpbmcgY29zdHMgb25lIGNoYXJ0LlxuICAgIC8vIE5vdGhpbmcgaGVyZSBpcyBldmFsJ2Q7IGEgc3RyaW5nLXZhbHVlZCBFY2hhcnRzIGZvcm1hdHRlciBpcyBhXG4gICAgLy8gdGVtcGxhdGUsIG5vdCBjb2RlLlxuICAgIGNvbnN0IG9wdGlvbiA9IGpzb24ucGFyc2VSZWNvcmQocGxhbi5vcHRpb24pO1xuICAgIGlmICghb3B0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoYXJ0VHlwZSBcImN1c3RvbVwiIG5lZWRzIGFuIGBvcHRpb25gIGhvbGRpbmcgYSBKU09OIG9iamVjdCcpO1xuICAgIH1cbiAgICAvLyBUaXRsZSBpcyB0aGUgb25lIGRlZmF1bHQgd29ydGggZmlsbGluZzogZXZlcnkgb3RoZXIgYnJhbmNoIGd1YXJhbnRlZXNcbiAgICAvLyBvbmUgYW5kIHRoZSByZW5kZXJlciByZXNlcnZlcyBncmlkIHNwYWNlIGZvciBpdC4gQSB0aXRsZSB0aGUgbW9kZWwgc2V0XG4gICAgLy8gd2lucywgYXMgZG9lcyBldmVyeSBvdGhlciBmaWVsZCBpdCBkZWNsYXJlZC5cbiAgICByZXR1cm4gdGhlbWVkKHsgdGl0bGUsIC4uLm9wdGlvbiB9KTtcbiAgfVxuXG4gIGlmIChwbGFuLmNoYXJ0VHlwZSA9PT0gXCJwaWVcIiB8fCBwbGFuLmNoYXJ0VHlwZSA9PT0gXCJmdW5uZWxcIiB8fCBwbGFuLmNoYXJ0VHlwZSA9PT0gXCJ0cmVlbWFwXCIpIHtcbiAgICBjb25zdCBzbGljZXMgPSBuYW1lZFNsaWNlcyhwbGFuLnNlcmllc1swXT8uZGF0YSA/PyBbXSk7XG4gICAgY29uc3Qgc2VyaWVzVHlwZSA9IHBsYW4uY2hhcnRUeXBlO1xuICAgIHJldHVybiB0aGVtZWQoe1xuICAgICAgdGl0bGUsXG4gICAgICB0b29sdGlwOiB7IHRyaWdnZXI6IFwiaXRlbVwiIH0sXG4gICAgICBsZWdlbmQ6IHNlcmllc1R5cGUgPT09IFwidHJlZW1hcFwiID8gdW5kZWZpbmVkIDogbGVnZW5kLFxuICAgICAgc2VyaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBwbGFuLnNlcmllc1swXT8ubmFtZSA/PyBiYXNlVGl0bGUsXG4gICAgICAgICAgdHlwZTogc2VyaWVzVHlwZSxcbiAgICAgICAgICAuLi4oc2VyaWVzVHlwZSA9PT0gXCJwaWVcIiA/IHsgcmFkaXVzOiBbXCIzNSVcIiwgXCI2NSVcIl0gfSA6IHt9KSxcbiAgICAgICAgICAuLi4oc2VyaWVzVHlwZSA9PT0gXCJmdW5uZWxcIiA/IHsgc29ydDogXCJkZXNjZW5kaW5nXCIgfSA6IHt9KSxcbiAgICAgICAgICBkYXRhOiBzbGljZXMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBsYW4uY2hhcnRUeXBlID09PSBcInNjYXR0ZXJcIikge1xuICAgIC8vIEVjaGFydHMgY3Jhc2hlcyBvbiBudWxsIHNjYXR0ZXIgcG9pbnRzIC0ga2VlcCBvbmx5IHZhbGlkXG4gICAgLy8gYFt4LCB5XWAgdHVwbGVzLiBCYXJlIG51bWJlcnMgLyBvYmplY3RzIC8gbnVsbHMgZnJvbSBhXG4gICAgLy8gbWlzbWF0Y2hlZCBwbGFuIGdldCBkcm9wcGVkIHNpbGVudGx5LlxuICAgIHJldHVybiB0aGVtZWQoe1xuICAgICAgdGl0bGUsXG4gICAgICB0b29sdGlwOiB7IHRyaWdnZXI6IFwiaXRlbVwiIH0sXG4gICAgICBsZWdlbmQsXG4gICAgICBncmlkLFxuICAgICAgeEF4aXM6IHsgdHlwZTogXCJ2YWx1ZVwiLCBuYW1lOiBwbGFuLnhBeGlzTGFiZWwgfSxcbiAgICAgIHlBeGlzOiB7IHR5cGU6IFwidmFsdWVcIiwgbmFtZTogcGxhbi55QXhpc0xhYmVsIH0sXG4gICAgICBzZXJpZXM6IHBsYW4uc2VyaWVzLm1hcCgocykgPT4gKHtcbiAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICB0eXBlOiBcInNjYXR0ZXJcIixcbiAgICAgICAgZGF0YTogc2NhdHRlclBvaW50cyhzLmRhdGEpLFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBsYW4uY2hhcnRUeXBlID09PSBcImhlYXRtYXBcIikge1xuICAgIGNvbnN0IHsgY2VsbHMsIHlDYXRlZ29yaWVzIH0gPSBoZWF0bWFwTWF0cml4KHBsYW4pO1xuICAgIGNvbnN0IHZhbHVlcyA9IGNlbGxzLm1hcCgoYykgPT4gY1syXSk7XG4gICAgY29uc3QgbWluID0gdmFsdWVzLmxlbmd0aCA+IDAgPyBNYXRoLm1pbiguLi52YWx1ZXMpIDogMDtcbiAgICBjb25zdCBtYXggPSB2YWx1ZXMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLnZhbHVlcykgOiAxO1xuICAgIHJldHVybiB0aGVtZWQoe1xuICAgICAgdGl0bGUsXG4gICAgICB0b29sdGlwOiB7IHBvc2l0aW9uOiBcInRvcFwiIH0sXG4gICAgICAvLyBUaGUgdmlzdWFsTWFwIHJhbXAgc2l0cyBiZWxvdyB0aGUgcGxvdCwgc28gdGhlIGdyaWQgZ2l2ZXMgdXBcbiAgICAgIC8vIG1vcmUgYm90dG9tIHJvb20gdGhhbiBhbiBheGlzLW9ubHkgY2hhcnQgbmVlZHMuXG4gICAgICBncmlkOiB7IC4uLmdyaWQsIGJvdHRvbTogNzIgfSxcbiAgICAgIHhBeGlzOiB7XG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcbiAgICAgICAgZGF0YTogcGxhbi5jYXRlZ29yaWVzID8/IFtdLFxuICAgICAgICBuYW1lOiBwbGFuLnhBeGlzTGFiZWwsXG4gICAgICAgIHNwbGl0QXJlYTogeyBzaG93OiB0cnVlIH0sXG4gICAgICB9LFxuICAgICAgeUF4aXM6IHtcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxuICAgICAgICBkYXRhOiB5Q2F0ZWdvcmllcyxcbiAgICAgICAgbmFtZTogcGxhbi55QXhpc0xhYmVsLFxuICAgICAgICBzcGxpdEFyZWE6IHsgc2hvdzogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICAgIHZpc3VhbE1hcDoge1xuICAgICAgICAvLyBFY2hhcnRzIGhpZGVzIGV2ZXJ5IGNlbGwgd2hlbiBtaW4gPT09IG1heCAoYSB1bmlmb3JtIG1hdHJpeCksXG4gICAgICAgIC8vIHNvIGEgZGVnZW5lcmF0ZSByYW5nZSBpcyB3aWRlbmVkIGJ5IG9uZS5cbiAgICAgICAgbWluLFxuICAgICAgICBtYXg6IG1heCA+IG1pbiA/IG1heCA6IG1pbiArIDEsXG4gICAgICAgIGNhbGN1bGFibGU6IHRydWUsXG4gICAgICAgIG9yaWVudDogXCJob3Jpem9udGFsXCIsXG4gICAgICAgIGxlZnQ6IFwiY2VudGVyXCIsXG4gICAgICAgIGJvdHRvbTogOCxcbiAgICAgICAgaW5SYW5nZTogeyBjb2xvcjogSEVBVE1BUF9SQU1QIH0sXG4gICAgICB9LFxuICAgICAgc2VyaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBwbGFuLnNlcmllc1swXT8ubmFtZSA/PyBiYXNlVGl0bGUsXG4gICAgICAgICAgdHlwZTogXCJoZWF0bWFwXCIsXG4gICAgICAgICAgZGF0YTogY2VsbHMsXG4gICAgICAgICAgLy8gUHJpbnRlZCBjZWxsIHZhbHVlcyBhcmUgdW5yZWFkYWJsZSBvbmNlIHRoZSBncmlkIGlzIGRlbnNlLlxuICAgICAgICAgIGxhYmVsOiB7IHNob3c6IGNlbGxzLmxlbmd0aCA8PSBIRUFUTUFQX0xBQkVMX01BWF9DRUxMUyB9LFxuICAgICAgICAgIGVtcGhhc2lzOiB7IGl0ZW1TdHlsZTogeyBzaGFkb3dCbHVyOiAxMCwgc2hhZG93Q29sb3I6IFwicmdiYSgwLCAwLCAwLCAwLjMpXCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwbGFuLmNoYXJ0VHlwZSA9PT0gXCJyYWRhclwiKSB7XG4gICAgY29uc3QgaW5kaWNhdG9ycyA9IChwbGFuLmNhdGVnb3JpZXMgPz8gW10pLm1hcCgobmFtZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBlYWsgPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgLi4ucGxhbi5zZXJpZXMubWFwKChzKSA9PiB7XG4gICAgICAgICAgY29uc3QgbnVtcyA9IG51bWVyaWNQb2ludHMocy5kYXRhKTtcbiAgICAgICAgICByZXR1cm4gbnVtc1tpbmRleF0gPz8gMDtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgbmFtZSwgbWF4OiBwZWFrID4gMCA/IHBlYWsgOiAxIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoZW1lZCh7XG4gICAgICB0aXRsZSxcbiAgICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogXCJpdGVtXCIgfSxcbiAgICAgIGxlZ2VuZCxcbiAgICAgIHJhZGFyOiB7IGluZGljYXRvcjogaW5kaWNhdG9ycyB9LFxuICAgICAgc2VyaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInJhZGFyXCIsXG4gICAgICAgICAgZGF0YTogcGxhbi5zZXJpZXMubWFwKChzKSA9PiAoe1xuICAgICAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IG51bWVyaWNQb2ludHMocy5kYXRhKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBsYW4uY2hhcnRUeXBlID09PSBcIndhdGVyZmFsbFwiKSB7XG4gICAgY29uc3QgdmFsdWVzID0gbnVtZXJpY1BvaW50cyh3YXRlcmZhbGxEZWx0YVNlcmllcyhwbGFuLnNlcmllcyk/LmRhdGEgPz8gW10pO1xuICAgIHJldHVybiB0aGVtZWQoe1xuICAgICAgdGl0bGUsXG4gICAgICAvLyBJdGVtLXRyaWdnZXJlZCBzbyB0aGUgdHJhbnNwYXJlbnQgYHNpbGVudGAgb2Zmc2V0IGJhcnMgbmV2ZXJcbiAgICAgIC8vIHN1cmZhY2UgaW4gYSB0b29sdGlwIChzZWUgYHdhdGVyZmFsbFNlcmllc2ApLlxuICAgICAgdG9vbHRpcDogeyB0cmlnZ2VyOiBcIml0ZW1cIiB9LFxuICAgICAgLy8gT25seSB0aGUgdHdvIHZpc2libGUgc3RlcHMgYmVsb25nIGluIHRoZSBsZWdlbmQuXG4gICAgICBsZWdlbmQ6IHsgLi4ubGVnZW5kLCBkYXRhOiBbV0FURVJGQUxMX0lOQ1JFQVNFX05BTUUsIFdBVEVSRkFMTF9ERUNSRUFTRV9OQU1FXSB9LFxuICAgICAgZ3JpZCxcbiAgICAgIHhBeGlzOiB7XG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcbiAgICAgICAgZGF0YTogcGxhbi5jYXRlZ29yaWVzID8/IFtdLFxuICAgICAgICBuYW1lOiBwbGFuLnhBeGlzTGFiZWwsXG4gICAgICB9LFxuICAgICAgeUF4aXM6IHsgdHlwZTogXCJ2YWx1ZVwiLCBuYW1lOiBwbGFuLnlBeGlzTGFiZWwgfSxcbiAgICAgIHNlcmllczogd2F0ZXJmYWxsU2VyaWVzKHZhbHVlcyksXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGxhbi5jaGFydFR5cGUgPT09IFwiaG9yaXpvbnRhbEJhclwiKSB7XG4gICAgcmV0dXJuIHRoZW1lZCh7XG4gICAgICB0aXRsZSxcbiAgICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogXCJheGlzXCIsIGF4aXNQb2ludGVyOiB7IHR5cGU6IFwic2hhZG93XCIgfSB9LFxuICAgICAgbGVnZW5kLFxuICAgICAgZ3JpZCxcbiAgICAgIHhBeGlzOiB7IHR5cGU6IFwidmFsdWVcIiwgbmFtZTogcGxhbi54QXhpc0xhYmVsIH0sXG4gICAgICB5QXhpczoge1xuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXG4gICAgICAgIGRhdGE6IHBsYW4uY2F0ZWdvcmllcyA/PyBbXSxcbiAgICAgICAgbmFtZTogcGxhbi55QXhpc0xhYmVsLFxuICAgICAgfSxcbiAgICAgIHNlcmllczogcGxhbi5zZXJpZXMubWFwKChzKSA9PiAoe1xuICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgIHR5cGU6IFwiYmFyXCIsXG4gICAgICAgIGRhdGE6IHMuZGF0YSxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwbGFuLmNoYXJ0VHlwZSA9PT0gXCJjb21ib1wiKSB7XG4gICAgY29uc3QgdXNlc1JpZ2h0QXhpcyA9IHBsYW4uc2VyaWVzLnNvbWUoKHMpID0+IHMueUF4aXNJbmRleCA9PT0gMSk7XG4gICAgcmV0dXJuIHRoZW1lZCh7XG4gICAgICB0aXRsZSxcbiAgICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogXCJheGlzXCIgfSxcbiAgICAgIGxlZ2VuZCxcbiAgICAgIGdyaWQsXG4gICAgICB4QXhpczoge1xuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXG4gICAgICAgIGRhdGE6IHBsYW4uY2F0ZWdvcmllcyA/PyBbXSxcbiAgICAgICAgbmFtZTogcGxhbi54QXhpc0xhYmVsLFxuICAgICAgfSxcbiAgICAgIHlBeGlzOiB1c2VzUmlnaHRBeGlzXG4gICAgICAgID8gW1xuICAgICAgICAgICAgeyB0eXBlOiBcInZhbHVlXCIsIG5hbWU6IHBsYW4ueUF4aXNMYWJlbCB9LFxuICAgICAgICAgICAgeyB0eXBlOiBcInZhbHVlXCIsIG5hbWU6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgIF1cbiAgICAgICAgOiB7IHR5cGU6IFwidmFsdWVcIiwgbmFtZTogcGxhbi55QXhpc0xhYmVsIH0sXG4gICAgICBzZXJpZXM6IHBsYW4uc2VyaWVzLm1hcCgocykgPT4ge1xuICAgICAgICBjb25zdCBtYXJrID0gcy50eXBlID8/IFwiYmFyXCI7XG4gICAgICAgIGNvbnN0IHNlcmllc1R5cGUgPSBtYXJrID09PSBcImFyZWFcIiA/IFwibGluZVwiIDogbWFyaztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgICAgdHlwZTogc2VyaWVzVHlwZSxcbiAgICAgICAgICBkYXRhOiBzLmRhdGEsXG4gICAgICAgICAgeUF4aXNJbmRleDogcy55QXhpc0luZGV4ID8/IDAsXG4gICAgICAgICAgc21vb3RoOiBzZXJpZXNUeXBlID09PSBcImxpbmVcIixcbiAgICAgICAgICAuLi4obWFyayA9PT0gXCJhcmVhXCIgPyB7IGFyZWFTdHlsZToge30gfSA6IHt9KSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gYmFyIC8gbGluZSAvIGFyZWEgc2hhcmUgdGhlIHNhbWUgYXhpcyBsYXlvdXQuXG4gIGNvbnN0IGlzQXJlYSA9IHBsYW4uY2hhcnRUeXBlID09PSBcImFyZWFcIjtcbiAgY29uc3Qgc2VyaWVzVHlwZSA9IHBsYW4uY2hhcnRUeXBlID09PSBcImJhclwiID8gXCJiYXJcIiA6IFwibGluZVwiO1xuICByZXR1cm4gdGhlbWVkKHtcbiAgICB0aXRsZSxcbiAgICB0b29sdGlwOiB7IHRyaWdnZXI6IFwiYXhpc1wiIH0sXG4gICAgbGVnZW5kLFxuICAgIGdyaWQsXG4gICAgeEF4aXM6IHtcbiAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcbiAgICAgIGRhdGE6IHBsYW4uY2F0ZWdvcmllcyA/PyBbXSxcbiAgICAgIG5hbWU6IHBsYW4ueEF4aXNMYWJlbCxcbiAgICB9LFxuICAgIHlBeGlzOiB7IHR5cGU6IFwidmFsdWVcIiwgbmFtZTogcGxhbi55QXhpc0xhYmVsIH0sXG4gICAgc2VyaWVzOiBwbGFuLnNlcmllcy5tYXAoKHMpID0+ICh7XG4gICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICB0eXBlOiBzZXJpZXNUeXBlLFxuICAgICAgZGF0YTogcy5kYXRhLFxuICAgICAgc21vb3RoOiBzZXJpZXNUeXBlID09PSBcImxpbmVcIixcbiAgICAgIC4uLihpc0FyZWEgPyB7IGFyZWFTdHlsZToge30gfSA6IHt9KSxcbiAgICB9KSksXG4gIH0pO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZW5kZXJfZGF0YSB0b29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQnVpbGQgdGhlIGByZW5kZXJfZGF0YWAgTWFzdHJhIHRvb2wgYm91bmQgdG8gdGhlIGdpdmVuIHBsdWdpblxuICogY29uZmlnLiBBdXRvLXdpcmVkIGFzIGEgc3lzdGVtIHRvb2wgb24gZXZlcnkgYWdlbnQgKHNlZVxuICogYGFnZW50cy50c2ApOyBwZXItYWdlbnQgdG9vbHMgY2FuIHNoYWRvdyBpdCBieSByZWdpc3RlcmluZyBhXG4gKiBzYW1lLW5hbWVkIGVudHJ5LlxuICpcbiAqIFRoaW4gd3JhcHBlciBvdmVyIHtAbGluayBwcmVwYXJlQ2hhcnR9IGZvciBjYWxsZXJzIHRoYXQgYWxyZWFkeVxuICogaGF2ZSBhIGRhdGFzZXQgaW4gaGFuZC4gTWludHMgYSBgY2hhcnRJZGAgc3luY2hyb25vdXNseSwgY2FjaGVzXG4gKiBhbiBlbXB0eSBwbGFjZWhvbGRlciwgYW5kIGtpY2tzIG9mZiB0aGUgY2hhcnQtcGxhbm5lciBpbiB0aGVcbiAqIGJhY2tncm91bmQuIFJldHVybnMgdGhlIGBjaGFydElkYCBwbHVzIGl0cyByZWFkeS10by1jb3B5IGBtYXJrZXJgOyB0aGUgaG9zdFxuICogVUkgcmVzb2x2ZXMgdGhhdCBtYXJrZXIgdGhyb3VnaCB0aGUgcGx1Z2luJ3MgYC9lbWJlZC9jaGFydC86aWRgIHJvdXRlLlxuICpcbiAqIEZvciBHZW5pZSBzdGF0ZW1lbnQgcmVzdWx0cywgcHJlZmVyIHRoZSBHZW5pZSBhZ2VudCdzXG4gKiBgcHJlcGFyZV9jaGFydGAgdG9vbCwgd2hpY2ggYWNjZXB0cyBhIGBzdGF0ZW1lbnRfaWRgIGFuZFxuICogcmVzb2x2ZXMgdGhlIHJvd3MgbGF6aWx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRSZW5kZXJEYXRhVG9vbChjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IFwicmVuZGVyX2RhdGFcIixcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihbXG4gICAgICBgXG4gICAgICAgIFN1Ym1pdCBhIHRhYnVsYXIgZGF0YXNldCBmb3IgaW5saW5lIHJlbmRlcmluZyBhcyBhIGNoYXJ0IGluXG4gICAgICAgIHRoZSB1c2VyJ3Mgdmlldy4gUGFzcyBhIHRpdGxlLCB0aGUgcmF3IHJvd3MgKGFycmF5IG9mIG9iamVjdHNcbiAgICAgICAga2V5ZWQgYnkgY29sdW1uIG5hbWUpLCBhbmQgYW4gb3B0aW9uYWwgb25lLWxpbmUgZGVzY3JpcHRpb25cbiAgICAgICAgb2YgdGhlIGluc2lnaHQgdG8gaGlnaGxpZ2h0LiBSZXR1cm5zIFxcYGNoYXJ0SWRcXGAgcGx1cyB0aGVcbiAgICAgICAgY29tcGxldGUgXFxgbWFya2VyXFxgOyBjb3B5IHRoZSByZXR1cm5lZCBtYXJrZXIgVkVSQkFUSU0gb250b1xuICAgICAgICBpdHMgb3duIGxpbmUgd2hlcmUgdGhlIGNoYXJ0IHNob3VsZCByZW5kZXIuIE5ldmVyIGNvbnN0cnVjdCxcbiAgICAgICAgYWx0ZXIsIG9yIGludmVudCBhIGNoYXJ0IG1hcmtlciB5b3Vyc2VsZi5cbiAgICAgIGAsXG4gICAgICBgXG4gICAgICAgIFBsYWNlbWVudCBjb250cmFjdDogZW1iZWQgdGhlIHJldHVybmVkIFxcYG1hcmtlclxcYCBvbiBpdHMgb3duXG4gICAgICAgIGxpbmUgKGJsYW5rIGxpbmVzIGFib3ZlIGFuZCBiZWxvdykgd2hlcmV2ZXIgeW91IHdhbnQgdGhlIGNoYXJ0XG4gICAgICAgIHRvIGFwcGVhciBpbiB5b3VyIHJlcGx5LiBUaGUgY2hhcnQgcmVzb2x2ZXNcbiAgICAgICAgYXN5bmNocm9ub3VzbHkgLSB0aGUgdG9vbCByZXR1cm5zIHRoZSBpZCBpbW1lZGlhdGVseSBhbmQgdGhlXG4gICAgICAgIGhvc3QgVUkgZmV0Y2hlcyB0aGUgY2hhcnQgZnJvbSB0aGUgY2FjaGUgb25jZSB0aGUgcGxhbm5lclxuICAgICAgICBsYW5kcy4gWW91IGNhbiBjYWxsIFxcYHJlbmRlcl9kYXRhXFxgIG11bHRpcGxlIHRpbWVzIGluIHRoZVxuICAgICAgICBzYW1lIHR1cm4gKHRoZSB0b29sIGlzIHBhcmFsbGVsLXNhZmUpIGFuZCBpbnRlcmxlYXZlIHRoZVxuICAgICAgICBtYXJrZXJzIHdpdGggcHJvc2Ugc28gZWFjaCBjaGFydCBzaXRzIG5leHQgdG8gaXRzXG4gICAgICAgIGNvbW1lbnRhcnkuXG4gICAgICBgLFxuICAgICAgYFxuICAgICAgICBVc2Ugd2hlbmV2ZXIgYSBTUUwgcm93IHNldCwgQVBJIHJlc3BvbnNlLCBvciBoYW5kLWJ1aWx0XG4gICAgICAgIGRhdGFzZXQgd291bGQgbGFuZCBiZXR0ZXIgYXMgYSBwaWN0dXJlIHRoYW4gYXMgYSBsaXN0IG9yXG4gICAgICAgIHRhYmxlLiBDYXAgaW5wdXQgYXQgYSBmZXcgaHVuZHJlZCByb3dzOyBzYW1wbGUgb3IgYWdncmVnYXRlXG4gICAgICAgIGxhcmdlciBkYXRhc2V0cyBmaXJzdC5cbiAgICAgIGAsXG4gICAgXSksXG4gICAgaW5wdXRTY2hlbWE6IGNoYXJ0UGxhbm5lclJlcXVlc3RTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBjaGFydFRvb2xPdXRwdXRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjdHhSYXcpID0+IHtcbiAgICAgIGNvbnN0IHsgdGl0bGUsIGRlc2NyaXB0aW9uLCBkYXRhIH0gPSBpbnB1dCBhcyBDaGFydFBsYW5uZXJSZXF1ZXN0O1xuICAgICAgY29uc3QgY3R4ID0gY3R4UmF3IGFzIHsgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dCB9IHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByZXBhcmVDaGFydCh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdXNlcktleTogcmVzb2x2ZVVzZXJLZXkoY3R4Py5yZXF1ZXN0Q29udGV4dCksXG4gICAgICAgIHRpdGxlLFxuICAgICAgICAuLi4oZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgIHJlc29sdmVEYXRhOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoeyByb3dzOiBkYXRhIH0pLFxuICAgICAgICAuLi4oY3R4Py5yZXF1ZXN0Q29udGV4dCA/IHsgcmVxdWVzdENvbnRleHQ6IGN0eC5yZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
1028
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxFQUNILE1BQU0sRUFDTixXQUFXLEdBRVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBZ0MsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUUxQyw2RUFBNkU7QUFFN0U7Ozs7OztHQU1HO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRXBDLHNEQUFzRDtBQUN0RCxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQztBQUU3QyxtRUFBbUU7QUFDbkUsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUM7QUFFeEMsdURBQXVEO0FBQ3ZELE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBRXRDLG9FQUFvRTtBQUNwRSxNQUFN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QUM7WUFDckM7Ozs7Ozs7O09BUUM7WUFDRDs7Ozs7Ozs7OztPQVVDO1lBQ0Q7Ozs7O09BS0M7U0FDRixDQUFDO1FBQ0YsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxZQUFZLEVBQUUscUJBQXFCO1FBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQTRCLENBQUM7WUFDbEUsTUFBTSxHQUFHLEdBQUcsTUFBeUQsQ0FBQztZQUN0RSxPQUFPLFlBQVksQ0FBQztnQkFDbEIsTUFBTTtnQkFDTixPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUM7Z0JBQzVDLEtBQUs7Z0JBQ0wsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbEQsR0FBRyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3ZFLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGFydCBwbGFubmVyICsgY2hhcnQgY2FjaGUuXG4gKlxuICogU2VsZi1jb250YWluZWQgY2hhcnQgc3Vic3lzdGVtIHdpdGggdHdvIGxheWVyczpcbiAqXG4gKiAgIDEuIElubmVyIHBsYW5uZXIgYWdlbnQgKHByaXZhdGUpLiBQdXJlIGRhdGFzZXQtaW4gL1xuICogICAgICBgRUNoYXJ0c09wdGlvbmAtb3V0IGJyYWluLiBEcml2ZW4gYnkge0BsaW5rIHByZXBhcmVDaGFydH07XG4gKiAgICAgIGNhbGxlcnMgbmV2ZXIgaW5zdGFudGlhdGUgaXQgZGlyZWN0bHkuXG4gKiAgIDIuIHtAbGluayBwcmVwYXJlQ2hhcnR9OiBvcmNoZXN0cmF0aW9uIG9uIHRvcCBvZiB0aGUgcGxhbm5lci5cbiAqICAgICAgTWludHMgYSBgY2hhcnRJZGAsIGNhY2hlcyBhbiBlbXB0eSBgeyBjaGFydElkIH1gIHJlY29yZFxuICogICAgICBzeW5jaHJvbm91c2x5LCB0aGVuIHJlc29sdmVzIHRoZSBkYXRhc2V0IGFuZCBydW5zIHRoZVxuICogICAgICBwbGFubmVyIGluIHRoZSBiYWNrZ3JvdW5kLiBUaGUgdGVybWluYWwgZW50cnkgc2V0dGxlcyB3aXRoXG4gKiAgICAgIGVpdGhlciBgcmVzdWx0YCAoc3VjY2Vzcykgb3IgYGVycm9yYCAoZmFpbHVyZSkuIEJvdGhcbiAqICAgICAgdW5kZWZpbmVkIG1lYW5zIHRoZSBlbnRyeSBpcyBzdGlsbCBwcm9jZXNzaW5nLlxuICpcbiAqIFRoZSBjYWNoZSBzdXJmYWNlICh7QGxpbmsgZmV0Y2hDaGFydH0pIGlzIHRoZSBvbmx5IHN0YXRlIHRoZVxuICogSFRUUCByb3V0ZSBhbmQgdGhlIGNoYXJ0LXByb2R1Y2luZyB0b29scyBzaGFyZS4gYHByZXBhcmVDaGFydGBcbiAqIGlzIGRhdGFzZXQtYWdub3N0aWMgLSBjYWxsZXJzIHN1cHBseSBhIGByZXNvbHZlRGF0YWAgY2FsbGJhY2tcbiAqIHRoYXQgZmV0Y2hlcyB0aGUgcm93cyBob3dldmVyIHRoZXkgbGlrZSAoR2VuaWUgc3RhdGVtZW50LCBpbmxpbmVcbiAqIGRhdGFzZXQsIGN1c3RvbSBBUEkpLiBUaGUgbW9kdWxlIGhhcyBubyBrbm93bGVkZ2Ugb2YgR2VuaWUgb3JcbiAqIHN0YXRlbWVudCBpZHM7IHRob3NlIGNvbmNlcm5zIGxpdmUgaW4gdGhlIHRvb2xzIHRoYXQgd3JhcCBpdC5cbiAqXG4gKiBXaXJlLWZvcm1hdCBzY2hlbWFzIGxpdmUgaW4gYEBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYWAgc29cbiAqIHRoZSBkZW1vIGNsaWVudCBhbmQgYW55IG90aGVyIFVJIGNvbnN1bWVyIHNoYXJlIHRoZSBleGFjdCBzYW1lXG4gKiBzaGFwZSB0aGlzIG1vZHVsZSByZWFkcyBhbmQgd3JpdGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBBcHBLaXRFcnJvciwgQ2FjaGVNYW5hZ2VyLCBFeGVjdXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGFzeW5jVXRpbHMsXG4gIGVycm9yVXRpbHMsXG4gIGhhc2gsXG4gIGpzb24sXG4gIGxvZyxcbiAgb2JqZWN0LFxuICBzdHJpbmdVdGlscyxcbiAgdHlwZSBCcmFuZENvbnRleHQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBtYXJrZXJzLCB3aXJlLCB0eXBlIENoYXJ0LCB0eXBlIENoYXJ0UmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IEFnZW50IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZVVzZXJLZXksIHR5cGUgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBidWlsZE1vZGVsIH0gZnJvbSBcIi4vbW9kZWwudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9jaGFydFwiKTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUVEwgZm9yIGNhY2hlZCBjaGFydCBlbnRyaWVzLiBPbmUgaG91ciBiYWxhbmNlcyBcImxvbmcgZW5vdWdoIGZvclxuICogdGhlIGhvc3QgVUkgdG8gZmV0Y2ggdGhlIGNoYXJ0IHdlbGwgYWZ0ZXIgdGhlIG1vZGVsIGZpbmlzaGVkXG4gKiB0YWxraW5nXCIgYWdhaW5zdCBcInNob3J0IGVub3VnaCB0aGF0IGFiYW5kb25lZCBjaGFydCBpZHMgZG9uJ3RcbiAqIHBpbiBzdG9yYWdlXCIuIE1hdGNoZXMgdGhlIHR5cGljYWwgRGF0YWJyaWNrcyBPQk8gdG9rZW4gbGlmZXRpbWVcbiAqIHNvIGFueSBkYXRhIHJlLXJlc29sdXRpb24gc3RheXMgaW5zaWRlIHRoZSBvcmlnaW5hbCBhdXRoIHdpbmRvdy5cbiAqL1xuY29uc3QgQ0hBUlRfQ0FDSEVfVFRMX1NFQyA9IDYwICogNjA7XG5cbi8qKiBDYWNoZSBuYW1lc3BhY2U7IGtlZXBzIHRoZSBjaGFydCBrZXlzcGFjZSB0aWR5LiAqL1xuY29uc3QgQ0hBUlRfQ0FDSEVfTkFNRVNQQUNFID0gXCJtYXN0cmE6Y2hhcnRcIjtcblxuLyoqIERlZmF1bHQgc2VydmVyLXNpZGUgbG9uZy1wb2xsIGJ1ZGdldCBmb3Ige0BsaW5rIGZldGNoQ2hhcnR9LiAqL1xuY29uc3QgREVGQVVMVF9GRVRDSF9USU1FT1VUX01TID0gNjBfMDAwO1xuXG4vKiogRGVmYXVsdCBpbnRlci1wb2xsIHNsZWVwIGZvciB7QGxpbmsgZmV0Y2hDaGFydH0uICovXG5jb25zdCBERUZBVUxUX0ZFVENIX0lOVEVSVkFMX01TID0gMjUwO1xuXG4vKiogU3RhYmxlIHRleHQgc3RvcmVkIG9uIGEgY2hhcnQgZW50cnkgd2hvc2UgcGxhbm5lciBydW4gZmFpbGVkLiAqL1xuY29uc3QgQ0hBUlRfRkFJTEVEX01FU1NBR0UgPSBcIkNoYXJ0IGdlbmVyYXRpb24gZmFpbGVkXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NoZW1hcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogT25lIHNlcmllcyBkYXRhIHBvaW50LiBXaWRlIHZhcmlhbnQgc2V0IHNvIHRoZSBwbGFubmVyIGFnZW50IGNhblxuICogZmFpdGhmdWxseSBwYXNzIHRocm91Z2ggd2hhdGV2ZXIgdGhlIFNRTCByb3cgc2V0IGNvbnRhaW5lZFxuICogKG51bWJlcnMsIHN0cmluZ2lmaWVkIG51bWJlcnMsIG51bGxzIGZvciBtaXNzaW5nIG1lYXN1cmVtZW50cyxcbiAqIGBbeCwgeV1gIHR1cGxlcyBmb3Igc2NhdHRlciwgYFt4LCB5LCB2YWx1ZV1gIHRyaXBsZXMgZm9yIGhlYXRtYXAsXG4gKiBge25hbWUsIHZhbHVlfWAgc2xpY2VzIGZvciBwaWUgLyBmdW5uZWwgLyB0cmVlbWFwKSB3aXRob3V0IHRoZVxuICogc3RydWN0dXJlZC1vdXRwdXQgZ3VhcmQgcmVqZWN0aW5nIHRoZSB3aG9sZSBwbGFuLlxuICpcbiAqIFRocmVlIGxheWVycyBvZiB0b2xlcmFuY2U6XG4gKlxuICogICAxLiB7QGxpbmsgei5wcmVwcm9jZXNzfSBub3JtYWxpemVzIHdpcmUgc2hhcGVzIEJFRk9SRSB1bmlvblxuICogICAgICBkaXNwYXRjaDogc3RyaW5naWZpZWQgbnVtYmVycyBwYXJzZSB0byBudW1iZXJzLCBmaW5pdGVcbiAqICAgICAgY2hlY2tzIHJlamVjdCBgTmFOYCAvIGBJbmZpbml0eWAsIDItLzMtZWxlbWVudCBhcnJheXMgY29lcmNlXG4gKiAgICAgIHR1cGxlIGNvbXBvbmVudHMsIGFuZCBge3ZhbHVlfWAgb2JqZWN0cyB3aXRoIG1pc3NpbmcgL1xuICogICAgICBzdHJpbmdpZmllZCBgdmFsdWVgIGdldCBjb2VyY2VkIG9yIHJlamVjdGVkIHVuaWZvcm1seS5cbiAqICAgICAgQW55dGhpbmcgbm90IGhhbmRsZWFibGUgYmVjb21lcyBgbnVsbGAuXG4gKiAgIDIuIFRoZSB1bmlvbiBhY2NlcHRzIGBudWxsYCBhcyBhIGZpcnN0LWNsYXNzIHZhcmlhbnQuIEVjaGFydHNcbiAqICAgICAgcmVuZGVycyBudWxsIGFzIGEgZ2FwIG9uIGJhciAvIGxpbmUgLyBhcmVhICh3aGljaCBpcyB0aGVcbiAqICAgICAgcmlnaHQgdmlzdWFsIHNpZ25hbCBmb3IgXCJtaXNzaW5nIHJlYWRpbmdcIikuIFNjYXR0ZXIsIGhlYXRtYXAsXG4gKiAgICAgIGFuZCBzbGljZSBjaGFydHMgZmlsdGVyIG51bGxzIGluIHtAbGluayBwbGFuVG9FY2hhcnRzT3B0aW9ufVxuICogICAgICBiZWNhdXNlIEVjaGFydHMgY3Jhc2hlcyBvbiBudWxsIHR1cGxlcyAvIHNsaWNlcy5cbiAqICAgMy4ge0BsaW5rIHoudW5pb24jY2F0Y2h9IGJhY2tzdG9wcyB0aGUgd2hvbGUgdGhpbmc6IGlmXG4gKiAgICAgIHByZXByb2Nlc3Mgc29tZWhvdyBwcm9kdWNlcyBhIHNoYXBlIHRoYXQgc3RpbGwgZG9lc24ndFxuICogICAgICBtYXRjaCBhbnkgdmFyaWFudCwgdGhlIGJhZCBpdGVtIGJlY29tZXMgYG51bGxgIGluc3RlYWQgb2ZcbiAqICAgICAgdGFraW5nIGRvd24gdGhlIGVudGlyZSBjaGFydCB3aXRoIGFcbiAqICAgICAgYFN0cnVjdHVyZWQgb3V0cHV0IHZhbGlkYXRpb24gZmFpbGVkYCBlcnJvci5cbiAqL1xuY29uc3QgY2hhcnREYXRhUG9pbnRTY2hlbWEgPSB6XG4gIC5wcmVwcm9jZXNzKFxuICAgICh2KSA9PiB7XG4gICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHYpID8gdiA6IG51bGw7XG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdC50b051bWJlcih2KSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgLy8gU2NhdHRlciBgW3gsIHldYCBvciBoZWF0bWFwIGBbeEluZGV4LCB5SW5kZXgsIHZhbHVlXWAuIENvZXJjZVxuICAgICAgLy8gc3RyaW5naWZpZWQgY29tcG9uZW50czsgcmVqZWN0IGlmIGFueSBjb21wb25lbnQgaXMgbm9uLWZpbml0ZS5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpICYmICh2Lmxlbmd0aCA9PT0gMiB8fCB2Lmxlbmd0aCA9PT0gMykpIHtcbiAgICAgICAgY29uc3QgbnVtcyA9IHYubWFwKChjKSA9PiBvYmplY3QudG9OdW1iZXIoYykpO1xuICAgICAgICByZXR1cm4gbnVtcy5ldmVyeSgobikgPT4gbiAhPT0gdW5kZWZpbmVkKSA/IG51bXMgOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgXCJ2YWx1ZVwiIGluIHYpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdiBhcyB7IG5hbWU/OiB1bmtub3duOyB2YWx1ZTogdW5rbm93biB9O1xuICAgICAgICBjb25zdCB2YWwgPSBvYmplY3QudG9OdW1iZXIob2JqLnZhbHVlKTtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gQ29lcmNlIG51bWVyaWMgLyBib29sZWFuIC8gbnVsbGlzaCBuYW1lcyB0byBzdHJpbmdzIHNvIGFcbiAgICAgICAgLy8gcGllIHNsaWNlIGtleWVkIG9uIGEgeWVhciAoYDIwMjRgKSBvciBjYXRlZ29yeSBpZCBpc1xuICAgICAgICAvLyBhY2NlcHRlZCB3aXRob3V0IHJvdW5kLXRyaXBwaW5nIHRocm91Z2ggdGhlIGNhdGNoIGFybS5cbiAgICAgICAgY29uc3QgcmF3TmFtZSA9IG9iai5uYW1lO1xuICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mIHJhd05hbWUgPT09IFwic3RyaW5nXCIgPyByYXdOYW1lIDogcmF3TmFtZSA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhyYXdOYW1lKTtcbiAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWU6IHZhbCB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB6LnVuaW9uKFtcbiAgICAgIHoubnVtYmVyKCksXG4gICAgICB6Lm51bGwoKSxcbiAgICAgIC8vIGBbeCwgeV1gIHNjYXR0ZXIgb3IgYFt4LCB5LCB2YWx1ZV1gIGhlYXRtYXAgY2VsbC4gTW9kZWxsZWQgYXMgYVxuICAgICAgLy8gbGVuZ3RoLWNvbnN0cmFpbmVkIGhvbW9nZW5lb3VzIGFycmF5IHJhdGhlciB0aGFuIGB6LnR1cGxlYDpcbiAgICAgIC8vIFpvZCBlbWl0cyBhIHR1cGxlIGFzIEpTT04gU2NoZW1hIDIwMjAtMTIgYHByZWZpeEl0ZW1zYCwgYW5kXG4gICAgICAvLyBEYXRhYnJpY2tzJyBHZW1pbmkgZW5kcG9pbnRzIHJlamVjdCBhIGByZXNwb25zZV9qc29uX3NjaGVtYWBcbiAgICAgIC8vIGNvbnRhaW5pbmcgaXQgKFwibXVzdCBiZSBhIGJvb2xlYW4gb3IgYW4gb2JqZWN0XCIsIHNpbmNlXG4gICAgICAvLyBgaXRlbXNgIGlzIGFic2VudCkuIGBtaW5JdGVtc2AgLyBgbWF4SXRlbXNgICsgYGl0ZW1zYCBpcyB3aGF0XG4gICAgICAvLyBldmVyeSBwcm92aWRlciB1bmRlcnN0YW5kcy5cbiAgICAgIHouYXJyYXkoei5udW1iZXIoKSkubWluKDIpLm1heCgzKSxcbiAgICAgIHoub2JqZWN0KHsgbmFtZTogei5zdHJpbmcoKSwgdmFsdWU6IHoubnVtYmVyKCkgfSksXG4gICAgXSksXG4gIClcbiAgLmNhdGNoKG51bGwpO1xuXG4vKiogUGVyLXNlcmllcyBtYXJrIHR5cGUgdXNlZCBieSBgY29tYm9gIGNoYXJ0cyAoYmFyICsgbGluZSBvdmVybGF5KS4gKi9cbmNvbnN0IHNlcmllc01hcmtUeXBlU2NoZW1hID0gelxuICAudW5pb24oW3oubGl0ZXJhbChcImJhclwiKSwgei5saXRlcmFsKFwibGluZVwiKSwgei5saXRlcmFsKFwiYXJlYVwiKV0pXG4gIC5kZXNjcmliZShcbiAgICBcIk1hcmsgdHlwZSBmb3IgdGhpcyBzZXJpZXMuIFJlcXVpcmVkIGZvciBgY29tYm9gIChtaXggYmFyIGFuZCBsaW5lL2FyZWEpOyB1c2UgbnVsbCBmb3Igb3RoZXIgY2hhcnQgdHlwZXMuXCIsXG4gICk7XG5cbi8qKlxuICogQ29tcGFjdCwgbW9kZWwtZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gb2YgYW4gRWNoYXJ0cyBzcGVjLiBUaGVcbiAqIHBsYW5uZXIgYWdlbnQgZW1pdHMgdGhpczsge0BsaW5rIHBsYW5Ub0VjaGFydHNPcHRpb259IGV4cGFuZHMgaXRcbiAqIGludG8gYSByZWFsIGBFQ2hhcnRzT3B0aW9uYCBKU09OLiBUd28gbGF5ZXJzIGJlY2F1c2UgbGV0dGluZyB0aGVcbiAqIG1vZGVsIGZpbGwgaW4gYSBmdWxseS10eXBlZCBgRUNoYXJ0c09wdGlvbmAgaXMgYnJpdHRsZSAoaHVuZHJlZHNcbiAqIG9mIG9wdGlvbmFsIGZpZWxkcywgZGVlcCB1bmlvbnMsIHZlcnNpb24tZGVwZW5kZW50IHNoYXBlcykuIEFcbiAqIHNtYWxsIFwiY2hhcnQgcGxhblwiIHNjaGVtYSBpcyBtdWNoIG1vcmUgcmVsaWFibGUgZm9yIGEgZmFzdCBtb2RlbFxuICogYW5kIGtlZXBzIGFuaW1hdGlvbiAvIHRvb2x0aXAgLyBzdHlsaW5nIGRlZmF1bHRzIGNvbnNpc3RlbnRcbiAqIGFjcm9zcyBjaGFydHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGFydFBsYW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0VHlwZTogd2lyZS5DaGFydFR5cGVTY2hlbWEsXG4gIHRpdGxlOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm51bGxhYmxlKClcbiAgICAuZGVmYXVsdChudWxsKVxuICAgIC5kZXNjcmliZShcbiAgICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBTaG9ydCB0aXRsZSBzaG93biBhYm92ZSB0aGUgY2hhcnQuIFVzZSBudWxsIHRvIGZhbGwgYmFjayB0byB0aGVcbiAgICAgICAgXFxgdGl0bGVcXGAgYXJndW1lbnQgdGhlIGNhbGxlciBwYXNzZWQgaW4uXG4gICAgICBgKSxcbiAgICApLFxuICB4QXhpc0xhYmVsOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm51bGxhYmxlKClcbiAgICAuZGVmYXVsdChudWxsKVxuICAgIC5kZXNjcmliZShcbiAgICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBBeGlzIGxhYmVsIGZvciB0aGUgcHJpbWFyeSAodXN1YWxseSBib3R0b20gLyB2YWx1ZSkgYXhpcy5cbiAgICAgICAgVXNlZCBmb3IgYmFyIC8gaG9yaXpvbnRhbEJhciAvIGxpbmUgLyBhcmVhIC8gY29tYm8gLyB3YXRlcmZhbGxcbiAgICAgICAgLyBzY2F0dGVyIC8gaGVhdG1hcDsgdXNlIG51bGwgZm9yIHBpZSAvIGZ1bm5lbCAvIHRyZWVtYXAgLyByYWRhci5cbiAgICAgIGApLFxuICAgICksXG4gIHlBeGlzTGFiZWw6IHpcbiAgICAuc3RyaW5nKClcbiAgICAubnVsbGFibGUoKVxuICAgIC5kZWZhdWx0KG51bGwpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIEF4aXMgbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgKHVzdWFsbHkgbGVmdCkgYXhpcy4gVXNlZCBmb3JcbiAgICAgICAgYmFyIC8gaG9yaXpvbnRhbEJhciAvIGxpbmUgLyBhcmVhIC8gY29tYm8gLyB3YXRlcmZhbGwgL1xuICAgICAgICBzY2F0dGVyIC8gaGVhdG1hcDsgdXNlIG51bGwgZm9yIHBpZSAvIGZ1bm5lbCAvIHRyZWVtYXAgLyByYWRhci5cbiAgICAgIGApLFxuICAgICksXG4gIGNhdGVnb3JpZXM6IHpcbiAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAubnVsbGFibGUoKVxuICAgIC5kZWZhdWx0KG51bGwpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIFByaW1hcnkgY2F0ZWdvcnkgbGFiZWxzLiBGb3IgXFxgYmFyXFxgIC8gXFxgaG9yaXpvbnRhbEJhclxcYCAvXG4gICAgICAgIFxcYGxpbmVcXGAgLyBcXGBhcmVhXFxgIC8gXFxgY29tYm9cXGAgLyBcXGB3YXRlcmZhbGxcXGA6IG9uZSBsYWJlbCBwZXJcbiAgICAgICAgZGF0YSBwb2ludC4gRm9yIFxcYGhlYXRtYXBcXGA6IHgtYXhpcyBjYXRlZ29yaWVzLiBGb3IgXFxgcmFkYXJcXGA6XG4gICAgICAgIGluZGljYXRvciBuYW1lcy4gVXNlIG51bGwgZm9yIFxcYHNjYXR0ZXJcXGAgKFxcYFt4LCB5XVxcYCB0dXBsZXMpIGFuZFxuICAgICAgICBzbGljZSBjaGFydHMgKFxcYHBpZVxcYCAvIFxcYGZ1bm5lbFxcYCAvIFxcYHRyZWVtYXBcXGAsIGVhY2ggc2xpY2VcbiAgICAgICAgY2FycmllcyBpdHMgb3duIFxcYG5hbWVcXGApLlxuICAgICAgYCksXG4gICAgKSxcbiAgeUNhdGVnb3JpZXM6IHpcbiAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAubnVsbGFibGUoKVxuICAgIC5kZWZhdWx0KG51bGwpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIFktYXhpcyAocm93KSBsYWJlbHMgZm9yIFxcYGhlYXRtYXBcXGAuIFVzZSBudWxsIHdoZW4gdGhlXG4gICAgICAgIHJvdyBsYWJlbHMgY29tZSBmcm9tIHRoZSBzZXJpZXMgbmFtZXMsIHdoaWNoIGlzIHRoZSBwcmVmZXJyZWRcbiAgICAgICAgd2F5IHRvIGJ1aWxkIGEgaGVhdG1hcC4gVXNlIG51bGwgZm9yIGV2ZXJ5IG90aGVyIGNoYXJ0IHR5cGUuXG4gICAgICBgKSxcbiAgICApLFxuICBzZXJpZXM6IHpcbiAgICAuYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXG4gICAgICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgICAgICBMZWdlbmQgbmFtZSBmb3IgdGhpcyBzZXJpZXMuXG4gICAgICAgICAgYCksXG4gICAgICAgICksXG4gICAgICAgIHR5cGU6IHNlcmllc01hcmtUeXBlU2NoZW1hLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgICAgICAgeUF4aXNJbmRleDogelxuICAgICAgICAgIC51bmlvbihbei5saXRlcmFsKDApLCB6LmxpdGVyYWwoMSldKVxuICAgICAgICAgIC5udWxsYWJsZSgpXG4gICAgICAgICAgLmRlZmF1bHQobnVsbClcbiAgICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgICBcIldoaWNoIHktYXhpcyB0byBiaW5kICgwID0gbGVmdCwgMSA9IHJpZ2h0KS4gVXNlIG9uIGBjb21ib2Agd2hlbiBzZXJpZXMgaGF2ZSBkaWZmZXJlbnQgdW5pdHMgb3Igc2NhbGVzOyB1c2UgbnVsbCBvdGhlcndpc2UuXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgZGF0YTogei5hcnJheShjaGFydERhdGFQb2ludFNjaGVtYSkuZGVzY3JpYmUoXG4gICAgICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgICAgICBEYXRhIHBvaW50cy4gRm9yIGNhdGVnb3J5IGNoYXJ0cyAoXFxgYmFyXFxgIC8gXFxgaG9yaXpvbnRhbEJhclxcYFxuICAgICAgICAgICAgLyBcXGBsaW5lXFxgIC8gXFxgYXJlYVxcYCAvIFxcYGNvbWJvXFxgIC8gXFxgd2F0ZXJmYWxsXFxgIC8gXFxgcmFkYXJcXGApLFxuICAgICAgICAgICAgYW4gYXJyYXkgb2YgbnVtYmVycyBhbGlnbmVkIHRvIFxcYGNhdGVnb3JpZXNcXGA7IGZvclxuICAgICAgICAgICAgXFxgd2F0ZXJmYWxsXFxgIHRob3NlIG51bWJlcnMgYXJlIHNpZ25lZCBkZWx0YXMgKG9uZSBzZXJpZXNcbiAgICAgICAgICAgIG9ubHkgLSBuZXZlciBhIGN1bXVsYXRpdmUgYmFzZSBzZXJpZXMpLiBGb3IgXFxgaGVhdG1hcFxcYCxcbiAgICAgICAgICAgIG9uZSBzZXJpZXMgcGVyIG1hdHJpeCByb3csIGhvbGRpbmcgdGhhdCByb3cncyBudW1iZXJzXG4gICAgICAgICAgICBhbGlnbmVkIHRvIFxcYGNhdGVnb3JpZXNcXGAuIEZvciBcXGBzY2F0dGVyXFxgLCBhbiBhcnJheSBvZlxuICAgICAgICAgICAgXFxgW3gsIHldXFxgIG51bWVyaWMgdHVwbGVzLiBGb3IgXFxgcGllXFxgIC8gXFxgZnVubmVsXFxgIC9cbiAgICAgICAgICAgIFxcYHRyZWVtYXBcXGAsIGFuIGFycmF5IG9mIFxcYHtuYW1lLCB2YWx1ZX1cXGAgb2JqZWN0cy5cbiAgICAgICAgICBgKSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAuZGVzY3JpYmUoXG4gICAgICBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgICAgICAgT25lIG9yIG1vcmUgc2VyaWVzIHRvIHBsb3QuIFJlcXVpcmVkIGZvciBldmVyeSBjaGFydCB0eXBlXG4gICAgICAgIGV4Y2VwdCBcXGBjdXN0b21cXGAsIHdoaWNoIGNhcnJpZXMgaXRzIHNlcmllcyBpbnNpZGUgXFxgb3B0aW9uXFxgLlxuICAgICAgICBTbGljZSBjaGFydHMgKFxcYHBpZVxcYCAvIFxcYGZ1bm5lbFxcYCAvIFxcYHRyZWVtYXBcXGApIGFuZFxuICAgICAgICBcXGB3YXRlcmZhbGxcXGAgLyBcXGBoZWF0bWFwXFxgIHVzZSBleGFjdGx5IG9uZSBzZXJpZXM7IFxcYGJhclxcYCAvXG4gICAgICAgIFxcYGxpbmVcXGAgLyBcXGBhcmVhXFxgIC8gXFxgY29tYm9cXGAgLyBcXGByYWRhclxcYCAvIFxcYHNjYXR0ZXJcXGAgY2FuXG4gICAgICAgIGNhcnJ5IG11bHRpcGxlIHNlcmllcy5cbiAgICAgIGApLFxuICAgICksXG4gIG9wdGlvbjogelxuICAgIC5zdHJpbmcoKVxuICAgIC5udWxsYWJsZSgpXG4gICAgLmRlZmF1bHQobnVsbClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKGBcbiAgICAgICAgUmVxdWlyZWQgZm9yIFxcYGN1c3RvbVxcYDsgdXNlIG51bGwgZm9yIGV2ZXJ5IG90aGVyIGNoYXJ0IHR5cGUuIEFcbiAgICAgICAgQ09NUExFVEUgRWNoYXJ0cyBvcHRpb24sIGFzIGEgSlNPTiBvYmplY3QgZW5jb2RlZCBpbiBhIHN0cmluZzpcbiAgICAgICAgXFxgc2VyaWVzXFxgIChlYWNoIHdpdGggaXRzIG93biBcXGB0eXBlXFxgIGFuZCB0aGF0IHNlcmllcycgb3duIGRhdGFcbiAgICAgICAgc2hhcGUpIHBsdXMgd2hhdGV2ZXIgZWxzZSB0aGUgY2hhcnQgbmVlZHMgLSBhIGNvb3JkaW5hdGUgc3lzdGVtLFxuICAgICAgICBcXGB2aXN1YWxNYXBcXGAsIGF4ZXMuIFBsYWluIEpTT04gdmFsdWVzIG9ubHksIG5ldmVyIGEgSmF2YVNjcmlwdFxuICAgICAgICBmdW5jdGlvbi4gQSBjZW50ZXJlZCB0aXRsZSBpcyBmaWxsZWQgaW4gd2hlbiB0aGUgb2JqZWN0IG9taXRzXG4gICAgICAgIG9uZS5cbiAgICAgIGApLFxuICAgICksXG59KTtcblxudHlwZSBDaGFydFBsYW4gPSB6LmluZmVyPHR5cGVvZiBjaGFydFBsYW5TY2hlbWE+O1xudHlwZSBDaGFydFBsYW5JbnB1dCA9IHouaW5wdXQ8dHlwZW9mIGNoYXJ0UGxhblNjaGVtYT47XG5cbi8qKlxuICogQ2Fub25pY2FsIHBsYW5uZXIgaW5wdXQgc2hhcGUuIFRvb2xzIHRoYXQgc291cmNlIHJvd3MgZnJvbSBhblxuICogaW5saW5lIGRhdGFzZXQgKGByZW5kZXJfZGF0YWApIHVzZSBpdCBhcyB0aGVpciBgaW5wdXRTY2hlbWFgXG4gKiB2ZXJiYXRpbTsgdG9vbHMgdGhhdCByZXNvbHZlIHJvd3MgZnJvbSBhIHJlbW90ZSAoYHByZXBhcmVfY2hhcnRgXG4gKiBvdmVyIGEgR2VuaWUgc3RhdGVtZW50KSBgb21pdCh7IGRhdGEgfSlgIGFuZCBgZXh0ZW5kYCB3aXRoIHRoZWlyXG4gKiBvd24gaWRlbnRpZmllciBmaWVsZCwgc28gdGhlIGZpZWxkLWxldmVsIGAuZGVzY3JpYmUoKWAgdGV4dFxuICogc3RheXMgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoLiBTZXJ2ZXItb25seSAtIHRoZSBVSSBuZXZlclxuICogc2VlcyBhIHBsYW5uZXIgcmVxdWVzdCwgb25seSB0aGUgcmVzb2x2ZWQge0BsaW5rIENoYXJ0fS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoYXJ0UGxhbm5lclJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFxuICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBDb25jaXNlIHRpdGxlIHNob3duIGFib3ZlIHRoZSBjaGFydCAoZS5nLiBcIlRvcCAxMCBTS1VzIGJ5IFJldmVudWVcIikuXG4gICAgICBgKSxcbiAgKSxcbiAgZGVzY3JpcHRpb246IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oYFxuICAgICAgICBPbmUtbGluZSBpbnRlbnQgdGhlIGNoYXJ0LXBsYW5uZXIgdXNlcyB3aGVuIHBpY2tpbmcgYSBjaGFydCB0eXBlXG4gICAgICAgIGFuZCBheGlzIGVuY29kaW5ncyAoZS5nLiBcImNvbXBhcmUgcXVhcnRlcmx5IHJldmVudWUgYWNyb3NzXG4gICAgICAgIHJlZ2lvbnNcIiwgXCJoaWdobGlnaHQgdGhlIHN0ZWVwIGRyb3AgYWZ0ZXIgcG9zaXRpb24gNVwiKS4gTm90IHNob3duXG4gICAgICAgIHRvIHRoZSB1c2VyLlxuICAgICAgYCksXG4gICAgKSxcbiAgZGF0YTogelxuICAgIC5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpXG4gICAgLm5vbmVtcHR5KFwiRGF0YSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHJvd1wiKVxuICAgIC5yZWFkb25seSgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gICAgICAgIFRhYnVsYXIgZGF0YXNldCB0byBjaGFydC4gT25lIG9iamVjdCBwZXIgcm93LCBrZXllZCBieSBjb2x1bW5cbiAgICAgICAgbmFtZS4gVmFsdWVzIG1heSBiZSBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucywgb3IgbnVsbC4gVGhlXG4gICAgICAgIGNoYXJ0LXBsYW5uZXIgZGVjaWRlcyB3aGljaCBjb2x1bW5zIGFyZSBjYXRlZ29yaWVzIHZzLiBudW1lcmljXG4gICAgICAgIHNlcmllcy4gQ2FwIGF0IGEgZmV3IGh1bmRyZWQgcm93cyBmb3IgbGVnaWJpbGl0eTsgc2FtcGxlIC9cbiAgICAgICAgYWdncmVnYXRlIGxhcmdlciBkYXRhc2V0cyBmaXJzdC5cbiAgICAgIGApLFxuICAgICksXG59KTtcblxuLyoqIFZhbGlkYXRlZCB0aXRsZSwgZGVzY3JpcHRpb24sIGFuZCB0YWJ1bGFyIHJvd3MgcGFzc2VkIHRvIHRoZSBjaGFydC1wbGFubmluZyBtb2RlbC4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0UGxhbm5lclJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBjaGFydFBsYW5uZXJSZXF1ZXN0U2NoZW1hPjtcblxuLyoqXG4gKiBBZ2VudC1mYWNpbmcgcmVzdWx0IG9mIGVpdGhlciBjaGFydC1wcm9kdWNpbmcgdG9vbC5cbiAqXG4gKiBgbWFya2VyYCBpcyBkZWxpYmVyYXRlbHkgcmVkdW5kYW50IHdpdGggYGNoYXJ0SWRgOiB0aGUgaG9zdCBzdGlsbCBrZXlzIHRoZVxuICogY2FjaGUgYnkgaWQsIHdoaWxlIHRoZSBtb2RlbCBnZXRzIHRoZSBleGFjdCBvcGFxdWUgdG9rZW4gdG8gY29weSBpbnRvIHByb3NlXG4gKiBhbmQgaGFzIG5vIHJlYXNvbiB0byBpbnZlbnQgb3IgcmV0eXBlIGEgVVVJRC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNoYXJ0VG9vbE91dHB1dFNjaGVtYSA9IHdpcmUuQ2hhcnRTY2hlbWEucGljayh7IGNoYXJ0SWQ6IHRydWUgfSkuZXh0ZW5kKHtcbiAgbWFya2VyOiB6XG4gICAgLnN0cmluZygpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJFeGFjdCBlbWJlZCBtYXJrZXIuIENvcHkgdGhpcyBjb21wbGV0ZSB2YWx1ZSB2ZXJiYXRpbSBvbnRvIGl0cyBvd24gbGluZTsgbmV2ZXIgY29uc3RydWN0IGEgbWFya2VyIGZyb20gY2hhcnRJZC5cIixcbiAgICApLFxufSk7XG5cbi8qKiBSZXN1bHQgcmV0dXJuZWQgc3luY2hyb25vdXNseSB3aGlsZSBjaGFydCBwbGFubmluZyBjb250aW51ZXMgaW4gdGhlIGJhY2tncm91bmQuICovXG5leHBvcnQgdHlwZSBDaGFydFRvb2xPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBjaGFydFRvb2xPdXRwdXRTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGxhbm5lciBpbnN0cnVjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogRm9ybWF0IHtAbGluayB3aXJlLkNoYXJ0VHlwZVNjaGVtYX0ncyB2YXJpYW50cyBhcyBhIHNpbmdsZVxuICogaHVtYW4tZnJpZW5kbHkgc3RyaW5nIG9mIGBgIGA8dmFsdWU+YCBmb3IgPGRlc2NyaXB0aW9uPiBgYFxuICogY2xhdXNlcyBqb2luZWQgYnkgc2VtaWNvbG9ucywgZHJhd24gZnJvbSBlYWNoIHZhcmlhbnQncyBvd25cbiAqIGAuZGVzY3JpYmUoKWAgc28gdGhlIHBsYW5uZXIgcHJvbXB0IHN0YXlzIGluIGxvY2stc3RlcCB3aXRoXG4gKiB0aGUgc2NoZW1hIGJ5IGNvbnN0cnVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0Q2hhcnRUeXBlUGlja2VyKCk6IHN0cmluZyB7XG4gIHJldHVybiB3aXJlLkNoYXJ0VHlwZVNjaGVtYS5vcHRpb25zXG4gICAgLm1hcCgob3B0KSA9PiBgXFxgJHtvcHQudmFsdWV9XFxgIGZvciAke29wdC5kZXNjcmlwdGlvbiA/PyBcIlwifWApXG4gICAgLmpvaW4oXCI7IFwiKTtcbn1cblxuLyoqXG4gKiBTeXN0ZW0gcHJvbXB0IGZvciB0aGUgaW5uZXIgY2hhcnQtcGxhbm5pbmcgYWdlbnQuIFR1bmVkIGZvciBhXG4gKiBmYXN0LXRpZXIgbW9kZWwgKEhhaWt1LCBHUFQtNS1taW5pLCBHZW1pbmkgRmxhc2ggTGl0ZSkuXG4gKi9cbmNvbnN0IENIQVJUX1BMQU5ORVJfSU5TVFJVQ1RJT05TID0gc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gIFlvdSBkZXNpZ24gQXBhY2hlIEVjaGFydHMgdmlzdWFsaXphdGlvbnMuIFRoZSB1c2VyIGdpdmVzIHlvdSBhXG4gIHRhYnVsYXIgZGF0YXNldCAocm93cyBvZiBvYmplY3RzKSBwbHVzIGEgdGl0bGUgYW5kIGFuIG9wdGlvbmFsXG4gIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnRlbnQuIFlvdSBwcm9kdWNlIGEgc21hbGwgY2hhcnQgcGxhbiAoY2hhcnRcbiAgdHlwZSwgYXhpcyBsYWJlbHMsIGNhdGVnb3JpZXMsIHNlcmllcykgdGhhdCBiZXN0IGNvbnZleXMgdGhlIGRhdGEuXG5cbiAgRGVjaXNpb24gZ3VpZGUuIFBpY2sgdGhlIGNoYXJ0IHR5cGUgd2hvc2UgZGF0YSBzaGFwZSBtYXRjaGVzIHRoZVxuICBkYXRhc2V0IGFuZCB0aGUgdXNlcidzIGludGVudDogJHtmb3JtYXRDaGFydFR5cGVQaWNrZXIoKX0uXG5cbiAgV2hlbiBpbiBkb3VidCBiZXR3ZWVuIGJhciBhbmQgbGluZSwgcHJlZmVyIGJhciBmb3IgdW5vcmRlcmVkXG4gIGNhdGVnb3JpZXMgYW5kIGxpbmUgZm9yIG9yZGVyZWQgb25lcyAoZGF0ZXMsIHRpbWUgYnVja2V0cywgcmFua3MpLlxuICBQcmVmZXIgXFxgaG9yaXpvbnRhbEJhclxcYCB3aGVuIGNhdGVnb3J5IGxhYmVscyBhcmUgbG9uZy4gUHJlZmVyXG4gIFxcYGNvbWJvXFxgIHdoZW4gb25lIG1lYXN1cmUgaXMgYSBjb3VudC92b2x1bWUgYW5kIGFub3RoZXIgaXMgYVxuICByYXRlL3RyZW5kLiBQcmVmZXIgXFxgd2F0ZXJmYWxsXFxgIGZvciBicmlkZ2VzIG9mIHNpZ25lZCBkZWx0YXMuXG4gIFByZWZlciBcXGBzY2F0dGVyXFxgIHdoZW4gY29ycmVsYXRpbmcgdHdvIG51bWVyaWMgZmllbGRzIChub1xuICBjYXRlZ29yeSBheGlzKS4gUHJlZmVyIFxcYGhlYXRtYXBcXGAgZm9yIGEgY2F0ZWdvcnkgeCBjYXRlZ29yeVxuICBtYXRyaXguIFByZWZlciBcXGByYWRhclxcYCBmb3Igc2NvcmluZyB0aGUgc2FtZSBlbnRpdGllcyBhY3Jvc3MgYVxuICBmaXhlZCBzZXQgb2YgZGltZW5zaW9ucy4gTmV2ZXIgcGljayBwaWUgZm9yIG1vcmUgdGhhbiA3IHNsaWNlc1xuICAodXNlIFxcYHRyZWVtYXBcXGAgaW5zdGVhZCkuIFByZWZlciBcXGBmdW5uZWxcXGAgZm9yIG9yZGVyZWQgY29udmVyc2lvblxuICBzdGFnZXMuXG5cbiAgRm9yIGJhciAvIGhvcml6b250YWxCYXIgLyBsaW5lIC8gYXJlYSAvIGNvbWJvIC8gd2F0ZXJmYWxsOiBwaWNrIG9uZVxuICBjb2x1bW4gYXMgdGhlIGNhdGVnb3J5IGF4aXMgKHVzdWFsbHkgdGhlIG9ubHkgc3RyaW5nLXZhbHVlZCBjb2x1bW4pXG4gIGFuZCBvbmUgb3IgbW9yZSBudW1lcmljIGNvbHVtbnMgYXMgc2VyaWVzLiBTb3J0IGNhdGVnb3JpZXMgYnkgdGhlXG4gIHByaW1hcnkgc2VyaWVzIHZhbHVlIGRlc2NlbmRpbmcgdW5sZXNzIHRoZSBkYXRhIGlzIG5hdHVyYWxseSBvcmRlcmVkXG4gIChkYXRlcywgcmFua3MsIGZ1bm5lbCBzdGFnZXMsIHdhdGVyZmFsbCBzdGVwcykuIEZvciBcXGBjb21ib1xcYCwgc2V0XG4gIGVhY2ggc2VyaWVzJyBcXGB0eXBlXFxgIHRvIFxcYGJhclxcYCwgXFxgbGluZVxcYCwgb3IgXFxgYXJlYVxcYCwgYW5kIHVzZVxuICBcXGB5QXhpc0luZGV4OiAxXFxgIHdoZW4gYSBzZXJpZXMgbmVlZHMgYSBzZWNvbmQgc2NhbGUuXG5cbiAgRm9yIHdhdGVyZmFsbCwgZW1pdCBleGFjdGx5IE9ORSBzZXJpZXMgaG9sZGluZyB0aGUgc2lnbmVkIHN0ZXAgdmFsdWVzXG4gIChkZWx0YXMpLCBvbmUgcGVyIGNhdGVnb3J5LCBpbiBvcmRlciAtIHBvc2l0aXZlIGZvciBhIHJpc2UsIG5lZ2F0aXZlXG4gIGZvciBhIGRyb3AuIERvIE5PVCBhZGQgYSBjdW11bGF0aXZlIC8gcnVubmluZy10b3RhbCAvIGJhc2Ugc2VyaWVzIGFuZFxuICBkbyBOT1QgY29udmVydCB0aGUgZGVsdGFzIGludG8gcnVubmluZyB0b3RhbHMgeW91cnNlbGY7IHRoZSBydW5uaW5nXG4gIHRvdGFsIGlzIGNvbXB1dGVkIGZvciB5b3UsIGFuZCBhIGhhbmQtYnVpbHQgYmFzZSBzZXJpZXMgcmVuZGVycyBhcyBhXG4gIHBsYWluIGJhciBjaGFydCBpbnN0ZWFkIG9mIGEgYnJpZGdlLlxuXG4gIEZvciBwaWUgLyBmdW5uZWwgLyB0cmVlbWFwOiBwaWNrIHRoZSBjYXRlZ29yeSBjb2x1bW4gZm9yIHNsaWNlIG5hbWVzXG4gIGFuZCBvbmUgbnVtZXJpYyBjb2x1bW4gZm9yIHNsaWNlIHZhbHVlcy4gRW1pdCBhIHNpbmdsZSBzZXJpZXMgb2ZcbiAgXFxge25hbWUsIHZhbHVlfVxcYCBvYmplY3RzLlxuXG4gIEZvciBzY2F0dGVyOiBwaWNrIHR3byBudW1lcmljIGNvbHVtbnMgYW5kIGVtaXQgXFxgW3gsIHldXFxgIHR1cGxlcyBpblxuICBvbmUgb3IgbW9yZSBzZXJpZXMgKG9uZSBzZXJpZXMgcGVyIGdyb3VwIGlmIGEgZ3JvdXBpbmcgY29sdW1uIGV4aXN0cykuXG5cbiAgRm9yIGhlYXRtYXA6IHBpY2sgdHdvIGNhdGVnb3J5IGNvbHVtbnMgYW5kIG9uZSBudW1lcmljIG1lYXN1cmUuIFB1dFxuICB0aGUgeC1heGlzIGNhdGVnb3JpZXMgaW4gXFxgY2F0ZWdvcmllc1xcYCwgdGhlbiBlbWl0IE9ORSBTRVJJRVMgUEVSIFJPV1xuICBvZiB0aGUgbWF0cml4IC0gdGhlIHNlcmllcyBcXGBuYW1lXFxgIGlzIHRoZSByb3cgbGFiZWwgYW5kIFxcYGRhdGFcXGAgaXNcbiAgdGhlIHJvdydzIG51bWJlcnMsIG9uZSBwZXIgZW50cnkgaW4gXFxgY2F0ZWdvcmllc1xcYCwgaW4gdGhlIHNhbWUgb3JkZXIuXG4gIERvIG5vdCBjb21wdXRlIGNlbGwgaW5kaWNlcy5cblxuICBGb3IgcmFkYXI6IFxcYGNhdGVnb3JpZXNcXGAgYXJlIHRoZSBpbmRpY2F0b3IgbmFtZXM7IGVhY2ggc2VyaWVzIGlzIGFuXG4gIGFycmF5IG9mIG51bWJlcnMgKG9uZSB2YWx1ZSBwZXIgaW5kaWNhdG9yKS5cblxuICBGb3IgYW55dGhpbmcgdGhlIHR5cGVzIGFib3ZlIGNhbm5vdCBleHByZXNzIC0gYSBzYW5rZXksIGJveHBsb3QsXG4gIGNhbmRsZXN0aWNrLCBzdW5idXJzdCwgZ2F1Z2UsIG5ldHdvcmsgZ3JhcGgsIGNhbGVuZGFyLCBwYXJhbGxlbC1cbiAgY29vcmRpbmF0ZXMgcGxvdCwgb3IgYW55IG90aGVyIEVjaGFydHMgc2VyaWVzIC0gdXNlIFxcYGN1c3RvbVxcYCBhbmRcbiAgaGFuZC13cml0ZSB0aGUgd2hvbGUgRWNoYXJ0cyBvcHRpb24gaW50byBcXGBvcHRpb25cXGAgYXMgYSBKU09OIHN0cmluZy5cbiAgSW5jbHVkZSBldmVyeSBwYXJ0IHRoYXQgY2hhcnQgbmVlZHM6IHRoZSBzZXJpZXMgd2l0aCB0aGVpciBvd25cbiAgXFxgdHlwZVxcYCBhbmQgZGF0YSBzaGFwZSwgcGx1cyBhbnkgY29vcmRpbmF0ZSBzeXN0ZW0sIFxcYHZpc3VhbE1hcFxcYCxcbiAgb3IgYXhlcy4gTGVhdmUgXFxgc2VyaWVzXFxgLCBcXGBjYXRlZ29yaWVzXFxgLCBhbmQgdGhlIGF4aXMgbGFiZWxzIG91dDtcbiAgdGhleSBhcmUgaWdub3JlZCBmb3IgXFxgY3VzdG9tXFxgLiBQcmVmZXIgYSBsaXN0ZWQgdHlwZSB3aGVuZXZlciBvbmVcbiAgZ2VudWluZWx5IGZpdHMgLSBcXGBjdXN0b21cXGAgZ2l2ZXMgdXAgdGhlIHNoYXJlZCB0b29sdGlwLCBsZWdlbmQsIGFuZFxuICBncmlkIGRlZmF1bHRzLCBzbyBpdCBpcyB0aGUgYW5zd2VyIGZvciBhbiB1bnN1cHBvcnRlZCBjaGFydCBzaGFwZSxcbiAgbm90IGEgd2F5IHRvIHJlc3R5bGUgYSBzdXBwb3J0ZWQgb25lLlxuXG4gIEtlZXAgc2VyaWVzIG5hbWVzIGh1bWFuLXJlYWRhYmxlICh1c2UgdGhlIGNvbHVtbiBuYW1lOyB0aXRsZSBjYXNlIGl0XG4gIGxpZ2h0bHkgaWYgbmVlZGVkKS4gS2VlcCB0aXRsZXMgY29uY2lzZTsgZG8gbm90IHJlcGVhdCB0aGUgdXNlcidzXG4gIHRpdGxlIGluIHhBeGlzTGFiZWwgLyB5QXhpc0xhYmVsLlxuYCk7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBsYW5uZXIgYWdlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBPbmUgcGxhbm5lciBgQWdlbnRgIHBlciBwbHVnaW4gY29uZmlnLiBDYWNoZWQgb24gY29uZmlnIG9iamVjdFxuICogaWRlbnRpdHkgc28gY2FsbGVycyBjYW4gYHByZXBhcmVDaGFydCh7IGNvbmZpZywgLi4uIH0pYCBmcm9tIGFcbiAqIGhvdCBwYXRoIHdpdGhvdXQgcGF5aW5nIHRoZSBBZ2VudC1jb25zdHJ1Y3RvciBjb3N0IGV2ZXJ5IGNhbGwuXG4gKiBgV2Vha01hcGAgbGV0cyByZXRpcmVkIGNvbmZpZ3MgKGUuZy4gdGVzdCByZWNvbmZpZ3VyYXRpb25zKVxuICogcmVsZWFzZSB0aGVpciBhZ2VudCB3aXRob3V0IG1hbnVhbCBldmljdGlvbi5cbiAqL1xuY29uc3QgcGxhbm5lckFnZW50cyA9IG5ldyBXZWFrTWFwPE1hc3RyYVBsdWdpbkNvbmZpZywgQWdlbnQ+KCk7XG5cbmZ1bmN0aW9uIGdldFBsYW5uZXJBZ2VudChjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IEFnZW50IHtcbiAgbGV0IGFnZW50ID0gcGxhbm5lckFnZW50cy5nZXQoY29uZmlnKTtcbiAgaWYgKCFhZ2VudCkge1xuICAgIGFnZW50ID0gbmV3IEFnZW50KHtcbiAgICAgIGlkOiBcImNoYXJ0X3BsYW5uZXJcIixcbiAgICAgIG5hbWU6IFwiQ2hhcnQgUGxhbm5lclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUGlja3MgY2hhcnQgdHlwZSBhbmQgYXhpcyBlbmNvZGluZ3MgZm9yIGEgZGF0YXNldC5cIixcbiAgICAgIGluc3RydWN0aW9uczogQ0hBUlRfUExBTk5FUl9JTlNUUlVDVElPTlMsXG4gICAgICBtb2RlbDogKHsgcmVxdWVzdENvbnRleHQgfSkgPT5cbiAgICAgICAgYnVpbGRNb2RlbChjb25maWcsIHJlcXVlc3RDb250ZXh0LCB7IG1vZGVsQ2xhc3M6IG1vZGVsLk1vZGVsQ2xhc3MuQ2hhdEZhc3QgfSksXG4gICAgfSk7XG4gICAgcGxhbm5lckFnZW50cy5zZXQoY29uZmlnLCBhZ2VudCk7XG4gIH1cbiAgcmV0dXJuIGFnZW50O1xufVxuXG4vKipcbiAqIFJ1biB0aGUgcGxhbm5lciBhZ2FpbnN0IGByZXF1ZXN0YCBhbmQgcmV0dXJuIHRoZSByZXNvbHZlZFxuICogRWNoYXJ0cyBzcGVjLiBUaHJvd3Mgb24gcGxhbm5lciBmYWlsdXJlIC0ge0BsaW5rIHByZXBhcmVDaGFydH1cbiAqIGNhdGNoZXMgYW5kIHN0YXNoZXMgdGhlIGVycm9yIGluIHRoZSBjYWNoZSBlbnRyeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuQ2hhcnRQbGFubmVyKFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbiAgcmVxdWVzdDogQ2hhcnRQbGFubmVyUmVxdWVzdCxcbiAgb3B0aW9uczogeyByZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0OyBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7fSxcbik6IFByb21pc2U8Q2hhcnRSZXN1bHQ+IHtcbiAgY29uc3QgeyB0aXRsZSwgZGVzY3JpcHRpb24sIGRhdGEgfSA9IHJlcXVlc3Q7XG4gIGNvbnN0IHsgcmVxdWVzdENvbnRleHQsIGFib3J0U2lnbmFsIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcm9tcHQgPSBzdHJpbmdVdGlscy50b0Rlc2NyaXB0aW9uKHtcbiAgICBUaXRsZTogdGl0bGUsXG4gICAgLi4uKGRlc2NyaXB0aW9uID8geyBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICBcIkRhdGFzZXQgKEpTT04sIG9uZSByb3cgcGVyIG9iamVjdClcIjogSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMiksXG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRQbGFubmVyQWdlbnQoY29uZmlnKS5nZW5lcmF0ZShwcm9tcHQsIHtcbiAgICBzdHJ1Y3R1cmVkT3V0cHV0OiB7IHNjaGVtYTogY2hhcnRQbGFuU2NoZW1hIH0sXG4gICAgLi4uKHJlcXVlc3RDb250ZXh0ID8geyByZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgIC4uLihhYm9ydFNpZ25hbCA/IHsgYWJvcnRTaWduYWwgfSA6IHt9KSxcbiAgfSk7XG4gIGNvbnN0IHBsYW4gPSBjaGFydFBsYW5TY2hlbWEucGFyc2UocmVzdWx0Lm9iamVjdCk7XG4gIGNvbnN0IG9wdGlvbiA9IHBsYW5Ub0VjaGFydHNPcHRpb24ocGxhbiwgdGl0bGUsIGNvbmZpZy5icmFuZCk7XG4gIHJldHVybiB7IGNoYXJ0VHlwZTogcGxhbi5jaGFydFR5cGUsIG9wdGlvbiB9O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2FjaGUgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBCdWlsZCB0aGUgY2Fub25pY2FsIGNhY2hlIGtleSBmb3IgYSBgY2hhcnRJZGAgb3duZWQgYnkgYHVzZXJLZXlgLlxuICpcbiAqIFRoZSBpZGVudGl0eSBpcyBwYXJ0IG9mIHRoZSBrZXksIG5vdCBhIGZpbHRlciBhcHBsaWVkIGFmdGVyIHRoZSByZWFkLCBzbyBhXG4gKiBjaGFydCBpZCBndWVzc2VkIG9yIGNvcGllZCBmcm9tIGFub3RoZXIgdXNlcidzIHRyYW5zY3JpcHQgcmVzb2x2ZXMgdG8gYVxuICogZGlmZmVyZW50IGtleSBhbmQgc2ltcGx5IG1pc3Nlcy4gVGhhdCBtaXNzIGlzIHdoYXQgdGhlIEhUVFAgcm91dGUgdHVybnMgaW50b1xuICogYSA0MDQsIHdoaWNoIGlzIGFsc28gdGhlIGFuc3dlciB0aGF0IGxlYWtzIHRoZSBsZWFzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hhcnRDYWNoZUtleShjaGFydElkOiBzdHJpbmcsIHVzZXJLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgQ2FjaGVNYW5hZ2VyLmdldEluc3RhbmNlKCkpLmdlbmVyYXRlS2V5KFtDSEFSVF9DQUNIRV9OQU1FU1BBQ0UsIGNoYXJ0SWRdLCB1c2VyS2V5KTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGEge0BsaW5rIENoYXJ0fSBlbnRyeSB1bmRlciBpdHMgYGNoYXJ0SWRgLCBvd25lZCBieSBgdXNlcktleWAuXG4gKiBSZWZyZXNoZXMgdGhlIFRUTCBvbiBldmVyeSB3cml0ZS4gQ2FjaGUtbGF5ZXIgZmFpbHVyZXMgYXJlIGxvZ2dlZCBhbmRcbiAqIHN3YWxsb3dlZCBzbyBiYWNrZ3JvdW5kIHJ1bm5lcnMgbmV2ZXIgdGhyb3cgaW50byB0aGVcbiAqIHVuaGFuZGxlZC1yZWplY3Rpb24gc3RyZWFtLlxuICovXG5hc3luYyBmdW5jdGlvbiB3cml0ZUNoYXJ0KGVudHJ5OiBDaGFydCwgdXNlcktleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgY2hhcnRDYWNoZUtleShlbnRyeS5jaGFydElkLCB1c2VyS2V5KTtcbiAgICBhd2FpdCBDYWNoZU1hbmFnZXIuZ2V0SW5zdGFuY2VTeW5jKCkuc2V0KGtleSwgZW50cnksIHtcbiAgICAgIHR0bDogQ0hBUlRfQ0FDSEVfVFRMX1NFQyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJ3cml0ZS1lcnJvclwiLCB7XG4gICAgICBjaGFydElkOiBlbnRyeS5jaGFydElkLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb29rIHVwIGEgY2hhcnQgYHVzZXJLZXlgIG93bnMuIFJldHVybnMgYHVuZGVmaW5lZGAgb24gbWlzcywgb25cbiAqIGV4cGlyeSwgd2hlbiBhbm90aGVyIGlkZW50aXR5IG93bnMgdGhlIGlkLCBvciB3aGVuIHRoZSBjYWNoZSBsYXllciBpc1xuICogdW5oZWFsdGh5IC0gbmV2ZXIgdGhyb3dzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQ2hhcnQoY2hhcnRJZDogc3RyaW5nLCB1c2VyS2V5OiBzdHJpbmcpOiBQcm9taXNlPENoYXJ0IHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgY2hhcnRDYWNoZUtleShjaGFydElkLCB1c2VyS2V5KTtcbiAgICBjb25zdCB2ID0gYXdhaXQgQ2FjaGVNYW5hZ2VyLmdldEluc3RhbmNlU3luYygpLmdldDxDaGFydD4oa2V5KTtcbiAgICByZXR1cm4gdiA/PyB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwicmVhZC1lcnJvclwiLCB7XG4gICAgICBjaGFydElkLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJlcGFyZUNoYXJ0IG9yY2hlc3RyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIElucHV0cyB0byB7QGxpbmsgcHJlcGFyZUNoYXJ0fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZUNoYXJ0T3B0aW9ucyB7XG4gIC8qKiBQbHVnaW4gY29uZmlnOyByZXNvbHZlcyB0aGUgcGxhbm5lciBhZ2VudCdzIG1vZGVsLiAqL1xuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZztcbiAgLyoqXG4gICAqIElkZW50aXR5IHRoYXQgb3ducyB0aGUgbWludGVkIGNoYXJ0LiBPbmx5IGEge0BsaW5rIGZldGNoQ2hhcnR9IGNhbGxcbiAgICogY2FycnlpbmcgdGhlIHNhbWUga2V5IHJlc29sdmVzIGl0LiBVc2Uge0BsaW5rIHJlc29sdmVVc2VyS2V5fS5cbiAgICovXG4gIHVzZXJLZXk6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgdGl0bGUgZm9yd2FyZGVkIHRvIHRoZSBwbGFubmVyIGFnZW50LiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGludGVudCBoaW50IGZvcndhcmRlZCB0byB0aGUgcGxhbm5lciBhZ2VudC4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgcm93cyB0byBjaGFydC4gQ2FsbGVkIG9uY2UsIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKiBBbnkgdGhyb3duIGVycm9yIGxhbmRzIGluIHRoZSBjYWNoZSBhcyB0aGUgZW50cnkncyBgZXJyb3JgXG4gICAqIGZpZWxkIChuZXZlciBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIgb2Yge0BsaW5rIHByZXBhcmVDaGFydH0pLlxuICAgKiBBbiBlbXB0eSBgcm93c2AgYXJyYXkgaXMgcmVqZWN0ZWQgYXMgYFwiZGF0YXNldCBoYXMgbm8gcm93cztcbiAgICogbm90aGluZyB0byBjaGFydFwiYC5cbiAgICovXG4gIHJlc29sdmVEYXRhOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8eyByb3dzOiBSZWFkb25seUFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB9PjtcbiAgLyoqXG4gICAqIFBlci1yZXF1ZXN0IGBSZXF1ZXN0Q29udGV4dGAuIEZvcndhcmRlZCB0byB0aGUgcGxhbm5lciBhZ2VudCBzb1xuICAgKiB1c2VyLXNjb3BlZCBtb2RlbCByZXNvbHV0aW9uIChPQk8pIHN0YXlzIGluIGVmZmVjdC5cbiAgICovXG4gIHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQ7XG4gIC8qKlxuICAgKiBDb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24uIEZvcndhcmRlZCB0byBgcmVzb2x2ZURhdGFgIGFuZCB0aGVcbiAgICogcGxhbm5lciBhZ2VudC4gTm90ZTogdGhlIGNoYXJ0IHRhc2sgY29udGludWVzIHJ1bm5pbmcgaW4gdGhlXG4gICAqIGJhY2tncm91bmQgYWZ0ZXIgdGhlIHBhcmVudCByZXF1ZXN0IGVuZHMsIHNvIGV4dGVybmFsIGFib3J0XG4gICAqIHNpZ25hbHMgYXJlIGJlc3QtZWZmb3J0OyB0eXBpY2FsIHVzZSBpcyB0byBsZWF2ZSB0aGlzIHVuc2V0XG4gICAqIGFuZCBsZXQgdGhlIDFoIFRUTCBjYXAgc3RhbGUgZW50cmllcy5cbiAgICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIE1pbnQgYSBgY2hhcnRJZGAsIGNhY2hlIGFuIGVtcHR5IGB7IGNoYXJ0SWQgfWAgcGxhY2Vob2xkZXJcbiAqIHN5bmNocm9ub3VzbHksIGFuZCBraWNrIG9mZiBhIGJhY2tncm91bmQgdGFzayB0aGF0IHJlc29sdmVzIHRoZVxuICogZGF0YXNldCBhbmQgcnVucyB0aGUgcGxhbm5lci4gUmV0dXJucyB0aGUgYGNoYXJ0SWRgIG9uY2UgdGhlXG4gKiBwbGFjZWhvbGRlciBsYW5kcyBzbyB0aGUgZmlyc3Qge0BsaW5rIGZldGNoQ2hhcnR9IGNhbGwgYWx3YXlzXG4gKiBzZWVzIGFuIGVudHJ5IChubyBzcHVyaW91cyA0MDQgcmFjZSkuXG4gKlxuICogVGhlIGJhY2tncm91bmQgdGFzayBzd2FsbG93cyBpdHMgb3duIGZhaWx1cmVzIGFuZCB3cml0ZXMgdGhlbVxuICogYXMgYGVycm9yYCBlbnRyaWVzLCBzbyBjYWxsZXJzIG5ldmVyIHNlZSBhIHJlamVjdGVkIHByb21pc2UuXG4gKiBDYWNoZSBzdGF0ZSBtYWNoaW5lOlxuICpcbiAqICAgLSBqdXN0IGFmdGVyIHRoaXMgY2FsbCByZXR1cm5zOiBgeyBjaGFydElkIH1gIChwcm9jZXNzaW5nKVxuICogICAtIG9uIHBsYW5uZXIgc3VjY2VzczogICAgICAgICAgIGB7IGNoYXJ0SWQsIHJlc3VsdCB9YFxuICogICAtIG9uIGRhdGEgLyBwbGFubmVyIGZhaWx1cmU6ICAgIGB7IGNoYXJ0SWQsIGVycm9yIH1gXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlQ2hhcnQob3B0czogUHJlcGFyZUNoYXJ0T3B0aW9ucyk6IFByb21pc2U8Q2hhcnRUb29sT3V0cHV0PiB7XG4gIGNvbnN0IGNoYXJ0SWQgPSBoYXNoLmlkKCk7XG4gIGF3YWl0IHdyaXRlQ2hhcnQoeyBjaGFydElkIH0sIG9wdHMudXNlcktleSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInF1ZXVlZFwiLCB7IGNoYXJ0SWQgfSk7XG4gIC8vIEZpcmUtYW5kLWZvcmdldC4gRmFpbHVyZXMgbGFuZCBpbiB0aGUgY2FjaGUgYXMgYGVycm9yYCBlbnRyaWVzO1xuICAvLyBuZXZlciBlc2NhcGUgaW50byBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICB2b2lkIHJ1blByZXBhcmVDaGFydChjaGFydElkLCBvcHRzKTtcbiAgcmV0dXJuIHsgY2hhcnRJZCwgbWFya2VyOiBtYXJrZXJzLmZvcm1hdE1hcmtlcihcImNoYXJ0XCIsIGNoYXJ0SWQpIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blByZXBhcmVDaGFydChjaGFydElkOiBzdHJpbmcsIG9wdHM6IFByZXBhcmVDaGFydE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgb3B0cy5yZXNvbHZlRGF0YShvcHRzLnNpZ25hbCk7XG4gICAgaWYgKGRhdGEucm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihcIkRhdGFzZXQgaGFzIG5vIHJvd3M7IG5vdGhpbmcgdG8gY2hhcnRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkNoYXJ0UGxhbm5lcihcbiAgICAgIG9wdHMuY29uZmlnLFxuICAgICAge1xuICAgICAgICB0aXRsZTogb3B0cy50aXRsZSA/PyBcIkNoYXJ0XCIsXG4gICAgICAgIC4uLihvcHRzLmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogb3B0cy5kZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgICBkYXRhOiBkYXRhLnJvd3MgYXMgQ2hhcnRQbGFubmVyUmVxdWVzdFtcImRhdGFcIl0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi4ob3B0cy5yZXF1ZXN0Q29udGV4dCA/IHsgcmVxdWVzdENvbnRleHQ6IG9wdHMucmVxdWVzdENvbnRleHQgfSA6IHt9KSxcbiAgICAgICAgLi4uKG9wdHMuc2lnbmFsID8geyBhYm9ydFNpZ25hbDogb3B0cy5zaWduYWwgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhd2FpdCB3cml0ZUNoYXJ0KHsgY2hhcnRJZCwgcmVzdWx0IH0sIG9wdHMudXNlcktleSk7XG4gICAgbG9nZ2VyLmluZm8oXCJkb25lXCIsIHtcbiAgICAgIGNoYXJ0SWQsXG4gICAgICBjaGFydFR5cGU6IHJlc3VsdC5jaGFydFR5cGUsXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwiZXJyb3JcIiwgeyBjaGFydElkLCBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAvLyBUaGUgZW50cnkncyBgZXJyb3JgIGlzIHJlbmRlcmVkIGluIHRoZSBjaGF0LCBzbyBvbmx5IGFuIEFwcEtpdEVycm9yJ3NcbiAgICAvLyBvd24gbWVzc2FnZSB0cmF2ZWxzOyBhbnl0aGluZyBlbHNlIGNvdWxkIGNhcnJ5IHVwc3RyZWFtIHByb3ZpZGVyIGRldGFpbC5cbiAgICBjb25zdCBlcnJUZXh0ID0gZXJyIGluc3RhbmNlb2YgQXBwS2l0RXJyb3IgPyBlcnIubWVzc2FnZSA6IENIQVJUX0ZBSUxFRF9NRVNTQUdFO1xuICAgIGF3YWl0IHdyaXRlQ2hhcnQoeyBjaGFydElkLCBlcnJvcjogZXJyVGV4dCB9LCBvcHRzLnVzZXJLZXkpO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbG9uZy1wb2xsIGZldGNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIElucHV0cyB0byB7QGxpbmsgZmV0Y2hDaGFydH0uICovXG5leHBvcnQgaW50ZXJmYWNlIEZldGNoQ2hhcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIElkZW50aXR5IHRoZSBjaGFydCBtdXN0IGJlbG9uZyB0by4gQSBjaGFydCBtaW50ZWQgdW5kZXIgYSBkaWZmZXJlbnQga2V5XG4gICAqIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gdW5rbm93biBpZC4gVXNlIHtAbGluayByZXNvbHZlVXNlcktleX0uXG4gICAqL1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXJ2ZXItc2lkZSBwb2xsaW5nIGJ1ZGdldCBpbiBtcy4gV2hlbiB0aGUgZW50cnkgc3RheXMgaW5cbiAgICogdGhlIHByb2Nlc3Npbmcgc3RhdGUgcGFzdCB0aGlzIHdpbmRvdywgdGhlIGhlbHBlciByZXR1cm5zIHRoZVxuICAgKiBsYXN0IHNlZW4gdmFsdWUgKHN0aWxsIHByb2Nlc3NpbmcpIHNvIHRoZSBjbGllbnQgY2FuIHJlLXBvbGwuXG4gICAqIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0ZFVENIX1RJTUVPVVRfTVN9ICg2MHMpLlxuICAgKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogUG9sbCBpbnRlcnZhbCBpbiBtcy4gRGVmYXVsdHMgdG9cbiAgICoge0BsaW5rIERFRkFVTFRfRkVUQ0hfSU5URVJWQUxfTVN9ICgyNTBtcykuXG4gICAqL1xuICBpbnRlcnZhbE1zPzogbnVtYmVyO1xuICAvKiogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uIGhhbmRsZSAoZS5nLiByZXF1ZXN0IGByZXEuc2lnbmFsYCkuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIExvbmctcG9sbCB0aGUgY2hhcnQgY2FjaGUgdW50aWwgdGhlIGVudHJ5IHNldHRsZXMgKGByZXN1bHRgIG9yXG4gKiBgZXJyb3JgIHNldCksIHRoZSBlbnRyeSBpcyBtaXNzaW5nLCBvciB0aGUgc2VydmVyLXNpZGUgdGltZW91dFxuICogZWxhcHNlcy5cbiAqXG4gKiBSZXR1cm5zOlxuICogICAtIHRoZSByZXNvbHZlZCB7QGxpbmsgQ2hhcnR9IHdoZW4gaXQgc2V0dGxlZCwgZXJyb3JlZCwgb3JcbiAqICAgICBzdGF5ZWQgaW4gcHJvY2Vzc2luZyBwYXN0IGB0aW1lb3V0TXNgIChzbyB0aGUgY2xpZW50IGNhblxuICogICAgIHJlLXBvbGwpO1xuICogICAtIGB1bmRlZmluZWRgIHdoZW4gdGhlIGVudHJ5IGlzIG1pc3NpbmcsIGV4cGlyZWQsIG9yIG93bmVkIGJ5XG4gKiAgICAgYW5vdGhlciBpZGVudGl0eSAodGhlIGNvbnN1bWVyIHNob3VsZCB0cmVhdCBhcyA0MDQpLlxuICpcbiAqIGBzaWduYWxgIGxldHMgdGhlIGNhbGxlciBjYW5jZWwgYWhlYWQgb2YgdGltZW91dCAoZS5nLiB0aGUgSFRUUFxuICogcmVxdWVzdCBjbG9zZWQpLiBDYW5jZWxsYXRpb24gcHJvcGFnYXRlcyB0byB0aGUgaW50ZXItcG9sbCBzbGVlcFxuICogc28gdGhlIGhlbHBlciByZXR1cm5zIGltbWVkaWF0ZWx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDaGFydChcbiAgY2hhcnRJZDogc3RyaW5nLFxuICBvcHRpb25zOiBGZXRjaENoYXJ0T3B0aW9ucyxcbik6IFByb21pc2U8Q2hhcnQgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgdGltZW91dE1zID0gb3B0aW9ucy50aW1lb3V0TXMgPz8gREVGQVVMVF9GRVRDSF9USU1FT1VUX01TO1xuICBjb25zdCBpbnRlcnZhbE1zID0gb3B0aW9ucy5pbnRlcnZhbE1zID8/IERFRkFVTFRfRkVUQ0hfSU5URVJWQUxfTVM7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHRpbWVvdXRNcztcblxuICBsZXQgbGFzdDogQ2hhcnQgfCB1bmRlZmluZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgb3B0aW9ucy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbGFzdCA9IGF3YWl0IHJlYWRDaGFydChjaGFydElkLCBvcHRpb25zLnVzZXJLZXkpO1xuICAgIGlmICghbGFzdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAobGFzdC5yZXN1bHQgIT09IHVuZGVmaW5lZCB8fCBsYXN0LmVycm9yICE9PSB1bmRlZmluZWQpIHJldHVybiBsYXN0O1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gRGF0ZS5ub3coKTtcbiAgICBpZiAocmVtYWluaW5nIDw9IDApIHJldHVybiBsYXN0O1xuICAgIGF3YWl0IGFzeW5jVXRpbHMuc2xlZXAoTWF0aC5taW4oaW50ZXJ2YWxNcywgcmVtYWluaW5nKSwgb3B0aW9ucy5zaWduYWwpO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVjaGFydHMgdGhlbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYW4gRWNoYXJ0cyBvcHRpb24gdGhhdCBjYXJyaWVzIGJyYW5kIGlkZW50aXR5OiB0aGUgc2VyaWVzXG4gKiBjb2xvciBjeWNsZSBhbmQgdGhlIGJhc2UgZm9udCBzdGFjay4gRGVyaXZlZCBmcm9tIGEge0BsaW5rIEJyYW5kQ29udGV4dH1cbiAqIGJ5IHtAbGluayBicmFuZENoYXJ0VGhlbWV9IGFuZCBtZXJnZWQgaW50byBldmVyeSBzcGVjIGJ5XG4gKiB7QGxpbmsgcGxhblRvRWNoYXJ0c09wdGlvbn0uXG4gKlxuICogRGVsaWJlcmF0ZWx5IGNhcnJpZXMgbm8gdGV4dCBDT0xPUi4gQSBzcGVjIGlzIHBsYW5uZWQgaGVyZSwgb24gdGhlXG4gKiBzZXJ2ZXIsIGFuZCByZWFkIGxhdGVyIGluIGEgYnJvd3NlciB3aG9zZSBsaWdodC9kYXJrIHRoZW1lIHRoaXMgY29kZVxuICogY2Fubm90IGtub3c7IGJha2luZyBpbiB0aGUgYnJhbmQncyBzaW5nbGUgKGxpZ2h0KSBmb3JlZ3JvdW5kIHByb2R1Y2VkXG4gKiBuZWFyLWJsYWNrIGxhYmVscyB0aGF0IGRpc2FwcGVhcmVkIGFnYWluc3QgYSBkYXJrIGNoYXQgc3VyZmFjZS4gVGhlXG4gKiByZW5kZXJlciByZXNvbHZlcyBjaHJvbWUgY29sb3JzIGZyb20gQXBwS2l0J3MgbGl2ZSBDU1MgdG9rZW5zIGluc3RlYWRcbiAqIChgQGRieC10b29scy91aS1tYXN0cmFgJ3MgYGNoYXJ0LXRoZW1lYCArIGBub3JtYWxpemVDaGFydE9wdGlvbmApLFxuICogbGVhdmluZyB0aGlzIHRoZW1lIHRoZSBwYXJ0cyB0aGF0IHJlYWQgdGhlIHNhbWUgaW4gZWl0aGVyIG1vZGUuXG4gKi9cbmludGVyZmFjZSBDaGFydFRoZW1lIHtcbiAgY29sb3I6IHN0cmluZ1tdO1xuICB0ZXh0U3R5bGU6IHsgZm9udEZhbWlseTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQXBwS2l0J3MgY2F0ZWdvcmljYWwgY2hhcnQgcGFsZXR0ZSAoYC0tY2hhcnQtY2F0LTFgIC4uIGAtLWNoYXJ0LWNhdC04YCBmcm9tXG4gKiBgQGRhdGFicmlja3MvYXBwa2l0LXVpYCksIGFzIGhleC4gU2VydmVyLXJlbmRlcmVkIGNoYXJ0IHNwZWNzIGNhbm5vdCByZWFkIHRoZVxuICogYnJvd3NlcidzIENTUyBjdXN0b20gcHJvcGVydGllcywgc28gdGhlIHZhbHVlcyBhcmUgbWlycm9yZWQgaGVyZSB0byBrZWVwIGFcbiAqIGdlbmVyYXRlZCBjaGFydCB2aXN1YWxseSBjb25zaXN0ZW50IHdpdGggdGhlIEFwcEtpdC1zdHlsZWQgVUkgYXJvdW5kIGl0LlxuICogS2VlcCBpbiBzeW5jIHdpdGggQXBwS2l0J3Mgc3R5bGVzaGVldCBpZiBpdCBjaGFuZ2VzLlxuICovXG5jb25zdCBBUFBLSVRfQ0hBUlRfUEFMRVRURSA9IFtcbiAgXCIjMjQ2M0VCXCIsIC8vIGJsdWVcbiAgXCIjMkVCODhBXCIsIC8vIHRlYWxcbiAgXCIjQUI0N0JEXCIsIC8vIHB1cnBsZVxuICBcIiNGNjlFMjNcIiwgLy8gYW1iZXJcbiAgXCIjREQyQzREXCIsIC8vIHJvc2VcbiAgXCIjMUJBM0JCXCIsIC8vIGN5YW5cbiAgXCIjOUI2MUQxXCIsIC8vIGxhdmVuZGVyXG4gIFwiIzM0QjI2MlwiLCAvLyBlbWVyYWxkXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIEV4cGFuZCB0d28gYnJhbmQgaGV4IGNvbG9ycyBpbnRvIGEgbGVnaWJsZSBjYXRlZ29yaWNhbCBjeWNsZS4gRWNoYXJ0c1xuICogcmVwZWF0cyB0aGUgYGNvbG9yYCBhcnJheSBhY3Jvc3Mgc2VyaWVzIC8gY2F0ZWdvcmllcywgc28gYSBnb29kIGRlZmF1bHRcbiAqIG5lZWRzIHNldmVyYWwgZGlzdGluY3QgaHVlcywgbm90IHR3by4gV2Ugc2VlZCB3aXRoIHRoZSBicmFuZCBwcmltYXJ5IGFuZFxuICogYWNjZW50ICh0aGUgaWRlbnRpdHkgY29sb3JzKSBhbmQgZm9sbG93IHdpdGggQXBwS2l0J3Mgb3duIGNhdGVnb3JpY2FsIGNoYXJ0XG4gKiBwYWxldHRlLCBzbyBtdWx0aS1zZXJpZXMgLyBtYW55LXNsaWNlIGNoYXJ0cyBzdGF5IHJlYWRhYmxlIGFuZCBtYXRjaCB0aGVcbiAqIHN1cnJvdW5kaW5nIEFwcEtpdCBVSSB3aGlsZSB0aGUgZmlyc3Qgb25lIG9yIHR3byBtYXJrcyBsYW5kIG9uLWJyYW5kLlxuICovXG5mdW5jdGlvbiBicmFuZENvbG9yQ3ljbGUocHJpbWFyeTogc3RyaW5nLCBhY2NlbnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3Qgc3ByZWFkID0gQVBQS0lUX0NIQVJUX1BBTEVUVEU7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcmV0dXJuIFtwcmltYXJ5LCBhY2NlbnQsIC4uLnNwcmVhZF0uZmlsdGVyKChjKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzZWVuLmhhcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgc2Vlbi5hZGQoa2V5KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVyaXZlIGFuIEVjaGFydHMge0BsaW5rIENoYXJ0VGhlbWV9IGZyb20gYSBicmFuZCBjb250ZXh0OiB0aGUgcHJpbWFyeSArXG4gKiBhY2NlbnQgY29sb3JzIHNlZWQgdGhlIHNlcmllcyBjeWNsZSBhbmQgdGhlIHNhbnMgc3RhY2sgYmVjb21lcyB0aGUgYmFzZVxuICogZm9udC4gVGV4dCBjb2xvcnMgYXJlIHRoZSByZW5kZXJlcidzIGpvYiAtIHNlZSB7QGxpbmsgQ2hhcnRUaGVtZX0uXG4gKi9cbmZ1bmN0aW9uIGJyYW5kQ2hhcnRUaGVtZShicmFuZDogQnJhbmRDb250ZXh0KTogQ2hhcnRUaGVtZSB7XG4gIHJldHVybiB7XG4gICAgY29sb3I6IGJyYW5kQ29sb3JDeWNsZShicmFuZC5jb2xvcnMucHJpbWFyeSwgYnJhbmQuY29sb3JzLmFjY2VudCksXG4gICAgdGV4dFN0eWxlOiB7IGZvbnRGYW1pbHk6IGJyYW5kLnR5cG9ncmFwaHkuc2FucyB9LFxuICB9O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBlY2hhcnRzIGV4cGFuc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG50eXBlIE5hbWVkU2xpY2UgPSB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IG51bWJlciB9O1xudHlwZSBTY2F0dGVyUG9pbnQgPSBbbnVtYmVyLCBudW1iZXJdO1xudHlwZSBIZWF0bWFwQ2VsbCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuLyoqIEtlZXAgb25seSBge25hbWUsIHZhbHVlfWAgc2xpY2VzOyBkcm9wIG51bGxzIC8gYmFyZSBudW1iZXJzIC8gdHVwbGVzLiAqL1xuZnVuY3Rpb24gbmFtZWRTbGljZXMoZGF0YTogQ2hhcnRQbGFuW1wic2VyaWVzXCJdW251bWJlcl1bXCJkYXRhXCJdKTogTmFtZWRTbGljZVtdIHtcbiAgcmV0dXJuIGRhdGEuZmlsdGVyKFxuICAgIChkKTogZCBpcyBOYW1lZFNsaWNlID0+IGQgIT09IG51bGwgJiYgdHlwZW9mIGQgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZCksXG4gICk7XG59XG5cbi8qKiBLZWVwIG9ubHkgZmluaXRlIG51bWJlcnMgKGNhdGVnb3J5IC8gcmFkYXIgLyB3YXRlcmZhbGwgc2VyaWVzKS4gKi9cbmZ1bmN0aW9uIG51bWVyaWNQb2ludHMoZGF0YTogQ2hhcnRQbGFuW1wic2VyaWVzXCJdW251bWJlcl1bXCJkYXRhXCJdKTogbnVtYmVyW10ge1xuICByZXR1cm4gZGF0YS5maWx0ZXIoKGQpOiBkIGlzIG51bWJlciA9PiB0eXBlb2YgZCA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUoZCkpO1xufVxuXG4vKiogS2VlcCBvbmx5IGBbeCwgeV1gIHNjYXR0ZXIgdHVwbGVzLiAqL1xuZnVuY3Rpb24gc2NhdHRlclBvaW50cyhkYXRhOiBDaGFydFBsYW5bXCJzZXJpZXNcIl1bbnVtYmVyXVtcImRhdGFcIl0pOiBTY2F0dGVyUG9pbnRbXSB7XG4gIHJldHVybiBkYXRhLmZpbHRlcihcbiAgICAoZCk6IGQgaXMgU2NhdHRlclBvaW50ID0+IEFycmF5LmlzQXJyYXkoZCkgJiYgZC5sZW5ndGggPT09IDIsXG4gICkgYXMgU2NhdHRlclBvaW50W107XG59XG5cbi8qKiBLZWVwIG9ubHkgYFt4SW5kZXgsIHlJbmRleCwgdmFsdWVdYCBoZWF0bWFwIGNlbGxzLiAqL1xuZnVuY3Rpb24gaGVhdG1hcENlbGxzKGRhdGE6IENoYXJ0UGxhbltcInNlcmllc1wiXVtudW1iZXJdW1wiZGF0YVwiXSk6IEhlYXRtYXBDZWxsW10ge1xuICByZXR1cm4gZGF0YS5maWx0ZXIoKGQpOiBkIGlzIEhlYXRtYXBDZWxsID0+IEFycmF5LmlzQXJyYXkoZCkgJiYgZC5sZW5ndGggPT09IDMpIGFzIEhlYXRtYXBDZWxsW107XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGhlYXRtYXAncyBjZWxscyBhbmQgcm93IGxhYmVscyBmcm9tIGVpdGhlciBzaGFwZSB0aGVcbiAqIHBsYW5uZXIgbWF5IHByb2R1Y2UuXG4gKlxuICogVGhlIGRvY3VtZW50ZWQgc2hhcGUgaXMgT05FIHNlcmllcyBvZiBgW3hJbmRleCwgeUluZGV4LCB2YWx1ZV1gXG4gKiB0cmlwbGVzLCBidXQgaW5kZXggYXJpdGhtZXRpYyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGJvb2trZWVwaW5nIGFcbiAqIGZhc3QgbW9kZWwgZ2V0cyB3cm9uZywgYW5kIHRoZSBmYWlsdXJlIGlzIHNpbGVudCAoZXZlcnkgY2VsbCBpc1xuICogZHJvcHBlZCBhbmQgdGhlIGdyaWQgcmVuZGVycyBlbXB0eSkuIFNvIHRoZSByb3ctcGVyLXNlcmllcyBzaGFwZSBpdFxuICogYWxyZWFkeSBwcm9kdWNlcyByZWxpYWJseSBmb3IgYmFyIGNoYXJ0cyAtIG9uZSBzZXJpZXMgcGVyIG1hdHJpeFxuICogcm93LCBudW1iZXJzIGFsaWduZWQgdG8gYGNhdGVnb3JpZXNgIC0gaXMgYWNjZXB0ZWQgdG9vIGFuZCB0dXJuZWRcbiAqIGludG8gdHJpcGxlcyBoZXJlLlxuICpcbiAqIFJvdyBvcmRlciByZWFkcyB0b3AtdG8tYm90dG9tOiBFY2hhcnRzJyBjYXRlZ29yeSB5LWF4aXMgY291bnRzIGluZGV4XG4gKiAwIGZyb20gdGhlIEJPVFRPTSwgc28gYSByb3ctZGVyaXZlZCBtYXRyaXggcmV2ZXJzZXMgYm90aCB0aGUgYXhpc1xuICogbGFiZWxzIGFuZCB0aGUgcm93IGluZGljZXMsIHB1dHRpbmcgdGhlIGZpcnN0IHNlcmllcyBhdCB0aGUgdG9wIHRoZVxuICogd2F5IHRoZSBtb2RlbCBsaXN0ZWQgaXQuXG4gKi9cbmZ1bmN0aW9uIGhlYXRtYXBNYXRyaXgocGxhbjogQ2hhcnRQbGFuKTogeyBjZWxsczogSGVhdG1hcENlbGxbXTsgeUNhdGVnb3JpZXM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCB0cmlwbGVzID0gaGVhdG1hcENlbGxzKHBsYW4uc2VyaWVzWzBdPy5kYXRhID8/IFtdKTtcbiAgaWYgKHRyaXBsZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IGNlbGxzOiB0cmlwbGVzLCB5Q2F0ZWdvcmllczogcGxhbi55Q2F0ZWdvcmllcyA/PyBbXSB9O1xuICB9XG4gIGNvbnN0IHJvd3MgPSBwbGFuLnNlcmllcy5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgdmFsdWVzOiBudW1lcmljUG9pbnRzKHMuZGF0YSkgfSkpO1xuICBjb25zdCBsYWJlbHMgPSBwbGFuLnlDYXRlZ29yaWVzID8/IHJvd3MubWFwKChyKSA9PiByLm5hbWUpO1xuICBjb25zdCBsYXN0Um93ID0gcm93cy5sZW5ndGggLSAxO1xuICByZXR1cm4ge1xuICAgIGNlbGxzOiByb3dzLmZsYXRNYXAoKHJvdywgcm93SW5kZXgpID0+XG4gICAgICByb3cudmFsdWVzLm1hcCgodmFsdWUsIGNvbHVtbkluZGV4KTogSGVhdG1hcENlbGwgPT4gW2NvbHVtbkluZGV4LCBsYXN0Um93IC0gcm93SW5kZXgsIHZhbHVlXSksXG4gICAgKSxcbiAgICB5Q2F0ZWdvcmllczogWy4uLmxhYmVsc10ucmV2ZXJzZSgpLFxuICB9O1xufVxuXG4vKiogU2VxdWVudGlhbCBsaWdodC10by1icmFuZCByYW1wIGZvciBoZWF0bWFwIGludGVuc2l0eS4gKi9cbmNvbnN0IEhFQVRNQVBfUkFNUCA9IFtcIiNFQUYxRkVcIiwgXCIjOUNCREY3XCIsIFwiIzRDODZFRVwiLCBcIiMyNDYzRUJcIiwgXCIjMTQzODdGXCJdO1xuXG4vKiogQWJvdmUgdGhpcyBtYW55IGNlbGxzLCBwcmludGVkIHZhbHVlcyBvdmVybGFwIGFuZCBhcmUgc3VwcHJlc3NlZC4gKi9cbmNvbnN0IEhFQVRNQVBfTEFCRUxfTUFYX0NFTExTID0gNjA7XG5cbi8qKiBSaXNpbmcgc3RlcCBmaWxsIChlbWVyYWxkKSBhbmQgZmFsbGluZyBzdGVwIGZpbGwgKHJvc2UpLiAqL1xuY29uc3QgV0FURVJGQUxMX0lOQ1JFQVNFX0NPTE9SID0gXCIjMkVCODhBXCI7XG5jb25zdCBXQVRFUkZBTExfREVDUkVBU0VfQ09MT1IgPSBcIiNERDJDNERcIjtcblxuLyoqIFNlcmllcyBuYW1lcyB0aGUgd2F0ZXJmYWxsIGV4cGFuc2lvbiBlbWl0cy4gKi9cbmNvbnN0IFdBVEVSRkFMTF9IRUxQRVJfTkFNRSA9IFwiUnVubmluZyB0b3RhbFwiO1xuY29uc3QgV0FURVJGQUxMX0lOQ1JFQVNFX05BTUUgPSBcIkluY3JlYXNlXCI7XG5jb25zdCBXQVRFUkZBTExfREVDUkVBU0VfTkFNRSA9IFwiRGVjcmVhc2VcIjtcblxuLyoqXG4gKiBBIG1vZGVsIGFza2VkIGZvciBhIGJyaWRnZSBvZnRlbiBidWlsZHMgdGhlIHJ1bm5pbmcgdG90YWwgaXRzZWxmIGFuZFxuICogaGFuZHMgYmFjayBhIGN1bXVsYXRpdmUtYmFzZSBzZXJpZXMgYWxvbmdzaWRlIHRoZSBkZWx0YXMgLSB3aGljaFxuICogcmVuZGVycyBhcyB0d28gcGxhaW4gYmFyIHNlcmllcywgbm90IGEgd2F0ZXJmYWxsICh0aGUgYmFzZSBiYXJzIGFyZVxuICogdGhlIHRhbGwgb25lcykuIFRoZSBiYXNlIGlzIHJlY29nbml6YWJsZSBieSBuYW1lLCBzbyBpdCBpcyBkcm9wcGVkXG4gKiBoZXJlIGFuZCB0aGUgcnVubmluZyB0b3RhbCByZWNvbXB1dGVkIGZyb20gdGhlIGRlbHRhcy5cbiAqL1xuY29uc3QgV0FURVJGQUxMX0JBU0VfTkFNRSA9IC9cXGIoYmFzZXxjdW11bGF0aXZlfHJ1bm5pbmd8aGVscGVyfHRvdGFsfHN0YXJ0KGluZyk/KVxcYi9pO1xuXG4vKipcbiAqIFBpY2sgdGhlIHNpZ25lZC1kZWx0YSBzZXJpZXMgb3V0IG9mIGEgd2F0ZXJmYWxsIHBsYW4sIGlnbm9yaW5nIGFueVxuICogY3VtdWxhdGl2ZS1iYXNlIHNlcmllcyB0aGUgcGxhbm5lciBidWlsdCBieSBoYW5kXG4gKiAoe0BsaW5rIFdBVEVSRkFMTF9CQVNFX05BTUV9KS4gRmFsbHMgYmFjayB0byB0aGUgZmlyc3Qgc2VyaWVzIHdoZW5cbiAqIGV2ZXJ5IG5hbWUgbG9va3MgbGlrZSBhIGJhc2UsIHNpbmNlIGRyb3BwaW5nIHRoZW0gYWxsIHdvdWxkIGxlYXZlXG4gKiBub3RoaW5nIHRvIHBsb3QuXG4gKi9cbmZ1bmN0aW9uIHdhdGVyZmFsbERlbHRhU2VyaWVzKFxuICBzZXJpZXM6IENoYXJ0UGxhbltcInNlcmllc1wiXSxcbik6IENoYXJ0UGxhbltcInNlcmllc1wiXVtudW1iZXJdIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHNlcmllcy5maW5kKChzKSA9PiAhV0FURVJGQUxMX0JBU0VfTkFNRS50ZXN0KHMubmFtZSkpID8/IHNlcmllc1swXTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgc3RhY2tlZCB0cmFuc3BhcmVudC1iYXNlICsgaW5jcmVhc2UgKyBkZWNyZWFzZSBzZXJpZXMgdGhhdFxuICogRWNoYXJ0cyB1c2VzIGZvciBhIHdhdGVyZmFsbCAoaXQgaGFzIG5vIG5hdGl2ZSB3YXRlcmZhbGwgdHlwZSkuXG4gKiBWYWx1ZXMgYXJlIHNpZ25lZCBkZWx0YXM7IHRoZSB0cmFuc3BhcmVudCBoZWxwZXIgY2FycmllcyB0aGUgcnVubmluZ1xuICogdG90YWwgc28gZWFjaCB2aXNpYmxlIGJhciBzdGFydHMgd2hlcmUgdGhlIHByZXZpb3VzIG9uZSBlbmRlZC5cbiAqXG4gKiBUaGUgaGVscGVyIGlzIGBzaWxlbnRgLCBzbyB3aXRoIGFuIGl0ZW0tdHJpZ2dlcmVkIHRvb2x0aXAgaXQgaXNcbiAqIGludmlzaWJsZSB0byBib3RoIHRoZSBleWUgYW5kIHRoZSBwb2ludGVyIC0gdGhlIGFsdGVybmF0aXZlLCBhbiBheGlzXG4gKiB0b29sdGlwIHRoYXQgaGlkZXMgdGhlIGhlbHBlciByb3csIG5lZWRzIGEgZnVuY3Rpb24gZm9ybWF0dGVyLCBhbmRcbiAqIHRoaXMgc3BlYyBoYXMgdG8gc3Vydml2ZSBKU09OIHNlcmlhbGl6YXRpb24gdG8gdGhlIGJyb3dzZXIuXG4gKi9cbmZ1bmN0aW9uIHdhdGVyZmFsbFNlcmllcyh2YWx1ZXM6IG51bWJlcltdKTogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgaGVscGVyczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5jcmVhc2VzOiBBcnJheTxudW1iZXIgfCBcIi1cIj4gPSBbXTtcbiAgY29uc3QgZGVjcmVhc2VzOiBBcnJheTxudW1iZXIgfCBcIi1cIj4gPSBbXTtcbiAgbGV0IGN1bXVsYXRpdmUgPSAwO1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICBoZWxwZXJzLnB1c2goY3VtdWxhdGl2ZSk7XG4gICAgICBpbmNyZWFzZXMucHVzaCh2YWx1ZSk7XG4gICAgICBkZWNyZWFzZXMucHVzaChcIi1cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlbHBlcnMucHVzaChjdW11bGF0aXZlICsgdmFsdWUpO1xuICAgICAgaW5jcmVhc2VzLnB1c2goXCItXCIpO1xuICAgICAgZGVjcmVhc2VzLnB1c2goLXZhbHVlKTtcbiAgICB9XG4gICAgY3VtdWxhdGl2ZSArPSB2YWx1ZTtcbiAgfVxuICBjb25zdCB0cmFuc3BhcmVudCA9IHsgYm9yZGVyQ29sb3I6IFwidHJhbnNwYXJlbnRcIiwgY29sb3I6IFwidHJhbnNwYXJlbnRcIiB9O1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG5hbWU6IFdBVEVSRkFMTF9IRUxQRVJfTkFNRSxcbiAgICAgIHR5cGU6IFwiYmFyXCIsXG4gICAgICBzdGFjazogXCJ0b3RhbFwiLFxuICAgICAgc2lsZW50OiB0cnVlLFxuICAgICAgaXRlbVN0eWxlOiB0cmFuc3BhcmVudCxcbiAgICAgIGVtcGhhc2lzOiB7IGl0ZW1TdHlsZTogdHJhbnNwYXJlbnQgfSxcbiAgICAgIGRhdGE6IGhlbHBlcnMsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBXQVRFUkZBTExfSU5DUkVBU0VfTkFNRSxcbiAgICAgIHR5cGU6IFwiYmFyXCIsXG4gICAgICBzdGFjazogXCJ0b3RhbFwiLFxuICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBXQVRFUkZBTExfSU5DUkVBU0VfQ09MT1IgfSxcbiAgICAgIGRhdGE6IGluY3JlYXNlcyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFdBVEVSRkFMTF9ERUNSRUFTRV9OQU1FLFxuICAgICAgdHlwZTogXCJiYXJcIixcbiAgICAgIHN0YWNrOiBcInRvdGFsXCIsXG4gICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IFdBVEVSRkFMTF9ERUNSRUFTRV9DT0xPUiB9LFxuICAgICAgZGF0YTogZGVjcmVhc2VzLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRXhwYW5kIGEge0BsaW5rIENoYXJ0UGxhbn0gaW50byBhIGZ1bGwgRWNoYXJ0cyBgRUNoYXJ0c09wdGlvbmBcbiAqIEpTT04uIENlbnRyYWxpemVkIGhlcmUgc28gdGhlIHBsYW5uZXIgYWdlbnQgb25seSBmaWxscyBpbiB0aGVcbiAqIGNvbXBhY3QgcGxhbiBzaGFwZTsgdG9vbHRpcCAvIGFuaW1hdGlvbiAvIGNvbG9yIC8gZ3JpZCBkZWZhdWx0c1xuICogc3RheSBjb25zaXN0ZW50IGFjcm9zcyBjaGFydHMgYW5kIGFyZSBlYXN5IHRvIHR1bmUgd2l0aG91dFxuICogcmV0cmFpbmluZyBtb2RlbCBiZWhhdmlvdXIuXG4gKlxuICogV2hlbiBgYnJhbmRgIGlzIHNldCwgdGhlIHJlc29sdmVkIHNwZWMgaXMgdGhlbWVkIHdpdGggdGhlIGJyYW5kJ3Mgc2VyaWVzXG4gKiBjb2xvciBjeWNsZSBhbmQgYmFzZSB0ZXh0IHN0eWxlIChzZWUge0BsaW5rIGJyYW5kQ2hhcnRUaGVtZX0pOyBvdGhlcndpc2VcbiAqIEVjaGFydHMnIGRlZmF1bHRzIGFwcGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhblRvRWNoYXJ0c09wdGlvbihcbiAgaW5wdXQ6IENoYXJ0UGxhbklucHV0LFxuICBmYWxsYmFja1RpdGxlOiBzdHJpbmcsXG4gIGJyYW5kPzogQnJhbmRDb250ZXh0LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCBwbGFuID0gY2hhcnRQbGFuU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgY29uc3QgYmFzZVRpdGxlID0gcGxhbi50aXRsZSA/PyBmYWxsYmFja1RpdGxlO1xuICBjb25zdCBncmlkID0geyBsZWZ0OiA0OCwgcmlnaHQ6IDI0LCB0b3A6IDU2LCBib3R0b206IDQ4LCBjb250YWluTGFiZWw6IHRydWUgfTtcbiAgY29uc3QgdGhlbWUgPSBicmFuZCA/IGJyYW5kQ2hhcnRUaGVtZShicmFuZCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRoZW1lZCA9IChvcHRpb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT5cbiAgICB0aGVtZSA/IHsgLi4udGhlbWUsIC4uLm9wdGlvbiB9IDogb3B0aW9uO1xuICBjb25zdCB0aXRsZSA9IHsgdGV4dDogYmFzZVRpdGxlLCBsZWZ0OiBcImNlbnRlclwiIH07XG4gIGNvbnN0IGxlZ2VuZCA9IHsgYm90dG9tOiAwIH07XG5cbiAgaWYgKHBsYW4uY2hhcnRUeXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgLy8gVGhlIG9wdGlvbiBhcnJpdmVzIGFzIGEgSlNPTiBTVFJJTkcsIG5vdCBhIG5lc3RlZCBvYmplY3Q6IHRoaXMgcGxhbiBpc1xuICAgIC8vIHRoZSBwbGFubmVyJ3MgcHJvdmlkZXItZW5mb3JjZWQgc3RydWN0dXJlZCBvdXRwdXQsIGFuZCBhIGZyZWUtZm9ybVxuICAgIC8vIG9iamVjdCBiZWNvbWVzIGFuIHVuY29uc3RyYWluZWQgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzYCBzY2hlbWEgdGhhdFxuICAgIC8vIHN0cmljdCBPcGVuQUkgYW5kIEdlbWluaSBlbmRwb2ludHMgcmVqZWN0IC0gd2hpY2ggd291bGQgYnJlYWsgRVZFUllcbiAgICAvLyBjaGFydCwgbm90IGp1c3QgdGhpcyBvbmUgKHNhbWUgY2xhc3Mgb2YgaGF6YXJkIGFzIHRoZSBgcHJlZml4SXRlbXNgXG4gICAgLy8gbm90ZSBvbiBgY2hhcnREYXRhUG9pbnRTY2hlbWFgKS4gQSBtYWxmb3JtZWQgc3RyaW5nIGNvc3RzIG9uZSBjaGFydC5cbiAgICAvLyBOb3RoaW5nIGhlcmUgaXMgZXZhbCdkOyBhIHN0cmluZy12YWx1ZWQgRWNoYXJ0cyBmb3JtYXR0ZXIgaXMgYVxuICAgIC8vIHRlbXBsYXRlLCBub3QgY29kZS5cbiAgICBjb25zdCBvcHRpb24gPSBqc29uLnBhcnNlUmVjb3JkKHBsYW4ub3B0aW9uKTtcbiAgICBpZiAoIW9wdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGFydFR5cGUgXCJjdXN0b21cIiBuZWVkcyBhbiBgb3B0aW9uYCBob2xkaW5nIGEgSlNPTiBvYmplY3QnKTtcbiAgICB9XG4gICAgLy8gVGl0bGUgaXMgdGhlIG9uZSBkZWZhdWx0IHdvcnRoIGZpbGxpbmc6IGV2ZXJ5IG90aGVyIGJyYW5jaCBndWFyYW50ZWVzXG4gICAgLy8gb25lIGFuZCB0aGUgcmVuZGVyZXIgcmVzZXJ2ZXMgZ3JpZCBzcGFjZSBmb3IgaXQuIEEgdGl0bGUgdGhlIG1vZGVsIHNldFxuICAgIC8vIHdpbnMsIGFzIGRvZXMgZXZlcnkgb3RoZXIgZmllbGQgaXQgZGVjbGFyZWQuXG4gICAgcmV0dXJuIHRoZW1lZCh7IHRpdGxlLCAuLi5vcHRpb24gfSk7XG4gIH1cblxuICBpZiAocGxhbi5jaGFydFR5cGUgPT09IFwicGllXCIgfHwgcGxhbi5jaGFydFR5cGUgPT09IFwiZnVubmVsXCIgfHwgcGxhbi5jaGFydFR5cGUgPT09IFwidHJlZW1hcFwiKSB7XG4gICAgY29uc3Qgc2xpY2VzID0gbmFtZWRTbGljZXMocGxhbi5zZXJpZXNbMF0/LmRhdGEgPz8gW10pO1xuICAgIGNvbnN0IHNlcmllc1R5cGUgPSBwbGFuLmNoYXJ0VHlwZTtcbiAgICByZXR1cm4gdGhlbWVkKHtcbiAgICAgIHRpdGxlLFxuICAgICAgdG9vbHRpcDogeyB0cmlnZ2VyOiBcIml0ZW1cIiB9LFxuICAgICAgbGVnZW5kOiBzZXJpZXNUeXBlID09PSBcInRyZWVtYXBcIiA/IHVuZGVmaW5lZCA6IGxlZ2VuZCxcbiAgICAgIHNlcmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogcGxhbi5zZXJpZXNbMF0/Lm5hbWUgPz8gYmFzZVRpdGxlLFxuICAgICAgICAgIHR5cGU6IHNlcmllc1R5cGUsXG4gICAgICAgICAgLi4uKHNlcmllc1R5cGUgPT09IFwicGllXCIgPyB7IHJhZGl1czogW1wiMzUlXCIsIFwiNjUlXCJdIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHNlcmllc1R5cGUgPT09IFwiZnVubmVsXCIgPyB7IHNvcnQ6IFwiZGVzY2VuZGluZ1wiIH0gOiB7fSksXG4gICAgICAgICAgZGF0YTogc2xpY2VzLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwbGFuLmNoYXJ0VHlwZSA9PT0gXCJzY2F0dGVyXCIpIHtcbiAgICAvLyBFY2hhcnRzIGNyYXNoZXMgb24gbnVsbCBzY2F0dGVyIHBvaW50cyAtIGtlZXAgb25seSB2YWxpZFxuICAgIC8vIGBbeCwgeV1gIHR1cGxlcy4gQmFyZSBudW1iZXJzIC8gb2JqZWN0cyAvIG51bGxzIGZyb20gYVxuICAgIC8vIG1pc21hdGNoZWQgcGxhbiBnZXQgZHJvcHBlZCBzaWxlbnRseS5cbiAgICByZXR1cm4gdGhlbWVkKHtcbiAgICAgIHRpdGxlLFxuICAgICAgdG9vbHRpcDogeyB0cmlnZ2VyOiBcIml0ZW1cIiB9LFxuICAgICAgbGVnZW5kLFxuICAgICAgZ3JpZCxcbiAgICAgIHhBeGlzOiB7IHR5cGU6IFwidmFsdWVcIiwgbmFtZTogcGxhbi54QXhpc0xhYmVsIH0sXG4gICAgICB5QXhpczogeyB0eXBlOiBcInZhbHVlXCIsIG5hbWU6IHBsYW4ueUF4aXNMYWJlbCB9LFxuICAgICAgc2VyaWVzOiBwbGFuLnNlcmllcy5tYXAoKHMpID0+ICh7XG4gICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgdHlwZTogXCJzY2F0dGVyXCIsXG4gICAgICAgIGRhdGE6IHNjYXR0ZXJQb2ludHMocy5kYXRhKSxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwbGFuLmNoYXJ0VHlwZSA9PT0gXCJoZWF0bWFwXCIpIHtcbiAgICBjb25zdCB7IGNlbGxzLCB5Q2F0ZWdvcmllcyB9ID0gaGVhdG1hcE1hdHJpeChwbGFuKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBjZWxscy5tYXAoKGMpID0+IGNbMl0pO1xuICAgIGNvbnN0IG1pbiA9IHZhbHVlcy5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4udmFsdWVzKSA6IDA7XG4gICAgY29uc3QgbWF4ID0gdmFsdWVzLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi52YWx1ZXMpIDogMTtcbiAgICByZXR1cm4gdGhlbWVkKHtcbiAgICAgIHRpdGxlLFxuICAgICAgdG9vbHRpcDogeyBwb3NpdGlvbjogXCJ0b3BcIiB9LFxuICAgICAgLy8gVGhlIHZpc3VhbE1hcCByYW1wIHNpdHMgYmVsb3cgdGhlIHBsb3QsIHNvIHRoZSBncmlkIGdpdmVzIHVwXG4gICAgICAvLyBtb3JlIGJvdHRvbSByb29tIHRoYW4gYW4gYXhpcy1vbmx5IGNoYXJ0IG5lZWRzLlxuICAgICAgZ3JpZDogeyAuLi5ncmlkLCBib3R0b206IDcyIH0sXG4gICAgICB4QXhpczoge1xuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXG4gICAgICAgIGRhdGE6IHBsYW4uY2F0ZWdvcmllcyA/PyBbXSxcbiAgICAgICAgbmFtZTogcGxhbi54QXhpc0xhYmVsLFxuICAgICAgICBzcGxpdEFyZWE6IHsgc2hvdzogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICAgIHlBeGlzOiB7XG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcbiAgICAgICAgZGF0YTogeUNhdGVnb3JpZXMsXG4gICAgICAgIG5hbWU6IHBsYW4ueUF4aXNMYWJlbCxcbiAgICAgICAgc3BsaXRBcmVhOiB7IHNob3c6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgICB2aXN1YWxNYXA6IHtcbiAgICAgICAgLy8gRWNoYXJ0cyBoaWRlcyBldmVyeSBjZWxsIHdoZW4gbWluID09PSBtYXggKGEgdW5pZm9ybSBtYXRyaXgpLFxuICAgICAgICAvLyBzbyBhIGRlZ2VuZXJhdGUgcmFuZ2UgaXMgd2lkZW5lZCBieSBvbmUuXG4gICAgICAgIG1pbixcbiAgICAgICAgbWF4OiBtYXggPiBtaW4gPyBtYXggOiBtaW4gKyAxLFxuICAgICAgICBjYWxjdWxhYmxlOiB0cnVlLFxuICAgICAgICBvcmllbnQ6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBsZWZ0OiBcImNlbnRlclwiLFxuICAgICAgICBib3R0b206IDgsXG4gICAgICAgIGluUmFuZ2U6IHsgY29sb3I6IEhFQVRNQVBfUkFNUCB9LFxuICAgICAgfSxcbiAgICAgIHNlcmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogcGxhbi5zZXJpZXNbMF0/Lm5hbWUgPz8gYmFzZVRpdGxlLFxuICAgICAgICAgIHR5cGU6IFwiaGVhdG1hcFwiLFxuICAgICAgICAgIGRhdGE6IGNlbGxzLFxuICAgICAgICAgIC8vIFByaW50ZWQgY2VsbCB2YWx1ZXMgYXJlIHVucmVhZGFibGUgb25jZSB0aGUgZ3JpZCBpcyBkZW5zZS5cbiAgICAgICAgICBsYWJlbDogeyBzaG93OiBjZWxscy5sZW5ndGggPD0gSEVBVE1BUF9MQUJFTF9NQVhfQ0VMTFMgfSxcbiAgICAgICAgICBlbXBoYXNpczogeyBpdGVtU3R5bGU6IHsgc2hhZG93Qmx1cjogMTAsIHNoYWRvd0NvbG9yOiBcInJnYmEoMCwgMCwgMCwgMC4zKVwiIH0gfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGxhbi5jaGFydFR5cGUgPT09IFwicmFkYXJcIikge1xuICAgIGNvbnN0IGluZGljYXRvcnMgPSAocGxhbi5jYXRlZ29yaWVzID8/IFtdKS5tYXAoKG5hbWUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwZWFrID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIC4uLnBsYW4uc2VyaWVzLm1hcCgocykgPT4ge1xuICAgICAgICAgIGNvbnN0IG51bXMgPSBudW1lcmljUG9pbnRzKHMuZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIG51bXNbaW5kZXhdID8/IDA7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IG5hbWUsIG1heDogcGVhayA+IDAgPyBwZWFrIDogMSB9O1xuICAgIH0pO1xuICAgIHJldHVybiB0aGVtZWQoe1xuICAgICAgdGl0bGUsXG4gICAgICB0b29sdGlwOiB7IHRyaWdnZXI6IFwiaXRlbVwiIH0sXG4gICAgICBsZWdlbmQsXG4gICAgICByYWRhcjogeyBpbmRpY2F0b3I6IGluZGljYXRvcnMgfSxcbiAgICAgIHNlcmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJyYWRhclwiLFxuICAgICAgICAgIGRhdGE6IHBsYW4uc2VyaWVzLm1hcCgocykgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBudW1lcmljUG9pbnRzKHMuZGF0YSksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwbGFuLmNoYXJ0VHlwZSA9PT0gXCJ3YXRlcmZhbGxcIikge1xuICAgIGNvbnN0IHZhbHVlcyA9IG51bWVyaWNQb2ludHMod2F0ZXJmYWxsRGVsdGFTZXJpZXMocGxhbi5zZXJpZXMpPy5kYXRhID8/IFtdKTtcbiAgICByZXR1cm4gdGhlbWVkKHtcbiAgICAgIHRpdGxlLFxuICAgICAgLy8gSXRlbS10cmlnZ2VyZWQgc28gdGhlIHRyYW5zcGFyZW50IGBzaWxlbnRgIG9mZnNldCBiYXJzIG5ldmVyXG4gICAgICAvLyBzdXJmYWNlIGluIGEgdG9vbHRpcCAoc2VlIGB3YXRlcmZhbGxTZXJpZXNgKS5cbiAgICAgIHRvb2x0aXA6IHsgdHJpZ2dlcjogXCJpdGVtXCIgfSxcbiAgICAgIC8vIE9ubHkgdGhlIHR3byB2aXNpYmxlIHN0ZXBzIGJlbG9uZyBpbiB0aGUgbGVnZW5kLlxuICAgICAgbGVnZW5kOiB7IC4uLmxlZ2VuZCwgZGF0YTogW1dBVEVSRkFMTF9JTkNSRUFTRV9OQU1FLCBXQVRFUkZBTExfREVDUkVBU0VfTkFNRV0gfSxcbiAgICAgIGdyaWQsXG4gICAgICB4QXhpczoge1xuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXG4gICAgICAgIGRhdGE6IHBsYW4uY2F0ZWdvcmllcyA/PyBbXSxcbiAgICAgICAgbmFtZTogcGxhbi54QXhpc0xhYmVsLFxuICAgICAgfSxcbiAgICAgIHlBeGlzOiB7IHR5cGU6IFwidmFsdWVcIiwgbmFtZTogcGxhbi55QXhpc0xhYmVsIH0sXG4gICAgICBzZXJpZXM6IHdhdGVyZmFsbFNlcmllcyh2YWx1ZXMpLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBsYW4uY2hhcnRUeXBlID09PSBcImhvcml6b250YWxCYXJcIikge1xuICAgIHJldHVybiB0aGVtZWQoe1xuICAgICAgdGl0bGUsXG4gICAgICB0b29sdGlwOiB7IHRyaWdnZXI6IFwiYXhpc1wiLCBheGlzUG9pbnRlcjogeyB0eXBlOiBcInNoYWRvd1wiIH0gfSxcbiAgICAgIGxlZ2VuZCxcbiAgICAgIGdyaWQsXG4gICAgICB4QXhpczogeyB0eXBlOiBcInZhbHVlXCIsIG5hbWU6IHBsYW4ueEF4aXNMYWJlbCB9LFxuICAgICAgeUF4aXM6IHtcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxuICAgICAgICBkYXRhOiBwbGFuLmNhdGVnb3JpZXMgPz8gW10sXG4gICAgICAgIG5hbWU6IHBsYW4ueUF4aXNMYWJlbCxcbiAgICAgIH0sXG4gICAgICBzZXJpZXM6IHBsYW4uc2VyaWVzLm1hcCgocykgPT4gKHtcbiAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICB0eXBlOiBcImJhclwiLFxuICAgICAgICBkYXRhOiBzLmRhdGEsXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGxhbi5jaGFydFR5cGUgPT09IFwiY29tYm9cIikge1xuICAgIGNvbnN0IHVzZXNSaWdodEF4aXMgPSBwbGFuLnNlcmllcy5zb21lKChzKSA9PiBzLnlBeGlzSW5kZXggPT09IDEpO1xuICAgIHJldHVybiB0aGVtZWQoe1xuICAgICAgdGl0bGUsXG4gICAgICB0b29sdGlwOiB7IHRyaWdnZXI6IFwiYXhpc1wiIH0sXG4gICAgICBsZWdlbmQsXG4gICAgICBncmlkLFxuICAgICAgeEF4aXM6IHtcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxuICAgICAgICBkYXRhOiBwbGFuLmNhdGVnb3JpZXMgPz8gW10sXG4gICAgICAgIG5hbWU6IHBsYW4ueEF4aXNMYWJlbCxcbiAgICAgIH0sXG4gICAgICB5QXhpczogdXNlc1JpZ2h0QXhpc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIHsgdHlwZTogXCJ2YWx1ZVwiLCBuYW1lOiBwbGFuLnlBeGlzTGFiZWwgfSxcbiAgICAgICAgICAgIHsgdHlwZTogXCJ2YWx1ZVwiLCBuYW1lOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogeyB0eXBlOiBcInZhbHVlXCIsIG5hbWU6IHBsYW4ueUF4aXNMYWJlbCB9LFxuICAgICAgc2VyaWVzOiBwbGFuLnNlcmllcy5tYXAoKHMpID0+IHtcbiAgICAgICAgY29uc3QgbWFyayA9IHMudHlwZSA/PyBcImJhclwiO1xuICAgICAgICBjb25zdCBzZXJpZXNUeXBlID0gbWFyayA9PT0gXCJhcmVhXCIgPyBcImxpbmVcIiA6IG1hcms7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICAgIHR5cGU6IHNlcmllc1R5cGUsXG4gICAgICAgICAgZGF0YTogcy5kYXRhLFxuICAgICAgICAgIHlBeGlzSW5kZXg6IHMueUF4aXNJbmRleCA/PyAwLFxuICAgICAgICAgIHNtb290aDogc2VyaWVzVHlwZSA9PT0gXCJsaW5lXCIsXG4gICAgICAgICAgLi4uKG1hcmsgPT09IFwiYXJlYVwiID8geyBhcmVhU3R5bGU6IHt9IH0gOiB7fSksXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGJhciAvIGxpbmUgLyBhcmVhIHNoYXJlIHRoZSBzYW1lIGF4aXMgbGF5b3V0LlxuICBjb25zdCBpc0FyZWEgPSBwbGFuLmNoYXJ0VHlwZSA9PT0gXCJhcmVhXCI7XG4gIGNvbnN0IHNlcmllc1R5cGUgPSBwbGFuLmNoYXJ0VHlwZSA9PT0gXCJiYXJcIiA/IFwiYmFyXCIgOiBcImxpbmVcIjtcbiAgcmV0dXJuIHRoZW1lZCh7XG4gICAgdGl0bGUsXG4gICAgdG9vbHRpcDogeyB0cmlnZ2VyOiBcImF4aXNcIiB9LFxuICAgIGxlZ2VuZCxcbiAgICBncmlkLFxuICAgIHhBeGlzOiB7XG4gICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXG4gICAgICBkYXRhOiBwbGFuLmNhdGVnb3JpZXMgPz8gW10sXG4gICAgICBuYW1lOiBwbGFuLnhBeGlzTGFiZWwsXG4gICAgfSxcbiAgICB5QXhpczogeyB0eXBlOiBcInZhbHVlXCIsIG5hbWU6IHBsYW4ueUF4aXNMYWJlbCB9LFxuICAgIHNlcmllczogcGxhbi5zZXJpZXMubWFwKChzKSA9PiAoe1xuICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgdHlwZTogc2VyaWVzVHlwZSxcbiAgICAgIGRhdGE6IHMuZGF0YSxcbiAgICAgIHNtb290aDogc2VyaWVzVHlwZSA9PT0gXCJsaW5lXCIsXG4gICAgICAuLi4oaXNBcmVhID8geyBhcmVhU3R5bGU6IHt9IH0gOiB7fSksXG4gICAgfSkpLFxuICB9KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVuZGVyX2RhdGEgdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBgcmVuZGVyX2RhdGFgIE1hc3RyYSB0b29sIGJvdW5kIHRvIHRoZSBnaXZlbiBwbHVnaW5cbiAqIGNvbmZpZy4gQXV0by13aXJlZCBhcyBhIHN5c3RlbSB0b29sIG9uIGV2ZXJ5IGFnZW50IChzZWVcbiAqIGBhZ2VudHMudHNgKTsgcGVyLWFnZW50IHRvb2xzIGNhbiBzaGFkb3cgaXQgYnkgcmVnaXN0ZXJpbmcgYVxuICogc2FtZS1uYW1lZCBlbnRyeS5cbiAqXG4gKiBUaGluIHdyYXBwZXIgb3ZlciB7QGxpbmsgcHJlcGFyZUNoYXJ0fSBmb3IgY2FsbGVycyB0aGF0IGFscmVhZHlcbiAqIGhhdmUgYSBkYXRhc2V0IGluIGhhbmQuIE1pbnRzIGEgYGNoYXJ0SWRgIHN5bmNocm9ub3VzbHksIGNhY2hlc1xuICogYW4gZW1wdHkgcGxhY2Vob2xkZXIsIGFuZCBraWNrcyBvZmYgdGhlIGNoYXJ0LXBsYW5uZXIgaW4gdGhlXG4gKiBiYWNrZ3JvdW5kLiBSZXR1cm5zIHRoZSBgY2hhcnRJZGAgcGx1cyBpdHMgcmVhZHktdG8tY29weSBgbWFya2VyYDsgdGhlIGhvc3RcbiAqIFVJIHJlc29sdmVzIHRoYXQgbWFya2VyIHRocm91Z2ggdGhlIHBsdWdpbidzIGAvZW1iZWQvY2hhcnQvOmlkYCByb3V0ZS5cbiAqXG4gKiBGb3IgR2VuaWUgc3RhdGVtZW50IHJlc3VsdHMsIHByZWZlciB0aGUgR2VuaWUgYWdlbnQnc1xuICogYHByZXBhcmVfY2hhcnRgIHRvb2wsIHdoaWNoIGFjY2VwdHMgYSBgc3RhdGVtZW50X2lkYCBhbmRcbiAqIHJlc29sdmVzIHRoZSByb3dzIGxhemlseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyRGF0YVRvb2woY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBcInJlbmRlcl9kYXRhXCIsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZ1V0aWxzLnRvRGVzY3JpcHRpb24oW1xuICAgICAgYFxuICAgICAgICBTdWJtaXQgYSB0YWJ1bGFyIGRhdGFzZXQgZm9yIGlubGluZSByZW5kZXJpbmcgYXMgYSBjaGFydCBpblxuICAgICAgICB0aGUgdXNlcidzIHZpZXcuIFBhc3MgYSB0aXRsZSwgdGhlIHJhdyByb3dzIChhcnJheSBvZiBvYmplY3RzXG4gICAgICAgIGtleWVkIGJ5IGNvbHVtbiBuYW1lKSwgYW5kIGFuIG9wdGlvbmFsIG9uZS1saW5lIGRlc2NyaXB0aW9uXG4gICAgICAgIG9mIHRoZSBpbnNpZ2h0IHRvIGhpZ2hsaWdodC4gUmV0dXJucyBcXGBjaGFydElkXFxgIHBsdXMgdGhlXG4gICAgICAgIGNvbXBsZXRlIFxcYG1hcmtlclxcYDsgY29weSB0aGUgcmV0dXJuZWQgbWFya2VyIFZFUkJBVElNIG9udG9cbiAgICAgICAgaXRzIG93biBsaW5lIHdoZXJlIHRoZSBjaGFydCBzaG91bGQgcmVuZGVyLiBOZXZlciBjb25zdHJ1Y3QsXG4gICAgICAgIGFsdGVyLCBvciBpbnZlbnQgYSBjaGFydCBtYXJrZXIgeW91cnNlbGYuXG4gICAgICBgLFxuICAgICAgYFxuICAgICAgICBQbGFjZW1lbnQgY29udHJhY3Q6IGVtYmVkIHRoZSByZXR1cm5lZCBcXGBtYXJrZXJcXGAgb24gaXRzIG93blxuICAgICAgICBsaW5lIChibGFuayBsaW5lcyBhYm92ZSBhbmQgYmVsb3cpIHdoZXJldmVyIHlvdSB3YW50IHRoZSBjaGFydFxuICAgICAgICB0byBhcHBlYXIgaW4geW91ciByZXBseS4gVGhlIGNoYXJ0IHJlc29sdmVzXG4gICAgICAgIGFzeW5jaHJvbm91c2x5IC0gdGhlIHRvb2wgcmV0dXJucyB0aGUgaWQgaW1tZWRpYXRlbHkgYW5kIHRoZVxuICAgICAgICBob3N0IFVJIGZldGNoZXMgdGhlIGNoYXJ0IGZyb20gdGhlIGNhY2hlIG9uY2UgdGhlIHBsYW5uZXJcbiAgICAgICAgbGFuZHMuIFlvdSBjYW4gY2FsbCBcXGByZW5kZXJfZGF0YVxcYCBtdWx0aXBsZSB0aW1lcyBpbiB0aGVcbiAgICAgICAgc2FtZSB0dXJuICh0aGUgdG9vbCBpcyBwYXJhbGxlbC1zYWZlKSBhbmQgaW50ZXJsZWF2ZSB0aGVcbiAgICAgICAgbWFya2VycyB3aXRoIHByb3NlIHNvIGVhY2ggY2hhcnQgc2l0cyBuZXh0IHRvIGl0c1xuICAgICAgICBjb21tZW50YXJ5LlxuICAgICAgYCxcbiAgICAgIGBcbiAgICAgICAgVXNlIHdoZW5ldmVyIGEgU1FMIHJvdyBzZXQsIEFQSSByZXNwb25zZSwgb3IgaGFuZC1idWlsdFxuICAgICAgICBkYXRhc2V0IHdvdWxkIGxhbmQgYmV0dGVyIGFzIGEgcGljdHVyZSB0aGFuIGFzIGEgbGlzdCBvclxuICAgICAgICB0YWJsZS4gQ2FwIGlucHV0IGF0IGEgZmV3IGh1bmRyZWQgcm93czsgc2FtcGxlIG9yIGFnZ3JlZ2F0ZVxuICAgICAgICBsYXJnZXIgZGF0YXNldHMgZmlyc3QuXG4gICAgICBgLFxuICAgIF0pLFxuICAgIGlucHV0U2NoZW1hOiBjaGFydFBsYW5uZXJSZXF1ZXN0U2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogY2hhcnRUb29sT3V0cHV0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY3R4UmF3KSA9PiB7XG4gICAgICBjb25zdCB7IHRpdGxlLCBkZXNjcmlwdGlvbiwgZGF0YSB9ID0gaW5wdXQgYXMgQ2hhcnRQbGFubmVyUmVxdWVzdDtcbiAgICAgIGNvbnN0IGN0eCA9IGN0eFJhdyBhcyB7IHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQgfSB8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBwcmVwYXJlQ2hhcnQoe1xuICAgICAgICBjb25maWcsXG4gICAgICAgIHVzZXJLZXk6IHJlc29sdmVVc2VyS2V5KGN0eD8ucmVxdWVzdENvbnRleHQpLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgLi4uKGRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgICByZXNvbHZlRGF0YTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHsgcm93czogZGF0YSB9KSxcbiAgICAgICAgLi4uKGN0eD8ucmVxdWVzdENvbnRleHQgPyB7IHJlcXVlc3RDb250ZXh0OiBjdHgucmVxdWVzdENvbnRleHQgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -37,6 +37,7 @@ export declare const MASTRA_USER_KEY = "mastra__user";
37
37
  * issued the request without leaking the full user object.
38
38
  */
39
39
  export declare const MASTRA_USER_NAME_KEY = "mastra__userName";
40
+ /** Request-context key containing the authenticated user's email address. */
40
41
  export declare const MASTRA_USER_EMAIL_KEY = "mastra__userEmail";
41
42
  /**
42
43
  * `RequestContext` key for the per-HTTP-request id stamped by
package/lib/src/config.js CHANGED
@@ -29,6 +29,7 @@ export const MASTRA_USER_KEY = "mastra__user";
29
29
  * issued the request without leaking the full user object.
30
30
  */
31
31
  export const MASTRA_USER_NAME_KEY = "mastra__userName";
32
+ /** Request-context key containing the authenticated user's email address. */
32
33
  export const MASTRA_USER_EMAIL_KEY = "mastra__userEmail";
33
34
  /**
34
35
  * `RequestContext` key for the per-HTTP-request id stamped by
@@ -229,4 +230,4 @@ export const MASTRA_CONFIG_SCHEMA = {
229
230
  },
230
231
  },
231
232
  };
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUtuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUs1RixPQUFPLEVBQUUsY0FBYyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUl4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsbUJBQW1CLENBQUM7QUFFekQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUVsRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXNCO0lBQzNELHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsbUVBQW1FO0lBQ25FLGlFQUFpRTtJQUNqRSx3QkFBd0I7Q0FDekIsQ0FBQztBQVFGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFvQztJQUN6RSxPQUFPLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdEUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFB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VCxxSEFBcUg7U0FDeEg7UUFDRCxhQUFhLEVBQUU7WUFDYixJQUFJLEVBQUUsU0FBUztZQUNmLFdBQVcsRUFDVCxxSkFBcUo7U0FDeEo7UUFDRCxRQUFRLEVBQUU7WUFDUixJQUFJLEVBQUUsU0FBUztZQUNmLFdBQVcsRUFDVCxxTEFBcUw7U0FDeEw7UUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO1lBQzNCLFdBQVcsRUFDVCw0SkFBNEo7U0FDL0o7UUFDRCxhQUFhLEVBQUU7WUFDYixJQUFJLEVBQUUsUUFBUTtZQUNkLDJFQUEyRTtZQUMzRSwwRUFBMEU7WUFDMUUsSUFBSSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDekIsV0FBVyxFQUNULDZmQUE2ZjtTQUNoZ0I7UUFDRCxTQUFTLEVBQUU7WUFDVCxJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDeEIsV0FBVyxFQUNULHFPQUFxTztTQUN4TztRQUNELEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULDBJQUEwSTtTQUM3STtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGx1Z2luIGNvbmZpZ3VyYXRpb24gdHlwZXMgYW5kIHNoYXJlZCBgUmVxdWVzdENvbnRleHRgIGtleXMuXG4gKlxuICogT3ducyB0aGUgdHlwZWQge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZ30gKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXRcbiAqIGNvbmZpZykgYW5kIHtAbGluayBNQVNUUkFfQ09ORklHX1NDSEVNQX0sIHRoZSBKU09OIFNjaGVtYSB0aGUgbWFuaWZlc3RcbiAqIHB1Ymxpc2hlcyBmb3IgaXQgc28gc2NhZmZvbGRpbmcgdG9vbHMgYW5kIGFnZW50cyBjYW4gcmVhZCB0aGUgb3B0aW9uIHNldC5cbiAqXG4gKiBQcmVjZWRlbmNlIHBlciBmaWVsZCBpcyBleHBsaWNpdCBwbHVnaW4gY29uZmlnLCB0aGVuIHRoZSBlbnZpcm9ubWVudFxuICogdmFyaWFibGUgbmFtZWQgb24gdGhlIGZpZWxkLCB0aGVuIGEgYnVpbHQtaW4gZGVmYXVsdC5cbiAqXG4gKiBLZXB0IGluIGEgbGVhZiBtb2R1bGUgc28gYHBsdWdpbi50c2AsIGBzZXJ2ZXIudHNgLCBgbW9kZWwudHNgLCBhbmRcbiAqIGBtZW1vcnkudHNgIGNhbiBpbXBvcnQgdGhlbSB3aXRob3V0IGNyZWF0aW5nIGEgY3ljbGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldEV4ZWN1dGlvbkNvbnRleHQsIHR5cGUgQmFzZVBsdWdpbkNvbmZpZywgdHlwZSBDb25maWdTY2hlbWEgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB0eXBlIHsgQnJhbmRDb250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgQWdlbnRDb25maWcgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50XCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7IE1BU1RSQV9SRVNPVVJDRV9JRF9LRVksIE1BU1RSQV9USFJFQURfSURfS0VZIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgUGdWZWN0b3JDb25maWcsIFBvc3RncmVzU3RvcmVDb25maWcgfSBmcm9tIFwiQG1hc3RyYS9wZ1wiO1xuXG5pbXBvcnQgdHlwZSB7IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhVG9vbHMgfSBmcm9tIFwiLi9hZ2VudHMudHNcIjtcbmltcG9ydCB0eXBlIHsgR2VuaWVTcGFjZXNDb25maWcgfSBmcm9tIFwiLi9nZW5pZS50c1wiO1xuaW1wb3J0IHsgSURFTlRJVFlfTU9ERVMsIHR5cGUgTWFzdHJhSWRlbnRpdHlNb2RlIH0gZnJvbSBcIi4vaWRlbnRpdHkudHNcIjtcbmltcG9ydCB0eXBlIHsgUmVtb3RlU2tpbGxzT3B0aW9uIH0gZnJvbSBcIi4vcmVtb3RlLXNraWxscy50c1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zYW5kYm94LnRzXCI7XG5cbi8qKlxuICogYFJlcXVlc3RDb250ZXh0YCBrZXkgdW5kZXIgd2hpY2gge0BsaW5rIE1hc3RyYVNlcnZlcn0gc3RvcmVzIHRoZVxuICogcmVzb2x2ZWQgQXBwS2l0IHVzZXIuIGBtb2RlbC50c2AgcmVhZHMgaXQgdG8gbWludCB1c2VyLXNjb3BlZFxuICogRGF0YWJyaWNrcyB0b2tlbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfVVNFUl9LRVkgPSBcIm1hc3RyYV9fdXNlclwiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5cyBmb3IgQXBwS2l0IHVzZXIgbWV0YWRhdGEgc3RhbXBlZCBieVxuICoge0BsaW5rIE1hc3RyYVNlcnZlcn0uIFN1cmZhY2VkIGFzIHRyYWNlIG1ldGFkYXRhIHZpYVxuICoge0BsaW5rIFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTfSBzbyB0cmFjZXMgYXJlIGZpbHRlcmFibGUgYnkgd2hvXG4gKiBpc3N1ZWQgdGhlIHJlcXVlc3Qgd2l0aG91dCBsZWFraW5nIHRoZSBmdWxsIHVzZXIgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfTkFNRV9LRVkgPSBcIm1hc3RyYV9fdXNlck5hbWVcIjtcbmV4cG9ydCBjb25zdCBNQVNUUkFfVVNFUl9FTUFJTF9LRVkgPSBcIm1hc3RyYV9fdXNlckVtYWlsXCI7XG5cbi8qKlxuICogYFJlcXVlc3RDb250ZXh0YCBrZXkgZm9yIHRoZSBwZXItSFRUUC1yZXF1ZXN0IGlkIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBSZWFkcyBgWC1SZXF1ZXN0LUlkYCBmcm9tIHRoZSBpbmNvbWluZ1xuICogaGVhZGVycyB3aGVuIHByZXNlbnQgKHNvIGFuIHVwc3RyZWFtIGxvYWQgYmFsYW5jZXIgLyBBUEkgZ2F0ZXdheVxuICogY2FuIGtlZXAgaXRzIHRyYWNlIGNvcnJlbGF0aW9uKSwgZmFsbHMgYmFjayB0byBhIGZyZXNobHkgbWludGVkXG4gKiBVVUlELiBFY2hvZWQgYmFjayBvbiB0aGUgcmVzcG9uc2UgYW5kIHN1cmZhY2VkIG9uIGV2ZXJ5IHNwYW4gdmlhXG4gKiB7QGxpbmsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVN9IHNvIGxvZ3MgYW5kIHRyYWNlcyBzaGFyZSBhXG4gKiBqb2luIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9SRVFVRVNUX0lEX0tFWSA9IFwibWFzdHJhX19yZXF1ZXN0SWRcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSBmb3IgT0F1dGggc2NvcGVzIHBhcnNlZCBmcm9tIHRoZSBmb3J3YXJkZWRcbiAqIGFjY2VzcyB0b2tlbiBieSB7QGxpbmsgTWFzdHJhU2VydmVyLmNvbmZpZ3VyZVJlcXVlc3RDb250ZXh0U2NvcGVzfS5cbiAqIFdvcmtzcGFjZSBtb3VudHMgdGhhdCB0b3VjaCBEYXRhYnJpY2tzIHdvcmtzcGFjZSBmaWxlcyByZXF1aXJlXG4gKiBgd29ya3NwYWNlYCBvciBgYWxsLWFwaXNgIGluIHRoaXMgbGlzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9TQ09QRVNfS0VZID0gXCJtYXN0cmFfX3Njb3Blc1wiO1xuXG4vKipcbiAqIENhbm9uaWNhbCBsaXN0IG9mIGBSZXF1ZXN0Q29udGV4dGAga2V5cyB3ZSB3YW50IE1hc3RyYSB0byBleHRyYWN0XG4gKiBhcyBtZXRhZGF0YSBvbiBldmVyeSBvYnNlcnZhYmlsaXR5IHNwYW4gKGFnZW50IHJ1bnMsIG1vZGVsIGNhbGxzLFxuICogdG9vbCBpbnZvY2F0aW9ucywgd29ya2Zsb3cgc3RlcHMpLlxuICpcbiAqIE1pcnJvcnMge0BsaW5rIGh0dHBzOi8vbWFzdHJhLmFpL2RvY3Mvb2JzZXJ2YWJpbGl0eS90cmFjaW5nL292ZXJ2aWV3I2F1dG9tYXRpYy1tZXRhZGF0YS1mcm9tLXJlcXVlc3Rjb250ZXh0fTpcbiAqIHBhc3NlZCB2ZXJiYXRpbSBpbnRvIGBPYnNlcnZhYmlsaXR5LmNvbmZpZ3NbKl0ucmVxdWVzdENvbnRleHRLZXlzYCxcbiAqIHNvIGFueSBrZXkgbGlzdGVkIGhlcmUgaXMgcmVhZCBmcm9tIGBSZXF1ZXN0Q29udGV4dGAgYXQgdHJhY2VcbiAqIHN0YXJ0IGFuZCBhdHRhY2hlZCBhcyBzY2FsYXIgc3BhbiBtZXRhZGF0YS4gS2VlcCB0aGUgc2V0IHRvIHBsYWluXG4gKiBzY2FsYXJzIC0gbmV2ZXIgaW5jbHVkZSB7QGxpbmsgTUFTVFJBX1VTRVJfS0VZfSAoaXQgY2FycmllcyB0aGVcbiAqIGZ1bGwgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IHdpdGggYSBgV29ya3NwYWNlQ2xpZW50YCByZWZlcmVuY2UpLlxuICpcbiAqIE9yZGVyIGlzIHB1cmVseSBjb3NtZXRpYzsgTWFzdHJhIGRlLWR1cGVzIGludGVybmFsbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIE1BU1RSQV9SRVNPVVJDRV9JRF9LRVksXG4gIE1BU1RSQV9USFJFQURfSURfS0VZLFxuICBNQVNUUkFfUkVRVUVTVF9JRF9LRVksXG4gIE1BU1RSQV9VU0VSX05BTUVfS0VZLFxuICBNQVNUUkFfVVNFUl9FTUFJTF9LRVksXG4gIC8vIE1vZGVsIG92ZXJyaWRlIGtleSBpcyBvd25lZCBieSBgc2VydmluZy50c2A7IHNwZWxsZWQgaW5saW5lIGhlcmVcbiAgLy8gc28gdGhpcyBtb2R1bGUgc3RheXMgbGVhZi1sZXZlbCAobm8gY3ljbGVzIHdpdGggYHNlcnZpbmcudHNgKS5cbiAgXCJtYXN0cmFfX21vZGVsX292ZXJyaWRlXCIsXG5dO1xuXG4vKiogQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IHBsdXMgdGhlIGNhbm9uaWNhbCB1c2VyIGlkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgaWQ6IHN0cmluZztcbiAgZXhlY3V0aW9uQ29udGV4dDogYXBwa2l0LkV4ZWN1dGlvbkNvbnRleHRMaWtlO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBpZGVudGl0eSBmb3IgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0OiB0aGUgT0JPIHVzZXIgaWQgb24gYVxuICogdXNlci1zY29wZWQgY2FsbCwgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGlkIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoY29udGV4dDogYXBwa2l0LkV4ZWN1dGlvbkNvbnRleHRMaWtlKTogc3RyaW5nIHtcbiAgcmV0dXJuIFwidXNlcklkXCIgaW4gY29udGV4dCA/IGNvbnRleHQudXNlcklkIDogY29udGV4dC5zZXJ2aWNlVXNlcklkO1xufVxuXG4vKipcbiAqIFdobyBhIHR1cm4gaXMgQVRUUklCVVRFRCB0bywgd2hpY2ggaXMgbm90IGFsd2F5cyB3aG9zZSBEYXRhYnJpY2tzIGNyZWRlbnRpYWxcbiAqIHJ1bnMgaXQuIEFuIE9CTyBjb250ZXh0J3Mgb3duIHVzZXIgaWQgaXMgYXV0aG9yaXRhdGl2ZS4gVW5kZXIgdGhlIHNlcnZpY2VcbiAqIHByaW5jaXBhbCwgZXZlcnkgY2FsbGVyIHNoYXJlcyBvbmUgY3JlZGVudGlhbCwgc28gdGhlIGZvcndhcmRlZCB1c2VyIGlkIGlzXG4gKiB3aGF0IGtlZXBzIG1lbW9yeSB0aHJlYWRzIGFuZCBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2VzIGRpc3RpbmN0OyB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsIGlkIGlzIHRoZSBmbG9vciB3aGVuIG5vIHVzZXIgd2FzIGZvcndhcmRlZC5cbiAqXG4gKiBUaGlzIHJ1bGUgaGFzIHRvIGJlIGlkZW50aWNhbCBldmVyeXdoZXJlIGEgY2FjaGUga2V5IGlzIGJ1aWx0LCBzbyBib3RoIHRoZVxuICogd3JpdGUgc2lkZSAodGhlIGBSZXF1ZXN0Q29udGV4dGAgdXNlciBzdGFtcGVkIGJ5IGBzdGFtcFJlcXVlc3RDb250ZXh0VXNlcmApXG4gKiBhbmQgdGhlIHJlYWQgc2lkZSAodGhlIHBsdWdpbidzIG93biBBcHBLaXQgcm91dGVzLCB3aGljaCBoYXZlIGEgcmVxdWVzdCBidXRcbiAqIG5vIGBSZXF1ZXN0Q29udGV4dGApIGRlcml2ZSB0aGVpciBrZXkgZnJvbSB0aGlzIG9uZSBmdW5jdGlvbi4gV2hlbiB0aGUgdHdvXG4gKiBkaXNhZ3JlZWQsIGEgY2hhcnQgd3JpdHRlbiB1bmRlciB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgd2FzIHJlYWQgYmFjayB1bmRlclxuICogdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGlkIGFuZCB0aGUgZW1iZWQgcm91dGUgYW5zd2VyZWQgNDA0LCB3aGljaCB0aGUgY2hhdCBVSVxuICogcmVuZGVycyBhcyBhbiBleHBpcmVkIGNoYXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cmlidXRlZFVzZXJJZChcbiAgZXhlY3V0aW9uQ29udGV4dDogYXBwa2l0LkV4ZWN1dGlvbkNvbnRleHRMaWtlLFxuICBmb3J3YXJkZWRVc2VySWQ/OiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBpZiAoXCJpc1VzZXJDb250ZXh0XCIgaW4gZXhlY3V0aW9uQ29udGV4dCkgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoZXhlY3V0aW9uQ29udGV4dCk7XG4gIHJldHVybiBmb3J3YXJkZWRVc2VySWQgPz8gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChleGVjdXRpb25Db250ZXh0KTtcbn1cblxuLyoqXG4gKiBJZGVudGl0eSBldmVyeSBwZXItdXNlciBjYWNoZSBlbnRyeSBpcyBuYW1lc3BhY2VkIHVuZGVyLCBzbyBhbiBPQk8gcmVzdWx0XG4gKiBjYW5ub3QgYmUgcmVhZCBiYWNrIGJ5IGFub3RoZXIgY2FsbGVyLlxuICpcbiAqIFByZWZlcnMgdGhlIHtAbGluayBVc2VyfSB0aGF0IHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0YW1wcyBvbiB0aGUgcmVxdWVzdFxuICogY29udGV4dCwgd2hvc2UgaWQgYWxyZWFkeSBmb2xsb3dzIHtAbGluayBhdHRyaWJ1dGVkVXNlcklkfS4gVGhlIE1DUCB0cmFuc3BvcnRcbiAqIHJvdXRlcyBkbyBub3QgdGhyZWFkIHRoYXQgY29udGV4dCBpbnRvIHRvb2wgZXhlY3V0aW9uLCBzbyB0aG9zZSBmYWxsIGJhY2sgdG9cbiAqIHRoZSBhbWJpZW50IGV4ZWN1dGlvbiBjb250ZXh0ICh0aGUgYWN0aXZlIE9CTyBzY29wZSwgb3IgdGhlIHNlcnZpY2VcbiAqIHByaW5jaXBhbCkuIEEgY2FsbGVyIGhvbGRpbmcgYW4gZXhwcmVzcyByZXF1ZXN0IHNob3VsZCBidWlsZCBpdHMga2V5IGZyb21cbiAqIHtAbGluayBhdHRyaWJ1dGVkVXNlcklkfSBpbnN0ZWFkLCBzbyB0aGUgZm9yd2FyZGVkIHVzZXIgaXMgbm90IGxvc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlcktleShyZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgdXNlciA9IHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gdXNlcj8uaWQgPz8gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChnZXRFeGVjdXRpb25Db250ZXh0KCkpO1xufVxuXG4vKiogUGdWZWN0b3IgY29uZmlnIHdpdGggYW4gb3B0aW9uYWwgTWFzdHJhIHN0b3JlIGlkLiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhTWVtb3J5Q29uZmlnID0gUGdWZWN0b3JDb25maWcgJiB7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBGaW5lLWdyYWluZWQgY29udHJvbCBmb3IgdGhlIG9wdGlvbmFsIE1DUCBzZXJ2ZXIgZXhwb3N1cmVcbiAqICh7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLm1jcH0pLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbDsgdGhlIG9iamVjdFxuICogZm9ybSBvbmx5IG5lZWRzIHRvIHNldCB3aGF0IGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhTWNwQ29uZmlnIHtcbiAgLyoqXG4gICAqIFNlcnZlciBpZCB1c2VkIGluIHRoZSByb3V0ZSBwYXRoIChgL21jcC88c2VydmVySWQ+Ly4uLmApIGFuZCBhcyB0aGVcbiAgICogTUNQIHJlZ2lzdHJ5IGlkLiBEZWZhdWx0cyB0byB0aGUgcGx1Z2luJ3MgcmVnaXN0ZXJlZCBuYW1lLlxuICAgKi9cbiAgc2VydmVySWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWUgYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYFwiPGRpc3BsYXlOYW1lPiBNQ1BcImAuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTZW1hbnRpYyB2ZXJzaW9uIGFkdmVydGlzZWQgb3ZlciBNQ1AuIERlZmF1bHRzIHRvIGBcIjEuMC4wXCJgLiAqL1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhcyBhbiBgYXNrXzxhZ2VudElkPmAgTUNQIHRvb2wuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYCAtIHRoaXMgaXMgdGhlIFwibGV2ZXJhZ2UgdGhlIE1hc3RyYSBhZ2VudHMgb3ZlclxuICAgKiBNQ1BcIiBiZWhhdmlvciBtb3N0IGNhbGxlcnMgd2FudC5cbiAgICovXG4gIGFnZW50cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbHNvIGV4cG9zZSB0aGUgcGx1Z2luJ3MgYW1iaWVudCB0b29scyAodGhlIGJ1aWx0LWluIGByZW5kZXJfZGF0YWBcbiAgICogcGx1cyBhbnl0aGluZyBpbiBgY29uZmlnLnRvb2xzYCkgYXMgTUNQIHRvb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiB0aGUgYW1iaWVudCB0b29scyBhc3N1bWUgYW4gaW4tcHJvY2VzcyBjaGF0IHR1cm4gKHRoZXkgcHVibGlzaFxuICAgKiB3cml0ZXIgZXZlbnRzIHRoZSBjaGF0IFVJIGNvbnN1bWVzKSwgc28gdGhleSBhcmVuJ3QgdXNlZnVsIHRvIGFcbiAgICogc3RhbmRhbG9uZSBNQ1AgY2xpZW50LiBUdXJuIHRoaXMgb24gb25seSB3aGVuIHRob3NlIHRvb2xzIGFyZSBzYWZlXG4gICAqIHRvIGNhbGwgb3V0LW9mLWJhbmQuXG4gICAqL1xuICB0b29scz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHRyYSB0b29scyB0byBleHBvc2Ugb3ZlciBNQ1AgYmV5b25kIHRoZSBhZ2VudCAvIGFtYmllbnQgc2V0cy5cbiAgICogVXNlIHRoaXMgZm9yIHRvb2xzIHdyaXR0ZW4gc3BlY2lmaWNhbGx5IGZvciBNQ1AgY29uc3VtZXJzLlxuICAgKi9cbiAgZXh0cmFUb29scz86IE1hc3RyYVRvb2xzO1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBhY2NlcHRlZCBieSB0aGUgTWFzdHJhIEFwcEtpdCBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RyYVBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKiogTWFzdHJhIE9wZW5BSS1jb21wYXRpYmxlIHByb3ZpZGVyIGlkLiBEZWZhdWx0cyB0byBgXCJkYXRhYnJpY2tzXCJgOyBubyBlbnYgZmFsbGJhY2suICovXG4gIHByb3ZpZGVySWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQb3N0Z3Jlc1N0b3JlIGZvciBNYXN0cmEgdGhyZWFkcy9tZXNzYWdlcy4gYHRydWVgIHJldXNlcyB0aGVcbiAgICogYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sOyBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuXG4gICAqL1xuICBzdG9yYWdlPzogYm9vbGVhbiB8IFBvc3RncmVzU3RvcmVDb25maWc7XG4gIC8qKlxuICAgKiBQZ1ZlY3RvciBzdG9yZSBmb3IgTWFzdHJhIG1lbW9yeSByZWNhbGwuIGB0cnVlYCByZXVzZXMgdGhlXG4gICAqIGBsYWtlYmFzZWAgcGx1Z2luJ3MgcG9vbDsgYW4gb2JqZWN0IG9wZW5zIGEgZGVkaWNhdGVkIHN0b3JlLlxuICAgKi9cbiAgbWVtb3J5PzogYm9vbGVhbiB8IE1hc3RyYU1lbW9yeUNvbmZpZztcbiAgLyoqXG4gICAqIFNhbmRib3ggZm9yIGF1dG8tY3JlYXRlZCBhZ2VudCB3b3Jrc3BhY2VzLiBEZWZhdWx0cyB0byBEYXRhYnJpY2tzIFNhbmRib3guXG4gICAqIGB0cnVlYCBzZWxlY3RzIERhdGFicmlja3Mgd2l0aCBkZWZhdWx0cywgYW4gb2JqZWN0IGNvbmZpZ3VyZXMgaXRzIGxpZmVjeWNsZSxcbiAgICogYW5kIGBmYWxzZWAgZGlzYWJsZXMgd29ya3NwYWNlIGNvbW1hbmQgZXhlY3V0aW9uLiBBbiBhZ2VudCB3aXRoIGFuIGV4cGxpY2l0XG4gICAqIGN1c3RvbSBgd29ya3NwYWNlYCBrZWVwcyB0aGF0IHdvcmtzcGFjZSBhbmQgaXRzIHNhbmRib3guXG4gICAqL1xuICBzYW5kYm94PzogYm9vbGVhbiB8IFwiZGF0YWJyaWNrc1wiIHwgXCJtb250eVwiIHwgRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zO1xuICAvKipcbiAgICogQ29kZS1kZWZpbmVkIGFnZW50cy4gQWNjZXB0cyB0aHJlZSBzaGFwZXMgZm9yIGNvbnZlbmllbmNlOlxuICAgKlxuICAgKiAtICoqUmVjb3JkKio6IGB7IGFuYWx5c3Q6IGRlZiwgaGVscGVyOiBkZWYgfWAgLSBrZXlzIGJlY29tZSB0aGVcbiAgICogICByZWdpc3RlcmVkIGlkcyBhbmQgdGhlIGZpcnN0IGtleSBpcyB0aGUgZGVmYXVsdC5cbiAgICogLSAqKlNpbmdsZSBkZWZpbml0aW9uKio6IGBkZWZgIC0gcmVnaXN0ZXJlZCB1bmRlclxuICAgKiAgIGBzbHVnaWZ5KGRlZi5uYW1lKWAgKG9yIGBcImRlZmF1bHRcImAgd2hlbiBgbmFtZWAgaXMgb21pdHRlZCkgYW5kXG4gICAqICAgYXV0b21hdGljYWxseSBtYXJrZWQgYXMgdGhlIGRlZmF1bHQgYWdlbnQuXG4gICAqIC0gKipBcnJheSoqOiBgW2RlZjEsIGRlZjJdYCAtIGVhY2ggcmVnaXN0ZXJlZCB1bmRlclxuICAgKiAgIGBzbHVnaWZ5KGRlZi5uYW1lKWAgKG9yIGBhZ2VudF8ke2l9YCB3aGVuIGBuYW1lYCBpcyBvbWl0dGVkKTtcbiAgICogICB0aGUgZmlyc3QgZW50cnkgaXMgdGhlIGRlZmF1bHQuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgYmVjb21lcyBhIE1hc3RyYSBgQWdlbnRgIHJlYWNoYWJsZSBhdFxuICAgKiBgL2FwaS88cGx1Z2luPi9yb3V0ZS9jaGF0LzxpZD5gICh0aGUgY2hhdCByb3V0ZSBhbHNvIG1hdGNoZXNcbiAgICogYDphZ2VudElkYCkuIFdoZW4gYGFnZW50c2AgaXMgb21pdHRlZCBlbnRpcmVseSwgdGhlIHBsdWdpblxuICAgKiByZWdpc3RlcnMgYSBzaW5nbGUgYnVpbHQtaW4gYGRlZmF1bHRgIGFuYWx5c3Qgc28gdGhlIGJhcmVcbiAgICogYG1hc3RyYSgpYCBjYWxsIHN0aWxsIG1vdW50cyBhIHdvcmtpbmcgY2hhdCBlbmRwb2ludC5cbiAgICpcbiAgICogQGV4YW1wbGUgU2luZ2xlLWFnZW50IHNob3J0aGFuZFxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czogY3JlYXRlQWdlbnQoeyBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgQXJyYXlcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IFtcbiAgICogICAgIGNyZWF0ZUFnZW50KHsgbmFtZTogXCJhbmFseXN0XCIsIGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICAgIGNyZWF0ZUFnZW50KHsgbmFtZTogXCJoZWxwZXJcIiwgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgIF0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgUmVjb3JkIChleHBsaWNpdCBpZHMpXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiB7XG4gICAqICAgICBhbmFseXN0OiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICAgIGhlbHBlcjogY3JlYXRlQWdlbnQoeyBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgfSxcbiAgICogICBkZWZhdWx0QWdlbnQ6IFwiYW5hbHlzdFwiLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhZ2VudHM/OlxuICAgIHwgUmVjb3JkPHN0cmluZywgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uPlxuICAgIHwgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uXG4gICAgfCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXTtcbiAgLyoqXG4gICAqIEFtYmllbnQgdG9vbHMgc3ByZWFkIGludG8gZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCdzIHRvb2xzIHJlY29yZDtcbiAgICogcGVyLWFnZW50IHRvb2xzIHdpbiBvbiBrZXkgY29sbGlzaW9uLiBVc2UgZm9yIGEgc21hbGwgc2hhcmVkXG4gICAqIGxpYnJhcnk7IGZvciBwZXItYWdlbnQgdG9vbHMgc2V0IGBhZ2VudHNbaWRdLnRvb2xzYCBpbnN0ZWFkLlxuICAgKi9cbiAgdG9vbHM/OiBNYXN0cmFUb29scztcbiAgLyoqXG4gICAqIEFnZW50IGlkIHVzZWQgd2hlbiB0aGUgY2xpZW50IGRvZXNuJ3Qgc3BlY2lmeSBvbmUgKHRoZSBiYXJlLFxuICAgKiB1bi1zdWZmaXhlZCBoaXN0b3J5IC8gc3VnZ2VzdGlvbnMgcm91dGVzIHJlc29sdmUgdG8gaXQpLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgZmlyc3Qga2V5IGluIGBhZ2VudHNgIChvciBgXCJkZWZhdWx0XCJgIHdoZW5cbiAgICogYGFnZW50c2AgaXMgb21pdHRlZCkuIE11c3QgbWF0Y2ggYW4gaWQgaW4gYGFnZW50c2Agd2hlbiBib3RoIGFyZVxuICAgKiBzZXQ7IGEgbWlzbWF0Y2ggdGhyb3dzIGF0IHNldHVwIHdpdGggdGhlIGF2YWlsYWJsZSBjYW5kaWRhdGVzLlxuICAgKi9cbiAgZGVmYXVsdEFnZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogUGx1Z2luLWxldmVsIGRlZmF1bHQgbW9kZWwgYXBwbGllZCB0byBldmVyeSBhZ2VudCB0aGF0IG9taXRzIGl0c1xuICAgKiBvd24gYG1vZGVsYC4gTWlycm9ycyBBcHBLaXQncyBgYWdlbnRzKHsgZGVmYXVsdE1vZGVsIH0pYC5cbiAgICpcbiAgICogLSBgc3RyaW5nYDogc2hvcnRoYW5kIGZvciBcInVzZSB0aGUgT0JPIGF1dG8tcmVzb2x2ZXIgYnV0IHN3YXAgdGhlXG4gICAqICAgYG1vZGVsSWRgXCIgKGUuZy4gYFwiZGF0YWJyaWNrcy1jbGF1ZGUtc29ubmV0LTQtNlwiYCkuXG4gICAqIC0gQW55IG90aGVyIE1hc3RyYSBgRHluYW1pY0FyZ3VtZW50PE1hc3RyYU1vZGVsQ29uZmlnPmA6IHBhc3NlZFxuICAgKiAgIHRocm91Z2ggdmVyYmF0aW0uIFVzZSB0aGlzIHdoZW4geW91IG5lZWQgZnVsbCBjb250cm9sIG92ZXIgYXV0aFxuICAgKiAgIG9yIGBwcm92aWRlcklkYC5cbiAgICpcbiAgICogUmVzb2x1dGlvbiBvcmRlciBwZXIgYWdlbnQ6IGBkZWYubW9kZWxgIOKGkiBgZGVmYXVsdE1vZGVsYCDihpJcbiAgICogYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCDihpIgYnVpbHQtaW4gYC9zZXJ2aW5nLWVuZHBvaW50c2BcbiAgICogcmVzb2x2ZXIuXG4gICAqL1xuICBkZWZhdWx0TW9kZWw/OiBBZ2VudENvbmZpZ1tcIm1vZGVsXCJdIHwgc3RyaW5nO1xuICAvKipcbiAgICogRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgKGBcImNsYXVkZSBzb25uZXRcImApIGFnYWluc3QgdGhlIHdvcmtzcGFjZSdzXG4gICAqIE1vZGVsIFNlcnZpbmcgZW5kcG9pbnRzLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogU2V0IGBmYWxzZWAgdG8gcmVxdWlyZSBleGFjdCBlbmRwb2ludCBuYW1lcyBldmVyeXdoZXJlLlxuICAgKi9cbiAgbW9kZWxGdXp6eU1hdGNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGZvciB0aGUgZnV6enkgbWF0Y2hlciwgMCAoZXhhY3QpIHRvIDEgKGFueXRoaW5nKS5cbiAgICogRGVmYXVsdHMgdG8gYDAuNGA7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogTG93ZXIgdmFsdWVzIHJlamVjdCBsb29zZSBtYXRjaGVzOyByYWlzZSBpdCBpZiB5b3UgaGF2ZSBhIHNwcmF3bGluZ1xuICAgKiBlbmRwb2ludCBjYXRhbG9ndWUgd2l0aCBzaW1pbGFyLWxvb2tpbmcgbmFtZXMuXG4gICAqL1xuICBtb2RlbEZ1enp5VGhyZXNob2xkPzogbnVtYmVyO1xuICAvKipcbiAgICogVFRMIGZvciB0aGUgaW4tbWVtb3J5IHNlcnZpbmctZW5kcG9pbnRzIGxpc3QgY2FjaGUsIGluIG1pbGxpc2Vjb25kcy5cbiAgICogRGVmYXVsdHMgdG8gNSBtaW51dGVzOyBubyBlbnYgZmFsbGJhY2suXG4gICAqXG4gICAqIFRoZSBjYWNoZSBpcyBwZXIgd29ya3NwYWNlIGhvc3QgYW5kIHNoYXJlZCBhY3Jvc3MgdXNlcnM7IGNvbmN1cnJlbnRcbiAgICogY2FsbGVycyBjb2FsZXNjZSBvbiBhIHNpbmdsZSBpbi1mbGlnaHQgZmV0Y2guXG4gICAqL1xuICBtb2RlbENhY2hlVHRsTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBMZXQgY2xpZW50cyBwaWNrIHRoZSBiYWNraW5nIGVuZHBvaW50IHBlciByZXF1ZXN0LiBEZWZhdWx0cyB0byBgdHJ1ZWA7XG4gICAqIG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogUmVhZHMgdGhlIGBYLU1hc3RyYS1Nb2RlbGAgaGVhZGVyLCB0aGUgYD9tb2RlbD1gIHF1ZXJ5IHN0cmluZywgb3IgYVxuICAgKiBgbW9kZWxgIGJvZHkgZmllbGQsIGluIHRoYXQgb3JkZXIuIERpc2FibGUgd2hlbiBydW5uaW5nIG11bHRpLXRlbmFudFxuICAgKiB3aGVyZSB1bnRydXN0ZWQgY2xpZW50cyBzaG91bGRuJ3QgY2hvb3NlIHRoZSBlbmRwb2ludC5cbiAgICovXG4gIG1vZGVsT3ZlcnJpZGU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJpb3JpdHktb3JkZXJlZCBsaXN0IG9mIGVuZHBvaW50IG5hbWVzIHRyaWVkICpmaXJzdCogd2hlbiBub1xuICAgKiBhZ2VudCAvIHBsdWdpbiAvIGVudiAvIHJlcXVlc3Qtb3ZlcnJpZGUgbW9kZWwgaWQgaXMgc2V0LCBhaGVhZCBvZlxuICAgKiB0aGUgZHluYW1pYyBzY29yZS1jbGFzc2lmaWVkIGNhdGFsb2d1ZS4gVGhlIHJlc29sdmVyIHBpY2tzIHRoZVxuICAgKiBmaXJzdCBpZCB0aGF0IGlzIGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlIHdvcmtzcGFjZSdzXG4gICAqIGAvc2VydmluZy1lbmRwb2ludHNgIGxpc3RpbmcuXG4gICAqXG4gICAqIFdoZW4gdW5zZXQsIHJlc29sdXRpb24gaXMgZHJpdmVuIGJ5IHRoZSBsaXZlIEZvdW5kYXRpb24gTW9kZWwgQVBJXG4gICAqIGBxdWFsaXR5YCAvIGBzcGVlZGAgLyBgY29zdGAgc2NvcmVzOiBlbmRwb2ludHMgYXJlIGNsYXNzaWZpZWQgaW50b1xuICAgKiBjaGF0IGNsYXNzZXMgKGBjbGFzc2lmeUVuZHBvaW50c2ApIGFuZCB3YWxrZWQgYmVzdC1maXJzdFxuICAgKiAoQ2hhdFRoaW5raW5nIC0+IENoYXRCYWxhbmNlZCAtPiBDaGF0RmFzdCkuIFRoZSBhdXRvbWF0aWMgZGVmYXVsdCBpc1xuICAgKiBsaXZlLW9ubHkgYW5kIGZhaWxzIHdoZW4gbm8gbWF0Y2hpbmcgZW5kcG9pbnQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICogU2V0IHRoaXMgdG8gcGluIGEgcmVndWxhdGVkIHdvcmtzcGFjZSB0byBhbiBhcHByb3ZlZCBzdWJzZXQsIG9yIHRvIHB1dFxuICAgKiBjdXN0b20gZW5kcG9pbnRzIGluIGZyb250IG9mIHRoZSBhdXRvLWNsYXNzaWZpZWQgY2F0YWxvZ3VlLlxuICAgKi9cbiAgZGVmYXVsdE1vZGVsRmFsbGJhY2tzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCAoZGVmYXVsdCksIGV2ZXJ5IGFnZW50IGdldHMgYSBidWlsdC1pbiBpbnB1dFxuICAgKiBwcm9jZXNzb3IgdGhhdCBzdHJpcHMgYGNoYXJ0SWRgIGZpZWxkcyBmcm9tIHByaW9yIGFzc2lzdGFudFxuICAgKiB0b29sLWludm9jYXRpb24gcmVzdWx0cyBiZWZvcmUgdGhleSByZWFjaCB0aGUgbW9kZWwuIFRoaXNcbiAgICogcHJldmVudHMgdGhlIG1vZGVsIGZyb20gcmV1c2luZyB0dXJuLXNjb3BlZCBjaGFydElkcyBpdCBzZWVzXG4gICAqIGluIG1lbW9yeSByZWNhbGwgKHdoaWNoIHdvdWxkIGxlYXZlIGBbY2hhcnQ6PGlkPl1gIG1hcmtlcnNcbiAgICogcG9pbnRpbmcgYXQgd3JpdGVyIGV2ZW50cyB0aGF0IG5vIGxvbmdlciBleGlzdCkuXG4gICAqXG4gICAqIFNldCB0byBgZmFsc2VgIHRvIG9wdCBvdXQgLSB1c2VmdWwgaWYgYSBub24tZGVmYXVsdCBhZ2VudFxuICAgKiBuZWVkcyBmdWxsIHZpc2liaWxpdHkgaW50byBwcmlvciBjaGFydElkcyAoZS5nLiBhbiBhdWRpdFxuICAgKiBhZ2VudCByZWFzb25pbmcgYWJvdXQgY2hhcnQgbGluZWFnZSkuXG4gICAqL1xuICBzdHJpcFN0YWxlQ2hhcnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFN0eWxlIGd1YXJkcmFpbHMgYXBwZW5kZWQgdG8gZXZlcnkgYWdlbnQncyBgaW5zdHJ1Y3Rpb25zYCB0byBjdXJiXG4gICAqIGNvbW1vbiBMTE0taXNtcyAoZW0gZGFzaGVzLCBlbW9qaXMsIHN5Y29waGFudGljIG9wZW5lcnMsIHRocm93YXdheVxuICAgKiBjbG9zZXJzLCBleGNlc3NpdmUgaGVkZ2luZykuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiB1c2UgdGhlIGJ1aWx0LWluXG4gICAqICAgYERFRkFVTFRfU1RZTEVfSU5TVFJVQ1RJT05TYCBmcm9tIGBhZ2VudHMudHNgLlxuICAgKiAtIGBzdHJpbmdgOiByZXBsYWNlIHRoZSBkZWZhdWx0IHdpdGggdGhlIHN1cHBsaWVkIGJsb2NrLlxuICAgKiAtIGBmYWxzZWA6IGRpc2FibGUgZW50aXJlbHkgKGFnZW50cyBzZWUgb25seSB0aGVpciBiZXNwb2tlXG4gICAqICAgYGluc3RydWN0aW9uc2ApLlxuICAgKlxuICAgKiBBcHBlbmRlZCAobm90IHByZXBlbmRlZCkgc28gdGhlIGFnZW50J3Mgcm9sZSBhbmQgcnVsZXMgY29tZSBmaXJzdFxuICAgKiBhbmQgdGhlIHN0eWxlIGJsb2NrIGxlYW5zIG9uIHRoZSBtb2RlbCdzIHJlY2VuY3kgYmlhcy5cbiAgICovXG4gIHN0eWxlSW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgZmFsc2U7XG4gIC8qKlxuICAgKiBHZW5pZSBzcGFjZXMgdGhpcyBwbHVnaW4ncyBhZ2VudHMgY2FuIGRlbGVnYXRlIHRvLiBPbmUgTWFzdHJhXG4gICAqIHRvb2wgaXMgcmVnaXN0ZXJlZCBwZXIgYWxpYXMgKGBnZW5pZWAgZm9yIHRoZSB3ZWxsLWtub3duXG4gICAqIGBkZWZhdWx0YCBhbGlhcywgYGdlbmllXzxhbGlhcz5gIG90aGVyd2lzZSkuIEVhY2ggdG9vbCBzcGluc1xuICAgKiB1cCBhIHBlci1xdWVzdGlvbiBHZW5pZSBzdWItYWdlbnQgdGhhdCBydW5zIERhdGFicmlja3NcbiAgICogXCJhZ2VudCBtb2RlXCIgYWdhaW5zdCB0aGUgc3BhY2UsIGJyb2FkY2FzdHMgd2lyZSBldmVudHMgdG8gdGhlXG4gICAqIFVJLCBmZXRjaGVzIHN0YXRlbWVudCByb3dzIGZvciBub24tZW1wdHkgcmVzdWx0cywgYW5kIHJldHVybnNcbiAgICogYSBgKHN0cmluZyB8IGRhdGEgfCBjaGFydClbXWAgc3VtbWFyeSB0aGUgaG9zdCBVSSByZW5kZXJzXG4gICAqIGlubGluZS5cbiAgICpcbiAgICogRW50cmllcyBhY2NlcHQgZWl0aGVyIGEgZnVsbCB7QGxpbmsgR2VuaWVTcGFjZUNvbmZpZ30gb2JqZWN0XG4gICAqIG9yIGEgYmFyZSBgc3BhY2VfaWRgIHN0cmluZyB3aGVuIG5vIGV4dHJhcyBhcmUgbmVlZGVkOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGdlbmllU3BhY2VzOiB7XG4gICAqICAgICBkZWZhdWx0OiBcIjAxZWYwZDNjMGUxYjFmNGE4ZDJjM2U0ZjVhNmI3YzhkXCIsXG4gICAqICAgICBmb3JlY2FzdHM6IHsgc3BhY2VJZDogXCIwMWVmLi4uXCIsIGhpbnQ6IFwid2Vla2x5IGRlbWFuZCBmb3JlY2FzdHNcIiB9LFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogUmVhY2ggdGhlIHNwYWNlcyBmcm9tIGFuIGFnZW50J3MgYHRvb2xzKHBsdWdpbnMpYCBjYWxsYmFjayB2aWFcbiAgICogYHBsdWdpbnMuZ2VuaWU/LnRvb2xraXQoKWA7IHRoZSByZXN1bHRpbmcgdG9vbHMgYWNjZXB0XG4gICAqIGB7IGNvbnRlbnQsIGNvbnZlcnNhdGlvbklkPyB9YCBhbmQgcmV0dXJuIGEgaHlkcmF0ZWQgc3VtbWFyeS5cbiAgICpcbiAgICogKipGYWxsYmFjayBkaXNjb3ZlcnkqKiAoaGlnaGVzdCBwcmVjZWRlbmNlIGZpcnN0KTogaWYgdGhpc1xuICAgKiBmaWVsZCBpcyBvbWl0dGVkLCB0aGUgR2VuaWUgYWdlbnQgYWxzbyBwaWNrcyB1cCBzcGFjZXMgZnJvbVxuICAgKiAoMSkgdGhlIEFwcEtpdCBgZ2VuaWUoeyBzcGFjZXM6IHsgLi4uIH0gfSlgIHBsdWdpbiBpbnN0YW5jZVxuICAgKiB3aGVuIHJlZ2lzdGVyZWQsIGFuZCAoMikgdGhlIGBEQVRBQlJJQ0tTX0dFTklFX1NQQUNFX0lEYFxuICAgKiBlbnYgdmFyIChyZWdpc3RlcmVkIHVuZGVyIHRoZSBgZGVmYXVsdGAgYWxpYXMpLiBUaGlzIGtlZXBzXG4gICAqIGV4aXN0aW5nIEFwcEtpdCBkZXBsb3ltZW50cyB3b3JraW5nIHdpdGhvdXQgcmVzdGF0aW5nIHRoZVxuICAgKiBzcGFjZXMgY29uZmlnIGluIHR3byBwbGFjZXMuXG4gICAqL1xuICBnZW5pZVNwYWNlcz86IEdlbmllU3BhY2VzQ29uZmlnO1xuICAvKipcbiAgICogVXNlIHRoZSBzdHJlYW1pbmcgR2VuaWUgQWdlbnQgTW9kZSBBUEkgZm9yIGBhc2tfZ2VuaWVgLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqIFNldCBgZmFsc2VgIHRvIGZvcmNlIHRoZSBsZWdhY3kgQ29udmVyc2F0aW9uIEFQSSBwb2xsaW5nIGRyaXZlci4gQVxuICAgKiBwcmUtc3RyZWFtIGZlYXR1cmUtZGlzYWJsZWQgb3IgcHJldmlldy10b2dnbGUgcmVzcG9uc2UgZmFsbHMgYmFja1xuICAgKiBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgZ2VuaWVBZ2VudE1vZGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVFRMIGZvciB0aGUgaW4tbWVtb3J5IEdlbmllIHNwYWNlIG1ldGFkYXRhIGNhY2hlLCBpblxuICAgKiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIDUgbWludXRlcy4gVGhlIEdlbmllIGFnZW50IGNhbGxzXG4gICAqIGBjbGllbnQuZ2VuaWUuZ2V0U3BhY2UoLi4uKWAgb24gZXZlcnkgY29sZC1zdGFydCB0byBnZXQgdGhlXG4gICAqIHRpdGxlIC8gZGVzY3JpcHRpb24gLyB3YXJlaG91c2UgaWQ7IGNhY2hlZCByZXNwb25zZXMgc2tpcCB0aGVcbiAgICogcm91bmQtdHJpcCBhbmQgY29uY3VycmVudCBjYWxsZXJzIGNvYWxlc2NlIG9uIGEgc2luZ2xlXG4gICAqIGluLWZsaWdodCBmZXRjaC4gRHJvcCB0byBhIHNtYWxsZXIgdmFsdWUgd2hlbiBhbmFseXN0cyBhcmVcbiAgICogYWN0aXZlbHkgZWRpdGluZyBzcGFjZSBtZXRhZGF0YSBhbmQgeW91IHdhbnQgY2hhbmdlcyB2aXNpYmxlXG4gICAqIHdpdGhpbiBzZWNvbmRzOyByYWlzZSBpdCB0byBhbW9ydGlzZSB0aGUgcm91bmQtdHJpcCB3aGVuXG4gICAqIHNwYWNlIG1ldGFkYXRhIGlzIGVmZmVjdGl2ZWx5IGZyb3plbi5cbiAgICpcbiAgICogQmFja2VkIGJ5IEFwcEtpdCdzIGBDYWNoZU1hbmFnZXJgLCBzbyB0aGUgY2FjaGUgcGFydGljaXBhdGVzXG4gICAqIGluIHRlbGVtZXRyeSBzcGFucyAoYGNhY2hlLmdldE9yRXhlY3V0ZWApIGFuZCBiZW5lZml0cyBmcm9tXG4gICAqIExha2ViYXNlIHBlcnNpc3RlbmNlIHdoZW4gdGhlIGBsYWtlYmFzZWAgcGx1Z2luIGlzIHdpcmVkIHVwLlxuICAgKi9cbiAgZ2VuaWVTcGFjZUNhY2hlVHRsTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIExMTSBzdGVwcyBlYWNoIGFnZW50IGdldHMgcGVyIHR1cm4uIE9uZSBzdGVwID0gb25lXG4gICAqIHJvdW5kLXRyaXAgdG8gdGhlIHVuZGVybHlpbmcgbW9kZWwgKGEgdG9vbCBjYWxsIGNvbnN1bWVzIGFcbiAgICogc3RlcCwgdGhlIGZpbmFsLXRleHQgcmVwbHkgY29uc3VtZXMgb25lIHRvbykuIEFwcGxpZXMgdG9cbiAgICogZXZlcnkgYWdlbnQgcmVnaXN0ZXJlZCB0aHJvdWdoIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWcuYWdlbnRzfVxuICAgKiAtIHBlci1hZ2VudCBvdmVycmlkZXMgYXJlbid0IHN1cmZhY2VkIHlldCBiZWNhdXNlIHRoZSBzYW1lXG4gICAqIGNlaWxpbmcgaGFzIGJlZW4gc3VmZmljaWVudCBhY3Jvc3MgZXZlcnkgd29ya2xvYWQgd2UndmUgcnVuLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9BR0VOVF9NQVhfU1RFUFN9ICgyNSksIHNpemVkIHRvIGZpdFxuICAgKiBhIGRlY29tcG9zZWQgR2VuaWUgdHVybiAoZ3JvdW5kaW5nICsgc2V2ZXJhbCBgYXNrX2dlbmllYCBjYWxsc1xuICAgKiArIGBwcmVwYXJlX2NoYXJ0YCBwZXIgZGF0YXNldCArIHRoZSBmaW5hbC10ZXh0IHJlcGx5KSB3aXRoXG4gICAqIGhlYWRyb29tIGZvciB0aGUgbW9kZWwgdG8gY2hhaW4gYSBjb3VwbGUgb2YgZm9sbG93LXVwcyBiZWZvcmVcbiAgICogYW5zd2VyaW5nLiBNYXN0cmEncyBvd24gYGFnZW50LmdlbmVyYXRlYCBkZWZhdWx0IG9mIDUgd291bGRcbiAgICogY3V0IG11bHRpLXN0ZXAgb3JjaGVzdHJhdGlvbiBvZmYgYWZ0ZXIgMi0zIHRvb2wgY2FsbHMsIHNvXG4gICAqIGV4cGxpY2l0bHkgcmFpc2luZyB0aGUgY2VpbGluZyBoZXJlIGlzIHdoYXQgbGV0cyB0aGVcbiAgICogYWdlbnQtbW9kZSBsb29wIHBsYXkgb3V0LlxuICAgKlxuICAgKiBMb3dlciB3aGVuIGFuIHVudXN1YWxseSBzbG93IG9yIGV4cGVuc2l2ZSBtb2RlbCBtYWtlcyBsb25nXG4gICAqIHR1cm5zIHVuYWZmb3JkYWJsZTsgcmFpc2UgZm9yIGV4cGxvcmF0b3J5IHdvcmtsb2FkcyB0aGF0IG5lZWRcbiAgICogdG8gZHJpbGwgZGVlcCBpbnRvIGEgZGF0YXNldCB3aXRoaW4gYSBzaW5nbGUgdHVybi5cbiAgICovXG4gIGFnZW50TWF4U3RlcHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaXJlIE1hc3RyYSBzcGFucyBpbnRvIEFwcEtpdCdzIGdsb2JhbCBPVGVsIHBpcGVsaW5lIHZpYVxuICAgKiBgQG1hc3RyYS9vdGVsLWJyaWRnZWAuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQsIGF1dG8pOiBvbiBvbmx5IHdoZW5cbiAgICogICBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBvclxuICAgKiAgIGBPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UYCBpcyBzZXQuIFdoZW4gdW5zZXQsIHRoZVxuICAgKiAgIGJyaWRnZSBpcyBza2lwcGVkIHNvIE1hc3RyYSBkb2VzIG5vdCBsb2dcbiAgICogICBgW090ZWxCcmlkZ2VdIE5vIE9URUwgc3BhbiBmb3VuZGAgb24gdGhlIG5vb3AgdHJhY2VyLlxuICAgKiAtIGB0cnVlYDogZm9yY2Ugb24gZXZlbiB3aXRob3V0IGFuIE9UTFAgZW5kcG9pbnQuXG4gICAqIC0gYGZhbHNlYDogZm9yY2Ugb2ZmLlxuICAgKi9cbiAgb2JzZXJ2YWJpbGl0eT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMb2cgdXNlciBmZWVkYmFjayAodGh1bWJzIHVwL2Rvd24gKyBmcmVlZm9ybSBjb21tZW50cykgdG8gTUxmbG93IGFzXG4gICAqIHRyYWNlIGFzc2Vzc21lbnRzLCBhbmQgc3VyZmFjZSB0aGUgZmVlZGJhY2sgY29udHJvbHMgaW4gdGhlIGNoYXQgVUkuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQsIGF1dG8pOiBlbmFibGVkIG9ubHkgd2hlbiBNTGZsb3cgdHJhY2luZyBpc1xuICAgKiAgIHdpcmVkIC0gYW4gT1RMUCBleHBvcnRlciBlbmRwb2ludCBpcyBzZXQgYW5kIGFuIE1MZmxvdyBleHBlcmltZW50XG4gICAqICAgaXMgbmFtZWQgKHRoZSBzYW1lIHNpZ25hbHMgdGhlIG9ic2VydmFiaWxpdHkgcGlwZWxpbmUgbmVlZHMgdG9cbiAgICogICBzaGlwIHRyYWNlcyB0byBNTGZsb3cpLiBPdGhlcndpc2Ugb2ZmLCBzaW5jZSB0aGVyZSdkIGJlIG5vIHRyYWNlXG4gICAqICAgdG8gYXR0YWNoIGZlZWRiYWNrIHRvLlxuICAgKiAtIGB0cnVlYDogZm9yY2Ugb24uIEZlZWRiYWNrIGNvbnRyb2xzIHNob3cgYW5kIHdyaXRlcyBhcmUgYXR0ZW1wdGVkXG4gICAqICAgcmVnYXJkbGVzcyBvZiBlbnYgZGV0ZWN0aW9uICh1c2Ugd2hlbiB0aGUgZW52IGlzIGNvbmZpZ3VyZWQgaW4gYVxuICAgKiAgIHdheSB0aGUgYXV0by1wcm9iZSBkb2Vzbid0IHJlY29nbml6ZSkuXG4gICAqIC0gYGZhbHNlYDogZm9yY2Ugb2ZmLiBObyB0cmFjZS1pZCBoZWFkZXIsIG5vIGZlZWRiYWNrIHJvdXRlLCBubyBVSS5cbiAgICpcbiAgICogRmVlZGJhY2sgYXR0YWNoZXMgdG8gYSB0dXJuJ3MgTUxmbG93IHRyYWNlIHZpYSB0aGUgT3BlblRlbGVtZXRyeVxuICAgKiB0cmFjZSBpZCB0aGUgc2VydmVyIHN0YW1wcyBvbiBlYWNoIHJlc3BvbnNlOyBzZWUgYG1sZmxvdy50c2AuXG4gICAqL1xuICBmZWVkYmFjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIHBsdWdpbidzIGFnZW50cyAoYW5kIG9wdGlvbmFsbHkgdG9vbHMpIGFzIGEgTWFzdHJhIE1DUFxuICAgKiBzZXJ2ZXIgc28gZXh0ZXJuYWwgTUNQIGNsaWVudHMgLSBDbGF1ZGUgRGVza3RvcCwgQ3Vyc29yLCB0aGUgTWFzdHJhXG4gICAqIHBsYXlncm91bmQsIG9yIGFub3RoZXIgYWdlbnQgLSBjYW4gY2FsbCB0aGVtIG92ZXIgdGhlIHN0YW5kYXJkIE1DUFxuICAgKiB0cmFuc3BvcnRzLiBFbmFibGVkIGJ5IGRlZmF1bHQgKGFnZW50cyBvbmx5KTogd3JhcHBpbmcgdGhlXG4gICAqIGFscmVhZHktcmVnaXN0ZXJlZCBhZ2VudHMgY29zdHMgbm90aGluZyBleHRyYSwgc28gdGhlIGVuZHBvaW50IGlzIG9uXG4gICAqIG91dCBvZiB0aGUgYm94OyBvbmx5IHRoZSBhbWJpZW50IHRvb2xzICh3aGljaCBhc3N1bWUgYW4gaW4tcHJvY2Vzc1xuICAgKiBjaGF0IHR1cm4pIHN0YXkgb2ZmIHVubGVzcyBleHBsaWNpdGx5IG9wdGVkIGluLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0KSAvIGB0cnVlYDogZXhwb3NlIGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgYXNcbiAgICogICBhbiBgYXNrXzxhZ2VudElkPmAgTUNQIHRvb2wgdW5kZXIgYSBzZXJ2ZXIgd2hvc2UgaWQgaXMgdGhlIHBsdWdpblxuICAgKiAgIG5hbWUuXG4gICAqIC0gYGZhbHNlYDogbm8gTUNQIGVuZHBvaW50cy5cbiAgICogLSB7QGxpbmsgTWFzdHJhTWNwQ29uZmlnfTogZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgc2VydmVyIGlkLFxuICAgKiAgIGFkdmVydGlzZWQgbWV0YWRhdGEsIGFuZCB3aGljaCBhZ2VudHMgLyB0b29scyBhcmUgZXhwb3NlZC5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB0aGUgc3RvY2sgTWFzdHJhIE1DUCByb3V0ZXMgbW91bnQgdW5kZXIgdGhlIHBsdWdpbidzXG4gICAqIGJhc2UgcGF0aCAobm8gYmVzcG9rZSByb3V0ZSBpcyBhZGRlZCAtIHRoZSBzZXJ2ZXIgaXMgaGFuZGVkIHRvIHRoZVxuICAgKiBgTWFzdHJhYCBpbnN0YW5jZSB2aWEgYG1jcFNlcnZlcnNgLCB3aGljaCBgQG1hc3RyYS9leHByZXNzYCBzZXJ2ZXMpOlxuICAgKlxuICAgKiAtIFN0cmVhbWFibGUgSFRUUDogYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tY3BgXG4gICAqIC0gU1NFIChsZWdhY3kpOiAgICBgR0VUICAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L3NzZWBcbiAgICogICAgICAgICAgICAgICAgICAgIGBQT1NUIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vbWVzc2FnZXNgXG4gICAqXG4gICAqIFJlcXVlc3RzIHJ1biB1bmRlciB0aGUgc2FtZSBBcHBLaXQgT0JPIHNjb3BlIGFzIHRoZSBjaGF0IHJvdXRlcywgc29cbiAgICogYW4gYWdlbnQgaW52b2tlZCBvdmVyIE1DUCByZXNvbHZlcyBpdHMgbW9kZWwgYW5kIHRvb2xzIGFzIHRoZVxuICAgKiBjYWxsaW5nIHVzZXIuXG4gICAqL1xuICBtY3A/OiBib29sZWFuIHwgTWFzdHJhTWNwQ29uZmlnO1xuICAvKipcbiAgICogSG93IG11Y2ggb2YgdGhlIHN0b2NrIGBAbWFzdHJhL2V4cHJlc3NgIG1hbmFnZW1lbnQgQVBJIGlzIHJlYWNoYWJsZVxuICAgKiB0aHJvdWdoIHRoZSBwbHVnaW4gbW91bnQuIGBAbWFzdHJhL2V4cHJlc3NgIHJlZ2lzdGVycyBpdHMgZnVsbCByb3V0ZVxuICAgKiB0YWJsZSAoYWdlbnQgaW5mZXJlbmNlIHBsdXMgYWRtaW4gLyBtdXRhdGluZyByb3V0ZXM6IGRpcmVjdCB0b29sXG4gICAqIGV4ZWN1dGlvbiwgd29ya2Zsb3cgY29udHJvbCwgcmF3IG1lbW9yeSByZWFkL3dyaXRlLCB0ZWxlbWV0cnksIGxvZ3MsXG4gICAqIHNjb3JlcykuIEFwcEtpdCBhbHJlYWR5IGF1dGhlbnRpY2F0ZXMgZXZlcnkgcmVxdWVzdCBhcyB0aGUgT0JPIHVzZXIsXG4gICAqIGJ1dCBub3RoaW5nIHRoZXJlIHJlc3RyaWN0cyAqd2hpY2gqIG9mIHRob3NlIG9wZXJhdGlvbnMgdGhlIGJyb3dzZXJcbiAgICogY2xpZW50IG1heSBpbnZva2UuXG4gICAqXG4gICAqIC0gYFwic2NvcGVkXCJgIChkZWZhdWx0KTogb25seSB0aGUgcm91dGVzIHRoZSBjaGF0IGNsaWVudCBsZWdpdGltYXRlbHlcbiAgICogICBuZWVkcyBhcmUgZGlzcGF0Y2hlZCB0byBNYXN0cmEgLSBhZ2VudCBpbmZlcmVuY2VcbiAgICogICAoYHN0cmVhbWAgLyBgZ2VuZXJhdGVgIC8gYG5ldHdvcmtgKSwgcmVhZC1vbmx5IGFnZW50IG1ldGFkYXRhLCB0aGlzXG4gICAqICAgcGx1Z2luJ3Mgb3duIE9CTy0gYW5kIHJlc291cmNlLXNjb3BlZCBgL3JvdXRlLypgIHJvdXRlcyAoaGlzdG9yeSAvXG4gICAqICAgdGhyZWFkcyksIGFuZCwgd2hlbiB7QGxpbmsgbWNwfSBpcyBlbmFibGVkLCB0aGUgTUNQIHRyYW5zcG9ydC5cbiAgICogICBFdmVyeXRoaW5nIGVsc2UgKHRvb2wgZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5LFxuICAgKiAgIHRlbGVtZXRyeSwgbG9ncywgc2NvcmVzLCBhbmQgb3RoZXIgbXV0YXRpb25zKSBpcyByZWplY3RlZCB3aXRoXG4gICAqICAgYDQwM2AgYmVmb3JlIGl0IHJlYWNoZXMgTWFzdHJhLlxuICAgKiAtIGBcImZ1bGxcImA6IGRpc3BhdGNoIHRoZSBlbnRpcmUgc3RvY2sgTWFzdHJhIEFQSS4gVXNlIG9ubHkgZm9yIGFcbiAgICogICB0cnVzdGVkIGZpcnN0LXBhcnR5IGNvbnNvbGUgdGhhdCBnZW51aW5lbHkgbmVlZHMgdGhlIG1hbmFnZW1lbnRcbiAgICogICBzdXJmYWNlLlxuICAgKi9cbiAgYXBpQWNjZXNzPzogXCJzY29wZWRcIiB8IFwiZnVsbFwiO1xuICAvKipcbiAgICogV2hpY2ggRGF0YWJyaWNrcyBpZGVudGl0eSB0aGUgYWdlbnRzJyB3b3Jrc3BhY2UgY2FsbHMgcnVuIGFzOiB0aGVcbiAgICogc2VydmluZy1lbmRwb2ludCBjYXRhbG9ndWUgYmVoaW5kIHRoZSBtb2RlbCBwaWNrZXIsIEdlbmllIHN1Z2dlc3Rpb25zLFxuICAgKiBgYXNrX2dlbmllYCwgYW5kIHRoZSBTdGF0ZW1lbnQgRXhlY3V0aW9uIGZldGNoIGJlaGluZCBhIGBbZGF0YTo8aWQ+XWBcbiAgICogZW1iZWQuIEZhbGxzIGJhY2sgdG8gYE1BU1RSQV9HRU5JRV9JREVOVElUWWAsIHRoZW4gYFwidXNlclwiYC5cbiAgICpcbiAgICogT24tYmVoYWxmLW9mIChPQk8pIGF1dGggcmVxdWlyZXMgdGhlIGNhbGxlciB0byBiZSBhIG1lbWJlciBvZiB0aGVcbiAgICogV09SS1NQQUNFLCBub3QganVzdCBvZiB0aGUgRGF0YWJyaWNrcyBhY2NvdW50LiBBbiBhcHAgc2hhcmVkIHdpdGggYW5cbiAgICogYWNjb3VudC1sZXZlbCBncm91cCBjYW4gYmUgb3BlbmVkIGJ5IHNvbWVvbmUgd2hvc2UgdG9rZW4gaXMgdmFsaWQgYnV0IHdob3NlXG4gICAqIGV2ZXJ5IHdvcmtzcGFjZSBjYWxsIGZhaWxzIHdpdGggYFVuYXV0aG9yaXplZCBhY2Nlc3MgdG8gT3JnOiA8aWQ+YCAtIGFuZFxuICAgKiBncmFudGluZyB3b3Jrc3BhY2UgbWVtYmVyc2hpcCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlLCBzaW5jZSBhIHdvcmtzcGFjZVxuICAgKiBjYXBzIG1lbWJlcnNoaXAgd2VsbCBiZWxvdyB0aGUgc2l6ZSBvZiBhIGxhcmdlIGFjY291bnQncyB1c2VyIGdyb3VwLiBUaGVcbiAgICogYXBwJ3Mgc2VydmljZSBwcmluY2lwYWwgYWxyZWFkeSBob2xkcyB0aGUgZ3JhbnRzIHRoZSBhcHAgd2FzIGRlcGxveWVkIHdpdGguXG4gICAqXG4gICAqIC0gYFwidXNlclwiYCAoZGVmYXVsdCk6IGFsd2F5cyBPQk8uIFBlci11c2VyIGF0dHJpYnV0aW9uLCBhbmQgR2VuaWUgLyBVbml0eVxuICAgKiAgIENhdGFsb2cgcm93IGZpbHRlcnMgYXBwbHkgcGVyIHVzZXIuIENvcnJlY3Qgd2hlbiBldmVyeSBjYWxsZXIgaXMgYVxuICAgKiAgIHdvcmtzcGFjZSBtZW1iZXIuXG4gICAqIC0gYFwic2VydmljZS1wcmluY2lwYWxcImA6IGFsd2F5cyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLiBOZWVkcyBubyBPQk9cbiAgICogICBzY29wZXMgYW5kIHdvcmtzIGZvciBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwLCBhdCB0aGUgY29zdCBvZlxuICAgKiAgIHBlci11c2VyIGF0dHJpYnV0aW9uIGluIEdlbmllIC8gVW5pdHkgQ2F0YWxvZy5cbiAgICogLSBgXCJhdXRvXCJgOiBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiwgdGhlIHNlcnZpY2UgcHJpbmNpcGFsXG4gICAqICAgd2hlbiBpdCBkb2VzIG5vdC4gRm9yIGFuIGFwcCBzZXJ2aW5nIEJPVEggdGhlIHBsYXRmb3JtIGZyb250IGRvb3IgYW5kIGFcbiAgICogICBkb29yIHRoYXQgaGFzIG5vIHRva2VuIHRvIGZvcndhcmQgLSBhIGBAZGJ4LXRvb2xzL3R1bm5lbGAgZ2F0ZSwgYVxuICAgKiAgIFRlYW1zIGNoYW5uZWwgLSB3aGVyZSBBcHBLaXQncyBgYXNVc2VyYCB3b3VsZCBvdGhlcndpc2UgdGhyb3dcbiAgICogICBgQXV0aGVudGljYXRpb25FcnJvcmAgb3V0c2lkZSBgTk9ERV9FTlY9ZGV2ZWxvcG1lbnRgLlxuICAgKlxuICAgKiBUaGUgc2VydmljZS1wcmluY2lwYWwgcGF0aCBjaGFuZ2VzIG9ubHkgdGhlIERhdGFicmlja3MgQ1JFREVOVElBTC4gTWVtb3J5XG4gICAqIHRocmVhZHMsIHRoZSBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2UsIGFuZCB0cmFjZSBtZXRhZGF0YSBzdGlsbCBrZXkgb2ZmIHRoZVxuICAgKiBmb3J3YXJkZWQgdXNlciwgc28gY2FsbGVycyBzaGFyaW5nIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCdzIGRhdGEgYWNjZXNzIGtlZXBcbiAgICogc2VwYXJhdGUgY29udmVyc2F0aW9ucyBhbmQgY2Fubm90IHJlYWQgZWFjaCBvdGhlcidzIHRocmVhZHMgb3IgY2hhcnRzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBBbiBhcHAgYW55IGFjY291bnQgdXNlciBjYW4gb3BlblxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyBnZW5pZUlkZW50aXR5OiBcInNlcnZpY2UtcHJpbmNpcGFsXCIsIGdlbmllU3BhY2VzOiB7IGRlZmF1bHQ6IHNwYWNlSWQgfSB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlIE9uZSBhcHAgYmVoaW5kIGJvdGggdGhlIGZyb250IGRvb3IgYW5kIGEgcHVibGljIHR1bm5lbFxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyBnZW5pZUlkZW50aXR5OiBcImF1dG9cIiwgZ2VuaWVTcGFjZXM6IHsgZGVmYXVsdDogc3BhY2VJZCB9IH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGdlbmllSWRlbnRpdHk/OiBNYXN0cmFJZGVudGl0eU1vZGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBicmFuZCBjb250ZXh0IGFwcGxpZWQgdG8gY2hhcnRzIHByb2R1Y2VkIGJ5IHRoZSBidWlsdC1pblxuICAgKiBgcmVuZGVyX2RhdGFgIC8gYHByZXBhcmVfY2hhcnRgIHRvb2xzLiBXaGVuIHNldCwgdGhlIGNoYXJ0IHBsYW5uZXInc1xuICAgKiBFY2hhcnRzIG91dHB1dCBpcyB0aGVtZWQgd2l0aCB0aGUgYnJhbmQncyBwYWxldHRlIChzZXJpZXMgY29sb3JzIGRlcml2ZWRcbiAgICogZnJvbSBgY29sb3JzLnByaW1hcnlgIC8gYGNvbG9ycy5hY2NlbnRgKSBhbmQgc2FucyBmb250XG4gICAqIChgdHlwb2dyYXBoeS5zYW5zYCkgaW5zdGVhZCBvZiBFY2hhcnRzJyBkZWZhdWx0cy4gT21pdCBmb3IgdGhlIGRlZmF1bHRcbiAgICogRWNoYXJ0cyBsb29rLlxuICAgKlxuICAgKiBQYXNzIHRoZSBwb3J0YWJsZSB7QGxpbmsgQnJhbmRDb250ZXh0fSBzaGFyZWQgYWNyb3NzIHRoZSBVSSBhbmRcbiAgICogbGlicmFyaWVzIChlLmcuIGBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0YCBmcm9tIGBAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlYCxcbiAgICogb3IgYSBjdXN0b21lciBicmFuZCkgLSB0aGUgc2FtZSBvYmplY3QgdGhlIGVtYWlsIGFkZC1vbiBhbmQgdGhlIFVJXG4gICAqIGBCcmFuZFByb3ZpZGVyYCBjb25zdW1lLCBzbyBhIGhvc3QgdGhlbWVzIGNoYXJ0cywgZW1haWwsIGFuZCBVSSBmcm9tIG9uZVxuICAgKiBzb3VyY2UuXG4gICAqL1xuICBicmFuZD86IEJyYW5kQ29udGV4dDtcbiAgLyoqXG4gICAqIFJlbW90ZSBBZ2VudC1Ta2lsbCBzb3VyY2VzIG1hdGVyaWFsaXplZCBvbmNlIGF0IGFwcCBzdGFydHVwLiBBIHNpbmdsZVxuICAgKiBzb3VyY2UsIGEgbGlzdCwgb3IgYSBgeyBzb3VyY2VzLCBmYWlsT25FcnJvcj8sIC4uLiB9YCBiYWcuXG4gICAqXG4gICAqIEVhY2ggc291cmNlIGlzIGEgR2l0SHViIGBvd25lci9yZXBvYCwgYSBnaXQgLyBHaXRMYWIgVVJMLCBvciBhIGRpcmVjdFxuICAgKiBgU0tJTEwubWRgIC8gYXJjaGl2ZSBkb3dubG9hZCBVUkwuIFJlc29sdXRpb24gcHJlZmVycyB0aGUgT1BUSU9OQUwgYHNraWxsc2BcbiAgICogbnBtIENMSSAoYSBwZWVyIGRlcCkgd2hpY2ggaXMgY29waWVkIGludG8gYSB0ZW1wIGRpciBhbmQgdGhlbiBwZXJzaXN0ZWQ7XG4gICAqIHdpdGhvdXQgaXQsIGEgVVJMIHNvdXJjZSBpcyBmZXRjaGVkIGRpcmVjdGx5LiBBIHNvdXJjZSB0aGF0IHJlc29sdmVzXG4gICAqIHRocm91Z2ggbmVpdGhlciBmYWlscyBzdGFydHVwIHVubGVzcyBgZmFpbE9uRXJyb3I6IGZhbHNlYC5cbiAgICpcbiAgICogUHJvdmlzaW9uZWQgc2tpbGxzIGFyZSB3cml0dGVuIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIncyBBc3Npc3RhbnQgc2tpbGxzXG4gICAqIGZvbGRlciAoYC9Vc2Vycy88ZW1haWw+Ly5hc3Npc3RhbnQvc2tpbGxzYCwgdGhlIFwic2F2ZSB0aGlzIGFzIGEgc2tpbGxcIlxuICAgKiB0YXJnZXQpIHNvIHRoZXkgcGVyc2lzdCBhbmQgYXJlIHBpY2tlZCB1cCBieSB0aGUgYnVpbHQtaW4gQXNzaXN0YW50LXNraWxsc1xuICAgKiBtb3VudC4gV2l0aCBubyB3cml0YWJsZSB3b3Jrc3BhY2UsIHRoZXkgZ28gdG8gYSBsb2NhbCB0ZW1wIGRpciBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyByZW1vdGVTa2lsbHM6IFwidmVyY2VsLWxhYnMvYWdlbnQtc2tpbGxzXCIgfSk7XG4gICAqIG1hc3RyYSh7XG4gICAqICAgcmVtb3RlU2tpbGxzOiB7XG4gICAqICAgICBzb3VyY2VzOiBbXCJ2ZXJjZWwtbGFicy9hZ2VudC1za2lsbHNcIiwgXCJodHRwczovL2V4YW1wbGUuY29tL3NraWxsLm1kXCJdLFxuICAgKiAgICAgZmFpbE9uRXJyb3I6IGZhbHNlLFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHJlbW90ZVNraWxscz86IFJlbW90ZVNraWxsc09wdGlvbjtcbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSBwdWJsaXNoZWQgb24gdGhlIG1hbmlmZXN0J3MgYGNvbmZpZy5zY2hlbWFgLCBtaXJyb3JpbmcgdGhlXG4gKiBkb2N1bWVudGVkIGRlZmF1bHRzIGFuZCBlbnZpcm9ubWVudCBmYWxsYmFja3Mgb2Yge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZ30uXG4gKlxuICogQ292ZXJzIHRoZSBKU09OLWV4cHJlc3NpYmxlIG9wdGlvbnMgb25seS4gYGFnZW50c2AsIGB0b29sc2AsIGFuZCBhXG4gKiBgZGVmYXVsdE1vZGVsYCBwYXNzZWQgYXMgYSBNYXN0cmEgYER5bmFtaWNBcmd1bWVudGAgYXJlIGNvZGUtZGVmaW5lZFxuICogKGZ1bmN0aW9ucyAvIGNsYXNzIGluc3RhbmNlcyksIHNvIHRoZXkgY2Fycnkgbm8gc2NoZW1hIGVudHJ5OyB0aGVcbiAqIGBkZWZhdWx0TW9kZWxgIHByb3BlcnR5IGJlbG93IGRlc2NyaWJlcyBpdHMgc3RyaW5nIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfQ09ORklHX1NDSEVNQTogQ29uZmlnU2NoZW1hID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgcHJvdmlkZXJJZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTWFzdHJhIE9wZW5BSS1jb21wYXRpYmxlIHByb3ZpZGVyIGlkLiBEZWZhdWx0cyB0byBcImRhdGFicmlja3NcIi4nLFxuICAgIH0sXG4gICAgcmVtb3RlU2tpbGxzOiB7XG4gICAgICB0eXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUmVtb3RlIEFnZW50LVNraWxsIHNvdXJjZXMgcHJvdmlzaW9uZWQgYXQgc3RhcnR1cDogXCJhaXRvb2xzXCIgZm9yIERhdGFicmlja3NcXCcgb3duIHNraWxsIHNldCAocmVhZCBmcm9tIHRoZSBwdWJsaWMgZGF0YWJyaWNrcy9kYXRhYnJpY2tzLWFnZW50LXNraWxscyByZXBvLCBubyBDTEkgbmVlZGVkKSwgYSBHaXRIdWIgb3duZXIvcmVwbywgYSBnaXQvR2l0TGFiIFVSTCwgb3IgYSBkaXJlY3QgU0tJTEwubWQvYXJjaGl2ZSBVUkwuIE5vbi1haXRvb2xzIHNvdXJjZXMgcHJlZmVyIHRoZSBvcHRpb25hbCBgc2tpbGxzYCBucG0gQ0xJLCBlbHNlIGEgZGlyZWN0IGZldGNoOyBmYWlscyBzdGFydHVwIG9uIGVycm9yIHVubGVzcyBmYWlsT25FcnJvcjpmYWxzZS4gV3JpdHRlbiB0byB0aGUgRGF0YWJyaWNrcyB1c2VyIEFzc2lzdGFudCBza2lsbHMgZm9sZGVyLCBvciBhIGxvY2FsIHRlbXAgZGlyIHdoZW4gbm8gd29ya3NwYWNlIGlzIHdyaXRhYmxlLicsXG4gICAgfSxcbiAgICBzdG9yYWdlOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9zdGdyZXNTdG9yZSBmb3IgTWFzdHJhIHRocmVhZHMgLyBtZXNzYWdlcy4gYHRydWVgIHJldXNlcyB0aGUgYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sLCBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuIEF1dG8tZW5hYmxlZCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLlwiLFxuICAgIH0sXG4gICAgbWVtb3J5OiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUGdWZWN0b3Igc3RvcmUgZm9yIE1hc3RyYSBzZW1hbnRpYyByZWNhbGwuIGB0cnVlYCByZXVzZXMgdGhlIGBsYWtlYmFzZWAgcGx1Z2luJ3MgcG9vbCwgYW4gb2JqZWN0IG9wZW5zIGEgZGVkaWNhdGVkIHN0b3JlLiBBdXRvLWVuYWJsZWQgd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC5cIixcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJzdHJpbmdcIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0NvbW1hbmQgc2FuZGJveCBmb3IgYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMuIERlZmF1bHRzIHRvIERhdGFicmlja3MgU2FuZGJveCB3aXRoIE1vbnR5IGZhbGxiYWNrOyBmYWxzZSBkaXNhYmxlcyBjb21tYW5kIGV4ZWN1dGlvbiwgXCJtb250eVwiIHNlbGVjdHMgTW9udHkgZGlyZWN0bHksIGFuZCBhbiBvYmplY3QgY29uZmlndXJlcyBEYXRhYnJpY2tzIGxpZmVjeWNsZS9mYWxsYmFjayBzZXR0aW5ncy4nLFxuICAgIH0sXG4gICAgZGVmYXVsdEFnZW50OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQWdlbnQgaWQgdXNlZCB3aGVuIHRoZSBjbGllbnQgbmFtZXMgbm9uZS4gRGVmYXVsdHMgdG8gdGhlIGZpcnN0IHJlZ2lzdGVyZWQgYWdlbnQsIGVsc2UgdGhlIGJ1aWx0LWluIGBkZWZhdWx0YC5cIixcbiAgICB9LFxuICAgIGRlZmF1bHRNb2RlbDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlNlcnZpbmcgZW5kcG9pbnQgYXBwbGllZCB0byBldmVyeSBhZ2VudCB0aGF0IG9taXRzIGl0cyBvd24gbW9kZWwuIEZhbGxzIGJhY2sgdG8gREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUUsIHRoZW4gdGhlIGhpZ2hlc3QtcmFua2VkIGN1cnJlbnRseSBhdmFpbGFibGUgY2F0YWxvZ3VlIGVuZHBvaW50LlwiLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGVsRmFsbGJhY2tzOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQcmlvcml0eS1vcmRlcmVkIGVuZHBvaW50IG5hbWVzIHRyaWVkIGJlZm9yZSB0aGUgc2NvcmUtY2xhc3NpZmllZCBjYXRhbG9ndWUgd2hlbiBub3RoaW5nIGVsc2UgcGlucyBhIG1vZGVsLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGdXp6eU1hdGNoOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZ1enp5LW1hdGNoIGxvb3NlIG1vZGVsIG5hbWVzIGFnYWluc3QgdGhlIHdvcmtzcGFjZSBjYXRhbG9ndWUuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5VGhyZXNob2xkOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnVzZS5qcyBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmdXp6eSBtYXRjaGVyLCAwIChleGFjdCkgdG8gMSAoYW55dGhpbmcpLiBEZWZhdWx0cyB0byAwLjQuXCIsXG4gICAgfSxcbiAgICBtb2RlbENhY2hlVHRsTXM6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJUVEwgaW4gbXMgZm9yIHRoZSBzZXJ2aW5nLWVuZHBvaW50cyBsaXN0IGNhY2hlLCBwZXIgd29ya3NwYWNlIGhvc3QuIERlZmF1bHRzIHRvIDUgbWludXRlcy5cIixcbiAgICB9LFxuICAgIG1vZGVsT3ZlcnJpZGU6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiSG9ub3IgYSBwZXItcmVxdWVzdCBtb2RlbCBvdmVycmlkZSBmcm9tIHRoZSBYLU1hc3RyYS1Nb2RlbCBoZWFkZXIsID9tb2RlbD0gcXVlcnksIG9yIGEgYG1vZGVsYCBib2R5IGZpZWxkLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgIH0sXG4gICAgZ2VuaWVTcGFjZXM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogeyB0eXBlOiBbXCJzdHJpbmdcIiwgXCJvYmplY3RcIl0gfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkdlbmllIHNwYWNlcyB0aGUgYWdlbnRzIGNhbiBkZWxlZ2F0ZSB0bywga2V5ZWQgYnkgYWxpYXMgKHRoZSB0b29sLW5hbWUgc3VmZml4KS4gRWFjaCB2YWx1ZSBpcyBhIHNwYWNlIGlkIG9yIGB7IHNwYWNlSWQsIGhpbnQgfWAuIEZhbGxzIGJhY2sgdG8gdGhlIGBnZW5pZWAgcGx1Z2luJ3Mgb3duIGBzcGFjZXNgIGNvbmZpZywgdGhlbiBEQVRBQlJJQ0tTX0dFTklFX1NQQUNFX0lEIHVuZGVyIHRoZSBgZGVmYXVsdGAgYWxpYXMuXCIsXG4gICAgfSxcbiAgICBnZW5pZUFnZW50TW9kZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJVc2UgdGhlIHN0cmVhbWluZyBHZW5pZSBBZ2VudCBNb2RlIEFQSSBmb3IgYXNrX2dlbmllLiBEZWZhdWx0cyB0byB0cnVlOyBmYWxzZSBmb3JjZXMgbGVnYWN5IHBvbGxpbmcuIEZlYXR1cmUtZGlzYWJsZWQgb3IgcHJldmlldy10b2dnbGUgcmVzcG9uc2VzIGZhbGwgYmFjayBhdXRvbWF0aWNhbGx5IGJlZm9yZSBzdHJlYW1pbmcuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRUTCBpbiBtcyBmb3IgdGhlIEdlbmllIHNwYWNlIG1ldGFkYXRhIGNhY2hlLiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuXCIsXG4gICAgfSxcbiAgICBhZ2VudE1heFN0ZXBzOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTWF4aW11bSBMTE0gc3RlcHMgZWFjaCBhZ2VudCBnZXRzIHBlciB0dXJuIChhIHRvb2wgY2FsbCBhbmQgdGhlIGZpbmFsIHJlcGx5IGVhY2ggY29uc3VtZSBvbmUpLiBEZWZhdWx0cyB0byAyNS5cIixcbiAgICB9LFxuICAgIHN0cmlwU3RhbGVDaGFydHM6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3RyaXAgY2hhcnRJZHMgZnJvbSByZWNhbGxlZCBhc3Npc3RhbnQgdG9vbCByZXN1bHRzIHNvIHRoZSBtb2RlbCBjYW5ub3QgcmV1c2UgYSB0dXJuLXNjb3BlZCBjaGFydCBtYXJrZXIuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBzdHlsZUluc3RydWN0aW9uczoge1xuICAgICAgdHlwZTogW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlN0eWxlIGd1YXJkcmFpbHMgYXBwZW5kZWQgdG8gZXZlcnkgYWdlbnQncyBpbnN0cnVjdGlvbnMuIEEgc3RyaW5nIHJlcGxhY2VzIHRoZSBidWlsdC1pbiBibG9jaywgYGZhbHNlYCBkaXNhYmxlcyBpdC5cIixcbiAgICB9LFxuICAgIG9ic2VydmFiaWxpdHk6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQnJpZGdlIE1hc3RyYSBzcGFucyBpbnRvIEFwcEtpdCdzIE9UZWwgcGlwZWxpbmUuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgb3IgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVCBpcyBzZXQuXCIsXG4gICAgfSxcbiAgICBmZWVkYmFjazoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMb2cgdGh1bWJzIC8gY29tbWVudCBhc3Nlc3NtZW50cyB0byBNTGZsb3cgYW5kIHN1cmZhY2UgdGhlIGZlZWRiYWNrIGNvbnRyb2xzLiBEZWZhdWx0cyB0byBvbiBvbmx5IHdoZW4gYW4gT1RMUCBlbmRwb2ludCBhbmQgTUxGTE9XX0VYUEVSSU1FTlRfSUQgb3IgTUxGTE9XX0VYUEVSSU1FTlRfTkFNRSBhcmUgc2V0LlwiLFxuICAgIH0sXG4gICAgbWNwOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRXhwb3NlIHRoZSByZWdpc3RlcmVkIGFnZW50cyBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYWdlbnRzLW9ubHk7IGFuIG9iamVjdCB0dW5lcyB0aGUgc2VydmVyIGlkLCBhZHZlcnRpc2VkIG1ldGFkYXRhLCBhbmQgd2hldGhlciBhbWJpZW50IHRvb2xzIGFyZSBleHBvc2VkLlwiLFxuICAgIH0sXG4gICAgZ2VuaWVJZGVudGl0eToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIC8vIERlcml2ZWQgZnJvbSB0aGUgcmVzb2x2ZXIncyBvd24gbGlzdCwgc28gYSBtb2RlIGNhbiBuZXZlciBiZSBhY2NlcHRlZCBhdFxuICAgICAgLy8gcnVudGltZSB3aGlsZSB0aGUgcHVibGlzaGVkIHNjaGVtYSAoYW5kIHRoZSBVSSBidWlsdCBmcm9tIGl0KSBvbWl0cyBpdC5cbiAgICAgIGVudW06IFsuLi5JREVOVElUWV9NT0RFU10sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1doaWNoIERhdGFicmlja3MgaWRlbnRpdHkgdGhlIGFnZW50c1xcJyB3b3Jrc3BhY2UgY2FsbHMgKHNlcnZpbmcgY2F0YWxvZ3VlLCBHZW5pZSwgc3RhdGVtZW50IGV4ZWN1dGlvbikgcnVuIGFzLiBcInVzZXJcIiAoZGVmYXVsdCkgaXMgYWx3YXlzIE9CTywgc28gY2FsbGVycyBtdXN0IGJlIHdvcmtzcGFjZSBtZW1iZXJzOyBcInNlcnZpY2UtcHJpbmNpcGFsXCIgYWx3YXlzIHVzZXMgdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbCwgc28gYW55IGNhbGxlciB3aG8gY2FuIG9wZW4gdGhlIGFwcCB3b3JrcywgYXQgdGhlIGNvc3Qgb2YgcGVyLXVzZXIgYXR0cmlidXRpb247IFwiYXV0b1wiIHVzZXMgT0JPIHdoZW4gdGhlIHJlcXVlc3QgY2FycmllcyBhbiBPQk8gdG9rZW4gYW5kIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCB3aGVuIGl0IGRvZXMgbm90LCBmb3IgYW4gYXBwIHRoYXQgYWxzbyBzZXJ2ZXMgYSB0dW5uZWwgb3Igd2ViaG9vayBkb29yLiBGYWxscyBiYWNrIHRvIE1BU1RSQV9HRU5JRV9JREVOVElUWS4nLFxuICAgIH0sXG4gICAgYXBpQWNjZXNzOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZW51bTogW1wic2NvcGVkXCIsIFwiZnVsbFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSG93IG11Y2ggb2YgdGhlIHN0b2NrIEBtYXN0cmEvZXhwcmVzcyBBUEkgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIG1vdW50LiBcInNjb3BlZFwiIChkZWZhdWx0KSBhbGxvd3MgYWdlbnQgaW5mZXJlbmNlLCByZWFkLW9ubHkgYWdlbnQgbWV0YWRhdGEsIHRoaXMgcGx1Z2luXFwncyBvd24gcm91dGVzLCBhbmQgTUNQOyBcImZ1bGxcIiBkaXNwYXRjaGVzIHRoZSBlbnRpcmUgbWFuYWdlbWVudCBzdXJmYWNlLicsXG4gICAgfSxcbiAgICBicmFuZDoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlBvcnRhYmxlIGJyYW5kIGNvbnRleHQgYXBwbGllZCB0byBnZW5lcmF0ZWQgY2hhcnRzIChzZXJpZXMgcGFsZXR0ZSBmcm9tIGNvbG9ycy5wcmltYXJ5IC8gY29sb3JzLmFjY2VudCwgYmFzZSBmb250IGZyb20gdHlwb2dyYXBoeS5zYW5zKS5cIixcbiAgICB9LFxuICB9LFxufTtcbiJdfQ==
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUtuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUs1RixPQUFPLEVBQUUsY0FBYyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUl4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztBQUV6RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUMzRCxzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG1FQUFtRTtJQUNuRSxpRUFBaUU7SUFDakUsd0JBQXdCO0NBQ3pCLENBQUM7QUFRRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBb0M7SUFDekUsT0FBTyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsZ0JBQTZDLEVBQzdDLGVBQXdCO0lBRXhCLElBQUksZUFBZSxJQUFJLGdCQUFnQjtRQUFFLE9BQU8sc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RixPQUFPLGVBQWUsSUFBSSxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxjQUErQjtJQUM1RCxNQUFNLElBQUksR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBcUIsQ0FBQztJQUN0RSxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksc0JBQXNCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFzZEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBaUI7SUFDaEQsSUFBSSxFQUFFLFFBQVE7SUFDZCxVQUFVLEVBQUU7UUFDVixVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFBRSxpRUFBaUU7U0FDL0U7UUFDRCxZQUFZLEVBQUU7WUFDWixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUNuQyxXQUFXLEVBQ1QsZ2VBQWdlO1NBQ25lO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztZQUMzQixXQUFXLEVBQ1Qsb0xBQW9MO1NBQ3ZMO1FBQ0QsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztZQUMzQixXQUFXLEVBQ1Qsa0xBQWtMO1NBQ3JMO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7WUFDckMsV0FBVyxFQUNULDJPQUEyTztTQUM5TztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULGdIQUFnSDtTQUNuSDtRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUNULG1MQUFtTDtTQUN0TDtRQUNELHFCQUFxQixFQUFFO1lBQ3JCLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUN6QixXQUFXLEVBQ1QsNkdBQTZHO1NBQ2hIO1FBQ0QsZUFBZSxFQUFFO1lBQ2YsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1Qsa0ZBQWtGO1NBQ3JGO1FBQ0QsbUJBQW1CLEVBQUU7WUFDbkIsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQ1QsNEZBQTRGO1NBQy9GO1FBQ0QsZUFBZSxFQUFFO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQ1QsNEZBQTRGO1NBQy9GO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QsOEhBQThIO1NBQ2pJO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsSUFBSSxFQUFFLFFBQVE7WUFDZCxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNwRCxXQUFXLEVBQ1Qsb1BBQW9QO1NBQ3ZQO1FBQ0QsY0FBYyxFQUFFO1lBQ2QsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QsNkxBQTZMO1NBQ2hNO1FBQ0Qsb0JBQW9CLEVBQUU7WUFDcEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsc0VBQXNFO1NBQ3BGO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQ1QsZ0hBQWdIO1NBQ25IO1FBQ0QsZ0JBQWdCLEVBQUU7WUFDaEIsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QsNkhBQTZIO1NBQ2hJO1FBQ0QsaUJBQWlCLEVBQUU7WUFDakIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztZQUMzQixXQUFXLEVBQ1QscUhBQXFIO1NBQ3hIO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QscUpBQXFKO1NBQ3hKO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QscUxBQXFMO1NBQ3hMO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztZQUMzQixXQUFXLEVBQ1QsNEpBQTRKO1NBQy9KO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFFBQVE7WUFDZCwyRUFBMkU7WUFDM0UsMEVBQTBFO1lBQzFFLElBQUksRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQ3pCLFdBQVcsRUFDVCw2ZkFBNmY7U0FDaGdCO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3hCLFdBQVcsRUFDVCxxT0FBcU87U0FDeE87UUFDRCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCwwSUFBMEk7U0FDN0k7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBsdWdpbiBjb25maWd1cmF0aW9uIHR5cGVzIGFuZCBzaGFyZWQgYFJlcXVlc3RDb250ZXh0YCBrZXlzLlxuICpcbiAqIE93bnMgdGhlIHR5cGVkIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0XG4gKiBjb25maWcpIGFuZCB7QGxpbmsgTUFTVFJBX0NPTkZJR19TQ0hFTUF9LCB0aGUgSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0XG4gKiBwdWJsaXNoZXMgZm9yIGl0IHNvIHNjYWZmb2xkaW5nIHRvb2xzIGFuZCBhZ2VudHMgY2FuIHJlYWQgdGhlIG9wdGlvbiBzZXQuXG4gKlxuICogUHJlY2VkZW5jZSBwZXIgZmllbGQgaXMgZXhwbGljaXQgcGx1Z2luIGNvbmZpZywgdGhlbiB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlIG5hbWVkIG9uIHRoZSBmaWVsZCwgdGhlbiBhIGJ1aWx0LWluIGRlZmF1bHQuXG4gKlxuICogS2VwdCBpbiBhIGxlYWYgbW9kdWxlIHNvIGBwbHVnaW4udHNgLCBgc2VydmVyLnRzYCwgYG1vZGVsLnRzYCwgYW5kXG4gKiBgbWVtb3J5LnRzYCBjYW4gaW1wb3J0IHRoZW0gd2l0aG91dCBjcmVhdGluZyBhIGN5Y2xlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0LCB0eXBlIEJhc2VQbHVnaW5Db25maWcsIHR5cGUgQ29uZmlnU2NoZW1hIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEFnZW50Q29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBNQVNUUkFfVEhSRUFEX0lEX0tFWSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBnVmVjdG9yQ29uZmlnLCBQb3N0Z3Jlc1N0b3JlQ29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvcGdcIjtcblxuaW1wb3J0IHR5cGUgeyBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVRvb2xzIH0gZnJvbSBcIi4vYWdlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmllU3BhY2VzQ29uZmlnIH0gZnJvbSBcIi4vZ2VuaWUudHNcIjtcbmltcG9ydCB7IElERU5USVRZX01PREVTLCB0eXBlIE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL2lkZW50aXR5LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlbW90ZVNraWxsc09wdGlvbiB9IGZyb20gXCIuL3JlbW90ZS1za2lsbHMudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc2FuZGJveC50c1wiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IHVuZGVyIHdoaWNoIHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0b3JlcyB0aGVcbiAqIHJlc29sdmVkIEFwcEtpdCB1c2VyLiBgbW9kZWwudHNgIHJlYWRzIGl0IHRvIG1pbnQgdXNlci1zY29wZWRcbiAqIERhdGFicmlja3MgdG9rZW5zLlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfS0VZID0gXCJtYXN0cmFfX3VzZXJcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleXMgZm9yIEFwcEtpdCB1c2VyIG1ldGFkYXRhIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBTdXJmYWNlZCBhcyB0cmFjZSBtZXRhZGF0YSB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gdHJhY2VzIGFyZSBmaWx0ZXJhYmxlIGJ5IHdob1xuICogaXNzdWVkIHRoZSByZXF1ZXN0IHdpdGhvdXQgbGVha2luZyB0aGUgZnVsbCB1c2VyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX05BTUVfS0VZID0gXCJtYXN0cmFfX3VzZXJOYW1lXCI7XG4vKiogUmVxdWVzdC1jb250ZXh0IGtleSBjb250YWluaW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX0VNQUlMX0tFWSA9IFwibWFzdHJhX191c2VyRW1haWxcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSBmb3IgdGhlIHBlci1IVFRQLXJlcXVlc3QgaWQgc3RhbXBlZCBieVxuICoge0BsaW5rIE1hc3RyYVNlcnZlcn0uIFJlYWRzIGBYLVJlcXVlc3QtSWRgIGZyb20gdGhlIGluY29taW5nXG4gKiBoZWFkZXJzIHdoZW4gcHJlc2VudCAoc28gYW4gdXBzdHJlYW0gbG9hZCBiYWxhbmNlciAvIEFQSSBnYXRld2F5XG4gKiBjYW4ga2VlcCBpdHMgdHJhY2UgY29ycmVsYXRpb24pLCBmYWxscyBiYWNrIHRvIGEgZnJlc2hseSBtaW50ZWRcbiAqIFVVSUQuIEVjaG9lZCBiYWNrIG9uIHRoZSByZXNwb25zZSBhbmQgc3VyZmFjZWQgb24gZXZlcnkgc3BhbiB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gbG9ncyBhbmQgdHJhY2VzIHNoYXJlIGFcbiAqIGpvaW4ga2V5LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1JFUVVFU1RfSURfS0VZID0gXCJtYXN0cmFfX3JlcXVlc3RJZFwiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IGZvciBPQXV0aCBzY29wZXMgcGFyc2VkIGZyb20gdGhlIGZvcndhcmRlZFxuICogYWNjZXNzIHRva2VuIGJ5IHtAbGluayBNYXN0cmFTZXJ2ZXIuY29uZmlndXJlUmVxdWVzdENvbnRleHRTY29wZXN9LlxuICogV29ya3NwYWNlIG1vdW50cyB0aGF0IHRvdWNoIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGVzIHJlcXVpcmVcbiAqIGB3b3Jrc3BhY2VgIG9yIGBhbGwtYXBpc2AgaW4gdGhpcyBsaXN0LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1NDT1BFU19LRVkgPSBcIm1hc3RyYV9fc2NvcGVzXCI7XG5cbi8qKlxuICogQ2Fub25pY2FsIGxpc3Qgb2YgYFJlcXVlc3RDb250ZXh0YCBrZXlzIHdlIHdhbnQgTWFzdHJhIHRvIGV4dHJhY3RcbiAqIGFzIG1ldGFkYXRhIG9uIGV2ZXJ5IG9ic2VydmFiaWxpdHkgc3BhbiAoYWdlbnQgcnVucywgbW9kZWwgY2FsbHMsXG4gKiB0b29sIGludm9jYXRpb25zLCB3b3JrZmxvdyBzdGVwcykuXG4gKlxuICogTWlycm9ycyB7QGxpbmsgaHR0cHM6Ly9tYXN0cmEuYWkvZG9jcy9vYnNlcnZhYmlsaXR5L3RyYWNpbmcvb3ZlcnZpZXcjYXV0b21hdGljLW1ldGFkYXRhLWZyb20tcmVxdWVzdGNvbnRleHR9OlxuICogcGFzc2VkIHZlcmJhdGltIGludG8gYE9ic2VydmFiaWxpdHkuY29uZmlnc1sqXS5yZXF1ZXN0Q29udGV4dEtleXNgLFxuICogc28gYW55IGtleSBsaXN0ZWQgaGVyZSBpcyByZWFkIGZyb20gYFJlcXVlc3RDb250ZXh0YCBhdCB0cmFjZVxuICogc3RhcnQgYW5kIGF0dGFjaGVkIGFzIHNjYWxhciBzcGFuIG1ldGFkYXRhLiBLZWVwIHRoZSBzZXQgdG8gcGxhaW5cbiAqIHNjYWxhcnMgLSBuZXZlciBpbmNsdWRlIHtAbGluayBNQVNUUkFfVVNFUl9LRVl9IChpdCBjYXJyaWVzIHRoZVxuICogZnVsbCBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgd2l0aCBhIGBXb3Jrc3BhY2VDbGllbnRgIHJlZmVyZW5jZSkuXG4gKlxuICogT3JkZXIgaXMgcHVyZWx5IGNvc21ldGljOyBNYXN0cmEgZGUtZHVwZXMgaW50ZXJuYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgTUFTVFJBX1JFU09VUkNFX0lEX0tFWSxcbiAgTUFTVFJBX1RIUkVBRF9JRF9LRVksXG4gIE1BU1RSQV9SRVFVRVNUX0lEX0tFWSxcbiAgTUFTVFJBX1VTRVJfTkFNRV9LRVksXG4gIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSxcbiAgLy8gTW9kZWwgb3ZlcnJpZGUga2V5IGlzIG93bmVkIGJ5IGBzZXJ2aW5nLnRzYDsgc3BlbGxlZCBpbmxpbmUgaGVyZVxuICAvLyBzbyB0aGlzIG1vZHVsZSBzdGF5cyBsZWFmLWxldmVsIChubyBjeWNsZXMgd2l0aCBgc2VydmluZy50c2ApLlxuICBcIm1hc3RyYV9fbW9kZWxfb3ZlcnJpZGVcIixcbl07XG5cbi8qKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgcGx1cyB0aGUgY2Fub25pY2FsIHVzZXIgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2U7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGlkZW50aXR5IGZvciBhbiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQ6IHRoZSBPQk8gdXNlciBpZCBvbiBhXG4gKiB1c2VyLXNjb3BlZCBjYWxsLCB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChjb250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gXCJ1c2VySWRcIiBpbiBjb250ZXh0ID8gY29udGV4dC51c2VySWQgOiBjb250ZXh0LnNlcnZpY2VVc2VySWQ7XG59XG5cbi8qKlxuICogV2hvIGEgdHVybiBpcyBBVFRSSUJVVEVEIHRvLCB3aGljaCBpcyBub3QgYWx3YXlzIHdob3NlIERhdGFicmlja3MgY3JlZGVudGlhbFxuICogcnVucyBpdC4gQW4gT0JPIGNvbnRleHQncyBvd24gdXNlciBpZCBpcyBhdXRob3JpdGF0aXZlLiBVbmRlciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsLCBldmVyeSBjYWxsZXIgc2hhcmVzIG9uZSBjcmVkZW50aWFsLCBzbyB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgaXNcbiAqIHdoYXQga2VlcHMgbWVtb3J5IHRocmVhZHMgYW5kIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZXMgZGlzdGluY3Q7IHRoZSBzZXJ2aWNlXG4gKiBwcmluY2lwYWwgaWQgaXMgdGhlIGZsb29yIHdoZW4gbm8gdXNlciB3YXMgZm9yd2FyZGVkLlxuICpcbiAqIFRoaXMgcnVsZSBoYXMgdG8gYmUgaWRlbnRpY2FsIGV2ZXJ5d2hlcmUgYSBjYWNoZSBrZXkgaXMgYnVpbHQsIHNvIGJvdGggdGhlXG4gKiB3cml0ZSBzaWRlICh0aGUgYFJlcXVlc3RDb250ZXh0YCB1c2VyIHN0YW1wZWQgYnkgYHN0YW1wUmVxdWVzdENvbnRleHRVc2VyYClcbiAqIGFuZCB0aGUgcmVhZCBzaWRlICh0aGUgcGx1Z2luJ3Mgb3duIEFwcEtpdCByb3V0ZXMsIHdoaWNoIGhhdmUgYSByZXF1ZXN0IGJ1dFxuICogbm8gYFJlcXVlc3RDb250ZXh0YCkgZGVyaXZlIHRoZWlyIGtleSBmcm9tIHRoaXMgb25lIGZ1bmN0aW9uLiBXaGVuIHRoZSB0d29cbiAqIGRpc2FncmVlZCwgYSBjaGFydCB3cml0dGVuIHVuZGVyIHRoZSBmb3J3YXJkZWQgdXNlciBpZCB3YXMgcmVhZCBiYWNrIHVuZGVyXG4gKiB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgYW5kIHRoZSBlbWJlZCByb3V0ZSBhbnN3ZXJlZCA0MDQsIHdoaWNoIHRoZSBjaGF0IFVJXG4gKiByZW5kZXJzIGFzIGFuIGV4cGlyZWQgY2hhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyaWJ1dGVkVXNlcklkKFxuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UsXG4gIGZvcndhcmRlZFVzZXJJZD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmIChcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0KSByZXR1cm4gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChleGVjdXRpb25Db250ZXh0KTtcbiAgcmV0dXJuIGZvcndhcmRlZFVzZXJJZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGV4ZWN1dGlvbkNvbnRleHQpO1xufVxuXG4vKipcbiAqIElkZW50aXR5IGV2ZXJ5IHBlci11c2VyIGNhY2hlIGVudHJ5IGlzIG5hbWVzcGFjZWQgdW5kZXIsIHNvIGFuIE9CTyByZXN1bHRcbiAqIGNhbm5vdCBiZSByZWFkIGJhY2sgYnkgYW5vdGhlciBjYWxsZXIuXG4gKlxuICogUHJlZmVycyB0aGUge0BsaW5rIFVzZXJ9IHRoYXQge0BsaW5rIE1hc3RyYVNlcnZlcn0gc3RhbXBzIG9uIHRoZSByZXF1ZXN0XG4gKiBjb250ZXh0LCB3aG9zZSBpZCBhbHJlYWR5IGZvbGxvd3Mge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9LiBUaGUgTUNQIHRyYW5zcG9ydFxuICogcm91dGVzIGRvIG5vdCB0aHJlYWQgdGhhdCBjb250ZXh0IGludG8gdG9vbCBleGVjdXRpb24sIHNvIHRob3NlIGZhbGwgYmFjayB0b1xuICogdGhlIGFtYmllbnQgZXhlY3V0aW9uIGNvbnRleHQgKHRoZSBhY3RpdmUgT0JPIHNjb3BlLCBvciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsKS4gQSBjYWxsZXIgaG9sZGluZyBhbiBleHByZXNzIHJlcXVlc3Qgc2hvdWxkIGJ1aWxkIGl0cyBrZXkgZnJvbVxuICoge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9IGluc3RlYWQsIHNvIHRoZSBmb3J3YXJkZWQgdXNlciBpcyBub3QgbG9zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyS2V5KHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gIHJldHVybiB1c2VyPy5pZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG59XG5cbi8qKiBQZ1ZlY3RvciBjb25maWcgd2l0aCBhbiBvcHRpb25hbCBNYXN0cmEgc3RvcmUgaWQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFNZW1vcnlDb25maWcgPSBQZ1ZlY3RvckNvbmZpZyAmIHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEZpbmUtZ3JhaW5lZCBjb250cm9sIGZvciB0aGUgb3B0aW9uYWwgTUNQIHNlcnZlciBleHBvc3VyZVxuICogKHtAbGluayBNYXN0cmFQbHVnaW5Db25maWcubWNwfSkuIEV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsOyB0aGUgb2JqZWN0XG4gKiBmb3JtIG9ubHkgbmVlZHMgdG8gc2V0IHdoYXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFNY3BDb25maWcge1xuICAvKipcbiAgICogU2VydmVyIGlkIHVzZWQgaW4gdGhlIHJvdXRlIHBhdGggKGAvbWNwLzxzZXJ2ZXJJZD4vLi4uYCkgYW5kIGFzIHRoZVxuICAgKiBNQ1AgcmVnaXN0cnkgaWQuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyByZWdpc3RlcmVkIG5hbWUuXG4gICAqL1xuICBzZXJ2ZXJJZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSBhZHZlcnRpc2VkIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBgXCI8ZGlzcGxheU5hbWU+IE1DUFwiYC4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFNlbWFudGljIHZlcnNpb24gYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYFwiMS4wLjBcImAuICovXG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBhZHZlcnRpc2VkIG92ZXIgTUNQLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cG9zZSBldmVyeSByZWdpc3RlcmVkIGFnZW50IGFzIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgIC0gdGhpcyBpcyB0aGUgXCJsZXZlcmFnZSB0aGUgTWFzdHJhIGFnZW50cyBvdmVyXG4gICAqIE1DUFwiIGJlaGF2aW9yIG1vc3QgY2FsbGVycyB3YW50LlxuICAgKi9cbiAgYWdlbnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFsc28gZXhwb3NlIHRoZSBwbHVnaW4ncyBhbWJpZW50IHRvb2xzICh0aGUgYnVpbHQtaW4gYHJlbmRlcl9kYXRhYFxuICAgKiBwbHVzIGFueXRoaW5nIGluIGBjb25maWcudG9vbHNgKSBhcyBNQ1AgdG9vbHMuIERlZmF1bHRzIHRvIGBmYWxzZWA6XG4gICAqIHRoZSBhbWJpZW50IHRvb2xzIGFzc3VtZSBhbiBpbi1wcm9jZXNzIGNoYXQgdHVybiAodGhleSBwdWJsaXNoXG4gICAqIHdyaXRlciBldmVudHMgdGhlIGNoYXQgVUkgY29uc3VtZXMpLCBzbyB0aGV5IGFyZW4ndCB1c2VmdWwgdG8gYVxuICAgKiBzdGFuZGFsb25lIE1DUCBjbGllbnQuIFR1cm4gdGhpcyBvbiBvbmx5IHdoZW4gdGhvc2UgdG9vbHMgYXJlIHNhZmVcbiAgICogdG8gY2FsbCBvdXQtb2YtYmFuZC5cbiAgICovXG4gIHRvb2xzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4dHJhIHRvb2xzIHRvIGV4cG9zZSBvdmVyIE1DUCBiZXlvbmQgdGhlIGFnZW50IC8gYW1iaWVudCBzZXRzLlxuICAgKiBVc2UgdGhpcyBmb3IgdG9vbHMgd3JpdHRlbiBzcGVjaWZpY2FsbHkgZm9yIE1DUCBjb25zdW1lcnMuXG4gICAqL1xuICBleHRyYVRvb2xzPzogTWFzdHJhVG9vbHM7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGFjY2VwdGVkIGJ5IHRoZSBNYXN0cmEgQXBwS2l0IHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKiBNYXN0cmEgT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXIgaWQuIERlZmF1bHRzIHRvIGBcImRhdGFicmlja3NcImA7IG5vIGVudiBmYWxsYmFjay4gKi9cbiAgcHJvdmlkZXJJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBvc3RncmVzU3RvcmUgZm9yIE1hc3RyYSB0aHJlYWRzL21lc3NhZ2VzLiBgdHJ1ZWAgcmV1c2VzIHRoZVxuICAgKiBgbGFrZWJhc2VgIHBsdWdpbidzIHBvb2w7IGFuIG9iamVjdCBvcGVucyBhIGRlZGljYXRlZCBzdG9yZS5cbiAgICovXG4gIHN0b3JhZ2U/OiBib29sZWFuIHwgUG9zdGdyZXNTdG9yZUNvbmZpZztcbiAgLyoqXG4gICAqIFBnVmVjdG9yIHN0b3JlIGZvciBNYXN0cmEgbWVtb3J5IHJlY2FsbC4gYHRydWVgIHJldXNlcyB0aGVcbiAgICogYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sOyBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuXG4gICAqL1xuICBtZW1vcnk/OiBib29sZWFuIHwgTWFzdHJhTWVtb3J5Q29uZmlnO1xuICAvKipcbiAgICogU2FuZGJveCBmb3IgYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMuIERlZmF1bHRzIHRvIERhdGFicmlja3MgU2FuZGJveC5cbiAgICogYHRydWVgIHNlbGVjdHMgRGF0YWJyaWNrcyB3aXRoIGRlZmF1bHRzLCBhbiBvYmplY3QgY29uZmlndXJlcyBpdHMgbGlmZWN5Y2xlLFxuICAgKiBhbmQgYGZhbHNlYCBkaXNhYmxlcyB3b3Jrc3BhY2UgY29tbWFuZCBleGVjdXRpb24uIEFuIGFnZW50IHdpdGggYW4gZXhwbGljaXRcbiAgICogY3VzdG9tIGB3b3Jrc3BhY2VgIGtlZXBzIHRoYXQgd29ya3NwYWNlIGFuZCBpdHMgc2FuZGJveC5cbiAgICovXG4gIHNhbmRib3g/OiBib29sZWFuIHwgXCJkYXRhYnJpY2tzXCIgfCBcIm1vbnR5XCIgfCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnM7XG4gIC8qKlxuICAgKiBDb2RlLWRlZmluZWQgYWdlbnRzLiBBY2NlcHRzIHRocmVlIHNoYXBlcyBmb3IgY29udmVuaWVuY2U6XG4gICAqXG4gICAqIC0gKipSZWNvcmQqKjogYHsgYW5hbHlzdDogZGVmLCBoZWxwZXI6IGRlZiB9YCAtIGtleXMgYmVjb21lIHRoZVxuICAgKiAgIHJlZ2lzdGVyZWQgaWRzIGFuZCB0aGUgZmlyc3Qga2V5IGlzIHRoZSBkZWZhdWx0LlxuICAgKiAtICoqU2luZ2xlIGRlZmluaXRpb24qKjogYGRlZmAgLSByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYFwiZGVmYXVsdFwiYCB3aGVuIGBuYW1lYCBpcyBvbWl0dGVkKSBhbmRcbiAgICogICBhdXRvbWF0aWNhbGx5IG1hcmtlZCBhcyB0aGUgZGVmYXVsdCBhZ2VudC5cbiAgICogLSAqKkFycmF5Kio6IGBbZGVmMSwgZGVmMl1gIC0gZWFjaCByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYGFnZW50XyR7aX1gIHdoZW4gYG5hbWVgIGlzIG9taXR0ZWQpO1xuICAgKiAgIHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgZGVmYXVsdC5cbiAgICpcbiAgICogRWFjaCBlbnRyeSBiZWNvbWVzIGEgTWFzdHJhIGBBZ2VudGAgcmVhY2hhYmxlIGF0XG4gICAqIGAvYXBpLzxwbHVnaW4+L3JvdXRlL2NoYXQvPGlkPmAgKHRoZSBjaGF0IHJvdXRlIGFsc28gbWF0Y2hlc1xuICAgKiBgOmFnZW50SWRgKS4gV2hlbiBgYWdlbnRzYCBpcyBvbWl0dGVkIGVudGlyZWx5LCB0aGUgcGx1Z2luXG4gICAqIHJlZ2lzdGVycyBhIHNpbmdsZSBidWlsdC1pbiBgZGVmYXVsdGAgYW5hbHlzdCBzbyB0aGUgYmFyZVxuICAgKiBgbWFzdHJhKClgIGNhbGwgc3RpbGwgbW91bnRzIGEgd29ya2luZyBjaGF0IGVuZHBvaW50LlxuICAgKlxuICAgKiBAZXhhbXBsZSBTaW5nbGUtYWdlbnQgc2hvcnRoYW5kXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBBcnJheVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czogW1xuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImFuYWx5c3RcIiwgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImhlbHBlclwiLCBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgXSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBSZWNvcmQgKGV4cGxpY2l0IGlkcylcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IHtcbiAgICogICAgIGFuYWx5c3Q6IGNyZWF0ZUFnZW50KHsgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgaGVscGVyOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICB9LFxuICAgKiAgIGRlZmF1bHRBZ2VudDogXCJhbmFseXN0XCIsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFnZW50cz86XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24+XG4gICAgfCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25cbiAgICB8IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogQW1iaWVudCB0b29scyBzcHJlYWQgaW50byBldmVyeSByZWdpc3RlcmVkIGFnZW50J3MgdG9vbHMgcmVjb3JkO1xuICAgKiBwZXItYWdlbnQgdG9vbHMgd2luIG9uIGtleSBjb2xsaXNpb24uIFVzZSBmb3IgYSBzbWFsbCBzaGFyZWRcbiAgICogbGlicmFyeTsgZm9yIHBlci1hZ2VudCB0b29scyBzZXQgYGFnZW50c1tpZF0udG9vbHNgIGluc3RlYWQuXG4gICAqL1xuICB0b29scz86IE1hc3RyYVRvb2xzO1xuICAvKipcbiAgICogQWdlbnQgaWQgdXNlZCB3aGVuIHRoZSBjbGllbnQgZG9lc24ndCBzcGVjaWZ5IG9uZSAodGhlIGJhcmUsXG4gICAqIHVuLXN1ZmZpeGVkIGhpc3RvcnkgLyBzdWdnZXN0aW9ucyByb3V0ZXMgcmVzb2x2ZSB0byBpdCkuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBrZXkgaW4gYGFnZW50c2AgKG9yIGBcImRlZmF1bHRcImAgd2hlblxuICAgKiBgYWdlbnRzYCBpcyBvbWl0dGVkKS4gTXVzdCBtYXRjaCBhbiBpZCBpbiBgYWdlbnRzYCB3aGVuIGJvdGggYXJlXG4gICAqIHNldDsgYSBtaXNtYXRjaCB0aHJvd3MgYXQgc2V0dXAgd2l0aCB0aGUgYXZhaWxhYmxlIGNhbmRpZGF0ZXMuXG4gICAqL1xuICBkZWZhdWx0QWdlbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQbHVnaW4tbGV2ZWwgZGVmYXVsdCBtb2RlbCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzXG4gICAqIG93biBgbW9kZWxgLiBNaXJyb3JzIEFwcEtpdCdzIGBhZ2VudHMoeyBkZWZhdWx0TW9kZWwgfSlgLlxuICAgKlxuICAgKiAtIGBzdHJpbmdgOiBzaG9ydGhhbmQgZm9yIFwidXNlIHRoZSBPQk8gYXV0by1yZXNvbHZlciBidXQgc3dhcCB0aGVcbiAgICogICBgbW9kZWxJZGBcIiAoZS5nLiBgXCJkYXRhYnJpY2tzLWNsYXVkZS1zb25uZXQtNC02XCJgKS5cbiAgICogLSBBbnkgb3RoZXIgTWFzdHJhIGBEeW5hbWljQXJndW1lbnQ8TWFzdHJhTW9kZWxDb25maWc+YDogcGFzc2VkXG4gICAqICAgdGhyb3VnaCB2ZXJiYXRpbS4gVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCBmdWxsIGNvbnRyb2wgb3ZlciBhdXRoXG4gICAqICAgb3IgYHByb3ZpZGVySWRgLlxuICAgKlxuICAgKiBSZXNvbHV0aW9uIG9yZGVyIHBlciBhZ2VudDogYGRlZi5tb2RlbGAg4oaSIGBkZWZhdWx0TW9kZWxgIOKGklxuICAgKiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgIOKGkiBidWlsdC1pbiBgL3NlcnZpbmctZW5kcG9pbnRzYFxuICAgKiByZXNvbHZlci5cbiAgICovXG4gIGRlZmF1bHRNb2RlbD86IEFnZW50Q29uZmlnW1wibW9kZWxcIl0gfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyAoYFwiY2xhdWRlIHNvbm5ldFwiYCkgYWdhaW5zdCB0aGUgd29ya3NwYWNlJ3NcbiAgICogTW9kZWwgU2VydmluZyBlbmRwb2ludHMuIERlZmF1bHRzIHRvIGB0cnVlYDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBTZXQgYGZhbHNlYCB0byByZXF1aXJlIGV4YWN0IGVuZHBvaW50IG5hbWVzIGV2ZXJ5d2hlcmUuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKipcbiAgICogRnVzZS5qcyBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmdXp6eSBtYXRjaGVyLCAwIChleGFjdCkgdG8gMSAoYW55dGhpbmcpLlxuICAgKiBEZWZhdWx0cyB0byBgMC40YDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBMb3dlciB2YWx1ZXMgcmVqZWN0IGxvb3NlIG1hdGNoZXM7IHJhaXNlIGl0IGlmIHlvdSBoYXZlIGEgc3ByYXdsaW5nXG4gICAqIGVuZHBvaW50IGNhdGFsb2d1ZSB3aXRoIHNpbWlsYXItbG9va2luZyBuYW1lcy5cbiAgICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgc2VydmluZy1lbmRwb2ludHMgbGlzdCBjYWNoZSwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBEZWZhdWx0cyB0byA1IG1pbnV0ZXM7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogVGhlIGNhY2hlIGlzIHBlciB3b3Jrc3BhY2UgaG9zdCBhbmQgc2hhcmVkIGFjcm9zcyB1c2VyczsgY29uY3VycmVudFxuICAgKiBjYWxsZXJzIGNvYWxlc2NlIG9uIGEgc2luZ2xlIGluLWZsaWdodCBmZXRjaC5cbiAgICovXG4gIG1vZGVsQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIExldCBjbGllbnRzIHBpY2sgdGhlIGJhY2tpbmcgZW5kcG9pbnQgcGVyIHJlcXVlc3QuIERlZmF1bHRzIHRvIGB0cnVlYDtcbiAgICogbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBSZWFkcyB0aGUgYFgtTWFzdHJhLU1vZGVsYCBoZWFkZXIsIHRoZSBgP21vZGVsPWAgcXVlcnkgc3RyaW5nLCBvciBhXG4gICAqIGBtb2RlbGAgYm9keSBmaWVsZCwgaW4gdGhhdCBvcmRlci4gRGlzYWJsZSB3aGVuIHJ1bm5pbmcgbXVsdGktdGVuYW50XG4gICAqIHdoZXJlIHVudHJ1c3RlZCBjbGllbnRzIHNob3VsZG4ndCBjaG9vc2UgdGhlIGVuZHBvaW50LlxuICAgKi9cbiAgbW9kZWxPdmVycmlkZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmlvcml0eS1vcmRlcmVkIGxpc3Qgb2YgZW5kcG9pbnQgbmFtZXMgdHJpZWQgKmZpcnN0KiB3aGVuIG5vXG4gICAqIGFnZW50IC8gcGx1Z2luIC8gZW52IC8gcmVxdWVzdC1vdmVycmlkZSBtb2RlbCBpZCBpcyBzZXQsIGFoZWFkIG9mXG4gICAqIHRoZSBkeW5hbWljIHNjb3JlLWNsYXNzaWZpZWQgY2F0YWxvZ3VlLiBUaGUgcmVzb2x2ZXIgcGlja3MgdGhlXG4gICAqIGZpcnN0IGlkIHRoYXQgaXMgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgd29ya3NwYWNlJ3NcbiAgICogYC9zZXJ2aW5nLWVuZHBvaW50c2AgbGlzdGluZy5cbiAgICpcbiAgICogV2hlbiB1bnNldCwgcmVzb2x1dGlvbiBpcyBkcml2ZW4gYnkgdGhlIGxpdmUgRm91bmRhdGlvbiBNb2RlbCBBUElcbiAgICogYHF1YWxpdHlgIC8gYHNwZWVkYCAvIGBjb3N0YCBzY29yZXM6IGVuZHBvaW50cyBhcmUgY2xhc3NpZmllZCBpbnRvXG4gICAqIGNoYXQgY2xhc3NlcyAoYGNsYXNzaWZ5RW5kcG9pbnRzYCkgYW5kIHdhbGtlZCBiZXN0LWZpcnN0XG4gICAqIChDaGF0VGhpbmtpbmcgLT4gQ2hhdEJhbGFuY2VkIC0+IENoYXRGYXN0KS4gVGhlIGF1dG9tYXRpYyBkZWZhdWx0IGlzXG4gICAqIGxpdmUtb25seSBhbmQgZmFpbHMgd2hlbiBubyBtYXRjaGluZyBlbmRwb2ludCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICAgKiBTZXQgdGhpcyB0byBwaW4gYSByZWd1bGF0ZWQgd29ya3NwYWNlIHRvIGFuIGFwcHJvdmVkIHN1YnNldCwgb3IgdG8gcHV0XG4gICAqIGN1c3RvbSBlbmRwb2ludHMgaW4gZnJvbnQgb2YgdGhlIGF1dG8tY2xhc3NpZmllZCBjYXRhbG9ndWUuXG4gICAqL1xuICBkZWZhdWx0TW9kZWxGYWxsYmFja3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgIChkZWZhdWx0KSwgZXZlcnkgYWdlbnQgZ2V0cyBhIGJ1aWx0LWluIGlucHV0XG4gICAqIHByb2Nlc3NvciB0aGF0IHN0cmlwcyBgY2hhcnRJZGAgZmllbGRzIGZyb20gcHJpb3IgYXNzaXN0YW50XG4gICAqIHRvb2wtaW52b2NhdGlvbiByZXN1bHRzIGJlZm9yZSB0aGV5IHJlYWNoIHRoZSBtb2RlbC4gVGhpc1xuICAgKiBwcmV2ZW50cyB0aGUgbW9kZWwgZnJvbSByZXVzaW5nIHR1cm4tc2NvcGVkIGNoYXJ0SWRzIGl0IHNlZXNcbiAgICogaW4gbWVtb3J5IHJlY2FsbCAod2hpY2ggd291bGQgbGVhdmUgYFtjaGFydDo8aWQ+XWAgbWFya2Vyc1xuICAgKiBwb2ludGluZyBhdCB3cml0ZXIgZXZlbnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0KS5cbiAgICpcbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gb3B0IG91dCAtIHVzZWZ1bCBpZiBhIG5vbi1kZWZhdWx0IGFnZW50XG4gICAqIG5lZWRzIGZ1bGwgdmlzaWJpbGl0eSBpbnRvIHByaW9yIGNoYXJ0SWRzIChlLmcuIGFuIGF1ZGl0XG4gICAqIGFnZW50IHJlYXNvbmluZyBhYm91dCBjaGFydCBsaW5lYWdlKS5cbiAgICovXG4gIHN0cmlwU3RhbGVDaGFydHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGBpbnN0cnVjdGlvbnNgIHRvIGN1cmJcbiAgICogY29tbW9uIExMTS1pc21zIChlbSBkYXNoZXMsIGVtb2ppcywgc3ljb3BoYW50aWMgb3BlbmVycywgdGhyb3dhd2F5XG4gICAqIGNsb3NlcnMsIGV4Y2Vzc2l2ZSBoZWRnaW5nKS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IHVzZSB0aGUgYnVpbHQtaW5cbiAgICogICBgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlNgIGZyb20gYGFnZW50cy50c2AuXG4gICAqIC0gYHN0cmluZ2A6IHJlcGxhY2UgdGhlIGRlZmF1bHQgd2l0aCB0aGUgc3VwcGxpZWQgYmxvY2suXG4gICAqIC0gYGZhbHNlYDogZGlzYWJsZSBlbnRpcmVseSAoYWdlbnRzIHNlZSBvbmx5IHRoZWlyIGJlc3Bva2VcbiAgICogICBgaW5zdHJ1Y3Rpb25zYCkuXG4gICAqXG4gICAqIEFwcGVuZGVkIChub3QgcHJlcGVuZGVkKSBzbyB0aGUgYWdlbnQncyByb2xlIGFuZCBydWxlcyBjb21lIGZpcnN0XG4gICAqIGFuZCB0aGUgc3R5bGUgYmxvY2sgbGVhbnMgb24gdGhlIG1vZGVsJ3MgcmVjZW5jeSBiaWFzLlxuICAgKi9cbiAgc3R5bGVJbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBmYWxzZTtcbiAgLyoqXG4gICAqIEdlbmllIHNwYWNlcyB0aGlzIHBsdWdpbidzIGFnZW50cyBjYW4gZGVsZWdhdGUgdG8uIE9uZSBNYXN0cmFcbiAgICogdG9vbCBpcyByZWdpc3RlcmVkIHBlciBhbGlhcyAoYGdlbmllYCBmb3IgdGhlIHdlbGwta25vd25cbiAgICogYGRlZmF1bHRgIGFsaWFzLCBgZ2VuaWVfPGFsaWFzPmAgb3RoZXJ3aXNlKS4gRWFjaCB0b29sIHNwaW5zXG4gICAqIHVwIGEgcGVyLXF1ZXN0aW9uIEdlbmllIHN1Yi1hZ2VudCB0aGF0IHJ1bnMgRGF0YWJyaWNrc1xuICAgKiBcImFnZW50IG1vZGVcIiBhZ2FpbnN0IHRoZSBzcGFjZSwgYnJvYWRjYXN0cyB3aXJlIGV2ZW50cyB0byB0aGVcbiAgICogVUksIGZldGNoZXMgc3RhdGVtZW50IHJvd3MgZm9yIG5vbi1lbXB0eSByZXN1bHRzLCBhbmQgcmV0dXJuc1xuICAgKiBhIGAoc3RyaW5nIHwgZGF0YSB8IGNoYXJ0KVtdYCBzdW1tYXJ5IHRoZSBob3N0IFVJIHJlbmRlcnNcbiAgICogaW5saW5lLlxuICAgKlxuICAgKiBFbnRyaWVzIGFjY2VwdCBlaXRoZXIgYSBmdWxsIHtAbGluayBHZW5pZVNwYWNlQ29uZmlnfSBvYmplY3RcbiAgICogb3IgYSBiYXJlIGBzcGFjZV9pZGAgc3RyaW5nIHdoZW4gbm8gZXh0cmFzIGFyZSBuZWVkZWQ6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgZ2VuaWVTcGFjZXM6IHtcbiAgICogICAgIGRlZmF1bHQ6IFwiMDFlZjBkM2MwZTFiMWY0YThkMmMzZTRmNWE2YjdjOGRcIixcbiAgICogICAgIGZvcmVjYXN0czogeyBzcGFjZUlkOiBcIjAxZWYuLi5cIiwgaGludDogXCJ3ZWVrbHkgZGVtYW5kIGZvcmVjYXN0c1wiIH0sXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZWFjaCB0aGUgc3BhY2VzIGZyb20gYW4gYWdlbnQncyBgdG9vbHMocGx1Z2lucylgIGNhbGxiYWNrIHZpYVxuICAgKiBgcGx1Z2lucy5nZW5pZT8udG9vbGtpdCgpYDsgdGhlIHJlc3VsdGluZyB0b29scyBhY2NlcHRcbiAgICogYHsgY29udGVudCwgY29udmVyc2F0aW9uSWQ/IH1gIGFuZCByZXR1cm4gYSBoeWRyYXRlZCBzdW1tYXJ5LlxuICAgKlxuICAgKiAqKkZhbGxiYWNrIGRpc2NvdmVyeSoqIChoaWdoZXN0IHByZWNlZGVuY2UgZmlyc3QpOiBpZiB0aGlzXG4gICAqIGZpZWxkIGlzIG9taXR0ZWQsIHRoZSBHZW5pZSBhZ2VudCBhbHNvIHBpY2tzIHVwIHNwYWNlcyBmcm9tXG4gICAqICgxKSB0aGUgQXBwS2l0IGBnZW5pZSh7IHNwYWNlczogeyAuLi4gfSB9KWAgcGx1Z2luIGluc3RhbmNlXG4gICAqIHdoZW4gcmVnaXN0ZXJlZCwgYW5kICgyKSB0aGUgYERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSURgXG4gICAqIGVudiB2YXIgKHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcykuIFRoaXMga2VlcHNcbiAgICogZXhpc3RpbmcgQXBwS2l0IGRlcGxveW1lbnRzIHdvcmtpbmcgd2l0aG91dCByZXN0YXRpbmcgdGhlXG4gICAqIHNwYWNlcyBjb25maWcgaW4gdHdvIHBsYWNlcy5cbiAgICovXG4gIGdlbmllU3BhY2VzPzogR2VuaWVTcGFjZXNDb25maWc7XG4gIC8qKlxuICAgKiBVc2UgdGhlIHN0cmVhbWluZyBHZW5pZSBBZ2VudCBNb2RlIEFQSSBmb3IgYGFza19nZW5pZWAuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogU2V0IGBmYWxzZWAgdG8gZm9yY2UgdGhlIGxlZ2FjeSBDb252ZXJzYXRpb24gQVBJIHBvbGxpbmcgZHJpdmVyLiBBXG4gICAqIHByZS1zdHJlYW0gZmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZSBmYWxscyBiYWNrXG4gICAqIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBnZW5pZUFnZW50TW9kZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUsIGluXG4gICAqIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLiBUaGUgR2VuaWUgYWdlbnQgY2FsbHNcbiAgICogYGNsaWVudC5nZW5pZS5nZXRTcGFjZSguLi4pYCBvbiBldmVyeSBjb2xkLXN0YXJ0IHRvIGdldCB0aGVcbiAgICogdGl0bGUgLyBkZXNjcmlwdGlvbiAvIHdhcmVob3VzZSBpZDsgY2FjaGVkIHJlc3BvbnNlcyBza2lwIHRoZVxuICAgKiByb3VuZC10cmlwIGFuZCBjb25jdXJyZW50IGNhbGxlcnMgY29hbGVzY2Ugb24gYSBzaW5nbGVcbiAgICogaW4tZmxpZ2h0IGZldGNoLiBEcm9wIHRvIGEgc21hbGxlciB2YWx1ZSB3aGVuIGFuYWx5c3RzIGFyZVxuICAgKiBhY3RpdmVseSBlZGl0aW5nIHNwYWNlIG1ldGFkYXRhIGFuZCB5b3Ugd2FudCBjaGFuZ2VzIHZpc2libGVcbiAgICogd2l0aGluIHNlY29uZHM7IHJhaXNlIGl0IHRvIGFtb3J0aXNlIHRoZSByb3VuZC10cmlwIHdoZW5cbiAgICogc3BhY2UgbWV0YWRhdGEgaXMgZWZmZWN0aXZlbHkgZnJvemVuLlxuICAgKlxuICAgKiBCYWNrZWQgYnkgQXBwS2l0J3MgYENhY2hlTWFuYWdlcmAsIHNvIHRoZSBjYWNoZSBwYXJ0aWNpcGF0ZXNcbiAgICogaW4gdGVsZW1ldHJ5IHNwYW5zIChgY2FjaGUuZ2V0T3JFeGVjdXRlYCkgYW5kIGJlbmVmaXRzIGZyb21cbiAgICogTGFrZWJhc2UgcGVyc2lzdGVuY2Ugd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgd2lyZWQgdXAuXG4gICAqL1xuICBnZW5pZVNwYWNlQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gTExNIHN0ZXBzIGVhY2ggYWdlbnQgZ2V0cyBwZXIgdHVybi4gT25lIHN0ZXAgPSBvbmVcbiAgICogcm91bmQtdHJpcCB0byB0aGUgdW5kZXJseWluZyBtb2RlbCAoYSB0b29sIGNhbGwgY29uc3VtZXMgYVxuICAgKiBzdGVwLCB0aGUgZmluYWwtdGV4dCByZXBseSBjb25zdW1lcyBvbmUgdG9vKS4gQXBwbGllcyB0b1xuICAgKiBldmVyeSBhZ2VudCByZWdpc3RlcmVkIHRocm91Z2gge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZy5hZ2VudHN9XG4gICAqIC0gcGVyLWFnZW50IG92ZXJyaWRlcyBhcmVuJ3Qgc3VyZmFjZWQgeWV0IGJlY2F1c2UgdGhlIHNhbWVcbiAgICogY2VpbGluZyBoYXMgYmVlbiBzdWZmaWNpZW50IGFjcm9zcyBldmVyeSB3b3JrbG9hZCB3ZSd2ZSBydW4uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0FHRU5UX01BWF9TVEVQU30gKDI1KSwgc2l6ZWQgdG8gZml0XG4gICAqIGEgZGVjb21wb3NlZCBHZW5pZSB0dXJuIChncm91bmRpbmcgKyBzZXZlcmFsIGBhc2tfZ2VuaWVgIGNhbGxzXG4gICAqICsgYHByZXBhcmVfY2hhcnRgIHBlciBkYXRhc2V0ICsgdGhlIGZpbmFsLXRleHQgcmVwbHkpIHdpdGhcbiAgICogaGVhZHJvb20gZm9yIHRoZSBtb2RlbCB0byBjaGFpbiBhIGNvdXBsZSBvZiBmb2xsb3ctdXBzIGJlZm9yZVxuICAgKiBhbnN3ZXJpbmcuIE1hc3RyYSdzIG93biBgYWdlbnQuZ2VuZXJhdGVgIGRlZmF1bHQgb2YgNSB3b3VsZFxuICAgKiBjdXQgbXVsdGktc3RlcCBvcmNoZXN0cmF0aW9uIG9mZiBhZnRlciAyLTMgdG9vbCBjYWxscywgc29cbiAgICogZXhwbGljaXRseSByYWlzaW5nIHRoZSBjZWlsaW5nIGhlcmUgaXMgd2hhdCBsZXRzIHRoZVxuICAgKiBhZ2VudC1tb2RlIGxvb3AgcGxheSBvdXQuXG4gICAqXG4gICAqIExvd2VyIHdoZW4gYW4gdW51c3VhbGx5IHNsb3cgb3IgZXhwZW5zaXZlIG1vZGVsIG1ha2VzIGxvbmdcbiAgICogdHVybnMgdW5hZmZvcmRhYmxlOyByYWlzZSBmb3IgZXhwbG9yYXRvcnkgd29ya2xvYWRzIHRoYXQgbmVlZFxuICAgKiB0byBkcmlsbCBkZWVwIGludG8gYSBkYXRhc2V0IHdpdGhpbiBhIHNpbmdsZSB0dXJuLlxuICAgKi9cbiAgYWdlbnRNYXhTdGVwcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdpcmUgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgZ2xvYmFsIE9UZWwgcGlwZWxpbmUgdmlhXG4gICAqIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IG9uIG9ubHkgd2hlblxuICAgKiAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIG9yXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlRgIGlzIHNldC4gV2hlbiB1bnNldCwgdGhlXG4gICAqICAgYnJpZGdlIGlzIHNraXBwZWQgc28gTWFzdHJhIGRvZXMgbm90IGxvZ1xuICAgKiAgIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuIGZvdW5kYCBvbiB0aGUgbm9vcCB0cmFjZXIuXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbiBldmVuIHdpdGhvdXQgYW4gT1RMUCBlbmRwb2ludC5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuXG4gICAqL1xuICBvYnNlcnZhYmlsaXR5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExvZyB1c2VyIGZlZWRiYWNrICh0aHVtYnMgdXAvZG93biArIGZyZWVmb3JtIGNvbW1lbnRzKSB0byBNTGZsb3cgYXNcbiAgICogdHJhY2UgYXNzZXNzbWVudHMsIGFuZCBzdXJmYWNlIHRoZSBmZWVkYmFjayBjb250cm9scyBpbiB0aGUgY2hhdCBVSS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IGVuYWJsZWQgb25seSB3aGVuIE1MZmxvdyB0cmFjaW5nIGlzXG4gICAqICAgd2lyZWQgLSBhbiBPVExQIGV4cG9ydGVyIGVuZHBvaW50IGlzIHNldCBhbmQgYW4gTUxmbG93IGV4cGVyaW1lbnRcbiAgICogICBpcyBuYW1lZCAodGhlIHNhbWUgc2lnbmFscyB0aGUgb2JzZXJ2YWJpbGl0eSBwaXBlbGluZSBuZWVkcyB0b1xuICAgKiAgIHNoaXAgdHJhY2VzIHRvIE1MZmxvdykuIE90aGVyd2lzZSBvZmYsIHNpbmNlIHRoZXJlJ2QgYmUgbm8gdHJhY2VcbiAgICogICB0byBhdHRhY2ggZmVlZGJhY2sgdG8uXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbi4gRmVlZGJhY2sgY29udHJvbHMgc2hvdyBhbmQgd3JpdGVzIGFyZSBhdHRlbXB0ZWRcbiAgICogICByZWdhcmRsZXNzIG9mIGVudiBkZXRlY3Rpb24gKHVzZSB3aGVuIHRoZSBlbnYgaXMgY29uZmlndXJlZCBpbiBhXG4gICAqICAgd2F5IHRoZSBhdXRvLXByb2JlIGRvZXNuJ3QgcmVjb2duaXplKS5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuIE5vIHRyYWNlLWlkIGhlYWRlciwgbm8gZmVlZGJhY2sgcm91dGUsIG5vIFVJLlxuICAgKlxuICAgKiBGZWVkYmFjayBhdHRhY2hlcyB0byBhIHR1cm4ncyBNTGZsb3cgdHJhY2UgdmlhIHRoZSBPcGVuVGVsZW1ldHJ5XG4gICAqIHRyYWNlIGlkIHRoZSBzZXJ2ZXIgc3RhbXBzIG9uIGVhY2ggcmVzcG9uc2U7IHNlZSBgbWxmbG93LnRzYC5cbiAgICovXG4gIGZlZWRiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgcGx1Z2luJ3MgYWdlbnRzIChhbmQgb3B0aW9uYWxseSB0b29scykgYXMgYSBNYXN0cmEgTUNQXG4gICAqIHNlcnZlciBzbyBleHRlcm5hbCBNQ1AgY2xpZW50cyAtIENsYXVkZSBEZXNrdG9wLCBDdXJzb3IsIHRoZSBNYXN0cmFcbiAgICogcGxheWdyb3VuZCwgb3IgYW5vdGhlciBhZ2VudCAtIGNhbiBjYWxsIHRoZW0gb3ZlciB0aGUgc3RhbmRhcmQgTUNQXG4gICAqIHRyYW5zcG9ydHMuIEVuYWJsZWQgYnkgZGVmYXVsdCAoYWdlbnRzIG9ubHkpOiB3cmFwcGluZyB0aGVcbiAgICogYWxyZWFkeS1yZWdpc3RlcmVkIGFnZW50cyBjb3N0cyBub3RoaW5nIGV4dHJhLCBzbyB0aGUgZW5kcG9pbnQgaXMgb25cbiAgICogb3V0IG9mIHRoZSBib3g7IG9ubHkgdGhlIGFtYmllbnQgdG9vbHMgKHdoaWNoIGFzc3VtZSBhbiBpbi1wcm9jZXNzXG4gICAqIGNoYXQgdHVybikgc3RheSBvZmYgdW5sZXNzIGV4cGxpY2l0bHkgb3B0ZWQgaW4uXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpIC8gYHRydWVgOiBleHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhc1xuICAgKiAgIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbCB1bmRlciBhIHNlcnZlciB3aG9zZSBpZCBpcyB0aGUgcGx1Z2luXG4gICAqICAgbmFtZS5cbiAgICogLSBgZmFsc2VgOiBubyBNQ1AgZW5kcG9pbnRzLlxuICAgKiAtIHtAbGluayBNYXN0cmFNY3BDb25maWd9OiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBzZXJ2ZXIgaWQsXG4gICAqICAgYWR2ZXJ0aXNlZCBtZXRhZGF0YSwgYW5kIHdoaWNoIGFnZW50cyAvIHRvb2xzIGFyZSBleHBvc2VkLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBzdG9jayBNYXN0cmEgTUNQIHJvdXRlcyBtb3VudCB1bmRlciB0aGUgcGx1Z2luJ3NcbiAgICogYmFzZSBwYXRoIChubyBiZXNwb2tlIHJvdXRlIGlzIGFkZGVkIC0gdGhlIHNlcnZlciBpcyBoYW5kZWQgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHZpYSBgbWNwU2VydmVyc2AsIHdoaWNoIGBAbWFzdHJhL2V4cHJlc3NgIHNlcnZlcyk6XG4gICAqXG4gICAqIC0gU3RyZWFtYWJsZSBIVFRQOiBgUE9TVCAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L21jcGBcbiAgICogLSBTU0UgKGxlZ2FjeSk6ICAgIGBHRVQgIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vc3NlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tZXNzYWdlc2BcbiAgICpcbiAgICogUmVxdWVzdHMgcnVuIHVuZGVyIHRoZSBzYW1lIEFwcEtpdCBPQk8gc2NvcGUgYXMgdGhlIGNoYXQgcm91dGVzLCBzb1xuICAgKiBhbiBhZ2VudCBpbnZva2VkIG92ZXIgTUNQIHJlc29sdmVzIGl0cyBtb2RlbCBhbmQgdG9vbHMgYXMgdGhlXG4gICAqIGNhbGxpbmcgdXNlci5cbiAgICovXG4gIG1jcD86IGJvb2xlYW4gfCBNYXN0cmFNY3BDb25maWc7XG4gIC8qKlxuICAgKiBIb3cgbXVjaCBvZiB0aGUgc3RvY2sgYEBtYXN0cmEvZXhwcmVzc2AgbWFuYWdlbWVudCBBUEkgaXMgcmVhY2hhYmxlXG4gICAqIHRocm91Z2ggdGhlIHBsdWdpbiBtb3VudC4gYEBtYXN0cmEvZXhwcmVzc2AgcmVnaXN0ZXJzIGl0cyBmdWxsIHJvdXRlXG4gICAqIHRhYmxlIChhZ2VudCBpbmZlcmVuY2UgcGx1cyBhZG1pbiAvIG11dGF0aW5nIHJvdXRlczogZGlyZWN0IHRvb2xcbiAgICogZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5IHJlYWQvd3JpdGUsIHRlbGVtZXRyeSwgbG9ncyxcbiAgICogc2NvcmVzKS4gQXBwS2l0IGFscmVhZHkgYXV0aGVudGljYXRlcyBldmVyeSByZXF1ZXN0IGFzIHRoZSBPQk8gdXNlcixcbiAgICogYnV0IG5vdGhpbmcgdGhlcmUgcmVzdHJpY3RzICp3aGljaCogb2YgdGhvc2Ugb3BlcmF0aW9ucyB0aGUgYnJvd3NlclxuICAgKiBjbGllbnQgbWF5IGludm9rZS5cbiAgICpcbiAgICogLSBgXCJzY29wZWRcImAgKGRlZmF1bHQpOiBvbmx5IHRoZSByb3V0ZXMgdGhlIGNoYXQgY2xpZW50IGxlZ2l0aW1hdGVseVxuICAgKiAgIG5lZWRzIGFyZSBkaXNwYXRjaGVkIHRvIE1hc3RyYSAtIGFnZW50IGluZmVyZW5jZVxuICAgKiAgIChgc3RyZWFtYCAvIGBnZW5lcmF0ZWAgLyBgbmV0d29ya2ApLCByZWFkLW9ubHkgYWdlbnQgbWV0YWRhdGEsIHRoaXNcbiAgICogICBwbHVnaW4ncyBvd24gT0JPLSBhbmQgcmVzb3VyY2Utc2NvcGVkIGAvcm91dGUvKmAgcm91dGVzIChoaXN0b3J5IC9cbiAgICogICB0aHJlYWRzKSwgYW5kLCB3aGVuIHtAbGluayBtY3B9IGlzIGVuYWJsZWQsIHRoZSBNQ1AgdHJhbnNwb3J0LlxuICAgKiAgIEV2ZXJ5dGhpbmcgZWxzZSAodG9vbCBleGVjdXRpb24sIHdvcmtmbG93IGNvbnRyb2wsIHJhdyBtZW1vcnksXG4gICAqICAgdGVsZW1ldHJ5LCBsb2dzLCBzY29yZXMsIGFuZCBvdGhlciBtdXRhdGlvbnMpIGlzIHJlamVjdGVkIHdpdGhcbiAgICogICBgNDAzYCBiZWZvcmUgaXQgcmVhY2hlcyBNYXN0cmEuXG4gICAqIC0gYFwiZnVsbFwiYDogZGlzcGF0Y2ggdGhlIGVudGlyZSBzdG9jayBNYXN0cmEgQVBJLiBVc2Ugb25seSBmb3IgYVxuICAgKiAgIHRydXN0ZWQgZmlyc3QtcGFydHkgY29uc29sZSB0aGF0IGdlbnVpbmVseSBuZWVkcyB0aGUgbWFuYWdlbWVudFxuICAgKiAgIHN1cmZhY2UuXG4gICAqL1xuICBhcGlBY2Nlc3M/OiBcInNjb3BlZFwiIHwgXCJmdWxsXCI7XG4gIC8qKlxuICAgKiBXaGljaCBEYXRhYnJpY2tzIGlkZW50aXR5IHRoZSBhZ2VudHMnIHdvcmtzcGFjZSBjYWxscyBydW4gYXM6IHRoZVxuICAgKiBzZXJ2aW5nLWVuZHBvaW50IGNhdGFsb2d1ZSBiZWhpbmQgdGhlIG1vZGVsIHBpY2tlciwgR2VuaWUgc3VnZ2VzdGlvbnMsXG4gICAqIGBhc2tfZ2VuaWVgLCBhbmQgdGhlIFN0YXRlbWVudCBFeGVjdXRpb24gZmV0Y2ggYmVoaW5kIGEgYFtkYXRhOjxpZD5dYFxuICAgKiBlbWJlZC4gRmFsbHMgYmFjayB0byBgTUFTVFJBX0dFTklFX0lERU5USVRZYCwgdGhlbiBgXCJ1c2VyXCJgLlxuICAgKlxuICAgKiBPbi1iZWhhbGYtb2YgKE9CTykgYXV0aCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIGEgbWVtYmVyIG9mIHRoZVxuICAgKiBXT1JLU1BBQ0UsIG5vdCBqdXN0IG9mIHRoZSBEYXRhYnJpY2tzIGFjY291bnQuIEFuIGFwcCBzaGFyZWQgd2l0aCBhblxuICAgKiBhY2NvdW50LWxldmVsIGdyb3VwIGNhbiBiZSBvcGVuZWQgYnkgc29tZW9uZSB3aG9zZSB0b2tlbiBpcyB2YWxpZCBidXQgd2hvc2VcbiAgICogZXZlcnkgd29ya3NwYWNlIGNhbGwgZmFpbHMgd2l0aCBgVW5hdXRob3JpemVkIGFjY2VzcyB0byBPcmc6IDxpZD5gIC0gYW5kXG4gICAqIGdyYW50aW5nIHdvcmtzcGFjZSBtZW1iZXJzaGlwIGlzIG5vdCBhbHdheXMgcG9zc2libGUsIHNpbmNlIGEgd29ya3NwYWNlXG4gICAqIGNhcHMgbWVtYmVyc2hpcCB3ZWxsIGJlbG93IHRoZSBzaXplIG9mIGEgbGFyZ2UgYWNjb3VudCdzIHVzZXIgZ3JvdXAuIFRoZVxuICAgKiBhcHAncyBzZXJ2aWNlIHByaW5jaXBhbCBhbHJlYWR5IGhvbGRzIHRoZSBncmFudHMgdGhlIGFwcCB3YXMgZGVwbG95ZWQgd2l0aC5cbiAgICpcbiAgICogLSBgXCJ1c2VyXCJgIChkZWZhdWx0KTogYWx3YXlzIE9CTy4gUGVyLXVzZXIgYXR0cmlidXRpb24sIGFuZCBHZW5pZSAvIFVuaXR5XG4gICAqICAgQ2F0YWxvZyByb3cgZmlsdGVycyBhcHBseSBwZXIgdXNlci4gQ29ycmVjdCB3aGVuIGV2ZXJ5IGNhbGxlciBpcyBhXG4gICAqICAgd29ya3NwYWNlIG1lbWJlci5cbiAgICogLSBgXCJzZXJ2aWNlLXByaW5jaXBhbFwiYDogYWx3YXlzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWwuIE5lZWRzIG5vIE9CT1xuICAgKiAgIHNjb3BlcyBhbmQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIGF0IHRoZSBjb3N0IG9mXG4gICAqICAgcGVyLXVzZXIgYXR0cmlidXRpb24gaW4gR2VuaWUgLyBVbml0eSBDYXRhbG9nLlxuICAgKiAtIGBcImF1dG9cImA6IE9CTyB3aGVuIHRoZSByZXF1ZXN0IGNhcnJpZXMgYW4gT0JPIHRva2VuLCB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAgICogICB3aGVuIGl0IGRvZXMgbm90LiBGb3IgYW4gYXBwIHNlcnZpbmcgQk9USCB0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciBhbmQgYVxuICAgKiAgIGRvb3IgdGhhdCBoYXMgbm8gdG9rZW4gdG8gZm9yd2FyZCAtIGEgYEBkYngtdG9vbHMvdHVubmVsYCBnYXRlLCBhXG4gICAqICAgVGVhbXMgY2hhbm5lbCAtIHdoZXJlIEFwcEtpdCdzIGBhc1VzZXJgIHdvdWxkIG90aGVyd2lzZSB0aHJvd1xuICAgKiAgIGBBdXRoZW50aWNhdGlvbkVycm9yYCBvdXRzaWRlIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAuXG4gICAqXG4gICAqIFRoZSBzZXJ2aWNlLXByaW5jaXBhbCBwYXRoIGNoYW5nZXMgb25seSB0aGUgRGF0YWJyaWNrcyBDUkVERU5USUFMLiBNZW1vcnlcbiAgICogdGhyZWFkcywgdGhlIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZSwgYW5kIHRyYWNlIG1ldGFkYXRhIHN0aWxsIGtleSBvZmYgdGhlXG4gICAqIGZvcndhcmRlZCB1c2VyLCBzbyBjYWxsZXJzIHNoYXJpbmcgdGhlIHNlcnZpY2UgcHJpbmNpcGFsJ3MgZGF0YSBhY2Nlc3Mga2VlcFxuICAgKiBzZXBhcmF0ZSBjb252ZXJzYXRpb25zIGFuZCBjYW5ub3QgcmVhZCBlYWNoIG90aGVyJ3MgdGhyZWFkcyBvciBjaGFydHMuXG4gICAqXG4gICAqIEBleGFtcGxlIEFuIGFwcCBhbnkgYWNjb3VudCB1c2VyIGNhbiBvcGVuXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IGdlbmllSWRlbnRpdHk6IFwic2VydmljZS1wcmluY2lwYWxcIiwgZ2VuaWVTcGFjZXM6IHsgZGVmYXVsdDogc3BhY2VJZCB9IH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgT25lIGFwcCBiZWhpbmQgYm90aCB0aGUgZnJvbnQgZG9vciBhbmQgYSBwdWJsaWMgdHVubmVsXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IGdlbmllSWRlbnRpdHk6IFwiYXV0b1wiLCBnZW5pZVNwYWNlczogeyBkZWZhdWx0OiBzcGFjZUlkIH0gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2VuaWVJZGVudGl0eT86IE1hc3RyYUlkZW50aXR5TW9kZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJyYW5kIGNvbnRleHQgYXBwbGllZCB0byBjaGFydHMgcHJvZHVjZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAqIGByZW5kZXJfZGF0YWAgLyBgcHJlcGFyZV9jaGFydGAgdG9vbHMuIFdoZW4gc2V0LCB0aGUgY2hhcnQgcGxhbm5lcidzXG4gICAqIEVjaGFydHMgb3V0cHV0IGlzIHRoZW1lZCB3aXRoIHRoZSBicmFuZCdzIHBhbGV0dGUgKHNlcmllcyBjb2xvcnMgZGVyaXZlZFxuICAgKiBmcm9tIGBjb2xvcnMucHJpbWFyeWAgLyBgY29sb3JzLmFjY2VudGApIGFuZCBzYW5zIGZvbnRcbiAgICogKGB0eXBvZ3JhcGh5LnNhbnNgKSBpbnN0ZWFkIG9mIEVjaGFydHMnIGRlZmF1bHRzLiBPbWl0IGZvciB0aGUgZGVmYXVsdFxuICAgKiBFY2hhcnRzIGxvb2suXG4gICAqXG4gICAqIFBhc3MgdGhlIHBvcnRhYmxlIHtAbGluayBCcmFuZENvbnRleHR9IHNoYXJlZCBhY3Jvc3MgdGhlIFVJIGFuZFxuICAgKiBsaWJyYXJpZXMgKGUuZy4gYGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHRgIGZyb20gYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgLFxuICAgKiBvciBhIGN1c3RvbWVyIGJyYW5kKSAtIHRoZSBzYW1lIG9iamVjdCB0aGUgZW1haWwgYWRkLW9uIGFuZCB0aGUgVUlcbiAgICogYEJyYW5kUHJvdmlkZXJgIGNvbnN1bWUsIHNvIGEgaG9zdCB0aGVtZXMgY2hhcnRzLCBlbWFpbCwgYW5kIFVJIGZyb20gb25lXG4gICAqIHNvdXJjZS5cbiAgICovXG4gIGJyYW5kPzogQnJhbmRDb250ZXh0O1xuICAvKipcbiAgICogUmVtb3RlIEFnZW50LVNraWxsIHNvdXJjZXMgbWF0ZXJpYWxpemVkIG9uY2UgYXQgYXBwIHN0YXJ0dXAuIEEgc2luZ2xlXG4gICAqIHNvdXJjZSwgYSBsaXN0LCBvciBhIGB7IHNvdXJjZXMsIGZhaWxPbkVycm9yPywgLi4uIH1gIGJhZy5cbiAgICpcbiAgICogRWFjaCBzb3VyY2UgaXMgYSBHaXRIdWIgYG93bmVyL3JlcG9gLCBhIGdpdCAvIEdpdExhYiBVUkwsIG9yIGEgZGlyZWN0XG4gICAqIGBTS0lMTC5tZGAgLyBhcmNoaXZlIGRvd25sb2FkIFVSTC4gUmVzb2x1dGlvbiBwcmVmZXJzIHRoZSBPUFRJT05BTCBgc2tpbGxzYFxuICAgKiBucG0gQ0xJIChhIHBlZXIgZGVwKSB3aGljaCBpcyBjb3BpZWQgaW50byBhIHRlbXAgZGlyIGFuZCB0aGVuIHBlcnNpc3RlZDtcbiAgICogd2l0aG91dCBpdCwgYSBVUkwgc291cmNlIGlzIGZldGNoZWQgZGlyZWN0bHkuIEEgc291cmNlIHRoYXQgcmVzb2x2ZXNcbiAgICogdGhyb3VnaCBuZWl0aGVyIGZhaWxzIHN0YXJ0dXAgdW5sZXNzIGBmYWlsT25FcnJvcjogZmFsc2VgLlxuICAgKlxuICAgKiBQcm92aXNpb25lZCBza2lsbHMgYXJlIHdyaXR0ZW4gdG8gdGhlIERhdGFicmlja3MgdXNlcidzIEFzc2lzdGFudCBza2lsbHNcbiAgICogZm9sZGVyIChgL1VzZXJzLzxlbWFpbD4vLmFzc2lzdGFudC9za2lsbHNgLCB0aGUgXCJzYXZlIHRoaXMgYXMgYSBza2lsbFwiXG4gICAqIHRhcmdldCkgc28gdGhleSBwZXJzaXN0IGFuZCBhcmUgcGlja2VkIHVwIGJ5IHRoZSBidWlsdC1pbiBBc3Npc3RhbnQtc2tpbGxzXG4gICAqIG1vdW50LiBXaXRoIG5vIHdyaXRhYmxlIHdvcmtzcGFjZSwgdGhleSBnbyB0byBhIGxvY2FsIHRlbXAgZGlyIGluc3RlYWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IHJlbW90ZVNraWxsczogXCJ2ZXJjZWwtbGFicy9hZ2VudC1za2lsbHNcIiB9KTtcbiAgICogbWFzdHJhKHtcbiAgICogICByZW1vdGVTa2lsbHM6IHtcbiAgICogICAgIHNvdXJjZXM6IFtcInZlcmNlbC1sYWJzL2FnZW50LXNraWxsc1wiLCBcImh0dHBzOi8vZXhhbXBsZS5jb20vc2tpbGwubWRcIl0sXG4gICAqICAgICBmYWlsT25FcnJvcjogZmFsc2UsXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVtb3RlU2tpbGxzPzogUmVtb3RlU2tpbGxzT3B0aW9uO1xufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBvbiB0aGUgbWFuaWZlc3QncyBgY29uZmlnLnNjaGVtYWAsIG1pcnJvcmluZyB0aGVcbiAqIGRvY3VtZW50ZWQgZGVmYXVsdHMgYW5kIGVudmlyb25tZW50IGZhbGxiYWNrcyBvZiB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnfS5cbiAqXG4gKiBDb3ZlcnMgdGhlIEpTT04tZXhwcmVzc2libGUgb3B0aW9ucyBvbmx5LiBgYWdlbnRzYCwgYHRvb2xzYCwgYW5kIGFcbiAqIGBkZWZhdWx0TW9kZWxgIHBhc3NlZCBhcyBhIE1hc3RyYSBgRHluYW1pY0FyZ3VtZW50YCBhcmUgY29kZS1kZWZpbmVkXG4gKiAoZnVuY3Rpb25zIC8gY2xhc3MgaW5zdGFuY2VzKSwgc28gdGhleSBjYXJyeSBubyBzY2hlbWEgZW50cnk7IHRoZVxuICogYGRlZmF1bHRNb2RlbGAgcHJvcGVydHkgYmVsb3cgZGVzY3JpYmVzIGl0cyBzdHJpbmcgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9DT05GSUdfU0NIRU1BOiBDb25maWdTY2hlbWEgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBwcm92aWRlcklkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdNYXN0cmEgT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXIgaWQuIERlZmF1bHRzIHRvIFwiZGF0YWJyaWNrc1wiLicsXG4gICAgfSxcbiAgICByZW1vdGVTa2lsbHM6IHtcbiAgICAgIHR5cGU6IFtcInN0cmluZ1wiLCBcImFycmF5XCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdSZW1vdGUgQWdlbnQtU2tpbGwgc291cmNlcyBwcm92aXNpb25lZCBhdCBzdGFydHVwOiBcImFpdG9vbHNcIiBmb3IgRGF0YWJyaWNrc1xcJyBvd24gc2tpbGwgc2V0IChyZWFkIGZyb20gdGhlIHB1YmxpYyBkYXRhYnJpY2tzL2RhdGFicmlja3MtYWdlbnQtc2tpbGxzIHJlcG8sIG5vIENMSSBuZWVkZWQpLCBhIEdpdEh1YiBvd25lci9yZXBvLCBhIGdpdC9HaXRMYWIgVVJMLCBvciBhIGRpcmVjdCBTS0lMTC5tZC9hcmNoaXZlIFVSTC4gTm9uLWFpdG9vbHMgc291cmNlcyBwcmVmZXIgdGhlIG9wdGlvbmFsIGBza2lsbHNgIG5wbSBDTEksIGVsc2UgYSBkaXJlY3QgZmV0Y2g7IGZhaWxzIHN0YXJ0dXAgb24gZXJyb3IgdW5sZXNzIGZhaWxPbkVycm9yOmZhbHNlLiBXcml0dGVuIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIgQXNzaXN0YW50IHNraWxscyBmb2xkZXIsIG9yIGEgbG9jYWwgdGVtcCBkaXIgd2hlbiBubyB3b3Jrc3BhY2UgaXMgd3JpdGFibGUuJyxcbiAgICB9LFxuICAgIHN0b3JhZ2U6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQb3N0Z3Jlc1N0b3JlIGZvciBNYXN0cmEgdGhyZWFkcyAvIG1lc3NhZ2VzLiBgdHJ1ZWAgcmV1c2VzIHRoZSBgbGFrZWJhc2VgIHBsdWdpbidzIHBvb2wsIGFuIG9iamVjdCBvcGVucyBhIGRlZGljYXRlZCBzdG9yZS4gQXV0by1lbmFibGVkIHdoZW4gdGhlIGBsYWtlYmFzZWAgcGx1Z2luIGlzIHJlZ2lzdGVyZWQuXCIsXG4gICAgfSxcbiAgICBtZW1vcnk6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQZ1ZlY3RvciBzdG9yZSBmb3IgTWFzdHJhIHNlbWFudGljIHJlY2FsbC4gYHRydWVgIHJldXNlcyB0aGUgYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sLCBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuIEF1dG8tZW5hYmxlZCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLlwiLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcInN0cmluZ1wiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQ29tbWFuZCBzYW5kYm94IGZvciBhdXRvLWNyZWF0ZWQgYWdlbnQgd29ya3NwYWNlcy4gRGVmYXVsdHMgdG8gRGF0YWJyaWNrcyBTYW5kYm94IHdpdGggTW9udHkgZmFsbGJhY2s7IGZhbHNlIGRpc2FibGVzIGNvbW1hbmQgZXhlY3V0aW9uLCBcIm1vbnR5XCIgc2VsZWN0cyBNb250eSBkaXJlY3RseSwgYW5kIGFuIG9iamVjdCBjb25maWd1cmVzIERhdGFicmlja3MgbGlmZWN5Y2xlL2ZhbGxiYWNrIHNldHRpbmdzLicsXG4gICAgfSxcbiAgICBkZWZhdWx0QWdlbnQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBZ2VudCBpZCB1c2VkIHdoZW4gdGhlIGNsaWVudCBuYW1lcyBub25lLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBhZ2VudCwgZWxzZSB0aGUgYnVpbHQtaW4gYGRlZmF1bHRgLlwiLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU2VydmluZyBlbmRwb2ludCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzIG93biBtb2RlbC4gRmFsbHMgYmFjayB0byBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRSwgdGhlbiB0aGUgaGlnaGVzdC1yYW5rZWQgY3VycmVudGx5IGF2YWlsYWJsZSBjYXRhbG9ndWUgZW5kcG9pbnQuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZWxGYWxsYmFja3M6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByaW9yaXR5LW9yZGVyZWQgZW5kcG9pbnQgbmFtZXMgdHJpZWQgYmVmb3JlIHRoZSBzY29yZS1jbGFzc2lmaWVkIGNhdGFsb2d1ZSB3aGVuIG5vdGhpbmcgZWxzZSBwaW5zIGEgbW9kZWwuXCIsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5TWF0Y2g6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgYWdhaW5zdCB0aGUgd29ya3NwYWNlIGNhdGFsb2d1ZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBmb3IgdGhlIGZ1enp5IG1hdGNoZXIsIDAgKGV4YWN0KSB0byAxIChhbnl0aGluZykuIERlZmF1bHRzIHRvIDAuNC5cIixcbiAgICB9LFxuICAgIG1vZGVsQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlRUTCBpbiBtcyBmb3IgdGhlIHNlcnZpbmctZW5kcG9pbnRzIGxpc3QgY2FjaGUsIHBlciB3b3Jrc3BhY2UgaG9zdC4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLlwiLFxuICAgIH0sXG4gICAgbW9kZWxPdmVycmlkZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJIb25vciBhIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlIGZyb20gdGhlIFgtTWFzdHJhLU1vZGVsIGhlYWRlciwgP21vZGVsPSBxdWVyeSwgb3IgYSBgbW9kZWxgIGJvZHkgZmllbGQuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IHR5cGU6IFtcInN0cmluZ1wiLCBcIm9iamVjdFwiXSB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiR2VuaWUgc3BhY2VzIHRoZSBhZ2VudHMgY2FuIGRlbGVnYXRlIHRvLCBrZXllZCBieSBhbGlhcyAodGhlIHRvb2wtbmFtZSBzdWZmaXgpLiBFYWNoIHZhbHVlIGlzIGEgc3BhY2UgaWQgb3IgYHsgc3BhY2VJZCwgaGludCB9YC4gRmFsbHMgYmFjayB0byB0aGUgYGdlbmllYCBwbHVnaW4ncyBvd24gYHNwYWNlc2AgY29uZmlnLCB0aGVuIERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSUQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcy5cIixcbiAgICB9LFxuICAgIGdlbmllQWdlbnRNb2RlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlVzZSB0aGUgc3RyZWFtaW5nIEdlbmllIEFnZW50IE1vZGUgQVBJIGZvciBhc2tfZ2VuaWUuIERlZmF1bHRzIHRvIHRydWU7IGZhbHNlIGZvcmNlcyBsZWdhY3kgcG9sbGluZy4gRmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZXMgZmFsbCBiYWNrIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHN0cmVhbWluZy5cIixcbiAgICB9LFxuICAgIGdlbmllU3BhY2VDYWNoZVR0bE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVFRMIGluIG1zIGZvciB0aGUgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUuIERlZmF1bHRzIHRvIDUgbWludXRlcy5cIixcbiAgICB9LFxuICAgIGFnZW50TWF4U3RlcHM6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNYXhpbXVtIExMTSBzdGVwcyBlYWNoIGFnZW50IGdldHMgcGVyIHR1cm4gKGEgdG9vbCBjYWxsIGFuZCB0aGUgZmluYWwgcmVwbHkgZWFjaCBjb25zdW1lIG9uZSkuIERlZmF1bHRzIHRvIDI1LlwiLFxuICAgIH0sXG4gICAgc3RyaXBTdGFsZUNoYXJ0czoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTdHJpcCBjaGFydElkcyBmcm9tIHJlY2FsbGVkIGFzc2lzdGFudCB0b29sIHJlc3VsdHMgc28gdGhlIG1vZGVsIGNhbm5vdCByZXVzZSBhIHR1cm4tc2NvcGVkIGNoYXJ0IG1hcmtlci4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIHN0eWxlSW5zdHJ1Y3Rpb25zOiB7XG4gICAgICB0eXBlOiBbXCJzdHJpbmdcIiwgXCJib29sZWFuXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGluc3RydWN0aW9ucy4gQSBzdHJpbmcgcmVwbGFjZXMgdGhlIGJ1aWx0LWluIGJsb2NrLCBgZmFsc2VgIGRpc2FibGVzIGl0LlwiLFxuICAgIH0sXG4gICAgb2JzZXJ2YWJpbGl0eToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJCcmlkZ2UgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgT1RlbCBwaXBlbGluZS4gRGVmYXVsdHMgdG8gb24gb25seSB3aGVuIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBvciBPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UIGlzIHNldC5cIixcbiAgICB9LFxuICAgIGZlZWRiYWNrOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxvZyB0aHVtYnMgLyBjb21tZW50IGFzc2Vzc21lbnRzIHRvIE1MZmxvdyBhbmQgc3VyZmFjZSB0aGUgZmVlZGJhY2sgY29udHJvbHMuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBhbiBPVExQIGVuZHBvaW50IGFuZCBNTEZMT1dfRVhQRVJJTUVOVF9JRCBvciBNTEZMT1dfRVhQRVJJTUVOVF9OQU1FIGFyZSBzZXQuXCIsXG4gICAgfSxcbiAgICBtY3A6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJFeHBvc2UgdGhlIHJlZ2lzdGVyZWQgYWdlbnRzIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBhZ2VudHMtb25seTsgYW4gb2JqZWN0IHR1bmVzIHRoZSBzZXJ2ZXIgaWQsIGFkdmVydGlzZWQgbWV0YWRhdGEsIGFuZCB3aGV0aGVyIGFtYmllbnQgdG9vbHMgYXJlIGV4cG9zZWQuXCIsXG4gICAgfSxcbiAgICBnZW5pZUlkZW50aXR5OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgLy8gRGVyaXZlZCBmcm9tIHRoZSByZXNvbHZlcidzIG93biBsaXN0LCBzbyBhIG1vZGUgY2FuIG5ldmVyIGJlIGFjY2VwdGVkIGF0XG4gICAgICAvLyBydW50aW1lIHdoaWxlIHRoZSBwdWJsaXNoZWQgc2NoZW1hIChhbmQgdGhlIFVJIGJ1aWx0IGZyb20gaXQpIG9taXRzIGl0LlxuICAgICAgZW51bTogWy4uLklERU5USVRZX01PREVTXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnV2hpY2ggRGF0YWJyaWNrcyBpZGVudGl0eSB0aGUgYWdlbnRzXFwnIHdvcmtzcGFjZSBjYWxscyAoc2VydmluZyBjYXRhbG9ndWUsIEdlbmllLCBzdGF0ZW1lbnQgZXhlY3V0aW9uKSBydW4gYXMuIFwidXNlclwiIChkZWZhdWx0KSBpcyBhbHdheXMgT0JPLCBzbyBjYWxsZXJzIG11c3QgYmUgd29ya3NwYWNlIG1lbWJlcnM7IFwic2VydmljZS1wcmluY2lwYWxcIiBhbHdheXMgdXNlcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLCBzbyBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwIHdvcmtzLCBhdCB0aGUgY29zdCBvZiBwZXItdXNlciBhdHRyaWJ1dGlvbjsgXCJhdXRvXCIgdXNlcyBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiBhbmQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHdoZW4gaXQgZG9lcyBub3QsIGZvciBhbiBhcHAgdGhhdCBhbHNvIHNlcnZlcyBhIHR1bm5lbCBvciB3ZWJob29rIGRvb3IuIEZhbGxzIGJhY2sgdG8gTUFTVFJBX0dFTklFX0lERU5USVRZLicsXG4gICAgfSxcbiAgICBhcGlBY2Nlc3M6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJzY29wZWRcIiwgXCJmdWxsXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgbXVjaCBvZiB0aGUgc3RvY2sgQG1hc3RyYS9leHByZXNzIEFQSSBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgbW91bnQuIFwic2NvcGVkXCIgKGRlZmF1bHQpIGFsbG93cyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgdGhpcyBwbHVnaW5cXCdzIG93biByb3V0ZXMsIGFuZCBNQ1A7IFwiZnVsbFwiIGRpc3BhdGNoZXMgdGhlIGVudGlyZSBtYW5hZ2VtZW50IHN1cmZhY2UuJyxcbiAgICB9LFxuICAgIGJyYW5kOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9ydGFibGUgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGdlbmVyYXRlZCBjaGFydHMgKHNlcmllcyBwYWxldHRlIGZyb20gY29sb3JzLnByaW1hcnkgLyBjb2xvcnMuYWNjZW50LCBiYXNlIGZvbnQgZnJvbSB0eXBvZ3JhcGh5LnNhbnMpLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
@@ -42,6 +42,7 @@
42
42
  * @module
43
43
  */
44
44
  import { Observability } from "@mastra/observability";
45
+ /** Options for connecting Mastra spans to AppKit's OpenTelemetry pipeline. */
45
46
  export interface BuildObservabilityOptions {
46
47
  /**
47
48
  * Whether to wire the Mastra `OtelBridge`. Mirrors
@@ -127,4 +127,4 @@ export async function buildObservability(options) {
127
127
  },
128
128
  });
129
129
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVsRCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQW9DdEMsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxPQUFPLENBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUMxRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hGLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFO1FBQ2hELE9BQU8sRUFBRSx1QkFBdUI7S0FDakMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsT0FBbUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztJQUN6RCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUM7SUFDMUUsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztJQUVqRCxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDdEMsTUFBTSxFQUNKLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSztnQkFDeEIsQ0FBQyxDQUFDLDJCQUEyQjtnQkFDN0IsQ0FBQyxDQUFDLG1DQUFtQztTQUMxQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUM7SUFDaEcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBRTVGLG1FQUFtRTtJQUNuRSxzREFBc0Q7SUFDdEQscUVBQXFFO0lBQ3JFLGdFQUFnRTtJQUNoRSxtRUFBbUU7SUFDbkUsa0VBQWtFO0lBQ2xFLDZCQUE2QjtJQUM3QixNQUFNLGlCQUFpQixHQUFHLGtCQUFrQjtRQUMxQyxDQUFDLENBQUMsa0JBQWtCO1FBQ3BCLENBQUMsQ0FBQyxRQUFRO1lBQ1IsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFlBQVk7WUFDN0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQix1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLHVEQUF1RDtJQUN2RCxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFO1FBQzVELFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxTQUFTO1FBQy9CLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLFNBQVM7UUFDakQsUUFBUTtRQUNSLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtLQUM1QyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksYUFBYSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRTtZQUNQLFdBQVcsRUFBRTtnQkFDWCxXQUFXO2dCQUNYLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRTtnQkFDeEIsa0JBQWtCO2FBQ25CO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgb2JzZXJ2YWJpbGl0eSB3aXJlZCB0aHJvdWdoIHRoZSBzYW1lIE9UZWwgcGlwZWxpbmUgQXBwS2l0J3NcbiAqIGJ1aWx0LWluIHBsdWdpbnMgKGUuZy4gYGFnZW50c2ApIHVzZSwgdmlhIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAqXG4gKiBIb3cgdHJhY2VzIGZsb3c6XG4gKlxuICogMS4gYEBkYXRhYnJpY2tzL2FwcGtpdGAgYm9vdHMgYSBnbG9iYWwgYE5vZGVTREtgIGluXG4gKiAgICBgVGVsZW1ldHJ5TWFuYWdlci5pbml0aWFsaXplKClgIChkdXJpbmcgYGNyZWF0ZUFwcGApIHdoZW5cbiAqICAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHNldCBpbiB0aGUgcHJvY2VzcyBlbnYuXG4gKiAyLiBFdmVyeSBBcHBLaXQgcGx1Z2luIHNwYW4gKGUuZy4gdGhlIGBhZ2VudHNgIHBsdWdpbidzXG4gKiAgICBgZXhlY3V0ZVN0cmVhbWApIGlzIGNyZWF0ZWQgdmlhIHRoZSBnbG9iYWwgT1RlbCB0cmFjZXJcbiAqICAgIChgdHJhY2UuZ2V0VHJhY2VyKDxwbHVnaW4+KWApLCBzbyBpdCBsYW5kcyBvbiB0aGF0IE5vZGVTREsgYW5kXG4gKiAgICBpcyBzaGlwcGVkIHRocm91Z2ggaXRzIE9UTFAgZXhwb3J0ZXIuXG4gKiAzLiBUaGUgTWFzdHJhIGBPdGVsQnJpZGdlYCBBTFNPIGNyZWF0ZXMgcmVhbCBPVGVsIHNwYW5zIG9uIHRoZSBzYW1lXG4gKiAgICBnbG9iYWwgdHJhY2VyIGZvciBldmVyeSBNYXN0cmEgb3BlcmF0aW9uIChhZ2VudCBydW5zLCBtb2RlbFxuICogICAgY2FsbHMsIHRvb2wgaW52b2NhdGlvbnMsIHdvcmtmbG93IHN0ZXBzKS4gVGhleSBpbmhlcml0IHRoZVxuICogICAgYW1iaWVudCBPVGVsIGNvbnRleHQsIHNvIHdoZW4gTWFzdHJhIGlzIGludm9rZWQgZnJvbSBpbnNpZGUgYW5cbiAqICAgIEFwcEtpdCBIVFRQIHNwYW4gdGhlIHRyYWNlIHN0YXlzIGNvbm5lY3RlZC5cbiAqXG4gKiBOZXQgZWZmZWN0OiBNYXN0cmEgc3BhbnMgZ2V0IGV4YWN0bHkgdGhlIHRyZWF0bWVudCBBcHBLaXQnc1xuICogYGFnZW50c2AgcGx1Z2luIGdldHMuIE5vIGN1c3RvbSBPVExQIHBpcGVsaW5lIGxpdmVzIGluIHRoaXNcbiAqIHBhY2thZ2U7IHRoZSBPVExQIGVuZHBvaW50LCBoZWFkZXJzLCBhbmQgcmVzb3VyY2UgYXR0cmlidXRlcyBhcmVcbiAqIGRyaXZlbiBieSB0aGUgc3RhbmRhcmQgT1RlbCBlbnYgdmFyc1xuICogKGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgLCBgT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlNgLFxuICogYE9URUxfU0VSVklDRV9OQU1FYCwgYE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU2AsIC4uLikgYW5kIGNvbnN1bWVkXG4gKiBieSBBcHBLaXQncyBgVGVsZW1ldHJ5TWFuYWdlcmAuIFNldCB0aG9zZSBvbmNlIGFuZCBib3RoIEFwcEtpdCBhbmRcbiAqIE1hc3RyYSBzcGFucyBlbmQgdXAgYXQgdGhlIHNhbWUgYmFja2VuZC5cbiAqXG4gKiBXaGVuIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHVuc2V0IHRoZSBicmlkZ2UgaXMgbm90XG4gKiByZWdpc3RlcmVkIGF0IGFsbCAodW5sZXNzIGBvYnNlcnZhYmlsaXR5OiB0cnVlYCBmb3JjZXMgaXQgb24pLCBzb1xuICogTWFzdHJhIGRvZXMgbm90IGVtaXQgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIHdhcm5pbmdzLlxuICpcbiAqIE9uIERhdGFicmlja3MgQXBwcyB0aGUgc3VwcG9ydGVkIHNpbmsgaXMgVW5pdHkgQ2F0YWxvZyB2aWFcbiAqIGB0ZWxlbWV0cnlfZXhwb3J0X2Rlc3RpbmF0aW9uc2AgKHRoZSBwbGF0Zm9ybSBpbmplY3RzIHRoZSBsb2NhbCBPVExQXG4gKiBzaWRlY2FyKS4gTWFuYWdlZCBNTGZsb3cgaGFzIG5vIE9UTFAgaW5nZXN0IGVuZHBvaW50IC0gZG8gbm90IHBvaW50XG4gKiBgT1RFTF9FWFBPUlRFUl9PVExQXypgIGF0IHRoZSB3b3Jrc3BhY2UgaG9zdC4gU2V0XG4gKiBgT1RFTF9QUk9QQUdBVE9SUz1ub25lYCBzbyBBcHBzIGluZ3Jlc3MgYHRyYWNlcGFyZW50YCBkb2VzIG5vdCBoaWRlXG4gKiBldmVyeSByZXF1ZXN0LXNjb3BlZCByb290IHNwYW4gZnJvbSB0aGUgVUMgYCpfdHJhY2VfdW5pZmllZGAgdmlldy5cbiAqIENoYXQgcmVxdWVzdC9yZXNwb25zZSBvbiB0aGF0IHJvb3Qgc3BhbiBpcyBzdGFtcGVkIGJ5XG4gKiBgdHJhY2VJby5hdHRhY2hDaGF0VHVyblRyYWNlSW9gIChzZWUgYHRyYWNlLWlvLnRzYCkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHByb2plY3RVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmlsaXR5IH0gZnJvbSBcIkBtYXN0cmEvb2JzZXJ2YWJpbGl0eVwiO1xuaW1wb3J0IHsgT3RlbEJyaWRnZSB9IGZyb20gXCJAbWFzdHJhL290ZWwtYnJpZGdlXCI7XG5pbXBvcnQgeyBwcm9wYWdhdGlvbiB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcblxuaW1wb3J0IHsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IG1sZmxvd0VuYWJsZWQgfSBmcm9tIFwiLi9tbGZsb3cudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9vYnNlcnZhYmlsaXR5XCIpO1xuXG5jb25zdCBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9IFwibWFzdHJhXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHdpcmUgdGhlIE1hc3RyYSBgT3RlbEJyaWRnZWAuIE1pcnJvcnNcbiAgICoge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZy5vYnNlcnZhYmlsaXR5fTpcbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoYXV0byk6IG9uIG9ubHkgd2hlbiBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBvclxuICAgKiAgIGBPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UYCBpcyBzZXQgKHNhbWUgc2lnbmFsIEFwcEtpdCdzXG4gICAqICAgYFRlbGVtZXRyeU1hbmFnZXJgIHVzZXMgdG8gcmVnaXN0ZXIgYSByZWFsIHRyYWNlcikuIFdoZW4gdW5zZXQsXG4gICAqICAgc2tpcCB0aGUgYnJpZGdlIGVudGlyZWx5IHNvIE1hc3RyYSBkb2VzIG5vdCBlbWl0XG4gICAqICAgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIHdhcm5pbmdzIG9uIHRoZSBub29wIHRyYWNlci5cbiAgICogLSBgdHJ1ZWA6IGZvcmNlIG9uIGV2ZW4gd2l0aG91dCBhbiBPVExQIGVuZHBvaW50LlxuICAgKiAtIGBmYWxzZWA6IGZvcmNlIG9mZi5cbiAgICovXG4gIGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogU2VydmljZSBuYW1lIGF0dGFjaGVkIHRvIHRoZSBNYXN0cmEgYE9ic2VydmFiaWxpdHlgIGNvbmZpZy4gVXNlZFxuICAgKiBhcyB0aGUgdHJhY2VyIHNjb3BlIG5hbWUgb24gYnJpZGdlZCBPVGVsIHNwYW5zICh0aGUgYHNlcnZpY2UubmFtZWBcbiAgICogcmVzb3VyY2UgYXR0cmlidXRlIGlzIG93bmVkIGJ5IEFwcEtpdCdzIGBUZWxlbWV0cnlNYW5hZ2VyYCBpbnN0ZWFkXG4gICAqIC0gaXQgcmVhZHMgYE9URUxfU0VSVklDRV9OQU1FYCAvIGBEQVRBQlJJQ0tTX0FQUF9OQU1FYCBhdFxuICAgKiBgY3JlYXRlQXBwYCB0aW1lKS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gcHJvamVjdCBuYW1lIHRoZW4gYFwibWFzdHJhXCJgLlxuICAgKi9cbiAgc2VydmljZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgUmVxdWVzdENvbnRleHRgIGtleXMgdG8gZXh0cmFjdCBhcyBzcGFuIG1ldGFkYXRhIG9uIGV2ZXJ5IE1hc3RyYVxuICAgKiB0cmFjZS4gRGVmYXVsdHMgdG8ge0BsaW5rIFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTfSAodXNlciBpZCxcbiAgICogdGhyZWFkIGlkLCByZXF1ZXN0IGlkLCBlbnZpcm9ubWVudCwgbW9kZWwgb3ZlcnJpZGUsIC4uLikuXG4gICAqXG4gICAqIFN1cHBvcnRzIGRvdCBub3RhdGlvbiBmb3IgbmVzdGVkIHZhbHVlcyBwZXIgdGhlIE1hc3RyYSBkb2NzLlxuICAgKi9cbiAgcmVxdWVzdENvbnRleHRLZXlzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKiBUcnVlIHdoZW4gQXBwS2l0J3MgZ2xvYmFsIE9UZWwgcGlwZWxpbmUgaXMgY29uZmlndXJlZCB0byBleHBvcnQgdHJhY2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT3RscFRyYWNpbmdDb25maWd1cmVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgfHwgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVCxcbiAgKTtcbn1cblxuLyoqXG4gKiBIb25vciB0aGUgc3RhbmRhcmQgbm8tb3AgcHJvcGFnYXRvciBzZXR0aW5nIGFmdGVyIEFwcEtpdCByZWdpc3RlcnMgaXRzXG4gKiB0cmFjZXIgcHJvdmlkZXIuIEFwcEtpdCAwLjgxIGluc3RhbGxzIFczQyBwcm9wYWdhdGlvbiB1bmNvbmRpdGlvbmFsbHksIHNvXG4gKiBkaXNhYmxpbmcgb25seSB0aGUgZ2xvYmFsIHByb3BhZ2F0b3Iga2VlcHMgYXN5bmMgc3BhbiBjb250ZXh0IGFjdGl2ZSB3aGlsZVxuICogcHJldmVudGluZyBpbmdyZXNzIGV4dHJhY3Rpb24gYW5kIGRvd25zdHJlYW0gaW5qZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlT3RlbFByb3BhZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICBpZiAocHJvY2Vzcy5lbnYuT1RFTF9QUk9QQUdBVE9SUz8udHJpbSgpLnRvTG93ZXJDYXNlKCkgIT09IFwibm9uZVwiKSByZXR1cm4gZmFsc2U7XG4gIHByb3BhZ2F0aW9uLmRpc2FibGUoKTtcbiAgbG9nZ2VyLmluZm8oXCJPcGVuVGVsZW1ldHJ5IHByb3BhZ2F0aW9uIGRpc2FibGVkXCIsIHtcbiAgICBzZXR0aW5nOiBcIk9URUxfUFJPUEFHQVRPUlM9bm9uZVwiLFxuICB9KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQnVpbGQgYSBNYXN0cmEgYE9ic2VydmFiaWxpdHlgIHdob3NlIHNwYW5zIHJpZGUgQXBwS2l0J3MgZ2xvYmFsXG4gKiBPVGVsIHBpcGVsaW5lIHZpYSBgQG1hc3RyYS9vdGVsLWJyaWRnZWAuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRyYWNpbmcgaXMgb2ZmOiBlaXRoZXIgdGhlIGNhbGxlciBwYXNzZWRcbiAqIGBlbmFibGVkOiBmYWxzZWAsIG9yIGF1dG8gbW9kZSBmaW5kcyBubyBPVExQIGVuZHBvaW50ICh0aGUgZGVmYXVsdCkuXG4gKiBTa2lwcGluZyB0aGUgYnJpZGdlIGluIHRoYXQgY2FzZSBhdm9pZHMgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW5cbiAqIGZvdW5kYCBsb2cgc3BhbSBmcm9tIE1hc3RyYSBzcGFucyB0aGF0IGhhdmUgbm8gcGFyZW50IG9uIHRoZSBub29wXG4gKiB0cmFjZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE9ic2VydmFiaWxpdHkoXG4gIG9wdGlvbnM/OiBCdWlsZE9ic2VydmFiaWxpdHlPcHRpb25zLFxuKTogUHJvbWlzZTxPYnNlcnZhYmlsaXR5IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG90ZWxCYXNlID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UO1xuICBjb25zdCBvdGVsVHJhY2VzT3ZlcnJpZGUgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UO1xuICBjb25zdCBvdGxwQ29uZmlndXJlZCA9IGlzT3RscFRyYWNpbmdDb25maWd1cmVkKCk7XG5cbiAgaWYgKG9wdGlvbnM/LmVuYWJsZWQgPT09IGZhbHNlIHx8IChvcHRpb25zPy5lbmFibGVkICE9PSB0cnVlICYmICFvdGxwQ29uZmlndXJlZCkpIHtcbiAgICBsb2dnZXIuaW5mbyhcIk1hc3RyYSBvYnNlcnZhYmlsaXR5IG9mZlwiLCB7XG4gICAgICByZWFzb246XG4gICAgICAgIG9wdGlvbnM/LmVuYWJsZWQgPT09IGZhbHNlXG4gICAgICAgICAgPyBcImRpc2FibGVkIGluIHBsdWdpbiBjb25maWdcIlxuICAgICAgICAgIDogXCJPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgdW5zZXRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZU5hbWUgPSBvcHRpb25zPy5zZXJ2aWNlTmFtZSA/PyAoYXdhaXQgcHJvamVjdFV0aWxzLm5hbWUoKSkgPz8gREVGQVVMVF9TRVJWSUNFX05BTUU7XG4gIGNvbnN0IHJlcXVlc3RDb250ZXh0S2V5cyA9IFsuLi4ob3B0aW9ucz8ucmVxdWVzdENvbnRleHRLZXlzID8/IFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTKV07XG5cbiAgLy8gVGhlIE9UZWwgSFRUUCBleHBvcnRlciB0cmVhdHMgYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgYXMgYVxuICAvLyAqYmFzZSogVVJMIGFuZCBhcHBlbmRzIHRoZSBzaWduYWwgcGF0aCBpdHNlbGYgKGUuZy5cbiAgLy8gYGh0dHA6Ly9sb2NhbGhvc3Q6NjAwNmAgLT4gYGh0dHA6Ly9sb2NhbGhvc3Q6NjAwNi92MS90cmFjZXNgKS4gTG9nXG4gIC8vIHRoZSByZXNvbHZlZCBQT1NUIFVSTCBzbyBtaXNjb25maWd1cmF0aW9ucyAoZS5nLiBhY2NpZGVudGFsbHlcbiAgLy8gc2V0dGluZyB0aGUgYmFzZSB2YXIgdG8gYSBgL3YxL3RyYWNlc2Atc3VmZml4ZWQgVVJMLCB3aGljaCBtYWtlc1xuICAvLyB0aGUgU0RLIFBPU1QgdG8gYC4uLi92MS90cmFjZXMvdjEvdHJhY2VzYCBhbmQgUGhvZW5peCA0MDRzKSBhcmVcbiAgLy8gb2J2aW91cyBpbiBzdGFydHVwIG91dHB1dC5cbiAgY29uc3QgcmVzb2x2ZWRUcmFjZXNVcmwgPSBvdGVsVHJhY2VzT3ZlcnJpZGVcbiAgICA/IG90ZWxUcmFjZXNPdmVycmlkZVxuICAgIDogb3RlbEJhc2VcbiAgICAgID8gYCR7b3RlbEJhc2UucmVwbGFjZSgvXFwvKyQvLCBcIlwiKX0vdjEvdHJhY2VzYFxuICAgICAgOiB1bmRlZmluZWQ7XG4gIC8vIGBtbGZsb3dFbmFibGVkYCBpcyB0aGUgc2FtZSBnYXRlIHRoYXQgZmxpcHMgY2hhdCBmZWVkYmFjayBvbiwgc28gdGhlXG4gIC8vIGJvb3QgbGluZSBpcyB0aGUgb25lLWdsYW5jZSBjaGVjayB0aGF0IGJvdGggaGFsdmVzIG9mIHRoZSBBcHBzIFVDXG4gIC8vIHBpcGVsaW5lIChPVExQIHNpZGVjYXIgKyBleHBlcmltZW50IGlkKSBhcmUgcHJlc2VudC5cbiAgY29uc3QgZmVlZGJhY2sgPSBtbGZsb3dFbmFibGVkKCk7XG4gIGxvZ2dlci5pbmZvKFwiTWFzdHJhIG9ic2VydmFiaWxpdHkgd2lyZWQgdGhyb3VnaCBPVGVsIGJyaWRnZVwiLCB7XG4gICAgc2VydmljZU5hbWUsXG4gICAgcmVxdWVzdENvbnRleHRLZXlzLFxuICAgIG90ZWxCYXNlOiBvdGVsQmFzZSA/PyBcIjx1bnNldD5cIixcbiAgICByZXNvbHZlZFRyYWNlc1VybDogcmVzb2x2ZWRUcmFjZXNVcmwgPz8gXCI8dW5zZXQ+XCIsXG4gICAgZmVlZGJhY2ssXG4gICAgb2JzZXJ2YWJpbGl0eTogZmVlZGJhY2sgPyBcIm1sZmxvd1wiIDogXCJvdGVsXCIsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJpbGl0eSh7XG4gICAgY29uZmlnczoge1xuICAgICAgc2VydmljZU5hbWU6IHtcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIGJyaWRnZTogbmV3IE90ZWxCcmlkZ2UoKSxcbiAgICAgICAgcmVxdWVzdENvbnRleHRLZXlzLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVsRCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQXFDdEMsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxPQUFPLENBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUMxRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hGLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFO1FBQ2hELE9BQU8sRUFBRSx1QkFBdUI7S0FDakMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsT0FBbUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztJQUN6RCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUM7SUFDMUUsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztJQUVqRCxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDdEMsTUFBTSxFQUNKLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSztnQkFDeEIsQ0FBQyxDQUFDLDJCQUEyQjtnQkFDN0IsQ0FBQyxDQUFDLG1DQUFtQztTQUMxQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUM7SUFDaEcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBRTVGLG1FQUFtRTtJQUNuRSxzREFBc0Q7SUFDdEQscUVBQXFFO0lBQ3JFLGdFQUFnRTtJQUNoRSxtRUFBbUU7SUFDbkUsa0VBQWtFO0lBQ2xFLDZCQUE2QjtJQUM3QixNQUFNLGlCQUFpQixHQUFHLGtCQUFrQjtRQUMxQyxDQUFDLENBQUMsa0JBQWtCO1FBQ3BCLENBQUMsQ0FBQyxRQUFRO1lBQ1IsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFlBQVk7WUFDN0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQix1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLHVEQUF1RDtJQUN2RCxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFO1FBQzVELFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxTQUFTO1FBQy9CLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLFNBQVM7UUFDakQsUUFBUTtRQUNSLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtLQUM1QyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksYUFBYSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRTtZQUNQLFdBQVcsRUFBRTtnQkFDWCxXQUFXO2dCQUNYLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRTtnQkFDeEIsa0JBQWtCO2FBQ25CO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEgb2JzZXJ2YWJpbGl0eSB3aXJlZCB0aHJvdWdoIHRoZSBzYW1lIE9UZWwgcGlwZWxpbmUgQXBwS2l0J3NcbiAqIGJ1aWx0LWluIHBsdWdpbnMgKGUuZy4gYGFnZW50c2ApIHVzZSwgdmlhIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAqXG4gKiBIb3cgdHJhY2VzIGZsb3c6XG4gKlxuICogMS4gYEBkYXRhYnJpY2tzL2FwcGtpdGAgYm9vdHMgYSBnbG9iYWwgYE5vZGVTREtgIGluXG4gKiAgICBgVGVsZW1ldHJ5TWFuYWdlci5pbml0aWFsaXplKClgIChkdXJpbmcgYGNyZWF0ZUFwcGApIHdoZW5cbiAqICAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHNldCBpbiB0aGUgcHJvY2VzcyBlbnYuXG4gKiAyLiBFdmVyeSBBcHBLaXQgcGx1Z2luIHNwYW4gKGUuZy4gdGhlIGBhZ2VudHNgIHBsdWdpbidzXG4gKiAgICBgZXhlY3V0ZVN0cmVhbWApIGlzIGNyZWF0ZWQgdmlhIHRoZSBnbG9iYWwgT1RlbCB0cmFjZXJcbiAqICAgIChgdHJhY2UuZ2V0VHJhY2VyKDxwbHVnaW4+KWApLCBzbyBpdCBsYW5kcyBvbiB0aGF0IE5vZGVTREsgYW5kXG4gKiAgICBpcyBzaGlwcGVkIHRocm91Z2ggaXRzIE9UTFAgZXhwb3J0ZXIuXG4gKiAzLiBUaGUgTWFzdHJhIGBPdGVsQnJpZGdlYCBBTFNPIGNyZWF0ZXMgcmVhbCBPVGVsIHNwYW5zIG9uIHRoZSBzYW1lXG4gKiAgICBnbG9iYWwgdHJhY2VyIGZvciBldmVyeSBNYXN0cmEgb3BlcmF0aW9uIChhZ2VudCBydW5zLCBtb2RlbFxuICogICAgY2FsbHMsIHRvb2wgaW52b2NhdGlvbnMsIHdvcmtmbG93IHN0ZXBzKS4gVGhleSBpbmhlcml0IHRoZVxuICogICAgYW1iaWVudCBPVGVsIGNvbnRleHQsIHNvIHdoZW4gTWFzdHJhIGlzIGludm9rZWQgZnJvbSBpbnNpZGUgYW5cbiAqICAgIEFwcEtpdCBIVFRQIHNwYW4gdGhlIHRyYWNlIHN0YXlzIGNvbm5lY3RlZC5cbiAqXG4gKiBOZXQgZWZmZWN0OiBNYXN0cmEgc3BhbnMgZ2V0IGV4YWN0bHkgdGhlIHRyZWF0bWVudCBBcHBLaXQnc1xuICogYGFnZW50c2AgcGx1Z2luIGdldHMuIE5vIGN1c3RvbSBPVExQIHBpcGVsaW5lIGxpdmVzIGluIHRoaXNcbiAqIHBhY2thZ2U7IHRoZSBPVExQIGVuZHBvaW50LCBoZWFkZXJzLCBhbmQgcmVzb3VyY2UgYXR0cmlidXRlcyBhcmVcbiAqIGRyaXZlbiBieSB0aGUgc3RhbmRhcmQgT1RlbCBlbnYgdmFyc1xuICogKGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgLCBgT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlNgLFxuICogYE9URUxfU0VSVklDRV9OQU1FYCwgYE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU2AsIC4uLikgYW5kIGNvbnN1bWVkXG4gKiBieSBBcHBLaXQncyBgVGVsZW1ldHJ5TWFuYWdlcmAuIFNldCB0aG9zZSBvbmNlIGFuZCBib3RoIEFwcEtpdCBhbmRcbiAqIE1hc3RyYSBzcGFucyBlbmQgdXAgYXQgdGhlIHNhbWUgYmFja2VuZC5cbiAqXG4gKiBXaGVuIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzIHVuc2V0IHRoZSBicmlkZ2UgaXMgbm90XG4gKiByZWdpc3RlcmVkIGF0IGFsbCAodW5sZXNzIGBvYnNlcnZhYmlsaXR5OiB0cnVlYCBmb3JjZXMgaXQgb24pLCBzb1xuICogTWFzdHJhIGRvZXMgbm90IGVtaXQgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIHdhcm5pbmdzLlxuICpcbiAqIE9uIERhdGFicmlja3MgQXBwcyB0aGUgc3VwcG9ydGVkIHNpbmsgaXMgVW5pdHkgQ2F0YWxvZyB2aWFcbiAqIGB0ZWxlbWV0cnlfZXhwb3J0X2Rlc3RpbmF0aW9uc2AgKHRoZSBwbGF0Zm9ybSBpbmplY3RzIHRoZSBsb2NhbCBPVExQXG4gKiBzaWRlY2FyKS4gTWFuYWdlZCBNTGZsb3cgaGFzIG5vIE9UTFAgaW5nZXN0IGVuZHBvaW50IC0gZG8gbm90IHBvaW50XG4gKiBgT1RFTF9FWFBPUlRFUl9PVExQXypgIGF0IHRoZSB3b3Jrc3BhY2UgaG9zdC4gU2V0XG4gKiBgT1RFTF9QUk9QQUdBVE9SUz1ub25lYCBzbyBBcHBzIGluZ3Jlc3MgYHRyYWNlcGFyZW50YCBkb2VzIG5vdCBoaWRlXG4gKiBldmVyeSByZXF1ZXN0LXNjb3BlZCByb290IHNwYW4gZnJvbSB0aGUgVUMgYCpfdHJhY2VfdW5pZmllZGAgdmlldy5cbiAqIENoYXQgcmVxdWVzdC9yZXNwb25zZSBvbiB0aGF0IHJvb3Qgc3BhbiBpcyBzdGFtcGVkIGJ5XG4gKiBgdHJhY2VJby5hdHRhY2hDaGF0VHVyblRyYWNlSW9gIChzZWUgYHRyYWNlLWlvLnRzYCkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHByb2plY3RVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmlsaXR5IH0gZnJvbSBcIkBtYXN0cmEvb2JzZXJ2YWJpbGl0eVwiO1xuaW1wb3J0IHsgT3RlbEJyaWRnZSB9IGZyb20gXCJAbWFzdHJhL290ZWwtYnJpZGdlXCI7XG5pbXBvcnQgeyBwcm9wYWdhdGlvbiB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcblxuaW1wb3J0IHsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IG1sZmxvd0VuYWJsZWQgfSBmcm9tIFwiLi9tbGZsb3cudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9vYnNlcnZhYmlsaXR5XCIpO1xuXG5jb25zdCBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9IFwibWFzdHJhXCI7XG5cbi8qKiBPcHRpb25zIGZvciBjb25uZWN0aW5nIE1hc3RyYSBzcGFucyB0byBBcHBLaXQncyBPcGVuVGVsZW1ldHJ5IHBpcGVsaW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9ic2VydmFiaWxpdHlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gd2lyZSB0aGUgTWFzdHJhIGBPdGVsQnJpZGdlYC4gTWlycm9yc1xuICAgKiB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLm9ic2VydmFiaWxpdHl9OlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChhdXRvKTogb24gb25seSB3aGVuIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIG9yXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlRgIGlzIHNldCAoc2FtZSBzaWduYWwgQXBwS2l0J3NcbiAgICogICBgVGVsZW1ldHJ5TWFuYWdlcmAgdXNlcyB0byByZWdpc3RlciBhIHJlYWwgdHJhY2VyKS4gV2hlbiB1bnNldCxcbiAgICogICBza2lwIHRoZSBicmlkZ2UgZW50aXJlbHkgc28gTWFzdHJhIGRvZXMgbm90IGVtaXRcbiAgICogICBgW090ZWxCcmlkZ2VdIE5vIE9URUwgc3BhbiBmb3VuZGAgd2FybmluZ3Mgb24gdGhlIG5vb3AgdHJhY2VyLlxuICAgKiAtIGB0cnVlYDogZm9yY2Ugb24gZXZlbiB3aXRob3V0IGFuIE9UTFAgZW5kcG9pbnQuXG4gICAqIC0gYGZhbHNlYDogZm9yY2Ugb2ZmLlxuICAgKi9cbiAgZW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXJ2aWNlIG5hbWUgYXR0YWNoZWQgdG8gdGhlIE1hc3RyYSBgT2JzZXJ2YWJpbGl0eWAgY29uZmlnLiBVc2VkXG4gICAqIGFzIHRoZSB0cmFjZXIgc2NvcGUgbmFtZSBvbiBicmlkZ2VkIE9UZWwgc3BhbnMgKHRoZSBgc2VydmljZS5uYW1lYFxuICAgKiByZXNvdXJjZSBhdHRyaWJ1dGUgaXMgb3duZWQgYnkgQXBwS2l0J3MgYFRlbGVtZXRyeU1hbmFnZXJgIGluc3RlYWRcbiAgICogLSBpdCByZWFkcyBgT1RFTF9TRVJWSUNFX05BTUVgIC8gYERBVEFCUklDS1NfQVBQX05BTUVgIGF0XG4gICAqIGBjcmVhdGVBcHBgIHRpbWUpLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBwcm9qZWN0IG5hbWUgdGhlbiBgXCJtYXN0cmFcImAuXG4gICAqL1xuICBzZXJ2aWNlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIGBSZXF1ZXN0Q29udGV4dGAga2V5cyB0byBleHRyYWN0IGFzIHNwYW4gbWV0YWRhdGEgb24gZXZlcnkgTWFzdHJhXG4gICAqIHRyYWNlLiBEZWZhdWx0cyB0byB7QGxpbmsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVN9ICh1c2VyIGlkLFxuICAgKiB0aHJlYWQgaWQsIHJlcXVlc3QgaWQsIGVudmlyb25tZW50LCBtb2RlbCBvdmVycmlkZSwgLi4uKS5cbiAgICpcbiAgICogU3VwcG9ydHMgZG90IG5vdGF0aW9uIGZvciBuZXN0ZWQgdmFsdWVzIHBlciB0aGUgTWFzdHJhIGRvY3MuXG4gICAqL1xuICByZXF1ZXN0Q29udGV4dEtleXM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIFRydWUgd2hlbiBBcHBLaXQncyBnbG9iYWwgT1RlbCBwaXBlbGluZSBpcyBjb25maWd1cmVkIHRvIGV4cG9ydCB0cmFjZXMuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPdGxwVHJhY2luZ0NvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCB8fCBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5ULFxuICApO1xufVxuXG4vKipcbiAqIEhvbm9yIHRoZSBzdGFuZGFyZCBuby1vcCBwcm9wYWdhdG9yIHNldHRpbmcgYWZ0ZXIgQXBwS2l0IHJlZ2lzdGVycyBpdHNcbiAqIHRyYWNlciBwcm92aWRlci4gQXBwS2l0IDAuODEgaW5zdGFsbHMgVzNDIHByb3BhZ2F0aW9uIHVuY29uZGl0aW9uYWxseSwgc29cbiAqIGRpc2FibGluZyBvbmx5IHRoZSBnbG9iYWwgcHJvcGFnYXRvciBrZWVwcyBhc3luYyBzcGFuIGNvbnRleHQgYWN0aXZlIHdoaWxlXG4gKiBwcmV2ZW50aW5nIGluZ3Jlc3MgZXh0cmFjdGlvbiBhbmQgZG93bnN0cmVhbSBpbmplY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVPdGVsUHJvcGFnYXRpb24oKTogYm9vbGVhbiB7XG4gIGlmIChwcm9jZXNzLmVudi5PVEVMX1BST1BBR0FUT1JTPy50cmltKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgcHJvcGFnYXRpb24uZGlzYWJsZSgpO1xuICBsb2dnZXIuaW5mbyhcIk9wZW5UZWxlbWV0cnkgcHJvcGFnYXRpb24gZGlzYWJsZWRcIiwge1xuICAgIHNldHRpbmc6IFwiT1RFTF9QUk9QQUdBVE9SUz1ub25lXCIsXG4gIH0pO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIE1hc3RyYSBgT2JzZXJ2YWJpbGl0eWAgd2hvc2Ugc3BhbnMgcmlkZSBBcHBLaXQncyBnbG9iYWxcbiAqIE9UZWwgcGlwZWxpbmUgdmlhIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdHJhY2luZyBpcyBvZmY6IGVpdGhlciB0aGUgY2FsbGVyIHBhc3NlZFxuICogYGVuYWJsZWQ6IGZhbHNlYCwgb3IgYXV0byBtb2RlIGZpbmRzIG5vIE9UTFAgZW5kcG9pbnQgKHRoZSBkZWZhdWx0KS5cbiAqIFNraXBwaW5nIHRoZSBicmlkZ2UgaW4gdGhhdCBjYXNlIGF2b2lkcyBgW090ZWxCcmlkZ2VdIE5vIE9URUwgc3BhblxuICogZm91bmRgIGxvZyBzcGFtIGZyb20gTWFzdHJhIHNwYW5zIHRoYXQgaGF2ZSBubyBwYXJlbnQgb24gdGhlIG5vb3BcbiAqIHRyYWNlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkT2JzZXJ2YWJpbGl0eShcbiAgb3B0aW9ucz86IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMsXG4pOiBQcm9taXNlPE9ic2VydmFiaWxpdHkgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgb3RlbEJhc2UgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQ7XG4gIGNvbnN0IG90ZWxUcmFjZXNPdmVycmlkZSA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQ7XG4gIGNvbnN0IG90bHBDb25maWd1cmVkID0gaXNPdGxwVHJhY2luZ0NvbmZpZ3VyZWQoKTtcblxuICBpZiAob3B0aW9ucz8uZW5hYmxlZCA9PT0gZmFsc2UgfHwgKG9wdGlvbnM/LmVuYWJsZWQgIT09IHRydWUgJiYgIW90bHBDb25maWd1cmVkKSkge1xuICAgIGxvZ2dlci5pbmZvKFwiTWFzdHJhIG9ic2VydmFiaWxpdHkgb2ZmXCIsIHtcbiAgICAgIHJlYXNvbjpcbiAgICAgICAgb3B0aW9ucz8uZW5hYmxlZCA9PT0gZmFsc2VcbiAgICAgICAgICA/IFwiZGlzYWJsZWQgaW4gcGx1Z2luIGNvbmZpZ1wiXG4gICAgICAgICAgOiBcIk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCB1bnNldFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzZXJ2aWNlTmFtZSA9IG9wdGlvbnM/LnNlcnZpY2VOYW1lID8/IChhd2FpdCBwcm9qZWN0VXRpbHMubmFtZSgpKSA/PyBERUZBVUxUX1NFUlZJQ0VfTkFNRTtcbiAgY29uc3QgcmVxdWVzdENvbnRleHRLZXlzID0gWy4uLihvcHRpb25zPy5yZXF1ZXN0Q29udGV4dEtleXMgPz8gVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMpXTtcblxuICAvLyBUaGUgT1RlbCBIVFRQIGV4cG9ydGVyIHRyZWF0cyBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBhcyBhXG4gIC8vICpiYXNlKiBVUkwgYW5kIGFwcGVuZHMgdGhlIHNpZ25hbCBwYXRoIGl0c2VsZiAoZS5nLlxuICAvLyBgaHR0cDovL2xvY2FsaG9zdDo2MDA2YCAtPiBgaHR0cDovL2xvY2FsaG9zdDo2MDA2L3YxL3RyYWNlc2ApLiBMb2dcbiAgLy8gdGhlIHJlc29sdmVkIFBPU1QgVVJMIHNvIG1pc2NvbmZpZ3VyYXRpb25zIChlLmcuIGFjY2lkZW50YWxseVxuICAvLyBzZXR0aW5nIHRoZSBiYXNlIHZhciB0byBhIGAvdjEvdHJhY2VzYC1zdWZmaXhlZCBVUkwsIHdoaWNoIG1ha2VzXG4gIC8vIHRoZSBTREsgUE9TVCB0byBgLi4uL3YxL3RyYWNlcy92MS90cmFjZXNgIGFuZCBQaG9lbml4IDQwNHMpIGFyZVxuICAvLyBvYnZpb3VzIGluIHN0YXJ0dXAgb3V0cHV0LlxuICBjb25zdCByZXNvbHZlZFRyYWNlc1VybCA9IG90ZWxUcmFjZXNPdmVycmlkZVxuICAgID8gb3RlbFRyYWNlc092ZXJyaWRlXG4gICAgOiBvdGVsQmFzZVxuICAgICAgPyBgJHtvdGVsQmFzZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS92MS90cmFjZXNgXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgLy8gYG1sZmxvd0VuYWJsZWRgIGlzIHRoZSBzYW1lIGdhdGUgdGhhdCBmbGlwcyBjaGF0IGZlZWRiYWNrIG9uLCBzbyB0aGVcbiAgLy8gYm9vdCBsaW5lIGlzIHRoZSBvbmUtZ2xhbmNlIGNoZWNrIHRoYXQgYm90aCBoYWx2ZXMgb2YgdGhlIEFwcHMgVUNcbiAgLy8gcGlwZWxpbmUgKE9UTFAgc2lkZWNhciArIGV4cGVyaW1lbnQgaWQpIGFyZSBwcmVzZW50LlxuICBjb25zdCBmZWVkYmFjayA9IG1sZmxvd0VuYWJsZWQoKTtcbiAgbG9nZ2VyLmluZm8oXCJNYXN0cmEgb2JzZXJ2YWJpbGl0eSB3aXJlZCB0aHJvdWdoIE9UZWwgYnJpZGdlXCIsIHtcbiAgICBzZXJ2aWNlTmFtZSxcbiAgICByZXF1ZXN0Q29udGV4dEtleXMsXG4gICAgb3RlbEJhc2U6IG90ZWxCYXNlID8/IFwiPHVuc2V0PlwiLFxuICAgIHJlc29sdmVkVHJhY2VzVXJsOiByZXNvbHZlZFRyYWNlc1VybCA/PyBcIjx1bnNldD5cIixcbiAgICBmZWVkYmFjayxcbiAgICBvYnNlcnZhYmlsaXR5OiBmZWVkYmFjayA/IFwibWxmbG93XCIgOiBcIm90ZWxcIixcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmlsaXR5KHtcbiAgICBjb25maWdzOiB7XG4gICAgICBzZXJ2aWNlTmFtZToge1xuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgYnJpZGdlOiBuZXcgT3RlbEJyaWRnZSgpLFxuICAgICAgICByZXF1ZXN0Q29udGV4dEtleXMsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -22,6 +22,7 @@ import type express from "express";
22
22
  export declare const TRACE_IO_LIMIT = 8000;
23
23
  /** Attribute keys the MLflow UC `*_trace_unified` view reads from the root span. */
24
24
  export declare const MLFLOW_SPAN_INPUTS_ATTR = "mlflow.spanInputs";
25
+ /** Root-span attribute consumed as chat output by MLflow unified trace views. */
25
26
  export declare const MLFLOW_SPAN_OUTPUTS_ATTR = "mlflow.spanOutputs";
26
27
  /**
27
28
  * Concatenate the assistant's answer out of an AI SDK SSE transcript.
@@ -37,6 +37,7 @@ const CHAT_TURN_TRACER = "@dbx-tools/appkit-mastra/trace-io";
37
37
  const AGENT_TURN_ROUTE = /^(?:\/agents\/[^/]+\/(?:stream|generate)(?:\/|$)|\/chat\/[^/]+$)/i;
38
38
  /** Attribute keys the MLflow UC `*_trace_unified` view reads from the root span. */
39
39
  export const MLFLOW_SPAN_INPUTS_ATTR = "mlflow.spanInputs";
40
+ /** Root-span attribute consumed as chat output by MLflow unified trace views. */
40
41
  export const MLFLOW_SPAN_OUTPUTS_ATTR = "mlflow.spanOutputs";
41
42
  /** Return the assistant text from one SSE line, or an empty string. */
42
43
  function assistantTextFromSseLine(line) {
@@ -231,4 +232,4 @@ export function attachChatTurnTraceIo(app) {
231
232
  app.use(chatTurnTraceIoMiddleware);
232
233
  logger.info("chat turn I/O middleware attached");
233
234
  }
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UtaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UtaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzlELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3QyxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQztBQUVwQyx1RkFBdUY7QUFDdkYsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLCtFQUErRTtBQUMvRSxNQUFNLGdCQUFnQixHQUFHLG1DQUFtQyxDQUFDO0FBRTdEOzs7OztHQUtHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxtRUFBbUUsQ0FBQztBQUU3RixvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsb0JBQW9CLENBQUM7QUFPN0QsdUVBQXVFO0FBQ3ZFLFNBQVMsd0JBQXdCLENBQUMsSUFBWTtJQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxD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QyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQztZQUNILE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7Z0JBQVMsQ0FBQztZQUNULFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDLENBQW1CLENBQUM7SUFFckIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqQyxZQUFZLEVBQUUsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsR0FBb0I7SUFDeEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5IGVhY2ggTWFzdHJhIGNoYXQgdHVybidzIHJlcXVlc3QvcmVzcG9uc2Ugb250byBpdHMgT1RlbCByb290IHNwYW5cbiAqIHNvIERhdGFicmlja3MtbWFuYWdlZCBNTGZsb3cgY2FuIGRpc3BsYXkgdGhlbS5cbiAqXG4gKiBXaHkgdGhpcyBleGlzdHM6IE1MZmxvdydzIFVDIGA8dGFyZ2V0Pl90cmFjZV91bmlmaWVkYCB2aWV3IHBpY2tzIHRoZVxuICogb25lIHNwYW4gd2hvc2UgYHBhcmVudF9zcGFuX2lkYCBpcyBlbXB0eSBhbmQgcmVhZHMgcmVxdWVzdC9yZXNwb25zZVxuICogZnJvbSBgbWxmbG93LnNwYW5JbnB1dHNgIC8gYG1sZmxvdy5zcGFuT3V0cHV0c2AgKG9yIHRoZSBgZ2VuX2FpLipgXG4gKiBlcXVpdmFsZW50cykgb24gVEhBVCBzcGFuIG9ubHkuIE1hc3RyYSByZWNvcmRzIHRoZSB0dXJuIG9uIGl0c1xuICogYGludm9rZV9hZ2VudGAgY2hpbGQgdW5kZXIgYG1hc3RyYS5hZ2VudF9ydW4uaW5wdXRgIC8gYC5vdXRwdXRgLCBrZXlzXG4gKiB0aGUgdmlldyBuZXZlciByZWFkcywgc28gY2hhdCB0cmFjZXMgYXJyaXZlIHdpdGggYm90aCBjb2x1bW5zIG51bGxcbiAqIGV2ZW4gd2hlbiB0aGUgc3BhbnMgdGhlbXNlbHZlcyBsb29rIGhlYWx0aHkuXG4gKlxuICogQXBwS2l0J3MgSFRUUCBpbnN0cnVtZW50YXRpb24gcmVjb3JkcyB0aGUgc2VydmVyIHNwYW4gaW4gT1RlbCBSUEMgbWV0YWRhdGEsXG4gKiB3aGljaCByZW1haW5zIGF2YWlsYWJsZSBldmVuIHdoZW4gRXhwcmVzcyBtYWtlcyBhIG1pZGRsZXdhcmUtbGF5ZXIgY2hpbGRcbiAqIGFjdGl2ZS4gV2hlbiBpbnN0cnVtZW50YXRpb24gaXMgdW5hdmFpbGFibGUsIHRoaXMgbW9kdWxlIGNyZWF0ZXMgb25lXG4gKiByZXF1ZXN0LWxpZmV0aW1lIHNlcnZlciBzcGFuIGFuZCBydW5zIE1hc3RyYSB1bmRlciBpdC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgU3RyaW5nRGVjb2RlciB9IGZyb20gXCJub2RlOnN0cmluZ19kZWNvZGVyXCI7XG5cbmltcG9ydCB7IGpzb24sIGxvZywgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNvbnRleHQsIFNwYW5LaW5kLCB0cmFjZSwgdHlwZSBTcGFuIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHsgZ2V0UlBDTWV0YWRhdGEsIFJQQ1R5cGUgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL3RyYWNlLWlvXCIpO1xuXG4vKiogQ2FwIG9uIGVhY2ggcGF5bG9hZCBjb3BpZWQgb250byBhIHNwYW4sIHNvIG9uZSB0dXJuIGNhbm5vdCBibG9hdCB0aGUgZXhwb3J0LiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFX0lPX0xJTUlUID0gOF8wMDA7XG5cbi8qKiBCb3VuZCBmb3IgYSBub24tc3RyZWFtaW5nIGJvZHkgY2FwdHVyZWQgdGhyb3VnaCBgcmVzLmVuZGAgaW5zdGVhZCBvZiBgcmVzLmpzb25gLiAqL1xuY29uc3QgUkVTUE9OU0VfQk9EWV9MSU1JVCA9IFRSQUNFX0lPX0xJTUlUICogNDtcblxuLyoqIFRyYWNlciBzY29wZSB1c2VkIG9ubHkgd2hlbiBBcHBLaXQgZGlkIG5vdCBjcmVhdGUgYSByZWNvcmRpbmcgSFRUUCBzcGFuLiAqL1xuY29uc3QgQ0hBVF9UVVJOX1RSQUNFUiA9IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhL3RyYWNlLWlvXCI7XG5cbi8qKlxuICogTW91bnQtcmVsYXRpdmUgTWFzdHJhIGFnZW50IGludm9rZSBwYXRocyB0aGF0IGNhcnJ5IGEgY2hhdCB0dXJuIGJvZHlcbiAqIChgbWVzc2FnZXNgKSBhbmQgc3RyZWFtIGFuIGFzc2lzdGFudCBhbnN3ZXIuIFJlc3VtZSAvIGFwcHJvdmUgdmVyYnNcbiAqIGFyZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVkOiB0aGVpciBib2RpZXMgYXJlIHRvb2wgZGVjaXNpb25zLCBub3QgdGhlXG4gKiB1c2VyIHByb21wdCwgYW5kIHRoZXkgcmFyZWx5IHByb2R1Y2UgYSBmcmVzaCBhbnN3ZXIgd29ydGggc3VyZmFjaW5nLlxuICovXG5jb25zdCBBR0VOVF9UVVJOX1JPVVRFID0gL14oPzpcXC9hZ2VudHNcXC9bXi9dK1xcLyg/OnN0cmVhbXxnZW5lcmF0ZSkoPzpcXC98JCl8XFwvY2hhdFxcL1teL10rJCkvaTtcblxuLyoqIEF0dHJpYnV0ZSBrZXlzIHRoZSBNTGZsb3cgVUMgYCpfdHJhY2VfdW5pZmllZGAgdmlldyByZWFkcyBmcm9tIHRoZSByb290IHNwYW4uICovXG5leHBvcnQgY29uc3QgTUxGTE9XX1NQQU5fSU5QVVRTX0FUVFIgPSBcIm1sZmxvdy5zcGFuSW5wdXRzXCI7XG5leHBvcnQgY29uc3QgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSID0gXCJtbGZsb3cuc3Bhbk91dHB1dHNcIjtcblxuaW50ZXJmYWNlIFRyYWNlVGFyZ2V0IHtcbiAgc3BhbjogU3BhbjtcbiAgb3duZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBSZXR1cm4gdGhlIGFzc2lzdGFudCB0ZXh0IGZyb20gb25lIFNTRSBsaW5lLCBvciBhbiBlbXB0eSBzdHJpbmcuICovXG5mdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZUxpbmUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IGZyYW1lID0ganNvbi5wYXJzZShsaW5lLnNsaWNlKDUpKTtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZnJhbWUpIHx8IGZyYW1lLnR5cGUgIT09IFwidGV4dC1kZWx0YVwiKSByZXR1cm4gXCJcIjtcbiAgY29uc3QgdGV4dCA9XG4gICAgdHlwZW9mIGZyYW1lLmRlbHRhID09PSBcInN0cmluZ1wiXG4gICAgICA/IGZyYW1lLmRlbHRhXG4gICAgICA6IG9iamVjdC5pc1JlY29yZChmcmFtZS5wYXlsb2FkKVxuICAgICAgICA/IGZyYW1lLnBheWxvYWQudGV4dFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiID8gdGV4dCA6IFwiXCI7XG59XG5cbi8qKlxuICogQ29uY2F0ZW5hdGUgdGhlIGFzc2lzdGFudCdzIGFuc3dlciBvdXQgb2YgYW4gQUkgU0RLIFNTRSB0cmFuc2NyaXB0LlxuICpcbiAqIFRoZSBhZ2VudCBzdHJlYW1zIGl0cyByZXBseSBhcyBgdGV4dC1kZWx0YWAgZnJhbWVzXG4gKiAoYGRhdGE6IHtcInR5cGVcIjpcInRleHQtZGVsdGFcIixcInBheWxvYWRcIjp7XCJ0ZXh0XCI6XCIuLi5cIn19YCksIHNvIHRoZSBmdWxsXG4gKiBhbnN3ZXIgb25seSBldmVyIGV4aXN0cyBhcyBkZWx0YXMgb24gdGhlIHdpcmUgYW5kIGhhcyB0byBiZVxuICogcmVhc3NlbWJsZWQgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lzdGFudFRleHRGcm9tU3NlKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgYm9keS5zcGxpdChcIlxcblwiKSkge1xuICAgIGNvbnN0IHRleHQgPSBhc3Npc3RhbnRUZXh0RnJvbVNzZUxpbmUobGluZSk7XG4gICAgaWYgKHRleHQpIHBhcnRzLnB1c2godGV4dCk7XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIikuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG4vKiogUmVhZCB0aGUgZmluYWwgYXNzaXN0YW50IHRleHQgZnJvbSBhIG5vbi1zdHJlYW1pbmcgTWFzdHJhIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lzdGFudFRleHRGcm9tSnNvbihib2R5OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQoYm9keSkgfHwgdHlwZW9mIGJvZHkudGV4dCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBib2R5LnRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG4vKiogSW5jcmVtZW50YWxseSBhc3NlbWJsZSBVVEYtOCBTU0UgdGV4dCB3aGlsZSByZXRhaW5pbmcgYSBib3VuZGVkIEpTT04gZmFsbGJhY2suICovXG5jbGFzcyBBc3Npc3RhbnRSZXNwb25zZUNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKFwidXRmOFwiKTtcbiAgcHJpdmF0ZSBhbnN3ZXIgPSBcIlwiO1xuICBwcml2YXRlIGJvZHkgPSBcIlwiO1xuICBwcml2YXRlIHBlbmRpbmdMaW5lID0gXCJcIjtcbiAgcHJpdmF0ZSBmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIHdyaXRlKGNodW5rOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmluaXNoZWQpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoY2h1bmspO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSkge1xuICAgICAgdGhpcy5jb25zdW1lKFxuICAgICAgICB0aGlzLmRlY29kZXIud3JpdGUoQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbmlzaGVkKSByZXR1cm4gdGhpcy5hbnN3ZXIgfHwgdGhpcy5qc29uQW5zd2VyKCk7XG4gICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XG4gICAgdGhpcy5jb25zdW1lKHRoaXMuZGVjb2Rlci5lbmQoKSk7XG4gICAgdGhpcy5jb25zdW1lU3NlTGluZSh0aGlzLnBlbmRpbmdMaW5lKTtcbiAgICB0aGlzLnBlbmRpbmdMaW5lID0gXCJcIjtcbiAgICByZXR1cm4gdGhpcy5hbnN3ZXIgfHwgdGhpcy5qc29uQW5zd2VyKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgaWYgKHRoaXMuYm9keS5sZW5ndGggPCBSRVNQT05TRV9CT0RZX0xJTUlUKSB7XG4gICAgICB0aGlzLmJvZHkgKz0gdGV4dC5zbGljZSgwLCBSRVNQT05TRV9CT0RZX0xJTUlUIC0gdGhpcy5ib2R5Lmxlbmd0aCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0xpbmUgKz0gdGV4dDtcbiAgICBsZXQgbmV3bGluZSA9IHRoaXMucGVuZGluZ0xpbmUuaW5kZXhPZihcIlxcblwiKTtcbiAgICB3aGlsZSAobmV3bGluZSA+PSAwKSB7XG4gICAgICB0aGlzLmNvbnN1bWVTc2VMaW5lKHRoaXMucGVuZGluZ0xpbmUuc2xpY2UoMCwgbmV3bGluZSkucmVwbGFjZSgvXFxyJC8sIFwiXCIpKTtcbiAgICAgIHRoaXMucGVuZGluZ0xpbmUgPSB0aGlzLnBlbmRpbmdMaW5lLnNsaWNlKG5ld2xpbmUgKyAxKTtcbiAgICAgIG5ld2xpbmUgPSB0aGlzLnBlbmRpbmdMaW5lLmluZGV4T2YoXCJcXG5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLnBlbmRpbmdMaW5lLmxlbmd0aCA+IFJFU1BPTlNFX0JPRFlfTElNSVQpIHtcbiAgICAgIHRoaXMucGVuZGluZ0xpbmUgPSB0aGlzLnBlbmRpbmdMaW5lLnNsaWNlKC1SRVNQT05TRV9CT0RZX0xJTUlUKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVTc2VMaW5lKGxpbmU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFuc3dlci5sZW5ndGggPj0gVFJBQ0VfSU9fTElNSVQpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gYXNzaXN0YW50VGV4dEZyb21Tc2VMaW5lKGxpbmUpO1xuICAgIHRoaXMuYW5zd2VyICs9IHRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQgLSB0aGlzLmFuc3dlci5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBqc29uQW5zd2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFzc2lzdGFudFRleHRGcm9tSnNvbihqc29uLnBhcnNlKHRoaXMuYm9keSkpO1xuICB9XG59XG5cbi8qKlxuICogU2VsZWN0IHRoZSBzcGFuIE1MZmxvdyB0cmVhdHMgYXMgdGhlIHJlcXVlc3Qgcm9vdC5cbiAqXG4gKiBPVGVsIEhUVFAgaW5zdHJ1bWVudGF0aW9uIHN0b3JlcyBpdHMgc2VydmVyIHNwYW4gaW4gUlBDIG1ldGFkYXRhLiBUaGF0IHNwYW5cbiAqIHdpbnMgb3ZlciBhbiBhY3RpdmUgRXhwcmVzcyBjaGlsZC4gSWYgbm8gcmVjb3JkaW5nIGxvY2FsIHNwYW4gZXhpc3RzLCBjcmVhdGVcbiAqIG9uZSB1bmRlciB0aGUgY3VycmVudCBjb250ZXh0IHNvIGVuYWJsZWQgVzNDIHByb3BhZ2F0aW9uIHJlbWFpbnMgaW50YWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVHJhY2VUYXJnZXQoKTogVHJhY2VUYXJnZXQgfCB1bmRlZmluZWQge1xuICBjb25zdCBhY3RpdmVDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3QgcnBjID0gZ2V0UlBDTWV0YWRhdGEoYWN0aXZlQ29udGV4dCk7XG4gIGlmIChycGM/LnR5cGUgPT09IFJQQ1R5cGUuSFRUUCAmJiBycGMuc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgcmV0dXJuIHsgc3BhbjogcnBjLnNwYW4sIG93bmVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgYWN0aXZlID0gdHJhY2UuZ2V0QWN0aXZlU3BhbigpO1xuICBpZiAoYWN0aXZlPy5pc1JlY29yZGluZygpKSByZXR1cm4geyBzcGFuOiBhY3RpdmUsIG93bmVkOiBmYWxzZSB9O1xuXG4gIGNvbnN0IHNwYW4gPSB0cmFjZVxuICAgIC5nZXRUcmFjZXIoQ0hBVF9UVVJOX1RSQUNFUilcbiAgICAuc3RhcnRTcGFuKFwibWFzdHJhLmNoYXRfdHVyblwiLCB7IGtpbmQ6IFNwYW5LaW5kLlNFUlZFUiB9LCBhY3RpdmVDb250ZXh0KTtcbiAgaWYgKCFzcGFuLmlzUmVjb3JkaW5nKCkpIHtcbiAgICBzcGFuLmVuZCgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHsgc3Bhbiwgb3duZWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIG1pZGRsZXdhcmUgdGhhdCBzdGFtcHMgY2hhdCB0dXJuIEkvTyBvbnRvIHRoZSBleHBvcnRlZCBPVGVsIHJvb3QuXG4gKlxuICogVGVlIGByZXMud3JpdGVgLCBgcmVzLmpzb25gLCBhbmQgYHJlcy5lbmRgIGluc3RlYWQgb2YgbGlzdGVuaW5nIGZvciBgZmluaXNoYDpcbiAqIEhUVFAgaW5zdHJ1bWVudGF0aW9uIGVuZHMgaXRzIHNlcnZlciBzcGFuIG9uIGZpbmlzaCwgYW5kIGF0dHJpYnV0ZXMgc2V0XG4gKiBhZnRlciBhIHNwYW4gZW5kcyBuZXZlciByZWFjaCB0aGUgZXhwb3J0ZXIuXG4gKlxuICogYHBhdGhgIGlzIG1vdW50LXJlbGF0aXZlICh3aGF0IHRoZSBNYXN0cmEgc3ViLWFwcCBzZWVzKSwgZS5nLlxuICogYC9hZ2VudHMvc3VwcG9ydC9zdHJlYW1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdFR1cm5UcmFjZUlvTWlkZGxld2FyZShcbiAgcmVxOiBleHByZXNzLlJlcXVlc3QsXG4gIHJlczogZXhwcmVzcy5SZXNwb25zZSxcbiAgbmV4dDogZXhwcmVzcy5OZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcS5tZXRob2QgIT09IFwiUE9TVFwiIHx8ICFBR0VOVF9UVVJOX1JPVVRFLnRlc3QocmVxLnBhdGgpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0YXJnZXQgPSByZXNvbHZlVHJhY2VUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSAocmVxLmJvZHkgYXMgeyBtZXNzYWdlcz86IHVua25vd24gfSB8IHVuZGVmaW5lZCk/Lm1lc3NhZ2VzO1xuICBpZiAobWVzc2FnZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShcbiAgICAgIE1MRkxPV19TUEFOX0lOUFVUU19BVFRSLFxuICAgICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpLnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUKSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29sbGVjdG9yID0gbmV3IEFzc2lzdGFudFJlc3BvbnNlQ29sbGVjdG9yKCk7XG4gIGxldCBvdXRwdXRSZWNvcmRlZCA9IGZhbHNlO1xuICBsZXQgb3duZWRTcGFuRW5kZWQgPSBmYWxzZTtcbiAgY29uc3QgcGFzc1Rocm91Z2hXcml0ZSA9IHJlcy53cml0ZS5iaW5kKHJlcykgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gYm9vbGVhbjtcbiAgY29uc3QgcGFzc1Rocm91Z2hFbmQgPSByZXMuZW5kLmJpbmQocmVzKSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICBjb25zdCBwYXNzVGhyb3VnaEpzb24gPSByZXMuanNvbi5iaW5kKHJlcykgYXMgKGJvZHk/OiB1bmtub3duKSA9PiBleHByZXNzLlJlc3BvbnNlO1xuICBjb25zdCByZWNvcmRPdXRwdXQgPSAoYW5zd2VyOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpZiAob3V0cHV0UmVjb3JkZWQgfHwgIWFuc3dlcikgcmV0dXJuO1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfU1BBTl9PVVRQVVRTX0FUVFIsIGFuc3dlci5zbGljZSgwLCBUUkFDRV9JT19MSU1JVCkpO1xuICAgIG91dHB1dFJlY29yZGVkID0gdHJ1ZTtcbiAgfTtcbiAgY29uc3QgZW5kT3duZWRTcGFuID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGFyZ2V0Lm93bmVkIHx8IG93bmVkU3BhbkVuZGVkKSByZXR1cm47XG4gICAgb3duZWRTcGFuRW5kZWQgPSB0cnVlO1xuICAgIHRhcmdldC5zcGFuLmVuZCgpO1xuICB9O1xuXG4gIHJlcy53cml0ZSA9ICgoY2h1bms6IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbGxlY3Rvci53cml0ZShjaHVuayk7XG4gICAgcmV0dXJuIHBhc3NUaHJvdWdoV3JpdGUoY2h1bmssIC4uLnJlc3QpO1xuICB9KSBhcyB0eXBlb2YgcmVzLndyaXRlO1xuXG4gIHJlcy5qc29uID0gKChib2R5PzogdW5rbm93bikgPT4ge1xuICAgIHJlY29yZE91dHB1dChhc3Npc3RhbnRUZXh0RnJvbUpzb24oYm9keSkpO1xuICAgIHJldHVybiBwYXNzVGhyb3VnaEpzb24oYm9keSk7XG4gIH0pIGFzIHR5cGVvZiByZXMuanNvbjtcblxuICByZXMuZW5kID0gKChjaHVuaz86IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbGxlY3Rvci53cml0ZShjaHVuayk7XG4gICAgcmVjb3JkT3V0cHV0KGNvbGxlY3Rvci5maW5pc2goKSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXNzVGhyb3VnaEVuZChjaHVuaywgLi4ucmVzdCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVuZE93bmVkU3BhbigpO1xuICAgIH1cbiAgfSkgYXMgdHlwZW9mIHJlcy5lbmQ7XG5cbiAgcmVzLm9uY2UoXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgcmVjb3JkT3V0cHV0KGNvbGxlY3Rvci5maW5pc2goKSk7XG4gICAgZW5kT3duZWRTcGFuKCk7XG4gIH0pO1xuXG4gIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHRhcmdldC5zcGFuKSwgbmV4dCk7XG59XG5cbi8qKlxuICogSW5zdGFsbCB7QGxpbmsgY2hhdFR1cm5UcmFjZUlvTWlkZGxld2FyZX0gb24gYSBNYXN0cmEgRXhwcmVzcyBzdWItYXBwLlxuICpcbiAqIENhbGwgYmVmb3JlIGBNYXN0cmFTZXJ2ZXIuaW5pdCgpYCBzbyB0aGUgbGF5ZXIgc2l0cyBhaGVhZCBvZiB0aGUgYWdlbnRcbiAqIHJvdXRlcy4gU2FmZSB0byBjYWxsIHVuY29uZGl0aW9uYWxseTogd2hlbiBubyByZWNvcmRpbmcgdHJhY2VyIGlzIHJlZ2lzdGVyZWQsXG4gKiB0aGUgbWlkZGxld2FyZSBpcyBhIG5vLW9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoQ2hhdFR1cm5UcmFjZUlvKGFwcDogZXhwcmVzcy5FeHByZXNzKTogdm9pZCB7XG4gIGFwcC51c2UoY2hhdFR1cm5UcmFjZUlvTWlkZGxld2FyZSk7XG4gIGxvZ2dlci5pbmZvKFwiY2hhdCB0dXJuIEkvTyBtaWRkbGV3YXJlIGF0dGFjaGVkXCIpO1xufVxuIl19
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UtaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UtaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzlELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3QyxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQztBQUVwQyx1RkFBdUY7QUFDdkYsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLCtFQUErRTtBQUMvRSxNQUFNLGdCQUFnQixHQUFHLG1DQUFtQyxDQUFDO0FBRTdEOzs7OztHQUtHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxtRUFBbUUsQ0FBQztBQUU3RixvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLENBQUM7QUFDM0QsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLG9CQUFvQixDQUFDO0FBTzdELHVFQUF1RTtBQUN2RSxTQUFTLHdCQUF3QixDQUFDLElBQVk7SUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FB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QUNqRCxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUM7WUFDSCxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDO2dCQUFTLENBQUM7WUFDVCxZQUFZLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQyxDQUFtQixDQUFDO0lBRXJCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNyQixZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDakMsWUFBWSxFQUFFLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEdBQW9CO0lBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weSBlYWNoIE1hc3RyYSBjaGF0IHR1cm4ncyByZXF1ZXN0L3Jlc3BvbnNlIG9udG8gaXRzIE9UZWwgcm9vdCBzcGFuXG4gKiBzbyBEYXRhYnJpY2tzLW1hbmFnZWQgTUxmbG93IGNhbiBkaXNwbGF5IHRoZW0uXG4gKlxuICogV2h5IHRoaXMgZXhpc3RzOiBNTGZsb3cncyBVQyBgPHRhcmdldD5fdHJhY2VfdW5pZmllZGAgdmlldyBwaWNrcyB0aGVcbiAqIG9uZSBzcGFuIHdob3NlIGBwYXJlbnRfc3Bhbl9pZGAgaXMgZW1wdHkgYW5kIHJlYWRzIHJlcXVlc3QvcmVzcG9uc2VcbiAqIGZyb20gYG1sZmxvdy5zcGFuSW5wdXRzYCAvIGBtbGZsb3cuc3Bhbk91dHB1dHNgIChvciB0aGUgYGdlbl9haS4qYFxuICogZXF1aXZhbGVudHMpIG9uIFRIQVQgc3BhbiBvbmx5LiBNYXN0cmEgcmVjb3JkcyB0aGUgdHVybiBvbiBpdHNcbiAqIGBpbnZva2VfYWdlbnRgIGNoaWxkIHVuZGVyIGBtYXN0cmEuYWdlbnRfcnVuLmlucHV0YCAvIGAub3V0cHV0YCwga2V5c1xuICogdGhlIHZpZXcgbmV2ZXIgcmVhZHMsIHNvIGNoYXQgdHJhY2VzIGFycml2ZSB3aXRoIGJvdGggY29sdW1ucyBudWxsXG4gKiBldmVuIHdoZW4gdGhlIHNwYW5zIHRoZW1zZWx2ZXMgbG9vayBoZWFsdGh5LlxuICpcbiAqIEFwcEtpdCdzIEhUVFAgaW5zdHJ1bWVudGF0aW9uIHJlY29yZHMgdGhlIHNlcnZlciBzcGFuIGluIE9UZWwgUlBDIG1ldGFkYXRhLFxuICogd2hpY2ggcmVtYWlucyBhdmFpbGFibGUgZXZlbiB3aGVuIEV4cHJlc3MgbWFrZXMgYSBtaWRkbGV3YXJlLWxheWVyIGNoaWxkXG4gKiBhY3RpdmUuIFdoZW4gaW5zdHJ1bWVudGF0aW9uIGlzIHVuYXZhaWxhYmxlLCB0aGlzIG1vZHVsZSBjcmVhdGVzIG9uZVxuICogcmVxdWVzdC1saWZldGltZSBzZXJ2ZXIgc3BhbiBhbmQgcnVucyBNYXN0cmEgdW5kZXIgaXQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IFN0cmluZ0RlY29kZXIgfSBmcm9tIFwibm9kZTpzdHJpbmdfZGVjb2RlclwiO1xuXG5pbXBvcnQgeyBqc29uLCBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBjb250ZXh0LCBTcGFuS2luZCwgdHJhY2UsIHR5cGUgU3BhbiB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB7IGdldFJQQ01ldGFkYXRhLCBSUENUeXBlIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS90cmFjZS1pb1wiKTtcblxuLyoqIENhcCBvbiBlYWNoIHBheWxvYWQgY29waWVkIG9udG8gYSBzcGFuLCBzbyBvbmUgdHVybiBjYW5ub3QgYmxvYXQgdGhlIGV4cG9ydC4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9JT19MSU1JVCA9IDhfMDAwO1xuXG4vKiogQm91bmQgZm9yIGEgbm9uLXN0cmVhbWluZyBib2R5IGNhcHR1cmVkIHRocm91Z2ggYHJlcy5lbmRgIGluc3RlYWQgb2YgYHJlcy5qc29uYC4gKi9cbmNvbnN0IFJFU1BPTlNFX0JPRFlfTElNSVQgPSBUUkFDRV9JT19MSU1JVCAqIDQ7XG5cbi8qKiBUcmFjZXIgc2NvcGUgdXNlZCBvbmx5IHdoZW4gQXBwS2l0IGRpZCBub3QgY3JlYXRlIGEgcmVjb3JkaW5nIEhUVFAgc3Bhbi4gKi9cbmNvbnN0IENIQVRfVFVSTl9UUkFDRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYS90cmFjZS1pb1wiO1xuXG4vKipcbiAqIE1vdW50LXJlbGF0aXZlIE1hc3RyYSBhZ2VudCBpbnZva2UgcGF0aHMgdGhhdCBjYXJyeSBhIGNoYXQgdHVybiBib2R5XG4gKiAoYG1lc3NhZ2VzYCkgYW5kIHN0cmVhbSBhbiBhc3Npc3RhbnQgYW5zd2VyLiBSZXN1bWUgLyBhcHByb3ZlIHZlcmJzXG4gKiBhcmUgaW50ZW50aW9uYWxseSBleGNsdWRlZDogdGhlaXIgYm9kaWVzIGFyZSB0b29sIGRlY2lzaW9ucywgbm90IHRoZVxuICogdXNlciBwcm9tcHQsIGFuZCB0aGV5IHJhcmVseSBwcm9kdWNlIGEgZnJlc2ggYW5zd2VyIHdvcnRoIHN1cmZhY2luZy5cbiAqL1xuY29uc3QgQUdFTlRfVFVSTl9ST1VURSA9IC9eKD86XFwvYWdlbnRzXFwvW14vXStcXC8oPzpzdHJlYW18Z2VuZXJhdGUpKD86XFwvfCQpfFxcL2NoYXRcXC9bXi9dKyQpL2k7XG5cbi8qKiBBdHRyaWJ1dGUga2V5cyB0aGUgTUxmbG93IFVDIGAqX3RyYWNlX3VuaWZpZWRgIHZpZXcgcmVhZHMgZnJvbSB0aGUgcm9vdCBzcGFuLiAqL1xuZXhwb3J0IGNvbnN0IE1MRkxPV19TUEFOX0lOUFVUU19BVFRSID0gXCJtbGZsb3cuc3BhbklucHV0c1wiO1xuLyoqIFJvb3Qtc3BhbiBhdHRyaWJ1dGUgY29uc3VtZWQgYXMgY2hhdCBvdXRwdXQgYnkgTUxmbG93IHVuaWZpZWQgdHJhY2Ugdmlld3MuICovXG5leHBvcnQgY29uc3QgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSID0gXCJtbGZsb3cuc3Bhbk91dHB1dHNcIjtcblxuaW50ZXJmYWNlIFRyYWNlVGFyZ2V0IHtcbiAgc3BhbjogU3BhbjtcbiAgb3duZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBSZXR1cm4gdGhlIGFzc2lzdGFudCB0ZXh0IGZyb20gb25lIFNTRSBsaW5lLCBvciBhbiBlbXB0eSBzdHJpbmcuICovXG5mdW5jdGlvbiBhc3Npc3RhbnRUZXh0RnJvbVNzZUxpbmUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IGZyYW1lID0ganNvbi5wYXJzZShsaW5lLnNsaWNlKDUpKTtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZnJhbWUpIHx8IGZyYW1lLnR5cGUgIT09IFwidGV4dC1kZWx0YVwiKSByZXR1cm4gXCJcIjtcbiAgY29uc3QgdGV4dCA9XG4gICAgdHlwZW9mIGZyYW1lLmRlbHRhID09PSBcInN0cmluZ1wiXG4gICAgICA/IGZyYW1lLmRlbHRhXG4gICAgICA6IG9iamVjdC5pc1JlY29yZChmcmFtZS5wYXlsb2FkKVxuICAgICAgICA/IGZyYW1lLnBheWxvYWQudGV4dFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiID8gdGV4dCA6IFwiXCI7XG59XG5cbi8qKlxuICogQ29uY2F0ZW5hdGUgdGhlIGFzc2lzdGFudCdzIGFuc3dlciBvdXQgb2YgYW4gQUkgU0RLIFNTRSB0cmFuc2NyaXB0LlxuICpcbiAqIFRoZSBhZ2VudCBzdHJlYW1zIGl0cyByZXBseSBhcyBgdGV4dC1kZWx0YWAgZnJhbWVzXG4gKiAoYGRhdGE6IHtcInR5cGVcIjpcInRleHQtZGVsdGFcIixcInBheWxvYWRcIjp7XCJ0ZXh0XCI6XCIuLi5cIn19YCksIHNvIHRoZSBmdWxsXG4gKiBhbnN3ZXIgb25seSBldmVyIGV4aXN0cyBhcyBkZWx0YXMgb24gdGhlIHdpcmUgYW5kIGhhcyB0byBiZVxuICogcmVhc3NlbWJsZWQgaGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lzdGFudFRleHRGcm9tU3NlKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgYm9keS5zcGxpdChcIlxcblwiKSkge1xuICAgIGNvbnN0IHRleHQgPSBhc3Npc3RhbnRUZXh0RnJvbVNzZUxpbmUobGluZSk7XG4gICAgaWYgKHRleHQpIHBhcnRzLnB1c2godGV4dCk7XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIikuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG4vKiogUmVhZCB0aGUgZmluYWwgYXNzaXN0YW50IHRleHQgZnJvbSBhIG5vbi1zdHJlYW1pbmcgTWFzdHJhIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lzdGFudFRleHRGcm9tSnNvbihib2R5OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQoYm9keSkgfHwgdHlwZW9mIGJvZHkudGV4dCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBib2R5LnRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQpO1xufVxuXG4vKiogSW5jcmVtZW50YWxseSBhc3NlbWJsZSBVVEYtOCBTU0UgdGV4dCB3aGlsZSByZXRhaW5pbmcgYSBib3VuZGVkIEpTT04gZmFsbGJhY2suICovXG5jbGFzcyBBc3Npc3RhbnRSZXNwb25zZUNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKFwidXRmOFwiKTtcbiAgcHJpdmF0ZSBhbnN3ZXIgPSBcIlwiO1xuICBwcml2YXRlIGJvZHkgPSBcIlwiO1xuICBwcml2YXRlIHBlbmRpbmdMaW5lID0gXCJcIjtcbiAgcHJpdmF0ZSBmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIHdyaXRlKGNodW5rOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmluaXNoZWQpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLmNvbnN1bWUoY2h1bmspO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSkge1xuICAgICAgdGhpcy5jb25zdW1lKFxuICAgICAgICB0aGlzLmRlY29kZXIud3JpdGUoQnVmZmVyLmZyb20oY2h1bmsuYnVmZmVyLCBjaHVuay5ieXRlT2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbmlzaGVkKSByZXR1cm4gdGhpcy5hbnN3ZXIgfHwgdGhpcy5qc29uQW5zd2VyKCk7XG4gICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XG4gICAgdGhpcy5jb25zdW1lKHRoaXMuZGVjb2Rlci5lbmQoKSk7XG4gICAgdGhpcy5jb25zdW1lU3NlTGluZSh0aGlzLnBlbmRpbmdMaW5lKTtcbiAgICB0aGlzLnBlbmRpbmdMaW5lID0gXCJcIjtcbiAgICByZXR1cm4gdGhpcy5hbnN3ZXIgfHwgdGhpcy5qc29uQW5zd2VyKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgaWYgKHRoaXMuYm9keS5sZW5ndGggPCBSRVNQT05TRV9CT0RZX0xJTUlUKSB7XG4gICAgICB0aGlzLmJvZHkgKz0gdGV4dC5zbGljZSgwLCBSRVNQT05TRV9CT0RZX0xJTUlUIC0gdGhpcy5ib2R5Lmxlbmd0aCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0xpbmUgKz0gdGV4dDtcbiAgICBsZXQgbmV3bGluZSA9IHRoaXMucGVuZGluZ0xpbmUuaW5kZXhPZihcIlxcblwiKTtcbiAgICB3aGlsZSAobmV3bGluZSA+PSAwKSB7XG4gICAgICB0aGlzLmNvbnN1bWVTc2VMaW5lKHRoaXMucGVuZGluZ0xpbmUuc2xpY2UoMCwgbmV3bGluZSkucmVwbGFjZSgvXFxyJC8sIFwiXCIpKTtcbiAgICAgIHRoaXMucGVuZGluZ0xpbmUgPSB0aGlzLnBlbmRpbmdMaW5lLnNsaWNlKG5ld2xpbmUgKyAxKTtcbiAgICAgIG5ld2xpbmUgPSB0aGlzLnBlbmRpbmdMaW5lLmluZGV4T2YoXCJcXG5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLnBlbmRpbmdMaW5lLmxlbmd0aCA+IFJFU1BPTlNFX0JPRFlfTElNSVQpIHtcbiAgICAgIHRoaXMucGVuZGluZ0xpbmUgPSB0aGlzLnBlbmRpbmdMaW5lLnNsaWNlKC1SRVNQT05TRV9CT0RZX0xJTUlUKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVTc2VMaW5lKGxpbmU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFuc3dlci5sZW5ndGggPj0gVFJBQ0VfSU9fTElNSVQpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gYXNzaXN0YW50VGV4dEZyb21Tc2VMaW5lKGxpbmUpO1xuICAgIHRoaXMuYW5zd2VyICs9IHRleHQuc2xpY2UoMCwgVFJBQ0VfSU9fTElNSVQgLSB0aGlzLmFuc3dlci5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBqc29uQW5zd2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFzc2lzdGFudFRleHRGcm9tSnNvbihqc29uLnBhcnNlKHRoaXMuYm9keSkpO1xuICB9XG59XG5cbi8qKlxuICogU2VsZWN0IHRoZSBzcGFuIE1MZmxvdyB0cmVhdHMgYXMgdGhlIHJlcXVlc3Qgcm9vdC5cbiAqXG4gKiBPVGVsIEhUVFAgaW5zdHJ1bWVudGF0aW9uIHN0b3JlcyBpdHMgc2VydmVyIHNwYW4gaW4gUlBDIG1ldGFkYXRhLiBUaGF0IHNwYW5cbiAqIHdpbnMgb3ZlciBhbiBhY3RpdmUgRXhwcmVzcyBjaGlsZC4gSWYgbm8gcmVjb3JkaW5nIGxvY2FsIHNwYW4gZXhpc3RzLCBjcmVhdGVcbiAqIG9uZSB1bmRlciB0aGUgY3VycmVudCBjb250ZXh0IHNvIGVuYWJsZWQgVzNDIHByb3BhZ2F0aW9uIHJlbWFpbnMgaW50YWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVHJhY2VUYXJnZXQoKTogVHJhY2VUYXJnZXQgfCB1bmRlZmluZWQge1xuICBjb25zdCBhY3RpdmVDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgY29uc3QgcnBjID0gZ2V0UlBDTWV0YWRhdGEoYWN0aXZlQ29udGV4dCk7XG4gIGlmIChycGM/LnR5cGUgPT09IFJQQ1R5cGUuSFRUUCAmJiBycGMuc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgcmV0dXJuIHsgc3BhbjogcnBjLnNwYW4sIG93bmVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgYWN0aXZlID0gdHJhY2UuZ2V0QWN0aXZlU3BhbigpO1xuICBpZiAoYWN0aXZlPy5pc1JlY29yZGluZygpKSByZXR1cm4geyBzcGFuOiBhY3RpdmUsIG93bmVkOiBmYWxzZSB9O1xuXG4gIGNvbnN0IHNwYW4gPSB0cmFjZVxuICAgIC5nZXRUcmFjZXIoQ0hBVF9UVVJOX1RSQUNFUilcbiAgICAuc3RhcnRTcGFuKFwibWFzdHJhLmNoYXRfdHVyblwiLCB7IGtpbmQ6IFNwYW5LaW5kLlNFUlZFUiB9LCBhY3RpdmVDb250ZXh0KTtcbiAgaWYgKCFzcGFuLmlzUmVjb3JkaW5nKCkpIHtcbiAgICBzcGFuLmVuZCgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHsgc3Bhbiwgb3duZWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIG1pZGRsZXdhcmUgdGhhdCBzdGFtcHMgY2hhdCB0dXJuIEkvTyBvbnRvIHRoZSBleHBvcnRlZCBPVGVsIHJvb3QuXG4gKlxuICogVGVlIGByZXMud3JpdGVgLCBgcmVzLmpzb25gLCBhbmQgYHJlcy5lbmRgIGluc3RlYWQgb2YgbGlzdGVuaW5nIGZvciBgZmluaXNoYDpcbiAqIEhUVFAgaW5zdHJ1bWVudGF0aW9uIGVuZHMgaXRzIHNlcnZlciBzcGFuIG9uIGZpbmlzaCwgYW5kIGF0dHJpYnV0ZXMgc2V0XG4gKiBhZnRlciBhIHNwYW4gZW5kcyBuZXZlciByZWFjaCB0aGUgZXhwb3J0ZXIuXG4gKlxuICogYHBhdGhgIGlzIG1vdW50LXJlbGF0aXZlICh3aGF0IHRoZSBNYXN0cmEgc3ViLWFwcCBzZWVzKSwgZS5nLlxuICogYC9hZ2VudHMvc3VwcG9ydC9zdHJlYW1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdFR1cm5UcmFjZUlvTWlkZGxld2FyZShcbiAgcmVxOiBleHByZXNzLlJlcXVlc3QsXG4gIHJlczogZXhwcmVzcy5SZXNwb25zZSxcbiAgbmV4dDogZXhwcmVzcy5OZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcS5tZXRob2QgIT09IFwiUE9TVFwiIHx8ICFBR0VOVF9UVVJOX1JPVVRFLnRlc3QocmVxLnBhdGgpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0YXJnZXQgPSByZXNvbHZlVHJhY2VUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSAocmVxLmJvZHkgYXMgeyBtZXNzYWdlcz86IHVua25vd24gfSB8IHVuZGVmaW5lZCk/Lm1lc3NhZ2VzO1xuICBpZiAobWVzc2FnZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShcbiAgICAgIE1MRkxPV19TUEFOX0lOUFVUU19BVFRSLFxuICAgICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpLnNsaWNlKDAsIFRSQUNFX0lPX0xJTUlUKSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29sbGVjdG9yID0gbmV3IEFzc2lzdGFudFJlc3BvbnNlQ29sbGVjdG9yKCk7XG4gIGxldCBvdXRwdXRSZWNvcmRlZCA9IGZhbHNlO1xuICBsZXQgb3duZWRTcGFuRW5kZWQgPSBmYWxzZTtcbiAgY29uc3QgcGFzc1Rocm91Z2hXcml0ZSA9IHJlcy53cml0ZS5iaW5kKHJlcykgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gYm9vbGVhbjtcbiAgY29uc3QgcGFzc1Rocm91Z2hFbmQgPSByZXMuZW5kLmJpbmQocmVzKSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICBjb25zdCBwYXNzVGhyb3VnaEpzb24gPSByZXMuanNvbi5iaW5kKHJlcykgYXMgKGJvZHk/OiB1bmtub3duKSA9PiBleHByZXNzLlJlc3BvbnNlO1xuICBjb25zdCByZWNvcmRPdXRwdXQgPSAoYW5zd2VyOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpZiAob3V0cHV0UmVjb3JkZWQgfHwgIWFuc3dlcikgcmV0dXJuO1xuICAgIHRhcmdldC5zcGFuLnNldEF0dHJpYnV0ZShNTEZMT1dfU1BBTl9PVVRQVVRTX0FUVFIsIGFuc3dlci5zbGljZSgwLCBUUkFDRV9JT19MSU1JVCkpO1xuICAgIG91dHB1dFJlY29yZGVkID0gdHJ1ZTtcbiAgfTtcbiAgY29uc3QgZW5kT3duZWRTcGFuID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGFyZ2V0Lm93bmVkIHx8IG93bmVkU3BhbkVuZGVkKSByZXR1cm47XG4gICAgb3duZWRTcGFuRW5kZWQgPSB0cnVlO1xuICAgIHRhcmdldC5zcGFuLmVuZCgpO1xuICB9O1xuXG4gIHJlcy53cml0ZSA9ICgoY2h1bms6IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbGxlY3Rvci53cml0ZShjaHVuayk7XG4gICAgcmV0dXJuIHBhc3NUaHJvdWdoV3JpdGUoY2h1bmssIC4uLnJlc3QpO1xuICB9KSBhcyB0eXBlb2YgcmVzLndyaXRlO1xuXG4gIHJlcy5qc29uID0gKChib2R5PzogdW5rbm93bikgPT4ge1xuICAgIHJlY29yZE91dHB1dChhc3Npc3RhbnRUZXh0RnJvbUpzb24oYm9keSkpO1xuICAgIHJldHVybiBwYXNzVGhyb3VnaEpzb24oYm9keSk7XG4gIH0pIGFzIHR5cGVvZiByZXMuanNvbjtcblxuICByZXMuZW5kID0gKChjaHVuaz86IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbGxlY3Rvci53cml0ZShjaHVuayk7XG4gICAgcmVjb3JkT3V0cHV0KGNvbGxlY3Rvci5maW5pc2goKSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXNzVGhyb3VnaEVuZChjaHVuaywgLi4ucmVzdCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVuZE93bmVkU3BhbigpO1xuICAgIH1cbiAgfSkgYXMgdHlwZW9mIHJlcy5lbmQ7XG5cbiAgcmVzLm9uY2UoXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgcmVjb3JkT3V0cHV0KGNvbGxlY3Rvci5maW5pc2goKSk7XG4gICAgZW5kT3duZWRTcGFuKCk7XG4gIH0pO1xuXG4gIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHRhcmdldC5zcGFuKSwgbmV4dCk7XG59XG5cbi8qKlxuICogSW5zdGFsbCB7QGxpbmsgY2hhdFR1cm5UcmFjZUlvTWlkZGxld2FyZX0gb24gYSBNYXN0cmEgRXhwcmVzcyBzdWItYXBwLlxuICpcbiAqIENhbGwgYmVmb3JlIGBNYXN0cmFTZXJ2ZXIuaW5pdCgpYCBzbyB0aGUgbGF5ZXIgc2l0cyBhaGVhZCBvZiB0aGUgYWdlbnRcbiAqIHJvdXRlcy4gU2FmZSB0byBjYWxsIHVuY29uZGl0aW9uYWxseTogd2hlbiBubyByZWNvcmRpbmcgdHJhY2VyIGlzIHJlZ2lzdGVyZWQsXG4gKiB0aGUgbWlkZGxld2FyZSBpcyBhIG5vLW9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoQ2hhdFR1cm5UcmFjZUlvKGFwcDogZXhwcmVzcy5FeHByZXNzKTogdm9pZCB7XG4gIGFwcC51c2UoY2hhdFR1cm5UcmFjZUlvTWlkZGxld2FyZSk7XG4gIGxvZ2dlci5pbmZvKFwiY2hhdCB0dXJuIEkvTyBtaWRkbGV3YXJlIGF0dGFjaGVkXCIpO1xufVxuIl19
package/package.json CHANGED
@@ -33,18 +33,18 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@databricks/appkit": "0.81.0",
36
- "@dbx-tools/appkit": "^0.9.36",
37
- "@dbx-tools/core": "^0.9.36",
38
- "@dbx-tools/databricks": "^0.9.36",
39
- "@dbx-tools/fs": "^0.9.36",
40
- "@dbx-tools/genie": "^0.9.36",
41
- "@dbx-tools/model": "^0.9.36",
42
- "@dbx-tools/path": "^0.9.36",
43
- "@dbx-tools/shared-core": "^0.9.36",
44
- "@dbx-tools/shared-fs": "^0.9.36",
45
- "@dbx-tools/shared-genie": "^0.9.36",
46
- "@dbx-tools/shared-mastra": "^0.9.36",
47
- "@dbx-tools/shared-model": "^0.9.36",
36
+ "@dbx-tools/appkit": "^0.9.38",
37
+ "@dbx-tools/core": "^0.9.38",
38
+ "@dbx-tools/databricks": "^0.9.38",
39
+ "@dbx-tools/fs": "^0.9.38",
40
+ "@dbx-tools/genie": "^0.9.38",
41
+ "@dbx-tools/model": "^0.9.38",
42
+ "@dbx-tools/path": "^0.9.38",
43
+ "@dbx-tools/shared-core": "^0.9.38",
44
+ "@dbx-tools/shared-fs": "^0.9.38",
45
+ "@dbx-tools/shared-genie": "^0.9.38",
46
+ "@dbx-tools/shared-mastra": "^0.9.38",
47
+ "@dbx-tools/shared-model": "^0.9.38",
48
48
  "@mastra/ai-sdk": "1.10.5",
49
49
  "@mastra/core": "1.71.0",
50
50
  "@mastra/express": "1.5.15",
@@ -204,7 +204,7 @@
204
204
  "./package.json": "./package.json"
205
205
  }
206
206
  },
207
- "version": "0.9.36",
207
+ "version": "0.9.38",
208
208
  "types": "./lib/index.d.ts",
209
209
  "dbxToolsConfig": {
210
210
  "tags": [
package/src/chart.ts CHANGED
@@ -324,6 +324,7 @@ export const chartPlannerRequestSchema = z.object({
324
324
  ),
325
325
  });
326
326
 
327
+ /** Validated title, description, and tabular rows passed to the chart-planning model. */
327
328
  export type ChartPlannerRequest = z.infer<typeof chartPlannerRequestSchema>;
328
329
 
329
330
  /**
package/src/config.ts CHANGED
@@ -42,6 +42,7 @@ export const MASTRA_USER_KEY = "mastra__user";
42
42
  * issued the request without leaking the full user object.
43
43
  */
44
44
  export const MASTRA_USER_NAME_KEY = "mastra__userName";
45
+ /** Request-context key containing the authenticated user's email address. */
45
46
  export const MASTRA_USER_EMAIL_KEY = "mastra__userEmail";
46
47
 
47
48
  /**
@@ -55,6 +55,7 @@ const logger = log.logger("mastra/observability");
55
55
 
56
56
  const DEFAULT_SERVICE_NAME = "mastra";
57
57
 
58
+ /** Options for connecting Mastra spans to AppKit's OpenTelemetry pipeline. */
58
59
  export interface BuildObservabilityOptions {
59
60
  /**
60
61
  * Whether to wire the Mastra `OtelBridge`. Mirrors
package/src/trace-io.ts CHANGED
@@ -46,6 +46,7 @@ const AGENT_TURN_ROUTE = /^(?:\/agents\/[^/]+\/(?:stream|generate)(?:\/|$)|\/cha
46
46
 
47
47
  /** Attribute keys the MLflow UC `*_trace_unified` view reads from the root span. */
48
48
  export const MLFLOW_SPAN_INPUTS_ATTR = "mlflow.spanInputs";
49
+ /** Root-span attribute consumed as chat output by MLflow unified trace views. */
49
50
  export const MLFLOW_SPAN_OUTPUTS_ATTR = "mlflow.spanOutputs";
50
51
 
51
52
  interface TraceTarget {