@evalops/sdk-ts 0.1.66 → 0.1.68

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.
@@ -1918,6 +1918,360 @@ export type ListScenarioRunsResponse = Message<"fermata.v1.ListScenarioRunsRespo
1918
1918
  * Use `create(ListScenarioRunsResponseSchema)` to create a new message.
1919
1919
  */
1920
1920
  export declare const ListScenarioRunsResponseSchema: GenMessage<ListScenarioRunsResponse>;
1921
+ /**
1922
+ * @generated from message fermata.v1.GetEvaluationObservabilityDashboardRequest
1923
+ */
1924
+ export type GetEvaluationObservabilityDashboardRequest = Message<"fermata.v1.GetEvaluationObservabilityDashboardRequest"> & {
1925
+ /**
1926
+ * @generated from field: string organization_id = 1;
1927
+ */
1928
+ organizationId: string;
1929
+ /**
1930
+ * @generated from field: string workspace_id = 2;
1931
+ */
1932
+ workspaceId: string;
1933
+ /**
1934
+ * @generated from field: int32 days = 3;
1935
+ */
1936
+ days: number;
1937
+ /**
1938
+ * @generated from field: int32 limit = 4;
1939
+ */
1940
+ limit: number;
1941
+ };
1942
+ /**
1943
+ * Describes the message fermata.v1.GetEvaluationObservabilityDashboardRequest.
1944
+ * Use `create(GetEvaluationObservabilityDashboardRequestSchema)` to create a new message.
1945
+ */
1946
+ export declare const GetEvaluationObservabilityDashboardRequestSchema: GenMessage<GetEvaluationObservabilityDashboardRequest>;
1947
+ /**
1948
+ * @generated from message fermata.v1.EvaluationObservabilitySummary
1949
+ */
1950
+ export type EvaluationObservabilitySummary = Message<"fermata.v1.EvaluationObservabilitySummary"> & {
1951
+ /**
1952
+ * @generated from field: int32 total_runs = 1;
1953
+ */
1954
+ totalRuns: number;
1955
+ /**
1956
+ * @generated from field: int32 total_results = 2;
1957
+ */
1958
+ totalResults: number;
1959
+ /**
1960
+ * @generated from field: int32 failed_results = 3;
1961
+ */
1962
+ failedResults: number;
1963
+ /**
1964
+ * @generated from field: double average_score = 4;
1965
+ */
1966
+ averageScore: number;
1967
+ /**
1968
+ * @generated from field: double pass_rate = 5;
1969
+ */
1970
+ passRate: number;
1971
+ /**
1972
+ * @generated from field: common.v1.Money total_cost = 6;
1973
+ */
1974
+ totalCost?: Money | undefined;
1975
+ /**
1976
+ * @generated from field: double average_latency_ms = 7;
1977
+ */
1978
+ averageLatencyMs: number;
1979
+ /**
1980
+ * @generated from field: int64 total_tokens = 8;
1981
+ */
1982
+ totalTokens: bigint;
1983
+ /**
1984
+ * @generated from field: int32 regression_alert_count = 9;
1985
+ */
1986
+ regressionAlertCount: number;
1987
+ /**
1988
+ * @generated from field: repeated common.v1.Money total_costs_by_currency = 10;
1989
+ */
1990
+ totalCostsByCurrency: Money[];
1991
+ };
1992
+ /**
1993
+ * Describes the message fermata.v1.EvaluationObservabilitySummary.
1994
+ * Use `create(EvaluationObservabilitySummarySchema)` to create a new message.
1995
+ */
1996
+ export declare const EvaluationObservabilitySummarySchema: GenMessage<EvaluationObservabilitySummary>;
1997
+ /**
1998
+ * @generated from message fermata.v1.EvaluationRecentRunSummary
1999
+ */
2000
+ export type EvaluationRecentRunSummary = Message<"fermata.v1.EvaluationRecentRunSummary"> & {
2001
+ /**
2002
+ * @generated from field: string scenario_run_id = 1;
2003
+ */
2004
+ scenarioRunId: string;
2005
+ /**
2006
+ * @generated from field: string scenario_id = 2;
2007
+ */
2008
+ scenarioId: string;
2009
+ /**
2010
+ * @generated from field: int32 total_results = 3;
2011
+ */
2012
+ totalResults: number;
2013
+ /**
2014
+ * @generated from field: int32 completed_results = 4;
2015
+ */
2016
+ completedResults: number;
2017
+ /**
2018
+ * @generated from field: int32 failed_results = 5;
2019
+ */
2020
+ failedResults: number;
2021
+ /**
2022
+ * @generated from field: double average_score = 6;
2023
+ */
2024
+ averageScore: number;
2025
+ /**
2026
+ * @generated from field: common.v1.Money total_cost = 7;
2027
+ */
2028
+ totalCost?: Money | undefined;
2029
+ /**
2030
+ * @generated from field: common.v1.Money average_cost = 8;
2031
+ */
2032
+ averageCost?: Money | undefined;
2033
+ /**
2034
+ * @generated from field: double average_latency_ms = 9;
2035
+ */
2036
+ averageLatencyMs: number;
2037
+ /**
2038
+ * @generated from field: int64 total_tokens = 10;
2039
+ */
2040
+ totalTokens: bigint;
2041
+ /**
2042
+ * @generated from field: google.protobuf.Timestamp started_at = 11;
2043
+ */
2044
+ startedAt?: Timestamp | undefined;
2045
+ /**
2046
+ * @generated from field: google.protobuf.Timestamp completed_at = 12;
2047
+ */
2048
+ completedAt?: Timestamp | undefined;
2049
+ /**
2050
+ * @generated from field: string trace_id = 13;
2051
+ */
2052
+ traceId: string;
2053
+ /**
2054
+ * @generated from field: bool objective_achieved = 14;
2055
+ */
2056
+ objectiveAchieved: boolean;
2057
+ };
2058
+ /**
2059
+ * Describes the message fermata.v1.EvaluationRecentRunSummary.
2060
+ * Use `create(EvaluationRecentRunSummarySchema)` to create a new message.
2061
+ */
2062
+ export declare const EvaluationRecentRunSummarySchema: GenMessage<EvaluationRecentRunSummary>;
2063
+ /**
2064
+ * @generated from message fermata.v1.EvaluationRegressionAlert
2065
+ */
2066
+ export type EvaluationRegressionAlert = Message<"fermata.v1.EvaluationRegressionAlert"> & {
2067
+ /**
2068
+ * @generated from field: string id = 1;
2069
+ */
2070
+ id: string;
2071
+ /**
2072
+ * @generated from field: string scenario_id = 2;
2073
+ */
2074
+ scenarioId: string;
2075
+ /**
2076
+ * @generated from field: string scenario_run_id = 3;
2077
+ */
2078
+ scenarioRunId: string;
2079
+ /**
2080
+ * @generated from field: string severity = 4;
2081
+ */
2082
+ severity: string;
2083
+ /**
2084
+ * @generated from field: string message = 5;
2085
+ */
2086
+ message: string;
2087
+ /**
2088
+ * @generated from field: double regression_percentage = 6;
2089
+ */
2090
+ regressionPercentage: number;
2091
+ /**
2092
+ * @generated from field: string baseline_scenario_run_id = 7;
2093
+ */
2094
+ baselineScenarioRunId: string;
2095
+ /**
2096
+ * @generated from field: double average_latency_ms = 8;
2097
+ */
2098
+ averageLatencyMs: number;
2099
+ /**
2100
+ * @generated from field: common.v1.Money total_cost = 9;
2101
+ */
2102
+ totalCost?: Money | undefined;
2103
+ /**
2104
+ * @generated from field: string environment = 10;
2105
+ */
2106
+ environment: string;
2107
+ /**
2108
+ * @generated from field: bool statistically_significant = 11;
2109
+ */
2110
+ statisticallySignificant: boolean;
2111
+ /**
2112
+ * @generated from field: double p_value = 12;
2113
+ */
2114
+ pValue: number;
2115
+ /**
2116
+ * @generated from field: repeated string degraded_metrics = 13;
2117
+ */
2118
+ degradedMetrics: string[];
2119
+ /**
2120
+ * @generated from field: google.protobuf.Timestamp recorded_at = 14;
2121
+ */
2122
+ recordedAt?: Timestamp | undefined;
2123
+ };
2124
+ /**
2125
+ * Describes the message fermata.v1.EvaluationRegressionAlert.
2126
+ * Use `create(EvaluationRegressionAlertSchema)` to create a new message.
2127
+ */
2128
+ export declare const EvaluationRegressionAlertSchema: GenMessage<EvaluationRegressionAlert>;
2129
+ /**
2130
+ * @generated from message fermata.v1.GetEvaluationObservabilityDashboardResponse
2131
+ */
2132
+ export type GetEvaluationObservabilityDashboardResponse = Message<"fermata.v1.GetEvaluationObservabilityDashboardResponse"> & {
2133
+ /**
2134
+ * @generated from field: fermata.v1.EvaluationObservabilitySummary summary = 1;
2135
+ */
2136
+ summary?: EvaluationObservabilitySummary | undefined;
2137
+ /**
2138
+ * @generated from field: repeated fermata.v1.EvaluationRecentRunSummary recent_runs = 2;
2139
+ */
2140
+ recentRuns: EvaluationRecentRunSummary[];
2141
+ /**
2142
+ * @generated from field: repeated fermata.v1.EvaluationRegressionAlert regression_alerts = 3;
2143
+ */
2144
+ regressionAlerts: EvaluationRegressionAlert[];
2145
+ };
2146
+ /**
2147
+ * Describes the message fermata.v1.GetEvaluationObservabilityDashboardResponse.
2148
+ * Use `create(GetEvaluationObservabilityDashboardResponseSchema)` to create a new message.
2149
+ */
2150
+ export declare const GetEvaluationObservabilityDashboardResponseSchema: GenMessage<GetEvaluationObservabilityDashboardResponse>;
2151
+ /**
2152
+ * @generated from message fermata.v1.GetEvaluationRunMetricsRequest
2153
+ */
2154
+ export type GetEvaluationRunMetricsRequest = Message<"fermata.v1.GetEvaluationRunMetricsRequest"> & {
2155
+ /**
2156
+ * @generated from field: string organization_id = 1;
2157
+ */
2158
+ organizationId: string;
2159
+ /**
2160
+ * @generated from field: string workspace_id = 2;
2161
+ */
2162
+ workspaceId: string;
2163
+ /**
2164
+ * @generated from field: string run_id = 3;
2165
+ */
2166
+ runId: string;
2167
+ };
2168
+ /**
2169
+ * Describes the message fermata.v1.GetEvaluationRunMetricsRequest.
2170
+ * Use `create(GetEvaluationRunMetricsRequestSchema)` to create a new message.
2171
+ */
2172
+ export declare const GetEvaluationRunMetricsRequestSchema: GenMessage<GetEvaluationRunMetricsRequest>;
2173
+ /**
2174
+ * @generated from message fermata.v1.EvaluationRunMetricsSummary
2175
+ */
2176
+ export type EvaluationRunMetricsSummary = Message<"fermata.v1.EvaluationRunMetricsSummary"> & {
2177
+ /**
2178
+ * @generated from field: int32 result_count = 1;
2179
+ */
2180
+ resultCount: number;
2181
+ /**
2182
+ * @generated from field: int32 failed_results = 2;
2183
+ */
2184
+ failedResults: number;
2185
+ /**
2186
+ * @generated from field: double average_score = 3;
2187
+ */
2188
+ averageScore: number;
2189
+ /**
2190
+ * @generated from field: common.v1.Money total_cost = 4;
2191
+ */
2192
+ totalCost?: Money | undefined;
2193
+ /**
2194
+ * @generated from field: common.v1.Money average_cost = 5;
2195
+ */
2196
+ averageCost?: Money | undefined;
2197
+ /**
2198
+ * @generated from field: double average_latency_ms = 6;
2199
+ */
2200
+ averageLatencyMs: number;
2201
+ /**
2202
+ * @generated from field: int64 p95_latency_ms = 7;
2203
+ */
2204
+ p95LatencyMs: bigint;
2205
+ /**
2206
+ * @generated from field: int64 total_tokens = 8;
2207
+ */
2208
+ totalTokens: bigint;
2209
+ };
2210
+ /**
2211
+ * Describes the message fermata.v1.EvaluationRunMetricsSummary.
2212
+ * Use `create(EvaluationRunMetricsSummarySchema)` to create a new message.
2213
+ */
2214
+ export declare const EvaluationRunMetricsSummarySchema: GenMessage<EvaluationRunMetricsSummary>;
2215
+ /**
2216
+ * @generated from message fermata.v1.EvaluationRunResultMetrics
2217
+ */
2218
+ export type EvaluationRunResultMetrics = Message<"fermata.v1.EvaluationRunResultMetrics"> & {
2219
+ /**
2220
+ * @generated from field: string assertion_id = 1;
2221
+ */
2222
+ assertionId: string;
2223
+ /**
2224
+ * @generated from field: bool passed = 2;
2225
+ */
2226
+ passed: boolean;
2227
+ /**
2228
+ * @generated from field: double score = 3;
2229
+ */
2230
+ score: number;
2231
+ /**
2232
+ * @generated from field: string actual = 4;
2233
+ */
2234
+ actual: string;
2235
+ /**
2236
+ * @generated from field: string message = 5;
2237
+ */
2238
+ message: string;
2239
+ /**
2240
+ * @generated from field: google.protobuf.Struct metadata = 6;
2241
+ */
2242
+ metadata?: JsonObject | undefined;
2243
+ /**
2244
+ * @generated from field: google.protobuf.Timestamp created_at = 7;
2245
+ */
2246
+ createdAt?: Timestamp | undefined;
2247
+ };
2248
+ /**
2249
+ * Describes the message fermata.v1.EvaluationRunResultMetrics.
2250
+ * Use `create(EvaluationRunResultMetricsSchema)` to create a new message.
2251
+ */
2252
+ export declare const EvaluationRunResultMetricsSchema: GenMessage<EvaluationRunResultMetrics>;
2253
+ /**
2254
+ * @generated from message fermata.v1.GetEvaluationRunMetricsResponse
2255
+ */
2256
+ export type GetEvaluationRunMetricsResponse = Message<"fermata.v1.GetEvaluationRunMetricsResponse"> & {
2257
+ /**
2258
+ * @generated from field: string scenario_run_id = 1;
2259
+ */
2260
+ scenarioRunId: string;
2261
+ /**
2262
+ * @generated from field: fermata.v1.EvaluationRunMetricsSummary summary = 2;
2263
+ */
2264
+ summary?: EvaluationRunMetricsSummary | undefined;
2265
+ /**
2266
+ * @generated from field: repeated fermata.v1.EvaluationRunResultMetrics results = 3;
2267
+ */
2268
+ results: EvaluationRunResultMetrics[];
2269
+ };
2270
+ /**
2271
+ * Describes the message fermata.v1.GetEvaluationRunMetricsResponse.
2272
+ * Use `create(GetEvaluationRunMetricsResponseSchema)` to create a new message.
2273
+ */
2274
+ export declare const GetEvaluationRunMetricsResponseSchema: GenMessage<GetEvaluationRunMetricsResponse>;
1921
2275
  /**
1922
2276
  * @generated from message fermata.v1.DiagnosticFinding
1923
2277
  */
@@ -3187,6 +3541,22 @@ export declare const FermataService: GenService<{
3187
3541
  input: typeof ListScenarioRunsRequestSchema;
3188
3542
  output: typeof ListScenarioRunsResponseSchema;
3189
3543
  };
3544
+ /**
3545
+ * @generated from rpc fermata.v1.FermataService.GetEvaluationObservabilityDashboard
3546
+ */
3547
+ getEvaluationObservabilityDashboard: {
3548
+ methodKind: "unary";
3549
+ input: typeof GetEvaluationObservabilityDashboardRequestSchema;
3550
+ output: typeof GetEvaluationObservabilityDashboardResponseSchema;
3551
+ };
3552
+ /**
3553
+ * @generated from rpc fermata.v1.FermataService.GetEvaluationRunMetrics
3554
+ */
3555
+ getEvaluationRunMetrics: {
3556
+ methodKind: "unary";
3557
+ input: typeof GetEvaluationRunMetricsRequestSchema;
3558
+ output: typeof GetEvaluationRunMetricsResponseSchema;
3559
+ };
3190
3560
  /**
3191
3561
  * @generated from rpc fermata.v1.FermataService.ExplainScenarioRun
3192
3562
  */
@@ -11,7 +11,7 @@ import { file_traces_v1_traces } from "../../traces/v1/traces_pb.js";
11
11
  /**
12
12
  * Describes the file fermata/v1/fermata.proto.
13
13
  */
