@mochabug/adaptkit 0.14.6 → 1.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/build-client.js +107 -0
- package/assets/build.js +57 -0
- package/assets/configurator.App.tsx +123 -0
- package/assets/configurator.main.tsx +19 -0
- package/assets/configurator.ssg.tsx +31 -0
- package/assets/{configurator.ts → configurator_none.ts} +1 -1
- package/assets/configurator_react.tsx +38 -0
- package/assets/executor.App.tsx +103 -0
- package/assets/executor.main.tsx +19 -0
- package/assets/executor.ssg.tsx +31 -0
- package/assets/{executor_browser.ts → executor_browser_none.ts} +1 -1
- package/assets/executor_browser_react.tsx +51 -0
- package/assets/gitignore +3 -0
- package/assets/global.d.ts +7 -0
- package/assets/inject.js +15 -0
- package/assets/tsconf.json +9 -3
- package/bin/index.js +12 -3247
- package/bin/index.js.map +7 -0
- package/package.json +10 -22
- package/assets/rollup.config.ts +0 -40
- package/bin/add.d.ts +0 -3
- package/bin/add.d.ts.map +0 -1
- package/bin/genproto/buf/validate/validate.d.ts +0 -4657
- package/bin/genproto/buf/validate/validate.d.ts.map +0 -1
- package/bin/genproto/google/api/client.d.ts +0 -785
- package/bin/genproto/google/api/client.d.ts.map +0 -1
- package/bin/genproto/google/api/http.d.ts +0 -452
- package/bin/genproto/google/api/http.d.ts.map +0 -1
- package/bin/genproto/google/api/launch_stage.d.ts +0 -78
- package/bin/genproto/google/api/launch_stage.d.ts.map +0 -1
- package/bin/genproto/google/protobuf/descriptor.d.ts +0 -2337
- package/bin/genproto/google/protobuf/descriptor.d.ts.map +0 -1
- package/bin/genproto/google/protobuf/duration.d.ts +0 -113
- package/bin/genproto/google/protobuf/duration.d.ts.map +0 -1
- package/bin/genproto/google/protobuf/struct.d.ts +0 -185
- package/bin/genproto/google/protobuf/struct.d.ts.map +0 -1
- package/bin/genproto/google/protobuf/timestamp.d.ts +0 -156
- package/bin/genproto/google/protobuf/timestamp.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/exchange.d.ts +0 -50
- package/bin/genproto/mochabugapis/adapt/graph/exchange.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/jtd_schema.d.ts +0 -129
- package/bin/genproto/mochabugapis/adapt/graph/jtd_schema.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/receiver.d.ts +0 -46
- package/bin/genproto/mochabugapis/adapt/graph/receiver.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/signal_binding.d.ts +0 -93
- package/bin/genproto/mochabugapis/adapt/graph/signal_binding.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/signal_descriptor.d.ts +0 -56
- package/bin/genproto/mochabugapis/adapt/graph/signal_descriptor.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/transceiver.d.ts +0 -44
- package/bin/genproto/mochabugapis/adapt/graph/transceiver.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/transmitter.d.ts +0 -50
- package/bin/genproto/mochabugapis/adapt/graph/transmitter.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/graph/vertex_config.d.ts +0 -68
- package/bin/genproto/mochabugapis/adapt/graph/vertex_config.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/plugins/v1/plugins.client.d.ts +0 -46
- package/bin/genproto/mochabugapis/adapt/plugins/v1/plugins.client.d.ts.map +0 -1
- package/bin/genproto/mochabugapis/adapt/plugins/v1/plugins.d.ts +0 -840
- package/bin/genproto/mochabugapis/adapt/plugins/v1/plugins.d.ts.map +0 -1
- package/bin/index.d.ts +0 -2
- package/bin/index.d.ts.map +0 -1
- package/bin/init.d.ts +0 -2
- package/bin/init.d.ts.map +0 -1
- package/bin/oauth2.d.ts +0 -2
- package/bin/oauth2.d.ts.map +0 -1
- package/bin/publish.d.ts +0 -4
- package/bin/publish.d.ts.map +0 -1
- package/bin/utils.d.ts +0 -6
- package/bin/utils.d.ts.map +0 -1
- package/bin/vertices.d.ts +0 -3
- package/bin/vertices.d.ts.map +0 -1
package/bin/index.js
CHANGED
|
@@ -1,2340 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { program } from 'commander';
|
|
4
|
-
|
|
5
|
-
import fs from 'fs';
|
|
6
|
-
import isValidHostname from 'is-valid-hostname';
|
|
7
|
-
import path from 'path';
|
|
8
|
-
import semver from 'semver';
|
|
9
|
-
import updateNotifier from 'update-notifier';
|
|
10
|
-
import { input, select, confirm } from '@inquirer/prompts';
|
|
11
|
-
import { ServiceType, stackIntercept, RpcError } from '@protobuf-ts/runtime-rpc';
|
|
12
|
-
import { MessageType, reflectionMergePartial, UnknownFieldHandler, WireType, isJsonObject, typeofJsonValue } from '@protobuf-ts/runtime';
|
|
13
|
-
import { mkdirp } from 'mkdirp';
|
|
14
|
-
import { fileURLToPath } from 'url';
|
|
15
|
-
import { execSync } from 'child_process';
|
|
16
|
-
import { randomBytes } from 'crypto';
|
|
17
|
-
import express from 'express';
|
|
18
|
-
import fetch from 'node-fetch';
|
|
19
|
-
import open from 'open';
|
|
20
|
-
import pkceChallenge from 'pkce-challenge';
|
|
21
|
-
import { ChannelCredentials } from '@grpc/grpc-js';
|
|
22
|
-
import { GrpcTransport } from '@protobuf-ts/grpc-transport';
|
|
23
|
-
import archiver from 'archiver';
|
|
24
|
-
import fg from 'fast-glob';
|
|
25
|
-
import sharp from 'sharp';
|
|
26
|
-
import { PassThrough } from 'stream';
|
|
27
|
-
|
|
28
|
-
// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none
|
|
29
|
-
// @generated from protobuf file "mochabugapis/adapt/plugins/v1/plugins.proto" (package "mochabugapis.adapt.plugins.v1", syntax proto3)
|
|
30
|
-
// tslint:disable
|
|
31
|
-
//
|
|
32
|
-
// Copyright 2023, mochabug AB
|
|
33
|
-
//
|
|
34
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
35
|
-
// you may not use this file except in compliance with the License.
|
|
36
|
-
// You may obtain a copy of the License at
|
|
37
|
-
//
|
|
38
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
39
|
-
//
|
|
40
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
41
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
42
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
43
|
-
// See the License for the specific language governing permissions and
|
|
44
|
-
// limitations under the License.
|
|
45
|
-
//
|
|
46
|
-
/**
|
|
47
|
-
* VertexType represents the type of a vertex.
|
|
48
|
-
*
|
|
49
|
-
* @generated from protobuf enum mochabugapis.adapt.plugins.v1.Vertex.VertexType
|
|
50
|
-
*/
|
|
51
|
-
var Vertex_VertexType;
|
|
52
|
-
(function (Vertex_VertexType) {
|
|
53
|
-
/**
|
|
54
|
-
* Unspecified type (default value, should not be used).
|
|
55
|
-
*
|
|
56
|
-
* @generated from protobuf enum value: VERTEX_TYPE_UNSPECIFIED = 0;
|
|
57
|
-
*/
|
|
58
|
-
Vertex_VertexType[Vertex_VertexType["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
59
|
-
/**
|
|
60
|
-
* Action type, available in all contexts and not exposed to the outside
|
|
61
|
-
* world. This type has a lower security risk.
|
|
62
|
-
*
|
|
63
|
-
* @generated from protobuf enum value: VERTEX_TYPE_ACTION = 1;
|
|
64
|
-
*/
|
|
65
|
-
Vertex_VertexType[Vertex_VertexType["ACTION"] = 1] = "ACTION";
|
|
66
|
-
/**
|
|
67
|
-
* Browser type, available only in a browser context.
|
|
68
|
-
* The configuration always runs inside a browser context.
|
|
69
|
-
* Security implications: be cautious about potentially sensitive data
|
|
70
|
-
* exposure.
|
|
71
|
-
*
|
|
72
|
-
* @generated from protobuf enum value: VERTEX_TYPE_BROWSER = 2;
|
|
73
|
-
*/
|
|
74
|
-
Vertex_VertexType[Vertex_VertexType["BROWSER"] = 2] = "BROWSER";
|
|
75
|
-
/**
|
|
76
|
-
* CronTrigger type, available only in a trigger context.
|
|
77
|
-
* Triggered at specific intervals.
|
|
78
|
-
*
|
|
79
|
-
* @generated from protobuf enum value: VERTEX_TYPE_CRON_TRIGGER = 3;
|
|
80
|
-
*/
|
|
81
|
-
Vertex_VertexType[Vertex_VertexType["CRON_TRIGGER"] = 3] = "CRON_TRIGGER";
|
|
82
|
-
/**
|
|
83
|
-
* ExternalTrigger type, available only in a trigger context.
|
|
84
|
-
* Accessible via a publicly routable address.
|
|
85
|
-
* Security implications: be cautious about exposing sensitive data or
|
|
86
|
-
* functionality.
|
|
87
|
-
*
|
|
88
|
-
* @generated from protobuf enum value: VERTEX_TYPE_EXTERNAL_TRIGGER = 4;
|
|
89
|
-
*/
|
|
90
|
-
Vertex_VertexType[Vertex_VertexType["EXTERNAL_TRIGGER"] = 4] = "EXTERNAL_TRIGGER";
|
|
91
|
-
})(Vertex_VertexType || (Vertex_VertexType = {}));
|
|
92
|
-
/**
|
|
93
|
-
* The type of variable
|
|
94
|
-
*
|
|
95
|
-
* @generated from protobuf enum mochabugapis.adapt.plugins.v1.VariableService.Type
|
|
96
|
-
*/
|
|
97
|
-
var VariableService_Type;
|
|
98
|
-
(function (VariableService_Type) {
|
|
99
|
-
/**
|
|
100
|
-
* The type is not specified. Invalid value
|
|
101
|
-
*
|
|
102
|
-
* @generated from protobuf enum value: TYPE_UNSPECIFIED = 0;
|
|
103
|
-
*/
|
|
104
|
-
VariableService_Type[VariableService_Type["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
105
|
-
/**
|
|
106
|
-
* The variable will hold a secret
|
|
107
|
-
*
|
|
108
|
-
* @generated from protobuf enum value: TYPE_SECRET = 1;
|
|
109
|
-
*/
|
|
110
|
-
VariableService_Type[VariableService_Type["SECRET"] = 1] = "SECRET";
|
|
111
|
-
/**
|
|
112
|
-
* The variable will hold a string
|
|
113
|
-
*
|
|
114
|
-
* @generated from protobuf enum value: TYPE_STRING = 2;
|
|
115
|
-
*/
|
|
116
|
-
VariableService_Type[VariableService_Type["STRING"] = 2] = "STRING";
|
|
117
|
-
/**
|
|
118
|
-
* The variable is a boolean value (a string either "true" or "false")
|
|
119
|
-
*
|
|
120
|
-
* @generated from protobuf enum value: TYPE_SWITCH = 3;
|
|
121
|
-
*/
|
|
122
|
-
VariableService_Type[VariableService_Type["SWITCH"] = 3] = "SWITCH";
|
|
123
|
-
})(VariableService_Type || (VariableService_Type = {}));
|
|
124
|
-
/**
|
|
125
|
-
* The algorithm used for signing JWT or SAML assertions
|
|
126
|
-
*
|
|
127
|
-
* @generated from protobuf enum mochabugapis.adapt.plugins.v1.PrivateKeyAlg
|
|
128
|
-
*/
|
|
129
|
-
var PrivateKeyAlg;
|
|
130
|
-
(function (PrivateKeyAlg) {
|
|
131
|
-
/**
|
|
132
|
-
* Unknown algorithm (invalid)
|
|
133
|
-
*
|
|
134
|
-
* @generated from protobuf enum value: PRIVATE_KEY_ALG_UNSPECIFIED = 0;
|
|
135
|
-
*/
|
|
136
|
-
PrivateKeyAlg[PrivateKeyAlg["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
137
|
-
/**
|
|
138
|
-
* RS256 algorithm
|
|
139
|
-
*
|
|
140
|
-
* @generated from protobuf enum value: PRIVATE_KEY_ALG_RS256 = 1;
|
|
141
|
-
*/
|
|
142
|
-
PrivateKeyAlg[PrivateKeyAlg["RS256"] = 1] = "RS256";
|
|
143
|
-
})(PrivateKeyAlg || (PrivateKeyAlg = {}));
|
|
144
|
-
/**
|
|
145
|
-
* The OAuth2 grant type
|
|
146
|
-
*
|
|
147
|
-
* @generated from protobuf enum mochabugapis.adapt.plugins.v1.Oauth2GrantType
|
|
148
|
-
*/
|
|
149
|
-
var Oauth2GrantType;
|
|
150
|
-
(function (Oauth2GrantType) {
|
|
151
|
-
/**
|
|
152
|
-
* Not specified (invalid)
|
|
153
|
-
*
|
|
154
|
-
* @generated from protobuf enum value: OAUTH2_GRANT_TYPE_UNSPECIFIED = 0;
|
|
155
|
-
*/
|
|
156
|
-
Oauth2GrantType[Oauth2GrantType["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
157
|
-
/**
|
|
158
|
-
* Authorization Code Grant
|
|
159
|
-
* grant_type=authorization_code
|
|
160
|
-
*
|
|
161
|
-
* @generated from protobuf enum value: OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE = 1;
|
|
162
|
-
*/
|
|
163
|
-
Oauth2GrantType[Oauth2GrantType["AUTHORIZATION_CODE"] = 1] = "AUTHORIZATION_CODE";
|
|
164
|
-
/**
|
|
165
|
-
* Client Credentials Grant
|
|
166
|
-
* grant_type=client_credentials
|
|
167
|
-
*
|
|
168
|
-
* @generated from protobuf enum value: OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS = 2;
|
|
169
|
-
*/
|
|
170
|
-
Oauth2GrantType[Oauth2GrantType["CLIENT_CREDENTIALS"] = 2] = "CLIENT_CREDENTIALS";
|
|
171
|
-
/**
|
|
172
|
-
* JWT Bearer Assertion Grant
|
|
173
|
-
* grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
|
|
174
|
-
*
|
|
175
|
-
* @generated from protobuf enum value: OAUTH2_GRANT_TYPE_JWT_BEARER = 3;
|
|
176
|
-
*/
|
|
177
|
-
Oauth2GrantType[Oauth2GrantType["JWT_BEARER"] = 3] = "JWT_BEARER";
|
|
178
|
-
/**
|
|
179
|
-
* SAML 2.0 Bearer Assertion Grant
|
|
180
|
-
* grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer
|
|
181
|
-
*
|
|
182
|
-
* @generated from protobuf enum value: OAUTH2_GRANT_TYPE_SAML2_BEARER = 4;
|
|
183
|
-
*/
|
|
184
|
-
Oauth2GrantType[Oauth2GrantType["SAML2_BEARER"] = 4] = "SAML2_BEARER";
|
|
185
|
-
})(Oauth2GrantType || (Oauth2GrantType = {}));
|
|
186
|
-
/**
|
|
187
|
-
* The OAuth2 client authentication method
|
|
188
|
-
*
|
|
189
|
-
* @generated from protobuf enum mochabugapis.adapt.plugins.v1.Oauth2AuthType
|
|
190
|
-
*/
|
|
191
|
-
var Oauth2AuthType;
|
|
192
|
-
(function (Oauth2AuthType) {
|
|
193
|
-
/**
|
|
194
|
-
* Not specified (invalid)
|
|
195
|
-
*
|
|
196
|
-
* @generated from protobuf enum value: OAUTH2_AUTH_TYPE_UNSPECIFIED = 0;
|
|
197
|
-
*/
|
|
198
|
-
Oauth2AuthType[Oauth2AuthType["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
199
|
-
/**
|
|
200
|
-
* Basic Authentication (client ID and secret in Authorization header)
|
|
201
|
-
*
|
|
202
|
-
* @generated from protobuf enum value: OAUTH2_AUTH_TYPE_BASIC = 1;
|
|
203
|
-
*/
|
|
204
|
-
Oauth2AuthType[Oauth2AuthType["BASIC"] = 1] = "BASIC";
|
|
205
|
-
/**
|
|
206
|
-
* Form Authentication (client ID and secret in form body)
|
|
207
|
-
*
|
|
208
|
-
* @generated from protobuf enum value: OAUTH2_AUTH_TYPE_FORM = 2;
|
|
209
|
-
*/
|
|
210
|
-
Oauth2AuthType[Oauth2AuthType["FORM"] = 2] = "FORM";
|
|
211
|
-
/**
|
|
212
|
-
* Private Key JWT Authentication
|
|
213
|
-
* client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
|
|
214
|
-
*
|
|
215
|
-
* @generated from protobuf enum value: OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT = 3;
|
|
216
|
-
*/
|
|
217
|
-
Oauth2AuthType[Oauth2AuthType["PRIVATE_KEY_JWT"] = 3] = "PRIVATE_KEY_JWT";
|
|
218
|
-
/**
|
|
219
|
-
* Mutual TLS Authentication
|
|
220
|
-
*
|
|
221
|
-
* @generated from protobuf enum value: OAUTH2_AUTH_TYPE_MTLS = 4;
|
|
222
|
-
*/
|
|
223
|
-
Oauth2AuthType[Oauth2AuthType["MTLS"] = 4] = "MTLS";
|
|
224
|
-
/**
|
|
225
|
-
* SAML 2.0 Bearer Assertion for Client Authentication
|
|
226
|
-
* client_assertion_type=urn:ietf:params:oauth:client-assertion-type:saml2-bearer
|
|
227
|
-
*
|
|
228
|
-
* @generated from protobuf enum value: OAUTH2_AUTH_TYPE_SAML2_BEARER = 5;
|
|
229
|
-
*/
|
|
230
|
-
Oauth2AuthType[Oauth2AuthType["SAML2_BEARER"] = 5] = "SAML2_BEARER";
|
|
231
|
-
})(Oauth2AuthType || (Oauth2AuthType = {}));
|
|
232
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
233
|
-
class UploadPluginRequest$Type extends MessageType {
|
|
234
|
-
constructor() {
|
|
235
|
-
super("mochabugapis.adapt.plugins.v1.UploadPluginRequest", [
|
|
236
|
-
{ no: 1, name: "manifest", kind: "message", oneof: "data", T: () => Manifest },
|
|
237
|
-
{ no: 2, name: "file", kind: "message", oneof: "data", T: () => File }
|
|
238
|
-
]);
|
|
239
|
-
}
|
|
240
|
-
create(value) {
|
|
241
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
242
|
-
message.data = { oneofKind: undefined };
|
|
243
|
-
if (value !== undefined)
|
|
244
|
-
reflectionMergePartial(this, message, value);
|
|
245
|
-
return message;
|
|
246
|
-
}
|
|
247
|
-
internalBinaryRead(reader, length, options, target) {
|
|
248
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
249
|
-
while (reader.pos < end) {
|
|
250
|
-
let [fieldNo, wireType] = reader.tag();
|
|
251
|
-
switch (fieldNo) {
|
|
252
|
-
case /* mochabugapis.adapt.plugins.v1.Manifest manifest */ 1:
|
|
253
|
-
message.data = {
|
|
254
|
-
oneofKind: "manifest",
|
|
255
|
-
manifest: Manifest.internalBinaryRead(reader, reader.uint32(), options, message.data.manifest)
|
|
256
|
-
};
|
|
257
|
-
break;
|
|
258
|
-
case /* mochabugapis.adapt.plugins.v1.File file */ 2:
|
|
259
|
-
message.data = {
|
|
260
|
-
oneofKind: "file",
|
|
261
|
-
file: File.internalBinaryRead(reader, reader.uint32(), options, message.data.file)
|
|
262
|
-
};
|
|
263
|
-
break;
|
|
264
|
-
default:
|
|
265
|
-
let u = options.readUnknownField;
|
|
266
|
-
if (u === "throw")
|
|
267
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
268
|
-
let d = reader.skip(wireType);
|
|
269
|
-
if (u !== false)
|
|
270
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
return message;
|
|
274
|
-
}
|
|
275
|
-
internalBinaryWrite(message, writer, options) {
|
|
276
|
-
/* mochabugapis.adapt.plugins.v1.Manifest manifest = 1; */
|
|
277
|
-
if (message.data.oneofKind === "manifest")
|
|
278
|
-
Manifest.internalBinaryWrite(message.data.manifest, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
|
279
|
-
/* mochabugapis.adapt.plugins.v1.File file = 2; */
|
|
280
|
-
if (message.data.oneofKind === "file")
|
|
281
|
-
File.internalBinaryWrite(message.data.file, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
|
282
|
-
let u = options.writeUnknownFields;
|
|
283
|
-
if (u !== false)
|
|
284
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
285
|
-
return writer;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.UploadPluginRequest
|
|
290
|
-
*/
|
|
291
|
-
const UploadPluginRequest = new UploadPluginRequest$Type();
|
|
292
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
293
|
-
class UploadPluginResponse$Type extends MessageType {
|
|
294
|
-
constructor() {
|
|
295
|
-
super("mochabugapis.adapt.plugins.v1.UploadPluginResponse", []);
|
|
296
|
-
}
|
|
297
|
-
create(value) {
|
|
298
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
299
|
-
if (value !== undefined)
|
|
300
|
-
reflectionMergePartial(this, message, value);
|
|
301
|
-
return message;
|
|
302
|
-
}
|
|
303
|
-
internalBinaryRead(reader, length, options, target) {
|
|
304
|
-
return target ?? this.create();
|
|
305
|
-
}
|
|
306
|
-
internalBinaryWrite(message, writer, options) {
|
|
307
|
-
let u = options.writeUnknownFields;
|
|
308
|
-
if (u !== false)
|
|
309
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
310
|
-
return writer;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.UploadPluginResponse
|
|
315
|
-
*/
|
|
316
|
-
const UploadPluginResponse = new UploadPluginResponse$Type();
|
|
317
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
318
|
-
class File$Type extends MessageType {
|
|
319
|
-
constructor() {
|
|
320
|
-
super("mochabugapis.adapt.plugins.v1.File", [
|
|
321
|
-
{ no: 1, name: "path", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "2", maxLen: "4096", pattern: "^[^/]+(\\/[^/]+)*$" } } } },
|
|
322
|
-
{ no: 2, name: "data", kind: "scalar", T: 12 /*ScalarType.BYTES*/, options: { "buf.validate.field": { bytes: { minLen: "1", maxLen: "10485760" } } } }
|
|
323
|
-
]);
|
|
324
|
-
}
|
|
325
|
-
create(value) {
|
|
326
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
327
|
-
message.path = "";
|
|
328
|
-
message.data = new Uint8Array(0);
|
|
329
|
-
if (value !== undefined)
|
|
330
|
-
reflectionMergePartial(this, message, value);
|
|
331
|
-
return message;
|
|
332
|
-
}
|
|
333
|
-
internalBinaryRead(reader, length, options, target) {
|
|
334
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
335
|
-
while (reader.pos < end) {
|
|
336
|
-
let [fieldNo, wireType] = reader.tag();
|
|
337
|
-
switch (fieldNo) {
|
|
338
|
-
case /* string path */ 1:
|
|
339
|
-
message.path = reader.string();
|
|
340
|
-
break;
|
|
341
|
-
case /* bytes data */ 2:
|
|
342
|
-
message.data = reader.bytes();
|
|
343
|
-
break;
|
|
344
|
-
default:
|
|
345
|
-
let u = options.readUnknownField;
|
|
346
|
-
if (u === "throw")
|
|
347
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
348
|
-
let d = reader.skip(wireType);
|
|
349
|
-
if (u !== false)
|
|
350
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
return message;
|
|
354
|
-
}
|
|
355
|
-
internalBinaryWrite(message, writer, options) {
|
|
356
|
-
/* string path = 1; */
|
|
357
|
-
if (message.path !== "")
|
|
358
|
-
writer.tag(1, WireType.LengthDelimited).string(message.path);
|
|
359
|
-
/* bytes data = 2; */
|
|
360
|
-
if (message.data.length)
|
|
361
|
-
writer.tag(2, WireType.LengthDelimited).bytes(message.data);
|
|
362
|
-
let u = options.writeUnknownFields;
|
|
363
|
-
if (u !== false)
|
|
364
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
365
|
-
return writer;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.File
|
|
370
|
-
*/
|
|
371
|
-
const File = new File$Type();
|
|
372
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
373
|
-
class Manifest$Type extends MessageType {
|
|
374
|
-
constructor() {
|
|
375
|
-
super("mochabugapis.adapt.plugins.v1.Manifest", [
|
|
376
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
377
|
-
{ no: 2, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "5", maxLen: "150", pattern: "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" } } } },
|
|
378
|
-
{ no: 3, name: "label", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100" } } } },
|
|
379
|
-
{ no: 4, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "250" } } } },
|
|
380
|
-
{ no: 5, name: "organization", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { uuid: true } } } },
|
|
381
|
-
{ no: 6, name: "homepage", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "11", maxLen: "4096", pattern: "^https://[a-zA-Z0-9.-]+(?:\\.[a-zA-Z]{2,})(?:/.*)?$" } } } },
|
|
382
|
-
{ no: 7, name: "repository", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "11", maxLen: "4096", pattern: "^https://[a-zA-Z0-9.-]+(?:\\.[a-zA-Z]{2,})(?:/.*)?$" } } } },
|
|
383
|
-
{ no: 8, name: "bugs", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { cel: [{ id: "valid_email_or_url", message: "bugs must be a valid email or URL", expression: "size(this) >= 2 && size(this) <= 4096 && (this.isEmail() || this.matches('^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$'))" }], ignore: "IGNORE_EMPTY" } } },
|
|
384
|
-
{ no: 9, name: "author", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "100" } } } },
|
|
385
|
-
{ no: 10, name: "logo", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "2", maxLen: "4096", pattern: "^([^/]+(/[^/]+)*)\\.(gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp|avif)$" } } } },
|
|
386
|
-
{ no: 11, name: "executors", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "2", maxLen: "4096", pattern: "^([^/]+(/[^/]+)*)\\.(mjs|js)$" } } } },
|
|
387
|
-
{ no: 12, name: "configurators", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "2", maxLen: "4096", pattern: "^([^/]+(/[^/]+)*)\\.(mjs|js)$" } } } },
|
|
388
|
-
{ no: 13, name: "assets", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "2", maxLen: "4096", pattern: "^[^/]+(\\/[^/]+)*$" } } } },
|
|
389
|
-
{ no: 14, name: "cdn", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "2", maxLen: "4096", pattern: "^[^/]+(\\/[^/]+)*$" } } } },
|
|
390
|
-
{ no: 15, name: "vertices", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Vertex, options: { "buf.validate.field": { cel: [{ id: "vertex_unique_names", message: "a name cannot appear more than once", expression: "this.map(vertex, vertex.name).unique()" }], repeated: { minItems: "1", maxItems: "100" } } } },
|
|
391
|
-
{ no: 16, name: "plugin_oauth2", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2Service, options: { "buf.validate.field": { cel: [{ id: "plugin_oauth2.oauth_unique_names", message: "a name cannot appear more than once", expression: "this.map(oauth, oauth.name).unique()" }], repeated: { minItems: "0", maxItems: "20", items: { cel: [{ id: "plugin_oauth2.oauth2.client_id", message: "The client_id property must be set", expression: "has(this.client_id)" }] } } } } },
|
|
392
|
-
{ no: 17, name: "plugin_variables", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => VariableService, options: { "buf.validate.field": { cel: [{ id: "vars_unique_names", message: "a name cannot appear more than once", expression: "this.map(variable, variable.name).unique()" }], repeated: { minItems: "0", maxItems: "100" } } } },
|
|
393
|
-
{ no: 18, name: "plugin_mtls", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => MTLSService, options: { "buf.validate.field": { cel: [{ id: "mtls_unique_names", message: "a name cannot appear more than once", expression: "this.map(mtls, mtls.name).unique()" }], repeated: { minItems: "0", maxItems: "20" } } } }
|
|
394
|
-
]);
|
|
395
|
-
}
|
|
396
|
-
create(value) {
|
|
397
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
398
|
-
message.name = "";
|
|
399
|
-
message.version = "";
|
|
400
|
-
message.label = "";
|
|
401
|
-
message.description = "";
|
|
402
|
-
message.organization = "";
|
|
403
|
-
message.executors = "";
|
|
404
|
-
message.vertices = [];
|
|
405
|
-
message.pluginOauth2 = [];
|
|
406
|
-
message.pluginVariables = [];
|
|
407
|
-
message.pluginMtls = [];
|
|
408
|
-
if (value !== undefined)
|
|
409
|
-
reflectionMergePartial(this, message, value);
|
|
410
|
-
return message;
|
|
411
|
-
}
|
|
412
|
-
internalBinaryRead(reader, length, options, target) {
|
|
413
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
414
|
-
while (reader.pos < end) {
|
|
415
|
-
let [fieldNo, wireType] = reader.tag();
|
|
416
|
-
switch (fieldNo) {
|
|
417
|
-
case /* string name */ 1:
|
|
418
|
-
message.name = reader.string();
|
|
419
|
-
break;
|
|
420
|
-
case /* string version */ 2:
|
|
421
|
-
message.version = reader.string();
|
|
422
|
-
break;
|
|
423
|
-
case /* string label */ 3:
|
|
424
|
-
message.label = reader.string();
|
|
425
|
-
break;
|
|
426
|
-
case /* string description */ 4:
|
|
427
|
-
message.description = reader.string();
|
|
428
|
-
break;
|
|
429
|
-
case /* string organization */ 5:
|
|
430
|
-
message.organization = reader.string();
|
|
431
|
-
break;
|
|
432
|
-
case /* optional string homepage */ 6:
|
|
433
|
-
message.homepage = reader.string();
|
|
434
|
-
break;
|
|
435
|
-
case /* optional string repository */ 7:
|
|
436
|
-
message.repository = reader.string();
|
|
437
|
-
break;
|
|
438
|
-
case /* optional string bugs */ 8:
|
|
439
|
-
message.bugs = reader.string();
|
|
440
|
-
break;
|
|
441
|
-
case /* optional string author */ 9:
|
|
442
|
-
message.author = reader.string();
|
|
443
|
-
break;
|
|
444
|
-
case /* optional string logo */ 10:
|
|
445
|
-
message.logo = reader.string();
|
|
446
|
-
break;
|
|
447
|
-
case /* string executors */ 11:
|
|
448
|
-
message.executors = reader.string();
|
|
449
|
-
break;
|
|
450
|
-
case /* optional string configurators */ 12:
|
|
451
|
-
message.configurators = reader.string();
|
|
452
|
-
break;
|
|
453
|
-
case /* optional string assets */ 13:
|
|
454
|
-
message.assets = reader.string();
|
|
455
|
-
break;
|
|
456
|
-
case /* optional string cdn */ 14:
|
|
457
|
-
message.cdn = reader.string();
|
|
458
|
-
break;
|
|
459
|
-
case /* repeated mochabugapis.adapt.plugins.v1.Vertex vertices */ 15:
|
|
460
|
-
message.vertices.push(Vertex.internalBinaryRead(reader, reader.uint32(), options));
|
|
461
|
-
break;
|
|
462
|
-
case /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 */ 16:
|
|
463
|
-
message.pluginOauth2.push(Oauth2Service.internalBinaryRead(reader, reader.uint32(), options));
|
|
464
|
-
break;
|
|
465
|
-
case /* repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables */ 17:
|
|
466
|
-
message.pluginVariables.push(VariableService.internalBinaryRead(reader, reader.uint32(), options));
|
|
467
|
-
break;
|
|
468
|
-
case /* repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls */ 18:
|
|
469
|
-
message.pluginMtls.push(MTLSService.internalBinaryRead(reader, reader.uint32(), options));
|
|
470
|
-
break;
|
|
471
|
-
default:
|
|
472
|
-
let u = options.readUnknownField;
|
|
473
|
-
if (u === "throw")
|
|
474
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
475
|
-
let d = reader.skip(wireType);
|
|
476
|
-
if (u !== false)
|
|
477
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
return message;
|
|
481
|
-
}
|
|
482
|
-
internalBinaryWrite(message, writer, options) {
|
|
483
|
-
/* string name = 1; */
|
|
484
|
-
if (message.name !== "")
|
|
485
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
486
|
-
/* string version = 2; */
|
|
487
|
-
if (message.version !== "")
|
|
488
|
-
writer.tag(2, WireType.LengthDelimited).string(message.version);
|
|
489
|
-
/* string label = 3; */
|
|
490
|
-
if (message.label !== "")
|
|
491
|
-
writer.tag(3, WireType.LengthDelimited).string(message.label);
|
|
492
|
-
/* string description = 4; */
|
|
493
|
-
if (message.description !== "")
|
|
494
|
-
writer.tag(4, WireType.LengthDelimited).string(message.description);
|
|
495
|
-
/* string organization = 5; */
|
|
496
|
-
if (message.organization !== "")
|
|
497
|
-
writer.tag(5, WireType.LengthDelimited).string(message.organization);
|
|
498
|
-
/* optional string homepage = 6; */
|
|
499
|
-
if (message.homepage !== undefined)
|
|
500
|
-
writer.tag(6, WireType.LengthDelimited).string(message.homepage);
|
|
501
|
-
/* optional string repository = 7; */
|
|
502
|
-
if (message.repository !== undefined)
|
|
503
|
-
writer.tag(7, WireType.LengthDelimited).string(message.repository);
|
|
504
|
-
/* optional string bugs = 8; */
|
|
505
|
-
if (message.bugs !== undefined)
|
|
506
|
-
writer.tag(8, WireType.LengthDelimited).string(message.bugs);
|
|
507
|
-
/* optional string author = 9; */
|
|
508
|
-
if (message.author !== undefined)
|
|
509
|
-
writer.tag(9, WireType.LengthDelimited).string(message.author);
|
|
510
|
-
/* optional string logo = 10; */
|
|
511
|
-
if (message.logo !== undefined)
|
|
512
|
-
writer.tag(10, WireType.LengthDelimited).string(message.logo);
|
|
513
|
-
/* string executors = 11; */
|
|
514
|
-
if (message.executors !== "")
|
|
515
|
-
writer.tag(11, WireType.LengthDelimited).string(message.executors);
|
|
516
|
-
/* optional string configurators = 12; */
|
|
517
|
-
if (message.configurators !== undefined)
|
|
518
|
-
writer.tag(12, WireType.LengthDelimited).string(message.configurators);
|
|
519
|
-
/* optional string assets = 13; */
|
|
520
|
-
if (message.assets !== undefined)
|
|
521
|
-
writer.tag(13, WireType.LengthDelimited).string(message.assets);
|
|
522
|
-
/* optional string cdn = 14; */
|
|
523
|
-
if (message.cdn !== undefined)
|
|
524
|
-
writer.tag(14, WireType.LengthDelimited).string(message.cdn);
|
|
525
|
-
/* repeated mochabugapis.adapt.plugins.v1.Vertex vertices = 15; */
|
|
526
|
-
for (let i = 0; i < message.vertices.length; i++)
|
|
527
|
-
Vertex.internalBinaryWrite(message.vertices[i], writer.tag(15, WireType.LengthDelimited).fork(), options).join();
|
|
528
|
-
/* repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 = 16; */
|
|
529
|
-
for (let i = 0; i < message.pluginOauth2.length; i++)
|
|
530
|
-
Oauth2Service.internalBinaryWrite(message.pluginOauth2[i], writer.tag(16, WireType.LengthDelimited).fork(), options).join();
|
|
531
|
-
/* repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables = 17; */
|
|
532
|
-
for (let i = 0; i < message.pluginVariables.length; i++)
|
|
533
|
-
VariableService.internalBinaryWrite(message.pluginVariables[i], writer.tag(17, WireType.LengthDelimited).fork(), options).join();
|
|
534
|
-
/* repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls = 18; */
|
|
535
|
-
for (let i = 0; i < message.pluginMtls.length; i++)
|
|
536
|
-
MTLSService.internalBinaryWrite(message.pluginMtls[i], writer.tag(18, WireType.LengthDelimited).fork(), options).join();
|
|
537
|
-
let u = options.writeUnknownFields;
|
|
538
|
-
if (u !== false)
|
|
539
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
540
|
-
return writer;
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
/**
|
|
544
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Manifest
|
|
545
|
-
*/
|
|
546
|
-
const Manifest = new Manifest$Type();
|
|
547
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
548
|
-
class Vertex$Type extends MessageType {
|
|
549
|
-
constructor() {
|
|
550
|
-
super("mochabugapis.adapt.plugins.v1.Vertex", [
|
|
551
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
552
|
-
{ no: 2, name: "label", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100" } } } },
|
|
553
|
-
{ no: 3, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "250" } } } },
|
|
554
|
-
{ no: 4, name: "logo", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "2", maxLen: "4096", pattern: "^([^/]+(/[^/]+)*)\\.(gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp|avif)$" } } } },
|
|
555
|
-
{ no: 5, name: "type", kind: "enum", T: () => ["mochabugapis.adapt.plugins.v1.Vertex.VertexType", Vertex_VertexType, "VERTEX_TYPE_"], options: { "buf.validate.field": { enum: { notIn: [0] } } } },
|
|
556
|
-
{ no: 6, name: "config", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "5", maxLen: "4096", pattern: "^([^/]+(/[^/]+)*)" } } } },
|
|
557
|
-
{ no: 7, name: "metadata", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "5", maxLen: "4096", pattern: "^([^/]+(/[^/]+)*)\\.json$" } } } },
|
|
558
|
-
{ no: 8, name: "configurator", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
|
559
|
-
{ no: 9, name: "variables", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => VariableService, options: { "buf.validate.field": { cel: [{ id: "vars_unique_names", message: "a name cannot appear more than once", expression: "this.map(variable, variable.name).unique()" }], repeated: { minItems: "0", maxItems: "100" } } } },
|
|
560
|
-
{ no: 10, name: "mtls", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => MTLSService, options: { "buf.validate.field": { cel: [{ id: "mtls_unique_names", message: "a name cannot appear more than once", expression: "this.map(mtls, mtls.name).unique()" }], repeated: { minItems: "0", maxItems: "100" } } } },
|
|
561
|
-
{ no: 11, name: "code_oauth2", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2CodeBinding, options: { "buf.validate.field": { cel: [{ id: "vertex.code_oauth2.unique_names", message: "a name cannot appear more than once", expression: "this.map(oauth, oauth.name).unique()" }], repeated: { minItems: "0", maxItems: "20" } } } },
|
|
562
|
-
{ no: 12, name: "oauth2", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2Service, options: { "buf.validate.field": { cel: [{ id: "vertex.oauth2.unique_names", message: "a name cannot appear more than once", expression: "this.map(oauth, oauth.name).unique()" }], repeated: { minItems: "0", maxItems: "20", items: { cel: [{ id: "vertex.oauth2.client_id_and_code", message: "The client_id and the code property may not be set as well as the code grant type", expression: "!has(this.client_id) && !has(this.code) && this.grant_type != 1" }] } } } } }
|
|
563
|
-
], { "buf.validate.message": { cel: [{ id: "vertex.oauth2_and_code_bindings", message: "The names of the oauth2 services and the code bindings must be unique", expression: "(this.oauth2.map(val, val.name) + this.code_oauth2.map(val, val.name)).unique()" }] } });
|
|
564
|
-
}
|
|
565
|
-
create(value) {
|
|
566
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
567
|
-
message.name = "";
|
|
568
|
-
message.label = "";
|
|
569
|
-
message.type = 0;
|
|
570
|
-
message.metadata = "";
|
|
571
|
-
message.configurator = false;
|
|
572
|
-
message.variables = [];
|
|
573
|
-
message.mtls = [];
|
|
574
|
-
message.codeOauth2 = [];
|
|
575
|
-
message.oauth2 = [];
|
|
576
|
-
if (value !== undefined)
|
|
577
|
-
reflectionMergePartial(this, message, value);
|
|
578
|
-
return message;
|
|
579
|
-
}
|
|
580
|
-
internalBinaryRead(reader, length, options, target) {
|
|
581
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
582
|
-
while (reader.pos < end) {
|
|
583
|
-
let [fieldNo, wireType] = reader.tag();
|
|
584
|
-
switch (fieldNo) {
|
|
585
|
-
case /* string name */ 1:
|
|
586
|
-
message.name = reader.string();
|
|
587
|
-
break;
|
|
588
|
-
case /* string label */ 2:
|
|
589
|
-
message.label = reader.string();
|
|
590
|
-
break;
|
|
591
|
-
case /* optional string description */ 3:
|
|
592
|
-
message.description = reader.string();
|
|
593
|
-
break;
|
|
594
|
-
case /* optional string logo */ 4:
|
|
595
|
-
message.logo = reader.string();
|
|
596
|
-
break;
|
|
597
|
-
case /* mochabugapis.adapt.plugins.v1.Vertex.VertexType type */ 5:
|
|
598
|
-
message.type = reader.int32();
|
|
599
|
-
break;
|
|
600
|
-
case /* optional string config */ 6:
|
|
601
|
-
message.config = reader.string();
|
|
602
|
-
break;
|
|
603
|
-
case /* string metadata */ 7:
|
|
604
|
-
message.metadata = reader.string();
|
|
605
|
-
break;
|
|
606
|
-
case /* bool configurator */ 8:
|
|
607
|
-
message.configurator = reader.bool();
|
|
608
|
-
break;
|
|
609
|
-
case /* repeated mochabugapis.adapt.plugins.v1.VariableService variables */ 9:
|
|
610
|
-
message.variables.push(VariableService.internalBinaryRead(reader, reader.uint32(), options));
|
|
611
|
-
break;
|
|
612
|
-
case /* repeated mochabugapis.adapt.plugins.v1.MTLSService mtls */ 10:
|
|
613
|
-
message.mtls.push(MTLSService.internalBinaryRead(reader, reader.uint32(), options));
|
|
614
|
-
break;
|
|
615
|
-
case /* repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 */ 11:
|
|
616
|
-
message.codeOauth2.push(Oauth2CodeBinding.internalBinaryRead(reader, reader.uint32(), options));
|
|
617
|
-
break;
|
|
618
|
-
case /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 */ 12:
|
|
619
|
-
message.oauth2.push(Oauth2Service.internalBinaryRead(reader, reader.uint32(), options));
|
|
620
|
-
break;
|
|
621
|
-
default:
|
|
622
|
-
let u = options.readUnknownField;
|
|
623
|
-
if (u === "throw")
|
|
624
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
625
|
-
let d = reader.skip(wireType);
|
|
626
|
-
if (u !== false)
|
|
627
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
return message;
|
|
631
|
-
}
|
|
632
|
-
internalBinaryWrite(message, writer, options) {
|
|
633
|
-
/* string name = 1; */
|
|
634
|
-
if (message.name !== "")
|
|
635
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
636
|
-
/* string label = 2; */
|
|
637
|
-
if (message.label !== "")
|
|
638
|
-
writer.tag(2, WireType.LengthDelimited).string(message.label);
|
|
639
|
-
/* optional string description = 3; */
|
|
640
|
-
if (message.description !== undefined)
|
|
641
|
-
writer.tag(3, WireType.LengthDelimited).string(message.description);
|
|
642
|
-
/* optional string logo = 4; */
|
|
643
|
-
if (message.logo !== undefined)
|
|
644
|
-
writer.tag(4, WireType.LengthDelimited).string(message.logo);
|
|
645
|
-
/* mochabugapis.adapt.plugins.v1.Vertex.VertexType type = 5; */
|
|
646
|
-
if (message.type !== 0)
|
|
647
|
-
writer.tag(5, WireType.Varint).int32(message.type);
|
|
648
|
-
/* optional string config = 6; */
|
|
649
|
-
if (message.config !== undefined)
|
|
650
|
-
writer.tag(6, WireType.LengthDelimited).string(message.config);
|
|
651
|
-
/* string metadata = 7; */
|
|
652
|
-
if (message.metadata !== "")
|
|
653
|
-
writer.tag(7, WireType.LengthDelimited).string(message.metadata);
|
|
654
|
-
/* bool configurator = 8; */
|
|
655
|
-
if (message.configurator !== false)
|
|
656
|
-
writer.tag(8, WireType.Varint).bool(message.configurator);
|
|
657
|
-
/* repeated mochabugapis.adapt.plugins.v1.VariableService variables = 9; */
|
|
658
|
-
for (let i = 0; i < message.variables.length; i++)
|
|
659
|
-
VariableService.internalBinaryWrite(message.variables[i], writer.tag(9, WireType.LengthDelimited).fork(), options).join();
|
|
660
|
-
/* repeated mochabugapis.adapt.plugins.v1.MTLSService mtls = 10; */
|
|
661
|
-
for (let i = 0; i < message.mtls.length; i++)
|
|
662
|
-
MTLSService.internalBinaryWrite(message.mtls[i], writer.tag(10, WireType.LengthDelimited).fork(), options).join();
|
|
663
|
-
/* repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 = 11; */
|
|
664
|
-
for (let i = 0; i < message.codeOauth2.length; i++)
|
|
665
|
-
Oauth2CodeBinding.internalBinaryWrite(message.codeOauth2[i], writer.tag(11, WireType.LengthDelimited).fork(), options).join();
|
|
666
|
-
/* repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 = 12; */
|
|
667
|
-
for (let i = 0; i < message.oauth2.length; i++)
|
|
668
|
-
Oauth2Service.internalBinaryWrite(message.oauth2[i], writer.tag(12, WireType.LengthDelimited).fork(), options).join();
|
|
669
|
-
let u = options.writeUnknownFields;
|
|
670
|
-
if (u !== false)
|
|
671
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
672
|
-
return writer;
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
/**
|
|
676
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Vertex
|
|
677
|
-
*/
|
|
678
|
-
const Vertex = new Vertex$Type();
|
|
679
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
680
|
-
class MTLSService$Type extends MessageType {
|
|
681
|
-
constructor() {
|
|
682
|
-
super("mochabugapis.adapt.plugins.v1.MTLSService", [
|
|
683
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
684
|
-
{ no: 2, name: "label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "100" } } } },
|
|
685
|
-
{ no: 3, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "250" } } } },
|
|
686
|
-
{ no: 4, name: "optional", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
|
|
687
|
-
]);
|
|
688
|
-
}
|
|
689
|
-
create(value) {
|
|
690
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
691
|
-
message.name = "";
|
|
692
|
-
if (value !== undefined)
|
|
693
|
-
reflectionMergePartial(this, message, value);
|
|
694
|
-
return message;
|
|
695
|
-
}
|
|
696
|
-
internalBinaryRead(reader, length, options, target) {
|
|
697
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
698
|
-
while (reader.pos < end) {
|
|
699
|
-
let [fieldNo, wireType] = reader.tag();
|
|
700
|
-
switch (fieldNo) {
|
|
701
|
-
case /* string name */ 1:
|
|
702
|
-
message.name = reader.string();
|
|
703
|
-
break;
|
|
704
|
-
case /* optional string label */ 2:
|
|
705
|
-
message.label = reader.string();
|
|
706
|
-
break;
|
|
707
|
-
case /* optional string description */ 3:
|
|
708
|
-
message.description = reader.string();
|
|
709
|
-
break;
|
|
710
|
-
case /* optional bool optional */ 4:
|
|
711
|
-
message.optional = reader.bool();
|
|
712
|
-
break;
|
|
713
|
-
default:
|
|
714
|
-
let u = options.readUnknownField;
|
|
715
|
-
if (u === "throw")
|
|
716
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
717
|
-
let d = reader.skip(wireType);
|
|
718
|
-
if (u !== false)
|
|
719
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
return message;
|
|
723
|
-
}
|
|
724
|
-
internalBinaryWrite(message, writer, options) {
|
|
725
|
-
/* string name = 1; */
|
|
726
|
-
if (message.name !== "")
|
|
727
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
728
|
-
/* optional string label = 2; */
|
|
729
|
-
if (message.label !== undefined)
|
|
730
|
-
writer.tag(2, WireType.LengthDelimited).string(message.label);
|
|
731
|
-
/* optional string description = 3; */
|
|
732
|
-
if (message.description !== undefined)
|
|
733
|
-
writer.tag(3, WireType.LengthDelimited).string(message.description);
|
|
734
|
-
/* optional bool optional = 4; */
|
|
735
|
-
if (message.optional !== undefined)
|
|
736
|
-
writer.tag(4, WireType.Varint).bool(message.optional);
|
|
737
|
-
let u = options.writeUnknownFields;
|
|
738
|
-
if (u !== false)
|
|
739
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
740
|
-
return writer;
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
/**
|
|
744
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.MTLSService
|
|
745
|
-
*/
|
|
746
|
-
const MTLSService = new MTLSService$Type();
|
|
747
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
748
|
-
class VariableService$Type extends MessageType {
|
|
749
|
-
constructor() {
|
|
750
|
-
super("mochabugapis.adapt.plugins.v1.VariableService", [
|
|
751
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
752
|
-
{ no: 2, name: "label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100" } } } },
|
|
753
|
-
{ no: 3, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "250" } } } },
|
|
754
|
-
{ no: 4, name: "type", kind: "enum", T: () => ["mochabugapis.adapt.plugins.v1.VariableService.Type", VariableService_Type, "TYPE_"], options: { "buf.validate.field": { enum: { notIn: [0] } } } },
|
|
755
|
-
{ no: 5, name: "optional", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
|
|
756
|
-
]);
|
|
757
|
-
}
|
|
758
|
-
create(value) {
|
|
759
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
760
|
-
message.name = "";
|
|
761
|
-
message.type = 0;
|
|
762
|
-
if (value !== undefined)
|
|
763
|
-
reflectionMergePartial(this, message, value);
|
|
764
|
-
return message;
|
|
765
|
-
}
|
|
766
|
-
internalBinaryRead(reader, length, options, target) {
|
|
767
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
768
|
-
while (reader.pos < end) {
|
|
769
|
-
let [fieldNo, wireType] = reader.tag();
|
|
770
|
-
switch (fieldNo) {
|
|
771
|
-
case /* string name */ 1:
|
|
772
|
-
message.name = reader.string();
|
|
773
|
-
break;
|
|
774
|
-
case /* optional string label */ 2:
|
|
775
|
-
message.label = reader.string();
|
|
776
|
-
break;
|
|
777
|
-
case /* optional string description */ 3:
|
|
778
|
-
message.description = reader.string();
|
|
779
|
-
break;
|
|
780
|
-
case /* mochabugapis.adapt.plugins.v1.VariableService.Type type */ 4:
|
|
781
|
-
message.type = reader.int32();
|
|
782
|
-
break;
|
|
783
|
-
case /* optional bool optional */ 5:
|
|
784
|
-
message.optional = reader.bool();
|
|
785
|
-
break;
|
|
786
|
-
default:
|
|
787
|
-
let u = options.readUnknownField;
|
|
788
|
-
if (u === "throw")
|
|
789
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
790
|
-
let d = reader.skip(wireType);
|
|
791
|
-
if (u !== false)
|
|
792
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
793
|
-
}
|
|
794
|
-
}
|
|
795
|
-
return message;
|
|
796
|
-
}
|
|
797
|
-
internalBinaryWrite(message, writer, options) {
|
|
798
|
-
/* string name = 1; */
|
|
799
|
-
if (message.name !== "")
|
|
800
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
801
|
-
/* optional string label = 2; */
|
|
802
|
-
if (message.label !== undefined)
|
|
803
|
-
writer.tag(2, WireType.LengthDelimited).string(message.label);
|
|
804
|
-
/* optional string description = 3; */
|
|
805
|
-
if (message.description !== undefined)
|
|
806
|
-
writer.tag(3, WireType.LengthDelimited).string(message.description);
|
|
807
|
-
/* mochabugapis.adapt.plugins.v1.VariableService.Type type = 4; */
|
|
808
|
-
if (message.type !== 0)
|
|
809
|
-
writer.tag(4, WireType.Varint).int32(message.type);
|
|
810
|
-
/* optional bool optional = 5; */
|
|
811
|
-
if (message.optional !== undefined)
|
|
812
|
-
writer.tag(5, WireType.Varint).bool(message.optional);
|
|
813
|
-
let u = options.writeUnknownFields;
|
|
814
|
-
if (u !== false)
|
|
815
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
816
|
-
return writer;
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
/**
|
|
820
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.VariableService
|
|
821
|
-
*/
|
|
822
|
-
const VariableService = new VariableService$Type();
|
|
823
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
824
|
-
class Oauth2Service$Type extends MessageType {
|
|
825
|
-
constructor() {
|
|
826
|
-
super("mochabugapis.adapt.plugins.v1.Oauth2Service", [
|
|
827
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
828
|
-
{ no: 2, name: "label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "100" } } } },
|
|
829
|
-
{ no: 3, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "250" } } } },
|
|
830
|
-
{ no: 4, name: "grant_type", kind: "enum", T: () => ["mochabugapis.adapt.plugins.v1.Oauth2GrantType", Oauth2GrantType, "OAUTH2_GRANT_TYPE_"], options: { "buf.validate.field": { enum: { notIn: [0] } } } },
|
|
831
|
-
{ no: 5, name: "scopes", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { minItems: "1", maxItems: "500", unique: true, items: { string: { minLen: "1", maxLen: "100" } } } } } },
|
|
832
|
-
{ no: 6, name: "auth_method", kind: "enum", opt: true, T: () => ["mochabugapis.adapt.plugins.v1.Oauth2AuthType", Oauth2AuthType, "OAUTH2_AUTH_TYPE_"], options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", enum: { notIn: [0] } } } },
|
|
833
|
-
{ no: 7, name: "alg", kind: "enum", opt: true, T: () => ["mochabugapis.adapt.plugins.v1.PrivateKeyAlg", PrivateKeyAlg, "PRIVATE_KEY_ALG_"], options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", enum: { notIn: [0] } } } },
|
|
834
|
-
{ no: 8, name: "client_id", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", string: { minLen: "1", maxLen: "250" } } } },
|
|
835
|
-
{ no: 9, name: "token_endpoint", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "11", maxLen: "4096", pattern: "^https://[a-zA-Z0-9.-]+(?:\\.[a-zA-Z]{2,})(?:/.*)?$" } } } },
|
|
836
|
-
{ no: 10, name: "code", kind: "message", T: () => Oauth2Code },
|
|
837
|
-
{ no: 11, name: "optional", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
|
|
838
|
-
], { "buf.validate.message": { cel: [{ id: "oauth2.auth_method", message: "The auth_method property must be set in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE or OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS", expression: "has(this.auth_method) == (this.grant_type == 1 || this.grant_type == 2)" }, { id: "oauth2.alg", message: "The alg property must be set in case of grant_type OAUTH2_GRANT_TYPE_JWT_BEARER, OAUTH2_GRANT_TYPE_SAML2_BEARER or auth_method OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT, OAUTH2_AUTH_TYPE_SAML2_BEARER", expression: "has(this.alg) == (this.grant_type == 3 || this.grant_type == 4 || this.auth_method == 3 || this.auth_method == 5)" }, { id: "oauth2.code", message: "The code property must be set in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE", expression: "has(this.code) == (this.grant_type == 1)" }, { id: "oauth2.optional", message: "The optional property cannot be set to true in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE", expression: "!has(this.optional) || this.grant_type != 1 || (!this.optional && this.grant_type == 1)" }] } });
|
|
839
|
-
}
|
|
840
|
-
create(value) {
|
|
841
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
842
|
-
message.name = "";
|
|
843
|
-
message.grantType = 0;
|
|
844
|
-
message.scopes = [];
|
|
845
|
-
message.tokenEndpoint = "";
|
|
846
|
-
if (value !== undefined)
|
|
847
|
-
reflectionMergePartial(this, message, value);
|
|
848
|
-
return message;
|
|
849
|
-
}
|
|
850
|
-
internalBinaryRead(reader, length, options, target) {
|
|
851
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
852
|
-
while (reader.pos < end) {
|
|
853
|
-
let [fieldNo, wireType] = reader.tag();
|
|
854
|
-
switch (fieldNo) {
|
|
855
|
-
case /* string name */ 1:
|
|
856
|
-
message.name = reader.string();
|
|
857
|
-
break;
|
|
858
|
-
case /* optional string label */ 2:
|
|
859
|
-
message.label = reader.string();
|
|
860
|
-
break;
|
|
861
|
-
case /* optional string description */ 3:
|
|
862
|
-
message.description = reader.string();
|
|
863
|
-
break;
|
|
864
|
-
case /* mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type */ 4:
|
|
865
|
-
message.grantType = reader.int32();
|
|
866
|
-
break;
|
|
867
|
-
case /* repeated string scopes */ 5:
|
|
868
|
-
message.scopes.push(reader.string());
|
|
869
|
-
break;
|
|
870
|
-
case /* optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method */ 6:
|
|
871
|
-
message.authMethod = reader.int32();
|
|
872
|
-
break;
|
|
873
|
-
case /* optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg */ 7:
|
|
874
|
-
message.alg = reader.int32();
|
|
875
|
-
break;
|
|
876
|
-
case /* optional string client_id */ 8:
|
|
877
|
-
message.clientId = reader.string();
|
|
878
|
-
break;
|
|
879
|
-
case /* string token_endpoint */ 9:
|
|
880
|
-
message.tokenEndpoint = reader.string();
|
|
881
|
-
break;
|
|
882
|
-
case /* optional mochabugapis.adapt.plugins.v1.Oauth2Code code */ 10:
|
|
883
|
-
message.code = Oauth2Code.internalBinaryRead(reader, reader.uint32(), options, message.code);
|
|
884
|
-
break;
|
|
885
|
-
case /* optional bool optional */ 11:
|
|
886
|
-
message.optional = reader.bool();
|
|
887
|
-
break;
|
|
888
|
-
default:
|
|
889
|
-
let u = options.readUnknownField;
|
|
890
|
-
if (u === "throw")
|
|
891
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
892
|
-
let d = reader.skip(wireType);
|
|
893
|
-
if (u !== false)
|
|
894
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
return message;
|
|
898
|
-
}
|
|
899
|
-
internalBinaryWrite(message, writer, options) {
|
|
900
|
-
/* string name = 1; */
|
|
901
|
-
if (message.name !== "")
|
|
902
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
903
|
-
/* optional string label = 2; */
|
|
904
|
-
if (message.label !== undefined)
|
|
905
|
-
writer.tag(2, WireType.LengthDelimited).string(message.label);
|
|
906
|
-
/* optional string description = 3; */
|
|
907
|
-
if (message.description !== undefined)
|
|
908
|
-
writer.tag(3, WireType.LengthDelimited).string(message.description);
|
|
909
|
-
/* mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type = 4; */
|
|
910
|
-
if (message.grantType !== 0)
|
|
911
|
-
writer.tag(4, WireType.Varint).int32(message.grantType);
|
|
912
|
-
/* repeated string scopes = 5; */
|
|
913
|
-
for (let i = 0; i < message.scopes.length; i++)
|
|
914
|
-
writer.tag(5, WireType.LengthDelimited).string(message.scopes[i]);
|
|
915
|
-
/* optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method = 6; */
|
|
916
|
-
if (message.authMethod !== undefined)
|
|
917
|
-
writer.tag(6, WireType.Varint).int32(message.authMethod);
|
|
918
|
-
/* optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg = 7; */
|
|
919
|
-
if (message.alg !== undefined)
|
|
920
|
-
writer.tag(7, WireType.Varint).int32(message.alg);
|
|
921
|
-
/* optional string client_id = 8; */
|
|
922
|
-
if (message.clientId !== undefined)
|
|
923
|
-
writer.tag(8, WireType.LengthDelimited).string(message.clientId);
|
|
924
|
-
/* string token_endpoint = 9; */
|
|
925
|
-
if (message.tokenEndpoint !== "")
|
|
926
|
-
writer.tag(9, WireType.LengthDelimited).string(message.tokenEndpoint);
|
|
927
|
-
/* optional mochabugapis.adapt.plugins.v1.Oauth2Code code = 10; */
|
|
928
|
-
if (message.code)
|
|
929
|
-
Oauth2Code.internalBinaryWrite(message.code, writer.tag(10, WireType.LengthDelimited).fork(), options).join();
|
|
930
|
-
/* optional bool optional = 11; */
|
|
931
|
-
if (message.optional !== undefined)
|
|
932
|
-
writer.tag(11, WireType.Varint).bool(message.optional);
|
|
933
|
-
let u = options.writeUnknownFields;
|
|
934
|
-
if (u !== false)
|
|
935
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
936
|
-
return writer;
|
|
937
|
-
}
|
|
938
|
-
}
|
|
939
|
-
/**
|
|
940
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2Service
|
|
941
|
-
*/
|
|
942
|
-
const Oauth2Service = new Oauth2Service$Type();
|
|
943
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
944
|
-
class Oauth2CodeBinding$Type extends MessageType {
|
|
945
|
-
constructor() {
|
|
946
|
-
super("mochabugapis.adapt.plugins.v1.Oauth2CodeBinding", [
|
|
947
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "100", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
948
|
-
{ no: 2, name: "optional", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
|
|
949
|
-
]);
|
|
950
|
-
}
|
|
951
|
-
create(value) {
|
|
952
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
953
|
-
message.name = "";
|
|
954
|
-
if (value !== undefined)
|
|
955
|
-
reflectionMergePartial(this, message, value);
|
|
956
|
-
return message;
|
|
957
|
-
}
|
|
958
|
-
internalBinaryRead(reader, length, options, target) {
|
|
959
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
960
|
-
while (reader.pos < end) {
|
|
961
|
-
let [fieldNo, wireType] = reader.tag();
|
|
962
|
-
switch (fieldNo) {
|
|
963
|
-
case /* string name */ 1:
|
|
964
|
-
message.name = reader.string();
|
|
965
|
-
break;
|
|
966
|
-
case /* optional bool optional */ 2:
|
|
967
|
-
message.optional = reader.bool();
|
|
968
|
-
break;
|
|
969
|
-
default:
|
|
970
|
-
let u = options.readUnknownField;
|
|
971
|
-
if (u === "throw")
|
|
972
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
973
|
-
let d = reader.skip(wireType);
|
|
974
|
-
if (u !== false)
|
|
975
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
976
|
-
}
|
|
977
|
-
}
|
|
978
|
-
return message;
|
|
979
|
-
}
|
|
980
|
-
internalBinaryWrite(message, writer, options) {
|
|
981
|
-
/* string name = 1; */
|
|
982
|
-
if (message.name !== "")
|
|
983
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
984
|
-
/* optional bool optional = 2; */
|
|
985
|
-
if (message.optional !== undefined)
|
|
986
|
-
writer.tag(2, WireType.Varint).bool(message.optional);
|
|
987
|
-
let u = options.writeUnknownFields;
|
|
988
|
-
if (u !== false)
|
|
989
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
990
|
-
return writer;
|
|
991
|
-
}
|
|
992
|
-
}
|
|
993
|
-
/**
|
|
994
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2CodeBinding
|
|
995
|
-
*/
|
|
996
|
-
const Oauth2CodeBinding = new Oauth2CodeBinding$Type();
|
|
997
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
998
|
-
class Oauth2Code$Type extends MessageType {
|
|
999
|
-
constructor() {
|
|
1000
|
-
super("mochabugapis.adapt.plugins.v1.Oauth2Code", [
|
|
1001
|
-
{ no: 1, name: "auth_endpoint", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "11", maxLen: "4096", pattern: "^https://[a-zA-Z0-9.-]+(?:\\.[a-zA-Z]{2,})(?:/.*)?$" } } } },
|
|
1002
|
-
{ no: 2, name: "issuer", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "4096" } } } },
|
|
1003
|
-
{ no: 3, name: "jwks_uri", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "11", maxLen: "4096", pattern: "^https://[a-zA-Z0-9.-]+(?:\\.[a-zA-Z]{2,})(?:/.*)?$" } } } },
|
|
1004
|
-
{ no: 4, name: "additional_params", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "scalar", T: 9 /*ScalarType.STRING*/ }, options: { "buf.validate.field": { map: { minPairs: "0", maxPairs: "50", keys: { string: { minLen: "1", maxLen: "250" } }, values: { string: { minLen: "1", maxLen: "250" } } } } } },
|
|
1005
|
-
{ no: 5, name: "use_pkce", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
|
|
1006
|
-
]);
|
|
1007
|
-
}
|
|
1008
|
-
create(value) {
|
|
1009
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1010
|
-
message.authEndpoint = "";
|
|
1011
|
-
message.issuer = "";
|
|
1012
|
-
message.jwksUri = "";
|
|
1013
|
-
message.additionalParams = {};
|
|
1014
|
-
message.usePkce = false;
|
|
1015
|
-
if (value !== undefined)
|
|
1016
|
-
reflectionMergePartial(this, message, value);
|
|
1017
|
-
return message;
|
|
1018
|
-
}
|
|
1019
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1020
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1021
|
-
while (reader.pos < end) {
|
|
1022
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1023
|
-
switch (fieldNo) {
|
|
1024
|
-
case /* string auth_endpoint */ 1:
|
|
1025
|
-
message.authEndpoint = reader.string();
|
|
1026
|
-
break;
|
|
1027
|
-
case /* string issuer */ 2:
|
|
1028
|
-
message.issuer = reader.string();
|
|
1029
|
-
break;
|
|
1030
|
-
case /* string jwks_uri */ 3:
|
|
1031
|
-
message.jwksUri = reader.string();
|
|
1032
|
-
break;
|
|
1033
|
-
case /* map<string, string> additional_params */ 4:
|
|
1034
|
-
this.binaryReadMap4(message.additionalParams, reader, options);
|
|
1035
|
-
break;
|
|
1036
|
-
case /* bool use_pkce */ 5:
|
|
1037
|
-
message.usePkce = reader.bool();
|
|
1038
|
-
break;
|
|
1039
|
-
default:
|
|
1040
|
-
let u = options.readUnknownField;
|
|
1041
|
-
if (u === "throw")
|
|
1042
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1043
|
-
let d = reader.skip(wireType);
|
|
1044
|
-
if (u !== false)
|
|
1045
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1046
|
-
}
|
|
1047
|
-
}
|
|
1048
|
-
return message;
|
|
1049
|
-
}
|
|
1050
|
-
binaryReadMap4(map, reader, options) {
|
|
1051
|
-
let len = reader.uint32(), end = reader.pos + len, key, val;
|
|
1052
|
-
while (reader.pos < end) {
|
|
1053
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1054
|
-
switch (fieldNo) {
|
|
1055
|
-
case 1:
|
|
1056
|
-
key = reader.string();
|
|
1057
|
-
break;
|
|
1058
|
-
case 2:
|
|
1059
|
-
val = reader.string();
|
|
1060
|
-
break;
|
|
1061
|
-
default: throw new globalThis.Error("unknown map entry field for field mochabugapis.adapt.plugins.v1.Oauth2Code.additional_params");
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
map[key ?? ""] = val ?? "";
|
|
1065
|
-
}
|
|
1066
|
-
internalBinaryWrite(message, writer, options) {
|
|
1067
|
-
/* string auth_endpoint = 1; */
|
|
1068
|
-
if (message.authEndpoint !== "")
|
|
1069
|
-
writer.tag(1, WireType.LengthDelimited).string(message.authEndpoint);
|
|
1070
|
-
/* string issuer = 2; */
|
|
1071
|
-
if (message.issuer !== "")
|
|
1072
|
-
writer.tag(2, WireType.LengthDelimited).string(message.issuer);
|
|
1073
|
-
/* string jwks_uri = 3; */
|
|
1074
|
-
if (message.jwksUri !== "")
|
|
1075
|
-
writer.tag(3, WireType.LengthDelimited).string(message.jwksUri);
|
|
1076
|
-
/* map<string, string> additional_params = 4; */
|
|
1077
|
-
for (let k of globalThis.Object.keys(message.additionalParams))
|
|
1078
|
-
writer.tag(4, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.additionalParams[k]).join();
|
|
1079
|
-
/* bool use_pkce = 5; */
|
|
1080
|
-
if (message.usePkce !== false)
|
|
1081
|
-
writer.tag(5, WireType.Varint).bool(message.usePkce);
|
|
1082
|
-
let u = options.writeUnknownFields;
|
|
1083
|
-
if (u !== false)
|
|
1084
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1085
|
-
return writer;
|
|
1086
|
-
}
|
|
1087
|
-
}
|
|
1088
|
-
/**
|
|
1089
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2Code
|
|
1090
|
-
*/
|
|
1091
|
-
const Oauth2Code = new Oauth2Code$Type();
|
|
1092
|
-
/**
|
|
1093
|
-
* @generated ServiceType for protobuf service mochabugapis.adapt.plugins.v1.PluginService
|
|
1094
|
-
*/
|
|
1095
|
-
const PluginService = new ServiceType("mochabugapis.adapt.plugins.v1.PluginService", [
|
|
1096
|
-
{ name: "UploadPlugin", clientStreaming: true, options: { "google.api.http": { post: "/v1/plugins/upload", body: "*" } }, I: UploadPluginRequest, O: UploadPluginResponse }
|
|
1097
|
-
], { "google.api.default_host": "adapt.mochabugapis.com", "google.api.oauth_scopes": "https://www.mochabugapis.com/auth/adapt/plugins,https://www.mochabugapis.com/auth/adapt/plugins.upload" });
|
|
1098
|
-
|
|
1099
|
-
/**
|
|
1100
|
-
* `NullValue` is a singleton enumeration to represent the null value for the
|
|
1101
|
-
* `Value` type union.
|
|
1102
|
-
*
|
|
1103
|
-
* The JSON representation for `NullValue` is JSON `null`.
|
|
1104
|
-
*
|
|
1105
|
-
* @generated from protobuf enum google.protobuf.NullValue
|
|
1106
|
-
*/
|
|
1107
|
-
var NullValue;
|
|
1108
|
-
(function (NullValue) {
|
|
1109
|
-
/**
|
|
1110
|
-
* Null value.
|
|
1111
|
-
*
|
|
1112
|
-
* @generated from protobuf enum value: NULL_VALUE = 0;
|
|
1113
|
-
*/
|
|
1114
|
-
NullValue[NullValue["NULL_VALUE"] = 0] = "NULL_VALUE";
|
|
1115
|
-
})(NullValue || (NullValue = {}));
|
|
1116
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1117
|
-
class Struct$Type extends MessageType {
|
|
1118
|
-
constructor() {
|
|
1119
|
-
super("google.protobuf.Struct", [
|
|
1120
|
-
{ no: 1, name: "fields", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => Value } }
|
|
1121
|
-
]);
|
|
1122
|
-
}
|
|
1123
|
-
/**
|
|
1124
|
-
* Encode `Struct` to JSON object.
|
|
1125
|
-
*/
|
|
1126
|
-
internalJsonWrite(message, options) {
|
|
1127
|
-
let json = {};
|
|
1128
|
-
for (let [k, v] of Object.entries(message.fields)) {
|
|
1129
|
-
json[k] = Value.toJson(v);
|
|
1130
|
-
}
|
|
1131
|
-
return json;
|
|
1132
|
-
}
|
|
1133
|
-
/**
|
|
1134
|
-
* Decode `Struct` from JSON object.
|
|
1135
|
-
*/
|
|
1136
|
-
internalJsonRead(json, options, target) {
|
|
1137
|
-
if (!isJsonObject(json))
|
|
1138
|
-
throw new globalThis.Error("Unable to parse message " + this.typeName + " from JSON " + typeofJsonValue(json) + ".");
|
|
1139
|
-
if (!target)
|
|
1140
|
-
target = this.create();
|
|
1141
|
-
for (let [k, v] of globalThis.Object.entries(json)) {
|
|
1142
|
-
target.fields[k] = Value.fromJson(v);
|
|
1143
|
-
}
|
|
1144
|
-
return target;
|
|
1145
|
-
}
|
|
1146
|
-
create(value) {
|
|
1147
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1148
|
-
message.fields = {};
|
|
1149
|
-
if (value !== undefined)
|
|
1150
|
-
reflectionMergePartial(this, message, value);
|
|
1151
|
-
return message;
|
|
1152
|
-
}
|
|
1153
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1154
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1155
|
-
while (reader.pos < end) {
|
|
1156
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1157
|
-
switch (fieldNo) {
|
|
1158
|
-
case /* map<string, google.protobuf.Value> fields */ 1:
|
|
1159
|
-
this.binaryReadMap1(message.fields, reader, options);
|
|
1160
|
-
break;
|
|
1161
|
-
default:
|
|
1162
|
-
let u = options.readUnknownField;
|
|
1163
|
-
if (u === "throw")
|
|
1164
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1165
|
-
let d = reader.skip(wireType);
|
|
1166
|
-
if (u !== false)
|
|
1167
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1168
|
-
}
|
|
1169
|
-
}
|
|
1170
|
-
return message;
|
|
1171
|
-
}
|
|
1172
|
-
binaryReadMap1(map, reader, options) {
|
|
1173
|
-
let len = reader.uint32(), end = reader.pos + len, key, val;
|
|
1174
|
-
while (reader.pos < end) {
|
|
1175
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1176
|
-
switch (fieldNo) {
|
|
1177
|
-
case 1:
|
|
1178
|
-
key = reader.string();
|
|
1179
|
-
break;
|
|
1180
|
-
case 2:
|
|
1181
|
-
val = Value.internalBinaryRead(reader, reader.uint32(), options);
|
|
1182
|
-
break;
|
|
1183
|
-
default: throw new globalThis.Error("unknown map entry field for field google.protobuf.Struct.fields");
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
map[key ?? ""] = val ?? Value.create();
|
|
1187
|
-
}
|
|
1188
|
-
internalBinaryWrite(message, writer, options) {
|
|
1189
|
-
/* map<string, google.protobuf.Value> fields = 1; */
|
|
1190
|
-
for (let k of globalThis.Object.keys(message.fields)) {
|
|
1191
|
-
writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);
|
|
1192
|
-
writer.tag(2, WireType.LengthDelimited).fork();
|
|
1193
|
-
Value.internalBinaryWrite(message.fields[k], writer, options);
|
|
1194
|
-
writer.join().join();
|
|
1195
|
-
}
|
|
1196
|
-
let u = options.writeUnknownFields;
|
|
1197
|
-
if (u !== false)
|
|
1198
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1199
|
-
return writer;
|
|
1200
|
-
}
|
|
1201
|
-
}
|
|
1202
|
-
/**
|
|
1203
|
-
* @generated MessageType for protobuf message google.protobuf.Struct
|
|
1204
|
-
*/
|
|
1205
|
-
const Struct = new Struct$Type();
|
|
1206
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1207
|
-
class Value$Type extends MessageType {
|
|
1208
|
-
constructor() {
|
|
1209
|
-
super("google.protobuf.Value", [
|
|
1210
|
-
{ no: 1, name: "null_value", kind: "enum", oneof: "kind", T: () => ["google.protobuf.NullValue", NullValue] },
|
|
1211
|
-
{ no: 2, name: "number_value", kind: "scalar", oneof: "kind", T: 1 /*ScalarType.DOUBLE*/ },
|
|
1212
|
-
{ no: 3, name: "string_value", kind: "scalar", oneof: "kind", T: 9 /*ScalarType.STRING*/ },
|
|
1213
|
-
{ no: 4, name: "bool_value", kind: "scalar", oneof: "kind", T: 8 /*ScalarType.BOOL*/ },
|
|
1214
|
-
{ no: 5, name: "struct_value", kind: "message", oneof: "kind", T: () => Struct },
|
|
1215
|
-
{ no: 6, name: "list_value", kind: "message", oneof: "kind", T: () => ListValue }
|
|
1216
|
-
]);
|
|
1217
|
-
}
|
|
1218
|
-
/**
|
|
1219
|
-
* Encode `Value` to JSON value.
|
|
1220
|
-
*/
|
|
1221
|
-
internalJsonWrite(message, options) {
|
|
1222
|
-
if (message.kind.oneofKind === undefined)
|
|
1223
|
-
throw new globalThis.Error();
|
|
1224
|
-
switch (message.kind.oneofKind) {
|
|
1225
|
-
case undefined: throw new globalThis.Error();
|
|
1226
|
-
case "boolValue": return message.kind.boolValue;
|
|
1227
|
-
case "nullValue": return null;
|
|
1228
|
-
case "numberValue":
|
|
1229
|
-
let numberValue = message.kind.numberValue;
|
|
1230
|
-
if (typeof numberValue == "number" && !Number.isFinite(numberValue))
|
|
1231
|
-
throw new globalThis.Error();
|
|
1232
|
-
return numberValue;
|
|
1233
|
-
case "stringValue": return message.kind.stringValue;
|
|
1234
|
-
case "listValue":
|
|
1235
|
-
let listValueField = this.fields.find(f => f.no === 6);
|
|
1236
|
-
if (listValueField?.kind !== "message")
|
|
1237
|
-
throw new globalThis.Error();
|
|
1238
|
-
return listValueField.T().toJson(message.kind.listValue);
|
|
1239
|
-
case "structValue":
|
|
1240
|
-
let structValueField = this.fields.find(f => f.no === 5);
|
|
1241
|
-
if (structValueField?.kind !== "message")
|
|
1242
|
-
throw new globalThis.Error();
|
|
1243
|
-
return structValueField.T().toJson(message.kind.structValue);
|
|
1244
|
-
}
|
|
1245
|
-
}
|
|
1246
|
-
/**
|
|
1247
|
-
* Decode `Value` from JSON value.
|
|
1248
|
-
*/
|
|
1249
|
-
internalJsonRead(json, options, target) {
|
|
1250
|
-
if (!target)
|
|
1251
|
-
target = this.create();
|
|
1252
|
-
switch (typeof json) {
|
|
1253
|
-
case "number":
|
|
1254
|
-
target.kind = { oneofKind: "numberValue", numberValue: json };
|
|
1255
|
-
break;
|
|
1256
|
-
case "string":
|
|
1257
|
-
target.kind = { oneofKind: "stringValue", stringValue: json };
|
|
1258
|
-
break;
|
|
1259
|
-
case "boolean":
|
|
1260
|
-
target.kind = { oneofKind: "boolValue", boolValue: json };
|
|
1261
|
-
break;
|
|
1262
|
-
case "object":
|
|
1263
|
-
if (json === null) {
|
|
1264
|
-
target.kind = { oneofKind: "nullValue", nullValue: NullValue.NULL_VALUE };
|
|
1265
|
-
}
|
|
1266
|
-
else if (globalThis.Array.isArray(json)) {
|
|
1267
|
-
target.kind = { oneofKind: "listValue", listValue: ListValue.fromJson(json) };
|
|
1268
|
-
}
|
|
1269
|
-
else {
|
|
1270
|
-
target.kind = { oneofKind: "structValue", structValue: Struct.fromJson(json) };
|
|
1271
|
-
}
|
|
1272
|
-
break;
|
|
1273
|
-
default: throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json));
|
|
1274
|
-
}
|
|
1275
|
-
return target;
|
|
1276
|
-
}
|
|
1277
|
-
create(value) {
|
|
1278
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1279
|
-
message.kind = { oneofKind: undefined };
|
|
1280
|
-
if (value !== undefined)
|
|
1281
|
-
reflectionMergePartial(this, message, value);
|
|
1282
|
-
return message;
|
|
1283
|
-
}
|
|
1284
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1285
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1286
|
-
while (reader.pos < end) {
|
|
1287
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1288
|
-
switch (fieldNo) {
|
|
1289
|
-
case /* google.protobuf.NullValue null_value */ 1:
|
|
1290
|
-
message.kind = {
|
|
1291
|
-
oneofKind: "nullValue",
|
|
1292
|
-
nullValue: reader.int32()
|
|
1293
|
-
};
|
|
1294
|
-
break;
|
|
1295
|
-
case /* double number_value */ 2:
|
|
1296
|
-
message.kind = {
|
|
1297
|
-
oneofKind: "numberValue",
|
|
1298
|
-
numberValue: reader.double()
|
|
1299
|
-
};
|
|
1300
|
-
break;
|
|
1301
|
-
case /* string string_value */ 3:
|
|
1302
|
-
message.kind = {
|
|
1303
|
-
oneofKind: "stringValue",
|
|
1304
|
-
stringValue: reader.string()
|
|
1305
|
-
};
|
|
1306
|
-
break;
|
|
1307
|
-
case /* bool bool_value */ 4:
|
|
1308
|
-
message.kind = {
|
|
1309
|
-
oneofKind: "boolValue",
|
|
1310
|
-
boolValue: reader.bool()
|
|
1311
|
-
};
|
|
1312
|
-
break;
|
|
1313
|
-
case /* google.protobuf.Struct struct_value */ 5:
|
|
1314
|
-
message.kind = {
|
|
1315
|
-
oneofKind: "structValue",
|
|
1316
|
-
structValue: Struct.internalBinaryRead(reader, reader.uint32(), options, message.kind.structValue)
|
|
1317
|
-
};
|
|
1318
|
-
break;
|
|
1319
|
-
case /* google.protobuf.ListValue list_value */ 6:
|
|
1320
|
-
message.kind = {
|
|
1321
|
-
oneofKind: "listValue",
|
|
1322
|
-
listValue: ListValue.internalBinaryRead(reader, reader.uint32(), options, message.kind.listValue)
|
|
1323
|
-
};
|
|
1324
|
-
break;
|
|
1325
|
-
default:
|
|
1326
|
-
let u = options.readUnknownField;
|
|
1327
|
-
if (u === "throw")
|
|
1328
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1329
|
-
let d = reader.skip(wireType);
|
|
1330
|
-
if (u !== false)
|
|
1331
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1332
|
-
}
|
|
1333
|
-
}
|
|
1334
|
-
return message;
|
|
1335
|
-
}
|
|
1336
|
-
internalBinaryWrite(message, writer, options) {
|
|
1337
|
-
/* google.protobuf.NullValue null_value = 1; */
|
|
1338
|
-
if (message.kind.oneofKind === "nullValue")
|
|
1339
|
-
writer.tag(1, WireType.Varint).int32(message.kind.nullValue);
|
|
1340
|
-
/* double number_value = 2; */
|
|
1341
|
-
if (message.kind.oneofKind === "numberValue")
|
|
1342
|
-
writer.tag(2, WireType.Bit64).double(message.kind.numberValue);
|
|
1343
|
-
/* string string_value = 3; */
|
|
1344
|
-
if (message.kind.oneofKind === "stringValue")
|
|
1345
|
-
writer.tag(3, WireType.LengthDelimited).string(message.kind.stringValue);
|
|
1346
|
-
/* bool bool_value = 4; */
|
|
1347
|
-
if (message.kind.oneofKind === "boolValue")
|
|
1348
|
-
writer.tag(4, WireType.Varint).bool(message.kind.boolValue);
|
|
1349
|
-
/* google.protobuf.Struct struct_value = 5; */
|
|
1350
|
-
if (message.kind.oneofKind === "structValue")
|
|
1351
|
-
Struct.internalBinaryWrite(message.kind.structValue, writer.tag(5, WireType.LengthDelimited).fork(), options).join();
|
|
1352
|
-
/* google.protobuf.ListValue list_value = 6; */
|
|
1353
|
-
if (message.kind.oneofKind === "listValue")
|
|
1354
|
-
ListValue.internalBinaryWrite(message.kind.listValue, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
|
|
1355
|
-
let u = options.writeUnknownFields;
|
|
1356
|
-
if (u !== false)
|
|
1357
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1358
|
-
return writer;
|
|
1359
|
-
}
|
|
1360
|
-
}
|
|
1361
|
-
/**
|
|
1362
|
-
* @generated MessageType for protobuf message google.protobuf.Value
|
|
1363
|
-
*/
|
|
1364
|
-
const Value = new Value$Type();
|
|
1365
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1366
|
-
class ListValue$Type extends MessageType {
|
|
1367
|
-
constructor() {
|
|
1368
|
-
super("google.protobuf.ListValue", [
|
|
1369
|
-
{ no: 1, name: "values", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Value }
|
|
1370
|
-
]);
|
|
1371
|
-
}
|
|
1372
|
-
/**
|
|
1373
|
-
* Encode `ListValue` to JSON array.
|
|
1374
|
-
*/
|
|
1375
|
-
internalJsonWrite(message, options) {
|
|
1376
|
-
return message.values.map(v => Value.toJson(v));
|
|
1377
|
-
}
|
|
1378
|
-
/**
|
|
1379
|
-
* Decode `ListValue` from JSON array.
|
|
1380
|
-
*/
|
|
1381
|
-
internalJsonRead(json, options, target) {
|
|
1382
|
-
if (!globalThis.Array.isArray(json))
|
|
1383
|
-
throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json));
|
|
1384
|
-
if (!target)
|
|
1385
|
-
target = this.create();
|
|
1386
|
-
let values = json.map(v => Value.fromJson(v));
|
|
1387
|
-
target.values.push(...values);
|
|
1388
|
-
return target;
|
|
1389
|
-
}
|
|
1390
|
-
create(value) {
|
|
1391
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1392
|
-
message.values = [];
|
|
1393
|
-
if (value !== undefined)
|
|
1394
|
-
reflectionMergePartial(this, message, value);
|
|
1395
|
-
return message;
|
|
1396
|
-
}
|
|
1397
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1398
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1399
|
-
while (reader.pos < end) {
|
|
1400
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1401
|
-
switch (fieldNo) {
|
|
1402
|
-
case /* repeated google.protobuf.Value values */ 1:
|
|
1403
|
-
message.values.push(Value.internalBinaryRead(reader, reader.uint32(), options));
|
|
1404
|
-
break;
|
|
1405
|
-
default:
|
|
1406
|
-
let u = options.readUnknownField;
|
|
1407
|
-
if (u === "throw")
|
|
1408
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1409
|
-
let d = reader.skip(wireType);
|
|
1410
|
-
if (u !== false)
|
|
1411
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1412
|
-
}
|
|
1413
|
-
}
|
|
1414
|
-
return message;
|
|
1415
|
-
}
|
|
1416
|
-
internalBinaryWrite(message, writer, options) {
|
|
1417
|
-
/* repeated google.protobuf.Value values = 1; */
|
|
1418
|
-
for (let i = 0; i < message.values.length; i++)
|
|
1419
|
-
Value.internalBinaryWrite(message.values[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
|
1420
|
-
let u = options.writeUnknownFields;
|
|
1421
|
-
if (u !== false)
|
|
1422
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1423
|
-
return writer;
|
|
1424
|
-
}
|
|
1425
|
-
}
|
|
1426
|
-
/**
|
|
1427
|
-
* @generated MessageType for protobuf message google.protobuf.ListValue
|
|
1428
|
-
*/
|
|
1429
|
-
const ListValue = new ListValue$Type();
|
|
1430
|
-
|
|
1431
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1432
|
-
class JTDSchema$Type extends MessageType {
|
|
1433
|
-
constructor() {
|
|
1434
|
-
super("mochabugapis.adapt.graph.JTDSchema", [
|
|
1435
|
-
{ no: 1, name: "definitions", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => JTDSchema } },
|
|
1436
|
-
{ no: 2, name: "metadata", kind: "message", T: () => Struct },
|
|
1437
|
-
{ no: 3, name: "nullable", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
|
|
1438
|
-
{ no: 4, name: "ref", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
|
|
1439
|
-
{ no: 5, name: "type", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
|
|
1440
|
-
{ no: 6, name: "enum", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
|
|
1441
|
-
{ no: 7, name: "elements", kind: "message", T: () => JTDSchema },
|
|
1442
|
-
{ no: 8, name: "properties", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => JTDSchema } },
|
|
1443
|
-
{ no: 9, name: "optional_properties", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => JTDSchema } },
|
|
1444
|
-
{ no: 10, name: "additional_properties", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
|
|
1445
|
-
{ no: 11, name: "values", kind: "message", T: () => JTDSchema },
|
|
1446
|
-
{ no: 12, name: "discriminator", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
|
|
1447
|
-
{ no: 13, name: "mapping", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => JTDSchema } }
|
|
1448
|
-
]);
|
|
1449
|
-
}
|
|
1450
|
-
create(value) {
|
|
1451
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1452
|
-
message.definitions = {};
|
|
1453
|
-
message.enum = [];
|
|
1454
|
-
message.properties = {};
|
|
1455
|
-
message.optionalProperties = {};
|
|
1456
|
-
message.mapping = {};
|
|
1457
|
-
if (value !== undefined)
|
|
1458
|
-
reflectionMergePartial(this, message, value);
|
|
1459
|
-
return message;
|
|
1460
|
-
}
|
|
1461
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1462
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1463
|
-
while (reader.pos < end) {
|
|
1464
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1465
|
-
switch (fieldNo) {
|
|
1466
|
-
case /* map<string, mochabugapis.adapt.graph.JTDSchema> definitions */ 1:
|
|
1467
|
-
this.binaryReadMap1(message.definitions, reader, options);
|
|
1468
|
-
break;
|
|
1469
|
-
case /* optional google.protobuf.Struct metadata */ 2:
|
|
1470
|
-
message.metadata = Struct.internalBinaryRead(reader, reader.uint32(), options, message.metadata);
|
|
1471
|
-
break;
|
|
1472
|
-
case /* optional bool nullable */ 3:
|
|
1473
|
-
message.nullable = reader.bool();
|
|
1474
|
-
break;
|
|
1475
|
-
case /* optional string ref */ 4:
|
|
1476
|
-
message.ref = reader.string();
|
|
1477
|
-
break;
|
|
1478
|
-
case /* optional string type */ 5:
|
|
1479
|
-
message.type = reader.string();
|
|
1480
|
-
break;
|
|
1481
|
-
case /* repeated string enum */ 6:
|
|
1482
|
-
message.enum.push(reader.string());
|
|
1483
|
-
break;
|
|
1484
|
-
case /* optional mochabugapis.adapt.graph.JTDSchema elements */ 7:
|
|
1485
|
-
message.elements = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.elements);
|
|
1486
|
-
break;
|
|
1487
|
-
case /* map<string, mochabugapis.adapt.graph.JTDSchema> properties */ 8:
|
|
1488
|
-
this.binaryReadMap8(message.properties, reader, options);
|
|
1489
|
-
break;
|
|
1490
|
-
case /* map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties */ 9:
|
|
1491
|
-
this.binaryReadMap9(message.optionalProperties, reader, options);
|
|
1492
|
-
break;
|
|
1493
|
-
case /* optional bool additional_properties */ 10:
|
|
1494
|
-
message.additionalProperties = reader.bool();
|
|
1495
|
-
break;
|
|
1496
|
-
case /* optional mochabugapis.adapt.graph.JTDSchema values */ 11:
|
|
1497
|
-
message.values = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.values);
|
|
1498
|
-
break;
|
|
1499
|
-
case /* optional string discriminator */ 12:
|
|
1500
|
-
message.discriminator = reader.string();
|
|
1501
|
-
break;
|
|
1502
|
-
case /* map<string, mochabugapis.adapt.graph.JTDSchema> mapping */ 13:
|
|
1503
|
-
this.binaryReadMap13(message.mapping, reader, options);
|
|
1504
|
-
break;
|
|
1505
|
-
default:
|
|
1506
|
-
let u = options.readUnknownField;
|
|
1507
|
-
if (u === "throw")
|
|
1508
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1509
|
-
let d = reader.skip(wireType);
|
|
1510
|
-
if (u !== false)
|
|
1511
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1512
|
-
}
|
|
1513
|
-
}
|
|
1514
|
-
return message;
|
|
1515
|
-
}
|
|
1516
|
-
binaryReadMap1(map, reader, options) {
|
|
1517
|
-
let len = reader.uint32(), end = reader.pos + len, key, val;
|
|
1518
|
-
while (reader.pos < end) {
|
|
1519
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1520
|
-
switch (fieldNo) {
|
|
1521
|
-
case 1:
|
|
1522
|
-
key = reader.string();
|
|
1523
|
-
break;
|
|
1524
|
-
case 2:
|
|
1525
|
-
val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);
|
|
1526
|
-
break;
|
|
1527
|
-
default: throw new globalThis.Error("unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.definitions");
|
|
1528
|
-
}
|
|
1529
|
-
}
|
|
1530
|
-
map[key ?? ""] = val ?? JTDSchema.create();
|
|
1531
|
-
}
|
|
1532
|
-
binaryReadMap8(map, reader, options) {
|
|
1533
|
-
let len = reader.uint32(), end = reader.pos + len, key, val;
|
|
1534
|
-
while (reader.pos < end) {
|
|
1535
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1536
|
-
switch (fieldNo) {
|
|
1537
|
-
case 1:
|
|
1538
|
-
key = reader.string();
|
|
1539
|
-
break;
|
|
1540
|
-
case 2:
|
|
1541
|
-
val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);
|
|
1542
|
-
break;
|
|
1543
|
-
default: throw new globalThis.Error("unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.properties");
|
|
1544
|
-
}
|
|
1545
|
-
}
|
|
1546
|
-
map[key ?? ""] = val ?? JTDSchema.create();
|
|
1547
|
-
}
|
|
1548
|
-
binaryReadMap9(map, reader, options) {
|
|
1549
|
-
let len = reader.uint32(), end = reader.pos + len, key, val;
|
|
1550
|
-
while (reader.pos < end) {
|
|
1551
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1552
|
-
switch (fieldNo) {
|
|
1553
|
-
case 1:
|
|
1554
|
-
key = reader.string();
|
|
1555
|
-
break;
|
|
1556
|
-
case 2:
|
|
1557
|
-
val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);
|
|
1558
|
-
break;
|
|
1559
|
-
default: throw new globalThis.Error("unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.optional_properties");
|
|
1560
|
-
}
|
|
1561
|
-
}
|
|
1562
|
-
map[key ?? ""] = val ?? JTDSchema.create();
|
|
1563
|
-
}
|
|
1564
|
-
binaryReadMap13(map, reader, options) {
|
|
1565
|
-
let len = reader.uint32(), end = reader.pos + len, key, val;
|
|
1566
|
-
while (reader.pos < end) {
|
|
1567
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1568
|
-
switch (fieldNo) {
|
|
1569
|
-
case 1:
|
|
1570
|
-
key = reader.string();
|
|
1571
|
-
break;
|
|
1572
|
-
case 2:
|
|
1573
|
-
val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);
|
|
1574
|
-
break;
|
|
1575
|
-
default: throw new globalThis.Error("unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.mapping");
|
|
1576
|
-
}
|
|
1577
|
-
}
|
|
1578
|
-
map[key ?? ""] = val ?? JTDSchema.create();
|
|
1579
|
-
}
|
|
1580
|
-
internalBinaryWrite(message, writer, options) {
|
|
1581
|
-
/* map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1; */
|
|
1582
|
-
for (let k of globalThis.Object.keys(message.definitions)) {
|
|
1583
|
-
writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);
|
|
1584
|
-
writer.tag(2, WireType.LengthDelimited).fork();
|
|
1585
|
-
JTDSchema.internalBinaryWrite(message.definitions[k], writer, options);
|
|
1586
|
-
writer.join().join();
|
|
1587
|
-
}
|
|
1588
|
-
/* optional google.protobuf.Struct metadata = 2; */
|
|
1589
|
-
if (message.metadata)
|
|
1590
|
-
Struct.internalBinaryWrite(message.metadata, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
|
1591
|
-
/* optional bool nullable = 3; */
|
|
1592
|
-
if (message.nullable !== undefined)
|
|
1593
|
-
writer.tag(3, WireType.Varint).bool(message.nullable);
|
|
1594
|
-
/* optional string ref = 4; */
|
|
1595
|
-
if (message.ref !== undefined)
|
|
1596
|
-
writer.tag(4, WireType.LengthDelimited).string(message.ref);
|
|
1597
|
-
/* optional string type = 5; */
|
|
1598
|
-
if (message.type !== undefined)
|
|
1599
|
-
writer.tag(5, WireType.LengthDelimited).string(message.type);
|
|
1600
|
-
/* repeated string enum = 6; */
|
|
1601
|
-
for (let i = 0; i < message.enum.length; i++)
|
|
1602
|
-
writer.tag(6, WireType.LengthDelimited).string(message.enum[i]);
|
|
1603
|
-
/* optional mochabugapis.adapt.graph.JTDSchema elements = 7; */
|
|
1604
|
-
if (message.elements)
|
|
1605
|
-
JTDSchema.internalBinaryWrite(message.elements, writer.tag(7, WireType.LengthDelimited).fork(), options).join();
|
|
1606
|
-
/* map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8; */
|
|
1607
|
-
for (let k of globalThis.Object.keys(message.properties)) {
|
|
1608
|
-
writer.tag(8, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);
|
|
1609
|
-
writer.tag(2, WireType.LengthDelimited).fork();
|
|
1610
|
-
JTDSchema.internalBinaryWrite(message.properties[k], writer, options);
|
|
1611
|
-
writer.join().join();
|
|
1612
|
-
}
|
|
1613
|
-
/* map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9; */
|
|
1614
|
-
for (let k of globalThis.Object.keys(message.optionalProperties)) {
|
|
1615
|
-
writer.tag(9, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);
|
|
1616
|
-
writer.tag(2, WireType.LengthDelimited).fork();
|
|
1617
|
-
JTDSchema.internalBinaryWrite(message.optionalProperties[k], writer, options);
|
|
1618
|
-
writer.join().join();
|
|
1619
|
-
}
|
|
1620
|
-
/* optional bool additional_properties = 10; */
|
|
1621
|
-
if (message.additionalProperties !== undefined)
|
|
1622
|
-
writer.tag(10, WireType.Varint).bool(message.additionalProperties);
|
|
1623
|
-
/* optional mochabugapis.adapt.graph.JTDSchema values = 11; */
|
|
1624
|
-
if (message.values)
|
|
1625
|
-
JTDSchema.internalBinaryWrite(message.values, writer.tag(11, WireType.LengthDelimited).fork(), options).join();
|
|
1626
|
-
/* optional string discriminator = 12; */
|
|
1627
|
-
if (message.discriminator !== undefined)
|
|
1628
|
-
writer.tag(12, WireType.LengthDelimited).string(message.discriminator);
|
|
1629
|
-
/* map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13; */
|
|
1630
|
-
for (let k of globalThis.Object.keys(message.mapping)) {
|
|
1631
|
-
writer.tag(13, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);
|
|
1632
|
-
writer.tag(2, WireType.LengthDelimited).fork();
|
|
1633
|
-
JTDSchema.internalBinaryWrite(message.mapping[k], writer, options);
|
|
1634
|
-
writer.join().join();
|
|
1635
|
-
}
|
|
1636
|
-
let u = options.writeUnknownFields;
|
|
1637
|
-
if (u !== false)
|
|
1638
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1639
|
-
return writer;
|
|
1640
|
-
}
|
|
1641
|
-
}
|
|
1642
|
-
/**
|
|
1643
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.JTDSchema
|
|
1644
|
-
*/
|
|
1645
|
-
const JTDSchema = new JTDSchema$Type();
|
|
1646
|
-
|
|
1647
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1648
|
-
class SignalDescriptor$Type extends MessageType {
|
|
1649
|
-
constructor() {
|
|
1650
|
-
super("mochabugapis.adapt.graph.SignalDescriptor", [
|
|
1651
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "50", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
1652
|
-
{ no: 5, name: "label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "50" } } } },
|
|
1653
|
-
{ no: 2, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "250" } } } },
|
|
1654
|
-
{ no: 3, name: "schema", kind: "message", T: () => JTDSchema, options: { "buf.validate.field": { required: true } } },
|
|
1655
|
-
{ no: 4, name: "optional", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
|
|
1656
|
-
]);
|
|
1657
|
-
}
|
|
1658
|
-
create(value) {
|
|
1659
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1660
|
-
message.name = "";
|
|
1661
|
-
if (value !== undefined)
|
|
1662
|
-
reflectionMergePartial(this, message, value);
|
|
1663
|
-
return message;
|
|
1664
|
-
}
|
|
1665
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1666
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1667
|
-
while (reader.pos < end) {
|
|
1668
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1669
|
-
switch (fieldNo) {
|
|
1670
|
-
case /* string name */ 1:
|
|
1671
|
-
message.name = reader.string();
|
|
1672
|
-
break;
|
|
1673
|
-
case /* optional string label */ 5:
|
|
1674
|
-
message.label = reader.string();
|
|
1675
|
-
break;
|
|
1676
|
-
case /* optional string description */ 2:
|
|
1677
|
-
message.description = reader.string();
|
|
1678
|
-
break;
|
|
1679
|
-
case /* mochabugapis.adapt.graph.JTDSchema schema */ 3:
|
|
1680
|
-
message.schema = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.schema);
|
|
1681
|
-
break;
|
|
1682
|
-
case /* optional bool optional */ 4:
|
|
1683
|
-
message.optional = reader.bool();
|
|
1684
|
-
break;
|
|
1685
|
-
default:
|
|
1686
|
-
let u = options.readUnknownField;
|
|
1687
|
-
if (u === "throw")
|
|
1688
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1689
|
-
let d = reader.skip(wireType);
|
|
1690
|
-
if (u !== false)
|
|
1691
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1692
|
-
}
|
|
1693
|
-
}
|
|
1694
|
-
return message;
|
|
1695
|
-
}
|
|
1696
|
-
internalBinaryWrite(message, writer, options) {
|
|
1697
|
-
/* string name = 1; */
|
|
1698
|
-
if (message.name !== "")
|
|
1699
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
1700
|
-
/* optional string label = 5; */
|
|
1701
|
-
if (message.label !== undefined)
|
|
1702
|
-
writer.tag(5, WireType.LengthDelimited).string(message.label);
|
|
1703
|
-
/* optional string description = 2; */
|
|
1704
|
-
if (message.description !== undefined)
|
|
1705
|
-
writer.tag(2, WireType.LengthDelimited).string(message.description);
|
|
1706
|
-
/* mochabugapis.adapt.graph.JTDSchema schema = 3; */
|
|
1707
|
-
if (message.schema)
|
|
1708
|
-
JTDSchema.internalBinaryWrite(message.schema, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
|
1709
|
-
/* optional bool optional = 4; */
|
|
1710
|
-
if (message.optional !== undefined)
|
|
1711
|
-
writer.tag(4, WireType.Varint).bool(message.optional);
|
|
1712
|
-
let u = options.writeUnknownFields;
|
|
1713
|
-
if (u !== false)
|
|
1714
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1715
|
-
return writer;
|
|
1716
|
-
}
|
|
1717
|
-
}
|
|
1718
|
-
/**
|
|
1719
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.SignalDescriptor
|
|
1720
|
-
*/
|
|
1721
|
-
const SignalDescriptor = new SignalDescriptor$Type();
|
|
1722
|
-
|
|
1723
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1724
|
-
class Transceiver$Type extends MessageType {
|
|
1725
|
-
constructor() {
|
|
1726
|
-
super("mochabugapis.adapt.graph.Transceiver", [
|
|
1727
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "50", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
1728
|
-
{ no: 2, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "250" } } } },
|
|
1729
|
-
{ no: 3, name: "signals", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalDescriptor, options: { "buf.validate.field": { cel: [{ id: "signals_unique_names", message: "Each signal must have a unique name.", expression: "this.map(signal, signal.name).unique()" }], repeated: { maxItems: "512" } } } }
|
|
1730
|
-
]);
|
|
1731
|
-
}
|
|
1732
|
-
create(value) {
|
|
1733
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1734
|
-
message.name = "";
|
|
1735
|
-
message.signals = [];
|
|
1736
|
-
if (value !== undefined)
|
|
1737
|
-
reflectionMergePartial(this, message, value);
|
|
1738
|
-
return message;
|
|
1739
|
-
}
|
|
1740
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1741
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1742
|
-
while (reader.pos < end) {
|
|
1743
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1744
|
-
switch (fieldNo) {
|
|
1745
|
-
case /* string name */ 1:
|
|
1746
|
-
message.name = reader.string();
|
|
1747
|
-
break;
|
|
1748
|
-
case /* optional string description */ 2:
|
|
1749
|
-
message.description = reader.string();
|
|
1750
|
-
break;
|
|
1751
|
-
case /* repeated mochabugapis.adapt.graph.SignalDescriptor signals */ 3:
|
|
1752
|
-
message.signals.push(SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options));
|
|
1753
|
-
break;
|
|
1754
|
-
default:
|
|
1755
|
-
let u = options.readUnknownField;
|
|
1756
|
-
if (u === "throw")
|
|
1757
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1758
|
-
let d = reader.skip(wireType);
|
|
1759
|
-
if (u !== false)
|
|
1760
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1761
|
-
}
|
|
1762
|
-
}
|
|
1763
|
-
return message;
|
|
1764
|
-
}
|
|
1765
|
-
internalBinaryWrite(message, writer, options) {
|
|
1766
|
-
/* string name = 1; */
|
|
1767
|
-
if (message.name !== "")
|
|
1768
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
1769
|
-
/* optional string description = 2; */
|
|
1770
|
-
if (message.description !== undefined)
|
|
1771
|
-
writer.tag(2, WireType.LengthDelimited).string(message.description);
|
|
1772
|
-
/* repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3; */
|
|
1773
|
-
for (let i = 0; i < message.signals.length; i++)
|
|
1774
|
-
SignalDescriptor.internalBinaryWrite(message.signals[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
|
1775
|
-
let u = options.writeUnknownFields;
|
|
1776
|
-
if (u !== false)
|
|
1777
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1778
|
-
return writer;
|
|
1779
|
-
}
|
|
1780
|
-
}
|
|
1781
|
-
/**
|
|
1782
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.Transceiver
|
|
1783
|
-
*/
|
|
1784
|
-
const Transceiver = new Transceiver$Type();
|
|
1785
|
-
|
|
1786
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1787
|
-
class Exchange$Type extends MessageType {
|
|
1788
|
-
constructor() {
|
|
1789
|
-
super("mochabugapis.adapt.graph.Exchange", [
|
|
1790
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "50", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
1791
|
-
{ no: 2, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "250" } } } },
|
|
1792
|
-
{ no: 3, name: "transmitters", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Transceiver, options: { "buf.validate.field": { cel: [{ id: "transmitters_unique_names", message: "Each transmitter must have a unique name.", expression: "this.map(transmitter, transmitter.name).unique()" }], repeated: { maxItems: "10" } } } },
|
|
1793
|
-
{ no: 4, name: "receivers", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Transceiver, options: { "buf.validate.field": { cel: [{ id: "receivers_unique_names", message: "Each receiver must have a unique name.", expression: "this.map(receiver, receiver.name).unique()" }], repeated: { minItems: "1", maxItems: "10" } } } }
|
|
1794
|
-
]);
|
|
1795
|
-
}
|
|
1796
|
-
create(value) {
|
|
1797
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1798
|
-
message.name = "";
|
|
1799
|
-
message.transmitters = [];
|
|
1800
|
-
message.receivers = [];
|
|
1801
|
-
if (value !== undefined)
|
|
1802
|
-
reflectionMergePartial(this, message, value);
|
|
1803
|
-
return message;
|
|
1804
|
-
}
|
|
1805
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1806
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1807
|
-
while (reader.pos < end) {
|
|
1808
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1809
|
-
switch (fieldNo) {
|
|
1810
|
-
case /* string name */ 1:
|
|
1811
|
-
message.name = reader.string();
|
|
1812
|
-
break;
|
|
1813
|
-
case /* optional string description */ 2:
|
|
1814
|
-
message.description = reader.string();
|
|
1815
|
-
break;
|
|
1816
|
-
case /* repeated mochabugapis.adapt.graph.Transceiver transmitters */ 3:
|
|
1817
|
-
message.transmitters.push(Transceiver.internalBinaryRead(reader, reader.uint32(), options));
|
|
1818
|
-
break;
|
|
1819
|
-
case /* repeated mochabugapis.adapt.graph.Transceiver receivers */ 4:
|
|
1820
|
-
message.receivers.push(Transceiver.internalBinaryRead(reader, reader.uint32(), options));
|
|
1821
|
-
break;
|
|
1822
|
-
default:
|
|
1823
|
-
let u = options.readUnknownField;
|
|
1824
|
-
if (u === "throw")
|
|
1825
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1826
|
-
let d = reader.skip(wireType);
|
|
1827
|
-
if (u !== false)
|
|
1828
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1829
|
-
}
|
|
1830
|
-
}
|
|
1831
|
-
return message;
|
|
1832
|
-
}
|
|
1833
|
-
internalBinaryWrite(message, writer, options) {
|
|
1834
|
-
/* string name = 1; */
|
|
1835
|
-
if (message.name !== "")
|
|
1836
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
1837
|
-
/* optional string description = 2; */
|
|
1838
|
-
if (message.description !== undefined)
|
|
1839
|
-
writer.tag(2, WireType.LengthDelimited).string(message.description);
|
|
1840
|
-
/* repeated mochabugapis.adapt.graph.Transceiver transmitters = 3; */
|
|
1841
|
-
for (let i = 0; i < message.transmitters.length; i++)
|
|
1842
|
-
Transceiver.internalBinaryWrite(message.transmitters[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
|
1843
|
-
/* repeated mochabugapis.adapt.graph.Transceiver receivers = 4; */
|
|
1844
|
-
for (let i = 0; i < message.receivers.length; i++)
|
|
1845
|
-
Transceiver.internalBinaryWrite(message.receivers[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();
|
|
1846
|
-
let u = options.writeUnknownFields;
|
|
1847
|
-
if (u !== false)
|
|
1848
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1849
|
-
return writer;
|
|
1850
|
-
}
|
|
1851
|
-
}
|
|
1852
|
-
/**
|
|
1853
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.Exchange
|
|
1854
|
-
*/
|
|
1855
|
-
const Exchange = new Exchange$Type();
|
|
1856
|
-
|
|
1857
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1858
|
-
class Transmitter$Type extends MessageType {
|
|
1859
|
-
constructor() {
|
|
1860
|
-
super("mochabugapis.adapt.graph.Transmitter", [
|
|
1861
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "50", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
1862
|
-
{ no: 2, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "250" } } } },
|
|
1863
|
-
{ no: 3, name: "signals", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalDescriptor, options: { "buf.validate.field": { cel: [{ id: "signals_unique_names", message: "Each signal must have a unique name.", expression: "this.map(signal, signal.name).unique()" }], repeated: { maxItems: "512" } } } },
|
|
1864
|
-
{ no: 4, name: "failure", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
|
|
1865
|
-
]);
|
|
1866
|
-
}
|
|
1867
|
-
create(value) {
|
|
1868
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1869
|
-
message.name = "";
|
|
1870
|
-
message.signals = [];
|
|
1871
|
-
message.failure = false;
|
|
1872
|
-
if (value !== undefined)
|
|
1873
|
-
reflectionMergePartial(this, message, value);
|
|
1874
|
-
return message;
|
|
1875
|
-
}
|
|
1876
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1877
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1878
|
-
while (reader.pos < end) {
|
|
1879
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1880
|
-
switch (fieldNo) {
|
|
1881
|
-
case /* string name */ 1:
|
|
1882
|
-
message.name = reader.string();
|
|
1883
|
-
break;
|
|
1884
|
-
case /* optional string description */ 2:
|
|
1885
|
-
message.description = reader.string();
|
|
1886
|
-
break;
|
|
1887
|
-
case /* repeated mochabugapis.adapt.graph.SignalDescriptor signals */ 3:
|
|
1888
|
-
message.signals.push(SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options));
|
|
1889
|
-
break;
|
|
1890
|
-
case /* bool failure */ 4:
|
|
1891
|
-
message.failure = reader.bool();
|
|
1892
|
-
break;
|
|
1893
|
-
default:
|
|
1894
|
-
let u = options.readUnknownField;
|
|
1895
|
-
if (u === "throw")
|
|
1896
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
1897
|
-
let d = reader.skip(wireType);
|
|
1898
|
-
if (u !== false)
|
|
1899
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
1900
|
-
}
|
|
1901
|
-
}
|
|
1902
|
-
return message;
|
|
1903
|
-
}
|
|
1904
|
-
internalBinaryWrite(message, writer, options) {
|
|
1905
|
-
/* string name = 1; */
|
|
1906
|
-
if (message.name !== "")
|
|
1907
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
1908
|
-
/* optional string description = 2; */
|
|
1909
|
-
if (message.description !== undefined)
|
|
1910
|
-
writer.tag(2, WireType.LengthDelimited).string(message.description);
|
|
1911
|
-
/* repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3; */
|
|
1912
|
-
for (let i = 0; i < message.signals.length; i++)
|
|
1913
|
-
SignalDescriptor.internalBinaryWrite(message.signals[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
|
1914
|
-
/* bool failure = 4; */
|
|
1915
|
-
if (message.failure !== false)
|
|
1916
|
-
writer.tag(4, WireType.Varint).bool(message.failure);
|
|
1917
|
-
let u = options.writeUnknownFields;
|
|
1918
|
-
if (u !== false)
|
|
1919
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
1920
|
-
return writer;
|
|
1921
|
-
}
|
|
1922
|
-
}
|
|
1923
|
-
/**
|
|
1924
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.Transmitter
|
|
1925
|
-
*/
|
|
1926
|
-
const Transmitter = new Transmitter$Type();
|
|
1927
|
-
|
|
1928
|
-
/**
|
|
1929
|
-
* Some error codes that can appear on the binding
|
|
1930
|
-
*
|
|
1931
|
-
* @generated from protobuf enum mochabugapis.adapt.graph.SignalBinding.Error
|
|
1932
|
-
*/
|
|
1933
|
-
var SignalBinding_Error;
|
|
1934
|
-
(function (SignalBinding_Error) {
|
|
1935
|
-
/**
|
|
1936
|
-
* Not specified
|
|
1937
|
-
*
|
|
1938
|
-
* @generated from protobuf enum value: ERROR_UNSPECIFIED = 0;
|
|
1939
|
-
*/
|
|
1940
|
-
SignalBinding_Error[SignalBinding_Error["UNSPECIFIED"] = 0] = "UNSPECIFIED";
|
|
1941
|
-
/**
|
|
1942
|
-
* Binding is missing, the signal is unbound even though the descriptor requires it to be bound
|
|
1943
|
-
*
|
|
1944
|
-
* @generated from protobuf enum value: ERROR_UNBOUND = 1;
|
|
1945
|
-
*/
|
|
1946
|
-
SignalBinding_Error[SignalBinding_Error["UNBOUND"] = 1] = "UNBOUND";
|
|
1947
|
-
/**
|
|
1948
|
-
* The source does not exist
|
|
1949
|
-
*
|
|
1950
|
-
* @generated from protobuf enum value: ERROR_INVALID_SOURCE = 2;
|
|
1951
|
-
*/
|
|
1952
|
-
SignalBinding_Error[SignalBinding_Error["INVALID_SOURCE"] = 2] = "INVALID_SOURCE";
|
|
1953
|
-
/**
|
|
1954
|
-
* The schema does not match, the source is valid
|
|
1955
|
-
*
|
|
1956
|
-
* @generated from protobuf enum value: ERROR_SCHEMA_MISMATCH = 3;
|
|
1957
|
-
*/
|
|
1958
|
-
SignalBinding_Error[SignalBinding_Error["SCHEMA_MISMATCH"] = 3] = "SCHEMA_MISMATCH";
|
|
1959
|
-
})(SignalBinding_Error || (SignalBinding_Error = {}));
|
|
1960
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
1961
|
-
class SignalBinding$Type extends MessageType {
|
|
1962
|
-
constructor() {
|
|
1963
|
-
super("mochabugapis.adapt.graph.SignalBinding", [
|
|
1964
|
-
{ no: 1, name: "descriptor", kind: "message", T: () => SignalDescriptor, options: { "buf.validate.field": { required: true } } },
|
|
1965
|
-
{ no: 2, name: "reference", kind: "scalar", oneof: "binding", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "250" } } } },
|
|
1966
|
-
{ no: 3, name: "constant", kind: "message", oneof: "binding", T: () => Value },
|
|
1967
|
-
{ no: 4, name: "error", kind: "enum", opt: true, T: () => ["mochabugapis.adapt.graph.SignalBinding.Error", SignalBinding_Error, "ERROR_"], options: { "buf.validate.field": { ignore: "IGNORE_EMPTY", enum: { notIn: [0] } } } }
|
|
1968
|
-
]);
|
|
1969
|
-
}
|
|
1970
|
-
create(value) {
|
|
1971
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
1972
|
-
message.binding = { oneofKind: undefined };
|
|
1973
|
-
if (value !== undefined)
|
|
1974
|
-
reflectionMergePartial(this, message, value);
|
|
1975
|
-
return message;
|
|
1976
|
-
}
|
|
1977
|
-
internalBinaryRead(reader, length, options, target) {
|
|
1978
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
1979
|
-
while (reader.pos < end) {
|
|
1980
|
-
let [fieldNo, wireType] = reader.tag();
|
|
1981
|
-
switch (fieldNo) {
|
|
1982
|
-
case /* mochabugapis.adapt.graph.SignalDescriptor descriptor */ 1:
|
|
1983
|
-
message.descriptor = SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options, message.descriptor);
|
|
1984
|
-
break;
|
|
1985
|
-
case /* string reference */ 2:
|
|
1986
|
-
message.binding = {
|
|
1987
|
-
oneofKind: "reference",
|
|
1988
|
-
reference: reader.string()
|
|
1989
|
-
};
|
|
1990
|
-
break;
|
|
1991
|
-
case /* google.protobuf.Value constant */ 3:
|
|
1992
|
-
message.binding = {
|
|
1993
|
-
oneofKind: "constant",
|
|
1994
|
-
constant: Value.internalBinaryRead(reader, reader.uint32(), options, message.binding.constant)
|
|
1995
|
-
};
|
|
1996
|
-
break;
|
|
1997
|
-
case /* optional mochabugapis.adapt.graph.SignalBinding.Error error */ 4:
|
|
1998
|
-
message.error = reader.int32();
|
|
1999
|
-
break;
|
|
2000
|
-
default:
|
|
2001
|
-
let u = options.readUnknownField;
|
|
2002
|
-
if (u === "throw")
|
|
2003
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
2004
|
-
let d = reader.skip(wireType);
|
|
2005
|
-
if (u !== false)
|
|
2006
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
2007
|
-
}
|
|
2008
|
-
}
|
|
2009
|
-
return message;
|
|
2010
|
-
}
|
|
2011
|
-
internalBinaryWrite(message, writer, options) {
|
|
2012
|
-
/* mochabugapis.adapt.graph.SignalDescriptor descriptor = 1; */
|
|
2013
|
-
if (message.descriptor)
|
|
2014
|
-
SignalDescriptor.internalBinaryWrite(message.descriptor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
|
2015
|
-
/* string reference = 2; */
|
|
2016
|
-
if (message.binding.oneofKind === "reference")
|
|
2017
|
-
writer.tag(2, WireType.LengthDelimited).string(message.binding.reference);
|
|
2018
|
-
/* google.protobuf.Value constant = 3; */
|
|
2019
|
-
if (message.binding.oneofKind === "constant")
|
|
2020
|
-
Value.internalBinaryWrite(message.binding.constant, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
|
2021
|
-
/* optional mochabugapis.adapt.graph.SignalBinding.Error error = 4; */
|
|
2022
|
-
if (message.error !== undefined)
|
|
2023
|
-
writer.tag(4, WireType.Varint).int32(message.error);
|
|
2024
|
-
let u = options.writeUnknownFields;
|
|
2025
|
-
if (u !== false)
|
|
2026
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
2027
|
-
return writer;
|
|
2028
|
-
}
|
|
2029
|
-
}
|
|
2030
|
-
/**
|
|
2031
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.SignalBinding
|
|
2032
|
-
*/
|
|
2033
|
-
const SignalBinding = new SignalBinding$Type();
|
|
2034
|
-
|
|
2035
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
2036
|
-
class Receiver$Type extends MessageType {
|
|
2037
|
-
constructor() {
|
|
2038
|
-
super("mochabugapis.adapt.graph.Receiver", [
|
|
2039
|
-
{ no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "1", maxLen: "50", pattern: "^[_$a-z][_$a-z0-9]*$" } } } },
|
|
2040
|
-
{ no: 2, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "250" } } } },
|
|
2041
|
-
{ no: 3, name: "bindings", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalBinding, options: { "buf.validate.field": { cel: [{ id: "bindings_unique_names", message: "Each binding must have a unique name.", expression: "this.map(binding, binding.descriptor.name).unique()" }], repeated: { maxItems: "512" } } } }
|
|
2042
|
-
]);
|
|
2043
|
-
}
|
|
2044
|
-
create(value) {
|
|
2045
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
2046
|
-
message.name = "";
|
|
2047
|
-
message.bindings = [];
|
|
2048
|
-
if (value !== undefined)
|
|
2049
|
-
reflectionMergePartial(this, message, value);
|
|
2050
|
-
return message;
|
|
2051
|
-
}
|
|
2052
|
-
internalBinaryRead(reader, length, options, target) {
|
|
2053
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
2054
|
-
while (reader.pos < end) {
|
|
2055
|
-
let [fieldNo, wireType] = reader.tag();
|
|
2056
|
-
switch (fieldNo) {
|
|
2057
|
-
case /* string name */ 1:
|
|
2058
|
-
message.name = reader.string();
|
|
2059
|
-
break;
|
|
2060
|
-
case /* optional string description */ 2:
|
|
2061
|
-
message.description = reader.string();
|
|
2062
|
-
break;
|
|
2063
|
-
case /* repeated mochabugapis.adapt.graph.SignalBinding bindings */ 3:
|
|
2064
|
-
message.bindings.push(SignalBinding.internalBinaryRead(reader, reader.uint32(), options));
|
|
2065
|
-
break;
|
|
2066
|
-
default:
|
|
2067
|
-
let u = options.readUnknownField;
|
|
2068
|
-
if (u === "throw")
|
|
2069
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
2070
|
-
let d = reader.skip(wireType);
|
|
2071
|
-
if (u !== false)
|
|
2072
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
2073
|
-
}
|
|
2074
|
-
}
|
|
2075
|
-
return message;
|
|
2076
|
-
}
|
|
2077
|
-
internalBinaryWrite(message, writer, options) {
|
|
2078
|
-
/* string name = 1; */
|
|
2079
|
-
if (message.name !== "")
|
|
2080
|
-
writer.tag(1, WireType.LengthDelimited).string(message.name);
|
|
2081
|
-
/* optional string description = 2; */
|
|
2082
|
-
if (message.description !== undefined)
|
|
2083
|
-
writer.tag(2, WireType.LengthDelimited).string(message.description);
|
|
2084
|
-
/* repeated mochabugapis.adapt.graph.SignalBinding bindings = 3; */
|
|
2085
|
-
for (let i = 0; i < message.bindings.length; i++)
|
|
2086
|
-
SignalBinding.internalBinaryWrite(message.bindings[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
|
2087
|
-
let u = options.writeUnknownFields;
|
|
2088
|
-
if (u !== false)
|
|
2089
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
2090
|
-
return writer;
|
|
2091
|
-
}
|
|
2092
|
-
}
|
|
2093
|
-
/**
|
|
2094
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.Receiver
|
|
2095
|
-
*/
|
|
2096
|
-
const Receiver = new Receiver$Type();
|
|
2097
|
-
|
|
2098
|
-
// @generated message type with reflection information, may provide speed optimized methods
|
|
2099
|
-
class VertexConfigMetadata$Type extends MessageType {
|
|
2100
|
-
constructor() {
|
|
2101
|
-
super("mochabugapis.adapt.graph.VertexConfigMetadata", [
|
|
2102
|
-
{ no: 1, name: "complete", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
|
2103
|
-
{ no: 2, name: "receivers", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Receiver, options: { "buf.validate.field": { cel: [{ id: "receivers_unique_names", message: "Each receiver must have a unique name.", expression: "this.map(receiver, receiver.name).unique()" }], repeated: { minItems: "1", maxItems: "50" } } } },
|
|
2104
|
-
{ no: 3, name: "transmitters", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Transmitter, options: { "buf.validate.field": { cel: [{ id: "transmitters_unique_names", message: "Each transmitter must have a unique name.", expression: "this.map(transmitter, transmitter.name).unique()" }], repeated: { maxItems: "50" } } } },
|
|
2105
|
-
{ no: 4, name: "procedures", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Exchange, options: { "buf.validate.field": { cel: [{ id: "procedures_unique_names", message: "Each procedure must have a unique name.", expression: "this.map(procedure, procedure.name).unique()" }], repeated: { maxItems: "10" } } } },
|
|
2106
|
-
{ no: 5, name: "streams", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Exchange, options: { "buf.validate.field": { cel: [{ id: "streams_unique_names", message: "Each stream must have a unique name.", expression: "this.map(stream, stream.name).unique()" }], repeated: { maxItems: "10" } } } },
|
|
2107
|
-
{ no: 6, name: "cron_schedule", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_DEFAULT", string: { minLen: "1", maxLen: "100" } } } }
|
|
2108
|
-
]);
|
|
2109
|
-
}
|
|
2110
|
-
create(value) {
|
|
2111
|
-
const message = globalThis.Object.create((this.messagePrototype));
|
|
2112
|
-
message.complete = false;
|
|
2113
|
-
message.receivers = [];
|
|
2114
|
-
message.transmitters = [];
|
|
2115
|
-
message.procedures = [];
|
|
2116
|
-
message.streams = [];
|
|
2117
|
-
if (value !== undefined)
|
|
2118
|
-
reflectionMergePartial(this, message, value);
|
|
2119
|
-
return message;
|
|
2120
|
-
}
|
|
2121
|
-
internalBinaryRead(reader, length, options, target) {
|
|
2122
|
-
let message = target ?? this.create(), end = reader.pos + length;
|
|
2123
|
-
while (reader.pos < end) {
|
|
2124
|
-
let [fieldNo, wireType] = reader.tag();
|
|
2125
|
-
switch (fieldNo) {
|
|
2126
|
-
case /* bool complete */ 1:
|
|
2127
|
-
message.complete = reader.bool();
|
|
2128
|
-
break;
|
|
2129
|
-
case /* repeated mochabugapis.adapt.graph.Receiver receivers */ 2:
|
|
2130
|
-
message.receivers.push(Receiver.internalBinaryRead(reader, reader.uint32(), options));
|
|
2131
|
-
break;
|
|
2132
|
-
case /* repeated mochabugapis.adapt.graph.Transmitter transmitters */ 3:
|
|
2133
|
-
message.transmitters.push(Transmitter.internalBinaryRead(reader, reader.uint32(), options));
|
|
2134
|
-
break;
|
|
2135
|
-
case /* repeated mochabugapis.adapt.graph.Exchange procedures */ 4:
|
|
2136
|
-
message.procedures.push(Exchange.internalBinaryRead(reader, reader.uint32(), options));
|
|
2137
|
-
break;
|
|
2138
|
-
case /* repeated mochabugapis.adapt.graph.Exchange streams */ 5:
|
|
2139
|
-
message.streams.push(Exchange.internalBinaryRead(reader, reader.uint32(), options));
|
|
2140
|
-
break;
|
|
2141
|
-
case /* optional string cron_schedule */ 6:
|
|
2142
|
-
message.cronSchedule = reader.string();
|
|
2143
|
-
break;
|
|
2144
|
-
default:
|
|
2145
|
-
let u = options.readUnknownField;
|
|
2146
|
-
if (u === "throw")
|
|
2147
|
-
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
2148
|
-
let d = reader.skip(wireType);
|
|
2149
|
-
if (u !== false)
|
|
2150
|
-
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
2151
|
-
}
|
|
2152
|
-
}
|
|
2153
|
-
return message;
|
|
2154
|
-
}
|
|
2155
|
-
internalBinaryWrite(message, writer, options) {
|
|
2156
|
-
/* bool complete = 1; */
|
|
2157
|
-
if (message.complete !== false)
|
|
2158
|
-
writer.tag(1, WireType.Varint).bool(message.complete);
|
|
2159
|
-
/* repeated mochabugapis.adapt.graph.Receiver receivers = 2; */
|
|
2160
|
-
for (let i = 0; i < message.receivers.length; i++)
|
|
2161
|
-
Receiver.internalBinaryWrite(message.receivers[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
|
2162
|
-
/* repeated mochabugapis.adapt.graph.Transmitter transmitters = 3; */
|
|
2163
|
-
for (let i = 0; i < message.transmitters.length; i++)
|
|
2164
|
-
Transmitter.internalBinaryWrite(message.transmitters[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
|
|
2165
|
-
/* repeated mochabugapis.adapt.graph.Exchange procedures = 4; */
|
|
2166
|
-
for (let i = 0; i < message.procedures.length; i++)
|
|
2167
|
-
Exchange.internalBinaryWrite(message.procedures[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();
|
|
2168
|
-
/* repeated mochabugapis.adapt.graph.Exchange streams = 5; */
|
|
2169
|
-
for (let i = 0; i < message.streams.length; i++)
|
|
2170
|
-
Exchange.internalBinaryWrite(message.streams[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join();
|
|
2171
|
-
/* optional string cron_schedule = 6; */
|
|
2172
|
-
if (message.cronSchedule !== undefined)
|
|
2173
|
-
writer.tag(6, WireType.LengthDelimited).string(message.cronSchedule);
|
|
2174
|
-
let u = options.writeUnknownFields;
|
|
2175
|
-
if (u !== false)
|
|
2176
|
-
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
2177
|
-
return writer;
|
|
2178
|
-
}
|
|
2179
|
-
}
|
|
2180
|
-
/**
|
|
2181
|
-
* @generated MessageType for protobuf message mochabugapis.adapt.graph.VertexConfigMetadata
|
|
2182
|
-
*/
|
|
2183
|
-
const VertexConfigMetadata = new VertexConfigMetadata$Type();
|
|
2184
|
-
|
|
2185
|
-
// Copyright 2023, mochabug AB
|
|
2186
|
-
//
|
|
2187
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2188
|
-
// you may not use this file except in compliance with the License.
|
|
2189
|
-
// You may obtain a copy of the License at
|
|
2190
|
-
//
|
|
2191
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2192
|
-
//
|
|
2193
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
2194
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2195
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2196
|
-
// See the License for the specific language governing permissions and
|
|
2197
|
-
// limitations under the License.
|
|
2198
|
-
function readAsset(name) {
|
|
2199
|
-
return fs
|
|
2200
|
-
.readFileSync(path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'assets', name))
|
|
2201
|
-
.toString();
|
|
2202
|
-
}
|
|
2203
|
-
function writeFile(filePath, content) {
|
|
2204
|
-
const dir = path.dirname(filePath);
|
|
2205
|
-
mkdirp.sync(dir);
|
|
2206
|
-
fs.writeFileSync(filePath, content);
|
|
2207
|
-
}
|
|
2208
|
-
function readManifest(filePath) {
|
|
2209
|
-
const fullPath = path.resolve(filePath);
|
|
2210
|
-
if (!fs.existsSync(fullPath)) {
|
|
2211
|
-
console.error(chalk.red(`Invalid command: Manifest file not found at ${fullPath}.`));
|
|
2212
|
-
return null;
|
|
2213
|
-
}
|
|
2214
|
-
try {
|
|
2215
|
-
const manifestData = fs.readFileSync(fullPath).toString();
|
|
2216
|
-
return Manifest.fromJsonString(manifestData);
|
|
2217
|
-
}
|
|
2218
|
-
catch (error) {
|
|
2219
|
-
console.error(chalk.red(`An error occurred while reading the manifest`));
|
|
2220
|
-
console.error(error.message);
|
|
2221
|
-
return null;
|
|
2222
|
-
}
|
|
2223
|
-
}
|
|
2224
|
-
function labelize(val) {
|
|
2225
|
-
return (val.charAt(0).toUpperCase() + val.substring(1)).replace('_', ' ');
|
|
2226
|
-
}
|
|
2227
|
-
|
|
2228
|
-
// Copyright 2023, mochabug AB
|
|
2229
|
-
//
|
|
2230
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2231
|
-
// you may not use this file except in compliance with the License.
|
|
2232
|
-
// You may obtain a copy of the License at
|
|
2233
|
-
//
|
|
2234
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2235
|
-
//
|
|
2236
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
2237
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2238
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2239
|
-
// See the License for the specific language governing permissions and
|
|
2240
|
-
// limitations under the License.
|
|
2241
|
-
function convertVertexType(type) {
|
|
2242
|
-
switch (type) {
|
|
2243
|
-
case 'action':
|
|
2244
|
-
return Vertex_VertexType.ACTION;
|
|
2245
|
-
case 'cron-trigger':
|
|
2246
|
-
return Vertex_VertexType.CRON_TRIGGER;
|
|
2247
|
-
case 'external-trigger':
|
|
2248
|
-
return Vertex_VertexType.EXTERNAL_TRIGGER;
|
|
2249
|
-
case 'browser':
|
|
2250
|
-
return Vertex_VertexType.BROWSER;
|
|
2251
|
-
default:
|
|
2252
|
-
throw new Error('The node type is invalid');
|
|
2253
|
-
}
|
|
2254
|
-
}
|
|
2255
|
-
function addVertex(cwd, name, type, hasConfigurator, existingVertices) {
|
|
2256
|
-
// Create a folder with the vertex name
|
|
2257
|
-
const folder = path.join(cwd, 'src', name);
|
|
2258
|
-
if (fs.existsSync(folder)) {
|
|
2259
|
-
throw new Error(`The folder for the new vertex: ${folder} already exists`);
|
|
2260
|
-
}
|
|
2261
|
-
mkdirp.sync(folder);
|
|
2262
|
-
const execFile = path.join(folder, 'executor.ts');
|
|
2263
|
-
const vertex = {
|
|
2264
|
-
name,
|
|
2265
|
-
label: labelize(name),
|
|
2266
|
-
description: `The better description of what ${name} is doing, the better it is for both AI and humans`,
|
|
2267
|
-
type: convertVertexType(type),
|
|
2268
|
-
metadata: path.join('src', name, 'metadata.json'), // We ommit the default config
|
|
2269
|
-
configurator: hasConfigurator,
|
|
2270
|
-
mtls: [],
|
|
2271
|
-
codeOauth2: [],
|
|
2272
|
-
oauth2: [],
|
|
2273
|
-
variables: []
|
|
2274
|
-
};
|
|
2275
|
-
// Write the new task
|
|
2276
|
-
switch (vertex.type) {
|
|
2277
|
-
case Vertex_VertexType.ACTION:
|
|
2278
|
-
writeFile(execFile, readAsset('executor_action.ts'));
|
|
2279
|
-
break;
|
|
2280
|
-
case Vertex_VertexType.BROWSER:
|
|
2281
|
-
writeFile(execFile, readAsset('executor_browser.ts'));
|
|
2282
|
-
break;
|
|
2283
|
-
case Vertex_VertexType.EXTERNAL_TRIGGER:
|
|
2284
|
-
writeFile(execFile, readAsset('executor_external_trigger.ts'));
|
|
2285
|
-
break;
|
|
2286
|
-
case Vertex_VertexType.CRON_TRIGGER:
|
|
2287
|
-
writeFile(execFile, readAsset('executor_cron_trigger.ts'));
|
|
2288
|
-
break;
|
|
2289
|
-
default:
|
|
2290
|
-
throw new Error('The vertex type is invalid');
|
|
2291
|
-
}
|
|
2292
|
-
// Write the export file for executors
|
|
2293
|
-
fs.writeFileSync(path.join(cwd, 'src', 'executors.ts'), generateExport([name, ...existingVertices.map((v) => v.name)], 'ExecutorEnvironment'));
|
|
2294
|
-
const vertexConfig = {
|
|
2295
|
-
complete: true,
|
|
2296
|
-
receivers: [
|
|
2297
|
-
{
|
|
2298
|
-
name: 'input',
|
|
2299
|
-
description: 'Default input receiver',
|
|
2300
|
-
bindings: []
|
|
2301
|
-
}
|
|
2302
|
-
],
|
|
2303
|
-
transmitters: [
|
|
2304
|
-
{
|
|
2305
|
-
name: 'output',
|
|
2306
|
-
description: 'Default output transmitter',
|
|
2307
|
-
signals: [],
|
|
2308
|
-
failure: false
|
|
2309
|
-
}
|
|
2310
|
-
],
|
|
2311
|
-
procedures: [],
|
|
2312
|
-
streams: []
|
|
2313
|
-
};
|
|
2314
|
-
// Runs every 5 seconds
|
|
2315
|
-
if (vertex.type === Vertex_VertexType.CRON_TRIGGER) {
|
|
2316
|
-
vertexConfig.cronSchedule = '/5 * * * * *';
|
|
2317
|
-
}
|
|
2318
|
-
if (hasConfigurator) {
|
|
2319
|
-
const configFile = path.join(folder, 'configurator.ts');
|
|
2320
|
-
writeFile(configFile, readAsset('configurator.ts'));
|
|
2321
|
-
// If we have a config, make sure we don't say that the config is complete by default
|
|
2322
|
-
vertexConfig.complete = false;
|
|
2323
|
-
// Write the export file for configurators
|
|
2324
|
-
fs.writeFileSync(path.join(cwd, 'src', 'configurators.ts'), generateExport([
|
|
2325
|
-
name,
|
|
2326
|
-
...existingVertices.filter((v) => v.configurator).map((v) => v.name)
|
|
2327
|
-
], 'ConfiguratorEnvironment'));
|
|
2328
|
-
}
|
|
2329
|
-
// Write the config json file
|
|
2330
|
-
fs.writeFileSync(path.join(folder, 'metadata.json'), VertexConfigMetadata.toJsonString(vertexConfig, { prettySpaces: 2 }));
|
|
2331
|
-
return vertex;
|
|
2332
|
-
}
|
|
2333
|
-
function generateExport(vertices, env) {
|
|
2334
|
-
const imports = vertices
|
|
2335
|
-
.map((v) => `import ${v} from './${v}/${env === 'ExecutorEnvironment' ? 'executor' : 'configurator'}';`)
|
|
2336
|
-
.join('\n');
|
|
2337
|
-
return `/**
|
|
2
|
+
var g={name:"@mochabug/adaptkit",version:"1.0.0-beta.10"};function oe(e,n){return e!==null&&typeof e=="object"&&"$typeName"in e&&typeof e.$typeName=="string"?n===void 0?!0:n.typeName===e.$typeName:!1}var c;(function(e){e[e.DOUBLE=1]="DOUBLE",e[e.FLOAT=2]="FLOAT",e[e.INT64=3]="INT64",e[e.UINT64=4]="UINT64",e[e.INT32=5]="INT32",e[e.FIXED64=6]="FIXED64",e[e.FIXED32=7]="FIXED32",e[e.BOOL=8]="BOOL",e[e.STRING=9]="STRING",e[e.BYTES=12]="BYTES",e[e.UINT32=13]="UINT32",e[e.SFIXED32=15]="SFIXED32",e[e.SFIXED64=16]="SFIXED64",e[e.SINT32=17]="SINT32",e[e.SINT64=18]="SINT64"})(c||(c={}));function wn(){let e=0,n=0;for(let o=0;o<28;o+=7){let s=this.buf[this.pos++];if(e|=(s&127)<<o,!(s&128))return this.assertBounds(),[e,n]}let t=this.buf[this.pos++];if(e|=(t&15)<<28,n=(t&112)>>4,!(t&128))return this.assertBounds(),[e,n];for(let o=3;o<=31;o+=7){let s=this.buf[this.pos++];if(n|=(s&127)<<o,!(s&128))return this.assertBounds(),[e,n]}throw new Error("invalid varint")}function ye(e,n,t){for(let a=0;a<28;a=a+7){let i=e>>>a,r=!(!(i>>>7)&&n==0),l=(r?i|128:i)&255;if(t.push(l),!r)return}let o=e>>>28&15|(n&7)<<4,s=!!(n>>3);if(t.push((s?o|128:o)&255),!!s){for(let a=3;a<31;a=a+7){let i=n>>>a,r=!!(i>>>7),l=(r?i|128:i)&255;if(t.push(l),!r)return}t.push(n>>>31&1)}}var Ie=4294967296;function Te(e){let n=e[0]==="-";n&&(e=e.slice(1));let t=1e6,o=0,s=0;function a(i,r){let l=Number(e.slice(i,r));s*=t,o=o*t+l,o>=Ie&&(s=s+(o/Ie|0),o=o%Ie)}return a(-24,-18),a(-18,-12),a(-12,-6),a(-6),n?Un(o,s):_e(o,s)}function vn(e,n){let t=_e(e,n),o=t.hi&2147483648;o&&(t=Un(t.lo,t.hi));let s=Pe(t.lo,t.hi);return o?"-"+s:s}function Pe(e,n){if({lo:e,hi:n}=jo(e,n),n<=2097151)return String(Ie*n+e);let t=e&16777215,o=(e>>>24|n<<8)&16777215,s=n>>16&65535,a=t+o*6777216+s*6710656,i=o+s*8147497,r=s*2,l=1e7;return a>=l&&(i+=Math.floor(a/l),a%=l),i>=l&&(r+=Math.floor(i/l),i%=l),r.toString()+Ln(i)+Ln(a)}function jo(e,n){return{lo:e>>>0,hi:n>>>0}}function _e(e,n){return{lo:e|0,hi:n|0}}function Un(e,n){return n=~n,e?e=~e+1:n+=1,_e(e,n)}var Ln=e=>{let n=String(e);return"0000000".slice(n.length)+n};function Oe(e,n){if(e>=0){for(;e>127;)n.push(e&127|128),e=e>>>7;n.push(e)}else{for(let t=0;t<9;t++)n.push(e&127|128),e=e>>7;n.push(1)}}function kn(){let e=this.buf[this.pos++],n=e&127;if(!(e&128))return this.assertBounds(),n;if(e=this.buf[this.pos++],n|=(e&127)<<7,!(e&128))return this.assertBounds(),n;if(e=this.buf[this.pos++],n|=(e&127)<<14,!(e&128))return this.assertBounds(),n;if(e=this.buf[this.pos++],n|=(e&127)<<21,!(e&128))return this.assertBounds(),n;e=this.buf[this.pos++],n|=(e&15)<<28;for(let t=5;e&128&&t<10;t++)e=this.buf[this.pos++];if(e&128)throw new Error("invalid varint");return this.assertBounds(),n>>>0}var p=$o();function $o(){let e=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof e.getBigInt64=="function"&&typeof e.getBigUint64=="function"&&typeof e.setBigInt64=="function"&&typeof e.setBigUint64=="function"&&(typeof process!="object"||typeof process.env!="object"||process.env.BUF_BIGINT_DISABLE!=="1")){let t=BigInt("-9223372036854775808"),o=BigInt("9223372036854775807"),s=BigInt("0"),a=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(i){let r=typeof i=="bigint"?i:BigInt(i);if(r>o||r<t)throw new Error(`invalid int64: ${i}`);return r},uParse(i){let r=typeof i=="bigint"?i:BigInt(i);if(r>a||r<s)throw new Error(`invalid uint64: ${i}`);return r},enc(i){return e.setBigInt64(0,this.parse(i),!0),{lo:e.getInt32(0,!0),hi:e.getInt32(4,!0)}},uEnc(i){return e.setBigInt64(0,this.uParse(i),!0),{lo:e.getInt32(0,!0),hi:e.getInt32(4,!0)}},dec(i,r){return e.setInt32(0,i,!0),e.setInt32(4,r,!0),e.getBigInt64(0,!0)},uDec(i,r){return e.setInt32(0,i,!0),e.setInt32(4,r,!0),e.getBigUint64(0,!0)}}}return{zero:"0",supported:!1,parse(t){return typeof t!="string"&&(t=t.toString()),Dn(t),t},uParse(t){return typeof t!="string"&&(t=t.toString()),Qn(t),t},enc(t){return typeof t!="string"&&(t=t.toString()),Dn(t),Te(t)},uEnc(t){return typeof t!="string"&&(t=t.toString()),Qn(t),Te(t)},dec(t,o){return vn(t,o)},uDec(t,o){return Pe(t,o)}}}function Dn(e){if(!/^-?[0-9]+$/.test(e))throw new Error("invalid int64: "+e)}function Qn(e){if(!/^[0-9]+$/.test(e))throw new Error("invalid uint64: "+e)}function F(e,n){switch(e){case c.STRING:return"";case c.BOOL:return!1;default:return 0;case c.DOUBLE:case c.FLOAT:return 0;case c.INT64:case c.UINT64:case c.SFIXED64:case c.FIXED64:case c.SINT64:return n?"0":p.zero;case c.BYTES:return new Uint8Array(0)}}function Tn(e,n){switch(e){case c.BOOL:return n===!1;case c.STRING:return n==="";case c.BYTES:return n instanceof Uint8Array&&!n.byteLength;default:return n==0}}var qo=["FieldValueInvalidError","FieldListRangeError","ForeignFieldError"],C=class extends Error{constructor(n,t,o="FieldValueInvalidError"){super(t),this.name=o,this.field=()=>n}};function Pn(e){return e instanceof Error&&qo.includes(e.name)&&"field"in e&&typeof e.field=="function"}var _n=2,Y=Symbol.for("reflect unsafe local");function Ge(e,n){let t=e[n.localName].case;return t===void 0?t:n.fields.find(o=>o.localName===t)}function On(e,n){let t=n.localName;if(n.oneof)return e[n.oneof.localName].case===t;if(n.presence!=_n)return e[t]!==void 0&&Object.prototype.hasOwnProperty.call(e,t);switch(n.fieldKind){case"list":return e[t].length>0;case"map":return Object.keys(e[t]).length>0;case"scalar":return!Tn(n.scalar,e[t]);case"enum":return e[t]!==n.enum.values[0].number}throw new Error("message field with implicit presence")}function D(e,n){return Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==void 0}function he(e,n){if(n.oneof){let t=e[n.oneof.localName];return t.case===n.localName?t.value:void 0}return e[n.localName]}function fe(e,n,t){n.oneof?e[n.oneof.localName]={case:n.localName,value:t}:e[n.localName]=t}function jn(e,n){let t=n.localName;if(n.oneof){let o=n.oneof.localName;e[o].case===t&&(e[o]={case:void 0})}else if(n.presence!=_n)delete e[t];else switch(n.fieldKind){case"map":e[t]={};break;case"list":e[t]=[];break;case"enum":e[t]=n.enum.values[0].number;break;case"scalar":e[t]=F(n.scalar,n.longAsString);break}}function M(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function se(e,n){var t,o,s,a;if(M(e)&&Y in e&&"add"in e&&"field"in e&&typeof e.field=="function"){if(n!==void 0){let i=n,r=e.field();return i.listKind==r.listKind&&i.scalar===r.scalar&&((t=i.message)===null||t===void 0?void 0:t.typeName)===((o=r.message)===null||o===void 0?void 0:o.typeName)&&((s=i.enum)===null||s===void 0?void 0:s.typeName)===((a=r.enum)===null||a===void 0?void 0:a.typeName)}return!0}return!1}function ae(e,n){var t,o,s,a;if(M(e)&&Y in e&&"has"in e&&"field"in e&&typeof e.field=="function"){if(n!==void 0){let i=n,r=e.field();return i.mapKey===r.mapKey&&i.mapKind==r.mapKind&&i.scalar===r.scalar&&((t=i.message)===null||t===void 0?void 0:t.typeName)===((o=r.message)===null||o===void 0?void 0:o.typeName)&&((s=i.enum)===null||s===void 0?void 0:s.typeName)===((a=r.enum)===null||a===void 0?void 0:a.typeName)}return!0}return!1}function ie(e,n){return M(e)&&Y in e&&"desc"in e&&M(e.desc)&&e.desc.kind==="message"&&(n===void 0||e.desc.typeName==n.typeName)}function $n(e){return qn(e.$typeName)}function H(e){let n=e.fields[0];return qn(e.typeName)&&n!==void 0&&n.fieldKind=="scalar"&&n.name=="value"&&n.number==1}function qn(e){return e.startsWith("google.protobuf.")&&["DoubleValue","FloatValue","Int64Value","UInt64Value","Int32Value","UInt32Value","BoolValue","StringValue","BytesValue"].includes(e.substring(16))}var es=999,ns=998,Ze=2;function B(e,n){if(oe(n,e))return n;let t=is(e);return n!==void 0&&ts(e,t,n),t}function ts(e,n,t){for(let o of e.members){let s=t[o.localName];if(s==null)continue;let a;if(o.kind=="oneof"){let i=Ge(t,o);if(!i)continue;a=i,s=he(t,i)}else a=o;switch(a.fieldKind){case"message":s=$e(a,s);break;case"scalar":s=tt(a,s);break;case"list":s=ss(a,s);break;case"map":s=os(a,s);break}fe(n,a,s)}return n}function tt(e,n){return e.scalar==c.BYTES?qe(n):n}function os(e,n){if(M(n)){if(e.scalar==c.BYTES)return et(n,qe);if(e.mapKind=="message")return et(n,t=>$e(e,t))}return n}function ss(e,n){if(Array.isArray(n)){if(e.scalar==c.BYTES)return n.map(qe);if(e.listKind=="message")return n.map(t=>$e(e,t))}return n}function $e(e,n){if(e.fieldKind=="message"&&!e.oneof&&H(e.message))return tt(e.message.fields[0],n);if(M(n)){if(e.message.typeName=="google.protobuf.Struct"&&e.parent.typeName!=="google.protobuf.Value")return n;if(!oe(n,e.message))return B(e.message,n)}return n}function qe(e){return Array.isArray(e)?new Uint8Array(e):e}function et(e,n){let t={};for(let o of Object.entries(e))t[o[0]]=n(o[1]);return t}var as=Symbol(),nt=new WeakMap;function is(e){let n;if(rs(e)){let t=nt.get(e),o,s;if(t)({prototype:o,members:s}=t);else{o={},s=new Set;for(let a of e.members)a.kind!="oneof"&&(a.fieldKind!="scalar"&&a.fieldKind!="enum"||a.presence!=Ze&&(s.add(a),o[a.localName]=je(a)));nt.set(e,{prototype:o,members:s})}n=Object.create(o),n.$typeName=e.typeName;for(let a of e.members)s.has(a)||a.kind=="field"&&(a.fieldKind=="message"||(a.fieldKind=="scalar"||a.fieldKind=="enum")&&a.presence!=Ze)||(n[a.localName]=je(a))}else{n={$typeName:e.typeName};for(let t of e.members)(t.kind=="oneof"||t.presence==Ze)&&(n[t.localName]=je(t))}return n}function rs(e){switch(e.file.edition){case es:return!1;case ns:return!0;default:return e.fields.some(n=>n.presence!=Ze&&n.fieldKind!="message"&&!n.oneof)}}function je(e){if(e.kind=="oneof")return{case:void 0};if(e.fieldKind=="list")return[];if(e.fieldKind=="map")return{};if(e.fieldKind=="message")return as;let n=e.getDefaultValue();return n!==void 0?e.fieldKind=="scalar"&&e.longAsString?n.toString():n:e.fieldKind=="scalar"?F(e.scalar,e.longAsString):e.enum.values[0].number}var en=Symbol.for("@bufbuild/protobuf/text-encoding");function re(){if(globalThis[en]==null){let e=new globalThis.TextEncoder,n=new globalThis.TextDecoder;globalThis[en]={encodeUtf8(t){return e.encode(t)},decodeUtf8(t){return n.decode(t)},checkUtf8(t){try{return encodeURIComponent(t),!0}catch{return!1}}}}return globalThis[en]}var f;(function(e){e[e.Varint=0]="Varint",e[e.Bit64=1]="Bit64",e[e.LengthDelimited=2]="LengthDelimited",e[e.StartGroup=3]="StartGroup",e[e.EndGroup=4]="EndGroup",e[e.Bit32=5]="Bit32"})(f||(f={}));var tn=34028234663852886e22,on=-34028234663852886e22,sn=4294967295,an=2147483647,rn=-2147483648,P=class{constructor(n=re().encodeUtf8){this.encodeUtf8=n,this.stack=[],this.chunks=[],this.buf=[]}finish(){this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]);let n=0;for(let s=0;s<this.chunks.length;s++)n+=this.chunks[s].length;let t=new Uint8Array(n),o=0;for(let s=0;s<this.chunks.length;s++)t.set(this.chunks[s],o),o+=this.chunks[s].length;return this.chunks=[],t}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let n=this.finish(),t=this.stack.pop();if(!t)throw new Error("invalid state, fork stack empty");return this.chunks=t.chunks,this.buf=t.buf,this.uint32(n.byteLength),this.raw(n)}tag(n,t){return this.uint32((n<<3|t)>>>0)}raw(n){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(n),this}uint32(n){for(ot(n);n>127;)this.buf.push(n&127|128),n=n>>>7;return this.buf.push(n),this}int32(n){return nn(n),Oe(n,this.buf),this}bool(n){return this.buf.push(n?1:0),this}bytes(n){return this.uint32(n.byteLength),this.raw(n)}string(n){let t=this.encodeUtf8(n);return this.uint32(t.byteLength),this.raw(t)}float(n){cs(n);let t=new Uint8Array(4);return new DataView(t.buffer).setFloat32(0,n,!0),this.raw(t)}double(n){let t=new Uint8Array(8);return new DataView(t.buffer).setFloat64(0,n,!0),this.raw(t)}fixed32(n){ot(n);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,n,!0),this.raw(t)}sfixed32(n){nn(n);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,n,!0),this.raw(t)}sint32(n){return nn(n),n=(n<<1^n>>31)>>>0,Oe(n,this.buf),this}sfixed64(n){let t=new Uint8Array(8),o=new DataView(t.buffer),s=p.enc(n);return o.setInt32(0,s.lo,!0),o.setInt32(4,s.hi,!0),this.raw(t)}fixed64(n){let t=new Uint8Array(8),o=new DataView(t.buffer),s=p.uEnc(n);return o.setInt32(0,s.lo,!0),o.setInt32(4,s.hi,!0),this.raw(t)}int64(n){let t=p.enc(n);return ye(t.lo,t.hi,this.buf),this}sint64(n){let t=p.enc(n),o=t.hi>>31,s=t.lo<<1^o,a=(t.hi<<1|t.lo>>>31)^o;return ye(s,a,this.buf),this}uint64(n){let t=p.uEnc(n);return ye(t.lo,t.hi,this.buf),this}},Q=class{constructor(n,t=re().decodeUtf8){this.decodeUtf8=t,this.varint64=wn,this.uint32=kn,this.buf=n,this.len=n.length,this.pos=0,this.view=new DataView(n.buffer,n.byteOffset,n.byteLength)}tag(){let n=this.uint32(),t=n>>>3,o=n&7;if(t<=0||o<0||o>5)throw new Error("illegal tag: field no "+t+" wire type "+o);return[t,o]}skip(n,t){let o=this.pos;switch(n){case f.Varint:for(;this.buf[this.pos++]&128;);break;case f.Bit64:this.pos+=4;case f.Bit32:this.pos+=4;break;case f.LengthDelimited:let s=this.uint32();this.pos+=s;break;case f.StartGroup:for(;;){let[a,i]=this.tag();if(i===f.EndGroup){if(t!==void 0&&a!==t)throw new Error("invalid end group tag");break}this.skip(i,a)}break;default:throw new Error("cant skip wire type "+n)}return this.assertBounds(),this.buf.subarray(o,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let n=this.uint32();return n>>>1^-(n&1)}int64(){return p.dec(...this.varint64())}uint64(){return p.uDec(...this.varint64())}sint64(){let[n,t]=this.varint64(),o=-(n&1);return n=(n>>>1|(t&1)<<31)^o,t=t>>>1^o,p.dec(n,t)}bool(){let[n,t]=this.varint64();return n!==0||t!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return p.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return p.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let n=this.uint32(),t=this.pos;return this.pos+=n,this.assertBounds(),this.buf.subarray(t,t+n)}string(){return this.decodeUtf8(this.bytes())}};function nn(e){if(typeof e=="string")e=Number(e);else if(typeof e!="number")throw new Error("invalid int32: "+typeof e);if(!Number.isInteger(e)||e>an||e<rn)throw new Error("invalid int32: "+e)}function ot(e){if(typeof e=="string")e=Number(e);else if(typeof e!="number")throw new Error("invalid uint32: "+typeof e);if(!Number.isInteger(e)||e>sn||e<0)throw new Error("invalid uint32: "+e)}function cs(e){if(typeof e=="string"){let n=e;if(e=Number(e),isNaN(e)&&n!=="NaN")throw new Error("invalid float32: "+n)}else if(typeof e!="number")throw new Error("invalid float32: "+typeof e);if(Number.isFinite(e)&&(e>tn||e<on))throw new Error("invalid float32: "+e)}function K(e,n){let t=e.fieldKind=="list"?se(n,e):e.fieldKind=="map"?ae(n,e):ln(e,n);if(t===!0)return;let o;switch(e.fieldKind){case"list":o=`expected ${rt(e)}, got ${A(n)}`;break;case"map":o=`expected ${ct(e)}, got ${A(n)}`;break;default:o=Ae(e,n,t)}return new C(e,o)}function cn(e,n,t){let o=ln(e,t);if(o!==!0)return new C(e,`list item #${n+1}: ${Ae(e,t,o)}`)}function st(e,n,t){let o=at(n,e.mapKey);if(o!==!0)return new C(e,`invalid map key: ${Ae({scalar:e.mapKey},n,o)}`);let s=ln(e,t);if(s!==!0)return new C(e,`map entry ${A(n)}: ${Ae(e,t,s)}`)}function ln(e,n){return e.scalar!==void 0?at(n,e.scalar):e.enum!==void 0?e.enum.open?Number.isInteger(n):e.enum.values.some(t=>t.number===n):ie(n,e.message)}function at(e,n){switch(n){case c.DOUBLE:return typeof e=="number";case c.FLOAT:return typeof e!="number"?!1:Number.isNaN(e)||!Number.isFinite(e)?!0:e>tn||e<on?`${e.toFixed()} out of range`:!0;case c.INT32:case c.SFIXED32:case c.SINT32:return typeof e!="number"||!Number.isInteger(e)?!1:e>an||e<rn?`${e.toFixed()} out of range`:!0;case c.FIXED32:case c.UINT32:return typeof e!="number"||!Number.isInteger(e)?!1:e>sn||e<0?`${e.toFixed()} out of range`:!0;case c.BOOL:return typeof e=="boolean";case c.STRING:return typeof e!="string"?!1:re().checkUtf8(e)||"invalid UTF8";case c.BYTES:return e instanceof Uint8Array;case c.INT64:case c.SFIXED64:case c.SINT64:if(typeof e!="string"&&typeof e!="bigint"&&typeof e!="number")return!1;try{p.parse(e)}catch{return`${e} out of range`}return!0;case c.FIXED64:case c.UINT64:if(typeof e!="string"&&typeof e!="bigint"&&typeof e!="number")return!1;try{p.uParse(e)}catch{return`${e} out of range`}return!0}}function Ae(e,n,t){return t=typeof t=="string"?`: ${t}`:`, got ${A(n)}`,e.scalar!==void 0?`expected ${ls(e.scalar)}`+t:e.enum!==void 0?`expected ${e.enum.toString()}`+t:`expected ${it(e.message)}`+t}function A(e){switch(typeof e){case"object":return e===null?"null":e instanceof Uint8Array?`Uint8Array(${e.length})`:Array.isArray(e)?`Array(${e.length})`:se(e)?rt(e.field()):ae(e)?ct(e.field()):ie(e)?it(e.desc):oe(e)?`message ${e.$typeName}`:"object";case"string":return e.length>30?"string":`"${e.split('"').join('\\"')}"`;case"boolean":return String(e);case"number":return String(e);case"bigint":return String(e)+"n";default:return typeof e}}function it(e){return`ReflectMessage (${e.typeName})`}function rt(e){switch(e.listKind){case"message":return`ReflectList (${e.message.toString()})`;case"enum":return`ReflectList (${e.enum.toString()})`;case"scalar":return`ReflectList (${c[e.scalar]})`}}function ct(e){switch(e.mapKind){case"message":return`ReflectMap (${c[e.mapKey]}, ${e.message.toString()})`;case"enum":return`ReflectMap (${c[e.mapKey]}, ${e.enum.toString()})`;case"scalar":return`ReflectMap (${c[e.mapKey]}, ${c[e.scalar]})`}}function ls(e){switch(e){case c.STRING:return"string";case c.BOOL:return"boolean";case c.INT64:case c.SINT64:case c.SFIXED64:return"bigint (int64)";case c.UINT64:case c.FIXED64:return"bigint (uint64)";case c.BYTES:return"Uint8Array";case c.DOUBLE:return"number (float64)";case c.FLOAT:return"number (float32)";case c.FIXED32:case c.UINT32:return"number (uint32)";case c.INT32:case c.SFIXED32:case c.SINT32:return"number (int32)"}}function X(e,n,t=!0){return new Ce(e,n,t)}var Ce=class{get sortedFields(){var n;return(n=this._sortedFields)!==null&&n!==void 0?n:this._sortedFields=this.desc.fields.concat().sort((t,o)=>t.number-o.number)}constructor(n,t,o=!0){this.lists=new Map,this.maps=new Map,this.check=o,this.desc=n,this.message=this[Y]=t??B(n),this.fields=n.fields,this.oneofs=n.oneofs,this.members=n.members}findNumber(n){return this._fieldsByNumber||(this._fieldsByNumber=new Map(this.desc.fields.map(t=>[t.number,t]))),this._fieldsByNumber.get(n)}oneofCase(n){return ce(this.message,n),Ge(this.message,n)}isSet(n){return ce(this.message,n),On(this.message,n)}clear(n){ce(this.message,n),jn(this.message,n)}get(n){ce(this.message,n);let t=he(this.message,n);switch(n.fieldKind){case"list":let o=this.lists.get(n);return(!o||o[Y]!==t)&&this.lists.set(n,o=new gn(n,t,this.check)),o;case"map":let s=this.maps.get(n);return(!s||s[Y]!==t)&&this.maps.set(n,s=new mn(n,t,this.check)),s;case"message":return pn(n,t,this.check);case"scalar":return t===void 0?F(n.scalar,!1):In(n,t);case"enum":return t??n.enum.values[0].number}}set(n,t){if(ce(this.message,n),this.check){let s=K(n,t);if(s)throw s}let o;n.fieldKind=="message"?o=bn(n,t):ae(t)||se(t)?o=t[Y]:o=yn(n,t),fe(this.message,n,o)}getUnknown(){return this.message.$unknown}setUnknown(n){this.message.$unknown=n}};function ce(e,n){if(n.parent.typeName!==e.$typeName)throw new C(n,`cannot use ${n.toString()} with message ${e.$typeName}`,"ForeignFieldError")}var gn=class{field(){return this._field}get size(){return this._arr.length}constructor(n,t,o){this._field=n,this._arr=this[Y]=t,this.check=o}get(n){let t=this._arr[n];return t===void 0?void 0:dn(this._field,t,this.check)}set(n,t){if(n<0||n>=this._arr.length)throw new C(this._field,`list item #${n+1}: out of range`);if(this.check){let o=cn(this._field,n,t);if(o)throw o}this._arr[n]=lt(this._field,t)}add(n){if(this.check){let t=cn(this._field,this._arr.length,n);if(t)throw t}this._arr.push(lt(this._field,n))}clear(){this._arr.splice(0,this._arr.length)}[Symbol.iterator](){return this.values()}keys(){return this._arr.keys()}*values(){for(let n of this._arr)yield dn(this._field,n,this.check)}*entries(){for(let n=0;n<this._arr.length;n++)yield[n,dn(this._field,this._arr[n],this.check)]}};var mn=class{constructor(n,t,o=!0){this.obj=this[Y]=t??{},this.check=o,this._field=n}field(){return this._field}set(n,t){if(this.check){let o=st(this._field,n,t);if(o)throw o}return this.obj[Ve(n)]=ds(this._field,t),this}delete(n){let t=Ve(n),o=Object.prototype.hasOwnProperty.call(this.obj,t);return o&&delete this.obj[t],o}clear(){for(let n of Object.keys(this.obj))delete this.obj[n]}get(n){let t=this.obj[Ve(n)];return t!==void 0&&(t=un(this._field,t,this.check)),t}has(n){return Object.prototype.hasOwnProperty.call(this.obj,Ve(n))}*keys(){for(let n of Object.keys(this.obj))yield dt(n,this._field.mapKey)}*entries(){for(let n of Object.entries(this.obj))yield[dt(n[0],this._field.mapKey),un(this._field,n[1],this.check)]}[Symbol.iterator](){return this.entries()}get size(){return Object.keys(this.obj).length}*values(){for(let n of Object.values(this.obj))yield un(this._field,n,this.check)}forEach(n,t){for(let o of this.entries())n.call(t,o[1],o[0],this)}};function bn(e,n){return ie(n)?$n(n.message)&&!e.oneof&&e.fieldKind=="message"?n.message.value:n.desc.typeName=="google.protobuf.Struct"&&e.parent.typeName!="google.protobuf.Value"?gt(n.message):n.message:n}function pn(e,n,t){return n!==void 0&&(H(e.message)&&!e.oneof&&e.fieldKind=="message"?n={$typeName:e.message.typeName,value:In(e.message.fields[0],n)}:e.message.typeName=="google.protobuf.Struct"&&e.parent.typeName!="google.protobuf.Value"&&M(n)&&(n=ut(n))),new Ce(e.message,n,t)}function lt(e,n){return e.listKind=="message"?bn(e,n):yn(e,n)}function dn(e,n,t){return e.listKind=="message"?pn(e,n,t):In(e,n)}function ds(e,n){return e.mapKind=="message"?bn(e,n):yn(e,n)}function un(e,n,t){return e.mapKind=="message"?pn(e,n,t):n}function Ve(e){return typeof e=="string"||typeof e=="number"?e:String(e)}function dt(e,n){switch(n){case c.STRING:return e;case c.INT32:case c.FIXED32:case c.UINT32:case c.SFIXED32:case c.SINT32:{let t=Number.parseInt(e);if(Number.isFinite(t))return t;break}case c.BOOL:switch(e){case"true":return!0;case"false":return!1}break;case c.UINT64:case c.FIXED64:try{return p.uParse(e)}catch{}break;default:try{return p.parse(e)}catch{}break}return e}function In(e,n){switch(e.scalar){case c.INT64:case c.SFIXED64:case c.SINT64:"longAsString"in e&&e.longAsString&&typeof n=="string"&&(n=p.parse(n));break;case c.FIXED64:case c.UINT64:"longAsString"in e&&e.longAsString&&typeof n=="string"&&(n=p.uParse(n));break}return n}function yn(e,n){switch(e.scalar){case c.INT64:case c.SFIXED64:case c.SINT64:"longAsString"in e&&e.longAsString?n=String(n):(typeof n=="string"||typeof n=="number")&&(n=p.parse(n));break;case c.FIXED64:case c.UINT64:"longAsString"in e&&e.longAsString?n=String(n):(typeof n=="string"||typeof n=="number")&&(n=p.uParse(n));break}return n}function ut(e){let n={$typeName:"google.protobuf.Struct",fields:{}};if(M(e))for(let[t,o]of Object.entries(e))n.fields[t]=bt(o);return n}function gt(e){let n={};for(let[t,o]of Object.entries(e.fields))n[t]=mt(o);return n}function mt(e){switch(e.kind.case){case"structValue":return gt(e.kind.value);case"listValue":return e.kind.value.values.map(mt);case"nullValue":case void 0:return null;default:return e.kind.value}}function bt(e){let n={$typeName:"google.protobuf.Value",kind:{case:void 0}};switch(typeof e){case"number":n.kind={case:"numberValue",value:e};break;case"string":n.kind={case:"stringValue",value:e};break;case"boolean":n.kind={case:"boolValue",value:e};break;case"object":if(e===null)n.kind={case:"nullValue",value:0};else if(Array.isArray(e)){let t={$typeName:"google.protobuf.ListValue",values:[]};if(Array.isArray(e))for(let o of e)t.values.push(bt(o));n.kind={case:"listValue",value:t}}else n.kind={case:"structValue",value:ut(e)};break}return n}function Se(e){let n=us(),t=e.length*3/4;e[e.length-2]=="="?t-=2:e[e.length-1]=="="&&(t-=1);let o=new Uint8Array(t),s=0,a=0,i,r=0;for(let l=0;l<e.length;l++){if(i=n[e.charCodeAt(l)],i===void 0)switch(e[l]){case"=":a=0;case`
|
|
3
|
+
`:case"\r":case" ":case" ":continue;default:throw Error("invalid base64 string")}switch(a){case 0:r=i,a=1;break;case 1:o[s++]=r<<2|(i&48)>>4,r=i,a=2;break;case 2:o[s++]=(r&15)<<4|(i&60)>>2,r=i,a=3;break;case 3:o[s++]=(r&3)<<6|i,a=0;break}}if(a==1)throw Error("invalid base64 string");return o.subarray(0,s)}function It(e,n="std"){let t=yt(n),o=n=="std",s="",a=0,i,r=0;for(let l=0;l<e.length;l++)switch(i=e[l],a){case 0:s+=t[i>>2],r=(i&3)<<4,a=1;break;case 1:s+=t[r|i>>4],r=(i&15)<<2,a=2;break;case 2:s+=t[r|i>>6],s+=t[i&63],a=0;break}return a&&(s+=t[r],o&&(s+="=",a==1&&(s+="="))),s}var Xe,pt,_;function yt(e){return Xe||(Xe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),pt=Xe.slice(0,-2).concat("-","_")),e=="url"?pt:Xe}function us(){if(!_){_=[];let e=yt("std");for(let n=0;n<e.length;n++)_[e[n].charCodeAt(0)]=n;_[45]=e.indexOf("+"),_[95]=e.indexOf("/")}return _}function U(e){let n=!1,t=[];for(let o=0;o<e.length;o++){let s=e.charAt(o);switch(s){case"_":n=!0;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":t.push(s),n=!1;break;default:n&&(n=!1,s=s.toUpperCase()),t.push(s);break}}return t.join("")}var gs=new Set(["constructor","toString","toJSON","valueOf"]);function O(e){return gs.has(e)?e+"$":e}function le(e){for(let n of e.field)D(n,"jsonName")||(n.jsonName=U(n.name));e.nestedType.forEach(le)}function Gt(e,n){let t=e.values.find(o=>o.name===n);if(!t)throw new Error(`cannot parse ${e} default value: ${n}`);return t.number}function ht(e,n){switch(e){case c.STRING:return n;case c.BYTES:{let t=ms(n);if(t===!1)throw new Error(`cannot parse ${c[e]} default value: ${n}`);return t}case c.INT64:case c.SFIXED64:case c.SINT64:return p.parse(n);case c.UINT64:case c.FIXED64:return p.uParse(n);case c.DOUBLE:case c.FLOAT:switch(n){case"inf":return Number.POSITIVE_INFINITY;case"-inf":return Number.NEGATIVE_INFINITY;case"nan":return Number.NaN;default:return parseFloat(n)}case c.BOOL:return n==="true";case c.INT32:case c.UINT32:case c.SINT32:case c.FIXED32:case c.SFIXED32:return parseInt(n,10)}}function ms(e){let n=[],t={tail:e,c:"",next(){return this.tail.length==0?!1:(this.c=this.tail[0],this.tail=this.tail.substring(1),!0)},take(o){if(this.tail.length>=o){let s=this.tail.substring(0,o);return this.tail=this.tail.substring(o),s}return!1}};for(;t.next();)switch(t.c){case"\\":if(t.next())switch(t.c){case"\\":n.push(t.c.charCodeAt(0));break;case"b":n.push(8);break;case"f":n.push(12);break;case"n":n.push(10);break;case"r":n.push(13);break;case"t":n.push(9);break;case"v":n.push(11);break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":{let o=t.c,s=t.take(2);if(s===!1)return!1;let a=parseInt(o+s,8);if(isNaN(a))return!1;n.push(a);break}case"x":{let o=t.c,s=t.take(2);if(s===!1)return!1;let a=parseInt(o+s,16);if(isNaN(a))return!1;n.push(a);break}case"u":{let o=t.c,s=t.take(4);if(s===!1)return!1;let a=parseInt(o+s,16);if(isNaN(a))return!1;let i=new Uint8Array(4);new DataView(i.buffer).setInt32(0,a,!0),n.push(i[0],i[1],i[2],i[3]);break}case"U":{let o=t.c,s=t.take(8);if(s===!1)return!1;let a=p.uEnc(o+s),i=new Uint8Array(8),r=new DataView(i.buffer);r.setInt32(0,a.lo,!0),r.setInt32(4,a.hi,!0),n.push(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]);break}}break;default:n.push(t.c.charCodeAt(0))}return new Uint8Array(n)}function*Be(e){switch(e.kind){case"file":for(let n of e.messages)yield n,yield*Be(n);yield*e.enums,yield*e.services,yield*e.extensions;break;case"message":for(let n of e.nestedMessages)yield n,yield*Be(n);yield*e.nestedEnums,yield*e.nestedExtensions;break}}function We(...e){let n=bs();if(!e.length)return n;if("$typeName"in e[0]&&e[0].$typeName=="google.protobuf.FileDescriptorSet"){for(let o of e[0].file)At(o,n);return n}if("$typeName"in e[0]){let i=function(r){let l=[];for(let d of r.dependency){if(n.getFile(d)!=null||a.has(d))continue;let u=s(d);if(!u)throw new Error(`Unable to resolve ${d}, imported by ${r.name}`);"kind"in u?n.addFile(u,!1,!0):(a.add(u.name),l.push(u))}return l.concat(...l.map(i))};var t=i;let o=e[0],s=e[1],a=new Set;for(let r of[o,...i(o)].reverse())At(r,n)}else for(let o of e)for(let s of o.files)n.addFile(s);return n}function bs(){let e=new Map,n=new Map,t=new Map;return{kind:"registry",types:e,extendees:n,[Symbol.iterator](){return e.values()},get files(){return t.values()},addFile(o,s,a){if(t.set(o.proto.name,o),!s)for(let i of Be(o))this.add(i);if(a)for(let i of o.dependencies)this.addFile(i,s,a)},add(o){if(o.kind=="extension"){let s=n.get(o.extendee.typeName);s||n.set(o.extendee.typeName,s=new Map),s.set(o.number,o)}e.set(o.typeName,o)},get(o){return e.get(o)},getFile(o){return t.get(o)},getMessage(o){let s=e.get(o);return s?.kind=="message"?s:void 0},getEnum(o){let s=e.get(o);return s?.kind=="enum"?s:void 0},getExtension(o){let s=e.get(o);return s?.kind=="extension"?s:void 0},getExtensionFor(o,s){var a;return(a=n.get(o.typeName))===null||a===void 0?void 0:a.get(s)},getService(o){let s=e.get(o);return s?.kind=="service"?s:void 0}}}var ps=998,Is=999,ys=9,Je=10,de=11,Gs=12,ft=14,An=3,hs=2,Zt=1,fs=0,Gn=1,Zs=2,As=3,Vs=1,Cs=2,Xs=1;var Ct={998:{fieldPresence:1,enumType:2,repeatedFieldEncoding:2,utf8Validation:3,messageEncoding:1,jsonFormat:2},999:{fieldPresence:2,enumType:1,repeatedFieldEncoding:1,utf8Validation:2,messageEncoding:1,jsonFormat:1},1e3:{fieldPresence:1,enumType:1,repeatedFieldEncoding:1,utf8Validation:2,messageEncoding:1,jsonFormat:1}};function At(e,n){var t,o;let s={kind:"file",proto:e,deprecated:(o=(t=e.options)===null||t===void 0?void 0:t.deprecated)!==null&&o!==void 0?o:!1,edition:Ws(e),name:e.name.replace(/\.proto$/,""),dependencies:xs(e,n),enums:[],messages:[],extensions:[],services:[],toString(){return`file ${e.name}`}},a=new Map,i={get(r){return a.get(r)},add(r){var l;N(((l=r.proto.options)===null||l===void 0?void 0:l.mapEntry)===!0),a.set(r.typeName,r)}};for(let r of e.enumType)Xt(r,s,void 0,n);for(let r of e.messageType)St(r,s,void 0,n,i);for(let r of e.service)Ss(r,s,n);hn(s,n);for(let r of a.values())fn(r,n,i);for(let r of s.messages)fn(r,n,i),hn(r,n);n.addFile(s,!0)}function hn(e,n){switch(e.kind){case"file":for(let t of e.proto.extension){let o=Zn(t,e,n);e.extensions.push(o),n.add(o)}break;case"message":for(let t of e.proto.extension){let o=Zn(t,e,n);e.nestedExtensions.push(o),n.add(o)}for(let t of e.nestedMessages)hn(t,n);break}}function fn(e,n,t){let o=e.proto.oneofDecl.map(a=>Js(a,e)),s=new Set;for(let a of e.proto.field){let i=Es(a,o),r=Zn(a,e,n,i,t);e.fields.push(r),e.field[r.localName]=r,i===void 0?e.members.push(r):(i.fields.push(r),s.has(i)||(s.add(i),e.members.push(i)))}for(let a of o.filter(i=>s.has(i)))e.oneofs.push(a);for(let a of e.nestedMessages)fn(a,n,t)}function Xt(e,n,t,o){var s,a,i;let r=Rs(e.name,e.value),l={kind:"enum",proto:e,deprecated:(a=(s=e.options)===null||s===void 0?void 0:s.deprecated)!==null&&a!==void 0?a:!1,file:n,parent:t,open:!0,name:e.name,typeName:xe(e,t,n),value:{},values:[],sharedPrefix:r,toString(){return`enum ${this.typeName}`}};l.open=Hs(l),o.add(l),e.value.forEach(d=>{var u,I;let W=d.name;l.values.push(l.value[d.number]={kind:"enum_value",proto:d,deprecated:(I=(u=d.options)===null||u===void 0?void 0:u.deprecated)!==null&&I!==void 0?I:!1,parent:l,name:W,localName:O(r==null?W:W.substring(r.length)),number:d.number,toString(){return`enum value ${l.typeName}.${W}`}})}),((i=t?.nestedEnums)!==null&&i!==void 0?i:n.enums).push(l)}function St(e,n,t,o,s){var a,i,r,l;let d={kind:"message",proto:e,deprecated:(i=(a=e.options)===null||a===void 0?void 0:a.deprecated)!==null&&i!==void 0?i:!1,file:n,parent:t,name:e.name,typeName:xe(e,t,n),fields:[],field:{},oneofs:[],members:[],nestedEnums:[],nestedMessages:[],nestedExtensions:[],toString(){return`message ${this.typeName}`}};((r=e.options)===null||r===void 0?void 0:r.mapEntry)===!0?s.add(d):(((l=t?.nestedMessages)!==null&&l!==void 0?l:n.messages).push(d),o.add(d));for(let u of e.enumType)Xt(u,n,d,o);for(let u of e.nestedType)St(u,n,d,o,s)}function Ss(e,n,t){var o,s;let a={kind:"service",proto:e,deprecated:(s=(o=e.options)===null||o===void 0?void 0:o.deprecated)!==null&&s!==void 0?s:!1,file:n,name:e.name,typeName:xe(e,void 0,n),methods:[],method:{},toString(){return`service ${this.typeName}`}};n.services.push(a),t.add(a);for(let i of e.method){let r=Bs(i,a,t);a.methods.push(r),a.method[r.localName]=r}}function Bs(e,n,t){var o,s,a,i;let r;e.clientStreaming&&e.serverStreaming?r="bidi_streaming":e.clientStreaming?r="client_streaming":e.serverStreaming?r="server_streaming":r="unary";let l=t.getMessage(L(e.inputType)),d=t.getMessage(L(e.outputType));N(l,`invalid MethodDescriptorProto: input_type ${e.inputType} not found`),N(d,`invalid MethodDescriptorProto: output_type ${e.inputType} not found`);let u=e.name;return{kind:"rpc",proto:e,deprecated:(s=(o=e.options)===null||o===void 0?void 0:o.deprecated)!==null&&s!==void 0?s:!1,parent:n,name:u,localName:O(u.length?O(u[0].toLowerCase()+u.substring(1)):u),methodKind:r,input:l,output:d,idempotency:(i=(a=e.options)===null||a===void 0?void 0:a.idempotencyLevel)!==null&&i!==void 0?i:fs,toString(){return`rpc ${n.typeName}.${u}`}}}function Js(e,n){return{kind:"oneof",proto:e,deprecated:!1,parent:n,fields:[],name:e.name,localName:O(U(e.name)),toString(){return`oneof ${n.typeName}.${this.name}`}}}function Zn(e,n,t,o,s){var a,i,r;let l=s===void 0,d={kind:"field",proto:e,deprecated:(i=(a=e.options)===null||a===void 0?void 0:a.deprecated)!==null&&i!==void 0?i:!1,name:e.name,number:e.number,scalar:void 0,message:void 0,enum:void 0,presence:Ys(e,o,l,n),listKind:void 0,mapKind:void 0,mapKey:void 0,delimitedEncoding:void 0,packed:void 0,longAsString:!1,getDefaultValue:void 0};if(l){let x=n.kind=="file"?n:n.file,v=n.kind=="file"?void 0:n,G=xe(e,v,x);d.kind="extension",d.file=x,d.parent=v,d.oneof=void 0,d.typeName=G,d.jsonName=`[${G}]`,d.toString=()=>`extension ${G}`;let R=t.getMessage(L(e.extendee));N(R,`invalid FieldDescriptorProto: extendee ${e.extendee} not found`),d.extendee=R}else{let x=n;N(x.kind=="message"),d.parent=x,d.oneof=o,d.localName=o?U(e.name):O(U(e.name)),d.jsonName=e.jsonName,d.toString=()=>`field ${x.typeName}.${e.name}`}let u=e.label,I=e.type,W=(r=e.options)===null||r===void 0?void 0:r.jstype;if(u===An){let x=I==de?s?.get(L(e.typeName)):void 0;if(x){d.fieldKind="map";let{key:v,value:G}=Ms(x);return d.mapKey=v.scalar,d.mapKind=G.fieldKind,d.message=G.message,d.delimitedEncoding=!1,d.enum=G.enum,d.scalar=G.scalar,d}switch(d.fieldKind="list",I){case de:case Je:d.listKind="message",d.message=t.getMessage(L(e.typeName)),N(d.message),d.delimitedEncoding=Vt(e,n);break;case ft:d.listKind="enum",d.enum=t.getEnum(L(e.typeName)),N(d.enum);break;default:d.listKind="scalar",d.scalar=I,d.longAsString=W==Zt;break}return d.packed=Ns(e,n),d}switch(I){case de:case Je:d.fieldKind="message",d.message=t.getMessage(L(e.typeName)),N(d.message,`invalid FieldDescriptorProto: type_name ${e.typeName} not found`),d.delimitedEncoding=Vt(e,n),d.getDefaultValue=()=>{};break;case ft:{let x=t.getEnum(L(e.typeName));N(x!==void 0,`invalid FieldDescriptorProto: type_name ${e.typeName} not found`),d.fieldKind="enum",d.enum=t.getEnum(L(e.typeName)),d.getDefaultValue=()=>D(e,"defaultValue")?Gt(x,e.defaultValue):void 0;break}default:{d.fieldKind="scalar",d.scalar=I,d.longAsString=W==Zt,d.getDefaultValue=()=>D(e,"defaultValue")?ht(I,e.defaultValue):void 0;break}}return d}function Ws(e){switch(e.syntax){case"":case"proto2":return ps;case"proto3":return Is;case"editions":if(e.edition in Ct)return e.edition;throw new Error(`${e.name}: unsupported edition`);default:throw new Error(`${e.name}: unsupported syntax "${e.syntax}"`)}}function xs(e,n){return e.dependency.map(t=>{let o=n.getFile(t);if(!o)throw new Error(`Cannot find ${t}, imported by ${e.name}`);return o})}function Rs(e,n){let t=Fs(e)+"_";for(let o of n){if(!o.name.toLowerCase().startsWith(t))return;let s=o.name.substring(t.length);if(s.length==0||/^\d/.test(s))return}return t}function Fs(e){return(e.substring(0,1)+e.substring(1).replace(/[A-Z]/g,n=>"_"+n)).toLowerCase()}function xe(e,n,t){let o;return n?o=`${n.typeName}.${e.name}`:t.proto.package.length>0?o=`${t.proto.package}.${e.name}`:o=`${e.name}`,o}function L(e){return e.startsWith(".")?e.substring(1):e}function Es(e,n){if(!D(e,"oneofIndex")||e.proto3Optional)return;let t=n[e.oneofIndex];return N(t,`invalid FieldDescriptorProto: oneof #${e.oneofIndex} for field #${e.number} not found`),t}function Ys(e,n,t,o){return e.label==hs?As:e.label==An?Zs:n||e.proto3Optional||e.type==de||t?Gn:j("fieldPresence",{proto:e,parent:o})}function Ns(e,n){if(e.label!=An)return!1;switch(e.type){case ys:case Gs:case Je:case de:return!1}let t=e.options;return t&&D(t,"packed")?t.packed:Vs==j("repeatedFieldEncoding",{proto:e,parent:n})}function Ms(e){let n=e.fields.find(o=>o.number===1),t=e.fields.find(o=>o.number===2);return N(n&&n.fieldKind=="scalar"&&n.scalar!=c.BYTES&&n.scalar!=c.FLOAT&&n.scalar!=c.DOUBLE&&t&&t.fieldKind!="list"&&t.fieldKind!="map"),{key:n,value:t}}function Hs(e){var n;return Xs==j("enumType",{proto:e.proto,parent:(n=e.parent)!==null&&n!==void 0?n:e.file})}function Vt(e,n){return e.type==Je?!0:Cs==j("messageEncoding",{proto:e,parent:n})}function j(e,n){var t,o;let s=(t=n.proto.options)===null||t===void 0?void 0:t.features;if(s){let a=s[e];if(a!=0)return a}if("kind"in n){if(n.kind=="message")return j(e,(o=n.parent)!==null&&o!==void 0?o:n.file);let a=Ct[n.edition];if(!a)throw new Error(`feature default for edition ${n.edition} not found`);return a[e]}return j(e,n.parent)}function N(e,n){if(!e)throw new Error(n)}function Bt(e){let n=zs(e);return n.messageType.forEach(le),We(n,()=>{}).getFile(n.name)}function zs(e){return Object.assign(Object.create({syntax:"",edition:0}),Object.assign(Object.assign({$typeName:"google.protobuf.FileDescriptorProto",dependency:[],publicDependency:[],weakDependency:[],service:[],extension:[]},e),{messageType:e.messageType.map(Jt),enumType:e.enumType.map(Wt)}))}function Jt(e){var n,t,o,s,a,i,r,l;return{$typeName:"google.protobuf.DescriptorProto",name:e.name,field:(t=(n=e.field)===null||n===void 0?void 0:n.map(Ks))!==null&&t!==void 0?t:[],extension:[],nestedType:(s=(o=e.nestedType)===null||o===void 0?void 0:o.map(Jt))!==null&&s!==void 0?s:[],enumType:(i=(a=e.enumType)===null||a===void 0?void 0:a.map(Wt))!==null&&i!==void 0?i:[],extensionRange:(l=(r=e.extensionRange)===null||r===void 0?void 0:r.map(d=>Object.assign({$typeName:"google.protobuf.DescriptorProto.ExtensionRange"},d)))!==null&&l!==void 0?l:[],oneofDecl:[],reservedRange:[],reservedName:[]}}function Ks(e){return Object.assign(Object.create({label:1,typeName:"",extendee:"",defaultValue:"",oneofIndex:0,jsonName:"",proto3Optional:!1}),Object.assign(Object.assign({$typeName:"google.protobuf.FieldDescriptorProto"},e),{options:e.options?Ls(e.options):void 0}))}function Ls(e){var n,t,o;return Object.assign(Object.create({ctype:0,packed:!1,jstype:0,lazy:!1,unverifiedLazy:!1,deprecated:!1,weak:!1,debugRedact:!1,retention:0}),Object.assign(Object.assign({$typeName:"google.protobuf.FieldOptions"},e),{targets:(n=e.targets)!==null&&n!==void 0?n:[],editionDefaults:(o=(t=e.editionDefaults)===null||t===void 0?void 0:t.map(a=>Object.assign({$typeName:"google.protobuf.FieldOptions.EditionDefault"},a)))!==null&&o!==void 0?o:[],uninterpretedOption:[]}))}function Wt(e){return{$typeName:"google.protobuf.EnumDescriptorProto",name:e.name,reservedName:[],reservedRange:[],value:e.value.map(n=>Object.assign({$typeName:"google.protobuf.EnumValueDescriptorProto"},n))}}function J(e,n,...t){return t.reduce((o,s)=>o.nestedMessages[s],e.messages[n])}var T=Bt({name:"google/protobuf/descriptor.proto",package:"google.protobuf",messageType:[{name:"FileDescriptorSet",field:[{name:"file",number:1,type:11,label:3,typeName:".google.protobuf.FileDescriptorProto"}]},{name:"FileDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"package",number:2,type:9,label:1},{name:"dependency",number:3,type:9,label:3},{name:"public_dependency",number:10,type:5,label:3},{name:"weak_dependency",number:11,type:5,label:3},{name:"message_type",number:4,type:11,label:3,typeName:".google.protobuf.DescriptorProto"},{name:"enum_type",number:5,type:11,label:3,typeName:".google.protobuf.EnumDescriptorProto"},{name:"service",number:6,type:11,label:3,typeName:".google.protobuf.ServiceDescriptorProto"},{name:"extension",number:7,type:11,label:3,typeName:".google.protobuf.FieldDescriptorProto"},{name:"options",number:8,type:11,label:1,typeName:".google.protobuf.FileOptions"},{name:"source_code_info",number:9,type:11,label:1,typeName:".google.protobuf.SourceCodeInfo"},{name:"syntax",number:12,type:9,label:1},{name:"edition",number:14,type:14,label:1,typeName:".google.protobuf.Edition"}]},{name:"DescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"field",number:2,type:11,label:3,typeName:".google.protobuf.FieldDescriptorProto"},{name:"extension",number:6,type:11,label:3,typeName:".google.protobuf.FieldDescriptorProto"},{name:"nested_type",number:3,type:11,label:3,typeName:".google.protobuf.DescriptorProto"},{name:"enum_type",number:4,type:11,label:3,typeName:".google.protobuf.EnumDescriptorProto"},{name:"extension_range",number:5,type:11,label:3,typeName:".google.protobuf.DescriptorProto.ExtensionRange"},{name:"oneof_decl",number:8,type:11,label:3,typeName:".google.protobuf.OneofDescriptorProto"},{name:"options",number:7,type:11,label:1,typeName:".google.protobuf.MessageOptions"},{name:"reserved_range",number:9,type:11,label:3,typeName:".google.protobuf.DescriptorProto.ReservedRange"},{name:"reserved_name",number:10,type:9,label:3}],nestedType:[{name:"ExtensionRange",field:[{name:"start",number:1,type:5,label:1},{name:"end",number:2,type:5,label:1},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.ExtensionRangeOptions"}]},{name:"ReservedRange",field:[{name:"start",number:1,type:5,label:1},{name:"end",number:2,type:5,label:1}]}]},{name:"ExtensionRangeOptions",field:[{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"},{name:"declaration",number:2,type:11,label:3,typeName:".google.protobuf.ExtensionRangeOptions.Declaration",options:{retention:2}},{name:"features",number:50,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"verification",number:3,type:14,label:1,typeName:".google.protobuf.ExtensionRangeOptions.VerificationState",defaultValue:"UNVERIFIED",options:{retention:2}}],nestedType:[{name:"Declaration",field:[{name:"number",number:1,type:5,label:1},{name:"full_name",number:2,type:9,label:1},{name:"type",number:3,type:9,label:1},{name:"reserved",number:5,type:8,label:1},{name:"repeated",number:6,type:8,label:1}]}],enumType:[{name:"VerificationState",value:[{name:"DECLARATION",number:0},{name:"UNVERIFIED",number:1}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"FieldDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"number",number:3,type:5,label:1},{name:"label",number:4,type:14,label:1,typeName:".google.protobuf.FieldDescriptorProto.Label"},{name:"type",number:5,type:14,label:1,typeName:".google.protobuf.FieldDescriptorProto.Type"},{name:"type_name",number:6,type:9,label:1},{name:"extendee",number:2,type:9,label:1},{name:"default_value",number:7,type:9,label:1},{name:"oneof_index",number:9,type:5,label:1},{name:"json_name",number:10,type:9,label:1},{name:"options",number:8,type:11,label:1,typeName:".google.protobuf.FieldOptions"},{name:"proto3_optional",number:17,type:8,label:1}],enumType:[{name:"Type",value:[{name:"TYPE_DOUBLE",number:1},{name:"TYPE_FLOAT",number:2},{name:"TYPE_INT64",number:3},{name:"TYPE_UINT64",number:4},{name:"TYPE_INT32",number:5},{name:"TYPE_FIXED64",number:6},{name:"TYPE_FIXED32",number:7},{name:"TYPE_BOOL",number:8},{name:"TYPE_STRING",number:9},{name:"TYPE_GROUP",number:10},{name:"TYPE_MESSAGE",number:11},{name:"TYPE_BYTES",number:12},{name:"TYPE_UINT32",number:13},{name:"TYPE_ENUM",number:14},{name:"TYPE_SFIXED32",number:15},{name:"TYPE_SFIXED64",number:16},{name:"TYPE_SINT32",number:17},{name:"TYPE_SINT64",number:18}]},{name:"Label",value:[{name:"LABEL_OPTIONAL",number:1},{name:"LABEL_REPEATED",number:3},{name:"LABEL_REQUIRED",number:2}]}]},{name:"OneofDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"options",number:2,type:11,label:1,typeName:".google.protobuf.OneofOptions"}]},{name:"EnumDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"value",number:2,type:11,label:3,typeName:".google.protobuf.EnumValueDescriptorProto"},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.EnumOptions"},{name:"reserved_range",number:4,type:11,label:3,typeName:".google.protobuf.EnumDescriptorProto.EnumReservedRange"},{name:"reserved_name",number:5,type:9,label:3}],nestedType:[{name:"EnumReservedRange",field:[{name:"start",number:1,type:5,label:1},{name:"end",number:2,type:5,label:1}]}]},{name:"EnumValueDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"number",number:2,type:5,label:1},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.EnumValueOptions"}]},{name:"ServiceDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"method",number:2,type:11,label:3,typeName:".google.protobuf.MethodDescriptorProto"},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.ServiceOptions"}]},{name:"MethodDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"input_type",number:2,type:9,label:1},{name:"output_type",number:3,type:9,label:1},{name:"options",number:4,type:11,label:1,typeName:".google.protobuf.MethodOptions"},{name:"client_streaming",number:5,type:8,label:1,defaultValue:"false"},{name:"server_streaming",number:6,type:8,label:1,defaultValue:"false"}]},{name:"FileOptions",field:[{name:"java_package",number:1,type:9,label:1},{name:"java_outer_classname",number:8,type:9,label:1},{name:"java_multiple_files",number:10,type:8,label:1,defaultValue:"false"},{name:"java_generate_equals_and_hash",number:20,type:8,label:1,options:{deprecated:!0}},{name:"java_string_check_utf8",number:27,type:8,label:1,defaultValue:"false"},{name:"optimize_for",number:9,type:14,label:1,typeName:".google.protobuf.FileOptions.OptimizeMode",defaultValue:"SPEED"},{name:"go_package",number:11,type:9,label:1},{name:"cc_generic_services",number:16,type:8,label:1,defaultValue:"false"},{name:"java_generic_services",number:17,type:8,label:1,defaultValue:"false"},{name:"py_generic_services",number:18,type:8,label:1,defaultValue:"false"},{name:"deprecated",number:23,type:8,label:1,defaultValue:"false"},{name:"cc_enable_arenas",number:31,type:8,label:1,defaultValue:"true"},{name:"objc_class_prefix",number:36,type:9,label:1},{name:"csharp_namespace",number:37,type:9,label:1},{name:"swift_prefix",number:39,type:9,label:1},{name:"php_class_prefix",number:40,type:9,label:1},{name:"php_namespace",number:41,type:9,label:1},{name:"php_metadata_namespace",number:44,type:9,label:1},{name:"ruby_package",number:45,type:9,label:1},{name:"features",number:50,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],enumType:[{name:"OptimizeMode",value:[{name:"SPEED",number:1},{name:"CODE_SIZE",number:2},{name:"LITE_RUNTIME",number:3}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"MessageOptions",field:[{name:"message_set_wire_format",number:1,type:8,label:1,defaultValue:"false"},{name:"no_standard_descriptor_accessor",number:2,type:8,label:1,defaultValue:"false"},{name:"deprecated",number:3,type:8,label:1,defaultValue:"false"},{name:"map_entry",number:7,type:8,label:1},{name:"deprecated_legacy_json_field_conflicts",number:11,type:8,label:1,options:{deprecated:!0}},{name:"features",number:12,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"FieldOptions",field:[{name:"ctype",number:1,type:14,label:1,typeName:".google.protobuf.FieldOptions.CType",defaultValue:"STRING"},{name:"packed",number:2,type:8,label:1},{name:"jstype",number:6,type:14,label:1,typeName:".google.protobuf.FieldOptions.JSType",defaultValue:"JS_NORMAL"},{name:"lazy",number:5,type:8,label:1,defaultValue:"false"},{name:"unverified_lazy",number:15,type:8,label:1,defaultValue:"false"},{name:"deprecated",number:3,type:8,label:1,defaultValue:"false"},{name:"weak",number:10,type:8,label:1,defaultValue:"false"},{name:"debug_redact",number:16,type:8,label:1,defaultValue:"false"},{name:"retention",number:17,type:14,label:1,typeName:".google.protobuf.FieldOptions.OptionRetention"},{name:"targets",number:19,type:14,label:3,typeName:".google.protobuf.FieldOptions.OptionTargetType"},{name:"edition_defaults",number:20,type:11,label:3,typeName:".google.protobuf.FieldOptions.EditionDefault"},{name:"features",number:21,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"feature_support",number:22,type:11,label:1,typeName:".google.protobuf.FieldOptions.FeatureSupport"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],nestedType:[{name:"EditionDefault",field:[{name:"edition",number:3,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"value",number:2,type:9,label:1}]},{name:"FeatureSupport",field:[{name:"edition_introduced",number:1,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"edition_deprecated",number:2,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"deprecation_warning",number:3,type:9,label:1},{name:"edition_removed",number:4,type:14,label:1,typeName:".google.protobuf.Edition"}]}],enumType:[{name:"CType",value:[{name:"STRING",number:0},{name:"CORD",number:1},{name:"STRING_PIECE",number:2}]},{name:"JSType",value:[{name:"JS_NORMAL",number:0},{name:"JS_STRING",number:1},{name:"JS_NUMBER",number:2}]},{name:"OptionRetention",value:[{name:"RETENTION_UNKNOWN",number:0},{name:"RETENTION_RUNTIME",number:1},{name:"RETENTION_SOURCE",number:2}]},{name:"OptionTargetType",value:[{name:"TARGET_TYPE_UNKNOWN",number:0},{name:"TARGET_TYPE_FILE",number:1},{name:"TARGET_TYPE_EXTENSION_RANGE",number:2},{name:"TARGET_TYPE_MESSAGE",number:3},{name:"TARGET_TYPE_FIELD",number:4},{name:"TARGET_TYPE_ONEOF",number:5},{name:"TARGET_TYPE_ENUM",number:6},{name:"TARGET_TYPE_ENUM_ENTRY",number:7},{name:"TARGET_TYPE_SERVICE",number:8},{name:"TARGET_TYPE_METHOD",number:9}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"OneofOptions",field:[{name:"features",number:1,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"EnumOptions",field:[{name:"allow_alias",number:2,type:8,label:1},{name:"deprecated",number:3,type:8,label:1,defaultValue:"false"},{name:"deprecated_legacy_json_field_conflicts",number:6,type:8,label:1,options:{deprecated:!0}},{name:"features",number:7,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"EnumValueOptions",field:[{name:"deprecated",number:1,type:8,label:1,defaultValue:"false"},{name:"features",number:2,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"debug_redact",number:3,type:8,label:1,defaultValue:"false"},{name:"feature_support",number:4,type:11,label:1,typeName:".google.protobuf.FieldOptions.FeatureSupport"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"ServiceOptions",field:[{name:"features",number:34,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"deprecated",number:33,type:8,label:1,defaultValue:"false"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"MethodOptions",field:[{name:"deprecated",number:33,type:8,label:1,defaultValue:"false"},{name:"idempotency_level",number:34,type:14,label:1,typeName:".google.protobuf.MethodOptions.IdempotencyLevel",defaultValue:"IDEMPOTENCY_UNKNOWN"},{name:"features",number:35,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],enumType:[{name:"IdempotencyLevel",value:[{name:"IDEMPOTENCY_UNKNOWN",number:0},{name:"NO_SIDE_EFFECTS",number:1},{name:"IDEMPOTENT",number:2}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"UninterpretedOption",field:[{name:"name",number:2,type:11,label:3,typeName:".google.protobuf.UninterpretedOption.NamePart"},{name:"identifier_value",number:3,type:9,label:1},{name:"positive_int_value",number:4,type:4,label:1},{name:"negative_int_value",number:5,type:3,label:1},{name:"double_value",number:6,type:1,label:1},{name:"string_value",number:7,type:12,label:1},{name:"aggregate_value",number:8,type:9,label:1}],nestedType:[{name:"NamePart",field:[{name:"name_part",number:1,type:9,label:2},{name:"is_extension",number:2,type:8,label:2}]}]},{name:"FeatureSet",field:[{name:"field_presence",number:1,type:14,label:1,typeName:".google.protobuf.FeatureSet.FieldPresence",options:{retention:1,targets:[4,1],editionDefaults:[{value:"EXPLICIT",edition:900},{value:"IMPLICIT",edition:999},{value:"EXPLICIT",edition:1e3}]}},{name:"enum_type",number:2,type:14,label:1,typeName:".google.protobuf.FeatureSet.EnumType",options:{retention:1,targets:[6,1],editionDefaults:[{value:"CLOSED",edition:900},{value:"OPEN",edition:999}]}},{name:"repeated_field_encoding",number:3,type:14,label:1,typeName:".google.protobuf.FeatureSet.RepeatedFieldEncoding",options:{retention:1,targets:[4,1],editionDefaults:[{value:"EXPANDED",edition:900},{value:"PACKED",edition:999}]}},{name:"utf8_validation",number:4,type:14,label:1,typeName:".google.protobuf.FeatureSet.Utf8Validation",options:{retention:1,targets:[4,1],editionDefaults:[{value:"NONE",edition:900},{value:"VERIFY",edition:999}]}},{name:"message_encoding",number:5,type:14,label:1,typeName:".google.protobuf.FeatureSet.MessageEncoding",options:{retention:1,targets:[4,1],editionDefaults:[{value:"LENGTH_PREFIXED",edition:900}]}},{name:"json_format",number:6,type:14,label:1,typeName:".google.protobuf.FeatureSet.JsonFormat",options:{retention:1,targets:[3,6,1],editionDefaults:[{value:"LEGACY_BEST_EFFORT",edition:900},{value:"ALLOW",edition:999}]}}],enumType:[{name:"FieldPresence",value:[{name:"FIELD_PRESENCE_UNKNOWN",number:0},{name:"EXPLICIT",number:1},{name:"IMPLICIT",number:2},{name:"LEGACY_REQUIRED",number:3}]},{name:"EnumType",value:[{name:"ENUM_TYPE_UNKNOWN",number:0},{name:"OPEN",number:1},{name:"CLOSED",number:2}]},{name:"RepeatedFieldEncoding",value:[{name:"REPEATED_FIELD_ENCODING_UNKNOWN",number:0},{name:"PACKED",number:1},{name:"EXPANDED",number:2}]},{name:"Utf8Validation",value:[{name:"UTF8_VALIDATION_UNKNOWN",number:0},{name:"VERIFY",number:2},{name:"NONE",number:3}]},{name:"MessageEncoding",value:[{name:"MESSAGE_ENCODING_UNKNOWN",number:0},{name:"LENGTH_PREFIXED",number:1},{name:"DELIMITED",number:2}]},{name:"JsonFormat",value:[{name:"JSON_FORMAT_UNKNOWN",number:0},{name:"ALLOW",number:1},{name:"LEGACY_BEST_EFFORT",number:2}]}],extensionRange:[{start:1e3,end:9995},{start:9995,end:1e4},{start:1e4,end:10001}]},{name:"FeatureSetDefaults",field:[{name:"defaults",number:1,type:11,label:3,typeName:".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault"},{name:"minimum_edition",number:4,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"maximum_edition",number:5,type:14,label:1,typeName:".google.protobuf.Edition"}],nestedType:[{name:"FeatureSetEditionDefault",field:[{name:"edition",number:3,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"overridable_features",number:4,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"fixed_features",number:5,type:11,label:1,typeName:".google.protobuf.FeatureSet"}]}]},{name:"SourceCodeInfo",field:[{name:"location",number:1,type:11,label:3,typeName:".google.protobuf.SourceCodeInfo.Location"}],nestedType:[{name:"Location",field:[{name:"path",number:1,type:5,label:3,options:{packed:!0}},{name:"span",number:2,type:5,label:3,options:{packed:!0}},{name:"leading_comments",number:3,type:9,label:1},{name:"trailing_comments",number:4,type:9,label:1},{name:"leading_detached_comments",number:6,type:9,label:3}]}]},{name:"GeneratedCodeInfo",field:[{name:"annotation",number:1,type:11,label:3,typeName:".google.protobuf.GeneratedCodeInfo.Annotation"}],nestedType:[{name:"Annotation",field:[{name:"path",number:1,type:5,label:3,options:{packed:!0}},{name:"source_file",number:2,type:9,label:1},{name:"begin",number:3,type:5,label:1},{name:"end",number:4,type:5,label:1},{name:"semantic",number:5,type:14,label:1,typeName:".google.protobuf.GeneratedCodeInfo.Annotation.Semantic"}],enumType:[{name:"Semantic",value:[{name:"NONE",number:0},{name:"SET",number:1},{name:"ALIAS",number:2}]}]}]}],enumType:[{name:"Edition",value:[{name:"EDITION_UNKNOWN",number:0},{name:"EDITION_LEGACY",number:900},{name:"EDITION_PROTO2",number:998},{name:"EDITION_PROTO3",number:999},{name:"EDITION_2023",number:1e3},{name:"EDITION_2024",number:1001},{name:"EDITION_1_TEST_ONLY",number:1},{name:"EDITION_2_TEST_ONLY",number:2},{name:"EDITION_99997_TEST_ONLY",number:99997},{name:"EDITION_99998_TEST_ONLY",number:99998},{name:"EDITION_99999_TEST_ONLY",number:99999},{name:"EDITION_MAX",number:2147483647}]}]});var Tt=J(T,1);var xt;(function(e){e[e.DECLARATION=0]="DECLARATION",e[e.UNVERIFIED=1]="UNVERIFIED"})(xt||(xt={}));var Rt;(function(e){e[e.DOUBLE=1]="DOUBLE",e[e.FLOAT=2]="FLOAT",e[e.INT64=3]="INT64",e[e.UINT64=4]="UINT64",e[e.INT32=5]="INT32",e[e.FIXED64=6]="FIXED64",e[e.FIXED32=7]="FIXED32",e[e.BOOL=8]="BOOL",e[e.STRING=9]="STRING",e[e.GROUP=10]="GROUP",e[e.MESSAGE=11]="MESSAGE",e[e.BYTES=12]="BYTES",e[e.UINT32=13]="UINT32",e[e.ENUM=14]="ENUM",e[e.SFIXED32=15]="SFIXED32",e[e.SFIXED64=16]="SFIXED64",e[e.SINT32=17]="SINT32",e[e.SINT64=18]="SINT64"})(Rt||(Rt={}));var Ft;(function(e){e[e.OPTIONAL=1]="OPTIONAL",e[e.REPEATED=3]="REPEATED",e[e.REQUIRED=2]="REQUIRED"})(Ft||(Ft={}));var Et;(function(e){e[e.SPEED=1]="SPEED",e[e.CODE_SIZE=2]="CODE_SIZE",e[e.LITE_RUNTIME=3]="LITE_RUNTIME"})(Et||(Et={}));var Yt;(function(e){e[e.STRING=0]="STRING",e[e.CORD=1]="CORD",e[e.STRING_PIECE=2]="STRING_PIECE"})(Yt||(Yt={}));var Nt;(function(e){e[e.JS_NORMAL=0]="JS_NORMAL",e[e.JS_STRING=1]="JS_STRING",e[e.JS_NUMBER=2]="JS_NUMBER"})(Nt||(Nt={}));var Mt;(function(e){e[e.RETENTION_UNKNOWN=0]="RETENTION_UNKNOWN",e[e.RETENTION_RUNTIME=1]="RETENTION_RUNTIME",e[e.RETENTION_SOURCE=2]="RETENTION_SOURCE"})(Mt||(Mt={}));var Ht;(function(e){e[e.TARGET_TYPE_UNKNOWN=0]="TARGET_TYPE_UNKNOWN",e[e.TARGET_TYPE_FILE=1]="TARGET_TYPE_FILE",e[e.TARGET_TYPE_EXTENSION_RANGE=2]="TARGET_TYPE_EXTENSION_RANGE",e[e.TARGET_TYPE_MESSAGE=3]="TARGET_TYPE_MESSAGE",e[e.TARGET_TYPE_FIELD=4]="TARGET_TYPE_FIELD",e[e.TARGET_TYPE_ONEOF=5]="TARGET_TYPE_ONEOF",e[e.TARGET_TYPE_ENUM=6]="TARGET_TYPE_ENUM",e[e.TARGET_TYPE_ENUM_ENTRY=7]="TARGET_TYPE_ENUM_ENTRY",e[e.TARGET_TYPE_SERVICE=8]="TARGET_TYPE_SERVICE",e[e.TARGET_TYPE_METHOD=9]="TARGET_TYPE_METHOD"})(Ht||(Ht={}));var zt;(function(e){e[e.IDEMPOTENCY_UNKNOWN=0]="IDEMPOTENCY_UNKNOWN",e[e.NO_SIDE_EFFECTS=1]="NO_SIDE_EFFECTS",e[e.IDEMPOTENT=2]="IDEMPOTENT"})(zt||(zt={}));var Kt;(function(e){e[e.FIELD_PRESENCE_UNKNOWN=0]="FIELD_PRESENCE_UNKNOWN",e[e.EXPLICIT=1]="EXPLICIT",e[e.IMPLICIT=2]="IMPLICIT",e[e.LEGACY_REQUIRED=3]="LEGACY_REQUIRED"})(Kt||(Kt={}));var Lt;(function(e){e[e.ENUM_TYPE_UNKNOWN=0]="ENUM_TYPE_UNKNOWN",e[e.OPEN=1]="OPEN",e[e.CLOSED=2]="CLOSED"})(Lt||(Lt={}));var wt;(function(e){e[e.REPEATED_FIELD_ENCODING_UNKNOWN=0]="REPEATED_FIELD_ENCODING_UNKNOWN",e[e.PACKED=1]="PACKED",e[e.EXPANDED=2]="EXPANDED"})(wt||(wt={}));var vt;(function(e){e[e.UTF8_VALIDATION_UNKNOWN=0]="UTF8_VALIDATION_UNKNOWN",e[e.VERIFY=2]="VERIFY",e[e.NONE=3]="NONE"})(vt||(vt={}));var Ut;(function(e){e[e.MESSAGE_ENCODING_UNKNOWN=0]="MESSAGE_ENCODING_UNKNOWN",e[e.LENGTH_PREFIXED=1]="LENGTH_PREFIXED",e[e.DELIMITED=2]="DELIMITED"})(Ut||(Ut={}));var kt;(function(e){e[e.JSON_FORMAT_UNKNOWN=0]="JSON_FORMAT_UNKNOWN",e[e.ALLOW=1]="ALLOW",e[e.LEGACY_BEST_EFFORT=2]="LEGACY_BEST_EFFORT"})(kt||(kt={}));var Dt;(function(e){e[e.NONE=0]="NONE",e[e.SET=1]="SET",e[e.ALIAS=2]="ALIAS"})(Dt||(Dt={}));var Qt;(function(e){e[e.EDITION_UNKNOWN=0]="EDITION_UNKNOWN",e[e.EDITION_LEGACY=900]="EDITION_LEGACY",e[e.EDITION_PROTO2=998]="EDITION_PROTO2",e[e.EDITION_PROTO3=999]="EDITION_PROTO3",e[e.EDITION_2023=1e3]="EDITION_2023",e[e.EDITION_2024=1001]="EDITION_2024",e[e.EDITION_1_TEST_ONLY=1]="EDITION_1_TEST_ONLY",e[e.EDITION_2_TEST_ONLY=2]="EDITION_2_TEST_ONLY",e[e.EDITION_99997_TEST_ONLY=99997]="EDITION_99997_TEST_ONLY",e[e.EDITION_99998_TEST_ONLY=99998]="EDITION_99998_TEST_ONLY",e[e.EDITION_99999_TEST_ONLY=99999]="EDITION_99999_TEST_ONLY",e[e.EDITION_MAX=2147483647]="EDITION_MAX"})(Qt||(Qt={}));var Pt={readUnknownFields:!0};function ws(e){return e?Object.assign(Object.assign({},Pt),e):Pt}function Re(e,n,t){let o=X(e,void 0,!1);return _t(o,new Q(n),ws(t),!1,n.byteLength),o.message}function _t(e,n,t,o,s){var a;let i=o?n.len:n.pos+s,r,l,d=(a=e.getUnknown())!==null&&a!==void 0?a:[];for(;n.pos<i&&([r,l]=n.tag(),!(o&&l==f.EndGroup));){let u=e.findNumber(r);if(!u){let I=n.skip(l,r);t.readUnknownFields&&d.push({no:r,wireType:l,data:I});continue}Vn(e,n,u,l,t)}if(o&&(l!=f.EndGroup||r!==s))throw new Error("invalid end group tag");d.length>0&&e.setUnknown(d)}function Vn(e,n,t,o,s){switch(t.fieldKind){case"scalar":e.set(t,$(n,t.scalar));break;case"enum":e.set(t,$(n,c.INT32));break;case"message":e.set(t,Cn(n,s,t,e.get(t)));break;case"list":Us(n,o,e.get(t),s);break;case"map":vs(n,e.get(t),s);break}}function vs(e,n,t){let o=n.field(),s,a,i=e.pos+e.uint32();for(;e.pos<i;){let[r]=e.tag();switch(r){case 1:s=$(e,o.mapKey);break;case 2:switch(o.mapKind){case"scalar":a=$(e,o.scalar);break;case"enum":a=e.int32();break;case"message":a=Cn(e,t,o);break}break}}if(s===void 0&&(s=F(o.mapKey,!1)),a===void 0)switch(o.mapKind){case"scalar":a=F(o.scalar,!1);break;case"enum":a=o.enum.values[0].number;break;case"message":a=X(o.message,void 0,!1);break}n.set(s,a)}function Us(e,n,t,o){var s;let a=t.field();if(a.listKind==="message"){t.add(Cn(e,o,a));return}let i=(s=a.scalar)!==null&&s!==void 0?s:c.INT32;if(!(n==f.LengthDelimited&&i!=c.STRING&&i!=c.BYTES)){t.add($(e,i));return}let l=e.uint32()+e.pos;for(;e.pos<l;)t.add($(e,i))}function Cn(e,n,t,o){let s=t.delimitedEncoding,a=o??X(t.message,void 0,!1);return _t(a,e,n,s,s?t.number:e.uint32()),a}function $(e,n){switch(n){case c.STRING:return e.string();case c.BOOL:return e.bool();case c.DOUBLE:return e.double();case c.FLOAT:return e.float();case c.INT32:return e.int32();case c.INT64:return e.int64();case c.UINT64:return e.uint64();case c.FIXED64:return e.fixed64();case c.BYTES:return e.bytes();case c.FIXED32:return e.fixed32();case c.SFIXED32:return e.sfixed32();case c.SFIXED64:return e.sfixed64();case c.SINT64:return e.sint64();case c.UINT32:return e.uint32();case c.SINT32:return e.sint32()}}function V(e,n){var t;let o=Re(Tt,Se(e));return o.messageType.forEach(le),o.dependency=(t=n?.map(a=>a.proto.name))!==null&&t!==void 0?t:[],We(o,a=>n?.find(i=>i.proto.name===a)).getFile(o.name)}var Ot=V("Ch9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvEg9nb29nbGUucHJvdG9idWYiKwoJVGltZXN0YW1wEg8KB3NlY29uZHMYASABKAMSDQoFbmFub3MYAiABKAVChQEKE2NvbS5nb29nbGUucHJvdG9idWZCDlRpbWVzdGFtcFByb3RvUAFaMmdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3RpbWVzdGFtcHBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM");var ks=V("Chlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiJgoDQW55EhAKCHR5cGVfdXJsGAEgASgJEg0KBXZhbHVlGAIgASgMQnYKE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaLGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2FueXBiogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM"),jt=J(ks,0);var Ds=3,$t={writeUnknownFields:!0};function Qs(e){return e?Object.assign(Object.assign({},$t),e):$t}function qt(e,n,t){return Fe(new P,Qs(t),X(e,n)).finish()}function Fe(e,n,t){var o;for(let s of t.sortedFields){if(!t.isSet(s)){if(s.presence==Ds)throw new Error(`cannot encode field ${t.desc.typeName}.${s.name} to binary: required field not set`);continue}Xn(e,n,t,s)}if(n.writeUnknownFields)for(let{no:s,wireType:a,data:i}of(o=t.getUnknown())!==null&&o!==void 0?o:[])e.tag(s,a).raw(i);return e}function Xn(e,n,t,o){var s;switch(o.fieldKind){case"scalar":case"enum":Ee(e,(s=o.scalar)!==null&&s!==void 0?s:c.INT32,o.number,t.get(o));break;case"list":Ts(e,n,o,t.get(o));break;case"message":eo(e,n,o,t.get(o));break;case"map":for(let[a,i]of t.get(o))Ps(e,n,o,a,i);break}}function Ee(e,n,t,o){no(e.tag(t,_s(n)),n,o)}function eo(e,n,t,o){t.delimitedEncoding?Fe(e.tag(t.number,f.StartGroup),n,o).tag(t.number,f.EndGroup):Fe(e.tag(t.number,f.LengthDelimited).fork(),n,o).join()}function Ts(e,n,t,o){var s;if(t.listKind=="message"){for(let i of o)eo(e,n,t,i);return}let a=(s=t.scalar)!==null&&s!==void 0?s:c.INT32;if(t.packed){if(!o.size)return;e.tag(t.number,f.LengthDelimited).fork();for(let i of o)no(e,a,i);e.join();return}for(let i of o)Ee(e,a,t.number,i)}function Ps(e,n,t,o,s){var a;switch(e.tag(t.number,f.LengthDelimited).fork(),Ee(e,t.mapKey,1,o),t.mapKind){case"scalar":case"enum":Ee(e,(a=t.scalar)!==null&&a!==void 0?a:c.INT32,2,s);break;case"message":Fe(e.tag(2,f.LengthDelimited).fork(),n,s).join();break}e.join()}function no(e,n,t){switch(n){case c.STRING:e.string(t);break;case c.BOOL:e.bool(t);break;case c.DOUBLE:e.double(t);break;case c.FLOAT:e.float(t);break;case c.INT32:e.int32(t);break;case c.INT64:e.int64(t);break;case c.UINT64:e.uint64(t);break;case c.FIXED64:e.fixed64(t);break;case c.BYTES:e.bytes(t);break;case c.FIXED32:e.fixed32(t);break;case c.SFIXED32:e.sfixed32(t);break;case c.SFIXED64:e.sfixed64(t);break;case c.SINT64:e.sint64(t);break;case c.UINT32:e.uint32(t);break;case c.SINT32:e.sint32(t);break}}function _s(e){switch(e){case c.BYTES:case c.STRING:return f.LengthDelimited;case c.DOUBLE:case c.FIXED64:case c.SFIXED64:return f.Bit64;case c.FIXED32:case c.SFIXED32:case c.FLOAT:return f.Bit32;default:return f.Varint}}function to(e,n,t){let o=!1;return t||(t=B(jt),o=!0),t.value=qt(e,n),t.typeUrl=js(n.$typeName),o?t:void 0}function Os(e,n){if(e.typeUrl==="")return!1;let t=typeof n=="string"?n:n.typeName,o=so(e.typeUrl);return t===o}function oo(e,n){if(e.typeUrl==="")return;let t=n.kind=="message"?n:n.getMessage(so(e.typeUrl));if(!(!t||!Os(e,t)))return Re(t,e.value)}function js(e){return`type.googleapis.com/${e}`}function so(e){let n=e.lastIndexOf("/"),t=n>=0?e.substring(n+1):e;if(!t.length)throw new Error(`invalid type url: ${e}`);return t}var Ye=V("Ch5nb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiIqCghEdXJhdGlvbhIPCgdzZWNvbmRzGAEgASgDEg0KBW5hbm9zGAIgASgFQoMBChNjb20uZ29vZ2xlLnByb3RvYnVmQg1EdXJhdGlvblByb3RvUAFaMWdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2R1cmF0aW9ucGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMw");var Sn=V("Chxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvEg9nb29nbGUucHJvdG9idWYihAEKBlN0cnVjdBIzCgZmaWVsZHMYASADKAsyIy5nb29nbGUucHJvdG9idWYuU3RydWN0LkZpZWxkc0VudHJ5GkUKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEi6gEKBVZhbHVlEjAKCm51bGxfdmFsdWUYASABKA4yGi5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlSAASFgoMbnVtYmVyX3ZhbHVlGAIgASgBSAASFgoMc3RyaW5nX3ZhbHVlGAMgASgJSAASFAoKYm9vbF92YWx1ZRgEIAEoCEgAEi8KDHN0cnVjdF92YWx1ZRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIABIwCgpsaXN0X3ZhbHVlGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZUgAQgYKBGtpbmQiMwoJTGlzdFZhbHVlEiYKBnZhbHVlcxgBIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSobCglOdWxsVmFsdWUSDgoKTlVMTF9WQUxVRRAAQn8KE2NvbS5nb29nbGUucHJvdG9idWZCC1N0cnVjdFByb3RvUAFaL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3N0cnVjdHBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM"),ao=J(Sn,0),Bn=J(Sn,1),io=J(Sn,2),Ne;(function(e){e[e.NULL_VALUE=0]="NULL_VALUE"})(Ne||(Ne={}));function ro(e,n){lo(n,e);let t=$s(e.$unknown,n),[o,s,a]=q(n);for(let i of t)Vn(o,new Q(i.data),s,i.wireType,{readUnknownFields:!1});return a()}function co(e,n,t){var o;lo(n,e);let s=((o=e.$unknown)!==null&&o!==void 0?o:[]).filter(d=>d.no!==n.number),[a,i]=q(n,t),r=new P;Xn(r,{writeUnknownFields:!1},a,i);let l=new Q(r.finish());for(;l.pos<l.len;){let[d,u]=l.tag(),I=l.skip(u,d);s.push({no:d,wireType:u,data:I})}e.$unknown=s}function $s(e,n){if(e===void 0)return[];if(n.fieldKind==="enum"||n.fieldKind==="scalar"){for(let t=e.length-1;t>=0;--t)if(e[t].no==n.number)return[e[t]];return[]}return e.filter(t=>t.no===n.number)}function q(e,n){let t=e.typeName,o=Object.assign(Object.assign({},e),{kind:"field",parent:e.extendee,localName:t}),s=Object.assign(Object.assign({},e.extendee),{fields:[o],members:[o],oneofs:[]}),a=B(s,n!==void 0?{[t]:n}:void 0);return[X(s,a),o,()=>{let i=a[t];if(i===void 0){let r=e.message;return H(r)?F(r.fields[0].scalar,r.fields[0].longAsString):B(r)}return i}]}function lo(e,n){if(e.extendee.typeName!=n.$typeName)throw new Error(`extension ${e.typeName} can only be applied to message ${e.extendee.typeName}`)}var qs=3,ea=2,uo={alwaysEmitImplicit:!1,enumAsInteger:!1,useProtoFieldName:!1};function na(e){return e?Object.assign(Object.assign({},uo),e):uo}function Jn(e,n,t){return ue(X(e,n),na(t))}function Me(e,n,t){var o;let s=Jn(e,n,t);return JSON.stringify(s,null,(o=t?.prettySpaces)!==null&&o!==void 0?o:0)}function ue(e,n){var t;let o=aa(e,n);if(o!==void 0)return o;let s={};for(let a of e.sortedFields){if(!e.isSet(a)){if(a.presence==qs)throw new Error(`cannot encode field ${e.desc.typeName}.${a.name} to JSON: required field not set`);if(!n.alwaysEmitImplicit||a.presence!==ea)continue}let i=go(a,e.get(a),n);i!==void 0&&(s[sa(a,n)]=i)}if(n.registry){let a=new Set;for(let i of(t=e.getUnknown())!==null&&t!==void 0?t:[]){if(a.has(i.no))continue;let r=n.registry.getExtensionFor(e.desc,i.no);if(!r)continue;let l=ro(e.message,r),[d,u]=q(r,l),I=go(u,d.get(u),n);I!==void 0&&(s[r.jsonName]=I)}}return s}function go(e,n,t){switch(e.fieldKind){case"scalar":return He(e,n);case"message":return ue(n,t);case"enum":return Wn(e.enum,n,t.enumAsInteger);case"list":return oa(n,t);case"map":return ta(n,t)}}function ta(e,n){let t=e.field(),o={};switch(t.mapKind){case"scalar":for(let[s,a]of e)o[s]=He(t,a);break;case"message":for(let[s,a]of e)o[s]=ue(a,n);break;case"enum":for(let[s,a]of e)o[s]=Wn(t.enum,a,n.enumAsInteger);break}return n.alwaysEmitImplicit||e.size>0?o:void 0}function oa(e,n){let t=e.field(),o=[];switch(t.listKind){case"scalar":for(let s of e)o.push(He(t,s));break;case"enum":for(let s of e)o.push(Wn(t.enum,s,n.enumAsInteger));break;case"message":for(let s of e)o.push(ue(s,n));break}return n.alwaysEmitImplicit||o.length>0?o:void 0}function Wn(e,n,t){var o;if(typeof n!="number")throw new Error(`cannot encode ${e} to JSON: expected number, got ${A(n)}`);if(e.typeName=="google.protobuf.NullValue")return null;if(t)return n;let s=e.value[n];return(o=s?.name)!==null&&o!==void 0?o:n}function He(e,n){var t,o,s,a,i,r;switch(e.scalar){case c.INT32:case c.SFIXED32:case c.SINT32:case c.FIXED32:case c.UINT32:if(typeof n!="number")throw new Error(`cannot encode ${e} to JSON: ${(t=K(e,n))===null||t===void 0?void 0:t.message}`);return n;case c.FLOAT:case c.DOUBLE:if(typeof n!="number")throw new Error(`cannot encode ${e} to JSON: ${(o=K(e,n))===null||o===void 0?void 0:o.message}`);return isNaN(n)?"NaN":n===Number.POSITIVE_INFINITY?"Infinity":n===Number.NEGATIVE_INFINITY?"-Infinity":n;case c.STRING:if(typeof n!="string")throw new Error(`cannot encode ${e} to JSON: ${(s=K(e,n))===null||s===void 0?void 0:s.message}`);return n;case c.BOOL:if(typeof n!="boolean")throw new Error(`cannot encode ${e} to JSON: ${(a=K(e,n))===null||a===void 0?void 0:a.message}`);return n;case c.UINT64:case c.FIXED64:case c.INT64:case c.SFIXED64:case c.SINT64:if(typeof n!="bigint"&&typeof n!="string")throw new Error(`cannot encode ${e} to JSON: ${(i=K(e,n))===null||i===void 0?void 0:i.message}`);return n.toString();case c.BYTES:if(n instanceof Uint8Array)return It(n);throw new Error(`cannot encode ${e} to JSON: ${(r=K(e,n))===null||r===void 0?void 0:r.message}`)}}function sa(e,n){return n.useProtoFieldName?e.name:e.jsonName}function aa(e,n){if(e.desc.typeName.startsWith("google.protobuf."))switch(e.desc.typeName){case"google.protobuf.Any":return ia(e.message,n);case"google.protobuf.Timestamp":return la(e.message);case"google.protobuf.Duration":return ra(e.message);case"google.protobuf.FieldMask":return ca(e.message);case"google.protobuf.Struct":return mo(e.message);case"google.protobuf.Value":return xn(e.message);case"google.protobuf.ListValue":return bo(e.message);default:if(H(e.desc)){let t=e.desc.fields[0];return He(t,e.get(t))}return}}function ia(e,n){if(e.typeUrl==="")return{};let{registry:t}=n,o,s;if(t&&(o=oo(e,t),o&&(s=t.getMessage(o.$typeName))),!s||!o)throw new Error(`cannot encode message ${e.$typeName} to JSON: "${e.typeUrl}" is not in the type registry`);let a=ue(X(s,o),n);return(s.typeName.startsWith("google.protobuf.")||a===null||Array.isArray(a)||typeof a!="object")&&(a={value:a}),a["@type"]=e.typeUrl,a}function ra(e){if(Number(e.seconds)>315576e6||Number(e.seconds)<-315576e6)throw new Error(`cannot encode message ${e.$typeName} to JSON: value out of range`);let n=e.seconds.toString();if(e.nanos!==0){let t=Math.abs(e.nanos).toString();t="0".repeat(9-t.length)+t,t.substring(3)==="000000"?t=t.substring(0,3):t.substring(6)==="000"&&(t=t.substring(0,6)),n+="."+t,e.nanos<0&&Number(e.seconds)==0&&(n="-"+n)}return n+"s"}function ca(e){return e.paths.map(n=>{if(n.match(/_[0-9]?_/g)||n.match(/[A-Z]/g))throw new Error(`cannot encode message ${e.$typeName} to JSON: lowerCamelCase of path name "`+n+'" is irreversible');return U(n)}).join(",")}function mo(e){let n={};for(let[t,o]of Object.entries(e.fields))n[t]=xn(o);return n}function xn(e){switch(e.kind.case){case"nullValue":return null;case"numberValue":if(!Number.isFinite(e.kind.value))throw new Error(`${e.$typeName} cannot be NaN or Infinity`);return e.kind.value;case"boolValue":return e.kind.value;case"stringValue":return e.kind.value;case"structValue":return mo(e.kind.value);case"listValue":return bo(e.kind.value);default:throw new Error(`${e.$typeName} must have a value`)}}function bo(e){return e.values.map(xn)}function la(e){let n=Number(e.seconds)*1e3;if(n<Date.parse("0001-01-01T00:00:00Z")||n>Date.parse("9999-12-31T23:59:59Z"))throw new Error(`cannot encode message ${e.$typeName} to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive`);if(e.nanos<0)throw new Error(`cannot encode message ${e.$typeName} to JSON: nanos must not be negative`);let t="Z";if(e.nanos>0){let o=(e.nanos+1e9).toString().substring(1);o.substring(3)==="000000"?t="."+o.substring(0,3)+"Z":o.substring(6)==="000"?t="."+o.substring(0,6)+"Z":t="."+o+"Z"}return new Date(n).toISOString().replace(".000Z",t)}var po={ignoreUnknownFields:!1};function da(e){return e?Object.assign(Object.assign({},po),e):po}function yo(e,n,t){return Rn(e,ya(n,e.typeName),t)}function Rn(e,n,t){let o=X(e);try{ee(o,n,da(t))}catch(s){throw Pn(s)?new Error(`cannot decode ${s.field()} from JSON: ${s.message}`,{cause:s}):s}return o.message}function ee(e,n,t){var o;if(Ga(e,n,t))return;if(n==null||Array.isArray(n)||typeof n!="object")throw new Error(`cannot decode ${e.desc} from JSON: ${A(n)}`);let s=new Map,a=new Map;for(let i of e.desc.fields)a.set(i.name,i).set(i.jsonName,i);for(let[i,r]of Object.entries(n)){let l=a.get(i);if(l){if(l.oneof){if(r===null&&l.fieldKind=="scalar")continue;let d=s.get(l.oneof);if(d!==void 0)throw new C(l.oneof,`oneof set multiple times by ${d.name} and ${l.name}`);s.set(l.oneof,l)}Io(e,l,r,t)}else{let d;if(i.startsWith("[")&&i.endsWith("]")&&(d=(o=t.registry)===null||o===void 0?void 0:o.getExtension(i.substring(1,i.length-1)))&&d.extendee.typeName===e.desc.typeName){let[u,I,W]=q(d);Io(u,I,r,t),co(e.message,d,W())}if(!d&&!t.ignoreUnknownFields)throw new Error(`cannot decode ${e.desc} from JSON: key "${i}" is unknown`)}}}function Io(e,n,t,o){switch(n.fieldKind){case"scalar":pa(e,n,t);break;case"enum":ba(e,n,t,o);break;case"message":ma(e,n,t,o);break;case"list":ga(e.get(n),t,o);break;case"map":ua(e.get(n),t,o);break}}function ua(e,n,t){if(n===null)return;let o=e.field();if(typeof n!="object"||Array.isArray(n))throw new C(o,"expected object, got "+A(n));for(let[s,a]of Object.entries(n)){if(a===null)throw new C(o,"map value must not be null");let i;switch(o.mapKind){case"message":let l=X(o.message);ee(l,a,t),i=l;break;case"enum":if(i=Fn(o.enum,a,t.ignoreUnknownFields,!0),i===ze)return;break;case"scalar":i=Le(o,a,!0);break}let r=Ia(o.mapKey,s);e.set(r,i)}}function ga(e,n,t){if(n===null)return;let o=e.field();if(!Array.isArray(n))throw new C(o,"expected Array, got "+A(n));for(let s of n){if(s===null)throw new C(o,"list item must not be null");switch(o.listKind){case"message":let a=X(o.message);ee(a,s,t),e.add(a);break;case"enum":let i=Fn(o.enum,s,t.ignoreUnknownFields,!0);i!==ze&&e.add(i);break;case"scalar":e.add(Le(o,s,!0));break}}}function ma(e,n,t,o){if(t===null&&n.message.typeName!="google.protobuf.Value"){e.clear(n);return}let s=e.isSet(n)?e.get(n):X(n.message);ee(s,t,o),e.set(n,s)}function ba(e,n,t,o){let s=Fn(n.enum,t,o.ignoreUnknownFields,!1);s===Ke?e.clear(n):s!==ze&&e.set(n,s)}function pa(e,n,t){let o=Le(n,t,!1);o===Ke?e.clear(n):e.set(n,o)}var ze=Symbol();function Fn(e,n,t,o){if(n===null)return e.typeName=="google.protobuf.NullValue"?0:o?e.values[0].number:Ke;switch(typeof n){case"number":if(Number.isInteger(n))return n;break;case"string":let s=e.values.find(a=>a.name===n);if(s!==void 0)return s.number;if(t)return ze;break}throw new Error(`cannot decode ${e} from JSON: ${A(n)}`)}var Ke=Symbol();function Le(e,n,t){if(n===null)return t?F(e.scalar,!1):Ke;switch(e.scalar){case c.DOUBLE:case c.FLOAT:if(n==="NaN")return NaN;if(n==="Infinity")return Number.POSITIVE_INFINITY;if(n==="-Infinity")return Number.NEGATIVE_INFINITY;if(typeof n=="number"){if(isNaN(n))throw new C(e,"unexpected NaN number");if(!isFinite(n))throw new C(e,"unexpected infinite number");break}if(typeof n=="string"){if(n===""||n.trim().length!==n.length)break;let o=Number(n);if(!isFinite(o))break;return o}break;case c.INT32:case c.FIXED32:case c.SFIXED32:case c.SINT32:case c.UINT32:return Go(n);case c.BYTES:if(typeof n=="string"){if(n==="")return new Uint8Array(0);try{return Se(n)}catch(o){let s=o instanceof Error?o.message:String(o);throw new C(e,s)}}break}return n}function Ia(e,n){switch(e){case c.BOOL:switch(n){case"true":return!0;case"false":return!1}return n;case c.INT32:case c.FIXED32:case c.UINT32:case c.SFIXED32:case c.SINT32:return Go(n);default:return n}}function Go(e){if(typeof e=="string"){if(e===""||e.trim().length!==e.length)return e;let n=Number(e);return Number.isNaN(n)?e:n}return e}function ya(e,n){try{return JSON.parse(e)}catch(t){let o=t instanceof Error?t.message:String(t);throw new Error(`cannot decode message ${n} from JSON: ${o}`,{cause:t})}}function Ga(e,n,t){if(!e.desc.typeName.startsWith("google.protobuf."))return!1;switch(e.desc.typeName){case"google.protobuf.Any":return ha(e.message,n,t),!0;case"google.protobuf.Timestamp":return fa(e.message,n),!0;case"google.protobuf.Duration":return Za(e.message,n),!0;case"google.protobuf.FieldMask":return Aa(e.message,n),!0;case"google.protobuf.Struct":return ho(e.message,n),!0;case"google.protobuf.Value":return En(e.message,n),!0;case"google.protobuf.ListValue":return fo(e.message,n),!0;default:if(H(e.desc)){let o=e.desc.fields[0];return n===null?e.clear(o):e.set(o,Le(o,n,!0)),!0}return!1}}function ha(e,n,t){var o;if(n===null||Array.isArray(n)||typeof n!="object")throw new Error(`cannot decode message ${e.$typeName} from JSON: expected object but got ${A(n)}`);if(Object.keys(n).length==0)return;let s=n["@type"];if(typeof s!="string"||s=="")throw new Error(`cannot decode message ${e.$typeName} from JSON: "@type" is empty`);let a=s.includes("/")?s.substring(s.lastIndexOf("/")+1):s;if(!a.length)throw new Error(`cannot decode message ${e.$typeName} from JSON: "@type" is invalid`);let i=(o=t.registry)===null||o===void 0?void 0:o.getMessage(a);if(!i)throw new Error(`cannot decode message ${e.$typeName} from JSON: ${s} is not in the type registry`);let r=X(i);if(a.startsWith("google.protobuf.")&&Object.prototype.hasOwnProperty.call(n,"value")){let l=n.value;ee(r,l,t)}else{let l=Object.assign({},n);delete l["@type"],ee(r,l,t)}to(r.desc,r.message,e)}function fa(e,n){if(typeof n!="string")throw new Error(`cannot decode message ${e.$typeName} from JSON: ${A(n)}`);let t=n.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!t)throw new Error(`cannot decode message ${e.$typeName} from JSON: invalid RFC 3339 string`);let o=Date.parse(t[1]+"-"+t[2]+"-"+t[3]+"T"+t[4]+":"+t[5]+":"+t[6]+(t[8]?t[8]:"Z"));if(Number.isNaN(o))throw new Error(`cannot decode message ${e.$typeName} from JSON: invalid RFC 3339 string`);if(o<Date.parse("0001-01-01T00:00:00Z")||o>Date.parse("9999-12-31T23:59:59Z"))throw new Error(`cannot decode message ${e.$typeName} from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive`);e.seconds=p.parse(o/1e3),e.nanos=0,t[7]&&(e.nanos=parseInt("1"+t[7]+"0".repeat(9-t[7].length))-1e9)}function Za(e,n){if(typeof n!="string")throw new Error(`cannot decode message ${e.$typeName} from JSON: ${A(n)}`);let t=n.match(/^(-?[0-9]+)(?:\.([0-9]+))?s/);if(t===null)throw new Error(`cannot decode message ${e.$typeName} from JSON: ${A(n)}`);let o=Number(t[1]);if(o>315576e6||o<-315576e6)throw new Error(`cannot decode message ${e.$typeName} from JSON: ${A(n)}`);if(e.seconds=p.parse(o),typeof t[2]!="string")return;let s=t[2]+"0".repeat(9-t[2].length);e.nanos=parseInt(s),(o<0||Object.is(o,-0))&&(e.nanos=-e.nanos)}function Aa(e,n){if(typeof n!="string")throw new Error(`cannot decode message ${e.$typeName} from JSON: ${A(n)}`);if(n==="")return;function t(o){if(o.includes("_"))throw new Error(`cannot decode message ${e.$typeName} from JSON: path names must be lowerCamelCase`);let s=o.replace(/[A-Z]/g,a=>"_"+a.toLowerCase());return s[0]==="_"?s.substring(1):s}e.paths=n.split(",").map(t)}function ho(e,n){if(typeof n!="object"||n==null||Array.isArray(n))throw new Error(`cannot decode message ${e.$typeName} from JSON ${A(n)}`);for(let[t,o]of Object.entries(n)){let s=B(Bn);En(s,o),e.fields[t]=s}}function En(e,n){switch(typeof n){case"number":e.kind={case:"numberValue",value:n};break;case"string":e.kind={case:"stringValue",value:n};break;case"boolean":e.kind={case:"boolValue",value:n};break;case"object":if(n===null)e.kind={case:"nullValue",value:Ne.NULL_VALUE};else if(Array.isArray(n)){let t=B(io);fo(t,n),e.kind={case:"listValue",value:t}}else{let t=B(ao);ho(t,n),e.kind={case:"structValue",value:t}}break;default:throw new Error(`cannot decode message ${e.$typeName} from JSON ${A(n)}`)}return e}function fo(e,n){if(!Array.isArray(n))throw new Error(`cannot decode message ${e.$typeName} from JSON ${A(n)}`);for(let t of n){let o=B(Bn);En(o,t),e.values.push(o)}}import b from"chalk";import{program as w}from"commander";import ja from"figlet";import $a from"fs";import qa from"path";import ei from"semver";import ni from"update-notifier";import{confirm as Ja,input as Wa,select as xo}from"@inquirer/prompts";import zn from"chalk";import xa from"fs";function Zo(e,n,...t){if(t.length>0)throw new Error;return e.services[n]}var Vo=V("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI9CgpDb25zdHJhaW50EgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSJNChJNZXNzYWdlQ29uc3RyYWludHMSEAoIZGlzYWJsZWQYASABKAgSJQoDY2VsGAMgAygLMhguYnVmLnZhbGlkYXRlLkNvbnN0cmFpbnQiJAoQT25lb2ZDb25zdHJhaW50cxIQCghyZXF1aXJlZBgBIAEoCCKoCAoQRmllbGRDb25zdHJhaW50cxIlCgNjZWwYFyADKAsyGC5idWYudmFsaWRhdGUuQ29uc3RyYWludBIQCghyZXF1aXJlZBgZIAEoCBIkCgZpZ25vcmUYGyABKA4yFC5idWYudmFsaWRhdGUuSWdub3JlEikKBWZsb2F0GAEgASgLMhguYnVmLnZhbGlkYXRlLkZsb2F0UnVsZXNIABIrCgZkb3VibGUYAiABKAsyGS5idWYudmFsaWRhdGUuRG91YmxlUnVsZXNIABIpCgVpbnQzMhgDIAEoCzIYLmJ1Zi52YWxpZGF0ZS5JbnQzMlJ1bGVzSAASKQoFaW50NjQYBCABKAsyGC5idWYudmFsaWRhdGUuSW50NjRSdWxlc0gAEisKBnVpbnQzMhgFIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50MzJSdWxlc0gAEisKBnVpbnQ2NBgGIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50NjRSdWxlc0gAEisKBnNpbnQzMhgHIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50MzJSdWxlc0gAEisKBnNpbnQ2NBgIIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50NjRSdWxlc0gAEi0KB2ZpeGVkMzIYCSABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQzMlJ1bGVzSAASLQoHZml4ZWQ2NBgKIAEoCzIaLmJ1Zi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIABIvCghzZml4ZWQzMhgLIAEoCzIbLmJ1Zi52YWxpZGF0ZS5TRml4ZWQzMlJ1bGVzSAASLwoIc2ZpeGVkNjQYDCABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkNjRSdWxlc0gAEicKBGJvb2wYDSABKAsyFy5idWYudmFsaWRhdGUuQm9vbFJ1bGVzSAASKwoGc3RyaW5nGA4gASgLMhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzSAASKQoFYnl0ZXMYDyABKAsyGC5idWYudmFsaWRhdGUuQnl0ZXNSdWxlc0gAEicKBGVudW0YECABKAsyFy5idWYudmFsaWRhdGUuRW51bVJ1bGVzSAASLwoIcmVwZWF0ZWQYEiABKAsyGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlc0gAEiUKA21hcBgTIAEoCzIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlc0gAEiUKA2FueRgUIAEoCzIWLmJ1Zi52YWxpZGF0ZS5BbnlSdWxlc0gAEi8KCGR1cmF0aW9uGBUgASgLMhsuYnVmLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIABIxCgl0aW1lc3RhbXAYFiABKAsyHC5idWYudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAEIGCgR0eXBlIl8KFVByZWRlZmluZWRDb25zdHJhaW50cxIlCgNjZWwYASADKAsyGC5idWYudmFsaWRhdGUuQ29uc3RyYWludEoECBgQGUoECBoQG1ITc2tpcHBlZGlnbm9yZV9lbXB0eSK1FwoKRmxvYXRSdWxlcxJpCgVjb25zdBgBIAEoAkJawkhXClUKC2Zsb2F0LmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESdQoCaW4YBiADKAJCacJIZgpkCghmbG9hdC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ2CgZub3RfaW4YByADKAJCZsJIYwphCgxmbG9hdC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJ1CgZmaW5pdGUYCCABKAhCZcJIYgpgCgxmbG9hdC5maW5pdGUaUHJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ3ZhbHVlIG11c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEisKB2V4YW1wbGUYCSADKAJCGsJIFwoVCg1mbG9hdC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHFwoLRG91YmxlUnVsZXMSagoFY29uc3QYASABKAFCW8JIWApWCgxkb3VibGUuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSoAEKAmx0GAIgASgBQpEBwkiNAQqKAQoJZG91YmxlLmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErABCgNsdGUYAyABKAFCoAHCSJwBCpkBCgpkb3VibGUubHRlGooBIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS9AcKAmd0GAQgASgBQuUHwkjhBwqOAQoJZG91YmxlLmd0GoABIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKxAEKDGRvdWJsZS5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs4BChZkb3VibGUuZ3RfbHRfZXhjbHVzaXZlGrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycK1AEKDWRvdWJsZS5ndF9sdGUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwreAQoXZG91YmxlLmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEr8ICgNndGUYBSABKAFCrwjCSKsICpwBCgpkb3VibGUuZ3RlGo0BIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCtMBCg1kb3VibGUuZ3RlX2x0GsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrdAQoXZG91YmxlLmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuMBCg5kb3VibGUuZ3RlX2x0ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK7QEKGGRvdWJsZS5ndGVfbHRlX2V4Y2x1c2l2ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ2CgJpbhgGIAMoAUJqwkhnCmUKCWRvdWJsZS5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLnFAoKSW50MzJSdWxlcxJpCgVjb25zdBgBIAEoBUJawkhXClUKC2ludDMyLmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnUKAmluGAYgAygFQmnCSGYKZAoIaW50MzIuaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSdgoGbm90X2luGAcgAygFQmbCSGMKYQoMaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKwoHZXhhbXBsZRgIIAMoBUIawkgXChUKDWludDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIucUCgpJbnQ2NFJ1bGVzEmkKBWNvbnN0GAEgASgDQlrCSFcKVQoLaW50NjQuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSigEKAmx0GAIgASgDQnzCSHkKdwoIaW50NjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnAEKA2x0ZRgDIAEoA0KMAcJIiAEKhQEKCWludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASlwcKAmd0GAQgASgDQogHwkiEBwp6CghpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKswEKC2ludDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq7AQoVaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKwwEKDGludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKywEKFmludDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEuMHCgNndGUYBSABKANC0wfCSM8HCogBCglpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrCAQoMaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCsoBChZpbnQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrSAQoNaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwraAQoXaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESdQoCaW4YBiADKANCacJIZgpkCghpbnQ2NC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ2CgZub3RfaW4YByADKANCZsJIYwphCgxpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAkgAygDQhrCSBcKFQoNaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i+BQKC1VJbnQzMlJ1bGVzEmoKBWNvbnN0GAEgASgNQlvCSFgKVgoMdWludDMyLmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEosBCgJsdBgCIAEoDUJ9wkh6CngKCXVpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgNQo0BwkiJAQqGAQoKdWludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgNQo0HwkiJBwp7Cgl1aW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoDULYB8JI1AcKiQEKCnVpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnYKAmluGAYgAygNQmrCSGcKZQoJdWludDMyLmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEncKBm5vdF9pbhgHIAMoDUJnwkhkCmIKDXVpbnQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIsCgdleGFtcGxlGAggAygNQhvCSBgKFgoOdWludDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIvgUCgtVSW50NjRSdWxlcxJqCgVjb25zdBgBIAEoBEJbwkhYClYKDHVpbnQ2NC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxKLAQoCbHQYAiABKARCfcJIegp4Cgl1aW50NjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnQEKA2x0ZRgDIAEoBEKNAcJIiQEKhgEKCnVpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpwHCgJndBgEIAEoBEKNB8JIiQcKewoJdWludDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq0AQoMdWludDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq8AQoWdWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsQBCg11aW50NjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrMAQoXdWludDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEugHCgNndGUYBSABKARC2AfCSNQHCokBCgp1aW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwwEKDXVpbnQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKywEKF3VpbnQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrTAQoOdWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2wEKGHVpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ2CgJpbhgGIAMoBEJqwkhnCmUKCXVpbnQ2NC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiL4FAoLU0ludDMyUnVsZXMSagoFY29uc3QYASABKBFCW8JIWApWCgxzaW50MzIuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESdgoCaW4YBiADKBFCasJIZwplCglzaW50MzIuaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSdwoGbm90X2luGAcgAygRQmfCSGQKYgoNc2ludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBFCG8JIGAoWCg5zaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i+BQKC1NJbnQ2NFJ1bGVzEmoKBWNvbnN0GAEgASgSQlvCSFgKVgoMc2ludDY0LmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEosBCgJsdBgCIAEoEkJ9wkh6CngKCXNpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgSQo0BwkiJAQqGAQoKc2ludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgSQo0HwkiJBwp7CglzaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEkLYB8JI1AcKiQEKCnNpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEnYKAmluGAYgAygSQmrCSGcKZQoJc2ludDY0LmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEncKBm5vdF9pbhgHIAMoEkJnwkhkCmIKDXNpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIsCgdleGFtcGxlGAggAygSQhvCSBgKFgoOc2ludDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIokVCgxGaXhlZDMyUnVsZXMSawoFY29uc3QYASABKAdCXMJIWQpXCg1maXhlZDMyLmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEowBCgJsdBgCIAEoB0J+wkh7CnkKCmZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoB0KOAcJIigEKhwEKC2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAdCkgfCSI4HCnwKCmZpeGVkMzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAdC3QfCSNkHCooBCgtmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEncKAmluGAYgAygHQmvCSGgKZgoKZml4ZWQzMi5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIokVCgxGaXhlZDY0UnVsZXMSawoFY29uc3QYASABKAZCXMJIWQpXCg1maXhlZDY0LmNvbnN0GkZ0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbcnVsZXMuY29uc3RdKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEncKAmluGAYgAygGQmvCSGgKZgoKZml4ZWQ2NC5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ4CgZub3RfaW4YByADKAZCaMJIZQpjCg5maXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAZCHMJIGQoXCg9maXhlZDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIpoVCg1TRml4ZWQzMlJ1bGVzEmwKBWNvbnN0GAEgASgPQl3CSFoKWAoOc2ZpeGVkMzIuY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSjQEKAmx0GAIgASgPQn/CSHwKegoLc2ZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoD0KPAcJIiwEKiAEKDHNmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgPQpcHwkiTBwp9CgtzZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKA9C4gfCSN4HCosBCgxzZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESeAoCaW4YBiADKA9CbMJIaQpnCgtzZml4ZWQzMi5pbhpYISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ5CgZub3RfaW4YByADKA9CacJIZgpkCg9zZml4ZWQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygPQh3CSBoKGAoQc2ZpeGVkMzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4imhUKDVNGaXhlZDY0UnVsZXMSbAoFY29uc3QYASABKBBCXcJIWgpYCg5zZml4ZWQ2NC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxKNAQoCbHQYAiABKBBCf8JIfAp6CgtzZml4ZWQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgQQo8BwkiLAQqIAQoMc2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKBBClwfCSJMHCn0KC3NmaXhlZDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkNjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkNjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkNjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoEELiB8JI3gcKiwEKDHNmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ4CgJpbhgGIAMoEEJswkhpCmcKC3NmaXhlZDY0LmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKsAQoJQm9vbFJ1bGVzEmgKBWNvbnN0GAEgASgIQlnCSFYKVAoKYm9vbC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIi4DYKC1N0cmluZ1J1bGVzEmwKBWNvbnN0GAEgASgJQl3CSFoKWAoMc3RyaW5nLmNvbnN0Gkh0aGlzICE9IHJ1bGVzLmNvbnN0ID8gJ3ZhbHVlIG11c3QgZXF1YWwgYCVzYCcuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSdgoCaW4YCiADKAlCasJIZwplCglzdHJpbmcuaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSdwoGbm90X2luGAsgAygJQmfCSGQKYgoNc3RyaW5nLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEt8BCgVlbWFpbBgMIAEoCELNAcJIyQEKYQoMc3RyaW5nLmVtYWlsEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLnAQoIaG9zdG5hbWUYDSABKAhC0gHCSM4BCmUKD3N0cmluZy5ob3N0bmFtZRIedmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLHAQoCaXAYDiABKAhCuAHCSLQBClUKCXN0cmluZy5pcBIgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjQYDyABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY0EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtYBCgRpcHY2GBAgASgIQsUBwkjBAQpcCgtzdHJpbmcuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK/AQoDdXJpGBEgASgIQq8BwkirAQpRCgpzdHJpbmcudXJpEhl2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEmYKB3VyaV9yZWYYEiABKAhCU8JIUApOCg5zdHJpbmcudXJpX3JlZhIZdmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVSSRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEqgFChB3ZWxsX2tub3duX3JlZ2V4GBggASgOMhguYnVmLnZhbGlkYXRlLktub3duUmVnZXhC8QTCSO0ECvABCiNzdHJpbmcud2VsbF9rbm93bl9yZWdleC5oZWFkZXJfbmFtZRImdmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIG5hbWUaoAFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoIWhhcyhydWxlcy5zdHJpY3QpIHx8IHJ1bGVzLnN0cmljdCA/J146P1swLTlhLXpBLVohIyQlJlwnKistLl5ffH5ceDYwXSskJyA6J15bXlx1MDAwMFx1MDAwQVx1MDAwRF0rJCcpCo0BCilzdHJpbmcud2VsbF9rbm93bl9yZWdleC5oZWFkZXJfbmFtZV9lbXB0eRI1dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIEhUVFAgaGVhZGVyIG5hbWUaKXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzICE9ICcnCucBCiRzdHJpbmcud2VsbF9rbm93bl9yZWdleC5oZWFkZXJfdmFsdWUSJ3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciB2YWx1ZRqVAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMiB8fCB0aGlzLm1hdGNoZXMoIWhhcyhydWxlcy5zdHJpY3QpIHx8IHJ1bGVzLnN0cmljdCA/J15bXlx1MDAwMC1cdTAwMDhcdTAwMEEtXHUwMDFGXHUwMDdGXSokJyA6J15bXlx1MDAwMFx1MDAwQVx1MDAwRF0qJCcpSAASDgoGc3RyaWN0GBkgASgIEiwKB2V4YW1wbGUYIiADKAlCG8JIGAoWCg5zdHJpbmcuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgwKCndlbGxfa25vd24ivxAKCkJ5dGVzUnVsZXMSZgoFY29uc3QYASABKAxCV8JIVApSCgtieXRlcy5jb25zdBpDdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGJlICV4Jy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxJ4CgNsZW4YDSABKARCa8JIaApmCglieXRlcy5sZW4aWXVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5sZW5dKSA6ICcnEpABCgdtaW5fbGVuGAIgASgEQn/CSHwKegoNYnl0ZXMubWluX2xlbhppdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fbGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9sZW5dKSA6ICcnEogBCgdtYXhfbGVuGAMgASgEQnfCSHQKcgoNYnl0ZXMubWF4X2xlbhphdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfbGVuID8gJ3ZhbHVlIG11c3QgYmUgYXQgbW9zdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5tYXhfbGVuXSkgOiAnJxKQAQoHcGF0dGVybhgEIAEoCUJ/wkh8CnoKDWJ5dGVzLnBhdHRlcm4aaSFzdHJpbmcodGhpcykubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBtdXN0IG1hdGNoIHJlZ2V4IHBhdHRlcm4gYCVzYCcuZm9ybWF0KFtydWxlcy5wYXR0ZXJuXSkgOiAnJxKBAQoGcHJlZml4GAUgASgMQnHCSG4KbAoMYnl0ZXMucHJlZml4GlwhdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBwcmVmaXggJXgnLmZvcm1hdChbcnVsZXMucHJlZml4XSkgOiAnJxJ/CgZzdWZmaXgYBiABKAxCb8JIbApqCgxieXRlcy5zdWZmaXgaWiF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggJXgnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxKDAQoIY29udGFpbnMYByABKAxCccJIbgpsCg5ieXRlcy5jb250YWlucxpaIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gJXgnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpcBCgJpbhgIIAMoDEKKAcJIhgEKgwEKCGJ5dGVzLmluGndkeW4ocnVsZXMpWydpbiddLnNpemUoKSA+IDAgJiYgISh0aGlzIGluIGR5bihydWxlcylbJ2luJ10pID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtkeW4ocnVsZXMpWydpbiddXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biKvAwoJRW51bVJ1bGVzEmgKBWNvbnN0GAEgASgFQlnCSFYKVAoKZW51bS5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSdAoCaW4YAyADKAVCaMJIZQpjCgdlbnVtLmluGlghKHRoaXMgaW4gZHluKHJ1bGVzKVsnaW4nXSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2R5bihydWxlcylbJ2luJ11dKSA6ICcnEnUKBm5vdF9pbhgEIAMoBUJlwkhiCmAKC2VudW0ubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIoEECg1SZXBlYXRlZFJ1bGVzEp4BCgltaW5faXRlbXMYASABKARCigHCSIYBCoMBChJyZXBlYXRlZC5taW5faXRlbXMabXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1pbl9pdGVtc10pIDogJycSogEKCW1heF9pdGVtcxgCIAEoBEKOAcJIigEKhwEKEnJlcGVhdGVkLm1heF9pdGVtcxpxdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfaXRlbXMgPyAndmFsdWUgbXVzdCBjb250YWluIG5vIG1vcmUgdGhhbiAlcyBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1heF9pdGVtc10pIDogJycScAoGdW5pcXVlGAMgASgIQmDCSF0KWwoPcmVwZWF0ZWQudW5pcXVlEihyZXBlYXRlZCB2YWx1ZSBtdXN0IGNvbnRhaW4gdW5pcXVlIGl0ZW1zGh4hcnVsZXMudW5pcXVlIHx8IHRoaXMudW5pcXVlKCkSLQoFaXRlbXMYBCABKAsyHi5idWYudmFsaWRhdGUuRmllbGRDb25zdHJhaW50cyoJCOgHEICAgIACIpYDCghNYXBSdWxlcxKPAQoJbWluX3BhaXJzGAEgASgEQnzCSHkKdwoNbWFwLm1pbl9wYWlycxpmdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbGVhc3QgJWQgZW50cmllcycuZm9ybWF0KFtydWxlcy5taW5fcGFpcnNdKSA6ICcnEo4BCgltYXhfcGFpcnMYAiABKARCe8JIeAp2Cg1tYXAubWF4X3BhaXJzGmV1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9wYWlycyA/ICdtYXAgbXVzdCBiZSBhdCBtb3N0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWF4X3BhaXJzXSkgOiAnJxIsCgRrZXlzGAQgASgLMh4uYnVmLnZhbGlkYXRlLkZpZWxkQ29uc3RyYWludHMSLgoGdmFsdWVzGAUgASgLMh4uYnVmLnZhbGlkYXRlLkZpZWxkQ29uc3RyYWludHMqCQjoBxCAgICAAiImCghBbnlSdWxlcxIKCgJpbhgCIAMoCRIOCgZub3RfaW4YAyADKAki9RYKDUR1cmF0aW9uUnVsZXMShwEKBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQl3CSFoKWAoOZHVyYXRpb24uY29uc3QaRnRoaXMgIT0gcnVsZXMuY29uc3QgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtydWxlcy5jb25zdF0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESkwEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQmzCSGkKZwoLZHVyYXRpb24uaW4aWCEodGhpcyBpbiBkeW4ocnVsZXMpWydpbiddKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZHluKHJ1bGVzKVsnaW4nXV0pIDogJycSlAEKBm5vdF9pbhgIIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJpwkhmCmQKD2R1cmF0aW9uLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEkkKB2V4YW1wbGUYCSADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CHcJIGgoYChBkdXJhdGlvbi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiL4FwoOVGltZXN0YW1wUnVsZXMSiQEKBWNvbnN0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEJewkhbClkKD3RpbWVzdGFtcC5jb25zdBpGdGhpcyAhPSBydWxlcy5jb25zdCA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW3J1bGVzLmNvbnN0XSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKlAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIVCg1jb25zdHJhaW50X2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqhwEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIZChVJR05PUkVfSUZfVU5QT1BVTEFURUQQARIbChdJR05PUkVfSUZfREVGQVVMVF9WQUxVRRACEhEKDUlHTk9SRV9BTFdBWVMQAyoaSUdOT1JFX0VNUFRZSUdOT1JFX0RFRkFVTFQqbgoKS25vd25SZWdleBIbChdLTk9XTl9SRUdFWF9VTlNQRUNJRklFRBAAEiAKHEtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX05BTUUQARIhCh1LTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9WQUxVRRACOlwKB21lc3NhZ2USHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYhwkgASgLMiAuYnVmLnZhbGlkYXRlLk1lc3NhZ2VDb25zdHJhaW50c1IHbWVzc2FnZTpUCgVvbmVvZhIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYhwkgASgLMh4uYnVmLnZhbGlkYXRlLk9uZW9mQ29uc3RyYWludHNSBW9uZW9mOlQKBWZpZWxkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiHCSABKAsyHi5idWYudmFsaWRhdGUuRmllbGRDb25zdHJhaW50c1IFZmllbGQ6YwoKcHJlZGVmaW5lZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYiAkgASgLMiMuYnVmLnZhbGlkYXRlLlByZWRlZmluZWRDb25zdHJhaW50c1IKcHJlZGVmaW5lZEJuChJidWlsZC5idWYudmFsaWRhdGVCDVZhbGlkYXRlUHJvdG9QAVpHYnVmLmJ1aWxkL2dlbi9nby9idWZidWlsZC9wcm90b3ZhbGlkYXRlL3Byb3RvY29sYnVmZmVycy9nby9idWYvdmFsaWRhdGU",[T,Ye,Ot]);var Co=V("ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUJqCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25z+AEBogIER0FQSWIGcHJvdG8z");var Xo=V("Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCbgoOY29tLmdvb2dsZS5hcGlCEEFubm90YXRpb25zUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzM",[Co,T]);var So=V("Ch1nb29nbGUvYXBpL2xhdW5jaF9zdGFnZS5wcm90bxIKZ29vZ2xlLmFwaSqMAQoLTGF1bmNoU3RhZ2USHAoYTEFVTkNIX1NUQUdFX1VOU1BFQ0lGSUVEEAASEQoNVU5JTVBMRU1FTlRFRBAGEg0KCVBSRUxBVU5DSBAHEhAKDEVBUkxZX0FDQ0VTUxABEgkKBUFMUEhBEAISCAoEQkVUQRADEgYKAkdBEAQSDgoKREVQUkVDQVRFRBAFQloKDmNvbS5nb29nbGUuYXBpQhBMYXVuY2hTdGFnZVByb3RvUAFaLWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpO2FwaaICBEdBUEliBnByb3RvMw");var Bo=V("Chdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaSK+AQoWQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIeChJyZWZlcmVuY2VfZG9jc191cmkYASABKAlCAhgBEjoKDGRlc3RpbmF0aW9ucxgCIAMoDjIkLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEkgKGnNlbGVjdGl2ZV9nYXBpY19nZW5lcmF0aW9uGAMgASgLMiQuZ29vZ2xlLmFwaS5TZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24i+wMKFUNsaWVudExpYnJhcnlTZXR0aW5ncxIPCgd2ZXJzaW9uGAEgASgJEi0KDGxhdW5jaF9zdGFnZRgCIAEoDjIXLmdvb2dsZS5hcGkuTGF1bmNoU3RhZ2USGgoScmVzdF9udW1lcmljX2VudW1zGAMgASgIEi8KDWphdmFfc2V0dGluZ3MYFSABKAsyGC5nb29nbGUuYXBpLkphdmFTZXR0aW5ncxItCgxjcHBfc2V0dGluZ3MYFiABKAsyFy5nb29nbGUuYXBpLkNwcFNldHRpbmdzEi0KDHBocF9zZXR0aW5ncxgXIAEoCzIXLmdvb2dsZS5hcGkuUGhwU2V0dGluZ3MSMwoPcHl0aG9uX3NldHRpbmdzGBggASgLMhouZ29vZ2xlLmFwaS5QeXRob25TZXR0aW5ncxIvCg1ub2RlX3NldHRpbmdzGBkgASgLMhguZ29vZ2xlLmFwaS5Ob2RlU2V0dGluZ3MSMwoPZG90bmV0X3NldHRpbmdzGBogASgLMhouZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncxIvCg1ydWJ5X3NldHRpbmdzGBsgASgLMhguZ29vZ2xlLmFwaS5SdWJ5U2V0dGluZ3MSKwoLZ29fc2V0dGluZ3MYHCABKAsyFi5nb29nbGUuYXBpLkdvU2V0dGluZ3MiqAMKClB1Ymxpc2hpbmcSMwoPbWV0aG9kX3NldHRpbmdzGAIgAygLMhouZ29vZ2xlLmFwaS5NZXRob2RTZXR0aW5ncxIVCg1uZXdfaXNzdWVfdXJpGGUgASgJEhkKEWRvY3VtZW50YXRpb25fdXJpGGYgASgJEhYKDmFwaV9zaG9ydF9uYW1lGGcgASgJEhQKDGdpdGh1Yl9sYWJlbBhoIAEoCRIeChZjb2Rlb3duZXJfZ2l0aHViX3RlYW1zGGkgAygJEhYKDmRvY190YWdfcHJlZml4GGogASgJEjsKDG9yZ2FuaXphdGlvbhhrIAEoDjIlLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhI7ChBsaWJyYXJ5X3NldHRpbmdzGG0gAygLMiEuZ29vZ2xlLmFwaS5DbGllbnRMaWJyYXJ5U2V0dGluZ3MSKQohcHJvdG9fcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG4gASgJEigKIHJlc3RfcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG8gASgJIuMBCgxKYXZhU2V0dGluZ3MSFwoPbGlicmFyeV9wYWNrYWdlGAEgASgJEkwKE3NlcnZpY2VfY2xhc3NfbmFtZXMYAiADKAsyLy5nb29nbGUuYXBpLkphdmFTZXR0aW5ncy5TZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EjIKBmNvbW1vbhgDIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxo4ChZTZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiQQoLQ3BwU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIkEKC1BocFNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyL0AQoOUHl0aG9uU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEk4KFWV4cGVyaW1lbnRhbF9mZWF0dXJlcxgCIAEoCzIvLmdvb2dsZS5hcGkuUHl0aG9uU2V0dGluZ3MuRXhwZXJpbWVudGFsRmVhdHVyZXMaXgoURXhwZXJpbWVudGFsRmVhdHVyZXMSHQoVcmVzdF9hc3luY19pb19lbmFibGVkGAEgASgIEicKH3Byb3RvYnVmX3B5dGhvbmljX3R5cGVzX2VuYWJsZWQYAiABKAgiQgoMTm9kZVNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKqAwoORG90bmV0U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEkkKEHJlbmFtZWRfc2VydmljZXMYAiADKAsyLy5nb29nbGUuYXBpLkRvdG5ldFNldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5EksKEXJlbmFtZWRfcmVzb3VyY2VzGAMgAygLMjAuZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncy5SZW5hbWVkUmVzb3VyY2VzRW50cnkSGQoRaWdub3JlZF9yZXNvdXJjZXMYBCADKAkSIAoYZm9yY2VkX25hbWVzcGFjZV9hbGlhc2VzGAUgAygJEh4KFmhhbmR3cml0dGVuX3NpZ25hdHVyZXMYBiADKAkaNgoUUmVuYW1lZFNlcnZpY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo3ChVSZW5hbWVkUmVzb3VyY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJCCgxSdWJ5U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIr8BCgpHb1NldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxJFChByZW5hbWVkX3NlcnZpY2VzGAIgAygLMisuZ29vZ2xlLmFwaS5Hb1NldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5GjYKFFJlbmFtZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEizwIKDk1ldGhvZFNldHRpbmdzEhAKCHNlbGVjdG9yGAEgASgJEjwKDGxvbmdfcnVubmluZxgCIAEoCzImLmdvb2dsZS5hcGkuTWV0aG9kU2V0dGluZ3MuTG9uZ1J1bm5pbmcSHQoVYXV0b19wb3B1bGF0ZWRfZmllbGRzGAMgAygJGs0BCgtMb25nUnVubmluZxI1ChJpbml0aWFsX3BvbGxfZGVsYXkYASABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SHQoVcG9sbF9kZWxheV9tdWx0aXBsaWVyGAIgASgCEjEKDm1heF9wb2xsX2RlbGF5GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEjUKEnRvdGFsX3BvbGxfdGltZW91dBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiIrChhTZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24SDwoHbWV0aG9kcxgBIAMoCSqjAQoZQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhIrCidDTElFTlRfTElCUkFSWV9PUkdBTklaQVRJT05fVU5TUEVDSUZJRUQQABIJCgVDTE9VRBABEgcKA0FEUxACEgoKBlBIT1RPUxADEg8KC1NUUkVFVF9WSUVXEAQSDAoIU0hPUFBJTkcQBRIHCgNHRU8QBhIRCg1HRU5FUkFUSVZFX0FJEAcqZwoYQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEioKJkNMSUVOVF9MSUJSQVJZX0RFU1RJTkFUSU9OX1VOU1BFQ0lGSUVEEAASCgoGR0lUSFVCEAoSEwoPUEFDS0FHRV9NQU5BR0VSEBQ6SgoQbWV0aG9kX3NpZ25hdHVyZRIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGJsIIAMoCVIPbWV0aG9kU2lnbmF0dXJlOkMKDGRlZmF1bHRfaG9zdBIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxiZCCABKAlSC2RlZmF1bHRIb3N0OkMKDG9hdXRoX3Njb3BlcxIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxiaCCABKAlSC29hdXRoU2NvcGVzOkQKC2FwaV92ZXJzaW9uEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGMG6q/oBIAEoCVIKYXBpVmVyc2lvbkJpCg5jb20uZ29vZ2xlLmFwaUILQ2xpZW50UHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzM",[So,T,Ye]);var we=V("Cittb2NoYWJ1Z2FwaXMvYWRhcHQvcGx1Z2lucy92MS9wbHVnaW5zLnByb3RvEh1tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MSKWAQoTVXBsb2FkUGx1Z2luUmVxdWVzdBI7CghtYW5pZmVzdBgBIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLk1hbmlmZXN0SAASMwoEZmlsZRgCIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLkZpbGVIAEINCgRkYXRhEgW6SAIIASIWChRVcGxvYWRQbHVnaW5SZXNwb25zZSJPCgRGaWxlEisKBHBhdGgYASABKAlCHbpIGnIYEAIYgCAyEV5bXi9dKyhcL1teL10rKSokEhoKBGRhdGEYAiABKAxCDLpICXoHEAEYgLSJEyKIEAoITWFuaWZlc3QSLQoEbmFtZRgBIAEoCUIfukgcchoQARhkMhReW18kYS16XVtfJGEtejAtOV0qJBLUAQoHdmVyc2lvbhgCIAEoCULCAbpIvgFyuwEQBRiWATKzAV4oMHxbMS05XVxkKilcLigwfFsxLTldXGQqKVwuKDB8WzEtOV1cZCopKD86LSgoPzowfFsxLTldXGQqfFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKD86XC4oPzowfFsxLTldXGQqfFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKSopKT8oPzpcKyhbMC05YS16QS1aLV0rKD86XC5bMC05YS16QS1aLV0rKSopKT8kEhgKBWxhYmVsGAMgASgJQgm6SAZyBBABGGQSHwoLZGVzY3JpcHRpb24YBCABKAlCCrpIB3IFEAEY+gESHgoMb3JnYW5pemF0aW9uGAUgASgJQgi6SAVyA7ABARJYCghob21lcGFnZRgGIAEoCUJBukg+2AEBcjkQCxiAIDIyXmh0dHBzOi8vW2EtekEtWjAtOS4tXSsoPzpcLlthLXpBLVpdezIsfSkoPzovLiopPyRIAIgBARJaCgpyZXBvc2l0b3J5GAcgASgJQkG6SD7YAQFyORALGIAgMjJeaHR0cHM6Ly9bYS16QS1aMC05Li1dKyg/OlwuW2EtekEtWl17Mix9KSg/Oi8uKik/JEgBiAEBEtkBCgRidWdzGAggASgJQsUBukjBAboBugEKEnZhbGlkX2VtYWlsX29yX3VybBIhYnVncyBtdXN0IGJlIGEgdmFsaWQgZW1haWwgb3IgVVJMGoABc2l6ZSh0aGlzKSA+PSAyICYmIHNpemUodGhpcykgPD0gNDA5NiAmJiAodGhpcy5pc0VtYWlsKCkgfHwgdGhpcy5tYXRjaGVzKCdeaHR0cHM6Ly9bYS16QS1aMC05Li1dKyg/OlxcLlthLXpBLVpdezIsfSkoPzovLiopPyQnKSnYAQFIAogBARIhCgZhdXRob3IYCSABKAlCDLpICdgBAXIEEAEYZEgDiAEBEmUKBGxvZ28YCiABKAlCUrpIT9gBAXJKEAIYgCAyQ14oW14vXSsoL1teL10rKSopXC4oZ2lmfGpwZ3xqcGVnfGpmaWZ8cGpwZWd8cGpwfHBuZ3xzdmd8d2VicHxhdmlmKSRIBIgBARI7CglleGVjdXRvcnMYCyABKAlCKLpIJXIjEAIYgCAyHF4oW14vXSsoL1teL10rKSopXC4obWpzfGpzKSQSRwoNY29uZmlndXJhdG9ycxgMIAEoCUIrukgo2AEBciMQAhiAIDIcXihbXi9dKygvW14vXSspKilcLihtanN8anMpJEgFiAEBEjIKBmFzc2V0cxgNIAEoCUIdukgachgQAhiAIDIRXlteL10rKFwvW14vXSspKiRIBogBARIvCgNjZG4YDiABKAlCHbpIGnIYEAIYgCAyEV5bXi9dKyhcL1teL10rKSokSAeIAQESqAEKCHZlcnRpY2VzGA8gAygLMiUubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuVmVydGV4Qm+6SGy6AWIKE3ZlcnRleF91bmlxdWVfbmFtZXMSI2EgbmFtZSBjYW5ub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlGiZ0aGlzLm1hcCh2ZXJ0ZXgsIHZlcnRleC5uYW1lKS51bmlxdWUoKZIBBAgBEGQSnwIKDXBsdWdpbl9vYXV0aDIYECADKAsyLC5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5PYXV0aDJTZXJ2aWNlQtkBukjVAboBbQogcGx1Z2luX29hdXRoMi5vYXV0aF91bmlxdWVfbmFtZXMSI2EgbmFtZSBjYW5ub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlGiR0aGlzLm1hcChvYXV0aCwgb2F1dGgubmFtZSkudW5pcXVlKCmSAWIIABAUIly6AVkKHnBsdWdpbl9vYXV0aDIub2F1dGgyLmNsaWVudF9pZBIiVGhlIGNsaWVudF9pZCBwcm9wZXJ0eSBtdXN0IGJlIHNldBoTaGFzKHRoaXMuY2xpZW50X2lkKRK7AQoQcGx1Z2luX3ZhcmlhYmxlcxgRIAMoCzIuLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLlZhcmlhYmxlU2VydmljZUJxukhuugFkChF2YXJzX3VuaXF1ZV9uYW1lcxIjYSBuYW1lIGNhbm5vdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UaKnRoaXMubWFwKHZhcmlhYmxlLCB2YXJpYWJsZS5uYW1lKS51bmlxdWUoKZIBBAgAEGQSqgEKC3BsdWdpbl9tdGxzGBIgAygLMioubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuTVRMU1NlcnZpY2VCabpIZroBXAoRbXRsc191bmlxdWVfbmFtZXMSI2EgbmFtZSBjYW5ub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlGiJ0aGlzLm1hcChtdGxzLCBtdGxzLm5hbWUpLnVuaXF1ZSgpkgEECAAQFEILCglfaG9tZXBhZ2VCDQoLX3JlcG9zaXRvcnlCBwoFX2J1Z3NCCQoHX2F1dGhvckIHCgVfbG9nb0IQCg5fY29uZmlndXJhdG9yc0IJCgdfYXNzZXRzQgYKBF9jZG4ixg0KBlZlcnRleBItCgRuYW1lGAEgASgJQh+6SBxyGhABGGQyFF5bXyRhLXpdW18kYS16MC05XSokEhgKBWxhYmVsGAIgASgJQgm6SAZyBBABGGQSJwoLZGVzY3JpcHRpb24YAyABKAlCDbpICtgBAXIFEAEY+gFIAIgBARJlCgRsb2dvGAQgASgJQlK6SE/YAQFyShACGIAgMkNeKFteL10rKC9bXi9dKykqKVwuKGdpZnxqcGd8anBlZ3xqZmlmfHBqcGVnfHBqcHxwbmd8c3ZnfHdlYnB8YXZpZikkSAGIAQESSAoEdHlwZRgFIAEoDjIwLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLlZlcnRleC5WZXJ0ZXhUeXBlQgi6SAWCAQIgABIyCgZjb25maWcYBiABKAlCHbpIGnIYEAUYgCAyEV4oW14vXSsoL1teL10rKSopSAKIAQESNgoIbWV0YWRhdGEYByABKAlCJLpIIXIfEAUYgCAyGF4oW14vXSsoL1teL10rKSopXC5qc29uJBIUCgxjb25maWd1cmF0b3IYCCABKAgStAEKCXZhcmlhYmxlcxgJIAMoCzIuLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLlZhcmlhYmxlU2VydmljZUJxukhuugFkChF2YXJzX3VuaXF1ZV9uYW1lcxIjYSBuYW1lIGNhbm5vdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UaKnRoaXMubWFwKHZhcmlhYmxlLCB2YXJpYWJsZS5uYW1lKS51bmlxdWUoKZIBBAgAEGQSowEKBG10bHMYCiADKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5NVExTU2VydmljZUJpukhmugFcChFtdGxzX3VuaXF1ZV9uYW1lcxIjYSBuYW1lIGNhbm5vdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UaInRoaXMubWFwKG10bHMsIG10bHMubmFtZSkudW5pcXVlKCmSAQQIABBkEsABCgtjb2RlX29hdXRoMhgLIAMoCzIwLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLk9hdXRoMkNvZGVCaW5kaW5nQnm6SHa6AWwKH3ZlcnRleC5jb2RlX29hdXRoMi51bmlxdWVfbmFtZXMSI2EgbmFtZSBjYW5ub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlGiR0aGlzLm1hcChvYXV0aCwgb2F1dGgubmFtZSkudW5pcXVlKCmSAQQIABAUEvICCgZvYXV0aDIYDCADKAsyLC5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5PYXV0aDJTZXJ2aWNlQrMCukivAroBZwoadmVydGV4Lm9hdXRoMi51bmlxdWVfbmFtZXMSI2EgbmFtZSBjYW5ub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlGiR0aGlzLm1hcChvYXV0aCwgb2F1dGgubmFtZSkudW5pcXVlKCmSAcEBCAAQFCK6AboBtgEKIHZlcnRleC5vYXV0aDIuY2xpZW50X2lkX2FuZF9jb2RlElFUaGUgY2xpZW50X2lkIGFuZCB0aGUgY29kZSBwcm9wZXJ0eSBtYXkgbm90IGJlIHNldCBhcyB3ZWxsIGFzIHRoZSBjb2RlIGdyYW50IHR5cGUaPyFoYXModGhpcy5jbGllbnRfaWQpICYmICFoYXModGhpcy5jb2RlKSAmJiB0aGlzLmdyYW50X3R5cGUgIT0gMSKaAQoKVmVydGV4VHlwZRIbChdWRVJURVhfVFlQRV9VTlNQRUNJRklFRBAAEhYKElZFUlRFWF9UWVBFX0FDVElPThABEhcKE1ZFUlRFWF9UWVBFX0JST1dTRVIQAhIcChhWRVJURVhfVFlQRV9DUk9OX1RSSUdHRVIQAxIgChxWRVJURVhfVFlQRV9FWFRFUk5BTF9UUklHR0VSEAQ6wAG6SLwBGrkBCh92ZXJ0ZXgub2F1dGgyX2FuZF9jb2RlX2JpbmRpbmdzEkVUaGUgbmFtZXMgb2YgdGhlIG9hdXRoMiBzZXJ2aWNlcyBhbmQgdGhlIGNvZGUgYmluZGluZ3MgbXVzdCBiZSB1bmlxdWUaTyh0aGlzLm9hdXRoMi5tYXAodmFsLCB2YWwubmFtZSkgKyB0aGlzLmNvZGVfb2F1dGgyLm1hcCh2YWwsIHZhbC5uYW1lKSkudW5pcXVlKClCDgoMX2Rlc2NyaXB0aW9uQgcKBV9sb2dvQgkKB19jb25maWcixQEKC01UTFNTZXJ2aWNlEi0KBG5hbWUYASABKAlCH7pIHHIaEAEYZDIUXltfJGEtel1bXyRhLXowLTldKiQSIAoFbGFiZWwYAiABKAlCDLpICdgBAXIEEAEYZEgAiAEBEicKC2Rlc2NyaXB0aW9uGAMgASgJQg26SArYAQFyBRABGPoBSAGIAQESFQoIb3B0aW9uYWwYBCABKAhIAogBAUIICgZfbGFiZWxCDgoMX2Rlc2NyaXB0aW9uQgsKCV9vcHRpb25hbCLkAgoPVmFyaWFibGVTZXJ2aWNlEi0KBG5hbWUYASABKAlCH7pIHHIaEAEYZDIUXltfJGEtel1bXyRhLXowLTldKiQSHQoFbGFiZWwYAiABKAlCCbpIBnIEEAEYZEgAiAEBEicKC2Rlc2NyaXB0aW9uGAMgASgJQg26SArYAQFyBRABGPoBSAGIAQESSwoEdHlwZRgEIAEoDjIzLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLlZhcmlhYmxlU2VydmljZS5UeXBlQgi6SAWCAQIgABIVCghvcHRpb25hbBgFIAEoCEgCiAEBIk8KBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEg8KC1RZUEVfU0VDUkVUEAESDwoLVFlQRV9TVFJJTkcQAhIPCgtUWVBFX1NXSVRDSBADQggKBl9sYWJlbEIOCgxfZGVzY3JpcHRpb25CCwoJX29wdGlvbmFsIugMCg1PYXV0aDJTZXJ2aWNlEi0KBG5hbWUYASABKAlCH7pIHHIaEAEYZDIUXltfJGEtel1bXyRhLXowLTldKiQSIAoFbGFiZWwYAiABKAlCDLpICdgBAXIEEAEYZEgAiAEBEicKC2Rlc2NyaXB0aW9uGAMgASgJQg26SArYAQFyBRABGPoBSAGIAQESTAoKZ3JhbnRfdHlwZRgEIAEoDjIuLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLk9hdXRoMkdyYW50VHlwZUIIukgFggECIAASJQoGc2NvcGVzGAUgAygJQhW6SBKSAQ8IARD0AxgBIgZyBBABGGQSVAoLYXV0aF9tZXRob2QYBiABKA4yLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5PYXV0aDJBdXRoVHlwZUILukgI2AEBggECIABIAogBARJLCgNhbGcYByABKA4yLC5tb2NoYWJ1Z2FwaXMuYWRhcHQucGx1Z2lucy52MS5Qcml2YXRlS2V5QWxnQgu6SAjYAQGCAQIgAEgDiAEBEiUKCWNsaWVudF9pZBgIIAEoCUINukgK2AEBcgUQARj6AUgEiAEBElYKDnRva2VuX2VuZHBvaW50GAkgASgJQj66SDtyORALGIAgMjJeaHR0cHM6Ly9bYS16QS1aMC05Li1dKyg/OlwuW2EtekEtWl17Mix9KSg/Oi8uKik/JBI8CgRjb2RlGAogASgLMikubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuT2F1dGgyQ29kZUgFiAEBEhUKCG9wdGlvbmFsGAsgASgISAaIAQE6mge6SJYHGucBChJvYXV0aDIuYXV0aF9tZXRob2QShwFUaGUgYXV0aF9tZXRob2QgcHJvcGVydHkgbXVzdCBiZSBzZXQgaW4gY2FzZSBvZiBncmFudF90eXBlIE9BVVRIMl9HUkFOVF9UWVBFX0FVVEhPUklaQVRJT05fQ09ERSBvciBPQVVUSDJfR1JBTlRfVFlQRV9DTElFTlRfQ1JFREVOVElBTFMaR2hhcyh0aGlzLmF1dGhfbWV0aG9kKSA9PSAodGhpcy5ncmFudF90eXBlID09IDEgfHwgdGhpcy5ncmFudF90eXBlID09IDIpGsACCgpvYXV0aDIuYWxnEr4BVGhlIGFsZyBwcm9wZXJ0eSBtdXN0IGJlIHNldCBpbiBjYXNlIG9mIGdyYW50X3R5cGUgT0FVVEgyX0dSQU5UX1RZUEVfSldUX0JFQVJFUiwgT0FVVEgyX0dSQU5UX1RZUEVfU0FNTDJfQkVBUkVSIG9yIGF1dGhfbWV0aG9kIE9BVVRIMl9BVVRIX1RZUEVfUFJJVkFURV9LRVlfSldULCBPQVVUSDJfQVVUSF9UWVBFX1NBTUwyX0JFQVJFUhpxaGFzKHRoaXMuYWxnKSA9PSAodGhpcy5ncmFudF90eXBlID09IDMgfHwgdGhpcy5ncmFudF90eXBlID09IDQgfHwgdGhpcy5hdXRoX21ldGhvZCA9PSAzIHx8IHRoaXMuYXV0aF9tZXRob2QgPT0gNSkakQEKC29hdXRoMi5jb2RlElhUaGUgY29kZSBwcm9wZXJ0eSBtdXN0IGJlIHNldCBpbiBjYXNlIG9mIGdyYW50X3R5cGUgT0FVVEgyX0dSQU5UX1RZUEVfQVVUSE9SSVpBVElPTl9DT0RFGihoYXModGhpcy5jb2RlKSA9PSAodGhpcy5ncmFudF90eXBlID09IDEpGtIBCg9vYXV0aDIub3B0aW9uYWwSZlRoZSBvcHRpb25hbCBwcm9wZXJ0eSBjYW5ub3QgYmUgc2V0IHRvIHRydWUgaW4gY2FzZSBvZiBncmFudF90eXBlIE9BVVRIMl9HUkFOVF9UWVBFX0FVVEhPUklaQVRJT05fQ09ERRpXIWhhcyh0aGlzLm9wdGlvbmFsKSB8fCB0aGlzLmdyYW50X3R5cGUgIT0gMSB8fCAoIXRoaXMub3B0aW9uYWwgJiYgdGhpcy5ncmFudF90eXBlID09IDEpQggKBl9sYWJlbEIOCgxfZGVzY3JpcHRpb25CDgoMX2F1dGhfbWV0aG9kQgYKBF9hbGdCDAoKX2NsaWVudF9pZEIHCgVfY29kZUILCglfb3B0aW9uYWwiZgoRT2F1dGgyQ29kZUJpbmRpbmcSLQoEbmFtZRgBIAEoCUIfukgcchoQARhkMhReW18kYS16XVtfJGEtejAtOV0qJBIVCghvcHRpb25hbBgCIAEoCEgAiAEBQgsKCV9vcHRpb25hbCKWAwoKT2F1dGgyQ29kZRJVCg1hdXRoX2VuZHBvaW50GAEgASgJQj66SDtyORALGIAgMjJeaHR0cHM6Ly9bYS16QS1aMC05Li1dKyg/OlwuW2EtekEtWl17Mix9KSg/Oi8uKik/JBIaCgZpc3N1ZXIYAiABKAlCCrpIB3IFEAEYgCASUAoIandrc191cmkYAyABKAlCPrpIO3I5EAsYgCAyMl5odHRwczovL1thLXpBLVowLTkuLV0rKD86XC5bYS16QS1aXXsyLH0pKD86Ly4qKT8kEngKEWFkZGl0aW9uYWxfcGFyYW1zGAQgAygLMj8ubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuT2F1dGgyQ29kZS5BZGRpdGlvbmFsUGFyYW1zRW50cnlCHLpIGZoBFggAEDIiB3IFEAEY+gEqB3IFEAEY+gESEAoIdXNlX3BrY2UYBSABKAgaNwoVQWRkaXRpb25hbFBhcmFtc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEqSwoNUHJpdmF0ZUtleUFsZxIfChtQUklWQVRFX0tFWV9BTEdfVU5TUEVDSUZJRUQQABIZChVQUklWQVRFX0tFWV9BTEdfUlMyNTYQASrOAQoPT2F1dGgyR3JhbnRUeXBlEiEKHU9BVVRIMl9HUkFOVF9UWVBFX1VOU1BFQ0lGSUVEEAASKAokT0FVVEgyX0dSQU5UX1RZUEVfQVVUSE9SSVpBVElPTl9DT0RFEAESKAokT0FVVEgyX0dSQU5UX1RZUEVfQ0xJRU5UX0NSRURFTlRJQUxTEAISIAocT0FVVEgyX0dSQU5UX1RZUEVfSldUX0JFQVJFUhADEiIKHk9BVVRIMl9HUkFOVF9UWVBFX1NBTUwyX0JFQVJFUhAEKs0BCg5PYXV0aDJBdXRoVHlwZRIgChxPQVVUSDJfQVVUSF9UWVBFX1VOU1BFQ0lGSUVEEAASGgoWT0FVVEgyX0FVVEhfVFlQRV9CQVNJQxABEhkKFU9BVVRIMl9BVVRIX1RZUEVfRk9STRACEiQKIE9BVVRIMl9BVVRIX1RZUEVfUFJJVkFURV9LRVlfSldUEAMSGQoVT0FVVEgyX0FVVEhfVFlQRV9NVExTEAQSIQodT0FVVEgyX0FVVEhfVFlQRV9TQU1MMl9CRUFSRVIQBTKvAgoNUGx1Z2luU2VydmljZRKYAQoMVXBsb2FkUGx1Z2luEjIubW9jaGFidWdhcGlzLmFkYXB0LnBsdWdpbnMudjEuVXBsb2FkUGx1Z2luUmVxdWVzdBozLm1vY2hhYnVnYXBpcy5hZGFwdC5wbHVnaW5zLnYxLlVwbG9hZFBsdWdpblJlc3BvbnNlIh2C0+STAhc6ASoiEi92MS9wbHVnaW5zL3VwbG9hZCgBGoIBykEWYWRhcHQubW9jaGFidWdhcGlzLmNvbdJBZmh0dHBzOi8vd3d3Lm1vY2hhYnVnYXBpcy5jb20vYXV0aC9hZGFwdC9wbHVnaW5zLGh0dHBzOi8vd3d3Lm1vY2hhYnVnYXBpcy5jb20vYXV0aC9hZGFwdC9wbHVnaW5zLnVwbG9hZGIGcHJvdG8z",[Vo,Xo,Bo]),Nn=J(we,0);var ne=J(we,3),Mn=J(we,4);var Hn=Zo(we,0);import{execSync as Xa}from"child_process";import me from"fs";import{mkdirp as Sa}from"mkdirp";import S from"path";import Jo from"chalk";import ve from"fs";import{mkdirp as Va}from"mkdirp";import Ue from"path";import{fileURLToPath as Ca}from"url";function y(e){return ve.readFileSync(Ue.join(Ue.dirname(Ca(import.meta.url)),"..","assets",e)).toString()}function h(e,n){let t=Ue.dirname(e);Va.sync(t),ve.writeFileSync(e,n)}function ge(e){let n=Ue.resolve(e);if(!ve.existsSync(n))return console.error(Jo.red(`Invalid command: Manifest file not found at ${n}.`)),null;try{let t=ve.readFileSync(n).toString();return yo(ne,t)}catch(t){return console.error(Jo.red("An error occurred while reading the manifest")),console.error(t.message),null}}function ke(e){return(e.charAt(0).toUpperCase()+e.substring(1)).replace("_"," ")}function Ba(e){switch(e){case"action":return"VERTEX_TYPE_ACTION";case"cron-trigger":return"VERTEX_TYPE_CRON_TRIGGER";case"external-trigger":return"VERTEX_TYPE_EXTERNAL_TRIGGER";case"browser":return"VERTEX_TYPE_BROWSER";default:throw new Error("The node type is invalid")}}function De(e,n,t,o,s,a){let i=S.join(e,"src","vertices",n);if(me.existsSync(i))throw new Error(`The folder for the new vertex: ${i} already exists`);Sa.sync(i);let r=S.join(i,"executor.ts"),l={name:n,label:ke(n),description:`The better description of what ${n} is doing, the better it is for both AI and humans`,type:Ba(t),metadata:S.join("src","vertices",n,"metadata.json"),configurator:o,mtls:[],codeOauth2:[],oauth2:[],variables:[]};if(a==="react"){Xa("npm install react react-dom @types/react @types/react-dom",{cwd:e,stdio:"inherit"});let u=S.join(e,"src/vertices",n,"ui");o&&(h(S.join(u,"configurator.App.tsx"),y("configurator.App.tsx")),h(S.join(u,"configurator.main.tsx"),y("configurator.main.tsx")),h(S.join(u,"configurator.ssg.tsx"),y("configurator.ssg.tsx"))),t==="browser"&&(h(S.join(u,"executor.App.tsx"),y("executor.App.tsx")),h(S.join(u,"executor.main.tsx"),y("executor.main.tsx")),h(S.join(u,"executor.ssg.tsx"),y("executor.ssg.tsx"))),me.existsSync(S.join(e,"build-client.js"))||h(S.join(e,"build-client.js"),y("build-client.js"))}switch(l.type){case"VERTEX_TYPE_ACTION":h(r,y("executor_action.ts"));break;case"VERTEX_TYPE_BROWSER":a==="react"?h(r,y("executor_browser_react.tsx").replaceAll("___VERTEX_NAME___",n)):h(r,y("executor_browser_none.ts"));break;case"VERTEX_TYPE_EXTERNAL_TRIGGER":h(r,y("executor_external_trigger.ts"));break;case"VERTEX_TYPE_CRON_TRIGGER":h(r,y("executor_cron_trigger.ts"));break;default:throw new Error("The vertex type is invalid")}me.writeFileSync(S.join(e,"src","executors.ts"),Wo([n,...s.map(u=>u.name)],"ExecutorEnvironment"));let d={complete:!0,receivers:[{name:"input",description:"Default input receiver",bindings:[]}],transmitters:[{name:"output",description:"Default output transmitter",signals:[],failure:!1}],procedures:[],streams:[]};return l.type==="VERTEX_TYPE_CRON_TRIGGER"&&(d.cronSchedule="/5 * * * * *"),o&&(a==="react"?h(S.join(i,"configurator.ts"),y("configurator_react.tsx").replaceAll("___VERTEX_NAME___",n)):h(S.join(i,"configurator.ts"),y("configurator_none.ts")),d.complete=!1,me.writeFileSync(S.join(e,"src","configurators.ts"),Wo([n,...s.filter(u=>u.configurator).map(u=>u.name)],"ConfiguratorEnvironment"))),me.writeFileSync(S.join(i,"metadata.json"),JSON.stringify(d,null,2)),l}function Wo(e,n){let t=e.map(o=>`import ${o} from './vertices/${o}/${n==="ExecutorEnvironment"?"executor":"configurator"}';`).join(`
|
|
4
|
+
`);return`/**
|
|
2338
5
|
* ---------------------------------------------------------------------------
|
|
2339
6
|
* THIS FILE IS AUTOGENERATED - DO NOT EDIT MANUALLY
|
|
2340
7
|
* ---------------------------------------------------------------------------
|
|
@@ -2349,917 +16,15 @@ function generateExport(vertices, env) {
|
|
|
2349
16
|
* ---------------------------------------------------------------------------
|
|
2350
17
|
*/
|
|
2351
18
|
import { selectVertex } from '@mochabug/adapt-plugin-toolkit/router';
|
|
2352
|
-
${
|
|
19
|
+
${t}
|
|
2353
20
|
|
|
2354
21
|
export default {
|
|
2355
|
-
async fetch(req: Request, env: ${
|
|
2356
|
-
return await selectVertex(req, env, ctx, { ${
|
|
22
|
+
async fetch(req: Request, env: ${n}, ctx: ExecutionContext): Promise<Response> {
|
|
23
|
+
return await selectVertex(req, env, ctx, { ${e.join(", ")} });
|
|
2357
24
|
},
|
|
2358
|
-
};`;
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
// you may not use this file except in compliance with the License.
|
|
2365
|
-
// You may obtain a copy of the License at
|
|
2366
|
-
//
|
|
2367
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2368
|
-
//
|
|
2369
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
2370
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2371
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2372
|
-
// See the License for the specific language governing permissions and
|
|
2373
|
-
// limitations under the License.
|
|
2374
|
-
async function add(manifest) {
|
|
2375
|
-
const vertexName = await input({
|
|
2376
|
-
message: 'Type a new unused vertex name',
|
|
2377
|
-
transformer: (val) => {
|
|
2378
|
-
return val.trim();
|
|
2379
|
-
},
|
|
2380
|
-
validate: (val) => {
|
|
2381
|
-
val = val.trim();
|
|
2382
|
-
if (manifest.vertices.filter((item) => item.name === val).length > 0) {
|
|
2383
|
-
return false;
|
|
2384
|
-
}
|
|
2385
|
-
return /^[_a-z][_a-z0-9]*$/.test(val);
|
|
2386
|
-
}
|
|
2387
|
-
});
|
|
2388
|
-
const vertexType = await select({
|
|
2389
|
-
message: 'Choose your vertex type',
|
|
2390
|
-
choices: [
|
|
2391
|
-
{
|
|
2392
|
-
name: 'action',
|
|
2393
|
-
value: 'action',
|
|
2394
|
-
description: 'An action is a vertex that performs a task, such as sending an email or updating a database.'
|
|
2395
|
-
},
|
|
2396
|
-
{
|
|
2397
|
-
name: 'browser',
|
|
2398
|
-
value: 'browser',
|
|
2399
|
-
description: 'A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button.'
|
|
2400
|
-
},
|
|
2401
|
-
{
|
|
2402
|
-
name: 'cron-trigger',
|
|
2403
|
-
value: 'cron-trigger',
|
|
2404
|
-
description: 'A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM.'
|
|
2405
|
-
},
|
|
2406
|
-
{
|
|
2407
|
-
name: 'external-trigger',
|
|
2408
|
-
value: 'external-trigger',
|
|
2409
|
-
description: 'An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue.'
|
|
2410
|
-
}
|
|
2411
|
-
]
|
|
2412
|
-
});
|
|
2413
|
-
const hasConfigurator = await confirm({
|
|
2414
|
-
message: 'Need a configurator for the vertex?'
|
|
2415
|
-
});
|
|
2416
|
-
console.log(chalk.magenta('Creating new vertex templates...'));
|
|
2417
|
-
const vertex = addVertex('.', vertexName, vertexType, hasConfigurator, manifest.vertices);
|
|
2418
|
-
manifest.vertices.push(vertex);
|
|
2419
|
-
if (!manifest.configurators && vertex.configurator) {
|
|
2420
|
-
manifest.configurators = 'dist/configurators.js';
|
|
2421
|
-
}
|
|
2422
|
-
console.log(chalk.magenta('Updating manifest...'));
|
|
2423
|
-
fs.writeFileSync('manifest.json', Manifest.toJsonString(manifest, {
|
|
2424
|
-
enumAsInteger: false,
|
|
2425
|
-
prettySpaces: 2,
|
|
2426
|
-
emitDefaultValues: false
|
|
2427
|
-
}));
|
|
2428
|
-
console.log(chalk.bgGreen('Success'));
|
|
2429
|
-
}
|
|
2430
|
-
|
|
2431
|
-
// Copyright 2023, mochabug AB
|
|
2432
|
-
//
|
|
2433
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2434
|
-
// you may not use this file except in compliance with the License.
|
|
2435
|
-
// You may obtain a copy of the License at
|
|
2436
|
-
//
|
|
2437
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2438
|
-
//
|
|
2439
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
2440
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2441
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2442
|
-
// See the License for the specific language governing permissions and
|
|
2443
|
-
// limitations under the License.
|
|
2444
|
-
async function init(dir) {
|
|
2445
|
-
const name = await input({
|
|
2446
|
-
message: 'Type plugin name',
|
|
2447
|
-
transformer: (val) => {
|
|
2448
|
-
return val.trim().toLowerCase();
|
|
2449
|
-
},
|
|
2450
|
-
validate: (val) => {
|
|
2451
|
-
return /^[_a-z][_a-z0-9]*$/.test(val);
|
|
2452
|
-
}
|
|
2453
|
-
});
|
|
2454
|
-
const vertexType = await select({
|
|
2455
|
-
message: 'Choose your vertex type',
|
|
2456
|
-
choices: [
|
|
2457
|
-
{
|
|
2458
|
-
name: 'action',
|
|
2459
|
-
value: 'action',
|
|
2460
|
-
description: 'An action is a vertex that performs a task, such as sending an email or updating a database.'
|
|
2461
|
-
},
|
|
2462
|
-
{
|
|
2463
|
-
name: 'browser',
|
|
2464
|
-
value: 'browser',
|
|
2465
|
-
description: 'A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button.'
|
|
2466
|
-
},
|
|
2467
|
-
{
|
|
2468
|
-
name: 'cron-trigger',
|
|
2469
|
-
value: 'cron-trigger',
|
|
2470
|
-
description: 'A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM.'
|
|
2471
|
-
},
|
|
2472
|
-
{
|
|
2473
|
-
name: 'external-trigger',
|
|
2474
|
-
value: 'external-trigger',
|
|
2475
|
-
description: 'An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue.'
|
|
2476
|
-
}
|
|
2477
|
-
]
|
|
2478
|
-
});
|
|
2479
|
-
const vertexName = await input({
|
|
2480
|
-
message: 'Type a new unused vertex name',
|
|
2481
|
-
transformer: (val) => {
|
|
2482
|
-
return val.trim().toLowerCase();
|
|
2483
|
-
},
|
|
2484
|
-
validate: (val) => {
|
|
2485
|
-
return /^[_a-z][_a-z0-9]*$/.test(val);
|
|
2486
|
-
}
|
|
2487
|
-
});
|
|
2488
|
-
const hasConfigurator = await confirm({
|
|
2489
|
-
message: 'Need a configurator for the vertex?'
|
|
2490
|
-
});
|
|
2491
|
-
mkdirp.sync(dir);
|
|
2492
|
-
const cwd = !path.isAbsolute(dir) ? path.join(process.cwd(), dir) : dir;
|
|
2493
|
-
// Creating a minimal npm package
|
|
2494
|
-
console.log(chalk.magenta('Creating package.json...'));
|
|
2495
|
-
const defPackage = {
|
|
2496
|
-
name: name,
|
|
2497
|
-
version: '',
|
|
2498
|
-
private: true,
|
|
2499
|
-
type: 'module',
|
|
2500
|
-
scripts: {
|
|
2501
|
-
build: 'rollup -c rollup.config.js',
|
|
2502
|
-
add: 'adaptkit add',
|
|
2503
|
-
publish: 'npm run build && adaptkit publish',
|
|
2504
|
-
emulate: 'npm run build && adaptkit emulate'
|
|
2505
|
-
}
|
|
2506
|
-
};
|
|
2507
|
-
writeFile(path.join(cwd, 'package.json'), JSON.stringify(defPackage, null, 2));
|
|
2508
|
-
writeFile(path.join(cwd, 'README.md'), readAsset('readme.md'));
|
|
2509
|
-
writeFile(path.join(cwd, 'LICENSE.md'), readAsset('license.md'));
|
|
2510
|
-
execSync('npm install --save-dev @mochabug/adapt-plugin-typings typescript ts-node tslib rollup @rollup/plugin-typescript @rollup/plugin-terser @rollup/plugin-node-resolve @rollup/plugin-commonjs', {
|
|
2511
|
-
cwd: cwd,
|
|
2512
|
-
stdio: 'inherit'
|
|
2513
|
-
});
|
|
2514
|
-
execSync('npm install @mochabug/adapt-plugin-toolkit', {
|
|
2515
|
-
cwd: cwd,
|
|
2516
|
-
stdio: 'inherit'
|
|
2517
|
-
});
|
|
2518
|
-
console.log(chalk.magenta('Setting up project structure...'));
|
|
2519
|
-
writeFile(path.join(cwd, 'tsconfig.json'), readAsset('tsconf.json'));
|
|
2520
|
-
writeFile(path.join(cwd, '.gitignore'), readAsset('gitignore'));
|
|
2521
|
-
writeFile(path.join(cwd, 'rollup.config.js'), readAsset('rollup.config.ts'));
|
|
2522
|
-
const vertex = addVertex(cwd, vertexName, vertexType, hasConfigurator, []);
|
|
2523
|
-
console.log(chalk.magenta('Creating manifest...'));
|
|
2524
|
-
const manifest = {
|
|
2525
|
-
name: name,
|
|
2526
|
-
organization: '00000000-0000-0000-0000-000000000000',
|
|
2527
|
-
version: '0.0.1-beta.1',
|
|
2528
|
-
label: labelize(name),
|
|
2529
|
-
description: `A nice description of what ${name} does`,
|
|
2530
|
-
author: 'John Doe',
|
|
2531
|
-
bugs: 'bugs@foobar.com',
|
|
2532
|
-
homepage: `https://www.foobar.com`,
|
|
2533
|
-
repository: `https://github.com`,
|
|
2534
|
-
vertices: [vertex],
|
|
2535
|
-
executors: 'dist/executors.js',
|
|
2536
|
-
pluginVariables: [],
|
|
2537
|
-
pluginOauth2: [],
|
|
2538
|
-
pluginMtls: []
|
|
2539
|
-
};
|
|
2540
|
-
if (!vertex.metadata) {
|
|
2541
|
-
throw new Error('This cannot happen');
|
|
2542
|
-
}
|
|
2543
|
-
if (vertex.configurator) {
|
|
2544
|
-
manifest.configurators = 'dist/configurators.js';
|
|
2545
|
-
}
|
|
2546
|
-
// Write out the actual manifest and we're done
|
|
2547
|
-
fs.writeFileSync(path.join(cwd, 'manifest.json'), Manifest.toJsonString(manifest, {
|
|
2548
|
-
enumAsInteger: false,
|
|
2549
|
-
prettySpaces: 2,
|
|
2550
|
-
emitDefaultValues: false
|
|
2551
|
-
}));
|
|
2552
|
-
console.log(chalk.bgGreen('Success'));
|
|
2553
|
-
}
|
|
2554
|
-
|
|
2555
|
-
// Copyright 2023, mochabug AB
|
|
2556
|
-
//
|
|
2557
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2558
|
-
// you may not use this file except in compliance with the License.
|
|
2559
|
-
// You may obtain a copy of the License at
|
|
2560
|
-
//
|
|
2561
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2562
|
-
//
|
|
2563
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
2564
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2565
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2566
|
-
// See the License for the specific language governing permissions and
|
|
2567
|
-
// limitations under the License.
|
|
2568
|
-
const OAUTH_CALLBACK_PORT = 51421;
|
|
2569
|
-
const PORT_RANGE = 5;
|
|
2570
|
-
const OAUTH_SCOPE = 'https://www.mochabugapis.com/auth/adapt/plugins.upload';
|
|
2571
|
-
const AUDIENCE = 'https://adapt-dev.mochabugapis.com';
|
|
2572
|
-
function createCodeUrl({ clientId, redirectUri, scope, state, authUrl, codeChallenge, audience }) {
|
|
2573
|
-
const res = new URL(authUrl);
|
|
2574
|
-
res.searchParams.set('response_type', 'code');
|
|
2575
|
-
res.searchParams.set('client_id', clientId);
|
|
2576
|
-
res.searchParams.set('audience', audience);
|
|
2577
|
-
res.searchParams.set('redirect_uri', redirectUri);
|
|
2578
|
-
res.searchParams.set('scope', scope);
|
|
2579
|
-
res.searchParams.set('state', state);
|
|
2580
|
-
res.searchParams.set('code_challenge', codeChallenge);
|
|
2581
|
-
res.searchParams.set('code_challenge_method', 'S256');
|
|
2582
|
-
return res.toString();
|
|
2583
|
-
}
|
|
2584
|
-
function createExchangeBody({ redirectUri, codeVerifier, clientId, code }) {
|
|
2585
|
-
const res = new URLSearchParams();
|
|
2586
|
-
res.set('grant_type', 'authorization_code');
|
|
2587
|
-
res.set('code_verifier', codeVerifier);
|
|
2588
|
-
res.set('client_id', clientId);
|
|
2589
|
-
res.set('code', code);
|
|
2590
|
-
res.set('redirect_uri', redirectUri);
|
|
2591
|
-
return res.toString();
|
|
2592
|
-
}
|
|
2593
|
-
function startServer(app, attempt = 0) {
|
|
2594
|
-
return new Promise((resolve, reject) => {
|
|
2595
|
-
// Calculate the current port to try based on the base port and the attempt number.
|
|
2596
|
-
const currentPort = OAUTH_CALLBACK_PORT + attempt;
|
|
2597
|
-
// Attempt to listen on the current port.
|
|
2598
|
-
const server = app.listen(currentPort, () => {
|
|
2599
|
-
console.log(chalk.green.bold(`Server running on http://localhost:${currentPort} to listen to OAuth2 callbacks`));
|
|
2600
|
-
resolve({ server, port: currentPort });
|
|
2601
|
-
});
|
|
2602
|
-
// Handle the error event when the server fails to start.
|
|
2603
|
-
server.on('error', (err) => {
|
|
2604
|
-
if (err.code === 'EADDRINUSE' && attempt < PORT_RANGE - 1) {
|
|
2605
|
-
// If the address is in use, close the current server and try the next port.
|
|
2606
|
-
console.log(chalk.yellow.bold(`Port ${currentPort} is in use, trying next available port.`));
|
|
2607
|
-
server.close();
|
|
2608
|
-
resolve(startServer(app, attempt + 1));
|
|
2609
|
-
}
|
|
2610
|
-
else {
|
|
2611
|
-
reject(err);
|
|
2612
|
-
}
|
|
2613
|
-
});
|
|
2614
|
-
});
|
|
2615
|
-
}
|
|
2616
|
-
// Define constants or import them
|
|
2617
|
-
const LOGGING_PREFIX = '[waitForConsent]';
|
|
2618
|
-
// Returns the access token
|
|
2619
|
-
async function waitForConsent(issuerUrl, errorUrl, clientId) {
|
|
2620
|
-
console.info(`${LOGGING_PREFIX} Starting OAuth2 consent workflow for client: ${clientId}`);
|
|
2621
|
-
const authUrl = `${issuerUrl}/oauth2/auth`;
|
|
2622
|
-
const tokenUrl = `${issuerUrl}/oauth2/token`;
|
|
2623
|
-
console.info(`${LOGGING_PREFIX} Authorization URL: ${authUrl}`);
|
|
2624
|
-
console.info(`${LOGGING_PREFIX} Token URL: ${tokenUrl}`);
|
|
2625
|
-
const app = express();
|
|
2626
|
-
const state = randomBytes(32).toString('hex');
|
|
2627
|
-
console.info(`${LOGGING_PREFIX} Generated state for CSRF protection`);
|
|
2628
|
-
const localUrls = {
|
|
2629
|
-
base: ``,
|
|
2630
|
-
redirect: ``
|
|
2631
|
-
};
|
|
2632
|
-
const { code_verifier, code_challenge } = await pkceChallenge();
|
|
2633
|
-
console.info(`${LOGGING_PREFIX} PKCE Challenge generated`);
|
|
2634
|
-
let resolveToken;
|
|
2635
|
-
let rejectToken;
|
|
2636
|
-
let token;
|
|
2637
|
-
const tokenPromise = new Promise((resolve, reject) => {
|
|
2638
|
-
resolveToken = resolve;
|
|
2639
|
-
rejectToken = reject;
|
|
2640
|
-
});
|
|
2641
|
-
app.get('/', async (_, res) => {
|
|
2642
|
-
const codeUrl = createCodeUrl({
|
|
2643
|
-
authUrl,
|
|
2644
|
-
clientId,
|
|
2645
|
-
redirectUri: localUrls.redirect,
|
|
2646
|
-
scope: OAUTH_SCOPE,
|
|
2647
|
-
state,
|
|
2648
|
-
codeChallenge: code_challenge,
|
|
2649
|
-
audience: AUDIENCE
|
|
2650
|
-
});
|
|
2651
|
-
console.info(`${LOGGING_PREFIX} Redirecting to code URL for user consent`);
|
|
2652
|
-
res.redirect(codeUrl);
|
|
2653
|
-
});
|
|
2654
|
-
// We need to use callbacks to the success / failed pages so that we don't
|
|
2655
|
-
// expose the code longer than necessary.
|
|
2656
|
-
app.get('/callback', async (req, res) => {
|
|
2657
|
-
if ('error' in req.query) {
|
|
2658
|
-
console.error(`${LOGGING_PREFIX} OAuth Error: error in callback`);
|
|
2659
|
-
const queryString = req.url.split('?')[1];
|
|
2660
|
-
res.redirect(`${errorUrl}?${queryString}`);
|
|
2661
|
-
rejectToken();
|
|
2662
|
-
return;
|
|
2663
|
-
}
|
|
2664
|
-
if (req.query.state !== state) {
|
|
2665
|
-
console.error(`${LOGGING_PREFIX} OAuth Error: Invalid state. Received state does not match.`);
|
|
2666
|
-
const errorDescription = encodeURIComponent('Invalid state parameter.');
|
|
2667
|
-
res.redirect(`${errorUrl}?error=invalid_request&error_description=${errorDescription}`);
|
|
2668
|
-
rejectToken();
|
|
2669
|
-
return;
|
|
2670
|
-
}
|
|
2671
|
-
console.info(`${LOGGING_PREFIX} OAuth state validated`);
|
|
2672
|
-
const body = createExchangeBody({
|
|
2673
|
-
clientId,
|
|
2674
|
-
redirectUri: localUrls.redirect,
|
|
2675
|
-
codeVerifier: code_verifier,
|
|
2676
|
-
code: req.query.code
|
|
2677
|
-
});
|
|
2678
|
-
try {
|
|
2679
|
-
console.info(`${LOGGING_PREFIX} Exchanging code for token`);
|
|
2680
|
-
const response = await fetch(tokenUrl, {
|
|
2681
|
-
method: 'POST',
|
|
2682
|
-
headers: {
|
|
2683
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
2684
|
-
Accept: 'application/json'
|
|
2685
|
-
},
|
|
2686
|
-
body
|
|
2687
|
-
});
|
|
2688
|
-
// Redirect to error
|
|
2689
|
-
if (!response.ok) {
|
|
2690
|
-
console.error(`${LOGGING_PREFIX} OAuth Error: could not exchange code for token`);
|
|
2691
|
-
const queryString = response.url.split('?')[1];
|
|
2692
|
-
res.redirect(`${errorUrl}?${queryString}`);
|
|
2693
|
-
rejectToken();
|
|
2694
|
-
return;
|
|
2695
|
-
}
|
|
2696
|
-
const data = (await response.json());
|
|
2697
|
-
console.info(`${LOGGING_PREFIX} Token exchange successful`);
|
|
2698
|
-
console.info(`${LOGGING_PREFIX} Token exchange successful. Details: `, {
|
|
2699
|
-
expires_in: data.expires_in,
|
|
2700
|
-
scope: data.scope,
|
|
2701
|
-
type: data.token_type,
|
|
2702
|
-
token: '<secret>'
|
|
2703
|
-
});
|
|
2704
|
-
token = data.access_token;
|
|
2705
|
-
res.redirect('/success');
|
|
2706
|
-
}
|
|
2707
|
-
catch (error) {
|
|
2708
|
-
console.error(`${LOGGING_PREFIX} Error exchanging token: ${error}`);
|
|
2709
|
-
res.redirect(`${errorUrl}?error=unkown&error_description=${encodeURIComponent('Unknown error during token exchange')}`);
|
|
2710
|
-
rejectToken();
|
|
2711
|
-
}
|
|
2712
|
-
});
|
|
2713
|
-
app.get('/success', (_, res) => {
|
|
2714
|
-
res.send(readAsset('success_page.html'));
|
|
2715
|
-
if (!token) {
|
|
2716
|
-
console.error('Token is undefined');
|
|
2717
|
-
rejectToken();
|
|
2718
|
-
}
|
|
2719
|
-
resolveToken();
|
|
2720
|
-
});
|
|
2721
|
-
let server;
|
|
2722
|
-
try {
|
|
2723
|
-
console.info(`${LOGGING_PREFIX} Starting local server to handle callbacks`);
|
|
2724
|
-
const serverStart = await startServer(app);
|
|
2725
|
-
server = serverStart.server;
|
|
2726
|
-
localUrls.base = `http://localhost:${serverStart.port}`;
|
|
2727
|
-
localUrls.redirect = `${localUrls.base}/callback`;
|
|
2728
|
-
console.info(`${LOGGING_PREFIX} Server started on ${localUrls.base}`);
|
|
2729
|
-
}
|
|
2730
|
-
catch (e) {
|
|
2731
|
-
console.error(`${LOGGING_PREFIX} Error starting server: ${e}`);
|
|
2732
|
-
return;
|
|
2733
|
-
}
|
|
2734
|
-
try {
|
|
2735
|
-
console.info(`${LOGGING_PREFIX} Opening user consent page`);
|
|
2736
|
-
await open(localUrls.base);
|
|
2737
|
-
console.info(`${LOGGING_PREFIX} Waiting for user consent...`);
|
|
2738
|
-
await tokenPromise;
|
|
2739
|
-
console.info(`${LOGGING_PREFIX} OAuth consent workflow completed successfully`);
|
|
2740
|
-
if (!token) {
|
|
2741
|
-
console.error('Token is undefined');
|
|
2742
|
-
}
|
|
2743
|
-
return token;
|
|
2744
|
-
}
|
|
2745
|
-
catch (error) {
|
|
2746
|
-
console.error(`${LOGGING_PREFIX} Error in OAuth2 flow: ${error}`);
|
|
2747
|
-
return undefined;
|
|
2748
|
-
}
|
|
2749
|
-
finally {
|
|
2750
|
-
console.info(`${LOGGING_PREFIX} Closing the server...`);
|
|
2751
|
-
server.closeAllConnections();
|
|
2752
|
-
server.close();
|
|
2753
|
-
console.info(`${LOGGING_PREFIX} Server closed`);
|
|
2754
|
-
}
|
|
2755
|
-
}
|
|
2756
|
-
|
|
2757
|
-
/**
|
|
2758
|
-
* PluginService provides a service for uploading a plugin.
|
|
2759
|
-
*
|
|
2760
|
-
* @generated from protobuf service mochabugapis.adapt.plugins.v1.PluginService
|
|
2761
|
-
*/
|
|
2762
|
-
class PluginServiceClient {
|
|
2763
|
-
_transport;
|
|
2764
|
-
typeName = PluginService.typeName;
|
|
2765
|
-
methods = PluginService.methods;
|
|
2766
|
-
options = PluginService.options;
|
|
2767
|
-
constructor(_transport) {
|
|
2768
|
-
this._transport = _transport;
|
|
2769
|
-
}
|
|
2770
|
-
/**
|
|
2771
|
-
* UploadPlugin is a streaming RPC method that allows uploading a plugin in
|
|
2772
|
-
* chunks. The client can send multiple UploadPluginRequest messages, and the
|
|
2773
|
-
* server will respond with a single UploadPluginResponse after processing all
|
|
2774
|
-
* requests.
|
|
2775
|
-
*
|
|
2776
|
-
* @generated from protobuf rpc: UploadPlugin(stream mochabugapis.adapt.plugins.v1.UploadPluginRequest) returns (mochabugapis.adapt.plugins.v1.UploadPluginResponse);
|
|
2777
|
-
*/
|
|
2778
|
-
uploadPlugin(options) {
|
|
2779
|
-
const method = this.methods[0], opt = this._transport.mergeOptions(options);
|
|
2780
|
-
return stackIntercept("clientStreaming", this._transport, method, opt);
|
|
2781
|
-
}
|
|
2782
|
-
}
|
|
2783
|
-
|
|
2784
|
-
// Copyright 2023, mochabug AB
|
|
2785
|
-
//
|
|
2786
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2787
|
-
// you may not use this file except in compliance with the License.
|
|
2788
|
-
// You may obtain a copy of the License at
|
|
2789
|
-
//
|
|
2790
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2791
|
-
//
|
|
2792
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
2793
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2794
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2795
|
-
// See the License for the specific language governing permissions and
|
|
2796
|
-
// limitations under the License.
|
|
2797
|
-
async function resize(filepath, height, width) {
|
|
2798
|
-
const extname = path.extname(filepath);
|
|
2799
|
-
switch (extname) {
|
|
2800
|
-
case '.avif':
|
|
2801
|
-
return await sharp(filepath).resize(height, width).avif().toBuffer();
|
|
2802
|
-
case '.gif':
|
|
2803
|
-
return await sharp(filepath).resize(height, width).gif().toBuffer();
|
|
2804
|
-
case '.jpg':
|
|
2805
|
-
case '.jpeg':
|
|
2806
|
-
case '.jfif':
|
|
2807
|
-
case '.pjpeg':
|
|
2808
|
-
case '.pjp':
|
|
2809
|
-
return await sharp(filepath).resize(height, width).jpeg().toBuffer();
|
|
2810
|
-
case '.png':
|
|
2811
|
-
return await sharp(filepath).resize(height, width).png().toBuffer();
|
|
2812
|
-
case '.svg':
|
|
2813
|
-
return fs.readFileSync(filepath);
|
|
2814
|
-
case '.webp':
|
|
2815
|
-
return await sharp(filepath).resize(height, width).webp().toBuffer();
|
|
2816
|
-
}
|
|
2817
|
-
throw new Error('Invalid logotype');
|
|
2818
|
-
}
|
|
2819
|
-
function isPathSafe(filePath) {
|
|
2820
|
-
const currentWorkingDir = path.resolve('.');
|
|
2821
|
-
const absoluteFilePath = path.resolve(filePath);
|
|
2822
|
-
return absoluteFilePath.startsWith(currentWorkingDir);
|
|
2823
|
-
}
|
|
2824
|
-
function folderExists(folderPath) {
|
|
2825
|
-
try {
|
|
2826
|
-
const absolutePath = path.resolve(folderPath);
|
|
2827
|
-
if (fs.existsSync(absolutePath)) {
|
|
2828
|
-
const stats = fs.statSync(absolutePath);
|
|
2829
|
-
return stats.isDirectory();
|
|
2830
|
-
}
|
|
2831
|
-
else {
|
|
2832
|
-
return false;
|
|
2833
|
-
}
|
|
2834
|
-
}
|
|
2835
|
-
catch (err) {
|
|
2836
|
-
console.error('Error checking if folder exists:', err);
|
|
2837
|
-
return false;
|
|
2838
|
-
}
|
|
2839
|
-
}
|
|
2840
|
-
function createArchive(folder) {
|
|
2841
|
-
return new Promise((resolve, reject) => {
|
|
2842
|
-
if (!folderExists(folder)) {
|
|
2843
|
-
reject(`The folder ${folder} does not exist`);
|
|
2844
|
-
}
|
|
2845
|
-
const archive = archiver('tar', {
|
|
2846
|
-
gzip: true, // Use gzip compression
|
|
2847
|
-
zlib: { level: 9 } // Sets the compression level.
|
|
2848
|
-
});
|
|
2849
|
-
archive.on('error', (err) => {
|
|
2850
|
-
reject(err);
|
|
2851
|
-
});
|
|
2852
|
-
const buffers = [];
|
|
2853
|
-
const bufferStream = new PassThrough();
|
|
2854
|
-
bufferStream.on('data', (data) => buffers.push(data));
|
|
2855
|
-
bufferStream.on('end', () => {
|
|
2856
|
-
const res = Buffer.concat(buffers);
|
|
2857
|
-
console.log(`${folder} have been compressed successfully into a buffer.`);
|
|
2858
|
-
resolve(res); // Resolve the promise with the final buffer
|
|
2859
|
-
});
|
|
2860
|
-
archive.pipe(bufferStream);
|
|
2861
|
-
fg(path.join(folder, '**', '*'))
|
|
2862
|
-
.then((paths) => {
|
|
2863
|
-
for (let filepath of paths) {
|
|
2864
|
-
if (fs.statSync(filepath).isFile()) {
|
|
2865
|
-
const relativePath = path.relative(folder, filepath);
|
|
2866
|
-
archive.file(filepath, { name: relativePath });
|
|
2867
|
-
}
|
|
2868
|
-
}
|
|
2869
|
-
archive.finalize();
|
|
2870
|
-
})
|
|
2871
|
-
.catch((err) => reject(err));
|
|
2872
|
-
});
|
|
2873
|
-
}
|
|
2874
|
-
async function sendPlugin(manifest, client, metadata) {
|
|
2875
|
-
console.log('Sending the plugin to the server');
|
|
2876
|
-
const stream = client.uploadPlugin({ meta: metadata });
|
|
2877
|
-
const lookup = {};
|
|
2878
|
-
async function send(filePath, imgOpts, fileContent) {
|
|
2879
|
-
if (!filePath || lookup[filePath]) {
|
|
2880
|
-
return;
|
|
2881
|
-
}
|
|
2882
|
-
if (!isPathSafe(filePath)) {
|
|
2883
|
-
throw new Error(`The file path is not safe: ${filePath}. It must be contained inside the manifest folder. Invalid manifest`);
|
|
2884
|
-
}
|
|
2885
|
-
if (!fs.existsSync(filePath)) {
|
|
2886
|
-
throw new Error(`The path does not exists: ${filePath}. Invalid manifest`);
|
|
2887
|
-
}
|
|
2888
|
-
// If image file, we need to compress it
|
|
2889
|
-
let buffer;
|
|
2890
|
-
if (imgOpts) {
|
|
2891
|
-
buffer = await resize(filePath, imgOpts[0], imgOpts[1]);
|
|
2892
|
-
console.log(`Compressed: ${filePath} to ${imgOpts[0]}x${imgOpts[1]} size`);
|
|
2893
|
-
}
|
|
2894
|
-
else if (fileContent) {
|
|
2895
|
-
buffer = fileContent;
|
|
2896
|
-
}
|
|
2897
|
-
else {
|
|
2898
|
-
buffer = fs.readFileSync(filePath);
|
|
2899
|
-
}
|
|
2900
|
-
console.log(`Sending: ${filePath}`);
|
|
2901
|
-
const message = {
|
|
2902
|
-
data: {
|
|
2903
|
-
oneofKind: 'file',
|
|
2904
|
-
file: {
|
|
2905
|
-
data: buffer,
|
|
2906
|
-
path: filePath
|
|
2907
|
-
}
|
|
2908
|
-
}
|
|
2909
|
-
};
|
|
2910
|
-
// The idea here is that we will have an RPC error if the server has returned an error
|
|
2911
|
-
await Promise.race([stream.requests.send(message), stream.status]);
|
|
2912
|
-
lookup[filePath] = true;
|
|
2913
|
-
}
|
|
2914
|
-
// The first message must be the manifest
|
|
2915
|
-
// All the other messages must be files and must be described in the manifest
|
|
2916
|
-
const request = {
|
|
2917
|
-
data: {
|
|
2918
|
-
oneofKind: 'manifest',
|
|
2919
|
-
manifest: manifest
|
|
2920
|
-
}
|
|
2921
|
-
};
|
|
2922
|
-
await stream.requests.send(request);
|
|
2923
|
-
await send('README.md');
|
|
2924
|
-
await send('LICENSE.md');
|
|
2925
|
-
await send(manifest.executors);
|
|
2926
|
-
await send(manifest.configurators);
|
|
2927
|
-
await send(manifest.logo, [80, 80]);
|
|
2928
|
-
// Send everything inside the asset directory as assets
|
|
2929
|
-
if (manifest.assets && fs.existsSync(manifest.assets)) {
|
|
2930
|
-
const assets = await createArchive(manifest.assets);
|
|
2931
|
-
await send(manifest.assets, undefined, assets);
|
|
2932
|
-
}
|
|
2933
|
-
// Send everything inside the cdn directory as cdn files
|
|
2934
|
-
if (manifest.cdn && fs.existsSync(manifest.cdn)) {
|
|
2935
|
-
const cdn = await createArchive(manifest.cdn);
|
|
2936
|
-
await send(manifest.cdn, undefined, cdn);
|
|
2937
|
-
}
|
|
2938
|
-
// Send everything related to the vertices. Logos, schemas and configs
|
|
2939
|
-
for (let vertex of manifest.vertices) {
|
|
2940
|
-
await send(vertex.logo, [40, 40]);
|
|
2941
|
-
await send(vertex.metadata);
|
|
2942
|
-
if (vertex.config) {
|
|
2943
|
-
await send(vertex.config);
|
|
2944
|
-
}
|
|
2945
|
-
}
|
|
2946
|
-
await stream.requests.complete();
|
|
2947
|
-
printRpcSuccess(await stream.status, await stream.headers, await stream.trailers);
|
|
2948
|
-
}
|
|
2949
|
-
async function emulate(manifest, host) {
|
|
2950
|
-
const transport = new GrpcTransport({
|
|
2951
|
-
host,
|
|
2952
|
-
channelCredentials: ChannelCredentials.createInsecure(),
|
|
2953
|
-
'grpc.default_compression_algorithm': 2,
|
|
2954
|
-
'grpc.default_compression_level': 2,
|
|
2955
|
-
'grpc.max_send_message_length': 16 * 1024 * 1024
|
|
2956
|
-
});
|
|
2957
|
-
const client = new PluginServiceClient(transport);
|
|
2958
|
-
try {
|
|
2959
|
-
await sendPlugin(manifest, client);
|
|
2960
|
-
}
|
|
2961
|
-
catch (e) {
|
|
2962
|
-
if (e instanceof RpcError) {
|
|
2963
|
-
printRpcError(e);
|
|
2964
|
-
}
|
|
2965
|
-
else {
|
|
2966
|
-
console.error(e);
|
|
2967
|
-
}
|
|
2968
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help emulate')}`);
|
|
2969
|
-
}
|
|
2970
|
-
}
|
|
2971
|
-
async function publish(manifest, host, accessToken, insecure) {
|
|
2972
|
-
const transport = new GrpcTransport({
|
|
2973
|
-
host,
|
|
2974
|
-
channelCredentials: insecure
|
|
2975
|
-
? ChannelCredentials.createSsl(undefined, undefined, undefined, {
|
|
2976
|
-
checkServerIdentity: () => undefined
|
|
2977
|
-
})
|
|
2978
|
-
: ChannelCredentials.createSsl(),
|
|
2979
|
-
'grpc.default_compression_algorithm': 2,
|
|
2980
|
-
'grpc.default_compression_level': 2,
|
|
2981
|
-
'grpc.max_send_message_length': 16 * 1024 * 1024
|
|
2982
|
-
});
|
|
2983
|
-
const client = new PluginServiceClient(transport);
|
|
2984
|
-
const metadata = { authorization: `Bearer ${accessToken}` };
|
|
2985
|
-
try {
|
|
2986
|
-
await sendPlugin(manifest, client, metadata);
|
|
2987
|
-
}
|
|
2988
|
-
catch (e) {
|
|
2989
|
-
if (e instanceof RpcError) {
|
|
2990
|
-
printRpcError(e);
|
|
2991
|
-
}
|
|
2992
|
-
else {
|
|
2993
|
-
console.error(e);
|
|
2994
|
-
}
|
|
2995
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help publish')}`);
|
|
2996
|
-
}
|
|
2997
|
-
}
|
|
2998
|
-
function printRpcSuccess(status, headers, trailers) {
|
|
2999
|
-
const line = chalk.green('==================================================');
|
|
3000
|
-
const title = chalk.bgGreen.black.bold(' RPC Success Details ');
|
|
3001
|
-
const statusCode = chalk.bold.white('Status Code: ') + chalk.greenBright.bold(status.code);
|
|
3002
|
-
const statusDetail = status.detail
|
|
3003
|
-
? chalk.bold.white('Details: ') + chalk.greenBright(status.detail)
|
|
3004
|
-
: chalk.gray(' No Details Provided');
|
|
3005
|
-
const headerInfo = chalk.bold.white('Headers:\n') +
|
|
3006
|
-
(headers
|
|
3007
|
-
? chalk.blue(JSON.stringify(headers, null, 2))
|
|
3008
|
-
: chalk.gray(' No Metadata'));
|
|
3009
|
-
const trailerInfo = chalk.bold.white('Trailers:\n') +
|
|
3010
|
-
(trailers
|
|
3011
|
-
? chalk.blue(JSON.stringify(trailers, null, 2))
|
|
3012
|
-
: chalk.gray(' No Trailers'));
|
|
3013
|
-
console.log(line);
|
|
3014
|
-
console.log(title);
|
|
3015
|
-
console.log(line);
|
|
3016
|
-
console.log(statusCode);
|
|
3017
|
-
console.log(statusDetail);
|
|
3018
|
-
console.log(line);
|
|
3019
|
-
console.log(headerInfo);
|
|
3020
|
-
console.log(line);
|
|
3021
|
-
console.log(trailerInfo);
|
|
3022
|
-
console.log(line);
|
|
3023
|
-
console.log(chalk.bgGreen.black.bold(' SUCCESS '));
|
|
3024
|
-
console.log(line);
|
|
3025
|
-
}
|
|
3026
|
-
function printRpcError(error) {
|
|
3027
|
-
const line = chalk.red('==================================================');
|
|
3028
|
-
const title = chalk.bgRed.white.bold(' RPC Error Details ');
|
|
3029
|
-
const name = chalk.bold.white('Name: ') + chalk.redBright.bold(error.name);
|
|
3030
|
-
const message = chalk.bold.white('Message: ') + chalk.redBright(error.message);
|
|
3031
|
-
const code = chalk.bold.white('Code: ') + chalk.redBright.bold(error.code);
|
|
3032
|
-
const methodName = error.methodName
|
|
3033
|
-
? chalk.bold.white('Method Name: ') + chalk.yellowBright(error.methodName)
|
|
3034
|
-
: chalk.gray('No Method Name');
|
|
3035
|
-
const serviceName = error.serviceName
|
|
3036
|
-
? chalk.bold.white('Service Name: ') + chalk.yellowBright(error.serviceName)
|
|
3037
|
-
: chalk.gray('No Service Name');
|
|
3038
|
-
const meta = chalk.bold.white('Metadata:\n') +
|
|
3039
|
-
(error.meta
|
|
3040
|
-
? chalk.blue(JSON.stringify(error.meta, null, 2))
|
|
3041
|
-
: chalk.gray(' No Metadata'));
|
|
3042
|
-
console.error(line);
|
|
3043
|
-
console.error(title);
|
|
3044
|
-
console.error(line);
|
|
3045
|
-
console.error(name);
|
|
3046
|
-
console.error(message);
|
|
3047
|
-
console.error(code);
|
|
3048
|
-
console.error(line);
|
|
3049
|
-
if (methodName)
|
|
3050
|
-
console.error(methodName);
|
|
3051
|
-
if (serviceName)
|
|
3052
|
-
console.error(serviceName);
|
|
3053
|
-
console.error(line);
|
|
3054
|
-
console.error(meta);
|
|
3055
|
-
console.error(line);
|
|
3056
|
-
console.error(chalk.bgRed.white.bold(' ERROR '));
|
|
3057
|
-
console.error(line);
|
|
3058
|
-
}
|
|
3059
|
-
|
|
3060
|
-
// Copyright 2023, mochabug AB
|
|
3061
|
-
//
|
|
3062
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
3063
|
-
// you may not use this file except in compliance with the License.
|
|
3064
|
-
// You may obtain a copy of the License at
|
|
3065
|
-
//
|
|
3066
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
3067
|
-
//
|
|
3068
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
3069
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
3070
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3071
|
-
// See the License for the specific language governing permissions and
|
|
3072
|
-
// limitations under the License.
|
|
3073
|
-
async function isValidUrl(urlString) {
|
|
3074
|
-
try {
|
|
3075
|
-
new URL(urlString);
|
|
3076
|
-
return true;
|
|
3077
|
-
}
|
|
3078
|
-
catch (error) {
|
|
3079
|
-
return false;
|
|
3080
|
-
}
|
|
3081
|
-
}
|
|
3082
|
-
function isValidPort(port) {
|
|
3083
|
-
const portNumber = parseInt(port, 10);
|
|
3084
|
-
return portNumber > 0 && portNumber <= 65535;
|
|
3085
|
-
}
|
|
3086
|
-
function isValidHostWithPort(hostWithPort) {
|
|
3087
|
-
const [hostname, port] = hostWithPort.split(':');
|
|
3088
|
-
if (!isValidHostname(hostname)) {
|
|
3089
|
-
return { isValid: false, hostname };
|
|
3090
|
-
}
|
|
3091
|
-
if (port !== undefined) {
|
|
3092
|
-
if (!isValidPort(port)) {
|
|
3093
|
-
return { isValid: false, hostname, port: parseInt(port, 10) };
|
|
3094
|
-
}
|
|
3095
|
-
return { isValid: true, hostname, port: parseInt(port, 10) };
|
|
3096
|
-
}
|
|
3097
|
-
return { isValid: true, hostname };
|
|
3098
|
-
}
|
|
3099
|
-
function banner() {
|
|
3100
|
-
return chalk.yellowBright(figlet.textSync('Adaptkit'));
|
|
3101
|
-
}
|
|
3102
|
-
async function handleInit(dir, cmd) {
|
|
3103
|
-
// Check for unexpected arguments
|
|
3104
|
-
if (cmd.args.length >= 1) {
|
|
3105
|
-
console.error(chalk.red(`Error: Invalid sub-command or arguments provided.`));
|
|
3106
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help init')}`);
|
|
3107
|
-
process.exit(1);
|
|
3108
|
-
}
|
|
3109
|
-
// Continue with the usual logic if no unexpected arguments are found
|
|
3110
|
-
await init(dir);
|
|
3111
|
-
}
|
|
3112
|
-
async function handleAdd(cmd) {
|
|
3113
|
-
if (cmd.args.length >= 1) {
|
|
3114
|
-
console.error(chalk.red(`Error: Invalid sub-command or arguments provided.`));
|
|
3115
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help add')}`);
|
|
3116
|
-
process.exit(1);
|
|
3117
|
-
}
|
|
3118
|
-
const manifest = readManifest('manifest.json');
|
|
3119
|
-
if (!manifest) {
|
|
3120
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help add')}`);
|
|
3121
|
-
process.exit(1);
|
|
3122
|
-
}
|
|
3123
|
-
await add(manifest);
|
|
3124
|
-
}
|
|
3125
|
-
async function handlePublish(host, authUrl, client, insecure, errorUrl, cmd) {
|
|
3126
|
-
if (!(await isValidUrl(authUrl))) {
|
|
3127
|
-
console.error(chalk.red(`Error: The provided authority url is not a valid URL: ${authUrl}`));
|
|
3128
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help publish')}`);
|
|
3129
|
-
process.exit(1);
|
|
3130
|
-
}
|
|
3131
|
-
const { isValid, hostname, port } = isValidHostWithPort(host);
|
|
3132
|
-
if (!isValid) {
|
|
3133
|
-
console.error(chalk.red(`Error: The provided host or port is not valid: ${hostname}${port ? ':' + port : ''}`));
|
|
3134
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help emulate')}`);
|
|
3135
|
-
process.exit(1);
|
|
3136
|
-
}
|
|
3137
|
-
if (cmd.args.length >= 1) {
|
|
3138
|
-
console.error(chalk.red(`Error: Invalid sub-command or arguments provided.`));
|
|
3139
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help publish')}`);
|
|
3140
|
-
process.exit(1);
|
|
3141
|
-
}
|
|
3142
|
-
const manifest = readManifest('manifest.json');
|
|
3143
|
-
if (!manifest) {
|
|
3144
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help publish')}`);
|
|
3145
|
-
process.exit(1);
|
|
3146
|
-
}
|
|
3147
|
-
if (insecure) {
|
|
3148
|
-
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
3149
|
-
}
|
|
3150
|
-
const accessToken = await waitForConsent(authUrl, errorUrl, client);
|
|
3151
|
-
if (!accessToken) {
|
|
3152
|
-
console.log('Could not fetch the acccess token. Terminating...');
|
|
3153
|
-
process.exit(1);
|
|
3154
|
-
}
|
|
3155
|
-
await publish(manifest, host, accessToken, insecure);
|
|
3156
|
-
}
|
|
3157
|
-
async function handleEmulate(host, cmd) {
|
|
3158
|
-
const { isValid, hostname, port } = isValidHostWithPort(host);
|
|
3159
|
-
if (!isValid) {
|
|
3160
|
-
console.error(chalk.red(`Error: The provided host or port is not valid: ${hostname}${port ? ':' + port : ''}`));
|
|
3161
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help emulate')}`);
|
|
3162
|
-
process.exit(1);
|
|
3163
|
-
}
|
|
3164
|
-
if (cmd.args.length >= 1) {
|
|
3165
|
-
console.error(chalk.red(`Error: Invalid sub-command or arguments provided.`));
|
|
3166
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help emulate')}`);
|
|
3167
|
-
process.exit(1);
|
|
3168
|
-
}
|
|
3169
|
-
const manifest = readManifest('manifest.json');
|
|
3170
|
-
if (!manifest) {
|
|
3171
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help emulate')}`);
|
|
3172
|
-
process.exit(1);
|
|
3173
|
-
}
|
|
3174
|
-
await emulate(manifest, host);
|
|
3175
|
-
}
|
|
3176
|
-
function handleVersion(bump, cmd) {
|
|
3177
|
-
if (cmd.args.length >= 1) {
|
|
3178
|
-
console.error(chalk.red(`Error: Invalid sub-command or arguments provided.`));
|
|
3179
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help version')}`);
|
|
3180
|
-
process.exit(1);
|
|
3181
|
-
}
|
|
3182
|
-
const manifest = readManifest('manifest.json');
|
|
3183
|
-
if (!manifest) {
|
|
3184
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help version')}`);
|
|
3185
|
-
process.exit(1);
|
|
3186
|
-
}
|
|
3187
|
-
const manVer = semver.parse(manifest.version);
|
|
3188
|
-
if (!manVer) {
|
|
3189
|
-
console.error(chalk.red(`Error: The version in the manifest is not a valid semver version: ${manifest.version}`));
|
|
3190
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help version')}`);
|
|
3191
|
-
process.exit(1);
|
|
3192
|
-
}
|
|
3193
|
-
if (bump === null) {
|
|
3194
|
-
console.error(chalk.red('You must provide either --patch --minor or --major to bump the version.'));
|
|
3195
|
-
console.log(`For more information, use: ${chalk.blue('adaptkit help version')}`);
|
|
3196
|
-
process.exit(1);
|
|
3197
|
-
}
|
|
3198
|
-
const prevVersion = manifest.version;
|
|
3199
|
-
manifest.version = manVer.inc(bump).toString();
|
|
3200
|
-
fs.writeFileSync(path.join(process.cwd(), 'manifest.json'), Manifest.toJsonString(manifest, {
|
|
3201
|
-
enumAsInteger: false,
|
|
3202
|
-
prettySpaces: 2,
|
|
3203
|
-
emitDefaultValues: false
|
|
3204
|
-
}));
|
|
3205
|
-
console.log(chalk.green(`Bumped the version from ${prevVersion} to ${manifest.version}`));
|
|
3206
|
-
}
|
|
3207
|
-
async function main() {
|
|
3208
|
-
const notifier = updateNotifier({
|
|
3209
|
-
pkg: JSON.parse('{"name":"@mochabug/adaptkit","version":"0.14.6"}')
|
|
3210
|
-
});
|
|
3211
|
-
notifier.notify({ isGlobal: true, defer: false });
|
|
3212
|
-
program
|
|
3213
|
-
.name('Adaptkit')
|
|
3214
|
-
.version('1.0.0')
|
|
3215
|
-
.description('Unleash the power of seamless plugin development with Adaptkit, your premier CLI companion for Mochabug Adapt. Effortlessly create, manage and deploy plugins with finesse. Explore the full potential of Adaptkit at ' +
|
|
3216
|
-
chalk.underline.blue('https://www.mochabug.com'))
|
|
3217
|
-
.configureHelp({
|
|
3218
|
-
sortSubcommands: true,
|
|
3219
|
-
sortOptions: true,
|
|
3220
|
-
showGlobalOptions: true,
|
|
3221
|
-
helpWidth: 140
|
|
3222
|
-
});
|
|
3223
|
-
const DEFAULT_INIT_DIRECTORY = './';
|
|
3224
|
-
program
|
|
3225
|
-
.command('init')
|
|
3226
|
-
.option('-d, --dir <dir>', `Choose the directory to initiate your plugin's journey. Default: '${DEFAULT_INIT_DIRECTORY}'`, DEFAULT_INIT_DIRECTORY)
|
|
3227
|
-
.description('Kickstart your plugin adventure. This command scaffolds a ready-to-go project structure.')
|
|
3228
|
-
.action(({ dir }, cmd) => handleInit(dir, cmd));
|
|
3229
|
-
program
|
|
3230
|
-
.command('add')
|
|
3231
|
-
.description("Expand your plugin's capabilities")
|
|
3232
|
-
.action((_, cmd) => handleAdd(cmd));
|
|
3233
|
-
program
|
|
3234
|
-
.command('publish')
|
|
3235
|
-
.option('-h, --host <host>', chalk.yellow('Warning: Primarily for development purposes'), 'adapt-grpc-dev.mochabugapis.com')
|
|
3236
|
-
.option('-a, --authority <authority>', chalk.yellow('Warning: Primarily for development purposes'), 'https://auth-dev.mochabugapis.com')
|
|
3237
|
-
.option('-c, --client <client>', chalk.yellow('Warning: Primarily for development purposes'), '2d711bbb-4b57-4ad5-8bf0-f2269de5b71d')
|
|
3238
|
-
.option('-e, --error-url <errorUrl>', chalk.yellow('Warning: Primarily for development purposes'), 'https://accounts-dev.mochabug.com/services/error')
|
|
3239
|
-
.option('--insecure', chalk.red('Ignore SSL certificate errors (insecure)'))
|
|
3240
|
-
.description('Ready for liftoff? Publish your plugin to your organization with this command.')
|
|
3241
|
-
.action(({ host, authority, client, insecure, errorUrl }, cmd) => handlePublish(host, authority, client, insecure, errorUrl, cmd));
|
|
3242
|
-
program
|
|
3243
|
-
.command('emulate')
|
|
3244
|
-
.option('-h, --host <host>', 'Specify the URL to test your plugin in the emulator. Ideal for custom port configurations.', 'localhost:51001')
|
|
3245
|
-
.description('Take your plugin for a test drive. Best used in conjunction with your build pipeline.')
|
|
3246
|
-
.action(({ host }, cmd) => handleEmulate(host, cmd));
|
|
3247
|
-
program
|
|
3248
|
-
.command('version')
|
|
3249
|
-
.option('--patch', 'Bump the manifest version to the next patch version')
|
|
3250
|
-
.option('--minor', 'Bump the manifest version to the next minor version')
|
|
3251
|
-
.option('--major', 'Bump the manifest version to the next major version')
|
|
3252
|
-
.description('The version command can manipulate the version of the plugin manifest.')
|
|
3253
|
-
.action(({ major, minor, patch }, cmd) => handleVersion(major ? 'major' : minor ? 'minor' : patch ? 'patch' : null, cmd));
|
|
3254
|
-
// Set a custom help action
|
|
3255
|
-
program.addHelpText('beforeAll', banner() + '\n');
|
|
3256
|
-
program.showHelpAfterError();
|
|
3257
|
-
try {
|
|
3258
|
-
await program.parseAsync(process.argv);
|
|
3259
|
-
}
|
|
3260
|
-
catch (error) {
|
|
3261
|
-
console.error(error);
|
|
3262
|
-
console.error('An error occurred:', error.message);
|
|
3263
|
-
}
|
|
3264
|
-
}
|
|
3265
|
-
main();
|
|
25
|
+
};`}async function Ro(e){let n=await Wa({message:"Type a new unused vertex name",transformer:i=>i.trim(),validate:i=>(i=i.trim(),e.vertices.filter(r=>r.name===i).length>0?!1:/^[_a-z][_a-z0-9]*$/.test(i))}),t=await xo({message:"Choose your vertex type",choices:[{name:"action",value:"action",description:"An action is a vertex that performs a task, such as sending an email or updating a database."},{name:"browser",value:"browser",description:"A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button."},{name:"cron-trigger",value:"cron-trigger",description:"A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM."},{name:"external-trigger",value:"external-trigger",description:"An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue."}]}),o=await Ja({message:"Need a configurator for the vertex?"}),s;(o||t==="browser")&&(s=await xo({message:"Choose frontend library",choices:[{name:"React",value:"react",description:"React with TypeScript"},{name:"None",value:"none",description:"I do it myself"}]})),console.log(zn.magenta("Creating new vertex templates..."));let a=De(".",n,t,o,e.vertices.map(i=>Jn(Mn,i)),s);e.vertices.push(Rn(Mn,a)),!e.configurators&&a.configurator&&(e.configurators="dist/configurators.js"),console.log(zn.magenta("Updating manifest...")),xa.writeFileSync("manifest.json",Me(ne,e,{enumAsInteger:!1,prettySpaces:2})),console.log(zn.bgGreen("Success"))}import{confirm as Ra,input as Fo,select as Eo}from"@inquirer/prompts";import Yo from"chalk";import{execSync as No}from"child_process";import Fa from"fs";import{mkdirp as Mo}from"mkdirp";import E from"path";async function Ho(e){let n=await Fo({message:"Type plugin name",transformer:u=>u.trim().toLowerCase(),validate:u=>/^[_a-z][_a-z0-9]*$/.test(u)}),t=await Eo({message:"Choose your vertex type",choices:[{name:"action",value:"action",description:"An action is a vertex that performs a task, such as sending an email or updating a database."},{name:"browser",value:"browser",description:"A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button."},{name:"cron-trigger",value:"cron-trigger",description:"A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM."},{name:"external-trigger",value:"external-trigger",description:"An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue."}]}),o=await Fo({message:"Type a new unused vertex name",transformer:u=>u.trim().toLowerCase(),validate:u=>/^[_a-z][_a-z0-9]*$/.test(u)}),s=await Ra({message:"Need a configurator for the vertex?"}),a;(s||t==="browser")&&(a=await Eo({message:"Choose frontend library",choices:[{name:"React",value:"react",description:"React with TypeScript"},{name:"None",value:"none",description:"I do it myself"}]})),Mo.sync(e);let i=E.isAbsolute(e)?e:E.join(process.cwd(),e);h(E.join(i,".gitignore"),y("gitignore"));let r={name:n,version:"",private:!0,type:"module",scripts:{"build-client":`node -e "if(require('fs').existsSync('build-client.js')) require('child_process').execSync('node build-client.js', { stdio: 'inherit' })"`,"build-common":"rimraf dist && npm run build-client && node build.js","build-dev":"export PLUGINS_CDN=https://cdn-dev.mochabug.com/adapt/plugins && npm run build-common","build-prod":"export PLUGINS_CDN=https://cdn.mochabug.com/adapt/plugins && npm run build-common","build-emulate":"export PLUGINS_CDN=http://localhost:51002 && npm run build-common",build:"npm run build-dev",emulate:"npm run build-emulate && adaptkit emulate",add:"adaptkit add"},devDependencies:{unenv:"npm:unenv-nightly@*"}};h(E.join(i,"package.json"),JSON.stringify(r,null,2)),h(E.join(i,"README.md"),y("readme.md")),h(E.join(i,"LICENSE.md"),y("license.md")),No("npm install --save-dev @mochabug/adapt-plugin-typings typescript @cloudflare/unenv-preset @types/node esbuild rimraf glob",{cwd:i,stdio:"inherit"}),No("npm install @mochabug/adapt-plugin-toolkit",{cwd:i,stdio:"inherit"}),h(E.join(i,"global.d.ts"),y("global.d.ts")),h(E.join(i,"tsconfig.json"),y("tsconf.json")),h(E.join(i,"build.js"),y("build.js")),h(E.join(i,"inject.js"),y("inject.js"));let l=De(i,o,t,s,[],a);console.log(Yo.magenta("Creating manifest..."));let d={name:n,organization:"00000000-0000-0000-0000-000000000000",version:"0.1.0",label:ke(n),description:`A nice description of what ${n} does`,author:"John Doe",bugs:"bugs@foobar.com",homepage:"https://www.foobar.com",repository:"https://github.com",vertices:[l],executors:"dist/executors.js",pluginVariables:[],pluginOauth2:[],pluginMtls:[]};if(a==="react"&&(Mo.sync(E.join(e,"cdn")),d.cdn="cdn"),!l.metadata)throw new Error("This cannot happen");l.configurator&&(d.configurators="dist/configurators.js"),Fa.writeFileSync(E.join(i,"manifest.json"),JSON.stringify(d,null,2)),console.log(Yo.bgGreen("Success"))}import zo from"chalk";import{randomBytes as Ea}from"crypto";import Ya from"express";import Na from"node-fetch";import Ma from"open";import Ha from"pkce-challenge";var za=51421,Ka=5,La="https://www.mochabugapis.com/auth/adapt/plugins.upload",wa="https://adapt-dev.mochabugapis.com";function va({clientId:e,redirectUri:n,scope:t,state:o,authUrl:s,codeChallenge:a,audience:i}){let r=new URL(s);return r.searchParams.set("response_type","code"),r.searchParams.set("client_id",e),r.searchParams.set("audience",i),r.searchParams.set("redirect_uri",n),r.searchParams.set("scope",t),r.searchParams.set("state",o),r.searchParams.set("code_challenge",a),r.searchParams.set("code_challenge_method","S256"),r.toString()}function Ua({redirectUri:e,codeVerifier:n,clientId:t,code:o}){let s=new URLSearchParams;return s.set("grant_type","authorization_code"),s.set("code_verifier",n),s.set("client_id",t),s.set("code",o),s.set("redirect_uri",e),s.toString()}function Ko(e,n=0){return new Promise((t,o)=>{let s=za+n,a=e.listen(s,()=>{console.log(zo.green.bold(`Server running on http://localhost:${s} to listen to OAuth2 callbacks`)),t({server:a,port:s})});a.on("error",i=>{i.code==="EADDRINUSE"&&n<Ka-1?(console.log(zo.yellow.bold(`Port ${s} is in use, trying next available port.`)),a.close(),t(Ko(e,n+1))):o(i)})})}var Z="[waitForConsent]";async function Lo(e,n,t){console.info(`${Z} Starting OAuth2 consent workflow for client: ${t}`);let o=`${e}/oauth2/auth`,s=`${e}/oauth2/token`;console.info(`${Z} Authorization URL: ${o}`),console.info(`${Z} Token URL: ${s}`);let a=Ya(),i=Ea(32).toString("hex");console.info(`${Z} Generated state for CSRF protection`);let r={base:"",redirect:""},{code_verifier:l,code_challenge:d}=await Ha();console.info(`${Z} PKCE Challenge generated`);let u,I,W,x=new Promise((G,R)=>{u=G,I=R});a.get("/",async(G,R)=>{let Qe=va({authUrl:o,clientId:t,redirectUri:r.redirect,scope:La,state:i,codeChallenge:d,audience:wa});console.info(`${Z} Redirecting to code URL for user consent`),R.redirect(Qe)}),a.get("/callback",async(G,R)=>{if("error"in G.query){console.error(`${Z} OAuth Error: error in callback`);let z=G.url.split("?")[1];R.redirect(`${n}?${z}`),I();return}if(G.query.state!==i){console.error(`${Z} OAuth Error: Invalid state. Received state does not match.`);let z=encodeURIComponent("Invalid state parameter.");R.redirect(`${n}?error=invalid_request&error_description=${z}`),I();return}console.info(`${Z} OAuth state validated`);let Qe=Ua({clientId:t,redirectUri:r.redirect,codeVerifier:l,code:G.query.code});try{console.info(`${Z} Exchanging code for token`);let z=await Na(s,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Qe});if(!z.ok){console.error(`${Z} OAuth Error: could not exchange code for token`);let _o=z.url.split("?")[1];R.redirect(`${n}?${_o}`),I();return}let pe=await z.json();console.info(`${Z} Token exchange successful`),console.info(`${Z} Token exchange successful. Details: `,{expires_in:pe.expires_in,scope:pe.scope,type:pe.token_type,token:"<secret>"}),W=pe.access_token,R.redirect("/success")}catch(z){console.error(`${Z} Error exchanging token: ${z}`),R.redirect(`${n}?error=unkown&error_description=${encodeURIComponent("Unknown error during token exchange")}`),I()}}),a.get("/success",(G,R)=>{R.send(y("success_page.html")),W||(console.error("Token is undefined"),I()),u()});let v;try{console.info(`${Z} Starting local server to handle callbacks`);let G=await Ko(a);v=G.server,r.base=`http://localhost:${G.port}`,r.redirect=`${r.base}/callback`,console.info(`${Z} Server started on ${r.base}`)}catch(G){console.error(`${Z} Error starting server: ${G}`);return}try{return console.info(`${Z} Opening user consent page`),await Ma(r.base),console.info(`${Z} Waiting for user consent...`),await x,console.info(`${Z} OAuth consent workflow completed successfully`),W||console.error("Token is undefined"),W}catch(G){console.error(`${Z} Error in OAuth2 flow: ${G}`);return}finally{console.info(`${Z} Closing the server...`),v.closeAllConnections(),v.close(),console.info(`${Z} Server closed`)}}import{ConnectError as vo,createClient as Uo}from"@connectrpc/connect";import{createGrpcTransport as ko}from"@connectrpc/connect-node";import ka from"archiver";import m from"chalk";import Da from"fast-glob";import k from"fs";import te from"path";import be from"sharp";import{PassThrough as Qa}from"stream";async function Ta(e,n,t){switch(te.extname(e)){case".avif":return await be(e).resize(n,t).avif().toBuffer();case".gif":return await be(e).resize(n,t).gif().toBuffer();case".jpg":case".jpeg":case".jfif":case".pjpeg":case".pjp":return await be(e).resize(n,t).jpeg().toBuffer();case".png":return await be(e).resize(n,t).png().toBuffer();case".svg":return k.readFileSync(e);case".webp":return await be(e).resize(n,t).webp().toBuffer()}throw new Error("Invalid logotype")}function Pa(e){let n=te.resolve(".");return te.resolve(e).startsWith(n)}function _a(e){try{let n=te.resolve(e);return k.existsSync(n)?k.statSync(n).isDirectory():!1}catch(n){return console.error("Error checking if folder exists:",n),!1}}function wo(e){return new Promise((n,t)=>{_a(e)||t(`The folder ${e} does not exist`);let o=ka("tar",{gzip:!0,zlib:{level:9}});o.on("error",i=>{t(i)});let s=[],a=new Qa;a.on("data",i=>s.push(i)),a.on("end",()=>{let i=Buffer.concat(s);console.log(`${e} have been compressed successfully into a buffer.`),n(i)}),o.pipe(a),Da(te.join(e,"**","*")).then(i=>{for(let r of i)if(k.statSync(r).isFile()){let l=te.relative(e,r);o.file(r,{name:l})}o.finalize()}).catch(i=>t(i))})}async function Do(e,n,t){let o={};async function s(r,l,d){if(!r||o[r])return;if(!Pa(r))throw new Error(`The file path is not safe: ${r}. It must be contained inside the manifest folder. Invalid manifest`);if(!k.existsSync(r))throw new Error(`The path does not exists: ${r}. Invalid manifest`);let u;return l?(u=await Ta(r,l[0],l[1]),console.log(`Compressed: ${r} to ${l[0]}x${l[1]} size`)):d?u=d:u=k.readFileSync(r),o[r]=!0,B(Nn,{data:{case:"file",value:{data:u,path:r}}})}let a=new Headers,i=new Headers;await n.uploadPlugin(async function*(){yield B(Nn,{data:{case:"manifest",value:e}});let r=[s("README.md"),s("LICENSE.md"),s(e.executors),s(e.configurators),s(e.logo,[80,80])];e.assets&&k.existsSync(e.assets)&&r.push(s(e.assets,void 0,await wo(e.assets))),e.cdn&&k.existsSync(e.cdn)&&r.push(s(e.cdn,void 0,await wo(e.cdn)));for(let l of e.vertices)r.push(s(l.logo,[40,40])),r.push(s(l.metadata)),l.config&&r.push(s(l.config));for await(let l of r)l&&(yield l)}(),{headers:t,onHeader:r=>{i=r},onTrailer:r=>{a=r}}),Oa(i,a)}async function Qo(e,n){let t=Uo(Hn,ko({baseUrl:n}));try{await Do(e,t)}catch(o){o instanceof vo?Po(o):console.error(o),console.log(`For more information, use: ${m.blue("adaptkit help emulate")}`)}}async function To(e,n,t,o){let s=Uo(Hn,ko({baseUrl:n})),a=new Headers({authorization:`Bearer ${t}`});try{await Do(e,s,a)}catch(i){i instanceof vo?Po(i):console.error(i),console.log(`For more information, use: ${m.blue("adaptkit help publish")}`)}}function Oa(e,n){let t=m.green("=================================================="),o=m.bgGreen.black.bold(" RPC Success Details "),s=m.bold.white("Status Code: ")+m.greenBright.bold("OK"),a=m.bold.white("Details: ")+m.greenBright("The upload was successful"),i=m.bold.white(`Headers:
|
|
26
|
+
`)+(e?m.blue(JSON.stringify(e,null,2)):m.gray(" No Metadata")),r=m.bold.white(`Trailers:
|
|
27
|
+
`)+(n?m.blue(JSON.stringify(n,null,2)):m.gray(" No Trailers"));console.log(t),console.log(o),console.log(t),console.log(s),console.log(a),console.log(t),console.log(i),console.log(t),console.log(r),console.log(t),console.log(m.bgGreen.black.bold(" SUCCESS ")),console.log(t)}function Po(e){let n=m.red("=================================================="),t=m.bgRed.white.bold(" RPC Error Details "),o=m.bold.white("Name: ")+m.redBright.bold(e.name),s=m.bold.white("Message: ")+m.redBright(e.message),a=m.bold.white("Code: ")+m.redBright.bold(e.code),i=e.methodName?m.bold.white("Method Name: ")+m.yellowBright(e.methodName):m.gray("No Method Name"),r=e.serviceName?m.bold.white("Service Name: ")+m.yellowBright(e.serviceName):m.gray("No Service Name"),l=m.bold.white(`Metadata:
|
|
28
|
+
`)+(e.metadata?m.blue(JSON.stringify([...e.metadata.entries()],null,2)):m.gray(" No Metadata"));console.error(n),console.error(t),console.error(n),console.error(o),console.error(s),console.error(a),console.error(n),i&&console.error(i),r&&console.error(r),console.error(n),console.error(l),console.error(n);let d=e.details;if(console.error(m.bold.white("Error Details:")),d.length===0)console.error(m.gray(" No error details"));else for(let u of d)console.error(m.red(JSON.stringify(u,null,2)));console.error(n),console.error(m.bgRed.white.bold(" ERROR ")),console.error(n)}async function Kn(e){try{return new URL(e),!0}catch{return!1}}function ti(){return b.yellowBright(ja.textSync("Adaptkit"))}async function oi(e,n){n.args.length>=1&&(console.error(b.red("Error: Invalid sub-command or arguments provided.")),console.log(`For more information, use: ${b.blue("adaptkit help init")}`),process.exit(1)),await Ho(e)}async function si(e){e.args.length>=1&&(console.error(b.red("Error: Invalid sub-command or arguments provided.")),console.log(`For more information, use: ${b.blue("adaptkit help add")}`),process.exit(1));let n=ge("manifest.json");n||(console.log(`For more information, use: ${b.blue("adaptkit help add")}`),process.exit(1)),await Ro(n)}async function ai(e,n,t,o,s,a){await Kn(n)||(console.error(b.red(`Error: The provided authority url is not a valid URL: ${n}`)),console.log(`For more information, use: ${b.blue("adaptkit help publish")}`),process.exit(1)),await Kn(e)||(console.error(b.red(`Error: The provided endpoint is not valid: ${e}`)),console.log(`For more information, use: ${b.blue("adaptkit help publish")}`),process.exit(1)),a.args.length>=1&&(console.error(b.red("Error: Invalid sub-command or arguments provided.")),console.log(`For more information, use: ${b.blue("adaptkit help publish")}`),process.exit(1));let i=ge("manifest.json");i||(console.log(`For more information, use: ${b.blue("adaptkit help publish")}`),process.exit(1)),o&&(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let r=await Lo(n,s,t);r||(console.log("Could not fetch the acccess token. Terminating..."),process.exit(1)),await To(i,e,r,o)}async function ii(e,n){await Kn(e)||(console.error(b.red(`Error: The provided endpoint is not valid: ${e}`)),console.log(`For more information, use: ${b.blue("adaptkit help emulate")}`),process.exit(1)),n.args.length>=1&&(console.error(b.red("Error: Invalid sub-command or arguments provided.")),console.log(`For more information, use: ${b.blue("adaptkit help emulate")}`),process.exit(1));let t=ge("manifest.json");t||(console.log(`For more information, use: ${b.blue("adaptkit help emulate")}`),process.exit(1)),await Qo(t,e)}function ri(e,n){n.args.length>=1&&(console.error(b.red("Error: Invalid sub-command or arguments provided.")),console.log(`For more information, use: ${b.blue("adaptkit help version")}`),process.exit(1));let t=ge("manifest.json");t||(console.log(`For more information, use: ${b.blue("adaptkit help version")}`),process.exit(1));let o=ei.parse(t.version);o||(console.error(b.red(`Error: The version in the manifest is not a valid semver version: ${t.version}`)),console.log(`For more information, use: ${b.blue("adaptkit help version")}`),process.exit(1)),e===null&&(console.error(b.red("You must provide either --patch --minor or --major to bump the version.")),console.log(`For more information, use: ${b.blue("adaptkit help version")}`),process.exit(1));let s=t.version;t.version=o.inc(e).toString(),$a.writeFileSync(qa.join(process.cwd(),"manifest.json"),Me(ne,t,{enumAsInteger:!1,prettySpaces:2})),console.log(b.green(`Bumped the version from ${s} to ${t.version}`))}async function ci(){ni({pkg:g}).notify({isGlobal:!0,defer:!1}),w.name("Adaptkit").version("1.0.0").description("Unleash the power of seamless plugin development with Adaptkit, your premier CLI companion for Mochabug Adapt. Effortlessly create, manage and deploy plugins with finesse. Explore the full potential of Adaptkit at "+b.underline.blue("https://www.mochabug.com")).configureHelp({sortSubcommands:!0,sortOptions:!0,showGlobalOptions:!0,helpWidth:140});let n="./";w.command("init").option("-d, --dir <dir>",`Choose the directory to initiate your plugin's journey. Default: '${n}'`,n).description("Kickstart your plugin adventure. This command scaffolds a ready-to-go project structure.").action(({dir:t},o)=>oi(t,o)),w.command("add").description("Expand your plugin's capabilities").action((t,o)=>si(o)),w.command("publish").option("-e, --endpoint <url>","URL of the gRPC server (including protocol)","https://adapt-grpc-dev.mochabugapis.com").option("-a, --authority <authority>",b.yellow("Warning: Primarily for development purposes"),"https://auth-dev.mochabugapis.com").option("-c, --client <client>",b.yellow("Warning: Primarily for development purposes"),"2d711bbb-4b57-4ad5-8bf0-f2269de5b71d").option("--error-url <errorUrl>",b.yellow("Warning: Primarily for development purposes"),"https://accounts-dev.mochabug.com/services/error").option("--insecure",b.red("Ignore SSL certificate errors (insecure)")).description("Ready for liftoff? Publish your plugin to your organization with this command.").action(({endpoint:t,authority:o,client:s,insecure:a,errorUrl:i},r)=>ai(t,o,s,a,i,r)),w.command("emulate").option("-e, --endpoint <url>","URL of the emulator server (including protocol)","http://localhost:51001").description("Take your plugin for a test drive. Best used in conjunction with your build pipeline.").action(({endpoint:t},o)=>ii(t,o)),w.command("version").option("--patch","Bump the manifest version to the next patch version").option("--minor","Bump the manifest version to the next minor version").option("--major","Bump the manifest version to the next major version").description("The version command can manipulate the version of the plugin manifest.").action(({major:t,minor:o,patch:s},a)=>ri(t?"major":o?"minor":s?"patch":null,a)),w.addHelpText("beforeAll",ti()+`
|
|
29
|
+
`),w.showHelpAfterError();try{await w.parseAsync(process.argv)}catch(t){console.error(t),console.error("An error occurred:",t.message)}}ci();
|
|
30
|
+
//# sourceMappingURL=index.js.map
|