footprintjs 9.3.0 → 9.5.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 (61) hide show
  1. package/AGENTS.md +2 -1
  2. package/CLAUDE.md +2 -1
  3. package/dist/advanced.js +1 -1
  4. package/dist/esm/advanced.js +1 -1
  5. package/dist/esm/index.js +1 -1
  6. package/dist/esm/lib/builder/FlowChartBuilder.js +15 -2
  7. package/dist/esm/lib/capture/envelope.js +187 -0
  8. package/dist/esm/lib/capture/index.js +16 -0
  9. package/dist/esm/lib/capture/policies.js +29 -0
  10. package/dist/esm/lib/capture/summarize.js +58 -0
  11. package/dist/esm/lib/engine/handlers/ContinuationResolver.js +23 -4
  12. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +9 -1
  13. package/dist/esm/lib/engine/types.js +1 -1
  14. package/dist/esm/lib/memory/StageContext.js +62 -44
  15. package/dist/esm/lib/memory/index.js +2 -2
  16. package/dist/esm/lib/memory/types.js +7 -4
  17. package/dist/esm/lib/observer-queue/deferredDispatcher.js +226 -0
  18. package/dist/esm/lib/observer-queue/flushDriver.js +163 -0
  19. package/dist/esm/lib/observer-queue/index.js +22 -0
  20. package/dist/esm/lib/observer-queue/mergedQueue.js +91 -0
  21. package/dist/esm/lib/observer-queue/ring.js +122 -0
  22. package/dist/esm/lib/runner/ExecutionRuntime.js +13 -1
  23. package/dist/esm/lib/runner/FlowChartExecutor.js +20 -1
  24. package/dist/index.js +1 -1
  25. package/dist/lib/builder/FlowChartBuilder.js +15 -2
  26. package/dist/lib/capture/envelope.js +192 -0
  27. package/dist/lib/capture/index.js +23 -0
  28. package/dist/lib/capture/policies.js +30 -0
  29. package/dist/lib/capture/summarize.js +63 -0
  30. package/dist/lib/engine/handlers/ContinuationResolver.js +23 -4
  31. package/dist/lib/engine/handlers/SubflowExecutor.js +9 -1
  32. package/dist/lib/engine/types.js +1 -1
  33. package/dist/lib/memory/StageContext.js +63 -45
  34. package/dist/lib/memory/index.js +3 -2
  35. package/dist/lib/memory/types.js +10 -5
  36. package/dist/lib/observer-queue/deferredDispatcher.js +230 -0
  37. package/dist/lib/observer-queue/flushDriver.js +167 -0
  38. package/dist/lib/observer-queue/index.js +36 -0
  39. package/dist/lib/observer-queue/mergedQueue.js +95 -0
  40. package/dist/lib/observer-queue/ring.js +126 -0
  41. package/dist/lib/runner/ExecutionRuntime.js +13 -1
  42. package/dist/lib/runner/FlowChartExecutor.js +20 -1
  43. package/dist/types/advanced.d.ts +1 -1
  44. package/dist/types/index.d.ts +13 -0
  45. package/dist/types/lib/capture/envelope.d.ts +169 -0
  46. package/dist/types/lib/capture/index.d.ts +16 -0
  47. package/dist/types/lib/capture/policies.d.ts +42 -0
  48. package/dist/types/lib/capture/summarize.d.ts +65 -0
  49. package/dist/types/lib/engine/handlers/ContinuationResolver.d.ts +15 -2
  50. package/dist/types/lib/engine/types.d.ts +3 -0
  51. package/dist/types/lib/memory/StageContext.d.ts +38 -1
  52. package/dist/types/lib/memory/index.d.ts +2 -2
  53. package/dist/types/lib/memory/types.d.ts +33 -22
  54. package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +169 -0
  55. package/dist/types/lib/observer-queue/flushDriver.d.ts +124 -0
  56. package/dist/types/lib/observer-queue/index.d.ts +25 -0
  57. package/dist/types/lib/observer-queue/mergedQueue.d.ts +85 -0
  58. package/dist/types/lib/observer-queue/ring.d.ts +99 -0
  59. package/dist/types/lib/runner/ExecutionRuntime.d.ts +11 -1
  60. package/dist/types/lib/runner/FlowChartExecutor.d.ts +43 -1
  61. package/package.json +1 -1
@@ -109,6 +109,14 @@ class SubflowExecutor {
109
109
  if (parentReadTracking !== undefined && parentReadTracking !== 'full') {
110
110
  nestedRootContext.useReadTracking(parentReadTracking);
111
111
  }
112
+ // Write-tracking policy (#13c-A): same inheritance hop as readTracking
113
+ // above — subflow runtimes are isolated, so the parent-mount context's
114
+ // mode is pushed into the FINAL nested root with the same duck-type
115
+ // guard and the same skip-at-default fast path.
116
+ const parentWriteTracking = parentContext.getWriteTracking?.();
117
+ if (parentWriteTracking !== undefined && parentWriteTracking !== 'full') {
118
+ nestedRootContext.useWriteTracking(parentWriteTracking);
119
+ }
112
120
  // Prepare subflow root node — strip isSubflowRoot to prevent re-delegation.
113
121
  //
114
122
  // PRESERVE `next`. Earlier revisions stripped `next` whenever the
@@ -262,4 +270,4 @@ class SubflowExecutor {
262
270
  }
263
271
  }
