ngx-agora
Version:
Angular wrapper for Agora RTC client (https://www.agora.io/en/)
386 lines • 42.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/data/enums/client-event.enum.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @enum {string} */
const ClientEvent = {
/**
* Occurs when the first remote audio frame is decoded.
* The SDK triggers this callback when the local client successfully subscribes to a remote stream and decodes the first audio frame.
*
* @example
* client.on('first-audio-frame-decode', function (evt) {
* console.log('first-audio-frame-decode');
* console.log(evt.stream);
* })
*/
FirstAudioFrameDecoded: "first-audio-frame-decode",
/**
* Occurs when the first remote video frame is decoded.
* The SDK triggers this callback when the local client successfully subscribes to a remote stream and decodes the first video frame.
*
* @example
* client.on('first-video-frame-decode', function (evt) {
* console.log('first-video-frame-decode');
* console.log(evt.stream);
* })
*/
FirstVideoFrameDecoded: "first-video-frame-decode",
/**
* Occurs when the local stream is published.
*
* @example
* client.on("stream-published", function(evt) {
* console.log("local stream published");
* //……
* })
*/
LocalStreamPublished: "stream-published",
/**
* Occurs when the remote stream is added.
*
* @remark
* When the local user joins the channel, if other users are already in the channel,
* the SDK also reports to the app on the existing remote streams.
*
* @example
* client.on("stream-added", function(evt) {
* var stream = evt.stream;
* console.log("new stream added ", stream.getId());
* // Subscribe the stream.
* //……
* })
*/
RemoteStreamAdded: "stream-added",
/**
* Occurs when the remote stream is removed; for example, a peer user calls
* [Client.unpublish](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#unpublish).
*
* @example
* client.on("stream-removed", function(evt) {
* var stream = evt.stream;
* console.log("remote stream was removed", stream.getId());
* //……
* });
*/
RemoteStreamRemoved: "stream-removed",
/**
* Occurs when a user subscribes to a remote stream.
*
* @example
* client.on("stream-subscribed", function(evt) {
* var stream = evt.stream;
* console.log("new stream subscribed ", stream.getId());
* // Play the stream.
* //……
* })
*/
RemoteStreamSubscribed: "stream-subscribed",
/**
* Occurs when the peer user leaves the channel; for example, the peer user calls
* [Client.leave](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#leave).
*/
PeerLeave: "peer-leave",
/**
* Occurs when a remote user or host joins the channel.
* - Communication channel (rtc mode): This callback notifies the app that another user joins the channel.
* If other users are already in the channel, the SDK also reports to the app on the existing users.
* - Live-broadcast channel (live mode): This callback notifies the app that the host joins the channel.
* If other hosts are already in the channel, the SDK also reports to the app on the existing hosts.
* Agora recommends limiting the number of hosts to 17.
*/
PeerOnline: "peer-online",
/**
* Occurs when the peer user mutes the audio.
*
* @example
* client.on("mute-audio", function(evt) {
* var uid = evt.uid;
* console.log("mute audio:" + uid);
* //alert("mute audio:" + uid)
* });
*/
RemoteAudioMuted: "mute-audio",
/**
* Occurs when the peer user unmutes the audio.
*
* @example
* client.on("unmute-audio", function (evt) {
* var uid = evt.uid;
* console.log("unmute audio:" + uid);
* });
*/
RemoteAudioUnmuted: "unmute-audio",
/**
* Occurs when the peer user turns off the video.
*
* @example
* client.on("mute-video", function (evt) {
* var uid = evt.uid;
* console.log("mute video" + uid);
* //alert("mute video:" + uid);
* })
*/
RemoveVideoMuted: "mute-video",
/**
* Occurs when the peer user turns on the video.
*
* @example
* client.on("unmute-video", function (evt) {
* var uid = evt.uid;
* console.log("unmute video:" + uid);
* })
*/
RemoteVideoUnmuted: "unmute-video",
/**
* Occurs when encryption or decryption fails during publishing or subscribing to a stream.
* The failure is usually due to a wrong encryption password
* ([setEncryptionSecret](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setencryptionsecret))
* or an incorrect encryption
* mode ([setEncryptionMode](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setencryptionmode)).
*
* @since 3.0.0
*/
CryptError: "crypt-error",
/**
* This callback notifies the peer user that he/she is banned from the channel. Only the banned users receive this callback.
* Usually the reason is that the UID is banned (`K_UID_BANNED`(14)).
*
* @example
* client.on("client-banned", function (evt) {
* var uid = evt.uid;
* var attr = evt.attr;
* console.log(" user banned:" + uid + ", bantype:" + attr);
* alert(" user banned:" + uid + ", bantype:" + attr);
* });
*/
LocalClientBanned: "client-banned",
/** This callback notifies the application who is the active speaker in the channel. */
ActiveSpeaker: "active-speaker",
/**
* This callback notifies the application of all the speaking remote users and their volumes.
*
* It is disabled by default. You can enable this event by calling enableAudioVolumeIndicator.
* If enabled, it reports the volumes every two seconds regardless of whether there are users speaking.
*
* The volume is an integer ranging from 0 to 100. Usually a user with volume above five will be countedas a speaking user.
*/
VolumeIndicator: "volume-indicator",
/** Occurs when the live streaming starts. */
LiveStreamingStarted: "liveStreamingStarted",
/** Occurs when the live streaming fails. */
LiveStreamingFailed: "liveStreamingFailed",
/** Occurs when the live streaming stops. */
LiveStreamingStopped: "liveStreamingStopped",
/**
* Occurs when the live transcoding setting is updated.
*
* The SDK triggers this callback when the live transcoding setting is updated by calling the
* [setLiveTranscoding](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setlivetranscoding) method.
*
* @remark
* The first call of the
* [setLiveTranscoding](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#setlivetranscoding)
* method does not trigger this callback.
*/
LiveTranscodingUpdated: "liveTranscodingUpdated",
/** Occurs when the injected online media stream's status is updated. */
StreamInjectedStatusUpdated: "streamInjectedStatus",
/**
* Occurs when the Token expires in 30 seconds.
*
* You should request a new Token from your server and call
* [Client.renewToken](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#renewtoken).
*/
TokenPrivelegeWillExpire: "onTokenPrivilegeWillExpire",
/**
* Occurs when the Token expires.
*
* You should request a new Token from your server and call
* [Client.renewToken](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#renewtoken).
*/
TokenPrivelegeExpired: "onTokenPrivilegeDidExpire",
/**
* Occurs when an error message is reported and requires error handling.
* For details, @see [Error Codes and Warning Codes](https://docs.agora.io/en/Video/the_error_web).
*/
Error: "error",
/**
* Occurs when the network type changes.
*
* @remark
* Chrome 61+ is required for this function, and the compatibility is not guaranteed.
*
* @see [Network Information API](https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API) for details.
*/
NetworkTypeChanged: "network-type-changed",
/**
* Occurs when an audio input device is added or removed.
*
* @example
* client.on("recording-device-changed", function(evt) {
* console.log("Recording Device Changed", evt.state, evt.device);
* });
*/
RecordingDeviceChanged: "recording-device-changed",
/**
* Occurs when an audio output device is added or removed.
* @remark
* Only supports Chrome 49+.
*/
AudioOutputDeviceChanged: "playout-device-changed",
/** Occurs when a camera is added or removed. */
CameraChanged: "camera-changed",
/**
* Occurs when the type of a video stream changes.
* It happens when a high-video stream changes to a low-video stream, or vice versa.
*
* The stream type (streamType):
* - 0: High-bitrate, high-resolution video stream.
* - 1: Low-bitrate, low-resolution video stream.
*/
StreamTypeChanged: "stream-type-changed",
/**
* Occurs when the network connection state changes.
*
* The connection between the SDK and Agora's edge server has the following states:
*
* - DISCONNECTED: The SDK is disconnected from Agora's edge server.
* This is the initial state before Client.join.
* The SDK also enters this state after the app calls Client.leave.
* - CONNECTING: The SDK is connecting to Agora's edge server. The SDK enters this state when calling Client.join or
* reconnecting to Agora's edge server automatically after the connection is lost.
* - CONNECTED: The SDK is connected to Agora's edge server and joins a channel. You can now publish or subscribe to a stream
* in the channel. If the connection is lost because, for example, the network is down or switched, the SDK triggers this callback
* and notifies the app that the state changes from CONNECTED to CONNECTING.
* - DISCONNECTING: The SDK is disconnecting from Agora's edge server. The SDK enters this state when calling Client.leave.
*/
ConnectionStateChanged: "connection-state-change",
/** Occurs when the SDK starts republishing or re-subscribing to a stream. */
StreamReconnectionStart: "stream-reconnect-start",
/** Occurs when the SDK finishes republishing or re-subscribing to a stream. */
StreamReconnectionEnd: "stream-reconnect-end",
/** Occurs when the user role switches in a live broadcast. For example, from a host to an audience or vice versa. */
ClientRoleChanged: "client-role-changed",
/**
* Reports the network quality of the local user once every two seconds.
*
* This callback reports on the uplink and downlink network conditions of the local user.
*
* @remark
* This is an experimental feature and the network quality rating is for reference only.
*/
NetworkQualityReported: "network-quality",
/**
* Occurs when the remote video stream falls back to an audio-only stream due to unreliable network
* conditions or switches back to the video after the network conditions improve.
*
* If you set `fallbackType` as 2 in
* [setStreamFallbackOption](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html#setstreamfallbackoption),
* the SDK triggers this callback when the remote media stream falls back to audio only due to unreliable network conditions
* or switches back to the video after the network condition improves.
*
* @remark
* Once the remote media stream is switched to the low stream due to unreliable network conditions, you can monitor
* the stream switch between a high stream and low stream in the stream-type-changed callback.
*/
StreamFallback: "stream-fallback",
/**
* Occurs when a remote stream adds or removes a track.
*
* When a remote stream calls the [addTrack](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.stream.html#addtrack)
* or [removeTrack](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.stream.html#removetrack)
* method, the SDK triggers this callback.
*/
StreamUpdated: "stream-updated",
/**
* Reports exception events in the channel.
* Exceptions are not errors, but usually mean quality issues.
* This callback also reports recovery from an exception.
* Each exception event has a corresponding recovery event
* @see https://web-cdn.agora.io/docs-files/1547180053430 for details
*/
Exception: "exception",
/**
* Occurs when a remote user of the Native SDK calls `enableLocalVideo(true)` to enable video capture.
*
* @since 3.0.0
*/
RemoteVideoCaptureEnabled: "enable-local-video",
/**
* Occurs when a remote user of the Native SDK calls `enableLocalVideo(false)` to disable video capture.
*
* @since 3.0.0
*/
RemoteVideoCaptureDisabled: "disable-local-video",
/**
* Reports events during the media stream relay.
*
* Parameters
* - evt: `object`
* - code: `number`
* The event code for media stream relay.
* - 0: The user disconnects from the server due to a poor network connection.
* - 1: The user is connected to the server.
* - 2: The user joins the source channel.
* - 3: The user joins the destination channel.
* - 4: The SDK starts relaying the media stream to the destination channel.
* - 5: The server receives the video stream from the source channel.
* - 6: The server receives the audio stream from the source channel.
* - 7: The destination channel is updated.
*/
MediaStreamEventRelayed: "channel-media-relay-event",
/**
* Occurs when the state of the media stream relay changes.
*
* @since 3.0.0
* @description
* The SDK reports the state and error code of the current media relay in this callback.
*
* Parameters
* - evt: `object`
* - code: `number`
* The error code.
* - 0: No error.
* - 1: An error occurs in the server response.
* - 2: No server response.
* - 3: The SDK fails to access the service, probably due to limited resources of the server.
* - 4: Fails to send the relay request.
* - 5: Fails to accept the relay request.
* - 6: The server fails to receive the media stream.
* - 7: The server fails to send the media stream.
* - 8: The SDK disconnects from the server and fails to reconnect to the server due to a poor network connection.
* In this case, the SDK resets the relay state. You can try
* [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
* to restart the media stream relay.
* - 9: An internal error occurs in the server.
* - 10: The token of the source channel has expired.
* - 11: The token of the destination channel has expired.
* - 12: The relay has already started. Possibly caused by calling
* [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
* repeatedly, or calling
* [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
* before
* [stopChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#stopchannelmediarelay)
* succeeds.
* - 13: The relay has not started. Possibly caused by calling
* [updateChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#updatechannelmediarelay)
* before
* [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
* succeeds.
*
* - state: `number`
* The state code.
* - 0: The SDK is initializing.
* - 1: The SDK tries to relay the media stream to the destination channel.
* - 2: The SDK successfully relays the media stream to the destination channel.
* - 3: An error occurs. See `code` for the error code. In case of an error, the SDK resets the media stream relay state,
* and you need to call
* [startChannelMediaRelay](https://docs.agora.io/en/Voice/API%20Reference/web/interfaces/agorartc.client.html#startchannelmediarelay)
* to restart the relay.
*/
MediaStreamRelayStateChanged: "channel-media-relay-state",
};
export { ClientEvent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWV2ZW50LmVudW0uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYWdvcmEvIiwic291cmNlcyI6WyJsaWIvZGF0YS9lbnVtcy9jbGllbnQtZXZlbnQuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxNQUFZLFdBQVc7SUFDckI7Ozs7Ozs7OztPQVNHO0lBQ0gsc0JBQXNCLDRCQUE2QjtJQUNuRDs7Ozs7Ozs7O09BU0c7SUFDSCxzQkFBc0IsNEJBQTZCO0lBQ25EOzs7Ozs7OztPQVFHO0lBQ0gsb0JBQW9CLG9CQUFxQjtJQUN6Qzs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILGlCQUFpQixnQkFBaUI7SUFDbEM7Ozs7Ozs7Ozs7T0FVRztJQUNILG1CQUFtQixrQkFBbUI7SUFDdEM7Ozs7Ozs7Ozs7T0FVRztJQUNILHNCQUFzQixxQkFBc0I7SUFDNUM7OztPQUdHO0lBQ0gsU0FBUyxjQUFlO0lBQ3hCOzs7Ozs7O09BT0c7SUFDSCxVQUFVLGVBQWdCO0lBQzFCOzs7Ozs7Ozs7T0FTRztJQUNILGdCQUFnQixjQUFlO0lBQy9COzs7Ozs7OztPQVFHO0lBQ0gsa0JBQWtCLGdCQUFpQjtJQUNuQzs7Ozs7Ozs7O09BU0c7SUFDSCxnQkFBZ0IsY0FBZTtJQUMvQjs7Ozs7Ozs7T0FRRztJQUNILGtCQUFrQixnQkFBaUI7SUFDbkM7Ozs7Ozs7O09BUUc7SUFDSCxVQUFVLGVBQWdCO0lBQzFCOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsaUJBQWlCLGlCQUFrQjtJQUNuQyx1RkFBdUY7SUFDdkYsYUFBYSxrQkFBbUI7SUFDaEM7Ozs7Ozs7T0FPRztJQUNILGVBQWUsb0JBQXFCO0lBQ3BDLDZDQUE2QztJQUM3QyxvQkFBb0Isd0JBQXlCO0lBQzdDLDRDQUE0QztJQUM1QyxtQkFBbUIsdUJBQXdCO0lBQzNDLDRDQUE0QztJQUM1QyxvQkFBb0Isd0JBQXlCO0lBQzdDOzs7Ozs7Ozs7O09BVUc7SUFDSCxzQkFBc0IsMEJBQTJCO0lBQ2pELHdFQUF3RTtJQUN4RSwyQkFBMkIsd0JBQXlCO0lBQ3BEOzs7OztPQUtHO0lBQ0gsd0JBQXdCLDhCQUErQjtJQUN2RDs7Ozs7T0FLRztJQUNILHFCQUFxQiw2QkFBOEI7SUFDbkQ7OztPQUdHO0lBQ0gsS0FBSyxTQUFVO0lBQ2Y7Ozs7Ozs7T0FPRztJQUNILGtCQUFrQix3QkFBeUI7SUFDM0M7Ozs7Ozs7T0FPRztJQUNILHNCQUFzQiw0QkFBNkI7SUFDbkQ7Ozs7T0FJRztJQUNILHdCQUF3QiwwQkFBMkI7SUFDbkQsZ0RBQWdEO0lBQ2hELGFBQWEsa0JBQW1CO0lBQ2hDOzs7Ozs7O09BT0c7SUFDSCxpQkFBaUIsdUJBQXdCO0lBQ3pDOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsc0JBQXNCLDJCQUE0QjtJQUNsRCw2RUFBNkU7SUFDN0UsdUJBQXVCLDBCQUEyQjtJQUNsRCwrRUFBK0U7SUFDL0UscUJBQXFCLHdCQUF5QjtJQUM5QyxxSEFBcUg7SUFDckgsaUJBQWlCLHVCQUF3QjtJQUV6Qzs7Ozs7OztPQU9HO0lBQ0gsc0JBQXNCLG1CQUFvQjtJQUMxQzs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxjQUFjLG1CQUFvQjtJQUNsQzs7Ozs7O09BTUc7SUFDSCxhQUFhLGtCQUFtQjtJQUNoQzs7Ozs7O09BTUc7SUFDSCxTQUFTLGFBQWM7SUFDdkI7Ozs7T0FJRztJQUNILHlCQUF5QixzQkFBdUI7SUFDaEQ7Ozs7T0FJRztJQUNILDBCQUEwQix1QkFBd0I7SUFDbEQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsdUJBQXVCLDZCQUE4QjtJQUNyRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BZ0RHO0lBQ0gsNEJBQTRCLDZCQUE4QjtFQUMzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRzIHRoYXQgdGhlIEFnb3JhLmlvIFNESyBgY2xpZW50Lm9uKClgIGZ1bmN0aW9uIHJlY29nbml6ZXMuXG4gKlxuICogSWYgdGhlIEFQSSBjaGFuZ2VzIGZhc3RlciB0aGFuIHRoZSBsaWJyYXJ5LCBhIHF1aWNrIHR5cGUgb3ZlcnJpZGUgY2FuIGhlbHAgYnlwYXNzIGNvbXBpbGVyIGVycm9yczpcbiAqXG4gKiBAZXhhbXBsZVxuICogdGhpcy5uZ3hBZ29yYVNlcnZpY2UuY2xpZW50Lm9uKCduZXctZXZlbnQnIGFzIENsaWVudEV2ZW50LCAoZGF0YSkgPT4ge30pXG4gKi9cbmV4cG9ydCBlbnVtIENsaWVudEV2ZW50IHtcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSBmaXJzdCByZW1vdGUgYXVkaW8gZnJhbWUgaXMgZGVjb2RlZC5cbiAgICogVGhlIFNESyB0cmlnZ2VycyB0aGlzIGNhbGxiYWNrIHdoZW4gdGhlIGxvY2FsIGNsaWVudCBzdWNjZXNzZnVsbHkgc3Vic2NyaWJlcyB0byBhIHJlbW90ZSBzdHJlYW0gYW5kIGRlY29kZXMgdGhlIGZpcnN0IGF1ZGlvIGZyYW1lLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjbGllbnQub24oJ2ZpcnN0LWF1ZGlvLWZyYW1lLWRlY29kZScsIGZ1bmN0aW9uIChldnQpIHtcbiAgICogIGNvbnNvbGUubG9nKCdmaXJzdC1hdWRpby1mcmFtZS1kZWNvZGUnKTtcbiAgICogIGNvbnNvbGUubG9nKGV2dC5zdHJlYW0pO1xuICAgKiB9KVxuICAgKi9cbiAgRmlyc3RBdWRpb0ZyYW1lRGVjb2RlZCA9ICdmaXJzdC1hdWRpby1mcmFtZS1kZWNvZGUnLFxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIGZpcnN0IHJlbW90ZSB2aWRlbyBmcmFtZSBpcyBkZWNvZGVkLlxuICAgKiBUaGUgU0RLIHRyaWdnZXJzIHRoaXMgY2FsbGJhY2sgd2hlbiB0aGUgbG9jYWwgY2xpZW50IHN1Y2Nlc3NmdWxseSBzdWJzY3JpYmVzIHRvIGEgcmVtb3RlIHN0cmVhbSBhbmQgZGVjb2RlcyB0aGUgZmlyc3QgdmlkZW8gZnJhbWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNsaWVudC5vbignZmlyc3QtdmlkZW8tZnJhbWUtZGVjb2RlJywgZnVuY3Rpb24gKGV2dCkge1xuICAgKiAgY29uc29sZS5sb2coJ2ZpcnN0LXZpZGVvLWZyYW1lLWRlY29kZScpO1xuICAgKiAgY29uc29sZS5sb2coZXZ0LnN0cmVhbSk7XG4gICAqIH0pXG4gICAqL1xuICBGaXJzdFZpZGVvRnJhbWVEZWNvZGVkID0gJ2ZpcnN0LXZpZGVvLWZyYW1lLWRlY29kZScsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgbG9jYWwgc3RyZWFtIGlzIHB1Ymxpc2hlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY2xpZW50Lm9uKFwic3RyZWFtLXB1Ymxpc2hlZFwiLCBmdW5jdGlvbihldnQpIHtcbiAgICogIGNvbnNvbGUubG9nKFwibG9jYWwgc3RyZWFtIHB1Ymxpc2hlZFwiKTtcbiAgICogIC8v4oCm4oCmXG4gICAqIH0pXG4gICAqL1xuICBMb2NhbFN0cmVhbVB1Ymxpc2hlZCA9ICdzdHJlYW0tcHVibGlzaGVkJyxcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSByZW1vdGUgc3RyZWFtIGlzIGFkZGVkLlxuICAgKlxuICAgKiBAcmVtYXJrXG4gICAqIFdoZW4gdGhlIGxvY2FsIHVzZXIgam9pbnMgdGhlIGNoYW5uZWwsIGlmIG90aGVyIHVzZXJzIGFyZSBhbHJlYWR5IGluIHRoZSBjaGFubmVsLFxuICAgKiB0aGUgU0RLIGFsc28gcmVwb3J0cyB0byB0aGUgYXBwIG9uIHRoZSBleGlzdGluZyByZW1vdGUgc3RyZWFtcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY2xpZW50Lm9uKFwic3RyZWFtLWFkZGVkXCIsIGZ1bmN0aW9uKGV2dCkge1xuICAgKiAgdmFyIHN0cmVhbSA9IGV2dC5zdHJlYW07XG4gICAqICBjb25zb2xlLmxvZyhcIm5ldyBzdHJlYW0gYWRkZWQgXCIsIHN0cmVhbS5nZXRJZCgpKTtcbiAgICogIC8vIFN1YnNjcmliZSB0aGUgc3RyZWFtLlxuICAgKiAgLy/igKbigKZcbiAgICogfSlcbiAgICovXG4gIFJlbW90ZVN0cmVhbUFkZGVkID0gJ3N0cmVhbS1hZGRlZCcsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgcmVtb3RlIHN0cmVhbSBpcyByZW1vdmVkOyBmb3IgZXhhbXBsZSwgYSBwZWVyIHVzZXIgY2FsbHNcbiAgICogW0NsaWVudC51bnB1Ymxpc2hdKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9Wb2ljZS9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjdW5wdWJsaXNoKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY2xpZW50Lm9uKFwic3RyZWFtLXJlbW92ZWRcIiwgZnVuY3Rpb24oZXZ0KSB7XG4gICAqICB2YXIgc3RyZWFtID0gZXZ0LnN0cmVhbTtcbiAgICogIGNvbnNvbGUubG9nKFwicmVtb3RlIHN0cmVhbSB3YXMgcmVtb3ZlZFwiLCBzdHJlYW0uZ2V0SWQoKSk7XG4gICAqICAvL+KApuKAplxuICAgKiB9KTtcbiAgICovXG4gIFJlbW90ZVN0cmVhbVJlbW92ZWQgPSAnc3RyZWFtLXJlbW92ZWQnLFxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gYSB1c2VyIHN1YnNjcmliZXMgdG8gYSByZW1vdGUgc3RyZWFtLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjbGllbnQub24oXCJzdHJlYW0tc3Vic2NyaWJlZFwiLCBmdW5jdGlvbihldnQpIHtcbiAgICogIHZhciBzdHJlYW0gPSBldnQuc3RyZWFtO1xuICAgKiAgY29uc29sZS5sb2coXCJuZXcgc3RyZWFtIHN1YnNjcmliZWQgXCIsIHN0cmVhbS5nZXRJZCgpKTtcbiAgICogIC8vIFBsYXkgdGhlIHN0cmVhbS5cbiAgICogIC8v4oCm4oCmXG4gICAqIH0pXG4gICAqL1xuICBSZW1vdGVTdHJlYW1TdWJzY3JpYmVkID0gJ3N0cmVhbS1zdWJzY3JpYmVkJyxcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSBwZWVyIHVzZXIgbGVhdmVzIHRoZSBjaGFubmVsOyBmb3IgZXhhbXBsZSwgdGhlIHBlZXIgdXNlciBjYWxsc1xuICAgKiBbQ2xpZW50LmxlYXZlXShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVmlkZW8vQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sI2xlYXZlKS5cbiAgICovXG4gIFBlZXJMZWF2ZSA9ICdwZWVyLWxlYXZlJyxcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgcmVtb3RlIHVzZXIgb3IgaG9zdCBqb2lucyB0aGUgY2hhbm5lbC5cbiAgICogLSBDb21tdW5pY2F0aW9uIGNoYW5uZWwgKHJ0YyBtb2RlKTogVGhpcyBjYWxsYmFjayBub3RpZmllcyB0aGUgYXBwIHRoYXQgYW5vdGhlciB1c2VyIGpvaW5zIHRoZSBjaGFubmVsLlxuICAgKiAgIElmIG90aGVyIHVzZXJzIGFyZSBhbHJlYWR5IGluIHRoZSBjaGFubmVsLCB0aGUgU0RLIGFsc28gcmVwb3J0cyB0byB0aGUgYXBwIG9uIHRoZSBleGlzdGluZyB1c2Vycy5cbiAgICogLSBMaXZlLWJyb2FkY2FzdCBjaGFubmVsIChsaXZlIG1vZGUpOiBUaGlzIGNhbGxiYWNrIG5vdGlmaWVzIHRoZSBhcHAgdGhhdCB0aGUgaG9zdCBqb2lucyB0aGUgY2hhbm5lbC5cbiAgICogICBJZiBvdGhlciBob3N0cyBhcmUgYWxyZWFkeSBpbiB0aGUgY2hhbm5lbCwgdGhlIFNESyBhbHNvIHJlcG9ydHMgdG8gdGhlIGFwcCBvbiB0aGUgZXhpc3RpbmcgaG9zdHMuXG4gICAqICAgQWdvcmEgcmVjb21tZW5kcyBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIGhvc3RzIHRvIDE3LlxuICAgKi9cbiAgUGVlck9ubGluZSA9ICdwZWVyLW9ubGluZScsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgcGVlciB1c2VyIG11dGVzIHRoZSBhdWRpby5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY2xpZW50Lm9uKFwibXV0ZS1hdWRpb1wiLCBmdW5jdGlvbihldnQpIHtcbiAgICogIHZhciB1aWQgPSBldnQudWlkO1xuICAgKiAgY29uc29sZS5sb2coXCJtdXRlIGF1ZGlvOlwiICsgdWlkKTtcbiAgICogIC8vYWxlcnQoXCJtdXRlIGF1ZGlvOlwiICsgdWlkKVxuICAgKiB9KTtcbiAgICovXG4gIFJlbW90ZUF1ZGlvTXV0ZWQgPSAnbXV0ZS1hdWRpbycsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgcGVlciB1c2VyIHVubXV0ZXMgdGhlIGF1ZGlvLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjbGllbnQub24oXCJ1bm11dGUtYXVkaW9cIiwgZnVuY3Rpb24gKGV2dCkge1xuICAgKiAgdmFyIHVpZCA9IGV2dC51aWQ7XG4gICAqICBjb25zb2xlLmxvZyhcInVubXV0ZSBhdWRpbzpcIiArIHVpZCk7XG4gICAqIH0pO1xuICAgKi9cbiAgUmVtb3RlQXVkaW9Vbm11dGVkID0gJ3VubXV0ZS1hdWRpbycsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgcGVlciB1c2VyIHR1cm5zIG9mZiB0aGUgdmlkZW8uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNsaWVudC5vbihcIm11dGUtdmlkZW9cIiwgZnVuY3Rpb24gKGV2dCkge1xuICAgKiAgdmFyIHVpZCA9IGV2dC51aWQ7XG4gICAqICBjb25zb2xlLmxvZyhcIm11dGUgdmlkZW9cIiArIHVpZCk7XG4gICAqICAvL2FsZXJ0KFwibXV0ZSB2aWRlbzpcIiArIHVpZCk7XG4gICAqIH0pXG4gICAqL1xuICBSZW1vdmVWaWRlb011dGVkID0gJ211dGUtdmlkZW8nLFxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIHBlZXIgdXNlciB0dXJucyBvbiB0aGUgdmlkZW8uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNsaWVudC5vbihcInVubXV0ZS12aWRlb1wiLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAqICB2YXIgdWlkID0gZXZ0LnVpZDtcbiAgICogIGNvbnNvbGUubG9nKFwidW5tdXRlIHZpZGVvOlwiICsgdWlkKTtcbiAgICogfSlcbiAgICovXG4gIFJlbW90ZVZpZGVvVW5tdXRlZCA9ICd1bm11dGUtdmlkZW8nLFxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIGZhaWxzIGR1cmluZyBwdWJsaXNoaW5nIG9yIHN1YnNjcmliaW5nIHRvIGEgc3RyZWFtLlxuICAgKiBUaGUgZmFpbHVyZSBpcyB1c3VhbGx5IGR1ZSB0byBhIHdyb25nIGVuY3J5cHRpb24gcGFzc3dvcmRcbiAgICogKFtzZXRFbmNyeXB0aW9uU2VjcmV0XShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVm9pY2UvQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sI3NldGVuY3J5cHRpb25zZWNyZXQpKVxuICAgKiBvciBhbiBpbmNvcnJlY3QgZW5jcnlwdGlvblxuICAgKiBtb2RlIChbc2V0RW5jcnlwdGlvbk1vZGVdKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9Wb2ljZS9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjc2V0ZW5jcnlwdGlvbm1vZGUpKS5cbiAgICpcbiAgICogQHNpbmNlIDMuMC4wXG4gICAqL1xuICBDcnlwdEVycm9yID0gJ2NyeXB0LWVycm9yJyxcbiAgLyoqXG4gICAqIFRoaXMgY2FsbGJhY2sgbm90aWZpZXMgdGhlIHBlZXIgdXNlciB0aGF0IGhlL3NoZSBpcyBiYW5uZWQgZnJvbSB0aGUgY2hhbm5lbC4gT25seSB0aGUgYmFubmVkIHVzZXJzIHJlY2VpdmUgdGhpcyBjYWxsYmFjay5cbiAgICogVXN1YWxseSB0aGUgcmVhc29uIGlzIHRoYXQgdGhlIFVJRCBpcyBiYW5uZWQgKGBLX1VJRF9CQU5ORURgKDE0KSkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNsaWVudC5vbihcImNsaWVudC1iYW5uZWRcIiwgZnVuY3Rpb24gKGV2dCkge1xuICAgKiAgdmFyIHVpZCA9IGV2dC51aWQ7XG4gICAqICB2YXIgYXR0ciA9IGV2dC5hdHRyO1xuICAgKiAgY29uc29sZS5sb2coXCIgdXNlciBiYW5uZWQ6XCIgKyB1aWQgKyBcIiwgYmFudHlwZTpcIiArIGF0dHIpO1xuICAgKiAgYWxlcnQoXCIgdXNlciBiYW5uZWQ6XCIgKyB1aWQgKyBcIiwgYmFudHlwZTpcIiArIGF0dHIpO1xuICAgKiB9KTtcbiAgICovXG4gIExvY2FsQ2xpZW50QmFubmVkID0gJ2NsaWVudC1iYW5uZWQnLFxuICAvKiogVGhpcyBjYWxsYmFjayBub3RpZmllcyB0aGUgYXBwbGljYXRpb24gd2hvIGlzIHRoZSBhY3RpdmUgc3BlYWtlciBpbiB0aGUgY2hhbm5lbC4gKi9cbiAgQWN0aXZlU3BlYWtlciA9ICdhY3RpdmUtc3BlYWtlcicsXG4gIC8qKlxuICAgKiBUaGlzIGNhbGxiYWNrIG5vdGlmaWVzIHRoZSBhcHBsaWNhdGlvbiBvZiBhbGwgdGhlIHNwZWFraW5nIHJlbW90ZSB1c2VycyBhbmQgdGhlaXIgdm9sdW1lcy5cbiAgICpcbiAgICogSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gWW91IGNhbiBlbmFibGUgdGhpcyBldmVudCBieSBjYWxsaW5nIGVuYWJsZUF1ZGlvVm9sdW1lSW5kaWNhdG9yLlxuICAgKiBJZiBlbmFibGVkLCBpdCByZXBvcnRzIHRoZSB2b2x1bWVzIGV2ZXJ5IHR3byBzZWNvbmRzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSBhcmUgdXNlcnMgc3BlYWtpbmcuXG4gICAqXG4gICAqIFRoZSB2b2x1bWUgaXMgYW4gaW50ZWdlciByYW5naW5nIGZyb20gMCB0byAxMDAuIFVzdWFsbHkgYSB1c2VyIHdpdGggdm9sdW1lIGFib3ZlIGZpdmUgd2lsbCBiZSBjb3VudGVkYXMgYSBzcGVha2luZyB1c2VyLlxuICAgKi9cbiAgVm9sdW1lSW5kaWNhdG9yID0gJ3ZvbHVtZS1pbmRpY2F0b3InLFxuICAvKiogT2NjdXJzIHdoZW4gdGhlIGxpdmUgc3RyZWFtaW5nIHN0YXJ0cy4gKi9cbiAgTGl2ZVN0cmVhbWluZ1N0YXJ0ZWQgPSAnbGl2ZVN0cmVhbWluZ1N0YXJ0ZWQnLFxuICAvKiogT2NjdXJzIHdoZW4gdGhlIGxpdmUgc3RyZWFtaW5nIGZhaWxzLiAqL1xuICBMaXZlU3RyZWFtaW5nRmFpbGVkID0gJ2xpdmVTdHJlYW1pbmdGYWlsZWQnLFxuICAvKiogT2NjdXJzIHdoZW4gdGhlIGxpdmUgc3RyZWFtaW5nIHN0b3BzLiAqL1xuICBMaXZlU3RyZWFtaW5nU3RvcHBlZCA9ICdsaXZlU3RyZWFtaW5nU3RvcHBlZCcsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgbGl2ZSB0cmFuc2NvZGluZyBzZXR0aW5nIGlzIHVwZGF0ZWQuXG4gICAqXG4gICAqIFRoZSBTREsgdHJpZ2dlcnMgdGhpcyBjYWxsYmFjayB3aGVuIHRoZSBsaXZlIHRyYW5zY29kaW5nIHNldHRpbmcgaXMgdXBkYXRlZCBieSBjYWxsaW5nIHRoZVxuICAgKiBbc2V0TGl2ZVRyYW5zY29kaW5nXShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVm9pY2UvQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sI3NldGxpdmV0cmFuc2NvZGluZykgbWV0aG9kLlxuICAgKlxuICAgKiBAcmVtYXJrXG4gICAqIFRoZSBmaXJzdCBjYWxsIG9mIHRoZVxuICAgKiBbc2V0TGl2ZVRyYW5zY29kaW5nXShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVm9pY2UvQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sI3NldGxpdmV0cmFuc2NvZGluZylcbiAgICogbWV0aG9kIGRvZXMgbm90IHRyaWdnZXIgdGhpcyBjYWxsYmFjay5cbiAgICovXG4gIExpdmVUcmFuc2NvZGluZ1VwZGF0ZWQgPSAnbGl2ZVRyYW5zY29kaW5nVXBkYXRlZCcsXG4gIC8qKiBPY2N1cnMgd2hlbiB0aGUgaW5qZWN0ZWQgb25saW5lIG1lZGlhIHN0cmVhbSdzIHN0YXR1cyBpcyB1cGRhdGVkLiAqL1xuICBTdHJlYW1JbmplY3RlZFN0YXR1c1VwZGF0ZWQgPSAnc3RyZWFtSW5qZWN0ZWRTdGF0dXMnLFxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIFRva2VuIGV4cGlyZXMgaW4gMzAgc2Vjb25kcy5cbiAgICpcbiAgICogWW91IHNob3VsZCByZXF1ZXN0IGEgbmV3IFRva2VuIGZyb20geW91ciBzZXJ2ZXIgYW5kIGNhbGxcbiAgICogW0NsaWVudC5yZW5ld1Rva2VuXShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVmlkZW8vQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sI3JlbmV3dG9rZW4pLlxuICAgKi9cbiAgVG9rZW5Qcml2ZWxlZ2VXaWxsRXhwaXJlID0gJ29uVG9rZW5Qcml2aWxlZ2VXaWxsRXhwaXJlJyxcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSBUb2tlbiBleHBpcmVzLlxuICAgKlxuICAgKiBZb3Ugc2hvdWxkIHJlcXVlc3QgYSBuZXcgVG9rZW4gZnJvbSB5b3VyIHNlcnZlciBhbmQgY2FsbFxuICAgKiBbQ2xpZW50LnJlbmV3VG9rZW5dKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9WaWRlby9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjcmVuZXd0b2tlbikuXG4gICAqL1xuICBUb2tlblByaXZlbGVnZUV4cGlyZWQgPSAnb25Ub2tlblByaXZpbGVnZURpZEV4cGlyZScsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhbiBlcnJvciBtZXNzYWdlIGlzIHJlcG9ydGVkIGFuZCByZXF1aXJlcyBlcnJvciBoYW5kbGluZy5cbiAgICogRm9yIGRldGFpbHMsIEBzZWUgW0Vycm9yIENvZGVzIGFuZCBXYXJuaW5nIENvZGVzXShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVmlkZW8vdGhlX2Vycm9yX3dlYikuXG4gICAqL1xuICBFcnJvciA9ICdlcnJvcicsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgbmV0d29yayB0eXBlIGNoYW5nZXMuXG4gICAqXG4gICAqIEByZW1hcmtcbiAgICogQ2hyb21lIDYxKyBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBjb21wYXRpYmlsaXR5IGlzIG5vdCBndWFyYW50ZWVkLlxuICAgKlxuICAgKiBAc2VlIFtOZXR3b3JrIEluZm9ybWF0aW9uIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05ldHdvcmtfSW5mb3JtYXRpb25fQVBJKSBmb3IgZGV0YWlscy5cbiAgICovXG4gIE5ldHdvcmtUeXBlQ2hhbmdlZCA9ICduZXR3b3JrLXR5cGUtY2hhbmdlZCcsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhbiBhdWRpbyBpbnB1dCBkZXZpY2UgaXMgYWRkZWQgb3IgcmVtb3ZlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY2xpZW50Lm9uKFwicmVjb3JkaW5nLWRldmljZS1jaGFuZ2VkXCIsIGZ1bmN0aW9uKGV2dCkge1xuICAgKiAgY29uc29sZS5sb2coXCJSZWNvcmRpbmcgRGV2aWNlIENoYW5nZWRcIiwgZXZ0LnN0YXRlLCBldnQuZGV2aWNlKTtcbiAgICogfSk7XG4gICAqL1xuICBSZWNvcmRpbmdEZXZpY2VDaGFuZ2VkID0gJ3JlY29yZGluZy1kZXZpY2UtY2hhbmdlZCcsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhbiBhdWRpbyBvdXRwdXQgZGV2aWNlIGlzIGFkZGVkIG9yIHJlbW92ZWQuXG4gICAqIEByZW1hcmtcbiAgICogT25seSBzdXBwb3J0cyBDaHJvbWUgNDkrLlxuICAgKi9cbiAgQXVkaW9PdXRwdXREZXZpY2VDaGFuZ2VkID0gJ3BsYXlvdXQtZGV2aWNlLWNoYW5nZWQnLFxuICAvKiogT2NjdXJzIHdoZW4gYSBjYW1lcmEgaXMgYWRkZWQgb3IgcmVtb3ZlZC4gKi9cbiAgQ2FtZXJhQ2hhbmdlZCA9ICdjYW1lcmEtY2hhbmdlZCcsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgdHlwZSBvZiBhIHZpZGVvIHN0cmVhbSBjaGFuZ2VzLlxuICAgKiBJdCBoYXBwZW5zIHdoZW4gYSBoaWdoLXZpZGVvIHN0cmVhbSBjaGFuZ2VzIHRvIGEgbG93LXZpZGVvIHN0cmVhbSwgb3IgdmljZSB2ZXJzYS5cbiAgICpcbiAgICogVGhlIHN0cmVhbSB0eXBlIChzdHJlYW1UeXBlKTpcbiAgICogLSAwOiBIaWdoLWJpdHJhdGUsIGhpZ2gtcmVzb2x1dGlvbiB2aWRlbyBzdHJlYW0uXG4gICAqIC0gMTogTG93LWJpdHJhdGUsIGxvdy1yZXNvbHV0aW9uIHZpZGVvIHN0cmVhbS5cbiAgICovXG4gIFN0cmVhbVR5cGVDaGFuZ2VkID0gJ3N0cmVhbS10eXBlLWNoYW5nZWQnLFxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBTREsgYW5kIEFnb3JhJ3MgZWRnZSBzZXJ2ZXIgaGFzIHRoZSBmb2xsb3dpbmcgc3RhdGVzOlxuICAgKlxuICAgKiAtIERJU0NPTk5FQ1RFRDogVGhlIFNESyBpcyBkaXNjb25uZWN0ZWQgZnJvbSBBZ29yYSdzIGVkZ2Ugc2VydmVyLlxuICAgKiAgIFRoaXMgaXMgdGhlIGluaXRpYWwgc3RhdGUgYmVmb3JlIENsaWVudC5qb2luLlxuICAgKiAgIFRoZSBTREsgYWxzbyBlbnRlcnMgdGhpcyBzdGF0ZSBhZnRlciB0aGUgYXBwIGNhbGxzIENsaWVudC5sZWF2ZS5cbiAgICogLSBDT05ORUNUSU5HOiBUaGUgU0RLIGlzIGNvbm5lY3RpbmcgdG8gQWdvcmEncyBlZGdlIHNlcnZlci4gVGhlIFNESyBlbnRlcnMgdGhpcyBzdGF0ZSB3aGVuIGNhbGxpbmcgQ2xpZW50LmpvaW4gb3JcbiAgICogICByZWNvbm5lY3RpbmcgdG8gQWdvcmEncyBlZGdlIHNlcnZlciBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QuXG4gICAqIC0gQ09OTkVDVEVEOiBUaGUgU0RLIGlzIGNvbm5lY3RlZCB0byBBZ29yYSdzIGVkZ2Ugc2VydmVyIGFuZCBqb2lucyBhIGNoYW5uZWwuIFlvdSBjYW4gbm93IHB1Ymxpc2ggb3Igc3Vic2NyaWJlIHRvIGEgc3RyZWFtXG4gICAqICAgaW4gdGhlIGNoYW5uZWwuIElmIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QgYmVjYXVzZSwgZm9yIGV4YW1wbGUsIHRoZSBuZXR3b3JrIGlzIGRvd24gb3Igc3dpdGNoZWQsIHRoZSBTREsgdHJpZ2dlcnMgdGhpcyBjYWxsYmFja1xuICAgKiAgIGFuZCBub3RpZmllcyB0aGUgYXBwIHRoYXQgdGhlIHN0YXRlIGNoYW5nZXMgZnJvbSBDT05ORUNURUQgdG8gQ09OTkVDVElORy5cbiAgICogLSBESVNDT05ORUNUSU5HOiBUaGUgU0RLIGlzIGRpc2Nvbm5lY3RpbmcgZnJvbSBBZ29yYSdzIGVkZ2Ugc2VydmVyLiBUaGUgU0RLIGVudGVycyB0aGlzIHN0YXRlIHdoZW4gY2FsbGluZyBDbGllbnQubGVhdmUuXG4gICAqL1xuICBDb25uZWN0aW9uU3RhdGVDaGFuZ2VkID0gJ2Nvbm5lY3Rpb24tc3RhdGUtY2hhbmdlJyxcbiAgLyoqIE9jY3VycyB3aGVuIHRoZSBTREsgc3RhcnRzIHJlcHVibGlzaGluZyBvciByZS1zdWJzY3JpYmluZyB0byBhIHN0cmVhbS4gKi9cbiAgU3RyZWFtUmVjb25uZWN0aW9uU3RhcnQgPSAnc3RyZWFtLXJlY29ubmVjdC1zdGFydCcsXG4gIC8qKiBPY2N1cnMgd2hlbiB0aGUgU0RLIGZpbmlzaGVzIHJlcHVibGlzaGluZyBvciByZS1zdWJzY3JpYmluZyB0byBhIHN0cmVhbS4gKi9cbiAgU3RyZWFtUmVjb25uZWN0aW9uRW5kID0gJ3N0cmVhbS1yZWNvbm5lY3QtZW5kJyxcbiAgLyoqIE9jY3VycyB3aGVuIHRoZSB1c2VyIHJvbGUgc3dpdGNoZXMgaW4gYSBsaXZlIGJyb2FkY2FzdC4gRm9yIGV4YW1wbGUsIGZyb20gYSBob3N0IHRvIGFuIGF1ZGllbmNlIG9yIHZpY2UgdmVyc2EuICovXG4gIENsaWVudFJvbGVDaGFuZ2VkID0gJ2NsaWVudC1yb2xlLWNoYW5nZWQnLFxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSBuZXR3b3JrIHF1YWxpdHkgb2YgdGhlIGxvY2FsIHVzZXIgb25jZSBldmVyeSB0d28gc2Vjb25kcy5cbiAgICpcbiAgICogVGhpcyBjYWxsYmFjayByZXBvcnRzIG9uIHRoZSB1cGxpbmsgYW5kIGRvd25saW5rIG5ldHdvcmsgY29uZGl0aW9ucyBvZiB0aGUgbG9jYWwgdXNlci5cbiAgICpcbiAgICogQHJlbWFya1xuICAgKiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGFuZCB0aGUgbmV0d29yayBxdWFsaXR5IHJhdGluZyBpcyBmb3IgcmVmZXJlbmNlIG9ubHkuXG4gICAqL1xuICBOZXR3b3JrUXVhbGl0eVJlcG9ydGVkID0gJ25ldHdvcmstcXVhbGl0eScsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgcmVtb3RlIHZpZGVvIHN0cmVhbSBmYWxscyBiYWNrIHRvIGFuIGF1ZGlvLW9ubHkgc3RyZWFtIGR1ZSB0byB1bnJlbGlhYmxlIG5ldHdvcmtcbiAgICogY29uZGl0aW9ucyBvciBzd2l0Y2hlcyBiYWNrIHRvIHRoZSB2aWRlbyBhZnRlciB0aGUgbmV0d29yayBjb25kaXRpb25zIGltcHJvdmUuXG4gICAqXG4gICAqIElmIHlvdSBzZXQgYGZhbGxiYWNrVHlwZWAgYXMgMiBpblxuICAgKiBbc2V0U3RyZWFtRmFsbGJhY2tPcHRpb25dKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9WaWRlby9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjc2V0c3RyZWFtZmFsbGJhY2tvcHRpb24pLFxuICAgKiB0aGUgU0RLIHRyaWdnZXJzIHRoaXMgY2FsbGJhY2sgd2hlbiB0aGUgcmVtb3RlIG1lZGlhIHN0cmVhbSBmYWxscyBiYWNrIHRvIGF1ZGlvIG9ubHkgZHVlIHRvIHVucmVsaWFibGUgbmV0d29yayBjb25kaXRpb25zXG4gICAqIG9yIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHZpZGVvIGFmdGVyIHRoZSBuZXR3b3JrIGNvbmRpdGlvbiBpbXByb3Zlcy5cbiAgICpcbiAgICogQHJlbWFya1xuICAgKiBPbmNlIHRoZSByZW1vdGUgbWVkaWEgc3RyZWFtIGlzIHN3aXRjaGVkIHRvIHRoZSBsb3cgc3RyZWFtIGR1ZSB0byB1bnJlbGlhYmxlIG5ldHdvcmsgY29uZGl0aW9ucywgeW91IGNhbiBtb25pdG9yXG4gICAqIHRoZSBzdHJlYW0gc3dpdGNoIGJldHdlZW4gYSBoaWdoIHN0cmVhbSBhbmQgbG93IHN0cmVhbSBpbiB0aGUgc3RyZWFtLXR5cGUtY2hhbmdlZCBjYWxsYmFjay5cbiAgICovXG4gIFN0cmVhbUZhbGxiYWNrID0gJ3N0cmVhbS1mYWxsYmFjaycsXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiBhIHJlbW90ZSBzdHJlYW0gYWRkcyBvciByZW1vdmVzIGEgdHJhY2suXG4gICAqXG4gICAqIFdoZW4gYSByZW1vdGUgc3RyZWFtIGNhbGxzIHRoZSBbYWRkVHJhY2tdKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9Wb2ljZS9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuc3RyZWFtLmh0bWwjYWRkdHJhY2spXG4gICAqIG9yIFtyZW1vdmVUcmFja10oaHR0cHM6Ly9kb2NzLmFnb3JhLmlvL2VuL1ZvaWNlL0FQSSUyMFJlZmVyZW5jZS93ZWIvaW50ZXJmYWNlcy9hZ29yYXJ0Yy5zdHJlYW0uaHRtbCNyZW1vdmV0cmFjaylcbiAgICogbWV0aG9kLCB0aGUgU0RLIHRyaWdnZXJzIHRoaXMgY2FsbGJhY2suXG4gICAqL1xuICBTdHJlYW1VcGRhdGVkID0gJ3N0cmVhbS11cGRhdGVkJyxcbiAgLyoqXG4gICAqIFJlcG9ydHMgZXhjZXB0aW9uIGV2ZW50cyBpbiB0aGUgY2hhbm5lbC5cbiAgICogRXhjZXB0aW9ucyBhcmUgbm90IGVycm9ycywgYnV0IHVzdWFsbHkgbWVhbiBxdWFsaXR5IGlzc3Vlcy5cbiAgICogVGhpcyBjYWxsYmFjayBhbHNvIHJlcG9ydHMgcmVjb3ZlcnkgZnJvbSBhbiBleGNlcHRpb24uXG4gICAqIEVhY2ggZXhjZXB0aW9uIGV2ZW50IGhhcyBhIGNvcnJlc3BvbmRpbmcgcmVjb3ZlcnkgZXZlbnRcbiAgICogQHNlZSBodHRwczovL3dlYi1jZG4uYWdvcmEuaW8vZG9jcy1maWxlcy8xNTQ3MTgwMDUzNDMwIGZvciBkZXRhaWxzXG4gICAqL1xuICBFeGNlcHRpb24gPSAnZXhjZXB0aW9uJyxcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgcmVtb3RlIHVzZXIgb2YgdGhlIE5hdGl2ZSBTREsgY2FsbHMgYGVuYWJsZUxvY2FsVmlkZW8odHJ1ZSlgIHRvIGVuYWJsZSB2aWRlbyBjYXB0dXJlLlxuICAgKlxuICAgKiBAc2luY2UgMy4wLjBcbiAgICovXG4gIFJlbW90ZVZpZGVvQ2FwdHVyZUVuYWJsZWQgPSAnZW5hYmxlLWxvY2FsLXZpZGVvJyxcbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIGEgcmVtb3RlIHVzZXIgb2YgdGhlIE5hdGl2ZSBTREsgY2FsbHMgYGVuYWJsZUxvY2FsVmlkZW8oZmFsc2UpYCB0byBkaXNhYmxlIHZpZGVvIGNhcHR1cmUuXG4gICAqXG4gICAqIEBzaW5jZSAzLjAuMFxuICAgKi9cbiAgUmVtb3RlVmlkZW9DYXB0dXJlRGlzYWJsZWQgPSAnZGlzYWJsZS1sb2NhbC12aWRlbycsXG4gIC8qKlxuICAgKiBSZXBvcnRzIGV2ZW50cyBkdXJpbmcgdGhlIG1lZGlhIHN0cmVhbSByZWxheS5cbiAgICpcbiAgICogUGFyYW1ldGVyc1xuICAgKiAtIGV2dDogYG9iamVjdGBcbiAgICogIC0gY29kZTogYG51bWJlcmBcbiAgICogIFRoZSBldmVudCBjb2RlIGZvciBtZWRpYSBzdHJlYW0gcmVsYXkuXG4gICAqICAgIC0gMDogVGhlIHVzZXIgZGlzY29ubmVjdHMgZnJvbSB0aGUgc2VydmVyIGR1ZSB0byBhIHBvb3IgbmV0d29yayBjb25uZWN0aW9uLlxuICAgKiAgICAtIDE6IFRoZSB1c2VyIGlzIGNvbm5lY3RlZCB0byB0aGUgc2VydmVyLlxuICAgKiAgICAtIDI6IFRoZSB1c2VyIGpvaW5zIHRoZSBzb3VyY2UgY2hhbm5lbC5cbiAgICogICAgLSAzOiBUaGUgdXNlciBqb2lucyB0aGUgZGVzdGluYXRpb24gY2hhbm5lbC5cbiAgICogICAgLSA0OiBUaGUgU0RLIHN0YXJ0cyByZWxheWluZyB0aGUgbWVkaWEgc3RyZWFtIHRvIHRoZSBkZXN0aW5hdGlvbiBjaGFubmVsLlxuICAgKiAgICAtIDU6IFRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIHZpZGVvIHN0cmVhbSBmcm9tIHRoZSBzb3VyY2UgY2hhbm5lbC5cbiAgICogICAgLSA2OiBUaGUgc2VydmVyIHJlY2VpdmVzIHRoZSBhdWRpbyBzdHJlYW0gZnJvbSB0aGUgc291cmNlIGNoYW5uZWwuXG4gICAqICAgIC0gNzogVGhlIGRlc3RpbmF0aW9uIGNoYW5uZWwgaXMgdXBkYXRlZC5cbiAgICovXG4gIE1lZGlhU3RyZWFtRXZlbnRSZWxheWVkID0gJ2NoYW5uZWwtbWVkaWEtcmVsYXktZXZlbnQnLFxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBtZWRpYSBzdHJlYW0gcmVsYXkgY2hhbmdlcy5cbiAgICpcbiAgICogQHNpbmNlIDMuMC4wXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgU0RLIHJlcG9ydHMgdGhlIHN0YXRlIGFuZCBlcnJvciBjb2RlIG9mIHRoZSBjdXJyZW50IG1lZGlhIHJlbGF5IGluIHRoaXMgY2FsbGJhY2suXG4gICAqXG4gICAqIFBhcmFtZXRlcnNcbiAgICogLSBldnQ6IGBvYmplY3RgXG4gICAqICAtIGNvZGU6IGBudW1iZXJgXG4gICAqICBUaGUgZXJyb3IgY29kZS5cbiAgICogICAgLSAwOiBObyBlcnJvci5cbiAgICogICAgLSAxOiBBbiBlcnJvciBvY2N1cnMgaW4gdGhlIHNlcnZlciByZXNwb25zZS5cbiAgICogICAgLSAyOiBObyBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAqICAgIC0gMzogVGhlIFNESyBmYWlscyB0byBhY2Nlc3MgdGhlIHNlcnZpY2UsIHByb2JhYmx5IGR1ZSB0byBsaW1pdGVkIHJlc291cmNlcyBvZiB0aGUgc2VydmVyLlxuICAgKiAgICAtIDQ6IEZhaWxzIHRvIHNlbmQgdGhlIHJlbGF5IHJlcXVlc3QuXG4gICAqICAgIC0gNTogRmFpbHMgdG8gYWNjZXB0IHRoZSByZWxheSByZXF1ZXN0LlxuICAgKiAgICAtIDY6IFRoZSBzZXJ2ZXIgZmFpbHMgdG8gcmVjZWl2ZSB0aGUgbWVkaWEgc3RyZWFtLlxuICAgKiAgICAtIDc6IFRoZSBzZXJ2ZXIgZmFpbHMgdG8gc2VuZCB0aGUgbWVkaWEgc3RyZWFtLlxuICAgKiAgICAtIDg6IFRoZSBTREsgZGlzY29ubmVjdHMgZnJvbSB0aGUgc2VydmVyIGFuZCBmYWlscyB0byByZWNvbm5lY3QgdG8gdGhlIHNlcnZlciBkdWUgdG8gYSBwb29yIG5ldHdvcmsgY29ubmVjdGlvbi5cbiAgICogICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBTREsgcmVzZXRzIHRoZSByZWxheSBzdGF0ZS4gWW91IGNhbiB0cnlcbiAgICogIFtzdGFydENoYW5uZWxNZWRpYVJlbGF5XShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVm9pY2UvQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sI3N0YXJ0Y2hhbm5lbG1lZGlhcmVsYXkpXG4gICAqICAgICAgICAgdG8gcmVzdGFydCB0aGUgbWVkaWEgc3RyZWFtIHJlbGF5LlxuICAgKiAgICAtIDk6IEFuIGludGVybmFsIGVycm9yIG9jY3VycyBpbiB0aGUgc2VydmVyLlxuICAgKiAgICAtIDEwOiBUaGUgdG9rZW4gb2YgdGhlIHNvdXJjZSBjaGFubmVsIGhhcyBleHBpcmVkLlxuICAgKiAgICAtIDExOiBUaGUgdG9rZW4gb2YgdGhlIGRlc3RpbmF0aW9uIGNoYW5uZWwgaGFzIGV4cGlyZWQuXG4gICAqICAgIC0gMTI6IFRoZSByZWxheSBoYXMgYWxyZWFkeSBzdGFydGVkLiBQb3NzaWJseSBjYXVzZWQgYnkgY2FsbGluZ1xuICAgKiAgW3N0YXJ0Q2hhbm5lbE1lZGlhUmVsYXldKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9Wb2ljZS9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjc3RhcnRjaGFubmVsbWVkaWFyZWxheSlcbiAgICogICAgICAgICAgcmVwZWF0ZWRseSwgb3IgY2FsbGluZ1xuICAgKiAgW3N0YXJ0Q2hhbm5lbE1lZGlhUmVsYXldKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9Wb2ljZS9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjc3RhcnRjaGFubmVsbWVkaWFyZWxheSlcbiAgICogICAgICAgICAgYmVmb3JlXG4gICAqICBbc3RvcENoYW5uZWxNZWRpYVJlbGF5XShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVm9pY2UvQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sI3N0b3BjaGFubmVsbWVkaWFyZWxheSlcbiAgICogICAgICAgICAgc3VjY2VlZHMuXG4gICAqICAgIC0gMTM6IFRoZSByZWxheSBoYXMgbm90IHN0YXJ0ZWQuIFBvc3NpYmx5IGNhdXNlZCBieSBjYWxsaW5nXG4gICAqICBbdXBkYXRlQ2hhbm5lbE1lZGlhUmVsYXldKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9Wb2ljZS9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjdXBkYXRlY2hhbm5lbG1lZGlhcmVsYXkpXG4gICAqICAgICAgICAgIGJlZm9yZVxuICAgKiAgW3N0YXJ0Q2hhbm5lbE1lZGlhUmVsYXldKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9Wb2ljZS9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Lmh0bWwjc3RhcnRjaGFubmVsbWVkaWFyZWxheSlcbiAgICogICAgICAgICAgc3VjY2VlZHMuXG4gICAqXG4gICAqICAtIHN0YXRlOiBgbnVtYmVyYFxuICAgKiAgICBUaGUgc3RhdGUgY29kZS5cbiAgICogICAgLSAwOiBUaGUgU0RLIGlzIGluaXRpYWxpemluZy5cbiAgICogICAgLSAxOiBUaGUgU0RLIHRyaWVzIHRvIHJlbGF5IHRoZSBtZWRpYSBzdHJlYW0gdG8gdGhlIGRlc3RpbmF0aW9uIGNoYW5uZWwuXG4gICAqICAgIC0gMjogVGhlIFNESyBzdWNjZXNzZnVsbHkgcmVsYXlzIHRoZSBtZWRpYSBzdHJlYW0gdG8gdGhlIGRlc3RpbmF0aW9uIGNoYW5uZWwuXG4gICAqICAgIC0gMzogQW4gZXJyb3Igb2NjdXJzLiBTZWUgYGNvZGVgIGZvciB0aGUgZXJyb3IgY29kZS4gSW4gY2FzZSBvZiBhbiBlcnJvciwgdGhlIFNESyByZXNldHMgdGhlIG1lZGlhIHN0cmVhbSByZWxheSBzdGF0ZSxcbiAgICogICAgICAgICBhbmQgeW91IG5lZWQgdG8gY2FsbFxuICAgKiBbc3RhcnRDaGFubmVsTWVkaWFSZWxheV0oaHR0cHM6Ly9kb2NzLmFnb3JhLmlvL2VuL1ZvaWNlL0FQSSUyMFJlZmVyZW5jZS93ZWIvaW50ZXJmYWNlcy9hZ29yYXJ0Yy5jbGllbnQuaHRtbCNzdGFydGNoYW5uZWxtZWRpYXJlbGF5KVxuICAgKiAgICAgICAgIHRvIHJlc3RhcnQgdGhlIHJlbGF5LlxuICAgKi9cbiAgTWVkaWFTdHJlYW1SZWxheVN0YXRlQ2hhbmdlZCA9ICdjaGFubmVsLW1lZGlhLXJlbGF5LXN0YXRlJyxcbn1cbiJdfQ==