@awesome-cordova-plugins/urbanairship 7.0.1 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ngx/index.js CHANGED
@@ -1,11 +1,11 @@
1
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54;
2
- import { __decorate, __metadata } from "tslib";
1
+ import { __decorate, __extends } from "tslib";
3
2
  import { Injectable } from '@angular/core';
4
3
  import { AwesomeCordovaNativePlugin, cordova } from '@awesome-cordova-plugins/core';
5
4
  import { Observable } from 'rxjs';
6
5
  import * as i0 from "@angular/core";
7
6
  /**
8
7
  * Enum for notification types.
8
+ *
9
9
  * @readonly
10
10
  * @enum {number}
11
11
  */
@@ -18,6 +18,7 @@ export var NotificationType;
18
18
  })(NotificationType || (NotificationType = {}));
19
19
  /**
20
20
  * Enum for presentation options.
21
+ *
21
22
  * @readonly
22
23
  * @enum {number}
23
24
  */
@@ -28,1372 +29,114 @@ export var PresentationOptions;
28
29
  PresentationOptions[PresentationOptions["sound"] = 2] = "sound";
29
30
  PresentationOptions[PresentationOptions["alert"] = 4] = "alert";
30
31
  })(PresentationOptions || (PresentationOptions = {}));
31
- export class UrbanAirShip extends AwesomeCordovaNativePlugin {
32
- /**
33
- * Event fired when a new deep link is received.
34
- * @event deep_link
35
- * @type {object}
36
- * @param {string} [deepLink] The deep link.
37
- */
38
- onDeepLink() {
39
- return;
40
- }
41
- /**
42
- * Event fired when a channel registration occurs.
43
- * @event registration
44
- * @type {object}
45
- * @param {string} [channelID] The channel ID.
46
- * @param {string} [registrationToken] The deviceToken on iOS, and the FCM/ADM token on Android.
47
- * @param {string} [error] Error message if an error occurred.
48
- */
49
- onRegistration() {
50
- return;
51
- }
52
- /**
53
- * Event fired when the inbox is updated.
54
- * @event inbox_updated
55
- */
56
- onInboxUpdated() {
57
- return;
58
- }
59
- /**
60
- * Event fired when the inbox needs to be displayed. This event is only emitted if auto
61
- * launch message center is disabled.
62
- * @event show_inbox
63
- * @type {object}
64
- * @param {string} [messageId] The optional message ID.
65
- */
66
- onShowInbox() {
67
- return;
68
- }
69
- /**
70
- * Event fired when a push is received.
71
- * @event push
72
- * @type {object}
73
- * @param {string} message The push alert message.
74
- * @param {string} title The push title.
75
- * @param {string} subtitle The push subtitle.
76
- * @param {object} extras Any push extras.
77
- * @param {object} aps The raw aps dictionary (iOS only)
78
- * @param {number} [notification_id] The Android notification ID. Deprecated in favor of notificationId.
79
- * @param {string} [notificationId] The notification ID.
80
- */
81
- onPushReceived() {
82
- return;
83
- }
84
- /**
85
- * Event fired when notification opened.
86
- * @event notification_opened
87
- * @type {object}
88
- * @param {string} message The push alert message.
89
- * @param {object} extras Any push extras.
90
- * @param {number} [notification_id] The Android notification ID. Deprecated in favor of notificationId.
91
- * @param {string} [notificationId] The notification ID.
92
- * @param {string} [actionID] The ID of the notification action button if available.
93
- * @param {boolean} isForeground Will always be true if the user taps the main notification. Otherwise its defined by the notification action button.
94
- */
95
- onNotificationOpened() {
96
- return;
97
- }
98
- /**
99
- * Event fired when the user notification opt-in status changes.
100
- * @event notification_opt_in_status
101
- * @type {object}
102
- * @param {boolean} optIn If the user is opted in or not to user notifications.
103
- * @param {object} [authorizedNotificationSettings] iOS only. A map of authorized settings.
104
- * @param {boolean} authorizedNotificationSettings.alert If alerts are authorized.
105
- * @param {boolean} authorizedNotificationSettings.sound If sounds are authorized.
106
- * @param {boolean} authorizedNotificationSettings.badge If badges are authorized.
107
- * @param {boolean} authorizedNotificationSettings.carPlay If car play is authorized.
108
- * @param {boolean} authorizedNotificationSettings.lockScreen If the lock screen is authorized.
109
- * @param {boolean} authorizedNotificationSettings.notificationCenter If the notification center is authorized.
110
- */
111
- onNotificationOptInStatus() {
112
- return;
113
- }
114
- /**
115
- * Re-attaches document event listeners in this webview
116
- */
117
- reattach() {
118
- return;
119
- }
120
- /**
121
- * Initailizes Urban Airship.
122
- *
123
- * The plugin will automatically call takeOff during the next app init in
124
- * order to properly handle incoming push. If takeOff is called multiple times
125
- * in a session, or if the config is different than the previous sesssion, the
126
- * new config will not be used until the next app start.
127
- * @param {object} config The Urban Airship config.
128
- * @param {string} config.site Sets the cloud site, must be either EU or US.
129
- * @param {object} config.development The Urban Airship development config.
130
- * @param {string} config.development.appKey The development appKey.
131
- * @param {string} config.development.appSecret The development appSecret.
132
- * @param {object} config.production The Urban Airship production config.
133
- * @param {string} config.production.appKey The production appKey.
134
- * @param {string} config.production.appSecret The production appSecret.
135
- */
136
- takeOff(config) {
137
- return;
138
- }
139
- /**
140
- * Sets the Android notification config. Values not set will fallback to any values set in the config.xml.
141
- * @param {object} config The notification config.
142
- * @param {string} [config.icon] The name of the drawable resource to use as the notification icon.
143
- * @param {string} [config.largeIcon] The name of the drawable resource to use as the notification large icon.
144
- * @param {string} [config.accentColor] The notification accent color. Format is #AARRGGBB.
145
- */
146
- setAndroidNotificationConfig(config) {
147
- return;
148
- }
149
- /**
150
- * Sets the default behavior when the message center is launched from a push
151
- * notification. If set to false the message center must be manually launched.
152
- * @param {boolean} enabled true to automatically launch the default message center, false to disable.
153
- * @param {Function} [success] Success callback.
154
- * @param {function(message)} [failure] Failure callback.
155
- * @param {string} failure.message The error message.
156
- */
157
- setAutoLaunchDefaultMessageCenter(enabled) {
158
- return;
159
- }
160
- /**
161
- * Enables or disables user notifications.
162
- * @param {boolean} enabled true to enable notifications, false to disable.
163
- * @param {Function} [success] Success callback.
164
- * @param {function(message)} [failure] Failure callback.
165
- * @param {string} failure.message The error message.
166
- */
167
- setUserNotificationsEnabled(enabled) {
168
- return;
169
- }
170
- /**
171
- * Checks if user notifications are enabled or not.
172
- * @param {function(enabled)} success Success callback.
173
- * @param {boolean} success.enabled Flag indicating if user notifications is enabled or not.
174
- * @param {function(message)} [failure] Failure callback.
175
- * @param {string} failure.message The error message.
176
- */
177
- isUserNotificationsEnabled() {
178
- return;
179
- }
180
- /**
181
- * Checks if app notifications are enabled or not. Its possible to have `userNotificationsEnabled`
182
- * but app notifications being disabled if the user opted out of notifications.
183
- * @param {function(enabled)} success Success callback.
184
- * @param {boolean} success.enabled Flag indicating if app notifications is enabled or not.
185
- * @param {function(message)} [failure] Failure callback.
186
- * @param {string} failure.message The error message.
187
- */
188
- isAppNotificationsEnabled() {
189
- return;
190
- }
191
- /**
192
- * Returns the channel ID.
193
- * @param {function(ID)} success The function to call on success.
194
- * @param {string} success.ID The channel ID string
195
- * @param {failureCallback} [failure] The function to call on failure.
196
- * @param {string} failure.message The error message.
197
- */
198
- getChannelID() {
199
- return;
200
- }
201
- /**
202
- * Returns the last notification that launched the application.
203
- * @param {boolean} clear true to clear the notification.
204
- * @param {function(push)} success The function to call on success.
205
- * @param {object} success.push The push message object containing data associated with a push notification.
206
- * @param {string} success.push.message The push alert message.
207
- * @param {object} success.push.extras Any push extras.
208
- * @param {number} [success.push.notification_id] The Android notification ID.
209
- * @param {failureCallback} [failure] The function to call on failure.
210
- * @param {string} failure.message The error message.
211
- */
212
- getLaunchNotification(clear) {
213
- return;
214
- }
215
- /**
216
- * Returns the last received deep link.
217
- * @param {boolean} clear true to clear the deep link.
218
- * @param {function(push)} success The function to call on success.
219
- * @param {string} success.deepLink The deep link.
220
- * @param {failureCallback} [failure] The function to call on failure.
221
- * @param {string} failure.message The error message.
222
- */
223
- getDeepLink(clear) {
224
- return;
225
- }
226
- /**
227
- * Returns the tags as an array.
228
- * @param {function(tags)} success The function to call on success.
229
- * @param {Array} success.tags The tags as an array.
230
- * @param {failureCallback} [failure] The function to call on failure.
231
- * @param {string} failure.message The error message.
232
- */
233
- getTags() {
234
- return;
235
- }
236
- /**
237
- * Sets the tags.
238
- * @param {Array} tags an array of strings.
239
- * @param {Function} [success] Success callback.
240
- * @param {function(message)} [failure] Failure callback.
241
- * @param {string} failure.message The error message.
242
- */
243
- setTags(tags) {
244
- return;
245
- }
246
- /**
247
- * Returns the alias.
248
- * @deprecated Deprecated since 6.7.0 - to be removed in a future version of the plugin - please use getNamedUser
249
- * @param {function(currentAlias)} success The function to call on success.
250
- * @param {string} success.currentAlias The alias as a string.
251
- * @param {function(message)} [failure] Failure callback.
252
- * @param {string} failure.message The error message.
253
- */
254
- getAlias() {
255
- return;
256
- }
257
- /**
258
- * Sets the alias.
259
- * @deprecated Deprecated since 6.7.0 - to be removed in a future version of the plugin - please use setNamedUser
260
- * @param {string} alias string
261
- * @param {Function} [success] Success callback.
262
- * @param {function(message)} [failure] Failure callback.
263
- * @param {string} failure.message The error message.
264
- */
265
- setAlias(alias) {
266
- return;
267
- }
268
- /**
269
- * Checks if quiet time is enabled or not.
270
- * @param {function(enabled)} success Success callback.
271
- * @param {boolean} success.enabled Flag indicating if quiet time is enabled or not.
272
- * @param {function(message)} [failure] Failure callback.
273
- * @param {string} failure.message The error message.
274
- */
275
- isQuietTimeEnabled() {
276
- return;
277
- }
278
- /**
279
- * Enables or disables quiet time.
280
- * @param {boolean} enabled true to enable quiet time, false to disable.
281
- * @param {Function} [success] Success callback.
282
- * @param {function(message)} [failure] Failure callback.
283
- * @param {string} failure.message The error message.
284
- */
285
- setQuietTimeEnabled(enabled) {
286
- return;
287
- }
288
- /**
289
- * Checks if the device is currently in quiet time.
290
- * @param {function(inQuietTime)} success Success callback.
291
- * @param {boolean} success.inQuietTime Flag indicating if quiet time is currently in effect.
292
- * @param {function(message)} [failure] Failure callback.
293
- * @param {string} failure.message The error message.
294
- */
295
- isInQuietTime() {
296
- return;
297
- }
298
- /**
299
- * Returns the quiet time as an object with the following:
300
- * "startHour": Number,
301
- * "startMinute": Number,
302
- * "endHour": Number,
303
- * "endMinute": Number
304
- * @param {function(quietTime)} success The function to call on success.
305
- * @param {object} success.quietTime The quietTime object represents a timespan during
306
- * which notifications should be silenced.
307
- * @param {function(message)} [failure] Failure callback.
308
- * @param {string} failure.message The error message.
309
- */
310
- getQuietTime() {
311
- return;
312
- }
313
- /**
314
- * Sets the quiet time.
315
- * @param {number} startHour for quiet time.
316
- * @param {number} startMinute for quiet time.
317
- * @param {number} endHour for quiet time.
318
- * @param {number} endMinute for quiet time.
319
- * @param {Function} [success] Success callback.
320
- * @param {function(message)} [failure] Failure callback.
321
- * @param {string} failure.message The error message.
322
- */
323
- setQuietTime(startHour, startMinute, endHour, endMinute) {
324
- return;
325
- }
326
- /**
327
- * Enables or disables analytics.
328
- *
329
- * Disabling analytics will delete any locally stored events
330
- * and prevent any events from uploading. Features that depend on analytics being
331
- * enabled may not work properly if it's disabled (reports, region triggers,
332
- * location segmentation, push to local time).
333
- * @param {boolean} enabled true to enable analytics, false to disable.
334
- * @param {Function} [success] Success callback.
335
- * @param {function(message)} [failure] Failure callback.
336
- * @param {string} failure.message The error message.
337
- */
338
- setAnalyticsEnabled(enabled) {
339
- return;
340
- }
341
- /**
342
- * Checks if analytics is enabled or not.
343
- * @param {function(enabled)} success Success callback.
344
- * @param {boolean} success.enabled Flag indicating if analytics is enabled or not.
345
- * @param {function(message)} [failure] Failure callback.
346
- * @param {string} failure.message The error message.
347
- */
348
- isAnalyticsEnabled() {
349
- return;
350
- }
351
- /**
352
- * Returns the named user ID.
353
- * @param {function(namedUser)} success The function to call on success.
354
- * @param {string} success.namedUser The named user ID as a string.
355
- * @param {function(message)} [failure] Failure callback.
356
- * @param {string} failure.message The error message.
357
- */
358
- getNamedUser() {
359
- return;
360
- }
361
- /**
362
- * Sets the named user ID.
363
- * @param {string} namedUser identifier string.
364
- * @param {Function} [success] Success callback.
365
- * @param {function(message)} [failure] Failure callback.
366
- * @param {string} failure.message The error message.
367
- */
368
- setNamedUser(namedUser) {
369
- return;
370
- }
371
- /**
372
- * Runs an Urban Airship action.
373
- * @param {string} actionName action as a string.
374
- * @param {*} actionValue
375
- * @param {function(result)} [success] The function to call on success.
376
- * @param {object} success.result The result's value.
377
- * @param {function(message)} [failure] Failure callback.
378
- * @param {string} failure.message The error message.
379
- */
380
- runAction(actionName, actionValue) {
381
- return;
382
- }
383
- /**
384
- * Creates an editor to modify the named user tag groups.
385
- */
386
- editNamedUserTagGroups() {
387
- return;
388
- }
389
- /**
390
- * Creates an editor to modify the channel tag groups.
391
- */
392
- editChannelTagGroups() {
393
- return;
394
- }
395
- /**
396
- * Creates an editor to modify the channel attributes.
397
- */
398
- editChannelAttributes() {
399
- return;
400
- }
401
- /**
402
- * Creates an editor to modify the named user attributes.
403
- */
404
- editNamedUserAttributes() {
405
- return;
406
- }
407
- /**
408
- * Creates an editor to modify the channel subscription lists.
409
- * @returns {ChannelSubscriptionListEditor} A subscription list editor instance.
410
- * @since 13.3.0
411
- */
412
- editChannelSubscriptionLists() {
413
- return;
414
- }
415
- /**
416
- * Creates an editor to modify the contact subscription lists.
417
- * @returns {ContactSubscriptionListEditor} A subscription list editor instance.
418
- * @since 13.3.0
419
- */
420
- editContactSubscriptionLists() {
421
- return;
422
- }
423
- /**
424
- * Returns the current set of subscription lists for the current channel,
425
- * optionally applying pending subscription list changes that will be applied during the next channel update.
426
- * An empty set indicates that this contact is not subscribed to any lists.
427
- * @param {Function} [success] Success callback.
428
- * @param {string} failure.message The error message.
429
- */
430
- getChannelSubscriptionLists() {
431
- return;
432
- }
433
- /**
434
- * Returns the current set of subscription lists for the current contact,
435
- * optionally applying pending subscription list changes that will be applied during the next contact update.
436
- * An empty set indicates that this contact is not subscribed to any lists.
437
- * @param {Function} [success] Success callback.
438
- * @param {string} failure.message The error message.
439
- */
440
- getContactSubscriptionLists() {
441
- return;
442
- }
443
- /**
444
- * Sets an associated identifier for the Connect data stream.
445
- * @param key Custom key for identifier.
446
- * @param identifier The identifier value.
447
- * @param {Function} [success] Success callback.
448
- * @param {function(message)} [failure] Failure callback.
449
- * @param {string} failure.message The error message.
450
- */
451
- setAssociatedIdentifier(key, identifier) {
452
- return;
453
- }
454
- // Location
455
- /**
456
- * Enables or disables Urban Airship location services.
457
- * @param {boolean} enabled true to enable location, false to disable.
458
- * @param {Function} [success] Success callback.
459
- * @param {function(message)} [failure] Failure callback.
460
- * @param {string} failure.message The error message.
461
- */
462
- setLocationEnabled(enabled) {
463
- return;
464
- }
465
- /**
466
- * Checks if location is enabled or not.
467
- * @param {function(enabled)} success Success callback.
468
- * @param {boolean} success.enabled Flag indicating if location is enabled or not.
469
- * @param {function(message)} [failure] Failure callback.
470
- * @param {string} failure.message The error message.
471
- * @deprecated removed in version 8.0
472
- */
473
- isLocationEnabled() {
474
- return;
475
- }
476
- /**
477
- * Enables or disables background location.
478
- * @param {boolean} enabled true to enable background location, false to disable.
479
- * @param {Function} [success] Success callback.
480
- * @param {function(message)} [failure] Failure callback.
481
- * @param {string} failure.message The error message.
482
- * @deprecated removed in version 8.0
483
- */
484
- setBackgroundLocationEnabled(enabled) {
485
- return;
486
- }
487
- /**
488
- * Checks if background location is enabled or not.
489
- * @param {function(enabled)} success Success callback.
490
- * @param {boolean} success.enabled Flag indicating if background location updates are enabled or not.
491
- * @param {function(message)} [failure] Failure callback.
492
- * @param {string} failure.message The error message.
493
- * @deprecated removed in version 8.0
494
- */
495
- isBackgroundLocationEnabled() {
496
- return;
497
- }
498
- /**
499
- * Displays the message center.
500
- * @param {Function} [success] Success callback.
501
- * @param {function(message)} [failure] Failure callback.
502
- * @param {string} failure.message The error message.
503
- */
504
- displayMessageCenter() {
505
- return;
506
- }
507
- /**
508
- * Dismiss the message center.
509
- * @param {Function} [success] Success callback.
510
- * @param {function(message)} [failure] Failure callback.
511
- * @param {string} failure.message The error message.
512
- */
513
- dismissMessageCenter() {
514
- return;
515
- }
516
- /**
517
- * Dismiss the inbox message.
518
- * @param {Function} [success] Success callback.
519
- * @param {function(message)} [failure] Failure callback.
520
- * @param {string} failure.message The error message.
521
- */
522
- dismissInboxMessage() {
523
- return;
524
- }
525
- /**
526
- * Dismiss the inbox message in the overlay.
527
- * @param {Function} [success] Success callback.
528
- * @param {function(message)} [failure] Failure callback.
529
- * @param {string} failure.message The error message.
530
- * @deprecated removed in version 10.0
531
- */
532
- dismissOverlayInboxMessage() {
533
- return;
534
- }
535
- /**
536
- * Gets the array of inbox messages. Each message will have the following properties:
537
- * "id": string - The messages ID. Needed to display, mark as read, or delete the message.
538
- * "title": string - The message title.
539
- * "sentDate": number - The message sent date in milliseconds.
540
- * "listIconUrl": string, optional - The icon url for the message.
541
- * "isRead": boolean - The unread/read status of the message.
542
- * "extras": object - String to String map of any message extras.
543
- * @param {function(messages)} success The function to call on success.
544
- * @param {Array} success.messages The array of inbox messages.
545
- * @param {function(message)} [failure] Failure callback.
546
- * @param {string} failure.message The error message.
547
- */
548
- getInboxMessages() {
549
- return;
550
- }
551
- /**
552
- * Marks an inbox message read.
553
- * @param {string} messageId The ID of the message to mark as read.
554
- * @param {Function} [success] Success callback.
555
- * @param {function(message)} [failure] Failure callback.
556
- * @param {string} failure.message The error message.
557
- */
558
- markInboxMessageRead(messageId) {
559
- return;
560
- }
561
- /**
562
- * Deletes an inbox message.
563
- * @param {string} messageId The ID of the message to delete.
564
- * @param {Function} [success] Success callback.
565
- * @param {function(message)} [failure] Failure callback.
566
- * @param {string} failure.message The error message.
567
- */
568
- deleteInboxMessage(messageId) {
569
- return;
570
- }
571
- /**
572
- * Displays the inbox message using a full screen view.
573
- * @param {string} messageId The ID of the message to display.
574
- * @param {Function} [success] Success callback.
575
- * @param {function(message)} [failure] Failure callback.
576
- * @param {string} failure.message The error message.
577
- */
578
- displayInboxMessage(messageId) {
579
- return;
580
- }
581
- /**
582
- * Forces the inbox to refresh. This is normally not needed as the inbox
583
- * will automatically refresh on foreground or when a push arrives thats
584
- * associated with a message, but it can be useful when providing a refresh
585
- * button for the message listing.
586
- * @param {Function} [success] Success callback.
587
- * @param {function(message)} [failure] Failure callback.
588
- * @param {string} failure.message The error message.
589
- */
590
- refreshInbox() {
591
- return;
592
- }
593
- /**
594
- * Displays the inbox message using an overlay display.
595
- * @param {string} messageId The ID of the message to display.
596
- * @param {Function} [success] Success callback.
597
- * @param {function(message)} [failure] Failure callback.
598
- * @param {string} failure.message The error message.
599
- * @deprecated removed in version 10.0
600
- */
601
- overlayInboxMessage(messageId) {
602
- return;
603
- }
604
- /**
605
- * Clears a notification by identifier.
606
- * @param {string} identifier The notification identifier.
607
- * @param {Function} [success] Success callback.
608
- * @param {function(message)} [failure] Failure callback.
609
- */
610
- clearNotification(identifier) {
611
- return;
612
- }
613
- /**
614
- * Clears all notifications posted by the application.
615
- * @param {Function} [success] Success callback.
616
- * @param {function(message)} [failure] Failure callback.
617
- * @param {string} failure.message The error message.
618
- */
619
- clearNotifications() {
620
- return;
621
- }
622
- /**
623
- * Gets currently active notifications.
624
- *
625
- * Note: On Android this functionality is only supported on Android M or higher.
626
- * @param {function(messages)} [success] Success callback.
627
- * @param {function(message)} [failure] Failure callback.
628
- */
629
- getActiveNotifications() {
630
- return;
631
- }
632
- // iOS only
633
- /**
634
- * Enables or disables auto badge. Defaults to `NO`.
635
- * @param {boolean} enabled true to enable auto badge, false to disable.
636
- * @param {Function} [success] Success callback.
637
- * @param {function(message)} [failure] Failure callback.
638
- * @param {string} failure.message The error message.
639
- */
640
- setAutobadgeEnabled(enabled) {
641
- return;
642
- }
643
- /**
644
- * Sets the badge number.
645
- * @param count number specified badge to set.
646
- * @param {Function} [success] Success callback.
647
- * @param {function(message)} [failure] Failure callback.
648
- * @param {string} failure.message The error message.
649
- */
650
- setBadgeNumber(count) {
651
- return;
652
- }
653
- /**
654
- * Returns the current badge number.
655
- * @param {function(badgeNumber)} success The function to call on success.
656
- * @param {int} success.badgeNumber The current application badge number.
657
- * @param {function(message)} [failure] Failure callback.
658
- * @param {string} failure.message The error message.
659
- */
660
- getBadgeNumber() {
661
- return;
662
- }
663
- /**
664
- * Clears the badge.
665
- * @param {Function} [success] Success callback.
666
- * @param {function(message)} [failure] Failure callback.
667
- * @param {string} failure.message The error message.
668
- */
669
- resetBadge() {
670
- return;
671
- }
672
- /**
673
- * Sets the iOS notification types. Specify the combination of
674
- * badges, sound and alerts that are desired.
675
- * @param types specified notification types.
676
- * @param {Function} [success] Success callback.
677
- * @param {function(message)} [failure] Failure callback.
678
- * @param {string} failure.message The error message.
679
- */
680
- setNotificationTypes(types) {
681
- return;
682
- }
683
- /**
684
- * Sets the iOS presentation options. Specify the combination of
685
- * badges, sound and alerts that are desired.
686
- * @param options types specified presentation options.
687
- * @param {Function} [success] Success callback.
688
- * @param {function(message)} [failure] Failure callback.
689
- * @param {string} failure.message The error message.
690
- */
691
- setPresentationOptions(options) {
692
- return;
693
- }
694
- // Android only
695
- /**
696
- * Checks if notification sound is enabled or not.
697
- * @param {function(enabled)} success Success callback.
698
- * @param {boolean} success.enabled Flag indicating if sound is enabled or not.
699
- * @param {function(message)} [failure] Failure callback.
700
- * @param {string} failure.message The error message.
701
- */
702
- isSoundEnabled() {
703
- return;
704
- }
705
- /**
706
- * Enables or disables notification sound.
707
- * @param {boolean} enabled true to enable sound, false to disable.
708
- * @param {Function} [success] Success callback.
709
- * @param {function(message)} [failure] Failure callback.
710
- * @param {string} failure.message The error message.
711
- */
712
- setSoundEnabled(enabled) {
713
- return;
714
- }
715
- /**
716
- * Checks if notification vibration is enabled or not.
717
- * @param {function(enabled)} success Success callback.
718
- * @param {boolean} success.enabled Flag indicating if vibration is enabled or not.
719
- * @param {function(message)} [failure] Failure callback.
720
- * @param {string} failure.message The error message.
721
- */
722
- isVibrateEnabled() {
723
- return;
724
- }
725
- /**
726
- * Enables or disables notification vibration.
727
- * @param {boolean} enabled true to enable vibration, false to disable.
728
- * @param {Function} [success] Success callback.
729
- * @param {function(message)} [failure] Failure callback.
730
- * @param {string} failure.message The error message.
731
- */
732
- setVibrateEnabled(enabled) {
733
- return;
734
- }
735
- /**
736
- * Adds a custom event.
737
- * @param {object} event The custom event object.
738
- * @param {string} event.name The event's name.
739
- * @param {number} [event.value] The event's value.
740
- * @param {string} [event.transactionId] The event's transaction ID.
741
- * @param {object} [event.properties] The event's properties. Only numbers, booleans, strings, and array of strings are supported.
742
- * @param {Function} [success] Success callback.
743
- * @param {function(message)} [failure] Failure callback.
744
- * @param {string} failure.message The error message.
745
- */
746
- addCustomEvent(event) {
747
- return;
748
- }
749
- /**
750
- * Initiates screen tracking for a specific app screen, must be called once per tracked screen.
751
- * @param {string} screen The screen's string identifier.
752
- * @param {Function} [success] Success callback.
753
- * @param {function(message)} [failure] Failure callback.
754
- * @param {string} failure.message The error message.
755
- * @since 11.0.0
756
- */
757
- trackScreen(screen) {
758
- return;
759
- }
760
- /**
761
- * Enables features, adding them to the set of currently enabled features.
762
- * @param {Array<string>} features The features to enable.
763
- * @param {Function} [success] Success callback.
764
- * @param {function(message)} [failure] Failure callback.
765
- * @param {string} failure.message The error message.
766
- * @since 13.0.0
767
- */
768
- enableFeature(features) {
769
- return;
770
- }
771
- /**
772
- * Disables features, removing them from the set of currently enabled features.
773
- * @param {Array<string>} features The features to disable.
774
- * @param {Function} [success] Success callback.
775
- * @param {function(message)} [failure] Failure callback.
776
- * @param {string} failure.message The error message.
777
- * @since 13.0.0
778
- */
779
- disableFeature(features) {
780
- return;
781
- }
32
+ var UrbanAirShip = /** @class */ (function (_super) {
33
+ __extends(UrbanAirShip, _super);
34
+ function UrbanAirShip() {
35
+ return _super !== null && _super.apply(this, arguments) || this;
36
+ }
37
+ UrbanAirShip.prototype.onDeepLink = function () { return cordova(this, "onDeepLink", { "eventObservable": true, "event": "urbanairship.deep_link", "element": "document" }, arguments); };
38
+ UrbanAirShip.prototype.onRegistration = function () { return cordova(this, "onRegistration", { "eventObservable": true, "event": "urbanairship.registration", "element": "document" }, arguments); };
39
+ UrbanAirShip.prototype.onInboxUpdated = function () { return cordova(this, "onInboxUpdated", { "eventObservable": true, "event": "urbanairship.inbox_updated", "element": "document" }, arguments); };
40
+ UrbanAirShip.prototype.onShowInbox = function () { return cordova(this, "onShowInbox", { "eventObservable": true, "event": "urbanairship.show_inbox", "element": "document" }, arguments); };
41
+ UrbanAirShip.prototype.onPushReceived = function () { return cordova(this, "onPushReceived", { "eventObservable": true, "event": "urbanairship.push", "element": "document" }, arguments); };
42
+ UrbanAirShip.prototype.onNotificationOpened = function () { return cordova(this, "onNotificationOpened", { "eventObservable": true, "event": "urbanairship.notification_opened", "element": "document" }, arguments); };
43
+ UrbanAirShip.prototype.onNotificationOptInStatus = function () { return cordova(this, "onNotificationOptInStatus", { "eventObservable": true, "event": "urbanairship.notification_opt_in_status", "element": "document" }, arguments); };
44
+ UrbanAirShip.prototype.reattach = function () { return cordova(this, "reattach", { "sync": true }, arguments); };
45
+ UrbanAirShip.prototype.takeOff = function (config) { return cordova(this, "takeOff", {}, arguments); };
46
+ UrbanAirShip.prototype.setAndroidNotificationConfig = function (config) { return cordova(this, "setAndroidNotificationConfig", {}, arguments); };
47
+ UrbanAirShip.prototype.setAutoLaunchDefaultMessageCenter = function (enabled) { return cordova(this, "setAutoLaunchDefaultMessageCenter", {}, arguments); };
48
+ UrbanAirShip.prototype.setUserNotificationsEnabled = function (enabled) { return cordova(this, "setUserNotificationsEnabled", {}, arguments); };
49
+ UrbanAirShip.prototype.isUserNotificationsEnabled = function () { return cordova(this, "isUserNotificationsEnabled", {}, arguments); };
50
+ UrbanAirShip.prototype.isAppNotificationsEnabled = function () { return cordova(this, "isAppNotificationsEnabled", {}, arguments); };
51
+ UrbanAirShip.prototype.getChannelID = function () { return cordova(this, "getChannelID", {}, arguments); };
52
+ UrbanAirShip.prototype.getLaunchNotification = function (clear) { return cordova(this, "getLaunchNotification", {}, arguments); };
53
+ UrbanAirShip.prototype.getDeepLink = function (clear) { return cordova(this, "getDeepLink", {}, arguments); };
54
+ UrbanAirShip.prototype.getTags = function () { return cordova(this, "getTags", {}, arguments); };
55
+ UrbanAirShip.prototype.setTags = function (tags) { return cordova(this, "setTags", {}, arguments); };
56
+ UrbanAirShip.prototype.getAlias = function () { return cordova(this, "getAlias", {}, arguments); };
57
+ UrbanAirShip.prototype.setAlias = function (alias) { return cordova(this, "setAlias", {}, arguments); };
58
+ UrbanAirShip.prototype.isQuietTimeEnabled = function () { return cordova(this, "isQuietTimeEnabled", {}, arguments); };
59
+ UrbanAirShip.prototype.setQuietTimeEnabled = function (enabled) { return cordova(this, "setQuietTimeEnabled", {}, arguments); };
60
+ UrbanAirShip.prototype.isInQuietTime = function () { return cordova(this, "isInQuietTime", {}, arguments); };
61
+ UrbanAirShip.prototype.getQuietTime = function () { return cordova(this, "getQuietTime", {}, arguments); };
62
+ UrbanAirShip.prototype.setQuietTime = function (startHour, startMinute, endHour, endMinute) { return cordova(this, "setQuietTime", {}, arguments); };
63
+ UrbanAirShip.prototype.setAnalyticsEnabled = function (enabled) { return cordova(this, "setAnalyticsEnabled", {}, arguments); };
64
+ UrbanAirShip.prototype.isAnalyticsEnabled = function () { return cordova(this, "isAnalyticsEnabled", {}, arguments); };
65
+ UrbanAirShip.prototype.getNamedUser = function () { return cordova(this, "getNamedUser", {}, arguments); };
66
+ UrbanAirShip.prototype.setNamedUser = function (namedUser) { return cordova(this, "setNamedUser", {}, arguments); };
67
+ UrbanAirShip.prototype.runAction = function (actionName, actionValue) { return cordova(this, "runAction", {}, arguments); };
68
+ UrbanAirShip.prototype.editNamedUserTagGroups = function () { return cordova(this, "editNamedUserTagGroups", { "sync": true }, arguments); };
69
+ UrbanAirShip.prototype.editChannelTagGroups = function () { return cordova(this, "editChannelTagGroups", { "sync": true }, arguments); };
70
+ UrbanAirShip.prototype.editChannelAttributes = function () { return cordova(this, "editChannelAttributes", { "sync": true }, arguments); };
71
+ UrbanAirShip.prototype.editNamedUserAttributes = function () { return cordova(this, "editNamedUserAttributes", { "sync": true }, arguments); };
72
+ UrbanAirShip.prototype.editChannelSubscriptionLists = function () { return cordova(this, "editChannelSubscriptionLists", { "sync": true }, arguments); };
73
+ UrbanAirShip.prototype.editContactSubscriptionLists = function () { return cordova(this, "editContactSubscriptionLists", { "sync": true }, arguments); };
74
+ UrbanAirShip.prototype.getChannelSubscriptionLists = function () { return cordova(this, "getChannelSubscriptionLists", { "successIndex": 0, "errorIndex": 1 }, arguments); };
75
+ UrbanAirShip.prototype.getContactSubscriptionLists = function () { return cordova(this, "getContactSubscriptionLists", { "successIndex": 0, "errorIndex": 1 }, arguments); };
76
+ UrbanAirShip.prototype.setAssociatedIdentifier = function (key, identifier) { return cordova(this, "setAssociatedIdentifier", {}, arguments); };
77
+ UrbanAirShip.prototype.setLocationEnabled = function (enabled) { return cordova(this, "setLocationEnabled", {}, arguments); };
78
+ UrbanAirShip.prototype.isLocationEnabled = function () { return cordova(this, "isLocationEnabled", {}, arguments); };
79
+ UrbanAirShip.prototype.setBackgroundLocationEnabled = function (enabled) { return cordova(this, "setBackgroundLocationEnabled", {}, arguments); };
80
+ UrbanAirShip.prototype.isBackgroundLocationEnabled = function () { return cordova(this, "isBackgroundLocationEnabled", {}, arguments); };
81
+ UrbanAirShip.prototype.displayMessageCenter = function () { return cordova(this, "displayMessageCenter", {}, arguments); };
82
+ UrbanAirShip.prototype.dismissMessageCenter = function () { return cordova(this, "dismissMessageCenter", {}, arguments); };
83
+ UrbanAirShip.prototype.dismissInboxMessage = function () { return cordova(this, "dismissInboxMessage", {}, arguments); };
84
+ UrbanAirShip.prototype.dismissOverlayInboxMessage = function () { return cordova(this, "dismissOverlayInboxMessage", {}, arguments); };
85
+ UrbanAirShip.prototype.getInboxMessages = function () { return cordova(this, "getInboxMessages", {}, arguments); };
86
+ UrbanAirShip.prototype.markInboxMessageRead = function (messageId) { return cordova(this, "markInboxMessageRead", {}, arguments); };
87
+ UrbanAirShip.prototype.deleteInboxMessage = function (messageId) { return cordova(this, "deleteInboxMessage", {}, arguments); };
88
+ UrbanAirShip.prototype.displayInboxMessage = function (messageId) { return cordova(this, "displayInboxMessage", {}, arguments); };
89
+ UrbanAirShip.prototype.refreshInbox = function () { return cordova(this, "refreshInbox", {}, arguments); };
90
+ UrbanAirShip.prototype.overlayInboxMessage = function (messageId) { return cordova(this, "overlayInboxMessage", {}, arguments); };
91
+ UrbanAirShip.prototype.clearNotification = function (identifier) { return cordova(this, "clearNotification", {}, arguments); };
92
+ UrbanAirShip.prototype.clearNotifications = function () { return cordova(this, "clearNotifications", {}, arguments); };
93
+ UrbanAirShip.prototype.getActiveNotifications = function () { return cordova(this, "getActiveNotifications", {}, arguments); };
94
+ UrbanAirShip.prototype.setAutobadgeEnabled = function (enabled) { return cordova(this, "setAutobadgeEnabled", {}, arguments); };
95
+ UrbanAirShip.prototype.setBadgeNumber = function (count) { return cordova(this, "setBadgeNumber", {}, arguments); };
96
+ UrbanAirShip.prototype.getBadgeNumber = function () { return cordova(this, "getBadgeNumber", {}, arguments); };
97
+ UrbanAirShip.prototype.resetBadge = function () { return cordova(this, "resetBadge", {}, arguments); };
98
+ UrbanAirShip.prototype.setNotificationTypes = function (types) { return cordova(this, "setNotificationTypes", {}, arguments); };
99
+ UrbanAirShip.prototype.setPresentationOptions = function (options) { return cordova(this, "setPresentationOptions", {}, arguments); };
100
+ UrbanAirShip.prototype.isSoundEnabled = function () { return cordova(this, "isSoundEnabled", {}, arguments); };
101
+ UrbanAirShip.prototype.setSoundEnabled = function (enabled) { return cordova(this, "setSoundEnabled", {}, arguments); };
102
+ UrbanAirShip.prototype.isVibrateEnabled = function () { return cordova(this, "isVibrateEnabled", {}, arguments); };
103
+ UrbanAirShip.prototype.setVibrateEnabled = function (enabled) { return cordova(this, "setVibrateEnabled", {}, arguments); };
104
+ UrbanAirShip.prototype.addCustomEvent = function (event) { return cordova(this, "addCustomEvent", {}, arguments); };
105
+ UrbanAirShip.prototype.trackScreen = function (screen) { return cordova(this, "trackScreen", { "successIndex": 1, "errorIndex": 2 }, arguments); };
106
+ UrbanAirShip.prototype.enableFeature = function (features) { return cordova(this, "enableFeature", { "successIndex": 1, "errorIndex": 2 }, arguments); };
107
+ UrbanAirShip.prototype.disableFeature = function (features) { return cordova(this, "disableFeature", { "successIndex": 1, "errorIndex": 2 }, arguments); };
782
108
  /**
783
109
  * Sets the current enabled features, replacing any currently enabled features with the given set.
110
+ *
784
111
  * @param {Array<string>} features The features to set as enabled.
785
112
  * @param {Function} [success] Success callback.
786
113
  * @param {function(message)} [failure] Failure callback.
787
114
  * @param {string} failure.message The error message.
788
115
  * @since 13.0.0
789
116
  */
790
- setEnabledFeatures(features) {
791
- return;
792
- }
793
- /**
794
- * Gets the current enabled features.
795
- * @param {Function} [success] Success callback.
796
- * @param {function(message)} [failure] Failure callback.
797
- * @param {string} failure.message The error message.
798
- * @since 13.0.0
799
- */
800
- getEnabledFeatures() {
801
- return;
802
- }
803
- /**
804
- * Checks if all of the given features are enabled.
805
- * @param {Array<string>} features The features to check.
806
- * @param {Function} [success] Success callback.
807
- * @param {function(message)} [failure] Failure callback.
808
- * @param {string} failure.message The error message.
809
- * @since 13.0.0
810
- */
811
- isFeatureEnabled(features) {
812
- return;
813
- }
814
- /**
815
- * Returns the configuration of the Preference Center with the given ID trough a callback method.
816
- * @param {string} preferenceCenterId The preference center ID.
817
- * @param {Function} [success] Success callback.
818
- * @param {function(message)} [failure] Failure callback.
819
- * @param {string} failure.message The error message.
820
- * @since 13.3.0
821
- */
822
- getPreferenceCenterConfig(preferenceCenterId) {
823
- return;
824
- }
825
- /**
826
- * Opens the Preference Center with the given preferenceCenterId.
827
- * @param {string} prenferenceCenterId The preference center ID.
828
- * @param {Function} [success] Success callback.
829
- * @param {function(message)} [failure] Failure callback.
830
- * @param {string} failure.message The error message.
831
- * @since 13.0.0
832
- */
833
- openPreferenceCenter(prenferenceCenterId) {
834
- return;
835
- }
836
- /**
837
- * Overrides the locale setting.
838
- * @param {string} locale language and optional country code.
839
- * @param {function} [success] Success callback.
840
- * @param {function(message)} [failure] Failure callback.
841
- * @param {string} failure.message The error message.
842
- * @since 14.3.0
843
- */
844
- setCurrentLocale(locale) {
845
- return;
846
- }
847
- /**
848
- * Returns the currently set locale.
849
- * @param {function(locale)} [success] Success callback.
850
- * @param {string} success.locale The locale as a string.
851
- * @param {function(message)} [failure] Failure callback.
852
- * @param {string} failure.message The error message.
853
- * @since 14.3.0
854
- */
855
- getCurrentLocale() {
856
- return;
857
- }
858
- /**
859
- * Resets the current locale.
860
- * @param {function} [success] Success callback.
861
- * @param {function(message)} [failure] Failure callback.
862
- * @param {string} failure.message The error message.
863
- * @since 14.3.0
864
- */
865
- clearLocale() {
866
- return;
867
- }
868
- }
869
- UrbanAirShip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UrbanAirShip, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
870
- UrbanAirShip.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UrbanAirShip });
871
- __decorate([
872
- Cordova({
873
- eventObservable: true,
874
- event: 'urbanairship.deep_link',
875
- element: 'document',
876
- }),
877
- __metadata("design:type", Function),
878
- __metadata("design:paramtypes", []),
879
- __metadata("design:returntype", typeof (_a = typeof Observable !== "undefined" && Observable) === "function" ? _a : Object)
880
- ], UrbanAirShip.prototype, "onDeepLink", null);
881
- __decorate([
882
- Cordova({
883
- eventObservable: true,
884
- event: 'urbanairship.registration',
885
- element: 'document',
886
- }),
887
- __metadata("design:type", Function),
888
- __metadata("design:paramtypes", []),
889
- __metadata("design:returntype", typeof (_b = typeof Observable !== "undefined" && Observable) === "function" ? _b : Object)
890
- ], UrbanAirShip.prototype, "onRegistration", null);
891
- __decorate([
892
- Cordova({
893
- eventObservable: true,
894
- event: 'urbanairship.inbox_updated',
895
- element: 'document',
896
- }),
897
- __metadata("design:type", Function),
898
- __metadata("design:paramtypes", []),
899
- __metadata("design:returntype", typeof (_c = typeof Observable !== "undefined" && Observable) === "function" ? _c : Object)
900
- ], UrbanAirShip.prototype, "onInboxUpdated", null);
901
- __decorate([
902
- Cordova({
903
- eventObservable: true,
904
- event: 'urbanairship.show_inbox',
905
- element: 'document',
906
- }),
907
- __metadata("design:type", Function),
908
- __metadata("design:paramtypes", []),
909
- __metadata("design:returntype", typeof (_d = typeof Observable !== "undefined" && Observable) === "function" ? _d : Object)
910
- ], UrbanAirShip.prototype, "onShowInbox", null);
911
- __decorate([
912
- Cordova({
913
- eventObservable: true,
914
- event: 'urbanairship.push',
915
- element: 'document',
916
- }),
917
- __metadata("design:type", Function),
918
- __metadata("design:paramtypes", []),
919
- __metadata("design:returntype", typeof (_e = typeof Observable !== "undefined" && Observable) === "function" ? _e : Object)
920
- ], UrbanAirShip.prototype, "onPushReceived", null);
921
- __decorate([
922
- Cordova({
923
- eventObservable: true,
924
- event: 'urbanairship.notification_opened',
925
- element: 'document',
926
- }),
927
- __metadata("design:type", Function),
928
- __metadata("design:paramtypes", []),
929
- __metadata("design:returntype", typeof (_f = typeof Observable !== "undefined" && Observable) === "function" ? _f : Object)
930
- ], UrbanAirShip.prototype, "onNotificationOpened", null);
931
- __decorate([
932
- Cordova({
933
- eventObservable: true,
934
- event: 'urbanairship.notification_opt_in_status',
935
- element: 'document',
936
- }),
937
- __metadata("design:type", Function),
938
- __metadata("design:paramtypes", []),
939
- __metadata("design:returntype", typeof (_g = typeof Observable !== "undefined" && Observable) === "function" ? _g : Object)
940
- ], UrbanAirShip.prototype, "onNotificationOptInStatus", null);
941
- __decorate([
942
- Cordova({
943
- sync: true,
944
- }),
945
- __metadata("design:type", Function),
946
- __metadata("design:paramtypes", []),
947
- __metadata("design:returntype", void 0)
948
- ], UrbanAirShip.prototype, "reattach", null);
949
- __decorate([
950
- Cordova(),
951
- __metadata("design:type", Function),
952
- __metadata("design:paramtypes", [Object]),
953
- __metadata("design:returntype", typeof (_h = typeof Promise !== "undefined" && Promise) === "function" ? _h : Object)
954
- ], UrbanAirShip.prototype, "takeOff", null);
955
- __decorate([
956
- Cordova(),
957
- __metadata("design:type", Function),
958
- __metadata("design:paramtypes", [Object]),
959
- __metadata("design:returntype", typeof (_j = typeof Promise !== "undefined" && Promise) === "function" ? _j : Object)
960
- ], UrbanAirShip.prototype, "setAndroidNotificationConfig", null);
961
- __decorate([
962
- Cordova(),
963
- __metadata("design:type", Function),
964
- __metadata("design:paramtypes", [Boolean]),
965
- __metadata("design:returntype", typeof (_k = typeof Promise !== "undefined" && Promise) === "function" ? _k : Object)
966
- ], UrbanAirShip.prototype, "setAutoLaunchDefaultMessageCenter", null);
967
- __decorate([
968
- Cordova(),
969
- __metadata("design:type", Function),
970
- __metadata("design:paramtypes", [Boolean]),
971
- __metadata("design:returntype", typeof (_l = typeof Promise !== "undefined" && Promise) === "function" ? _l : Object)
972
- ], UrbanAirShip.prototype, "setUserNotificationsEnabled", null);
973
- __decorate([
974
- Cordova(),
975
- __metadata("design:type", Function),
976
- __metadata("design:paramtypes", []),
977
- __metadata("design:returntype", typeof (_m = typeof Promise !== "undefined" && Promise) === "function" ? _m : Object)
978
- ], UrbanAirShip.prototype, "isUserNotificationsEnabled", null);
979
- __decorate([
980
- Cordova(),
981
- __metadata("design:type", Function),
982
- __metadata("design:paramtypes", []),
983
- __metadata("design:returntype", typeof (_o = typeof Promise !== "undefined" && Promise) === "function" ? _o : Object)
984
- ], UrbanAirShip.prototype, "isAppNotificationsEnabled", null);
985
- __decorate([
986
- Cordova(),
987
- __metadata("design:type", Function),
988
- __metadata("design:paramtypes", []),
989
- __metadata("design:returntype", typeof (_p = typeof Promise !== "undefined" && Promise) === "function" ? _p : Object)
990
- ], UrbanAirShip.prototype, "getChannelID", null);
991
- __decorate([
992
- Cordova(),
993
- __metadata("design:type", Function),
994
- __metadata("design:paramtypes", [Boolean]),
995
- __metadata("design:returntype", typeof (_q = typeof Promise !== "undefined" && Promise) === "function" ? _q : Object)
996
- ], UrbanAirShip.prototype, "getLaunchNotification", null);
997
- __decorate([
998
- Cordova(),
999
- __metadata("design:type", Function),
1000
- __metadata("design:paramtypes", [Boolean]),
1001
- __metadata("design:returntype", typeof (_r = typeof Promise !== "undefined" && Promise) === "function" ? _r : Object)
1002
- ], UrbanAirShip.prototype, "getDeepLink", null);
1003
- __decorate([
1004
- Cordova(),
1005
- __metadata("design:type", Function),
1006
- __metadata("design:paramtypes", []),
1007
- __metadata("design:returntype", typeof (_s = typeof Promise !== "undefined" && Promise) === "function" ? _s : Object)
1008
- ], UrbanAirShip.prototype, "getTags", null);
1009
- __decorate([
1010
- Cordova(),
1011
- __metadata("design:type", Function),
1012
- __metadata("design:paramtypes", [Array]),
1013
- __metadata("design:returntype", typeof (_t = typeof Promise !== "undefined" && Promise) === "function" ? _t : Object)
1014
- ], UrbanAirShip.prototype, "setTags", null);
1015
- __decorate([
1016
- Cordova(),
1017
- __metadata("design:type", Function),
1018
- __metadata("design:paramtypes", []),
1019
- __metadata("design:returntype", typeof (_u = typeof Promise !== "undefined" && Promise) === "function" ? _u : Object)
1020
- ], UrbanAirShip.prototype, "getAlias", null);
1021
- __decorate([
1022
- Cordova(),
1023
- __metadata("design:type", Function),
1024
- __metadata("design:paramtypes", [String]),
1025
- __metadata("design:returntype", typeof (_v = typeof Promise !== "undefined" && Promise) === "function" ? _v : Object)
1026
- ], UrbanAirShip.prototype, "setAlias", null);
1027
- __decorate([
1028
- Cordova(),
1029
- __metadata("design:type", Function),
1030
- __metadata("design:paramtypes", []),
1031
- __metadata("design:returntype", typeof (_w = typeof Promise !== "undefined" && Promise) === "function" ? _w : Object)
1032
- ], UrbanAirShip.prototype, "isQuietTimeEnabled", null);
1033
- __decorate([
1034
- Cordova(),
1035
- __metadata("design:type", Function),
1036
- __metadata("design:paramtypes", [Boolean]),
1037
- __metadata("design:returntype", typeof (_x = typeof Promise !== "undefined" && Promise) === "function" ? _x : Object)
1038
- ], UrbanAirShip.prototype, "setQuietTimeEnabled", null);
1039
- __decorate([
1040
- Cordova(),
1041
- __metadata("design:type", Function),
1042
- __metadata("design:paramtypes", []),
1043
- __metadata("design:returntype", typeof (_y = typeof Promise !== "undefined" && Promise) === "function" ? _y : Object)
1044
- ], UrbanAirShip.prototype, "isInQuietTime", null);
1045
- __decorate([
1046
- Cordova(),
1047
- __metadata("design:type", Function),
1048
- __metadata("design:paramtypes", []),
1049
- __metadata("design:returntype", typeof (_z = typeof Promise !== "undefined" && Promise) === "function" ? _z : Object)
1050
- ], UrbanAirShip.prototype, "getQuietTime", null);
1051
- __decorate([
1052
- Cordova(),
1053
- __metadata("design:type", Function),
1054
- __metadata("design:paramtypes", [Number, Number, Number, Number]),
1055
- __metadata("design:returntype", typeof (_0 = typeof Promise !== "undefined" && Promise) === "function" ? _0 : Object)
1056
- ], UrbanAirShip.prototype, "setQuietTime", null);
1057
- __decorate([
1058
- Cordova(),
1059
- __metadata("design:type", Function),
1060
- __metadata("design:paramtypes", [Boolean]),
1061
- __metadata("design:returntype", typeof (_1 = typeof Promise !== "undefined" && Promise) === "function" ? _1 : Object)
1062
- ], UrbanAirShip.prototype, "setAnalyticsEnabled", null);
1063
- __decorate([
1064
- Cordova(),
1065
- __metadata("design:type", Function),
1066
- __metadata("design:paramtypes", []),
1067
- __metadata("design:returntype", typeof (_2 = typeof Promise !== "undefined" && Promise) === "function" ? _2 : Object)
1068
- ], UrbanAirShip.prototype, "isAnalyticsEnabled", null);
1069
- __decorate([
1070
- Cordova(),
1071
- __metadata("design:type", Function),
1072
- __metadata("design:paramtypes", []),
1073
- __metadata("design:returntype", typeof (_3 = typeof Promise !== "undefined" && Promise) === "function" ? _3 : Object)
1074
- ], UrbanAirShip.prototype, "getNamedUser", null);
1075
- __decorate([
1076
- Cordova(),
1077
- __metadata("design:type", Function),
1078
- __metadata("design:paramtypes", [String]),
1079
- __metadata("design:returntype", typeof (_4 = typeof Promise !== "undefined" && Promise) === "function" ? _4 : Object)
1080
- ], UrbanAirShip.prototype, "setNamedUser", null);
1081
- __decorate([
1082
- Cordova(),
1083
- __metadata("design:type", Function),
1084
- __metadata("design:paramtypes", [String, Object]),
1085
- __metadata("design:returntype", typeof (_5 = typeof Promise !== "undefined" && Promise) === "function" ? _5 : Object)
1086
- ], UrbanAirShip.prototype, "runAction", null);
1087
- __decorate([
1088
- Cordova({ sync: true }),
1089
- __metadata("design:type", Function),
1090
- __metadata("design:paramtypes", []),
1091
- __metadata("design:returntype", typeof (_6 = typeof TagGroupEditor !== "undefined" && TagGroupEditor) === "function" ? _6 : Object)
1092
- ], UrbanAirShip.prototype, "editNamedUserTagGroups", null);
1093
- __decorate([
1094
- Cordova({ sync: true }),
1095
- __metadata("design:type", Function),
1096
- __metadata("design:paramtypes", []),
1097
- __metadata("design:returntype", typeof (_7 = typeof TagGroupEditor !== "undefined" && TagGroupEditor) === "function" ? _7 : Object)
1098
- ], UrbanAirShip.prototype, "editChannelTagGroups", null);
1099
- __decorate([
1100
- Cordova({ sync: true }),
1101
- __metadata("design:type", Function),
1102
- __metadata("design:paramtypes", []),
1103
- __metadata("design:returntype", typeof (_8 = typeof AttributesEditor !== "undefined" && AttributesEditor) === "function" ? _8 : Object)
1104
- ], UrbanAirShip.prototype, "editChannelAttributes", null);
1105
- __decorate([
1106
- Cordova({ sync: true }),
1107
- __metadata("design:type", Function),
1108
- __metadata("design:paramtypes", []),
1109
- __metadata("design:returntype", typeof (_9 = typeof AttributesEditor !== "undefined" && AttributesEditor) === "function" ? _9 : Object)
1110
- ], UrbanAirShip.prototype, "editNamedUserAttributes", null);
1111
- __decorate([
1112
- Cordova({ sync: true }),
1113
- __metadata("design:type", Function),
1114
- __metadata("design:paramtypes", []),
1115
- __metadata("design:returntype", typeof (_10 = typeof ChannelSubscriptionListEditor !== "undefined" && ChannelSubscriptionListEditor) === "function" ? _10 : Object)
1116
- ], UrbanAirShip.prototype, "editChannelSubscriptionLists", null);
1117
- __decorate([
1118
- Cordova({ sync: true }),
1119
- __metadata("design:type", Function),
1120
- __metadata("design:paramtypes", []),
1121
- __metadata("design:returntype", typeof (_11 = typeof ContactSubscriptionListEditor !== "undefined" && ContactSubscriptionListEditor) === "function" ? _11 : Object)
1122
- ], UrbanAirShip.prototype, "editContactSubscriptionLists", null);
1123
- __decorate([
1124
- Cordova({
1125
- successIndex: 0,
1126
- errorIndex: 1,
1127
- }),
1128
- __metadata("design:type", Function),
1129
- __metadata("design:paramtypes", []),
1130
- __metadata("design:returntype", typeof (_12 = typeof Promise !== "undefined" && Promise) === "function" ? _12 : Object)
1131
- ], UrbanAirShip.prototype, "getChannelSubscriptionLists", null);
1132
- __decorate([
1133
- Cordova({
1134
- successIndex: 0,
1135
- errorIndex: 1,
1136
- }),
1137
- __metadata("design:type", Function),
1138
- __metadata("design:paramtypes", []),
1139
- __metadata("design:returntype", typeof (_13 = typeof Promise !== "undefined" && Promise) === "function" ? _13 : Object)
1140
- ], UrbanAirShip.prototype, "getContactSubscriptionLists", null);
1141
- __decorate([
1142
- Cordova(),
1143
- __metadata("design:type", Function),
1144
- __metadata("design:paramtypes", [String, String]),
1145
- __metadata("design:returntype", typeof (_14 = typeof Promise !== "undefined" && Promise) === "function" ? _14 : Object)
1146
- ], UrbanAirShip.prototype, "setAssociatedIdentifier", null);
1147
- __decorate([
1148
- Cordova(),
1149
- __metadata("design:type", Function),
1150
- __metadata("design:paramtypes", [Boolean]),
1151
- __metadata("design:returntype", typeof (_15 = typeof Promise !== "undefined" && Promise) === "function" ? _15 : Object)
1152
- ], UrbanAirShip.prototype, "setLocationEnabled", null);
1153
- __decorate([
1154
- Cordova(),
1155
- __metadata("design:type", Function),
1156
- __metadata("design:paramtypes", []),
1157
- __metadata("design:returntype", typeof (_16 = typeof Promise !== "undefined" && Promise) === "function" ? _16 : Object)
1158
- ], UrbanAirShip.prototype, "isLocationEnabled", null);
1159
- __decorate([
1160
- Cordova(),
1161
- __metadata("design:type", Function),
1162
- __metadata("design:paramtypes", [Boolean]),
1163
- __metadata("design:returntype", typeof (_17 = typeof Promise !== "undefined" && Promise) === "function" ? _17 : Object)
1164
- ], UrbanAirShip.prototype, "setBackgroundLocationEnabled", null);
1165
- __decorate([
1166
- Cordova(),
1167
- __metadata("design:type", Function),
1168
- __metadata("design:paramtypes", []),
1169
- __metadata("design:returntype", typeof (_18 = typeof Promise !== "undefined" && Promise) === "function" ? _18 : Object)
1170
- ], UrbanAirShip.prototype, "isBackgroundLocationEnabled", null);
1171
- __decorate([
1172
- Cordova(),
1173
- __metadata("design:type", Function),
1174
- __metadata("design:paramtypes", []),
1175
- __metadata("design:returntype", typeof (_19 = typeof Promise !== "undefined" && Promise) === "function" ? _19 : Object)
1176
- ], UrbanAirShip.prototype, "displayMessageCenter", null);
1177
- __decorate([
1178
- Cordova(),
1179
- __metadata("design:type", Function),
1180
- __metadata("design:paramtypes", []),
1181
- __metadata("design:returntype", typeof (_20 = typeof Promise !== "undefined" && Promise) === "function" ? _20 : Object)
1182
- ], UrbanAirShip.prototype, "dismissMessageCenter", null);
1183
- __decorate([
1184
- Cordova(),
1185
- __metadata("design:type", Function),
1186
- __metadata("design:paramtypes", []),
1187
- __metadata("design:returntype", typeof (_21 = typeof Promise !== "undefined" && Promise) === "function" ? _21 : Object)
1188
- ], UrbanAirShip.prototype, "dismissInboxMessage", null);
1189
- __decorate([
1190
- Cordova(),
1191
- __metadata("design:type", Function),
1192
- __metadata("design:paramtypes", []),
1193
- __metadata("design:returntype", typeof (_22 = typeof Promise !== "undefined" && Promise) === "function" ? _22 : Object)
1194
- ], UrbanAirShip.prototype, "dismissOverlayInboxMessage", null);
1195
- __decorate([
1196
- Cordova(),
1197
- __metadata("design:type", Function),
1198
- __metadata("design:paramtypes", []),
1199
- __metadata("design:returntype", typeof (_23 = typeof Promise !== "undefined" && Promise) === "function" ? _23 : Object)
1200
- ], UrbanAirShip.prototype, "getInboxMessages", null);
1201
- __decorate([
1202
- Cordova(),
1203
- __metadata("design:type", Function),
1204
- __metadata("design:paramtypes", [String]),
1205
- __metadata("design:returntype", typeof (_24 = typeof Promise !== "undefined" && Promise) === "function" ? _24 : Object)
1206
- ], UrbanAirShip.prototype, "markInboxMessageRead", null);
1207
- __decorate([
1208
- Cordova(),
1209
- __metadata("design:type", Function),
1210
- __metadata("design:paramtypes", [String]),
1211
- __metadata("design:returntype", typeof (_25 = typeof Promise !== "undefined" && Promise) === "function" ? _25 : Object)
1212
- ], UrbanAirShip.prototype, "deleteInboxMessage", null);
1213
- __decorate([
1214
- Cordova(),
1215
- __metadata("design:type", Function),
1216
- __metadata("design:paramtypes", [String]),
1217
- __metadata("design:returntype", typeof (_26 = typeof Promise !== "undefined" && Promise) === "function" ? _26 : Object)
1218
- ], UrbanAirShip.prototype, "displayInboxMessage", null);
1219
- __decorate([
1220
- Cordova(),
1221
- __metadata("design:type", Function),
1222
- __metadata("design:paramtypes", []),
1223
- __metadata("design:returntype", typeof (_27 = typeof Promise !== "undefined" && Promise) === "function" ? _27 : Object)
1224
- ], UrbanAirShip.prototype, "refreshInbox", null);
1225
- __decorate([
1226
- Cordova(),
1227
- __metadata("design:type", Function),
1228
- __metadata("design:paramtypes", [String]),
1229
- __metadata("design:returntype", typeof (_28 = typeof Promise !== "undefined" && Promise) === "function" ? _28 : Object)
1230
- ], UrbanAirShip.prototype, "overlayInboxMessage", null);
1231
- __decorate([
1232
- Cordova(),
1233
- __metadata("design:type", Function),
1234
- __metadata("design:paramtypes", [String]),
1235
- __metadata("design:returntype", typeof (_29 = typeof Promise !== "undefined" && Promise) === "function" ? _29 : Object)
1236
- ], UrbanAirShip.prototype, "clearNotification", null);
1237
- __decorate([
1238
- Cordova(),
1239
- __metadata("design:type", Function),
1240
- __metadata("design:paramtypes", []),
1241
- __metadata("design:returntype", typeof (_30 = typeof Promise !== "undefined" && Promise) === "function" ? _30 : Object)
1242
- ], UrbanAirShip.prototype, "clearNotifications", null);
1243
- __decorate([
1244
- Cordova(),
1245
- __metadata("design:type", Function),
1246
- __metadata("design:paramtypes", []),
1247
- __metadata("design:returntype", typeof (_31 = typeof Promise !== "undefined" && Promise) === "function" ? _31 : Object)
1248
- ], UrbanAirShip.prototype, "getActiveNotifications", null);
1249
- __decorate([
1250
- Cordova(),
1251
- __metadata("design:type", Function),
1252
- __metadata("design:paramtypes", [Boolean]),
1253
- __metadata("design:returntype", typeof (_32 = typeof Promise !== "undefined" && Promise) === "function" ? _32 : Object)
1254
- ], UrbanAirShip.prototype, "setAutobadgeEnabled", null);
1255
- __decorate([
1256
- Cordova(),
1257
- __metadata("design:type", Function),
1258
- __metadata("design:paramtypes", [Number]),
1259
- __metadata("design:returntype", typeof (_33 = typeof Promise !== "undefined" && Promise) === "function" ? _33 : Object)
1260
- ], UrbanAirShip.prototype, "setBadgeNumber", null);
1261
- __decorate([
1262
- Cordova(),
1263
- __metadata("design:type", Function),
1264
- __metadata("design:paramtypes", []),
1265
- __metadata("design:returntype", typeof (_34 = typeof Promise !== "undefined" && Promise) === "function" ? _34 : Object)
1266
- ], UrbanAirShip.prototype, "getBadgeNumber", null);
1267
- __decorate([
1268
- Cordova(),
1269
- __metadata("design:type", Function),
1270
- __metadata("design:paramtypes", []),
1271
- __metadata("design:returntype", typeof (_35 = typeof Promise !== "undefined" && Promise) === "function" ? _35 : Object)
1272
- ], UrbanAirShip.prototype, "resetBadge", null);
1273
- __decorate([
1274
- Cordova(),
1275
- __metadata("design:type", Function),
1276
- __metadata("design:paramtypes", [typeof (_36 = typeof NotificationType !== "undefined" && NotificationType) === "function" ? _36 : Object]),
1277
- __metadata("design:returntype", typeof (_37 = typeof Promise !== "undefined" && Promise) === "function" ? _37 : Object)
1278
- ], UrbanAirShip.prototype, "setNotificationTypes", null);
1279
- __decorate([
1280
- Cordova(),
1281
- __metadata("design:type", Function),
1282
- __metadata("design:paramtypes", [typeof (_38 = typeof PresentationOptions !== "undefined" && PresentationOptions) === "function" ? _38 : Object]),
1283
- __metadata("design:returntype", typeof (_39 = typeof Promise !== "undefined" && Promise) === "function" ? _39 : Object)
1284
- ], UrbanAirShip.prototype, "setPresentationOptions", null);
1285
- __decorate([
1286
- Cordova(),
1287
- __metadata("design:type", Function),
1288
- __metadata("design:paramtypes", []),
1289
- __metadata("design:returntype", typeof (_40 = typeof Promise !== "undefined" && Promise) === "function" ? _40 : Object)
1290
- ], UrbanAirShip.prototype, "isSoundEnabled", null);
1291
- __decorate([
1292
- Cordova(),
1293
- __metadata("design:type", Function),
1294
- __metadata("design:paramtypes", [Boolean]),
1295
- __metadata("design:returntype", typeof (_41 = typeof Promise !== "undefined" && Promise) === "function" ? _41 : Object)
1296
- ], UrbanAirShip.prototype, "setSoundEnabled", null);
1297
- __decorate([
1298
- Cordova(),
1299
- __metadata("design:type", Function),
1300
- __metadata("design:paramtypes", []),
1301
- __metadata("design:returntype", typeof (_42 = typeof Promise !== "undefined" && Promise) === "function" ? _42 : Object)
1302
- ], UrbanAirShip.prototype, "isVibrateEnabled", null);
1303
- __decorate([
1304
- Cordova(),
1305
- __metadata("design:type", Function),
1306
- __metadata("design:paramtypes", [Boolean]),
1307
- __metadata("design:returntype", typeof (_43 = typeof Promise !== "undefined" && Promise) === "function" ? _43 : Object)
1308
- ], UrbanAirShip.prototype, "setVibrateEnabled", null);
1309
- __decorate([
1310
- Cordova(),
1311
- __metadata("design:type", Function),
1312
- __metadata("design:paramtypes", [Object]),
1313
- __metadata("design:returntype", typeof (_44 = typeof Promise !== "undefined" && Promise) === "function" ? _44 : Object)
1314
- ], UrbanAirShip.prototype, "addCustomEvent", null);
1315
- __decorate([
1316
- Cordova({
1317
- successIndex: 1,
1318
- errorIndex: 2,
1319
- }),
1320
- __metadata("design:type", Function),
1321
- __metadata("design:paramtypes", [String]),
1322
- __metadata("design:returntype", typeof (_45 = typeof Promise !== "undefined" && Promise) === "function" ? _45 : Object)
1323
- ], UrbanAirShip.prototype, "trackScreen", null);
1324
- __decorate([
1325
- Cordova({
1326
- successIndex: 1,
1327
- errorIndex: 2,
1328
- }),
1329
- __metadata("design:type", Function),
1330
- __metadata("design:paramtypes", [Array]),
1331
- __metadata("design:returntype", typeof (_46 = typeof Promise !== "undefined" && Promise) === "function" ? _46 : Object)
1332
- ], UrbanAirShip.prototype, "enableFeature", null);
1333
- __decorate([
1334
- Cordova({
1335
- successIndex: 1,
1336
- errorIndex: 2,
1337
- }),
1338
- __metadata("design:type", Function),
1339
- __metadata("design:paramtypes", [Array]),
1340
- __metadata("design:returntype", typeof (_47 = typeof Promise !== "undefined" && Promise) === "function" ? _47 : Object)
1341
- ], UrbanAirShip.prototype, "disableFeature", null);
1342
- __decorate([
1343
- Cordova({
1344
- successIndex: 0,
1345
- errorIndex: 1,
1346
- }),
1347
- __metadata("design:type", Function),
1348
- __metadata("design:paramtypes", []),
1349
- __metadata("design:returntype", typeof (_48 = typeof Promise !== "undefined" && Promise) === "function" ? _48 : Object)
1350
- ], UrbanAirShip.prototype, "getEnabledFeatures", null);
1351
- __decorate([
1352
- Cordova({
1353
- successIndex: 1,
1354
- errorIndex: 2,
1355
- }),
1356
- __metadata("design:type", Function),
1357
- __metadata("design:paramtypes", [Array]),
1358
- __metadata("design:returntype", typeof (_49 = typeof Promise !== "undefined" && Promise) === "function" ? _49 : Object)
1359
- ], UrbanAirShip.prototype, "isFeatureEnabled", null);
1360
- __decorate([
1361
- Cordova({
1362
- successIndex: 1,
1363
- errorIndex: 2,
1364
- }),
1365
- __metadata("design:type", Function),
1366
- __metadata("design:paramtypes", [String]),
1367
- __metadata("design:returntype", typeof (_50 = typeof Promise !== "undefined" && Promise) === "function" ? _50 : Object)
1368
- ], UrbanAirShip.prototype, "getPreferenceCenterConfig", null);
1369
- __decorate([
1370
- Cordova({
1371
- successIndex: 1,
1372
- errorIndex: 2,
1373
- }),
1374
- __metadata("design:type", Function),
1375
- __metadata("design:paramtypes", [String]),
1376
- __metadata("design:returntype", typeof (_51 = typeof Promise !== "undefined" && Promise) === "function" ? _51 : Object)
1377
- ], UrbanAirShip.prototype, "openPreferenceCenter", null);
1378
- __decorate([
1379
- Cordova(),
1380
- __metadata("design:type", Function),
1381
- __metadata("design:paramtypes", [String]),
1382
- __metadata("design:returntype", typeof (_52 = typeof Promise !== "undefined" && Promise) === "function" ? _52 : Object)
1383
- ], UrbanAirShip.prototype, "setCurrentLocale", null);
1384
- __decorate([
1385
- Cordova(),
1386
- __metadata("design:type", Function),
1387
- __metadata("design:paramtypes", []),
1388
- __metadata("design:returntype", typeof (_53 = typeof Promise !== "undefined" && Promise) === "function" ? _53 : Object)
1389
- ], UrbanAirShip.prototype, "getCurrentLocale", null);
1390
- __decorate([
1391
- Cordova(),
1392
- __metadata("design:type", Function),
1393
- __metadata("design:paramtypes", []),
1394
- __metadata("design:returntype", typeof (_54 = typeof Promise !== "undefined" && Promise) === "function" ? _54 : Object)
1395
- ], UrbanAirShip.prototype, "clearLocale", null);
1396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UrbanAirShip, decorators: [{
117
+ UrbanAirShip.prototype.setEnabledFeatures = function (features) {
118
+ return;
119
+ };
120
+ UrbanAirShip.prototype.getEnabledFeatures = function () { return cordova(this, "getEnabledFeatures", { "successIndex": 0, "errorIndex": 1 }, arguments); };
121
+ UrbanAirShip.prototype.isFeatureEnabled = function (features) { return cordova(this, "isFeatureEnabled", { "successIndex": 1, "errorIndex": 2 }, arguments); };
122
+ UrbanAirShip.prototype.getPreferenceCenterConfig = function (preferenceCenterId) { return cordova(this, "getPreferenceCenterConfig", { "successIndex": 1, "errorIndex": 2 }, arguments); };
123
+ UrbanAirShip.prototype.openPreferenceCenter = function (prenferenceCenterId) { return cordova(this, "openPreferenceCenter", { "successIndex": 1, "errorIndex": 2 }, arguments); };
124
+ UrbanAirShip.prototype.setCurrentLocale = function (locale) { return cordova(this, "setCurrentLocale", {}, arguments); };
125
+ UrbanAirShip.prototype.getCurrentLocale = function () { return cordova(this, "getCurrentLocale", {}, arguments); };
126
+ UrbanAirShip.prototype.clearLocale = function () { return cordova(this, "clearLocale", {}, arguments); };
127
+ UrbanAirShip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: UrbanAirShip, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
128
+ UrbanAirShip.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: UrbanAirShip });
129
+ UrbanAirShip.pluginName = "UrbanAirShip";
130
+ UrbanAirShip.plugin = "urbanairship-cordova";
131
+ UrbanAirShip.pluginRef = "window.UAirship";
132
+ UrbanAirShip.repo = "https://www.npmjs.com/package/urbanairship-cordova";
133
+ UrbanAirShip.install = "ionic cordova plugin add urbanairship-cordova";
134
+ UrbanAirShip.platforms = ["Android", "iOS"];
135
+ UrbanAirShip = __decorate([], UrbanAirShip);
136
+ return UrbanAirShip;
137
+ }(AwesomeCordovaNativePlugin));
138
+ export { UrbanAirShip };
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: UrbanAirShip, decorators: [{
1397
140
  type: Injectable
1398
141
  }], propDecorators: { onDeepLink: [], onRegistration: [], onInboxUpdated: [], onShowInbox: [], onPushReceived: [], onNotificationOpened: [], onNotificationOptInStatus: [], reattach: [], takeOff: [], setAndroidNotificationConfig: [], setAutoLaunchDefaultMessageCenter: [], setUserNotificationsEnabled: [], isUserNotificationsEnabled: [], isAppNotificationsEnabled: [], getChannelID: [], getLaunchNotification: [], getDeepLink: [], getTags: [], setTags: [], getAlias: [], setAlias: [], isQuietTimeEnabled: [], setQuietTimeEnabled: [], isInQuietTime: [], getQuietTime: [], setQuietTime: [], setAnalyticsEnabled: [], isAnalyticsEnabled: [], getNamedUser: [], setNamedUser: [], runAction: [], editNamedUserTagGroups: [], editChannelTagGroups: [], editChannelAttributes: [], editNamedUserAttributes: [], editChannelSubscriptionLists: [], editContactSubscriptionLists: [], getChannelSubscriptionLists: [], getContactSubscriptionLists: [], setAssociatedIdentifier: [], setLocationEnabled: [], isLocationEnabled: [], setBackgroundLocationEnabled: [], isBackgroundLocationEnabled: [], displayMessageCenter: [], dismissMessageCenter: [], dismissInboxMessage: [], dismissOverlayInboxMessage: [], getInboxMessages: [], markInboxMessageRead: [], deleteInboxMessage: [], displayInboxMessage: [], refreshInbox: [], overlayInboxMessage: [], clearNotification: [], clearNotifications: [], getActiveNotifications: [], setAutobadgeEnabled: [], setBadgeNumber: [], getBadgeNumber: [], resetBadge: [], setNotificationTypes: [], setPresentationOptions: [], isSoundEnabled: [], setSoundEnabled: [], isVibrateEnabled: [], setVibrateEnabled: [], addCustomEvent: [], trackScreen: [], enableFeature: [], disableFeature: [], getEnabledFeatures: [], isFeatureEnabled: [], getPreferenceCenterConfig: [], openPreferenceCenter: [], setCurrentLocale: [], getCurrentLocale: [], clearLocale: [] } });
