@growsober/sdk 1.0.0 → 1.0.1

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.
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Type extraction utilities for OpenAPI-generated types
2
+ * GrowSober SDK Types
3
3
  *
4
- * This file provides type-safe helpers to extract request/response types
5
- * from the @growsober/types package.
4
+ * All types are derived from the @growsober/types package which is auto-generated
5
+ * from the API OpenAPI specification. This ensures single source of truth from Prisma.
6
6
  */
7
7
  import type { paths, components } from '@growsober/types';
8
8
  /**
@@ -49,6 +49,9 @@ export type LoginRequest = components['schemas']['LoginDto'];
49
49
  export type RefreshTokenRequest = components['schemas']['RefreshTokenDto'];
50
50
  export type TokenResponse = components['schemas']['TokenResponseDto'];
51
51
  export type FirebaseAuthRequest = components['schemas']['FirebaseAuthDto'];
52
+ export type SendOtpRequest = components['schemas']['SendOtpDto'];
53
+ export type OtpSentResponse = components['schemas']['OtpSentResponseDto'];
54
+ export type VerifyOtpRequest = components['schemas']['VerifyOtpDto'];
52
55
  export type UserResponse = components['schemas']['UserResponseDto'];
53
56
  export type UserPublicResponse = components['schemas']['UserPublicResponseDto'];
54
57
  export type CreateUserRequest = components['schemas']['CreateUserDto'];
@@ -56,15 +59,6 @@ export type UpdateUserRequest = components['schemas']['UpdateUserDto'];
56
59
  export type HubResponse = components['schemas']['HubResponseDto'];
57
60
  export type CreateHubRequest = components['schemas']['CreateHubDto'];
58
61
  export type UpdateHubRequest = components['schemas']['UpdateHubDto'];
59
- export interface HubMemberResponse {
60
- id: string;
61
- hubId: string;
62
- userId: string;
63
- role: 'MEMBER' | 'MODERATOR' | 'ADMIN' | 'OWNER';
64
- status: 'PENDING' | 'APPROVED' | 'REJECTED';
65
- joinedAt: string;
66
- user?: UserPublicResponse;
67
- }
68
62
  export type EventResponse = components['schemas']['EventResponseDto'];
69
63
  export type CreateEventRequest = components['schemas']['CreateEventDto'];
70
64
  export type UpdateEventRequest = components['schemas']['UpdateEventDto'];
@@ -80,385 +74,61 @@ export type SubscriptionResponse = components['schemas']['SubscriptionResponseDt
80
74
  export type CreateCheckoutRequest = components['schemas']['CreateCheckoutDto'];
81
75
  export type NotificationResponse = components['schemas']['NotificationResponseDto'];
82
76
  export type RegisterDeviceTokenRequest = components['schemas']['RegisterDeviceDto'];
83
- export interface DailyCheckInResponse {
84
- id: string;
85
- userId: string;
86
- date: string;
87
- mood: number | null;
88
- energy: number | null;
89
- stayedSober: boolean | null;
90
- triggers: string[];
91
- copingUsed: string[];
92
- notes: string | null;
93
- gratitude: string[];
94
- createdAt: string;
95
- updatedAt: string;
96
- }
97
- export interface CreateCheckInRequest {
98
- date: string;
99
- mood?: number;
100
- energy?: number;
101
- stayedSober?: boolean;
102
- triggers?: string[];
103
- copingUsed?: string[];
104
- notes?: string;
105
- gratitude?: string[];
106
- }
107
- export interface UpdateCheckInRequest {
108
- mood?: number;
109
- energy?: number;
110
- stayedSober?: boolean;
111
- triggers?: string[];
112
- copingUsed?: string[];
113
- notes?: string;
114
- gratitude?: string[];
115
- }
116
- export interface CheckInStreakResponse {
117
- currentStreak: number;
118
- longestStreak: number;
119
- totalCheckIns: number;
120
- }
121
- export interface MoodLogResponse {
122
- id: string;
123
- userId: string;
124
- mood: number;
125
- notes?: string;
126
- triggers?: string[];
127
- createdAt: string;
128
- }
129
- export interface CreateMoodLogRequest {
130
- mood: number;
131
- notes?: string;
132
- triggers?: string[];
133
- }
134
- export interface WinResponse {
135
- id: string;
136
- userId: string;
137
- title: string;
138
- description?: string;
139
- category: string;
140
- imageUrl?: string;
141
- createdAt: string;
142
- }
143
- export interface CreateWinRequest {
144
- title: string;
145
- description?: string;
146
- category: string;
147
- imageUrl?: string;
148
- }
149
- export interface HabitResponse {
150
- id: string;
151
- userId: string;
152
- name: string;
153
- description?: string;
154
- icon?: string;
155
- color?: string;
156
- frequency: string;
157
- targetDays: number[];
158
- targetCount: number;
159
- currentStreak: number;
160
- longestStreak: number;
161
- totalCompletions: number;
162
- isActive: boolean;
163
- isPaused: boolean;
164
- reminderTime?: string;
165
- createdAt: string;
166
- updatedAt: string;
167
- }
168
- export interface CreateHabitRequest {
169
- name: string;
170
- description?: string;
171
- icon?: string;
172
- color?: string;
173
- frequency: string;
174
- targetDays?: number[];
175
- targetCount?: number;
176
- reminderTime?: string;
177
- }
178
- export interface UpdateHabitRequest {
179
- name?: string;
180
- description?: string;
181
- icon?: string;
182
- color?: string;
183
- frequency?: string;
184
- targetDays?: number[];
185
- targetCount?: number;
186
- isActive?: boolean;
187
- isPaused?: boolean;
188
- reminderTime?: string;
189
- }
190
- export interface ReflectionResponse {
191
- id: string;
192
- userId: string;
193
- prompt: string;
194
- content: string;
195
- mood?: number;
196
- createdAt: string;
197
- }
198
- export interface CreateReflectionRequest {
199
- prompt: string;
200
- content: string;
201
- mood?: number;
202
- }
203
- export interface UserStreakResponse {
204
- id: string;
205
- userId: string;
206
- type: string;
207
- currentStreak: number;
208
- longestStreak: number;
209
- totalCheckIns: number;
210
- lastActivityDate: string;
211
- }
212
- export interface BadgeResponse {
213
- id: string;
214
- appId: string;
215
- name: string;
216
- description?: string;
217
- iconUrl?: string;
218
- type: string;
219
- threshold?: number;
220
- isSecret: boolean;
221
- isActive: boolean;
222
- sortOrder: number;
223
- createdAt: string;
224
- }
225
- export interface UserBadgeResponse {
226
- id: string;
227
- userId: string;
228
- badgeId: string;
229
- awardedAt: string;
230
- badge?: BadgeResponse;
231
- }
232
- export interface MapUserResponse {
233
- id: string;
234
- name: string;
235
- avatar?: string;
236
- locationLat: number;
237
- locationLong: number;
238
- }
239
- export interface MapHubResponse {
240
- id: string;
241
- name: string;
242
- slug: string;
243
- locationLat: number;
244
- locationLong: number;
245
- memberCount: number;
246
- }
247
- export interface MapEventResponse {
248
- id: string;
249
- title: string;
250
- slug: string;
251
- locationLat: number;
252
- locationLong: number;
253
- startDate: string;
254
- attendeeCount: number;
255
- }
256
- export interface MapBusinessResponse {
257
- id: string;
258
- name: string;
259
- slug?: string;
260
- locationLat: number;
261
- locationLong: number;
262
- type: string;
263
- hasAfDrinks: boolean;
264
- }
265
- export type AmbassadorStatus = 'PENDING' | 'ACTIVE' | 'INACTIVE' | 'ALUMNI';
266
- export interface AmbassadorResponse {
267
- id: string;
268
- userId: string;
269
- hubId: string | null;
270
- title: string | null;
271
- bio: string | null;
272
- status: AmbassadorStatus;
273
- isVerified: boolean;
274
- isFoundingAmbassador: boolean;
275
- eventsHosted: number;
276
- membersRecruited: number;
277
- rewardPoints: number;
278
- createdAt: string;
279
- approvedAt: string | null;
280
- user?: {
281
- id: string;
282
- name: string | null;
283
- profileImage: string | null;
284
- };
285
- hub?: {
286
- id: string;
287
- name: string;
288
- slug: string;
289
- city?: string;
290
- whatsappGroupUrl?: string;
291
- } | null;
292
- }
293
- export interface AmbassadorLeaderboardResponse {
294
- id: string;
295
- userId: string;
296
- userName: string | null;
297
- profileImage: string | null;
298
- hubName: string | null;
299
- eventsHosted: number;
300
- membersRecruited: number;
301
- rewardPoints: number;
302
- isFoundingAmbassador: boolean;
303
- rank: number;
304
- }
305
- export interface ApplyAmbassadorRequest {
306
- hubId?: string;
307
- motivation: string;
308
- bio?: string;
309
- }
310
- export interface UpdateAmbassadorRequest {
311
- hubId?: string;
312
- title?: string;
313
- bio?: string;
314
- status?: AmbassadorStatus;
315
- isVerified?: boolean;
316
- isFoundingAmbassador?: boolean;
317
- }
318
- export type Grow90Status = 'ACTIVE' | 'COMPLETED' | 'PAUSED' | 'ABANDONED';
319
- export interface Grow90EnrollmentResponse {
320
- id: string;
321
- userId: string;
322
- startDate: string;
323
- targetEndDate: string;
324
- actualEndDate: string | null;
325
- currentDay: number;
326
- completedDays: number;
327
- missedDays: number;
328
- status: Grow90Status;
329
- completedAt: string | null;
330
- dailyReminderTime: string;
331
- weeklyCallDay: string | null;
332
- createdAt: string;
333
- progressPercentage: number;
334
- daysRemaining: number;
335
- }
336
- export interface Grow90ProgressResponse {
337
- id: string;
338
- dayNumber: number;
339
- date: string;
340
- isCompleted: boolean;
341
- completedAt: string | null;
342
- morningCheckIn: boolean;
343
- eveningCheckIn: boolean;
344
- contentViewed: boolean;
345
- journalEntry: string | null;
346
- gratitudeList: string[];
347
- morningMood: number | null;
348
- eveningMood: number | null;
349
- createdAt: string;
350
- }
351
- export interface Grow90TodayResponse {
352
- progress: Grow90ProgressResponse | null;
353
- dayNumber: number;
354
- dailyContent: {
355
- title: string;
356
- message: string;
357
- tip: string;
358
- affirmation: string;
359
- morningMessage?: string;
360
- eveningReflection?: string;
361
- journalPrompt?: string;
362
- theme?: string;
363
- };
364
- tasks: {
365
- morningCheckIn: boolean;
366
- eveningCheckIn: boolean;
367
- contentViewed: boolean;
368
- journalEntry: boolean;
369
- gratitude: boolean;
370
- };
371
- }
372
- export interface Grow90StatsResponse {
373
- completedDays: number;
374
- currentStreak: number;
375
- longestStreak: number;
376
- averageMood: number | null;
377
- completionRate: number;
378
- journalEntriesCount: number;
379
- }
380
- export interface EnrollGrow90Request {
381
- dailyReminderTime?: string;
382
- weeklyCallDay?: string;
383
- stripePaymentId?: string;
384
- }
385
- export interface UpdateGrow90ProgressRequest {
386
- morningCheckIn?: boolean;
387
- eveningCheckIn?: boolean;
388
- contentViewed?: boolean;
389
- journalEntry?: string;
390
- gratitudeList?: string[];
391
- morningMood?: number;
392
- eveningMood?: number;
393
- }
394
- export interface UpdateGrow90SettingsRequest {
395
- dailyReminderTime?: string;
396
- weeklyCallDay?: string;
397
- }
398
- export type EventMessageType = 'TEXT' | 'IMAGE' | 'SYSTEM' | 'ANNOUNCEMENT';
399
- export type ChatMemberRole = 'MEMBER' | 'MODERATOR' | 'HOST';
400
- export interface EventChatResponse {
401
- id: string;
402
- eventId: string;
403
- messageCount: number;
404
- memberCount: number;
405
- isActive: boolean;
406
- isLocked: boolean;
407
- lastMessageAt?: string;
408
- createdAt: string;
409
- eventTitle?: string;
410
- eventStartDate?: string;
411
- }
412
- export interface ChatMemberResponse {
413
- id: string;
414
- chatId: string;
415
- userId: string;
416
- role: ChatMemberRole;
417
- nickname?: string;
418
- isMuted: boolean;
419
- lastReadAt?: string;
420
- joinedAt: string;
421
- userName?: string;
422
- userImage?: string;
423
- }
424
- export interface MessageResponse {
425
- id: string;
426
- chatId: string;
427
- userId: string;
428
- content: string;
429
- messageType: EventMessageType;
430
- imageUrl?: string;
431
- replyToId?: string;
432
- isEdited: boolean;
433
- isDeleted: boolean;
434
- createdAt: string;
435
- updatedAt?: string;
436
- userName?: string;
437
- userImage?: string;
438
- replyToContent?: string;
439
- replyToUserName?: string;
440
- }
441
- export interface PaginatedMessagesResponse {
442
- messages: MessageResponse[];
443
- total: number;
444
- hasMore: boolean;
445
- nextCursor?: string;
446
- }
447
- export interface SendMessageRequest {
448
- content: string;
449
- messageType?: EventMessageType;
450
- imageUrl?: string;
451
- replyToId?: string;
452
- }
453
- export interface UpdateMessageRequest {
454
- content: string;
455
- }
456
- export interface UpdateChatSettingsRequest {
457
- isLocked?: boolean;
458
- isActive?: boolean;
459
- }
460
- export interface UpdateMemberSettingsRequest {
461
- isMuted?: boolean;
462
- nickname?: string;
463
- }
77
+ export type CheckInResponse = components['schemas']['CheckInResponseDto'];
78
+ export type CreateCheckInRequest = components['schemas']['CreateCheckInDto'];
79
+ export type UpdateCheckInRequest = components['schemas']['UpdateCheckInDto'];
80
+ export type CheckInStreakResponse = components['schemas']['CheckInStreakDto'];
81
+ export type WinResponse = components['schemas']['WinResponseDto'];
82
+ export type CreateWinRequest = components['schemas']['CreateWinDto'];
83
+ export type WinCountResponse = components['schemas']['WinCountDto'];
84
+ export type ConversationResponse = components['schemas']['ConversationResponseDto'];
85
+ export type ConversationWithMessagesResponse = components['schemas']['ConversationWithMessagesDto'];
86
+ export type CreateConversationRequest = components['schemas']['CreateConversationDto'];
87
+ export type JackMessageResponse = components['schemas']['MessageResponseDto'];
88
+ export type SendJackMessageRequest = components['schemas']['SendMessageDto'];
89
+ export type MoodLogResponse = components['schemas']['MoodLogResponseDto'];
90
+ export type LogMoodRequest = components['schemas']['LogMoodDto'];
91
+ export type MoodStatsResponse = components['schemas']['MoodStatsDto'];
92
+ export type HabitResponse = components['schemas']['HabitResponseDto'];
93
+ export type CreateHabitRequest = components['schemas']['CreateHabitDto'];
94
+ export type UpdateHabitRequest = components['schemas']['UpdateHabitDto'];
95
+ export type CompleteHabitRequest = components['schemas']['CompleteHabitDto'];
96
+ export type HabitCompletionResponse = components['schemas']['HabitCompletionResponseDto'];
97
+ export type ReflectionResponse = components['schemas']['ReflectionResponseDto'];
98
+ export type CreateReflectionRequest = components['schemas']['CreateReflectionDto'];
99
+ export type UpdateReflectionRequest = components['schemas']['UpdateReflectionDto'];
100
+ export type MapMemberResponse = components['schemas']['MapMemberDto'];
101
+ export type MapHubResponse = components['schemas']['MapHubDto'];
102
+ export type MapEventResponse = components['schemas']['MapEventDto'];
103
+ export type AmbassadorResponse = components['schemas']['AmbassadorResponseDto'];
104
+ export type ApplyAmbassadorRequest = components['schemas']['ApplyAmbassadorDto'];
105
+ export type UpdateAmbassadorRequest = components['schemas']['UpdateAmbassadorDto'];
106
+ export type Grow90EnrollmentResponse = components['schemas']['Grow90EnrollmentResponseDto'];
107
+ export type Grow90ProgressResponse = components['schemas']['Grow90ProgressResponseDto'];
108
+ export type Grow90TodayResponse = components['schemas']['Grow90TodayResponseDto'];
109
+ export type Grow90StatsResponse = components['schemas']['Grow90StatsResponseDto'];
110
+ export type EnrollGrow90Request = components['schemas']['EnrollGrow90Dto'];
111
+ export type UpdateGrow90ProgressRequest = components['schemas']['UpdateProgressDto'];
112
+ export type UpdateGrow90SettingsRequest = components['schemas']['UpdateSettingsDto'];
113
+ export type CreateMatchRequest = components['schemas']['CreateMatchDto'];
114
+ export type UpdateMatchRequest = components['schemas']['UpdateMatchDto'];
115
+ export type CreateBuddyRequest = components['schemas']['CreateBuddyRequestDto'];
116
+ export type UpdateBuddyRequest = components['schemas']['UpdateBuddyDto'];
117
+ export type LogBuddyActivityRequest = components['schemas']['LogBuddyActivityDto'];
118
+ export type EventChatResponse = components['schemas']['EventChatResponseDto'];
119
+ export type ChatMemberResponse = components['schemas']['ChatMemberResponseDto'];
120
+ export type ChatMessageResponse = components['schemas']['MessageResponseDto'];
121
+ export type PaginatedMessagesResponse = components['schemas']['PaginatedMessagesDto'];
122
+ export type SendChatMessageRequest = components['schemas']['SendMessageDto'];
123
+ export type UpdateChatMessageRequest = components['schemas']['UpdateMessageDto'];
124
+ export type UpdateChatSettingsRequest = components['schemas']['UpdateChatSettingsDto'];
125
+ export type UpdateMemberSettingsRequest = components['schemas']['UpdateMemberSettingsDto'];
126
+ export type AdminLoginRequest = components['schemas']['AdminLoginDto'];
127
+ export type AdminTokensResponse = components['schemas']['AdminTokensDto'];
128
+ export type AdminUpdateUserRequest = components['schemas']['AdminUpdateUserDto'];
129
+ export type AdminCreateHubRequest = components['schemas']['AdminCreateHubDto'];
130
+ export type AdminUpdateEventRequest = components['schemas']['AdminUpdateEventDto'];
131
+ export type AdminCreateContentRequest = components['schemas']['AdminCreateContentDto'];
132
+ export type AdminCreateBusinessRequest = components['schemas']['AdminCreateBusinessDto'];
133
+ export type AdminOverviewStatsResponse = components['schemas']['AdminOverviewStatsDto'];
464
134
  export type { paths, components };
package/dist/api/types.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  /**
3
- * Type extraction utilities for OpenAPI-generated types
3
+ * GrowSober SDK Types
4
4
  *
5
- * This file provides type-safe helpers to extract request/response types
6
- * from the @growsober/types package.
5
+ * All types are derived from the @growsober/types package which is auto-generated
6
+ * from the API OpenAPI specification. This ensures single source of truth from Prisma.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHlwZSBleHRyYWN0aW9uIHV0aWxpdGllcyBmb3IgT3BlbkFQSS1nZW5lcmF0ZWQgdHlwZXNcbiAqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgdHlwZS1zYWZlIGhlbHBlcnMgdG8gZXh0cmFjdCByZXF1ZXN0L3Jlc3BvbnNlIHR5cGVzXG4gKiBmcm9tIHRoZSBAZ3Jvd3NvYmVyL3R5cGVzIHBhY2thZ2UuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBwYXRocywgY29tcG9uZW50cyB9IGZyb20gJ0Bncm93c29iZXIvdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFIEVYVFJBQ1RJT04gSEVMUEVSU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4dHJhY3QgcmVxdWVzdCBib2R5IHR5cGUgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQgYW5kIG1ldGhvZFxuICovXG5leHBvcnQgdHlwZSBSZXF1ZXN0Qm9keTxcbiAgUGF0aCBleHRlbmRzIGtleW9mIHBhdGhzLFxuICBNZXRob2QgZXh0ZW5kcyBrZXlvZiBwYXRoc1tQYXRoXVxuPiA9IHBhdGhzW1BhdGhdW01ldGhvZF0gZXh0ZW5kcyB7IHJlcXVlc3RCb2R5OiB7IGNvbnRlbnQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiBpbmZlciBUIH0gfSB9XG4gID8gVFxuICA6IG5ldmVyO1xuXG4vKipcbiAqIEV4dHJhY3QgcmVzcG9uc2UgdHlwZSBmb3IgYSBnaXZlbiBlbmRwb2ludCwgbWV0aG9kLCBhbmQgc3RhdHVzIGNvZGVcbiAqL1xuZXhwb3J0IHR5cGUgUmVzcG9uc2VCb2R5PFxuICBQYXRoIGV4dGVuZHMga2V5b2YgcGF0aHMsXG4gIE1ldGhvZCBleHRlbmRzIGtleW9mIHBhdGhzW1BhdGhdLFxuICBTdGF0dXMgZXh0ZW5kcyBudW1iZXIgPSAyMDBcbj4gPSBwYXRoc1tQYXRoXVtNZXRob2RdIGV4dGVuZHMgeyByZXNwb25zZXM6IHsgW0sgaW4gU3RhdHVzXTogeyBjb250ZW50OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogaW5mZXIgVCB9IH0gfSB9XG4gID8gVFxuICA6IG5ldmVyO1xuXG4vKipcbiAqIEV4dHJhY3QgcXVlcnkgcGFyYW1ldGVycyB0eXBlIGZvciBhIGdpdmVuIGVuZHBvaW50IGFuZCBtZXRob2RcbiAqL1xuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXM8XG4gIFBhdGggZXh0ZW5kcyBrZXlvZiBwYXRocyxcbiAgTWV0aG9kIGV4dGVuZHMga2V5b2YgcGF0aHNbUGF0aF1cbj4gPSBwYXRoc1tQYXRoXVtNZXRob2RdIGV4dGVuZHMgeyBwYXJhbWV0ZXJzOiB7IHF1ZXJ5PzogaW5mZXIgUSB9IH1cbiAgPyBRXG4gIDogUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG4vKipcbiAqIEV4dHJhY3QgcGF0aCBwYXJhbWV0ZXJzIHR5cGUgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQgYW5kIG1ldGhvZFxuICovXG5leHBvcnQgdHlwZSBQYXRoUGFyYW1zPFxuICBQYXRoIGV4dGVuZHMga2V5b2YgcGF0aHMsXG4gIE1ldGhvZCBleHRlbmRzIGtleW9mIHBhdGhzW1BhdGhdXG4+ID0gcGF0aHNbUGF0aF1bTWV0aG9kXSBleHRlbmRzIHsgcGFyYW1ldGVyczogeyBwYXRoOiBpbmZlciBQIH0gfVxuICA/IFBcbiAgOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFVVEggVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydSZWdpc3RlckR0byddO1xuZXhwb3J0IHR5cGUgQXV0aFJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydBdXRoUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIExvZ2luUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnTG9naW5EdG8nXTtcbmV4cG9ydCB0eXBlIFJlZnJlc2hUb2tlblJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1JlZnJlc2hUb2tlbkR0byddO1xuZXhwb3J0IHR5cGUgVG9rZW5SZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnVG9rZW5SZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgRmlyZWJhc2VBdXRoUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnRmlyZWJhc2VBdXRoRHRvJ107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVTRVIgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgVXNlclJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVc2VyUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIFVzZXJQdWJsaWNSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnVXNlclB1YmxpY1Jlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBDcmVhdGVVc2VyUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQ3JlYXRlVXNlckR0byddO1xuZXhwb3J0IHR5cGUgVXBkYXRlVXNlclJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1VwZGF0ZVVzZXJEdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSFVCIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIEh1YlJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydIdWJSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgQ3JlYXRlSHViUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQ3JlYXRlSHViRHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVIdWJSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVIdWJEdG8nXTtcblxuLy8gSHViTWVtYmVyUmVzcG9uc2UgLSB3aWxsIGJlIGF2YWlsYWJsZSB3aGVuIGh1YiBtZW1iZXJzaGlwIGVuZHBvaW50cyBhcmUgZnVsbHkgaW1wbGVtZW50ZWRcbi8vIEZvciBub3csIGRlZmluZSBpbmxpbmUgdHlwZSBiYXNlZCBvbiBBUEkgcmVzcG9uc2Ugc3RydWN0dXJlXG5leHBvcnQgaW50ZXJmYWNlIEh1Yk1lbWJlclJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgaHViSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHJvbGU6ICdNRU1CRVInIHwgJ01PREVSQVRPUicgfCAnQURNSU4nIHwgJ09XTkVSJztcbiAgc3RhdHVzOiAnUEVORElORycgfCAnQVBQUk9WRUQnIHwgJ1JFSkVDVEVEJztcbiAgam9pbmVkQXQ6IHN0cmluZztcbiAgdXNlcj86IFVzZXJQdWJsaWNSZXNwb25zZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVZFTlQgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgRXZlbnRSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnRXZlbnRSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgQ3JlYXRlRXZlbnRSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVFdmVudER0byddO1xuZXhwb3J0IHR5cGUgVXBkYXRlRXZlbnRSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVFdmVudER0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCT09LSU5HIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIEJvb2tpbmdSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQm9va2luZ1Jlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBDcmVhdGVCb29raW5nUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQ3JlYXRlQm9va2luZ0R0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMSUJSQVJZIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIExpYnJhcnlDb250ZW50UmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0xpYnJhcnlDb250ZW50UmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIExpYnJhcnlDb250ZW50RGV0YWlsUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0xpYnJhcnlDb250ZW50RGV0YWlsUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIExpYnJhcnlQcm9ncmVzc1Jlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydMaWJyYXJ5UHJvZ3Jlc3NSZXNwb25zZUR0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCVVNJTkVTUyAmIE9GRkVSIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIEJ1c2luZXNzUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0J1c2luZXNzUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIE9mZmVyUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ09mZmVyUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIFJlZGVlbU9mZmVyUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnUmVkZWVtT2ZmZXJEdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU1VCU0NSSVBUSU9OIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvblJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydTdWJzY3JpcHRpb25SZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgQ3JlYXRlQ2hlY2tvdXRSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVDaGVja291dER0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBOT1RJRklDQVRJT04gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ05vdGlmaWNhdGlvblJlc3BvbnNlRHRvJ107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERFVklDRSBUT0tFTiBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBSZWdpc3RlckRldmljZVRva2VuUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnUmVnaXN0ZXJEZXZpY2VEdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU1VQUE9SVCBUWVBFUyAoUGxhY2Vob2xkZXIgLSB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIHN1cHBvcnQgbW9kdWxlIGlzIHJlZ2lzdGVyZWQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFRoZXNlIHR5cGVzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gT3BlbkFQSSBvbmNlIHRoZSBzdXBwb3J0IG1vZHVsZSBlbmRwb2ludHNcbi8vIGFyZSByZWdpc3RlcmVkIGluIHRoZSBBUEkuIEZvciBub3csIHdlIGRlZmluZSBwbGFjZWhvbGRlciBpbnRlcmZhY2VzLlxuXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5Q2hlY2tJblJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgbW9vZDogbnVtYmVyIHwgbnVsbDtcbiAgZW5lcmd5OiBudW1iZXIgfCBudWxsO1xuICBzdGF5ZWRTb2JlcjogYm9vbGVhbiB8IG51bGw7XG4gIHRyaWdnZXJzOiBzdHJpbmdbXTtcbiAgY29waW5nVXNlZDogc3RyaW5nW107XG4gIG5vdGVzOiBzdHJpbmcgfCBudWxsO1xuICBncmF0aXR1ZGU6IHN0cmluZ1tdO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ2hlY2tJblJlcXVlc3Qge1xuICBkYXRlOiBzdHJpbmc7XG4gIG1vb2Q/OiBudW1iZXI7XG4gIGVuZXJneT86IG51bWJlcjtcbiAgc3RheWVkU29iZXI/OiBib29sZWFuO1xuICB0cmlnZ2Vycz86IHN0cmluZ1tdO1xuICBjb3BpbmdVc2VkPzogc3RyaW5nW107XG4gIG5vdGVzPzogc3RyaW5nO1xuICBncmF0aXR1ZGU/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVDaGVja0luUmVxdWVzdCB7XG4gIG1vb2Q/OiBudW1iZXI7XG4gIGVuZXJneT86IG51bWJlcjtcbiAgc3RheWVkU29iZXI/OiBib29sZWFuO1xuICB0cmlnZ2Vycz86IHN0cmluZ1tdO1xuICBjb3BpbmdVc2VkPzogc3RyaW5nW107XG4gIG5vdGVzPzogc3RyaW5nO1xuICBncmF0aXR1ZGU/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGVja0luU3RyZWFrUmVzcG9uc2Uge1xuICBjdXJyZW50U3RyZWFrOiBudW1iZXI7XG4gIGxvbmdlc3RTdHJlYWs6IG51bWJlcjtcbiAgdG90YWxDaGVja0luczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vb2RMb2dSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBtb29kOiBudW1iZXI7XG4gIG5vdGVzPzogc3RyaW5nO1xuICB0cmlnZ2Vycz86IHN0cmluZ1tdO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVNb29kTG9nUmVxdWVzdCB7XG4gIG1vb2Q6IG51bWJlcjtcbiAgbm90ZXM/OiBzdHJpbmc7XG4gIHRyaWdnZXJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGltYWdlVXJsPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVXaW5SZXF1ZXN0IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGltYWdlVXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhYml0UmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGZyZXF1ZW5jeTogc3RyaW5nO1xuICB0YXJnZXREYXlzOiBudW1iZXJbXTtcbiAgdGFyZ2V0Q291bnQ6IG51bWJlcjtcbiAgY3VycmVudFN0cmVhazogbnVtYmVyO1xuICBsb25nZXN0U3RyZWFrOiBudW1iZXI7XG4gIHRvdGFsQ29tcGxldGlvbnM6IG51bWJlcjtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIGlzUGF1c2VkOiBib29sZWFuO1xuICByZW1pbmRlclRpbWU/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVIYWJpdFJlcXVlc3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgZnJlcXVlbmN5OiBzdHJpbmc7XG4gIHRhcmdldERheXM/OiBudW1iZXJbXTtcbiAgdGFyZ2V0Q291bnQ/OiBudW1iZXI7XG4gIHJlbWluZGVyVGltZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVIYWJpdFJlcXVlc3Qge1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGZyZXF1ZW5jeT86IHN0cmluZztcbiAgdGFyZ2V0RGF5cz86IG51bWJlcltdO1xuICB0YXJnZXRDb3VudD86IG51bWJlcjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBpc1BhdXNlZD86IGJvb2xlYW47XG4gIHJlbWluZGVyVGltZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZsZWN0aW9uUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbW9vZD86IG51bWJlcjtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVmbGVjdGlvblJlcXVlc3Qge1xuICBwcm9tcHQ6IHN0cmluZztcbiAgY29udGVudDogc3RyaW5nO1xuICBtb29kPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTdHJlYWtSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGN1cnJlbnRTdHJlYWs6IG51bWJlcjtcbiAgbG9uZ2VzdFN0cmVhazogbnVtYmVyO1xuICB0b3RhbENoZWNrSW5zOiBudW1iZXI7XG4gIGxhc3RBY3Rpdml0eURhdGU6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR0FNSUZJQ0FUSU9OIFRZUEVTIChQbGFjZWhvbGRlciAtIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gZ2FtaWZpY2F0aW9uIG1vZHVsZSBpcyByZWdpc3RlcmVkKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhZGdlUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBhcHBJZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpY29uVXJsPzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgaXNTZWNyZXQ6IGJvb2xlYW47XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBzb3J0T3JkZXI6IG51bWJlcjtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckJhZGdlUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgYmFkZ2VJZDogc3RyaW5nO1xuICBhd2FyZGVkQXQ6IHN0cmluZztcbiAgYmFkZ2U/OiBCYWRnZVJlc3BvbnNlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNQVAgVFlQRVMgKFBsYWNlaG9sZGVyIC0gd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBtYXAgbW9kdWxlIGlzIHJlZ2lzdGVyZWQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwVXNlclJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhdmF0YXI/OiBzdHJpbmc7XG4gIGxvY2F0aW9uTGF0OiBudW1iZXI7XG4gIGxvY2F0aW9uTG9uZzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcEh1YlJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzbHVnOiBzdHJpbmc7XG4gIGxvY2F0aW9uTGF0OiBudW1iZXI7XG4gIGxvY2F0aW9uTG9uZzogbnVtYmVyO1xuICBtZW1iZXJDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcEV2ZW50UmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBzbHVnOiBzdHJpbmc7XG4gIGxvY2F0aW9uTGF0OiBudW1iZXI7XG4gIGxvY2F0aW9uTG9uZzogbnVtYmVyO1xuICBzdGFydERhdGU6IHN0cmluZztcbiAgYXR0ZW5kZWVDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcEJ1c2luZXNzUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNsdWc/OiBzdHJpbmc7XG4gIGxvY2F0aW9uTGF0OiBudW1iZXI7XG4gIGxvY2F0aW9uTG9uZzogbnVtYmVyO1xuICB0eXBlOiBzdHJpbmc7XG4gIGhhc0FmRHJpbmtzOiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBTUJBU1NBRE9SIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIEFtYmFzc2Fkb3JTdGF0dXMgPSAnUEVORElORycgfCAnQUNUSVZFJyB8ICdJTkFDVElWRScgfCAnQUxVTU5JJztcblxuZXhwb3J0IGludGVyZmFjZSBBbWJhc3NhZG9yUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgaHViSWQ6IHN0cmluZyB8IG51bGw7XG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICBiaW86IHN0cmluZyB8IG51bGw7XG4gIHN0YXR1czogQW1iYXNzYWRvclN0YXR1cztcbiAgaXNWZXJpZmllZDogYm9vbGVhbjtcbiAgaXNGb3VuZGluZ0FtYmFzc2Fkb3I6IGJvb2xlYW47XG4gIGV2ZW50c0hvc3RlZDogbnVtYmVyO1xuICBtZW1iZXJzUmVjcnVpdGVkOiBudW1iZXI7XG4gIHJld2FyZFBvaW50czogbnVtYmVyO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgYXBwcm92ZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgdXNlcj86IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgcHJvZmlsZUltYWdlOiBzdHJpbmcgfCBudWxsO1xuICB9O1xuICBodWI/OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIGNpdHk/OiBzdHJpbmc7XG4gICAgd2hhdHNhcHBHcm91cFVybD86IHN0cmluZztcbiAgfSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1iYXNzYWRvckxlYWRlcmJvYXJkUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgdXNlck5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHByb2ZpbGVJbWFnZTogc3RyaW5nIHwgbnVsbDtcbiAgaHViTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZXZlbnRzSG9zdGVkOiBudW1iZXI7XG4gIG1lbWJlcnNSZWNydWl0ZWQ6IG51bWJlcjtcbiAgcmV3YXJkUG9pbnRzOiBudW1iZXI7XG4gIGlzRm91bmRpbmdBbWJhc3NhZG9yOiBib29sZWFuO1xuICByYW5rOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbHlBbWJhc3NhZG9yUmVxdWVzdCB7XG4gIGh1YklkPzogc3RyaW5nO1xuICBtb3RpdmF0aW9uOiBzdHJpbmc7XG4gIGJpbz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVBbWJhc3NhZG9yUmVxdWVzdCB7XG4gIGh1YklkPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgYmlvPzogc3RyaW5nO1xuICBzdGF0dXM/OiBBbWJhc3NhZG9yU3RhdHVzO1xuICBpc1ZlcmlmaWVkPzogYm9vbGVhbjtcbiAgaXNGb3VuZGluZ0FtYmFzc2Fkb3I/OiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHUk9XOTAgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgR3JvdzkwU3RhdHVzID0gJ0FDVElWRScgfCAnQ09NUExFVEVEJyB8ICdQQVVTRUQnIHwgJ0FCQU5ET05FRCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdzkwRW5yb2xsbWVudFJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xuICB0YXJnZXRFbmREYXRlOiBzdHJpbmc7XG4gIGFjdHVhbEVuZERhdGU6IHN0cmluZyB8IG51bGw7XG4gIGN1cnJlbnREYXk6IG51bWJlcjtcbiAgY29tcGxldGVkRGF5czogbnVtYmVyO1xuICBtaXNzZWREYXlzOiBudW1iZXI7XG4gIHN0YXR1czogR3JvdzkwU3RhdHVzO1xuICBjb21wbGV0ZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgZGFpbHlSZW1pbmRlclRpbWU6IHN0cmluZztcbiAgd2Vla2x5Q2FsbERheTogc3RyaW5nIHwgbnVsbDtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHByb2dyZXNzUGVyY2VudGFnZTogbnVtYmVyO1xuICBkYXlzUmVtYWluaW5nOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdzkwUHJvZ3Jlc3NSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRheU51bWJlcjogbnVtYmVyO1xuICBkYXRlOiBzdHJpbmc7XG4gIGlzQ29tcGxldGVkOiBib29sZWFuO1xuICBjb21wbGV0ZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgbW9ybmluZ0NoZWNrSW46IGJvb2xlYW47XG4gIGV2ZW5pbmdDaGVja0luOiBib29sZWFuO1xuICBjb250ZW50Vmlld2VkOiBib29sZWFuO1xuICBqb3VybmFsRW50cnk6IHN0cmluZyB8IG51bGw7XG4gIGdyYXRpdHVkZUxpc3Q6IHN0cmluZ1tdO1xuICBtb3JuaW5nTW9vZDogbnVtYmVyIHwgbnVsbDtcbiAgZXZlbmluZ01vb2Q6IG51bWJlciB8IG51bGw7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3c5MFRvZGF5UmVzcG9uc2Uge1xuICBwcm9ncmVzczogR3JvdzkwUHJvZ3Jlc3NSZXNwb25zZSB8IG51bGw7XG4gIGRheU51bWJlcjogbnVtYmVyO1xuICBkYWlseUNvbnRlbnQ6IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICB0aXA6IHN0cmluZztcbiAgICBhZmZpcm1hdGlvbjogc3RyaW5nO1xuICAgIG1vcm5pbmdNZXNzYWdlPzogc3RyaW5nO1xuICAgIGV2ZW5pbmdSZWZsZWN0aW9uPzogc3RyaW5nO1xuICAgIGpvdXJuYWxQcm9tcHQ/OiBzdHJpbmc7XG4gICAgdGhlbWU/OiBzdHJpbmc7XG4gIH07XG4gIHRhc2tzOiB7XG4gICAgbW9ybmluZ0NoZWNrSW46IGJvb2xlYW47XG4gICAgZXZlbmluZ0NoZWNrSW46IGJvb2xlYW47XG4gICAgY29udGVudFZpZXdlZDogYm9vbGVhbjtcbiAgICBqb3VybmFsRW50cnk6IGJvb2xlYW47XG4gICAgZ3JhdGl0dWRlOiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3c5MFN0YXRzUmVzcG9uc2Uge1xuICBjb21wbGV0ZWREYXlzOiBudW1iZXI7XG4gIGN1cnJlbnRTdHJlYWs6IG51bWJlcjtcbiAgbG9uZ2VzdFN0cmVhazogbnVtYmVyO1xuICBhdmVyYWdlTW9vZDogbnVtYmVyIHwgbnVsbDtcbiAgY29tcGxldGlvblJhdGU6IG51bWJlcjtcbiAgam91cm5hbEVudHJpZXNDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVucm9sbEdyb3c5MFJlcXVlc3Qge1xuICBkYWlseVJlbWluZGVyVGltZT86IHN0cmluZztcbiAgd2Vla2x5Q2FsbERheT86IHN0cmluZztcbiAgc3RyaXBlUGF5bWVudElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUdyb3c5MFByb2dyZXNzUmVxdWVzdCB7XG4gIG1vcm5pbmdDaGVja0luPzogYm9vbGVhbjtcbiAgZXZlbmluZ0NoZWNrSW4/OiBib29sZWFuO1xuICBjb250ZW50Vmlld2VkPzogYm9vbGVhbjtcbiAgam91cm5hbEVudHJ5Pzogc3RyaW5nO1xuICBncmF0aXR1ZGVMaXN0Pzogc3RyaW5nW107XG4gIG1vcm5pbmdNb29kPzogbnVtYmVyO1xuICBldmVuaW5nTW9vZD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVHcm93OTBTZXR0aW5nc1JlcXVlc3Qge1xuICBkYWlseVJlbWluZGVyVGltZT86IHN0cmluZztcbiAgd2Vla2x5Q2FsbERheT86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVZFTlQgQ0hBVCBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBFdmVudE1lc3NhZ2VUeXBlID0gJ1RFWFQnIHwgJ0lNQUdFJyB8ICdTWVNURU0nIHwgJ0FOTk9VTkNFTUVOVCc7XG5leHBvcnQgdHlwZSBDaGF0TWVtYmVyUm9sZSA9ICdNRU1CRVInIHwgJ01PREVSQVRPUicgfCAnSE9TVCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDaGF0UmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBldmVudElkOiBzdHJpbmc7XG4gIG1lc3NhZ2VDb3VudDogbnVtYmVyO1xuICBtZW1iZXJDb3VudDogbnVtYmVyO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgaXNMb2NrZWQ6IGJvb2xlYW47XG4gIGxhc3RNZXNzYWdlQXQ/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBldmVudFRpdGxlPzogc3RyaW5nO1xuICBldmVudFN0YXJ0RGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0TWVtYmVyUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBjaGF0SWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHJvbGU6IENoYXRNZW1iZXJSb2xlO1xuICBuaWNrbmFtZT86IHN0cmluZztcbiAgaXNNdXRlZDogYm9vbGVhbjtcbiAgbGFzdFJlYWRBdD86IHN0cmluZztcbiAgam9pbmVkQXQ6IHN0cmluZztcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG4gIHVzZXJJbWFnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBjaGF0SWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbWVzc2FnZVR5cGU6IEV2ZW50TWVzc2FnZVR5cGU7XG4gIGltYWdlVXJsPzogc3RyaW5nO1xuICByZXBseVRvSWQ/OiBzdHJpbmc7XG4gIGlzRWRpdGVkOiBib29sZWFuO1xuICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ/OiBzdHJpbmc7XG4gIHVzZXJOYW1lPzogc3RyaW5nO1xuICB1c2VySW1hZ2U/OiBzdHJpbmc7XG4gIHJlcGx5VG9Db250ZW50Pzogc3RyaW5nO1xuICByZXBseVRvVXNlck5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVkTWVzc2FnZXNSZXNwb25zZSB7XG4gIG1lc3NhZ2VzOiBNZXNzYWdlUmVzcG9uc2VbXTtcbiAgdG90YWw6IG51bWJlcjtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbiAgbmV4dEN1cnNvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kTWVzc2FnZVJlcXVlc3Qge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIG1lc3NhZ2VUeXBlPzogRXZlbnRNZXNzYWdlVHlwZTtcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIHJlcGx5VG9JZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVNZXNzYWdlUmVxdWVzdCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVDaGF0U2V0dGluZ3NSZXF1ZXN0IHtcbiAgaXNMb2NrZWQ/OiBib29sZWFuO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTWVtYmVyU2V0dGluZ3NSZXF1ZXN0IHtcbiAgaXNNdXRlZD86IGJvb2xlYW47XG4gIG5pY2tuYW1lPzogc3RyaW5nO1xufVxuXG4vLyBSZS1leHBvcnQgcGF0aHMgYW5kIGNvbXBvbmVudHMgZm9yIGFkdmFuY2VkIHVzYWdlXG5leHBvcnQgdHlwZSB7IHBhdGhzLCBjb21wb25lbnRzIH07XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR3Jvd1NvYmVyIFNESyBUeXBlc1xuICpcbiAqIEFsbCB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBAZ3Jvd3NvYmVyL3R5cGVzIHBhY2thZ2Ugd2hpY2ggaXMgYXV0by1nZW5lcmF0ZWRcbiAqIGZyb20gdGhlIEFQSSBPcGVuQVBJIHNwZWNpZmljYXRpb24uIFRoaXMgZW5zdXJlcyBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZyb20gUHJpc21hLlxuICovXG5cbmltcG9ydCB0eXBlIHsgcGF0aHMsIGNvbXBvbmVudHMgfSBmcm9tICdAZ3Jvd3NvYmVyL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRSBFWFRSQUNUSU9OIEhFTFBFUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFeHRyYWN0IHJlcXVlc3QgYm9keSB0eXBlIGZvciBhIGdpdmVuIGVuZHBvaW50IGFuZCBtZXRob2RcbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWVzdEJvZHk8XG4gIFBhdGggZXh0ZW5kcyBrZXlvZiBwYXRocyxcbiAgTWV0aG9kIGV4dGVuZHMga2V5b2YgcGF0aHNbUGF0aF1cbj4gPSBwYXRoc1tQYXRoXVtNZXRob2RdIGV4dGVuZHMgeyByZXF1ZXN0Qm9keTogeyBjb250ZW50OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogaW5mZXIgVCB9IH0gfVxuICA/IFRcbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBFeHRyYWN0IHJlc3BvbnNlIHR5cGUgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQsIG1ldGhvZCwgYW5kIHN0YXR1cyBjb2RlXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3BvbnNlQm9keTxcbiAgUGF0aCBleHRlbmRzIGtleW9mIHBhdGhzLFxuICBNZXRob2QgZXh0ZW5kcyBrZXlvZiBwYXRoc1tQYXRoXSxcbiAgU3RhdHVzIGV4dGVuZHMgbnVtYmVyID0gMjAwXG4+ID0gcGF0aHNbUGF0aF1bTWV0aG9kXSBleHRlbmRzIHsgcmVzcG9uc2VzOiB7IFtLIGluIFN0YXR1c106IHsgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IGluZmVyIFQgfSB9IH0gfVxuICA/IFRcbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBFeHRyYWN0IHF1ZXJ5IHBhcmFtZXRlcnMgdHlwZSBmb3IgYSBnaXZlbiBlbmRwb2ludCBhbmQgbWV0aG9kXG4gKi9cbmV4cG9ydCB0eXBlIFF1ZXJ5UGFyYW1zPFxuICBQYXRoIGV4dGVuZHMga2V5b2YgcGF0aHMsXG4gIE1ldGhvZCBleHRlbmRzIGtleW9mIHBhdGhzW1BhdGhdXG4+ID0gcGF0aHNbUGF0aF1bTWV0aG9kXSBleHRlbmRzIHsgcGFyYW1ldGVyczogeyBxdWVyeT86IGluZmVyIFEgfSB9XG4gID8gUVxuICA6IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqXG4gKiBFeHRyYWN0IHBhdGggcGFyYW1ldGVycyB0eXBlIGZvciBhIGdpdmVuIGVuZHBvaW50IGFuZCBtZXRob2RcbiAqL1xuZXhwb3J0IHR5cGUgUGF0aFBhcmFtczxcbiAgUGF0aCBleHRlbmRzIGtleW9mIHBhdGhzLFxuICBNZXRob2QgZXh0ZW5kcyBrZXlvZiBwYXRoc1tQYXRoXVxuPiA9IHBhdGhzW1BhdGhdW01ldGhvZF0gZXh0ZW5kcyB7IHBhcmFtZXRlcnM6IHsgcGF0aDogaW5mZXIgUCB9IH1cbiAgPyBQXG4gIDogUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBVVRIIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnUmVnaXN0ZXJEdG8nXTtcbmV4cG9ydCB0eXBlIEF1dGhSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQXV0aFJlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBMb2dpblJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0xvZ2luRHRvJ107XG5leHBvcnQgdHlwZSBSZWZyZXNoVG9rZW5SZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydSZWZyZXNoVG9rZW5EdG8nXTtcbmV4cG9ydCB0eXBlIFRva2VuUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1Rva2VuUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIEZpcmViYXNlQXV0aFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0ZpcmViYXNlQXV0aER0byddO1xuZXhwb3J0IHR5cGUgU2VuZE90cFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1NlbmRPdHBEdG8nXTtcbmV4cG9ydCB0eXBlIE90cFNlbnRSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnT3RwU2VudFJlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBWZXJpZnlPdHBSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydWZXJpZnlPdHBEdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVVNFUiBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBVc2VyUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1VzZXJSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgVXNlclB1YmxpY1Jlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVc2VyUHVibGljUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIENyZWF0ZVVzZXJSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVVc2VyRHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVVc2VyUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnVXBkYXRlVXNlckR0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIVUIgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgSHViUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0h1YlJlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBDcmVhdGVIdWJSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVIdWJEdG8nXTtcbmV4cG9ydCB0eXBlIFVwZGF0ZUh1YlJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1VwZGF0ZUh1YkR0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFVkVOVCBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBFdmVudFJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydFdmVudFJlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBDcmVhdGVFdmVudFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0NyZWF0ZUV2ZW50RHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVFdmVudFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1VwZGF0ZUV2ZW50RHRvJ107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJPT0tJTkcgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgQm9va2luZ1Jlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydCb29raW5nUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIENyZWF0ZUJvb2tpbmdSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVCb29raW5nRHRvJ107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExJQlJBUlkgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgTGlicmFyeUNvbnRlbnRSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnTGlicmFyeUNvbnRlbnRSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgTGlicmFyeUNvbnRlbnREZXRhaWxSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnTGlicmFyeUNvbnRlbnREZXRhaWxSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgTGlicmFyeVByb2dyZXNzUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0xpYnJhcnlQcm9ncmVzc1Jlc3BvbnNlRHRvJ107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJVU0lORVNTICYgT0ZGRVIgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgQnVzaW5lc3NSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQnVzaW5lc3NSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgT2ZmZXJSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnT2ZmZXJSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgUmVkZWVtT2ZmZXJSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydSZWRlZW1PZmZlckR0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTVUJTQ1JJUFRJT04gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1N1YnNjcmlwdGlvblJlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBDcmVhdGVDaGVja291dFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0NyZWF0ZUNoZWNrb3V0RHRvJ107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE5PVElGSUNBVElPTiBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25SZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnTm90aWZpY2F0aW9uUmVzcG9uc2VEdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gREVWSUNFIFRPS0VOIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyRGV2aWNlVG9rZW5SZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydSZWdpc3RlckRldmljZUR0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTVVBQT1JUIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIENoZWNrLWluc1xuZXhwb3J0IHR5cGUgQ2hlY2tJblJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDaGVja0luUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIENyZWF0ZUNoZWNrSW5SZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVDaGVja0luRHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVDaGVja0luUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnVXBkYXRlQ2hlY2tJbkR0byddO1xuZXhwb3J0IHR5cGUgQ2hlY2tJblN0cmVha1Jlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDaGVja0luU3RyZWFrRHRvJ107XG5cbi8vIFdpbnNcbmV4cG9ydCB0eXBlIFdpblJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydXaW5SZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgQ3JlYXRlV2luUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQ3JlYXRlV2luRHRvJ107XG5leHBvcnQgdHlwZSBXaW5Db3VudFJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydXaW5Db3VudER0byddO1xuXG4vLyBKYWNrIEFJIENvbnZlcnNhdGlvbnNcbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvblJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDb252ZXJzYXRpb25SZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uV2l0aE1lc3NhZ2VzUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0NvbnZlcnNhdGlvbldpdGhNZXNzYWdlc0R0byddO1xuZXhwb3J0IHR5cGUgQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQ3JlYXRlQ29udmVyc2F0aW9uRHRvJ107XG5leHBvcnQgdHlwZSBKYWNrTWVzc2FnZVJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydNZXNzYWdlUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIFNlbmRKYWNrTWVzc2FnZVJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1NlbmRNZXNzYWdlRHRvJ107XG5cbi8vIE1vb2QgTG9nc1xuZXhwb3J0IHR5cGUgTW9vZExvZ1Jlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydNb29kTG9nUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIExvZ01vb2RSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydMb2dNb29kRHRvJ107XG5leHBvcnQgdHlwZSBNb29kU3RhdHNSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnTW9vZFN0YXRzRHRvJ107XG5cbi8vIEhhYml0c1xuZXhwb3J0IHR5cGUgSGFiaXRSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnSGFiaXRSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgQ3JlYXRlSGFiaXRSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVIYWJpdER0byddO1xuZXhwb3J0IHR5cGUgVXBkYXRlSGFiaXRSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVIYWJpdER0byddO1xuZXhwb3J0IHR5cGUgQ29tcGxldGVIYWJpdFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0NvbXBsZXRlSGFiaXREdG8nXTtcbmV4cG9ydCB0eXBlIEhhYml0Q29tcGxldGlvblJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydIYWJpdENvbXBsZXRpb25SZXNwb25zZUR0byddO1xuXG4vLyBSZWZsZWN0aW9uc1xuZXhwb3J0IHR5cGUgUmVmbGVjdGlvblJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydSZWZsZWN0aW9uUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIENyZWF0ZVJlZmxlY3Rpb25SZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydDcmVhdGVSZWZsZWN0aW9uRHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVSZWZsZWN0aW9uUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnVXBkYXRlUmVmbGVjdGlvbkR0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNQVAgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgTWFwTWVtYmVyUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ01hcE1lbWJlckR0byddO1xuZXhwb3J0IHR5cGUgTWFwSHViUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ01hcEh1YkR0byddO1xuZXhwb3J0IHR5cGUgTWFwRXZlbnRSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnTWFwRXZlbnREdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQU1CQVNTQURPUiBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBBbWJhc3NhZG9yUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0FtYmFzc2Fkb3JSZXNwb25zZUR0byddO1xuZXhwb3J0IHR5cGUgQXBwbHlBbWJhc3NhZG9yUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQXBwbHlBbWJhc3NhZG9yRHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVBbWJhc3NhZG9yUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnVXBkYXRlQW1iYXNzYWRvckR0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHUk9XOTAgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgR3JvdzkwRW5yb2xsbWVudFJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydHcm93OTBFbnJvbGxtZW50UmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIEdyb3c5MFByb2dyZXNzUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0dyb3c5MFByb2dyZXNzUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIEdyb3c5MFRvZGF5UmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0dyb3c5MFRvZGF5UmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIEdyb3c5MFN0YXRzUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0dyb3c5MFN0YXRzUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIEVucm9sbEdyb3c5MFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0Vucm9sbEdyb3c5MER0byddO1xuZXhwb3J0IHR5cGUgVXBkYXRlR3JvdzkwUHJvZ3Jlc3NSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVQcm9ncmVzc0R0byddO1xuZXhwb3J0IHR5cGUgVXBkYXRlR3JvdzkwU2V0dGluZ3NSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVTZXR0aW5nc0R0byddO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNQVRDSElORyBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBDcmVhdGVNYXRjaFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0NyZWF0ZU1hdGNoRHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVNYXRjaFJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1VwZGF0ZU1hdGNoRHRvJ107XG5leHBvcnQgdHlwZSBDcmVhdGVCdWRkeVJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0NyZWF0ZUJ1ZGR5UmVxdWVzdER0byddO1xuZXhwb3J0IHR5cGUgVXBkYXRlQnVkZHlSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVCdWRkeUR0byddO1xuZXhwb3J0IHR5cGUgTG9nQnVkZHlBY3Rpdml0eVJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0xvZ0J1ZGR5QWN0aXZpdHlEdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVZFTlQgQ0hBVCBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBFdmVudENoYXRSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnRXZlbnRDaGF0UmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIENoYXRNZW1iZXJSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQ2hhdE1lbWJlclJlc3BvbnNlRHRvJ107XG5leHBvcnQgdHlwZSBDaGF0TWVzc2FnZVJlc3BvbnNlID0gY29tcG9uZW50c1snc2NoZW1hcyddWydNZXNzYWdlUmVzcG9uc2VEdG8nXTtcbmV4cG9ydCB0eXBlIFBhZ2luYXRlZE1lc3NhZ2VzUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ1BhZ2luYXRlZE1lc3NhZ2VzRHRvJ107XG5leHBvcnQgdHlwZSBTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydTZW5kTWVzc2FnZUR0byddO1xuZXhwb3J0IHR5cGUgVXBkYXRlQ2hhdE1lc3NhZ2VSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVNZXNzYWdlRHRvJ107XG5leHBvcnQgdHlwZSBVcGRhdGVDaGF0U2V0dGluZ3NSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydVcGRhdGVDaGF0U2V0dGluZ3NEdG8nXTtcbmV4cG9ydCB0eXBlIFVwZGF0ZU1lbWJlclNldHRpbmdzUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnVXBkYXRlTWVtYmVyU2V0dGluZ3NEdG8nXTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQURNSU4gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgQWRtaW5Mb2dpblJlcXVlc3QgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0FkbWluTG9naW5EdG8nXTtcbmV4cG9ydCB0eXBlIEFkbWluVG9rZW5zUmVzcG9uc2UgPSBjb21wb25lbnRzWydzY2hlbWFzJ11bJ0FkbWluVG9rZW5zRHRvJ107XG5leHBvcnQgdHlwZSBBZG1pblVwZGF0ZVVzZXJSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydBZG1pblVwZGF0ZVVzZXJEdG8nXTtcbmV4cG9ydCB0eXBlIEFkbWluQ3JlYXRlSHViUmVxdWVzdCA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQWRtaW5DcmVhdGVIdWJEdG8nXTtcbmV4cG9ydCB0eXBlIEFkbWluVXBkYXRlRXZlbnRSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydBZG1pblVwZGF0ZUV2ZW50RHRvJ107XG5leHBvcnQgdHlwZSBBZG1pbkNyZWF0ZUNvbnRlbnRSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydBZG1pbkNyZWF0ZUNvbnRlbnREdG8nXTtcbmV4cG9ydCB0eXBlIEFkbWluQ3JlYXRlQnVzaW5lc3NSZXF1ZXN0ID0gY29tcG9uZW50c1snc2NoZW1hcyddWydBZG1pbkNyZWF0ZUJ1c2luZXNzRHRvJ107XG5leHBvcnQgdHlwZSBBZG1pbk92ZXJ2aWV3U3RhdHNSZXNwb25zZSA9IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsnQWRtaW5PdmVydmlld1N0YXRzRHRvJ107XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJFLUVYUE9SVFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gUmUtZXhwb3J0IHBhdGhzIGFuZCBjb21wb25lbnRzIGZvciBhZHZhbmNlZCB1c2FnZVxuZXhwb3J0IHR5cGUgeyBwYXRocywgY29tcG9uZW50cyB9O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growsober/sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Shared TypeScript SDK for GrowSober API - TanStack Query hooks, API client, and utilities",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -15,6 +15,7 @@ import {
15
15
  useQueryClient,
16
16
  } from '@tanstack/react-query';
17
17
  import { getApiClient } from '../client';
18
+ import type { AdminUpdateUserRequest, AdminCreateContentRequest } from '../types';
18
19
  import { adminKeys } from '../queries/admin';
19
20
  import type {
20
21
  UserResponse,
@@ -31,27 +32,7 @@ import type {
31
32
  // REQUEST TYPES
32
33
  // ============================================================================
33
34
 
34
- export interface AdminUpdateUserRequest {
35
- displayName?: string;
36
- email?: string;
37
- role?: string;
38
- isPremium?: boolean;
39
- isSuspended?: boolean;
40
- }
41
35
 
42
- export interface AdminCreateContentRequest {
43
- title: string;
44
- type: string;
45
- category: string;
46
- description?: string;
47
- content?: string;
48
- mediaUrl?: string;
49
- thumbnailUrl?: string;
50
- duration?: number;
51
- isPremium?: boolean;
52
- isFeatured?: boolean;
53
- sortOrder?: number;
54
- }
55
36
 
56
37
  export interface AdminUpdateContentRequest extends Partial<AdminCreateContentRequest> {}
57
38
 
@@ -3,10 +3,10 @@ import { getApiClient } from '../client';
3
3
  import { eventChatKeys } from '../queries/event-chat';
4
4
  import type {
5
5
  ChatMemberResponse,
6
- MessageResponse,
6
+ ChatMessageResponse,
7
7
  EventChatResponse,
8
- SendMessageRequest,
9
- UpdateMessageRequest,
8
+ SendChatMessageRequest,
9
+ UpdateChatMessageRequest,
10
10
  UpdateChatSettingsRequest,
11
11
  UpdateMemberSettingsRequest,
12
12
  } from '../types';
@@ -123,9 +123,9 @@ export function useSendEventChatMessage(eventId: string) {
123
123
  const queryClient = useQueryClient();
124
124
 
125
125
  return useMutation({
126
- mutationFn: async (data: SendMessageRequest) => {
126
+ mutationFn: async (data: SendChatMessageRequest) => {
127
127
  const client = getApiClient();
128
- const response = await client.post<MessageResponse>(
128
+ const response = await client.post<ChatMessageResponse>(
129
129
  `/events/${eventId}/chat/messages`,
130
130
  data
131
131
  );
@@ -145,9 +145,9 @@ export function useUpdateEventChatMessage(eventId: string) {
145
145
  const queryClient = useQueryClient();
146
146
 
147
147
  return useMutation({
148
- mutationFn: async ({ messageId, content }: { messageId: string } & UpdateMessageRequest) => {
148
+ mutationFn: async ({ messageId, content }: { messageId: string } & UpdateChatMessageRequest) => {
149
149
  const client = getApiClient();
150
- const response = await client.put<MessageResponse>(
150
+ const response = await client.put<ChatMessageResponse>(
151
151
  `/events/${eventId}/chat/messages/${messageId}`,
152
152
  { content }
153
153
  );