Primer paso de la investigacion. Se aportan el .apk, las carpetas con el apk extraido y el apk descompilado. El archivo API_DOCUMENTATION.md es un archivo donde se anotaran los descubrimientos del funcionamiento de la API, y los .py son scripts para probar la funcionalidad de la API con los métodos que vayamos encontrando. Finalmente, los archivos .js son scripts de Frida para extraer informacion de la APP durante la ejecucion.
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package kotlinx.coroutines.future;
|
||||
|
||||
import java.util.concurrent.CancellationException;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.BiFunction;
|
||||
import kotlin.Metadata;
|
||||
import kotlin.Unit;
|
||||
import kotlin.coroutines.CoroutineContext;
|
||||
import kotlinx.coroutines.AbstractCoroutine;
|
||||
import kotlinx.coroutines.Job;
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Metadata(d1 = {"\u0000.\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0010\u0003\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\b\n\u0002\u0010\u000b\n\u0002\b\u0003\b\u0002\u0018\u0000*\u0004\b\u0000\u0010\u00012\b\u0012\u0004\u0012\u0002H\u00010\u00022\u0018\u0012\u0006\u0012\u0004\u0018\u0001H\u0001\u0012\u0006\u0012\u0004\u0018\u00010\u0004\u0012\u0004\u0012\u00020\u00050\u0003B\u001b\u0012\u0006\u0010\u0006\u001a\u00020\u0007\u0012\f\u0010\b\u001a\b\u0012\u0004\u0012\u00028\u00000\t¢\u0006\u0002\u0010\nJ!\u0010\u000b\u001a\u00020\u00052\b\u0010\f\u001a\u0004\u0018\u00018\u00002\b\u0010\r\u001a\u0004\u0018\u00010\u0004H\u0016¢\u0006\u0002\u0010\u000eJ\u0018\u0010\u000f\u001a\u00020\u00052\u0006\u0010\u0010\u001a\u00020\u00042\u0006\u0010\u0011\u001a\u00020\u0012H\u0014J\u0015\u0010\u0013\u001a\u00020\u00052\u0006\u0010\f\u001a\u00028\u0000H\u0014¢\u0006\u0002\u0010\u0014R\u0014\u0010\b\u001a\b\u0012\u0004\u0012\u00028\u00000\tX\u0082\u0004¢\u0006\u0002\n\u0000¨\u0006\u0015"}, d2 = {"Lkotlinx/coroutines/future/CompletableFutureCoroutine;", "T", "Lkotlinx/coroutines/AbstractCoroutine;", "Ljava/util/function/BiFunction;", "", "", "context", "Lkotlin/coroutines/CoroutineContext;", "future", "Ljava/util/concurrent/CompletableFuture;", "(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CompletableFuture;)V", "apply", "value", "exception", "(Ljava/lang/Object;Ljava/lang/Throwable;)V", "onCancelled", "cause", "handled", "", "onCompleted", "(Ljava/lang/Object;)V", "kotlinx-coroutines-core"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
/* loaded from: classes3.dex */
|
||||
public final class CompletableFutureCoroutine<T> extends AbstractCoroutine<T> implements BiFunction<T, Throwable, Unit> {
|
||||
private final CompletableFuture<T> future;
|
||||
|
||||
public CompletableFutureCoroutine(CoroutineContext coroutineContext, CompletableFuture<T> completableFuture) {
|
||||
super(coroutineContext, true, true);
|
||||
this.future = completableFuture;
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Override // java.util.function.BiFunction
|
||||
public /* bridge */ /* synthetic */ Unit apply(Object obj, Throwable th) {
|
||||
apply2((CompletableFutureCoroutine<T>) obj, th);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
@Override // kotlinx.coroutines.AbstractCoroutine
|
||||
public void onCancelled(Throwable cause, boolean handled) {
|
||||
this.future.completeExceptionally(cause);
|
||||
}
|
||||
|
||||
@Override // kotlinx.coroutines.AbstractCoroutine
|
||||
public void onCompleted(T value) {
|
||||
this.future.complete(value);
|
||||
}
|
||||
|
||||
/* renamed from: apply, reason: avoid collision after fix types in other method */
|
||||
public void apply2(T value, Throwable exception) {
|
||||
Job.DefaultImpls.cancel$default((Job) this, (CancellationException) null, 1, (Object) null);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package kotlinx.coroutines.future;
|
||||
|
||||
import java.util.concurrent.CompletionException;
|
||||
import java.util.function.BiFunction;
|
||||
import kotlin.Metadata;
|
||||
import kotlin.Result;
|
||||
import kotlin.ResultKt;
|
||||
import kotlin.Unit;
|
||||
import kotlin.coroutines.Continuation;
|
||||
import kotlin.jvm.JvmField;
|
||||
|
||||
@Metadata(d1 = {"\u0000\u001c\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\u0003\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0006\b\u0002\u0018\u0000*\u0004\b\u0000\u0010\u00012\u0018\u0012\u0006\u0012\u0004\u0018\u0001H\u0001\u0012\u0006\u0012\u0004\u0018\u00010\u0003\u0012\u0004\u0012\u00020\u00040\u0002B\u0015\u0012\u000e\u0010\u0005\u001a\n\u0012\u0004\u0012\u00028\u0000\u0018\u00010\u0006¢\u0006\u0002\u0010\u0007J!\u0010\b\u001a\u00020\u00042\b\u0010\t\u001a\u0004\u0018\u00018\u00002\b\u0010\n\u001a\u0004\u0018\u00010\u0003H\u0016¢\u0006\u0002\u0010\u000bR\u001a\u0010\u0005\u001a\n\u0012\u0004\u0012\u00028\u0000\u0018\u00010\u00068\u0006@\u0006X\u0087\u000e¢\u0006\u0002\n\u0000¨\u0006\f"}, d2 = {"Lkotlinx/coroutines/future/ContinuationHandler;", "T", "Ljava/util/function/BiFunction;", "", "", "cont", "Lkotlin/coroutines/Continuation;", "(Lkotlin/coroutines/Continuation;)V", "apply", "result", "exception", "(Ljava/lang/Object;Ljava/lang/Throwable;)V", "kotlinx-coroutines-core"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
/* loaded from: classes3.dex */
|
||||
final class ContinuationHandler<T> implements BiFunction<T, Throwable, Unit> {
|
||||
|
||||
@JvmField
|
||||
public volatile Continuation<? super T> cont;
|
||||
|
||||
public ContinuationHandler(Continuation<? super T> continuation) {
|
||||
this.cont = continuation;
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Override // java.util.function.BiFunction
|
||||
public /* bridge */ /* synthetic */ Unit apply(Object obj, Throwable th) {
|
||||
apply2((ContinuationHandler<T>) obj, th);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
/* renamed from: apply, reason: avoid collision after fix types in other method */
|
||||
public void apply2(T result, Throwable exception) {
|
||||
Throwable cause;
|
||||
Continuation<? super T> continuation = this.cont;
|
||||
if (continuation == null) {
|
||||
return;
|
||||
}
|
||||
if (exception == null) {
|
||||
continuation.resumeWith(Result.m116constructorimpl(result));
|
||||
return;
|
||||
}
|
||||
CompletionException completionException = exception instanceof CompletionException ? (CompletionException) exception : null;
|
||||
if (completionException != null && (cause = completionException.getCause()) != null) {
|
||||
exception = cause;
|
||||
}
|
||||
Result.Companion companion = Result.INSTANCE;
|
||||
continuation.resumeWith(Result.m116constructorimpl(ResultKt.createFailure(exception)));
|
||||
}
|
||||
}
|
||||
224
apk_decompiled/sources/kotlinx/coroutines/future/FutureKt.java
Normal file
224
apk_decompiled/sources/kotlinx/coroutines/future/FutureKt.java
Normal file
@@ -0,0 +1,224 @@
|
||||
package kotlinx.coroutines.future;
|
||||
|
||||
import java.util.concurrent.CancellationException;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CompletionException;
|
||||
import java.util.concurrent.CompletionStage;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.function.BiFunction;
|
||||
import kotlin.Metadata;
|
||||
import kotlin.Unit;
|
||||
import kotlin.coroutines.Continuation;
|
||||
import kotlin.coroutines.CoroutineContext;
|
||||
import kotlin.coroutines.EmptyCoroutineContext;
|
||||
import kotlin.coroutines.intrinsics.IntrinsicsKt;
|
||||
import kotlin.coroutines.jvm.internal.DebugProbesKt;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import kotlin.jvm.functions.Function2;
|
||||
import kotlin.jvm.internal.SourceDebugExtension;
|
||||
import kotlinx.coroutines.CancellableContinuationImpl;
|
||||
import kotlinx.coroutines.CompletableDeferred;
|
||||
import kotlinx.coroutines.CompletableDeferredKt;
|
||||
import kotlinx.coroutines.CoroutineContextKt;
|
||||
import kotlinx.coroutines.CoroutineExceptionHandlerKt;
|
||||
import kotlinx.coroutines.CoroutineScope;
|
||||
import kotlinx.coroutines.CoroutineStart;
|
||||
import kotlinx.coroutines.Deferred;
|
||||
import kotlinx.coroutines.ExceptionsKt;
|
||||
import kotlinx.coroutines.Job;
|
||||
import kotlinx.coroutines.JobKt;
|
||||
|
||||
@Metadata(d1 = {"\u0000D\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\u001a\u001c\u0010\u0000\u001a\b\u0012\u0004\u0012\u0002H\u00020\u0001\"\u0004\b\u0000\u0010\u0002*\b\u0012\u0004\u0012\u0002H\u00020\u0003\u001a\u0010\u0010\u0000\u001a\b\u0012\u0004\u0012\u00020\u00040\u0001*\u00020\u0005\u001a\u001c\u0010\u0006\u001a\b\u0012\u0004\u0012\u0002H\u00020\u0003\"\u0004\b\u0000\u0010\u0002*\b\u0012\u0004\u0012\u0002H\u00020\u0007\u001a\u001e\u0010\b\u001a\u0002H\u0002\"\u0004\b\u0000\u0010\u0002*\b\u0012\u0004\u0012\u0002H\u00020\u0007H\u0086@¢\u0006\u0002\u0010\t\u001aX\u0010\n\u001a\b\u0012\u0004\u0012\u0002H\u00020\u0001\"\u0004\b\u0000\u0010\u0002*\u00020\u000b2\b\b\u0002\u0010\f\u001a\u00020\r2\b\b\u0002\u0010\u000e\u001a\u00020\u000f2'\u0010\u0010\u001a#\b\u0001\u0012\u0004\u0012\u00020\u000b\u0012\n\u0012\b\u0012\u0004\u0012\u0002H\u00020\u0012\u0012\u0006\u0012\u0004\u0018\u00010\u00130\u0011¢\u0006\u0002\b\u0014¢\u0006\u0002\u0010\u0015\u001a\u0018\u0010\u0016\u001a\u00020\u0004*\u00020\u00052\n\u0010\n\u001a\u0006\u0012\u0002\b\u00030\u0001H\u0002¨\u0006\u0017"}, d2 = {"asCompletableFuture", "Ljava/util/concurrent/CompletableFuture;", "T", "Lkotlinx/coroutines/Deferred;", "", "Lkotlinx/coroutines/Job;", "asDeferred", "Ljava/util/concurrent/CompletionStage;", "await", "(Ljava/util/concurrent/CompletionStage;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "future", "Lkotlinx/coroutines/CoroutineScope;", "context", "Lkotlin/coroutines/CoroutineContext;", "start", "Lkotlinx/coroutines/CoroutineStart;", "block", "Lkotlin/Function2;", "Lkotlin/coroutines/Continuation;", "", "Lkotlin/ExtensionFunctionType;", "(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Ljava/util/concurrent/CompletableFuture;", "setupCancellation", "kotlinx-coroutines-core"}, k = 2, mv = {1, 9, 0}, xi = 48)
|
||||
@SourceDebugExtension({"SMAP\nFuture.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Future.kt\nkotlinx/coroutines/future/FutureKt\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n+ 3 CancellableContinuation.kt\nkotlinx/coroutines/CancellableContinuationKt\n*L\n1#1,197:1\n1#2:198\n314#3,11:199\n*S KotlinDebug\n*F\n+ 1 Future.kt\nkotlinx/coroutines/future/FutureKt\n*L\n172#1:199,11\n*E\n"})
|
||||
/* loaded from: classes3.dex */
|
||||
public final class FutureKt {
|
||||
public static final <T> CompletableFuture<T> asCompletableFuture(final Deferred<? extends T> deferred) {
|
||||
final CompletableFuture<T> completableFuture = new CompletableFuture<>();
|
||||
setupCancellation(deferred, completableFuture);
|
||||
deferred.invokeOnCompletion(new Function1<Throwable, Unit>() { // from class: kotlinx.coroutines.future.FutureKt$asCompletableFuture$1
|
||||
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
{
|
||||
super(1);
|
||||
}
|
||||
|
||||
@Override // kotlin.jvm.functions.Function1
|
||||
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
|
||||
invoke2(th);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
/* renamed from: invoke, reason: avoid collision after fix types in other method */
|
||||
public final void invoke2(Throwable th) {
|
||||
try {
|
||||
completableFuture.complete(deferred.getCompleted());
|
||||
} catch (Throwable th2) {
|
||||
completableFuture.completeExceptionally(th2);
|
||||
}
|
||||
}
|
||||
});
|
||||
return completableFuture;
|
||||
}
|
||||
|
||||
public static final <T> Deferred<T> asDeferred(CompletionStage<T> completionStage) {
|
||||
Throwable cause;
|
||||
CompletableFuture<T> completableFuture = completionStage.toCompletableFuture();
|
||||
if (!completableFuture.isDone()) {
|
||||
final CompletableDeferred CompletableDeferred$default = CompletableDeferredKt.CompletableDeferred$default(null, 1, null);
|
||||
completionStage.handle(new a(new Function2<T, Throwable, Object>() { // from class: kotlinx.coroutines.future.FutureKt$asDeferred$2
|
||||
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||||
{
|
||||
super(2);
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Override // kotlin.jvm.functions.Function2
|
||||
public /* bridge */ /* synthetic */ Object invoke(Object obj, Throwable th) {
|
||||
return invoke2((FutureKt$asDeferred$2<T>) obj, th);
|
||||
}
|
||||
|
||||
/* renamed from: invoke, reason: avoid collision after fix types in other method */
|
||||
public final Object invoke2(T t2, Throwable th) {
|
||||
boolean completeExceptionally;
|
||||
Throwable cause2;
|
||||
try {
|
||||
if (th == null) {
|
||||
completeExceptionally = CompletableDeferred$default.complete(t2);
|
||||
} else {
|
||||
CompletableDeferred<T> completableDeferred = CompletableDeferred$default;
|
||||
CompletionException completionException = th instanceof CompletionException ? (CompletionException) th : null;
|
||||
if (completionException != null && (cause2 = completionException.getCause()) != null) {
|
||||
th = cause2;
|
||||
}
|
||||
completeExceptionally = completableDeferred.completeExceptionally(th);
|
||||
}
|
||||
return Boolean.valueOf(completeExceptionally);
|
||||
} catch (Throwable th2) {
|
||||
CoroutineExceptionHandlerKt.handleCoroutineException(EmptyCoroutineContext.INSTANCE, th2);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
}
|
||||
}, 0));
|
||||
JobKt.cancelFutureOnCompletion(CompletableDeferred$default, completableFuture);
|
||||
return CompletableDeferred$default;
|
||||
}
|
||||
try {
|
||||
return CompletableDeferredKt.CompletableDeferred(completableFuture.get());
|
||||
} catch (Throwable th) {
|
||||
th = th;
|
||||
ExecutionException executionException = th instanceof ExecutionException ? (ExecutionException) th : null;
|
||||
if (executionException != null && (cause = executionException.getCause()) != null) {
|
||||
th = cause;
|
||||
}
|
||||
CompletableDeferred CompletableDeferred$default2 = CompletableDeferredKt.CompletableDeferred$default(null, 1, null);
|
||||
CompletableDeferred$default2.completeExceptionally(th);
|
||||
return CompletableDeferred$default2;
|
||||
}
|
||||
}
|
||||
|
||||
public static final <T> Object await(CompletionStage<T> completionStage, Continuation<? super T> continuation) {
|
||||
final CompletableFuture<T> completableFuture = completionStage.toCompletableFuture();
|
||||
if (completableFuture.isDone()) {
|
||||
try {
|
||||
return completableFuture.get();
|
||||
} catch (ExecutionException e4) {
|
||||
Throwable cause = e4.getCause();
|
||||
if (cause == null) {
|
||||
throw e4;
|
||||
}
|
||||
throw cause;
|
||||
}
|
||||
}
|
||||
CancellableContinuationImpl cancellableContinuationImpl = new CancellableContinuationImpl(IntrinsicsKt.intercepted(continuation), 1);
|
||||
cancellableContinuationImpl.initCancellability();
|
||||
final ContinuationHandler continuationHandler = new ContinuationHandler(cancellableContinuationImpl);
|
||||
completionStage.handle(continuationHandler);
|
||||
cancellableContinuationImpl.invokeOnCancellation(new Function1<Throwable, Unit>() { // from class: kotlinx.coroutines.future.FutureKt$await$2$1
|
||||
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||||
{
|
||||
super(1);
|
||||
}
|
||||
|
||||
@Override // kotlin.jvm.functions.Function1
|
||||
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
|
||||
invoke2(th);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
/* renamed from: invoke, reason: avoid collision after fix types in other method */
|
||||
public final void invoke2(Throwable th) {
|
||||
completableFuture.cancel(false);
|
||||
continuationHandler.cont = null;
|
||||
}
|
||||
});
|
||||
Object result = cancellableContinuationImpl.getResult();
|
||||
if (result == IntrinsicsKt.getCOROUTINE_SUSPENDED()) {
|
||||
DebugProbesKt.probeCoroutineSuspended(continuation);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static final <T> CompletableFuture<T> future(CoroutineScope coroutineScope, CoroutineContext coroutineContext, CoroutineStart coroutineStart, Function2<? super CoroutineScope, ? super Continuation<? super T>, ? extends Object> function2) {
|
||||
if (coroutineStart.isLazy()) {
|
||||
throw new IllegalArgumentException((coroutineStart + " start is not supported").toString());
|
||||
}
|
||||
CoroutineContext newCoroutineContext = CoroutineContextKt.newCoroutineContext(coroutineScope, coroutineContext);
|
||||
CompletableFuture<T> completableFuture = new CompletableFuture<>();
|
||||
CompletableFutureCoroutine completableFutureCoroutine = new CompletableFutureCoroutine(newCoroutineContext, completableFuture);
|
||||
completableFuture.handle((BiFunction) completableFutureCoroutine);
|
||||
completableFutureCoroutine.start(coroutineStart, completableFutureCoroutine, function2);
|
||||
return completableFuture;
|
||||
}
|
||||
|
||||
public static /* synthetic */ CompletableFuture future$default(CoroutineScope coroutineScope, CoroutineContext coroutineContext, CoroutineStart coroutineStart, Function2 function2, int i, Object obj) {
|
||||
if ((i & 1) != 0) {
|
||||
coroutineContext = EmptyCoroutineContext.INSTANCE;
|
||||
}
|
||||
if ((i & 2) != 0) {
|
||||
coroutineStart = CoroutineStart.DEFAULT;
|
||||
}
|
||||
return future(coroutineScope, coroutineContext, coroutineStart, function2);
|
||||
}
|
||||
|
||||
private static final void setupCancellation(Job job, CompletableFuture<?> completableFuture) {
|
||||
completableFuture.handle((BiFunction<? super Object, Throwable, ? extends U>) new a(job, 1));
|
||||
}
|
||||
|
||||
public static final Unit setupCancellation$lambda$2(Job job, Object obj, Throwable th) {
|
||||
if (th != null) {
|
||||
r2 = th instanceof CancellationException ? (CancellationException) th : null;
|
||||
if (r2 == null) {
|
||||
r2 = ExceptionsKt.CancellationException("CompletableFuture was completed exceptionally", th);
|
||||
}
|
||||
}
|
||||
job.cancel(r2);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
public static final CompletableFuture<Unit> asCompletableFuture(Job job) {
|
||||
final CompletableFuture<Unit> completableFuture = new CompletableFuture<>();
|
||||
setupCancellation(job, completableFuture);
|
||||
job.invokeOnCompletion(new Function1<Throwable, Unit>() { // from class: kotlinx.coroutines.future.FutureKt$asCompletableFuture$2
|
||||
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||||
{
|
||||
super(1);
|
||||
}
|
||||
|
||||
@Override // kotlin.jvm.functions.Function1
|
||||
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
|
||||
invoke2(th);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
/* renamed from: invoke, reason: avoid collision after fix types in other method */
|
||||
public final void invoke2(Throwable th) {
|
||||
if (th == null) {
|
||||
completableFuture.complete(Unit.INSTANCE);
|
||||
} else {
|
||||
completableFuture.completeExceptionally(th);
|
||||
}
|
||||
}
|
||||
});
|
||||
return completableFuture;
|
||||
}
|
||||
}
|
||||
32
apk_decompiled/sources/kotlinx/coroutines/future/a.java
Normal file
32
apk_decompiled/sources/kotlinx/coroutines/future/a.java
Normal file
@@ -0,0 +1,32 @@
|
||||
package kotlinx.coroutines.future;
|
||||
|
||||
import java.util.function.BiFunction;
|
||||
import kotlin.jvm.functions.Function2;
|
||||
import kotlinx.coroutines.Job;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public final /* synthetic */ class a implements BiFunction {
|
||||
|
||||
/* renamed from: a, reason: collision with root package name */
|
||||
public final /* synthetic */ int f7155a;
|
||||
|
||||
/* renamed from: b, reason: collision with root package name */
|
||||
public final /* synthetic */ Object f7156b;
|
||||
|
||||
public /* synthetic */ a(Object obj, int i) {
|
||||
this.f7155a = i;
|
||||
this.f7156b = obj;
|
||||
}
|
||||
|
||||
@Override // java.util.function.BiFunction
|
||||
public final Object apply(Object obj, Object obj2) {
|
||||
int i = this.f7155a;
|
||||
Object obj3 = this.f7156b;
|
||||
switch (i) {
|
||||
case 0:
|
||||
return FutureKt.a((Function2) obj3, obj, (Throwable) obj2);
|
||||
default:
|
||||
return FutureKt.b((Job) obj3, obj, (Throwable) obj2);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user