diff --git a/api/user.go b/api/user.go index e09fab8..3f1ea3b 100644 --- a/api/user.go +++ b/api/user.go @@ -45,7 +45,7 @@ func (a *UserAPI) GetCurrentUser(ctx *gin.Context) { // CreateUser creates a user func (a *UserAPI) CreateUser(ctx *gin.Context) { - user := model.UserExternal{} + user := model.UserExternalWithPass{} if err := ctx.Bind(&user); err == nil { if len(user.Pass) == 0 { ctx.AbortWithError(400, errors.New("password may not be empty")) @@ -87,13 +87,9 @@ func (a *UserAPI) DeleteUserByID(ctx *gin.Context) { } } -type userPassword struct { - Pass string `binding:"required" json:"pass" form:"pass" query:"pass" ` -} - // ChangePassword changes the password from the current user func (a *UserAPI) ChangePassword(ctx *gin.Context) { - pw := userPassword{} + pw := model.UserExternalPass{} if err := ctx.Bind(&pw); err == nil { user := a.DB.GetUserByID(auth.GetUserID(ctx)) user.Pass = auth.CreatePassword(pw.Pass, a.PasswordStrength) @@ -104,7 +100,7 @@ func (a *UserAPI) ChangePassword(ctx *gin.Context) { // UpdateUserByID updates and user by id func (a *UserAPI) UpdateUserByID(ctx *gin.Context) { if id, err := toUInt(ctx.Param("id")); err == nil { - var user *model.UserExternal + var user *model.UserExternalWithPass if err := ctx.Bind(&user); err == nil { if oldUser := a.DB.GetUserByID(id); oldUser != nil { internal := a.toInternal(user, oldUser.Pass) @@ -125,7 +121,7 @@ func toUInt(id string) (uint, error) { return uint(parsed), err } -func (a *UserAPI) toInternal(response *model.UserExternal, pw []byte) *model.User { +func (a *UserAPI) toInternal(response *model.UserExternalWithPass, pw []byte) *model.User { user := &model.User{ Name: response.Name, Admin: response.Admin, diff --git a/docs/docs-packr.go b/docs/docs-packr.go index 5029a76..67bbd4f 100644 --- a/docs/docs-packr.go +++ b/docs/docs-packr.go @@ -10,7 +10,7 @@ import "github.com/gobuffalo/packr" // and any other packr generated files. func init() { packr.PackJSONBytes("./", "package.go", "\"Ly8gUGFja2FnZSBkb2NzIEdvdGlmeSBSRVNULUFQSS4KLy8KLy8gVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgR290aWZ5IFJFU1QtQVBJLgovLwovLyAjIEF1dGhlbnRpY2F0aW9uCi8vIEluIEdvdGlmeSB0aGVyZSBhcmUgdHdvIHRva2VuIHR5cGVzOgovLyBfX2NsaWVudFRva2VuX186IGEgY2xpZW50IGlzIHNvbWV0aGluZyB0aGF0IHJlY2VpdmVzIG1lc3NhZ2UgYW5kIG1hbmFnZXMgc3R1ZmYgbGlrZSBjcmVhdGluZyBuZXcgdG9rZW5zIG9yIGRlbGV0ZSBtZXNzYWdlcy4gKGYuZXggdGhpcyB0b2tlbiBzaG91bGQgYmUgdXNlZCBmb3IgYW4gYW5kcm9pZCBhcHApCi8vIF9fYXBwVG9rZW5fXzogYW4gYXBwbGljYXRpb24gaXMgc29tZXRoaW5nIHRoYXQgc2VuZHMgbWVzc2FnZXMgKGYuZXguIHRoaXMgdG9rZW4gc2hvdWxkIGJlIHVzZWQgZm9yIGEgc2hlbGwgc2NyaXB0KQovLwovLyBUaGUgdG9rZW4gY2FuIGJlIGVpdGhlciB0cmFuc21pdHRlZCB0aHJvdWdoIGEgaGVhZGVyIG5hbWVkIGBYLUdvdGlmeS1LZXlgIG9yIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGB0b2tlbmAuCi8vIFRoZXJlIGlzIGFsc28gdGhlIHBvc3NpYmlsaXR5IHRvIGF1dGhlbnRpY2F0ZSB0aHJvdWdoIGJhc2ljIGF1dGgsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBjbGllbnRUb2tlbi4KLy8KLy8gXC0tLQovLwovLyBGb3VuZCBhIGJ1ZyBvciBoYXZlIHNvbWUgcXVlc3Rpb25zPyBbQ3JlYXRlIGFuIGlzc3VlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvaXNzdWVzKQovLwovLyAgICAgU2NoZW1lczogaHR0cCwgaHR0cHMKLy8gICAgIEhvc3Q6IGxvY2FsaG9zdAovLyAgICAgVmVyc2lvbjogMS4wLjEKLy8gICAgIExpY2Vuc2U6IE1JVCBodHRwczovL2dpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9ibG9iL21hc3Rlci9MSUNFTlNFCi8vCi8vICAgICBDb25zdW1lczoKLy8gICAgIC0gYXBwbGljYXRpb24vanNvbgovLwovLyAgICAgUHJvZHVjZXM6Ci8vICAgICAtIGFwcGxpY2F0aW9uL2pzb24KLy8KLy8gICAgIFNlY3VyaXR5RGVmaW5pdGlvbnM6Ci8vICAgICAgICBhcHBUb2tlblF1ZXJ5OgovLyAgICAgICAgICAgdHlwZTogYXBpS2V5Ci8vICAgICAgICAgICBuYW1lOiB0b2tlbgovLyAgICAgICAgICAgaW46IHF1ZXJ5Ci8vICAgICAgICBjbGllbnRUb2tlblF1ZXJ5OgovLyAgICAgICAgICAgdHlwZTogYXBpS2V5Ci8vICAgICAgICAgICBuYW1lOiB0b2tlbgovLyAgICAgICAgICAgaW46IHF1ZXJ5Ci8vIAkgICAgICBhcHBUb2tlbkhlYWRlcjoKLy8gICAgICAgICAgIHR5cGU6IGFwaUtleQovLyAgICAgICAgICAgbmFtZTogWC1Hb3RpZnktS2V5Ci8vICAgICAgICAgICBpbjogaGVhZGVyCi8vIAkgICAgICBjbGllbnRUb2tlbkhlYWRlcjoKLy8gICAgICAgICAgIHR5cGU6IGFwaUtleQovLyAgICAgICAgICAgbmFtZTogWC1Hb3RpZnktS2V5Ci8vICAgICAgICAgICBpbjogaGVhZGVyCi8vICAgICAgICBiYXNpY0F1dGg6Ci8vICAgICAgICAgICB0eXBlOiBiYXNpYwovLwovLyBzd2FnZ2VyOm1ldGEKcGFja2FnZSBkb2NzCg==\"") - packr.PackJSONBytes("./", "spec.json", "\"ewogICJjb25zdW1lcyI6IFsKICAgICJhcHBsaWNhdGlvbi9qc29uIgogIF0sCiAgInByb2R1Y2VzIjogWwogICAgImFwcGxpY2F0aW9uL2pzb24iCiAgXSwKICAic2NoZW1lcyI6IFsKICAgICJodHRwIiwKICAgICJodHRwcyIKICBdLAogICJzd2FnZ2VyIjogIjIuMCIsCiAgImluZm8iOiB7CiAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgR290aWZ5IFJFU1QtQVBJLlxuXG4jIEF1dGhlbnRpY2F0aW9uXG5JbiBHb3RpZnkgdGhlcmUgYXJlIHR3byB0b2tlbiB0eXBlczpcbl9fY2xpZW50VG9rZW5fXzogYSBjbGllbnQgaXMgc29tZXRoaW5nIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZSBhbmQgbWFuYWdlcyBzdHVmZiBsaWtlIGNyZWF0aW5nIG5ldyB0b2tlbnMgb3IgZGVsZXRlIG1lc3NhZ2VzLiAoZi5leCB0aGlzIHRva2VuIHNob3VsZCBiZSB1c2VkIGZvciBhbiBhbmRyb2lkIGFwcClcbl9fYXBwVG9rZW5fXzogYW4gYXBwbGljYXRpb24gaXMgc29tZXRoaW5nIHRoYXQgc2VuZHMgbWVzc2FnZXMgKGYuZXguIHRoaXMgdG9rZW4gc2hvdWxkIGJlIHVzZWQgZm9yIGEgc2hlbGwgc2NyaXB0KVxuXG5UaGUgdG9rZW4gY2FuIGJlIGVpdGhlciB0cmFuc21pdHRlZCB0aHJvdWdoIGEgaGVhZGVyIG5hbWVkIGBYLUdvdGlmeS1LZXlgIG9yIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGB0b2tlbmAuXG5UaGVyZSBpcyBhbHNvIHRoZSBwb3NzaWJpbGl0eSB0byBhdXRoZW50aWNhdGUgdGhyb3VnaCBiYXNpYyBhdXRoLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgY2xpZW50VG9rZW4uXG5cblxcLS0tXG5cbkZvdW5kIGEgYnVnIG9yIGhhdmUgc29tZSBxdWVzdGlvbnM/IFtDcmVhdGUgYW4gaXNzdWUgb24gR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9pc3N1ZXMpIiwKICAgICJ0aXRsZSI6ICJHb3RpZnkgUkVTVC1BUEkuIiwKICAgICJsaWNlbnNlIjogewogICAgICAibmFtZSI6ICJNSVQiLAogICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UiCiAgICB9LAogICAgInZlcnNpb24iOiAiMS4wLjEiCiAgfSwKICAiaG9zdCI6ICJsb2NhbGhvc3QiLAogICJwYXRocyI6IHsKICAgICIvYXBwbGljYXRpb24iOiB7CiAgICAgICJnZXQiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJSZXR1cm4gYWxsIGFwcGxpY2F0aW9ucy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRBcHBzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9BcHBsaWNhdGlvbiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJDcmVhdGUgYW4gYXBwbGljYXRpb24uIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlQXBwIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBhcHBsaWNhdGlvbiB0byBhZGQiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvQXBwbGljYXRpb24iCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvQXBwbGljYXRpb24iCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvYXBwbGljYXRpb24ve2lkfSI6IHsKICAgICAgImRlbGV0ZSI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkRlbGV0ZSBhbiBhcHBsaWNhdGlvbi4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVBcHAiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2FwcGxpY2F0aW9uL3tpZH0vbWVzc2FnZSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgbWVzc2FnZXMgZnJvbSBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldEFwcE1lc3NhZ2VzIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBhcHBsaWNhdGlvbiBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlIGFsbCBtZXNzYWdlcyBmcm9tIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZGVsZXRlQXBwTWVzc2FnZXMiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2NsaWVudCI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgY2xpZW50cy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRDbGllbnRzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9DbGllbnQiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJwb3N0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiQ3JlYXRlIGEgY2xpZW50LiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImNyZWF0ZUNsaWVudCIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgY2xpZW50IHRvIGFkZCIsCiAgICAgICAgICAgICJuYW1lIjogImJvZHkiLAogICAgICAgICAgICAiaW4iOiAiYm9keSIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9DbGllbnQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvQ2xpZW50IgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2NsaWVudC97aWR9IjogewogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlIGEgY2xpZW50LiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZUNsaWVudCIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgY2xpZW50IGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2N1cnJlbnQvdXNlciI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiB0aGUgY3VycmVudCB1c2VyLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImN1cnJlbnRVc2VyIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY3VycmVudC91c2VyL3Bhc3N3b3JkIjogewogICAgICAicG9zdCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiVXBkYXRlIHRoZSBwYXNzd29yZCBvZiB0aGUgY3VycmVudCB1c2VyLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogInVwZGF0ZUN1cnJlbnRVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSB1c2VyIiwKICAgICAgICAgICAgIm5hbWUiOiAiYm9keSIsCiAgICAgICAgICAgICJpbiI6ICJib2R5IiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL21lc3NhZ2UiOiB7CiAgICAgICJnZXQiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJSZXR1cm4gYWxsIG1lc3NhZ2VzLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldE1lc3NhZ2VzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAicG9zdCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJhcHBUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYXBwVG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiX19OT1RFX186IFRoaXMgQVBJIE9OTFkgYWNjZXB0cyBhbiBhcHBsaWNhdGlvbiB0b2tlbiBhcyBhdXRoZW50aWNhdGlvbi4iLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiQ3JlYXRlIGEgbWVzc2FnZS4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJjcmVhdGVNZXNzYWdlIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBtZXNzYWdlIHRvIGFkZCIsCiAgICAgICAgICAgICJuYW1lIjogImJvZHkiLAogICAgICAgICAgICAiaW4iOiAiYm9keSIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGUgYWxsIG1lc3NhZ2VzLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZU1lc3NhZ2VzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9tZXNzYWdlL3tpZH0iOiB7CiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGVzIGEgbWVzc2FnZSB3aXRoIGFuIGlkLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZU1lc3NhZ2UiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBtZXNzYWdlIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3N0cmVhbSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIldlYnNvY2tldCwgcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbWVzc2FnZXMuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAic3RyZWFtTWVzc2FnZXMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvTWVzc2FnZSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi91c2VyIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCB1c2Vycy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRVc2VycyIsCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkNyZWF0ZSBhIHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlVXNlciIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciB0byBhZGQiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9Vc2VyIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3VzZXIve2lkfSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiR2V0IGEgdXNlci4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlVwZGF0ZSBhIHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAidXBkYXRlVXNlciIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHVzZXIgaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSB1cGRhdGVkIHVzZXIiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9Vc2VyIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInVzZXIiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGVzIGEgdXNlci4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi92ZXJzaW9uIjogewogICAgICAiZ2V0IjogewogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidmVyc2lvbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkdldCB2ZXJzaW9uIGluZm9ybWF0aW9uLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldFZlcnNpb24iLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVmVyc2lvbkluZm8iCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJkZWZpbml0aW9ucyI6IHsKICAgICJBcHBsaWNhdGlvbiI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBBcHBsaWNhdGlvbiBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBhcHAgd2hpY2ggY2FuIHNlbmQgbm90aWZpY2F0aW9ucy4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiQXBwbGljYXRpb24gTW9kZWwiLAogICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgImlkIiwKICAgICAgICAibmFtZSIsCiAgICAgICAgImRlc2NyaXB0aW9uIgogICAgICBdLAogICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAiZGVzY3JpcHRpb24iOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRGVzY3JpcHRpb24iLAogICAgICAgICAgImV4YW1wbGUiOiAiQmFja3VwIHNlcnZlciBmb3IgdGhlIGludGVyd2VicyIKICAgICAgICB9LAogICAgICAgICJpZCI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgYXBwbGljYXRpb24gaWQuIENhbiBiZSB1c2VkIGFzIGBhcHBUb2tlbmAuIFNlZSBBdXRoZW50aWNhdGlvbi4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiSUQiLAogICAgICAgICAgInJlYWRPbmx5IjogdHJ1ZSwKICAgICAgICAgICJleGFtcGxlIjogIkFXSDB3WjVyME1iYWMuciIKICAgICAgICB9LAogICAgICAgICJuYW1lIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBhcHBsaWNhdGlvbiBuYW1lLiBUaGlzIGlzIGhvdyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlci4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJCYWNrdXAgU2VydmVyIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIkNsaWVudCI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBDbGllbnQgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYSBkZXZpY2Ugd2hpY2ggY2FuIHJlY2VpdmUgbm90aWZpY2F0aW9ucyAoYW5kIG90aGVyIHN0dWZmKS4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiQ2xpZW50IE1vZGVsIiwKICAgICAgInJlcXVpcmVkIjogWwogICAgICAgICJpZCIsCiAgICAgICAgIm5hbWUiCiAgICAgIF0sCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJpZCI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgY2xpZW50IGlkLiBDYW4gYmUgdXNlZCBhcyBgY2xpZW50VG9rZW5gLiBTZWUgQXV0aGVudGljYXRpb24uIiwKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIklEIiwKICAgICAgICAgICJyZWFkT25seSI6IHRydWUsCiAgICAgICAgICAiZXhhbXBsZSI6ICJDV0gwd1o1cjBNYmFjLnIiCiAgICAgICAgfSwKICAgICAgICAibmFtZSI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgY2xpZW50IG5hbWUuIFRoaXMgaXMgaG93IHRoZSBjbGllbnQgc2hvdWxkIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlci4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiTmFtZSIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJBbmRyb2lkIFBob25lIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIkVycm9yIjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIEVycm9yIGNvbnRhaW5zIGVycm9yIHJlbGV2YW50IGluZm9ybWF0aW9uLiIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJ0aXRsZSI6ICJFcnJvciBNb2RlbCIsCiAgICAgICJyZXF1aXJlZCI6IFsKICAgICAgICAiZXJyb3IiLAogICAgICAgICJlcnJvckNvZGUiLAogICAgICAgICJlcnJvckRlc2NyaXB0aW9uIgogICAgICBdLAogICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAiZXJyb3IiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGdlbmVyYWwgZXJyb3IgbWVzc2FnZSIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJFcnJvciIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJVbmF1dGhvcml6ZWQiCiAgICAgICAgfSwKICAgICAgICAiZXJyb3JDb2RlIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBodHRwIGVycm9yIGNvZGUuIiwKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkVycm9yQ29kZSIsCiAgICAgICAgICAiZXhhbXBsZSI6IDQwMQogICAgICAgIH0sCiAgICAgICAgImVycm9yRGVzY3JpcHRpb24iOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGh0dHAgZXJyb3IgY29kZS4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRXJyb3JEZXNjcmlwdGlvbiIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJ5b3UgbmVlZCB0byBwcm92aWRlIGEgdmFsaWQgYWNjZXNzIHRva2VuIG9yIHVzZXIgY3JlZGVudGlhbHMgdG8gYWNjZXNzIHRoaXMgYXBpIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIk1lc3NhZ2UiOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgTWVzc2FnZSBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhIG1lc3NhZ2Ugd2hpY2ggd2FzIHNlbnQgYnkgYW4gQXBwbGljYXRpb24uIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInRpdGxlIjogIk1lc3NhZ2UgTW9kZWwiLAogICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgImlkIiwKICAgICAgICAiYXBwaWQiLAogICAgICAgICJtZXNzYWdlIiwKICAgICAgICAidGl0bGUiLAogICAgICAgICJkYXRlIgogICAgICBdLAogICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAiYXBwaWQiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGFwcGxpY2F0aW9uIGlkIHRoYXQgc2VuZCB0aGlzIG1lc3NhZ2UuIiwKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkFwcGxpY2F0aW9uSUQiLAogICAgICAgICAgInJlYWRPbmx5IjogdHJ1ZSwKICAgICAgICAgICJleGFtcGxlIjogIkFXSDB3WjVyME1iYWMuciIKICAgICAgICB9LAogICAgICAgICJkYXRlIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBkYXRlIHRoZSBtZXNzYWdlIHdhcyBjcmVhdGVkLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgImZvcm1hdCI6ICJkYXRlLXRpbWUiLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJEYXRlIiwKICAgICAgICAgICJyZWFkT25seSI6IHRydWUsCiAgICAgICAgICAiZXhhbXBsZSI6ICIyMDE4LTAyLTI3VDE5OjM2OjEwLjUwNDUwNDQrMDE6MDAiCiAgICAgICAgfSwKICAgICAgICAiaWQiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIG1lc3NhZ2UgaWQuIiwKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJ1aW50NjQiLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJJRCIsCiAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlLAogICAgICAgICAgImV4YW1wbGUiOiAyNQogICAgICAgIH0sCiAgICAgICAgIm1lc3NhZ2UiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGFjdHVhbCBtZXNzYWdlLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJNZXNzYWdlIiwKICAgICAgICAgICJleGFtcGxlIjogIkJhY2t1cCB3YXMgc3VjY2Vzc2Z1bGx5IGZpbmlzaGVkLiIKICAgICAgICB9LAogICAgICAgICJwcmlvcml0eSI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJpb3JpdHkgb2YgdGhlIG1lc3NhZ2UuIiwKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIlByaW9yaXR5IiwKICAgICAgICAgICJleGFtcGxlIjogMgogICAgICAgIH0sCiAgICAgICAgInRpdGxlIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSB0aXRsZSBvZiB0aGUgbWVzc2FnZS4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiVGl0bGUiLAogICAgICAgICAgImV4YW1wbGUiOiAiQmFja3VwIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIlVzZXIiOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgVXNlciBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3JlZGVudGlhbHMgYW5kIG90aGVyIHN0dWZmLiIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJ0aXRsZSI6ICJVc2VyRXh0ZXJuYWwgTW9kZWwiLAogICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgImlkIiwKICAgICAgICAibmFtZSIsCiAgICAgICAgInBhc3MiCiAgICAgIF0sCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJhZG1pbiI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiB0aGUgdXNlciBpcyBhbiBhZG1pbmlzdHJhdG9yLiIsCiAgICAgICAgICAidHlwZSI6ICJib29sZWFuIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiQWRtaW4iLAogICAgICAgICAgImV4YW1wbGUiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiaWQiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHVzZXIgaWQuIiwKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJ1aW50NjQiLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJJRCIsCiAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlLAogICAgICAgICAgImV4YW1wbGUiOiAyNQogICAgICAgIH0sCiAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHVzZXIgbmFtZS4gRm9yIGxvZ2luLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJOYW1lIiwKICAgICAgICAgICJleGFtcGxlIjogInVuaWNvcm4iCiAgICAgICAgfSwKICAgICAgICAicGFzcyI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgdXNlciBwYXNzd29yZC4gRm9yIGxvZ2luLiAoV2lsbCBub3QgYmUgcmV0dXJuZWQgYnkgYW55IEFQSSkiLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiUGFzcyIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJteXBhc3N3b3JkOyAhd2lsbCBub3QgYmUgcmV0dXJuZWQgYnkgYW55IEFQSSEiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1uYW1lIjogIlVzZXJFeHRlcm5hbCIsCiAgICAgICJ4LWdvLXBhY2thZ2UiOiAiZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL21vZGVsIgogICAgfSwKICAgICJWZXJzaW9uSW5mbyI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlZlcnNpb25JbmZvIE1vZGVsIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInJlcXVpcmVkIjogWwogICAgICAgICJ2ZXJzaW9uIiwKICAgICAgICAiY29tbWl0IiwKICAgICAgICAiYnVpbGREYXRlIgogICAgICBdLAogICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAiYnVpbGREYXRlIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBkYXRlIG9uIHdoaWNoIHRoaXMgYmluYXJ5IHdhcyBidWlsdC4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiQnVpbGREYXRlIiwKICAgICAgICAgICJleGFtcGxlIjogIjIwMTgtMDItMjdUMTk6MzY6MTAuNTA0NTA0NCswMTowMCIKICAgICAgICB9LAogICAgICAgICJjb21taXQiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGdpdCBjb21taXQgaGFzaCBvbiB3aGljaCB0aGlzIGJpbmFyeSB3YXMgYnVpbHQuIiwKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkNvbW1pdCIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJhZTk1MTJiNmI2ZmVlYTU2YTExMGQ1OWEzMzUzZWEzYjljMjkzODY0IgogICAgICAgIH0sCiAgICAgICAgInZlcnNpb24iOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGN1cnJlbnQgdmVyc2lvbi4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiVmVyc2lvbiIsCiAgICAgICAgICAiZXhhbXBsZSI6ICI1LjIuNiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJ4LWdvLXBhY2thZ2UiOiAiZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL21vZGVsIgogICAgfQogIH0sCiAgInNlY3VyaXR5RGVmaW5pdGlvbnMiOiB7CiAgICAiYXBwVG9rZW5IZWFkZXIiOiB7CiAgICAgICJ0eXBlIjogImFwaUtleSIsCiAgICAgICJuYW1lIjogIlgtR290aWZ5LUtleSIsCiAgICAgICJpbiI6ICJoZWFkZXIiCiAgICB9LAogICAgImFwcFRva2VuUXVlcnkiOiB7CiAgICAgICJ0eXBlIjogImFwaUtleSIsCiAgICAgICJuYW1lIjogInRva2VuIiwKICAgICAgImluIjogInF1ZXJ5IgogICAgfSwKICAgICJiYXNpY0F1dGgiOiB7CiAgICAgICJ0eXBlIjogImJhc2ljIgogICAgfSwKICAgICJjbGllbnRUb2tlbkhlYWRlciI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAiWC1Hb3RpZnktS2V5IiwKICAgICAgImluIjogImhlYWRlciIKICAgIH0sCiAgICAiY2xpZW50VG9rZW5RdWVyeSI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAidG9rZW4iLAogICAgICAiaW4iOiAicXVlcnkiCiAgICB9CiAgfQp9\"") + packr.PackJSONBytes("./", "spec.json", "\"ewogICJjb25zdW1lcyI6IFsKICAgICJhcHBsaWNhdGlvbi9qc29uIgogIF0sCiAgInByb2R1Y2VzIjogWwogICAgImFwcGxpY2F0aW9uL2pzb24iCiAgXSwKICAic2NoZW1lcyI6IFsKICAgICJodHRwIiwKICAgICJodHRwcyIKICBdLAogICJzd2FnZ2VyIjogIjIuMCIsCiAgImluZm8iOiB7CiAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgR290aWZ5IFJFU1QtQVBJLlxuXG4jIEF1dGhlbnRpY2F0aW9uXG5JbiBHb3RpZnkgdGhlcmUgYXJlIHR3byB0b2tlbiB0eXBlczpcbl9fY2xpZW50VG9rZW5fXzogYSBjbGllbnQgaXMgc29tZXRoaW5nIHRoYXQgcmVjZWl2ZXMgbWVzc2FnZSBhbmQgbWFuYWdlcyBzdHVmZiBsaWtlIGNyZWF0aW5nIG5ldyB0b2tlbnMgb3IgZGVsZXRlIG1lc3NhZ2VzLiAoZi5leCB0aGlzIHRva2VuIHNob3VsZCBiZSB1c2VkIGZvciBhbiBhbmRyb2lkIGFwcClcbl9fYXBwVG9rZW5fXzogYW4gYXBwbGljYXRpb24gaXMgc29tZXRoaW5nIHRoYXQgc2VuZHMgbWVzc2FnZXMgKGYuZXguIHRoaXMgdG9rZW4gc2hvdWxkIGJlIHVzZWQgZm9yIGEgc2hlbGwgc2NyaXB0KVxuXG5UaGUgdG9rZW4gY2FuIGJlIGVpdGhlciB0cmFuc21pdHRlZCB0aHJvdWdoIGEgaGVhZGVyIG5hbWVkIGBYLUdvdGlmeS1LZXlgIG9yIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGB0b2tlbmAuXG5UaGVyZSBpcyBhbHNvIHRoZSBwb3NzaWJpbGl0eSB0byBhdXRoZW50aWNhdGUgdGhyb3VnaCBiYXNpYyBhdXRoLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgY2xpZW50VG9rZW4uXG5cblxcLS0tXG5cbkZvdW5kIGEgYnVnIG9yIGhhdmUgc29tZSBxdWVzdGlvbnM/IFtDcmVhdGUgYW4gaXNzdWUgb24gR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9pc3N1ZXMpIiwKICAgICJ0aXRsZSI6ICJHb3RpZnkgUkVTVC1BUEkuIiwKICAgICJsaWNlbnNlIjogewogICAgICAibmFtZSI6ICJNSVQiLAogICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UiCiAgICB9LAogICAgInZlcnNpb24iOiAiMS4wLjEiCiAgfSwKICAiaG9zdCI6ICJsb2NhbGhvc3QiLAogICJwYXRocyI6IHsKICAgICIvYXBwbGljYXRpb24iOiB7CiAgICAgICJnZXQiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJSZXR1cm4gYWxsIGFwcGxpY2F0aW9ucy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRBcHBzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9BcHBsaWNhdGlvbiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJDcmVhdGUgYW4gYXBwbGljYXRpb24uIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlQXBwIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBhcHBsaWNhdGlvbiB0byBhZGQiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvQXBwbGljYXRpb24iCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvQXBwbGljYXRpb24iCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvYXBwbGljYXRpb24ve2lkfSI6IHsKICAgICAgImRlbGV0ZSI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkRlbGV0ZSBhbiBhcHBsaWNhdGlvbi4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVBcHAiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2FwcGxpY2F0aW9uL3tpZH0vbWVzc2FnZSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgbWVzc2FnZXMgZnJvbSBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldEFwcE1lc3NhZ2VzIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBhcHBsaWNhdGlvbiBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlIGFsbCBtZXNzYWdlcyBmcm9tIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZGVsZXRlQXBwTWVzc2FnZXMiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2NsaWVudCI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgY2xpZW50cy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRDbGllbnRzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9DbGllbnQiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJwb3N0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiQ3JlYXRlIGEgY2xpZW50LiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImNyZWF0ZUNsaWVudCIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgY2xpZW50IHRvIGFkZCIsCiAgICAgICAgICAgICJuYW1lIjogImJvZHkiLAogICAgICAgICAgICAiaW4iOiAiYm9keSIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9DbGllbnQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvQ2xpZW50IgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2NsaWVudC97aWR9IjogewogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlIGEgY2xpZW50LiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZUNsaWVudCIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgY2xpZW50IGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL2N1cnJlbnQvdXNlciI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiB0aGUgY3VycmVudCB1c2VyLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImN1cnJlbnRVc2VyIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY3VycmVudC91c2VyL3Bhc3N3b3JkIjogewogICAgICAicG9zdCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiVXBkYXRlIHRoZSBwYXNzd29yZCBvZiB0aGUgY3VycmVudCB1c2VyLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogInVwZGF0ZUN1cnJlbnRVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSB1c2VyIiwKICAgICAgICAgICAgIm5hbWUiOiAiYm9keSIsCiAgICAgICAgICAgICJpbiI6ICJib2R5IiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXJQYXNzIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9tZXNzYWdlIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCBtZXNzYWdlcy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRNZXNzYWdlcyIsCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvTWVzc2FnZSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiYXBwVG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImFwcFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIl9fTk9URV9fOiBUaGlzIEFQSSBPTkxZIGFjY2VwdHMgYW4gYXBwbGljYXRpb24gdG9rZW4gYXMgYXV0aGVudGljYXRpb24uIiwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkNyZWF0ZSBhIG1lc3NhZ2UuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlTWVzc2FnZSIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgbWVzc2FnZSB0byBhZGQiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvTWVzc2FnZSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvTWVzc2FnZSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlIGFsbCBtZXNzYWdlcy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVNZXNzYWdlcyIsCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvbWVzc2FnZS97aWR9IjogewogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlcyBhIG1lc3NhZ2Ugd2l0aCBhbiBpZC4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVNZXNzYWdlIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgbWVzc2FnZSBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9zdHJlYW0iOiB7CiAgICAgICJnZXQiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJXZWJzb2NrZXQsIHJldHVybiBuZXdseSBjcmVhdGVkIG1lc3NhZ2VzLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogInN0cmVhbU1lc3NhZ2VzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL01lc3NhZ2UiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvdXNlciI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgdXNlcnMuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZ2V0VXNlcnMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJwb3N0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInVzZXIiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJDcmVhdGUgYSB1c2VyLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImNyZWF0ZVVzZXIiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHVzZXIgdG8gYWRkIiwKICAgICAgICAgICAgIm5hbWUiOiAiYm9keSIsCiAgICAgICAgICAgICJpbiI6ICJib2R5IiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXJXaXRoUGFzcyIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9Vc2VyIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3VzZXIve2lkfSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiR2V0IGEgdXNlci4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlVwZGF0ZSBhIHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAidXBkYXRlVXNlciIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHVzZXIgaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSB1cGRhdGVkIHVzZXIiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlcldpdGhQYXNzIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgImRlbGV0ZSI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkRlbGV0ZXMgYSB1c2VyLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZVVzZXIiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSB1c2VyIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3ZlcnNpb24iOiB7CiAgICAgICJnZXQiOiB7CiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ2ZXJzaW9uIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiR2V0IHZlcnNpb24gaW5mb3JtYXRpb24uIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZ2V0VmVyc2lvbiIsCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9WZXJzaW9uSW5mbyIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImRlZmluaXRpb25zIjogewogICAgIkFwcGxpY2F0aW9uIjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIEFwcGxpY2F0aW9uIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGFuIGFwcCB3aGljaCBjYW4gc2VuZCBub3RpZmljYXRpb25zLiIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJ0aXRsZSI6ICJBcHBsaWNhdGlvbiBNb2RlbCIsCiAgICAgICJyZXF1aXJlZCI6IFsKICAgICAgICAiaWQiLAogICAgICAgICJuYW1lIiwKICAgICAgICAiZGVzY3JpcHRpb24iCiAgICAgIF0sCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJkZXNjcmlwdGlvbiI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJEZXNjcmlwdGlvbiIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJCYWNrdXAgc2VydmVyIGZvciB0aGUgaW50ZXJ3ZWJzIgogICAgICAgIH0sCiAgICAgICAgImlkIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBhcHBsaWNhdGlvbiBpZC4gQ2FuIGJlIHVzZWQgYXMgYGFwcFRva2VuYC4gU2VlIEF1dGhlbnRpY2F0aW9uLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJJRCIsCiAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlLAogICAgICAgICAgImV4YW1wbGUiOiAiQVdIMHdaNXIwTWJhYy5yIgogICAgICAgIH0sCiAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGFwcGxpY2F0aW9uIG5hbWUuIFRoaXMgaXMgaG93IHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJOYW1lIiwKICAgICAgICAgICJleGFtcGxlIjogIkJhY2t1cCBTZXJ2ZXIiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1wYWNrYWdlIjogImdpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9tb2RlbCIKICAgIH0sCiAgICAiQ2xpZW50IjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIENsaWVudCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhIGRldmljZSB3aGljaCBjYW4gcmVjZWl2ZSBub3RpZmljYXRpb25zIChhbmQgb3RoZXIgc3R1ZmYpLiIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJ0aXRsZSI6ICJDbGllbnQgTW9kZWwiLAogICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgImlkIiwKICAgICAgICAibmFtZSIKICAgICAgXSwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImlkIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBjbGllbnQgaWQuIENhbiBiZSB1c2VkIGFzIGBjbGllbnRUb2tlbmAuIFNlZSBBdXRoZW50aWNhdGlvbi4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiSUQiLAogICAgICAgICAgInJlYWRPbmx5IjogdHJ1ZSwKICAgICAgICAgICJleGFtcGxlIjogIkNXSDB3WjVyME1iYWMuciIKICAgICAgICB9LAogICAgICAgICJuYW1lIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBjbGllbnQgbmFtZS4gVGhpcyBpcyBob3cgdGhlIGNsaWVudCBzaG91bGQgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJOYW1lIiwKICAgICAgICAgICJleGFtcGxlIjogIkFuZHJvaWQgUGhvbmUiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1wYWNrYWdlIjogImdpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9tb2RlbCIKICAgIH0sCiAgICAiRXJyb3IiOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgRXJyb3IgY29udGFpbnMgZXJyb3IgcmVsZXZhbnQgaW5mb3JtYXRpb24uIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInRpdGxlIjogIkVycm9yIE1vZGVsIiwKICAgICAgInJlcXVpcmVkIjogWwogICAgICAgICJlcnJvciIsCiAgICAgICAgImVycm9yQ29kZSIsCiAgICAgICAgImVycm9yRGVzY3JpcHRpb24iCiAgICAgIF0sCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJlcnJvciI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgZ2VuZXJhbCBlcnJvciBtZXNzYWdlIiwKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkVycm9yIiwKICAgICAgICAgICJleGFtcGxlIjogIlVuYXV0aG9yaXplZCIKICAgICAgICB9LAogICAgICAgICJlcnJvckNvZGUiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGh0dHAgZXJyb3IgY29kZS4iLAogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogImludDY0IiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRXJyb3JDb2RlIiwKICAgICAgICAgICJleGFtcGxlIjogNDAxCiAgICAgICAgfSwKICAgICAgICAiZXJyb3JEZXNjcmlwdGlvbiI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgaHR0cCBlcnJvciBjb2RlLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJFcnJvckRlc2NyaXB0aW9uIiwKICAgICAgICAgICJleGFtcGxlIjogInlvdSBuZWVkIHRvIHByb3ZpZGUgYSB2YWxpZCBhY2Nlc3MgdG9rZW4gb3IgdXNlciBjcmVkZW50aWFscyB0byBhY2Nlc3MgdGhpcyBhcGkiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1wYWNrYWdlIjogImdpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9tb2RlbCIKICAgIH0sCiAgICAiTWVzc2FnZSI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBNZXNzYWdlIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGEgbWVzc2FnZSB3aGljaCB3YXMgc2VudCBieSBhbiBBcHBsaWNhdGlvbi4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiTWVzc2FnZSBNb2RlbCIsCiAgICAgICJyZXF1aXJlZCI6IFsKICAgICAgICAiaWQiLAogICAgICAgICJhcHBpZCIsCiAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICJ0aXRsZSIsCiAgICAgICAgImRhdGUiCiAgICAgIF0sCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJhcHBpZCI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgYXBwbGljYXRpb24gaWQgdGhhdCBzZW5kIHRoaXMgbWVzc2FnZS4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiQXBwbGljYXRpb25JRCIsCiAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlLAogICAgICAgICAgImV4YW1wbGUiOiAiQVdIMHdaNXIwTWJhYy5yIgogICAgICAgIH0sCiAgICAgICAgImRhdGUiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGRhdGUgdGhlIG1lc3NhZ2Ugd2FzIGNyZWF0ZWQuIiwKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAiZm9ybWF0IjogImRhdGUtdGltZSIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkRhdGUiLAogICAgICAgICAgInJlYWRPbmx5IjogdHJ1ZSwKICAgICAgICAgICJleGFtcGxlIjogIjIwMTgtMDItMjdUMTk6MzY6MTAuNTA0NTA0NCswMTowMCIKICAgICAgICB9LAogICAgICAgICJpZCI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgbWVzc2FnZSBpZC4iLAogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogInVpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIklEIiwKICAgICAgICAgICJyZWFkT25seSI6IHRydWUsCiAgICAgICAgICAiZXhhbXBsZSI6IDI1CiAgICAgICAgfSwKICAgICAgICAibWVzc2FnZSI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgYWN0dWFsIG1lc3NhZ2UuIiwKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIk1lc3NhZ2UiLAogICAgICAgICAgImV4YW1wbGUiOiAiQmFja3VwIHdhcyBzdWNjZXNzZnVsbHkgZmluaXNoZWQuIgogICAgICAgIH0sCiAgICAgICAgInByaW9yaXR5IjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBwcmlvcml0eSBvZiB0aGUgbWVzc2FnZS4iLAogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogImludDY0IiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiUHJpb3JpdHkiLAogICAgICAgICAgImV4YW1wbGUiOiAyCiAgICAgICAgfSwKICAgICAgICAidGl0bGUiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHRpdGxlIG9mIHRoZSBtZXNzYWdlLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJUaXRsZSIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJCYWNrdXAiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1wYWNrYWdlIjogImdpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9tb2RlbCIKICAgIH0sCiAgICAiVXNlciI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBVc2VyIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHBlcm1pc3Npb24gYW5kIG90aGVyIHN0dWZmLiIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJ0aXRsZSI6ICJVc2VyRXh0ZXJuYWwgTW9kZWwiLAogICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgImlkIiwKICAgICAgICAibmFtZSIKICAgICAgXSwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImFkbWluIjogewogICAgICAgICAgImRlc2NyaXB0aW9uIjogIklmIHRoZSB1c2VyIGlzIGFuIGFkbWluaXN0cmF0b3IuIiwKICAgICAgICAgICJ0eXBlIjogImJvb2xlYW4iLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJBZG1pbiIsCiAgICAgICAgICAiZXhhbXBsZSI6IHRydWUKICAgICAgICB9LAogICAgICAgICJpZCI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgdXNlciBpZC4iLAogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogInVpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIklEIiwKICAgICAgICAgICJyZWFkT25seSI6IHRydWUsCiAgICAgICAgICAiZXhhbXBsZSI6IDI1CiAgICAgICAgfSwKICAgICAgICAibmFtZSI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgdXNlciBuYW1lLiBGb3IgbG9naW4uIiwKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIk5hbWUiLAogICAgICAgICAgImV4YW1wbGUiOiAidW5pY29ybiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJ4LWdvLW5hbWUiOiAiVXNlckV4dGVybmFsIiwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIlVzZXJQYXNzIjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIFBhc3N3b3JkIGZvciB1cGRhdGluZyB0aGUgdXNlci4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiVXNlckV4dGVybmFsUGFzcyBNb2RlbCIsCiAgICAgICJyZXF1aXJlZCI6IFsKICAgICAgICAicGFzcyIKICAgICAgXSwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgInBhc3MiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHVzZXIgcGFzc3dvcmQuIEZvciBsb2dpbi4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiUGFzcyIsCiAgICAgICAgICAiZXhhbXBsZSI6ICJucm9jaW51IgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tbmFtZSI6ICJVc2VyRXh0ZXJuYWxQYXNzIiwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIlVzZXJXaXRoUGFzcyI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBVc2VyV2l0aFBhc3MgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNyZWRlbnRpYWxzIGFuZCBvdGhlciBzdHVmZi4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiVXNlckV4dGVybmFsV2l0aFBhc3MgTW9kZWwiLAogICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgImlkIiwKICAgICAgICAibmFtZSIsCiAgICAgICAgInBhc3MiCiAgICAgIF0sCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJhZG1pbiI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiB0aGUgdXNlciBpcyBhbiBhZG1pbmlzdHJhdG9yLiIsCiAgICAgICAgICAidHlwZSI6ICJib29sZWFuIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiQWRtaW4iLAogICAgICAgICAgImV4YW1wbGUiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiaWQiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHVzZXIgaWQuIiwKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJ1aW50NjQiLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJJRCIsCiAgICAgICAgICAicmVhZE9ubHkiOiB0cnVlLAogICAgICAgICAgImV4YW1wbGUiOiAyNQogICAgICAgIH0sCiAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHVzZXIgbmFtZS4gRm9yIGxvZ2luLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJOYW1lIiwKICAgICAgICAgICJleGFtcGxlIjogInVuaWNvcm4iCiAgICAgICAgfSwKICAgICAgICAicGFzcyI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgdXNlciBwYXNzd29yZC4gRm9yIGxvZ2luLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJQYXNzIiwKICAgICAgICAgICJleGFtcGxlIjogIm5yb2NpbnUiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1uYW1lIjogIlVzZXJFeHRlcm5hbFdpdGhQYXNzIiwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIlZlcnNpb25JbmZvIjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVmVyc2lvbkluZm8gTW9kZWwiLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgInZlcnNpb24iLAogICAgICAgICJjb21taXQiLAogICAgICAgICJidWlsZERhdGUiCiAgICAgIF0sCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJidWlsZERhdGUiOiB7CiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGRhdGUgb24gd2hpY2ggdGhpcyBiaW5hcnkgd2FzIGJ1aWx0LiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJCdWlsZERhdGUiLAogICAgICAgICAgImV4YW1wbGUiOiAiMjAxOC0wMi0yN1QxOTozNjoxMC41MDQ1MDQ0KzAxOjAwIgogICAgICAgIH0sCiAgICAgICAgImNvbW1pdCI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgZ2l0IGNvbW1pdCBoYXNoIG9uIHdoaWNoIHRoaXMgYmluYXJ5IHdhcyBidWlsdC4iLAogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiQ29tbWl0IiwKICAgICAgICAgICJleGFtcGxlIjogImFlOTUxMmI2YjZmZWVhNTZhMTEwZDU5YTMzNTNlYTNiOWMyOTM4NjQiCiAgICAgICAgfSwKICAgICAgICAidmVyc2lvbiI6IHsKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgY3VycmVudCB2ZXJzaW9uLiIsCiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJWZXJzaW9uIiwKICAgICAgICAgICJleGFtcGxlIjogIjUuMi42IgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9CiAgfSwKICAic2VjdXJpdHlEZWZpbml0aW9ucyI6IHsKICAgICJhcHBUb2tlbkhlYWRlciI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAiWC1Hb3RpZnktS2V5IiwKICAgICAgImluIjogImhlYWRlciIKICAgIH0sCiAgICAiYXBwVG9rZW5RdWVyeSI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAidG9rZW4iLAogICAgICAiaW4iOiAicXVlcnkiCiAgICB9LAogICAgImJhc2ljQXV0aCI6IHsKICAgICAgInR5cGUiOiAiYmFzaWMiCiAgICB9LAogICAgImNsaWVudFRva2VuSGVhZGVyIjogewogICAgICAidHlwZSI6ICJhcGlLZXkiLAogICAgICAibmFtZSI6ICJYLUdvdGlmeS1LZXkiLAogICAgICAiaW4iOiAiaGVhZGVyIgogICAgfSwKICAgICJjbGllbnRUb2tlblF1ZXJ5IjogewogICAgICAidHlwZSI6ICJhcGlLZXkiLAogICAgICAibmFtZSI6ICJ0b2tlbiIsCiAgICAgICJpbiI6ICJxdWVyeSIKICAgIH0KICB9Cn0=\"") packr.PackJSONBytes("./", "swagger.go", "\"cGFja2FnZSBkb2NzDQoNCmltcG9ydCAoDQoJImdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbiINCgkiZ2l0aHViLmNvbS9nb2J1ZmZhbG8vcGFja3IiDQoJInN0cmluZ3MiDQopDQoNCi8vIFNlcnZlIHNlcnZlcyB0aGUgZG9jdW1lbnRhdGlvbi4NCmZ1bmMgU2VydmUoY3R4ICpnaW4uQ29udGV4dCkgew0KCWN0eC5Xcml0ZXIuV3JpdGVTdHJpbmcoZ2V0KGN0eC5SZXF1ZXN0LlVSTC5Ib3N0KSkNCn0NCg0KZnVuYyBnZXQoaG9zdCBzdHJpbmcpIHN0cmluZyB7DQoJYm94IDo9IHBhY2tyLk5ld0JveCgiLi8iKQ0KCXJldHVybiBzdHJpbmdzLlJlcGxhY2UoYm94LlN0cmluZygic3BlYy5qc29uIiksICJsb2NhbGhvc3QiLCBob3N0LCAxKQ0KfQ0K\"") packr.PackJSONBytes("./", "swagger_test.go", "\"cGFja2FnZSBkb2NzCgppbXBvcnQgKAoJInRlc3RpbmciCgkiZ2l0aHViLmNvbS9naW4tZ29uaWMvZ2luIgoJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCgkibmV0L2h0dHAvaHR0cHRlc3QiCgkiaW8vaW91dGlsIgopCgpmdW5jIFRlc3RTZXJ2ZSh0ICp0ZXN0aW5nLlQpIHsKCWdpbi5TZXRNb2RlKGdpbi5UZXN0TW9kZSkKCXJlY29yZGVyIDo9IGh0dHB0ZXN0Lk5ld1JlY29yZGVyKCkKCWN0eCwgXyA6PSBnaW4uQ3JlYXRlVGVzdENvbnRleHQocmVjb3JkZXIpCgljdHguUmVxdWVzdCA9IGh0dHB0ZXN0Lk5ld1JlcXVlc3QoIkdFVCIsICIvc3dhZ2dlciIsIG5pbCkKCWN0eC5SZXF1ZXN0LlVSTC5Ib3N0ID0gImxvY2FsaG9zdCIKCglTZXJ2ZShjdHgpCgoJYWN0dWFsRmlsZUNvbnRlbnQgOj0gZ2V0QWN0dWFsU3BlY0ZpbGVDb250ZW50KHQpCglwYWNrckZpbGVDb250ZW50IDo9IHJlY29yZGVyLkJvZHkuU3RyaW5nKCkKCWFzc2VydC5KU09ORXEodCwgcGFja3JGaWxlQ29udGVudCwgYWN0dWFsRmlsZUNvbnRlbnQsICJwYWNrciBhbmQgc3BlYyBmaWxlIGFyZSBvdXQgb2Ygc3luYyIpCn0KCmZ1bmMgZ2V0QWN0dWFsU3BlY0ZpbGVDb250ZW50KHQgKnRlc3RpbmcuVCkgc3RyaW5nIHsKCWJ5dGVzLCBlcnIgOj0gaW91dGlsLlJlYWRGaWxlKCJzcGVjLmpzb24iKQoJYXNzZXJ0Lk5pbCh0LCBlcnIpCglyZXR1cm4gc3RyaW5nKGJ5dGVzKQp9\"") } diff --git a/docs/spec.json b/docs/spec.json index e611114..892b3bb 100644 --- a/docs/spec.json +++ b/docs/spec.json @@ -509,7 +509,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/UserPass" } } ], @@ -833,7 +833,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/UserWithPass" } } ], @@ -950,7 +950,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/UserWithPass" } } ], @@ -1192,9 +1192,60 @@ "x-go-package": "github.com/gotify/server/model" }, "User": { - "description": "The User holds information about the credentials and other stuff.", + "description": "The User holds information about permission and other stuff.", "type": "object", "title": "UserExternal Model", + "required": [ + "id", + "name" + ], + "properties": { + "admin": { + "description": "If the user is an administrator.", + "type": "boolean", + "x-go-name": "Admin", + "example": true + }, + "id": { + "description": "The user id.", + "type": "integer", + "format": "uint64", + "x-go-name": "ID", + "readOnly": true, + "example": 25 + }, + "name": { + "description": "The user name. For login.", + "type": "string", + "x-go-name": "Name", + "example": "unicorn" + } + }, + "x-go-name": "UserExternal", + "x-go-package": "github.com/gotify/server/model" + }, + "UserPass": { + "description": "The Password for updating the user.", + "type": "object", + "title": "UserExternalPass Model", + "required": [ + "pass" + ], + "properties": { + "pass": { + "description": "The user password. For login.", + "type": "string", + "x-go-name": "Pass", + "example": "nrocinu" + } + }, + "x-go-name": "UserExternalPass", + "x-go-package": "github.com/gotify/server/model" + }, + "UserWithPass": { + "description": "The UserWithPass holds information about the credentials and other stuff.", + "type": "object", + "title": "UserExternalWithPass Model", "required": [ "id", "name", @@ -1222,13 +1273,13 @@ "example": "unicorn" }, "pass": { - "description": "The user password. For login. (Will not be returned by any API)", + "description": "The user password. For login.", "type": "string", "x-go-name": "Pass", - "example": "mypassword; !will not be returned by any API!" + "example": "nrocinu" } }, - "x-go-name": "UserExternal", + "x-go-name": "UserExternalWithPass", "x-go-package": "github.com/gotify/server/model" }, "VersionInfo": { diff --git a/model/user.go b/model/user.go index 9cbc844..2da823e 100644 --- a/model/user.go +++ b/model/user.go @@ -12,7 +12,7 @@ type User struct { // UserExternal Model // -// The User holds information about the credentials and other stuff. +// The User holds information about permission and other stuff. // // swagger:model User type UserExternal struct { @@ -21,19 +21,37 @@ type UserExternal struct { // read only: true // required: true // example: 25 - ID uint `json:"id"` + ID uint `json:"id"` // The user name. For login. // // required: true // example: unicorn - Name string `binding:"required" json:"name" query:"name" form:"name"` - // The user password. For login. (Will not be returned by any API) - // - // required: true - // example: mypassword; !will not be returned by any API! - Pass string `json:"pass,omitempty" form:"pass" query:"pass"` + Name string `binding:"required" json:"name" query:"name" form:"name"` // If the user is an administrator. // // example: true - Admin bool `json:"admin" form:"admin" query:"admin"` + Admin bool `json:"admin" form:"admin" query:"admin"` +} + +// UserExternalWithPass Model +// +// The UserWithPass holds information about the credentials and other stuff. +// +// swagger:model UserWithPass +type UserExternalWithPass struct { + UserExternal + UserExternalPass +} + +// UserExternalPass Model +// +// The Password for updating the user. +// +// swagger:model UserPass +type UserExternalPass struct { + // The user password. For login. + // + // required: true + // example: nrocinu + Pass string `json:"pass,omitempty" form:"pass" query:"pass" binding:"required"` } diff --git a/router/router.go b/router/router.go index f495424..50f1e3a 100644 --- a/router/router.go +++ b/router/router.go @@ -515,7 +515,7 @@ func Create(db *database.GormDatabase, vInfo *model.VersionInfo, conf *config.Co // description: the user // required: true // schema: - // $ref: "#/definitions/User" + // $ref: "#/definitions/UserPass" // responses: // 200: // description: Ok @@ -581,7 +581,7 @@ func Create(db *database.GormDatabase, vInfo *model.VersionInfo, conf *config.Co // description: the user to add // required: true // schema: - // $ref: "#/definitions/User" + // $ref: "#/definitions/UserWithPass" // responses: // 200: // description: Ok @@ -685,7 +685,7 @@ func Create(db *database.GormDatabase, vInfo *model.VersionInfo, conf *config.Co // description: the updated user // required: true // schema: - // $ref: "#/definitions/User" + // $ref: "#/definitions/UserWithPass" // responses: // 200: // description: Ok