footprintjs 9.23.2 → 9.24.0

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.
Files changed (54) hide show
  1. package/CLAUDE.md +4 -4
  2. package/dist/advanced.js +6 -3
  3. package/dist/esm/advanced.d.ts +1 -1
  4. package/dist/esm/advanced.js +2 -2
  5. package/dist/esm/index.d.ts +1 -1
  6. package/dist/esm/index.js +1 -1
  7. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -0
  8. package/dist/esm/lib/builder/FlowChartBuilder.js +17 -1
  9. package/dist/esm/lib/builder/index.d.ts +1 -1
  10. package/dist/esm/lib/builder/index.js +1 -1
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +32 -0
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -1
  14. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
  15. package/dist/esm/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
  16. package/dist/esm/lib/engine/handlers/ParallelForEachHandler.js +11 -2
  17. package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
  18. package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +36 -6
  19. package/dist/esm/lib/reactive/arrayTraps.js +14 -12
  20. package/dist/esm/lib/reactive/createTypedScope.js +20 -12
  21. package/dist/esm/lib/reactive/handles.d.ts +46 -0
  22. package/dist/esm/lib/reactive/handles.js +105 -0
  23. package/dist/esm/lib/reactive/index.d.ts +1 -0
  24. package/dist/esm/lib/reactive/index.js +2 -1
  25. package/dist/esm/lib/reactive/structuralWrite.d.ts +0 -15
  26. package/dist/esm/lib/reactive/structuralWrite.js +10 -28
  27. package/dist/esm/lib/reactive/writeTraps.d.ts +4 -3
  28. package/dist/esm/lib/reactive/writeTraps.js +8 -6
  29. package/dist/index.js +1 -1
  30. package/dist/lib/builder/FlowChartBuilder.js +17 -1
  31. package/dist/lib/builder/index.js +1 -1
  32. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  33. package/dist/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
  34. package/dist/lib/engine/handlers/ParallelForEachHandler.js +11 -2
  35. package/dist/lib/engine/handlers/SubflowInputMapper.js +36 -6
  36. package/dist/lib/reactive/arrayTraps.js +14 -12
  37. package/dist/lib/reactive/createTypedScope.js +20 -12
  38. package/dist/lib/reactive/handles.js +112 -0
  39. package/dist/lib/reactive/index.js +6 -2
  40. package/dist/lib/reactive/structuralWrite.js +11 -30
  41. package/dist/lib/reactive/writeTraps.js +7 -5
  42. package/dist/types/advanced.d.ts +1 -1
  43. package/dist/types/index.d.ts +1 -1
  44. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -0
  45. package/dist/types/lib/builder/index.d.ts +1 -1
  46. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +32 -0
  47. package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -1
  48. package/dist/types/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
  49. package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
  50. package/dist/types/lib/reactive/handles.d.ts +46 -0
  51. package/dist/types/lib/reactive/index.d.ts +1 -0
  52. package/dist/types/lib/reactive/structuralWrite.d.ts +0 -15
  53. package/dist/types/lib/reactive/writeTraps.d.ts +4 -3
  54. package/package.json +1 -1
