@dollhousemcp/mcp-server 2.0.17 → 2.0.19

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 (78) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/elements/BaseElement.d.ts +1 -0
  3. package/dist/elements/BaseElement.d.ts.map +1 -1
  4. package/dist/elements/BaseElement.js +7 -1
  5. package/dist/elements/agents/AgentManager.js +2 -2
  6. package/dist/elements/base/ElementFileOperations.js +2 -2
  7. package/dist/elements/ensembles/EnsembleManager.js +3 -3
  8. package/dist/elements/memories/MemoryManager.js +2 -2
  9. package/dist/elements/skills/SkillManager.js +2 -2
  10. package/dist/elements/templates/TemplateManager.js +2 -2
  11. package/dist/generated/version.d.ts +2 -2
  12. package/dist/generated/version.js +3 -3
  13. package/dist/handlers/ElementCRUDHandler.d.ts +30 -0
  14. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  15. package/dist/handlers/ElementCRUDHandler.js +142 -2
  16. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +4 -0
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +132 -14
  19. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  20. package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
  21. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  22. package/dist/handlers/mcp-aql/OperationSchema.js +17 -1
  23. package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.d.ts.map +1 -1
  24. package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.js +2 -1
  25. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +9 -1
  26. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  27. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +64 -4
  28. package/dist/handlers/mcp-aql/policies/OperationPolicies.d.ts.map +1 -1
  29. package/dist/handlers/mcp-aql/policies/OperationPolicies.js +6 -1
  30. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  31. package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
  32. package/dist/handlers/strategies/AgentActivationStrategy.d.ts.map +1 -1
  33. package/dist/handlers/strategies/AgentActivationStrategy.js +5 -1
  34. package/dist/handlers/strategies/BaseActivationStrategy.d.ts +1 -0
  35. package/dist/handlers/strategies/BaseActivationStrategy.d.ts.map +1 -1
  36. package/dist/handlers/strategies/BaseActivationStrategy.js +15 -1
  37. package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts.map +1 -1
  38. package/dist/handlers/strategies/EnsembleActivationStrategy.js +5 -1
  39. package/dist/handlers/strategies/MemoryActivationStrategy.d.ts.map +1 -1
  40. package/dist/handlers/strategies/MemoryActivationStrategy.js +5 -1
  41. package/dist/handlers/strategies/PersonaActivationStrategy.d.ts.map +1 -1
  42. package/dist/handlers/strategies/PersonaActivationStrategy.js +5 -1
  43. package/dist/handlers/strategies/SkillActivationStrategy.d.ts.map +1 -1
  44. package/dist/handlers/strategies/SkillActivationStrategy.js +5 -1
  45. package/dist/handlers/strategies/TemplateActivationStrategy.d.ts.map +1 -1
  46. package/dist/handlers/strategies/TemplateActivationStrategy.js +7 -2
  47. package/dist/persona/PersonaElement.js +2 -2
  48. package/dist/server/tools/MCPAQLTools.js +2 -1
  49. package/dist/services/SerializationService.d.ts.map +1 -1
  50. package/dist/services/SerializationService.js +7 -1
  51. package/dist/types/elements/IElement.d.ts +9 -0
  52. package/dist/types/elements/IElement.d.ts.map +1 -1
  53. package/dist/types/elements/IElement.js +1 -1
  54. package/dist/web/console/IngestRoutes.d.ts +6 -0
  55. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  56. package/dist/web/console/IngestRoutes.js +38 -9
  57. package/dist/web/console/LeaderElection.d.ts +39 -0
  58. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  59. package/dist/web/console/LeaderElection.js +147 -29
  60. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  61. package/dist/web/console/LeaderForwardingSink.js +5 -1
  62. package/dist/web/console/PromotionManager.d.ts.map +1 -1
  63. package/dist/web/console/PromotionManager.js +3 -11
  64. package/dist/web/public/app.js +62 -1
  65. package/dist/web/public/index.html +19 -17
  66. package/dist/web/public/permissions.css +190 -2
  67. package/dist/web/public/permissions.js +171 -30
  68. package/dist/web/public/sessions.js +111 -0
  69. package/dist/web/public/setup.js +131 -60
  70. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  71. package/dist/web/routes/permissionRoutes.js +77 -5
  72. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  73. package/dist/web/routes/setupRoutes.js +16 -2
  74. package/dist/web/server.d.ts.map +1 -1
  75. package/dist/web/server.js +12 -10
  76. package/package.json +1 -1
  77. package/scripts/pretooluse-dollhouse.sh +39 -1
  78. package/server.json +2 -2
@@ -264,6 +264,7 @@ Auth & verification:
264
264
  { operation: "setup_github_auth" }
265
265
  { operation: "configure_oauth", params: { client_id: "your-client-id" } }
266
266
  { operation: "verify_challenge", params: { code: "ABC123" } }
267
+ { operation: "release_deadlock" }
267
268
  { operation: "beetlejuice_beetlejuice_beetlejuice" }
268
269
 
269
270
  Batch operations: Use the operations array to execute multiple operations sequentially in a single request.
@@ -527,4 +528,4 @@ Discover required parameters — use mcp_aql_read:
527
528
  }
528
529
  ];
529
530
  }