14
- export const file_fermata_v1_fermata = /*@__PURE__*/ fileDesc("ChhmZXJtYXRhL3YxL2Zlcm1hdGEucHJvdG8SCmZlcm1hdGEudjEiqwIKCVRlc3RTdWl0ZRIKCgJpZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSHQoMd29ya3NwYWNlX2lkGAMgASgJQge6SARyAhABEhUKBG5hbWUYBCABKAlCB7pIBHICEAESEwoLZGVzY3JpcHRpb24YBSABKAkSIwoFY2FzZXMYBiADKAsyFC5mZXJtYXRhLnYxLlRlc3RDYXNlEikKCG1ldGFkYXRhGAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKrAQoIVGVzdENhc2USCgoCaWQYASABKAkSFQoEbmFtZRgCIAEoCUIHukgEcgIQARINCgVpbnB1dBgDIAEoCRIXCg9leHBlY3RlZF9vdXRwdXQYBCABKAkSKQoKYXNzZXJ0aW9ucxgFIAMoCzIVLmZlcm1hdGEudjEuQXNzZXJ0aW9uEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKsAQoJQXNzZXJ0aW9uEgoKAmlkGAEgASgJEjEKBGtpbmQYAiABKA4yGS5mZXJtYXRhLnYxLkFzc2VydGlvbktpbmRCCLpIBYIBAhABEg4KBnRhcmdldBgDIAEoCRIQCghleHBlY3RlZBgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCRIpCghtZXRhZGF0YRgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi0AEKD0N1c3RvbUV2YWx1YXRvchIVCgRuYW1lGAEgASgJQge6SARyAhABEhcKBnNvdXJjZRgCIAEoCUIHukgEcgIQARIuCgpjcmVhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9vcmdhbml6YXRpb25faWQYBSABKAkSFAoMd29ya3NwYWNlX2lkGAYgASgJIqMDCgVKdWRnZRIVCgRuYW1lGAEgASgJQge6SARyAhABEi0KBGtpbmQYAiABKA4yFS5mZXJtYXRhLnYxLkp1ZGdlS2luZEIIukgFggECEAESDgoGcHJvbXB0GAMgASgJEg0KBW1vZGVsGAQgASgJEiwKC3RlbXBlcmF0dXJlGAUgASgBQhe6SBQSEhkAAAAAAAAAQCkAAAAAAAAAABIbCgptYXhfdG9rZW5zGAYgASgFQge6SAQaAigAEhAKCGNyaXRlcmlhGAcgAygJEh4KBndlaWdodBgIIAEoAUIOukgLEgkpAAAAAAAAAAASKQoIbWV0YWRhdGEYCSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KCmNyZWF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD29yZ2FuaXphdGlvbl9pZBgMIAEoCRIUCgx3b3Jrc3BhY2VfaWQYDSABKAkiugYKCFNjZW5hcmlvEgoKAmlkGAEgASgJEiAKD29yZ2FuaXphdGlvbl9pZBgCIAEoCUIHukgEcgIQARIdCgx3b3Jrc3BhY2VfaWQYAyABKAlCB7pIBHICEAESFQoEbmFtZRgEIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgFIAEoCRIoCglvYmplY3RpdmUYBiABKAsyFS5mZXJtYXRhLnYxLk9iamVjdGl2ZRItCgxhZ2VudF9jb25maWcYByABKAsyFy5mZXJtYXRhLnYxLkFnZW50Q29uZmlnEjQKC2Vudmlyb25tZW50GAggASgLMh8uZmVybWF0YS52MS5TY2VuYXJpb0Vudmlyb25tZW50EjEKDnVzZXJfc2ltdWxhdG9yGAkgASgLMhkuZmVybWF0YS52MS5Vc2VyU2ltdWxhdG9yEiIKCG1heF9jb3N0GAogASgLMhAuY29tbW9uLnYxLk1vbmV5Ei8KDG1heF9kdXJhdGlvbhgLIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIaCgltYXhfc3RlcHMYDCABKAVCB7pIBBoCKAASJgoVbWF4X2FwcHJvdmFsX3JlcXVlc3RzGA0gASgFQge6SAQaAigAEjYKEG91dGNvbWVfY3JpdGVyaWEYDiADKAsyHC5mZXJtYXRhLnYxLk91dGNvbWVDcml0ZXJpb24SPgoVZ292ZXJuYW5jZV9hc3NlcnRpb25zGA8gAygLMh8uZmVybWF0YS52MS5Hb3Zlcm5hbmNlQXNzZXJ0aW9uEj4KFWRlbGVnYXRpb25fYXNzZXJ0aW9ucxgQIAMoCzIfLmZlcm1hdGEudjEuRGVsZWdhdGlvbkFzc2VydGlvbhIXCgZlcG9jaHMYESABKAVCB7pIBBoCKAASKQoIbWV0YWRhdGEYEiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KCmNyZWF0ZWRfYXQYEyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYFCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIu8BCglPYmplY3RpdmUSHAoLZGVzY3JpcHRpb24YASABKAlCB7pIBHICEAESNgoQc3VjY2Vzc19jcml0ZXJpYRgCIAMoCzIcLmZlcm1hdGEudjEuU3VjY2Vzc0NyaXRlcmlvbhJACg5leHBlY3RlZF9zdGF0ZRgDIAMoCzIoLmZlcm1hdGEudjEuT2JqZWN0aXZlLkV4cGVjdGVkU3RhdGVFbnRyeRIUCgxvYmplY3RpdmVfaWQYBCABKAkaNAoSRXhwZWN0ZWRTdGF0ZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEirwEKEFN1Y2Nlc3NDcml0ZXJpb24SCgoCaWQYASABKAkSHAoLZGVzY3JpcHRpb24YAiABKAlCB7pIBHICEAESDgoGbWV0cmljGAMgASgJEhYKDmV4cGVjdGVkX3ZhbHVlGAQgASgJEh4KBndlaWdodBgFIAEoAUIOukgLEgkpAAAAAAAAAAASKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IqUBCgtBZ2VudENvbmZpZxIQCghhZ2VudF9pZBgBIAEoCRINCgVtb2RlbBgCIAEoCRIRCgl0b29sX3JlZnMYAyADKAkSGQoRcGVybWlzc2lvbl9zY29wZXMYBCADKAkSHAoUZ292ZXJuYW5jZV9wb2xpY3lfaWQYBSABKAkSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IvcBChNTY2VuYXJpb0Vudmlyb25tZW50EjsKBGtpbmQYASABKA4yIy5mZXJtYXRhLnYxLlNjZW5hcmlvRW52aXJvbm1lbnRLaW5kQgi6SAWCAQIQARIjCgV0b29scxgCIAMoCzIULmZlcm1hdGEudjEuTW9ja1Rvb2wSKwoJZW5kcG9pbnRzGAMgAygLMhguZmVybWF0YS52MS5Nb2NrRW5kcG9pbnQSFQoNc2VlZF9kYXRhX3JlZhgEIAEoCRIPCgdzYW5kYm94GAUgASgJEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCK7AQoITW9ja1Rvb2wSFQoEbmFtZRgBIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgCIAEoCRItCgxpbnB1dF9zY2hlbWEYAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EikKCHJlc3BvbnNlGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIpCghtZXRhZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiqQEKDE1vY2tFbmRwb2ludBIOCgZtZXRob2QYASABKAkSFQoEcGF0aBgCIAEoCUIHukgEcgIQARIcCgtzdGF0dXNfY29kZRgDIAEoBUIHukgEGgIoABIpCghyZXNwb25zZRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKQoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IocCCg1Vc2VyU2ltdWxhdG9yEg8KB3BlcnNvbmEYASABKAkSFAoMaW5zdHJ1Y3Rpb25zGAIgASgJEj0KCHN0cmF0ZWd5GAMgASgOMiEuZmVybWF0YS52MS5Vc2VyU2ltdWxhdG9yU3RyYXRlZ3lCCLpIBYIBAhABEg0KBW1vZGVsGAQgASgJEhoKCW1heF90dXJucxgFIAEoBUIHukgEGgIoABIbChN2ZXJpZnlfYWdlbnRfY2xhaW1zGAYgASgIEh0KFXJlcXVlc3RfY2xhcmlmaWNhdGlvbhgHIAEoCBIpCghtZXRhZGF0YRgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QixQEKEE91dGNvbWVDcml0ZXJpb24SCgoCaWQYASABKAkSOAoEa2luZBgCIAEoDjIgLmZlcm1hdGEudjEuT3V0Y29tZUNyaXRlcmlvbktpbmRCCLpIBYIBAhABEg4KBnRhcmdldBgDIAEoCRIQCghleHBlY3RlZBgEIAEoCRIeCgZ3ZWlnaHQYBSABKAFCDrpICxIJKQAAAAAAAAAAEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCLcAgoTR292ZXJuYW5jZUFzc2VydGlvbhIKCgJpZBgBIAEoCRI7CgR0eXBlGAIgASgOMiMuZmVybWF0YS52MS5Hb3Zlcm5hbmNlQXNzZXJ0aW9uVHlwZUIIukgFggECEAESOwoTZXhwZWN0ZWRfcmlza19sZXZlbBgDIAEoDjIULmNvbW1vbi52MS5SaXNrTGV2ZWxCCLpIBYIBAhABEhcKD3Nob3VsZF9lc2NhbGF0ZRgEIAEoCBIhChlleHBlY3RlZF9hcHByb3ZhbF9vdXRjb21lGAUgASgJEhsKE2FsbG93ZWRfZGF0YV9zY29wZXMYBiADKAkSGgoSZGVuaWVkX2RhdGFfc2NvcGVzGAcgAygJEh8KF2V4cGVjdGVkX3BpaV9jYXRlZ29yaWVzGAggAygJEikKCG1ldGFkYXRhGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCLqAQoTRGVsZWdhdGlvbkFzc2VydGlvbhIKCgJpZBgBIAEoCRI7CgR0eXBlGAIgASgOMiMuZmVybWF0YS52MS5EZWxlZ2F0aW9uQXNzZXJ0aW9uVHlwZUIIukgFggECEAESGQoRZXhwZWN0ZWRfYWdlbnRfaWQYAyABKAkSIAoPbWF4X2NoYWluX2RlcHRoGAQgASgFQge6SAQaAigAEiIKCG1heF9jb3N0GAUgASgLMhAuY29tbW9uLnYxLk1vbmV5EikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKIBAoLU2NlbmFyaW9SdW4SCgoCaWQYASABKAkSHAoLc2NlbmFyaW9faWQYAiABKAlCB7pIBHICEAESIAoPb3JnYW5pemF0aW9uX2lkGAMgASgJQge6SARyAhABEh0KDHdvcmtzcGFjZV9pZBgEIAEoCUIHukgEcgIQARIWCgVlcG9jaBgFIAEoBUIHukgEGgIoABI3CgZzdGF0dXMYBiABKA4yHS5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuU3RhdHVzQgi6SAWCAQIQARIqCgZyZXN1bHQYByABKAsyGi5mZXJtYXRhLnYxLlNjZW5hcmlvUmVzdWx0EhAKCHRyYWNlX2lkGAggASgJEikKCG1ldGFkYXRhGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpzdGFydGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxjb21wbGV0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmxpbmVhZ2VfaWQYDiABKAkisQYKDlNjZW5hcmlvUmVzdWx0EhoKEm9iamVjdGl2ZV9hY2hpZXZlZBgBIAEoCBIZChFvYmplY3RpdmVfc3VtbWFyeRgCIAEoCRIcCgt0b3RhbF9zdGVwcxgDIAEoBUIHukgEGgIoABIcCgttb2RlbF9jYWxscxgEIAEoBUIHukgEGgIoABIbCgp0b29sX2NhbGxzGAUgASgFQge6SAQaAigAEiIKEWFwcHJvdmFsX3JlcXVlc3RzGAYgASgFQge6SAQaAigAEiIKEWRlbGVnYXRpb25fZXZlbnRzGAcgASgFQge6SAQaAigAEiAKD3JlY292ZXJ5X2V2ZW50cxgIIAEoBUIHukgEGgIoABI+ChFhc3NlcnRpb25fcmVzdWx0cxgJIAMoCzIjLmZlcm1hdGEudjEuU2NlbmFyaW9Bc3NlcnRpb25SZXN1bHQSLwoKZ292ZXJuYW5jZRgKIAEoCzIbLmZlcm1hdGEudjEuR292ZXJuYW5jZVNjb3JlEiwKCWVjb25vbWljcxgLIAEoCzIZLmZlcm1hdGEudjEuRWNvbm9taWNTY29yZRIhCglwYXNzX2F0X2sYDCABKAFCDrpICxIJKQAAAAAAAAAAEi8KCmRlbGVnYXRpb24YDSABKAsyGy5mZXJtYXRhLnYxLkRlbGVnYXRpb25TY29yZRIkCgp0b3RhbF9jb3N0GA4gASgLMhAuY29tbW9uLnYxLk1vbmV5EjEKDnRvdGFsX2R1cmF0aW9uGA8gASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEikKCG1ldGFkYXRhGBAgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIjCgp0cmFqZWN0b3J5GBEgAygLMg8udHJhY2VzLnYxLlNwYW4SJQoNdHJhamVjdG9yeV9mMRgSIAEoAUIOukgLEgkpAAAAAAAAAAASNgoedHJhamVjdG9yeV9lZGl0X2Rpc3RhbmNlX3Njb3JlGBMgASgBQg66SAsSCSkAAAAAAAAAABIqCgVkcmlmdBgUIAEoCzIbLmZlcm1hdGEudjEuRHJpZnRDb21wYXJpc29uIpoBChdTY2VuYXJpb0Fzc2VydGlvblJlc3VsdBIUCgxhc3NlcnRpb25faWQYASABKAkSDgoGcGFzc2VkGAIgASgIEg0KBXNjb3JlGAMgASgBEg4KBmFjdHVhbBgEIAEoCRIPCgdtZXNzYWdlGAUgASgJEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKPAgoPR292ZXJuYW5jZVNjb3JlEiwKFGVzY2FsYXRpb25fcHJlY2lzaW9uGAEgASgBQg66SAsSCSkAAAAAAAAAABIpChFlc2NhbGF0aW9uX3JlY2FsbBgCIAEoAUIOukgLEgkpAAAAAAAAAAASKQoRcG9saWN5X2NvbXBsaWFuY2UYAyABKAFCDrpICxIJKQAAAAAAAAAAEisKE2FwcHJvdmFsX2VmZmljaWVuY3kYBCABKAFCDrpICxIJKQAAAAAAAAAAEiEKCWNvbXBvc2l0ZRgFIAEoAUIOukgLEgkpAAAAAAAAAAASKAoIZXZpZGVuY2UYBiADKAsyFi5jb21tb24udjEuRXZpZGVuY2VSZWYigAIKDUVjb25vbWljU2NvcmUSMgoYY29zdF9wZXJfc3VjY2Vzc2Z1bF90YXNrGAEgASgLMhAuY29tbW9uLnYxLk1vbmV5EiIKCGxsbV9jb3N0GAIgASgLMhAuY29tbW9uLnYxLk1vbmV5EiMKCXRvb2xfY29zdBgDIAEoCzIQLmNvbW1vbi52MS5Nb25leRIqChBzdXBlcnZpc2lvbl9jb3N0GAQgASgLMhAuY29tbW9uLnYxLk1vbmV5EhoKEm9uX3BhcmV0b19mcm9udGllchgFIAEoCBIqChJxdWFsaXR5X3Blcl9kb2xsYXIYBiABKAFCDrpICxIJKQAAAAAAAAAAIsoBCg9EZWxlZ2F0aW9uU2NvcmUSKwoTZGVsZWdhdGlvbl9hY2N1cmFjeRgBIAEoAUIOukgLEgkpAAAAAAAAAAASKAoQY29udGV4dF9maWRlbGl0eRgCIAEoAUIOukgLEgkpAAAAAAAAAAASFwoPZWZmaWNpZW5jeV9nYWluGAMgASgBEikKEWZhaWx1cmVfaXNvbGF0aW9uGAQgASgBQg66SAsSCSkAAAAAAAAAABIcCgtjaGFpbl9kZXB0aBgFIAEoBUIHukgEGgIoACLeAwoPRHJpZnRDb21wYXJpc29uEhAKCGRldGVjdGVkGAEgASgIEi4KFmJhc2VsaW5lX3F1YWxpdHlfc2NvcmUYAiABKAFCDrpICxIJKQAAAAAAAAAAEi0KFWN1cnJlbnRfcXVhbGl0eV9zY29yZRgDIAEoAUIOukgLEgkpAAAAAAAAAAASFQoNcXVhbGl0eV9kZWx0YRgEIAEoARInCg1iYXNlbGluZV9jb3N0GAUgASgLMhAuY29tbW9uLnYxLk1vbmV5EiYKDGN1cnJlbnRfY29zdBgGIAEoCzIQLmNvbW1vbi52MS5Nb25leRIkCgpjb3N0X2RlbHRhGAcgASgLMhAuY29tbW9uLnYxLk1vbmV5EjAKGGJhc2VsaW5lX2VzY2FsYXRpb25fcmF0ZRgIIAEoAUIOukgLEgkpAAAAAAAAAAASLwoXY3VycmVudF9lc2NhbGF0aW9uX3JhdGUYCSABKAFCDrpICxIJKQAAAAAAAAAAEh0KFWVzY2FsYXRpb25fcmF0ZV9kZWx0YRgKIAEoARIgChhnZW5lcmF0ZWRfc3VpdGVfc3RyYXRlZ3kYCyABKAkSKAoIZXZpZGVuY2UYDCADKAsyFi5jb21tb24udjEuRXZpZGVuY2VSZWYi1QEKFkNyZWF0ZVRlc3RTdWl0ZVJlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEh0KDHdvcmtzcGFjZV9pZBgCIAEoCUIHukgEcgIQARIVCgRuYW1lGAMgASgJQge6SARyAhABEhMKC2Rlc2NyaXB0aW9uGAQgASgJEiMKBWNhc2VzGAUgAygLMhQuZmVybWF0YS52MS5UZXN0Q2FzZRIpCghtZXRhZGF0YRgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiPwoXQ3JlYXRlVGVzdFN1aXRlUmVzcG9uc2USJAoFc3VpdGUYASABKAsyFS5mZXJtYXRhLnYxLlRlc3RTdWl0ZSJfChNHZXRUZXN0U3VpdGVSZXF1ZXN0EhkKCHN1aXRlX2lkGAEgASgJQge6SARyAhABEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAyABKAkiPAoUR2V0VGVzdFN1aXRlUmVzcG9uc2USJAoFc3VpdGUYASABKAsyFS5mZXJtYXRhLnYxLlRlc3RTdWl0ZSKAAQoVTGlzdFRlc3RTdWl0ZXNSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSFgoFbGltaXQYAyABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAQgASgFQge6SAQaAigAIlEKFkxpc3RUZXN0U3VpdGVzUmVzcG9uc2USJQoGc3VpdGVzGAEgAygLMhUuZmVybWF0YS52MS5UZXN0U3VpdGUSEAoIaGFzX21vcmUYAiABKAgi4wUKFUNyZWF0ZVNjZW5hcmlvUmVxdWVzdBIgCg9vcmdhbml6YXRpb25faWQYASABKAlCB7pIBHICEAESHQoMd29ya3NwYWNlX2lkGAIgASgJQge6SARyAhABEhUKBG5hbWUYAyABKAlCB7pIBHICEAESEwoLZGVzY3JpcHRpb24YBCABKAkSMAoJb2JqZWN0aXZlGAUgASgLMhUuZmVybWF0YS52MS5PYmplY3RpdmVCBrpIA8gBARItCgxhZ2VudF9jb25maWcYBiABKAsyFy5mZXJtYXRhLnYxLkFnZW50Q29uZmlnEjQKC2Vudmlyb25tZW50GAcgASgLMh8uZmVybWF0YS52MS5TY2VuYXJpb0Vudmlyb25tZW50EjEKDnVzZXJfc2ltdWxhdG9yGAggASgLMhkuZmVybWF0YS52MS5Vc2VyU2ltdWxhdG9yEiIKCG1heF9jb3N0GAkgASgLMhAuY29tbW9uLnYxLk1vbmV5Ei8KDG1heF9kdXJhdGlvbhgKIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIaCgltYXhfc3RlcHMYCyABKAVCB7pIBBoCKAASJgoVbWF4X2FwcHJvdmFsX3JlcXVlc3RzGAwgASgFQge6SAQaAigAEjYKEG91dGNvbWVfY3JpdGVyaWEYDSADKAsyHC5mZXJtYXRhLnYxLk91dGNvbWVDcml0ZXJpb24SPgoVZ292ZXJuYW5jZV9hc3NlcnRpb25zGA4gAygLMh8uZmVybWF0YS52MS5Hb3Zlcm5hbmNlQXNzZXJ0aW9uEj4KFWRlbGVnYXRpb25fYXNzZXJ0aW9ucxgPIAMoCzIfLmZlcm1hdGEudjEuRGVsZWdhdGlvbkFzc2VydGlvbhIXCgZlcG9jaHMYECABKAVCB7pIBBoCKAASKQoIbWV0YWRhdGEYESABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IkAKFkNyZWF0ZVNjZW5hcmlvUmVzcG9uc2USJgoIc2NlbmFyaW8YASABKAsyFC5mZXJtYXRhLnYxLlNjZW5hcmlvImEKEkdldFNjZW5hcmlvUmVxdWVzdBIcCgtzY2VuYXJpb19pZBgBIAEoCUIHukgEcgIQARIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSFAoMd29ya3NwYWNlX2lkGAMgASgJIj0KE0dldFNjZW5hcmlvUmVzcG9uc2USJgoIc2NlbmFyaW8YASABKAsyFC5mZXJtYXRhLnYxLlNjZW5hcmlvIn8KFExpc3RTY2VuYXJpb3NSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSFgoFbGltaXQYAyABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAQgASgFQge6SAQaAigAIlIKFUxpc3RTY2VuYXJpb3NSZXNwb25zZRInCglzY2VuYXJpb3MYASADKAsyFC5mZXJtYXRhLnYxLlNjZW5hcmlvEhAKCGhhc19tb3JlGAIgASgIIn0KHFVwc2VydEN1c3RvbUV2YWx1YXRvclJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARIXCgZzb3VyY2UYAiABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEhQKDHdvcmtzcGFjZV9pZBgEIAEoCSJPCh1VcHNlcnRDdXN0b21FdmFsdWF0b3JSZXNwb25zZRIuCglldmFsdWF0b3IYASABKAsyGy5mZXJtYXRhLnYxLkN1c3RvbUV2YWx1YXRvciJhChlHZXRDdXN0b21FdmFsdWF0b3JSZXF1ZXN0EhUKBG5hbWUYASABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEhQKDHdvcmtzcGFjZV9pZBgDIAEoCSJMChpHZXRDdXN0b21FdmFsdWF0b3JSZXNwb25zZRIuCglldmFsdWF0b3IYASABKAsyGy5mZXJtYXRhLnYxLkN1c3RvbUV2YWx1YXRvciJ9ChtMaXN0Q3VzdG9tRXZhbHVhdG9yc1JlcXVlc3QSFgoFbGltaXQYASABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAIgASgFQge6SAQaAigAEhcKD29yZ2FuaXphdGlvbl9pZBgDIAEoCRIUCgx3b3Jrc3BhY2VfaWQYBCABKAkiYQocTGlzdEN1c3RvbUV2YWx1YXRvcnNSZXNwb25zZRIvCgpldmFsdWF0b3JzGAEgAygLMhsuZmVybWF0YS52MS5DdXN0b21FdmFsdWF0b3ISEAoIaGFzX21vcmUYAiABKAgiZAocRGVsZXRlQ3VzdG9tRXZhbHVhdG9yUmVxdWVzdBIVCgRuYW1lGAEgASgJQge6SARyAhABEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAyABKAkiHwodRGVsZXRlQ3VzdG9tRXZhbHVhdG9yUmVzcG9uc2Ui0AIKElVwc2VydEp1ZGdlUmVxdWVzdBIVCgRuYW1lGAEgASgJQge6SARyAhABEi0KBGtpbmQYAiABKA4yFS5mZXJtYXRhLnYxLkp1ZGdlS2luZEIIukgFggECEAESDgoGcHJvbXB0GAMgASgJEg0KBW1vZGVsGAQgASgJEiwKC3RlbXBlcmF0dXJlGAUgASgBQhe6SBQSEhkAAAAAAAAAQCkAAAAAAAAAABIbCgptYXhfdG9rZW5zGAYgASgFQge6SAQaAigAEhAKCGNyaXRlcmlhGAcgAygJEh4KBndlaWdodBgIIAEoAUIOukgLEgkpAAAAAAAAAAASKQoIbWV0YWRhdGEYCSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhcKD29yZ2FuaXphdGlvbl9pZBgKIAEoCRIUCgx3b3Jrc3BhY2VfaWQYCyABKAkiNwoTVXBzZXJ0SnVkZ2VSZXNwb25zZRIgCgVqdWRnZRgBIAEoCzIRLmZlcm1hdGEudjEuSnVkZ2UiVwoPR2V0SnVkZ2VSZXF1ZXN0EhUKBG5hbWUYASABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEhQKDHdvcmtzcGFjZV9pZBgDIAEoCSI0ChBHZXRKdWRnZVJlc3BvbnNlEiAKBWp1ZGdlGAEgASgLMhEuZmVybWF0YS52MS5KdWRnZSJzChFMaXN0SnVkZ2VzUmVxdWVzdBIWCgVsaW1pdBgBIAEoBUIHukgEGgIoABIXCgZvZmZzZXQYAiABKAVCB7pIBBoCKAASFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEhQKDHdvcmtzcGFjZV9pZBgEIAEoCSJJChJMaXN0SnVkZ2VzUmVzcG9uc2USIQoGanVkZ2VzGAEgAygLMhEuZmVybWF0YS52MS5KdWRnZRIQCghoYXNfbW9yZRgCIAEoCCJaChJEZWxldGVKdWRnZVJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSFAoMd29ya3NwYWNlX2lkGAMgASgJIhUKE0RlbGV0ZUp1ZGdlUmVzcG9uc2UivgIKFFN0YXJ0U2NlbmFyaW9SZXF1ZXN0EhwKC3NjZW5hcmlvX2lkGAEgASgJQge6SARyAhABEhUKDXJ1bl9pZF9wcmVmaXgYAiABKAkSEAoIdHJhY2VfaWQYAyABKAkSKAoHYWN0dWFscxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoNZXBvY2hfYWN0dWFscxgFIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhcKBmVwb2NocxgHIAEoBUIHukgEGgIoABISCgpsaW5lYWdlX2lkGAggASgJEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRIUCgx3b3Jrc3BhY2VfaWQYCiABKAkiYQoVU3RhcnRTY2VuYXJpb1Jlc3BvbnNlEiUKBHJ1bnMYASADKAsyFy5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuEiEKEHB1Ymxpc2hlZF9ldmVudHMYAiABKAVCB7pIBBoCKAAivQIKHUNyZWF0ZUFuZFN0YXJ0U2NlbmFyaW9SZXF1ZXN0EjsKCHNjZW5hcmlvGAEgASgLMiEuZmVybWF0YS52MS5DcmVhdGVTY2VuYXJpb1JlcXVlc3RCBrpIA8gBARIVCg1ydW5faWRfcHJlZml4GAIgASgJEhAKCHRyYWNlX2lkGAMgASgJEigKB2FjdHVhbHMYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KDWVwb2NoX2FjdHVhbHMYBSADKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei8KDnN0YXJ0X21ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIXCgZlcG9jaHMYByABKAVCB7pIBBoCKAASEgoKbGluZWFnZV9pZBgIIAEoCSKSAQoeQ3JlYXRlQW5kU3RhcnRTY2VuYXJpb1Jlc3BvbnNlEiYKCHNjZW5hcmlvGAEgASgLMhQuZmVybWF0YS52MS5TY2VuYXJpbxIlCgRydW5zGAIgAygLMhcuZmVybWF0YS52MS5TY2VuYXJpb1J1bhIhChBwdWJsaXNoZWRfZXZlbnRzGAMgASgFQge6SAQaAigAIrUDChhSZWNvcmRTY2VuYXJpb1J1blJlcXVlc3QSCgoCaWQYASABKAkSHAoLc2NlbmFyaW9faWQYAiABKAlCB7pIBHICEAESIAoPb3JnYW5pemF0aW9uX2lkGAMgASgJQge6SARyAhABEh0KDHdvcmtzcGFjZV9pZBgEIAEoCUIHukgEcgIQARIWCgVlcG9jaBgFIAEoBUIHukgEGgIoABI3CgZzdGF0dXMYBiABKA4yHS5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuU3RhdHVzQgi6SAWCAQIQARIqCgZyZXN1bHQYByABKAsyGi5mZXJtYXRhLnYxLlNjZW5hcmlvUmVzdWx0EhAKCHRyYWNlX2lkGAggASgJEikKCG1ldGFkYXRhGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpzdGFydGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxjb21wbGV0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmxpbmVhZ2VfaWQYDCABKAkiQQoZUmVjb3JkU2NlbmFyaW9SdW5SZXNwb25zZRIkCgNydW4YASABKAsyFy5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuIl8KFUdldFNjZW5hcmlvUnVuUmVxdWVzdBIXCgZydW5faWQYASABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEhQKDHdvcmtzcGFjZV9pZBgDIAEoCSI+ChZHZXRTY2VuYXJpb1J1blJlc3BvbnNlEiQKA3J1bhgBIAEoCzIXLmZlcm1hdGEudjEuU2NlbmFyaW9SdW4ilwEKF0xpc3RTY2VuYXJpb1J1bnNSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSEwoLc2NlbmFyaW9faWQYAyABKAkSFgoFbGltaXQYBCABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAUgASgFQge6SAQaAigAIlMKGExpc3RTY2VuYXJpb1J1bnNSZXNwb25zZRIlCgRydW5zGAEgAygLMhcuZmVybWF0YS52MS5TY2VuYXJpb1J1bhIQCghoYXNfbW9yZRgCIAEoCCLfAQoRRGlhZ25vc3RpY0ZpbmRpbmcSCgoCaWQYASABKAkSQQoIc2V2ZXJpdHkYAiABKA4yJS5mZXJtYXRhLnYxLkRpYWdub3N0aWNGaW5kaW5nU2V2ZXJpdHlCCLpIBYIBAhABEhYKBXRpdGxlGAMgASgJQge6SARyAhABEg4KBmRldGFpbBgEIAEoCRIoCghldmlkZW5jZRgFIAMoCzIWLmNvbW1vbi52MS5FdmlkZW5jZVJlZhIpCghtZXRhZGF0YRgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi7wQKHEV2YWx1YXRpb25EaWFnbm9zdGljQXJ0aWZhY3QSEwoCaWQYASABKAlCB7pIBHICEAESOgoEa2luZBgCIAEoDjIiLmZlcm1hdGEudjEuRGlhZ25vc3RpY0FydGlmYWN0S2luZEIIukgFggECEAESIAoPb3JnYW5pemF0aW9uX2lkGAMgASgJQge6SARyAhABEhQKDHdvcmtzcGFjZV9pZBgEIAEoCRITCgtzY2VuYXJpb19pZBgFIAEoCRIgCg9zY2VuYXJpb19ydW5faWQYBiABKAlCB7pIBHICEAESEAoIdHJhY2VfaWQYByABKAkSFgoFdGl0bGUYCCABKAlCB7pIBHICEAESDwoHc3VtbWFyeRgJIAEoCRIvCghmaW5kaW5ncxgKIAMoCzIdLmZlcm1hdGEudjEuRGlhZ25vc3RpY0ZpbmRpbmcSKAoIZXZpZGVuY2UYCyADKAsyFi5jb21tb24udjEuRXZpZGVuY2VSZWYSLgoNaW5wdXRfY29udGV4dBgMIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKAoHcGF5bG9hZBgNIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMYXJ0aWZhY3RfdXJpGA4gASgJEhYKDmNvbnRlbnRfc2hhMjU2GA8gASgJEhEKCXBlcnNpc3RlZBgQIAEoCBIuCgpjcmVhdGVkX2F0GBEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GBIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLHAQoZRXhwbGFpblNjZW5hcmlvUnVuUmVxdWVzdBIgCg9vcmdhbml6YXRpb25faWQYASABKAlCB7pIBHICEAESFAoMd29ya3NwYWNlX2lkGAIgASgJEhcKBnJ1bl9pZBgDIAEoCUIHukgEcgIQARIVCg1pbmNsdWRlX3RyYWNlGAQgASgIEhgKEHBlcnNpc3RfYXJ0aWZhY3QYBSABKAgSKAoHY29udGV4dBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiWAoaRXhwbGFpblNjZW5hcmlvUnVuUmVzcG9uc2USOgoIYXJ0aWZhY3QYASABKAsyKC5mZXJtYXRhLnYxLkV2YWx1YXRpb25EaWFnbm9zdGljQXJ0aWZhY3Qi8QEKIkFuYWx5emVTY2VuYXJpb1J1blJvb3RDYXVzZVJlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEhQKDHdvcmtzcGFjZV9pZBgCIAEoCRIXCgZydW5faWQYAyABKAlCB7pIBHICEAESHwoXc3VzcGVjdGVkX2ZhaWx1cmVfbW9kZXMYBCADKAkSFQoNaW5jbHVkZV90cmFjZRgFIAEoCBIYChBwZXJzaXN0X2FydGlmYWN0GAYgASgIEigKB2NvbnRleHQYByABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0ImEKI0FuYWx5emVTY2VuYXJpb1J1blJvb3RDYXVzZVJlc3BvbnNlEjoKCGFydGlmYWN0GAEgASgLMiguZmVybWF0YS52MS5FdmFsdWF0aW9uRGlhZ25vc3RpY0FydGlmYWN0IpECCh5KdWRnZVZhbGlkYXRpb25BY2N1cmFjeU1ldHJpY3MSEQoJcHJlY2lzaW9uGAEgASgBEg4KBnJlY2FsbBgCIAEoARIQCghmMV9zY29yZRgDIAEoARIQCghhY2N1cmFjeRgEIAEoARIiChF0b3RhbF92YWxpZGF0aW9ucxgFIAEoBUIHukgEGgIoABIfCg50cnVlX3Bvc2l0aXZlcxgGIAEoBUIHukgEGgIoABIgCg9mYWxzZV9wb3NpdGl2ZXMYByABKAVCB7pIBBoCKAASHwoOdHJ1ZV9uZWdhdGl2ZXMYCCABKAVCB7pIBBoCKAASIAoPZmFsc2VfbmVnYXRpdmVzGAkgASgFQge6SAQaAigAIsABCh5KdWRnZVZhbGlkYXRpb25Db25mdXNpb25NYXRyaXgSJgoVanVkZ2VfcGFzc19odW1hbl9wYXNzGAEgASgFQge6SAQaAigAEiYKFWp1ZGdlX3Bhc3NfaHVtYW5fZmFpbBgCIAEoBUIHukgEGgIoABImChVqdWRnZV9mYWlsX2h1bWFuX3Bhc3MYAyABKAVCB7pIBBoCKAASJgoVanVkZ2VfZmFpbF9odW1hbl9mYWlsGAQgASgFQge6SAQaAigAItEBChpKdWRnZVZhbGlkYXRpb25CaWFzTWV0cmljcxIUCgxvdmVyX3Njb3JpbmcYASABKAgSFQoNdW5kZXJfc2NvcmluZxgCIAEoCBITCgtzY29yZV9kcmlmdBgDIAEoARIbChNhdmVyYWdlX2p1ZGdlX3Njb3JlGAQgASgBEhsKE2F2ZXJhZ2VfaHVtYW5fc2NvcmUYBSABKAESGQoRc2NvcmVfY29ycmVsYXRpb24YBiABKAESHAoLc2FtcGxlX3NpemUYByABKAVCB7pIBBoCKAAinAEKGkp1ZGdlVmFsaWRhdGlvbkNhbGlicmF0aW9uEhkKCGp1ZGdlX2lkGAEgASgJQge6SARyAhABEhsKE3ZhbGlkYXRpb25fYWNjdXJhY3kYAiABKAESEQoJdmFsaWRhdGVkGAMgASgIEjMKD2xhc3RfdmFsaWRhdGlvbhgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAimQQKGUp1ZGdlVmFsaWRhdGlvbkV2YWx1YXRpb24SHgoNZXZhbHVhdGlvbl9pZBgBIAEoCUIHukgEcgIQARIgCg9vcmdhbml6YXRpb25faWQYAiABKAlCB7pIBHICEAESFAoMd29ya3NwYWNlX2lkGAMgASgJEhkKCGp1ZGdlX2lkGAQgASgJQge6SARyAhABEhcKD3NjZW5hcmlvX3J1bl9pZBgFIAEoCRIUCgxhc3NlcnRpb25faWQYBiABKAkSLAoLanVkZ2Vfc2NvcmUYByABKAFCF7pIFBISGQAAAAAAAPA/KQAAAAAAAAAAEhQKDGp1ZGdlX3Bhc3NlZBgIIAEoCBIXCg9odW1hbl92YWxpZGF0ZWQYCSABKAgSMQoLaHVtYW5fc2NvcmUYCiABKAFCF7pIFBISGQAAAAAAAFlAKQAAAAAAAAAASACIAQESGAoQdmFsaWRhdGlvbl9ub3RlcxgLIAEoCRIOCgZzb3VyY2UYDCABKAkSMAoMZXZhbHVhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GA4gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIOCgxfaHVtYW5fc2NvcmUiSAoZSnVkZ2VDYWxpYnJhdGlvbkNhbmRpZGF0ZRIZCghqdWRnZV9pZBgBIAEoCUIHukgEcgIQARIQCghhY2N1cmFjeRgCIAEoASJgCiFHZXRKdWRnZVZhbGlkYXRpb25BY2N1cmFjeVJlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEhkKCGp1ZGdlX2lkGAIgASgJQge6SARyAhABImEKIkdldEp1ZGdlVmFsaWRhdGlvbkFjY3VyYWN5UmVzcG9uc2USOwoHbWV0cmljcxgBIAEoCzIqLmZlcm1hdGEudjEuSnVkZ2VWYWxpZGF0aW9uQWNjdXJhY3lNZXRyaWNzImcKKEdldEp1ZGdlVmFsaWRhdGlvbkNvbmZ1c2lvbk1hdHJpeFJlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEhkKCGp1ZGdlX2lkGAIgASgJQge6SARyAhABImcKKUdldEp1ZGdlVmFsaWRhdGlvbkNvbmZ1c2lvbk1hdHJpeFJlc3BvbnNlEjoKBm1hdHJpeBgBIAEoCzIqLmZlcm1hdGEudjEuSnVkZ2VWYWxpZGF0aW9uQ29uZnVzaW9uTWF0cml4IlwKHUdldEp1ZGdlVmFsaWRhdGlvbkJpYXNSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIZCghqdWRnZV9pZBgCIAEoCUIHukgEcgIQASJZCh5HZXRKdWRnZVZhbGlkYXRpb25CaWFzUmVzcG9uc2USNwoHbWV0cmljcxgBIAEoCzImLmZlcm1hdGEudjEuSnVkZ2VWYWxpZGF0aW9uQmlhc01ldHJpY3MiYAohUmVjYWxpYnJhdGVKdWRnZVZhbGlkYXRpb25SZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIZCghqdWRnZV9pZBgCIAEoCUIHukgEcgIQASJhCiJSZWNhbGlicmF0ZUp1ZGdlVmFsaWRhdGlvblJlc3BvbnNlEjsKC2NhbGlicmF0aW9uGAEgASgLMiYuZmVybWF0YS52MS5KdWRnZVZhbGlkYXRpb25DYWxpYnJhdGlvbiK9AwomUmVjb3JkSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvblJlcXVlc3QSFQoNZXZhbHVhdGlvbl9pZBgBIAEoCRIgCg9vcmdhbml6YXRpb25faWQYAiABKAlCB7pIBHICEAESFAoMd29ya3NwYWNlX2lkGAMgASgJEhkKCGp1ZGdlX2lkGAQgASgJQge6SARyAhABEhcKD3NjZW5hcmlvX3J1bl9pZBgFIAEoCRIUCgxhc3NlcnRpb25faWQYBiABKAkSLAoLanVkZ2Vfc2NvcmUYByABKAFCF7pIFBISGQAAAAAAAPA/KQAAAAAAAAAAEhQKDGp1ZGdlX3Bhc3NlZBgIIAEoCBIXCg9odW1hbl92YWxpZGF0ZWQYCSABKAgSMQoLaHVtYW5fc2NvcmUYCiABKAFCF7pIFBISGQAAAAAAAFlAKQAAAAAAAAAASACIAQESGAoQdmFsaWRhdGlvbl9ub3RlcxgLIAEoCRIOCgZzb3VyY2UYDCABKAkSMAoMZXZhbHVhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIOCgxfaHVtYW5fc2NvcmUiZAonUmVjb3JkSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvblJlc3BvbnNlEjkKCmV2YWx1YXRpb24YASABKAsyJS5mZXJtYXRhLnYxLkp1ZGdlVmFsaWRhdGlvbkV2YWx1YXRpb24iyQEKKFZhbGlkYXRlSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvblJlcXVlc3QSHgoNZXZhbHVhdGlvbl9pZBgBIAEoCUIHukgEcgIQARIgCg9vcmdhbml6YXRpb25faWQYAiABKAlCB7pIBHICEAESMQoLaHVtYW5fc2NvcmUYAyABKAFCF7pIFBISGQAAAAAAAFlAKQAAAAAAAAAASACIAQESGAoQdmFsaWRhdGlvbl9ub3RlcxgEIAEoCUIOCgxfaHVtYW5fc2NvcmUiZgopVmFsaWRhdGVKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVzcG9uc2USOQoKZXZhbHVhdGlvbhgBIAEoCzIlLmZlcm1hdGEudjEuSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvbiKgAQolTGlzdEp1ZGdlQ2FsaWJyYXRpb25DYW5kaWRhdGVzUmVxdWVzdBIgCg9vcmdhbml6YXRpb25faWQYASABKAlCB7pIBHICEAESIAoPbWluX3ZhbGlkYXRpb25zGAIgASgFQge6SAQaAigAEjMKEmFjY3VyYWN5X3RocmVzaG9sZBgDIAEoAUIXukgUEhIZAAAAAAAA8D8pAAAAAAAAAAAivwEKJkxpc3RKdWRnZUNhbGlicmF0aW9uQ2FuZGlkYXRlc1Jlc3BvbnNlEjkKCmNhbmRpZGF0ZXMYASADKAsyJS5mZXJtYXRhLnYxLkp1ZGdlQ2FsaWJyYXRpb25DYW5kaWRhdGUSHAoLdG90YWxfY291bnQYAiABKAVCB7pIBBoCKAASIAoPbWluX3ZhbGlkYXRpb25zGAMgASgFQge6SAQaAigAEhoKEmFjY3VyYWN5X3RocmVzaG9sZBgEIAEoASIbChlHZXRNaWdyYXRpb25TdGF0dXNSZXF1ZXN0IlwKFFJvdXRlTWlncmF0aW9uU3RhdHVzEhMKC3BhdGhfcHJlZml4GAEgASgJEhAKCG1pZ3JhdGVkGAIgASgIEh0KFXByb3hpZWRfcmVxdWVzdF9jb3VudBgDIAEoAyJOChpHZXRNaWdyYXRpb25TdGF0dXNSZXNwb25zZRIwCgZyb3V0ZXMYASADKAsyIC5mZXJtYXRhLnYxLlJvdXRlTWlncmF0aW9uU3RhdHVzKucBCg1Bc3NlcnRpb25LaW5kEh4KGkFTU0VSVElPTl9LSU5EX1VOU1BFQ0lGSUVEEAASGwoXQVNTRVJUSU9OX0tJTkRfQ09OVEFJTlMQARIfChtBU1NFUlRJT05fS0lORF9OT1RfQ09OVEFJTlMQAhIYChRBU1NFUlRJT05fS0lORF9SRUdFWBADEh0KGUFTU0VSVElPTl9LSU5EX1NJTUlMQVJJVFkQBBIfChtBU1NFUlRJT05fS0lORF9DVVNUT01fSlVER0UQBRIeChpBU1NFUlRJT05fS0lORF9KU09OX1NDSEVNQRAGKogBCglKdWRnZUtpbmQSGgoWSlVER0VfS0lORF9VTlNQRUNJRklFRBAAEhIKDkpVREdFX0tJTkRfTExNEAESGQoVSlVER0VfS0lORF9SVUxFX0JBU0VEEAISGQoVSlVER0VfS0lORF9TSU1JTEFSSVRZEAMSFQoRSlVER0VfS0lORF9DVVNUT00QBCqTAgoXU2NlbmFyaW9FbnZpcm9ubWVudEtpbmQSKQolU0NFTkFSSU9fRU5WSVJPTk1FTlRfS0lORF9VTlNQRUNJRklFRBAAEiQKIFNDRU5BUklPX0VOVklST05NRU5UX0tJTkRfUkVQTEFZEAESJgoiU0NFTkFSSU9fRU5WSVJPTk1FTlRfS0lORF9TVEFSTEFSSxACEicKI1NDRU5BUklPX0VOVklST05NRU5UX0tJTkRfTU9DS19IVFRQEAMSJQohU0NFTkFSSU9fRU5WSVJPTk1FTlRfS0lORF9TQU5EQk9YEAQSLworU0NFTkFSSU9fRU5WSVJPTk1FTlRfS0lORF9QUk9EVUNUSU9OX1NIQURPVxAFKqcCChVVc2VyU2ltdWxhdG9yU3RyYXRlZ3kSJwojVVNFUl9TSU1VTEFUT1JfU1RSQVRFR1lfVU5TUEVDSUZJRUQQABInCiNVU0VSX1NJTVVMQVRPUl9TVFJBVEVHWV9DT09QRVJBVElWRRABEiEKHVVTRVJfU0lNVUxBVE9SX1NUUkFURUdZX1JFQUNUEAISIgoeVVNFUl9TSU1VTEFUT1JfU1RSQVRFR1lfVkVSSUZZEAMSJgoiVVNFUl9TSU1VTEFUT1JfU1RSQVRFR1lfUkVGTEVDVElPThAEEicKI1VTRVJfU0lNVUxBVE9SX1NUUkFURUdZX0FEVkVSU0FSSUFMEAUSJAogVVNFUl9TSU1VTEFUT1JfU1RSQVRFR1lfQ09ORlVTRUQQBiq2AgoUT3V0Y29tZUNyaXRlcmlvbktpbmQSJgoiT1VUQ09NRV9DUklURVJJT05fS0lORF9VTlNQRUNJRklFRBAAEiYKIk9VVENPTUVfQ1JJVEVSSU9OX0tJTkRfRklOQUxfU1RBVEUQARIqCiZPVVRDT01FX0NSSVRFUklPTl9LSU5EX1RBU0tfQ09NUExFVElPThACEiUKIU9VVENPTUVfQ1JJVEVSSU9OX0tJTkRfVFJBSkVDVE9SWRADEiYKIk9VVENPTUVfQ1JJVEVSSU9OX0tJTkRfQ09TVF9CVURHRVQQBBIpCiVPVVRDT01FX0NSSVRFUklPTl9LSU5EX0xBVEVOQ1lfQlVER0VUEAUSKAokT1VUQ09NRV9DUklURVJJT05fS0lORF9RVUFMSVRZX1NDT1JFEAYqugMKF0dvdmVybmFuY2VBc3NlcnRpb25UeXBlEikKJUdPVkVSTkFOQ0VfQVNTRVJUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIxCi1HT1ZFUk5BTkNFX0FTU0VSVElPTl9UWVBFX0VTQ0FMQVRJT05fUkVRVUlSRUQQARIzCi9HT1ZFUk5BTkNFX0FTU0VSVElPTl9UWVBFX0FVVE9fUFJPQ0VFRF9FWFBFQ1RFRBACEjEKLUdPVkVSTkFOQ0VfQVNTRVJUSU9OX1RZUEVfUklTS19DTEFTU0lGSUNBVElPThADEjIKLkdPVkVSTkFOQ0VfQVNTRVJUSU9OX1RZUEVfREFUQV9BQ0NFU1NfQk9VTkRBUlkQBBI4CjRHT1ZFUk5BTkNFX0FTU0VSVElPTl9UWVBFX0dPVkVSTkFOQ0VfQkxPQ0tfUkVTUEVDVEVEEAUSMwovR09WRVJOQU5DRV9BU1NFUlRJT05fVFlQRV9TRUxGX0FQUFJPVkFMX0JMT0NLRUQQBhI2CjJHT1ZFUk5BTkNFX0FTU0VSVElPTl9UWVBFX1BJSV9ERVRFQ1RFRF9BTkRfSEFORExFRBAHKoADChdEZWxlZ2F0aW9uQXNzZXJ0aW9uVHlwZRIpCiVERUxFR0FUSU9OX0FTU0VSVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASNwozREVMRUdBVElPTl9BU1NFUlRJT05fVFlQRV9ERUxFR0FUSU9OX1RBUkdFVF9DT1JSRUNUEAESMgouREVMRUdBVElPTl9BU1NFUlRJT05fVFlQRV9DT05URVhUX1BSRVNFUlZBVElPThACEjIKLkRFTEVHQVRJT05fQVNTRVJUSU9OX1RZUEVfREVMRUdBVElPTl9WQUxVRV9BREQQAxI1CjFERUxFR0FUSU9OX0FTU0VSVElPTl9UWVBFX0RFTEVHQVRJT05fQ09TVF9CT1VOREVEEAQSMQotREVMRUdBVElPTl9BU1NFUlRJT05fVFlQRV9DSEFJTl9ERVBUSF9CT1VOREVEEAUSLworREVMRUdBVElPTl9BU1NFUlRJT05fVFlQRV9GQUlMVVJFX0lTT0xBVElPThAGKvwBChFTY2VuYXJpb1J1blN0YXR1cxIjCh9TQ0VOQVJJT19SVU5fU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobU0NFTkFSSU9fUlVOX1NUQVRVU19QRU5ESU5HEAESHwobU0NFTkFSSU9fUlVOX1NUQVRVU19SVU5OSU5HEAISHgoaU0NFTkFSSU9fUlVOX1NUQVRVU19QQVNTRUQQAxIeChpTQ0VOQVJJT19SVU5fU1RBVFVTX0ZBSUxFRBAEEh0KGVNDRU5BUklPX1JVTl9TVEFUVVNfRVJST1IQBRIhCh1TQ0VOQVJJT19SVU5fU1RBVFVTX0NBTkNFTExFRBAGKpUBChZEaWFnbm9zdGljQXJ0aWZhY3RLaW5kEigKJERJQUdOT1NUSUNfQVJUSUZBQ1RfS0lORF9VTlNQRUNJRklFRBAAEigKJERJQUdOT1NUSUNfQVJUSUZBQ1RfS0lORF9FWFBMQU5BVElPThABEicKI0RJQUdOT1NUSUNfQVJUSUZBQ1RfS0lORF9ST09UX0NBVVNFEAIqvgEKGURpYWdub3N0aWNGaW5kaW5nU2V2ZXJpdHkSKwonRElBR05PU1RJQ19GSU5ESU5HX1NFVkVSSVRZX1VOU1BFQ0lGSUVEEAASJAogRElBR05PU1RJQ19GSU5ESU5HX1NFVkVSSVRZX0lORk8QARInCiNESUFHTk9TVElDX0ZJTkRJTkdfU0VWRVJJVFlfV0FSTklORxACEiUKIURJQUdOT1NUSUNfRklORElOR19TRVZFUklUWV9FUlJPUhADMvUgCg5GZXJtYXRhU2VydmljZRKEAQoPQ3JlYXRlVGVzdFN1aXRlEiIuZmVybWF0YS52MS5DcmVhdGVUZXN0U3VpdGVSZXF1ZXN0GiMuZmVybWF0YS52MS5DcmVhdGVUZXN0U3VpdGVSZXNwb25zZSIoyvMYDWZlcm1hdGE6d3JpdGXY8xgC6vMYD29yZ2FuaXphdGlvbl9pZBJ6CgxHZXRUZXN0U3VpdGUSHy5mZXJtYXRhLnYxLkdldFRlc3RTdWl0ZVJlcXVlc3QaIC5mZXJtYXRhLnYxLkdldFRlc3RTdWl0ZVJlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSgAEKDkxpc3RUZXN0U3VpdGVzEiEuZmVybWF0YS52MS5MaXN0VGVzdFN1aXRlc1JlcXVlc3QaIi5mZXJtYXRhLnYxLkxpc3RUZXN0U3VpdGVzUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBKBAQoOQ3JlYXRlU2NlbmFyaW8SIS5mZXJtYXRhLnYxLkNyZWF0ZVNjZW5hcmlvUmVxdWVzdBoiLmZlcm1hdGEudjEuQ3JlYXRlU2NlbmFyaW9SZXNwb25zZSIoyvMYDWZlcm1hdGE6d3JpdGXY8xgC6vMYD29yZ2FuaXphdGlvbl9pZBJ3CgtHZXRTY2VuYXJpbxIeLmZlcm1hdGEudjEuR2V0U2NlbmFyaW9SZXF1ZXN0Gh8uZmVybWF0YS52MS5HZXRTY2VuYXJpb1Jlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSfQoNTGlzdFNjZW5hcmlvcxIgLmZlcm1hdGEudjEuTGlzdFNjZW5hcmlvc1JlcXVlc3QaIS5mZXJtYXRhLnYxLkxpc3RTY2VuYXJpb3NSZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGAHq8xgPb3JnYW5pemF0aW9uX2lkEpYBChVVcHNlcnRDdXN0b21FdmFsdWF0b3ISKC5mZXJtYXRhLnYxLlVwc2VydEN1c3RvbUV2YWx1YXRvclJlcXVlc3QaKS5mZXJtYXRhLnYxLlVwc2VydEN1c3RvbUV2YWx1YXRvclJlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGALq8xgPb3JnYW5pemF0aW9uX2lkEowBChJHZXRDdXN0b21FdmFsdWF0b3ISJS5mZXJtYXRhLnYxLkdldEN1c3RvbUV2YWx1YXRvclJlcXVlc3QaJi5mZXJtYXRhLnYxLkdldEN1c3RvbUV2YWx1YXRvclJlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSkgEKFExpc3RDdXN0b21FdmFsdWF0b3JzEicuZmVybWF0YS52MS5MaXN0Q3VzdG9tRXZhbHVhdG9yc1JlcXVlc3QaKC5mZXJtYXRhLnYxLkxpc3RDdXN0b21FdmFsdWF0b3JzUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBKWAQoVRGVsZXRlQ3VzdG9tRXZhbHVhdG9yEiguZmVybWF0YS52MS5EZWxldGVDdXN0b21FdmFsdWF0b3JSZXF1ZXN0GikuZmVybWF0YS52MS5EZWxldGVDdXN0b21FdmFsdWF0b3JSZXNwb25zZSIoyvMYDWZlcm1hdGE6d3JpdGXY8xgC6vMYD29yZ2FuaXphdGlvbl9pZBJ4CgtVcHNlcnRKdWRnZRIeLmZlcm1hdGEudjEuVXBzZXJ0SnVkZ2VSZXF1ZXN0Gh8uZmVybWF0YS52MS5VcHNlcnRKdWRnZVJlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGALq8xgPb3JnYW5pemF0aW9uX2lkEm4KCEdldEp1ZGdlEhsuZmVybWF0YS52MS5HZXRKdWRnZVJlcXVlc3QaHC5mZXJtYXRhLnYxLkdldEp1ZGdlUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBJ0CgpMaXN0SnVkZ2VzEh0uZmVybWF0YS52MS5MaXN0SnVkZ2VzUmVxdWVzdBoeLmZlcm1hdGEudjEuTGlzdEp1ZGdlc1Jlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSeAoLRGVsZXRlSnVkZ2USHi5mZXJtYXRhLnYxLkRlbGV0ZUp1ZGdlUmVxdWVzdBofLmZlcm1hdGEudjEuRGVsZXRlSnVkZ2VSZXNwb25zZSIoyvMYDWZlcm1hdGE6d3JpdGXY8xgC6vMYD29yZ2FuaXphdGlvbl9pZBJ+Cg1TdGFydFNjZW5hcmlvEiAuZmVybWF0YS52MS5TdGFydFNjZW5hcmlvUmVxdWVzdBohLmZlcm1hdGEudjEuU3RhcnRTY2VuYXJpb1Jlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGAPq8xgPb3JnYW5pemF0aW9uX2lkEqIBChZDcmVhdGVBbmRTdGFydFNjZW5hcmlvEikuZmVybWF0YS52MS5DcmVhdGVBbmRTdGFydFNjZW5hcmlvUmVxdWVzdBoqLmZlcm1hdGEudjEuQ3JlYXRlQW5kU3RhcnRTY2VuYXJpb1Jlc3BvbnNlIjHK8xgNZmVybWF0YTp3cml0ZdjzGAPq8xgYc2NlbmFyaW8ub3JnYW5pemF0aW9uX2lkEooBChFSZWNvcmRTY2VuYXJpb1J1bhIkLmZlcm1hdGEudjEuUmVjb3JkU2NlbmFyaW9SdW5SZXF1ZXN0GiUuZmVybWF0YS52MS5SZWNvcmRTY2VuYXJpb1J1blJlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGALq8xgPb3JnYW5pemF0aW9uX2lkEoABCg5HZXRTY2VuYXJpb1J1bhIhLmZlcm1hdGEudjEuR2V0U2NlbmFyaW9SdW5SZXF1ZXN0GiIuZmVybWF0YS52MS5HZXRTY2VuYXJpb1J1blJlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQShgEKEExpc3RTY2VuYXJpb1J1bnMSIy5mZXJtYXRhLnYxLkxpc3RTY2VuYXJpb1J1bnNSZXF1ZXN0GiQuZmVybWF0YS52MS5MaXN0U2NlbmFyaW9SdW5zUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBKMAQoSRXhwbGFpblNjZW5hcmlvUnVuEiUuZmVybWF0YS52MS5FeHBsYWluU2NlbmFyaW9SdW5SZXF1ZXN0GiYuZmVybWF0YS52MS5FeHBsYWluU2NlbmFyaW9SdW5SZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGALq8xgPb3JnYW5pemF0aW9uX2lkEqcBChtBbmFseXplU2NlbmFyaW9SdW5Sb290Q2F1c2USLi5mZXJtYXRhLnYxLkFuYWx5emVTY2VuYXJpb1J1blJvb3RDYXVzZVJlcXVlc3QaLy5mZXJtYXRhLnYxLkFuYWx5emVTY2VuYXJpb1J1blJvb3RDYXVzZVJlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAurzGA9vcmdhbml6YXRpb25faWQSpAEKGkdldEp1ZGdlVmFsaWRhdGlvbkFjY3VyYWN5Ei0uZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25BY2N1cmFjeVJlcXVlc3QaLi5mZXJtYXRhLnYxLkdldEp1ZGdlVmFsaWRhdGlvbkFjY3VyYWN5UmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBK5AQohR2V0SnVkZ2VWYWxpZGF0aW9uQ29uZnVzaW9uTWF0cml4EjQuZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25Db25mdXNpb25NYXRyaXhSZXF1ZXN0GjUuZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25Db25mdXNpb25NYXRyaXhSZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGAHq8xgPb3JnYW5pemF0aW9uX2lkEpgBChZHZXRKdWRnZVZhbGlkYXRpb25CaWFzEikuZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25CaWFzUmVxdWVzdBoqLmZlcm1hdGEudjEuR2V0SnVkZ2VWYWxpZGF0aW9uQmlhc1Jlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSpQEKGlJlY2FsaWJyYXRlSnVkZ2VWYWxpZGF0aW9uEi0uZmVybWF0YS52MS5SZWNhbGlicmF0ZUp1ZGdlVmFsaWRhdGlvblJlcXVlc3QaLi5mZXJtYXRhLnYxLlJlY2FsaWJyYXRlSnVkZ2VWYWxpZGF0aW9uUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQStAEKH1JlY29yZEp1ZGdlVmFsaWRhdGlvbkV2YWx1YXRpb24SMi5mZXJtYXRhLnYxLlJlY29yZEp1ZGdlVmFsaWRhdGlvbkV2YWx1YXRpb25SZXF1ZXN0GjMuZmVybWF0YS52MS5SZWNvcmRKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQSugEKIVZhbGlkYXRlSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvbhI0LmZlcm1hdGEudjEuVmFsaWRhdGVKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVxdWVzdBo1LmZlcm1hdGEudjEuVmFsaWRhdGVKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQSsAEKHkxpc3RKdWRnZUNhbGlicmF0aW9uQ2FuZGlkYXRlcxIxLmZlcm1hdGEudjEuTGlzdEp1ZGdlQ2FsaWJyYXRpb25DYW5kaWRhdGVzUmVxdWVzdBoyLmZlcm1hdGEudjEuTGlzdEp1ZGdlQ2FsaWJyYXRpb25DYW5kaWRhdGVzUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBJtChJHZXRNaWdyYXRpb25TdGF0dXMSJS5mZXJtYXRhLnYxLkdldE1pZ3JhdGlvblN0YXR1c1JlcXVlc3QaJi5mZXJtYXRhLnYxLkdldE1pZ3JhdGlvblN0YXR1c1Jlc3BvbnNlIgjY8xgB4PMYAUI5WjdnaXRodWIuY29tL2V2YWxvcHMvcGxhdGZvcm0vZ2VuL2dvL2Zlcm1hdGEvdjE7ZmVybWF0YXYxYgZwcm90bzM", [file_buf_validate_validate, file_common_v1_analytics, file_common_v1_authz, file_common_v1_risk, file_google_protobuf_duration, file_google_protobuf_struct, file_google_protobuf_timestamp, file_traces_v1_traces]);
14
+ export const file_fermata_v1_fermata = /*@__PURE__*/ fileDesc("ChhmZXJtYXRhL3YxL2Zlcm1hdGEucHJvdG8SCmZlcm1hdGEudjEiqwIKCVRlc3RTdWl0ZRIKCgJpZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSHQoMd29ya3NwYWNlX2lkGAMgASgJQge6SARyAhABEhUKBG5hbWUYBCABKAlCB7pIBHICEAESEwoLZGVzY3JpcHRpb24YBSABKAkSIwoFY2FzZXMYBiADKAsyFC5mZXJtYXRhLnYxLlRlc3RDYXNlEikKCG1ldGFkYXRhGAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKrAQoIVGVzdENhc2USCgoCaWQYASABKAkSFQoEbmFtZRgCIAEoCUIHukgEcgIQARINCgVpbnB1dBgDIAEoCRIXCg9leHBlY3RlZF9vdXRwdXQYBCABKAkSKQoKYXNzZXJ0aW9ucxgFIAMoCzIVLmZlcm1hdGEudjEuQXNzZXJ0aW9uEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKsAQoJQXNzZXJ0aW9uEgoKAmlkGAEgASgJEjEKBGtpbmQYAiABKA4yGS5mZXJtYXRhLnYxLkFzc2VydGlvbktpbmRCCLpIBYIBAhABEg4KBnRhcmdldBgDIAEoCRIQCghleHBlY3RlZBgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCRIpCghtZXRhZGF0YRgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi0AEKD0N1c3RvbUV2YWx1YXRvchIVCgRuYW1lGAEgASgJQge6SARyAhABEhcKBnNvdXJjZRgCIAEoCUIHukgEcgIQARIuCgpjcmVhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9vcmdhbml6YXRpb25faWQYBSABKAkSFAoMd29ya3NwYWNlX2lkGAYgASgJIqMDCgVKdWRnZRIVCgRuYW1lGAEgASgJQge6SARyAhABEi0KBGtpbmQYAiABKA4yFS5mZXJtYXRhLnYxLkp1ZGdlS2luZEIIukgFggECEAESDgoGcHJvbXB0GAMgASgJEg0KBW1vZGVsGAQgASgJEiwKC3RlbXBlcmF0dXJlGAUgASgBQhe6SBQSEhkAAAAAAAAAQCkAAAAAAAAAABIbCgptYXhfdG9rZW5zGAYgASgFQge6SAQaAigAEhAKCGNyaXRlcmlhGAcgAygJEh4KBndlaWdodBgIIAEoAUIOukgLEgkpAAAAAAAAAAASKQoIbWV0YWRhdGEYCSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KCmNyZWF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD29yZ2FuaXphdGlvbl9pZBgMIAEoCRIUCgx3b3Jrc3BhY2VfaWQYDSABKAkiugYKCFNjZW5hcmlvEgoKAmlkGAEgASgJEiAKD29yZ2FuaXphdGlvbl9pZBgCIAEoCUIHukgEcgIQARIdCgx3b3Jrc3BhY2VfaWQYAyABKAlCB7pIBHICEAESFQoEbmFtZRgEIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgFIAEoCRIoCglvYmplY3RpdmUYBiABKAsyFS5mZXJtYXRhLnYxLk9iamVjdGl2ZRItCgxhZ2VudF9jb25maWcYByABKAsyFy5mZXJtYXRhLnYxLkFnZW50Q29uZmlnEjQKC2Vudmlyb25tZW50GAggASgLMh8uZmVybWF0YS52MS5TY2VuYXJpb0Vudmlyb25tZW50EjEKDnVzZXJfc2ltdWxhdG9yGAkgASgLMhkuZmVybWF0YS52MS5Vc2VyU2ltdWxhdG9yEiIKCG1heF9jb3N0GAogASgLMhAuY29tbW9uLnYxLk1vbmV5Ei8KDG1heF9kdXJhdGlvbhgLIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIaCgltYXhfc3RlcHMYDCABKAVCB7pIBBoCKAASJgoVbWF4X2FwcHJvdmFsX3JlcXVlc3RzGA0gASgFQge6SAQaAigAEjYKEG91dGNvbWVfY3JpdGVyaWEYDiADKAsyHC5mZXJtYXRhLnYxLk91dGNvbWVDcml0ZXJpb24SPgoVZ292ZXJuYW5jZV9hc3NlcnRpb25zGA8gAygLMh8uZmVybWF0YS52MS5Hb3Zlcm5hbmNlQXNzZXJ0aW9uEj4KFWRlbGVnYXRpb25fYXNzZXJ0aW9ucxgQIAMoCzIfLmZlcm1hdGEudjEuRGVsZWdhdGlvbkFzc2VydGlvbhIXCgZlcG9jaHMYESABKAVCB7pIBBoCKAASKQoIbWV0YWRhdGEYEiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KCmNyZWF0ZWRfYXQYEyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYFCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIu8BCglPYmplY3RpdmUSHAoLZGVzY3JpcHRpb24YASABKAlCB7pIBHICEAESNgoQc3VjY2Vzc19jcml0ZXJpYRgCIAMoCzIcLmZlcm1hdGEudjEuU3VjY2Vzc0NyaXRlcmlvbhJACg5leHBlY3RlZF9zdGF0ZRgDIAMoCzIoLmZlcm1hdGEudjEuT2JqZWN0aXZlLkV4cGVjdGVkU3RhdGVFbnRyeRIUCgxvYmplY3RpdmVfaWQYBCABKAkaNAoSRXhwZWN0ZWRTdGF0ZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEirwEKEFN1Y2Nlc3NDcml0ZXJpb24SCgoCaWQYASABKAkSHAoLZGVzY3JpcHRpb24YAiABKAlCB7pIBHICEAESDgoGbWV0cmljGAMgASgJEhYKDmV4cGVjdGVkX3ZhbHVlGAQgASgJEh4KBndlaWdodBgFIAEoAUIOukgLEgkpAAAAAAAAAAASKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IqUBCgtBZ2VudENvbmZpZxIQCghhZ2VudF9pZBgBIAEoCRINCgVtb2RlbBgCIAEoCRIRCgl0b29sX3JlZnMYAyADKAkSGQoRcGVybWlzc2lvbl9zY29wZXMYBCADKAkSHAoUZ292ZXJuYW5jZV9wb2xpY3lfaWQYBSABKAkSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IvcBChNTY2VuYXJpb0Vudmlyb25tZW50EjsKBGtpbmQYASABKA4yIy5mZXJtYXRhLnYxLlNjZW5hcmlvRW52aXJvbm1lbnRLaW5kQgi6SAWCAQIQARIjCgV0b29scxgCIAMoCzIULmZlcm1hdGEudjEuTW9ja1Rvb2wSKwoJZW5kcG9pbnRzGAMgAygLMhguZmVybWF0YS52MS5Nb2NrRW5kcG9pbnQSFQoNc2VlZF9kYXRhX3JlZhgEIAEoCRIPCgdzYW5kYm94GAUgASgJEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCK7AQoITW9ja1Rvb2wSFQoEbmFtZRgBIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgCIAEoCRItCgxpbnB1dF9zY2hlbWEYAyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EikKCHJlc3BvbnNlGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIpCghtZXRhZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiqQEKDE1vY2tFbmRwb2ludBIOCgZtZXRob2QYASABKAkSFQoEcGF0aBgCIAEoCUIHukgEcgIQARIcCgtzdGF0dXNfY29kZRgDIAEoBUIHukgEGgIoABIpCghyZXNwb25zZRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKQoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IocCCg1Vc2VyU2ltdWxhdG9yEg8KB3BlcnNvbmEYASABKAkSFAoMaW5zdHJ1Y3Rpb25zGAIgASgJEj0KCHN0cmF0ZWd5GAMgASgOMiEuZmVybWF0YS52MS5Vc2VyU2ltdWxhdG9yU3RyYXRlZ3lCCLpIBYIBAhABEg0KBW1vZGVsGAQgASgJEhoKCW1heF90dXJucxgFIAEoBUIHukgEGgIoABIbChN2ZXJpZnlfYWdlbnRfY2xhaW1zGAYgASgIEh0KFXJlcXVlc3RfY2xhcmlmaWNhdGlvbhgHIAEoCBIpCghtZXRhZGF0YRgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QixQEKEE91dGNvbWVDcml0ZXJpb24SCgoCaWQYASABKAkSOAoEa2luZBgCIAEoDjIgLmZlcm1hdGEudjEuT3V0Y29tZUNyaXRlcmlvbktpbmRCCLpIBYIBAhABEg4KBnRhcmdldBgDIAEoCRIQCghleHBlY3RlZBgEIAEoCRIeCgZ3ZWlnaHQYBSABKAFCDrpICxIJKQAAAAAAAAAAEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCLcAgoTR292ZXJuYW5jZUFzc2VydGlvbhIKCgJpZBgBIAEoCRI7CgR0eXBlGAIgASgOMiMuZmVybWF0YS52MS5Hb3Zlcm5hbmNlQXNzZXJ0aW9uVHlwZUIIukgFggECEAESOwoTZXhwZWN0ZWRfcmlza19sZXZlbBgDIAEoDjIULmNvbW1vbi52MS5SaXNrTGV2ZWxCCLpIBYIBAhABEhcKD3Nob3VsZF9lc2NhbGF0ZRgEIAEoCBIhChlleHBlY3RlZF9hcHByb3ZhbF9vdXRjb21lGAUgASgJEhsKE2FsbG93ZWRfZGF0YV9zY29wZXMYBiADKAkSGgoSZGVuaWVkX2RhdGFfc2NvcGVzGAcgAygJEh8KF2V4cGVjdGVkX3BpaV9jYXRlZ29yaWVzGAggAygJEikKCG1ldGFkYXRhGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCLqAQoTRGVsZWdhdGlvbkFzc2VydGlvbhIKCgJpZBgBIAEoCRI7CgR0eXBlGAIgASgOMiMuZmVybWF0YS52MS5EZWxlZ2F0aW9uQXNzZXJ0aW9uVHlwZUIIukgFggECEAESGQoRZXhwZWN0ZWRfYWdlbnRfaWQYAyABKAkSIAoPbWF4X2NoYWluX2RlcHRoGAQgASgFQge6SAQaAigAEiIKCG1heF9jb3N0GAUgASgLMhAuY29tbW9uLnYxLk1vbmV5EikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKIBAoLU2NlbmFyaW9SdW4SCgoCaWQYASABKAkSHAoLc2NlbmFyaW9faWQYAiABKAlCB7pIBHICEAESIAoPb3JnYW5pemF0aW9uX2lkGAMgASgJQge6SARyAhABEh0KDHdvcmtzcGFjZV9pZBgEIAEoCUIHukgEcgIQARIWCgVlcG9jaBgFIAEoBUIHukgEGgIoABI3CgZzdGF0dXMYBiABKA4yHS5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuU3RhdHVzQgi6SAWCAQIQARIqCgZyZXN1bHQYByABKAsyGi5mZXJtYXRhLnYxLlNjZW5hcmlvUmVzdWx0EhAKCHRyYWNlX2lkGAggASgJEikKCG1ldGFkYXRhGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpzdGFydGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxjb21wbGV0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmxpbmVhZ2VfaWQYDiABKAkisQYKDlNjZW5hcmlvUmVzdWx0EhoKEm9iamVjdGl2ZV9hY2hpZXZlZBgBIAEoCBIZChFvYmplY3RpdmVfc3VtbWFyeRgCIAEoCRIcCgt0b3RhbF9zdGVwcxgDIAEoBUIHukgEGgIoABIcCgttb2RlbF9jYWxscxgEIAEoBUIHukgEGgIoABIbCgp0b29sX2NhbGxzGAUgASgFQge6SAQaAigAEiIKEWFwcHJvdmFsX3JlcXVlc3RzGAYgASgFQge6SAQaAigAEiIKEWRlbGVnYXRpb25fZXZlbnRzGAcgASgFQge6SAQaAigAEiAKD3JlY292ZXJ5X2V2ZW50cxgIIAEoBUIHukgEGgIoABI+ChFhc3NlcnRpb25fcmVzdWx0cxgJIAMoCzIjLmZlcm1hdGEudjEuU2NlbmFyaW9Bc3NlcnRpb25SZXN1bHQSLwoKZ292ZXJuYW5jZRgKIAEoCzIbLmZlcm1hdGEudjEuR292ZXJuYW5jZVNjb3JlEiwKCWVjb25vbWljcxgLIAEoCzIZLmZlcm1hdGEudjEuRWNvbm9taWNTY29yZRIhCglwYXNzX2F0X2sYDCABKAFCDrpICxIJKQAAAAAAAAAAEi8KCmRlbGVnYXRpb24YDSABKAsyGy5mZXJtYXRhLnYxLkRlbGVnYXRpb25TY29yZRIkCgp0b3RhbF9jb3N0GA4gASgLMhAuY29tbW9uLnYxLk1vbmV5EjEKDnRvdGFsX2R1cmF0aW9uGA8gASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEikKCG1ldGFkYXRhGBAgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIjCgp0cmFqZWN0b3J5GBEgAygLMg8udHJhY2VzLnYxLlNwYW4SJQoNdHJhamVjdG9yeV9mMRgSIAEoAUIOukgLEgkpAAAAAAAAAAASNgoedHJhamVjdG9yeV9lZGl0X2Rpc3RhbmNlX3Njb3JlGBMgASgBQg66SAsSCSkAAAAAAAAAABIqCgVkcmlmdBgUIAEoCzIbLmZlcm1hdGEudjEuRHJpZnRDb21wYXJpc29uIpoBChdTY2VuYXJpb0Fzc2VydGlvblJlc3VsdBIUCgxhc3NlcnRpb25faWQYASABKAkSDgoGcGFzc2VkGAIgASgIEg0KBXNjb3JlGAMgASgBEg4KBmFjdHVhbBgEIAEoCRIPCgdtZXNzYWdlGAUgASgJEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCKPAgoPR292ZXJuYW5jZVNjb3JlEiwKFGVzY2FsYXRpb25fcHJlY2lzaW9uGAEgASgBQg66SAsSCSkAAAAAAAAAABIpChFlc2NhbGF0aW9uX3JlY2FsbBgCIAEoAUIOukgLEgkpAAAAAAAAAAASKQoRcG9saWN5X2NvbXBsaWFuY2UYAyABKAFCDrpICxIJKQAAAAAAAAAAEisKE2FwcHJvdmFsX2VmZmljaWVuY3kYBCABKAFCDrpICxIJKQAAAAAAAAAAEiEKCWNvbXBvc2l0ZRgFIAEoAUIOukgLEgkpAAAAAAAAAAASKAoIZXZpZGVuY2UYBiADKAsyFi5jb21tb24udjEuRXZpZGVuY2VSZWYigAIKDUVjb25vbWljU2NvcmUSMgoYY29zdF9wZXJfc3VjY2Vzc2Z1bF90YXNrGAEgASgLMhAuY29tbW9uLnYxLk1vbmV5EiIKCGxsbV9jb3N0GAIgASgLMhAuY29tbW9uLnYxLk1vbmV5EiMKCXRvb2xfY29zdBgDIAEoCzIQLmNvbW1vbi52MS5Nb25leRIqChBzdXBlcnZpc2lvbl9jb3N0GAQgASgLMhAuY29tbW9uLnYxLk1vbmV5EhoKEm9uX3BhcmV0b19mcm9udGllchgFIAEoCBIqChJxdWFsaXR5X3Blcl9kb2xsYXIYBiABKAFCDrpICxIJKQAAAAAAAAAAIsoBCg9EZWxlZ2F0aW9uU2NvcmUSKwoTZGVsZWdhdGlvbl9hY2N1cmFjeRgBIAEoAUIOukgLEgkpAAAAAAAAAAASKAoQY29udGV4dF9maWRlbGl0eRgCIAEoAUIOukgLEgkpAAAAAAAAAAASFwoPZWZmaWNpZW5jeV9nYWluGAMgASgBEikKEWZhaWx1cmVfaXNvbGF0aW9uGAQgASgBQg66SAsSCSkAAAAAAAAAABIcCgtjaGFpbl9kZXB0aBgFIAEoBUIHukgEGgIoACLeAwoPRHJpZnRDb21wYXJpc29uEhAKCGRldGVjdGVkGAEgASgIEi4KFmJhc2VsaW5lX3F1YWxpdHlfc2NvcmUYAiABKAFCDrpICxIJKQAAAAAAAAAAEi0KFWN1cnJlbnRfcXVhbGl0eV9zY29yZRgDIAEoAUIOukgLEgkpAAAAAAAAAAASFQoNcXVhbGl0eV9kZWx0YRgEIAEoARInCg1iYXNlbGluZV9jb3N0GAUgASgLMhAuY29tbW9uLnYxLk1vbmV5EiYKDGN1cnJlbnRfY29zdBgGIAEoCzIQLmNvbW1vbi52MS5Nb25leRIkCgpjb3N0X2RlbHRhGAcgASgLMhAuY29tbW9uLnYxLk1vbmV5EjAKGGJhc2VsaW5lX2VzY2FsYXRpb25fcmF0ZRgIIAEoAUIOukgLEgkpAAAAAAAAAAASLwoXY3VycmVudF9lc2NhbGF0aW9uX3JhdGUYCSABKAFCDrpICxIJKQAAAAAAAAAAEh0KFWVzY2FsYXRpb25fcmF0ZV9kZWx0YRgKIAEoARIgChhnZW5lcmF0ZWRfc3VpdGVfc3RyYXRlZ3kYCyABKAkSKAoIZXZpZGVuY2UYDCADKAsyFi5jb21tb24udjEuRXZpZGVuY2VSZWYi1QEKFkNyZWF0ZVRlc3RTdWl0ZVJlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEh0KDHdvcmtzcGFjZV9pZBgCIAEoCUIHukgEcgIQARIVCgRuYW1lGAMgASgJQge6SARyAhABEhMKC2Rlc2NyaXB0aW9uGAQgASgJEiMKBWNhc2VzGAUgAygLMhQuZmVybWF0YS52MS5UZXN0Q2FzZRIpCghtZXRhZGF0YRgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiPwoXQ3JlYXRlVGVzdFN1aXRlUmVzcG9uc2USJAoFc3VpdGUYASABKAsyFS5mZXJtYXRhLnYxLlRlc3RTdWl0ZSJfChNHZXRUZXN0U3VpdGVSZXF1ZXN0EhkKCHN1aXRlX2lkGAEgASgJQge6SARyAhABEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAyABKAkiPAoUR2V0VGVzdFN1aXRlUmVzcG9uc2USJAoFc3VpdGUYASABKAsyFS5mZXJtYXRhLnYxLlRlc3RTdWl0ZSKAAQoVTGlzdFRlc3RTdWl0ZXNSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSFgoFbGltaXQYAyABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAQgASgFQge6SAQaAigAIlEKFkxpc3RUZXN0U3VpdGVzUmVzcG9uc2USJQoGc3VpdGVzGAEgAygLMhUuZmVybWF0YS52MS5UZXN0U3VpdGUSEAoIaGFzX21vcmUYAiABKAgi4wUKFUNyZWF0ZVNjZW5hcmlvUmVxdWVzdBIgCg9vcmdhbml6YXRpb25faWQYASABKAlCB7pIBHICEAESHQoMd29ya3NwYWNlX2lkGAIgASgJQge6SARyAhABEhUKBG5hbWUYAyABKAlCB7pIBHICEAESEwoLZGVzY3JpcHRpb24YBCABKAkSMAoJb2JqZWN0aXZlGAUgASgLMhUuZmVybWF0YS52MS5PYmplY3RpdmVCBrpIA8gBARItCgxhZ2VudF9jb25maWcYBiABKAsyFy5mZXJtYXRhLnYxLkFnZW50Q29uZmlnEjQKC2Vudmlyb25tZW50GAcgASgLMh8uZmVybWF0YS52MS5TY2VuYXJpb0Vudmlyb25tZW50EjEKDnVzZXJfc2ltdWxhdG9yGAggASgLMhkuZmVybWF0YS52MS5Vc2VyU2ltdWxhdG9yEiIKCG1heF9jb3N0GAkgASgLMhAuY29tbW9uLnYxLk1vbmV5Ei8KDG1heF9kdXJhdGlvbhgKIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIaCgltYXhfc3RlcHMYCyABKAVCB7pIBBoCKAASJgoVbWF4X2FwcHJvdmFsX3JlcXVlc3RzGAwgASgFQge6SAQaAigAEjYKEG91dGNvbWVfY3JpdGVyaWEYDSADKAsyHC5mZXJtYXRhLnYxLk91dGNvbWVDcml0ZXJpb24SPgoVZ292ZXJuYW5jZV9hc3NlcnRpb25zGA4gAygLMh8uZmVybWF0YS52MS5Hb3Zlcm5hbmNlQXNzZXJ0aW9uEj4KFWRlbGVnYXRpb25fYXNzZXJ0aW9ucxgPIAMoCzIfLmZlcm1hdGEudjEuRGVsZWdhdGlvbkFzc2VydGlvbhIXCgZlcG9jaHMYECABKAVCB7pIBBoCKAASKQoIbWV0YWRhdGEYESABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IkAKFkNyZWF0ZVNjZW5hcmlvUmVzcG9uc2USJgoIc2NlbmFyaW8YASABKAsyFC5mZXJtYXRhLnYxLlNjZW5hcmlvImEKEkdldFNjZW5hcmlvUmVxdWVzdBIcCgtzY2VuYXJpb19pZBgBIAEoCUIHukgEcgIQARIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSFAoMd29ya3NwYWNlX2lkGAMgASgJIj0KE0dldFNjZW5hcmlvUmVzcG9uc2USJgoIc2NlbmFyaW8YASABKAsyFC5mZXJtYXRhLnYxLlNjZW5hcmlvIn8KFExpc3RTY2VuYXJpb3NSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSFgoFbGltaXQYAyABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAQgASgFQge6SAQaAigAIlIKFUxpc3RTY2VuYXJpb3NSZXNwb25zZRInCglzY2VuYXJpb3MYASADKAsyFC5mZXJtYXRhLnYxLlNjZW5hcmlvEhAKCGhhc19tb3JlGAIgASgIIn0KHFVwc2VydEN1c3RvbUV2YWx1YXRvclJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARIXCgZzb3VyY2UYAiABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEhQKDHdvcmtzcGFjZV9pZBgEIAEoCSJPCh1VcHNlcnRDdXN0b21FdmFsdWF0b3JSZXNwb25zZRIuCglldmFsdWF0b3IYASABKAsyGy5mZXJtYXRhLnYxLkN1c3RvbUV2YWx1YXRvciJhChlHZXRDdXN0b21FdmFsdWF0b3JSZXF1ZXN0EhUKBG5hbWUYASABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEhQKDHdvcmtzcGFjZV9pZBgDIAEoCSJMChpHZXRDdXN0b21FdmFsdWF0b3JSZXNwb25zZRIuCglldmFsdWF0b3IYASABKAsyGy5mZXJtYXRhLnYxLkN1c3RvbUV2YWx1YXRvciJ9ChtMaXN0Q3VzdG9tRXZhbHVhdG9yc1JlcXVlc3QSFgoFbGltaXQYASABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAIgASgFQge6SAQaAigAEhcKD29yZ2FuaXphdGlvbl9pZBgDIAEoCRIUCgx3b3Jrc3BhY2VfaWQYBCABKAkiYQocTGlzdEN1c3RvbUV2YWx1YXRvcnNSZXNwb25zZRIvCgpldmFsdWF0b3JzGAEgAygLMhsuZmVybWF0YS52MS5DdXN0b21FdmFsdWF0b3ISEAoIaGFzX21vcmUYAiABKAgiZAocRGVsZXRlQ3VzdG9tRXZhbHVhdG9yUmVxdWVzdBIVCgRuYW1lGAEgASgJQge6SARyAhABEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAyABKAkiHwodRGVsZXRlQ3VzdG9tRXZhbHVhdG9yUmVzcG9uc2Ui0AIKElVwc2VydEp1ZGdlUmVxdWVzdBIVCgRuYW1lGAEgASgJQge6SARyAhABEi0KBGtpbmQYAiABKA4yFS5mZXJtYXRhLnYxLkp1ZGdlS2luZEIIukgFggECEAESDgoGcHJvbXB0GAMgASgJEg0KBW1vZGVsGAQgASgJEiwKC3RlbXBlcmF0dXJlGAUgASgBQhe6SBQSEhkAAAAAAAAAQCkAAAAAAAAAABIbCgptYXhfdG9rZW5zGAYgASgFQge6SAQaAigAEhAKCGNyaXRlcmlhGAcgAygJEh4KBndlaWdodBgIIAEoAUIOukgLEgkpAAAAAAAAAAASKQoIbWV0YWRhdGEYCSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhcKD29yZ2FuaXphdGlvbl9pZBgKIAEoCRIUCgx3b3Jrc3BhY2VfaWQYCyABKAkiNwoTVXBzZXJ0SnVkZ2VSZXNwb25zZRIgCgVqdWRnZRgBIAEoCzIRLmZlcm1hdGEudjEuSnVkZ2UiVwoPR2V0SnVkZ2VSZXF1ZXN0EhUKBG5hbWUYASABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEhQKDHdvcmtzcGFjZV9pZBgDIAEoCSI0ChBHZXRKdWRnZVJlc3BvbnNlEiAKBWp1ZGdlGAEgASgLMhEuZmVybWF0YS52MS5KdWRnZSJzChFMaXN0SnVkZ2VzUmVxdWVzdBIWCgVsaW1pdBgBIAEoBUIHukgEGgIoABIXCgZvZmZzZXQYAiABKAVCB7pIBBoCKAASFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEhQKDHdvcmtzcGFjZV9pZBgEIAEoCSJJChJMaXN0SnVkZ2VzUmVzcG9uc2USIQoGanVkZ2VzGAEgAygLMhEuZmVybWF0YS52MS5KdWRnZRIQCghoYXNfbW9yZRgCIAEoCCJaChJEZWxldGVKdWRnZVJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSFAoMd29ya3NwYWNlX2lkGAMgASgJIhUKE0RlbGV0ZUp1ZGdlUmVzcG9uc2UivgIKFFN0YXJ0U2NlbmFyaW9SZXF1ZXN0EhwKC3NjZW5hcmlvX2lkGAEgASgJQge6SARyAhABEhUKDXJ1bl9pZF9wcmVmaXgYAiABKAkSEAoIdHJhY2VfaWQYAyABKAkSKAoHYWN0dWFscxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLgoNZXBvY2hfYWN0dWFscxgFIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKQoIbWV0YWRhdGEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhcKBmVwb2NocxgHIAEoBUIHukgEGgIoABISCgpsaW5lYWdlX2lkGAggASgJEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRIUCgx3b3Jrc3BhY2VfaWQYCiABKAkiYQoVU3RhcnRTY2VuYXJpb1Jlc3BvbnNlEiUKBHJ1bnMYASADKAsyFy5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuEiEKEHB1Ymxpc2hlZF9ldmVudHMYAiABKAVCB7pIBBoCKAAivQIKHUNyZWF0ZUFuZFN0YXJ0U2NlbmFyaW9SZXF1ZXN0EjsKCHNjZW5hcmlvGAEgASgLMiEuZmVybWF0YS52MS5DcmVhdGVTY2VuYXJpb1JlcXVlc3RCBrpIA8gBARIVCg1ydW5faWRfcHJlZml4GAIgASgJEhAKCHRyYWNlX2lkGAMgASgJEigKB2FjdHVhbHMYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KDWVwb2NoX2FjdHVhbHMYBSADKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei8KDnN0YXJ0X21ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIXCgZlcG9jaHMYByABKAVCB7pIBBoCKAASEgoKbGluZWFnZV9pZBgIIAEoCSKSAQoeQ3JlYXRlQW5kU3RhcnRTY2VuYXJpb1Jlc3BvbnNlEiYKCHNjZW5hcmlvGAEgASgLMhQuZmVybWF0YS52MS5TY2VuYXJpbxIlCgRydW5zGAIgAygLMhcuZmVybWF0YS52MS5TY2VuYXJpb1J1bhIhChBwdWJsaXNoZWRfZXZlbnRzGAMgASgFQge6SAQaAigAIrUDChhSZWNvcmRTY2VuYXJpb1J1blJlcXVlc3QSCgoCaWQYASABKAkSHAoLc2NlbmFyaW9faWQYAiABKAlCB7pIBHICEAESIAoPb3JnYW5pemF0aW9uX2lkGAMgASgJQge6SARyAhABEh0KDHdvcmtzcGFjZV9pZBgEIAEoCUIHukgEcgIQARIWCgVlcG9jaBgFIAEoBUIHukgEGgIoABI3CgZzdGF0dXMYBiABKA4yHS5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuU3RhdHVzQgi6SAWCAQIQARIqCgZyZXN1bHQYByABKAsyGi5mZXJtYXRhLnYxLlNjZW5hcmlvUmVzdWx0EhAKCHRyYWNlX2lkGAggASgJEikKCG1ldGFkYXRhGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpzdGFydGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxjb21wbGV0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmxpbmVhZ2VfaWQYDCABKAkiQQoZUmVjb3JkU2NlbmFyaW9SdW5SZXNwb25zZRIkCgNydW4YASABKAsyFy5mZXJtYXRhLnYxLlNjZW5hcmlvUnVuIl8KFUdldFNjZW5hcmlvUnVuUmVxdWVzdBIXCgZydW5faWQYASABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEhQKDHdvcmtzcGFjZV9pZBgDIAEoCSI+ChZHZXRTY2VuYXJpb1J1blJlc3BvbnNlEiQKA3J1bhgBIAEoCzIXLmZlcm1hdGEudjEuU2NlbmFyaW9SdW4ilwEKF0xpc3RTY2VuYXJpb1J1bnNSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSEwoLc2NlbmFyaW9faWQYAyABKAkSFgoFbGltaXQYBCABKAVCB7pIBBoCKAASFwoGb2Zmc2V0GAUgASgFQge6SAQaAigAIlMKGExpc3RTY2VuYXJpb1J1bnNSZXNwb25zZRIlCgRydW5zGAEgAygLMhcuZmVybWF0YS52MS5TY2VuYXJpb1J1bhIQCghoYXNfbW9yZRgCIAEoCCKZAQoqR2V0RXZhbHVhdGlvbk9ic2VydmFiaWxpdHlEYXNoYm9hcmRSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSGAoEZGF5cxgDIAEoBUIKukgHGgUY7QIoABIZCgVsaW1pdBgEIAEoBUIKukgHGgUY9AMoACKVAwoeRXZhbHVhdGlvbk9ic2VydmFiaWxpdHlTdW1tYXJ5EhsKCnRvdGFsX3J1bnMYASABKAVCB7pIBBoCKAASHgoNdG90YWxfcmVzdWx0cxgCIAEoBUIHukgEGgIoABIfCg5mYWlsZWRfcmVzdWx0cxgDIAEoBUIHukgEGgIoABIlCg1hdmVyYWdlX3Njb3JlGAQgASgBQg66SAsSCSkAAAAAAAAAABIhCglwYXNzX3JhdGUYBSABKAFCDrpICxIJKQAAAAAAAAAAEiQKCnRvdGFsX2Nvc3QYBiABKAsyEC5jb21tb24udjEuTW9uZXkSKgoSYXZlcmFnZV9sYXRlbmN5X21zGAcgASgBQg66SAsSCSkAAAAAAAAAABIdCgx0b3RhbF90b2tlbnMYCCABKANCB7pIBCICKAASJwoWcmVncmVzc2lvbl9hbGVydF9jb3VudBgJIAEoBUIHukgEGgIoABIxChd0b3RhbF9jb3N0c19ieV9jdXJyZW5jeRgKIAMoCzIQLmNvbW1vbi52MS5Nb25leSKIBAoaRXZhbHVhdGlvblJlY2VudFJ1blN1bW1hcnkSIAoPc2NlbmFyaW9fcnVuX2lkGAEgASgJQge6SARyAhABEhMKC3NjZW5hcmlvX2lkGAIgASgJEh4KDXRvdGFsX3Jlc3VsdHMYAyABKAVCB7pIBBoCKAASIgoRY29tcGxldGVkX3Jlc3VsdHMYBCABKAVCB7pIBBoCKAASHwoOZmFpbGVkX3Jlc3VsdHMYBSABKAVCB7pIBBoCKAASJQoNYXZlcmFnZV9zY29yZRgGIAEoAUIOukgLEgkpAAAAAAAAAAASJAoKdG90YWxfY29zdBgHIAEoCzIQLmNvbW1vbi52MS5Nb25leRImCgxhdmVyYWdlX2Nvc3QYCCABKAsyEC5jb21tb24udjEuTW9uZXkSKgoSYXZlcmFnZV9sYXRlbmN5X21zGAkgASgBQg66SAsSCSkAAAAAAAAAABIdCgx0b3RhbF90b2tlbnMYCiABKANCB7pIBCICKAASLgoKc3RhcnRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMY29tcGxldGVkX2F0GAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIQCgh0cmFjZV9pZBgNIAEoCRIaChJvYmplY3RpdmVfYWNoaWV2ZWQYDiABKAgi0QMKGUV2YWx1YXRpb25SZWdyZXNzaW9uQWxlcnQSEwoCaWQYASABKAlCB7pIBHICEAESEwoLc2NlbmFyaW9faWQYAiABKAkSIAoPc2NlbmFyaW9fcnVuX2lkGAMgASgJQge6SARyAhABEhAKCHNldmVyaXR5GAQgASgJEg8KB21lc3NhZ2UYBSABKAkSLQoVcmVncmVzc2lvbl9wZXJjZW50YWdlGAYgASgBQg66SAsSCSkAAAAAAAAAABIgChhiYXNlbGluZV9zY2VuYXJpb19ydW5faWQYByABKAkSKgoSYXZlcmFnZV9sYXRlbmN5X21zGAggASgBQg66SAsSCSkAAAAAAAAAABIkCgp0b3RhbF9jb3N0GAkgASgLMhAuY29tbW9uLnYxLk1vbmV5EhMKC2Vudmlyb25tZW50GAogASgJEiEKGXN0YXRpc3RpY2FsbHlfc2lnbmlmaWNhbnQYCyABKAgSHwoHcF92YWx1ZRgMIAEoAUIOukgLEgkpAAAAAAAAAAASGAoQZGVncmFkZWRfbWV0cmljcxgNIAMoCRIvCgtyZWNvcmRlZF9hdBgOIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi6QEKK0dldEV2YWx1YXRpb25PYnNlcnZhYmlsaXR5RGFzaGJvYXJkUmVzcG9uc2USOwoHc3VtbWFyeRgBIAEoCzIqLmZlcm1hdGEudjEuRXZhbHVhdGlvbk9ic2VydmFiaWxpdHlTdW1tYXJ5EjsKC3JlY2VudF9ydW5zGAIgAygLMiYuZmVybWF0YS52MS5FdmFsdWF0aW9uUmVjZW50UnVuU3VtbWFyeRJAChFyZWdyZXNzaW9uX2FsZXJ0cxgDIAMoCzIlLmZlcm1hdGEudjEuRXZhbHVhdGlvblJlZ3Jlc3Npb25BbGVydCJxCh5HZXRFdmFsdWF0aW9uUnVuTWV0cmljc1JlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEhQKDHdvcmtzcGFjZV9pZBgCIAEoCRIXCgZydW5faWQYAyABKAlCB7pIBHICEAEivgIKG0V2YWx1YXRpb25SdW5NZXRyaWNzU3VtbWFyeRIdCgxyZXN1bHRfY291bnQYASABKAVCB7pIBBoCKAASHwoOZmFpbGVkX3Jlc3VsdHMYAiABKAVCB7pIBBoCKAASJQoNYXZlcmFnZV9zY29yZRgDIAEoAUIOukgLEgkpAAAAAAAAAAASJAoKdG90YWxfY29zdBgEIAEoCzIQLmNvbW1vbi52MS5Nb25leRImCgxhdmVyYWdlX2Nvc3QYBSABKAsyEC5jb21tb24udjEuTW9uZXkSKgoSYXZlcmFnZV9sYXRlbmN5X21zGAYgASgBQg66SAsSCSkAAAAAAAAAABIfCg5wOTVfbGF0ZW5jeV9tcxgHIAEoA0IHukgEIgIoABIdCgx0b3RhbF90b2tlbnMYCCABKANCB7pIBCICKAAi3QEKGkV2YWx1YXRpb25SdW5SZXN1bHRNZXRyaWNzEhQKDGFzc2VydGlvbl9pZBgBIAEoCRIOCgZwYXNzZWQYAiABKAgSHQoFc2NvcmUYAyABKAFCDrpICxIJKQAAAAAAAAAAEg4KBmFjdHVhbBgEIAEoCRIPCgdtZXNzYWdlGAUgASgJEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCK2AQofR2V0RXZhbHVhdGlvblJ1bk1ldHJpY3NSZXNwb25zZRIgCg9zY2VuYXJpb19ydW5faWQYASABKAlCB7pIBHICEAESOAoHc3VtbWFyeRgCIAEoCzInLmZlcm1hdGEudjEuRXZhbHVhdGlvblJ1bk1ldHJpY3NTdW1tYXJ5EjcKB3Jlc3VsdHMYAyADKAsyJi5mZXJtYXRhLnYxLkV2YWx1YXRpb25SdW5SZXN1bHRNZXRyaWNzIt8BChFEaWFnbm9zdGljRmluZGluZxIKCgJpZBgBIAEoCRJBCghzZXZlcml0eRgCIAEoDjIlLmZlcm1hdGEudjEuRGlhZ25vc3RpY0ZpbmRpbmdTZXZlcml0eUIIukgFggECEAESFgoFdGl0bGUYAyABKAlCB7pIBHICEAESDgoGZGV0YWlsGAQgASgJEigKCGV2aWRlbmNlGAUgAygLMhYuY29tbW9uLnYxLkV2aWRlbmNlUmVmEikKCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCLvBAocRXZhbHVhdGlvbkRpYWdub3N0aWNBcnRpZmFjdBITCgJpZBgBIAEoCUIHukgEcgIQARI6CgRraW5kGAIgASgOMiIuZmVybWF0YS52MS5EaWFnbm9zdGljQXJ0aWZhY3RLaW5kQgi6SAWCAQIQARIgCg9vcmdhbml6YXRpb25faWQYAyABKAlCB7pIBHICEAESFAoMd29ya3NwYWNlX2lkGAQgASgJEhMKC3NjZW5hcmlvX2lkGAUgASgJEiAKD3NjZW5hcmlvX3J1bl9pZBgGIAEoCUIHukgEcgIQARIQCgh0cmFjZV9pZBgHIAEoCRIWCgV0aXRsZRgIIAEoCUIHukgEcgIQARIPCgdzdW1tYXJ5GAkgASgJEi8KCGZpbmRpbmdzGAogAygLMh0uZmVybWF0YS52MS5EaWFnbm9zdGljRmluZGluZxIoCghldmlkZW5jZRgLIAMoCzIWLmNvbW1vbi52MS5FdmlkZW5jZVJlZhIuCg1pbnB1dF9jb250ZXh0GAwgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIoCgdwYXlsb2FkGA0gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxhcnRpZmFjdF91cmkYDiABKAkSFgoOY29udGVudF9zaGEyNTYYDyABKAkSEQoJcGVyc2lzdGVkGBAgASgIEi4KCmNyZWF0ZWRfYXQYESABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYEiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIscBChlFeHBsYWluU2NlbmFyaW9SdW5SZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSFwoGcnVuX2lkGAMgASgJQge6SARyAhABEhUKDWluY2x1ZGVfdHJhY2UYBCABKAgSGAoQcGVyc2lzdF9hcnRpZmFjdBgFIAEoCBIoCgdjb250ZXh0GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJYChpFeHBsYWluU2NlbmFyaW9SdW5SZXNwb25zZRI6CghhcnRpZmFjdBgBIAEoCzIoLmZlcm1hdGEudjEuRXZhbHVhdGlvbkRpYWdub3N0aWNBcnRpZmFjdCLxAQoiQW5hbHl6ZVNjZW5hcmlvUnVuUm9vdENhdXNlUmVxdWVzdBIgCg9vcmdhbml6YXRpb25faWQYASABKAlCB7pIBHICEAESFAoMd29ya3NwYWNlX2lkGAIgASgJEhcKBnJ1bl9pZBgDIAEoCUIHukgEcgIQARIfChdzdXNwZWN0ZWRfZmFpbHVyZV9tb2RlcxgEIAMoCRIVCg1pbmNsdWRlX3RyYWNlGAUgASgIEhgKEHBlcnNpc3RfYXJ0aWZhY3QYBiABKAgSKAoHY29udGV4dBgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiYQojQW5hbHl6ZVNjZW5hcmlvUnVuUm9vdENhdXNlUmVzcG9uc2USOgoIYXJ0aWZhY3QYASABKAsyKC5mZXJtYXRhLnYxLkV2YWx1YXRpb25EaWFnbm9zdGljQXJ0aWZhY3QikQIKHkp1ZGdlVmFsaWRhdGlvbkFjY3VyYWN5TWV0cmljcxIRCglwcmVjaXNpb24YASABKAESDgoGcmVjYWxsGAIgASgBEhAKCGYxX3Njb3JlGAMgASgBEhAKCGFjY3VyYWN5GAQgASgBEiIKEXRvdGFsX3ZhbGlkYXRpb25zGAUgASgFQge6SAQaAigAEh8KDnRydWVfcG9zaXRpdmVzGAYgASgFQge6SAQaAigAEiAKD2ZhbHNlX3Bvc2l0aXZlcxgHIAEoBUIHukgEGgIoABIfCg50cnVlX25lZ2F0aXZlcxgIIAEoBUIHukgEGgIoABIgCg9mYWxzZV9uZWdhdGl2ZXMYCSABKAVCB7pIBBoCKAAiwAEKHkp1ZGdlVmFsaWRhdGlvbkNvbmZ1c2lvbk1hdHJpeBImChVqdWRnZV9wYXNzX2h1bWFuX3Bhc3MYASABKAVCB7pIBBoCKAASJgoVanVkZ2VfcGFzc19odW1hbl9mYWlsGAIgASgFQge6SAQaAigAEiYKFWp1ZGdlX2ZhaWxfaHVtYW5fcGFzcxgDIAEoBUIHukgEGgIoABImChVqdWRnZV9mYWlsX2h1bWFuX2ZhaWwYBCABKAVCB7pIBBoCKAAi0QEKGkp1ZGdlVmFsaWRhdGlvbkJpYXNNZXRyaWNzEhQKDG92ZXJfc2NvcmluZxgBIAEoCBIVCg11bmRlcl9zY29yaW5nGAIgASgIEhMKC3Njb3JlX2RyaWZ0GAMgASgBEhsKE2F2ZXJhZ2VfanVkZ2Vfc2NvcmUYBCABKAESGwoTYXZlcmFnZV9odW1hbl9zY29yZRgFIAEoARIZChFzY29yZV9jb3JyZWxhdGlvbhgGIAEoARIcCgtzYW1wbGVfc2l6ZRgHIAEoBUIHukgEGgIoACKcAQoaSnVkZ2VWYWxpZGF0aW9uQ2FsaWJyYXRpb24SGQoIanVkZ2VfaWQYASABKAlCB7pIBHICEAESGwoTdmFsaWRhdGlvbl9hY2N1cmFjeRgCIAEoARIRCgl2YWxpZGF0ZWQYAyABKAgSMwoPbGFzdF92YWxpZGF0aW9uGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKZBAoZSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvbhIeCg1ldmFsdWF0aW9uX2lkGAEgASgJQge6SARyAhABEiAKD29yZ2FuaXphdGlvbl9pZBgCIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAyABKAkSGQoIanVkZ2VfaWQYBCABKAlCB7pIBHICEAESFwoPc2NlbmFyaW9fcnVuX2lkGAUgASgJEhQKDGFzc2VydGlvbl9pZBgGIAEoCRIsCgtqdWRnZV9zY29yZRgHIAEoAUIXukgUEhIZAAAAAAAA8D8pAAAAAAAAAAASFAoManVkZ2VfcGFzc2VkGAggASgIEhcKD2h1bWFuX3ZhbGlkYXRlZBgJIAEoCBIxCgtodW1hbl9zY29yZRgKIAEoAUIXukgUEhIZAAAAAAAAWUApAAAAAAAAAABIAIgBARIYChB2YWxpZGF0aW9uX25vdGVzGAsgASgJEg4KBnNvdXJjZRgMIAEoCRIwCgxldmFsdWF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYDiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9odW1hbl9zY29yZSJIChlKdWRnZUNhbGlicmF0aW9uQ2FuZGlkYXRlEhkKCGp1ZGdlX2lkGAEgASgJQge6SARyAhABEhAKCGFjY3VyYWN5GAIgASgBImAKIUdldEp1ZGdlVmFsaWRhdGlvbkFjY3VyYWN5UmVxdWVzdBIgCg9vcmdhbml6YXRpb25faWQYASABKAlCB7pIBHICEAESGQoIanVkZ2VfaWQYAiABKAlCB7pIBHICEAEiYQoiR2V0SnVkZ2VWYWxpZGF0aW9uQWNjdXJhY3lSZXNwb25zZRI7CgdtZXRyaWNzGAEgASgLMiouZmVybWF0YS52MS5KdWRnZVZhbGlkYXRpb25BY2N1cmFjeU1ldHJpY3MiZwooR2V0SnVkZ2VWYWxpZGF0aW9uQ29uZnVzaW9uTWF0cml4UmVxdWVzdBIgCg9vcmdhbml6YXRpb25faWQYASABKAlCB7pIBHICEAESGQoIanVkZ2VfaWQYAiABKAlCB7pIBHICEAEiZwopR2V0SnVkZ2VWYWxpZGF0aW9uQ29uZnVzaW9uTWF0cml4UmVzcG9uc2USOgoGbWF0cml4GAEgASgLMiouZmVybWF0YS52MS5KdWRnZVZhbGlkYXRpb25Db25mdXNpb25NYXRyaXgiXAodR2V0SnVkZ2VWYWxpZGF0aW9uQmlhc1JlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEhkKCGp1ZGdlX2lkGAIgASgJQge6SARyAhABIlkKHkdldEp1ZGdlVmFsaWRhdGlvbkJpYXNSZXNwb25zZRI3CgdtZXRyaWNzGAEgASgLMiYuZmVybWF0YS52MS5KdWRnZVZhbGlkYXRpb25CaWFzTWV0cmljcyJgCiFSZWNhbGlicmF0ZUp1ZGdlVmFsaWRhdGlvblJlcXVlc3QSIAoPb3JnYW5pemF0aW9uX2lkGAEgASgJQge6SARyAhABEhkKCGp1ZGdlX2lkGAIgASgJQge6SARyAhABImEKIlJlY2FsaWJyYXRlSnVkZ2VWYWxpZGF0aW9uUmVzcG9uc2USOwoLY2FsaWJyYXRpb24YASABKAsyJi5mZXJtYXRhLnYxLkp1ZGdlVmFsaWRhdGlvbkNhbGlicmF0aW9uIr0DCiZSZWNvcmRKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVxdWVzdBIVCg1ldmFsdWF0aW9uX2lkGAEgASgJEiAKD29yZ2FuaXphdGlvbl9pZBgCIAEoCUIHukgEcgIQARIUCgx3b3Jrc3BhY2VfaWQYAyABKAkSGQoIanVkZ2VfaWQYBCABKAlCB7pIBHICEAESFwoPc2NlbmFyaW9fcnVuX2lkGAUgASgJEhQKDGFzc2VydGlvbl9pZBgGIAEoCRIsCgtqdWRnZV9zY29yZRgHIAEoAUIXukgUEhIZAAAAAAAA8D8pAAAAAAAAAAASFAoManVkZ2VfcGFzc2VkGAggASgIEhcKD2h1bWFuX3ZhbGlkYXRlZBgJIAEoCBIxCgtodW1hbl9zY29yZRgKIAEoAUIXukgUEhIZAAAAAAAAWUApAAAAAAAAAABIAIgBARIYChB2YWxpZGF0aW9uX25vdGVzGAsgASgJEg4KBnNvdXJjZRgMIAEoCRIwCgxldmFsdWF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9odW1hbl9zY29yZSJkCidSZWNvcmRKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVzcG9uc2USOQoKZXZhbHVhdGlvbhgBIAEoCzIlLmZlcm1hdGEudjEuSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvbiLJAQooVmFsaWRhdGVKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVxdWVzdBIeCg1ldmFsdWF0aW9uX2lkGAEgASgJQge6SARyAhABEiAKD29yZ2FuaXphdGlvbl9pZBgCIAEoCUIHukgEcgIQARIxCgtodW1hbl9zY29yZRgDIAEoAUIXukgUEhIZAAAAAAAAWUApAAAAAAAAAABIAIgBARIYChB2YWxpZGF0aW9uX25vdGVzGAQgASgJQg4KDF9odW1hbl9zY29yZSJmCilWYWxpZGF0ZUp1ZGdlVmFsaWRhdGlvbkV2YWx1YXRpb25SZXNwb25zZRI5CgpldmFsdWF0aW9uGAEgASgLMiUuZmVybWF0YS52MS5KdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uIqABCiVMaXN0SnVkZ2VDYWxpYnJhdGlvbkNhbmRpZGF0ZXNSZXF1ZXN0EiAKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIHukgEcgIQARIgCg9taW5fdmFsaWRhdGlvbnMYAiABKAVCB7pIBBoCKAASMwoSYWNjdXJhY3lfdGhyZXNob2xkGAMgASgBQhe6SBQSEhkAAAAAAADwPykAAAAAAAAAACK/AQomTGlzdEp1ZGdlQ2FsaWJyYXRpb25DYW5kaWRhdGVzUmVzcG9uc2USOQoKY2FuZGlkYXRlcxgBIAMoCzIlLmZlcm1hdGEudjEuSnVkZ2VDYWxpYnJhdGlvbkNhbmRpZGF0ZRIcCgt0b3RhbF9jb3VudBgCIAEoBUIHukgEGgIoABIgCg9taW5fdmFsaWRhdGlvbnMYAyABKAVCB7pIBBoCKAASGgoSYWNjdXJhY3lfdGhyZXNob2xkGAQgASgBIhsKGUdldE1pZ3JhdGlvblN0YXR1c1JlcXVlc3QiXAoUUm91dGVNaWdyYXRpb25TdGF0dXMSEwoLcGF0aF9wcmVmaXgYASABKAkSEAoIbWlncmF0ZWQYAiABKAgSHQoVcHJveGllZF9yZXF1ZXN0X2NvdW50GAMgASgDIk4KGkdldE1pZ3JhdGlvblN0YXR1c1Jlc3BvbnNlEjAKBnJvdXRlcxgBIAMoCzIgLmZlcm1hdGEudjEuUm91dGVNaWdyYXRpb25TdGF0dXMq5wEKDUFzc2VydGlvbktpbmQSHgoaQVNTRVJUSU9OX0tJTkRfVU5TUEVDSUZJRUQQABIbChdBU1NFUlRJT05fS0lORF9DT05UQUlOUxABEh8KG0FTU0VSVElPTl9LSU5EX05PVF9DT05UQUlOUxACEhgKFEFTU0VSVElPTl9LSU5EX1JFR0VYEAMSHQoZQVNTRVJUSU9OX0tJTkRfU0lNSUxBUklUWRAEEh8KG0FTU0VSVElPTl9LSU5EX0NVU1RPTV9KVURHRRAFEh4KGkFTU0VSVElPTl9LSU5EX0pTT05fU0NIRU1BEAYqiAEKCUp1ZGdlS2luZBIaChZKVURHRV9LSU5EX1VOU1BFQ0lGSUVEEAASEgoOSlVER0VfS0lORF9MTE0QARIZChVKVURHRV9LSU5EX1JVTEVfQkFTRUQQAhIZChVKVURHRV9LSU5EX1NJTUlMQVJJVFkQAxIVChFKVURHRV9LSU5EX0NVU1RPTRAEKpMCChdTY2VuYXJpb0Vudmlyb25tZW50S2luZBIpCiVTQ0VOQVJJT19FTlZJUk9OTUVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASJAogU0NFTkFSSU9fRU5WSVJPTk1FTlRfS0lORF9SRVBMQVkQARImCiJTQ0VOQVJJT19FTlZJUk9OTUVOVF9LSU5EX1NUQVJMQVJLEAISJwojU0NFTkFSSU9fRU5WSVJPTk1FTlRfS0lORF9NT0NLX0hUVFAQAxIlCiFTQ0VOQVJJT19FTlZJUk9OTUVOVF9LSU5EX1NBTkRCT1gQBBIvCitTQ0VOQVJJT19FTlZJUk9OTUVOVF9LSU5EX1BST0RVQ1RJT05fU0hBRE9XEAUqpwIKFVVzZXJTaW11bGF0b3JTdHJhdGVneRInCiNVU0VSX1NJTVVMQVRPUl9TVFJBVEVHWV9VTlNQRUNJRklFRBAAEicKI1VTRVJfU0lNVUxBVE9SX1NUUkFURUdZX0NPT1BFUkFUSVZFEAESIQodVVNFUl9TSU1VTEFUT1JfU1RSQVRFR1lfUkVBQ1QQAhIiCh5VU0VSX1NJTVVMQVRPUl9TVFJBVEVHWV9WRVJJRlkQAxImCiJVU0VSX1NJTVVMQVRPUl9TVFJBVEVHWV9SRUZMRUNUSU9OEAQSJwojVVNFUl9TSU1VTEFUT1JfU1RSQVRFR1lfQURWRVJTQVJJQUwQBRIkCiBVU0VSX1NJTVVMQVRPUl9TVFJBVEVHWV9DT05GVVNFRBAGKrYCChRPdXRjb21lQ3JpdGVyaW9uS2luZBImCiJPVVRDT01FX0NSSVRFUklPTl9LSU5EX1VOU1BFQ0lGSUVEEAASJgoiT1VUQ09NRV9DUklURVJJT05fS0lORF9GSU5BTF9TVEFURRABEioKJk9VVENPTUVfQ1JJVEVSSU9OX0tJTkRfVEFTS19DT01QTEVUSU9OEAISJQohT1VUQ09NRV9DUklURVJJT05fS0lORF9UUkFKRUNUT1JZEAMSJgoiT1VUQ09NRV9DUklURVJJT05fS0lORF9DT1NUX0JVREdFVBAEEikKJU9VVENPTUVfQ1JJVEVSSU9OX0tJTkRfTEFURU5DWV9CVURHRVQQBRIoCiRPVVRDT01FX0NSSVRFUklPTl9LSU5EX1FVQUxJVFlfU0NPUkUQBiq6AwoXR292ZXJuYW5jZUFzc2VydGlvblR5cGUSKQolR09WRVJOQU5DRV9BU1NFUlRJT05fVFlQRV9VTlNQRUNJRklFRBAAEjEKLUdPVkVSTkFOQ0VfQVNTRVJUSU9OX1RZUEVfRVNDQUxBVElPTl9SRVFVSVJFRBABEjMKL0dPVkVSTkFOQ0VfQVNTRVJUSU9OX1RZUEVfQVVUT19QUk9DRUVEX0VYUEVDVEVEEAISMQotR09WRVJOQU5DRV9BU1NFUlRJT05fVFlQRV9SSVNLX0NMQVNTSUZJQ0FUSU9OEAMSMgouR09WRVJOQU5DRV9BU1NFUlRJT05fVFlQRV9EQVRBX0FDQ0VTU19CT1VOREFSWRAEEjgKNEdPVkVSTkFOQ0VfQVNTRVJUSU9OX1RZUEVfR09WRVJOQU5DRV9CTE9DS19SRVNQRUNURUQQBRIzCi9HT1ZFUk5BTkNFX0FTU0VSVElPTl9UWVBFX1NFTEZfQVBQUk9WQUxfQkxPQ0tFRBAGEjYKMkdPVkVSTkFOQ0VfQVNTRVJUSU9OX1RZUEVfUElJX0RFVEVDVEVEX0FORF9IQU5ETEVEEAcqgAMKF0RlbGVnYXRpb25Bc3NlcnRpb25UeXBlEikKJURFTEVHQVRJT05fQVNTRVJUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABI3CjNERUxFR0FUSU9OX0FTU0VSVElPTl9UWVBFX0RFTEVHQVRJT05fVEFSR0VUX0NPUlJFQ1QQARIyCi5ERUxFR0FUSU9OX0FTU0VSVElPTl9UWVBFX0NPTlRFWFRfUFJFU0VSVkFUSU9OEAISMgouREVMRUdBVElPTl9BU1NFUlRJT05fVFlQRV9ERUxFR0FUSU9OX1ZBTFVFX0FERBADEjUKMURFTEVHQVRJT05fQVNTRVJUSU9OX1RZUEVfREVMRUdBVElPTl9DT1NUX0JPVU5ERUQQBBIxCi1ERUxFR0FUSU9OX0FTU0VSVElPTl9UWVBFX0NIQUlOX0RFUFRIX0JPVU5ERUQQBRIvCitERUxFR0FUSU9OX0FTU0VSVElPTl9UWVBFX0ZBSUxVUkVfSVNPTEFUSU9OEAYq/AEKEVNjZW5hcmlvUnVuU3RhdHVzEiMKH1NDRU5BUklPX1JVTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIfChtTQ0VOQVJJT19SVU5fU1RBVFVTX1BFTkRJTkcQARIfChtTQ0VOQVJJT19SVU5fU1RBVFVTX1JVTk5JTkcQAhIeChpTQ0VOQVJJT19SVU5fU1RBVFVTX1BBU1NFRBADEh4KGlNDRU5BUklPX1JVTl9TVEFUVVNfRkFJTEVEEAQSHQoZU0NFTkFSSU9fUlVOX1NUQVRVU19FUlJPUhAFEiEKHVNDRU5BUklPX1JVTl9TVEFUVVNfQ0FOQ0VMTEVEEAYqlQEKFkRpYWdub3N0aWNBcnRpZmFjdEtpbmQSKAokRElBR05PU1RJQ19BUlRJRkFDVF9LSU5EX1VOU1BFQ0lGSUVEEAASKAokRElBR05PU1RJQ19BUlRJRkFDVF9LSU5EX0VYUExBTkFUSU9OEAESJwojRElBR05PU1RJQ19BUlRJRkFDVF9LSU5EX1JPT1RfQ0FVU0UQAiq+AQoZRGlhZ25vc3RpY0ZpbmRpbmdTZXZlcml0eRIrCidESUFHTk9TVElDX0ZJTkRJTkdfU0VWRVJJVFlfVU5TUEVDSUZJRUQQABIkCiBESUFHTk9TVElDX0ZJTkRJTkdfU0VWRVJJVFlfSU5GTxABEicKI0RJQUdOT1NUSUNfRklORElOR19TRVZFUklUWV9XQVJOSU5HEAISJQohRElBR05PU1RJQ19GSU5ESU5HX1NFVkVSSVRZX0VSUk9SEAMy1SMKDkZlcm1hdGFTZXJ2aWNlEoQBCg9DcmVhdGVUZXN0U3VpdGUSIi5mZXJtYXRhLnYxLkNyZWF0ZVRlc3RTdWl0ZVJlcXVlc3QaIy5mZXJtYXRhLnYxLkNyZWF0ZVRlc3RTdWl0ZVJlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGALq8xgPb3JnYW5pemF0aW9uX2lkEnoKDEdldFRlc3RTdWl0ZRIfLmZlcm1hdGEudjEuR2V0VGVzdFN1aXRlUmVxdWVzdBogLmZlcm1hdGEudjEuR2V0VGVzdFN1aXRlUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBKAAQoOTGlzdFRlc3RTdWl0ZXMSIS5mZXJtYXRhLnYxLkxpc3RUZXN0U3VpdGVzUmVxdWVzdBoiLmZlcm1hdGEudjEuTGlzdFRlc3RTdWl0ZXNSZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGAHq8xgPb3JnYW5pemF0aW9uX2lkEoEBCg5DcmVhdGVTY2VuYXJpbxIhLmZlcm1hdGEudjEuQ3JlYXRlU2NlbmFyaW9SZXF1ZXN0GiIuZmVybWF0YS52MS5DcmVhdGVTY2VuYXJpb1Jlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGALq8xgPb3JnYW5pemF0aW9uX2lkEncKC0dldFNjZW5hcmlvEh4uZmVybWF0YS52MS5HZXRTY2VuYXJpb1JlcXVlc3QaHy5mZXJtYXRhLnYxLkdldFNjZW5hcmlvUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBJ9Cg1MaXN0U2NlbmFyaW9zEiAuZmVybWF0YS52MS5MaXN0U2NlbmFyaW9zUmVxdWVzdBohLmZlcm1hdGEudjEuTGlzdFNjZW5hcmlvc1Jlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSlgEKFVVwc2VydEN1c3RvbUV2YWx1YXRvchIoLmZlcm1hdGEudjEuVXBzZXJ0Q3VzdG9tRXZhbHVhdG9yUmVxdWVzdBopLmZlcm1hdGEudjEuVXBzZXJ0Q3VzdG9tRXZhbHVhdG9yUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQSjAEKEkdldEN1c3RvbUV2YWx1YXRvchIlLmZlcm1hdGEudjEuR2V0Q3VzdG9tRXZhbHVhdG9yUmVxdWVzdBomLmZlcm1hdGEudjEuR2V0Q3VzdG9tRXZhbHVhdG9yUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBKSAQoUTGlzdEN1c3RvbUV2YWx1YXRvcnMSJy5mZXJtYXRhLnYxLkxpc3RDdXN0b21FdmFsdWF0b3JzUmVxdWVzdBooLmZlcm1hdGEudjEuTGlzdEN1c3RvbUV2YWx1YXRvcnNSZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGAHq8xgPb3JnYW5pemF0aW9uX2lkEpYBChVEZWxldGVDdXN0b21FdmFsdWF0b3ISKC5mZXJtYXRhLnYxLkRlbGV0ZUN1c3RvbUV2YWx1YXRvclJlcXVlc3QaKS5mZXJtYXRhLnYxLkRlbGV0ZUN1c3RvbUV2YWx1YXRvclJlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGALq8xgPb3JnYW5pemF0aW9uX2lkEngKC1Vwc2VydEp1ZGdlEh4uZmVybWF0YS52MS5VcHNlcnRKdWRnZVJlcXVlc3QaHy5mZXJtYXRhLnYxLlVwc2VydEp1ZGdlUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQSbgoIR2V0SnVkZ2USGy5mZXJtYXRhLnYxLkdldEp1ZGdlUmVxdWVzdBocLmZlcm1hdGEudjEuR2V0SnVkZ2VSZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGAHq8xgPb3JnYW5pemF0aW9uX2lkEnQKCkxpc3RKdWRnZXMSHS5mZXJtYXRhLnYxLkxpc3RKdWRnZXNSZXF1ZXN0Gh4uZmVybWF0YS52MS5MaXN0SnVkZ2VzUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBJ4CgtEZWxldGVKdWRnZRIeLmZlcm1hdGEudjEuRGVsZXRlSnVkZ2VSZXF1ZXN0Gh8uZmVybWF0YS52MS5EZWxldGVKdWRnZVJlc3BvbnNlIijK8xgNZmVybWF0YTp3cml0ZdjzGALq8xgPb3JnYW5pemF0aW9uX2lkEn4KDVN0YXJ0U2NlbmFyaW8SIC5mZXJtYXRhLnYxLlN0YXJ0U2NlbmFyaW9SZXF1ZXN0GiEuZmVybWF0YS52MS5TdGFydFNjZW5hcmlvUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYA+rzGA9vcmdhbml6YXRpb25faWQSogEKFkNyZWF0ZUFuZFN0YXJ0U2NlbmFyaW8SKS5mZXJtYXRhLnYxLkNyZWF0ZUFuZFN0YXJ0U2NlbmFyaW9SZXF1ZXN0GiouZmVybWF0YS52MS5DcmVhdGVBbmRTdGFydFNjZW5hcmlvUmVzcG9uc2UiMcrzGA1mZXJtYXRhOndyaXRl2PMYA+rzGBhzY2VuYXJpby5vcmdhbml6YXRpb25faWQSigEKEVJlY29yZFNjZW5hcmlvUnVuEiQuZmVybWF0YS52MS5SZWNvcmRTY2VuYXJpb1J1blJlcXVlc3QaJS5mZXJtYXRhLnYxLlJlY29yZFNjZW5hcmlvUnVuUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQSgAEKDkdldFNjZW5hcmlvUnVuEiEuZmVybWF0YS52MS5HZXRTY2VuYXJpb1J1blJlcXVlc3QaIi5mZXJtYXRhLnYxLkdldFNjZW5hcmlvUnVuUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBKGAQoQTGlzdFNjZW5hcmlvUnVucxIjLmZlcm1hdGEudjEuTGlzdFNjZW5hcmlvUnVuc1JlcXVlc3QaJC5mZXJtYXRhLnYxLkxpc3RTY2VuYXJpb1J1bnNSZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGAHq8xgPb3JnYW5pemF0aW9uX2lkEr8BCiNHZXRFdmFsdWF0aW9uT2JzZXJ2YWJpbGl0eURhc2hib2FyZBI2LmZlcm1hdGEudjEuR2V0RXZhbHVhdGlvbk9ic2VydmFiaWxpdHlEYXNoYm9hcmRSZXF1ZXN0GjcuZmVybWF0YS52MS5HZXRFdmFsdWF0aW9uT2JzZXJ2YWJpbGl0eURhc2hib2FyZFJlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSmwEKF0dldEV2YWx1YXRpb25SdW5NZXRyaWNzEiouZmVybWF0YS52MS5HZXRFdmFsdWF0aW9uUnVuTWV0cmljc1JlcXVlc3QaKy5mZXJtYXRhLnYxLkdldEV2YWx1YXRpb25SdW5NZXRyaWNzUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBKMAQoSRXhwbGFpblNjZW5hcmlvUnVuEiUuZmVybWF0YS52MS5FeHBsYWluU2NlbmFyaW9SdW5SZXF1ZXN0GiYuZmVybWF0YS52MS5FeHBsYWluU2NlbmFyaW9SdW5SZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGALq8xgPb3JnYW5pemF0aW9uX2lkEqcBChtBbmFseXplU2NlbmFyaW9SdW5Sb290Q2F1c2USLi5mZXJtYXRhLnYxLkFuYWx5emVTY2VuYXJpb1J1blJvb3RDYXVzZVJlcXVlc3QaLy5mZXJtYXRhLnYxLkFuYWx5emVTY2VuYXJpb1J1blJvb3RDYXVzZVJlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAurzGA9vcmdhbml6YXRpb25faWQSpAEKGkdldEp1ZGdlVmFsaWRhdGlvbkFjY3VyYWN5Ei0uZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25BY2N1cmFjeVJlcXVlc3QaLi5mZXJtYXRhLnYxLkdldEp1ZGdlVmFsaWRhdGlvbkFjY3VyYWN5UmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBK5AQohR2V0SnVkZ2VWYWxpZGF0aW9uQ29uZnVzaW9uTWF0cml4EjQuZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25Db25mdXNpb25NYXRyaXhSZXF1ZXN0GjUuZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25Db25mdXNpb25NYXRyaXhSZXNwb25zZSInyvMYDGZlcm1hdGE6cmVhZNjzGAHq8xgPb3JnYW5pemF0aW9uX2lkEpgBChZHZXRKdWRnZVZhbGlkYXRpb25CaWFzEikuZmVybWF0YS52MS5HZXRKdWRnZVZhbGlkYXRpb25CaWFzUmVxdWVzdBoqLmZlcm1hdGEudjEuR2V0SnVkZ2VWYWxpZGF0aW9uQmlhc1Jlc3BvbnNlIifK8xgMZmVybWF0YTpyZWFk2PMYAerzGA9vcmdhbml6YXRpb25faWQSpQEKGlJlY2FsaWJyYXRlSnVkZ2VWYWxpZGF0aW9uEi0uZmVybWF0YS52MS5SZWNhbGlicmF0ZUp1ZGdlVmFsaWRhdGlvblJlcXVlc3QaLi5mZXJtYXRhLnYxLlJlY2FsaWJyYXRlSnVkZ2VWYWxpZGF0aW9uUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQStAEKH1JlY29yZEp1ZGdlVmFsaWRhdGlvbkV2YWx1YXRpb24SMi5mZXJtYXRhLnYxLlJlY29yZEp1ZGdlVmFsaWRhdGlvbkV2YWx1YXRpb25SZXF1ZXN0GjMuZmVybWF0YS52MS5SZWNvcmRKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQSugEKIVZhbGlkYXRlSnVkZ2VWYWxpZGF0aW9uRXZhbHVhdGlvbhI0LmZlcm1hdGEudjEuVmFsaWRhdGVKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVxdWVzdBo1LmZlcm1hdGEudjEuVmFsaWRhdGVKdWRnZVZhbGlkYXRpb25FdmFsdWF0aW9uUmVzcG9uc2UiKMrzGA1mZXJtYXRhOndyaXRl2PMYAurzGA9vcmdhbml6YXRpb25faWQSsAEKHkxpc3RKdWRnZUNhbGlicmF0aW9uQ2FuZGlkYXRlcxIxLmZlcm1hdGEudjEuTGlzdEp1ZGdlQ2FsaWJyYXRpb25DYW5kaWRhdGVzUmVxdWVzdBoyLmZlcm1hdGEudjEuTGlzdEp1ZGdlQ2FsaWJyYXRpb25DYW5kaWRhdGVzUmVzcG9uc2UiJ8rzGAxmZXJtYXRhOnJlYWTY8xgB6vMYD29yZ2FuaXphdGlvbl9pZBJtChJHZXRNaWdyYXRpb25TdGF0dXMSJS5mZXJtYXRhLnYxLkdldE1pZ3JhdGlvblN0YXR1c1JlcXVlc3QaJi5mZXJtYXRhLnYxLkdldE1pZ3JhdGlvblN0YXR1c1Jlc3BvbnNlIgjY8xgB4PMYAUI5WjdnaXRodWIuY29tL2V2YWxvcHMvcGxhdGZvcm0vZ2VuL2dvL2Zlcm1hdGEvdjE7ZmVybWF0YXYxYgZwcm90bzM", [file_buf_validate_validate, file_common_v1_analytics, file_common_v1_authz, file_common_v1_risk, file_google_protobuf_duration, file_google_protobuf_struct, file_google_protobuf_timestamp, file_traces_v1_traces]);
15
15
  /**
16
16
  * Describes the message fermata.v1.TestSuite.
17
17
  * Use `create(TestSuiteSchema)` to create a new message.
@@ -317,151 +317,196 @@ export const ListScenarioRunsRequestSchema = /*@__PURE__*/ messageDesc(file_ferm
317
317
  * Use `create(ListScenarioRunsResponseSchema)` to create a new message.
318
318
  */
319
319
  export const ListScenarioRunsResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 60);
