Files
discord-decomp/sources/lib/RTCConnection.tsx
T
2026-07-28 01:06:53 +03:00

4279 lines
233 KiB
TypeScript

/* Metro module 4301; source: lib/RTCConnection.tsx; dependencies: [5, 6, 7, 15, 17, 18, 4302, 4394, 9276, 9229, 1226, 1379, 1867, 4259, 4294, 10865, 4402, 1878, 661, 1880, 12386, 4291, 4303, 6949, 683, 1216, 3, 12387, 561, 491, 12389, 12391, 10682, 10866, 1458, 477, 3767, 1471, 694, 12392, 1391, 4405, 24, 4608, 12393, 12394, 12395, 10678, 4488, 5252, 12396, 12398, 12399, 12400, 4406, 12401, 12402, 12404, 7137, 12405, 4883, 12406, 12407, 8093, 12409, 4647, 1244, 1225, 4479, 2] */
import Logger from '../modules/debug/Logger.tsx'; /* Metro dependency 3 */
import Module00005 from '../by-id/module-00005.js'; /* Metro dependency 5 */
import ClassCallCheck from '../by-id/module-00006-ClassCallCheck.js'; /* Metro dependency 6 */
import CreateClass from '../by-id/module-00007-CreateClass.js'; /* Metro dependency 7 */
import PossibleConstructorReturn from '../by-id/module-00015-PossibleConstructorReturn.js'; /* Metro dependency 15 */
import Module00017 from '../by-id/module-00017.js'; /* Metro dependency 17 */
import Inherits from '../by-id/module-00018-Inherits.js'; /* Metro dependency 18 */
import Backoff from '../external/discord_common/js/packages/backoff/Backoff.tsx'; /* Metro dependency 561 */
import AnalyticsUtils from '../utils/AnalyticsUtils.tsx'; /* Metro dependency 683 */
import Dispatcher from '../Dispatcher.tsx'; /* Metro dependency 694 */
import SentryUtilsNative from '../utils/SentryUtils.native.tsx'; /* Metro dependency 1216 */
import AuthenticationStore from '../stores/AuthenticationStore.tsx'; /* Metro dependency 1226 */
import ChannelStore from '../stores/ChannelStore.tsx'; /* Metro dependency 1379 */
import NetworkUtils from '../utils/NetworkUtils.tsx'; /* Metro dependency 1458 */
import GuildStore from '../stores/GuildStore.tsx'; /* Metro dependency 1867 */
import UserStore from '../stores/UserStore.tsx'; /* Metro dependency 1878 */
import MediaEngineStore from '../stores/MediaEngineStore.tsx'; /* Metro dependency 4259 */
import RTCConnectionStore from '../stores/RTCConnectionStore.tsx'; /* Metro dependency 4294 */
import DeviceFrecencyStore from '../modules/media_engine/DeviceFrecencyStore.tsx'; /* Metro dependency 4302 */
import MediaEngineStatsStore from '../modules/media_engine/MediaEngineStatsStore.tsx'; /* Metro dependency 4394 */
import RTCRegionStore from '../stores/RTCRegionStore.tsx'; /* Metro dependency 4402 */
import ProportionalVadIndicatorExperiment from '../modules/calls/ProportionalVadIndicatorExperiment.tsx'; /* Metro dependency 4608 */
import ThermalUtilsNative from '../modules/device/ThermalUtils.native.tsx'; /* Metro dependency 8093 */
import AudioRouteStoreNative from '../modules/voice_calls/AudioRouteStore.native.tsx'; /* Metro dependency 9229 */
import SecureFramesPersistedStore from '../modules/rtc/SecureFramesPersistedStore.tsx'; /* Metro dependency 9276 */
import RTCDebugStore from '../stores/RTCDebugStore.tsx'; /* Metro dependency 10865 */
import * as FileImportTrackerModule from '../by-id/module-00002-FileImportTracker.js'; /* Metro dependency 2 */
import * as PlatformUtilsModule from '../utils/PlatformUtils.tsx'; /* Metro dependency 477 */
import * as ConstantsModule from '../Constants.tsx'; /* Metro dependency 661 */
import * as IndexNativeModule from '../intl/index.native.tsx'; /* Metro dependency 1244 */
import * as FlagUtilsModule from '../external/discord_common/js/shared/utils/FlagUtils.tsx'; /* Metro dependency 1391 */
import * as PremiumConstantsModule from '../modules/premium/PremiumConstants.tsx'; /* Metro dependency 1880 */
import * as TimeUtilsModule from '../external/discord_common/js/packages/time-utils/TimeUtils.tsx'; /* Metro dependency 4303 */
import * as RTCConnectionEventModule from './RTCConnectionEvent.tsx'; /* Metro dependency 4405 */
import * as WindowVisibilityVideoManagerModule from './WindowVisibilityVideoManager.tsx'; /* Metro dependency 10682 */
import * as BrowserConstantsModule from '../external/discord_common/js/shared/utils/BrowserConstants.tsx'; /* Metro dependency 12386 */
import * as RTCConnectionStatsModule from './RTCConnectionStats.tsx'; /* Metro dependency 12387 */
import * as RTCMediaSinkWantsManagerModule from './RTCMediaSinkWantsManager.tsx'; /* Metro dependency 12389 */
import * as GoLiveQualityManagerModule from '../modules/go_live/GoLiveQualityManager.tsx'; /* Metro dependency 12391 */
import * as RTCControlSocketModule from './RTCControlSocket.tsx'; /* Metro dependency 12392 */
import * as AV1BitrateTuningExperimentModule from '../modules/media_engine/AV1BitrateTuningExperiment.tsx'; /* Metro dependency 12400 */
import * as VideoHealthManagerModule from './VideoHealthManager.tsx'; /* Metro dependency 12407 */
function _fun36645(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#36645, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:6, offset: 0x010904c1, size: 869 bytes, params: 8, frame: 31
const env0_0 = require;
const _arrayLikeToArray_36648 = function(a0, a1) {
var r0;
var r1;
var r2;
var value3;
var length;
var value5;
var value = undefined;
var value2 = value == null;
reducibleJoin2: while (true) {
if (value2) {
r0 = value2;
break reducibleJoin2;
}
value3 = value > a0.length;
r0 = value3;
break reducibleJoin2;
}
reducibleJoin4: while (true) {
if (r0) {
length = a0.length;
r1 = length;
break reducibleJoin4;
}
r1 = value;
break reducibleJoin4;
}
value = (0, global.Array)(r1);
var value4 = 0;
if (value4 < r1) {
r2 = value4;
reducibleLoop5: while (true) {
value[r2] = a0[r2];
value5 = typeof r2 === 'bigint' ? r2 + 1n : +r2 + 1;
if (value5 < r1) {
r2 = value5;
continue reducibleLoop5;
}
break reducibleLoop5;
}
}
return value;
};
const Object = global.Object;
Object.defineProperty(exports, '__esModule', {value: true});
let value = ConstantsModule;
const env0_22 = value.AnalyticEvents;
const env0_23 = value.ChannelTypes;
const env0_24 = value.RTCConnectionStates;
const env0_25 = value.RTCConnectionQuality;
const env0_26 = value.BoostedGuildTiers;
value = require(4291) /* metro dependency 4291: Constants */;
const env0_29 = value.Features;
const env0_30 = value.MediaEngineContextTypes;
const env0_31 = value.ConnectionStates;
const env0_32 = value.Codecs;
const env0_33 = value.MediaTypes;
const env0_34 = value.SpeakingFlags;
const env0_35 = value.DISABLED_DEVICE_ID;
const env0_36 = RegExp('^https', '').test('https:') ? 'wss:' : 'ws:';
object = {CONNECTION_CREATE: 0};
object[0] = 'CONNECTION_CREATE';
object.CONNECTION_DESTROY = 1;
object[1] = 'CONNECTION_DESTROY';
object.CONNECT = 2;
object[2] = 'CONNECT';
object.MLS_FAILURE = 3;
object[3] = 'MLS_FAILURE';
object.MESSAGE_RECEIVE = 4;
object[4] = 'MESSAGE_RECEIVE';
object.MESSAGE_SEND = 5;
object[5] = 'MESSAGE_SEND';
object.SET_ENDPOINT = 6;
object[6] = 'SET_ENDPOINT';
object.RECONNECT = 7;
object[7] = 'RECONNECT';
object.SET_STATE = 8;
object[8] = 'SET_STATE';
object.SET_NEXT_CHANNEL_ID = 9;
object[9] = 'SET_NEXT_CHANNEL_ID';
object.MLS_INIT = 10;
object[10] = 'MLS_INIT';
object.SECURE_FRAMES_INIT = 11;
object[11] = 'SECURE_FRAMES_INIT';
const env0_39 = [];
value = importDefault(4479) /* metro dependency 4479: TypedEventEmitter */;
value = _fun36653(value);
(FileImportTrackerModule).fileFinishedImporting('lib/RTCConnection.tsx');
exports.default = value;
function _createForOfIteratorHelperLoose_36646(a0, a1) { // fn#36646, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:615, offset: 0x01090826, size: 370 bytes, params: 3, frame: 20
var r6;
var r9;
var r5;
var value3;
var regexp;
const env0_0 = a0;
const Symbol = global.Symbol;
let value = typeof Symbol !== 'undefined';
let r1 = value && a0[global.Symbol.iterator];
r1 = !r1 ? a0['@@iterator'] : r1;
if (r1) {
value = r1.call(a0);
return value.next.bind(value);
}
const Array = global.Array;
if (Array.isArray(a0)) {
if (r1) {
}
return _fun36647;
}
value = undefined;
if (a0) {
if (typeof a0 === 'string') {
value = _arrayLikeToArray_36648(a0, value);
r5 = value;
} else {
value3 = ({}).toString.call(a0).slice(8, -1);
r6 = value3 === 'Object' && a0.constructor;
r9 = r6 ? a0.constructor.name : value3;
if (r9 === 'Map') {
r6 = global.Array.from(a0);
} else if (r9 === 'Set') {
r6 = global.Array.from(a0);
} else if (r9 === 'Arguments') {
value = _arrayLikeToArray_36648(a0, value);
r6 = value;
} else {
regexp = RegExp('^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$', '');
if (regexp.test(r9)) {
value = _arrayLikeToArray_36648(a0, value);
r6 = value;
} else {
r6 = value;
}
}
r5 = r6;
}
} else {
r5 = value;
}
if (r5) {
if (r5) {
}
return _fun36647;
}
const TypeError = global.TypeError;
throw new TypeError('Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');
function _fun36647() { // fn#36647, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:1186, offset: 0x00c39d73, size: 69 bytes, params: 1, frame: 5
return env0_1 >= env0_0.length ? {done: true} : {done: false,
value: env0_0[typeof env0_1 === 'bigint' ? env0_1 : +env0_1]};
}
}
function _isNativeReflectConstruct_36649() { // fn#36649, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:1525, offset: 0x01090998, size: 94 bytes, params: 1, frame: 18
var Boolean;
var prototype;
var valueOf;
var call;
var Reflect;
var construct;
var closure;
var value;
var error;
try {
Boolean = global.Boolean;
prototype = Boolean.prototype;
valueOf = prototype.valueOf;
call = valueOf.call;
Reflect = global.Reflect;
construct = Reflect.construct;
Boolean = global.Boolean;
closure = function() {
};
value = Reflect.apply(construct, Reflect, [Boolean, [], closure]);
value = Reflect.apply(call, valueOf, [value]);
var result = !value;
} catch (error) {
}
return (_isNativeReflectConstruct_36649_isNativeReflectConstruct = function() {
return !!result;
})();
}
function getEventHistoryString() { // fn#36652, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:2282, offset: 0x010909f6, size: 133 bytes, params: 1, frame: 18
var r8;
var r3;
var property;
var push;
var object;
var t;
var value3;
const items2 = [];
const value2 = (TimeUtilsModule).now();
const binding = env0_39;
let length = binding.length;
let value = 0;
if (value < length) {
r3 = value;
while (true) {
property = binding[r3];
push = items2.push;
object = {};
value = copyDataProperties(object, property, r8);
t = property.t;
object['t'] = value2 - t;
Reflect.apply(push, items2, [object]);
value3 = typeof r3 === 'bigint' ? r3 + 1n : +r3 + 1;
length = binding.length;
if (!(value3 < length)) {
break;
}
r3 = value3;
r8 = value;
}
}
const JSON = global.JSON;
return JSON.stringify(items2);
}
function _fun36653(a0) { // fn#36653, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:2435, offset: 0x01090a7b, size: 2615 bytes, params: 2, frame: 16
const RTCConnection2 = RTCConnection;
Inherits(RTCConnection2, a0);
return CreateClass(RTCConnection2, [{key: 'recordEvent', value: value_36672}, {key: 'quality', get: get_36673},
{key: 'endpoint', get: function() {
return this._endpoint;
}, set: set_36675}, {key: 'connect', value: value_36676}, {key: '_recordMessageEvent', value: function(a0, a1) {
this.recordEvent({c: a0, o: a1});
}}, {key: 'destroy', value: value_36678}, {key: 'shouldSendSpeaking', value: value_36679}, {key: 'sendSpeaking',
value: value_36680}, {key: 'sendVideo', value: function(a0, a1, a2, a3) {
var _socket = this._socket;
if (_socket != null) {
if (a1 !== 0) {
this._sentVideo = true;
}
if (this._sentVideo) {
_socket.video(a0, a1, a2, a3);
}
}
}}, {key: 'getPings', value: function() {
return this._pings;
}}, {key: 'getAveragePing', value: function() {
var r0;
var _pings = this._pings;
var Math = global.Math;
var value = Math.min(this._pings.length, 20);
var value2 = 0;
value = _pings.slice(value2, value);
if (value2 === value.length) {
r0 = value2;
} else if (this._socket == null) {
r0 = value2;
} else {
value = value.reduce(_fun36684, value2) / value.length;
r0 = value;
}
return r0;
}}, {key: 'getLastPing', value: function() {
var property = this._pings;
property = property[this._pings.length - 1];
return property?.value;
}}, {key: 'getOutboundLossRate', value: function() {
return this._outboundLossRate;
}}, {key: 'getMediaSessionId', value: function() {
return this._mediaSessionId;
}}, {key: 'getVoiceParticipantType', value: function() {
}}, {key: 'getRTCConnectionId', value: function() {
return this._rtcConnectionId;
}}, {key: 'getMediaEngineConnectionId', value: function() {
return this._mediaEngineConnectionId;
}}, {key: 'getVoiceVersion', value: function() {
return this.voiceVersion;
}}, {key: 'getRtcWorkerVersion', value: function() {
return this.rtcWorkerVersion;
}}, {key: 'getDuration', value: function() {
var r1;
var value = 0;
r1 = this._connectCompletedTime > value ? require(dependencyMap[22]).now() - this._connectCompletedTime : value;
return r1 > value ? r1 : value;
}}, {key: 'getDurationSeconds', value: function() {
return this.getDuration() / 1000;
}}, {key: 'getVoiceDurationStats', value: function() {
var r1;
var _voiceDuration = this._voiceDuration;
var value = null;
r1 = value == _voiceDuration ? undefined : _voiceDuration.getDurationStats();
return value != r1 ? r1 : value;
}}, {key: 'getPacketStats', value: function() {
return this._voiceQuality?.getPacketStats();
}}, {key: 'getCreatedTime', value: function() {
return this._createdTime;
}}, {key: 'getSecureFramesState', value: function() {
return this._secureFramesState;
}}, {key: 'getSecureFramesRosterMap', value: function() {
return this._secureFramesRosterMap;
}}, {key: 'getUserIds', value: function() {
return this._userIds;
}}, {key: 'getIsUserConnected', value: function(a0) {
return this._userIds.has(a0);
}}, {key: 'getVideoHealthManager', value: function() {
return this._videoHealthManager;
}}, {key: 'getBandwidthEstimationExperiment', value: function() {
return this._bandwidthEstimationExperiment;
}}, {key: 'hasActiveRemoteWants', value: function() {
var Object = global.Object;
return Object.entries(this._remoteVideoSinkWants).some(_fun36705);
}}, {key: 'pauseStatsCollectionForUser', value: function(a0, a1) {
var value = this.getOrCreateVideoQuality();
if (value != null) {
if (a1) {
value.addUserToStatsCollectionPausedSet(a0);
} else {
value.removeUserFromStatsCollectionPausedSet(a0);
}
} else {
this.logger.error('pauseStatsCollectionForUser: Unable to create videoQuality.');
}
}}, {key: 'getOutboundStats', value: function() {
var r0;
var value = this.getOrCreateVideoQuality();
var value2 = null;
if (value2 != value) {
value = value.getOutboundStats();
r0 = value;
} else {
r0 = value2;
}
return r0;
}}, {key: 'getInboundStats', value: function(a0) {
var r0;
var value = this.getOrCreateVideoQuality();
var value2 = null;
if (value2 != value) {
value = value.getInboundStats(a0);
r0 = value;
} else {
r0 = value2;
}
return r0;
}}, {key: 'setState', value: value_36710}, {key: 'expeditedHeartbeat', value: function(a0) {
var r7;
var r6;
var value = a1;
var value2 = a2;
r7 = value !== undefined ? value : '';
r6 = !(value2 !== undefined) || value2;
var property = this._socket;
if (property != null && property.expeditedHeartbeat(a0, r7, r6)) {
this._backoff.cancel();
}
}}, {key: 'resetBackoff', value: function() {
var r5;
var value = a0;
r5 = value !== undefined ? value : '';
var property = this._socket;
if (property != null && property.resetBackoff(r5)) {
this._backoff.cancel();
}
}}, {key: 'setSelectedParticipant', value: function(a0) {
var _localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.setSelectedParticipant(a0);
}
}}, {key: 'setPipOpen', value: function(a0) {
var _localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.setPipOpen(a0);
}
}}, {key: 'setClipRecordUser', value: function(a0, a1, a2) {
var _connection = this._connection;
if (!(_connection == null || _connection.setClipRecordUser == null)) {
_connection.setClipRecordUser(a0, a1, a2);
}
}}, {key: 'setNoiseCancellationEnabled', value: function(a0) {
var property = this._numNoiseCancellationChanges;
this._numNoiseCancellationChanges = typeof property === 'bigint' ? property + 1n : +property + 1;
property = this._voiceDuration;
if (property != null) {
property.setNoiseCancellationEnabled(a0);
}
}}, {key: 'setSpatialAudioEnabled', value: function(a0) {
var _voiceDuration = this._voiceDuration;
if (_voiceDuration != null) {
_voiceDuration.setSpatialAudioEnabled(a0);
}
}}, {key: 'setSimulcastDebugOverride', value: value_36718}, {key: 'setVideoSize', value: value_36719},
{key: 'clearJoinVoiceId', value: function() {
this.joinVoiceId = null;
}}, {key: 'setNextChannelId', value: value_36721}, {key: 'getNextChannelId', value: function() {
return this._nextChannelId ?? this._channelId;
}}, {key: 'channelId', get: function() {
return this._channelId;
}}, {key: 'trueServerId', get: function() {
var r0;
r0 = this.streamServerId ?? this.guildId;
r0 = r0 ?? this.channelId;
return r0;
}}, {key: 'trueChannelId', get: get_36725}, {key: '_cleanupSocket', value: function() {
var _socket = this._socket;
if (_socket != null) {
_socket.close();
_socket.removeAllListeners();
this._socket = null;
}
}}, {key: '_chooseExperiments', value: value_36727}, {key: '_handleConnecting', value: value_36728},
{key: '_handleConnect', value: function(a0) {
var env0_0 = this;
var env0_1 = a0;
var property = this.token;
var env0_2 = property;
this.reconnecting = false;
if (property == null) {
throw new global.Error('RTCConnection._handleConnect(...): Token is missing.');
}
this.logger.info('Connected to RTC server.');
this._fetchAsyncResourcesPromise.finally(_fun36730);
}}, {key: '_handleDisconnect', value: value_36731}, {key: '_handleResuming', value: function() {
var _connection = this._connection;
if (_connection != null) {
_connection.fastUdpReconnect();
}
_connection = this._connection;
if (_connection != null) {
_connection.clearAllSpeaking();
}
}}, {key: '_handleReady', value: value_36743}, {key: '_handleSpeaking', value: value_36764}, {key: 'handleFlags',
value: function(a0, a1) {
var Flags = require(dependencyMap[41]).RTCConnectionEvent.Flags;
this.emit(Flags, a0, a1);
}}, {key: 'handlePlatform', value: function(a0, a1) {
var Platform = require(dependencyMap[41]).RTCConnectionEvent.Platform;
this.emit(Platform, a0, a1, this.channelId);
}}, {key: 'handleUsersMerged', value: value_36767}, {key: 'getOrCreateVideoQuality', value: value_36769},
{key: '_handleVideoStreamId', value: value_36771}, {key: '_handleLocalVideoDisabled', value: function(a0, a1) {
if (this.userId !== a0) {
var value = this.getOrCreateVideoQuality();
if (value == null) {
this.logger.error('_handleLocalVideoDisabled: Unable to create videoQuality.');
return undefined;
}
value.setUserVideoDisabled(a0, a1);
}
}}, {key: '_handleRemoteStreamsReady', value: function(a0) {
var value3 = require(dependencyMap[22]).now() - this._connectStartTime;
var defaultImport = importDefault(dependencyMap[24]);
var VOICE_CONNECTION_REMOTE_STREAMS_CREATED = AnalyticEvents.VOICE_CONNECTION_REMOTE_STREAMS_CREATED;
var object = {};
copyDataProperties(object, this._getAnalyticsProperties(), this);
object['number_of_users'] = a0;
object['duration_ms'] = value3;
defaultImport.track(VOICE_CONNECTION_REMOTE_STREAMS_CREATED, object);
}}, {key: '_handleVideo', value: value_36775}, {key: '_handleControlPing', value: function(a0) {
if (!MediaEngineStore.supports(Features.NATIVE_PING)) {
this._handlePing(a0);
}
}}, {key: '_handlePing', value: value_36779}, {key: '_handlePingTimeout', value: value_36780},
{key: '_handleOutboundLossRate', value: function(a0) {
this._outboundLossRate = a0;
this.emit(require(dependencyMap[41]).RTCConnectionEvent.OutboundLossRate, a0);
}}, {key: '_getAnalyticsProperties', value: value_36782}, {key: '_handleClientConnect', value: value_36783},
{key: '_handleClientDisconnect', value: value_36785}, {key: '_handleCodecs', value: value_36786},
{key: '_trackVoiceConnectionSuccess', value: value_36787}, {key: '_handleSDP', value: function(a0) {
var property = this._connection;
if (property == null) {
this.logger.warn('Cannot set SDP on connection with protocol:', this.protocol);
} else if (this.protocol != null) {
property.setSDP(a0);
} else {
this.logger.warn('Cannot set SDP on connection with protocol:', this.protocol);
}
}}, {key: '_handleMediaSessionId', value: value_36790}, {key: '_handleMediaSinkWants', value: value_36791},
{key: '_handleCodeVersion', value: function(a0, a1) {
this.voiceVersion = a0;
this.rtcWorkerVersion = a1;
}}, {key: '_handleKeyframeInterval', value: function(a0) {
var property = this._connection;
if (property == null) {
this.logger.warn('Cannot set keyframe interval on connection with protocol:', this.protocol);
} else if (this.protocol != null) {
property.setKeyframeInterval(a0);
} else {
this.logger.warn('Cannot set keyframe interval on connection with protocol:', this.protocol);
}
}}, {key: '_handleBandwidthEstimationExperiment', value: value_36794}, {key: '_trackSecureFrameTransition',
value: value_36795}, {key: '_trackRemainingSecureFrameTransitions', value: function() {
var env0_0 = this;
this._secureFramesTransitionStates.forEach(_fun36798);
}}, {key: '_storeSecureFrameNextTransitionData', value: value_36799}, {key: '_storeSecureFrameTransitionData',
value: value_36800}, {key: '_handleSecureFramesInit', value: value_36801},
{key: '_handleSecureFramesRosterChange', value: value_36803}, {key: '_handleSecureFramesPrepareTransition',
value: value_36805}, {key: '_handleSecureFramesPrepareEpoch', value: value_36807}, {key: '_sendMLSKeyPackage',
value: function() {
var env0_0 = this;
var _connection = this._connection;
if (_connection != null) {
_connection.getMLSKeyPackage(_fun36809);
}
}}, {key: '_maybeSendSecureFramesTransitionReady', value: value_36810},
{key: '_handleSecureFramesExecuteTransition', value: value_36811}, {key: '_handleMLSExternalSenderPackage',
value: function(a0) {
var property = this.logger;
property.info('Received MLS external sender package');
property = this._connection;
if (property != null) {
property.updateMLSExternalSender(a0);
}
}}, {key: '_handleMLSProposals', value: value_36813}, {key: '_handleMLSPrepareCommitTransition',
value: value_36815}, {key: '_handleMLSWelcome', value: value_36817}, {key: 'getMLSPairwiseFingerprint',
value: function(a0, a1, a2) {
var _connection = this._connection;
if (_connection != null) {
_connection.getMLSPairwiseFingerprint(a0, a1, a2);
}
}}, {key: '_flagMLSInvalidCommitWelcome', value: function(a0) {
var property = this.logger;
property.info('Flagging invalid MLS commit/welcome for transition ID ' + a0);
property = this._socket;
if (property != null) {
property.flagMLSInvalidCommitWelcome(a0);
}
}}, {key: '_handleMLSFailure', value: value_36821}, {key: '_trackMLSFailures', value: value_36822},
{key: '_alertMLSFailure', value: value_36823}, {key: 'getExtraConnectionOptions', value: function() {
return {};
}}, {key: 'shouldReportPeriodicStats', value: value_36825}, {key: 'getInputDeviceName', value: value_36826},
{key: 'getOutputDeviceName', value: value_36827}, {key: 'getVideoDeviceName', value: value_36828},
{key: 'getInputDeviceSampleRate', value: function() {
var r1;
var property = this._voiceQuality;
var value = null;
if (value == property) {
r1 = undefined;
} else {
property = property.getAudioDeviceStats().input_device_session_sample_rate;
r1 = property;
}
return value != r1 ? r1 : value;
}}]);
function RTCConnection({userId, sessionId, guildId, channelId, context, streamServerId, streamChannelId, parentMediaSessionId, joinVoiceId}) { // fn#36654, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:2447, offset: 0x010914b2, size: 2060 bytes, params: 2, frame: 33
var type;
var defaultImport4;
var value29;
var defaultImport42;
var _goLiveQualityManager;
const GoLiveQualityManagerEvent = (GoLiveQualityManagerModule).GoLiveQualityManagerEvent;
var channelStoreBinding;
var value32;
var GUILD_STAGE_VOICE;
var defaultImport5;
var value33;
var defaultImport52;
var _localMediaSinkWantsManager;
const RTCMediaSinkWantsManagerEvent = (RTCMediaSinkWantsManagerModule).RTCMediaSinkWantsManagerEvent;
var powerMonitor;
var _handlePowerResume;
const value = undefined;
const r8 = context !== value ? context : MediaEngineContextTypes.DEFAULT;
let binding = env1_5;
binding(this, RTCConnection);
const value5 = env1_8(RTCConnection);
const value8 = env1_7(this, _isNativeReflectConstruct_36649() ? global.Reflect.construct(value5, [],
env1_8(this).constructor) : value5.apply(this, value));
let Map = global.Map;
const value9 = Object.create(Map.prototype, {constructor: {value: Map}});
let map = new Map();
value8._secureFramesRosterMap = map instanceof Object ? map : value9;
value8.reconnecting = false;
value8._nextFailureId = 0;
value8._mlsFailures = [];
Map = global.Map;
const value11 = Object.create(Map.prototype, {constructor: {value: Map}});
map = new Map();
value8._secureFramesTransitionStates = map instanceof Object ? map : value11;
value8._secureFramesMaxConcurrentTransitions = 0;
value8._secureFramesTransitionPrepareCount = 0;
value8._secureFramesTransitionExecuteCount = 0;
value8._numNoiseCancellationChanges = 0;
value8.reconnect = reconnect;
value8._alertMLSFailureDebouced = (importDefault(6949) /* metro dependency 6949 */)(value8._alertMLSFailure, 100);
value8._handleNetworkOnline = _handleNetworkOnline;
value8._handleNetworkOffline = _handleNetworkOffline;
value8._handleNoRoute = _handleNoRoute;
value8._handlePowerResume = _handlePowerResume;
value8._handleVoiceQualityPeriodicsStats = _handleVoiceQualityPeriodicsStats;
value8.getAudioDeviceStates = getAudioDeviceStates;
value8.getVideoDeviceStates = getVideoDeviceStates;
value8._trackVoiceConnectionConnecting = _trackVoiceConnectionConnecting;
value8.incomingVideoEnabledChanged = incomingVideoEnabledChanged;
value8.windowVisibilityChanged = windowVisibilityChanged;
value8.context = r8;
const recordEvent = value8.recordEvent;
const CONNECTION_CREATE = env1_37.CONNECTION_CREATE;
Reflect.apply(recordEvent, value8, [{c: CONNECTION_CREATE}]);
const mediaEngineStoreBinding = MediaEngineStore;
value8._fetchAsyncResourcesPromise = mediaEngineStoreBinding.fetchAsyncResources().catch(_fun36666);
value8.userId = userId;
value8.sessionId = sessionId;
value8.guildId = guildId;
value8._channelId = channelId;
let Set = global.Set;
items2 = [channelId];
const value13 = Object.create(Set.prototype, {constructor: {value: Set}});
let set = new Set(items2);
value8.channelIds = set instanceof Object ? set : value13;
value8.streamServerId = streamServerId;
value8.streamChannelId = streamChannelId;
value8.parentMediaSessionId = parentMediaSessionId;
value8.joinVoiceId = joinVoiceId;
binding = env1_38;
const value15 = typeof binding === 'bigint' ? binding : +binding;
env1_38 = typeof value15 === 'bigint' ? value15 + 1n : +value15 + 1;
value8._connectionSerial = value15;
const defaultImport2 = Logger;
const value16 = 'RTCConnection(' + value8.trueServerId + ', ' + value8.context + ')';
const value17 = Object.create(defaultImport2.prototype, {constructor: {value: defaultImport2}});
const defaultImport22 = new defaultImport2(value16);
value8.logger = defaultImport22 instanceof Object ? defaultImport22 : value17;
value8.logger.enableNativeLogger(true);
value8._endpoint = null;
value8.hostname = null;
value8.port = null;
value8.token = null;
value8.voiceVersion = null;
value8.rtcWorkerVersion = null;
const AWAITING_ENDPOINT = RTCConnectionStates.AWAITING_ENDPOINT;
value8.state = AWAITING_ENDPOINT;
const StateHistory = (RTCConnectionStatsModule).StateHistory;
const state = value8.state;
const value20 = Object.create(StateHistory.prototype, {constructor: {value: StateHistory}});
const stateHistory = new StateHistory(state);
value8.stateHistory = stateHistory instanceof Object ? stateHistory : value20;
value8._socket = null;
const defaultImport3 = Backoff;
const value22 = Object.create(defaultImport3.prototype, {constructor: {value: defaultImport3}});
const defaultImport32 = new defaultImport3(1000, 10000);
value8._backoff = defaultImport32 instanceof Object ? defaultImport32 : value22;
value8._destroyed = false;
value8._pings = [];
value8._pingBadCount = 0;
value8._pingTimeouts = [];
value8._mediaSessionId = null;
value8._voiceQuality = null;
value8._voiceQualityPeriodicStatsInterval = null;
value8._voiceQualityPeriodicStatsSequenceId = 0;
value8._systemResponsiveness = null;
value8._noiseCancellationError = 0;
value8._voiceDuration = null;
value8._videoQuality = null;
value8._videoHealthManager = null;
value8._sentVideo = false;
value8._videoDecoderFallbackSuppressed = false;
value8._outboundLossRate = null;
value8._createdTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
value8._connectStartTime = 0;
value8._connectCompletedTime = 0;
value8._rtcConnectionId = (require(491) /* metro dependency 491 */).v4();
value8._connectCount = 0;
value8._hasEverConnected = false;
value8._connecting = false;
value8._voiceConnectionSuccessTracked = false;
value8._hasCodecs = false;
value8._mediaEngineConnectDuration = 0;
value8._encountered_socket_failure = false;
value8._inputDetected = false;
value8._selectedExperiments = [];
value8._secureFramesState = null;
Set = global.Set;
items2 = [userId];
const value25 = Object.create(Set.prototype, {constructor: {value: Set}});
set = new Set(items2);
value8._userIds = set instanceof Object ? set : value25;
value8._secureFramesRosterMap.clear();
value8._mlsFailures = [];
value8._nextFailureId = 0;
value8._mediaEngineConnectionId = null;
value8.reconnecting = false;
value8._lastSentSpeakingStatus = 0;
value8._lastSentSSRC = value;
const supports = mediaEngineStoreBinding.supports;
const FIRST_FRAME_CALLBACK = Features.FIRST_FRAME_CALLBACK;
const r12 = Reflect.apply(supports, mediaEngineStoreBinding,
[FIRST_FRAME_CALLBACK]) && MediaEngineStore.supports(Features.REMOTE_USER_MULTI_STREAM);
const DEFAULT = MediaEngineContextTypes.DEFAULT;
if (DEFAULT === r8) {
channelStoreBinding = ChannelStore;
value32 = channelStoreBinding.getChannel(value8.channelId);
type = value32 == null ? value : value32.type;
GUILD_STAGE_VOICE = ChannelTypes.GUILD_STAGE_VOICE;
defaultImport5 = importDefault(12389) /* metro dependency 12389: RTCMediaSinkWantsManager */;
value33 = Object.create(defaultImport5.prototype, {constructor: {value: defaultImport5}});
defaultImport52 = new defaultImport5(userId, type === GUILD_STAGE_VOICE, r12);
value8._localMediaSinkWantsManager = defaultImport52 instanceof Object ? defaultImport52 : value33;
_localMediaSinkWantsManager = value8._localMediaSinkWantsManager;
_localMediaSinkWantsManager.on(RTCMediaSinkWantsManagerEvent.Update, _fun36667);
_localMediaSinkWantsManager = value8._localMediaSinkWantsManager;
_localMediaSinkWantsManager.on(RTCMediaSinkWantsManagerEvent.UserSSRCUpdate, _fun36668);
} else if (MediaEngineContextTypes.STREAM === r8) {
defaultImport4 = importDefault(12391) /* metro dependency 12391: GoLiveQualityManager */;
value29 = Object.create(defaultImport4.prototype, {constructor: {value: defaultImport4}});
defaultImport42 = new defaultImport4();
value8._goLiveQualityManager = defaultImport42 instanceof Object ? defaultImport42 : value29;
_goLiveQualityManager = value8._goLiveQualityManager;
_goLiveQualityManager.on(GoLiveQualityManagerEvent.RequestedSSRCsUpdate, _fun36669);
_goLiveQualityManager = value8._goLiveQualityManager;
_goLiveQualityManager.on(GoLiveQualityManagerEvent.RequestedStreamsUpdate, _fun36670);
}
const DEFAULT_WANTS_FULL = (RTCMediaSinkWantsManagerModule).DEFAULT_WANTS_FULL;
value8._remoteVideoSinkWants = DEFAULT_WANTS_FULL;
const WindowVisibilityVideoManager = (WindowVisibilityVideoManagerModule).WindowVisibilityVideoManager;
let on = WindowVisibilityVideoManager.on;
const WindowVisibilityEvent = (WindowVisibilityVideoManagerModule).WindowVisibilityEvent;
const IncomingVideoEnabledChanged = WindowVisibilityEvent.IncomingVideoEnabledChanged;
var incomingVideoEnabledChanged = value8.incomingVideoEnabledChanged;
Reflect.apply(on, WindowVisibilityVideoManager, [IncomingVideoEnabledChanged, incomingVideoEnabledChanged]);
on = WindowVisibilityVideoManager.on;
const WindowVisibilityChanged = WindowVisibilityEvent.WindowVisibilityChanged;
var windowVisibilityChanged = value8.windowVisibilityChanged;
Reflect.apply(on, WindowVisibilityVideoManager, [WindowVisibilityChanged, windowVisibilityChanged]);
const rtcDebugStoreBinding = RTCDebugStore;
if (rtcDebugStoreBinding.shouldRecordNextConnection()) {
value8._recordingEnabled = true;
(importAll(10866) /* metro dependency 10866: RTCDebugActionCreators */).setShouldRecordNextConnection(false);
} else {
value8._recordingEnabled = false;
}
const defaultImport6 = NetworkUtils;
const addOnlineCallback = defaultImport6.addOnlineCallback;
var _handleNetworkOnline = value8._handleNetworkOnline;
Reflect.apply(addOnlineCallback, defaultImport6, [_handleNetworkOnline]);
const defaultImport7 = defaultImport6;
const addOfflineCallback = defaultImport7.addOfflineCallback;
var _handleNetworkOffline = value8._handleNetworkOffline;
Reflect.apply(addOfflineCallback, defaultImport7, [_handleNetworkOffline]);
if (PlatformUtilsModule.isDesktop()) {
powerMonitor = (importDefault(3767) /* metro dependency 3767: DiscordNative */).powerMonitor;
value8.powerMonitorListener = powerMonitor.on('resume', value8._handlePowerResume);
}
value8._supportedBandwidthEstimationExperiments = [];
value8._bandwidthEstimationExperiment = null;
MediaEngineStore.getMediaEngine().getSupportedBandwidthEstimationExperiments(_fun36671);
return value8;
function reconnect() { // fn#36655, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:3085, owner: RTCConnection.reconnect, offset: 0x01091cbe, size: 226 bytes, params: 1, frame: 14
var _connectCount;
let binding = env0_0;
const recordEvent = binding.recordEvent;
const RECONNECT = env2_37.RECONNECT;
Reflect.apply(recordEvent, binding, [{c: RECONNECT}]);
const _socket = env0_0._socket;
if (_socket != null) {
if (env0_0._hasEverConnected) {
env0_0._connectStartTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
}
if (!env0_0._connecting) {
env0_0._trackVoiceConnectionConnecting();
env0_0._connecting = true;
env0_0._encountered_socket_failure = false;
env0_0._voiceConnectionSuccessTracked = false;
}
binding = env0_0;
_connectCount = binding._connectCount;
binding._connectCount = typeof _connectCount === 'bigint' ? _connectCount + 1n : +_connectCount + 1;
env0_0.reconnecting = true;
_socket.close();
_socket.connect();
}
}
function _handleNetworkOnline() { // fn#36656, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:3488, owner: RTCConnection._handleNetworkOnline, offset: 0x01091da0, size: 35 bytes, params: 1, frame: 13
env0_0.expeditedHeartbeat(5000, 'network detected online.');
}
function _handleNetworkOffline() { // fn#36657, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:3571, owner: RTCConnection._handleNetworkOffline, offset: 0x01091dc3, size: 38 bytes, params: 1, frame: 15
env0_0.expeditedHeartbeat(15000, 'network detected offline.', false);
}
function _handleNoRoute() { // fn#36658, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:3652, owner: RTCConnection._handleNoRoute, offset: 0x01091de9, size: 35 bytes, params: 1, frame: 9
const _socket = env0_0._socket;
if (_socket != null) {
_socket.noRoute();
}
}
function _handlePowerResume() { // fn#36659, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:3718, owner: RTCConnection._handlePowerResume, offset: 0x01091e0c, size: 35 bytes, params: 1, frame: 13
env0_0.expeditedHeartbeat(5000, 'power monitor resumed');
}
function _handleVoiceQualityPeriodicsStats() { // fn#36660, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:3810, owner: RTCConnection._handleVoiceQualityPeriodicsStats, offset: 0x01091e2f, size: 616 bytes, params: 1, frame: 45
var r35;
var r2;
var getPeriodicStats;
var value2;
var binding;
var shouldReportPeriodicStats;
var value3;
var value4;
var value5;
var done;
var value6;
var defaultImport;
var track;
var VOICE_QUALITY_PERIODIC_STATS;
var object;
var _getAnalyticsProperties;
var getMediaSessionId;
var userId;
var hostname;
var silent;
var normal;
var merged;
var expanded;
var accelerated;
var preemptiveExpanded;
var cng;
var accelerateRate;
var expandRate;
var preemptiveExpandRate;
var speechExpandRate;
var durationMs;
var _voiceQualityPeriodicStatsSequenceId;
var getInputDeviceName;
var getOutputDeviceName;
var Math;
var round;
var getAveragePing;
var _pingBadCount;
var parentMediaSessionId;
var value7;
let _voiceQuality = env0_0._voiceQuality;
reducibleJoin5: while (true) {
if (_voiceQuality == null) {
break reducibleJoin5;
}
_voiceQuality = env0_0._voiceQuality;
getPeriodicStats = _voiceQuality.getPeriodicStats;
value2 = Reflect.apply(getPeriodicStats, _voiceQuality, []);
binding = env0_0;
shouldReportPeriodicStats = binding.shouldReportPeriodicStats;
reducibleJoin4: while (true) {
if (!Reflect.apply(shouldReportPeriodicStats, binding, [value2])) {
break reducibleJoin4;
}
value3 = environment.__proto__.__proto__;
value4 = _createForOfIteratorHelperLoose_36646(value2);
value5 = value4();
done = value5.done;
if (done) {
break reducibleJoin4;
}
r2 = value5;
reducibleLoop3: while (true) {
value6 = r2.value;
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
VOICE_QUALITY_PERIODIC_STATS = AnalyticEvents.VOICE_QUALITY_PERIODIC_STATS;
object = {};
binding = env0_0;
_getAnalyticsProperties = binding._getAnalyticsProperties;
copyDataProperties(object, Reflect.apply(_getAnalyticsProperties, binding, []), r35);
binding = env0_0;
getMediaSessionId = binding.getMediaSessionId;
object['media_session_id'] = Reflect.apply(getMediaSessionId, binding, []);
userId = value6.userId;
object['sender_user_id'] = userId;
hostname = env0_0.hostname;
object['hostname'] = hostname;
silent = value6.silent;
object['frame_op_silent'] = silent;
normal = value6.normal;
object['frame_op_normal'] = normal;
merged = value6.merged;
object['frame_op_merged'] = merged;
expanded = value6.expanded;
object['frame_op_expanded'] = expanded;
accelerated = value6.accelerated;
object['frame_op_accelerated'] = accelerated;
preemptiveExpanded = value6.preemptiveExpanded;
object['frame_op_preemptive_expanded'] = preemptiveExpanded;
cng = value6.cng;
object['frame_op_cng'] = cng;
accelerateRate = value6.accelerateRate;
object['accelerate_rate'] = accelerateRate;
expandRate = value6.expandRate;
object['expand_rate'] = expandRate;
preemptiveExpandRate = value6.preemptiveExpandRate;
object['preemptive_expand_rate'] = preemptiveExpandRate;
speechExpandRate = value6.speechExpandRate;
object['speech_expand_rate'] = speechExpandRate;
durationMs = value6.durationMs;
object['duration_ms'] = durationMs;
_voiceQualityPeriodicStatsSequenceId = env0_0._voiceQualityPeriodicStatsSequenceId;
object['sequence_id'] = _voiceQualityPeriodicStatsSequenceId;
binding = env0_0;
getInputDeviceName = binding.getInputDeviceName;
object['input_device'] = Reflect.apply(getInputDeviceName, binding, []);
binding = env0_0;
getOutputDeviceName = binding.getOutputDeviceName;
object['output_device'] = Reflect.apply(getOutputDeviceName, binding, []);
Math = global.Math;
round = Math.round;
binding = env0_0;
getAveragePing = binding.getAveragePing;
object['ping_average'] = Reflect.apply(round, Math, [Reflect.apply(getAveragePing, binding, [])]);
_pingBadCount = env0_0._pingBadCount;
object['ping_bad_count'] = _pingBadCount;
parentMediaSessionId = env0_0.parentMediaSessionId;
object['parent_media_session_id'] = parentMediaSessionId;
Reflect.apply(track, defaultImport, [VOICE_QUALITY_PERIODIC_STATS, object]);
value7 = value4();
done = value7.done;
if (done) {
break reducibleJoin4;
}
r2 = value7;
r35 = binding;
continue reducibleLoop3;
}
}
binding = env0_0;
_voiceQualityPeriodicStatsSequenceId = binding._voiceQualityPeriodicStatsSequenceId;
binding._voiceQualityPeriodicStatsSequenceId = typeof _voiceQualityPeriodicStatsSequenceId === 'bigint' ? _voiceQualityPeriodicStatsSequenceId + 1n : +_voiceQualityPeriodicStatsSequenceId + 1;
break reducibleJoin5;
}
}
function getAudioDeviceStates() { // fn#36661, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:4844, owner: RTCConnection.getAudioDeviceStates, offset: 0x01092097, size: 132 bytes, params: 1, frame: 15
const object = {};
object.input_device = env0_0.getInputDeviceName();
let Object = global.Object;
let keys = Object.keys;
const mediaEngineStoreBinding = MediaEngineStore;
const getInputDevices = mediaEngineStoreBinding.getInputDevices;
object.input_device_count = Reflect.apply(keys, Object, [Reflect.apply(getInputDevices, mediaEngineStoreBinding,
[])]).length;
object.output_device = env0_0.getOutputDeviceName();
Object = global.Object;
keys = Object.keys;
const getOutputDevices = mediaEngineStoreBinding.getOutputDevices;
object.output_device_count = Reflect.apply(keys, Object, [Reflect.apply(getOutputDevices, mediaEngineStoreBinding,
[])]).length;
return object;
}
function getVideoDeviceStates() { // fn#36662, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:5069, owner: RTCConnection.getVideoDeviceStates, offset: 0x0109211b, size: 77 bytes, params: 1, frame: 13
const object = {};
object.camera_device = env0_0.getVideoDeviceName();
const Object = global.Object;
const keys = Object.keys;
const mediaEngineStoreBinding = MediaEngineStore;
const getVideoDevices = mediaEngineStoreBinding.getVideoDevices;
object.camera_device_count = Reflect.apply(keys, Object, [Reflect.apply(getVideoDevices, mediaEngineStoreBinding,
[])]).length;
return object;
}
function _trackVoiceConnectionConnecting() { // fn#36663, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:5208, owner: RTCConnection._trackVoiceConnectionConnecting, offset: 0x01092168, size: 350 bytes, params: 1, frame: 19
const value = environment.__proto__.__proto__;
const channel = ChannelStore.getChannel(env0_0.channelId);
const value4 = undefined;
const type = channel == null ? value4 : channel.type;
const defaultImport = AnalyticsUtils;
const track = defaultImport.track;
const VOICE_CONNECTION_CONNECTING = AnalyticEvents.VOICE_CONNECTION_CONNECTING;
const object = {};
let binding = env0_0;
const getAudioDeviceStates = binding.getAudioDeviceStates;
copyDataProperties(object, Reflect.apply(getAudioDeviceStates, binding, []), binding);
binding = env0_0;
const getVideoDeviceStates = binding.getVideoDeviceStates;
copyDataProperties(object, Reflect.apply(getVideoDeviceStates, binding, []), binding);
object['guild_id'] = env0_0.guildId;
object['channel_id'] = env0_0.channelId;
object['rtc_connection_id'] = env0_0.getRTCConnectionId();
object['hostname'] = env0_0.hostname;
object['connect_count'] = env0_0._connectCount;
object['context'] = env0_0.context;
object['channel_type'] = type;
object['participant_type'] = env0_0.getVoiceParticipantType();
object['is_muted'] = MediaEngineStore.isMute();
object['join_voice_id'] = env0_0.joinVoiceId;
object['connection_serial'] = env0_0._connectionSerial;
Reflect.apply(track, defaultImport, [VOICE_CONNECTION_CONNECTING, object]);
return value4;
}
function incomingVideoEnabledChanged(a0) { // fn#36664, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:5701, owner: RTCConnection.incomingVideoEnabledChanged, offset: 0x010922c6, size: 66 bytes, params: 2, frame: 13
const _goLiveQualityManager = env0_0._goLiveQualityManager;
if (_goLiveQualityManager != null) {
_goLiveQualityManager.onIncomingVideoEnabled(a0);
}
const _videoQuality = env0_0._videoQuality;
if (_videoQuality != null) {
_videoQuality.setOcclusionIncomingVideoEnabled(a0);
}
}
function windowVisibilityChanged(a0) { // fn#36665, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:5868, owner: RTCConnection.windowVisibilityChanged, offset: 0x01092308, size: 42 bytes, params: 2, frame: 11
const _videoQuality = env0_0._videoQuality;
if (_videoQuality != null) {
_videoQuality.setWindowOcclusionState(!a0);
}
}
function _fun36666(a0) { // fn#36666, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:6048, offset: 0x01092332, size: 41 bytes, params: 2, frame: 12
const value = environment.__proto__.__proto__;
(SentryUtilsNative).captureException(a0);
}
function _fun36667(a0) { // fn#36667, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:7874, offset: 0x0109235b, size: 168 bytes, params: 2, frame: 15
var logger;
var _connection;
const state = env0_0.state;
const RTC_CONNECTED = RTCConnectionStates.RTC_CONNECTED;
if (state === RTC_CONNECTED && env0_0._socket != null) {
logger = env0_0.logger;
logger.info('Media sink wants: ' + global.JSON.stringify(a0));
env0_0._socket.mediaSinkWants(a0);
_connection = env0_0._connection;
if (_connection != null) {
_connection.setLocalVideoSinkWants(a0);
}
}
}
function _fun36668(a0, a1, a2) { // fn#36668, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:8159, offset: 0x01092403, size: 45 bytes, params: 4, frame: 15
const _connection = env0_0._connection;
if (_connection != null) {
_connection.createUser(a0, a1, a2);
}
}
function _fun36669(a0, a1, a2) { // fn#36669, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:8366, offset: 0x01092403, size: 45 bytes, params: 4, frame: 15
const _connection = env0_0._connection;
if (_connection != null) {
_connection.createUser(a0, a1, a2);
}
}
function _fun36670(a0) { // fn#36670, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:8517, offset: 0x01092430, size: 168 bytes, params: 2, frame: 15
var logger;
var _connection;
const state = env0_0.state;
const RTC_CONNECTED = RTCConnectionStates.RTC_CONNECTED;
if (state === RTC_CONNECTED && env0_0._socket != null) {
logger = env0_0.logger;
logger.info('Go Live Media sink wants: ' + global.JSON.stringify(a0));
env0_0._socket.mediaSinkWants(a0);
_connection = env0_0._connection;
if (_connection != null) {
_connection.setLocalVideoSinkWants(a0);
}
}
}
function _fun36671(a0) { // fn#36671, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:9517, offset: 0x010924d8, size: 20 bytes, params: 2, frame: 2
env0_0._supportedBandwidthEstimationExperiments = a0;
}
}
function value_36672(a0) { // fn#36672, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:9639, offset: 0x010924ec, size: 132 bytes, params: 2, frame: 16
let binding = env1_39;
const push = binding.push;
const object = {};
copyDataProperties(object, a0, undefined);
object['t'] = (require(4303) /* metro dependency 4303: TimeUtils */).now();
object['n'] = this._connectionSerial;
Reflect.apply(push, binding, [object]);
let length = env1_39.length;
if (length > 50) {
while (true) {
binding = env1_39;
binding.shift();
length = env1_39.length;
if (!(length > 50)) {
break;
}
}
}
}
function get_36673() { // fn#36673, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:9757, offset: 0x01092570, size: 154 bytes, params: 1, frame: 13
const lastPing = this.getLastPing();
const state = this.state;
const RTC_CONNECTED = RTCConnectionStates.RTC_CONNECTED;
return state !== RTC_CONNECTED || lastPing === undefined ? RTCConnectionQuality.UNKNOWN : lastPing > 500 ? RTCConnectionQuality.BAD : this._outboundLossRate == null ? lastPing > 250 ? RTCConnectionQuality.AVERAGE : this._outboundLossRate == null ? RTCConnectionQuality.FINE : this._outboundLossRate > 5 ? RTCConnectionQuality.AVERAGE : RTCConnectionQuality.FINE : this._outboundLossRate > 10 ? RTCConnectionQuality.BAD : lastPing > 250 ? RTCConnectionQuality.AVERAGE : this._outboundLossRate == null ? RTCConnectionQuality.FINE : this._outboundLossRate > 5 ? RTCConnectionQuality.AVERAGE : RTCConnectionQuality.FINE;
}
function set_36675(a0) { // fn#36675, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:10059, offset: 0x01092615, size: 254 bytes, params: 2, frame: 22
var r8;
var r11;
var value2;
var hostname;
var port;
const recordEvent = this.recordEvent;
const value = environment.__proto__;
const SET_ENDPOINT = env1_37.SET_ENDPOINT;
Reflect.apply(recordEvent, this, [{c: SET_ENDPOINT, e: a0 != null}]);
if (a0 == null) {
this._endpoint = null;
this.hostname = null;
} else {
value2 = '' + env1_36 + '//' + a0;
r8 = (importDefault(1471) /* metro dependency 1471: URLUtils */).toURLSafe(value2) ?? ({});
hostname = r8.hostname;
port = r8.port;
r11 = port != null ? global.parseInt(port) : global.NaN;
r8 = hostname == null || r11 !== 80 && r11 !== 443;
this._endpoint = (r8 ? value2 : '' + env1_36 + '//' + hostname) + '/';
this.hostname = hostname;
}
}
function value_36676(a0, a1) { // fn#36676, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:10389, offset: 0x01092713, size: 1973 bytes, params: 3, frame: 22
var moduleValue;
var defaultImport2;
var context;
var defaultImport22;
var on;
const SocketEvent = (RTCControlSocketModule).SocketEvent;
var Connecting;
var _handleConnecting;
var bind;
var Connect;
var _handleConnect;
var Disconnect;
var _handleDisconnect;
var Resuming;
var _handleResuming;
var Ready;
var _handleReady;
var Speaking;
var _handleSpeaking;
var Video;
var _handleVideo;
var Ping;
var _handleControlPing;
var ClientDisconnect;
var _handleClientDisconnect;
var ClientConnect;
var _handleClientConnect;
var Codecs;
var _handleCodecs;
var MediaSessionId;
var _handleMediaSessionId;
var MediaSinkWants;
var _handleMediaSinkWants;
var VoiceBackendVersion;
var _handleCodeVersion;
var KeyframeInterval;
var _handleKeyframeInterval;
var Flags;
var handleFlags;
var Platform;
var handlePlatform;
var BandwidthEstimationExperiment;
var _handleBandwidthEstimationExperiment;
var SecureFramesInit;
var _handleSecureFramesInit;
var SecureFramesPrepareTransition;
var _handleSecureFramesPrepareTransition;
var SecureFramesPrepareEpoch;
var _handleSecureFramesPrepareEpoch;
var SecureFramesExecuteTransition;
var _handleSecureFramesExecuteTransition;
var MLSExternalSenderPackage;
var _handleMLSExternalSenderPackage;
var MLSProposals;
var _handleMLSProposals;
var MLSPrepareCommitTransition;
var _handleMLSPrepareCommitTransition;
var MLSWelcome;
var _handleMLSWelcome;
var ReceiveMessage;
var _recordMessageEvent;
var SendMessage;
var _connectCount;
if (this._destroyed) {
throw new global.Error('RTCConnection.connect(...): Attempting to connect on destroyed instance.');
}
const recordEvent = this.recordEvent;
let value = environment.__proto__;
const CONNECT = env1_37.CONNECT;
Reflect.apply(recordEvent, this, [{c: CONNECT, e: a0 != null, h: a1 != null}]);
this._backoff.cancel();
let endpoint = this.endpoint;
const token = this.token;
this.endpoint = a0;
this.token = a1;
if (!(endpoint === this.endpoint && token === a1)) {
this._cleanupSocket();
this._mediaSessionId = null;
if (endpoint != null) {
moduleValue = require(491) /* metro dependency 491 */;
this._rtcConnectionId = moduleValue.v4();
(importDefault(694) /* metro dependency 694: Dispatcher */).dispatch({type: 'RTC_CONNECTION_UPDATE_ID',
connection: this});
}
}
endpoint = this.endpoint;
if (endpoint != null) {
if (this._socket != null) {
this._cleanupSocket();
}
if (this._nextChannelId != null) {
this._channelId = this._nextChannelId;
this._nextChannelId = undefined;
}
defaultImport2 = importDefault(12392) /* metro dependency 12392: RTCControlSocket */;
endpoint = this.endpoint;
context = this.context;
defaultImport22 = new defaultImport2(endpoint);
this._socket = defaultImport22;
on = defaultImport22.on;
Connecting = SocketEvent.Connecting;
_handleConnecting = this._handleConnecting;
bind = _handleConnecting.bind;
Reflect.apply(on, defaultImport22, [Connecting, Reflect.apply(bind, _handleConnecting, [this,
defaultImport22])]);
on = defaultImport22.on;
Connect = SocketEvent.Connect;
_handleConnect = this._handleConnect;
bind = _handleConnect.bind;
Reflect.apply(on, defaultImport22, [Connect, Reflect.apply(bind, _handleConnect, [this, defaultImport22])]);
on = defaultImport22.on;
Disconnect = SocketEvent.Disconnect;
_handleDisconnect = this._handleDisconnect;
bind = _handleDisconnect.bind;
Reflect.apply(on, defaultImport22, [Disconnect, Reflect.apply(bind, _handleDisconnect, [this,
defaultImport22])]);
on = defaultImport22.on;
Resuming = SocketEvent.Resuming;
_handleResuming = this._handleResuming;
bind = _handleResuming.bind;
Reflect.apply(on, defaultImport22, [Resuming, Reflect.apply(bind, _handleResuming, [this, defaultImport22])]);
on = defaultImport22.on;
Ready = SocketEvent.Ready;
_handleReady = this._handleReady;
bind = _handleReady.bind;
Reflect.apply(on, defaultImport22, [Ready, Reflect.apply(bind, _handleReady, [this, defaultImport22])]);
on = defaultImport22.on;
Speaking = SocketEvent.Speaking;
_handleSpeaking = this._handleSpeaking;
bind = _handleSpeaking.bind;
Reflect.apply(on, defaultImport22, [Speaking, Reflect.apply(bind, _handleSpeaking, [this, defaultImport22])]);
on = defaultImport22.on;
Video = SocketEvent.Video;
_handleVideo = this._handleVideo;
bind = _handleVideo.bind;
Reflect.apply(on, defaultImport22, [Video, Reflect.apply(bind, _handleVideo, [this, defaultImport22])]);
on = defaultImport22.on;
Ping = SocketEvent.Ping;
_handleControlPing = this._handleControlPing;
bind = _handleControlPing.bind;
Reflect.apply(on, defaultImport22, [Ping, Reflect.apply(bind, _handleControlPing, [this])]);
on = defaultImport22.on;
ClientDisconnect = SocketEvent.ClientDisconnect;
_handleClientDisconnect = this._handleClientDisconnect;
bind = _handleClientDisconnect.bind;
Reflect.apply(on, defaultImport22, [ClientDisconnect, Reflect.apply(bind, _handleClientDisconnect, [this])]);
on = defaultImport22.on;
ClientConnect = SocketEvent.ClientConnect;
_handleClientConnect = this._handleClientConnect;
bind = _handleClientConnect.bind;
Reflect.apply(on, defaultImport22, [ClientConnect, Reflect.apply(bind, _handleClientConnect, [this])]);
on = defaultImport22.on;
Codecs = SocketEvent.Codecs;
_handleCodecs = this._handleCodecs;
bind = _handleCodecs.bind;
Reflect.apply(on, defaultImport22, [Codecs, Reflect.apply(bind, _handleCodecs, [this])]);
on = defaultImport22.on;
MediaSessionId = SocketEvent.MediaSessionId;
_handleMediaSessionId = this._handleMediaSessionId;
bind = _handleMediaSessionId.bind;
Reflect.apply(on, defaultImport22, [MediaSessionId, Reflect.apply(bind, _handleMediaSessionId, [this])]);
on = defaultImport22.on;
MediaSinkWants = SocketEvent.MediaSinkWants;
_handleMediaSinkWants = this._handleMediaSinkWants;
bind = _handleMediaSinkWants.bind;
Reflect.apply(on, defaultImport22, [MediaSinkWants, Reflect.apply(bind, _handleMediaSinkWants, [this])]);
on = defaultImport22.on;
VoiceBackendVersion = SocketEvent.VoiceBackendVersion;
_handleCodeVersion = this._handleCodeVersion;
bind = _handleCodeVersion.bind;
Reflect.apply(on, defaultImport22, [VoiceBackendVersion, Reflect.apply(bind, _handleCodeVersion, [this])]);
on = defaultImport22.on;
KeyframeInterval = SocketEvent.KeyframeInterval;
_handleKeyframeInterval = this._handleKeyframeInterval;
bind = _handleKeyframeInterval.bind;
Reflect.apply(on, defaultImport22, [KeyframeInterval, Reflect.apply(bind, _handleKeyframeInterval, [this])]);
on = defaultImport22.on;
Flags = SocketEvent.Flags;
handleFlags = this.handleFlags;
bind = handleFlags.bind;
Reflect.apply(on, defaultImport22, [Flags, Reflect.apply(bind, handleFlags, [this])]);
on = defaultImport22.on;
Platform = SocketEvent.Platform;
handlePlatform = this.handlePlatform;
bind = handlePlatform.bind;
Reflect.apply(on, defaultImport22, [Platform, Reflect.apply(bind, handlePlatform, [this])]);
on = defaultImport22.on;
BandwidthEstimationExperiment = SocketEvent.BandwidthEstimationExperiment;
_handleBandwidthEstimationExperiment = this._handleBandwidthEstimationExperiment;
bind = _handleBandwidthEstimationExperiment.bind;
Reflect.apply(on, defaultImport22, [BandwidthEstimationExperiment, Reflect.apply(bind,
_handleBandwidthEstimationExperiment, [this])]);
on = defaultImport22.on;
SecureFramesInit = SocketEvent.SecureFramesInit;
_handleSecureFramesInit = this._handleSecureFramesInit;
bind = _handleSecureFramesInit.bind;
Reflect.apply(on, defaultImport22, [SecureFramesInit, Reflect.apply(bind, _handleSecureFramesInit, [this])]);
on = defaultImport22.on;
SecureFramesPrepareTransition = SocketEvent.SecureFramesPrepareTransition;
_handleSecureFramesPrepareTransition = this._handleSecureFramesPrepareTransition;
bind = _handleSecureFramesPrepareTransition.bind;
Reflect.apply(on, defaultImport22, [SecureFramesPrepareTransition, Reflect.apply(bind,
_handleSecureFramesPrepareTransition, [this])]);
on = defaultImport22.on;
SecureFramesPrepareEpoch = SocketEvent.SecureFramesPrepareEpoch;
_handleSecureFramesPrepareEpoch = this._handleSecureFramesPrepareEpoch;
bind = _handleSecureFramesPrepareEpoch.bind;
Reflect.apply(on, defaultImport22, [SecureFramesPrepareEpoch, Reflect.apply(bind,
_handleSecureFramesPrepareEpoch,
[this])]);
on = defaultImport22.on;
SecureFramesExecuteTransition = SocketEvent.SecureFramesExecuteTransition;
_handleSecureFramesExecuteTransition = this._handleSecureFramesExecuteTransition;
bind = _handleSecureFramesExecuteTransition.bind;
Reflect.apply(on, defaultImport22, [SecureFramesExecuteTransition, Reflect.apply(bind,
_handleSecureFramesExecuteTransition, [this])]);
on = defaultImport22.on;
MLSExternalSenderPackage = SocketEvent.MLSExternalSenderPackage;
_handleMLSExternalSenderPackage = this._handleMLSExternalSenderPackage;
bind = _handleMLSExternalSenderPackage.bind;
Reflect.apply(on, defaultImport22, [MLSExternalSenderPackage, Reflect.apply(bind,
_handleMLSExternalSenderPackage,
[this])]);
on = defaultImport22.on;
MLSProposals = SocketEvent.MLSProposals;
_handleMLSProposals = this._handleMLSProposals;
bind = _handleMLSProposals.bind;
Reflect.apply(on, defaultImport22, [MLSProposals, Reflect.apply(bind, _handleMLSProposals, [this,
defaultImport22])]);
on = defaultImport22.on;
MLSPrepareCommitTransition = SocketEvent.MLSPrepareCommitTransition;
_handleMLSPrepareCommitTransition = this._handleMLSPrepareCommitTransition;
bind = _handleMLSPrepareCommitTransition.bind;
Reflect.apply(on, defaultImport22, [MLSPrepareCommitTransition, Reflect.apply(bind,
_handleMLSPrepareCommitTransition, [this])]);
on = defaultImport22.on;
MLSWelcome = SocketEvent.MLSWelcome;
_handleMLSWelcome = this._handleMLSWelcome;
bind = _handleMLSWelcome.bind;
Reflect.apply(on, defaultImport22, [MLSWelcome, Reflect.apply(bind, _handleMLSWelcome, [this])]);
on = defaultImport22.on;
ReceiveMessage = SocketEvent.ReceiveMessage;
_recordMessageEvent = this._recordMessageEvent;
bind = _recordMessageEvent.bind;
Reflect.apply(on, defaultImport22, [ReceiveMessage, Reflect.apply(bind, _recordMessageEvent, [this,
env1_37.MESSAGE_RECEIVE])]);
on = defaultImport22.on;
SendMessage = SocketEvent.SendMessage;
_recordMessageEvent = this._recordMessageEvent;
bind = _recordMessageEvent.bind;
Reflect.apply(on, defaultImport22, [SendMessage, Reflect.apply(bind, _recordMessageEvent, [this,
env1_37.MESSAGE_SEND])]);
value = require(4303) /* metro dependency 4303: TimeUtils */;
this._connectStartTime = value.now();
_connectCount = this._connectCount;
this._connectCount = typeof _connectCount === 'bigint' ? _connectCount + 1n : +_connectCount + 1;
this._connecting = true;
this._voiceConnectionSuccessTracked = false;
value = defaultImport22 != null;
if (value && this._socket === defaultImport22) {
this._trackVoiceConnectionConnecting();
this._encountered_socket_failure = false;
defaultImport22.connect();
}
} else {
this.setState(RTCConnectionStates.AWAITING_ENDPOINT);
}
}
function value_36678() { // fn#36678, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:13755, offset: 0x01092eea, size: 566 bytes, params: 1, frame: 18
var powerMonitorListener;
this.logger.info('Destroy RTCConnection');
const defaultImport = NetworkUtils;
defaultImport.removeOnlineCallback(this._handleNetworkOnline);
const defaultImport2 = defaultImport;
defaultImport2.removeOfflineCallback(this._handleNetworkOffline);
if (PlatformUtilsModule.isDesktop()) {
powerMonitorListener = this.powerMonitorListener;
if (powerMonitorListener != null) {
powerMonitorListener.call(this);
}
}
const recordEvent = this.recordEvent;
const CONNECTION_DESTROY = env1_37.CONNECTION_DESTROY;
Reflect.apply(recordEvent, this, [{c: CONNECTION_DESTROY}]);
const WindowVisibilityVideoManager = (WindowVisibilityVideoManagerModule).WindowVisibilityVideoManager;
let off = WindowVisibilityVideoManager.off;
const WindowVisibilityEvent = (WindowVisibilityVideoManagerModule).WindowVisibilityEvent;
const IncomingVideoEnabledChanged = WindowVisibilityEvent.IncomingVideoEnabledChanged;
Reflect.apply(off, WindowVisibilityVideoManager, [IncomingVideoEnabledChanged, this.incomingVideoEnabledChanged]);
off = WindowVisibilityVideoManager.off;
const WindowVisibilityChanged = WindowVisibilityEvent.WindowVisibilityChanged;
Reflect.apply(off, WindowVisibilityVideoManager, [WindowVisibilityChanged, this.windowVisibilityChanged]);
this._backoff.cancel();
this._cleanupSocket();
let _voiceQuality = this._voiceQuality;
if (_voiceQuality != null) {
_voiceQuality.stop();
}
_voiceQuality = this._voiceQuality;
if (_voiceQuality != null) {
_voiceQuality.removeAllListeners();
}
this._voiceQuality = null;
global.clearInterval(this._voiceQualityPeriodicStatsInterval);
this._voiceQualityPeriodicStatsInterval = null;
this._voiceQualityPeriodicStatsSequenceId = 0;
const _systemResponsiveness = this._systemResponsiveness;
if (_systemResponsiveness != null) {
_systemResponsiveness.stop();
}
this._systemResponsiveness = null;
this._noiseCancellationError = 0;
const _voiceDuration = this._voiceDuration;
if (_voiceDuration != null) {
_voiceDuration.stop();
}
this._voiceDuration = null;
const _videoQuality = this._videoQuality;
if (_videoQuality != null) {
_videoQuality.stop();
}
this._videoQuality = null;
this._videoHealthManager = null;
this._secureFramesState = null;
const _localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.reset();
}
let _connection = this._connection;
if (_connection != null) {
_connection = this._connection;
this._connection = null;
_connection.destroy();
}
this.removeAllListeners();
this._destroyed = true;
}
function value_36679(a0, a1) { // fn#36679, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:15147, offset: 0x01093120, size: 231 bytes, params: 3, frame: 21
var r1;
var r2;
const value = environment.__proto__;
if (PlatformUtilsModule.isWeb()) {
return true;
}
let hasFlag = FlagUtilsModule.hasFlag;
let PRIORITY = SpeakingFlags.PRIORITY;
const hasFlag2 = Reflect.apply(hasFlag, FlagUtilsModule, [a0, PRIORITY]);
hasFlag = FlagUtilsModule.hasFlag;
const _lastSentSpeakingStatus = this._lastSentSpeakingStatus;
PRIORITY = SpeakingFlags.PRIORITY;
let r0 = this._lastSentSSRC !== a1 || hasFlag2 !== Reflect.apply(hasFlag, FlagUtilsModule, [_lastSentSpeakingStatus,
PRIORITY]);
if (r0) {
r1 = this._lastSentSSRC !== undefined || a0 !== SpeakingFlags.NONE;
if (r1) {
r2 = this._lastSentSSRC === a1 || a0 !== SpeakingFlags.NONE;
if (r2) {
this._lastSentSpeakingStatus = a0;
this._lastSentSSRC = a1;
r2 = true;
}
r1 = r2;
}
r0 = r1;
}
return r0;
}
function value_36680(a0, a1) { // fn#36680, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:15499, offset: 0x01093207, size: 74 bytes, params: 3, frame: 15
var value;
const _socket = this._socket;
if (_socket != null) {
if (this.shouldSendSpeaking(a0, a1)) {
value = environment.__proto__;
value = MediaEngineStore.getPacketDelay();
_socket.speaking(a0, value, a1);
}
}
}
function value_36683() { // fn#36683, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:15837, offset: 0x010932a2, size: 113 bytes, params: 1, frame: 16
var r0;
const _pings = this._pings;
const slice = _pings.slice;
const Math = global.Math;
let value = Math.min(this._pings.length, 20);
const value2 = 0;
value = Reflect.apply(slice, _pings, [value2, value]);
if (value2 === value.length) {
r0 = value2;
} else if (this._socket == null) {
r0 = value2;
} else {
value = value.reduce(function(a0, a1) {
return a0 + a1.value;
}, value2) / value.length;
r0 = value;
}
return r0;
}
function value_36704() { // fn#36704, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:17639, offset: 0x010934a1, size: 48 bytes, params: 1, frame: 11
const Object = global.Object;
return Object.entries(this._remoteVideoSinkWants).some(_fun36705);
function _fun36705(a0) { // fn#36705, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:17706, offset: 0x010934d1, size: 153 bytes, params: 2, frame: 16
var r0;
var r2;
var r3;
var r1;
var item3;
var value3;
var value4;
const iterator = a0[Symbol.iterator]();
const iterator2 = iterator.next;
let item2 = Reflect.apply(iterator2, iterator, []);
let item = item2.value;
item2 = item2.done ? undefined : iterator;
let value = undefined;
const value2 = item2 === value;
const r5 = value2 ? value : item;
if (value2) {
r0 = item2;
r2 = value;
r3 = value2;
} else {
item3 = Reflect.apply(iterator2, item2, []);
item = item3.value;
item3 = item3.done ? undefined : item2;
value3 = item3 === value;
if (value3) {
r0 = item3;
r2 = value;
r3 = value3;
} else {
r0 = item3;
r2 = item;
r3 = value3;
}
}
if (!r3) {
r0.return();
}
const Number = global.Number;
if (Number.isInteger(r5)) {
r0 = r2 !== 0;
} else {
value4 = r5 !== 'any';
if (value4) {
if (r5 !== 'pixelCounts') {
r1 = value;
} else {
value = global.Object.values(r2);
value = value.some(function(a0) {
return a0 !== 0;
});
r1 = value;
}
r0 = r1;
} else {
r0 = value4;
}
}
return r0;
}
}
function value_36710(a0) { // fn#36710, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:18349, offset: 0x01093606, size: 221 bytes, params: 2, frame: 22
let value = a1;
const r5 = value !== undefined ? value : {};
const recordEvent = this.recordEvent;
value = environment.__proto__;
const SET_STATE = env1_37.SET_STATE;
Reflect.apply(recordEvent, this, [{c: SET_STATE, s: a0}]);
const logger = this.logger;
logger.info('RTC connection state: ' + this.state + ' => ' + a0);
this.state = a0;
const stateHistory = this.stateHistory;
stateHistory.update(this.state);
const emit = this.emit;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
const State = RTCConnectionEvent.State;
Reflect.apply(emit, this, [State, a0, {hostname: this.hostname, channelId: this.trueChannelId,
context: this.context}, r5]);
}
function value_36718(a0, a1, a2) { // fn#36718, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:19578, offset: 0x0109383b, size: 66 bytes, params: 4, frame: 13
var value;
var _localMediaSinkWantsManager;
if (a1 === this.context) {
value = environment.__proto__;
if (a1 === MediaEngineContextTypes.DEFAULT) {
_localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.setSimulcastDebugOverride(a0, a2);
}
}
}
}
function value_36719(a0, a1, a2) { // fn#36719, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:19742, offset: 0x0109387d, size: 160 bytes, params: 4, frame: 18
var r2;
var _localMediaSinkWantsManager;
let value = a1 == null;
if (value) {
r2 = value;
} else {
value = environment.__proto__;
value = require(477) /* metro dependency 477: PlatformUtils */;
value = value.isAndroid();
r2 = value;
}
if (!r2) {
value = environment.__proto__;
value = require(477) /* metro dependency 477: PlatformUtils */;
value = value.isIOS();
r2 = value;
}
if (!r2) {
_localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.setVideoSize(a0, a1.width * a1.height);
}
}
const _goLiveQualityManager = this._goLiveQualityManager;
if (_goLiveQualityManager != null) {
_goLiveQualityManager.setVideoSize(a0, a1, a2);
}
}
function value_36721(a0) { // fn#36721, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:20055, offset: 0x0109392c, size: 153 bytes, params: 2, frame: 21
const recordEvent = this.recordEvent;
let value = environment.__proto__;
const SET_NEXT_CHANNEL_ID = env1_37.SET_NEXT_CHANNEL_ID;
Reflect.apply(recordEvent, this, [{c: SET_NEXT_CHANNEL_ID}]);
value = ChannelStore.getChannel(this.channelId);
const value2 = undefined;
this.logger.info('Updating channel: ' + a0 + '(' + (value == null ? value2 : value.type) + ')');
this._nextChannelId = a0;
this.channelIds.add(a0);
return value2;
}
function get_36725() { // fn#36725, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:20576, offset: 0x01093a06, size: 97 bytes, params: 1, frame: 12
var r0;
var value;
if (this.streamServerId == null) {
r0 = this.channelId;
} else if (this.streamChannelId != null) {
r0 = this.streamChannelId;
} else {
value = environment.__proto__;
value = importDefault(24) /* metro dependency 24 */;
value = value(this.streamServerId);
value = value.prev();
value = value.toString();
r0 = value;
}
return r0;
}
function value_36727() { // fn#36727, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:20887, offset: 0x01093a94, size: 576 bytes, params: 1, frame: 19
var r4;
var BrowserTransceiverPaddingRemovalExperiment;
var defaultImport2;
var mode;
var defaultImport3;
const items2 = [];
if (this._recordingEnabled) {
items2.push('connection_log');
}
const mediaEngineStoreBinding = MediaEngineStore;
const supports = mediaEngineStoreBinding.supports;
const FIXED_KEYFRAME_INTERVAL = Features.FIXED_KEYFRAME_INTERVAL;
if (Reflect.apply(supports, mediaEngineStoreBinding, [FIXED_KEYFRAME_INTERVAL])) {
items2.push('fixed_keyframe_interval');
}
const {enabled,
dontEmitVolumeOnlySpeakingEvents} = (ProportionalVadIndicatorExperiment).getConfig({location: '_chooseExperiments'});
if (enabled) {
items2.push('should_analyze_user_voice_volume');
}
if (dontEmitVolumeOnlySpeakingEvents) {
items2.push('dont_emit_volume_only_speaking_events');
}
const isWeb2 = (PlatformUtilsModule).isWeb();
if (isWeb2) {
BrowserTransceiverPaddingRemovalExperiment = (require(12393) /* metro dependency 12393: BrowserTransceiverPaddingRemovalExperiment */).BrowserTransceiverPaddingRemovalExperiment;
r4 = BrowserTransceiverPaddingRemovalExperiment.getConfig({location: 'RTCConnection'}).enabled;
} else {
r4 = isWeb2;
}
if (r4) {
items2.push('browser_transceiver_padding_removal');
}
if (PlatformUtilsModule.isIOS()) {
defaultImport2 = importDefault(12394) /* metro dependency 12394: VideoStabilizationExperiment */;
getConfig = defaultImport2.getConfig;
mode = Reflect.apply(getConfig, defaultImport2, [{location: '_chooseExperiments'}]).mode;
if (mode === 'standard') {
items2.push('ios_video_stabilization_standard');
} else if (mode === 'low_latency') {
items2.push('ios_video_stabilization_low_latency');
}
defaultImport3 = importDefault(12395) /* metro dependency 12395: BroadcastUploadDisposeFixExperiment */;
getConfig = defaultImport3.getConfig;
if (Reflect.apply(getConfig, defaultImport3, [{location: '_chooseExperiments'}]).enabled) {
items2.push('ios_broadcast_upload_dispose_fix');
}
}
if (PlatformUtilsModule.isAndroid() && (require(10678) /* metro dependency 10678: SurfaceDirectRendererExperiment */).isSurfaceDirectRendererExperimentEnabled()) {
items2.push((require(10678) /* metro dependency 10678: SurfaceDirectRendererExperiment */).ANDROID_SURFACE_DIRECT_RENDERER_EXPERIMENT);
}
this._selectedExperiments = items2;
}
function value_36728() { // fn#36728, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:21909, offset: 0x01093cd4, size: 168 bytes, params: 1, frame: 28
var type;
var value;
var channelStoreBinding;
var getChannel;
var channelId;
var logger;
var info;
let endpoint = this.endpoint;
if (endpoint != null) {
value = environment.__proto__;
channelStoreBinding = ChannelStore;
getChannel = channelStoreBinding.getChannel;
channelId = this.channelId;
value = Reflect.apply(getChannel, channelStoreBinding, [channelId]);
type = value?.type;
logger = this.logger;
info = logger.info;
endpoint = this.endpoint;
value = this.getRTCConnectionId();
channelId = this.channelId;
Reflect.apply(info, logger,
['Connecting to RTC server ' + endpoint + ', rtc-connection-id: ' + value + ', channel: ' + channelId + '(' + type + ')']);
}
const setState = this.setState;
value = environment.__proto__;
const CONNECTING = RTCConnectionStates.CONNECTING;
Reflect.apply(setState, this, [CONNECTING]);
}
function value_36729(a0) { // fn#36729, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:22206, offset: 0x01093d7c, size: 125 bytes, params: 2, frame: 13
const env0_1 = a0;
const token = this.token;
this.reconnecting = false;
if (token == null) {
throw new global.Error('RTCConnection._handleConnect(...): Token is missing.');
}
this.logger.info('Connected to RTC server.');
this._fetchAsyncResourcesPromise.finally(_fun36730);
function _fun36730() { // fn#36730, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:22426, offset: 0x01093df9, size: 168 bytes, params: 1, frame: 16
const binding = env0_1;
const identify = binding.identify;
const object = {};
const binding2 = env0_0;
object.serverId = binding2.trueServerId;
object.channelId = binding2.trueChannelId;
const userId = binding2.userId;
object.userId = userId;
object.sessionId = binding2.sessionId;
object.token = token;
const mediaEngineStoreBinding = MediaEngineStore;
object.maxDaveProtocolVersion = mediaEngineStoreBinding.getSupportedSecureFramesProtocolVersion();
const supports = mediaEngineStoreBinding.supports;
const VIDEO = Features.VIDEO;
object.video = Reflect.apply(supports, mediaEngineStoreBinding, [VIDEO]);
object.streamParameters = mediaEngineStoreBinding.getVideoStreamParameters(binding2.context);
Reflect.apply(identify, binding, [object]);
const setState = binding2.setState;
const AUTHENTICATING = RTCConnectionStates.AUTHENTICATING;
Reflect.apply(setState, binding2, [AUTHENTICATING]);
}
}
function value_36731(a0, a1, a2, a3) { // fn#36731, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:22772, offset: 0x01093ea1, size: 2969 bytes, params: 5, frame: 29
var environment;
var r19;
var r9;
var sampleRateMismatchPercent;
var r11;
var defaultImport;
var track;
var VOICE_CONNECTION_SOCKET_FAILURE;
var object;
var _connection;
var _backoff;
var value5;
var warn;
var value7;
var _videoQuality;
var value8;
var cameraDurationStats;
var defaultImport2;
var VIDEO_CALL_ENDED;
var mediaEngineStoreBinding;
var rtcRegionStoreBinding;
var settings;
var channelStoreBinding;
var value20;
var mediaEngineStatsStoreBinding;
var value21;
var value22;
var value23;
var _voiceQuality;
var _voiceDuration;
var deviceFrecencyStoreBinding;
var _systemResponsiveness;
var Math;
var modeOptions;
var value52;
var Promise;
var all;
var defaultImport3;
let value = a1;
const value2 = a2;
const env0_1 = a3;
let logger = this.logger;
const info = logger.info;
let state = this.state;
Reflect.apply(info, logger,
['Disconnected from RTC server, clean: ' + value + ', code: ' + value2 + ', reason: ' + a3 + ', state: ' + state]);
let r1 = value || !this._connecting;
r1 = !r1 ? this._encountered_socket_failure : r1;
if (!r1) {
value = environment.__proto__;
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
VOICE_CONNECTION_SOCKET_FAILURE = AnalyticEvents.VOICE_CONNECTION_SOCKET_FAILURE;
object = {};
copyDataProperties(object, this._getAnalyticsProperties(), value2);
object['hostname'] = this.hostname;
object['connect_count'] = this._connectCount;
object['code'] = value2;
object['reason'] = a3;
Reflect.apply(track, defaultImport, [VOICE_CONNECTION_SOCKET_FAILURE, object]);
this._encountered_socket_failure = true;
}
value = environment.__proto__;
if (RTCConnectionStore.getRemoteDisconnectVoiceChannelId() === this.channelId) {
_connection = this._connection;
if (_connection != null) {
_connection.wasRemoteDisconnected();
}
}
const value4 = a3 !== 'Force Close';
if (value4) {
_backoff = this._backoff;
value5 = _backoff.fail(this.reconnect);
logger = this.logger;
warn = logger.warn;
value7 = (value5 / 1000).toFixed(2);
Reflect.apply(warn, logger,
['Disconnect was not clean! reason=' + a3 + '. Reconnecting in ' + value7 + ' seconds.']);
r19 = value7;
} else {
r19 = value2;
}
state = this.state;
let DISCONNECTED = RTCConnectionStates.DISCONNECTED;
if (state !== DISCONNECTED) {
_videoQuality = this._videoQuality;
value8 = null;
if (value8 != _videoQuality) {
if (this.context === MediaEngineContextTypes.DEFAULT) {
_videoQuality.stop();
if (this._sentVideo) {
_videoQuality.getOutboundStats().forEach(_fun36732);
cameraDurationStats = _videoQuality.getCameraDurationStats();
if (value8 != cameraDurationStats && cameraDurationStats.camera_enabled_duration > 0) {
defaultImport2 = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport2.track;
VIDEO_CALL_ENDED = AnalyticEvents.VIDEO_CALL_ENDED;
object = {};
copyDataProperties(object, cameraDurationStats, r19);
object['media_session_id'] = this.getMediaSessionId();
Reflect.apply(track, defaultImport2, [VIDEO_CALL_ENDED, object]);
}
}
_videoQuality.getInboundParticipants().forEach(_fun36733);
}
}
var env0_4 = this.getMediaSessionId();
MediaEngineStore.getMediaEngine().getCodecSurvey().then(_fun36734).catch(_fun36735);
this._trackMLSFailures({'recovered': false, 'downgraded': false});
rtcRegionStoreBinding = RTCRegionStore;
r9 = rtcRegionStoreBinding.shouldIncludePreferredRegion() ? RTCRegionStore.getPreferredRegion() : value8;
settings = MediaEngineStore.getSettings();
channelStoreBinding = ChannelStore;
value20 = channelStoreBinding.getChannel(this.channelId);
mediaEngineStatsStoreBinding = MediaEngineStatsStore;
value21 = mediaEngineStatsStoreBinding.getConnectionStats(this.getMediaEngineConnectionId());
value22 = undefined;
if (value8 == value21) {
sampleRateMismatchPercent = value22;
} else {
value23 = value21.stats.rtp.outbound.find(function(a0) {
return a0.type === 'audio';
});
sampleRateMismatchPercent = value8 == value23 ? value22 : value23.sampleRateMismatchPercent;
}
object = {};
copyDataProperties(object, this._getAnalyticsProperties(), r19);
object['hostname'] = this.hostname;
object['port'] = this.port;
object['protocol'] = this.protocol;
object['reconnect'] = value4;
object['reason'] = a3;
object['duration'] = this.getDuration();
rtcConnectionStoreBinding = RTCConnectionStore;
copyDataProperties(object, rtcConnectionStoreBinding.getUserVoiceSettingsStats(this.context), r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getMosStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getPacketStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getBytesStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getBufferStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getNetworkStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getSystemResourceStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getFrameOpStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getDurationStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getTransportStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getE2EEStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getAudioDeviceStats();
copyDataProperties(object, r11, r19);
_voiceQuality = this._voiceQuality;
r11 = value8 == _voiceQuality ? value22 : _voiceQuality.getAudioLevelStats();
copyDataProperties(object, r11, r19);
_voiceDuration = this._voiceDuration;
r11 = value8 == _voiceDuration ? value22 : _voiceDuration.getDurationStats();
copyDataProperties(object, r11, r19);
deviceFrecencyStoreBinding = DeviceFrecencyStore;
copyDataProperties(object, deviceFrecencyStoreBinding.getUsageStats(), r19);
copyDataProperties(object, this.getAudioDeviceStates(), r19);
_systemResponsiveness = this._systemResponsiveness;
r11 = value8 == _systemResponsiveness ? value22 : _systemResponsiveness.getPttQueueLatencyStats();
copyDataProperties(object, r11, r19);
object['num_noise_cancellation_changes'] = this._numNoiseCancellationChanges;
object['media_session_id'] = this.getMediaSessionId();
object['channel_bitrate'] = value8 != value20 ? value20.bitrate : value8;
object['cloudflare_best_region'] = r9;
object['connect_count'] = this._connectCount;
Math = global.Math;
object['ping_average'] = Math.round(this.getAveragePing());
object['ping_bad_count'] = this._pingBadCount;
object['ping_timeout'] = this._pingTimeouts.length;
object['input_detected'] = this._inputDetected;
object['no_input_detected_notice'] = MediaEngineStore.getNoInputDetectedNotice();
object['audio_input_mode'] = settings.mode;
modeOptions = settings.modeOptions;
object['automatic_audio_input_sensitivity_enabled'] = modeOptions.autoThreshold;
modeOptions = settings.modeOptions;
object['audio_input_sensitivity'] = modeOptions.threshold;
object['echo_cancellation_enabled'] = settings.echoCancellation;
object['sidechain_compression_enabled'] = settings.sidechainCompression;
object['noise_suppression_enabled'] = settings.noiseSuppression;
object['noise_cancellation_enabled'] = settings.noiseCancellation;
object['noise_canceller_error'] = this._noiseCancellationError;
object['automatic_gain_control_enabled'] = settings.automaticGainControl;
object['voice_output_volume'] = settings.outputVolume;
object['voice_input_volume'] = settings.inputVolume;
object['encryption_mode'] = this._encryptionMode;
object['channel_count'] = this.channelIds.size;
object['device_performance_class'] = (importDefault(5252) /* metro dependency 5252: getMediaPerformanceClassAndroid */)();
r9 = value8 != this._connection ? value8 == this._connection ? value22 : this._connection.getNumFastUdpReconnects() : value8;
object['num_fast_udp_reconnects'] = r9;
object['parent_media_session_id'] = this.parentMediaSessionId;
mediaEngineStoreBinding = MediaEngineStore;
object['audio_subsystem'] = mediaEngineStoreBinding.getMediaEngine().getAudioSubsystem();
object['audio_layer'] = mediaEngineStoreBinding.getMediaEngine().getAudioLayer();
object['automatic_audio_subsystem'] = settings.automaticAudioSubsystem;
object['participant_type'] = this.getVoiceParticipantType();
object['audio_capture_sample_rate_mismatch_percent'] = sampleRateMismatchPercent;
object['krisp_sdk_version'] = mediaEngineStoreBinding.getState().krispVersion;
object['secure_frames_max_concurrent_transitions'] = this._secureFramesMaxConcurrentTransitions;
object['secure_frames_transition_prepare_count'] = this._secureFramesTransitionPrepareCount;
object['secure_frames_transition_execute_count'] = this._secureFramesTransitionExecuteCount;
modeOptions = settings.modeOptions;
object['vad_use_advanced_voice_activity'] = modeOptions.vadUseKrisp;
object['soundshare_experimental'] = mediaEngineStoreBinding.getExperimentalSoundshare();
object['join_voice_id'] = this.joinVoiceId;
object['bypass_system_input_processing'] = settings.bypassSystemInputProcessing;
object['system_microphone_mode'] = mediaEngineStoreBinding.getSystemMicrophoneMode();
object['output_audio_route_type'] = AudioRouteStoreNative.getCurrentRouteType();
value52 = _fun36737();
Promise = global.Promise;
all = Promise.all;
object = [value52()];
defaultImport3 = importDefault(12396) /* metro dependency 12396: KrispUtils */;
object[1] = defaultImport3.getKrispModel();
object[2] = mediaEngineStoreBinding.getKrispEnableStats() ? MediaEngineStore.getMediaEngine().getNoiseCancellationStats() : global.Promise.resolve(value8);
Reflect.apply(all, Promise, [object]).then(_fun36741);
this._trackRemainingSecureFrameTransitions();
}
this._pingTimeouts = [];
this._pings = [];
this._connectCompletedTime = 0;
this._pingBadCount = 0;
this._inputDetected = false;
this._mediaSessionId = null;
_voiceQuality = this._voiceQuality;
if (_voiceQuality != null) {
_voiceQuality.stop();
}
this._voiceQuality = null;
global.clearInterval(this._voiceQualityPeriodicStatsInterval);
this._voiceQualityPeriodicStatsInterval = null;
this._voiceQualityPeriodicStatsSequenceId = 0;
this._noiseCancellationError = 0;
this._numNoiseCancellationChanges = 0;
_voiceDuration = this._voiceDuration;
if (_voiceDuration != null) {
_voiceDuration.stop();
}
this._voiceDuration = null;
_videoQuality = this._videoQuality;
if (_videoQuality != null) {
_videoQuality.stop();
}
this._videoQuality = null;
this._videoHealthManager = null;
const _localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.reset();
}
this._secureFramesState = null;
const Set = global.Set;
const userId = this.userId;
object = [userId];
const value58 = Object.create(Set.prototype, {constructor: {value: Set}});
const set = new Set();
this._userIds = set instanceof Object ? set : value58;
this._secureFramesRosterMap.clear();
this._secureFramesTransitionStates.clear();
this._secureFramesNextTransitionState = undefined;
this._secureFramesMaxConcurrentTransitions = 0;
this._secureFramesTransitionPrepareCount = 0;
this._secureFramesTransitionExecuteCount = 0;
_connection = this._connection;
if (_connection != null) {
_connection = this._connection;
this._connection = null;
this._hasCodecs = false;
_connection.destroy(this.reconnecting || value4);
}
const setState = this.setState;
DISCONNECTED = RTCConnectionStates.DISCONNECTED;
Reflect.apply(setState, this, [DISCONNECTED, {willReconnect: value4}]);
function _fun36732(a0) { // fn#36732, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:23650, offset: 0x01094a3a, size: 356 bytes, params: 2, frame: 24
var defaultImport;
var track;
var VIDEO_STREAM_ENDED;
var object;
var binding;
var userId;
var rtcRegionStoreBinding;
var getRegion;
var hostname;
var _videoQualityBinding;
var getCodecUsageStats;
const num_frames = a0.num_frames;
let value = 0;
if ((num_frames ?? value) > value) {
value = environment.__proto__.__proto__;
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
VIDEO_STREAM_ENDED = AnalyticEvents.VIDEO_STREAM_ENDED;
object = {};
binding = env0_0;
copyDataProperties(object, binding._getAnalyticsProperties(), undefined);
object['app_hardware_acceleration_enabled'] = (importDefault(4488) /* metro dependency 4488: CrossPlatformNativeUtilsNative */).getAppHardwareAccelerationEnabled();
object['media_session_id'] = binding.getMediaSessionId();
userId = binding.userId;
object['sender_user_id'] = userId;
object['reason'] = importAll;
object['participant_type'] = 'sender';
rtcRegionStoreBinding = RTCRegionStore;
getRegion = rtcRegionStoreBinding.getRegion;
hostname = binding.hostname;
object['guild_region'] = Reflect.apply(getRegion, rtcRegionStoreBinding, [hostname]);
hostname = binding.hostname;
object['hostname'] = hostname;
value = MediaEngineStore.getHardwareEncoding();
object['hardware_enabled'] = value;
copyDataProperties(object, a0, rtcRegionStoreBinding);
_videoQualityBinding = _videoQuality;
copyDataProperties(object, _videoQualityBinding.getNetworkStats(), rtcRegionStoreBinding);
_videoQualityBinding = _videoQuality;
getCodecUsageStats = _videoQualityBinding.getCodecUsageStats;
userId = binding.userId;
copyDataProperties(object, Reflect.apply(getCodecUsageStats, _videoQualityBinding, ['sender', userId]),
rtcRegionStoreBinding);
value = (importDefault(5252) /* metro dependency 5252: getMediaPerformanceClassAndroid */)();
object['device_performance_class'] = value;
Reflect.apply(track, defaultImport, [VIDEO_STREAM_ENDED, object]);
}
}
function _fun36733(a0) { // fn#36733, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:24356, offset: 0x01094b9e, size: 343 bytes, params: 2, frame: 23
var value5;
var defaultImport;
var track;
var VIDEO_STREAM_ENDED;
var object;
var binding;
var rtcRegionStoreBinding;
var getRegion;
var hostname;
const inboundStats = _videoQuality.getInboundStats(a0);
const value3 = undefined;
const num_frames = inboundStats == null ? value3 : inboundStats.num_frames;
const value4 = 0;
if ((num_frames ?? value4) > value4) {
value5 = environment.__proto__.__proto__;
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
VIDEO_STREAM_ENDED = AnalyticEvents.VIDEO_STREAM_ENDED;
object = {};
binding = env0_0;
copyDataProperties(object, binding._getAnalyticsProperties(), undefined);
object['app_hardware_acceleration_enabled'] = (importDefault(4488) /* metro dependency 4488: CrossPlatformNativeUtilsNative */).getAppHardwareAccelerationEnabled();
object['media_session_id'] = binding.getMediaSessionId();
object['sender_user_id'] = a0;
object['reason'] = importAll;
object['participant_type'] = 'receiver';
rtcRegionStoreBinding = RTCRegionStore;
getRegion = rtcRegionStoreBinding.getRegion;
hostname = binding.hostname;
object['guild_region'] = Reflect.apply(getRegion, rtcRegionStoreBinding, [hostname]);
hostname = binding.hostname;
object['hostname'] = hostname;
object['hardware_enabled'] = MediaEngineStore.getHardwareEncoding();
copyDataProperties(object, inboundStats, rtcRegionStoreBinding);
_videoQualityBinding = _videoQuality;
copyDataProperties(object, _videoQualityBinding.getNetworkStats(), rtcRegionStoreBinding);
_videoQualityBinding = _videoQuality;
copyDataProperties(object, _videoQualityBinding.getCodecUsageStats('receiver', a0), rtcRegionStoreBinding);
Reflect.apply(track, defaultImport, [VIDEO_STREAM_ENDED, object]);
}
return value3;
}
function _fun36734(a0) { // fn#36734, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:24930, offset: 0x01094cf5, size: 186 bytes, params: 2, frame: 18
const JSON = global.JSON;
const value = JSON.parse(a0);
if (value == null) {
throw new global.Error('codec survey is not available');
}
if (value.available_video_encoders == null) {
throw new global.Error('codec survey is not available');
}
if (value.available_video_decoders == null) {
throw new global.Error('codec survey is not available');
}
const defaultImport = AnalyticsUtils;
const track = defaultImport.track;
const VOICE_CODEC_DETECTED = AnalyticEvents.VOICE_CODEC_DETECTED;
const object = {};
copyDataProperties(object, value, undefined);
object['rtc_connection_id'] = env0_0.getRTCConnectionId();
object['media_session_id'] = env0_4;
Reflect.apply(track, defaultImport, [VOICE_CODEC_DETECTED, object]);
}
function _fun36735(a0) { // fn#36735, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:25201, offset: 0x01094daf, size: 30 bytes, params: 2, frame: 11
env0_0.logger.warn(a0);
}
function _fun36737() { // fn#36737, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:28685, offset: 0x01094ddf, size: 32 bytes, params: 1, frame: 12
const env0_0 = env2_4(_fun36739);
return _fun36740;
function* _fun36739() { // fn#36739, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:28705, offset: 0x01094e08, size: 79 bytes, params: 1, frame: 12
if (false) {
return undefined;
}
value = environment.__proto__.__proto__;
yield env2_2._systemResources?.getBatteryLevelStats();
value = undefined;
if (false) {
return value;
}
return value ?? ({batteryUsageRounded: null});
}
function _fun36740() { // fn#36740, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:28848, offset: 0x00c3945f, size: 30 bytes, params: 1, frame: 13
return env0_0.apply(this, arguments);
}
}
function _fun36741(a0) { // fn#36741, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:29037, offset: 0x01094e57, size: 351 bytes, params: 2, frame: 21
var r1;
var r2;
var r42;
var batteryUsageRounded;
var item3;
var value3;
var item4;
var value4;
var error;
const iterator = a0[Symbol.iterator]();
const iterator2 = iterator.next;
const value = undefined;
let item2 = Reflect.apply(iterator2, iterator, []);
let item = item2.value;
item2 = item2.done ? undefined : iterator;
const value2 = item2 === value;
let r4 = value2 ? value : item;
try {
batteryUsageRounded = r4.batteryUsageRounded;
} catch (error) {
if (!value2) {
try {
item2.return();
} catch {
}
}
throw error;
}
if (value2) {
r1 = item2;
r2 = value2;
r4 = value;
} else {
item3 = Reflect.apply(iterator2, item2, []);
item = item3.value;
item3 = item3.done ? undefined : item2;
value3 = item3 === value;
if (value3) {
r1 = item3;
r2 = value3;
r4 = value;
} else {
r1 = item3;
r2 = value3;
r4 = item;
}
}
if (r2) {
r42 = value;
} else {
item4 = Reflect.apply(iterator2, r1, []);
item = item4.value;
item4 = item4.done ? undefined : r1;
value4 = item4 === value;
if (value4) {
r1 = item4;
r2 = value4;
r42 = value;
} else {
r1 = item4;
r2 = value4;
r42 = item;
}
}
if (!r2) {
r1.return();
}
const defaultImport = AnalyticsUtils;
const track = defaultImport.track;
const VOICE_DISCONNECT = AnalyticEvents.VOICE_DISCONNECT;
const object = {};
copyDataProperties(object, ClassCallCheck, environment);
object['battery_usage'] = batteryUsageRounded;
object['krisp_nc_model'] = r4;
object['duration_low_noise_detected_ms'] = r42 == null ? value : r42.lowNoiseMs;
object['duration_medium_noise_detected_ms'] = r42 == null ? value : r42.mediumNoiseMs;
object['duration_high_noise_detected_ms'] = r42 == null ? value : r42.highNoiseMs;
object['duration_noise_cancellation_voice_detected_ms'] = r42 == null ? value : r42.talkTimeMs;
Reflect.apply(track, defaultImport, [VOICE_DISCONNECT, object]);
return value;
}
}
function value_36743(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#36743, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:30743, offset: 0x01094fe9, size: 1753 bytes, params: 8, frame: 30
let value = dependencyMap;
const env0_2 = require;
const setState = this.setState;
const RTC_CONNECTING = RTCConnectionStates.RTC_CONNECTING;
Reflect.apply(setState, this, [RTC_CONNECTING]);
this.port = importDefault;
const value3 = null;
this._chooseExperiments(value3 != value ? value : []);
value = undefined;
const ProcessBoostExperiment = require(dependencyMap[51]).ProcessBoostExperiment;
const {processPriority,
threadPriorityConfiguration} = ProcessBoostExperiment.getConfig({location: 'media_engine_connect'});
if (exports.length === 0) {
exports.push({'type': null, 'rid': '100', 'ssrc': null, 'rtxSsrc': null, 'quality': 100, 'active': false,
type: MediaTypes.VIDEO, ssrc: module + 1, rtxSsrc: module + 2});
}
const mediaEngine = MediaEngineStore.getMediaEngine();
const persistentCodesEnabled = SecureFramesPersistedStore.getPersistentCodesEnabled();
const staticAuthSessionId = AuthenticationStore.getStaticAuthSessionId();
const r15 = value3 != staticAuthSessionId ? staticAuthSessionId : value;
const moduleValue = require(dependencyMap[22]);
const value8 = moduleValue.now();
const connect = mediaEngine.connect;
let context = this.context;
const userId = this.userId;
object = {ssrc: module, address: require, port: importDefault, modes: importAll};
object.experiments = this._selectedExperiments;
object.streamParameters = exports;
object.qosEnabled = MediaEngineStore.getQoS();
object.signingKeyId = persistentCodesEnabled ? r15 : value;
object.processPriority = processPriority;
object.threadPriorityConfiguration = threadPriorityConfiguration;
const getExtraConnectionOptions = this.getExtraConnectionOptions;
copyDataProperties(object, Reflect.apply(getExtraConnectionOptions, this, []), undefined);
const value9 = Reflect.apply(connect, mediaEngine, [context, userId, object]);
const moduleValue2 = require(dependencyMap[22]);
this._mediaEngineConnectDuration = moduleValue2.now() - value8;
let r3 = require(dependencyMap[35]).isWeb() && !BROWSER_SUPPORTS_UNIFIED_PLAN;
if (r3) {
importDefault(dependencyMap[25]).captureMessage('Browser does not support Unified Plan');
}
const setUseElectronVideo = value9.setUseElectronVideo;
let supports = mediaEngine.supports;
const ELECTRON_VIDEO = Features.ELECTRON_VIDEO;
Reflect.apply(setUseElectronVideo, value9, [Reflect.apply(supports, mediaEngine, [ELECTRON_VIDEO])]);
r3 = value3 != this.guildId ? GuildStore.getGuild(this.guildId) : value3;
const premiumTier = value3 == r3 ? value : r3.premiumTier;
let TIER_1 = BoostedGuildTiers.TIER_1;
const result = premiumTier === TIER_1;
const currentUser = UserStore.getCurrentUser();
const premiumType = value3 == currentUser ? value : currentUser.premiumType;
TIER_1 = PremiumTypes.TIER_1;
r3 = premiumType === TIER_1 || premiumType === PremiumTypes.TIER_2;
value9.setCalcMaxBitrateFunc(_fun36744);
mediaEngineStoreBinding = MediaEngineStore;
supports = mediaEngineStoreBinding.supports;
const IMAGE_QUALITY_MEASUREMENT = Features.IMAGE_QUALITY_MEASUREMENT;
if (Reflect.apply(supports, mediaEngineStoreBinding, [IMAGE_QUALITY_MEASUREMENT])) {
value9.setVideoQualityMeasurement('imageQualityWebrtcPsnrDb:5000,imageQualityVmaf_v061:5000,hwdec');
}
const setVideoEncoderExperiments = value9.setVideoEncoderExperiments;
mediaEngineStoreBinding = MediaEngineStore;
const getVideoEncoderExperiments = mediaEngineStoreBinding.getVideoEncoderExperiments;
context = this.context;
const getVoiceParticipantType = this.getVoiceParticipantType;
Reflect.apply(setVideoEncoderExperiments, value9, [Reflect.apply(getVideoEncoderExperiments,
mediaEngineStoreBinding, [context, Reflect.apply(getVoiceParticipantType, this, [])])]);
let on = value9.on;
const BaseConnectionEvent = require(dependencyMap[54]).BaseConnectionEvent;
const Speaking = BaseConnectionEvent.Speaking;
Reflect.apply(on, value9, [Speaking, _fun36745]);
on = value9.on;
const NativeMuteChanged = BaseConnectionEvent.NativeMuteChanged;
Reflect.apply(on, value9, [NativeMuteChanged, _fun36746]);
on = value9.on;
const Video = BaseConnectionEvent.Video;
Reflect.apply(on, value9, [Video, _fun36747]);
on = value9.on;
const FirstFrame = BaseConnectionEvent.FirstFrame;
Reflect.apply(on, value9, [FirstFrame, _fun36749]);
on = value9.on;
const Silence = BaseConnectionEvent.Silence;
Reflect.apply(on, value9, [Silence, _fun36750]);
on = value9.on;
const Connected = BaseConnectionEvent.Connected;
Reflect.apply(on, value9, [Connected, _fun36751]);
on = value9.on;
const VideoEncoderFallback = BaseConnectionEvent.VideoEncoderFallback;
Reflect.apply(on, value9, [VideoEncoderFallback, _fun36754]);
on = value9.on;
const VideoDecoderFallback = BaseConnectionEvent.VideoDecoderFallback;
Reflect.apply(on, value9, [VideoDecoderFallback, _fun36757]);
on = value9.on;
const Error = BaseConnectionEvent.Error;
Reflect.apply(on, value9, [Error, _fun36760]);
on = value9.on;
const ConnectionStateChange = BaseConnectionEvent.ConnectionStateChange;
Reflect.apply(on, value9, [ConnectionStateChange, _fun36761]);
on = value9.on;
const SecureFramesUpdate = BaseConnectionEvent.SecureFramesUpdate;
Reflect.apply(on, value9, [SecureFramesUpdate, _fun36762]);
on = value9.on;
const Ping = BaseConnectionEvent.Ping;
const _handlePing = this._handlePing;
Reflect.apply(on, value9, [Ping, _handlePing.bind(this)]);
on = value9.on;
const PingTimeout = BaseConnectionEvent.PingTimeout;
const _handlePingTimeout = this._handlePingTimeout;
Reflect.apply(on, value9, [PingTimeout, _handlePingTimeout.bind(this)]);
on = value9.on;
const OutboundLossRate = BaseConnectionEvent.OutboundLossRate;
const _handleOutboundLossRate = this._handleOutboundLossRate;
Reflect.apply(on, value9, [OutboundLossRate, _handleOutboundLossRate.bind(this)]);
on = value9.on;
const LocalVideoDisabled = BaseConnectionEvent.LocalVideoDisabled;
const _handleLocalVideoDisabled = this._handleLocalVideoDisabled;
Reflect.apply(on, value9, [LocalVideoDisabled, _handleLocalVideoDisabled.bind(this)]);
on = value9.on;
const Stats = BaseConnectionEvent.Stats;
const defaultImport2 = importDefault(dependencyMap[60]);
Reflect.apply(on, value9, [Stats, defaultImport2.create()]);
on = value9.on;
const RemoteStreamsReady = BaseConnectionEvent.RemoteStreamsReady;
const _handleRemoteStreamsReady = this._handleRemoteStreamsReady;
Reflect.apply(on, value9, [RemoteStreamsReady, _handleRemoteStreamsReady.bind(this)]);
on = value9.on;
const UsersMerged = BaseConnectionEvent.UsersMerged;
const handleUsersMerged = this.handleUsersMerged;
Reflect.apply(on, value9, [UsersMerged, handleUsersMerged.bind(this)]);
on = value9.on;
const NoiseCancellationError = BaseConnectionEvent.NoiseCancellationError;
Reflect.apply(on, value9, [NoiseCancellationError, _fun36763]);
on = value9.on;
const MLSFailure = BaseConnectionEvent.MLSFailure;
const _handleMLSFailure = this._handleMLSFailure;
Reflect.apply(on, value9, [MLSFailure, _handleMLSFailure.bind(this)]);
value9.setRemoteVideoSinkWants(this._remoteVideoSinkWants);
this._connection = value9;
this._hasCodecs = false;
this._mediaEngineConnectionId = value9.mediaEngineConnectionId;
return value;
function _fun36744({height, framerate, videoCodec}) { // fn#36744, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:31861, offset: 0x010956c2, size: 227 bytes, params: 2, frame: 18
var r0;
var ServerLadderExperiment;
var value3;
const AV1StreamBitrateReductionExperiment = (AV1BitrateTuningExperimentModule).AV1StreamBitrateReductionExperiment;
const r4 = height > 0 && height <= 720;
value = framerate <= 30;
if (result) {
if (CreateClass) {
value3 = null;
r0 = videoCodec !== 'AV1' ? value3 : height !== 0 ? r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3 : framerate < 10 || r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3;
} else if (r4) {
if (value) {
value3 = null;
r0 = videoCodec !== 'AV1' ? value3 : height !== 0 ? r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3 : framerate < 10 || r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3;
} else {
value = environment.__proto__.__proto__;
ServerLadderExperiment = (require(12399) /* metro dependency 12399: ServerLadderExperiment */).ServerLadderExperiment;
r0 = ServerLadderExperiment.getConfig({location: 'RTCConnection'}).bitrate;
}
} else {
value3 = null;
r0 = videoCodec !== 'AV1' ? value3 : height !== 0 ? r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3 : framerate < 10 || r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3;
}
} else {
value3 = null;
r0 = videoCodec !== 'AV1' ? value3 : height !== 0 ? r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3 : framerate < 10 || r4 && value ? AV1StreamBitrateReductionExperiment.getConfig({location: 'RTCConnection'}).bitrate : value3;
}
return r0;
}
function _fun36745(a0, a1, a2) { // fn#36745, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:32442, offset: 0x010957a5, size: 99 bytes, params: 4, frame: 17
const userId = env0_0.userId;
if (userId === a0) {
env0_0.sendSpeaking(a1, a2);
}
const binding = env0_0;
const emit = binding.emit;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
const Speaking = RTCConnectionEvent.Speaking;
Reflect.apply(emit, binding, [Speaking, a0, a1]);
}
function _fun36746(a0) { // fn#36746, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:32602, offset: 0x01095808, size: 69 bytes, params: 2, frame: 11
const context = env0_0.context;
const value = environment.__proto__.__proto__;
const DEFAULT = MediaEngineContextTypes.DEFAULT;
if (context === DEFAULT) {
(importDefault(12401) /* metro dependency 12401: NativeMuteManagerNative */).nativeMuteChanged(a0);
}
}
function _fun36747(a0, a1, a2, a3, a4, a5) { // fn#36747, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:32707, offset: 0x0109584d, size: 194 bytes, params: 7, frame: 25
const value = a2;
const value2 = a3;
const value3 = a4;
const env0_0 = a0;
let binding = env0_0;
const value5 = 0;
binding._handleVideoStreamId({userId: a0, streamId: a1, audioSsrc: value, videoSsrc: value2 ?? value5,
rtxSsrc: value3, videoStreamParameters: a5});
const userId = env0_0.userId;
if (userId === a0) {
binding = env0_0;
binding.sendVideo(value ?? value5, value2 ?? value5, value3 ?? value5, a5);
if (a5 != null) {
a5.forEach(_fun36748);
}
}
function _fun36748(a0) { // fn#36748, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:32932, offset: 0x0109590f, size: 111 bytes, params: 2, frame: 23
var value;
var binding;
var emit;
if (a0.quality === 100) {
value = environment.__proto__;
binding = env1_0;
emit = binding.emit;
value = environment.__proto__.__proto__.__proto__;
Reflect.apply(emit, binding,
[(require(4405) /* metro dependency 4405: RTCConnectionEvent */).RTCConnectionEvent.VideoSourceQualityChanged,
binding.guildId, binding.channelId, env0_0, a0.maxResolution, a0.maxFrameRate, binding.context]);
}
}
}
function _fun36749(a0, a1, a2) { // fn#36749, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:33147, offset: 0x0109597e, size: 217 bytes, params: 4, frame: 23
var binding;
var emit;
var value2;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
if (env0_0._localMediaSinkWantsManager != null) {
binding = env0_0;
binding._localMediaSinkWantsManager.setFirstFrameReceived(a1);
emit = binding.emit;
value2 = environment.__proto__.__proto__;
Reflect.apply(emit, binding, [RTCConnectionEvent.Video, binding.guildId, binding.channelId, a0, a2,
binding.streamServerId]);
}
if (env0_0._goLiveQualityManager != null) {
binding = env0_0;
emit = binding.emit;
value = environment.__proto__.__proto__;
Reflect.apply(emit, binding, [RTCConnectionEvent.Video, binding.guildId, binding.channelId, a0, a2,
binding.streamServerId]);
}
}
function _fun36750(a0) { // fn#36750, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:33534, offset: 0x01095a57, size: 32 bytes, params: 2, frame: 3
const binding = env0_0;
binding._inputDetected = binding._inputDetected || !a0;
}
function _fun36751(a0, a1) { // fn#36751, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:33631, offset: 0x01095a77, size: 817 bytes, params: 3, frame: 25
var environment;
var value2;
var defaultImport;
var binding3;
var prototype;
var value3;
var defaultImport5;
var _voiceQuality;
var start;
var defaultImport2;
var binding4;
var value6;
var defaultImport22;
var defaultImport3;
var value9;
var defaultImport32;
var defaultImport4;
var userId;
var binding5;
var value12;
var defaultImport42;
var _voiceDuration;
var selfMute;
var binding7;
var binding8;
var once;
const SocketEvent = (RTCControlSocketModule).SocketEvent;
var SDP;
var _handleSDP;
var selectProtocol;
var _selectedExperiments;
var binding9;
var rTCConnectionId;
let binding = env0_0;
let logger = binding.logger;
let info = logger.info;
Reflect.apply(info, logger, ['RTC connected to media server: ' + require + ':' + importDefault]);
if (env0_1 === binding._socket) {
binding = env0_0;
value2 = environment.__proto__.__proto__;
defaultImport = importDefault(12402) /* metro dependency 12402: VoiceQuality */;
binding3 = Module00005;
prototype = defaultImport.prototype;
value3 = Object.create(prototype, {constructor: {value: defaultImport}});
defaultImport5 = new defaultImport();
binding._voiceQuality = defaultImport5 instanceof Object ? defaultImport5 : value3;
_voiceQuality = binding._voiceQuality;
_voiceQuality.start();
_voiceQuality = binding._voiceQuality;
_voiceQuality.on((require(12402) /* metro dependency 12402: VoiceQuality */).VoiceQualityEvent.InputDeviceSampleRateChanged,
_fun36752);
binding._voiceQualityPeriodicStatsSequenceId = 0;
binding._voiceQualityPeriodicStatsInterval = global.setInterval(binding._handleVoiceQualityPeriodicsStats,
300000);
defaultImport2 = importDefault(12404) /* metro dependency 12404: SystemResponsiveness */;
binding4 = Module00005;
prototype = defaultImport2.prototype;
value6 = Object.create(prototype, {constructor: {value: defaultImport2}});
defaultImport22 = new defaultImport2();
binding._systemResponsiveness = defaultImport22 instanceof Object ? defaultImport22 : value6;
binding._systemResponsiveness.start();
defaultImport3 = importDefault(7137) /* metro dependency 7137: SystemResources */;
prototype = defaultImport3.prototype;
value9 = Object.create(prototype, {constructor: {value: defaultImport3}});
defaultImport32 = new defaultImport3();
binding._systemResources = defaultImport32 instanceof Object ? defaultImport32 : value9;
binding._systemResources.setLastBattery();
binding._noiseCancellationError = 0;
defaultImport4 = importDefault(12405) /* metro dependency 12405: VoiceDuration */;
userId = binding.userId;
binding5 = Module00005;
prototype = defaultImport4.prototype;
value12 = Object.create(prototype, {constructor: {value: defaultImport4}});
defaultImport42 = new defaultImport4();
binding._voiceDuration = defaultImport42 instanceof Object ? defaultImport42 : value12;
_voiceDuration = binding._voiceDuration;
start = _voiceDuration.start;
selfMute = Module00005.getSelfMute();
binding7 = Module00005;
Reflect.apply(start, _voiceDuration, [selfMute, binding7.getSelfDeaf()]);
binding.protocol = a0;
if (a0 === 'udp') {
binding = env0_0;
logger = binding.logger;
info = logger.info;
_selectedExperiments = binding._selectedExperiments;
Reflect.apply(info, logger, ['Sending UDP info to RTC server.', a1, _selectedExperiments]);
binding9 = env0_1;
binding9.once(SocketEvent.Encryption, _fun36753);
selectProtocol = binding9.selectProtocol;
rTCConnectionId = binding.getRTCConnectionId();
_selectedExperiments = binding._selectedExperiments;
Reflect.apply(selectProtocol, binding9, [a0, rTCConnectionId, a1, _selectedExperiments]);
env0_0._backoff.succeed();
return undefined;
}
if (a0 === 'webrtc') {
binding = env0_0;
binding.logger.info('Sending local SDP to RTC server.');
binding8 = env0_1;
once = binding8.once;
SDP = SocketEvent.SDP;
_handleSDP = binding._handleSDP;
Reflect.apply(once, binding8, [SDP, _handleSDP.bind(binding)]);
binding8.selectProtocol(a0, binding.getRTCConnectionId(), a1);
env0_0._backoff.succeed();
return undefined;
}
logger = env0_0.logger;
logger.error('Unable to determine protocol.');
} else {
env0_0.logger.warn('Socket mismatch, disconnecting');
}
function _fun36752(a0) { // fn#36752, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:33871, offset: 0x01095da8, size: 57 bytes, params: 2, frame: 13
const value = environment.__proto__.__proto__.__proto__;
(Dispatcher).dispatch({type: 'AUDIO_INPUT_DEVICE_SAMPLE_RATE_CHANGED',
sampleRate: a0});
}
function _fun36753(a0, a1) { // fn#36753, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:34541, offset: 0x01095de1, size: 59 bytes, params: 3, frame: 14
if (env1_4 === env1_0._connection) {
env1_4.setEncryption(a0, a1);
env1_0._encryptionMode = a0;
}
}
}
function _fun36754(a0) { // fn#36754, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:35092, offset: 0x01095e1c, size: 123 bytes, params: 2, frame: 15
let value = a0.filter(function(a0) {
return a0.type === 'video';
});
value = value.map(function(a0) {
return a0.name;
});
value = value.join(',');
env0_0.logger.info('The originally selected video encoder is not working, fallback to the other available encoders: ' + value);
env0_1.updateSession({codecs: a0});
}
function _fun36757(a0) { // fn#36757, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:35370, offset: 0x01095ea9, size: 229 bytes, params: 2, frame: 16
var environment;
var binding;
let value = environment.__proto__.__proto__;
const channel = ChannelStore.getChannel(env0_0.channelId);
const value4 = undefined;
const type = channel == null ? value4 : channel.type;
const GUILD_STAGE_VOICE = ChannelTypes.GUILD_STAGE_VOICE;
if (type === GUILD_STAGE_VOICE) {
if (!env0_0._videoDecoderFallbackSuppressed) {
binding = env0_0;
binding.logger.info('Suppressing video decoder fallback: stage channel');
binding._videoDecoderFallbackSuppressed = true;
}
} else {
value = a0.filter(function(a0) {
return a0.type === 'video';
});
value = value.map(_fun36759);
value = value.join(',');
env0_0.logger.info('The originally selected video decoder is not working, fallback to the other available decoders: ' + value);
env0_1.updateSession({codecs: a0});
}
return value4;
}
function _fun36760(a0) { // fn#36760, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:35873, offset: 0x01095f8e, size: 272 bytes, params: 2, frame: 18
var r6;
var value2;
var track;
var VOICE_CONNECTION_FAILURE;
var object;
var value;
let binding = env0_1;
if (binding === env0_0._socket) {
value2 = environment.__proto__.__proto__;
r6 = RTCRegionStore.shouldIncludePreferredRegion() ? RTCRegionStore.getPreferredRegion() : null;
binding = env0_0;
binding.logger.error('Error occurred while connecting to RTC server: ' + a0);
value = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = value.track;
VOICE_CONNECTION_FAILURE = AnalyticEvents.VOICE_CONNECTION_FAILURE;
object = {};
copyDataProperties(object, binding._getAnalyticsProperties(), undefined);
object['hostname'] = binding.hostname;
object['port'] = binding.port;
object['protocol'] = binding.protocol;
object['error'] = a0;
object['cloudflare_best_region'] = r6;
object['connect_count'] = binding._connectCount;
object['join_voice_id'] = binding.joinVoiceId;
Reflect.apply(track, value, [VOICE_CONNECTION_FAILURE, object]);
}
}
function _fun36761(a0) { // fn#36761, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:36337, offset: 0x0109609e, size: 699 bytes, params: 2, frame: 19
var value2;
var _backoff;
var stateHistory;
var _localMediaSinkWantsManager;
var _goLiveQualityManager;
let binding = env0_0;
const logger = binding.logger;
const info = logger.info;
let state = binding.state;
Reflect.apply(info, logger, ['RTC media connection state change: ' + state + ' => ' + a0]);
if (env0_1 === binding._socket) {
state = env0_0.state;
value2 = environment.__proto__.__proto__;
if (ConnectionStates.DISCONNECTED === a0) {
binding = env0_0;
binding.setState(RTCConnectionStates.RTC_DISCONNECTED);
} else if (ConnectionStates.CONNECTING === a0) {
binding = env0_0;
binding.setState(RTCConnectionStates.RTC_CONNECTING);
} else if (ConnectionStates.CONNECTED === a0) {
binding = env0_0;
binding.setState(RTCConnectionStates.RTC_CONNECTED);
} else if (ConnectionStates.NO_ROUTE === a0) {
binding = env0_0;
binding.setState(RTCConnectionStates.NO_ROUTE);
} else if (ConnectionStates.ICE_CHECKING === a0) {
binding = env0_0;
binding.setState(RTCConnectionStates.ICE_CHECKING);
} else if (ConnectionStates.DTLS_CONNECTING === a0) {
binding = env0_0;
binding.setState(RTCConnectionStates.DTLS_CONNECTING);
}
if (state !== RTCConnectionStates.RTC_CONNECTING) {
if (env0_0.state === RTCConnectionStates.NO_ROUTE) {
_backoff = env0_0._backoff;
if (_backoff.fails === 0) {
env0_0._handleNoRoute();
}
binding = env0_0;
_backoff = binding._backoff;
_backoff.fail(binding.reconnect);
}
} else if (env0_0.state === RTCConnectionStates.RTC_DISCONNECTED) {
env0_0.reconnect();
} else if (env0_0.state === RTCConnectionStates.NO_ROUTE) {
_backoff = env0_0._backoff;
if (_backoff.fails === 0) {
env0_0._handleNoRoute();
}
binding = env0_0;
_backoff = binding._backoff;
_backoff.fail(binding.reconnect);
}
if (env0_0.state === RTCConnectionStates.RTC_CONNECTED) {
_localMediaSinkWantsManager = env0_0._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.setConnection(Module00005);
}
_goLiveQualityManager = env0_0._goLiveQualityManager;
if (_goLiveQualityManager != null) {
_goLiveQualityManager.update();
}
binding = env0_0;
binding._connectCompletedTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
binding._hasEverConnected = true;
binding._connecting = false;
binding._encountered_socket_failure = false;
binding._trackVoiceConnectionSuccess(Module00005);
} else if (state === RTCConnectionStates.RTC_CONNECTED) {
binding = env0_0;
stateHistory = binding.stateHistory;
stateHistory.reset(binding.state);
}
}
}
function _fun36762(a0) { // fn#36762, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:37407, offset: 0x01096359, size: 66 bytes, params: 2, frame: 13
const binding = env0_0;
binding._secureFramesState = a0;
const emit = binding.emit;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
const SecureFramesUpdate = RTCConnectionEvent.SecureFramesUpdate;
Reflect.apply(emit, binding, [SecureFramesUpdate]);
}
function _fun36763(a0) { // fn#36763, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:38139, offset: 0x0109639b, size: 20 bytes, params: 2, frame: 2
env0_0._noiseCancellationError = a0;
}
}
function value_36764(a0, a1, a2, a3) { // fn#36764, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:38437, offset: 0x010963af, size: 94 bytes, params: 5, frame: 16
var _localMediaSinkWantsManager;
const _connection = this._connection;
let value = _connection != null;
if (value && this.userId !== a1) {
value = environment.__proto__;
if (a3 !== SpeakingFlags.NONE) {
_connection.createUser(a1, a2);
}
_localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.setAudioSSRC(a1, a2);
}
}
}
function value_36767(a0) { // fn#36767, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:38838, offset: 0x0109648c, size: 80 bytes, params: 2, frame: 17
var environment;
const emit = this.emit;
const value = environment.__proto__;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
const UsersMerged = RTCConnectionEvent.UsersMerged;
Reflect.apply(emit, this, [UsersMerged, a0.map(function(a0) {
return a0.id;
}), this.context]);
}
function value_36769() { // fn#36769, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:38971, offset: 0x010964dc, size: 352 bytes, params: 1, frame: 24
var environment;
var _videoQuality;
var value;
var VideoQuality;
var value2;
var videoQuality;
const VideoHealthManager = (VideoHealthManagerModule).VideoHealthManager;
var defaultConfig;
var value4;
var videoHealthManager;
let _connection = this._connection;
if (_connection != null) {
_videoQuality = this._videoQuality;
if (_videoQuality == null) {
value = environment.__proto__;
VideoQuality = (require(12406) /* metro dependency 12406: VideoQuality */).VideoQuality;
_connection = this._connection;
value2 = Object.create(VideoQuality.prototype, {constructor: {value: VideoQuality}});
videoQuality = new VideoQuality(_connection);
this._videoQuality = videoQuality instanceof Object ? videoQuality : value2;
_videoQuality = this._videoQuality;
_videoQuality.updateCallUserIdsCount(this._userIds.size);
_videoQuality = this._videoQuality;
_videoQuality.start();
defaultConfig = VideoHealthManager.defaultConfig;
if (defaultConfig.featureEnabled) {
value4 = Object.create(VideoHealthManager.prototype, {constructor: {value: VideoHealthManager}});
videoHealthManager = new VideoHealthManager(defaultConfig.windowLength,
defaultConfig.allowedPoorFpsRatio,
defaultConfig.fpsThreshold, defaultConfig.backoffTimeSec);
this._videoHealthManager = videoHealthManager instanceof Object ? videoHealthManager : value4;
if (this._localMediaSinkWantsManager != null) {
this._localMediaSinkWantsManager.videoHealthManager = this._videoHealthManager;
}
_videoQuality = this._videoQuality;
_videoQuality.on((require(12406) /* metro dependency 12406: VideoQuality */).VideoQualityEvent.FpsUpdate,
_fun36770);
}
}
}
return this._videoQuality;
function _fun36770(a0, a1, a2) { // fn#36770, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:39588, offset: 0x0109663c, size: 78 bytes, params: 4, frame: 16
var _videoHealthManager;
const _localMediaSinkWantsManager = env0_0._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null && _localMediaSinkWantsManager.shouldReceiveFromUser(a0)) {
_videoHealthManager = env0_0._videoHealthManager;
if (_videoHealthManager != null) {
_videoHealthManager.updateFps(a0, a1, a2);
}
}
}
}
function value_36771({userId, streamId, videoSsrc, videoStreamParameters}) { // fn#36771, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:39801, offset: 0x0109668a, size: 410 bytes, params: 2, frame: 25
var environment;
var r5;
var _videoHealthManager;
var _goLiveQualityManager;
const emit = this.emit;
let value = environment.__proto__;
value = undefined;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
const Video = RTCConnectionEvent.Video;
Reflect.apply(emit, this, [Video, this.guildId, this.channelId, userId, streamId, this.streamServerId]);
if (streamId != null && this.getOrCreateVideoQuality() == null) {
this.logger.error('_handleVideoStreamId: Unable to create videoQuality.');
}
let _videoQuality = this._videoQuality;
if (_videoQuality != null && this.userId === userId) {
videoStreamParameters.forEach(_fun36772);
}
const userId3 = this.userId;
if (userId3 !== userId) {
r5 = videoSsrc === 0 && streamId === null;
if (r5) {
_videoQuality = this._videoQuality;
r5 = !(_videoQuality == null ? value : _videoQuality.getInboundParticipants().includes(userId));
}
if (!r5) {
_videoQuality = this._videoQuality;
if (_videoQuality != null) {
_videoQuality.setInboundUser(userId, videoSsrc);
}
_videoHealthManager = this._videoHealthManager;
if (_videoHealthManager != null) {
_videoHealthManager.createUser(userId);
}
}
}
if (this._connection != null) {
if (this.userId !== userId) {
if (this._localMediaSinkWantsManager != null) {
this._localMediaSinkWantsManager.setStreamId(userId, streamId);
} else {
_goLiveQualityManager = this._goLiveQualityManager;
if (_goLiveQualityManager != null) {
_goLiveQualityManager = this._goLiveQualityManager;
if (_goLiveQualityManager.getUserID() === userId) {
_goLiveQualityManager = this._goLiveQualityManager;
if (_goLiveQualityManager != null) {
_goLiveQualityManager.setStreamId(streamId);
}
}
}
}
}
}
return value;
function _fun36772(a0) { // fn#36772, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:40153, offset: 0x01096824, size: 81 bytes, params: 2, frame: 14
var _videoQuality;
const ssrc = a0.ssrc;
let value = 0;
const r2 = ssrc ?? value;
value = r2 > value;
if (value && a0.active === true) {
_videoQuality = env0_0._videoQuality;
if (_videoQuality != null) {
_videoQuality.setOutboundSsrc(r2);
}
}
}
}
function value_36775(a0, a1, a2, a3, a4) { // fn#36775, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:41264, offset: 0x01096943, size: 427 bytes, params: 6, frame: 27
var environment;
var r10;
var r16;
var _localMediaSinkWantsManager;
var items2;
var value;
var value2;
var done;
var value3;
var ssrc;
var quality;
var push;
var active;
var value4;
var value5;
var _goLiveQualityManager;
var value6;
const env0_1 = a1;
const env0_2 = a3;
if (this._connection != null) {
if (this.userId !== a1) {
_localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager = this._localMediaSinkWantsManager;
_localMediaSinkWantsManager.setAudioSSRC(a1, a2);
value = a4.map(function(a0) {
return {type: MediaTypes.VIDEO, rid: a0.rid, ssrc: a0.ssrc, rtxSsrc: a0.rtxSsrc,
quality: a0.quality,
active: importAll > 0};
});
if (value.length === 0) {
push = value.push;
value6 = environment.__proto__;
Reflect.apply(push, value, [{type: MediaTypes.VIDEO, rid: '100', ssrc: a3, rtxSsrc: a3 + 1,
quality: 100,
active: a3 > 0}]);
}
_localMediaSinkWantsManager = this._localMediaSinkWantsManager;
_localMediaSinkWantsManager.setVideoSSRCs(a1, value);
} else {
items2 = [];
value = environment.__proto__;
value = _createForOfIteratorHelperLoose_36646(a4);
value2 = value();
done = value2.done;
if (!done) {
r10 = value2;
while (true) {
value3 = r10.value;
ssrc = value3.ssrc;
if (ssrc != null) {
quality = value3.quality;
if (quality == null) {
break;
}
push = items2.push;
ssrc = value3.ssrc;
quality = value3.quality;
active = value3.active;
value4 = active == null;
if (value4) {
r16 = value4;
continue;
}
r16 = active;
continue;
Reflect.apply(push, items2, [{ssrc: ssrc, quality: quality, active: r16}]);
break;
}
value5 = value();
done = value5.done;
if (done) {
break;
}
r10 = value5;
continue;
}
}
_goLiveQualityManager = this._goLiveQualityManager;
if (_goLiveQualityManager != null) {
_goLiveQualityManager.setUserID(a1);
}
_goLiveQualityManager = this._goLiveQualityManager;
if (_goLiveQualityManager != null) {
_goLiveQualityManager.updateAudioAndVideoStreamInfo(a2, items2);
}
}
if (a4 != null) {
a4.forEach(_fun36777);
}
}
}
function _fun36777(a0) { // fn#36777, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:42010, offset: 0x01096b44, size: 108 bytes, params: 2, frame: 23
var binding;
var emit;
var value2;
if (a0.quality === 100) {
binding = env0_0;
emit = binding.emit;
value2 = environment.__proto__.__proto__;
Reflect.apply(emit, binding,
[(require(4405) /* metro dependency 4405: RTCConnectionEvent */).RTCConnectionEvent.VideoSourceQualityChanged,
binding.guildId, binding.channelId, require, a0.maxResolution, a0.maxFrameRate, binding.context]);
}
}
}
function value_36779(a0) { // fn#36779, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:42295, offset: 0x01096be4, size: 195 bytes, params: 2, frame: 18
var _pings;
var push;
var Date;
var now;
var length;
var shift;
var _pingBadCount;
var emit;
var value;
var RTCConnectionEvent;
var Ping;
var quality;
reducibleJoin6: while (true) {
if (a0 === undefined) {
break reducibleJoin6;
}
_pings = this._pings;
push = _pings.push;
Date = global.Date;
now = Date.now;
Reflect.apply(push, _pings, [{time: Reflect.apply(now, Date, []), value: a0}]);
_pings = this._pings;
length = _pings.length;
if (length >= 200) {
reducibleLoop2: while (true) {
_pings = this._pings;
shift = _pings.shift;
Reflect.apply(shift, _pings, []);
_pings = this._pings;
length = _pings.length;
if (length >= 200) {
continue reducibleLoop2;
}
break reducibleLoop2;
}
}
reducibleJoin5: while (true) {
if (a0 > 500) {
_pingBadCount = this._pingBadCount;
this._pingBadCount = typeof _pingBadCount === 'bigint' ? _pingBadCount + 1n : +_pingBadCount + 1;
break reducibleJoin5;
}
break reducibleJoin5;
}
emit = this.emit;
value = environment.__proto__;
RTCConnectionEvent = (require(4405) /* metro dependency 4405: RTCConnectionEvent */).RTCConnectionEvent;
Ping = RTCConnectionEvent.Ping;
_pings = this._pings;
quality = this.quality;
Reflect.apply(emit, this, [Ping, _pings, quality]);
break reducibleJoin6;
}
}
function value_36782() { // fn#36782, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:42927, offset: 0x01096d7d, size: 114 bytes, params: 1, frame: 12
const value = environment.__proto__;
const type = ChannelStore.getChannel(this.channelId)?.type;
const object = {};
object.guild_id = this.guildId;
object.channel_id = this.channelId;
object.channel_type = type;
object.rtc_connection_id = this.getRTCConnectionId();
object.context = this.context;
object.voice_backend_version = this.voiceVersion;
object.rtc_worker_backend_version = this.rtcWorkerVersion;
return object;
}
function value_36783(a0) { // fn#36783, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:43258, offset: 0x01096def, size: 139 bytes, params: 2, frame: 15
a0.forEach(_fun36784);
const emit = this.emit;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
const ClientConnect = RTCConnectionEvent.ClientConnect;
Reflect.apply(emit, this, [ClientConnect, a0]);
const _videoQuality = this._videoQuality;
if (_videoQuality != null) {
_videoQuality.updateCallUserIdsCount(this._userIds.size);
}
const _localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.updateCallUserIds(this._userIds);
}
function _fun36784(a0) { // fn#36784, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:43289, offset: 0x01096e7a, size: 56 bytes, params: 2, frame: 13
const binding = env0_0;
binding._userIds.add(a0);
const _connection = binding._connection;
if (_connection != null) {
_connection.createUser(a0, 0);
}
}
}
function value_36785(a0) { // fn#36785, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:43618, offset: 0x01096eb2, size: 622 bytes, params: 2, frame: 23
var num_frames;
var context;
var value;
var inboundStats;
var value4;
var defaultImport;
var track;
var VIDEO_STREAM_ENDED;
var object;
var rtcRegionStoreBinding;
var getRegion;
var hostname;
var _videoHealthManager;
let _videoQuality = this._videoQuality;
if (_videoQuality != null) {
context = this.context;
value = environment.__proto__;
if (context === MediaEngineContextTypes.DEFAULT) {
inboundStats = _videoQuality.getInboundStats(a0);
num_frames = inboundStats?.num_frames;
value4 = 0;
if (inboundStats != null) {
if ((num_frames ?? value4) > value4) {
defaultImport = importDefault(dependencyMap[24]);
track = defaultImport.track;
VIDEO_STREAM_ENDED = AnalyticEvents.VIDEO_STREAM_ENDED;
object = {};
copyDataProperties(object, this._getAnalyticsProperties(), dependencyMap);
object['app_hardware_acceleration_enabled'] = importDefault(dependencyMap[48]).getAppHardwareAccelerationEnabled();
object['media_session_id'] = this.getMediaSessionId();
object['sender_user_id'] = a0;
object['reason'] = 'User disconnected';
object['participant_type'] = 'receiver';
rtcRegionStoreBinding = RTCRegionStore;
getRegion = rtcRegionStoreBinding.getRegion;
hostname = this.hostname;
object['guild_region'] = Reflect.apply(getRegion, rtcRegionStoreBinding, [hostname]);
hostname = this.hostname;
object['hostname'] = hostname;
object['hardware_enabled'] = MediaEngineStore.getHardwareEncoding();
copyDataProperties(object, inboundStats, rtcRegionStoreBinding);
copyDataProperties(object, _videoQuality.getNetworkStats(), rtcRegionStoreBinding);
copyDataProperties(object, _videoQuality.getCodecUsageStats('receiver', a0), rtcRegionStoreBinding);
Reflect.apply(track, defaultImport, [VIDEO_STREAM_ENDED, object]);
_videoQuality.destroyUser(a0);
_videoHealthManager = this._videoHealthManager;
if (_videoHealthManager != null) {
_videoHealthManager.deleteUser(a0);
}
}
}
}
}
const _connection = this._connection;
if (_connection != null) {
_connection.destroyUser(a0);
}
let _localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.destroyUser(a0);
}
this._userIds.delete(a0);
const emit = this.emit;
value = environment.__proto__;
const RTCConnectionEvent = require(dependencyMap[41]).RTCConnectionEvent;
const ClientDisconnect = RTCConnectionEvent.ClientDisconnect;
Reflect.apply(emit, this, [ClientDisconnect, a0]);
_localMediaSinkWantsManager = this._localMediaSinkWantsManager;
if (_localMediaSinkWantsManager != null) {
_localMediaSinkWantsManager.updateCallUserIds(this._userIds);
}
_videoQuality = this._videoQuality;
if (_videoQuality != null) {
_videoQuality.updateCallUserIdsCount(this._userIds.size);
}
if (this._userIds.size === 1) {
value = require(dependencyMap[22]);
this._secureFramesLastBecameAloneTime = value.now();
}
}
function value_36786(a0, a1) { // fn#36786, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:44751, offset: 0x01097120, size: 153 bytes, params: 3, frame: 19
var logger;
const value = a0;
const value2 = a1;
const _connection = this._connection;
if (_connection == null) {
logger = this.logger;
logger.warn('Cannot set codecs on connection with protocol:', this.protocol);
} else if (this.protocol != null) {
_connection.setCodecs(value == null ? Codecs.OPUS : value !== '' ? value : Codecs.OPUS,
value2 == null ? Codecs.H264 : value2 !== '' ? value2 : Codecs.H264, this.context);
this._hasCodecs = true;
this._trackVoiceConnectionSuccess(_connection);
} else {
logger = this.logger;
logger.warn('Cannot set codecs on connection with protocol:', this.protocol);
}
}
function value_36787(a0) { // fn#36787, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:45076, offset: 0x010971b9, size: 859 bytes, params: 2, frame: 27
var environment;
var r14;
var r13;
var state;
var value;
var shouldIncludePreferredRegion2;
var value2;
var _connectCount;
var mediaEngineStoreBinding;
var settings;
var value5;
var value6;
var defaultImport;
var track;
var VOICE_CONNECTION_SUCCESS;
var object;
var protocol;
var value7;
var stateHistory;
var value18;
var defaultImport2;
var VOICE_CONNECTION_TTC_COLLECTED;
var transportInfo;
var onConnectCallbackAt;
var onVideoCodecsCallbackAt;
var onEncryptionModesCallbackAt;
const closure = function(a0, a1) {
var value = null;
return value == a0 || value == a1 ? value : a0 - a1;
};
if (!this._voiceConnectionSuccessTracked) {
state = this.state;
value = environment.__proto__;
if (state === RTCConnectionStates.RTC_CONNECTED) {
if (this._hasCodecs) {
this._voiceConnectionSuccessTracked = true;
shouldIncludePreferredRegion2 = RTCRegionStore.shouldIncludePreferredRegion();
value2 = null;
r14 = shouldIncludePreferredRegion2 ? RTCRegionStore.getPreferredRegion() : value2;
_connectCount = this._connectCount;
settings = MediaEngineStore.getSettings();
value5 = this._getAnalyticsProperties();
value6 = undefined;
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
VOICE_CONNECTION_SUCCESS = AnalyticEvents.VOICE_CONNECTION_SUCCESS;
object = {};
copyDataProperties(object, value5, undefined);
object['hostname'] = this.hostname;
object['port'] = this.port;
protocol = this.protocol;
object['protocol'] = protocol;
object['cloudflare_best_region'] = r14;
value7 = (require(4303) /* metro dependency 4303: TimeUtils */).now();
r13 = _connectCount === 1 ? this._createdTime : this._connectStartTime;
object['connect_time'] = value7 - r13;
_connectCount = this._connectCount;
object['connect_count'] = _connectCount;
mediaEngineStoreBinding = MediaEngineStore;
object['audio_subsystem'] = mediaEngineStoreBinding.getMediaEngine().getAudioSubsystem();
object['audio_layer'] = mediaEngineStoreBinding.getMediaEngine().getAudioLayer();
object['automatic_audio_subsystem'] = settings.automaticAudioSubsystem;
object['media_session_id'] = this.getMediaSessionId();
object['participant_type'] = this.getVoiceParticipantType();
object['join_voice_id'] = this.joinVoiceId;
r13 = mediaEngineStoreBinding.getMediaEngine().getVideoInputDeviceId() !== DISABLED_DEVICE_ID && a0.context === MediaEngineContextTypes.DEFAULT;
object['is_camera_enabled'] = r13;
stateHistory = this.stateHistory;
copyDataProperties(object, stateHistory.getVoiceConnectionSuccessStats(), protocol);
Reflect.apply(track, defaultImport, [VOICE_CONNECTION_SUCCESS, object]);
value18 = global.performance.now();
defaultImport2 = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport2.track;
VOICE_CONNECTION_TTC_COLLECTED = AnalyticEvents.VOICE_CONNECTION_TTC_COLLECTED;
object = {};
object.rtc_connection_id = value5.rtc_connection_id;
object.time_1_creation_to_connect = this._connectStartTime - this._createdTime;
object.time_2_media_engine_connect = this._mediaEngineConnectDuration;
transportInfo = a0.transportInfo;
object.time_3_media_engine_create_native_connection = value2 == transportInfo ? value6 : transportInfo.createConnectionTime;
transportInfo = a0.transportInfo;
object.time_4_media_engine_connect_to_socket = value2 == transportInfo ? value6 : transportInfo.connectTime;
onConnectCallbackAt = a0.onConnectCallbackAt;
transportInfo = a0.transportInfo;
object.time_5_scheduling_connected_callback = closure(onConnectCallbackAt,
value2 == transportInfo ? value6 : transportInfo.connectCallbackScheduledMs);
onConnectCallbackAt = a0.onConnectCallbackAt;
object.time_6_state_connected_to_end_measure = closure(value18, onConnectCallbackAt);
_connectCount = this._connectCount;
object.connect_count = _connectCount;
onConnectCallbackAt = a0.onConnectCallbackAt;
object.rtc_connecting_native_connect = closure(onConnectCallbackAt, a0.beginInitializeAt);
onVideoCodecsCallbackAt = a0.onVideoCodecsCallbackAt;
onConnectCallbackAt = a0.onConnectCallbackAt;
object.rtc_connecting_native_codecs = closure(onVideoCodecsCallbackAt, onConnectCallbackAt);
onEncryptionModesCallbackAt = a0.onEncryptionModesCallbackAt;
onVideoCodecsCallbackAt = a0.onVideoCodecsCallbackAt;
object.rtc_connecting_native_crypto_modes = closure(onEncryptionModesCallbackAt,
onVideoCodecsCallbackAt);
Reflect.apply(track, defaultImport2, [VOICE_CONNECTION_TTC_COLLECTED, object]);
}
}
}
}
function value_36790(a0) { // fn#36790, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:47284, offset: 0x01097580, size: 259 bytes, params: 2, frame: 21
this._mediaSessionId = a0;
const logger = this.logger;
logger.info('Setting media-session-id: ' + a0 + ' for rtc-connection-id: ' + this.getRTCConnectionId());
value = environment.__proto__;
const rawThermalState = (ThermalUtilsNative).getRawThermalState();
const defaultImport2 = AnalyticsUtils;
const track = defaultImport2.track;
const MEDIA_SESSION_JOINED = AnalyticEvents.MEDIA_SESSION_JOINED;
let object = {};
copyDataProperties(object, this._getAnalyticsProperties(), undefined);
object['media_session_id'] = this.getMediaSessionId();
object['parent_media_session_id'] = this.parentMediaSessionId;
object['raw_thermal_state'] = rawThermalState;
Reflect.apply(track, defaultImport2, [MEDIA_SESSION_JOINED, object]);
value = importDefault(694) /* metro dependency 694: Dispatcher */;
const dispatch = value.dispatch;
object = {type: 'MEDIA_SESSION_JOINED'};
object.mediaSessionId = this.getMediaSessionId();
object.context = this.context;
Reflect.apply(dispatch, value, [object]);
}
function value_36791(a0) { // fn#36791, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:47792, offset: 0x01097683, size: 181 bytes, params: 2, frame: 16
const _connection = this._connection;
const logger = this.logger;
const info = logger.info;
const JSON = global.JSON;
Reflect.apply(info, logger, ['Remote media sink wants: ' + JSON.stringify(a0)]);
this._remoteVideoSinkWants = a0;
value = environment.__proto__;
value = importDefault(694) /* metro dependency 694: Dispatcher */;
const dispatch = value.dispatch;
const userId = this.userId;
Reflect.apply(dispatch, value, [{type: 'RTC_CONNECTION_REMOTE_VIDEO_SINK_WANTS', context: this.context, wants: a0,
channelId: this.channelId, guildId: this.guildId, userId: userId}]);
if (_connection != null) {
_connection.setRemoteVideoSinkWants(a0);
}
}
function value_36794(a0) { // fn#36794, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:48485, offset: 0x0109779d, size: 96 bytes, params: 2, frame: 15
var _connection;
this._bandwidthEstimationExperiment = a0;
let value = environment.__proto__;
value = importDefault(12409) /* metro dependency 12409: BandwidthEstimationExperiment */;
value = value.getMediaEngineExperiments(a0);
if (value !== null && value.length !== 0) {
_connection = this._connection;
if (_connection != null) {
_connection.setBandwidthEstimationExperiments(value);
}
}
}
function value_36795(a0) { // fn#36795, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:48717, offset: 0x010977fd, size: 870 bytes, params: 2, frame: 23
var environment;
var size;
var value2;
var defaultImport;
var track;
var SECURE_FRAMES_TRANSITION;
var object;
var initReceivedTime;
var initFinishedTime;
var firstProposalsFinishedTime;
var firstProposalsReceivedTime;
var lastProposalsFinishedTime;
var lastProposalsReceivedTime;
var welcomeReceivedTime;
var welcomeFinishedTime;
var commitReceivedTime;
var commitFinishedTime;
var prepareReceivedTime;
var prepareFinishedTime;
var executeReceivedTime;
var executeFinishedTime;
const closure = function(a0, a1) {
return a0 != null && a1 != null ? a0 - a1 : undefined;
};
let _secureFramesTransitionStates = this._secureFramesTransitionStates;
let value = _secureFramesTransitionStates.get(a0);
if (value != null) {
_secureFramesTransitionStates = this._secureFramesTransitionStates;
size = _secureFramesTransitionStates.size;
_secureFramesTransitionStates = this._secureFramesTransitionStates;
_secureFramesTransitionStates.delete(a0);
value2 = environment.__proto__;
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
SECURE_FRAMES_TRANSITION = AnalyticEvents.SECURE_FRAMES_TRANSITION;
object = {};
copyDataProperties(object, this._getAnalyticsProperties(), undefined);
object['media_session_id'] = this.getMediaSessionId();
object['parent_media_session_id'] = this.parentMediaSessionId;
object['sender_user_id'] = this.userId;
object['transition_id'] = a0;
object['protocol_version'] = value.protocolVersion;
initReceivedTime = value.initReceivedTime;
object['start_to_init_duration'] = closure(initReceivedTime, this._connectStartTime);
initFinishedTime = value.initFinishedTime;
initReceivedTime = value.initReceivedTime;
object['init_duration'] = closure(initFinishedTime, initReceivedTime);
firstProposalsFinishedTime = value.firstProposalsFinishedTime;
firstProposalsReceivedTime = value.firstProposalsReceivedTime;
object['first_proposals_duration'] = closure(firstProposalsFinishedTime, firstProposalsReceivedTime);
lastProposalsFinishedTime = value.lastProposalsFinishedTime;
lastProposalsReceivedTime = value.lastProposalsReceivedTime;
object['last_proposals_duration'] = closure(lastProposalsFinishedTime, lastProposalsReceivedTime);
lastProposalsReceivedTime = value.lastProposalsReceivedTime;
firstProposalsReceivedTime = value.firstProposalsReceivedTime;
object['duration_between_proposals'] = closure(lastProposalsReceivedTime, firstProposalsReceivedTime);
object['total_proposals_size'] = value.totalProposalsSize;
object['total_commit_welcome_size'] = value.totalCommitWelcomeSize;
welcomeReceivedTime = value.welcomeReceivedTime;
initFinishedTime = value.initFinishedTime;
object['welcome_wait_duration'] = closure(welcomeReceivedTime, initFinishedTime);
welcomeFinishedTime = value.welcomeFinishedTime;
welcomeReceivedTime = value.welcomeReceivedTime;
object['welcome_duration'] = closure(welcomeFinishedTime, welcomeReceivedTime);
object['welcome_size'] = value.welcomeSize;
object['welcome_error'] = value.welcomeError;
commitReceivedTime = value.commitReceivedTime;
lastProposalsFinishedTime = value.lastProposalsFinishedTime;
object['commit_wait_duration'] = closure(commitReceivedTime, lastProposalsFinishedTime);
commitFinishedTime = value.commitFinishedTime;
commitReceivedTime = value.commitReceivedTime;
object['commit_duration'] = closure(commitFinishedTime, commitReceivedTime);
object['commit_size'] = value.commitSize;
object['commit_error'] = value.commitError;
prepareReceivedTime = value.prepareReceivedTime;
object['prepare_wait_duration'] = closure(prepareReceivedTime, this._secureFramesLastBecameAloneTime);
prepareFinishedTime = value.prepareFinishedTime;
prepareReceivedTime = value.prepareReceivedTime;
object['prepare_duration'] = closure(prepareFinishedTime, prepareReceivedTime);
executeReceivedTime = value.executeReceivedTime;
object['execute_wait_duration'] = closure(executeReceivedTime, value.readyTime);
executeFinishedTime = value.executeFinishedTime;
executeReceivedTime = value.executeReceivedTime;
object['execute_duration'] = closure(executeFinishedTime, executeReceivedTime);
object['execute_error'] = value.executeError;
object['incomplete'] = value.incomplete;
object['active_transition_count'] = size;
object['time_since_creation'] = (require(4303) /* metro dependency 4303: TimeUtils */).now() - value.creationTime;
object['users_added_count'] = value.usersAdded;
object['users_removed_count'] = value.usersRemoved;
object['roster_size_after'] = value.rosterSizeAfter;
executeFinishedTime = value.executeFinishedTime;
initReceivedTime = value.initReceivedTime;
value = closure(executeFinishedTime, initReceivedTime);
object['init_to_finish_duration'] = value;
Reflect.apply(track, defaultImport, [SECURE_FRAMES_TRANSITION, object]);
if (a0 === 0) {
this._trackRemainingSecureFrameTransitions();
}
}
}
function value_36797() { // fn#36797, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:51002, offset: 0x01097b83, size: 34 bytes, params: 1, frame: 11
this._secureFramesTransitionStates.forEach(_fun36798);
function _fun36798(a0, a1) { // fn#36798, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:51057, offset: 0x01097ba5, size: 36 bytes, params: 3, frame: 11
a0.incomplete = true;
env0_0._trackSecureFrameTransition(a1);
}
}
function value_36799(a0) { // fn#36799, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:51171, offset: 0x01097bc9, size: 95 bytes, params: 2, frame: 14
var r4;
var object;
var value;
if (this._secureFramesNextTransitionState == null) {
object = {};
value = environment.__proto__;
value = require(4303) /* metro dependency 4303: TimeUtils */;
object.creationTime = value.now();
this._secureFramesNextTransitionState = object;
r4 = require;
}
object = {};
copyDataProperties(object, this._secureFramesNextTransitionState, r4);
copyDataProperties(object, a0, r4);
this._secureFramesNextTransitionState = object;
return object;
}
function value_36801(a0) { // fn#36801, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:51833, offset: 0x01097cae, size: 306 bytes, params: 2, frame: 20
var _connection;
var _storeSecureFrameNextTransitionData;
const env0_1 = a0;
const value2 = (require(4303) /* metro dependency 4303: TimeUtils */).now();
const recordEvent = this.recordEvent;
let object = {};
const SECURE_FRAMES_INIT = env1_37.SECURE_FRAMES_INIT;
object.c = SECURE_FRAMES_INIT;
object.v = a0;
Reflect.apply(recordEvent, this, [object]);
if (a0 > 0) {
this.logger.info('DAVE protocol init with protocol version: ' + a0);
this._mlsInitReceivedTime = value2;
_connection = this._connection;
if (_connection != null) {
_connection.prepareSecureFramesEpoch('1', a0, this.trueChannelId);
}
this._sendMLSKeyPackage();
_storeSecureFrameNextTransitionData = this._storeSecureFrameNextTransitionData;
object = {initReceivedTime: value2};
object.initFinishedTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
object.protocolVersion = a0;
Reflect.apply(_storeSecureFrameNextTransitionData, this, [object]);
this.recordEvent({c: env1_37.MLS_INIT});
} else {
_connection = this._connection;
if (_connection != null) {
_connection.prepareSecureFramesTransition(0, a0, _fun36802);
}
}
function _fun36802() { // fn#36802, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:52340, offset: 0x01097de0, size: 180 bytes, params: 1, frame: 18
var r2;
var value2;
var binding;
var _connection;
var value3;
var error;
var value4;
var defaultImport;
let value = false;
try {
value2 = environment;
binding = env0_0;
_connection = binding._connection;
value3 = _connection == null;
if (value3) {
r2 = value;
} else {
_connection.executeSecureFramesTransition(0);
r2 = value;
}
} catch (error) {
value = true;
value4 = environment.__proto__.__proto__;
defaultImport = importDefault(1216) /* metro dependency 1216: SentryUtilsNative */;
defaultImport.captureException(error);
r2 = value;
}
binding = env0_0;
const _storeSecureFrameTransitionData = binding._storeSecureFrameTransitionData;
const object = {initReceivedTime: env0_2};
value = environment.__proto__.__proto__;
object.initFinishedTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
object.protocolVersion = env0_1;
object.executeError = r2;
Reflect.apply(_storeSecureFrameTransitionData, binding, [0, object]);
binding._trackSecureFrameTransition(0);
}
}
function value_36803(a0, a1) { // fn#36803, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:52683, offset: 0x01097e94, size: 166 bytes, params: 3, frame: 15
var environment;
const env0_2 = 0;
const env0_3 = 0;
const Object = global.Object;
Object.entries(a0).forEach(_fun36804);
this._storeSecureFrameTransitionData(a1, {usersAdded: env0_2, usersRemoved: env0_3,
rosterSizeAfter: this._secureFramesRosterMap.size});
const emit = this.emit;
value = environment.__proto__;
const RTCConnectionEvent = (RTCConnectionEventModule).RTCConnectionEvent;
const RosterMapUpdate = RTCConnectionEvent.RosterMapUpdate;
Reflect.apply(emit, this, [RosterMapUpdate, []]);
function _fun36804(a0) { // fn#36804, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:52741, offset: 0x01097f3a, size: 165 bytes, params: 2, frame: 17
var r1;
var r2;
var r5;
var item3;
var value3;
const iterator = a0[Symbol.iterator]();
const iterator2 = iterator.next;
let item2 = Reflect.apply(iterator2, iterator, []);
let item = item2.value;
item2 = item2.done ? undefined : iterator;
const value = undefined;
const value2 = item2 === value;
const r3 = value2 ? value : item;
if (value2) {
r1 = item2;
r2 = value2;
r5 = value;
} else {
item3 = Reflect.apply(iterator2, item2, []);
item = item3.value;
item3 = item3.done ? undefined : item2;
value3 = item3 === value;
if (value3) {
r1 = item3;
r2 = value3;
r5 = value;
} else {
r1 = item3;
r2 = value3;
r5 = item;
}
}
if (!r2) {
r1.return();
}
let binding = env0_1;
binding.push(r3);
if (r5 == null) {
binding = env0_3;
env0_3 = typeof binding === 'bigint' ? binding + 1n : +binding + 1;
env0_0._secureFramesRosterMap.delete(r3);
} else if (r5.byteLength === 0) {
binding = env0_3;
env0_3 = typeof binding === 'bigint' ? binding + 1n : +binding + 1;
env0_0._secureFramesRosterMap.delete(r3);
} else {
binding = env0_2;
env0_2 = typeof binding === 'bigint' ? binding + 1n : +binding + 1;
env0_0._secureFramesRosterMap.set(r3, r5);
}
return value;
}
}
function value_36805(a0, a1) { // fn#36805, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:53106, offset: 0x01097fdf, size: 188 bytes, params: 3, frame: 19
var environment;
const env0_1 = a0;
const env0_2 = a1;
this.logger.info('Preparing DAVE protocol transition: ' + a0 + ', protocol version: ' + a1);
const _secureFramesTransitionPrepareCount = this._secureFramesTransitionPrepareCount;
this._secureFramesTransitionPrepareCount = typeof _secureFramesTransitionPrepareCount === 'bigint' ? _secureFramesTransitionPrepareCount + 1n : +_secureFramesTransitionPrepareCount + 1;
const value = environment.__proto__;
const env0_3 = (TimeUtilsModule).now();
if (a1 === 0) {
this._trackMLSFailures({'recovered': true, 'downgraded': true});
}
const _connection = this._connection;
if (_connection != null) {
_connection.prepareSecureFramesTransition(a0, a1, _fun36806);
}
function _fun36806() { // fn#36806, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:53401, offset: 0x0109809b, size: 95 bytes, params: 1, frame: 16
const binding = env0_0;
const _maybeSendSecureFramesTransitionReady = binding._maybeSendSecureFramesTransitionReady;
const binding2 = env0_1;
Reflect.apply(_maybeSendSecureFramesTransitionReady, binding, [binding2]);
const _storeSecureFrameTransitionData = binding._storeSecureFrameTransitionData;
const object = {};
object.protocolVersion = require;
object.prepareReceivedTime = env0_3;
const value = environment.__proto__.__proto__;
object.prepareFinishedTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
Reflect.apply(_storeSecureFrameTransitionData, binding, [binding2, object]);
}
}
function value_36807(a0, a1) { // fn#36807, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:53620, offset: 0x010980fa, size: 189 bytes, params: 3, frame: 18
var moduleValue;
this.logger.info('Preparing DAVE protocol epoch: ' + a0 + ', protocol version: ' + a1);
let value = a0.toString();
const _connection = this._connection;
if (_connection != null) {
_connection.prepareSecureFramesEpoch(value, a1, this.trueChannelId);
}
if (value === '1') {
value = environment.__proto__;
moduleValue = require(4303) /* metro dependency 4303: TimeUtils */;
this._mlsInitReceivedTime = moduleValue.now();
this._sendMLSKeyPackage();
this.recordEvent({c: env1_37.MLS_INIT});
}
}
function value_36808() { // fn#36808, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:53964, offset: 0x010981b7, size: 41 bytes, params: 1, frame: 11
const _connection = this._connection;
if (_connection != null) {
_connection.getMLSKeyPackage(_fun36809);
}
function _fun36809(a0) { // fn#36809, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:54029, offset: 0x010981e0, size: 62 bytes, params: 2, frame: 12
const binding = env0_0;
binding.logger.info('Got MLS key package, sending to RTC server');
const _socket = binding._socket;
if (_socket != null) {
_socket.sendMLSKeyPackage(a0);
}
}
}
function value_36810(a0) { // fn#36810, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:54205, offset: 0x0109821e, size: 135 bytes, params: 2, frame: 16
var _socket;
var _storeSecureFrameTransitionData;
var object;
var value;
if (a0 !== 0) {
this.logger.info('Sending DAVE protocol ready for transition ID ' + a0);
_socket = this._socket;
if (_socket != null) {
_socket.secureFramesReadyForTransition(a0);
}
_storeSecureFrameTransitionData = this._storeSecureFrameTransitionData;
object = {};
value = environment.__proto__;
value = require(4303) /* metro dependency 4303: TimeUtils */;
object.readyTime = value.now();
Reflect.apply(_storeSecureFrameTransitionData, this, [a0, object]);
}
}
function value_36811(a0) { // fn#36811, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:54483, offset: 0x010982a5, size: 247 bytes, params: 2, frame: 20
var r5;
var _connection;
var value4;
var error;
var value5;
var defaultImport;
this.logger.info('Executing DAVE protocol transition: ' + a0);
const _secureFramesTransitionExecuteCount = this._secureFramesTransitionExecuteCount;
this._secureFramesTransitionExecuteCount = typeof _secureFramesTransitionExecuteCount === 'bigint' ? _secureFramesTransitionExecuteCount + 1n : +_secureFramesTransitionExecuteCount + 1;
const value = environment.__proto__;
const value2 = (require(4303) /* metro dependency 4303: TimeUtils */).now();
const value3 = false;
try {
_connection = this._connection;
value4 = _connection == null;
if (value4) {
r5 = value3;
} else {
_connection.executeSecureFramesTransition(a0);
r5 = value3;
}
} catch (error) {
value5 = true;
defaultImport = importDefault(1216) /* metro dependency 1216: SentryUtilsNative */;
defaultImport.captureException(error);
r5 = value5;
}
const _storeSecureFrameTransitionData = this._storeSecureFrameTransitionData;
const object = {executeReceivedTime: value2};
object.executeFinishedTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
object.executeError = r5;
Reflect.apply(_storeSecureFrameTransitionData, this, [a0, object]);
this._trackSecureFrameTransition(a0);
}
function value_36813(a0, a1) { // fn#36813, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:55107, offset: 0x010983d4, size: 115 bytes, params: 3, frame: 16
var environment;
const env0_1 = a0;
const env0_2 = a1;
const value = environment.__proto__;
const env0_3 = (TimeUtilsModule).now();
this.logger.info('Received MLS proposals');
const _connection = this._connection;
if (_connection != null) {
_connection.processMLSProposals(a1, _fun36814);
}
function _fun36814(a0) { // fn#36814, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:55241, offset: 0x01098447, size: 217 bytes, params: 2, frame: 18
let value = environment.__proto__.__proto__;
value = require(4303) /* metro dependency 4303: TimeUtils */;
value = value.now();
const binding = env0_0;
binding.logger.info('Sending MLS commit welcome message');
env0_1.sendMLSCommitWelcome(a0);
const r2 = binding._secureFramesNextTransitionState ?? env0_0._storeSecureFrameNextTransitionData({firstProposalsReceivedTime: env0_3,
firstProposalsFinishedTime: value});
r2.lastProposalsReceivedTime = env0_3;
r2.lastProposalsFinishedTime = value;
const totalProposalsSize = r2.totalProposalsSize;
value = 0;
r2.totalProposalsSize = (totalProposalsSize ?? value) + require.byteLength;
r2.totalCommitWelcomeSize = (r2.totalCommitWelcomeSize ?? value) + a0.byteLength;
}
}
function value_36815(a0, a1) { // fn#36815, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:55774, offset: 0x01098520, size: 134 bytes, params: 3, frame: 18
var environment;
const env0_1 = a0;
const env0_2 = a1;
this.logger.info('Received MLS commit for transition ID ' + a0);
const value = environment.__proto__;
const env0_3 = (TimeUtilsModule).now();
const _connection = this._connection;
if (_connection != null) {
_connection.prepareMLSCommitTransition(a0, a1, _fun36816);
}
function _fun36816(a0, a1, a2) { // fn#36816, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:55941, offset: 0x010985a6, size: 287 bytes, params: 4, frame: 18
var logger;
var warn;
var binding2;
var value2;
var _handleSecureFramesRosterChange;
var binding3;
let binding = env0_0;
if (a0) {
binding._trackMLSFailures({'recovered': true, 'downgraded': false});
binding._mlsSessionResetStartTime = undefined;
_handleSecureFramesRosterChange = binding._handleSecureFramesRosterChange;
binding3 = env0_1;
Reflect.apply(_handleSecureFramesRosterChange, binding, [a2, binding3]);
binding._maybeSendSecureFramesTransitionReady(binding3);
} else {
logger = binding.logger;
warn = logger.warn;
binding2 = env0_1;
Reflect.apply(warn, logger, ['Failed to process MLS commit for transition ID ' + binding2]);
value2 = environment.__proto__.__proto__;
binding._mlsSessionResetStartTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
binding._flagMLSInvalidCommitWelcome(binding2);
binding._handleSecureFramesInit(a1);
}
binding = env0_0;
const _storeSecureFrameTransitionData = binding._storeSecureFrameTransitionData;
const binding4 = env0_1;
const object = {protocolVersion: a1, commitReceivedTime: env0_3};
object.commitFinishedTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
object.commitSize = require.byteLength;
object.commitError = !a0;
Reflect.apply(_storeSecureFrameTransitionData, binding, [binding4, object]);
}
}
function value_36817(a0, a1) { // fn#36817, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:56515, offset: 0x010986c5, size: 134 bytes, params: 3, frame: 18
var environment;
const env0_1 = a0;
const env0_2 = a1;
this.logger.info('Received MLS welcome for transition ID ' + a0);
const value = environment.__proto__;
const env0_3 = (TimeUtilsModule).now();
const _connection = this._connection;
if (_connection != null) {
_connection.processMLSWelcome(a0, a1, _fun36818);
}
function _fun36818(a0, a1, a2) { // fn#36818, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:56674, offset: 0x0109874b, size: 246 bytes, params: 4, frame: 18
var value2;
var _handleSecureFramesRosterChange;
var binding2;
let binding = env0_0;
if (a0) {
binding._trackMLSFailures({'recovered': true, 'downgraded': false});
binding._mlsSessionResetStartTime = undefined;
_handleSecureFramesRosterChange = binding._handleSecureFramesRosterChange;
binding2 = env0_1;
Reflect.apply(_handleSecureFramesRosterChange, binding, [a2, binding2]);
binding._maybeSendSecureFramesTransitionReady(binding2);
} else {
value2 = environment.__proto__.__proto__;
binding._mlsSessionResetStartTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
binding._flagMLSInvalidCommitWelcome(env0_1);
binding._sendMLSKeyPackage();
}
binding = env0_0;
const _storeSecureFrameTransitionData = binding._storeSecureFrameTransitionData;
const binding3 = env0_1;
const object = {protocolVersion: a1, welcomeReceivedTime: env0_3};
object.welcomeFinishedTime = (require(4303) /* metro dependency 4303: TimeUtils */).now();
object.welcomeSize = require.byteLength;
object.welcomeError = !a0;
Reflect.apply(_storeSecureFrameTransitionData, binding, [binding3, object]);
}
}
function value_36821(a0, a1) { // fn#36821, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:57498, offset: 0x010988b6, size: 381 bytes, params: 3, frame: 22
var defaultImport;
var show;
const intl = (IndexNativeModule).intl;
const t = (IndexNativeModule).t;
const value2 = undefined;
const value3 = (TimeUtilsModule).now();
const _nextFailureId = this._nextFailureId;
const value4 = typeof _nextFailureId === 'bigint' ? _nextFailureId : +_nextFailureId;
this._nextFailureId = typeof value4 === 'bigint' ? value4 + 1n : +value4 + 1;
const recordEvent = this.recordEvent;
const MLS_FAILURE = env1_37.MLS_FAILURE;
Reflect.apply(recordEvent, this, [{c: MLS_FAILURE, i: value4}]);
const _mlsFailures = this._mlsFailures;
const push = _mlsFailures.push;
object = {id: value4, source: a0, reason: a1};
const value5 = 1;
object.count = value5;
object.countDuringReset = this._mlsSessionResetStartTime != null ? value5 : 0;
object.firstOccurrence = value3;
object.timeSinceInit = this._mlsInitReceivedTime != null ? value3 - this._mlsInitReceivedTime : value2;
object.eventLog = getEventHistoryString();
Reflect.apply(push, _mlsFailures, [object]);
if (a0.includes('GetPersistedKeyPair')) {
defaultImport = importDefault(4647) /* metro dependency 4647: AlertActionCreators */;
show = defaultImport.show;
object = {};
object.title = intl.string(t.fJUioH);
object.body = intl.string(t.CQLWvo);
Reflect.apply(show, defaultImport, [object]);
} else {
this._alertMLSFailureDebouced(a0, a1);
}
return value2;
}
function value_36822({recovered, downgraded}) { // fn#36822, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:58059, offset: 0x01098a33, size: 444 bytes, params: 2, frame: 48
var r21;
var r3;
var value5;
var value8;
var id;
var source;
var reason;
var count;
var countDuringReset;
var firstOccurrence;
var timeSinceInit;
var eventLog;
var defaultImport;
var track;
var MLS_FAILURES;
var object;
var _getAnalyticsProperties;
var parentMediaSessionId;
var _createdTime;
var _connectionSerial;
var value9;
const value3 = (TimeUtilsModule).now();
const mediaSessionId = this.getMediaSessionId();
let _mlsSessionResetStartTime = this._mlsSessionResetStartTime;
reducibleJoin2: while (true) {
if (_mlsSessionResetStartTime != null) {
_mlsSessionResetStartTime = this._mlsSessionResetStartTime;
value5 = value3 - _mlsSessionResetStartTime;
r21 = value5;
break reducibleJoin2;
}
r21 = undefined;
break reducibleJoin2;
}
const value6 = _createForOfIteratorHelperLoose_36646(this._mlsFailures);
const value7 = value6();
let done = value7.done;
if (!done) {
r3 = value7;
reducibleLoop3: while (true) {
value8 = r3.value;
id = value8.id;
source = value8.source;
reason = value8.reason;
count = value8.count;
countDuringReset = value8.countDuringReset;
firstOccurrence = value8.firstOccurrence;
timeSinceInit = value8.timeSinceInit;
eventLog = value8.eventLog;
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
MLS_FAILURES = AnalyticEvents.MLS_FAILURES;
object = {};
_getAnalyticsProperties = this._getAnalyticsProperties;
copyDataProperties(object, Reflect.apply(_getAnalyticsProperties, this, []), _getAnalyticsProperties);
object['media_session_id'] = mediaSessionId;
parentMediaSessionId = this.parentMediaSessionId;
object['parent_media_session_id'] = parentMediaSessionId;
object['failure_id'] = id;
_createdTime = this._createdTime;
object['failure_time'] = firstOccurrence - _createdTime;
object['failure_source'] = source;
object['failure_reason'] = reason;
object['failure_count'] = count;
object['failure_was_recovered'] = recovered;
object['failure_cleared_by_downgrade'] = downgraded;
object['time_since_first_occurrence'] = value3 - firstOccurrence;
object['time_since_last_reset'] = r21;
object['failure_count_during_reset'] = countDuringReset;
object['time_since_init'] = timeSinceInit;
object['event_history'] = eventLog;
_connectionSerial = this._connectionSerial;
object['connection_serial'] = _connectionSerial;
Reflect.apply(track, defaultImport, [MLS_FAILURES, object]);
value9 = value6();
done = value9.done;
if (done) {
break reducibleLoop3;
}
r3 = value9;
continue reducibleLoop3;
}
}
this._mlsFailures = [];
}
function value_36823(a0, a1) { // fn#36823, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:58924, offset: 0x01098bef, size: 167 bytes, params: 3, frame: 16
const value = environment.__proto__;
const currentUser = UserStore.getCurrentUser();
let r1 = currentUser != null && currentUser.isStaff();
r1 = !r1 ? currentUser != null && currentUser.isStaffPersonal() : r1;
if (r1) {
(importDefault(4647) /* metro dependency 4647: AlertActionCreators */).show({title: 'MLS Error in ' + a0,
body: 'Error: ' + a1 + '! Please upload your logs in A/V settings and ask everyone in the call to do the same, and ping us in #av-e2ee in Core Tech!'});
}
}
function value_36825({length}) { // fn#36825, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:59305, offset: 0x01098c96, size: 93 bytes, params: 2, frame: 13
var r0;
var value3;
if (length > 10) {
return false;
}
let value = this.getMediaSessionId();
const value2 = value != null;
if (value2) {
value3 = environment.__proto__;
value = (importDefault(1225) /* metro dependency 1225 */).v3(value);
value = value % 100 <= 5;
r0 = value;
} else {
r0 = value2;
}
return r0;
}
function value_36826() { // fn#36826, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:59444, offset: 0x01098cf3, size: 49 bytes, params: 1, frame: 10
let value = environment.__proto__;
const mediaEngineStoreBinding = MediaEngineStore;
value = mediaEngineStoreBinding.getInputDeviceId();
const getInputDevices = mediaEngineStoreBinding.getInputDevices;
return Reflect.apply(getInputDevices, mediaEngineStoreBinding, [])[value]?.name;
}
function value_36827() { // fn#36827, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:59573, offset: 0x01098d24, size: 49 bytes, params: 1, frame: 10
let value = environment.__proto__;
const mediaEngineStoreBinding = MediaEngineStore;
value = mediaEngineStoreBinding.getOutputDeviceId();
const getOutputDevices = mediaEngineStoreBinding.getOutputDevices;
return Reflect.apply(getOutputDevices, mediaEngineStoreBinding, [])[value]?.name;
}
function value_36828() { // fn#36828, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:59703, offset: 0x01098d55, size: 49 bytes, params: 1, frame: 10
let value = environment.__proto__;
const mediaEngineStoreBinding = MediaEngineStore;
value = mediaEngineStoreBinding.getVideoDeviceId();
const getVideoDevices = mediaEngineStoreBinding.getVideoDevices;
return Reflect.apply(getVideoDevices, mediaEngineStoreBinding, [])[value]?.name;
}
}
}
function _fun36684(a0, {value}) { // fn#36684, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:15959, offset: 0x01093313, size: 17 bytes, params: 3, frame: 2
return a0 + value;
}
function _fun36759(a0) { // fn#36759, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:35656, offset: 0x00d68953, size: 10 bytes, params: 2, frame: 1
return a0.name;
}
function value_36780(a0, a1) { // fn#36780, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:42548, offset: 0x01096ca7, size: 151 bytes, params: 3, frame: 16
var r0;
var property;
let _pingTimeouts = this._pingTimeouts;
_pingTimeouts.push(a0);
const length = this._pingTimeouts.length;
const value = length >= 3;
if (value) {
_pingTimeouts = this._pingTimeouts;
property = _pingTimeouts[length - 1];
_pingTimeouts = this._pingTimeouts;
r0 = property === _pingTimeouts[length - 2] + 1;
} else {
r0 = value;
}
if (r0) {
_pingTimeouts = this._pingTimeouts;
property = _pingTimeouts[length - 2];
_pingTimeouts = this._pingTimeouts;
r0 = property === _pingTimeouts[length - 3] + 1;
}
if (r0) {
this._handlePing(a1);
}
}
function value_36800(a0, a1) { // fn#36800, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4473:51439, offset: 0x01097c28, size: 134 bytes, params: 3, frame: 15
var r5;
let _secureFramesTransitionStates = this._secureFramesTransitionStates;
let value = _secureFramesTransitionStates.get(a0);
if (value != null) {
r5 = value;
} else {
value = this._storeSecureFrameNextTransitionData({});
this._secureFramesNextTransitionState = undefined;
r5 = value;
}
_secureFramesTransitionStates = this._secureFramesTransitionStates;
const set = _secureFramesTransitionStates.set;
const object = {};
copyDataProperties(object, a1, copyDataProperties(object, r5, r5));
Reflect.apply(set, _secureFramesTransitionStates, [a0, object]);
const Math = global.Math;
this._secureFramesMaxConcurrentTransitions = Math.max(this._secureFramesMaxConcurrentTransitions,
this._secureFramesTransitionStates.size);
}
global.__d(_fun36645, 4301, [5, 6, 7, 15, 17, 18, 4302, 4394, 9276, 9229, 1226, 1379, 1867, 4259, 4294, 10865, 4402,
1878, 661, 1880, 12386, 4291, 4303, 6949, 683, 1216, 3, 12387, 561, 491, 12389, 12391, 10682, 10866, 1458, 477,
3767, 1471, 694, 12392, 1391, 4405, 24, 4608, 12393, 12394, 12395, 10678, 4488, 5252, 12396, 12398, 12399,
12400, 4406, 12401, 12402, 12404, 7137, 12405, 4883, 12406, 12407, 8093, 12409, 4647, 1244, 1225, 4479,
2]) /* metro module 4301, dependencies: [5, 6, 7, 15, 17, 18, 4302, 4394, 9276, 9229, 1226, 1379, 1867, 4259, 4294, 10865, 4402, 1878, 661, 1880, 12386, 4291, 4303, 6949, 683, 1216, 3, 12387, 561, 491, 12389, 12391, 10682, 10866, 1458, 477, 3767, 1471, 694, 12392, 1391, 4405, 24, 4608, 12393, 12394, 12395, 10678, 4488, 5252, 12396, 12398, 12399, 12400, 4406, 12401, 12402, 12404, 7137, 12405, 4883, 12406, 12407, 8093, 12409, 4647, 1244, 1225, 4479, 2] */;