1399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvdXJiYW5haXJzaGlwL25neC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyx1Q0FBK0MsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQXdDbEM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsdURBQVEsQ0FBQTtJQUNSLHlEQUFTLENBQUE7SUFDVCx5REFBUyxDQUFBO0lBQ1QseURBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDN0IsNkRBQVEsQ0FBQTtJQUNSLCtEQUFTLENBQUE7SUFDVCwrREFBUyxDQUFBO0lBQ1QsK0RBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSzlCO2FBK0JZLFlBQWEsU0FBUSwwQkFBMEI7SUFDMUQ7Ozs7O09BS0c7SUFNSCxVQUFVO1FBQ1IsT0FBTztJQUNULENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBTUgsY0FBYztRQUNaLE9BQU87SUFDVCxDQUFDO0lBRUQ7OztPQUdHO0lBTUgsY0FBYztRQUNaLE9BQU87SUFDVCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBTUgsV0FBVztRQUNULE9BQU87SUFDVCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFNSCxjQUFjO1FBQ1osT0FBTztJQUNULENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBTUgsb0JBQW9CO1FBQ2xCLE9BQU87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TUFjbkIsWUFBWSxNQWFaLG1CQUFtQixNQVduQixpQkFBaUIsTUFXakIsa0JBQWtCLE1BWWxCLHNCQUFzQixNQWN0QixtQkFBbUIsTUFZbkIsY0FBYyxNQVlkLGNBQWMsTUFXZCxVQUFVLE1BYVYsb0JBQW9CLE1BYXBCLHNCQUFzQixNQWN0QixjQUFjLE1BWWQsZUFBZSxNQVlmLGdCQUFnQixNQVloQixpQkFBaUIsTUFnQmpCLGNBQWMsTUFnQmQsV0FBVyxNQWdCWCxhQUFhLE1BZ0JiLGNBQWMsTUEyQmQsa0JBQWtCLE1BZ0JsQixnQkFBZ0IsTUFnQmhCLHlCQUF5QixNQWdCekIsb0JBQW9CLE1BYXBCLGdCQUFnQixNQWFoQixnQkFBZ0IsTUFZaEIsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsdWdpbiwgQ29yZG92YSwgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4gfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBVQWlyc2hpcCBUYWcgRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnR3JvdXBFZGl0b3Ige1xuICBhZGRUYWdzKHRhZ0dyb3VwOiBzdHJpbmcsIHRhZ3M6IHN0cmluZ1tdKTogVGFnR3JvdXBFZGl0b3I7XG4gIHJlbW92ZVRhZ3ModGFnR3JvdXA6IHN0cmluZywgdGFnczogc3RyaW5nW10pOiBUYWdHcm91cEVkaXRvcjtcbiAgYXBwbHkoc3VjY2VzczogKCkgPT4gdm9pZCwgZmFpbHVyZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCk6IFRhZ0dyb3VwRWRpdG9yO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgVUFpcnNoaXAgQXR0cmlidXRlcyBFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVzRWRpdG9yIHtcbiAgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlKTogQXR0cmlidXRlc0VkaXRvcjtcbiAgcmVtb3ZlQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IEF0dHJpYnV0ZXNFZGl0b3I7XG4gIGFwcGx5KHN1Y2Nlc3M6ICgpID0+IHZvaWQsIGZhaWx1cmU6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpOiBBdHRyaWJ1dGVzRWRpdG9yO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgVUFpcnNoaXAgQ2hhbm5lbFN1YnNjcmlwdGlvbkxpc3QgRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RFZGl0b3Ige1xuICBzdWJzY3JpYmUoc3Vic2NyaXB0aW9uTGlzdElEOiBzdHJpbmcpOiBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvcjtcbiAgdW5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uTGlzdElEOiBzdHJpbmcpOiBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvcjtcbiAgYXBwbHkoc3VjY2VzczogKCkgPT4gdm9pZCwgZmFpbHVyZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCk6IENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xufVxuXG5leHBvcnQgdHlwZSBDb250YWN0U3Vic2NyaXB0aW9uU2NvcGUgPSAnYXBwJyB8ICdlbWFpbCcgfCAncHVzaCcgfCAnc21zJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFVBaXJzaGlwIENvbnRhY3RTdWJzY3JpcHRpb25MaXN0IEVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yIHtcbiAgc3Vic2NyaWJlKHN1YnNjcmlwdGlvbkxpc3RJRDogc3RyaW5nLCBjb250YWN0U2NvcGU6IENvbnRhY3RTdWJzY3JpcHRpb25TY29wZSk6IENvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xuICB1bnN1YnNjcmliZShzdWJzY3JpcHRpb25MaXN0SUQ6IHN0cmluZywgY29udGFjdFNjb3BlOiBDb250YWN0U3Vic2NyaXB0aW9uU2NvcGUpOiBDb250YWN0U3Vic2NyaXB0aW9uTGlzdEVkaXRvcjtcbiAgYXBwbHkoc3VjY2VzczogKCkgPT4gdm9pZCwgZmFpbHVyZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCk6IENvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yO1xufVxuXG4vKipcbiAqIEVudW0gZm9yIG5vdGlmaWNhdGlvbiB0eXBlcy5cbiAqIEByZWFkb25seVxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uVHlwZSB7XG4gIG5vbmUgPSAwLFxuICBiYWRnZSA9IDEsXG4gIHNvdW5kID0gMixcbiAgYWxlcnQgPSA0LFxufVxuXG4vKipcbiAqIEVudW0gZm9yIHByZXNlbnRhdGlvbiBvcHRpb25zLlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZW51bSBQcmVzZW50YXRpb25PcHRpb25zIHtcbiAgbm9uZSA9IDAsXG4gIGJhZGdlID0gMSxcbiAgc291bmQgPSAyLFxuICBhbGVydCA9IDQsXG59XG5cbi8qKlxuICogQG5hbWUgVXJiYW5BaXJTaGlwXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcGx1Z2luIGRvZXMgc29tZXRoaW5nXG4gKiBAdXNhZ2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFVyYmFuQWlyU2hpcCB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy91cmJhbmFpcnNoaXAvbmd4JztcbiAqXG4gKlxuICogY29uc3RydWN0b3IocHJpdmF0ZSB1cmJhbkFpclNoaXA6IFVyYmFuQWlyU2hpcCkgeyB9XG4gKlxuICogLi4uXG4gKlxuICpcbiAqIHRoaXMudXJiYW5BaXJTaGlwLnRha2VPZmYoY29uZmlnKVxuICogICAudGhlbigocmVzOiBhbnkpID0+IGNvbnNvbGUubG9nKHJlcykpXG4gKiAgIC5jYXRjaCgoZXJyb3I6IGFueSkgPT4gY29uc29sZS5lcnJvcihlcnJvcikpO1xuICpcbiAqIGBgYFxuICovXG5AUGx1Z2luKHtcbiAgcGx1Z2luTmFtZTogJ1VyYmFuQWlyU2hpcCcsXG4gIHBsdWdpbjogJ3VyYmFuYWlyc2hpcC1jb3Jkb3ZhJyxcbiAgcGx1Z2luUmVmOiAnd2luZG93LlVBaXJzaGlwJyxcbiAgcmVwbzogJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3VyYmFuYWlyc2hpcC1jb3Jkb3ZhJyxcbiAgaW5zdGFsbDogJ2lvbmljIGNvcmRvdmEgcGx1Z2luIGFkZCB1cmJhbmFpcnNoaXAtY29yZG92YScsXG4gIHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVcmJhbkFpclNoaXAgZXh0ZW5kcyBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB7XG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIGEgbmV3IGRlZXAgbGluayBpcyByZWNlaXZlZC5cbiAgICogQGV2ZW50IGRlZXBfbGlua1xuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlZXBMaW5rXSBUaGUgZGVlcCBsaW5rLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5kZWVwX2xpbmsnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uRGVlcExpbmsoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiBhIGNoYW5uZWwgcmVnaXN0cmF0aW9uIG9jY3Vycy5cbiAgICogQGV2ZW50IHJlZ2lzdHJhdGlvblxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYW5uZWxJRF0gVGhlIGNoYW5uZWwgSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVnaXN0cmF0aW9uVG9rZW5dIFRoZSBkZXZpY2VUb2tlbiBvbiBpT1MsIGFuZCB0aGUgRkNNL0FETSB0b2tlbiBvbiBBbmRyb2lkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Vycm9yXSBFcnJvciBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3VycmVkLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5yZWdpc3RyYXRpb24nLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uUmVnaXN0cmF0aW9uKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIGluYm94IGlzIHVwZGF0ZWQuXG4gICAqIEBldmVudCBpbmJveF91cGRhdGVkXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLmluYm94X3VwZGF0ZWQnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uSW5ib3hVcGRhdGVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIGluYm94IG5lZWRzIHRvIGJlIGRpc3BsYXllZC4gVGhpcyBldmVudCBpcyBvbmx5IGVtaXR0ZWQgaWYgYXV0b1xuICAgKiBsYXVuY2ggbWVzc2FnZSBjZW50ZXIgaXMgZGlzYWJsZWQuXG4gICAqIEBldmVudCBzaG93X2luYm94XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZUlkXSBUaGUgb3B0aW9uYWwgbWVzc2FnZSBJRC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAuc2hvd19pbmJveCcsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25TaG93SW5ib3goKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiBhIHB1c2ggaXMgcmVjZWl2ZWQuXG4gICAqIEBldmVudCBwdXNoXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBwdXNoIGFsZXJ0IG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSBUaGUgcHVzaCB0aXRsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnRpdGxlIFRoZSBwdXNoIHN1YnRpdGxlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0cmFzIEFueSBwdXNoIGV4dHJhcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFwcyBUaGUgcmF3IGFwcyBkaWN0aW9uYXJ5IChpT1Mgb25seSlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtub3RpZmljYXRpb25faWRdIFRoZSBBbmRyb2lkIG5vdGlmaWNhdGlvbiBJRC4gRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBub3RpZmljYXRpb25JZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtub3RpZmljYXRpb25JZF0gVGhlIG5vdGlmaWNhdGlvbiBJRC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAucHVzaCcsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25QdXNoUmVjZWl2ZWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiBub3RpZmljYXRpb24gb3BlbmVkLlxuICAgKiBAZXZlbnQgbm90aWZpY2F0aW9uX29wZW5lZFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgcHVzaCBhbGVydCBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0cmFzIEFueSBwdXNoIGV4dHJhcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtub3RpZmljYXRpb25faWRdIFRoZSBBbmRyb2lkIG5vdGlmaWNhdGlvbiBJRC4gRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBub3RpZmljYXRpb25JZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtub3RpZmljYXRpb25JZF0gVGhlIG5vdGlmaWNhdGlvbiBJRC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthY3Rpb25JRF0gVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gYWN0aW9uIGJ1dHRvbiBpZiBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGb3JlZ3JvdW5kIFdpbGwgYWx3YXlzIGJlIHRydWUgaWYgdGhlIHVzZXIgdGFwcyB0aGUgbWFpbiBub3RpZmljYXRpb24uIE90aGVyd2lzZSBpdHMgZGVmaW5lZCBieSB0aGUgbm90aWZpY2F0aW9uIGFjdGlvbiBidXR0b24uXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLm5vdGlmaWNhdGlvbl9vcGVuZWQnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uTm90aWZpY2F0aW9uT3BlbmVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIHVzZXIgbm90aWZpY2F0aW9uIG9wdC1pbiBzdGF0dXMgY2hhbmdlcy5cbiAgICogQGV2ZW50IG5vdGlmaWNhdGlvbl9vcHRfaW5fc3RhdHVzXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0SW4gSWYgdGhlIHVzZXIgaXMgb3B0ZWQgaW4gb3Igbm90IHRvIHVzZXIgbm90aWZpY2F0aW9ucy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3NdIGlPUyBvbmx5LiBBIG1hcCBvZiBhdXRob3JpemVkIHNldHRpbmdzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5hbGVydCBJZiBhbGVydHMgYXJlIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLnNvdW5kIElmIHNvdW5kcyBhcmUgYXV0aG9yaXplZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3MuYmFkZ2UgSWYgYmFkZ2VzIGFyZSBhdXRob3JpemVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5jYXJQbGF5IElmIGNhciBwbGF5IGlzIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLmxvY2tTY3JlZW4gSWYgdGhlIGxvY2sgc2NyZWVuIGlzIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLm5vdGlmaWNhdGlvbkNlbnRlciBJZiB0aGUgbm90aWZpY2F0aW9uIGNlbnRlciBpcyBhdXRob3JpemVkLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5ub3RpZmljYXRpb25fb3B0X2luX3N0YXR1cycsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25Ob3RpZmljYXRpb25PcHRJblN0YXR1cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1hdHRhY2hlcyBkb2N1bWVudCBldmVudCBsaXN0ZW5lcnMgaW4gdGhpcyB3ZWJ2aWV3XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3luYzogdHJ1ZSxcbiAgfSlcbiAgcmVhdHRhY2goKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRhaWxpemVzIFVyYmFuIEFpcnNoaXAuXG4gICAqXG4gICAqIFRoZSBwbHVnaW4gd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgdGFrZU9mZiBkdXJpbmcgdGhlIG5leHQgYXBwIGluaXQgaW5cbiAgICogb3JkZXIgdG8gcHJvcGVybHkgaGFuZGxlIGluY29taW5nIHB1c2guIElmIHRha2VPZmYgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gICAqIGluIGEgc2Vzc2lvbiwgb3IgaWYgdGhlIGNvbmZpZyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgcHJldmlvdXMgc2Vzc3Npb24sIHRoZVxuICAgKiBuZXcgY29uZmlnIHdpbGwgbm90IGJlIHVzZWQgdW50aWwgdGhlIG5leHQgYXBwIHN0YXJ0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZyBUaGUgVXJiYW4gQWlyc2hpcCBjb25maWcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLnNpdGUgU2V0cyB0aGUgY2xvdWQgc2l0ZSwgbXVzdCBiZSBlaXRoZXIgRVUgb3IgVVMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgY29uZmlnLmRldmVsb3BtZW50IFRoZSBVcmJhbiBBaXJzaGlwIGRldmVsb3BtZW50IGNvbmZpZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBjb25maWcuZGV2ZWxvcG1lbnQuYXBwS2V5IFRoZSBkZXZlbG9wbWVudCBhcHBLZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLmRldmVsb3BtZW50LmFwcFNlY3JldCBUaGUgZGV2ZWxvcG1lbnQgYXBwU2VjcmV0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZy5wcm9kdWN0aW9uIFRoZSBVcmJhbiBBaXJzaGlwIHByb2R1Y3Rpb24gY29uZmlnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGNvbmZpZy5wcm9kdWN0aW9uLmFwcEtleSBUaGUgcHJvZHVjdGlvbiBhcHBLZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLnByb2R1Y3Rpb24uYXBwU2VjcmV0IFRoZSBwcm9kdWN0aW9uIGFwcFNlY3JldC5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgdGFrZU9mZihjb25maWc6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIEFuZHJvaWQgbm90aWZpY2F0aW9uIGNvbmZpZy4gVmFsdWVzIG5vdCBzZXQgd2lsbCBmYWxsYmFjayB0byBhbnkgdmFsdWVzIHNldCBpbiB0aGUgY29uZmlnLnhtbC5cbiAgICogQHBhcmFtIHtvYmplY3R9ICBjb25maWcgVGhlIG5vdGlmaWNhdGlvbiBjb25maWcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW2NvbmZpZy5pY29uXSBUaGUgbmFtZSBvZiB0aGUgZHJhd2FibGUgcmVzb3VyY2UgdG8gdXNlIGFzIHRoZSBub3RpZmljYXRpb24gaWNvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbY29uZmlnLmxhcmdlSWNvbl0gVGhlIG5hbWUgb2YgdGhlIGRyYXdhYmxlIHJlc291cmNlIHRvIHVzZSBhcyB0aGUgbm90aWZpY2F0aW9uIGxhcmdlIGljb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW2NvbmZpZy5hY2NlbnRDb2xvcl0gVGhlIG5vdGlmaWNhdGlvbiBhY2NlbnQgY29sb3IuIEZvcm1hdCBpcyAjQUFSUkdHQkIuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEFuZHJvaWROb3RpZmljYXRpb25Db25maWcoY29uZmlnOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gdGhlIG1lc3NhZ2UgY2VudGVyIGlzIGxhdW5jaGVkIGZyb20gYSBwdXNoXG4gICAqIG5vdGlmaWNhdGlvbi4gSWYgc2V0IHRvIGZhbHNlIHRoZSBtZXNzYWdlIGNlbnRlciBtdXN0IGJlIG1hbnVhbGx5IGxhdW5jaGVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGxhdW5jaCB0aGUgZGVmYXVsdCBtZXNzYWdlIGNlbnRlciwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBdXRvTGF1bmNoRGVmYXVsdE1lc3NhZ2VDZW50ZXIoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdXNlciBub3RpZmljYXRpb25zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgbm90aWZpY2F0aW9ucywgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRVc2VyTm90aWZpY2F0aW9uc0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiB1c2VyIG5vdGlmaWNhdGlvbnMgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc1VzZXJOb3RpZmljYXRpb25zRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYXBwIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWQgb3Igbm90LiBJdHMgcG9zc2libGUgdG8gaGF2ZSBgdXNlck5vdGlmaWNhdGlvbnNFbmFibGVkYFxuICAgKiBidXQgYXBwIG5vdGlmaWNhdGlvbnMgYmVpbmcgZGlzYWJsZWQgaWYgdGhlIHVzZXIgb3B0ZWQgb3V0IG9mIG5vdGlmaWNhdGlvbnMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIGFwcCBub3RpZmljYXRpb25zIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNBcHBOb3RpZmljYXRpb25zRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjaGFubmVsIElELlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKElEKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5JRCBUaGUgY2hhbm5lbCBJRCBzdHJpbmdcbiAgICogQHBhcmFtIHtmYWlsdXJlQ2FsbGJhY2t9IFtmYWlsdXJlXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRDaGFubmVsSUQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBub3RpZmljYXRpb24gdGhhdCBsYXVuY2hlZCB0aGUgYXBwbGljYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xlYXIgdHJ1ZSB0byBjbGVhciB0aGUgbm90aWZpY2F0aW9uLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHB1c2gpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWNjZXNzLnB1c2ggVGhlIHB1c2ggbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHB1c2ggbm90aWZpY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5wdXNoLm1lc3NhZ2UgVGhlIHB1c2ggYWxlcnQgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHN1Y2Nlc3MucHVzaC5leHRyYXMgQW55IHB1c2ggZXh0cmFzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3N1Y2Nlc3MucHVzaC5ub3RpZmljYXRpb25faWRdIFRoZSBBbmRyb2lkIG5vdGlmaWNhdGlvbiBJRC5cbiAgICogQHBhcmFtIHtmYWlsdXJlQ2FsbGJhY2t9IFtmYWlsdXJlXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRMYXVuY2hOb3RpZmljYXRpb24oY2xlYXI6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYXN0IHJlY2VpdmVkIGRlZXAgbGluay5cbiAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciB0cnVlIHRvIGNsZWFyIHRoZSBkZWVwIGxpbmsuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocHVzaCl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3MuZGVlcExpbmsgVGhlIGRlZXAgbGluay5cbiAgICogQHBhcmFtIHtmYWlsdXJlQ2FsbGJhY2t9IFtmYWlsdXJlXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXREZWVwTGluayhjbGVhcjogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhZ3MgYXMgYW4gYXJyYXkuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24odGFncyl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtBcnJheX0gc3VjY2Vzcy50YWdzIFRoZSB0YWdzIGFzIGFuIGFycmF5LlxuICAgKiBAcGFyYW0ge2ZhaWx1cmVDYWxsYmFja30gW2ZhaWx1cmVdIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGZhaWx1cmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFRhZ3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGFncy5cbiAgICogQHBhcmFtIHtBcnJheX0gdGFncyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFRhZ3ModGFnczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhbGlhcy5cbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBzaW5jZSA2LjcuMCAtIHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luIC0gcGxlYXNlIHVzZSBnZXROYW1lZFVzZXJcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjdXJyZW50QWxpYXMpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLmN1cnJlbnRBbGlhcyBUaGUgYWxpYXMgYXMgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRBbGlhcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhbGlhcy5cbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBzaW5jZSA2LjcuMCAgLSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhlIHBsdWdpbiAtIHBsZWFzZSB1c2Ugc2V0TmFtZWRVc2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhcyBzdHJpbmdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBbGlhcyhhbGlhczogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHF1aWV0IHRpbWUgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIHF1aWV0IHRpbWUgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc1F1aWV0VGltZUVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgcXVpZXQgdGltZSwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRRdWlldFRpbWVFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgaW4gcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihpblF1aWV0VGltZSl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmluUXVpZXRUaW1lIEZsYWcgaW5kaWNhdGluZyBpZiBxdWlldCB0aW1lIGlzIGN1cnJlbnRseSBpbiBlZmZlY3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0luUXVpZXRUaW1lKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHF1aWV0IHRpbWUgYXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZzpcbiAgICogXCJzdGFydEhvdXJcIjogTnVtYmVyLFxuICAgKiBcInN0YXJ0TWludXRlXCI6IE51bWJlcixcbiAgICogXCJlbmRIb3VyXCI6IE51bWJlcixcbiAgICogXCJlbmRNaW51dGVcIjogTnVtYmVyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocXVpZXRUaW1lKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3VjY2Vzcy5xdWlldFRpbWUgVGhlIHF1aWV0VGltZSBvYmplY3QgcmVwcmVzZW50cyBhIHRpbWVzcGFuIGR1cmluZ1xuICAgKiAgICAgICAgd2hpY2ggbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgc2lsZW5jZWQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRRdWlldFRpbWUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SG91ciBmb3IgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0TWludXRlIGZvciBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kSG91ciBmb3IgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZE1pbnV0ZSBmb3IgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRRdWlldFRpbWUoc3RhcnRIb3VyOiBudW1iZXIsIHN0YXJ0TWludXRlOiBudW1iZXIsIGVuZEhvdXI6IG51bWJlciwgZW5kTWludXRlOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFuYWx5dGljcy5cbiAgICpcbiAgICogRGlzYWJsaW5nIGFuYWx5dGljcyB3aWxsIGRlbGV0ZSBhbnkgbG9jYWxseSBzdG9yZWQgZXZlbnRzXG4gICAqIGFuZCBwcmV2ZW50IGFueSBldmVudHMgZnJvbSB1cGxvYWRpbmcuIEZlYXR1cmVzIHRoYXQgZGVwZW5kIG9uIGFuYWx5dGljcyBiZWluZ1xuICAgKiBlbmFibGVkIG1heSBub3Qgd29yayBwcm9wZXJseSBpZiBpdCdzIGRpc2FibGVkIChyZXBvcnRzLCByZWdpb24gdHJpZ2dlcnMsXG4gICAqIGxvY2F0aW9uIHNlZ21lbnRhdGlvbiwgcHVzaCB0byBsb2NhbCB0aW1lKS5cbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIGFuYWx5dGljcywgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBbmFseXRpY3NFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW5hbHl0aWNzIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBhbmFseXRpY3MgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0FuYWx5dGljc0VuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtZWQgdXNlciBJRC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihuYW1lZFVzZXIpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLm5hbWVkVXNlciBUaGUgbmFtZWQgdXNlciBJRCBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldE5hbWVkVXNlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBuYW1lZCB1c2VyIElELlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZWRVc2VyIGlkZW50aWZpZXIgc3RyaW5nLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldE5hbWVkVXNlcihuYW1lZFVzZXI6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYW4gVXJiYW4gQWlyc2hpcCBhY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25OYW1lIGFjdGlvbiBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHsqfSBhY3Rpb25WYWx1ZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHJlc3VsdCl9IFtzdWNjZXNzXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3VjY2Vzcy5yZXN1bHQgVGhlIHJlc3VsdCdzIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgcnVuQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZywgYWN0aW9uVmFsdWU6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgbmFtZWQgdXNlciB0YWcgZ3JvdXBzLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXROYW1lZFVzZXJUYWdHcm91cHMoKTogVGFnR3JvdXBFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIGNoYW5uZWwgdGFnIGdyb3Vwcy5cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0Q2hhbm5lbFRhZ0dyb3VwcygpOiBUYWdHcm91cEVkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgY2hhbm5lbCBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXRDaGFubmVsQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVzRWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBuYW1lZCB1c2VyIGF0dHJpYnV0ZXMuXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZWRpdE5hbWVkVXNlckF0dHJpYnV0ZXMoKTogQXR0cmlidXRlc0VkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgY2hhbm5lbCBzdWJzY3JpcHRpb24gbGlzdHMuXG4gICAqIEByZXR1cm5zIHtDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvcn0gQSBzdWJzY3JpcHRpb24gbGlzdCBlZGl0b3IgaW5zdGFuY2UuXG4gICAqIEBzaW5jZSAxMy4zLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0Q2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RzKCk6IENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBjb250YWN0IHN1YnNjcmlwdGlvbiBsaXN0cy5cbiAgICogQHJldHVybnMge0NvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yfSBBIHN1YnNjcmlwdGlvbiBsaXN0IGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHNpbmNlIDEzLjMuMFxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXRDb250YWN0U3Vic2NyaXB0aW9uTGlzdHMoKTogQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNldCBvZiBzdWJzY3JpcHRpb24gbGlzdHMgZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwsXG4gICAqIG9wdGlvbmFsbHkgYXBwbHlpbmcgcGVuZGluZyBzdWJzY3JpcHRpb24gbGlzdCBjaGFuZ2VzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGR1cmluZyB0aGUgbmV4dCBjaGFubmVsIHVwZGF0ZS5cbiAgICogQW4gZW1wdHkgc2V0IGluZGljYXRlcyB0aGF0IHRoaXMgY29udGFjdCBpcyBub3Qgc3Vic2NyaWJlZCB0byBhbnkgbGlzdHMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMCxcbiAgICBlcnJvckluZGV4OiAxLFxuICB9KVxuICBnZXRDaGFubmVsU3Vic2NyaXB0aW9uTGlzdHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNldCBvZiBzdWJzY3JpcHRpb24gbGlzdHMgZm9yIHRoZSBjdXJyZW50IGNvbnRhY3QsXG4gICAqIG9wdGlvbmFsbHkgYXBwbHlpbmcgcGVuZGluZyBzdWJzY3JpcHRpb24gbGlzdCBjaGFuZ2VzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGR1cmluZyB0aGUgbmV4dCBjb250YWN0IHVwZGF0ZS5cbiAgICogQW4gZW1wdHkgc2V0IGluZGljYXRlcyB0aGF0IHRoaXMgY29udGFjdCBpcyBub3Qgc3Vic2NyaWJlZCB0byBhbnkgbGlzdHMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMCxcbiAgICBlcnJvckluZGV4OiAxLFxuICB9KVxuICBnZXRDb250YWN0U3Vic2NyaXB0aW9uTGlzdHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGFzc29jaWF0ZWQgaWRlbnRpZmllciBmb3IgdGhlIENvbm5lY3QgZGF0YSBzdHJlYW0uXG4gICAqIEBwYXJhbSBrZXkgQ3VzdG9tIGtleSBmb3IgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGlkZW50aWZpZXIgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QXNzb2NpYXRlZElkZW50aWZpZXIoa2V5OiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIExvY2F0aW9uXG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgVXJiYW4gQWlyc2hpcCBsb2NhdGlvbiBzZXJ2aWNlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIGxvY2F0aW9uLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldExvY2F0aW9uRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGxvY2F0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBsb2NhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiA4LjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBiYWNrZ3JvdW5kIGxvY2F0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgYmFja2dyb3VuZCBsb2NhdGlvbiwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAZGVwcmVjYXRlZCByZW1vdmVkIGluIHZlcnNpb24gOC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEJhY2tncm91bmRMb2NhdGlvbkVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBiYWNrZ3JvdW5kIGxvY2F0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBiYWNrZ3JvdW5kIGxvY2F0aW9uIHVwZGF0ZXMgYXJlIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBpbiB2ZXJzaW9uIDguMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0JhY2tncm91bmRMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIG1lc3NhZ2UgY2VudGVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc3BsYXlNZXNzYWdlQ2VudGVyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3MgdGhlIG1lc3NhZ2UgY2VudGVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc21pc3NNZXNzYWdlQ2VudGVyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3MgdGhlIGluYm94IG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGlzbWlzc0luYm94TWVzc2FnZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzIHRoZSBpbmJveCBtZXNzYWdlIGluIHRoZSBvdmVybGF5LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiAxMC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc21pc3NPdmVybGF5SW5ib3hNZXNzYWdlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFycmF5IG9mIGluYm94IG1lc3NhZ2VzLiBFYWNoIG1lc3NhZ2Ugd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogXCJpZFwiOiBzdHJpbmcgLSBUaGUgbWVzc2FnZXMgSUQuIE5lZWRlZCB0byBkaXNwbGF5LCBtYXJrIGFzIHJlYWQsIG9yIGRlbGV0ZSB0aGUgbWVzc2FnZS5cbiAgICogXCJ0aXRsZVwiOiBzdHJpbmcgLSBUaGUgbWVzc2FnZSB0aXRsZS5cbiAgICogXCJzZW50RGF0ZVwiOiBudW1iZXIgLSBUaGUgbWVzc2FnZSBzZW50IGRhdGUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBcImxpc3RJY29uVXJsXCI6IHN0cmluZywgb3B0aW9uYWwgLSBUaGUgaWNvbiB1cmwgZm9yIHRoZSBtZXNzYWdlLlxuICAgKiBcImlzUmVhZFwiOiBib29sZWFuIC0gVGhlIHVucmVhZC9yZWFkIHN0YXR1cyBvZiB0aGUgbWVzc2FnZS5cbiAgICogXCJleHRyYXNcIjogb2JqZWN0IC0gU3RyaW5nIHRvIFN0cmluZyBtYXAgb2YgYW55IG1lc3NhZ2UgZXh0cmFzLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2VzKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWNjZXNzLm1lc3NhZ2VzIFRoZSBhcnJheSBvZiBpbmJveCBtZXNzYWdlcy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldEluYm94TWVzc2FnZXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgYW4gaW5ib3ggbWVzc2FnZSByZWFkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZUlkIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBtYXJrIGFzIHJlYWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgbWFya0luYm94TWVzc2FnZVJlYWQobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGluYm94IG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlSWQgVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBkZWxldGVJbmJveE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgaW5ib3ggbWVzc2FnZSB1c2luZyBhIGZ1bGwgc2NyZWVuIHZpZXcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlSWQgVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGlzcGxheUluYm94TWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgaW5ib3ggdG8gcmVmcmVzaC4gVGhpcyBpcyBub3JtYWxseSBub3QgbmVlZGVkIGFzIHRoZSBpbmJveFxuICAgKiB3aWxsIGF1dG9tYXRpY2FsbHkgcmVmcmVzaCBvbiBmb3JlZ3JvdW5kIG9yIHdoZW4gYSBwdXNoIGFycml2ZXMgdGhhdHNcbiAgICogYXNzb2NpYXRlZCB3aXRoIGEgbWVzc2FnZSwgYnV0IGl0IGNhbiBiZSB1c2VmdWwgd2hlbiBwcm92aWRpbmcgYSByZWZyZXNoXG4gICAqIGJ1dHRvbiBmb3IgdGhlIG1lc3NhZ2UgbGlzdGluZy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICByZWZyZXNoSW5ib3goKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIGluYm94IG1lc3NhZ2UgdXNpbmcgYW4gb3ZlcmxheSBkaXNwbGF5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZUlkIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiAxMC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIG92ZXJsYXlJbmJveE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYSBub3RpZmljYXRpb24gYnkgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXIgVGhlIG5vdGlmaWNhdGlvbiBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGNsZWFyTm90aWZpY2F0aW9uKGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgbm90aWZpY2F0aW9ucyBwb3N0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGNsZWFyTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGN1cnJlbnRseSBhY3RpdmUgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogTm90ZTogT24gQW5kcm9pZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgb24gQW5kcm9pZCBNIG9yIGhpZ2hlci5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlcyl9IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0QWN0aXZlTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGlPUyBvbmx5XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYXV0byBiYWRnZS4gRGVmYXVsdHMgdG8gYE5PYC5cbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIGF1dG8gYmFkZ2UsIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QXV0b2JhZGdlRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYmFkZ2UgbnVtYmVyLlxuICAgKiBAcGFyYW0gY291bnQgbnVtYmVyIHNwZWNpZmllZCBiYWRnZSB0byBzZXQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QmFkZ2VOdW1iZXIoY291bnQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYmFkZ2UgbnVtYmVyLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGJhZGdlTnVtYmVyKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge2ludH0gc3VjY2Vzcy5iYWRnZU51bWJlciBUaGUgY3VycmVudCBhcHBsaWNhdGlvbiBiYWRnZSBudW1iZXIuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRCYWRnZU51bWJlcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGJhZGdlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJlc2V0QmFkZ2UoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaU9TIG5vdGlmaWNhdGlvbiB0eXBlcy4gU3BlY2lmeSB0aGUgY29tYmluYXRpb24gb2ZcbiAgICogYmFkZ2VzLCBzb3VuZCBhbmQgYWxlcnRzIHRoYXQgYXJlIGRlc2lyZWQuXG4gICAqIEBwYXJhbSB0eXBlcyBzcGVjaWZpZWQgbm90aWZpY2F0aW9uIHR5cGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldE5vdGlmaWNhdGlvblR5cGVzKHR5cGVzOiBOb3RpZmljYXRpb25UeXBlKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaU9TIHByZXNlbnRhdGlvbiBvcHRpb25zLiBTcGVjaWZ5IHRoZSBjb21iaW5hdGlvbiBvZlxuICAgKiBiYWRnZXMsIHNvdW5kIGFuZCBhbGVydHMgdGhhdCBhcmUgZGVzaXJlZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgdHlwZXMgc3BlY2lmaWVkIHByZXNlbnRhdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFByZXNlbnRhdGlvbk9wdGlvbnMob3B0aW9uczogUHJlc2VudGF0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW5kcm9pZCBvbmx5XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBub3RpZmljYXRpb24gc291bmQgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIHNvdW5kIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNTb3VuZEVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBub3RpZmljYXRpb24gc291bmQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBzb3VuZCwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRTb3VuZEVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBub3RpZmljYXRpb24gdmlicmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiB2aWJyYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc1ZpYnJhdGVFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgbm90aWZpY2F0aW9uIHZpYnJhdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIHZpYnJhdGlvbiwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRWaWJyYXRlRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGN1c3RvbSBldmVudC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBjdXN0b20gZXZlbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQubmFtZSBUaGUgZXZlbnQncyBuYW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2V2ZW50LnZhbHVlXSBUaGUgZXZlbnQncyB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudC50cmFuc2FjdGlvbklkXSBUaGUgZXZlbnQncyB0cmFuc2FjdGlvbiBJRC5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtldmVudC5wcm9wZXJ0aWVzXSBUaGUgZXZlbnQncyBwcm9wZXJ0aWVzLiBPbmx5IG51bWJlcnMsIGJvb2xlYW5zLCBzdHJpbmdzLCBhbmQgYXJyYXkgb2Ygc3RyaW5ncyBhcmUgc3VwcG9ydGVkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGFkZEN1c3RvbUV2ZW50KGV2ZW50OiBvYmplY3QpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgc2NyZWVuIHRyYWNraW5nIGZvciBhIHNwZWNpZmljIGFwcCBzY3JlZW4sIG11c3QgYmUgY2FsbGVkIG9uY2UgcGVyIHRyYWNrZWQgc2NyZWVuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuIFRoZSBzY3JlZW4ncyBzdHJpbmcgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTEuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIHRyYWNrU2NyZWVuKHNjcmVlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBmZWF0dXJlcywgYWRkaW5nIHRoZW0gdG8gdGhlIHNldCBvZiBjdXJyZW50bHkgZW5hYmxlZCBmZWF0dXJlcy5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgdG8gZW5hYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDEsXG4gICAgZXJyb3JJbmRleDogMixcbiAgfSlcbiAgZW5hYmxlRmVhdHVyZShmZWF0dXJlczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBmZWF0dXJlcywgcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBzZXQgb2YgY3VycmVudGx5IGVuYWJsZWQgZmVhdHVyZXMuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmVhdHVyZXMgVGhlIGZlYXR1cmVzIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICBkaXNhYmxlRmVhdHVyZShmZWF0dXJlczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IGVuYWJsZWQgZmVhdHVyZXMsIHJlcGxhY2luZyBhbnkgY3VycmVudGx5IGVuYWJsZWQgZmVhdHVyZXMgd2l0aCB0aGUgZ2l2ZW4gc2V0LlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyB0byBzZXQgYXMgZW5hYmxlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBzZXRFbmFibGVkRmVhdHVyZXMoZmVhdHVyZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBlbmFibGVkIGZlYXR1cmVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDAsXG4gICAgZXJyb3JJbmRleDogMSxcbiAgfSlcbiAgZ2V0RW5hYmxlZEZlYXR1cmVzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgb2YgdGhlIGdpdmVuIGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyB0byBjaGVjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIGlzRmVhdHVyZUVuYWJsZWQoZmVhdHVyZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgUHJlZmVyZW5jZSBDZW50ZXIgd2l0aCB0aGUgZ2l2ZW4gSUQgdHJvdWdoIGEgY2FsbGJhY2sgbWV0aG9kLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZmVyZW5jZUNlbnRlcklkIFRoZSBwcmVmZXJlbmNlIGNlbnRlciBJRC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMy4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIGdldFByZWZlcmVuY2VDZW50ZXJDb25maWcocHJlZmVyZW5jZUNlbnRlcklkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgUHJlZmVyZW5jZSBDZW50ZXIgd2l0aCB0aGUgZ2l2ZW4gcHJlZmVyZW5jZUNlbnRlcklkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlbmZlcmVuY2VDZW50ZXJJZCBUaGUgcHJlZmVyZW5jZSBjZW50ZXIgSUQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICBvcGVuUHJlZmVyZW5jZUNlbnRlcihwcmVuZmVyZW5jZUNlbnRlcklkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGxvY2FsZSBzZXR0aW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlIGxhbmd1YWdlIGFuZCBvcHRpb25hbCBjb3VudHJ5IGNvZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDE0LjMuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRDdXJyZW50TG9jYWxlKGxvY2FsZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudGx5IHNldCBsb2NhbGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obG9jYWxlKX0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLmxvY2FsZSBUaGUgbG9jYWxlIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDE0LjMuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRDdXJyZW50TG9jYWxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgY3VycmVudCBsb2NhbGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDE0LjMuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBjbGVhckxvY2FsZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxufVxuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvdXJiYW5haXJzaGlwL25neC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLHVDQUErQyxNQUFNLCtCQUErQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBd0NsQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsdURBQVEsQ0FBQTtJQUNSLHlEQUFTLENBQUE7SUFDVCx5REFBUyxDQUFBO0lBQ1QseURBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQU4sSUFBWSxtQkFLWDtBQUxELFdBQVksbUJBQW1CO0lBQzdCLDZEQUFRLENBQUE7SUFDUiwrREFBUyxDQUFBO0lBQ1QsK0RBQVMsQ0FBQTtJQUNULCtEQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUs5Qjs7SUErQmlDLGdDQUEwQjs7OztJQWExRCxpQ0FBVTtJQWtCVixxQ0FBYztJQWNkLHFDQUFjO0lBaUJkLGtDQUFXO0lBc0JYLHFDQUFjO0lBcUJkLDJDQUFvQjtJQXVCcEIsZ0RBQXlCO0lBVXpCLCtCQUFRO0lBc0JSLDhCQUFPLGFBQUMsTUFBVztJQWFuQixtREFBNEIsYUFBQyxNQUFXO0lBY3hDLHdEQUFpQyxhQUFDLE9BQWdCO0lBYWxELGtEQUEyQixhQUFDLE9BQWdCO0lBYTVDLGlEQUEwQjtJQWMxQixnREFBeUI7SUFhekIsbUNBQVk7SUFpQlosNENBQXFCLGFBQUMsS0FBYztJQWNwQyxrQ0FBVyxhQUFDLEtBQWM7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a0JBQWtCLE1BY2xCLGlCQUFpQixNQWNqQiw0QkFBNEIsTUFjNUIsMkJBQTJCLE1BWTNCLG9CQUFvQixNQVlwQixvQkFBb0IsTUFZcEIsbUJBQW1CLE1BYW5CLDBCQUEwQixNQW1CMUIsZ0JBQWdCLE1BYWhCLG9CQUFvQixNQWFwQixrQkFBa0IsTUFhbEIsbUJBQW1CLE1BZW5CLFlBQVksTUFjWixtQkFBbUIsTUFZbkIsaUJBQWlCLE1BWWpCLGtCQUFrQixNQWFsQixzQkFBc0IsTUFldEIsbUJBQW1CLE1BYW5CLGNBQWMsTUFhZCxjQUFjLE1BWWQsVUFBVSxNQWNWLG9CQUFvQixNQWNwQixzQkFBc0IsTUFldEIsY0FBYyxNQWFkLGVBQWUsTUFhZixnQkFBZ0IsTUFhaEIsaUJBQWlCLE1BaUJqQixjQUFjLE1BaUJkLFdBQVcsTUFpQlgsYUFBYSxNQWlCYixjQUFjLE1BNkJkLGtCQUFrQixNQWlCbEIsZ0JBQWdCLE1BaUJoQix5QkFBeUIsTUFpQnpCLG9CQUFvQixNQWNwQixnQkFBZ0IsTUFjaEIsZ0JBQWdCLE1BYWhCLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbHVnaW4sIENvcmRvdmEsIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgVUFpcnNoaXAgVGFnIEVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0dyb3VwRWRpdG9yIHtcbiAgYWRkVGFncyh0YWdHcm91cDogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSk6IFRhZ0dyb3VwRWRpdG9yO1xuICByZW1vdmVUYWdzKHRhZ0dyb3VwOiBzdHJpbmcsIHRhZ3M6IHN0cmluZ1tdKTogVGFnR3JvdXBFZGl0b3I7XG4gIGFwcGx5KHN1Y2Nlc3M6ICgpID0+IHZvaWQsIGZhaWx1cmU6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpOiBUYWdHcm91cEVkaXRvcjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFVBaXJzaGlwIEF0dHJpYnV0ZXMgRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlc0VkaXRvciB7XG4gIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSk6IEF0dHJpYnV0ZXNFZGl0b3I7XG4gIHJlbW92ZUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBBdHRyaWJ1dGVzRWRpdG9yO1xuICBhcHBseShzdWNjZXNzOiAoKSA9PiB2b2lkLCBmYWlsdXJlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKTogQXR0cmlidXRlc0VkaXRvcjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIFVBaXJzaGlwIENoYW5uZWxTdWJzY3JpcHRpb25MaXN0IEVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yIHtcbiAgc3Vic2NyaWJlKHN1YnNjcmlwdGlvbkxpc3RJRDogc3RyaW5nKTogQ2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG4gIHVuc3Vic2NyaWJlKHN1YnNjcmlwdGlvbkxpc3RJRDogc3RyaW5nKTogQ2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG4gIGFwcGx5KHN1Y2Nlc3M6ICgpID0+IHZvaWQsIGZhaWx1cmU6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpOiBDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvcjtcbn1cblxuZXhwb3J0IHR5cGUgQ29udGFjdFN1YnNjcmlwdGlvblNjb3BlID0gJ2FwcCcgfCAnZW1haWwnIHwgJ3B1c2gnIHwgJ3Ntcyc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBVQWlyc2hpcCBDb250YWN0U3Vic2NyaXB0aW9uTGlzdCBFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWN0U3Vic2NyaXB0aW9uTGlzdEVkaXRvciB7XG4gIHN1YnNjcmliZShzdWJzY3JpcHRpb25MaXN0SUQ6IHN0cmluZywgY29udGFjdFNjb3BlOiBDb250YWN0U3Vic2NyaXB0aW9uU2NvcGUpOiBDb250YWN0U3Vic2NyaXB0aW9uTGlzdEVkaXRvcjtcbiAgdW5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uTGlzdElEOiBzdHJpbmcsIGNvbnRhY3RTY29wZTogQ29udGFjdFN1YnNjcmlwdGlvblNjb3BlKTogQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3I7XG4gIGFwcGx5KHN1Y2Nlc3M6ICgpID0+IHZvaWQsIGZhaWx1cmU6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpOiBDb250YWN0U3Vic2NyaXB0aW9uTGlzdEVkaXRvcjtcbn1cblxuLyoqXG4gKiBFbnVtIGZvciBub3RpZmljYXRpb24gdHlwZXMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25UeXBlIHtcbiAgbm9uZSA9IDAsXG4gIGJhZGdlID0gMSxcbiAgc291bmQgPSAyLFxuICBhbGVydCA9IDQsXG59XG5cbi8qKlxuICogRW51bSBmb3IgcHJlc2VudGF0aW9uIG9wdGlvbnMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZW51bSBQcmVzZW50YXRpb25PcHRpb25zIHtcbiAgbm9uZSA9IDAsXG4gIGJhZGdlID0gMSxcbiAgc291bmQgPSAyLFxuICBhbGVydCA9IDQsXG59XG5cbi8qKlxuICogQG5hbWUgVXJiYW5BaXJTaGlwXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcGx1Z2luIGRvZXMgc29tZXRoaW5nXG4gKiBAdXNhZ2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFVyYmFuQWlyU2hpcCB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy91cmJhbmFpcnNoaXAvbmd4JztcbiAqXG4gKlxuICogY29uc3RydWN0b3IocHJpdmF0ZSB1cmJhbkFpclNoaXA6IFVyYmFuQWlyU2hpcCkgeyB9XG4gKlxuICogLi4uXG4gKlxuICpcbiAqIHRoaXMudXJiYW5BaXJTaGlwLnRha2VPZmYoY29uZmlnKVxuICogICAudGhlbigocmVzOiBhbnkpID0+IGNvbnNvbGUubG9nKHJlcykpXG4gKiAgIC5jYXRjaCgoZXJyb3I6IGFueSkgPT4gY29uc29sZS5lcnJvcihlcnJvcikpO1xuICpcbiAqIGBgYFxuICovXG5AUGx1Z2luKHtcbiAgcGx1Z2luTmFtZTogJ1VyYmFuQWlyU2hpcCcsXG4gIHBsdWdpbjogJ3VyYmFuYWlyc2hpcC1jb3Jkb3ZhJyxcbiAgcGx1Z2luUmVmOiAnd2luZG93LlVBaXJzaGlwJyxcbiAgcmVwbzogJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3VyYmFuYWlyc2hpcC1jb3Jkb3ZhJyxcbiAgaW5zdGFsbDogJ2lvbmljIGNvcmRvdmEgcGx1Z2luIGFkZCB1cmJhbmFpcnNoaXAtY29yZG92YScsXG4gIHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVcmJhbkFpclNoaXAgZXh0ZW5kcyBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB7XG4gIC8qKlxuICAgKiBFdmVudCBmaXJlZCB3aGVuIGEgbmV3IGRlZXAgbGluayBpcyByZWNlaXZlZC5cbiAgICpcbiAgICogQGV2ZW50IGRlZXBfbGlua1xuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlZXBMaW5rXSBUaGUgZGVlcCBsaW5rLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5kZWVwX2xpbmsnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uRGVlcExpbmsoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiBhIGNoYW5uZWwgcmVnaXN0cmF0aW9uIG9jY3Vycy5cbiAgICpcbiAgICogQGV2ZW50IHJlZ2lzdHJhdGlvblxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYW5uZWxJRF0gVGhlIGNoYW5uZWwgSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVnaXN0cmF0aW9uVG9rZW5dIFRoZSBkZXZpY2VUb2tlbiBvbiBpT1MsIGFuZCB0aGUgRkNNL0FETSB0b2tlbiBvbiBBbmRyb2lkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Vycm9yXSBFcnJvciBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3VycmVkLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5yZWdpc3RyYXRpb24nLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uUmVnaXN0cmF0aW9uKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIGluYm94IGlzIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBldmVudCBpbmJveF91cGRhdGVkXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLmluYm94X3VwZGF0ZWQnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uSW5ib3hVcGRhdGVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIGluYm94IG5lZWRzIHRvIGJlIGRpc3BsYXllZC4gVGhpcyBldmVudCBpcyBvbmx5IGVtaXR0ZWQgaWYgYXV0b1xuICAgKiBsYXVuY2ggbWVzc2FnZSBjZW50ZXIgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIEBldmVudCBzaG93X2luYm94XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZUlkXSBUaGUgb3B0aW9uYWwgbWVzc2FnZSBJRC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAuc2hvd19pbmJveCcsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25TaG93SW5ib3goKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiBhIHB1c2ggaXMgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBldmVudCBwdXNoXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBwdXNoIGFsZXJ0IG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSBUaGUgcHVzaCB0aXRsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnRpdGxlIFRoZSBwdXNoIHN1YnRpdGxlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0cmFzIEFueSBwdXNoIGV4dHJhcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFwcyBUaGUgcmF3IGFwcyBkaWN0aW9uYXJ5IChpT1Mgb25seSlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtub3RpZmljYXRpb25faWRdIFRoZSBBbmRyb2lkIG5vdGlmaWNhdGlvbiBJRC4gRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBub3RpZmljYXRpb25JZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtub3RpZmljYXRpb25JZF0gVGhlIG5vdGlmaWNhdGlvbiBJRC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBldmVudE9ic2VydmFibGU6IHRydWUsXG4gICAgZXZlbnQ6ICd1cmJhbmFpcnNoaXAucHVzaCcsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25QdXNoUmVjZWl2ZWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZmlyZWQgd2hlbiBub3RpZmljYXRpb24gb3BlbmVkLlxuICAgKlxuICAgKiBAZXZlbnQgbm90aWZpY2F0aW9uX29wZW5lZFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgcHVzaCBhbGVydCBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0cmFzIEFueSBwdXNoIGV4dHJhcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtub3RpZmljYXRpb25faWRdIFRoZSBBbmRyb2lkIG5vdGlmaWNhdGlvbiBJRC4gRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBub3RpZmljYXRpb25JZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtub3RpZmljYXRpb25JZF0gVGhlIG5vdGlmaWNhdGlvbiBJRC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthY3Rpb25JRF0gVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gYWN0aW9uIGJ1dHRvbiBpZiBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGb3JlZ3JvdW5kIFdpbGwgYWx3YXlzIGJlIHRydWUgaWYgdGhlIHVzZXIgdGFwcyB0aGUgbWFpbiBub3RpZmljYXRpb24uIE90aGVyd2lzZSBpdHMgZGVmaW5lZCBieSB0aGUgbm90aWZpY2F0aW9uIGFjdGlvbiBidXR0b24uXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgZXZlbnRPYnNlcnZhYmxlOiB0cnVlLFxuICAgIGV2ZW50OiAndXJiYW5haXJzaGlwLm5vdGlmaWNhdGlvbl9vcGVuZWQnLFxuICAgIGVsZW1lbnQ6ICdkb2N1bWVudCcsXG4gIH0pXG4gIG9uTm90aWZpY2F0aW9uT3BlbmVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIHVzZXIgbm90aWZpY2F0aW9uIG9wdC1pbiBzdGF0dXMgY2hhbmdlcy5cbiAgICpcbiAgICogQGV2ZW50IG5vdGlmaWNhdGlvbl9vcHRfaW5fc3RhdHVzXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0SW4gSWYgdGhlIHVzZXIgaXMgb3B0ZWQgaW4gb3Igbm90IHRvIHVzZXIgbm90aWZpY2F0aW9ucy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3NdIGlPUyBvbmx5LiBBIG1hcCBvZiBhdXRob3JpemVkIHNldHRpbmdzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5hbGVydCBJZiBhbGVydHMgYXJlIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLnNvdW5kIElmIHNvdW5kcyBhcmUgYXV0aG9yaXplZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRob3JpemVkTm90aWZpY2F0aW9uU2V0dGluZ3MuYmFkZ2UgSWYgYmFkZ2VzIGFyZSBhdXRob3JpemVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGF1dGhvcml6ZWROb3RpZmljYXRpb25TZXR0aW5ncy5jYXJQbGF5IElmIGNhciBwbGF5IGlzIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLmxvY2tTY3JlZW4gSWYgdGhlIGxvY2sgc2NyZWVuIGlzIGF1dGhvcml6ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXV0aG9yaXplZE5vdGlmaWNhdGlvblNldHRpbmdzLm5vdGlmaWNhdGlvbkNlbnRlciBJZiB0aGUgbm90aWZpY2F0aW9uIGNlbnRlciBpcyBhdXRob3JpemVkLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGV2ZW50T2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBldmVudDogJ3VyYmFuYWlyc2hpcC5ub3RpZmljYXRpb25fb3B0X2luX3N0YXR1cycsXG4gICAgZWxlbWVudDogJ2RvY3VtZW50JyxcbiAgfSlcbiAgb25Ob3RpZmljYXRpb25PcHRJblN0YXR1cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1hdHRhY2hlcyBkb2N1bWVudCBldmVudCBsaXN0ZW5lcnMgaW4gdGhpcyB3ZWJ2aWV3XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3luYzogdHJ1ZSxcbiAgfSlcbiAgcmVhdHRhY2goKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRhaWxpemVzIFVyYmFuIEFpcnNoaXAuXG4gICAqXG4gICAqIFRoZSBwbHVnaW4gd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgdGFrZU9mZiBkdXJpbmcgdGhlIG5leHQgYXBwIGluaXQgaW5cbiAgICogb3JkZXIgdG8gcHJvcGVybHkgaGFuZGxlIGluY29taW5nIHB1c2guIElmIHRha2VPZmYgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gICAqIGluIGEgc2Vzc2lvbiwgb3IgaWYgdGhlIGNvbmZpZyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgcHJldmlvdXMgc2Vzc3Npb24sIHRoZVxuICAgKiBuZXcgY29uZmlnIHdpbGwgbm90IGJlIHVzZWQgdW50aWwgdGhlIG5leHQgYXBwIHN0YXJ0LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZyBUaGUgVXJiYW4gQWlyc2hpcCBjb25maWcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLnNpdGUgU2V0cyB0aGUgY2xvdWQgc2l0ZSwgbXVzdCBiZSBlaXRoZXIgRVUgb3IgVVMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgY29uZmlnLmRldmVsb3BtZW50IFRoZSBVcmJhbiBBaXJzaGlwIGRldmVsb3BtZW50IGNvbmZpZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBjb25maWcuZGV2ZWxvcG1lbnQuYXBwS2V5IFRoZSBkZXZlbG9wbWVudCBhcHBLZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLmRldmVsb3BtZW50LmFwcFNlY3JldCBUaGUgZGV2ZWxvcG1lbnQgYXBwU2VjcmV0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZy5wcm9kdWN0aW9uIFRoZSBVcmJhbiBBaXJzaGlwIHByb2R1Y3Rpb24gY29uZmlnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIGNvbmZpZy5wcm9kdWN0aW9uLmFwcEtleSBUaGUgcHJvZHVjdGlvbiBhcHBLZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgY29uZmlnLnByb2R1Y3Rpb24uYXBwU2VjcmV0IFRoZSBwcm9kdWN0aW9uIGFwcFNlY3JldC5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgdGFrZU9mZihjb25maWc6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIEFuZHJvaWQgbm90aWZpY2F0aW9uIGNvbmZpZy4gVmFsdWVzIG5vdCBzZXQgd2lsbCBmYWxsYmFjayB0byBhbnkgdmFsdWVzIHNldCBpbiB0aGUgY29uZmlnLnhtbC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9ICBjb25maWcgVGhlIG5vdGlmaWNhdGlvbiBjb25maWcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW2NvbmZpZy5pY29uXSBUaGUgbmFtZSBvZiB0aGUgZHJhd2FibGUgcmVzb3VyY2UgdG8gdXNlIGFzIHRoZSBub3RpZmljYXRpb24gaWNvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBbY29uZmlnLmxhcmdlSWNvbl0gVGhlIG5hbWUgb2YgdGhlIGRyYXdhYmxlIHJlc291cmNlIHRvIHVzZSBhcyB0aGUgbm90aWZpY2F0aW9uIGxhcmdlIGljb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW2NvbmZpZy5hY2NlbnRDb2xvcl0gVGhlIG5vdGlmaWNhdGlvbiBhY2NlbnQgY29sb3IuIEZvcm1hdCBpcyAjQUFSUkdHQkIuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEFuZHJvaWROb3RpZmljYXRpb25Db25maWcoY29uZmlnOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gdGhlIG1lc3NhZ2UgY2VudGVyIGlzIGxhdW5jaGVkIGZyb20gYSBwdXNoXG4gICAqIG5vdGlmaWNhdGlvbi4gSWYgc2V0IHRvIGZhbHNlIHRoZSBtZXNzYWdlIGNlbnRlciBtdXN0IGJlIG1hbnVhbGx5IGxhdW5jaGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGxhdW5jaCB0aGUgZGVmYXVsdCBtZXNzYWdlIGNlbnRlciwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBdXRvTGF1bmNoRGVmYXVsdE1lc3NhZ2VDZW50ZXIoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdXNlciBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgbm90aWZpY2F0aW9ucywgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRVc2VyTm90aWZpY2F0aW9uc0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiB1c2VyIG5vdGlmaWNhdGlvbnMgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc1VzZXJOb3RpZmljYXRpb25zRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYXBwIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWQgb3Igbm90LiBJdHMgcG9zc2libGUgdG8gaGF2ZSBgdXNlck5vdGlmaWNhdGlvbnNFbmFibGVkYFxuICAgKiBidXQgYXBwIG5vdGlmaWNhdGlvbnMgYmVpbmcgZGlzYWJsZWQgaWYgdGhlIHVzZXIgb3B0ZWQgb3V0IG9mIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIGFwcCBub3RpZmljYXRpb25zIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNBcHBOb3RpZmljYXRpb25zRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjaGFubmVsIElELlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKElEKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5JRCBUaGUgY2hhbm5lbCBJRCBzdHJpbmdcbiAgICogQHBhcmFtIHtmYWlsdXJlQ2FsbGJhY2t9IFtmYWlsdXJlXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRDaGFubmVsSUQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBub3RpZmljYXRpb24gdGhhdCBsYXVuY2hlZCB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xlYXIgdHJ1ZSB0byBjbGVhciB0aGUgbm90aWZpY2F0aW9uLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHB1c2gpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWNjZXNzLnB1c2ggVGhlIHB1c2ggbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHB1c2ggbm90aWZpY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzcy5wdXNoLm1lc3NhZ2UgVGhlIHB1c2ggYWxlcnQgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHN1Y2Nlc3MucHVzaC5leHRyYXMgQW55IHB1c2ggZXh0cmFzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3N1Y2Nlc3MucHVzaC5ub3RpZmljYXRpb25faWRdIFRoZSBBbmRyb2lkIG5vdGlmaWNhdGlvbiBJRC5cbiAgICogQHBhcmFtIHtmYWlsdXJlQ2FsbGJhY2t9IFtmYWlsdXJlXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRMYXVuY2hOb3RpZmljYXRpb24oY2xlYXI6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYXN0IHJlY2VpdmVkIGRlZXAgbGluay5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciB0cnVlIHRvIGNsZWFyIHRoZSBkZWVwIGxpbmsuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocHVzaCl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3MuZGVlcExpbmsgVGhlIGRlZXAgbGluay5cbiAgICogQHBhcmFtIHtmYWlsdXJlQ2FsbGJhY2t9IFtmYWlsdXJlXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBmYWlsdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXREZWVwTGluayhjbGVhcjogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhZ3MgYXMgYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24odGFncyl9IHN1Y2Nlc3MgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gc3VjY2Vzcy5cbiAgICogQHBhcmFtIHtBcnJheX0gc3VjY2Vzcy50YWdzIFRoZSB0YWdzIGFzIGFuIGFycmF5LlxuICAgKiBAcGFyYW0ge2ZhaWx1cmVDYWxsYmFja30gW2ZhaWx1cmVdIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGZhaWx1cmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFRhZ3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGFncy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gdGFncyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFRhZ3ModGFnczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhbGlhcy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBzaW5jZSA2LjcuMCAtIHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luIC0gcGxlYXNlIHVzZSBnZXROYW1lZFVzZXJcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjdXJyZW50QWxpYXMpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLmN1cnJlbnRBbGlhcyBUaGUgYWxpYXMgYXMgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRBbGlhcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhbGlhcy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBzaW5jZSA2LjcuMCAgLSB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhlIHBsdWdpbiAtIHBsZWFzZSB1c2Ugc2V0TmFtZWRVc2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhcyBzdHJpbmdcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBbGlhcyhhbGlhczogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHF1aWV0IHRpbWUgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIHF1aWV0IHRpbWUgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc1F1aWV0VGltZUVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBxdWlldCB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgcXVpZXQgdGltZSwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRRdWlldFRpbWVFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgaW4gcXVpZXQgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpblF1aWV0VGltZSl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmluUXVpZXRUaW1lIEZsYWcgaW5kaWNhdGluZyBpZiBxdWlldCB0aW1lIGlzIGN1cnJlbnRseSBpbiBlZmZlY3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0luUXVpZXRUaW1lKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHF1aWV0IHRpbWUgYXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZzpcbiAgICogXCJzdGFydEhvdXJcIjogTnVtYmVyLFxuICAgKiBcInN0YXJ0TWludXRlXCI6IE51bWJlcixcbiAgICogXCJlbmRIb3VyXCI6IE51bWJlcixcbiAgICogXCJlbmRNaW51dGVcIjogTnVtYmVyXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24ocXVpZXRUaW1lKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3VjY2Vzcy5xdWlldFRpbWUgVGhlIHF1aWV0VGltZSBvYmplY3QgcmVwcmVzZW50cyBhIHRpbWVzcGFuIGR1cmluZ1xuICAgKiAgICAgICAgd2hpY2ggbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgc2lsZW5jZWQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRRdWlldFRpbWUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcXVpZXQgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SG91ciBmb3IgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0TWludXRlIGZvciBxdWlldCB0aW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kSG91ciBmb3IgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZE1pbnV0ZSBmb3IgcXVpZXQgdGltZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRRdWlldFRpbWUoc3RhcnRIb3VyOiBudW1iZXIsIHN0YXJ0TWludXRlOiBudW1iZXIsIGVuZEhvdXI6IG51bWJlciwgZW5kTWludXRlOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFuYWx5dGljcy5cbiAgICpcbiAgICogRGlzYWJsaW5nIGFuYWx5dGljcyB3aWxsIGRlbGV0ZSBhbnkgbG9jYWxseSBzdG9yZWQgZXZlbnRzXG4gICAqIGFuZCBwcmV2ZW50IGFueSBldmVudHMgZnJvbSB1cGxvYWRpbmcuIEZlYXR1cmVzIHRoYXQgZGVwZW5kIG9uIGFuYWx5dGljcyBiZWluZ1xuICAgKiBlbmFibGVkIG1heSBub3Qgd29yayBwcm9wZXJseSBpZiBpdCdzIGRpc2FibGVkIChyZXBvcnRzLCByZWdpb24gdHJpZ2dlcnMsXG4gICAqIGxvY2F0aW9uIHNlZ21lbnRhdGlvbiwgcHVzaCB0byBsb2NhbCB0aW1lKS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIGFuYWx5dGljcywgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRBbmFseXRpY3NFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW5hbHl0aWNzIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBhbmFseXRpY3MgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0FuYWx5dGljc0VuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtZWQgdXNlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihuYW1lZFVzZXIpfSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLm5hbWVkVXNlciBUaGUgbmFtZWQgdXNlciBJRCBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldE5hbWVkVXNlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBuYW1lZCB1c2VyIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZWRVc2VyIGlkZW50aWZpZXIgc3RyaW5nLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldE5hbWVkVXNlcihuYW1lZFVzZXI6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYW4gVXJiYW4gQWlyc2hpcCBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25OYW1lIGFjdGlvbiBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHsqfSBhY3Rpb25WYWx1ZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHJlc3VsdCl9IFtzdWNjZXNzXSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3VjY2Vzcy5yZXN1bHQgVGhlIHJlc3VsdCdzIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgcnVuQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZywgYWN0aW9uVmFsdWU6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgbmFtZWQgdXNlciB0YWcgZ3JvdXBzLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXROYW1lZFVzZXJUYWdHcm91cHMoKTogVGFnR3JvdXBFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIGNoYW5uZWwgdGFnIGdyb3Vwcy5cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0Q2hhbm5lbFRhZ0dyb3VwcygpOiBUYWdHcm91cEVkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgY2hhbm5lbCBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXRDaGFubmVsQXR0cmlidXRlcygpOiBBdHRyaWJ1dGVzRWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBuYW1lZCB1c2VyIGF0dHJpYnV0ZXMuXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZWRpdE5hbWVkVXNlckF0dHJpYnV0ZXMoKTogQXR0cmlidXRlc0VkaXRvciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgY2hhbm5lbCBzdWJzY3JpcHRpb24gbGlzdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDaGFubmVsU3Vic2NyaXB0aW9uTGlzdEVkaXRvcn0gQSBzdWJzY3JpcHRpb24gbGlzdCBlZGl0b3IgaW5zdGFuY2UuXG4gICAqIEBzaW5jZSAxMy4zLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlZGl0Q2hhbm5lbFN1YnNjcmlwdGlvbkxpc3RzKCk6IENoYW5uZWxTdWJzY3JpcHRpb25MaXN0RWRpdG9yIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBjb250YWN0IHN1YnNjcmlwdGlvbiBsaXN0cy5cbiAgICpcbiAgICogQHJldHVybnMge0NvbnRhY3RTdWJzY3JpcHRpb25MaXN0RWRpdG9yfSBBIHN1YnNjcmlwdGlvbiBsaXN0IGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHNpbmNlIDEzLjMuMFxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVkaXRDb250YWN0U3Vic2NyaXB0aW9uTGlzdHMoKTogQ29udGFjdFN1YnNjcmlwdGlvbkxpc3RFZGl0b3Ige1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNldCBvZiBzdWJzY3JpcHRpb24gbGlzdHMgZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwsXG4gICAqIG9wdGlvbmFsbHkgYXBwbHlpbmcgcGVuZGluZyBzdWJzY3JpcHRpb24gbGlzdCBjaGFuZ2VzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGR1cmluZyB0aGUgbmV4dCBjaGFubmVsIHVwZGF0ZS5cbiAgICogQW4gZW1wdHkgc2V0IGluZGljYXRlcyB0aGF0IHRoaXMgY29udGFjdCBpcyBub3Qgc3Vic2NyaWJlZCB0byBhbnkgbGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMCxcbiAgICBlcnJvckluZGV4OiAxLFxuICB9KVxuICBnZXRDaGFubmVsU3Vic2NyaXB0aW9uTGlzdHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNldCBvZiBzdWJzY3JpcHRpb24gbGlzdHMgZm9yIHRoZSBjdXJyZW50IGNvbnRhY3QsXG4gICAqIG9wdGlvbmFsbHkgYXBwbHlpbmcgcGVuZGluZyBzdWJzY3JpcHRpb24gbGlzdCBjaGFuZ2VzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGR1cmluZyB0aGUgbmV4dCBjb250YWN0IHVwZGF0ZS5cbiAgICogQW4gZW1wdHkgc2V0IGluZGljYXRlcyB0aGF0IHRoaXMgY29udGFjdCBpcyBub3Qgc3Vic2NyaWJlZCB0byBhbnkgbGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMCxcbiAgICBlcnJvckluZGV4OiAxLFxuICB9KVxuICBnZXRDb250YWN0U3Vic2NyaXB0aW9uTGlzdHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGFzc29jaWF0ZWQgaWRlbnRpZmllciBmb3IgdGhlIENvbm5lY3QgZGF0YSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgQ3VzdG9tIGtleSBmb3IgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGlkZW50aWZpZXIgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QXNzb2NpYXRlZElkZW50aWZpZXIoa2V5OiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIExvY2F0aW9uXG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgVXJiYW4gQWlyc2hpcCBsb2NhdGlvbiBzZXJ2aWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIGxvY2F0aW9uLCBmYWxzZSB0byBkaXNhYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldExvY2F0aW9uRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGxvY2F0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBsb2NhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiA4LjBcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBiYWNrZ3JvdW5kIGxvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgdHJ1ZSB0byBlbmFibGUgYmFja2dyb3VuZCBsb2NhdGlvbiwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAZGVwcmVjYXRlZCByZW1vdmVkIGluIHZlcnNpb24gOC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldEJhY2tncm91bmRMb2NhdGlvbkVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBiYWNrZ3JvdW5kIGxvY2F0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiBiYWNrZ3JvdW5kIGxvY2F0aW9uIHVwZGF0ZXMgYXJlIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZlZCBpbiB2ZXJzaW9uIDguMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc0JhY2tncm91bmRMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIG1lc3NhZ2UgY2VudGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc3BsYXlNZXNzYWdlQ2VudGVyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3MgdGhlIG1lc3NhZ2UgY2VudGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc21pc3NNZXNzYWdlQ2VudGVyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3MgdGhlIGluYm94IG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGlzbWlzc0luYm94TWVzc2FnZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzIHRoZSBpbmJveCBtZXNzYWdlIGluIHRoZSBvdmVybGF5LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiAxMC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGRpc21pc3NPdmVybGF5SW5ib3hNZXNzYWdlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFycmF5IG9mIGluYm94IG1lc3NhZ2VzLiBFYWNoIG1lc3NhZ2Ugd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogXCJpZFwiOiBzdHJpbmcgLSBUaGUgbWVzc2FnZXMgSUQuIE5lZWRlZCB0byBkaXNwbGF5LCBtYXJrIGFzIHJlYWQsIG9yIGRlbGV0ZSB0aGUgbWVzc2FnZS5cbiAgICogXCJ0aXRsZVwiOiBzdHJpbmcgLSBUaGUgbWVzc2FnZSB0aXRsZS5cbiAgICogXCJzZW50RGF0ZVwiOiBudW1iZXIgLSBUaGUgbWVzc2FnZSBzZW50IGRhdGUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBcImxpc3RJY29uVXJsXCI6IHN0cmluZywgb3B0aW9uYWwgLSBUaGUgaWNvbiB1cmwgZm9yIHRoZSBtZXNzYWdlLlxuICAgKiBcImlzUmVhZFwiOiBib29sZWFuIC0gVGhlIHVucmVhZC9yZWFkIHN0YXR1cyBvZiB0aGUgbWVzc2FnZS5cbiAgICogXCJleHRyYXNcIjogb2JqZWN0IC0gU3RyaW5nIHRvIFN0cmluZyBtYXAgb2YgYW55IG1lc3NhZ2UgZXh0cmFzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2VzKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWNjZXNzLm1lc3NhZ2VzIFRoZSBhcnJheSBvZiBpbmJveCBtZXNzYWdlcy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldEluYm94TWVzc2FnZXMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgYW4gaW5ib3ggbWVzc2FnZSByZWFkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZUlkIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBtYXJrIGFzIHJlYWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgbWFya0luYm94TWVzc2FnZVJlYWQobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGluYm94IG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlSWQgVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBkZWxldGVJbmJveE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgaW5ib3ggbWVzc2FnZSB1c2luZyBhIGZ1bGwgc2NyZWVuIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlSWQgVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZGlzcGxheUluYm94TWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgaW5ib3ggdG8gcmVmcmVzaC4gVGhpcyBpcyBub3JtYWxseSBub3QgbmVlZGVkIGFzIHRoZSBpbmJveFxuICAgKiB3aWxsIGF1dG9tYXRpY2FsbHkgcmVmcmVzaCBvbiBmb3JlZ3JvdW5kIG9yIHdoZW4gYSBwdXNoIGFycml2ZXMgdGhhdHNcbiAgICogYXNzb2NpYXRlZCB3aXRoIGEgbWVzc2FnZSwgYnV0IGl0IGNhbiBiZSB1c2VmdWwgd2hlbiBwcm92aWRpbmcgYSByZWZyZXNoXG4gICAqIGJ1dHRvbiBmb3IgdGhlIG1lc3NhZ2UgbGlzdGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICByZWZyZXNoSW5ib3goKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIGluYm94IG1lc3NhZ2UgdXNpbmcgYW4gb3ZlcmxheSBkaXNwbGF5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZUlkIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBkZXByZWNhdGVkIHJlbW92ZWQgaW4gdmVyc2lvbiAxMC4wXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIG92ZXJsYXlJbmJveE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYSBub3RpZmljYXRpb24gYnkgaWRlbnRpZmllci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aWZpZXIgVGhlIG5vdGlmaWNhdGlvbiBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGNsZWFyTm90aWZpY2F0aW9uKGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgbm90aWZpY2F0aW9ucyBwb3N0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGNsZWFyTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGN1cnJlbnRseSBhY3RpdmUgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogTm90ZTogT24gQW5kcm9pZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgb24gQW5kcm9pZCBNIG9yIGhpZ2hlci5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlcyl9IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0QWN0aXZlTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGlPUyBvbmx5XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYXV0byBiYWRnZS4gRGVmYXVsdHMgdG8gYE5PYC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIGF1dG8gYmFkZ2UsIGZhbHNlIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QXV0b2JhZGdlRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYmFkZ2UgbnVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gY291bnQgbnVtYmVyIHNwZWNpZmllZCBiYWRnZSB0byBzZXQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0QmFkZ2VOdW1iZXIoY291bnQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYmFkZ2UgbnVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGJhZGdlTnVtYmVyKX0gc3VjY2VzcyBUaGUgZnVuY3Rpb24gdG8gY2FsbCBvbiBzdWNjZXNzLlxuICAgKiBAcGFyYW0ge2ludH0gc3VjY2Vzcy5iYWRnZU51bWJlciBUaGUgY3VycmVudCBhcHBsaWNhdGlvbiBiYWRnZSBudW1iZXIuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRCYWRnZU51bWJlcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGJhZGdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJlc2V0QmFkZ2UoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaU9TIG5vdGlmaWNhdGlvbiB0eXBlcy4gU3BlY2lmeSB0aGUgY29tYmluYXRpb24gb2ZcbiAgICogYmFkZ2VzLCBzb3VuZCBhbmQgYWxlcnRzIHRoYXQgYXJlIGRlc2lyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlcyBzcGVjaWZpZWQgbm90aWZpY2F0aW9uIHR5cGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldE5vdGlmaWNhdGlvblR5cGVzKHR5cGVzOiBOb3RpZmljYXRpb25UeXBlKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaU9TIHByZXNlbnRhdGlvbiBvcHRpb25zLiBTcGVjaWZ5IHRoZSBjb21iaW5hdGlvbiBvZlxuICAgKiBiYWRnZXMsIHNvdW5kIGFuZCBhbGVydHMgdGhhdCBhcmUgZGVzaXJlZC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgdHlwZXMgc3BlY2lmaWVkIHByZXNlbnRhdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHNldFByZXNlbnRhdGlvbk9wdGlvbnMob3B0aW9uczogUHJlc2VudGF0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW5kcm9pZCBvbmx5XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBub3RpZmljYXRpb24gc291bmQgaXMgZW5hYmxlZCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oZW5hYmxlZCl9IHN1Y2Nlc3MgU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNzLmVuYWJsZWQgRmxhZyBpbmRpY2F0aW5nIGlmIHNvdW5kIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaXNTb3VuZEVuYWJsZWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBub3RpZmljYXRpb24gc291bmQuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBzb3VuZCwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRTb3VuZEVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBub3RpZmljYXRpb24gdmlicmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVuYWJsZWQpfSBzdWNjZXNzIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzcy5lbmFibGVkIEZsYWcgaW5kaWNhdGluZyBpZiB2aWJyYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBpc1ZpYnJhdGVFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgbm90aWZpY2F0aW9uIHZpYnJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIHRydWUgdG8gZW5hYmxlIHZpYnJhdGlvbiwgZmFsc2UgdG8gZGlzYWJsZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRWaWJyYXRlRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGN1c3RvbSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBjdXN0b20gZXZlbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQubmFtZSBUaGUgZXZlbnQncyBuYW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2V2ZW50LnZhbHVlXSBUaGUgZXZlbnQncyB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudC50cmFuc2FjdGlvbklkXSBUaGUgZXZlbnQncyB0cmFuc2FjdGlvbiBJRC5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtldmVudC5wcm9wZXJ0aWVzXSBUaGUgZXZlbnQncyBwcm9wZXJ0aWVzLiBPbmx5IG51bWJlcnMsIGJvb2xlYW5zLCBzdHJpbmdzLCBhbmQgYXJyYXkgb2Ygc3RyaW5ncyBhcmUgc3VwcG9ydGVkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGFkZEN1c3RvbUV2ZW50KGV2ZW50OiBvYmplY3QpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgc2NyZWVuIHRyYWNraW5nIGZvciBhIHNwZWNpZmljIGFwcCBzY3JlZW4sIG11c3QgYmUgY2FsbGVkIG9uY2UgcGVyIHRyYWNrZWQgc2NyZWVuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuIFRoZSBzY3JlZW4ncyBzdHJpbmcgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTEuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIHRyYWNrU2NyZWVuKHNjcmVlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBmZWF0dXJlcywgYWRkaW5nIHRoZW0gdG8gdGhlIHNldCBvZiBjdXJyZW50bHkgZW5hYmxlZCBmZWF0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgdG8gZW5hYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDEsXG4gICAgZXJyb3JJbmRleDogMixcbiAgfSlcbiAgZW5hYmxlRmVhdHVyZShmZWF0dXJlczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBmZWF0dXJlcywgcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBzZXQgb2YgY3VycmVudGx5IGVuYWJsZWQgZmVhdHVyZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmVhdHVyZXMgVGhlIGZlYXR1cmVzIHRvIGRpc2FibGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICBkaXNhYmxlRmVhdHVyZShmZWF0dXJlczogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IGVuYWJsZWQgZmVhdHVyZXMsIHJlcGxhY2luZyBhbnkgY3VycmVudGx5IGVuYWJsZWQgZmVhdHVyZXMgd2l0aCB0aGUgZ2l2ZW4gc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyB0byBzZXQgYXMgZW5hYmxlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBzZXRFbmFibGVkRmVhdHVyZXMoZmVhdHVyZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBlbmFibGVkIGZlYXR1cmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc3VjY2Vzc10gU3VjY2VzcyBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihtZXNzYWdlKX0gW2ZhaWx1cmVdIEZhaWx1cmUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmYWlsdXJlLm1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzaW5jZSAxMy4wLjBcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzdWNjZXNzSW5kZXg6IDAsXG4gICAgZXJyb3JJbmRleDogMSxcbiAgfSlcbiAgZ2V0RW5hYmxlZEZlYXR1cmVzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgb2YgdGhlIGdpdmVuIGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyB0byBjaGVjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMC4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIGlzRmVhdHVyZUVuYWJsZWQoZmVhdHVyZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgUHJlZmVyZW5jZSBDZW50ZXIgd2l0aCB0aGUgZ2l2ZW4gSUQgdHJvdWdoIGEgY2FsbGJhY2sgbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZmVyZW5jZUNlbnRlcklkIFRoZSBwcmVmZXJlbmNlIGNlbnRlciBJRC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obWVzc2FnZSl9IFtmYWlsdXJlXSBGYWlsdXJlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmFpbHVyZS5tZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKiBAc2luY2UgMTMuMy4wXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3VjY2Vzc0luZGV4OiAxLFxuICAgIGVycm9ySW5kZXg6IDIsXG4gIH0pXG4gIGdldFByZWZlcmVuY2VDZW50ZXJDb25maWcocHJlZmVyZW5jZUNlbnRlcklkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgUHJlZmVyZW5jZSBDZW50ZXIgd2l0aCB0aGUgZ2l2ZW4gcHJlZmVyZW5jZUNlbnRlcklkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlbmZlcmVuY2VDZW50ZXJJZCBUaGUgcHJlZmVyZW5jZSBjZW50ZXIgSUQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDEzLjAuMFxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN1Y2Nlc3NJbmRleDogMSxcbiAgICBlcnJvckluZGV4OiAyLFxuICB9KVxuICBvcGVuUHJlZmVyZW5jZUNlbnRlcihwcmVuZmVyZW5jZUNlbnRlcklkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGxvY2FsZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlIGxhbmd1YWdlIGFuZCBvcHRpb25hbCBjb3VudHJ5IGNvZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDE0LjMuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRDdXJyZW50TG9jYWxlKGxvY2FsZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudGx5IHNldCBsb2NhbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obG9jYWxlKX0gW3N1Y2Nlc3NdIFN1Y2Nlc3MgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzLmxvY2FsZSBUaGUgbG9jYWxlIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDE0LjMuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRDdXJyZW50TG9jYWxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgY3VycmVudCBsb2NhbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtzdWNjZXNzXSBTdWNjZXNzIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG1lc3NhZ2UpfSBbZmFpbHVyZV0gRmFpbHVyZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZhaWx1cmUubWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICogQHNpbmNlIDE0LjMuMFxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBjbGVhckxvY2FsZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxufVxuIl19