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.
How to deploy
Alternatively, create a Compose service, go to Advanced → Import from Base64, and paste this payload:
ewogICJjb21wb3NlIjogIngtbG9nZ2luZzogJngtbG9nZ2luZ1xuICBsb2dnaW5nOlxuICAgIGRyaXZlcjogXCJqc29uLWZpbGVcIlxuICAgIG9wdGlvbnM6XG4gICAgICBtYXgtZmlsZTogXCI1XCJcbiAgICAgIG1heC1zaXplOiBcIjEwbVwiXG5zZXJ2aWNlczpcbiAgYXBwd3JpdGU6XG4gICAgaW1hZ2U6IGFwcHdyaXRlL2FwcHdyaXRlOjIuNS4wXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGxhYmVsczpcbiAgICAgIC0gdHJhZWZpay5lbmFibGU9dHJ1ZVxuICAgICAgLSAndHJhZWZpay5odHRwLnJvdXRlcnMuYXBwd3JpdGUtc2l0ZXMtd2lsZGNhcmQucnVsZT1Ib3N0UmVnZXhwKGBeLitcXC4ke19BUFBfRE9NQUlOX1NJVEVTfSQkYCknXG4gICAgICAtIHRyYWVmaWsuaHR0cC5yb3V0ZXJzLmFwcHdyaXRlLXNpdGVzLXdpbGRjYXJkLmVudHJ5cG9pbnRzPXdlYlxuICAgICAgLSB0cmFlZmlrLmh0dHAucm91dGVycy5hcHB3cml0ZS1zaXRlcy13aWxkY2FyZC5zZXJ2aWNlPWFwcHdyaXRlLXdpbGRjYXJkXG4gICAgICAtICd0cmFlZmlrLmh0dHAucm91dGVycy5hcHB3cml0ZS1zaXRlcy13aWxkY2FyZC1zZWN1cmUucnVsZT1Ib3N0UmVnZXhwKGBeLitcXC4ke19BUFBfRE9NQUlOX1NJVEVTfSQkYCknXG4gICAgICAtIHRyYWVmaWsuaHR0cC5yb3V0ZXJzLmFwcHdyaXRlLXNpdGVzLXdpbGRjYXJkLXNlY3VyZS5lbnRyeXBvaW50cz13ZWJzZWN1cmVcbiAgICAgIC0gdHJhZWZpay5odHRwLnJvdXRlcnMuYXBwd3JpdGUtc2l0ZXMtd2lsZGNhcmQtc2VjdXJlLnRscz10cnVlXG4gICAgICAtIHRyYWVmaWsuaHR0cC5yb3V0ZXJzLmFwcHdyaXRlLXNpdGVzLXdpbGRjYXJkLXNlY3VyZS5zZXJ2aWNlPWFwcHdyaXRlLXdpbGRjYXJkXG4gICAgICAtICd0cmFlZmlrLmh0dHAucm91dGVycy5hcHB3cml0ZS1mdW5jdGlvbnMtd2lsZGNhcmQucnVsZT1Ib3N0UmVnZXhwKGBeLitcXC4ke19BUFBfRE9NQUlOX0ZVTkNUSU9OU30kJGApJ1xuICAgICAgLSB0cmFlZmlrLmh0dHAucm91dGVycy5hcHB3cml0ZS1mdW5jdGlvbnMtd2lsZGNhcmQuZW50cnlwb2ludHM9d2ViXG4gICAgICAtIHRyYWVmaWsuaHR0cC5yb3V0ZXJzLmFwcHdyaXRlLWZ1bmN0aW9ucy13aWxkY2FyZC5zZXJ2aWNlPWFwcHdyaXRlLXdpbGRjYXJkXG4gICAgICAtICd0cmFlZmlrLmh0dHAucm91dGVycy5hcHB3cml0ZS1mdW5jdGlvbnMtd2lsZGNhcmQtc2VjdXJlLnJ1bGU9SG9zdFJlZ2V4cChgXi4rXFwuJHtfQVBQX0RPTUFJTl9GVU5DVElPTlN9JCRgKSdcbiAgICAgIC0gdHJhZWZpay5odHRwLnJvdXRlcnMuYXBwd3JpdGUtZnVuY3Rpb25zLXdpbGRjYXJkLXNlY3VyZS5lbnRyeXBvaW50cz13ZWJzZWN1cmVcbiAgICAgIC0gdHJhZWZpay5odHRwLnJvdXRlcnMuYXBwd3JpdGUtZnVuY3Rpb25zLXdpbGRjYXJkLXNlY3VyZS50bHM9dHJ1ZVxuICAgICAgLSB0cmFlZmlrLmh0dHAucm91dGVycy5hcHB3cml0ZS1mdW5jdGlvbnMtd2lsZGNhcmQtc2VjdXJlLnNlcnZpY2U9YXBwd3JpdGUtd2lsZGNhcmRcbiAgICAgIC0gdHJhZWZpay5odHRwLnNlcnZpY2VzLmFwcHdyaXRlLXdpbGRjYXJkLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD04MFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgLSBDTUQtU0hFTExcbiAgICAgICAgLSAnY3VybCAtZnNTIC1vIC9kZXYvbnVsbCAtSCBcIkhvc3Q6ICQke19BUFBfRE9NQUlOOi1sb2NhbGhvc3R9XCIgaHR0cDovL2xvY2FsaG9zdC92MS9oZWFsdGgvdmVyc2lvbidcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDEyXG4gICAgICBzdGFydF9wZXJpb2Q6IDEyMHNcbiAgICB2b2x1bWVzOlxuICAgICAgLSBhcHB3cml0ZS11cGxvYWRzOi9zdG9yYWdlL3VwbG9hZHM6cndcbiAgICAgIC0gYXBwd3JpdGUtaW1wb3J0czovc3RvcmFnZS9pbXBvcnRzOnJ3XG4gICAgICAtIGFwcHdyaXRlLWNhY2hlOi9zdG9yYWdlL2NhY2hlOnJ3XG4gICAgICAtIGFwcHdyaXRlLWNvbmZpZzovc3RvcmFnZS9jb25maWc6cndcbiAgICAgIC0gYXBwd3JpdGUtY2VydGlmaWNhdGVzOi9zdG9yYWdlL2NlcnRpZmljYXRlczpyd1xuICAgICAgLSBhcHB3cml0ZS1mdW5jdGlvbnM6L3N0b3JhZ2UvZnVuY3Rpb25zOnJ3XG4gICAgICAtIGFwcHdyaXRlLXNpdGVzOi9zdG9yYWdlL3NpdGVzOnJ3XG4gICAgICAtIGFwcHdyaXRlLWJ1aWxkczovc3RvcmFnZS9idWlsZHM6cndcbiAgICBkZXBlbmRzX29uOlxuICAgICAgcmVkaXM6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBwb3N0Z3Jlc3FsOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgYXBwd3JpdGUtZ2VvOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2Vfc3RhcnRlZFxuICAgICAgYXBwd3JpdGUtYXV0b2dyYXZpdHk6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIF9BUFBfRU5WXG4gICAgICAtIF9BUFBfRURJVElPTlxuICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRVxuICAgICAgLSBfQVBQX0xPQ0FMRVxuICAgICAgLSBfQVBQX0NPTVBSRVNTSU9OX0VOQUJMRURcbiAgICAgIC0gX0FQUF9DT01QUkVTU0lPTl9NSU5fU0laRV9CWVRFU1xuICAgICAgLSBfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX1JPT1RcbiAgICAgIC0gX0FQUF9DT05TT0xFX1dISVRFTElTVF9FTUFJTFNcbiAgICAgIC0gX0FQUF9DT05TT0xFX1NFU1NJT05fQUxFUlRTXG4gICAgICAtIF9BUFBfQ09OU09MRV9XSElURUxJU1RfSVBTXG4gICAgICAtIF9BUFBfQ09OU09MRV9IT1NUTkFNRVNcbiAgICAgIC0gX0FQUF9DT05TT0xFX1NDSEVNQVxuICAgICAgLSBfQVBQX0NPTlNPTEVfR0lUSFVCX0FQUF9JRFxuICAgICAgLSBfQVBQX0NPTlNPTEVfR0lUSFVCX1NFQ1JFVFxuICAgICAgLSBfQVBQX0NPTlNPTEVfR0lUTEFCX0FQUF9JRFxuICAgICAgLSBfQVBQX0NPTlNPTEVfR0lUTEFCX1NFQ1JFVFxuICAgICAgLSBfQVBQX0NPTlNPTEVfR0lUTEFCX0VORFBPSU5UXG4gICAgICAtIF9BUFBfQ09OU09MRV9CSVRCVUNLRVRfQVBQX0lEXG4gICAgICAtIF9BUFBfQ09OU09MRV9CSVRCVUNLRVRfU0VDUkVUXG4gICAgICAtIF9BUFBfQ09OU09MRV9HT09HTEVfQVBQX0lEXG4gICAgICAtIF9BUFBfQ09OU09MRV9HT09HTEVfU0VDUkVUXG4gICAgICAtIF9BUFBfU1lTVEVNX0VNQUlMX05BTUVcbiAgICAgIC0gX0FQUF9TWVNURU1fRU1BSUxfQUREUkVTU1xuICAgICAgLSBfQVBQX1NZU1RFTV9URUFNX0VNQUlMXG4gICAgICAtIF9BUFBfRU1BSUxfU0VDVVJJVFlcbiAgICAgIC0gX0FQUF9TWVNURU1fUkVTUE9OU0VfRk9STUFUXG4gICAgICAtIF9BUFBfT1BUSU9OU19BQlVTRVxuICAgICAgLSBfQVBQX09QVElPTlNfQUJVU0VfSU5DUkVBU0VEX0xJTUlUX1BST0pFQ1RTXG4gICAgICAtIF9BUFBfT1BUSU9OU19ST1VURVJfUFJPVEVDVElPTlxuICAgICAgLSBfQVBQX09QVElPTlNfRk9SQ0VfSFRUUFNcbiAgICAgIC0gX0FQUF9PUFRJT05TX1JPVVRFUl9GT1JDRV9IVFRQU1xuICAgICAgLSBfQVBQX1JPVVRFUl9BVVRPX0NFUlRJRklDQVRFU1xuICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxXG4gICAgICAtIF9BUFBfTk9USUZJQ0FUSU9OU19UUkFDS0lOR19TRUNSRVRcbiAgICAgIC0gX0FQUF9ET01BSU5cbiAgICAgIC0gX0FQUF9DT05TT0xFX0RPTUFJTlxuICAgICAgLSBfQVBQX0NPTlNPTEVfVVJMXG4gICAgICAtIF9BUFBfQ09OU09MRV9UUlVTVEVEX1BST0pFQ1RTXG4gICAgICAtIF9BUFBfRE9NQUlOX1RBUkdFVF9DTkFNRVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQUFBQVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQ0FBXG4gICAgICAtIF9BUFBfRE5TXG4gICAgICAtIF9BUFBfRE9NQUlOX0ZVTkNUSU9OU1xuICAgICAgLSBfQVBQX0RPTUFJTl9TSVRFU1xuICAgICAgLSBfQVBQX0NVU1RPTV9ET01BSU5fREVOWV9MSVNUXG4gICAgICAtIF9BUFBfVFJVU1RFRF9IRUFERVJTXG4gICAgICAtIF9BUFBfUkVESVNfSE9TVFxuICAgICAgLSBfQVBQX1JFRElTX1BPUlRcbiAgICAgIC0gX0FQUF9SRURJU19VU0VSXG4gICAgICAtIF9BUFBfUkVESVNfUEFTU1xuICAgICAgLSBfQVBQX0RCX0FEQVBURVJcbiAgICAgIC0gX0FQUF9EQl9IT1NUXG4gICAgICAtIF9BUFBfREJfUE9SVFxuICAgICAgLSBfQVBQX0RCX1NDSEVNQVxuICAgICAgLSBfQVBQX0RCX1VTRVJcbiAgICAgIC0gX0FQUF9EQl9QQVNTXG4gICAgICAtIF9BUFBfREJfUk9PVF9QQVNTXG4gICAgICAtIF9BUFBfREJfVVNFUl9QQVNTXG4gICAgICAtIF9BUFBfREFUQUJBU0VfU0hBUkVEX1RBQkxFU1xuICAgICAgLSBfQVBQX0RBVEFCQVNFX1NIQVJFRF9OQU1FU1BBQ0VcbiAgICAgIC0gX0FQUF9MSU1JVF9EQVRBQkFTRV9CQVRDSFxuICAgICAgLSBfQVBQX0xPQ0tJTkdfRU5BQkxFRFxuICAgICAgLSBfQVBQX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfREJfQURBUFRFUl9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX0RCX0hPU1RfRE9DVU1FTlRTREJcbiAgICAgIC0gX0FQUF9EQl9QT1JUX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfREJfU0NIRU1BX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfREJfVVNFUl9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX0RCX1BBU1NfRE9DVU1FTlRTREJcbiAgICAgIC0gX0FQUF9DT05ORUNUSU9OU19EQVRBQkFTRV9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX0FEQVBURVJfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfREJfSE9TVF9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9QT1JUX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX1NDSEVNQV9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9VU0VSX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX1BBU1NfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfQ09OTkVDVElPTlNfREFUQUJBU0VfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfRU1CRURESU5HXG4gICAgICAtIF9BUFBfVVNBR0VfU1RBVFNcbiAgICAgIC0gX0FQUF9VU0FHRV9QQVNTXG4gICAgICAtIF9BUFBfQ09OTkVDVElPTlNfREJfVVNBR0VcbiAgICAgIC0gX0FQUF9QT09MX1NJWkVfVVNBR0VcbiAgICAgIC0gX0FQUF9DT05ORUNUSU9OU19EQl9FWEVDVVRJT05TXG4gICAgICAtIF9BUFBfUE9PTF9TSVpFX0VYRUNVVElPTlNcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fVVNBR0VfVFRMXG4gICAgICAtIF9BUFBfU1RBVFNfVVNBR0VfUVVFVUVfTkFNRVxuICAgICAgLSBfQVBQX1NUQVRTX1JFU09VUkNFU19RVUVVRV9OQU1FXG4gICAgICAtIF9BUFBfU1RBVFNfUkVTT1VSQ0VTX0lOVEVSVkFMXG4gICAgICAtIF9BUFBfU01UUF9IT1NUXG4gICAgICAtIF9BUFBfU01UUF9QT1JUXG4gICAgICAtIF9BUFBfU01UUF9TRUNVUkVcbiAgICAgIC0gX0FQUF9TTVRQX1VTRVJOQU1FXG4gICAgICAtIF9BUFBfU01UUF9QQVNTV09SRFxuICAgICAgLSBfQVBQX1NNU19QUk9WSURFUlxuICAgICAgLSBfQVBQX1NNU19GUk9NXG4gICAgICAtIF9BUFBfU1RPUkFHRV9MSU1JVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfUFJFVklFV19MSU1JVFxuICAgICAgLSBfQVBQX0FVVE9HUkFWSVRZX0hPU1RcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0FOVElWSVJVU1xuICAgICAgLSBfQVBQX1NUT1JBR0VfQU5USVZJUlVTX0hPU1RcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0FOVElWSVJVU19QT1JUXG4gICAgICAtIF9BUFBfU1RPUkFHRV9ERVZJQ0VcbiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX0FDQ0VTU19LRVlcbiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfUkVHSU9OXG4gICAgICAtIF9BUFBfU1RPUkFHRV9TM19CVUNLRVRcbiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX0VORFBPSU5UXG4gICAgICAtIF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfQUNDRVNTX0tFWVxuICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1JFR0lPTlxuICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0JVQ0tFVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVlcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9TRUNSRVRcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9SRUdJT05cbiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVRcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9BQ0NFU1NfS0VZXG4gICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfU0VDUkVUXG4gICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfUkVHSU9OXG4gICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfQlVDS0VUXG4gICAgICAtIF9BUFBfU1RPUkFHRV9XQVNBQklfQUNDRVNTX0tFWVxuICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1JFR0lPTlxuICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX0JVQ0tFVFxuICAgICAgLSBfQVBQX0NPTVBVVEVfU0laRV9MSU1JVFxuICAgICAgLSBfQVBQX0NPTVBVVEVfQlVJTERfU0laRV9MSU1JVFxuICAgICAgLSBfQVBQX0NPTVBVVEVfQlVJTERfVElNRU9VVFxuICAgICAgLSBfQVBQX0NPTVBVVEVfQ1BVU1xuICAgICAgLSBfQVBQX0NPTVBVVEVfTUVNT1JZXG4gICAgICAtIF9BUFBfRlVOQ1RJT05TX1RJTUVPVVRcbiAgICAgIC0gX0FQUF9GVU5DVElPTlNfUlVOVElNRVNcbiAgICAgIC0gX0FQUF9GVU5DVElPTlNfQ1JFQVRJT05fQUJVU0VfTElNSVRcbiAgICAgIC0gX0FQUF9TSVRFU19USU1FT1VUXG4gICAgICAtIF9BUFBfU0lURVNfUlVOVElNRVNcbiAgICAgIC0gX0FQUF9FWEVDVVRPUl9TRUNSRVRcbiAgICAgIC0gX0FQUF9FWEVDVVRPUl9IT1NUXG4gICAgICAtIF9BUFBfQlVJTERTX1ZPTFVNRT0ke0NPTVBPU0VfUFJPSkVDVF9OQU1FOi1hcHB3cml0ZX1fYXBwd3JpdGUtYnVpbGRzXG4gICAgICAtIF9BUFBfSk9CU19IT1NUXG4gICAgICAtIF9BUFBfSk9CU19TRUNSRVRcbiAgICAgIC0gX0FQUF9KT0JTX0VORFBPSU5UXG4gICAgICAtIF9BUFBfR0VPX1NFQ1JFVFxuICAgICAgLSBfQVBQX0dFT19FTkRQT0lOVFxuICAgICAgLSBfQVBQX0xPR0dJTkdfQ09ORklHXG4gICAgICAtIF9BUFBfTE9HR0lOR19GT1JNQVRcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9JTlRFUlZBTFxuICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9FWEVDVVRJT05cbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQ0FDSEVcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQUJVU0VcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVRcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVRfQ09OU09MRVxuICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9TQ0hFRFVMRVNcbiAgICAgIC0gX0FQUF9HUkFQSFFMX0lOVFJPU1BFQ1RJT05cbiAgICAgIC0gX0FQUF9HUkFQSFFMX01BWF9CQVRDSF9TSVpFXG4gICAgICAtIF9BUFBfR1JBUEhRTF9NQVhfQ09NUExFWElUWVxuICAgICAgLSBfQVBQX0dSQVBIUUxfTUFYX0RFUFRIXG4gICAgICAtIF9BUFBfVkNTX0dJVEhVQl9BUFBfTkFNRVxuICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfUFJJVkFURV9LRVlcbiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0FQUF9JRFxuICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfV0VCSE9PS19TRUNSRVRcbiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9TRUNSRVRcbiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9JRFxuICAgICAgLSBfQVBQX1ZDU19HSVRFQV9FTkRQT0lOVFxuICAgICAgLSBfQVBQX1ZDU19HSVRFQV9CUk9XU0VSX0VORFBPSU5UXG4gICAgICAtIF9BUFBfVkNTX0dJVEVBX0NMSUVOVF9JRFxuICAgICAgLSBfQVBQX1ZDU19HSVRFQV9DTElFTlRfU0VDUkVUXG4gICAgICAtIF9BUFBfVkNTX0dJVEVBX1dFQkhPT0tfU0VDUkVUXG4gICAgICAtIF9BUFBfVkNTX0dJVExBQl9FTkRQT0lOVFxuICAgICAgLSBfQVBQX1ZDU19HSVRMQUJfQ0xJRU5UX0lEXG4gICAgICAtIF9BUFBfVkNTX0dJVExBQl9DTElFTlRfU0VDUkVUXG4gICAgICAtIF9BUFBfVkNTX0dJVExBQl9XRUJIT09LX1NFQ1JFVFxuICAgICAgLSBfQVBQX1ZDU19CSVRCVUNLRVRfQ0xJRU5UX0lEXG4gICAgICAtIF9BUFBfVkNTX0JJVEJVQ0tFVF9DTElFTlRfU0VDUkVUXG4gICAgICAtIF9BUFBfVkNTX0JJVEJVQ0tFVF9XRUJIT09LX1NFQ1JFVFxuICAgICAgLSBfQVBQX1ZDU19PUklHSU5fQ0xJRU5UX0lEXG4gICAgICAtIF9BUFBfVkNTX09SSUdJTl9QUklWQVRFX0tFWVxuICAgICAgLSBfQVBQX1ZDU19XRUJIT09LX1VSTFxuICAgICAgLSBfQVBQX01JR1JBVElPTl9IT1NUXG4gICAgICAtIF9BUFBfTUlHUkFUSU9OU19GSVJFQkFTRV9DTElFTlRfSURcbiAgICAgIC0gX0FQUF9NSUdSQVRJT05TX0ZJUkVCQVNFX0NMSUVOVF9TRUNSRVRcbiAgICAgIC0gX0FQUF9DT05TT0xFX0NPVU5UUklFU19ERU5ZTElTVFxuICAgICAgLSBfQVBQX1BXTkVEX1BBU1NXT1JEU19EU05cblxuICBhcHB3cml0ZS1jb25zb2xlOlxuICAgIGltYWdlOiBhcHB3cml0ZS9uZXc6MS4yLjc0LXNlbGYtaG9zdGVkXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBWSVRFX0NPTlNPTEVfUFJPRklMRT1zZWxmLWhvc3RlZFxuICAgICAgLSBBUFBXUklURV9FTkRQT0lOVF9TQU1FX09SSUdJTj10cnVlXG4gICAgICAtIFZJVEVfR1JPV1RIX0VORFBPSU5UPWh0dHBzOi8vZ3Jvd3RoLmFwcHdyaXRlLmlvL3YxXG5cbiAgYXBwd3JpdGUtcmVhbHRpbWU6XG4gICAgaW1hZ2U6IGFwcHdyaXRlL2FwcHdyaXRlOjIuNS4wXG4gICAgZW50cnlwb2ludDogcmVhbHRpbWVcbiAgICA8PDogKngtbG9nZ2luZ1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHJlZGlzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcG9zdGdyZXNxbDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gX0FQUF9FTlZcbiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkVcbiAgICAgIC0gX0FQUF9PUFRJT05TX0FCVVNFXG4gICAgICAtIF9BUFBfT1BUSU9OU19ST1VURVJfUFJPVEVDVElPTlxuICAgICAgLSBfQVBQX0NPTlNPTEVfSE9TVE5BTUVTXG4gICAgICAtIF9BUFBfUkVBTFRJTUVfVEFJTF9SQVRFXG4gICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjFcbiAgICAgIC0gX0FQUF9SRURJU19IT1NUXG4gICAgICAtIF9BUFBfUkVESVNfUE9SVFxuICAgICAgLSBfQVBQX1JFRElTX1VTRVJcbiAgICAgIC0gX0FQUF9SRURJU19QQVNTXG4gICAgICAtIF9BUFBfREJfQURBUFRFUlxuICAgICAgLSBfQVBQX0RCX0hPU1RcbiAgICAgIC0gX0FQUF9EQl9QT1JUXG4gICAgICAtIF9BUFBfREJfU0NIRU1BXG4gICAgICAtIF9BUFBfREJfVVNFUlxuICAgICAgLSBfQVBQX0RCX1BBU1NcbiAgICAgIC0gX0FQUF9EQVRBQkFTRV9TSEFSRURfVEFCTEVTXG4gICAgICAtIF9BUFBfTElNSVRfREFUQUJBU0VfQkFUQ0hcbiAgICAgIC0gX0FQUF9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX0RCX0FEQVBURVJfRE9DVU1FTlRTREJcbiAgICAgIC0gX0FQUF9EQl9IT1NUX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfREJfUE9SVF9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX0RCX1NDSEVNQV9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX0RCX1VTRVJfRE9DVU1FTlRTREJcbiAgICAgIC0gX0FQUF9EQl9QQVNTX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfQ09OTkVDVElPTlNfREFUQUJBU0VfRE9DVU1FTlRTREJcbiAgICAgIC0gX0FQUF9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9BREFQVEVSX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX0hPU1RfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfREJfUE9SVF9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9TQ0hFTUFfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfREJfVVNFUl9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9QQVNTX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0NPTk5FQ1RJT05TX0RBVEFCQVNFX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0VNQkVERElOR1xuICAgICAgLSBfQVBQX1VTQUdFX1NUQVRTXG4gICAgICAtIF9BUFBfU1RBVFNfVVNBR0VfUVVFVUVfTkFNRVxuICAgICAgLSBfQVBQX0xPR0dJTkdfQ09ORklHXG4gICAgICAtIF9BUFBfTE9HR0lOR19GT1JNQVRcblxuICBhcHB3cml0ZS1tcXR0OlxuICAgIGltYWdlOiBhcHB3cml0ZS9hcHB3cml0ZToyLjUuMFxuICAgIGVudHJ5cG9pbnQ6IG1xdHRcbiAgICA8PDogKngtbG9nZ2luZ1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHJlZGlzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcG9zdGdyZXNxbDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIC0gQ01EXG4gICAgICAgIC0gcGhwXG4gICAgICAgIC0gLXJcbiAgICAgICAgLSAnZXhpdChAZnNvY2tvcGVuKCcnMTI3LjAuMC4xJycsIDE4ODMpID8gMCA6IDEpOydcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDIwXG4gICAgICBzdGFydF9wZXJpb2Q6IDIwc1xuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBfQVBQX0VOVlxuICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRVxuICAgICAgLSBfQVBQX09QVElPTlNfQUJVU0VcbiAgICAgIC0gX0FQUF9PUFRJT05TX1JPVVRFUl9QUk9URUNUSU9OXG4gICAgICAtIF9BUFBfUkVBTFRJTUVfVEFJTF9SQVRFXG4gICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjFcbiAgICAgIC0gX0FQUF9SRURJU19IT1NUXG4gICAgICAtIF9BUFBfUkVESVNfUE9SVFxuICAgICAgLSBfQVBQX1JFRElTX1VTRVJcbiAgICAgIC0gX0FQUF9SRURJU19QQVNTXG4gICAgICAtIF9BUFBfREJfQURBUFRFUlxuICAgICAgLSBfQVBQX0RCX0hPU1RcbiAgICAgIC0gX0FQUF9EQl9QT1JUXG4gICAgICAtIF9BUFBfREJfU0NIRU1BXG4gICAgICAtIF9BUFBfREJfVVNFUlxuICAgICAgLSBfQVBQX0RCX1BBU1NcbiAgICAgIC0gX0FQUF9EQl9BREFQVEVSX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX0hPU1RfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfREJfUE9SVF9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9TQ0hFTUFfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfREJfVVNFUl9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9QQVNTX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0xPR0dJTkdfQ09ORklHXG4gICAgICAtIF9BUFBfTE9HR0lOR19GT1JNQVRcbiAgICAgIC0gX0FQUF9EQVRBQkFTRV9TSEFSRURfVEFCTEVTXG4gICAgICAtIF9BUFBfTVFUVF9SRVBMQVlfREVQVEhcbiAgICAgIC0gX0FQUF9NUVRUX1dTX1BPUlRcbiAgICAgIC0gX0FQUF9NUVRUX01BWF9QQUNLRVRfU0laRVxuXG4gIGFwcHdyaXRlLXdvcmtlcjpcbiAgICBpbWFnZTogYXBwd3JpdGUvYXBwd3JpdGU6Mi41LjBcbiAgICBlbnRyeXBvaW50OiB3b3JrZXJcbiAgICA8PDogKngtbG9nZ2luZ1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHJlZGlzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcG9zdGdyZXNxbDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICB2b2x1bWVzOlxuICAgICAgLSBhcHB3cml0ZS11cGxvYWRzOi9zdG9yYWdlL3VwbG9hZHM6cndcbiAgICAgIC0gYXBwd3JpdGUtY2FjaGU6L3N0b3JhZ2UvY2FjaGU6cndcbiAgICAgIC0gYXBwd3JpdGUtZnVuY3Rpb25zOi9zdG9yYWdlL2Z1bmN0aW9uczpyd1xuICAgICAgLSBhcHB3cml0ZS1zaXRlczovc3RvcmFnZS9zaXRlczpyd1xuICAgICAgLSBhcHB3cml0ZS1idWlsZHM6L3N0b3JhZ2UvYnVpbGRzOnJ3XG4gICAgICAtIGFwcHdyaXRlLWNlcnRpZmljYXRlczovc3RvcmFnZS9jZXJ0aWZpY2F0ZXM6cndcbiAgICAgIC0gYXBwd3JpdGUtY29uZmlnOi9zdG9yYWdlL2NvbmZpZzpyd1xuICAgICAgLSBhcHB3cml0ZS1pbXBvcnRzOi9zdG9yYWdlL2ltcG9ydHM6cndcbiAgICBleHRyYV9ob3N0czpcbiAgICAgIC0gaG9zdC5kb2NrZXIuaW50ZXJuYWw6aG9zdC1nYXRld2F5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIF9BUFBfRU5WXG4gICAgICAtIF9BUFBfV09SS0VSU19OVU09MVxuICAgICAgIyBQb29sIHNpemluZyBvbmx5IChzdW0gb2YgcGVyLXF1ZXVlIGNhcHMpLiBFYWNoIHF1ZXVlIGtlZXBzIGl0cyBvd24gbWF4Q29yb3V0aW5lcyBpbiBQSFA7IGRhdGFiYXNlcyBzdGF5cyBhdCAxLlxuICAgICAgLSBfQVBQX1dPUktFUl9NQVhfQ09ST1VUSU5FUz03OFxuICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRVxuICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxXG4gICAgICAtIF9BUFBfTk9USUZJQ0FUSU9OU19UUkFDS0lOR19TRUNSRVRcbiAgICAgIC0gX0FQUF9FTUFJTF9TRUNVUklUWVxuICAgICAgLSBfQVBQX0VNQUlMX0NFUlRJRklDQVRFU1xuICAgICAgLSBfQVBQX1JFRElTX0hPU1RcbiAgICAgIC0gX0FQUF9SRURJU19QT1JUXG4gICAgICAtIF9BUFBfUkVESVNfVVNFUlxuICAgICAgLSBfQVBQX1JFRElTX1BBU1NcbiAgICAgIC0gX0FQUF9EQl9BREFQVEVSXG4gICAgICAtIF9BUFBfREJfSE9TVFxuICAgICAgLSBfQVBQX0RCX1BPUlRcbiAgICAgIC0gX0FQUF9EQl9TQ0hFTUFcbiAgICAgIC0gX0FQUF9EQl9VU0VSXG4gICAgICAtIF9BUFBfREJfUEFTU1xuICAgICAgLSBfQVBQX0RBVEFCQVNFX1NIQVJFRF9UQUJMRVNcbiAgICAgIC0gX0FQUF9MSU1JVF9EQVRBQkFTRV9CQVRDSFxuICAgICAgLSBfQVBQX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfREJfQURBUFRFUl9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX0RCX0hPU1RfRE9DVU1FTlRTREJcbiAgICAgIC0gX0FQUF9EQl9QT1JUX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfREJfU0NIRU1BX0RPQ1VNRU5UU0RCXG4gICAgICAtIF9BUFBfREJfVVNFUl9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX0RCX1BBU1NfRE9DVU1FTlRTREJcbiAgICAgIC0gX0FQUF9DT05ORUNUSU9OU19EQVRBQkFTRV9ET0NVTUVOVFNEQlxuICAgICAgLSBfQVBQX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX0FEQVBURVJfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfREJfSE9TVF9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9QT1JUX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX1NDSEVNQV9WRUNUT1JTREJcbiAgICAgIC0gX0FQUF9EQl9VU0VSX1ZFQ1RPUlNEQlxuICAgICAgLSBfQVBQX0RCX1BBU1NfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfQ09OTkVDVElPTlNfREFUQUJBU0VfVkVDVE9SU0RCXG4gICAgICAtIF9BUFBfRU1CRURESU5HXG4gICAgICAtIF9BUFBfVVNBR0VfU1RBVFNcbiAgICAgIC0gX0FQUF9VU0FHRV9QQVNTXG4gICAgICAtIF9BUFBfQ09OTkVDVElPTlNfREJfVVNBR0VcbiAgICAgIC0gX0FQUF9QT09MX1NJWkVfVVNBR0VcbiAgICAgIC0gX0FQUF9DT05ORUNUSU9OU19EQl9FWEVDVVRJT05TXG4gICAgICAtIF9BUFBfUE9PTF9TSVpFX0VYRUNVVElPTlNcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fVVNBR0VfVFRMXG4gICAgICAtIF9BUFBfU1RBVFNfVVNBR0VfUVVFVUVfTkFNRVxuICAgICAgLSBfQVBQX1NUQVRTX1JFU09VUkNFU19RVUVVRV9OQU1FXG4gICAgICAtIF9BUFBfU1RBVFNfUkVTT1VSQ0VTX0lOVEVSVkFMXG4gICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUdcbiAgICAgIC0gX0FQUF9MT0dHSU5HX0ZPUk1BVFxuICAgICAgLSBfQVBQX1FVRVVFX05BTUVcbiAgICAgIC0gX0FQUF9DT05TT0xFX1VSTFxuICAgICAgLSBfQVBQX0NPTlNPTEVfRE9NQUlOXG4gICAgICAtIF9BUFBfQ09OU09MRV9UUlVTVEVEX1BST0pFQ1RTXG4gICAgICAtIF9BUFBfRE9NQUlOXG4gICAgICAtIF9BUFBfRE9NQUlOX1RBUkdFVF9DTkFNRVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQUFBQVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQ0FBXG4gICAgICAtIF9BUFBfRE5TXG4gICAgICAtIF9BUFBfRE9NQUlOX0ZVTkNUSU9OU1xuICAgICAgLSBfQVBQX0RPTUFJTl9TSVRFU1xuICAgICAgLSBfQVBQX09QVElPTlNfRk9SQ0VfSFRUUFNcbiAgICAgIC0gX0FQUF9PUFRJT05TX1JPVVRFUl9GT1JDRV9IVFRQU1xuICAgICAgLSBfQVBQX1dFQkhPT0tfTUFYX0ZBSUxFRF9BVFRFTVBUU1xuICAgICAgLSBfQVBQX1NUT1JBR0VfREVWSUNFXG4gICAgICAtIF9BUFBfU1RPUkFHRV9TM19BQ0NFU1NfS0VZXG4gICAgICAtIF9BUFBfU1RPUkFHRV9TM19TRUNSRVRcbiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1JFR0lPTlxuICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfQlVDS0VUXG4gICAgICAtIF9BUFBfU1RPUkFHRV9TM19FTkRQT0lOVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVlcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19TRUNSRVRcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19SRUdJT05cbiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVRcbiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9BQ0NFU1NfS0VZXG4gICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfU0VDUkVUXG4gICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OXG4gICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfQlVDS0VUXG4gICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfQUNDRVNTX0tFWVxuICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1JFR0lPTlxuICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX0JVQ0tFVFxuICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVlcbiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9TRUNSRVRcbiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9SRUdJT05cbiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVRcbiAgICAgIC0gX0FQUF9FWEVDVVRPUl9TRUNSRVRcbiAgICAgIC0gX0FQUF9FWEVDVVRPUl9IT1NUXG4gICAgICAtIF9BUFBfQlVJTERTX1ZPTFVNRT0ke0NPTVBPU0VfUFJPSkVDVF9OQU1FOi1hcHB3cml0ZX1fYXBwd3JpdGUtYnVpbGRzXG4gICAgICAtIF9BUFBfSk9CU19IT1NUXG4gICAgICAtIF9BUFBfSk9CU19TRUNSRVRcbiAgICAgIC0gX0FQUF9KT0JTX0VORFBPSU5UXG4gICAgICAtIF9BUFBfQlJPV1NFUl9IT1NUXG4gICAgICAtIF9BUFBfV09SS0VSX1NDUkVFTlNIT1RTX1JPVVRFUlxuICAgICAgLSBfQVBQX0RPQ0tFUl9IVUJfVVNFUk5BTUVcbiAgICAgIC0gX0FQUF9ET0NLRVJfSFVCX1BBU1NXT1JEXG4gICAgICAtIF9BUFBfRlVOQ1RJT05TX1RJTUVPVVRcbiAgICAgIC0gX0FQUF9TSVRFU19USU1FT1VUXG4gICAgICAtIF9BUFBfQ09NUFVURV9CVUlMRF9USU1FT1VUXG4gICAgICAtIF9BUFBfQ09NUFVURV9DUFVTXG4gICAgICAtIF9BUFBfQ09NUFVURV9NRU1PUllcbiAgICAgIC0gX0FQUF9DT01QVVRFX1NJWkVfTElNSVRcbiAgICAgIC0gX0FQUF9DT01QVVRFX0JVSUxEX1NJWkVfTElNSVRcbiAgICAgIC0gX0FQUF9PUEVOX1JVTlRJTUVTX05GVFxuICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfQVBQX05BTUVcbiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX1BSSVZBVEVfS0VZXG4gICAgICAtIF9BUFBfVkNTX0dJVEhVQl9BUFBfSURcbiAgICAgIC0gX0FQUF9WQ1NfR0lURUFfRU5EUE9JTlRcbiAgICAgIC0gX0FQUF9WQ1NfR0lURUFfQlJPV1NFUl9FTkRQT0lOVFxuICAgICAgLSBfQVBQX1ZDU19HSVRFQV9DTElFTlRfSURcbiAgICAgIC0gX0FQUF9WQ1NfR0lURUFfQ0xJRU5UX1NFQ1JFVFxuICAgICAgLSBfQVBQX1ZDU19HSVRFQV9XRUJIT09LX1NFQ1JFVFxuICAgICAgLSBfQVBQX1ZDU19HSVRMQUJfRU5EUE9JTlRcbiAgICAgIC0gX0FQUF9WQ1NfR0lUTEFCX0NMSUVOVF9JRFxuICAgICAgLSBfQVBQX1ZDU19HSVRMQUJfQ0xJRU5UX1NFQ1JFVFxuICAgICAgLSBfQVBQX1ZDU19HSVRMQUJfV0VCSE9PS19TRUNSRVRcbiAgICAgIC0gX0FQUF9WQ1NfQklUQlVDS0VUX0NMSUVOVF9JRFxuICAgICAgLSBfQVBQX1ZDU19CSVRCVUNLRVRfQ0xJRU5UX1NFQ1JFVFxuICAgICAgLSBfQVBQX1ZDU19CSVRCVUNLRVRfV0VCSE9PS19TRUNSRVRcbiAgICAgIC0gX0FQUF9WQ1NfT1JJR0lOX0NMSUVOVF9JRFxuICAgICAgLSBfQVBQX1ZDU19PUklHSU5fUFJJVkFURV9LRVlcbiAgICAgIC0gX0FQUF9WQ1NfV0VCSE9PS19VUkxcbiAgICAgIC0gX0FQUF9TWVNURU1fRU1BSUxfTkFNRVxuICAgICAgLSBfQVBQX1NZU1RFTV9FTUFJTF9BRERSRVNTXG4gICAgICAtIF9BUFBfU01UUF9IT1NUXG4gICAgICAtIF9BUFBfU01UUF9QT1JUXG4gICAgICAtIF9BUFBfU01UUF9TRUNVUkVcbiAgICAgIC0gX0FQUF9TTVRQX1VTRVJOQU1FXG4gICAgICAtIF9BUFBfU01UUF9QQVNTV09SRFxuICAgICAgLSBfQVBQX1NNU19GUk9NXG4gICAgICAtIF9BUFBfU01TX1BST1ZJREVSXG4gICAgICAtIF9BUFBfU01TX1BST0pFQ1RTX0RFTllfTElTVFxuICAgICAgLSBfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX0lEXG4gICAgICAtIF9BUFBfTUlHUkFUSU9OU19GSVJFQkFTRV9DTElFTlRfU0VDUkVUXG4gICAgICAtIF9BUFBfTUlHUkFUSU9OX0hPU1RcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVRcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVRfQ09OU09MRVxuXG4gIGFwcHdyaXRlLXRhc2stc2NoZWR1bGVyOlxuICAgIGltYWdlOiBhcHB3cml0ZS9hcHB3cml0ZToyLjUuMFxuICAgIGVudHJ5cG9pbnQ6IHNjaGVkdWxlXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIHBvc3RncmVzcWw6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIF9BUFBfRU5WXG4gICAgICAjIENvbWJpbmVkIG1vZGUgcnVucyBmdW5jdGlvbnMvZXhlY3V0aW9ucy9tZXNzYWdlcyB0aW1lcnMgKyBlbnF1ZXVlIGNvcm91dGluZXNcbiAgICAgICMgYWdhaW5zdCBzaGFyZWQgY29uc29sZS9jYWNoZSBwb29sczsgZmxvb3IgbXVzdCBjb3ZlciBjb25jdXJyZW50IHRpY2tzLlxuICAgICAgLSBfQVBQX1dPUktFUl9NQVhfQ09ST1VUSU5FUz04XG4gICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFXG4gICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjFcbiAgICAgIC0gX0FQUF9PUFRJT05TX0ZPUkNFX0hUVFBTXG4gICAgICAtIF9BUFBfRE9NQUlOXG4gICAgICAtIF9BUFBfQ09OU09MRV9ET01BSU5cbiAgICAgIC0gX0FQUF9DT05TT0xFX1NDSEVNQVxuICAgICAgLSBfQVBQX0RPTUFJTl9GVU5DVElPTlNcbiAgICAgIC0gX0FQUF9ET01BSU5fU0lURVNcbiAgICAgIC0gX0FQUF9NSUdSQVRJT05fSE9TVFxuICAgICAgLSBfQVBQX1JFRElTX0hPU1RcbiAgICAgIC0gX0FQUF9SRURJU19QT1JUXG4gICAgICAtIF9BUFBfUkVESVNfVVNFUlxuICAgICAgLSBfQVBQX1JFRElTX1BBU1NcbiAgICAgIC0gX0FQUF9EQl9BREFQVEVSXG4gICAgICAtIF9BUFBfREJfSE9TVFxuICAgICAgLSBfQVBQX0RCX1BPUlRcbiAgICAgIC0gX0FQUF9EQl9TQ0hFTUFcbiAgICAgIC0gX0FQUF9EQl9VU0VSXG4gICAgICAtIF9BUFBfREJfUEFTU1xuICAgICAgLSBfQVBQX0RBVEFCQVNFX1NIQVJFRF9UQUJMRVNcbiAgICAgIC0gX0FQUF9VU0FHRV9TVEFUU1xuICAgICAgLSBfQVBQX1VTQUdFX1BBU1NcbiAgICAgIC0gX0FQUF9DT05ORUNUSU9OU19EQl9VU0FHRVxuICAgICAgLSBfQVBQX1BPT0xfU0laRV9VU0FHRVxuICAgICAgLSBfQVBQX0NPTk5FQ1RJT05TX0RCX0VYRUNVVElPTlNcbiAgICAgIC0gX0FQUF9QT09MX1NJWkVfRVhFQ1VUSU9OU1xuICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9VU0FHRV9UVExcbiAgICAgIC0gX0FQUF9TVEFUU19VU0FHRV9RVUVVRV9OQU1FXG4gICAgICAtIF9BUFBfU1RBVFNfUkVTT1VSQ0VTX1FVRVVFX05BTUVcbiAgICAgIC0gX0FQUF9TVEFUU19SRVNPVVJDRVNfSU5URVJWQUxcbiAgICAgIC0gX0FQUF9GVU5DVElPTlNfU0NIRURVTEVfU1BSRUFEXG4gICAgICAtIF9BUFBfTE9HR0lOR19GT1JNQVRcblxuICBhcHB3cml0ZS10YXNrLW1haW50ZW5hbmNlOlxuICAgIGltYWdlOiBhcHB3cml0ZS9hcHB3cml0ZToyLjUuMFxuICAgIGVudHJ5cG9pbnQ6IG1haW50ZW5hbmNlXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIHBvc3RncmVzcWw6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIF9BUFBfRU5WXG4gICAgICAtIF9BUFBfRURJVElPTlxuICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRVxuICAgICAgLSBfQVBQX0RPTUFJTlxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQ05BTUVcbiAgICAgIC0gX0FQUF9ET01BSU5fVEFSR0VUX0FBQUFcbiAgICAgIC0gX0FQUF9ET01BSU5fVEFSR0VUX0FcbiAgICAgIC0gX0FQUF9ET01BSU5fVEFSR0VUX0NBQVxuICAgICAgLSBfQVBQX0ROU1xuICAgICAgLSBfQVBQX0RPTUFJTl9GVU5DVElPTlNcbiAgICAgIC0gX0FQUF9ST1VURVJfQVVUT19DRVJUSUZJQ0FURVNcbiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMVxuICAgICAgLSBfQVBQX1JFRElTX0hPU1RcbiAgICAgIC0gX0FQUF9SRURJU19QT1JUXG4gICAgICAtIF9BUFBfUkVESVNfVVNFUlxuICAgICAgLSBfQVBQX1JFRElTX1BBU1NcbiAgICAgIC0gX0FQUF9EQl9BREFQVEVSXG4gICAgICAtIF9BUFBfREJfSE9TVFxuICAgICAgLSBfQVBQX0RCX1BPUlRcbiAgICAgIC0gX0FQUF9EQl9TQ0hFTUFcbiAgICAgIC0gX0FQUF9EQl9VU0VSXG4gICAgICAtIF9BUFBfREJfUEFTU1xuICAgICAgLSBfQVBQX0RBVEFCQVNFX1NIQVJFRF9UQUJMRVNcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9JTlRFUlZBTFxuICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1NUQVJUX1RJTUVcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fRVhFQ1VUSU9OXG4gICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0NBQ0hFXG4gICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FCVVNFXG4gICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FVRElUXG4gICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FVRElUX0NPTlNPTEVcbiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fU0NIRURVTEVTXG4gICAgICAtIF9BUFBfTE9HR0lOR19GT1JNQVRcblxuICBhcHB3cml0ZS10YXNrLWludGVydmFsOlxuICAgIGltYWdlOiBhcHB3cml0ZS9hcHB3cml0ZToyLjUuMFxuICAgIGVudHJ5cG9pbnQ6IGludGVydmFsXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICByZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIHBvc3RncmVzcWw6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIF9BUFBfRU5WXG4gICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFXG4gICAgICAtIF9BUFBfRE9NQUlOXG4gICAgICAtIF9BUFBfRE9NQUlOX1RBUkdFVF9DTkFNRVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQUFBQVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQVxuICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVRfQ0FBXG4gICAgICAtIF9BUFBfRE5TXG4gICAgICAtIF9BUFBfRE9NQUlOX0ZVTkNUSU9OU1xuICAgICAgLSBfQVBQX0RPTUFJTl9TSVRFU1xuICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxXG4gICAgICAtIF9BUFBfUkVESVNfSE9TVFxuICAgICAgLSBfQVBQX1JFRElTX1BPUlRcbiAgICAgIC0gX0FQUF9SRURJU19VU0VSXG4gICAgICAtIF9BUFBfUkVESVNfUEFTU1xuICAgICAgLSBfQVBQX0RCX0FEQVBURVJcbiAgICAgIC0gX0FQUF9EQl9IT1NUXG4gICAgICAtIF9BUFBfREJfUE9SVFxuICAgICAgLSBfQVBQX0RCX1NDSEVNQVxuICAgICAgLSBfQVBQX0RCX1VTRVJcbiAgICAgIC0gX0FQUF9EQl9QQVNTXG4gICAgICAtIF9BUFBfREFUQUJBU0VfU0hBUkVEX1RBQkxFU1xuICAgICAgLSBfQVBQX0lOVEVSVkFMX0RPTUFJTl9WRVJJRklDQVRJT05cbiAgICAgIC0gX0FQUF9JTlRFUlZBTF9DTEVBTlVQX1NUQUxFX0VYRUNVVElPTlNcbiAgICAgIC0gX0FQUF9MT0dHSU5HX0ZPUk1BVFxuXG4gIGFwcHdyaXRlLWJyb3dzZXI6XG4gICAgaW1hZ2U6IGFwcHdyaXRlL2Jyb3dzZXI6MC4zLjZcbiAgICA8PDogKngtbG9nZ2luZ1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIEFMTE9XRURfSE9TVFM9YXBwd3JpdGVcbiAgICAjIFB1YmxpYyByZXNvbHZlcnMgb25seSwgc28gdGhlIGJyb3dzZXIgY2Fubm90IHJlc29sdmUgaW50ZXJuYWwgc2VydmljZVxuICAgICMgbmFtZXMgKGUuZy4gcmVkaXMsIGFwcHdyaXRlLW1hcmlhZGIpIGFuZCByZW5kZXIgdGhlbSB2aWEgYSB1c2VyIFVSTC5cbiAgICBkbnM6XG4gICAgICAtIDEuMS4xLjFcbiAgICAgIC0gOC44LjguOFxuXG4gIGFwcHdyaXRlLWF1dG9ncmF2aXR5OlxuICAgIGltYWdlOiBnaGNyLmlvL2FwcHdyaXRlL2F1dG9ncmF2aXR5OjAuMC4xMVxuICAgIDw8OiAqeC1sb2dnaW5nXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gTU9ERUxfQkFDS0VORD1mb2NhbG5ldFxuXG4gIGFwcHdyaXRlLWdlbzpcbiAgICBpbWFnZTogYXBwd3JpdGUvZ2VvOjAuMy4yXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBHRU9fU0VDUkVUPSRfQVBQX0dFT19TRUNSRVRcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6ICdwaHAgLXIgXCJleGl0KGpzb25fZGVjb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCcnaHR0cDovL2xvY2FsaG9zdC92MS9oZWFsdGgnJykpLT5zdGF0dXMgPT09ICcnb2snJyA/IDAgOiAxKTtcIidcbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAzXG4gICAgICBzdGFydF9wZXJpb2Q6IDVzXG5cbiAgY2xpY2tob3VzZTpcbiAgICBpbWFnZTogY2xpY2tob3VzZS9jbGlja2hvdXNlLXNlcnZlcjoyNi40LjMtYWxwaW5lXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBDTElDS0hPVVNFX0RCPWFwcHdyaXRlXG4gICAgICAtIENMSUNLSE9VU0VfVVNFUj1hcHB3cml0ZVxuICAgICAgLSBDTElDS0hPVVNFX1BBU1NXT1JEPSR7X0FQUF9VU0FHRV9QQVNTOi1hcHB3cml0ZX1cbiAgICAgIC0gQ0xJQ0tIT1VTRV9ERUZBVUxUX0FDQ0VTU19NQU5BR0VNRU5UPTFcbiAgICAgIC0gQ0xJQ0tIT1VTRV9BTFdBWVNfUlVOX0lOSVREQl9TQ1JJUFRTPTFcbiAgICB2b2x1bWVzOlxuICAgICAgLSBhcHB3cml0ZS1jbGlja2hvdXNlOi92YXIvbGliL2NsaWNraG91c2U6cndcbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS1jb25maWcueG1sOi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvY29uZmlnLmQvYXBwd3JpdGUueG1sOnJvXG4gICAgICAtIC4uL2ZpbGVzL2NsaWNraG91c2UtaW5pdC5zaDovZG9ja2VyLWVudHJ5cG9pbnQtaW5pdGRiLmQvY2xpY2tob3VzZS1pbml0LnNoOnJvXG4gICAgdWxpbWl0czpcbiAgICAgIG5vZmlsZTpcbiAgICAgICAgc29mdDogMjYyMTQ0XG4gICAgICAgIGhhcmQ6IDI2MjE0NFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgLSBDTUQtU0hFTExcbiAgICAgICAgLSAnY2xpY2tob3VzZS1jbGllbnQgLS11c2VyIFwiJCRDTElDS0hPVVNFX1VTRVJcIiAtLXBhc3N3b3JkIFwiJCRDTElDS0hPVVNFX1BBU1NXT1JEXCIgLS1xdWVyeSBcIlNFTEVDVCAxXCIgPi9kZXYvbnVsbCdcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDIwXG4gICAgICBzdGFydF9wZXJpb2Q6IDMwc1xuXG4gIG9wZW5ydW50aW1lcy1leGVjdXRvcjpcbiAgICBpbWFnZTogb3BlbnJ1bnRpbWVzL2V4ZWN1dG9yOjEuMS4yXG4gICAgIyBUaGUgZXhlY3V0b3IgbG9va3MgdXAgaXRzIG93biBjb250YWluZXIgYnkgaG9zdG5hbWUgdG8gam9pbiB0aGUgcnVudGltZXMgbmV0d29yay5cbiAgICBob3N0bmFtZTogb3BlbnJ1bnRpbWVzLWV4ZWN1dG9yXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHN0b3Bfc2lnbmFsOiBTSUdJTlRcbiAgICB2b2x1bWVzOlxuICAgICAgLSAvdmFyL3J1bi9kb2NrZXIuc29jazovdmFyL3J1bi9kb2NrZXIuc29ja1xuICAgICAgLSBhcHB3cml0ZS1idWlsZHM6L3N0b3JhZ2UvYnVpbGRzOnJ3XG4gICAgICAtIGFwcHdyaXRlLWZ1bmN0aW9uczovc3RvcmFnZS9mdW5jdGlvbnM6cndcbiAgICAgIC0gYXBwd3JpdGUtc2l0ZXM6L3N0b3JhZ2Uvc2l0ZXM6cndcbiAgICAgICMgSG9zdCBtb3VudCBuZWNlc3NhcnkgdG8gc2hhcmUgZmlsZXMgYmV0d2VlbiBleGVjdXRvciBhbmQgcnVudGltZXMuXG4gICAgICAjIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHNoYXJlIG1vdW50IGZpbGUgYmV0d2VlbiAyIGNvbnRhaW5lcnMgd2l0aG91dCBob3N0IG1vdW50IChjb3B5aW5nIGlzIHRvbyBzbG93KVxuICAgICAgLSAvdG1wOi90bXA6cndcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gT1BSX0VYRUNVVE9SX0lNQUdFUz0kX0FQUF9FWEVDVVRPUl9JTUFHRVNcbiAgICAgIC0gT1BSX0VYRUNVVE9SX0lOQUNUSVZFX1RIUkVTSE9MRD0kX0FQUF9DT01QVVRFX0lOQUNUSVZFX1RIUkVTSE9MRFxuICAgICAgLSBPUFJfRVhFQ1VUT1JfTUFJTlRFTkFOQ0VfSU5URVJWQUw9JF9BUFBfQ09NUFVURV9NQUlOVEVOQU5DRV9JTlRFUlZBTFxuICAgICAgIyBSdW50aW1lIGNvbnRhaW5lcnMgam9pbiB0aGlzIHN0YWNrJ3MgZGVmYXVsdCBDb21wb3NlIG5ldHdvcmsgc28gdGhleSBjYW4gcmVhY2ggdGhlIEFQSSBhbmQgZXhlY3V0b3IuXG4gICAgICAjIEl0IG9ubHkgZXhpc3RzIGluIHN0YW5kYXJkIGRlcGxveW1lbnRzLCBoZW5jZSBpc29sYXRlZCA9IGZhbHNlIGluIHRlbXBsYXRlLnRvbWwuXG4gICAgICAtIE9QUl9FWEVDVVRPUl9ORVRXT1JLPSR7Q09NUE9TRV9QUk9KRUNUX05BTUU6LWFwcHdyaXRlfV9kZWZhdWx0XG4gICAgICAtIE9QUl9FWEVDVVRPUl9ET0NLRVJfSFVCX1VTRVJOQU1FPSRfQVBQX0RPQ0tFUl9IVUJfVVNFUk5BTUVcbiAgICAgIC0gT1BSX0VYRUNVVE9SX0RPQ0tFUl9IVUJfUEFTU1dPUkQ9JF9BUFBfRE9DS0VSX0hVQl9QQVNTV09SRFxuICAgICAgLSBPUFJfRVhFQ1VUT1JfRU5WPSRfQVBQX0VOVlxuICAgICAgLSBPUFJfRVhFQ1VUT1JfUlVOVElNRVM9JF9BUFBfRlVOQ1RJT05TX1JVTlRJTUVTLCRfQVBQX1NJVEVTX1JVTlRJTUVTXG4gICAgICAtIE9QUl9FWEVDVVRPUl9TRUNSRVQ9JF9BUFBfRVhFQ1VUT1JfU0VDUkVUXG4gICAgICAtIE9QUl9FWEVDVVRPUl9SVU5USU1FX1ZFUlNJT05TPXY1XG4gICAgICAtIE9QRU5fUlVOVElNRVNfTkZUPSRfQVBQX09QRU5fUlVOVElNRVNfTkZUXG4gICAgICAtIE9QUl9FWEVDVVRPUl9MT0dHSU5HX0NPTkZJRz0kX0FQUF9MT0dHSU5HX0NPTkZJR1xuICAgICAgLSBPUFJfRVhFQ1VUT1JfQ09OTkVDVElPTl9TVE9SQUdFPSR7X0FQUF9FWEVDVVRPUl9DT05ORUNUSU9OX1NUT1JBR0U6LWxvY2FsOi8vbG9jYWxob3N0fVxuICAgICAgLSBPUFJfRVhFQ1VUT1JfQ09OTkVDVElPTl9CVUlMRF9DQUNIRV9TVE9SQUdFPVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgLSBDTUQtU0hFTExcbiAgICAgICAgLSAnY3VybCAtZnNTIC1IIFwiQXV0aG9yaXphdGlvbjogQmVhcmVyICQkT1BSX0VYRUNVVE9SX1NFQ1JFVFwiIGh0dHA6Ly9sb2NhbGhvc3QvdjEvaGVhbHRoID4vZGV2L251bGwnXG4gICAgICBpbnRlcnZhbDogNXNcbiAgICAgIHRpbWVvdXQ6IDNzXG4gICAgICByZXRyaWVzOiAyMFxuICAgICAgc3RhcnRfcGVyaW9kOiA1c1xuXG4gIG9yY2hlc3RyYXRvcjpcbiAgICBpbWFnZTogZ2hjci5pby9vcGVuLXJ1bnRpbWVzL29yY2hlc3RyYXRvci9vcmNoZXN0cmF0b3I6Mi4yLjJcbiAgICBob3N0bmFtZTogb3JjaGVzdHJhdG9yXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHVzZXI6IHJvb3RcbiAgICB2b2x1bWVzOlxuICAgICAgLSAvdmFyL3J1bi9kb2NrZXIuc29jazovdmFyL3J1bi9kb2NrZXIuc29ja1xuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBPUkNIRVNUUkFUT1JfQkFDS0VORD1kb2NrZXJcbiAgICAgICMgQnVpbGQgam9iIGNvbnRhaW5lcnMgam9pbiB0aGlzIHN0YWNrJ3MgZGVmYXVsdCBDb21wb3NlIG5ldHdvcmsgc28gdGhleSBjYW4gcmVhY2ggdGhlIEFQSSBhbmQgb3JjaGVzdHJhdG9yLlxuICAgICAgIyBJdCBvbmx5IGV4aXN0cyBpbiBzdGFuZGFyZCBkZXBsb3ltZW50cywgaGVuY2UgaXNvbGF0ZWQgPSBmYWxzZSBpbiB0ZW1wbGF0ZS50b21sLlxuICAgICAgLSBPUkNIRVNUUkFUT1JfTkVUV09SSz0ke0NPTVBPU0VfUFJPSkVDVF9OQU1FOi1hcHB3cml0ZX1fZGVmYXVsdFxuICAgICAgLSBET0NLRVJfTkVUV09SSz0ke0NPTVBPU0VfUFJPSkVDVF9OQU1FOi1hcHB3cml0ZX1fZGVmYXVsdFxuICAgICAgLSBBUlRJRkFDVF9FTkRQT0lOVD1odHRwOi8vb3JjaGVzdHJhdG9yOjgwODBcbiAgICAgIC0gUzNfRU5EUE9JTlQ9JHtfQVBQX1NUT1JBR0VfUzNfRU5EUE9JTlQ6LX1cbiAgICAgIC0gUzNfUkVHSU9OPSR7X0FQUF9TVE9SQUdFX1MzX1JFR0lPTjotdXMtZWFzdC0xfVxuICAgICAgLSBTM19BQ0NFU1NfS0VZX0lEPSR7X0FQUF9TVE9SQUdFX1MzX0FDQ0VTU19LRVk6LX1cbiAgICAgIC0gUzNfU0VDUkVUX0FDQ0VTU19LRVk9JHtfQVBQX1NUT1JBR0VfUzNfU0VDUkVUOi19XG5cbiAgcG9zdGdyZXNxbDpcbiAgICBpbWFnZTogYXBwd3JpdGUvcG9zdGdyZXM6MC4xLjBcbiAgICA8PDogKngtbG9nZ2luZ1xuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgdm9sdW1lczpcbiAgICAgIC0gYXBwd3JpdGUtcG9zdGdyZXNxbDovdmFyL2xpYi9wb3N0Z3Jlc3FsOnJ3XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFBPU1RHUkVTX0RCPSR7X0FQUF9EQl9TQ0hFTUF9XG4gICAgICAtIFBPU1RHUkVTX1VTRVI9JHtfQVBQX0RCX1VTRVJ9XG4gICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSR7X0FQUF9EQl9QQVNTfVxuICAgIGNvbW1hbmQ6XG4gICAgICAtIHBvc3RncmVzXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICAtIENNRC1TSEVMTFxuICAgICAgICAtIHBnX2lzcmVhZHkgLVUgJHtfQVBQX0RCX1VTRVJ9IC1kICR7X0FQUF9EQl9TQ0hFTUF9XG4gICAgICBpbnRlcnZhbDogNXNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAxMFxuICAgICAgc3RhcnRfcGVyaW9kOiAxMHNcblxuICByZWRpczpcbiAgICBpbWFnZTogcmVkaXM6Ny40LjctYWxwaW5lXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGNvbW1hbmQ6ID5cbiAgICAgIHJlZGlzLXNlcnZlclxuICAgICAgLS1tYXhtZW1vcnkgICAgICAgICAgICA1MTJtYlxuICAgICAgLS1tYXhtZW1vcnktcG9saWN5ICAgICBhbGxrZXlzLWxydVxuICAgICAgLS1tYXhtZW1vcnktc2FtcGxlcyAgICA1XG4gICAgdm9sdW1lczpcbiAgICAgIC0gYXBwd3JpdGUtcmVkaXM6L2RhdGE6cndcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIC0gQ01EXG4gICAgICAgIC0gcmVkaXMtY2xpXG4gICAgICAgIC0gcGluZ1xuICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogMTJcblxuICBtYXJpYWRiOlxuICAgIGltYWdlOiBtYXJpYWRiOjEwLjExXG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIGFwcHdyaXRlLW1hcmlhZGI6L3Zhci9saWIvbXlzcWw6cndcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gTVlTUUxfUk9PVF9QQVNTV09SRD0ke19BUFBfREJfUk9PVF9QQVNTfVxuICAgICAgLSBNWVNRTF9EQVRBQkFTRT0ke19BUFBfREJfU0NIRU1BfVxuICAgICAgLSBNWVNRTF9VU0VSPSR7X0FQUF9EQl9VU0VSfVxuICAgICAgLSBNWVNRTF9QQVNTV09SRD0ke19BUFBfREJfUEFTU31cbiAgICAgIC0gTUFSSUFEQl9BVVRPX1VQR1JBREU9MVxuICAgIGNvbW1hbmQ6XG4gICAgICAtIG15c3FsZFxuICAgICAgLSAtLWlubm9kYi1mbHVzaC1tZXRob2Q9ZnN5bmNcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIC0gQ01ELVNIRUxMXG4gICAgICAgIC0gbWFyaWFkYiAtLXByb3RvY29sPXRjcCAtaDEyNy4wLjAuMSAtdXJvb3QgLXBcIiQkTVlTUUxfUk9PVF9QQVNTV09SRFwiIC0tc2lsZW50IC1lIFwiU0VMRUNUIDFcIlxuICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogMTJcbiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzXG4gIG1vbmdvZGI6XG4gICAgaW1hZ2U6IG1vbmdvOjguMi41XG4gICAgPDw6ICp4LWxvZ2dpbmdcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIGFwcHdyaXRlLW1vbmdvZGI6L2RhdGEvZGJcbiAgICAgIC0gYXBwd3JpdGUtbW9uZ29kYi1rZXlmaWxlOi9kYXRhL2tleWZpbGVcbiAgICAgIC0gLi4vZmlsZXMvbW9uZ28taW5pdC5qczovbW9uZ28taW5pdC5qczpyb1xuICAgICAgLSAuLi9maWxlcy9tb25nby1lbnRyeXBvaW50LnNoOi9tb25nby1lbnRyeXBvaW50LnNoOnJvXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIE1PTkdPX0lOSVREQl9ST09UX1VTRVJOQU1FPXJvb3RcbiAgICAgIC0gTU9OR09fSU5JVERCX1JPT1RfUEFTU1dPUkQ9JHtfQVBQX0RCX1JPT1RfUEFTU31cbiAgICAgIC0gTU9OR09fSU5JVERCX0RBVEFCQVNFPSR7X0FQUF9EQl9TQ0hFTUF9XG4gICAgICAtIE1PTkdPX0lOSVREQl9VU0VSTkFNRT0ke19BUFBfREJfVVNFUn1cbiAgICAgIC0gTU9OR09fSU5JVERCX1BBU1NXT1JEPSR7X0FQUF9EQl9QQVNTfVxuICAgIGVudHJ5cG9pbnQ6XG4gICAgICAtIC9iaW4vYmFzaFxuICAgICAgLSAvbW9uZ28tZW50cnlwb2ludC5zaFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogfFxuICAgICAgICBiYXNoIC1jIFwiXG4gICAgICAgICAgbW9uZ29zaCAtdSByb290IC1wICR7X0FQUF9EQl9ST09UX1BBU1N9IC0tYXV0aGVudGljYXRpb25EYXRhYmFzZSBhZG1pbiAtLXF1aWV0IC0tZXZhbCBcXFwiXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBoZWxsbyA9IGRiLmFkbWluQ29tbWFuZCh7aGVsbG86IDF9KTtcbiAgICAgICAgICAgICAgaWYgKGhlbGxvLmlzV3JpdGFibGVQcmltYXJ5ICYmIGhlbGxvLnNldE5hbWUgPT09ICdyczAnKSB7XG4gICAgICAgICAgICAgICAgcXVpdCgwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnMuaW5pdGlhdGUoe19pZDogJ3JzMCcsIG1lbWJlcnM6IFt7X2lkOiAwLCBob3N0OiAnbW9uZ29kYjoyNzAxNyd9XX0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgcXVpdCgxKTtcbiAgICAgICAgICBcXFwiIDI+L2Rldi9udWxsXG4gICAgICAgIFwiXG4gICAgICBpbnRlcnZhbDogMTBzXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIHJldHJpZXM6IDEwXG4gICAgICBzdGFydF9wZXJpb2Q6IDYwc1xuXG4gICMgRW1iZWRkaW5ncyBBUEkgKG9wdGlvbmFsLCByZXNvdXJjZSBoZWF2eSk6IHNldCBfQVBQX0VNQkVERElORz1lbmFibGVkIGFuZCB1bmNvbW1lbnQuXG4gICMgYXBwd3JpdGUtZW1iZWRkaW5nOlxuICAjICAgaW1hZ2U6IGFwcHdyaXRlL2VtYmVkZGluZzowLjMuMVxuICAjICAgPDw6ICp4LWxvZ2dpbmdcbiAgIyAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICMgICBlbnZpcm9ubWVudDpcbiAgIyAgICAgLSBFTUJFRERJTkdfTU9ERUxTPW5vbWljLWVtYmVkLXRleHRcbiAgIyAgIHZvbHVtZXM6XG4gICMgICAgIC0gYXBwd3JpdGUtbW9kZWxzOi9ob21lL2VtYmVkZGVyL21vZGVsc1xuXG4gICMgY2xhbWF2OlxuICAjICAgaW1hZ2U6IGFwcHdyaXRlL2NsYW1hdjoxLjIuMFxuICAjICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgIyAgIHZvbHVtZXM6XG4gICMgICAgIC0gYXBwd3JpdGUtdXBsb2Fkczovc3RvcmFnZS91cGxvYWRzXG5cbnZvbHVtZXM6XG4gIGFwcHdyaXRlLXBvc3RncmVzcWw6XG4gIGFwcHdyaXRlLXJlZGlzOlxuICBhcHB3cml0ZS1jbGlja2hvdXNlOlxuICBhcHB3cml0ZS1jYWNoZTpcbiAgYXBwd3JpdGUtdXBsb2FkczpcbiAgYXBwd3JpdGUtaW1wb3J0czpcbiAgYXBwd3JpdGUtY2VydGlmaWNhdGVzOlxuICBhcHB3cml0ZS1mdW5jdGlvbnM6XG4gIGFwcHdyaXRlLXNpdGVzOlxuICAjIFBpbm5lZCBuYW1lIHNvIHRoZSBvcmNoZXN0cmF0b3IgY2FuIGF0dGFjaCBpdCB0byBidWlsZCB3b3JrZXJzIGJ5IGEgc3RhYmxlIG5hbWUgKHNlZSBfQVBQX0JVSUxEU19WT0xVTUUpLlxuICBhcHB3cml0ZS1idWlsZHM6XG4gICAgbmFtZTogJHtDT01QT1NFX1BST0pFQ1RfTkFNRTotYXBwd3JpdGV9X2FwcHdyaXRlLWJ1aWxkc1xuICBhcHB3cml0ZS1jb25maWc6XG4gIGFwcHdyaXRlLW1hcmlhZGI6XG4gIGFwcHdyaXRlLW1vbmdvZGI6XG4gIGFwcHdyaXRlLW1vbmdvZGIta2V5ZmlsZTpcbiAgIyBhcHB3cml0ZS1tb2RlbHM6IiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmZ1bmN0aW9uc19kb21haW4gPSBcImZ1bmN0aW9ucy4ke21haW5fZG9tYWlufVwiXG5zaXRlc19kb21haW4gPSBcInNpdGVzLiR7bWFpbl9kb21haW59XCJcbm1xdHRfZG9tYWluID0gXCJtcXR0LiR7bWFpbl9kb21haW59XCJcbm9wZW5zc2xfa2V5ID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5ub3RpZmljYXRpb25zX3RyYWNraW5nX3NlY3JldCA9IFwiJHtwYXNzd29yZDozMn1cIlxuZGJfcHcgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbmRiX3Jvb3RfcHcgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbmRiX3VzZXJfcHcgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbnVzYWdlX3B3ID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5leGVjdXRvcl9zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbmpvYnNfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5nZW9fc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5jb25zb2xlX2RvbWFpbiA9IFwiY29uc29sZS4ke21haW5fZG9tYWlufVwiXG5cbltjb25maWddXG4jIEJ1aWxkIGpvYnMgYW5kIHJ1bnRpbWVzIGpvaW4gPGFwcE5hbWU+X2RlZmF1bHQsIHdoaWNoIGlzb2xhdGVkIGRlcGxveW1lbnRzIG5ldmVyIGNyZWF0ZVxuIyAoZXZlcnkgc2VydmljZSBzaXRzIG9uIHRoZSBleHRlcm5hbCA8YXBwTmFtZT4gbmV0d29yayBpbnN0ZWFkKS5cbmlzb2xhdGVkID0gZmFsc2VcbmVudiA9IFtcbiAgXCJfQVBQX0VOVj1wcm9kdWN0aW9uXCIsXG4gIFwiX0FQUF9FRElUSU9OPXNlbGYtaG9zdGVkXCIsXG4gIFwiX0FQUF9MT0NBTEU9ZW5cIixcbiAgXCJfQVBQX1dPUktFUl9QRVJfQ09SRT02XCIsXG4gIFwiX0FQUF9PUFRJT05TX0FCVVNFPWVuYWJsZWRcIixcbiAgXCJfQVBQX09QVElPTlNfQUJVU0VfSU5DUkVBU0VEX0xJTUlUX1BST0pFQ1RTPVwiLFxuICBcIl9BUFBfT1BUSU9OU19GT1JDRV9IVFRQUz1kaXNhYmxlZFwiLFxuICBcIl9BUFBfT1BUSU9OU19ST1VURVJfRk9SQ0VfSFRUUFM9ZGlzYWJsZWRcIixcbiAgXCJfQVBQX09QVElPTlNfUk9VVEVSX1BST1RFQ1RJT049ZGlzYWJsZWRcIixcbiAgXCJfQVBQX1JPVVRFUl9BVVRPX0NFUlRJRklDQVRFUz1lbmFibGVkXCIsXG4gIFwiX0FQUF9MT0NLSU5HX0VOQUJMRUQ9ZW5hYmxlZFwiLFxuICBcIl9BUFBfT1BFTlNTTF9LRVlfVjE9JHtvcGVuc3NsX2tleX1cIixcbiAgXCJfQVBQX05PVElGSUNBVElPTlNfVFJBQ0tJTkdfU0VDUkVUPSR7bm90aWZpY2F0aW9uc190cmFja2luZ19zZWNyZXR9XCIsXG4gIFwiX0FQUF9ET01BSU49JHttYWluX2RvbWFpbn1cIixcbiAgXCJfQVBQX0NPTlNPTEVfRE9NQUlOPSR7Y29uc29sZV9kb21haW59XCIsXG4gIFwiX0FQUF9DT05TT0xFX1VSTD1odHRwczovLyR7Y29uc29sZV9kb21haW59XCIsXG4gIFwiX0FQUF9DT05TT0xFX0hPU1ROQU1FUz0ke2NvbnNvbGVfZG9tYWlufVwiLFxuICBcIl9BUFBfQ09OU09MRV9UUlVTVEVEX1BST0pFQ1RTPVwiLFxuICBcIl9BUFBfQ1VTVE9NX0RPTUFJTl9ERU5ZX0xJU1Q9ZXhhbXBsZS5jb20sdGVzdC5jb20sYXBwLmV4YW1wbGUuY29tXCIsXG4gIFwiX0FQUF9ET01BSU5fRlVOQ1RJT05TPSR7ZnVuY3Rpb25zX2RvbWFpbn1cIixcbiAgXCJfQVBQX0RPTUFJTl9TSVRFUz0ke3NpdGVzX2RvbWFpbn1cIixcbiAgXCJfQVBQX0RPTUFJTl9UQVJHRVRfQ05BTUU9bG9jYWxob3N0XCIsXG4gIFwiX0FQUF9ET01BSU5fVEFSR0VUX0FBQUE9OjoxXCIsXG4gIFwiX0FQUF9ET01BSU5fVEFSR0VUX0E9MTI3LjAuMC4xXCIsXG4gIFwiX0FQUF9ET01BSU5fVEFSR0VUX0NBQT1cIixcbiAgXCJfQVBQX0ROUz04LjguOC44XCIsXG4gIFwiX0FQUF9UUlVTVEVEX0hFQURFUlM9eC1mb3J3YXJkZWQtZm9yXCIsXG4gIFwiX0FQUF9DT05TT0xFX1dISVRFTElTVF9ST09UPWVuYWJsZWRcIixcbiAgXCJfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX0VNQUlMUz1cIixcbiAgXCJfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX0lQUz1cIixcbiAgXCJfQVBQX0NPTlNPTEVfSE9TVE5BTUVTPVwiLFxuICBcIl9BUFBfQ09OU09MRV9TQ0hFTUE9YXBwd3JpdGVpb1wiLFxuICBcIl9BUFBfQ09OU09MRV9TRVNTSU9OX0FMRVJUUz1kaXNhYmxlZFwiLFxuICBcIl9BUFBfQ09OU09MRV9DT1VOVFJJRVNfREVOWUxJU1Q9XCIsXG4gIFwiX0FQUF9DT05TT0xFX0dJVEhVQl9BUFBfSUQ9XCIsXG4gIFwiX0FQUF9DT05TT0xFX0dJVEhVQl9TRUNSRVQ9XCIsXG4gIFwiX0FQUF9DT05TT0xFX0dJVExBQl9BUFBfSUQ9XCIsXG4gIFwiX0FQUF9DT05TT0xFX0dJVExBQl9TRUNSRVQ9XCIsXG4gIFwiX0FQUF9DT05TT0xFX0dJVExBQl9FTkRQT0lOVD1cIixcbiAgXCJfQVBQX0NPTlNPTEVfQklUQlVDS0VUX0FQUF9JRD1cIixcbiAgXCJfQVBQX0NPTlNPTEVfQklUQlVDS0VUX1NFQ1JFVD1cIixcbiAgXCJfQVBQX0NPTlNPTEVfR09PR0xFX0FQUF9JRD1cIixcbiAgXCJfQVBQX0NPTlNPTEVfR09PR0xFX1NFQ1JFVD1cIixcbiAgXCJfQVBQX1NZU1RFTV9FTUFJTF9OQU1FPUFwcHdyaXRlXCIsXG4gIFwiX0FQUF9TWVNURU1fRU1BSUxfQUREUkVTUz1ub3JlcGx5QGFwcHdyaXRlLmlvXCIsXG4gIFwiX0FQUF9TWVNURU1fVEVBTV9FTUFJTD10ZWFtQGFwcHdyaXRlLmlvXCIsXG4gIFwiX0FQUF9TWVNURU1fUkVTUE9OU0VfRk9STUFUPVwiLFxuICBcIl9BUFBfRU1BSUxfU0VDVVJJVFk9XCIsXG4gIFwiX0FQUF9FTUFJTF9DRVJUSUZJQ0FURVM9XCIsXG4gIFwiX0FQUF9DT01QUkVTU0lPTl9FTkFCTEVEPWVuYWJsZWRcIixcbiAgXCJfQVBQX0NPTVBSRVNTSU9OX01JTl9TSVpFX0JZVEVTPTEwMjRcIixcbiAgXCJfQVBQX0xPR0dJTkdfQ09ORklHPVwiLFxuICBcIl9BUFBfTE9HR0lOR19GT1JNQVQ9cHJldHR5XCIsXG4gIFwiX0FQUF9HRU9fRU5EUE9JTlQ9aHR0cDovL2FwcHdyaXRlLWdlby92MVwiLFxuICBcIl9BUFBfR0VPX1NFQ1JFVD0ke2dlb19zZWNyZXR9XCIsXG4gIFwiX0FQUF9SRURJU19IT1NUPXJlZGlzXCIsXG4gIFwiX0FQUF9SRURJU19QT1JUPTYzNzlcIixcbiAgXCJfQVBQX1JFRElTX1VTRVI9XCIsXG4gIFwiX0FQUF9SRURJU19QQVNTPVwiLFxuICBcIl9BUFBfREJfQURBUFRFUj1wb3N0Z3Jlc3FsXCIsXG4gIFwiX0FQUF9EQl9IT1NUPXBvc3RncmVzcWxcIixcbiAgXCJfQVBQX0RCX1BPUlQ9NTQzMlwiLFxuICBcIl9BUFBfREJfU0NIRU1BPWFwcHdyaXRlXCIsXG4gIFwiX0FQUF9EQl9VU0VSPXVzZXJcIixcbiAgXCJfQVBQX0RCX1BBU1M9JHtkYl9wd31cIixcbiAgXCJfQVBQX0RBVEFCQVNFX1NIQVJFRF9UQUJMRVM9XCIsXG4gIFwiX0FQUF9EQVRBQkFTRV9TSEFSRURfTkFNRVNQQUNFPVwiLFxuICBcIl9BUFBfTElNSVRfREFUQUJBU0VfQkFUQ0g9MTAwXCIsXG4gIFwiX0FQUF9ET0NVTUVOVFNEQj1lbmFibGVkXCIsXG4gIFwiX0FQUF9EQl9BREFQVEVSX0RPQ1VNRU5UU0RCPW1vbmdvZGJcIixcbiAgXCJfQVBQX0RCX0hPU1RfRE9DVU1FTlRTREI9bW9uZ29kYlwiLFxuICBcIl9BUFBfREJfUE9SVF9ET0NVTUVOVFNEQj0yNzAxN1wiLFxuICBcIl9BUFBfREJfU0NIRU1BX0RPQ1VNRU5UU0RCPVwiLFxuICBcIl9BUFBfREJfVVNFUl9ET0NVTUVOVFNEQj1cIixcbiAgXCJfQVBQX0RCX1BBU1NfRE9DVU1FTlRTREI9XCIsXG4gIFwiX0FQUF9DT05ORUNUSU9OU19EQVRBQkFTRV9ET0NVTUVOVFNEQj1cIixcbiAgXCJfQVBQX1ZFQ1RPUlNEQj1lbmFibGVkXCIsXG4gIFwiX0FQUF9EQl9BREFQVEVSX1ZFQ1RPUlNEQj1wb3N0Z3Jlc3FsXCIsXG4gIFwiX0FQUF9EQl9IT1NUX1ZFQ1RPUlNEQj1wb3N0Z3Jlc3FsXCIsXG4gIFwiX0FQUF9EQl9QT1JUX1ZFQ1RPUlNEQj01NDMyXCIsXG4gIFwiX0FQUF9EQl9TQ0hFTUFfVkVDVE9SU0RCPVwiLFxuICBcIl9BUFBfREJfVVNFUl9WRUNUT1JTREI9XCIsXG4gIFwiX0FQUF9EQl9QQVNTX1ZFQ1RPUlNEQj1cIixcbiAgXCJfQVBQX0NPTk5FQ1RJT05TX0RBVEFCQVNFX1ZFQ1RPUlNEQj1cIixcbiAgXCJfQVBQX0VNQkVERElORz1kaXNhYmxlZFwiLFxuICBcIl9BUFBfVVNBR0VfU1RBVFM9ZW5hYmxlZFwiLFxuICBcIl9BUFBfVVNBR0VfUEFTUz0ke3VzYWdlX3B3fVwiLFxuICBcIl9BUFBfQ09OTkVDVElPTlNfREJfVVNBR0U9aHR0cDovL2FwcHdyaXRlOiR7dXNhZ2VfcHd9QGNsaWNraG91c2U6ODEyMy9hcHB3cml0ZVwiLFxuICBcIl9BUFBfUE9PTF9TSVpFX1VTQUdFPTJcIixcbiAgXCJfQVBQX0NPTk5FQ1RJT05TX0RCX0VYRUNVVElPTlM9aHR0cDovL2FwcHdyaXRlOiR7dXNhZ2VfcHd9QGNsaWNraG91c2U6ODEyMy9hcHB3cml0ZVwiLFxuICBcIl9BUFBfUE9PTF9TSVpFX0VYRUNVVElPTlM9MlwiLFxuICBcIl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX1VTQUdFX1RUTD0xODBcIixcbiAgXCJfQVBQX1NUQVRTX1VTQUdFX1FVRVVFX05BTUU9djEtc3RhdHMtdXNhZ2VcIixcbiAgXCJfQVBQX1NUQVRTX1JFU09VUkNFU19RVUVVRV9OQU1FPXYxLXN0YXRzLXJlc291cmNlc1wiLFxuICBcIl9BUFBfU1RBVFNfUkVTT1VSQ0VTX0lOVEVSVkFMPTM2MDBcIixcbiAgXCJfQVBQX01RVFRfUkVQTEFZX0RFUFRIPTVcIixcbiAgXCJfQVBQX01RVFRfTUFYX1BBQ0tFVF9TSVpFPTY0MDAwXCIsXG4gIFwiX0FQUF9TTVRQX0hPU1Q9XCIsXG4gIFwiX0FQUF9TTVRQX1BPUlQ9XCIsXG4gIFwiX0FQUF9TTVRQX1NFQ1VSRT1cIixcbiAgXCJfQVBQX1NNVFBfVVNFUk5BTUU9XCIsXG4gIFwiX0FQUF9TTVRQX1BBU1NXT1JEPVwiLFxuICBcIl9BUFBfU01TX1BST1ZJREVSPVwiLFxuICBcIl9BUFBfU01TX0ZST009XCIsXG4gIFwiX0FQUF9TTVNfUFJPSkVDVFNfREVOWV9MSVNUPVwiLFxuICBcIl9BUFBfUFdORURfUEFTU1dPUkRTX0RTTj1ub25lOi8vbG9jYWxob3N0XCIsXG4gIFwiX0FQUF9TVE9SQUdFX0xJTUlUPTMwMDAwMDAwXCIsXG4gIFwiX0FQUF9TVE9SQUdFX1BSRVZJRVdfTElNSVQ9MjAwMDAwMDBcIixcbiAgXCJfQVBQX0FVVE9HUkFWSVRZX0hPU1Q9aHR0cDovL2FwcHdyaXRlLWF1dG9ncmF2aXR5OjgwODBcIixcbiAgXCJfQVBQX1NUT1JBR0VfQU5USVZJUlVTPWRpc2FibGVkXCIsXG4gIFwiX0FQUF9TVE9SQUdFX0FOVElWSVJVU19IT1NUPWNsYW1hdlwiLFxuICBcIl9BUFBfU1RPUkFHRV9BTlRJVklSVVNfUE9SVD0zMzEwXCIsXG4gIFwiX0FQUF9TVE9SQUdFX0RFVklDRT1sb2NhbFwiLFxuICBcIl9BUFBfU1RPUkFHRV9TM19BQ0NFU1NfS0VZPVwiLFxuICBcIl9BUFBfU1RPUkFHRV9TM19TRUNSRVQ9XCIsXG4gIFwiX0FQUF9TVE9SQUdFX1MzX1JFR0lPTj11cy1lYXN0LTFcIixcbiAgXCJfQVBQX1NUT1JBR0VfUzNfQlVDS0VUPVwiLFxuICBcIl9BUFBfU1RPUkFHRV9TM19FTkRQT0lOVD1cIixcbiAgXCJfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVk9XCIsXG4gIFwiX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19TRUNSRVQ9XCIsXG4gIFwiX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19SRUdJT049dXMtZWFzdC0xXCIsXG4gIFwiX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVQ9XCIsXG4gIFwiX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9BQ0NFU1NfS0VZPVwiLFxuICBcIl9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfU0VDUkVUPVwiLFxuICBcIl9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OPXVzLXdlc3QtMDA0XCIsXG4gIFwiX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVQ9XCIsXG4gIFwiX0FQUF9TVE9SQUdFX0xJTk9ERV9BQ0NFU1NfS0VZPVwiLFxuICBcIl9BUFBfU1RPUkFHRV9MSU5PREVfU0VDUkVUPVwiLFxuICBcIl9BUFBfU1RPUkFHRV9MSU5PREVfUkVHSU9OPWV1LWNlbnRyYWwtMVwiLFxuICBcIl9BUFBfU1RPUkFHRV9MSU5PREVfQlVDS0VUPVwiLFxuICBcIl9BUFBfU1RPUkFHRV9XQVNBQklfQUNDRVNTX0tFWT1cIixcbiAgXCJfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVD1cIixcbiAgXCJfQVBQX1NUT1JBR0VfV0FTQUJJX1JFR0lPTj1ldS1jZW50cmFsLTFcIixcbiAgXCJfQVBQX1NUT1JBR0VfV0FTQUJJX0JVQ0tFVD1cIixcbiAgXCJfQVBQX0NPTVBVVEVfU0laRV9MSU1JVD0zMDAwMDAwMFwiLFxuICBcIl9BUFBfQ09NUFVURV9CVUlMRF9TSVpFX0xJTUlUPTIwMDAwMDAwMDBcIixcbiAgXCJfQVBQX0NPTVBVVEVfQlVJTERfVElNRU9VVD0yNzAwXCIsXG4gIFwiX0FQUF9DT01QVVRFX0NQVVM9MFwiLFxuICBcIl9BUFBfQ09NUFVURV9NRU1PUlk9MFwiLFxuICBcIl9BUFBfQ09NUFVURV9JTkFDVElWRV9USFJFU0hPTEQ9NjBcIixcbiAgXCJfQVBQX0NPTVBVVEVfTUFJTlRFTkFOQ0VfSU5URVJWQUw9MzYwMFwiLFxuICBcIl9BUFBfT1BFTl9SVU5USU1FU19ORlQ9ZW5hYmxlZFwiLFxuICBcIl9BUFBfRlVOQ1RJT05TX1RJTUVPVVQ9OTAwXCIsXG4gIFwiX0FQUF9GVU5DVElPTlNfQ1JFQVRJT05fQUJVU0VfTElNSVQ9NTAwMFwiLFxuICBcIl9BUFBfRlVOQ1RJT05TX1NDSEVEVUxFX1NQUkVBRD0wXCIsXG4gIFwiX0FQUF9GVU5DVElPTlNfUlVOVElNRVM9bm9kZS0yMixub2RlLTI0LG5vZGUtMjYscHl0aG9uLTMuMTIscGhwLTguMyxydWJ5LTMuMyxkYXJ0LTMuNSxnby0xLjIzLHJ1c3QtMS44MyxidW4tMS4xLGRlbm8tMS40NixqYXZhLTIxLjAsZG90bmV0LTguMFwiLFxuICBcIl9BUFBfU0lURVNfVElNRU9VVD05MDBcIixcbiAgXCJfQVBQX1NJVEVTX1JVTlRJTUVTPXN0YXRpYy0xLG5vZGUtMjJcIixcbiAgXCJfQVBQX0VYRUNVVE9SX1NFQ1JFVD0ke2V4ZWN1dG9yX3NlY3JldH1cIixcbiAgXCJfQVBQX0VYRUNVVE9SX0hPU1Q9aHR0cDovL29wZW5ydW50aW1lcy1leGVjdXRvci92MVwiLFxuICBcIl9BUFBfRVhFQ1VUT1JfSU1BR0VTPW9wZW5ydW50aW1lcy9ub2RlOnY1LTIyLG9wZW5ydW50aW1lcy9weXRob246djUtMy4xMixvcGVucnVudGltZXMvcGhwOnY1LTguMyxvcGVucnVudGltZXMvc3RhdGljOnY1LTFcIixcbiAgXCJfQVBQX0VYRUNVVE9SX0NPTk5FQ1RJT05fU1RPUkFHRT1sb2NhbDovL2xvY2FsaG9zdFwiLFxuICBcIl9BUFBfSk9CU19IT1NUPWh0dHA6Ly9vcmNoZXN0cmF0b3I6ODA4MFwiLFxuICBcIl9BUFBfSk9CU19TRUNSRVQ9JHtqb2JzX3NlY3JldH1cIixcbiAgXCJfQVBQX0pPQlNfRU5EUE9JTlQ9aHR0cDovL2FwcHdyaXRlXCIsXG4gIFwiX0FQUF9CUk9XU0VSX0hPU1Q9aHR0cDovL2FwcHdyaXRlLWJyb3dzZXI6MzAwMC92MVwiLFxuICBcIl9BUFBfV09SS0VSX1NDUkVFTlNIT1RTX1JPVVRFUj1odHRwOi8vYXBwd3JpdGVcIixcbiAgXCJfQVBQX0RPQ0tFUl9IVUJfVVNFUk5BTUU9XCIsXG4gIFwiX0FQUF9ET0NLRVJfSFVCX1BBU1NXT1JEPVwiLFxuICBcIl9BUFBfTUFJTlRFTkFOQ0VfSU5URVJWQUw9ODY0MDBcIixcbiAgXCJfQVBQX01BSU5URU5BTkNFX1NUQVJUX1RJTUU9MDA6MDBcIixcbiAgXCJfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRT0yNTkyMDAwXCIsXG4gIFwiX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fRVhFQ1VUSU9OPTEyMDk2MDBcIixcbiAgXCJfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9BVURJVD0xMjA5NjAwXCIsXG4gIFwiX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVRfQ09OU09MRT0xNTc3ODgwMFwiLFxuICBcIl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FCVVNFPTg2NDAwXCIsXG4gIFwiX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fU0NIRURVTEVTPTg2NDAwXCIsXG4gIFwiX0FQUF9JTlRFUlZBTF9ET01BSU5fVkVSSUZJQ0FUSU9OPTEyMFwiLFxuICBcIl9BUFBfSU5URVJWQUxfQ0xFQU5VUF9TVEFMRV9FWEVDVVRJT05TPTMwMFwiLFxuICBcIl9BUFBfR1JBUEhRTF9JTlRST1NQRUNUSU9OPWVuYWJsZWRcIixcbiAgXCJfQVBQX0dSQVBIUUxfTUFYX0JBVENIX1NJWkU9MTBcIixcbiAgXCJfQVBQX0dSQVBIUUxfTUFYX0NPTVBMRVhJVFk9MjUwXCIsXG4gIFwiX0FQUF9HUkFQSFFMX01BWF9ERVBUSD00XCIsXG4gIFwiX0FQUF9XRUJIT09LX01BWF9GQUlMRURfQVRURU1QVFM9MTBcIixcbiAgXCJfQVBQX1ZDU19HSVRIVUJfQVBQX05BTUU9XCIsXG4gIFwiX0FQUF9WQ1NfR0lUSFVCX1BSSVZBVEVfS0VZPVwiLFxuICBcIl9BUFBfVkNTX0dJVEhVQl9BUFBfSUQ9XCIsXG4gIFwiX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9JRD1cIixcbiAgXCJfQVBQX1ZDU19HSVRIVUJfQ0xJRU5UX1NFQ1JFVD1cIixcbiAgXCJfQVBQX1ZDU19HSVRIVUJfV0VCSE9PS19TRUNSRVQ9XCIsXG4gIFwiX0FQUF9WQ1NfR0lURUFfRU5EUE9JTlQ9XCIsXG4gIFwiX0FQUF9WQ1NfR0lURUFfQlJPV1NFUl9FTkRQT0lOVD1cIixcbiAgXCJfQVBQX1ZDU19HSVRFQV9DTElFTlRfSUQ9XCIsXG4gIFwiX0FQUF9WQ1NfR0lURUFfQ0xJRU5UX1NFQ1JFVD1cIixcbiAgXCJfQVBQX1ZDU19HSVRFQV9XRUJIT09LX1NFQ1JFVD1cIixcbiAgXCJfQVBQX1ZDU19HSVRMQUJfRU5EUE9JTlQ9XCIsXG4gIFwiX0FQUF9WQ1NfR0lUTEFCX0NMSUVOVF9JRD1cIixcbiAgXCJfQVBQX1ZDU19HSVRMQUJfQ0xJRU5UX1NFQ1JFVD1cIixcbiAgXCJfQVBQX1ZDU19HSVRMQUJfV0VCSE9PS19TRUNSRVQ9XCIsXG4gIFwiX0FQUF9WQ1NfQklUQlVDS0VUX0NMSUVOVF9JRD1cIixcbiAgXCJfQVBQX1ZDU19CSVRCVUNLRVRfQ0xJRU5UX1NFQ1JFVD1cIixcbiAgXCJfQVBQX1ZDU19CSVRCVUNLRVRfV0VCSE9PS19TRUNSRVQ9XCIsXG4gIFwiX0FQUF9WQ1NfT1JJR0lOX0NMSUVOVF9JRD1cIixcbiAgXCJfQVBQX1ZDU19PUklHSU5fUFJJVkFURV9LRVk9XCIsXG4gIFwiX0FQUF9WQ1NfV0VCSE9PS19VUkw9XCIsXG4gIFwiX0FQUF9NSUdSQVRJT05fSE9TVD1hcHB3cml0ZVwiLFxuICBcIl9BUFBfTUlHUkFUSU9OU19GSVJFQkFTRV9DTElFTlRfSUQ9XCIsXG4gIFwiX0FQUF9NSUdSQVRJT05TX0ZJUkVCQVNFX0NMSUVOVF9TRUNSRVQ9XCIsXG4gIFwiX0FQUF9EQl9ST09UX1BBU1M9JHtkYl9yb290X3B3fVwiLFxuICBcIl9BUFBfREJfVVNFUl9QQVNTPSR7ZGJfdXNlcl9wd31cIixcbl1cblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCJtb25nby1pbml0LmpzXCJcbmNvbnRlbnQgPSBcIlwiXCIvLyBtb25nby1pbml0LmpzXG5cbmNvbnN0IGFkbWluRGIgPSBkYi5nZXRTaWJsaW5nREIoJ2FkbWluJyk7XG5cbmNvbnN0IHVzZXJuYW1lID0gcHJvY2Vzcy5lbnYuTU9OR09fSU5JVERCX1VTRVJOQU1FO1xuY29uc3QgcGFzc3dvcmQgPSBwcm9jZXNzLmVudi5NT05HT19JTklUREJfUEFTU1dPUkQ7XG5jb25zdCBkYXRhYmFzZSA9IHByb2Nlc3MuZW52Lk1PTkdPX0lOSVREQl9EQVRBQkFTRTtcblxuLy8gSWRlbXBvdGVudDogdGhlIG9mZmljaWFsIGVudHJ5cG9pbnQgcmFjZXMgdGhlIHJlYWwgc2VydmVyIG9uIHBvcnQgMjcwMTcgd2hlblxuLy8gaW5pdGlhbGlzaW5nIGEgZnJlc2ggdm9sdW1lIChhcHB3cml0ZS9hcHB3cml0ZSMxMzU5MyksIHNvIHRoaXMgc2NyaXB0IG1heSBydW5cbi8vIG1vcmUgdGhhbiBvbmNlLiBTa2lwIGlmIHRoZSB1c2VyIGFscmVhZHkgZXhpc3RzLlxuaWYgKGFkbWluRGIuZ2V0VXNlcih1c2VybmFtZSkgPT09IG51bGwpIHtcbiAgYWRtaW5EYi5jcmVhdGVVc2VyKHtcbiAgICB1c2VyOiB1c2VybmFtZSxcbiAgICBwd2Q6IHBhc3N3b3JkLFxuICAgIHJvbGVzOiBbXG4gICAgICB7IHJvbGU6ICdyZWFkV3JpdGUnLCBkYjogZGF0YWJhc2UgfVxuICAgIF1cbiAgfSk7XG59XG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCJtb25nby1lbnRyeXBvaW50LnNoXCJcbmNvbnRlbnQgPSBcIlwiXCIjIS9iaW4vYmFzaFxuc2V0IC1lXG5cbktFWUZJTEVfUEFUSD1cIi9kYXRhL2tleWZpbGUvbW9uZ28ta2V5ZmlsZVwiXG5cbmlmIFsgISAtZiBcIiRLRVlGSUxFX1BBVEhcIiBdOyB0aGVuXG4gIGVjaG8gXCJHZW5lcmF0aW5nIHJhbmRvbSBNb25nb0RCIGtleWZpbGUuLi5cIlxuICBta2RpciAtcCAvZGF0YS9rZXlmaWxlXG4gIG9wZW5zc2wgcmFuZCAtYmFzZTY0IDc1NiA+IFwiJEtFWUZJTEVfUEFUSFwiXG5maVxuXG5jaG1vZCA0MDAgXCIkS0VZRklMRV9QQVRIXCJcbmNob3duIG1vbmdvZGI6bW9uZ29kYiBcIiRLRVlGSUxFX1BBVEhcIiAyPi9kZXYvbnVsbCB8fCBjaG93biA5OTk6OTk5IFwiJEtFWUZJTEVfUEFUSFwiXG5cbiMgVGhlIHN0YW5kYXJkIGVudHJ5cG9pbnQgaW5pdGlhbGlzZXMgYW4gZW1wdHkgZGF0YSBkaXJlY3Rvcnkgd2l0aCBhIHNlY29uZFxuIyBtb25nb2Qgb24gMjcwMTcsIHN0b3BwZWQgd2l0aCBgbW9uZ29kIC0tc2h1dGRvd25gLiBUaGF0IHJldHVybnMgb25jZSB0aGVcbiMgc2VydmVyIGNsZWFycyA8ZGJwYXRoPi9tb25nb2QubG9jaywgc2V2ZXJhbCBzdGVwcyBiZWZvcmUgaXQgZXhpdHMgYW5kXG4jIHJlbGVhc2VzIHRoZSBwb3J0LCBhbmQgdGhlIHJlYWwgc2VydmVyIGJpbmRzIGEgbWlsbGlzZWNvbmQgYWZ0ZXIgaXQgc3RhcnRzIC0tXG4jIHNvIGEgc2xvdyBzaHV0ZG93biB0YWlsIGxlYXZlcyBpdCBleGl0aW5nIDQ4LCBcIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2VcIixcbiMgdGFraW5nIHRoZSBjb250YWluZXIgd2l0aCBpdCAoYXBwd3JpdGUvYXBwd3JpdGUjMTM1OTMpLiBJbml0aWFsaXNlIGhlcmVcbiMgaW5zdGVhZCwgb24gYSBwb3J0IHRoZSByZWFsIHNlcnZlciBuZXZlciBiaW5kcywgYW5kIGhhbmQgb3ZlciBhIGRpcmVjdG9yeVxuIyB0aGUgc3RhbmRhcmQgZW50cnlwb2ludCBoYXMgbm90aGluZyBsZWZ0IHRvIGRvLlxuSU5JVF9NQVJLRVI9L2RhdGEvZGIvLmFwcHdyaXRlLWluaXRpYWxpc2VkXG5pZiBbICEgLWUgXCIkSU5JVF9NQVJLRVJcIiBdOyB0aGVuXG4gIElOSVRfUE9SVD0yNzAxOFxuICBlY2hvIFwiSW5pdGlhbGlzaW5nIE1vbmdvREIgZGF0YSBkaXJlY3RvcnkuLi5cIlxuICBmaW5kIC1MIC9kYXRhL2RiIFxcXFwhIC11c2VyIG1vbmdvZGIgLWV4ZWMgY2hvd24gbW9uZ29kYiAne30nICtcbiAgZXhwb3J0IE1PTkdPX0lOSVREQl9EQVRBQkFTRT1cIiR7TU9OR09fSU5JVERCX0RBVEFCQVNFOi10ZXN0fVwiXG4gIGdvc3UgbW9uZ29kYiBtb25nb2QgLS1kYnBhdGggL2RhdGEvZGIgLS1iaW5kX2lwIDEyNy4wLjAuMSAtLXBvcnQgXCIkSU5JVF9QT1JUXCIgJlxuICBJTklUX1NFUlZFUj0kIVxuICBSRUFEWT1cbiAgZm9yIF8gaW4gJChzZXEgMSAzMCk7IGRvXG4gICAgaWYgbW9uZ29zaCAtLWhvc3QgMTI3LjAuMC4xIC0tcG9ydCBcIiRJTklUX1BPUlRcIiAtLXF1aWV0IC0tZXZhbCAncXVpdCgwKScgPiAvZGV2L251bGwgMj4mMTsgdGhlblxuICAgICAgUkVBRFk9MVxuICAgICAgYnJlYWtcbiAgICBmaVxuICAgIGlmICEga2lsbCAtMCBcIiRJTklUX1NFUlZFUlwiIDI+L2Rldi9udWxsOyB0aGVuXG4gICAgICBicmVha1xuICAgIGZpXG4gICAgc2xlZXAgMVxuICBkb25lXG4gIGlmIFsgLXogXCIkUkVBRFlcIiBdOyB0aGVuXG4gICAgZWNobyBcIk1vbmdvREIgZGlkIG5vdCBhY2NlcHQgY29ubmVjdGlvbnMgZm9yIGluaXRpYWxpc2F0aW9uXCIgPiYyXG4gICAgZXhpdCAxXG4gIGZpXG4gIG1vbmdvc2ggLS1ob3N0IDEyNy4wLjAuMSAtLXBvcnQgXCIkSU5JVF9QT1JUXCIgLS1xdWlldCBhZG1pbiAtLWV2YWwgJ1xuICAgIGNvbnN0IHVzZXJuYW1lID0gcHJvY2Vzcy5lbnYuTU9OR09fSU5JVERCX1JPT1RfVVNFUk5BTUU7XG4gICAgaWYgKGRiLmdldFVzZXIodXNlcm5hbWUpID09PSBudWxsKSB7XG4gICAgICBkYi5jcmVhdGVVc2VyKHtcbiAgICAgICAgdXNlcjogdXNlcm5hbWUsXG4gICAgICAgIHB3ZDogcHJvY2Vzcy5lbnYuTU9OR09fSU5JVERCX1JPT1RfUEFTU1dPUkQsXG4gICAgICAgIHJvbGVzOiBbeyByb2xlOiBcInJvb3RcIiwgZGI6IFwiYWRtaW5cIiB9XVxuICAgICAgfSk7XG4gICAgfVxuICAnXG4gIG1vbmdvc2ggLS1ob3N0IDEyNy4wLjAuMSAtLXBvcnQgXCIkSU5JVF9QT1JUXCIgLS1xdWlldCBcIiRNT05HT19JTklUREJfREFUQUJBU0VcIiAvbW9uZ28taW5pdC5qc1xuICB0b3VjaCBcIiRJTklUX01BUktFUlwiXG4gIGtpbGwgLVRFUk0gXCIkSU5JVF9TRVJWRVJcIlxuICB3YWl0IFwiJElOSVRfU0VSVkVSXCJcbiAgZWNobyBcIk1vbmdvREIgZGF0YSBkaXJlY3RvcnkgaW5pdGlhbGlzZWQuXCJcbmZpXG5cbmV4ZWMgZG9ja2VyLWVudHJ5cG9pbnQuc2ggbW9uZ29kIC0tcmVwbFNldCByczAgLS1iaW5kX2lwX2FsbCAtLWF1dGggLS1rZXlGaWxlIFwiJEtFWUZJTEVfUEFUSFwiXG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCJjbGlja2hvdXNlLWNvbmZpZy54bWxcIlxuY29udGVudCA9IFwiXCJcIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48IS0tXG4gICAgUmV0ZW50aW9uIGZvciBDbGlja0hvdXNlJ3Mgb3duIHN5c3RlbSBsb2cgdGFibGVzLlxuXG4gICAgRXZlcnkgPHR0bD4gaW4gdGhlIGltYWdlJ3MgY29uZmlnLnhtbCBzaXRzIGluc2lkZSBhbiBYTUwgY29tbWVudCwgc28gdGhlc2VcbiAgICB0YWJsZXMga2VlcCBldmVyeSByb3cgZm9yZXZlciwgYW5kIHRoZSBtZXRyaWMgb25lcyBhZGQgYSByb3cgcGVyIHNlY29uZFxuICAgIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBzZXJ2ZXMgdHJhZmZpYy4gTGVmdCBhbG9uZSB0aGV5IG91dGdyb3cgdGhlXG4gICAgdXNhZ2UgZGF0YSB0aGV5IHNpdCBuZXh0IHRvIGFuZCBmaWxsIHRoZSB2b2x1bWUuXG5cbiAgICBXaGVuIGEgd2luZG93IGhlcmUgY2hhbmdlcywgQ2xpY2tIb3VzZSByZXBsYWNlcyB0aGUgdGFibGUgb24gdGhlIG5leHRcbiAgICByZXN0YXJ0IGFuZCBrZWVwcyB0aGUgb2xkIG9uZSwgcm93cyBhbmQgYWxsLCBhcyA8bG9nPl88Tj4uXG4gICAgY2xpY2tob3VzZS1pbml0LnNoIGdpdmVzIHRob3NlIG9sZCB0YWJsZXMgdGhlIHNhbWUgd2luZG93LlxuLS0+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIFRoZSBtZXRyaWMsIHRyYWNlIGFuZCBwcm9maWxlIGxvZ3Mgc2FtcGxlIHRoZSBzZXJ2ZXIgZXZlcnkgc2Vjb25kIHdoZXRoZXJcbiAgICAgICAgIG9yIG5vdCBBcHB3cml0ZSBzZXJ2ZXMgdHJhZmZpYywgYW5kIG5vdGhpbmcgcmVhZHMgdGhlbSBiYWNrLCBzbyB0aGVpclxuICAgICAgICAgd3JpdGVzIGFuZCB0aGUgbWVyZ2VzIGJlaGluZCB0aGVtIGFyZSBwdXJlIG92ZXJoZWFkLiAtLT5cbiAgICA8YXN5bmNocm9ub3VzX21ldHJpY19sb2cgcmVtb3ZlPVwiMVwiLz5cbiAgICA8bWV0cmljX2xvZyByZW1vdmU9XCIxXCIvPlxuICAgIDxoaXN0b2dyYW1fbWV0cmljX2xvZyByZW1vdmU9XCIxXCIvPlxuICAgIDxxdWVyeV9tZXRyaWNfbG9nIHJlbW92ZT1cIjFcIi8+XG4gICAgPHByb2Nlc3NvcnNfcHJvZmlsZV9sb2cgcmVtb3ZlPVwiMVwiLz5cbiAgICA8dHJhY2VfbG9nIHJlbW92ZT1cIjFcIi8+XG4gICAgPCEtLSB0ZXh0X2xvZyByZXBlYXRzIHRoZSBzZXJ2ZXIgbG9nIHRoZSBjb250YWluZXIgYWxyZWFkeSB3cml0ZXMuIC0tPlxuICAgIDx0ZXh0X2xvZyByZW1vdmU9XCIxXCIvPlxuXG4gICAgPCEtLSBLZXB0IGZvciBkZWJ1Z2dpbmcsIGNhcHBlZCBzbyB0aGV5IGNhbm5vdCBmaWxsIHRoZSB2b2x1bWUuIC0tPlxuICAgIDxhc3luY2hyb25vdXNfaW5zZXJ0X2xvZz48dHRsPmV2ZW50X2RhdGUgKyBJTlRFUlZBTCAzIERBWSBERUxFVEU8L3R0bD48L2FzeW5jaHJvbm91c19pbnNlcnRfbG9nPlxuICAgIDxxdWVyeV9sb2c+PHR0bD5ldmVudF9kYXRlICsgSU5URVJWQUwgNyBEQVkgREVMRVRFPC90dGw+PC9xdWVyeV9sb2c+XG4gICAgPHF1ZXJ5X3ZpZXdzX2xvZz48dHRsPmV2ZW50X2RhdGUgKyBJTlRFUlZBTCA3IERBWSBERUxFVEU8L3R0bD48L3F1ZXJ5X3ZpZXdzX2xvZz5cbiAgICA8cXVlcnlfdGhyZWFkX2xvZz48dHRsPmV2ZW50X2RhdGUgKyBJTlRFUlZBTCA3IERBWSBERUxFVEU8L3R0bD48L3F1ZXJ5X3RocmVhZF9sb2c+XG4gICAgPHBhcnRfbG9nPjx0dGw+ZXZlbnRfZGF0ZSArIElOVEVSVkFMIDcgREFZIERFTEVURTwvdHRsPjwvcGFydF9sb2c+XG4gICAgPGJhY2tncm91bmRfc2NoZWR1bGVfcG9vbF9sb2c+PHR0bD5ldmVudF9kYXRlICsgSU5URVJWQUwgNyBEQVkgREVMRVRFPC90dGw+PC9iYWNrZ3JvdW5kX3NjaGVkdWxlX3Bvb2xfbG9nPlxuXG4gICAgPCEtLSBMb25nZXIsIHNvIGl0IHN0aWxsIGNvdmVycyBhIHJlcG9ydCB0aGF0IHJlYWNoZXMgdXMgbGF0ZS4gY3Jhc2hfbG9nIGlzXG4gICAgICAgICBkZWxpYmVyYXRlbHkgbGVmdCBhbG9uZTogaXQgaXMgdGlueSBhbmQgd29ydGgga2VlcGluZy4gLS0+XG4gICAgPGVycm9yX2xvZz48dHRsPmV2ZW50X2RhdGUgKyBJTlRFUlZBTCAxNCBEQVkgREVMRVRFPC90dGw+PC9lcnJvcl9sb2c+XG48L2NsaWNraG91c2U+XG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCJjbGlja2hvdXNlLWluaXQuc2hcIlxuY29udGVudCA9IFwiXCJcIiMhL2Jpbi9iYXNoXG4jIFRoZSBDbGlja0hvdXNlIGVudHJ5cG9pbnQgc291cmNlcyB0aGlzIGZpbGUsIHNvIGEgc3Vic2hlbGwga2VlcHMgdGhlc2Ugb3B0aW9ucyBvdXQgb2YgaXQuXG4oXG4gIHNldCAtZXVvIHBpcGVmYWlsXG5cbiAgY2xpZW50KCkge1xuICAgIGNsaWNraG91c2UtY2xpZW50IC0taG9zdCAxMjcuMC4wLjEgLS11c2VyIFwiJENMSUNLSE9VU0VfVVNFUlwiIC0tcGFzc3dvcmQgXCIkQ0xJQ0tIT1VTRV9QQVNTV09SRFwiIFwiJEBcIlxuICB9XG5cbiAgIyBGbHVzaGluZyByZXBsYWNlcyBsb2cgdGFibGVzIHdob3NlIGRlZmluaXRpb24gY2hhbmdlZCwga2VlcGluZyBlYWNoIG9sZCB0YWJsZSBhcyA8bG9nPl88Tj4uXG4gIGNsaWVudCAtLXF1ZXJ5ICdTWVNURU0gRkxVU0ggTE9HUydcblxuICAjIFRhYmxlcyBsZWZ0IGJlaGluZCBuZXZlciBleHBpcmUgb24gdGhlaXIgb3duOiB0YWtlIHRoZSBUVEwgb2YgdGhlIGxvZyB0aGF0XG4gICMgcmVwbGFjZWQgdGhpcyBvbmUsIG9yIGEgd2VlayB3aGVuIHRoZSBsb2cgaXMgbm8gbG9uZ2VyIHdyaXR0ZW4gYXQgYWxsLlxuICAjIFRoZSBuYW1lZCBsb2dzIG11c3QgbWF0Y2ggdGhlIG9uZXMgY2xpY2tob3VzZS1jb25maWcueG1sIHJlbW92ZXM6IGEgbG9nIHRoYXRcbiAgIyBpcyBzdGlsbCB3cml0dGVuIGdldHMgcmVwbGFjZWQgb24gdGhlIG5leHQgcmVzdGFydCBpZiBpdHMgVFRMIGlzIGFsdGVyZWQgaGVyZS5cbiAgY2xpZW50IC0tZm9ybWF0IFRTVlJhdyA8PCdTUUwnIHwgY2xpZW50IC0tbXVsdGlxdWVyeVxuU0VMRUNUIGNvbmNhdCgnQUxURVIgVEFCTEUgc3lzdGVtLicsIHN0YWxlLm5hbWUsICcgTU9ESUZZIFRUTCAnLCBpZihhY3RpdmUubmFtZSA9ICcnLCAnZXZlbnRfZGF0ZSArIElOVEVSVkFMIDcgREFZIERFTEVURScsIHNwbGl0QnlTdHJpbmcoJyBTRVRUSU5HUyAnLCBzcGxpdEJ5U3RyaW5nKCcgVFRMICcsIGFjdGl2ZS5lbmdpbmVfZnVsbClbMl0pWzFdKSwgJzsnKVxuRlJPTSAoXG4gIFNFTEVDVCBuYW1lLCBzcGxpdEJ5Q2hhcignXycsIG5hbWUpWy0xXSBBUyBzdWZmaXgsIGFycmF5U3RyaW5nQ29uY2F0KGFycmF5UG9wQmFjayhzcGxpdEJ5Q2hhcignXycsIG5hbWUpKSwgJ18nKSBBUyBsb2dcbiAgRlJPTSBzeXN0ZW0udGFibGVzXG4gIFdIRVJFIGRhdGFiYXNlID0gJ3N5c3RlbSdcbiAgICBBTkQgcG9zaXRpb24oZW5naW5lX2Z1bGwsICcgVFRMICcpID0gMFxuICAgIEFORCBlbmRzV2l0aChlbmdpbmUsICdNZXJnZVRyZWUnKVxuICAgIEFORCBuYW1lIElOIChTRUxFQ1QgdGFibGUgRlJPTSBzeXN0ZW0uY29sdW1ucyBXSEVSRSBkYXRhYmFzZSA9ICdzeXN0ZW0nIEFORCBuYW1lID0gJ2V2ZW50X2RhdGUnIEFORCB0eXBlID0gJ0RhdGUnKVxuKSBBUyBzdGFsZVxuTEVGVCBKT0lOIHN5c3RlbS50YWJsZXMgQVMgYWN0aXZlXG4gIE9OIGFjdGl2ZS5kYXRhYmFzZSA9ICdzeXN0ZW0nXG4gIEFORCBhY3RpdmUubmFtZSA9IHN0YWxlLmxvZ1xuICBBTkQgcG9zaXRpb24oYWN0aXZlLmVuZ2luZV9mdWxsLCAnIFRUTCAnKSA+IDBcbldIRVJFIChlbmRzV2l0aChzdGFsZS5sb2csICdfbG9nJykgQU5EIHRvVUludDY0T3JOdWxsKHN0YWxlLnN1ZmZpeCkgSVMgTk9UIE5VTEwpXG4gIE9SIHN0YWxlLm5hbWUgSU4gKCdhc3luY2hyb25vdXNfbWV0cmljX2xvZycsICdtZXRyaWNfbG9nJywgJ2hpc3RvZ3JhbV9tZXRyaWNfbG9nJywgJ3F1ZXJ5X21ldHJpY19sb2cnLCAncHJvY2Vzc29yc19wcm9maWxlX2xvZycsICd0cmFjZV9sb2cnLCAndGV4dF9sb2cnKVxuU1FMXG4pXG5cIlwiXCJcblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiYXBwd3JpdGUtY29uc29sZVwiXG5wb3J0ID0gMzAwMFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImFwcHdyaXRlXCJcbnBvcnQgPSA4MFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxucGF0aCA9IFwiL3YxXCJcblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiYXBwd3JpdGVcIlxucG9ydCA9IDgwXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG5wYXRoID0gXCIvLndlbGwta25vd25cIlxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJhcHB3cml0ZS1yZWFsdGltZVwiXG5wb3J0ID0gODBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcbnBhdGggPSBcIi92MS9yZWFsdGltZVwiXG5cbiMgLS0tIERlZGljYXRlZCBDb25zb2xlIGRvbWFpbiAtLS1cbiMgVGhlIENvbnNvbGUgU1BBIGlzIHNlcnZlZCBhdCB0aGUgcm9vdCBvZiAke2NvbnNvbGVfZG9tYWlufSwgd2l0aCAvdjEgYW5kXG4jIC92MS9yZWFsdGltZSBwcm94aWVkIHRvIHRoZSBBUEkgYW5kIFJlYWx0aW1lIHNvIHRoZSBDb25zb2xlIHJlYWNoZXMgdGhlIEFQSVxuIyBvbiBpdHMgb3duIG9yaWdpbi5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImFwcHdyaXRlLWNvbnNvbGVcIlxucG9ydCA9IDMwMDBcbmhvc3QgPSBcIiR7Y29uc29sZV9kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJhcHB3cml0ZVwiXG5wb3J0ID0gODBcbmhvc3QgPSBcIiR7Y29uc29sZV9kb21haW59XCJcbnBhdGggPSBcIi92MVwiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImFwcHdyaXRlLXJlYWx0aW1lXCJcbnBvcnQgPSA4MFxuaG9zdCA9IFwiJHtjb25zb2xlX2RvbWFpbn1cIlxucGF0aCA9IFwiL3YxL3JlYWx0aW1lXCJcblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiYXBwd3JpdGVcIlxucG9ydCA9IDgwXG5ob3N0ID0gXCIke3NpdGVzX2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcImFwcHdyaXRlXCJcbnBvcnQgPSA4MFxuaG9zdCA9IFwiJHtmdW5jdGlvbnNfZG9tYWlufVwiXG5wYXRoID0gXCIvXCJcblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiYXBwd3JpdGUtbXF0dFwiXG5wb3J0ID0gODA4M1xuaG9zdCA9IFwiJHttcXR0X2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiIgp9
Reference files
The exact Docker Compose and template configuration this template deploys.
More like this
Version 2.11.0
Autobase for PostgreSQL® is an open-source alternative to cloud-managed databases (self-hosted DBaaS).
Version latest
Bugsink is a self-hosted Error Tracker. Built to self-host; Sentry-SDK compatible; Scalable and reliable
Version latest
Bytebase is a database management tool that allows you to manage your databases with ease. It provides a simple and effective solution for managing your databases from anywhere.
Version latest
ClickHouse is a fast, open-source columnar database built for real-time analytics. Self-host it on your own server with Dokploy, which deploys ClickHouse as a Docker Compose service in a few clicks.
Version 1.8.4
Self-hosted database backup manager with a web UI. Schedule, backup, and restore MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, MongoDB, SQLite, Firebird and Redis to S3, SFTP, Samba or local storage. SSH tunnel support.
Version latest
Grist is an open-source spreadsheet and database alternative that combines the flexibility of spreadsheets with the power of databases.
Free and open source
Notploy is a free, open source deployment platform. Deploy Appwrite and 571+ other templates on your own infrastructure with a single click.