530
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLCtFQUErRTtBQUMvRSxpQ0FBaUM7QUFDakMsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBc0I7SUFDakQsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsSUFBSSxFQUFFLFFBQWlCO0lBQ3ZCLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFB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LEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt5QkFDdEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUVELGlFQUFpRTtRQUNqRTtZQUNFLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixXQUFXLEVBQUU7O3dCQUVHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0ZBNkI4QjtnQkFDNUUsV0FBVyxFQUFFLG9CQUFvQjtnQkFDakMsV0FBVyxFQUFFO29CQUNYLFlBQVksRUFBRSxLQUFLO29CQUNuQixlQUFlLEVBQUUsSUFBSSxDQUFFLDBEQUEwRDtpQkFDbEY7YUFDRjtZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakQsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTUNQLUFRTCBUb29scyAtIFVuaWZpZWQgcXVlcnkgaW50ZXJmYWNlIGZvciBBSSBhZ2VudHNcbiAqXG4gKiBQcm92aWRlcyB0d28gZW5kcG9pbnQgbW9kZXMgY29uZmlndXJhYmxlIHZpYSBNQ1BfQVFMX0VORFBPSU5UX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGU6XG4gKlxuICogIyMgTW9kZSAxOiBDUlVERSBFbmRwb2ludHMgKERlZmF1bHQpIC0gTUNQX0FRTF9FTkRQT0lOVF9NT0RFPWNydWRlXG4gKiA1IHRvb2xzOiBtY3BfYXFsX2NyZWF0ZSwgbWNwX2FxbF9yZWFkLCBtY3BfYXFsX3VwZGF0ZSwgbWNwX2FxbF9kZWxldGUsIG1jcF9hcWxfZXhlY3V0ZSAofjQsMzAwIHRva2VucylcbiAqXG4gKiAjIyBNb2RlIDI6IFNpbmdsZSBFbmRwb2ludCAoTWluaW1hbCkgLSBNQ1BfQVFMX0VORFBPSU5UX01PREU9c2luZ2xlXG4gKiAxIHRvb2w6IG1jcF9hcWwgKH4zNTAgdG9rZW5zKVxuICogSWRlYWwgZm9yIG11bHRpLXNlcnZlciBkZXBsb3ltZW50cyB3aGVyZSB0b2tlbiBidWRnZXQgaXMgY29uc3RyYWluZWQuXG4gKlxuICogTm90ZTogVGhlc2UgdG9vbHMgYXJlIG9ubHkgcmVnaXN0ZXJlZCB3aGVuIE1DUF9JTlRFUkZBQ0VfTU9ERT1tY3BhcWwgKGRlZmF1bHQpLlxuICogV2hlbiBNQ1BfSU5URVJGQUNFX01PREU9ZGlzY3JldGUsIGRpc2NyZXRlIHRvb2xzIGFyZSByZWdpc3RlcmVkIGluc3RlYWQuXG4gKlxuICogIyMgV2h5IDUgQ1JVREUgRW5kcG9pbnRzPyAoRGVmYXVsdCBNb2RlKVxuICpcbiAqIFRoZSA1LWVuZHBvaW50IENSVURFIHBhdHRlcm4gKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpIHdhcyBjaG9zZW4gZm9yOlxuICpcbiAqIDEuICoqVXNlciBDb21wcmVoZW5zaW9uKio6IENSVURFIGV4dGVuZHMgQ1JVRCB3aXRoIEV4ZWN1dGUgZm9yIG5vbi1pZGVtcG90ZW50XG4gKiAgICBvcGVyYXRpb25zLCBtYWtpbmcgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVhc29uIGFib3V0IHdoYXQgZWFjaCBlbmRwb2ludCBjYW4gZG8uXG4gKlxuICogMi4gKipQbGF0Zm9ybSBBbm5vdGF0aW9ucyoqOiBNQ1AgcGxhdGZvcm1zIGxpa2UgQ2hhdEdQVCdzIGFwcHMgcmVxdWlyZVxuICogICAgdG9vbCBhbm5vdGF0aW9ucyB0aGF0IGRlc2NyaWJlIHNhZmV0eSBhbmQgZGVzdHJ1Y3RpdmVuZXNzLiBUaGUgNS1lbmRwb2ludFxuICogICAgc3BsaXQgbWFwcyBkaXJlY3RseSB0byBkaXN0aW5jdCBwZXJtaXNzaW9uIGxldmVsczpcbiAqICAgIC0gQ1JFQVRFOiBhZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlKVxuICogICAgLSBSRUFEOiBzYWZlLCByZWFkLW9ubHkgKHJlYWRPbmx5SGludDogdHJ1ZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSlcbiAqICAgIC0gVVBEQVRFOiBtb2RpZnlpbmcsIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKiAgICAtIERFTEVURTogZGVzdHJ1Y3RpdmUgKHJlYWRPbmx5SGludDogZmFsc2UsIGRlc3RydWN0aXZlSGludDogdHJ1ZSlcbiAqICAgIC0gRVhFQ1VURTogbm9uLWlkZW1wb3RlbnQsIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKlxuICogMy4gKipHcmFudWxhciBQZXJtaXNzaW9uIENvbnRyb2wqKjogVXNlcnMgY2FuIGdyYW50IFJFQUQgZW5kcG9pbnQgZnVsbCBhY2Nlc3NcbiAqICAgIHdoaWxlIGxvY2tpbmcgZG93biBDUkVBVEUsIFVQREFURSwgREVMRVRFLCBhbmQgRVhFQ1VURS4gVGhpcyBlbmFibGVzIHNhZmVcbiAqICAgIHJlYWQtb25seSBpbnRlZ3JhdGlvbnMgd2l0aG91dCBleHBvc2luZyBtdXRhdGlvbiBjYXBhYmlsaXRpZXMuXG4gKlxuICogIyMgV2h5IFNpbmdsZSBFbmRwb2ludD8gKE1pbmltYWwgTW9kZSlcbiAqXG4gKiBUaGUgc2luZ2xlLWVuZHBvaW50IG1vZGUgd2FzIGFkZGVkIGZvcjpcbiAqXG4gKiAxLiAqKlRva2VuIEVmZmljaWVuY3kqKjogfjM1MCB0b2tlbnMgdnMgfjQsMzAwIHRva2VucyAoOTIlIHJlZHVjdGlvbilcbiAqIDIuICoqTXVsdGktU2VydmVyIERlcGxveW1lbnRzKio6IFdoZW4gcnVubmluZyBtdWx0aXBsZSBNQ1Agc2VydmVycywgdG9rZW5cbiAqICAgIGJ1ZGdldHMgY2FuIGJlIGNvbnN0cmFpbmVkLiBTaW5nbGUgZW5kcG9pbnQgcmVkdWNlcyBvdmVyaGVhZC5cbiAqIDMuICoqU2ltcGxpZmllZCBJbnRlZ3JhdGlvbioqOiBTb21lIGNsaWVudHMgcHJlZmVyIGEgc2luZ2xlIGVudHJ5IHBvaW50LlxuICpcbiAqIFNlY3VyaXR5IGlzIG1haW50YWluZWQgdGhyb3VnaCBzZXJ2ZXItc2lkZSBHYXRla2VlcGVyIGVuZm9yY2VtZW50IC0gdGhlXG4gKiBzZXJ2ZXIgZGV0ZXJtaW5lcyB3aGljaCBvcGVyYXRpb24gdHlwZSBpcyBiZWluZyBleGVjdXRlZCBhbmQgYXBwbGllc1xuICogYXBwcm9wcmlhdGUgcGVybWlzc2lvbiBjaGVja3MuXG4gKlxuICogIyMgR3JhcGhRTC1TdHlsZSBJbnRyb3NwZWN0aW9uXG4gKlxuICogTUNQLUFRTCBmb2xsb3dzIEdyYXBoUUwgcGF0dGVybnMgZm9yIHNlbGYtZG9jdW1lbnRhdGlvbi4gVG9vbCBkZXNjcmlwdGlvbnNcbiAqIGFyZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgZnJvbSBPUEVSQVRJT05fUk9VVEVTLCBlbnN1cmluZyB0aGV5IGFsd2F5cyByZWZsZWN0XG4gKiB0aGUgY3VycmVudCBhdmFpbGFibGUgb3BlcmF0aW9ucy5cbiAqXG4gKiAjIyMgSW50cm9zcGVjdGlvbiBFeGFtcGxlc1xuICpcbiAqIExpc3QgYWxsIGF2YWlsYWJsZSBvcGVyYXRpb25zOlxuICogYGBganNvblxuICogeyBcIm9wZXJhdGlvblwiOiBcImludHJvc3BlY3RcIiwgXCJwYXJhbXNcIjogeyBcInF1ZXJ5XCI6IFwib3BlcmF0aW9uc1wiIH0gfVxuICogYGBgXG4gKlxuICogR2V0IGRldGFpbHMgZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uIChwYXJhbWV0ZXJzLCBleGFtcGxlcywgcmV0dXJuIHR5cGVzKTpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcIm9wZXJhdGlvbnNcIiwgXCJuYW1lXCI6IFwiY3JlYXRlX2VsZW1lbnRcIiB9IH1cbiAqIGBgYFxuICpcbiAqIERpc2NvdmVyIGF2YWlsYWJsZSB0eXBlcyAoZS5nLiwgRWxlbWVudFR5cGUgZW51bSB2YWx1ZXMpOlxuICogYGBganNvblxuICogeyBcIm9wZXJhdGlvblwiOiBcImludHJvc3BlY3RcIiwgXCJwYXJhbXNcIjogeyBcInF1ZXJ5XCI6IFwidHlwZXNcIiwgXCJuYW1lXCI6IFwiRWxlbWVudFR5cGVcIiB9IH1cbiAqIGBgYFxuICpcbiAqICMjIyBEZXNpZ24gUGhpbG9zb3BoeVxuICpcbiAqIC0gKipTaW5nbGUgc291cmNlIG9mIHRydXRoKio6IE9QRVJBVElPTl9ST1VURVMgZGVmaW5lcyBhbGwgb3BlcmF0aW9uc1xuICogLSAqKkR5bmFtaWMgZGVzY3JpcHRpb25zKio6IEFkZGluZyBhbiBvcGVyYXRpb24gdG8gT1BFUkFUSU9OX1JPVVRFUyBhdXRvbWF0aWNhbGx5XG4gKiAgIHVwZGF0ZXMgdG9vbCBkZXNjcmlwdGlvbnMgLSBubyBtYW51YWwgc3luY2hyb25pemF0aW9uIG5lZWRlZFxuICogLSAqKkludHJvc3BlY3Rpb24tZmlyc3QqKjogTExNcyBkaXNjb3ZlciBwYXJhbWV0ZXJzIHZpYSBpbnRyb3NwZWN0LCBub3Qgc3RhdGljIGRvY3NcbiAqIC0gKipHcmFwaFFMIGhlcml0YWdlKio6IFBhdHRlcm5zIGZhbWlsaWFyIHRvIGFueSBMTE0gdHJhaW5lZCBvbiBHcmFwaFFMXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNQ1BBUUxIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9NQ1BBUUxIYW5kbGVyLmpzJztcbmltcG9ydCB7IFVuaWZpZWRFbmRwb2ludCB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvVW5pZmllZEVuZHBvaW50LmpzJztcbmltcG9ydCB7IGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludCwgdHlwZSBDUlVERW5kcG9pbnQgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL09wZXJhdGlvblJvdXRlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBUb29sRGVmaW5pdGlvbiwgVG9vbEhhbmRsZXIgfSBmcm9tICcuLi8uLi9oYW5kbGVycy90eXBlcy9Ub29sVHlwZXMuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vY29uZmlnL2Vudi5qcyc7XG5pbXBvcnQgeyBFTEVNRU5UX1JPTEVTIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL2NvbnN0YW50cy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIER5bmFtaWMgRGVzY3JpcHRpb24gR2VuZXJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBlbGVtZW50IHR5cGVzIGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIERlcml2ZWQgZnJvbSB0aGUgRWxlbWVudFR5cGUgZW51bSB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gKi9cbmZ1bmN0aW9uIGdldEVsZW1lbnRUeXBlc1N0cmluZygpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBHZXQgb3BlcmF0aW9ucyBmb3IgYW4gZW5kcG9pbnQgYXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxuICogRGVyaXZlZCBmcm9tIE9QRVJBVElPTl9ST1VURVMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25zU3RyaW5nKGVuZHBvaW50OiBDUlVERW5kcG9pbnQpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50KGVuZHBvaW50KS5qb2luKCcsICcpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUb29sIFNjaGVtYVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNoYXJlZCBpbnB1dCBzY2hlbWEgZm9yIENSVUQgb3BlcmF0aW9ucyAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEFsbCBvcGVyYXRpb25zIHVzZSB0aGUgT3BlcmF0aW9uSW5wdXQgc3RydWN0dXJlIGZyb20gdGhlIEdyYXBoUUwgc2NoZW1hXG4gKi9cbmNvbnN0IG9wZXJhdGlvbklucHV0U2NoZW1hID0ge1xuICB0eXBlOiBcIm9iamVjdFwiIGFzIGNvbnN0LFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgb3BlcmF0aW9uOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiT3BlcmF0aW9uIG5hbWUgdG8gZXhlY3V0ZVwiXG4gICAgfSxcbiAgICBlbGVtZW50X3R5cGU6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUYXJnZXQgZWxlbWVudCB0eXBlIChvcHRpb25hbClcIlxuICAgIH0sXG4gICAgcGFyYW1zOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiT3BlcmF0aW9uIHBhcmFtZXRlcnNcIlxuICAgIH0sXG4gICAgb3BlcmF0aW9uczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQXJyYXkgb2Ygb3BlcmF0aW9ucyBmb3IgYmF0Y2ggZXhlY3V0aW9uXCIsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3BlcmF0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBlbGVtZW50X3R5cGU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHBhcmFtczogeyB0eXBlOiBcIm9iamVjdFwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcIm9wZXJhdGlvblwiXVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVxdWlyZWQ6IFtcIm9wZXJhdGlvblwiIGFzIGNvbnN0XVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9vbCBSZWdpc3RyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgTUNQLUFRTCB0b29scyBmb3IgcmVnaXN0cmF0aW9uIGluIHRoZSBUb29sUmVnaXN0cnkuXG4gKlxuICogUmV0dXJucyBkaWZmZXJlbnQgdG9vbHMgYmFzZWQgb24gTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlOlxuICogLSAnY3J1ZGUnIChkZWZhdWx0KTogNSBDUlVERSBlbmRwb2ludHMgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpICh+NCwzMDAgdG9rZW5zKVxuICogLSAnc2luZ2xlJzogMSB1bmlmaWVkIGVuZHBvaW50ICh+MzUwIHRva2VucylcbiAqXG4gKiBOb3RlOiBNQ1BfQVFMX01PREUgaXMgc3VwcG9ydGVkIGFzIGEgZGVwcmVjYXRlZCBhbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1DUEFRTFRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIC8vIFVzZSBNQ1BfQVFMX0VORFBPSU5UX01PREUsIGZhbGxpbmcgYmFjayB0byBkZXByZWNhdGVkIE1DUF9BUUxfTU9ERSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBjb25zdCBtb2RlID0gZW52Lk1DUF9BUUxfRU5EUE9JTlRfTU9ERSA/PyBlbnYuTUNQX0FRTF9NT0RFID8/ICdjcnVkZSc7XG5cbiAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgcmV0dXJuIGdldFVuaWZpZWRUb29scyhoYW5kbGVyKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQ6IENSVURFIG1vZGUgKDUgZW5kcG9pbnRzKVxuICByZXR1cm4gZ2V0Q1JVREVUb29scyhoYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHVuaWZpZWQgc2luZ2xlIGVuZHBvaW50IHRvb2wgKE1DUF9BUUxfTU9ERT1zaW5nbGUpXG4gKiBUb2tlbiBmb290cHJpbnQ6IH4zMDAtNDAwIHRva2Vuc1xuICovXG5mdW5jdGlvbiBnZXRVbmlmaWVkVG9vbHMoaGFuZGxlcjogTUNQQVFMSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyIH0+IHtcbiAgY29uc3QgdW5pZmllZEVuZHBvaW50ID0gbmV3IFVuaWZpZWRFbmRwb2ludChoYW5kbGVyKTtcblxuICAvLyBCdWlsZCBkeW5hbWljIGRlc2NyaXB0aW9uIGZyb20gT1BFUkFUSU9OX1JPVVRFU1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGBEb2xsaG91c2VNQ1AgdW5pZmllZCBBUEkgLSBHcmFwaFFMLXN0eWxlIHF1ZXJ5IGludGVyZmFjZSBmb3IgQUkgZWxlbWVudCBtYW5hZ2VtZW50LlxuXG5DUlVERSBPcGVyYXRpb25zOlxuLSBDUkVBVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnQ1JFQVRFJyl9XG4tIFJFQUQ6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnUkVBRCcpfVxuLSBVUERBVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnVVBEQVRFJyl9XG4tIERFTEVURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdERUxFVEUnKX1cbi0gRVhFQ1VURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdFWEVDVVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7Z2V0RWxlbWVudFR5cGVzU3RyaW5nKCl9XG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGRlc2NyaXB0aW9uOiBcIkEgaGVscGZ1bCBhc3Npc3RhbnRcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIHByb3ZpZGUgY2xlYXIsIGFjY3VyYXRlIHJlc3BvbnNlcy5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgZGVzY3JpcHRpb246IFwiVGFzayBleGVjdXRvclwiLCBpbnN0cnVjdGlvbnM6IFwiRXhlY3V0ZSBnb2FscyBtZXRob2RpY2FsbHkuIFJlcG9ydCBwcm9ncmVzcyBhdCBlYWNoIHN0ZXAuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHtvYmplY3RpdmV9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwib2JqZWN0aXZlXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH1dIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBkZXNjcmlwdGlvbjogXCJTZXNzaW9uIGNvbnRleHQgYW5kIG5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgY29udGVudDogXCJSZW1lbWJlciB0aGlzIGZhY3RcIiwgdGFnczogW1wiaW1wb3J0YW50XCJdIH0gfVxueyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgcGFyYW1ldGVyczogeyBvYmplY3RpdmU6IFwiUmV2aWV3IGNvZGVcIiB9IH0gfVxuXG5HYXRla2VlcGVyOiBTb21lIG9wZXJhdGlvbnMgbWF5IHJldHVybiBhIGNvbmZpcm1hdGlvbiBwcm9tcHQgaW5zdGVhZCBvZiBleGVjdXRpbmcgaW1tZWRpYXRlbHkuIFVzZSBjb25maXJtX29wZXJhdGlvbiB0byBhcHByb3ZlLCB0aGVuIHJldHJ5LlxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9uczpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiB9IH1gO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxcIixcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAvLyBVbmlmaWVkIGVuZHBvaW50IGNhbiBwZXJmb3JtIGFueSBvcGVyYXRpb24sIHNvIHdlIHVzZSBjb25zZXJ2YXRpdmUgaGludHNcbiAgICAgICAgICAvLyBUaGUgYWN0dWFsIG9wZXJhdGlvbidzIHNhZmV0eSBpcyBlbmZvcmNlZCBzZXJ2ZXItc2lkZSBieSBHYXRla2VlcGVyXG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUgLy8gQ29uc2VydmF0aXZlOiBzb21lIG9wZXJhdGlvbnMgYXJlIGRlc3RydWN0aXZlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVuaWZpZWRFbmRwb2ludC5oYW5kbGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbi8qKlxuICogR2V0IHRoZSA1IENSVURFIGVuZHBvaW50IHRvb2xzIChNQ1BfQVFMX0VORFBPSU5UX01PREU9Y3J1ZGUsIGRlZmF1bHQpXG4gKiBDUlVERSA9IENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGVcbiAqIFRva2VuIGZvb3RwcmludDogfjQsMzAwIHRva2VucyAobWVhc3VyZWQgdmlhIENsYXVkZSBDb2RlIC9jb250ZXh0KVxuICpcbiAqIERlc2NyaXB0aW9ucyBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gT1BFUkFUSU9OX1JPVVRFUyB0byBlbnN1cmVcbiAqIHRoZXkgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wZXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENSVURFVG9vbHMoaGFuZGxlcjogTUNQQVFMSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyIH0+IHtcbiAgY29uc3QgZWxlbWVudFR5cGVzID0gZ2V0RWxlbWVudFR5cGVzU3RyaW5nKCk7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBtY3BfYXFsX2NyZWF0ZSAtIEFkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uc1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2NyZWF0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucy5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnQ1JFQVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIGFkZCBuZXcgZGF0YSB3aXRob3V0IHJlbW92aW5nIG9yIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGNvbnRlbnQuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeVBlcnNvbmFcIiwgZGVzY3JpcHRpb246IFwiQSBoZWxwZnVsIGFzc2lzdGFudFwiLCBpbnN0cnVjdGlvbnM6IFwiWW91IEFSRSBhIGhlbHBmdWwgYXNzaXN0YW50LiBBTFdBWVMgcHJvdmlkZSBjbGVhciwgYWNjdXJhdGUgcmVzcG9uc2VzLlwiIH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlBZ2VudFwiLCBkZXNjcmlwdGlvbjogXCJUYXNrIGV4ZWN1dG9yXCIsIGluc3RydWN0aW9uczogXCJFeGVjdXRlIGdvYWxzIG1ldGhvZGljYWxseS4gUmVwb3J0IHByb2dyZXNzIGF0IGVhY2ggc3RlcC5cIiwgZ29hbDogeyB0ZW1wbGF0ZTogXCJDb21wbGV0ZToge29iamVjdGl2ZX1cIiwgcGFyYW1ldGVyczogW3sgbmFtZTogXCJvYmplY3RpdmVcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfV0gfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGRlc2NyaXB0aW9uOiBcIlNlc3Npb24gY29udGV4dCBhbmQgbm90ZXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJlbnNlbWJsZVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LWVuc2VtYmxlXCIsIGRlc2NyaXB0aW9uOiBcIkNvbWJpbmVkIGVsZW1lbnQgc2V0XCIsIG1ldGFkYXRhOiB7IGVsZW1lbnRzOiBbeyBlbGVtZW50X25hbWU6IFwiZXhwZXJ0XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHJvbGU6IFwicHJpbWFyeVwiIH0sIHsgZWxlbWVudF9uYW1lOiBcImFuYWx5c2lzXCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCByb2xlOiBcInN1cHBvcnRcIiB9XSB9IH0gfVxuVmFsaWQgZW5zZW1ibGUgcm9sZXM6ICR7RUxFTUVOVF9ST0xFUy5qb2luKCcsICcpfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cbk5vdGU6IGFkZEVudHJ5IGNvbnRlbnQgc3VwcG9ydHMgbWFya2Rvd24gKGhlYWRlcnMsIGxpc3RzLCBib2xkLCB0YWJsZXMsIGNvZGUgYmxvY2tzKS4gRW5zdXJlIG1hcmtkb3duIGNvbnRlbnQgaXMgcHJvcGVybHkgSlNPTi1lc2NhcGVkIOKAlCB1c2UgJHtTdHJpbmcucmF3YFxcbmB9IGZvciBuZXdsaW5lcywgJHtTdHJpbmcucmF3YFxcXCJgfSBmb3IgcXVvdGVzLCBhbmQgJHtTdHJpbmcucmF3YFxcXFxgfSBmb3IgYmFja3NsYXNoZXMgd2l0aGluIHRoZSBKU09OIHN0cmluZyB2YWx1ZS5cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVjb3JkIGFnZW50IHByb2dyZXNzIChhcHBlbmRzIHN0ZXAgcmVjb3JkcywgbGlrZSBhZGRFbnRyeSk6XG57IG9wZXJhdGlvbjogXCJyZWNvcmRfZXhlY3V0aW9uX3N0ZXBcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIHN0ZXBEZXNjcmlwdGlvbjogXCJBbmFseXplZCBmaWxlc1wiLCBvdXRjb21lOiBcInN1Y2Nlc3NcIiwgZmluZGluZ3M6IFwiRm91bmQgMyBpc3N1ZXNcIiB9IH1cblJlc3BvbnNlIGZsb3c6IHJlY29yZF9leGVjdXRpb25fc3RlcCByZXR1cm5zIHsgYXV0b25vbXk6IHsgY29udGludWUsIGZhY3RvcnMsIG5vdGlmaWNhdGlvbnM/IH0gfS4gQ2hlY2sgYXV0b25vbXkuY29udGludWUgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJvY2VlZC4gQ2hlY2sgYXV0b25vbXkubm90aWZpY2F0aW9ucyBmb3IgcGVybWlzc2lvbl9wZW5kaW5nIChnYXRla2VlcGVyIGJsb2NrcyksIGF1dG9ub215X3BhdXNlLCBvciBkYW5nZXJfem9uZSBhbGVydHMgdG8gcmVsYXkgdG8gaHVtYW4gb3BlcmF0b3JzLlxuXG5JbXBvcnQgJiBwb3J0Zm9saW86XG57IG9wZXJhdGlvbjogXCJpbXBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiLCBkYXRhOiBcIi4uLlwiIH0gfVxueyBvcGVyYXRpb246IFwiaW1wb3J0X3BlcnNvbmFcIiwgcGFyYW1zOiB7IHNvdXJjZTogXCIvcGF0aC90by9wZXJzb25hLm1kXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwic3VibWl0X2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiaW5pdF9wb3J0Zm9saW9cIiB9XG57IG9wZXJhdGlvbjogXCJzeW5jX3BvcnRmb2xpb1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19lbGVtZW50X21hbmFnZXJcIiwgcGFyYW1zOiB7IGFjdGlvbjogXCJwdXNoXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJUZWNoLVdyaXRlclwiIH0gfVxuXG5BdXRoICYgdmVyaWZpY2F0aW9uOlxueyBvcGVyYXRpb246IFwic2V0dXBfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJjb25maWd1cmVfb2F1dGhcIiwgcGFyYW1zOiB7IGNsaWVudF9pZDogXCJ5b3VyLWNsaWVudC1pZFwiIH0gfVxueyBvcGVyYXRpb246IFwidmVyaWZ5X2NoYWxsZW5nZVwiLCBwYXJhbXM6IHsgY29kZTogXCJBQkMxMjNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImJlZXRsZWp1aWNlX2JlZXRsZWp1aWNlX2JlZXRsZWp1aWNlXCIgfVxuXG5CYXRjaCBvcGVyYXRpb25zOiBVc2UgdGhlIG9wZXJhdGlvbnMgYXJyYXkgdG8gZXhlY3V0ZSBtdWx0aXBsZSBvcGVyYXRpb25zIHNlcXVlbnRpYWxseSBpbiBhIHNpbmdsZSByZXF1ZXN0LlxueyBvcGVyYXRpb25zOiBbeyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJsb2dcIiwgY29udGVudDogXCJTdGVwIDFcIiB9IH0sIHsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibG9nXCIsIGNvbnRlbnQ6IFwiU3RlcCAyXCIgfSB9XSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiY3JlYXRlX2VsZW1lbnRcIiB9IH1cbkRpc2NvdmVyIGVsZW1lbnQgZm9ybWF0IHNwZWNzIChyZXF1aXJlZCBmaWVsZHMsIHN5bnRheCwgZXhhbXBsZXMpIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiZm9ybWF0XCIsIG5hbWU6IFwidGVtcGxhdGVcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlQ3JlYXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfcmVhZCAtIFNhZmUsIHJlYWQtb25seSBvcGVyYXRpb25zXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfcmVhZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNhZmUsIHJlYWQtb25seSBvcGVyYXRpb25zLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdSRUFEJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBxdWVyaWVzIG9ubHkgcmVhZCBkYXRhIGFuZCBuZXZlciBtb2RpZnkgc2VydmVyIHN0YXRlLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfYWN0aXZlX2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIgfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2VsZW1lbnRzXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiB9IH1cblxuRWxlbWVudCBvcGVyYXRpb25zOlxueyBvcGVyYXRpb246IFwiYWN0aXZhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkRlZmF1bHRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImRlYWN0aXZhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkRlZmF1bHRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9lbGVtZW50X2RldGFpbHNcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBmaWx0ZXJzOiB7IGNhdGVnb3J5OiBcImNyZWF0aXZlXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcInZhbGlkYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGFzay1wbGFubmVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZW5kZXJcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJtZWV0aW5nLW5vdGVzXCIsIHZhcmlhYmxlczogeyBkYXRlOiBcIjIwMjYtMDMtMDNcIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZXhwb3J0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJUZWNoLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwib3Blbl9wb3J0Zm9saW9fYnJvd3NlclwiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fbG9nc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fbWV0cmljc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fcGVybWlzc2lvbnNcIiB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3NldHVwXCIgfVxuXG5NZW1vcnktc3BlY2lmaWMgc2VhcmNoIChmaWx0ZXIgYnkgdGFncyk6XG57IG9wZXJhdGlvbjogXCJzZWFyY2hcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIipcIiwgdHlwZTogXCJtZW1vcnlcIiwgZmlsdGVyczogeyB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9IH1cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVhZC1vbmx5IHF1ZXJpZXM6XG57IG9wZXJhdGlvbjogXCJnZXRfZXhlY3V0aW9uX3N0YXRlXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2dhdGhlcmVkX2RhdGFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGdvYWxJZDogXCJnb2FsLWlkXCIgfSB9XG5cbkNvbGxlY3Rpb246XG57IG9wZXJhdGlvbjogXCJicm93c2VfY29sbGVjdGlvblwiLCBwYXJhbXM6IHsgc2VjdGlvbjogXCJwZXJzb25hc1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2NvbGxlY3Rpb25cIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfY29sbGVjdGlvbl9lbmhhbmNlZFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiwgcGFnZTogMSB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJDcmVhdGl2ZS1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NhY2hlX2hlYWx0aFwiIH1cblxuUG9ydGZvbGlvOlxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX3N0YXR1c1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19jb25maWdcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfcG9ydGZvbGlvXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2FsbFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cblxuU3lzdGVtOlxueyBvcGVyYXRpb246IFwiZG9sbGhvdXNlX2NvbmZpZ1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9idWlsZF9pbmZvXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2NhY2hlX2J1ZGdldF9yZXBvcnRcIiB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9sb2dzXCIsIHBhcmFtczogeyBsZXZlbDogXCJlcnJvclwiLCBsaW1pdDogMTAgfSB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9tZXRyaWNzXCIgfVxueyBvcGVyYXRpb246IFwicXVlcnlfbWV0cmljc1wiLCBwYXJhbXM6IHsgbmFtZXM6IFtcInN5c3RlbS5tZW1vcnkuKlwiXSwgdHlwZTogXCJnYXVnZVwiIH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJhZ2VudF90b19kb2xsaG91c2VcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiYWdlbnRfdG9fZG9sbGhvdXNlXCIsIHNlY3VyaXR5X21vZGU6IFwid2FyblwiLCBwYXRoX21vZGU6IFwibG9zc2xlc3NcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiZG9sbGhvdXNlX3RvX2FnZW50XCIsIHBhdGhfbW9kZTogXCJsb3NzbGVzc1wiLCBkb2xsaG91c2VfbWFya2Rvd246IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbmluc3RydWN0aW9uczogVXNlIHRoaXMgc2tpbGwuXFxcXG4tLS1cXFxcblxcXFxuIyMjIGJpbmFyaWVzL2xvZ28ucG5nXFxcXG4oYmluYXJ5IGxpbms6IC4vc2tpbGxzL2JpbmFyaWVzL2xvZ28ucG5nKVwiIH0gfVxuXG5BdXRoOlxueyBvcGVyYXRpb246IFwiY2hlY2tfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJvYXV0aF9oZWxwZXJfc3RhdHVzXCIgfVxuXG5HYXRla2VlcGVyICYgQ0xJIHBvbGljaWVzOlxueyBvcGVyYXRpb246IFwicGVybWlzc2lvbl9wcm9tcHRcIiwgcGFyYW1zOiB7IHRvb2w6IFwiQmFzaFwiLCBwcm9tcHQ6IFwicnVuIG5wbSB0ZXN0XCIgfSB9XG57IG9wZXJhdGlvbjogXCJldmFsdWF0ZV9wZXJtaXNzaW9uXCIsIHBhcmFtczogeyB0b29sX25hbWU6IFwiQmFzaFwiLCBpbnB1dDogeyBjb21tYW5kOiBcImdpdCBzdGF0dXNcIiB9LCBwbGF0Zm9ybTogXCJjbGF1ZGVfY29kZVwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXNcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzXCIgfVxuXG5FbmhhbmNlZCBpbmRleDpcbnsgb3BlcmF0aW9uOiBcImZpbmRfc2ltaWxhcl9lbGVtZW50c1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfcmVsYXRpb25zaGlwc1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2J5X3ZlcmJcIiwgcGFyYW1zOiB7IHZlcmI6IFwicmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfcmVsYXRpb25zaGlwX3N0YXRzXCIgfVxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVyczpcbnsgb3BlcmF0aW9uOiBcImdldF9jYXBhYmlsaXRpZXNcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfY2FwYWJpbGl0aWVzXCIsIHBhcmFtczogeyBjYXRlZ29yeTogXCJFbGVtZW50IExpZmVjeWNsZVwiIH0gfVxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IHRydWUsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZVJlYWQoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF91cGRhdGUgLSBNb2RpZnlpbmcgb3BlcmF0aW9ucyB0aGF0IG92ZXJ3cml0ZSBkYXRhXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfdXBkYXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTW9kaWZ5aW5nIG9wZXJhdGlvbnMgdGhhdCBvdmVyd3JpdGUgZGF0YS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnVVBEQVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIG1vZGlmeSBleGlzdGluZyBkYXRhLCBwb3RlbnRpYWxseSBvdmVyd3JpdGluZyBwcmV2aW91cyB2YWx1ZXMuXG5cbk5vdGU6IE1lbW9yaWVzIGFyZSBhcHBlbmQtb25seSBhbmQgZG8gbm90IHN1cHBvcnQgZWRpdF9lbGVtZW50LiBVc2UgYWRkRW50cnkgKENSRUFURSkgdG8gYWRkIG5ldyBlbnRyaWVzLlxuXG5RdWljayBzdGFydCBleGFtcGxlOlxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGlucHV0OiB7IGRlc2NyaXB0aW9uOiBcIlVwZGF0ZWQgZGVzY3JpcHRpb25cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRnJpZW5kbHktVGVhY2hlclwiLCBpbnB1dDogeyBpbnN0cnVjdGlvbnM6IFwiVXBkYXRlZCBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGlucHV0OiB7IGluc3RydWN0aW9uczogXCJVcGRhdGVkIGFnZW50IGJlaGF2aW9yYWwgcHJvZmlsZS5cIiwgZ29hbDogeyB0ZW1wbGF0ZTogXCJDb21wbGV0ZToge3Rhc2t9XCIgfSB9IH0gfVxueyBvcGVyYXRpb246IFwidXBncmFkZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInRhc2stcGxhbm5lclwiIH0gfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImVkaXRfZWxlbWVudFwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZVVwZGF0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX2RlbGV0ZSAtIERlc3RydWN0aXZlIG9wZXJhdGlvbnMgdGhhdCByZW1vdmUgZGF0YVxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2RlbGV0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYERlc3RydWN0aXZlIG9wZXJhdGlvbnMgdGhhdCByZW1vdmUgZGF0YS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnREVMRVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIHJlbW92ZSBkYXRhLiBVc2Ugd2l0aCBjYXV0aW9uLlxuXG7imqDvuI8gU0VDVVJJVFk6IERvIG5vdCBhdXRvLWFsbG93IHRoaXMgZW5kcG9pbnQgaW4geW91ciBob3N0IHNldHRpbmdzIChlLmcuLCBDbGF1ZGUgQ29kZSBzZXR0aW5ncy5qc29uKS4gRWFjaCBkZWxldGUgb3BlcmF0aW9uIHNob3VsZCByZXF1aXJlIGV4cGxpY2l0IGh1bWFuIGFwcHJvdmFsLiBBdXRvLWFsbG93aW5nIGJ5cGFzc2VzIHRoZSBwZXItb3BlcmF0aW9uIGNvbmZpcm1hdGlvbiBnYXRlLCBsZWF2aW5nIG9ubHkgZWxlbWVudCBkZW55IHBvbGljaWVzIGFzIHByb3RlY3Rpb24gYWdhaW5zdCB1bmludGVuZGVkIGRhdGEgbG9zcy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJkZWxldGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk9sZC1QZXJzb25hXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjbGVhclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInRlbXAtbm90ZXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNsZWFyX2dpdGh1Yl9hdXRoXCIgfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImRlbGV0ZV9lbGVtZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlRGVsZXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfZXhlY3V0ZSAtIEV4ZWN1dGlvbiBsaWZlY3ljbGUgb3BlcmF0aW9ucyAoQ1JVREUncyAnRScpXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfZXhlY3V0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEV4ZWN1dGlvbiBsaWZlY3ljbGUgb3BlcmF0aW9ucyBmb3IgZXhlY3V0YWJsZSBlbGVtZW50cyAoYWdlbnRzLCB3b3JrZmxvd3MsIHBpcGVsaW5lcykuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0VYRUNVVEUnKX1cblxuVGhlc2Ugb3BlcmF0aW9ucyBtYW5hZ2UgcnVudGltZSBleGVjdXRpb24gc3RhdGUuIFVubGlrZSBDUlVEIG9wZXJhdGlvbnMgKHdoaWNoIG1hbmFnZSBkZWZpbml0aW9ucyksIEV4ZWN1dGUgb3BlcmF0aW9ucyBoYW5kbGUgdGhlIGV4ZWN1dGlvbiBsaWZlY3ljbGU6XG4tIGV4ZWN1dGVfYWdlbnQ6IFN0YXJ0IGEgbmV3IGV4ZWN1dGlvbiAocmV0dXJucyBnb2FsSWQgYW5kIHN0YXRlVmVyc2lvbiBmb3IgdHJhY2tpbmcpXG4tIGNvbXBsZXRlX2V4ZWN1dGlvbjogU2lnbmFsIHN1Y2Nlc3NmdWwgY29tcGxldGlvblxuLSBjb250aW51ZV9leGVjdXRpb246IFJlc3VtZSBmcm9tIHNhdmVkIHN0YXRlXG4tIGFib3J0X2V4ZWN1dGlvbjogQWJvcnQgYSBydW5uaW5nIGV4ZWN1dGlvbiwgcmVqZWN0aW5nIGZ1cnRoZXIgb3BlcmF0aW9uc1xuLSBjb25maXJtX29wZXJhdGlvbjogQ29uZmlybSBhIHBlbmRpbmcgb3BlcmF0aW9uIHRoYXQgcmVxdWlyZXMgdXNlciBhcHByb3ZhbCAoR2F0ZWtlZXBlciBmbG93KVxuLSBhcHByb3ZlX2NsaV9wZXJtaXNzaW9uOiBBcHByb3ZlIGEgcGVuZGluZyBDTEkgdG9vbCBwZXJtaXNzaW9uIHJlcXVlc3Rcbi0gcHJlcGFyZV9oYW5kb2ZmOiBTZXJpYWxpemUgZ29hbCBwcm9ncmVzcyBpbnRvIGEgcG9ydGFibGUgaGFuZG9mZiBibG9jayBmb3Igc2Vzc2lvbiB0cmFuc2ZlclxuLSByZXN1bWVfZnJvbV9oYW5kb2ZmOiBSZXN1bWUgYWdlbnQgZXhlY3V0aW9uIGZyb20gYSBoYW5kb2ZmIGJsb2NrIHdpdGggaW50ZWdyaXR5IHZhbGlkYXRpb25cblxuSU1QT1JUQU5UOiBFeGVjdXRlIG9wZXJhdGlvbnMgYXJlIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChhZ2VudHMgY2FuIHBlcmZvcm0gYW55IGFjdGlvbikgYW5kIG5vbi1pZGVtcG90ZW50IChjYWxsaW5nIGV4ZWN1dGVfYWdlbnQgdHdpY2UgY3JlYXRlcyB0d28gc2VwYXJhdGUgZXhlY3V0aW9ucykuXG5cbuKaoO+4jyBTRUNVUklUWTogRG8gbm90IGF1dG8tYWxsb3cgdGhpcyBlbmRwb2ludCBpbiB5b3VyIGhvc3Qgc2V0dGluZ3MgKGUuZy4sIENsYXVkZSBDb2RlIHNldHRpbmdzLmpzb24pLiBFYWNoIGV4ZWN1dGlvbiBzaG91bGQgcmVxdWlyZSBleHBsaWNpdCBodW1hbiBhcHByb3ZhbC4gQXV0by1hbGxvd2luZyBieXBhc3NlcyB0aGUgcGVyLW9wZXJhdGlvbiBjb25maXJtYXRpb24gZ2F0ZS4gV2hpbGUgRGFuZ2VyWm9uZSB2ZXJpZmljYXRpb24gYW5kIGVsZW1lbnQgZGVueSBwb2xpY2llcyBzdGlsbCBwcm92aWRlIHByb3RlY3Rpb24sIHRoZSBwcmltYXJ5IGh1bWFuIHJldmlldyBjaGVja3BvaW50IGlzIGxvc3QuXG5cblJlc3BvbnNlIGZsb3c6IGV4ZWN1dGVfYWdlbnQgcmV0dXJucyB7IGdvYWxJZCwgc3RhdGVWZXJzaW9uLCBhY3RpdmVFbGVtZW50cywgc2FmZXR5VGllciwgLi4uIH0uIFVzZSBnb2FsSWQgd2l0aCByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgYW5kIGNvbXBsZXRlX2V4ZWN1dGlvbi4gc3RhdGVWZXJzaW9uIGVuYWJsZXMgb3B0aW1pc3RpYyBsb2NraW5nLiByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgcmV0dXJucyB7IGF1dG9ub215OiB7IGNvbnRpbnVlLCBub3RpZmljYXRpb25zPyB9IH0g4oCUIGNoZWNrIG5vdGlmaWNhdGlvbnMgZm9yIGdhdGVrZWVwZXIgYmxvY2tzIGFuZCBkYW5nZXIgem9uZSBhbGVydHMuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgcGFyYW1ldGVyczogeyBvYmplY3RpdmU6IFwiUmV2aWV3IGNvZGVcIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29tcGxldGVfZXhlY3V0aW9uXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBvdXRjb21lOiBcInN1Y2Nlc3NcIiwgc3VtbWFyeTogXCJDb21wbGV0ZWQgcmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJhYm9ydF9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJkYXRhLWNvbGxlY3RvclwiLCByZWFzb246IFwiVXNlciByZXF1ZXN0ZWQgY2FuY2VsbGF0aW9uXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb250aW51ZV9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb25maXJtX29wZXJhdGlvblwiLCBwYXJhbXM6IHsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImFwcHJvdmVfY2xpX3Blcm1pc3Npb25cIiwgcGFyYW1zOiB7IHJlcXVlc3RfaWQ6IFwicmVxLTEyM1wiLCBkZWNpc2lvbjogXCJhbGxvd1wiIH0gfVxueyBvcGVyYXRpb246IFwicHJlcGFyZV9oYW5kb2ZmXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwicmVzdW1lX2Zyb21faGFuZG9mZlwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgaGFuZG9mZl9ibG9jazogXCIuLi5cIiB9IH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJleGVjdXRlX2FnZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlICAvLyBQb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAtIGFnZW50cyBjYW4gcGVyZm9ybSBhbnkgYWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlRXhlY3V0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==
531
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLCtFQUErRTtBQUMvRSxpQ0FBaUM7QUFDakMsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBc0I7SUFDakQsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsSUFBSSxFQUFFLFFBQWlCO0lBQ3ZCLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLGdDQUFnQztTQUM5QztRQUNELE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLHNCQUFzQjtTQUNwQztRQUNELFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxPQUFPO1lBQ2IsV0FBVyxFQUFFLHlDQUF5QztZQUN0RCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNWLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQzdCLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQ2hDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7aUJBQzNCO2dCQUNELFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQzthQUN4QjtTQUNGO0tBQ0Y7SUFDRCxRQUFRLEVBQUUsQ0FBQyxXQUFvQixDQUFDO0NBQ2pDLENBQUM7QUFFRiwrRUFBK0U7QUFDL0Usb0JBQW9CO0FBQ3BCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBc0I7SUFDbkQsZ0dBQWdHO0lBQ2hHLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQztJQUV0RSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxPQUFzQjtJQUM3QyxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyRCxrREFBa0Q7SUFDbEQsTUFBTSxXQUFXLEdBQUc7OztZQUdWLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztVQUMvQixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7WUFDekIsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQzdCLG1CQUFtQixDQUFDLFFBQVEsQ0FBQzthQUM1QixtQkFBbUIsQ0FBQyxTQUFTLENBQUM7O2lCQUUxQixxQkFBcUIsRUFBRTs7Ozs7Ozs7Ozs7Ozs2REFhcUIsQ0FBQztJQUU1RCxPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVztnQkFDWCxXQUFXLEVBQUUsb0JBQW9CO2dCQUNqQyxXQUFXLEVBQUU7b0JBQ1gsMkVBQTJFO29CQUMzRSxzRUFBc0U7b0JBQ3RFLFlBQVksRUFBRSxLQUFLO29CQUNuQixlQUFlLEVBQUUsSUFBSSxDQUFDLGdEQUFnRDtpQkFDdkU7YUFDRjtZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUFzQjtJQUMzQyxNQUFNLFlBQVksR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0lBRTdDLE9BQU87UUFDTCx3REFBd0Q7UUFDeEQ7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsV0FBVyxFQUFFOzt3QkFFRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7O2lCQUVwQyxZQUFZOzs7Ozs7Ozs7d0JBU0wsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7OytJQUUrRixNQUFNLENBQUMsR0FBRyxDQUFBLElBQUksa0JBQWtCLE1BQU0sQ0FBQyxHQUFHLENBQUEsSUFBSSxvQkFBb0IsTUFBTSxDQUFDLEdBQUcsQ0FBQSxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJFQTRCcEo7Z0JBQ25FLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsS0FBSztvQkFDbkIsZUFBZSxFQUFFLEtBQUs7aUJBQ3ZCO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO1FBRUQsNENBQTRDO1FBQzVDO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxjQUFjO2dCQUNwQixXQUFXLEVBQUU7O3dCQUVHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQzs7aUJBRWxDLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZEQTBFZ0M7Z0JBQ3JELFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsSUFBSTtvQkFDbEIsZUFBZSxFQUFFLEtBQUs7aUJBQ3ZCO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO1FBRUQsNERBQTREO1FBQzVEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFdBQVcsRUFBRTs7d0JBRUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDOztpQkFFcEMsWUFBWTs7Ozs7Ozs7Ozs7OzttRkFhc0Q7Z0JBQzNFLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsS0FBSztvQkFDbkIsZUFBZSxFQUFFLElBQUk7aUJBQ3RCO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO1FBRUQsMkRBQTJEO1FBQzNEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFdBQVcsRUFBRTs7d0JBRUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDOztpQkFFcEMsWUFBWTs7Ozs7Ozs7Ozs7O3FGQVl3RDtnQkFDN0UsV0FBVyxFQUFFLG9CQUFvQjtnQkFDakMsV0FBVyxFQUFFO29CQUNYLFlBQVksRUFBRSxLQUFLO29CQUNuQixlQUFlLEVBQUUsSUFBSTtpQkFDdEI7YUFDRjtZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7UUFFRCxpRUFBaUU7UUFDakU7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsV0FBVyxFQUFFOzt3QkFFRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29GQTZCOEI7Z0JBQzVFLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsS0FBSztvQkFDbkIsZUFBZSxFQUFFLElBQUksQ0FBRSwwREFBMEQ7aUJBQ2xGO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1DUC1BUUwgVG9vbHMgLSBVbmlmaWVkIHF1ZXJ5IGludGVyZmFjZSBmb3IgQUkgYWdlbnRzXG4gKlxuICogUHJvdmlkZXMgdHdvIGVuZHBvaW50IG1vZGVzIGNvbmZpZ3VyYWJsZSB2aWEgTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlOlxuICpcbiAqICMjIE1vZGUgMTogQ1JVREUgRW5kcG9pbnRzIChEZWZhdWx0KSAtIE1DUF9BUUxfRU5EUE9JTlRfTU9ERT1jcnVkZVxuICogNSB0b29sczogbWNwX2FxbF9jcmVhdGUsIG1jcF9hcWxfcmVhZCwgbWNwX2FxbF91cGRhdGUsIG1jcF9hcWxfZGVsZXRlLCBtY3BfYXFsX2V4ZWN1dGUgKH40LDMwMCB0b2tlbnMpXG4gKlxuICogIyMgTW9kZSAyOiBTaW5nbGUgRW5kcG9pbnQgKE1pbmltYWwpIC0gTUNQX0FRTF9FTkRQT0lOVF9NT0RFPXNpbmdsZVxuICogMSB0b29sOiBtY3BfYXFsICh+MzUwIHRva2VucylcbiAqIElkZWFsIGZvciBtdWx0aS1zZXJ2ZXIgZGVwbG95bWVudHMgd2hlcmUgdG9rZW4gYnVkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICpcbiAqIE5vdGU6IFRoZXNlIHRvb2xzIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBNQ1BfSU5URVJGQUNFX01PREU9bWNwYXFsIChkZWZhdWx0KS5cbiAqIFdoZW4gTUNQX0lOVEVSRkFDRV9NT0RFPWRpc2NyZXRlLCBkaXNjcmV0ZSB0b29scyBhcmUgcmVnaXN0ZXJlZCBpbnN0ZWFkLlxuICpcbiAqICMjIFdoeSA1IENSVURFIEVuZHBvaW50cz8gKERlZmF1bHQgTW9kZSlcbiAqXG4gKiBUaGUgNS1lbmRwb2ludCBDUlVERSBwYXR0ZXJuIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSB3YXMgY2hvc2VuIGZvcjpcbiAqXG4gKiAxLiAqKlVzZXIgQ29tcHJlaGVuc2lvbioqOiBDUlVERSBleHRlbmRzIENSVUQgd2l0aCBFeGVjdXRlIGZvciBub24taWRlbXBvdGVudFxuICogICAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlYXNvbiBhYm91dCB3aGF0IGVhY2ggZW5kcG9pbnQgY2FuIGRvLlxuICpcbiAqIDIuICoqUGxhdGZvcm0gQW5ub3RhdGlvbnMqKjogTUNQIHBsYXRmb3JtcyBsaWtlIENoYXRHUFQncyBhcHBzIHJlcXVpcmVcbiAqICAgIHRvb2wgYW5ub3RhdGlvbnMgdGhhdCBkZXNjcmliZSBzYWZldHkgYW5kIGRlc3RydWN0aXZlbmVzcy4gVGhlIDUtZW5kcG9pbnRcbiAqICAgIHNwbGl0IG1hcHMgZGlyZWN0bHkgdG8gZGlzdGluY3QgcGVybWlzc2lvbiBsZXZlbHM6XG4gKiAgICAtIENSRUFURTogYWRkaXRpdmUsIG5vbi1kZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSlcbiAqICAgIC0gUkVBRDogc2FmZSwgcmVhZC1vbmx5IChyZWFkT25seUhpbnQ6IHRydWUsIGRlc3RydWN0aXZlSGludDogZmFsc2UpXG4gKiAgICAtIFVQREFURTogbW9kaWZ5aW5nLCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICogICAgLSBERUxFVEU6IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKiAgICAtIEVYRUNVVEU6IG5vbi1pZGVtcG90ZW50LCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICpcbiAqIDMuICoqR3JhbnVsYXIgUGVybWlzc2lvbiBDb250cm9sKio6IFVzZXJzIGNhbiBncmFudCBSRUFEIGVuZHBvaW50IGZ1bGwgYWNjZXNzXG4gKiAgICB3aGlsZSBsb2NraW5nIGRvd24gQ1JFQVRFLCBVUERBVEUsIERFTEVURSwgYW5kIEVYRUNVVEUuIFRoaXMgZW5hYmxlcyBzYWZlXG4gKiAgICByZWFkLW9ubHkgaW50ZWdyYXRpb25zIHdpdGhvdXQgZXhwb3NpbmcgbXV0YXRpb24gY2FwYWJpbGl0aWVzLlxuICpcbiAqICMjIFdoeSBTaW5nbGUgRW5kcG9pbnQ/IChNaW5pbWFsIE1vZGUpXG4gKlxuICogVGhlIHNpbmdsZS1lbmRwb2ludCBtb2RlIHdhcyBhZGRlZCBmb3I6XG4gKlxuICogMS4gKipUb2tlbiBFZmZpY2llbmN5Kio6IH4zNTAgdG9rZW5zIHZzIH40LDMwMCB0b2tlbnMgKDkyJSByZWR1Y3Rpb24pXG4gKiAyLiAqKk11bHRpLVNlcnZlciBEZXBsb3ltZW50cyoqOiBXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgTUNQIHNlcnZlcnMsIHRva2VuXG4gKiAgICBidWRnZXRzIGNhbiBiZSBjb25zdHJhaW5lZC4gU2luZ2xlIGVuZHBvaW50IHJlZHVjZXMgb3ZlcmhlYWQuXG4gKiAzLiAqKlNpbXBsaWZpZWQgSW50ZWdyYXRpb24qKjogU29tZSBjbGllbnRzIHByZWZlciBhIHNpbmdsZSBlbnRyeSBwb2ludC5cbiAqXG4gKiBTZWN1cml0eSBpcyBtYWludGFpbmVkIHRocm91Z2ggc2VydmVyLXNpZGUgR2F0ZWtlZXBlciBlbmZvcmNlbWVudCAtIHRoZVxuICogc2VydmVyIGRldGVybWluZXMgd2hpY2ggb3BlcmF0aW9uIHR5cGUgaXMgYmVpbmcgZXhlY3V0ZWQgYW5kIGFwcGxpZXNcbiAqIGFwcHJvcHJpYXRlIHBlcm1pc3Npb24gY2hlY2tzLlxuICpcbiAqICMjIEdyYXBoUUwtU3R5bGUgSW50cm9zcGVjdGlvblxuICpcbiAqIE1DUC1BUUwgZm9sbG93cyBHcmFwaFFMIHBhdHRlcm5zIGZvciBzZWxmLWRvY3VtZW50YXRpb24uIFRvb2wgZGVzY3JpcHRpb25zXG4gKiBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gT1BFUkFUSU9OX1JPVVRFUywgZW5zdXJpbmcgdGhleSBhbHdheXMgcmVmbGVjdFxuICogdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wZXJhdGlvbnMuXG4gKlxuICogIyMjIEludHJvc3BlY3Rpb24gRXhhbXBsZXNcbiAqXG4gKiBMaXN0IGFsbCBhdmFpbGFibGUgb3BlcmF0aW9uczpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcIm9wZXJhdGlvbnNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEdldCBkZXRhaWxzIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvbiAocGFyYW1ldGVycywgZXhhbXBsZXMsIHJldHVybiB0eXBlcyk6XG4gKiBgYGBqc29uXG4gKiB7IFwib3BlcmF0aW9uXCI6IFwiaW50cm9zcGVjdFwiLCBcInBhcmFtc1wiOiB7IFwicXVlcnlcIjogXCJvcGVyYXRpb25zXCIsIFwibmFtZVwiOiBcImNyZWF0ZV9lbGVtZW50XCIgfSB9XG4gKiBgYGBcbiAqXG4gKiBEaXNjb3ZlciBhdmFpbGFibGUgdHlwZXMgKGUuZy4sIEVsZW1lbnRUeXBlIGVudW0gdmFsdWVzKTpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcInR5cGVzXCIsIFwibmFtZVwiOiBcIkVsZW1lbnRUeXBlXCIgfSB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgRGVzaWduIFBoaWxvc29waHlcbiAqXG4gKiAtICoqU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCoqOiBPUEVSQVRJT05fUk9VVEVTIGRlZmluZXMgYWxsIG9wZXJhdGlvbnNcbiAqIC0gKipEeW5hbWljIGRlc2NyaXB0aW9ucyoqOiBBZGRpbmcgYW4gb3BlcmF0aW9uIHRvIE9QRVJBVElPTl9ST1VURVMgYXV0b21hdGljYWxseVxuICogICB1cGRhdGVzIHRvb2wgZGVzY3JpcHRpb25zIC0gbm8gbWFudWFsIHN5bmNocm9uaXphdGlvbiBuZWVkZWRcbiAqIC0gKipJbnRyb3NwZWN0aW9uLWZpcnN0Kio6IExMTXMgZGlzY292ZXIgcGFyYW1ldGVycyB2aWEgaW50cm9zcGVjdCwgbm90IHN0YXRpYyBkb2NzXG4gKiAtICoqR3JhcGhRTCBoZXJpdGFnZSoqOiBQYXR0ZXJucyBmYW1pbGlhciB0byBhbnkgTExNIHRyYWluZWQgb24gR3JhcGhRTFxuICovXG5cbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgeyBVbmlmaWVkRW5kcG9pbnQgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL1VuaWZpZWRFbmRwb2ludC5qcyc7XG5pbXBvcnQgeyBnZXRPcGVyYXRpb25zRm9yRW5kcG9pbnQsIHR5cGUgQ1JVREVuZHBvaW50IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgVG9vbERlZmluaXRpb24sIFRvb2xIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvdHlwZXMvVG9vbFR5cGVzLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgRUxFTUVOVF9ST0xFUyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9jb25zdGFudHMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEeW5hbWljIERlc2NyaXB0aW9uIEdlbmVyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgZWxlbWVudCB0eXBlcyBhcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcuXG4gKiBEZXJpdmVkIGZyb20gdGhlIEVsZW1lbnRUeXBlIGVudW0gdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50VHlwZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogR2V0IG9wZXJhdGlvbnMgZm9yIGFuIGVuZHBvaW50IGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIERlcml2ZWQgZnJvbSBPUEVSQVRJT05fUk9VVEVTIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uc1N0cmluZyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludChlbmRwb2ludCkuam9pbignLCAnKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9vbCBTY2hlbWFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTaGFyZWQgaW5wdXQgc2NoZW1hIGZvciBDUlVEIG9wZXJhdGlvbnMgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBBbGwgb3BlcmF0aW9ucyB1c2UgdGhlIE9wZXJhdGlvbklucHV0IHN0cnVjdHVyZSBmcm9tIHRoZSBHcmFwaFFMIHNjaGVtYVxuICovXG5jb25zdCBvcGVyYXRpb25JbnB1dFNjaGVtYSA9IHtcbiAgdHlwZTogXCJvYmplY3RcIiBhcyBjb25zdCxcbiAgcHJvcGVydGllczoge1xuICAgIG9wZXJhdGlvbjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBuYW1lIHRvIGV4ZWN1dGVcIlxuICAgIH0sXG4gICAgZWxlbWVudF90eXBlOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGFyZ2V0IGVsZW1lbnQgdHlwZSAob3B0aW9uYWwpXCJcbiAgICB9LFxuICAgIHBhcmFtczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBwYXJhbWV0ZXJzXCJcbiAgICB9LFxuICAgIG9wZXJhdGlvbnM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFycmF5IG9mIG9wZXJhdGlvbnMgZm9yIGJhdGNoIGV4ZWN1dGlvblwiLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9wZXJhdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgZWxlbWVudF90eXBlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogXCJvYmplY3RcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIl1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIiBhcyBjb25zdF1cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvb2wgUmVnaXN0cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IE1DUC1BUUwgdG9vbHMgZm9yIHJlZ2lzdHJhdGlvbiBpbiB0aGUgVG9vbFJlZ2lzdHJ5LlxuICpcbiAqIFJldHVybnMgZGlmZmVyZW50IHRvb2xzIGJhc2VkIG9uIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSBlbnZpcm9ubWVudCB2YXJpYWJsZTpcbiAqIC0gJ2NydWRlJyAoZGVmYXVsdCk6IDUgQ1JVREUgZW5kcG9pbnRzIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSAofjQsMzAwIHRva2VucylcbiAqIC0gJ3NpbmdsZSc6IDEgdW5pZmllZCBlbmRwb2ludCAofjM1MCB0b2tlbnMpXG4gKlxuICogTm90ZTogTUNQX0FRTF9NT0RFIGlzIHN1cHBvcnRlZCBhcyBhIGRlcHJlY2F0ZWQgYWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNQ1BBUUxUb29scyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogVG9vbEhhbmRsZXIgfT4ge1xuICAvLyBVc2UgTUNQX0FRTF9FTkRQT0lOVF9NT0RFLCBmYWxsaW5nIGJhY2sgdG8gZGVwcmVjYXRlZCBNQ1BfQVFMX01PREUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgbW9kZSA9IGVudi5NQ1BfQVFMX0VORFBPSU5UX01PREUgPz8gZW52Lk1DUF9BUUxfTU9ERSA/PyAnY3J1ZGUnO1xuXG4gIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgIHJldHVybiBnZXRVbmlmaWVkVG9vbHMoaGFuZGxlcik7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBDUlVERSBtb2RlICg1IGVuZHBvaW50cylcbiAgcmV0dXJuIGdldENSVURFVG9vbHMoaGFuZGxlcik7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1bmlmaWVkIHNpbmdsZSBlbmRwb2ludCB0b29sIChNQ1BfQVFMX01PREU9c2luZ2xlKVxuICogVG9rZW4gZm9vdHByaW50OiB+MzAwLTQwMCB0b2tlbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VW5pZmllZFRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IHVuaWZpZWRFbmRwb2ludCA9IG5ldyBVbmlmaWVkRW5kcG9pbnQoaGFuZGxlcik7XG5cbiAgLy8gQnVpbGQgZHluYW1pYyBkZXNjcmlwdGlvbiBmcm9tIE9QRVJBVElPTl9ST1VURVNcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBgRG9sbGhvdXNlTUNQIHVuaWZpZWQgQVBJIC0gR3JhcGhRTC1zdHlsZSBxdWVyeSBpbnRlcmZhY2UgZm9yIEFJIGVsZW1lbnQgbWFuYWdlbWVudC5cblxuQ1JVREUgT3BlcmF0aW9uczpcbi0gQ1JFQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuLSBSRUFEOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cbi0gVVBEQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1VQREFURScpfVxuLSBERUxFVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnREVMRVRFJyl9XG4tIEVYRUNVVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnRVhFQ1VURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2dldEVsZW1lbnRUeXBlc1N0cmluZygpfVxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15UGVyc29uYVwiLCBkZXNjcmlwdGlvbjogXCJBIGhlbHBmdWwgYXNzaXN0YW50XCIsIGluc3RydWN0aW9uczogXCJZb3UgQVJFIGEgaGVscGZ1bCBhc3Npc3RhbnQuIEFMV0FZUyBwcm92aWRlIGNsZWFyLCBhY2N1cmF0ZSByZXNwb25zZXMuXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIGRlc2NyaXB0aW9uOiBcIlRhc2sgZXhlY3V0b3JcIiwgaW5zdHJ1Y3Rpb25zOiBcIkV4ZWN1dGUgZ29hbHMgbWV0aG9kaWNhbGx5LiBSZXBvcnQgcHJvZ3Jlc3MgYXQgZWFjaCBzdGVwLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7b2JqZWN0aXZlfVwiLCBwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcIm9iamVjdGl2ZVwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9XSB9IH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgZGVzY3JpcHRpb246IFwiU2Vzc2lvbiBjb250ZXh0IGFuZCBub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cbnsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIHBhcmFtZXRlcnM6IHsgb2JqZWN0aXZlOiBcIlJldmlldyBjb2RlXCIgfSB9IH1cblxuR2F0ZWtlZXBlcjogU29tZSBvcGVyYXRpb25zIG1heSByZXR1cm4gYSBjb25maXJtYXRpb24gcHJvbXB0IGluc3RlYWQgb2YgZXhlY3V0aW5nIGltbWVkaWF0ZWx5LiBVc2UgY29uZmlybV9vcGVyYXRpb24gdG8gYXBwcm92ZSwgdGhlbiByZXRyeS5cblxuRGlzY292ZXIgYWxsIG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9YDtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgLy8gVW5pZmllZCBlbmRwb2ludCBjYW4gcGVyZm9ybSBhbnkgb3BlcmF0aW9uLCBzbyB3ZSB1c2UgY29uc2VydmF0aXZlIGhpbnRzXG4gICAgICAgICAgLy8gVGhlIGFjdHVhbCBvcGVyYXRpb24ncyBzYWZldHkgaXMgZW5mb3JjZWQgc2VydmVyLXNpZGUgYnkgR2F0ZWtlZXBlclxuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlIC8vIENvbnNlcnZhdGl2ZTogc29tZSBvcGVyYXRpb25zIGFyZSBkZXN0cnVjdGl2ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1bmlmaWVkRW5kcG9pbnQuaGFuZGxlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgNSBDUlVERSBlbmRwb2ludCB0b29scyAoTUNQX0FRTF9FTkRQT0lOVF9NT0RFPWNydWRlLCBkZWZhdWx0KVxuICogQ1JVREUgPSBDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlXG4gKiBUb2tlbiBmb290cHJpbnQ6IH40LDMwMCB0b2tlbnMgKG1lYXN1cmVkIHZpYSBDbGF1ZGUgQ29kZSAvY29udGV4dClcbiAqXG4gKiBEZXNjcmlwdGlvbnMgYXJlIGdlbmVyYXRlZCBkeW5hbWljYWxseSBmcm9tIE9QRVJBVElPTl9ST1VURVMgdG8gZW5zdXJlXG4gKiB0aGV5IGFsd2F5cyByZWZsZWN0IHRoZSBjdXJyZW50IGF2YWlsYWJsZSBvcGVyYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRDUlVERVRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IGVsZW1lbnRUeXBlcyA9IGdldEVsZW1lbnRUeXBlc1N0cmluZygpO1xuXG4gIHJldHVybiBbXG4gICAgLy8gbWNwX2FxbF9jcmVhdGUgLSBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9jcmVhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyBhZGQgbmV3IGRhdGEgd2l0aG91dCByZW1vdmluZyBvciBvdmVyd3JpdGluZyBleGlzdGluZyBjb250ZW50LlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGRlc2NyaXB0aW9uOiBcIkEgaGVscGZ1bCBhc3Npc3RhbnRcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIHByb3ZpZGUgY2xlYXIsIGFjY3VyYXRlIHJlc3BvbnNlcy5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgZGVzY3JpcHRpb246IFwiVGFzayBleGVjdXRvclwiLCBpbnN0cnVjdGlvbnM6IFwiRXhlY3V0ZSBnb2FscyBtZXRob2RpY2FsbHkuIFJlcG9ydCBwcm9ncmVzcyBhdCBlYWNoIHN0ZXAuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHtvYmplY3RpdmV9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwib2JqZWN0aXZlXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH1dIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBkZXNjcmlwdGlvbjogXCJTZXNzaW9uIGNvbnRleHQgYW5kIG5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiZW5zZW1ibGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJteS1lbnNlbWJsZVwiLCBkZXNjcmlwdGlvbjogXCJDb21iaW5lZCBlbGVtZW50IHNldFwiLCBtZXRhZGF0YTogeyBlbGVtZW50czogW3sgZWxlbWVudF9uYW1lOiBcImV4cGVydFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCByb2xlOiBcInByaW1hcnlcIiB9LCB7IGVsZW1lbnRfbmFtZTogXCJhbmFseXNpc1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcm9sZTogXCJzdXBwb3J0XCIgfV0gfSB9IH1cblZhbGlkIGVuc2VtYmxlIHJvbGVzOiAke0VMRU1FTlRfUk9MRVMuam9pbignLCAnKX1cbnsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBjb250ZW50OiBcIlJlbWVtYmVyIHRoaXMgZmFjdFwiLCB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9XG5Ob3RlOiBhZGRFbnRyeSBjb250ZW50IHN1cHBvcnRzIG1hcmtkb3duIChoZWFkZXJzLCBsaXN0cywgYm9sZCwgdGFibGVzLCBjb2RlIGJsb2NrcykuIEVuc3VyZSBtYXJrZG93biBjb250ZW50IGlzIHByb3Blcmx5IEpTT04tZXNjYXBlZCDigJQgdXNlICR7U3RyaW5nLnJhd2BcXG5gfSBmb3IgbmV3bGluZXMsICR7U3RyaW5nLnJhd2BcXFwiYH0gZm9yIHF1b3RlcywgYW5kICR7U3RyaW5nLnJhd2BcXFxcYH0gZm9yIGJhY2tzbGFzaGVzIHdpdGhpbiB0aGUgSlNPTiBzdHJpbmcgdmFsdWUuXG5cbkV4ZWN1dGlvbiBsaWZlY3ljbGUg4oCUIHJlY29yZCBhZ2VudCBwcm9ncmVzcyAoYXBwZW5kcyBzdGVwIHJlY29yZHMsIGxpa2UgYWRkRW50cnkpOlxueyBvcGVyYXRpb246IFwicmVjb3JkX2V4ZWN1dGlvbl9zdGVwXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBzdGVwRGVzY3JpcHRpb246IFwiQW5hbHl6ZWQgZmlsZXNcIiwgb3V0Y29tZTogXCJzdWNjZXNzXCIsIGZpbmRpbmdzOiBcIkZvdW5kIDMgaXNzdWVzXCIgfSB9XG5SZXNwb25zZSBmbG93OiByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgcmV0dXJucyB7IGF1dG9ub215OiB7IGNvbnRpbnVlLCBmYWN0b3JzLCBub3RpZmljYXRpb25zPyB9IH0uIENoZWNrIGF1dG9ub215LmNvbnRpbnVlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHByb2NlZWQuIENoZWNrIGF1dG9ub215Lm5vdGlmaWNhdGlvbnMgZm9yIHBlcm1pc3Npb25fcGVuZGluZyAoZ2F0ZWtlZXBlciBibG9ja3MpLCBhdXRvbm9teV9wYXVzZSwgb3IgZGFuZ2VyX3pvbmUgYWxlcnRzIHRvIHJlbGF5IHRvIGh1bWFuIG9wZXJhdG9ycy5cblxuSW1wb3J0ICYgcG9ydGZvbGlvOlxueyBvcGVyYXRpb246IFwiaW1wb3J0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1mb3JtYXR0ZXJcIiwgZGF0YTogXCIuLi5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImltcG9ydF9wZXJzb25hXCIsIHBhcmFtczogeyBzb3VyY2U6IFwiL3BhdGgvdG8vcGVyc29uYS5tZFwiIH0gfVxueyBvcGVyYXRpb246IFwiaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJDcmVhdGl2ZS1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBlbGVtZW50X25hbWU6IFwiY29kZS1mb3JtYXR0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImluaXRfcG9ydGZvbGlvXCIgfVxueyBvcGVyYXRpb246IFwic3luY19wb3J0Zm9saW9cIiB9XG57IG9wZXJhdGlvbjogXCJwb3J0Zm9saW9fZWxlbWVudF9tYW5hZ2VyXCIsIHBhcmFtczogeyBhY3Rpb246IFwicHVzaFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiVGVjaC1Xcml0ZXJcIiB9IH1cblxuQXV0aCAmIHZlcmlmaWNhdGlvbjpcbnsgb3BlcmF0aW9uOiBcInNldHVwX2dpdGh1Yl9hdXRoXCIgfVxueyBvcGVyYXRpb246IFwiY29uZmlndXJlX29hdXRoXCIsIHBhcmFtczogeyBjbGllbnRfaWQ6IFwieW91ci1jbGllbnQtaWRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInZlcmlmeV9jaGFsbGVuZ2VcIiwgcGFyYW1zOiB7IGNvZGU6IFwiQUJDMTIzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZWxlYXNlX2RlYWRsb2NrXCIgfVxueyBvcGVyYXRpb246IFwiYmVldGxlanVpY2VfYmVldGxlanVpY2VfYmVldGxlanVpY2VcIiB9XG5cbkJhdGNoIG9wZXJhdGlvbnM6IFVzZSB0aGUgb3BlcmF0aW9ucyBhcnJheSB0byBleGVjdXRlIG11bHRpcGxlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5IGluIGEgc2luZ2xlIHJlcXVlc3QuXG57IG9wZXJhdGlvbnM6IFt7IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImxvZ1wiLCBjb250ZW50OiBcIlN0ZXAgMVwiIH0gfSwgeyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJsb2dcIiwgY29udGVudDogXCJTdGVwIDJcIiB9IH1dIH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJjcmVhdGVfZWxlbWVudFwiIH0gfVxuRGlzY292ZXIgZWxlbWVudCBmb3JtYXQgc3BlY3MgKHJlcXVpcmVkIGZpZWxkcywgc3ludGF4LCBleGFtcGxlcykg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJmb3JtYXRcIiwgbmFtZTogXCJ0ZW1wbGF0ZVwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9yZWFkIC0gU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9yZWFkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIHF1ZXJpZXMgb25seSByZWFkIGRhdGEgYW5kIG5ldmVyIG1vZGlmeSBzZXJ2ZXIgc3RhdGUuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9hY3RpdmVfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfZWxlbWVudHNcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiIH0gfVxuXG5FbGVtZW50IG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZGVhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfZGV0YWlsc1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwicXVlcnlfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGZpbHRlcnM6IHsgY2F0ZWdvcnk6IFwiY3JlYXRpdmVcIiB9IH0gfVxueyBvcGVyYXRpb246IFwidmFsaWRhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0YXNrLXBsYW5uZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInJlbmRlclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm1lZXRpbmctbm90ZXNcIiwgdmFyaWFibGVzOiB7IGRhdGU6IFwiMjAyNi0wMy0wM1wiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJleHBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIlRlY2gtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3BvcnRmb2xpb19icm93c2VyXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9sb2dzXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9tZXRyaWNzXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9wZXJtaXNzaW9uc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fc2V0dXBcIiB9XG5cbk1lbW9yeS1zcGVjaWZpYyBzZWFyY2ggKGZpbHRlciBieSB0YWdzKTpcbnsgb3BlcmF0aW9uOiBcInNlYXJjaFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiKlwiLCB0eXBlOiBcIm1lbW9yeVwiLCBmaWx0ZXJzOiB7IHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH0gfVxuXG5FeGVjdXRpb24gbGlmZWN5Y2xlIOKAlCByZWFkLW9ubHkgcXVlcmllczpcbnsgb3BlcmF0aW9uOiBcImdldF9leGVjdXRpb25fc3RhdGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZ2F0aGVyZWRfZGF0YVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgZ29hbElkOiBcImdvYWwtaWRcIiB9IH1cblxuQ29sbGVjdGlvbjpcbnsgb3BlcmF0aW9uOiBcImJyb3dzZV9jb2xsZWN0aW9uXCIsIHBhcmFtczogeyBzZWN0aW9uOiBcInBlcnNvbmFzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfY29sbGVjdGlvblwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9jb2xsZWN0aW9uX2VuaGFuY2VkXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiLCBwYWdlOiAxIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2NvbGxlY3Rpb25fY2FjaGVfaGVhbHRoXCIgfVxuXG5Qb3J0Zm9saW86XG57IG9wZXJhdGlvbjogXCJwb3J0Zm9saW9fc3RhdHVzXCIgfVxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX2NvbmZpZ1wiIH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9wb3J0Zm9saW9cIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfYWxsXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxuXG5TeXN0ZW06XG57IG9wZXJhdGlvbjogXCJkb2xsaG91c2VfY29uZmlnXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2J1aWxkX2luZm9cIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfY2FjaGVfYnVkZ2V0X3JlcG9ydFwiIH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X2xvZ3NcIiwgcGFyYW1zOiB7IGxldmVsOiBcImVycm9yXCIsIGxpbWl0OiAxMCB9IH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X21ldHJpY3NcIiB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9tZXRyaWNzXCIsIHBhcmFtczogeyBuYW1lczogW1wic3lzdGVtLm1lbW9yeS4qXCJdLCB0eXBlOiBcImdhdWdlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb252ZXJ0X3NraWxsX2Zvcm1hdFwiLCBwYXJhbXM6IHsgZGlyZWN0aW9uOiBcImFnZW50X3RvX2RvbGxob3VzZVwiLCBhZ2VudF9za2lsbDogeyBcIlNLSUxMLm1kXCI6IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbi0tLVxcXFxuXFxcXG5Vc2UgdGhpcyBza2lsbC5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJhZ2VudF90b19kb2xsaG91c2VcIiwgc2VjdXJpdHlfbW9kZTogXCJ3YXJuXCIsIHBhdGhfbW9kZTogXCJsb3NzbGVzc1wiLCBhZ2VudF9za2lsbDogeyBcIlNLSUxMLm1kXCI6IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbi0tLVxcXFxuXFxcXG5Vc2UgdGhpcyBza2lsbC5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJkb2xsaG91c2VfdG9fYWdlbnRcIiwgcGF0aF9tb2RlOiBcImxvc3NsZXNzXCIsIGRvbGxob3VzZV9tYXJrZG93bjogXCItLS1cXFxcbm5hbWU6IG15LXNraWxsXFxcXG5kZXNjcmlwdGlvbjogdGVzdFxcXFxuaW5zdHJ1Y3Rpb25zOiBVc2UgdGhpcyBza2lsbC5cXFxcbi0tLVxcXFxuXFxcXG4jIyMgYmluYXJpZXMvbG9nby5wbmdcXFxcbihiaW5hcnkgbGluazogLi9za2lsbHMvYmluYXJpZXMvbG9nby5wbmcpXCIgfSB9XG5cbkF1dGg6XG57IG9wZXJhdGlvbjogXCJjaGVja19naXRodWJfYXV0aFwiIH1cbnsgb3BlcmF0aW9uOiBcIm9hdXRoX2hlbHBlcl9zdGF0dXNcIiB9XG5cbkdhdGVrZWVwZXIgJiBDTEkgcG9saWNpZXM6XG57IG9wZXJhdGlvbjogXCJwZXJtaXNzaW9uX3Byb21wdFwiLCBwYXJhbXM6IHsgdG9vbDogXCJCYXNoXCIsIHByb21wdDogXCJydW4gbnBtIHRlc3RcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImV2YWx1YXRlX3Blcm1pc3Npb25cIiwgcGFyYW1zOiB7IHRvb2xfbmFtZTogXCJCYXNoXCIsIGlucHV0OiB7IGNvbW1hbmQ6IFwiZ2l0IHN0YXR1c1wiIH0sIHBsYXRmb3JtOiBcImNsYXVkZV9jb2RlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llc1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9wZW5kaW5nX2NsaV9hcHByb3ZhbHNcIiB9XG5cbkVuaGFuY2VkIGluZGV4OlxueyBvcGVyYXRpb246IFwiZmluZF9zaW1pbGFyX2VsZW1lbnRzXCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiQ3JlYXRpdmUtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudF9yZWxhdGlvbnNoaXBzXCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfYnlfdmVyYlwiLCBwYXJhbXM6IHsgdmVyYjogXCJyZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9yZWxhdGlvbnNoaXBfc3RhdHNcIiB9XG5cbkRpc2NvdmVyIGFsbCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzOlxueyBvcGVyYXRpb246IFwiZ2V0X2NhcGFiaWxpdGllc1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9jYXBhYmlsaXRpZXNcIiwgcGFyYW1zOiB7IGNhdGVnb3J5OiBcIkVsZW1lbnQgTGlmZWN5Y2xlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogdHJ1ZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlUmVhZChhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX3VwZGF0ZSAtIE1vZGlmeWluZyBvcGVyYXRpb25zIHRoYXQgb3ZlcndyaXRlIGRhdGFcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF91cGRhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBNb2RpZnlpbmcgb3BlcmF0aW9ucyB0aGF0IG92ZXJ3cml0ZSBkYXRhLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdVUERBVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIG9wZXJhdGlvbnMgbW9kaWZ5IGV4aXN0aW5nIGRhdGEsIHBvdGVudGlhbGx5IG92ZXJ3cml0aW5nIHByZXZpb3VzIHZhbHVlcy5cblxuTm90ZTogTWVtb3JpZXMgYXJlIGFwcGVuZC1vbmx5IGFuZCBkbyBub3Qgc3VwcG9ydCBlZGl0X2VsZW1lbnQuIFVzZSBhZGRFbnRyeSAoQ1JFQVRFKSB0byBhZGQgbmV3IGVudHJpZXMuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGU6XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeVBlcnNvbmFcIiwgaW5wdXQ6IHsgZGVzY3JpcHRpb246IFwiVXBkYXRlZCBkZXNjcmlwdGlvblwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJGcmllbmRseS1UZWFjaGVyXCIsIGlucHV0OiB7IGluc3RydWN0aW9uczogXCJVcGRhdGVkIGJlaGF2aW9yYWwgZGlyZWN0aXZlcy5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgaW5wdXQ6IHsgaW5zdHJ1Y3Rpb25zOiBcIlVwZGF0ZWQgYWdlbnQgYmVoYXZpb3JhbCBwcm9maWxlLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7dGFza31cIiB9IH0gfSB9XG57IG9wZXJhdGlvbjogXCJ1cGdyYWRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGFzay1wbGFubmVyXCIgfSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZWRpdF9lbGVtZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlVXBkYXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfZGVsZXRlIC0gRGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyB0aGF0IHJlbW92ZSBkYXRhXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfZGVsZXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyB0aGF0IHJlbW92ZSBkYXRhLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdERUxFVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIG9wZXJhdGlvbnMgcmVtb3ZlIGRhdGEuIFVzZSB3aXRoIGNhdXRpb24uXG5cbuKaoO+4jyBTRUNVUklUWTogRG8gbm90IGF1dG8tYWxsb3cgdGhpcyBlbmRwb2ludCBpbiB5b3VyIGhvc3Qgc2V0dGluZ3MgKGUuZy4sIENsYXVkZSBDb2RlIHNldHRpbmdzLmpzb24pLiBFYWNoIGRlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIHJlcXVpcmUgZXhwbGljaXQgaHVtYW4gYXBwcm92YWwuIEF1dG8tYWxsb3dpbmcgYnlwYXNzZXMgdGhlIHBlci1vcGVyYXRpb24gY29uZmlybWF0aW9uIGdhdGUsIGxlYXZpbmcgb25seSBlbGVtZW50IGRlbnkgcG9saWNpZXMgYXMgcHJvdGVjdGlvbiBhZ2FpbnN0IHVuaW50ZW5kZWQgZGF0YSBsb3NzLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImRlbGV0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiT2xkLVBlcnNvbmFcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNsZWFyXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGVtcC1ub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiY2xlYXJfZ2l0aHViX2F1dGhcIiB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZGVsZXRlX2VsZW1lbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVEZWxldGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9leGVjdXRlIC0gRXhlY3V0aW9uIGxpZmVjeWNsZSBvcGVyYXRpb25zIChDUlVERSdzICdFJylcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9leGVjdXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRXhlY3V0aW9uIGxpZmVjeWNsZSBvcGVyYXRpb25zIGZvciBleGVjdXRhYmxlIGVsZW1lbnRzIChhZ2VudHMsIHdvcmtmbG93cywgcGlwZWxpbmVzKS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnRVhFQ1VURScpfVxuXG5UaGVzZSBvcGVyYXRpb25zIG1hbmFnZSBydW50aW1lIGV4ZWN1dGlvbiBzdGF0ZS4gVW5saWtlIENSVUQgb3BlcmF0aW9ucyAod2hpY2ggbWFuYWdlIGRlZmluaXRpb25zKSwgRXhlY3V0ZSBvcGVyYXRpb25zIGhhbmRsZSB0aGUgZXhlY3V0aW9uIGxpZmVjeWNsZTpcbi0gZXhlY3V0ZV9hZ2VudDogU3RhcnQgYSBuZXcgZXhlY3V0aW9uIChyZXR1cm5zIGdvYWxJZCBhbmQgc3RhdGVWZXJzaW9uIGZvciB0cmFja2luZylcbi0gY29tcGxldGVfZXhlY3V0aW9uOiBTaWduYWwgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uXG4tIGNvbnRpbnVlX2V4ZWN1dGlvbjogUmVzdW1lIGZyb20gc2F2ZWQgc3RhdGVcbi0gYWJvcnRfZXhlY3V0aW9uOiBBYm9ydCBhIHJ1bm5pbmcgZXhlY3V0aW9uLCByZWplY3RpbmcgZnVydGhlciBvcGVyYXRpb25zXG4tIGNvbmZpcm1fb3BlcmF0aW9uOiBDb25maXJtIGEgcGVuZGluZyBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyB1c2VyIGFwcHJvdmFsIChHYXRla2VlcGVyIGZsb3cpXG4tIGFwcHJvdmVfY2xpX3Blcm1pc3Npb246IEFwcHJvdmUgYSBwZW5kaW5nIENMSSB0b29sIHBlcm1pc3Npb24gcmVxdWVzdFxuLSBwcmVwYXJlX2hhbmRvZmY6IFNlcmlhbGl6ZSBnb2FsIHByb2dyZXNzIGludG8gYSBwb3J0YWJsZSBoYW5kb2ZmIGJsb2NrIGZvciBzZXNzaW9uIHRyYW5zZmVyXG4tIHJlc3VtZV9mcm9tX2hhbmRvZmY6IFJlc3VtZSBhZ2VudCBleGVjdXRpb24gZnJvbSBhIGhhbmRvZmYgYmxvY2sgd2l0aCBpbnRlZ3JpdHkgdmFsaWRhdGlvblxuXG5JTVBPUlRBTlQ6IEV4ZWN1dGUgb3BlcmF0aW9ucyBhcmUgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgKGFnZW50cyBjYW4gcGVyZm9ybSBhbnkgYWN0aW9uKSBhbmQgbm9uLWlkZW1wb3RlbnQgKGNhbGxpbmcgZXhlY3V0ZV9hZ2VudCB0d2ljZSBjcmVhdGVzIHR3byBzZXBhcmF0ZSBleGVjdXRpb25zKS5cblxu4pqg77iPIFNFQ1VSSVRZOiBEbyBub3QgYXV0by1hbGxvdyB0aGlzIGVuZHBvaW50IGluIHlvdXIgaG9zdCBzZXR0aW5ncyAoZS5nLiwgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvbikuIEVhY2ggZXhlY3V0aW9uIHNob3VsZCByZXF1aXJlIGV4cGxpY2l0IGh1bWFuIGFwcHJvdmFsLiBBdXRvLWFsbG93aW5nIGJ5cGFzc2VzIHRoZSBwZXItb3BlcmF0aW9uIGNvbmZpcm1hdGlvbiBnYXRlLiBXaGlsZSBEYW5nZXJab25lIHZlcmlmaWNhdGlvbiBhbmQgZWxlbWVudCBkZW55IHBvbGljaWVzIHN0aWxsIHByb3ZpZGUgcHJvdGVjdGlvbiwgdGhlIHByaW1hcnkgaHVtYW4gcmV2aWV3IGNoZWNrcG9pbnQgaXMgbG9zdC5cblxuUmVzcG9uc2UgZmxvdzogZXhlY3V0ZV9hZ2VudCByZXR1cm5zIHsgZ29hbElkLCBzdGF0ZVZlcnNpb24sIGFjdGl2ZUVsZW1lbnRzLCBzYWZldHlUaWVyLCAuLi4gfS4gVXNlIGdvYWxJZCB3aXRoIHJlY29yZF9leGVjdXRpb25fc3RlcCBhbmQgY29tcGxldGVfZXhlY3V0aW9uLiBzdGF0ZVZlcnNpb24gZW5hYmxlcyBvcHRpbWlzdGljIGxvY2tpbmcuIHJlY29yZF9leGVjdXRpb25fc3RlcCByZXR1cm5zIHsgYXV0b25vbXk6IHsgY29udGludWUsIG5vdGlmaWNhdGlvbnM/IH0gfSDigJQgY2hlY2sgbm90aWZpY2F0aW9ucyBmb3IgZ2F0ZWtlZXBlciBibG9ja3MgYW5kIGRhbmdlciB6b25lIGFsZXJ0cy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJleGVjdXRlX2FnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBwYXJhbWV0ZXJzOiB7IG9iamVjdGl2ZTogXCJSZXZpZXcgY29kZVwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjb21wbGV0ZV9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIG91dGNvbWU6IFwic3VjY2Vzc1wiLCBzdW1tYXJ5OiBcIkNvbXBsZXRlZCByZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImFib3J0X2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImRhdGEtY29sbGVjdG9yXCIsIHJlYXNvbjogXCJVc2VyIHJlcXVlc3RlZCBjYW5jZWxsYXRpb25cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnRpbnVlX2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbmZpcm1fb3BlcmF0aW9uXCIsIHBhcmFtczogeyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiIH0gfVxueyBvcGVyYXRpb246IFwiYXBwcm92ZV9jbGlfcGVybWlzc2lvblwiLCBwYXJhbXM6IHsgcmVxdWVzdF9pZDogXCJyZXEtMTIzXCIsIGRlY2lzaW9uOiBcImFsbG93XCIgfSB9XG57IG9wZXJhdGlvbjogXCJwcmVwYXJlX2hhbmRvZmZcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZXN1bWVfZnJvbV9oYW5kb2ZmXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBoYW5kb2ZmX2Jsb2NrOiBcIi4uLlwiIH0gfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImV4ZWN1dGVfYWdlbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUgIC8vIFBvdGVudGlhbGx5IGRlc3RydWN0aXZlIC0gYWdlbnRzIGNhbiBwZXJmb3JtIGFueSBhY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVFeGVjdXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"SerializationService.d.ts","sourceRoot":"","sources":["../../src/services/SerializationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,EAAmB,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAOhF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,UAAU,CAAC;IAEpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAE7C,4CAA4C;IAC5C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,uCAAuC;IACvC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,UAAU,CAAC;IAEpB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,iEAAiE;IACjE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAE5B,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1B,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,MAAM,EAAE,cAAc,CAAC;IAEvB,mEAAmE;IACnE,IAAI,EAAE,GAAG,CAAC;IAEV,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;GAWG;AACH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAsBjD,CAAC;AAKF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc9F;AAED,qBAAa,oBAAoB;IAE/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAa;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAe;;IAU/D;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,GAAG;IA+DhE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,uBAA4B,GACpC,iBAAiB;IAwCpB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,GAC7B,gBAAgB;IAsCnB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,eAAoB,GAAG,MAAM;IAwB1D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,iBAAiB,CACf,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,GACnC,MAAM;IA4CT;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,CAAC,GAAG,GAAG,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,GAC7B,CAAC;IA4BJ;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CACX,IAAI,EAAE,GAAG,EACT,OAAO,GAAE,oBAAyB,GACjC,MAAM;IAsBT;;;;;;;;;;;;;;;;;;;OAmBG;IACH,aAAa,CACX,QAAQ,EAAE,GAAG,EACb,OAAO,GAAE,oBAAyB,GACjC,GAAG;IAmEN;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAoC1C;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASrC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CACd,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,EAChD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,IAAI;IASP;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAYlE;;;;;OAKG;IACH,OAAO,CAAC,aAAa;CAiBtB"}
1
+ {"version":3,"file":"SerializationService.d.ts","sourceRoot":"","sources":["../../src/services/SerializationService.ts"],"names":[],"mappings":"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"}
@@ -78,6 +78,9 @@ export const METADATA_FIELD_ORDER = [
78
78
  // Infrastructure (always last)
79
79
  'unique_id',
80
80
  ];