264
272
  exports.SubflowExecutor = SubflowExecutor;
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7QUFHSCxtREFBcUQ7QUFVckQsbUVBQTRHO0FBRzVHLE1BQWEsZUFBZTtJQUVoQjtJQUNBO0lBRlYsWUFDVSxJQUErQixFQUMvQixnQkFBdUQ7UUFEdkQsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF1QztJQUM5RCxDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUNsQixJQUE2QixFQUM3QixhQUEyQixFQUMzQixTQUFvQixFQUNwQixVQUE4QixFQUM5QixpQkFBNkMsRUFDN0Msc0JBQXlDO1FBRXpDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWxELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxXQUFXLFVBQVUsRUFBRTtZQUM5RSxXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCx3QkFBd0I7UUFDeEIsRUFBRTtRQUNGLGlFQUFpRTtRQUNqRSxpRUFBaUU7UUFDakUsK0RBQStEO1FBQy9ELHlEQUF5RDtRQUN6RCxtRUFBbUU7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzlDLElBQUksV0FBVyxHQUE0QixFQUFFLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxLQUFL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LEdBQUksVUFBa0IsQ0FBQyxrQkFBa0IsQ0FBQztRQUMzRSxDQUFDO1FBRUQsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVoRCxhQUFhLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFdBQVcsV0FBVyxVQUFVLEVBQUU7WUFDN0UsV0FBVyxFQUFFLFNBQVM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQ3hDLFdBQVcsRUFDWCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLGFBQWEsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUN6QyxDQUFDO1FBRUYsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXZCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxZQUFZLENBQUM7UUFDckIsQ0FBQztRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQXZTRCwwQ0F1U0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1YmZsb3dFeGVjdXRvciDigJQgSXNvbGF0aW9uIGJvdW5kYXJ5IGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBDcmVhdGUgaXNvbGF0ZWQgRXhlY3V0aW9uUnVudGltZSBmb3IgZWFjaCBzdWJmbG93XG4gKiAtIEFwcGx5IGlucHV0L291dHB1dCBtYXBwaW5nIHZpYSBTdWJmbG93SW5wdXRNYXBwZXJcbiAqIC0gRGVsZWdhdGUgdHJhdmVyc2FsIHRvIGEgZmFjdG9yeS1jcmVhdGVkIEZsb3djaGFydFRyYXZlcnNlclxuICogLSBUcmFjayBzdWJmbG93IHJlc3VsdHMgZm9yIGRlYnVnZ2luZy92aXN1YWxpemF0aW9uXG4gKlxuICogRWFjaCBzdWJmbG93IGdldHMgaXRzIG93biBHbG9iYWxTdG9yZSBmb3IgaXNvbGF0aW9uLlxuICogVHJhdmVyc2FsIHVzZXMgdGhlIFNBTUUgNy1waGFzZSBhbGdvcml0aG0gYXMgdGhlIHRvcC1sZXZlbCB0cmF2ZXJzZXJcbiAqICh2aWEgU3ViZmxvd1RyYXZlcnNlckZhY3RvcnkpLCBzbyBkZWNpZGVycywgc2VsZWN0b3JzLCBsb29wcywgbGF6eSBzdWJmbG93cyxcbiAqIGFuZCBhYm9ydCBzaWduYWxzIGFsbCB3b3JrIGluc2lkZSBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBpc1BhdXNlU2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgSGFuZGxlckRlcHMsXG4gIElFeGVjdXRpb25SdW50aW1lLFxuICBTdWJmbG93UmVzdWx0LFxuICBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSxcbiAgU3ViZmxvd1RyYXZlcnNlckhhbmRsZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYXBwbHlPdXRwdXRNYXBwaW5nLCBnZXRJbml0aWFsU2NvcGVWYWx1ZXMsIHNlZWRTdWJmbG93R2xvYmFsU3RvcmUgfSBmcm9tICcuL1N1YmZsb3dJbnB1dE1hcHBlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEJyZWFrRmxhZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgU3ViZmxvd0V4ZWN1dG9yPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSB0cmF2ZXJzZXJGYWN0b3J5OiBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeTxUT3V0LCBUU2NvcGU+LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBzdWJmbG93IHdpdGggaXNvbGF0ZWQgY29udGV4dC5cbiAgICpcbiAgICogMS4gQ3JlYXRlcyBhIGZyZXNoIEV4ZWN1dGlvblJ1bnRpbWUgZm9yIHRoZSBzdWJmbG93XG4gICAqIDIuIEFwcGxpZXMgaW5wdXQgbWFwcGluZyB0byBzZWVkIHRoZSBzdWJmbG93J3MgR2xvYmFsU3RvcmVcbiAgICogMy4gRGVsZWdhdGVzIHRyYXZlcnNhbCB0byBhIGZhY3RvcnktY3JlYXRlZCBGbG93Y2hhcnRUcmF2ZXJzZXJcbiAgICogNC4gQXBwbGllcyBvdXRwdXQgbWFwcGluZyB0byB3cml0ZSByZXN1bHRzIGJhY2sgdG8gcGFyZW50IHNjb3BlXG4gICAqIDUuIFN0b3JlcyBleGVjdXRpb24gZGF0YSBmb3IgZGVidWdnaW5nL3Zpc3VhbGl6YXRpb25cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJmbG93KFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIHBhcmVudENvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmVha0ZsYWc6IEJyZWFrRmxhZyxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgc3ViZmxvd1Jlc3VsdHNNYXA6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+LFxuICAgIHBhcmVudFRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHN1YmZsb3dJZCA9IG5vZGUuc3ViZmxvd0lkITtcbiAgICBjb25zdCBzdWJmbG93TmFtZSA9IG5vZGUuc3ViZmxvd05hbWUgPz8gbm9kZS5uYW1lO1xuXG4gICAgcGFyZW50Q29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKCdzdWJmbG93JywgYEVudGVyaW5nICR7c3ViZmxvd05hbWV9IHN1YmZsb3dgLCB7XG4gICAgICB0YXJnZXRTdGFnZTogc3ViZmxvd0lkLFxuICAgIH0pO1xuXG4gICAgLy8g4pSA4pSA4pSAIElucHV0IE1hcHBpbmcg4pSA4pSA4pSAXG4gICAgLy9cbiAgICAvLyBSRVNVTUUgUEFUSCBOT1RFOiB3aGVuIGBkZXBzLnN1YmZsb3dTdGF0ZXNGb3JSZXN1bWVgIGNhcnJpZXMgYVxuICAgIC8vIGNhcHR1cmUgZm9yIFRISVMgc3ViZmxvdyBpZCwgd2UgU0tJUCB0aGUgaW5wdXRNYXBwZXIgZW50aXJlbHkuXG4gICAgLy8gVGhlIGNhcHR1cmUgaXMgdGhlIHBvc3QtaW5wdXQgcHJlLXBhdXNlIG1lbW9yeSDigJQgcnVubmluZyB0aGVcbiAgICAvLyBtYXBwZXIgYWdhaW4gd291bGQgY2xvYmJlciBwb3N0LWlucHV0IHdyaXRlcyAoaGlzdG9yeSxcbiAgICAvLyBwYXVzZWRUb29sQ2FsbElkLCBldGMuKSB3aXRoIHRoZSBwYXJlbnQncyBzdGFydC1vZi1zdWJmbG93IHZpZXcuXG4gICAgY29uc3QgbW91bnRPcHRpb25zID0gbm9kZS5zdWJmbG93TW91bnRPcHRpb25zO1xuICAgIGxldCBtYXBwZWRJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBjb25zdCByZXN1bWVDYXB0dXJlID0gdGhpcy5kZXBzLnN1YmZsb3dTdGF0ZXNGb3JSZXN1bWU/LltzdWJmbG93SWRdO1xuICAgIGNvbnN0IGlzUmVzdW1lRm9yVGhpc1N1YmZsb3cgPSByZXN1bWVDYXB0dXJlICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAobW91bnRPcHRpb25zICYmICFpc1Jlc3VtZUZvclRoaXNTdWJmbG93KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJlbnRTY29wZSA9IHBhcmVudENvbnRleHQuZ2V0U2NvcGUoKTtcbiAgICAgICAgbWFwcGVkSW5wdXQgPSBnZXRJbml0aWFsU2NvcGVWYWx1ZXMocGFyZW50U2NvcGUsIG1vdW50T3B0aW9ucyk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhtYXBwZWRJbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIG1hcHBlZElucHV0IGlzIGNhcHR1cmVkIGluIFN1YmZsb3dSZXN1bHQudHJlZUNvbnRleHQgZm9yIGRlYnVnZ2luZ1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHBhcmVudENvbnRleHQuYWRkRXJyb3IoJ2lucHV0TWFwcGVyRXJyb3InLCBlcnJvci50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXJyb3IgaW4gaW5wdXRNYXBwZXIgZm9yIHN1YmZsb3cgKCR7c3ViZmxvd0lkfSk6YCwgeyBlcnJvciB9KTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmFycmF0aXZlIHJlY2VpdmVzIG1hcHBlZCBpbnB1dC4gaW5wdXRNYXBwZXIgaXMgYSBjb25zdW1lciBmdW5jdGlvbiB0aGF0IG1heSBpbmplY3RcbiAgICAvLyB2YWx1ZXMgbm90IGZyb20gdGhlIHNjb3BlIChieXBhc3NpbmcgcmVkYWN0aW9uKS4gVGhlIHJlY29yZGVyIHJlbmRlcnMgcGVyIGluY2x1ZGVWYWx1ZXMuXG4gICAgY29uc3QgbmFycmF0aXZlSW5wdXQgPSBtYXBwZWRJbnB1dDtcbiAgICAvLyBgRmxvd1N1YmZsb3dFdmVudC5kZXNjcmlwdGlvbmAgaXMgc2VtYW50aWNhbGx5IFwid2hhdCB0aGlzIHN1YmZsb3cgZG9lc1wiIOKAlCBzb3VyY2VkIGZyb21cbiAgICAvLyB0aGUgc3ViZmxvdydzIG93biByb290IHN0YWdlLCBub3QgdGhlIHBhcmVudCBtb3VudCBwb2ludC4gVGhlIG1vdW50IG5vZGUgbmV2ZXIgY2Fycmllc1xuICAgIC8vIGEgZGVzY3JpcHRpb24gKGJ1aWxkZXJzIGRvbid0IGNvcHkgaXQpLCBzbyByZWFkaW5nIGBub2RlLmRlc2NyaXB0aW9uYCBoZXJlIHJldHVybnNcbiAgICAvLyBgdW5kZWZpbmVkYCBhbmQgdGF4b25vbXkgbWFya2VycyBzZXQgb24gdGhlIHN1YmZsb3cgcm9vdCAoZS5nLiBhZ2VudGZvb3RwcmludCdzXG4gICAgLy8gYCdBZ2VudDogUmVBY3QgbG9vcCdgIC8gYCdMTE1DYWxsOiBvbmUtc2hvdCdgKSBuZXZlciByZWFjaCBkb3duc3RyZWFtIGNvbnN1bWVycy5cbiAgICBjb25zdCByb290RGVzY3JpcHRpb24gPSB0aGlzLmRlcHMuc3ViZmxvd3M/LltzdWJmbG93SWRdPy5yb290Py5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uU3ViZmxvd0VudHJ5KFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgICBzdWJmbG93SWQsXG4gICAgICByb290RGVzY3JpcHRpb24gPz8gbm9kZS5kZXNjcmlwdGlvbixcbiAgICAgIHBhcmVudFRyYXZlcnNhbENvbnRleHQsXG4gICAgICBuYXJyYXRpdmVJbnB1dCxcbiAgICApO1xuICAgIC8vIFByb3Bvc2FsICMwMDM6IGZpcmUgb25TdGFnZUV4ZWN1dGVkIGZvciB0aGUgbW91bnQgbm9kZSBBRlRFUlxuICAgIC8vIG9uU3ViZmxvd0VudHJ5IHNvIGNvbnN1bWVycyB0cmFja2luZyBcImRpZCB0aGlzIHN0YWdlIHJ1blwiIHdvcmtcbiAgICAvLyB1bmlmb3JtbHkgYWNyb3NzIGxpbmVhciAvIGRlY2lkZXIgLyBmb3JrIC8gc2VsZWN0b3IgLyBzdWJmbG93LW1vdW50LlxuICAgIC8vIEZpcmVzIG9uIEVOVFJZIChub3QgZXhpdCkg4oCUIGVudHJ5ID0gXCJ0aGlzIG1vdW50IHJhblwiOyB0aGVcbiAgICAvLyBzdWJmbG93J3MgY2hpbGRyZW4gZXhlY3V0ZSBhZnRlciBhcyBzZXBhcmF0ZSBzdGFnZXMuXG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vblN0YWdlRXhlY3V0ZWQoXG4gICAgICBub2RlLm5hbWUsXG4gICAgICByb290RGVzY3JpcHRpb24gPz8gbm9kZS5kZXNjcmlwdGlvbixcbiAgICAgIHBhcmVudFRyYXZlcnNhbENvbnRleHQsXG4gICAgICAnc3ViZmxvdy1tb3VudCcsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBpc29sYXRlZCBydW50aW1lIHZpYSBkeW5hbWljIGNvbnN0cnVjdGlvbiAoYXZvaWRzIGNpcmN1bGFyIGltcG9ydClcbiAgICBjb25zdCBFeGVjdXRpb25SdW50aW1lQ2xhc3MgPSB0aGlzLmRlcHMuZXhlY3V0aW9uUnVudGltZS5jb25zdHJ1Y3RvciBhcyBuZXcgKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgaWQ6IHN0cmluZyxcbiAgICApID0+IElFeGVjdXRpb25SdW50aW1lO1xuICAgIGNvbnN0IG5lc3RlZFJ1bnRpbWUgPSBuZXcgRXhlY3V0aW9uUnVudGltZUNsYXNzKG5vZGUubmFtZSwgbm9kZS5pZCk7XG4gICAgbGV0IG5lc3RlZFJvb3RDb250ZXh0ID0gbmVzdGVkUnVudGltZS5yb290U3RhZ2VDb250ZXh0O1xuXG4gICAgLy8gU2VlZCBHbG9iYWxTdG9yZSB3aXRoIHRoZSByaWdodCBzaGFwZSBmb3IgdGhlIHBhdGg6XG4gICAgLy8gICDigKIgUmVzdW1lIGludG8gVEhJUyBzdWJmbG93IOKGkiBzZWVkIGZyb20gdGhlIGNhcHR1cmVkIHByZS1wYXVzZVxuICAgIC8vICAgICBzY29wZSBzbyByZXN1bWUgaGFuZGxlcnMgc2VlIGhpc3RvcnksIHBhdXNlZFRvb2xDYWxsSWQsIGV0Yy5cbiAgICAvLyAgIOKAoiBOb3JtYWwgZW50cnkg4oaSIHNlZWQgZnJvbSB0aGUgaW5wdXRNYXBwZXIncyBtYXBwZWRJbnB1dC5cbiAgICBjb25zdCBzZWVkVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGlzUmVzdW1lRm9yVGhpc1N1YmZsb3cgPyByZXN1bWVDYXB0dXJlISA6IG1hcHBlZElucHV0O1xuICAgIGlmIChPYmplY3Qua2V5cyhzZWVkVmFsdWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICBzZWVkU3ViZmxvd0dsb2JhbFN0b3JlKG5lc3RlZFJ1bnRpbWUsIHNlZWRWYWx1ZXMpO1xuICAgICAgLy8gUmVmcmVzaCByb290U3RhZ2VDb250ZXh0IHNvIFdyaXRlQnVmZmVyIHNlZXMgY29tbWl0dGVkIGRhdGFcbiAgICAgIGNvbnN0IFN0YWdlQ29udGV4dENsYXNzID0gbmVzdGVkUm9vdENvbnRleHQuY29uc3RydWN0b3IgYXMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gU3RhZ2VDb250ZXh0O1xuICAgICAgbmVzdGVkUm9vdENvbnRleHQgPSBuZXcgU3RhZ2VDb250ZXh0Q2xhc3MoXG4gICAgICAgICcnLFxuICAgICAgICBuZXN0ZWRSb290Q29udGV4dC5zdGFnZU5hbWUsXG4gICAgICAgIG5lc3RlZFJvb3RDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIG5lc3RlZFJ1bnRpbWUuZ2xvYmFsU3RvcmUsXG4gICAgICAgICcnLFxuICAgICAgICBuZXN0ZWRSdW50aW1lLmV4ZWN1dGlvbkhpc3RvcnksXG4gICAgICApO1xuICAgICAgbmVzdGVkUnVudGltZS5yb290U3RhZ2VDb250ZXh0ID0gbmVzdGVkUm9vdENvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUmVhZC10cmFja2luZyBwb2xpY3kgKCMxNCk6IHN1YmZsb3dzIGdldCBhbiBJU09MQVRFRCBydW50aW1lLCBzbyB0aGVcbiAgICAvLyBleGVjdXRvci1sZXZlbCBwb2xpY3kgZG9lc24ndCByZWFjaCB0aGVtIHZpYSB0aGUgcm9vdCBjb250ZXh0IGNoYWluLlxuICAgIC8vIEluaGVyaXQgaXQgZnJvbSB0aGUgcGFyZW50LW1vdW50IGNvbnRleHQgKHdoaWNoIGluaGVyaXRlZCBpdCBmcm9tIElUU1xuICAgIC8vIHJvb3QgdmlhIGNyZWF0ZU5leHQvY3JlYXRlQ2hpbGQpIOKAlCBhcHBsaWVkIHRvIHRoZSBGSU5BTCBuZXN0ZWQgcm9vdCxcbiAgICAvLyBhZnRlciB0aGUgc2VlZGluZyBibG9jayBhYm92ZSBtYXkgaGF2ZSByZXBsYWNlZCBpdC4gTmVzdGVkIHN1YmZsb3dzXG4gICAgLy8gY2hhaW4gdGhlIHNhbWUgd2F5LCBvbmUgaG9wIHBlciBtb3VudC4gT3B0aW9uYWwtY2hhaW5lZCBiZWNhdXNlIHRoaXNcbiAgICAvLyBzZWN0aW9uIGlzIGR1Y2stdHlwZWQgYnkgZGVzaWduIChkeW5hbWljIGNvbnN0cnVjdGlvbiB0byBhdm9pZCB0aGVcbiAgICAvLyBjaXJjdWxhciBpbXBvcnQpIOKAlCBhbmQgc2tpcHBlZCBhdCB0aGUgZGVmYXVsdCAnZnVsbCcsIHdoZXJlIHRoZSBmcmVzaFxuICAgIC8vIG5lc3RlZCBjb250ZXh0IGlzIGFscmVhZHkgY29ycmVjdCwgc28gdGhlIGRlZmF1bHQgcGF0aCBkb2VzIHplcm8gd29yay5cbiAgICBjb25zdCBwYXJlbnRSZWFkVHJhY2tpbmcgPSBwYXJlbnRDb250ZXh0LmdldFJlYWRUcmFja2luZz8uKCk7XG4gICAgaWYgKHBhcmVudFJlYWRUcmFja2luZyAhPT0gdW5kZWZpbmVkICYmIHBhcmVudFJlYWRUcmFja2luZyAhPT0gJ2Z1bGwnKSB7XG4gICAgICBuZXN0ZWRSb290Q29udGV4dC51c2VSZWFkVHJhY2tpbmcocGFyZW50UmVhZFRyYWNraW5nKTtcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIHN1YmZsb3cgcm9vdCBub2RlIOKAlCBzdHJpcCBpc1N1YmZsb3dSb290IHRvIHByZXZlbnQgcmUtZGVsZWdhdGlvbi5cbiAgICAvL1xuICAgIC8vIFBSRVNFUlZFIGBuZXh0YC4gRWFybGllciByZXZpc2lvbnMgc3RyaXBwZWQgYG5leHRgIHdoZW5ldmVyIHRoZVxuICAgIC8vIHN1YmZsb3cgcm9vdCBoYWQgY2hpbGRyZW4sIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYG5leHRgIHdhc1xuICAgIC8vIGFsd2F5cyB0aGUgT1VURVIgbW91bnQncyBjb250aW51YXRpb24gbGVha2luZyBpbnRvIHRoZSBpbm5lclxuICAgIC8vIHRyZWUuIFRoYXQgYXNzdW1wdGlvbiB3YXMgd3Jvbmc6IHRoZSByZXNvbHZlZCBzdWJmbG93IHJvb3Qnc1xuICAgIC8vIGBuZXh0YCBpcyB0aGUgSU5ORVIgam9pbiBzdGFnZSAoZS5nLiwgUGFyYWxsZWwncyBNZXJnZSBhZnRlciBhXG4gICAgLy8gZmFuLW91dCwgVG9UJ3MgUHJ1bmVyKS4gU3RyaXBwaW5nIGl0IGJyb2tlIGNvbXBvc2l0ZSBzdWJmbG93cyDigJRcbiAgICAvLyB0aGUgam9pbiBzdGFnZSBuZXZlciByYW4sIHNvIHRoZSBzdWJmbG93IHJldHVybmVkIHBhcnRpYWwgc3RhdGUuXG4gICAgLy9cbiAgICAvLyBUaGUgb3V0ZXIgbW91bnQncyBwb3N0LXN1YmZsb3cgY29udGludWF0aW9uIGlzIGhhbmRsZWQgc2VwYXJhdGVseVxuICAgIC8vIGJ5IHRoZSBwYXJlbnQgdHJhdmVyc2VyIHZpYSBgcGFyZW50Q29udGV4dC5uZXh0Tm9kZWAgYW5kIGlzIG5ldmVyXG4gICAgLy8gY29uZmxhdGVkIHdpdGggdGhlIGlubmVyIHN1YmZsb3cncyBgbmV4dGAgY2hhaW4uXG4gICAgY29uc3Qgc3ViZmxvd05vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0ge1xuICAgICAgLi4ubm9kZSxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyDilIDilIDilIAgRXhlY3V0ZSB2aWEgZmFjdG9yeSB0cmF2ZXJzZXIg4pSA4pSA4pSAXG4gICAgLy8gVGhlIGZhY3RvcnkgY3JlYXRlcyBhIGZ1bGwgRmxvd2NoYXJ0VHJhdmVyc2VyIHdpdGggdGhlIHNhbWUgNy1waGFzZSBhbGdvcml0aG0sXG4gICAgLy8gc2hhcmluZyB0aGUgcGFyZW50J3Mgc3RhZ2VNYXAsIHN1YmZsb3dzIGRpY3QsIGFuZCBuYXJyYXRpdmUgZ2VuZXJhdG9yLlxuICAgIGxldCBzdWJmbG93T3V0cHV0OiBhbnk7XG4gICAgbGV0IHN1YmZsb3dFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHRyYXZlcnNlckhhbmRsZTogU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRyYXZlcnNlckhhbmRsZSA9IHRoaXMudHJhdmVyc2VyRmFjdG9yeSh7XG4gICAgICAgIHJvb3Q6IHN1YmZsb3dOb2RlLFxuICAgICAgICBleGVjdXRpb25SdW50aW1lOiBuZXN0ZWRSdW50aW1lLFxuICAgICAgICByZWFkT25seUNvbnRleHQ6IG1hcHBlZElucHV0LFxuICAgICAgICBzdWJmbG93SWQsXG4gICAgICB9KTtcblxuICAgICAgc3ViZmxvd091dHB1dCA9IGF3YWl0IHRyYXZlcnNlckhhbmRsZS5leGVjdXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gUGF1c2VTaWduYWwgaXMgbm90IGFuIGVycm9yIOKAlCBwcmVwZW5kIHN1YmZsb3cgSUQgYW5kIHJlLXRocm93XG4gICAgICAvLyBpbW1lZGlhdGVseS4gTm8gZXJyb3IgbG9nZ2luZywgbm8gc3ViZmxvd1Jlc3VsdCByZWNvcmRpbmcg4oCUXG4gICAgICAvLyB0aGUgcGF1c2UgaXMgY29udHJvbCBmbG93LlxuICAgICAgLy9cbiAgICAgIC8vIEJFRk9SRSByZS10aHJvdywgc25hcHNob3QgdGhlIG5lc3RlZCBydW50aW1lJ3MgYHNoYXJlZFN0YXRlYFxuICAgICAgLy8gb250byB0aGUgc2lnbmFsLiBUaGlzIGlzIHRoZSBvbmx5IGNoYW5jZSDigJQgb25jZSB3ZSByZS10aHJvdyxcbiAgICAgIC8vIHRoZSBvdXRlciB0cmF2ZXJzZXIgdW53aW5kcyBhbmQgdGhlIG5lc3RlZCBydW50aW1lIGlzIEdDJ2QuIE9uXG4gICAgICAvLyByZXN1bWUsIHdlJ2xsIHJlLXNlZWQgYSBmcmVzaCBuZXN0ZWQgcnVudGltZSBmcm9tIHRoaXMgY2FwdHVyZVxuICAgICAgLy8gc28gcmVzdW1lIGhhbmRsZXJzIGNhbiByZWFkIHRoZSBwcmUtcGF1c2Ugc3ViZmxvdyBzY29wZS5cbiAgICAgIC8vXG4gICAgICAvLyBDYXB0dXJlIGlzIGtleWVkIGJ5IHRoZSBTQU1FIHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGAgdXNlZCBpblxuICAgICAgLy8gYHN1YmZsb3dQYXRoYCwgc28gcmVzdW1lIGNhbiBsb29rIHVwIFwic2NvcGUgZm9yIHNmLWZvb1wiIGJ5IGlkLlxuICAgICAgaWYgKGlzUGF1c2VTaWduYWwoZXJyb3IpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc25hcCA9IG5lc3RlZFJ1bnRpbWUuZ2V0U25hcHNob3QoKTtcbiAgICAgICAgICAvLyBgc2hhcmVkU3RhdGVgIGlzIHRoZSBzdWJmbG93J3Mgd29ya2luZyBtZW1vcnkgYXQgcGF1c2VcbiAgICAgICAgICAvLyB0aW1lIChhZnRlciBldmVyeSBjb21taXR0ZWQgd3JpdGUgdXAgdG8gdGhlIHBhdXNlKS4gQ2FzdFxuICAgICAgICAgIC8vIGlzIHNhZmUg4oCUIFNoYXJlZE1lbW9yeSBzbmFwc2hvdCByZXR1cm5zIGEgcGxhaW4gb2JqZWN0LlxuICAgICAgICAgIGVycm9yLmNhcHR1cmVTdWJmbG93U2NvcGUoc3ViZmxvd0lkLCBzbmFwLnNoYXJlZFN0YXRlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gU25hcHNob3QgZmFpbHVyZSBzaG91bGRuJ3QgbWFzayB0aGUgcGF1c2Ug4oCUIGxldCB0aGUgcGF1c2VcbiAgICAgICAgICAvLyBidWJibGUgdXA7IHJlc3VtZSB3aWxsIGZhbGwgYmFjayB0byBjaGVja3BvaW50LnNoYXJlZFN0YXRlXG4gICAgICAgICAgLy8gKHRoZSBwYXJlbnQgc2NvcGUpIGZvciB0aGlzIHN1YmZsb3cncyBrZXlzLlxuICAgICAgICB9XG4gICAgICAgIGVycm9yLnByZXBlbmRTdWJmbG93KHN1YmZsb3dJZCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgc3ViZmxvd0Vycm9yID0gZXJyb3I7XG4gICAgICBwYXJlbnRDb250ZXh0LmFkZEVycm9yKCdzdWJmbG93RXJyb3InLCBlcnJvci50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIHN1YmZsb3cgKCR7c3ViZmxvd0lkfSk6YCwgeyBlcnJvciB9KTtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgbWVyZ2UgbmVzdGVkIHN1YmZsb3cgcmVzdWx0cyAoZXZlbiBvbiBlcnJvciDigJQgcGFydGlhbCByZXN1bHRzIGFpZCBkZWJ1Z2dpbmcpXG4gICAgaWYgKHRyYXZlcnNlckhhbmRsZSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdHJhdmVyc2VySGFuZGxlLmdldFN1YmZsb3dSZXN1bHRzKCkpIHtcbiAgICAgICAgc3ViZmxvd1Jlc3VsdHNNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOKUgOKUgOKUgCBCcmVhayBwcm9wYWdhdGlvbiAob3B0LWluIHZpYSBTdWJmbG93TW91bnRPcHRpb25zLnByb3BhZ2F0ZUJyZWFrKSDilIDilIBcbiAgICAvL1xuICAgIC8vIElmIHRoZSBzdWJmbG93J3MgaW5uZXIgdHJhdmVyc2FsIGJyb2tlIChiZWNhdXNlIGEgc3RhZ2UgY2FsbGVkXG4gICAgLy8gYHNjb3BlLiRicmVhayhyZWFzb24pYCkgQU5EIHRoZSBtb3VudCBkZWNsYXJlZCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgLFxuICAgIC8vIGZvcndhcmQgdGhlIGJyZWFrIHN0YXRlIHRvIHRoZSBQQVJFTlQncyBicmVha0ZsYWcuIFRoZSBwYXJlbnRcbiAgICAvLyB0cmF2ZXJzZXIgd2lsbCBzZWUgYHNob3VsZEJyZWFrYCBvbiBpdHMgbmV4dCBzdGVwIGFuZCBzdG9wLlxuICAgIC8vXG4gICAgLy8gV2l0aG91dCB0aGlzLCBpbm5lciBicmVha3MgYXJlIGxvY2FsbHkgc2NvcGVkIHRvIHRoZSBzdWJmbG93IOKAlCB0aGVcbiAgICAvLyBwYXJlbnQgY29udGludWVzIGFzIGlmIHRoZSBzdWJmbG93IHJldHVybmVkIG5vcm1hbGx5LlxuICAgIC8vXG4gICAgLy8gSU1QT1JUQU5UOiB0aGlzIHJ1bnMgQkVGT1JFIGBvdXRwdXRNYXBwaW5nYCBiZWxvdywgaW50ZW50aW9uYWxseS4gVGhlXG4gICAgLy8gb3V0cHV0TWFwcGVyIHN0aWxsIGV4ZWN1dGVzLCBzbyB0aGUgc3ViZmxvdydzIHBhcnRpYWwgcmVzdWx0IHN0aWxsXG4gICAgLy8gbGFuZHMgaW4gdGhlIHBhcmVudCBzY29wZS4gQ29uc3VtZXJzIHdobyBuZWVkIHRvIHN1cHByZXNzIG91dHB1dCBvblxuICAgIC8vIGJyZWFrIGNoZWNrIHRoZSBicmVhayBzdGF0ZSBpbnNpZGUgdGhlaXIgb3V0cHV0TWFwcGVyIGFuZCBlYXJseS1yZXR1cm4uXG4gICAgLy8gU2VlIGBTdWJmbG93TW91bnRPcHRpb25zLnByb3BhZ2F0ZUJyZWFrYCBKU0RvYyBmb3IgcmF0aW9uYWxlLlxuICAgIGlmICh0cmF2ZXJzZXJIYW5kbGUgJiYgbW91bnRPcHRpb25zPy5wcm9wYWdhdGVCcmVhayA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaW5uZXJCcmVhayA9IHRyYXZlcnNlckhhbmRsZS5nZXRCcmVha1N0YXRlKCk7XG4gICAgICBpZiAoaW5uZXJCcmVhay5zaG91bGRCcmVhaykge1xuICAgICAgICBicmVha0ZsYWcuc2hvdWxkQnJlYWsgPSB0cnVlO1xuICAgICAgICBpZiAoaW5uZXJCcmVhay5yZWFzb24gIT09IHVuZGVmaW5lZCAmJiBicmVha0ZsYWcucmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBicmVha0ZsYWcucmVhc29uID0gaW5uZXJCcmVhay5yZWFzb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmFpc2UgYSBwYXJlbnQtbGV2ZWwgb25CcmVhayBldmVudCBzbyByZWNvcmRlcnMgY2FuIGRpc3Rpbmd1aXNoXG4gICAgICAgIC8vIHRoZSBpbm5lciBvcmlnaW5hdGluZyBicmVhayAoZmlyZWQgaW5zaWRlIHRoZSBzdWJmbG93KSBmcm9tIHRoaXNcbiAgICAgICAgLy8gcHJvcGFnYXRlZCBvbmUgKGZpcmVkIGF0IHRoZSBtb3VudCBsZXZlbCBvbiB0aGUgcGFyZW50KS5cbiAgICAgICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vbkJyZWFrKHN1YmZsb3dOYW1lLCBwYXJlbnRUcmF2ZXJzYWxDb250ZXh0LCBpbm5lckJyZWFrLnJlYXNvbiwgc3ViZmxvd0lkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdWJmbG93VHJlZUNvbnRleHQgPSBuZXN0ZWRSdW50aW1lLmdldFNuYXBzaG90KCk7XG5cbiAgICAvLyDilIDilIDilIAgT3V0cHV0IE1hcHBpbmcg4pSA4pSA4pSAXG4gICAgaWYgKCFzdWJmbG93RXJyb3IgJiYgbW91bnRPcHRpb25zPy5vdXRwdXRNYXBwZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBvdXRwdXRDb250ZXh0ID0gcGFyZW50Q29udGV4dDtcbiAgICAgICAgaWYgKHBhcmVudENvbnRleHQuYnJhbmNoSWQgJiYgcGFyZW50Q29udGV4dC5icmFuY2hJZCAhPT0gJycgJiYgcGFyZW50Q29udGV4dC5wYXJlbnQpIHtcbiAgICAgICAgICBvdXRwdXRDb250ZXh0ID0gcGFyZW50Q29udGV4dC5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRTY29wZSA9IG91dHB1dENvbnRleHQuZ2V0U2NvcGUoKTtcbiAgICAgICAgLy8gRm9yIFR5cGVkU2NvcGUgc3ViZmxvd3MsIHN0YWdlIGZ1bmN0aW9ucyByZXR1cm4gdm9pZCDigJQgZmFsbCBiYWNrIHRvIGEgc2hhbGxvdyBjbG9uZVxuICAgICAgICAvLyBvZiB0aGUgc3ViZmxvdydzIHNoYXJlZCBzdGF0ZSBzbyBvdXRwdXRNYXBwZXIgY2FuIGFjY2VzcyBhbGwgc2NvcGUgdmFsdWVzIHdyaXR0ZW5cbiAgICAgICAgLy8gZHVyaW5nIHRoZSBzdWJmbG93LiBXZSBzaGFsbG93LWNsb25lIHRvIGF2b2lkIGFsaWFzaW5nIHRoZSBsaXZlIFNoYXJlZE1lbW9yeSBjb250ZXh0LlxuICAgICAgICAvLyBOT1RFOiB0aGUgZnVsbCBzY29wZSBpcyBwYXNzZWQgKG5vdCBqdXN0IGRlY2xhcmVkIG91dHB1dHMpIOKAlCBvdXRwdXRNYXBwZXIgbXVzdFxuICAgICAgICAvLyBleHBsaWNpdGx5IHNlbGVjdCB3aGF0IHRvIHByb3BhZ2F0ZSB0byB0aGUgcGFyZW50LlxuICAgICAgICAvLyBSZWRhY3Rpb246IHRoZSBzdWJmbG93IHNoYXJlcyB0aGUgcGFyZW50J3MgX3JlZGFjdGVkS2V5cyBTZXQgKHZpYSB0aGUgc2FtZSBTY29wZUZhY3RvcnkpLFxuICAgICAgICAvLyBzbyBhbnkga2V5IG1hcmtlZCByZWRhY3RlZCBpbiB0aGUgc3ViZmxvdyBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHBhcmVudCdzIHNjb3BlLlxuICAgICAgICAvLyBTY29wZUZhY2FkZS5zZXRWYWx1ZSBjaGVja3MgX3JlZGFjdGVkS2V5cy5oYXMoa2V5KSwgc28gd3JpdGVzIHZpYSBvdXRwdXRNYXBwZXJcbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBpbmhlcml0IHRoZSBzdWJmbG93J3MgZHluYW1pYyByZWRhY3Rpb24gc3RhdGUuXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZU91dHB1dCA9IHN1YmZsb3dPdXRwdXQgPz8geyAuLi5zdWJmbG93VHJlZUNvbnRleHQuc2hhcmVkU3RhdGUgfTtcbiAgICAgICAgY29uc3QgbWFwcGVkT3V0cHV0ID0gYXBwbHlPdXRwdXRNYXBwaW5nKGVmZmVjdGl2ZU91dHB1dCwgcGFyZW50U2NvcGUsIG91dHB1dENvbnRleHQsIG1vdW50T3B0aW9ucyk7XG5cbiAgICAgICAgb3V0cHV0Q29udGV4dC5jb21taXQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcGFyZW50Q29udGV4dC5hZGRFcnJvcignb3V0cHV0TWFwcGVyRXJyb3InLCBlcnJvci50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXJyb3IgaW4gb3V0cHV0TWFwcGVyIGZvciBzdWJmbG93ICgke3N1YmZsb3dJZH0pOmAsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViZmxvd1Jlc3VsdDogU3ViZmxvd1Jlc3VsdCA9IHtcbiAgICAgIHN1YmZsb3dJZCxcbiAgICAgIHN1YmZsb3dOYW1lLFxuICAgICAgdHJlZUNvbnRleHQ6IHtcbiAgICAgICAgZ2xvYmFsQ29udGV4dDogc3ViZmxvd1RyZWVDb250ZXh0LnNoYXJlZFN0YXRlLFxuICAgICAgICBzdGFnZUNvbnRleHRzOiBzdWJmbG93VHJlZUNvbnRleHQuZXhlY3V0aW9uVHJlZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICBoaXN0b3J5OiBzdWJmbG93VHJlZUNvbnRleHQuY29tbWl0TG9nLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWdlSWQ6IHBhcmVudENvbnRleHQuZ2V0U3RhZ2VJZCgpLFxuICAgIH07XG5cbiAgICBjb25zdCBzdWJmbG93RGVmID0gdGhpcy5kZXBzLnN1YmZsb3dzPy5bc3ViZmxvd0lkXTtcbiAgICBpZiAoc3ViZmxvd0RlZiAmJiAoc3ViZmxvd0RlZiBhcyBhbnkpLmJ1aWxkVGltZVN0cnVjdHVyZSkge1xuICAgICAgc3ViZmxvd1Jlc3VsdC5waXBlbGluZVN0cnVjdHVyZSA9IChzdWJmbG93RGVmIGFzIGFueSkuYnVpbGRUaW1lU3RydWN0dXJlO1xuICAgIH1cblxuICAgIHN1YmZsb3dSZXN1bHRzTWFwLnNldChzdWJmbG93SWQsIHN1YmZsb3dSZXN1bHQpO1xuXG4gICAgcGFyZW50Q29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKCdzdWJmbG93JywgYEV4aXRpbmcgJHtzdWJmbG93TmFtZX0gc3ViZmxvd2AsIHtcbiAgICAgIHRhcmdldFN0YWdlOiBzdWJmbG93SWQsXG4gICAgfSk7XG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vblN1YmZsb3dFeGl0KFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgICBzdWJmbG93SWQsXG4gICAgICBwYXJlbnRUcmF2ZXJzYWxDb250ZXh0LFxuICAgICAgc3ViZmxvd1Jlc3VsdC50cmVlQ29udGV4dD8uZ2xvYmFsQ29udGV4dCxcbiAgICApO1xuXG4gICAgcGFyZW50Q29udGV4dC5jb21taXQoKTtcblxuICAgIGlmIChzdWJmbG93RXJyb3IpIHtcbiAgICAgIHRocm93IHN1YmZsb3dFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3ViZmxvd091dHB1dDtcbiAgfVxufVxuIl19
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7QUFHSCxtREFBcUQ7QUFVckQsbUVBQTRHO0FBRzVHLE1BQWEsZUFBZTtJQUVoQjtJQUNBO0lBRlYsWUFDVSxJQUErQixFQUMvQixnQkFBdUQ7UUFEdkQsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF1QztJQUM5RCxDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUNsQixJQUE2QixFQUM3QixhQUEyQixFQUMzQixTQUFvQixFQUNwQixVQUE4QixFQUM5QixpQkFBNkMsRUFDN0Msc0JBQXlDO1FBRXpDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWxELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxXQUFXLFVBQVUsRUFBRTtZQUM5RSxXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCx3QkFBd0I7UUFDeEIsRUFBRTtRQUNGLGlFQUFpRTtRQUNqRSxpRUFBaUU7UUFDakUsK0RBQStEO1FBQy9ELHlEQUF5RDtRQUN6RCxtRUFBbUU7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzlDLElBQUksV0FBVyxHQUE0QixFQUFFLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQztRQUUzRCxJQUFJLFlBQVksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDO2dCQUNILE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsV0FBVyxHQUFHLElBQUEsNkNBQXFCLEVBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN4QyxxRUFBcUU7Z0JBQ3ZFLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztnQkFDcEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxTQUFTLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3RGLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFFRCxzRkFBc0Y7UUFDdEYsMkZBQTJGO1FBQzNGLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQztRQUNuQyx5RkFBeUY7UUFDekYseUZBQXlGO1FBQ3pGLHFGQUFxRjtRQUNyRixrRkFBa0Y7UUFDbEYsbUZBQW1GO1FBQ25GLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztRQUMzRSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FDekMsV0FBVyxFQUNYLFNBQVMsRUFDVCxlQUFlLElBQUksSUFBSSxDQUFDLFdBQVcsRUFDbkMsc0JBQXNCLEVBQ3RCLGNBQWMsQ0FDZixDQUFDO1FBQ0YsK0RBQStEO1FBQy9ELGlFQUFpRTtRQUNqRSx1RUFBdUU7UUFDdkUsNERBQTREO1FBQzVELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FDMUMsSUFBSSxDQUFDLElBQUksRUFDVCxlQUFlLElBQUksSUFBSSxDQUFDLFdBQVcsRUFDbkMsc0JBQXNCLEVBQ3RCLGVBQWUsQ0FDaEIsQ0FBQztRQUVGLDRFQUE0RTtRQUM1RSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FHbkMsQ0FBQztRQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksaUJBQWlCLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDO1FBRXZELHNEQUFzRDtRQUN0RCxrRUFBa0U7UUFDbEUsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxNQUFNLFVBQVUsR0FBNEIsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLGFBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ2xHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBQSw4Q0FBc0IsRUFBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEQsOERBQThEO1lBQzlELE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsV0FBbUQsQ0FBQztZQUNoRyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixDQUN2QyxFQUFFLEVBQ0YsaUJBQWlCLENBQUMsU0FBUyxFQUMzQixpQkFBaUIsQ0FBQyxPQUFPLEVBQ3pCLGFBQWEsQ0FBQyxXQUFXLEVBQ3pCLEVBQUUsRUFDRixhQUFhLENBQUMsZ0JBQWdCLENBQy9CLENBQUM7WUFDRixhQUFhLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7UUFDckQsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFDN0QsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLElBQUksa0JBQWtCLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdEUsaUJBQWlCLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsb0VBQW9FO1FBQ3BFLGdEQUFnRDtRQUNoRCxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7UUFDL0QsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLElBQUksbUJBQW1CLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDeEUsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLEVBQUU7UUFDRixrRUFBa0U7UUFDbEUsK0RBQStEO1FBQy9ELCtEQUErRDtRQUMvRCwrREFBK0Q7UUFDL0QsaUVBQWlFO1FBQ2pFLGtFQUFrRTtRQUNsRSxtRUFBbUU7UUFDbkUsRUFBRTtRQUNGLG9FQUFvRTtRQUNwRSxvRUFBb0U7UUFDcEUsbURBQW1EO1FBQ25ELE1BQU0sV0FBVyxHQUE0QjtZQUMzQyxHQUFHLElBQUk7WUFDUCxhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLGlGQUFpRjtRQUNqRix5RUFBeUU7UUFDekUsSUFBSSxhQUFrQixDQUFDO1FBQ3ZCLElBQUksWUFBK0IsQ0FBQztRQUNwQyxJQUFJLGVBQWlFLENBQUM7UUFFdEUsSUFBSSxDQUFDO1lBQ0gsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdEMsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLGdCQUFnQixFQUFFLGFBQWE7Z0JBQy9CLGVBQWUsRUFBRSxXQUFXO2dCQUM1QixTQUFTO2FBQ1YsQ0FBQyxDQUFDO1lBRUgsYUFBYSxHQUFHLE1BQU0sZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLGdFQUFnRTtZQUNoRSw4REFBOEQ7WUFDOUQsNkJBQTZCO1lBQzdCLEVBQUU7WUFDRiwrREFBK0Q7WUFDL0QsK0RBQStEO1lBQy9ELGlFQUFpRTtZQUNqRSxpRUFBaUU7WUFDakUsMkRBQTJEO1lBQzNELEVBQUU7WUFDRixpRUFBaUU7WUFDakUsaUVBQWlFO1lBQ2pFLElBQUksSUFBQSx3QkFBYSxFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3pDLHlEQUF5RDtvQkFDekQsMkRBQTJEO29CQUMzRCwwREFBMEQ7b0JBQzFELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQXNDLENBQUMsQ0FBQztnQkFDcEYsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsNERBQTREO29CQUM1RCw2REFBNkQ7b0JBQzdELDhDQUE4QztnQkFDaEQsQ0FBQztnQkFDRCxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7WUFDRCxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLGFBQWEsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsU0FBUyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxzRkFBc0Y7UUFDdEYsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztnQkFDL0QsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxFQUFFO1FBQ0YsaUVBQWlFO1FBQ2pFLHlFQUF5RTtRQUN6RSxnRUFBZ0U7UUFDaEUsOERBQThEO1FBQzlELEVBQUU7UUFDRixxRUFBcUU7UUFDckUsd0RBQXdEO1FBQ3hELEVBQUU7UUFDRix3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLHNFQUFzRTtRQUN0RSwwRUFBMEU7UUFDMUUsZ0VBQWdFO1FBQ2hFLElBQUksZUFBZSxJQUFJLFlBQVksRUFBRSxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0QsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25ELElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQixTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN0RSxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBQ0Qsa0VBQWtFO2dCQUNsRSxtRUFBbUU7Z0JBQ25FLDJEQUEyRDtnQkFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDMUcsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2RCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDO2dCQUNILElBQUksYUFBYSxHQUFHLGFBQWEsQ0FBQztnQkFDbEMsSUFBSSxhQUFhLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssRUFBRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDcEYsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBRUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxzRkFBc0Y7Z0JBQ3RGLG9GQUFvRjtnQkFDcEYsd0ZBQXdGO2dCQUN4RixpRkFBaUY7Z0JBQ2pGLHFEQUFxRDtnQkFDckQsNEZBQTRGO2dCQUM1RixzRkFBc0Y7Z0JBQ3RGLGlGQUFpRjtnQkFDakYsK0RBQStEO2dCQUMvRCxNQUFNLGVBQWUsR0FBRyxhQUFhLElBQUksRUFBRSxHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMvRSxNQUFNLFlBQVksR0FBRyxJQUFBLDBDQUFrQixFQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUVuRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7Z0JBQ3BCLGFBQWEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsU0FBUyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQWtCO1lBQ25DLFNBQVM7WUFDVCxXQUFXO1lBQ1gsV0FBVyxFQUFFO2dCQUNYLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXO2dCQUM3QyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsYUFBbUQ7Z0JBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxTQUFTO2FBQ3RDO1lBQ0QsYUFBYSxFQUFFLGFBQWEsQ0FBQyxVQUFVLEVBQUU7U0FDMUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsSUFBSSxVQUFVLElBQUssVUFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pELGFBQWEsQ0FBQyxpQkFBaUIsR0FBSSxVQUFrQixDQUFDLGtCQUFrQixDQUFDO1FBQzNFLENBQUM7UUFFRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWhELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxXQUFXLFVBQVUsRUFBRTtZQUM3RSxXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FDeEMsV0FBVyxFQUNYLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsYUFBYSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQ3pDLENBQUM7UUFFRixhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFdkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLFlBQVksQ0FBQztRQUNyQixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBaFRELDBDQWdUQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3ViZmxvd0V4ZWN1dG9yIOKAlCBJc29sYXRpb24gYm91bmRhcnkgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIENyZWF0ZSBpc29sYXRlZCBFeGVjdXRpb25SdW50aW1lIGZvciBlYWNoIHN1YmZsb3dcbiAqIC0gQXBwbHkgaW5wdXQvb3V0cHV0IG1hcHBpbmcgdmlhIFN1YmZsb3dJbnB1dE1hcHBlclxuICogLSBEZWxlZ2F0ZSB0cmF2ZXJzYWwgdG8gYSBmYWN0b3J5LWNyZWF0ZWQgRmxvd2NoYXJ0VHJhdmVyc2VyXG4gKiAtIFRyYWNrIHN1YmZsb3cgcmVzdWx0cyBmb3IgZGVidWdnaW5nL3Zpc3VhbGl6YXRpb25cbiAqXG4gKiBFYWNoIHN1YmZsb3cgZ2V0cyBpdHMgb3duIEdsb2JhbFN0b3JlIGZvciBpc29sYXRpb24uXG4gKiBUcmF2ZXJzYWwgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlclxuICogKHZpYSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSksIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLFxuICogYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IGlzUGF1c2VTaWduYWwgfSBmcm9tICcuLi8uLi9wYXVzZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBIYW5kbGVyRGVwcyxcbiAgSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIFN1YmZsb3dSZXN1bHQsXG4gIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LFxuICBTdWJmbG93VHJhdmVyc2VySGFuZGxlLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBhcHBseU91dHB1dE1hcHBpbmcsIGdldEluaXRpYWxTY29wZVZhbHVlcywgc2VlZFN1YmZsb3dHbG9iYWxTdG9yZSB9IGZyb20gJy4vU3ViZmxvd0lucHV0TWFwcGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQnJlYWtGbGFnIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTdWJmbG93RXhlY3V0b3I8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGVwczogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPixcbiAgICBwcml2YXRlIHRyYXZlcnNlckZhY3Rvcnk6IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQsIFRTY29wZT4sXG4gICkge31cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHN1YmZsb3cgd2l0aCBpc29sYXRlZCBjb250ZXh0LlxuICAgKlxuICAgKiAxLiBDcmVhdGVzIGEgZnJlc2ggRXhlY3V0aW9uUnVudGltZSBmb3IgdGhlIHN1YmZsb3dcbiAgICogMi4gQXBwbGllcyBpbnB1dCBtYXBwaW5nIHRvIHNlZWQgdGhlIHN1YmZsb3cncyBHbG9iYWxTdG9yZVxuICAgKiAzLiBEZWxlZ2F0ZXMgdHJhdmVyc2FsIHRvIGEgZmFjdG9yeS1jcmVhdGVkIEZsb3djaGFydFRyYXZlcnNlclxuICAgKiA0LiBBcHBsaWVzIG91dHB1dCBtYXBwaW5nIHRvIHdyaXRlIHJlc3VsdHMgYmFjayB0byBwYXJlbnQgc2NvcGVcbiAgICogNS4gU3RvcmVzIGV4ZWN1dGlvbiBkYXRhIGZvciBkZWJ1Z2dpbmcvdmlzdWFsaXphdGlvblxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZVN1YmZsb3coXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgcGFyZW50Q29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogQnJlYWtGbGFnLFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzdWJmbG93UmVzdWx0c01hcDogTWFwPHN0cmluZywgU3ViZmxvd1Jlc3VsdD4sXG4gICAgcGFyZW50VHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgc3ViZmxvd0lkID0gbm9kZS5zdWJmbG93SWQhO1xuICAgIGNvbnN0IHN1YmZsb3dOYW1lID0gbm9kZS5zdWJmbG93TmFtZSA/PyBub2RlLm5hbWU7XG5cbiAgICBwYXJlbnRDb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoJ3N1YmZsb3cnLCBgRW50ZXJpbmcgJHtzdWJmbG93TmFtZX0gc3ViZmxvd2AsIHtcbiAgICAgIHRhcmdldFN0YWdlOiBzdWJmbG93SWQsXG4gICAgfSk7XG5cbiAgICAvLyDilIDilIDilIAgSW5wdXQgTWFwcGluZyDilIDilIDilIBcbiAgICAvL1xuICAgIC8vIFJFU1VNRSBQQVRIIE5PVEU6IHdoZW4gYGRlcHMuc3ViZmxvd1N0YXRlc0ZvclJlc3VtZWAgY2FycmllcyBhXG4gICAgLy8gY2FwdHVyZSBmb3IgVEhJUyBzdWJmbG93IGlkLCB3ZSBTS0lQIHRoZSBpbnB1dE1hcHBlciBlbnRpcmVseS5cbiAgICAvLyBUaGUgY2FwdHVyZSBpcyB0aGUgcG9zdC1pbnB1dCBwcmUtcGF1c2UgbWVtb3J5IOKAlCBydW5uaW5nIHRoZVxuICAgIC8vIG1hcHBlciBhZ2FpbiB3b3VsZCBjbG9iYmVyIHBvc3QtaW5wdXQgd3JpdGVzIChoaXN0b3J5LFxuICAgIC8vIHBhdXNlZFRvb2xDYWxsSWQsIGV0Yy4pIHdpdGggdGhlIHBhcmVudCdzIHN0YXJ0LW9mLXN1YmZsb3cgdmlldy5cbiAgICBjb25zdCBtb3VudE9wdGlvbnMgPSBub2RlLnN1YmZsb3dNb3VudE9wdGlvbnM7XG4gICAgbGV0IG1hcHBlZElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGNvbnN0IHJlc3VtZUNhcHR1cmUgPSB0aGlzLmRlcHMuc3ViZmxvd1N0YXRlc0ZvclJlc3VtZT8uW3N1YmZsb3dJZF07XG4gICAgY29uc3QgaXNSZXN1bWVGb3JUaGlzU3ViZmxvdyA9IHJlc3VtZUNhcHR1cmUgIT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChtb3VudE9wdGlvbnMgJiYgIWlzUmVzdW1lRm9yVGhpc1N1YmZsb3cpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFNjb3BlID0gcGFyZW50Q29udGV4dC5nZXRTY29wZSgpO1xuICAgICAgICBtYXBwZWRJbnB1dCA9IGdldEluaXRpYWxTY29wZVZhbHVlcyhwYXJlbnRTY29wZSwgbW91bnRPcHRpb25zKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcHBlZElucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gbWFwcGVkSW5wdXQgaXMgY2FwdHVyZWQgaW4gU3ViZmxvd1Jlc3VsdC50cmVlQ29udGV4dCBmb3IgZGVidWdnaW5nXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcGFyZW50Q29udGV4dC5hZGRFcnJvcignaW5wdXRNYXBwZXJFcnJvcicsIGVycm9yLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBpbnB1dE1hcHBlciBmb3Igc3ViZmxvdyAoJHtzdWJmbG93SWR9KTpgLCB7IGVycm9yIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOYXJyYXRpdmUgcmVjZWl2ZXMgbWFwcGVkIGlucHV0LiBpbnB1dE1hcHBlciBpcyBhIGNvbnN1bWVyIGZ1bmN0aW9uIHRoYXQgbWF5IGluamVjdFxuICAgIC8vIHZhbHVlcyBub3QgZnJvbSB0aGUgc2NvcGUgKGJ5cGFzc2luZyByZWRhY3Rpb24pLiBUaGUgcmVjb3JkZXIgcmVuZGVycyBwZXIgaW5jbHVkZVZhbHVlcy5cbiAgICBjb25zdCBuYXJyYXRpdmVJbnB1dCA9IG1hcHBlZElucHV0O1xuICAgIC8vIGBGbG93U3ViZmxvd0V2ZW50LmRlc2NyaXB0aW9uYCBpcyBzZW1hbnRpY2FsbHkgXCJ3aGF0IHRoaXMgc3ViZmxvdyBkb2VzXCIg4oCUIHNvdXJjZWQgZnJvbVxuICAgIC8vIHRoZSBzdWJmbG93J3Mgb3duIHJvb3Qgc3RhZ2UsIG5vdCB0aGUgcGFyZW50IG1vdW50IHBvaW50LiBUaGUgbW91bnQgbm9kZSBuZXZlciBjYXJyaWVzXG4gICAgLy8gYSBkZXNjcmlwdGlvbiAoYnVpbGRlcnMgZG9uJ3QgY29weSBpdCksIHNvIHJlYWRpbmcgYG5vZGUuZGVzY3JpcHRpb25gIGhlcmUgcmV0dXJuc1xuICAgIC8vIGB1bmRlZmluZWRgIGFuZCB0YXhvbm9teSBtYXJrZXJzIHNldCBvbiB0aGUgc3ViZmxvdyByb290IChlLmcuIGFnZW50Zm9vdHByaW50J3NcbiAgICAvLyBgJ0FnZW50OiBSZUFjdCBsb29wJ2AgLyBgJ0xMTUNhbGw6IG9uZS1zaG90J2ApIG5ldmVyIHJlYWNoIGRvd25zdHJlYW0gY29uc3VtZXJzLlxuICAgIGNvbnN0IHJvb3REZXNjcmlwdGlvbiA9IHRoaXMuZGVwcy5zdWJmbG93cz8uW3N1YmZsb3dJZF0/LnJvb3Q/LmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdWJmbG93RW50cnkoXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHN1YmZsb3dJZCxcbiAgICAgIHJvb3REZXNjcmlwdGlvbiA/PyBub2RlLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50VHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIG5hcnJhdGl2ZUlucHV0LFxuICAgICk7XG4gICAgLy8gUHJvcG9zYWwgIzAwMzogZmlyZSBvblN0YWdlRXhlY3V0ZWQgZm9yIHRoZSBtb3VudCBub2RlIEFGVEVSXG4gICAgLy8gb25TdWJmbG93RW50cnkgc28gY29uc3VtZXJzIHRyYWNraW5nIFwiZGlkIHRoaXMgc3RhZ2UgcnVuXCIgd29ya1xuICAgIC8vIHVuaWZvcm1seSBhY3Jvc3MgbGluZWFyIC8gZGVjaWRlciAvIGZvcmsgLyBzZWxlY3RvciAvIHN1YmZsb3ctbW91bnQuXG4gICAgLy8gRmlyZXMgb24gRU5UUlkgKG5vdCBleGl0KSDigJQgZW50cnkgPSBcInRoaXMgbW91bnQgcmFuXCI7IHRoZVxuICAgIC8vIHN1YmZsb3cncyBjaGlsZHJlbiBleGVjdXRlIGFmdGVyIGFzIHNlcGFyYXRlIHN0YWdlcy5cbiAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uU3RhZ2VFeGVjdXRlZChcbiAgICAgIG5vZGUubmFtZSxcbiAgICAgIHJvb3REZXNjcmlwdGlvbiA/PyBub2RlLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50VHJhdmVyc2FsQ29udGV4dCxcbiAgICAgICdzdWJmbG93LW1vdW50JyxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGlzb2xhdGVkIHJ1bnRpbWUgdmlhIGR5bmFtaWMgY29uc3RydWN0aW9uIChhdm9pZHMgY2lyY3VsYXIgaW1wb3J0KVxuICAgIGNvbnN0IEV4ZWN1dGlvblJ1bnRpbWVDbGFzcyA9IHRoaXMuZGVwcy5leGVjdXRpb25SdW50aW1lLmNvbnN0cnVjdG9yIGFzIG5ldyAoXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBpZDogc3RyaW5nLFxuICAgICkgPT4gSUV4ZWN1dGlvblJ1bnRpbWU7XG4gICAgY29uc3QgbmVzdGVkUnVudGltZSA9IG5ldyBFeGVjdXRpb25SdW50aW1lQ2xhc3Mobm9kZS5uYW1lLCBub2RlLmlkKTtcbiAgICBsZXQgbmVzdGVkUm9vdENvbnRleHQgPSBuZXN0ZWRSdW50aW1lLnJvb3RTdGFnZUNvbnRleHQ7XG5cbiAgICAvLyBTZWVkIEdsb2JhbFN0b3JlIHdpdGggdGhlIHJpZ2h0IHNoYXBlIGZvciB0aGUgcGF0aDpcbiAgICAvLyAgIOKAoiBSZXN1bWUgaW50byBUSElTIHN1YmZsb3cg4oaSIHNlZWQgZnJvbSB0aGUgY2FwdHVyZWQgcHJlLXBhdXNlXG4gICAgLy8gICAgIHNjb3BlIHNvIHJlc3VtZSBoYW5kbGVycyBzZWUgaGlzdG9yeSwgcGF1c2VkVG9vbENhbGxJZCwgZXRjLlxuICAgIC8vICAg4oCiIE5vcm1hbCBlbnRyeSDihpIgc2VlZCBmcm9tIHRoZSBpbnB1dE1hcHBlcidzIG1hcHBlZElucHV0LlxuICAgIGNvbnN0IHNlZWRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gaXNSZXN1bWVGb3JUaGlzU3ViZmxvdyA/IHJlc3VtZUNhcHR1cmUhIDogbWFwcGVkSW5wdXQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHNlZWRWYWx1ZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHNlZWRTdWJmbG93R2xvYmFsU3RvcmUobmVzdGVkUnVudGltZSwgc2VlZFZhbHVlcyk7XG4gICAgICAvLyBSZWZyZXNoIHJvb3RTdGFnZUNvbnRleHQgc28gV3JpdGVCdWZmZXIgc2VlcyBjb21taXR0ZWQgZGF0YVxuICAgICAgY29uc3QgU3RhZ2VDb250ZXh0Q2xhc3MgPSBuZXN0ZWRSb290Q29udGV4dC5jb25zdHJ1Y3RvciBhcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBTdGFnZUNvbnRleHQ7XG4gICAgICBuZXN0ZWRSb290Q29udGV4dCA9IG5ldyBTdGFnZUNvbnRleHRDbGFzcyhcbiAgICAgICAgJycsXG4gICAgICAgIG5lc3RlZFJvb3RDb250ZXh0LnN0YWdlTmFtZSxcbiAgICAgICAgbmVzdGVkUm9vdENvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgbmVzdGVkUnVudGltZS5nbG9iYWxTdG9yZSxcbiAgICAgICAgJycsXG4gICAgICAgIG5lc3RlZFJ1bnRpbWUuZXhlY3V0aW9uSGlzdG9yeSxcbiAgICAgICk7XG4gICAgICBuZXN0ZWRSdW50aW1lLnJvb3RTdGFnZUNvbnRleHQgPSBuZXN0ZWRSb290Q29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBSZWFkLXRyYWNraW5nIHBvbGljeSAoIzE0KTogc3ViZmxvd3MgZ2V0IGFuIElTT0xBVEVEIHJ1bnRpbWUsIHNvIHRoZVxuICAgIC8vIGV4ZWN1dG9yLWxldmVsIHBvbGljeSBkb2Vzbid0IHJlYWNoIHRoZW0gdmlhIHRoZSByb290IGNvbnRleHQgY2hhaW4uXG4gICAgLy8gSW5oZXJpdCBpdCBmcm9tIHRoZSBwYXJlbnQtbW91bnQgY29udGV4dCAod2hpY2ggaW5oZXJpdGVkIGl0IGZyb20gSVRTXG4gICAgLy8gcm9vdCB2aWEgY3JlYXRlTmV4dC9jcmVhdGVDaGlsZCkg4oCUIGFwcGxpZWQgdG8gdGhlIEZJTkFMIG5lc3RlZCByb290LFxuICAgIC8vIGFmdGVyIHRoZSBzZWVkaW5nIGJsb2NrIGFib3ZlIG1heSBoYXZlIHJlcGxhY2VkIGl0LiBOZXN0ZWQgc3ViZmxvd3NcbiAgICAvLyBjaGFpbiB0aGUgc2FtZSB3YXksIG9uZSBob3AgcGVyIG1vdW50LiBPcHRpb25hbC1jaGFpbmVkIGJlY2F1c2UgdGhpc1xuICAgIC8vIHNlY3Rpb24gaXMgZHVjay10eXBlZCBieSBkZXNpZ24gKGR5bmFtaWMgY29uc3RydWN0aW9uIHRvIGF2b2lkIHRoZVxuICAgIC8vIGNpcmN1bGFyIGltcG9ydCkg4oCUIGFuZCBza2lwcGVkIGF0IHRoZSBkZWZhdWx0ICdmdWxsJywgd2hlcmUgdGhlIGZyZXNoXG4gICAgLy8gbmVzdGVkIGNvbnRleHQgaXMgYWxyZWFkeSBjb3JyZWN0LCBzbyB0aGUgZGVmYXVsdCBwYXRoIGRvZXMgemVybyB3b3JrLlxuICAgIGNvbnN0IHBhcmVudFJlYWRUcmFja2luZyA9IHBhcmVudENvbnRleHQuZ2V0UmVhZFRyYWNraW5nPy4oKTtcbiAgICBpZiAocGFyZW50UmVhZFRyYWNraW5nICE9PSB1bmRlZmluZWQgJiYgcGFyZW50UmVhZFRyYWNraW5nICE9PSAnZnVsbCcpIHtcbiAgICAgIG5lc3RlZFJvb3RDb250ZXh0LnVzZVJlYWRUcmFja2luZyhwYXJlbnRSZWFkVHJhY2tpbmcpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlLXRyYWNraW5nIHBvbGljeSAoIzEzYy1BKTogc2FtZSBpbmhlcml0YW5jZSBob3AgYXMgcmVhZFRyYWNraW5nXG4gICAgLy8gYWJvdmUg4oCUIHN1YmZsb3cgcnVudGltZXMgYXJlIGlzb2xhdGVkLCBzbyB0aGUgcGFyZW50LW1vdW50IGNvbnRleHQnc1xuICAgIC8vIG1vZGUgaXMgcHVzaGVkIGludG8gdGhlIEZJTkFMIG5lc3RlZCByb290IHdpdGggdGhlIHNhbWUgZHVjay10eXBlXG4gICAgLy8gZ3VhcmQgYW5kIHRoZSBzYW1lIHNraXAtYXQtZGVmYXVsdCBmYXN0IHBhdGguXG4gICAgY29uc3QgcGFyZW50V3JpdGVUcmFja2luZyA9IHBhcmVudENvbnRleHQuZ2V0V3JpdGVUcmFja2luZz8uKCk7XG4gICAgaWYgKHBhcmVudFdyaXRlVHJhY2tpbmcgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRXcml0ZVRyYWNraW5nICE9PSAnZnVsbCcpIHtcbiAgICAgIG5lc3RlZFJvb3RDb250ZXh0LnVzZVdyaXRlVHJhY2tpbmcocGFyZW50V3JpdGVUcmFja2luZyk7XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBzdWJmbG93IHJvb3Qgbm9kZSDigJQgc3RyaXAgaXNTdWJmbG93Um9vdCB0byBwcmV2ZW50IHJlLWRlbGVnYXRpb24uXG4gICAgLy9cbiAgICAvLyBQUkVTRVJWRSBgbmV4dGAuIEVhcmxpZXIgcmV2aXNpb25zIHN0cmlwcGVkIGBuZXh0YCB3aGVuZXZlciB0aGVcbiAgICAvLyBzdWJmbG93IHJvb3QgaGFkIGNoaWxkcmVuLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGBuZXh0YCB3YXNcbiAgICAvLyBhbHdheXMgdGhlIE9VVEVSIG1vdW50J3MgY29udGludWF0aW9uIGxlYWtpbmcgaW50byB0aGUgaW5uZXJcbiAgICAvLyB0cmVlLiBUaGF0IGFzc3VtcHRpb24gd2FzIHdyb25nOiB0aGUgcmVzb2x2ZWQgc3ViZmxvdyByb290J3NcbiAgICAvLyBgbmV4dGAgaXMgdGhlIElOTkVSIGpvaW4gc3RhZ2UgKGUuZy4sIFBhcmFsbGVsJ3MgTWVyZ2UgYWZ0ZXIgYVxuICAgIC8vIGZhbi1vdXQsIFRvVCdzIFBydW5lcikuIFN0cmlwcGluZyBpdCBicm9rZSBjb21wb3NpdGUgc3ViZmxvd3Mg4oCUXG4gICAgLy8gdGhlIGpvaW4gc3RhZ2UgbmV2ZXIgcmFuLCBzbyB0aGUgc3ViZmxvdyByZXR1cm5lZCBwYXJ0aWFsIHN0YXRlLlxuICAgIC8vXG4gICAgLy8gVGhlIG91dGVyIG1vdW50J3MgcG9zdC1zdWJmbG93IGNvbnRpbnVhdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHlcbiAgICAvLyBieSB0aGUgcGFyZW50IHRyYXZlcnNlciB2aWEgYHBhcmVudENvbnRleHQubmV4dE5vZGVgIGFuZCBpcyBuZXZlclxuICAgIC8vIGNvbmZsYXRlZCB3aXRoIHRoZSBpbm5lciBzdWJmbG93J3MgYG5leHRgIGNoYWluLlxuICAgIGNvbnN0IHN1YmZsb3dOb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHtcbiAgICAgIC4uLm5vZGUsXG4gICAgICBpc1N1YmZsb3dSb290OiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8g4pSA4pSA4pSAIEV4ZWN1dGUgdmlhIGZhY3RvcnkgdHJhdmVyc2VyIOKUgOKUgOKUgFxuICAgIC8vIFRoZSBmYWN0b3J5IGNyZWF0ZXMgYSBmdWxsIEZsb3djaGFydFRyYXZlcnNlciB3aXRoIHRoZSBzYW1lIDctcGhhc2UgYWxnb3JpdGhtLFxuICAgIC8vIHNoYXJpbmcgdGhlIHBhcmVudCdzIHN0YWdlTWFwLCBzdWJmbG93cyBkaWN0LCBhbmQgbmFycmF0aXZlIGdlbmVyYXRvci5cbiAgICBsZXQgc3ViZmxvd091dHB1dDogYW55O1xuICAgIGxldCBzdWJmbG93RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCB0cmF2ZXJzZXJIYW5kbGU6IFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICB0cmF2ZXJzZXJIYW5kbGUgPSB0aGlzLnRyYXZlcnNlckZhY3Rvcnkoe1xuICAgICAgICByb290OiBzdWJmbG93Tm9kZSxcbiAgICAgICAgZXhlY3V0aW9uUnVudGltZTogbmVzdGVkUnVudGltZSxcbiAgICAgICAgcmVhZE9ubHlDb250ZXh0OiBtYXBwZWRJbnB1dCxcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgfSk7XG5cbiAgICAgIHN1YmZsb3dPdXRwdXQgPSBhd2FpdCB0cmF2ZXJzZXJIYW5kbGUuZXhlY3V0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIFBhdXNlU2lnbmFsIGlzIG5vdCBhbiBlcnJvciDigJQgcHJlcGVuZCBzdWJmbG93IElEIGFuZCByZS10aHJvd1xuICAgICAgLy8gaW1tZWRpYXRlbHkuIE5vIGVycm9yIGxvZ2dpbmcsIG5vIHN1YmZsb3dSZXN1bHQgcmVjb3JkaW5nIOKAlFxuICAgICAgLy8gdGhlIHBhdXNlIGlzIGNvbnRyb2wgZmxvdy5cbiAgICAgIC8vXG4gICAgICAvLyBCRUZPUkUgcmUtdGhyb3csIHNuYXBzaG90IHRoZSBuZXN0ZWQgcnVudGltZSdzIGBzaGFyZWRTdGF0ZWBcbiAgICAgIC8vIG9udG8gdGhlIHNpZ25hbC4gVGhpcyBpcyB0aGUgb25seSBjaGFuY2Ug4oCUIG9uY2Ugd2UgcmUtdGhyb3csXG4gICAgICAvLyB0aGUgb3V0ZXIgdHJhdmVyc2VyIHVud2luZHMgYW5kIHRoZSBuZXN0ZWQgcnVudGltZSBpcyBHQydkLiBPblxuICAgICAgLy8gcmVzdW1lLCB3ZSdsbCByZS1zZWVkIGEgZnJlc2ggbmVzdGVkIHJ1bnRpbWUgZnJvbSB0aGlzIGNhcHR1cmVcbiAgICAgIC8vIHNvIHJlc3VtZSBoYW5kbGVycyBjYW4gcmVhZCB0aGUgcHJlLXBhdXNlIHN1YmZsb3cgc2NvcGUuXG4gICAgICAvL1xuICAgICAgLy8gQ2FwdHVyZSBpcyBrZXllZCBieSB0aGUgU0FNRSBwYXRoLXByZWZpeGVkIGBzdWJmbG93SWRgIHVzZWQgaW5cbiAgICAgIC8vIGBzdWJmbG93UGF0aGAsIHNvIHJlc3VtZSBjYW4gbG9vayB1cCBcInNjb3BlIGZvciBzZi1mb29cIiBieSBpZC5cbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXN0ZWRSdW50aW1lLmdldFNuYXBzaG90KCk7XG4gICAgICAgICAgLy8gYHNoYXJlZFN0YXRlYCBpcyB0aGUgc3ViZmxvdydzIHdvcmtpbmcgbWVtb3J5IGF0IHBhdXNlXG4gICAgICAgICAgLy8gdGltZSAoYWZ0ZXIgZXZlcnkgY29tbWl0dGVkIHdyaXRlIHVwIHRvIHRoZSBwYXVzZSkuIENhc3RcbiAgICAgICAgICAvLyBpcyBzYWZlIOKAlCBTaGFyZWRNZW1vcnkgc25hcHNob3QgcmV0dXJucyBhIHBsYWluIG9iamVjdC5cbiAgICAgICAgICBlcnJvci5jYXB0dXJlU3ViZmxvd1Njb3BlKHN1YmZsb3dJZCwgc25hcC5zaGFyZWRTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFNuYXBzaG90IGZhaWx1cmUgc2hvdWxkbid0IG1hc2sgdGhlIHBhdXNlIOKAlCBsZXQgdGhlIHBhdXNlXG4gICAgICAgICAgLy8gYnViYmxlIHVwOyByZXN1bWUgd2lsbCBmYWxsIGJhY2sgdG8gY2hlY2twb2ludC5zaGFyZWRTdGF0ZVxuICAgICAgICAgIC8vICh0aGUgcGFyZW50IHNjb3BlKSBmb3IgdGhpcyBzdWJmbG93J3Mga2V5cy5cbiAgICAgICAgfVxuICAgICAgICBlcnJvci5wcmVwZW5kU3ViZmxvdyhzdWJmbG93SWQpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHN1YmZsb3dFcnJvciA9IGVycm9yO1xuICAgICAgcGFyZW50Q29udGV4dC5hZGRFcnJvcignc3ViZmxvd0Vycm9yJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBzdWJmbG93ICgke3N1YmZsb3dJZH0pOmAsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgLy8gQWx3YXlzIG1lcmdlIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMgKGV2ZW4gb24gZXJyb3Ig4oCUIHBhcnRpYWwgcmVzdWx0cyBhaWQgZGVidWdnaW5nKVxuICAgIGlmICh0cmF2ZXJzZXJIYW5kbGUpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRyYXZlcnNlckhhbmRsZS5nZXRTdWJmbG93UmVzdWx0cygpKSB7XG4gICAgICAgIHN1YmZsb3dSZXN1bHRzTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDilIDilIDilIAgQnJlYWsgcHJvcGFnYXRpb24gKG9wdC1pbiB2aWEgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVhaykg4pSA4pSAXG4gICAgLy9cbiAgICAvLyBJZiB0aGUgc3ViZmxvdydzIGlubmVyIHRyYXZlcnNhbCBicm9rZSAoYmVjYXVzZSBhIHN0YWdlIGNhbGxlZFxuICAgIC8vIGBzY29wZS4kYnJlYWsocmVhc29uKWApIEFORCB0aGUgbW91bnQgZGVjbGFyZWQgYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCxcbiAgICAvLyBmb3J3YXJkIHRoZSBicmVhayBzdGF0ZSB0byB0aGUgUEFSRU5UJ3MgYnJlYWtGbGFnLiBUaGUgcGFyZW50XG4gICAgLy8gdHJhdmVyc2VyIHdpbGwgc2VlIGBzaG91bGRCcmVha2Agb24gaXRzIG5leHQgc3RlcCBhbmQgc3RvcC5cbiAgICAvL1xuICAgIC8vIFdpdGhvdXQgdGhpcywgaW5uZXIgYnJlYWtzIGFyZSBsb2NhbGx5IHNjb3BlZCB0byB0aGUgc3ViZmxvdyDigJQgdGhlXG4gICAgLy8gcGFyZW50IGNvbnRpbnVlcyBhcyBpZiB0aGUgc3ViZmxvdyByZXR1cm5lZCBub3JtYWxseS5cbiAgICAvL1xuICAgIC8vIElNUE9SVEFOVDogdGhpcyBydW5zIEJFRk9SRSBgb3V0cHV0TWFwcGluZ2AgYmVsb3csIGludGVudGlvbmFsbHkuIFRoZVxuICAgIC8vIG91dHB1dE1hcHBlciBzdGlsbCBleGVjdXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHJlc3VsdCBzdGlsbFxuICAgIC8vIGxhbmRzIGluIHRoZSBwYXJlbnQgc2NvcGUuIENvbnN1bWVycyB3aG8gbmVlZCB0byBzdXBwcmVzcyBvdXRwdXQgb25cbiAgICAvLyBicmVhayBjaGVjayB0aGUgYnJlYWsgc3RhdGUgaW5zaWRlIHRoZWlyIG91dHB1dE1hcHBlciBhbmQgZWFybHktcmV0dXJuLlxuICAgIC8vIFNlZSBgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVha2AgSlNEb2MgZm9yIHJhdGlvbmFsZS5cbiAgICBpZiAodHJhdmVyc2VySGFuZGxlICYmIG1vdW50T3B0aW9ucz8ucHJvcGFnYXRlQnJlYWsgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGlubmVyQnJlYWsgPSB0cmF2ZXJzZXJIYW5kbGUuZ2V0QnJlYWtTdGF0ZSgpO1xuICAgICAgaWYgKGlubmVyQnJlYWsuc2hvdWxkQnJlYWspIHtcbiAgICAgICAgYnJlYWtGbGFnLnNob3VsZEJyZWFrID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlubmVyQnJlYWsucmVhc29uICE9PSB1bmRlZmluZWQgJiYgYnJlYWtGbGFnLnJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYnJlYWtGbGFnLnJlYXNvbiA9IGlubmVyQnJlYWsucmVhc29uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJhaXNlIGEgcGFyZW50LWxldmVsIG9uQnJlYWsgZXZlbnQgc28gcmVjb3JkZXJzIGNhbiBkaXN0aW5ndWlzaFxuICAgICAgICAvLyB0aGUgaW5uZXIgb3JpZ2luYXRpbmcgYnJlYWsgKGZpcmVkIGluc2lkZSB0aGUgc3ViZmxvdykgZnJvbSB0aGlzXG4gICAgICAgIC8vIHByb3BhZ2F0ZWQgb25lIChmaXJlZCBhdCB0aGUgbW91bnQgbGV2ZWwgb24gdGhlIHBhcmVudCkuXG4gICAgICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25CcmVhayhzdWJmbG93TmFtZSwgcGFyZW50VHJhdmVyc2FsQ29udGV4dCwgaW5uZXJCcmVhay5yZWFzb24sIHN1YmZsb3dJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViZmxvd1RyZWVDb250ZXh0ID0gbmVzdGVkUnVudGltZS5nZXRTbmFwc2hvdCgpO1xuXG4gICAgLy8g4pSA4pSA4pSAIE91dHB1dCBNYXBwaW5nIOKUgOKUgOKUgFxuICAgIGlmICghc3ViZmxvd0Vycm9yICYmIG1vdW50T3B0aW9ucz8ub3V0cHV0TWFwcGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgb3V0cHV0Q29udGV4dCA9IHBhcmVudENvbnRleHQ7XG4gICAgICAgIGlmIChwYXJlbnRDb250ZXh0LmJyYW5jaElkICYmIHBhcmVudENvbnRleHQuYnJhbmNoSWQgIT09ICcnICYmIHBhcmVudENvbnRleHQucGFyZW50KSB7XG4gICAgICAgICAgb3V0cHV0Q29udGV4dCA9IHBhcmVudENvbnRleHQucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50U2NvcGUgPSBvdXRwdXRDb250ZXh0LmdldFNjb3BlKCk7XG4gICAgICAgIC8vIEZvciBUeXBlZFNjb3BlIHN1YmZsb3dzLCBzdGFnZSBmdW5jdGlvbnMgcmV0dXJuIHZvaWQg4oCUIGZhbGwgYmFjayB0byBhIHNoYWxsb3cgY2xvbmVcbiAgICAgICAgLy8gb2YgdGhlIHN1YmZsb3cncyBzaGFyZWQgc3RhdGUgc28gb3V0cHV0TWFwcGVyIGNhbiBhY2Nlc3MgYWxsIHNjb3BlIHZhbHVlcyB3cml0dGVuXG4gICAgICAgIC8vIGR1cmluZyB0aGUgc3ViZmxvdy4gV2Ugc2hhbGxvdy1jbG9uZSB0byBhdm9pZCBhbGlhc2luZyB0aGUgbGl2ZSBTaGFyZWRNZW1vcnkgY29udGV4dC5cbiAgICAgICAgLy8gTk9URTogdGhlIGZ1bGwgc2NvcGUgaXMgcGFzc2VkIChub3QganVzdCBkZWNsYXJlZCBvdXRwdXRzKSDigJQgb3V0cHV0TWFwcGVyIG11c3RcbiAgICAgICAgLy8gZXhwbGljaXRseSBzZWxlY3Qgd2hhdCB0byBwcm9wYWdhdGUgdG8gdGhlIHBhcmVudC5cbiAgICAgICAgLy8gUmVkYWN0aW9uOiB0aGUgc3ViZmxvdyBzaGFyZXMgdGhlIHBhcmVudCdzIF9yZWRhY3RlZEtleXMgU2V0ICh2aWEgdGhlIHNhbWUgU2NvcGVGYWN0b3J5KSxcbiAgICAgICAgLy8gc28gYW55IGtleSBtYXJrZWQgcmVkYWN0ZWQgaW4gdGhlIHN1YmZsb3cgaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSBwYXJlbnQncyBzY29wZS5cbiAgICAgICAgLy8gU2NvcGVGYWNhZGUuc2V0VmFsdWUgY2hlY2tzIF9yZWRhY3RlZEtleXMuaGFzKGtleSksIHNvIHdyaXRlcyB2aWEgb3V0cHV0TWFwcGVyXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgaW5oZXJpdCB0aGUgc3ViZmxvdydzIGR5bmFtaWMgcmVkYWN0aW9uIHN0YXRlLlxuICAgICAgICBjb25zdCBlZmZlY3RpdmVPdXRwdXQgPSBzdWJmbG93T3V0cHV0ID8/IHsgLi4uc3ViZmxvd1RyZWVDb250ZXh0LnNoYXJlZFN0YXRlIH07XG4gICAgICAgIGNvbnN0IG1hcHBlZE91dHB1dCA9IGFwcGx5T3V0cHV0TWFwcGluZyhlZmZlY3RpdmVPdXRwdXQsIHBhcmVudFNjb3BlLCBvdXRwdXRDb250ZXh0LCBtb3VudE9wdGlvbnMpO1xuXG4gICAgICAgIG91dHB1dENvbnRleHQuY29tbWl0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHBhcmVudENvbnRleHQuYWRkRXJyb3IoJ291dHB1dE1hcHBlckVycm9yJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIG91dHB1dE1hcHBlciBmb3Igc3ViZmxvdyAoJHtzdWJmbG93SWR9KTpgLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1YmZsb3dSZXN1bHQ6IFN1YmZsb3dSZXN1bHQgPSB7XG4gICAgICBzdWJmbG93SWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHRyZWVDb250ZXh0OiB7XG4gICAgICAgIGdsb2JhbENvbnRleHQ6IHN1YmZsb3dUcmVlQ29udGV4dC5zaGFyZWRTdGF0ZSxcbiAgICAgICAgc3RhZ2VDb250ZXh0czogc3ViZmxvd1RyZWVDb250ZXh0LmV4ZWN1dGlvblRyZWUgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgaGlzdG9yeTogc3ViZmxvd1RyZWVDb250ZXh0LmNvbW1pdExvZyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFnZUlkOiBwYXJlbnRDb250ZXh0LmdldFN0YWdlSWQoKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3ViZmxvd0RlZiA9IHRoaXMuZGVwcy5zdWJmbG93cz8uW3N1YmZsb3dJZF07XG4gICAgaWYgKHN1YmZsb3dEZWYgJiYgKHN1YmZsb3dEZWYgYXMgYW55KS5idWlsZFRpbWVTdHJ1Y3R1cmUpIHtcbiAgICAgIHN1YmZsb3dSZXN1bHQucGlwZWxpbmVTdHJ1Y3R1cmUgPSAoc3ViZmxvd0RlZiBhcyBhbnkpLmJ1aWxkVGltZVN0cnVjdHVyZTtcbiAgICB9XG5cbiAgICBzdWJmbG93UmVzdWx0c01hcC5zZXQoc3ViZmxvd0lkLCBzdWJmbG93UmVzdWx0KTtcblxuICAgIHBhcmVudENvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnc3ViZmxvdycsIGBFeGl0aW5nICR7c3ViZmxvd05hbWV9IHN1YmZsb3dgLCB7XG4gICAgICB0YXJnZXRTdGFnZTogc3ViZmxvd0lkLFxuICAgIH0pO1xuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdWJmbG93RXhpdChcbiAgICAgIHN1YmZsb3dOYW1lLFxuICAgICAgc3ViZmxvd0lkLFxuICAgICAgcGFyZW50VHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIHN1YmZsb3dSZXN1bHQudHJlZUNvbnRleHQ/Lmdsb2JhbENvbnRleHQsXG4gICAgKTtcblxuICAgIHBhcmVudENvbnRleHQuY29tbWl0KCk7XG5cbiAgICBpZiAoc3ViZmxvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBzdWJmbG93RXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YmZsb3dPdXRwdXQ7XG4gIH1cbn1cbiJdfQ==
@@ -33,4 +33,4 @@ var ArrayMergeMode;
33
33
  /** Overwrite parent array with subflow output. Use for Dynamic loops. */