320
+ /**
321
+ * Describes the message fermata.v1.GetEvaluationObservabilityDashboardRequest.
322
+ * Use `create(GetEvaluationObservabilityDashboardRequestSchema)` to create a new message.
323
+ */
324
+ export const GetEvaluationObservabilityDashboardRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 61);
325
+ /**
326
+ * Describes the message fermata.v1.EvaluationObservabilitySummary.
327
+ * Use `create(EvaluationObservabilitySummarySchema)` to create a new message.
328
+ */
329
+ export const EvaluationObservabilitySummarySchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 62);
330
+ /**
331
+ * Describes the message fermata.v1.EvaluationRecentRunSummary.
332
+ * Use `create(EvaluationRecentRunSummarySchema)` to create a new message.
333
+ */
334
+ export const EvaluationRecentRunSummarySchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 63);
335
+ /**
336
+ * Describes the message fermata.v1.EvaluationRegressionAlert.
337
+ * Use `create(EvaluationRegressionAlertSchema)` to create a new message.
338
+ */
339
+ export const EvaluationRegressionAlertSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 64);
340
+ /**
341
+ * Describes the message fermata.v1.GetEvaluationObservabilityDashboardResponse.
342
+ * Use `create(GetEvaluationObservabilityDashboardResponseSchema)` to create a new message.
343
+ */
344
+ export const GetEvaluationObservabilityDashboardResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 65);
345
+ /**
346
+ * Describes the message fermata.v1.GetEvaluationRunMetricsRequest.
347
+ * Use `create(GetEvaluationRunMetricsRequestSchema)` to create a new message.
348
+ */
349
+ export const GetEvaluationRunMetricsRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 66);
350
+ /**
351
+ * Describes the message fermata.v1.EvaluationRunMetricsSummary.
352
+ * Use `create(EvaluationRunMetricsSummarySchema)` to create a new message.
353
+ */
354
+ export const EvaluationRunMetricsSummarySchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 67);
355
+ /**
356
+ * Describes the message fermata.v1.EvaluationRunResultMetrics.
357
+ * Use `create(EvaluationRunResultMetricsSchema)` to create a new message.
358
+ */
359
+ export const EvaluationRunResultMetricsSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 68);
360
+ /**
361
+ * Describes the message fermata.v1.GetEvaluationRunMetricsResponse.
362
+ * Use `create(GetEvaluationRunMetricsResponseSchema)` to create a new message.
363
+ */
364
+ export const GetEvaluationRunMetricsResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 69);
320
365
  /**
321
366
  * Describes the message fermata.v1.DiagnosticFinding.
322
367
  * Use `create(DiagnosticFindingSchema)` to create a new message.
323
368
  */
