diff --git a/docs/openapiv2/apidocs.swagger.json b/docs/openapiv2/apidocs.swagger.json index 9a9de08f..2153c00a 100644 --- a/docs/openapiv2/apidocs.swagger.json +++ b/docs/openapiv2/apidocs.swagger.json @@ -1039,8 +1039,8 @@ }, "/stores/{store_id}/list-users": { "post": { - "summary": "[EXPERIMENTAL] List the users matching the provided filter who have a certain relation to a particular type.", - "description": "The ListUsers API returns a list of all the users of a specific type that have a relation to a given object.\n This API is available in an experimental capacity and can be enabled with the `--experimentals enable-list-users` flag. \nTo arrive at a result, the API uses: an authorization model, explicit tuples written through the Write API, contextual tuples present in the request, and implicit tuples that exist by virtue of applying set theory (such as `document:2021-budget#viewer@document:2021-budget#viewer`; the set of users who are viewers of `document:2021-budget` are the set of users who are the viewers of `document:2021-budget`).\nAn `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance.\nYou may also specify `contextual_tuples` that will be treated as regular tuples. Each of these tuples may have an associated `condition`.\nYou may also provide a `context` object that will be used to evaluate the conditioned tuples in the system. It is strongly recommended to provide a value for all the input parameters of all the conditions, to ensure that all tuples be evaluated correctly.\nThe response will contain the related users in an array in the \"users\" field of the response. These results may include specific objects, usersets \nor type-bound public access. Each of these types of results is encoded in its own type and not represented as a string.In cases where a type-bound public acces result is returned (e.g. `user:*`), it cannot be inferred that all subjects\nof that type have a relation to the object; it is possible that negations exist and checks should still be queried\non individual subjects to ensure access to that document.The number of users in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_USERS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_USERS_MAX_RESULTS, whichever is hit first.\nThe returned users will not be sorted, and therefore two identical calls may yield different sets of users.", + "summary": "List the users matching the provided filter who have a certain relation to a particular type.", + "description": "The ListUsers API returns a list of all the users of a specific type that have a relation to a given object.\n To arrive at a result, the API uses: an authorization model, explicit tuples written through the Write API, contextual tuples present in the request, and implicit tuples that exist by virtue of applying set theory (such as `document:2021-budget#viewer@document:2021-budget#viewer`; the set of users who are viewers of `document:2021-budget` are the set of users who are the viewers of `document:2021-budget`).\nAn `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance.\nYou may also specify `contextual_tuples` that will be treated as regular tuples. Each of these tuples may have an associated `condition`.\nYou may also provide a `context` object that will be used to evaluate the conditioned tuples in the system. It is strongly recommended to provide a value for all the input parameters of all the conditions, to ensure that all tuples be evaluated correctly.\nThe response will contain the related users in an array in the \"users\" field of the response. These results may include specific objects, usersets \nor type-bound public access. Each of these types of results is encoded in its own type and not represented as a string.In cases where a type-bound public acces result is returned (e.g. `user:*`), it cannot be inferred that all subjects\nof that type have a relation to the object; it is possible that negations exist and checks should still be queried\non individual subjects to ensure access to that document.The number of users in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_USERS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_USERS_MAX_RESULTS, whichever is hit first.\nThe returned users will not be sorted, and therefore two identical calls may yield different sets of users.", "operationId": "ListUsers", "responses": { "200": { diff --git a/openfga/v1/authzmodel.proto b/openfga/v1/authzmodel.proto index 708ecc2c..67fcf450 100644 --- a/openfga/v1/authzmodel.proto +++ b/openfga/v1/authzmodel.proto @@ -10,7 +10,7 @@ message AuthorizationModel { string id = 1 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$", + pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$" ignore_empty: false }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} @@ -19,7 +19,7 @@ message AuthorizationModel { string schema_version = 2 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[1-9].[1-9]$", + pattern: "^[1-9].[1-9]$" ignore_empty: false }, json_name = "schema_version" @@ -35,7 +35,7 @@ message AuthorizationModel { json_name = "conditions", (validate.rules).map.max_pairs = 25, (validate.rules).map.keys.string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: false } ]; @@ -44,7 +44,7 @@ message AuthorizationModel { message TypeDefinition { string type = 1 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,254}$", + pattern: "^[^:#@\\s]{1,254}$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -64,7 +64,7 @@ message TypeDefinition { message Relation { string name = 1 [(validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: false }]; @@ -84,7 +84,7 @@ message Metadata { map relations = 1; string module = 2 [(validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }]; @@ -93,7 +93,7 @@ message Metadata { message SourceInfo { string file = 1 [(validate.rules).string = { - pattern: "^[a-zA-Z0-9_\\-\\/]{1,100}\\.fga$", + pattern: "^[a-zA-Z0-9_\\-\\/]{1,100}\\.fga$" ignore_empty: true }]; } @@ -102,7 +102,7 @@ message RelationMetadata { repeated RelationReference directly_related_user_types = 1 [json_name = "directly_related_user_types"]; string module = 2 [(validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }]; @@ -113,7 +113,7 @@ message RelationMetadata { message RelationReference { string type = 1 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,254}$", + pattern: "^[^:#@\\s]{1,254}$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -123,7 +123,7 @@ message RelationReference { oneof relation_or_wildcard { string relation = 2 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"member\""} @@ -134,7 +134,7 @@ message RelationReference { // The name of a condition that is enforced over the allowed relation. string condition = 4 [(validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }]; } @@ -181,7 +181,7 @@ message ComputedUserset { string relation = 1 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - max_bytes: 50, + max_bytes: 50 ignore_empty: false } ]; @@ -204,7 +204,7 @@ message Condition { string name = 1 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: false } ]; @@ -213,7 +213,7 @@ message Condition { string expression = 2 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - max_bytes: 512, + max_bytes: 512 ignore_empty: false } ]; @@ -229,7 +229,7 @@ message Condition { message ConditionMetadata { string module = 1 [(validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }]; diff --git a/openfga/v1/openapi.proto b/openfga/v1/openapi.proto index 4a1bb53f..db19ed1c 100644 --- a/openfga/v1/openapi.proto +++ b/openfga/v1/openapi.proto @@ -6,22 +6,22 @@ import "protoc-gen-openapiv2/options/annotations.proto"; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { info: { - title: "OpenFGA"; - description: "A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar."; - version: "1.x"; + title: "OpenFGA" + description: "A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar." + version: "1.x" contact: { - name: "OpenFGA"; - email: "community@openfga.dev"; - url: "https://openfga.dev"; - }; + name: "OpenFGA" + email: "community@openfga.dev" + url: "https://openfga.dev" + } license: { - name: "Apache-2.0"; - url: "https://github.com/openfga/openfga/blob/main/LICENSE"; - }; - }; - consumes: "application/json"; - produces: "application/json"; - schemes: HTTPS; + name: "Apache-2.0" + url: "https://github.com/openfga/openfga/blob/main/LICENSE" + } + } + consumes: "application/json" + produces: "application/json" + schemes: HTTPS responses: { key: "400" value: { diff --git a/openfga/v1/openfga.proto b/openfga/v1/openfga.proto index 8add6dc2..0180fb4e 100644 --- a/openfga/v1/openfga.proto +++ b/openfga/v1/openfga.proto @@ -16,7 +16,7 @@ import "validate/validate.proto"; message Object { string type = 1 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,254}$", + pattern: "^[^:#@\\s]{1,254}$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -25,7 +25,7 @@ message Object { string id = 2 [ (validate.rules).string = { - pattern: "[^#:\\s]+$", + pattern: "[^#:\\s]+$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -59,7 +59,7 @@ message User { message UsersetUser { string type = 1 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,254}$", + pattern: "^[^:#@\\s]{1,254}$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -68,7 +68,7 @@ message UsersetUser { string id = 2 [ (validate.rules).string = { - pattern: "[^#:\\s]+$", + pattern: "[^#:\\s]+$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -77,7 +77,7 @@ message UsersetUser { string relation = 3 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }, (google.api.field_behavior) = REQUIRED, @@ -89,12 +89,12 @@ message RelationshipCondition { // A reference (by name) of the relationship condition defined in the authorization model. string name = 1 [ (validate.rules).string = { - pattern: "^[^\\s]{2,256}$", + pattern: "^[^\\s]{2,256}$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 256, + max_length: 256 example: "\"condition1\"" } ]; @@ -110,7 +110,7 @@ message TupleKeyWithoutCondition { (google.api.field_behavior) = REQUIRED, (validate.rules).string = {max_bytes: 512}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 512, + max_length: 512 example: "\"user:anne\"" } ]; @@ -118,11 +118,11 @@ message TupleKeyWithoutCondition { string relation = 2 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 50, + max_length: 50 example: "\"reader\"" } ]; @@ -130,11 +130,11 @@ message TupleKeyWithoutCondition { string object = 3 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[^\\s]{2,256}$", + pattern: "^[^\\s]{2,256}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 256, + max_length: 256 example: "\"document:2021-budget\"" } ]; @@ -150,7 +150,7 @@ message TupleKeyWithoutCondition { message TypedWildcard { string type = 1 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,254}$", + pattern: "^[^:#@\\s]{1,254}$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -162,11 +162,11 @@ message TupleKey { string user = 1 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - max_bytes: 512, + max_bytes: 512 ignore_empty: false }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 512, + max_length: 512 example: "\"user:anne\"" } ]; @@ -174,11 +174,11 @@ message TupleKey { string relation = 2 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 50, + max_length: 50 example: "\"reader\"" } ]; @@ -186,11 +186,11 @@ message TupleKey { string object = 3 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[^\\s]{2,256}$", + pattern: "^[^\\s]{2,256}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 256, + max_length: 256 example: "\"document:2021-budget\"" } ]; @@ -330,7 +330,7 @@ message Store { message UserTypeFilter { string type = 1 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,254}$", + pattern: "^[^:#@\\s]{1,254}$" ignore_empty: false }, (google.api.field_behavior) = REQUIRED, @@ -339,7 +339,7 @@ message UserTypeFilter { string relation = 2 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"member\""} diff --git a/openfga/v1/openfga_service.proto b/openfga/v1/openfga_service.proto index 20ebb478..a1c1984d 100644 --- a/openfga/v1/openfga_service.proto +++ b/openfga/v1/openfga_service.proto @@ -611,7 +611,7 @@ service OpenFGAService { rpc CreateStore(CreateStoreRequest) returns (CreateStoreResponse) { option (google.api.http) = { - post: "/stores", + post: "/stores" body: "*" }; @@ -636,7 +636,7 @@ service OpenFGAService { option (google.api.method_visibility).restriction = "UNIMPLEMENTED"; option (google.api.http) = { - patch: "/stores/{store_id}", + patch: "/stores/{store_id}" body: "*" }; @@ -703,7 +703,7 @@ service OpenFGAService { rpc StreamedListObjects(StreamedListObjectsRequest) returns (stream StreamedListObjectsResponse) { option (google.api.http) = { - post: "/stores/{store_id}/streamed-list-objects", + post: "/stores/{store_id}/streamed-list-objects" body: "*" }; @@ -720,7 +720,7 @@ service OpenFGAService { rpc ListObjects(ListObjectsRequest) returns (ListObjectsResponse) { option (google.api.http) = { - post: "/stores/{store_id}/list-objects", + post: "/stores/{store_id}/list-objects" body: "*" }; @@ -746,17 +746,16 @@ service OpenFGAService { rpc ListUsers(ListUsersRequest) returns (ListUsersResponse) { option (google.api.http) = { - post: "/stores/{store_id}/list-users", + post: "/stores/{store_id}/list-users" body: "*" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - summary: "[EXPERIMENTAL] List the users matching the provided filter who have a certain relation to a particular type." + summary: "List the users matching the provided filter who have a certain relation to a particular type." tags: ["Relationship Queries"] operation_id: "ListUsers" description: "The ListUsers API returns a list of all the users of a specific type that have a relation to a given object.\n " - "This API is available in an experimental capacity and can be enabled with the `--experimentals enable-list-users` flag. \n" "To arrive at a result, the API uses: an authorization model, explicit tuples written through the Write API, contextual tuples present in the request, and implicit tuples that exist by virtue of applying set theory " "(such as `document:2021-budget#viewer@document:2021-budget#viewer`; the set of users who are viewers of `document:2021-budget` are the set of users who are the viewers of `document:2021-budget`).\n" "An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization " @@ -797,7 +796,7 @@ message ListObjectsRequest { string authorization_model_id = 2 [ json_name = "authorization_model_id", (validate.rules).string = { - pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$", + pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} @@ -818,12 +817,12 @@ message ListObjectsRequest { string user = 5 [ (validate.rules).string = { - min_bytes: 1, + min_bytes: 1 max_bytes: 512 }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - min_length: 1, - max_length: 512, + min_length: 1 + max_length: 512 example: "\"user:anne\"" }, (google.api.field_behavior) = REQUIRED @@ -857,7 +856,7 @@ message ListUsersRequest { string authorization_model_id = 2 [ json_name = "authorization_model_id", (validate.rules).string = { - pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$", + pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} @@ -880,12 +879,12 @@ message ListUsersRequest { json_name = "user_filters", (google.api.field_behavior) = REQUIRED, (validate.rules).repeated = { - min_items: 1, + min_items: 1 max_items: 1 }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - description: "The type of results returned. Only accepts exactly one value.", + description: "The type of results returned. Only accepts exactly one value." example: "[{\"type\": \"user\"}, {\"type\": \"group\", \"relation\": \"member\"}]" } ]; @@ -922,7 +921,7 @@ message StreamedListObjectsRequest { string authorization_model_id = 2 [ json_name = "authorization_model_id", (validate.rules).string = { - pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$", + pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} @@ -943,12 +942,12 @@ message StreamedListObjectsRequest { string user = 5 [ (validate.rules).string = { - min_bytes: 1, + min_bytes: 1 max_bytes: 512 }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - min_length: 1, - max_length: 512, + min_length: 1 + max_length: 512 example: "\"user:anne\"" }, (google.api.field_behavior) = REQUIRED @@ -990,7 +989,7 @@ message ReadRequest { google.protobuf.Int32Value page_size = 3 [ json_name = "page_size", (validate.rules).int32 = { - gte: 1, + gte: 1 lte: 100 }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "50"} @@ -1010,29 +1009,29 @@ message ReadRequestTupleKey { string user = 1 [ (validate.rules).string = {max_bytes: 512}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 512, + max_length: 512 example: "\"user:anne\"" } ]; string relation = 2 [ (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 50, + max_length: 50 example: "\"reader\"" } ]; string object = 3 [ (validate.rules).string = { - pattern: "^[^\\s]{2,256}$", + pattern: "^[^\\s]{2,256}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 256, + max_length: 256 example: "\"document:2021-budget\"" } ]; @@ -1046,7 +1045,7 @@ message ReadResponse { (google.api.field_behavior) = REQUIRED, (validate.rules).string.max_bytes = 5120, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - description: "The continuation token will be empty if there are no more tuples.", + description: "The continuation token will be empty if there are no more tuples." example: "\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"" } ]; @@ -1085,7 +1084,7 @@ message WriteRequest { string authorization_model_id = 4 [ json_name = "authorization_model_id", (validate.rules).string = { - pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$", + pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} @@ -1113,7 +1112,7 @@ message CheckRequest { string authorization_model_id = 4 [ json_name = "authorization_model_id", (validate.rules).string = { - pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$", + pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} @@ -1121,7 +1120,7 @@ message CheckRequest { // Defaults to false. Making it true has performance implications. bool trace = 5 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - read_only: true, + read_only: true example: "false" }]; @@ -1138,7 +1137,7 @@ message CheckRequestTupleKey { (google.api.field_behavior) = REQUIRED, (validate.rules).string = {pattern: "^[^\\s]{2,512}$"}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 512, + max_length: 512 example: "\"user:anne\"" } ]; @@ -1147,7 +1146,7 @@ message CheckRequestTupleKey { (google.api.field_behavior) = REQUIRED, (validate.rules).string = {pattern: "^[^:#@\\s]{1,50}$"}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 50, + max_length: 50 example: "\"reader\"" } ]; @@ -1156,7 +1155,7 @@ message CheckRequestTupleKey { (google.api.field_behavior) = REQUIRED, (validate.rules).string = {pattern: "^[^\\s]{2,256}$"}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 256, + max_length: 256 example: "\"document:2021-budget\"" } ]; @@ -1186,7 +1185,7 @@ message ExpandRequest { string authorization_model_id = 3 [ json_name = "authorization_model_id", (validate.rules).string = { - pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$", + pattern: "^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"01G5JAVJ41T49E9TT3SKVS7X1J\""} @@ -1200,22 +1199,22 @@ message ExpandRequestTupleKey { string relation = 1 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[^:#@\\s]{1,50}$", + pattern: "^[^:#@\\s]{1,50}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 50, + max_length: 50 example: "\"reader\"" } ]; string object = 2 [ (google.api.field_behavior) = REQUIRED, (validate.rules).string = { - pattern: "^[^\\s]{2,256}$", + pattern: "^[^\\s]{2,256}$" ignore_empty: true }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 256, + max_length: 256 example: "\"document:2021-budget\"" } ]; @@ -1268,7 +1267,7 @@ message WriteAuthorizationModelRequest { "1.0", "1.1", "1.2" - ], + ] ignore_empty: false } ]; @@ -1300,7 +1299,7 @@ message ReadAuthorizationModelsRequest { google.protobuf.Int32Value page_size = 2 [ json_name = "page_size", (validate.rules).int32 = { - gte: 1, + gte: 1 lte: 100 }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "50"} @@ -1323,7 +1322,7 @@ message ReadAuthorizationModelsResponse { json_name = "continuation_token", (validate.rules).string.max_bytes = 5120, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - description: "The continuation token will be empty if there are no more models.", + description: "The continuation token will be empty if there are no more models." example: "\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"" } ]; @@ -1348,11 +1347,11 @@ message WriteAssertionsRequest { json_name = "assertions", (google.api.field_behavior) = REQUIRED, (validate.rules).repeated = { - min_items: 0, + min_items: 0 max_items: 100 }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - minimum: 0, + minimum: 0 maximum: 100 } ]; @@ -1396,14 +1395,14 @@ message ReadChangesRequest { ]; string type = 2 [(validate.rules).string = { - pattern: "^[^:#\\s]{1,254}$", + pattern: "^[^:#\\s]{1,254}$" ignore_empty: true }]; google.protobuf.Int32Value page_size = 3 [ json_name = "page_size", (validate.rules).int32 = { - gte: 1, + gte: 1 lte: 100 }, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "50"} @@ -1524,7 +1523,7 @@ message ListStoresRequest { google.protobuf.Int32Value page_size = 1 [ json_name = "page_size", (validate.rules).int32 = { - gte: 1, + gte: 1 lte: 100 } ]; @@ -1543,7 +1542,7 @@ message ListStoresResponse { (google.api.field_behavior) = REQUIRED, (validate.rules).string.max_bytes = 5120, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - description: "The continuation token will be empty if there are no more stores.", + description: "The continuation token will be empty if there are no more stores." example: "\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"" } ]; @@ -1554,7 +1553,7 @@ message AssertionTupleKey { (google.api.field_behavior) = REQUIRED, (validate.rules).string = {pattern: "^[^\\s]{2,256}$"}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 256, + max_length: 256 example: "\"document:2021-budget\"" } ]; @@ -1563,7 +1562,7 @@ message AssertionTupleKey { (google.api.field_behavior) = REQUIRED, (validate.rules).string = {pattern: "^[^:#@\\s]{1,50}$"}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 50, + max_length: 50 example: "\"reader\"" } ]; @@ -1572,7 +1571,7 @@ message AssertionTupleKey { (google.api.field_behavior) = REQUIRED, (validate.rules).string = {pattern: "^[^\\s]{2,512}$"}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - max_length: 512, + max_length: 512 example: "\"user:anne\"" } ]; diff --git a/proto/openfga/v1/openfga_service.pb.go b/proto/openfga/v1/openfga_service.pb.go index e3f61fd2..9f0b34a8 100644 --- a/proto/openfga/v1/openfga_service.pb.go +++ b/proto/openfga/v1/openfga_service.pb.go @@ -3479,7 +3479,7 @@ var file_openfga_v1_openfga_service_proto_rawDesc = []byte{ 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x49, 0x4e, 0x49, 0x4d, 0x49, 0x5a, 0x45, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x10, 0x64, 0x12, 0x17, 0x0a, 0x12, 0x48, 0x49, 0x47, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, - 0x54, 0x45, 0x4e, 0x43, 0x59, 0x10, 0xc8, 0x01, 0x32, 0xf5, 0xbf, 0x01, 0x0a, 0x0e, 0x4f, 0x70, + 0x54, 0x45, 0x4e, 0x43, 0x59, 0x10, 0xc8, 0x01, 0x32, 0xed, 0xbe, 0x01, 0x0a, 0x0e, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x47, 0x41, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xfb, 0x1c, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, @@ -4864,168 +4864,160 @@ var file_openfga_v1_openfga_service_proto_rawDesc = []byte{ 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x12, 0xec, 0x12, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, + 0x74, 0x73, 0x12, 0xe4, 0x11, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa1, 0x12, - 0x92, 0x41, 0xf5, 0x11, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, - 0x69, 0x70, 0x20, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x6c, 0x5b, 0x45, 0x58, 0x50, - 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x41, 0x4c, 0x5d, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, - 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x1a, 0xe3, 0x10, 0x54, 0x68, 0x65, 0x20, 0x4c, - 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x41, 0x50, - 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x20, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, - 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x2d, 0x2d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x6c, - 0x69, 0x73, 0x74, 0x2d, 0x75, 0x73, 0x65, 0x72, 0x73, 0x60, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x2e, - 0x20, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x72, 0x72, 0x69, 0x76, 0x65, 0x20, 0x61, 0x74, 0x20, 0x61, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, - 0x20, 0x75, 0x73, 0x65, 0x73, 0x3a, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x65, - 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x62, 0x79, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x20, 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, - 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, - 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x40, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, - 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x60, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, - 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, - 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x29, 0x2e, 0x0a, 0x41, 0x6e, 0x20, 0x60, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x49, 0x44, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x74, - 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x79, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, - 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x60, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x61, 0x73, 0x20, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, - 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x60, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x2e, 0x0a, 0x59, 0x6f, 0x75, - 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x20, 0x61, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x60, 0x20, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x64, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, - 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, - 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, - 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x75, - 0x70, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x2e, 0x0a, 0x54, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x22, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x20, - 0x0a, 0x6f, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2d, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x20, 0x45, 0x61, - 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x73, 0x20, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, - 0x77, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, - 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x49, 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x73, - 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2d, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x65, 0x64, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, - 0x2a, 0x60, 0x29, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0a, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, - 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3b, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, - 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x73, - 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x64, 0x0a, - 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x20, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x61, - 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x55, - 0x53, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x20, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, - 0x47, 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x53, 0x5f, 0x4d, 0x41, - 0x58, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x65, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x68, 0x69, 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, - 0x79, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x73, 0x65, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x2a, 0x09, - 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, - 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x42, 0xa1, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, - 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, - 0x31, 0xca, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, - 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x11, + 0x92, 0x41, 0xed, 0x10, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, + 0x69, 0x70, 0x20, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x5d, 0x4c, 0x69, 0x73, 0x74, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, + 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, + 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, + 0x6c, 0x61, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x1a, 0xea, 0x0f, 0x54, 0x68, 0x65, 0x20, + 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, + 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x20, 0x54, 0x6f, 0x20, 0x61, 0x72, 0x72, + 0x69, 0x76, 0x65, 0x20, 0x61, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x75, 0x73, 0x65, 0x73, 0x3a, 0x20, 0x61, + 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, + 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, + 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, + 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2c, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, 0x75, 0x70, + 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x62, + 0x79, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, + 0x79, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x20, + 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, + 0x69, 0x65, 0x77, 0x65, 0x72, 0x40, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, + 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, 0x77, 0x65, + 0x72, 0x60, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x69, 0x65, + 0x77, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, 0x61, + 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, + 0x60, 0x29, 0x2e, 0x0a, 0x41, 0x6e, 0x20, 0x60, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x60, 0x20, + 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x20, 0x49, 0x66, + 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x49, 0x44, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x6f, + 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, + 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, + 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x65, + 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x6d, + 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, + 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, + 0x65, 0x73, 0x60, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, + 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x72, 0x65, 0x67, 0x75, + 0x6c, 0x61, 0x72, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, + 0x20, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, + 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x60, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, + 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x60, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, + 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, + 0x6f, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, + 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, + 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, + 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x65, 0x20, + 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, + 0x74, 0x6c, 0x79, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, + 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2c, 0x20, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x20, 0x0a, 0x6f, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x2d, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x73, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, + 0x49, 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x2d, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, + 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x28, 0x65, 0x2e, 0x67, + 0x2e, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x2a, 0x60, 0x29, 0x2c, 0x20, 0x69, 0x74, 0x20, + 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3b, + 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, + 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, + 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x64, 0x0a, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, + 0x69, 0x64, 0x75, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x74, + 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, + 0x62, 0x65, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, + 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x41, + 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, + 0x61, 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, + 0x55, 0x53, 0x45, 0x52, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, + 0x53, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x65, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, + 0x68, 0x69, 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, + 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x74, 0x77, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x61, + 0x6c, 0x6c, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x64, 0x69, + 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x2a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, + 0x69, 0x73, 0x74, 0x2d, 0x75, 0x73, 0x65, 0x72, 0x73, 0x42, 0xa1, 0x01, 0x0a, 0x0e, 0x63, 0x6f, + 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x4f, 0x70, + 0x65, 0x6e, 0x66, 0x67, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x65, + 0x6e, 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4f, + 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, + 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, + 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var (