Openstatus sdk
www.openstatus.dev
1// Copyright 2023-2025 Buf Technologies, Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=ts"
16// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)
17/* eslint-disable */
18
19import type {
20 GenEnum,
21 GenExtension,
22 GenFile,
23 GenMessage,
24} from "@bufbuild/protobuf/codegenv2";
25import {
26 enumDesc,
27 extDesc,
28 fileDesc,
29 messageDesc,
30} from "@bufbuild/protobuf/codegenv2";
31import type {
32 Duration,
33 FieldDescriptorProto_Type,
34 FieldMask,
35 FieldOptions,
36 MessageOptions,
37 OneofOptions,
38 Timestamp,
39} from "@bufbuild/protobuf/wkt";
40import {
41 file_google_protobuf_descriptor,
42 file_google_protobuf_duration,
43 file_google_protobuf_field_mask,
44 file_google_protobuf_timestamp,
45} from "@bufbuild/protobuf/wkt";
46import type { Message } from "@bufbuild/protobuf";
47
48/**
49 * Describes the file buf/validate/validate.proto.
50 */
51export const file_buf_validate_validate: GenFile = /*@__PURE__*/
52 fileDesc(
53 "ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSLaFwoKRmxvYXRSdWxlcxKDAQoFY29uc3QYASABKAJCdMJIcQpvCgtmbG9hdC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESfwoCaW4YBiADKAJCc8JIcApuCghmbG9hdC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdgoGbm90X2luGAcgAygCQmbCSGMKYQoMZmxvYXQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdQoGZmluaXRlGAggASgIQmXCSGIKYAoMZmxvYXQuZmluaXRlGlBydWxlcy5maW5pdGUgPyAodGhpcy5pc05hbigpIHx8IHRoaXMuaXNJbmYoKSA/ICd2YWx1ZSBtdXN0IGJlIGZpbml0ZScgOiAnJykgOiAnJxIrCgdleGFtcGxlGAkgAygCQhrCSBcKFQoNZmxvYXQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i7RcKC0RvdWJsZVJ1bGVzEoQBCgVjb25zdBgBIAEoAUJ1wkhyCnAKDGRvdWJsZS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqABCgJsdBgCIAEoAUKRAcJIjQEKigEKCWRvdWJsZS5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKwAQoDbHRlGAMgASgBQqABwkicAQqZAQoKZG91YmxlLmx0ZRqKASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvQHCgJndBgEIAEoAULlB8JI4QcKjgEKCWRvdWJsZS5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsQBCgxkb3VibGUuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrOAQoWZG91YmxlLmd0X2x0X2V4Y2x1c2l2ZRqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCtQBCg1kb3VibGUuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3gEKF2RvdWJsZS5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK/CAoDZ3RlGAUgASgBQq8IwkirCAqcAQoKZG91YmxlLmd0ZRqNASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrTAQoNZG91YmxlLmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3QEKF2RvdWJsZS5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrjAQoOZG91YmxlLmd0ZV9sdGUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCu0BChhkb3VibGUuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygBQnTCSHEKbwoJZG91YmxlLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50MzJSdWxlcxKDAQoFY29uc3QYASABKAVCdMJIcQpvCgtpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygFQnPCSHAKbgoIaW50MzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoBUJmwkhjCmEKDGludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCCADKAVCGsJIFwoVCg1pbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50NjRSdWxlcxKDAQoFY29uc3QYASABKANCdMJIcQpvCgtpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoA0J8wkh5CncKCGludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKANCjAHCSIgBCoUBCglpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoA0KIB8JIhAcKegoIaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgDQtMHwkjPBwqIAQoJaW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygDQnPCSHAKbgoIaW50NjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoA0JmwkhjCmEKDGludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDMyUnVsZXMShAEKBWNvbnN0GAEgASgNQnXCSHIKcAoMdWludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgNQn3CSHoKeAoJdWludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKA1CjQHCSIkBCoYBCgp1aW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKA1CjQfCSIkHCnsKCXVpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgNQtgHwkjUBwqJAQoKdWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygNQnTCSHEKbwoJdWludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKA1CZ8JIZApiCg11aW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoDUIbwkgYChYKDnVpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDY0UnVsZXMShAEKBWNvbnN0GAEgASgEQnXCSHIKcAoMdWludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgEQn3CSHoKeAoJdWludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKARCjQHCSIkBCoYBCgp1aW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKARCjQfCSIkHCnsKCXVpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgEQtgHwkjUBwqJAQoKdWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygEQnTCSHEKbwoJdWludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDMyUnVsZXMShAEKBWNvbnN0GAEgASgRQnXCSHIKcAoMc2ludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygRQnTCSHEKbwoJc2ludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBFCZ8JIZApiCg1zaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDY0UnVsZXMShAEKBWNvbnN0GAEgASgSQnXCSHIKcAoMc2ludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgSQn3CSHoKeAoJc2ludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBJCjQHCSIkBCoYBCgpzaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBJCjQfCSIkHCnsKCXNpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgSQtgHwkjUBwqJAQoKc2ludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygSQnTCSHEKbwoJc2ludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBJCZ8JIZApiCg1zaW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEkIbwkgYChYKDnNpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQzMlJ1bGVzEoUBCgVjb25zdBgBIAEoB0J2wkhzCnEKDWZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAdCfsJIewp5CgpmaXhlZDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAdCjgHCSIoBCocBCgtmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgHQpIHwkiOBwp8CgpmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgHQt0HwkjZBwqKAQoLZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAdCdcJIcgpwCgpmaXhlZDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIq8VCgxGaXhlZDY0UnVsZXMShQEKBWNvbnN0GAEgASgGQnbCSHMKcQoNZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoEBCgJpbhgGIAMoBkJ1wkhyCnAKCmZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEngKBm5vdF9pbhgHIAMoBkJowkhlCmMKDmZpeGVkNjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwBUKDVNGaXhlZDMyUnVsZXMShgEKBWNvbnN0GAEgASgPQnfCSHQKcgoOc2ZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKNAQoCbHQYAiABKA9Cf8JIfAp6CgtzZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgPQo8BwkiLAQqIAQoMc2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKA9ClwfCSJMHCn0KC3NmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoD0LiB8JI3gcKiwEKDHNmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKCAQoCaW4YBiADKA9CdsJIcwpxCgtzZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeQoGbm90X2luGAcgAygPQmnCSGYKZAoPc2ZpeGVkMzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLgoHZXhhbXBsZRgIIAMoD0IdwkgaChgKEHNmaXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQ2NFJ1bGVzEoYBCgVjb25zdBgBIAEoEEJ3wkh0CnIKDnNmaXhlZDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgQQn/CSHwKegoLc2ZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoEEKPAcJIiwEKiAEKDHNmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgQQpcHwkiTBwp9CgtzZml4ZWQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKBBC4gfCSN4HCosBCgxzZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkNjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkNjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygQQnbCSHMKcQoLc2ZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHAQoJQm9vbFJ1bGVzEoIBCgVjb25zdBgBIAEoCEJzwkhwCm4KCmJvb2wuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIiiDkKC1N0cmluZ1J1bGVzEoYBCgVjb25zdBgBIAEoCUJ3wkh0CnIKDHN0cmluZy5jb25zdBpidGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSgAEKAmluGAogAygJQnTCSHEKbwoJc3RyaW5nLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YCyADKAlCZ8JIZApiCg1zdHJpbmcubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycS3wEKBWVtYWlsGAwgASgIQs0BwkjJAQphCgxzdHJpbmcuZW1haWwSI3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGiwhcnVsZXMuZW1haWwgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzRW1haWwoKQpkChJzdHJpbmcuZW1haWxfZW1wdHkSMnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGhohcnVsZXMuZW1haWwgfHwgdGhpcyAhPSAnJ0gAEucBCghob3N0bmFtZRgNIAEoCELSAcJIzgEKZQoPc3RyaW5nLmhvc3RuYW1lEh52YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdG5hbWUaMiFydWxlcy5ob3N0bmFtZSB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpCmUKFXN0cmluZy5ob3N0bmFtZV9lbXB0eRItdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lGh0hcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyAhPSAnJ0gAEscBCgJpcBgOIAEoCEK4AcJItAEKVQoJc3RyaW5nLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxomIXJ1bGVzLmlwIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKCkKWwoPc3RyaW5nLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxoXIXJ1bGVzLmlwIHx8IHRoaXMgIT0gJydIABLWAQoEaXB2NBgPIAEoCELFAcJIwQEKXAoLc3RyaW5nLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaKSFydWxlcy5pcHY0IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKDQpCmEKEXN0cmluZy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGhkhcnVsZXMuaXB2NCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjYYECABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY2EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzGikhcnVsZXMuaXB2NiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg2KQphChFzdHJpbmcuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxoZIXJ1bGVzLmlwdjYgfHwgdGhpcyAhPSAnJ0gAEr8BCgN1cmkYESABKAhCrwHCSKsBClEKCnN0cmluZy51cmkSGXZhbHVlIG11c3QgYmUgYSB2YWxpZCBVUkkaKCFydWxlcy51cmkgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzVXJpKCkKVgoQc3RyaW5nLnVyaV9lbXB0eRIodmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVSSRoYIXJ1bGVzLnVyaSB8fCB0aGlzICE9ICcnSAAScAoHdXJpX3JlZhgSIAEoCEJdwkhaClgKDnN0cmluZy51cmlfcmVmEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJIFJlZmVyZW5jZRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEvUBCgR1bGlkGCMgASgIQuQBwkjgAQqCAQoLc3RyaW5nLnVsaWQSGnZhbHVlIG11c3QgYmUgYSB2YWxpZCBVTElEGlchcnVsZXMudWxpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kJykKWQoRc3RyaW5nLnVsaWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVTElEGhkhcnVsZXMudWxpZCB8fCB0aGlzICE9ICcnSAASqAUKEHdlbGxfa25vd25fcmVnZXgYGCABKA4yGC5idWYudmFsaWRhdGUuS25vd25SZWdleELxBMJI7QQK8AEKI3N0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lEiZ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRqgAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXjo/WzAtOWEtekEtWiEjJCUmXCcqKy0uXl98flx4NjBdKyQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSskJykKjQEKKXN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lX2VtcHR5EjV2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRopcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgIT0gJycK5wEKJHN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl92YWx1ZRIndmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIHZhbHVlGpUBcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAyIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXlteXHUwMDAwLVx1MDAwOFx1MDAwQS1cdTAwMUZcdTAwN0ZdKiQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSokJylIABIOCgZzdHJpY3QYGSABKAgSLAoHZXhhbXBsZRgiIAMoCUIbwkgYChYKDnN0cmluZy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLCEgoKQnl0ZXNSdWxlcxKAAQoFY29uc3QYASABKAxCccJIbgpsCgtieXRlcy5jb25zdBpddGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBiZSAleCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEngKA2xlbhgNIAEoBEJrwkhoCmYKCWJ5dGVzLmxlbhpZdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSkAEKB21pbl9sZW4YAiABKARCf8JIfAp6Cg1ieXRlcy5taW5fbGVuGml1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg1ieXRlcy5tYXhfbGVuGmF1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpABCgdwYXR0ZXJuGAQgASgJQn/CSHwKegoNYnl0ZXMucGF0dGVybhppIXN0cmluZyh0aGlzKS5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ3ZhbHVlIG11c3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoEBCgZwcmVmaXgYBSABKAxCccJIbgpsCgxieXRlcy5wcmVmaXgaXCF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCAleCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEn8KBnN1ZmZpeBgGIAEoDEJvwkhsCmoKDGJ5dGVzLnN1ZmZpeBpaIXRoaXMuZW5kc1dpdGgocnVsZXMuc3VmZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpeCAleCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEoMBCghjb250YWlucxgHIAEoDEJxwkhuCmwKDmJ5dGVzLmNvbnRhaW5zGlohdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAndmFsdWUgZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSpwEKAmluGAggAygMQpoBwkiWAQqTAQoIYnl0ZXMuaW4ahgFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEtUBCgR1dWlkGA8gASgIQsQBwkjAAQpeCgpieXRlcy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLUAwoJRW51bVJ1bGVzEoIBCgVjb25zdBgBIAEoBUJzwkhwCm4KCmVudW0uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSfgoCaW4YAyADKAVCcsJIbwptCgdlbnVtLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ1CgZub3RfaW4YBCADKAVCZcJIYgpgCgtlbnVtLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEioKB2V4YW1wbGUYBSADKAVCGcJIFgoUCgxlbnVtLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAiL7AwoNUmVwZWF0ZWRSdWxlcxKeAQoJbWluX2l0ZW1zGAEgASgEQooBwkiGAQqDAQoScmVwZWF0ZWQubWluX2l0ZW1zGm11aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICd2YWx1ZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEqIBCgltYXhfaXRlbXMYAiABKARCjgHCSIoBCocBChJyZXBlYXRlZC5tYXhfaXRlbXMacXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIpkXCg1EdXJhdGlvblJ1bGVzEqEBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJ3wkh0CnIKDmR1cmF0aW9uLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESnQEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnbCSHMKcQoLZHVyYXRpb24uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEpQBCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CacJIZgpkCg9kdXJhdGlvbi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i/QUKDkZpZWxkTWFza1J1bGVzEr8BCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCkwHCSI8BCowBChBmaWVsZF9tYXNrLmNvbnN0Gnh0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICd2YWx1ZSBtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS2QEKAmluGAIgAygJQswBwkjIAQrFAQoNZmllbGRfbWFzay5pbhqzASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICd2YWx1ZSBtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEvMBCgZub3RfaW4YAyADKAlC4gHCSN4BCtsBChFmaWVsZF9tYXNrLm5vdF9pbhrFASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ3ZhbHVlIG11c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIikhgKDlRpbWVzdGFtcFJ1bGVzEqMBCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCeMJIdQpzCg90aW1lc3RhbXAuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKfAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIPCgdydWxlX2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqoQEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIYChRJR05PUkVfSUZfWkVST19WQUxVRRABEhEKDUlHTk9SRV9BTFdBWVMQAyIECAIQAioMSUdOT1JFX0VNUFRZKg5JR05PUkVfREVGQVVMVCoXSUdOT1JFX0lGX0RFRkFVTFRfVkFMVUUqFUlHTk9SRV9JRl9VTlBPUFVMQVRFRCpuCgpLbm93blJlZ2V4EhsKF0tOT1dOX1JFR0VYX1VOU1BFQ0lGSUVEEAASIAocS05PV05fUkVHRVhfSFRUUF9IRUFERVJfTkFNRRABEiEKHUtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX1ZBTFVFEAI6VgoHbWVzc2FnZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiHCSABKAsyGi5idWYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlOk4KBW9uZW9mEh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuT25lb2ZSdWxlc1IFb25lb2Y6TgoFZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVmaWVsZDpdCgpwcmVkZWZpbmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiICSABKAsyHS5idWYudmFsaWRhdGUuUHJlZGVmaW5lZFJ1bGVzUgpwcmVkZWZpbmVkQm4KEmJ1aWxkLmJ1Zi52YWxpZGF0ZUINVmFsaWRhdGVQcm90b1ABWkdidWYuYnVpbGQvZ2VuL2dvL2J1ZmJ1aWxkL3Byb3RvdmFsaWRhdGUvcHJvdG9jb2xidWZmZXJzL2dvL2J1Zi92YWxpZGF0ZQ",
54 [
55 file_google_protobuf_descriptor,
56 file_google_protobuf_duration,
57 file_google_protobuf_field_mask,
58 file_google_protobuf_timestamp,
59 ],
60 );
61
62/**
63 * `Rule` represents a validation rule written in the Common Expression
64 * Language (CEL) syntax. Each Rule includes a unique identifier, an
65 * optional error message, and the CEL expression to evaluate. For more
66 * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
67 *
68 * ```proto
69 * message Foo {
70 * option (buf.validate.message).cel = {
71 * id: "foo.bar"
72 * message: "bar must be greater than 0"
73 * expression: "this.bar > 0"
74 * };
75 * int32 bar = 1;
76 * }
77 * ```
78 *
79 * @generated from message buf.validate.Rule
80 */
81export type Rule = Message<"buf.validate.Rule"> & {
82 /**
83 * `id` is a string that serves as a machine-readable name for this Rule.
84 * It should be unique within its scope, which could be either a message or a field.
85 *
86 * @generated from field: optional string id = 1;
87 */
88 id: string;
89
90 /**
91 * `message` is an optional field that provides a human-readable error message
92 * for this Rule when the CEL expression evaluates to false. If a
93 * non-empty message is provided, any strings resulting from the CEL
94 * expression evaluation are ignored.
95 *
96 * @generated from field: optional string message = 2;
97 */
98 message: string;
99
100 /**
101 * `expression` is the actual CEL expression that will be evaluated for
102 * validation. This string must resolve to either a boolean or a string
103 * value. If the expression evaluates to false or a non-empty string, the
104 * validation is considered failed, and the message is rejected.
105 *
106 * @generated from field: optional string expression = 3;
107 */
108 expression: string;
109};
110
111/**
112 * Describes the message buf.validate.Rule.
113 * Use `create(RuleSchema)` to create a new message.
114 */
115export const RuleSchema: GenMessage<Rule> = /*@__PURE__*/
116 messageDesc(file_buf_validate_validate, 0);
117
118/**
119 * MessageRules represents validation rules that are applied to the entire message.
120 * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.
121 *
122 * @generated from message buf.validate.MessageRules
123 */
124export type MessageRules = Message<"buf.validate.MessageRules"> & {
125 /**
126 * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation
127 * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.
128 *
129 * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for
130 * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will
131 * be same as the `expression`.
132 *
133 * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
134 *
135 * ```proto
136 * message MyMessage {
137 * // The field `foo` must be greater than 42.
138 * option (buf.validate.message).cel_expression = "this.foo > 42";
139 * // The field `foo` must be less than 84.
140 * option (buf.validate.message).cel_expression = "this.foo < 84";
141 * optional int32 foo = 1;
142 * }
143 * ```
144 *
145 * @generated from field: repeated string cel_expression = 5;
146 */
147 celExpression: string[];
148
149 /**
150 * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.
151 * These rules are written in Common Expression Language (CEL) syntax. For more information,
152 * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
153 *
154 * ```proto
155 * message MyMessage {
156 * // The field `foo` must be greater than 42.
157 * option (buf.validate.message).cel = {
158 * id: "my_message.value",
159 * message: "value must be greater than 42",
160 * expression: "this.foo > 42",
161 * };
162 * optional int32 foo = 1;
163 * }
164 * ```
165 *
166 * @generated from field: repeated buf.validate.Rule cel = 3;
167 */
168 cel: Rule[];
169
170 /**
171 * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields
172 * of which at most one can be present. If `required` is also specified, then exactly one
173 * of the specified fields _must_ be present.
174 *
175 * This will enforce oneof-like constraints with a few features not provided by
176 * actual Protobuf oneof declarations:
177 * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,
178 * only scalar fields are allowed.
179 * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member
180 * fields have explicit presence. This means that, for the purpose of determining
181 * how many fields are set, explicitly setting such a field to its zero value is
182 * effectively the same as not setting it at all.
183 * 3. This will always generate validation errors for a message unmarshalled from
184 * serialized data that sets more than one field. With a Protobuf oneof, when
185 * multiple fields are present in the serialized form, earlier values are usually
186 * silently ignored when unmarshalling, with only the last field being set when
187 * unmarshalling completes.
188 *
189 * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means
190 * only the field that is set will be validated and the unset fields are not validated according to the field rules.
191 * This behavior can be overridden by setting `ignore` against a field.
192 *
193 * ```proto
194 * message MyMessage {
195 * // Only one of `field1` or `field2` _can_ be present in this message.
196 * option (buf.validate.message).oneof = { fields: ["field1", "field2"] };
197 * // Exactly one of `field3` or `field4` _must_ be present in this message.
198 * option (buf.validate.message).oneof = { fields: ["field3", "field4"], required: true };
199 * string field1 = 1;
200 * bytes field2 = 2;
201 * bool field3 = 3;
202 * int32 field4 = 4;
203 * }
204 * ```
205 *
206 * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;
207 */
208 oneof: MessageOneofRule[];
209};
210
211/**
212 * Describes the message buf.validate.MessageRules.
213 * Use `create(MessageRulesSchema)` to create a new message.
214 */
215export const MessageRulesSchema: GenMessage<MessageRules> = /*@__PURE__*/
216 messageDesc(file_buf_validate_validate, 1);
217
218/**
219 * @generated from message buf.validate.MessageOneofRule
220 */
221export type MessageOneofRule = Message<"buf.validate.MessageOneofRule"> & {
222 /**
223 * A list of field names to include in the oneof. All field names must be
224 * defined in the message. At least one field must be specified, and
225 * duplicates are not permitted.
226 *
227 * @generated from field: repeated string fields = 1;
228 */
229 fields: string[];
230
231 /**
232 * If true, one of the fields specified _must_ be set.
233 *
234 * @generated from field: optional bool required = 2;
235 */
236 required: boolean;
237};
238
239/**
240 * Describes the message buf.validate.MessageOneofRule.
241 * Use `create(MessageOneofRuleSchema)` to create a new message.
242 */
243export const MessageOneofRuleSchema: GenMessage<
244 MessageOneofRule
245> = /*@__PURE__*/
246 messageDesc(file_buf_validate_validate, 2);
247
248/**
249 * The `OneofRules` message type enables you to manage rules for
250 * oneof fields in your protobuf messages.
251 *
252 * @generated from message buf.validate.OneofRules
253 */
254export type OneofRules = Message<"buf.validate.OneofRules"> & {
255 /**
256 * If `required` is true, exactly one field of the oneof must be set. A
257 * validation error is returned if no fields in the oneof are set. Further rules
258 * should be placed on the fields themselves to ensure they are valid values,
259 * such as `min_len` or `gt`.
260 *
261 * ```proto
262 * message MyMessage {
263 * oneof value {
264 * // Either `a` or `b` must be set. If `a` is set, it must also be
265 * // non-empty; whereas if `b` is set, it can still be an empty string.
266 * option (buf.validate.oneof).required = true;
267 * string a = 1 [(buf.validate.field).string.min_len = 1];
268 * string b = 2;
269 * }
270 * }
271 * ```
272 *
273 * @generated from field: optional bool required = 1;
274 */
275 required: boolean;
276};
277
278/**
279 * Describes the message buf.validate.OneofRules.
280 * Use `create(OneofRulesSchema)` to create a new message.
281 */
282export const OneofRulesSchema: GenMessage<OneofRules> = /*@__PURE__*/
283 messageDesc(file_buf_validate_validate, 3);
284
285/**
286 * FieldRules encapsulates the rules for each type of field. Depending on
287 * the field, the correct set should be used to ensure proper validations.
288 *
289 * @generated from message buf.validate.FieldRules
290 */
291export type FieldRules = Message<"buf.validate.FieldRules"> & {
292 /**
293 * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation
294 * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.
295 *
296 * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for
297 * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will
298 * be same as the `expression`.
299 *
300 * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
301 *
302 * ```proto
303 * message MyMessage {
304 * // The field `value` must be greater than 42.
305 * optional int32 value = 1 [(buf.validate.field).cel_expression = "this > 42"];
306 * }
307 * ```
308 *
309 * @generated from field: repeated string cel_expression = 29;
310 */
311 celExpression: string[];
312
313 /**
314 * `cel` is a repeated field used to represent a textual expression
315 * in the Common Expression Language (CEL) syntax. For more information,
316 * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
317 *
318 * ```proto
319 * message MyMessage {
320 * // The field `value` must be greater than 42.
321 * optional int32 value = 1 [(buf.validate.field).cel = {
322 * id: "my_message.value",
323 * message: "value must be greater than 42",
324 * expression: "this > 42",
325 * }];
326 * }
327 * ```
328 *
329 * @generated from field: repeated buf.validate.Rule cel = 23;
330 */
331 cel: Rule[];
332
333 /**
334 * If `required` is true, the field must be set. A validation error is returned
335 * if the field is not set.
336 *
337 * ```proto
338 * syntax="proto3";
339 *
340 * message FieldsWithPresence {
341 * // Requires any string to be set, including the empty string.
342 * optional string link = 1 [
343 * (buf.validate.field).required = true
344 * ];
345 * // Requires true or false to be set.
346 * optional bool disabled = 2 [
347 * (buf.validate.field).required = true
348 * ];
349 * // Requires a message to be set, including the empty message.
350 * SomeMessage msg = 4 [
351 * (buf.validate.field).required = true
352 * ];
353 * }
354 * ```
355 *
356 * All fields in the example above track presence. By default, Protovalidate
357 * ignores rules on those fields if no value is set. `required` ensures that
358 * the fields are set and valid.
359 *
360 * Fields that don't track presence are always validated by Protovalidate,
361 * whether they are set or not. It is not necessary to add `required`. It
362 * can be added to indicate that the field cannot be the zero value.
363 *
364 * ```proto
365 * syntax="proto3";
366 *
367 * message FieldsWithoutPresence {
368 * // `string.email` always applies, even to an empty string.
369 * string link = 1 [
370 * (buf.validate.field).string.email = true
371 * ];
372 * // `repeated.min_items` always applies, even to an empty list.
373 * repeated string labels = 2 [
374 * (buf.validate.field).repeated.min_items = 1
375 * ];
376 * // `required`, for fields that don't track presence, indicates
377 * // the value of the field can't be the zero value.
378 * int32 zero_value_not_allowed = 3 [
379 * (buf.validate.field).required = true
380 * ];
381 * }
382 * ```
383 *
384 * To learn which fields track presence, see the
385 * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
386 *
387 * Note: While field rules can be applied to repeated items, map keys, and map
388 * values, the elements are always considered to be set. Consequently,
389 * specifying `repeated.items.required` is redundant.
390 *
391 * @generated from field: optional bool required = 25;
392 */
393 required: boolean;
394
395 /**
396 * Ignore validation rules on the field if its value matches the specified
397 * criteria. See the `Ignore` enum for details.
398 *
399 * ```proto
400 * message UpdateRequest {
401 * // The uri rule only applies if the field is not an empty string.
402 * string url = 1 [
403 * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
404 * (buf.validate.field).string.uri = true
405 * ];
406 * }
407 * ```
408 *
409 * @generated from field: optional buf.validate.Ignore ignore = 27;
410 */
411 ignore: Ignore;
412
413 /**
414 * @generated from oneof buf.validate.FieldRules.type
415 */
416 type: {
417 /**
418 * Scalar Field Types
419 *
420 * @generated from field: buf.validate.FloatRules float = 1;
421 */
422 value: FloatRules;
423 case: "float";
424 } | {
425 /**
426 * @generated from field: buf.validate.DoubleRules double = 2;
427 */
428 value: DoubleRules;
429 case: "double";
430 } | {
431 /**
432 * @generated from field: buf.validate.Int32Rules int32 = 3;
433 */
434 value: Int32Rules;
435 case: "int32";
436 } | {
437 /**
438 * @generated from field: buf.validate.Int64Rules int64 = 4;
439 */
440 value: Int64Rules;
441 case: "int64";
442 } | {
443 /**
444 * @generated from field: buf.validate.UInt32Rules uint32 = 5;
445 */
446 value: UInt32Rules;
447 case: "uint32";
448 } | {
449 /**
450 * @generated from field: buf.validate.UInt64Rules uint64 = 6;
451 */
452 value: UInt64Rules;
453 case: "uint64";
454 } | {
455 /**
456 * @generated from field: buf.validate.SInt32Rules sint32 = 7;
457 */
458 value: SInt32Rules;
459 case: "sint32";
460 } | {
461 /**
462 * @generated from field: buf.validate.SInt64Rules sint64 = 8;
463 */
464 value: SInt64Rules;
465 case: "sint64";
466 } | {
467 /**
468 * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;
469 */
470 value: Fixed32Rules;
471 case: "fixed32";
472 } | {
473 /**
474 * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;
475 */
476 value: Fixed64Rules;
477 case: "fixed64";
478 } | {
479 /**
480 * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;
481 */
482 value: SFixed32Rules;
483 case: "sfixed32";
484 } | {
485 /**
486 * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;
487 */
488 value: SFixed64Rules;
489 case: "sfixed64";
490 } | {
491 /**
492 * @generated from field: buf.validate.BoolRules bool = 13;
493 */
494 value: BoolRules;
495 case: "bool";
496 } | {
497 /**
498 * @generated from field: buf.validate.StringRules string = 14;
499 */
500 value: StringRules;
501 case: "string";
502 } | {
503 /**
504 * @generated from field: buf.validate.BytesRules bytes = 15;
505 */
506 value: BytesRules;
507 case: "bytes";
508 } | {
509 /**
510 * Complex Field Types
511 *
512 * @generated from field: buf.validate.EnumRules enum = 16;
513 */
514 value: EnumRules;
515 case: "enum";
516 } | {
517 /**
518 * @generated from field: buf.validate.RepeatedRules repeated = 18;
519 */
520 value: RepeatedRules;
521 case: "repeated";
522 } | {
523 /**
524 * @generated from field: buf.validate.MapRules map = 19;
525 */
526 value: MapRules;
527 case: "map";
528 } | {
529 /**
530 * Well-Known Field Types
531 *
532 * @generated from field: buf.validate.AnyRules any = 20;
533 */
534 value: AnyRules;
535 case: "any";
536 } | {
537 /**
538 * @generated from field: buf.validate.DurationRules duration = 21;
539 */
540 value: DurationRules;
541 case: "duration";
542 } | {
543 /**
544 * @generated from field: buf.validate.FieldMaskRules field_mask = 28;
545 */
546 value: FieldMaskRules;
547 case: "fieldMask";
548 } | {
549 /**
550 * @generated from field: buf.validate.TimestampRules timestamp = 22;
551 */
552 value: TimestampRules;
553 case: "timestamp";
554 } | { case: undefined; value?: undefined };
555};
556
557/**
558 * Describes the message buf.validate.FieldRules.
559 * Use `create(FieldRulesSchema)` to create a new message.
560 */
561export const FieldRulesSchema: GenMessage<FieldRules> = /*@__PURE__*/
562 messageDesc(file_buf_validate_validate, 4);
563
564/**
565 * PredefinedRules are custom rules that can be re-used with
566 * multiple fields.
567 *
568 * @generated from message buf.validate.PredefinedRules
569 */
570export type PredefinedRules = Message<"buf.validate.PredefinedRules"> & {
571 /**
572 * `cel` is a repeated field used to represent a textual expression
573 * in the Common Expression Language (CEL) syntax. For more information,
574 * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).
575 *
576 * ```proto
577 * message MyMessage {
578 * // The field `value` must be greater than 42.
579 * optional int32 value = 1 [(buf.validate.predefined).cel = {
580 * id: "my_message.value",
581 * message: "value must be greater than 42",
582 * expression: "this > 42",
583 * }];
584 * }
585 * ```
586 *
587 * @generated from field: repeated buf.validate.Rule cel = 1;
588 */
589 cel: Rule[];
590};
591
592/**
593 * Describes the message buf.validate.PredefinedRules.
594 * Use `create(PredefinedRulesSchema)` to create a new message.
595 */
596export const PredefinedRulesSchema: GenMessage<PredefinedRules> = /*@__PURE__*/
597 messageDesc(file_buf_validate_validate, 5);
598
599/**
600 * FloatRules describes the rules applied to `float` values. These
601 * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
602 *
603 * @generated from message buf.validate.FloatRules
604 */
605export type FloatRules = Message<"buf.validate.FloatRules"> & {
606 /**
607 * `const` requires the field value to exactly match the specified value. If
608 * the field value doesn't match, an error message is generated.
609 *
610 * ```proto
611 * message MyFloat {
612 * // value must equal 42.0
613 * float value = 1 [(buf.validate.field).float.const = 42.0];
614 * }
615 * ```
616 *
617 * @generated from field: optional float const = 1;
618 */
619 const: number;
620
621 /**
622 * @generated from oneof buf.validate.FloatRules.less_than
623 */
624 lessThan: {
625 /**
626 * `lt` requires the field value to be less than the specified value (field <
627 * value). If the field value is equal to or greater than the specified value,
628 * an error message is generated.
629 *
630 * ```proto
631 * message MyFloat {
632 * // value must be less than 10.0
633 * float value = 1 [(buf.validate.field).float.lt = 10.0];
634 * }
635 * ```
636 *
637 * @generated from field: float lt = 2;
638 */
639 value: number;
640 case: "lt";
641 } | {
642 /**
643 * `lte` requires the field value to be less than or equal to the specified
644 * value (field <= value). If the field value is greater than the specified
645 * value, an error message is generated.
646 *
647 * ```proto
648 * message MyFloat {
649 * // value must be less than or equal to 10.0
650 * float value = 1 [(buf.validate.field).float.lte = 10.0];
651 * }
652 * ```
653 *
654 * @generated from field: float lte = 3;
655 */
656 value: number;
657 case: "lte";
658 } | { case: undefined; value?: undefined };
659
660 /**
661 * @generated from oneof buf.validate.FloatRules.greater_than
662 */
663 greaterThan: {
664 /**
665 * `gt` requires the field value to be greater than the specified value
666 * (exclusive). If the value of `gt` is larger than a specified `lt` or
667 * `lte`, the range is reversed, and the field value must be outside the
668 * specified range. If the field value doesn't meet the required conditions,
669 * an error message is generated.
670 *
671 * ```proto
672 * message MyFloat {
673 * // value must be greater than 5.0 [float.gt]
674 * float value = 1 [(buf.validate.field).float.gt = 5.0];
675 *
676 * // value must be greater than 5 and less than 10.0 [float.gt_lt]
677 * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
678 *
679 * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
680 * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
681 * }
682 * ```
683 *
684 * @generated from field: float gt = 4;
685 */
686 value: number;
687 case: "gt";
688 } | {
689 /**
690 * `gte` requires the field value to be greater than or equal to the specified
691 * value (exclusive). If the value of `gte` is larger than a specified `lt`
692 * or `lte`, the range is reversed, and the field value must be outside the
693 * specified range. If the field value doesn't meet the required conditions,
694 * an error message is generated.
695 *
696 * ```proto
697 * message MyFloat {
698 * // value must be greater than or equal to 5.0 [float.gte]
699 * float value = 1 [(buf.validate.field).float.gte = 5.0];
700 *
701 * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
702 * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
703 *
704 * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
705 * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
706 * }
707 * ```
708 *
709 * @generated from field: float gte = 5;
710 */
711 value: number;
712 case: "gte";
713 } | { case: undefined; value?: undefined };
714
715 /**
716 * `in` requires the field value to be equal to one of the specified values.
717 * If the field value isn't one of the specified values, an error message
718 * is generated.
719 *
720 * ```proto
721 * message MyFloat {
722 * // value must be in list [1.0, 2.0, 3.0]
723 * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];
724 * }
725 * ```
726 *
727 * @generated from field: repeated float in = 6;
728 */
729 in: number[];
730
731 /**
732 * `in` requires the field value to not be equal to any of the specified
733 * values. If the field value is one of the specified values, an error
734 * message is generated.
735 *
736 * ```proto
737 * message MyFloat {
738 * // value must not be in list [1.0, 2.0, 3.0]
739 * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];
740 * }
741 * ```
742 *
743 * @generated from field: repeated float not_in = 7;
744 */
745 notIn: number[];
746
747 /**
748 * `finite` requires the field value to be finite. If the field value is
749 * infinite or NaN, an error message is generated.
750 *
751 * @generated from field: optional bool finite = 8;
752 */
753 finite: boolean;
754
755 /**
756 * `example` specifies values that the field may have. These values SHOULD
757 * conform to other rules. `example` values will not impact validation
758 * but may be used as helpful guidance on how to populate the given field.
759 *
760 * ```proto
761 * message MyFloat {
762 * float value = 1 [
763 * (buf.validate.field).float.example = 1.0,
764 * (buf.validate.field).float.example = inf
765 * ];
766 * }
767 * ```
768 *
769 * @generated from field: repeated float example = 9;
770 */
771 example: number[];
772};
773
774/**
775 * Describes the message buf.validate.FloatRules.
776 * Use `create(FloatRulesSchema)` to create a new message.
777 */
778export const FloatRulesSchema: GenMessage<FloatRules> = /*@__PURE__*/
779 messageDesc(file_buf_validate_validate, 6);
780
781/**
782 * DoubleRules describes the rules applied to `double` values. These
783 * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
784 *
785 * @generated from message buf.validate.DoubleRules
786 */
787export type DoubleRules = Message<"buf.validate.DoubleRules"> & {
788 /**
789 * `const` requires the field value to exactly match the specified value. If
790 * the field value doesn't match, an error message is generated.
791 *
792 * ```proto
793 * message MyDouble {
794 * // value must equal 42.0
795 * double value = 1 [(buf.validate.field).double.const = 42.0];
796 * }
797 * ```
798 *
799 * @generated from field: optional double const = 1;
800 */
801 const: number;
802
803 /**
804 * @generated from oneof buf.validate.DoubleRules.less_than
805 */
806 lessThan: {
807 /**
808 * `lt` requires the field value to be less than the specified value (field <
809 * value). If the field value is equal to or greater than the specified
810 * value, an error message is generated.
811 *
812 * ```proto
813 * message MyDouble {
814 * // value must be less than 10.0
815 * double value = 1 [(buf.validate.field).double.lt = 10.0];
816 * }
817 * ```
818 *
819 * @generated from field: double lt = 2;
820 */
821 value: number;
822 case: "lt";
823 } | {
824 /**
825 * `lte` requires the field value to be less than or equal to the specified value
826 * (field <= value). If the field value is greater than the specified value,
827 * an error message is generated.
828 *
829 * ```proto
830 * message MyDouble {
831 * // value must be less than or equal to 10.0
832 * double value = 1 [(buf.validate.field).double.lte = 10.0];
833 * }
834 * ```
835 *
836 * @generated from field: double lte = 3;
837 */
838 value: number;
839 case: "lte";
840 } | { case: undefined; value?: undefined };
841
842 /**
843 * @generated from oneof buf.validate.DoubleRules.greater_than
844 */
845 greaterThan: {
846 /**
847 * `gt` requires the field value to be greater than the specified value
848 * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
849 * the range is reversed, and the field value must be outside the specified
850 * range. If the field value doesn't meet the required conditions, an error
851 * message is generated.
852 *
853 * ```proto
854 * message MyDouble {
855 * // value must be greater than 5.0 [double.gt]
856 * double value = 1 [(buf.validate.field).double.gt = 5.0];
857 *
858 * // value must be greater than 5 and less than 10.0 [double.gt_lt]
859 * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
860 *
861 * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
862 * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
863 * }
864 * ```
865 *
866 * @generated from field: double gt = 4;
867 */
868 value: number;
869 case: "gt";
870 } | {
871 /**
872 * `gte` requires the field value to be greater than or equal to the specified
873 * value (exclusive). If the value of `gte` is larger than a specified `lt` or
874 * `lte`, the range is reversed, and the field value must be outside the
875 * specified range. If the field value doesn't meet the required conditions,
876 * an error message is generated.
877 *
878 * ```proto
879 * message MyDouble {
880 * // value must be greater than or equal to 5.0 [double.gte]
881 * double value = 1 [(buf.validate.field).double.gte = 5.0];
882 *
883 * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
884 * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
885 *
886 * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
887 * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
888 * }
889 * ```
890 *
891 * @generated from field: double gte = 5;
892 */
893 value: number;
894 case: "gte";
895 } | { case: undefined; value?: undefined };
896
897 /**
898 * `in` requires the field value to be equal to one of the specified values.
899 * If the field value isn't one of the specified values, an error message is
900 * generated.
901 *
902 * ```proto
903 * message MyDouble {
904 * // value must be in list [1.0, 2.0, 3.0]
905 * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];
906 * }
907 * ```
908 *
909 * @generated from field: repeated double in = 6;
910 */
911 in: number[];
912
913 /**
914 * `not_in` requires the field value to not be equal to any of the specified
915 * values. If the field value is one of the specified values, an error
916 * message is generated.
917 *
918 * ```proto
919 * message MyDouble {
920 * // value must not be in list [1.0, 2.0, 3.0]
921 * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];
922 * }
923 * ```
924 *
925 * @generated from field: repeated double not_in = 7;
926 */
927 notIn: number[];
928
929 /**
930 * `finite` requires the field value to be finite. If the field value is
931 * infinite or NaN, an error message is generated.
932 *
933 * @generated from field: optional bool finite = 8;
934 */
935 finite: boolean;
936
937 /**
938 * `example` specifies values that the field may have. These values SHOULD
939 * conform to other rules. `example` values will not impact validation
940 * but may be used as helpful guidance on how to populate the given field.
941 *
942 * ```proto
943 * message MyDouble {
944 * double value = 1 [
945 * (buf.validate.field).double.example = 1.0,
946 * (buf.validate.field).double.example = inf
947 * ];
948 * }
949 * ```
950 *
951 * @generated from field: repeated double example = 9;
952 */
953 example: number[];
954};
955
956/**
957 * Describes the message buf.validate.DoubleRules.
958 * Use `create(DoubleRulesSchema)` to create a new message.
959 */
960export const DoubleRulesSchema: GenMessage<DoubleRules> = /*@__PURE__*/
961 messageDesc(file_buf_validate_validate, 7);
962
963/**
964 * Int32Rules describes the rules applied to `int32` values. These
965 * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
966 *
967 * @generated from message buf.validate.Int32Rules
968 */
969export type Int32Rules = Message<"buf.validate.Int32Rules"> & {
970 /**
971 * `const` requires the field value to exactly match the specified value. If
972 * the field value doesn't match, an error message is generated.
973 *
974 * ```proto
975 * message MyInt32 {
976 * // value must equal 42
977 * int32 value = 1 [(buf.validate.field).int32.const = 42];
978 * }
979 * ```
980 *
981 * @generated from field: optional int32 const = 1;
982 */
983 const: number;
984
985 /**
986 * @generated from oneof buf.validate.Int32Rules.less_than
987 */
988 lessThan: {
989 /**
990 * `lt` requires the field value to be less than the specified value (field
991 * < value). If the field value is equal to or greater than the specified
992 * value, an error message is generated.
993 *
994 * ```proto
995 * message MyInt32 {
996 * // value must be less than 10
997 * int32 value = 1 [(buf.validate.field).int32.lt = 10];
998 * }
999 * ```
1000 *
1001 * @generated from field: int32 lt = 2;
1002 */
1003 value: number;
1004 case: "lt";
1005 } | {
1006 /**
1007 * `lte` requires the field value to be less than or equal to the specified
1008 * value (field <= value). If the field value is greater than the specified
1009 * value, an error message is generated.
1010 *
1011 * ```proto
1012 * message MyInt32 {
1013 * // value must be less than or equal to 10
1014 * int32 value = 1 [(buf.validate.field).int32.lte = 10];
1015 * }
1016 * ```
1017 *
1018 * @generated from field: int32 lte = 3;
1019 */
1020 value: number;
1021 case: "lte";
1022 } | { case: undefined; value?: undefined };
1023
1024 /**
1025 * @generated from oneof buf.validate.Int32Rules.greater_than
1026 */
1027 greaterThan: {
1028 /**
1029 * `gt` requires the field value to be greater than the specified value
1030 * (exclusive). If the value of `gt` is larger than a specified `lt` or
1031 * `lte`, the range is reversed, and the field value must be outside the
1032 * specified range. If the field value doesn't meet the required conditions,
1033 * an error message is generated.
1034 *
1035 * ```proto
1036 * message MyInt32 {
1037 * // value must be greater than 5 [int32.gt]
1038 * int32 value = 1 [(buf.validate.field).int32.gt = 5];
1039 *
1040 * // value must be greater than 5 and less than 10 [int32.gt_lt]
1041 * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
1042 *
1043 * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
1044 * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
1045 * }
1046 * ```
1047 *
1048 * @generated from field: int32 gt = 4;
1049 */
1050 value: number;
1051 case: "gt";
1052 } | {
1053 /**
1054 * `gte` requires the field value to be greater than or equal to the specified value
1055 * (exclusive). If the value of `gte` is larger than a specified `lt` or
1056 * `lte`, the range is reversed, and the field value must be outside the
1057 * specified range. If the field value doesn't meet the required conditions,
1058 * an error message is generated.
1059 *
1060 * ```proto
1061 * message MyInt32 {
1062 * // value must be greater than or equal to 5 [int32.gte]
1063 * int32 value = 1 [(buf.validate.field).int32.gte = 5];
1064 *
1065 * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
1066 * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
1067 *
1068 * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
1069 * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
1070 * }
1071 * ```
1072 *
1073 * @generated from field: int32 gte = 5;
1074 */
1075 value: number;
1076 case: "gte";
1077 } | { case: undefined; value?: undefined };
1078
1079 /**
1080 * `in` requires the field value to be equal to one of the specified values.
1081 * If the field value isn't one of the specified values, an error message is
1082 * generated.
1083 *
1084 * ```proto
1085 * message MyInt32 {
1086 * // value must be in list [1, 2, 3]
1087 * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];
1088 * }
1089 * ```
1090 *
1091 * @generated from field: repeated int32 in = 6;
1092 */
1093 in: number[];
1094
1095 /**
1096 * `not_in` requires the field value to not be equal to any of the specified
1097 * values. If the field value is one of the specified values, an error message
1098 * is generated.
1099 *
1100 * ```proto
1101 * message MyInt32 {
1102 * // value must not be in list [1, 2, 3]
1103 * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];
1104 * }
1105 * ```
1106 *
1107 * @generated from field: repeated int32 not_in = 7;
1108 */
1109 notIn: number[];
1110
1111 /**
1112 * `example` specifies values that the field may have. These values SHOULD
1113 * conform to other rules. `example` values will not impact validation
1114 * but may be used as helpful guidance on how to populate the given field.
1115 *
1116 * ```proto
1117 * message MyInt32 {
1118 * int32 value = 1 [
1119 * (buf.validate.field).int32.example = 1,
1120 * (buf.validate.field).int32.example = -10
1121 * ];
1122 * }
1123 * ```
1124 *
1125 * @generated from field: repeated int32 example = 8;
1126 */
1127 example: number[];
1128};
1129
1130/**
1131 * Describes the message buf.validate.Int32Rules.
1132 * Use `create(Int32RulesSchema)` to create a new message.
1133 */
1134export const Int32RulesSchema: GenMessage<Int32Rules> = /*@__PURE__*/
1135 messageDesc(file_buf_validate_validate, 8);
1136
1137/**
1138 * Int64Rules describes the rules applied to `int64` values. These
1139 * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
1140 *
1141 * @generated from message buf.validate.Int64Rules
1142 */
1143export type Int64Rules = Message<"buf.validate.Int64Rules"> & {
1144 /**
1145 * `const` requires the field value to exactly match the specified value. If
1146 * the field value doesn't match, an error message is generated.
1147 *
1148 * ```proto
1149 * message MyInt64 {
1150 * // value must equal 42
1151 * int64 value = 1 [(buf.validate.field).int64.const = 42];
1152 * }
1153 * ```
1154 *
1155 * @generated from field: optional int64 const = 1;
1156 */
1157 const: bigint;
1158
1159 /**
1160 * @generated from oneof buf.validate.Int64Rules.less_than
1161 */
1162 lessThan: {
1163 /**
1164 * `lt` requires the field value to be less than the specified value (field <
1165 * value). If the field value is equal to or greater than the specified value,
1166 * an error message is generated.
1167 *
1168 * ```proto
1169 * message MyInt64 {
1170 * // value must be less than 10
1171 * int64 value = 1 [(buf.validate.field).int64.lt = 10];
1172 * }
1173 * ```
1174 *
1175 * @generated from field: int64 lt = 2;
1176 */
1177 value: bigint;
1178 case: "lt";
1179 } | {
1180 /**
1181 * `lte` requires the field value to be less than or equal to the specified
1182 * value (field <= value). If the field value is greater than the specified
1183 * value, an error message is generated.
1184 *
1185 * ```proto
1186 * message MyInt64 {
1187 * // value must be less than or equal to 10
1188 * int64 value = 1 [(buf.validate.field).int64.lte = 10];
1189 * }
1190 * ```
1191 *
1192 * @generated from field: int64 lte = 3;
1193 */
1194 value: bigint;
1195 case: "lte";
1196 } | { case: undefined; value?: undefined };
1197
1198 /**
1199 * @generated from oneof buf.validate.Int64Rules.greater_than
1200 */
1201 greaterThan: {
1202 /**
1203 * `gt` requires the field value to be greater than the specified value
1204 * (exclusive). If the value of `gt` is larger than a specified `lt` or
1205 * `lte`, the range is reversed, and the field value must be outside the
1206 * specified range. If the field value doesn't meet the required conditions,
1207 * an error message is generated.
1208 *
1209 * ```proto
1210 * message MyInt64 {
1211 * // value must be greater than 5 [int64.gt]
1212 * int64 value = 1 [(buf.validate.field).int64.gt = 5];
1213 *
1214 * // value must be greater than 5 and less than 10 [int64.gt_lt]
1215 * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
1216 *
1217 * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
1218 * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
1219 * }
1220 * ```
1221 *
1222 * @generated from field: int64 gt = 4;
1223 */
1224 value: bigint;
1225 case: "gt";
1226 } | {
1227 /**
1228 * `gte` requires the field value to be greater than or equal to the specified
1229 * value (exclusive). If the value of `gte` is larger than a specified `lt`
1230 * or `lte`, the range is reversed, and the field value must be outside the
1231 * specified range. If the field value doesn't meet the required conditions,
1232 * an error message is generated.
1233 *
1234 * ```proto
1235 * message MyInt64 {
1236 * // value must be greater than or equal to 5 [int64.gte]
1237 * int64 value = 1 [(buf.validate.field).int64.gte = 5];
1238 *
1239 * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
1240 * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
1241 *
1242 * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
1243 * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
1244 * }
1245 * ```
1246 *
1247 * @generated from field: int64 gte = 5;
1248 */
1249 value: bigint;
1250 case: "gte";
1251 } | { case: undefined; value?: undefined };
1252
1253 /**
1254 * `in` requires the field value to be equal to one of the specified values.
1255 * If the field value isn't one of the specified values, an error message is
1256 * generated.
1257 *
1258 * ```proto
1259 * message MyInt64 {
1260 * // value must be in list [1, 2, 3]
1261 * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];
1262 * }
1263 * ```
1264 *
1265 * @generated from field: repeated int64 in = 6;
1266 */
1267 in: bigint[];
1268
1269 /**
1270 * `not_in` requires the field value to not be equal to any of the specified
1271 * values. If the field value is one of the specified values, an error
1272 * message is generated.
1273 *
1274 * ```proto
1275 * message MyInt64 {
1276 * // value must not be in list [1, 2, 3]
1277 * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];
1278 * }
1279 * ```
1280 *
1281 * @generated from field: repeated int64 not_in = 7;
1282 */
1283 notIn: bigint[];
1284
1285 /**
1286 * `example` specifies values that the field may have. These values SHOULD
1287 * conform to other rules. `example` values will not impact validation
1288 * but may be used as helpful guidance on how to populate the given field.
1289 *
1290 * ```proto
1291 * message MyInt64 {
1292 * int64 value = 1 [
1293 * (buf.validate.field).int64.example = 1,
1294 * (buf.validate.field).int64.example = -10
1295 * ];
1296 * }
1297 * ```
1298 *
1299 * @generated from field: repeated int64 example = 9;
1300 */
1301 example: bigint[];
1302};
1303
1304/**
1305 * Describes the message buf.validate.Int64Rules.
1306 * Use `create(Int64RulesSchema)` to create a new message.
1307 */
1308export const Int64RulesSchema: GenMessage<Int64Rules> = /*@__PURE__*/
1309 messageDesc(file_buf_validate_validate, 9);
1310
1311/**
1312 * UInt32Rules describes the rules applied to `uint32` values. These
1313 * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
1314 *
1315 * @generated from message buf.validate.UInt32Rules
1316 */
1317export type UInt32Rules = Message<"buf.validate.UInt32Rules"> & {
1318 /**
1319 * `const` requires the field value to exactly match the specified value. If
1320 * the field value doesn't match, an error message is generated.
1321 *
1322 * ```proto
1323 * message MyUInt32 {
1324 * // value must equal 42
1325 * uint32 value = 1 [(buf.validate.field).uint32.const = 42];
1326 * }
1327 * ```
1328 *
1329 * @generated from field: optional uint32 const = 1;
1330 */
1331 const: number;
1332
1333 /**
1334 * @generated from oneof buf.validate.UInt32Rules.less_than
1335 */
1336 lessThan: {
1337 /**
1338 * `lt` requires the field value to be less than the specified value (field <
1339 * value). If the field value is equal to or greater than the specified value,
1340 * an error message is generated.
1341 *
1342 * ```proto
1343 * message MyUInt32 {
1344 * // value must be less than 10
1345 * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
1346 * }
1347 * ```
1348 *
1349 * @generated from field: uint32 lt = 2;
1350 */
1351 value: number;
1352 case: "lt";
1353 } | {
1354 /**
1355 * `lte` requires the field value to be less than or equal to the specified
1356 * value (field <= value). If the field value is greater than the specified
1357 * value, an error message is generated.
1358 *
1359 * ```proto
1360 * message MyUInt32 {
1361 * // value must be less than or equal to 10
1362 * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
1363 * }
1364 * ```
1365 *
1366 * @generated from field: uint32 lte = 3;
1367 */
1368 value: number;
1369 case: "lte";
1370 } | { case: undefined; value?: undefined };
1371
1372 /**
1373 * @generated from oneof buf.validate.UInt32Rules.greater_than
1374 */
1375 greaterThan: {
1376 /**
1377 * `gt` requires the field value to be greater than the specified value
1378 * (exclusive). If the value of `gt` is larger than a specified `lt` or
1379 * `lte`, the range is reversed, and the field value must be outside the
1380 * specified range. If the field value doesn't meet the required conditions,
1381 * an error message is generated.
1382 *
1383 * ```proto
1384 * message MyUInt32 {
1385 * // value must be greater than 5 [uint32.gt]
1386 * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
1387 *
1388 * // value must be greater than 5 and less than 10 [uint32.gt_lt]
1389 * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
1390 *
1391 * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
1392 * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
1393 * }
1394 * ```
1395 *
1396 * @generated from field: uint32 gt = 4;
1397 */
1398 value: number;
1399 case: "gt";
1400 } | {
1401 /**
1402 * `gte` requires the field value to be greater than or equal to the specified
1403 * value (exclusive). If the value of `gte` is larger than a specified `lt`
1404 * or `lte`, the range is reversed, and the field value must be outside the
1405 * specified range. If the field value doesn't meet the required conditions,
1406 * an error message is generated.
1407 *
1408 * ```proto
1409 * message MyUInt32 {
1410 * // value must be greater than or equal to 5 [uint32.gte]
1411 * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
1412 *
1413 * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
1414 * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
1415 *
1416 * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
1417 * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
1418 * }
1419 * ```
1420 *
1421 * @generated from field: uint32 gte = 5;
1422 */
1423 value: number;
1424 case: "gte";
1425 } | { case: undefined; value?: undefined };
1426
1427 /**
1428 * `in` requires the field value to be equal to one of the specified values.
1429 * If the field value isn't one of the specified values, an error message is
1430 * generated.
1431 *
1432 * ```proto
1433 * message MyUInt32 {
1434 * // value must be in list [1, 2, 3]
1435 * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];
1436 * }
1437 * ```
1438 *
1439 * @generated from field: repeated uint32 in = 6;
1440 */
1441 in: number[];
1442
1443 /**
1444 * `not_in` requires the field value to not be equal to any of the specified
1445 * values. If the field value is one of the specified values, an error
1446 * message is generated.
1447 *
1448 * ```proto
1449 * message MyUInt32 {
1450 * // value must not be in list [1, 2, 3]
1451 * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];
1452 * }
1453 * ```
1454 *
1455 * @generated from field: repeated uint32 not_in = 7;
1456 */
1457 notIn: number[];
1458
1459 /**
1460 * `example` specifies values that the field may have. These values SHOULD
1461 * conform to other rules. `example` values will not impact validation
1462 * but may be used as helpful guidance on how to populate the given field.
1463 *
1464 * ```proto
1465 * message MyUInt32 {
1466 * uint32 value = 1 [
1467 * (buf.validate.field).uint32.example = 1,
1468 * (buf.validate.field).uint32.example = 10
1469 * ];
1470 * }
1471 * ```
1472 *
1473 * @generated from field: repeated uint32 example = 8;
1474 */
1475 example: number[];
1476};
1477
1478/**
1479 * Describes the message buf.validate.UInt32Rules.
1480 * Use `create(UInt32RulesSchema)` to create a new message.
1481 */
1482export const UInt32RulesSchema: GenMessage<UInt32Rules> = /*@__PURE__*/
1483 messageDesc(file_buf_validate_validate, 10);
1484
1485/**
1486 * UInt64Rules describes the rules applied to `uint64` values. These
1487 * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
1488 *
1489 * @generated from message buf.validate.UInt64Rules
1490 */
1491export type UInt64Rules = Message<"buf.validate.UInt64Rules"> & {
1492 /**
1493 * `const` requires the field value to exactly match the specified value. If
1494 * the field value doesn't match, an error message is generated.
1495 *
1496 * ```proto
1497 * message MyUInt64 {
1498 * // value must equal 42
1499 * uint64 value = 1 [(buf.validate.field).uint64.const = 42];
1500 * }
1501 * ```
1502 *
1503 * @generated from field: optional uint64 const = 1;
1504 */
1505 const: bigint;
1506
1507 /**
1508 * @generated from oneof buf.validate.UInt64Rules.less_than
1509 */
1510 lessThan: {
1511 /**
1512 * `lt` requires the field value to be less than the specified value (field <
1513 * value). If the field value is equal to or greater than the specified value,
1514 * an error message is generated.
1515 *
1516 * ```proto
1517 * message MyUInt64 {
1518 * // value must be less than 10
1519 * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
1520 * }
1521 * ```
1522 *
1523 * @generated from field: uint64 lt = 2;
1524 */
1525 value: bigint;
1526 case: "lt";
1527 } | {
1528 /**
1529 * `lte` requires the field value to be less than or equal to the specified
1530 * value (field <= value). If the field value is greater than the specified
1531 * value, an error message is generated.
1532 *
1533 * ```proto
1534 * message MyUInt64 {
1535 * // value must be less than or equal to 10
1536 * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
1537 * }
1538 * ```
1539 *
1540 * @generated from field: uint64 lte = 3;
1541 */
1542 value: bigint;
1543 case: "lte";
1544 } | { case: undefined; value?: undefined };
1545
1546 /**
1547 * @generated from oneof buf.validate.UInt64Rules.greater_than
1548 */
1549 greaterThan: {
1550 /**
1551 * `gt` requires the field value to be greater than the specified value
1552 * (exclusive). If the value of `gt` is larger than a specified `lt` or
1553 * `lte`, the range is reversed, and the field value must be outside the
1554 * specified range. If the field value doesn't meet the required conditions,
1555 * an error message is generated.
1556 *
1557 * ```proto
1558 * message MyUInt64 {
1559 * // value must be greater than 5 [uint64.gt]
1560 * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
1561 *
1562 * // value must be greater than 5 and less than 10 [uint64.gt_lt]
1563 * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
1564 *
1565 * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
1566 * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
1567 * }
1568 * ```
1569 *
1570 * @generated from field: uint64 gt = 4;
1571 */
1572 value: bigint;
1573 case: "gt";
1574 } | {
1575 /**
1576 * `gte` requires the field value to be greater than or equal to the specified
1577 * value (exclusive). If the value of `gte` is larger than a specified `lt`
1578 * or `lte`, the range is reversed, and the field value must be outside the
1579 * specified range. If the field value doesn't meet the required conditions,
1580 * an error message is generated.
1581 *
1582 * ```proto
1583 * message MyUInt64 {
1584 * // value must be greater than or equal to 5 [uint64.gte]
1585 * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
1586 *
1587 * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
1588 * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
1589 *
1590 * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
1591 * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
1592 * }
1593 * ```
1594 *
1595 * @generated from field: uint64 gte = 5;
1596 */
1597 value: bigint;
1598 case: "gte";
1599 } | { case: undefined; value?: undefined };
1600
1601 /**
1602 * `in` requires the field value to be equal to one of the specified values.
1603 * If the field value isn't one of the specified values, an error message is
1604 * generated.
1605 *
1606 * ```proto
1607 * message MyUInt64 {
1608 * // value must be in list [1, 2, 3]
1609 * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];
1610 * }
1611 * ```
1612 *
1613 * @generated from field: repeated uint64 in = 6;
1614 */
1615 in: bigint[];
1616
1617 /**
1618 * `not_in` requires the field value to not be equal to any of the specified
1619 * values. If the field value is one of the specified values, an error
1620 * message is generated.
1621 *
1622 * ```proto
1623 * message MyUInt64 {
1624 * // value must not be in list [1, 2, 3]
1625 * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];
1626 * }
1627 * ```
1628 *
1629 * @generated from field: repeated uint64 not_in = 7;
1630 */
1631 notIn: bigint[];
1632
1633 /**
1634 * `example` specifies values that the field may have. These values SHOULD
1635 * conform to other rules. `example` values will not impact validation
1636 * but may be used as helpful guidance on how to populate the given field.
1637 *
1638 * ```proto
1639 * message MyUInt64 {
1640 * uint64 value = 1 [
1641 * (buf.validate.field).uint64.example = 1,
1642 * (buf.validate.field).uint64.example = -10
1643 * ];
1644 * }
1645 * ```
1646 *
1647 * @generated from field: repeated uint64 example = 8;
1648 */
1649 example: bigint[];
1650};
1651
1652/**
1653 * Describes the message buf.validate.UInt64Rules.
1654 * Use `create(UInt64RulesSchema)` to create a new message.
1655 */
1656export const UInt64RulesSchema: GenMessage<UInt64Rules> = /*@__PURE__*/
1657 messageDesc(file_buf_validate_validate, 11);
1658
1659/**
1660 * SInt32Rules describes the rules applied to `sint32` values.
1661 *
1662 * @generated from message buf.validate.SInt32Rules
1663 */
1664export type SInt32Rules = Message<"buf.validate.SInt32Rules"> & {
1665 /**
1666 * `const` requires the field value to exactly match the specified value. If
1667 * the field value doesn't match, an error message is generated.
1668 *
1669 * ```proto
1670 * message MySInt32 {
1671 * // value must equal 42
1672 * sint32 value = 1 [(buf.validate.field).sint32.const = 42];
1673 * }
1674 * ```
1675 *
1676 * @generated from field: optional sint32 const = 1;
1677 */
1678 const: number;
1679
1680 /**
1681 * @generated from oneof buf.validate.SInt32Rules.less_than
1682 */
1683 lessThan: {
1684 /**
1685 * `lt` requires the field value to be less than the specified value (field
1686 * < value). If the field value is equal to or greater than the specified
1687 * value, an error message is generated.
1688 *
1689 * ```proto
1690 * message MySInt32 {
1691 * // value must be less than 10
1692 * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
1693 * }
1694 * ```
1695 *
1696 * @generated from field: sint32 lt = 2;
1697 */
1698 value: number;
1699 case: "lt";
1700 } | {
1701 /**
1702 * `lte` requires the field value to be less than or equal to the specified
1703 * value (field <= value). If the field value is greater than the specified
1704 * value, an error message is generated.
1705 *
1706 * ```proto
1707 * message MySInt32 {
1708 * // value must be less than or equal to 10
1709 * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
1710 * }
1711 * ```
1712 *
1713 * @generated from field: sint32 lte = 3;
1714 */
1715 value: number;
1716 case: "lte";
1717 } | { case: undefined; value?: undefined };
1718
1719 /**
1720 * @generated from oneof buf.validate.SInt32Rules.greater_than
1721 */
1722 greaterThan: {
1723 /**
1724 * `gt` requires the field value to be greater than the specified value
1725 * (exclusive). If the value of `gt` is larger than a specified `lt` or
1726 * `lte`, the range is reversed, and the field value must be outside the
1727 * specified range. If the field value doesn't meet the required conditions,
1728 * an error message is generated.
1729 *
1730 * ```proto
1731 * message MySInt32 {
1732 * // value must be greater than 5 [sint32.gt]
1733 * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
1734 *
1735 * // value must be greater than 5 and less than 10 [sint32.gt_lt]
1736 * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
1737 *
1738 * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
1739 * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
1740 * }
1741 * ```
1742 *
1743 * @generated from field: sint32 gt = 4;
1744 */
1745 value: number;
1746 case: "gt";
1747 } | {
1748 /**
1749 * `gte` requires the field value to be greater than or equal to the specified
1750 * value (exclusive). If the value of `gte` is larger than a specified `lt`
1751 * or `lte`, the range is reversed, and the field value must be outside the
1752 * specified range. If the field value doesn't meet the required conditions,
1753 * an error message is generated.
1754 *
1755 * ```proto
1756 * message MySInt32 {
1757 * // value must be greater than or equal to 5 [sint32.gte]
1758 * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
1759 *
1760 * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
1761 * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
1762 *
1763 * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
1764 * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
1765 * }
1766 * ```
1767 *
1768 * @generated from field: sint32 gte = 5;
1769 */
1770 value: number;
1771 case: "gte";
1772 } | { case: undefined; value?: undefined };
1773
1774 /**
1775 * `in` requires the field value to be equal to one of the specified values.
1776 * If the field value isn't one of the specified values, an error message is
1777 * generated.
1778 *
1779 * ```proto
1780 * message MySInt32 {
1781 * // value must be in list [1, 2, 3]
1782 * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];
1783 * }
1784 * ```
1785 *
1786 * @generated from field: repeated sint32 in = 6;
1787 */
1788 in: number[];
1789
1790 /**
1791 * `not_in` requires the field value to not be equal to any of the specified
1792 * values. If the field value is one of the specified values, an error
1793 * message is generated.
1794 *
1795 * ```proto
1796 * message MySInt32 {
1797 * // value must not be in list [1, 2, 3]
1798 * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];
1799 * }
1800 * ```
1801 *
1802 * @generated from field: repeated sint32 not_in = 7;
1803 */
1804 notIn: number[];
1805
1806 /**
1807 * `example` specifies values that the field may have. These values SHOULD
1808 * conform to other rules. `example` values will not impact validation
1809 * but may be used as helpful guidance on how to populate the given field.
1810 *
1811 * ```proto
1812 * message MySInt32 {
1813 * sint32 value = 1 [
1814 * (buf.validate.field).sint32.example = 1,
1815 * (buf.validate.field).sint32.example = -10
1816 * ];
1817 * }
1818 * ```
1819 *
1820 * @generated from field: repeated sint32 example = 8;
1821 */
1822 example: number[];
1823};
1824
1825/**
1826 * Describes the message buf.validate.SInt32Rules.
1827 * Use `create(SInt32RulesSchema)` to create a new message.
1828 */
1829export const SInt32RulesSchema: GenMessage<SInt32Rules> = /*@__PURE__*/
1830 messageDesc(file_buf_validate_validate, 12);
1831
1832/**
1833 * SInt64Rules describes the rules applied to `sint64` values.
1834 *
1835 * @generated from message buf.validate.SInt64Rules
1836 */
1837export type SInt64Rules = Message<"buf.validate.SInt64Rules"> & {
1838 /**
1839 * `const` requires the field value to exactly match the specified value. If
1840 * the field value doesn't match, an error message is generated.
1841 *
1842 * ```proto
1843 * message MySInt64 {
1844 * // value must equal 42
1845 * sint64 value = 1 [(buf.validate.field).sint64.const = 42];
1846 * }
1847 * ```
1848 *
1849 * @generated from field: optional sint64 const = 1;
1850 */
1851 const: bigint;
1852
1853 /**
1854 * @generated from oneof buf.validate.SInt64Rules.less_than
1855 */
1856 lessThan: {
1857 /**
1858 * `lt` requires the field value to be less than the specified value (field
1859 * < value). If the field value is equal to or greater than the specified
1860 * value, an error message is generated.
1861 *
1862 * ```proto
1863 * message MySInt64 {
1864 * // value must be less than 10
1865 * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
1866 * }
1867 * ```
1868 *
1869 * @generated from field: sint64 lt = 2;
1870 */
1871 value: bigint;
1872 case: "lt";
1873 } | {
1874 /**
1875 * `lte` requires the field value to be less than or equal to the specified
1876 * value (field <= value). If the field value is greater than the specified
1877 * value, an error message is generated.
1878 *
1879 * ```proto
1880 * message MySInt64 {
1881 * // value must be less than or equal to 10
1882 * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
1883 * }
1884 * ```
1885 *
1886 * @generated from field: sint64 lte = 3;
1887 */
1888 value: bigint;
1889 case: "lte";
1890 } | { case: undefined; value?: undefined };
1891
1892 /**
1893 * @generated from oneof buf.validate.SInt64Rules.greater_than
1894 */
1895 greaterThan: {
1896 /**
1897 * `gt` requires the field value to be greater than the specified value
1898 * (exclusive). If the value of `gt` is larger than a specified `lt` or
1899 * `lte`, the range is reversed, and the field value must be outside the
1900 * specified range. If the field value doesn't meet the required conditions,
1901 * an error message is generated.
1902 *
1903 * ```proto
1904 * message MySInt64 {
1905 * // value must be greater than 5 [sint64.gt]
1906 * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
1907 *
1908 * // value must be greater than 5 and less than 10 [sint64.gt_lt]
1909 * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
1910 *
1911 * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
1912 * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
1913 * }
1914 * ```
1915 *
1916 * @generated from field: sint64 gt = 4;
1917 */
1918 value: bigint;
1919 case: "gt";
1920 } | {
1921 /**
1922 * `gte` requires the field value to be greater than or equal to the specified
1923 * value (exclusive). If the value of `gte` is larger than a specified `lt`
1924 * or `lte`, the range is reversed, and the field value must be outside the
1925 * specified range. If the field value doesn't meet the required conditions,
1926 * an error message is generated.
1927 *
1928 * ```proto
1929 * message MySInt64 {
1930 * // value must be greater than or equal to 5 [sint64.gte]
1931 * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
1932 *
1933 * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
1934 * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
1935 *
1936 * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
1937 * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
1938 * }
1939 * ```
1940 *
1941 * @generated from field: sint64 gte = 5;
1942 */
1943 value: bigint;
1944 case: "gte";
1945 } | { case: undefined; value?: undefined };
1946
1947 /**
1948 * `in` requires the field value to be equal to one of the specified values.
1949 * If the field value isn't one of the specified values, an error message
1950 * is generated.
1951 *
1952 * ```proto
1953 * message MySInt64 {
1954 * // value must be in list [1, 2, 3]
1955 * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];
1956 * }
1957 * ```
1958 *
1959 * @generated from field: repeated sint64 in = 6;
1960 */
1961 in: bigint[];
1962
1963 /**
1964 * `not_in` requires the field value to not be equal to any of the specified
1965 * values. If the field value is one of the specified values, an error
1966 * message is generated.
1967 *
1968 * ```proto
1969 * message MySInt64 {
1970 * // value must not be in list [1, 2, 3]
1971 * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];
1972 * }
1973 * ```
1974 *
1975 * @generated from field: repeated sint64 not_in = 7;
1976 */
1977 notIn: bigint[];
1978
1979 /**
1980 * `example` specifies values that the field may have. These values SHOULD
1981 * conform to other rules. `example` values will not impact validation
1982 * but may be used as helpful guidance on how to populate the given field.
1983 *
1984 * ```proto
1985 * message MySInt64 {
1986 * sint64 value = 1 [
1987 * (buf.validate.field).sint64.example = 1,
1988 * (buf.validate.field).sint64.example = -10
1989 * ];
1990 * }
1991 * ```
1992 *
1993 * @generated from field: repeated sint64 example = 8;
1994 */
1995 example: bigint[];
1996};
1997
1998/**
1999 * Describes the message buf.validate.SInt64Rules.
2000 * Use `create(SInt64RulesSchema)` to create a new message.
2001 */
2002export const SInt64RulesSchema: GenMessage<SInt64Rules> = /*@__PURE__*/
2003 messageDesc(file_buf_validate_validate, 13);
2004
2005/**
2006 * Fixed32Rules describes the rules applied to `fixed32` values.
2007 *
2008 * @generated from message buf.validate.Fixed32Rules
2009 */
2010export type Fixed32Rules = Message<"buf.validate.Fixed32Rules"> & {
2011 /**
2012 * `const` requires the field value to exactly match the specified value.
2013 * If the field value doesn't match, an error message is generated.
2014 *
2015 * ```proto
2016 * message MyFixed32 {
2017 * // value must equal 42
2018 * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
2019 * }
2020 * ```
2021 *
2022 * @generated from field: optional fixed32 const = 1;
2023 */
2024 const: number;
2025
2026 /**
2027 * @generated from oneof buf.validate.Fixed32Rules.less_than
2028 */
2029 lessThan: {
2030 /**
2031 * `lt` requires the field value to be less than the specified value (field <
2032 * value). If the field value is equal to or greater than the specified value,
2033 * an error message is generated.
2034 *
2035 * ```proto
2036 * message MyFixed32 {
2037 * // value must be less than 10
2038 * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
2039 * }
2040 * ```
2041 *
2042 * @generated from field: fixed32 lt = 2;
2043 */
2044 value: number;
2045 case: "lt";
2046 } | {
2047 /**
2048 * `lte` requires the field value to be less than or equal to the specified
2049 * value (field <= value). If the field value is greater than the specified
2050 * value, an error message is generated.
2051 *
2052 * ```proto
2053 * message MyFixed32 {
2054 * // value must be less than or equal to 10
2055 * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
2056 * }
2057 * ```
2058 *
2059 * @generated from field: fixed32 lte = 3;
2060 */
2061 value: number;
2062 case: "lte";
2063 } | { case: undefined; value?: undefined };
2064
2065 /**
2066 * @generated from oneof buf.validate.Fixed32Rules.greater_than
2067 */
2068 greaterThan: {
2069 /**
2070 * `gt` requires the field value to be greater than the specified value
2071 * (exclusive). If the value of `gt` is larger than a specified `lt` or
2072 * `lte`, the range is reversed, and the field value must be outside the
2073 * specified range. If the field value doesn't meet the required conditions,
2074 * an error message is generated.
2075 *
2076 * ```proto
2077 * message MyFixed32 {
2078 * // value must be greater than 5 [fixed32.gt]
2079 * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
2080 *
2081 * // value must be greater than 5 and less than 10 [fixed32.gt_lt]
2082 * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
2083 *
2084 * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
2085 * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
2086 * }
2087 * ```
2088 *
2089 * @generated from field: fixed32 gt = 4;
2090 */
2091 value: number;
2092 case: "gt";
2093 } | {
2094 /**
2095 * `gte` requires the field value to be greater than or equal to the specified
2096 * value (exclusive). If the value of `gte` is larger than a specified `lt`
2097 * or `lte`, the range is reversed, and the field value must be outside the
2098 * specified range. If the field value doesn't meet the required conditions,
2099 * an error message is generated.
2100 *
2101 * ```proto
2102 * message MyFixed32 {
2103 * // value must be greater than or equal to 5 [fixed32.gte]
2104 * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
2105 *
2106 * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
2107 * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
2108 *
2109 * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
2110 * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
2111 * }
2112 * ```
2113 *
2114 * @generated from field: fixed32 gte = 5;
2115 */
2116 value: number;
2117 case: "gte";
2118 } | { case: undefined; value?: undefined };
2119
2120 /**
2121 * `in` requires the field value to be equal to one of the specified values.
2122 * If the field value isn't one of the specified values, an error message
2123 * is generated.
2124 *
2125 * ```proto
2126 * message MyFixed32 {
2127 * // value must be in list [1, 2, 3]
2128 * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];
2129 * }
2130 * ```
2131 *
2132 * @generated from field: repeated fixed32 in = 6;
2133 */
2134 in: number[];
2135
2136 /**
2137 * `not_in` requires the field value to not be equal to any of the specified
2138 * values. If the field value is one of the specified values, an error
2139 * message is generated.
2140 *
2141 * ```proto
2142 * message MyFixed32 {
2143 * // value must not be in list [1, 2, 3]
2144 * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];
2145 * }
2146 * ```
2147 *
2148 * @generated from field: repeated fixed32 not_in = 7;
2149 */
2150 notIn: number[];
2151
2152 /**
2153 * `example` specifies values that the field may have. These values SHOULD
2154 * conform to other rules. `example` values will not impact validation
2155 * but may be used as helpful guidance on how to populate the given field.
2156 *
2157 * ```proto
2158 * message MyFixed32 {
2159 * fixed32 value = 1 [
2160 * (buf.validate.field).fixed32.example = 1,
2161 * (buf.validate.field).fixed32.example = 2
2162 * ];
2163 * }
2164 * ```
2165 *
2166 * @generated from field: repeated fixed32 example = 8;
2167 */
2168 example: number[];
2169};
2170
2171/**
2172 * Describes the message buf.validate.Fixed32Rules.
2173 * Use `create(Fixed32RulesSchema)` to create a new message.
2174 */
2175export const Fixed32RulesSchema: GenMessage<Fixed32Rules> = /*@__PURE__*/
2176 messageDesc(file_buf_validate_validate, 14);
2177
2178/**
2179 * Fixed64Rules describes the rules applied to `fixed64` values.
2180 *
2181 * @generated from message buf.validate.Fixed64Rules
2182 */
2183export type Fixed64Rules = Message<"buf.validate.Fixed64Rules"> & {
2184 /**
2185 * `const` requires the field value to exactly match the specified value. If
2186 * the field value doesn't match, an error message is generated.
2187 *
2188 * ```proto
2189 * message MyFixed64 {
2190 * // value must equal 42
2191 * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
2192 * }
2193 * ```
2194 *
2195 * @generated from field: optional fixed64 const = 1;
2196 */
2197 const: bigint;
2198
2199 /**
2200 * @generated from oneof buf.validate.Fixed64Rules.less_than
2201 */
2202 lessThan: {
2203 /**
2204 * `lt` requires the field value to be less than the specified value (field <
2205 * value). If the field value is equal to or greater than the specified value,
2206 * an error message is generated.
2207 *
2208 * ```proto
2209 * message MyFixed64 {
2210 * // value must be less than 10
2211 * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
2212 * }
2213 * ```
2214 *
2215 * @generated from field: fixed64 lt = 2;
2216 */
2217 value: bigint;
2218 case: "lt";
2219 } | {
2220 /**
2221 * `lte` requires the field value to be less than or equal to the specified
2222 * value (field <= value). If the field value is greater than the specified
2223 * value, an error message is generated.
2224 *
2225 * ```proto
2226 * message MyFixed64 {
2227 * // value must be less than or equal to 10
2228 * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
2229 * }
2230 * ```
2231 *
2232 * @generated from field: fixed64 lte = 3;
2233 */
2234 value: bigint;
2235 case: "lte";
2236 } | { case: undefined; value?: undefined };
2237
2238 /**
2239 * @generated from oneof buf.validate.Fixed64Rules.greater_than
2240 */
2241 greaterThan: {
2242 /**
2243 * `gt` requires the field value to be greater than the specified value
2244 * (exclusive). If the value of `gt` is larger than a specified `lt` or
2245 * `lte`, the range is reversed, and the field value must be outside the
2246 * specified range. If the field value doesn't meet the required conditions,
2247 * an error message is generated.
2248 *
2249 * ```proto
2250 * message MyFixed64 {
2251 * // value must be greater than 5 [fixed64.gt]
2252 * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
2253 *
2254 * // value must be greater than 5 and less than 10 [fixed64.gt_lt]
2255 * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
2256 *
2257 * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
2258 * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
2259 * }
2260 * ```
2261 *
2262 * @generated from field: fixed64 gt = 4;
2263 */
2264 value: bigint;
2265 case: "gt";
2266 } | {
2267 /**
2268 * `gte` requires the field value to be greater than or equal to the specified
2269 * value (exclusive). If the value of `gte` is larger than a specified `lt`
2270 * or `lte`, the range is reversed, and the field value must be outside the
2271 * specified range. If the field value doesn't meet the required conditions,
2272 * an error message is generated.
2273 *
2274 * ```proto
2275 * message MyFixed64 {
2276 * // value must be greater than or equal to 5 [fixed64.gte]
2277 * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
2278 *
2279 * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
2280 * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
2281 *
2282 * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
2283 * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
2284 * }
2285 * ```
2286 *
2287 * @generated from field: fixed64 gte = 5;
2288 */
2289 value: bigint;
2290 case: "gte";
2291 } | { case: undefined; value?: undefined };
2292
2293 /**
2294 * `in` requires the field value to be equal to one of the specified values.
2295 * If the field value isn't one of the specified values, an error message is
2296 * generated.
2297 *
2298 * ```proto
2299 * message MyFixed64 {
2300 * // value must be in list [1, 2, 3]
2301 * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];
2302 * }
2303 * ```
2304 *
2305 * @generated from field: repeated fixed64 in = 6;
2306 */
2307 in: bigint[];
2308
2309 /**
2310 * `not_in` requires the field value to not be equal to any of the specified
2311 * values. If the field value is one of the specified values, an error
2312 * message is generated.
2313 *
2314 * ```proto
2315 * message MyFixed64 {
2316 * // value must not be in list [1, 2, 3]
2317 * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];
2318 * }
2319 * ```
2320 *
2321 * @generated from field: repeated fixed64 not_in = 7;
2322 */
2323 notIn: bigint[];
2324
2325 /**
2326 * `example` specifies values that the field may have. These values SHOULD
2327 * conform to other rules. `example` values will not impact validation
2328 * but may be used as helpful guidance on how to populate the given field.
2329 *
2330 * ```proto
2331 * message MyFixed64 {
2332 * fixed64 value = 1 [
2333 * (buf.validate.field).fixed64.example = 1,
2334 * (buf.validate.field).fixed64.example = 2
2335 * ];
2336 * }
2337 * ```
2338 *
2339 * @generated from field: repeated fixed64 example = 8;
2340 */
2341 example: bigint[];
2342};
2343
2344/**
2345 * Describes the message buf.validate.Fixed64Rules.
2346 * Use `create(Fixed64RulesSchema)` to create a new message.
2347 */
2348export const Fixed64RulesSchema: GenMessage<Fixed64Rules> = /*@__PURE__*/
2349 messageDesc(file_buf_validate_validate, 15);
2350
2351/**
2352 * SFixed32Rules describes the rules applied to `fixed32` values.
2353 *
2354 * @generated from message buf.validate.SFixed32Rules
2355 */
2356export type SFixed32Rules = Message<"buf.validate.SFixed32Rules"> & {
2357 /**
2358 * `const` requires the field value to exactly match the specified value. If
2359 * the field value doesn't match, an error message is generated.
2360 *
2361 * ```proto
2362 * message MySFixed32 {
2363 * // value must equal 42
2364 * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
2365 * }
2366 * ```
2367 *
2368 * @generated from field: optional sfixed32 const = 1;
2369 */
2370 const: number;
2371
2372 /**
2373 * @generated from oneof buf.validate.SFixed32Rules.less_than
2374 */
2375 lessThan: {
2376 /**
2377 * `lt` requires the field value to be less than the specified value (field <
2378 * value). If the field value is equal to or greater than the specified value,
2379 * an error message is generated.
2380 *
2381 * ```proto
2382 * message MySFixed32 {
2383 * // value must be less than 10
2384 * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
2385 * }
2386 * ```
2387 *
2388 * @generated from field: sfixed32 lt = 2;
2389 */
2390 value: number;
2391 case: "lt";
2392 } | {
2393 /**
2394 * `lte` requires the field value to be less than or equal to the specified
2395 * value (field <= value). If the field value is greater than the specified
2396 * value, an error message is generated.
2397 *
2398 * ```proto
2399 * message MySFixed32 {
2400 * // value must be less than or equal to 10
2401 * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
2402 * }
2403 * ```
2404 *
2405 * @generated from field: sfixed32 lte = 3;
2406 */
2407 value: number;
2408 case: "lte";
2409 } | { case: undefined; value?: undefined };
2410
2411 /**
2412 * @generated from oneof buf.validate.SFixed32Rules.greater_than
2413 */
2414 greaterThan: {
2415 /**
2416 * `gt` requires the field value to be greater than the specified value
2417 * (exclusive). If the value of `gt` is larger than a specified `lt` or
2418 * `lte`, the range is reversed, and the field value must be outside the
2419 * specified range. If the field value doesn't meet the required conditions,
2420 * an error message is generated.
2421 *
2422 * ```proto
2423 * message MySFixed32 {
2424 * // value must be greater than 5 [sfixed32.gt]
2425 * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
2426 *
2427 * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
2428 * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
2429 *
2430 * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
2431 * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
2432 * }
2433 * ```
2434 *
2435 * @generated from field: sfixed32 gt = 4;
2436 */
2437 value: number;
2438 case: "gt";
2439 } | {
2440 /**
2441 * `gte` requires the field value to be greater than or equal to the specified
2442 * value (exclusive). If the value of `gte` is larger than a specified `lt`
2443 * or `lte`, the range is reversed, and the field value must be outside the
2444 * specified range. If the field value doesn't meet the required conditions,
2445 * an error message is generated.
2446 *
2447 * ```proto
2448 * message MySFixed32 {
2449 * // value must be greater than or equal to 5 [sfixed32.gte]
2450 * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
2451 *
2452 * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
2453 * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
2454 *
2455 * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
2456 * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
2457 * }
2458 * ```
2459 *
2460 * @generated from field: sfixed32 gte = 5;
2461 */
2462 value: number;
2463 case: "gte";
2464 } | { case: undefined; value?: undefined };
2465
2466 /**
2467 * `in` requires the field value to be equal to one of the specified values.
2468 * If the field value isn't one of the specified values, an error message is
2469 * generated.
2470 *
2471 * ```proto
2472 * message MySFixed32 {
2473 * // value must be in list [1, 2, 3]
2474 * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];
2475 * }
2476 * ```
2477 *
2478 * @generated from field: repeated sfixed32 in = 6;
2479 */
2480 in: number[];
2481
2482 /**
2483 * `not_in` requires the field value to not be equal to any of the specified
2484 * values. If the field value is one of the specified values, an error
2485 * message is generated.
2486 *
2487 * ```proto
2488 * message MySFixed32 {
2489 * // value must not be in list [1, 2, 3]
2490 * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];
2491 * }
2492 * ```
2493 *
2494 * @generated from field: repeated sfixed32 not_in = 7;
2495 */
2496 notIn: number[];
2497
2498 /**
2499 * `example` specifies values that the field may have. These values SHOULD
2500 * conform to other rules. `example` values will not impact validation
2501 * but may be used as helpful guidance on how to populate the given field.
2502 *
2503 * ```proto
2504 * message MySFixed32 {
2505 * sfixed32 value = 1 [
2506 * (buf.validate.field).sfixed32.example = 1,
2507 * (buf.validate.field).sfixed32.example = 2
2508 * ];
2509 * }
2510 * ```
2511 *
2512 * @generated from field: repeated sfixed32 example = 8;
2513 */
2514 example: number[];
2515};
2516
2517/**
2518 * Describes the message buf.validate.SFixed32Rules.
2519 * Use `create(SFixed32RulesSchema)` to create a new message.
2520 */
2521export const SFixed32RulesSchema: GenMessage<SFixed32Rules> = /*@__PURE__*/
2522 messageDesc(file_buf_validate_validate, 16);
2523
2524/**
2525 * SFixed64Rules describes the rules applied to `fixed64` values.
2526 *
2527 * @generated from message buf.validate.SFixed64Rules
2528 */
2529export type SFixed64Rules = Message<"buf.validate.SFixed64Rules"> & {
2530 /**
2531 * `const` requires the field value to exactly match the specified value. If
2532 * the field value doesn't match, an error message is generated.
2533 *
2534 * ```proto
2535 * message MySFixed64 {
2536 * // value must equal 42
2537 * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
2538 * }
2539 * ```
2540 *
2541 * @generated from field: optional sfixed64 const = 1;
2542 */
2543 const: bigint;
2544
2545 /**
2546 * @generated from oneof buf.validate.SFixed64Rules.less_than
2547 */
2548 lessThan: {
2549 /**
2550 * `lt` requires the field value to be less than the specified value (field <
2551 * value). If the field value is equal to or greater than the specified value,
2552 * an error message is generated.
2553 *
2554 * ```proto
2555 * message MySFixed64 {
2556 * // value must be less than 10
2557 * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
2558 * }
2559 * ```
2560 *
2561 * @generated from field: sfixed64 lt = 2;
2562 */
2563 value: bigint;
2564 case: "lt";
2565 } | {
2566 /**
2567 * `lte` requires the field value to be less than or equal to the specified
2568 * value (field <= value). If the field value is greater than the specified
2569 * value, an error message is generated.
2570 *
2571 * ```proto
2572 * message MySFixed64 {
2573 * // value must be less than or equal to 10
2574 * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
2575 * }
2576 * ```
2577 *
2578 * @generated from field: sfixed64 lte = 3;
2579 */
2580 value: bigint;
2581 case: "lte";
2582 } | { case: undefined; value?: undefined };
2583
2584 /**
2585 * @generated from oneof buf.validate.SFixed64Rules.greater_than
2586 */
2587 greaterThan: {
2588 /**
2589 * `gt` requires the field value to be greater than the specified value
2590 * (exclusive). If the value of `gt` is larger than a specified `lt` or
2591 * `lte`, the range is reversed, and the field value must be outside the
2592 * specified range. If the field value doesn't meet the required conditions,
2593 * an error message is generated.
2594 *
2595 * ```proto
2596 * message MySFixed64 {
2597 * // value must be greater than 5 [sfixed64.gt]
2598 * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
2599 *
2600 * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
2601 * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
2602 *
2603 * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
2604 * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
2605 * }
2606 * ```
2607 *
2608 * @generated from field: sfixed64 gt = 4;
2609 */
2610 value: bigint;
2611 case: "gt";
2612 } | {
2613 /**
2614 * `gte` requires the field value to be greater than or equal to the specified
2615 * value (exclusive). If the value of `gte` is larger than a specified `lt`
2616 * or `lte`, the range is reversed, and the field value must be outside the
2617 * specified range. If the field value doesn't meet the required conditions,
2618 * an error message is generated.
2619 *
2620 * ```proto
2621 * message MySFixed64 {
2622 * // value must be greater than or equal to 5 [sfixed64.gte]
2623 * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
2624 *
2625 * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
2626 * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
2627 *
2628 * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
2629 * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
2630 * }
2631 * ```
2632 *
2633 * @generated from field: sfixed64 gte = 5;
2634 */
2635 value: bigint;
2636 case: "gte";
2637 } | { case: undefined; value?: undefined };
2638
2639 /**
2640 * `in` requires the field value to be equal to one of the specified values.
2641 * If the field value isn't one of the specified values, an error message is
2642 * generated.
2643 *
2644 * ```proto
2645 * message MySFixed64 {
2646 * // value must be in list [1, 2, 3]
2647 * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];
2648 * }
2649 * ```
2650 *
2651 * @generated from field: repeated sfixed64 in = 6;
2652 */
2653 in: bigint[];
2654
2655 /**
2656 * `not_in` requires the field value to not be equal to any of the specified
2657 * values. If the field value is one of the specified values, an error
2658 * message is generated.
2659 *
2660 * ```proto
2661 * message MySFixed64 {
2662 * // value must not be in list [1, 2, 3]
2663 * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];
2664 * }
2665 * ```
2666 *
2667 * @generated from field: repeated sfixed64 not_in = 7;
2668 */
2669 notIn: bigint[];
2670
2671 /**
2672 * `example` specifies values that the field may have. These values SHOULD
2673 * conform to other rules. `example` values will not impact validation
2674 * but may be used as helpful guidance on how to populate the given field.
2675 *
2676 * ```proto
2677 * message MySFixed64 {
2678 * sfixed64 value = 1 [
2679 * (buf.validate.field).sfixed64.example = 1,
2680 * (buf.validate.field).sfixed64.example = 2
2681 * ];
2682 * }
2683 * ```
2684 *
2685 * @generated from field: repeated sfixed64 example = 8;
2686 */
2687 example: bigint[];
2688};
2689
2690/**
2691 * Describes the message buf.validate.SFixed64Rules.
2692 * Use `create(SFixed64RulesSchema)` to create a new message.
2693 */
2694export const SFixed64RulesSchema: GenMessage<SFixed64Rules> = /*@__PURE__*/
2695 messageDesc(file_buf_validate_validate, 17);
2696
2697/**
2698 * BoolRules describes the rules applied to `bool` values. These rules
2699 * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
2700 *
2701 * @generated from message buf.validate.BoolRules
2702 */
2703export type BoolRules = Message<"buf.validate.BoolRules"> & {
2704 /**
2705 * `const` requires the field value to exactly match the specified boolean value.
2706 * If the field value doesn't match, an error message is generated.
2707 *
2708 * ```proto
2709 * message MyBool {
2710 * // value must equal true
2711 * bool value = 1 [(buf.validate.field).bool.const = true];
2712 * }
2713 * ```
2714 *
2715 * @generated from field: optional bool const = 1;
2716 */
2717 const: boolean;
2718
2719 /**
2720 * `example` specifies values that the field may have. These values SHOULD
2721 * conform to other rules. `example` values will not impact validation
2722 * but may be used as helpful guidance on how to populate the given field.
2723 *
2724 * ```proto
2725 * message MyBool {
2726 * bool value = 1 [
2727 * (buf.validate.field).bool.example = 1,
2728 * (buf.validate.field).bool.example = 2
2729 * ];
2730 * }
2731 * ```
2732 *
2733 * @generated from field: repeated bool example = 2;
2734 */
2735 example: boolean[];
2736};
2737
2738/**
2739 * Describes the message buf.validate.BoolRules.
2740 * Use `create(BoolRulesSchema)` to create a new message.
2741 */
2742export const BoolRulesSchema: GenMessage<BoolRules> = /*@__PURE__*/
2743 messageDesc(file_buf_validate_validate, 18);
2744
2745/**
2746 * StringRules describes the rules applied to `string` values These
2747 * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
2748 *
2749 * @generated from message buf.validate.StringRules
2750 */
2751export type StringRules = Message<"buf.validate.StringRules"> & {
2752 /**
2753 * `const` requires the field value to exactly match the specified value. If
2754 * the field value doesn't match, an error message is generated.
2755 *
2756 * ```proto
2757 * message MyString {
2758 * // value must equal `hello`
2759 * string value = 1 [(buf.validate.field).string.const = "hello"];
2760 * }
2761 * ```
2762 *
2763 * @generated from field: optional string const = 1;
2764 */
2765 const: string;
2766
2767 /**
2768 * `len` dictates that the field value must have the specified
2769 * number of characters (Unicode code points), which may differ from the number
2770 * of bytes in the string. If the field value does not meet the specified
2771 * length, an error message will be generated.
2772 *
2773 * ```proto
2774 * message MyString {
2775 * // value length must be 5 characters
2776 * string value = 1 [(buf.validate.field).string.len = 5];
2777 * }
2778 * ```
2779 *
2780 * @generated from field: optional uint64 len = 19;
2781 */
2782 len: bigint;
2783
2784 /**
2785 * `min_len` specifies that the field value must have at least the specified
2786 * number of characters (Unicode code points), which may differ from the number
2787 * of bytes in the string. If the field value contains fewer characters, an error
2788 * message will be generated.
2789 *
2790 * ```proto
2791 * message MyString {
2792 * // value length must be at least 3 characters
2793 * string value = 1 [(buf.validate.field).string.min_len = 3];
2794 * }
2795 * ```
2796 *
2797 * @generated from field: optional uint64 min_len = 2;
2798 */
2799 minLen: bigint;
2800
2801 /**
2802 * `max_len` specifies that the field value must have no more than the specified
2803 * number of characters (Unicode code points), which may differ from the
2804 * number of bytes in the string. If the field value contains more characters,
2805 * an error message will be generated.
2806 *
2807 * ```proto
2808 * message MyString {
2809 * // value length must be at most 10 characters
2810 * string value = 1 [(buf.validate.field).string.max_len = 10];
2811 * }
2812 * ```
2813 *
2814 * @generated from field: optional uint64 max_len = 3;
2815 */
2816 maxLen: bigint;
2817
2818 /**
2819 * `len_bytes` dictates that the field value must have the specified number of
2820 * bytes. If the field value does not match the specified length in bytes,
2821 * an error message will be generated.
2822 *
2823 * ```proto
2824 * message MyString {
2825 * // value length must be 6 bytes
2826 * string value = 1 [(buf.validate.field).string.len_bytes = 6];
2827 * }
2828 * ```
2829 *
2830 * @generated from field: optional uint64 len_bytes = 20;
2831 */
2832 lenBytes: bigint;
2833
2834 /**
2835 * `min_bytes` specifies that the field value must have at least the specified
2836 * number of bytes. If the field value contains fewer bytes, an error message
2837 * will be generated.
2838 *
2839 * ```proto
2840 * message MyString {
2841 * // value length must be at least 4 bytes
2842 * string value = 1 [(buf.validate.field).string.min_bytes = 4];
2843 * }
2844 *
2845 * ```
2846 *
2847 * @generated from field: optional uint64 min_bytes = 4;
2848 */
2849 minBytes: bigint;
2850
2851 /**
2852 * `max_bytes` specifies that the field value must have no more than the
2853 * specified number of bytes. If the field value contains more bytes, an
2854 * error message will be generated.
2855 *
2856 * ```proto
2857 * message MyString {
2858 * // value length must be at most 8 bytes
2859 * string value = 1 [(buf.validate.field).string.max_bytes = 8];
2860 * }
2861 * ```
2862 *
2863 * @generated from field: optional uint64 max_bytes = 5;
2864 */
2865 maxBytes: bigint;
2866
2867 /**
2868 * `pattern` specifies that the field value must match the specified
2869 * regular expression (RE2 syntax), with the expression provided without any
2870 * delimiters. If the field value doesn't match the regular expression, an
2871 * error message will be generated.
2872 *
2873 * ```proto
2874 * message MyString {
2875 * // value does not match regex pattern `^[a-zA-Z]//$`
2876 * string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
2877 * }
2878 * ```
2879 *
2880 * @generated from field: optional string pattern = 6;
2881 */
2882 pattern: string;
2883
2884 /**
2885 * `prefix` specifies that the field value must have the
2886 * specified substring at the beginning of the string. If the field value
2887 * doesn't start with the specified prefix, an error message will be
2888 * generated.
2889 *
2890 * ```proto
2891 * message MyString {
2892 * // value does not have prefix `pre`
2893 * string value = 1 [(buf.validate.field).string.prefix = "pre"];
2894 * }
2895 * ```
2896 *
2897 * @generated from field: optional string prefix = 7;
2898 */
2899 prefix: string;
2900
2901 /**
2902 * `suffix` specifies that the field value must have the
2903 * specified substring at the end of the string. If the field value doesn't
2904 * end with the specified suffix, an error message will be generated.
2905 *
2906 * ```proto
2907 * message MyString {
2908 * // value does not have suffix `post`
2909 * string value = 1 [(buf.validate.field).string.suffix = "post"];
2910 * }
2911 * ```
2912 *
2913 * @generated from field: optional string suffix = 8;
2914 */
2915 suffix: string;
2916
2917 /**
2918 * `contains` specifies that the field value must have the
2919 * specified substring anywhere in the string. If the field value doesn't
2920 * contain the specified substring, an error message will be generated.
2921 *
2922 * ```proto
2923 * message MyString {
2924 * // value does not contain substring `inside`.
2925 * string value = 1 [(buf.validate.field).string.contains = "inside"];
2926 * }
2927 * ```
2928 *
2929 * @generated from field: optional string contains = 9;
2930 */
2931 contains: string;
2932
2933 /**
2934 * `not_contains` specifies that the field value must not have the
2935 * specified substring anywhere in the string. If the field value contains
2936 * the specified substring, an error message will be generated.
2937 *
2938 * ```proto
2939 * message MyString {
2940 * // value contains substring `inside`.
2941 * string value = 1 [(buf.validate.field).string.not_contains = "inside"];
2942 * }
2943 * ```
2944 *
2945 * @generated from field: optional string not_contains = 23;
2946 */
2947 notContains: string;
2948
2949 /**
2950 * `in` specifies that the field value must be equal to one of the specified
2951 * values. If the field value isn't one of the specified values, an error
2952 * message will be generated.
2953 *
2954 * ```proto
2955 * message MyString {
2956 * // value must be in list ["apple", "banana"]
2957 * string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
2958 * }
2959 * ```
2960 *
2961 * @generated from field: repeated string in = 10;
2962 */
2963 in: string[];
2964
2965 /**
2966 * `not_in` specifies that the field value cannot be equal to any
2967 * of the specified values. If the field value is one of the specified values,
2968 * an error message will be generated.
2969 * ```proto
2970 * message MyString {
2971 * // value must not be in list ["orange", "grape"]
2972 * string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
2973 * }
2974 * ```
2975 *
2976 * @generated from field: repeated string not_in = 11;
2977 */
2978 notIn: string[];
2979
2980 /**
2981 * `WellKnown` rules provide advanced rules against common string
2982 * patterns.
2983 *
2984 * @generated from oneof buf.validate.StringRules.well_known
2985 */
2986 wellKnown: {
2987 /**
2988 * `email` specifies that the field value must be a valid email address, for
2989 * example "foo@example.com".
2990 *
2991 * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).
2992 * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),
2993 * which allows many unexpected forms of email addresses and will easily match
2994 * a typographical error.
2995 *
2996 * If the field value isn't a valid email address, an error message will be generated.
2997 *
2998 * ```proto
2999 * message MyString {
3000 * // value must be a valid email address
3001 * string value = 1 [(buf.validate.field).string.email = true];
3002 * }
3003 * ```
3004 *
3005 * @generated from field: bool email = 12;
3006 */
3007 value: boolean;
3008 case: "email";
3009 } | {
3010 /**
3011 * `hostname` specifies that the field value must be a valid hostname, for
3012 * example "foo.example.com".
3013 *
3014 * A valid hostname follows the rules below:
3015 * - The name consists of one or more labels, separated by a dot (".").
3016 * - Each label can be 1 to 63 alphanumeric characters.
3017 * - A label can contain hyphens ("-"), but must not start or end with a hyphen.
3018 * - The right-most label must not be digits only.
3019 * - The name can have a trailing dot—for example, "foo.example.com.".
3020 * - The name can be 253 characters at most, excluding the optional trailing dot.
3021 *
3022 * If the field value isn't a valid hostname, an error message will be generated.
3023 *
3024 * ```proto
3025 * message MyString {
3026 * // value must be a valid hostname
3027 * string value = 1 [(buf.validate.field).string.hostname = true];
3028 * }
3029 * ```
3030 *
3031 * @generated from field: bool hostname = 13;
3032 */
3033 value: boolean;
3034 case: "hostname";
3035 } | {
3036 /**
3037 * `ip` specifies that the field value must be a valid IP (v4 or v6) address.
3038 *
3039 * IPv4 addresses are expected in the dotted decimal format—for example, "192.168.5.21".
3040 * IPv6 addresses are expected in their text representation—for example, "::1",
3041 * or "2001:0DB8:ABCD:0012::0".
3042 *
3043 * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
3044 * Zone identifiers for IPv6 addresses (for example, "fe80::a%en1") are supported.
3045 *
3046 * If the field value isn't a valid IP address, an error message will be
3047 * generated.
3048 *
3049 * ```proto
3050 * message MyString {
3051 * // value must be a valid IP address
3052 * string value = 1 [(buf.validate.field).string.ip = true];
3053 * }
3054 * ```
3055 *
3056 * @generated from field: bool ip = 14;
3057 */
3058 value: boolean;
3059 case: "ip";
3060 } | {
3061 /**
3062 * `ipv4` specifies that the field value must be a valid IPv4 address—for
3063 * example "192.168.5.21". If the field value isn't a valid IPv4 address, an
3064 * error message will be generated.
3065 *
3066 * ```proto
3067 * message MyString {
3068 * // value must be a valid IPv4 address
3069 * string value = 1 [(buf.validate.field).string.ipv4 = true];
3070 * }
3071 * ```
3072 *
3073 * @generated from field: bool ipv4 = 15;
3074 */
3075 value: boolean;
3076 case: "ipv4";
3077 } | {
3078 /**
3079 * `ipv6` specifies that the field value must be a valid IPv6 address—for
3080 * example "::1", or "d7a:115c:a1e0:ab12:4843:cd96:626b:430b". If the field
3081 * value is not a valid IPv6 address, an error message will be generated.
3082 *
3083 * ```proto
3084 * message MyString {
3085 * // value must be a valid IPv6 address
3086 * string value = 1 [(buf.validate.field).string.ipv6 = true];
3087 * }
3088 * ```
3089 *
3090 * @generated from field: bool ipv6 = 16;
3091 */
3092 value: boolean;
3093 case: "ipv6";
3094 } | {
3095 /**
3096 * `uri` specifies that the field value must be a valid URI, for example
3097 * "https://example.com/foo/bar?baz=quux#frag".
3098 *
3099 * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
3100 * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
3101 *
3102 * If the field value isn't a valid URI, an error message will be generated.
3103 *
3104 * ```proto
3105 * message MyString {
3106 * // value must be a valid URI
3107 * string value = 1 [(buf.validate.field).string.uri = true];
3108 * }
3109 * ```
3110 *
3111 * @generated from field: bool uri = 17;
3112 */
3113 value: boolean;
3114 case: "uri";
3115 } | {
3116 /**
3117 * `uri_ref` specifies that the field value must be a valid URI Reference—either
3118 * a URI such as "https://example.com/foo/bar?baz=quux#frag", or a Relative
3119 * Reference such as "./foo/bar?query".
3120 *
3121 * URI, URI Reference, and Relative Reference are defined in the internet
3122 * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone
3123 * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
3124 *
3125 * If the field value isn't a valid URI Reference, an error message will be
3126 * generated.
3127 *
3128 * ```proto
3129 * message MyString {
3130 * // value must be a valid URI Reference
3131 * string value = 1 [(buf.validate.field).string.uri_ref = true];
3132 * }
3133 * ```
3134 *
3135 * @generated from field: bool uri_ref = 18;
3136 */
3137 value: boolean;
3138 case: "uriRef";
3139 } | {
3140 /**
3141 * `address` specifies that the field value must be either a valid hostname
3142 * (for example, "example.com"), or a valid IP (v4 or v6) address (for example,
3143 * "192.168.0.1", or "::1"). If the field value isn't a valid hostname or IP,
3144 * an error message will be generated.
3145 *
3146 * ```proto
3147 * message MyString {
3148 * // value must be a valid hostname, or ip address
3149 * string value = 1 [(buf.validate.field).string.address = true];
3150 * }
3151 * ```
3152 *
3153 * @generated from field: bool address = 21;
3154 */
3155 value: boolean;
3156 case: "address";
3157 } | {
3158 /**
3159 * `uuid` specifies that the field value must be a valid UUID as defined by
3160 * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the
3161 * field value isn't a valid UUID, an error message will be generated.
3162 *
3163 * ```proto
3164 * message MyString {
3165 * // value must be a valid UUID
3166 * string value = 1 [(buf.validate.field).string.uuid = true];
3167 * }
3168 * ```
3169 *
3170 * @generated from field: bool uuid = 22;
3171 */
3172 value: boolean;
3173 case: "uuid";
3174 } | {
3175 /**
3176 * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as
3177 * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes
3178 * omitted. If the field value isn't a valid UUID without dashes, an error message
3179 * will be generated.
3180 *
3181 * ```proto
3182 * message MyString {
3183 * // value must be a valid trimmed UUID
3184 * string value = 1 [(buf.validate.field).string.tuuid = true];
3185 * }
3186 * ```
3187 *
3188 * @generated from field: bool tuuid = 33;
3189 */
3190 value: boolean;
3191 case: "tuuid";
3192 } | {
3193 /**
3194 * `ip_with_prefixlen` specifies that the field value must be a valid IP
3195 * (v4 or v6) address with prefix length—for example, "192.168.5.21/16" or
3196 * "2001:0DB8:ABCD:0012::F1/64". If the field value isn't a valid IP with
3197 * prefix length, an error message will be generated.
3198 *
3199 * ```proto
3200 * message MyString {
3201 * // value must be a valid IP with prefix length
3202 * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
3203 * }
3204 * ```
3205 *
3206 * @generated from field: bool ip_with_prefixlen = 26;
3207 */
3208 value: boolean;
3209 case: "ipWithPrefixlen";
3210 } | {
3211 /**
3212 * `ipv4_with_prefixlen` specifies that the field value must be a valid
3213 * IPv4 address with prefix length—for example, "192.168.5.21/16". If the
3214 * field value isn't a valid IPv4 address with prefix length, an error
3215 * message will be generated.
3216 *
3217 * ```proto
3218 * message MyString {
3219 * // value must be a valid IPv4 address with prefix length
3220 * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
3221 * }
3222 * ```
3223 *
3224 * @generated from field: bool ipv4_with_prefixlen = 27;
3225 */
3226 value: boolean;
3227 case: "ipv4WithPrefixlen";
3228 } | {
3229 /**
3230 * `ipv6_with_prefixlen` specifies that the field value must be a valid
3231 * IPv6 address with prefix length—for example, "2001:0DB8:ABCD:0012::F1/64".
3232 * If the field value is not a valid IPv6 address with prefix length,
3233 * an error message will be generated.
3234 *
3235 * ```proto
3236 * message MyString {
3237 * // value must be a valid IPv6 address prefix length
3238 * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
3239 * }
3240 * ```
3241 *
3242 * @generated from field: bool ipv6_with_prefixlen = 28;
3243 */
3244 value: boolean;
3245 case: "ipv6WithPrefixlen";
3246 } | {
3247 /**
3248 * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)
3249 * prefix—for example, "192.168.0.0/16" or "2001:0DB8:ABCD:0012::0/64".
3250 *
3251 * The prefix must have all zeros for the unmasked bits. For example,
3252 * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
3253 * prefix, and the remaining 64 bits must be zero.
3254 *
3255 * If the field value isn't a valid IP prefix, an error message will be
3256 * generated.
3257 *
3258 * ```proto
3259 * message MyString {
3260 * // value must be a valid IP prefix
3261 * string value = 1 [(buf.validate.field).string.ip_prefix = true];
3262 * }
3263 * ```
3264 *
3265 * @generated from field: bool ip_prefix = 29;
3266 */
3267 value: boolean;
3268 case: "ipPrefix";
3269 } | {
3270 /**
3271 * `ipv4_prefix` specifies that the field value must be a valid IPv4
3272 * prefix, for example "192.168.0.0/16".
3273 *
3274 * The prefix must have all zeros for the unmasked bits. For example,
3275 * "192.168.0.0/16" designates the left-most 16 bits for the prefix,
3276 * and the remaining 16 bits must be zero.
3277 *
3278 * If the field value isn't a valid IPv4 prefix, an error message
3279 * will be generated.
3280 *
3281 * ```proto
3282 * message MyString {
3283 * // value must be a valid IPv4 prefix
3284 * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
3285 * }
3286 * ```
3287 *
3288 * @generated from field: bool ipv4_prefix = 30;
3289 */
3290 value: boolean;
3291 case: "ipv4Prefix";
3292 } | {
3293 /**
3294 * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for
3295 * example, "2001:0DB8:ABCD:0012::0/64".
3296 *
3297 * The prefix must have all zeros for the unmasked bits. For example,
3298 * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
3299 * prefix, and the remaining 64 bits must be zero.
3300 *
3301 * If the field value is not a valid IPv6 prefix, an error message will be
3302 * generated.
3303 *
3304 * ```proto
3305 * message MyString {
3306 * // value must be a valid IPv6 prefix
3307 * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
3308 * }
3309 * ```
3310 *
3311 * @generated from field: bool ipv6_prefix = 31;
3312 */
3313 value: boolean;
3314 case: "ipv6Prefix";
3315 } | {
3316 /**
3317 * `host_and_port` specifies that the field value must be valid host/port
3318 * pair—for example, "example.com:8080".
3319 *
3320 * The host can be one of:
3321 * - An IPv4 address in dotted decimal format—for example, "192.168.5.21".
3322 * - An IPv6 address enclosed in square brackets—for example, "[2001:0DB8:ABCD:0012::F1]".
3323 * - A hostname—for example, "example.com".
3324 *
3325 * The port is separated by a colon. It must be non-empty, with a decimal number
3326 * in the range of 0-65535, inclusive.
3327 *
3328 * @generated from field: bool host_and_port = 32;
3329 */
3330 value: boolean;
3331 case: "hostAndPort";
3332 } | {
3333 /**
3334 * `ulid` specifies that the field value must be a valid ULID (Universally Unique
3335 * Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec).
3336 * If the field value isn't a valid ULID, an error message will be generated.
3337 *
3338 * ```proto
3339 * message MyString {
3340 * // value must be a valid ULID
3341 * string value = 1 [(buf.validate.field).string.ulid = true];
3342 * }
3343 * ```
3344 *
3345 * @generated from field: bool ulid = 35;
3346 */
3347 value: boolean;
3348 case: "ulid";
3349 } | {
3350 /**
3351 * `well_known_regex` specifies a common well-known pattern
3352 * defined as a regex. If the field value doesn't match the well-known
3353 * regex, an error message will be generated.
3354 *
3355 * ```proto
3356 * message MyString {
3357 * // value must be a valid HTTP header value
3358 * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];
3359 * }
3360 * ```
3361 *
3362 * #### KnownRegex
3363 *
3364 * `well_known_regex` contains some well-known patterns.
3365 *
3366 * | Name | Number | Description |
3367 * |-------------------------------|--------|-------------------------------------------|
3368 * | KNOWN_REGEX_UNSPECIFIED | 0 | |
3369 * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |
3370 * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |
3371 *
3372 * @generated from field: buf.validate.KnownRegex well_known_regex = 24;
3373 */
3374 value: KnownRegex;
3375 case: "wellKnownRegex";
3376 } | { case: undefined; value?: undefined };
3377
3378 /**
3379 * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
3380 * enable strict header validation. By default, this is true, and HTTP header
3381 * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser
3382 * validations that only disallow `\r\n\0` characters, which can be used to
3383 * bypass header matching rules.
3384 *
3385 * ```proto
3386 * message MyString {
3387 * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
3388 * string value = 1 [(buf.validate.field).string.strict = false];
3389 * }
3390 * ```
3391 *
3392 * @generated from field: optional bool strict = 25;
3393 */
3394 strict: boolean;
3395
3396 /**
3397 * `example` specifies values that the field may have. These values SHOULD
3398 * conform to other rules. `example` values will not impact validation
3399 * but may be used as helpful guidance on how to populate the given field.
3400 *
3401 * ```proto
3402 * message MyString {
3403 * string value = 1 [
3404 * (buf.validate.field).string.example = "hello",
3405 * (buf.validate.field).string.example = "world"
3406 * ];
3407 * }
3408 * ```
3409 *
3410 * @generated from field: repeated string example = 34;
3411 */
3412 example: string[];
3413};
3414
3415/**
3416 * Describes the message buf.validate.StringRules.
3417 * Use `create(StringRulesSchema)` to create a new message.
3418 */
3419export const StringRulesSchema: GenMessage<StringRules> = /*@__PURE__*/
3420 messageDesc(file_buf_validate_validate, 19);
3421
3422/**
3423 * BytesRules describe the rules applied to `bytes` values. These rules
3424 * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
3425 *
3426 * @generated from message buf.validate.BytesRules
3427 */
3428export type BytesRules = Message<"buf.validate.BytesRules"> & {
3429 /**
3430 * `const` requires the field value to exactly match the specified bytes
3431 * value. If the field value doesn't match, an error message is generated.
3432 *
3433 * ```proto
3434 * message MyBytes {
3435 * // value must be "\x01\x02\x03\x04"
3436 * bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"];
3437 * }
3438 * ```
3439 *
3440 * @generated from field: optional bytes const = 1;
3441 */
3442 const: Uint8Array;
3443
3444 /**
3445 * `len` requires the field value to have the specified length in bytes.
3446 * If the field value doesn't match, an error message is generated.
3447 *
3448 * ```proto
3449 * message MyBytes {
3450 * // value length must be 4 bytes.
3451 * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
3452 * }
3453 * ```
3454 *
3455 * @generated from field: optional uint64 len = 13;
3456 */
3457 len: bigint;
3458
3459 /**
3460 * `min_len` requires the field value to have at least the specified minimum
3461 * length in bytes.
3462 * If the field value doesn't meet the requirement, an error message is generated.
3463 *
3464 * ```proto
3465 * message MyBytes {
3466 * // value length must be at least 2 bytes.
3467 * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
3468 * }
3469 * ```
3470 *
3471 * @generated from field: optional uint64 min_len = 2;
3472 */
3473 minLen: bigint;
3474
3475 /**
3476 * `max_len` requires the field value to have at most the specified maximum
3477 * length in bytes.
3478 * If the field value exceeds the requirement, an error message is generated.
3479 *
3480 * ```proto
3481 * message MyBytes {
3482 * // value must be at most 6 bytes.
3483 * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
3484 * }
3485 * ```
3486 *
3487 * @generated from field: optional uint64 max_len = 3;
3488 */
3489 maxLen: bigint;
3490
3491 /**
3492 * `pattern` requires the field value to match the specified regular
3493 * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
3494 * The value of the field must be valid UTF-8 or validation will fail with a
3495 * runtime error.
3496 * If the field value doesn't match the pattern, an error message is generated.
3497 *
3498 * ```proto
3499 * message MyBytes {
3500 * // value must match regex pattern "^[a-zA-Z0-9]+$".
3501 * optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
3502 * }
3503 * ```
3504 *
3505 * @generated from field: optional string pattern = 4;
3506 */
3507 pattern: string;
3508
3509 /**
3510 * `prefix` requires the field value to have the specified bytes at the
3511 * beginning of the string.
3512 * If the field value doesn't meet the requirement, an error message is generated.
3513 *
3514 * ```proto
3515 * message MyBytes {
3516 * // value does not have prefix \x01\x02
3517 * optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"];
3518 * }
3519 * ```
3520 *
3521 * @generated from field: optional bytes prefix = 5;
3522 */
3523 prefix: Uint8Array;
3524
3525 /**
3526 * `suffix` requires the field value to have the specified bytes at the end
3527 * of the string.
3528 * If the field value doesn't meet the requirement, an error message is generated.
3529 *
3530 * ```proto
3531 * message MyBytes {
3532 * // value does not have suffix \x03\x04
3533 * optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"];
3534 * }
3535 * ```
3536 *
3537 * @generated from field: optional bytes suffix = 6;
3538 */
3539 suffix: Uint8Array;
3540
3541 /**
3542 * `contains` requires the field value to have the specified bytes anywhere in
3543 * the string.
3544 * If the field value doesn't meet the requirement, an error message is generated.
3545 *
3546 * ```proto
3547 * message MyBytes {
3548 * // value does not contain \x02\x03
3549 * optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"];
3550 * }
3551 * ```
3552 *
3553 * @generated from field: optional bytes contains = 7;
3554 */
3555 contains: Uint8Array;
3556
3557 /**
3558 * `in` requires the field value to be equal to one of the specified
3559 * values. If the field value doesn't match any of the specified values, an
3560 * error message is generated.
3561 *
3562 * ```proto
3563 * message MyBytes {
3564 * // value must in ["\x01\x02", "\x02\x03", "\x03\x04"]
3565 * optional bytes value = 1 [(buf.validate.field).bytes.in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3566 * }
3567 * ```
3568 *
3569 * @generated from field: repeated bytes in = 8;
3570 */
3571 in: Uint8Array[];
3572
3573 /**
3574 * `not_in` requires the field value to be not equal to any of the specified
3575 * values.
3576 * If the field value matches any of the specified values, an error message is
3577 * generated.
3578 *
3579 * ```proto
3580 * message MyBytes {
3581 * // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"]
3582 * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3583 * }
3584 * ```
3585 *
3586 * @generated from field: repeated bytes not_in = 9;
3587 */
3588 notIn: Uint8Array[];
3589
3590 /**
3591 * WellKnown rules provide advanced rules against common byte
3592 * patterns
3593 *
3594 * @generated from oneof buf.validate.BytesRules.well_known
3595 */
3596 wellKnown: {
3597 /**
3598 * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
3599 * If the field value doesn't meet this rule, an error message is generated.
3600 *
3601 * ```proto
3602 * message MyBytes {
3603 * // value must be a valid IP address
3604 * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
3605 * }
3606 * ```
3607 *
3608 * @generated from field: bool ip = 10;
3609 */
3610 value: boolean;
3611 case: "ip";
3612 } | {
3613 /**
3614 * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
3615 * If the field value doesn't meet this rule, an error message is generated.
3616 *
3617 * ```proto
3618 * message MyBytes {
3619 * // value must be a valid IPv4 address
3620 * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
3621 * }
3622 * ```
3623 *
3624 * @generated from field: bool ipv4 = 11;
3625 */
3626 value: boolean;
3627 case: "ipv4";
3628 } | {
3629 /**
3630 * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
3631 * If the field value doesn't meet this rule, an error message is generated.
3632 * ```proto
3633 * message MyBytes {
3634 * // value must be a valid IPv6 address
3635 * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
3636 * }
3637 * ```
3638 *
3639 * @generated from field: bool ipv6 = 12;
3640 */
3641 value: boolean;
3642 case: "ipv6";
3643 } | {
3644 /**
3645 * `uuid` ensures that the field `value` encodes the 128-bit UUID data as
3646 * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2).
3647 * The field must contain exactly 16 bytes
3648 * representing the UUID. If the field value isn't a valid UUID, an error
3649 * message will be generated.
3650 *
3651 * ```proto
3652 * message MyBytes {
3653 * // value must be a valid UUID
3654 * optional bytes value = 1 [(buf.validate.field).bytes.uuid = true];
3655 * }
3656 * ```
3657 *
3658 * @generated from field: bool uuid = 15;
3659 */
3660 value: boolean;
3661 case: "uuid";
3662 } | { case: undefined; value?: undefined };
3663
3664 /**
3665 * `example` specifies values that the field may have. These values SHOULD
3666 * conform to other rules. `example` values will not impact validation
3667 * but may be used as helpful guidance on how to populate the given field.
3668 *
3669 * ```proto
3670 * message MyBytes {
3671 * bytes value = 1 [
3672 * (buf.validate.field).bytes.example = "\x01\x02",
3673 * (buf.validate.field).bytes.example = "\x02\x03"
3674 * ];
3675 * }
3676 * ```
3677 *
3678 * @generated from field: repeated bytes example = 14;
3679 */
3680 example: Uint8Array[];
3681};
3682
3683/**
3684 * Describes the message buf.validate.BytesRules.
3685 * Use `create(BytesRulesSchema)` to create a new message.
3686 */
3687export const BytesRulesSchema: GenMessage<BytesRules> = /*@__PURE__*/
3688 messageDesc(file_buf_validate_validate, 20);
3689
3690/**
3691 * EnumRules describe the rules applied to `enum` values.
3692 *
3693 * @generated from message buf.validate.EnumRules
3694 */
3695export type EnumRules = Message<"buf.validate.EnumRules"> & {
3696 /**
3697 * `const` requires the field value to exactly match the specified enum value.
3698 * If the field value doesn't match, an error message is generated.
3699 *
3700 * ```proto
3701 * enum MyEnum {
3702 * MY_ENUM_UNSPECIFIED = 0;
3703 * MY_ENUM_VALUE1 = 1;
3704 * MY_ENUM_VALUE2 = 2;
3705 * }
3706 *
3707 * message MyMessage {
3708 * // The field `value` must be exactly MY_ENUM_VALUE1.
3709 * MyEnum value = 1 [(buf.validate.field).enum.const = 1];
3710 * }
3711 * ```
3712 *
3713 * @generated from field: optional int32 const = 1;
3714 */
3715 const: number;
3716
3717 /**
3718 * `defined_only` requires the field value to be one of the defined values for
3719 * this enum, failing on any undefined value.
3720 *
3721 * ```proto
3722 * enum MyEnum {
3723 * MY_ENUM_UNSPECIFIED = 0;
3724 * MY_ENUM_VALUE1 = 1;
3725 * MY_ENUM_VALUE2 = 2;
3726 * }
3727 *
3728 * message MyMessage {
3729 * // The field `value` must be a defined value of MyEnum.
3730 * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
3731 * }
3732 * ```
3733 *
3734 * @generated from field: optional bool defined_only = 2;
3735 */
3736 definedOnly: boolean;
3737
3738 /**
3739 * `in` requires the field value to be equal to one of the
3740 * specified enum values. If the field value doesn't match any of the
3741 * specified values, an error message is generated.
3742 *
3743 * ```proto
3744 * enum MyEnum {
3745 * MY_ENUM_UNSPECIFIED = 0;
3746 * MY_ENUM_VALUE1 = 1;
3747 * MY_ENUM_VALUE2 = 2;
3748 * }
3749 *
3750 * message MyMessage {
3751 * // The field `value` must be equal to one of the specified values.
3752 * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];
3753 * }
3754 * ```
3755 *
3756 * @generated from field: repeated int32 in = 3;
3757 */
3758 in: number[];
3759
3760 /**
3761 * `not_in` requires the field value to be not equal to any of the
3762 * specified enum values. If the field value matches one of the specified
3763 * values, an error message is generated.
3764 *
3765 * ```proto
3766 * enum MyEnum {
3767 * MY_ENUM_UNSPECIFIED = 0;
3768 * MY_ENUM_VALUE1 = 1;
3769 * MY_ENUM_VALUE2 = 2;
3770 * }
3771 *
3772 * message MyMessage {
3773 * // The field `value` must not be equal to any of the specified values.
3774 * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];
3775 * }
3776 * ```
3777 *
3778 * @generated from field: repeated int32 not_in = 4;
3779 */
3780 notIn: number[];
3781
3782 /**
3783 * `example` specifies values that the field may have. These values SHOULD
3784 * conform to other rules. `example` values will not impact validation
3785 * but may be used as helpful guidance on how to populate the given field.
3786 *
3787 * ```proto
3788 * enum MyEnum {
3789 * MY_ENUM_UNSPECIFIED = 0;
3790 * MY_ENUM_VALUE1 = 1;
3791 * MY_ENUM_VALUE2 = 2;
3792 * }
3793 *
3794 * message MyMessage {
3795 * (buf.validate.field).enum.example = 1,
3796 * (buf.validate.field).enum.example = 2
3797 * }
3798 * ```
3799 *
3800 * @generated from field: repeated int32 example = 5;
3801 */
3802 example: number[];
3803};
3804
3805/**
3806 * Describes the message buf.validate.EnumRules.
3807 * Use `create(EnumRulesSchema)` to create a new message.
3808 */
3809export const EnumRulesSchema: GenMessage<EnumRules> = /*@__PURE__*/
3810 messageDesc(file_buf_validate_validate, 21);
3811
3812/**
3813 * RepeatedRules describe the rules applied to `repeated` values.
3814 *
3815 * @generated from message buf.validate.RepeatedRules
3816 */
3817export type RepeatedRules = Message<"buf.validate.RepeatedRules"> & {
3818 /**
3819 * `min_items` requires that this field must contain at least the specified
3820 * minimum number of items.
3821 *
3822 * Note that `min_items = 1` is equivalent to setting a field as `required`.
3823 *
3824 * ```proto
3825 * message MyRepeated {
3826 * // value must contain at least 2 items
3827 * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
3828 * }
3829 * ```
3830 *
3831 * @generated from field: optional uint64 min_items = 1;
3832 */
3833 minItems: bigint;
3834
3835 /**
3836 * `max_items` denotes that this field must not exceed a
3837 * certain number of items as the upper limit. If the field contains more
3838 * items than specified, an error message will be generated, requiring the
3839 * field to maintain no more than the specified number of items.
3840 *
3841 * ```proto
3842 * message MyRepeated {
3843 * // value must contain no more than 3 item(s)
3844 * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
3845 * }
3846 * ```
3847 *
3848 * @generated from field: optional uint64 max_items = 2;
3849 */
3850 maxItems: bigint;
3851
3852 /**
3853 * `unique` indicates that all elements in this field must
3854 * be unique. This rule is strictly applicable to scalar and enum
3855 * types, with message types not being supported.
3856 *
3857 * ```proto
3858 * message MyRepeated {
3859 * // repeated value must contain unique items
3860 * repeated string value = 1 [(buf.validate.field).repeated.unique = true];
3861 * }
3862 * ```
3863 *
3864 * @generated from field: optional bool unique = 3;
3865 */
3866 unique: boolean;
3867
3868 /**
3869 * `items` details the rules to be applied to each item
3870 * in the field. Even for repeated message fields, validation is executed
3871 * against each item unless `ignore` is specified.
3872 *
3873 * ```proto
3874 * message MyRepeated {
3875 * // The items in the field `value` must follow the specified rules.
3876 * repeated string value = 1 [(buf.validate.field).repeated.items = {
3877 * string: {
3878 * min_len: 3
3879 * max_len: 10
3880 * }
3881 * }];
3882 * }
3883 * ```
3884 *
3885 * Note that the `required` rule does not apply. Repeated items
3886 * cannot be unset.
3887 *
3888 * @generated from field: optional buf.validate.FieldRules items = 4;
3889 */
3890 items?: FieldRules;
3891};
3892
3893/**
3894 * Describes the message buf.validate.RepeatedRules.
3895 * Use `create(RepeatedRulesSchema)` to create a new message.
3896 */
3897export const RepeatedRulesSchema: GenMessage<RepeatedRules> = /*@__PURE__*/
3898 messageDesc(file_buf_validate_validate, 22);
3899
3900/**
3901 * MapRules describe the rules applied to `map` values.
3902 *
3903 * @generated from message buf.validate.MapRules
3904 */
3905export type MapRules = Message<"buf.validate.MapRules"> & {
3906 /**
3907 * Specifies the minimum number of key-value pairs allowed. If the field has
3908 * fewer key-value pairs than specified, an error message is generated.
3909 *
3910 * ```proto
3911 * message MyMap {
3912 * // The field `value` must have at least 2 key-value pairs.
3913 * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];
3914 * }
3915 * ```
3916 *
3917 * @generated from field: optional uint64 min_pairs = 1;
3918 */
3919 minPairs: bigint;
3920
3921 /**
3922 * Specifies the maximum number of key-value pairs allowed. If the field has
3923 * more key-value pairs than specified, an error message is generated.
3924 *
3925 * ```proto
3926 * message MyMap {
3927 * // The field `value` must have at most 3 key-value pairs.
3928 * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];
3929 * }
3930 * ```
3931 *
3932 * @generated from field: optional uint64 max_pairs = 2;
3933 */
3934 maxPairs: bigint;
3935
3936 /**
3937 * Specifies the rules to be applied to each key in the field.
3938 *
3939 * ```proto
3940 * message MyMap {
3941 * // The keys in the field `value` must follow the specified rules.
3942 * map<string, string> value = 1 [(buf.validate.field).map.keys = {
3943 * string: {
3944 * min_len: 3
3945 * max_len: 10
3946 * }
3947 * }];
3948 * }
3949 * ```
3950 *
3951 * Note that the `required` rule does not apply. Map keys cannot be unset.
3952 *
3953 * @generated from field: optional buf.validate.FieldRules keys = 4;
3954 */
3955 keys?: FieldRules;
3956
3957 /**
3958 * Specifies the rules to be applied to the value of each key in the
3959 * field. Message values will still have their validations evaluated unless
3960 * `ignore` is specified.
3961 *
3962 * ```proto
3963 * message MyMap {
3964 * // The values in the field `value` must follow the specified rules.
3965 * map<string, string> value = 1 [(buf.validate.field).map.values = {
3966 * string: {
3967 * min_len: 5
3968 * max_len: 20
3969 * }
3970 * }];
3971 * }
3972 * ```
3973 * Note that the `required` rule does not apply. Map values cannot be unset.
3974 *
3975 * @generated from field: optional buf.validate.FieldRules values = 5;
3976 */
3977 values?: FieldRules;
3978};
3979
3980/**
3981 * Describes the message buf.validate.MapRules.
3982 * Use `create(MapRulesSchema)` to create a new message.
3983 */
3984export const MapRulesSchema: GenMessage<MapRules> = /*@__PURE__*/
3985 messageDesc(file_buf_validate_validate, 23);
3986
3987/**
3988 * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.
3989 *
3990 * @generated from message buf.validate.AnyRules
3991 */
3992export type AnyRules = Message<"buf.validate.AnyRules"> & {
3993 /**
3994 * `in` requires the field's `type_url` to be equal to one of the
3995 * specified values. If it doesn't match any of the specified values, an error
3996 * message is generated.
3997 *
3998 * ```proto
3999 * message MyAny {
4000 * // The `value` field must have a `type_url` equal to one of the specified values.
4001 * google.protobuf.Any value = 1 [(buf.validate.field).any = {
4002 * in: ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]
4003 * }];
4004 * }
4005 * ```
4006 *
4007 * @generated from field: repeated string in = 2;
4008 */
4009 in: string[];
4010
4011 /**
4012 * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
4013 *
4014 * ```proto
4015 * message MyAny {
4016 * // The `value` field must not have a `type_url` equal to any of the specified values.
4017 * google.protobuf.Any value = 1 [(buf.validate.field).any = {
4018 * not_in: ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]
4019 * }];
4020 * }
4021 * ```
4022 *
4023 * @generated from field: repeated string not_in = 3;
4024 */
4025 notIn: string[];
4026};
4027
4028/**
4029 * Describes the message buf.validate.AnyRules.
4030 * Use `create(AnyRulesSchema)` to create a new message.
4031 */
4032export const AnyRulesSchema: GenMessage<AnyRules> = /*@__PURE__*/
4033 messageDesc(file_buf_validate_validate, 24);
4034
4035/**
4036 * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.
4037 *
4038 * @generated from message buf.validate.DurationRules
4039 */
4040export type DurationRules = Message<"buf.validate.DurationRules"> & {
4041 /**
4042 * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
4043 * If the field's value deviates from the specified value, an error message
4044 * will be generated.
4045 *
4046 * ```proto
4047 * message MyDuration {
4048 * // value must equal 5s
4049 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
4050 * }
4051 * ```
4052 *
4053 * @generated from field: optional google.protobuf.Duration const = 2;
4054 */
4055 const?: Duration;
4056
4057 /**
4058 * @generated from oneof buf.validate.DurationRules.less_than
4059 */
4060 lessThan: {
4061 /**
4062 * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
4063 * exclusive. If the field's value is greater than or equal to the specified
4064 * value, an error message will be generated.
4065 *
4066 * ```proto
4067 * message MyDuration {
4068 * // value must be less than 5s
4069 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
4070 * }
4071 * ```
4072 *
4073 * @generated from field: google.protobuf.Duration lt = 3;
4074 */
4075 value: Duration;
4076 case: "lt";
4077 } | {
4078 /**
4079 * `lte` indicates that the field must be less than or equal to the specified
4080 * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
4081 * an error message will be generated.
4082 *
4083 * ```proto
4084 * message MyDuration {
4085 * // value must be less than or equal to 10s
4086 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
4087 * }
4088 * ```
4089 *
4090 * @generated from field: google.protobuf.Duration lte = 4;
4091 */
4092 value: Duration;
4093 case: "lte";
4094 } | { case: undefined; value?: undefined };
4095
4096 /**
4097 * @generated from oneof buf.validate.DurationRules.greater_than
4098 */
4099 greaterThan: {
4100 /**
4101 * `gt` requires the duration field value to be greater than the specified
4102 * value (exclusive). If the value of `gt` is larger than a specified `lt`
4103 * or `lte`, the range is reversed, and the field value must be outside the
4104 * specified range. If the field value doesn't meet the required conditions,
4105 * an error message is generated.
4106 *
4107 * ```proto
4108 * message MyDuration {
4109 * // duration must be greater than 5s [duration.gt]
4110 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
4111 *
4112 * // duration must be greater than 5s and less than 10s [duration.gt_lt]
4113 * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
4114 *
4115 * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
4116 * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
4117 * }
4118 * ```
4119 *
4120 * @generated from field: google.protobuf.Duration gt = 5;
4121 */
4122 value: Duration;
4123 case: "gt";
4124 } | {
4125 /**
4126 * `gte` requires the duration field value to be greater than or equal to the
4127 * specified value (exclusive). If the value of `gte` is larger than a
4128 * specified `lt` or `lte`, the range is reversed, and the field value must
4129 * be outside the specified range. If the field value doesn't meet the
4130 * required conditions, an error message is generated.
4131 *
4132 * ```proto
4133 * message MyDuration {
4134 * // duration must be greater than or equal to 5s [duration.gte]
4135 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
4136 *
4137 * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
4138 * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
4139 *
4140 * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
4141 * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
4142 * }
4143 * ```
4144 *
4145 * @generated from field: google.protobuf.Duration gte = 6;
4146 */
4147 value: Duration;
4148 case: "gte";
4149 } | { case: undefined; value?: undefined };
4150
4151 /**
4152 * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
4153 * If the field's value doesn't correspond to any of the specified values,
4154 * an error message will be generated.
4155 *
4156 * ```proto
4157 * message MyDuration {
4158 * // value must be in list [1s, 2s, 3s]
4159 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
4160 * }
4161 * ```
4162 *
4163 * @generated from field: repeated google.protobuf.Duration in = 7;
4164 */
4165 in: Duration[];
4166
4167 /**
4168 * `not_in` denotes that the field must not be equal to
4169 * any of the specified values of the `google.protobuf.Duration` type.
4170 * If the field's value matches any of these values, an error message will be
4171 * generated.
4172 *
4173 * ```proto
4174 * message MyDuration {
4175 * // value must not be in list [1s, 2s, 3s]
4176 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
4177 * }
4178 * ```
4179 *
4180 * @generated from field: repeated google.protobuf.Duration not_in = 8;
4181 */
4182 notIn: Duration[];
4183
4184 /**
4185 * `example` specifies values that the field may have. These values SHOULD
4186 * conform to other rules. `example` values will not impact validation
4187 * but may be used as helpful guidance on how to populate the given field.
4188 *
4189 * ```proto
4190 * message MyDuration {
4191 * google.protobuf.Duration value = 1 [
4192 * (buf.validate.field).duration.example = { seconds: 1 },
4193 * (buf.validate.field).duration.example = { seconds: 2 },
4194 * ];
4195 * }
4196 * ```
4197 *
4198 * @generated from field: repeated google.protobuf.Duration example = 9;
4199 */
4200 example: Duration[];
4201};
4202
4203/**
4204 * Describes the message buf.validate.DurationRules.
4205 * Use `create(DurationRulesSchema)` to create a new message.
4206 */
4207export const DurationRulesSchema: GenMessage<DurationRules> = /*@__PURE__*/
4208 messageDesc(file_buf_validate_validate, 25);
4209
4210/**
4211 * FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type.
4212 *
4213 * @generated from message buf.validate.FieldMaskRules
4214 */
4215export type FieldMaskRules = Message<"buf.validate.FieldMaskRules"> & {
4216 /**
4217 * `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly.
4218 * If the field's value deviates from the specified value, an error message
4219 * will be generated.
4220 *
4221 * ```proto
4222 * message MyFieldMask {
4223 * // value must equal ["a"]
4224 * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = {
4225 * paths: ["a"]
4226 * }];
4227 * }
4228 * ```
4229 *
4230 * @generated from field: optional google.protobuf.FieldMask const = 1;
4231 */
4232 const?: FieldMask;
4233
4234 /**
4235 * `in` requires the field value to only contain paths matching specified
4236 * values or their subpaths.
4237 * If any of the field value's paths doesn't match the rule,
4238 * an error message is generated.
4239 * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask
4240 *
4241 * ```proto
4242 * message MyFieldMask {
4243 * // The `value` FieldMask must only contain paths listed in `in`.
4244 * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {
4245 * in: ["a", "b", "c.a"]
4246 * }];
4247 * }
4248 * ```
4249 *
4250 * @generated from field: repeated string in = 2;
4251 */
4252 in: string[];
4253
4254 /**
4255 * `not_in` requires the field value to not contain paths matching specified
4256 * values or their subpaths.
4257 * If any of the field value's paths matches the rule,
4258 * an error message is generated.
4259 * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask
4260 *
4261 * ```proto
4262 * message MyFieldMask {
4263 * // The `value` FieldMask shall not contain paths listed in `not_in`.
4264 * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {
4265 * not_in: ["forbidden", "immutable", "c.a"]
4266 * }];
4267 * }
4268 * ```
4269 *
4270 * @generated from field: repeated string not_in = 3;
4271 */
4272 notIn: string[];
4273
4274 /**
4275 * `example` specifies values that the field may have. These values SHOULD
4276 * conform to other rules. `example` values will not impact validation
4277 * but may be used as helpful guidance on how to populate the given field.
4278 *
4279 * ```proto
4280 * message MyFieldMask {
4281 * google.protobuf.FieldMask value = 1 [
4282 * (buf.validate.field).field_mask.example = { paths: ["a", "b"] },
4283 * (buf.validate.field).field_mask.example = { paths: ["c.a", "d"] },
4284 * ];
4285 * }
4286 * ```
4287 *
4288 * @generated from field: repeated google.protobuf.FieldMask example = 4;
4289 */
4290 example: FieldMask[];
4291};
4292
4293/**
4294 * Describes the message buf.validate.FieldMaskRules.
4295 * Use `create(FieldMaskRulesSchema)` to create a new message.
4296 */
4297export const FieldMaskRulesSchema: GenMessage<FieldMaskRules> = /*@__PURE__*/
4298 messageDesc(file_buf_validate_validate, 26);
4299
4300/**
4301 * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.
4302 *
4303 * @generated from message buf.validate.TimestampRules
4304 */
4305export type TimestampRules = Message<"buf.validate.TimestampRules"> & {
4306 /**
4307 * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
4308 *
4309 * ```proto
4310 * message MyTimestamp {
4311 * // value must equal 2023-05-03T10:00:00Z
4312 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
4313 * }
4314 * ```
4315 *
4316 * @generated from field: optional google.protobuf.Timestamp const = 2;
4317 */
4318 const?: Timestamp;
4319
4320 /**
4321 * @generated from oneof buf.validate.TimestampRules.less_than
4322 */
4323 lessThan: {
4324 /**
4325 * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.
4326 *
4327 * ```proto
4328 * message MyDuration {
4329 * // duration must be less than 'P3D' [duration.lt]
4330 * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
4331 * }
4332 * ```
4333 *
4334 * @generated from field: google.protobuf.Timestamp lt = 3;
4335 */
4336 value: Timestamp;
4337 case: "lt";
4338 } | {
4339 /**
4340 * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.
4341 *
4342 * ```proto
4343 * message MyTimestamp {
4344 * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
4345 * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
4346 * }
4347 * ```
4348 *
4349 * @generated from field: google.protobuf.Timestamp lte = 4;
4350 */
4351 value: Timestamp;
4352 case: "lte";
4353 } | {
4354 /**
4355 * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
4356 *
4357 * ```proto
4358 * message MyTimestamp {
4359 * // value must be less than now
4360 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
4361 * }
4362 * ```
4363 *
4364 * @generated from field: bool lt_now = 7;
4365 */
4366 value: boolean;
4367 case: "ltNow";
4368 } | { case: undefined; value?: undefined };
4369
4370 /**
4371 * @generated from oneof buf.validate.TimestampRules.greater_than
4372 */
4373 greaterThan: {
4374 /**
4375 * `gt` requires the timestamp field value to be greater than the specified
4376 * value (exclusive). If the value of `gt` is larger than a specified `lt`
4377 * or `lte`, the range is reversed, and the field value must be outside the
4378 * specified range. If the field value doesn't meet the required conditions,
4379 * an error message is generated.
4380 *
4381 * ```proto
4382 * message MyTimestamp {
4383 * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
4384 * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
4385 *
4386 * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
4387 * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4388 *
4389 * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
4390 * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4391 * }
4392 * ```
4393 *
4394 * @generated from field: google.protobuf.Timestamp gt = 5;
4395 */
4396 value: Timestamp;
4397 case: "gt";
4398 } | {
4399 /**
4400 * `gte` requires the timestamp field value to be greater than or equal to the
4401 * specified value (exclusive). If the value of `gte` is larger than a
4402 * specified `lt` or `lte`, the range is reversed, and the field value
4403 * must be outside the specified range. If the field value doesn't meet
4404 * the required conditions, an error message is generated.
4405 *
4406 * ```proto
4407 * message MyTimestamp {
4408 * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
4409 * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
4410 *
4411 * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
4412 * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4413 *
4414 * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
4415 * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4416 * }
4417 * ```
4418 *
4419 * @generated from field: google.protobuf.Timestamp gte = 6;
4420 */
4421 value: Timestamp;
4422 case: "gte";
4423 } | {
4424 /**
4425 * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
4426 *
4427 * ```proto
4428 * message MyTimestamp {
4429 * // value must be greater than now
4430 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
4431 * }
4432 * ```
4433 *
4434 * @generated from field: bool gt_now = 8;
4435 */
4436 value: boolean;
4437 case: "gtNow";
4438 } | { case: undefined; value?: undefined };
4439
4440 /**
4441 * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
4442 *
4443 * ```proto
4444 * message MyTimestamp {
4445 * // value must be within 1 hour of now
4446 * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
4447 * }
4448 * ```
4449 *
4450 * @generated from field: optional google.protobuf.Duration within = 9;
4451 */
4452 within?: Duration;
4453
4454 /**
4455 * `example` specifies values that the field may have. These values SHOULD
4456 * conform to other rules. `example` values will not impact validation
4457 * but may be used as helpful guidance on how to populate the given field.
4458 *
4459 * ```proto
4460 * message MyTimestamp {
4461 * google.protobuf.Timestamp value = 1 [
4462 * (buf.validate.field).timestamp.example = { seconds: 1672444800 },
4463 * (buf.validate.field).timestamp.example = { seconds: 1672531200 },
4464 * ];
4465 * }
4466 * ```
4467 *
4468 * @generated from field: repeated google.protobuf.Timestamp example = 10;
4469 */
4470 example: Timestamp[];
4471};
4472
4473/**
4474 * Describes the message buf.validate.TimestampRules.
4475 * Use `create(TimestampRulesSchema)` to create a new message.
4476 */
4477export const TimestampRulesSchema: GenMessage<TimestampRules> = /*@__PURE__*/
4478 messageDesc(file_buf_validate_validate, 27);
4479
4480/**
4481 * `Violations` is a collection of `Violation` messages. This message type is returned by
4482 * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.
4483 * Each individual violation is represented by a `Violation` message.
4484 *
4485 * @generated from message buf.validate.Violations
4486 */
4487export type Violations = Message<"buf.validate.Violations"> & {
4488 /**
4489 * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
4490 *
4491 * @generated from field: repeated buf.validate.Violation violations = 1;
4492 */
4493 violations: Violation[];
4494};
4495
4496/**
4497 * Describes the message buf.validate.Violations.
4498 * Use `create(ViolationsSchema)` to create a new message.
4499 */
4500export const ViolationsSchema: GenMessage<Violations> = /*@__PURE__*/
4501 messageDesc(file_buf_validate_validate, 28);
4502
4503/**
4504 * `Violation` represents a single instance where a validation rule, expressed
4505 * as a `Rule`, was not met. It provides information about the field that
4506 * caused the violation, the specific rule that wasn't fulfilled, and a
4507 * human-readable error message.
4508 *
4509 * For example, consider the following message:
4510 *
4511 * ```proto
4512 * message User {
4513 * int32 age = 1 [(buf.validate.field).cel = {
4514 * id: "user.age",
4515 * expression: "this < 18 ? 'User must be at least 18 years old' : ''",
4516 * }];
4517 * }
4518 * ```
4519 *
4520 * It could produce the following violation:
4521 *
4522 * ```json
4523 * {
4524 * "ruleId": "user.age",
4525 * "message": "User must be at least 18 years old",
4526 * "field": {
4527 * "elements": [
4528 * {
4529 * "fieldNumber": 1,
4530 * "fieldName": "age",
4531 * "fieldType": "TYPE_INT32"
4532 * }
4533 * ]
4534 * },
4535 * "rule": {
4536 * "elements": [
4537 * {
4538 * "fieldNumber": 23,
4539 * "fieldName": "cel",
4540 * "fieldType": "TYPE_MESSAGE",
4541 * "index": "0"
4542 * }
4543 * ]
4544 * }
4545 * }
4546 * ```
4547 *
4548 * @generated from message buf.validate.Violation
4549 */
4550export type Violation = Message<"buf.validate.Violation"> & {
4551 /**
4552 * `field` is a machine-readable path to the field that failed validation.
4553 * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
4554 *
4555 * For example, consider the following message:
4556 *
4557 * ```proto
4558 * message Message {
4559 * bool a = 1 [(buf.validate.field).required = true];
4560 * }
4561 * ```
4562 *
4563 * It could produce the following violation:
4564 *
4565 * ```textproto
4566 * violation {
4567 * field { element { field_number: 1, field_name: "a", field_type: 8 } }
4568 * ...
4569 * }
4570 * ```
4571 *
4572 * @generated from field: optional buf.validate.FieldPath field = 5;
4573 */
4574 field?: FieldPath;
4575
4576 /**
4577 * `rule` is a machine-readable path that points to the specific rule that failed validation.
4578 * This will be a nested field starting from the FieldRules of the field that failed validation.
4579 * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.
4580 *
4581 * For example, consider the following message:
4582 *
4583 * ```proto
4584 * message Message {
4585 * bool a = 1 [(buf.validate.field).required = true];
4586 * bool b = 2 [(buf.validate.field).cel = {
4587 * id: "custom_rule",
4588 * expression: "!this ? 'b must be true': ''"
4589 * }]
4590 * }
4591 * ```
4592 *
4593 * It could produce the following violations:
4594 *
4595 * ```textproto
4596 * violation {
4597 * rule { element { field_number: 25, field_name: "required", field_type: 8 } }
4598 * ...
4599 * }
4600 * violation {
4601 * rule { element { field_number: 23, field_name: "cel", field_type: 11, index: 0 } }
4602 * ...
4603 * }
4604 * ```
4605 *
4606 * @generated from field: optional buf.validate.FieldPath rule = 6;
4607 */
4608 rule?: FieldPath;
4609
4610 /**
4611 * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.
4612 * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.
4613 *
4614 * @generated from field: optional string rule_id = 2;
4615 */
4616 ruleId: string;
4617
4618 /**
4619 * `message` is a human-readable error message that describes the nature of the violation.
4620 * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.
4621 *
4622 * @generated from field: optional string message = 3;
4623 */
4624 message: string;
4625
4626 /**
4627 * `for_key` indicates whether the violation was caused by a map key, rather than a value.
4628 *
4629 * @generated from field: optional bool for_key = 4;
4630 */
4631 forKey: boolean;
4632};
4633
4634/**
4635 * Describes the message buf.validate.Violation.
4636 * Use `create(ViolationSchema)` to create a new message.
4637 */
4638export const ViolationSchema: GenMessage<Violation> = /*@__PURE__*/
4639 messageDesc(file_buf_validate_validate, 29);
4640
4641/**
4642 * `FieldPath` provides a path to a nested protobuf field.
4643 *
4644 * This message provides enough information to render a dotted field path even without protobuf descriptors.
4645 * It also provides enough information to resolve a nested field through unknown wire data.
4646 *
4647 * @generated from message buf.validate.FieldPath
4648 */
4649export type FieldPath = Message<"buf.validate.FieldPath"> & {
4650 /**
4651 * `elements` contains each element of the path, starting from the root and recursing downward.
4652 *
4653 * @generated from field: repeated buf.validate.FieldPathElement elements = 1;
4654 */
4655 elements: FieldPathElement[];
4656};
4657
4658/**
4659 * Describes the message buf.validate.FieldPath.
4660 * Use `create(FieldPathSchema)` to create a new message.
4661 */
4662export const FieldPathSchema: GenMessage<FieldPath> = /*@__PURE__*/
4663 messageDesc(file_buf_validate_validate, 30);
4664
4665/**
4666 * `FieldPathElement` provides enough information to nest through a single protobuf field.
4667 *
4668 * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.
4669 * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.
4670 * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.
4671 *
4672 * @generated from message buf.validate.FieldPathElement
4673 */
4674export type FieldPathElement = Message<"buf.validate.FieldPathElement"> & {
4675 /**
4676 * `field_number` is the field number this path element refers to.
4677 *
4678 * @generated from field: optional int32 field_number = 1;
4679 */
4680 fieldNumber: number;
4681
4682 /**
4683 * `field_name` contains the field name this path element refers to.
4684 * This can be used to display a human-readable path even if the field number is unknown.
4685 *
4686 * @generated from field: optional string field_name = 2;
4687 */
4688 fieldName: string;
4689
4690 /**
4691 * `field_type` specifies the type of this field. When using reflection, this value is not needed.
4692 *
4693 * This value is provided to make it possible to traverse unknown fields through wire data.
4694 * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.
4695 *
4696 * [1]: https://protobuf.dev/programming-guides/encoding/#packed
4697 * [2]: https://protobuf.dev/programming-guides/encoding/#groups
4698 *
4699 * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and
4700 * can be explicitly used in Protocol Buffers 2023 Edition.
4701 *
4702 * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;
4703 */
4704 fieldType: FieldDescriptorProto_Type;
4705
4706 /**
4707 * `key_type` specifies the map key type of this field. This value is useful when traversing
4708 * unknown fields through wire data: specifically, it allows handling the differences between
4709 * different integer encodings.
4710 *
4711 * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;
4712 */
4713 keyType: FieldDescriptorProto_Type;
4714
4715 /**
4716 * `value_type` specifies map value type of this field. This is useful if you want to display a
4717 * value inside unknown fields through wire data.
4718 *
4719 * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;
4720 */
4721 valueType: FieldDescriptorProto_Type;
4722
4723 /**
4724 * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.
4725 *
4726 * @generated from oneof buf.validate.FieldPathElement.subscript
4727 */
4728 subscript: {
4729 /**
4730 * `index` specifies a 0-based index into a repeated field.
4731 *
4732 * @generated from field: uint64 index = 6;
4733 */
4734 value: bigint;
4735 case: "index";
4736 } | {
4737 /**
4738 * `bool_key` specifies a map key of type bool.
4739 *
4740 * @generated from field: bool bool_key = 7;
4741 */
4742 value: boolean;
4743 case: "boolKey";
4744 } | {
4745 /**
4746 * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.
4747 *
4748 * @generated from field: int64 int_key = 8;
4749 */
4750 value: bigint;
4751 case: "intKey";
4752 } | {
4753 /**
4754 * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.
4755 *
4756 * @generated from field: uint64 uint_key = 9;
4757 */
4758 value: bigint;
4759 case: "uintKey";
4760 } | {
4761 /**
4762 * `string_key` specifies a map key of type string.
4763 *
4764 * @generated from field: string string_key = 10;
4765 */
4766 value: string;
4767 case: "stringKey";
4768 } | { case: undefined; value?: undefined };
4769};
4770
4771/**
4772 * Describes the message buf.validate.FieldPathElement.
4773 * Use `create(FieldPathElementSchema)` to create a new message.
4774 */
4775export const FieldPathElementSchema: GenMessage<
4776 FieldPathElement
4777> = /*@__PURE__*/
4778 messageDesc(file_buf_validate_validate, 31);
4779
4780/**
4781 * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and
4782 * whether the field tracks presence.
4783 *
4784 * @generated from enum buf.validate.Ignore
4785 */
4786export enum Ignore {
4787 /**
4788 * Ignore rules if the field tracks presence and is unset. This is the default
4789 * behavior.
4790 *
4791 * In proto3, only message fields, members of a Protobuf `oneof`, and fields
4792 * with the `optional` label track presence. Consequently, the following fields
4793 * are always validated, whether a value is set or not:
4794 *
4795 * ```proto
4796 * syntax="proto3";
4797 *
4798 * message RulesApply {
4799 * string email = 1 [
4800 * (buf.validate.field).string.email = true
4801 * ];
4802 * int32 age = 2 [
4803 * (buf.validate.field).int32.gt = 0
4804 * ];
4805 * repeated string labels = 3 [
4806 * (buf.validate.field).repeated.min_items = 1
4807 * ];
4808 * }
4809 * ```
4810 *
4811 * In contrast, the following fields track presence, and are only validated if
4812 * a value is set:
4813 *
4814 * ```proto
4815 * syntax="proto3";
4816 *
4817 * message RulesApplyIfSet {
4818 * optional string email = 1 [
4819 * (buf.validate.field).string.email = true
4820 * ];
4821 * oneof ref {
4822 * string reference = 2 [
4823 * (buf.validate.field).string.uuid = true
4824 * ];
4825 * string name = 3 [
4826 * (buf.validate.field).string.min_len = 4
4827 * ];
4828 * }
4829 * SomeMessage msg = 4 [
4830 * (buf.validate.field).cel = {/* ... *\/}
4831 * ];
4832 * }
4833 * ```
4834 *
4835 * To ensure that such a field is set, add the `required` rule.
4836 *
4837 * To learn which fields track presence, see the
4838 * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
4839 *
4840 * @generated from enum value: IGNORE_UNSPECIFIED = 0;
4841 */
4842 UNSPECIFIED = 0,
4843
4844 /**
4845 * Ignore rules if the field is unset, or set to the zero value.
4846 *
4847 * The zero value depends on the field type:
4848 * - For strings, the zero value is the empty string.
4849 * - For bytes, the zero value is empty bytes.
4850 * - For bool, the zero value is false.
4851 * - For numeric types, the zero value is zero.
4852 * - For enums, the zero value is the first defined enum value.
4853 * - For repeated fields, the zero is an empty list.
4854 * - For map fields, the zero is an empty map.
4855 * - For message fields, absence of the message (typically a null-value) is considered zero value.
4856 *
4857 * For fields that track presence (e.g. adding the `optional` label in proto3),
4858 * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.
4859 *
4860 * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1;
4861 */
4862 IF_ZERO_VALUE = 1,
4863
4864 /**
4865 * Always ignore rules, including the `required` rule.
4866 *
4867 * This is useful for ignoring the rules of a referenced message, or to
4868 * temporarily ignore rules during development.
4869 *
4870 * ```proto
4871 * message MyMessage {
4872 * // The field's rules will always be ignored, including any validations
4873 * // on value's fields.
4874 * MyOtherMessage value = 1 [
4875 * (buf.validate.field).ignore = IGNORE_ALWAYS
4876 * ];
4877 * }
4878 * ```
4879 *
4880 * @generated from enum value: IGNORE_ALWAYS = 3;
4881 */
4882 ALWAYS = 3,
4883}
4884
4885/**
4886 * Describes the enum buf.validate.Ignore.
4887 */
4888export const IgnoreSchema: GenEnum<Ignore> = /*@__PURE__*/
4889 enumDesc(file_buf_validate_validate, 0);
4890
4891/**
4892 * KnownRegex contains some well-known patterns.
4893 *
4894 * @generated from enum buf.validate.KnownRegex
4895 */
4896export enum KnownRegex {
4897 /**
4898 * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;
4899 */
4900 UNSPECIFIED = 0,
4901
4902 /**
4903 * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).
4904 *
4905 * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;
4906 */
4907 HTTP_HEADER_NAME = 1,
4908
4909 /**
4910 * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).
4911 *
4912 * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;
4913 */
4914 HTTP_HEADER_VALUE = 2,
4915}
4916
4917/**
4918 * Describes the enum buf.validate.KnownRegex.
4919 */
4920export const KnownRegexSchema: GenEnum<KnownRegex> = /*@__PURE__*/
4921 enumDesc(file_buf_validate_validate, 1);
4922
4923/**
4924 * Rules specify the validations to be performed on this message. By default,
4925 * no validation is performed against a message.
4926 *
4927 * @generated from extension: optional buf.validate.MessageRules message = 1159;
4928 */
4929export const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/
4930 extDesc(file_buf_validate_validate, 0);
4931
4932/**
4933 * Rules specify the validations to be performed on this oneof. By default,
4934 * no validation is performed against a oneof.
4935 *
4936 * @generated from extension: optional buf.validate.OneofRules oneof = 1159;
4937 */
4938export const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/
4939 extDesc(file_buf_validate_validate, 1);
4940
4941/**
4942 * Rules specify the validations to be performed on this field. By default,
4943 * no validation is performed against a field.
4944 *
4945 * @generated from extension: optional buf.validate.FieldRules field = 1159;
4946 */
4947export const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/
4948 extDesc(file_buf_validate_validate, 2);
4949
4950/**
4951 * Specifies predefined rules. When extending a standard rule message,
4952 * this adds additional CEL expressions that apply when the extension is used.
4953 *
4954 * ```proto
4955 * extend buf.validate.Int32Rules {
4956 * bool is_zero [(buf.validate.predefined).cel = {
4957 * id: "int32.is_zero",
4958 * message: "value must be zero",
4959 * expression: "!rule || this == 0",
4960 * }];
4961 * }
4962 *
4963 * message Foo {
4964 * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];
4965 * }
4966 * ```
4967 *
4968 * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;
4969 */
4970export const predefined: GenExtension<
4971 FieldOptions,
4972 PredefinedRules
4973> = /*@__PURE__*/
4974 extDesc(file_buf_validate_validate, 3);