324
- export const DiagnosticFindingSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 61);
369
+ export const DiagnosticFindingSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 70);
325
370
  /**
326
371
  * Describes the message fermata.v1.EvaluationDiagnosticArtifact.
327
372
  * Use `create(EvaluationDiagnosticArtifactSchema)` to create a new message.
328
373
  */
329
- export const EvaluationDiagnosticArtifactSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 62);
374
+ export const EvaluationDiagnosticArtifactSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 71);
330
375
  /**
331
376
  * Describes the message fermata.v1.ExplainScenarioRunRequest.
332
377
  * Use `create(ExplainScenarioRunRequestSchema)` to create a new message.
333
378
  */
334
- export const ExplainScenarioRunRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 63);
379
+ export const ExplainScenarioRunRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 72);
335
380
  /**
336
381
  * Describes the message fermata.v1.ExplainScenarioRunResponse.
337
382
  * Use `create(ExplainScenarioRunResponseSchema)` to create a new message.
338
383
  */
339
- export const ExplainScenarioRunResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 64);
384
+ export const ExplainScenarioRunResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 73);
340
385
  /**
341
386
  * Describes the message fermata.v1.AnalyzeScenarioRunRootCauseRequest.
342
387
  * Use `create(AnalyzeScenarioRunRootCauseRequestSchema)` to create a new message.
343
388
  */
