Back to Templates
SupaBase logo

SupaBase

v1.25.04 / dokploy < 0.22.5

The open source Firebase alternative. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. This is for dokploy version < 0.22.5.

Deploy on Dokploy

Deploy SupaBase 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 SupaBase 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
ewogICJjb21wb3NlIjogIiMgVXNhZ2VcbiMgICBTdGFydDogICAgICAgICAgICAgIGRvY2tlciBjb21wb3NlIHVwXG4jICAgV2l0aCBoZWxwZXJzOiAgICAgICBkb2NrZXIgY29tcG9zZSAtZiBkb2NrZXItY29tcG9zZS55bWwgLWYgLi9kZXYvZG9ja2VyLWNvbXBvc2UuZGV2LnltbCB1cFxuIyAgIFN0b3A6ICAgICAgICAgICAgICAgZG9ja2VyIGNvbXBvc2UgZG93blxuIyAgIERlc3Ryb3k6ICAgICAgICAgICAgZG9ja2VyIGNvbXBvc2UgLWYgZG9ja2VyLWNvbXBvc2UueW1sIC1mIC4vZGV2L2RvY2tlci1jb21wb3NlLmRldi55bWwgZG93biAtdiAtLXJlbW92ZS1vcnBoYW5zXG4jICAgUmVzZXQgZXZlcnl0aGluZzogIC4vcmVzZXQuc2hcblxubmFtZTogc3VwYWJhc2Vcblxuc2VydmljZXM6XG5cbiAgc3R1ZGlvOlxuICAgIGNvbnRhaW5lcl9uYW1lOiAke0NPTlRBSU5FUl9QUkVGSVh9LXN0dWRpb1xuICAgIGltYWdlOiBzdXBhYmFzZS9zdHVkaW86MjAyNS4wNC4yMS1zaGEtMTczY2M1NlxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICBbXG4gICAgICAgICAgXCJDTURcIixcbiAgICAgICAgICBcIm5vZGVcIixcbiAgICAgICAgICBcIi1lXCIsXG4gICAgICAgICAgXCJmZXRjaCgnaHR0cDovL3N0dWRpbzozMDAwL2FwaS9wbGF0Zm9ybS9wcm9maWxlJykudGhlbigocikgPT4ge2lmIChyLnN0YXR1cyAhPT0gMjAwKSB0aHJvdyBuZXcgRXJyb3Ioci5zdGF0dXMpfSlcIlxuICAgICAgICBdXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogM1xuICAgIGRlcGVuZHNfb246XG4gICAgICBhbmFseXRpY3M6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBTVFVESU9fUEdfTUVUQV9VUkw6IGh0dHA6Ly9tZXRhOjgwODBcbiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuXG4gICAgICBERUZBVUxUX09SR0FOSVpBVElPTl9OQU1FOiAke1NUVURJT19ERUZBVUxUX09SR0FOSVpBVElPTn1cbiAgICAgIERFRkFVTFRfUFJPSkVDVF9OQU1FOiAke1NUVURJT19ERUZBVUxUX1BST0pFQ1R9XG4gICAgICBPUEVOQUlfQVBJX0tFWTogJHtPUEVOQUlfQVBJX0tFWTotfVxuXG4gICAgICBTVVBBQkFTRV9VUkw6ICR7U1VQQUJBU0VfUFVCTElDX1VSTH1cbiAgICAgIFNVUEFCQVNFX1BVQkxJQ19VUkw6ICR7U1VQQUJBU0VfUFVCTElDX1VSTH1cbiAgICAgIFNVUEFCQVNFX0FOT05fS0VZOiAke0FOT05fS0VZfVxuICAgICAgU1VQQUJBU0VfU0VSVklDRV9LRVk6ICR7U0VSVklDRV9ST0xFX0tFWX1cbiAgICAgIEFVVEhfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuXG4gICAgICBMT0dGTEFSRV9BUElfS0VZOiAke0xPR0ZMQVJFX0FQSV9LRVl9XG4gICAgICBMT0dGTEFSRV9VUkw6IGh0dHA6Ly9hbmFseXRpY3M6NDAwMFxuICAgICAgTkVYVF9QVUJMSUNfRU5BQkxFX0xPR1M6IHRydWVcbiAgICAgICMgQ29tbWVudCB0byB1c2UgQmlnIFF1ZXJ5IGJhY2tlbmQgZm9yIGFuYWx5dGljc1xuICAgICAgTkVYVF9BTkFMWVRJQ1NfQkFDS0VORF9QUk9WSURFUjogcG9zdGdyZXNcbiAgICAgICMgVW5jb21tZW50IHRvIHVzZSBCaWcgUXVlcnkgYmFja2VuZCBmb3IgYW5hbHl0aWNzXG4gICAgICAjIE5FWFRfQU5BTFlUSUNTX0JBQ0tFTkRfUFJPVklERVI6IGJpZ3F1ZXJ5XG5cbiAga29uZzpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS1rb25nXG4gICAgaW1hZ2U6IGtvbmc6Mi44LjFcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgICMgcG9ydHM6XG4gICAgIyAgIC0gJHtLT05HX0hUVFBfUE9SVH06ODAwMC90Y3BcbiAgICAjICAgLSAke0tPTkdfSFRUUFNfUE9SVH06ODQ0My90Y3BcbiAgICBleHBvc2U6XG4gICAgICAtIDgwMDBcbiAgICAgIC0gODQ0M1xuICAgIHZvbHVtZXM6XG4gICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9zdXBhYmFzZS9pc3N1ZXMvMTI2NjFcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9hcGkva29uZy55bWw6L2hvbWUva29uZy90ZW1wLnltbDpybyx6XG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGFuYWx5dGljczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIEtPTkdfREFUQUJBU0U6IFwib2ZmXCJcbiAgICAgIEtPTkdfREVDTEFSQVRJVkVfQ09ORklHOiAvaG9tZS9rb25nL2tvbmcueW1sXG4gICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9jbGkvaXNzdWVzLzE0XG4gICAgICBLT05HX0ROU19PUkRFUjogTEFTVCxBLENOQU1FXG4gICAgICBLT05HX1BMVUdJTlM6IHJlcXVlc3QtdHJhbnNmb3JtZXIsY29ycyxrZXktYXV0aCxhY2wsYmFzaWMtYXV0aFxuICAgICAgS09OR19OR0lOWF9QUk9YWV9QUk9YWV9CVUZGRVJfU0laRTogMTYwa1xuICAgICAgS09OR19OR0lOWF9QUk9YWV9QUk9YWV9CVUZGRVJTOiA2NCAxNjBrXG4gICAgICBTVVBBQkFTRV9BTk9OX0tFWTogJHtBTk9OX0tFWX1cbiAgICAgIFNVUEFCQVNFX1NFUlZJQ0VfS0VZOiAke1NFUlZJQ0VfUk9MRV9LRVl9XG4gICAgICBEQVNIQk9BUkRfVVNFUk5BTUU6ICR7REFTSEJPQVJEX1VTRVJOQU1FfVxuICAgICAgREFTSEJPQVJEX1BBU1NXT1JEOiAke0RBU0hCT0FSRF9QQVNTV09SRH1cbiAgICAjIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9hLzI5NDgzN1xuICAgIGVudHJ5cG9pbnQ6IGJhc2ggLWMgJ2V2YWwgXCJlY2hvIFxcXCIkJChjYXQgfi90ZW1wLnltbClcXFwiXCIgPiB+L2tvbmcueW1sICYmIC9kb2NrZXItZW50cnlwb2ludC5zaCBrb25nIGRvY2tlci1zdGFydCdcblxuICBhdXRoOlxuICAgIGNvbnRhaW5lcl9uYW1lOiAke0NPTlRBSU5FUl9QUkVGSVh9LWF1dGhcbiAgICBpbWFnZTogc3VwYWJhc2UvZ290cnVlOnYyLjE3MS4wXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIFtcbiAgICAgICAgICBcIkNNRFwiLFxuICAgICAgICAgIFwid2dldFwiLFxuICAgICAgICAgIFwiLS1uby12ZXJib3NlXCIsXG4gICAgICAgICAgXCItLXRyaWVzPTFcIixcbiAgICAgICAgICBcIi0tc3BpZGVyXCIsXG4gICAgICAgICAgXCJodHRwOi8vbG9jYWxob3N0Ojk5OTkvaGVhbHRoXCJcbiAgICAgICAgXVxuICAgICAgdGltZW91dDogNXNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogM1xuICAgIGRlcGVuZHNfb246XG4gICAgICBkYjpcbiAgICAgICAgIyBEaXNhYmxlIHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBleHRlcm5hbCBQb3N0Z3JlcyBkYXRhYmFzZVxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgYW5hbHl0aWNzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGVudmlyb25tZW50OlxuICAgICAgIyB0aGUgbmV4dCBsaW5lIHNlZW1zIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gc2VuZCBtYWlscyBmcm9tIHRoZSBzdXBhYmFzZSBHVUlcbiAgICAgIEdPVFJVRV9NQUlMRVJfRVhURVJOQUxfSE9TVFM6IGtvbmcsJHtTVVBBQkFTRV9IT1NUfVxuICAgICAgR09UUlVFX0FQSV9IT1NUOiAwLjAuMC4wXG4gICAgICBHT1RSVUVfQVBJX1BPUlQ6IDk5OTlcbiAgICAgIEFQSV9FWFRFUk5BTF9VUkw6ICR7QVBJX0VYVEVSTkFMX1VSTH1cblxuICAgICAgR09UUlVFX0RCX0RSSVZFUjogcG9zdGdyZXNcbiAgICAgIEdPVFJVRV9EQl9EQVRBQkFTRV9VUkw6IHBvc3RncmVzOi8vc3VwYWJhc2VfYXV0aF9hZG1pbjoke1BPU1RHUkVTX1BBU1NXT1JEfUAke1BPU1RHUkVTX0hPU1R9OiR7UE9TVEdSRVNfUE9SVH0vJHtQT1NUR1JFU19EQn1cblxuICAgICAgR09UUlVFX1NJVEVfVVJMOiAke1NJVEVfVVJMfVxuICAgICAgR09UUlVFX1VSSV9BTExPV19MSVNUOiAke0FERElUSU9OQUxfUkVESVJFQ1RfVVJMU31cbiAgICAgIEdPVFJVRV9ESVNBQkxFX1NJR05VUDogJHtESVNBQkxFX1NJR05VUH1cblxuICAgICAgR09UUlVFX0pXVF9BRE1JTl9ST0xFUzogc2VydmljZV9yb2xlXG4gICAgICBHT1RSVUVfSldUX0FVRDogYXV0aGVudGljYXRlZFxuICAgICAgR09UUlVFX0pXVF9ERUZBVUxUX0dST1VQX05BTUU6IGF1dGhlbnRpY2F0ZWRcbiAgICAgIEdPVFJVRV9KV1RfRVhQOiAke0pXVF9FWFBJUll9XG4gICAgICBHT1RSVUVfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuXG4gICAgICBHT1RSVUVfRVhURVJOQUxfRU1BSUxfRU5BQkxFRDogJHtFTkFCTEVfRU1BSUxfU0lHTlVQfVxuICAgICAgR09UUlVFX0VYVEVSTkFMX0FOT05ZTU9VU19VU0VSU19FTkFCTEVEOiAke0VOQUJMRV9BTk9OWU1PVVNfVVNFUlN9XG4gICAgICBHT1RSVUVfTUFJTEVSX0FVVE9DT05GSVJNOiAke0VOQUJMRV9FTUFJTF9BVVRPQ09ORklSTX1cblxuICAgICAgIyBVbmNvbW1lbnQgdG8gYnlwYXNzIG5vbmNlIGNoZWNrIGluIElEIFRva2VuIGZsb3cuIENvbW1vbmx5IHNldCB0byB0cnVlIHdoZW4gdXNpbmcgR29vZ2xlIFNpZ24gSW4gb24gbW9iaWxlLlxuICAgICAgIyBHT1RSVUVfRVhURVJOQUxfU0tJUF9OT05DRV9DSEVDSzogdHJ1ZVxuXG4gICAgICAjIEdPVFJVRV9NQUlMRVJfU0VDVVJFX0VNQUlMX0NIQU5HRV9FTkFCTEVEOiB0cnVlXG4gICAgICAjIEdPVFJVRV9TTVRQX01BWF9GUkVRVUVOQ1k6IDFzXG4gICAgICBHT1RSVUVfU01UUF9BRE1JTl9FTUFJTDogJHtTTVRQX0FETUlOX0VNQUlMfVxuICAgICAgR09UUlVFX1NNVFBfSE9TVDogJHtTTVRQX0hPU1R9XG4gICAgICBHT1RSVUVfU01UUF9QT1JUOiAke1NNVFBfUE9SVH1cbiAgICAgIEdPVFJVRV9TTVRQX1VTRVI6ICR7U01UUF9VU0VSfVxuICAgICAgR09UUlVFX1NNVFBfUEFTUzogJHtTTVRQX1BBU1N9XG4gICAgICBHT1RSVUVfU01UUF9TRU5ERVJfTkFNRTogJHtTTVRQX1NFTkRFUl9OQU1FfVxuICAgICAgR09UUlVFX01BSUxFUl9VUkxQQVRIU19JTlZJVEU6ICR7TUFJTEVSX1VSTFBBVEhTX0lOVklURX1cbiAgICAgIEdPVFJVRV9NQUlMRVJfVVJMUEFUSFNfQ09ORklSTUFUSU9OOiAke01BSUxFUl9VUkxQQVRIU19DT05GSVJNQVRJT059XG4gICAgICBHT1RSVUVfTUFJTEVSX1VSTFBBVEhTX1JFQ09WRVJZOiAke01BSUxFUl9VUkxQQVRIU19SRUNPVkVSWX1cbiAgICAgIEdPVFJVRV9NQUlMRVJfVVJMUEFUSFNfRU1BSUxfQ0hBTkdFOiAke01BSUxFUl9VUkxQQVRIU19FTUFJTF9DSEFOR0V9XG5cbiAgICAgIEdPVFJVRV9FWFRFUk5BTF9QSE9ORV9FTkFCTEVEOiAke0VOQUJMRV9QSE9ORV9TSUdOVVB9XG4gICAgICBHT1RSVUVfU01TX0FVVE9DT05GSVJNOiAke0VOQUJMRV9QSE9ORV9BVVRPQ09ORklSTX1cbiAgICAgICMgVW5jb21tZW50IHRvIGVuYWJsZSBjdXN0b20gYWNjZXNzIHRva2VuIGhvb2suIFBsZWFzZSBzZWU6IGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvZ3VpZGVzL2F1dGgvYXV0aC1ob29rcyBmb3IgZnVsbCBsaXN0IG9mIGhvb2tzIGFuZCBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgY3VzdG9tX2FjY2Vzc190b2tlbl9ob29rXG5cbiAgICAgICMgR09UUlVFX0hPT0tfQ1VTVE9NX0FDQ0VTU19UT0tFTl9FTkFCTEVEOiBcInRydWVcIlxuICAgICAgIyBHT1RSVUVfSE9PS19DVVNUT01fQUNDRVNTX1RPS0VOX1VSSTogXCJwZy1mdW5jdGlvbnM6Ly9wb3N0Z3Jlcy9wdWJsaWMvY3VzdG9tX2FjY2Vzc190b2tlbl9ob29rXCJcbiAgICAgICMgR09UUlVFX0hPT0tfQ1VTVE9NX0FDQ0VTU19UT0tFTl9TRUNSRVRTOiBcIjxzdGFuZGFyZC1iYXNlNjQtc2VjcmV0PlwiXG5cbiAgICAgICMgR09UUlVFX0hPT0tfTUZBX1ZFUklGSUNBVElPTl9BVFRFTVBUX0VOQUJMRUQ6IFwidHJ1ZVwiXG4gICAgICAjIEdPVFJVRV9IT09LX01GQV9WRVJJRklDQVRJT05fQVRURU1QVF9VUkk6IFwicGctZnVuY3Rpb25zOi8vcG9zdGdyZXMvcHVibGljL21mYV92ZXJpZmljYXRpb25fYXR0ZW1wdFwiXG5cbiAgICAgICMgR09UUlVFX0hPT0tfUEFTU1dPUkRfVkVSSUZJQ0FUSU9OX0FUVEVNUFRfRU5BQkxFRDogXCJ0cnVlXCJcbiAgICAgICMgR09UUlVFX0hPT0tfUEFTU1dPUkRfVkVSSUZJQ0FUSU9OX0FUVEVNUFRfVVJJOiBcInBnLWZ1bmN0aW9uczovL3Bvc3RncmVzL3B1YmxpYy9wYXNzd29yZF92ZXJpZmljYXRpb25fYXR0ZW1wdFwiXG5cbiAgICAgICMgR09UUlVFX0hPT0tfU0VORF9TTVNfRU5BQkxFRDogXCJmYWxzZVwiXG4gICAgICAjIEdPVFJVRV9IT09LX1NFTkRfU01TX1VSSTogXCJwZy1mdW5jdGlvbnM6Ly9wb3N0Z3Jlcy9wdWJsaWMvY3VzdG9tX2FjY2Vzc190b2tlbl9ob29rXCJcbiAgICAgICMgR09UUlVFX0hPT0tfU0VORF9TTVNfU0VDUkVUUzogXCJ2MSx3aHNlY19WR2hwY3lCcGN5QmhiaUJsZUdGdGNHeGxJRzltSUdFZ2MyaHZjblJsY2lCQ1lYTmxOalFnYzNSeWFXNW5cIlxuXG4gICAgICAjIEdPVFJVRV9IT09LX1NFTkRfRU1BSUxfRU5BQkxFRDogXCJmYWxzZVwiXG4gICAgICAjIEdPVFJVRV9IT09LX1NFTkRfRU1BSUxfVVJJOiBcImh0dHA6Ly9ob3N0LmRvY2tlci5pbnRlcm5hbDo1NDMyMS9mdW5jdGlvbnMvdjEvZW1haWxfc2VuZGVyXCJcbiAgICAgICMgR09UUlVFX0hPT0tfU0VORF9FTUFJTF9TRUNSRVRTOiBcInYxLHdoc2VjX1ZHaHBjeUJwY3lCaGJpQmxlR0Z0Y0d4bElHOW1JR0VnYzJodmNuUmxjaUJDWVhObE5qUWdjM1J5YVc1blwiXG5cbiAgcmVzdDpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS1yZXN0XG4gICAgaW1hZ2U6IHBvc3RncmVzdC9wb3N0Z3Jlc3Q6djEyLjIuMTFcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICBkYjpcbiAgICAgICAgIyBEaXNhYmxlIHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBleHRlcm5hbCBQb3N0Z3JlcyBkYXRhYmFzZVxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgYW5hbHl0aWNzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGVudmlyb25tZW50OlxuICAgICAgUEdSU1RfREJfVVJJOiBwb3N0Z3JlczovL2F1dGhlbnRpY2F0b3I6JHtQT1NUR1JFU19QQVNTV09SRH1AJHtQT1NUR1JFU19IT1NUfToke1BPU1RHUkVTX1BPUlR9LyR7UE9TVEdSRVNfREJ9XG4gICAgICBQR1JTVF9EQl9TQ0hFTUFTOiAke1BHUlNUX0RCX1NDSEVNQVN9XG4gICAgICBQR1JTVF9EQl9BTk9OX1JPTEU6IGFub25cbiAgICAgIFBHUlNUX0pXVF9TRUNSRVQ6ICR7SldUX1NFQ1JFVH1cbiAgICAgIFBHUlNUX0RCX1VTRV9MRUdBQ1lfR1VDUzogXCJmYWxzZVwiXG4gICAgICBQR1JTVF9BUFBfU0VUVElOR1NfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgUEdSU1RfQVBQX1NFVFRJTkdTX0pXVF9FWFA6ICR7SldUX0VYUElSWX1cbiAgICBjb21tYW5kOlxuICAgICAgW1xuICAgICAgICBcInBvc3RncmVzdFwiXG4gICAgICBdXG5cbiAgcmVhbHRpbWU6XG4gICAgIyBUaGlzIGNvbnRhaW5lciBuYW1lIGxvb2tzIGluY29uc2lzdGVudCBidXQgaXMgY29ycmVjdCBiZWNhdXNlIHJlYWx0aW1lIGNvbnN0cnVjdHMgdGVuYW50IGlkIGJ5IHBhcnNpbmcgdGhlIHN1YmRvbWFpblxuICAgIGNvbnRhaW5lcl9uYW1lOiByZWFsdGltZS1kZXYuJHtDT05UQUlORVJfUFJFRklYfS1yZWFsdGltZVxuICAgIGltYWdlOiBzdXBhYmFzZS9yZWFsdGltZTp2Mi4zNC40N1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGRiOlxuICAgICAgICAjIERpc2FibGUgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIGV4dGVybmFsIFBvc3RncmVzIGRhdGFiYXNlXG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBhbmFseXRpY3M6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICBbXG4gICAgICAgICAgXCJDTURcIixcbiAgICAgICAgICBcImN1cmxcIixcbiAgICAgICAgICBcIi1zU2ZMXCIsXG4gICAgICAgICAgXCItLWhlYWRcIixcbiAgICAgICAgICBcIi1vXCIsXG4gICAgICAgICAgXCIvZGV2L251bGxcIixcbiAgICAgICAgICBcIi1IXCIsXG4gICAgICAgICAgXCJBdXRob3JpemF0aW9uOiBCZWFyZXIgJHtBTk9OX0tFWX1cIixcbiAgICAgICAgICBcImh0dHA6Ly9sb2NhbGhvc3Q6NDAwMC9hcGkvdGVuYW50cy9yZWFsdGltZS1kZXYvaGVhbHRoXCJcbiAgICAgICAgXVxuICAgICAgdGltZW91dDogNXNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogM1xuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9SVDogNDAwMFxuICAgICAgREJfSE9TVDogJHtQT1NUR1JFU19IT1NUfVxuICAgICAgREJfUE9SVDogJHtQT1NUR1JFU19QT1JUfVxuICAgICAgREJfVVNFUjogc3VwYWJhc2VfYWRtaW5cbiAgICAgIERCX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuICAgICAgREJfTkFNRTogJHtQT1NUR1JFU19EQn1cbiAgICAgIERCX0FGVEVSX0NPTk5FQ1RfUVVFUlk6ICdTRVQgc2VhcmNoX3BhdGggVE8gX3JlYWx0aW1lJ1xuICAgICAgREJfRU5DX0tFWTogc3VwYWJhc2VyZWFsdGltZVxuICAgICAgQVBJX0pXVF9TRUNSRVQ6ICR7SldUX1NFQ1JFVH1cbiAgICAgIFNFQ1JFVF9LRVlfQkFTRTogJHtTRUNSRVRfS0VZX0JBU0V9XG4gICAgICBFUkxfQUZMQUdTOiAtcHJvdG9fZGlzdCBpbmV0X3RjcFxuICAgICAgRE5TX05PREVTOiBcIicnXCJcbiAgICAgIFJMSU1JVF9OT0ZJTEU6IFwiMTAwMDBcIlxuICAgICAgQVBQX05BTUU6IHJlYWx0aW1lXG4gICAgICBTRUVEX1NFTEZfSE9TVDogdHJ1ZVxuICAgICAgUlVOX0pBTklUT1I6IHRydWVcblxuICAjIFRvIHVzZSBTMyBiYWNrZWQgc3RvcmFnZTogZG9ja2VyIGNvbXBvc2UgLWYgZG9ja2VyLWNvbXBvc2UueW1sIC1mIGRvY2tlci1jb21wb3NlLnMzLnltbCB1cFxuICBzdG9yYWdlOlxuICAgIGNvbnRhaW5lcl9uYW1lOiAke0NPTlRBSU5FUl9QUkVGSVh9LXN0b3JhZ2VcbiAgICBpbWFnZTogc3VwYWJhc2Uvc3RvcmFnZS1hcGk6djEuMjIuN1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9zdG9yYWdlOi92YXIvbGliL3N0b3JhZ2U6elxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgW1xuICAgICAgICAgIFwiQ01EXCIsXG4gICAgICAgICAgXCJ3Z2V0XCIsXG4gICAgICAgICAgXCItLW5vLXZlcmJvc2VcIixcbiAgICAgICAgICBcIi0tdHJpZXM9MVwiLFxuICAgICAgICAgIFwiLS1zcGlkZXJcIixcbiAgICAgICAgICBcImh0dHA6Ly9zdG9yYWdlOjUwMDAvc3RhdHVzXCJcbiAgICAgICAgXVxuICAgICAgdGltZW91dDogNXNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogM1xuICAgIGRlcGVuZHNfb246XG4gICAgICBkYjpcbiAgICAgICAgIyBEaXNhYmxlIHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBleHRlcm5hbCBQb3N0Z3JlcyBkYXRhYmFzZVxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcmVzdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX3N0YXJ0ZWRcbiAgICAgIGltZ3Byb3h5OlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2Vfc3RhcnRlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgQU5PTl9LRVk6ICR7QU5PTl9LRVl9XG4gICAgICBTRVJWSUNFX0tFWTogJHtTRVJWSUNFX1JPTEVfS0VZfVxuICAgICAgUE9TVEdSRVNUX1VSTDogaHR0cDovL3Jlc3Q6MzAwMFxuICAgICAgUEdSU1RfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgREFUQUJBU0VfVVJMOiBwb3N0Z3JlczovL3N1cGFiYXNlX3N0b3JhZ2VfYWRtaW46JHtQT1NUR1JFU19QQVNTV09SRH1AJHtQT1NUR1JFU19IT1NUfToke1BPU1RHUkVTX1BPUlR9LyR7UE9TVEdSRVNfREJ9XG4gICAgICBGSUxFX1NJWkVfTElNSVQ6IDUyNDI4ODAwXG4gICAgICBTVE9SQUdFX0JBQ0tFTkQ6IGZpbGVcbiAgICAgIEZJTEVfU1RPUkFHRV9CQUNLRU5EX1BBVEg6IC92YXIvbGliL3N0b3JhZ2VcbiAgICAgIFRFTkFOVF9JRDogc3R1YlxuICAgICAgIyBUT0RPOiBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2Uvc3RvcmFnZS1hcGkvaXNzdWVzLzU1XG4gICAgICBSRUdJT046IHN0dWJcbiAgICAgIEdMT0JBTF9TM19CVUNLRVQ6IHN0dWJcbiAgICAgIEVOQUJMRV9JTUFHRV9UUkFOU0ZPUk1BVElPTjogXCJ0cnVlXCJcbiAgICAgIElNR1BST1hZX1VSTDogaHR0cDovL2ltZ3Byb3h5OjUwMDFcblxuICBpbWdwcm94eTpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS1pbWdwcm94eVxuICAgIGltYWdlOiBkYXJ0aHNpbS9pbWdwcm94eTp2My44LjBcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvc3RvcmFnZTovdmFyL2xpYi9zdG9yYWdlOnpcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIFtcbiAgICAgICAgICBcIkNNRFwiLFxuICAgICAgICAgIFwiaW1ncHJveHlcIixcbiAgICAgICAgICBcImhlYWx0aFwiXG4gICAgICAgIF1cbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICBpbnRlcnZhbDogNXNcbiAgICAgIHJldHJpZXM6IDNcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIElNR1BST1hZX0JJTkQ6IFwiOjUwMDFcIlxuICAgICAgSU1HUFJPWFlfTE9DQUxfRklMRVNZU1RFTV9ST09UOiAvXG4gICAgICBJTUdQUk9YWV9VU0VfRVRBRzogXCJ0cnVlXCJcbiAgICAgIElNR1BST1hZX0VOQUJMRV9XRUJQX0RFVEVDVElPTjogJHtJTUdQUk9YWV9FTkFCTEVfV0VCUF9ERVRFQ1RJT059XG5cbiAgbWV0YTpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS1tZXRhXG4gICAgaW1hZ2U6IHN1cGFiYXNlL3Bvc3RncmVzLW1ldGE6djAuODguOVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGRiOlxuICAgICAgICAjIERpc2FibGUgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIGV4dGVybmFsIFBvc3RncmVzIGRhdGFiYXNlXG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBhbmFseXRpY3M6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQR19NRVRBX1BPUlQ6IDgwODBcbiAgICAgIFBHX01FVEFfREJfSE9TVDogJHtQT1NUR1JFU19IT1NUfVxuICAgICAgUEdfTUVUQV9EQl9QT1JUOiAke1BPU1RHUkVTX1BPUlR9XG4gICAgICBQR19NRVRBX0RCX05BTUU6ICR7UE9TVEdSRVNfREJ9XG4gICAgICBQR19NRVRBX0RCX1VTRVI6IHN1cGFiYXNlX2FkbWluXG4gICAgICBQR19NRVRBX0RCX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuXG4gIGZ1bmN0aW9uczpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS1lZGdlLWZ1bmN0aW9uc1xuICAgIGltYWdlOiBzdXBhYmFzZS9lZGdlLXJ1bnRpbWU6djEuNjcuNFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9mdW5jdGlvbnM6L2hvbWUvZGVuby9mdW5jdGlvbnM6WlxuICAgIGRlcGVuZHNfb246XG4gICAgICBhbmFseXRpY3M6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBKV1RfU0VDUkVUOiAke0pXVF9TRUNSRVR9XG4gICAgICBTVVBBQkFTRV9VUkw6IGh0dHA6Ly9rb25nOjgwMDBcbiAgICAgIFNVUEFCQVNFX0FOT05fS0VZOiAke0FOT05fS0VZfVxuICAgICAgU1VQQUJBU0VfU0VSVklDRV9ST0xFX0tFWTogJHtTRVJWSUNFX1JPTEVfS0VZfVxuICAgICAgU1VQQUJBU0VfREJfVVJMOiBwb3N0Z3Jlc3FsOi8vcG9zdGdyZXM6JHtQT1NUR1JFU19QQVNTV09SRH1AJHtQT1NUR1JFU19IT1NUfToke1BPU1RHUkVTX1BPUlR9LyR7UE9TVEdSRVNfREJ9XG4gICAgICAjIFRPRE86IEFsbG93IGNvbmZpZ3VyaW5nIFZFUklGWV9KV1QgcGVyIGZ1bmN0aW9uLiBUaGlzIFBSIG1pZ2h0IGhlbHA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9jbGkvcHVsbC83ODZcbiAgICAgIFZFUklGWV9KV1Q6IFwiJHtGVU5DVElPTlNfVkVSSUZZX0pXVH1cIlxuICAgIGNvbW1hbmQ6XG4gICAgICBbXG4gICAgICAgIFwic3RhcnRcIixcbiAgICAgICAgXCItLW1haW4tc2VydmljZVwiLFxuICAgICAgICBcIi9ob21lL2Rlbm8vZnVuY3Rpb25zL21haW5cIlxuICAgICAgXVxuXG4gIGFuYWx5dGljczpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS1hbmFseXRpY3NcbiAgICBpbWFnZTogc3VwYWJhc2UvbG9nZmxhcmU6MS4xMi4wXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICAjIHBvcnRzOlxuICAgICMgICAtIDQwMDA6NDAwMFxuICAgIGV4cG9zZTpcbiAgICAgIC0gNDAwMFxuICAgICMgVW5jb21tZW50IHRvIHVzZSBCaWcgUXVlcnkgYmFja2VuZCBmb3IgYW5hbHl0aWNzXG4gICAgIyB2b2x1bWVzOlxuICAgICMgICAtIHR5cGU6IGJpbmRcbiAgICAjICAgICBzb3VyY2U6ICR7UFdEfS9nY2xvdWQuanNvblxuICAgICMgICAgIHRhcmdldDogL29wdC9hcHAvcmVsL2xvZ2ZsYXJlL2Jpbi9nY2xvdWQuanNvblxuICAgICMgICAgIHJlYWRfb25seTogdHJ1ZVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgW1xuICAgICAgICAgIFwiQ01EXCIsXG4gICAgICAgICAgXCJjdXJsXCIsXG4gICAgICAgICAgXCJodHRwOi8vbG9jYWxob3N0OjQwMDAvaGVhbHRoXCJcbiAgICAgICAgXVxuICAgICAgdGltZW91dDogNXNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogMTBcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGI6XG4gICAgICAgICMgRGlzYWJsZSB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYW4gZXh0ZXJuYWwgUG9zdGdyZXMgZGF0YWJhc2VcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIExPR0ZMQVJFX05PREVfSE9TVDogMTI3LjAuMC4xXG4gICAgICBEQl9VU0VSTkFNRTogc3VwYWJhc2VfYWRtaW5cbiAgICAgIERCX0RBVEFCQVNFOiBfc3VwYWJhc2VcbiAgICAgIERCX0hPU1ROQU1FOiAke1BPU1RHUkVTX0hPU1R9XG4gICAgICBEQl9QT1JUOiAke1BPU1RHUkVTX1BPUlR9XG4gICAgICBEQl9QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIERCX1NDSEVNQTogX2FuYWx5dGljc1xuICAgICAgTE9HRkxBUkVfQVBJX0tFWTogJHtMT0dGTEFSRV9BUElfS0VZfVxuICAgICAgTE9HRkxBUkVfU0lOR0xFX1RFTkFOVDogdHJ1ZVxuICAgICAgTE9HRkxBUkVfU1VQQUJBU0VfTU9ERTogdHJ1ZVxuICAgICAgTE9HRkxBUkVfTUlOX0NMVVNURVJfU0laRTogMVxuXG4gICAgICAjIENvbW1lbnQgdmFyaWFibGVzIHRvIHVzZSBCaWcgUXVlcnkgYmFja2VuZCBmb3IgYW5hbHl0aWNzXG4gICAgICBQT1NUR1JFU19CQUNLRU5EX1VSTDogcG9zdGdyZXNxbDovL3N1cGFiYXNlX2FkbWluOiR7UE9TVEdSRVNfUEFTU1dPUkR9QCR7UE9TVEdSRVNfSE9TVH06JHtQT1NUR1JFU19QT1JUfS9fc3VwYWJhc2VcbiAgICAgIFBPU1RHUkVTX0JBQ0tFTkRfU0NIRU1BOiBfYW5hbHl0aWNzXG4gICAgICBMT0dGTEFSRV9GRUFUVVJFX0ZMQUdfT1ZFUlJJREU6IG11bHRpYmFja2VuZD10cnVlXG4gICAgICAjIFVuY29tbWVudCB0byB1c2UgQmlnIFF1ZXJ5IGJhY2tlbmQgZm9yIGFuYWx5dGljc1xuICAgICAgIyBHT09HTEVfUFJPSkVDVF9JRDogJHtHT09HTEVfUFJPSkVDVF9JRH1cbiAgICAgICMgR09PR0xFX1BST0pFQ1RfTlVNQkVSOiAke0dPT0dMRV9QUk9KRUNUX05VTUJFUn1cblxuICAjIENvbW1lbnQgb3V0IGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBwb2ludCBpZiB5b3UgYXJlIHVzaW5nIGFuIGV4dGVybmFsIFBvc3RncmVzIGRhdGFiYXNlXG4gIGRiOlxuICAgIGNvbnRhaW5lcl9uYW1lOiAke0NPTlRBSU5FUl9QUkVGSVh9LWRiXG4gICAgaW1hZ2U6IHN1cGFiYXNlL3Bvc3RncmVzOjE1LjguMS4wNjBcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvZGIvcmVhbHRpbWUuc3FsOi9kb2NrZXItZW50cnlwb2ludC1pbml0ZGIuZC9taWdyYXRpb25zLzk5LXJlYWx0aW1lLnNxbDpaXG4gICAgICAjIE11c3QgYmUgc3VwZXJ1c2VyIHRvIGNyZWF0ZSBldmVudCB0cmlnZ2VyXG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvZGIvd2ViaG9va3Muc3FsOi9kb2NrZXItZW50cnlwb2ludC1pbml0ZGIuZC9pbml0LXNjcmlwdHMvOTgtd2ViaG9va3Muc3FsOlpcbiAgICAgICMgTXVzdCBiZSBzdXBlcnVzZXIgdG8gYWx0ZXIgcmVzZXJ2ZWQgcm9sZVxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL3JvbGVzLnNxbDovZG9ja2VyLWVudHJ5cG9pbnQtaW5pdGRiLmQvaW5pdC1zY3JpcHRzLzk5LXJvbGVzLnNxbDpaXG4gICAgICAjIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlIHNldHRpbmdzIHdpdGggSldUX1NFQ1JFVCBhbmQgSldUX0VYUFxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL2p3dC5zcWw6L2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kL2luaXQtc2NyaXB0cy85OS1qd3Quc3FsOlpcbiAgICAgICMgUEdEQVRBIGRpcmVjdG9yeSBpcyBwZXJzaXN0ZWQgYmV0d2VlbiByZXN0YXJ0c1xuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL2RhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhOlpcbiAgICAgICMgQ2hhbmdlcyByZXF1aXJlZCBmb3IgaW50ZXJuYWwgc3VwYWJhc2UgZGF0YSBzdWNoIGFzIF9hbmFseXRpY3NcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9kYi9fc3VwYWJhc2Uuc3FsOi9kb2NrZXItZW50cnlwb2ludC1pbml0ZGIuZC9taWdyYXRpb25zLzk3LV9zdXBhYmFzZS5zcWw6WlxuICAgICAgIyBDaGFuZ2VzIHJlcXVpcmVkIGZvciBBbmFseXRpY3Mgc3VwcG9ydFxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL2xvZ3Muc3FsOi9kb2NrZXItZW50cnlwb2ludC1pbml0ZGIuZC9taWdyYXRpb25zLzk5LWxvZ3Muc3FsOlpcbiAgICAgICMgQ2hhbmdlcyByZXF1aXJlZCBmb3IgUG9vbGVyIHN1cHBvcnRcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9kYi9wb29sZXIuc3FsOi9kb2NrZXItZW50cnlwb2ludC1pbml0ZGIuZC9taWdyYXRpb25zLzk5LXBvb2xlci5zcWw6WlxuICAgICAgIyBVc2UgbmFtZWQgdm9sdW1lIHRvIHBlcnNpc3QgcGdzb2RpdW0gZGVjcnlwdGlvbiBrZXkgYmV0d2VlbiByZXN0YXJ0c1xuICAgICAgLSBkYi1jb25maWc6L2V0Yy9wb3N0Z3Jlc3FsLWN1c3RvbVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgW1xuICAgICAgICBcIkNNRFwiLFxuICAgICAgICBcInBnX2lzcmVhZHlcIixcbiAgICAgICAgXCItVVwiLFxuICAgICAgICBcInBvc3RncmVzXCIsXG4gICAgICAgIFwiLWhcIixcbiAgICAgICAgXCJsb2NhbGhvc3RcIlxuICAgICAgICBdXG4gICAgICBpbnRlcnZhbDogNXNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAxMFxuICAgIGRlcGVuZHNfb246XG4gICAgICB2ZWN0b3I6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQT1NUR1JFU19IT1NUOiAvdmFyL3J1bi9wb3N0Z3Jlc3FsXG4gICAgICBQR1BPUlQ6ICR7UE9TVEdSRVNfUE9SVH1cbiAgICAgIFBPU1RHUkVTX1BPUlQ6ICR7UE9TVEdSRVNfUE9SVH1cbiAgICAgIFBHUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgICBQT1NUR1JFU19QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIFBHREFUQUJBU0U6ICR7UE9TVEdSRVNfREJ9XG4gICAgICBQT1NUR1JFU19EQjogJHtQT1NUR1JFU19EQn1cbiAgICAgIEpXVF9TRUNSRVQ6ICR7SldUX1NFQ1JFVH1cbiAgICAgIEpXVF9FWFA6ICR7SldUX0VYUElSWX1cbiAgICBjb21tYW5kOlxuICAgICAgW1xuICAgICAgICBcInBvc3RncmVzXCIsXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgXCJjb25maWdfZmlsZT0vZXRjL3Bvc3RncmVzcWwvcG9zdGdyZXNxbC5jb25mXCIsXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgXCJsb2dfbWluX21lc3NhZ2VzPWZhdGFsXCIgIyBwcmV2ZW50cyBSZWFsdGltZSBwb2xsaW5nIHF1ZXJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gbG9nc1xuICAgICAgXVxuXG4gIHZlY3RvcjpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS12ZWN0b3JcbiAgICBpbWFnZTogdGltYmVyaW8vdmVjdG9yOjAuMjguMS1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvbG9ncy92ZWN0b3IueW1sOi9ldGMvdmVjdG9yL3ZlY3Rvci55bWw6cm8selxuICAgICAgLSAke0RPQ0tFUl9TT0NLRVRfTE9DQVRJT059Oi92YXIvcnVuL2RvY2tlci5zb2NrOnJvLHpcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIFtcbiAgICAgICAgICBcIkNNRFwiLFxuICAgICAgICAgIFwid2dldFwiLFxuICAgICAgICAgIFwiLS1uby12ZXJib3NlXCIsXG4gICAgICAgICAgXCItLXRyaWVzPTFcIixcbiAgICAgICAgICBcIi0tc3BpZGVyXCIsXG4gICAgICAgICAgXCJodHRwOi8vdmVjdG9yOjkwMDEvaGVhbHRoXCJcbiAgICAgICAgXVxuICAgICAgdGltZW91dDogNXNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogM1xuICAgIGVudmlyb25tZW50OlxuICAgICAgTE9HRkxBUkVfQVBJX0tFWTogJHtMT0dGTEFSRV9BUElfS0VZfVxuICAgIGNvbW1hbmQ6XG4gICAgICBbXG4gICAgICAgIFwiLS1jb25maWdcIixcbiAgICAgICAgXCIvZXRjL3ZlY3Rvci92ZWN0b3IueW1sXCJcbiAgICAgIF1cbiAgICBzZWN1cml0eV9vcHQ6XG4gICAgICAtIFwibGFiZWw9ZGlzYWJsZVwiXG5cbiAgIyBVcGRhdGUgdGhlIERBVEFCQVNFX1VSTCBpZiB5b3UgYXJlIHVzaW5nIGFuIGV4dGVybmFsIFBvc3RncmVzIGRhdGFiYXNlXG4gIHN1cGF2aXNvcjpcbiAgICBjb250YWluZXJfbmFtZTogJHtDT05UQUlORVJfUFJFRklYfS1wb29sZXJcbiAgICBpbWFnZTogc3VwYWJhc2Uvc3VwYXZpc29yOjIuNS4xXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBwb3J0czogIyBleHBvc2Ugc3VwYXZpc29yIHRvIHRoZSBob3N0IHRvIGVuYWJsZSBkYiBwb29sZXIgY29ubmVjdGlvblxuICAgICAgLSAke1BPU1RHUkVTX1BPUlR9OjU0MzJcbiAgICAgIC0gJHtQT09MRVJfUFJPWFlfUE9SVF9UUkFOU0FDVElPTn06NjU0M1xuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvcG9vbGVyL3Bvb2xlci5leHM6L2V0Yy9wb29sZXIvcG9vbGVyLmV4czpybyx6XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICBbXG4gICAgICAgICAgXCJDTURcIixcbiAgICAgICAgICBcImN1cmxcIixcbiAgICAgICAgICBcIi1zU2ZMXCIsXG4gICAgICAgICAgXCItLWhlYWRcIixcbiAgICAgICAgICBcIi1vXCIsXG4gICAgICAgICAgXCIvZGV2L251bGxcIixcbiAgICAgICAgICBcImh0dHA6Ly8xMjcuMC4wLjE6NDAwMC9hcGkvaGVhbHRoXCJcbiAgICAgICAgXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGI6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBhbmFseXRpY3M6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQT1JUOiA0MDAwXG4gICAgICBQT1NUR1JFU19QT1JUOiAke1BPU1RHUkVTX1BPUlR9XG4gICAgICBQT1NUR1JFU19EQjogJHtQT1NUR1JFU19EQn1cbiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuICAgICAgREFUQUJBU0VfVVJMOiBlY3RvOi8vc3VwYWJhc2VfYWRtaW46JHtQT1NUR1JFU19QQVNTV09SRH1AZGI6JHtQT1NUR1JFU19QT1JUfS9fc3VwYWJhc2VcbiAgICAgIENMVVNURVJfUE9TVEdSRVM6IHRydWVcbiAgICAgIFNFQ1JFVF9LRVlfQkFTRTogJHtTRUNSRVRfS0VZX0JBU0V9XG4gICAgICBWQVVMVF9FTkNfS0VZOiAke1ZBVUxUX0VOQ19LRVl9XG4gICAgICBBUElfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgTUVUUklDU19KV1RfU0VDUkVUOiAke0pXVF9TRUNSRVR9XG4gICAgICBSRUdJT046IGxvY2FsXG4gICAgICBFUkxfQUZMQUdTOiAtcHJvdG9fZGlzdCBpbmV0X3RjcFxuICAgICAgUE9PTEVSX1RFTkFOVF9JRDogJHtQT09MRVJfVEVOQU5UX0lEfVxuICAgICAgUE9PTEVSX0RFRkFVTFRfUE9PTF9TSVpFOiAke1BPT0xFUl9ERUZBVUxUX1BPT0xfU0laRX1cbiAgICAgIFBPT0xFUl9NQVhfQ0xJRU5UX0NPTk46ICR7UE9PTEVSX01BWF9DTElFTlRfQ09OTn1cbiAgICAgIFBPT0xFUl9QT09MX01PREU6IHRyYW5zYWN0aW9uXG4gICAgY29tbWFuZDpcbiAgICAgIFtcbiAgICAgICAgXCIvYmluL3NoXCIsXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgXCIvYXBwL2Jpbi9taWdyYXRlICYmIC9hcHAvYmluL3N1cGF2aXNvciBldmFsIFxcXCIkJChjYXQgL2V0Yy9wb29sZXIvcG9vbGVyLmV4cylcXFwiICYmIC9hcHAvYmluL3NlcnZlclwiXG4gICAgICBdXG5cbnZvbHVtZXM6XG4gIGRiLWNvbmZpZzoiLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbm1haW5fZG9tYWluID0gXCIke2RvbWFpbn1cIlxucG9zdGdyZXNfcGFzc3dvcmQgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbmRhc2hib2FyZF9wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxubG9nZmxhcmVfYXBpX2tleSA9IFwiJHtwYXNzd29yZDozMn1cIlxuY29udGFpbmVyX25hbWVfcHJlZml4ID0gXCJzdXBhYmFzZS0ke2hhc2g6NH1cIlxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJrb25nXCJcbnBvcnQgPSA4XzAwMFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxuXG5bY29uZmlnXVxuZW52ID0gW1xuJyMjIyMjIyMjIyMjIycsXG4nIyBUbyBnZXQgYSBwcm9wZXIgd29ya2luZyBjb25maWd1cmF0aW9uIHlvdSBzaG91bGQgYXQgbGVhc3QgdGFrZSBhIGxvb2sgYXQ6JyxcbicjIC0gU1VQQUJBU0VfUFVCTElDX1VSTCwgQVBJX0VYVEVSTkFMX1VSTCBzaG91bGQgcG9pbnQgdG8geW91ciBzdXBhYmFzZSBkb21haW4gd2l0aCBjb3JyZWN0IGh0dHAvaHR0cHMgc2NoZW1lJyxcbicjIC0gU01UUF8qIGFyZSByZXF1aXJlZCBmb3IgYXV0aCBtYWlsIHNlbmRpbmcnLFxuJyMgLSBBRERJVElPTkFMX1JFRElSRUNUX1VSTFMsIFNJVEVfVVJMIHNob3VsZCBwb2ludCB0byBhcHBsaWNhdGlvbiB1c2luZyBzdXBhYmFzZSBmb3IgYXV0aGVudGljYXRpb24nLFxuJyMgICBUaGV5IGFyZSB1c2VkIGZvciByZWRpcmVjdGluZyBhZnRlciBsb2dpbi9zaWdudXAgYW5kIGdvdHJ1ZSB3aWxsIGNoZWNrIHRoZW0gYmVmb3JlIHNlbmRpbmcgZW1haWxzJyxcbicjIC0gUE9TVEdSRVNfUE9SVCwgUE9PTEVSX1BST1hZX1BPUlRfVFJBTlNBQ1RJT04gc2hvdWxkIGJlIGNoYW5nZWQgaWYgeW91IGFyZSBhbHJlYWR5IHJ1bm5pbmcgb3RoZXIgaW5zdGFuY2VzIG9mIHN1cGFiYXNlJyxcbicjIGFuZCBDSEFOR0U6IEpXVC1TRUNSRVQsIEFOT05fS0VZLCBTRVJWSUNFX1JPTEVfS0VZLCBTRUNSRVRfS0VZX0JBU0UsIFZBVUxUX0VOQ19LRVknLFxuJyMnLFxuJyMgU3VwYWJhc2UgdXNlcyBjb250YWluZXIgbmFtZXMgaW4gcGFydCBvZiBpdHMgY29uZmlndXJhdGlvbiBzbyBpdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0aGVtJyxcbicjIFRoaXMgdGVtcGxhdGUgZ2VuZXJhdGVzIGEgcmFuZG9tIHByZWZpeCBmb3IgdGhlIGNvbnRhaW5lciBuYW1lcyB0byBhdm9pZCBjb25mbGljdHMnLFxuJyMgSWYgeW91IGNoYW5nZSBpdCB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSByb3V0ZXMgaW4gdGhlIHZlY3Rvci55bWwgZmlsZSBpbiBhZHZhbmNlZC0+bW91bnRzIHNlY3Rpb24nLFxuJyMjIyMjIyMjIyMjIycsXG4nQ09OVEFJTkVSX1BSRUZJWD0ke2NvbnRhaW5lcl9uYW1lX3ByZWZpeH0nLFxuJycsXG4nIyMjIyMjIyMjIyMjJyxcbicjIFNlY3JldHMnLFxuJyMgWU9VIE1VU1QgQ0hBTkdFIFRIRVNFIEJFRk9SRSBHT0lORyBJTlRPIFBST0RVQ1RJT04nLFxuJyMgaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9ndWlkZXMvc2VsZi1ob3N0aW5nL2RvY2tlciNzZWN1cmluZy15b3VyLXNlcnZpY2VzJyxcbicjIFRoZXkgYXJlIGRlZmF1bHQgdmFsdWVzIGZyb20gc3VwYWJhc2Ugc28gcmVhbGx5IGRvIG5vdCB1c2UgdGhlbSBpbiBleHBvc2VkIGVudmlyb25tZW50cycsXG4nIyBHbyB0byBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL2d1aWRlcy9zZWxmLWhvc3RpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24nLFxuJyMjIyMjIyMjIyMjIycsXG4nJyxcbidTVVBBQkFTRV9IT1NUPSR7bWFpbl9kb21haW59JyxcbidQT1NUR1JFU19QQVNTV09SRD0ke3Bvc3RncmVzX3Bhc3N3b3JkfScsXG4nSldUX1NFQ1JFVD15b3VyLXN1cGVyLXNlY3JldC1qd3QtdG9rZW4td2l0aC1hdC1sZWFzdC0zMi1jaGFyYWN0ZXJzLWxvbmcnLFxuJ0FOT05fS0VZPWV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUFnQ2lBZ0lDQWljbTlzWlNJNklDSmhibTl1SWl3S0lDQWdJQ0pwYzNNaU9pQWljM1Z3WVdKaGMyVXRaR1Z0YnlJc0NpQWdJQ0FpYVdGMElqb2dNVFkwTVRjMk9USXdNQ3dLSUNBZ0lDSmxlSEFpT2lBeE56azVOVE0xTmpBd0NuMC5kY19YNWlSX1ZQX3FUMHpzaXlqX0lfT1oyVDlGdFJVMkJCTldOOEJ1NEdFJyxcbidTRVJWSUNFX1JPTEVfS0VZPWV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUFnQ2lBZ0lDQWljbTlzWlNJNklDSnpaWEoyYVdObFgzSnZiR1VpTEFvZ0lDQWdJbWx6Y3lJNklDSnpkWEJoWW1GelpTMWtaVzF2SWl3S0lDQWdJQ0pwWVhRaU9pQXhOalF4TnpZNU1qQXdMQW9nSUNBZ0ltVjRjQ0k2SURFM09UazFNelUyTURBS2ZRLkRhWWxORW9VcnJFbjJJZzd0cWliUy1QSEs1dmd1c2JjYm83WDM2WFZ0NFEnLFxuJ0RBU0hCT0FSRF9VU0VSTkFNRT1zdXBhYmFzZScsXG4nREFTSEJPQVJEX1BBU1NXT1JEPSR7ZGFzaGJvYXJkX3Bhc3N3b3JkfScsXG4nU0VDUkVUX0tFWV9CQVNFPVVwTlZudG4zY0R4SEpwcTk5WU1jMVQxQVFnUXBjOGtmWVR1UmdCaVlhMTVCTHJ4OGV0UW9YejNnWnYxL3Uyb3EnLFxuJ1ZBVUxUX0VOQ19LRVk9eW91ci1lbmNyeXB0aW9uLWtleS0zMi1jaGFycy1taW4nLFxuJycsXG4nJyxcbicjIyMjIyMjIyMjIyMnLFxuJyMgRGF0YWJhc2UgLSBZb3UgY2FuIGNoYW5nZSB0aGVzZSB0byBhbnkgUG9zdGdyZVNRTCBkYXRhYmFzZSB0aGF0IGhhcyBsb2dpY2FsIHJlcGxpY2F0aW9uIGVuYWJsZWQuJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nUE9TVEdSRVNfSE9TVD1kYicsXG4nUE9TVEdSRVNfREI9cG9zdGdyZXMnLFxuJ1BPU1RHUkVTX1BPUlQ9NTQzMicsXG4nIyBkZWZhdWx0IHVzZXIgaXMgcG9zdGdyZXMnLFxuJycsXG4nJyxcbicjIyMjIyMjIyMjIyMnLFxuJyMgU3VwYXZpc29yIC0tIERhdGFiYXNlIHBvb2xlcicsXG4nIyMjIyMjIyMjIyMjJyxcbidQT09MRVJfUFJPWFlfUE9SVF9UUkFOU0FDVElPTj02NTQzJyxcbidQT09MRVJfREVGQVVMVF9QT09MX1NJWkU9MjAnLFxuJ1BPT0xFUl9NQVhfQ0xJRU5UX0NPTk49MTAwJyxcbidQT09MRVJfVEVOQU5UX0lEPXlvdXItdGVuYW50LWlkJyxcbicnLFxuJycsXG4nIyMjIyMjIyMjIyMjJyxcbicjIEFQSSBQcm94eSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBLb25nIFJldmVyc2UgcHJveHkuJyxcbicjIEZvbGxvd2luZyBwb3J0cyBzaG91bGQgbm90IGJlIGNoYW5nZWQgZm9yIGEgZG9rcGxveSBjb25maWcgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4nLFxuJyMjIyMjIyMjIyMjIycsXG4nJyxcbidLT05HX0hUVFBfUE9SVD04MDAwJyxcbidLT05HX0hUVFBTX1BPUlQ9ODQ0MycsXG4nJyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBBUEkgLSBDb25maWd1cmF0aW9uIGZvciBQb3N0Z1JFU1QuJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nUEdSU1RfREJfU0NIRU1BUz1wdWJsaWMsc3RvcmFnZSxncmFwaHFsX3B1YmxpYycsXG4nJyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBBdXRoIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIEdvVHJ1ZSBhdXRoZW50aWNhdGlvbiBzZXJ2ZXIuJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nIyMgR2VuZXJhbCcsXG4nU0lURV9VUkw9aHR0cDovL2xvY2FsaG9zdDozMDAwJyxcbidBRERJVElPTkFMX1JFRElSRUNUX1VSTFM9aHR0cDovLyR7bWFpbl9kb21haW59LyosaHR0cDovL2xvY2FsaG9zdDozMDAwLyonLFxuJ0pXVF9FWFBJUlk9MzYwMCcsXG4nRElTQUJMRV9TSUdOVVA9ZmFsc2UnLFxuJ0FQSV9FWFRFUk5BTF9VUkw9aHR0cDovLyR7bWFpbl9kb21haW59JyxcbicnLFxuJyMjIE1haWxlciBDb25maWcnLFxuJ01BSUxFUl9VUkxQQVRIU19DT05GSVJNQVRJT049XCIvYXV0aC92MS92ZXJpZnlcIicsXG4nTUFJTEVSX1VSTFBBVEhTX0lOVklURT1cIi9hdXRoL3YxL3ZlcmlmeVwiJyxcbidNQUlMRVJfVVJMUEFUSFNfUkVDT1ZFUlk9XCIvYXV0aC92MS92ZXJpZnlcIicsXG4nTUFJTEVSX1VSTFBBVEhTX0VNQUlMX0NIQU5HRT1cIi9hdXRoL3YxL3ZlcmlmeVwiJyxcbicnLFxuJyMjIEVtYWlsIGF1dGgnLFxuJ0VOQUJMRV9FTUFJTF9TSUdOVVA9dHJ1ZScsXG4nRU5BQkxFX0VNQUlMX0FVVE9DT05GSVJNPWZhbHNlJyxcbidTTVRQX0FETUlOX0VNQUlMPWFkbWluQGV4YW1wbGUuY29tJyxcbidTTVRQX0hPU1Q9c3VwYWJhc2UtbWFpbCcsXG4nU01UUF9QT1JUPTI1MDAnLFxuJ1NNVFBfVVNFUj1mYWtlX21haWxfdXNlcicsXG4nU01UUF9QQVNTPWZha2VfbWFpbF9wYXNzd29yZCcsXG4nU01UUF9TRU5ERVJfTkFNRT1mYWtlX3NlbmRlcicsXG4nRU5BQkxFX0FOT05ZTU9VU19VU0VSUz1mYWxzZScsXG4nJyxcbicjIyBQaG9uZSBhdXRoJyxcbidFTkFCTEVfUEhPTkVfU0lHTlVQPXRydWUnLFxuJ0VOQUJMRV9QSE9ORV9BVVRPQ09ORklSTT10cnVlJyxcbicnLFxuJycsXG4nIyMjIyMjIyMjIyMjJyxcbicjIFN0dWRpbyAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBEYXNoYm9hcmQnLFxuJyMjIyMjIyMjIyMjIycsXG4nJyxcbidTVFVESU9fREVGQVVMVF9PUkdBTklaQVRJT049RGVmYXVsdCBPcmdhbml6YXRpb24nLFxuJ1NUVURJT19ERUZBVUxUX1BST0pFQ1Q9RGVmYXVsdCBQcm9qZWN0JyxcbicnLFxuJ1NUVURJT19QT1JUPTMwMDAnLFxuJyMgcmVwbGFjZSBpZiB5b3UgaW50ZW5kIHRvIHVzZSBTdHVkaW8gb3V0c2lkZSBvZiBsb2NhbGhvc3QnLFxuJ1NVUEFCQVNFX1BVQkxJQ19VUkw9aHR0cDovLyR7bWFpbl9kb21haW59JyxcbicnLFxuJyMgRW5hYmxlIHdlYnAgc3VwcG9ydCcsXG4nSU1HUFJPWFlfRU5BQkxFX1dFQlBfREVURUNUSU9OPXRydWUnLFxuJycsXG4nIyBBZGQgeW91ciBPcGVuQUkgQVBJIGtleSB0byBlbmFibGUgU1FMIEVkaXRvciBBc3Npc3RhbnQnLFxuJ09QRU5BSV9BUElfS0VZPScsXG4nJyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBGdW5jdGlvbnMgLSBDb25maWd1cmF0aW9uIGZvciBGdW5jdGlvbnMnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBOT1RFOiBWRVJJRllfSldUIGFwcGxpZXMgdG8gYWxsIGZ1bmN0aW9ucy4gUGVyLWZ1bmN0aW9uIFZFUklGWV9KV1QgaXMgbm90IHN1cHBvcnRlZCB5ZXQuJyxcbidGVU5DVElPTlNfVkVSSUZZX0pXVD1mYWxzZScsXG4nJyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBMb2dzIC0gQ29uZmlndXJhdGlvbiBmb3IgTG9nZmxhcmUnLFxuJyMgUGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL3NlbGYtaG9zdGluZy1hbmFseXRpY3MvaW50cm9kdWN0aW9uJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nTE9HRkxBUkVfTE9HR0VSX0JBQ0tFTkRfQVBJX0tFWT15b3VyLXN1cGVyLXNlY3JldC1hbmQtbG9uZy1sb2dmbGFyZS1rZXknLFxuJycsXG4nIyBDaGFuZ2UgdmVjdG9yLnRvbWwgc2lua3MgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZScsXG4nTE9HRkxBUkVfQVBJX0tFWT0ke2xvZ2ZsYXJlX2FwaV9rZXl9JyxcbicnLFxuJyMgRG9ja2VyIHNvY2tldCBsb2NhdGlvbiAtIHRoaXMgdmFsdWUgd2lsbCBkaWZmZXIgZGVwZW5kaW5nIG9uIHlvdXIgT1MnLFxuJ0RPQ0tFUl9TT0NLRVRfTE9DQVRJT049L3Zhci9ydW4vZG9ja2VyLnNvY2snLFxuJycsXG4nIyBHb29nbGUgQ2xvdWQgUHJvamVjdCBkZXRhaWxzJyxcbidHT09HTEVfUFJPSkVDVF9JRD1HT09HTEVfUFJPSkVDVF9JRCcsXG4nR09PR0xFX1BST0pFQ1RfTlVNQkVSPUdPT0dMRV9QUk9KRUNUX05VTUJFUiddXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvYXBpL2tvbmcueW1sXCJcbmNvbnRlbnQgPSBcIlwiXCJfZm9ybWF0X3ZlcnNpb246ICcyLjEnXG5fdHJhbnNmb3JtOiB0cnVlXG5cbiMjI1xuIyMjIENvbnN1bWVycyAvIFVzZXJzXG4jIyNcbmNvbnN1bWVyczpcbiAgLSB1c2VybmFtZTogREFTSEJPQVJEXG4gIC0gdXNlcm5hbWU6IGFub25cbiAgICBrZXlhdXRoX2NyZWRlbnRpYWxzOlxuICAgICAgLSBrZXk6ICRTVVBBQkFTRV9BTk9OX0tFWVxuICAtIHVzZXJuYW1lOiBzZXJ2aWNlX3JvbGVcbiAgICBrZXlhdXRoX2NyZWRlbnRpYWxzOlxuICAgICAgLSBrZXk6ICRTVVBBQkFTRV9TRVJWSUNFX0tFWVxuXG4jIyNcbiMjIyBBY2Nlc3MgQ29udHJvbCBMaXN0XG4jIyNcbmFjbHM6XG4gIC0gY29uc3VtZXI6IGFub25cbiAgICBncm91cDogYW5vblxuICAtIGNvbnN1bWVyOiBzZXJ2aWNlX3JvbGVcbiAgICBncm91cDogYWRtaW5cblxuIyMjXG4jIyMgRGFzaGJvYXJkIGNyZWRlbnRpYWxzXG4jIyNcbmJhc2ljYXV0aF9jcmVkZW50aWFsczpcbiAgLSBjb25zdW1lcjogREFTSEJPQVJEXG4gICAgdXNlcm5hbWU6ICREQVNIQk9BUkRfVVNFUk5BTUVcbiAgICBwYXNzd29yZDogJERBU0hCT0FSRF9QQVNTV09SRFxuXG4jIyNcbiMjIyBBUEkgUm91dGVzXG4jIyNcbnNlcnZpY2VzOlxuICAjIyBPcGVuIEF1dGggcm91dGVzXG4gIC0gbmFtZTogYXV0aC12MS1vcGVuXG4gICAgdXJsOiBodHRwOi8vYXV0aDo5OTk5L3ZlcmlmeVxuICAgIHJvdXRlczpcbiAgICAgIC0gbmFtZTogYXV0aC12MS1vcGVuXG4gICAgICAgIHN0cmlwX3BhdGg6IHRydWVcbiAgICAgICAgcGF0aHM6XG4gICAgICAgICAgLSAvYXV0aC92MS92ZXJpZnlcbiAgICBwbHVnaW5zOlxuICAgICAgLSBuYW1lOiBjb3JzXG4gIC0gbmFtZTogYXV0aC12MS1vcGVuLWNhbGxiYWNrXG4gICAgdXJsOiBodHRwOi8vYXV0aDo5OTk5L2NhbGxiYWNrXG4gICAgcm91dGVzOlxuICAgICAgLSBuYW1lOiBhdXRoLXYxLW9wZW4tY2FsbGJhY2tcbiAgICAgICAgc3RyaXBfcGF0aDogdHJ1ZVxuICAgICAgICBwYXRoczpcbiAgICAgICAgICAtIC9hdXRoL3YxL2NhbGxiYWNrXG4gICAgcGx1Z2luczpcbiAgICAgIC0gbmFtZTogY29yc1xuICAtIG5hbWU6IGF1dGgtdjEtb3Blbi1hdXRob3JpemVcbiAgICB1cmw6IGh0dHA6Ly9hdXRoOjk5OTkvYXV0aG9yaXplXG4gICAgcm91dGVzOlxuICAgICAgLSBuYW1lOiBhdXRoLXYxLW9wZW4tYXV0aG9yaXplXG4gICAgICAgIHN0cmlwX3BhdGg6IHRydWVcbiAgICAgICAgcGF0aHM6XG4gICAgICAgICAgLSAvYXV0aC92MS9hdXRob3JpemVcbiAgICBwbHVnaW5zOlxuICAgICAgLSBuYW1lOiBjb3JzXG5cbiAgIyMgU2VjdXJlIEF1dGggcm91dGVzXG4gIC0gbmFtZTogYXV0aC12MVxuICAgIF9jb21tZW50OiAnR29UcnVlOiAvYXV0aC92MS8qIC0+IGh0dHA6Ly9hdXRoOjk5OTkvKidcbiAgICB1cmw6IGh0dHA6Ly9hdXRoOjk5OTkvXG4gICAgcm91dGVzOlxuICAgICAgLSBuYW1lOiBhdXRoLXYxLWFsbFxuICAgICAgICBzdHJpcF9wYXRoOiB0cnVlXG4gICAgICAgIHBhdGhzOlxuICAgICAgICAgIC0gL2F1dGgvdjEvXG4gICAgcGx1Z2luczpcbiAgICAgIC0gbmFtZTogY29yc1xuICAgICAgLSBuYW1lOiBrZXktYXV0aFxuICAgICAgICBjb25maWc6XG4gICAgICAgICAgaGlkZV9jcmVkZW50aWFsczogZmFsc2VcbiAgICAgIC0gbmFtZTogYWNsXG4gICAgICAgIGNvbmZpZzpcbiAgICAgICAgICBoaWRlX2dyb3Vwc19oZWFkZXI6IHRydWVcbiAgICAgICAgICBhbGxvdzpcbiAgICAgICAgICAgIC0gYWRtaW5cbiAgICAgICAgICAgIC0gYW5vblxuXG4gICMjIFNlY3VyZSBSRVNUIHJvdXRlc1xuICAtIG5hbWU6IHJlc3QtdjFcbiAgICBfY29tbWVudDogJ1Bvc3RnUkVTVDogL3Jlc3QvdjEvKiAtPiBodHRwOi8vcmVzdDozMDAwLyonXG4gICAgdXJsOiBodHRwOi8vcmVzdDozMDAwL1xuICAgIHJvdXRlczpcbiAgICAgIC0gbmFtZTogcmVzdC12MS1hbGxcbiAgICAgICAgc3RyaXBfcGF0aDogdHJ1ZVxuICAgICAgICBwYXRoczpcbiAgICAgICAgICAtIC9yZXN0L3YxL1xuICAgIHBsdWdpbnM6XG4gICAgICAtIG5hbWU6IGNvcnNcbiAgICAgIC0gbmFtZToga2V5LWF1dGhcbiAgICAgICAgY29uZmlnOlxuICAgICAgICAgIGhpZGVfY3JlZGVudGlhbHM6IHRydWVcbiAgICAgIC0gbmFtZTogYWNsXG4gICAgICAgIGNvbmZpZzpcbiAgICAgICAgICBoaWRlX2dyb3Vwc19oZWFkZXI6IHRydWVcbiAgICAgICAgICBhbGxvdzpcbiAgICAgICAgICAgIC0gYWRtaW5cbiAgICAgICAgICAgIC0gYW5vblxuXG4gICMjIFNlY3VyZSBHcmFwaFFMIHJvdXRlc1xuICAtIG5hbWU6IGdyYXBocWwtdjFcbiAgICBfY29tbWVudDogJ1Bvc3RnUkVTVDogL2dyYXBocWwvdjEvKiAtPiBodHRwOi8vcmVzdDozMDAwL3JwYy9ncmFwaHFsJ1xuICAgIHVybDogaHR0cDovL3Jlc3Q6MzAwMC9ycGMvZ3JhcGhxbFxuICAgIHJvdXRlczpcbiAgICAgIC0gbmFtZTogZ3JhcGhxbC12MS1hbGxcbiAgICAgICAgc3RyaXBfcGF0aDogdHJ1ZVxuICAgICAgICBwYXRoczpcbiAgICAgICAgICAtIC9ncmFwaHFsL3YxXG4gICAgcGx1Z2luczpcbiAgICAgIC0gbmFtZTogY29yc1xuICAgICAgLSBuYW1lOiBrZXktYXV0aFxuICAgICAgICBjb25maWc6XG4gICAgICAgICAgaGlkZV9jcmVkZW50aWFsczogdHJ1ZVxuICAgICAgLSBuYW1lOiByZXF1ZXN0LXRyYW5zZm9ybWVyXG4gICAgICAgIGNvbmZpZzpcbiAgICAgICAgICBhZGQ6XG4gICAgICAgICAgICBoZWFkZXJzOlxuICAgICAgICAgICAgICAtIENvbnRlbnQtUHJvZmlsZTpncmFwaHFsX3B1YmxpY1xuICAgICAgLSBuYW1lOiBhY2xcbiAgICAgICAgY29uZmlnOlxuICAgICAgICAgIGhpZGVfZ3JvdXBzX2hlYWRlcjogdHJ1ZVxuICAgICAgICAgIGFsbG93OlxuICAgICAgICAgICAgLSBhZG1pblxuICAgICAgICAgICAgLSBhbm9uXG5cbiAgIyMgU2VjdXJlIFJlYWx0aW1lIHJvdXRlc1xuICAtIG5hbWU6IHJlYWx0aW1lLXYxLXdzXG4gICAgX2NvbW1lbnQ6ICdSZWFsdGltZTogL3JlYWx0aW1lL3YxLyogLT4gd3M6Ly9yZWFsdGltZTo0MDAwL3NvY2tldC8qJ1xuICAgIHVybDogaHR0cDovL3JlYWx0aW1lLWRldi5zdXBhYmFzZS1yZWFsdGltZTo0MDAwL3NvY2tldFxuICAgIHByb3RvY29sOiB3c1xuICAgIHJvdXRlczpcbiAgICAgIC0gbmFtZTogcmVhbHRpbWUtdjEtd3NcbiAgICAgICAgc3RyaXBfcGF0aDogdHJ1ZVxuICAgICAgICBwYXRoczpcbiAgICAgICAgICAtIC9yZWFsdGltZS92MS9cbiAgICBwbHVnaW5zOlxuICAgICAgLSBuYW1lOiBjb3JzXG4gICAgICAtIG5hbWU6IGtleS1hdXRoXG4gICAgICAgIGNvbmZpZzpcbiAgICAgICAgICBoaWRlX2NyZWRlbnRpYWxzOiBmYWxzZVxuICAgICAgLSBuYW1lOiBhY2xcbiAgICAgICAgY29uZmlnOlxuICAgICAgICAgIGhpZGVfZ3JvdXBzX2hlYWRlcjogdHJ1ZVxuICAgICAgICAgIGFsbG93OlxuICAgICAgICAgICAgLSBhZG1pblxuICAgICAgICAgICAgLSBhbm9uXG4gIC0gbmFtZTogcmVhbHRpbWUtdjEtcmVzdFxuICAgIF9jb21tZW50OiAnUmVhbHRpbWU6IC9yZWFsdGltZS92MS8qIC0+IHdzOi8vcmVhbHRpbWU6NDAwMC9zb2NrZXQvKidcbiAgICB1cmw6IGh0dHA6Ly9yZWFsdGltZS1kZXYuc3VwYWJhc2UtcmVhbHRpbWU6NDAwMC9hcGlcbiAgICBwcm90b2NvbDogaHR0cFxuICAgIHJvdXRlczpcbiAgICAgIC0gbmFtZTogcmVhbHRpbWUtdjEtcmVzdFxuICAgICAgICBzdHJpcF9wYXRoOiB0cnVlXG4gICAgICAgIHBhdGhzOlxuICAgICAgICAgIC0gL3JlYWx0aW1lL3YxL2FwaVxuICAgIHBsdWdpbnM6XG4gICAgICAtIG5hbWU6IGNvcnNcbiAgICAgIC0gbmFtZToga2V5LWF1dGhcbiAgICAgICAgY29uZmlnOlxuICAgICAgICAgIGhpZGVfY3JlZGVudGlhbHM6IGZhbHNlXG4gICAgICAtIG5hbWU6IGFjbFxuICAgICAgICBjb25maWc6XG4gICAgICAgICAgaGlkZV9ncm91cHNfaGVhZGVyOiB0cnVlXG4gICAgICAgICAgYWxsb3c6XG4gICAgICAgICAgICAtIGFkbWluXG4gICAgICAgICAgICAtIGFub25cbiAgIyMgU3RvcmFnZSByb3V0ZXM6IHRoZSBzdG9yYWdlIHNlcnZlciBtYW5hZ2VzIGl0cyBvd24gYXV0aFxuICAtIG5hbWU6IHN0b3JhZ2UtdjFcbiAgICBfY29tbWVudDogJ1N0b3JhZ2U6IC9zdG9yYWdlL3YxLyogLT4gaHR0cDovL3N0b3JhZ2U6NTAwMC8qJ1xuICAgIHVybDogaHR0cDovL3N0b3JhZ2U6NTAwMC9cbiAgICByb3V0ZXM6XG4gICAgICAtIG5hbWU6IHN0b3JhZ2UtdjEtYWxsXG4gICAgICAgIHN0cmlwX3BhdGg6IHRydWVcbiAgICAgICAgcGF0aHM6XG4gICAgICAgICAgLSAvc3RvcmFnZS92MS9cbiAgICBwbHVnaW5zOlxuICAgICAgLSBuYW1lOiBjb3JzXG5cbiAgIyMgRWRnZSBGdW5jdGlvbnMgcm91dGVzXG4gIC0gbmFtZTogZnVuY3Rpb25zLXYxXG4gICAgX2NvbW1lbnQ6ICdFZGdlIEZ1bmN0aW9uczogL2Z1bmN0aW9ucy92MS8qIC0+IGh0dHA6Ly9mdW5jdGlvbnM6OTAwMC8qJ1xuICAgIHVybDogaHR0cDovL2Z1bmN0aW9uczo5MDAwL1xuICAgIHJvdXRlczpcbiAgICAgIC0gbmFtZTogZnVuY3Rpb25zLXYxLWFsbFxuICAgICAgICBzdHJpcF9wYXRoOiB0cnVlXG4gICAgICAgIHBhdGhzOlxuICAgICAgICAgIC0gL2Z1bmN0aW9ucy92MS9cbiAgICBwbHVnaW5zOlxuICAgICAgLSBuYW1lOiBjb3JzXG5cbiAgIyMgQW5hbHl0aWNzIHJvdXRlc1xuICAtIG5hbWU6IGFuYWx5dGljcy12MVxuICAgIF9jb21tZW50OiAnQW5hbHl0aWNzOiAvYW5hbHl0aWNzL3YxLyogLT4gaHR0cDovL2xvZ2ZsYXJlOjQwMDAvKidcbiAgICB1cmw6IGh0dHA6Ly9hbmFseXRpY3M6NDAwMC9cbiAgICByb3V0ZXM6XG4gICAgICAtIG5hbWU6IGFuYWx5dGljcy12MS1hbGxcbiAgICAgICAgc3RyaXBfcGF0aDogdHJ1ZVxuICAgICAgICBwYXRoczpcbiAgICAgICAgICAtIC9hbmFseXRpY3MvdjEvXG5cbiAgIyMgU2VjdXJlIERhdGFiYXNlIHJvdXRlc1xuICAtIG5hbWU6IG1ldGFcbiAgICBfY29tbWVudDogJ3BnLW1ldGE6IC9wZy8qIC0+IGh0dHA6Ly9wZy1tZXRhOjgwODAvKidcbiAgICB1cmw6IGh0dHA6Ly9tZXRhOjgwODAvXG4gICAgcm91dGVzOlxuICAgICAgLSBuYW1lOiBtZXRhLWFsbFxuICAgICAgICBzdHJpcF9wYXRoOiB0cnVlXG4gICAgICAgIHBhdGhzOlxuICAgICAgICAgIC0gL3BnL1xuICAgIHBsdWdpbnM6XG4gICAgICAtIG5hbWU6IGtleS1hdXRoXG4gICAgICAgIGNvbmZpZzpcbiAgICAgICAgICBoaWRlX2NyZWRlbnRpYWxzOiBmYWxzZVxuICAgICAgLSBuYW1lOiBhY2xcbiAgICAgICAgY29uZmlnOlxuICAgICAgICAgIGhpZGVfZ3JvdXBzX2hlYWRlcjogdHJ1ZVxuICAgICAgICAgIGFsbG93OlxuICAgICAgICAgICAgLSBhZG1pblxuXG4gICMjIFByb3RlY3RlZCBEYXNoYm9hcmQgLSBjYXRjaCBhbGwgcmVtYWluaW5nIHJvdXRlc1xuICAtIG5hbWU6IGRhc2hib2FyZFxuICAgIF9jb21tZW50OiAnU3R1ZGlvOiAvKiAtPiBodHRwOi8vc3R1ZGlvOjMwMDAvKidcbiAgICB1cmw6IGh0dHA6Ly9zdHVkaW86MzAwMC9cbiAgICByb3V0ZXM6XG4gICAgICAtIG5hbWU6IGRhc2hib2FyZC1hbGxcbiAgICAgICAgc3RyaXBfcGF0aDogdHJ1ZVxuICAgICAgICBwYXRoczpcbiAgICAgICAgICAtIC9cbiAgICBwbHVnaW5zOlxuICAgICAgLSBuYW1lOiBjb3JzXG4gICAgICAtIG5hbWU6IGJhc2ljLWF1dGhcbiAgICAgICAgY29uZmlnOlxuICAgICAgICAgIGhpZGVfY3JlZGVudGlhbHM6IHRydWVcblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi92b2x1bWVzL2RiL2luaXQvZGF0YS5zcWxcIlxuY29udGVudCA9IFwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9kYi9fc3VwYWJhc2Uuc3FsXCJcbmNvbnRlbnQgPSBcIlwiXCJcXFxcc2V0IHBndXNlciBgZWNobyBcIiRQT1NUR1JFU19VU0VSXCJgXG5cbkNSRUFURSBEQVRBQkFTRSBfc3VwYWJhc2UgV0lUSCBPV05FUiA6cGd1c2VyO1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvZGIvand0LnNxbFwiXG5jb250ZW50ID0gXCJcIlwiXG5cXFxcc2V0IGp3dF9zZWNyZXQgYGVjaG8gXCIkSldUX1NFQ1JFVFwiYFxuXFxcXHNldCBqd3RfZXhwIGBlY2hvIFwiJEpXVF9FWFBcImBcblxuQUxURVIgREFUQUJBU0UgcG9zdGdyZXMgU0VUIFwiYXBwLnNldHRpbmdzLmp3dF9zZWNyZXRcIiBUTyA6J2p3dF9zZWNyZXQnO1xuQUxURVIgREFUQUJBU0UgcG9zdGdyZXMgU0VUIFwiYXBwLnNldHRpbmdzLmp3dF9leHBcIiBUTyA6J2p3dF9leHAnO1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvZGIvbG9ncy5zcWxcIlxuY29udGVudCA9IFwiXCJcIlxuXFxcXHNldCBwZ3VzZXIgYGVjaG8gXCIkUE9TVEdSRVNfVVNFUlwiYFxuXG5cXFxcYyBfc3VwYWJhc2VcbmNyZWF0ZSBzY2hlbWEgaWYgbm90IGV4aXN0cyBfYW5hbHl0aWNzO1xuYWx0ZXIgc2NoZW1hIF9hbmFseXRpY3Mgb3duZXIgdG8gOnBndXNlcjtcblxcXFxjIHBvc3RncmVzXG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9kYi9wb29sZXIuc3FsXCJcbmNvbnRlbnQgPSBcIlwiXCJcblxcXFxzZXQgcGd1c2VyIGBlY2hvIFwiJFBPU1RHUkVTX1VTRVJcImBcblxuXFxcXGMgX3N1cGFiYXNlXG5jcmVhdGUgc2NoZW1hIGlmIG5vdCBleGlzdHMgX3N1cGF2aXNvcjtcbmFsdGVyIHNjaGVtYSBfc3VwYXZpc29yIG93bmVyIHRvIDpwZ3VzZXI7XG5cXFxcYyBwb3N0Z3Jlc1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvZGIvcmVhbHRpbWUuc3FsXCJcbmNvbnRlbnQgPSBcIlwiXCJcblxcXFxzZXQgcGd1c2VyIGBlY2hvIFwiJFBPU1RHUkVTX1VTRVJcImBcblxuY3JlYXRlIHNjaGVtYSBpZiBub3QgZXhpc3RzIF9yZWFsdGltZTtcbmFsdGVyIHNjaGVtYSBfcmVhbHRpbWUgb3duZXIgdG8gOnBndXNlcjtcblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi92b2x1bWVzL2RiL3JvbGVzLnNxbFwiXG5jb250ZW50ID0gXCJcIlwiXG4tLSBOT1RFOiBjaGFuZ2UgdG8geW91ciBvd24gcGFzc3dvcmRzIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50c1xuXFxcXHNldCBwZ3Bhc3MgYGVjaG8gXCIkUE9TVEdSRVNfUEFTU1dPUkRcImBcblxuQUxURVIgVVNFUiBhdXRoZW50aWNhdG9yIFdJVEggUEFTU1dPUkQgOidwZ3Bhc3MnO1xuQUxURVIgVVNFUiBwZ2JvdW5jZXIgV0lUSCBQQVNTV09SRCA6J3BncGFzcyc7XG5BTFRFUiBVU0VSIHN1cGFiYXNlX2F1dGhfYWRtaW4gV0lUSCBQQVNTV09SRCA6J3BncGFzcyc7XG5BTFRFUiBVU0VSIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiBXSVRIIFBBU1NXT1JEIDoncGdwYXNzJztcbkFMVEVSIFVTRVIgc3VwYWJhc2Vfc3RvcmFnZV9hZG1pbiBXSVRIIFBBU1NXT1JEIDoncGdwYXNzJztcblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi92b2x1bWVzL2RiL3dlYmhvb2tzLnNxbFwiXG5jb250ZW50ID0gXCJcIlwiXG5CRUdJTjtcbiAgLS0gQ3JlYXRlIHBnX25ldCBleHRlbnNpb25cbiAgQ1JFQVRFIEVYVEVOU0lPTiBJRiBOT1QgRVhJU1RTIHBnX25ldCBTQ0hFTUEgZXh0ZW5zaW9ucztcbiAgLS0gQ3JlYXRlIHN1cGFiYXNlX2Z1bmN0aW9ucyBzY2hlbWFcbiAgQ1JFQVRFIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgQVVUSE9SSVpBVElPTiBzdXBhYmFzZV9hZG1pbjtcbiAgR1JBTlQgVVNBR0UgT04gU0NIRU1BIHN1cGFiYXNlX2Z1bmN0aW9ucyBUTyBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMgSU4gU0NIRU1BIHN1cGFiYXNlX2Z1bmN0aW9ucyBHUkFOVCBBTEwgT04gVEFCTEVTIFRPIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG4gIEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBJTiBTQ0hFTUEgc3VwYWJhc2VfZnVuY3Rpb25zIEdSQU5UIEFMTCBPTiBGVU5DVElPTlMgVE8gcG9zdGdyZXMsIGFub24sIGF1dGhlbnRpY2F0ZWQsIHNlcnZpY2Vfcm9sZTtcbiAgQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIElOIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgR1JBTlQgQUxMIE9OIFNFUVVFTkNFUyBUTyBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICAtLSBzdXBhYmFzZV9mdW5jdGlvbnMubWlncmF0aW9ucyBkZWZpbml0aW9uXG4gIENSRUFURSBUQUJMRSBzdXBhYmFzZV9mdW5jdGlvbnMubWlncmF0aW9ucyAoXG4gICAgdmVyc2lvbiB0ZXh0IFBSSU1BUlkgS0VZLFxuICAgIGluc2VydGVkX2F0IHRpbWVzdGFtcHR6IE5PVCBOVUxMIERFRkFVTFQgTk9XKClcbiAgKTtcbiAgLS0gSW5pdGlhbCBzdXBhYmFzZV9mdW5jdGlvbnMgbWlncmF0aW9uXG4gIElOU0VSVCBJTlRPIHN1cGFiYXNlX2Z1bmN0aW9ucy5taWdyYXRpb25zICh2ZXJzaW9uKSBWQUxVRVMgKCdpbml0aWFsJyk7XG4gIC0tIHN1cGFiYXNlX2Z1bmN0aW9ucy5ob29rcyBkZWZpbml0aW9uXG4gIENSRUFURSBUQUJMRSBzdXBhYmFzZV9mdW5jdGlvbnMuaG9va3MgKFxuICAgIGlkIGJpZ3NlcmlhbCBQUklNQVJZIEtFWSxcbiAgICBob29rX3RhYmxlX2lkIGludGVnZXIgTk9UIE5VTEwsXG4gICAgaG9va19uYW1lIHRleHQgTk9UIE5VTEwsXG4gICAgY3JlYXRlZF9hdCB0aW1lc3RhbXB0eiBOT1QgTlVMTCBERUZBVUxUIE5PVygpLFxuICAgIHJlcXVlc3RfaWQgYmlnaW50XG4gICk7XG4gIENSRUFURSBJTkRFWCBzdXBhYmFzZV9mdW5jdGlvbnNfaG9va3NfcmVxdWVzdF9pZF9pZHggT04gc3VwYWJhc2VfZnVuY3Rpb25zLmhvb2tzIFVTSU5HIGJ0cmVlIChyZXF1ZXN0X2lkKTtcbiAgQ1JFQVRFIElOREVYIHN1cGFiYXNlX2Z1bmN0aW9uc19ob29rc19oX3RhYmxlX2lkX2hfbmFtZV9pZHggT04gc3VwYWJhc2VfZnVuY3Rpb25zLmhvb2tzIFVTSU5HIGJ0cmVlIChob29rX3RhYmxlX2lkLCBob29rX25hbWUpO1xuICBDT01NRU5UIE9OIFRBQkxFIHN1cGFiYXNlX2Z1bmN0aW9ucy5ob29rcyBJUyAnU3VwYWJhc2UgRnVuY3Rpb25zIEhvb2tzOiBBdWRpdCB0cmFpbCBmb3IgdHJpZ2dlcmVkIGhvb2tzLic7XG4gIENSRUFURSBGVU5DVElPTiBzdXBhYmFzZV9mdW5jdGlvbnMuaHR0cF9yZXF1ZXN0KClcbiAgICBSRVRVUk5TIHRyaWdnZXJcbiAgICBMQU5HVUFHRSBwbHBnc3FsXG4gICAgQVMgJGZ1bmN0aW9uJFxuICAgIERFQ0xBUkVcbiAgICAgIHJlcXVlc3RfaWQgYmlnaW50O1xuICAgICAgcGF5bG9hZCBqc29uYjtcbiAgICAgIHVybCB0ZXh0IDo9IFRHX0FSR1ZbMF06OnRleHQ7XG4gICAgICBtZXRob2QgdGV4dCA6PSBUR19BUkdWWzFdOjp0ZXh0O1xuICAgICAgaGVhZGVycyBqc29uYiBERUZBVUxUICd7fSc6Ompzb25iO1xuICAgICAgcGFyYW1zIGpzb25iIERFRkFVTFQgJ3t9Jzo6anNvbmI7XG4gICAgICB0aW1lb3V0X21zIGludGVnZXIgREVGQVVMVCAxMDAwO1xuICAgIEJFR0lOXG4gICAgICBJRiB1cmwgSVMgTlVMTCBPUiB1cmwgPSAnbnVsbCcgVEhFTlxuICAgICAgICBSQUlTRSBFWENFUFRJT04gJ3VybCBhcmd1bWVudCBpcyBtaXNzaW5nJztcbiAgICAgIEVORCBJRjtcblxuICAgICAgSUYgbWV0aG9kIElTIE5VTEwgT1IgbWV0aG9kID0gJ251bGwnIFRIRU5cbiAgICAgICAgUkFJU0UgRVhDRVBUSU9OICdtZXRob2QgYXJndW1lbnQgaXMgbWlzc2luZyc7XG4gICAgICBFTkQgSUY7XG5cbiAgICAgIElGIFRHX0FSR1ZbMl0gSVMgTlVMTCBPUiBUR19BUkdWWzJdID0gJ251bGwnIFRIRU5cbiAgICAgICAgaGVhZGVycyA9ICd7XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJ9Jzo6anNvbmI7XG4gICAgICBFTFNFXG4gICAgICAgIGhlYWRlcnMgPSBUR19BUkdWWzJdOjpqc29uYjtcbiAgICAgIEVORCBJRjtcblxuICAgICAgSUYgVEdfQVJHVlszXSBJUyBOVUxMIE9SIFRHX0FSR1ZbM10gPSAnbnVsbCcgVEhFTlxuICAgICAgICBwYXJhbXMgPSAne30nOjpqc29uYjtcbiAgICAgIEVMU0VcbiAgICAgICAgcGFyYW1zID0gVEdfQVJHVlszXTo6anNvbmI7XG4gICAgICBFTkQgSUY7XG5cbiAgICAgIElGIFRHX0FSR1ZbNF0gSVMgTlVMTCBPUiBUR19BUkdWWzRdID0gJ251bGwnIFRIRU5cbiAgICAgICAgdGltZW91dF9tcyA9IDEwMDA7XG4gICAgICBFTFNFXG4gICAgICAgIHRpbWVvdXRfbXMgPSBUR19BUkdWWzRdOjppbnRlZ2VyO1xuICAgICAgRU5EIElGO1xuXG4gICAgICBDQVNFXG4gICAgICAgIFdIRU4gbWV0aG9kID0gJ0dFVCcgVEhFTlxuICAgICAgICAgIFNFTEVDVCBodHRwX2dldCBJTlRPIHJlcXVlc3RfaWQgRlJPTSBuZXQuaHR0cF9nZXQoXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgdGltZW91dF9tc1xuICAgICAgICAgICk7XG4gICAgICAgIFdIRU4gbWV0aG9kID0gJ1BPU1QnIFRIRU5cbiAgICAgICAgICBwYXlsb2FkID0ganNvbmJfYnVpbGRfb2JqZWN0KFxuICAgICAgICAgICAgJ29sZF9yZWNvcmQnLCBPTEQsXG4gICAgICAgICAgICAncmVjb3JkJywgTkVXLFxuICAgICAgICAgICAgJ3R5cGUnLCBUR19PUCxcbiAgICAgICAgICAgICd0YWJsZScsIFRHX1RBQkxFX05BTUUsXG4gICAgICAgICAgICAnc2NoZW1hJywgVEdfVEFCTEVfU0NIRU1BXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIFNFTEVDVCBodHRwX3Bvc3QgSU5UTyByZXF1ZXN0X2lkIEZST00gbmV0Lmh0dHBfcG9zdChcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgdGltZW91dF9tc1xuICAgICAgICAgICk7XG4gICAgICAgIEVMU0VcbiAgICAgICAgICBSQUlTRSBFWENFUFRJT04gJ21ldGhvZCBhcmd1bWVudCAlIGlzIGludmFsaWQnLCBtZXRob2Q7XG4gICAgICBFTkQgQ0FTRTtcblxuICAgICAgSU5TRVJUIElOVE8gc3VwYWJhc2VfZnVuY3Rpb25zLmhvb2tzXG4gICAgICAgIChob29rX3RhYmxlX2lkLCBob29rX25hbWUsIHJlcXVlc3RfaWQpXG4gICAgICBWQUxVRVNcbiAgICAgICAgKFRHX1JFTElELCBUR19OQU1FLCByZXF1ZXN0X2lkKTtcblxuICAgICAgUkVUVVJOIE5FVztcbiAgICBFTkRcbiAgJGZ1bmN0aW9uJDtcbiAgLS0gU3VwYWJhc2Ugc3VwZXIgYWRtaW5cbiAgRE9cbiAgJCRcbiAgQkVHSU5cbiAgICBJRiBOT1QgRVhJU1RTIChcbiAgICAgIFNFTEVDVCAxXG4gICAgICBGUk9NIHBnX3JvbGVzXG4gICAgICBXSEVSRSByb2xuYW1lID0gJ3N1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbidcbiAgICApXG4gICAgVEhFTlxuICAgICAgQ1JFQVRFIFVTRVIgc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluIE5PSU5IRVJJVCBDUkVBVEVST0xFIExPR0lOIE5PUkVQTElDQVRJT047XG4gICAgRU5EIElGO1xuICBFTkRcbiAgJCQ7XG4gIEdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBBTEwgVEFCTEVTIElOIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBBTEwgU0VRVUVOQ0VTIElOIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBBTFRFUiBVU0VSIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiBTRVQgc2VhcmNoX3BhdGggPSBcInN1cGFiYXNlX2Z1bmN0aW9uc1wiO1xuICBBTFRFUiB0YWJsZSBcInN1cGFiYXNlX2Z1bmN0aW9uc1wiLm1pZ3JhdGlvbnMgT1dORVIgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBBTFRFUiB0YWJsZSBcInN1cGFiYXNlX2Z1bmN0aW9uc1wiLmhvb2tzIE9XTkVSIFRPIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbjtcbiAgQUxURVIgZnVuY3Rpb24gXCJzdXBhYmFzZV9mdW5jdGlvbnNcIi5odHRwX3JlcXVlc3QoKSBPV05FUiBUTyBzdXBhYmFzZV9mdW5jdGlvbnNfYWRtaW47XG4gIEdSQU5UIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiBUTyBwb3N0Z3JlcztcbiAgLS0gUmVtb3ZlIHVudXNlZCBzdXBhYmFzZV9wZ19uZXRfYWRtaW4gcm9sZVxuICBET1xuICAkJFxuICBCRUdJTlxuICAgIElGIEVYSVNUUyAoXG4gICAgICBTRUxFQ1QgMVxuICAgICAgRlJPTSBwZ19yb2xlc1xuICAgICAgV0hFUkUgcm9sbmFtZSA9ICdzdXBhYmFzZV9wZ19uZXRfYWRtaW4nXG4gICAgKVxuICAgIFRIRU5cbiAgICAgIFJFQVNTSUdOIE9XTkVEIEJZIHN1cGFiYXNlX3BnX25ldF9hZG1pbiBUTyBzdXBhYmFzZV9hZG1pbjtcbiAgICAgIERST1AgT1dORUQgQlkgc3VwYWJhc2VfcGdfbmV0X2FkbWluO1xuICAgICAgRFJPUCBST0xFIHN1cGFiYXNlX3BnX25ldF9hZG1pbjtcbiAgICBFTkQgSUY7XG4gIEVORFxuICAkJDtcbiAgLS0gcGdfbmV0IGdyYW50cyB3aGVuIGV4dGVuc2lvbiBpcyBhbHJlYWR5IGVuYWJsZWRcbiAgRE9cbiAgJCRcbiAgQkVHSU5cbiAgICBJRiBFWElTVFMgKFxuICAgICAgU0VMRUNUIDFcbiAgICAgIEZST00gcGdfZXh0ZW5zaW9uXG4gICAgICBXSEVSRSBleHRuYW1lID0gJ3BnX25ldCdcbiAgICApXG4gICAgVEhFTlxuICAgICAgR1JBTlQgVVNBR0UgT04gU0NIRU1BIG5ldCBUTyBzdXBhYmFzZV9mdW5jdGlvbnNfYWRtaW4sIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9nZXQodXJsIHRleHQsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgU0VDVVJJVFkgREVGSU5FUjtcbiAgICAgIEFMVEVSIGZ1bmN0aW9uIG5ldC5odHRwX3Bvc3QodXJsIHRleHQsIGJvZHkganNvbmIsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgU0VDVVJJVFkgREVGSU5FUjtcbiAgICAgIEFMVEVSIGZ1bmN0aW9uIG5ldC5odHRwX2dldCh1cmwgdGV4dCwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBTRVQgc2VhcmNoX3BhdGggPSBuZXQ7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFNFVCBzZWFyY2hfcGF0aCA9IG5ldDtcbiAgICAgIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gbmV0Lmh0dHBfZ2V0KHVybCB0ZXh0LCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIEZST00gUFVCTElDO1xuICAgICAgUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIEZST00gUFVCTElDO1xuICAgICAgR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBuZXQuaHR0cF9nZXQodXJsIHRleHQsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluLCBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICAgICAgR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFRPIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiwgcG9zdGdyZXMsIGFub24sIGF1dGhlbnRpY2F0ZWQsIHNlcnZpY2Vfcm9sZTtcbiAgICBFTkQgSUY7XG4gIEVORFxuICAkJDtcbiAgLS0gRXZlbnQgdHJpZ2dlciBmb3IgcGdfbmV0XG4gIENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGV4dGVuc2lvbnMuZ3JhbnRfcGdfbmV0X2FjY2VzcygpXG4gIFJFVFVSTlMgZXZlbnRfdHJpZ2dlclxuICBMQU5HVUFHRSBwbHBnc3FsXG4gIEFTICQkXG4gIEJFR0lOXG4gICAgSUYgRVhJU1RTIChcbiAgICAgIFNFTEVDVCAxXG4gICAgICBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkgQVMgZXZcbiAgICAgIEpPSU4gcGdfZXh0ZW5zaW9uIEFTIGV4dFxuICAgICAgT04gZXYub2JqaWQgPSBleHQub2lkXG4gICAgICBXSEVSRSBleHQuZXh0bmFtZSA9ICdwZ19uZXQnXG4gICAgKVxuICAgIFRIRU5cbiAgICAgIEdSQU5UIFVTQUdFIE9OIFNDSEVNQSBuZXQgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluLCBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICAgICAgQUxURVIgZnVuY3Rpb24gbmV0Lmh0dHBfZ2V0KHVybCB0ZXh0LCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFNFQ1VSSVRZIERFRklORVI7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFNFQ1VSSVRZIERFRklORVI7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9nZXQodXJsIHRleHQsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgU0VUIHNlYXJjaF9wYXRoID0gbmV0O1xuICAgICAgQUxURVIgZnVuY3Rpb24gbmV0Lmh0dHBfcG9zdCh1cmwgdGV4dCwgYm9keSBqc29uYiwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBTRVQgc2VhcmNoX3BhdGggPSBuZXQ7XG4gICAgICBSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIG5ldC5odHRwX2dldCh1cmwgdGV4dCwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBGUk9NIFBVQkxJQztcbiAgICAgIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gbmV0Lmh0dHBfcG9zdCh1cmwgdGV4dCwgYm9keSBqc29uYiwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBGUk9NIFBVQkxJQztcbiAgICAgIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gbmV0Lmh0dHBfZ2V0KHVybCB0ZXh0LCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFRPIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiwgcG9zdGdyZXMsIGFub24sIGF1dGhlbnRpY2F0ZWQsIHNlcnZpY2Vfcm9sZTtcbiAgICAgIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gbmV0Lmh0dHBfcG9zdCh1cmwgdGV4dCwgYm9keSBqc29uYiwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBUTyBzdXBhYmFzZV9mdW5jdGlvbnNfYWRtaW4sIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG4gICAgRU5EIElGO1xuICBFTkQ7XG4gICQkO1xuICBDT01NRU5UIE9OIEZVTkNUSU9OIGV4dGVuc2lvbnMuZ3JhbnRfcGdfbmV0X2FjY2VzcyBJUyAnR3JhbnRzIGFjY2VzcyB0byBwZ19uZXQnO1xuICBET1xuICAkJFxuICBCRUdJTlxuICAgIElGIE5PVCBFWElTVFMgKFxuICAgICAgU0VMRUNUIDFcbiAgICAgIEZST00gcGdfZXZlbnRfdHJpZ2dlclxuICAgICAgV0hFUkUgZXZ0bmFtZSA9ICdpc3N1ZV9wZ19uZXRfYWNjZXNzJ1xuICAgICkgVEhFTlxuICAgICAgQ1JFQVRFIEVWRU5UIFRSSUdHRVIgaXNzdWVfcGdfbmV0X2FjY2VzcyBPTiBkZGxfY29tbWFuZF9lbmQgV0hFTiBUQUcgSU4gKCdDUkVBVEUgRVhURU5TSU9OJylcbiAgICAgIEVYRUNVVEUgUFJPQ0VEVVJFIGV4dGVuc2lvbnMuZ3JhbnRfcGdfbmV0X2FjY2VzcygpO1xuICAgIEVORCBJRjtcbiAgRU5EXG4gICQkO1xuICBJTlNFUlQgSU5UTyBzdXBhYmFzZV9mdW5jdGlvbnMubWlncmF0aW9ucyAodmVyc2lvbikgVkFMVUVTICgnMjAyMTA4MDkxODM0MjNfdXBkYXRlX2dyYW50cycpO1xuICBBTFRFUiBmdW5jdGlvbiBzdXBhYmFzZV9mdW5jdGlvbnMuaHR0cF9yZXF1ZXN0KCkgU0VDVVJJVFkgREVGSU5FUjtcbiAgQUxURVIgZnVuY3Rpb24gc3VwYWJhc2VfZnVuY3Rpb25zLmh0dHBfcmVxdWVzdCgpIFNFVCBzZWFyY2hfcGF0aCA9IHN1cGFiYXNlX2Z1bmN0aW9ucztcbiAgUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBzdXBhYmFzZV9mdW5jdGlvbnMuaHR0cF9yZXF1ZXN0KCkgRlJPTSBQVUJMSUM7XG4gIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gc3VwYWJhc2VfZnVuY3Rpb25zLmh0dHBfcmVxdWVzdCgpIFRPIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG5DT01NSVQ7XG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9mdW5jdGlvbnMvaGVsbG8vaW5kZXgudHNcIlxuY29udGVudCA9IFwiXCJcIlxuLy8gRm9sbG93IHRoaXMgc2V0dXAgZ3VpZGUgdG8gaW50ZWdyYXRlIHRoZSBEZW5vIGxhbmd1YWdlIHNlcnZlciB3aXRoIHlvdXIgZWRpdG9yOlxuLy8gaHR0cHM6Ly9kZW5vLmxhbmQvbWFudWFsL2dldHRpbmdfc3RhcnRlZC9zZXR1cF95b3VyX2Vudmlyb25tZW50XG4vLyBUaGlzIGVuYWJsZXMgYXV0b2NvbXBsZXRlLCBnbyB0byBkZWZpbml0aW9uLCBldGMuXG5cbmltcG9ydCB7IHNlcnZlIH0gZnJvbSBcImh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE3Ny4xL2h0dHAvc2VydmVyLnRzXCJcblxuc2VydmUoYXN5bmMgKCkgPT4ge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKFxuICAgIGBcIkhlbGxvIGZyb20gRWRnZSBGdW5jdGlvbnMhXCJgLFxuICAgIHsgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IH0sXG4gIClcbn0pXG5cbi8vIFRvIGludm9rZTpcbi8vIGN1cmwgJ2h0dHA6Ly9sb2NhbGhvc3Q6PEtPTkdfSFRUUF9QT1JUPi9mdW5jdGlvbnMvdjEvaGVsbG8nIFxcXG4vLyAgIC0taGVhZGVyICdBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFub24vc2VydmljZV9yb2xlIEFQSSBrZXk+J1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvZnVuY3Rpb25zL21haW4vaW5kZXgudHNcIlxuY29udGVudCA9IFwiXCJcImltcG9ydCB7IHNlcnZlIH0gZnJvbSAnaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTMxLjAvaHR0cC9zZXJ2ZXIudHMnXG5pbXBvcnQgKiBhcyBqb3NlIGZyb20gJ2h0dHBzOi8vZGVuby5sYW5kL3gvam9zZUB2NC4xNC40L2luZGV4LnRzJ1xuXG5jb25zb2xlLmxvZygnbWFpbiBmdW5jdGlvbiBzdGFydGVkJylcblxuY29uc3QgSldUX1NFQ1JFVCA9IERlbm8uZW52LmdldCgnSldUX1NFQ1JFVCcpXG5jb25zdCBWRVJJRllfSldUID0gRGVuby5lbnYuZ2V0KCdWRVJJRllfSldUJykgPT09ICd0cnVlJ1xuXG5mdW5jdGlvbiBnZXRBdXRoVG9rZW4ocmVxOiBSZXF1ZXN0KSB7XG4gIGNvbnN0IGF1dGhIZWFkZXIgPSByZXEuaGVhZGVycy5nZXQoJ2F1dGhvcml6YXRpb24nKVxuICBpZiAoIWF1dGhIZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXInKVxuICB9XG4gIGNvbnN0IFtiZWFyZXIsIHRva2VuXSA9IGF1dGhIZWFkZXIuc3BsaXQoJyAnKVxuICBpZiAoYmVhcmVyICE9PSAnQmVhcmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCBoZWFkZXIgaXMgbm90ICdCZWFyZXIge3Rva2VufSdgKVxuICB9XG4gIHJldHVybiB0b2tlblxufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlKV1Qoand0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG4gIGNvbnN0IHNlY3JldEtleSA9IGVuY29kZXIuZW5jb2RlKEpXVF9TRUNSRVQpXG4gIHRyeSB7XG4gICAgYXdhaXQgam9zZS5qd3RWZXJpZnkoand0LCBzZWNyZXRLZXkpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbnNlcnZlKGFzeW5jIChyZXE6IFJlcXVlc3QpID0+IHtcbiAgaWYgKHJlcS5tZXRob2QgIT09ICdPUFRJT05TJyAmJiBWRVJJRllfSldUKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuID0gZ2V0QXV0aFRva2VuKHJlcSlcbiAgICAgIGNvbnN0IGlzVmFsaWRKV1QgPSBhd2FpdCB2ZXJpZnlKV1QodG9rZW4pXG5cbiAgICAgIGlmICghaXNWYWxpZEpXVCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHsgbXNnOiAnSW52YWxpZCBKV1QnIH0pLCB7XG4gICAgICAgICAgc3RhdHVzOiA0MDEsXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeSh7IG1zZzogZS50b1N0cmluZygpIH0pLCB7XG4gICAgICAgIHN0YXR1czogNDAxLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKVxuICBjb25zdCB7IHBhdGhuYW1lIH0gPSB1cmxcbiAgY29uc3QgcGF0aF9wYXJ0cyA9IHBhdGhuYW1lLnNwbGl0KCcvJylcbiAgY29uc3Qgc2VydmljZV9uYW1lID0gcGF0aF9wYXJ0c1sxXVxuXG4gIGlmICghc2VydmljZV9uYW1lIHx8IHNlcnZpY2VfbmFtZSA9PT0gJycpIHtcbiAgICBjb25zdCBlcnJvciA9IHsgbXNnOiAnbWlzc2luZyBmdW5jdGlvbiBuYW1lIGluIHJlcXVlc3QnIH1cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KGVycm9yKSwge1xuICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgc2VydmljZVBhdGggPSBgL2hvbWUvZGVuby9mdW5jdGlvbnMvJHtzZXJ2aWNlX25hbWV9YFxuICBjb25zb2xlLmVycm9yKGBzZXJ2aW5nIHRoZSByZXF1ZXN0IHdpdGggJHtzZXJ2aWNlUGF0aH1gKVxuXG4gIGNvbnN0IG1lbW9yeUxpbWl0TWIgPSAxNTBcbiAgY29uc3Qgd29ya2VyVGltZW91dE1zID0gMSAqIDYwICogMTAwMFxuICBjb25zdCBub01vZHVsZUNhY2hlID0gZmFsc2VcbiAgY29uc3QgaW1wb3J0TWFwUGF0aCA9IG51bGxcbiAgY29uc3QgZW52VmFyc09iaiA9IERlbm8uZW52LnRvT2JqZWN0KClcbiAgY29uc3QgZW52VmFycyA9IE9iamVjdC5rZXlzKGVudlZhcnNPYmopLm1hcCgoaykgPT4gW2ssIGVudlZhcnNPYmpba11dKVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgd29ya2VyID0gYXdhaXQgRWRnZVJ1bnRpbWUudXNlcldvcmtlcnMuY3JlYXRlKHtcbiAgICAgIHNlcnZpY2VQYXRoLFxuICAgICAgbWVtb3J5TGltaXRNYixcbiAgICAgIHdvcmtlclRpbWVvdXRNcyxcbiAgICAgIG5vTW9kdWxlQ2FjaGUsXG4gICAgICBpbXBvcnRNYXBQYXRoLFxuICAgICAgZW52VmFycyxcbiAgICB9KVxuICAgIHJldHVybiBhd2FpdCB3b3JrZXIuZmV0Y2gocmVxKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgZXJyb3IgPSB7IG1zZzogZS50b1N0cmluZygpIH1cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KGVycm9yKSwge1xuICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KVxuICB9XG59KVxuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvbG9ncy92ZWN0b3IueW1sXCJcbmNvbnRlbnQgPSBcIlwiXCJhcGk6XG4gIGVuYWJsZWQ6IHRydWVcbiAgYWRkcmVzczogMC4wLjAuMDo5MDAxXG5cbnNvdXJjZXM6XG4gIGRvY2tlcl9ob3N0OlxuICAgIHR5cGU6IGRvY2tlcl9sb2dzXG4gICAgZXhjbHVkZV9jb250YWluZXJzOlxuICAgICAgLSAke2NvbnRhaW5lcl9uYW1lX3ByZWZpeH0tdmVjdG9yXG5cbnRyYW5zZm9ybXM6XG4gIHByb2plY3RfbG9nczpcbiAgICB0eXBlOiByZW1hcFxuICAgIGlucHV0czpcbiAgICAgIC0gZG9ja2VyX2hvc3RcbiAgICBzb3VyY2U6IHwtXG4gICAgICAucHJvamVjdCA9IFwiZGVmYXVsdFwiXG4gICAgICAuZXZlbnRfbWVzc2FnZSA9IGRlbCgubWVzc2FnZSlcbiAgICAgIC5hcHBuYW1lID0gcmVwbGFjZSEoZGVsKC5jb250YWluZXJfbmFtZSksIFwiJHtjb250YWluZXJfbmFtZV9wcmVmaXh9XCIsIFwic3VwYWJhc2VcIilcbiAgICAgIGRlbCguY29udGFpbmVyX2NyZWF0ZWRfYXQpXG4gICAgICBkZWwoLmNvbnRhaW5lcl9pZClcbiAgICAgIGRlbCguc291cmNlX3R5cGUpXG4gICAgICBkZWwoLnN0cmVhbSlcbiAgICAgIGRlbCgubGFiZWwpXG4gICAgICBkZWwoLmltYWdlKVxuICAgICAgZGVsKC5ob3N0KVxuICAgICAgZGVsKC5zdHJlYW0pXG4gIHJvdXRlcjpcbiAgICB0eXBlOiByb3V0ZVxuICAgIGlucHV0czpcbiAgICAgIC0gcHJvamVjdF9sb2dzXG4gICAgcm91dGU6XG4gICAgICBrb25nOiAnLmFwcG5hbWUgPT0gXCJzdXBhYmFzZS1rb25nXCInXG4gICAgICBhdXRoOiAnLmFwcG5hbWUgPT0gXCJzdXBhYmFzZS1hdXRoXCInXG4gICAgICByZXN0OiAnLmFwcG5hbWUgPT0gXCJzdXBhYmFzZS1yZXN0XCInXG4gICAgICByZWFsdGltZTogJy5hcHBuYW1lID09IFwicmVhbHRpbWUtZGV2LnN1cGFiYXNlLXJlYWx0aW1lXCInXG4gICAgICBzdG9yYWdlOiAnLmFwcG5hbWUgPT0gXCJzdXBhYmFzZS1zdG9yYWdlXCInXG4gICAgICBmdW5jdGlvbnM6ICcuYXBwbmFtZSA9PSBcInN1cGFiYXNlLWVkZ2UtZnVuY3Rpb25zXCInXG4gICAgICBkYjogJy5hcHBuYW1lID09IFwic3VwYWJhc2UtZGJcIidcbiAgIyBJZ25vcmVzIG5vbiBuZ2lueCBlcnJvcnMgc2luY2UgdGhleSBhcmUgcmVsYXRlZCB3aXRoIGtvbmcgYm9vdGluZyB1cFxuICBrb25nX2xvZ3M6XG4gICAgdHlwZTogcmVtYXBcbiAgICBpbnB1dHM6XG4gICAgICAtIHJvdXRlci5rb25nXG4gICAgc291cmNlOiB8LVxuICAgICAgcmVxLCBlcnIgPSBwYXJzZV9uZ2lueF9sb2coLmV2ZW50X21lc3NhZ2UsIFwiY29tYmluZWRcIilcbiAgICAgIGlmIGVyciA9PSBudWxsIHtcbiAgICAgICAgICAudGltZXN0YW1wID0gcmVxLnRpbWVzdGFtcFxuICAgICAgICAgIC5tZXRhZGF0YS5yZXF1ZXN0LmhlYWRlcnMucmVmZXJlciA9IHJlcS5yZWZlcmVyXG4gICAgICAgICAgLm1ldGFkYXRhLnJlcXVlc3QuaGVhZGVycy51c2VyX2FnZW50ID0gcmVxLmFnZW50XG4gICAgICAgICAgLm1ldGFkYXRhLnJlcXVlc3QuaGVhZGVycy5jZl9jb25uZWN0aW5nX2lwID0gcmVxLmNsaWVudFxuICAgICAgICAgIC5tZXRhZGF0YS5yZXF1ZXN0Lm1ldGhvZCA9IHJlcS5tZXRob2RcbiAgICAgICAgICAubWV0YWRhdGEucmVxdWVzdC5wYXRoID0gcmVxLnBhdGhcbiAgICAgICAgICAubWV0YWRhdGEucmVxdWVzdC5wcm90b2NvbCA9IHJlcS5wcm90b2NvbFxuICAgICAgICAgIC5tZXRhZGF0YS5yZXNwb25zZS5zdGF0dXNfY29kZSA9IHJlcS5zdGF0dXNcbiAgICAgIH1cbiAgICAgIGlmIGVyciAhPSBudWxsIHtcbiAgICAgICAgYWJvcnRcbiAgICAgIH1cbiAgIyBJZ25vcmVzIG5vbiBuZ2lueCBlcnJvcnMgc2luY2UgdGhleSBhcmUgcmVsYXRlZCB3aXRoIGtvbmcgYm9vdGluZyB1cFxuICBrb25nX2VycjpcbiAgICB0eXBlOiByZW1hcFxuICAgIGlucHV0czpcbiAgICAgIC0gcm91dGVyLmtvbmdcbiAgICBzb3VyY2U6IHwtXG4gICAgICAubWV0YWRhdGEucmVxdWVzdC5tZXRob2QgPSBcIkdFVFwiXG4gICAgICAubWV0YWRhdGEucmVzcG9uc2Uuc3RhdHVzX2NvZGUgPSAyMDBcbiAgICAgIHBhcnNlZCwgZXJyID0gcGFyc2VfbmdpbnhfbG9nKC5ldmVudF9tZXNzYWdlLCBcImVycm9yXCIpXG4gICAgICBpZiBlcnIgPT0gbnVsbCB7XG4gICAgICAgICAgLnRpbWVzdGFtcCA9IHBhcnNlZC50aW1lc3RhbXBcbiAgICAgICAgICAuc2V2ZXJpdHkgPSBwYXJzZWQuc2V2ZXJpdHlcbiAgICAgICAgICAubWV0YWRhdGEucmVxdWVzdC5ob3N0ID0gcGFyc2VkLmhvc3RcbiAgICAgICAgICAubWV0YWRhdGEucmVxdWVzdC5oZWFkZXJzLmNmX2Nvbm5lY3RpbmdfaXAgPSBwYXJzZWQuY2xpZW50XG4gICAgICAgICAgdXJsLCBlcnIgPSBzcGxpdChwYXJzZWQucmVxdWVzdCwgXCIgXCIpXG4gICAgICAgICAgaWYgZXJyID09IG51bGwge1xuICAgICAgICAgICAgICAubWV0YWRhdGEucmVxdWVzdC5tZXRob2QgPSB1cmxbMF1cbiAgICAgICAgICAgICAgLm1ldGFkYXRhLnJlcXVlc3QucGF0aCA9IHVybFsxXVxuICAgICAgICAgICAgICAubWV0YWRhdGEucmVxdWVzdC5wcm90b2NvbCA9IHVybFsyXVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIGVyciAhPSBudWxsIHtcbiAgICAgICAgYWJvcnRcbiAgICAgIH1cbiAgIyBHb3RydWUgbG9ncyBhcmUgc3RydWN0dXJlZCBqc29uIHN0cmluZ3Mgd2hpY2ggZnJvbnRlbmQgcGFyc2VzIGRpcmVjdGx5LiBCdXQgd2Uga2VlcCBtZXRhZGF0YSBmb3IgY29uc2lzdGVuY3kuXG4gIGF1dGhfbG9nczpcbiAgICB0eXBlOiByZW1hcFxuICAgIGlucHV0czpcbiAgICAgIC0gcm91dGVyLmF1dGhcbiAgICBzb3VyY2U6IHwtXG4gICAgICBwYXJzZWQsIGVyciA9IHBhcnNlX2pzb24oLmV2ZW50X21lc3NhZ2UpXG4gICAgICBpZiBlcnIgPT0gbnVsbCB7XG4gICAgICAgICAgLm1ldGFkYXRhLnRpbWVzdGFtcCA9IHBhcnNlZC50aW1lXG4gICAgICAgICAgLm1ldGFkYXRhID0gbWVyZ2UhKC5tZXRhZGF0YSwgcGFyc2VkKVxuICAgICAgfVxuICAjIFBvc3RnUkVTVCBsb2dzIGFyZSBzdHJ1Y3R1cmVkIHNvIHdlIHNlcGFyYXRlIHRpbWVzdGFtcCBmcm9tIG1lc3NhZ2UgdXNpbmcgcmVnZXhcbiAgcmVzdF9sb2dzOlxuICAgIHR5cGU6IHJlbWFwXG4gICAgaW5wdXRzOlxuICAgICAgLSByb3V0ZXIucmVzdFxuICAgIHNvdXJjZTogfC1cbiAgICAgIHBhcnNlZCwgZXJyID0gcGFyc2VfcmVnZXgoLmV2ZW50X21lc3NhZ2UsIHInXig/UDx0aW1lPi4qKTogKD9QPG1zZz4uKikkJylcbiAgICAgIGlmIGVyciA9PSBudWxsIHtcbiAgICAgICAgICAuZXZlbnRfbWVzc2FnZSA9IHBhcnNlZC5tc2dcbiAgICAgICAgICAudGltZXN0YW1wID0gdG9fdGltZXN0YW1wIShwYXJzZWQudGltZSlcbiAgICAgICAgICAubWV0YWRhdGEuaG9zdCA9IC5wcm9qZWN0XG4gICAgICB9XG4gICMgUmVhbHRpbWUgbG9ncyBhcmUgc3RydWN0dXJlZCBzbyB3ZSBwYXJzZSB0aGUgc2V2ZXJpdHkgbGV2ZWwgdXNpbmcgcmVnZXggKGlnbm9yZSB0aW1lIGJlY2F1c2UgaXQgaGFzIG5vIGRhdGUpXG4gIHJlYWx0aW1lX2xvZ3M6XG4gICAgdHlwZTogcmVtYXBcbiAgICBpbnB1dHM6XG4gICAgICAtIHJvdXRlci5yZWFsdGltZVxuICAgIHNvdXJjZTogfC1cbiAgICAgIC5tZXRhZGF0YS5wcm9qZWN0ID0gZGVsKC5wcm9qZWN0KVxuICAgICAgLm1ldGFkYXRhLmV4dGVybmFsX2lkID0gLm1ldGFkYXRhLnByb2plY3RcbiAgICAgIHBhcnNlZCwgZXJyID0gcGFyc2VfcmVnZXgoLmV2ZW50X21lc3NhZ2UsIHInXig/UDx0aW1lPlxcXFxkKzpcXFxcZCs6XFxcXGQrXFxcXC5cXFxcZCspIFxcXFxbKD9QPGxldmVsPlxcXFx3KylcXFxcXSAoP1A8bXNnPi4qKSQnKVxuICAgICAgaWYgZXJyID09IG51bGwge1xuICAgICAgICAgIC5ldmVudF9tZXNzYWdlID0gcGFyc2VkLm1zZ1xuICAgICAgICAgIC5tZXRhZGF0YS5sZXZlbCA9IHBhcnNlZC5sZXZlbFxuICAgICAgfVxuICAjIFN0b3JhZ2UgbG9ncyBtYXkgY29udGFpbiBqc29uIG9iamVjdHMgc28gd2UgcGFyc2UgdGhlbSBmb3IgY29tcGxldGVuZXNzXG4gIHN0b3JhZ2VfbG9nczpcbiAgICB0eXBlOiByZW1hcFxuICAgIGlucHV0czpcbiAgICAgIC0gcm91dGVyLnN0b3JhZ2VcbiAgICBzb3VyY2U6IHwtXG4gICAgICAubWV0YWRhdGEucHJvamVjdCA9IGRlbCgucHJvamVjdClcbiAgICAgIC5tZXRhZGF0YS50ZW5hbnRJZCA9IC5tZXRhZGF0YS5wcm9qZWN0XG4gICAgICBwYXJzZWQsIGVyciA9IHBhcnNlX2pzb24oLmV2ZW50X21lc3NhZ2UpXG4gICAgICBpZiBlcnIgPT0gbnVsbCB7XG4gICAgICAgICAgLmV2ZW50X21lc3NhZ2UgPSBwYXJzZWQubXNnXG4gICAgICAgICAgLm1ldGFkYXRhLmxldmVsID0gcGFyc2VkLmxldmVsXG4gICAgICAgICAgLm1ldGFkYXRhLnRpbWVzdGFtcCA9IHBhcnNlZC50aW1lXG4gICAgICAgICAgLm1ldGFkYXRhLmNvbnRleHRbMF0uaG9zdCA9IHBhcnNlZC5ob3N0bmFtZVxuICAgICAgICAgIC5tZXRhZGF0YS5jb250ZXh0WzBdLnBpZCA9IHBhcnNlZC5waWRcbiAgICAgIH1cbiAgIyBQb3N0Z3JlcyBsb2dzIHNvbWUgbWVzc2FnZXMgdG8gc3RkZXJyIHdoaWNoIHdlIG1hcCB0byB3YXJuaW5nIHNldmVyaXR5IGxldmVsXG4gIGRiX2xvZ3M6XG4gICAgdHlwZTogcmVtYXBcbiAgICBpbnB1dHM6XG4gICAgICAtIHJvdXRlci5kYlxuICAgIHNvdXJjZTogfC1cbiAgICAgIC5tZXRhZGF0YS5ob3N0ID0gXCJkYi1kZWZhdWx0XCJcbiAgICAgIC5tZXRhZGF0YS5wYXJzZWQudGltZXN0YW1wID0gLnRpbWVzdGFtcFxuXG4gICAgICBwYXJzZWQsIGVyciA9IHBhcnNlX3JlZ2V4KC5ldmVudF9tZXNzYWdlLCByJy4qKD9QPGxldmVsPklORk98Tk9USUNFfFdBUk5JTkd8RVJST1J8TE9HfEZBVEFMfFBBTklDPyk6LionLCBudW1lcmljX2dyb3VwczogdHJ1ZSlcblxuICAgICAgaWYgZXJyICE9IG51bGwgfHwgcGFyc2VkID09IG51bGwge1xuICAgICAgICAubWV0YWRhdGEucGFyc2VkLmVycm9yX3NldmVyaXR5ID0gXCJpbmZvXCJcbiAgICAgIH1cbiAgICAgIGlmIHBhcnNlZCAhPSBudWxsIHtcbiAgICAgICAubWV0YWRhdGEucGFyc2VkLmVycm9yX3NldmVyaXR5ID0gcGFyc2VkLmxldmVsXG4gICAgICB9XG4gICAgICBpZiAubWV0YWRhdGEucGFyc2VkLmVycm9yX3NldmVyaXR5ID09IFwiaW5mb1wiIHtcbiAgICAgICAgICAubWV0YWRhdGEucGFyc2VkLmVycm9yX3NldmVyaXR5ID0gXCJsb2dcIlxuICAgICAgfVxuICAgICAgLm1ldGFkYXRhLnBhcnNlZC5lcnJvcl9zZXZlcml0eSA9IHVwY2FzZSEoLm1ldGFkYXRhLnBhcnNlZC5lcnJvcl9zZXZlcml0eSlcblxuc2lua3M6XG4gIGxvZ2ZsYXJlX2F1dGg6XG4gICAgdHlwZTogJ2h0dHAnXG4gICAgaW5wdXRzOlxuICAgICAgLSBhdXRoX2xvZ3NcbiAgICBlbmNvZGluZzpcbiAgICAgIGNvZGVjOiAnanNvbidcbiAgICBtZXRob2Q6ICdwb3N0J1xuICAgIHJlcXVlc3Q6XG4gICAgICByZXRyeV9tYXhfZHVyYXRpb25fc2VjczogMTBcbiAgICB1cmk6ICdodHRwOi8vYW5hbHl0aWNzOjQwMDAvYXBpL2xvZ3M/c291cmNlX25hbWU9Z290cnVlLmxvZ3MucHJvZCZhcGlfa2V5PSR7TE9HRkxBUkVfQVBJX0tFWT9MT0dGTEFSRV9BUElfS0VZIGlzIHJlcXVpcmVkfSdcbiAgbG9nZmxhcmVfcmVhbHRpbWU6XG4gICAgdHlwZTogJ2h0dHAnXG4gICAgaW5wdXRzOlxuICAgICAgLSByZWFsdGltZV9sb2dzXG4gICAgZW5jb2Rpbmc6XG4gICAgICBjb2RlYzogJ2pzb24nXG4gICAgbWV0aG9kOiAncG9zdCdcbiAgICByZXF1ZXN0OlxuICAgICAgcmV0cnlfbWF4X2R1cmF0aW9uX3NlY3M6IDEwXG4gICAgdXJpOiAnaHR0cDovL2FuYWx5dGljczo0MDAwL2FwaS9sb2dzP3NvdXJjZV9uYW1lPXJlYWx0aW1lLmxvZ3MucHJvZCZhcGlfa2V5PSR7TE9HRkxBUkVfQVBJX0tFWT9MT0dGTEFSRV9BUElfS0VZIGlzIHJlcXVpcmVkfSdcbiAgbG9nZmxhcmVfcmVzdDpcbiAgICB0eXBlOiAnaHR0cCdcbiAgICBpbnB1dHM6XG4gICAgICAtIHJlc3RfbG9nc1xuICAgIGVuY29kaW5nOlxuICAgICAgY29kZWM6ICdqc29uJ1xuICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgcmVxdWVzdDpcbiAgICAgIHJldHJ5X21heF9kdXJhdGlvbl9zZWNzOiAxMFxuICAgIHVyaTogJ2h0dHA6Ly9hbmFseXRpY3M6NDAwMC9hcGkvbG9ncz9zb3VyY2VfbmFtZT1wb3N0Z1JFU1QubG9ncy5wcm9kJmFwaV9rZXk9JHtMT0dGTEFSRV9BUElfS0VZP0xPR0ZMQVJFX0FQSV9LRVkgaXMgcmVxdWlyZWR9J1xuICBsb2dmbGFyZV9kYjpcbiAgICB0eXBlOiAnaHR0cCdcbiAgICBpbnB1dHM6XG4gICAgICAtIGRiX2xvZ3NcbiAgICBlbmNvZGluZzpcbiAgICAgIGNvZGVjOiAnanNvbidcbiAgICBtZXRob2Q6ICdwb3N0J1xuICAgIHJlcXVlc3Q6XG4gICAgICByZXRyeV9tYXhfZHVyYXRpb25fc2VjczogMTBcbiAgICAjIFdlIG11c3Qgcm91dGUgdGhlIHNpbmsgdGhyb3VnaCBrb25nIGJlY2F1c2UgaW5nZXN0aW5nIGxvZ3MgYmVmb3JlIGxvZ2ZsYXJlIGlzIGZ1bGx5IGluaXRpYWxpc2VkIHdpbGxcbiAgICAjIGxlYWQgdG8gYnJva2VuIHF1ZXJpZXMgZnJvbSBzdHVkaW8uIFRoaXMgd29ya3MgYnkgdGhlIGFzc3VtcHRpb24gdGhhdCBjb250YWluZXJzIGFyZSBzdGFydGVkIGluIHRoZVxuICAgICMgZm9sbG93aW5nIG9yZGVyOiB2ZWN0b3IgPiBkYiA+IGxvZ2ZsYXJlID4ga29uZ1xuICAgIHVyaTogJ2h0dHA6Ly9rb25nOjgwMDAvYW5hbHl0aWNzL3YxL2FwaS9sb2dzP3NvdXJjZV9uYW1lPXBvc3RncmVzLmxvZ3MmYXBpX2tleT0ke0xPR0ZMQVJFX0FQSV9LRVk/TE9HRkxBUkVfQVBJX0tFWSBpcyByZXF1aXJlZH0nXG4gIGxvZ2ZsYXJlX2Z1bmN0aW9uczpcbiAgICB0eXBlOiAnaHR0cCdcbiAgICBpbnB1dHM6XG4gICAgICAtIHJvdXRlci5mdW5jdGlvbnNcbiAgICBlbmNvZGluZzpcbiAgICAgIGNvZGVjOiAnanNvbidcbiAgICBtZXRob2Q6ICdwb3N0J1xuICAgIHJlcXVlc3Q6XG4gICAgICByZXRyeV9tYXhfZHVyYXRpb25fc2VjczogMTBcbiAgICB1cmk6ICdodHRwOi8vYW5hbHl0aWNzOjQwMDAvYXBpL2xvZ3M/c291cmNlX25hbWU9ZGVuby1yZWxheS1sb2dzJmFwaV9rZXk9JHtMT0dGTEFSRV9BUElfS0VZP0xPR0ZMQVJFX0FQSV9LRVkgaXMgcmVxdWlyZWR9J1xuICBsb2dmbGFyZV9zdG9yYWdlOlxuICAgIHR5cGU6ICdodHRwJ1xuICAgIGlucHV0czpcbiAgICAgIC0gc3RvcmFnZV9sb2dzXG4gICAgZW5jb2Rpbmc6XG4gICAgICBjb2RlYzogJ2pzb24nXG4gICAgbWV0aG9kOiAncG9zdCdcbiAgICByZXF1ZXN0OlxuICAgICAgcmV0cnlfbWF4X2R1cmF0aW9uX3NlY3M6IDEwXG4gICAgdXJpOiAnaHR0cDovL2FuYWx5dGljczo0MDAwL2FwaS9sb2dzP3NvdXJjZV9uYW1lPXN0b3JhZ2UubG9ncy5wcm9kLjImYXBpX2tleT0ke0xPR0ZMQVJFX0FQSV9LRVk/TE9HRkxBUkVfQVBJX0tFWSBpcyByZXF1aXJlZH0nXG4gIGxvZ2ZsYXJlX2tvbmc6XG4gICAgdHlwZTogJ2h0dHAnXG4gICAgaW5wdXRzOlxuICAgICAgLSBrb25nX2xvZ3NcbiAgICAgIC0ga29uZ19lcnJcbiAgICBlbmNvZGluZzpcbiAgICAgIGNvZGVjOiAnanNvbidcbiAgICBtZXRob2Q6ICdwb3N0J1xuICAgIHJlcXVlc3Q6XG4gICAgICByZXRyeV9tYXhfZHVyYXRpb25fc2VjczogMTBcbiAgICB1cmk6ICdodHRwOi8vYW5hbHl0aWNzOjQwMDAvYXBpL2xvZ3M/c291cmNlX25hbWU9Y2xvdWRmbGFyZS5sb2dzLnByb2QmYXBpX2tleT0ke0xPR0ZMQVJFX0FQSV9LRVk/TE9HRkxBUkVfQVBJX0tFWSBpcyByZXF1aXJlZH0nXG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9wb29sZXIvcG9vbGVyLmV4c1wiXG5jb250ZW50ID0gXCJcIlwiezpvaywgX30gPSBBcHBsaWNhdGlvbi5lbnN1cmVfYWxsX3N0YXJ0ZWQoOnN1cGF2aXNvcilcblxuezpvaywgdmVyc2lvbn0gPVxuICBjYXNlIFN1cGF2aXNvci5SZXBvLnF1ZXJ5IShcInNlbGVjdCB2ZXJzaW9uKClcIikgZG9cbiAgICAle3Jvd3M6IFtbdmVyXV19IC0+IFN1cGF2aXNvci5IZWxwZXJzLnBhcnNlX3BnX3ZlcnNpb24odmVyKVxuICAgIF8gLT4gbmlsXG4gIGVuZFxuXG5wYXJhbXMgPSAle1xuICBcImV4dGVybmFsX2lkXCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT09MRVJfVEVOQU5UX0lEXCIpLFxuICBcImRiX2hvc3RcIiA9PiBcImRiXCIsXG4gIFwiZGJfcG9ydFwiID0+IFN5c3RlbS5nZXRfZW52KFwiUE9TVEdSRVNfUE9SVFwiKSxcbiAgXCJkYl9kYXRhYmFzZVwiID0+IFN5c3RlbS5nZXRfZW52KFwiUE9TVEdSRVNfREJcIiksXG4gIFwicmVxdWlyZV91c2VyXCIgPT4gZmFsc2UsXG4gIFwiYXV0aF9xdWVyeVwiID0+IFwiU0VMRUNUICogRlJPTSBwZ2JvdW5jZXIuZ2V0X2F1dGgoJDEpXCIsXG4gIFwiZGVmYXVsdF9tYXhfY2xpZW50c1wiID0+IFN5c3RlbS5nZXRfZW52KFwiUE9PTEVSX01BWF9DTElFTlRfQ09OTlwiKSxcbiAgXCJkZWZhdWx0X3Bvb2xfc2l6ZVwiID0+IFN5c3RlbS5nZXRfZW52KFwiUE9PTEVSX0RFRkFVTFRfUE9PTF9TSVpFXCIpLFxuICBcImRlZmF1bHRfcGFyYW1ldGVyX3N0YXR1c1wiID0+ICV7XCJzZXJ2ZXJfdmVyc2lvblwiID0+IHZlcnNpb259LFxuICBcInVzZXJzXCIgPT4gWyV7XG4gICAgXCJkYl91c2VyXCIgPT4gXCJwZ2JvdW5jZXJcIixcbiAgICBcImRiX3Bhc3N3b3JkXCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT1NUR1JFU19QQVNTV09SRFwiKSxcbiAgICBcIm1vZGVfdHlwZVwiID0+IFN5c3RlbS5nZXRfZW52KFwiUE9PTEVSX1BPT0xfTU9ERVwiKSxcbiAgICBcInBvb2xfc2l6ZVwiID0+IFN5c3RlbS5nZXRfZW52KFwiUE9PTEVSX0RFRkFVTFRfUE9PTF9TSVpFXCIpLFxuICAgIFwiaXNfbWFuYWdlclwiID0+IHRydWVcbiAgfV1cbn1cblxuaWYgIVN1cGF2aXNvci5UZW5hbnRzLmdldF90ZW5hbnRfYnlfZXh0ZXJuYWxfaWQocGFyYW1zW1wiZXh0ZXJuYWxfaWRcIl0pIGRvXG4gIHs6b2ssIF99ID0gU3VwYXZpc29yLlRlbmFudHMuY3JlYXRlX3RlbmFudChwYXJhbXMpXG5lbmRcblwiXCJcIiIKfQ==