@@ -20,4 +20,4 @@ Object.defineProperty(exports, "flowChartSelector", { enumerable: true, get: fun
20
20
  Object.defineProperty(exports, "specToStageNode", { enumerable: true, get: function () { return FlowChartBuilder_js_2.specToStageNode; } });
21
21
  var types_js_1 = require("./types.js");
22
22
  Object.defineProperty(exports, "ArrayMergeMode", { enumerable: true, get: function () { return types_js_1.ArrayMergeMode; } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUEwQjtBQUMxQjs7Ozs7R0FLRzs7O0FBRUgsVUFBVTtBQUNWLDZEQUFzRjtBQUE3RSxrSEFBQSxXQUFXLE9BQUE7QUFBRSx1SEFBQSxnQkFBZ0IsT0FBQTtBQUFFLHFIQUFBLGNBQWMsT0FBQTtBQUV0RCxzQkFBc0I7QUFDdEIsNkRBQXNGO0FBQTdFLGdIQUFBLFNBQVMsT0FBQTtBQUFFLHdIQUFBLGlCQUFpQixPQUFBO0FBQUUsc0hBQUEsZUFBZSxPQUFBO0FBeUJ0RCx1Q0FBNEM7QUFBbkMsMEdBQUEsY0FBYyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogYnVpbGRlci8g4oCUIEZsb3djaGFydCBjb25zdHJ1Y3Rpb24gbGlicmFyeSAoemVybyBkZXBzIG9uIG9sZCBjb2RlKVxuICpcbiAqIEZsdWVudCBBUEkgZm9yIGJ1aWxkaW5nIFN0YWdlTm9kZSB0cmVlcyBhbmQgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLlxuICogQ2FuIGJlIHVzZWQgc3RhbmRhbG9uZSBmb3IgYnVpbGRpbmcgZmxvd2NoYXJ0IHNwZWNzIHdpdGhvdXQgZXhlY3V0aW9uLlxuICovXG5cbi8vIENsYXNzZXNcbmV4cG9ydCB7IERlY2lkZXJMaXN0LCBGbG93Q2hhcnRCdWlsZGVyLCBTZWxlY3RvckZuTGlzdCB9IGZyb20gJy4vRmxvd0NoYXJ0QnVpbGRlci5qcyc7XG5cbi8vIEZhY3RvcnkgJiB1dGlsaXRpZXNcbmV4cG9ydCB7IGZsb3dDaGFydCwgZmxvd0NoYXJ0U2VsZWN0b3IsIHNwZWNUb1N0YWdlTm9kZSB9IGZyb20gJy4vRmxvd0NoYXJ0QnVpbGRlci5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEJyYW5jaENoYXJ0LFxuICBFeGVjT3B0aW9ucyxcbiAgRmxvd0NoYXJ0LFxuICBGbG93Q2hhcnRPcHRpb25zLFxuICBGbG93Q2hhcnRTcGVjLFxuICBJTG9nZ2VyLFxuICBQYXJhbGxlbEZvckVhY2hDb25maWcsXG4gIFJldHJ5UG9saWN5LFxuICBTY29wZVByb3RlY3Rpb25Nb2RlLFxuICBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsXG4gIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWMsXG4gIFN0YWdlRm4sXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0YWdlTm9kZSxcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gIFN1YmZsb3dSZWYsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIEw3IOKAlCBTdHJ1Y3R1cmFsIG9ic2VydmVyIHN1cmZhY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBgU3RydWN0dXJlUmVjb3JkZXJgIGlzIHRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFRvZ2V0aGVyIHRoZXlcbi8vIGNvdmVyIGJvdGggcGhhc2VzIG9mIGNoYXJ0IGxpZmUg4oCUIHNlZSBgU3RydWN0dXJlUmVjb3JkZXIudHNgIEpTRG9jIGZvciB0aGVcbi8vIGFyY2hpdGVjdHVyYWwgcmF0aW9uYWxlICh3aHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmUgcGhhc2UtdGFnZ2VkIGV2ZW50KS5cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUEwQjtBQUMxQjs7Ozs7R0FLRzs7O0FBRUgsVUFBVTtBQUNWLDZEQUFzRjtBQUE3RSxrSEFBQSxXQUFXLE9BQUE7QUFBRSx1SEFBQSxnQkFBZ0IsT0FBQTtBQUFFLHFIQUFBLGNBQWMsT0FBQTtBQUV0RCxzQkFBc0I7QUFDdEIsNkRBQXNGO0FBQTdFLGdIQUFBLFNBQVMsT0FBQTtBQUFFLHdIQUFBLGlCQUFpQixPQUFBO0FBQUUsc0hBQUEsZUFBZSxPQUFBO0FBeUJ0RCx1Q0FBNEM7QUFBbkMsMEdBQUEsY0FBYyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogYnVpbGRlci8g4oCUIEZsb3djaGFydCBjb25zdHJ1Y3Rpb24gbGlicmFyeSAoemVybyBkZXBzIG9uIG9sZCBjb2RlKVxuICpcbiAqIEZsdWVudCBBUEkgZm9yIGJ1aWxkaW5nIFN0YWdlTm9kZSB0cmVlcyBhbmQgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLlxuICogQ2FuIGJlIHVzZWQgc3RhbmRhbG9uZSBmb3IgYnVpbGRpbmcgZmxvd2NoYXJ0IHNwZWNzIHdpdGhvdXQgZXhlY3V0aW9uLlxuICovXG5cbi8vIENsYXNzZXNcbmV4cG9ydCB7IERlY2lkZXJMaXN0LCBGbG93Q2hhcnRCdWlsZGVyLCBTZWxlY3RvckZuTGlzdCB9IGZyb20gJy4vRmxvd0NoYXJ0QnVpbGRlci5qcyc7XG5cbi8vIEZhY3RvcnkgJiB1dGlsaXRpZXNcbmV4cG9ydCB7IGZsb3dDaGFydCwgZmxvd0NoYXJ0U2VsZWN0b3IsIHNwZWNUb1N0YWdlTm9kZSB9IGZyb20gJy4vRmxvd0NoYXJ0QnVpbGRlci5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEJyYW5jaENoYXJ0LFxuICBFeGVjT3B0aW9ucyxcbiAgRmxvd0NoYXJ0LFxuICBGbG93Q2hhcnRPcHRpb25zLFxuICBGbG93Q2hhcnRTcGVjLFxuICBJTG9nZ2VyLFxuICBQYXJhbGxlbEZvckVhY2hDb25maWcsXG4gIFJldHJ5UG9saWN5LFxuICBTY29wZVByb3RlY3Rpb25Nb2RlLFxuICBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsXG4gIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWMsXG4gIFN0YWdlRm4sXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0YWdlTm9kZSxcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gIFN1YmZsb3dSZWYsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIEw3IOKAlCBTdHJ1Y3R1cmFsIG9ic2VydmVyIHN1cmZhY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBgU3RydWN0dXJlUmVjb3JkZXJgIGlzIHRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFRvZ2V0aGVyIHRoZXlcbi8vIGNvdmVyIGJvdGggcGhhc2VzIG9mIGNoYXJ0IGxpZmUg4oCUIHNlZSBgU3RydWN0dXJlUmVjb3JkZXIudHNgIEpTRG9jIGZvciB0aGVcbi8vIGFyY2hpdGVjdHVyYWwgcmF0aW9uYWxlICh3aHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmUgcGhhc2UtdGFnZ2VkIGV2ZW50KS5cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG4iXX0=
@@ -156,4 +156,4 @@
156
156
  * ```
157
157
  */
158
158
  Object.defineProperty(exports, "__esModule", { value: true });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EySkciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyIOKAlCBwYXNzaXZlIG9ic2VydmVyIG9mIEJVSUxELVRJTUUgY2hhcnQgY29uc3RydWN0aW9uIGV2ZW50cy5cbiAqXG4gKiBUaGUgYnVpbGQtdGltZSB0d2luIG9mIGBGbG93UmVjb3JkZXJgLiBXaGVyZSBgRmxvd1JlY29yZGVyYCBvYnNlcnZlc1xuICogUlVOVElNRSBjb250cm9sLWZsb3cgdHJhbnNpdGlvbnMgKHBlci1leGVjdXRpb24gYHJ1bnRpbWVTdGFnZUlkYCxcbiAqIGl0ZXJhdGlvbiBjb3VudHMsIGVycm9ycywgcGF1c2VzKSwgYFN0cnVjdHVyZVJlY29yZGVyYCBvYnNlcnZlc1xuICogU1RBVElDIGNoYXJ0IHNoYXBlIGFzIGl0J3MgYXNzZW1ibGVkIGJ5IHRoZSBidWlsZGVyIOKAlCBldmVyeSBzcGVjXG4gKiBub2RlIGFkZGVkLCBldmVyeSBvdXRnb2luZyBlZGdlIHdpcmVkLCBldmVyeSBkZWNpZGVyIGNsb3NlZC5cbiAqXG4gKiBXaHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmVcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICBCdWlsZCBhbmQgcnVudGltZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgSU5WQVJJQU5UUywgbm90IGp1c3RcbiAqICAgZGlmZmVyZW50IHRpbWluZzpcbiAqXG4gKiAgICAgLSBSdW50aW1lIGV2ZW50cyBjYXJyeSBgcnVudGltZVN0YWdlSWRgIChgW3N1YmZsb3dQYXRoL11zdGFnZUlkI05gKSxcbiAqICAgICAgIGBpdGVyYXRpb25gLCBgdHJhdmVyc2FsQ29udGV4dGAg4oCUIGxvYWQtYmVhcmluZyBmb3IgdGltZS10cmF2ZWxcbiAqICAgICAgIFVJcywgY29tbWl0LWxvZyBpbmRpY2VzLCBhbmQgYFNlcXVlbmNlU3RvcmU8VD5gIGNvbnN1bWVycy5cbiAqICAgICAgIE5PTkUgb2YgdGhlc2UgZXhpc3QgYXQgYnVpbGQgdGltZS5cbiAqXG4gKiAgICAgLSBCdWlsZCBldmVudHMgY2Fycnkgb25seSBgc3RhZ2VJZGAgKyBzdHJ1Y3R1cmFsIGZpZWxkcy4gTm9cbiAqICAgICAgIGV4ZWN1dGlvbiBpbmRleCwgbm8gaXRlcmF0aW9uLCBubyBzbmFwc2hvdC5cbiAqXG4gKiAgICAgLSBTb21lIGV2ZW50cyBoYXZlIG5vIGFuYWxvZyBhY3Jvc3MgcGhhc2VzOiBgb25QYXVzZWAgL1xuICogICAgICAgYG9uUmVzdW1lYCAvIGBvbkVycm9yYCAvIGBvblJ1blN0YXJ0YCBhcmUgcnVudGltZS1vbmx5O1xuICogICAgICAgYG9uRGVjaWRlckNvbXBsZXRlYCAvIGBvblN0YWdlQWRkZWRgIGFyZSBidWlsZC1vbmx5LlxuICpcbiAqICAgQSBzaW5nbGUgYEZsb3dSZWNvcmRlcmAgd2l0aCBgcGhhc2U6ICdzdGF0aWMnIHwgJ2R5bmFtaWMnYFxuICogICBkaXNjcmltaW5hdG9yIHdvdWxkIGZvcmNlIGV2ZXJ5IGNvbnN1bWVyIHRvIHdyaXRlXG4gKiAgIGBpZiAoZS5waGFzZSA9PT0gJ3N0YXRpYycpIC4uLmAgYnJhbmNoZXMgYW5kIHdvdWxkIGVyYXNlIHRoZVxuICogICBsZWFzdC1wcml2aWxlZ2UgYm91bmRhcnkgKGEgc3RhdGljLW9ubHkgY29uc3VtZXIgc2hvdWxkIE5PVFxuICogICBhY2NpZGVudGFsbHkgb2JzZXJ2ZSBydW50aW1lIGRhdGEg4oCUIGUuZy4sIGEgcHVibGljIGRvY3Mgc2l0ZVxuICogICByZW5kZXJpbmcgY2hhcnQgdG9wb2xvZ3kgbXVzdCBub3Qgc2VlIHNjb3BlIHZhbHVlcykuXG4gKlxuICogICBUd28gaW50ZXJmYWNlcywgc2FtZSBtZW50YWwgbW9kZWwsIGNsZWFuIHNlcGFyYXRpb24uIFR3b1xuICogICByZWdpc3RyYXRpb24gc2l0ZXMgc2hpcCB0b2RheSAocGljayB3aGljaGV2ZXIgZml0cyB5b3VyIGNhbGxcbiAqICAgc2l0ZSk6XG4gKlxuICogICAgIDEuICoqT3B0aW9ucy1iYWcqKiAocHJlZmVycmVkIHdoZW4gdGhlIHJlY29yZGVyIHNldCBpcyBrbm93blxuICogICAgICAgIGF0IGNvbnN0cnVjdGlvbiB0aW1lIOKAlCByZWdpc3RlcnMgQkVGT1JFIGBzdGFydCgpYCBzbyBldmVuXG4gKiAgICAgICAgdGhlIHNlZWQgZXZlbnQgZmlyZXMgdGhyb3VnaCB0aGUgbm9ybWFsIGRpc3BhdGNoZXIgZmFuLW91dCk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7IHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10gfSlcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgICAyLiAqKkZsdWVudCoqIChwcmVmZXJyZWQgd2hlbiBhdHRhY2ggaXMgY29uZGl0aW9uYWwsIGxhdGUsIG9yXG4gKiAgICAgICAgaW4gYSBjaGFpbiBidWlsZGVyIOKAlCB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGFcbiAqICAgICAgICBvbmUtdGltZSBzZWVkIHJlcGxheSBzbyBpdCBvYnNlcnZlcyB0aGUgcm9vdCBzdGFnZSk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAgICAgICAgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgQm90aCBkZWxpdmVyIHRoZSBzYW1lIGV2ZW50IHN0cmVhbSB0byB0aGUgc2FtZSByZWNvcmRlci4gU2VlIHRoZVxuICogICBgQGV4YW1wbGVgIGJsb2NrIGJlbG93IGZvciBhIGZ1bGx5LWZsZXNoZWQtb3V0IGltcGxlbWVudGF0aW9uLlxuICpcbiAqIExpZmVjeWNsZSArIG9yZGVyaW5nIGludmFyaWFudHNcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEZpcmVzIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgY2hhaW4gY2FsbHMgKGFuZCBkdXJpbmdcbiAqICAgICBgLmJ1aWxkKClgIGZvciB0aGUgdGVybWluYWwgbm9kZSkgYXQgdGhlIG5hdHVyYWwgbW9tZW50IGVhY2hcbiAqICAgICBzcGVjIG11dGF0aW9uIGNvbXBsZXRlcy5cbiAqICAgLSBgb25TdGFnZUFkZGVkKEEpYCBhbmQgYG9uU3RhZ2VBZGRlZChCKWAgZmlyZSBCRUZPUkUgYW55XG4gKiAgICAgYG9uRWRnZUFkZGVkKHtmcm9tOiBBLCB0bzogQn0pYCDigJQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uXG4gKiAgICAgaGFwcGVucyBiZWZvcmUgZWRnZSB3aXJpbmcuXG4gKiAgIC0gYG9uRGVjaWRlckNvbXBsZXRlKEQpYCBmaXJlcyBhdCBzdWItYnVpbGRlciBgLmVuZCgpYCB0aW1lLCBBRlRFUlxuICogICAgIGV2ZXJ5IGNoaWxkJ3MgYG9uU3RhZ2VBZGRlZGAgYW5kIGV2ZXJ5IGBvbkVkZ2VBZGRlZCh7ZnJvbTogRCxcbiAqICAgICB0bzogY2hpbGR9KWAuIE1hcmtzIHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24uXG4gKiAgIC0gYG9uU3ViZmxvd01vdW50ZWQoe3N1YmZsb3dJZH0pYCBmaXJlcyBvbmNlIHBlciBtb3VudC5cbiAqICAgICAqKk1PVU5ULU9OTFkqKjogcGFyZW50IHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheSBvZlxuICogICAgIHRoZSBzdWJmbG93J3Mgb3duIGludGVybmFsIHN0cnVjdHVyZSBldmVudHMgKHRob3NlIGZpcmVkXG4gKiAgICAgZHVyaW5nIHRoZSBzdWJmbG93J3Mgb3duIGAuYnVpbGQoKWApLiBNYXRjaGVzIHRoZSBydW50aW1lXG4gKiAgICAgYG9uU3ViZmxvd0VudHJ5YCBzZW1hbnRpY3Mg4oCUIGNvbXBvc2l0aW9uIG92ZXIgcmVwbGF5LlxuICpcbiAqIEVycm9yIGlzb2xhdGlvbiAobWF0Y2hlcyBGbG93UmVjb3JkZXIgY29udHJhY3QpXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAgLSBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0LCBsb2dnZWQgdmlhIGBpc0Rldk1vZGUoKWAgd2FybmluZyxcbiAqICAgICBhbmQgYWNjdW11bGF0ZWQgb24gYGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKWAgZm9yXG4gKiAgICAgcG9zdC1ob2MgaW5zcGVjdGlvbi5cbiAqICAgLSBTdWJzZXF1ZW50IHJlY29yZGVycyArIHN1YnNlcXVlbnQgZXZlbnRzIGZpcmUgbm9ybWFsbHk7IG9uZVxuICogICAgIG1pc2JlaGF2aW5nIHJlY29yZGVyIGNhbm5vdCBUSFJPVyBpdHMgd2F5IGludG8gYmxvY2tpbmdcbiAqICAgICBjb25zdHJ1Y3Rpb24uXG4gKiAgIC0gVGhlIGVycm9yc1tdIGFjY3VtdWxhdG9yIGlzIHNvZnQtY2FwcGVkICh+MTAwIGVudHJpZXMpIHdpdGggYVxuICogICAgIGBfX3RydW5jYXRlZF9fYCBzZW50aW5lbCByZWNvcmQgb25jZSB0aGUgY2FwIGlzIGhpdCwgdG8gcHJldmVudFxuICogICAgIHVuYm91bmRlZCBncm93dGggb24gY2hhdHR5IGJyb2tlbiByZWNvcmRlcnMuXG4gKiAgIC0gTm90ZTogdGhyb3cgaXNvbGF0aW9uIGRvZXMgTk9UIGRlZmVuZCBhZ2FpbnN0IGEgaGFuZGxlciB0aGF0XG4gKiAgICAgc3VjY2VlZHMgYXQgcnVudGltZSBidXQgbXV0YXRlcyBgZXZlbnQuc3BlY2AgdG8gY29ycnVwdCB0aGVcbiAqICAgICBjaGFydC4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGJlbG93LlxuICpcbiAqIFNwZWMgbXV0YXRpb24g4oCUIHJlYWRvbmx5LWJ5LWNvbnRyYWN0IChOT1QgcnVudGltZS1lbmZvcmNlZClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEV2ZW50IHBheWxvYWRzIHBhc3Mgc3BlYyByZWZlcmVuY2VzIHdoZXJlIHVzZWZ1bCAoZS5nLiwgYHNwZWNgXG4gKiAgICAgb24gYG9uU3RhZ2VBZGRlZGApLiBFdmVyeSBmaWVsZCBvbiBldmVyeSBldmVudCBwYXlsb2FkIGlzXG4gKiAgICAgbWFya2VkIGByZWFkb25seWAgaW4gVHlwZVNjcmlwdCDigJQgdGhlIHR5cGUgc3lzdGVtIHNpZ25hbHNcbiAqICAgICBjb25zdW1lciBpbnRlbnQgYXQgYXV0aG9yIHRpbWUuXG4gKiAgIC0gVGhlcmUgaXMgTk8gcnVudGltZSBmcmVlemUuIFRoZSBidWlsZGVyIGZpcmVzIGBvblN0YWdlQWRkZWRgXG4gKiAgICAgSU1NRURJQVRFTFkgd2hlbiBhIHNwZWMgbm9kZSBpcyBhZGRlZCwgQkVGT1JFIHRoZSBidWlsZGVyXG4gKiAgICAgd2lyZXMgdGhhdCBub2RlJ3MgYC5uZXh0YC9gLmNoaWxkcmVuYC9gLmxvb3BUYXJnZXRgIGluIHRoZVxuICogICAgIHN1YnNlcXVlbnQgYGFkZFhgIGNhbGwuIEZyZWV6aW5nIGhlcmUgd291bGQgYnJlYWsgdGhlXG4gKiAgICAgYnVpbGRlcidzIG93biBzdWJzZXF1ZW50IG11dGF0aW9uLlxuICogICAtIEhhbmRsZXIgbXV0YXRpb24gb2YgYGV2ZW50LnNwZWNgIGlzIERPQ1VNRU5URUQgVU5ERUZJTkVEXG4gKiAgICAgQkVIQVZJT1Ig4oCUIGl0IHdpbGwgc3VjY2VlZCBhdCBydW50aW1lLCBidXQgaXMgbm90IHN1cHBvcnRlZFxuICogICAgIGFuZCBkb3duc3RyZWFtIGNvbnN1bWVycyBtYXkgYnJlYWsuIFNwZWNpZmljYWxseSwgbXV0YXRpbmdcbiAqICAgICBgZXZlbnQuc3BlYy5mbmAsIGBldmVudC5zcGVjLmlkYCwgb3IgYGV2ZW50LnNwZWMuY2hpbGRyZW5gXG4gKiAgICAgY2FuIGNvcnJ1cHQgc3Vic2VxdWVudCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBjaGFydC5cbiAqICAgLSAqKlRydXN0IG1vZGVsKio6IGF0dGFjaCBPTkxZIHJlY29yZGVycyBmcm9tIHRydXN0ZWQgY29kZSBwYXRocy5cbiAqICAgICBBIGhvc3RpbGUgb3IgYnVnZ3kgcmVjb3JkZXIgY2FuIGVmZmVjdGl2ZWx5IHN1YnN0aXR1dGUgc3RhZ2VcbiAqICAgICBmdW5jdGlvbnMgb3IgcmV3aXJlIHRoZSBjaGFydCBzdHJ1Y3R1cmUuIFRoZSBgcmVhZG9ubHlgXG4gKiAgICAgbWFya2VycyBjYW5ub3QgZGVmZW5kIGFnYWluc3QgaW50ZW50aW9uYWwgbXV0YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjbGFzcyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyIGltcGxlbWVudHMgU3RydWN0dXJlUmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICd0cmFjZS1zdGF0aWMnO1xuICogICBub2RlczogWHlmbG93Tm9kZVtdID0gW107XG4gKiAgIGVkZ2VzOiBYeWZsb3dFZGdlW10gPSBbXTtcbiAqXG4gKiAgIG9uU3RhZ2VBZGRlZChlKSB7XG4gKiAgICAgLy8gTm9kZSByb2xlOiAnc3RhZ2UnIGlzIHRoZSBpbml0aWFsIHR5cGUuIElmIG91dGdvaW5nIGVkZ2VzXG4gKiAgICAgLy8gYXJyaXZlIHdpdGgga2luZCAnZm9yay1icmFuY2gnIC8gJ2RlY2lzaW9uLWJyYW5jaCcgdGhlIG5vZGVcbiAqICAgICAvLyBpcyBmdW5jdGlvbmluZyBhcyBhIGZvcmsvZGVjaWRlciDigJQgZGVyaXZlIHRoZSB2aXN1YWwgc3R5bGVcbiAqICAgICAvLyBmcm9tIHRob3NlIGVkZ2VzLCBub3QgZnJvbSBgZS50eXBlYCBhbG9uZS5cbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdGFnZUlkLCB0eXBlOiAnbGVuc1N0YWdlJywgZGF0YTogeyBsYWJlbDogZS5uYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25FZGdlQWRkZWQoZSkge1xuICogICAgIHRoaXMuZWRnZXMucHVzaCh7IGlkOiBgJHtlLmZyb219LT4ke2UudG99YCwgc291cmNlOiBlLmZyb20sIHRhcmdldDogZS50byB9KTtcbiAqICAgfVxuICogICBvblN1YmZsb3dNb3VudGVkKGUpIHtcbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdWJmbG93SWQsIHR5cGU6ICdzdWJmbG93JywgZGF0YTogeyBsYWJlbDogZS5zdWJmbG93TmFtZSB9IH0pO1xuICogICB9XG4gKiAgIG9uRGVjaWRlckNvbXBsZXRlKGUpIHtcbiAqICAgICAvLyBPcHRpb25hbDogZmluYWxpemUgbm9kZSBzdHlsaW5nIG5vdyB0aGF0IGJyYW5jaCBsaXN0IGlzIHNlYWxlZC5cbiAqICAgfVxuICogfVxuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQSDigJQgb3B0aW9ucy1iYWcgKHByZWZlcnJlZCB3aGVuIHJlY29yZGVyc1xuICogLy8gYXJlIGtub3duIHVwIGZyb250OyBhdHRhY2hlcyBCRUZPUkUgdGhlIHNlZWQgZXZlbnQgZmlyZXMpOlxuICogY29uc3QgcmVjID0gbmV3IFRyYWNlU3RydWN0dXJlUmVjb3JkZXIoKTtcbiAqIGNvbnN0IGJ1aWxkZXIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7XG4gKiAgIHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10sXG4gKiB9KS5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKTtcbiAqIGNvbnN0IGNoYXJ0ID0gYnVpbGRlci5idWlsZCgpO1xuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQiDigJQgZmx1ZW50IGNoYWluIChwcmVmZXJyZWQgZm9yIGNvbmRpdGlvbmFsXG4gKiAvLyBvciBsYXRlIGF0dGFjaDsgdGhlIGp1c3QtYXR0YWNoZWQgcmVjb3JkZXIgZ2V0cyBhIHNlZWQgcmVwbGF5KTpcbiAqIGNvbnN0IHJlYzIgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlcjIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjMilcbiAqICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICpcbiAqIC8vIEluc3BlY3QgYW55IHJlY29yZGVyIGVycm9ycyAoY2FsbCBvbiB0aGUgQlVJTERFUiwgbm90IHRoZSBjaGFydCk6XG4gKiBjb25zdCBlcnJvcnMgPSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCk7XG4gKlxuICogPFJlYWN0RmxvdyBub2Rlcz17cmVjLm5vZGVzfSBlZGdlcz17cmVjLmVkZ2VzfSAvPlxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjLCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcGF5bG9hZCB0eXBlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VBZGRlZGAuIEZpcmVzIGZvciBldmVyeVxuICogc3BlYyBub2RlIGFkZGVkIHRvIHRoZSBjaGFydCwgaW5jbHVkaW5nIHRoZSBzZWVkIChhZGRlZCB2aWFcbiAqIGBmbG93Q2hhcnQoKWAgZmFjdG9yeSkgYW5kIHN1YmZsb3cgbW91bnQgbm9kZXMuIEV4Y2x1ZGVzIHN5bnRoZXRpY1xuICogbG9vcC1yZWZlcmVuY2Ugbm9kZXMgKHRob3NlIGNhcnJ5IGBpc0xvb3BSZWZlcmVuY2U6IHRydWVgIG9uIHRoZVxuICogc3BlYzsgY29uc3VtZXJzIHNlZSB0aGVtIHZpYSB0aGUgc2VwYXJhdGUgYG9uTG9vcEVkZ2VBZGRlZGAgZXZlbnRcbiAqIGluc3RlYWQgb2YgYXMgZnJlc2ggc3RhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgbm9kZS4gQVQgRVZFTlQgRklSRSBUSU1FIHRoaXMgaXMgdGhlXG4gICAqIGJ1aWxkZXIncyBMT0NBTCBmb3JtIChubyBzdWJmbG93IHByZWZpeCDigJQgdGhlIHByZWZpeCBpcyBhcHBsaWVkXG4gICAqIGxhdGVyIGJ5IGBfcHJlZml4Tm9kZVRyZWVgIHdoZW4gdGhpcyBidWlsZGVyIGlzIG1vdW50ZWQgYXMgYVxuICAgKiBzdWJmbG93IGludG8gYSBwYXJlbnQpLlxuICAgKlxuICAgKiBOb3RlOiBgc3BlYy5pZGAgaXMgYSBMSVZFIHJlZmVyZW5jZS4gSWYgeW91IHJlYWQgaXQgQUZURVIgdGhpc1xuICAgKiBjaGFydCBoYXMgYmVlbiBtb3VudGVkIGFzIGEgc3ViZmxvdywgaXQgbWF5IGhhdmUgYmVlbiByZXdyaXR0ZW5cbiAgICogdG8gdGhlIEZVTEwgcHJlZml4ZWQgZm9ybS4gVXNlIGBzcGxpdFN0YWdlSWQoc3BlYy5pZClgIGZyb21cbiAgICogYGZvb3RwcmludGpzL3RyYWNlYCB0byBkZWNvbXBvc2UgaXQgYmFjayBpbnRvIGxvY2FsICsgc3ViZmxvd1BhdGguXG4gICAqXG4gICAqIENvcnJlbGF0aW5nIHdpdGggcnVudGltZSBldmVudHM6XG4gICAqICAgLSBTYW1lIGJ1aWxkZXIgKG5vIG1vdW50KSDihpJcbiAgICogICAgIGBldmVudC5zdGFnZUlkID09PSBwYXJzZVJ1bnRpbWVTdGFnZUlkKHJ1bnRpbWUpLnN0YWdlSWRgXG4gICAqICAgLSBUaGlzIGJ1aWxkZXIgbW91bnRlZCBhcyBzdWJmbG93IOKGkiB1c2UgYHNwbGl0U3RhZ2VJZGAgb24gdGhlXG4gICAqICAgICBwcmVmaXhlZCBmb3JtIChvciBgcGFyc2VSdW50aW1lU3RhZ2VJZGAgb24gdGhlIGZ1bGxcbiAgICogICAgIHJ1bnRpbWVTdGFnZUlkKSBiZWZvcmUgY29tcGFyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBub2RlLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTcGVjIG5vZGUgYHR5cGVgLiBMZXRzIHJlY29yZGVycyBicmFuY2ggb24gc3RhZ2UgdnMgZGVjaWRlciB2c1xuICAgKiAgZm9yayB2cyBzdWJmbG93IHdpdGhvdXQgcmUtZGVyaXZpbmcgZnJvbSBvdGhlciBmaWVsZHMuICovXG4gIHJlYWRvbmx5IHR5cGU6IE5vbk51bGxhYmxlPEZsb3dDaGFydFNwZWNbJ3R5cGUnXT47XG4gIC8qKiBUcnVlIGZvciBub2RlcyBhZGRlZCB2aWEgYGFkZFBhdXNhYmxlRnVuY3Rpb24oKWAg4oCUIHVzZWZ1bCBmb3JcbiAgICogIHZpc3VhbGlzZXJzIHRoYXQgd2FudCB0byBtYXJrIHN0YWdlcyB0aGF0IGNhbiBwYXVzZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IGlzUGF1c2FibGU/OiBib29sZWFuO1xuICAvKiogTGl2ZSByZWZlcmVuY2UgdG8gdGhlIGZ1bGwgc3BlYyBub2RlLCBmb3IgaGFuZGxlcnMgdGhhdCB3YW50XG4gICAqICBkZXRhaWxzIGJleW9uZCB0aGUgZGlzY3JpbWluYXRvciBmaWVsZHMgYWJvdmUuIE1VU1QgTk9UIGJlXG4gICAqICBtdXRhdGVkIGJ5IHRoZSBoYW5kbGVyIOKAlCByZWFkb25seSBpcyB0eXBlLWxldmVsIGludGVudDsgbm9cbiAgICogIHJ1bnRpbWUgZnJlZXplLiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgaW4gdGhlIGZpbGUgaGVhZGVyIGZvciB0aGVcbiAgICogIHRydXN0LW1vZGVsIGNhdmVhdHMuICovXG4gIHJlYWRvbmx5IHNwZWM6IEZsb3dDaGFydFNwZWM7XG59XG5cbi8qKiBFZGdlIGtpbmRzIHRoZSBidWlsZGVyIHByb2R1Y2VzIGF0IHN0cnVjdHVyYWwgdGltZS4gTWF0Y2hlcyB0aGVcbiAqICBmb290cHJpbnRqcyBjb250cm9sLWZsb3cgdm9jYWJ1bGFyeSB1c2VkIGF0IHJ1bnRpbWUuXG4gKlxuICogIFdoeSBubyBgc3ViZmxvdy1lbnRyeWAgaGVyZTogc3ViZmxvdyBtb3VudHMgdXNlIHRoZSBsaWZlY3ljbGVcbiAqICBldmVudCBgb25TdWJmbG93TW91bnRlZGAgKG5vdCBhbiBlZGdlIGV2ZW50KS4gSWYgYSBmdXR1cmUgdXNlIGNhc2VcbiAqICBuZWVkcyB0aGUgcGFyZW504oaSc3ViZmxvdy1yb290IGVkZ2UgYXMgYSBkaXN0aW5jdCBraW5kLCBpdCdsbCBiZVxuICogIGFkZGVkIHRoZW4g4oCUIFlBR05JIG5vdyAoUGFuZWwgMywgTDcuMiByZXZpZXcpLiAqL1xuZXhwb3J0IHR5cGUgU3RydWN0dXJlRWRnZUtpbmQgPVxuICB8ICduZXh0JyAvLyBsaW5lYXIgY2hhaW46IHByZXYubmV4dCA9IGN1cnJcbiAgfCAnZm9yay1icmFuY2gnIC8vIGZvcmsgcGFyZW50IOKGkiBwYXJhbGxlbCBjaGlsZFxuICB8ICdkZWNpc2lvbi1icmFuY2gnOyAvLyBkZWNpZGVyIOKGkiBicmFuY2ggY2hpbGRcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25FZGdlQWRkZWRgLiBGaXJlcyB3aGVuZXZlclxuICogdGhlIGJ1aWxkZXIgd2lyZXMgYW4gb3V0Z29pbmcgZWRnZSBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIuIEJvdGhcbiAqIGVuZHBvaW50cyBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgdmlhIGBvblN0YWdlQWRkZWRgIGJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzLlxuICpcbiAqIExvb3AgYmFjay1lZGdlcyBoYXZlIHRoZWlyIE9XTiBldmVudCAoYG9uTG9vcEVkZ2VBZGRlZGApIHNvXG4gKiBjb25zdW1lcnMgY2FuIHRoZW1lIHRoZW0gZGlzdGluY3RseSBhbmQgc28gYnVpbGQtdGltZSBldmVudHMgc3RheVxuICogZnJlZSBvZiB0aGUgcnVudGltZS1vbmx5IGBpdGVyYXRpb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xuICByZWFkb25seSBraW5kOiBTdHJ1Y3R1cmVFZGdlS2luZDtcbiAgLyoqIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGxhYmVsIOKAlCB1c2VkIHRvZGF5IGZvciBkZWNpZGVyIGJyYW5jaFxuICAgKiAga2V5cyAoZS5nLiwgYCdsb3cnYCwgYCdoaWdoJ2AsIGAnaGlnaCAoZGVmYXVsdCknYCkgYW5kIHBhcmFsbGVsXG4gICAqICBicmFuY2ggaWRzLiAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25Mb29wRWRnZUFkZGVkYC4gRmlyZXMgd2hlblxuICogYC5sb29wVG8odGFyZ2V0KWAgaW5zdGFsbHMgYSBiYWNrLWVkZ2UuIERpc3RpbmN0IGZyb21cbiAqIGBvbkVkZ2VBZGRlZGAgc28gY29uc3VtZXJzIGNhbiB0aGVtZSBiYWNrLWVkZ2VzIGRpZmZlcmVudGx5IGFuZFxuICogYmVjYXVzZSBydW50aW1lIGBvbkxvb3BgIGNhcnJpZXMgYGl0ZXJhdGlvbjogbnVtYmVyYCB3aGljaCBoYXMgbm9cbiAqIGJ1aWxkLXRpbWUgbWVhbmluZyDigJQga2VlcGluZyB0aGUgZXZlbnRzIHNlcGFyYXRlZCBhdm9pZHMgZm9yY2luZ1xuICogYW4gYGl0ZXJhdGlvbj86IG51bWJlcmAgbGllIGludG8gdGhlIHN0cnVjdHVyYWwgc2hhcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkRlY2lkZXJDb21wbGV0ZWAuIEZpcmVzXG4gKiB3aGVuIGEgZGVjaWRlciAvIHNlbGVjdG9yIHN1Yi1idWlsZGVyIGNsb3NlcyB2aWEgYC5lbmQoKWAuIEJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzIGV2ZXJ5IGJyYW5jaCBoYXMgYmVlbiBhbm5vdW5jZWQgYW5kIHRoZVxuICogYGRlZmF1bHRCcmFuY2hgIChpZiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYCkgaXMgZmluYWwuIExldHNcbiAqIHJlY29yZGVycyB0cmVhdCB0aGUgZGVjaWRlciBhcyBuby1mdXJ0aGVyLW11dGF0aW9uIGFuZCBzbmFwc2hvdFxuICogaXRzIGJyYW5jaCBsaXN0IGFzIGZpbmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50IHtcbiAgLyoqIERlY2lkZXIgLyBzZWxlY3RvciBzdGFnZSBpZC4gKi9cbiAgcmVhZG9ubHkgZGVjaWRlcjogc3RyaW5nO1xuICAvKiogU3BlYyB0eXBlIChgJ2RlY2lkZXInYCB2cyBgJ3NlbGVjdG9yJ2ApIOKAlCBleHBvc2VkIHNvIGNvbnN1bWVyc1xuICAgKiAgZG9uJ3QgbmVlZCB0byBsb29rIHVwIHRoZSBvcmlnaW5hbCBgb25TdGFnZUFkZGVkYCBldmVudC4gKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJztcbiAgLyoqIEJyYW5jaCBtZW1iZXIgaWRzIGluIGRlY2xhcmF0aW9uIG9yZGVyLiAqL1xuICByZWFkb25seSBicmFuY2hJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBicmFuY2ggaWQgd2hlbiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYDsgdW5kZWZpbmVkIHdoZW5cbiAgICogIG5vIGRlZmF1bHQgaXMgY29uZmlndXJlZCAoZS5nLiwgc2VsZWN0b3JzKS4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJyYW5jaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdWJmbG93TW91bnRlZGAuIEZpcmVzIG9uY2VcbiAqIHBlciBzdWJmbG93IG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YCBhbmRcbiAqIHRoZWlyIGxhenkgdmFyaWFudHMpLlxuICpcbiAqICoqTU9VTlQtT05MWSBzZW1hbnRpY3MqKiDigJQgdGhlIHN1YmZsb3cncyBPV04gc3RydWN0dXJlIGV2ZW50c1xuICogKGV2ZXJ5IGBvblN0YWdlQWRkZWRgIC8gYG9uRWRnZUFkZGVkYCBpbnNpZGUgdGhlIHN1YmZsb3cpIGZpcmVkXG4gKiBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCwgYmVmb3JlIHRoZSBtb3VudC4gUGFyZW50XG4gKiByZWNvcmRlcnMgZG8gTk9UIHJlY2VpdmUgYSByZXBsYXkuIEluc3RlYWQsIHRoaXMgZXZlbnQgZGVsaXZlcnNcbiAqIHRoZSBzdWJmbG93J3MgZnVsbCBzdHJ1Y3R1cmUgdmlhIGBzdWJmbG93U3BlY2AsIGFuZCBjb25zdW1lcnMgY2FuXG4gKiB3YWxrIGl0IHZpYSBgd2Fsa1N1YmZsb3dTcGVjYCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuXG4gKlxuICogVGhpcyBtYXRjaGVzIGBGbG93UmVjb3JkZXIub25TdWJmbG93RW50cnlgIHNlbWFudGljcyBhdCBydW50aW1lXG4gKiAocGFyZW50cyBzZWUgdGhlIGJvdW5kYXJ5LCBub3QgYSByZXBsYXkgb2YgaW50ZXJuYWxzKSBhbmRcbiAqIHByZXNlcnZlcyB0aGUgXCJvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXJcIiBjb252ZW50aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQge1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIHRoZSBwYXJlbnQgYXNzaWduZWQgYXQgbW91bnQuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3ViZmxvdyBuYW1lLiAqL1xuICByZWFkb25seSBzdWJmbG93TmFtZTogc3RyaW5nO1xuICAvKiogTW91bnQgbm9kZSBpZCBpbiB0aGUgcGFyZW50J3MgY2hhcnQuICovXG4gIHJlYWRvbmx5IHJvb3RTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIG1vdW50IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCBzdWJmbG93XG4gICAqICByZXNvbHV0aW9uIHVudGlsIGV4ZWN1dGlvbikuICovXG4gIHJlYWRvbmx5IGlzTGF6eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtb3VudGVkIHN1YmZsb3cncyBjb21wbGV0ZSBzcGVjIOKAlCB0aGUgU0FNRSBPQkpFQ1RcbiAgICogKD09PSByZWZlcmVuY2UgZXF1YWxpdHkpIHJlYWNoYWJsZSB2aWEgYHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlYFxuICAgKiBmb3IgdGhlIEZsb3dDaGFydCB0aGUgY29uc3VtZXIgcGFzc2VkIHRvIGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgIC9cbiAgICogYGFkZFN1YkZsb3dDaGFydGAgLyBgYWRkU3ViRmxvd0NoYXJ0TmV4dGAuXG4gICAqXG4gICAqIFVOREVGSU5FRCBmb3IgbGF6eSBtb3VudHMgYXQgYnVpbGQgdGltZSAoYGlzTGF6eTogdHJ1ZWApIOKAlCB0aGVcbiAgICogc3ViZmxvdydzIHN0cnVjdHVyZSBoYXNuJ3QgYmVlbiByZXNvbHZlZCB5ZXQuIENvbnN1bWVycyB3YWl0aW5nIG9uXG4gICAqIGxhenkgc3ViZmxvd3MgaGFuZGxlIHRoZSBydW50aW1lIGBvblN1YmZsb3dFbnRyeWAgZXZlbnQgaW5zdGVhZC5cbiAgICpcbiAgICogSW1tdXRhYmxlIHBvc3QtYnVpbGQ7IGNvbnN1bWVycyBNVVNUIE5PVCBtdXRhdGUuXG4gICAqXG4gICAqIEBpbnRlcm5hbCBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlYCBpcyBsaWJyYXJ5LWludGVybmFsLlxuICAgKiAgICAgICAgICAgVXNlIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCBmb3IgdGhlXG4gICAqICAgICAgICAgICBzdGFibGUgcHVibGljIGNvbnRyYWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1NwZWM/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG5cbiAgLyoqXG4gICAqIExvY2FsIG1vdW50IGlkIG9mIHRoaXMgc3ViZmxvdyB3aXRoaW4gaXRzIHBhcmVudCDigJQgZXF1YWwgdG9cbiAgICogYHN1YmZsb3dJZGAgZm9yIHRvcC1sZXZlbCBtb3VudHMgKGUuZy4gYCdhdXRoJ2ApLCBjb21wb3NlZFxuICAgKiAoYCdhdXRoL3ZlcmlmeSdgKSBmb3IgbmVzdGVkIG1vdW50cyB3aG9zZSByZWNvcmRlciBpcyBhdHRhY2hlZFxuICAgKiB0byB0aGUgZ3JhbmRwYXJlbnQuIE1hdGNoZXMgcnVudGltZSBgdHJhdmVyc2FsQ29udGV4dC5zdWJmbG93UGF0aGBcbiAgICogc2VtYW50aWNzIOKAlCBORVZFUiBwcmVmaXhlZCB3aXRoIGBfX3Jvb3RfXy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdHJ1Y3R1cmVSZWNvcmRlciBpbnRlcmZhY2Vcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIEFsbCBtZXRob2RzIGFyZSBvcHRpb25hbCDigJQgaW1wbGVtZW50IG9ubHkgdGhlIGhvb2tzIHlvdSBuZWVkLlxuICogSGFuZGxlcnMgZmlyZSBTWU5DSFJPTk9VU0xZIGR1cmluZyBidWlsZGVyIG9wZXJhdGlvbnMgYW5kIGAuYnVpbGQoKWAuXG4gKiBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0IChzZWUgXCJFcnJvciBpc29sYXRpb25cIiBpbiB0aGUgZmlsZVxuICogaGVhZGVyKTsgc3Vic2VxdWVudCBkaXNwYXRjaCBjb250aW51ZXMuXG4gKlxuICogTGlmZWN5Y2xlOiBlYWNoIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCB2aWFcbiAqIEVJVEhFUiB0aGUgYGZsb3dDaGFydCgpYCBvcHRpb25zIGJhZyAoYHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9YClcbiAqIE9SIHRoZSBmbHVlbnQgYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMpYCBjaGFpbiDigJQgc2VlIHRoZSBmaWxlXG4gKiBoZWFkZXIgZm9yIHRoZSB0cmFkZS1vZmZzLiBSZWdpc3RyYXRpb24gYWZ0ZXIgYC5idWlsZCgpYCBpc1xuICogcmVqZWN0ZWQgKGNoYXJ0IGlzIHNlYWxlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlUmVjb3JkZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIg4oCUIHVzZWQgYnkgdGhlIGRpc3BhdGNoZXIgdG8gc2NvcGUgZXJyb3JcbiAgICogbWVzc2FnZXMgYW5kIHRvIHN1cHBvcnQgYGRldGFjaChpZClgIGxvb2t1cC5cbiAgICpcbiAgICogQ29udmVudGlvbiAobWF0Y2hlcyBgRmxvd1JlY29yZGVyLmlkYCBmcm9tIENMQVVERS5tZCk6XG4gICAqICAgLSBkb21haW4tcHJlZml4ZWQga2ViYWItY2FzZSAoYCdsZW5zLXN0cnVjdHVyZSdgLFxuICAgKiAgICAgYCdhZ2VudGZvb3RwcmludC1jb21wb3NpdGlvbidgLCBgJ3RyYWNlLWV4cGxhaW5hYmxlJ2ApXG4gICAqICAgLSBzYW1lIGlkIOKGkiBtdWx0aXBsZSByZWNvcmRlcnMgY29leGlzdCAoTk9UIGRlZHVwbGljYXRlZCBieVxuICAgKiAgICAgaWQ7IHRoZSBkaXNwYXRjaGVyIGZpcmVzIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIHJlZ2FyZGxlc3MpXG4gICAqICAgLSBgZGV0YWNoKGlkKWAgcmVtb3ZlcyBFVkVSWSByZWNvcmRlciB3aXRoIHRoYXQgaWQg4oCUIGJlXG4gICAqICAgICBpbnRlbnRpb25hbCBhYm91dCByZXVzZSBpZiB5b3UgcmVseSBvbiBzZWxlY3RpdmUgZGV0YWNoXG4gICAqXG4gICAqIENob29zZSBhIHN0YWJsZSBpZCBhdCBtb2R1bGUgbG9hZCBhbmQgZG9uJ3QgcmFuZG9taXNlIGl0IGFjcm9zc1xuICAgKiBydW5zIOKAlCBpdCBsYW5kcyBpbiBgU3RydWN0dXJlQnVpbGRFcnJvci5yZWNvcmRlcklkYCBzbyBkZWJ1Z1xuICAgKiBvdXRwdXQgaXMgZ3JlcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBvblN0YWdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkVkZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25Mb29wRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25EZWNpZGVyQ29tcGxldGU/KGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQ7XG4gIG9uU3ViZmxvd01vdW50ZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50KTogdm9pZDtcbn1cbiJdfQ==
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EySkciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyIOKAlCBwYXNzaXZlIG9ic2VydmVyIG9mIEJVSUxELVRJTUUgY2hhcnQgY29uc3RydWN0aW9uIGV2ZW50cy5cbiAqXG4gKiBUaGUgYnVpbGQtdGltZSB0d2luIG9mIGBGbG93UmVjb3JkZXJgLiBXaGVyZSBgRmxvd1JlY29yZGVyYCBvYnNlcnZlc1xuICogUlVOVElNRSBjb250cm9sLWZsb3cgdHJhbnNpdGlvbnMgKHBlci1leGVjdXRpb24gYHJ1bnRpbWVTdGFnZUlkYCxcbiAqIGl0ZXJhdGlvbiBjb3VudHMsIGVycm9ycywgcGF1c2VzKSwgYFN0cnVjdHVyZVJlY29yZGVyYCBvYnNlcnZlc1xuICogU1RBVElDIGNoYXJ0IHNoYXBlIGFzIGl0J3MgYXNzZW1ibGVkIGJ5IHRoZSBidWlsZGVyIOKAlCBldmVyeSBzcGVjXG4gKiBub2RlIGFkZGVkLCBldmVyeSBvdXRnb2luZyBlZGdlIHdpcmVkLCBldmVyeSBkZWNpZGVyIGNsb3NlZC5cbiAqXG4gKiBXaHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmVcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICBCdWlsZCBhbmQgcnVudGltZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgSU5WQVJJQU5UUywgbm90IGp1c3RcbiAqICAgZGlmZmVyZW50IHRpbWluZzpcbiAqXG4gKiAgICAgLSBSdW50aW1lIGV2ZW50cyBjYXJyeSBgcnVudGltZVN0YWdlSWRgIChgW3N1YmZsb3dQYXRoL11zdGFnZUlkI05gKSxcbiAqICAgICAgIGBpdGVyYXRpb25gLCBgdHJhdmVyc2FsQ29udGV4dGAg4oCUIGxvYWQtYmVhcmluZyBmb3IgdGltZS10cmF2ZWxcbiAqICAgICAgIFVJcywgY29tbWl0LWxvZyBpbmRpY2VzLCBhbmQgYFNlcXVlbmNlU3RvcmU8VD5gIGNvbnN1bWVycy5cbiAqICAgICAgIE5PTkUgb2YgdGhlc2UgZXhpc3QgYXQgYnVpbGQgdGltZS5cbiAqXG4gKiAgICAgLSBCdWlsZCBldmVudHMgY2Fycnkgb25seSBgc3RhZ2VJZGAgKyBzdHJ1Y3R1cmFsIGZpZWxkcy4gTm9cbiAqICAgICAgIGV4ZWN1dGlvbiBpbmRleCwgbm8gaXRlcmF0aW9uLCBubyBzbmFwc2hvdC5cbiAqXG4gKiAgICAgLSBTb21lIGV2ZW50cyBoYXZlIG5vIGFuYWxvZyBhY3Jvc3MgcGhhc2VzOiBgb25QYXVzZWAgL1xuICogICAgICAgYG9uUmVzdW1lYCAvIGBvbkVycm9yYCAvIGBvblJ1blN0YXJ0YCBhcmUgcnVudGltZS1vbmx5O1xuICogICAgICAgYG9uRGVjaWRlckNvbXBsZXRlYCAvIGBvblN0YWdlQWRkZWRgIGFyZSBidWlsZC1vbmx5LlxuICpcbiAqICAgQSBzaW5nbGUgYEZsb3dSZWNvcmRlcmAgd2l0aCBgcGhhc2U6ICdzdGF0aWMnIHwgJ2R5bmFtaWMnYFxuICogICBkaXNjcmltaW5hdG9yIHdvdWxkIGZvcmNlIGV2ZXJ5IGNvbnN1bWVyIHRvIHdyaXRlXG4gKiAgIGBpZiAoZS5waGFzZSA9PT0gJ3N0YXRpYycpIC4uLmAgYnJhbmNoZXMgYW5kIHdvdWxkIGVyYXNlIHRoZVxuICogICBsZWFzdC1wcml2aWxlZ2UgYm91bmRhcnkgKGEgc3RhdGljLW9ubHkgY29uc3VtZXIgc2hvdWxkIE5PVFxuICogICBhY2NpZGVudGFsbHkgb2JzZXJ2ZSBydW50aW1lIGRhdGEg4oCUIGUuZy4sIGEgcHVibGljIGRvY3Mgc2l0ZVxuICogICByZW5kZXJpbmcgY2hhcnQgdG9wb2xvZ3kgbXVzdCBub3Qgc2VlIHNjb3BlIHZhbHVlcykuXG4gKlxuICogICBUd28gaW50ZXJmYWNlcywgc2FtZSBtZW50YWwgbW9kZWwsIGNsZWFuIHNlcGFyYXRpb24uIFR3b1xuICogICByZWdpc3RyYXRpb24gc2l0ZXMgc2hpcCB0b2RheSAocGljayB3aGljaGV2ZXIgZml0cyB5b3VyIGNhbGxcbiAqICAgc2l0ZSk6XG4gKlxuICogICAgIDEuICoqT3B0aW9ucy1iYWcqKiAocHJlZmVycmVkIHdoZW4gdGhlIHJlY29yZGVyIHNldCBpcyBrbm93blxuICogICAgICAgIGF0IGNvbnN0cnVjdGlvbiB0aW1lIOKAlCByZWdpc3RlcnMgQkVGT1JFIGBzdGFydCgpYCBzbyBldmVuXG4gKiAgICAgICAgdGhlIHNlZWQgZXZlbnQgZmlyZXMgdGhyb3VnaCB0aGUgbm9ybWFsIGRpc3BhdGNoZXIgZmFuLW91dCk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7IHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10gfSlcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgICAyLiAqKkZsdWVudCoqIChwcmVmZXJyZWQgd2hlbiBhdHRhY2ggaXMgY29uZGl0aW9uYWwsIGxhdGUsIG9yXG4gKiAgICAgICAgaW4gYSBjaGFpbiBidWlsZGVyIOKAlCB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGFcbiAqICAgICAgICBvbmUtdGltZSBzZWVkIHJlcGxheSBzbyBpdCBvYnNlcnZlcyB0aGUgcm9vdCBzdGFnZSk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAgICAgICAgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgQm90aCBkZWxpdmVyIHRoZSBzYW1lIGV2ZW50IHN0cmVhbSB0byB0aGUgc2FtZSByZWNvcmRlci4gU2VlIHRoZVxuICogICBgQGV4YW1wbGVgIGJsb2NrIGJlbG93IGZvciBhIGZ1bGx5LWZsZXNoZWQtb3V0IGltcGxlbWVudGF0aW9uLlxuICpcbiAqIExpZmVjeWNsZSArIG9yZGVyaW5nIGludmFyaWFudHNcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEZpcmVzIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgY2hhaW4gY2FsbHMgKGFuZCBkdXJpbmdcbiAqICAgICBgLmJ1aWxkKClgIGZvciB0aGUgdGVybWluYWwgbm9kZSkgYXQgdGhlIG5hdHVyYWwgbW9tZW50IGVhY2hcbiAqICAgICBzcGVjIG11dGF0aW9uIGNvbXBsZXRlcy5cbiAqICAgLSBgb25TdGFnZUFkZGVkKEEpYCBhbmQgYG9uU3RhZ2VBZGRlZChCKWAgZmlyZSBCRUZPUkUgYW55XG4gKiAgICAgYG9uRWRnZUFkZGVkKHtmcm9tOiBBLCB0bzogQn0pYCDigJQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uXG4gKiAgICAgaGFwcGVucyBiZWZvcmUgZWRnZSB3aXJpbmcuXG4gKiAgIC0gYG9uRGVjaWRlckNvbXBsZXRlKEQpYCBmaXJlcyBhdCBzdWItYnVpbGRlciBgLmVuZCgpYCB0aW1lLCBBRlRFUlxuICogICAgIGV2ZXJ5IGNoaWxkJ3MgYG9uU3RhZ2VBZGRlZGAgYW5kIGV2ZXJ5IGBvbkVkZ2VBZGRlZCh7ZnJvbTogRCxcbiAqICAgICB0bzogY2hpbGR9KWAuIE1hcmtzIHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24uXG4gKiAgIC0gYG9uU3ViZmxvd01vdW50ZWQoe3N1YmZsb3dJZH0pYCBmaXJlcyBvbmNlIHBlciBtb3VudC5cbiAqICAgICAqKk1PVU5ULU9OTFkqKjogcGFyZW50IHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheSBvZlxuICogICAgIHRoZSBzdWJmbG93J3Mgb3duIGludGVybmFsIHN0cnVjdHVyZSBldmVudHMgKHRob3NlIGZpcmVkXG4gKiAgICAgZHVyaW5nIHRoZSBzdWJmbG93J3Mgb3duIGAuYnVpbGQoKWApLiBNYXRjaGVzIHRoZSBydW50aW1lXG4gKiAgICAgYG9uU3ViZmxvd0VudHJ5YCBzZW1hbnRpY3Mg4oCUIGNvbXBvc2l0aW9uIG92ZXIgcmVwbGF5LlxuICpcbiAqIEVycm9yIGlzb2xhdGlvbiAobWF0Y2hlcyBGbG93UmVjb3JkZXIgY29udHJhY3QpXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAgLSBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0LCBsb2dnZWQgdmlhIGBpc0Rldk1vZGUoKWAgd2FybmluZyxcbiAqICAgICBhbmQgYWNjdW11bGF0ZWQgb24gYGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKWAgZm9yXG4gKiAgICAgcG9zdC1ob2MgaW5zcGVjdGlvbi5cbiAqICAgLSBTdWJzZXF1ZW50IHJlY29yZGVycyArIHN1YnNlcXVlbnQgZXZlbnRzIGZpcmUgbm9ybWFsbHk7IG9uZVxuICogICAgIG1pc2JlaGF2aW5nIHJlY29yZGVyIGNhbm5vdCBUSFJPVyBpdHMgd2F5IGludG8gYmxvY2tpbmdcbiAqICAgICBjb25zdHJ1Y3Rpb24uXG4gKiAgIC0gVGhlIGVycm9yc1tdIGFjY3VtdWxhdG9yIGlzIHNvZnQtY2FwcGVkICh+MTAwIGVudHJpZXMpIHdpdGggYVxuICogICAgIGBfX3RydW5jYXRlZF9fYCBzZW50aW5lbCByZWNvcmQgb25jZSB0aGUgY2FwIGlzIGhpdCwgdG8gcHJldmVudFxuICogICAgIHVuYm91bmRlZCBncm93dGggb24gY2hhdHR5IGJyb2tlbiByZWNvcmRlcnMuXG4gKiAgIC0gTm90ZTogdGhyb3cgaXNvbGF0aW9uIGRvZXMgTk9UIGRlZmVuZCBhZ2FpbnN0IGEgaGFuZGxlciB0aGF0XG4gKiAgICAgc3VjY2VlZHMgYXQgcnVudGltZSBidXQgbXV0YXRlcyBgZXZlbnQuc3BlY2AgdG8gY29ycnVwdCB0aGVcbiAqICAgICBjaGFydC4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGJlbG93LlxuICpcbiAqIFNwZWMgbXV0YXRpb24g4oCUIHJlYWRvbmx5LWJ5LWNvbnRyYWN0IChOT1QgcnVudGltZS1lbmZvcmNlZClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEV2ZW50IHBheWxvYWRzIHBhc3Mgc3BlYyByZWZlcmVuY2VzIHdoZXJlIHVzZWZ1bCAoZS5nLiwgYHNwZWNgXG4gKiAgICAgb24gYG9uU3RhZ2VBZGRlZGApLiBFdmVyeSBmaWVsZCBvbiBldmVyeSBldmVudCBwYXlsb2FkIGlzXG4gKiAgICAgbWFya2VkIGByZWFkb25seWAgaW4gVHlwZVNjcmlwdCDigJQgdGhlIHR5cGUgc3lzdGVtIHNpZ25hbHNcbiAqICAgICBjb25zdW1lciBpbnRlbnQgYXQgYXV0aG9yIHRpbWUuXG4gKiAgIC0gVGhlcmUgaXMgTk8gcnVudGltZSBmcmVlemUuIFRoZSBidWlsZGVyIGZpcmVzIGBvblN0YWdlQWRkZWRgXG4gKiAgICAgSU1NRURJQVRFTFkgd2hlbiBhIHNwZWMgbm9kZSBpcyBhZGRlZCwgQkVGT1JFIHRoZSBidWlsZGVyXG4gKiAgICAgd2lyZXMgdGhhdCBub2RlJ3MgYC5uZXh0YC9gLmNoaWxkcmVuYC9gLmxvb3BUYXJnZXRgIGluIHRoZVxuICogICAgIHN1YnNlcXVlbnQgYGFkZFhgIGNhbGwuIEZyZWV6aW5nIGhlcmUgd291bGQgYnJlYWsgdGhlXG4gKiAgICAgYnVpbGRlcidzIG93biBzdWJzZXF1ZW50IG11dGF0aW9uLlxuICogICAtIEhhbmRsZXIgbXV0YXRpb24gb2YgYGV2ZW50LnNwZWNgIGlzIERPQ1VNRU5URUQgVU5ERUZJTkVEXG4gKiAgICAgQkVIQVZJT1Ig4oCUIGl0IHdpbGwgc3VjY2VlZCBhdCBydW50aW1lLCBidXQgaXMgbm90IHN1cHBvcnRlZFxuICogICAgIGFuZCBkb3duc3RyZWFtIGNvbnN1bWVycyBtYXkgYnJlYWsuIFNwZWNpZmljYWxseSwgbXV0YXRpbmdcbiAqICAgICBgZXZlbnQuc3BlYy5mbmAsIGBldmVudC5zcGVjLmlkYCwgb3IgYGV2ZW50LnNwZWMuY2hpbGRyZW5gXG4gKiAgICAgY2FuIGNvcnJ1cHQgc3Vic2VxdWVudCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBjaGFydC5cbiAqICAgLSAqKlRydXN0IG1vZGVsKio6IGF0dGFjaCBPTkxZIHJlY29yZGVycyBmcm9tIHRydXN0ZWQgY29kZSBwYXRocy5cbiAqICAgICBBIGhvc3RpbGUgb3IgYnVnZ3kgcmVjb3JkZXIgY2FuIGVmZmVjdGl2ZWx5IHN1YnN0aXR1dGUgc3RhZ2VcbiAqICAgICBmdW5jdGlvbnMgb3IgcmV3aXJlIHRoZSBjaGFydCBzdHJ1Y3R1cmUuIFRoZSBgcmVhZG9ubHlgXG4gKiAgICAgbWFya2VycyBjYW5ub3QgZGVmZW5kIGFnYWluc3QgaW50ZW50aW9uYWwgbXV0YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjbGFzcyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyIGltcGxlbWVudHMgU3RydWN0dXJlUmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICd0cmFjZS1zdGF0aWMnO1xuICogICBub2RlczogWHlmbG93Tm9kZVtdID0gW107XG4gKiAgIGVkZ2VzOiBYeWZsb3dFZGdlW10gPSBbXTtcbiAqXG4gKiAgIG9uU3RhZ2VBZGRlZChlKSB7XG4gKiAgICAgLy8gTm9kZSByb2xlOiAnc3RhZ2UnIGlzIHRoZSBpbml0aWFsIHR5cGUuIElmIG91dGdvaW5nIGVkZ2VzXG4gKiAgICAgLy8gYXJyaXZlIHdpdGgga2luZCAnZm9yay1icmFuY2gnIC8gJ2RlY2lzaW9uLWJyYW5jaCcgdGhlIG5vZGVcbiAqICAgICAvLyBpcyBmdW5jdGlvbmluZyBhcyBhIGZvcmsvZGVjaWRlciDigJQgZGVyaXZlIHRoZSB2aXN1YWwgc3R5bGVcbiAqICAgICAvLyBmcm9tIHRob3NlIGVkZ2VzLCBub3QgZnJvbSBgZS50eXBlYCBhbG9uZS5cbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdGFnZUlkLCB0eXBlOiAnbGVuc1N0YWdlJywgZGF0YTogeyBsYWJlbDogZS5uYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25FZGdlQWRkZWQoZSkge1xuICogICAgIHRoaXMuZWRnZXMucHVzaCh7IGlkOiBgJHtlLmZyb219LT4ke2UudG99YCwgc291cmNlOiBlLmZyb20sIHRhcmdldDogZS50byB9KTtcbiAqICAgfVxuICogICBvblN1YmZsb3dNb3VudGVkKGUpIHtcbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdWJmbG93SWQsIHR5cGU6ICdzdWJmbG93JywgZGF0YTogeyBsYWJlbDogZS5zdWJmbG93TmFtZSB9IH0pO1xuICogICB9XG4gKiAgIG9uRGVjaWRlckNvbXBsZXRlKGUpIHtcbiAqICAgICAvLyBPcHRpb25hbDogZmluYWxpemUgbm9kZSBzdHlsaW5nIG5vdyB0aGF0IGJyYW5jaCBsaXN0IGlzIHNlYWxlZC5cbiAqICAgfVxuICogfVxuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQSDigJQgb3B0aW9ucy1iYWcgKHByZWZlcnJlZCB3aGVuIHJlY29yZGVyc1xuICogLy8gYXJlIGtub3duIHVwIGZyb250OyBhdHRhY2hlcyBCRUZPUkUgdGhlIHNlZWQgZXZlbnQgZmlyZXMpOlxuICogY29uc3QgcmVjID0gbmV3IFRyYWNlU3RydWN0dXJlUmVjb3JkZXIoKTtcbiAqIGNvbnN0IGJ1aWxkZXIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7XG4gKiAgIHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10sXG4gKiB9KS5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKTtcbiAqIGNvbnN0IGNoYXJ0ID0gYnVpbGRlci5idWlsZCgpO1xuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQiDigJQgZmx1ZW50IGNoYWluIChwcmVmZXJyZWQgZm9yIGNvbmRpdGlvbmFsXG4gKiAvLyBvciBsYXRlIGF0dGFjaDsgdGhlIGp1c3QtYXR0YWNoZWQgcmVjb3JkZXIgZ2V0cyBhIHNlZWQgcmVwbGF5KTpcbiAqIGNvbnN0IHJlYzIgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlcjIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjMilcbiAqICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICpcbiAqIC8vIEluc3BlY3QgYW55IHJlY29yZGVyIGVycm9ycyAoY2FsbCBvbiB0aGUgQlVJTERFUiwgbm90IHRoZSBjaGFydCk6XG4gKiBjb25zdCBlcnJvcnMgPSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCk7XG4gKlxuICogPFJlYWN0RmxvdyBub2Rlcz17cmVjLm5vZGVzfSBlZGdlcz17cmVjLmVkZ2VzfSAvPlxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjLCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcGF5bG9hZCB0eXBlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VBZGRlZGAuIEZpcmVzIGZvciBldmVyeVxuICogc3BlYyBub2RlIGFkZGVkIHRvIHRoZSBjaGFydCwgaW5jbHVkaW5nIHRoZSBzZWVkIChhZGRlZCB2aWFcbiAqIGBmbG93Q2hhcnQoKWAgZmFjdG9yeSkgYW5kIHN1YmZsb3cgbW91bnQgbm9kZXMuIEV4Y2x1ZGVzIHN5bnRoZXRpY1xuICogbG9vcC1yZWZlcmVuY2Ugbm9kZXMgKHRob3NlIGNhcnJ5IGBpc0xvb3BSZWZlcmVuY2U6IHRydWVgIG9uIHRoZVxuICogc3BlYzsgY29uc3VtZXJzIHNlZSB0aGVtIHZpYSB0aGUgc2VwYXJhdGUgYG9uTG9vcEVkZ2VBZGRlZGAgZXZlbnRcbiAqIGluc3RlYWQgb2YgYXMgZnJlc2ggc3RhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgbm9kZS4gQVQgRVZFTlQgRklSRSBUSU1FIHRoaXMgaXMgdGhlXG4gICAqIGJ1aWxkZXIncyBMT0NBTCBmb3JtIChubyBzdWJmbG93IHByZWZpeCDigJQgdGhlIHByZWZpeCBpcyBhcHBsaWVkXG4gICAqIGxhdGVyIGJ5IGBfcHJlZml4Tm9kZVRyZWVgIHdoZW4gdGhpcyBidWlsZGVyIGlzIG1vdW50ZWQgYXMgYVxuICAgKiBzdWJmbG93IGludG8gYSBwYXJlbnQpLlxuICAgKlxuICAgKiBOb3RlOiBgc3BlYy5pZGAgaXMgYSBMSVZFIHJlZmVyZW5jZS4gSWYgeW91IHJlYWQgaXQgQUZURVIgdGhpc1xuICAgKiBjaGFydCBoYXMgYmVlbiBtb3VudGVkIGFzIGEgc3ViZmxvdywgaXQgbWF5IGhhdmUgYmVlbiByZXdyaXR0ZW5cbiAgICogdG8gdGhlIEZVTEwgcHJlZml4ZWQgZm9ybS4gVXNlIGBzcGxpdFN0YWdlSWQoc3BlYy5pZClgIGZyb21cbiAgICogYGZvb3RwcmludGpzL3RyYWNlYCB0byBkZWNvbXBvc2UgaXQgYmFjayBpbnRvIGxvY2FsICsgc3ViZmxvd1BhdGguXG4gICAqXG4gICAqIENvcnJlbGF0aW5nIHdpdGggcnVudGltZSBldmVudHM6XG4gICAqICAgLSBTYW1lIGJ1aWxkZXIgKG5vIG1vdW50KSDihpJcbiAgICogICAgIGBldmVudC5zdGFnZUlkID09PSBwYXJzZVJ1bnRpbWVTdGFnZUlkKHJ1bnRpbWUpLnN0YWdlSWRgXG4gICAqICAgLSBUaGlzIGJ1aWxkZXIgbW91bnRlZCBhcyBzdWJmbG93IOKGkiB1c2UgYHNwbGl0U3RhZ2VJZGAgb24gdGhlXG4gICAqICAgICBwcmVmaXhlZCBmb3JtIChvciBgcGFyc2VSdW50aW1lU3RhZ2VJZGAgb24gdGhlIGZ1bGxcbiAgICogICAgIHJ1bnRpbWVTdGFnZUlkKSBiZWZvcmUgY29tcGFyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBub2RlLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTcGVjIG5vZGUgYHR5cGVgLiBMZXRzIHJlY29yZGVycyBicmFuY2ggb24gc3RhZ2UgdnMgZGVjaWRlciB2c1xuICAgKiAgZm9yayB2cyBzdWJmbG93IHdpdGhvdXQgcmUtZGVyaXZpbmcgZnJvbSBvdGhlciBmaWVsZHMuICovXG4gIHJlYWRvbmx5IHR5cGU6IE5vbk51bGxhYmxlPEZsb3dDaGFydFNwZWNbJ3R5cGUnXT47XG4gIC8qKiBUcnVlIGZvciBub2RlcyBhZGRlZCB2aWEgYGFkZFBhdXNhYmxlRnVuY3Rpb24oKWAg4oCUIHVzZWZ1bCBmb3JcbiAgICogIHZpc3VhbGlzZXJzIHRoYXQgd2FudCB0byBtYXJrIHN0YWdlcyB0aGF0IGNhbiBwYXVzZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IGlzUGF1c2FibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIG5hbWVzIGRlY2xhcmVkIG9uIHRoZSBzdGFnZSBBVCBFVkVOVCBGSVJFIFRJTUUgKGBvcHRpb25zLnRhZ3NgXG4gICAqIGxhbmRzIGJlZm9yZSB0aGlzIGV2ZW50IGZpcmVzOyBhYnNlbnQgd2hlbiBub25lIOKAlCB0aGUgXCJhYnNlbnQgd2hlblxuICAgKiBlbXB0eVwiIGxhdyB0aGUgY29tbWl0IGJ1bmRsZSBrZWVwcykuIE5hbWVzIGRlY2xhcmVkIGFmdGVyd2FyZHNcbiAgICogdGhyb3VnaCB0aGUgYC50YWcoLi4uKWAgY3Vyc29yIGRvb3IgYXJyaXZlIGFzIHRoZWlyIG93blxuICAgKiB7QGxpbmsgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZVRhZ2dlZH0gZXZlbnQg4oCUIGEgcmVjb3JkZXIgdGhhdFxuICAgKiBjb3BpZXMgZmllbGRzIGhlcmUgaW5zdGVhZCBvZiBob2xkaW5nIGBzcGVjYCB3b3VsZCBvdGhlcndpc2VcbiAgICogbmV2ZXIgbGVhcm4gb2YgdGhlbSAoOS4yNC4wKS5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIExpdmUgcmVmZXJlbmNlIHRvIHRoZSBmdWxsIHNwZWMgbm9kZSwgZm9yIGhhbmRsZXJzIHRoYXQgd2FudFxuICAgKiAgZGV0YWlscyBiZXlvbmQgdGhlIGRpc2NyaW1pbmF0b3IgZmllbGRzIGFib3ZlLiBNVVNUIE5PVCBiZVxuICAgKiAgbXV0YXRlZCBieSB0aGUgaGFuZGxlciDigJQgcmVhZG9ubHkgaXMgdHlwZS1sZXZlbCBpbnRlbnQ7IG5vXG4gICAqICBydW50aW1lIGZyZWV6ZS4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGluIHRoZSBmaWxlIGhlYWRlciBmb3IgdGhlXG4gICAqICB0cnVzdC1tb2RlbCBjYXZlYXRzLiAqL1xuICByZWFkb25seSBzcGVjOiBGbG93Q2hhcnRTcGVjO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN0YWdlVGFnZ2VkYC4gRmlyZXMgd2hlbiBuYW1lc1xuICogbGFuZCBvbiBhIHN0YWdlIEFGVEVSIGl0cyBgb25TdGFnZUFkZGVkYCBhbHJlYWR5IGZpcmVkIOKAlCB0aGVcbiAqIGAudGFnKC4uLilgIGN1cnNvciBkb29yIChgZmxvd0NoYXJ0KC4uLikuYWRkRnVuY3Rpb24oLi4uKS50YWcoJ2EnKWApLlxuICogTmFtZXMgZGVjbGFyZWQgaW4gdGhlIHNhbWUgY2FsbCBhcyB0aGUgc3RhZ2UgKGBvcHRpb25zLnRhZ3NgLFxuICogYFN1YmZsb3dNb3VudE9wdGlvbnMudGFnc2ApIHJpZGUgYFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudC50YWdzYCBhbmRcbiAqIGRvIE5PVCBmaXJlIHRoaXM6IG9uZSBkZWNsYXJhdGlvbiwgb25lIGV2ZW50LiBgdGFnc2AgaXMgdGhlIENPTVBMRVRFXG4gKiBsaXN0IG9uIHRoZSBzdGFnZSBhZnRlciB0aGUgZG9vciDigJQgdGhlIGJ1aWxkZXIgcmVmdXNlcyBhIHNlY29uZFxuICogZGVjbGFyYXRpb24gb24gdGhlIHNhbWUgc3RhZ2UsIHNvIGl0IGlzIGFsc28gdGhlIG9ubHkgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQge1xuICAvKiogVGhlIGJ1aWxkZXIncyBMT0NBTCBzdGFnZSBpZCAoc2VlIGBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQuc3RhZ2VJZGApLiAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIEV2ZXJ5IG5hbWUgbm93IGRlY2xhcmVkIG9uIHRoZSBzdGFnZS4gKi9cbiAgcmVhZG9ubHkgdGFnczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBMaXZlIHJlZmVyZW5jZSB0byB0aGUgc3BlYyBub2RlIOKAlCBzYW1lIGNhdmVhdHMgYXMgb24gYG9uU3RhZ2VBZGRlZGAuICovXG4gIHJlYWRvbmx5IHNwZWM6IEZsb3dDaGFydFNwZWM7XG59XG5cbi8qKiBFZGdlIGtpbmRzIHRoZSBidWlsZGVyIHByb2R1Y2VzIGF0IHN0cnVjdHVyYWwgdGltZS4gTWF0Y2hlcyB0aGVcbiAqICBmb290cHJpbnRqcyBjb250cm9sLWZsb3cgdm9jYWJ1bGFyeSB1c2VkIGF0IHJ1bnRpbWUuXG4gKlxuICogIFdoeSBubyBgc3ViZmxvdy1lbnRyeWAgaGVyZTogc3ViZmxvdyBtb3VudHMgdXNlIHRoZSBsaWZlY3ljbGVcbiAqICBldmVudCBgb25TdWJmbG93TW91bnRlZGAgKG5vdCBhbiBlZGdlIGV2ZW50KS4gSWYgYSBmdXR1cmUgdXNlIGNhc2VcbiAqICBuZWVkcyB0aGUgcGFyZW504oaSc3ViZmxvdy1yb290IGVkZ2UgYXMgYSBkaXN0aW5jdCBraW5kLCBpdCdsbCBiZVxuICogIGFkZGVkIHRoZW4g4oCUIFlBR05JIG5vdyAoUGFuZWwgMywgTDcuMiByZXZpZXcpLiAqL1xuZXhwb3J0IHR5cGUgU3RydWN0dXJlRWRnZUtpbmQgPVxuICB8ICduZXh0JyAvLyBsaW5lYXIgY2hhaW46IHByZXYubmV4dCA9IGN1cnJcbiAgfCAnZm9yay1icmFuY2gnIC8vIGZvcmsgcGFyZW50IOKGkiBwYXJhbGxlbCBjaGlsZFxuICB8ICdkZWNpc2lvbi1icmFuY2gnOyAvLyBkZWNpZGVyIOKGkiBicmFuY2ggY2hpbGRcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25FZGdlQWRkZWRgLiBGaXJlcyB3aGVuZXZlclxuICogdGhlIGJ1aWxkZXIgd2lyZXMgYW4gb3V0Z29pbmcgZWRnZSBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIuIEJvdGhcbiAqIGVuZHBvaW50cyBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgdmlhIGBvblN0YWdlQWRkZWRgIGJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzLlxuICpcbiAqIExvb3AgYmFjay1lZGdlcyBoYXZlIHRoZWlyIE9XTiBldmVudCAoYG9uTG9vcEVkZ2VBZGRlZGApIHNvXG4gKiBjb25zdW1lcnMgY2FuIHRoZW1lIHRoZW0gZGlzdGluY3RseSBhbmQgc28gYnVpbGQtdGltZSBldmVudHMgc3RheVxuICogZnJlZSBvZiB0aGUgcnVudGltZS1vbmx5IGBpdGVyYXRpb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xuICByZWFkb25seSBraW5kOiBTdHJ1Y3R1cmVFZGdlS2luZDtcbiAgLyoqIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGxhYmVsIOKAlCB1c2VkIHRvZGF5IGZvciBkZWNpZGVyIGJyYW5jaFxuICAgKiAga2V5cyAoZS5nLiwgYCdsb3cnYCwgYCdoaWdoJ2AsIGAnaGlnaCAoZGVmYXVsdCknYCkgYW5kIHBhcmFsbGVsXG4gICAqICBicmFuY2ggaWRzLiAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25Mb29wRWRnZUFkZGVkYC4gRmlyZXMgd2hlblxuICogYC5sb29wVG8odGFyZ2V0KWAgaW5zdGFsbHMgYSBiYWNrLWVkZ2UuIERpc3RpbmN0IGZyb21cbiAqIGBvbkVkZ2VBZGRlZGAgc28gY29uc3VtZXJzIGNhbiB0aGVtZSBiYWNrLWVkZ2VzIGRpZmZlcmVudGx5IGFuZFxuICogYmVjYXVzZSBydW50aW1lIGBvbkxvb3BgIGNhcnJpZXMgYGl0ZXJhdGlvbjogbnVtYmVyYCB3aGljaCBoYXMgbm9cbiAqIGJ1aWxkLXRpbWUgbWVhbmluZyDigJQga2VlcGluZyB0aGUgZXZlbnRzIHNlcGFyYXRlZCBhdm9pZHMgZm9yY2luZ1xuICogYW4gYGl0ZXJhdGlvbj86IG51bWJlcmAgbGllIGludG8gdGhlIHN0cnVjdHVyYWwgc2hhcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkRlY2lkZXJDb21wbGV0ZWAuIEZpcmVzXG4gKiB3aGVuIGEgZGVjaWRlciAvIHNlbGVjdG9yIHN1Yi1idWlsZGVyIGNsb3NlcyB2aWEgYC5lbmQoKWAuIEJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzIGV2ZXJ5IGJyYW5jaCBoYXMgYmVlbiBhbm5vdW5jZWQgYW5kIHRoZVxuICogYGRlZmF1bHRCcmFuY2hgIChpZiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYCkgaXMgZmluYWwuIExldHNcbiAqIHJlY29yZGVycyB0cmVhdCB0aGUgZGVjaWRlciBhcyBuby1mdXJ0aGVyLW11dGF0aW9uIGFuZCBzbmFwc2hvdFxuICogaXRzIGJyYW5jaCBsaXN0IGFzIGZpbmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50IHtcbiAgLyoqIERlY2lkZXIgLyBzZWxlY3RvciBzdGFnZSBpZC4gKi9cbiAgcmVhZG9ubHkgZGVjaWRlcjogc3RyaW5nO1xuICAvKiogU3BlYyB0eXBlIChgJ2RlY2lkZXInYCB2cyBgJ3NlbGVjdG9yJ2ApIOKAlCBleHBvc2VkIHNvIGNvbnN1bWVyc1xuICAgKiAgZG9uJ3QgbmVlZCB0byBsb29rIHVwIHRoZSBvcmlnaW5hbCBgb25TdGFnZUFkZGVkYCBldmVudC4gKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJztcbiAgLyoqIEJyYW5jaCBtZW1iZXIgaWRzIGluIGRlY2xhcmF0aW9uIG9yZGVyLiAqL1xuICByZWFkb25seSBicmFuY2hJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBicmFuY2ggaWQgd2hlbiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYDsgdW5kZWZpbmVkIHdoZW5cbiAgICogIG5vIGRlZmF1bHQgaXMgY29uZmlndXJlZCAoZS5nLiwgc2VsZWN0b3JzKS4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJyYW5jaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdWJmbG93TW91bnRlZGAuIEZpcmVzIG9uY2VcbiAqIHBlciBzdWJmbG93IG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YCBhbmRcbiAqIHRoZWlyIGxhenkgdmFyaWFudHMpLlxuICpcbiAqICoqTU9VTlQtT05MWSBzZW1hbnRpY3MqKiDigJQgdGhlIHN1YmZsb3cncyBPV04gc3RydWN0dXJlIGV2ZW50c1xuICogKGV2ZXJ5IGBvblN0YWdlQWRkZWRgIC8gYG9uRWRnZUFkZGVkYCBpbnNpZGUgdGhlIHN1YmZsb3cpIGZpcmVkXG4gKiBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCwgYmVmb3JlIHRoZSBtb3VudC4gUGFyZW50XG4gKiByZWNvcmRlcnMgZG8gTk9UIHJlY2VpdmUgYSByZXBsYXkuIEluc3RlYWQsIHRoaXMgZXZlbnQgZGVsaXZlcnNcbiAqIHRoZSBzdWJmbG93J3MgZnVsbCBzdHJ1Y3R1cmUgdmlhIGBzdWJmbG93U3BlY2AsIGFuZCBjb25zdW1lcnMgY2FuXG4gKiB3YWxrIGl0IHZpYSBgd2Fsa1N1YmZsb3dTcGVjYCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuXG4gKlxuICogVGhpcyBtYXRjaGVzIGBGbG93UmVjb3JkZXIub25TdWJmbG93RW50cnlgIHNlbWFudGljcyBhdCBydW50aW1lXG4gKiAocGFyZW50cyBzZWUgdGhlIGJvdW5kYXJ5LCBub3QgYSByZXBsYXkgb2YgaW50ZXJuYWxzKSBhbmRcbiAqIHByZXNlcnZlcyB0aGUgXCJvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXJcIiBjb252ZW50aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQge1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIHRoZSBwYXJlbnQgYXNzaWduZWQgYXQgbW91bnQuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3ViZmxvdyBuYW1lLiAqL1xuICByZWFkb25seSBzdWJmbG93TmFtZTogc3RyaW5nO1xuICAvKiogTW91bnQgbm9kZSBpZCBpbiB0aGUgcGFyZW50J3MgY2hhcnQuICovXG4gIHJlYWRvbmx5IHJvb3RTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIG1vdW50IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCBzdWJmbG93XG4gICAqICByZXNvbHV0aW9uIHVudGlsIGV4ZWN1dGlvbikuICovXG4gIHJlYWRvbmx5IGlzTGF6eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtb3VudGVkIHN1YmZsb3cncyBjb21wbGV0ZSBzcGVjIOKAlCB0aGUgU0FNRSBPQkpFQ1RcbiAgICogKD09PSByZWZlcmVuY2UgZXF1YWxpdHkpIHJlYWNoYWJsZSB2aWEgYHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlYFxuICAgKiBmb3IgdGhlIEZsb3dDaGFydCB0aGUgY29uc3VtZXIgcGFzc2VkIHRvIGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgIC9cbiAgICogYGFkZFN1YkZsb3dDaGFydGAgLyBgYWRkU3ViRmxvd0NoYXJ0TmV4dGAuXG4gICAqXG4gICAqIFVOREVGSU5FRCBmb3IgbGF6eSBtb3VudHMgYXQgYnVpbGQgdGltZSAoYGlzTGF6eTogdHJ1ZWApIOKAlCB0aGVcbiAgICogc3ViZmxvdydzIHN0cnVjdHVyZSBoYXNuJ3QgYmVlbiByZXNvbHZlZCB5ZXQuIENvbnN1bWVycyB3YWl0aW5nIG9uXG4gICAqIGxhenkgc3ViZmxvd3MgaGFuZGxlIHRoZSBydW50aW1lIGBvblN1YmZsb3dFbnRyeWAgZXZlbnQgaW5zdGVhZC5cbiAgICpcbiAgICogSW1tdXRhYmxlIHBvc3QtYnVpbGQ7IGNvbnN1bWVycyBNVVNUIE5PVCBtdXRhdGUuXG4gICAqXG4gICAqIEBpbnRlcm5hbCBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlYCBpcyBsaWJyYXJ5LWludGVybmFsLlxuICAgKiAgICAgICAgICAgVXNlIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCBmb3IgdGhlXG4gICAqICAgICAgICAgICBzdGFibGUgcHVibGljIGNvbnRyYWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1NwZWM/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG5cbiAgLyoqXG4gICAqIExvY2FsIG1vdW50IGlkIG9mIHRoaXMgc3ViZmxvdyB3aXRoaW4gaXRzIHBhcmVudCDigJQgZXF1YWwgdG9cbiAgICogYHN1YmZsb3dJZGAgZm9yIHRvcC1sZXZlbCBtb3VudHMgKGUuZy4gYCdhdXRoJ2ApLCBjb21wb3NlZFxuICAgKiAoYCdhdXRoL3ZlcmlmeSdgKSBmb3IgbmVzdGVkIG1vdW50cyB3aG9zZSByZWNvcmRlciBpcyBhdHRhY2hlZFxuICAgKiB0byB0aGUgZ3JhbmRwYXJlbnQuIE1hdGNoZXMgcnVudGltZSBgdHJhdmVyc2FsQ29udGV4dC5zdWJmbG93UGF0aGBcbiAgICogc2VtYW50aWNzIOKAlCBORVZFUiBwcmVmaXhlZCB3aXRoIGBfX3Jvb3RfXy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdHJ1Y3R1cmVSZWNvcmRlciBpbnRlcmZhY2Vcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIEFsbCBtZXRob2RzIGFyZSBvcHRpb25hbCDigJQgaW1wbGVtZW50IG9ubHkgdGhlIGhvb2tzIHlvdSBuZWVkLlxuICogSGFuZGxlcnMgZmlyZSBTWU5DSFJPTk9VU0xZIGR1cmluZyBidWlsZGVyIG9wZXJhdGlvbnMgYW5kIGAuYnVpbGQoKWAuXG4gKiBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0IChzZWUgXCJFcnJvciBpc29sYXRpb25cIiBpbiB0aGUgZmlsZVxuICogaGVhZGVyKTsgc3Vic2VxdWVudCBkaXNwYXRjaCBjb250aW51ZXMuXG4gKlxuICogTGlmZWN5Y2xlOiBlYWNoIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCB2aWFcbiAqIEVJVEhFUiB0aGUgYGZsb3dDaGFydCgpYCBvcHRpb25zIGJhZyAoYHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9YClcbiAqIE9SIHRoZSBmbHVlbnQgYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMpYCBjaGFpbiDigJQgc2VlIHRoZSBmaWxlXG4gKiBoZWFkZXIgZm9yIHRoZSB0cmFkZS1vZmZzLiBSZWdpc3RyYXRpb24gYWZ0ZXIgYC5idWlsZCgpYCBpc1xuICogcmVqZWN0ZWQgKGNoYXJ0IGlzIHNlYWxlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlUmVjb3JkZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIg4oCUIHVzZWQgYnkgdGhlIGRpc3BhdGNoZXIgdG8gc2NvcGUgZXJyb3JcbiAgICogbWVzc2FnZXMgYW5kIHRvIHN1cHBvcnQgYGRldGFjaChpZClgIGxvb2t1cC5cbiAgICpcbiAgICogQ29udmVudGlvbiAobWF0Y2hlcyBgRmxvd1JlY29yZGVyLmlkYCBmcm9tIENMQVVERS5tZCk6XG4gICAqICAgLSBkb21haW4tcHJlZml4ZWQga2ViYWItY2FzZSAoYCdsZW5zLXN0cnVjdHVyZSdgLFxuICAgKiAgICAgYCdhZ2VudGZvb3RwcmludC1jb21wb3NpdGlvbidgLCBgJ3RyYWNlLWV4cGxhaW5hYmxlJ2ApXG4gICAqICAgLSBzYW1lIGlkIOKGkiBtdWx0aXBsZSByZWNvcmRlcnMgY29leGlzdCAoTk9UIGRlZHVwbGljYXRlZCBieVxuICAgKiAgICAgaWQ7IHRoZSBkaXNwYXRjaGVyIGZpcmVzIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIHJlZ2FyZGxlc3MpXG4gICAqICAgLSBgZGV0YWNoKGlkKWAgcmVtb3ZlcyBFVkVSWSByZWNvcmRlciB3aXRoIHRoYXQgaWQg4oCUIGJlXG4gICAqICAgICBpbnRlbnRpb25hbCBhYm91dCByZXVzZSBpZiB5b3UgcmVseSBvbiBzZWxlY3RpdmUgZGV0YWNoXG4gICAqXG4gICAqIENob29zZSBhIHN0YWJsZSBpZCBhdCBtb2R1bGUgbG9hZCBhbmQgZG9uJ3QgcmFuZG9taXNlIGl0IGFjcm9zc1xuICAgKiBydW5zIOKAlCBpdCBsYW5kcyBpbiBgU3RydWN0dXJlQnVpbGRFcnJvci5yZWNvcmRlcklkYCBzbyBkZWJ1Z1xuICAgKiBvdXRwdXQgaXMgZ3JlcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBvblN0YWdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICAvKiogTmFtZXMgdGhhdCBsYW5kZWQgb24gYSBzdGFnZSBhZnRlciBpdHMgYG9uU3RhZ2VBZGRlZGAgKHRoZSBgLnRhZygpYCBkb29yKS4gKi9cbiAgb25TdGFnZVRhZ2dlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQpOiB2b2lkO1xuICBvbkVkZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25Mb29wRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25EZWNpZGVyQ29tcGxldGU/KGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQ7XG4gIG9uU3ViZmxvd01vdW50ZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50KTogdm9pZDtcbn1cbiJdfQ==
@@ -83,6 +83,18 @@ class StructureRecorderDispatcher {
83
83
  }
84
84
  }
85
85
  }
86
+ fireStageTagged(event) {
87
+ if (this.recorders.length === 0)
88
+ return;
89
+ for (const r of this.recorders) {
90
+ try {
91
+ r.onStageTagged?.(event);
92
+ }
93
+ catch (err) {
94
+ this.recordError(r.id, 'onStageTagged', err);
95
+ }
96
+ }
97
+ }
86
98
  fireEdgeAdded(event) {
87
99
  if (this.recorders.length === 0)
88
100
  return;
@@ -172,4 +184,4 @@ class StructureRecorderDispatcher {
172
184
  }
173
185
  }
174
186
  exports.StructureRecorderDispatcher = StructureRecorderDispatcher;
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7OztBQUVILHFFQUEwRDtBQTJCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFhLDJCQUEyQjtJQUM5QixTQUFTLEdBQXdCLEVBQUUsQ0FBQztJQUMzQixNQUFNLEdBQTBCLEVBQUUsQ0FBQztJQUM1QyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCO3dFQUNvRTtJQUNwRSxNQUFNLENBQUMsUUFBMkI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELCtDQUErQztJQUMvQyxNQUFNLENBQUMsRUFBVTtRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzJEQUN1RDtJQUN2RCxZQUFZO1FBQ1YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsZUFBZSxDQUFrRCxFQUFVO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsU0FBUztRQUNQLE9BQU8sQ0FBQyxHQUFHLElB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TUFBTSxLQUFLLE9BQU8sSUFBSTtnQkFDbEcsMERBQTBELENBQzdELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUlELGtFQTBJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyIOKAlCBGYW5zIGJ1aWxkLXRpbWUgc3RydWN0dXJlIGV2ZW50cyBvdXQgdG8gTlxuICogYXR0YWNoZWQgYFN0cnVjdHVyZVJlY29yZGVyYCBpbnN0YW5jZXMuXG4gKlxuICogTWlycm9ycyBgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcmAgKGVuZ2luZS9uYXJyYXRpdmUvKSBleGFjdGx5OlxuICpcbiAqICAgLSBgcmVjb3JkZXJzOiBTdHJ1Y3R1cmVSZWNvcmRlcltdYCDigJQgYXR0YWNoIG9yZGVyIHByZXNlcnZlZFxuICogICAtIHBlci1ldmVudCBmaXJlIG1ldGhvZHMgZWFybHktcmV0dXJuIHdoZW4gbm8gcmVjb3JkZXJzIGF0dGFjaGVkXG4gKiAgICAgKHplcm8tYWxsb2NhdGlvbiBmYXN0IHBhdGgpXG4gKiAgIC0gcGVyLXJlY29yZGVyIHRyeS9jYXRjaCBpc29sYXRlcyBlcnJvcnM7IG9uZSBiYWQgcmVjb3JkZXIgY2Fubm90XG4gKiAgICAgY2FzY2FkZSBpbnRvIHRoZSBjaGFpbiBidWlsZCBvciBzaWJsaW5nIHJlY29yZGVyc1xuICogICAtIGVycm9ycyByb3V0ZSB0byBCT1RIIHRoZSBkZXYtbW9kZSBjb25zb2xlIHdhcm5pbmcgKG1hdGNoZXNcbiAqICAgICBGbG93UmVjb3JkZXJEaXNwYXRjaGVyKSBBTkQgYSBzdHJ1Y3R1cmVkIGBidWlsZEVycm9yc2BcbiAqICAgICBhY2N1bXVsYXRvciBzbyBjb25zdW1lcnMgY2FuIGluc3BlY3QgZmFpbHVyZXMgcG9zdC1idWlsZFxuICogICAtIHNwZWMgcGF5bG9hZHMgYXJlIE5PVCBmcm96ZW4gYXQgZGlzcGF0Y2ggdGltZSDigJQgaGFuZGxlcnMgbXVzdFxuICogICAgIHJlc3BlY3QgdGhlIGByZWFkb25seWAgbWFya2VycyBvbiBldmVudCBwYXlsb2FkIHR5cGVzICh0aGVcbiAqICAgICBidWlsZGVyIHN0aWxsIG5lZWRzIHRvIG11dGF0ZSBgc3BlYy5uZXh0YCBhZnRlciB0aGUgaW1tZWRpYXRlXG4gKiAgICAgYG9uU3RhZ2VBZGRlZGAgZmlyZXM7IHNlZSBgZmlyZVN0YWdlQWRkZWRgIGZvciB0aGUgZnVsbCBub3RlLFxuICogICAgIGFuZCBgU3RydWN0dXJlUmVjb3JkZXIudHNgIGhlYWRlciBcIlNwZWMgbXV0YXRpb25cIiBmb3IgdGhlXG4gKiAgICAgdHJ1c3QtbW9kZWwgaW1wbGljYXRpb25zKVxuICpcbiAqIFRoZSBkaXNwYXRjaGVyIGl0c2VsZiBvd25zIE5PIGNoYXJ0IHN0YXRlLiBUaGUgYnVpbGRlciBvd25zIHRoZVxuICogZGlzcGF0Y2hlcjsgZXZlbnRzIGZpcmUgZnJvbSB0aGUgbmF0dXJhbCBtdXRhdGlvbiBwb2ludHMgaW5cbiAqIEZsb3dDaGFydEJ1aWxkZXIgKEw3LjMpLlxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uLy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0U3BlYyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vU3RydWN0dXJlUmVjb3JkZXIuanMnO1xuXG4vKiogU3RydWN0dXJlZCBlcnJvciBjYXB0dXJlZCB3aGVuIGEgcmVjb3JkZXIgdGhyb3dzLiBSZWFkIHBvc3QtYnVpbGRcbiAqICB2aWEgYGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKWAg4oCUIGNhbGwgb24gdGhlIEJVSUxERVJcbiAqICByZWZlcmVuY2UgKE5PVCB0aGUgY2hhcnQgcmV0dXJuZWQgYnkgYC5idWlsZCgpYCkuIENhcHR1cmUgdGhlXG4gKiAgYnVpbGRlciByZWZlcmVuY2UgYmVmb3JlIGAuYnVpbGQoKWAgaWYgeW91IG5lZWQgcG9zdC1idWlsZCBhY2Nlc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUJ1aWxkRXJyb3Ige1xuICAvKiogV2hpY2ggcmVjb3JkZXIncyBoYW5kbGVyIHRocmV3LiAqL1xuICByZWFkb25seSByZWNvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBldmVudCBtZXRob2QgKGAnb25TdGFnZUFkZGVkJ2AsIGAnb25FZGdlQWRkZWQnYCwgLi4uKS4gKi9cbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIC8qKiBFcnJvciBtZXNzYWdlIGV4dHJhY3RlZCBmcm9tIHRoZSB0aHJvd24gdmFsdWUuICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIFRoZSBvcmlnaW5hbCB0aHJvd24gdmFsdWUg4oCUIGBFcnJvcmAgaW5zdGFuY2Ugb3Igd2hhdGV2ZXIgdGhlXG4gICAqICByZWNvcmRlciB0aHJldy4gVXNlZnVsIHdoZW4gZGlhZ25vc2lzIG5lZWRzIGEgc3RhY2sgdHJhY2UuICovXG4gIHJlYWRvbmx5IGVycm9yOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFNvZnQgY2FwIG9uIHRoZSBgZXJyb3JzW11gIGFjY3VtdWxhdG9yLiBCdWlsZHMgd2l0aCB0aG91c2FuZHMgb2ZcbiAqIHN0YWdlcyBhbmQgYSBtaXNiZWhhdmluZyByZWNvcmRlciB0aGF0IHRocm93cyBvbiBldmVyeSBldmVudCB3b3VsZFxuICogb3RoZXJ3aXNlIHJldGFpbiB1bmJvdW5kZWQgYHtyZWNvcmRlcklkLCBtZXRob2QsIG1lc3NhZ2UsIGVycm9yfWBcbiAqIHJlY29yZHMg4oCUIGVhY2ggY2xvc2luZyBvdmVyIHRoZSB0aHJvd24gdmFsdWUgKG9mdGVuIGFuIEVycm9yIHdpdGhcbiAqIGEgY2FwdHVyZWQgc3RhY2spLCBwcmV2ZW50aW5nIEdDIG9mIGFueSBjbG9zdXJlIGRhdGEgdGhlIHRocm93XG4gKiBjYXB0dXJlZC4gVGhlIGNhcCBpcyBmb3IgZGlhZ25vc2lzLCBub3QgZm9yZW5zaWMgY29tcGxldGVuZXNzO1xuICogb25jZSBleGNlZWRlZCwgYSBzaW5nbGUgc2VudGluZWwgcmVjb3JkIHNpZ25hbHMgdHJ1bmNhdGlvbi5cbiAqL1xuY29uc3QgU1RSVUNUVVJFX0JVSUxEX0VSUk9SU19DQVAgPSAxMDA7XG5cbmV4cG9ydCBjbGFzcyBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIge1xuICBwcml2YXRlIHJlY29yZGVyczogU3RydWN0dXJlUmVjb3JkZXJbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yczogU3RydWN0dXJlQnVpbGRFcnJvcltdID0gW107XG4gIHByaXZhdGUgX3RydW5jYXRlZCA9IGZhbHNlO1xuXG4gIC8qKiBBdHRhY2ggYSBgU3RydWN0dXJlUmVjb3JkZXJgLiBNdWx0aXBsZSByZWNvcmRlcnMgd2l0aCB0aGUgc2FtZVxuICAgKiAgaWQgYXJlIGFsbG93ZWQ7IHRoZSBjb252ZW50aW9uIGlzIG9uZSBpZCBwZXIgbG9naWNhbCBjb25jZXJuLiAqL1xuICBhdHRhY2gocmVjb3JkZXI6IFN0cnVjdHVyZVJlY29yZGVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMucHVzaChyZWNvcmRlcik7XG4gIH1cblxuICAvKiogRGV0YWNoIGV2ZXJ5IHJlY29yZGVyIHdpdGggdGhlIGdpdmVuIGlkLiAqL1xuICBkZXRhY2goaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzID0gdGhpcy5yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH1cblxuICAvKiogRGVmZW5zaXZlIGNvcHkgb2YgdGhlIGF0dGFjaGVkIHJlY29yZGVycyDigJQgdXNlZCBpbiB0ZXN0cyArIGJ5XG4gICAqICB0b29saW5nIHRoYXQgd2FudHMgdG8gaW5zcGVjdCB3aGF0J3MgcmVnaXN0ZXJlZC4gKi9cbiAgZ2V0UmVjb3JkZXJzKCk6IFN0cnVjdHVyZVJlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5yZWNvcmRlcnNdO1xuICB9XG5cbiAgLyoqIEZpbmQgb25lIHJlY29yZGVyIGJ5IGlkLiAqL1xuICBnZXRSZWNvcmRlckJ5SWQ8VCBleHRlbmRzIFN0cnVjdHVyZVJlY29yZGVyID0gU3RydWN0dXJlUmVjb3JkZXI+KGlkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRlcnMuZmluZCgocikgPT4gci5pZCA9PT0gaWQpIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUmVhZCBhY2N1bXVsYXRlZCBlcnJvcnMgZnJvbSB0aGlzIGJ1aWxkLiBSZXR1cm5zIGEgZGVmZW5zaXZlIGNvcHkuICovXG4gIGdldEVycm9ycygpOiBTdHJ1Y3R1cmVCdWlsZEVycm9yW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5lcnJvcnNdO1xuICB9XG5cbiAgLy8g4pSA4pSAIGZpcmUqIG1ldGhvZHMg4oCUIGNhbGxlZCBieSB0aGUgYnVpbGRlciBhdCBlYWNoIGV2ZW50IG1vbWVudCDilIDilIDilIDilIDilIBcblxuICBmaXJlU3RhZ2VBZGRlZChldmVudDogU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIC8vIE5PVEU6IGBldmVudC5zcGVjYCBpcyBOT1QgZnJvemVuIGhlcmUuIGBvblN0YWdlQWRkZWRgIGZpcmVzXG4gICAgLy8gSU1NRURJQVRFTFkgd2hlbiBhIHNwZWMgbm9kZSBpcyBhZGRlZCDigJQgdGhlIGJ1aWxkZXIgc3RpbGwgbmVlZHNcbiAgICAvLyB0byBtdXRhdGUgYHNwZWMubmV4dGAgbGF0ZXIgKGluIHRoZSBzdWJzZXF1ZW50IGBhZGRYYCBjYWxsKS5cbiAgICAvLyBGcmVlemluZyBoZXJlIHdvdWxkIGJyZWFrIHRoZSBidWlsZGVyLiBIYW5kbGVyIG11dGF0aW9uIG9mXG4gICAgLy8gYGV2ZW50LnNwZWNgIGlzIGRvY3VtZW50ZWQgYXMgdW5kZWZpbmVkIGJlaGF2aW9yIOKAlCBzZWUgdGhlXG4gICAgLy8gU3RydWN0dXJlUmVjb3JkZXIgdHlwZSdzIEpTRG9jICsgcmVhZG9ubHkgbWFya2VycyBvbiB0aGVcbiAgICAvLyBldmVudCBwYXlsb2FkIGludGVyZmFjZS5cbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdGFnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uU3RhZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZUVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy8gTm8gc3BlYyBvbiB0aGlzIGV2ZW50IOKAlCBwYXNzIHRocm91Z2guXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRWRnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlTG9vcEVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkxvb3BFZGdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25Mb29wRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlRGVjaWRlckNvbXBsZXRlKGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25EZWNpZGVyQ29tcGxldGU/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25EZWNpZGVyQ29tcGxldGUnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVTdWJmbG93TW91bnRlZChldmVudDogU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdWJmbG93TW91bnRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN1YmZsb3dNb3VudGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0ZXJuYWxseS1jYWxsYWJsZSBlcnJvciBjYXB0dXJlIGZvciBldmVudHMgdGhlIGJ1aWxkZXIgZmlyZXNcbiAgICogT1VUU0lERSB0aGUgbm9ybWFsIGZpcmUqIGZhbi1vdXQgcGF0aCDigJQgc3BlY2lmaWNhbGx5IHRoZSBzZWVkXG4gICAqIHJlcGxheSBpbiBgRmxvd0NoYXJ0QnVpbGRlci5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcigpYCwgd2hpY2hcbiAgICogdGFyZ2V0cyBvbmUgc3BlY2lmaWMgcmVjb3JkZXIgcmF0aGVyIHRoYW4gZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIuXG4gICAqXG4gICAqIFNhbWUgb2JzZXJ2YWJpbGl0eSBjb250cmFjdCBhcyB0aGUgaW50ZXJuYWwgYHJlY29yZEVycm9yYDpcbiAgICogYWNjdW11bGF0ZXMgb24gYGdldEVycm9ycygpYCBBTkQgbG9ncyBpbiBkZXYgbW9kZS5cbiAgICovXG4gIHJlY29yZEVycm9yRm9yUmVwbGF5KHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRXJyb3IocmVjb3JkZXJJZCwgbWV0aG9kLCBlcnIpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHJlY29yZEVycm9yKHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgeyBtZXNzYWdlPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZT8ubWVzc2FnZSA9PT0gJ3N0cmluZycgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAvLyBTb2Z0IGNhcCB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGggKyBjbG9zdXJlIHJldGVudGlvbi4gT25jZVxuICAgIC8vIGhpdCwgcHVzaCBhIHNpbmdsZSBzZW50aW5lbCBkZXNjcmliaW5nIHRoZSB0cnVuY2F0aW9uIGFuZCBkcm9wXG4gICAgLy8gZnVydGhlciByZWNvcmRzIG9uIHRoZSBmbG9vciAoc3RpbGwgbG9nIGluIGRldiBtb2RlIHNvIHRoZVxuICAgIC8vIGNvbnN1bWVyIG5vdGljZXMgdGhlIHNwYW0gYXQgaXRzIHNvdXJjZSkuXG4gICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA8IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHsgcmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcjogZXJyIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX3RydW5jYXRlZCkge1xuICAgICAgdGhpcy5fdHJ1bmNhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICByZWNvcmRlcklkOiAnX190cnVuY2F0ZWRfXycsXG4gICAgICAgIG1ldGhvZDogJ19fdHJ1bmNhdGVkX18nLFxuICAgICAgICBtZXNzYWdlOiBgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyOiBlcnJvciBhY2N1bXVsYXRvciB0cnVuY2F0ZWQgYXQgJHtTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUH0gZW50cmllczsgZnVydGhlciBlcnJvcnMgc3VwcHJlc3NlZC5gLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50XSBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyZWNvcmRlcklkfVwiIHRocmV3IGluICR7bWV0aG9kfTogJHttZXNzYWdlfS4gYCArXG4gICAgICAgICAgJ1NlZSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCkgZm9yIHRoZSBmdWxsIGxpc3QuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZS1leHBvcnQgdGhlIEZsb3dDaGFydFNwZWMgdHlwZSBmb3IgZG93bnN0cmVhbSB0eXBlIGNvbXBsZXRlbmVzcy4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0U3BlYyB9O1xuIl19
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7OztBQUVILHFFQUEwRDtBQTRCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFhLDJCQUEyQjtJQUM5QixTQUFTLEdBQXdCLEVBQUUsQ0FBQztJQUMzQixNQUFNLEdBQTBCLEVBQUUsQ0FBQztJQUM1QyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCO3dFQUNvRTtJQUNwRSxNQUFNLENBQUMsUUFBMkI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELCtDQUErQztJQUMvQyxNQUFNLENBQUMsRUFBVTtRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzJEQUN1RDtJQUN2RCxZQUFZO1FBQ1YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsZUFBZSxDQUFrRCxFQUFVO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsU0FBUztRQUNQLE9BQU8sQ0FBQyxHQUFHLElB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LElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsVUFBVSxFQUFFLGVBQWU7Z0JBQzNCLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixPQUFPLEVBQUUsK0RBQStELDBCQUEwQixzQ0FBc0M7Z0JBQ3hJLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksSUFBQSw2QkFBUyxHQUFFLEVBQUUsQ0FBQztZQUNoQixzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDVixzREFBc0QsVUFBVSxjQUFjLE1BQU0sS0FBSyxPQUFPLElBQUk7Z0JBQ2xHLDBEQUEwRCxDQUM3RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQXJKRCxrRUFxSkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlciDigJQgRmFucyBidWlsZC10aW1lIHN0cnVjdHVyZSBldmVudHMgb3V0IHRvIE5cbiAqIGF0dGFjaGVkIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2VzLlxuICpcbiAqIE1pcnJvcnMgYEZsb3dSZWNvcmRlckRpc3BhdGNoZXJgIChlbmdpbmUvbmFycmF0aXZlLykgZXhhY3RseTpcbiAqXG4gKiAgIC0gYHJlY29yZGVyczogU3RydWN0dXJlUmVjb3JkZXJbXWAg4oCUIGF0dGFjaCBvcmRlciBwcmVzZXJ2ZWRcbiAqICAgLSBwZXItZXZlbnQgZmlyZSBtZXRob2RzIGVhcmx5LXJldHVybiB3aGVuIG5vIHJlY29yZGVycyBhdHRhY2hlZFxuICogICAgICh6ZXJvLWFsbG9jYXRpb24gZmFzdCBwYXRoKVxuICogICAtIHBlci1yZWNvcmRlciB0cnkvY2F0Y2ggaXNvbGF0ZXMgZXJyb3JzOyBvbmUgYmFkIHJlY29yZGVyIGNhbm5vdFxuICogICAgIGNhc2NhZGUgaW50byB0aGUgY2hhaW4gYnVpbGQgb3Igc2libGluZyByZWNvcmRlcnNcbiAqICAgLSBlcnJvcnMgcm91dGUgdG8gQk9USCB0aGUgZGV2LW1vZGUgY29uc29sZSB3YXJuaW5nIChtYXRjaGVzXG4gKiAgICAgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcikgQU5EIGEgc3RydWN0dXJlZCBgYnVpbGRFcnJvcnNgXG4gKiAgICAgYWNjdW11bGF0b3Igc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IGZhaWx1cmVzIHBvc3QtYnVpbGRcbiAqICAgLSBzcGVjIHBheWxvYWRzIGFyZSBOT1QgZnJvemVuIGF0IGRpc3BhdGNoIHRpbWUg4oCUIGhhbmRsZXJzIG11c3RcbiAqICAgICByZXNwZWN0IHRoZSBgcmVhZG9ubHlgIG1hcmtlcnMgb24gZXZlbnQgcGF5bG9hZCB0eXBlcyAodGhlXG4gKiAgICAgYnVpbGRlciBzdGlsbCBuZWVkcyB0byBtdXRhdGUgYHNwZWMubmV4dGAgYWZ0ZXIgdGhlIGltbWVkaWF0ZVxuICogICAgIGBvblN0YWdlQWRkZWRgIGZpcmVzOyBzZWUgYGZpcmVTdGFnZUFkZGVkYCBmb3IgdGhlIGZ1bGwgbm90ZSxcbiAqICAgICBhbmQgYFN0cnVjdHVyZVJlY29yZGVyLnRzYCBoZWFkZXIgXCJTcGVjIG11dGF0aW9uXCIgZm9yIHRoZVxuICogICAgIHRydXN0LW1vZGVsIGltcGxpY2F0aW9ucylcbiAqXG4gKiBUaGUgZGlzcGF0Y2hlciBpdHNlbGYgb3ducyBOTyBjaGFydCBzdGF0ZS4gVGhlIGJ1aWxkZXIgb3ducyB0aGVcbiAqIGRpc3BhdGNoZXI7IGV2ZW50cyBmaXJlIGZyb20gdGhlIG5hdHVyYWwgbXV0YXRpb24gcG9pbnRzIGluXG4gKiBGbG93Q2hhcnRCdWlsZGVyIChMNy4zKS5cbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi8uLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcblxuLyoqIFN0cnVjdHVyZWQgZXJyb3IgY2FwdHVyZWQgd2hlbiBhIHJlY29yZGVyIHRocm93cy4gUmVhZCBwb3N0LWJ1aWxkXG4gKiAgdmlhIGBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKClgIOKAlCBjYWxsIG9uIHRoZSBCVUlMREVSXG4gKiAgcmVmZXJlbmNlIChOT1QgdGhlIGNoYXJ0IHJldHVybmVkIGJ5IGAuYnVpbGQoKWApLiBDYXB0dXJlIHRoZVxuICogIGJ1aWxkZXIgcmVmZXJlbmNlIGJlZm9yZSBgLmJ1aWxkKClgIGlmIHlvdSBuZWVkIHBvc3QtYnVpbGQgYWNjZXNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVCdWlsZEVycm9yIHtcbiAgLyoqIFdoaWNoIHJlY29yZGVyJ3MgaGFuZGxlciB0aHJldy4gKi9cbiAgcmVhZG9ubHkgcmVjb3JkZXJJZDogc3RyaW5nO1xuICAvKiogV2hpY2ggZXZlbnQgbWV0aG9kIChgJ29uU3RhZ2VBZGRlZCdgLCBgJ29uRWRnZUFkZGVkJ2AsIC4uLikuICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICAvKiogRXJyb3IgbWVzc2FnZSBleHRyYWN0ZWQgZnJvbSB0aGUgdGhyb3duIHZhbHVlLiAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlIOKAlCBgRXJyb3JgIGluc3RhbmNlIG9yIHdoYXRldmVyIHRoZVxuICAgKiAgcmVjb3JkZXIgdGhyZXcuIFVzZWZ1bCB3aGVuIGRpYWdub3NpcyBuZWVkcyBhIHN0YWNrIHRyYWNlLiAqL1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTb2Z0IGNhcCBvbiB0aGUgYGVycm9yc1tdYCBhY2N1bXVsYXRvci4gQnVpbGRzIHdpdGggdGhvdXNhbmRzIG9mXG4gKiBzdGFnZXMgYW5kIGEgbWlzYmVoYXZpbmcgcmVjb3JkZXIgdGhhdCB0aHJvd3Mgb24gZXZlcnkgZXZlbnQgd291bGRcbiAqIG90aGVyd2lzZSByZXRhaW4gdW5ib3VuZGVkIGB7cmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcn1gXG4gKiByZWNvcmRzIOKAlCBlYWNoIGNsb3Npbmcgb3ZlciB0aGUgdGhyb3duIHZhbHVlIChvZnRlbiBhbiBFcnJvciB3aXRoXG4gKiBhIGNhcHR1cmVkIHN0YWNrKSwgcHJldmVudGluZyBHQyBvZiBhbnkgY2xvc3VyZSBkYXRhIHRoZSB0aHJvd1xuICogY2FwdHVyZWQuIFRoZSBjYXAgaXMgZm9yIGRpYWdub3Npcywgbm90IGZvcmVuc2ljIGNvbXBsZXRlbmVzcztcbiAqIG9uY2UgZXhjZWVkZWQsIGEgc2luZ2xlIHNlbnRpbmVsIHJlY29yZCBzaWduYWxzIHRydW5jYXRpb24uXG4gKi9cbmNvbnN0IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQID0gMTAwO1xuXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcnM6IFN0cnVjdHVyZUJ1aWxkRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIF90cnVuY2F0ZWQgPSBmYWxzZTtcblxuICAvKiogQXR0YWNoIGEgYFN0cnVjdHVyZVJlY29yZGVyYC4gTXVsdGlwbGUgcmVjb3JkZXJzIHdpdGggdGhlIHNhbWVcbiAgICogIGlkIGFyZSBhbGxvd2VkOyB0aGUgY29udmVudGlvbiBpcyBvbmUgaWQgcGVyIGxvZ2ljYWwgY29uY2Vybi4gKi9cbiAgYXR0YWNoKHJlY29yZGVyOiBTdHJ1Y3R1cmVSZWNvcmRlcik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgLyoqIERldGFjaCBldmVyeSByZWNvcmRlciB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgZGV0YWNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycyA9IHRoaXMucmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9XG5cbiAgLyoqIERlZmVuc2l2ZSBjb3B5IG9mIHRoZSBhdHRhY2hlZCByZWNvcmRlcnMg4oCUIHVzZWQgaW4gdGVzdHMgKyBieVxuICAgKiAgdG9vbGluZyB0aGF0IHdhbnRzIHRvIGluc3BlY3Qgd2hhdCdzIHJlZ2lzdGVyZWQuICovXG4gIGdldFJlY29yZGVycygpOiBTdHJ1Y3R1cmVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBGaW5kIG9uZSByZWNvcmRlciBieSBpZC4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBTdHJ1Y3R1cmVSZWNvcmRlciA9IFN0cnVjdHVyZVJlY29yZGVyPihpZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkZXJzLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlYWQgYWNjdW11bGF0ZWQgZXJyb3JzIGZyb20gdGhpcyBidWlsZC4gUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5LiAqL1xuICBnZXRFcnJvcnMoKTogU3RydWN0dXJlQnVpbGRFcnJvcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZXJyb3JzXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBmaXJlKiBtZXRob2RzIOKAlCBjYWxsZWQgYnkgdGhlIGJ1aWxkZXIgYXQgZWFjaCBldmVudCBtb21lbnQg4pSA4pSA4pSA4pSA4pSAXG5cbiAgZmlyZVN0YWdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvLyBOT1RFOiBgZXZlbnQuc3BlY2AgaXMgTk9UIGZyb3plbiBoZXJlLiBgb25TdGFnZUFkZGVkYCBmaXJlc1xuICAgIC8vIElNTUVESUFURUxZIHdoZW4gYSBzcGVjIG5vZGUgaXMgYWRkZWQg4oCUIHRoZSBidWlsZGVyIHN0aWxsIG5lZWRzXG4gICAgLy8gdG8gbXV0YXRlIGBzcGVjLm5leHRgIGxhdGVyIChpbiB0aGUgc3Vic2VxdWVudCBgYWRkWGAgY2FsbCkuXG4gICAgLy8gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGUgYnVpbGRlci4gSGFuZGxlciBtdXRhdGlvbiBvZlxuICAgIC8vIGBldmVudC5zcGVjYCBpcyBkb2N1bWVudGVkIGFzIHVuZGVmaW5lZCBiZWhhdmlvciDigJQgc2VlIHRoZVxuICAgIC8vIFN0cnVjdHVyZVJlY29yZGVyIHR5cGUncyBKU0RvYyArIHJlYWRvbmx5IG1hcmtlcnMgb24gdGhlXG4gICAgLy8gZXZlbnQgcGF5bG9hZCBpbnRlcmZhY2UuXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN0YWdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVTdGFnZVRhZ2dlZChldmVudDogU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdGFnZVRhZ2dlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN0YWdlVGFnZ2VkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlRWRnZUFkZGVkKGV2ZW50OiBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvLyBObyBzcGVjIG9uIHRoaXMgZXZlbnQg4oCUIHBhc3MgdGhyb3VnaC5cbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25FZGdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25FZGdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVMb29wRWRnZUFkZGVkKGV2ZW50OiBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uTG9vcEVkZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvbkxvb3BFZGdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVEZWNpZGVyQ29tcGxldGUoZXZlbnQ6IFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkRlY2lkZXJDb21wbGV0ZT8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvbkRlY2lkZXJDb21wbGV0ZScsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZVN1YmZsb3dNb3VudGVkKGV2ZW50OiBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblN1YmZsb3dNb3VudGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uU3ViZmxvd01vdW50ZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlcm5hbGx5LWNhbGxhYmxlIGVycm9yIGNhcHR1cmUgZm9yIGV2ZW50cyB0aGUgYnVpbGRlciBmaXJlc1xuICAgKiBPVVRTSURFIHRoZSBub3JtYWwgZmlyZSogZmFuLW91dCBwYXRoIOKAlCBzcGVjaWZpY2FsbHkgdGhlIHNlZWRcbiAgICogcmVwbGF5IGluIGBGbG93Q2hhcnRCdWlsZGVyLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKClgLCB3aGljaFxuICAgKiB0YXJnZXRzIG9uZSBzcGVjaWZpYyByZWNvcmRlciByYXRoZXIgdGhhbiBldmVyeSBhdHRhY2hlZCByZWNvcmRlci5cbiAgICpcbiAgICogU2FtZSBvYnNlcnZhYmlsaXR5IGNvbnRyYWN0IGFzIHRoZSBpbnRlcm5hbCBgcmVjb3JkRXJyb3JgOlxuICAgKiBhY2N1bXVsYXRlcyBvbiBgZ2V0RXJyb3JzKClgIEFORCBsb2dzIGluIGRldiBtb2RlLlxuICAgKi9cbiAgcmVjb3JkRXJyb3JGb3JSZXBsYXkocmVjb3JkZXJJZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgZXJyOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRFcnJvcihyZWNvcmRlcklkLCBtZXRob2QsIGVycik7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgcmVjb3JkRXJyb3IocmVjb3JkZXJJZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgZXJyOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IGVyciBhcyB7IG1lc3NhZ2U/OiB1bmtub3duIH0gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiBlPy5tZXNzYWdlID09PSAnc3RyaW5nJyA/IGUubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIC8vIFNvZnQgY2FwIHRvIHByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aCArIGNsb3N1cmUgcmV0ZW50aW9uLiBPbmNlXG4gICAgLy8gaGl0LCBwdXNoIGEgc2luZ2xlIHNlbnRpbmVsIGRlc2NyaWJpbmcgdGhlIHRydW5jYXRpb24gYW5kIGRyb3BcbiAgICAvLyBmdXJ0aGVyIHJlY29yZHMgb24gdGhlIGZsb29yIChzdGlsbCBsb2cgaW4gZGV2IG1vZGUgc28gdGhlXG4gICAgLy8gY29uc3VtZXIgbm90aWNlcyB0aGUgc3BhbSBhdCBpdHMgc291cmNlKS5cbiAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoIDwgU1RSVUNUVVJFX0JVSUxEX0VSUk9SU19DQVApIHtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goeyByZWNvcmRlcklkLCBtZXRob2QsIG1lc3NhZ2UsIGVycm9yOiBlcnIgfSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5fdHJ1bmNhdGVkKSB7XG4gICAgICB0aGlzLl90cnVuY2F0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh7XG4gICAgICAgIHJlY29yZGVySWQ6ICdfX3RydW5jYXRlZF9fJyxcbiAgICAgICAgbWV0aG9kOiAnX190cnVuY2F0ZWRfXycsXG4gICAgICAgIG1lc3NhZ2U6IGBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXI6IGVycm9yIGFjY3VtdWxhdG9yIHRydW5jYXRlZCBhdCAke1NUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQfSBlbnRyaWVzOyBmdXJ0aGVyIGVycm9ycyBzdXBwcmVzc2VkLmAsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtmb290cHJpbnRdIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3JlY29yZGVySWR9XCIgdGhyZXcgaW4gJHttZXRob2R9OiAke21lc3NhZ2V9LiBgICtcbiAgICAgICAgICAnU2VlIGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKSBmb3IgdGhlIGZ1bGwgbGlzdC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJlLWV4cG9ydCB0aGUgRmxvd0NoYXJ0U3BlYyB0eXBlIGZvciBkb3duc3RyZWFtIHR5cGUgY29tcGxldGVuZXNzLiAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjIH07XG4iXX0=
@@ -53,6 +53,7 @@
53
53
  */
54
54
  Object.defineProperty(exports, "__esModule", { value: true });
55
55
  exports.ParallelForEachHandler = void 0;
56
+ const handles_js_1 = require("../../reactive/handles.js");
56
57
  const types_js_1 = require("../../reactive/types.js");
57
58
  const createProtectedScope_js_1 = require("../../scope/protection/createProtectedScope.js");
58
59
  const branchSegment_js_1 = require("../branchSegment.js");
@@ -127,9 +128,17 @@ class ParallelForEachHandler {
127
128
  /**
128
129
  * Evaluate the items selector against the live scope. A non-array return is
129
130
  * a chart bug, not a runtime condition — it fails loudly, naming the stage.
131
+ *
132
+ * The selector reads the typed scope, so what it returns is usually the
133
+ * scope's own array HANDLE (a Proxy bound to the parent stage) and every
134
+ * `items[index]` an element handle. The items are about to cross into
135
+ * branch runtimes — closed over by `branch(item, index)` and seeded as the
136
+ * branch's `item` — so they are taken as VALUES here (`unwrapHandles`,
137
+ * reactive/handles.ts). 9.22.0–9.23.2 seeded the handle itself and every
138
+ * branch over an object item failed at its seed commit (DataCloneError).
130
139
  */
131
140
  resolveItems(config, scope, node) {
132
- const items = config.items(scope);
141
+ const items = (0, handles_js_1.unwrapHandles)(config.items(scope));
133
142
  if (items === undefined || items === null)
134
143
  return [];
135
144
  if (!Array.isArray(items)) {
@@ -222,4 +231,4 @@ function notify(scope, method) {
222
231
  if (s && typeof s[method] === 'function')
223
232
  s[method]();
224
233
  }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYWxsZWxGb3JFYWNoSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL1BhcmFsbGVsRm9yRWFjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtREc7OztBQUdILHNEQUF5RDtBQUN6RCw0RkFBc0Y7QUFDdEYsMERBQXlEO0FBc0J6RCxNQUFhLHNCQUFzQjtJQUV2QjtJQUNBO0lBQ0E7SUFIVixZQUNVLElBQStCLEVBQy9CLGdCQUFnRCxFQUNoRCxLQUF5QztRQUZ6QyxTQUFJLEdBQUosSUFBSSxDQUEyQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdDO1FBQ2hELFVBQUssR0FBTCxLQUFLLENBQW9DO0lBQ2hELENBQUM7SUFFSjs7O09BR0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUNQLElBQTZCLEVBQzdCLE9BQXFCLEVBQ3JCLFVBQThCLEVBQzlCLGdCQUFrQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBeUQsQ0FBQztRQUU5RSwwRUFBMEU7UUFDMUUsNEVBQTRFO1FBQzVFLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRyxNQUFNLFlBQVksR0FBRyxRQUFRLElBQUssUUFBZ0IsQ0FBQyx5QkFBYyxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQzVFLE1BQU0sS0FBSyxHQUFHLFlBQVk7WUFDeEIsQ0FBQyxDQUFDLFFBQVE7WUFDVixDQUFDLENBQUUsSUFBQSw4Q0FBb0Is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QUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQXFCLEVBQUUsSUFBWSxFQUFFLE9BQWtCO1FBQzVGLE1BQU0sQ0FBQyxHQUFHLFFBQThDLENBQUM7UUFDekQsSUFBSSxPQUFPLENBQUMsRUFBRSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLFNBQW1ELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQWtELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JFLE9BQU87UUFDVCxDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQTFNRCx3REEwTUM7QUFFRCxvRUFBb0U7QUFDcEUsU0FBUyxNQUFNLENBQUMsS0FBYyxFQUFFLE1BQTZDO0lBQzNFLE1BQU0sQ0FBQyxHQUFHLEtBQTRDLENBQUM7SUFDdkQsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVTtRQUFHLENBQUMsQ0FBQyxNQUFNLENBQWdCLEVBQUUsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJhbGxlbEZvckVhY2hIYW5kbGVyIOKAlCBkeW5hbWljIGZhbi1vdXQ6IG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBDT1VOVFxuICogZGVjaWRlZCBhdCBydW50aW1lIGZyb20gdGhlIHBheWxvYWQuXG4gKlxuICogRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDEgKyBEMikuIFJvdW5kIEIgYnVpbGRzIGV4YWN0bHlcbiAqIHRoYXQgZG9jdW1lbnQuXG4gKlxuICogIyMgV2hhdCB0aGlzIGhhbmRsZXIgZG9lcyBOT1QgaW52ZW50XG4gKlxuICogQWxtb3N0IGV2ZXJ5dGhpbmcgaGVyZSBpcyBleGlzdGluZyBtYWNoaW5lcnksIHdpcmVkIHRvZ2V0aGVyOlxuICpcbiAqIC0gKipFYWNoIGJyYW5jaCBpcyBhIGdlbmVyYXRlZCBTVUJGTE9XLioqIEl0cyBwYXRoIHNlZ21lbnQgaXNcbiAqICAgYDxwYXJlbnRTdGFnZUlkPn48aW5kZXg+YCAoc2VlIGBlbmdpbmUvYnJhbmNoU2VnbWVudC50c2ApIOKAlCBhIHN1YmZsb3dQYXRoXG4gKiAgIHNlZ21lbnQgaW4gdGhlIGdyYW1tYXIgdGhhdCBhbHJlYWR5IHNoaXBzLCBOT1QgYSBuZXcgZGVsaW1pdGVyIGNsYXNzLiBTbyBhXG4gKiAgIGJyYW5jaCBnZXRzLCBmb3IgZnJlZTogYSBmcmVzaCBpc29sYXRlZCBgRXhlY3V0aW9uUnVudGltZWAgKGJyYW5jaGVzIGNhbm5vdFxuICogICBjb3JydXB0IGVhY2ggb3RoZXIncyBpbi1mbGlnaHQgc3RhdGUpLCB0aGUgaW5wdXRNYXBwZXIgc2VhbSBmb3IgZmVlZGluZyB0aGVcbiAqICAgaXRlbSBpbiwgYW5kIOKAlCB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIGRlc2lnbiDigJQgYHBhcnNlUnVudGltZVN0YWdlSWRgLFxuICogICBgY2F1c2FsQ2hhaW5gLCBgc2xpY2VGb3JLZXlgIGFuZCBgZm9yd2FyZFNsaWNlRm9yS2V5YCByZWFkaW5nIGJyYW5jaFxuICogICBjb21taXRzIHdpdGggWkVSTyBjaGFuZ2VzLCBiZWNhdXNlIHRoZSBpZCBzaGFwZSBJUyB0aGUgc2hpcHBlZCBzaGFwZS5cbiAqIC0gKipUaGUgZmFuLW91dCBpdHNlbGYgaXMgYENoaWxkcmVuRXhlY3V0b3JgLioqIFRoYXQgaXMgd2hhdCBtYWtlcyB0aGVcbiAqICAgZmFpbHVyZSBwb2xpY3kgXCJQYXJhbGxlbCdzIGV4aXN0aW5nIGZhaWx1cmUgcG9saWN5XCIgcmF0aGVyIHRoYW4gYSBzZWNvbmRcbiAqICAgb25lOiBgZmFpbEZhc3RgIOKGkiBgUHJvbWlzZS5hbGxgLCBvdGhlcndpc2UgYmVzdC1lZmZvcnQgYFByb21pc2UuYWxsU2V0dGxlZGAuXG4gKiAgIEl0IGFsc28gZmlyZXMgYG9uRm9ya2AgKyBgb25TdGFnZUV4ZWN1dGVkKCdmb3JrJylgIGFuZCBidWJibGVzIGFcbiAqICAgYFBhdXNlU2lnbmFsYCBvdXQgb2YgYSBicmFuY2gsIGFsbCB1bmNoYW5nZWQuXG4gKlxuICogIyMgVGhlIGxhd3MgdGhpcyBoYW5kbGVyIG93bnNcbiAqXG4gKiAqKk9yZGVyIGlzIGl0ZW1zIG9yZGVyLioqIFJlc3VsdHMgYXJlIGFzc2VtYmxlZCBieSBpbmRleCBmcm9tIHRoZSBmYW4tb3V0J3NcbiAqIGtleWVkIHJlc3VsdHMsIG5ldmVyIGJ5IGNvbXBsZXRpb24gb3JkZXIsIGFuZCBsYW5kIGFzIE9ORSBhcnJheSB3cml0ZSBvbiB0aGVcbiAqIHBhcmVudCDigJQgc28gYGludG9baV1gIGlzIGFsd2F5cyBicmFuY2ggYGlgJ3MgcmVzdWx0IG5vIG1hdHRlciB3aGljaCBicmFuY2hcbiAqIGZpbmlzaGVkIGZpcnN0LiBBIGZhaWxlZCBicmFuY2ggKGJlc3QtZWZmb3J0IG1vZGUpIGxlYXZlcyBgdW5kZWZpbmVkYCBpbiBpdHNcbiAqIHNsb3Q7IHdoaWNoIGJyYW5jaCBmYWlsZWQgaXMgbm90IHJlcG9ydGVkIGhlcmUsIGJlY2F1c2UgdGhhdCBnYXAgaXNcbiAqIHByZS1leGlzdGluZyBpbiB0aGUgcGFyYWxsZWwgZmFuLW91dCBhbmQgbm90IHRoaXMgZmVhdHVyZSdzIHRvIHdpZGVuLlxuICpcbiAqICoqbWF4QnJhbmNoZXMgdHJ1bmNhdGVzLCBhbmQgc2F5cyBzby4qKiBJdGVtcyBwYXN0IHRoZSBjZWlsaW5nIGRvIG5vdCBydW4uXG4gKiBUaGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCBpbiB0aGUgc3RhZ2UncyBvd24gY29tbWl0LXZpc2libGUgbG9nIGFuZCBhcyBhXG4gKiBmbG93IG1lc3NhZ2Ug4oCUIGJvdW5kZWQgZXhlY3V0aW9uLCBzdGF0ZWQsIG5ldmVyIHNpbGVudC5cbiAqXG4gKiAqKkJyYW5jaCBjaGFydHMgYXJlIHJlLXJlZ2lzdGVyZWQgb24gRVZFUlkgdmlzaXQuKiogVGhlIGdlbmVyYXRlZCBzZWdtZW50c1xuICogYXJlIHN0YWJsZSBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBhbmQgc3ViZmxvdyByZWdpc3RyYXRpb24gaXMgbm9ybWFsbHlcbiAqIGZpcnN0LXdyaXRlLXdpbnMg4oCUIHdoaWNoIHdvdWxkIG1lYW4gYSBsb29waW5nIGZhbi1vdXQgc2lsZW50bHkgcmUtZXhlY3V0aW5nXG4gKiBpdGVyYXRpb24gMSdzIGJyYW5jaCBjaGFydHMgZm9yZXZlciwgZXZlbiB3aGVuIHRoZSBmYWN0b3J5IHJldHVybnMgZGlmZmVyZW50XG4gKiBjaGFydHMuIFRoaXMgaGFuZGxlciBvdmVyd3JpdGVzIGluc3RlYWQuIFBlci1pdGVyYXRpb24gcmVzdWx0cyBzdGF5XG4gKiBhZGRyZXNzYWJsZSB0aHJvdWdoIHRoZSBtb3VudCdzIGBydW50aW1lU3RhZ2VJZGAga2V5LCBleGFjdGx5IGFzIHRoZXkgZG8gZm9yXG4gKiBhIGhhbmQtYXV0aG9yZWQgbG9vcGluZyBzdWJmbG93LlxuICpcbiAqICoqRXZlbnQgb3JkZXIuKiogYG9uU3RhZ2VTdGFydGAg4oaSIHRoZSBgaXRlbXNgIHJlYWQg4oaSIGBvbkZvcmtgIOKGkiBicmFuY2hlcyDihpJcbiAqIHRoZSBvcmRlcmVkLWFycmF5IHdyaXRlIOKGkiBgb25TdGFnZUVuZGAg4oaSIGBvbkNvbW1pdGAuIFRoZSBzdGFnZSdzIG93biBjb21taXRcbiAqIHRoZXJlZm9yZSBsYW5kcyBBRlRFUiBpdHMgYG9uRm9ya2AsIHdoaWNoIGlzIHRoZSBvbmUgcGxhY2UgYSBzdGFnZSdzIGNvbW1pdFxuICogZm9sbG93cyBpdHMgZmFuLW91dCBldmVudCDigJQgdW5hdm9pZGFibGUgYW5kIGhvbmVzdDogdGhlIHJlc3VsdCBpcyBub3RcbiAqIGtub3dhYmxlIHVudGlsIHRoZSBicmFuY2hlcyBzZXR0bGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IElTX1RZUEVEX1NDT1BFIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlUHJvdGVjdGVkU2NvcGUgfSBmcm9tICcuLi8uLi9zY29wZS9wcm90ZWN0aW9uL2NyZWF0ZVByb3RlY3RlZFNjb3BlLmpzJztcbmltcG9ydCB7IGJ1aWxkQnJhbmNoU2VnbWVudCB9IGZyb20gJy4uL2JyYW5jaFNlZ21lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIEhhbmRsZXJEZXBzLCBOb2RlUmVzdWx0VHlwZSwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDaGlsZHJlbkV4ZWN1dG9yIH0gZnJvbSAnLi9DaGlsZHJlbkV4ZWN1dG9yLmpzJztcblxuLyoqXG4gKiBUcmF2ZXJzZXItb3duZWQgb3BlcmF0aW9ucyB0aGUgaGFuZGxlciBuZWVkcy4gUGFzc2VkIGFzIGZ1bmN0aW9ucyAobm90IHRoZVxuICogdHJhdmVyc2VyKSBzbyB0aGUgaGFuZGxlciBrZWVwcyB0aGUgc2FtZSBuby1iYWNrLXJlZmVyZW5jZSBzaGFwZSBhcyBldmVyeVxuICogb3RoZXIgaGFuZGxlciBpbiB0aGlzIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hIb29rczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIFRoZSB0cmF2ZXJzZXIncyBgcHJlZml4Tm9kZVRyZWVgIOKAlCBieXRlLXR3aW4gb2YgdGhlIGJ1aWxkZXIncyBgX3ByZWZpeE5vZGVUcmVlYC4gKi9cbiAgcHJlZml4Tm9kZVRyZWUobm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIHByZWZpeDogc3RyaW5nKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBSZWdpc3RlciAoT1ZFUldSSVRJTkcpIGEgZ2VuZXJhdGVkIGJyYW5jaCBzdWJmbG93ICsgaXRzIHN0YWdlIGZ1bmN0aW9ucy4gKi9cbiAgcmVnaXN0ZXJCcmFuY2hTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nLCByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgY2hhcnQ6IEJyYW5jaENoYXJ0KTogdm9pZDtcbiAgLyoqIFJlYWQgYSBjb21wbGV0ZWQgYnJhbmNoJ3MgZmluYWwgc2hhcmVkIHN0YXRlLCBmb3IgdGhlIGBzdWJmbG93T3V0cHV0ID8/IHN0YXRlYCBmYWxsYmFjay4gKi9cbiAgYnJhbmNoU2hhcmVkU3RhdGUoc3ViZmxvd0lkOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgLyoqIE1pcnJvciB0aGUgZ2VuZXJhdGVkIGJyYW5jaGVzIGludG8gdGhlIHJ1bnRpbWUgc3RydWN0dXJlLCBmb3IgdmlzdWFsaXphdGlvbi4gKi9cbiAgcmVjb3JkQnJhbmNoU3RydWN0dXJlKG5vZGVJZDogc3RyaW5nLCBicmFuY2hlczogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbEZvckVhY2hIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkV4ZWN1dG9yOiBDaGlsZHJlbkV4ZWN1dG9yPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBob29rczogUGFyYWxsZWxGb3JFYWNoSG9va3M8VE91dCwgVFNjb3BlPixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGZhbi1vdXQgdG8gY29tcGxldGlvbiBhbmQgY29tbWl0IHRoZSBvcmRlcmVkIHJlc3VsdHMuXG4gICAqIFJldHVybnMgdGhlIHJlc3VsdHMgYXJyYXkgKHRoZSBzdGFnZSdzIG91dHB1dCkuXG4gICAqL1xuICBhc3luYyBydW4oXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0cmF2ZXJzYWxDb250ZXh0OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5vZGUucGFyYWxsZWxGb3JFYWNoIGFzIFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+O1xuXG4gICAgLy8gU2FtZSBzY29wZSBjb25zdHJ1Y3Rpb24gU3RhZ2VSdW5uZXIgcGVyZm9ybXMsIHByb3RlY3Rpb24gaW5jbHVkZWQ6IHRoaXNcbiAgICAvLyBzdGFnZSBoYXMgbm8gdXNlciBmdW5jdGlvbiwgYnV0IGBpdGVtcyhzY29wZSlgIElTIHVzZXIgY29kZSwgc28gaXRzIHJlYWRzXG4gICAgLy8gYXJlIHRyYWNrZWQgYW5kIGEgc3RyYXkgYXNzaWdubWVudCBpbnNpZGUgaXQgaXMgY2F1Z2h0IGJ5IHRoZSBzYW1lXG4gICAgLy8gcHJvdGVjdGlvbiBldmVyeSBvdGhlciBzdGFnZSBnZXRzLiAoVHlwZWRTY29wZSBicmluZ3MgaXRzIG93biBwcm94eS4pXG4gICAgY29uc3QgcmF3U2NvcGUgPSB0aGlzLmRlcHMuc2NvcGVGYWN0b3J5KGNvbnRleHQsIG5vZGUubmFtZSwgdGhpcy5kZXBzLnJlYWRPbmx5Q29udGV4dCwgdGhpcy5kZXBzLmV4ZWN1dGlvbkVudik7XG4gICAgY29uc3QgaXNUeXBlZFNjb3BlID0gcmF3U2NvcGUgJiYgKHJhd1Njb3BlIGFzIGFueSlbSVNfVFlQRURfU0NPUEVdID09PSB0cnVlO1xuICAgIGNvbnN0IHNjb3BlID0gaXNUeXBlZFNjb3BlXG4gICAgICA/IHJhd1Njb3BlXG4gICAgICA6IChjcmVhdGVQcm90ZWN0ZWRTY29wZShyYXdTY29wZSBhcyBvYmplY3QsIHtcbiAgICAgICAgICBtb2RlOiB0aGlzLmRlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICAgICAgICBzdGFnZU5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgfSkgYXMgVFNjb3BlKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZVN0YXJ0Jyk7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVzb2x2ZUl0ZW1zKGNvbmZpZywgc2NvcGUsIG5vZGUpO1xuICAgIGNvbnN0IHRvdGFsID0gaXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGJyYW5jaENvdW50ID0gTWF0aC5taW4odG90YWwsIGNvbmZpZy5tYXhCcmFuY2hlcyk7XG4gICAgY29uc3QgdHJ1bmNhdGVkID0gdG90YWwgPiBicmFuY2hDb3VudDtcblxuICAgIGNvbnRleHQuYWRkTG9nKCdwYXJhbGxlbEZvckVhY2gnLCB7XG4gICAgICBpdGVtczogdG90YWwsXG4gICAgICBicmFuY2hlczogYnJhbmNoQ291bnQsXG4gICAgICBtYXhCcmFuY2hlczogY29uZmlnLm1heEJyYW5jaGVzLFxuICAgICAgdHJ1bmNhdGVkLFxuICAgICAgaW50bzogY29uZmlnLmludG8sXG4gICAgfSk7XG4gICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgLy8gU3RhdGVkLCBub3Qgc2lsZW50IOKAlCBpbiB0aGUgc3RhZ2UncyBvd24gZmxvdyBtZXNzYWdlcyBBTkQgaXRzIGxvZ3MgYWJvdmUuXG4gICAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoXG4gICAgICAgICdjaGlsZHJlbicsXG4gICAgICAgIGBtYXhCcmFuY2hlcyByZWFjaGVkOiBydW5uaW5nICR7YnJhbmNoQ291bnR9IG9mICR7dG90YWx9IGl0ZW1zICgke3RvdGFsIC0gYnJhbmNoQ291bnR9IG5vdCBydW4pYCxcbiAgICAgICAgeyBjb3VudDogYnJhbmNoQ291bnQgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdHM6IHVua25vd25bXTtcbiAgICBpZiAoYnJhbmNoQ291bnQgPT09IDApIHtcbiAgICAgIC8vIFplcm8gaXRlbXMgPSB6ZXJvIGJyYW5jaGVzOiBubyBmYW4tb3V0IGV2ZW50LCBhbiBlbXB0eSBvcmRlcmVkIGFycmF5LlxuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBicmFuY2hlcyA9IHRoaXMuYnVpbGRCcmFuY2hlcyhub2RlLCBpdGVtcywgYnJhbmNoQ291bnQpO1xuICAgICAgdGhpcy5ob29rcy5yZWNvcmRCcmFuY2hTdHJ1Y3R1cmUobm9kZS5pZCwgYnJhbmNoZXMpO1xuXG4gICAgICAvLyBUaGUgZmFuLW91dCBub2RlIGhhbmRlZCB0byBDaGlsZHJlbkV4ZWN1dG9yIGlzIGEgdGVtcCB2aWV3IGNhcnJ5aW5nIHRoZVxuICAgICAgLy8gZ2VuZXJhdGVkIGJyYW5jaGVzIChzYW1lIHNoYXBlIGBleGVjdXRlU2VsZWN0ZWRDaGlsZHJlbmAgdXNlcyBmb3IgaXRzXG4gICAgICAvLyBzZWxlY3RlZCBzdWJzZXQpIOKAlCB0aGUgc2hhcmVkIGdyYXBoIG5vZGUgaXMgbmV2ZXIgbXV0YXRlZCwgc28gYSBsb29wXG4gICAgICAvLyByZXZpc2l0IHJlZ2VuZXJhdGVzIGNsZWFubHkuXG4gICAgICBjb25zdCBmb3JrVmlldzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICAgIC4uLm5vZGUsXG4gICAgICAgIGNoaWxkcmVuOiBicmFuY2hlcyxcbiAgICAgICAgLi4uKGNvbmZpZy5mYWlsRmFzdCAhPT0gdW5kZWZpbmVkICYmIHsgZmFpbEZhc3Q6IGNvbmZpZy5mYWlsRmFzdCB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0cyA9IGF3YWl0IHRoaXMuY2hpbGRyZW5FeGVjdXRvci5leGVjdXRlTm9kZUNoaWxkcmVuKFxuICAgICAgICBmb3JrVmlldyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBicmFuY2hQYXRoLFxuICAgICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgKTtcblxuICAgICAgcmVzdWx0cyA9IHRoaXMuY29sbGVjdE9yZGVyZWQobm9kZSwgYnJhbmNoQ291bnQsIGNoaWxkUmVzdWx0cyk7XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVJlc3VsdHMocmF3U2NvcGUsIGNvbnRleHQsIGNvbmZpZy5pbnRvLCByZXN1bHRzKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZUVuZCcpO1xuICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB0aGUgaXRlbXMgc2VsZWN0b3IgYWdhaW5zdCB0aGUgbGl2ZSBzY29wZS4gQSBub24tYXJyYXkgcmV0dXJuIGlzXG4gICAqIGEgY2hhcnQgYnVnLCBub3QgYSBydW50aW1lIGNvbmRpdGlvbiDigJQgaXQgZmFpbHMgbG91ZGx5LCBuYW1pbmcgdGhlIHN0YWdlLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlSXRlbXMoXG4gICAgY29uZmlnOiBQYXJhbGxlbEZvckVhY2hDb25maWc8dW5rbm93biwgVFNjb3BlPixcbiAgICBzY29wZTogVFNjb3BlLFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICApOiByZWFkb25seSB1bmtub3duW10ge1xuICAgIGNvbnN0IGl0ZW1zID0gY29uZmlnLml0ZW1zKHNjb3BlKTtcbiAgICBpZiAoaXRlbXMgPT09IHVuZGVmaW5lZCB8fCBpdGVtcyA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHBhcmFsbGVsRm9yRWFjaCAnJHtub2RlLmlkfSc6IGl0ZW1zKCkgbXVzdCByZXR1cm4gYW4gYXJyYXkgKGdvdCAke3R5cGVvZiBpdGVtc30pLiBgICtcbiAgICAgICAgICAnUmV0dXJuIFtdIHRvIHJ1biB6ZXJvIGJyYW5jaGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICAvKiogR2VuZXJhdGUgb25lIHN1YmZsb3ctbW91bnQgbm9kZSBwZXIgYnJhbmNoLCByZWdpc3RlcmluZyBlYWNoIGJyYW5jaCBjaGFydC4gKi9cbiAgcHJpdmF0ZSBidWlsZEJyYW5jaGVzKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGl0ZW1zOiByZWFkb25seSB1bmtub3duW10sXG4gICAgYnJhbmNoQ291bnQ6IG51bWJlcixcbiAgKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSB7XG4gICAgY29uc3QgY29uZmlnID0gbm9kZS5wYXJhbGxlbEZvckVhY2ggYXMgUGFyYWxsZWxGb3JFYWNoQ29uZmlnPHVua25vd24sIFRTY29wZT47XG4gICAgY29uc3QgYnJhbmNoZXM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBicmFuY2hDb3VudDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICAgIGNvbnN0IHN1YmZsb3dJZCA9IGJ1aWxkQnJhbmNoU2VnbWVudChub2RlLmlkLCBpbmRleCk7XG4gICAgICBjb25zdCBjaGFydCA9IGNvbmZpZy5icmFuY2goaXRlbSwgaW5kZXgpO1xuICAgICAgaWYgKCFjaGFydCB8fCAhY2hhcnQucm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHBhcmFsbGVsRm9yRWFjaCAnJHtub2RlLmlkfSc6IGJyYW5jaChpdGVtLCAke2luZGV4fSkgbXVzdCByZXR1cm4gYSBidWlsdCBjaGFydCBgICtcbiAgICAgICAgICAgICcodGhlIHJlc3VsdCBvZiBmbG93Q2hhcnQoLi4uKS5idWlsZCgpKS4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTYW1lIHByZWZpeGluZyBhIGxhenkgc3ViZmxvdyBnZXRzIOKAlCB0aGUgYnJhbmNoJ3MgaW5uZXIgaWRzIGJlY29tZVxuICAgICAgLy8gYDxzZWdtZW50Pi88aWQ+YCwgc28gaXRzIHN0YWdlcyBhZGRyZXNzIGFzIGA8c2VnbWVudD4vPGlkPiM8bj5gLlxuICAgICAgY29uc3QgcHJlZml4ZWRSb290ID0gdGhpcy5ob29rcy5wcmVmaXhOb2RlVHJlZShjaGFydC5yb290IGFzIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBzdWJmbG93SWQpO1xuICAgICAgdGhpcy5ob29rcy5yZWdpc3RlckJyYW5jaFN1YmZsb3coc3ViZmxvd0lkLCBwcmVmaXhlZFJvb3QsIGNoYXJ0KTtcblxuICAgICAgYnJhbmNoZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGAke25vZGUubmFtZX0gWyR7aW5kZXh9XWAsXG4gICAgICAgIGlkOiBzdWJmbG93SWQsXG4gICAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICAgIHN1YmZsb3dJZCxcbiAgICAgICAgc3ViZmxvd05hbWU6IGAke25vZGUubmFtZX0gWyR7aW5kZXh9XWAsXG4gICAgICAgIHN1YmZsb3dNb3VudE9wdGlvbnM6IHtcbiAgICAgICAgICAvLyBEMSdzIFwiaW5wdXRNYXBwZXIgc2VhbSBmb3IgZmVlZGluZyB0aGUgaXRlbSBpblwiOiB0aGUgaXRlbSBpc1xuICAgICAgICAgIC8vIHZpc2libGUgSU4gdGhlIGJyYW5jaCdzIHNjb3BlIChhbmQgc28gaW4gaXRzIGNvbW1pdCBsb2cpIGFzIHdlbGwgYXNcbiAgICAgICAgICAvLyBjbG9zZWQgb3ZlciBieSB0aGUgZmFjdG9yeSDigJQgcHJvdmVuYW5jZSBiZWF0cyBhIGhpZGRlbiBjbG9zdXJlLlxuICAgICAgICAgIGlucHV0TWFwcGVyOiAoKSA9PiAoeyBpdGVtLCBpbmRleCB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBicmFuY2hlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSByZXN1bHRzIGluIElURU1TIG9yZGVyIOKAlCBuZXZlciBjb21wbGV0aW9uIG9yZGVyLlxuICAgKlxuICAgKiBUaGUgYnJhbmNoJ3MgdmFsdWUgaXMgaXRzIHN1YmZsb3cgb3V0cHV0LCBmYWxsaW5nIGJhY2sgdG8gdGhlIGJyYW5jaCdzXG4gICAqIGZpbmFsIHNoYXJlZCBzdGF0ZSAodGhlIFR5cGVkU2NvcGUgY2FzZSwgd2hlcmUgc3RhZ2UgZnVuY3Rpb25zIHJldHVyblxuICAgKiB2b2lkKSDigJQgdGhlIHNhbWUgYHN1YmZsb3dPdXRwdXQgPz8gc2hhcmVkU3RhdGVgIHJ1bGUgYFN1YmZsb3dFeGVjdXRvcmBcbiAgICogYXBwbGllcyB0byBhbiBvdXRwdXRNYXBwZXIuXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3RPcmRlcmVkKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGJyYW5jaENvdW50OiBudW1iZXIsXG4gICAgY2hpbGRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlUmVzdWx0VHlwZT4sXG4gICk6IHVua25vd25bXSB7XG4gICAgY29uc3Qgb3JkZXJlZDogdW5rbm93bltdID0gW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJyYW5jaENvdW50OyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBidWlsZEJyYW5jaFNlZ21lbnQobm9kZS5pZCwgaW5kZXgpO1xuICAgICAgY29uc3QgZW50cnkgPSBjaGlsZFJlc3VsdHNbc3ViZmxvd0lkXTtcbiAgICAgIGlmIChlbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LmlzRXJyb3IpIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgbW9kZTogYSBmYWlsZWQgYnJhbmNoIGtlZXBzIGl0cyBTTE9UIChvcmRlciBpcyBpdGVtc1xuICAgICAgICAvLyBvcmRlcikgd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUuIGZhaWxGYXN0IG1vZGUgbmV2ZXIgcmVhY2hlcyBoZXJlIOKAlFxuICAgICAgICAvLyB0aGUgZXJyb3IgYWxyZWFkeSByZWplY3RlZCB0aGUgd2hvbGUgc3RhZ2UuXG4gICAgICAgIG9yZGVyZWQucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG9yZGVyZWQucHVzaChlbnRyeS5yZXN1bHQgPz8gdGhpcy5ob29rcy5icmFuY2hTaGFyZWRTdGF0ZShzdWJmbG93SWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdGhlIG9yZGVyZWQgYXJyYXkgYXMgT05FIHZhbHVlIG9uIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqIGAkc2V0VmFsdWVgIGRlbGliZXJhdGVseSwgd2hlcmUgYXZhaWxhYmxlOiB0aGUgVHlwZWRTY29wZSBzZXQgdHJhcFxuICAgKiBKU09OLXJvdW5kLXRyaXBzIGV2ZXJ5IG9iamVjdCB3cml0ZSAoRGF0ZeKGknN0cmluZywgTWFw4oaSe30pLCBhbmQgYnJhbmNoXG4gICAqIHJlc3VsdHMgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgcGF5bG9hZCB0aGF0IHdvdWxkIHNpbGVudGx5IGRlZ3JhZGUuXG4gICAqL1xuICBwcml2YXRlIHdyaXRlUmVzdWx0cyhyYXdTY29wZTogVFNjb3BlLCBjb250ZXh0OiBTdGFnZUNvbnRleHQsIGludG86IHN0cmluZywgcmVzdWx0czogdW5rbm93bltdKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHJhd1Njb3BlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiBzPy4kc2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChzLiRzZXRWYWx1ZSBhcyAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKShpbnRvLCByZXN1bHRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzPy5zZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKHMuc2V0VmFsdWUgYXMgKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkoaW50bywgcmVzdWx0cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE5vIGZhY2FkZSAoaGFuZC1yb2xsZWQgc2NvcGUgZmFjdG9yeSkg4oCUIHdyaXRlIHN0cmFpZ2h0IHRvIHRoZSBmcmFtZS5cbiAgICBjb250ZXh0LnNldEdsb2JhbChpbnRvLCByZXN1bHRzKTtcbiAgfVxufVxuXG4vKiogRmlyZSBhIHNjb3BlIGxpZmVjeWNsZSBub3RpZmljYXRpb24gaWYgdGhlIHNjb3BlIHN1cHBvcnRzIGl0LiAqL1xuZnVuY3Rpb24gbm90aWZ5KHNjb3BlOiB1bmtub3duLCBtZXRob2Q6ICdub3RpZnlTdGFnZVN0YXJ0JyB8ICdub3RpZnlTdGFnZUVuZCcpOiB2b2lkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBpZiAocyAmJiB0eXBlb2Ygc1ttZXRob2RdID09PSAnZnVuY3Rpb24nKSAoc1ttZXRob2RdIGFzICgpID0+IHZvaWQpKCk7XG59XG4iXX0=
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYWxsZWxGb3JFYWNoSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL1BhcmFsbGVsRm9yRWFjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtREc7OztBQUdILDBEQUEwRDtBQUMxRCxzREFBeUQ7QUFDekQsNEZBQXNGO0FBQ3RGLDBEQUF5RDtBQXNCekQsTUFBYSxzQkFBc0I7SUFFdkI7SUFDQTtJQUNBO0lBSFYsWUFDVSxJQUErQixFQUMvQixnQkFBZ0QsRUFDaEQsS0FBeUM7UUFGekMsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQztRQUNoRCxVQUFLLEdBQUwsS0FBSyxDQUFvQztJQUNoRCxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FDUCxJQUE2QixFQUM3QixPQUFxQixFQUNyQixVQUE4QixFQUM5QixnQkFBa0M7UUFFbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQXlELENBQUM7UUFFOUUsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0csTUFBTSxZQUFZLEdBQUcsUUFBUSxJQUFLLFFBQWdCLENBQUMseUJBQWMsQ0FBQyxLQUFLLElBQUksQ0FBQztRQUM1RSxNQUFNLEtBQUssR0FBRyxZQUFZO1lBQ3hCLENBQUMsQ0FBQyxRQUFRO1lBQ1YsQ0FBQyxDQUFF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QUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQXFCLEVBQUUsSUFBWSxFQUFFLE9BQWtCO1FBQzVGLE1BQU0sQ0FBQyxHQUFHLFFBQThDLENBQUM7UUFDekQsSUFBSSxPQUFPLENBQUMsRUFBRSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLFNBQW1ELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQWtELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JFLE9BQU87UUFDVCxDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQWxORCx3REFrTkM7QUFFRCxvRUFBb0U7QUFDcEUsU0FBUyxNQUFNLENBQUMsS0FBYyxFQUFFLE1BQTZDO0lBQzNFLE1BQU0sQ0FBQyxHQUFHLEtBQTRDLENBQUM7SUFDdkQsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVTtRQUFHLENBQUMsQ0FBQyxNQUFNLENBQWdCLEVBQUUsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJhbGxlbEZvckVhY2hIYW5kbGVyIOKAlCBkeW5hbWljIGZhbi1vdXQ6IG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBDT1VOVFxuICogZGVjaWRlZCBhdCBydW50aW1lIGZyb20gdGhlIHBheWxvYWQuXG4gKlxuICogRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDEgKyBEMikuIFJvdW5kIEIgYnVpbGRzIGV4YWN0bHlcbiAqIHRoYXQgZG9jdW1lbnQuXG4gKlxuICogIyMgV2hhdCB0aGlzIGhhbmRsZXIgZG9lcyBOT1QgaW52ZW50XG4gKlxuICogQWxtb3N0IGV2ZXJ5dGhpbmcgaGVyZSBpcyBleGlzdGluZyBtYWNoaW5lcnksIHdpcmVkIHRvZ2V0aGVyOlxuICpcbiAqIC0gKipFYWNoIGJyYW5jaCBpcyBhIGdlbmVyYXRlZCBTVUJGTE9XLioqIEl0cyBwYXRoIHNlZ21lbnQgaXNcbiAqICAgYDxwYXJlbnRTdGFnZUlkPn48aW5kZXg+YCAoc2VlIGBlbmdpbmUvYnJhbmNoU2VnbWVudC50c2ApIOKAlCBhIHN1YmZsb3dQYXRoXG4gKiAgIHNlZ21lbnQgaW4gdGhlIGdyYW1tYXIgdGhhdCBhbHJlYWR5IHNoaXBzLCBOT1QgYSBuZXcgZGVsaW1pdGVyIGNsYXNzLiBTbyBhXG4gKiAgIGJyYW5jaCBnZXRzLCBmb3IgZnJlZTogYSBmcmVzaCBpc29sYXRlZCBgRXhlY3V0aW9uUnVudGltZWAgKGJyYW5jaGVzIGNhbm5vdFxuICogICBjb3JydXB0IGVhY2ggb3RoZXIncyBpbi1mbGlnaHQgc3RhdGUpLCB0aGUgaW5wdXRNYXBwZXIgc2VhbSBmb3IgZmVlZGluZyB0aGVcbiAqICAgaXRlbSBpbiwgYW5kIOKAlCB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIGRlc2lnbiDigJQgYHBhcnNlUnVudGltZVN0YWdlSWRgLFxuICogICBgY2F1c2FsQ2hhaW5gLCBgc2xpY2VGb3JLZXlgIGFuZCBgZm9yd2FyZFNsaWNlRm9yS2V5YCByZWFkaW5nIGJyYW5jaFxuICogICBjb21taXRzIHdpdGggWkVSTyBjaGFuZ2VzLCBiZWNhdXNlIHRoZSBpZCBzaGFwZSBJUyB0aGUgc2hpcHBlZCBzaGFwZS5cbiAqIC0gKipUaGUgZmFuLW91dCBpdHNlbGYgaXMgYENoaWxkcmVuRXhlY3V0b3JgLioqIFRoYXQgaXMgd2hhdCBtYWtlcyB0aGVcbiAqICAgZmFpbHVyZSBwb2xpY3kgXCJQYXJhbGxlbCdzIGV4aXN0aW5nIGZhaWx1cmUgcG9saWN5XCIgcmF0aGVyIHRoYW4gYSBzZWNvbmRcbiAqICAgb25lOiBgZmFpbEZhc3RgIOKGkiBgUHJvbWlzZS5hbGxgLCBvdGhlcndpc2UgYmVzdC1lZmZvcnQgYFByb21pc2UuYWxsU2V0dGxlZGAuXG4gKiAgIEl0IGFsc28gZmlyZXMgYG9uRm9ya2AgKyBgb25TdGFnZUV4ZWN1dGVkKCdmb3JrJylgIGFuZCBidWJibGVzIGFcbiAqICAgYFBhdXNlU2lnbmFsYCBvdXQgb2YgYSBicmFuY2gsIGFsbCB1bmNoYW5nZWQuXG4gKlxuICogIyMgVGhlIGxhd3MgdGhpcyBoYW5kbGVyIG93bnNcbiAqXG4gKiAqKk9yZGVyIGlzIGl0ZW1zIG9yZGVyLioqIFJlc3VsdHMgYXJlIGFzc2VtYmxlZCBieSBpbmRleCBmcm9tIHRoZSBmYW4tb3V0J3NcbiAqIGtleWVkIHJlc3VsdHMsIG5ldmVyIGJ5IGNvbXBsZXRpb24gb3JkZXIsIGFuZCBsYW5kIGFzIE9ORSBhcnJheSB3cml0ZSBvbiB0aGVcbiAqIHBhcmVudCDigJQgc28gYGludG9baV1gIGlzIGFsd2F5cyBicmFuY2ggYGlgJ3MgcmVzdWx0IG5vIG1hdHRlciB3aGljaCBicmFuY2hcbiAqIGZpbmlzaGVkIGZpcnN0LiBBIGZhaWxlZCBicmFuY2ggKGJlc3QtZWZmb3J0IG1vZGUpIGxlYXZlcyBgdW5kZWZpbmVkYCBpbiBpdHNcbiAqIHNsb3Q7IHdoaWNoIGJyYW5jaCBmYWlsZWQgaXMgbm90IHJlcG9ydGVkIGhlcmUsIGJlY2F1c2UgdGhhdCBnYXAgaXNcbiAqIHByZS1leGlzdGluZyBpbiB0aGUgcGFyYWxsZWwgZmFuLW91dCBhbmQgbm90IHRoaXMgZmVhdHVyZSdzIHRvIHdpZGVuLlxuICpcbiAqICoqbWF4QnJhbmNoZXMgdHJ1bmNhdGVzLCBhbmQgc2F5cyBzby4qKiBJdGVtcyBwYXN0IHRoZSBjZWlsaW5nIGRvIG5vdCBydW4uXG4gKiBUaGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCBpbiB0aGUgc3RhZ2UncyBvd24gY29tbWl0LXZpc2libGUgbG9nIGFuZCBhcyBhXG4gKiBmbG93IG1lc3NhZ2Ug4oCUIGJvdW5kZWQgZXhlY3V0aW9uLCBzdGF0ZWQsIG5ldmVyIHNpbGVudC5cbiAqXG4gKiAqKkJyYW5jaCBjaGFydHMgYXJlIHJlLXJlZ2lzdGVyZWQgb24gRVZFUlkgdmlzaXQuKiogVGhlIGdlbmVyYXRlZCBzZWdtZW50c1xuICogYXJlIHN0YWJsZSBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBhbmQgc3ViZmxvdyByZWdpc3RyYXRpb24gaXMgbm9ybWFsbHlcbiAqIGZpcnN0LXdyaXRlLXdpbnMg4oCUIHdoaWNoIHdvdWxkIG1lYW4gYSBsb29waW5nIGZhbi1vdXQgc2lsZW50bHkgcmUtZXhlY3V0aW5nXG4gKiBpdGVyYXRpb24gMSdzIGJyYW5jaCBjaGFydHMgZm9yZXZlciwgZXZlbiB3aGVuIHRoZSBmYWN0b3J5IHJldHVybnMgZGlmZmVyZW50XG4gKiBjaGFydHMuIFRoaXMgaGFuZGxlciBvdmVyd3JpdGVzIGluc3RlYWQuIFBlci1pdGVyYXRpb24gcmVzdWx0cyBzdGF5XG4gKiBhZGRyZXNzYWJsZSB0aHJvdWdoIHRoZSBtb3VudCdzIGBydW50aW1lU3RhZ2VJZGAga2V5LCBleGFjdGx5IGFzIHRoZXkgZG8gZm9yXG4gKiBhIGhhbmQtYXV0aG9yZWQgbG9vcGluZyBzdWJmbG93LlxuICpcbiAqICoqRXZlbnQgb3JkZXIuKiogYG9uU3RhZ2VTdGFydGAg4oaSIHRoZSBgaXRlbXNgIHJlYWQg4oaSIGBvbkZvcmtgIOKGkiBicmFuY2hlcyDihpJcbiAqIHRoZSBvcmRlcmVkLWFycmF5IHdyaXRlIOKGkiBgb25TdGFnZUVuZGAg4oaSIGBvbkNvbW1pdGAuIFRoZSBzdGFnZSdzIG93biBjb21taXRcbiAqIHRoZXJlZm9yZSBsYW5kcyBBRlRFUiBpdHMgYG9uRm9ya2AsIHdoaWNoIGlzIHRoZSBvbmUgcGxhY2UgYSBzdGFnZSdzIGNvbW1pdFxuICogZm9sbG93cyBpdHMgZmFuLW91dCBldmVudCDigJQgdW5hdm9pZGFibGUgYW5kIGhvbmVzdDogdGhlIHJlc3VsdCBpcyBub3RcbiAqIGtub3dhYmxlIHVudGlsIHRoZSBicmFuY2hlcyBzZXR0bGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IHVud3JhcEhhbmRsZXMgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS9oYW5kbGVzLmpzJztcbmltcG9ydCB7IElTX1RZUEVEX1NDT1BFIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlUHJvdGVjdGVkU2NvcGUgfSBmcm9tICcuLi8uLi9zY29wZS9wcm90ZWN0aW9uL2NyZWF0ZVByb3RlY3RlZFNjb3BlLmpzJztcbmltcG9ydCB7IGJ1aWxkQnJhbmNoU2VnbWVudCB9IGZyb20gJy4uL2JyYW5jaFNlZ21lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIEhhbmRsZXJEZXBzLCBOb2RlUmVzdWx0VHlwZSwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDaGlsZHJlbkV4ZWN1dG9yIH0gZnJvbSAnLi9DaGlsZHJlbkV4ZWN1dG9yLmpzJztcblxuLyoqXG4gKiBUcmF2ZXJzZXItb3duZWQgb3BlcmF0aW9ucyB0aGUgaGFuZGxlciBuZWVkcy4gUGFzc2VkIGFzIGZ1bmN0aW9ucyAobm90IHRoZVxuICogdHJhdmVyc2VyKSBzbyB0aGUgaGFuZGxlciBrZWVwcyB0aGUgc2FtZSBuby1iYWNrLXJlZmVyZW5jZSBzaGFwZSBhcyBldmVyeVxuICogb3RoZXIgaGFuZGxlciBpbiB0aGlzIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hIb29rczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIFRoZSB0cmF2ZXJzZXIncyBgcHJlZml4Tm9kZVRyZWVgIOKAlCBieXRlLXR3aW4gb2YgdGhlIGJ1aWxkZXIncyBgX3ByZWZpeE5vZGVUcmVlYC4gKi9cbiAgcHJlZml4Tm9kZVRyZWUobm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIHByZWZpeDogc3RyaW5nKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBSZWdpc3RlciAoT1ZFUldSSVRJTkcpIGEgZ2VuZXJhdGVkIGJyYW5jaCBzdWJmbG93ICsgaXRzIHN0YWdlIGZ1bmN0aW9ucy4gKi9cbiAgcmVnaXN0ZXJCcmFuY2hTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nLCByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgY2hhcnQ6IEJyYW5jaENoYXJ0KTogdm9pZDtcbiAgLyoqIFJlYWQgYSBjb21wbGV0ZWQgYnJhbmNoJ3MgZmluYWwgc2hhcmVkIHN0YXRlLCBmb3IgdGhlIGBzdWJmbG93T3V0cHV0ID8/IHN0YXRlYCBmYWxsYmFjay4gKi9cbiAgYnJhbmNoU2hhcmVkU3RhdGUoc3ViZmxvd0lkOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgLyoqIE1pcnJvciB0aGUgZ2VuZXJhdGVkIGJyYW5jaGVzIGludG8gdGhlIHJ1bnRpbWUgc3RydWN0dXJlLCBmb3IgdmlzdWFsaXphdGlvbi4gKi9cbiAgcmVjb3JkQnJhbmNoU3RydWN0dXJlKG5vZGVJZDogc3RyaW5nLCBicmFuY2hlczogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbEZvckVhY2hIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkV4ZWN1dG9yOiBDaGlsZHJlbkV4ZWN1dG9yPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBob29rczogUGFyYWxsZWxGb3JFYWNoSG9va3M8VE91dCwgVFNjb3BlPixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGZhbi1vdXQgdG8gY29tcGxldGlvbiBhbmQgY29tbWl0IHRoZSBvcmRlcmVkIHJlc3VsdHMuXG4gICAqIFJldHVybnMgdGhlIHJlc3VsdHMgYXJyYXkgKHRoZSBzdGFnZSdzIG91dHB1dCkuXG4gICAqL1xuICBhc3luYyBydW4oXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0cmF2ZXJzYWxDb250ZXh0OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5vZGUucGFyYWxsZWxGb3JFYWNoIGFzIFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+O1xuXG4gICAgLy8gU2FtZSBzY29wZSBjb25zdHJ1Y3Rpb24gU3RhZ2VSdW5uZXIgcGVyZm9ybXMsIHByb3RlY3Rpb24gaW5jbHVkZWQ6IHRoaXNcbiAgICAvLyBzdGFnZSBoYXMgbm8gdXNlciBmdW5jdGlvbiwgYnV0IGBpdGVtcyhzY29wZSlgIElTIHVzZXIgY29kZSwgc28gaXRzIHJlYWRzXG4gICAgLy8gYXJlIHRyYWNrZWQgYW5kIGEgc3RyYXkgYXNzaWdubWVudCBpbnNpZGUgaXQgaXMgY2F1Z2h0IGJ5IHRoZSBzYW1lXG4gICAgLy8gcHJvdGVjdGlvbiBldmVyeSBvdGhlciBzdGFnZSBnZXRzLiAoVHlwZWRTY29wZSBicmluZ3MgaXRzIG93biBwcm94eS4pXG4gICAgY29uc3QgcmF3U2NvcGUgPSB0aGlzLmRlcHMuc2NvcGVGYWN0b3J5KGNvbnRleHQsIG5vZGUubmFtZSwgdGhpcy5kZXBzLnJlYWRPbmx5Q29udGV4dCwgdGhpcy5kZXBzLmV4ZWN1dGlvbkVudik7XG4gICAgY29uc3QgaXNUeXBlZFNjb3BlID0gcmF3U2NvcGUgJiYgKHJhd1Njb3BlIGFzIGFueSlbSVNfVFlQRURfU0NPUEVdID09PSB0cnVlO1xuICAgIGNvbnN0IHNjb3BlID0gaXNUeXBlZFNjb3BlXG4gICAgICA/IHJhd1Njb3BlXG4gICAgICA6IChjcmVhdGVQcm90ZWN0ZWRTY29wZShyYXdTY29wZSBhcyBvYmplY3QsIHtcbiAgICAgICAgICBtb2RlOiB0aGlzLmRlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICAgICAgICBzdGFnZU5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgfSkgYXMgVFNjb3BlKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZVN0YXJ0Jyk7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVzb2x2ZUl0ZW1zKGNvbmZpZywgc2NvcGUsIG5vZGUpO1xuICAgIGNvbnN0IHRvdGFsID0gaXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGJyYW5jaENvdW50ID0gTWF0aC5taW4odG90YWwsIGNvbmZpZy5tYXhCcmFuY2hlcyk7XG4gICAgY29uc3QgdHJ1bmNhdGVkID0gdG90YWwgPiBicmFuY2hDb3VudDtcblxuICAgIGNvbnRleHQuYWRkTG9nKCdwYXJhbGxlbEZvckVhY2gnLCB7XG4gICAgICBpdGVtczogdG90YWwsXG4gICAgICBicmFuY2hlczogYnJhbmNoQ291bnQsXG4gICAgICBtYXhCcmFuY2hlczogY29uZmlnLm1heEJyYW5jaGVzLFxuICAgICAgdHJ1bmNhdGVkLFxuICAgICAgaW50bzogY29uZmlnLmludG8sXG4gICAgfSk7XG4gICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgLy8gU3RhdGVkLCBub3Qgc2lsZW50IOKAlCBpbiB0aGUgc3RhZ2UncyBvd24gZmxvdyBtZXNzYWdlcyBBTkQgaXRzIGxvZ3MgYWJvdmUuXG4gICAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoXG4gICAgICAgICdjaGlsZHJlbicsXG4gICAgICAgIGBtYXhCcmFuY2hlcyByZWFjaGVkOiBydW5uaW5nICR7YnJhbmNoQ291bnR9IG9mICR7dG90YWx9IGl0ZW1zICgke3RvdGFsIC0gYnJhbmNoQ291bnR9IG5vdCBydW4pYCxcbiAgICAgICAgeyBjb3VudDogYnJhbmNoQ291bnQgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdHM6IHVua25vd25bXTtcbiAgICBpZiAoYnJhbmNoQ291bnQgPT09IDApIHtcbiAgICAgIC8vIFplcm8gaXRlbXMgPSB6ZXJvIGJyYW5jaGVzOiBubyBmYW4tb3V0IGV2ZW50LCBhbiBlbXB0eSBvcmRlcmVkIGFycmF5LlxuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBicmFuY2hlcyA9IHRoaXMuYnVpbGRCcmFuY2hlcyhub2RlLCBpdGVtcywgYnJhbmNoQ291bnQpO1xuICAgICAgdGhpcy5ob29rcy5yZWNvcmRCcmFuY2hTdHJ1Y3R1cmUobm9kZS5pZCwgYnJhbmNoZXMpO1xuXG4gICAgICAvLyBUaGUgZmFuLW91dCBub2RlIGhhbmRlZCB0byBDaGlsZHJlbkV4ZWN1dG9yIGlzIGEgdGVtcCB2aWV3IGNhcnJ5aW5nIHRoZVxuICAgICAgLy8gZ2VuZXJhdGVkIGJyYW5jaGVzIChzYW1lIHNoYXBlIGBleGVjdXRlU2VsZWN0ZWRDaGlsZHJlbmAgdXNlcyBmb3IgaXRzXG4gICAgICAvLyBzZWxlY3RlZCBzdWJzZXQpIOKAlCB0aGUgc2hhcmVkIGdyYXBoIG5vZGUgaXMgbmV2ZXIgbXV0YXRlZCwgc28gYSBsb29wXG4gICAgICAvLyByZXZpc2l0IHJlZ2VuZXJhdGVzIGNsZWFubHkuXG4gICAgICBjb25zdCBmb3JrVmlldzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICAgIC4uLm5vZGUsXG4gICAgICAgIGNoaWxkcmVuOiBicmFuY2hlcyxcbiAgICAgICAgLi4uKGNvbmZpZy5mYWlsRmFzdCAhPT0gdW5kZWZpbmVkICYmIHsgZmFpbEZhc3Q6IGNvbmZpZy5mYWlsRmFzdCB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0cyA9IGF3YWl0IHRoaXMuY2hpbGRyZW5FeGVjdXRvci5leGVjdXRlTm9kZUNoaWxkcmVuKFxuICAgICAgICBmb3JrVmlldyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBicmFuY2hQYXRoLFxuICAgICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgKTtcblxuICAgICAgcmVzdWx0cyA9IHRoaXMuY29sbGVjdE9yZGVyZWQobm9kZSwgYnJhbmNoQ291bnQsIGNoaWxkUmVzdWx0cyk7XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVJlc3VsdHMocmF3U2NvcGUsIGNvbnRleHQsIGNvbmZpZy5pbnRvLCByZXN1bHRzKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZUVuZCcpO1xuICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB0aGUgaXRlbXMgc2VsZWN0b3IgYWdhaW5zdCB0aGUgbGl2ZSBzY29wZS4gQSBub24tYXJyYXkgcmV0dXJuIGlzXG4gICAqIGEgY2hhcnQgYnVnLCBub3QgYSBydW50aW1lIGNvbmRpdGlvbiDigJQgaXQgZmFpbHMgbG91ZGx5LCBuYW1pbmcgdGhlIHN0YWdlLlxuICAgKlxuICAgKiBUaGUgc2VsZWN0b3IgcmVhZHMgdGhlIHR5cGVkIHNjb3BlLCBzbyB3aGF0IGl0IHJldHVybnMgaXMgdXN1YWxseSB0aGVcbiAgICogc2NvcGUncyBvd24gYXJyYXkgSEFORExFIChhIFByb3h5IGJvdW5kIHRvIHRoZSBwYXJlbnQgc3RhZ2UpIGFuZCBldmVyeVxuICAgKiBgaXRlbXNbaW5kZXhdYCBhbiBlbGVtZW50IGhhbmRsZS4gVGhlIGl0ZW1zIGFyZSBhYm91dCB0byBjcm9zcyBpbnRvXG4gICAqIGJyYW5jaCBydW50aW1lcyDigJQgY2xvc2VkIG92ZXIgYnkgYGJyYW5jaChpdGVtLCBpbmRleClgIGFuZCBzZWVkZWQgYXMgdGhlXG4gICAqIGJyYW5jaCdzIGBpdGVtYCDigJQgc28gdGhleSBhcmUgdGFrZW4gYXMgVkFMVUVTIGhlcmUgKGB1bndyYXBIYW5kbGVzYCxcbiAgICogcmVhY3RpdmUvaGFuZGxlcy50cykuIDkuMjIuMOKAkzkuMjMuMiBzZWVkZWQgdGhlIGhhbmRsZSBpdHNlbGYgYW5kIGV2ZXJ5XG4gICAqIGJyYW5jaCBvdmVyIGFuIG9iamVjdCBpdGVtIGZhaWxlZCBhdCBpdHMgc2VlZCBjb21taXQgKERhdGFDbG9uZUVycm9yKS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUl0ZW1zKFxuICAgIGNvbmZpZzogUGFyYWxsZWxGb3JFYWNoQ29uZmlnPHVua25vd24sIFRTY29wZT4sXG4gICAgc2NvcGU6IFRTY29wZSxcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgKTogcmVhZG9ubHkgdW5rbm93bltdIHtcbiAgICBjb25zdCBpdGVtcyA9IHVud3JhcEhhbmRsZXMoY29uZmlnLml0ZW1zKHNjb3BlKSk7XG4gICAgaWYgKGl0ZW1zID09PSB1bmRlZmluZWQgfHwgaXRlbXMgPT09IG51bGwpIHJldHVybiBbXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwYXJhbGxlbEZvckVhY2ggJyR7bm9kZS5pZH0nOiBpdGVtcygpIG11c3QgcmV0dXJuIGFuIGFycmF5IChnb3QgJHt0eXBlb2YgaXRlbXN9KS4gYCArXG4gICAgICAgICAgJ1JldHVybiBbXSB0byBydW4gemVybyBicmFuY2hlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgLyoqIEdlbmVyYXRlIG9uZSBzdWJmbG93LW1vdW50IG5vZGUgcGVyIGJyYW5jaCwgcmVnaXN0ZXJpbmcgZWFjaCBicmFuY2ggY2hhcnQuICovXG4gIHByaXZhdGUgYnVpbGRCcmFuY2hlcyhcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBpdGVtczogcmVhZG9ubHkgdW5rbm93bltdLFxuICAgIGJyYW5jaENvdW50OiBudW1iZXIsXG4gICk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5vZGUucGFyYWxsZWxGb3JFYWNoIGFzIFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+O1xuICAgIGNvbnN0IGJyYW5jaGVzOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYnJhbmNoQ291bnQ7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBidWlsZEJyYW5jaFNlZ21lbnQobm9kZS5pZCwgaW5kZXgpO1xuICAgICAgY29uc3QgY2hhcnQgPSBjb25maWcuYnJhbmNoKGl0ZW0sIGluZGV4KTtcbiAgICAgIGlmICghY2hhcnQgfHwgIWNoYXJ0LnJvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBwYXJhbGxlbEZvckVhY2ggJyR7bm9kZS5pZH0nOiBicmFuY2goaXRlbSwgJHtpbmRleH0pIG11c3QgcmV0dXJuIGEgYnVpbHQgY2hhcnQgYCArXG4gICAgICAgICAgICAnKHRoZSByZXN1bHQgb2YgZmxvd0NoYXJ0KC4uLikuYnVpbGQoKSkuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2FtZSBwcmVmaXhpbmcgYSBsYXp5IHN1YmZsb3cgZ2V0cyDigJQgdGhlIGJyYW5jaCdzIGlubmVyIGlkcyBiZWNvbWVcbiAgICAgIC8vIGA8c2VnbWVudD4vPGlkPmAsIHNvIGl0cyBzdGFnZXMgYWRkcmVzcyBhcyBgPHNlZ21lbnQ+LzxpZD4jPG4+YC5cbiAgICAgIGNvbnN0IHByZWZpeGVkUm9vdCA9IHRoaXMuaG9va3MucHJlZml4Tm9kZVRyZWUoY2hhcnQucm9vdCBhcyBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgc3ViZmxvd0lkKTtcbiAgICAgIHRoaXMuaG9va3MucmVnaXN0ZXJCcmFuY2hTdWJmbG93KHN1YmZsb3dJZCwgcHJlZml4ZWRSb290LCBjaGFydCk7XG5cbiAgICAgIGJyYW5jaGVzLnB1c2goe1xuICAgICAgICBuYW1lOiBgJHtub2RlLm5hbWV9IFske2luZGV4fV1gLFxuICAgICAgICBpZDogc3ViZmxvd0lkLFxuICAgICAgICBpc1N1YmZsb3dSb290OiB0cnVlLFxuICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIHN1YmZsb3dOYW1lOiBgJHtub2RlLm5hbWV9IFske2luZGV4fV1gLFxuICAgICAgICBzdWJmbG93TW91bnRPcHRpb25zOiB7XG4gICAgICAgICAgLy8gRDEncyBcImlucHV0TWFwcGVyIHNlYW0gZm9yIGZlZWRpbmcgdGhlIGl0ZW0gaW5cIjogdGhlIGl0ZW0gaXNcbiAgICAgICAgICAvLyB2aXNpYmxlIElOIHRoZSBicmFuY2gncyBzY29wZSAoYW5kIHNvIGluIGl0cyBjb21taXQgbG9nKSBhcyB3ZWxsIGFzXG4gICAgICAgICAgLy8gY2xvc2VkIG92ZXIgYnkgdGhlIGZhY3Rvcnkg4oCUIHByb3ZlbmFuY2UgYmVhdHMgYSBoaWRkZW4gY2xvc3VyZS5cbiAgICAgICAgICBpbnB1dE1hcHBlcjogKCkgPT4gKHsgaXRlbSwgaW5kZXggfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnJhbmNoZXM7XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUgcmVzdWx0cyBpbiBJVEVNUyBvcmRlciDigJQgbmV2ZXIgY29tcGxldGlvbiBvcmRlci5cbiAgICpcbiAgICogVGhlIGJyYW5jaCdzIHZhbHVlIGlzIGl0cyBzdWJmbG93IG91dHB1dCwgZmFsbGluZyBiYWNrIHRvIHRoZSBicmFuY2gnc1xuICAgKiBmaW5hbCBzaGFyZWQgc3RhdGUgKHRoZSBUeXBlZFNjb3BlIGNhc2UsIHdoZXJlIHN0YWdlIGZ1bmN0aW9ucyByZXR1cm5cbiAgICogdm9pZCkg4oCUIHRoZSBzYW1lIGBzdWJmbG93T3V0cHV0ID8/IHNoYXJlZFN0YXRlYCBydWxlIGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIGFwcGxpZXMgdG8gYW4gb3V0cHV0TWFwcGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0T3JkZXJlZChcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBicmFuY2hDb3VudDogbnVtYmVyLFxuICAgIGNoaWxkUmVzdWx0czogUmVjb3JkPHN0cmluZywgTm9kZVJlc3VsdFR5cGU+LFxuICApOiB1bmtub3duW10ge1xuICAgIGNvbnN0IG9yZGVyZWQ6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBicmFuY2hDb3VudDsgaW5kZXgrKykge1xuICAgICAgY29uc3Qgc3ViZmxvd0lkID0gYnVpbGRCcmFuY2hTZWdtZW50KG5vZGUuaWQsIGluZGV4KTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY2hpbGRSZXN1bHRzW3N1YmZsb3dJZF07XG4gICAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS5pc0Vycm9yKSB7XG4gICAgICAgIC8vIEJlc3QtZWZmb3J0IG1vZGU6IGEgZmFpbGVkIGJyYW5jaCBrZWVwcyBpdHMgU0xPVCAob3JkZXIgaXMgaXRlbXNcbiAgICAgICAgLy8gb3JkZXIpIHdpdGggYW4gdW5kZWZpbmVkIHZhbHVlLiBmYWlsRmFzdCBtb2RlIG5ldmVyIHJlYWNoZXMgaGVyZSDigJRcbiAgICAgICAgLy8gdGhlIGVycm9yIGFscmVhZHkgcmVqZWN0ZWQgdGhlIHdob2xlIHN0YWdlLlxuICAgICAgICBvcmRlcmVkLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBvcmRlcmVkLnB1c2goZW50cnkucmVzdWx0ID8/IHRoaXMuaG9va3MuYnJhbmNoU2hhcmVkU3RhdGUoc3ViZmxvd0lkKSk7XG4gICAgfVxuICAgIHJldHVybiBvcmRlcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBvcmRlcmVkIGFycmF5IGFzIE9ORSB2YWx1ZSBvbiB0aGUgcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiBgJHNldFZhbHVlYCBkZWxpYmVyYXRlbHksIHdoZXJlIGF2YWlsYWJsZTogdGhlIFR5cGVkU2NvcGUgc2V0IHRyYXBcbiAgICogSlNPTi1yb3VuZC10cmlwcyBldmVyeSBvYmplY3Qgd3JpdGUgKERhdGXihpJzdHJpbmcsIE1hcOKGknt9KSwgYW5kIGJyYW5jaFxuICAgKiByZXN1bHRzIGFyZSBleGFjdGx5IHRoZSBraW5kIG9mIHBheWxvYWQgdGhhdCB3b3VsZCBzaWxlbnRseSBkZWdyYWRlLlxuICAgKi9cbiAgcHJpdmF0ZSB3cml0ZVJlc3VsdHMocmF3U2NvcGU6IFRTY29wZSwgY29udGV4dDogU3RhZ2VDb250ZXh0LCBpbnRvOiBzdHJpbmcsIHJlc3VsdHM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSByYXdTY29wZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygcz8uJHNldFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAocy4kc2V0VmFsdWUgYXMgKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkoaW50bywgcmVzdWx0cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygcz8uc2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChzLnNldFZhbHVlIGFzIChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQpKGludG8sIHJlc3VsdHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBObyBmYWNhZGUgKGhhbmQtcm9sbGVkIHNjb3BlIGZhY3RvcnkpIOKAlCB3cml0ZSBzdHJhaWdodCB0byB0aGUgZnJhbWUuXG4gICAgY29udGV4dC5zZXRHbG9iYWwoaW50bywgcmVzdWx0cyk7XG4gIH1cbn1cblxuLyoqIEZpcmUgYSBzY29wZSBsaWZlY3ljbGUgbm90aWZpY2F0aW9uIGlmIHRoZSBzY29wZSBzdXBwb3J0cyBpdC4gKi9cbmZ1bmN0aW9uIG5vdGlmeShzY29wZTogdW5rbm93biwgbWV0aG9kOiAnbm90aWZ5U3RhZ2VTdGFydCcgfCAnbm90aWZ5U3RhZ2VFbmQnKTogdm9pZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgaWYgKHMgJiYgdHlwZW9mIHNbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykgKHNbbWV0aG9kXSBhcyAoKSA9PiB2b2lkKSgpO1xufVxuIl19
@@ -16,7 +16,30 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.applyOutputMapping = exports.seedSubflowGlobalStore = exports.createSubflowHandlerDeps = exports.getInitialScopeValues = exports.extractParentScopeValues = void 0;
19
- /** Extract values from parent scope using inputMapper. */
19
+ const handles_js_1 = require("../../reactive/handles.js");
20
+ /**
21
+ * A plain object — the only shape that is spread into per-field writes
22
+ * (`setObject([key], field, …)`, a row and a redaction verdict per field). A
23
+ * `Date`, `Map`, `Set` or class instance has no fields to spread and is a
24
+ * value in its own right: it lands WHOLE (until 9.24.0 it was spread into
25
+ * zero writes and silently vanished at both boundaries).
26
+ */
27
+ function isPlainObject(value) {
28
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
29
+ return false;
30
+ const proto = Object.getPrototypeOf(value);
31
+ return proto === Object.prototype || proto === null;
32
+ }
33
+ /**
34
+ * Extract values from parent scope using inputMapper.
35
+ *
36
+ * What a mapper returns is a VALUE, not a handle: the mapper read the parent's
37
+ * typed scope, so its result may be — or hold — a Proxy bound to the parent
38
+ * stage, and the seed commit below clones it (`structuredClone`, which cannot
39
+ * clone a Proxy). `unwrapHandles` (reactive/handles.ts) swaps each for the
40
+ * value behind it, O(1), Dates and Maps intact; a handle-free result passes
41
+ * through by reference.
42
+ */
20
43
  function extractParentScopeValues(parentScope, options) {
21
44
  if (!options?.inputMapper) {
22
45
  return {};
@@ -25,7 +48,7 @@ function extractParentScopeValues(parentScope, options) {
25
48
  if (result === null || result === undefined) {
26
49
  return {};
27
50
  }
28
- return result;
51
+ return (0, handles_js_1.unwrapHandles)(result);
29
52
  }
30
53
  exports.extractParentScopeValues = extractParentScopeValues;
31
54
  /**
@@ -68,7 +91,10 @@ exports.createSubflowHandlerDeps = createSubflowHandlerDeps;
68
91
  function seedSubflowGlobalStore(subflowRuntime, initialValues) {
69
92
  const rootContext = subflowRuntime.rootStageContext;
70
93
  for (const [key, value] of Object.entries(initialValues)) {
71
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
94
+ // An EMPTY plain object lands whole too: spread into zero writes it
95
+ // seeded nothing, and the child read `undefined` for an `{}` input
96
+ // (9.14.0 to 9.23.3).
97
+ if (isPlainObject(value) && Object.keys(value).length > 0) {
72
98
  for (const [nestedKey, nestedValue] of Object.entries(value)) {
73
99
  rootContext.setObject([key], nestedKey, nestedValue);
74
100
  }
@@ -93,12 +119,16 @@ function applyOutputMapping(subflowOutput, parentScope, parentContext, options)
93
119
  if (!options?.outputMapper) {
94
120
  return undefined;
95
121
  }
96
- const mappedOutput = options.outputMapper(subflowOutput, parentScope);
122
+ // The same boundary in the other direction: the mapper is handed the
123
+ // parent's typed scope too, so what it returns is taken as a value.
124
+ const mappedOutput = (0, handles_js_1.unwrapHandles)(options.outputMapper(subflowOutput, parentScope));
97
125
  if (mappedOutput === null || mappedOutput === undefined) {
98
126
  return undefined;
99
127
  }
100
128
  for (const [key, value] of Object.entries(mappedOutput)) {
101
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
129
+ // A plain object is MERGED field by field (an empty one merges nothing —
130
+ // the parent's value stands); anything else lands whole.
131
+ if (isPlainObject(value)) {
102
132
  for (const [nestedKey, nestedValue] of Object.entries(value)) {
103
133
  if (Array.isArray(nestedValue)) {
104
134
  parentContext.appendToArray([key], nestedKey, nestedValue);
@@ -132,4 +162,4 @@ function applyOutputMapping(subflowOutput, parentScope, parentContext, options)
132
162
  return mappedOutput;
133
163
  }
134
164
  exports.applyOutputMapping = applyOutputMapping;
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBS0gsMERBQTBEO0FBQzFELFNBQWdCLHdCQUF3QixDQUN0QyxXQUF5QixFQUN6QixPQUEwRDtJQUUxRCxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBZEQsNERBY0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsV0FBeUIsRUFDekIsT0FBMEQ7SUFFMUQsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUE0QixDQUFDO0FBQ25GLENBQUM7QUFMRCxzREFLQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxVQUFxQyxFQUNyQyxjQUFpQyxFQUNqQyxXQUFvQztJQUVwQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7UUFDckMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxzQkFBc0I7UUFDekQsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjO1FBQ3pDLG1CQUFtQixFQUFF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LENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN0QyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUE1Q0QsZ0RBNENDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdWJmbG93SW5wdXRNYXBwZXIg4oCUIFB1cmUgZnVuY3Rpb25zIGZvciBzdWJmbG93IGRhdGEgY29udHJhY3RzLlxuICpcbiAqIE1lbnRhbCBtb2RlbDogU3ViZmxvdyA9IFB1cmUgRnVuY3Rpb25cbiAqIC0gSXNvbGF0ZWQgc2NvcGUgKG93biBHbG9iYWxTdG9yZSlcbiAqIC0gRXhwbGljaXQgaW5wdXRzIHZpYSBpbnB1dE1hcHBlclxuICogLSBFeHBsaWNpdCBvdXRwdXRzIHZpYSBvdXRwdXRNYXBwZXJcbiAqXG4gKiB8IFNjZW5hcmlvICAgICAgICB8IEJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBObyBpbnB1dE1hcHBlciAgfCBTdWJmbG93IHN0YXJ0cyB3aXRoIGVtcHR5IHNjb3BlICAgICAgICAgICB8XG4gKiB8IE5vIG91dHB1dE1hcHBlciB8IFN1YmZsb3cgc2NvcGUgY2hhbmdlcyBkaXNjYXJkZWQgICAgICAgICAgIHxcbiAqIHwgQm90aCBwcmVzZW50ICAgIHwgRnVsbCBkYXRhIGNvbnRyYWN0IChhcmdzIGluLCByZXN1bHRzIG91dCkgfFxuICogfCBOZWl0aGVyIHByZXNlbnQgfCBDb21wbGV0ZSBpc29sYXRpb24gKHNpZGUgZWZmZWN0cyBvbmx5KSAgICB8XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMsIElFeGVjdXRpb25SdW50aW1lLCBTdWJmbG93TW91bnRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKiogRXh0cmFjdCB2YWx1ZXMgZnJvbSBwYXJlbnQgc2NvcGUgdXNpbmcgaW5wdXRNYXBwZXIuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFBhcmVudFNjb3BlVmFsdWVzPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4oXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4sXG4pOiBUU3ViZmxvd0lucHV0IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIW9wdGlvbnM/LmlucHV0TWFwcGVyKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy5pbnB1dE1hcHBlcihwYXJlbnRTY29wZSk7XG4gIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW5pdGlhbCBzY29wZSB2YWx1ZXMgZm9yIGEgc3ViZmxvdy5cbiAqIEFsd2F5cyBpc29sYXRlZCDigJQgb25seSBpbnB1dE1hcHBlciB2YWx1ZXMgYXJlIGluY2x1ZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbFNjb3BlVmFsdWVzPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4oXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBleHRyYWN0UGFyZW50U2NvcGVWYWx1ZXMocGFyZW50U2NvcGUsIG9wdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIYW5kbGVyRGVwcyBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKiBLZXk6IHNldHMgcmVhZE9ubHlDb250ZXh0IHRvIG1hcHBlZCBpbnB1dCBzbyBTdGFnZVJ1bm5lciBwYXNzZXMgaXQgdG8gU2NvcGVGYWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViZmxvd0hhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4oXG4gIHBhcmVudERlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gIHN1YmZsb3dSdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZSxcbiAgbWFwcGVkSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPiB7XG4gIHJldHVybiB7XG4gICAgc3RhZ2VNYXA6IHBhcmVudERlcHMuc3RhZ2VNYXAsXG4gICAgcm9vdDogcGFyZW50RGVwcy5yb290LFxuICAgIHNjb3BlRmFjdG9yeTogcGFyZW50RGVwcy5zY29wZUZhY3RvcnksXG4gICAgc3ViZmxvd3M6IHBhcmVudERlcHMuc3ViZmxvd3MsXG4gICAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcjogcGFyZW50RGVwcy50aHJvdHRsaW5nRXJyb3JDaGVja2VyLFxuICAgIHN0cmVhbUhhbmRsZXJzOiBwYXJlbnREZXBzLnN0cmVhbUhhbmRsZXJzLFxuICAgIHNjb3BlUHJvdGVjdGlvbk1vZGU6IHBhcmVudERlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICBleGVjdXRpb25SdW50aW1lOiBzdWJmbG93UnVudGltZSxcbiAgICByZWFkT25seUNvbnRleHQ6IG1hcHBlZElucHV0LFxuICAgIGV4ZWN1dGlvbkVudjogcGFyZW50RGVwcy5leGVjdXRpb25FbnYsIC8vIGluaGVyaXRlZCDigJQgbGlrZSBwcm9jZXNzLmVudlxuICAgIG5hcnJhdGl2ZUdlbmVyYXRvcjogcGFyZW50RGVwcy5uYXJyYXRpdmVHZW5lcmF0b3IsXG4gICAgbG9nZ2VyOiBwYXJlbnREZXBzLmxvZ2dlcixcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWVkIHRoZSBzdWJmbG93J3MgR2xvYmFsU3RvcmUgd2l0aCBpbml0aWFsIHZhbHVlcy5cbiAqIENhbGxlZCBiZWZvcmUgc3ViZmxvdyBleGVjdXRpb24gdG8gbWFrZSBpbnB1dE1hcHBlciB2YWx1ZXMgYXZhaWxhYmxlLlxuICpcbiAqIFJlZGFjdGlvbjogdGhlIHNlZWQgaXMgY29tbWl0dGVkIGFzIHRoZSBzdWJmbG93J3MgYGhpc3RvcnlbMF1gIGJ5IGl0cyByb290XG4gKiBjb250ZXh0LiBgU3ViZmxvd0V4ZWN1dG9yYCBpbnN0YWxscyB0aGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUgb24gdGhhdCBjb250ZXh0XG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBzbyB0aGUgY29tbWl0IHJldGFpbnMgdW5kZXIgdGhlIHBvbGljeSAoOS4xOS4wKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlZWRTdWJmbG93R2xvYmFsU3RvcmUoXG4gIHN1YmZsb3dSdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZSxcbiAgaW5pdGlhbFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgcm9vdENvbnRleHQgPSBzdWJmbG93UnVudGltZS5yb290U3RhZ2VDb250ZXh0O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRpYWxWYWx1ZXMpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuZXN0ZWRLZXksIG5lc3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgICAgcm9vdENvbnRleHQuc2V0T2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJvb3RDb250ZXh0LmNvbW1pdCgpO1xufVxuXG4vKipcbiAqIEFwcGx5IG91dHB1dCBtYXBwaW5nIGFmdGVyIHN1YmZsb3cgY29tcGxldGlvbi5cbiAqIFdyaXRlcyBtYXBwZWQgdmFsdWVzIGJhY2sgdG8gcGFyZW50IHNjb3BlIHVzaW5nIG1lcmdlIHNlbWFudGljczpcbiAqIGFycmF5cyBhcmUgYXBwZW5kZWQsIG9iamVjdHMgYXJlIHNoYWxsb3ctbWVyZ2VkLCBzY2FsYXJzIGFyZSByZXBsYWNlZC5cbiAqXG4gKiBSZWRhY3Rpb246IGV2ZXJ5IHdyaXRlIGhlcmUgZ29lcyB0aHJvdWdoIGBwYXJlbnRDb250ZXh0YCdzIHdyaXRlIGZ1bm5lbCxcbiAqIHdoaWNoIGFza3MgdGhlIHJ1bidzIHJlZGFjdGlvbiBydWxlIOKAlCBzbyBhIHBvbGljeS1yZWRhY3RlZCBvciBwZXItY2FsbFxuICogbWFya2VkIGtleSBsYW5kcyBpbiB0aGUgUEFSRU5UJ3MgbG9nIGFuZCBtaXJyb3IgYXMgdGhlIHBsYWNlaG9sZGVyICg5LjE5LjApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPdXRwdXRNYXBwaW5nPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dPdXRwdXQ+KFxuICBzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCxcbiAgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSxcbiAgcGFyZW50Q29udGV4dDogU3RhZ2VDb250ZXh0LFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIGFueSwgVFN1YmZsb3dPdXRwdXQ+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnM/Lm91dHB1dE1hcHBlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXBwZWRPdXRwdXQgPSBvcHRpb25zLm91dHB1dE1hcHBlcihzdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZSk7XG5cbiAgaWYgKG1hcHBlZE91dHB1dCA9PT0gbnVsbCB8fCBtYXBwZWRPdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtYXBwZWRPdXRwdXQpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuZXN0ZWRLZXksIG5lc3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmVzdGVkVmFsdWUpKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5hcHBlbmRUb0FycmF5KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgPT09ICdvYmplY3QnICYmIG5lc3RlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5tZXJnZU9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRPYmplY3QoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgaWYgKG9wdGlvbnM/LmFycmF5TWVyZ2UgPT09ICdyZXBsYWNlJykge1xuICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcGFyZW50Q29udGV4dC5nZXRHbG9iYWwoa2V5KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hcHBlZE91dHB1dDtcbn1cbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBR0gsMERBQTBEO0FBRzFEOzs7Ozs7R0FNRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsV0FBeUIsRUFDekIsT0FBMEQ7SUFFMUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTyxJQUFBLDBCQUFhLEVBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQWRELDREQWNDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLFdBQXlCLEVBQ3pCLE9BQTBEO0lBRTFELE9BQU8sd0JBQXdCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FB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LFlBQVksQ0FBQztBQUN0QixDQUFDO0FBaERELGdEQWdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3ViZmxvd0lucHV0TWFwcGVyIOKAlCBQdXJlIGZ1bmN0aW9ucyBmb3Igc3ViZmxvdyBkYXRhIGNvbnRyYWN0cy5cbiAqXG4gKiBNZW50YWwgbW9kZWw6IFN1YmZsb3cgPSBQdXJlIEZ1bmN0aW9uXG4gKiAtIElzb2xhdGVkIHNjb3BlIChvd24gR2xvYmFsU3RvcmUpXG4gKiAtIEV4cGxpY2l0IGlucHV0cyB2aWEgaW5wdXRNYXBwZXJcbiAqIC0gRXhwbGljaXQgb3V0cHV0cyB2aWEgb3V0cHV0TWFwcGVyXG4gKlxuICogfCBTY2VuYXJpbyAgICAgICAgfCBCZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgTm8gaW5wdXRNYXBwZXIgIHwgU3ViZmxvdyBzdGFydHMgd2l0aCBlbXB0eSBzY29wZSAgICAgICAgICAgfFxuICogfCBObyBvdXRwdXRNYXBwZXIgfCBTdWJmbG93IHNjb3BlIGNoYW5nZXMgZGlzY2FyZGVkICAgICAgICAgICB8XG4gKiB8IEJvdGggcHJlc2VudCAgICB8IEZ1bGwgZGF0YSBjb250cmFjdCAoYXJncyBpbiwgcmVzdWx0cyBvdXQpIHxcbiAqIHwgTmVpdGhlciBwcmVzZW50IHwgQ29tcGxldGUgaXNvbGF0aW9uIChzaWRlIGVmZmVjdHMgb25seSkgICAgfFxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgeyB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUvaGFuZGxlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXJEZXBzLCBJRXhlY3V0aW9uUnVudGltZSwgU3ViZmxvd01vdW50T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCDigJQgdGhlIG9ubHkgc2hhcGUgdGhhdCBpcyBzcHJlYWQgaW50byBwZXItZmllbGQgd3JpdGVzXG4gKiAoYHNldE9iamVjdChba2V5XSwgZmllbGQsIOKApilgLCBhIHJvdyBhbmQgYSByZWRhY3Rpb24gdmVyZGljdCBwZXIgZmllbGQpLiBBXG4gKiBgRGF0ZWAsIGBNYXBgLCBgU2V0YCBvciBjbGFzcyBpbnN0YW5jZSBoYXMgbm8gZmllbGRzIHRvIHNwcmVhZCBhbmQgaXMgYVxuICogdmFsdWUgaW4gaXRzIG93biByaWdodDogaXQgbGFuZHMgV0hPTEUgKHVudGlsIDkuMjQuMCBpdCB3YXMgc3ByZWFkIGludG9cbiAqIHplcm8gd3JpdGVzIGFuZCBzaWxlbnRseSB2YW5pc2hlZCBhdCBib3RoIGJvdW5kYXJpZXMpLlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIHJldHVybiBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHZhbHVlcyBmcm9tIHBhcmVudCBzY29wZSB1c2luZyBpbnB1dE1hcHBlci5cbiAqXG4gKiBXaGF0IGEgbWFwcGVyIHJldHVybnMgaXMgYSBWQUxVRSwgbm90IGEgaGFuZGxlOiB0aGUgbWFwcGVyIHJlYWQgdGhlIHBhcmVudCdzXG4gKiB0eXBlZCBzY29wZSwgc28gaXRzIHJlc3VsdCBtYXkgYmUg4oCUIG9yIGhvbGQg4oCUIGEgUHJveHkgYm91bmQgdG8gdGhlIHBhcmVudFxuICogc3RhZ2UsIGFuZCB0aGUgc2VlZCBjb21taXQgYmVsb3cgY2xvbmVzIGl0IChgc3RydWN0dXJlZENsb25lYCwgd2hpY2ggY2Fubm90XG4gKiBjbG9uZSBhIFByb3h5KS4gYHVud3JhcEhhbmRsZXNgIChyZWFjdGl2ZS9oYW5kbGVzLnRzKSBzd2FwcyBlYWNoIGZvciB0aGVcbiAqIHZhbHVlIGJlaGluZCBpdCwgTygxKSwgRGF0ZXMgYW5kIE1hcHMgaW50YWN0OyBhIGhhbmRsZS1mcmVlIHJlc3VsdCBwYXNzZXNcbiAqIHRocm91Z2ggYnkgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFBhcmVudFNjb3BlVmFsdWVzPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4oXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4sXG4pOiBUU3ViZmxvd0lucHV0IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIW9wdGlvbnM/LmlucHV0TWFwcGVyKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy5pbnB1dE1hcHBlcihwYXJlbnRTY29wZSk7XG4gIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4gdW53cmFwSGFuZGxlcyhyZXN1bHQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW5pdGlhbCBzY29wZSB2YWx1ZXMgZm9yIGEgc3ViZmxvdy5cbiAqIEFsd2F5cyBpc29sYXRlZCDigJQgb25seSBpbnB1dE1hcHBlciB2YWx1ZXMgYXJlIGluY2x1ZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbFNjb3BlVmFsdWVzPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4oXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBleHRyYWN0UGFyZW50U2NvcGVWYWx1ZXMocGFyZW50U2NvcGUsIG9wdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIYW5kbGVyRGVwcyBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKiBLZXk6IHNldHMgcmVhZE9ubHlDb250ZXh0IHRvIG1hcHBlZCBpbnB1dCBzbyBTdGFnZVJ1bm5lciBwYXNzZXMgaXQgdG8gU2NvcGVGYWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViZmxvd0hhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4oXG4gIHBhcmVudERlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gIHN1YmZsb3dSdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZSxcbiAgbWFwcGVkSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPiB7XG4gIHJldHVybiB7XG4gICAgc3RhZ2VNYXA6IHBhcmVudERlcHMuc3RhZ2VNYXAsXG4gICAgcm9vdDogcGFyZW50RGVwcy5yb290LFxuICAgIHNjb3BlRmFjdG9yeTogcGFyZW50RGVwcy5zY29wZUZhY3RvcnksXG4gICAgc3ViZmxvd3M6IHBhcmVudERlcHMuc3ViZmxvd3MsXG4gICAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcjogcGFyZW50RGVwcy50aHJvdHRsaW5nRXJyb3JDaGVja2VyLFxuICAgIHN0cmVhbUhhbmRsZXJzOiBwYXJlbnREZXBzLnN0cmVhbUhhbmRsZXJzLFxuICAgIHNjb3BlUHJvdGVjdGlvbk1vZGU6IHBhcmVudERlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICBleGVjdXRpb25SdW50aW1lOiBzdWJmbG93UnVudGltZSxcbiAgICByZWFkT25seUNvbnRleHQ6IG1hcHBlZElucHV0LFxuICAgIGV4ZWN1dGlvbkVudjogcGFyZW50RGVwcy5leGVjdXRpb25FbnYsIC8vIGluaGVyaXRlZCDigJQgbGlrZSBwcm9jZXNzLmVudlxuICAgIG5hcnJhdGl2ZUdlbmVyYXRvcjogcGFyZW50RGVwcy5uYXJyYXRpdmVHZW5lcmF0b3IsXG4gICAgbG9nZ2VyOiBwYXJlbnREZXBzLmxvZ2dlcixcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWVkIHRoZSBzdWJmbG93J3MgR2xvYmFsU3RvcmUgd2l0aCBpbml0aWFsIHZhbHVlcy5cbiAqIENhbGxlZCBiZWZvcmUgc3ViZmxvdyBleGVjdXRpb24gdG8gbWFrZSBpbnB1dE1hcHBlciB2YWx1ZXMgYXZhaWxhYmxlLlxuICpcbiAqIFJlZGFjdGlvbjogdGhlIHNlZWQgaXMgY29tbWl0dGVkIGFzIHRoZSBzdWJmbG93J3MgYGhpc3RvcnlbMF1gIGJ5IGl0cyByb290XG4gKiBjb250ZXh0LiBgU3ViZmxvd0V4ZWN1dG9yYCBpbnN0YWxscyB0aGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUgb24gdGhhdCBjb250ZXh0XG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBzbyB0aGUgY29tbWl0IHJldGFpbnMgdW5kZXIgdGhlIHBvbGljeSAoOS4xOS4wKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlZWRTdWJmbG93R2xvYmFsU3RvcmUoXG4gIHN1YmZsb3dSdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZSxcbiAgaW5pdGlhbFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgcm9vdENvbnRleHQgPSBzdWJmbG93UnVudGltZS5yb290U3RhZ2VDb250ZXh0O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRpYWxWYWx1ZXMpKSB7XG4gICAgLy8gQW4gRU1QVFkgcGxhaW4gb2JqZWN0IGxhbmRzIHdob2xlIHRvbzogc3ByZWFkIGludG8gemVybyB3cml0ZXMgaXRcbiAgICAvLyBzZWVkZWQgbm90aGluZywgYW5kIHRoZSBjaGlsZCByZWFkIGB1bmRlZmluZWRgIGZvciBhbiBge31gIGlucHV0XG4gICAgLy8gKDkuMTQuMCB0byA5LjIzLjMpLlxuICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBbbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgIHJvb3RDb250ZXh0LnNldE9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByb290Q29udGV4dC5jb21taXQoKTtcbn1cblxuLyoqXG4gKiBBcHBseSBvdXRwdXQgbWFwcGluZyBhZnRlciBzdWJmbG93IGNvbXBsZXRpb24uXG4gKiBXcml0ZXMgbWFwcGVkIHZhbHVlcyBiYWNrIHRvIHBhcmVudCBzY29wZSB1c2luZyBtZXJnZSBzZW1hbnRpY3M6XG4gKiBhcnJheXMgYXJlIGFwcGVuZGVkLCBvYmplY3RzIGFyZSBzaGFsbG93LW1lcmdlZCwgc2NhbGFycyBhcmUgcmVwbGFjZWQuXG4gKlxuICogUmVkYWN0aW9uOiBldmVyeSB3cml0ZSBoZXJlIGdvZXMgdGhyb3VnaCBgcGFyZW50Q29udGV4dGAncyB3cml0ZSBmdW5uZWwsXG4gKiB3aGljaCBhc2tzIHRoZSBydW4ncyByZWRhY3Rpb24gcnVsZSDigJQgc28gYSBwb2xpY3ktcmVkYWN0ZWQgb3IgcGVyLWNhbGxcbiAqIG1hcmtlZCBrZXkgbGFuZHMgaW4gdGhlIFBBUkVOVCdzIGxvZyBhbmQgbWlycm9yIGFzIHRoZSBwbGFjZWhvbGRlciAoOS4xOS4wKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3V0cHV0TWFwcGluZzxUUGFyZW50U2NvcGUsIFRTdWJmbG93T3V0cHV0PihcbiAgc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIHBhcmVudENvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlLCBhbnksIFRTdWJmbG93T3V0cHV0Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zPy5vdXRwdXRNYXBwZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gVGhlIHNhbWUgYm91bmRhcnkgaW4gdGhlIG90aGVyIGRpcmVjdGlvbjogdGhlIG1hcHBlciBpcyBoYW5kZWQgdGhlXG4gIC8vIHBhcmVudCdzIHR5cGVkIHNjb3BlIHRvbywgc28gd2hhdCBpdCByZXR1cm5zIGlzIHRha2VuIGFzIGEgdmFsdWUuXG4gIGNvbnN0IG1hcHBlZE91dHB1dCA9IHVud3JhcEhhbmRsZXMob3B0aW9ucy5vdXRwdXRNYXBwZXIoc3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGUpKTtcblxuICBpZiAobWFwcGVkT3V0cHV0ID09PSBudWxsIHx8IG1hcHBlZE91dHB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1hcHBlZE91dHB1dCkpIHtcbiAgICAvLyBBIHBsYWluIG9iamVjdCBpcyBNRVJHRUQgZmllbGQgYnkgZmllbGQgKGFuIGVtcHR5IG9uZSBtZXJnZXMgbm90aGluZyDigJRcbiAgICAvLyB0aGUgcGFyZW50J3MgdmFsdWUgc3RhbmRzKTsgYW55dGhpbmcgZWxzZSBsYW5kcyB3aG9sZS5cbiAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgW25lc3RlZEtleSwgbmVzdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LmFwcGVuZFRvQXJyYXkoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgbmVzdGVkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0Lm1lcmdlT2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldE9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAob3B0aW9ucz8uYXJyYXlNZXJnZSA9PT0gJ3JlcGxhY2UnKSB7XG4gICAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBwYXJlbnRDb250ZXh0LmdldEdsb2JhbChrZXkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIFsuLi5leGlzdGluZywgLi4udmFsdWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFwcGVkT3V0cHV0O1xufVxuIl19