34
34
  ArrayMergeMode["Replace"] = "replace";
35
35
  })(ArrayMergeMode || (exports.ArrayMergeMode = ArrayMergeMode = {}));
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWFILDhDQUE4RTtBQUFyRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFlbEQsb0NBQW9DO0FBQ3BDLHdEQUF3RDtBQUMzQyxRQUFBLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQW1ERiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAqL1xuZXhwb3J0IGVudW0gQXJyYXlNZXJnZU1vZGUge1xuICAvKiogQXBwZW5kIHN1YmZsb3cgb3V0cHV0IHRvIGV4aXN0aW5nIHBhcmVudCBhcnJheTogWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0uIERlZmF1bHQuICovXG4gIENvbmNhdCA9ICdjb25jYXQnLFxuICAvKiogT3ZlcndyaXRlIHBhcmVudCBhcnJheSB3aXRoIHN1YmZsb3cgb3V0cHV0LiBVc2UgZm9yIER5bmFtaWMgbG9vcHMuICovXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIC8qKlxuICAgKiBNYXBzIHN1YmZsb3cgb3V0cHV0IGJhY2sgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqICoqQXJyYXkgbWVyZ2UgYmVoYXZpb3IqKiBpcyBjb250cm9sbGVkIGJ5IGBhcnJheU1lcmdlYDpcbiAgICogLSBgJ2NvbmNhdCdgIChkZWZhdWx0KTogYFsuLi5leGlzdGluZywgLi4udmFsdWVdYCDigJQgcmV0dXJuIG9ubHkgKipkZWx0YSoqIGl0ZW1zXG4gICAqIC0gYCdyZXBsYWNlJ2A6IG92ZXJ3cml0ZXMgdGhlIHBhcmVudCB2YWx1ZSDigJQgcmV0dXJuIHRoZSBmdWxsIGFycmF5XG4gICAqXG4gICAqIFNjYWxhciB2YWx1ZXMgYXJlIGFsd2F5cyByZXBsYWNlZCByZWdhcmRsZXNzIG9mIGBhcnJheU1lcmdlYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBEZWx0YSBtb2RlIChkZWZhdWx0KSDigJQgcmV0dXJuIG9ubHkgbmV3IGl0ZW1zLCBjb25jYXQgYXBwZW5kc1xuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLm5ld01lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFJlcGxhY2UgbW9kZSDigJQgcmV0dXJuIGZ1bGwgYXJyYXksIHBhcmVudCB2YWx1ZSBpcyBvdmVyd3JpdHRlblxuICAgKiAvLyBVc2VmdWwgaW4gRHluYW1pYyBsb29wcyB3aGVyZSB0aGUgc3ViZmxvdyByZWNvbXB1dGVzIHRoZSBmdWxsIHZhbHVlIGVhY2ggaXRlcmF0aW9uXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyB0b29sRGVzY3JpcHRpb25zOiBzZi50b29sRGVzY3JpcHRpb25zIH0pLFxuICAgKiBhcnJheU1lcmdlOiBBcnJheU1lcmdlTW9kZS5SZXBsYWNlLFxuICAgKlxuICAgKiAvLyBTY2FsYXJzIGFyZSBmaW5lIGluIGJvdGggbW9kZXMg4oCUIGFsd2F5cyByZXBsYWNlZFxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgc3RhdHVzOiBzZi5yZXN1bHQsIGNvdW50OiBzZi50b3RhbCB9KVxuICAgKiBgYGBcbiAgICovXG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqIEFwcGxpZXMgb25seSB0byB0b3AtbGV2ZWwgYXJyYXkga2V5cy4gTmVzdGVkIGFycmF5cyBpbnNpZGUgb2JqZWN0c1xuICAgKiBhbHdheXMgdXNlIGFwcGVuZCAoYXBwZW5kVG9BcnJheSkgcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFycmF5TWVyZ2VNb2RlLkNvbmNhdFxuICAgKi9cbiAgYXJyYXlNZXJnZT86IEFycmF5TWVyZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTVFJVQ1RVUkUtT05MWTogdGhlIGRvd25zdHJlYW0gc3RhZ2UgaWQgdGhpcyBicmFuY2gncyBjb252ZXJnZW5jZSBlZGdlXG4gICAqIHBvaW50cyB0bywgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBcImNvbnZlcmdlIGF0IHRoZSBuZXh0IGxpbmVhciBzdGFnZS5cIlxuICAgKlxuICAgKiBXaGVuIGEgZm9yay9zZWxlY3Rvci9kZWNpZGVyIGJyYW5jaCBjYXJyaWVzIGBjb252ZXJnZUF0YCwgaXRzIHZpc3VhbGl6ZWRcbiAgICogYG5leHRgIGVkZ2UgaXMgZmlyZWQgdG8gdGhlIG5hbWVkIHN0YWdlIGluc3RlYWQgb2YgdG8gdGhlIHNoYXJlZFxuICAgKiBjb252ZXJnZW5jZSBub2RlIGl0cyBzaWJsaW5ncyB1c2UuIFRoaXMgZXhwcmVzc2VzIGFuIHVuZXF1YWwtZGVwdGggbWVyZ2VcbiAgICog4oCUIGUuZy4gYSBgdG9vbHNgIHNsb3QgdGhhdCBieXBhc3NlcyB0aGUgYG1lc3NhZ2VBUElgIGFzc2VtYmx5IG5vZGUgYW5kXG4gICAqIHBhaXJzIHdpdGggaXRzIG91dHB1dCBhdCBgY2FsbC1sbG1gIChzbyBgY2FsbC1sbG1gIHJlYWRzIGFzIGEgMi1wYXJlbnRcbiAgICogbWVyZ2UpLCBmYWl0aGZ1bCB0byB0aGUgQW50aHJvcGljIHdpcmUgcHJvdG9jb2wgKHN5c3RlbSttZXNzYWdlcyA9IHRoZVxuICAgKiBtZXNzYWdlIHBheWxvYWQ7IHRvb2xzID0gYSBzZXBhcmF0ZSB0b3AtbGV2ZWwgZmllbGQpLlxuICAgKlxuICAgKiAqKlRoaXMgYWZmZWN0cyB0aGUgU1RSVUNUVVJFL3RvcG9sb2d5IGdyYXBoIG9ubHkqKiDigJQgdGhlIHJ1bnRpbWUgaXNcbiAgICogdW5jaGFuZ2VkICh0aGUgYnJhbmNoJ3Mgb3V0cHV0cyByaWRlIHNoYXJlZCBzY29wZTsgdGhlIG5hbWVkIHRhcmdldCByZWFkc1xuICAgKiB0aGVtIHdoZW4gaXQgcnVucykuIEl0IGRvZXMgTk9UIGludHJvZHVjZSBhIGpvaW4gYmFycmllci4gVGhlIHRhcmdldCBpcyBhXG4gICAqIEZPUldBUkQgc3RhZ2UgKGFkZGVkIGxhdGVyIGluIHRoZSBjaGFpbiksIHNvIGl0IGlzIG5vdCB2YWxpZGF0ZWQgYXRcbiAgICogYnJhbmNoLWRlY2xhcmF0aW9uIHRpbWUuXG4gICAqL1xuICBjb252ZXJnZUF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYW4gaW5uZXIgYHNjb3BlLiRicmVhayhyZWFzb24pYCBjYWxsIGluc2lkZSB0aGlzIHN1YmZsb3dcbiAgICogcHJvcGFnYXRlcyB1cCB0byB0aGUgcGFyZW50IOKAlCBpLmUuLCB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AgaXMgc2V0XG4gICAqIGFmdGVyIHRoZSBzdWJmbG93IGV4aXRzLCB0ZXJtaW5hdGluZyB0aGUgcGFyZW50J3Mgb3V0ZXIgbG9vcCB0b28uXG4gICAqXG4gICAqICoqRGVmYXVsdDogYGZhbHNlYCoqIChjdXJyZW50IGJlaGF2aW91ciDigJQgaW5uZXIgYnJlYWsgc3RvcHMgb25seSB0aGVcbiAgICogc3ViZmxvdzsgcGFyZW50IGNvbnRpbnVlcykuXG4gICAqXG4gICAqICMjIFdoZW4gdG8gdXNlXG4gICAqXG4gICAqIFNldCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIG9uIHN1YmZsb3cgbW91bnRzIHRoYXQgcmVwcmVzZW50XG4gICAqICoqdGVybWluYWwqKiBicmFuY2hlcyDigJQgXCJpZiB0aGlzIHN1YmZsb3cgZmlyZXMsIHRoZSBvdXRlciBsb29wIGlzXG4gICAqIGRvbmVcIi4gRXhhbXBsZXM6XG4gICAqXG4gICAqIC0gQSBodW1hbi1yZXZpZXcgcnVubmVyIHRoYXQgdGFrZXMgb3ZlciBmcm9tIGFuIGFnZW50J3MgdG9vbC1jYWxsaW5nXG4gICAqICAgbG9vcCBhbmQgcHJvZHVjZXMgdGhlIGZpbmFsIHJlc3BvbnNlLlxuICAgKiAtIEEgc2FmZXR5LWdhdGUgc3ViZmxvdyB0aGF0IGhhbHRzIHRoZSBvdXRlciB3b3JrZmxvdyB3aGVuIGEgcG9saWN5XG4gICAqICAgdmlvbGF0aW9uIGlzIGRldGVjdGVkLlxuICAgKiAtIEFuIGVycm9yLXJlY292ZXJ5IHN1YmZsb3cgdGhhdCByZXN0b3JlcyBzdGF0ZSBhbmQgdGhlbiB0ZXJtaW5hdGVzLlxuICAgKlxuICAgKiAjIyBTZW1hbnRpY3NcbiAgICpcbiAgICogMS4gSW5zaWRlIHRoZSBzdWJmbG93LCBhIHN0YWdlIGNhbGxzIGBzY29wZS4kYnJlYWsocmVhc29uKWAuXG4gICAqIDIuIFRoZSBzdWJmbG93J3Mgb3duIGV4ZWN1dGlvbiBzdG9wcyAobm9ybWFsIGAkYnJlYWtgIGJlaGF2aW91cikuXG4gICAqIDMuIGBTdWJmbG93RXhlY3V0b3JgIGluc3BlY3RzIHRoZSBzdWJmbG93J3MgZXhpdCBzdGF0ZS4gSWZcbiAgICogICAgYHByb3BhZ2F0ZUJyZWFrID09PSB0cnVlYCBBTkQgdGhlIGlubmVyIGJyZWFrIGZpcmVkLCBpdCBmb3J3YXJkc1xuICAgKiAgICB0aGUgYnJlYWsgKGFuZCBpdHMgcmVhc29uKSB0byB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AuXG4gICAqIDQuIFRoZSBwYXJlbnQgdHJhdmVyc2VyIHNlZXMgYHNob3VsZEJyZWFrYCBvbiBpdHMgbmV4dCBzdGVwIGFuZCBleGl0cy5cbiAgICogNS4gQSBgRmxvd1JlY29yZGVyLm9uQnJlYWtgIGV2ZW50IGZpcmVzIGF0IHRoZSBwYXJlbnQtbW91bnQgbGV2ZWwgd2l0aFxuICAgKiAgICBgcHJvcGFnYXRlZEZyb21TdWJmbG93YCA9IHRoZSBzdWJmbG93J3MgaWQgYW5kIHRoZSBpbm5lciByZWFzb24uXG4gICAqXG4gICAqICMjIFBhcmFsbGVsL2Zhbi1vdXRcbiAgICpcbiAgICogRm9sbG93cyB0aGUgZXhpc3RpbmcgbGlicmFyeSBydWxlIGluIGBDaGlsZHJlbkV4ZWN1dG9yYDogdGhlIHBhcmVudFxuICAgKiBicmVha3Mgb25seSB3aGVuICoqZXZlcnkqKiBjaGlsZCBvZiBhIGZvcmsgYnJva2UuIEEgc2luZ2xlXG4gICAqIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgc3ViZmxvdyBjb250cmlidXRpbmcgaXRzIGJyZWFrIHRvIHRoZSBjb3VudFxuICAgKiBkb2VzIG5vdCBvbiBpdHMgb3duIHRlcm1pbmF0ZSB0aGUgcGFyZW50IGZhbi1vdXQuXG4gICAqXG4gICAqICMjIG91dHB1dE1hcHBlciBzdGlsbCBydW5zXG4gICAqXG4gICAqIFRoZSBzdWJmbG93J3MgYG91dHB1dE1hcHBlcmAgKGlmIHN1cHBsaWVkKSBBTFdBWVMgcnVucyBiZWZvcmUgdGhlXG4gICAqIGJyZWFrIHByb3BhZ2F0ZXMsIHNvIHRoZSBzdWJmbG93J3MgcGFydGlhbCBzdGF0ZSBpcyBzdGlsbCB3cml0dGVuIHRvXG4gICAqIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgaW50ZW50aW9uYWwg4oCUIHRoZSB0eXBpY2FsIHVzZSBjYXNlIGlzIGFuXG4gICAqIFwiZXNjYWxhdGlvblwiIHN1YmZsb3cgd2hvc2Ugb3V0cHV0IElTIHRoZSBmaW5hbCBhbnN3ZXIgdGhhdCBuZWVkcyB0b1xuICAgKiBsYW5kIGluIHRoZSBwYXJlbnQgc2NvcGUgYmVmb3JlIHRoZSBvdXRlciBsb29wIHRlcm1pbmF0ZXMuIElmIHlvdVxuICAgKiB3YW50IHRvIHN1cHByZXNzIG91dHB1dCBtYXBwaW5nIG9uIGJyZWFrLCBjaGVjayB0aGUgYnJlYWsgc3RhdGVcbiAgICogaW5zaWRlIHlvdXIgYG91dHB1dE1hcHBlcmAgYW5kIHJldHVybiBge31gIGVhcmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJvcGFnYXRlQnJlYWs/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHQge1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgdHJlZUNvbnRleHQ6IHtcbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpLiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IHtcbiAgICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIE9uIHJlc3VtZSwgdGhlIHBlci1zdWJmbG93IHNjb3BlIGNhcHR1cmVzIGZyb20gdGhlIGNoZWNrcG9pbnQuXG4gICAqIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGAgKG1hdGNoZXMgYFBhdXNlU2lnbmFsLnN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIGNvbnN1bHRzIHRoaXMgb24gZW50cnk6IGlmIGEga2V5IG1hdGNoZXMgdGhlXG4gICAqIGN1cnJlbnQgc3ViZmxvdyBpZCwgdGhlIG5lc3RlZCBydW50aW1lIGlzIHNlZWRlZCBmcm9tIHRoaXMgc3RhdGVcbiAgICogYW5kIHRoZSBpbnB1dE1hcHBlciBpcyBTS0lQUEVEICh0aGUgY2FwdHVyZWQgc3RhdGUgYWxyZWFkeVxuICAgKiByZWZsZWN0cyBwb3N0LWlucHV0IHByZS1wYXVzZSBtZW1vcnkpLiBUaGlzIGlzIHdoYXQgbWFrZXNcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdW1lIHdvcmsgZm9yIHBhdXNlcyBJTlNJREUgYSBzdWJmbG93LlxuICAgKlxuICAgKiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWAgcGF0aHMg4oCUIG9ubHkgdGhlIHJlc3VtZSBwYXRoIHNldHMgaXQuXG4gICAqL1xuICBzdWJmbG93U3RhdGVzRm9yUmVzdW1lPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIFByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heEl0ZXJhdGlvbnM/OiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDigJQgY2Fub25pY2FsIGRlZmluaXRpb25zIGxpdmUgaW4gbWVtb3J5L3R5cGVzLnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVudGltZSBTdHJ1Y3R1cmUgTWV0YWRhdGEgKHVzZWQgYnkgUnVudGltZVN0cnVjdHVyZU1hbmFnZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGEge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93Q2hhcnQgaXMgZGVmaW5lZCBpbiBgLi4vYnVpbGRlci90eXBlcy50c2AuIFRoZSBlbmdpbmUgbGF5ZXIgY29uc3VtZXMgaXRcbi8vIHZpYSBpbXBvcnQgZnJvbSB0aGVyZS4gQSBkdXBsaWNhdGUgbWluaW1hbCBkZWZpbml0aW9uIHByZXZpb3VzbHkgbGl2ZWQgaGVyZVxuLy8gYW5kIGNhdXNlZCBUUyBjb25mdXNpb24gYXQgY29tcG9zaXRpb24gYm91bmRhcmllcyAoQ29tcG9zYWJsZVJ1bm5lciB2c1xuLy8gYWRkU3ViRmxvd0NoYXJ0IHBhcmFtZXRlcikuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggbm93IGxpdmVzIGluIGJ1aWxkZXIvLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBbGlhcyBmb3IgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB1c2VkIGFzIGZ1bGwgc3RydWN0dXJlICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlICYge1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59O1xuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWFILDhDQUE4RTtBQUFyRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFlbEQsb0NBQW9DO0FBQ3BDLHdEQUF3RDtBQUMzQyxRQUFBLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQW1ERiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAqL1xuZXhwb3J0IGVudW0gQXJyYXlNZXJnZU1vZGUge1xuICAvKiogQXBwZW5kIHN1YmZsb3cgb3V0cHV0IHRvIGV4aXN0aW5nIHBhcmVudCBhcnJheTogWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0uIERlZmF1bHQuICovXG4gIENvbmNhdCA9ICdjb25jYXQnLFxuICAvKiogT3ZlcndyaXRlIHBhcmVudCBhcnJheSB3aXRoIHN1YmZsb3cgb3V0cHV0LiBVc2UgZm9yIER5bmFtaWMgbG9vcHMuICovXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIC8qKlxuICAgKiBNYXBzIHN1YmZsb3cgb3V0cHV0IGJhY2sgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqICoqQXJyYXkgbWVyZ2UgYmVoYXZpb3IqKiBpcyBjb250cm9sbGVkIGJ5IGBhcnJheU1lcmdlYDpcbiAgICogLSBgJ2NvbmNhdCdgIChkZWZhdWx0KTogYFsuLi5leGlzdGluZywgLi4udmFsdWVdYCDigJQgcmV0dXJuIG9ubHkgKipkZWx0YSoqIGl0ZW1zXG4gICAqIC0gYCdyZXBsYWNlJ2A6IG92ZXJ3cml0ZXMgdGhlIHBhcmVudCB2YWx1ZSDigJQgcmV0dXJuIHRoZSBmdWxsIGFycmF5XG4gICAqXG4gICAqIFNjYWxhciB2YWx1ZXMgYXJlIGFsd2F5cyByZXBsYWNlZCByZWdhcmRsZXNzIG9mIGBhcnJheU1lcmdlYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBEZWx0YSBtb2RlIChkZWZhdWx0KSDigJQgcmV0dXJuIG9ubHkgbmV3IGl0ZW1zLCBjb25jYXQgYXBwZW5kc1xuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLm5ld01lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFJlcGxhY2UgbW9kZSDigJQgcmV0dXJuIGZ1bGwgYXJyYXksIHBhcmVudCB2YWx1ZSBpcyBvdmVyd3JpdHRlblxuICAgKiAvLyBVc2VmdWwgaW4gRHluYW1pYyBsb29wcyB3aGVyZSB0aGUgc3ViZmxvdyByZWNvbXB1dGVzIHRoZSBmdWxsIHZhbHVlIGVhY2ggaXRlcmF0aW9uXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyB0b29sRGVzY3JpcHRpb25zOiBzZi50b29sRGVzY3JpcHRpb25zIH0pLFxuICAgKiBhcnJheU1lcmdlOiBBcnJheU1lcmdlTW9kZS5SZXBsYWNlLFxuICAgKlxuICAgKiAvLyBTY2FsYXJzIGFyZSBmaW5lIGluIGJvdGggbW9kZXMg4oCUIGFsd2F5cyByZXBsYWNlZFxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgc3RhdHVzOiBzZi5yZXN1bHQsIGNvdW50OiBzZi50b3RhbCB9KVxuICAgKiBgYGBcbiAgICovXG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqIEFwcGxpZXMgb25seSB0byB0b3AtbGV2ZWwgYXJyYXkga2V5cy4gTmVzdGVkIGFycmF5cyBpbnNpZGUgb2JqZWN0c1xuICAgKiBhbHdheXMgdXNlIGFwcGVuZCAoYXBwZW5kVG9BcnJheSkgcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFycmF5TWVyZ2VNb2RlLkNvbmNhdFxuICAgKi9cbiAgYXJyYXlNZXJnZT86IEFycmF5TWVyZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTVFJVQ1RVUkUtT05MWTogdGhlIGRvd25zdHJlYW0gc3RhZ2UgaWQgdGhpcyBicmFuY2gncyBjb252ZXJnZW5jZSBlZGdlXG4gICAqIHBvaW50cyB0bywgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBcImNvbnZlcmdlIGF0IHRoZSBuZXh0IGxpbmVhciBzdGFnZS5cIlxuICAgKlxuICAgKiBXaGVuIGEgZm9yay9zZWxlY3Rvci9kZWNpZGVyIGJyYW5jaCBjYXJyaWVzIGBjb252ZXJnZUF0YCwgaXRzIHZpc3VhbGl6ZWRcbiAgICogYG5leHRgIGVkZ2UgaXMgZmlyZWQgdG8gdGhlIG5hbWVkIHN0YWdlIGluc3RlYWQgb2YgdG8gdGhlIHNoYXJlZFxuICAgKiBjb252ZXJnZW5jZSBub2RlIGl0cyBzaWJsaW5ncyB1c2UuIFRoaXMgZXhwcmVzc2VzIGFuIHVuZXF1YWwtZGVwdGggbWVyZ2VcbiAgICog4oCUIGUuZy4gYSBgdG9vbHNgIHNsb3QgdGhhdCBieXBhc3NlcyB0aGUgYG1lc3NhZ2VBUElgIGFzc2VtYmx5IG5vZGUgYW5kXG4gICAqIHBhaXJzIHdpdGggaXRzIG91dHB1dCBhdCBgY2FsbC1sbG1gIChzbyBgY2FsbC1sbG1gIHJlYWRzIGFzIGEgMi1wYXJlbnRcbiAgICogbWVyZ2UpLCBmYWl0aGZ1bCB0byB0aGUgQW50aHJvcGljIHdpcmUgcHJvdG9jb2wgKHN5c3RlbSttZXNzYWdlcyA9IHRoZVxuICAgKiBtZXNzYWdlIHBheWxvYWQ7IHRvb2xzID0gYSBzZXBhcmF0ZSB0b3AtbGV2ZWwgZmllbGQpLlxuICAgKlxuICAgKiAqKlRoaXMgYWZmZWN0cyB0aGUgU1RSVUNUVVJFL3RvcG9sb2d5IGdyYXBoIG9ubHkqKiDigJQgdGhlIHJ1bnRpbWUgaXNcbiAgICogdW5jaGFuZ2VkICh0aGUgYnJhbmNoJ3Mgb3V0cHV0cyByaWRlIHNoYXJlZCBzY29wZTsgdGhlIG5hbWVkIHRhcmdldCByZWFkc1xuICAgKiB0aGVtIHdoZW4gaXQgcnVucykuIEl0IGRvZXMgTk9UIGludHJvZHVjZSBhIGpvaW4gYmFycmllci4gVGhlIHRhcmdldCBpcyBhXG4gICAqIEZPUldBUkQgc3RhZ2UgKGFkZGVkIGxhdGVyIGluIHRoZSBjaGFpbiksIHNvIGl0IGlzIG5vdCB2YWxpZGF0ZWQgYXRcbiAgICogYnJhbmNoLWRlY2xhcmF0aW9uIHRpbWUuXG4gICAqL1xuICBjb252ZXJnZUF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYW4gaW5uZXIgYHNjb3BlLiRicmVhayhyZWFzb24pYCBjYWxsIGluc2lkZSB0aGlzIHN1YmZsb3dcbiAgICogcHJvcGFnYXRlcyB1cCB0byB0aGUgcGFyZW50IOKAlCBpLmUuLCB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AgaXMgc2V0XG4gICAqIGFmdGVyIHRoZSBzdWJmbG93IGV4aXRzLCB0ZXJtaW5hdGluZyB0aGUgcGFyZW50J3Mgb3V0ZXIgbG9vcCB0b28uXG4gICAqXG4gICAqICoqRGVmYXVsdDogYGZhbHNlYCoqIChjdXJyZW50IGJlaGF2aW91ciDigJQgaW5uZXIgYnJlYWsgc3RvcHMgb25seSB0aGVcbiAgICogc3ViZmxvdzsgcGFyZW50IGNvbnRpbnVlcykuXG4gICAqXG4gICAqICMjIFdoZW4gdG8gdXNlXG4gICAqXG4gICAqIFNldCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIG9uIHN1YmZsb3cgbW91bnRzIHRoYXQgcmVwcmVzZW50XG4gICAqICoqdGVybWluYWwqKiBicmFuY2hlcyDigJQgXCJpZiB0aGlzIHN1YmZsb3cgZmlyZXMsIHRoZSBvdXRlciBsb29wIGlzXG4gICAqIGRvbmVcIi4gRXhhbXBsZXM6XG4gICAqXG4gICAqIC0gQSBodW1hbi1yZXZpZXcgcnVubmVyIHRoYXQgdGFrZXMgb3ZlciBmcm9tIGFuIGFnZW50J3MgdG9vbC1jYWxsaW5nXG4gICAqICAgbG9vcCBhbmQgcHJvZHVjZXMgdGhlIGZpbmFsIHJlc3BvbnNlLlxuICAgKiAtIEEgc2FmZXR5LWdhdGUgc3ViZmxvdyB0aGF0IGhhbHRzIHRoZSBvdXRlciB3b3JrZmxvdyB3aGVuIGEgcG9saWN5XG4gICAqICAgdmlvbGF0aW9uIGlzIGRldGVjdGVkLlxuICAgKiAtIEFuIGVycm9yLXJlY292ZXJ5IHN1YmZsb3cgdGhhdCByZXN0b3JlcyBzdGF0ZSBhbmQgdGhlbiB0ZXJtaW5hdGVzLlxuICAgKlxuICAgKiAjIyBTZW1hbnRpY3NcbiAgICpcbiAgICogMS4gSW5zaWRlIHRoZSBzdWJmbG93LCBhIHN0YWdlIGNhbGxzIGBzY29wZS4kYnJlYWsocmVhc29uKWAuXG4gICAqIDIuIFRoZSBzdWJmbG93J3Mgb3duIGV4ZWN1dGlvbiBzdG9wcyAobm9ybWFsIGAkYnJlYWtgIGJlaGF2aW91cikuXG4gICAqIDMuIGBTdWJmbG93RXhlY3V0b3JgIGluc3BlY3RzIHRoZSBzdWJmbG93J3MgZXhpdCBzdGF0ZS4gSWZcbiAgICogICAgYHByb3BhZ2F0ZUJyZWFrID09PSB0cnVlYCBBTkQgdGhlIGlubmVyIGJyZWFrIGZpcmVkLCBpdCBmb3J3YXJkc1xuICAgKiAgICB0aGUgYnJlYWsgKGFuZCBpdHMgcmVhc29uKSB0byB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AuXG4gICAqIDQuIFRoZSBwYXJlbnQgdHJhdmVyc2VyIHNlZXMgYHNob3VsZEJyZWFrYCBvbiBpdHMgbmV4dCBzdGVwIGFuZCBleGl0cy5cbiAgICogNS4gQSBgRmxvd1JlY29yZGVyLm9uQnJlYWtgIGV2ZW50IGZpcmVzIGF0IHRoZSBwYXJlbnQtbW91bnQgbGV2ZWwgd2l0aFxuICAgKiAgICBgcHJvcGFnYXRlZEZyb21TdWJmbG93YCA9IHRoZSBzdWJmbG93J3MgaWQgYW5kIHRoZSBpbm5lciByZWFzb24uXG4gICAqXG4gICAqICMjIFBhcmFsbGVsL2Zhbi1vdXRcbiAgICpcbiAgICogRm9sbG93cyB0aGUgZXhpc3RpbmcgbGlicmFyeSBydWxlIGluIGBDaGlsZHJlbkV4ZWN1dG9yYDogdGhlIHBhcmVudFxuICAgKiBicmVha3Mgb25seSB3aGVuICoqZXZlcnkqKiBjaGlsZCBvZiBhIGZvcmsgYnJva2UuIEEgc2luZ2xlXG4gICAqIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgc3ViZmxvdyBjb250cmlidXRpbmcgaXRzIGJyZWFrIHRvIHRoZSBjb3VudFxuICAgKiBkb2VzIG5vdCBvbiBpdHMgb3duIHRlcm1pbmF0ZSB0aGUgcGFyZW50IGZhbi1vdXQuXG4gICAqXG4gICAqICMjIG91dHB1dE1hcHBlciBzdGlsbCBydW5zXG4gICAqXG4gICAqIFRoZSBzdWJmbG93J3MgYG91dHB1dE1hcHBlcmAgKGlmIHN1cHBsaWVkKSBBTFdBWVMgcnVucyBiZWZvcmUgdGhlXG4gICAqIGJyZWFrIHByb3BhZ2F0ZXMsIHNvIHRoZSBzdWJmbG93J3MgcGFydGlhbCBzdGF0ZSBpcyBzdGlsbCB3cml0dGVuIHRvXG4gICAqIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgaW50ZW50aW9uYWwg4oCUIHRoZSB0eXBpY2FsIHVzZSBjYXNlIGlzIGFuXG4gICAqIFwiZXNjYWxhdGlvblwiIHN1YmZsb3cgd2hvc2Ugb3V0cHV0IElTIHRoZSBmaW5hbCBhbnN3ZXIgdGhhdCBuZWVkcyB0b1xuICAgKiBsYW5kIGluIHRoZSBwYXJlbnQgc2NvcGUgYmVmb3JlIHRoZSBvdXRlciBsb29wIHRlcm1pbmF0ZXMuIElmIHlvdVxuICAgKiB3YW50IHRvIHN1cHByZXNzIG91dHB1dCBtYXBwaW5nIG9uIGJyZWFrLCBjaGVjayB0aGUgYnJlYWsgc3RhdGVcbiAgICogaW5zaWRlIHlvdXIgYG91dHB1dE1hcHBlcmAgYW5kIHJldHVybiBge31gIGVhcmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJvcGFnYXRlQnJlYWs/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHQge1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgdHJlZUNvbnRleHQ6IHtcbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpLiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IHtcbiAgICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIE9uIHJlc3VtZSwgdGhlIHBlci1zdWJmbG93IHNjb3BlIGNhcHR1cmVzIGZyb20gdGhlIGNoZWNrcG9pbnQuXG4gICAqIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGAgKG1hdGNoZXMgYFBhdXNlU2lnbmFsLnN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIGNvbnN1bHRzIHRoaXMgb24gZW50cnk6IGlmIGEga2V5IG1hdGNoZXMgdGhlXG4gICAqIGN1cnJlbnQgc3ViZmxvdyBpZCwgdGhlIG5lc3RlZCBydW50aW1lIGlzIHNlZWRlZCBmcm9tIHRoaXMgc3RhdGVcbiAgICogYW5kIHRoZSBpbnB1dE1hcHBlciBpcyBTS0lQUEVEICh0aGUgY2FwdHVyZWQgc3RhdGUgYWxyZWFkeVxuICAgKiByZWZsZWN0cyBwb3N0LWlucHV0IHByZS1wYXVzZSBtZW1vcnkpLiBUaGlzIGlzIHdoYXQgbWFrZXNcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdW1lIHdvcmsgZm9yIHBhdXNlcyBJTlNJREUgYSBzdWJmbG93LlxuICAgKlxuICAgKiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWAgcGF0aHMg4oCUIG9ubHkgdGhlIHJlc3VtZSBwYXRoIHNldHMgaXQuXG4gICAqL1xuICBzdWJmbG93U3RhdGVzRm9yUmVzdW1lPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5vZGUgUmVzdWx0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgTm9kZVJlc3VsdFR5cGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHJlc3VsdDogdW5rbm93bjtcbiAgaXNFcnJvcj86IGJvb2xlYW47XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBSZXNwb25zZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIEJyYW5jaFJlc3VsdCA9IHtcbiAgcmVzdWx0OiBzdHJpbmcgfCBFcnJvcjtcbiAgaXNFcnJvcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEJyYW5jaFJlc3VsdHMgPSB7IFticmFuY2hJZDogc3RyaW5nXTogQnJhbmNoUmVzdWx0IH07XG5leHBvcnQgdHlwZSBUcmF2ZXJzYWxSZXN1bHQgPSBCcmFuY2hSZXN1bHRzIHwgc3RyaW5nIHwgRXJyb3I7XG5cbi8qKiBSZXR1cm5lZCBieSBydW4oKS9yZXN1bWUoKSB3aGVuIGV4ZWN1dGlvbiBwYXVzZXMuICovXG5leHBvcnQgdHlwZSBQYXVzZWRSZXN1bHQgPSB7XG4gIHJlYWRvbmx5IHBhdXNlZDogdHJ1ZTtcbiAgcmVhZG9ubHkgY2hlY2twb2ludDogaW1wb3J0KCcuLi9wYXVzZS90eXBlcy5qcycpLkZsb3djaGFydENoZWNrcG9pbnQ7XG59O1xuXG4vKiogRnVsbCByZXR1cm4gdHlwZSBvZiBGbG93Q2hhcnRFeGVjdXRvci5ydW4oKSBhbmQgcmVzdW1lKCkuICovXG5leHBvcnQgdHlwZSBFeGVjdXRvclJlc3VsdCA9IFRyYXZlcnNhbFJlc3VsdCB8IFBhdXNlZFJlc3VsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoZm9yIHZpc3VhbGl6YXRpb24pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlPzpcbiAgICB8ICdzdGFnZSdcbiAgICB8ICdkZWNpZGVyJ1xuICAgIHwgJ3NlbGVjdG9yJ1xuICAgIHwgJ2ZvcmsnXG4gICAgfCAnc3RyZWFtaW5nJ1xuICAgIHwgJ3N1YmZsb3cnXG4gICAgfCAnbG9vcCdcbiAgICB8ICd1c2VyJ1xuICAgIHwgJ3Rvb2wnXG4gICAgfCAnZnVuY3Rpb24nXG4gICAgfCAnc2VxdWVuY2UnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlO1xuICBicmFuY2hlcz86IFJlY29yZDxzdHJpbmcsIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU+O1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBoYXNTdWJ0cmVlPzogYm9vbGVhbjtcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgdGhpcyBzdGFnZSBjYW4gcGF1c2UgZXhlY3V0aW9uIChQYXVzYWJsZUhhbmRsZXIgcGF0dGVybikuICovXG4gIGlzUGF1c2FibGU/OiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=