344
- export const AnalyzeScenarioRunRootCauseRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 65);
389
+ export const AnalyzeScenarioRunRootCauseRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 74);
345
390
  /**
346
391
  * Describes the message fermata.v1.AnalyzeScenarioRunRootCauseResponse.
347
392
  * Use `create(AnalyzeScenarioRunRootCauseResponseSchema)` to create a new message.
348
393
  */
349
- export const AnalyzeScenarioRunRootCauseResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 66);
394
+ export const AnalyzeScenarioRunRootCauseResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 75);
350
395
  /**
351
396
  * Describes the message fermata.v1.JudgeValidationAccuracyMetrics.
352
397
  * Use `create(JudgeValidationAccuracyMetricsSchema)` to create a new message.
353
398
  */
354
- export const JudgeValidationAccuracyMetricsSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 67);
399
+ export const JudgeValidationAccuracyMetricsSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 76);
355
400
  /**
356
401
  * Describes the message fermata.v1.JudgeValidationConfusionMatrix.
357
402
  * Use `create(JudgeValidationConfusionMatrixSchema)` to create a new message.
358
403
  */
359
- export const JudgeValidationConfusionMatrixSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 68);
404
+ export const JudgeValidationConfusionMatrixSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 77);
360
405
  /**
361
406
  * Describes the message fermata.v1.JudgeValidationBiasMetrics.
362
407
  * Use `create(JudgeValidationBiasMetricsSchema)` to create a new message.
363
408
  */
