SigNoz is an open-source Datadog or New Relic alternative. Get APM, logs,traces, metrics, exceptions, & alerts in a single tool.
Alternatively, create a Compose service, go to Advanced → Import from Base64, and paste this payload:
ewogICJjb21wb3NlIjogIngtY29tbW9uOiAmY29tbW9uXG4gIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gIGxvZ2dpbmc6XG4gICAgb3B0aW9uczpcbiAgICAgIG1heC1zaXplOiA1MG1cbiAgICAgIG1heC1maWxlOiBcIjNcIlxueC1jbGlja2hvdXNlLWRlZmF1bHRzOiAmY2xpY2tob3VzZS1kZWZhdWx0c1xuICAhIW1lcmdlIDw8OiAqY29tbW9uXG4gIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNlxuICB0dHk6IHRydWVcbiAgbGFiZWxzOlxuICAgIHNpZ25vei5pby9zY3JhcGU6IFwidHJ1ZVwiXG4gICAgc2lnbm96LmlvL3BvcnQ6IFwiOTM2M1wiXG4gICAgc2lnbm96LmlvL3BhdGg6IFwiL21ldHJpY3NcIlxuICBkZXBlbmRzX29uOlxuICAgIGluaXQtY2xpY2tob3VzZTpcbiAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5XG4gICAgem9va2VlcGVyLTE6XG4gICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICBoZWFsdGhjaGVjazpcbiAgICB0ZXN0OlxuICAgICAgLSBDTURcbiAgICAgIC0gd2dldFxuICAgICAgLSAtLXNwaWRlclxuICAgICAgLSAtcVxuICAgICAgLSAwLjAuMC4wOjgxMjMvcGluZ1xuICAgIGludGVydmFsOiAzMHNcbiAgICB0aW1lb3V0OiA1c1xuICAgIHJldHJpZXM6IDNcbiAgdWxpbWl0czpcbiAgICBucHJvYzogNjU1MzVcbiAgICBub2ZpbGU6XG4gICAgICBzb2Z0OiAyNjIxNDRcbiAgICAgIGhhcmQ6IDI2MjE0NFxuICBlbnZpcm9ubWVudDpcbiAgICAtIENMSUNLSE9VU0VfU0tJUF9VU0VSX1NFVFVQPTFcbngtem9va2VlcGVyLWRlZmF1bHRzOiAmem9va2VlcGVyLWRlZmF1bHRzXG4gICEhbWVyZ2UgPDw6ICpjb21tb25cbiAgaW1hZ2U6IHNpZ25vei96b29rZWVwZXI6My43LjFcbiAgdXNlcjogcm9vdFxuICBsYWJlbHM6XG4gICAgc2lnbm96LmlvL3NjcmFwZTogXCJ0cnVlXCJcbiAgICBzaWdub3ouaW8vcG9ydDogXCI5MTQxXCJcbiAgICBzaWdub3ouaW8vcGF0aDogXCIvbWV0cmljc1wiXG4gIGhlYWx0aGNoZWNrOlxuICAgIHRlc3Q6XG4gICAgICAtIENNRC1TSEVMTFxuICAgICAgLSBjdXJsIC1zIC1tIDIgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NvbW1hbmRzL3J1b2sgfCBncmVwIGVycm9yIHwgZ3JlcCBudWxsXG4gICAgaW50ZXJ2YWw6IDMwc1xuICAgIHRpbWVvdXQ6IDVzXG4gICAgcmV0cmllczogM1xueC1kYi1kZXBlbmQ6ICZkYi1kZXBlbmRcbiAgISFtZXJnZSA8PDogKmNvbW1vblxuICBkZXBlbmRzX29uOlxuICAgIGNsaWNraG91c2U6XG4gICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIHNjaGVtYS1taWdyYXRvci1zeW5jOlxuICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbnNlcnZpY2VzOlxuICBpbml0LWNsaWNraG91c2U6XG4gICAgISFtZXJnZSA8PDogKmNvbW1vblxuICAgIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNlxuICAgIGNvbW1hbmQ6XG4gICAgICAtIGJhc2hcbiAgICAgIC0gLWNcbiAgICAgIC0gfFxuICAgICAgICB2ZXJzaW9uPVwidjAuMC4xXCJcbiAgICAgICAgbm9kZV9vcz0kJCh1bmFtZSAtcyB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKVxuICAgICAgICBub2RlX2FyY2g9JCQodW5hbWUgLW0gfCBzZWQgcy9hYXJjaDY0L2FybTY0LyB8IHNlZCBzL3g4Nl82NC9hbWQ2NC8pXG4gICAgICAgIGVjaG8gXCJGZXRjaGluZyBoaXN0b2dyYW0tYmluYXJ5IGZvciAkJHtub2RlX29zfS8kJHtub2RlX2FyY2h9XCJcbiAgICAgICAgY2QgL3RtcFxuICAgICAgICB3Z2V0IC1PIGhpc3RvZ3JhbS1xdWFudGlsZS50YXIuZ3ogXCJodHRwczovL2dpdGh1Yi5jb20vU2lnTm96L3NpZ25vei9yZWxlYXNlcy9kb3dubG9hZC9oaXN0b2dyYW0tcXVhbnRpbGUlMkYkJHt2ZXJzaW9ufS9oaXN0b2dyYW0tcXVhbnRpbGVfJCR7bm9kZV9vc31fJCR7bm9kZV9hcmNofS50YXIuZ3pcIlxuICAgICAgICB0YXIgLXh2emYgaGlzdG9ncmFtLXF1YW50aWxlLnRhci5nelxuICAgICAgICBtdiBoaXN0b2dyYW0tcXVhbnRpbGUgL3Zhci9saWIvY2xpY2tob3VzZS91c2VyX3NjcmlwdHMvaGlzdG9ncmFtUXVhbnRpbGVcbiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS91c2VyX3NjcmlwdHM6L3Zhci9saWIvY2xpY2tob3VzZS91c2VyX3NjcmlwdHMvXG4gIHpvb2tlZXBlci0xOlxuICAgICEhbWVyZ2UgPDw6ICp6b29rZWVwZXItZGVmYXVsdHNcbiAgICB2b2x1bWVzOlxuICAgICAgLSB6b29rZWVwZXItMTovYml0bmFtaS96b29rZWVwZXJcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gWk9PX1NFUlZFUl9JRD0xXG4gICAgICAtIEFMTE9XX0FOT05ZTU9VU19MT0dJTj15ZXNcbiAgICAgIC0gWk9PX0FVVE9QVVJHRV9JTlRFUlZBTD0xXG4gICAgICAtIFpPT19FTkFCTEVfUFJPTUVUSEVVU19NRVRSSUNTPXllc1xuICAgICAgLSBaT09fUFJPTUVUSEVVU19NRVRSSUNTX1BPUlRfTlVNQkVSPTkxNDFcbiAgY2xpY2tob3VzZTpcbiAgICAhIW1lcmdlIDw8OiAqY2xpY2tob3VzZS1kZWZhdWx0c1xuICAgIGhvc3RuYW1lOiBjbGlja2hvdXNlXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS9jb25maWcueG1sOi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvY29uZmlnLnhtbFxuICAgICAgLSAuLi9maWxlcy9jbGlja2hvdXNlL3VzZXJfc2NyaXB0czovdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy9cbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS9jbHVzdGVyLnhtbDovZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2NsdXN0ZXIueG1sXG4gICAgICAtIC4uL2ZpbGVzL2NsaWNraG91c2UvZG9ja2VyX3JlbGF0ZWRfY29uZmlnLnhtbDovZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2RvY2tlcl9yZWxhdGVkX2NvbmZpZy54bWxcbiAgICAgIC0gY2xpY2tob3VzZTovdmFyL2xpYi9jbGlja2hvdXNlL1xuICBzaWdub3o6XG4gICAgISFtZXJnZSA8PDogKmRiLWRlcGVuZFxuICAgIGltYWdlOiBzaWdub3ovc2lnbm96OnYwLjk3LjFcbiAgICBjb21tYW5kOlxuICAgICAgLSAtLWNvbmZpZz0vcm9vdC9jb25maWcvcHJvbWV0aGV1cy55bWxcbiAgICBwb3J0czpcbiAgICAgIC0gXCI4MDgwXCJcbiAgICB2b2x1bWVzOlxuICAgICAgLSAuLi9maWxlcy9zaWdub3ovcHJvbWV0aGV1cy55bWw6L3Jvb3QvY29uZmlnL3Byb21ldGhldXMueW1sXG4gICAgICAtIHNxbGl0ZTovdmFyL2xpYi9zaWdub3ovXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFNJR05PWl9BTEVSVE1BTkFHRVJfUFJPVklERVI9c2lnbm96XG4gICAgICAtIFNJR05PWl9URUxFTUVUUllTVE9SRV9DTElDS0hPVVNFX0RTTj10Y3A6Ly9jbGlja2hvdXNlOjkwMDBcbiAgICAgIC0gU0lHTk9aX1NRTFNUT1JFX1NRTElURV9QQVRIPS92YXIvbGliL3NpZ25vei9zaWdub3ouZGJcbiAgICAgIC0gU1RPUkFHRT1jbGlja2hvdXNlXG4gICAgICAtIFRFTEVNRVRSWV9FTkFCTEVEPXRydWVcbiAgICAgIC0gREVQTE9ZTUVOVF9UWVBFPWRvY2tlci1zdGFuZGFsb25lLWFtZFxuICAgICAgLSBET1RfTUVUUklDU19FTkFCTEVEPXRydWVcbiAgICAgIC0gU0lHTk9aX0pXVF9TRUNSRVQ9JHtTSUdOT1pfSldUX1NFQ1JFVH1cbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIC0gQ01EXG4gICAgICAgIC0gd2dldFxuICAgICAgICAtIC0tc3BpZGVyXG4gICAgICAgIC0gLXFcbiAgICAgICAgLSBsb2NhbGhvc3Q6ODA4MC9hcGkvdjEvaGVhbHRoXG4gICAgICBpbnRlcnZhbDogMzBzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogM1xuICBvdGVsLWNvbGxlY3RvcjpcbiAgICAhIW1lcmdlIDw8OiAqZGItZGVwZW5kXG4gICAgaW1hZ2U6IHNpZ25vei9zaWdub3otb3RlbC1jb2xsZWN0b3I6djAuMTI5LjdcbiAgICBjb21tYW5kOlxuICAgICAgLSAtLWNvbmZpZz0vZXRjL290ZWwtY29sbGVjdG9yLWNvbmZpZy55YW1sXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvY29sbGVjdG9yL290ZWwtY29sbGVjdG9yLWNvbmZpZy55YW1sOi9ldGMvb3RlbC1jb2xsZWN0b3ItY29uZmlnLnlhbWxcbiAgICBwb3J0czpcbiAgICAgIC0gXCI0MzE3XCIgIyBPVExQIGdSUEMgcmVjZWl2ZXJcbiAgICAgIC0gXCI0MzE4XCIgIyBPVExQIEhUVFAgcmVjZWl2ZXJcbiAgICBkZXBlbmRzX29uOlxuICAgICAgc2lnbm96OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICBzY2hlbWEtbWlncmF0b3Itc3luYzpcbiAgICAhIW1lcmdlIDw8OiAqY29tbW9uXG4gICAgaW1hZ2U6IHNpZ25vei9zaWdub3otc2NoZW1hLW1pZ3JhdG9yOnYwLjEyOS43XG4gICAgY29tbWFuZDpcbiAgICAgIC0gc3luY1xuICAgICAgLSAtLWRzbj10Y3A6Ly9jbGlja2hvdXNlOjkwMDBcbiAgICAgIC0gLS11cD1cbiAgICBkZXBlbmRzX29uOlxuICAgICAgY2xpY2tob3VzZTpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlXG4gIHNjaGVtYS1taWdyYXRvci1hc3luYzpcbiAgICAhIW1lcmdlIDw8OiAqZGItZGVwZW5kXG4gICAgaW1hZ2U6IHNpZ25vei9zaWdub3otc2NoZW1hLW1pZ3JhdG9yOnYwLjEyOS43XG4gICAgY29tbWFuZDpcbiAgICAgIC0gYXN5bmNcbiAgICAgIC0gLS1kc249dGNwOi8vY2xpY2tob3VzZTo5MDAwXG4gICAgICAtIC0tdXA9XG4gICAgcmVzdGFydDogb24tZmFpbHVyZVxudm9sdW1lczpcbiAgY2xpY2tob3VzZTpcbiAgICBuYW1lOiBzaWdub3otY2xpY2tob3VzZVxuICBzcWxpdGU6XG4gICAgbmFtZTogc2lnbm96LXNxbGl0ZVxuICB6b29rZWVwZXItMTpcbiAgICBuYW1lOiBzaWdub3otem9va2VlcGVyLTEiLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbm1haW5fZG9tYWluID0gXCIke2RvbWFpbn1cIlxub3RlbF9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5qd3Rfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjY0fVwiXG5cbltjb25maWddXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJzaWdub3pcIlxucG9ydCA9IDgwODBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJvdGVsLWNvbGxlY3RvclwiXG5wb3J0ID0gNDMxOFxuaG9zdCA9IFwiJHtvdGVsX2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiXG5cbltjb25maWcuZW52XVxuU0lHTk9aX0pXVF9TRUNSRVQgPSBcIiR7and0X3NlY3JldH1cIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9jbGlja2hvdXNlL2NvbmZpZy54bWxcIlxuY29udGVudCA9IFwiXCJcIlxuPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjwhLS1cbiAgTk9URTogVXNlciBhbmQgcXVlcnkgbGV2ZWwgc2V0dGluZ3MgYXJlIHNldCB1cCBpbiBcInVzZXJzLnhtbFwiIGZpbGUuXG4gIElmIHlvdSBoYXZlIGFjY2lkZW50YWxseSBzcGVjaWZpZWQgdXNlci1sZXZlbCBzZXR0aW5ncyBoZXJlLCBzZXJ2ZXIgd29uJ3Qgc3RhcnQuXG4gIFlvdSBjYW4gZWl0aGVyIG1vdmUgdGhlIHNldHRpbmdzIHRvIHRoZSByaWdodCBwbGFjZSBpbnNpZGUgXCJ1c2Vycy54bWxcIiBmaWxlXG4gICBvciBhZGQgPHNraXBfY2hlY2tfZm9yX2luY29ycmVjdF9zZXR0aW5ncz4xPC9za2lwX2NoZWNrX2Zvcl9pbmNvcnJlY3Rfc2V0dGluZ3M+IGhlcmUuXG4tLT5cbjxjbGlja2hvdXNlPlxuICAgIDxsb2dnZXI+XG4gICAgICAgIDwhLS0gUG9zc2libGUgbGV2ZWxzIFsxXTpcblxuICAgICAgICAgIC0gbm9uZSAodHVybnMgb2ZmIGxvZ2dpbmcpXG4gICAgICAgICAgLSBmYXRhbFxuICAgICAgICAgIC0gY3JpdGljYWxcbiAgICAgICAgICAtIGVycm9yXG4gICAgICAgICAgLSB3YXJuaW5nXG4gICAgICAgICAgLSBub3RpY2VcbiAgICAgICAgICAtIGluZm9ybWF0aW9uXG4gICAgICAgICAgLSBkZWJ1Z1xuICAgICAgICAgIC0gdHJhY2VcbiAgICAgICAgICAtIHRlc3QgKG5vdCBmb3IgcHJvZHVjdGlvbiB1c2FnZSlcblxuICAgICAgICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vcG9jb3Byb2plY3QvcG9jby9ibG9iL3BvY28tMS45LjQtcmVsZWFzZS9Gb3VuZGF0aW9uL2luY2x1ZGUvUG9jby9Mb2dnZXIuaCNMMTA1LUwxMTRcbiAgICAgICAgLS0+XG4gICAgICAgIDxsZXZlbD5pbmZvcm1hdGlvbjwvbGV2ZWw+XG4gICAgICAgIDxmb3JtYXR0aW5nPlxuICAgICAgICAgICAgPHR5cGU+anNvbjwvdHlwZT5cbiAgICAgICAgPC9mb3JtYXR0aW5nPlxuICAgICAgICA8bG9nPi92YXIvbG9nL2NsaWNraG91c2Utc2VydmVyL2NsaWNraG91c2Utc2VydmVyLmxvZzwvbG9nPlxuICAgICAgICA8ZXJyb3Jsb2c+L3Zhci9sb2cvY2xpY2tob3VzZS1zZXJ2ZXIvY2xpY2tob3VzZS1zZXJ2ZXIuZXJyLmxvZzwvZXJyb3Jsb2c+XG4gICAgICAgIDwhLS0gUm90YXRpb24gcG9saWN5XG4gICAgICAgICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wb2NvcHJvamVjdC9wb2NvL2Jsb2IvcG9jby0xLjkuNC1yZWxlYXNlL0ZvdW5kYXRpb24vaW5jbHVkZS9Qb2NvL0ZpbGVDaGFubmVsLmgjTDU0LUw4NVxuICAgICAgICAgIC0tPlxuICAgICAgICA8c2l6ZT4xMDAwTTwvc2l6ZT5cbiAgICAgICAgPGNvdW50PjEwPC9jb3VudD5cbiAgICAgICAgPCEtLSA8Y29uc29sZT4xPC9jb25zb2xlPiAtLT4gPCEtLSBEZWZhdWx0IGJlaGF2aW9yIGlzIGF1dG9kZXRlY3Rpb24gKGxvZyB0byBjb25zb2xlIGlmIG5vdCBkYWVtb24gbW9kZSBhbmQgaXMgdHR5KSAtLT5cblxuICAgICAgICA8IS0tIFBlciBsZXZlbCBvdmVycmlkZXMgKGxlZ2FjeSk6XG5cbiAgICAgICAgRm9yIGV4YW1wbGUgdG8gc3VwcHJlc3MgbG9nZ2luZyBvZiB0aGUgQ29uZmlnUmVsb2FkZXIgeW91IGNhbiB1c2U6XG4gICAgICAgIE5PVEU6IGxldmVscy5sb2dnZXIgaXMgcmVzZXJ2ZWQsIHNlZSBiZWxvdy5cbiAgICAgICAgLS0+XG4gICAgICAgIDwhLS1cbiAgICAgICAgPGxldmVscz5cbiAgICAgICAgICA8Q29uZmlnUmVsb2FkZXI+bm9uZTwvQ29uZmlnUmVsb2FkZXI+XG4gICAgICAgIDwvbGV2ZWxzPlxuICAgICAgICAtLT5cblxuICAgICAgICA8IS0tIFBlciBsZXZlbCBvdmVycmlkZXM6XG5cbiAgICAgICAgRm9yIGV4YW1wbGUgdG8gc3VwcHJlc3MgbG9nZ2luZyBvZiB0aGUgUkJBQyBmb3IgZGVmYXVsdCB1c2VyIHlvdSBjYW4gdXNlOlxuICAgICAgICAoQnV0IHBsZWFzZSBub3RlIHRoYXQgdGhlIGxvZ2dlciBuYW1lIG1heWJlIGNoYW5nZWQgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24sIGV2ZW4gYWZ0ZXIgbWlub3IgdXBncmFkZSlcbiAgICAgICAgLS0+XG4gICAgICAgIDwhLS1cbiAgICAgICAgPGxldmVscz5cbiAgICAgICAgICA8bG9nZ2VyPlxuICAgICAgICAgICAgPG5hbWU+Q29udGV4dEFjY2VzcyAoZGVmYXVsdCk8L25hbWU+XG4gICAgICAgICAgICA8bGV2ZWw+bm9uZTwvbGV2ZWw+XG4gICAgICAgICAgPC9sb2dnZXI+XG4gICAgICAgICAgPGxvZ2dlcj5cbiAgICAgICAgICAgIDxuYW1lPkRhdGFiYXNlT3JkaW5hcnkgKHRlc3QpPC9uYW1lPlxuICAgICAgICAgICAgPGxldmVsPm5vbmU8L2xldmVsPlxuICAgICAgICAgIDwvbG9nZ2VyPlxuICAgICAgICA8L2xldmVscz5cbiAgICAgICAgLS0+XG4gICAgPC9sb2dnZXI+XG5cbiAgICA8IS0tIEFkZCBoZWFkZXJzIHRvIHJlc3BvbnNlIGluIG9wdGlvbnMgcmVxdWVzdC4gT1BUSU9OUyBtZXRob2QgaXMgdXNlZCBpbiBDT1JTIHByZWZsaWdodCByZXF1ZXN0cy4gLS0+XG4gICAgPCEtLSBJdCBpcyBvZmYgYnkgZGVmYXVsdC4gTmV4dCBoZWFkZXJzIGFyZSBvYmxpZ2F0ZSBmb3IgQ09SUy4tLT5cbiAgICA8IS0tIGh0dHBfb3B0aW9uc19yZXNwb25zZT5cbiAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxuYW1lPkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjwvbmFtZT5cbiAgICAgICAgICAgIDx2YWx1ZT4qPC92YWx1ZT5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxoZWFkZXI+XG4gICAgICAgICAgICA8bmFtZT5BY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzPC9uYW1lPlxuICAgICAgICAgICAgPHZhbHVlPm9yaWdpbiwgeC1yZXF1ZXN0ZWQtd2l0aDwvdmFsdWU+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPG5hbWU+QWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kczwvbmFtZT5cbiAgICAgICAgICAgIDx2YWx1ZT5QT1NULCBHRVQsIE9QVElPTlM8L3ZhbHVlPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxuYW1lPkFjY2Vzcy1Db250cm9sLU1heC1BZ2U8L25hbWU+XG4gICAgICAgICAgICA8dmFsdWU+ODY0MDA8L3ZhbHVlPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICA8L2h0dHBfb3B0aW9uc19yZXNwb25zZSAtLT5cblxuICAgIDwhLS0gSXQgaXMgdGhlIG5hbWUgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBjbGlja2hvdXNlLWNsaWVudC5cbiAgICAgICAgIEJ5IGRlZmF1bHQsIGFueXRoaW5nIHdpdGggXCJwcm9kdWN0aW9uXCIgd2lsbCBiZSBoaWdobGlnaHRlZCBpbiByZWQgaW4gcXVlcnkgcHJvbXB0LlxuICAgIC0tPlxuICAgIDwhLS1kaXNwbGF5X25hbWU+cHJvZHVjdGlvbjwvZGlzcGxheV9uYW1lLS0+XG5cbiAgICA8IS0tIFBvcnQgZm9yIEhUVFAgQVBJLiBTZWUgYWxzbyAnaHR0cHNfcG9ydCcgZm9yIHNlY3VyZSBjb25uZWN0aW9ucy5cbiAgICAgICAgIFRoaXMgaW50ZXJmYWNlIGlzIGFsc28gdXNlZCBieSBPREJDIGFuZCBKREJDIGRyaXZlcnMgKERhdGFHcmlwLCBEYmVhdmVyLCAuLi4pXG4gICAgICAgICBhbmQgYnkgbW9zdCBvZiB3ZWIgaW50ZXJmYWNlcyAoZW1iZWRkZWQgVUksIEdyYWZhbmEsIFJlZGFzaCwgLi4uKS5cbiAgICAgIC0tPlxuICAgIDxodHRwX3BvcnQ+ODEyMzwvaHR0cF9wb3J0PlxuXG4gICAgPCEtLSBQb3J0IGZvciBpbnRlcmFjdGlvbiBieSBuYXRpdmUgcHJvdG9jb2wgd2l0aDpcbiAgICAgICAgIC0gY2xpY2tob3VzZS1jbGllbnQgYW5kIG90aGVyIG5hdGl2ZSBDbGlja0hvdXNlIHRvb2xzIChjbGlja2hvdXNlLWJlbmNobWFyaywgY2xpY2tob3VzZS1jb3BpZXIpO1xuICAgICAgICAgLSBjbGlja2hvdXNlLXNlcnZlciB3aXRoIG90aGVyIGNsaWNraG91c2Utc2VydmVycyBmb3IgZGlzdHJpYnV0ZWQgcXVlcnkgcHJvY2Vzc2luZztcbiAgICAgICAgIC0gQ2xpY2tIb3VzZSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgc3VwcG9ydGluZyBuYXRpdmUgcHJvdG9jb2xcbiAgICAgICAgICh0aGlzIHByb3RvY29sIGlzIGFsc28gaW5mb3JtYWxseSBjYWxsZWQgYXMgXCJ0aGUgVENQIHByb3RvY29sXCIpO1xuICAgICAgICAgU2VlIGFsc28gJ3RjcF9wb3J0X3NlY3VyZScgZm9yIHNlY3VyZSBjb25uZWN0aW9ucy5cbiAgICAtLT5cbiAgICA8dGNwX3BvcnQ+OTAwMDwvdGNwX3BvcnQ+XG5cbiAgICA8IS0tIENvbXBhdGliaWxpdHkgd2l0aCBNeVNRTCBwcm90b2NvbC5cbiAgICAgICAgIENsaWNrSG91c2Ugd2lsbCBwcmV0ZW5kIHRvIGJlIE15U1FMIGZvciBhcHBsaWNhdGlvbnMgY29ubmVjdGluZyB0byB0aGlzIHBvcnQuXG4gICAgLS0+XG4gICAgPG15c3FsX3BvcnQ+OTAwNDwvbXlzcWxfcG9ydD5cblxuICAgIDwhLS0gQ29tcGF0aWJpbGl0eSB3aXRoIFBvc3RncmVTUUwgcHJvdG9jb2wuXG4gICAgICAgICBDbGlja0hvdXNlIHdpbGwgcHJldGVuZCB0byBiZSBQb3N0Z3JlU1FMIGZvciBhcHBsaWNhdGlvbnMgY29ubmVjdGluZyB0byB0aGlzIHBvcnQuXG4gICAgLS0+XG4gICAgPHBvc3RncmVzcWxfcG9ydD45MDA1PC9wb3N0Z3Jlc3FsX3BvcnQ+XG5cbiAgICA8IS0tIEhUVFAgQVBJIHdpdGggVExTIChIVFRQUykuXG4gICAgICAgICBZb3UgaGF2ZSB0byBjb25maWd1cmUgY2VydGlmaWNhdGUgdG8gZW5hYmxlIHRoaXMgaW50ZXJmYWNlLlxuICAgICAgICAgU2VlIHRoZSBvcGVuU1NMIHNlY3Rpb24gYmVsb3cuXG4gICAgLS0+XG4gICAgPCEtLSA8aHR0cHNfcG9ydD44NDQzPC9odHRwc19wb3J0PiAtLT5cblxuICAgIDwhLS0gTmF0aXZlIGludGVyZmFjZSB3aXRoIFRMUy5cbiAgICAgICAgIFlvdSBoYXZlIHRvIGNvbmZpZ3VyZSBjZXJ0aWZpY2F0ZSB0byBlbmFibGUgdGhpcyBpbnRlcmZhY2UuXG4gICAgICAgICBTZWUgdGhlIG9wZW5TU0wgc2VjdGlvbiBiZWxvdy5cbiAgICAtLT5cbiAgICA8IS0tIDx0Y3BfcG9ydF9zZWN1cmU+OTQ0MDwvdGNwX3BvcnRfc2VjdXJlPiAtLT5cblxuICAgIDwhLS0gTmF0aXZlIGludGVyZmFjZSB3cmFwcGVkIHdpdGggUFJPWFl2MSBwcm90b2NvbFxuICAgICAgICAgUFJPWFl2MSBoZWFkZXIgc2VudCBmb3IgZXZlcnkgY29ubmVjdGlvbi5cbiAgICAgICAgIENsaWNrSG91c2Ugd2lsbCBleHRyYWN0IGluZm9ybWF0aW9uIGFib3V0IHByb3h5LWZvcndhcmRlZCBjbGllbnQgYWRkcmVzcyBmcm9tIHRoZSBoZWFkZXIuXG4gICAgLS0+XG4gICAgPCEtLSA8dGNwX3dpdGhfcHJveHlfcG9ydD45MDExPC90Y3Bfd2l0aF9wcm94eV9wb3J0PiAtLT5cblxuICAgIDwhLS0gUG9ydCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHJlcGxpY2FzLiBVc2VkIGZvciBkYXRhIGV4Y2hhbmdlLlxuICAgICAgICAgSXQgcHJvdmlkZXMgbG93LWxldmVsIGRhdGEgYWNjZXNzIGJldHdlZW4gc2VydmVycy5cbiAgICAgICAgIFRoaXMgcG9ydCBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUgZnJvbSB1bnRydXN0ZWQgbmV0d29ya3MuXG4gICAgICAgICBTZWUgYWxzbyAnaW50ZXJzZXJ2ZXJfaHR0cF9jcmVkZW50aWFscycuXG4gICAgICAgICBEYXRhIHRyYW5zZmVycmVkIG92ZXIgY29ubmVjdGlvbnMgdG8gdGhpcyBwb3J0IHNob3VsZCBub3QgZ28gdGhyb3VnaCB1bnRydXN0ZWQgbmV0d29ya3MuXG4gICAgICAgICBTZWUgYWxzbyAnaW50ZXJzZXJ2ZXJfaHR0cHNfcG9ydCcuXG4gICAgICAtLT5cbiAgICA8aW50ZXJzZXJ2ZXJfaHR0cF9wb3J0PjkwMDk8L2ludGVyc2VydmVyX2h0dHBfcG9ydD5cblxuICAgIDwhLS0gUG9ydCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHJlcGxpY2FzIHdpdGggVExTLlxuICAgICAgICAgWW91IGhhdmUgdG8gY29uZmlndXJlIGNlcnRpZmljYXRlIHRvIGVuYWJsZSB0aGlzIGludGVyZmFjZS5cbiAgICAgICAgIFNlZSB0aGUgb3BlblNTTCBzZWN0aW9uIGJlbG93LlxuICAgICAgICAgU2VlIGFsc28gJ2ludGVyc2VydmVyX2h0dHBfY3JlZGVudGlhbHMnLlxuICAgICAgLS0+XG4gICAgPCEtLSA8aW50ZXJzZXJ2ZXJfaHR0cHNfcG9ydD45MDEwPC9pbnRlcnNlcnZlcl9odHRwc19wb3J0PiAtLT5cblxuICAgIDwhLS0gSG9zdG5hbWUgdGhhdCBpcyB1c2VkIGJ5IG90aGVyIHJlcGxpY2FzIHRvIHJlcXVlc3QgdGhpcyBzZXJ2ZXIuXG4gICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGl0IGlzIGRldGVybWluZWQgYW5hbG9nb3VzIHRvICdob3N0bmFtZSAtZicgY29tbWFuZC5cbiAgICAgICAgIFRoaXMgc2V0dGluZyBjb3VsZCBiZSB1c2VkIHRvIHN3aXRjaCByZXBsaWNhdGlvbiB0byBhbm90aGVyIG5ldHdvcmsgaW50ZXJmYWNlXG4gICAgICAgICAodGhlIHNlcnZlciBtYXkgYmUgY29ubmVjdGVkIHRvIG11bHRpcGxlIG5ldHdvcmtzIHZpYSBtdWx0aXBsZSBhZGRyZXNzZXMpXG4gICAgICAtLT5cblxuICAgIDwhLS1cbiAgICA8aW50ZXJzZXJ2ZXJfaHR0cF9ob3N0PmV4YW1wbGUuY2xpY2tob3VzZS5jb208L2ludGVyc2VydmVyX2h0dHBfaG9zdD5cbiAgICAtLT5cblxuICAgIDwhLS0gWW91IGNhbiBzcGVjaWZ5IGNyZWRlbnRpYWxzIGZvciBhdXRoZW50aGljYXRpb24gYmV0d2VlbiByZXBsaWNhcy5cbiAgICAgICAgIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiBpbnRlcnNlcnZlcl9odHRwc19wb3J0IGlzIGFjY2Vzc2libGUgZnJvbSB1bnRydXN0ZWQgbmV0d29ya3MsXG4gICAgICAgICBhbmQgYWxzbyByZWNvbW1lbmRlZCB0byBhdm9pZCBTU1JGIGF0dGFja3MgZnJvbSBwb3NzaWJseSBjb21wcm9taXNlZCBzZXJ2aWNlcyBpbiB5b3VyIG5ldHdvcmsuXG4gICAgICAtLT5cbiAgICA8IS0tPGludGVyc2VydmVyX2h0dHBfY3JlZGVudGlhbHM+XG4gICAgICAgIDx1c2VyPmludGVyc2VydmVyPC91c2VyPlxuICAgICAgICA8cGFzc3dvcmQ+PC9wYXNzd29yZD5cbiAgICA8L2ludGVyc2VydmVyX2h0dHBfY3JlZGVudGlhbHM+LS0+XG5cbiAgICA8IS0tIExpc3RlbiBzcGVjaWZpZWQgYWRkcmVzcy5cbiAgICAgICAgIFVzZSA6OiAod2lsZGNhcmQgSVB2NiBhZGRyZXNzKSwgaWYgeW91IHdhbnQgdG8gYWNjZXB0IGNvbm5lY3Rpb25zIGJvdGggd2l0aCBJUHY0IGFuZCBJUHY2IGZyb20gZXZlcnl3aGVyZS5cbiAgICAgICAgIE5vdGVzOlxuICAgICAgICAgSWYgeW91IG9wZW4gY29ubmVjdGlvbnMgZnJvbSB3aWxkY2FyZCBhZGRyZXNzLCBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZWFzdXJlcyBhcHBsaWVkOlxuICAgICAgICAgLSBzZXJ2ZXIgaXMgcHJvdGVjdGVkIGJ5IGZpcmV3YWxsIGFuZCBub3QgYWNjZXNzaWJsZSBmcm9tIHVudHJ1c3RlZCBuZXR3b3JrcztcbiAgICAgICAgIC0gYWxsIHVzZXJzIGFyZSByZXN0cmljdGVkIHRvIHN1YnNldCBvZiBuZXR3b3JrIGFkZHJlc3NlcyAoc2VlIHVzZXJzLnhtbCk7XG4gICAgICAgICAtIGFsbCB1c2VycyBoYXZlIHN0cm9uZyBwYXNzd29yZHMsIG9ubHkgc2VjdXJlIChUTFMpIGludGVyZmFjZXMgYXJlIGFjY2Vzc2libGUsIG9yIGNvbm5lY3Rpb25zIGFyZSBvbmx5IG1hZGUgdmlhIFRMUyBpbnRlcmZhY2VzLlxuICAgICAgICAgLSB1c2VycyB3aXRob3V0IHBhc3N3b3JkIGhhdmUgcmVhZG9ubHkgYWNjZXNzLlxuICAgICAgICAgU2VlIGFsc286IGh0dHBzOi8vd3d3LnNob2Rhbi5pby9zZWFyY2g/cXVlcnk9Y2xpY2tob3VzZVxuICAgICAgLS0+XG4gICAgPCEtLSA8bGlzdGVuX2hvc3Q+Ojo8L2xpc3Rlbl9ob3N0PiAtLT5cblxuXG4gICAgPCEtLSBTYW1lIGZvciBob3N0cyB3aXRob3V0IHN1cHBvcnQgZm9yIElQdjY6IC0tPlxuICAgIDwhLS0gPGxpc3Rlbl9ob3N0PjAuMC4wLjA8L2xpc3Rlbl9ob3N0PiAtLT5cblxuICAgIDwhLS0gRGVmYXVsdCB2YWx1ZXMgLSB0cnkgbGlzdGVuIGxvY2FsaG9zdCBvbiBJUHY0IGFuZCBJUHY2LiAtLT5cbiAgICA8IS0tXG4gICAgPGxpc3Rlbl9ob3N0Pjo6MTwvbGlzdGVuX2hvc3Q+XG4gICAgPGxpc3Rlbl9ob3N0PjEyNy4wLjAuMTwvbGlzdGVuX2hvc3Q+XG4gICAgLS0+XG5cbiAgICA8IS0tIERvbid0IGV4aXQgaWYgSVB2NiBvciBJUHY0IG5ldHdvcmtzIGFyZSB1bmF2YWlsYWJsZSB3aGlsZSB0cnlpbmcgdG8gbGlzdGVuLiAtLT5cbiAgICA8IS0tIDxsaXN0ZW5fdHJ5PjA8L2xpc3Rlbl90cnk+IC0tPlxuXG4gICAgPCEtLSBBbGxvdyBtdWx0aXBsZSBzZXJ2ZXJzIHRvIGxpc3RlbiBvbiB0aGUgc2FtZSBhZGRyZXNzOnBvcnQuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLlxuICAgICAgLS0+XG4gICAgPCEtLSA8bGlzdGVuX3JldXNlX3BvcnQ+MDwvbGlzdGVuX3JldXNlX3BvcnQ+IC0tPlxuXG4gICAgPCEtLSA8bGlzdGVuX2JhY2tsb2c+NDA5NjwvbGlzdGVuX2JhY2tsb2c+IC0tPlxuXG4gICAgPG1heF9jb25uZWN0aW9ucz40MDk2PC9tYXhfY29ubmVjdGlvbnM+XG5cbiAgICA8IS0tIEZvciAnQ29ubmVjdGlvbjoga2VlcC1hbGl2ZScgaW4gSFRUUCAxLjEgLS0+XG4gICAgPGtlZXBfYWxpdmVfdGltZW91dD4zPC9rZWVwX2FsaXZlX3RpbWVvdXQ+XG5cbiAgICA8IS0tIGdSUEMgcHJvdG9jb2wgKHNlZSBzcmMvU2VydmVyL2dycGNfcHJvdG9zL2NsaWNraG91c2VfZ3JwYy5wcm90byBmb3IgdGhlIEFQSSkgLS0+XG4gICAgPCEtLSA8Z3JwY19wb3J0PjkxMDA8L2dycGNfcG9ydD4gLS0+XG4gICAgPGdycGM+XG4gICAgICAgIDxlbmFibGVfc3NsPmZhbHNlPC9lbmFibGVfc3NsPlxuXG4gICAgICAgIDwhLS0gVGhlIGZvbGxvd2luZyB0d28gZmlsZXMgYXJlIHVzZWQgb25seSBpZiBlbmFibGVfc3NsPTEgLS0+XG4gICAgICAgIDxzc2xfY2VydF9maWxlPi9wYXRoL3RvL3NzbF9jZXJ0X2ZpbGU8L3NzbF9jZXJ0X2ZpbGU+XG4gICAgICAgIDxzc2xfa2V5X2ZpbGU+L3BhdGgvdG8vc3NsX2tleV9maWxlPC9zc2xfa2V5X2ZpbGU+XG5cbiAgICAgICAgPCEtLSBXaGV0aGVyIHNlcnZlciB3aWxsIHJlcXVlc3QgY2xpZW50IGZvciBhIGNlcnRpZmljYXRlIC0tPlxuICAgICAgICA8c3NsX3JlcXVpcmVfY2xpZW50X2F1dGg+ZmFsc2U8L3NzbF9yZXF1aXJlX2NsaWVudF9hdXRoPlxuXG4gICAgICAgIDwhLS0gVGhlIGZvbGxvd2luZyBmaWxlIGlzIHVzZWQgb25seSBpZiBzc2xfcmVxdWlyZV9jbGllbnRfYXV0aD0xIC0tPlxuICAgICAgICA8c3NsX2NhX2NlcnRfZmlsZT4vcGF0aC90by9zc2xfY2FfY2VydF9maWxlPC9zc2xfY2FfY2VydF9maWxlPlxuXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0cmFuc3BvcnQgY29tcHJlc3Npb24gdHlwZSAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgY2xpZW50LCBzZWUgdGhlIHRyYW5zcG9ydF9jb21wcmVzc2lvbl90eXBlIGZpZWxkIGluIFF1ZXJ5SW5mbykuXG4gICAgICAgICAgICAgU3VwcG9ydGVkIGFsZ29yaXRobXM6IG5vbmUsIGRlZmxhdGUsIGd6aXAsIHN0cmVhbV9nemlwIC0tPlxuICAgICAgICA8dHJhbnNwb3J0X2NvbXByZXNzaW9uX3R5cGU+bm9uZTwvdHJhbnNwb3J0X2NvbXByZXNzaW9uX3R5cGU+XG5cbiAgICAgICAgPCEtLSBEZWZhdWx0IHRyYW5zcG9ydCBjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIGxldmVsczogMC4uMyAtLT5cbiAgICAgICAgPHRyYW5zcG9ydF9jb21wcmVzc2lvbl9sZXZlbD4wPC90cmFuc3BvcnRfY29tcHJlc3Npb25fbGV2ZWw+XG5cbiAgICAgICAgPCEtLSBTZW5kL3JlY2VpdmUgbWVzc2FnZSBzaXplIGxpbWl0cyBpbiBieXRlcy4gLTEgbWVhbnMgdW5saW1pdGVkIC0tPlxuICAgICAgICA8bWF4X3NlbmRfbWVzc2FnZV9zaXplPi0xPC9tYXhfc2VuZF9tZXNzYWdlX3NpemU+XG4gICAgICAgIDxtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemU+LTE8L21heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZT5cblxuICAgICAgICA8IS0tIEVuYWJsZSBpZiB5b3Ugd2FudCB2ZXJ5IGRldGFpbGVkIGxvZ3MgLS0+XG4gICAgICAgIDx2ZXJib3NlX2xvZ3M+ZmFsc2U8L3ZlcmJvc2VfbG9ncz5cbiAgICA8L2dycGM+XG5cbiAgICA8IS0tIFVzZWQgd2l0aCBodHRwc19wb3J0IGFuZCB0Y3BfcG9ydF9zZWN1cmUuIEZ1bGwgc3NsIG9wdGlvbnMgbGlzdDogaHR0cHM6Ly9naXRodWIuY29tL0NsaWNrSG91c2UtRXh0cmFzL3BvY28vYmxvYi9tYXN0ZXIvTmV0U1NMX09wZW5TU0wvaW5jbHVkZS9Qb2NvL05ldC9TU0xNYW5hZ2VyLmgjTDcxIC0tPlxuICAgIDxvcGVuU1NMPlxuICAgICAgICA8c2VydmVyPiA8IS0tIFVzZWQgZm9yIGh0dHBzIHNlcnZlciBBTkQgc2VjdXJlIHRjcCBwb3J0IC0tPlxuICAgICAgICAgICAgPCEtLSBvcGVuc3NsIHJlcSAtc3ViaiBcIi9DTj1sb2NhbGhvc3RcIiAtbmV3IC1uZXdrZXkgcnNhOjIwNDggLWRheXMgMzY1IC1ub2RlcyAteDUwOSAta2V5b3V0IC9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvc2VydmVyLmtleSAtb3V0IC9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvc2VydmVyLmNydCAtLT5cbiAgICAgICAgICAgIDwhLS0gPGNlcnRpZmljYXRlRmlsZT4vZXRjL2NsaWNraG91c2Utc2VydmVyL3NlcnZlci5jcnQ8L2NlcnRpZmljYXRlRmlsZT4gLS0+XG4gICAgICAgICAgICA8IS0tIDxwcml2YXRlS2V5RmlsZT4vZXRjL2NsaWNraG91c2Utc2VydmVyL3NlcnZlci5rZXk8L3ByaXZhdGVLZXlGaWxlPiAtLT5cbiAgICAgICAgICAgIDwhLS0gZGhwYXJhbXMgYXJlIG9wdGlvbmFsLiBZb3UgY2FuIGRlbGV0ZSB0aGUgPGRoUGFyYW1zRmlsZT4gZWxlbWVudC5cbiAgICAgICAgICAgICAgICAgVG8gZ2VuZXJhdGUgZGhwYXJhbXMsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gICAgICAgICAgICAgICAgICBvcGVuc3NsIGRocGFyYW0gLW91dCAvZXRjL2NsaWNraG91c2Utc2VydmVyL2RocGFyYW0ucGVtIDQwOTZcbiAgICAgICAgICAgICAgICAgT25seSBmaWxlIGZvcm1hdCB3aXRoIEJFR0lOIERIIFBBUkFNRVRFUlMgaXMgc3VwcG9ydGVkLlxuICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDwhLS0gPGRoUGFyYW1zRmlsZT4vZXRjL2NsaWNraG91c2Utc2VydmVyL2RocGFyYW0ucGVtPC9kaFBhcmFtc0ZpbGU+LS0+XG4gICAgICAgICAgICA8dmVyaWZpY2F0aW9uTW9kZT5ub25lPC92ZXJpZmljYXRpb25Nb2RlPlxuICAgICAgICAgICAgPGxvYWREZWZhdWx0Q0FGaWxlPnRydWU8L2xvYWREZWZhdWx0Q0FGaWxlPlxuICAgICAgICAgICAgPGNhY2hlU2Vzc2lvbnM+dHJ1ZTwvY2FjaGVTZXNzaW9ucz5cbiAgICAgICAgICAgIDxkaXNhYmxlUHJvdG9jb2xzPnNzbHYyLHNzbHYzPC9kaXNhYmxlUHJvdG9jb2xzPlxuICAgICAgICAgICAgPHByZWZlclNlcnZlckNpcGhlcnM+dHJ1ZTwvcHJlZmVyU2VydmVyQ2lwaGVycz5cbiAgICAgICAgPC9zZXJ2ZXI+XG5cbiAgICAgICAgPGNsaWVudD4gPCEtLSBVc2VkIGZvciBjb25uZWN0aW5nIHRvIGh0dHBzIGRpY3Rpb25hcnkgc291cmNlIGFuZCBzZWN1cmVkIFpvb2tlZXBlciBjb21tdW5pY2F0aW9uIC0tPlxuICAgICAgICAgICAgPGxvYWREZWZhdWx0Q0FGaWxlPnRydWU8L2xvYWREZWZhdWx0Q0FGaWxlPlxuICAgICAgICAgICAgPGNhY2hlU2Vzc2lvbnM+dHJ1ZTwvY2FjaGVTZXNzaW9ucz5cbiAgICAgICAgICAgIDxkaXNhYmxlUHJvdG9jb2xzPnNzbHYyLHNzbHYzPC9kaXNhYmxlUHJvdG9jb2xzPlxuICAgICAgICAgICAgPHByZWZlclNlcnZlckNpcGhlcnM+dHJ1ZTwvcHJlZmVyU2VydmVyQ2lwaGVycz5cbiAgICAgICAgICAgIDwhLS0gVXNlIGZvciBzZWxmLXNpZ25lZDogPHZlcmlmaWNhdGlvbk1vZGU+bm9uZTwvdmVyaWZpY2F0aW9uTW9kZT4gLS0+XG4gICAgICAgICAgICA8aW52YWxpZENlcnRpZmljYXRlSGFuZGxlcj5cbiAgICAgICAgICAgICAgICA8IS0tIFVzZSBmb3Igc2VsZi1zaWduZWQ6IDxuYW1lPkFjY2VwdENlcnRpZmljYXRlSGFuZGxlcjwvbmFtZT4gLS0+XG4gICAgICAgICAgICAgICAgPG5hbWU+UmVqZWN0Q2VydGlmaWNhdGVIYW5kbGVyPC9uYW1lPlxuICAgICAgICAgICAgPC9pbnZhbGlkQ2VydGlmaWNhdGVIYW5kbGVyPlxuICAgICAgICA8L2NsaWVudD5cbiAgICA8L29wZW5TU0w+XG5cbiAgICA8IS0tIERlZmF1bHQgcm9vdCBwYWdlIG9uIGh0dHBbc10gc2VydmVyLiBGb3IgZXhhbXBsZSBsb2FkIFVJIGZyb20gaHR0cHM6Ly90YWJpeC5pby8gd2hlbiBvcGVuaW5nIGh0dHA6Ly9sb2NhbGhvc3Q6ODEyMyAtLT5cbiAgICA8IS0tXG4gICAgPGh0dHBfc2VydmVyX2RlZmF1bHRfcmVzcG9uc2U+PCFbQ0RBVEFbPGh0bWwgbmctYXBwPVwiU01JMlwiPjxoZWFkPjxiYXNlIGhyZWY9XCJodHRwOi8vdWkudGFiaXguaW8vXCI+PC9oZWFkPjxib2R5PjxkaXYgdWktdmlldz1cIlwiIGNsYXNzPVwiY29udGVudC11aVwiPjwvZGl2PjxzY3JpcHQgc3JjPVwiaHR0cDovL2xvYWRlci50YWJpeC5pby9tYXN0ZXIuanNcIj48L3NjcmlwdD48L2JvZHk+PC9odG1sPl1dPjwvaHR0cF9zZXJ2ZXJfZGVmYXVsdF9yZXNwb25zZT5cbiAgICAtLT5cblxuICAgIDwhLS0gTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBxdWVyaWVzLiAtLT5cbiAgICA8bWF4X2NvbmN1cnJlbnRfcXVlcmllcz4xMDA8L21heF9jb25jdXJyZW50X3F1ZXJpZXM+XG5cbiAgICA8IS0tIE1heGltdW0gbWVtb3J5IHVzYWdlIChyZXNpZGVudCBzZXQgc2l6ZSkgZm9yIHNlcnZlciBwcm9jZXNzLlxuICAgICAgICAgWmVybyB2YWx1ZSBvciB1bnNldCBtZWFucyBkZWZhdWx0LiBEZWZhdWx0IGlzIFwibWF4X3NlcnZlcl9tZW1vcnlfdXNhZ2VfdG9fcmFtX3JhdGlvXCIgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIFJBTS5cbiAgICAgICAgIElmIHRoZSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiBcIm1heF9zZXJ2ZXJfbWVtb3J5X3VzYWdlX3RvX3JhbV9yYXRpb1wiIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCBSQU0sIGl0IHdpbGwgYmUgY3V0IGRvd24uXG5cbiAgICAgICAgIFRoZSBjb25zdHJhaW50IGlzIGNoZWNrZWQgb24gcXVlcnkgZXhlY3V0aW9uIHRpbWUuXG4gICAgICAgICBJZiBhIHF1ZXJ5IHRyaWVzIHRvIGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhlIGN1cnJlbnQgbWVtb3J5IHVzYWdlIHBsdXMgYWxsb2NhdGlvbiBpcyBncmVhdGVyXG4gICAgICAgICAgdGhhbiBzcGVjaWZpZWQgdGhyZXNob2xkLCBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbiAgICAgICAgIEl0IGlzIG5vdCBwcmFjdGljYWwgdG8gc2V0IHRoaXMgY29uc3RyYWludCB0byBzbWFsbCB2YWx1ZXMgbGlrZSBqdXN0IGEgZmV3IGdpZ2FieXRlcyxcbiAgICAgICAgICBiZWNhdXNlIG1lbW9yeSBhbGxvY2F0b3Igd2lsbCBrZWVwIHRoaXMgYW1vdW50IG9mIG1lbW9yeSBpbiBjYWNoZXMgYW5kIHRoZSBzZXJ2ZXIgd2lsbCBkZW55IHNlcnZpY2Ugb2YgcXVlcmllcy5cbiAgICAgIC0tPlxuICAgIDxtYXhfc2VydmVyX21lbW9yeV91c2FnZT4wPC9tYXhfc2VydmVyX21lbW9yeV91c2FnZT5cblxuICAgIDwhLS0gTWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyBpbiB0aGUgR2xvYmFsIHRocmVhZCBwb29sLlxuICAgIFRoaXMgd2lsbCBkZWZhdWx0IHRvIGEgbWF4aW11bSBvZiAxMDAwMCB0aHJlYWRzIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAgVGhpcyBzZXR0aW5nIHdpbGwgYmUgdXNlZnVsIGluIHNjZW5hcmlvcyB3aGVyZSB0aGVyZSBhcmUgYSBsYXJnZSBudW1iZXJcbiAgICBvZiBkaXN0cmlidXRlZCBxdWVyaWVzIHRoYXQgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5IGJ1dCBhcmUgaWRsaW5nIG1vc3RcbiAgICBvZiB0aGUgdGltZSwgaW4gd2hpY2ggY2FzZSBhIGhpZ2hlciBudW1iZXIgb2YgdGhyZWFkcyBtaWdodCBiZSByZXF1aXJlZC5cbiAgICAtLT5cblxuICAgIDxtYXhfdGhyZWFkX3Bvb2xfc2l6ZT4xMDAwMDwvbWF4X3RocmVhZF9wb29sX3NpemU+XG5cbiAgICA8IS0tIE51bWJlciBvZiB3b3JrZXJzIHRvIHJlY3ljbGUgY29ubmVjdGlvbnMgaW4gYmFja2dyb3VuZCAoc2VlIGFsc28gZHJhaW5fdGltZW91dCkuXG4gICAgICAgICBJZiB0aGUgcG9vbCBpcyBmdWxsLCBjb25uZWN0aW9uIHdpbGwgYmUgZHJhaW5lZCBzeW5jaHJvbm91c2x5LiAtLT5cbiAgICA8IS0tIDxtYXhfdGhyZWFkc19mb3JfY29ubmVjdGlvbl9jb2xsZWN0b3I+MTA8L21heF90aHJlYWRzX2Zvcl9jb25uZWN0aW9uX2NvbGxlY3Rvcj4gLS0+XG5cbiAgICA8IS0tIE9uIG1lbW9yeSBjb25zdHJhaW5lZCBlbnZpcm9ubWVudHMgeW91IG1heSBoYXZlIHRvIHNldCB0aGlzIHRvIHZhbHVlIGxhcmdlciB0aGFuIDEuXG4gICAgICAtLT5cbiAgICA8bWF4X3NlcnZlcl9tZW1vcnlfdXNhZ2VfdG9fcmFtX3JhdGlvPjAuOTwvbWF4X3NlcnZlcl9tZW1vcnlfdXNhZ2VfdG9fcmFtX3JhdGlvPlxuXG4gICAgPCEtLSBTaW1wbGUgc2VydmVyLXdpZGUgbWVtb3J5IHByb2ZpbGVyLiBDb2xsZWN0IGEgc3RhY2sgdHJhY2UgYXQgZXZlcnkgcGVhayBhbGxvY2F0aW9uIHN0ZXAgKGluIGJ5dGVzKS5cbiAgICAgICAgIERhdGEgd2lsbCBiZSBzdG9yZWQgaW4gc3lzdGVtLnRyYWNlX2xvZyB0YWJsZSB3aXRoIHF1ZXJ5X2lkID0gZW1wdHkgc3RyaW5nLlxuICAgICAgICAgWmVybyBtZWFucyBkaXNhYmxlZC5cbiAgICAgIC0tPlxuICAgIDx0b3RhbF9tZW1vcnlfcHJvZmlsZXJfc3RlcD40MTk0MzA0PC90b3RhbF9tZW1vcnlfcHJvZmlsZXJfc3RlcD5cblxuICAgIDwhLS0gQ29sbGVjdCByYW5kb20gYWxsb2NhdGlvbnMgYW5kIGRlYWxsb2NhdGlvbnMgYW5kIHdyaXRlIHRoZW0gaW50byBzeXN0ZW0udHJhY2VfbG9nIHdpdGggJ01lbW9yeVNhbXBsZScgdHJhY2VfdHlwZS5cbiAgICAgICAgIFRoZSBwcm9iYWJpbGl0eSBpcyBmb3IgZXZlcnkgYWxsb2MvZnJlZSByZWdhcmRsZXNzIHRvIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uLlxuICAgICAgICAgTm90ZSB0aGF0IHNhbXBsaW5nIGhhcHBlbnMgb25seSB3aGVuIHRoZSBhbW91bnQgb2YgdW50cmFja2VkIG1lbW9yeSBleGNlZWRzIHRoZSB1bnRyYWNrZWQgbWVtb3J5IGxpbWl0LFxuICAgICAgICAgIHdoaWNoIGlzIDQgTWlCIGJ5IGRlZmF1bHQgYnV0IGNhbiBiZSBsb3dlcmVkIGlmICd0b3RhbF9tZW1vcnlfcHJvZmlsZXJfc3RlcCcgaXMgbG93ZXJlZC5cbiAgICAgICAgIFlvdSBtYXkgd2FudCB0byBzZXQgJ3RvdGFsX21lbW9yeV9wcm9maWxlcl9zdGVwJyB0byAxIGZvciBleHRyYSBmaW5lIGdyYWluZWQgc2FtcGxpbmcuXG4gICAgICAtLT5cbiAgICA8dG90YWxfbWVtb3J5X3RyYWNrZXJfc2FtcGxlX3Byb2JhYmlsaXR5PjA8L3RvdGFsX21lbW9yeV90cmFja2VyX3NhbXBsZV9wcm9iYWJpbGl0eT5cblxuICAgIDwhLS0gU2V0IGxpbWl0IG9uIG51bWJlciBvZiBvcGVuIGZpbGVzIChkZWZhdWx0OiBtYXhpbXVtKS4gVGhpcyBzZXR0aW5nIG1ha2VzIHNlbnNlIG9uIE1hYyBPUyBYIGJlY2F1c2UgZ2V0cmxpbWl0KCkgZmFpbHMgdG8gcmV0cmlldmVcbiAgICAgICAgIGNvcnJlY3QgbWF4aW11bSB2YWx1ZS4gLS0+XG4gICAgPCEtLSA8bWF4X29wZW5fZmlsZXM+MjYyMTQ0PC9tYXhfb3Blbl9maWxlcz4gLS0+XG5cbiAgICA8IS0tIFNpemUgb2YgY2FjaGUgb2YgdW5jb21wcmVzc2VkIGJsb2NrcyBvZiBkYXRhLCB1c2VkIGluIHRhYmxlcyBvZiBNZXJnZVRyZWUgZmFtaWx5LlxuICAgICAgICAgSW4gYnl0ZXMuIENhY2hlIGlzIHNpbmdsZSBmb3Igc2VydmVyLiBNZW1vcnkgaXMgYWxsb2NhdGVkIG9ubHkgb24gZGVtYW5kLlxuICAgICAgICAgQ2FjaGUgaXMgdXNlZCB3aGVuICd1c2VfdW5jb21wcmVzc2VkX2NhY2hlJyB1c2VyIHNldHRpbmcgdHVybmVkIG9uIChvZmYgYnkgZGVmYXVsdCkuXG4gICAgICAgICBVbmNvbXByZXNzZWQgY2FjaGUgaXMgYWR2YW50YWdlb3VzIG9ubHkgZm9yIHZlcnkgc2hvcnQgcXVlcmllcyBhbmQgaW4gcmFyZSBjYXNlcy5cblxuICAgICAgICAgTm90ZTogdW5jb21wcmVzc2VkIGNhY2hlIGNhbiBiZSBwb2ludGxlc3MgZm9yIGx6NCwgYmVjYXVzZSBtZW1vcnkgYmFuZHdpZHRoXG4gICAgICAgICBpcyBzbG93ZXIgdGhhbiBtdWx0aS1jb3JlIGRlY29tcHJlc3Npb24gb24gc29tZSBzZXJ2ZXIgY29uZmlndXJhdGlvbnMuXG4gICAgICAgICBFbmFibGluZyBpdCBjYW4gc29tZXRpbWVzIHBhcmFkb3hpY2FsbHkgbWFrZSBxdWVyaWVzIHNsb3dlci5cbiAgICAgIC0tPlxuICAgIDx1bmNvbXByZXNzZWRfY2FjaGVfc2l6ZT44NTg5OTM0NTkyPC91bmNvbXByZXNzZWRfY2FjaGVfc2l6ZT5cblxuICAgIDwhLS0gQXBwcm94aW1hdGUgc2l6ZSBvZiBtYXJrIGNhY2hlLCB1c2VkIGluIHRhYmxlcyBvZiBNZXJnZVRyZWUgZmFtaWx5LlxuICAgICAgICAgSW4gYnl0ZXMuIENhY2hlIGlzIHNpbmdsZSBmb3Igc2VydmVyLiBNZW1vcnkgaXMgYWxsb2NhdGVkIG9ubHkgb24gZGVtYW5kLlxuICAgICAgICAgWW91IHNob3VsZCBub3QgbG93ZXIgdGhpcyB2YWx1ZS5cbiAgICAgIC0tPlxuICAgIDxtYXJrX2NhY2hlX3NpemU+NTM2ODcwOTEyMDwvbWFya19jYWNoZV9zaXplPlxuXG5cbiAgICA8IS0tIElmIHlvdSBlbmFibGUgdGhlIGBtaW5fYnl0ZXNfdG9fdXNlX21tYXBfaW9gIHNldHRpbmcsXG4gICAgICAgICB0aGUgZGF0YSBpbiBNZXJnZVRyZWUgdGFibGVzIGNhbiBiZSByZWFkIHdpdGggbW1hcCB0byBhdm9pZCBjb3B5aW5nIGZyb20ga2VybmVsIHRvIHVzZXJzcGFjZS5cbiAgICAgICAgIEl0IG1ha2VzIHNlbnNlIG9ubHkgZm9yIGxhcmdlIGZpbGVzIGFuZCBoZWxwcyBvbmx5IGlmIGRhdGEgcmVzaWRlIGluIHBhZ2UgY2FjaGUuXG4gICAgICAgICBUbyBhdm9pZCBmcmVxdWVudCBvcGVuL21tYXAvbXVubWFwL2Nsb3NlIGNhbGxzICh3aGljaCBhcmUgdmVyeSBleHBlbnNpdmUgZHVlIHRvIGNvbnNlcXVlbnQgcGFnZSBmYXVsdHMpXG4gICAgICAgICBhbmQgdG8gcmV1c2UgbWFwcGluZ3MgZnJvbSBzZXZlcmFsIHRocmVhZHMgYW5kIHF1ZXJpZXMsXG4gICAgICAgICB0aGUgY2FjaGUgb2YgbWFwcGVkIGZpbGVzIGlzIG1haW50YWluZWQuIEl0cyBzaXplIGlzIHRoZSBudW1iZXIgb2YgbWFwcGVkIHJlZ2lvbnMgKHVzdWFsbHkgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBtYXBwZWQgZmlsZXMpLlxuICAgICAgICAgVGhlIGFtb3VudCBvZiBkYXRhIGluIG1hcHBlZCBmaWxlcyBjYW4gYmUgbW9uaXRvcmVkXG4gICAgICAgICBpbiBzeXN0ZW0ubWV0cmljcywgc3lzdGVtLm1ldHJpY19sb2cgYnkgdGhlIE1NYXBwZWRGaWxlcywgTU1hcHBlZEZpbGVCeXRlcyBtZXRyaWNzXG4gICAgICAgICBhbmQgaW4gc3lzdGVtLmFzeW5jaHJvbm91c19tZXRyaWNzLCBzeXN0ZW0uYXN5bmNocm9ub3VzX21ldHJpY3NfbG9nIGJ5IHRoZSBNTWFwQ2FjaGVDZWxscyBtZXRyaWMsXG4gICAgICAgICBhbmQgYWxzbyBpbiBzeXN0ZW0uZXZlbnRzLCBzeXN0ZW0ucHJvY2Vzc2VzLCBzeXN0ZW0ucXVlcnlfbG9nLCBzeXN0ZW0ucXVlcnlfdGhyZWFkX2xvZywgc3lzdGVtLnF1ZXJ5X3ZpZXdzX2xvZyBieSB0aGVcbiAgICAgICAgIENyZWF0ZWRSZWFkQnVmZmVyTU1hcCwgQ3JlYXRlZFJlYWRCdWZmZXJNTWFwRmFpbGVkLCBNTWFwcGVkRmlsZUNhY2hlSGl0cywgTU1hcHBlZEZpbGVDYWNoZU1pc3NlcyBldmVudHMuXG4gICAgICAgICBOb3RlIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIG1hcHBlZCBmaWxlcyBkb2VzIG5vdCBjb25zdW1lIG1lbW9yeSBkaXJlY3RseSBhbmQgaXMgbm90IGFjY291bnRlZFxuICAgICAgICAgaW4gcXVlcnkgb3Igc2VydmVyIG1lbW9yeSB1c2FnZSAtIGJlY2F1c2UgdGhpcyBtZW1vcnkgY2FuIGJlIGRpc2NhcmRlZCBzaW1pbGFyIHRvIE9TIHBhZ2UgY2FjaGUuXG4gICAgICAgICBUaGUgY2FjaGUgaXMgZHJvcHBlZCAodGhlIGZpbGVzIGFyZSBjbG9zZWQpIGF1dG9tYXRpY2FsbHkgb24gcmVtb3ZhbCBvZiBvbGQgcGFydHMgaW4gTWVyZ2VUcmVlLFxuICAgICAgICAgYWxzbyBpdCBjYW4gYmUgZHJvcHBlZCBtYW51YWxseSBieSB0aGUgU1lTVEVNIERST1AgTU1BUCBDQUNIRSBxdWVyeS5cbiAgICAgIC0tPlxuICAgIDxtbWFwX2NhY2hlX3NpemU+MTAwMDwvbW1hcF9jYWNoZV9zaXplPlxuXG4gICAgPCEtLSBDYWNoZSBzaXplIGluIGJ5dGVzIGZvciBjb21waWxlZCBleHByZXNzaW9ucy4tLT5cbiAgICA8Y29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9zaXplPjEzNDIxNzcyODwvY29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9zaXplPlxuXG4gICAgPCEtLSBDYWNoZSBzaXplIGluIGVsZW1lbnRzIGZvciBjb21waWxlZCBleHByZXNzaW9ucy4tLT5cbiAgICA8Y29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9lbGVtZW50c19zaXplPjEwMDAwPC9jb21waWxlZF9leHByZXNzaW9uX2NhY2hlX2VsZW1lbnRzX3NpemU+XG5cbiAgICA8IS0tIFBhdGggdG8gZGF0YSBkaXJlY3RvcnksIHdpdGggdHJhaWxpbmcgc2xhc2guIC0tPlxuICAgIDxwYXRoPi92YXIvbGliL2NsaWNraG91c2UvPC9wYXRoPlxuXG4gICAgPCEtLSBQYXRoIHRvIHRlbXBvcmFyeSBkYXRhIGZvciBwcm9jZXNzaW5nIGhhcmQgcXVlcmllcy4gLS0+XG4gICAgPHRtcF9wYXRoPi92YXIvbGliL2NsaWNraG91c2UvdG1wLzwvdG1wX3BhdGg+XG5cbiAgICA8IS0tIERpc2FibGUgQXV0aFR5cGUgcGxhaW50ZXh0X3Bhc3N3b3JkIGFuZCBub19wYXNzd29yZCBmb3IgQUNMLiAtLT5cbiAgICA8IS0tIDxhbGxvd19wbGFpbnRleHRfcGFzc3dvcmQ+MDwvYWxsb3dfcGxhaW50ZXh0X3Bhc3N3b3JkPiAtLT5cbiAgICA8IS0tIDxhbGxvd19ub19wYXNzd29yZD4wPC9hbGxvd19ub19wYXNzd29yZD4gLS0+YFxuXG4gICAgPCEtLSBQb2xpY3kgZnJvbSB0aGUgPHN0b3JhZ2VfY29uZmlndXJhdGlvbj4gZm9yIHRoZSB0ZW1wb3JhcnkgZmlsZXMuXG4gICAgICAgICBJZiBub3Qgc2V0IDx0bXBfcGF0aD4gaXMgdXNlZCwgb3RoZXJ3aXNlIDx0bXBfcGF0aD4gaXMgaWdub3JlZC5cblxuICAgICAgICAgTm90ZXM6XG4gICAgICAgICAtIG1vdmVfZmFjdG9yICAgICAgICAgICAgICBpcyBpZ25vcmVkXG4gICAgICAgICAtIGtlZXBfZnJlZV9zcGFjZV9ieXRlcyAgICBpcyBpZ25vcmVkXG4gICAgICAgICAtIG1heF9kYXRhX3BhcnRfc2l6ZV9ieXRlcyBpcyBpZ25vcmVkXG4gICAgICAgICAtIHlvdSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgdm9sdW1lIGluIHRoYXQgcG9saWN5XG4gICAgLS0+XG4gICAgPCEtLSA8dG1wX3BvbGljeT50bXA8L3RtcF9wb2xpY3k+IC0tPlxuXG4gICAgPCEtLSBEaXJlY3Rvcnkgd2l0aCB1c2VyIHByb3ZpZGVkIGZpbGVzIHRoYXQgYXJlIGFjY2Vzc2libGUgYnkgJ2ZpbGUnIHRhYmxlIGZ1bmN0aW9uLiAtLT5cbiAgICA8dXNlcl9maWxlc19wYXRoPi92YXIvbGliL2NsaWNraG91c2UvdXNlcl9maWxlcy88L3VzZXJfZmlsZXNfcGF0aD5cblxuICAgIDwhLS0gTERBUCBzZXJ2ZXIgZGVmaW5pdGlvbnMuIC0tPlxuICAgIDxsZGFwX3NlcnZlcnM+XG4gICAgICAgIDwhLS0gTGlzdCBMREFQIHNlcnZlcnMgd2l0aCB0aGVpciBjb25uZWN0aW9uIHBhcmFtZXRlcnMgaGVyZSB0byBsYXRlciAxKSB1c2UgdGhlbSBhcyBhdXRoZW50aWNhdG9ycyBmb3IgZGVkaWNhdGVkIGxvY2FsIHVzZXJzLFxuICAgICAgICAgICAgICB3aG8gaGF2ZSAnbGRhcCcgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHNwZWNpZmllZCBpbnN0ZWFkIG9mICdwYXNzd29yZCcsIG9yIHRvIDIpIHVzZSB0aGVtIGFzIHJlbW90ZSB1c2VyIGRpcmVjdG9yaWVzLlxuICAgICAgICAgICAgIFBhcmFtZXRlcnM6XG4gICAgICAgICAgICAgICAgaG9zdCAtIExEQVAgc2VydmVyIGhvc3RuYW1lIG9yIElQLCB0aGlzIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgYW5kIGNhbm5vdCBiZSBlbXB0eS5cbiAgICAgICAgICAgICAgICBwb3J0IC0gTERBUCBzZXJ2ZXIgcG9ydCwgZGVmYXVsdCBpcyA2MzYgaWYgZW5hYmxlX3RscyBpcyBzZXQgdG8gdHJ1ZSwgMzg5IG90aGVyd2lzZS5cbiAgICAgICAgICAgICAgICBiaW5kX2RuIC0gdGVtcGxhdGUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIEROIHRvIGJpbmQgdG8uXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIEROIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgcmVwbGFjaW5nIGFsbCAne3VzZXJfbmFtZX0nIHN1YnN0cmluZ3Mgb2YgdGhlIHRlbXBsYXRlIHdpdGggdGhlIGFjdHVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgbmFtZSBkdXJpbmcgZWFjaCBhdXRoZW50aWNhdGlvbiBhdHRlbXB0LlxuICAgICAgICAgICAgICAgIHVzZXJfZG5fZGV0ZWN0aW9uIC0gc2VjdGlvbiB3aXRoIExEQVAgc2VhcmNoIHBhcmFtZXRlcnMgZm9yIGRldGVjdGluZyB0aGUgYWN0dWFsIHVzZXIgRE4gb2YgdGhlIGJvdW5kIHVzZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG1haW5seSB1c2VkIGluIHNlYXJjaCBmaWx0ZXJzIGZvciBmdXJ0aGVyIHJvbGUgbWFwcGluZyB3aGVuIHRoZSBzZXJ2ZXIgaXMgQWN0aXZlIERpcmVjdG9yeS4gVGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIHVzZXIgRE4gd2lsbCBiZSB1c2VkIHdoZW4gcmVwbGFjaW5nICd7dXNlcl9kbn0nIHN1YnN0cmluZ3Mgd2hlcmV2ZXIgdGhleSBhcmUgYWxsb3dlZC4gQnkgZGVmYXVsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIEROIGlzIHNldCBlcXVhbCB0byBiaW5kIEROLCBidXQgb25jZSBzZWFyY2ggaXMgcGVyZm9ybWVkLCBpdCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0byB0aGUgYWN0dWFsIGRldGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBETiB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgYmFzZV9kbiAtIHRlbXBsYXRlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBiYXNlIEROIGZvciB0aGUgTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBETiB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ5IHJlcGxhY2luZyBhbGwgJ3t1c2VyX25hbWV9JyBhbmQgJ3tiaW5kX2RufScgc3Vic3RyaW5nc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgYWN0dWFsIHVzZXIgbmFtZSBhbmQgYmluZCBETiBkdXJpbmcgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICBzY29wZSAtIHNjb3BlIG9mIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRlZCB2YWx1ZXMgYXJlOiAnYmFzZScsICdvbmVfbGV2ZWwnLCAnY2hpbGRyZW4nLCAnc3VidHJlZScgKHRoZSBkZWZhdWx0KS5cbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2ZpbHRlciAtIHRlbXBsYXRlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBzZWFyY2ggZmlsdGVyIGZvciB0aGUgTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBmaWx0ZXIgd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSByZXBsYWNpbmcgYWxsICd7dXNlcl9uYW1lfScsICd7YmluZF9kbn0nLCBhbmQgJ3tiYXNlX2RufSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyaW5ncyBvZiB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgYWN0dWFsIHVzZXIgbmFtZSwgYmluZCBETiwgYW5kIGJhc2UgRE4gZHVyaW5nIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlLCB0aGF0IHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkIHByb3Blcmx5IGluIFhNTC5cbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29vbGRvd24gLSBhIHBlcmlvZCBvZiB0aW1lLCBpbiBzZWNvbmRzLCBhZnRlciBhIHN1Y2Nlc3NmdWwgYmluZCBhdHRlbXB0LCBkdXJpbmcgd2hpY2ggYSB1c2VyIHdpbGwgYmUgYXNzdW1lZFxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVkIGZvciBhbGwgY29uc2VjdXRpdmUgcmVxdWVzdHMgd2l0aG91dCBjb250YWN0aW5nIHRoZSBMREFQIHNlcnZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgMCAodGhlIGRlZmF1bHQpIHRvIGRpc2FibGUgY2FjaGluZyBhbmQgZm9yY2UgY29udGFjdGluZyB0aGUgTERBUCBzZXJ2ZXIgZm9yIGVhY2ggYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiAgICAgICAgICAgICAgICBlbmFibGVfdGxzIC0gZmxhZyB0byB0cmlnZ2VyIHVzZSBvZiBzZWN1cmUgY29ubmVjdGlvbiB0byB0aGUgTERBUCBzZXJ2ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5ICdubycgZm9yIHBsYWluIHRleHQgKGxkYXA6Ly8pIHByb3RvY29sIChub3QgcmVjb21tZW5kZWQpLlxuICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSAneWVzJyBmb3IgTERBUCBvdmVyIFNTTC9UTFMgKGxkYXBzOi8vKSBwcm90b2NvbCAocmVjb21tZW5kZWQsIHRoZSBkZWZhdWx0KS5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgJ3N0YXJ0dGxzJyBmb3IgbGVnYWN5IFN0YXJ0VExTIHByb3RvY29sIChwbGFpbiB0ZXh0IChsZGFwOi8vKSBwcm90b2NvbCwgdXBncmFkZWQgdG8gVExTKS5cbiAgICAgICAgICAgICAgICB0bHNfbWluaW11bV9wcm90b2NvbF92ZXJzaW9uIC0gdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBvZiBTU0wvVExTLlxuICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0ZWQgdmFsdWVzIGFyZTogJ3NzbDInLCAnc3NsMycsICd0bHMxLjAnLCAndGxzMS4xJywgJ3RsczEuMicgKHRoZSBkZWZhdWx0KS5cbiAgICAgICAgICAgICAgICB0bHNfcmVxdWlyZV9jZXJ0IC0gU1NML1RMUyBwZWVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBiZWhhdmlvci5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdGVkIHZhbHVlcyBhcmU6ICduZXZlcicsICdhbGxvdycsICd0cnknLCAnZGVtYW5kJyAodGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgIHRsc19jZXJ0X2ZpbGUgLSBwYXRoIHRvIGNlcnRpZmljYXRlIGZpbGUuXG4gICAgICAgICAgICAgICAgdGxzX2tleV9maWxlIC0gcGF0aCB0byBjZXJ0aWZpY2F0ZSBrZXkgZmlsZS5cbiAgICAgICAgICAgICAgICB0bHNfY2FfY2VydF9maWxlIC0gcGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBmaWxlLlxuICAgICAgICAgICAgICAgIHRsc19jYV9jZXJ0X2RpciAtIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIENBIGNlcnRpZmljYXRlcy5cbiAgICAgICAgICAgICAgICB0bHNfY2lwaGVyX3N1aXRlIC0gYWxsb3dlZCBjaXBoZXIgc3VpdGUgKGluIE9wZW5TU0wgbm90YXRpb24pLlxuICAgICAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICAgICAgPG15X2xkYXBfc2VydmVyPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5sb2NhbGhvc3Q8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjYzNjwvcG9ydD5cbiAgICAgICAgICAgICAgICAgICAgPGJpbmRfZG4+dWlkPXt1c2VyX25hbWV9LG91PXVzZXJzLGRjPWV4YW1wbGUsZGM9Y29tPC9iaW5kX2RuPlxuICAgICAgICAgICAgICAgICAgICA8dmVyaWZpY2F0aW9uX2Nvb2xkb3duPjMwMDwvdmVyaWZpY2F0aW9uX2Nvb2xkb3duPlxuICAgICAgICAgICAgICAgICAgICA8ZW5hYmxlX3Rscz55ZXM8L2VuYWJsZV90bHM+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfbWluaW11bV9wcm90b2NvbF92ZXJzaW9uPnRsczEuMjwvdGxzX21pbmltdW1fcHJvdG9jb2xfdmVyc2lvbj5cbiAgICAgICAgICAgICAgICAgICAgPHRsc19yZXF1aXJlX2NlcnQ+ZGVtYW5kPC90bHNfcmVxdWlyZV9jZXJ0PlxuICAgICAgICAgICAgICAgICAgICA8dGxzX2NlcnRfZmlsZT4vcGF0aC90by90bHNfY2VydF9maWxlPC90bHNfY2VydF9maWxlPlxuICAgICAgICAgICAgICAgICAgICA8dGxzX2tleV9maWxlPi9wYXRoL3RvL3Rsc19rZXlfZmlsZTwvdGxzX2tleV9maWxlPlxuICAgICAgICAgICAgICAgICAgICA8dGxzX2NhX2NlcnRfZmlsZT4vcGF0aC90by90bHNfY2FfY2VydF9maWxlPC90bHNfY2FfY2VydF9maWxlPlxuICAgICAgICAgICAgICAgICAgICA8dGxzX2NhX2NlcnRfZGlyPi9wYXRoL3RvL3Rsc19jYV9jZXJ0X2RpcjwvdGxzX2NhX2NlcnRfZGlyPlxuICAgICAgICAgICAgICAgICAgICA8dGxzX2NpcGhlcl9zdWl0ZT5FQ0RIRS1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NDpFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQ6QUVTMjU2LUdDTS1TSEEzODQ8L3Rsc19jaXBoZXJfc3VpdGU+XG4gICAgICAgICAgICAgICAgPC9teV9sZGFwX3NlcnZlcj5cbiAgICAgICAgICAgICBFeGFtcGxlICh0eXBpY2FsIEFjdGl2ZSBEaXJlY3Rvcnkgd2l0aCBjb25maWd1cmVkIHVzZXIgRE4gZGV0ZWN0aW9uIGZvciBmdXJ0aGVyIHJvbGUgbWFwcGluZyk6XG4gICAgICAgICAgICAgICAgPG15X2FkX3NlcnZlcj5cbiAgICAgICAgICAgICAgICAgICAgPGhvc3Q+bG9jYWxob3N0PC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD4zODk8L3BvcnQ+XG4gICAgICAgICAgICAgICAgICAgIDxiaW5kX2RuPkVYQU1QTEVcXHt1c2VyX25hbWV9PC9iaW5kX2RuPlxuICAgICAgICAgICAgICAgICAgICA8dXNlcl9kbl9kZXRlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YmFzZV9kbj5DTj1Vc2VycyxEQz1leGFtcGxlLERDPWNvbTwvYmFzZV9kbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWFyY2hfZmlsdGVyPigmYW1wOyhvYmplY3RDbGFzcz11c2VyKShzQU1BY2NvdW50TmFtZT17dXNlcl9uYW1lfSkpPC9zZWFyY2hfZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L3VzZXJfZG5fZGV0ZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8ZW5hYmxlX3Rscz5ubzwvZW5hYmxlX3Rscz5cbiAgICAgICAgICAgICAgICA8L215X2FkX3NlcnZlcj5cbiAgICAgICAgLS0+XG4gICAgPC9sZGFwX3NlcnZlcnM+XG5cbiAgICA8IS0tIFRvIGVuYWJsZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IGZvciBIVFRQIHJlcXVlc3RzIChHU1MtU1BORUdPKSwgZm9yIHRob3NlIHVzZXJzIHdobyBhcmUgZXhwbGljaXRseSBjb25maWd1cmVkXG4gICAgICAgICAgdG8gYXV0aGVudGljYXRlIHZpYSBLZXJiZXJvcywgZGVmaW5lIGEgc2luZ2xlICdrZXJiZXJvcycgc2VjdGlvbiBoZXJlLlxuICAgICAgICAgUGFyYW1ldGVyczpcbiAgICAgICAgICAgIHByaW5jaXBhbCAtIGNhbm9uaWNhbCBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lLCB0aGF0IHdpbGwgYmUgYWNxdWlyZWQgYW5kIHVzZWQgd2hlbiBhY2NlcHRpbmcgc2VjdXJpdHkgY29udGV4dHMuXG4gICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLCBpZiBvbWl0dGVkLCB0aGUgZGVmYXVsdCBwcmluY2lwYWwgd2lsbCBiZSB1c2VkLlxuICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggJ3JlYWxtJyBwYXJhbWV0ZXIuXG4gICAgICAgICAgICByZWFsbSAtIGEgcmVhbG0sIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc3RyaWN0IGF1dGhlbnRpY2F0aW9uIHRvIG9ubHkgdGhvc2UgcmVxdWVzdHMgd2hvc2UgaW5pdGlhdG9yJ3MgcmVhbG0gbWF0Y2hlcyBpdC5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwsIGlmIG9taXR0ZWQsIG5vIGFkZGl0aW9uYWwgZmlsdGVyaW5nIGJ5IHJlYWxtIHdpbGwgYmUgYXBwbGllZC5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoICdwcmluY2lwYWwnIHBhcmFtZXRlci5cbiAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICA8a2VyYmVyb3MgLz5cbiAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICA8a2VyYmVyb3M+XG4gICAgICAgICAgICAgICAgPHByaW5jaXBhbD5IVFRQL2NsaWNraG91c2UuZXhhbXBsZS5jb21ARVhBTVBMRS5DT008L3ByaW5jaXBhbD5cbiAgICAgICAgICAgIDwva2VyYmVyb3M+XG4gICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgPGtlcmJlcm9zPlxuICAgICAgICAgICAgICAgIDxyZWFsbT5FWEFNUExFLkNPTTwvcmVhbG0+XG4gICAgICAgICAgICA8L2tlcmJlcm9zPlxuICAgIC0tPlxuXG4gICAgPCEtLSBTb3VyY2VzIHRvIHJlYWQgdXNlcnMsIHJvbGVzLCBhY2Nlc3MgcmlnaHRzLCBwcm9maWxlcyBvZiBzZXR0aW5ncywgcXVvdGFzLiAtLT5cbiAgICA8dXNlcl9kaXJlY3Rvcmllcz5cbiAgICAgICAgPHVzZXJzX3htbD5cbiAgICAgICAgICAgIDwhLS0gUGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgd2l0aCBwcmVkZWZpbmVkIHVzZXJzLiAtLT5cbiAgICAgICAgICAgIDxwYXRoPnVzZXJzLnhtbDwvcGF0aD5cbiAgICAgICAgPC91c2Vyc194bWw+XG4gICAgICAgIDxsb2NhbF9kaXJlY3Rvcnk+XG4gICAgICAgICAgICA8IS0tIFBhdGggdG8gZm9sZGVyIHdoZXJlIHVzZXJzIGNyZWF0ZWQgYnkgU1FMIGNvbW1hbmRzIGFyZSBzdG9yZWQuIC0tPlxuICAgICAgICAgICAgPHBhdGg+L3Zhci9saWIvY2xpY2tob3VzZS9hY2Nlc3MvPC9wYXRoPlxuICAgICAgICA8L2xvY2FsX2RpcmVjdG9yeT5cblxuICAgICAgICA8IS0tIFRvIGFkZCBhbiBMREFQIHNlcnZlciBhcyBhIHJlbW90ZSB1c2VyIGRpcmVjdG9yeSBvZiB1c2VycyB0aGF0IGFyZSBub3QgZGVmaW5lZCBsb2NhbGx5LCBkZWZpbmUgYSBzaW5nbGUgJ2xkYXAnIHNlY3Rpb25cbiAgICAgICAgICAgICAgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gICAgICAgICAgICAgICAgc2VydmVyIC0gb25lIG9mIExEQVAgc2VydmVyIG5hbWVzIGRlZmluZWQgaW4gJ2xkYXBfc2VydmVycycgY29uZmlnIHNlY3Rpb24gYWJvdmUuXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgYW5kIGNhbm5vdCBiZSBlbXB0eS5cbiAgICAgICAgICAgICAgICByb2xlcyAtIHNlY3Rpb24gd2l0aCBhIGxpc3Qgb2YgbG9jYWxseSBkZWZpbmVkIHJvbGVzIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byBlYWNoIHVzZXIgcmV0cmlldmVkIGZyb20gdGhlIExEQVAgc2VydmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gcm9sZXMgYXJlIHNwZWNpZmllZCBoZXJlIG9yIGFzc2lnbmVkIGR1cmluZyByb2xlIG1hcHBpbmcgKGJlbG93KSwgdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIHBlcmZvcm0gYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucyBhZnRlciBhdXRoZW50aWNhdGlvbi5cbiAgICAgICAgICAgICAgICByb2xlX21hcHBpbmcgLSBzZWN0aW9uIHdpdGggTERBUCBzZWFyY2ggcGFyYW1ldGVycyBhbmQgbWFwcGluZyBydWxlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gYSB1c2VyIGF1dGhlbnRpY2F0ZXMsIHdoaWxlIHN0aWxsIGJvdW5kIHRvIExEQVAsIGFuIExEQVAgc2VhcmNoIGlzIHBlcmZvcm1lZCB1c2luZyBzZWFyY2hfZmlsdGVyIGFuZCB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSBsb2dnZWQgaW4gdXNlci4gRm9yIGVhY2ggZW50cnkgZm91bmQgZHVyaW5nIHRoYXQgc2VhcmNoLCB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQuIEZvciBlYWNoIGF0dHJpYnV0ZSB2YWx1ZSB0aGF0IGhhcyB0aGUgc3BlY2lmaWVkIHByZWZpeCwgdGhlIHByZWZpeCBpcyByZW1vdmVkLCBhbmQgdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYmVjb21lcyB0aGUgbmFtZSBvZiBhIGxvY2FsIHJvbGUgZGVmaW5lZCBpbiBDbGlja0hvdXNlLCB3aGljaCBpcyBleHBlY3RlZCB0byBiZSBjcmVhdGVkIGJlZm9yZWhhbmQgYnlcbiAgICAgICAgICAgICAgICAgICAgICAgICBDUkVBVEUgUk9MRSBjb21tYW5kLlxuICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgY2FuIGJlIG11bHRpcGxlICdyb2xlX21hcHBpbmcnIHNlY3Rpb25zIGRlZmluZWQgaW5zaWRlIHRoZSBzYW1lICdsZGFwJyBzZWN0aW9uLiBBbGwgb2YgdGhlbSB3aWxsIGJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZC5cbiAgICAgICAgICAgICAgICAgICAgYmFzZV9kbiAtIHRlbXBsYXRlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBiYXNlIEROIGZvciB0aGUgTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBETiB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ5IHJlcGxhY2luZyBhbGwgJ3t1c2VyX25hbWV9JywgJ3tiaW5kX2RufScsIGFuZCAne3VzZXJfZG59J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHJpbmdzIG9mIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBhY3R1YWwgdXNlciBuYW1lLCBiaW5kIEROLCBhbmQgdXNlciBETiBkdXJpbmcgZWFjaCBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgc2NvcGUgLSBzY29wZSBvZiB0aGUgTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0ZWQgdmFsdWVzIGFyZTogJ2Jhc2UnLCAnb25lX2xldmVsJywgJ2NoaWxkcmVuJywgJ3N1YnRyZWUnICh0aGUgZGVmYXVsdCkuXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9maWx0ZXIgLSB0ZW1wbGF0ZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgc2VhcmNoIGZpbHRlciBmb3IgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgZmlsdGVyIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgcmVwbGFjaW5nIGFsbCAne3VzZXJfbmFtZX0nLCAne2JpbmRfZG59JywgJ3t1c2VyX2RufScsIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Jhc2VfZG59JyBzdWJzdHJpbmdzIG9mIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBhY3R1YWwgdXNlciBuYW1lLCBiaW5kIEROLCB1c2VyIEROLCBhbmQgYmFzZSBETiBkdXJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlLCB0aGF0IHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkIHByb3Blcmx5IGluIFhNTC5cbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIC0gYXR0cmlidXRlIG5hbWUgd2hvc2UgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlIExEQVAgc2VhcmNoLiAnY24nLCBieSBkZWZhdWx0LlxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggLSBwcmVmaXgsIHRoYXQgd2lsbCBiZSBleHBlY3RlZCB0byBiZSBpbiBmcm9udCBvZiBlYWNoIHN0cmluZyBpbiB0aGUgb3JpZ2luYWwgbGlzdCBvZiBzdHJpbmdzIHJldHVybmVkIGJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBMREFQIHNlYXJjaC4gUHJlZml4IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBvcmlnaW5hbCBzdHJpbmdzIGFuZCByZXN1bHRpbmcgc3RyaW5ncyB3aWxsIGJlIHRyZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgbG9jYWwgcm9sZSBuYW1lcy4gRW1wdHksIGJ5IGRlZmF1bHQuXG4gICAgICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgICAgICA8bGRhcD5cbiAgICAgICAgICAgICAgICAgICAgPHNlcnZlcj5teV9sZGFwX3NlcnZlcjwvc2VydmVyPlxuICAgICAgICAgICAgICAgICAgICA8cm9sZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bXlfbG9jYWxfcm9sZTEgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxteV9sb2NhbF9yb2xlMiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3JvbGVzPlxuICAgICAgICAgICAgICAgICAgICA8cm9sZV9tYXBwaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJhc2VfZG4+b3U9Z3JvdXBzLGRjPWV4YW1wbGUsZGM9Y29tPC9iYXNlX2RuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNjb3BlPnN1YnRyZWU8L3Njb3BlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlYXJjaF9maWx0ZXI+KCZhbXA7KG9iamVjdENsYXNzPWdyb3VwT2ZOYW1lcykobWVtYmVyPXtiaW5kX2RufSkpPC9zZWFyY2hfZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZT5jbjwvYXR0cmlidXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZWZpeD5jbGlja2hvdXNlXzwvcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8L3JvbGVfbWFwcGluZz5cbiAgICAgICAgICAgICAgICA8L2xkYXA+XG4gICAgICAgICAgICAgRXhhbXBsZSAodHlwaWNhbCBBY3RpdmUgRGlyZWN0b3J5IHdpdGggcm9sZSBtYXBwaW5nIHRoYXQgcmVsaWVzIG9uIHRoZSBkZXRlY3RlZCB1c2VyIEROKTpcbiAgICAgICAgICAgICAgICA8bGRhcD5cbiAgICAgICAgICAgICAgICAgICAgPHNlcnZlcj5teV9hZF9zZXJ2ZXI8L3NlcnZlcj5cbiAgICAgICAgICAgICAgICAgICAgPHJvbGVfbWFwcGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiYXNlX2RuPkNOPVVzZXJzLERDPWV4YW1wbGUsREM9Y29tPC9iYXNlX2RuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZT5DTjwvYXR0cmlidXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNjb3BlPnN1YnRyZWU8L3Njb3BlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlYXJjaF9maWx0ZXI+KCZhbXA7KG9iamVjdENsYXNzPWdyb3VwKShtZW1iZXI9e3VzZXJfZG59KSk8L3NlYXJjaF9maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlZml4PmNsaWNraG91c2VfPC9wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgIDwvcm9sZV9tYXBwaW5nPlxuICAgICAgICAgICAgICAgIDwvbGRhcD5cbiAgICAgICAgLS0+XG4gICAgPC91c2VyX2RpcmVjdG9yaWVzPlxuXG4gICAgPCEtLSBEZWZhdWx0IHByb2ZpbGUgb2Ygc2V0dGluZ3MuIC0tPlxuICAgIDxkZWZhdWx0X3Byb2ZpbGU+ZGVmYXVsdDwvZGVmYXVsdF9wcm9maWxlPlxuXG4gICAgPCEtLSBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwcmVmaXhlcyBmb3IgdXNlci1kZWZpbmVkIHNldHRpbmdzLiAtLT5cbiAgICA8Y3VzdG9tX3NldHRpbmdzX3ByZWZpeGVzPjwvY3VzdG9tX3NldHRpbmdzX3ByZWZpeGVzPlxuXG4gICAgPCEtLSBTeXN0ZW0gcHJvZmlsZSBvZiBzZXR0aW5ncy4gVGhpcyBzZXR0aW5ncyBhcmUgdXNlZCBieSBpbnRlcm5hbCBwcm9jZXNzZXMgKERpc3RyaWJ1dGVkIERETCB3b3JrZXIgYW5kIHNvIG9uKS4gLS0+XG4gICAgPCEtLSA8c3lzdGVtX3Byb2ZpbGU+ZGVmYXVsdDwvc3lzdGVtX3Byb2ZpbGU+IC0tPlxuXG4gICAgPCEtLSBCdWZmZXIgcHJvZmlsZSBvZiBzZXR0aW5ncy5cbiAgICAgICAgIFRoaXMgc2V0dGluZ3MgYXJlIHVzZWQgYnkgQnVmZmVyIHN0b3JhZ2UgdG8gZmx1c2ggZGF0YSB0byB0aGUgdW5kZXJseWluZyB0YWJsZS5cbiAgICAgICAgIERlZmF1bHQ6IHVzZWQgZnJvbSBzeXN0ZW1fcHJvZmlsZSBkaXJlY3RpdmUuXG4gICAgLS0+XG4gICAgPCEtLSA8YnVmZmVyX3Byb2ZpbGU+ZGVmYXVsdDwvYnVmZmVyX3Byb2ZpbGU+IC0tPlxuXG4gICAgPCEtLSBEZWZhdWx0IGRhdGFiYXNlLiAtLT5cbiAgICA8ZGVmYXVsdF9kYXRhYmFzZT5kZWZhdWx0PC9kZWZhdWx0X2RhdGFiYXNlPlxuXG4gICAgPCEtLSBTZXJ2ZXIgdGltZSB6b25lIGNvdWxkIGJlIHNldCBoZXJlLlxuXG4gICAgICAgICBUaW1lIHpvbmUgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBTdHJpbmcgYW5kIERhdGVUaW1lIHR5cGVzLFxuICAgICAgICAgIHdoZW4gcHJpbnRpbmcgRGF0ZVRpbWUgaW4gdGV4dCBmb3JtYXRzIGFuZCBwYXJzaW5nIERhdGVUaW1lIGZyb20gdGV4dCxcbiAgICAgICAgICBpdCBpcyB1c2VkIGluIGRhdGUgYW5kIHRpbWUgcmVsYXRlZCBmdW5jdGlvbnMsIGlmIHNwZWNpZmljIHRpbWUgem9uZSB3YXMgbm90IHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cblxuICAgICAgICAgVGltZSB6b25lIGlzIHNwZWNpZmllZCBhcyBpZGVudGlmaWVyIGZyb20gSUFOQSB0aW1lIHpvbmUgZGF0YWJhc2UsIGxpa2UgVVRDIG9yIEFmcmljYS9BYmlkamFuLlxuICAgICAgICAgSWYgbm90IHNwZWNpZmllZCwgc3lzdGVtIHRpbWUgem9uZSBhdCBzZXJ2ZXIgc3RhcnR1cCBpcyB1c2VkLlxuXG4gICAgICAgICBQbGVhc2Ugbm90ZSwgdGhhdCBzZXJ2ZXIgY291bGQgZGlzcGxheSB0aW1lIHpvbmUgYWxpYXMgaW5zdGVhZCBvZiBzcGVjaWZpZWQgbmFtZS5cbiAgICAgICAgIEV4YW1wbGU6IFp1bHUgaXMgYW4gYWxpYXMgZm9yIFVUQy5cbiAgICAtLT5cbiAgICA8IS0tIDx0aW1lem9uZT5VVEM8L3RpbWV6b25lPiAtLT5cblxuICAgIDwhLS0gWW91IGNhbiBzcGVjaWZ5IHVtYXNrIGhlcmUgKHNlZSBcIm1hbiB1bWFza1wiKS4gU2VydmVyIHdpbGwgYXBwbHkgaXQgb24gc3RhcnR1cC5cbiAgICAgICAgIE51bWJlciBpcyBhbHdheXMgcGFyc2VkIGFzIG9jdGFsLiBEZWZhdWx0IHVtYXNrIGlzIDAyNyAob3RoZXIgdXNlcnMgY2Fubm90IHJlYWQgbG9ncywgZGF0YSBmaWxlcywgZXRjOyBncm91cCBjYW4gb25seSByZWFkKS5cbiAgICAtLT5cbiAgICA8IS0tIDx1bWFzaz4wMjI8L3VtYXNrPiAtLT5cblxuICAgIDwhLS0gUGVyZm9ybSBtbG9ja2FsbCBhZnRlciBzdGFydHVwIHRvIGxvd2VyIGZpcnN0IHF1ZXJpZXMgbGF0ZW5jeVxuICAgICAgICAgIGFuZCB0byBwcmV2ZW50IGNsaWNraG91c2UgZXhlY3V0YWJsZSBmcm9tIGJlaW5nIHBhZ2VkIG91dCB1bmRlciBoaWdoIElPIGxvYWQuXG4gICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiBpcyByZWNvbW1lbmRlZCBidXQgd2lsbCBsZWFkIHRvIGluY3JlYXNlZCBzdGFydHVwIHRpbWUgZm9yIHVwIHRvIGEgZmV3IHNlY29uZHMuXG4gICAgLS0+XG4gICAgPG1sb2NrX2V4ZWN1dGFibGU+dHJ1ZTwvbWxvY2tfZXhlY3V0YWJsZT5cblxuICAgIDwhLS0gUmVhbGxvY2F0ZSBtZW1vcnkgZm9yIG1hY2hpbmUgY29kZSAoXCJ0ZXh0XCIpIHVzaW5nIGh1Z2UgcGFnZXMuIEhpZ2hseSBleHBlcmltZW50YWwuIC0tPlxuICAgIDxyZW1hcF9leGVjdXRhYmxlPmZhbHNlPC9yZW1hcF9leGVjdXRhYmxlPlxuXG4gICAgPCFbQ0RBVEFbXG4gICAgICAgICBVbmNvbW1lbnQgYmVsb3cgaW4gb3JkZXIgdG8gdXNlIEpEQkMgdGFibGUgZW5naW5lIGFuZCBmdW5jdGlvbi5cblxuICAgICAgICAgVG8gaW5zdGFsbCBhbmQgcnVuIEpEQkMgYnJpZGdlIGluIGJhY2tncm91bmQ6XG4gICAgICAgICAqIFtEZWJpYW4vVWJ1bnR1XVxuICAgICAgICAgICBleHBvcnQgTVZOX1VSTD1odHRwczovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvcnUveWFuZGV4L2NsaWNraG91c2UvY2xpY2tob3VzZS1qZGJjLWJyaWRnZVxuICAgICAgICAgICBleHBvcnQgUEtHX1ZFUj0kKGN1cmwgLXNMICRNVk5fVVJML21hdmVuLW1ldGFkYXRhLnhtbCB8IGdyZXAgJzxyZWxlYXNlPicgfCBzZWQgLWUgJ3N8Lio+XFwoLipcXCk8Lip8XFwxfCcpXG4gICAgICAgICAgIHdnZXQgaHR0cHM6Ly9naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1qZGJjLWJyaWRnZS9yZWxlYXNlcy9kb3dubG9hZC92JFBLR19WRVIvY2xpY2tob3VzZS1qZGJjLWJyaWRnZV8kUEtHX1ZFUi0xX2FsbC5kZWJcbiAgICAgICAgICAgYXB0IGluc3RhbGwgLS1uby1pbnN0YWxsLXJlY29tbWVuZHMgLWYgLi9jbGlja2hvdXNlLWpkYmMtYnJpZGdlXyRQS0dfVkVSLTFfYWxsLmRlYlxuICAgICAgICAgICBjbGlja2hvdXNlLWpkYmMtYnJpZGdlICZcblxuICAgICAgICAgKiBbQ2VudE9TL1JIRUxdXG4gICAgICAgICAgIGV4cG9ydCBNVk5fVVJMPWh0dHBzOi8vcmVwbzEubWF2ZW4ub3JnL21hdmVuMi9ydS95YW5kZXgvY2xpY2tob3VzZS9jbGlja2hvdXNlLWpkYmMtYnJpZGdlXG4gICAgICAgICAgIGV4cG9ydCBQS0dfVkVSPSQoY3VybCAtc0wgJE1WTl9VUkwvbWF2ZW4tbWV0YWRhdGEueG1sIHwgZ3JlcCAnPHJlbGVhc2U+JyB8IHNlZCAtZSAnc3wuKj5cXCguKlxcKTwuKnxcXDF8JylcbiAgICAgICAgICAgd2dldCBodHRwczovL2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWpkYmMtYnJpZGdlL3JlbGVhc2VzL2Rvd25sb2FkL3YkUEtHX1ZFUi9jbGlja2hvdXNlLWpkYmMtYnJpZGdlLSRQS0dfVkVSLTEubm9hcmNoLnJwbVxuICAgICAgICAgICB5dW0gbG9jYWxpbnN0YWxsIC15IGNsaWNraG91c2UtamRiYy1icmlkZ2UtJFBLR19WRVItMS5ub2FyY2gucnBtXG4gICAgICAgICAgIGNsaWNraG91c2UtamRiYy1icmlkZ2UgJlxuXG4gICAgICAgICBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1qZGJjLWJyaWRnZSN1c2FnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBdXT5cbiAgICA8IS0tXG4gICAgPGpkYmNfYnJpZGdlPlxuICAgICAgICA8aG9zdD4xMjcuMC4wLjE8L2hvc3Q+XG4gICAgICAgIDxwb3J0PjkwMTk8L3BvcnQ+XG4gICAgPC9qZGJjX2JyaWRnZT5cbiAgICAtLT5cblxuICAgIDwhLS0gVGhlIGxpc3Qgb2YgaG9zdHMgYWxsb3dlZCB0byB1c2UgaW4gVVJMLXJlbGF0ZWQgc3RvcmFnZSBlbmdpbmVzIGFuZCB0YWJsZSBmdW5jdGlvbnMuXG4gICAgICAgIElmIHRoaXMgc2VjdGlvbiBpcyBub3QgcHJlc2VudCBpbiBjb25maWd1cmF0aW9uLCBhbGwgaG9zdHMgYXJlIGFsbG93ZWQuXG4gICAgLS0+XG4gICAgPCEtLTxyZW1vdGVfdXJsX2FsbG93X2hvc3RzPi0tPlxuICAgICAgICA8IS0tIEhvc3Qgc2hvdWxkIGJlIHNwZWNpZmllZCBleGFjdGx5IGFzIGluIFVSTC4gVGhlIG5hbWUgaXMgY2hlY2tlZCBiZWZvcmUgRE5TIHJlc29sdXRpb24uXG4gICAgICAgICAgICBFeGFtcGxlOiBcImNsaWNraG91c2UuY29tXCIsIFwiY2xpY2tob3VzZS5jb20uXCIgYW5kIFwid3d3LmNsaWNraG91c2UuY29tXCIgYXJlIGRpZmZlcmVudCBob3N0cy5cbiAgICAgICAgICAgICAgICAgICAgSWYgcG9ydCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBVUkwsIHRoZSBob3N0OnBvcnQgaXMgY2hlY2tlZCBhcyBhIHdob2xlLlxuICAgICAgICAgICAgICAgICAgICBJZiBob3N0IHNwZWNpZmllZCBoZXJlIHdpdGhvdXQgcG9ydCwgYW55IHBvcnQgd2l0aCB0aGlzIGhvc3QgYWxsb3dlZC5cbiAgICAgICAgICAgICAgICAgICAgXCJjbGlja2hvdXNlLmNvbVwiIC0+IFwiY2xpY2tob3VzZS5jb206NDQzXCIsIFwiY2xpY2tob3VzZS5jb206ODBcIiBldGMuIGlzIGFsbG93ZWQsIGJ1dCBcImNsaWNraG91c2UuY29tOjgwXCIgLT4gb25seSBcImNsaWNraG91c2UuY29tOjgwXCIgaXMgYWxsb3dlZC5cbiAgICAgICAgICAgIElmIHRoZSBob3N0IGlzIHNwZWNpZmllZCBhcyBJUCBhZGRyZXNzLCBpdCBpcyBjaGVja2VkIGFzIHNwZWNpZmllZCBpbiBVUkwuIEV4YW1wbGU6IFwiWzJhMDI6NmI4OmE6OmFdXCIuXG4gICAgICAgICAgICBJZiB0aGVyZSBhcmUgcmVkaXJlY3RzIGFuZCBzdXBwb3J0IGZvciByZWRpcmVjdHMgaXMgZW5hYmxlZCwgZXZlcnkgcmVkaXJlY3QgKHRoZSBMb2NhdGlvbiBmaWVsZCkgaXMgY2hlY2tlZC5cbiAgICAgICAgICAgIEhvc3Qgc2hvdWxkIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgaG9zdCB4bWwgdGFnOlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5jbGlja2hvdXNlLmNvbTwvaG9zdD5cbiAgICAgICAgLS0+XG5cbiAgICAgICAgPCEtLSBSZWd1bGFyIGV4cHJlc3Npb24gY2FuIGJlIHNwZWNpZmllZC4gUkUyIGVuZ2luZSBpcyB1c2VkIGZvciByZWdleHBzLlxuICAgICAgICAgICAgUmVnZXhwcyBhcmUgbm90IGFsaWduZWQ6IGRvbid0IGZvcmdldCB0byBhZGQgXiBhbmQgJC4gQWxzbyBkb24ndCBmb3JnZXQgdG8gZXNjYXBlIGRvdCAoLikgbWV0YWNoYXJhY3RlclxuICAgICAgICAgICAgKGZvcmdldHRpbmcgdG8gZG8gc28gaXMgYSBjb21tb24gc291cmNlIG9mIGVycm9yKS5cbiAgICAgICAgLS0+XG4gICAgPCEtLTwvcmVtb3RlX3VybF9hbGxvd19ob3N0cz4tLT5cblxuICAgIDwhLS0gSWYgZWxlbWVudCBoYXMgJ2luY2wnIGF0dHJpYnV0ZSwgdGhlbiBmb3IgaXQncyB2YWx1ZSB3aWxsIGJlIHVzZWQgY29ycmVzcG9uZGluZyBzdWJzdGl0dXRpb24gZnJvbSBhbm90aGVyIGZpbGUuXG4gICAgICAgICBCeSBkZWZhdWx0LCBwYXRoIHRvIGZpbGUgd2l0aCBzdWJzdGl0dXRpb25zIGlzIC9ldGMvbWV0cmlrYS54bWwuIEl0IGNvdWxkIGJlIGNoYW5nZWQgaW4gY29uZmlnIGluICdpbmNsdWRlX2Zyb20nIGVsZW1lbnQuXG4gICAgICAgICBWYWx1ZXMgZm9yIHN1YnN0aXR1dGlvbnMgYXJlIHNwZWNpZmllZCBpbiAvY2xpY2tob3VzZS9uYW1lX29mX3N1YnN0aXR1dGlvbiBlbGVtZW50cyBpbiB0aGF0IGZpbGUuXG4gICAgICAtLT5cblxuICAgIDwhLS0gU3Vic3RpdHV0aW9ucyBmb3IgcGFyYW1ldGVycyBvZiByZXBsaWNhdGVkIHRhYmxlcy5cbiAgICAgICAgICBPcHRpb25hbC4gSWYgeW91IGRvbid0IHVzZSByZXBsaWNhdGVkIHRhYmxlcywgeW91IGNvdWxkIG9taXQgdGhhdC5cblxuICAgICAgICAgU2VlIGh0dHBzOi8vY2xpY2tob3VzZS5jb20vZG9jcy9lbi9lbmdpbmVzL3RhYmxlLWVuZ2luZXMvbWVyZ2V0cmVlLWZhbWlseS9yZXBsaWNhdGlvbi8jY3JlYXRpbmctcmVwbGljYXRlZC10YWJsZXNcbiAgICAgIC0tPlxuXG4gICAgPG1hY3Jvcz5cbiAgICAgICAgPHNoYXJkPjAxPC9zaGFyZD5cbiAgICAgICAgPHJlcGxpY2E+ZXhhbXBsZTAxLTAxLTE8L3JlcGxpY2E+XG4gICAgPC9tYWNyb3M+XG5cblxuXG4gICAgPCEtLSBSZWxvYWRpbmcgaW50ZXJ2YWwgZm9yIGVtYmVkZGVkIGRpY3Rpb25hcmllcywgaW4gc2Vjb25kcy4gRGVmYXVsdDogMzYwMC4gLS0+XG4gICAgPGJ1aWx0aW5fZGljdGlvbmFyaWVzX3JlbG9hZF9pbnRlcnZhbD4zNjAwPC9idWlsdGluX2RpY3Rpb25hcmllc19yZWxvYWRfaW50ZXJ2YWw+XG5cblxuICAgIDwhLS0gTWF4aW11bSBzZXNzaW9uIHRpbWVvdXQsIGluIHNlY29uZHMuIERlZmF1bHQ6IDM2MDAuIC0tPlxuICAgIDxtYXhfc2Vzc2lvbl90aW1lb3V0PjM2MDA8L21heF9zZXNzaW9uX3RpbWVvdXQ+XG5cbiAgICA8IS0tIERlZmF1bHQgc2Vzc2lvbiB0aW1lb3V0LCBpbiBzZWNvbmRzLiBEZWZhdWx0OiA2MC4gLS0+XG4gICAgPGRlZmF1bHRfc2Vzc2lvbl90aW1lb3V0PjYwPC9kZWZhdWx0X3Nlc3Npb25fdGltZW91dD5cblxuICAgIDwhLS0gU2VuZGluZyBkYXRhIHRvIEdyYXBoaXRlIGZvciBtb25pdG9yaW5nLiBTZXZlcmFsIHNlY3Rpb25zIGNhbiBiZSBkZWZpbmVkLiAtLT5cbiAgICA8IS0tXG4gICAgICAgIGludGVydmFsIC0gc2VuZCBldmVyeSBYIHNlY29uZFxuICAgICAgICByb290X3BhdGggLSBwcmVmaXggZm9yIGtleXNcbiAgICAgICAgaG9zdG5hbWVfaW5fcGF0aCAtIGFwcGVuZCBob3N0bmFtZSB0byByb290X3BhdGggKGRlZmF1bHQgPSB0cnVlKVxuICAgICAgICBtZXRyaWNzIC0gc2VuZCBkYXRhIGZyb20gdGFibGUgc3lzdGVtLm1ldHJpY3NcbiAgICAgICAgZXZlbnRzIC0gc2VuZCBkYXRhIGZyb20gdGFibGUgc3lzdGVtLmV2ZW50c1xuICAgICAgICBhc3luY2hyb25vdXNfbWV0cmljcyAtIHNlbmQgZGF0YSBmcm9tIHRhYmxlIHN5c3RlbS5hc3luY2hyb25vdXNfbWV0cmljc1xuICAgIC0tPlxuICAgIDwhLS1cbiAgICA8Z3JhcGhpdGU+XG4gICAgICAgIDxob3N0PmxvY2FsaG9zdDwvaG9zdD5cbiAgICAgICAgPHBvcnQ+NDIwMDA8L3BvcnQ+XG4gICAgICAgIDx0aW1lb3V0PjAuMTwvdGltZW91dD5cbiAgICAgICAgPGludGVydmFsPjYwPC9pbnRlcnZhbD5cbiAgICAgICAgPHJvb3RfcGF0aD5vbmVfbWluPC9yb290X3BhdGg+XG4gICAgICAgIDxob3N0bmFtZV9pbl9wYXRoPnRydWU8L2hvc3RuYW1lX2luX3BhdGg+XG5cbiAgICAgICAgPG1ldHJpY3M+dHJ1ZTwvbWV0cmljcz5cbiAgICAgICAgPGV2ZW50cz50cnVlPC9ldmVudHM+XG4gICAgICAgIDxldmVudHNfY3VtdWxhdGl2ZT5mYWxzZTwvZXZlbnRzX2N1bXVsYXRpdmU+XG4gICAgICAgIDxhc3luY2hyb25vdXNfbWV0cmljcz50cnVlPC9hc3luY2hyb25vdXNfbWV0cmljcz5cbiAgICA8L2dyYXBoaXRlPlxuICAgIDxncmFwaGl0ZT5cbiAgICAgICAgPGhvc3Q+bG9jYWxob3N0PC9ob3N0PlxuICAgICAgICA8cG9ydD40MjAwMDwvcG9ydD5cbiAgICAgICAgPHRpbWVvdXQ+MC4xPC90aW1lb3V0PlxuICAgICAgICA8aW50ZXJ2YWw+MTwvaW50ZXJ2YWw+XG4gICAgICAgIDxyb290X3BhdGg+b25lX3NlYzwvcm9vdF9wYXRoPlxuXG4gICAgICAgIDxtZXRyaWNzPnRydWU8L21ldHJpY3M+XG4gICAgICAgIDxldmVudHM+dHJ1ZTwvZXZlbnRzPlxuICAgICAgICA8ZXZlbnRzX2N1bXVsYXRpdmU+ZmFsc2U8L2V2ZW50c19jdW11bGF0aXZlPlxuICAgICAgICA8YXN5bmNocm9ub3VzX21ldHJpY3M+ZmFsc2U8L2FzeW5jaHJvbm91c19tZXRyaWNzPlxuICAgIDwvZ3JhcGhpdGU+XG4gICAgLS0+XG5cbiAgICA8IS0tIFNlcnZlIGVuZHBvaW50IGZvciBQcm9tZXRoZXVzIG1vbml0b3JpbmcuIC0tPlxuICAgIDwhLS1cbiAgICAgICAgZW5kcG9pbnQgLSBtZXJ0aWNzIHBhdGggKHJlbGF0aXZlIHRvIHJvb3QsIHN0YXRyaW5nIHdpdGggXCIvXCIpXG4gICAgICAgIHBvcnQgLSBwb3J0IHRvIHNldHVwIHNlcnZlci4gSWYgbm90IGRlZmluZWQgb3IgMCB0aGFuIGh0dHBfcG9ydCB1c2VkXG4gICAgICAgIG1ldHJpY3MgLSBzZW5kIGRhdGEgZnJvbSB0YWJsZSBzeXN0ZW0ubWV0cmljc1xuICAgICAgICBldmVudHMgLSBzZW5kIGRhdGEgZnJvbSB0YWJsZSBzeXN0ZW0uZXZlbnRzXG4gICAgICAgIGFzeW5jaHJvbm91c19tZXRyaWNzIC0gc2VuZCBkYXRhIGZyb20gdGFibGUgc3lzdGVtLmFzeW5jaHJvbm91c19tZXRyaWNzXG4gICAgICAgIHN0YXR1c19pbmZvIC0gc2VuZCBkYXRhIGZyb20gZGlmZmVyZW50IGNvbXBvbmVudCBmcm9tIENILCBleDogRGljdGlvbmFyaWVzIHN0YXR1c1xuICAgIC0tPlxuXG4gICAgPHByb21ldGhldXM+XG4gICAgICAgIDxlbmRwb2ludD4vbWV0cmljczwvZW5kcG9pbnQ+XG4gICAgICAgIDxwb3J0PjkzNjM8L3BvcnQ+XG5cbiAgICAgICAgPG1ldHJpY3M+dHJ1ZTwvbWV0cmljcz5cbiAgICAgICAgPGV2ZW50cz50cnVlPC9ldmVudHM+XG4gICAgICAgIDxhc3luY2hyb25vdXNfbWV0cmljcz50cnVlPC9hc3luY2hyb25vdXNfbWV0cmljcz5cbiAgICAgICAgPHN0YXR1c19pbmZvPnRydWU8L3N0YXR1c19pbmZvPlxuICAgIDwvcHJvbWV0aGV1cz5cblxuICAgIDwhLS0gUXVlcnkgbG9nLiBVc2VkIG9ubHkgZm9yIHF1ZXJpZXMgd2l0aCBzZXR0aW5nIGxvZ19xdWVyaWVzID0gMS4gLS0+XG4gICAgPHF1ZXJ5X2xvZz5cbiAgICAgICAgPCEtLSBXaGF0IHRhYmxlIHRvIGluc2VydCBkYXRhLiBJZiB0YWJsZSBpcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgICAgICAgICBXaGVuIHF1ZXJ5IGxvZyBzdHJ1Y3R1cmUgaXMgY2hhbmdlZCBhZnRlciBzeXN0ZW0gdXBkYXRlLFxuICAgICAgICAgICAgICB0aGVuIG9sZCB0YWJsZSB3aWxsIGJlIHJlbmFtZWQgYW5kIG5ldyB0YWJsZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgICAgLS0+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+cXVlcnlfbG9nPC90YWJsZT5cbiAgICAgICAgPCEtLVxuICAgICAgICAgICAgUEFSVElUSU9OIEJZIGV4cHI6IGh0dHBzOi8vY2xpY2tob3VzZS5jb20vZG9jcy9lbi90YWJsZV9lbmdpbmVzL21lcmdldHJlZS1mYW1pbHkvY3VzdG9tX3BhcnRpdGlvbmluZ19rZXkvXG4gICAgICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgICAgIGV2ZW50X2RhdGVcbiAgICAgICAgICAgICAgICB0b01vbmRheShldmVudF9kYXRlKVxuICAgICAgICAgICAgICAgIHRvWVlZWU1NKGV2ZW50X2RhdGUpXG4gICAgICAgICAgICAgICAgdG9TdGFydE9mSG91cihldmVudF90aW1lKVxuICAgICAgICAtLT5cbiAgICAgICAgPHBhcnRpdGlvbl9ieT50b1lZWVlNTShldmVudF9kYXRlKTwvcGFydGl0aW9uX2J5PlxuICAgICAgICA8IS0tXG4gICAgICAgICAgICBUYWJsZSBUVEwgc3BlY2lmaWNhdGlvbjogaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL2VuZ2luZXMvdGFibGUtZW5naW5lcy9tZXJnZXRyZWUtZmFtaWx5L21lcmdldHJlZS8jbWVyZ2V0cmVlLXRhYmxlLXR0bFxuICAgICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgICAgICBldmVudF9kYXRlICsgSU5URVJWQUwgMSBXRUVLXG4gICAgICAgICAgICAgICAgZXZlbnRfZGF0ZSArIElOVEVSVkFMIDcgREFZIERFTEVURVxuICAgICAgICAgICAgICAgIGV2ZW50X2RhdGUgKyBJTlRFUlZBTCAyIFdFRUsgVE8gRElTSyAnYmJiJ1xuXG4gICAgICAgIDx0dGw+ZXZlbnRfZGF0ZSArIElOVEVSVkFMIDMwIERBWSBERUxFVEU8L3R0bD5cbiAgICAgICAgLS0+XG5cbiAgICAgICAgPCEtLSBJbnN0ZWFkIG9mIHBhcnRpdGlvbl9ieSwgeW91IGNhbiBwcm92aWRlIGZ1bGwgZW5naW5lIGV4cHJlc3Npb24gKHN0YXJ0aW5nIHdpdGggRU5HSU5FID0gKSB3aXRoIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgRXhhbXBsZTogPGVuZ2luZT5FTkdJTkUgPSBNZXJnZVRyZWUgUEFSVElUSU9OIEJZIHRvWVlZWU1NKGV2ZW50X2RhdGUpIE9SREVSIEJZIChldmVudF9kYXRlLCBldmVudF90aW1lKSBTRVRUSU5HUyBpbmRleF9ncmFudWxhcml0eSA9IDEwMjQ8L2VuZ2luZT5cbiAgICAgICAgICAtLT5cblxuICAgICAgICA8IS0tIEludGVydmFsIG9mIGZsdXNoaW5nIGRhdGEuIC0tPlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L3F1ZXJ5X2xvZz5cblxuICAgIDwhLS0gVHJhY2UgbG9nLiBTdG9yZXMgc3RhY2sgdHJhY2VzIGNvbGxlY3RlZCBieSBxdWVyeSBwcm9maWxlcnMuXG4gICAgICAgICBTZWUgcXVlcnlfcHJvZmlsZXJfcmVhbF90aW1lX3BlcmlvZF9ucyBhbmQgcXVlcnlfcHJvZmlsZXJfY3B1X3RpbWVfcGVyaW9kX25zIHNldHRpbmdzLiAtLT5cbiAgICA8dHJhY2VfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnRyYWNlX2xvZzwvdGFibGU+XG5cbiAgICAgICAgPHBhcnRpdGlvbl9ieT50b1lZWVlNTShldmVudF9kYXRlKTwvcGFydGl0aW9uX2J5PlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L3RyYWNlX2xvZz5cblxuICAgIDwhLS0gUXVlcnkgdGhyZWFkIGxvZy4gSGFzIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aHJlYWRzIHBhcnRpY2lwYXRlZCBpbiBxdWVyeSBleGVjdXRpb24uXG4gICAgICAgICBVc2VkIG9ubHkgZm9yIHF1ZXJpZXMgd2l0aCBzZXR0aW5nIGxvZ19xdWVyeV90aHJlYWRzID0gMS4gLS0+XG4gICAgPHF1ZXJ5X3RocmVhZF9sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+cXVlcnlfdGhyZWFkX2xvZzwvdGFibGU+XG4gICAgICAgIDxwYXJ0aXRpb25fYnk+dG9ZWVlZTU0oZXZlbnRfZGF0ZSk8L3BhcnRpdGlvbl9ieT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9xdWVyeV90aHJlYWRfbG9nPlxuXG4gICAgPCEtLSBRdWVyeSB2aWV3cyBsb2cuIEhhcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgZGVwZW5kZW50IHZpZXdzIGFzc29jaWF0ZWQgd2l0aCBhIHF1ZXJ5LlxuICAgICAgICAgVXNlZCBvbmx5IGZvciBxdWVyaWVzIHdpdGggc2V0dGluZyBsb2dfcXVlcnlfdmlld3MgPSAxLiAtLT5cbiAgICA8cXVlcnlfdmlld3NfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnF1ZXJ5X3ZpZXdzX2xvZzwvdGFibGU+XG4gICAgICAgIDxwYXJ0aXRpb25fYnk+dG9ZWVlZTU0oZXZlbnRfZGF0ZSk8L3BhcnRpdGlvbl9ieT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9xdWVyeV92aWV3c19sb2c+XG5cbiAgICA8IS0tIFVuY29tbWVudCBpZiB1c2UgcGFydCBsb2cuXG4gICAgICAgICBQYXJ0IGxvZyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgYWN0aW9ucyB3aXRoIHBhcnRzIGluIE1lcmdlVHJlZSB0YWJsZXMgKGNyZWF0aW9uLCBkZWxldGlvbiwgbWVyZ2VzLCBkb3dubG9hZHMpLi0tPlxuICAgIDxwYXJ0X2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5wYXJ0X2xvZzwvdGFibGU+XG4gICAgICAgIDxwYXJ0aXRpb25fYnk+dG9ZWVlZTU0oZXZlbnRfZGF0ZSk8L3BhcnRpdGlvbl9ieT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9wYXJ0X2xvZz5cblxuICAgIDwhLS0gVW5jb21tZW50IHRvIHdyaXRlIHRleHQgbG9nIGludG8gdGFibGUuXG4gICAgICAgICBUZXh0IGxvZyBjb250YWlucyBhbGwgaW5mb3JtYXRpb24gZnJvbSB1c3VhbCBzZXJ2ZXIgbG9nIGJ1dCBzdG9yZXMgaXQgaW4gc3RydWN0dXJlZCBhbmQgZWZmaWNpZW50IHdheS5cbiAgICAgICAgIFRoZSBsZXZlbCBvZiB0aGUgbWVzc2FnZXMgdGhhdCBnb2VzIHRvIHRoZSB0YWJsZSBjYW4gYmUgbGltaXRlZCAoPGxldmVsPiksIGlmIG5vdCBzcGVjaWZpZWQgYWxsIG1lc3NhZ2VzIHdpbGwgZ28gdG8gdGhlIHRhYmxlLlxuICAgIDx0ZXh0X2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT50ZXh0X2xvZzwvdGFibGU+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgICAgICA8bGV2ZWw+PC9sZXZlbD5cbiAgICA8L3RleHRfbG9nPlxuICAgIC0tPlxuXG4gICAgPCEtLSBNZXRyaWMgbG9nIGNvbnRhaW5zIHJvd3Mgd2l0aCBjdXJyZW50IHZhbHVlcyBvZiBQcm9maWxlRXZlbnRzLCBDdXJyZW50TWV0cmljcyBjb2xsZWN0ZWQgd2l0aCBcImNvbGxlY3RfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzXCIgaW50ZXJ2YWwuIC0tPlxuICAgIDxtZXRyaWNfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPm1ldHJpY19sb2c8L3RhYmxlPlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICAgICAgPGNvbGxlY3RfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjEwMDA8L2NvbGxlY3RfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvbWV0cmljX2xvZz5cblxuICAgIDwhLS1cbiAgICAgICAgQXN5bmNocm9ub3VzIG1ldHJpYyBsb2cgY29udGFpbnMgdmFsdWVzIG9mIG1ldHJpY3MgZnJvbVxuICAgICAgICBzeXN0ZW0uYXN5bmNocm9ub3VzX21ldHJpY3MuXG4gICAgLS0+XG4gICAgPGFzeW5jaHJvbm91c19tZXRyaWNfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPmFzeW5jaHJvbm91c19tZXRyaWNfbG9nPC90YWJsZT5cbiAgICAgICAgPCEtLVxuICAgICAgICAgICAgQXN5bmNocm9ub3VzIG1ldHJpY3MgYXJlIHVwZGF0ZWQgb25jZSBhIG1pbnV0ZSwgc28gdGhlcmUgaXNcbiAgICAgICAgICAgIG5vIG5lZWQgdG8gZmx1c2ggbW9yZSBvZnRlbi5cbiAgICAgICAgLS0+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzAwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvYXN5bmNocm9ub3VzX21ldHJpY19sb2c+XG5cbiAgICA8IS0tXG4gICAgICAgIE9wZW5UZWxlbWV0cnkgbG9nIGNvbnRhaW5zIE9wZW5UZWxlbWV0cnkgdHJhY2Ugc3BhbnMuXG4gICAgLS0+XG4gICAgPG9wZW50ZWxlbWV0cnlfc3Bhbl9sb2c+XG4gICAgICAgIDwhLS1cbiAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhYmxlIGNyZWF0aW9uIGNvZGUgaXMgaW5zdWZmaWNpZW50LCB0aGlzIDxlbmdpbmU+IHNwZWNcbiAgICAgICAgICAgIGlzIGEgd29ya2Fyb3VuZC4gVGhlcmUgaXMgbm8gJ2V2ZW50X3RpbWUnIGZvciB0aGlzIGxvZywgYnV0IHR3byB0aW1lcyxcbiAgICAgICAgICAgIHN0YXJ0IGFuZCBmaW5pc2guIEl0IGlzIHNvcnRlZCBieSBmaW5pc2ggdGltZSwgdG8gYXZvaWQgaW5zZXJ0aW5nXG4gICAgICAgICAgICBkYXRhIHRvbyBmYXIgYXdheSBpbiB0aGUgcGFzdCAocHJvYmFibHkgd2UgY2FuIHNvbWV0aW1lcyBpbnNlcnQgYSBzcGFuXG4gICAgICAgICAgICB0aGF0IGlzIHNlY29uZHMgZWFybGllciB0aGFuIHRoZSBsYXN0IHNwYW4gaW4gdGhlIHRhYmxlLCBkdWUgdG8gYSByYWNlXG4gICAgICAgICAgICBiZXR3ZWVuIHNldmVyYWwgc3BhbnMgaW5zZXJ0ZWQgaW4gcGFyYWxsZWwpLiBUaGlzIGdpdmVzIHRoZSBzcGFucyBhXG4gICAgICAgICAgICBnbG9iYWwgb3JkZXIgdGhhdCB3ZSBjYW4gdXNlIHRvIGUuZy4gcmV0cnkgaW5zZXJ0aW9uIGludG8gc29tZSBleHRlcm5hbFxuICAgICAgICAgICAgc3lzdGVtLlxuICAgICAgICAtLT5cbiAgICAgICAgPGVuZ2luZT5cbiAgICAgICAgICAgIGVuZ2luZSBNZXJnZVRyZWVcbiAgICAgICAgICAgIHBhcnRpdGlvbiBieSB0b1lZWVlNTShmaW5pc2hfZGF0ZSlcbiAgICAgICAgICAgIG9yZGVyIGJ5IChmaW5pc2hfZGF0ZSwgZmluaXNoX3RpbWVfdXMsIHRyYWNlX2lkKVxuICAgICAgICA8L2VuZ2luZT5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5vcGVudGVsZW1ldHJ5X3NwYW5fbG9nPC90YWJsZT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9vcGVudGVsZW1ldHJ5X3NwYW5fbG9nPlxuXG5cbiAgICA8IS0tIENyYXNoIGxvZy4gU3RvcmVzIHN0YWNrIHRyYWNlcyBmb3IgZmF0YWwgZXJyb3JzLlxuICAgICAgICAgVGhpcyB0YWJsZSBpcyBub3JtYWxseSBlbXB0eS4gLS0+XG4gICAgPGNyYXNoX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5jcmFzaF9sb2c8L3RhYmxlPlxuXG4gICAgICAgIDxwYXJ0aXRpb25fYnkgLz5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz4xMDAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9jcmFzaF9sb2c+XG5cbiAgICA8IS0tIFNlc3Npb24gbG9nLiBTdG9yZXMgdXNlciBsb2cgaW4gKHN1Y2Nlc3NmdWwgb3Igbm90KSBhbmQgbG9nIG91dCBldmVudHMuXG5cbiAgICAgICAgTm90ZTogc2Vzc2lvbiBsb2cgaGFzIGtub3duIHNlY3VyaXR5IGlzc3VlcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHByb2R1Y3Rpb24uXG4gICAgLS0+XG4gICAgPCEtLSA8c2Vzc2lvbl9sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+c2Vzc2lvbl9sb2c8L3RhYmxlPlxuXG4gICAgICAgIDxwYXJ0aXRpb25fYnk+dG9ZWVlZTU0oZXZlbnRfZGF0ZSk8L3BhcnRpdGlvbl9ieT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9zZXNzaW9uX2xvZz4gLS0+XG5cbiAgICA8IS0tIFByb2ZpbGluZyBvbiBQcm9jZXNzb3JzIGxldmVsLiAtLT5cbiAgICA8cHJvY2Vzc29yc19wcm9maWxlX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5wcm9jZXNzb3JzX3Byb2ZpbGVfbG9nPC90YWJsZT5cblxuICAgICAgICA8cGFydGl0aW9uX2J5PnRvWVlZWU1NKGV2ZW50X2RhdGUpPC9wYXJ0aXRpb25fYnk+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvcHJvY2Vzc29yc19wcm9maWxlX2xvZz5cblxuICAgIDwhLS0gPHRvcF9sZXZlbF9kb21haW5zX3BhdGg+L3Zhci9saWIvY2xpY2tob3VzZS90b3BfbGV2ZWxfZG9tYWlucy88L3RvcF9sZXZlbF9kb21haW5zX3BhdGg+IC0tPlxuICAgIDwhLS0gQ3VzdG9tIFRMRCBsaXN0cy5cbiAgICAgICAgIEZvcm1hdDogPG5hbWU+L3BhdGgvdG8vZmlsZTwvbmFtZT5cblxuICAgICAgICAgQ2hhbmdlcyB3aWxsIG5vdCBiZSBhcHBsaWVkIHcvbyBzZXJ2ZXIgcmVzdGFydC5cbiAgICAgICAgIFBhdGggdG8gdGhlIGxpc3QgaXMgdW5kZXIgdG9wX2xldmVsX2RvbWFpbnNfcGF0aCAoc2VlIGFib3ZlKS5cbiAgICAtLT5cbiAgICA8dG9wX2xldmVsX2RvbWFpbnNfbGlzdHM+XG4gICAgICAgIDwhLS1cbiAgICAgICAgPHB1YmxpY19zdWZmaXhfbGlzdD4vcGF0aC90by9wdWJsaWNfc3VmZml4X2xpc3QuZGF0PC9wdWJsaWNfc3VmZml4X2xpc3Q+XG4gICAgICAgIC0tPlxuICAgIDwvdG9wX2xldmVsX2RvbWFpbnNfbGlzdHM+XG5cbiAgICA8IS0tIENvbmZpZ3VyYXRpb24gb2YgZXh0ZXJuYWwgZGljdGlvbmFyaWVzLiBTZWU6XG4gICAgICAgICBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vc3FsLXJlZmVyZW5jZS9kaWN0aW9uYXJpZXMvZXh0ZXJuYWwtZGljdGlvbmFyaWVzL2V4dGVybmFsLWRpY3RzXG4gICAgLS0+XG4gICAgPGRpY3Rpb25hcmllc19jb25maWc+Kl9kaWN0aW9uYXJ5LnhtbDwvZGljdGlvbmFyaWVzX2NvbmZpZz5cblxuICAgIDwhLS0gQ29uZmlndXJhdGlvbiBvZiB1c2VyIGRlZmluZWQgZXhlY3V0YWJsZSBmdW5jdGlvbnMgLS0+XG4gICAgPHVzZXJfZGVmaW5lZF9leGVjdXRhYmxlX2Z1bmN0aW9uc19jb25maWc+KmZ1bmN0aW9uLnhtbDwvdXNlcl9kZWZpbmVkX2V4ZWN1dGFibGVfZnVuY3Rpb25zX2NvbmZpZz5cbiAgICA8dXNlcl9zY3JpcHRzX3BhdGg+L3Zhci9saWIvY2xpY2tob3VzZS91c2VyX3NjcmlwdHMvPC91c2VyX3NjcmlwdHNfcGF0aD5cblxuICAgIDwhLS0gVW5jb21tZW50IGlmIHlvdSB3YW50IGRhdGEgdG8gYmUgY29tcHJlc3NlZCAzMC0xMDAlIGJldHRlci5cbiAgICAgICAgIERvbid0IGRvIHRoYXQgaWYgeW91IGp1c3Qgc3RhcnRlZCB1c2luZyBDbGlja0hvdXNlLlxuICAgICAgLS0+XG4gICAgPCEtLVxuICAgIDxjb21wcmVzc2lvbj5cbiAgICAgICAgPCEtIC0gU2V0IG9mIHZhcmlhbnRzLiBDaGVja2VkIGluIG9yZGVyLiBMYXN0IG1hdGNoaW5nIGNhc2Ugd2lucy4gSWYgbm90aGluZyBtYXRjaGVzLCBsejQgd2lsbCBiZSB1c2VkLiAtIC0+XG4gICAgICAgIDxjYXNlPlxuXG4gICAgICAgICAgICA8IS0gLSBDb25kaXRpb25zLiBBbGwgbXVzdCBiZSBzYXRpc2ZpZWQuIFNvbWUgY29uZGl0aW9ucyBtYXkgYmUgb21pdHRlZC4gLSAtPlxuICAgICAgICAgICAgPG1pbl9wYXJ0X3NpemU+MTAwMDAwMDAwMDA8L21pbl9wYXJ0X3NpemU+ICAgICAgICA8IS0gLSBNaW4gcGFydCBzaXplIGluIGJ5dGVzLiAtIC0+XG4gICAgICAgICAgICA8bWluX3BhcnRfc2l6ZV9yYXRpbz4wLjAxPC9taW5fcGFydF9zaXplX3JhdGlvPiAgIDwhLSAtIE1pbiBzaXplIG9mIHBhcnQgcmVsYXRpdmUgdG8gd2hvbGUgdGFibGUgc2l6ZS4gLSAtPlxuXG4gICAgICAgICAgICA8IS0gLSBXaGF0IGNvbXByZXNzaW9uIG1ldGhvZCB0byB1c2UuIC0gLT5cbiAgICAgICAgICAgIDxtZXRob2Q+enN0ZDwvbWV0aG9kPlxuICAgICAgICA8L2Nhc2U+XG4gICAgPC9jb21wcmVzc2lvbj5cbiAgICAtLT5cblxuICAgIDwhLS0gQ29uZmlndXJhdGlvbiBvZiBlbmNyeXB0aW9uLiBUaGUgc2VydmVyIGV4ZWN1dGVzIGEgY29tbWFuZCB0b1xuICAgICAgICAgb2J0YWluIGFuIGVuY3J5cHRpb24ga2V5IGF0IHN0YXJ0dXAgaWYgc3VjaCBhIGNvbW1hbmQgaXNcbiAgICAgICAgIGRlZmluZWQsIG9yIGVuY3J5cHRpb24gY29kZWNzIHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlLiBUaGVcbiAgICAgICAgIGNvbW1hbmQgaXMgZXhlY3V0ZWQgdGhyb3VnaCAvYmluL3NoIGFuZCBpcyBleHBlY3RlZCB0byB3cml0ZVxuICAgICAgICAgYSBCYXNlNjQtZW5jb2RlZCBrZXkgdG8gdGhlIHN0ZG91dC4gLS0+XG4gICAgPGVuY3J5cHRpb25fY29kZWNzPlxuICAgICAgICA8IS0tIGFlc18xMjhfZ2NtX3NpdiAtLT5cbiAgICAgICAgICAgIDwhLS0gRXhhbXBsZSBvZiBnZXR0aW5nIGhleCBrZXkgZnJvbSBlbnYgLS0+XG4gICAgICAgICAgICA8IS0tIHRoZSBjb2RlIHNob3VsZCB1c2UgdGhpcyBrZXkgYW5kIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBpdHMgbGVuZ3RoIGlzIG5vdCAxNiBieXRlcyAtLT5cbiAgICAgICAgICAgIDwhLS1rZXlfaGV4IGZyb21fZW52PVwiLi4uXCI+PC9rZXlfaGV4IC0tPlxuXG4gICAgICAgICAgICA8IS0tIEV4YW1wbGUgb2YgbXVsdGlwbGUgaGV4IGtleXMuIFRoZXkgY2FuIGJlIGltcG9ydGVkIGZyb20gZW52IG9yIGJlIHdyaXR0ZW4gZG93biBpbiBjb25maWctLT5cbiAgICAgICAgICAgIDwhLS0gdGhlIGNvZGUgc2hvdWxkIHVzZSB0aGVzZSBrZXlzIGFuZCB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlaXIgbGVuZ3RoIGlzIG5vdCAxNiBieXRlcyAtLT5cbiAgICAgICAgICAgIDwhLS0ga2V5X2hleCBpZD1cIjBcIj4uLi48L2tleV9oZXggLS0+XG4gICAgICAgICAgICA8IS0tIGtleV9oZXggaWQ9XCIxXCIgZnJvbV9lbnY9XCIuLlwiPjwva2V5X2hleCAtLT5cbiAgICAgICAgICAgIDwhLS0ga2V5X2hleCBpZD1cIjJcIj4uLi48L2tleV9oZXggLS0+XG4gICAgICAgICAgICA8IS0tIGN1cnJlbnRfa2V5X2lkPjI8L2N1cnJlbnRfa2V5X2lkIC0tPlxuXG4gICAgICAgICAgICA8IS0tIEV4YW1wbGUgb2YgZ2V0dGluZyBoZXgga2V5IGZyb20gY29uZmlnIC0tPlxuICAgICAgICAgICAgPCEtLSB0aGUgY29kZSBzaG91bGQgdXNlIHRoaXMga2V5IGFuZCB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXRzIGxlbmd0aCBpcyBub3QgMTYgYnl0ZXMgLS0+XG4gICAgICAgICAgICA8IS0tIGtleT4uLi48L2tleSAtLT5cblxuICAgICAgICAgICAgPCEtLSBleGFtcGxlIG9mIGFkZGluZyBub25jZSAtLT5cbiAgICAgICAgICAgIDwhLS0gbm9uY2U+Li4uPC9ub25jZSAtLT5cblxuICAgICAgICA8IS0tIC9hZXNfMTI4X2djbV9zaXYgLS0+XG4gICAgPC9lbmNyeXB0aW9uX2NvZGVjcz5cblxuICAgIDwhLS0gQWxsb3cgdG8gZXhlY3V0ZSBkaXN0cmlidXRlZCBEREwgcXVlcmllcyAoQ1JFQVRFLCBEUk9QLCBBTFRFUiwgUkVOQU1FKSBvbiBjbHVzdGVyLlxuICAgICAgICAgV29ya3Mgb25seSBpZiBab29LZWVwZXIgaXMgZW5hYmxlZC4gQ29tbWVudCBpdCBpZiBzdWNoIGZ1bmN0aW9uYWxpdHkgaXNuJ3QgcmVxdWlyZWQuIC0tPlxuICAgIDxkaXN0cmlidXRlZF9kZGw+XG4gICAgICAgIDwhLS0gUGF0aCBpbiBab29LZWVwZXIgdG8gcXVldWUgd2l0aCBEREwgcXVlcmllcyAtLT5cbiAgICAgICAgPHBhdGg+L2NsaWNraG91c2UvdGFza19xdWV1ZS9kZGw8L3BhdGg+XG5cbiAgICAgICAgPCEtLSBTZXR0aW5ncyBmcm9tIHRoaXMgcHJvZmlsZSB3aWxsIGJlIHVzZWQgdG8gZXhlY3V0ZSBEREwgcXVlcmllcyAtLT5cbiAgICAgICAgPCEtLSA8cHJvZmlsZT5kZWZhdWx0PC9wcm9maWxlPiAtLT5cblxuICAgICAgICA8IS0tIENvbnRyb2xzIGhvdyBtdWNoIE9OIENMVVNURVIgcXVlcmllcyBjYW4gYmUgcnVuIHNpbXVsdGFuZW91c2x5LiAtLT5cbiAgICAgICAgPCEtLSA8cG9vbF9zaXplPjE8L3Bvb2xfc2l6ZT4gLS0+XG5cbiAgICAgICAgPCEtLVxuICAgICAgICAgICAgIENsZWFudXAgc2V0dGluZ3MgKGFjdGl2ZSB0YXNrcyB3aWxsIG5vdCBiZSByZW1vdmVkKVxuICAgICAgICAtLT5cblxuICAgICAgICA8IS0tIENvbnRyb2xzIHRhc2sgVFRMIChkZWZhdWx0IDEgd2VlaykgLS0+XG4gICAgICAgIDwhLS0gPHRhc2tfbWF4X2xpZmV0aW1lPjYwNDgwMDwvdGFza19tYXhfbGlmZXRpbWU+IC0tPlxuXG4gICAgICAgIDwhLS0gQ29udHJvbHMgaG93IG9mdGVuIGNsZWFudXAgc2hvdWxkIGJlIHBlcmZvcm1lZCAoaW4gc2Vjb25kcykgLS0+XG4gICAgICAgIDwhLS0gPGNsZWFudXBfZGVsYXlfcGVyaW9kPjYwPC9jbGVhbnVwX2RlbGF5X3BlcmlvZD4gLS0+XG5cbiAgICAgICAgPCEtLSBDb250cm9scyBob3cgbWFueSB0YXNrcyBjb3VsZCBiZSBpbiB0aGUgcXVldWUgLS0+XG4gICAgICAgIDwhLS0gPG1heF90YXNrc19pbl9xdWV1ZT4xMDAwPC9tYXhfdGFza3NfaW5fcXVldWU+IC0tPlxuICAgIDwvZGlzdHJpYnV0ZWRfZGRsPlxuXG4gICAgPCEtLSBTZXR0aW5ncyB0byBmaW5lIHR1bmUgTWVyZ2VUcmVlIHRhYmxlcy4gU2VlIGRvY3VtZW50YXRpb24gaW4gc291cmNlIGNvZGUsIGluIE1lcmdlVHJlZVNldHRpbmdzLmggLS0+XG4gICAgPCEtLVxuICAgIDxtZXJnZV90cmVlPlxuICAgICAgICA8bWF4X3N1c3BpY2lvdXNfYnJva2VuX3BhcnRzPjU8L21heF9zdXNwaWNpb3VzX2Jyb2tlbl9wYXJ0cz5cbiAgICA8L21lcmdlX3RyZWU+XG4gICAgLS0+XG5cbiAgICA8IS0tIFByb3RlY3Rpb24gZnJvbSBhY2NpZGVudGFsIERST1AuXG4gICAgICAgICBJZiBzaXplIG9mIGEgTWVyZ2VUcmVlIHRhYmxlIGlzIGdyZWF0ZXIgdGhhbiBtYXhfdGFibGVfc2l6ZV90b19kcm9wIChpbiBieXRlcykgdGhhbiB0YWJsZSBjb3VsZCBub3QgYmUgZHJvcHBlZCB3aXRoIGFueSBEUk9QIHF1ZXJ5LlxuICAgICAgICAgSWYgeW91IHdhbnQgZG8gZGVsZXRlIG9uZSB0YWJsZSBhbmQgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgY2xpY2tob3VzZS1zZXJ2ZXIgY29uZmlnLCB5b3UgY291bGQgY3JlYXRlIHNwZWNpYWwgZmlsZSA8Y2xpY2tob3VzZS1wYXRoPi9mbGFncy9mb3JjZV9kcm9wX3RhYmxlIGFuZCBtYWtlIERST1Agb25jZS5cbiAgICAgICAgIEJ5IGRlZmF1bHQgbWF4X3RhYmxlX3NpemVfdG9fZHJvcCBpcyA1MEdCOyBtYXhfdGFibGVfc2l6ZV90b19kcm9wPTAgYWxsb3dzIHRvIERST1AgYW55IHRhYmxlcy5cbiAgICAgICAgIFRoZSBzYW1lIGZvciBtYXhfcGFydGl0aW9uX3NpemVfdG9fZHJvcC5cbiAgICAgICAgIFVuY29tbWVudCB0byBkaXNhYmxlIHByb3RlY3Rpb24uXG4gICAgLS0+XG4gICAgPCEtLSA8bWF4X3RhYmxlX3NpemVfdG9fZHJvcD4wPC9tYXhfdGFibGVfc2l6ZV90b19kcm9wPiAtLT5cbiAgICA8IS0tIDxtYXhfcGFydGl0aW9uX3NpemVfdG9fZHJvcD4wPC9tYXhfcGFydGl0aW9uX3NpemVfdG9fZHJvcD4gLS0+XG5cbiAgICA8IS0tIEV4YW1wbGUgb2YgcGFyYW1ldGVycyBmb3IgR3JhcGhpdGVNZXJnZVRyZWUgdGFibGUgZW5naW5lIC0tPlxuICAgIDxncmFwaGl0ZV9yb2xsdXBfZXhhbXBsZT5cbiAgICAgICAgPHBhdHRlcm4+XG4gICAgICAgICAgICA8cmVnZXhwPmNsaWNrX2Nvc3Q8L3JlZ2V4cD5cbiAgICAgICAgICAgIDxmdW5jdGlvbj5hbnk8L2Z1bmN0aW9uPlxuICAgICAgICAgICAgPHJldGVudGlvbj5cbiAgICAgICAgICAgICAgICA8YWdlPjA8L2FnZT5cbiAgICAgICAgICAgICAgICA8cHJlY2lzaW9uPjM2MDA8L3ByZWNpc2lvbj5cbiAgICAgICAgICAgIDwvcmV0ZW50aW9uPlxuICAgICAgICAgICAgPHJldGVudGlvbj5cbiAgICAgICAgICAgICAgICA8YWdlPjg2NDAwPC9hZ2U+XG4gICAgICAgICAgICAgICAgPHByZWNpc2lvbj42MDwvcHJlY2lzaW9uPlxuICAgICAgICAgICAgPC9yZXRlbnRpb24+XG4gICAgICAgIDwvcGF0dGVybj5cbiAgICAgICAgPGRlZmF1bHQ+XG4gICAgICAgICAgICA8ZnVuY3Rpb24+bWF4PC9mdW5jdGlvbj5cbiAgICAgICAgICAgIDxyZXRlbnRpb24+XG4gICAgICAgICAgICAgICAgPGFnZT4wPC9hZ2U+XG4gICAgICAgICAgICAgICAgPHByZWNpc2lvbj42MDwvcHJlY2lzaW9uPlxuICAgICAgICAgICAgPC9yZXRlbnRpb24+XG4gICAgICAgICAgICA8cmV0ZW50aW9uPlxuICAgICAgICAgICAgICAgIDxhZ2U+MzYwMDwvYWdlPlxuICAgICAgICAgICAgICAgIDxwcmVjaXNpb24+MzAwPC9wcmVjaXNpb24+XG4gICAgICAgICAgICA8L3JldGVudGlvbj5cbiAgICAgICAgICAgIDxyZXRlbnRpb24+XG4gICAgICAgICAgICAgICAgPGFnZT44NjQwMDwvYWdlPlxuICAgICAgICAgICAgICAgIDxwcmVjaXNpb24+MzYwMDwvcHJlY2lzaW9uPlxuICAgICAgICAgICAgPC9yZXRlbnRpb24+XG4gICAgICAgIDwvZGVmYXVsdD5cbiAgICA8L2dyYXBoaXRlX3JvbGx1cF9leGFtcGxlPlxuXG4gICAgPCEtLSBEaXJlY3RvcnkgaW4gPGNsaWNraG91c2UtcGF0aD4gY29udGFpbmluZyBzY2hlbWEgZmlsZXMgZm9yIHZhcmlvdXMgaW5wdXQgZm9ybWF0cy5cbiAgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICAtLT5cbiAgICA8Zm9ybWF0X3NjaGVtYV9wYXRoPi92YXIvbGliL2NsaWNraG91c2UvZm9ybWF0X3NjaGVtYXMvPC9mb3JtYXRfc2NoZW1hX3BhdGg+XG5cbiAgICA8IS0tIERlZmF1bHQgcXVlcnkgbWFza2luZyBydWxlcywgbWF0Y2hpbmcgbGluZXMgd291bGQgYmUgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgZWxzZSBpbiB0aGUgbG9nc1xuICAgICAgICAoYm90aCB0ZXh0IGxvZ3MgYW5kIHN5c3RlbS5xdWVyeV9sb2cpLlxuICAgICAgICBuYW1lIC0gbmFtZSBmb3IgdGhlIHJ1bGUgKG9wdGlvbmFsKVxuICAgICAgICByZWdleHAgLSBSRTIgY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb24gKG1hbmRhdG9yeSlcbiAgICAgICAgcmVwbGFjZSAtIHN1YnN0aXR1dGlvbiBzdHJpbmcgZm9yIHNlbnNpdGl2ZSBkYXRhIChvcHRpb25hbCwgYnkgZGVmYXVsdCAtIHNpeCBhc3Rlcmlza3MpXG4gICAgLS0+XG4gICAgPHF1ZXJ5X21hc2tpbmdfcnVsZXM+XG4gICAgICAgIDxydWxlPlxuICAgICAgICAgICAgPG5hbWU+aGlkZSBlbmNyeXB0L2RlY3J5cHQgYXJndW1lbnRzPC9uYW1lPlxuICAgICAgICAgICAgPHJlZ2V4cD4oKD86YWVzXyk/KD86ZW5jcnlwdHxkZWNyeXB0KSg/Ol9teXNxbCk/KVxccypcXChcXHMqKD86Jyg/OlxcXFwnfC4pKyd8Lio/KVxccypcXCk8L3JlZ2V4cD5cbiAgICAgICAgICAgIDwhLS0gb3IgbW9yZSBzZWN1cmUsIGJ1dCBhbHNvIG1vcmUgaW52YXNpdmU6XG4gICAgICAgICAgICAgICAgKGFlc19cXHcrKVxccypcXCguKlxcKVxuICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICA8cmVwbGFjZT5cXDEoPz8/KTwvcmVwbGFjZT5cbiAgICAgICAgPC9ydWxlPlxuICAgIDwvcXVlcnlfbWFza2luZ19ydWxlcz5cblxuICAgIDwhLS0gVW5jb21tZW50IHRvIHVzZSBjdXN0b20gaHR0cCBoYW5kbGVycy5cbiAgICAgICAgcnVsZXMgYXJlIGNoZWNrZWQgZnJvbSB0b3AgdG8gYm90dG9tLCBmaXJzdCBtYXRjaCBydW5zIHRoZSBoYW5kbGVyXG4gICAgICAgICAgICB1cmwgLSB0byBtYXRjaCByZXF1ZXN0IFVSTCwgeW91IGNhbiB1c2UgJ3JlZ2V4OicgcHJlZml4IHRvIHVzZSByZWdleCBtYXRjaChvcHRpb25hbClcbiAgICAgICAgICAgIG1ldGhvZHMgLSB0byBtYXRjaCByZXF1ZXN0IG1ldGhvZCwgeW91IGNhbiB1c2UgY29tbWFzIHRvIHNlcGFyYXRlIG11bHRpcGxlIG1ldGhvZCBtYXRjaGVzKG9wdGlvbmFsKVxuICAgICAgICAgICAgaGVhZGVycyAtIHRvIG1hdGNoIHJlcXVlc3QgaGVhZGVycywgbWF0Y2ggZWFjaCBjaGlsZCBlbGVtZW50KGNoaWxkIGVsZW1lbnQgbmFtZSBpcyBoZWFkZXIgbmFtZSksIHlvdSBjYW4gdXNlICdyZWdleDonIHByZWZpeCB0byB1c2UgcmVnZXggbWF0Y2gob3B0aW9uYWwpXG4gICAgICAgIGhhbmRsZXIgaXMgcmVxdWVzdCBoYW5kbGVyXG4gICAgICAgICAgICB0eXBlIC0gc3VwcG9ydGVkIHR5cGVzOiBzdGF0aWMsIGR5bmFtaWNfcXVlcnlfaGFuZGxlciwgcHJlZGVmaW5lZF9xdWVyeV9oYW5kbGVyXG4gICAgICAgICAgICBxdWVyeSAtIHVzZSB3aXRoIHByZWRlZmluZWRfcXVlcnlfaGFuZGxlciB0eXBlLCBleGVjdXRlcyBxdWVyeSB3aGVuIHRoZSBoYW5kbGVyIGlzIGNhbGxlZFxuICAgICAgICAgICAgcXVlcnlfcGFyYW1fbmFtZSAtIHVzZSB3aXRoIGR5bmFtaWNfcXVlcnlfaGFuZGxlciB0eXBlLCBleHRyYWN0cyBhbmQgZXhlY3V0ZXMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDxxdWVyeV9wYXJhbV9uYW1lPiB2YWx1ZSBpbiBIVFRQIHJlcXVlc3QgcGFyYW1zXG4gICAgICAgICAgICBzdGF0dXMgLSB1c2Ugd2l0aCBzdGF0aWMgdHlwZSwgcmVzcG9uc2Ugc3RhdHVzIGNvZGVcbiAgICAgICAgICAgIGNvbnRlbnRfdHlwZSAtIHVzZSB3aXRoIHN0YXRpYyB0eXBlLCByZXNwb25zZSBjb250ZW50LXR5cGVcbiAgICAgICAgICAgIHJlc3BvbnNlX2NvbnRlbnQgLSB1c2Ugd2l0aCBzdGF0aWMgdHlwZSwgUmVzcG9uc2UgY29udGVudCBzZW50IHRvIGNsaWVudCwgd2hlbiB1c2luZyB0aGUgcHJlZml4ICdmaWxlOi8vJyBvciAnY29uZmlnOi8vJywgZmluZCB0aGUgY29udGVudCBmcm9tIHRoZSBmaWxlIG9yIGNvbmZpZ3VyYXRpb24gc2VuZCB0byBjbGllbnQuXG5cbiAgICA8aHR0cF9oYW5kbGVycz5cbiAgICAgICAgPHJ1bGU+XG4gICAgICAgICAgICA8dXJsPi88L3VybD5cbiAgICAgICAgICAgIDxtZXRob2RzPlBPU1QsR0VUPC9tZXRob2RzPlxuICAgICAgICAgICAgPGhlYWRlcnM+PHByYWdtYT5uby1jYWNoZTwvcHJhZ21hPjwvaGVhZGVycz5cbiAgICAgICAgICAgIDxoYW5kbGVyPlxuICAgICAgICAgICAgICAgIDx0eXBlPmR5bmFtaWNfcXVlcnlfaGFuZGxlcjwvdHlwZT5cbiAgICAgICAgICAgICAgICA8cXVlcnlfcGFyYW1fbmFtZT5xdWVyeTwvcXVlcnlfcGFyYW1fbmFtZT5cbiAgICAgICAgICAgIDwvaGFuZGxlcj5cbiAgICAgICAgPC9ydWxlPlxuXG4gICAgICAgIDxydWxlPlxuICAgICAgICAgICAgPHVybD4vcHJlZGVmaW5lZF9xdWVyeTwvdXJsPlxuICAgICAgICAgICAgPG1ldGhvZHM+UE9TVCxHRVQ8L21ldGhvZHM+XG4gICAgICAgICAgICA8aGFuZGxlcj5cbiAgICAgICAgICAgICAgICA8dHlwZT5wcmVkZWZpbmVkX3F1ZXJ5X2hhbmRsZXI8L3R5cGU+XG4gICAgICAgICAgICAgICAgPHF1ZXJ5PlNFTEVDVCAqIEZST00gc3lzdGVtLnNldHRpbmdzPC9xdWVyeT5cbiAgICAgICAgICAgIDwvaGFuZGxlcj5cbiAgICAgICAgPC9ydWxlPlxuXG4gICAgICAgIDxydWxlPlxuICAgICAgICAgICAgPGhhbmRsZXI+XG4gICAgICAgICAgICAgICAgPHR5cGU+c3RhdGljPC90eXBlPlxuICAgICAgICAgICAgICAgIDxzdGF0dXM+MjAwPC9zdGF0dXM+XG4gICAgICAgICAgICAgICAgPGNvbnRlbnRfdHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04PC9jb250ZW50X3R5cGU+XG4gICAgICAgICAgICAgICAgPHJlc3BvbnNlX2NvbnRlbnQ+Y29uZmlnOi8vaHR0cF9zZXJ2ZXJfZGVmYXVsdF9yZXNwb25zZTwvcmVzcG9uc2VfY29udGVudD5cbiAgICAgICAgICAgIDwvaGFuZGxlcj5cbiAgICAgICAgPC9ydWxlPlxuICAgIDwvaHR0cF9oYW5kbGVycz5cbiAgICAtLT5cblxuICAgIDxzZW5kX2NyYXNoX3JlcG9ydHM+XG4gICAgICAgIDwhLS0gQ2hhbmdpbmcgPGVuYWJsZWQ+IHRvIHRydWUgYWxsb3dzIHNlbmRpbmcgY3Jhc2ggcmVwb3J0cyB0byAtLT5cbiAgICAgICAgPCEtLSB0aGUgQ2xpY2tIb3VzZSBjb3JlIGRldmVsb3BlcnMgdGVhbSB2aWEgU2VudHJ5IGh0dHBzOi8vc2VudHJ5LmlvIC0tPlxuICAgICAgICA8IS0tIERvaW5nIHNvIGF0IGxlYXN0IGluIHByZS1wcm9kdWN0aW9uIGVudmlyb25tZW50cyBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgLS0+XG4gICAgICAgIDxlbmFibGVkPmZhbHNlPC9lbmFibGVkPlxuICAgICAgICA8IS0tIENoYW5nZSA8YW5vbnltaXplPiB0byB0cnVlIGlmIHlvdSBkb24ndCBmZWVsIGNvbWZvcnRhYmxlIGF0dGFjaGluZyB0aGUgc2VydmVyIGhvc3RuYW1lIHRvIHRoZSBjcmFzaCByZXBvcnQgLS0+XG4gICAgICAgIDxhbm9ueW1pemU+ZmFsc2U8L2Fub255bWl6ZT5cbiAgICAgICAgPCEtLSBEZWZhdWx0IGVuZHBvaW50IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRpZmZlcmVudCBTZW50cnkgRFNOIG9ubHkgaWYgeW91IGhhdmUgLS0+XG4gICAgICAgIDwhLS0gc29tZSBpbi1ob3VzZSBlbmdpbmVlcnMgb3IgaGlyZWQgY29uc3VsdGFudHMgd2hvJ3JlIGdvaW5nIHRvIGRlYnVnIENsaWNrSG91c2UgaXNzdWVzIGZvciB5b3UgLS0+XG4gICAgICAgIDxlbmRwb2ludD5odHRwczovLzZmMzMwMzRjZmU2ODRkZDdhM2FiOTg3NWU1N2IxYzhkQG8zODg4NzAuaW5nZXN0LnNlbnRyeS5pby81MjI2Mjc3PC9lbmRwb2ludD5cbiAgICA8L3NlbmRfY3Jhc2hfcmVwb3J0cz5cblxuICAgIDwhLS0gVW5jb21tZW50IHRvIGRpc2FibGUgQ2xpY2tIb3VzZSBpbnRlcm5hbCBETlMgY2FjaGluZy4gLS0+XG4gICAgPCEtLSA8ZGlzYWJsZV9pbnRlcm5hbF9kbnNfY2FjaGU+MTwvZGlzYWJsZV9pbnRlcm5hbF9kbnNfY2FjaGU+IC0tPlxuXG4gICAgPCEtLSBZb3UgY2FuIGFsc28gY29uZmlndXJlIHJvY2tzZGIgbGlrZSB0aGlzOiAtLT5cbiAgICA8IS0tXG4gICAgPHJvY2tzZGI+XG4gICAgICAgIDxvcHRpb25zPlxuICAgICAgICAgICAgPG1heF9iYWNrZ3JvdW5kX2pvYnM+ODwvbWF4X2JhY2tncm91bmRfam9icz5cbiAgICAgICAgPC9vcHRpb25zPlxuICAgICAgICA8Y29sdW1uX2ZhbWlseV9vcHRpb25zPlxuICAgICAgICAgICAgPG51bV9sZXZlbHM+MjwvbnVtX2xldmVscz5cbiAgICAgICAgPC9jb2x1bW5fZmFtaWx5X29wdGlvbnM+XG4gICAgICAgIDx0YWJsZXM+XG4gICAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICAgICAgPG5hbWU+VEFCTEU8L25hbWU+XG4gICAgICAgICAgICAgICAgPG9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxtYXhfYmFja2dyb3VuZF9qb2JzPjg8L21heF9iYWNrZ3JvdW5kX2pvYnM+XG4gICAgICAgICAgICAgICAgPC9vcHRpb25zPlxuICAgICAgICAgICAgICAgIDxjb2x1bW5fZmFtaWx5X29wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxudW1fbGV2ZWxzPjI8L251bV9sZXZlbHM+XG4gICAgICAgICAgICAgICAgPC9jb2x1bW5fZmFtaWx5X29wdGlvbnM+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L3RhYmxlcz5cbiAgICA8L3JvY2tzZGI+XG4gICAgLS0+XG5cbiAgICA8IS0tIFVuY29tbWVudCBpZiBlbmFibGUgbWVyZ2UgdHJlZSBtZXRhZGF0YSBjYWNoZSAtLT5cbiAgICA8bWVyZ2VfdHJlZV9tZXRhZGF0YV9jYWNoZT5cbiAgICAgICAgPGxydV9jYWNoZV9zaXplPjI2ODQzNTQ1NjwvbHJ1X2NhY2hlX3NpemU+XG4gICAgICAgIDxjb250aW51ZV9pZl9jb3JydXB0ZWQ+dHJ1ZTwvY29udGludWVfaWZfY29ycnVwdGVkPlxuICAgIDwvbWVyZ2VfdHJlZV9tZXRhZGF0YV9jYWNoZT5cbjwvY2xpY2tob3VzZT5cblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9jbGlja2hvdXNlL2NsdXN0ZXIueG1sXCJcbmNvbnRlbnQgPSBcIlwiXCJcbjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIFpvb0tlZXBlciBpcyB1c2VkIHRvIHN0b3JlIG1ldGFkYXRhIGFib3V0IHJlcGxpY2FzLCB3aGVuIHVzaW5nIFJlcGxpY2F0ZWQgdGFibGVzLlxuICAgICAgICAgT3B0aW9uYWwuIElmIHlvdSBkb24ndCB1c2UgcmVwbGljYXRlZCB0YWJsZXMsIHlvdSBjb3VsZCBvbWl0IHRoYXQuXG5cbiAgICAgICAgIFNlZSBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vZW5naW5lcy90YWJsZS1lbmdpbmVzL21lcmdldHJlZS1mYW1pbHkvcmVwbGljYXRpb24vXG4gICAgICAtLT5cbiAgICA8em9va2VlcGVyPlxuICAgICAgICA8bm9kZSBpbmRleD1cIjFcIj5cbiAgICAgICAgICAgIDxob3N0Pnpvb2tlZXBlci0xPC9ob3N0PlxuICAgICAgICAgICAgPHBvcnQ+MjE4MTwvcG9ydD5cbiAgICAgICAgPC9ub2RlPlxuICAgICAgICA8IS0tIDxub2RlIGluZGV4PVwiMlwiPlxuICAgICAgICAgICAgPGhvc3Q+em9va2VlcGVyLTI8L2hvc3Q+XG4gICAgICAgICAgICA8cG9ydD4yMTgxPC9wb3J0PlxuICAgICAgICA8L25vZGU+XG4gICAgICAgIDxub2RlIGluZGV4PVwiM1wiPlxuICAgICAgICAgICAgPGhvc3Q+em9va2VlcGVyLTM8L2hvc3Q+XG4gICAgICAgICAgICA8cG9ydD4yMTgxPC9wb3J0PlxuICAgICAgICA8L25vZGU+IC0tPlxuICAgIDwvem9va2VlcGVyPlxuXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIG9mIGNsdXN0ZXJzIHRoYXQgY291bGQgYmUgdXNlZCBpbiBEaXN0cmlidXRlZCB0YWJsZXMuXG4gICAgICAgICBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vb3BlcmF0aW9ucy90YWJsZV9lbmdpbmVzL2Rpc3RyaWJ1dGVkL1xuICAgICAgLS0+XG4gICAgPHJlbW90ZV9zZXJ2ZXJzPlxuICAgICAgICA8Y2x1c3Rlcj5cbiAgICAgICAgICAgIDwhLS0gSW50ZXItc2VydmVyIHBlci1jbHVzdGVyIHNlY3JldCBmb3IgRGlzdHJpYnV0ZWQgcXVlcmllc1xuICAgICAgICAgICAgICAgICBkZWZhdWx0OiBubyBzZWNyZXQgKG5vIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgcGVyZm9ybWVkKVxuXG4gICAgICAgICAgICAgICAgIElmIHNldCwgdGhlbiBEaXN0cmlidXRlZCBxdWVyaWVzIHdpbGwgYmUgdmFsaWRhdGVkIG9uIHNoYXJkcywgc28gYXQgbGVhc3Q6XG4gICAgICAgICAgICAgICAgIC0gc3VjaCBjbHVzdGVyIHNob3VsZCBleGlzdCBvbiB0aGUgc2hhcmQsXG4gICAgICAgICAgICAgICAgIC0gc3VjaCBjbHVzdGVyIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNlY3JldC5cblxuICAgICAgICAgICAgICAgICBBbmQgYWxzbyAoYW5kIHdoaWNoIGlzIG1vcmUgaW1wb3J0YW50KSwgdGhlIGluaXRpYWxfdXNlciB3aWxsXG4gICAgICAgICAgICAgICAgIGJlIHVzZWQgYXMgY3VycmVudCB1c2VyIGZvciB0aGUgcXVlcnkuXG5cbiAgICAgICAgICAgICAgICAgUmlnaHQgbm93IHRoZSBwcm90b2NvbCBpcyBwcmV0dHkgc2ltcGxlIGFuZCBpdCBvbmx5IHRha2VzIGludG8gYWNjb3VudDpcbiAgICAgICAgICAgICAgICAgLSBjbHVzdGVyIG5hbWVcbiAgICAgICAgICAgICAgICAgLSBxdWVyeVxuXG4gICAgICAgICAgICAgICAgIEFsc28gaXQgd2lsbCBiZSBuaWNlIGlmIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSBpbXBsZW1lbnRlZDpcbiAgICAgICAgICAgICAgICAgLSBzb3VyY2UgaG9zdG5hbWUgKHNlZSBpbnRlcnNlcnZlcl9odHRwX2hvc3QpLCBidXQgdGhlbiBpdCB3aWxsIGRlcGVuZHMgZnJvbSBETlMsXG4gICAgICAgICAgICAgICAgICAgaXQgY2FuIHVzZSBJUCBhZGRyZXNzIGluc3RlYWQsIGJ1dCB0aGVuIHRoZSB5b3UgbmVlZCB0byBnZXQgY29ycmVjdCBvbiB0aGUgaW5pdGlhdG9yIG5vZGUuXG4gICAgICAgICAgICAgICAgIC0gdGFyZ2V0IGhvc3RuYW1lIC8gaXAgYWRkcmVzcyAoc2FtZSBub3RlcyBhcyBmb3Igc291cmNlIGhvc3RuYW1lKVxuICAgICAgICAgICAgICAgICAtIHRpbWUtYmFzZWQgc2VjdXJpdHkgdG9rZW5zXG4gICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDwhLS0gPHNlY3JldD48L3NlY3JldD4gLS0+XG4gICAgICAgICAgICA8c2hhcmQ+XG4gICAgICAgICAgICAgICAgPCEtLSBPcHRpb25hbC4gV2hldGhlciB0byB3cml0ZSBkYXRhIHRvIGp1c3Qgb25lIG9mIHRoZSByZXBsaWNhcy4gRGVmYXVsdDogZmFsc2UgKHdyaXRlIGRhdGEgdG8gYWxsIHJlcGxpY2FzKS4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8aW50ZXJuYWxfcmVwbGljYXRpb24+ZmFsc2U8L2ludGVybmFsX3JlcGxpY2F0aW9uPiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbmFsLiBTaGFyZCB3ZWlnaHQgd2hlbiB3cml0aW5nIGRhdGEuIERlZmF1bHQ6IDEuIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPHdlaWdodD4xPC93ZWlnaHQ+IC0tPlxuICAgICAgICAgICAgICAgIDxyZXBsaWNhPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5jbGlja2hvdXNlPC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD45MDAwPC9wb3J0PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbmFsLiBQcmlvcml0eSBvZiB0aGUgcmVwbGljYSBmb3IgbG9hZF9iYWxhbmNpbmcuIERlZmF1bHQ6IDEgKGxlc3MgdmFsdWUgaGFzIG1vcmUgcHJpb3JpdHkpLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8cHJpb3JpdHk+MTwvcHJpb3JpdHk+IC0tPlxuICAgICAgICAgICAgICAgIDwvcmVwbGljYT5cbiAgICAgICAgICAgIDwvc2hhcmQ+XG4gICAgICAgICAgICA8IS0tIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8cmVwbGljYT5cbiAgICAgICAgICAgICAgICAgICAgPGhvc3Q+Y2xpY2tob3VzZS0yPC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD45MDAwPC9wb3J0PlxuICAgICAgICAgICAgICAgIDwvcmVwbGljYT5cbiAgICAgICAgICAgIDwvc2hhcmQ+XG4gICAgICAgICAgICA8c2hhcmQ+XG4gICAgICAgICAgICAgICAgPHJlcGxpY2E+XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmNsaWNraG91c2UtMzwvaG9zdD5cbiAgICAgICAgICAgICAgICAgICAgPHBvcnQ+OTAwMDwvcG9ydD5cbiAgICAgICAgICAgICAgICA8L3JlcGxpY2E+XG4gICAgICAgICAgICA8L3NoYXJkPiAtLT5cbiAgICAgICAgPC9jbHVzdGVyPlxuICAgIDwvcmVtb3RlX3NlcnZlcnM+XG48L2NsaWNraG91c2U+XG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvY2xpY2tob3VzZS9kb2NrZXJfcmVsYXRlZF9jb25maWcueG1sXCJcbmNvbnRlbnQgPSBcIlwiXCJcbjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIE92ZXJyaWRlcyB0aGUgZG9ja2VyIGltYWdlJ3MgZGVmYXVsdCBjb25maWcuZC9kb2NrZXJfcmVsYXRlZF9jb25maWcueG1sLFxuICAgICAgICAgd2hpY2ggbGlzdGVucyBvbiB0aGUgSVB2NiB3aWxkY2FyZCBhZGRyZXNzIChbOjpdKSBmaXJzdC4gT24gaG9zdHMgd2l0aG91dFxuICAgICAgICAgSVB2NiBzdXBwb3J0IHRoZSBiaW5kIGZhaWxzLCBzbyBsaXN0ZW4gb24gSVB2NCBvbmx5LiAtLT5cbiAgICA8bGlzdGVuX2hvc3Q+MC4wLjAuMDwvbGlzdGVuX2hvc3Q+XG4gICAgPGxpc3Rlbl90cnk+MTwvbGlzdGVuX3RyeT5cbiAgICA8IS0tIENvbnRhaW5lciBJUHMgY2FuIGNoYW5nZSBhbmQgRE5TIHJlY29yZHMgKHpvb2tlZXBlci0xLCBjbGlja2hvdXNlKSBtYXkgbm90XG4gICAgICAgICBiZSByZWFkeSB0aGUgbW9tZW50IENsaWNrSG91c2Ugc3RhcnRzLiBEbyBub3QgY2FjaGUgRE5TIGxvb2t1cCBmYWlsdXJlcy4gLS0+XG4gICAgPGRpc2FibGVfaW50ZXJuYWxfZG5zX2NhY2hlPjE8L2Rpc2FibGVfaW50ZXJuYWxfZG5zX2NhY2hlPlxuPC9jbGlja2hvdXNlPlxuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3NpZ25vei9wcm9tZXRoZXVzLnltbFwiXG5jb250ZW50ID0gXCJcIlwiXG4jIG15IGdsb2JhbCBjb25maWdcbmdsb2JhbDpcbiAgc2NyYXBlX2ludGVydmFsOiAgICAgNXMgIyBTZXQgdGhlIHNjcmFwZSBpbnRlcnZhbCB0byBldmVyeSAxNSBzZWNvbmRzLiBEZWZhdWx0IGlzIGV2ZXJ5IDEgbWludXRlLlxuICBldmFsdWF0aW9uX2ludGVydmFsOiAxNXMgIyBFdmFsdWF0ZSBydWxlcyBldmVyeSAxNSBzZWNvbmRzLiBUaGUgZGVmYXVsdCBpcyBldmVyeSAxIG1pbnV0ZS5cbiAgIyBzY3JhcGVfdGltZW91dCBpcyBzZXQgdG8gdGhlIGdsb2JhbCBkZWZhdWx0ICgxMHMpLlxuXG4jIEFsZXJ0bWFuYWdlciBjb25maWd1cmF0aW9uXG5hbGVydGluZzpcbiAgYWxlcnRtYW5hZ2VyczpcbiAgLSBzdGF0aWNfY29uZmlnczpcbiAgICAtIHRhcmdldHM6XG4gICAgICAtIGFsZXJ0bWFuYWdlcjo5MDkzXG5cbiMgTG9hZCBydWxlcyBvbmNlIGFuZCBwZXJpb2RpY2FsbHkgZXZhbHVhdGUgdGhlbSBhY2NvcmRpbmcgdG8gdGhlIGdsb2JhbCAnZXZhbHVhdGlvbl9pbnRlcnZhbCcuXG5ydWxlX2ZpbGVzOiBbXVxuICAjIC0gXCJmaXJzdF9ydWxlcy55bWxcIlxuICAjIC0gXCJzZWNvbmRfcnVsZXMueW1sXCJcbiAgIyAtICdhbGVydHMueW1sJ1xuXG4jIEEgc2NyYXBlIGNvbmZpZ3VyYXRpb24gY29udGFpbmluZyBleGFjdGx5IG9uZSBlbmRwb2ludCB0byBzY3JhcGU6XG4jIEhlcmUgaXQncyBQcm9tZXRoZXVzIGl0c2VsZi5cbnNjcmFwZV9jb25maWdzOiBbXVxuXG5yZW1vdGVfcmVhZDpcbiAgLSB1cmw6IHRjcDovL2NsaWNraG91c2U6OTAwMC9zaWdub3pfbWV0cmljc1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL2NvbGxlY3Rvci9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbFwiXG5jb250ZW50ID0gXCJcIlwiXG5yZWNlaXZlcnM6XG4gIG90bHA6XG4gICAgcHJvdG9jb2xzOlxuICAgICAgZ3JwYzpcbiAgICAgICAgZW5kcG9pbnQ6IDAuMC4wLjA6NDMxN1xuICAgICAgaHR0cDpcbiAgICAgICAgZW5kcG9pbnQ6IDAuMC4wLjA6NDMxOFxucHJvY2Vzc29yczpcbiAgYmF0Y2g6XG5leHBvcnRlcnM6XG4gIGNsaWNraG91c2V0cmFjZXM6XG4gICAgZGF0YXNvdXJjZTogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel90cmFjZXNcbiAgICB1c2VfbmV3X3NjaGVtYTogdHJ1ZVxuICBzaWdub3pjbGlja2hvdXNlbWV0cmljczpcbiAgICBkc246IHRjcDovL2NsaWNraG91c2U6OTAwMC9zaWdub3pfbWV0cmljc1xuICAgIHRpbWVvdXQ6IDE1c1xuICBjbGlja2hvdXNlbG9nc2V4cG9ydGVyOlxuICAgIGRzbjogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel9sb2dzXG4gICAgdGltZW91dDogMTBzXG4gICAgdXNlX25ld19zY2hlbWE6IHRydWVcbiAgbWV0YWRhdGFleHBvcnRlcjpcbiAgICBkc246IHRjcDovL2NsaWNraG91c2U6OTAwMC9zaWdub3pfbWV0YWRhdGFcbiAgICB0aW1lb3V0OiAxMHNcbnNlcnZpY2U6XG4gIHBpcGVsaW5lczpcbiAgICB0cmFjZXM6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbY2xpY2tob3VzZXRyYWNlcywgbWV0YWRhdGFleHBvcnRlcl1cbiAgICBtZXRyaWNzOlxuICAgICAgcmVjZWl2ZXJzOiBbb3RscF1cbiAgICAgIHByb2Nlc3NvcnM6IFtiYXRjaF1cbiAgICAgIGV4cG9ydGVyczogW3NpZ25vemNsaWNraG91c2VtZXRyaWNzLCBtZXRhZGF0YWV4cG9ydGVyXVxuICAgIGxvZ3M6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbY2xpY2tob3VzZWxvZ3NleHBvcnRlciwgbWV0YWRhdGFleHBvcnRlcl1cblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy9lbXB0eS50eHRcIlxuY29udGVudCA9IFwiXCIiCn0=
The exact Docker Compose and template configuration this template deploys.
Version: latest
OpenObserve (O2) is a cloud-native observability platform that unifies logs, metrics, and traces into one solution.
Version: canary
Dokploy monitoring extension with Prometheus metrics export for external monitoring systems like Grafana Cloud. Tracks server and container metrics with configurable thresholds and alerting.
Version: latest
Dozzle is a lightweight, real-time log viewer for Docker containers.
Version: v5.36.0
Gatus is an automated service health dashboard for monitoring HTTP, DNS, TCP, ICMP, and other endpoints.
Version: latest
Gitingest is an application that supports Prometheus metrics, Sentry integration, and S3-backed storage.
Version: latest
Netdata is a real-time performance monitoring tool that provides comprehensive system metrics, application monitoring, and infrastructure health insights.
Dokploy is a free, open source deployment platform. Deploy SigNoz and 499+ other templates on your own infrastructure with a single click.