Openstatus sdk www.openstatus.dev

init sdk

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