364
- export const JudgeValidationBiasMetricsSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 69);
409
+ export const JudgeValidationBiasMetricsSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 78);
365
410
  /**
366
411
  * Describes the message fermata.v1.JudgeValidationCalibration.
367
412
  * Use `create(JudgeValidationCalibrationSchema)` to create a new message.
368
413
  */
369
- export const JudgeValidationCalibrationSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 70);
414
+ export const JudgeValidationCalibrationSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 79);
370
415
  /**
371
416
  * Describes the message fermata.v1.JudgeValidationEvaluation.
372
417
  * Use `create(JudgeValidationEvaluationSchema)` to create a new message.
373
418
  */
374
- export const JudgeValidationEvaluationSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 71);
419
+ export const JudgeValidationEvaluationSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 80);
375
420
  /**
376
421
  * Describes the message fermata.v1.JudgeCalibrationCandidate.
377
422
  * Use `create(JudgeCalibrationCandidateSchema)` to create a new message.
378
423
  */
379
- export const JudgeCalibrationCandidateSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 72);
424
+ export const JudgeCalibrationCandidateSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 81);
380
425
  /**
381
426
  * Describes the message fermata.v1.GetJudgeValidationAccuracyRequest.
382
427
  * Use `create(GetJudgeValidationAccuracyRequestSchema)` to create a new message.
383
428
  */