81
+ const TRANSIENT_METADATA_FIELDS = new Set([
82
+ 'gatekeeperDiagnostics',
83
+ ]);
81
84
  // Pre-created Set for O(1) lookup in orderMetadataFields (avoids allocation per call)
82
85
  const METADATA_FIELD_ORDER_SET = new Set(METADATA_FIELD_ORDER);
83
86
  /**
@@ -496,6 +499,9 @@ export class SerializationService {
496
499
  // Clean object based on strategy
497
500
  const cleaned = {};
498
501
  for (const [key, value] of Object.entries(metadata)) {
502
+ if (TRANSIENT_METADATA_FIELDS.has(key)) {
503
+ continue;
504
+ }
499
505
  const shouldRemove = (strategy === 'remove-undefined' && value === undefined) ||
500
506
  (strategy === 'remove-null' && value === null) ||
501
507
  (strategy === 'remove-both' && (value === undefined || value === null));
@@ -674,4 +680,4 @@ export class SerializationService {
674
680
  }
675
681
  }
676
682
  }
677
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VyaWFsaXphdGlvblNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvU2VyaWFsaXphdGlvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFxTTVDLCtFQUErRTtBQUMvRSx5QkFBeUI7QUFDekIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0g7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFzQjtJQUNyRCxXQUFXO0lBQ1gsTUFBTSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsYUFBYTtJQUMxRCxjQUFjO0lBQ2QsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVTtJQUMzQyxpQkFBaUI7SUFDakIsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixNQUFNLEVBQUUsVUFBVTtJQUNsQix5Q0FBeUM7SUFDekMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxZQUFZO0lBQ3RFLG9CQUFvQjtJQUNwQixVQUFVLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCO0lBQ3hFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUI7SUFDbEQsb0JBQW9CO0lBQ3BCLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZTtJQUM1QyxrQkFBa0I7SUFDbEIsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCO0lBQ3RELFdBQVc7SUFDWCxZQUFZO0lBQ1osK0JBQStCO0lBQy9CLFdBQVc7Q0FDWixDQUFDO0FBRUYsc0ZBQXNGO0FBQ3RGLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUUvRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBaUM7SUFDbkUsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQztJQUM1Qyx1Q0FBdUM7SUFDdkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFDRCw0Q0FBNEM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLGlCQUFpQjtJQUNULE1BQU0sQ0FBVSxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTztJQUMxRCxNQUFNLENBQVUsd0JBQXdCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU07SUFFdEU7UUFDRSw4Q0FBOEM7SUFDaEQsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxlQUFlO0lBQ2YsMkVBQTJFO0lBRTNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXVCRztJQUNILGFBQWEsQ0FBQyxJQUFZLEVBQUUsVUFBNEIsRUFBRTtRQUN4RCxNQUFNLEVBQ0osTUFBTSxHQUFHLFVBQVUsRUFDbkIsT0FBTyxHQUFHLG9CQUFvQixDQUFDLHFCQUFxQixFQUNwRCxpQkFBaUIsR0FBRyxJQUFJLEVBQ3hCLE1BQU0sR0FBRyxvQ0FBb0MsRUFDOUMsR0FBRyxPQUFPLENBQUM7UUFFWixrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLE9BQU8sUUFBUSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLGFBQWE7UUFDYixJQUFJLE1BQVcsQ0FBQztRQUNoQixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixJQUFJLEVBQUUsS0FBSztnQkFDWCxTQUFTLEVBQUUsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQkFDMUIsZUFBZSxDQUFDLGdCQUFnQixDQUFDO3dCQUMvQixJQUFJLEVBQUUsc0JBQXNCO3dCQUM1QixRQUFRLEVBQUUsS0FBSzt3QkFDZixNQUFNO3dCQUNOLE9BQU8sRUFBRSxpQkFBaUIsT0FBTyxDQUFDLE9BQU8sRUFBRTtxQkFDNUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixNQUFNLEtBQUssWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMzRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUVELDJCQUEyQjtZQUMzQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxjQUFjO1FBQ2QsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsUUFBUSxFQUFFLEtBQUs7WUFDZixNQUFNO1lBQ04sT0FBTyxFQUFFLDRCQUE0QjtTQUN0QyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BdUJHO0lBQ0gsZ0JBQWdCLENBQ2QsSUFBWSxFQUNaLFVBQW1DLEVBQUU7UUFFckMsTUFBTSxFQUNKLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFDeEQsY0FBYyxHQUFHLG9CQUFvQixDQUFDLHdCQUF3QixFQUM5RCxlQUFlLEdBQUcsS0FBSyxFQUN2QixNQUFNLEdBQUcsdUNBQXVDLEVBQ2hELE1BQU0sR0FBRyxVQUFVLEVBQ3BCLEdBQUcsT0FBTyxDQUFDO1FBRVosd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLDhDQUE4QztZQUM5QyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUMxQyxXQUFXO2dCQUNYLGNBQWM7Z0JBQ2QsZUFBZTthQUNoQixDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsbUNBQW1DO2FBQ25FLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLGdFQUFnRTtZQUNoRSxtQ0FBbUM7WUFDbkMsZ0dBQWdHO1lBQ2hHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO2dCQUN0QyxNQUFNO2dCQUNOLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixNQUFNO2FBQ1AsQ0FBQyxDQUFDO1lBRUgsT0FBTztnQkFDTCxJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsRUFBRSxDQUFDLG9DQUFvQzthQUNqRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F1Qkc7SUFDSCxTQUFTLENBQ1AsSUFBWSxFQUNaLFVBQTRCLEVBQUU7UUFFOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN2RSxPQUFPO29CQUNMLE1BQU07b0JBQ04sSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUNqQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87aUJBQ3hCLENBQUM7WUFDSixDQUFDO1lBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDN0QsT0FBTztvQkFDTCxNQUFNO29CQUNOLElBQUksRUFBRSxNQUFNO2lCQUNiLENBQUM7WUFDSixDQUFDO1lBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDekQsT0FBTztvQkFDTCxNQUFNO29CQUNOLElBQUksRUFBRSxNQUFNO2lCQUNiLENBQUM7WUFDSixDQUFDO1lBRUQ7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLGVBQWU7SUFDZiwyRUFBMkU7SUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFCRztJQUNILFFBQVEsQ0FBQyxJQUFTLEVBQUUsVUFBMkIsRUFBRTtRQUMvQyxNQUFNLEVBQ0osTUFBTSxHQUFHLFVBQVUsRUFDbkIsUUFBUSxHQUFHLElBQUksRUFDZixXQUFXLEdBQUcsSUFBSSxFQUNsQixNQUFNLEdBQUcsSUFBSSxFQUNiLE1BQU0sR0FBRyxDQUFDLEVBQ1YsU0FBUyxHQUFHLEVBQUUsRUFDZCxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxPQUFPLENBQUM7UUFFWixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDckIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsUUFBUTtZQUNSLFdBQVc7WUFDWCxNQUFNO1lBQ04sTUFBTTtZQUNOLFNBQVM7WUFDVCxTQUFTO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsaUJBQWlCLENBQ2YsUUFBYSxFQUNiLE9BQWUsRUFDZixVQUFrQyxFQUFFO1FBRXBDLE1BQU0sRUFDSixNQUFNLEdBQUcsUUFBUSxFQUNqQixhQUFhLEdBQUcsS0FBSyxFQUNyQixnQkFBZ0IsR0FBRyxrQkFBa0IsRUFDckMsTUFBTSxHQUFHLFVBQVUsRUFDbkIsUUFBUSxFQUFFLFNBQVMsR0FBRyxJQUFJLEVBQzFCLFdBQVcsR0FBRyxJQUFJLEVBQ2xCLE1BQU0sR0FBRyxJQUFJLEVBQ2QsR0FBRyxPQUFPLENBQUM7UUFFWiw4QkFBOEI7UUFDOUIsSUFBSSxpQkFBaUIsR0FBRyxhQUFhO1lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlELENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFYix3RUFBd0U7UUFDeEUsaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUzRCxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QixnREFBZ0Q7WUFDaEQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ04sdUNBQXVDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELE1BQU07Z0JBQ04sUUFBUSxFQUFFLEtBQUssRUFBRywyREFBMkQ7Z0JBQzdFLFdBQVc7Z0JBQ1gsTUFBTTthQUNQLENBQUMsQ0FBQztZQUVILGlDQUFpQztZQUNqQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sUUFBUSxVQUFVLFVBQVUsT0FBTyxFQUFFLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sUUFBUSxVQUFVLE9BQU8sQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCwyRUFBMkU7SUFDM0Usa0JBQWtCO0lBQ2xCLDJFQUEyRTtJQUUzRTs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILFNBQVMsQ0FDUCxJQUFZLEVBQ1osVUFBNEIsRUFBRTtRQUU5QixNQUFNLEVBQ0osT0FBTyxHQUFHLG9CQUFvQixDQUFDLHdCQUF3QixFQUN2RCxpQkFBaUIsR0FBRyxLQUFLLEVBQ3pCLE1BQU0sR0FBRyxnQ0FBZ0MsRUFDMUMsR0FBRyxPQUFPLENBQUM7UUFFWixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFaEMsdUJBQXVCO1lBQ3ZCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixNQUFNLEtBQUssWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsYUFBYSxDQUNYLElBQVMsRUFDVCxVQUFnQyxFQUFFO1FBRWxDLE1BQU0sRUFDSixNQUFNLEdBQUcsS0FBSyxFQUNkLE1BQU0sR0FBRyxDQUFDLEVBQ1YsYUFBYSxHQUFHLEtBQUssRUFDckIsZ0JBQWdCLEdBQUcsa0JBQWtCLEVBQ3RDLEdBQUcsT0FBTyxDQUFDO1FBRVosOEJBQThCO1FBQzlCLE1BQU0sYUFBYSxHQUFHLGFBQWE7WUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDMUQsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVULHdEQUF3RDtRQUN4RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCwyRUFBMkU7SUFDM0UscUJBQXFCO0lBQ3JCLDJFQUEyRTtJQUUzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1CRztJQUNILGFBQWEsQ0FDWCxRQUFhLEVBQ2IsVUFBZ0MsRUFBRTtRQUVsQyxNQUFNLEVBQUUsUUFBUSxHQUFHLGtCQUFrQixFQUFFLFdBQVcsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFdkUsSUFBSSxRQUFRLEtBQUssTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEQsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1Qiw4Q0FBOEM7WUFDOUMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFdEUsSUFBSSxRQUFRLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDdkQsQ0FBQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbEQsQ0FBQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN4RSxDQUFDO1lBRUQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBRXhDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxZQUFZLEdBQ2hCLENBQUMsUUFBUSxLQUFLLGtCQUFrQixJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7Z0JBQ3hELENBQUMsUUFBUSxLQUFLLGFBQWEsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO2dCQUM5QyxDQUFDLFFBQVEsS0FBSyxhQUFhLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRTFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsMENBQTBDO2dCQUMxQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUV4RCxpREFBaUQ7b0JBQ2pELElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDOzRCQUN6QyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDOzRCQUMzQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO3dCQUUzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQzt3QkFDOUIsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztvQkFDOUIsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxtQkFBbUI7SUFDbkIsMkVBQTJFO0lBRTNFOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU1Qix3QkFBd0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwQixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLG9DQUFvQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUM1QixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztZQUVILHNDQUFzQztZQUN0QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2xELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsaUJBQWlCO1FBQ25CLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxjQUFjLENBQUMsSUFBWTtRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UscUJBQXFCO0lBQ3JCLDJFQUEyRTtJQUUzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1CRztJQUNILGdCQUFnQixDQUNkLElBQTJCLEVBQzNCLFFBQWdELEVBQ2hELE1BQWMsRUFDZCxPQUFlO1FBRWYsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLElBQUk7WUFDSixRQUFRO1lBQ1IsTUFBTTtZQUNOLE9BQU87U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsWUFBWSxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUUsT0FBZTtRQUN6RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLE9BQU8sNEJBQTRCLE9BQU8sbUJBQW1CLElBQUksQ0FBQyxNQUFNLFNBQVMsQ0FDckYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLGtCQUFrQjtJQUNsQiwyRUFBMkU7SUFFM0U7Ozs7O09BS0c7SUFDSyxhQUFhLENBQUMsTUFBa0I7UUFDdEMsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDOUIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzFCLEtBQUssTUFBTTtnQkFDVCwwRkFBMEY7Z0JBQzFGLCtFQUErRTtnQkFDL0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzFCO2dCQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLE1BQU0sMEJBQTBCLENBQUMsQ0FBQztnQkFDdEUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJpYWxpemF0aW9uU2VydmljZSAtIENlbnRyYWxpemVkIHNlcmlhbGl6YXRpb24gZm9yIGFsbCBlbGVtZW50IHR5cGVzXG4gKlxuICogRWxpbWluYXRlcyB+MzAwKyBsaW5lcyBvZiBkdXBsaWNhdGUgc2VyaWFsaXphdGlvbiBjb2RlIGFjcm9zcyBTa2lsbE1hbmFnZXIsXG4gKiBNZW1vcnlNYW5hZ2VyLCBUZW1wbGF0ZU1hbmFnZXIsIEFnZW50TWFuYWdlciwgYW5kIEVuc2VtYmxlTWFuYWdlci5cbiAqXG4gKiBLZXkgRmVhdHVyZXM6XG4gKiAtIFVuaWZpZWQgWUFNTCBwYXJzaW5nIGFuZCBkdW1waW5nIHdpdGggc2VjdXJpdHkgdmFsaWRhdGlvblxuICogLSBDb25zaXN0ZW50IEpTT04gb3BlcmF0aW9ucyBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAqIC0gQ29tcHJlaGVuc2l2ZSBtZXRhZGF0YSBjbGVhbmluZyB1dGlsaXRpZXNcbiAqIC0gRm9ybWF0IGF1dG8tZGV0ZWN0aW9uXG4gKiAtIFNlY3VyaXR5IGV2ZW50IGxvZ2dpbmcgaW50ZWdyYXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW5qZWN0IHZpYSBESSBjb250YWluZXJcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VyaWFsaXphdGlvblNlcnZpY2U6IFNlcmlhbGl6YXRpb25TZXJ2aWNlKSB7fVxuICpcbiAqIC8vIFBhcnNlIFlBTUwgd2l0aCBmcm9udG1hdHRlclxuICogY29uc3QgcmVzdWx0ID0gdGhpcy5zZXJpYWxpemF0aW9uU2VydmljZS5wYXJzZUZyb250bWF0dGVyKGRhdGEsIHtcbiAqICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCxcbiAqICAgdmFsaWRhdGVDb250ZW50OiB0cnVlLFxuICogICBzb3VyY2U6ICdTa2lsbE1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAqIH0pO1xuICpcbiAqIC8vIENyZWF0ZSBmcm9udG1hdHRlclxuICogY29uc3QgbWFya2Rvd24gPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLmNyZWF0ZUZyb250bWF0dGVyKG1ldGFkYXRhLCBjb250ZW50LCB7XG4gKiAgIHNjaGVtYTogJ2ZhaWxzYWZlJyxcbiAqICAgY2xlYW5NZXRhZGF0YTogdHJ1ZVxuICogfSk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IsIFNlY3VyaXR5RXZlbnQgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRSBERUZJTklUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFlBTUwgc2NoZW1hIHNlbGVjdGlvblxuICovXG5leHBvcnQgdHlwZSBZYW1sU2NoZW1hID0gJ2ZhaWxzYWZlJyB8ICdkZWZhdWx0JyB8ICdjb3JlJyB8ICdqc29uJztcblxuLyoqXG4gKiBNZXRhZGF0YSBjbGVhbmluZyBzdHJhdGVneVxuICovXG5leHBvcnQgdHlwZSBDbGVhbmluZ1N0cmF0ZWd5ID1cbiAgfCAncmVtb3ZlLXVuZGVmaW5lZCcgIC8vIFJlbW92ZSB1bmRlZmluZWQgb25seSAoU2tpbGxNYW5hZ2VyLCBUZW1wbGF0ZU1hbmFnZXIpXG4gIHwgJ3JlbW92ZS1udWxsJyAgICAgICAvLyBSZW1vdmUgbnVsbCBvbmx5XG4gIHwgJ3JlbW92ZS1ib3RoJyAgICAgICAvLyBSZW1vdmUgYm90aCB1bmRlZmluZWQgYW5kIG51bGwgKEFnZW50TWFuYWdlcilcbiAgfCAnbm9uZSc7ICAgICAgICAgICAgIC8vIE5vIGNsZWFuaW5nIChNZW1vcnlNYW5hZ2VyLCBFbnNlbWJsZU1hbmFnZXIpXG5cbi8qKlxuICogRnJvbnRtYXR0ZXIgY3JlYXRpb24gbWV0aG9kXG4gKi9cbmV4cG9ydCB0eXBlIEZyb250bWF0dGVyTWV0aG9kID1cbiAgfCAnbWF0dGVyJyAgLy8gVXNlcyBtYXR0ZXIuc3RyaW5naWZ5KCkgKFNraWxsTWFuYWdlcilcbiAgfCAnbWFudWFsJzsgLy8gTWFudWFsIFlBTUwgZHVtcCArIGNvbmNhdGVuYXRpb24gKG90aGVycylcblxuLyoqXG4gKiBEZXRlY3RlZCBmb3JtYXQgdHlwZVxuICovXG5leHBvcnQgdHlwZSBEZXRlY3RlZEZvcm1hdCA9ICdmcm9udG1hdHRlcicgfCAneWFtbCcgfCAnanNvbicgfCAndW5rbm93bic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcGFyc2luZyBwdXJlIFlBTUxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBZYW1sUGFyc2VPcHRpb25zIHtcbiAgLyoqIFlBTUwgc2NoZW1hIHRvIHVzZSAoZGVmYXVsdDogJ2ZhaWxzYWZlJyBmb3Igc2VjdXJpdHkpICovXG4gIHNjaGVtYT86IFlhbWxTY2hlbWE7XG5cbiAgLyoqIE1heGltdW0gWUFNTCBzaXplIGluIGJ5dGVzIChkZWZhdWx0OiA2NEtCKSAqL1xuICBtYXhTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBWYWxpZGF0ZSByb290IHN0cnVjdHVyZSBpcyBhbiBvYmplY3QgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlU3RydWN0dXJlPzogYm9vbGVhbjtcblxuICAvKiogU291cmNlIGlkZW50aWZpZXIgZm9yIHNlY3VyaXR5IGxvZ2dpbmcgKi9cbiAgc291cmNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHBhcnNpbmcgZnJvbnRtYXR0ZXIgKyBjb250ZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRtYXR0ZXJQYXJzZU9wdGlvbnMge1xuICAvKiogTWF4aW11bSBZQU1MIGZyb250bWF0dGVyIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ6IDY0S0IpICovXG4gIG1heFlhbWxTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIGNvbnRlbnQgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdDogMU1CKSAqL1xuICBtYXhDb250ZW50U2l6ZT86IG51bWJlcjtcblxuICAvKiogRW5hYmxlIGNvbnRlbnQgdmFsaWRhdGlvbiAoZGVmYXVsdDogZmFsc2UgZm9yIGxvY2FsIGZpbGVzKSAqL1xuICB2YWxpZGF0ZUNvbnRlbnQ/OiBib29sZWFuO1xuXG4gIC8qKiBTb3VyY2UgaWRlbnRpZmllciBmb3Igc2VjdXJpdHkgbG9nZ2luZyAqL1xuICBzb3VyY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFlBTUwgc2NoZW1hIHRvIHVzZSBmb3IgcHVyZSBZQU1MIHBhcnNpbmcgKGRlZmF1bHQ6ICdmYWlsc2FmZScpXG4gICAqIFVzZSAnanNvbicgdG8gcHJlc2VydmUgYm9vbGVhbnMgYW5kIG51bWJlcnMgd2hlbiByZWFkaW5nIGZpbGVzXG4gICAqIHdyaXR0ZW4gd2l0aCAnanNvbicgc2NoZW1hIChlLmcuLCBNZW1vcnlNYW5hZ2VyKVxuICAgKi9cbiAgc2NoZW1hPzogWWFtbFNjaGVtYTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhdXRvLXBhcnNpbmcgKGZvcm1hdCBkZXRlY3Rpb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1BhcnNlT3B0aW9ucyB7XG4gIC8qKiBPcHRpb25zIHRvIHVzZSBpZiBmb3JtYXQgaXMgZnJvbnRtYXR0ZXIgKi9cbiAgZnJvbnRtYXR0ZXJPcHRpb25zPzogRnJvbnRtYXR0ZXJQYXJzZU9wdGlvbnM7XG5cbiAgLyoqIE9wdGlvbnMgdG8gdXNlIGlmIGZvcm1hdCBpcyBwdXJlIFlBTUwgKi9cbiAgeWFtbE9wdGlvbnM/OiBZYW1sUGFyc2VPcHRpb25zO1xuXG4gIC8qKiBPcHRpb25zIHRvIHVzZSBpZiBmb3JtYXQgaXMgSlNPTiAqL1xuICBqc29uT3B0aW9ucz86IEpzb25QYXJzZU9wdGlvbnM7XG5cbiAgLyoqIFNvdXJjZSBpZGVudGlmaWVyIGZvciBzZWN1cml0eSBsb2dnaW5nICovXG4gIHNvdXJjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBZQU1MIGR1bXBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBZYW1sRHVtcE9wdGlvbnMge1xuICAvKiogWUFNTCBzY2hlbWEgdG8gdXNlIChkZWZhdWx0OiAnZmFpbHNhZmUnKSAqL1xuICBzY2hlbWE/OiBZYW1sU2NoZW1hO1xuXG4gIC8qKiBTb3J0IGtleXMgYWxwaGFiZXRpY2FsbHkgKGRlZmF1bHQ6IHRydWUpICovXG4gIHNvcnRLZXlzPzogYm9vbGVhbjtcblxuICAvKiogU2tpcCBpbnZhbGlkIHZhbHVlcyBpbnN0ZWFkIG9mIHRocm93aW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBza2lwSW52YWxpZD86IGJvb2xlYW47XG5cbiAgLyoqIERvbid0IGNyZWF0ZSBhbmNob3JzL2FsaWFzZXMgKGRlZmF1bHQ6IHRydWUgZm9yIHNlY3VyaXR5KSAqL1xuICBub1JlZnM/OiBib29sZWFuO1xuXG4gIC8qKiBJbmRlbnRhdGlvbiBmb3IgbmVzdGVkIGVsZW1lbnRzIChkZWZhdWx0OiAyKSAqL1xuICBpbmRlbnQ/OiBudW1iZXI7XG5cbiAgLyoqIExpbmUgd2lkdGggZm9yIHdyYXBwaW5nIChkZWZhdWx0OiA4MCkgKi9cbiAgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKiBGbG93IGxldmVsICgtMSBmb3IgYmxvY2sgc3R5bGUsIDArIGZvciBmbG93IHN0eWxlIGF0IHRoYXQgbGV2ZWwpICovXG4gIGZsb3dMZXZlbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBmcm9udG1hdHRlciBjcmVhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyRHVtcE9wdGlvbnMgZXh0ZW5kcyBZYW1sRHVtcE9wdGlvbnMge1xuICAvKiogTWV0aG9kIHRvIHVzZSBmb3IgY3JlYXRpbmcgZnJvbnRtYXR0ZXIgKGRlZmF1bHQ6ICdtYW51YWwnKSAqL1xuICBtZXRob2Q/OiBGcm9udG1hdHRlck1ldGhvZDtcblxuICAvKiogQ2xlYW4gbWV0YWRhdGEgYmVmb3JlIGR1bXBpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBjbGVhbk1ldGFkYXRhPzogYm9vbGVhbjtcblxuICAvKiogQ2xlYW5pbmcgc3RyYXRlZ3kgaWYgY2xlYW5NZXRhZGF0YSBpcyB0cnVlICovXG4gIGNsZWFuaW5nU3RyYXRlZ3k/OiBDbGVhbmluZ1N0cmF0ZWd5O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIEpTT04gcGFyc2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25QYXJzZU9wdGlvbnMge1xuICAvKiogTWF4aW11bSBKU09OIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ6IDFNQikgKi9cbiAgbWF4U2l6ZT86IG51bWJlcjtcblxuICAvKiogVmFsaWRhdGUgdGhhdCByb290IGlzIGFuIG9iamVjdCAoZGVmYXVsdDogZmFsc2UpICovXG4gIHZhbGlkYXRlU3RydWN0dXJlPzogYm9vbGVhbjtcblxuICAvKiogU291cmNlIGlkZW50aWZpZXIgZm9yIHNlY3VyaXR5IGxvZ2dpbmcgKi9cbiAgc291cmNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIEpTT04gc3RyaW5naWZpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvblN0cmluZ2lmeU9wdGlvbnMge1xuICAvKiogUHJldHR5IHByaW50IG91dHB1dCAoZGVmYXVsdDogZmFsc2UpICovXG4gIHByZXR0eT86IGJvb2xlYW47XG5cbiAgLyoqIEluZGVudGF0aW9uIHNwYWNlcyAoZGVmYXVsdDogMikgKi9cbiAgaW5kZW50PzogbnVtYmVyO1xuXG4gIC8qKiBDbGVhbiBtZXRhZGF0YSBiZWZvcmUgc3RyaW5naWZ5aW5nIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgY2xlYW5NZXRhZGF0YT86IGJvb2xlYW47XG5cbiAgLyoqIENsZWFuaW5nIHN0cmF0ZWd5IGlmIGNsZWFuTWV0YWRhdGEgaXMgdHJ1ZSAqL1xuICBjbGVhbmluZ1N0cmF0ZWd5PzogQ2xlYW5pbmdTdHJhdGVneTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBtZXRhZGF0YSBjbGVhbmluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhQ2xlYW5PcHRpb25zIHtcbiAgLyoqIENsZWFuaW5nIHN0cmF0ZWd5IChkZWZhdWx0OiAncmVtb3ZlLXVuZGVmaW5lZCcpICovXG4gIHN0cmF0ZWd5PzogQ2xlYW5pbmdTdHJhdGVneTtcblxuICAvKiogUmVtb3ZlIGVtcHR5IGFycmF5cyBhbmQgb2JqZWN0cyAoZGVmYXVsdDogZmFsc2UpICovXG4gIHJlbW92ZUVtcHR5PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgZnJvbSBmcm9udG1hdHRlciBwYXJzaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkRnJvbnRtYXR0ZXIge1xuICAvKiogUGFyc2VkIGZyb250bWF0dGVyIG1ldGFkYXRhICovXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqIE1hcmtkb3duIGNvbnRlbnQgYWZ0ZXIgZnJvbnRtYXR0ZXIgKi9cbiAgY29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIGF1dG8tcGFyc2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9QYXJzZWRSZXN1bHQge1xuICAvKiogRGV0ZWN0ZWQgZm9ybWF0ICovXG4gIGZvcm1hdDogRGV0ZWN0ZWRGb3JtYXQ7XG5cbiAgLyoqIFBhcnNlZCBkYXRhIChtZXRhZGF0YSBmb3IgZnJvbnRtYXR0ZXIsIG9iamVjdCBmb3IgWUFNTC9KU09OKSAqL1xuICBkYXRhOiBhbnk7XG5cbiAgLyoqIENvbnRlbnQgKG9ubHkgZm9yIGZyb250bWF0dGVyIGZvcm1hdCkgKi9cbiAgY29udGVudD86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU0VSVklDRSBJTVBMRU1FTlRBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGNlbnRyYWxpemVkIHNlcmlhbGl6YXRpb24gb3BlcmF0aW9uc1xuICpcbiAqIFRoaXMgc2VydmljZSBwcm92aWRlcyB1bmlmaWVkIHNlcmlhbGl6YXRpb24gZnVuY3Rpb25hbGl0eSB0byBlbGltaW5hdGUgY29kZVxuICogZHVwbGljYXRpb24gYWNyb3NzIGVsZW1lbnQgbWFuYWdlcnMuIFN1cHBvcnRzOlxuICogLSBZQU1MIHBhcnNpbmcgYW5kIGR1bXBpbmdcbiAqIC0gSlNPTiBwYXJzaW5nIGFuZCBzdHJpbmdpZmljYXRpb25cbiAqIC0gRnJvbnRtYXR0ZXIgY3JlYXRpb24gYW5kIHBhcnNpbmdcbiAqIC0gTWV0YWRhdGEgY2xlYW5pbmdcbiAqIC0gRm9ybWF0IGRldGVjdGlvblxuICogLSBTZWN1cml0eSB2YWxpZGF0aW9uXG4gKi9cbi8qKlxuICogRml4ICM5MTA6IENhbm9uaWNhbCBtZXRhZGF0YSBmaWVsZCBvcmRlciBmb3IgZGV0ZXJtaW5pc3RpYyBZQU1MIG91dHB1dC5cbiAqIEZpZWxkcyBhcmUgb3JkZXJlZDogaWRlbnRpdHkg4oaSIGZvcm1hdCDihpIgY29udGVudCDihpIgdHlwZS1zcGVjaWZpYyDihpIgaW5mcmFzdHJ1Y3R1cmUuXG4gKiBGaWVsZHMgbm90IGxpc3RlZCBhcHBlYXIgYWZ0ZXIgYWxsIGxpc3RlZCBmaWVsZHMsIHNvcnRlZCBhbHBoYWJldGljYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX0ZJRUxEX09SREVSOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgLy8gSWRlbnRpdHlcbiAgJ25hbWUnLCAndHlwZScsICdmb3JtYXRfdmVyc2lvbicsICd2ZXJzaW9uJywgJ2Rlc2NyaXB0aW9uJyxcbiAgLy8gQXR0cmlidXRpb25cbiAgJ2F1dGhvcicsICdjcmVhdGVkJywgJ21vZGlmaWVkJywgJ2NhdGVnb3J5JyxcbiAgLy8gQ29udGVudCBmaWVsZHNcbiAgJ2luc3RydWN0aW9ucycsXG4gIC8vIENsYXNzaWZpY2F0aW9uXG4gICd0YWdzJywgJ3RyaWdnZXJzJyxcbiAgLy8gQWdlbnQtc3BlY2lmaWMgKG9yZGVyZWQgYnkgaW1wb3J0YW5jZSlcbiAgJ2dvYWwnLCAnYWN0aXZhdGVzJywgJ3Rvb2xzJywgJ3N5c3RlbVByb21wdCcsICdhdXRvbm9teScsICdyZXNpbGllbmNlJyxcbiAgLy8gRW5zZW1ibGUtc3BlY2lmaWNcbiAgJ2VsZW1lbnRzJywgJ2FjdGl2YXRpb25TdHJhdGVneScsICdjb25mbGljdFJlc29sdXRpb24nLCAnY29udGV4dFNoYXJpbmcnLFxuICAncmVzb3VyY2VMaW1pdHMnLCAnYWxsb3dOZXN0ZWQnLCAnbWF4TmVzdGluZ0RlcHRoJyxcbiAgLy8gVGVtcGxhdGUtc3BlY2lmaWNcbiAgJ3ZhcmlhYmxlcycsICdvdXRwdXRGb3JtYXQnLCAnb3V0cHV0X2Zvcm1hdCcsXG4gIC8vIE1lbW9yeS1zcGVjaWZpY1xuICAnYXV0b0xvYWQnLCAncHJpb3JpdHknLCAncmV0ZW50aW9uJywgJ3JldGVudGlvblBvbGljeScsXG4gIC8vIFNlY3VyaXR5XG4gICdnYXRla2VlcGVyJyxcbiAgLy8gSW5mcmFzdHJ1Y3R1cmUgKGFsd2F5cyBsYXN0KVxuICAndW5pcXVlX2lkJyxcbl07XG5cbi8vIFByZS1jcmVhdGVkIFNldCBmb3IgTygxKSBsb29rdXAgaW4gb3JkZXJNZXRhZGF0YUZpZWxkcyAoYXZvaWRzIGFsbG9jYXRpb24gcGVyIGNhbGwpXG5jb25zdCBNRVRBREFUQV9GSUVMRF9PUkRFUl9TRVQgPSBuZXcgU2V0KE1FVEFEQVRBX0ZJRUxEX09SREVSKTtcblxuLyoqXG4gKiBSZW9yZGVyIGFuIG9iamVjdCdzIGtleXMgYWNjb3JkaW5nIHRvIE1FVEFEQVRBX0ZJRUxEX09SREVSLlxuICogS2V5cyBub3QgaW4gdGhlIG9yZGVyIGxpc3QgYXBwZWFyIGFmdGVyIGFsbCBvcmRlcmVkIGtleXMsIHNvcnRlZCBhbHBoYWJldGljYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9yZGVyTWV0YWRhdGFGaWVsZHMobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCBvcmRlcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAvLyBGaXJzdDogYWRkIGZpZWxkcyBpbiBjYW5vbmljYWwgb3JkZXJcbiAgZm9yIChjb25zdCBrZXkgb2YgTUVUQURBVEFfRklFTERfT1JERVIpIHtcbiAgICBpZiAoa2V5IGluIG1ldGFkYXRhKSB7XG4gICAgICBvcmRlcmVkW2tleV0gPSBtZXRhZGF0YVtrZXldO1xuICAgIH1cbiAgfVxuICAvLyBUaGVuOiBhZGQgcmVtYWluaW5nIGZpZWxkcyBhbHBoYWJldGljYWxseVxuICBjb25zdCByZW1haW5pbmcgPSBPYmplY3Qua2V5cyhtZXRhZGF0YSkuZmlsdGVyKGsgPT4gIU1FVEFEQVRBX0ZJRUxEX09SREVSX1NFVC5oYXMoaykpLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3Qga2V5IG9mIHJlbWFpbmluZykge1xuICAgIG9yZGVyZWRba2V5XSA9IG1ldGFkYXRhW2tleV07XG4gIH1cbiAgcmV0dXJuIG9yZGVyZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemF0aW9uU2VydmljZSB7XG4gIC8vIERlZmF1bHQgbGltaXRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUFYX1lBTUxfU0laRSA9IDY0ICogMTAyNDsgLy8gNjRLQlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01BWF9DT05URU5UX1NJWkUgPSAxMDI0ICogMTAyNDsgLy8gMU1CXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gTm8gY29uZmlndXJhdGlvbiBuZWVkZWQgLSBzdGF0ZWxlc3Mgc2VydmljZVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFlBTUwgUEFSU0lOR1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUGFyc2UgcHVyZSBZQU1MIHdpdGggc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgKlxuICAgKiBIYW5kbGVzOlxuICAgKiAtIFNpemUgdmFsaWRhdGlvblxuICAgKiAtIFNjaGVtYSBzZWxlY3Rpb25cbiAgICogLSBTdHJ1Y3R1cmUgdmFsaWRhdGlvblxuICAgKiAtIFNlY3VyaXR5IGV2ZW50IGxvZ2dpbmdcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBZQU1MIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFBhcnNpbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBQYXJzZWQgb2JqZWN0XG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgc2l6ZSBleGNlZWRzIGxpbWl0IG9yIHN0cnVjdHVyZSBpcyBpbnZhbGlkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGFyc2VkID0gc2VydmljZS5wYXJzZVB1cmVZYW1sKHlhbWxTdHJpbmcsIHtcbiAgICogICBzY2hlbWE6ICdmYWlsc2FmZScsXG4gICAqICAgbWF4U2l6ZTogNjQgKiAxMDI0LFxuICAgKiAgIHZhbGlkYXRlU3RydWN0dXJlOiB0cnVlLFxuICAgKiAgIHNvdXJjZTogJ1NraWxsTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwYXJzZVB1cmVZYW1sKGRhdGE6IHN0cmluZywgb3B0aW9uczogWWFtbFBhcnNlT3B0aW9ucyA9IHt9KTogYW55IHtcbiAgICBjb25zdCB7XG4gICAgICBzY2hlbWEgPSAnZmFpbHNhZmUnLFxuICAgICAgbWF4U2l6ZSA9IFNlcmlhbGl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfTUFYX1lBTUxfU0laRSxcbiAgICAgIHZhbGlkYXRlU3RydWN0dXJlID0gdHJ1ZSxcbiAgICAgIHNvdXJjZSA9ICdTZXJpYWxpemF0aW9uU2VydmljZS5wYXJzZVB1cmVZYW1sJ1xuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gU2l6ZSB2YWxpZGF0aW9uXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gbWF4U2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBZQU1MIGNvbnRlbnQgZXhjZWVkcyBhbGxvd2VkIHNpemUgb2YgJHttYXhTaXplfSBieXRlc2ApO1xuICAgIH1cblxuICAgIC8vIFNlbGVjdCBZQU1MIHNjaGVtYVxuICAgIGNvbnN0IHlhbWxTY2hlbWEgPSB0aGlzLmdldFlhbWxTY2hlbWEoc2NoZW1hKTtcblxuICAgIC8vIFBhcnNlIFlBTUxcbiAgICBsZXQgcGFyc2VkOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IHlhbWwubG9hZChkYXRhLCB7XG4gICAgICAgIHNjaGVtYTogeWFtbFNjaGVtYSxcbiAgICAgICAganNvbjogZmFsc2UsXG4gICAgICAgIG9uV2FybmluZzogKHdhcm5pbmc6IGFueSkgPT4ge1xuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNJTkdfV0FSTklORycsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICBkZXRhaWxzOiBgWUFNTCB3YXJuaW5nOiAke3dhcm5pbmcubWVzc2FnZX1gXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIud2FybihgWUFNTCBwYXJzaW5nIGZhaWxlZCBpbiAke3NvdXJjZX06ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgWUFNTDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgLy8gU3RydWN0dXJlIHZhbGlkYXRpb25cbiAgICBpZiAodmFsaWRhdGVTdHJ1Y3R1cmUpIHtcbiAgICAgIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWUFNTCBtdXN0IGNvbnRhaW4gYW4gb2JqZWN0IGF0IHJvb3QgbGV2ZWwnKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIG1hbGljaW91cyBrZXlzXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyc2VkKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnW29iamVjdCBPYmplY3RdJykgfHwga2V5LmluY2x1ZGVzKCdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFlBTUwgc3RydWN0dXJlIGRldGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2cgc3VjY2Vzc1xuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlLFxuICAgICAgZGV0YWlsczogJ1lBTUwgY29udGVudCBzYWZlbHkgcGFyc2VkJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBmcm9udG1hdHRlciArIGNvbnRlbnQgKE1hcmtkb3duIHdpdGggWUFNTClcbiAgICpcbiAgICogQXV0by1kZXRlY3RzOlxuICAgKiAtIFB1cmUgWUFNTCAod3JhcHMgd2l0aCAtLS0gbWFya2VycyBmb3IgcGFyc2luZylcbiAgICogLSBNYXJrZG93biB3aXRoIGZyb250bWF0dGVyIChwYXJzZXMgYXMtaXMpXG4gICAqXG4gICAqIFVzZXMgU2VjdXJlWWFtbFBhcnNlciBmb3Igc2VjdXJpdHkgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBNYXJrZG93biBzdHJpbmcgd2l0aCBmcm9udG1hdHRlclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFBhcnNpbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBQYXJzZWQgZnJvbnRtYXR0ZXIgYW5kIGNvbnRlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBzZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXIobWFya2Rvd25TdHJpbmcsIHtcbiAgICogICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LFxuICAgKiAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZSxcbiAgICogICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAgICogfSk7XG4gICAqIC8vIHJlc3VsdC5kYXRhID0geyBuYW1lOiAnLi4uJywgZGVzY3JpcHRpb246ICcuLi4nIH1cbiAgICogLy8gcmVzdWx0LmNvbnRlbnQgPSAnTWFya2Rvd24gY29udGVudC4uLidcbiAgICogYGBgXG4gICAqL1xuICBwYXJzZUZyb250bWF0dGVyKFxuICAgIGRhdGE6IHN0cmluZyxcbiAgICBvcHRpb25zOiBGcm9udG1hdHRlclBhcnNlT3B0aW9ucyA9IHt9XG4gICk6IFBhcnNlZEZyb250bWF0dGVyIHtcbiAgICBjb25zdCB7XG4gICAgICBtYXhZYW1sU2l6ZSA9IFNlcmlhbGl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfTUFYX1lBTUxfU0laRSxcbiAgICAgIG1heENvbnRlbnRTaXplID0gU2VyaWFsaXphdGlvblNlcnZpY2UuREVGQVVMVF9NQVhfQ09OVEVOVF9TSVpFLFxuICAgICAgdmFsaWRhdGVDb250ZW50ID0gZmFsc2UsXG4gICAgICBzb3VyY2UgPSAnU2VyaWFsaXphdGlvblNlcnZpY2UucGFyc2VGcm9udG1hdHRlcicsXG4gICAgICBzY2hlbWEgPSAnZmFpbHNhZmUnXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBDaGVjayBpZiBkYXRhIGhhcyBmcm9udG1hdHRlciBtYXJrZXJzXG4gICAgaWYgKHRoaXMuaGFzRnJvbnRtYXR0ZXIoZGF0YSkpIHtcbiAgICAgIC8vIFVzZSBTZWN1cmVZYW1sUGFyc2VyIGZvciBmcm9udG1hdHRlciBmb3JtYXRcbiAgICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoZGF0YSwge1xuICAgICAgICBtYXhZYW1sU2l6ZSxcbiAgICAgICAgbWF4Q29udGVudFNpemUsXG4gICAgICAgIHZhbGlkYXRlQ29udGVudFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHBhcnNlZC5kYXRhLFxuICAgICAgICBjb250ZW50OiBwYXJzZWQuY29udGVudC50cmltKCkgLy8gVHJpbSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFB1cmUgWUFNTCB3aXRob3V0IGZyb250bWF0dGVyIG1hcmtlcnMgKE1lbW9yeU1hbmFnZXIgcGF0dGVybilcbiAgICAgIC8vIFBhcnNlIHRoZSBlbnRpcmUgY29udGVudCBhcyBZQU1MXG4gICAgICAvLyBVc2UgY2FsbGVyLXNwZWNpZmllZCBzY2hlbWEgdG8gcHJlc2VydmUgdHlwZXMgd2hlbiBuZWVkZWQgKGUuZy4sICdqc29uJyBmb3IgYm9vbGVhbnMvbnVtYmVycylcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VQdXJlWWFtbChkYXRhLCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbWF4U2l6ZTogbWF4WWFtbFNpemUsXG4gICAgICAgIHZhbGlkYXRlU3RydWN0dXJlOiB0cnVlLFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBwYXJzZWQsXG4gICAgICAgIGNvbnRlbnQ6ICcnIC8vIE5vIG1hcmtkb3duIGNvbnRlbnQgZm9yIHB1cmUgWUFNTFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXV0by1kZXRlY3QgZm9ybWF0IGFuZCBwYXJzZVxuICAgKlxuICAgKiBEZXRlY3RzOlxuICAgKiAtIEZyb250bWF0dGVyIChzdGFydHMgd2l0aCAtLS0pXG4gICAqIC0gUHVyZSBZQU1MICh2YWxpZCBZQU1MIG9iamVjdClcbiAgICogLSBKU09OIChzdGFydHMgd2l0aCB7IG9yIFspXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUGFyc2luZyBvcHRpb25zIGZvciBlYWNoIGZvcm1hdFxuICAgKiBAcmV0dXJucyBQYXJzZWQgcmVzdWx0IHdpdGggZGV0ZWN0ZWQgZm9ybWF0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gc2VydmljZS5wYXJzZUF1dG8oZGF0YSwge1xuICAgKiAgIHNvdXJjZTogJ1NraWxsTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICAgKiB9KTtcbiAgICogaWYgKHJlc3VsdC5mb3JtYXQgPT09ICdmcm9udG1hdHRlcicpIHtcbiAgICogICBjb25zb2xlLmxvZyhyZXN1bHQuZGF0YSwgcmVzdWx0LmNvbnRlbnQpO1xuICAgKiB9IGVsc2UgaWYgKHJlc3VsdC5mb3JtYXQgPT09ICd5YW1sJykge1xuICAgKiAgIGNvbnNvbGUubG9nKHJlc3VsdC5kYXRhKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlQXV0byhcbiAgICBkYXRhOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXV0b1BhcnNlT3B0aW9ucyA9IHt9XG4gICk6IEF1dG9QYXJzZWRSZXN1bHQge1xuICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuZGV0ZWN0Rm9ybWF0KGRhdGEpO1xuXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2Zyb250bWF0dGVyJzoge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlRnJvbnRtYXR0ZXIoZGF0YSwgb3B0aW9ucy5mcm9udG1hdHRlck9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICBkYXRhOiBwYXJzZWQuZGF0YSxcbiAgICAgICAgICBjb250ZW50OiBwYXJzZWQuY29udGVudFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlICd5YW1sJzoge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlUHVyZVlhbWwoZGF0YSwgb3B0aW9ucy55YW1sT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgIGRhdGE6IHBhcnNlZFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlSnNvbihkYXRhLCBvcHRpb25zLmpzb25PcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgZGF0YTogcGFyc2VkXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGRldGVjdCB2YWxpZCBmb3JtYXQgKGZyb250bWF0dGVyLCBZQU1MLCBvciBKU09OKScpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBZQU1MIERVTVBJTkdcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIER1bXAgb2JqZWN0IHRvIFlBTUwgc3RyaW5nXG4gICAqXG4gICAqIFN1cHBvcnRzOlxuICAgKiAtIEZBSUxTQUZFX1NDSEVNQSAoZGVmYXVsdCAtIHN0cmluZ3Mgb25seSwgbW9zdCBzZWN1cmUpXG4gICAqIC0gREVGQVVMVF9TQ0hFTUEgKGZvciBUZW1wbGF0ZU1hbmFnZXIgY29tcGF0aWJpbGl0eSlcbiAgICogLSBDT1JFX1NDSEVNQSAoZm9yIHNwZWNpYWwgY2FzZXMpXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gT2JqZWN0IHRvIHNlcmlhbGl6ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIER1bXAgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBZQU1MIHN0cmluZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHlhbWxTdHJpbmcgPSBzZXJ2aWNlLmR1bXBZYW1sKGRhdGEsIHtcbiAgICogICBzY2hlbWE6ICdmYWlsc2FmZScsXG4gICAqICAgc29ydEtleXM6IHRydWUsXG4gICAqICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAqICAgbm9SZWZzOiB0cnVlXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGR1bXBZYW1sKGRhdGE6IGFueSwgb3B0aW9uczogWWFtbER1bXBPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IHtcbiAgICAgIHNjaGVtYSA9ICdmYWlsc2FmZScsXG4gICAgICBzb3J0S2V5cyA9IHRydWUsXG4gICAgICBza2lwSW52YWxpZCA9IHRydWUsXG4gICAgICBub1JlZnMgPSB0cnVlLFxuICAgICAgaW5kZW50ID0gMixcbiAgICAgIGxpbmVXaWR0aCA9IDgwLFxuICAgICAgZmxvd0xldmVsID0gLTFcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHlhbWxTY2hlbWEgPSB0aGlzLmdldFlhbWxTY2hlbWEoc2NoZW1hKTtcblxuICAgIHJldHVybiB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sU2NoZW1hLFxuICAgICAgc29ydEtleXMsXG4gICAgICBza2lwSW52YWxpZCxcbiAgICAgIG5vUmVmcyxcbiAgICAgIGluZGVudCxcbiAgICAgIGxpbmVXaWR0aCxcbiAgICAgIGZsb3dMZXZlbFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBmcm9udG1hdHRlciArIGNvbnRlbnQgKE1hcmtkb3duIHdpdGggWUFNTClcbiAgICpcbiAgICogTWV0aG9kczpcbiAgICogLSAnbWF0dGVyJyAtIFVzZXMgbWF0dGVyLnN0cmluZ2lmeSgpIChTa2lsbE1hbmFnZXIgcGF0dGVybilcbiAgICogLSAnbWFudWFsJyAtIE1hbnVhbCBZQU1MIGR1bXAgKyBjb25jYXRlbmF0aW9uIChvdGhlciBtYW5hZ2VycylcbiAgICpcbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gRnJvbnRtYXR0ZXIgbWV0YWRhdGFcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBNYXJrZG93biBjb250ZW50XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRHVtcCBvcHRpb25zXG4gICAqIEByZXR1cm5zIE1hcmtkb3duIHN0cmluZyB3aXRoIGZyb250bWF0dGVyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbWFya2Rvd24gPSBzZXJ2aWNlLmNyZWF0ZUZyb250bWF0dGVyKG1ldGFkYXRhLCBjb250ZW50LCB7XG4gICAqICAgc2NoZW1hOiAnZmFpbHNhZmUnLFxuICAgKiAgIG1ldGhvZDogJ21hdHRlcicsXG4gICAqICAgY2xlYW5NZXRhZGF0YTogdHJ1ZSxcbiAgICogICBjbGVhbmluZ1N0cmF0ZWd5OiAncmVtb3ZlLXVuZGVmaW5lZCdcbiAgICogfSk7XG4gICAqIC8vIFJldHVybnM6IC0tLVxcbm1ldGFkYXRhLi4uXFxuLS0tXFxuXFxuQ29udGVudC4uLlxuICAgKiBgYGBcbiAgICovXG4gIGNyZWF0ZUZyb250bWF0dGVyKFxuICAgIG1ldGFkYXRhOiBhbnksXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEZyb250bWF0dGVyRHVtcE9wdGlvbnMgPSB7fVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHtcbiAgICAgIG1ldGhvZCA9ICdtYW51YWwnLFxuICAgICAgY2xlYW5NZXRhZGF0YSA9IGZhbHNlLFxuICAgICAgY2xlYW5pbmdTdHJhdGVneSA9ICdyZW1vdmUtdW5kZWZpbmVkJyxcbiAgICAgIHNjaGVtYSA9ICdmYWlsc2FmZScsXG4gICAgICBzb3J0S2V5czogX3NvcnRLZXlzID0gdHJ1ZSxcbiAgICAgIHNraXBJbnZhbGlkID0gdHJ1ZSxcbiAgICAgIG5vUmVmcyA9IHRydWVcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIC8vIENsZWFuIG1ldGFkYXRhIGlmIHJlcXVlc3RlZFxuICAgIGxldCBwcm9jZXNzZWRNZXRhZGF0YSA9IGNsZWFuTWV0YWRhdGFcbiAgICAgID8gdGhpcy5jbGVhbk1ldGFkYXRhKG1ldGFkYXRhLCB7IHN0cmF0ZWd5OiBjbGVhbmluZ1N0cmF0ZWd5IH0pXG4gICAgICA6IG1ldGFkYXRhO1xuXG4gICAgLy8gRml4ICM5MTA6IEFwcGx5IGNhbm9uaWNhbCBmaWVsZCBvcmRlcmluZyBpbnN0ZWFkIG9mIGFscGhhYmV0aWNhbCBzb3J0XG4gICAgcHJvY2Vzc2VkTWV0YWRhdGEgPSBvcmRlck1ldGFkYXRhRmllbGRzKHByb2Nlc3NlZE1ldGFkYXRhKTtcblxuICAgIGlmIChtZXRob2QgPT09ICdtYXR0ZXInKSB7XG4gICAgICAvLyBVc2UgbWF0dGVyLnN0cmluZ2lmeSgpIChTa2lsbE1hbmFnZXIgcGF0dGVybilcbiAgICAgIHJldHVybiBtYXR0ZXIuc3RyaW5naWZ5KGNvbnRlbnQsIHByb2Nlc3NlZE1ldGFkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTWFudWFsIGNvbnN0cnVjdGlvbiAob3RoZXIgbWFuYWdlcnMpXG4gICAgICBjb25zdCB5YW1sU3RyaW5nID0gdGhpcy5kdW1wWWFtbChwcm9jZXNzZWRNZXRhZGF0YSwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHNvcnRLZXlzOiBmYWxzZSwgIC8vIEZpeCAjOTEwOiBmaWVsZCBvcmRlciBpcyBub3cgY2Fub25pY2FsLCBub3QgYWxwaGFiZXRpY2FsXG4gICAgICAgIHNraXBJbnZhbGlkLFxuICAgICAgICBub1JlZnNcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb25zdHJ1Y3QgZnJvbnRtYXR0ZXIgbWFudWFsbHlcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBgLS0tXFxuJHt5YW1sU3RyaW5nfS0tLVxcblxcbiR7Y29udGVudH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxTdHJpbmd9LS0tXFxuYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSlNPTiBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBQYXJzZSBKU09OIHdpdGggZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGxvZ2dpbmdcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBKU09OIHN0cmluZ1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFBhcnNlIG9wdGlvbnNcbiAgICogQHJldHVybnMgUGFyc2VkIG9iamVjdFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHBhcnNpbmcgZmFpbHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZWQgPSBzZXJ2aWNlLnBhcnNlSnNvbihqc29uU3RyaW5nLCB7XG4gICAqICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmltcG9ydEVsZW1lbnQnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlSnNvbjxUID0gYW55PihcbiAgICBkYXRhOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSnNvblBhcnNlT3B0aW9ucyA9IHt9XG4gICk6IFQge1xuICAgIGNvbnN0IHtcbiAgICAgIG1heFNpemUgPSBTZXJpYWxpemF0aW9uU2VydmljZS5ERUZBVUxUX01BWF9DT05URU5UX1NJWkUsXG4gICAgICB2YWxpZGF0ZVN0cnVjdHVyZSA9IGZhbHNlLFxuICAgICAgc291cmNlID0gJ1NlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlSnNvbidcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIC8vIFNpemUgdmFsaWRhdGlvblxuICAgIHRoaXMudmFsaWRhdGVTaXplKGRhdGEsIG1heFNpemUsICdKU09OIGNvbnRlbnQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgICAvLyBTdHJ1Y3R1cmUgdmFsaWRhdGlvblxuICAgICAgaWYgKHZhbGlkYXRlU3RydWN0dXJlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OIG11c3QgY29udGFpbiBhbiBvYmplY3QgYXQgcm9vdCBsZXZlbCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci53YXJuKGBKU09OIHBhcnNpbmcgZmFpbGVkIGluICR7c291cmNlfTogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBKU09OOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RyaW5naWZ5IG9iamVjdCB0byBKU09OXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gT2JqZWN0IHRvIHNlcmlhbGl6ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFN0cmluZ2lmeSBvcHRpb25zXG4gICAqIEByZXR1cm5zIEpTT04gc3RyaW5nXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QganNvblN0cmluZyA9IHNlcnZpY2Uuc3RyaW5naWZ5SnNvbihkYXRhLCB7XG4gICAqICAgaW5kZW50OiAyLFxuICAgKiAgIGNsZWFuTWV0YWRhdGE6IHRydWUsXG4gICAqICAgY2xlYW5pbmdTdHJhdGVneTogJ3JlbW92ZS11bmRlZmluZWQnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHN0cmluZ2lmeUpzb24oXG4gICAgZGF0YTogYW55LFxuICAgIG9wdGlvbnM6IEpzb25TdHJpbmdpZnlPcHRpb25zID0ge31cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICBwcmV0dHkgPSBmYWxzZSxcbiAgICAgIGluZGVudCA9IDIsXG4gICAgICBjbGVhbk1ldGFkYXRhID0gZmFsc2UsXG4gICAgICBjbGVhbmluZ1N0cmF0ZWd5ID0gJ3JlbW92ZS11bmRlZmluZWQnXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBDbGVhbiBtZXRhZGF0YSBpZiByZXF1ZXN0ZWRcbiAgICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xlYW5NZXRhZGF0YVxuICAgICAgPyB0aGlzLmNsZWFuTWV0YWRhdGEoZGF0YSwgeyBzdHJhdGVneTogY2xlYW5pbmdTdHJhdGVneSB9KVxuICAgICAgOiBkYXRhO1xuXG4gICAgLy8gVXNlIGluZGVudCBpZiBwcmV0dHkgaXMgdHJ1ZSwgb3RoZXJ3aXNlIG5vIGZvcm1hdHRpbmdcbiAgICBjb25zdCBpbmRlbnRWYWx1ZSA9IHByZXR0eSA/IGluZGVudCA6IDA7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByb2Nlc3NlZERhdGEsIG51bGwsIGluZGVudFZhbHVlKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRVRBREFUQSBVVElMSVRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENsZWFuIG1ldGFkYXRhIGJ5IHJlbW92aW5nIHVuZGVmaW5lZC9udWxsIHZhbHVlc1xuICAgKlxuICAgKiBTdHJhdGVnaWVzOlxuICAgKiAtICdyZW1vdmUtdW5kZWZpbmVkJyAtIFJlbW92ZSB1bmRlZmluZWQgb25seSAoU2tpbGxNYW5hZ2VyLCBUZW1wbGF0ZU1hbmFnZXIpXG4gICAqIC0gJ3JlbW92ZS1udWxsJyAtIFJlbW92ZSBudWxsIG9ubHlcbiAgICogLSAncmVtb3ZlLWJvdGgnIC0gUmVtb3ZlIGJvdGggdW5kZWZpbmVkIGFuZCBudWxsIChBZ2VudE1hbmFnZXIpXG4gICAqIC0gJ25vbmUnIC0gTm8gY2xlYW5pbmcgKE1lbW9yeU1hbmFnZXIsIEVuc2VtYmxlTWFuYWdlcilcbiAgICpcbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gTWV0YWRhdGEgb2JqZWN0IHRvIGNsZWFuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ2xlYW5pbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBDbGVhbmVkIG1ldGFkYXRhIChuZXcgb2JqZWN0LCBvcmlnaW5hbCBub3QgbW9kaWZpZWQpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgY2xlYW5lZCA9IHNlcnZpY2UuY2xlYW5NZXRhZGF0YShtZXRhZGF0YSwge1xuICAgKiAgIHN0cmF0ZWd5OiAncmVtb3ZlLXVuZGVmaW5lZCdcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgY2xlYW5NZXRhZGF0YShcbiAgICBtZXRhZGF0YTogYW55LFxuICAgIG9wdGlvbnM6IE1ldGFkYXRhQ2xlYW5PcHRpb25zID0ge31cbiAgKTogYW55IHtcbiAgICBjb25zdCB7IHN0cmF0ZWd5ID0gJ3JlbW92ZS11bmRlZmluZWQnLCByZW1vdmVFbXB0eSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHN0cmF0ZWd5ID09PSAnbm9uZScgJiYgIXJlbW92ZUVtcHR5KSB7XG4gICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIG5vbi1vYmplY3QgY2FzZXNcbiAgICBpZiAodHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0JyB8fCBtZXRhZGF0YSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBhcnJheXNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXRhZGF0YSkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgbnVsbC91bmRlZmluZWQgYmFzZWQgb24gc3RyYXRlZ3lcbiAgICAgIGxldCBjbGVhbmVkID0gbWV0YWRhdGEubWFwKGl0ZW0gPT4gdGhpcy5jbGVhbk1ldGFkYXRhKGl0ZW0sIG9wdGlvbnMpKTtcblxuICAgICAgaWYgKHN0cmF0ZWd5ID09PSAncmVtb3ZlLXVuZGVmaW5lZCcpIHtcbiAgICAgICAgY2xlYW5lZCA9IGNsZWFuZWQuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyYXRlZ3kgPT09ICdyZW1vdmUtbnVsbCcpIHtcbiAgICAgICAgY2xlYW5lZCA9IGNsZWFuZWQuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gbnVsbCk7XG4gICAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSAncmVtb3ZlLWJvdGgnKSB7XG4gICAgICAgIGNsZWFuZWQgPSBjbGVhbmVkLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtICE9PSBudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsZWFuZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gb2JqZWN0IGJhc2VkIG9uIHN0cmF0ZWd5XG4gICAgY29uc3QgY2xlYW5lZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICBjb25zdCBzaG91bGRSZW1vdmUgPVxuICAgICAgICAoc3RyYXRlZ3kgPT09ICdyZW1vdmUtdW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAoc3RyYXRlZ3kgPT09ICdyZW1vdmUtbnVsbCcgJiYgdmFsdWUgPT09IG51bGwpIHx8XG4gICAgICAgIChzdHJhdGVneSA9PT0gJ3JlbW92ZS1ib3RoJyAmJiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkpO1xuXG4gICAgICBpZiAoIXNob3VsZFJlbW92ZSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBjbGVhbiBuZXN0ZWQgb2JqZWN0cy9hcnJheXNcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBjbGVhbmVkVmFsdWUgPSB0aGlzLmNsZWFuTWV0YWRhdGEodmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHJlbW92ZSBlbXB0eSBhcnJheXMvb2JqZWN0c1xuICAgICAgICAgIGlmIChyZW1vdmVFbXB0eSkge1xuICAgICAgICAgICAgY29uc3QgaXNFbXB0eSA9IEFycmF5LmlzQXJyYXkoY2xlYW5lZFZhbHVlKVxuICAgICAgICAgICAgICA/IGNsZWFuZWRWYWx1ZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgOiBPYmplY3Qua2V5cyhjbGVhbmVkVmFsdWUpLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICAgICAgICAgIGNsZWFuZWRba2V5XSA9IGNsZWFuZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYW5lZFtrZXldID0gY2xlYW5lZFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGVhbmVkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGVhbmVkO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZPUk1BVCBERVRFQ1RJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIERldGVjdCBmb3JtYXQgb2YgaW5wdXQgZGF0YVxuICAgKlxuICAgKiBEZXRlY3Rpb24gbG9naWM6XG4gICAqIDEuIENoZWNrIGZvciBmcm9udG1hdHRlciAoc3RhcnRzIHdpdGggLS0tIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UpXG4gICAqIDIuIENoZWNrIGZvciBKU09OIChzdGFydHMgd2l0aCB7IG9yIFspXG4gICAqIDMuIFRyeSB0byBwYXJzZSBhcyBZQU1MXG4gICAqIDQuIFJldHVybiAndW5rbm93bicgaWYgbm9uZSBtYXRjaFxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFN0cmluZyB0byBhbmFseXplXG4gICAqIEByZXR1cm5zIERldGVjdGVkIGZvcm1hdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGZvcm1hdCA9IHNlcnZpY2UuZGV0ZWN0Rm9ybWF0KGRhdGEpO1xuICAgKiAvLyBSZXR1cm5zOiAnZnJvbnRtYXR0ZXInIHwgJ3lhbWwnIHwgJ2pzb24nIHwgJ3Vua25vd24nXG4gICAqIGBgYFxuICAgKi9cbiAgZGV0ZWN0Rm9ybWF0KGRhdGE6IHN0cmluZyk6IERldGVjdGVkRm9ybWF0IHtcbiAgICBjb25zdCB0cmltbWVkID0gZGF0YS50cmltKCk7XG5cbiAgICAvLyBDaGVjayBmb3IgZnJvbnRtYXR0ZXJcbiAgICBpZiAodGhpcy5oYXNGcm9udG1hdHRlcih0cmltbWVkKSkge1xuICAgICAgcmV0dXJuICdmcm9udG1hdHRlcic7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIEpTT05cbiAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCd7JykgfHwgdHJpbW1lZC5zdGFydHNXaXRoKCdbJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEpTT04ucGFyc2UodHJpbW1lZCk7XG4gICAgICAgIHJldHVybiAnanNvbic7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTm90IHZhbGlkIEpTT04sIGNvbnRpbnVlIGNoZWNraW5nXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJ5IHBhcnNpbmcgYXMgWUFNTFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB5YW1sLmxvYWQodHJpbW1lZCwge1xuICAgICAgICBzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BLFxuICAgICAgICBqc29uOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkIFlBTUwgdGhhdCBwYXJzZXMgdG8gYW4gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAneWFtbCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBOb3QgdmFsaWQgWUFNTFxuICAgIH1cblxuICAgIHJldHVybiAndW5rbm93bic7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZGF0YSBoYXMgZnJvbnRtYXR0ZXIgbWFya2Vyc1xuICAgKlxuICAgKiBDaGVja3MgZm9yICctLS0nIGF0IHRoZSBzdGFydCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3RyaW5nIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIFRydWUgaWYgaGFzIGZyb250bWF0dGVyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaWYgKHNlcnZpY2UuaGFzRnJvbnRtYXR0ZXIoZGF0YSkpIHtcbiAgICogICBjb25zdCByZXN1bHQgPSBzZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXIoZGF0YSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBoYXNGcm9udG1hdHRlcihkYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0cmltbWVkID0gZGF0YS50cmltKCk7XG4gICAgcmV0dXJuIHRyaW1tZWQuc3RhcnRzV2l0aCgnLS0tJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0VDVVJJVFkgVVRJTElUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBMb2cgc2VjdXJpdHkgZXZlbnQgKHdyYXBwZXIgZm9yIFNlY3VyaXR5TW9uaXRvcilcbiAgICpcbiAgICogUHJvdmlkZXMgY29uc2lzdGVudCBzZWN1cml0eSBldmVudCBsb2dnaW5nIGFjcm9zcyBzZXJpYWxpemF0aW9uIG9wZXJhdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBFdmVudCB0eXBlXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIEV2ZW50IHNldmVyaXR5XG4gICAqIEBwYXJhbSBzb3VyY2UgLSBFdmVudCBzb3VyY2VcbiAgICogQHBhcmFtIGRldGFpbHMgLSBFdmVudCBkZXRhaWxzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc2VydmljZS5sb2dTZWN1cml0eUV2ZW50KFxuICAgKiAgICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgKiAgICdMT1cnLFxuICAgKiAgICdTa2lsbE1hbmFnZXIuaW1wb3J0RWxlbWVudCcsXG4gICAqICAgJ1N1Y2Nlc3NmdWxseSBwYXJzZWQgWUFNTCBjb250ZW50J1xuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIGxvZ1NlY3VyaXR5RXZlbnQoXG4gICAgdHlwZTogU2VjdXJpdHlFdmVudFsndHlwZSddLFxuICAgIHNldmVyaXR5OiAnTE9XJyB8ICdNRURJVU0nIHwgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBkZXRhaWxzOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZSxcbiAgICAgIHNldmVyaXR5LFxuICAgICAgc291cmNlLFxuICAgICAgZGV0YWlsc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNpemUgbGltaXRzXG4gICAqXG4gICAqIFRocm93cyBlcnJvciBpZiBkYXRhIGV4Y2VlZHMgdGhlIHNwZWNpZmllZCBtYXhpbXVtIHNpemVcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBEYXRhIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBtYXhTaXplIC0gTWF4aW11bSBzaXplIGluIGJ5dGVzXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gQ29udGV4dCBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICogQHRocm93cyBFcnJvciBpZiBzaXplIGV4Y2VlZHMgbGltaXRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBzZXJ2aWNlLnZhbGlkYXRlU2l6ZShkYXRhLCA2NCAqIDEwMjQsICdZQU1MIGZyb250bWF0dGVyJyk7XG4gICAqIC8vIFRocm93cyBpZiBkYXRhID4gNjRLQlxuICAgKiBgYGBcbiAgICovXG4gIHZhbGlkYXRlU2l6ZShkYXRhOiBzdHJpbmcsIG1heFNpemU6IG51bWJlciwgY29udGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gbWF4U2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtjb250ZXh0fSBleGNlZWRzIGFsbG93ZWQgc2l6ZSBvZiAke21heFNpemV9IGJ5dGVzIChhY3R1YWw6ICR7ZGF0YS5sZW5ndGh9IGJ5dGVzKWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IFlBTUwgc2NoZW1hIG9iamVjdCBmcm9tIHN0cmluZyBpZGVudGlmaWVyXG4gICAqXG4gICAqIEBwYXJhbSBzY2hlbWEgLSBTY2hlbWEgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBZQU1MIHNjaGVtYSBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZ2V0WWFtbFNjaGVtYShzY2hlbWE6IFlhbWxTY2hlbWEpOiB5YW1sLlNjaGVtYSB7XG4gICAgc3dpdGNoIChzY2hlbWEpIHtcbiAgICAgIGNhc2UgJ2ZhaWxzYWZlJzpcbiAgICAgICAgcmV0dXJuIHlhbWwuRkFJTFNBRkVfU0NIRU1BO1xuICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgIHJldHVybiB5YW1sLkRFRkFVTFRfU0NIRU1BO1xuICAgICAgY2FzZSAnY29yZSc6XG4gICAgICAgIHJldHVybiB5YW1sLkNPUkVfU0NIRU1BO1xuICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgIC8vIEpTT05fU0NIRU1BID0gRkFJTFNBRkUgKyBib29sL2ludC9mbG9hdC9udWxsIChzYWZlciB0aGFuIERFRkFVTFQgd2hpY2ggYWRkcyB0aW1lc3RhbXBzKVxuICAgICAgICAvLyBVc2UgdGhpcyBmb3IgbWVtb3JpZXMgdG8gcHJlc2VydmUgYm9vbGVhbnMgKGF1dG9Mb2FkKSBhbmQgbnVtYmVycyAocHJpb3JpdHkpXG4gICAgICAgIHJldHVybiB5YW1sLkpTT05fU0NIRU1BO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9nZ2VyLndhcm4oYFVua25vd24gWUFNTCBzY2hlbWEgJyR7c2NoZW1hfScsIHVzaW5nIEZBSUxTQUZFX1NDSEVNQWApO1xuICAgICAgICByZXR1cm4geWFtbC5GQUlMU0FGRV9TQ0hFTUE7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
683
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VyaWFsaXphdGlvblNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvU2VyaWFsaXphdGlvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFxTTVDLCtFQUErRTtBQUMvRSx5QkFBeUI7QUFDekIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0g7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFzQjtJQUNyRCxXQUFXO0lBQ1gsTUFBTSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsYUFBYTtJQUMxRCxjQUFjO0lBQ2QsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVTtJQUMzQyxpQkFBaUI7SUFDakIsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixNQUFNLEVBQUUsVUFBVTtJQUNsQix5Q0FBeUM7SUFDekMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxZQUFZO0lBQ3RFLG9CQUFvQjtJQUNwQixVQUFVLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCO0lBQ3hFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUI7SUFDbEQsb0JBQW9CO0lBQ3BCLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZTtJQUM1QyxrQkFBa0I7SUFDbEIsVUFBVSxFQUFF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d0IsTUFBTSwwQkFBMEIsQ0FBQyxDQUFDO2dCQUN0RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcmlhbGl6YXRpb25TZXJ2aWNlIC0gQ2VudHJhbGl6ZWQgc2VyaWFsaXphdGlvbiBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcbiAqXG4gKiBFbGltaW5hdGVzIH4zMDArIGxpbmVzIG9mIGR1cGxpY2F0ZSBzZXJpYWxpemF0aW9uIGNvZGUgYWNyb3NzIFNraWxsTWFuYWdlcixcbiAqIE1lbW9yeU1hbmFnZXIsIFRlbXBsYXRlTWFuYWdlciwgQWdlbnRNYW5hZ2VyLCBhbmQgRW5zZW1ibGVNYW5hZ2VyLlxuICpcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gVW5pZmllZCBZQU1MIHBhcnNpbmcgYW5kIGR1bXBpbmcgd2l0aCBzZWN1cml0eSB2YWxpZGF0aW9uXG4gKiAtIENvbnNpc3RlbnQgSlNPTiBvcGVyYXRpb25zIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICogLSBDb21wcmVoZW5zaXZlIG1ldGFkYXRhIGNsZWFuaW5nIHV0aWxpdGllc1xuICogLSBGb3JtYXQgYXV0by1kZXRlY3Rpb25cbiAqIC0gU2VjdXJpdHkgZXZlbnQgbG9nZ2luZyBpbnRlZ3JhdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbmplY3QgdmlhIERJIGNvbnRhaW5lclxuICogY29uc3RydWN0b3IocHJpdmF0ZSBzZXJpYWxpemF0aW9uU2VydmljZTogU2VyaWFsaXphdGlvblNlcnZpY2UpIHt9XG4gKlxuICogLy8gUGFyc2UgWUFNTCB3aXRoIGZyb250bWF0dGVyXG4gKiBjb25zdCByZXN1bHQgPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXIoZGF0YSwge1xuICogICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LFxuICogICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gKiAgIHNvdXJjZTogJ1NraWxsTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICogfSk7XG4gKlxuICogLy8gQ3JlYXRlIGZyb250bWF0dGVyXG4gKiBjb25zdCBtYXJrZG93biA9IHRoaXMuc2VyaWFsaXphdGlvblNlcnZpY2UuY3JlYXRlRnJvbnRtYXR0ZXIobWV0YWRhdGEsIGNvbnRlbnQsIHtcbiAqICAgc2NoZW1hOiAnZmFpbHNhZmUnLFxuICogICBjbGVhbk1ldGFkYXRhOiB0cnVlXG4gKiB9KTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgbWF0dGVyIGZyb20gJ2dyYXktbWF0dGVyJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciwgU2VjdXJpdHlFdmVudCB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFIERFRklOSVRJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogWUFNTCBzY2hlbWEgc2VsZWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFlhbWxTY2hlbWEgPSAnZmFpbHNhZmUnIHwgJ2RlZmF1bHQnIHwgJ2NvcmUnIHwgJ2pzb24nO1xuXG4vKipcbiAqIE1ldGFkYXRhIGNsZWFuaW5nIHN0cmF0ZWd5XG4gKi9cbmV4cG9ydCB0eXBlIENsZWFuaW5nU3RyYXRlZ3kgPVxuICB8ICdyZW1vdmUtdW5kZWZpbmVkJyAgLy8gUmVtb3ZlIHVuZGVmaW5lZCBvbmx5IChTa2lsbE1hbmFnZXIsIFRlbXBsYXRlTWFuYWdlcilcbiAgfCAncmVtb3ZlLW51bGwnICAgICAgIC8vIFJlbW92ZSBudWxsIG9ubHlcbiAgfCAncmVtb3ZlLWJvdGgnICAgICAgIC8vIFJlbW92ZSBib3RoIHVuZGVmaW5lZCBhbmQgbnVsbCAoQWdlbnRNYW5hZ2VyKVxuICB8ICdub25lJzsgICAgICAgICAgICAgLy8gTm8gY2xlYW5pbmcgKE1lbW9yeU1hbmFnZXIsIEVuc2VtYmxlTWFuYWdlcilcblxuLyoqXG4gKiBGcm9udG1hdHRlciBjcmVhdGlvbiBtZXRob2RcbiAqL1xuZXhwb3J0IHR5cGUgRnJvbnRtYXR0ZXJNZXRob2QgPVxuICB8ICdtYXR0ZXInICAvLyBVc2VzIG1hdHRlci5zdHJpbmdpZnkoKSAoU2tpbGxNYW5hZ2VyKVxuICB8ICdtYW51YWwnOyAvLyBNYW51YWwgWUFNTCBkdW1wICsgY29uY2F0ZW5hdGlvbiAob3RoZXJzKVxuXG4vKipcbiAqIERldGVjdGVkIGZvcm1hdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIERldGVjdGVkRm9ybWF0ID0gJ2Zyb250bWF0dGVyJyB8ICd5YW1sJyB8ICdqc29uJyB8ICd1bmtub3duJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBwYXJzaW5nIHB1cmUgWUFNTFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFlhbWxQYXJzZU9wdGlvbnMge1xuICAvKiogWUFNTCBzY2hlbWEgdG8gdXNlIChkZWZhdWx0OiAnZmFpbHNhZmUnIGZvciBzZWN1cml0eSkgKi9cbiAgc2NoZW1hPzogWWFtbFNjaGVtYTtcblxuICAvKiogTWF4aW11bSBZQU1MIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ6IDY0S0IpICovXG4gIG1heFNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFZhbGlkYXRlIHJvb3Qgc3RydWN0dXJlIGlzIGFuIG9iamVjdCAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVTdHJ1Y3R1cmU/OiBib29sZWFuO1xuXG4gIC8qKiBTb3VyY2UgaWRlbnRpZmllciBmb3Igc2VjdXJpdHkgbG9nZ2luZyAqL1xuICBzb3VyY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcGFyc2luZyBmcm9udG1hdHRlciArIGNvbnRlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udG1hdHRlclBhcnNlT3B0aW9ucyB7XG4gIC8qKiBNYXhpbXVtIFlBTUwgZnJvbnRtYXR0ZXIgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdDogNjRLQikgKi9cbiAgbWF4WWFtbFNpemU/OiBudW1iZXI7XG5cbiAgLyoqIE1heGltdW0gY29udGVudCBzaXplIGluIGJ5dGVzIChkZWZhdWx0OiAxTUIpICovXG4gIG1heENvbnRlbnRTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBFbmFibGUgY29udGVudCB2YWxpZGF0aW9uIChkZWZhdWx0OiBmYWxzZSBmb3IgbG9jYWwgZmlsZXMpICovXG4gIHZhbGlkYXRlQ29udGVudD86IGJvb2xlYW47XG5cbiAgLyoqIFNvdXJjZSBpZGVudGlmaWVyIGZvciBzZWN1cml0eSBsb2dnaW5nICovXG4gIHNvdXJjZT86IHN0cmluZztcblxuICAvKipcbiAgICogWUFNTCBzY2hlbWEgdG8gdXNlIGZvciBwdXJlIFlBTUwgcGFyc2luZyAoZGVmYXVsdDogJ2ZhaWxzYWZlJylcbiAgICogVXNlICdqc29uJyB0byBwcmVzZXJ2ZSBib29sZWFucyBhbmQgbnVtYmVycyB3aGVuIHJlYWRpbmcgZmlsZXNcbiAgICogd3JpdHRlbiB3aXRoICdqc29uJyBzY2hlbWEgKGUuZy4sIE1lbW9yeU1hbmFnZXIpXG4gICAqL1xuICBzY2hlbWE/OiBZYW1sU2NoZW1hO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGF1dG8tcGFyc2luZyAoZm9ybWF0IGRldGVjdGlvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvUGFyc2VPcHRpb25zIHtcbiAgLyoqIE9wdGlvbnMgdG8gdXNlIGlmIGZvcm1hdCBpcyBmcm9udG1hdHRlciAqL1xuICBmcm9udG1hdHRlck9wdGlvbnM/OiBGcm9udG1hdHRlclBhcnNlT3B0aW9ucztcblxuICAvKiogT3B0aW9ucyB0byB1c2UgaWYgZm9ybWF0IGlzIHB1cmUgWUFNTCAqL1xuICB5YW1sT3B0aW9ucz86IFlhbWxQYXJzZU9wdGlvbnM7XG5cbiAgLyoqIE9wdGlvbnMgdG8gdXNlIGlmIGZvcm1hdCBpcyBKU09OICovXG4gIGpzb25PcHRpb25zPzogSnNvblBhcnNlT3B0aW9ucztcblxuICAvKiogU291cmNlIGlkZW50aWZpZXIgZm9yIHNlY3VyaXR5IGxvZ2dpbmcgKi9cbiAgc291cmNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFlBTUwgZHVtcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFlhbWxEdW1wT3B0aW9ucyB7XG4gIC8qKiBZQU1MIHNjaGVtYSB0byB1c2UgKGRlZmF1bHQ6ICdmYWlsc2FmZScpICovXG4gIHNjaGVtYT86IFlhbWxTY2hlbWE7XG5cbiAgLyoqIFNvcnQga2V5cyBhbHBoYWJldGljYWxseSAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc29ydEtleXM/OiBib29sZWFuO1xuXG4gIC8qKiBTa2lwIGludmFsaWQgdmFsdWVzIGluc3RlYWQgb2YgdGhyb3dpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHNraXBJbnZhbGlkPzogYm9vbGVhbjtcblxuICAvKiogRG9uJ3QgY3JlYXRlIGFuY2hvcnMvYWxpYXNlcyAoZGVmYXVsdDogdHJ1ZSBmb3Igc2VjdXJpdHkpICovXG4gIG5vUmVmcz86IGJvb2xlYW47XG5cbiAgLyoqIEluZGVudGF0aW9uIGZvciBuZXN0ZWQgZWxlbWVudHMgKGRlZmF1bHQ6IDIpICovXG4gIGluZGVudD86IG51bWJlcjtcblxuICAvKiogTGluZSB3aWR0aCBmb3Igd3JhcHBpbmcgKGRlZmF1bHQ6IDgwKSAqL1xuICBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqIEZsb3cgbGV2ZWwgKC0xIGZvciBibG9jayBzdHlsZSwgMCsgZm9yIGZsb3cgc3R5bGUgYXQgdGhhdCBsZXZlbCkgKi9cbiAgZmxvd0xldmVsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGZyb250bWF0dGVyIGNyZWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRtYXR0ZXJEdW1wT3B0aW9ucyBleHRlbmRzIFlhbWxEdW1wT3B0aW9ucyB7XG4gIC8qKiBNZXRob2QgdG8gdXNlIGZvciBjcmVhdGluZyBmcm9udG1hdHRlciAoZGVmYXVsdDogJ21hbnVhbCcpICovXG4gIG1ldGhvZD86IEZyb250bWF0dGVyTWV0aG9kO1xuXG4gIC8qKiBDbGVhbiBtZXRhZGF0YSBiZWZvcmUgZHVtcGluZyAoZGVmYXVsdDogZmFsc2UpICovXG4gIGNsZWFuTWV0YWRhdGE/OiBib29sZWFuO1xuXG4gIC8qKiBDbGVhbmluZyBzdHJhdGVneSBpZiBjbGVhbk1ldGFkYXRhIGlzIHRydWUgKi9cbiAgY2xlYW5pbmdTdHJhdGVneT86IENsZWFuaW5nU3RyYXRlZ3k7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgSlNPTiBwYXJzaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvblBhcnNlT3B0aW9ucyB7XG4gIC8qKiBNYXhpbXVtIEpTT04gc2l6ZSBpbiBieXRlcyAoZGVmYXVsdDogMU1CKSAqL1xuICBtYXhTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBWYWxpZGF0ZSB0aGF0IHJvb3QgaXMgYW4gb2JqZWN0IChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgdmFsaWRhdGVTdHJ1Y3R1cmU/OiBib29sZWFuO1xuXG4gIC8qKiBTb3VyY2UgaWRlbnRpZmllciBmb3Igc2VjdXJpdHkgbG9nZ2luZyAqL1xuICBzb3VyY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgSlNPTiBzdHJpbmdpZmljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uU3RyaW5naWZ5T3B0aW9ucyB7XG4gIC8qKiBQcmV0dHkgcHJpbnQgb3V0cHV0IChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgcHJldHR5PzogYm9vbGVhbjtcblxuICAvKiogSW5kZW50YXRpb24gc3BhY2VzIChkZWZhdWx0OiAyKSAqL1xuICBpbmRlbnQ/OiBudW1iZXI7XG5cbiAgLyoqIENsZWFuIG1ldGFkYXRhIGJlZm9yZSBzdHJpbmdpZnlpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBjbGVhbk1ldGFkYXRhPzogYm9vbGVhbjtcblxuICAvKiogQ2xlYW5pbmcgc3RyYXRlZ3kgaWYgY2xlYW5NZXRhZGF0YSBpcyB0cnVlICovXG4gIGNsZWFuaW5nU3RyYXRlZ3k/OiBDbGVhbmluZ1N0cmF0ZWd5O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIG1ldGFkYXRhIGNsZWFuaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFDbGVhbk9wdGlvbnMge1xuICAvKiogQ2xlYW5pbmcgc3RyYXRlZ3kgKGRlZmF1bHQ6ICdyZW1vdmUtdW5kZWZpbmVkJykgKi9cbiAgc3RyYXRlZ3k/OiBDbGVhbmluZ1N0cmF0ZWd5O1xuXG4gIC8qKiBSZW1vdmUgZW1wdHkgYXJyYXlzIGFuZCBvYmplY3RzIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgcmVtb3ZlRW1wdHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIGZyb250bWF0dGVyIHBhcnNpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRGcm9udG1hdHRlciB7XG4gIC8qKiBQYXJzZWQgZnJvbnRtYXR0ZXIgbWV0YWRhdGEgKi9cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAvKiogTWFya2Rvd24gY29udGVudCBhZnRlciBmcm9udG1hdHRlciAqL1xuICBjb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IGZyb20gYXV0by1wYXJzaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b1BhcnNlZFJlc3VsdCB7XG4gIC8qKiBEZXRlY3RlZCBmb3JtYXQgKi9cbiAgZm9ybWF0OiBEZXRlY3RlZEZvcm1hdDtcblxuICAvKiogUGFyc2VkIGRhdGEgKG1ldGFkYXRhIGZvciBmcm9udG1hdHRlciwgb2JqZWN0IGZvciBZQU1ML0pTT04pICovXG4gIGRhdGE6IGFueTtcblxuICAvKiogQ29udGVudCAob25seSBmb3IgZnJvbnRtYXR0ZXIgZm9ybWF0KSAqL1xuICBjb250ZW50Pzogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTRVJWSUNFIElNUExFTUVOVEFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2VydmljZSBmb3IgY2VudHJhbGl6ZWQgc2VyaWFsaXphdGlvbiBvcGVyYXRpb25zXG4gKlxuICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIHVuaWZpZWQgc2VyaWFsaXphdGlvbiBmdW5jdGlvbmFsaXR5IHRvIGVsaW1pbmF0ZSBjb2RlXG4gKiBkdXBsaWNhdGlvbiBhY3Jvc3MgZWxlbWVudCBtYW5hZ2Vycy4gU3VwcG9ydHM6XG4gKiAtIFlBTUwgcGFyc2luZyBhbmQgZHVtcGluZ1xuICogLSBKU09OIHBhcnNpbmcgYW5kIHN0cmluZ2lmaWNhdGlvblxuICogLSBGcm9udG1hdHRlciBjcmVhdGlvbiBhbmQgcGFyc2luZ1xuICogLSBNZXRhZGF0YSBjbGVhbmluZ1xuICogLSBGb3JtYXQgZGV0ZWN0aW9uXG4gKiAtIFNlY3VyaXR5IHZhbGlkYXRpb25cbiAqL1xuLyoqXG4gKiBGaXggIzkxMDogQ2Fub25pY2FsIG1ldGFkYXRhIGZpZWxkIG9yZGVyIGZvciBkZXRlcm1pbmlzdGljIFlBTUwgb3V0cHV0LlxuICogRmllbGRzIGFyZSBvcmRlcmVkOiBpZGVudGl0eSDihpIgZm9ybWF0IOKGkiBjb250ZW50IOKGkiB0eXBlLXNwZWNpZmljIOKGkiBpbmZyYXN0cnVjdHVyZS5cbiAqIEZpZWxkcyBub3QgbGlzdGVkIGFwcGVhciBhZnRlciBhbGwgbGlzdGVkIGZpZWxkcywgc29ydGVkIGFscGhhYmV0aWNhbGx5LlxuICovXG5leHBvcnQgY29uc3QgTUVUQURBVEFfRklFTERfT1JERVI6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAvLyBJZGVudGl0eVxuICAnbmFtZScsICd0eXBlJywgJ2Zvcm1hdF92ZXJzaW9uJywgJ3ZlcnNpb24nLCAnZGVzY3JpcHRpb24nLFxuICAvLyBBdHRyaWJ1dGlvblxuICAnYXV0aG9yJywgJ2NyZWF0ZWQnLCAnbW9kaWZpZWQnLCAnY2F0ZWdvcnknLFxuICAvLyBDb250ZW50IGZpZWxkc1xuICAnaW5zdHJ1Y3Rpb25zJyxcbiAgLy8gQ2xhc3NpZmljYXRpb25cbiAgJ3RhZ3MnLCAndHJpZ2dlcnMnLFxuICAvLyBBZ2VudC1zcGVjaWZpYyAob3JkZXJlZCBieSBpbXBvcnRhbmNlKVxuICAnZ29hbCcsICdhY3RpdmF0ZXMnLCAndG9vbHMnLCAnc3lzdGVtUHJvbXB0JywgJ2F1dG9ub215JywgJ3Jlc2lsaWVuY2UnLFxuICAvLyBFbnNlbWJsZS1zcGVjaWZpY1xuICAnZWxlbWVudHMnLCAnYWN0aXZhdGlvblN0cmF0ZWd5JywgJ2NvbmZsaWN0UmVzb2x1dGlvbicsICdjb250ZXh0U2hhcmluZycsXG4gICdyZXNvdXJjZUxpbWl0cycsICdhbGxvd05lc3RlZCcsICdtYXhOZXN0aW5nRGVwdGgnLFxuICAvLyBUZW1wbGF0ZS1zcGVjaWZpY1xuICAndmFyaWFibGVzJywgJ291dHB1dEZvcm1hdCcsICdvdXRwdXRfZm9ybWF0JyxcbiAgLy8gTWVtb3J5LXNwZWNpZmljXG4gICdhdXRvTG9hZCcsICdwcmlvcml0eScsICdyZXRlbnRpb24nLCAncmV0ZW50aW9uUG9saWN5JyxcbiAgLy8gU2VjdXJpdHlcbiAgJ2dhdGVrZWVwZXInLFxuICAvLyBJbmZyYXN0cnVjdHVyZSAoYWx3YXlzIGxhc3QpXG4gICd1bmlxdWVfaWQnLFxuXTtcblxuY29uc3QgVFJBTlNJRU5UX01FVEFEQVRBX0ZJRUxEUyA9IG5ldyBTZXQoW1xuICAnZ2F0ZWtlZXBlckRpYWdub3N0aWNzJyxcbl0pO1xuXG4vLyBQcmUtY3JlYXRlZCBTZXQgZm9yIE8oMSkgbG9va3VwIGluIG9yZGVyTWV0YWRhdGFGaWVsZHMgKGF2b2lkcyBhbGxvY2F0aW9uIHBlciBjYWxsKVxuY29uc3QgTUVUQURBVEFfRklFTERfT1JERVJfU0VUID0gbmV3IFNldChNRVRBREFUQV9GSUVMRF9PUkRFUik7XG5cbi8qKlxuICogUmVvcmRlciBhbiBvYmplY3QncyBrZXlzIGFjY29yZGluZyB0byBNRVRBREFUQV9GSUVMRF9PUkRFUi5cbiAqIEtleXMgbm90IGluIHRoZSBvcmRlciBsaXN0IGFwcGVhciBhZnRlciBhbGwgb3JkZXJlZCBrZXlzLCBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmRlck1ldGFkYXRhRmllbGRzKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3Qgb3JkZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgLy8gRmlyc3Q6IGFkZCBmaWVsZHMgaW4gY2Fub25pY2FsIG9yZGVyXG4gIGZvciAoY29uc3Qga2V5IG9mIE1FVEFEQVRBX0ZJRUxEX09SREVSKSB7XG4gICAgaWYgKGtleSBpbiBtZXRhZGF0YSkge1xuICAgICAgb3JkZXJlZFtrZXldID0gbWV0YWRhdGFba2V5XTtcbiAgICB9XG4gIH1cbiAgLy8gVGhlbjogYWRkIHJlbWFpbmluZyBmaWVsZHMgYWxwaGFiZXRpY2FsbHlcbiAgY29uc3QgcmVtYWluaW5nID0gT2JqZWN0LmtleXMobWV0YWRhdGEpLmZpbHRlcihrID0+ICFNRVRBREFUQV9GSUVMRF9PUkRFUl9TRVQuaGFzKGspKS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IGtleSBvZiByZW1haW5pbmcpIHtcbiAgICBvcmRlcmVkW2tleV0gPSBtZXRhZGF0YVtrZXldO1xuICB9XG4gIHJldHVybiBvcmRlcmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU2VyaWFsaXphdGlvblNlcnZpY2Uge1xuICAvLyBEZWZhdWx0IGxpbWl0c1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01BWF9ZQU1MX1NJWkUgPSA2NCAqIDEwMjQ7IC8vIDY0S0JcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVhfQ09OVEVOVF9TSVpFID0gMTAyNCAqIDEwMjQ7IC8vIDFNQlxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIE5vIGNvbmZpZ3VyYXRpb24gbmVlZGVkIC0gc3RhdGVsZXNzIHNlcnZpY2VcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBZQU1MIFBBUlNJTkdcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFBhcnNlIHB1cmUgWUFNTCB3aXRoIHNlY3VyaXR5IHZhbGlkYXRpb25cbiAgICpcbiAgICogSGFuZGxlczpcbiAgICogLSBTaXplIHZhbGlkYXRpb25cbiAgICogLSBTY2hlbWEgc2VsZWN0aW9uXG4gICAqIC0gU3RydWN0dXJlIHZhbGlkYXRpb25cbiAgICogLSBTZWN1cml0eSBldmVudCBsb2dnaW5nXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gWUFNTCBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBQYXJzaW5nIG9wdGlvbnNcbiAgICogQHJldHVybnMgUGFyc2VkIG9iamVjdFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHNpemUgZXhjZWVkcyBsaW1pdCBvciBzdHJ1Y3R1cmUgaXMgaW52YWxpZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlZCA9IHNlcnZpY2UucGFyc2VQdXJlWWFtbCh5YW1sU3RyaW5nLCB7XG4gICAqICAgc2NoZW1hOiAnZmFpbHNhZmUnLFxuICAgKiAgIG1heFNpemU6IDY0ICogMTAyNCxcbiAgICogICB2YWxpZGF0ZVN0cnVjdHVyZTogdHJ1ZSxcbiAgICogICBzb3VyY2U6ICdTa2lsbE1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2VQdXJlWWFtbChkYXRhOiBzdHJpbmcsIG9wdGlvbnM6IFlhbWxQYXJzZU9wdGlvbnMgPSB7fSk6IGFueSB7XG4gICAgY29uc3Qge1xuICAgICAgc2NoZW1hID0gJ2ZhaWxzYWZlJyxcbiAgICAgIG1heFNpemUgPSBTZXJpYWxpemF0aW9uU2VydmljZS5ERUZBVUxUX01BWF9ZQU1MX1NJWkUsXG4gICAgICB2YWxpZGF0ZVN0cnVjdHVyZSA9IHRydWUsXG4gICAgICBzb3VyY2UgPSAnU2VyaWFsaXphdGlvblNlcnZpY2UucGFyc2VQdXJlWWFtbCdcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIC8vIFNpemUgdmFsaWRhdGlvblxuICAgIGlmIChkYXRhLmxlbmd0aCA+IG1heFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWUFNTCBjb250ZW50IGV4Y2VlZHMgYWxsb3dlZCBzaXplIG9mICR7bWF4U2l6ZX0gYnl0ZXNgKTtcbiAgICB9XG5cbiAgICAvLyBTZWxlY3QgWUFNTCBzY2hlbWFcbiAgICBjb25zdCB5YW1sU2NoZW1hID0gdGhpcy5nZXRZYW1sU2NoZW1hKHNjaGVtYSk7XG5cbiAgICAvLyBQYXJzZSBZQU1MXG4gICAgbGV0IHBhcnNlZDogYW55O1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSB5YW1sLmxvYWQoZGF0YSwge1xuICAgICAgICBzY2hlbWE6IHlhbWxTY2hlbWEsXG4gICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICBvbldhcm5pbmc6ICh3YXJuaW5nOiBhbnkpID0+IHtcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTSU5HX1dBUk5JTkcnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgZGV0YWlsczogYFlBTUwgd2FybmluZzogJHt3YXJuaW5nLm1lc3NhZ2V9YFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLndhcm4oYFlBTUwgcGFyc2luZyBmYWlsZWQgaW4gJHtzb3VyY2V9OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFlBTUw6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgIH1cblxuICAgIC8vIFN0cnVjdHVyZSB2YWxpZGF0aW9uXG4gICAgaWYgKHZhbGlkYXRlU3RydWN0dXJlKSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lBTUwgbXVzdCBjb250YWluIGFuIG9iamVjdCBhdCByb290IGxldmVsJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBtYWxpY2lvdXMga2V5c1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ1tvYmplY3QgT2JqZWN0XScpIHx8IGtleS5pbmNsdWRlcygnZnVuY3Rpb24nKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBZQU1MIHN0cnVjdHVyZSBkZXRlY3RlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9nIHN1Y2Nlc3NcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGRldGFpbHM6ICdZQU1MIGNvbnRlbnQgc2FmZWx5IHBhcnNlZCdcbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgZnJvbnRtYXR0ZXIgKyBjb250ZW50IChNYXJrZG93biB3aXRoIFlBTUwpXG4gICAqXG4gICAqIEF1dG8tZGV0ZWN0czpcbiAgICogLSBQdXJlIFlBTUwgKHdyYXBzIHdpdGggLS0tIG1hcmtlcnMgZm9yIHBhcnNpbmcpXG4gICAqIC0gTWFya2Rvd24gd2l0aCBmcm9udG1hdHRlciAocGFyc2VzIGFzLWlzKVxuICAgKlxuICAgKiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgZm9yIHNlY3VyaXR5IHZhbGlkYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gTWFya2Rvd24gc3RyaW5nIHdpdGggZnJvbnRtYXR0ZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBQYXJzaW5nIG9wdGlvbnNcbiAgICogQHJldHVybnMgUGFyc2VkIGZyb250bWF0dGVyIGFuZCBjb250ZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gc2VydmljZS5wYXJzZUZyb250bWF0dGVyKG1hcmtkb3duU3RyaW5nLCB7XG4gICAqICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCxcbiAgICogICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAqICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmltcG9ydEVsZW1lbnQnXG4gICAqIH0pO1xuICAgKiAvLyByZXN1bHQuZGF0YSA9IHsgbmFtZTogJy4uLicsIGRlc2NyaXB0aW9uOiAnLi4uJyB9XG4gICAqIC8vIHJlc3VsdC5jb250ZW50ID0gJ01hcmtkb3duIGNvbnRlbnQuLi4nXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2VGcm9udG1hdHRlcihcbiAgICBkYXRhOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRnJvbnRtYXR0ZXJQYXJzZU9wdGlvbnMgPSB7fVxuICApOiBQYXJzZWRGcm9udG1hdHRlciB7XG4gICAgY29uc3Qge1xuICAgICAgbWF4WWFtbFNpemUgPSBTZXJpYWxpemF0aW9uU2VydmljZS5ERUZBVUxUX01BWF9ZQU1MX1NJWkUsXG4gICAgICBtYXhDb250ZW50U2l6ZSA9IFNlcmlhbGl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfTUFYX0NPTlRFTlRfU0laRSxcbiAgICAgIHZhbGlkYXRlQ29udGVudCA9IGZhbHNlLFxuICAgICAgc291cmNlID0gJ1NlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXInLFxuICAgICAgc2NoZW1hID0gJ2ZhaWxzYWZlJ1xuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gQ2hlY2sgaWYgZGF0YSBoYXMgZnJvbnRtYXR0ZXIgbWFya2Vyc1xuICAgIGlmICh0aGlzLmhhc0Zyb250bWF0dGVyKGRhdGEpKSB7XG4gICAgICAvLyBVc2UgU2VjdXJlWWFtbFBhcnNlciBmb3IgZnJvbnRtYXR0ZXIgZm9ybWF0XG4gICAgICBjb25zdCBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGRhdGEsIHtcbiAgICAgICAgbWF4WWFtbFNpemUsXG4gICAgICAgIG1heENvbnRlbnRTaXplLFxuICAgICAgICB2YWxpZGF0ZUNvbnRlbnRcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBwYXJzZWQuZGF0YSxcbiAgICAgICAgY29udGVudDogcGFyc2VkLmNvbnRlbnQudHJpbSgpIC8vIFRyaW0gbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQdXJlIFlBTUwgd2l0aG91dCBmcm9udG1hdHRlciBtYXJrZXJzIChNZW1vcnlNYW5hZ2VyIHBhdHRlcm4pXG4gICAgICAvLyBQYXJzZSB0aGUgZW50aXJlIGNvbnRlbnQgYXMgWUFNTFxuICAgICAgLy8gVXNlIGNhbGxlci1zcGVjaWZpZWQgc2NoZW1hIHRvIHByZXNlcnZlIHR5cGVzIHdoZW4gbmVlZGVkIChlLmcuLCAnanNvbicgZm9yIGJvb2xlYW5zL251bWJlcnMpXG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlUHVyZVlhbWwoZGF0YSwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG1heFNpemU6IG1heFlhbWxTaXplLFxuICAgICAgICB2YWxpZGF0ZVN0cnVjdHVyZTogdHJ1ZSxcbiAgICAgICAgc291cmNlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogcGFyc2VkLFxuICAgICAgICBjb250ZW50OiAnJyAvLyBObyBtYXJrZG93biBjb250ZW50IGZvciBwdXJlIFlBTUxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8tZGV0ZWN0IGZvcm1hdCBhbmQgcGFyc2VcbiAgICpcbiAgICogRGV0ZWN0czpcbiAgICogLSBGcm9udG1hdHRlciAoc3RhcnRzIHdpdGggLS0tKVxuICAgKiAtIFB1cmUgWUFNTCAodmFsaWQgWUFNTCBvYmplY3QpXG4gICAqIC0gSlNPTiAoc3RhcnRzIHdpdGggeyBvciBbKVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFBhcnNpbmcgb3B0aW9ucyBmb3IgZWFjaCBmb3JtYXRcbiAgICogQHJldHVybnMgUGFyc2VkIHJlc3VsdCB3aXRoIGRldGVjdGVkIGZvcm1hdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IHNlcnZpY2UucGFyc2VBdXRvKGRhdGEsIHtcbiAgICogICBzb3VyY2U6ICdTa2lsbE1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAgICogfSk7XG4gICAqIGlmIChyZXN1bHQuZm9ybWF0ID09PSAnZnJvbnRtYXR0ZXInKSB7XG4gICAqICAgY29uc29sZS5sb2cocmVzdWx0LmRhdGEsIHJlc3VsdC5jb250ZW50KTtcbiAgICogfSBlbHNlIGlmIChyZXN1bHQuZm9ybWF0ID09PSAneWFtbCcpIHtcbiAgICogICBjb25zb2xlLmxvZyhyZXN1bHQuZGF0YSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwYXJzZUF1dG8oXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEF1dG9QYXJzZU9wdGlvbnMgPSB7fVxuICApOiBBdXRvUGFyc2VkUmVzdWx0IHtcbiAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmRldGVjdEZvcm1hdChkYXRhKTtcblxuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdmcm9udG1hdHRlcic6IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZUZyb250bWF0dGVyKGRhdGEsIG9wdGlvbnMuZnJvbnRtYXR0ZXJPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgZGF0YTogcGFyc2VkLmRhdGEsXG4gICAgICAgICAgY29udGVudDogcGFyc2VkLmNvbnRlbnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVB1cmVZYW1sKGRhdGEsIG9wdGlvbnMueWFtbE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICBkYXRhOiBwYXJzZWRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZUpzb24oZGF0YSwgb3B0aW9ucy5qc29uT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgIGRhdGE6IHBhcnNlZFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBkZXRlY3QgdmFsaWQgZm9ybWF0IChmcm9udG1hdHRlciwgWUFNTCwgb3IgSlNPTiknKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gWUFNTCBEVU1QSU5HXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBEdW1wIG9iamVjdCB0byBZQU1MIHN0cmluZ1xuICAgKlxuICAgKiBTdXBwb3J0czpcbiAgICogLSBGQUlMU0FGRV9TQ0hFTUEgKGRlZmF1bHQgLSBzdHJpbmdzIG9ubHksIG1vc3Qgc2VjdXJlKVxuICAgKiAtIERFRkFVTFRfU0NIRU1BIChmb3IgVGVtcGxhdGVNYW5hZ2VyIGNvbXBhdGliaWxpdHkpXG4gICAqIC0gQ09SRV9TQ0hFTUEgKGZvciBzcGVjaWFsIGNhc2VzKVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIE9iamVjdCB0byBzZXJpYWxpemVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEdW1wIG9wdGlvbnNcbiAgICogQHJldHVybnMgWUFNTCBzdHJpbmdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB5YW1sU3RyaW5nID0gc2VydmljZS5kdW1wWWFtbChkYXRhLCB7XG4gICAqICAgc2NoZW1hOiAnZmFpbHNhZmUnLFxuICAgKiAgIHNvcnRLZXlzOiB0cnVlLFxuICAgKiAgIHNraXBJbnZhbGlkOiB0cnVlLFxuICAgKiAgIG5vUmVmczogdHJ1ZVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBkdW1wWWFtbChkYXRhOiBhbnksIG9wdGlvbnM6IFlhbWxEdW1wT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICBzY2hlbWEgPSAnZmFpbHNhZmUnLFxuICAgICAgc29ydEtleXMgPSB0cnVlLFxuICAgICAgc2tpcEludmFsaWQgPSB0cnVlLFxuICAgICAgbm9SZWZzID0gdHJ1ZSxcbiAgICAgIGluZGVudCA9IDIsXG4gICAgICBsaW5lV2lkdGggPSA4MCxcbiAgICAgIGZsb3dMZXZlbCA9IC0xXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB5YW1sU2NoZW1hID0gdGhpcy5nZXRZYW1sU2NoZW1hKHNjaGVtYSk7XG5cbiAgICByZXR1cm4geWFtbC5kdW1wKGRhdGEsIHtcbiAgICAgIHNjaGVtYTogeWFtbFNjaGVtYSxcbiAgICAgIHNvcnRLZXlzLFxuICAgICAgc2tpcEludmFsaWQsXG4gICAgICBub1JlZnMsXG4gICAgICBpbmRlbnQsXG4gICAgICBsaW5lV2lkdGgsXG4gICAgICBmbG93TGV2ZWxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZnJvbnRtYXR0ZXIgKyBjb250ZW50IChNYXJrZG93biB3aXRoIFlBTUwpXG4gICAqXG4gICAqIE1ldGhvZHM6XG4gICAqIC0gJ21hdHRlcicgLSBVc2VzIG1hdHRlci5zdHJpbmdpZnkoKSAoU2tpbGxNYW5hZ2VyIHBhdHRlcm4pXG4gICAqIC0gJ21hbnVhbCcgLSBNYW51YWwgWUFNTCBkdW1wICsgY29uY2F0ZW5hdGlvbiAob3RoZXIgbWFuYWdlcnMpXG4gICAqXG4gICAqIEBwYXJhbSBtZXRhZGF0YSAtIEZyb250bWF0dGVyIG1ldGFkYXRhXG4gICAqIEBwYXJhbSBjb250ZW50IC0gTWFya2Rvd24gY29udGVudFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIER1bXAgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBNYXJrZG93biBzdHJpbmcgd2l0aCBmcm9udG1hdHRlclxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG1hcmtkb3duID0gc2VydmljZS5jcmVhdGVGcm9udG1hdHRlcihtZXRhZGF0YSwgY29udGVudCwge1xuICAgKiAgIHNjaGVtYTogJ2ZhaWxzYWZlJyxcbiAgICogICBtZXRob2Q6ICdtYXR0ZXInLFxuICAgKiAgIGNsZWFuTWV0YWRhdGE6IHRydWUsXG4gICAqICAgY2xlYW5pbmdTdHJhdGVneTogJ3JlbW92ZS11bmRlZmluZWQnXG4gICAqIH0pO1xuICAgKiAvLyBSZXR1cm5zOiAtLS1cXG5tZXRhZGF0YS4uLlxcbi0tLVxcblxcbkNvbnRlbnQuLi5cbiAgICogYGBgXG4gICAqL1xuICBjcmVhdGVGcm9udG1hdHRlcihcbiAgICBtZXRhZGF0YTogYW55LFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBGcm9udG1hdHRlckR1bXBPcHRpb25zID0ge31cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICBtZXRob2QgPSAnbWFudWFsJyxcbiAgICAgIGNsZWFuTWV0YWRhdGEgPSBmYWxzZSxcbiAgICAgIGNsZWFuaW5nU3RyYXRlZ3kgPSAncmVtb3ZlLXVuZGVmaW5lZCcsXG4gICAgICBzY2hlbWEgPSAnZmFpbHNhZmUnLFxuICAgICAgc29ydEtleXM6IF9zb3J0S2V5cyA9IHRydWUsXG4gICAgICBza2lwSW52YWxpZCA9IHRydWUsXG4gICAgICBub1JlZnMgPSB0cnVlXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBDbGVhbiBtZXRhZGF0YSBpZiByZXF1ZXN0ZWRcbiAgICBsZXQgcHJvY2Vzc2VkTWV0YWRhdGEgPSBjbGVhbk1ldGFkYXRhXG4gICAgICA/IHRoaXMuY2xlYW5NZXRhZGF0YShtZXRhZGF0YSwgeyBzdHJhdGVneTogY2xlYW5pbmdTdHJhdGVneSB9KVxuICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEZpeCAjOTEwOiBBcHBseSBjYW5vbmljYWwgZmllbGQgb3JkZXJpbmcgaW5zdGVhZCBvZiBhbHBoYWJldGljYWwgc29ydFxuICAgIHByb2Nlc3NlZE1ldGFkYXRhID0gb3JkZXJNZXRhZGF0YUZpZWxkcyhwcm9jZXNzZWRNZXRhZGF0YSk7XG5cbiAgICBpZiAobWV0aG9kID09PSAnbWF0dGVyJykge1xuICAgICAgLy8gVXNlIG1hdHRlci5zdHJpbmdpZnkoKSAoU2tpbGxNYW5hZ2VyIHBhdHRlcm4pXG4gICAgICByZXR1cm4gbWF0dGVyLnN0cmluZ2lmeShjb250ZW50LCBwcm9jZXNzZWRNZXRhZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1hbnVhbCBjb25zdHJ1Y3Rpb24gKG90aGVyIG1hbmFnZXJzKVxuICAgICAgY29uc3QgeWFtbFN0cmluZyA9IHRoaXMuZHVtcFlhbWwocHJvY2Vzc2VkTWV0YWRhdGEsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBzb3J0S2V5czogZmFsc2UsICAvLyBGaXggIzkxMDogZmllbGQgb3JkZXIgaXMgbm93IGNhbm9uaWNhbCwgbm90IGFscGhhYmV0aWNhbFxuICAgICAgICBza2lwSW52YWxpZCxcbiAgICAgICAgbm9SZWZzXG4gICAgICB9KTtcblxuICAgICAgLy8gQ29uc3RydWN0IGZyb250bWF0dGVyIG1hbnVhbGx5XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gYC0tLVxcbiR7eWFtbFN0cmluZ30tLS1cXG5cXG4ke2NvbnRlbnR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgLS0tXFxuJHt5YW1sU3RyaW5nfS0tLVxcbmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEpTT04gT1BFUkFUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUGFyc2UgSlNPTiB3aXRoIGVycm9yIGhhbmRsaW5nIGFuZCBzZWN1cml0eSBsb2dnaW5nXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gSlNPTiBzdHJpbmdcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBQYXJzZSBvcHRpb25zXG4gICAqIEByZXR1cm5zIFBhcnNlZCBvYmplY3RcbiAgICogQHRocm93cyBFcnJvciBpZiBwYXJzaW5nIGZhaWxzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGFyc2VkID0gc2VydmljZS5wYXJzZUpzb24oanNvblN0cmluZywge1xuICAgKiAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwYXJzZUpzb248VCA9IGFueT4oXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEpzb25QYXJzZU9wdGlvbnMgPSB7fVxuICApOiBUIHtcbiAgICBjb25zdCB7XG4gICAgICBtYXhTaXplID0gU2VyaWFsaXphdGlvblNlcnZpY2UuREVGQVVMVF9NQVhfQ09OVEVOVF9TSVpFLFxuICAgICAgdmFsaWRhdGVTdHJ1Y3R1cmUgPSBmYWxzZSxcbiAgICAgIHNvdXJjZSA9ICdTZXJpYWxpemF0aW9uU2VydmljZS5wYXJzZUpzb24nXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBTaXplIHZhbGlkYXRpb25cbiAgICB0aGlzLnZhbGlkYXRlU2l6ZShkYXRhLCBtYXhTaXplLCAnSlNPTiBjb250ZW50Jyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgLy8gU3RydWN0dXJlIHZhbGlkYXRpb25cbiAgICAgIGlmICh2YWxpZGF0ZVN0cnVjdHVyZSkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTiBtdXN0IGNvbnRhaW4gYW4gb2JqZWN0IGF0IHJvb3QgbGV2ZWwnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIud2FybihgSlNPTiBwYXJzaW5nIGZhaWxlZCBpbiAke3NvdXJjZX06ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgSlNPTjogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmluZ2lmeSBvYmplY3QgdG8gSlNPTlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIE9iamVjdCB0byBzZXJpYWxpemVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBTdHJpbmdpZnkgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBKU09OIHN0cmluZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGpzb25TdHJpbmcgPSBzZXJ2aWNlLnN0cmluZ2lmeUpzb24oZGF0YSwge1xuICAgKiAgIGluZGVudDogMixcbiAgICogICBjbGVhbk1ldGFkYXRhOiB0cnVlLFxuICAgKiAgIGNsZWFuaW5nU3RyYXRlZ3k6ICdyZW1vdmUtdW5kZWZpbmVkJ1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBzdHJpbmdpZnlKc29uKFxuICAgIGRhdGE6IGFueSxcbiAgICBvcHRpb25zOiBKc29uU3RyaW5naWZ5T3B0aW9ucyA9IHt9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qge1xuICAgICAgcHJldHR5ID0gZmFsc2UsXG4gICAgICBpbmRlbnQgPSAyLFxuICAgICAgY2xlYW5NZXRhZGF0YSA9IGZhbHNlLFxuICAgICAgY2xlYW5pbmdTdHJhdGVneSA9ICdyZW1vdmUtdW5kZWZpbmVkJ1xuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gQ2xlYW4gbWV0YWRhdGEgaWYgcmVxdWVzdGVkXG4gICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsZWFuTWV0YWRhdGFcbiAgICAgID8gdGhpcy5jbGVhbk1ldGFkYXRhKGRhdGEsIHsgc3RyYXRlZ3k6IGNsZWFuaW5nU3RyYXRlZ3kgfSlcbiAgICAgIDogZGF0YTtcblxuICAgIC8vIFVzZSBpbmRlbnQgaWYgcHJldHR5IGlzIHRydWUsIG90aGVyd2lzZSBubyBmb3JtYXR0aW5nXG4gICAgY29uc3QgaW5kZW50VmFsdWUgPSBwcmV0dHkgPyBpbmRlbnQgOiAwO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwcm9jZXNzZWREYXRhLCBudWxsLCBpbmRlbnRWYWx1ZSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUVUQURBVEEgVVRJTElUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDbGVhbiBtZXRhZGF0YSBieSByZW1vdmluZyB1bmRlZmluZWQvbnVsbCB2YWx1ZXNcbiAgICpcbiAgICogU3RyYXRlZ2llczpcbiAgICogLSAncmVtb3ZlLXVuZGVmaW5lZCcgLSBSZW1vdmUgdW5kZWZpbmVkIG9ubHkgKFNraWxsTWFuYWdlciwgVGVtcGxhdGVNYW5hZ2VyKVxuICAgKiAtICdyZW1vdmUtbnVsbCcgLSBSZW1vdmUgbnVsbCBvbmx5XG4gICAqIC0gJ3JlbW92ZS1ib3RoJyAtIFJlbW92ZSBib3RoIHVuZGVmaW5lZCBhbmQgbnVsbCAoQWdlbnRNYW5hZ2VyKVxuICAgKiAtICdub25lJyAtIE5vIGNsZWFuaW5nIChNZW1vcnlNYW5hZ2VyLCBFbnNlbWJsZU1hbmFnZXIpXG4gICAqXG4gICAqIEBwYXJhbSBtZXRhZGF0YSAtIE1ldGFkYXRhIG9iamVjdCB0byBjbGVhblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENsZWFuaW5nIG9wdGlvbnNcbiAgICogQHJldHVybnMgQ2xlYW5lZCBtZXRhZGF0YSAobmV3IG9iamVjdCwgb3JpZ2luYWwgbm90IG1vZGlmaWVkKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGNsZWFuZWQgPSBzZXJ2aWNlLmNsZWFuTWV0YWRhdGEobWV0YWRhdGEsIHtcbiAgICogICBzdHJhdGVneTogJ3JlbW92ZS11bmRlZmluZWQnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGNsZWFuTWV0YWRhdGEoXG4gICAgbWV0YWRhdGE6IGFueSxcbiAgICBvcHRpb25zOiBNZXRhZGF0YUNsZWFuT3B0aW9ucyA9IHt9XG4gICk6IGFueSB7XG4gICAgY29uc3QgeyBzdHJhdGVneSA9ICdyZW1vdmUtdW5kZWZpbmVkJywgcmVtb3ZlRW1wdHkgPSBmYWxzZSB9ID0gb3B0aW9ucztcblxuICAgIGlmIChzdHJhdGVneSA9PT0gJ25vbmUnICYmICFyZW1vdmVFbXB0eSkge1xuICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBub24tb2JqZWN0IGNhc2VzXG4gICAgaWYgKHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcgfHwgbWV0YWRhdGEgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXJyYXlzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0YWRhdGEpKSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IG51bGwvdW5kZWZpbmVkIGJhc2VkIG9uIHN0cmF0ZWd5XG4gICAgICBsZXQgY2xlYW5lZCA9IG1ldGFkYXRhLm1hcChpdGVtID0+IHRoaXMuY2xlYW5NZXRhZGF0YShpdGVtLCBvcHRpb25zKSk7XG5cbiAgICAgIGlmIChzdHJhdGVneSA9PT0gJ3JlbW92ZS11bmRlZmluZWQnKSB7XG4gICAgICAgIGNsZWFuZWQgPSBjbGVhbmVkLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSAncmVtb3ZlLW51bGwnKSB7XG4gICAgICAgIGNsZWFuZWQgPSBjbGVhbmVkLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IG51bGwpO1xuICAgICAgfSBlbHNlIGlmIChzdHJhdGVneSA9PT0gJ3JlbW92ZS1ib3RoJykge1xuICAgICAgICBjbGVhbmVkID0gY2xlYW5lZC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbGVhbmVkO1xuICAgIH1cblxuICAgIC8vIENsZWFuIG9iamVjdCBiYXNlZCBvbiBzdHJhdGVneVxuICAgIGNvbnN0IGNsZWFuZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgICAgaWYgKFRSQU5TSUVOVF9NRVRBREFUQV9GSUVMRFMuaGFzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZFJlbW92ZSA9XG4gICAgICAgIChzdHJhdGVneSA9PT0gJ3JlbW92ZS11bmRlZmluZWQnICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHx8XG4gICAgICAgIChzdHJhdGVneSA9PT0gJ3JlbW92ZS1udWxsJyAmJiB2YWx1ZSA9PT0gbnVsbCkgfHxcbiAgICAgICAgKHN0cmF0ZWd5ID09PSAncmVtb3ZlLWJvdGgnICYmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSk7XG5cbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNsZWFuIG5lc3RlZCBvYmplY3RzL2FycmF5c1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGNsZWFuZWRWYWx1ZSA9IHRoaXMuY2xlYW5NZXRhZGF0YSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgcmVtb3ZlIGVtcHR5IGFycmF5cy9vYmplY3RzXG4gICAgICAgICAgaWYgKHJlbW92ZUVtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gQXJyYXkuaXNBcnJheShjbGVhbmVkVmFsdWUpXG4gICAgICAgICAgICAgID8gY2xlYW5lZFZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA6IE9iamVjdC5rZXlzKGNsZWFuZWRWYWx1ZSkubGVuZ3RoID09PSAwO1xuXG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkpIHtcbiAgICAgICAgICAgICAgY2xlYW5lZFtrZXldID0gY2xlYW5lZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhbmVkW2tleV0gPSBjbGVhbmVkVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsZWFuZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsZWFuZWQ7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9STUFUIERFVEVDVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRGV0ZWN0IGZvcm1hdCBvZiBpbnB1dCBkYXRhXG4gICAqXG4gICAqIERldGVjdGlvbiBsb2dpYzpcbiAgICogMS4gQ2hlY2sgZm9yIGZyb250bWF0dGVyIChzdGFydHMgd2l0aCAtLS0gYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSlcbiAgICogMi4gQ2hlY2sgZm9yIEpTT04gKHN0YXJ0cyB3aXRoIHsgb3IgWylcbiAgICogMy4gVHJ5IHRvIHBhcnNlIGFzIFlBTUxcbiAgICogNC4gUmV0dXJuICd1bmtub3duJyBpZiBub25lIG1hdGNoXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3RyaW5nIHRvIGFuYWx5emVcbiAgICogQHJldHVybnMgRGV0ZWN0ZWQgZm9ybWF0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZm9ybWF0ID0gc2VydmljZS5kZXRlY3RGb3JtYXQoZGF0YSk7XG4gICAqIC8vIFJldHVybnM6ICdmcm9udG1hdHRlcicgfCAneWFtbCcgfCAnanNvbicgfCAndW5rbm93bidcbiAgICogYGBgXG4gICAqL1xuICBkZXRlY3RGb3JtYXQoZGF0YTogc3RyaW5nKTogRGV0ZWN0ZWRGb3JtYXQge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBkYXRhLnRyaW0oKTtcblxuICAgIC8vIENoZWNrIGZvciBmcm9udG1hdHRlclxuICAgIGlmICh0aGlzLmhhc0Zyb250bWF0dGVyKHRyaW1tZWQpKSB7XG4gICAgICByZXR1cm4gJ2Zyb250bWF0dGVyJztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgSlNPTlxuICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKSB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgSlNPTi5wYXJzZSh0cmltbWVkKTtcbiAgICAgICAgcmV0dXJuICdqc29uJztcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb3QgdmFsaWQgSlNPTiwgY29udGludWUgY2hlY2tpbmdcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcnkgcGFyc2luZyBhcyBZQU1MXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHlhbWwubG9hZCh0cmltbWVkLCB7XG4gICAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsXG4gICAgICAgIGpzb246IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWQgWUFNTCB0aGF0IHBhcnNlcyB0byBhbiBvYmplY3RcbiAgICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICd5YW1sJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCB2YWxpZCBZQU1MXG4gICAgfVxuXG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBkYXRhIGhhcyBmcm9udG1hdHRlciBtYXJrZXJzXG4gICAqXG4gICAqIENoZWNrcyBmb3IgJy0tLScgYXQgdGhlIHN0YXJ0IGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTdHJpbmcgdG8gY2hlY2tcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBoYXMgZnJvbnRtYXR0ZXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpZiAoc2VydmljZS5oYXNGcm9udG1hdHRlcihkYXRhKSkge1xuICAgKiAgIGNvbnN0IHJlc3VsdCA9IHNlcnZpY2UucGFyc2VGcm9udG1hdHRlcihkYXRhKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGhhc0Zyb250bWF0dGVyKGRhdGE6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBkYXRhLnRyaW0oKTtcbiAgICByZXR1cm4gdHJpbW1lZC5zdGFydHNXaXRoKCctLS0nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTRUNVUklUWSBVVElMSVRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIExvZyBzZWN1cml0eSBldmVudCAod3JhcHBlciBmb3IgU2VjdXJpdHlNb25pdG9yKVxuICAgKlxuICAgKiBQcm92aWRlcyBjb25zaXN0ZW50IHNlY3VyaXR5IGV2ZW50IGxvZ2dpbmcgYWNyb3NzIHNlcmlhbGl6YXRpb24gb3BlcmF0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIEV2ZW50IHR5cGVcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gRXZlbnQgc2V2ZXJpdHlcbiAgICogQHBhcmFtIHNvdXJjZSAtIEV2ZW50IHNvdXJjZVxuICAgKiBAcGFyYW0gZGV0YWlscyAtIEV2ZW50IGRldGFpbHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBzZXJ2aWNlLmxvZ1NlY3VyaXR5RXZlbnQoXG4gICAqICAgJ1lBTUxfUEFSU0VfU1VDQ0VTUycsXG4gICAqICAgJ0xPVycsXG4gICAqICAgJ1NraWxsTWFuYWdlci5pbXBvcnRFbGVtZW50JyxcbiAgICogICAnU3VjY2Vzc2Z1bGx5IHBhcnNlZCBZQU1MIGNvbnRlbnQnXG4gICAqICk7XG4gICAqIGBgYFxuICAgKi9cbiAgbG9nU2VjdXJpdHlFdmVudChcbiAgICB0eXBlOiBTZWN1cml0eUV2ZW50Wyd0eXBlJ10sXG4gICAgc2V2ZXJpdHk6ICdMT1cnIHwgJ01FRElVTScgfCAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIGRldGFpbHM6IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlLFxuICAgICAgc2V2ZXJpdHksXG4gICAgICBzb3VyY2UsXG4gICAgICBkZXRhaWxzXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc2l6ZSBsaW1pdHNcbiAgICpcbiAgICogVGhyb3dzIGVycm9yIGlmIGRhdGEgZXhjZWVkcyB0aGUgc3BlY2lmaWVkIG1heGltdW0gc2l6ZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdGEgdG8gY2hlY2tcbiAgICogQHBhcmFtIG1heFNpemUgLSBNYXhpbXVtIHNpemUgaW4gYnl0ZXNcbiAgICogQHBhcmFtIGNvbnRleHQgLSBDb250ZXh0IGZvciBlcnJvciBtZXNzYWdlc1xuICAgKiBAdGhyb3dzIEVycm9yIGlmIHNpemUgZXhjZWVkcyBsaW1pdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHNlcnZpY2UudmFsaWRhdGVTaXplKGRhdGEsIDY0ICogMTAyNCwgJ1lBTUwgZnJvbnRtYXR0ZXInKTtcbiAgICogLy8gVGhyb3dzIGlmIGRhdGEgPiA2NEtCXG4gICAqIGBgYFxuICAgKi9cbiAgdmFsaWRhdGVTaXplKGRhdGE6IHN0cmluZywgbWF4U2l6ZTogbnVtYmVyLCBjb250ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiBtYXhTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2NvbnRleHR9IGV4Y2VlZHMgYWxsb3dlZCBzaXplIG9mICR7bWF4U2l6ZX0gYnl0ZXMgKGFjdHVhbDogJHtkYXRhLmxlbmd0aH0gYnl0ZXMpYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBIRUxQRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgWUFNTCBzY2hlbWEgb2JqZWN0IGZyb20gc3RyaW5nIGlkZW50aWZpZXJcbiAgICpcbiAgICogQHBhcmFtIHNjaGVtYSAtIFNjaGVtYSBpZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIFlBTUwgc2NoZW1hIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRZYW1sU2NoZW1hKHNjaGVtYTogWWFtbFNjaGVtYSk6IHlhbWwuU2NoZW1hIHtcbiAgICBzd2l0Y2ggKHNjaGVtYSkge1xuICAgICAgY2FzZSAnZmFpbHNhZmUnOlxuICAgICAgICByZXR1cm4geWFtbC5GQUlMU0FGRV9TQ0hFTUE7XG4gICAgICBjYXNlICdkZWZhdWx0JzpcbiAgICAgICAgcmV0dXJuIHlhbWwuREVGQVVMVF9TQ0hFTUE7XG4gICAgICBjYXNlICdjb3JlJzpcbiAgICAgICAgcmV0dXJuIHlhbWwuQ09SRV9TQ0hFTUE7XG4gICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgLy8gSlNPTl9TQ0hFTUEgPSBGQUlMU0FGRSArIGJvb2wvaW50L2Zsb2F0L251bGwgKHNhZmVyIHRoYW4gREVGQVVMVCB3aGljaCBhZGRzIHRpbWVzdGFtcHMpXG4gICAgICAgIC8vIFVzZSB0aGlzIGZvciBtZW1vcmllcyB0byBwcmVzZXJ2ZSBib29sZWFucyAoYXV0b0xvYWQpIGFuZCBudW1iZXJzIChwcmlvcml0eSlcbiAgICAgICAgcmV0dXJuIHlhbWwuSlNPTl9TQ0hFTUE7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2dnZXIud2FybihgVW5rbm93biBZQU1MIHNjaGVtYSAnJHtzY2hlbWF9JywgdXNpbmcgRkFJTFNBRkVfU0NIRU1BYCk7XG4gICAgICAgIHJldHVybiB5YW1sLkZBSUxTQUZFX1NDSEVNQTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -73,6 +73,15 @@ export interface IElementMetadata {
73
73
  * @see resolveElementPolicy
74
74
  */
