# {"id":"partitionSourceFiles","fileNameMappings":{"kotlinx.coroutines.sync.SemaphoreKt":"Semaphore.kt"}}
kotlinx.coroutines.sync.SemaphoreAndMutexImpl -> ti2:
# {"id":"sourceFile","fileName":"Semaphore.kt"}
    int permits -> a
    kotlin.jvm.functions.Function3 onCancellationRelease -> b
      # {"id":"com.android.tools.r8.residualsignature","signature":"Lc4;"}
    java.util.concurrent.atomic.AtomicReferenceFieldUpdater head$volatile$FU -> c
    java.util.concurrent.atomic.AtomicLongFieldUpdater deqIdx$volatile$FU -> d
    java.util.concurrent.atomic.AtomicReferenceFieldUpdater tail$volatile$FU -> e
    java.util.concurrent.atomic.AtomicLongFieldUpdater enqIdx$volatile$FU -> f
    java.util.concurrent.atomic.AtomicIntegerFieldUpdater _availablePermits$volatile$FU -> g
    long head$volatile$FU$offset -> h
      # {"id":"com.android.tools.r8.synthesized"}
    long tail$volatile$FU$offset -> i
      # {"id":"com.android.tools.r8.synthesized"}
    1:67:void <clinit>():0:0 -> <clinit>
    1:3:void <init>(int,int):89:89 -> <init>
    1:3:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
      # {"id":"com.android.tools.r8.synthesized"}
    4:9:void <init>(int,int):90:90 -> <init>
    4:9:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    10:18:void <init>(int,int):134:134 -> <init>
    10:18:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    19:20:void <init>(int,int):135:135 -> <init>
    19:20:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    21:22:void <init>(int,int):136:136 -> <init>
    21:22:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    23:24:void <init>(int,int):146:146 -> <init>
    23:24:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    25:34:void <init>(int,int):149:149 -> <init>
    25:34:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    35:36:void <init>(int,int):133:133 -> <init>
    35:36:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    37:40:void SemaphoreAndMutexImpl.<init>(int):0:0 -> <init>
    41:45:void <init>(int,int):133:133 -> <init>
    41:45:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    46:47:void <init>(int,int):132:132 -> <init>
    46:47:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    48:51:void SemaphoreAndMutexImpl.<init>(int):0:0 -> <init>
    52:56:void <init>(int,int):132:132 -> <init>
    52:56:void SemaphoreAndMutexImpl.<init>(int):0 -> <init>
    5:6:java.util.concurrent.atomic.AtomicReferenceFieldUpdater getTail$volatile$FU():0:0 -> a
    5:6:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):281 -> a
      # {"id":"com.android.tools.r8.residualsignature","signature":"(Lib3;)Z"}
    7:20:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):281:281 -> a
    21:22:java.util.concurrent.atomic.AtomicLongFieldUpdater getEnqIdx$volatile$FU():0:0 -> a
    21:22:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):282 -> a
    23:26:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):282:282 -> a
    27:28:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):283:283 -> a
    29:31:int kotlinx.coroutines.sync.SemaphoreKt.access$getSEGMENT_SIZE$p():1:1 -> a
    29:31:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):284 -> a
    32:33:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):284:284 -> a
    34:37:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):431:431 -> a
    38:47:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):432:432 -> a
    48:56:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):433:433 -> a
    57:67:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):434:434 -> a
    68:76:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):435:435 -> a
    77:88:boolean java.util.concurrent.atomic.AtomicReferenceFieldUpdater.compareAndSet(java.lang.Object,java.lang.Object,java.lang.Object):0:0 -> a
    77:88:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):436 -> a
    89:98:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):437:437 -> a
    99:104:boolean java.util.concurrent.atomic.AtomicReferenceFieldUpdater.compareAndSet(java.lang.Object,java.lang.Object,java.lang.Object):0:0 -> a
    99:104:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):436 -> a
    105:114:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):440:440 -> a
    115:122:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):285:285 -> a
    123:125:int kotlinx.coroutines.sync.SemaphoreKt.access$getSEGMENT_SIZE$p():1:1 -> a
    123:125:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):286 -> a
    126:128:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):286:286 -> a
    129:135:boolean java.util.concurrent.atomic.AtomicReferenceArray.compareAndSet(int,java.lang.Object,java.lang.Object):0:0 -> a
    129:135:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):442 -> a
    136:139:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):289:289 -> a
    140:145:boolean java.util.concurrent.atomic.AtomicReferenceArray.compareAndSet(int,java.lang.Object,java.lang.Object):0:0 -> a
    140:145:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):442 -> a
    146:147:kotlinx.coroutines.internal.Symbol kotlinx.coroutines.sync.SemaphoreKt.access$getPERMIT$p():1:1 -> a
    146:147:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):294 -> a
    148:149:kotlinx.coroutines.internal.Symbol kotlinx.coroutines.sync.SemaphoreKt.access$getTAKEN$p():1:1 -> a
    148:149:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):294 -> a
    150:155:boolean java.util.concurrent.atomic.AtomicReferenceArray.compareAndSet(int,java.lang.Object,java.lang.Object):0:0 -> a
    150:155:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):443 -> a
    156:158:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):298:298 -> a
    159:166:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):299:299 -> a
    167:174:boolean java.util.concurrent.atomic.AtomicReferenceArray.compareAndSet(int,java.lang.Object,java.lang.Object):0:0 -> a
    167:174:boolean addAcquireToQueue(kotlinx.coroutines.Waiter):443 -> a
    1:6:void release():245:245 -> b
    7:13:void release():248:248 -> b
    14:20:void release():260:260 -> b
    21:26:void coerceAvailablePermitsAtMaximum():271:271 -> b
    21:26:void release():251 -> b
    27:33:void coerceAvailablePermitsAtMaximum():273:273 -> b
    27:33:void release():251 -> b
    34:35:void release():251:251 -> b
    36:57:void release():252:252 -> b
    1:2:java.util.concurrent.atomic.AtomicReferenceFieldUpdater getHead$volatile$FU():0:0 -> c
    1:2:boolean tryResumeNextFromQueue():314 -> c
    3:16:boolean tryResumeNextFromQueue():314:314 -> c
    17:18:java.util.concurrent.atomic.AtomicLongFieldUpdater getDeqIdx$volatile$FU():0:0 -> c
    17:18:boolean tryResumeNextFromQueue():315 -> c
    19:22:boolean tryResumeNextFromQueue():315:315 -> c
    23:25:int kotlinx.coroutines.sync.SemaphoreKt.access$getSEGMENT_SIZE$p():1:1 -> c
    23:25:boolean tryResumeNextFromQueue():316 -> c
    26:27:boolean tryResumeNextFromQueue():316:316 -> c
    28:29:boolean tryResumeNextFromQueue():317:317 -> c
    30:33:boolean tryResumeNextFromQueue():446:446 -> c
    34:43:boolean tryResumeNextFromQueue():447:447 -> c
    44:52:boolean tryResumeNextFromQueue():448:448 -> c
    53:61:boolean tryResumeNextFromQueue():449:449 -> c
    62:68:boolean tryResumeNextFromQueue():450:450 -> c
    69:79:boolean java.util.concurrent.atomic.AtomicReferenceFieldUpdater.compareAndSet(java.lang.Object,java.lang.Object,java.lang.Object):0:0 -> c
    69:79:boolean tryResumeNextFromQueue():451 -> c
    80:89:boolean tryResumeNextFromQueue():452:452 -> c
    90:95:boolean java.util.concurrent.atomic.AtomicReferenceFieldUpdater.compareAndSet(java.lang.Object,java.lang.Object,java.lang.Object):0:0 -> c
    90:95:boolean tryResumeNextFromQueue():451 -> c
    96:105:boolean tryResumeNextFromQueue():455:455 -> c
    106:113:boolean tryResumeNextFromQueue():319:319 -> c
    114:116:boolean tryResumeNextFromQueue():320:320 -> c
    117:124:boolean tryResumeNextFromQueue():321:321 -> c
    125:127:int kotlinx.coroutines.sync.SemaphoreKt.access$getSEGMENT_SIZE$p():1:1 -> c
    125:127:boolean tryResumeNextFromQueue():322 -> c
    128:129:boolean tryResumeNextFromQueue():322:322 -> c
    130:131:kotlinx.coroutines.internal.Symbol kotlinx.coroutines.sync.SemaphoreKt.access$getPERMIT$p():1:1 -> c
    130:131:boolean tryResumeNextFromQueue():323 -> c
    132:138:boolean tryResumeNextFromQueue():457:457 -> c
    139:143:int kotlinx.coroutines.sync.SemaphoreKt.access$getMAX_SPIN_CYCLES$p():1:1 -> c
    139:143:boolean tryResumeNextFromQueue():328 -> c
    144:147:boolean tryResumeNextFromQueue():458:458 -> c
    148:155:kotlinx.coroutines.internal.Symbol kotlinx.coroutines.sync.SemaphoreKt.access$getTAKEN$p():1:1 -> c
    148:155:boolean tryResumeNextFromQueue():329 -> c
    156:157:kotlinx.coroutines.internal.Symbol kotlinx.coroutines.sync.SemaphoreKt.access$getPERMIT$p():1:1 -> c
    156:157:boolean tryResumeNextFromQueue():332 -> c
    158:159:kotlinx.coroutines.internal.Symbol kotlinx.coroutines.sync.SemaphoreKt.access$getBROKEN$p():1:1 -> c
    158:159:boolean tryResumeNextFromQueue():332 -> c
    160:176:boolean java.util.concurrent.atomic.AtomicReferenceArray.compareAndSet(int,java.lang.Object,java.lang.Object):0:0 -> c
    160:176:boolean tryResumeNextFromQueue():459 -> c
    177:181:kotlinx.coroutines.internal.Symbol kotlinx.coroutines.sync.SemaphoreKt.access$getCANCELLED$p():1:1 -> c
    177:181:boolean tryResumeNextFromQueue():334 -> c
    182:185:boolean tryResumeAcquire(java.lang.Object):340:340 -> c
    182:185:boolean tryResumeNextFromQueue():335 -> c
    186:187:boolean tryResumeAcquire(java.lang.Object):341:341 -> c
    186:187:boolean tryResumeNextFromQueue():335 -> c
    188:197:boolean tryResumeAcquire(java.lang.Object):342:342 -> c
    188:197:boolean tryResumeNextFromQueue():335 -> c
    198:202:boolean tryResumeAcquire(java.lang.Object):344:344 -> c
    198:202:boolean tryResumeNextFromQueue():335 -> c
    203:208:boolean tryResumeAcquire(java.lang.Object):351:351 -> c
    203:208:boolean tryResumeNextFromQueue():335 -> c