Configuration

The exact Docker Compose and template configuration this template deploys.

Related Templates

SupaBase logo

SupaBase

Version: 2026.06.03 / dokploy >= 0.22.5

The open source Firebase alternative. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. This require at least version 0.22.5 of dokploy.

databasefirebasepostgres
Appwrite logo

Appwrite

Version: 1.9.5

Appwrite is an end-to-end platform for building Web, Mobile, Native, or Backend apps, packaged as a set of Docker microservices. It includes both a backend server and a fully integrated hosting solution for deploying static and server-side rendered frontends. Appwrite abstracts the complexity and repetitiveness required to build modern apps from scratch and allows you to build secure, full-stack applications faster. Using Appwrite, you can easily integrate your app with user authentication and multiple sign-in methods, a database for storing and querying users and team data, storage and file management, image manipulation, Cloud Functions, messaging, and more services.

databasefirebasemariadb
Autobase logo

Autobase

Version: 2.7.2

Autobase for PostgreSQL® is an open-source alternative to cloud-managed databases (self-hosted DBaaS).

databasepostgresautomation
pgAdmin logo

pgAdmin

Version: 8.3

pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.

databasepostgresadmin
AdventureLog logo

AdventureLog

Version: latest

AdventureLog is an open-source activity tracker with maps, journaling, and Strava integration.

activitymapsdjango
ArangoDB logo

ArangoDB

Version: latest

ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.

databasegraph-databasenosql

Self-host SupaBase in minutes

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