384
- export const GetJudgeValidationAccuracyRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 73);
429
+ export const GetJudgeValidationAccuracyRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 82);
385
430
  /**
386
431
  * Describes the message fermata.v1.GetJudgeValidationAccuracyResponse.
387
432
  * Use `create(GetJudgeValidationAccuracyResponseSchema)` to create a new message.
388
433
  */
389
- export const GetJudgeValidationAccuracyResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 74);
434
+ export const GetJudgeValidationAccuracyResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 83);
390
435
  /**
391
436
  * Describes the message fermata.v1.GetJudgeValidationConfusionMatrixRequest.
392
437
  * Use `create(GetJudgeValidationConfusionMatrixRequestSchema)` to create a new message.
393
438
  */
394
- export const GetJudgeValidationConfusionMatrixRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 75);
439
+ export const GetJudgeValidationConfusionMatrixRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 84);
395
440
  /**
396
441
  * Describes the message fermata.v1.GetJudgeValidationConfusionMatrixResponse.
397
442
  * Use `create(GetJudgeValidationConfusionMatrixResponseSchema)` to create a new message.
398
443
  */
399
- export const GetJudgeValidationConfusionMatrixResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 76);
444
+ export const GetJudgeValidationConfusionMatrixResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 85);
400
445
  /**
401
446
  * Describes the message fermata.v1.GetJudgeValidationBiasRequest.
402
447
  * Use `create(GetJudgeValidationBiasRequestSchema)` to create a new message.
403
448
  */
404
- export const GetJudgeValidationBiasRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 77);
449
+ export const GetJudgeValidationBiasRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 86);
405
450
  /**
406
451
  * Describes the message fermata.v1.GetJudgeValidationBiasResponse.
407
452
  * Use `create(GetJudgeValidationBiasResponseSchema)` to create a new message.
408
453
  */
409
- export const GetJudgeValidationBiasResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 78);
454
+ export const GetJudgeValidationBiasResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 87);
410
455
  /**
411
456
  * Describes the message fermata.v1.RecalibrateJudgeValidationRequest.
412
457
  * Use `create(RecalibrateJudgeValidationRequestSchema)` to create a new message.
413
458
  */
414
- export const RecalibrateJudgeValidationRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 79);
459
+ export const RecalibrateJudgeValidationRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 88);
415
460
  /**
416
461
  * Describes the message fermata.v1.RecalibrateJudgeValidationResponse.
417
462
  * Use `create(RecalibrateJudgeValidationResponseSchema)` to create a new message.
418
463
  */
419
- export const RecalibrateJudgeValidationResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 80);
464
+ export const RecalibrateJudgeValidationResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 89);
420
465
  /**
421
466
  * Describes the message fermata.v1.RecordJudgeValidationEvaluationRequest.
422
467
  * Use `create(RecordJudgeValidationEvaluationRequestSchema)` to create a new message.
423
468
  */
424
- export const RecordJudgeValidationEvaluationRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 81);
469
+ export const RecordJudgeValidationEvaluationRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 90);
425
470
  /**
426
471
  * Describes the message fermata.v1.RecordJudgeValidationEvaluationResponse.
427
472
  * Use `create(RecordJudgeValidationEvaluationResponseSchema)` to create a new message.
428
473
  */
429
- export const RecordJudgeValidationEvaluationResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 82);
474
+ export const RecordJudgeValidationEvaluationResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 91);
430
475
  /**
431
476
  * Describes the message fermata.v1.ValidateJudgeValidationEvaluationRequest.
432
477
  * Use `create(ValidateJudgeValidationEvaluationRequestSchema)` to create a new message.
433
478
  */
434
- export const ValidateJudgeValidationEvaluationRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 83);
479
+ export const ValidateJudgeValidationEvaluationRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 92);
435
480
  /**
436
481
  * Describes the message fermata.v1.ValidateJudgeValidationEvaluationResponse.
437
482
  * Use `create(ValidateJudgeValidationEvaluationResponseSchema)` to create a new message.
438
483
  */
439
- export const ValidateJudgeValidationEvaluationResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 84);
484
+ export const ValidateJudgeValidationEvaluationResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 93);
440
485
  /**
441
486
  * Describes the message fermata.v1.ListJudgeCalibrationCandidatesRequest.
442
487
  * Use `create(ListJudgeCalibrationCandidatesRequestSchema)` to create a new message.
443
488
  */
444
- export const ListJudgeCalibrationCandidatesRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 85);
489
+ export const ListJudgeCalibrationCandidatesRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 94);
445
490
  /**
446
491
  * Describes the message fermata.v1.ListJudgeCalibrationCandidatesResponse.
447
492
  * Use `create(ListJudgeCalibrationCandidatesResponseSchema)` to create a new message.
448
493
  */
449
- export const ListJudgeCalibrationCandidatesResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 86);
494
+ export const ListJudgeCalibrationCandidatesResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 95);
450
495
  /**
451
496
  * Describes the message fermata.v1.GetMigrationStatusRequest.
452
497
  * Use `create(GetMigrationStatusRequestSchema)` to create a new message.
453
498
  */
454
- export const GetMigrationStatusRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 87);
499
+ export const GetMigrationStatusRequestSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 96);
455
500
  /**
456
501
  * Describes the message fermata.v1.RouteMigrationStatus.
457
502
  * Use `create(RouteMigrationStatusSchema)` to create a new message.
458
503
  */
459
- export const RouteMigrationStatusSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 88);
504
+ export const RouteMigrationStatusSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 97);
460
505
  /**
461
506
  * Describes the message fermata.v1.GetMigrationStatusResponse.
462
507
  * Use `create(GetMigrationStatusResponseSchema)` to create a new message.
463
508
  */
464
- export const GetMigrationStatusResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 89);
509
+ export const GetMigrationStatusResponseSchema = /*@__PURE__*/ messageDesc(file_fermata_v1_fermata, 98);
465
510
  /**
466
511
  * @generated from enum fermata.v1.AssertionKind
467
512
  */
@@ -1,5 +1,6 @@
1
- import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
2
- import type { Value } from "@bufbuild/protobuf/wkt";
1
+ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
2
+ import type { EvidenceRef } from "../../common/v1/analytics_pb.js";
3
+ import type { Duration, Value } from "@bufbuild/protobuf/wkt";
3
4
  import type { JsonObject, Message } from "@bufbuild/protobuf";
4
5
  /**
5
6
  * Describes the file llmgateway/v1/gateway.proto.
@@ -108,6 +109,162 @@ export type PromptRef = Message<"llmgateway.v1.PromptRef"> & {
108
109
  * Use `create(PromptRefSchema)` to create a new message.
109
110
  */
110
111
  export declare const PromptRefSchema: GenMessage<PromptRef>;
112
+ /**
113
+ * @generated from message llmgateway.v1.RoutingWeight
114
+ */
115
+ export type RoutingWeight = Message<"llmgateway.v1.RoutingWeight"> & {
116
+ /**
117
+ * @generated from field: string provider = 1;
118
+ */
119
+ provider: string;
120
+ /**
121
+ * @generated from field: string environment = 2;
122
+ */
123
+ environment: string;
124
+ /**
125
+ * @generated from field: string credential_name = 3;
126
+ */
127
+ credentialName: string;
128
+ /**
129
+ * @generated from field: string model = 4;
130
+ */
131
+ model: string;
132
+ /**
133
+ * @generated from field: double weight = 5;
134
+ */
135
+ weight: number;
136
+ };
137
+ /**
138
+ * Describes the message llmgateway.v1.RoutingWeight.
139
+ * Use `create(RoutingWeightSchema)` to create a new message.
140
+ */
141
+ export declare const RoutingWeightSchema: GenMessage<RoutingWeight>;
142
+ /**
143
+ * @generated from message llmgateway.v1.RoutingRecommendation
144
+ */
145
+ export type RoutingRecommendation = Message<"llmgateway.v1.RoutingRecommendation"> & {
146
+ /**
147
+ * @generated from field: string recommendation_id = 1;
148
+ */
149
+ recommendationId: string;
150
+ /**
151
+ * @generated from field: string organization_id = 2;
152
+ */
153
+ organizationId: string;
154
+ /**
155
+ * @generated from field: string workspace_id = 3;
156
+ */
157
+ workspaceId: string;
158
+ /**
159
+ * @generated from field: string recommendation_type = 4;
160
+ */
161
+ recommendationType: string;
162
+ /**
163
+ * @generated from field: string task = 5;
164
+ */
165
+ task: string;
166
+ /**
167
+ * @generated from field: llmgateway.v1.RoutingRecommendationLifecycleStage requested_stage = 6;
168
+ */
169
+ requestedStage: RoutingRecommendationLifecycleStage;
170
+ /**
171
+ * @generated from field: repeated llmgateway.v1.RoutingWeight previous_weights = 7;
172
+ */
173
+ previousWeights: RoutingWeight[];
174
+ /**
175
+ * @generated from field: repeated llmgateway.v1.RoutingWeight proposed_weights = 8;
176
+ */
177
+ proposedWeights: RoutingWeight[];
178
+ /**
179
+ * @generated from field: google.protobuf.Duration ttl = 9;
180
+ */
181
+ ttl?: Duration | undefined;
182
+ /**
183
+ * @generated from field: string validation_query = 10;
184
+ */
185
+ validationQuery: string;
186
+ /**
187
+ * @generated from field: string revert_target = 11;
188
+ */
189
+ revertTarget: string;
190
+ /**
191
+ * @generated from field: repeated common.v1.EvidenceRef evidence = 12;
192
+ */
193
+ evidence: EvidenceRef[];
194
+ /**
195
+ * @generated from field: google.protobuf.Struct metadata = 13;
196
+ */
197
+ metadata?: JsonObject | undefined;
198
+ };
199
+ /**
200
+ * Describes the message llmgateway.v1.RoutingRecommendation.
201
+ * Use `create(RoutingRecommendationSchema)` to create a new message.
202
+ */
203
+ export declare const RoutingRecommendationSchema: GenMessage<RoutingRecommendation>;
204
+ /**
205
+ * @generated from message llmgateway.v1.ReviewRoutingRecommendationRequest
206
+ */
207
+ export type ReviewRoutingRecommendationRequest = Message<"llmgateway.v1.ReviewRoutingRecommendationRequest"> & {
208
+ /**
209
+ * @generated from field: llmgateway.v1.RoutingRecommendation recommendation = 1;
210
+ */
211
+ recommendation?: RoutingRecommendation | undefined;
212
+ };
213
+ /**
214
+ * Describes the message llmgateway.v1.ReviewRoutingRecommendationRequest.
215
+ * Use `create(ReviewRoutingRecommendationRequestSchema)` to create a new message.
216
+ */
217
+ export declare const ReviewRoutingRecommendationRequestSchema: GenMessage<ReviewRoutingRecommendationRequest>;
218
+ /**
219
+ * @generated from message llmgateway.v1.ReviewRoutingRecommendationResponse
220
+ */
221
+ export type ReviewRoutingRecommendationResponse = Message<"llmgateway.v1.ReviewRoutingRecommendationResponse"> & {
222
+ /**
223
+ * @generated from field: string recommendation_id = 1;
224
+ */
225
+ recommendationId: string;
226
+ /**
227
+ * @generated from field: bool accepted_for_review = 2;
228
+ */
229
+ acceptedForReview: boolean;
230
+ /**
231
+ * @generated from field: llmgateway.v1.RoutingRecommendationLifecycleStage current_stage = 3;
232
+ */
233
+ currentStage: RoutingRecommendationLifecycleStage;
234
+ /**
235
+ * @generated from field: bool manual_review_required = 4;
236
+ */
237
+ manualReviewRequired: boolean;
238
+ /**
239
+ * @generated from field: bool canary_apply_allowed = 5;
240
+ */
241
+ canaryApplyAllowed: boolean;
242
+ /**
243
+ * @generated from field: bool auto_apply_allowed = 6;
244
+ */
245
+ autoApplyAllowed: boolean;
246
+ /**
247
+ * @generated from field: bool routing_change_applied = 7;
248
+ */
249
+ routingChangeApplied: boolean;
250
+ /**
251
+ * @generated from field: repeated string rejection_reasons = 8;
252
+ */
253
+ rejectionReasons: string[];
254
+ /**
255
+ * @generated from field: repeated string warnings = 9;
256
+ */
257
+ warnings: string[];
258
+ /**
259
+ * @generated from field: double max_weight_delta = 10;
260
+ */
261
+ maxWeightDelta: number;
262
+ };
263
+ /**
264
+ * Describes the message llmgateway.v1.ReviewRoutingRecommendationResponse.
265
+ * Use `create(ReviewRoutingRecommendationResponseSchema)` to create a new message.
266
+ */
267
+ export declare const ReviewRoutingRecommendationResponseSchema: GenMessage<ReviewRoutingRecommendationResponse>;
111
268
  /**
112
269
  * @generated from message llmgateway.v1.ChatMessage
113
270
  */
@@ -346,6 +503,35 @@ export type CreateEmbeddingResponse = Message<"llmgateway.v1.CreateEmbeddingResp
346
503
  * Use `create(CreateEmbeddingResponseSchema)` to create a new message.
347
504
  */
348
505
  export declare const CreateEmbeddingResponseSchema: GenMessage<CreateEmbeddingResponse>;
506
+ /**
507
+ * @generated from enum llmgateway.v1.RoutingRecommendationLifecycleStage
508
+ */
509
+ export declare enum RoutingRecommendationLifecycleStage {
510
+ /**
511
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_UNSPECIFIED = 0;
512
+ */
513
+ UNSPECIFIED = 0,
514
+ /**
515
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_NOTIFY = 1;
516
+ */
517
+ NOTIFY = 1,
518
+ /**
519
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_SUGGEST = 2;
520
+ */
521
+ SUGGEST = 2,
522
+ /**
523
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_CANARY = 3;
524
+ */
525
+ CANARY = 3,
526
+ /**
527
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_AUTO_APPLY = 4;
528
+ */
529
+ AUTO_APPLY = 4
530
+ }
531
+ /**
532
+ * Describes the enum llmgateway.v1.RoutingRecommendationLifecycleStage.
533
+ */
534
+ export declare const RoutingRecommendationLifecycleStageSchema: GenEnum<RoutingRecommendationLifecycleStage>;
349
535
  /**
350
536
  * @generated from service llmgateway.v1.GatewayService
351
537
  */
@@ -358,6 +544,14 @@ export declare const GatewayService: GenService<{
358
544
  input: typeof GetInfoRequestSchema;
359
545
  output: typeof GetInfoResponseSchema;
360
546
  };
547
+ /**
548
+ * @generated from rpc llmgateway.v1.GatewayService.ReviewRoutingRecommendation
549
+ */
550
+ reviewRoutingRecommendation: {
551
+ methodKind: "unary";
552
+ input: typeof ReviewRoutingRecommendationRequestSchema;
553
+ output: typeof ReviewRoutingRecommendationResponseSchema;
554
+ };
361
555
  /**
362
556
  * @generated from rpc llmgateway.v1.GatewayService.CreateMessage
363
557
  */
@@ -1,13 +1,14 @@
1
1
  // @generated by protoc-gen-es v2.12.0 with parameter "target=ts,import_extension=.js"
2
2
  // @generated from file llmgateway/v1/gateway.proto (package llmgateway.v1, syntax proto3)
3
3
  /* eslint-disable */
4
- import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
4
+ import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
5
5
  import { file_buf_validate_validate } from "../../buf/validate/validate_pb.js";
6
- import { file_google_protobuf_struct } from "@bufbuild/protobuf/wkt";
6
+ import { file_common_v1_analytics } from "../../common/v1/analytics_pb.js";
7
+ import { file_google_protobuf_duration, file_google_protobuf_struct } from "@bufbuild/protobuf/wkt";
7
8
  /**
8
9
  * Describes the file llmgateway/v1/gateway.proto.
9
10
  */
