Back to Templates
Ethora Core logo

Ethora Core

v2610

Self-hosted chat and messaging server: API, web chat and admin panel, XMPP server (ejabberd) and file storage, with SDKs for web, iOS, Android and React Native.

Deploy on Dokploy

Deploy Ethora Core on Dokploy

  1. Install Dokploy on your server if you haven't already.
  2. In your Dokploy panel, open a project and click Create Service → Template.
  3. Search for Ethora Core and click Create — Dokploy configures domains, environment variables, and volumes for you.

Alternatively, create a Compose service, go to Advanced → Import from Base64, and paste this payload:

base64
ewogICJjb21wb3NlIjogIiMgRXRob3JhIENvcmUgYXMgYSBEb2twbG95IHRlbXBsYXRlLiBHRU5FUkFURUQgRklMRTogZWRpdCB0aGUgYnVuZGxlJ3NcbiMgZGVwbG95L2NvbXBvc2UvZG9ja2VyLWNvbXBvc2UueW1sIGFuZCBydW4gYnVpbGQtdGVtcGxhdGUuc2guXG4jXG4jIFNhbWUgc2VydmljZXMgYW5kIHN0YXJ0IG9yZGVyIGFzIHRoZSBidW5kbGUgKGNvbmZpZyAtPiBkYXRhYmFzZXMgLT4geG1wcCAtPlxuIyBhcGksIGpvYnMgLT4gaW5pdCAtPiBmcm9udGVuZCksIHdpdGhvdXQgdGhlIGJ1bmRsZWQgQ2FkZHk6IERva3Bsb3kncyBUcmFlZmlrXG4jIHJvdXRlcyB0aGUgZm91ciBwdWJsaWMgaG9zdHMgZGVjbGFyZWQgaW4gdGVtcGxhdGUudG9tbC4gVGhlIHNjcmlwdHMgYW5kXG4jIHRlbXBsYXRlcyBhcmUgdGhlIHRlbXBsYXRlJ3MgbW91bnRzLCB3aGljaCBEb2twbG95IHdyaXRlcyB1bmRlciAuLi9maWxlcy8uXG4jIEV2ZXJ5IHZhcmlhYmxlIGNvbWVzIGZyb20gdGhlIC5lbnYgRG9rcGxveSB3cml0ZXMgbmV4dCB0byB0aGlzIGZpbGVcbiMgKHRlbXBsYXRlLnRvbWwsIFtjb25maWddIGVudikuIFNlZSBSRUFETUUubWQgaW4gdGhpcyBkaXJlY3RvcnkuXG5cbngtbG9nZ2luZzogJmxvZ2dpbmdcbiAgbG9nZ2luZzpcbiAgICBkcml2ZXI6IGpzb24tZmlsZVxuICAgIG9wdGlvbnM6XG4gICAgICBtYXgtc2l6ZTogXCIyMG1cIlxuICAgICAgbWF4LWZpbGU6IFwiNVwiXG5cbngtYXBpOiAmYXBpXG4gIGltYWdlOiAke0VUSE9SQV9BUElfSU1BR0U6LWRvY2tlci5pby9kYXBwcm9zL2V0aG9yYS1hcGk6MjYxMH1cbiAgZW50cnlwb2ludDogW1widGluaVwiLCBcIi0tXCIsIFwiYmFzaFwiLCBcIi9ldGhvcmEvc2NyaXB0cy9hcGktZW50cnlwb2ludC5zaFwiXVxuICB2b2x1bWVzOlxuICAgIC0gY29uZmlnOi9ldGhvcmEvY29uZmlnOnJvXG4gICAgLSAuLi9maWxlcy9zY3JpcHRzOi9ldGhvcmEvc2NyaXB0czpyb1xuICA8PDogKmxvZ2dpbmdcblxuc2VydmljZXM6XG4gICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb25maWcgLS1cbiAgY29uZmlnOlxuICAgIGltYWdlOiAke0VUSE9SQV9YTVBQX0lNQUdFOi1kb2NrZXIuaW8vZGFwcHJvcy9ldGhvcmEteG1wcDoyNjEwfVxuICAgIHVzZXI6IFwiMDowXCJcbiAgICBlbnRyeXBvaW50OiBbXCIvYmluL3NoXCIsIFwiL2V0aG9yYS9zY3JpcHRzL3JlbmRlci1jb25maWcuc2hcIl1cbiAgICAjIEV2ZXJ5IHZhbHVlIGluIC5lbnYgcmVhY2hlcyB0aGUgcmVuZGVyZXIsIHNvIGFueSB2YXJpYWJsZSBvZiB0aGVcbiAgICAjIGluc3RhbGxlcidzIHRlbXBsYXRlcyAoUE9TVE1BUktfKiwgRU1BSUxfVExEXyosIFJBVEVfTElNSVRfKiwgLi4uKSBjYW5cbiAgICAjIGJlIHNldCB0aGVyZS4gVGhlIGhvc3RzIGFyZSBkZXJpdmVkIGhlcmUgb25jZSwgZm9yIGNhZGR5IGFuZCB4bXBwIHRvby5cbiAgICBlbnZfZmlsZTpcbiAgICAgIC0gcGF0aDogLmVudlxuICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIFJPT1RfRE9NQUlOOiAke1JPT1RfRE9NQUlOOj9ST09UX0RPTUFJTiBpcyBub3Qgc2V0OyBydW4gLi9jb25maWd1cmUuc2ggb3IgZmlsbCBpbiAuZW52fVxuICAgICAgQVBJX0RPTUFJTjogJHtBUElfRE9NQUlOOi1hcGkuJHtST09UX0RPTUFJTn19XG4gICAgICBXRUJfRE9NQUlOOiAke1dFQl9ET01BSU46LWFwcC4ke1JPT1RfRE9NQUlOfX1cbiAgICAgIFhNUFBfRE9NQUlOOiAke1hNUFBfRE9NQUlOOi14bXBwLiR7Uk9PVF9ET01BSU59fVxuICAgICAgRklMRVNfRE9NQUlOOiAke0ZJTEVTX0RPTUFJTjotZmlsZXMuJHtST09UX0RPTUFJTn19XG4gICAgdm9sdW1lczpcbiAgICAgIC0gY29uZmlnOi9vdXQvY29uZmlnXG4gICAgICAtIG15c3FsLWluaXRkYjovb3V0L215c3FsLWluaXRkYlxuICAgICAgLSAuLi9maWxlcy9zY3JpcHRzOi9ldGhvcmEvc2NyaXB0czpyb1xuICAgICAgLSAuLi9maWxlcy90ZW1wbGF0ZXM6L2V0aG9yYS90ZW1wbGF0ZXM6cm9cbiAgICByZXN0YXJ0OiBcIm5vXCJcbiAgICA8PDogKmxvZ2dpbmdcblxuICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGF0YWJhc2VzIC0tXG4gIG1vbmdvOlxuICAgIGltYWdlOiBtb25nbzo2LjAuOFxuICAgIGNvbW1hbmQ6IFtcIm1vbmdvZFwiLCBcIi0tcmVwbFNldFwiLCBcInJzMFwiLCBcIi0tYmluZF9pcF9hbGxcIl1cbiAgICB2b2x1bWVzOlxuICAgICAgLSBtb25nbzovZGF0YS9kYlxuICAgICAgLSBtb25nby1jb25maWc6L2RhdGEvY29uZmlnZGJcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgIyBBIFRDUCBjb25uZWN0LCBub3QgbW9uZ29zaDogc2VlIGRvY2tlci1jb21wb3NlLmVudGVycHJpc2UueW1sLlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwiYmFzaFwiLCBcIi1jXCIsIFwiZXhlYyAzPD4vZGV2L3RjcC8xMjcuMC4wLjEvMjcwMTdcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAzMFxuICAgIDw8OiAqbG9nZ2luZ1xuXG4gIG1vbmdvLWluaXQ6XG4gICAgaW1hZ2U6IG1vbmdvOjYuMC44XG4gICAgZW50cnlwb2ludDogW1wiYmFzaFwiLCBcIi9ldGhvcmEvc2NyaXB0cy9tb25nby1pbml0LnNoXCJdXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvc2NyaXB0czovZXRob3JhL3NjcmlwdHM6cm9cbiAgICBkZXBlbmRzX29uOlxuICAgICAgbW9uZ286XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgcmVzdGFydDogXCJub1wiXG4gICAgPDw6ICpsb2dnaW5nXG5cbiAgbXlzcWw6XG4gICAgaW1hZ2U6IG15c3FsOjguMS4wXG4gICAgY29tbWFuZDogW1wiLS1kZWZhdWx0LWF1dGhlbnRpY2F0aW9uLXBsdWdpbj1teXNxbF9uYXRpdmVfcGFzc3dvcmRcIl1cbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIE1ZU1FMX1JPT1RfUEFTU1dPUkQ6ICR7TVlTUUxfUk9PVF9QQVNTV09SRDo/TVlTUUxfUk9PVF9QQVNTV09SRCBpcyBub3Qgc2V0fVxuICAgICAgIyBlamFiYmVyZCBjb25uZWN0cyBhcyByb290IGZyb20gaXRzIG93biBjb250YWluZXIgKGFzIG9uIGEgaG9zdCBpbnN0YWxsKS5cbiAgICAgIE1ZU1FMX1JPT1RfSE9TVDogXCIlXCJcbiAgICB2b2x1bWVzOlxuICAgICAgLSBteXNxbDovdmFyL2xpYi9teXNxbFxuICAgICAgLSBteXNxbC1pbml0ZGI6L2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kOnJvXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGNvbmZpZzpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwibXlzcWxhZG1pbiBwaW5nIC1oIDEyNy4wLjAuMSAtdXJvb3QgLXBcXFwiJCRNWVNRTF9ST09UX1BBU1NXT1JEXFxcIiAtLXNpbGVudFwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDMwXG4gICAgICBzdGFydF9wZXJpb2Q6IDMwc1xuICAgIDw8OiAqbG9nZ2luZ1xuXG4gIHJlZGlzOlxuICAgIGltYWdlOiByZWRpczo3LjQtYWxwaW5lXG4gICAgdm9sdW1lczpcbiAgICAgIC0gcmVkaXM6L2RhdGFcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwicmVkaXMtY2xpXCIsIFwicGluZ1wiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDEwXG4gICAgPDw6ICpsb2dnaW5nXG5cbiAgbWluaW86XG4gICAgIyBPdXIgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBNaW5JTyByZWxlYXNlIGV2ZXJ5IGluc3RhbGwgcnVucyAoQUdQTC0zLjApO1xuICAgICMgTWluSU8gd2l0aGRyZXcgaXRzIHB1YmxpYyBpbWFnZXMuIFNldCBNSU5JT19JTUFHRSBmb3IgYSBwcml2YXRlIG1pcnJvci5cbiAgICBpbWFnZTogJHtNSU5JT19JTUFHRTotZG9ja2VyLmlvL2RhcHByb3MvbWluaW86UkVMRUFTRS4yMDI1LTA5LTA3VDE2LTEzLTA5Wn1cbiAgICBjb21tYW5kOiBbXCJzZXJ2ZXJcIiwgXCIvZGF0YVwiXVxuICAgIGVudmlyb25tZW50OlxuICAgICAgTUlOSU9fUk9PVF9VU0VSOiAke01JTklPX1JPT1RfVVNFUjo/TUlOSU9fUk9PVF9VU0VSIGlzIG5vdCBzZXR9XG4gICAgICBNSU5JT19ST09UX1BBU1NXT1JEOiAke01JTklPX1JPT1RfUEFTU1dPUkQ6P01JTklPX1JPT1RfUEFTU1dPUkQgaXMgbm90IHNldH1cbiAgICB2b2x1bWVzOlxuICAgICAgLSBtaW5pbzovZGF0YVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTURcIiwgXCJjdXJsXCIsIFwiLWZzU1wiLCBcImh0dHA6Ly8xMjcuMC4wLjE6OTAwMC9taW5pby9oZWFsdGgvbGl2ZVwiXVxuICAgICAgaW50ZXJ2YWw6IDE1c1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDEwXG4gICAgPDw6ICpsb2dnaW5nXG5cbiAgY2VudHJpZnVnbzpcbiAgICBpbWFnZTogY2VudHJpZnVnby9jZW50cmlmdWdvOnY2XG4gICAgY29tbWFuZDogW1wiY2VudHJpZnVnb1wiLCBcIi1jXCIsIFwiL2V0aG9yYS9jb25maWcvY2VudHJpZnVnby9jb25maWcuanNvblwiXVxuICAgIHZvbHVtZXM6XG4gICAgICAtIGNvbmZpZzovZXRob3JhL2NvbmZpZzpyb1xuICAgIGRlcGVuZHNfb246XG4gICAgICBjb25maWc6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5XG4gICAgdWxpbWl0czpcbiAgICAgIG5vZmlsZTpcbiAgICAgICAgc29mdDogNjU1MzVcbiAgICAgICAgaGFyZDogNjU1MzVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwid2dldCAtcSAtTyAvZGV2L251bGwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2hlYWx0aCB8fCBleGl0IDFcIl1cbiAgICAgIGludGVydmFsOiAzMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAzXG4gICAgICBzdGFydF9wZXJpb2Q6IDEwc1xuICAgIDw8OiAqbG9nZ2luZ1xuXG4gICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHhtcHAgLS1cbiAgeG1wcDpcbiAgICBpbWFnZTogJHtFVEhPUkFfWE1QUF9JTUFHRTotZG9ja2VyLmlvL2RhcHByb3MvZXRob3JhLXhtcHA6MjYxMH1cbiAgICBlbnRyeXBvaW50OiBbXCIvYmluL3NoXCIsIFwiL2V0aG9yYS9zY3JpcHRzL3htcHAtc3RhcnQuc2hcIl1cbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIFhNUFBfRE9NQUlOOiAke1hNUFBfRE9NQUlOOi14bXBwLiR7Uk9PVF9ET01BSU59fVxuICAgICAgWE1QUF9BRE1JTl9QQVNTV09SRDogJHtYTVBQX0FETUlOX1BBU1NXT1JEOj9YTVBQX0FETUlOX1BBU1NXT1JEIGlzIG5vdCBzZXR9XG4gICAgdm9sdW1lczpcbiAgICAgIC0gY29uZmlnOi9ldGhvcmEvY29uZmlnOnJvXG4gICAgICAtIC4uL2ZpbGVzL3NjcmlwdHM6L2V0aG9yYS9zY3JpcHRzOnJvXG4gICAgIyBOYXRpdmUgWE1QUCBjbGllbnRzIChwb3J0IDUyMjIpIGFyZSBub3QgZXhwb3NlZCBieSBkZWZhdWx0OyB3ZWIgYW5kIFNES1xuICAgICMgY2xpZW50cyBjb25uZWN0IG92ZXIgd3NzOi8veG1wcC48cm9vdD4vd3MgdGhyb3VnaCBjYWRkeS4gU2VlIFJFQURNRS5tZC5cbiAgICBkZXBlbmRzX29uOlxuICAgICAgY29uZmlnOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgICAgbXlzcWw6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgICMgSGVhbHRoeSBvbmNlIGVqYWJiZXJkIHJ1bnMgQU5EIHRoZSBhZG1pbiBhY2NvdW50IGlzIGVuc3VyZWQsIHdoaWNoIGlzXG4gICAgICAjIHdoYXQgdGhlIEFQSSBhbmQgaW5pdCBuZWVkLlxuICAgICAgdGVzdDogW1wiQ01ELVNIRUxMXCIsIFwidGVzdCAtZiAvdG1wL2V0aG9yYS1hZG1pbi1yZWFkeSAmJiAvb3B0L2VqYWJiZXJkL2Jpbi9lamFiYmVyZGN0bCBzdGF0dXMgPi9kZXYvbnVsbFwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogMTBzXG4gICAgICByZXRyaWVzOiAzMFxuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICA8PDogKmxvZ2dpbmdcblxuICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYXBpIC0tXG4gIGFwaTpcbiAgICA8PDogKmFwaVxuICAgIGNvbW1hbmQ6IFtcImFwaVwiXVxuICAgIGRlcGVuZHNfb246XG4gICAgICBjb25maWc6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5XG4gICAgICBtb25nby1pbml0OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgICAgcmVkaXM6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBtaW5pbzpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIHhtcHA6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICAjIEhlYWx0aGNoZWNrOiB0aGUgaW1hZ2UncyBvd24gKEdFVCAvdjEvcGluZykuXG5cbiAgam9iczpcbiAgICA8PDogKmFwaVxuICAgIGNvbW1hbmQ6IFtcImpvYnNcIl1cbiAgICBkZXBlbmRzX29uOlxuICAgICAgYXBpOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICBkaXNhYmxlOiB0cnVlXG5cbiAgaW5pdDpcbiAgICA8PDogKmFwaVxuICAgIGNvbW1hbmQ6IFtcImluaXRcIl1cbiAgICBkZXBlbmRzX29uOlxuICAgICAgYXBpOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgeG1wcDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICByZXN0YXJ0OiBcIm5vXCJcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIGRpc2FibGU6IHRydWVcblxuICAjIEVuZC10by1lbmQgY2hlY2sgdGhyb3VnaCB0aGUgcHVibGljIFVSTHMgKHNjcmlwdHMvdmVyaWZ5LmpzKTpcbiAgIyAgIGRvY2tlciBjb21wb3NlIC0tcHJvZmlsZSB2ZXJpZnkgcnVuIC0tcm0gdmVyaWZ5XG4gIHZlcmlmeTpcbiAgICA8PDogKmFwaVxuICAgIHByb2ZpbGVzOiBbXCJ2ZXJpZnlcIl1cbiAgICBjb21tYW5kOiBbXCJ2ZXJpZnlcIl1cbiAgICByZXN0YXJ0OiBcIm5vXCJcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIGRpc2FibGU6IHRydWVcblxuICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZyb250ZW5kIC0tXG4gIGZyb250ZW5kOlxuICAgIGltYWdlOiAke0VUSE9SQV9GUk9OVEVORF9JTUFHRTotZG9ja2VyLmlvL2RhcHByb3MvZXRob3JhLWZyb250ZW5kOjI2MTB9XG4gICAgZW50cnlwb2ludDogW1wiL2Jpbi9zaFwiLCBcIi9ldGhvcmEvc2NyaXB0cy9mcm9udGVuZC1zdGFydC5zaFwiXVxuICAgIGNvbW1hbmQ6IFtcInNlcnZlXCJdXG4gICAgdm9sdW1lczpcbiAgICAgIC0gY29uZmlnOi9ldGhvcmEvY29uZmlnOnJvXG4gICAgICAtIC4uL2ZpbGVzL3NjcmlwdHM6L2V0aG9yYS9zY3JpcHRzOnJvXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGNvbmZpZzpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIDw8OiAqbG9nZ2luZ1xuXG52b2x1bWVzOlxuICAjIFlvdXIgZGF0YS4gU3Vydml2ZSBgZG9ja2VyIGNvbXBvc2UgZG93bmA7IGBkb3duIC12YCBkZWxldGVzIHRoZW0uXG4gIG1vbmdvOlxuICBteXNxbDpcbiAgbWluaW86XG4gIHJlZGlzOlxuICAjIFJlZ2VuZXJhdGVkIG9uIGV2ZXJ5IHN0YXJ0OyBzYWZlIHRvIGRlbGV0ZS5cbiAgbW9uZ28tY29uZmlnOlxuICBjb25maWc6XG4gIG15c3FsLWluaXRkYjoiLAogICJjb25maWciOiAiIyBFdGhvcmEgQ29yZSwgRG9rcGxveSB0ZW1wbGF0ZSAoZ2l0aHViLmNvbS9Eb2twbG95L3RlbXBsYXRlcyBmb3JtYXQpLlxuIyBHRU5FUkFURUQgRklMRTogZWRpdCB0ZW1wbGF0ZS5pbi50b21sIGFuZCBydW4gYnVpbGQtdGVtcGxhdGUuc2g7IHRoZSBtb3VudHNcbiMgYXJlIHRoZSBidW5kbGUncyBkZXBsb3kvY29tcG9zZS9zY3JpcHRzIGFuZCBkZXBsb3kvY29tcG9zZS90ZW1wbGF0ZXMuXG4jXG4jIE5vIGlucHV0IGlzIHJlcXVpcmVkOiByb290X2RvbWFpbiBpcyBhIERva3Bsb3ktZ2VuZXJhdGVkXG4jIDxuYW1lPi08aGFzaD4tPGlwPi5zc2xpcC5pbyBob3N0LCB0aGUgZm91ciBwdWJsaWMgaG9zdHMgYXBpLiwgYXBwLiwgeG1wcC4gYW5kXG4jIGZpbGVzLjxyb290X2RvbWFpbj4gYXJlIHRoZSBkb21haW5zIGJlbG93LCBhbmQgZXZlcnkgc2VjcmV0IGlzIGdlbmVyYXRlZC5cbiMgVG8gdXNlIHlvdXIgb3duIGRvbWFpbiBjaGFuZ2UgUk9PVF9ET01BSU4gYW5kIHRoZSBzaXggZG9tYWlucyB0b2dldGhlci5cbiMgQmVmb3JlIHRoZSBmaXJzdCBkZXBsb3kgc2V0IEFETUlOX0VNQUlMICh0aGUgYWRtaW4gbG9naW4pLCBlbmFibGUgSFRUUFNcbiMgd2l0aCBMZXQncyBFbmNyeXB0IG9uIHRoZSBzaXggZG9tYWlucyAodGhlIHdlYiBhcHAgb25seSB3b3JrcyBvdmVyIGh0dHBzKVxuIyBhbmQgdHVybiBJc29sYXRlZCBEZXBsb3ltZW50IG9uIChBZHZhbmNlZCksIHNvIHRoZSBzZXJ2aWNlIG5hbWVzIHN0YXlcbiMgcHJpdmF0ZSB0byB0aGlzIHN0YWNrLiBTZWUgUkVBRE1FLm1kLlxuXG5bdmFyaWFibGVzXVxucm9vdF9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5hZG1pbl9wYXNzd29yZCA9IFwiJHtwYXNzd29yZDoyMH1cIlxuand0X3NlY3JldCA9IFwiJHtwYXNzd29yZDo2NH1cIlxucmVmcmVzaF9zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbnhtcHBfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjMyfVwiXG54bXBwX2p3dF9zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbnhtcHBfYWRtaW5fcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MjR9XCJcbmludGVybmFsX3JlcXVlc3RzX3NlY3JldCA9IFwiJHtwYXNzd29yZDozMn1cIlxubXlzcWxfcm9vdF9wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxubWluaW9fcm9vdF91c2VyID0gXCJldGhvcmEke3Bhc3N3b3JkOjEyfVwiXG5taW5pb19yb290X3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5jZW50cmlmdWdvX2FwaV9rZXkgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbmNlbnRyaWZ1Z29faG1hY19zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbmNlbnRyaWZ1Z29fYWRtaW5fcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MjR9XCJcbmNlbnRyaWZ1Z29fYWRtaW5fc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjY0fVwiXG5cbltjb25maWddXG4jIFRoZSBrZXlzIG9mIHRoZSBidW5kbGUncyAuZW52LmV4YW1wbGUgKGRlcGxveS9jb21wb3NlLy5lbnYuZXhhbXBsZSBpblxuIyBnaXRodWIuY29tL2RhcHByb3MvZXRob3JhLWluc3RhbGwpLCBzYW1lIG9yZGVyLCB3aXRob3V0IHRoZSBwZXItaG9zdFxuIyBvdmVycmlkZXMgKEFQSV9ET01BSU4sIC4uLikgYW5kIHRoZSBidW5kbGVkIHByb3h5J3Mgc2V0dGluZ3MuIEFETUlOX0VNQUlMXG4jIGlzIHRoZSBhZG1pbiBsb2dpbjsgQURNSU5fUEFTU1dPUkQgaXRzIGluaXRpYWwgcGFzc3dvcmQuIE1ZU1FMX1JPT1RfUEFTU1dPUkRcbiMgYW5kIE1JTklPX1JPT1RfKiBhcmUgd3JpdHRlbiBpbnRvIHRoZSBkYXRhYmFzZXMgb24gdGhlIGZpcnN0IHN0YXJ0IGFuZCBtdXN0XG4jIG5vdCBjaGFuZ2UgYWZ0ZXIgaXQuXG5lbnYgPSBbXG4gIFwiUk9PVF9ET01BSU49JHtyb290X2RvbWFpbn1cIixcbiAgXCJBRE1JTl9FTUFJTD1hZG1pbkAke3Jvb3RfZG9tYWlufVwiLFxuICBcIkFETUlOX1BBU1NXT1JEPSR7YWRtaW5fcGFzc3dvcmR9XCIsXG4gIFwiQkFTRV9BUFBfRElTUExBWV9OQU1FPUV0aG9yYVwiLFxuICBcIkVUSE9SQV9MSUNFTlNFX0tFWT1cIixcbiAgXCJFVEhPUkFfTElDRU5TRV9DQUxMX0hPTUU9dHJ1ZVwiLFxuICBcIkVUSE9SQV9MSUNFTlNFX1NFUlZFUl9VUkw9XCIsXG4gIFwiSldUX1NFQ1JFVD0ke2p3dF9zZWNyZXR9XCIsXG4gIFwiUkVGUkVTSF9TRUNSRVQ9JHtyZWZyZXNoX3NlY3JldH1cIixcbiAgXCJYTVBQX1NFQ1JFVD0ke3htcHBfc2VjcmV0fVwiLFxuICBcIlhNUFBfSldUX1NFQ1JFVD0ke3htcHBfand0X3NlY3JldH1cIixcbiAgXCJYTVBQX0FETUlOX1BBU1NXT1JEPSR7eG1wcF9hZG1pbl9wYXNzd29yZH1cIixcbiAgXCJJTlRFUk5BTF9SRVFVRVNUU19TRUNSRVQ9JHtpbnRlcm5hbF9yZXF1ZXN0c19zZWNyZXR9XCIsXG4gIFwiTVlTUUxfUk9PVF9QQVNTV09SRD0ke215c3FsX3Jvb3RfcGFzc3dvcmR9XCIsXG4gIFwiTUlOSU9fUk9PVF9VU0VSPSR7bWluaW9fcm9vdF91c2VyfVwiLFxuICBcIk1JTklPX1JPT1RfUEFTU1dPUkQ9JHttaW5pb19yb290X3Bhc3N3b3JkfVwiLFxuICBcIkNFTlRSSUZVR09fQVBJX0tFWT0ke2NlbnRyaWZ1Z29fYXBpX2tleX1cIixcbiAgXCJDRU5UUklGVUdPX0hNQUNfU0VDUkVUPSR7Y2VudHJpZnVnb19obWFjX3NlY3JldH1cIixcbiAgXCJDRU5UUklGVUdPX0FETUlOX1BBU1NXT1JEPSR7Y2VudHJpZnVnb19hZG1pbl9wYXNzd29yZH1cIixcbiAgXCJDRU5UUklGVUdPX0FETUlOX1NFQ1JFVD0ke2NlbnRyaWZ1Z29fYWRtaW5fc2VjcmV0fVwiLFxuICBcIkVUSE9SQV9BUElfSU1BR0U9ZG9ja2VyLmlvL2RhcHByb3MvZXRob3JhLWFwaToyNjEwXCIsXG4gIFwiRVRIT1JBX0ZST05URU5EX0lNQUdFPWRvY2tlci5pby9kYXBwcm9zL2V0aG9yYS1mcm9udGVuZDoyNjEwXCIsXG4gIFwiRVRIT1JBX1hNUFBfSU1BR0U9ZG9ja2VyLmlvL2RhcHByb3MvZXRob3JhLXhtcHA6MjYxMFwiLFxuICBcIkNPTVBPU0VfUFJPRklMRVM9XCIsXG5dXG5cbiMgYXBpLjxyb290PjogdGhlIEhUVFAgQVBJIChTd2FnZ2VyIGF0IC9hcGktZG9jcy8pLlxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiYXBpXCJcbnBvcnQgPSA4MDgwXG5ob3N0ID0gXCJhcGkuJHtyb290X2RvbWFpbn1cIlxuXG4jIGFwcC48cm9vdD46IHdlYiBjaGF0IGFuZCBhZG1pbiBwYW5lbCAuLi5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImZyb250ZW5kXCJcbnBvcnQgPSA4MDgwXG5ob3N0ID0gXCJhcHAuJHtyb290X2RvbWFpbn1cIlxuXG4jIC4uLiBhbmQsIG9uIHRoZSBzYW1lIGhvc3QsIHRoZSByZWFsLXRpbWUgY2hhbm5lbCAobG9uZ2VyIHBhdGggcnVsZSB3aW5zKS5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImNlbnRyaWZ1Z29cIlxucG9ydCA9IDgwMDBcbmhvc3QgPSBcImFwcC4ke3Jvb3RfZG9tYWlufVwiXG5wYXRoID0gXCIvY29ubmVjdGlvbi93ZWJzb2NrZXRcIlxuXG4jIHhtcHAuPHJvb3Q+OiBvbmx5IC93cyBhbmQgL2Jvc2g7IGVqYWJiZXJkJ3MgL2FwaSBhbmQgL2FkbWluIHN0YXkgaW50ZXJuYWwuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJ4bXBwXCJcbnBvcnQgPSA1MjgwXG5ob3N0ID0gXCJ4bXBwLiR7cm9vdF9kb21haW59XCJcbnBhdGggPSBcIi93c1wiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInhtcHBcIlxucG9ydCA9IDUyODBcbmhvc3QgPSBcInhtcHAuJHtyb290X2RvbWFpbn1cIlxucGF0aCA9IFwiL2Jvc2hcIlxuXG4jIGZpbGVzLjxyb290PjogZmlsZSBzdG9yYWdlIChNaW5JTykuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJtaW5pb1wiXG5wb3J0ID0gOTAwMFxuaG9zdCA9IFwiZmlsZXMuJHtyb290X2RvbWFpbn1cIlxuXG4jIFRoZSBidW5kbGUncyBzY3JpcHRzIGFuZCB0ZW1wbGF0ZXMsIG1vdW50ZWQgZnJvbSAuLi9maWxlcy8gYnkgZG9ja2VyLWNvbXBvc2UueW1sLlxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvc2NyaXB0cy9hcGktZW50cnlwb2ludC5zaFwiXG5jb250ZW50ID0gJycnXG4jIS9iaW4vYmFzaFxuIyBhcGktZW50cnlwb2ludC5zaCAtIGVudHJ5cG9pbnQgZm9yIGV2ZXJ5IGNvbnRhaW5lciBvZiB0aGUgZXRob3JhLWFwaSBpbWFnZVxuIyBpbiB0aGUgY29tcG9zZSBidW5kbGUgKGFwaSwgam9icywgaW5pdCkuXG4jXG4jIExvYWRzIHRoZSBiYWNrZW5kLmVudiB0aGUgY29uZmlnIHNlcnZpY2UgcmVuZGVyZWQsIHBhcnNlZCBieSB0aGUgZG90ZW52XG4jIHBhY2thZ2UgdGhlIEFQSSBpdHNlbGYgdXNlcyAoc28gcXVvdGluZyBhbmQgZXNjYXBpbmcgYmVoYXZlIGV4YWN0bHkgYXMgb24gYVxuIyBob3N0IGluc3RhbGwpLCB3aXRob3V0IG92ZXJyaWRpbmcgYW55dGhpbmcgYWxyZWFkeSBpbiB0aGUgZW52aXJvbm1lbnQuXG4jIFRoZW4gaGFuZHMgb3ZlciB0byB0aGUgaW1hZ2UncyBvd24gc3RhcnQuanM6XG4jXG4jICAgYXBpLWVudHJ5cG9pbnQuc2ggYXBpIHwgam9icyB8IGJjLXdvcmtlciB8IHNjcmlwdCA8cGF0aD4gW2FyZ3MuLi5dXG4jICAgYXBpLWVudHJ5cG9pbnQuc2ggaW5pdCAgICAgICAgICAgIGZpcnN0LWJvb3Qgc3RlcHMgKHNjcmlwdHMvaW5pdC5zaClcbiMgICBhcGktZW50cnlwb2ludC5zaCB2ZXJpZnkgICAgICAgICAgZW5kLXRvLWVuZCBjaGVjayAoc2NyaXB0cy92ZXJpZnkuanMpXG5zZXQgLWV1byBwaXBlZmFpbFxuXG5FTlZfRklMRT1cIiR7RVRIT1JBX0JBQ0tFTkRfRU5WX0ZJTEU6LS9ldGhvcmEvY29uZmlnL2FwaS9iYWNrZW5kLmVudn1cIlxuWyAtciBcIiRFTlZfRklMRVwiIF0gfHwgeyBlY2hvIFwiW2FwaV0gJEVOVl9GSUxFIGlzIG1pc3Npbmcgb3IgdW5yZWFkYWJsZTsgdGhlIGNvbmZpZyBzZXJ2aWNlIGRpZCBub3QgcnVuXCIgPiYyOyBleGl0IDE7IH1cblxuZXhwb3J0cz1cIiQobm9kZSAtZSAnXG4gIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpXG4gIGNvbnN0IHBhcnNlZCA9IHJlcXVpcmUoXCIvYXBwL25vZGVfbW9kdWxlcy9kb3RlbnZcIikucGFyc2UoZnMucmVhZEZpbGVTeW5jKHByb2Nlc3MuYXJndlsxXSkpXG4gIGNvbnN0IHEgPSB2ID0+IFwiXFx4MjdcIiArIFN0cmluZyh2KS5yZXBsYWNlKC9cXHgyNy9nLCBcIlxceDI3XFxcXFxceDI3XFx4MjdcIikgKyBcIlxceDI3XCJcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkKSkge1xuICAgIGlmICghL15bQS1aYS16X11bQS1aYS16MC05X10qJC8udGVzdChrKSkgY29udGludWVcbiAgICAvLyBkb3RlbnYuY29uZmlnKCkgc2VtYW50aWNzOiB0aGUgcHJvY2VzcyBlbnZpcm9ubWVudCB3aW5zLCBhbmQgYW4gZW1wdHlcbiAgICAvLyB2YWx1ZSBuZXZlciBtYXNrcyBvbmUgYmFrZWQgaW50byB0aGUgaW1hZ2UgKEVUSE9SQV9CVUlMRF8qIGV0Yy4pLlxuICAgIGlmIChwcm9jZXNzLmVudltrXSAhPT0gdW5kZWZpbmVkICYmICh2ID09PSBcIlwiIHx8IHByb2Nlc3MuZW52W2tdICE9PSBcIlwiKSkgY29udGludWVcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcImV4cG9ydCBcIiArIGsgKyBcIj1cIiArIHEodikgKyBcIlxcblwiKVxuICB9XG4nIFwiJEVOVl9GSUxFXCIpXCJcbmV2YWwgXCIkZXhwb3J0c1wiXG5cbmlmIFsgXCIkezE6LX1cIiA9IFwiaW5pdFwiIF07IHRoZW5cbiAgc2hpZnRcbiAgZXhlYyBiYXNoIC9ldGhvcmEvc2NyaXB0cy9pbml0LnNoIFwiJEBcIlxuZmlcbmlmIFsgXCIkezE6LX1cIiA9IFwidmVyaWZ5XCIgXTsgdGhlblxuICBzaGlmdFxuICBleGVjIG5vZGUgL2V0aG9yYS9zY3JpcHRzL3ZlcmlmeS5qcyBcIiRAXCJcbmZpXG5leGVjIG5vZGUgL2FwcC9kaXN0L3N0YXJ0LmpzIFwiJEBcIlxuJycnXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3NjcmlwdHMvaW5pdC5zaFwiXG5jb250ZW50ID0gJycnXG4jIS9iaW4vYmFzaFxuIyBpbml0LnNoIC0gdGhlIGBpbml0YCBzZXJ2aWNlIG9mIHRoZSBjb21wb3NlIGJ1bmRsZTogdGhlIGZpcnN0LWJvb3Qgc3RlcHNcbiMgdGhlIGhvc3QgaW5zdGFsbGVyIHJ1bnMgaW4gZGVwbG95L3NjcmlwdHMvaW5pdC1zZXJ2aWNlcy5zaCBhbmRcbiMgcnVuLW1pZ3JhdGlvbnMuc2gsIHRocm91Z2ggdGhlIEFQSSBpbWFnZSdzIHNjcmlwdCBtb2RlLlxuI1xuIyBSdW5zIG9uIGV2ZXJ5IGBkb2NrZXIgY29tcG9zZSB1cGAgYWZ0ZXIgdGhlIEFQSSBpcyBoZWFsdGh5LCBhbmQgZXZlcnkgc3RlcFxuIyBpcyBpZGVtcG90ZW50LCBzbyBhIHNlY29uZCBydW4gY2hhbmdlcyBub3RoaW5nOlxuIyAgIDEuIGJhc2UgYXBwICsgcGxhdGZvcm0gYWRtaW4gICAgICAgIHNjcmlwdHMvaW5pdEV0aG9yYUFwcC5qcyAoZXhpdHMgMCB3aGVuIHByZXNlbnQpXG4jICAgMi4gZWphYmJlcmQgYWNjb3VudHMgb2YgdGhlIGJhc2UgICAgc2NyaXB0cy9kZXBsb3kveG1wcC1hcHAtbG9va3VwLmpzLCB0aGVuXG4jICAgICAgYXBwIG93bmVyIGFuZCBzeXN0ZW0gYWNjb3VudCAgICAgcmVnaXN0ZXIgLyBjaGFuZ2VfcGFzc3dvcmQgb3ZlciBlamFiYmVyZCdzIEhUVFAgQVBJXG4jICAgMy4gZGF0YSBtaWdyYXRpb25zICAgICAgICAgICAgICAgICAgc2NyaXB0cy9taWdyYXRlU291cmNlQWdlbnRJZC5qcyAocmUtcnVubmFibGUgYnkgZGVzaWduKVxuIyAgIDQuIHRyYW5zbGF0aW9uIHNlcnZlciBsYW5ndWFnZXMgICAgIHNyYy91dGlscy9zY3JpcHRzL3N5bmNUcmFuc2xhdGVMYW5ndWFnZXMuanNcbiNcbiMgVGhlIGVudmlyb25tZW50IGlzIGJhY2tlbmQuZW52LCBsb2FkZWQgYnkgYXBpLWVudHJ5cG9pbnQuc2guIFRoZSBlamFiYmVyZFxuIyBhZG1pbiBhY2NvdW50IGl0c2VsZiBpcyBjcmVhdGVkIGJ5IHRoZSB4bXBwIGNvbnRhaW5lciAoeG1wcC1zdGFydC5zaCkuXG5zZXQgLXVvIHBpcGVmYWlsXG5cbmxvZygpICB7IGVjaG8gXCJbaW5pdF0gJCpcIjsgfVxud2FybigpIHsgZWNobyBcIltpbml0XSBXQVJOOiAkKlwiID4mMjsgfVxuZGllKCkgIHsgZWNobyBcIltpbml0XSBFUlJPUjogJCpcIiA+JjI7IGV4aXQgMTsgfVxuXG5zY3JpcHQoKSB7IE5PREVfTk9fV0FSTklOR1M9MSBOT0RFX09QVElPTlM9XCItLW5vLWRlcHJlY2F0aW9uXCIgbm9kZSAvYXBwL2Rpc3Qvc3RhcnQuanMgc2NyaXB0IFwiJEBcIjsgfVxuXG46IFwiJHtNT05HT19VUkk6P01PTkdPX1VSSSBtaXNzaW5nIGZyb20gYmFja2VuZC5lbnZ9XCJcbjogXCIke1hNUFBfSE9TVDo/WE1QUF9IT1NUIG1pc3NpbmcgZnJvbSBiYWNrZW5kLmVudn1cIlxuOiBcIiR7WE1QUF9QQVNTOj9YTVBQX1BBU1MgbWlzc2luZyBmcm9tIGJhY2tlbmQuZW52fVwiXG5YTVBQX0FQST1cIiR7WE1QUF9QQVRIOi1odHRwOi8veG1wcDo1MjgwL2FwaX1cIlxuQVBJX1VSTD1cIiR7QVBJX0lOVEVSTkFMX1VSTDotaHR0cDovL2FwaTo4MDgwfVwiXG5cbiMgaW5pdEV0aG9yYUFwcC5qcyByZWFkcyB0aGVzZSBuYW1lcyAoaW5pdC1zZXJ2aWNlcy5zaCBleHBvcnRzIHRoZSBzYW1lKS5cbmV4cG9ydCBQTEFURk9STV9BQ0NPVU5UX0VNQUlMPVwiJHtQTEFURk9STV9BQ0NPVU5UX0VNQUlMOj99XCJcbmV4cG9ydCBCQVNFX0FQUF9PV05FUl9FTUFJTD1cIiR7QkFTRV9BUFBfT1dORVJfRU1BSUw6LSRQTEFURk9STV9BQ0NPVU5UX0VNQUlMfVwiXG5leHBvcnQgQkFTRV9BUFBfT1dORVJfUEFTU1dPUkQ9XCIke0JBU0VfQVBQX09XTkVSX1BBU1NXT1JEOi0kUExBVEZPUk1fQUNDT1VOVF9QQVNTV09SRH1cIlxuZXhwb3J0IEpXVF9TRUNSRVQ9XCIke1NFQ1JFVF9LRVk6LX1cIlxuXG4jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDEuIGJhc2UgYXBwIC0tXG5sb2cgXCJiYXNlIGFwcCAnJHtCQVNFX0FQUF9ET01BSU5fTkFNRTotfScgYW5kIHBsYXRmb3JtIGFkbWluICR7UExBVEZPUk1fQUNDT1VOVF9FTUFJTH1cIlxuc2NyaXB0IHNjcmlwdHMvaW5pdEV0aG9yYUFwcC5qcyB8fCBkaWUgXCJpbml0RXRob3JhQXBwLmpzIGZhaWxlZCAoZXhpdCAkPylcIlxuXG4jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAyLiB4bXBwIGFjY291bnRzIC0tXG4jIGVqYWJiZXJkJ3MgSFRUUCBBUEksIGF1dGhlbnRpY2F0ZWQgYXMgYWRtaW5APHhtcHAgaG9zdD4gKHRoZSBhY2NvdW50IHRoZVxuIyB4bXBwIGNvbnRhaW5lciByZWdpc3RlcnMgb24gc3RhcnQgYW5kIHRoZSBiYWNrZW5kIHVzZXMgdGhlIHNhbWUgd2F5KS5cbnhtcHBfYXBpKCkgeyAjIHhtcHBfYXBpIDxjb21tYW5kPiA8anNvbj5cbiAgY3VybCAtc1MgLS1tYXgtdGltZSAxMCAtdSBcImFkbWluQCR7WE1QUF9IT1NUfToke1hNUFBfUEFTU31cIiBcXFxuICAgIC1IICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIC1YIFBPU1QgLWQgXCIkMlwiIFwiJFhNUFBfQVBJLyQxXCJcbn1cbmpzb25fc3RyKCkgeyBub2RlIC1lICdwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShwcm9jZXNzLmFyZ3ZbMV0pKScgXCIkMVwiOyB9XG5cbmVuc3VyZV94bXBwX2FjY291bnQoKSB7ICMgZW5zdXJlX3htcHBfYWNjb3VudCA8bG9jYWxwYXJ0IG9yIGppZD4gPHBhc3N3b3JkPiA8bGFiZWw+XG4gIGxvY2FsIHVzZXI9XCIkezElJUAqfVwiIHBhc3M9XCIkMlwiIGxhYmVsPVwiJDNcIiB1IHAgaCBvdXRcbiAgWyAtbiBcIiR1c2VyXCIgXSAmJiBbIC1uIFwiJHBhc3NcIiBdIHx8IHsgd2FybiBcIm5vIFhNUFAgY3JlZGVudGlhbHMgZm9yIHRoZSAkbGFiZWw7IHNraXBwZWRcIjsgcmV0dXJuIDA7IH1cbiAgdT1cIiQoanNvbl9zdHIgXCIkdXNlclwiKVwiOyBwPVwiJChqc29uX3N0ciBcIiRwYXNzXCIpXCI7IGg9XCIkKGpzb25fc3RyIFwiJFhNUFBfSE9TVFwiKVwiXG4gIG91dD1cIiQoeG1wcF9hcGkgY2hlY2tfYWNjb3VudCBcIntcXFwidXNlclxcXCI6JHUsXFxcImhvc3RcXFwiOiRofVwiKVwiXG4gIGlmIFsgXCIkb3V0XCIgPSBcIjBcIiBdOyB0aGVuXG4gICAgb3V0PVwiJCh4bXBwX2FwaSBjaGFuZ2VfcGFzc3dvcmQgXCJ7XFxcInVzZXJcXFwiOiR1LFxcXCJob3N0XFxcIjokaCxcXFwibmV3cGFzc1xcXCI6JHB9XCIpXCJcbiAgICBbIFwiJG91dFwiID0gXCIwXCIgXSAmJiB7IGxvZyBcInhtcHAgYWNjb3VudCBvZiB0aGUgJGxhYmVsIHByZXNlbnQgKHBhc3N3b3JkIGVuc3VyZWQpXCI7IHJldHVybiAwOyB9XG4gIGVsc2VcbiAgICBvdXQ9XCIkKHhtcHBfYXBpIHJlZ2lzdGVyIFwie1xcXCJ1c2VyXFxcIjokdSxcXFwiaG9zdFxcXCI6JGgsXFxcInBhc3N3b3JkXFxcIjokcH1cIilcIlxuICAgIGNhc2UgXCIkb3V0XCIgaW4gKnN1Y2Nlc3NmdWxseSp8KnJlZ2lzdGVyZWQqKSBsb2cgXCJ4bXBwIGFjY291bnQgb2YgdGhlICRsYWJlbCBjcmVhdGVkXCI7IHJldHVybiAwIDs7IGVzYWNcbiAgZmlcbiAgd2FybiBcInhtcHAgYWNjb3VudCBvZiB0aGUgJGxhYmVsOiB1bmV4cGVjdGVkIGFuc3dlciBmcm9tIGVqYWJiZXJkOiAkKHByaW50ZiAnJXMnIFwiJG91dFwiIHwgaGVhZCAtYyAyMDApXCJcbiAgcmV0dXJuIDFcbn1cblxuIyBUaGUgYWRtaW4gYWNjb3VudCBjYW4gbGFnIHRoZSB4bXBwIGhlYWx0aGNoZWNrIGJ5IGEgZmV3IHNlY29uZHMuXG5mb3IgaSBpbiAkKHNlcSAxIDYwKTsgZG9cbiAgWyBcIiQoeG1wcF9hcGkgY2hlY2tfYWNjb3VudCBcIntcXFwidXNlclxcXCI6XFxcImFkbWluXFxcIixcXFwiaG9zdFxcXCI6JChqc29uX3N0ciBcIiRYTVBQX0hPU1RcIil9XCIgMj4vZGV2L251bGwpXCIgPSBcIjBcIiBdICYmIGJyZWFrXG4gIFsgXCIkaVwiID0gNjAgXSAmJiBkaWUgXCJlamFiYmVyZCBIVFRQIEFQSSBhdCAkWE1QUF9BUEkgZG9lcyBub3QgYWNjZXB0IGFkbWluQCRYTVBQX0hPU1QgKHNlZTogZG9ja2VyIGNvbXBvc2UgbG9ncyB4bXBwKVwiXG4gIHNsZWVwIDJcbmRvbmVcblxubG9va3VwX2Vycj1cIiQobWt0ZW1wKVwiXG5sb29rdXA9XCIkKHNjcmlwdCBzY3JpcHRzL2RlcGxveS94bXBwLWFwcC1sb29rdXAuanMgXCIkTU9OR09fVVJJXCIgXCIke0JBU0VfQVBQX0RPTUFJTl9OQU1FOi19XCIgXCIkUExBVEZPUk1fQUNDT1VOVF9FTUFJTFwiIDI+XCIkbG9va3VwX2VyclwiKVwiIFxcXG4gIHx8IGRpZSBcInhtcHAtYXBwLWxvb2t1cC5qcyBmYWlsZWQ6ICQodGFpbCAtbiA1IFwiJGxvb2t1cF9lcnJcIilcIlxucm0gLWYgXCIkbG9va3VwX2VyclwiXG5maWVsZCgpIHsgcHJpbnRmICclc1xcbicgXCIkbG9va3VwXCIgfCBzZWQgLW4gXCJzL15FVEhPUkFfWE1QUF8kMV9CNjQ9Ly9wXCIgfCBoZWFkIC1uIDEgfCBiYXNlNjQgLWQgMj4vZGV2L251bGw7IH1cbnJjPTBcbmVuc3VyZV94bXBwX2FjY291bnQgXCIkKGZpZWxkIE9XTkVSX1VTRVJOQU1FKVwiIFwiJChmaWVsZCBPV05FUl9QQVNTV09SRClcIiBcImJhc2UgYXBwIG93bmVyXCIgfHwgcmM9MVxuZW5zdXJlX3htcHBfYWNjb3VudCBcIiQoZmllbGQgU1lTVEVNX0pJRClcIiBcIiQoZmllbGQgU1lTVEVNX1BBU1NXT1JEKVwiIFwiYmFzZSBhcHAgc3lzdGVtIGFjY291bnRcIiB8fCByYz0xXG5bIFwiJHJjXCIgPSAwIF0gfHwgZGllIFwiY291bGQgbm90IHByb3Zpc2lvbiB0aGUgYmFzZSBhcHAncyB4bXBwIGFjY291bnRzXCJcblxuIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDMuIG1pZ3JhdGlvbnMgLS1cbiMgcnVuLW1pZ3JhdGlvbnMuc2gncyBsaXN0LiBFYWNoIG9uZSBpcyBpZGVtcG90ZW50IGFuZCByZS1ydW5uYWJsZSwgc28gbm9cbiMgc3RhbXAgZmlsZXMgYXJlIGtlcHQuXG5mb3IgbSBpbiBzY3JpcHRzL21pZ3JhdGVTb3VyY2VBZ2VudElkLmpzOyBkb1xuICBsb2cgXCJtaWdyYXRpb24gJG1cIlxuICBzY3JpcHQgXCIkbVwiIDI+JjEgfCBzZWQgJ3MvXi9baW5pdF0gICAvJyB8fCB3YXJuIFwibWlncmF0aW9uICRtIGZhaWxlZCAobm9uLWZhdGFsKVwiXG5kb25lXG5cbiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA0LiB0cmFuc2xhdGUgbGFuZ3VhZ2VzIC0tXG5pZiBvdXQ9XCIkKHNjcmlwdCBzcmMvdXRpbHMvc2NyaXB0cy9zeW5jVHJhbnNsYXRlTGFuZ3VhZ2VzLmpzIFwiJHtUUkFOU0xBVEVfTEFOR1VBR0VTOi19XCIgMj4mMSlcIjsgdGhlblxuICBsb2cgXCJ0cmFuc2xhdGUgbGFuZ3VhZ2VzOiAkKHByaW50ZiAnJXMnIFwiJG91dFwiIHwgdGFpbCAtbiAxKVwiXG5lbHNlXG4gIHdhcm4gXCJ0cmFuc2xhdGUgbGFuZ3VhZ2Ugc3luYyBmYWlsZWQgKG5vbi1mYXRhbCk6ICQocHJpbnRmICclcycgXCIkb3V0XCIgfCB0ciAnXFxuJyAnICcgfCBoZWFkIC1jIDI0MClcIlxuZmlcblxuIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkb25lIC0tXG5pZiBjdXJsIC1mc1MgLS1tYXgtdGltZSA1IFwiJEFQSV9VUkwvdjEvYXBwcy9nZXQtY29uZmlnP2RvbWFpbk5hbWU9JHtCQVNFX0FQUF9ET01BSU5fTkFNRTotfVwiID4vZGV2L251bGwgMj4mMTsgdGhlblxuICBsb2cgXCJiYXNlIGFwcCBjb25maWcgc2VydmVkIGJ5IHRoZSBBUElcIlxuZWxzZVxuICB3YXJuIFwiR0VUIC92MS9hcHBzL2dldC1jb25maWc/ZG9tYWluTmFtZT0ke0JBU0VfQVBQX0RPTUFJTl9OQU1FOi19IGRpZCBub3QgYW5zd2VyIHlldFwiXG5maVxubG9nIFwiZG9uZS4gV2ViIGFwcDogJHtERUZBVUxUX0FQUF9VUkw6LWh0dHBzOi8vYXBwLjxyb290Pn0gIGFkbWluOiAke1BMQVRGT1JNX0FDQ09VTlRfRU1BSUx9XCJcbicnJ1xuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9zY3JpcHRzL3ZlcmlmeS5qc1wiXG5jb250ZW50ID0gJycnXG4vLyB2ZXJpZnkuanMgLSBlbmQtdG8tZW5kIGNoZWNrIG9mIGEgcnVubmluZyBjb21wb3NlIGJ1bmRsZSwgdGhyb3VnaCB0aGVcbi8vIHB1YmxpYyBVUkxzICh0aGUgc2FtZSBwYXRoIGEgYnJvd3NlciBvciBTREsgdGFrZXMpOlxuLy9cbi8vICAgZG9ja2VyIGNvbXBvc2UgLS1wcm9maWxlIHZlcmlmeSBydW4gLS1ybSB2ZXJpZnlcbi8vXG4vLyAxLiBodHRwczovL2FwcC4sIGh0dHBzOi8vYXBpLi9hcGktZG9jcy8sIGh0dHBzOi8vZmlsZXMuIGFuc3dlciAyMDAgd2l0aCBhXG4vLyAgICBjZXJ0aWZpY2F0ZSBOb2RlIHRydXN0cyAodGhlIHN5c3RlbSBDQSBzdG9yZTsgbm8gLS1pbnNlY3VyZSkuXG4vLyAyLiBUaGUgcGxhdGZvcm0gYWRtaW4gbG9ncyBpbiAoUExBVEZPUk1fQUNDT1VOVF9FTUFJTCAvIF9QQVNTV09SRCBmcm9tXG4vLyAgICBiYWNrZW5kLmVudiwgb3IgVkVSSUZZX0VNQUlMIC8gVkVSSUZZX1BBU1NXT1JEKSBhbmQgdGhlIGxpY2VuY2Ugc3RhdGVcbi8vICAgIGlzIHJlYWQuXG4vLyAzLiBBIGNoYXQgcm9vbSBpcyBjcmVhdGVkLCBqb2luZWQgb3ZlciB3c3M6Ly94bXBwLjxyb290Pi93cyB3aXRoIHRoZVxuLy8gICAgbG9naW4ncyBYTVBQIEpXVCwgYW5kIGEgbWVzc2FnZSBzZW50IHRvIGl0IGNvbWVzIGJhY2sgZnJvbSB0aGUgcm9vbS5cbi8vIDQuIEEgZmlsZSBpcyB1cGxvYWRlZCBhbmQgcmVhZCBiYWNrIHRocm91Z2ggaHR0cHM6Ly9maWxlcy48cm9vdD4sIHRoZW5cbi8vICAgIGRlbGV0ZWQuXG4vL1xuLy8gRXhpdHMgbm9uLXplcm8gb24gdGhlIGZpcnN0IGZhaWx1cmUuIFRoZSByb29tIGl0IGNyZWF0ZXMgaXMgbGVmdCBpbiBwbGFjZVxuLy8gKG5hbWVkIFwidmVyaWZ5IDx0aW1lc3RhbXA+XCIpLlxuY29uc3QgeyBjbGllbnQsIHhtbCB9ID0gcmVxdWlyZSgnL2FwcC9ub2RlX21vZHVsZXMvQHhtcHAvY2xpZW50JylcblxuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnZcbmNvbnN0IGhvc3RPZiA9ICh1cmwsIGZhbGxiYWNrKSA9PiB7IHRyeSB7IHJldHVybiBuZXcgVVJMKHVybCkuaG9zdCB9IGNhdGNoIHsgcmV0dXJuIGZhbGxiYWNrIH0gfVxuY29uc3QgV0VCID0gZW52LlZFUklGWV9XRUJfRE9NQUlOIHx8IGhvc3RPZihlbnYuREVGQVVMVF9BUFBfVVJMLCAnJylcbmNvbnN0IEFQSSA9IGVudi5WRVJJRllfQVBJX0RPTUFJTiB8fCBob3N0T2YoKGVudi5PQVVUSF9JU1NVRVIgfHwgJycpLCAnJykgfHwgKGVudi5FVEhPUkFfTElDRU5TRURfSE9TVFMgfHwgJycpLnNwbGl0KCcsJylbMF1cbmNvbnN0IEZJTEVTID0gZW52LlZFUklGWV9GSUxFU19ET01BSU4gfHwgaG9zdE9mKGVudi5NSU5JT19VUkwsICcnKVxuY29uc3QgWE1QUCA9IGVudi5YTVBQX0hPU1RcbmNvbnN0IEVNQUlMID0gZW52LlZFUklGWV9FTUFJTCB8fCBlbnYuUExBVEZPUk1fQUNDT1VOVF9FTUFJTFxuY29uc3QgUEFTU1dPUkQgPSBlbnYuVkVSSUZZX1BBU1NXT1JEIHx8IGVudi5QTEFURk9STV9BQ0NPVU5UX1BBU1NXT1JEXG5jb25zdCBTTFVHID0gZW52LkJBU0VfQVBQX0RPTUFJTl9OQU1FXG5cbmxldCBmYWlsdXJlcyA9IDBcbmNvbnN0IG9rID0gKG1zZykgPT4gY29uc29sZS5sb2coYCAgb2sgICAgJHttc2d9YClcbmNvbnN0IGZhaWwgPSAobXNnKSA9PiB7IGZhaWx1cmVzKys7IGNvbnNvbGUubG9nKGAgIEZBSUwgICR7bXNnfWApIH1cbmNvbnN0IGRpZSA9IChtc2cpID0+IHsgZmFpbChtc2cpOyBzdW1tYXJ5KCk7IH1cbmZ1bmN0aW9uIHN1bW1hcnkoKSB7XG4gIGNvbnNvbGUubG9nKGZhaWx1cmVzID8gYFxcbiR7ZmFpbHVyZXN9IGNoZWNrKHMpIGZhaWxlZGAgOiAnXFxuYWxsIGNoZWNrcyBwYXNzZWQnKVxuICBwcm9jZXNzLmV4aXQoZmFpbHVyZXMgPyAxIDogMClcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHR0cCh1cmwsIG9wdHMgPSB7fSkge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgcmVkaXJlY3Q6ICdtYW51YWwnLCAuLi5vcHRzIH0pXG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpXG4gIGxldCBqc29uID0gbnVsbFxuICB0cnkgeyBqc29uID0gSlNPTi5wYXJzZSh0ZXh0KSB9IGNhdGNoIHsgLyogbm90IEpTT04gKi8gfVxuICByZXR1cm4geyBzdGF0dXM6IHJlcy5zdGF0dXMsIHRleHQsIGpzb24sIGhlYWRlcnM6IHJlcy5oZWFkZXJzIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhwZWN0MjAwKGxhYmVsLCB1cmwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gYXdhaXQgaHR0cCh1cmwpXG4gICAgaWYgKHIuc3RhdHVzID09PSAyMDApIG9rKGAke2xhYmVsfSAke3VybH1gKVxuICAgIGVsc2UgZmFpbChgJHtsYWJlbH0gJHt1cmx9IC0+IEhUVFAgJHtyLnN0YXR1c31gKVxuICB9IGNhdGNoIChlKSB7XG4gICAgZmFpbChgJHtsYWJlbH0gJHt1cmx9IC0+ICR7ZS5jYXVzZSA/IGUuY2F1c2UuY29kZSB8fCBlLmNhdXNlLm1lc3NhZ2UgOiBlLm1lc3NhZ2V9YClcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB4bXBwUm91bmRUcmlwKHsgdXNlcm5hbWUsIHRva2VuLCByb29tSmlkIH0pIHtcbiAgLy8gUm9vbXMgYWNjZXB0IGEgbWVtYmVyIHVuZGVyIGl0cyByZWdpc3RlcmVkIG5pY2ssIHRoZSBYTVBQIGxvY2FscGFydCAoYXNcbiAgLy8gdGhlIHdlYiBjbGllbnQgam9pbnMpLlxuICBjb25zdCBuaWNrID0gdXNlcm5hbWVcbiAgY29uc3QgYm9keSA9IGB2ZXJpZnkgbWVzc2FnZSAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1gXG4gIGNvbnN0IHhtcHAgPSBjbGllbnQoeyBzZXJ2aWNlOiBgd3NzOi8vJHtYTVBQfS93c2AsIGRvbWFpbjogWE1QUCwgdXNlcm5hbWUsIHBhc3N3b3JkOiB0b2tlbiwgcmVzb3VyY2U6IGB2ZXJpZnktJHtEYXRlLm5vdygpfWAgfSlcbiAgeG1wcC5vbignZXJyb3InLCAoKSA9PiB7fSlcbiAgY29uc3Qgd2FpdEZvciA9ICh3aGF0LCBtYXRjaCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHsgeG1wcC5yZW1vdmVMaXN0ZW5lcignc3RhbnphJywgb24pOyByZWplY3QobmV3IEVycm9yKGAke3doYXR9OiBubyBhbnN3ZXIgd2l0aGluIDIwIHNgKSkgfSwgMjAwMDApXG4gICAgZnVuY3Rpb24gb24oc3QpIHtcbiAgICAgIGNvbnN0IGVyciA9IHN0LmF0dHJzLnR5cGUgPT09ICdlcnJvcicgJiYgc3QuYXR0cnMuZnJvbSAmJiBzdC5hdHRycy5mcm9tLnN0YXJ0c1dpdGgocm9vbUppZCkgJiYgc3QuZ2V0Q2hpbGQoJ2Vycm9yJylcbiAgICAgIGlmIChlcnIpIHsgY2xlYXJUaW1lb3V0KHQpOyB4bXBwLnJlbW92ZUxpc3RlbmVyKCdzdGFuemEnLCBvbik7IHJlamVjdChuZXcgRXJyb3IoYCR7d2hhdH06ICR7ZXJyLnRvU3RyaW5nKCkuc2xpY2UoMCwgMzAwKX1gKSk7IHJldHVybiB9XG4gICAgICBpZiAobWF0Y2goc3QpKSB7IGNsZWFyVGltZW91dCh0KTsgeG1wcC5yZW1vdmVMaXN0ZW5lcignc3RhbnphJywgb24pOyByZXNvbHZlKHN0KSB9XG4gICAgfVxuICAgIHhtcHAub24oJ3N0YW56YScsIG9uKVxuICB9KVxuICBhd2FpdCB4bXBwLnN0YXJ0KClcbiAgb2soYHhtcHAgbG9naW4gb3ZlciB3c3M6Ly8ke1hNUFB9L3dzIGFzICR7bmlja31gKVxuICB0cnkge1xuICAgIC8vIEpvaW4sIGFuZCB3YWl0IGZvciBvdXIgb3duIHByZXNlbmNlIGJhY2sgKE1VQyBzdGF0dXMgMTEwKS5cbiAgICBjb25zdCBqb2luZWQgPSB3YWl0Rm9yKGBqb2luICR7cm9vbUppZH1gLCAoc3QpID0+IHN0LmlzKCdwcmVzZW5jZScpICYmIHN0LmF0dHJzLmZyb20gPT09IGAke3Jvb21KaWR9LyR7bmlja31gKVxuICAgIGF3YWl0IHhtcHAuc2VuZCh4bWwoJ3ByZXNlbmNlJywgeyB0bzogYCR7cm9vbUppZH0vJHtuaWNrfWAgfSwgeG1sKCd4JywgeyB4bWxuczogJ2h0dHA6Ly9qYWJiZXIub3JnL3Byb3RvY29sL211YycgfSwgeG1sKCdoaXN0b3J5JywgeyBtYXhzdGFuemFzOiAnMCcgfSkpKSlcbiAgICBhd2FpdCBqb2luZWRcbiAgICBjb25zdCBlY2hvZWQgPSB3YWl0Rm9yKCdtZXNzYWdlJywgKHN0KSA9PiBzdC5pcygnbWVzc2FnZScpICYmIHN0LmF0dHJzLnR5cGUgPT09ICdncm91cGNoYXQnICYmIHN0LmdldENoaWxkVGV4dCgnYm9keScpID09PSBib2R5KVxuICAgIGF3YWl0IHhtcHAuc2VuZCh4bWwoJ21lc3NhZ2UnLCB7IHRvOiByb29tSmlkLCB0eXBlOiAnZ3JvdXBjaGF0JywgaWQ6IGB2ZXJpZnktJHtEYXRlLm5vdygpfWAgfSwgeG1sKCdib2R5Jywge30sIGJvZHkpKSlcbiAgICBhd2FpdCBlY2hvZWRcbiAgICBvayhgam9pbmVkICR7cm9vbUppZH0sIHNlbnQgYSBtZXNzYWdlIGFuZCByZWNlaXZlZCBpdCBiYWNrYClcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB4bXBwLnN0b3AoKS5jYXRjaCgoKSA9PiB7fSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zb2xlLmxvZyhgRXRob3JhIENvcmUgY29tcG9zZSBidW5kbGU6IHZlcmlmeSAod2ViPSR7V0VCfSBhcGk9JHtBUEl9IHhtcHA9JHtYTVBQfSBmaWxlcz0ke0ZJTEVTfSlcXG5gKVxuICBpZiAoIVdFQiB8fCAhQVBJIHx8ICFYTVBQIHx8ICFGSUxFUyB8fCAhRU1BSUwgfHwgIVBBU1NXT1JEKSBkaWUoJ2NvdWxkIG5vdCBkZXJpdmUgdGhlIGhvc3RzIG9yIGFkbWluIGNyZWRlbnRpYWxzIGZyb20gYmFja2VuZC5lbnYnKVxuXG4gIC8vIDEuIHB1YmxpYyBlbmRwb2ludHMgYW5kIGNlcnRpZmljYXRlc1xuICBhd2FpdCBleHBlY3QyMDAoJ3dlYiBhcHAnLCBgaHR0cHM6Ly8ke1dFQn0vYClcbiAgYXdhaXQgZXhwZWN0MjAwKCdBUEkgZG9jcycsIGBodHRwczovLyR7QVBJfS9hcGktZG9jcy9gKVxuICBhd2FpdCBleHBlY3QyMDAoJ0FQSSBwaW5nJywgYGh0dHBzOi8vJHtBUEl9L3YxL3BpbmdgKVxuICBhd2FpdCBleHBlY3QyMDAoJ2ZpbGUgc3RvcmFnZScsIGBodHRwczovLyR7RklMRVN9L21pbmlvL2hlYWx0aC9saXZlYClcbiAgaWYgKGZhaWx1cmVzKSBzdW1tYXJ5KClcblxuICAvLyAyLiBsb2dpbiArIGxpY2VuY2VcbiAgY29uc3QgY2ZnID0gYXdhaXQgaHR0cChgaHR0cHM6Ly8ke0FQSX0vdjEvYXBwcy9nZXQtY29uZmlnP2RvbWFpbk5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoU0xVRyl9YClcbiAgY29uc3QgYXBwVG9rZW4gPSBjZmcuanNvbiAmJiBjZmcuanNvbi5yZXN1bHQgJiYgY2ZnLmpzb24ucmVzdWx0LmFwcFRva2VuXG4gIGlmICghYXBwVG9rZW4pIGRpZShgZ2V0LWNvbmZpZyBmb3IgYmFzZSBhcHAgXCIke1NMVUd9XCIgcmV0dXJuZWQgbm8gYXBwVG9rZW4gKEhUVFAgJHtjZmcuc3RhdHVzfSlgKVxuICBjb25zdCBsb2dpbiA9IGF3YWl0IGh0dHAoYGh0dHBzOi8vJHtBUEl9L3YyL3VzZXJzL2xvZ2luLXdpdGgtZW1haWxgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBhcHBUb2tlbiwgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWw6IEVNQUlMLCBwYXNzd29yZDogUEFTU1dPUkQgfSksXG4gIH0pXG4gIGlmIChsb2dpbi5zdGF0dXMgIT09IDIwMCB8fCAhbG9naW4uanNvbiB8fCAhbG9naW4uanNvbi50b2tlbikgZGllKGBhZG1pbiBsb2dpbiBhcyAke0VNQUlMfSAtPiBIVFRQICR7bG9naW4uc3RhdHVzfSAke2xvZ2luLnRleHQuc2xpY2UoMCwgMjAwKX1gKVxuICAvLyB1c2VyLnhtcHBQYXNzd29yZCBpbiBhIGxvZ2luIHJlc3BvbnNlIGlzIHRoZSBzaG9ydC1saXZlZCBYTVBQIEpXVFxuICAvLyAoaGVscGVycy9zYW5pdGl6ZVVzZXIudHMpLCB0aGUgcGFzc3dvcmQgdGhlIHdlYiBjbGllbnQgc2lnbnMgaW4gd2l0aC5cbiAgY29uc3QgeyB0b2tlbiwgdXNlciB9ID0gbG9naW4uanNvblxuICBvayhgYWRtaW4gbG9naW4gYXMgJHtFTUFJTH1gKVxuICBjb25zdCBhdXRoID0geyBBdXRob3JpemF0aW9uOiB0b2tlbiB9XG5cbiAgY29uc3QgbGljID0gYXdhaXQgaHR0cChgaHR0cHM6Ly8ke0FQSX0vdjIvbGljZW5zZWAsIHsgaGVhZGVyczogYXV0aCB9KVxuICBjb25zdCBsID0gbGljLmpzb24gJiYgbGljLmpzb24ubGljZW5zZVxuICBpZiAobGljLnN0YXR1cyA9PT0gMjAwICYmIGwpIHtcbiAgICBjb25zdCBkZXNjID0gW2wuZWRpdGlvbiwgbC50aWVyLCBsLnN0YXRlLCBsLnJlZ2lzdGVyZWQgPT09IGZhbHNlID8gJ3VucmVnaXN0ZXJlZCcgOiBsLnJlZ2lzdGVyZWQgPyAncmVnaXN0ZXJlZCcgOiAnJ10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJylcbiAgICBvayhgbGljZW5jZTogJHtkZXNjIHx8IEpTT04uc3RyaW5naWZ5KGwpLnNsaWNlKDAsIDE2MCl9YClcbiAgfSBlbHNlIGZhaWwoYEdFVCAvdjIvbGljZW5zZSAtPiBIVFRQICR7bGljLnN0YXR1c31gKVxuXG4gIC8vIDMuIGNoYXQgcm9vbSArIG1lc3NhZ2Ugb3ZlciBYTVBQXG4gIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBodHRwKGBodHRwczovLyR7QVBJfS92Mi9jaGF0c2AsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7IC4uLmF1dGgsICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHRpdGxlOiBgdmVyaWZ5ICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWAsIGRlc2NyaXB0aW9uOiAnY3JlYXRlZCBieSB0aGUgY29tcG9zZSBidW5kbGUgdmVyaWZ5IGNoZWNrJywgdHlwZTogJ3B1YmxpYycgfSksXG4gIH0pXG4gIGNvbnN0IHJvb20gPSBjcmVhdGVkLmpzb24gJiYgKGNyZWF0ZWQuanNvbi5yZXN1bHQgfHwgY3JlYXRlZC5qc29uKVxuICBjb25zdCBsb2NhbHBhcnQgPSByb29tICYmIChyb29tLm5hbWUgfHwgcm9vbS5yb29tSmlkIHx8IHJvb20uamlkIHx8IHJvb20uY2hhdElkKVxuICBpZiAoIShjcmVhdGVkLnN0YXR1cyA9PT0gMjAwIHx8IGNyZWF0ZWQuc3RhdHVzID09PSAyMDEpIHx8ICFsb2NhbHBhcnQpIGRpZShgY3JlYXRlIGNoYXQgcm9vbSAtPiBIVFRQICR7Y3JlYXRlZC5zdGF0dXN9ICR7Y3JlYXRlZC50ZXh0LnNsaWNlKDAsIDIwMCl9YClcbiAgY29uc3Qgcm9vbUppZCA9IFN0cmluZyhsb2NhbHBhcnQpLmluY2x1ZGVzKCdAJykgPyBTdHJpbmcobG9jYWxwYXJ0KSA6IGAke2xvY2FscGFydH1AY29uZmVyZW5jZS4ke1hNUFB9YFxuICBvayhgY2hhdCByb29tIGNyZWF0ZWQ6ICR7cm9vbUppZH1gKVxuICB0cnkge1xuICAgIGF3YWl0IHhtcHBSb3VuZFRyaXAoeyB1c2VybmFtZTogdXNlci54bXBwVXNlcm5hbWUsIHRva2VuOiB1c2VyLnhtcHBQYXNzd29yZCwgcm9vbUppZCB9KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZmFpbChgeG1wcDogJHtlLm1lc3NhZ2V9YClcbiAgfVxuXG4gIC8vIDQuIGZpbGUgdXBsb2FkIHRocm91Z2ggZmlsZXMuPHJvb3Q+XG4gIGNvbnN0IHBheWxvYWQgPSBgdmVyaWZ5ICR7RGF0ZS5ub3coKX1cXG5gXG4gIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBmb3JtLmFwcGVuZCgnZmlsZXMnLCBuZXcgQmxvYihbcGF5bG9hZF0sIHsgdHlwZTogJ3RleHQvcGxhaW4nIH0pLCAndmVyaWZ5LnR4dCcpXG4gIGNvbnN0IHVwID0gYXdhaXQgaHR0cChgaHR0cHM6Ly8ke0FQSX0vdjIvZmlsZXNgLCB7IG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiBhdXRoLCBib2R5OiBmb3JtIH0pXG4gIGNvbnN0IGZpbGUgPSB1cC5qc29uICYmICgodXAuanNvbi5yZXN1bHRzICYmIHVwLmpzb24ucmVzdWx0c1swXSkgfHwgKHVwLmpzb24ucmVzdWx0ICYmIHVwLmpzb24ucmVzdWx0WzBdKSB8fCB1cC5qc29uLnJlc3VsdClcbiAgY29uc3QgbG9jYXRpb24gPSBmaWxlICYmIChmaWxlLmxvY2F0aW9uIHx8IGZpbGUudXJsKVxuICBpZiAodXAuc3RhdHVzICE9PSAyMDAgJiYgdXAuc3RhdHVzICE9PSAyMDEpIGZhaWwoYGZpbGUgdXBsb2FkIC0+IEhUVFAgJHt1cC5zdGF0dXN9ICR7dXAudGV4dC5zbGljZSgwLCAyMDApfWApXG4gIGVsc2UgaWYgKCFsb2NhdGlvbikgZmFpbChgZmlsZSB1cGxvYWQgcmV0dXJuZWQgbm8gbG9jYXRpb246ICR7dXAudGV4dC5zbGljZSgwLCAyMDApfWApXG4gIGVsc2Uge1xuICAgIGNvbnN0IGhvc3QgPSBob3N0T2YobG9jYXRpb24sICcnKVxuICAgIGNvbnN0IGdvdCA9IGF3YWl0IGh0dHAobG9jYXRpb24pLmNhdGNoKChlKSA9PiAoeyBzdGF0dXM6IDAsIHRleHQ6IGUubWVzc2FnZSB9KSlcbiAgICBpZiAoaG9zdCAhPT0gRklMRVMpIGZhaWwoYHVwbG9hZGVkIGZpbGUgaXMgc2VydmVkIGZyb20gJHtob3N0fSwgZXhwZWN0ZWQgJHtGSUxFU31gKVxuICAgIGVsc2UgaWYgKGdvdC5zdGF0dXMgPT09IDIwMCAmJiBnb3QudGV4dCA9PT0gcGF5bG9hZCkgb2soYGZpbGUgdXBsb2FkZWQgYW5kIHJlYWQgYmFjayBmcm9tICR7bG9jYXRpb259YClcbiAgICBlbHNlIGZhaWwoYHVwbG9hZGVkIGZpbGUgYXQgJHtsb2NhdGlvbn0gLT4gSFRUUCAke2dvdC5zdGF0dXN9YClcbiAgICBpZiAoZmlsZS5faWQpIGF3YWl0IGh0dHAoYGh0dHBzOi8vJHtBUEl9L3YyL2ZpbGVzLyR7ZmlsZS5faWR9YCwgeyBtZXRob2Q6ICdERUxFVEUnLCBoZWFkZXJzOiBhdXRoIH0pLmNhdGNoKCgpID0+IHt9KVxuICB9XG5cbiAgc3VtbWFyeSgpXG59XG5cbm1haW4oKS5jYXRjaCgoZSkgPT4gZGllKGUuc3RhY2sgfHwgZS5tZXNzYWdlKSlcbicnJ1xuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9zY3JpcHRzL3JlbmRlci1jb25maWcuc2hcIlxuY29udGVudCA9ICcnJ1xuIyEvYmluL3NoXG4jIHJlbmRlci1jb25maWcuc2ggLSB0aGUgYGNvbmZpZ2Agc2VydmljZSBvZiB0aGUgY29tcG9zZSBidW5kbGUuXG4jXG4jIFJlbmRlcnMgZXZlcnkgY29uZmlnIGZpbGUgdGhlIHN0YWNrIHJlYWRzIGZyb20gdGhlIG9wZXJhdG9yJ3MgLmVudiwgdXNpbmdcbiMgdGhlIHNhbWUgdGVtcGxhdGVzIHRoZSBob3N0IGluc3RhbGxlciByZW5kZXJzIChkZXBsb3kvc2NyaXB0cy9zZXR1cC1lbnYuc2gsXG4jIGRlcGxveS9zY3JpcHRzL3NldHVwLWVqYWJiZXJkLWNvbmZpZy5zaCk6XG4jXG4jICAgL291dC9jb25maWcvYXBpL2JhY2tlbmQuZW52ICAgICAgICAgICAgPC0gdGVtcGxhdGVzL2JhY2tlbmQuZW52LnRlbXBsYXRlXG4jICAgL291dC9jb25maWcvZnJvbnRlbmQvZnJvbnRlbmQuZW52ICAgICAgPC0gdGVtcGxhdGVzL2Zyb250ZW5kLmVudi50ZW1wbGF0ZVxuIyAgIC9vdXQvY29uZmlnL2NlbnRyaWZ1Z28vY29uZmlnLmpzb24gICAgIDwtIHRlbXBsYXRlcy9jZW50cmlmdWdvLWNvbmZpZy5qc29uLnRlbXBsYXRlXG4jICAgL291dC9jb25maWcveG1wcC9lamFiYmVyZC55bWwsIGp3dC5rZXkgPC0gL2V0aG9yYS1kaXN0L2VqYWJiZXJkLXByb2QueW1sIChmcm9tIHRoZSB4bXBwIGltYWdlKVxuIyAgIC9vdXQvbXlzcWwtaW5pdGRiLzAxLWVqYWJiZXJkLnNxbCAgICAgIDwtIC9ldGhvcmEtZGlzdC9teXNxbDIuc3FsIChmcm9tIHRoZSB4bXBwIGltYWdlKVxuI1xuIyBJdCBydW5zIGluIHRoZSBldGhvcmEteG1wcCBpbWFnZSAoQnVzeUJveCBzaCwgc2VkLCBhd2spLCBzbyB0aGUgZWphYmJlcmRcbiMgdGVtcGxhdGUgYW5kIHNjaGVtYSBhbHdheXMgY29tZSBmcm9tIHRoZSBpbWFnZSB0aGF0IGlzIGFib3V0IHRvIHJ1bi4gSXRcbiMgcnVucyBvbiBldmVyeSBgZG9ja2VyIGNvbXBvc2UgdXBgIGFuZCByZXdyaXRlcyBldmVyeXRoaW5nLCBzbyAuZW52IGlzIHRoZVxuIyBvbmx5IHN0YXRlIGFuIG9wZXJhdG9yIGtlZXBzOyB0aGUgcmVuZGVyZWQgZmlsZXMgYXJlIGRpc3Bvc2FibGUuXG4jXG4jIERpZmZlcmVuY2VzIGZyb20gdGhlIGhvc3QgaW5zdGFsbGVyLCBhbGwgYmVjYXVzZSB0aGUgc2VydmljZXMgdGFsayBvdmVyIHRoZVxuIyBjb21wb3NlIG5ldHdvcmsgaW5zdGVhZCBvZiB0aGUgaG9zdCdzIGxvb3BiYWNrOlxuIyAgIC0gYmFja2VuZC5lbnY6IE1PTkdPX1VSSSwgQ0hBVF9EQVRBQkFTRSwgUkVESVNfSE9TVCwgTUlOSU9fSE9TVCxcbiMgICAgIE1BTV9NWVNRTF9IT1NULCBDRU5UUklGVUdPX0FQSV9VUkwgYW5kIFhNUFBfUEFUSCBwb2ludCBhdCB0aGUgY29tcG9zZVxuIyAgICAgc2VydmljZSBuYW1lcyAobW9uZ28sIHJlZGlzLCBtaW5pbywgbXlzcWwsIGNlbnRyaWZ1Z28sIHhtcHApLlxuIyAgIC0gZWphYmJlcmQueW1sOiB0aGUgdHJhY2tpbmcgLyBhdWRpdCBVUkxzIHBvaW50IGF0IGh0dHA6Ly9hcGk6ODA4MFxuIyAgICAgaW5zdGVhZCBvZiB0aGUgcHVibGljIGh0dHBzOi8vYXBpLjxyb290Piwgc28gZWphYmJlcmQgbmV2ZXIgaGFpcnBpbnNcbiMgICAgIHRocm91Z2ggdGhlIHByb3h5LlxuIyAgIC0gQlVJTERfKiBzdGF5IGVtcHR5LCBzbyB0aGUgdmVyc2lvbiBiYWtlZCBpbnRvIGVhY2ggaW1hZ2UgaXMgcmVwb3J0ZWQuXG5zZXQgLWV1XG5cblRFTVBMQVRFUz1cIiR7VEVNUExBVEVTX0RJUjotL2V0aG9yYS90ZW1wbGF0ZXN9XCJcbkRJU1Q9XCIke1hNUFBfRElTVF9ESVI6LS9ldGhvcmEtZGlzdH1cIlxuT1VUPVwiJHtDT05GSUdfT1VUX0RJUjotL291dC9jb25maWd9XCJcbk1ZU1FMX0lOSVREQj1cIiR7TVlTUUxfSU5JVERCX0RJUjotL291dC9teXNxbC1pbml0ZGJ9XCJcbiMgTnVtZXJpYyBvd25lcnMgb2YgdGhlIGNvbnN1bWVycyAodGhlIHN0b2NrIGltYWdlcycgdXNlcnMpLiBSZW5kZXJpbmcgYXNcbiMgcm9vdCwgZWFjaCBmaWxlIGlzIGhhbmRlZCB0byB0aGUgb25lIGNvbnRhaW5lciB1c2VyIHRoYXQgcmVhZHMgaXQuXG5BUElfVUlEPVwiJHtBUElfVUlEOi0xMDAwfVwiICAgICAgICAgICMgZXRob3JhLWFwaTogbm9kZVxuWE1QUF9VSUQ9XCIke1hNUFBfVUlEOi05MDAwfVwiICAgICAgICAjIGV0aG9yYS14bXBwOiBlamFiYmVyZFxuQ0VOVFJJRlVHT19VSUQ9XCIke0NFTlRSSUZVR09fVUlEOi0xMDAwfVwiXG5cbmxvZygpIHsgZWNobyBcIltjb25maWddICQqXCI7IH1cbmRpZSgpIHsgZWNobyBcIltjb25maWddIEVSUk9SOiAkKlwiID4mMjsgZXhpdCAxOyB9XG5cbiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlcXVpcmVkIC0tXG5taXNzaW5nPVwiXCJcbmZvciB2IGluIFJPT1RfRE9NQUlOIEFETUlOX0VNQUlMIEFETUlOX1BBU1NXT1JEIEpXVF9TRUNSRVQgUkVGUkVTSF9TRUNSRVQgXFxcbiAgICAgICAgIFhNUFBfU0VDUkVUIFhNUFBfSldUX1NFQ1JFVCBYTVBQX0FETUlOX1BBU1NXT1JEIE1ZU1FMX1JPT1RfUEFTU1dPUkQgXFxcbiAgICAgICAgIE1JTklPX1JPT1RfVVNFUiBNSU5JT19ST09UX1BBU1NXT1JEIElOVEVSTkFMX1JFUVVFU1RTX1NFQ1JFVCBcXFxuICAgICAgICAgQ0VOVFJJRlVHT19BUElfS0VZIENFTlRSSUZVR09fSE1BQ19TRUNSRVQgQ0VOVFJJRlVHT19BRE1JTl9QQVNTV09SRCBcXFxuICAgICAgICAgQ0VOVFJJRlVHT19BRE1JTl9TRUNSRVQ7IGRvXG4gIGV2YWwgXCJ2YWw9XFwkeyR2Oi19XCJcbiAgWyAtbiBcIiR2YWxcIiBdIHx8IG1pc3Npbmc9XCIkbWlzc2luZyAkdlwiXG5kb25lXG5bIC16IFwiJG1pc3NpbmdcIiBdIHx8IGRpZSBcIm1pc3NpbmcgaW4gLmVudjokbWlzc2luZyAocnVuIC4vY29uZmlndXJlLnNoLCBvciBjb3B5IC5lbnYuZXhhbXBsZSB0byAuZW52IGFuZCBmaWxsIGl0IGluKVwiXG5cbiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlcml2ZWQgKyBkZWZhdWx0cyAtLVxuIyBTYW1lIGRlcml2YXRpb25zIGFzIHNldHVwLnNoIC8gcmVmcmVzaC1kZXBsb3ktZW52LnNoIC8gc2V0dXAtZW52LnNoLlxuZXhwb3J0IEFQSV9ET01BSU49XCIke0FQSV9ET01BSU46LWFwaS4kUk9PVF9ET01BSU59XCJcbmV4cG9ydCBXRUJfRE9NQUlOPVwiJHtXRUJfRE9NQUlOOi1hcHAuJFJPT1RfRE9NQUlOfVwiXG5leHBvcnQgWE1QUF9ET01BSU49XCIke1hNUFBfRE9NQUlOOi14bXBwLiRST09UX0RPTUFJTn1cIlxuZXhwb3J0IEZJTEVTX0RPTUFJTj1cIiR7RklMRVNfRE9NQUlOOi1maWxlcy4kUk9PVF9ET01BSU59XCJcbmV4cG9ydCBIT1NURURfQVBQU19ST09UX0RPTUFJTj1cIiR7SE9TVEVEX0FQUFNfUk9PVF9ET01BSU46LSRST09UX0RPTUFJTn1cIlxuIyBCYXNlIGFwcCBzbHVnOiBmaXJzdCBsYWJlbCBvZiB0aGUgd2ViIGhvc3QgKGFwcC5jaGF0LmV4YW1wbGUuY29tIC0+IGFwcCkuXG5leHBvcnQgQkFTRV9BUFBfRE9NQUlOX05BTUU9XCIke0JBU0VfQVBQX0RPTUFJTl9OQU1FOi0ke1dFQl9ET01BSU4lJS4qfX1cIlxuZXhwb3J0IERPTUFJTl9OQU1FPVwiJEJBU0VfQVBQX0RPTUFJTl9OQU1FXCJcbmV4cG9ydCBCQVNFX0FQUF9ESVNQTEFZX05BTUU9XCIke0JBU0VfQVBQX0RJU1BMQVlfTkFNRTotRXRob3JhfVwiXG5leHBvcnQgQkFTRV9BUFBfT1dORVJfRU1BSUw9XCIke0JBU0VfQVBQX09XTkVSX0VNQUlMOi0kQURNSU5fRU1BSUx9XCJcbmV4cG9ydCBCQVNFX0FQUF9PV05FUl9QQVNTV09SRD1cIiR7QkFTRV9BUFBfT1dORVJfUEFTU1dPUkQ6LSRBRE1JTl9QQVNTV09SRH1cIlxuZXhwb3J0IEJBU0VfQVBQX1NUQVJUX0JBTEFOQ0U9XCIke0JBU0VfQVBQX1NUQVJUX0JBTEFOQ0U6LTEwMDAwMDB9XCJcblxuZXhwb3J0IE5PREVfRU5WPVwiJHtOT0RFX0VOVjotcHJvZHVjdGlvbn1cIlxuZXhwb3J0IEJBQ0tFTkRfUE9SVD04MDgwXG5leHBvcnQgTU9OR09fUE9SVD0yNzAxN1xuZXhwb3J0IE1PTkdPX0RCPVwiJHtNT05HT19EQjotZXRob3JhX3Byb2R9XCJcbmV4cG9ydCBSRURJU19QT1JUPTYzNzlcbmV4cG9ydCBNWVNRTF9QT1JUPTMzMDZcbmV4cG9ydCBDRU5UUklGVUdPX1BPUlQ9ODAwMFxuZXhwb3J0IFBVU0hfUE9SVD1cIiR7UFVTSF9QT1JUOi04MDk4fVwiXG5leHBvcnQgQUlfU0VSVklDRV9QT1JUPVwiJHtBSV9TRVJWSUNFX1BPUlQ6LTgwMTN9XCJcbmV4cG9ydCBET0NTX1BBUlNFX1BPUlQ9XCIke0RPQ1NfUEFSU0VfUE9SVDotODIwMX1cIlxuZXhwb3J0IE1JTklPX1NFQ1VSRV9CVUNLRVQ9XCIke01JTklPX1NFQ1VSRV9CVUNLRVQ6LXNlY3VyZS1tZWRpYX1cIlxuXG5kZWYoKSB7ICMgZGVmIE5BTUUgdmFsdWU6IGV4cG9ydCBOQU1FPXZhbHVlIHVubGVzcyBOQU1FIGlzIGFscmVhZHkgc2V0XG4gIGV2YWwgXCJbIC1uIFxcXCJcXCR7JDEreH1cXFwiIF1cIiB8fCBleHBvcnQgXCIkMT0kMlwiXG59XG4jIEV0aG9yYSBDb3JlOiB0aGUgb3B0aW9uYWwgbW9kdWxlcyBhcmUgbm90IGluIHRoaXMgYnVuZGxlIChhbiBvdmVybGF5IHRoYXRcbiMgYWRkcyBvbmUgc2V0cyBpdHMgZmxhZyBpbiAuZW52KS5cbmRlZiBCTE9DS0NIQUlOX0VOQUJMRUQgZmFsc2VcbmRlZiBBSV9TRVJWSUNFX0VOQUJMRUQgZmFsc2VcbmRlZiBET0NTX1BBUlNFX0VOQUJMRUQgZmFsc2VcbmRlZiBDUkFXTEVSX0VOQUJMRUQgZmFsc2VcbmRlZiBBSV9GRUFUVVJFX0VOQUJMRUQgZmFsc2VcbmRlZiBFTkFCTEVfU1dBR0dFUiB0cnVlXG5kZWYgRU5BQkxFX1NXQUdHRVJfSU5URVJOQUwgZmFsc2VcbmRlZiBFTUFJTF9UTERfVkFMSURBVElPTiBvZmZcbmRlZiBSQVRFX0xJTUlUX0RJU0FCTEVEIGZhbHNlXG5kZWYgUkVGUkVTSF9UT0tFTl9UVExfREFZUyA3XG5kZWYgUkVGUkVTSF9SRVVTRV9QT0xJQ1kgbG9nX29ubHlcbmRlZiBYTVBQX0pXVF9UVEwgMTBtXG5kZWYgWE1QUF9KV1RfV0lER0VUX1RUTCAxMDBkXG5kZWYgQ0VOVFJJRlVHT19FTkFCTEVEIHRydWVcbmRlZiBDRU5UUklGVUdPX1RJTUVPVVRfTVMgMjAwMFxuZGVmIFBPU1RNQVJLX0VOQUJMRUQgZmFsc2VcbmRlZiBQT1NUTUFSS19GUk9NX0VNQUlMIG5vcmVwbHlAZXRob3JhbWFpbC5jb21cbmRlZiBQT1NUTUFSS19GUk9NX05BTUUgXCJFdGhvcmEgUGxhdGZvcm1cIlxuZGVmIFBPU1RNQVJLX1NVQkpFQ1RfUFJFRklYIEV0aG9yYVxuZGVmIEZFRURCQUNLX1JFVEVOVElPTl9EQVlTIDE4MFxuZGVmIEFOQUxZVElDU19FTkFCTEVEIGZhbHNlXG5kZWYgUkVQT1JUX0RBSUxZX1NDSEVEVUxFIFwiMzAgOCAqICogKlwiXG5kZWYgUkVQT1JUX1dFRUtMWV9TQ0hFRFVMRSBcIjMwIDggKiAqIDFcIlxuZGVmIFJFUE9SVF9NT05USExZX1NDSEVEVUxFIFwiMzAgOCAxICogKlwiXG5kZWYgU1RSSVBFX0VOQUJMRUQgZmFsc2VcbmRlZiBJQVBfRU5BQkxFRCBmYWxzZVxuZGVmIEZJUkVCQVNFX0VOQUJMRUQgZmFsc2VcbmRlZiBIVUJTUE9UX0VOQUJMRUQgZmFsc2VcbmRlZiBIVUJTUE9UX1JFR0lPTiBuYTFcbmRlZiBJTU1VVEFCTEVfTE9HU19FTkFCTEVEIGZhbHNlXG5kZWYgRVRIT1JBX0xJQ0VOU0VfQ0FMTF9IT01FIHRydWVcbmRlZiBWSURFT19DQUxMU19FTkFCTEVEIGZhbHNlXG5kZWYgRTJFRV9FTkFCTEVEIGZhbHNlXG5kZWYgRElTQUJMRV9GSVJFQkFTRSBmYWxzZVxuZGVmIERJU0FCTEVfR0EgdHJ1ZVxuZGVmIERJU0FCTEVfQ0xBUklUWSB0cnVlXG5cbiMgV2hvbGUtbGluZSBwbGFjZWhvbGRlcnMgaW4gdGhlIGVudiB0ZW1wbGF0ZXMuIFRoZSB2YWx1ZXMgYXJlIHRoZVxuIyBwcm9kdWN0aW9uIChub24tbG9jYWxob3N0KSBicmFuY2ggb2Ygc2V0dXAtZW52LnNoIHJlcGxhY2VfdGVtcGxhdGUoKSwgd2l0aFxuIyB0aGUgY29tcG9zZSBzZXJ2aWNlIG5hbWVzIHdoZXJlIHRoZSBpbnN0YWxsZXIgdXNlcyAxMjcuMC4wLjEuXG5leHBvcnQgUk9PVF9ET01BSU5fUExBQ0VIT0xERVI9XCJST09UX0RPTUFJTj0kUk9PVF9ET01BSU5cIlxuZXhwb3J0IERFRkFVTFRfQVBQX1VSTF9QTEFDRUhPTERFUj1cIkRFRkFVTFRfQVBQX1VSTD1odHRwczovLyRXRUJfRE9NQUlOXCJcbmV4cG9ydCBWRVJJRllfRU1BSUxfV0VCX1VSTF9QTEFDRUhPTERFUj1cIlZFUklGWV9FTUFJTF9XRUJfVVJMPWh0dHBzOi8vJFdFQl9ET01BSU4vdmVyaWZ5RW1haWxcIlxuZXhwb3J0IFRFTVBfUEFTU1NPUkRfV0VCX1VSTF9QTEFDRUhPTERFUj1cIlRFTVBfUEFTU1NPUkRfV0VCX1VSTD1odHRwczovLyRXRUJfRE9NQUlOL3RlbXBQYXNzd29yZFwiXG5leHBvcnQgWE1QUF9QQVRIX1BMQUNFSE9MREVSPVwiWE1QUF9QQVRIPWh0dHA6Ly94bXBwOjUyODAvYXBpXCJcbmV4cG9ydCBYTVBQX1NFUlZJQ0VfUExBQ0VIT0xERVI9XCJYTVBQX1NFUlZJQ0U9d3NzOi8vJFhNUFBfRE9NQUlOL3dzXCJcbmV4cG9ydCBNSU5JT19VUkxfUExBQ0VIT0xERVI9XCJNSU5JT19VUkw9aHR0cHM6Ly8kRklMRVNfRE9NQUlOXCJcbmV4cG9ydCBNSU5JT19TRUNVUkVfVVJMX1BMQUNFSE9MREVSPVwiTUlOSU9fU0VDVVJFX1VSTD0ke1NFQ1VSRV9GSUxFU19ET01BSU46K2h0dHBzOi8vJFNFQ1VSRV9GSUxFU19ET01BSU59XCJcbmV4cG9ydCBBVVRIX0NPT0tJRV9ET01BSU5fUExBQ0VIT0xERVI9XCJBVVRIX0NPT0tJRV9ET01BSU49LiRST09UX0RPTUFJTlwiXG5leHBvcnQgVklURV9BUElfUExBQ0VIT0xERVI9XCJWSVRFX0FQST1odHRwczovLyRBUElfRE9NQUlOL3YxXCJcbmV4cG9ydCBWSVRFX0FQSV9WMl9QTEFDRUhPTERFUj1cIlZJVEVfQVBJX1YyPWh0dHBzOi8vJEFQSV9ET01BSU4vdjJcIlxuZXhwb3J0IFZJVEVfQVBQX1hNUFBfU0VSVklDRV9QTEFDRUhPTERFUj1cIlZJVEVfQVBQX1hNUFBfU0VSVklDRT13c3M6Ly8kWE1QUF9ET01BSU4vd3NcIlxuZXhwb3J0IFZJVEVfQVBQX0NFTlRSSUZVR0VfU0VSVklDRV9QTEFDRUhPTERFUj1cIlZJVEVfQVBQX0NFTlRSSUZVR0VfU0VSVklDRT13c3M6Ly8kV0VCX0RPTUFJTi9jb25uZWN0aW9uL3dlYnNvY2tldFwiXG5cbiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZW5kZXIgLS1cbiMgcmVuZGVyIFRFTVBMQVRFIE9VVDogbGl0ZXJhbCBzdWJzdGl0dXRpb24gb2Yge3tOQU1FfX0gd2l0aCAkTkFNRSAoZW1wdHlcbiMgd2hlbiB1bnNldCwgbGlrZSBzZXR1cC1lbnYuc2gncyAke05BTUU6LX0pIGFuZCBvZiB3aG9sZS1saW5lIE5BTUVfUExBQ0VIT0xERVJcbiMgd2l0aCAkTkFNRV9QTEFDRUhPTERFUi4gVmFsdWVzIGFyZSByZWFkIGZyb20gRU5WSVJPTiwgbmV2ZXIgZnJvbSB0aGUgYXdrXG4jIHByb2dyYW0gdGV4dCwgc28gc2VjcmV0cyBuZWVkIG5vIGVzY2FwaW5nLiBUZW1wbGF0ZS1sYW5ndWFnZSBsaW5lc1xuIyAoe3sjaWYgLi4ufX0sIHt7L2lmfX0pIGFyZSBkcm9wcGVkOyB0aGVpciBjb250ZW50IHN0YXlzLCBhcyBpbiB0aGUgaW5zdGFsbGVyLlxucmVuZGVyKCkge1xuICBhd2sgJ1xuICAgIC9eW1s6c3BhY2U6XV0qXFx7XFx7WyNcXC9dLyB7IG5leHQgfVxuICAgIC9eW0EtWjAtOV9dK19QTEFDRUhPTERFUltbOnNwYWNlOl1dKiQvIHtcbiAgICAgIGtleSA9ICQxXG4gICAgICBpZiAoa2V5IGluIEVOVklST04pIHsgcHJpbnQgRU5WSVJPTltrZXldIH0gZWxzZSB7IHByaW50OyB1bnJlc29sdmVkW2tleV0gPSAxIH1cbiAgICAgIG5leHRcbiAgICB9XG4gICAge1xuICAgICAgbGluZSA9ICQwOyBvdXQgPSBcIlwiXG4gICAgICB3aGlsZSAobWF0Y2gobGluZSwgL1xce1xce1tBLVowLTlfXStcXH1cXH0vKSkge1xuICAgICAgICBuYW1lID0gc3Vic3RyKGxpbmUsIFJTVEFSVCArIDIsIFJMRU5HVEggLSA0KVxuICAgICAgICBvdXQgPSBvdXQgc3Vic3RyKGxpbmUsIDEsIFJTVEFSVCAtIDEpICgobmFtZSBpbiBFTlZJUk9OKSA/IEVOVklST05bbmFtZV0gOiBcIlwiKVxuICAgICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIFJTVEFSVCArIFJMRU5HVEgpXG4gICAgICB9XG4gICAgICBwcmludCBvdXQgbGluZVxuICAgIH1cbiAgICBFTkQgeyBmb3IgKGsgaW4gdW5yZXNvbHZlZCkgcHJpbnRmKFwiW2NvbmZpZ10gV0FSTjogdW5yZXNvbHZlZCBwbGFjZWhvbGRlciAlc1xcblwiLCBrKSA+IFwiL2Rldi9zdGRlcnJcIiB9XG4gICcgXCIkMVwiID4gXCIkMlwiXG59XG5cbiMgc2V0X2Vudl9saW5lIEZJTEUgS0VZIFZBTFVFOiByZXBsYWNlIHRoZSBLRVk9IGxpbmUgKGV2ZXJ5IG9jY3VycmVuY2UpLlxuc2V0X2Vudl9saW5lKCkge1xuICBhd2sgLXYgaz1cIiQyXCIgLXYgdj1cIiQzXCIgJ2luZGV4KCQwLCBrIFwiPVwiKSA9PSAxIHsgcHJpbnQgayBcIj1cIiB2OyBuZXh0IH0geyBwcmludCB9JyBcIiQxXCIgPiBcIiQxLnRtcFwiICYmIG12IFwiJDEudG1wXCIgXCIkMVwiXG59XG5cbnN0YWdlPVwiJChta3RlbXAgLWQgXCIke1RNUERJUjotL3RtcH0vZXRob3JhLWNvbmZpZy5YWFhYWFhcIilcIlxudHJhcCAncm0gLXJmIFwiJHN0YWdlXCInIEVYSVRcbm1rZGlyIC1wIFwiJHN0YWdlL2FwaVwiIFwiJHN0YWdlL2Zyb250ZW5kXCIgXCIkc3RhZ2UvY2VudHJpZnVnb1wiIFwiJHN0YWdlL3htcHBcIlxuXG5mb3IgdCBpbiBiYWNrZW5kLmVudi50ZW1wbGF0ZSBmcm9udGVuZC5lbnYudGVtcGxhdGUgY2VudHJpZnVnby1jb25maWcuanNvbi50ZW1wbGF0ZTsgZG9cbiAgWyAtZiBcIiRURU1QTEFURVMvJHRcIiBdIHx8IGRpZSBcInRlbXBsYXRlIG5vdCBmb3VuZDogJFRFTVBMQVRFUy8kdCAoaXMgLi90ZW1wbGF0ZXMgbW91bnRlZD8pXCJcbmRvbmVcblxuIyBiYWNrZW5kLmVudlxucmVuZGVyIFwiJFRFTVBMQVRFUy9iYWNrZW5kLmVudi50ZW1wbGF0ZVwiIFwiJHN0YWdlL2FwaS9iYWNrZW5kLmVudlwiXG5zZXRfZW52X2xpbmUgXCIkc3RhZ2UvYXBpL2JhY2tlbmQuZW52XCIgTU9OR09fVVJJIFwibW9uZ29kYjovL21vbmdvOjI3MDE3LyRNT05HT19EQj9kaXJlY3RDb25uZWN0aW9uPXRydWVcIlxuc2V0X2Vudl9saW5lIFwiJHN0YWdlL2FwaS9iYWNrZW5kLmVudlwiIENIQVRfREFUQUJBU0UgXCJtb25nb2RiOi8vbW9uZ286MjcwMTcvY2hhdF9hcmNoaXZlP2RpcmVjdENvbm5lY3Rpb249dHJ1ZVwiXG5zZXRfZW52X2xpbmUgXCIkc3RhZ2UvYXBpL2JhY2tlbmQuZW52XCIgUkVESVNfSE9TVCByZWRpc1xuc2V0X2Vudl9saW5lIFwiJHN0YWdlL2FwaS9iYWNrZW5kLmVudlwiIE1BTV9NWVNRTF9IT1NUIG15c3FsXG5zZXRfZW52X2xpbmUgXCIkc3RhZ2UvYXBpL2JhY2tlbmQuZW52XCIgTUlOSU9fSE9TVCBtaW5pb1xuc2V0X2Vudl9saW5lIFwiJHN0YWdlL2FwaS9iYWNrZW5kLmVudlwiIENFTlRSSUZVR09fQVBJX1VSTCBcImh0dHA6Ly9jZW50cmlmdWdvOjgwMDAvYXBpXCJcbntcbiAgZWNobyBcIiMgUmVuZGVyZWQgYnkgdGhlIGNvbXBvc2UgYnVuZGxlJ3MgY29uZmlnIHNlcnZpY2UgZnJvbSBiYWNrZW5kLmVudi50ZW1wbGF0ZVwiXG4gIGVjaG8gXCIjIG9uIGV2ZXJ5ICdkb2NrZXIgY29tcG9zZSB1cCcuIEVkaXQgLmVudiwgbm90IHRoaXMgZmlsZS5cIlxuICBjYXQgXCIkc3RhZ2UvYXBpL2JhY2tlbmQuZW52XCJcbn0gPiBcIiRzdGFnZS9hcGkvYmFja2VuZC5lbnYudG1wXCIgJiYgbXYgXCIkc3RhZ2UvYXBpL2JhY2tlbmQuZW52LnRtcFwiIFwiJHN0YWdlL2FwaS9iYWNrZW5kLmVudlwiXG5cbiMgZnJvbnRlbmQuZW52XG5yZW5kZXIgXCIkVEVNUExBVEVTL2Zyb250ZW5kLmVudi50ZW1wbGF0ZVwiIFwiJHN0YWdlL2Zyb250ZW5kL2Zyb250ZW5kLmVudlwiXG5cbiMgY2VudHJpZnVnbyBjb25maWcuanNvblxucmVuZGVyIFwiJFRFTVBMQVRFUy9jZW50cmlmdWdvLWNvbmZpZy5qc29uLnRlbXBsYXRlXCIgXCIkc3RhZ2UvY2VudHJpZnVnby9jb25maWcuanNvblwiXG5cbiMgZWphYmJlcmQueW1sICsgand0LmtleTogdGhlIHByb2R1Y3Rpb24gYnJhbmNoIG9mIHNldHVwLWVqYWJiZXJkLWNvbmZpZy5zaC5cblsgLWYgXCIkRElTVC9lamFiYmVyZC1wcm9kLnltbFwiIF0gfHwgZGllIFwiJERJU1QvZWphYmJlcmQtcHJvZC55bWwgbm90IGZvdW5kOyB0aGUgY29uZmlnIHNlcnZpY2UgbXVzdCBydW4gdGhlIGV0aG9yYS14bXBwIGltYWdlXCJcbmNmZz1cIiRzdGFnZS94bXBwL2VqYWJiZXJkLnltbFwiXG5jcCBcIiRESVNUL2VqYWJiZXJkLXByb2QueW1sXCIgXCIkY2ZnXCJcbmV4cG9ydCBUUkFDS19NRU1CRVJfVVJMPVwiJHtUUkFDS19NRU1CRVJfVVJMOi1odHRwOi8vYXBpOjgwODAvdjEvY2hhdHMvdHJhY2stbWVtYmVyfVwiXG5leHBvcnQgVFJBQ0tfTEFTVF9NRVNTQUdFX1VSTD1cIiR7VFJBQ0tfTEFTVF9NRVNTQUdFX1VSTDotaHR0cDovL2FwaTo4MDgwL3YxL2NoYXRzL3RyYWNrLWxhc3QtbWVzc2FnZX1cIlxuZXhwb3J0IFRSQUNLX01FU1NBR0VfVVJMPVwiJHtUUkFDS19NRVNTQUdFX1VSTDotaHR0cDovL2FwaTo4MDgwL3YxL2NoYXRzL2FyY2hpdmUtbWVzc2FnZX1cIlxuZXhwb3J0IEhJU1RPUllfQUNDRVNTX1VSTD1cIiR7SElTVE9SWV9BQ0NFU1NfVVJMOi1odHRwOi8vYXBpOjgwODAvdjEvY2hhdHMvaGlzdG9yeS1hY2Nlc3N9XCJcbmV4cG9ydCBNRVNTQUdFX0FVRElUX1VSTD1cIiR7TUVTU0FHRV9BVURJVF9VUkw6LWh0dHA6Ly9hcGk6ODA4MC92MS9jaGF0cy9tZXNzYWdlLWF1ZGl0fVwiXG5QVVNIX0NPTU1PTl9QT1NUX1VSTD1cIiR7UFVTSF9DT01NT05fUE9TVF9VUkw6LWh0dHBzOi8vJEFQSV9ET01BSU4vcHVzaC9hcGkvdjIvcHVzaH1cIlxuUFVTSF9WT0lQX1BPU1RfVVJMPVwiJHtQVVNIX1ZPSVBfUE9TVF9VUkw6LWh0dHA6Ly9ob3N0LmRvY2tlci5pbnRlcm5hbDo3Nzc4L2FwaS92MS92b2lwcHVzaH1cIlxucHVzaF90b2tlbj1cIiR7QjJCX1BVU0hfU0VDUkVUOi0kSU5URVJOQUxfUkVRVUVTVFNfU0VDUkVUfVwiXG5hZG1pbl9qaWQ9XCJhZG1pbkAkWE1QUF9ET01BSU5cIlxuXG4jIFZhbHVlcyBnbyBpbnRvIHNlZCByZXBsYWNlbWVudCB0ZXh0IGJlbG93OiBlc2NhcGUgXFwsIHwgKHRoZSBkZWxpbWl0ZXIpIGFuZFxuIyAmIHNvIGFuIG9wZXJhdG9yLWNob3NlbiBwYXNzd29yZCB3aXRoIHRob3NlIGNoYXJhY3RlcnMgcmVuZGVycyBsaXRlcmFsbHkuXG5lc2MoKSB7IHByaW50ZiAnJXMnIFwiJDFcIiB8IHNlZCAtZSAncy9bXFxcXHwmXS9cXFxcJi9nJzsgfVxuRV9YTVBQX0RPTUFJTj1cIiQoZXNjIFwiJFhNUFBfRE9NQUlOXCIpXCJcbkVfQURNSU5fSklEPVwiJChlc2MgXCIkYWRtaW5famlkXCIpXCJcbkVfTVlTUUxfUk9PVF9QQVNTV09SRD1cIiQoZXNjIFwiJE1ZU1FMX1JPT1RfUEFTU1dPUkRcIilcIlxuRV9YTVBQX1NFQ1JFVD1cIiQoZXNjIFwiJFhNUFBfU0VDUkVUXCIpXCJcbkVfVFJBQ0tfTUVNQkVSX1VSTD1cIiQoZXNjIFwiJFRSQUNLX01FTUJFUl9VUkxcIilcIlxuRV9UUkFDS19MQVNUX01FU1NBR0VfVVJMPVwiJChlc2MgXCIkVFJBQ0tfTEFTVF9NRVNTQUdFX1VSTFwiKVwiXG5FX1RSQUNLX01FU1NBR0VfVVJMPVwiJChlc2MgXCIkVFJBQ0tfTUVTU0FHRV9VUkxcIilcIlxuRV9ISVNUT1JZX0FDQ0VTU19VUkw9XCIkKGVzYyBcIiRISVNUT1JZX0FDQ0VTU19VUkxcIilcIlxuRV9NRVNTQUdFX0FVRElUX1VSTD1cIiQoZXNjIFwiJE1FU1NBR0VfQVVESVRfVVJMXCIpXCJcbkVfUFVTSF9DT01NT05fUE9TVF9VUkw9XCIkKGVzYyBcIiRQVVNIX0NPTU1PTl9QT1NUX1VSTFwiKVwiXG5FX1BVU0hfVk9JUF9QT1NUX1VSTD1cIiQoZXNjIFwiJFBVU0hfVk9JUF9QT1NUX1VSTFwiKVwiXG5FX1BVU0hfVE9LRU49XCIkKGVzYyBcIiRwdXNoX3Rva2VuXCIpXCJcbkVfVFJBTlNMQVRFX1VSTD1cIiQoZXNjIFwiJHtUUkFOU0xBVEVfVVJMOi19XCIpXCJcblxuIyBob3N0c1xuc2VkIC1pIFwiL15ob3N0czovLC9eW2Etel0vc3xeICAtLip8ICAtICRFX1hNUFBfRE9NQUlOfFwiIFwiJGNmZ1wiXG4jIGFjbCBhZG1pbiAvIGFwaWNvbW1hbmRzXG5zZWQgLWkgXFxcbiAgLWUgXCIvXiAgYWRtaW46LywvXiAgW2Etel0vIHN8XlsgXSotIFxcXCJbXlxcXCJdKlxcXCJ8ICAgICAgLSBcXFwiJEVfQURNSU5fSklEXFxcInxnXCIgXFxcbiAgLWUgXCIvXiAgYXBpY29tbWFuZHM6LywvXiAgW2Etel0vIHN8XlsgXSotIFxcXCJbXlxcXCJdKlxcXCJ8ICAgICAgLSBcXFwiJEVfQURNSU5fSklEXFxcInxnXCIgXFxcbiAgXCIkY2ZnXCJcbiMgc3FsIHBhc3N3b3JkXG5zZWQgLWkgXCJzfF5zcWxfcGFzc3dvcmQ6Lip8c3FsX3Bhc3N3b3JkOiBcXFwiJEVfTVlTUUxfUk9PVF9QQVNTV09SRFxcXCJ8Z1wiIFwiJGNmZ1wiXG4jIHRyYWNraW5nIG1vZHVsZXNcbnNlZCAtaSBcXFxuICAtZSBcIi9eICBtb2RfdHJhY2tfbWVtYmVyOi8sL14gIFthLXpfXS8gc3xeWyBdKnVybDouKnwgICAgdXJsOiBcXFwiJEVfVFJBQ0tfTUVNQkVSX1VSTFxcXCJ8Z1wiIFxcXG4gIC1lIFwiL14gIG1vZF90cmFja19tZW1iZXI6LywvXiAgW2Etel9dLyBzfF5bIF0qc2VjcmV0Oi4qfCAgICBzZWNyZXQ6IFxcXCIkRV9YTVBQX1NFQ1JFVFxcXCJ8Z1wiIFxcXG4gIC1lIFwiL14gIG1vZF90cmFja19sYXN0X21lc3NhZ2U6LywvXiAgW2Etel9dLyBzfF5bIF0qdXJsOi4qfCAgICB1cmw6IFxcXCIkRV9UUkFDS19MQVNUX01FU1NBR0VfVVJMXFxcInxnXCIgXFxcbiAgLWUgXCIvXiAgbW9kX3RyYWNrX2xhc3RfbWVzc2FnZTovLC9eICBbYS16X10vIHN8XlsgXSpzZWNyZXQ6Lip8ICAgIHNlY3JldDogXFxcIiRFX1hNUFBfU0VDUkVUXFxcInxnXCIgXFxcbiAgXCIkY2ZnXCJcbmlmIGdyZXAgLXEgXCJeICBtb2RfdHJhY2tfbWVzc2FnZTpcIiBcIiRjZmdcIjsgdGhlblxuICBzZWQgLWkgXFxcbiAgICAtZSBcIi9eICBtb2RfdHJhY2tfbWVzc2FnZTovLC9eICBbYS16X10vIHN8XlsgXSp1cmw6Lip8ICAgIHVybDogXFxcIiRFX1RSQUNLX01FU1NBR0VfVVJMXFxcInxnXCIgXFxcbiAgICAtZSBcIi9eICBtb2RfdHJhY2tfbWVzc2FnZTovLC9eICBbYS16X10vIHN8XlsgXSpzZWNyZXQ6Lip8ICAgIHNlY3JldDogXFxcIiRFX1hNUFBfU0VDUkVUXFxcInxnXCIgXFxcbiAgICBcIiRjZmdcIlxuZmlcbmlmIGdyZXAgLXEgXCJeICBtb2RfaGlzdG9yeV9hY2Nlc3M6XCIgXCIkY2ZnXCI7IHRoZW5cbiAgc2VkIC1pIFxcXG4gICAgLWUgXCIvXiAgbW9kX2hpc3RvcnlfYWNjZXNzOi8sL14gIFthLXpfXS8gc3xeWyBdKnVybDouKnwgICAgdXJsOiBcXFwiJEVfSElTVE9SWV9BQ0NFU1NfVVJMXFxcInxnXCIgXFxcbiAgICAtZSBcIi9eICBtb2RfaGlzdG9yeV9hY2Nlc3M6LywvXiAgW2Etel9dLyBzfF5bIF0qc2VjcmV0Oi4qfCAgICBzZWNyZXQ6IFxcXCIkRV9YTVBQX1NFQ1JFVFxcXCJ8Z1wiIFxcXG4gICAgXCIkY2ZnXCJcbmZpXG4jIG1vZF9lZGl0IC8gbW9kX2RlbGV0ZSBzaGlwIGFzIGJhcmUgYHt9YCBibG9ja3M6IGV4cGFuZCB0aGVtIGludG8gdXJsL3NlY3JldFxuIyBsaW5lcyBmaXJzdCAoYXdrLCBzbyBCdXN5Qm94IGFuZCBHTlUgcHJvZHVjZSB0aGUgc2FtZSB0ZXh0KSwgdGhlbiByZW5kZXIuXG5mb3IgYXVkaXRfbW9kIGluIG1vZF9lZGl0IG1vZF9kZWxldGU7IGRvXG4gIGlmIGdyZXAgLXFFIFwiXiAgJGF1ZGl0X21vZDpbWzpzcGFjZTpdXSpcXHtcXH1bWzpzcGFjZTpdXSokXCIgXCIkY2ZnXCI7IHRoZW5cbiAgICBhd2sgLXYgbT1cIiRhdWRpdF9tb2RcIiAnXG4gICAgICAkMCB+IFwiXiAgXCIgbSBcIjpbWzpzcGFjZTpdXSpcXFxce1xcXFx9W1s6c3BhY2U6XV0qJFwiIHsgcHJpbnQgXCIgIFwiIG0gXCI6XCI7IHByaW50IFwiICAgIHVybDogXFxcIlxcXCJcIjsgcHJpbnQgXCIgICAgc2VjcmV0OiBcXFwiXFxcIlwiOyBuZXh0IH1cbiAgICAgIHsgcHJpbnQgfScgXCIkY2ZnXCIgPiBcIiRjZmcudG1wXCIgJiYgbXYgXCIkY2ZnLnRtcFwiIFwiJGNmZ1wiXG4gIGZpXG4gIGlmIGdyZXAgLXEgXCJeICAkYXVkaXRfbW9kOlwiIFwiJGNmZ1wiOyB0aGVuXG4gICAgc2VkIC1pIFxcXG4gICAgICAtZSBcIi9eICAkYXVkaXRfbW9kOi8sL14gIFthLXpfXS8gc3xeWyBdKnVybDouKnwgICAgdXJsOiBcXFwiJEVfTUVTU0FHRV9BVURJVF9VUkxcXFwifGdcIiBcXFxuICAgICAgLWUgXCIvXiAgJGF1ZGl0X21vZDovLC9eICBbYS16X10vIHN8XlsgXSpzZWNyZXQ6Lip8ICAgIHNlY3JldDogXFxcIiRFX1hNUFBfU0VDUkVUXFxcInxnXCIgXFxcbiAgICAgIFwiJGNmZ1wiXG4gIGZpXG5kb25lXG4jIG1vZF9vZmZsaW5lX3Bvc3RcbnNlZCAtaSBcXFxuICAtZSBcIi9eICBtb2Rfb2ZmbGluZV9wb3N0Oi8sL14gIFthLXpfXS8gc3xeWyBdKmNvbW1vbl9wb3N0X3VybDouKnwgICAgY29tbW9uX3Bvc3RfdXJsOiBcXFwiJEVfUFVTSF9DT01NT05fUE9TVF9VUkxcXFwifGdcIiBcXFxuICAtZSBcIi9eICBtb2Rfb2ZmbGluZV9wb3N0Oi8sL14gIFthLXpfXS8gc3xeWyBdKnZvaXBfcG9zdF91cmw6Lip8ICAgIHZvaXBfcG9zdF91cmw6IFxcXCIkRV9QVVNIX1ZPSVBfUE9TVF9VUkxcXFwifGdcIiBcXFxuICAtZSBcIi9eICBtb2Rfb2ZmbGluZV9wb3N0Oi8sL14gIFthLXpfXS8gc3xeWyBdKmF1dGhfdG9rZW46Lip8ICAgIGF1dGhfdG9rZW46IFxcXCIkRV9QVVNIX1RPS0VOXFxcInxnXCIgXFxcbiAgXCIkY2ZnXCJcbiMgY2VydGZpbGVzXG5zZWQgLWkgXCJzfC9jZXJ0L1teXFxcIiBdKlxcXFwucGVtfC9jZXJ0LyRFX1hNUFBfRE9NQUlOLnBlbXxnXCIgXCIkY2ZnXCJcbiMgdHJhbnNsYXRlX3VybCAob25seSB3aGVuIHNldClcbmlmIFsgLW4gXCIke1RSQU5TTEFURV9VUkw6LX1cIiBdOyB0aGVuXG4gIHNlZCAtaSBcInN8XlxcKFtbOnNwYWNlOl1dKlxcKXRyYW5zbGF0ZV91cmw6Lip8XFwxdHJhbnNsYXRlX3VybDogXFxcIiRFX1RSQU5TTEFURV9VUkxcXFwifFwiIFwiJGNmZ1wiXG5maVxuIyBKV1QgU0FTTCBhdXRoXG5rPVwiJChwcmludGYgJyVzJyBcIiRYTVBQX0pXVF9TRUNSRVRcIiB8IGJhc2U2NCB8IHRyIC1kICdcXG4nIHwgdHIgJysvJyAnLV8nIHwgdHIgLWQgJz0nKVwiXG5wcmludGYgJ3tcImt0eVwiOlwib2N0XCIsXCJrXCI6XCIlc1wifScgXCIka1wiID4gXCIkc3RhZ2UveG1wcC9qd3Qua2V5XCJcbnNlZCAtaSBcInN8XmF1dGhfbWV0aG9kOi4qfGF1dGhfbWV0aG9kOiBbc3FsLCBqd3QsIGFub255bW91c118XCIgXCIkY2ZnXCJcbmlmICEgZ3JlcCAtcUUgXCJeand0X2tleTpcIiBcIiRjZmdcIjsgdGhlblxuICBhd2sgJ3sgcHJpbnQgfSAvXmF1dGhfbWV0aG9kOi8geyBwcmludCBcImp3dF9rZXk6IFxcXCIvaG9tZS9lamFiYmVyZC9jb25mL2p3dC5rZXlcXFwiXCI7IHByaW50IFwiand0X2ppZF9maWVsZDogXFxcImppZFxcXCJcIiB9JyBcIiRjZmdcIiA+IFwiJGNmZy50bXBcIiAmJiBtdiBcIiRjZmcudG1wXCIgXCIkY2ZnXCJcbmZpXG5cbiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluc3RhbGwgLS1cbiMgSGFuZCBlYWNoIGRpcmVjdG9yeSB0byB0aGUgb25lIGNvbnRhaW5lciB1c2VyIHRoYXQgcmVhZHMgaXQ7IHNlY3JldHMgc3RheVxuIyB1bnJlYWRhYmxlIHRvIHRoZSBvdGhlcnMuIFRoZW4gc3dhcCB0aGUgd2hvbGUgdHJlZSBpbi5cbmNobW9kIDcwMCBcIiRzdGFnZS9hcGlcIiBcIiRzdGFnZS9mcm9udGVuZFwiIFwiJHN0YWdlL2NlbnRyaWZ1Z29cIiBcIiRzdGFnZS94bXBwXCJcbmNobW9kIDYwMCBcIiRzdGFnZVwiLyovKlxuIyAoT25seSByb290IGNhbiBoYW5kIGZpbGVzIG92ZXI7IGEgbm9uLXJvb3QgcnVuLCBlLmcuIHRoZSBidW5kbGUncyB0ZXN0cyxcbiMga2VlcHMgaXRzIG93biBvd25lcnNoaXAuKVxub3duKCkgeyBjaG93biAtUiBcIiQxXCIgXCIkMlwiIDI+L2Rldi9udWxsIHx8IFsgXCIkKGlkIC11KVwiICE9IDAgXSB8fCBkaWUgXCJjaG93biAkMSAkMiBmYWlsZWRcIjsgfVxub3duIFwiJEFQSV9VSUQ6JEFQSV9VSURcIiBcIiRzdGFnZS9hcGlcIlxub3duIDA6MCBcIiRzdGFnZS9mcm9udGVuZFwiXG5vd24gXCIkQ0VOVFJJRlVHT19VSUQ6JENFTlRSSUZVR09fVUlEXCIgXCIkc3RhZ2UvY2VudHJpZnVnb1wiXG5vd24gXCIkWE1QUF9VSUQ6JFhNUFBfVUlEXCIgXCIkc3RhZ2UveG1wcFwiXG5ta2RpciAtcCBcIiRPVVRcIlxuZm9yIGQgaW4gYXBpIGZyb250ZW5kIGNlbnRyaWZ1Z28geG1wcDsgZG9cbiAgcm0gLXJmIFwiJE9VVC8kZC5uZXdcIlxuICBjcCAtYSBcIiRzdGFnZS8kZFwiIFwiJE9VVC8kZC5uZXdcIlxuICBybSAtcmYgXCIkT1VULyRkXCJcbiAgbXYgXCIkT1VULyRkLm5ld1wiIFwiJE9VVC8kZFwiXG5kb25lXG5jaG1vZCA3NTUgXCIkT1VUXCJcblxuIyBNeVNRTCBydW5zIHRoaXMgb25seSB3aGVuIGl0cyBkYXRhIGRpcmVjdG9yeSBpcyBlbXB0eSAoZmlyc3Qgc3RhcnQpLlxubWtkaXIgLXAgXCIkTVlTUUxfSU5JVERCXCJcbmNwIFwiJERJU1QvbXlzcWwyLnNxbFwiIFwiJE1ZU1FMX0lOSVREQi8wMS1lamFiYmVyZC5zcWxcIlxuY2htb2QgNjQ0IFwiJE1ZU1FMX0lOSVREQi8wMS1lamFiYmVyZC5zcWxcIlxuXG5sb2cgXCJyZW5kZXJlZCBmb3IgJFJPT1RfRE9NQUlOOiBhcGk9JEFQSV9ET01BSU4gd2ViPSRXRUJfRE9NQUlOIHhtcHA9JFhNUFBfRE9NQUlOIGZpbGVzPSRGSUxFU19ET01BSU4gKGJhc2UgYXBwIHNsdWc6ICRCQVNFX0FQUF9ET01BSU5fTkFNRSlcIlxuJycnXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3NjcmlwdHMvbW9uZ28taW5pdC5zaFwiXG5jb250ZW50ID0gJycnXG4jIS9iaW4vYmFzaFxuIyBtb25nby1pbml0LnNoIC0gdGhlIGBtb25nby1pbml0YCBzZXJ2aWNlIG9mIHRoZSBjb21wb3NlIGJ1bmRsZS5cbiNcbiMgVGhlIEFQSSBuZWVkcyBNb25nb0RCIGFzIGEgcmVwbGljYSBzZXQgKHJzMCwgb25lIG1lbWJlcikuIFNhbWUgc2V0LXVwIGFzXG4jIGRlcGxveS9kb2NrZXIvbW9uZ29fc2NyaXB0cy9tb25nb3NldHVwLnNoLCBidXQgaWRlbXBvdGVudCBhbmQgd2l0aG91dCB0aGVcbiMgZml4ZWQgMzAgcyBzbGVlcDogd2FpdCBmb3IgbW9uZ29kLCBpbml0aWF0ZSBvbmx5IHdoZW4gdGhlIHNldCBoYXMgbm9cbiMgY29uZmlnIHlldCwgdGhlbiB3YWl0IHVudGlsIHRoZSBtZW1iZXIgaXMgUFJJTUFSWS5cbnNldCAtZXVvIHBpcGVmYWlsXG5cbkhPU1Q9XCIke01PTkdPX0hPU1Q6LW1vbmdvOjI3MDE3fVwiXG5tcSgpIHsgbW9uZ29zaCAtLWhvc3QgXCIkSE9TVFwiIC0tcXVpZXQgLS1ldmFsIFwiJDFcIjsgfVxuXG5mb3IgaSBpbiAkKHNlcSAxIDkwKTsgZG9cbiAgWyBcIiQobXEgJ2RiLmFkbWluQ29tbWFuZCh7IHBpbmc6IDEgfSkub2snIDI+L2Rldi9udWxsIHx8IHRydWUpXCIgPSBcIjFcIiBdICYmIGJyZWFrXG4gIFsgXCIkaVwiID0gOTAgXSAmJiB7IGVjaG8gXCJbbW9uZ28taW5pdF0gbW9uZ29kIGF0ICRIT1NUIGRpZCBub3QgYW5zd2VyIHdpdGhpbiAzIG1pbnV0ZXNcIiA+JjI7IGV4aXQgMTsgfVxuICBzbGVlcCAyXG5kb25lXG5cbnN0YXRlPVwiJChtcSAndHJ5IHsgcnMuc3RhdHVzKCkub2sgfSBjYXRjaCAoZSkgeyBlLmNvZGVOYW1lIH0nIDI+L2Rldi9udWxsIHx8IHRydWUpXCJcbmlmIFsgXCIkc3RhdGVcIiA9IFwiMVwiIF07IHRoZW5cbiAgZWNobyBcIlttb25nby1pbml0XSByZXBsaWNhIHNldCByczAgYWxyZWFkeSBpbml0aWF0ZWRcIlxuZWxzZVxuICBlY2hvIFwiW21vbmdvLWluaXRdIGluaXRpYXRpbmcgcmVwbGljYSBzZXQgcnMwICgkc3RhdGUpXCJcbiAgbXEgXCJycy5pbml0aWF0ZSh7IF9pZDogJ3JzMCcsIG1lbWJlcnM6IFt7IF9pZDogMCwgaG9zdDogJyRIT1NUJyB9XSB9KS5va1wiXG5maVxuXG5mb3IgaSBpbiAkKHNlcSAxIDYwKTsgZG9cbiAgWyBcIiQobXEgJ2RiLmhlbGxvKCkuaXNXcml0YWJsZVByaW1hcnknIDI+L2Rldi9udWxsIHx8IHRydWUpXCIgPSBcInRydWVcIiBdICYmIHsgZWNobyBcIlttb25nby1pbml0XSByczAgUFJJTUFSWVwiOyBleGl0IDA7IH1cbiAgc2xlZXAgMlxuZG9uZVxuZWNobyBcIlttb25nby1pbml0XSByczAgZGlkIG5vdCBlbGVjdCBhIFBSSU1BUlkgd2l0aGluIDIgbWludXRlc1wiID4mMlxuZXhpdCAxXG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvc2NyaXB0cy94bXBwLXN0YXJ0LnNoXCJcbmNvbnRlbnQgPSAnJydcbiMhL2Jpbi9zaFxuIyB4bXBwLXN0YXJ0LnNoIC0gZW50cnlwb2ludCBvZiB0aGUgeG1wcCBzZXJ2aWNlIGluIHRoZSBjb21wb3NlIGJ1bmRsZS5cbiNcbiMgMS4gSW5zdGFsbHMgdGhlIGVqYWJiZXJkLnltbCBhbmQgand0LmtleSB0aGUgY29uZmlnIHNlcnZpY2UgcmVuZGVyZWQuXG4jIDIuIFN0YXJ0cyBlamFiYmVyZCB0aHJvdWdoIHRoZSBpbWFnZSdzIG93biBlbnRyeXBvaW50LlxuIyAzLiBJbiB0aGUgYmFja2dyb3VuZCwgb25jZSBlamFiYmVyZCBhbnN3ZXJzLCBtYWtlcyBzdXJlIGFkbWluQDx4bXBwIGhvc3Q+XG4jICAgIGV4aXN0cyB3aXRoIFhNUFBfQURNSU5fUEFTU1dPUkQgKHJlZ2lzdGVyLCBvciBjaGFuZ2VfcGFzc3dvcmQgd2hlbiBpdFxuIyAgICBhbHJlYWR5IGV4aXN0cykuIFRoZSBob3N0IGluc3RhbGxlciBkb2VzIHRoaXMgd2l0aCBgZG9ja2VyIGV4ZWMgLi4uXG4jICAgIGVqYWJiZXJkY3RsYDsgaGVyZSBpdCBydW5zIGluIHRoZSBjb250YWluZXIsIHdoZXJlIGVqYWJiZXJkY3RsIGNhbiByZWFjaFxuIyAgICB0aGUgbm9kZSwgYW5kIGl0IHJlLXJ1bnMgb24gZXZlcnkgc3RhcnQgc28gYSBjaGFuZ2VkIHBhc3N3b3JkIGZvbGxvd3MuXG5zZXQgLWV1XG5cbkNPTkZfU1JDPVwiJHtFVEhPUkFfWE1QUF9DT05GSUdfRElSOi0vZXRob3JhL2NvbmZpZy94bXBwfVwiXG5DT05GX0RJUj0vb3B0L2VqYWJiZXJkL2NvbmZcbkNUTD0vb3B0L2VqYWJiZXJkL2Jpbi9lamFiYmVyZGN0bFxuXG5bIC1yIFwiJENPTkZfU1JDL2VqYWJiZXJkLnltbFwiIF0gfHwgeyBlY2hvIFwiW3htcHBdICRDT05GX1NSQy9lamFiYmVyZC55bWwgbWlzc2luZzsgdGhlIGNvbmZpZyBzZXJ2aWNlIGRpZCBub3QgcnVuXCIgPiYyOyBleGl0IDE7IH1cbiMgWE1QUF9ET01BSU4gbm9ybWFsbHkgYXJyaXZlcyBmcm9tIGNvbXBvc2UgKCR7WE1QUF9ET01BSU46LXhtcHAuJHtST09UX0RPTUFJTn19KS5cbiMgQSBwbGF0Zm9ybSB0aGF0IHJlc29sdmVzIGNvbXBvc2UgZGVmYXVsdHMgaXRzZWxmIChDb29saWZ5KSBoYW5kcyBhbiBlbXB0eVxuIyBvdmVycmlkZSB0aHJvdWdoIGFzIGFuIGVtcHR5IHZhbHVlLCBzbyBmYWxsIGJhY2sgdG8gdGhlIGhvc3QgdGhlIGNvbmZpZ1xuIyBzZXJ2aWNlIHJlbmRlcmVkIGludG8gZWphYmJlcmQueW1sLlxuaWYgWyAteiBcIiR7WE1QUF9ET01BSU46LX1cIiBdOyB0aGVuXG4gIFhNUFBfRE9NQUlOPVwiJChzZWQgLW4gJy9eaG9zdHM6LywvXlthLXpdL3tzL14gIC0gLy9wO30nIFwiJENPTkZfU1JDL2VqYWJiZXJkLnltbFwiIHwgaGVhZCAtbiAxKVwiXG4gIGV4cG9ydCBYTVBQX0RPTUFJTlxuZmlcbmNwIFwiJENPTkZfU1JDL2VqYWJiZXJkLnltbFwiIFwiJENPTkZfRElSL2VqYWJiZXJkLnltbFwiXG5jcCBcIiRDT05GX1NSQy9qd3Qua2V5XCIgXCIkQ09ORl9ESVIvand0LmtleVwiXG5jaG1vZCA2MDAgXCIkQ09ORl9ESVIvZWphYmJlcmQueW1sXCIgXCIkQ09ORl9ESVIvand0LmtleVwiXG5cbmVuc3VyZV9hZG1pbigpIHtcbiAgaG9zdD1cIiR7WE1QUF9ET01BSU46P31cIlxuICBwYXNzPVwiJHtYTVBQX0FETUlOX1BBU1NXT1JEOj99XCJcbiAgaT0wXG4gIHVudGlsIFwiJENUTFwiIHN0YXR1cyA+L2Rldi9udWxsIDI+JjE7IGRvXG4gICAgaT0kKChpICsgMSkpXG4gICAgWyBcIiRpXCIgLWd0IDE1MCBdICYmIHsgZWNobyBcIlt4bXBwXSBlamFiYmVyZCBkaWQgbm90IHN0YXJ0IHdpdGhpbiA1IG1pbnV0ZXM7IGFkbWluIGFjY291bnQgbm90IGVuc3VyZWRcIiA+JjI7IHJldHVybiAxOyB9XG4gICAgc2xlZXAgMlxuICBkb25lXG4gIGlmIFwiJENUTFwiIGNoZWNrX2FjY291bnQgYWRtaW4gXCIkaG9zdFwiID4vZGV2L251bGwgMj4mMTsgdGhlblxuICAgIFwiJENUTFwiIGNoYW5nZV9wYXNzd29yZCBhZG1pbiBcIiRob3N0XCIgXCIkcGFzc1wiID4vZGV2L251bGwgMj4mMSBcXFxuICAgICAgJiYgZWNobyBcIlt4bXBwXSBhZG1pbkAkaG9zdCBwcmVzZW50IChwYXNzd29yZCBlbnN1cmVkKVwiIFxcXG4gICAgICB8fCBlY2hvIFwiW3htcHBdIFdBUk46IGNvdWxkIG5vdCBzZXQgdGhlIHBhc3N3b3JkIG9mIGFkbWluQCRob3N0XCIgPiYyXG4gIGVsc2VcbiAgICBcIiRDVExcIiByZWdpc3RlciBhZG1pbiBcIiRob3N0XCIgXCIkcGFzc1wiID4vZGV2L251bGwgMj4mMSBcXFxuICAgICAgJiYgZWNobyBcIlt4bXBwXSBhZG1pbkAkaG9zdCBjcmVhdGVkXCIgXFxcbiAgICAgIHx8IGVjaG8gXCJbeG1wcF0gV0FSTjogY291bGQgbm90IHJlZ2lzdGVyIGFkbWluQCRob3N0XCIgPiYyXG4gIGZpXG4gIDogPiAvdG1wL2V0aG9yYS1hZG1pbi1yZWFkeVxufVxucm0gLWYgL3RtcC9ldGhvcmEtYWRtaW4tcmVhZHlcbmVuc3VyZV9hZG1pbiAmXG5cbmV4ZWMgL2VudHJ5cG9pbnQuc2ggXCIkQFwiXG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvc2NyaXB0cy9mcm9udGVuZC1zdGFydC5zaFwiXG5jb250ZW50ID0gJycnXG4jIS9iaW4vc2hcbiMgZnJvbnRlbmQtc3RhcnQuc2ggLSBlbnRyeXBvaW50IG9mIHRoZSBmcm9udGVuZCBzZXJ2aWNlIGluIHRoZSBjb21wb3NlIGJ1bmRsZS5cbiNcbiMgVGhlIGV0aG9yYS1mcm9udGVuZCBpbWFnZSByZW5kZXJzIC9jb25maWcuanMgYW5kIHRoZSBDU1AgZnJvbSB0aGUgVklURV8qXG4jIHZhcmlhYmxlcyBpbiBpdHMgZW52aXJvbm1lbnQuIEV4cG9ydCB0aGUgZnJvbnRlbmQuZW52IHRoZSBjb25maWcgc2VydmljZVxuIyByZW5kZXJlZCAocGxhaW4gS0VZPXZhbHVlIGxpbmVzLCB0YWtlbiBsaXRlcmFsbHksIHRoZSBzYW1lIGFzIHRoZSBkb2NrZXJcbiMgLS1lbnYtZmlsZSB0aGF0IGRlcGxveS9zY3JpcHRzL2Zyb250ZW5kLWZyb20taW1hZ2Uuc2ggcHJvZHVjZXMpLCB0aGVuIHJ1blxuIyB0aGUgaW1hZ2UncyBvd24gZW50cnlwb2ludC5cbnNldCAtZXVcblxuRU5WX0ZJTEU9XCIke0VUSE9SQV9GUk9OVEVORF9FTlZfRklMRTotL2V0aG9yYS9jb25maWcvZnJvbnRlbmQvZnJvbnRlbmQuZW52fVwiXG5bIC1yIFwiJEVOVl9GSUxFXCIgXSB8fCB7IGVjaG8gXCJbZnJvbnRlbmRdICRFTlZfRklMRSBtaXNzaW5nOyB0aGUgY29uZmlnIHNlcnZpY2UgZGlkIG5vdCBydW5cIiA+JjI7IGV4aXQgMTsgfVxuXG53aGlsZSBJRlM9IHJlYWQgLXIgbGluZSB8fCBbIC1uIFwiJGxpbmVcIiBdOyBkb1xuICBjYXNlIFwiJGxpbmVcIiBpblxuICAgICone3snKikgY29udGludWUgOztcbiAgICBbQS1aYS16X10qPSopXG4gICAgICBrZXk9XCIke2xpbmUlJT0qfVwiXG4gICAgICBjYXNlIFwiJGtleVwiIGluICpbIUEtWmEtejAtOV9dKikgY29udGludWUgOzsgZXNhY1xuICAgICAgZXhwb3J0IFwiJGxpbmVcIlxuICAgICAgOztcbiAgZXNhY1xuZG9uZSA8IFwiJEVOVl9GSUxFXCJcblxuZXhlYyAvdXNyL2xvY2FsL2Jpbi9ldGhvcmEtZnJvbnRlbmQgXCIkQFwiXG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdGVtcGxhdGVzL2JhY2tlbmQuZW52LnRlbXBsYXRlXCJcbmNvbnRlbnQgPSAnJydcbiMgTk9ERS5KUyBDT1JFIEFQUCBTRVRUSU5HU1xuTk9ERV9FTlY9e3tOT0RFX0VOVn19XG5QT1JUPXt7QkFDS0VORF9QT1JUfX1cblxuIyBTaWducyBKV1QgQWNjZXNzIFRva2VucyBmb3IgdXNlcnNcblNFQ1JFVF9LRVk9J3t7SldUX1NFQ1JFVH19J1xuXG4jIFNpZ25zIEpXVCBSZWZyZXNoIFRva2VucyBmb3IgdXNlcnNcblJFRlJFU0hfU0VDUkVUPXt7UkVGUkVTSF9TRUNSRVR9fVxuXG4jIFdFQiBBUFAgU0VUVElOR1NcbiMgUk9PVF9ET01BSU4gd2lsbCBiZSBzZXQgYmFzZWQgb24gbG9jYWxob3N0IG1vZGVcblJPT1RfRE9NQUlOX1BMQUNFSE9MREVSXG5IT1NURURfQVBQU19ST09UX0RPTUFJTj17e0hPU1RFRF9BUFBTX1JPT1RfRE9NQUlOfX1cblxuIyBzdXBlcmFkbWluIHVzZXJzIGZvciB3ZWIgYXBwXG5QTEFURk9STV9BQ0NPVU5UX0VNQUlMPVwie3tBRE1JTl9FTUFJTH19XCJcblBMQVRGT1JNX0FDQ09VTlRfUEFTU1dPUkQ9XCJ7e0FETUlOX1BBU1NXT1JEfX1cIlxuXG5VU0VSX1RPS0VOX0VYUElSQVRJT05fU0VDT05EUz0xXG5cbiMgU2V0dGluZ3MgZm9yIGluaXRpYWxpemluZyB0aGUgbWFpbiBiYXNlIEFwcCBhdCB0aGUgc2VydmVyXG5CQVNFX0FQUF9ESVNQTEFZX05BTUU9e3tCQVNFX0FQUF9ESVNQTEFZX05BTUV9fVxuQkFTRV9BUFBfRE9NQUlOX05BTUU9e3tCQVNFX0FQUF9ET01BSU5fTkFNRX19XG5CQVNFX0FQUF9PV05FUl9FTUFJTD17e0JBU0VfQVBQX09XTkVSX0VNQUlMfX1cbkJBU0VfQVBQX09XTkVSX1BBU1NXT1JEPXt7QkFTRV9BUFBfT1dORVJfUEFTU1dPUkR9fVxuQkFTRV9BUFBfU1RBUlRfQkFMQU5DRT17e0JBU0VfQVBQX1NUQVJUX0JBTEFOQ0V9fVxuXG4jIElnbm9yZSB0aGUgYmVsb3cgZm9yIG5vdyAoaW50ZW5kZWQgZm9yIHNlbGYtZGVwbG95IGxpa2UgQVdTKVxuIyBVUkxzIHdpbGwgYmUgc2V0IGJhc2VkIG9uIGxvY2FsaG9zdCBtb2RlXG5ERUZBVUxUX0FQUF9VUkxfUExBQ0VIT0xERVJcblZFUklGWV9FTUFJTF9XRUJfVVJMX1BMQUNFSE9MREVSXG5URU1QX1BBU1NTT1JEX1dFQl9VUkxfUExBQ0VIT0xERVJcblxuIyBBUEkgc2V0dGluZ3NcbkFQSV9MT0dHSU5HPXRydWVcbiMgQXV0aCByYXRlLWxpbWl0IGtpbGwgc3dpdGNoIGZvciBsb2FkIHRlc3RpbmcuIFdoZW4gXCJ0cnVlXCIsIGFsbCBhdXRoIHJhdGVcbiMgbGltaXRlcnMgYmVjb21lIG5vLW9wcy4gRGVmYXVsdCBmYWxzZSAocmF0ZSBsaW1pdGluZyBPTikgLSBrZWVwIGZhbHNlIG9uIHByb2QuXG4jIERyaXZlbiBieSBkZXBsb3kueW1sIGZlYXR1cmVzLnJhdGVfbGltaXRfZGlzYWJsZWQ7IGZsaXAgdG8gdHJ1ZSBvbmx5IG9uIGFcbiMgUUEvbG9hZCBib3ggd2hpbGUgcnVubmluZyBsb2FkIHRlc3RzLCB0aGVuIGJhY2sgdG8gZmFsc2UuXG5SQVRFX0xJTUlUX0RJU0FCTEVEPXt7UkFURV9MSU1JVF9ESVNBQkxFRH19XG4jIFBlci1JUCBhdXRoIGxpbWl0ZXIgY2VpbGluZ3MgKHJlcXVlc3RzL21pbikuIEVtcHR5ID0gYmFja2VuZCBkZWZhdWx0c1xuIyAobG9naW4gMjAsIHNpZ251cCAxMCwgcGFzc3dvcmQgMTAsIHJlZnJlc2ggNjApLiBTZXQgZnJvbSBkZXBsb3kueW1sIGByYXRlX2xpbWl0c2AsXG4jIG9yIGF1dG8tcmFpc2VkIChsb2dpbiAxMjAsIHNpZ251cCAzMCkgd2hlbiB0aGUgaG9zdGVkIE1DUCBzZXJ2ZXIgaXMgZW5hYmxlZC5cblJBVEVfTElNSVRfQVVUSF9MT0dJTl9NQVg9e3tSQVRFX0xJTUlUX0FVVEhfTE9HSU5fTUFYfX1cblJBVEVfTElNSVRfQVVUSF9TSUdOVVBfTUFYPXt7UkFURV9MSU1JVF9BVVRIX1NJR05VUF9NQVh9fVxuUkFURV9MSU1JVF9BVVRIX1BBU1NXT1JEX01BWD17e1JBVEVfTElNSVRfQVVUSF9QQVNTV09SRF9NQVh9fVxuUkFURV9MSU1JVF9BVVRIX1JFRlJFU0hfTUFYPXt7UkFURV9MSU1JVF9BVVRIX1JFRlJFU0hfTUFYfX1cbiMgRmVlZGJhY2sgc3VibWlzc2lvbnMgcGVyIGNsaWVudCBJUC4gVGhlIGFub255bW91cyBjZWlsaW5nIGlzIHBlciBob3VyLCBub3QgcGVyXG4jIG1pbnV0ZTogYW4gdW5hdXRoZW50aWNhdGVkIHJlcG9ydCBpcyB0aGUgb25lIGEgZmlyc3QtdGltZSB1c2VyIHNlbmRzIG9uY2UuXG5SQVRFX0xJTUlUX0ZFRURCQUNLX01BWD17e1JBVEVfTElNSVRfRkVFREJBQ0tfTUFYfX1cblJBVEVfTElNSVRfRkVFREJBQ0tfQU5PTl9NQVg9e3tSQVRFX0xJTUlUX0ZFRURCQUNLX0FOT05fTUFYfX1cblxuIyBPQXV0aCAyLjEgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgZm9yIE1DUCBjb25uZWN0b3IgbGlzdGluZ3MgKENsYXVkZS5haSwgQ2hhdEdQVCkuXG4jIFB1YmxpYyBBUEkgYmFzZSBVUkwgdXNlZCBhcyB0aGUgaXNzdWVyLCBlLmcuIGh0dHBzOi8vYXBpLmNoYXQuZXhhbXBsZS5jb20uXG4jIFJlbmRlcmVkIHdoZW4gc2VydmljZXMubWNwLmVuYWJsZWQgaXMgdHJ1ZSAob3ZlcnJpZGU6IHNlcnZpY2VzLm1jcC5vYXV0aF9pc3N1ZXIpO1xuIyBibGFuayB0dXJucyB0aGUgL29hdXRoLyogYW5kIC8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlciByb3V0ZXMgb2ZmLlxuT0FVVEhfSVNTVUVSPXt7T0FVVEhfSVNTVUVSfX1cbiMgUmVmcmVzaC10b2tlbiBsaWZldGltZSwgaW4gZGF5cy4gRGVmYXVsdCA3LlxuUkVGUkVTSF9UT0tFTl9UVExfREFZUz17e1JFRlJFU0hfVE9LRU5fVFRMX0RBWVN9fVxuIyBXaGF0IHRvIGRvIHdoZW4gYW4gYWxyZWFkeS1yb3RhdGVkIHJlZnJlc2ggdG9rZW4gaXMgcHJlc2VudGVkIGFnYWluIChvdXRzaWRlIHRoZVxuIyAzMHMgZ3JhY2Ugd2luZG93KS4gVGhlIGV2ZW50IGlzIGFsd2F5cyBhdWRpdGVkOyB0aGlzIG9ubHkgY29udHJvbHMgdGhlIHJlc3BvbnNlLlxuIyAgIGxvZ19vbmx5ICAgICAgLSBkZWZhdWx0LiBBdWRpdCBpdCwgdGhlbiBoYW5kIHRoZSBjbGllbnQgdGhlIGN1cnJlbnQgdG9rZW4gc28gaXRcbiMgICAgICAgICAgICAgICAgICAga2VlcHMgd29ya2luZy4gRGV0ZWN0cyBub3RoaW5nLCBicmVha3Mgbm9ib2R5LiBSZXF1aXJlZCB3aGlsZSBhbnlcbiMgICAgICAgICAgICAgICAgICAgY2xpZW50IGNhbiBzdGlsbCByZWZyZXNoIGZyb20gdHdvIHBsYWNlcyBhdCBvbmNlIChlLmcuIGJyb3dzZXIgdGFic1xuIyAgICAgICAgICAgICAgICAgICB0aGF0IGRvIG5vdCBzaGFyZSBhIHJlZnJlc2ggbG9jaykgLSBvdGhlcndpc2UgcmVhbCB1c2VycyBnZXRcbiMgICAgICAgICAgICAgICAgICAgbG9nZ2VkIG91dCBhdCByYW5kb20uXG4jICAgcmVqZWN0ICAgICAgICAtIHJlZnVzZSB0aGUgc3RhbGUgdG9rZW47IG90aGVyIHNlc3Npb25zIGFyZSB1bnRvdWNoZWQuXG4jICAgcmV2b2tlX2ZhbWlseSAtIHRyZWF0IGl0IGFzIHRoZWZ0IGFuZCByZXZva2UgdGhlIHdob2xlIHJvdGF0aW9uIGNoYWluICh0aGUgc2Vzc2lvbnNcbiMgICAgICAgICAgICAgICAgICAgZGVzY2VuZGluZyBmcm9tIHRoYXQgb25lIGxvZ2luOyBvdGhlciBkZXZpY2VzIGFyZSB1bmFmZmVjdGVkKS5cbiMgICAgICAgICAgICAgICAgICAgU3dpdGNoIHRvIHRoaXMgb25seSBvbmNlIGV2ZXJ5IGNsaWVudCByZWZyZXNoZXMgdGhyb3VnaCBhIHNpbmdsZSBsb2NrLlxuUkVGUkVTSF9SRVVTRV9QT0xJQ1k9e3tSRUZSRVNIX1JFVVNFX1BPTElDWX19XG4jIEVtYWlsIFRMRCB2YWxpZGF0aW9uIHBvbGljeS4gQ29udHJvbHMgaG93IHN0cmljdGx5IEpvaSB2YWxpZGF0ZXMgdGhlIFRMRFxuIyBzZWdtZW50IG9mIGVtYWlsIGFkZHJlc3NlcyBvbiBzaWdudXAsIGxvZ2luLCBhbmQgYmF0Y2ggdXNlciBjcmVhdGlvbi5cbiMgICBvZmYgICAtIGRlZmF1bHQuIFN5bnRheC1vbmx5IGNoZWNrOyBhY2NlcHRzIGFueSBUTEQgKHJlY29tbWVuZGVkIGZvclxuIyAgICAgICAgICAgc2VsZi1ob3N0ZWQvZW50ZXJwcmlzZSBpbnN0YWxscyB0aGF0IGluZ2VzdCByZWFsLXdvcmxkIHVzZXJcbiMgICAgICAgICAgIGxpc3RzIHdpdGggdW5jb21tb24gZG9tYWlucywgZS5nLiAuaGVhbHRoLCAuYmFuaywgLnNvbikuXG4jICAgaWNhbm4gLSBKb2kgMTcgZGVmYXVsdC4gUmVqZWN0cyB1bmtub3duIC8gcmVzZXJ2ZWQgVExEcyBsaWtlXG4jICAgICAgICAgICAuZXhhbXBsZSwgLnRlc3QsIC5pbnZhbGlkLCAuc29uLlxuIyAgIGxpc3QgIC0gQWxsb3cgb25seSB0aGUgY29tbWEtc2VwYXJhdGVkIFRMRHMgaW4gRU1BSUxfVExEX0FMTE9XTElTVFxuIyAgICAgICAgICAgKGNhc2UtaW5zZW5zaXRpdmU7IGxlYWRpbmcgZG90IG9wdGlvbmFsOyBzdXBwb3J0cyBtdWx0aS1zZWdtZW50XG4jICAgICAgICAgICBwdWJsaWMgc3VmZml4ZXMgc3VjaCBhcyBjby51aykuXG5FTUFJTF9UTERfVkFMSURBVElPTj17e0VNQUlMX1RMRF9WQUxJREFUSU9OfX1cbkVNQUlMX1RMRF9BTExPV0xJU1Q9e3tFTUFJTF9UTERfQUxMT1dMSVNUfX1cbiMgU3dhZ2dlciBVSSAocHVibGljKVxuIyAtIEVuYWJsZWQgYnkgZGVmYXVsdC4gU2V0IEVOQUJMRV9TV0FHR0VSPWZhbHNlIHRvIGRpc2FibGUuXG5FTkFCTEVfU1dBR0dFUj17e0VOQUJMRV9TV0FHR0VSfX1cbiMgU3dhZ2dlciBVSSAoaW50ZXJuYWwvYWR2YW5jZWQpXG4jIC0gTXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQ7IHNob3VsZCByZW1haW4gZmFsc2UgZm9yIG1vc3QgaW5zdGFsbHMuXG5FTkFCTEVfU1dBR0dFUl9JTlRFUk5BTD17e0VOQUJMRV9TV0FHR0VSX0lOVEVSTkFMfX1cbiMgT3BlbkFQSS9Td2FnZ2VyIHZlcnNpb24gKHNob3duIGluIC9hcGktZG9jcy9zd2FnZ2VyLmpzb24gLT4gaW5mby52ZXJzaW9uKVxuIyBXZSB1c2UgYSBkYXRlLWJhc2VkIHZlcnNpb24gYnkgZGVmYXVsdDogeXkubW0uZGQgKFVUQykuXG5PUEVOQVBJX0lORk9fVkVSU0lPTj17e0VUSE9SQV9CVUlMRF9WRVJTSU9OfX1cblxuIyBCdWlsZCAvIHZlcnNpb24gaWRlbnRpdHkgKGZvciAvcGluZyBhbmQgL3BpbmcvdmVyc2lvbilcbkVUSE9SQV9CVUlMRF9DT01NSVQ9e3tFVEhPUkFfQlVJTERfQ09NTUlUfX1cbkVUSE9SQV9CVUlMRF9USU1FPXt7RVRIT1JBX0JVSUxEX1RJTUV9fVxuRVRIT1JBX0JVSUxEX1ZFUlNJT049e3tFVEhPUkFfQlVJTERfVkVSU0lPTn19XG5cbiMgQ0hBVCBTRVJWRVIgLyBYTVBQIFNFVFRJTkdTXG4jIElNUE9SVEFOVDpcbiMgLSBUaGUgZGVwbG95IGluaXQgc2NyaXB0IGNyZWF0ZXMgYW4gZWphYmJlcmQgYWRtaW4gYWNjb3VudCB3aXRoIGxvY2FscGFydCBgYWRtaW5gLlxuIyAtIFVzaW5nIGBhZG1pbkA8ZG9tYWluPmAgaGVyZSBjYW4gY2F1c2UgY29uZnVzaW9uOyBtb3N0IGVqYWJiZXJkIHRvb2xpbmcgZXhwZWN0cyBsb2NhbHBhcnQgb25seS5cblhNUFBfQURNSU49YWRtaW5cblhNUFBfUEFTUz17e1hNUFBfQURNSU5fUEFTU1dPUkR9fVxuWE1QUF9IT1NUPXt7WE1QUF9ET01BSU59fVxuIyBTaGFyZWQgSE1BQyBzZWNyZXQgZm9yIHRoZSBzaG9ydC1saXZlZCBYTVBQIFNBU0wgSldUIHRoZSBjbGllbnQgdXNlcyBpbnN0ZWFkIG9mXG4jIHRoZSByYXcgeG1wcFBhc3N3b3JkLiBlamFiYmVyZCB2YWxpZGF0ZXMgaXQgdmlhIGp3dF9rZXkgKHJlbmRlcmVkIGZyb20gdGhpcyBzYW1lXG4jIHNlY3JldCkuIEF1dG8tZ2VuZXJhdGVkICsgcGVyc2lzdGVkIGJ5IHRoZSBkZXBsb3kuXG5YTVBQX0pXVF9TRUNSRVQ9e3tYTVBQX0pXVF9TRUNSRVR9fVxuIyBYTVBQIEpXVCBsaWZldGltZXMgKGpzb253ZWJ0b2tlbiBkdXJhdGlvbiBzeW50YXg6IDEwbSAvIDMwbSAvIDFoIC8gMTAwZCkuXG4jIFVzZXIgdG9rZW5zIGFyZSByZS1pc3N1ZWQgd2l0aCBldmVyeSBhdXRoIHJlZnJlc2gsIHNvIGtlZXAgdGhlbSBzaG9ydC4gVGhlXG4jIHdpZGdldCB2aXNpdG9yIHRva2VuIHN0YXlzIGxvbmcgdW50aWwgdGhlIHdpZGdldCBsZWFybnMgdG8gcmUtcHJvdmlzaW9uIGFcbiMgc2Vzc2lvbiBvbiBTQVNMIGF1dGggZmFpbHVyZSAoYSBzaG9ydCBUVEwgc3RyYW5kcyByZWNvbm5lY3RpbmcgdmlzaXRvcnMpLlxuWE1QUF9KV1RfVFRMPXt7WE1QUF9KV1RfVFRMfX1cblhNUFBfSldUX1dJREdFVF9UVEw9e3tYTVBQX0pXVF9XSURHRVRfVFRMfX1cbiMgWE1QUCBwYXRocyB3aWxsIGJlIHNldCBiYXNlZCBvbiBsb2NhbGhvc3QgbW9kZVxuWE1QUF9QQVRIX1BMQUNFSE9MREVSXG5YTVBQX1NFUlZJQ0VfUExBQ0VIT0xERVJcblxuIyBEQVRBQkFTRVNcbk1PTkdPX1VSST1tb25nb2RiOi8vbG9jYWxob3N0Ont7TU9OR09fUE9SVH19L3t7TU9OR09fREJ9fT9kaXJlY3RDb25uZWN0aW9uPXRydWVcbiMgU2VwYXJhdGUgTW9uZ28gY29ubmVjdGlvbiBmb3IgdGhlIGNoYXQgbWVzc2FnZSBhcmNoaXZlIChzZWFyY2ggLyB1bnJlYWQpLlxuIyBUaGUgYE1lc3NhZ2VgIG1vZGVsIGNvbm5lY3RzIGhlcmU7IGVqYWJiZXJkJ3MgbW9kX3RyYWNrX21lc3NhZ2UgcG9zdHMgZXZlcnlcbiMgbWVzc2FnZSB0byAvdjEvY2hhdHMvYXJjaGl2ZS1tZXNzYWdlIHdoaWNoIHVwc2VydHMgaW50byB0aGlzIERCLiBTYW1lIE1vbmdvXG4jIGluc3RhbmNlLCBkZWRpY2F0ZWQgZGIgbmFtZSBzbyBhcmNoaXZlIHZvbHVtZSBkb2Vzbid0IG1peCB3aXRoIGFwcCBkYXRhLlxuQ0hBVF9EQVRBQkFTRT1tb25nb2RiOi8vbG9jYWxob3N0Ont7TU9OR09fUE9SVH19L2NoYXRfYXJjaGl2ZT9kaXJlY3RDb25uZWN0aW9uPXRydWVcblJFRElTX0hPU1Q9bG9jYWxob3N0XG5SRURJU19QT1JUPXt7UkVESVNfUE9SVH19XG5cbiMgUmVhZC1vbmx5IGFjY2VzcyB0byBlamFiYmVyZCdzIG1vZF9tYW0gYXJjaGl2ZSB0YWJsZSBpbiBNeVNRTC4gVGhlIGFkbWluXG4jIFwiQUkgV2lkZ2V0IGNvbnZlcnNhdGlvblwiIHZpZXdlciBxdWVyaWVzIGl0IHRvIHJlbmRlciB0aGUgbWVzc2FnZSBoaXN0b3J5XG4jIG9mIGEgd2lkZ2V0IE1VQyByb29tLiBXaXRob3V0IHRoZXNlIHNldCwgdGhlIHZpZXdlciBzdXJmYWNlc1xuIyBcIk1lc3NhZ2UgaGlzdG9yeSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGVwbG95bWVudFwiLiBUaGUgY3JlZGVudGlhbHNcbiMgYmVsb3cgbWF0Y2ggdGhlIHNhbWUgTXlTUUwgY29udGFpbmVyIGVqYWJiZXJkIHdyaXRlcyB0aGUgYXJjaGl2ZSB0b1xuIyAoZGVwbG95LW15c3FsLTEsIHJvb3QgdXNlciwgZGF0YWJhc2UgZWphYmJlcmRfZGIpLlxuTUFNX01ZU1FMX0hPU1Q9bG9jYWxob3N0XG5NQU1fTVlTUUxfUE9SVD17e01ZU1FMX1BPUlR9fVxuTUFNX01ZU1FMX1VTRVI9cm9vdFxuTUFNX01ZU1FMX1BBU1NXT1JEPXt7TVlTUUxfUk9PVF9QQVNTV09SRH19XG5NQU1fTVlTUUxfREFUQUJBU0U9ZWphYmJlcmRfZGJcblxuIyBCTE9DS0hBSU4gQU5EIEdBTUlGSUNBVElPTiBTRVRUSU5HU1xuQkxPQ0tDSEFJTl9FTkFCTEVEPXt7QkxPQ0tDSEFJTl9FTkFCTEVEfX1cbkdFVEhfV1NfSE9TVD0nd3M6Ly9sb2NhbGhvc3Q6ODU0NidcbkNPSU5CQVNFX1BSSVZBVEU9e3tDT0lOQkFTRV9QUklWQVRFfX1cblBSRUNSRUFURURfV0FMTEVUU19BTU9VTlQ9MzBcbk5FV19BUFBfV0FMTEVUX1NUQVJUX0JBTEFOQ0U9NTAwMFxuSU5JVF9DT0lOUz0xMDAwMDAwXG5DT0lOU19EQUlMWV9CT05VUz01XG5ORVdfVVNFUl9BUFBfREVGX1RPS0VOX0dJRlQ9MTAwXG5QTEFURk9STV9UT0tFTl9JTklUX1NVUFBMWT0xMDAwMDAwMDAwMDAwMDAwXG5QTEFURk9STV9UT0tFTl9OQU1FPURhcHByb3MgUGxhdGZvcm0gVG9rZW5cblBMQVRGT1JNX1RPS0VOX1NZTUJPTD1EUFRcbkJDX1NUQUNLX1NJWkU9MVxuQ1JZUFRPUEFJUl9TRUNSRVQ9VTJGc2RHVmtYMTkzdFJyUkoxd2E5aHVZMk9MWDBLeE5peGlkNlNxTTA9XG5cbiMgRXh0ZXJuYWwgYi9jIG5ldHdvcmsgc2V0dGluZ3NcbkVYVEVSTkFMX0JDX05FVFdPUktOQU1FPXt7RVhURVJOQUxfQkNfTkVUV09SS05BTUV9fVxuRVhURVJOQUxfQkNfV1M9e3tFWFRFUk5BTF9CQ19XU319XG5BTENIRU1ZPXt7QUxDSEVNWX19XG5VU0RDX0NPTlRSQUNUX0FERFJFU1M9e3tVU0RDX0NPTlRSQUNUX0FERFJFU1N9fVxuTkVXX0FQUF9DUkVBVEVfQ09TVD0xMFxuQ09JTlNfQU1PVU5UX0ZPUl9NT05USF9TVUJTQ1JJUFRJT049MTAwMFxuXG4jIFBBWU1FTlQgLyBTVFJJUEUgU0VUVElOR1NcblNUUklQRV9FTkFCTEVEPXt7U1RSSVBFX0VOQUJMRUR9fVxuU1RSSVBFX1NFQ1JFVD17e1NUUklQRV9TRUNSRVR9fVxuU1RSSVBFX1BVQkxJQz17e1NUUklQRV9QVUJMSUN9fVxuU1RSSVBFX1BMQU49e3tTVFJJUEVfUExBTn19XG5cbiMgRU1BSUwgU0VUVElOR1MgKFBvc3RtYXJrIC0gb3B0aW9uYWwpXG5QT1NUTUFSS19FTkFCTEVEPXt7UE9TVE1BUktfRU5BQkxFRH19XG5QT1NUTUFSS19UT0tFTj17e1BPU1RNQVJLX1RPS0VOfX1cblBPU1RNQVJLX0ZST01fRU1BSUw9e3tQT1NUTUFSS19GUk9NX0VNQUlMfX1cblBPU1RNQVJLX0ZST01fTkFNRT17e1BPU1RNQVJLX0ZST01fTkFNRX19XG5QT1NUTUFSS19TVUJKRUNUX1BSRUZJWD17e1BPU1RNQVJLX1NVQkpFQ1RfUFJFRklYfX1cblxuIyBGRUVEQkFDSyBDSEFOTkVMIChQT1NUIC92Mi9mZWVkYmFjayAtIG9wdGlvbmFsIGRlc3RpbmF0aW9ucylcbiMgQm90aCBibGFuayA9IHN1Ym1pc3Npb25zIGFyZSBzdG9yZWQgYW5kIG5vdGhpbmcgaXMgc2VudC4gRW1haWwgZGVsaXZlcnkgcmlkZXNcbiMgb24gdGhlIFBvc3RtYXJrIHNldHRpbmdzIGFib3ZlLCBzbyBpdCBzaWxlbnRseSBuby1vcHMgd2hlbiBQT1NUTUFSS19FTkFCTEVEIGlzXG4jIGZhbHNlLiBSZXRlbnRpb24gaXMgaW4gZGF5czsgMCBrZWVwcyBzdWJtaXNzaW9ucyB1bnRpbCB0aGV5IGFyZSBkZWxldGVkLlxuRkVFREJBQ0tfRU1BSUxfVE89e3tGRUVEQkFDS19FTUFJTF9UT319XG5GRUVEQkFDS19TTEFDS19XRUJIT09LX1VSTD17e0ZFRURCQUNLX1NMQUNLX1dFQkhPT0tfVVJMfX1cbkZFRURCQUNLX1JFVEVOVElPTl9EQVlTPXt7RkVFREJBQ0tfUkVURU5USU9OX0RBWVN9fVxuXG4jIEluLWFwcCBwdXJjaGFzZSB2ZXJpZmljYXRpb24gKG9wdGlvbmFsKVxuSUFQX0VOQUJMRUQ9e3tJQVBfRU5BQkxFRH19XG5cbiMgRmlyZWJhc2UgQWRtaW4gKG9wdGlvbmFsKVxuRklSRUJBU0VfRU5BQkxFRD17e0ZJUkVCQVNFX0VOQUJMRUR9fVxuRklSRUJBU0VfUFJPSkVDVF9OQU1FPXt7RklSRUJBU0VfUFJPSkVDVF9OQU1FfX1cbkZJUkVCQVNFX1NFUlZJQ0VfQUNDT1VOVF9QQVRIPXt7RklSRUJBU0VfU0VSVklDRV9BQ0NPVU5UX1BBVEh9fVxuRklSRUJBU0VfV0VCX0FQSV9LRVk9e3tGSVJFQkFTRV9XRUJfQVBJX0tFWX19XG5GSVJFQkFTRV9XRUJfQVVUSF9ET01BSU49e3tGSVJFQkFTRV9XRUJfQVVUSF9ET01BSU59fVxuRklSRUJBU0VfV0VCX1BST0pFQ1RfSUQ9e3tGSVJFQkFTRV9XRUJfUFJPSkVDVF9JRH19XG5GSVJFQkFTRV9XRUJfU1RPUkFHRV9CVUNLRVQ9e3tGSVJFQkFTRV9XRUJfU1RPUkFHRV9CVUNLRVR9fVxuRklSRUJBU0VfV0VCX01FU1NBR0lOR19TRU5ERVJfSUQ9e3tGSVJFQkFTRV9XRUJfTUVTU0FHSU5HX1NFTkRFUl9JRH19XG5GSVJFQkFTRV9XRUJfQVBQX0lEPXt7RklSRUJBU0VfV0VCX0FQUF9JRH19XG5GSVJFQkFTRV9XRUJfTUVBU1VSRU1FTlRfSUQ9e3tGSVJFQkFTRV9XRUJfTUVBU1VSRU1FTlRfSUR9fVxuXG4jIFB1c2ggbm90aWZpY2F0aW9ucyBzZXJ2aWNlIChGQ00pXG4jIEJhY2tlbmQgcm91dGVzIHVuZGVyIC92MS9wdXNoLyogcHJveHkgdG8gdGhpcyBzZXJ2aWNlLlxuUFVTSF9TRVJWRVJfVVJMPWh0dHA6Ly8xMjcuMC4wLjE6e3tQVVNIX1BPUlR9fVxuQjJCX1BVU0hfU0VDUkVUPXt7QjJCX1BVU0hfU0VDUkVUfX1cblxuIyBDRU5UUklGVUdPIChyZWFsLXRpbWUgc3RhdHMgY291bnRlcnMgaW4gYWRtaW4gZGFzaGJvYXJkKVxuIyBOb24tY3JpdGljYWw6IGJhY2tlbmQgdXNlcyBhIHNob3J0IHRpbWVvdXQgYW5kIGZpcmUtYW5kLWZvcmdldCBwdWJsaXNoaW5nIHNvIGFcbiMgbWlzY29uZmlndXJlZC9kb3duIENlbnRyaWZ1Z28gbmV2ZXIgYmxvY2tzIGxvZ2luIG9yIEFQSSByZXF1ZXN0cy5cbiMgRWFjaCBpbnN0YWxsIHJ1bnMgaXRzIG93biBDZW50cmlmdWdvIGNvbnRhaW5lciBsb2NhbGx5OyBiYWNrZW5kIHJlYWNoZXMgaXQgdmlhIGxvY2FsaG9zdC5cbkNFTlRSSUZVR09fRU5BQkxFRD17e0NFTlRSSUZVR09fRU5BQkxFRH19XG5DRU5UUklGVUdPX0FQSV9VUkw9aHR0cDovLzEyNy4wLjAuMTp7e0NFTlRSSUZVR09fUE9SVH19L2FwaVxuQ0VOVFJJRlVHT19BUElfS0VZPXt7Q0VOVFJJRlVHT19BUElfS0VZfX1cbkNFTlRSSUZVR09fSE1BQ19TRUNSRVQ9e3tDRU5UUklGVUdPX0hNQUNfU0VDUkVUfX1cbkNFTlRSSUZVR09fVElNRU9VVF9NUz17e0NFTlRSSUZVR09fVElNRU9VVF9NU319XG5cbiMgSW50ZXJuYWwgc2VydmljZS10by1zZXJ2aWNlIGF1dGggc2VjcmV0ICh1c2VkIGJ5IC9pbnRlcm5hbC9hdXRoL3ZlcmlmeSlcbklOVEVSTkFMX1JFUVVFU1RTX1NFQ1JFVD17e0lOVEVSTkFMX1JFUVVFU1RTX1NFQ1JFVH19XG5cbiMgRklMRVMgU1RPUkFHRVxuTUlOSU9fSE9TVD1sb2NhbGhvc3Rcbk1JTklPX1BPUlQ9OTAwMFxuTUlOSU9fQUNDRVNTX0tFWT17e01JTklPX1JPT1RfVVNFUn19XG5NSU5JT19TRUNSRVRfS0VZPXt7TUlOSU9fUk9PVF9QQVNTV09SRH19XG5NSU5JT19CVUNLRVQ9ZmlsZXNcbiMgTWluSU8gVVJMIHdpbGwgYmUgc2V0IGJhc2VkIG9uIGxvY2FsaG9zdCBtb2RlXG5NSU5JT19VUkxfUExBQ0VIT0xERVJcbiMgU2VjdXJlIGNoYXQgYXR0YWNobWVudHMgKGdhdGVkIGJ5IGNoYXQgbWVtYmVyc2hpcCkuIFRoZSBwcml2YXRlIGJ1Y2tldCBpc1xuIyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgb24gc3RhcnR1cDsgYW4gZW1wdHkgTUlOSU9fU0VDVVJFX1VSTCBkaXNhYmxlcyB0aGUgZmVhdHVyZS5cbk1JTklPX1NFQ1VSRV9CVUNLRVQ9e3tNSU5JT19TRUNVUkVfQlVDS0VUfX1cbk1JTklPX1NFQ1VSRV9VUkxfUExBQ0VIT0xERVJcbiMgUGFyZW50IGRvbWFpbiBmb3IgYXV0aCBjb29raWVzIHNvIHRoZSBmaWxlVG9rZW4gY29va2llIHJlYWNoZXMgdGhlIHNlY3VyZSBmaWxlc1xuIyBzdWJkb21haW4gKGUuZy4gLmV4YW1wbGUuY29tKS4gRW1wdHkgb24gbG9jYWxob3N0LlxuQVVUSF9DT09LSUVfRE9NQUlOX1BMQUNFSE9MREVSXG5cblNFQ1JFVF9GT1JfRklMRVNfRU5DUllQVElPTj1lNDk5OGU4OGYwYTdiNjEyYjUyYjkzOTZiMjQ5MjY5MGRhYmE2MDQzMTY4Y2ZlMmFjZGFhMTZiZmI1OGYwZTZmOjQzOGFiODVmZDVlMmEyMThmNzgzZmI1YzEwN2MxMzMxXG5TRUNSRVRfRk9SX0RCX0VOQ1JZUFRJT049ZDU0MjdjOWEwYTczMTNhNjBhNGVlMjI4YmVmZDA4MWY3YTg1ODc0ODMyZjllM2MwYWRkOTllOTBhODNmZDVhOTo3M2M5NWM2MWFhZDJiMGZkOTM4ZTFmNzA4ZDFhYzRiY1xuXG4jIEFOQUxZVElDUyBBTkQgUkVQT1JUSU5HXG5BTkFMWVRJQ1NfRU5BQkxFRD17e0FOQUxZVElDU19FTkFCTEVEfX1cbkRBSUxZX1JFUE9SVF9SRUNFSVZFUlM9e3tEQUlMWV9SRVBPUlRfUkVDRUlWRVJTfX1cbk1PTlRITFlfUkVQT1JUX1JFQ0VJVkVSUz17e01PTlRITFlfUkVQT1JUX1JFQ0VJVkVSU319XG5SRVBPUlRfREFJTFlfU0NIRURVTEU9e3tSRVBPUlRfREFJTFlfU0NIRURVTEV9fVxuUkVQT1JUX1dFRUtMWV9TQ0hFRFVMRT17e1JFUE9SVF9XRUVLTFlfU0NIRURVTEV9fVxuUkVQT1JUX01PTlRITFlfU0NIRURVTEU9e3tSRVBPUlRfTU9OVEhMWV9TQ0hFRFVMRX19XG5SRVBPUlRfVElNRVpPTkU9e3tSRVBPUlRfVElNRVpPTkV9fVxuVFJVU1RfQU5EX1NBRkVUWV9FTUFJTFM9e3tBRE1JTl9FTUFJTH19XG5MRUdBTF9DT05UQUNUX0VNQUlMPXt7TEVHQUxfQ09OVEFDVF9FTUFJTH19XG5BTEVSVF9SRUNJUElFTlRTPXt7QUxFUlRfUkVDSVBJRU5UU319XG5YTVBQX1NFQ1JFVD17e1hNUFBfU0VDUkVUfX1cblxuQUlfU0VSVklDRV9FTkFCTEVEPXt7QUlfU0VSVklDRV9FTkFCTEVEfX1cbkRPQ1NfUEFSU0VfRU5BQkxFRD17e0RPQ1NfUEFSU0VfRU5BQkxFRH19XG5DUkFXTEVSX0VOQUJMRUQ9e3tDUkFXTEVSX0VOQUJMRUR9fVxuXG5BSV9TRVJWSUNFX1VSTD1odHRwOi8vbG9jYWxob3N0Ont7QUlfU0VSVklDRV9QT1JUfX1cbkFJX1NFUlZJQ0VfU0VDUkVUPXt7QUlfU0VSVklDRV9TRUNSRVR9fVxuXG5DUkFXTEVSX1VSTD17e0NSQVdMRVJfVVJMfX1cbiMgU2hhcmVkIHNlY3JldCB0aGUgY3Jhd2xlciBwcmVzZW50cyBvbiBpdHMgcmVzdWx0IGNhbGxiYWNrIHRvXG4jIC92MS9zb3VyY2VzL3NpdGUtY3Jhd2wvaW50ZXJuYWwtZm9yLWNyYXdsZXIvOmFwcElkLCB3aGljaCBoYXMgbm8gYXV0aE13LlxuIyBSZW5kZXJlZCBmcm9tIHRoZSBzYW1lIC5kZXBsb3kuZW52IHZhbHVlIGFzIHRoZSBjcmF3bGVyJ3Mgb3duIGVudi5cbiMgSWYgZW1wdHksIHRoYXQgcm91dGUgcmVqZWN0cyBldmVyeSByZXF1ZXN0LlxuQ1JBV0xFUl9DQUxMQkFDS19TRUNSRVQ9e3tDUkFXTEVSX0NBTExCQUNLX1NFQ1JFVH19XG5cbkRPQ1NfUEFSU0VfVVJMPWh0dHA6Ly9sb2NhbGhvc3Q6e3tET0NTX1BBUlNFX1BPUlR9fVxuRE9DU19QQVJTRV9TRUNSRVQ9e3tET0NTX1BBUlNFX1NFQ1JFVH19XG5cbkNGX1RVUk5TVElMRV9TRUNSRVQ9e3tUVVJOU1RJTEVfU0VDUkVUX0tFWX19XG5cbiMgQnVpbGQvdmVyc2lvbiBpbmZvIGV4cG9zZWQgdmlhIC92MS9waW5nIGFuZCAvdjEvcGluZy92ZXJzaW9uLiBEZXJpdmVkIGZyb20gYGdpdCBsb2cgLTFgXG4jIG9uIHRoZSBkZXBsb3kgc291cmNlIHJlcG8gYXQgc2V0dXAtZW52LnNoIHRpbWUuIHl5Lm1tLmRkIGlzIHRoZSBsYXRlc3QgY29tbWl0IGRhdGUuXG5FVEhPUkFfQlVJTERfVkVSU0lPTj17e0JVSUxEX1ZFUlNJT059fVxuRVRIT1JBX0JVSUxEX0JSQU5DSD17e0JVSUxEX0JSQU5DSH19XG5FVEhPUkFfQlVJTERfQ09NTUlUPXt7QlVJTERfQ09NTUlUfX1cbkVUSE9SQV9CVUlMRF9USU1FPXt7QlVJTERfVElNRX19XG5cbiMgSFVCU1BPVCAoZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IgZW50ZXJwcmlzZTsgZXhwbGljaXRseSBlbmFibGUgaW4gZGVwbG95LnltbClcbkhVQlNQT1RfRU5BQkxFRD17e0hVQlNQT1RfRU5BQkxFRH19XG5IVUJTUE9UX1BPUlRBTF9JRD17e0hVQlNQT1RfUE9SVEFMX0lEfX1cbkhVQlNQT1RfRk9STV9JRF9BUFBfQ1JFQVRFPXt7SFVCU1BPVF9GT1JNX0lEX0FQUF9DUkVBVEV9fVxuSFVCU1BPVF9GT1JNX0lEX1NJR05VUD17e0hVQlNQT1RfRk9STV9JRF9TSUdOVVB9fVxuSFVCU1BPVF9GT1JNX0lEX1RVVE9SSUFMPXt7SFVCU1BPVF9GT1JNX0lEX1RVVE9SSUFMfX1cblxuIyBXRUJSVEMgLyBMaXZlS2l0ICh2aWRlby9hdWRpbyBjYWxscykuIFBvcHVsYXRlZCBmcm9tIGludGVncmF0aW9ucy5saXZla2l0XG4jIG9ubHkgd2hlbiBmZWF0dXJlcy52aWRlb19jYWxscyBpcyBlbmFibGVkOyBlbXB0eSBrZWVwcyBjYWxscyBpbmVydC5cbldFQlJUQ19IT1NUPXt7V0VCUlRDX0hPU1R9fVxuV0VCUlRDX0FQSV9LRVk9e3tXRUJSVENfQVBJX0tFWX19XG5XRUJSVENfQVBJX1NFQ1JFVD17e1dFQlJUQ19BUElfU0VDUkVUfX1cblxuIyBJTU1VVEFCTEUgQVVESVQgTE9HUyAodGFtcGVyLWV2aWRlbnQgbG9nIGV4cG9ydCB0byBTMykuXG4jIFBvcHVsYXRlZCBmcm9tIGludGVncmF0aW9ucy5pbW11dGFibGVfbG9ncyBvbmx5IHdoZW4gZmVhdHVyZXMuaW1tdXRhYmxlX2xvZ3NcbiMgaXMgZW5hYmxlZDsgYWxsIHZhbHVlcyBhcmUgZW1wdHkgb3RoZXJ3aXNlLCB3aGljaCBtdXN0IGtlZXAgdGhlIGxvZyB3cml0ZXIgYW5kXG4jIHRoZSBTMyB1cGxvYWRlciBpbmVydCAobm90aGluZyBzaG91bGQgcmVhY2ggb3V0IHRvIEFXUyBvbiBhIGZsYWctb2ZmIGluc3RhbGwpLlxuIyBUaGUgQVdTXyogbmFtZXMgYXJlIHByZWZpeGVkIG9uIHB1cnBvc2UgLSB1bnByZWZpeGVkIEFXU19BQ0NFU1NfS0VZX0lEIC9cbiMgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIC8gQVdTX1JFR0lPTiBhcmUgYXV0by1kZXRlY3RlZCBieSBldmVyeSBBV1MgU0RLIGluIHRoZVxuIyBwcm9jZXNzIGFuZCB3b3VsZCBzaWxlbnRseSByZXBvaW50IHVucmVsYXRlZCBTMy9NaW5JTyBjbGllbnRzLlxuSU1NVVRBQkxFX0xPR1NfRU5BQkxFRD17e0lNTVVUQUJMRV9MT0dTX0VOQUJMRUR9fVxuSU1NVVRBQkxFX0xPR1NfSU5URVJWQUxfSE9VUlM9e3tJTU1VVEFCTEVfTE9HU19JTlRFUlZBTF9IT1VSU319XG5JTU1VVEFCTEVfTE9HU19BV1NfQUNDRVNTX0tFWV9JRD17e0lNTVVUQUJMRV9MT0dTX0FXU19BQ0NFU1NfS0VZX0lEfX1cbklNTVVUQUJMRV9MT0dTX0FXU19TRUNSRVRfQUNDRVNTX0tFWT17e0lNTVVUQUJMRV9MT0dTX0FXU19TRUNSRVRfQUNDRVNTX0tFWX19XG5JTU1VVEFCTEVfTE9HU19BV1NfUkVHSU9OPXt7SU1NVVRBQkxFX0xPR1NfQVdTX1JFR0lPTn19XG5JTU1VVEFCTEVfTE9HU19BV1NfUzNfQlVDS0VUX05BTUU9e3tJTU1VVEFCTEVfTE9HU19BV1NfUzNfQlVDS0VUX05BTUV9fVxuXG4jIFRSQU5TTEFUSU9OIFNFUlZFUiBMQU5HVUFHRVMgKGRlcGxveS55bWwgYHRyYW5zbGF0ZS5sYW5ndWFnZXNgKS5cbiMgV2hhdCB0aGUgc2VwYXJhdGVseS1pbnN0YWxsZWQgdHJhbnNsYXRpb24gc2VydmVyIGNhbiB0cmFuc2xhdGUgSU5UTywgYXNcbiMgQkNQLTQ3IHRhZ3MuIFRoaXMgaXMgdGhlIE9OTFkgbGFuZ3VhZ2UgbGlzdCB0aGUgQVBJIHNlcnZlcyB0byBjbGllbnRzOiBpdFxuIyBmZWVkcyBib3RoIHRoZSBpbnRlcmZhY2UgcGlja2VyIChuYXJyb3dlZCB0byBsb2NhbGVzIHRoZSB3ZWIgYnVuZGxlIHNoaXBzXG4jIGRpY3Rpb25hcmllcyBmb3IpIGFuZCB0aGUgY2hhdCB0cmFuc2xhdGlvbiBwaWNrZXIgKHVzZWQgd2hvbGUpLCBhbmQgaXQgaXNcbiMgd2hhdCB1c2VyIGxhbmd1YWdlIHdyaXRlcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QuXG4jXG4jIFRoZSBBUEkgZG9lcyBub3QgcmVhZCB0aGlzIGVudiBhdCByZXF1ZXN0IHRpbWUgLSBpbml0LXNlcnZpY2VzLnNoIHB1c2hlcyBpdFxuIyBpbnRvIE1vbmdvIChpbnN0YWxsU2V0dGluZ3MpIG9uIGV2ZXJ5IGluc3RhbGwgLyB1cGRhdGUsIGFuZCBnZXQtY29uZmlnIHNlcnZlc1xuIyBpdCBmcm9tIHRoZXJlLCBiZWNhdXNlIGdldC1jb25maWcgaXMgdGhlIHVuYXV0aGVudGljYXRlZCBib290c3RyYXAgY2FsbCBhbmRcbiMgb3RoZXIgc2VydmljZXMgbmVlZCB0aGUgdmFsdWUgYXMgZGF0YS4gSXQgaXMgcmVuZGVyZWQgaGVyZSBzbyB0aGUgc3luYyBzdGVwXG4jIGhhcyBhIHNpbmdsZSByZW5kZXJlZCBzb3VyY2UgYW5kIHNvIG9wZXJhdG9ycyBjYW4gc2VlIHRoZSBjb25maWd1cmVkIHZhbHVlXG4jIG5leHQgdG8gdGhlIHJlc3Qgb2YgdGhlIGJhY2tlbmQgY29uZmlnLiBFbXB0eSAtPiBgdHJhbnNsYXRlTGFuZ3VhZ2VzOiBbXWAuXG5UUkFOU0xBVEVfTEFOR1VBR0VTPXt7VFJBTlNMQVRFX0xBTkdVQUdFU319XG5cbiMgTElDRU5TRSAoZGVwbG95LnltbCBgbGljZW5zZTpgKS4gU2VlIGRvY3MvTElDRU5TSU5HLm1kLlxuIyBFVEhPUkFfTElDRU5TRV9LRVkgd2lucyBvdmVyIGEga2V5IHVwbG9hZGVkIHRocm91Z2ggdGhlIGFkbWluIHBhbmVsLiBXaXRoXG4jIG5laXRoZXIsIHRoZSBiYWNrZW5kIHJ1bnMgYSBncmFjZSB3aW5kb3cgZnJvbSBmaXJzdCBib290LCB0aGVuIHJlc3RyaWN0c1xuIyBhcHAvdXNlciBjcmVhdGlvbi4gRVRIT1JBX0xJQ0VOU0VEX0hPU1RTIGlzIHdoYXQgdGhlIGtleSdzIGRvbWFpbiBpcyBjaGVja2VkXG4jIGFnYWluc3Q7IGl0IGlzIGRlcml2ZWQgZnJvbSBkZXBsb3kueW1sIGBkb21haW5zOmAgYW5kIHNob3VsZCBub3QgYmUgZWRpdGVkLlxuRVRIT1JBX0xJQ0VOU0VfS0VZPXt7RVRIT1JBX0xJQ0VOU0VfS0VZfX1cbkVUSE9SQV9MSUNFTlNFX0NBTExfSE9NRT17e0VUSE9SQV9MSUNFTlNFX0NBTExfSE9NRX19XG5FVEhPUkFfTElDRU5TRV9TRVJWRVJfVVJMPXt7RVRIT1JBX0xJQ0VOU0VfU0VSVkVSX1VSTH19XG5FVEhPUkFfTElDRU5TRV9HUkFDRV9EQVlTPXt7RVRIT1JBX0xJQ0VOU0VfR1JBQ0VfREFZU319XG5FVEhPUkFfTElDRU5TRURfSE9TVFM9e3tBUElfRE9NQUlOfX0se3tXRUJfRE9NQUlOfX0se3tYTVBQX0RPTUFJTn19LHt7RklMRVNfRE9NQUlOfX1cblxuIyBQcm9tZXRoZXVzIHJlcXVlc3QgbWV0cmljcyBvbiBHRVQgL21ldHJpY3MgKGNvdW50cyArIGxhdGVuY3kgaGlzdG9ncmFtIHBlclxuIyByb3V0ZSkuIFNjcmFwZWQgYnkgdGhlIG1vbml0b3Jpbmcgc3RhY2sgb3ZlciB0aGUgaG9zdCBwb3J0OyBuZ2lueCBrZWVwcyB0aGVcbiMgcGF0aCBvZmYgdGhlIHB1YmxpYyBBUEkgaG9zdC5cbkVOQUJMRV9NRVRSSUNTPXRydWVcbicnJ1xuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi90ZW1wbGF0ZXMvZnJvbnRlbmQuZW52LnRlbXBsYXRlXCJcbmNvbnRlbnQgPSAnJydcbiMgQVBJIFVSTHMgd2lsbCBiZSBzZXQgYmFzZWQgb24gbG9jYWxob3N0IG1vZGVcblZJVEVfQVBJX1BMQUNFSE9MREVSXG5WSVRFX0FQSV9WMl9QTEFDRUhPTERFUlxuVklURV9ST09UX0RPTUFJTj17e1JPT1RfRE9NQUlOfX1cblZJVEVfV0VCX0RPTUFJTj17e1dFQl9ET01BSU59fVxuVklURV9IT1NURURfQVBQU19ST09UX0RPTUFJTj17e0hPU1RFRF9BUFBTX1JPT1RfRE9NQUlOfX1cblZJVEVfRE9NQUlOX05BTUU9e3tET01BSU5fTkFNRX19XG4jIEJyYW5kIG5hbWUgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gbm8gcGVyLXJvdXRlIC8gcGVyLWFwcCB0aXRsZSBpcyBzZXQsXG4jIGFuZCBhcyB0aGUgYnJhbmQtc3VmZml4IG9uIHRlbmFudC1sZXZlbCBhZG1pbiB0aXRsZXMuIERlZmF1bHRzIHRvIHRoZVxuIyBiYXNlIGFwcCdzIGRpc3BsYXlfbmFtZSBmcm9tIGRlcGxveS55bWwgKGUuZy4gXCJFdGhvcmFcIiBmb3IgZXRob3JhLmNvbSxcbiMgdGhlIGVudGVycHJpc2UgY3VzdG9tZXIncyBicmFuZCBuYW1lIGZvciB3aGl0ZS1sYWJlbGVkIGluc3RhbGxzKS5cblZJVEVfUExBVEZPUk1fTkFNRT17e0JBU0VfQVBQX0RJU1BMQVlfTkFNRX19XG5WSVRFX1NJVEVfSVNfUFJPRFVDVElPTj10cnVlXG57eyNpZiBTVFJJUEVfRU5BQkxFRH19XG5WSVRFX1NUUklQRV9QVUJMSUNLX0tFWT17e1NUUklQRV9QVUJMSUN9fVxue3svaWZ9fVxuVklURV9BUFBfQUxMT1dFRF9ET01BSU5TPXt7V0VCX0RPTUFJTn19LGxvY2FsaG9zdFxuVklURV9BUFBfVVRNX0tFWVM9dXRtX3NvdXJjZSx1dG1fbWVkaXVtLHV0bV9jYW1wYWlnbix1dG1fdGVybSx1dG1fY29udGVudFxuIyBYTVBQIHNlcnZpY2Ugd2lsbCBiZSBzZXQgYmFzZWQgb24gbG9jYWxob3N0IG1vZGVcblZJVEVfQVBQX1hNUFBfU0VSVklDRV9QTEFDRUhPTERFUlxuVklURV9BUFBfQ0VOVFJJRlVHRV9TRVJWSUNFX1BMQUNFSE9MREVSXG5WSVRFX1hNUFBfU0VSVklDRT1jb25mZXJlbmNlLnt7WE1QUF9ET01BSU59fVxuVklURV9YTVBQX0hPU1Q9e3tYTVBQX0RPTUFJTn19XG5WSVRFX1dJREdFVF9VUkw9e3tXSURHRVRfVVJMfX1cblZJVEVfV0lER0VUX1ZFUlNJT05FRF9VUkw9e3tXSURHRVRfVkVSU0lPTkVEX1VSTH19XG5WSVRFX1dJREdFVF9TQ1JJUFRfVkVSU0lPTj17e1dJREdFVF9TQ1JJUFRfVkVSU0lPTn19XG5WSVRFX1FSX1VSTD17e1dJREdFVF9RUl9VUkx9fVxuIyBBSSBmZWF0dXJlIHVtYnJlbGxhIHN1cmZhY2VkIHRvIHRoZSBhZG1pbiBVSS4gV2hlbiBcImZhbHNlXCIsIHRoZSBBZ2VudHNcbiMgdG9wLWxldmVsIHRhYiBhbmQgdGhlIEFJIFdpZGdldCB0YWIgdW5kZXIgQXBwIFNldHRpbmdzIHJlbmRlciBpbiBhXG4jIGRpc2FibGVkIHN0YXRlICh2aXNpYmxlIGJ1dCByZWFkLW9ubHkgLyBub24tY2xpY2thYmxlKSBzbyBvcGVyYXRvcnMgb25cbiMgbm9uLUFJIGRlcGxveW1lbnRzIHVuZGVyc3RhbmQgd2hhdCdzIGF2YWlsYWJsZSB3aXRob3V0IGJlaW5nIGFibGUgdG9cbiMgY29uZmlndXJlIGZlYXR1cmVzIHRoZWlyIGluc3RhbGwgZG9lc24ndCBzaGlwLlxuVklURV9BSV9GRUFUVVJFX0VOQUJMRUQ9e3tBSV9GRUFUVVJFX0VOQUJMRUR9fVxuIyBWaWRlby9hdWRpbyBjYWxscyAoTGl2ZUtpdCkuIENvbnN1bWVkIGJ5IHRoZSBjaGF0LWNvbXBvbmVudCB2aWRlb0NhbGxzXG4jIGNvbmZpZyBzd2l0Y2guIE5vIGVmZmVjdCB1bmxlc3MgdGhlIGRlcGxveWVkIGNoYXQtY29tcG9uZW50IGJ1aWxkIGluY2x1ZGVzXG4jIHRoZSBjYWxscyBmZWF0dXJlLiBEcml2ZW4gYnkgZmVhdHVyZXMudmlkZW9fY2FsbHMgaW4gZGVwbG95LnltbC5cblZJVEVfVklERU9fQ0FMTFNfRU5BQkxFRD17e1ZJREVPX0NBTExTX0VOQUJMRUR9fVxuIyBFbmQtdG8tZW5kIGVuY3J5cHRpb24gKE9NRU1PIDIpLiBDb25zdW1lZCBieSB0aGUgY2hhdC1jb21wb25lbnQgZTJlZVxuIyBjb25maWcgc3dpdGNoLiBPZmYgbWVhbnMgbm8ga2V5cyBhcmUgZ2VuZXJhdGVkIGFuZCBzdGFuemFzIGFyZSBidWlsdFxuIyBleGFjdGx5IGFzIGJlZm9yZTsgb24sIG1lc3NhZ2VzIGFyZSBlbmNyeXB0ZWQgaW4gcm9vbXMgdGhlIGJhY2tlbmQgbWFya3NcbiMgYGUyZWVgIGFuZCBldmVyeSBvdGhlciByb29tIHN0YXlzIHBsYWluLiBEcml2ZW4gYnkgZmVhdHVyZXMuZTJlZSBpblxuIyBkZXBsb3kueW1sLCBhbmQgbmVlZHMgYW4gZWphYmJlcmQgd2hvc2UgUEVQIGFjY2Vzc19tb2RlbCBsZXRzIHJvb21cbiMgbWVtYmVycyByZWFkIGVhY2ggb3RoZXIncyBPTUVNTyBub2Rlcy5cbiNcbiMgSW5zdGFsbCBnYXRlIG9ubHk6IHRoZSBmcm9udGVuZCBBTkRzIHRoaXMgd2l0aCB0aGUgcGVyLWFwcCBgZTJlZUVuYWJsZWRgXG4jIGl0IHJlYWRzIGZyb20gR0VUIC9hcHBzL2dldC1jb25maWcsIHNvIGB0cnVlYCBoZXJlIHN1cmZhY2VzIHRoZSBzZXR0aW5nIHRvXG4jIGFwcCBvd25lcnMgcmF0aGVyIHRoYW4gZW5hYmxpbmcgZW5jcnlwdGlvbiBmb3IgZXZlcnkgYXBwLlxuVklURV9FMkVFX0VOQUJMRUQ9e3tFMkVFX0VOQUJMRUR9fVxuIyBMaXZlS2l0IHNlcnZlciBVUkwgZm9yIHZpZGVvL2F1ZGlvIGNhbGxzIChpbnRlZ3JhdGlvbnMubGl2ZWtpdC51cmwpLlxuVklURV9MSVZFS0lUX1VSTD17e0xJVkVLSVRfVVJMfX1cblZJVEVfU0lURV9LRVk9e3tUVVJOU1RJTEVfU0lURV9LRVl9fVxuXG4jIEFuYWx5dGljcyBhbmQgU2VydmljZXMgKHNldCB0byAndHJ1ZScgdG8gZGlzYWJsZSBmb3IgbG9jYWwvZW50ZXJwcmlzZSBzZXR1cHMpXG5WSVRFX0RJU0FCTEVfRklSRUJBU0U9e3tESVNBQkxFX0ZJUkVCQVNFfX1cblZJVEVfRElTQUJMRV9HQT17e0RJU0FCTEVfR0F9fVxuVklURV9ESVNBQkxFX0NMQVJJVFk9e3tESVNBQkxFX0NMQVJJVFl9fVxuXG4jIFdlYiBwdXNoIChGQ00pLiBQbGF0Zm9ybSBGaXJlYmFzZSB3ZWItYXBwIGNvbmZpZyB1c2VkIGJ5IHRoZSBjaGF0IHB1c2hcbiMgbm90aWZpY2F0aW9ucyBzZXJ2aWNlIHdvcmtlci4gU291cmNlZCBmcm9tIGludGVncmF0aW9ucy5maXJlYmFzZS53ZWIgaW5cbiMgZGVwbG95LnltbCAodGhlIHNhbWUgcHJvamVjdCBhcyBiYXNlLWFwcCBzb2NpYWwgbG9naW4pLiBQdXNoIGlzIGFsc29cbiMgZG9tYWluLWdhdGVkIGJ5IFZJVEVfQVBQX0FMTE9XRURfRE9NQUlOUzsgbGVhdmUgdGhlIHByb2plY3QgYmxhbmsgaW5cbiMgZGVwbG95LnltbCB0byBrZWVwIHB1c2ggZGlzYWJsZWQuXG5WSVRFX0ZJUkVCQVNFX0FQSV9LRVk9e3tGSVJFQkFTRV9XRUJfQVBJX0tFWX19XG5WSVRFX0ZJUkVCQVNFX0FVVEhfRE9NQUlOPXt7RklSRUJBU0VfV0VCX0FVVEhfRE9NQUlOfX1cblZJVEVfRklSRUJBU0VfUFJPSkVDVF9JRD17e0ZJUkVCQVNFX1dFQl9QUk9KRUNUX0lEfX1cblZJVEVfRklSRUJBU0VfU1RPUkFHRV9CVUNLRVQ9e3tGSVJFQkFTRV9XRUJfU1RPUkFHRV9CVUNLRVR9fVxuVklURV9GSVJFQkFTRV9NRVNTQUdJTkdfU0VOREVSX0lEPXt7RklSRUJBU0VfV0VCX01FU1NBR0lOR19TRU5ERVJfSUR9fVxuVklURV9GSVJFQkFTRV9BUFBfSUQ9e3tGSVJFQkFTRV9XRUJfQVBQX0lEfX1cblZJVEVfRklSRUJBU0VfTUVBU1VSRU1FTlRfSUQ9e3tGSVJFQkFTRV9XRUJfTUVBU1VSRU1FTlRfSUR9fVxuIyBWQVBJRCBwdWJsaWMga2V5OiBGaXJlYmFzZSBDb25zb2xlID4gUHJvamVjdCBTZXR0aW5ncyA+IENsb3VkIE1lc3NhZ2luZyA+XG4jIFdlYiBQdXNoIGNlcnRpZmljYXRlcyAoa2V5IHBhaXIpLiBSZXF1aXJlZCBmb3IgdGhlIGJyb3dzZXIgdG8gb2J0YWluIGFuXG4jIEZDTSB0b2tlbjsgd2l0aG91dCBpdCBwdXNoIHN1YnNjcmlwdGlvbiBmYWlscy5cblZJVEVfVkFQSURfUFVCTElDX0tFWT17e0ZJUkVCQVNFX1dFQl9WQVBJRF9QVUJMSUNfS0VZfX1cblxuIyBUcmFja2luZyBJRHMgKG9wdGlvbmFsOyBsZWF2ZSBlbXB0eSBmb3IgZW50ZXJwcmlzZSlcblZJVEVfR0FfSUQ9e3tHQV9JRH19XG5WSVRFX0dUTV9JRD17e0dUTV9JRH19XG5WSVRFX0NMQVJJVFlfSUQ9e3tDTEFSSVRZX0lEfX1cblZJVEVfUE9TVEhPR19LRVk9e3tQT1NUSE9HX0tFWX19XG5WSVRFX1BPU1RIT0dfSE9TVD17e1BPU1RIT0dfSE9TVH19XG5cbiMgQnVpbGQvdmVyc2lvbiBpbmZvIChzaG93biBpbiB0aGUgdGlueSBmb290ZXIgb24gYXV0aCBzY3JlZW5zKS4gRGVyaXZlZCBmcm9tIGBnaXQgbG9nIC0xYFxuIyBvbiB0aGUgZGVwbG95IHNvdXJjZSByZXBvIGF0IHNldHVwLWVudi5zaCB0aW1lLiB5eS5tbS5kZCBpcyB0aGUgbGF0ZXN0IGNvbW1pdCBkYXRlLlxuVklURV9CVUlMRF9WRVJTSU9OPXt7QlVJTERfVkVSU0lPTn19XG5WSVRFX0JVSUxEX0JSQU5DSD17e0JVSUxEX0JSQU5DSH19XG5WSVRFX0JVSUxEX0NPTU1JVD17e0JVSUxEX0NPTU1JVH19XG5cbiMgSHViU3BvdCAob3B0aW9uYWw7IGRpc2FibGVkIGJ5IGRlZmF1bHQgZm9yIGVudGVycHJpc2UpXG5WSVRFX0hVQlNQT1RfRU5BQkxFRD17e0hVQlNQT1RfRU5BQkxFRH19XG5WSVRFX0hVQlNQT1RfUE9SVEFMX0lEPXt7SFVCU1BPVF9QT1JUQUxfSUR9fVxuVklURV9IVUJTUE9UX0ZPUk1fSURfQVBQX0NSRUFURT17e0hVQlNQT1RfRk9STV9JRF9BUFBfQ1JFQVRFfX1cblZJVEVfSFVCU1BPVF9GT1JNX0lEX1NJR05VUD17e0hVQlNQT1RfRk9STV9JRF9TSUdOVVB9fVxuVklURV9IVUJTUE9UX0ZPUk1fSURfVFVUT1JJQUw9e3tIVUJTUE9UX0ZPUk1fSURfVFVUT1JJQUx9fVxuVklURV9IVUJTUE9UX1JFR0lPTj17e0hVQlNQT1RfUkVHSU9OfX1cblxuIyBIb3N0ZWQgTUNQIHNlcnZlciBwdWJsaWMgZW5kcG9pbnQgKGJsYW5rIHdoZW4gc2VydmljZXMubWNwIGlzIGRpc2FibGVkKTsgZHJpdmVzIHRoZVxuIyBcIkFJIGFzc2lzdGFudHNcIiBzZXR0aW5ncyBwYWdlIChwZXJzb25hbCBjb25uZWN0b3IgVVJMcyBhbmQgY2xpZW50IHNuaXBwZXRzKS5cblZJVEVfTUNQX1BVQkxJQ19VUkw9e3tNQ1BfUFVCTElDX1VSTH19XG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdGVtcGxhdGVzL2NlbnRyaWZ1Z28tY29uZmlnLmpzb24udGVtcGxhdGVcIlxuY29udGVudCA9ICcnJ1xue1xuICAgIFwiY2xpZW50XCI6IHtcbiAgICAgICAgXCJ0b2tlblwiOiB7XG4gICAgICAgICAgICBcImhtYWNfc2VjcmV0X2tleVwiOiBcInt7Q0VOVFJJRlVHT19ITUFDX1NFQ1JFVH19XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxvd2VkX29yaWdpbnNcIjogW1xuICAgICAgICAgICAgXCIqXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJzdWJzY3JpYmVfdG9fdXNlcl9wZXJzb25hbF9jaGFubmVsXCI6IHtcbiAgICAgICAgICAgIFwiZW5hYmxlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJzaW5nbGVfY29ubmVjdGlvblwiOiBmYWxzZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcImh0dHBfYXBpXCI6IHtcbiAgICAgICAgXCJrZXlcIjogXCJ7e0NFTlRSSUZVR09fQVBJX0tFWX19XCJcbiAgICB9LFxuICAgIFwiaGVhbHRoXCI6IHtcbiAgICAgICAgXCJlbmFibGVkXCI6IHRydWVcbiAgICB9LFxuICAgIFwiYWRtaW5cIjoge1xuICAgICAgICBcInBhc3N3b3JkXCI6IFwie3tDRU5UUklGVUdPX0FETUlOX1BBU1NXT1JEfX1cIixcbiAgICAgICAgXCJzZWNyZXRcIjogXCJ7e0NFTlRSSUZVR09fQURNSU5fU0VDUkVUfX1cIixcbiAgICAgICAgXCJlbmFibGVkXCI6IHRydWVcbiAgICB9LFxuICAgIFwiY2hhbm5lbFwiOiB7XG4gICAgICAgIFwid2l0aG91dF9uYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJhbGxvd19zdWJzY3JpYmVfZm9yX2NsaWVudFwiOiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJuYW1lc3BhY2VzXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJwdWJsaWNcIixcbiAgICAgICAgICAgICAgICBcInByZXNlbmNlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJhbGxvd19zdWJzY3JpYmVfZm9yX2NsaWVudFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwiam9pbl9sZWF2ZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwiZm9yY2VfcHVzaF9qb2luX2xlYXZlXCI6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH1cbn1cbicnJyIKfQ==

Configuration

The exact Docker Compose and template configuration this template deploys.

Related Templates

Self-host Ethora Core in minutes

Dokploy is a free, open source deployment platform. Deploy Ethora Core and 567+ other templates on your own infrastructure with a single click.