75
75
  gatekeeper?: ElementGatekeeperPolicy;
76
+ /**
77
+ * Runtime-only diagnostics for malformed gatekeeper policy discovered during load.
78
+ * This is reporting state, not enforceable policy, and must never be persisted.
79
+ */
80
+ gatekeeperDiagnostics?: {
81
+ valid: false;
82
+ enforceable: false;
83
+ message: string;
84
+ };
76
85
  }
77
86
  export interface Reference {
78
87
  type: ReferenceType;
@@ -1 +1 @@
1
- {"version":3,"file":"IElement.d.ts","sourceRoot":"","sources":["../../../src/types/elements/IElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IElement.d.ts","sourceRoot":"","sources":["../../../src/types/elements/IElement.ts"],"names":[],"mappings":"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"}
@@ -27,4 +27,4 @@ export var ElementStatus;
27
27
  ElementStatus["ERROR"] = "error";
28
28
  ElementStatus["SUSPENDED"] = "suspended";
29
29
  })(ElementStatus || (ElementStatus = {}));
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFxR0gsZ0NBQWdDO0FBQ2hDLE1BQU0sQ0FBTixJQUFZLGFBT1g7QUFQRCxXQUFZLGFBQWE7SUFDdkIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsMENBQXlCLENBQUE7SUFDekIsNEJBQVcsQ0FBQTtJQUNYLHdDQUF1QixDQUFBLENBQUssNkJBQTZCO0FBQzNELENBQUMsRUFQVyxhQUFhLEtBQWIsYUFBYSxRQU94QjtBQThCRCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFOLElBQVksYUFPWDtBQVBELFdBQVksYUFBYTtJQUN2QixzQ0FBcUIsQ0FBQTtJQUNyQiwwQ0FBeUIsQ0FBQTtJQUN6QixrQ0FBaUIsQ0FBQTtJQUNqQiw4Q0FBNkIsQ0FBQTtJQUM3QixnQ0FBZSxDQUFBO0lBQ2Ysd0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVBXLGFBQWEsS0FBYixhQUFhLFFBT3hCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3JlIGVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsIGVsZW1lbnQgdHlwZXMgbXVzdCBpbXBsZW1lbnQuXG4gKiBUaGlzIHByb3ZpZGVzIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgcG9ydGZvbGlvIHN5c3RlbSB3aXRoIHN1cHBvcnQgZm9yOlxuICogLSBJZGVudGl0eSBhbmQgdmVyc2lvbmluZ1xuICogLSBSZWZlcmVuY2VzIHRvIGV4dGVybmFsL2ludGVybmFsIHJlc291cmNlc1xuICogLSBFeHRlbnNpYmlsaXR5IGZvciBmdXR1cmUgZmVhdHVyZXNcbiAqIC0gUmF0aW5ncyBhbmQgZmVlZGJhY2sgbWVjaGFuaXNtc1xuICogLSBMaWZlY3ljbGUgbWFuYWdlbWVudFxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5cbi8vIENvcmUgaWRlbnRpdHkgYW5kIG1ldGFkYXRhXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50IHtcbiAgLy8gSWRlbnRpdHlcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogRWxlbWVudFR5cGU7XG4gIHZlcnNpb246IHN0cmluZztcbiAgXG4gIC8vIE1ldGFkYXRhXG4gIG1ldGFkYXRhOiBJRWxlbWVudE1ldGFkYXRhO1xuICBcbiAgLy8gRmVhdHVyZXNcbiAgcmVmZXJlbmNlcz86IFJlZmVyZW5jZVtdO1xuICBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcmF0aW5ncz86IEVsZW1lbnRSYXRpbmdzO1xuICBcbiAgLy8gQ29yZSBvcGVyYXRpb25zXG4gIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0O1xuICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkO1xuICByZWNlaXZlRmVlZGJhY2s/KGZlZWRiYWNrOiBzdHJpbmcsIGNvbnRleHQ/OiBGZWVkYmFja0NvbnRleHQpOiB2b2lkO1xuICBcbiAgLy8gTGlmZWN5Y2xlIChvcHRpb25hbClcbiAgYmVmb3JlQWN0aXZhdGU/KCk6IFByb21pc2U8dm9pZD47XG4gIGFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBhZnRlckFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0dXMoKTogRWxlbWVudFN0YXR1cztcbn1cblxuLy8gRWxlbWVudCBtZXRhZGF0YSBjb21tb24gdG8gYWxsIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50TWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU/OiBFbGVtZW50VHlwZTsgICAgICAgLy8gRWxlbWVudCB0eXBlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB0eXBlIHNhZmV0eVxuICBhdXRob3I/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWQ/OiBzdHJpbmc7XG4gIG1vZGlmaWVkPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG5cbiAgLy8gUmVmZXJlbmNlcyBzdXBwb3J0XG4gIGRlcGVuZGVuY2llcz86IEVsZW1lbnREZXBlbmRlbmN5W107XG5cbiAgLy8gRXh0ZW5zaWJpbGl0eVxuICBjdXN0b20/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiB2Mi4wIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlOiBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgbG9hZGVkIGZyb20gWUFNTCBmcm9udG1hdHRlci5cbiAgICpcbiAgICogRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgbWFuYWdlcnMgZXh0cmFjdCBgaW5zdHJ1Y3Rpb25zYCBmcm9tIHRoZSBwYXJzZWQgWUFNTFxuICAgKiBtZXRhZGF0YSBhbmQgYXNzaWduIGl0IHRvIGBlbGVtZW50Lmluc3RydWN0aW9uc2AuIFRoaXMgZmllbGQgaXMgdGhlbiBkZWxldGVkXG4gICAqIGZyb20gdGhlIG1ldGFkYXRhIG9iamVjdCB0byBhdm9pZCBkdXBsaWNhdGlvbi4gSXRzIHByZXNlbmNlIGluIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICogaXMgdXNlZCB0byBkZXRlY3QgdjIgZm9ybWF0IHZzIHYxIChib2R5LXRleHQtb25seSkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2luY2UgSXNzdWUgIzYwMiDigJQgRHVhbC1maWVsZCBlbGVtZW50IGFyY2hpdGVjdHVyZVxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHYXRla2VlcGVyIGFjY2Vzcy1jb250cm9sIHBvbGljeSBmb3IgdGhpcyBlbGVtZW50LlxuICAgKlxuICAgKiBXaGVuIHRoZSBlbGVtZW50IGlzIGFjdGl2ZSwgaXRzIHBvbGljeSBwYXJ0aWNpcGF0ZXMgaW4gTGF5ZXIgMlxuICAgKiAoZWxlbWVudCBwb2xpY3kgcmVzb2x1dGlvbikgb2YgdGhlIEdhdGVrZWVwZXIgZW5mb3JjZW1lbnQgcGlwZWxpbmUuXG4gICAqIHtAbGluayByZXNvbHZlRWxlbWVudFBvbGljeX0gaXRlcmF0ZXMgYWxsIGFjdGl2ZSBlbGVtZW50cyBhbmQgZXZhbHVhdGVzXG4gICAqIHRoZWlyIGBnYXRla2VlcGVyYCBmaWVsZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBNQ1AtQVFMIG9wZXJhdGlvblxuICAgKiBzaG91bGQgYmUgYWxsb3dlZCwgZGVuaWVkLCBvciByZXF1aXJlIGNvbmZpcm1hdGlvbi5cbiAgICpcbiAgICogUG9saWN5IGZpZWxkcyAoYWxsIG9wdGlvbmFsKTpcbiAgICogLSBgYWxsb3dgICDigJQgT3BlcmF0aW9ucyBhdXRvLWFwcHJvdmVkIHdoZW4gdGhpcyBlbGVtZW50IGlzIGFjdGl2ZVxuICAgKiAtIGBjb25maXJtYCDigJQgT3BlcmF0aW9ucyByZXF1aXJpbmcgdXNlciBjb25maXJtYXRpb25cbiAgICogLSBgZGVueWAgICDigJQgT3BlcmF0aW9ucyBibG9ja2VkIG91dHJpZ2h0XG4gICAqIC0gYHNjb3BlUmVzdHJpY3Rpb25zYCDigJQgUmVzdHJpY3Qgb3BlcmF0aW9ucyB0by9mcm9tIHNwZWNpZmljIGVsZW1lbnQgdHlwZXNcbiAgICpcbiAgICogRGVmaW5lZCBpbiBZQU1MIGZyb250IG1hdHRlciBhbmQgdmFsaWRhdGVkIGF0IGJvdGggd3JpdGUgdGltZVxuICAgKiAoe0BsaW5rIHZhbGlkYXRlR2F0ZWtlZXBlclBvbGljeX0pIGFuZCByZWFkIHRpbWUgdmlhXG4gICAqIHtAbGluayBwYXJzZUVsZW1lbnRQb2xpY3l9LiBNYWxmb3JtZWQgcG9saWNpZXMgYXJlIGxvZ2dlZCBhbmQgc3RyaXBwZWQuXG4gICAqXG4gICAqIEBzaW5jZSBJc3N1ZSAjNTI0IOKAlCBFeHRlbmRlZCBmcm9tIGFnZW50cyB0byBhbGwgZWxlbWVudCB0eXBlc1xuICAgKiBAc2VlIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5XG4gICAqIEBzZWUgcmVzb2x2ZUVsZW1lbnRQb2xpY3lcbiAgICovXG4gIGdhdGVrZWVwZXI/OiBFbGVtZW50R2F0ZWtlZXBlclBvbGljeTtcbn1cblxuLy8gUmVmZXJlbmNlIHRvIGV4dGVybmFsIG9yIGludGVybmFsIHJlc291cmNlc1xuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2Uge1xuICB0eXBlOiBSZWZlcmVuY2VUeXBlO1xuICB1cmk6IHN0cmluZzsgICAgICAgICAgICAgIC8vIFVSTCwgZmlsZSBwYXRoLCBkb2N1bWVudCBJRCwgcG9ydGZvbGlvIHJlZmVyZW5jZVxuICB0aXRsZTogc3RyaW5nOyAgICAgICAgICAgIC8vIEh1bWFuLXJlYWRhYmxlIG5hbWVcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7ICAgICAvLyBXaGF0IHRoaXMgcmVmZXJlbmNlIHByb3ZpZGVzXG4gIHJlcXVpcmVkPzogYm9vbGVhbjsgICAgICAgLy8gSXMgdGhpcyByZWZlcmVuY2UgZXNzZW50aWFsP1xuICByYWdFbmFibGVkPzogYm9vbGVhbjsgICAgIC8vIFNob3VsZCB0aGlzIGJlIGxvYWRlZCBmb3IgUkFHP1xuICBjYWNoZWFibGU/OiBib29sZWFuOyAgICAgIC8vIENhbiB0aGlzIGJlIGNhY2hlZCBsb2NhbGx5P1xuICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7IC8vIEhvdyBvZnRlbiB0byByZWZyZXNoIChpbiBob3Vycylcbn1cblxuLy8gVHlwZXMgb2YgcmVmZXJlbmNlcyBzdXBwb3J0ZWRcbmV4cG9ydCBlbnVtIFJlZmVyZW5jZVR5cGUge1xuICBJTlRFUk5BTCA9ICdpbnRlcm5hbCcsICAgICAgLy8gUmVmZXJlbmNlIHRvIGFub3RoZXIgZWxlbWVudFxuICBFWFRFUk5BTCA9ICdleHRlcm5hbCcsICAgICAgLy8gV2ViIFVSTFxuICBET0NVTUVOVCA9ICdkb2N1bWVudCcsICAgICAgLy8gTG9jYWwgb3IgUkFHIGRvY3VtZW50XG4gIFJFUE9TSVRPUlkgPSAncmVwb3NpdG9yeScsICAvLyBHaXQgcmVwb3NpdG9yeVxuICBBUEkgPSAnYXBpJywgICAgICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnRcbiAgUE9SVEZPTElPID0gJ3BvcnRmb2xpbycgICAgIC8vIFJlZmVyZW5jZSB3aXRoaW4gcG9ydGZvbGlvXG59XG5cbi8vIEVsZW1lbnQgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9uXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREZXBlbmRlbmN5IHtcbiAgZWxlbWVudElkOiBzdHJpbmc7XG4gIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZTtcbiAgdmVyc2lvbkNvbnN0cmFpbnQ/OiBzdHJpbmc7ICAvLyBlLmcuLCBcIl4xLjAuMFwiLCBcIj49Mi4wLjBcIlxuICBvcHRpb25hbD86IGJvb2xlYW47XG59XG5cbi8vIFZhbGlkYXRpb24gcmVzdWx0IGZvciBlbGVtZW50c1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIHZhbGlkOiBib29sZWFuO1xuICBlcnJvcnM/OiBWYWxpZGF0aW9uRXJyb3JbXTtcbiAgd2FybmluZ3M/OiBWYWxpZGF0aW9uV2FybmluZ1tdO1xuICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvciB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uV2FybmluZyB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2V2ZXJpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnO1xufVxuXG4vLyBFbGVtZW50IHN0YXR1cyB0cmFja2luZ1xuZXhwb3J0IGVudW0gRWxlbWVudFN0YXR1cyB7XG4gIElOQUNUSVZFID0gJ2luYWN0aXZlJyxcbiAgQUNUSVZBVElORyA9ICdhY3RpdmF0aW5nJyxcbiAgQUNUSVZFID0gJ2FjdGl2ZScsXG4gIERFQUNUSVZBVElORyA9ICdkZWFjdGl2YXRpbmcnLFxuICBFUlJPUiA9ICdlcnJvcicsXG4gIFNVU1BFTkRFRCA9ICdzdXNwZW5kZWQnXG59XG5cbi8vIFJhdGluZyBzeXN0ZW0gZm9yIGNvbnRpbnVvdXMgaW1wcm92ZW1lbnRcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFJhdGluZ3Mge1xuICBhaVJhdGluZzogbnVtYmVyOyAgICAgICAgICAgICAgLy8gMC01IHN0YXJzIChBSSBldmFsdWF0aW9uKVxuICB1c2VyUmF0aW5nPzogbnVtYmVyOyAgICAgICAgICAgLy8gMC01IHN0YXJzICh1c2VyIGZlZWRiYWNrKVxuICByYXRpbmdDb3VudDogbnVtYmVyOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIHJhdGluZ3NcbiAgbGFzdEV2YWx1YXRlZDogRGF0ZTsgICAgICAgICAgLy8gV2hlbiBsYXN0IGV2YWx1YXRlZFxuICBjb25maWRlbmNlOiBudW1iZXI7ICAgICAgICAgICAgLy8gMC0xIGNvbmZpZGVuY2UgaW4gcmF0aW5nXG4gIFxuICAvLyBEZXRhaWxlZCBicmVha2Rvd25zIChjdXN0b21pemFibGUgcGVyIGVsZW1lbnQgdHlwZSlcbiAgYnJlYWtkb3duPzogUmF0aW5nQnJlYWtkb3duO1xuICBcbiAgLy8gRGVsdGEgdHJhY2tpbmdcbiAgcmF0aW5nRGVsdGE/OiBudW1iZXI7ICAgICAgICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIEFJIGFuZCB1c2VyIHJhdGluZ1xuICB0cmVuZDogJ2ltcHJvdmluZycgfCAnZGVjbGluaW5nJyB8ICdzdGFibGUnO1xuICBcbiAgLy8gRmVlZGJhY2sgaGlzdG9yeVxuICBmZWVkYmFja0hpc3Rvcnk/OiBVc2VyRmVlZGJhY2tbXTtcbn1cblxuLy8gQmFzZSByYXRpbmcgYnJlYWtkb3duIC0gZWxlbWVudCB0eXBlcyBjYW4gZXh0ZW5kIHRoaXNcbmV4cG9ydCBpbnRlcmZhY2UgUmF0aW5nQnJlYWtkb3duIHtcbiAgLy8gQmFzZSBtZXRyaWNzIGFsbCBlbGVtZW50cyBzaGFyZVxuICBlZmZlY3RpdmVuZXNzOiBudW1iZXI7ICAgICAgICAgLy8gSG93IHdlbGwgaXQgYWNoaWV2ZXMgaXRzIHB1cnBvc2VcbiAgcmVsaWFiaWxpdHk6IG51bWJlcjsgICAgICAgICAgLy8gSG93IGNvbnNpc3RlbnQgaXQgaXNcbiAgdXNhYmlsaXR5OiBudW1iZXI7ICAgICAgICAgICAvLyBIb3cgZWFzeSB0byB3b3JrIHdpdGhcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0cmljcyAodmlhIGluZGV4IHNpZ25hdHVyZSlcbiAgW2tleTogc3RyaW5nXTogbnVtYmVyO1xufVxuXG4vLyBVc2VyIGZlZWRiYWNrIHRyYWNraW5nXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJGZWVkYmFjayB7XG4gIHRpbWVzdGFtcDogRGF0ZTtcbiAgZmVlZGJhY2s6IHN0cmluZzsgICAgICAgICAgICAgLy8gTmF0dXJhbCBsYW5ndWFnZSBmZWVkYmFja1xuICBzZW50aW1lbnQ6ICdwb3NpdGl2ZScgfCAnbmVnYXRpdmUnIHwgJ25ldXRyYWwnO1xuICBpbmZlcnJlZFJhdGluZz86IG51bWJlcjsgICAgICAvLyBSYXRpbmcgaW5mZXJyZWQgZnJvbSBmZWVkYmFja1xuICBjb250ZXh0PzogRmVlZGJhY2tDb250ZXh0OyAgICAvLyBXaGF0IHdhcyBoYXBwZW5pbmdcbiAgZWxlbWVudFZlcnNpb24/OiBzdHJpbmc7ICAgICAgLy8gVmVyc2lvbiBhdCB0aW1lIG9mIGZlZWRiYWNrXG59XG5cbi8vIENvbnRleHQgZm9yIGZlZWRiYWNrXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ29udGV4dCB7XG4gIHRhc2s/OiBzdHJpbmc7ICAgICAgICAgICAgICAgIC8vIFdoYXQgdGFzayB3YXMgYmVpbmcgcGVyZm9ybWVkXG4gIHJlbGF0ZWRFbGVtZW50cz86IHN0cmluZ1tdOyAgIC8vIE90aGVyIGFjdGl2ZSBlbGVtZW50c1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7ICAgICAgICAgIC8vIEZvciBncm91cGluZyByZWxhdGVkIGZlZWRiYWNrXG4gIGVudmlyb25tZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vIFNjaGVtYSB2ZXJzaW9uaW5nIHN1cHBvcnRcbmV4cG9ydCBpbnRlcmZhY2UgSVNjaGVtYVZlcnNpb24ge1xuICBzY2hlbWFWZXJzaW9uPzogc3RyaW5nOyAgICAgICAvLyBUcmFjayBpbnRlcmZhY2UgdmVyc2lvblxuICBtaWdyYXRlPyhmcm9tVmVyc2lvbjogc3RyaW5nKTogdm9pZDsgIC8vIE1pZ3JhdGlvbiBzdXBwb3J0XG59Il19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUErR0gsZ0NBQWdDO0FBQ2hDLE1BQU0sQ0FBTixJQUFZLGFBT1g7QUFQRCxXQUFZLGFBQWE7SUFDdkIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsMENBQXlCLENBQUE7SUFDekIsNEJBQVcsQ0FBQTtJQUNYLHdDQUF1QixDQUFBLENBQUssNkJBQTZCO0FBQzNELENBQUMsRUFQVyxhQUFhLEtBQWIsYUFBYSxRQU94QjtBQThCRCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFOLElBQVksYUFPWDtBQVBELFdBQVksYUFBYTtJQUN2QixzQ0FBcUIsQ0FBQTtJQUNyQiwwQ0FBeUIsQ0FBQTtJQUN6QixrQ0FBaUIsQ0FBQTtJQUNqQiw4Q0FBNkIsQ0FBQTtJQUM3QixnQ0FBZSxDQUFBO0lBQ2Ysd0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVBXLGFBQWEsS0FBYixhQUFhLFFBT3hCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3JlIGVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsIGVsZW1lbnQgdHlwZXMgbXVzdCBpbXBsZW1lbnQuXG4gKiBUaGlzIHByb3ZpZGVzIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgcG9ydGZvbGlvIHN5c3RlbSB3aXRoIHN1cHBvcnQgZm9yOlxuICogLSBJZGVudGl0eSBhbmQgdmVyc2lvbmluZ1xuICogLSBSZWZlcmVuY2VzIHRvIGV4dGVybmFsL2ludGVybmFsIHJlc291cmNlc1xuICogLSBFeHRlbnNpYmlsaXR5IGZvciBmdXR1cmUgZmVhdHVyZXNcbiAqIC0gUmF0aW5ncyBhbmQgZmVlZGJhY2sgbWVjaGFuaXNtc1xuICogLSBMaWZlY3ljbGUgbWFuYWdlbWVudFxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5cbi8vIENvcmUgaWRlbnRpdHkgYW5kIG1ldGFkYXRhXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50IHtcbiAgLy8gSWRlbnRpdHlcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogRWxlbWVudFR5cGU7XG4gIHZlcnNpb246IHN0cmluZztcbiAgXG4gIC8vIE1ldGFkYXRhXG4gIG1ldGFkYXRhOiBJRWxlbWVudE1ldGFkYXRhO1xuICBcbiAgLy8gRmVhdHVyZXNcbiAgcmVmZXJlbmNlcz86IFJlZmVyZW5jZVtdO1xuICBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcmF0aW5ncz86IEVsZW1lbnRSYXRpbmdzO1xuICBcbiAgLy8gQ29yZSBvcGVyYXRpb25zXG4gIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0O1xuICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkO1xuICByZWNlaXZlRmVlZGJhY2s/KGZlZWRiYWNrOiBzdHJpbmcsIGNvbnRleHQ/OiBGZWVkYmFja0NvbnRleHQpOiB2b2lkO1xuICBcbiAgLy8gTGlmZWN5Y2xlIChvcHRpb25hbClcbiAgYmVmb3JlQWN0aXZhdGU/KCk6IFByb21pc2U8dm9pZD47XG4gIGFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBhZnRlckFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0dXMoKTogRWxlbWVudFN0YXR1cztcbn1cblxuLy8gRWxlbWVudCBtZXRhZGF0YSBjb21tb24gdG8gYWxsIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50TWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU/OiBFbGVtZW50VHlwZTsgICAgICAgLy8gRWxlbWVudCB0eXBlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB0eXBlIHNhZmV0eVxuICBhdXRob3I/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWQ/OiBzdHJpbmc7XG4gIG1vZGlmaWVkPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG5cbiAgLy8gUmVmZXJlbmNlcyBzdXBwb3J0XG4gIGRlcGVuZGVuY2llcz86IEVsZW1lbnREZXBlbmRlbmN5W107XG5cbiAgLy8gRXh0ZW5zaWJpbGl0eVxuICBjdXN0b20/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiB2Mi4wIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlOiBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgbG9hZGVkIGZyb20gWUFNTCBmcm9udG1hdHRlci5cbiAgICpcbiAgICogRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgbWFuYWdlcnMgZXh0cmFjdCBgaW5zdHJ1Y3Rpb25zYCBmcm9tIHRoZSBwYXJzZWQgWUFNTFxuICAgKiBtZXRhZGF0YSBhbmQgYXNzaWduIGl0IHRvIGBlbGVtZW50Lmluc3RydWN0aW9uc2AuIFRoaXMgZmllbGQgaXMgdGhlbiBkZWxldGVkXG4gICAqIGZyb20gdGhlIG1ldGFkYXRhIG9iamVjdCB0byBhdm9pZCBkdXBsaWNhdGlvbi4gSXRzIHByZXNlbmNlIGluIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICogaXMgdXNlZCB0byBkZXRlY3QgdjIgZm9ybWF0IHZzIHYxIChib2R5LXRleHQtb25seSkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2luY2UgSXNzdWUgIzYwMiDigJQgRHVhbC1maWVsZCBlbGVtZW50IGFyY2hpdGVjdHVyZVxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHYXRla2VlcGVyIGFjY2Vzcy1jb250cm9sIHBvbGljeSBmb3IgdGhpcyBlbGVtZW50LlxuICAgKlxuICAgKiBXaGVuIHRoZSBlbGVtZW50IGlzIGFjdGl2ZSwgaXRzIHBvbGljeSBwYXJ0aWNpcGF0ZXMgaW4gTGF5ZXIgMlxuICAgKiAoZWxlbWVudCBwb2xpY3kgcmVzb2x1dGlvbikgb2YgdGhlIEdhdGVrZWVwZXIgZW5mb3JjZW1lbnQgcGlwZWxpbmUuXG4gICAqIHtAbGluayByZXNvbHZlRWxlbWVudFBvbGljeX0gaXRlcmF0ZXMgYWxsIGFjdGl2ZSBlbGVtZW50cyBhbmQgZXZhbHVhdGVzXG4gICAqIHRoZWlyIGBnYXRla2VlcGVyYCBmaWVsZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBNQ1AtQVFMIG9wZXJhdGlvblxuICAgKiBzaG91bGQgYmUgYWxsb3dlZCwgZGVuaWVkLCBvciByZXF1aXJlIGNvbmZpcm1hdGlvbi5cbiAgICpcbiAgICogUG9saWN5IGZpZWxkcyAoYWxsIG9wdGlvbmFsKTpcbiAgICogLSBgYWxsb3dgICDigJQgT3BlcmF0aW9ucyBhdXRvLWFwcHJvdmVkIHdoZW4gdGhpcyBlbGVtZW50IGlzIGFjdGl2ZVxuICAgKiAtIGBjb25maXJtYCDigJQgT3BlcmF0aW9ucyByZXF1aXJpbmcgdXNlciBjb25maXJtYXRpb25cbiAgICogLSBgZGVueWAgICDigJQgT3BlcmF0aW9ucyBibG9ja2VkIG91dHJpZ2h0XG4gICAqIC0gYHNjb3BlUmVzdHJpY3Rpb25zYCDigJQgUmVzdHJpY3Qgb3BlcmF0aW9ucyB0by9mcm9tIHNwZWNpZmljIGVsZW1lbnQgdHlwZXNcbiAgICpcbiAgICogRGVmaW5lZCBpbiBZQU1MIGZyb250IG1hdHRlciBhbmQgdmFsaWRhdGVkIGF0IGJvdGggd3JpdGUgdGltZVxuICAgKiAoe0BsaW5rIHZhbGlkYXRlR2F0ZWtlZXBlclBvbGljeX0pIGFuZCByZWFkIHRpbWUgdmlhXG4gICAqIHtAbGluayBwYXJzZUVsZW1lbnRQb2xpY3l9LiBNYWxmb3JtZWQgcG9saWNpZXMgYXJlIGxvZ2dlZCBhbmQgc3RyaXBwZWQuXG4gICAqXG4gICAqIEBzaW5jZSBJc3N1ZSAjNTI0IOKAlCBFeHRlbmRlZCBmcm9tIGFnZW50cyB0byBhbGwgZWxlbWVudCB0eXBlc1xuICAgKiBAc2VlIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5XG4gICAqIEBzZWUgcmVzb2x2ZUVsZW1lbnRQb2xpY3lcbiAgICovXG4gIGdhdGVrZWVwZXI/OiBFbGVtZW50R2F0ZWtlZXBlclBvbGljeTtcblxuICAvKipcbiAgICogUnVudGltZS1vbmx5IGRpYWdub3N0aWNzIGZvciBtYWxmb3JtZWQgZ2F0ZWtlZXBlciBwb2xpY3kgZGlzY292ZXJlZCBkdXJpbmcgbG9hZC5cbiAgICogVGhpcyBpcyByZXBvcnRpbmcgc3RhdGUsIG5vdCBlbmZvcmNlYWJsZSBwb2xpY3ksIGFuZCBtdXN0IG5ldmVyIGJlIHBlcnNpc3RlZC5cbiAgICovXG4gIGdhdGVrZWVwZXJEaWFnbm9zdGljcz86IHtcbiAgICB2YWxpZDogZmFsc2U7XG4gICAgZW5mb3JjZWFibGU6IGZhbHNlO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgfTtcbn1cblxuLy8gUmVmZXJlbmNlIHRvIGV4dGVybmFsIG9yIGludGVybmFsIHJlc291cmNlc1xuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2Uge1xuICB0eXBlOiBSZWZlcmVuY2VUeXBlO1xuICB1cmk6IHN0cmluZzsgICAgICAgICAgICAgIC8vIFVSTCwgZmlsZSBwYXRoLCBkb2N1bWVudCBJRCwgcG9ydGZvbGlvIHJlZmVyZW5jZVxuICB0aXRsZTogc3RyaW5nOyAgICAgICAgICAgIC8vIEh1bWFuLXJlYWRhYmxlIG5hbWVcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7ICAgICAvLyBXaGF0IHRoaXMgcmVmZXJlbmNlIHByb3ZpZGVzXG4gIHJlcXVpcmVkPzogYm9vbGVhbjsgICAgICAgLy8gSXMgdGhpcyByZWZlcmVuY2UgZXNzZW50aWFsP1xuICByYWdFbmFibGVkPzogYm9vbGVhbjsgICAgIC8vIFNob3VsZCB0aGlzIGJlIGxvYWRlZCBmb3IgUkFHP1xuICBjYWNoZWFibGU/OiBib29sZWFuOyAgICAgIC8vIENhbiB0aGlzIGJlIGNhY2hlZCBsb2NhbGx5P1xuICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7IC8vIEhvdyBvZnRlbiB0byByZWZyZXNoIChpbiBob3Vycylcbn1cblxuLy8gVHlwZXMgb2YgcmVmZXJlbmNlcyBzdXBwb3J0ZWRcbmV4cG9ydCBlbnVtIFJlZmVyZW5jZVR5cGUge1xuICBJTlRFUk5BTCA9ICdpbnRlcm5hbCcsICAgICAgLy8gUmVmZXJlbmNlIHRvIGFub3RoZXIgZWxlbWVudFxuICBFWFRFUk5BTCA9ICdleHRlcm5hbCcsICAgICAgLy8gV2ViIFVSTFxuICBET0NVTUVOVCA9ICdkb2N1bWVudCcsICAgICAgLy8gTG9jYWwgb3IgUkFHIGRvY3VtZW50XG4gIFJFUE9TSVRPUlkgPSAncmVwb3NpdG9yeScsICAvLyBHaXQgcmVwb3NpdG9yeVxuICBBUEkgPSAnYXBpJywgICAgICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnRcbiAgUE9SVEZPTElPID0gJ3BvcnRmb2xpbycgICAgIC8vIFJlZmVyZW5jZSB3aXRoaW4gcG9ydGZvbGlvXG59XG5cbi8vIEVsZW1lbnQgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9uXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREZXBlbmRlbmN5IHtcbiAgZWxlbWVudElkOiBzdHJpbmc7XG4gIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZTtcbiAgdmVyc2lvbkNvbnN0cmFpbnQ/OiBzdHJpbmc7ICAvLyBlLmcuLCBcIl4xLjAuMFwiLCBcIj49Mi4wLjBcIlxuICBvcHRpb25hbD86IGJvb2xlYW47XG59XG5cbi8vIFZhbGlkYXRpb24gcmVzdWx0IGZvciBlbGVtZW50c1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIHZhbGlkOiBib29sZWFuO1xuICBlcnJvcnM/OiBWYWxpZGF0aW9uRXJyb3JbXTtcbiAgd2FybmluZ3M/OiBWYWxpZGF0aW9uV2FybmluZ1tdO1xuICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvciB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uV2FybmluZyB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2V2ZXJpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnO1xufVxuXG4vLyBFbGVtZW50IHN0YXR1cyB0cmFja2luZ1xuZXhwb3J0IGVudW0gRWxlbWVudFN0YXR1cyB7XG4gIElOQUNUSVZFID0gJ2luYWN0aXZlJyxcbiAgQUNUSVZBVElORyA9ICdhY3RpdmF0aW5nJyxcbiAgQUNUSVZFID0gJ2FjdGl2ZScsXG4gIERFQUNUSVZBVElORyA9ICdkZWFjdGl2YXRpbmcnLFxuICBFUlJPUiA9ICdlcnJvcicsXG4gIFNVU1BFTkRFRCA9ICdzdXNwZW5kZWQnXG59XG5cbi8vIFJhdGluZyBzeXN0ZW0gZm9yIGNvbnRpbnVvdXMgaW1wcm92ZW1lbnRcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFJhdGluZ3Mge1xuICBhaVJhdGluZzogbnVtYmVyOyAgICAgICAgICAgICAgLy8gMC01IHN0YXJzIChBSSBldmFsdWF0aW9uKVxuICB1c2VyUmF0aW5nPzogbnVtYmVyOyAgICAgICAgICAgLy8gMC01IHN0YXJzICh1c2VyIGZlZWRiYWNrKVxuICByYXRpbmdDb3VudDogbnVtYmVyOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIHJhdGluZ3NcbiAgbGFzdEV2YWx1YXRlZDogRGF0ZTsgICAgICAgICAgLy8gV2hlbiBsYXN0IGV2YWx1YXRlZFxuICBjb25maWRlbmNlOiBudW1iZXI7ICAgICAgICAgICAgLy8gMC0xIGNvbmZpZGVuY2UgaW4gcmF0aW5nXG4gIFxuICAvLyBEZXRhaWxlZCBicmVha2Rvd25zIChjdXN0b21pemFibGUgcGVyIGVsZW1lbnQgdHlwZSlcbiAgYnJlYWtkb3duPzogUmF0aW5nQnJlYWtkb3duO1xuICBcbiAgLy8gRGVsdGEgdHJhY2tpbmdcbiAgcmF0aW5nRGVsdGE/OiBudW1iZXI7ICAgICAgICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIEFJIGFuZCB1c2VyIHJhdGluZ1xuICB0cmVuZDogJ2ltcHJvdmluZycgfCAnZGVjbGluaW5nJyB8ICdzdGFibGUnO1xuICBcbiAgLy8gRmVlZGJhY2sgaGlzdG9yeVxuICBmZWVkYmFja0hpc3Rvcnk/OiBVc2VyRmVlZGJhY2tbXTtcbn1cblxuLy8gQmFzZSByYXRpbmcgYnJlYWtkb3duIC0gZWxlbWVudCB0eXBlcyBjYW4gZXh0ZW5kIHRoaXNcbmV4cG9ydCBpbnRlcmZhY2UgUmF0aW5nQnJlYWtkb3duIHtcbiAgLy8gQmFzZSBtZXRyaWNzIGFsbCBlbGVtZW50cyBzaGFyZVxuICBlZmZlY3RpdmVuZXNzOiBudW1iZXI7ICAgICAgICAgLy8gSG93IHdlbGwgaXQgYWNoaWV2ZXMgaXRzIHB1cnBvc2VcbiAgcmVsaWFiaWxpdHk6IG51bWJlcjsgICAgICAgICAgLy8gSG93IGNvbnNpc3RlbnQgaXQgaXNcbiAgdXNhYmlsaXR5OiBudW1iZXI7ICAgICAgICAgICAvLyBIb3cgZWFzeSB0byB3b3JrIHdpdGhcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0cmljcyAodmlhIGluZGV4IHNpZ25hdHVyZSlcbiAgW2tleTogc3RyaW5nXTogbnVtYmVyO1xufVxuXG4vLyBVc2VyIGZlZWRiYWNrIHRyYWNraW5nXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJGZWVkYmFjayB7XG4gIHRpbWVzdGFtcDogRGF0ZTtcbiAgZmVlZGJhY2s6IHN0cmluZzsgICAgICAgICAgICAgLy8gTmF0dXJhbCBsYW5ndWFnZSBmZWVkYmFja1xuICBzZW50aW1lbnQ6ICdwb3NpdGl2ZScgfCAnbmVnYXRpdmUnIHwgJ25ldXRyYWwnO1xuICBpbmZlcnJlZFJhdGluZz86IG51bWJlcjsgICAgICAvLyBSYXRpbmcgaW5mZXJyZWQgZnJvbSBmZWVkYmFja1xuICBjb250ZXh0PzogRmVlZGJhY2tDb250ZXh0OyAgICAvLyBXaGF0IHdhcyBoYXBwZW5pbmdcbiAgZWxlbWVudFZlcnNpb24/OiBzdHJpbmc7ICAgICAgLy8gVmVyc2lvbiBhdCB0aW1lIG9mIGZlZWRiYWNrXG59XG5cbi8vIENvbnRleHQgZm9yIGZlZWRiYWNrXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ29udGV4dCB7XG4gIHRhc2s/OiBzdHJpbmc7ICAgICAgICAgICAgICAgIC8vIFdoYXQgdGFzayB3YXMgYmVpbmcgcGVyZm9ybWVkXG4gIHJlbGF0ZWRFbGVtZW50cz86IHN0cmluZ1tdOyAgIC8vIE90aGVyIGFjdGl2ZSBlbGVtZW50c1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7ICAgICAgICAgIC8vIEZvciBncm91cGluZyByZWxhdGVkIGZlZWRiYWNrXG4gIGVudmlyb25tZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vIFNjaGVtYSB2ZXJzaW9uaW5nIHN1cHBvcnRcbmV4cG9ydCBpbnRlcmZhY2UgSVNjaGVtYVZlcnNpb24ge1xuICBzY2hlbWFWZXJzaW9uPzogc3RyaW5nOyAgICAgICAvLyBUcmFjayBpbnRlcmZhY2UgdmVyc2lvblxuICBtaWdyYXRlPyhmcm9tVmVyc2lvbjogc3RyaW5nKTogdm9pZDsgIC8vIE1pZ3JhdGlvbiBzdXBwb3J0XG59XG4iXX0=