10
- export const file_llmgateway_v1_gateway = /*@__PURE__*/ fileDesc("ChtsbG1nYXRld2F5L3YxL2dhdGV3YXkucHJvdG8SDWxsbWdhdGV3YXkudjEiEAoOR2V0SW5mb1JlcXVlc3Qi4gEKD0dldEluZm9SZXNwb25zZRIPCgdzZXJ2aWNlGAEgASgJEg8KB3ZlcnNpb24YAiABKAkSEgoKYXV0aF9tb2RlcxgDIAMoCRIYChByZXF1aXJlZF9oZWFkZXJzGAQgAygJEhcKD3JlcXVpcmVkX3Njb3BlcxgFIAMoCRIVCg1yZXNlcnZlZF9hcGlzGAYgAygJEhYKDmlkZW50aXR5X3BsYW5lGAcgASgJEhgKEGNyZWRlbnRpYWxzX21vZGUYCCABKAkSHQoVcHJvdmlkZXJfcmVmX2NvbnRyYWN0GAkgASgJInAKC1Byb3ZpZGVyUmVmEhkKCHByb3ZpZGVyGAEgASgJQge6SARyAhABEhwKC2Vudmlyb25tZW50GAIgASgJQge6SARyAhABEhcKD2NyZWRlbnRpYWxfbmFtZRgDIAEoCRIPCgd0ZWFtX2lkGAQgASgJIkAKCVByb21wdFJlZhIVCgRuYW1lGAEgASgJQge6SARyAhABEg8KB3N1cmZhY2UYAiABKAkSCwoDZW52GAMgASgJIokBCgtDaGF0TWVzc2FnZRIVCgRyb2xlGAEgASgJQge6SARyAhABEi8KB2NvbnRlbnQYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVCBrpIA8gBARIyChFhZGRpdGlvbmFsX2ZpZWxkcxgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi0QIKFENyZWF0ZU1lc3NhZ2VSZXF1ZXN0EhYKBW1vZGVsGAEgASgJQge6SARyAhABEjYKCG1lc3NhZ2VzGAIgAygLMhoubGxtZ2F0ZXdheS52MS5DaGF0TWVzc2FnZUIIukgFkgECCAESOAoMcHJvdmlkZXJfcmVmGAMgASgLMhoubGxtZ2F0ZXdheS52MS5Qcm92aWRlclJlZkIGukgDyAEBEg4KBnN0cmVhbRgEIAEoCBIpCghtZXRhZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSMgoRYWRkaXRpb25hbF9maWVsZHMYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EiwKCnByb21wdF9yZWYYByABKAsyGC5sbG1nYXRld2F5LnYxLlByb21wdFJlZhISCgpsaW5lYWdlX2lkGAggASgJIskCChVDcmVhdGVSZXNwb25zZVJlcXVlc3QSFgoFbW9kZWwYASABKAlCB7pIBHICEAESLQoFaW5wdXQYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVCBrpIA8gBARI4Cgxwcm92aWRlcl9yZWYYAyABKAsyGi5sbG1nYXRld2F5LnYxLlByb3ZpZGVyUmVmQga6SAPIAQESDgoGc3RyZWFtGAQgASgIEikKCG1ldGFkYXRhGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIyChFhZGRpdGlvbmFsX2ZpZWxkcxgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLAoKcHJvbXB0X3JlZhgHIAEoCzIYLmxsbWdhdGV3YXkudjEuUHJvbXB0UmVmEhIKCmxpbmVhZ2VfaWQYCCABKAki2AIKG0NyZWF0ZUNoYXRDb21wbGV0aW9uUmVxdWVzdBIWCgVtb2RlbBgBIAEoCUIHukgEcgIQARI2CghtZXNzYWdlcxgCIAMoCzIaLmxsbWdhdGV3YXkudjEuQ2hhdE1lc3NhZ2VCCLpIBZIBAggBEjgKDHByb3ZpZGVyX3JlZhgDIAEoCzIaLmxsbWdhdGV3YXkudjEuUHJvdmlkZXJSZWZCBrpIA8gBARIOCgZzdHJlYW0YBCABKAgSKQoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjIKEWFkZGl0aW9uYWxfZmllbGRzGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIsCgpwcm9tcHRfcmVmGAcgASgLMhgubGxtZ2F0ZXdheS52MS5Qcm9tcHRSZWYSEgoKbGluZWFnZV9pZBgIIAEoCSKMAgoWQ3JlYXRlRW1iZWRkaW5nUmVxdWVzdBIWCgVtb2RlbBgBIAEoCUIHukgEcgIQARItCgVpbnB1dBgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUIGukgDyAEBEjgKDHByb3ZpZGVyX3JlZhgDIAEoCzIaLmxsbWdhdGV3YXkudjEuUHJvdmlkZXJSZWZCBrpIA8gBARIpCghtZXRhZGF0YRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSMgoRYWRkaXRpb25hbF9maWVsZHMYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhIKCmxpbmVhZ2VfaWQYBiABKAkiQAoVQ3JlYXRlTWVzc2FnZVJlc3BvbnNlEicKB3BheWxvYWQYASABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUiQQoWQ3JlYXRlUmVzcG9uc2VSZXNwb25zZRInCgdwYXlsb2FkGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlIkcKHENyZWF0ZUNoYXRDb21wbGV0aW9uUmVzcG9uc2USJwoHcGF5bG9hZBgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSJCChdDcmVhdGVFbWJlZGRpbmdSZXNwb25zZRInCgdwYXlsb2FkGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlMugDCg5HYXRld2F5U2VydmljZRJICgdHZXRJbmZvEh0ubGxtZ2F0ZXdheS52MS5HZXRJbmZvUmVxdWVzdBoeLmxsbWdhdGV3YXkudjEuR2V0SW5mb1Jlc3BvbnNlEloKDUNyZWF0ZU1lc3NhZ2USIy5sbG1nYXRld2F5LnYxLkNyZWF0ZU1lc3NhZ2VSZXF1ZXN0GiQubGxtZ2F0ZXdheS52MS5DcmVhdGVNZXNzYWdlUmVzcG9uc2USXQoOQ3JlYXRlUmVzcG9uc2USJC5sbG1nYXRld2F5LnYxLkNyZWF0ZVJlc3BvbnNlUmVxdWVzdBolLmxsbWdhdGV3YXkudjEuQ3JlYXRlUmVzcG9uc2VSZXNwb25zZRJvChRDcmVhdGVDaGF0Q29tcGxldGlvbhIqLmxsbWdhdGV3YXkudjEuQ3JlYXRlQ2hhdENvbXBsZXRpb25SZXF1ZXN0GisubGxtZ2F0ZXdheS52MS5DcmVhdGVDaGF0Q29tcGxldGlvblJlc3BvbnNlEmAKD0NyZWF0ZUVtYmVkZGluZxIlLmxsbWdhdGV3YXkudjEuQ3JlYXRlRW1iZWRkaW5nUmVxdWVzdBomLmxsbWdhdGV3YXkudjEuQ3JlYXRlRW1iZWRkaW5nUmVzcG9uc2VCP1o9Z2l0aHViLmNvbS9ldmFsb3BzL3BsYXRmb3JtL2dlbi9nby9sbG1nYXRld2F5L3YxO2xsbWdhdGV3YXl2MWIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_struct]);
11
+ export const file_llmgateway_v1_gateway = /*@__PURE__*/ fileDesc("ChtsbG1nYXRld2F5L3YxL2dhdGV3YXkucHJvdG8SDWxsbWdhdGV3YXkudjEiEAoOR2V0SW5mb1JlcXVlc3Qi4gEKD0dldEluZm9SZXNwb25zZRIPCgdzZXJ2aWNlGAEgASgJEg8KB3ZlcnNpb24YAiABKAkSEgoKYXV0aF9tb2RlcxgDIAMoCRIYChByZXF1aXJlZF9oZWFkZXJzGAQgAygJEhcKD3JlcXVpcmVkX3Njb3BlcxgFIAMoCRIVCg1yZXNlcnZlZF9hcGlzGAYgAygJEhYKDmlkZW50aXR5X3BsYW5lGAcgASgJEhgKEGNyZWRlbnRpYWxzX21vZGUYCCABKAkSHQoVcHJvdmlkZXJfcmVmX2NvbnRyYWN0GAkgASgJInAKC1Byb3ZpZGVyUmVmEhkKCHByb3ZpZGVyGAEgASgJQge6SARyAhABEhwKC2Vudmlyb25tZW50GAIgASgJQge6SARyAhABEhcKD2NyZWRlbnRpYWxfbmFtZRgDIAEoCRIPCgd0ZWFtX2lkGAQgASgJIkAKCVByb21wdFJlZhIVCgRuYW1lGAEgASgJQge6SARyAhABEg8KB3N1cmZhY2UYAiABKAkSCwoDZW52GAMgASgJIpkBCg1Sb3V0aW5nV2VpZ2h0EhkKCHByb3ZpZGVyGAEgASgJQge6SARyAhABEhMKC2Vudmlyb25tZW50GAIgASgJEhcKD2NyZWRlbnRpYWxfbmFtZRgDIAEoCRIWCgVtb2RlbBgEIAEoCUIHukgEcgIQARInCgZ3ZWlnaHQYBSABKAFCF7pIFBISGQAAAAAAAPA/KQAAAAAAAAAAItMEChVSb3V0aW5nUmVjb21tZW5kYXRpb24SIgoRcmVjb21tZW5kYXRpb25faWQYASABKAlCB7pIBHICEAESFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEh0KDHdvcmtzcGFjZV9pZBgDIAEoCUIHukgEcgIQARIkChNyZWNvbW1lbmRhdGlvbl90eXBlGAQgASgJQge6SARyAhABEhUKBHRhc2sYBSABKAlCB7pIBHICEAESSwoPcmVxdWVzdGVkX3N0YWdlGAYgASgOMjIubGxtZ2F0ZXdheS52MS5Sb3V0aW5nUmVjb21tZW5kYXRpb25MaWZlY3ljbGVTdGFnZRJAChBwcmV2aW91c193ZWlnaHRzGAcgAygLMhwubGxtZ2F0ZXdheS52MS5Sb3V0aW5nV2VpZ2h0Qgi6SAWSAQIIARJAChBwcm9wb3NlZF93ZWlnaHRzGAggAygLMhwubGxtZ2F0ZXdheS52MS5Sb3V0aW5nV2VpZ2h0Qgi6SAWSAQIIARIuCgN0dGwYCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CBrpIA8gBARIhChB2YWxpZGF0aW9uX3F1ZXJ5GAogASgJQge6SARyAhABEh4KDXJldmVydF90YXJnZXQYCyABKAlCB7pIBHICEAESMgoIZXZpZGVuY2UYDCADKAsyFi5jb21tb24udjEuRXZpZGVuY2VSZWZCCLpIBZIBAggBEikKCG1ldGFkYXRhGA0gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCJqCiJSZXZpZXdSb3V0aW5nUmVjb21tZW5kYXRpb25SZXF1ZXN0EkQKDnJlY29tbWVuZGF0aW9uGAEgASgLMiQubGxtZ2F0ZXdheS52MS5Sb3V0aW5nUmVjb21tZW5kYXRpb25CBrpIA8gBASLpAgojUmV2aWV3Um91dGluZ1JlY29tbWVuZGF0aW9uUmVzcG9uc2USGQoRcmVjb21tZW5kYXRpb25faWQYASABKAkSGwoTYWNjZXB0ZWRfZm9yX3JldmlldxgCIAEoCBJJCg1jdXJyZW50X3N0YWdlGAMgASgOMjIubGxtZ2F0ZXdheS52MS5Sb3V0aW5nUmVjb21tZW5kYXRpb25MaWZlY3ljbGVTdGFnZRIeChZtYW51YWxfcmV2aWV3X3JlcXVpcmVkGAQgASgIEhwKFGNhbmFyeV9hcHBseV9hbGxvd2VkGAUgASgIEhoKEmF1dG9fYXBwbHlfYWxsb3dlZBgGIAEoCBIeChZyb3V0aW5nX2NoYW5nZV9hcHBsaWVkGAcgASgIEhkKEXJlamVjdGlvbl9yZWFzb25zGAggAygJEhAKCHdhcm5pbmdzGAkgAygJEhgKEG1heF93ZWlnaHRfZGVsdGEYCiABKAEiiQEKC0NoYXRNZXNzYWdlEhUKBHJvbGUYASABKAlCB7pIBHICEAESLwoHY29udGVudBgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUIGukgDyAEBEjIKEWFkZGl0aW9uYWxfZmllbGRzGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCLRAgoUQ3JlYXRlTWVzc2FnZVJlcXVlc3QSFgoFbW9kZWwYASABKAlCB7pIBHICEAESNgoIbWVzc2FnZXMYAiADKAsyGi5sbG1nYXRld2F5LnYxLkNoYXRNZXNzYWdlQgi6SAWSAQIIARI4Cgxwcm92aWRlcl9yZWYYAyABKAsyGi5sbG1nYXRld2F5LnYxLlByb3ZpZGVyUmVmQga6SAPIAQESDgoGc3RyZWFtGAQgASgIEikKCG1ldGFkYXRhGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIyChFhZGRpdGlvbmFsX2ZpZWxkcxgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSLAoKcHJvbXB0X3JlZhgHIAEoCzIYLmxsbWdhdGV3YXkudjEuUHJvbXB0UmVmEhIKCmxpbmVhZ2VfaWQYCCABKAkiyQIKFUNyZWF0ZVJlc3BvbnNlUmVxdWVzdBIWCgVtb2RlbBgBIAEoCUIHukgEcgIQARItCgVpbnB1dBgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUIGukgDyAEBEjgKDHByb3ZpZGVyX3JlZhgDIAEoCzIaLmxsbWdhdGV3YXkudjEuUHJvdmlkZXJSZWZCBrpIA8gBARIOCgZzdHJlYW0YBCABKAgSKQoIbWV0YWRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjIKEWFkZGl0aW9uYWxfZmllbGRzGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIsCgpwcm9tcHRfcmVmGAcgASgLMhgubGxtZ2F0ZXdheS52MS5Qcm9tcHRSZWYSEgoKbGluZWFnZV9pZBgIIAEoCSLYAgobQ3JlYXRlQ2hhdENvbXBsZXRpb25SZXF1ZXN0EhYKBW1vZGVsGAEgASgJQge6SARyAhABEjYKCG1lc3NhZ2VzGAIgAygLMhoubGxtZ2F0ZXdheS52MS5DaGF0TWVzc2FnZUIIukgFkgECCAESOAoMcHJvdmlkZXJfcmVmGAMgASgLMhoubGxtZ2F0ZXdheS52MS5Qcm92aWRlclJlZkIGukgDyAEBEg4KBnN0cmVhbRgEIAEoCBIpCghtZXRhZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSMgoRYWRkaXRpb25hbF9maWVsZHMYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EiwKCnByb21wdF9yZWYYByABKAsyGC5sbG1nYXRld2F5LnYxLlByb21wdFJlZhISCgpsaW5lYWdlX2lkGAggASgJIowCChZDcmVhdGVFbWJlZGRpbmdSZXF1ZXN0EhYKBW1vZGVsGAEgASgJQge6SARyAhABEi0KBWlucHV0GAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlQga6SAPIAQESOAoMcHJvdmlkZXJfcmVmGAMgASgLMhoubGxtZ2F0ZXdheS52MS5Qcm92aWRlclJlZkIGukgDyAEBEikKCG1ldGFkYXRhGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIyChFhZGRpdGlvbmFsX2ZpZWxkcxgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSEgoKbGluZWFnZV9pZBgGIAEoCSJAChVDcmVhdGVNZXNzYWdlUmVzcG9uc2USJwoHcGF5bG9hZBgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSJBChZDcmVhdGVSZXNwb25zZVJlc3BvbnNlEicKB3BheWxvYWQYASABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUiRwocQ3JlYXRlQ2hhdENvbXBsZXRpb25SZXNwb25zZRInCgdwYXlsb2FkGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlIkIKF0NyZWF0ZUVtYmVkZGluZ1Jlc3BvbnNlEicKB3BheWxvYWQYASABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUqrgIKI1JvdXRpbmdSZWNvbW1lbmRhdGlvbkxpZmVjeWNsZVN0YWdlEjYKMlJPVVRJTkdfUkVDT01NRU5EQVRJT05fTElGRUNZQ0xFX1NUQUdFX1VOU1BFQ0lGSUVEEAASMQotUk9VVElOR19SRUNPTU1FTkRBVElPTl9MSUZFQ1lDTEVfU1RBR0VfTk9USUZZEAESMgouUk9VVElOR19SRUNPTU1FTkRBVElPTl9MSUZFQ1lDTEVfU1RBR0VfU1VHR0VTVBACEjEKLVJPVVRJTkdfUkVDT01NRU5EQVRJT05fTElGRUNZQ0xFX1NUQUdFX0NBTkFSWRADEjUKMVJPVVRJTkdfUkVDT01NRU5EQVRJT05fTElGRUNZQ0xFX1NUQUdFX0FVVE9fQVBQTFkQBDLvBAoOR2F0ZXdheVNlcnZpY2USSAoHR2V0SW5mbxIdLmxsbWdhdGV3YXkudjEuR2V0SW5mb1JlcXVlc3QaHi5sbG1nYXRld2F5LnYxLkdldEluZm9SZXNwb25zZRKEAQobUmV2aWV3Um91dGluZ1JlY29tbWVuZGF0aW9uEjEubGxtZ2F0ZXdheS52MS5SZXZpZXdSb3V0aW5nUmVjb21tZW5kYXRpb25SZXF1ZXN0GjIubGxtZ2F0ZXdheS52MS5SZXZpZXdSb3V0aW5nUmVjb21tZW5kYXRpb25SZXNwb25zZRJaCg1DcmVhdGVNZXNzYWdlEiMubGxtZ2F0ZXdheS52MS5DcmVhdGVNZXNzYWdlUmVxdWVzdBokLmxsbWdhdGV3YXkudjEuQ3JlYXRlTWVzc2FnZVJlc3BvbnNlEl0KDkNyZWF0ZVJlc3BvbnNlEiQubGxtZ2F0ZXdheS52MS5DcmVhdGVSZXNwb25zZVJlcXVlc3QaJS5sbG1nYXRld2F5LnYxLkNyZWF0ZVJlc3BvbnNlUmVzcG9uc2USbwoUQ3JlYXRlQ2hhdENvbXBsZXRpb24SKi5sbG1nYXRld2F5LnYxLkNyZWF0ZUNoYXRDb21wbGV0aW9uUmVxdWVzdBorLmxsbWdhdGV3YXkudjEuQ3JlYXRlQ2hhdENvbXBsZXRpb25SZXNwb25zZRJgCg9DcmVhdGVFbWJlZGRpbmcSJS5sbG1nYXRld2F5LnYxLkNyZWF0ZUVtYmVkZGluZ1JlcXVlc3QaJi5sbG1nYXRld2F5LnYxLkNyZWF0ZUVtYmVkZGluZ1Jlc3BvbnNlQj9aPWdpdGh1Yi5jb20vZXZhbG9wcy9wbGF0Zm9ybS9nZW4vZ28vbGxtZ2F0ZXdheS92MTtsbG1nYXRld2F5djFiBnByb3RvMw", [file_buf_validate_validate, file_common_v1_analytics, file_google_protobuf_duration, file_google_protobuf_struct]);
11
12
  /**
12
13
  * Describes the message llmgateway.v1.GetInfoRequest.
13
14
  * Use `create(GetInfoRequestSchema)` to create a new message.
@@ -28,51 +29,101 @@ export const ProviderRefSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_ga
28
29
  * Use `create(PromptRefSchema)` to create a new message.
29
30
  */
30
31
  export const PromptRefSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 3);
32
+ /**
33
+ * Describes the message llmgateway.v1.RoutingWeight.
34
+ * Use `create(RoutingWeightSchema)` to create a new message.
35
+ */
36
+ export const RoutingWeightSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 4);
37
+ /**
38
+ * Describes the message llmgateway.v1.RoutingRecommendation.
39
+ * Use `create(RoutingRecommendationSchema)` to create a new message.
40
+ */
41
+ export const RoutingRecommendationSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 5);
42
+ /**
43
+ * Describes the message llmgateway.v1.ReviewRoutingRecommendationRequest.
44
+ * Use `create(ReviewRoutingRecommendationRequestSchema)` to create a new message.
45
+ */
46
+ export const ReviewRoutingRecommendationRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 6);
47
+ /**
48
+ * Describes the message llmgateway.v1.ReviewRoutingRecommendationResponse.
49
+ * Use `create(ReviewRoutingRecommendationResponseSchema)` to create a new message.
50
+ */
51
+ export const ReviewRoutingRecommendationResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 7);
31
52
  /**
32
53
  * Describes the message llmgateway.v1.ChatMessage.
33
54
  * Use `create(ChatMessageSchema)` to create a new message.
34
55
  */
35
- export const ChatMessageSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 4);
56
+ export const ChatMessageSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 8);
36
57
  /**
37
58
  * Describes the message llmgateway.v1.CreateMessageRequest.
38
59
  * Use `create(CreateMessageRequestSchema)` to create a new message.
39
60
  */
40
- export const CreateMessageRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 5);
61
+ export const CreateMessageRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 9);
41
62
  /**
42
63
  * Describes the message llmgateway.v1.CreateResponseRequest.
43
64
  * Use `create(CreateResponseRequestSchema)` to create a new message.
44
65
  */
45
- export const CreateResponseRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 6);
66
+ export const CreateResponseRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 10);
46
67
  /**
47
68
  * Describes the message llmgateway.v1.CreateChatCompletionRequest.
48
69
  * Use `create(CreateChatCompletionRequestSchema)` to create a new message.
49
70
  */
50
- export const CreateChatCompletionRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 7);
71
+ export const CreateChatCompletionRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 11);
51
72
  /**
52
73
  * Describes the message llmgateway.v1.CreateEmbeddingRequest.
53
74
  * Use `create(CreateEmbeddingRequestSchema)` to create a new message.
54
75
  */
55
- export const CreateEmbeddingRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 8);
76
+ export const CreateEmbeddingRequestSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 12);
56
77
  /**
57
78
  * Describes the message llmgateway.v1.CreateMessageResponse.
58
79
  * Use `create(CreateMessageResponseSchema)` to create a new message.
59
80
  */
60
- export const CreateMessageResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 9);
81
+ export const CreateMessageResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 13);
61
82
  /**
62
83
  * Describes the message llmgateway.v1.CreateResponseResponse.
63
84
  * Use `create(CreateResponseResponseSchema)` to create a new message.
64
85
  */
65
- export const CreateResponseResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 10);
86
+ export const CreateResponseResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 14);
66
87
  /**
67
88
  * Describes the message llmgateway.v1.CreateChatCompletionResponse.
68
89
  * Use `create(CreateChatCompletionResponseSchema)` to create a new message.
69
90
  */
70
- export const CreateChatCompletionResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 11);
91
+ export const CreateChatCompletionResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 15);
71
92
  /**
72
93
  * Describes the message llmgateway.v1.CreateEmbeddingResponse.
73
94
  * Use `create(CreateEmbeddingResponseSchema)` to create a new message.
74
95
  */
75
- export const CreateEmbeddingResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 12);
96
+ export const CreateEmbeddingResponseSchema = /*@__PURE__*/ messageDesc(file_llmgateway_v1_gateway, 16);
97
+ /**
98
+ * @generated from enum llmgateway.v1.RoutingRecommendationLifecycleStage
99
+ */
100
+ export var RoutingRecommendationLifecycleStage;
101
+ (function (RoutingRecommendationLifecycleStage) {
102
+ /**
103
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_UNSPECIFIED = 0;
104
+ */
105
+ RoutingRecommendationLifecycleStage[RoutingRecommendationLifecycleStage["UNSPECIFIED"] = 0] = "UNSPECIFIED";
106
+ /**
107
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_NOTIFY = 1;
108
+ */
109
+ RoutingRecommendationLifecycleStage[RoutingRecommendationLifecycleStage["NOTIFY"] = 1] = "NOTIFY";
110
+ /**
111
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_SUGGEST = 2;
112
+ */
113
+ RoutingRecommendationLifecycleStage[RoutingRecommendationLifecycleStage["SUGGEST"] = 2] = "SUGGEST";
114
+ /**
115
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_CANARY = 3;
116
+ */
117
+ RoutingRecommendationLifecycleStage[RoutingRecommendationLifecycleStage["CANARY"] = 3] = "CANARY";
118
+ /**
119
+ * @generated from enum value: ROUTING_RECOMMENDATION_LIFECYCLE_STAGE_AUTO_APPLY = 4;
120
+ */
121
+ RoutingRecommendationLifecycleStage[RoutingRecommendationLifecycleStage["AUTO_APPLY"] = 4] = "AUTO_APPLY";
122
+ })(RoutingRecommendationLifecycleStage || (RoutingRecommendationLifecycleStage = {}));
123
+ /**
124
+ * Describes the enum llmgateway.v1.RoutingRecommendationLifecycleStage.
125
+ */
126
+ export const RoutingRecommendationLifecycleStageSchema = /*@__PURE__*/ enumDesc(file_llmgateway_v1_gateway, 0);
76
127
  /**
77
128
  * @generated from service llmgateway.v1.GatewayService
78
129
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evalops/sdk-ts",
3
- "version": "0.1.66",
3
+ "version": "0.1.68",
4
4
  "description": "Generated TypeScript SDK protobuf types for EvalOps public APIs",
5
5
  "type": "module",
6
6
  "sideEffects": false,