From 701a52d53fac1c270f800ba8b1a0caa7a3f9b91d Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Thu, 23 Oct 2025 14:28:38 +0200 Subject: [PATCH 01/12] feat(r8): Support outline and outlineCallsite annotations --- src/builder.rs | 25 ++++++++++ src/mapper.rs | 130 +++++++++++++++++++++++++++++++++++++++++++------ src/mapping.rs | 67 +++++++++++++++++++++++++ tests/r8.rs | 94 +++++++++++++++++++++++++++++++++++ 4 files changed, 300 insertions(+), 16 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 52e415b..b34cdf0 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -117,6 +117,8 @@ pub(crate) struct MethodKey<'s> { pub(crate) struct MethodInfo { /// Whether this method was synthesized by the compiler. pub(crate) is_synthesized: bool, + /// Whether this method is an outline. + pub(crate) is_outline: bool, } /// A member record in a Proguard file. @@ -143,6 +145,10 @@ pub(crate) struct Members<'s> { /// The complete list of members for the class and method, /// grouped by arguments string. pub(crate) by_params: HashMap<&'s str, Vec>>, + /// Optional outline callsite positions map for this obfuscated method. + pub(crate) outline_callsite_positions: Option>, + /// Whether this obfuscated method is an outline method. + pub(crate) method_is_outline: bool, } /// A parsed representation of a [`ProguardMapping`]. @@ -196,6 +202,8 @@ impl<'s> ParsedProguardMapping<'s> { current_class.source_file = Some(file_name) } R8Header::Synthesized => current_class.is_synthesized = true, + R8Header::Outline => {} + R8Header::OutlineCallsite { .. } => {} R8Header::Other => {} } @@ -264,6 +272,23 @@ impl<'s> ParsedProguardMapping<'s> { while let Some(ProguardRecord::R8Header(r8_header)) = records.peek() { match r8_header { R8Header::Synthesized => method_info.is_synthesized = true, + R8Header::Outline => { + method_info.is_outline = true; + members.method_is_outline = true; + } + R8Header::OutlineCallsite { + positions, + outline: _, + } => { + // Attach outline callsite mapping to the current obfuscated method. + let map: HashMap = positions + .iter() + .filter_map(|(k, v)| k.parse::().ok().map(|kk| (kk, *v))) + .collect(); + if !map.is_empty() { + members.outline_callsite_positions = Some(map); + } + } R8Header::SourceFile { .. } | R8Header::Other => {} } diff --git a/src/mapper.rs b/src/mapper.rs index 79ace5e..fad3b0d 100644 --- a/src/mapper.rs +++ b/src/mapper.rs @@ -61,6 +61,7 @@ struct MemberMapping<'s> { original_startline: usize, original_endline: Option, is_synthesized: bool, + is_outline: bool, } #[derive(Clone, Debug, Default)] @@ -68,6 +69,8 @@ struct ClassMembers<'s> { all_mappings: Vec>, // method_params -> Vec[MemberMapping] mappings_by_params: HashMap<&'s str, Vec>>, + outline_callsite_positions: Option>, + method_is_outline: bool, } #[derive(Clone, Debug, Default)] @@ -278,6 +281,10 @@ impl<'s> ProguardMapper<'s> { param_mappings.push(Self::resolve_mapping(&parsed, *member)); } } + + // Propagate outline callsite info if present + method_mappings.outline_callsite_positions = members.outline_callsite_positions.clone(); + method_mappings.method_is_outline = members.method_is_outline; } Self { @@ -306,6 +313,7 @@ impl<'s> ProguardMapper<'s> { .copied() .unwrap_or_default(); let is_synthesized = method_info.is_synthesized; + let is_outline = method_info.is_outline; MemberMapping { startline: member.startline, @@ -316,9 +324,72 @@ impl<'s> ProguardMapper<'s> { original_startline: member.original_startline, original_endline: member.original_endline, is_synthesized, + is_outline, } } + /// If the previous frame was an outline and carried a position, attempt to + /// map that outline position to a callsite position for the given method. + fn map_outline_position(&self, class: &str, method: &str, pos: usize) -> Option { + self.classes + .get(class) + .and_then(|c| c.members.get(method)) + .and_then(|ms| ms.outline_callsite_positions.as_ref()) + .and_then(|m| m.get(&pos).copied()) + } + + /// Determines if a frame refers to an outline method, either via the + /// method-level flag or via any matching mapping entry for the frame line. + fn is_outline_frame( + &self, + class: &str, + method: &str, + line: usize, + parameters: Option<&str>, + ) -> bool { + self.classes + .get(class) + .and_then(|c| c.members.get(method)) + .map(|ms| { + if ms.method_is_outline { + return true; + } + let mappings: &[_] = if let Some(params) = parameters { + match ms.mappings_by_params.get(params) { + Some(v) => &v[..], + None => &[], + } + } else { + &ms.all_mappings[..] + }; + mappings.iter().any(|m| { + m.is_outline && (m.endline == 0 || (line >= m.startline && line <= m.endline)) + }) + }) + .unwrap_or(false) + } + + /// Applies any carried outline position to the frame line and determines if + /// the (original) frame is an outline. Returns the adjusted frame and flag. + fn prepare_frame_for_mapping<'a>( + &self, + frame: &StackFrame<'a>, + carried_outline_pos: &mut Option, + ) -> (StackFrame<'a>, bool) { + let mut effective = frame.clone(); + if let Some(pos) = carried_outline_pos.take() { + if let Some(mapped) = self.map_outline_position(effective.class, effective.method, pos) + { + effective.line = mapped; + } + } + + let is_outline = + self.is_outline_frame(frame.class, frame.method, frame.line, frame.parameters); + + (effective, is_outline) + } + /// Remaps an obfuscated Class. /// /// This works on the fully-qualified name of the class, with its complete @@ -423,12 +494,26 @@ impl<'s> ProguardMapper<'s> { pub fn remap_stacktrace(&self, input: &str) -> Result { let mut stacktrace = String::new(); let mut lines = input.lines(); + let mut carried_outline_pos: Option = None; if let Some(line) = lines.next() { match stacktrace::parse_throwable(line) { None => match stacktrace::parse_frame(line) { None => writeln!(&mut stacktrace, "{line}")?, - Some(frame) => format_frames(&mut stacktrace, line, self.remap_frame(&frame))?, + Some(frame) => { + let (effective_frame, is_outline) = + self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); + + if is_outline { + carried_outline_pos = Some(frame.line); + } else { + format_frames( + &mut stacktrace, + line, + self.remap_frame(&effective_frame), + )?; + } + } }, Some(throwable) => { format_throwable(&mut stacktrace, line, self.remap_throwable(&throwable))? @@ -447,7 +532,16 @@ impl<'s> ProguardMapper<'s> { format_cause(&mut stacktrace, line, self.remap_throwable(&cause))? } }, - Some(frame) => format_frames(&mut stacktrace, line, self.remap_frame(&frame))?, + Some(frame) => { + let (effective_frame, is_outline) = + self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); + + if is_outline { + carried_outline_pos = Some(frame.line); + } else { + format_frames(&mut stacktrace, line, self.remap_frame(&effective_frame))?; + } + } } } Ok(stacktrace) @@ -460,20 +554,24 @@ impl<'s> ProguardMapper<'s> { .as_ref() .and_then(|t| self.remap_throwable(t)); - let frames = - trace - .frames - .iter() - .fold(Vec::with_capacity(trace.frames.len()), |mut frames, f| { - let mut peek_frames = self.remap_frame(f).peekable(); - if peek_frames.peek().is_some() { - frames.extend(peek_frames); - } else { - frames.push(f.clone()); - } + let mut carried_outline_pos: Option = None; + let mut frames_out = Vec::with_capacity(trace.frames.len()); + for f in trace.frames.iter() { + let (effective, is_outline) = + self.prepare_frame_for_mapping(f, &mut carried_outline_pos); + + if is_outline { + carried_outline_pos = Some(f.line); + continue; + } - frames - }); + let mut iter = self.remap_frame(&effective).peekable(); + if iter.peek().is_some() { + frames_out.extend(iter); + } else { + frames_out.push(f.clone()); + } + } let cause = trace .cause @@ -482,7 +580,7 @@ impl<'s> ProguardMapper<'s> { StackTrace { exception, - frames, + frames: frames_out, cause, } } diff --git a/src/mapping.rs b/src/mapping.rs index fb8d1bf..bf780d2 100644 --- a/src/mapping.rs +++ b/src/mapping.rs @@ -317,6 +317,26 @@ pub enum R8Header<'s> { #[serde(rename = "com.android.tools.r8.synthesized")] Synthesized, + /// An outline header, stating that the method is an outline. + /// + /// See . + #[serde(rename = "com.android.tools.r8.outline")] + Outline, + + /// An outline callsite header, providing a mapping from outline positions + /// to callsite positions for a particular outline method. + /// + /// See . + /// The `outline` key (residual descriptor of the outline) was added in 2.2 + /// and is therefore optional. We also parse it, but we don't use it. + #[serde(rename_all = "camelCase")] + #[serde(rename = "com.android.tools.r8.outlineCallsite")] + OutlineCallsite { + positions: std::collections::HashMap<&'s str, usize>, + #[serde(default)] + outline: Option<&'s str>, + }, + /// Catchall variant for headers we don't support. #[serde(other)] Other, @@ -1147,4 +1167,51 @@ androidx.activity.OnBackPressedCallback ], ); } + + #[test] + fn try_parse_header_outline() { + let bytes = br#"# {"id":"com.android.tools.r8.outline"}"#; + assert_eq!( + ProguardRecord::try_parse(bytes).unwrap(), + ProguardRecord::R8Header(R8Header::Outline) + ); + } + + #[test] + fn try_parse_header_outline_callsite_without_outline_key() { + let bytes = + br#"# {"id":"com.android.tools.r8.outlineCallsite","positions":{"1:1":10,"2:3":42}}"#; + let parsed = ProguardRecord::try_parse(bytes).unwrap(); + + let mut expected_positions: std::collections::HashMap<&str, usize> = + std::collections::HashMap::new(); + expected_positions.insert("1:1", 10); + expected_positions.insert("2:3", 42); + + assert_eq!( + parsed, + ProguardRecord::R8Header(R8Header::OutlineCallsite { + positions: expected_positions, + outline: None, + }) + ); + } + + #[test] + fn try_parse_header_outline_callsite_with_outline_key() { + let bytes = br#"# {"id":"com.android.tools.r8.outlineCallsite","positions":{"5:7":13},"outline":"Lcom/example/Outline;->m()V"}"#; + let parsed = ProguardRecord::try_parse(bytes).unwrap(); + + let mut expected_positions: std::collections::HashMap<&str, usize> = + std::collections::HashMap::new(); + expected_positions.insert("5:7", 13); + + assert_eq!( + parsed, + ProguardRecord::R8Header(R8Header::OutlineCallsite { + positions: expected_positions, + outline: Some("Lcom/example/Outline;->m()V"), + }) + ); + } } diff --git a/tests/r8.rs b/tests/r8.rs index 2d9e15d..f5540f3 100644 --- a/tests/r8.rs +++ b/tests/r8.rs @@ -5,6 +5,8 @@ use proguard::{ProguardMapper, ProguardMapping, StackFrame}; static MAPPING_R8: &[u8] = include_bytes!("res/mapping-r8.txt"); static MAPPING_R8_SYMBOLICATED_FILE_NAMES: &[u8] = include_bytes!("res/mapping-r8-symbolicated_file_names.txt"); +static MAPPING_OUTLINE: &[u8] = include_bytes!("res/mapping-outline.txt"); +static MAPPING_OUTLINE_COMPLEX: &[u8] = include_bytes!("res/mapping-outline-complex.txt"); static MAPPING_WIN_R8: LazyLock> = LazyLock::new(|| { MAPPING_R8 @@ -131,3 +133,95 @@ fn test_remap_source_file() { at android.view.View.performClickInternal(View.java:7636) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)"#.trim(), test.unwrap().trim()); } + +#[test] +fn test_remap_outlines() { + let mapping = ProguardMapping::new(MAPPING_OUTLINE_COMPLEX); + + let mapper = ProguardMapper::new(mapping); + + let test = mapper.remap_stacktrace( + r#" + java.lang.IllegalStateException: Oops! + at ev.h.b(SourceFile:3) + at uu0.k.l(SourceFile:43) + at b80.f.a(SourceFile:33) + at er3.f.invoke(SourceFile:3) + at yv0.g.d(SourceFile:17) + at er3.g$a.invoke(SourceFile:36) + at h1.p0.d(SourceFile:5) + at p1.k.c(SourceFile:135) + at h1.y.A(SourceFile:111) + at h1.y.m(SourceFile:6) + at h1.e3.invoke(SourceFile:231) + at w2.r0$c.doFrame(SourceFile:7) + at w2.q0$c.doFrame(SourceFile:48) + at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1899)"#, + ); + + assert_eq!(r#" + java.lang.IllegalStateException: Oops! + at com.example.projection.MapProjectionViewController.onProjectionView(MapProjectionViewController.kt:160) + at com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(MapProjectionViewController.kt:133) + at com.example.projection.MapProjectionViewController.createProjectionMarker(MapProjectionViewController.kt:79) + at com.example.MapAnnotations.createProjectionMarker(MapAnnotations.kt:63) + at com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker(DotRendererDelegate.kt:101) + at com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render(DotRendererDelegate.kt:34) + at com.example.mapcomponents.marker.currentlocation.CurrentLocationRenderer.render(CurrentLocationRenderer.kt:39) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1$mapReadyCallback$1.invoke(CurrentLocationMarkerMapCollection.kt:36) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1$mapReadyCallback$1.invoke(CurrentLocationMarkerMapCollection.kt:36) + at com.example.mapbox.MapboxMapView.addMapReadyCallback(MapboxMapView.kt:368) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1.invoke(CurrentLocationMarkerMapCollection.kt:40) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1.invoke(CurrentLocationMarkerMapCollection.kt:35) + at androidx.compose.runtime.DisposableEffectImpl.onRemembered(Effects.kt:85) + at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberList(RememberEventDispatcher.kt:253) + at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:225) + at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1122) + at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1149) + at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(Recomposer.kt:705) + at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:39) + at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:108) + at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41) + at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69) + at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1899)"#.trim(), test.unwrap().trim()); +} + +#[test] +fn test_outline_header_parsing() { + let mapping = ProguardMapping::new(MAPPING_OUTLINE); + assert!(mapping.is_valid()); + + let mapper = ProguardMapper::new(mapping); + + // Test that we can remap the outline class + let class = mapper.remap_class("a"); + assert_eq!(class, Some("outline.Class")); + + // Test that we can remap the other class + let class = mapper.remap_class("b"); + assert_eq!(class, Some("some.Class")); +} + +#[test] +fn test_outline_frame_retracing() { + let mapping = ProguardMapping::new(MAPPING_OUTLINE); + let mapper = ProguardMapper::new(mapping); + + // Test retracing a frame from the outline class + let mut mapped = mapper.remap_frame(&StackFrame::new("a", "a", 1)); + + assert_eq!( + mapped.next().unwrap(), + StackFrame::new("outline.Class", "outline", 1) + ); + assert_eq!(mapped.next(), None); + + // Test retracing a frame from the class with outlineCallsite + let mut mapped = mapper.remap_frame(&StackFrame::new("b", "s", 27)); + + assert_eq!( + mapped.next().unwrap(), + StackFrame::new("some.Class", "outlineCaller", 0) + ); + assert_eq!(mapped.next(), None); +} From 151753b55d4b7fc814a1940776b8377293e09583 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Thu, 23 Oct 2025 14:28:49 +0200 Subject: [PATCH 02/12] Add fixtures --- tests/res/mapping-outline-complex.txt | 2075 +++++++++++++++++++++++++ tests/res/mapping-outline.txt | 11 + 2 files changed, 2086 insertions(+) create mode 100644 tests/res/mapping-outline-complex.txt create mode 100644 tests/res/mapping-outline.txt diff --git a/tests/res/mapping-outline-complex.txt b/tests/res/mapping-outline-complex.txt new file mode 100644 index 0000000..e7376e3 --- /dev/null +++ b/tests/res/mapping-outline-complex.txt @@ -0,0 +1,2075 @@ +# compiler: R8 +# compiler_version: 2.0 +# min_api: 15 +com.example.compose.component.CanvasAttributeLayoutKt$$ExternalSyntheticOutline0 -> ev.h: +# {"id":"sourceFile","fileName":"R8$$SyntheticClass"} +# {"id":"com.android.tools.r8.synthesized"} + 1:1:void ev.CanvasAttributeLayoutKt$$ExternalSyntheticOutline0.m(android.media.MediaMetadataRetriever):0:0 -> a + # {"id":"com.android.tools.r8.synthesized"} + 1:2:void ev.CanvasAttributeLayoutKt$$ExternalSyntheticOutline0.m(java.lang.String,me.example.logging.L):0:0 -> b + # {"id":"com.android.tools.r8.synthesized"} + # {"id":"com.android.tools.r8.outline"} + 3:5:void ev.CanvasAttributeLayoutKt$$ExternalSyntheticOutline0.m(java.lang.String,me.example.logging.L):1:1 -> b + 6:9:void ev.CanvasAttributeLayoutKt$$ExternalSyntheticOutline0.m(java.lang.String,me.example.logging.L):2:2 -> b +com.example.compose.component.CanvasAttributeLayoutKt$CanvasAttributeLayout$1 -> ev.i: +# {"id":"sourceFile","fileName":"CanvasAttributeLayout.kt"} + com.example.models.CanvasAttributeLayout $this_CanvasAttributeLayout -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lpw/o;"} + com.example.compose.component.CanvasNodeCommonRenderState $state -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"Lev/r5;"} + kotlin.jvm.functions.Function1 $onEvent -> c + kotlin.jvm.functions.Function4 $childContent -> d + # {"id":"com.android.tools.r8.residualsignature","signature":"Lp1/e;"} + androidx.compose.ui.Modifier $modifier -> e + # {"id":"com.android.tools.r8.residualsignature","signature":"Landroidx/compose/ui/d;"} + int $$changed -> f + 1:17:void (com.example.models.CanvasAttributeLayout,com.example.compose.component.CanvasNodeCommonRenderState,kotlin.jvm.functions.Function1,kotlin.jvm.functions.Function4,androidx.compose.ui.Modifier,int,int):0:0 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lpw/o;Lev/r5;Lkotlin/jvm/functions/Function1;Lp1/e;Landroidx/compose/ui/d;I)V"} + 9:29:void invoke(androidx.compose.runtime.Composer,int):0:0 -> invoke + 9:29:java.lang.Object invoke(java.lang.Object,java.lang.Object):0 -> invoke + 30:32:java.lang.Object invoke(java.lang.Object,java.lang.Object):0:0 -> invoke +com.example.MapAnnotations -> uu0.k: +# {"id":"sourceFile","fileName":"MapAnnotations.kt"} + com.example.core.IMapView mapView -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lbv0/i;"} + com.example.core.projection.overlay.IMapOverlayViewController mapOverlayViewController -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"La14/j;"} + com.example.projection.MapProjectionViewController mapProjectionViewController -> c + # {"id":"com.android.tools.r8.residualsignature","signature":"Lmw0/f;"} + com.example.core.polygon.PolygonManager polygonManager -> d + # {"id":"com.android.tools.r8.residualsignature","signature":"Liv0/j;"} + com.example.dynamic.IKillSwitchProvider killSwitchProvider -> e + # {"id":"com.android.tools.r8.residualsignature","signature":"Lcom/example/o;"} + me.example.rx.RxUIBinder binder -> f + android.content.Context mapContext -> g + 1:3:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):36:36 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lbv0/i;La14/j;Lmw0/f;Liv0/j;Lcom/example/o;)V"} + 4:5:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):37:37 -> + 6:7:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):38:38 -> + 8:9:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):39:39 -> + 10:11:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):40:40 -> + 12:13:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):41:41 -> + 14:22:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):44:44 -> + 23:29:void (com.example.core.IMapView,com.example.core.projection.overlay.IMapOverlayViewController,com.example.projection.MapProjectionViewController,com.example.core.polygon.PolygonManager,com.example.dynamic.IKillSwitchProvider):46:46 -> + 6:11:void setGeoJson(java.lang.String,java.lang.String):130:130 -> e + # {"id":"com.android.tools.r8.residualsignature","signature":"(Ljava/lang/String;)V"} + 1:8:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):106:106 -> f + 1:8:com.example.core.projection.polyline.IProjectionPolyline createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):71 -> f + 1:8:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0 -> f + # {"id":"com.android.tools.r8.synthesized"} + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lpw0/c;)Lnv0/a;"} + 9:12:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):107:107 -> f + 9:12:com.example.core.projection.polyline.IProjectionPolyline createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):71 -> f + 9:12:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0 -> f + 13:17:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolylineInternal(com.example.core.projection.polyline.IProjectionPolylineOptions,com.example.core.projection.IProjection,com.example.core.latlng.IBoundsFactory):146:146 -> f + 13:17:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):108 -> f + 13:17:com.example.core.projection.polyline.IProjectionPolyline createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):71 -> f + 13:17:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0 -> f + 18:26:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):158:158 -> f + 18:26:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolylineInternal(com.example.core.projection.polyline.IProjectionPolylineOptions,com.example.core.projection.IProjection,com.example.core.latlng.IBoundsFactory):146 -> f + 18:26:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):108 -> f + 18:26:com.example.core.projection.polyline.IProjectionPolyline createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):71 -> f + 18:26:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0 -> f + 27:28:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):159:159 -> f + 27:28:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolylineInternal(com.example.core.projection.polyline.IProjectionPolylineOptions,com.example.core.projection.IProjection,com.example.core.latlng.IBoundsFactory):146 -> f + 27:28:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):108 -> f + 27:28:com.example.core.projection.polyline.IProjectionPolyline createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):71 -> f + 27:28:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0 -> f + 29:30:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):160:160 -> f + 29:30:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolylineInternal(com.example.core.projection.polyline.IProjectionPolylineOptions,com.example.core.projection.IProjection,com.example.core.latlng.IBoundsFactory):146 -> f + 29:30:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):108 -> f + 29:30:com.example.core.projection.polyline.IProjectionPolyline createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):71 -> f + 29:30:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0 -> f + 31:34:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0:0 -> f + 35:37:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolylineInternal(com.example.core.projection.polyline.IProjectionPolylineOptions,com.example.core.projection.IProjection,com.example.core.latlng.IBoundsFactory):146:146 -> f + 35:37:com.example.core.projection.polyline.IProjectionPolyline com.example.projection.MapProjectionViewController.createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):108 -> f + 35:37:com.example.core.projection.polyline.IProjectionPolyline createProjectionPolyline(com.example.core.projection.polyline.IProjectionPolylineOptions):71 -> f + 35:37:nv0.IProjectionPolyline uu0.MapAnnotations.createProjectionPolyline(pw0.ProjectionPolylineOptions):0 -> f + 1:7:com.example.core.circle.ICircle createCircle(com.example.core.circle.ICircleOptions):112:112 -> g + # {"id":"com.android.tools.r8.residualsignature","signature":"(Ldv0/c;)Ldv0/b;"} + 1:3:android.content.Context getMapContext():46:46 -> getMapContext + 1:16:void showMapAttribution(boolean):124:124 -> h + 17:22:void showMapAttribution(boolean):125:125 -> h + 6:7:void removeOverlay(com.example.core.projection.overlay.IMapOverlay):91:91 -> i + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lmv0/a;)V"} + 8:22:void com.example.projection.overlays.MapOverlayViewController.removeOverlay(com.example.core.projection.overlay.IMapOverlay):36:36 -> i + 8:22:void removeOverlay(com.example.core.projection.overlay.IMapOverlay):91 -> i + 1:8:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):84:84 -> j + 1:8:java.util.List createProjectionMarkers(java.util.List):67 -> j + 1:8:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + # {"id":"com.android.tools.r8.synthesized"} + 9:14:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):85:85 -> j + 9:14:java.util.List createProjectionMarkers(java.util.List):67 -> j + 9:14:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 15:18:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):86:86 -> j + 15:18:java.util.List createProjectionMarkers(java.util.List):67 -> j + 15:18:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 19:20:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):87:87 -> j + 19:20:java.util.List createProjectionMarkers(java.util.List):67 -> j + 19:20:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 21:25:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):170:170 -> j + 21:25:java.util.List createProjectionMarkers(java.util.List):67 -> j + 21:25:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 26:39:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):179:179 -> j + 26:39:java.util.List createProjectionMarkers(java.util.List):67 -> j + 26:39:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 40:42:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):178:178 -> j + 40:42:java.util.List createProjectionMarkers(java.util.List):67 -> j + 40:42:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 43:47:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133:133 -> j + 43:47:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):88 -> j + 43:47:java.util.List createProjectionMarkers(java.util.List):67 -> j + 43:47:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 48:56:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):158:158 -> j + 48:56:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> j + 48:56:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):88 -> j + 48:56:java.util.List createProjectionMarkers(java.util.List):67 -> j + 48:56:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 57:58:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):159:159 -> j + 57:58:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> j + 57:58:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):88 -> j + 57:58:java.util.List createProjectionMarkers(java.util.List):67 -> j + 57:58:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 59:60:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):160:160 -> j + 59:60:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> j + 59:60:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):88 -> j + 59:60:java.util.List createProjectionMarkers(java.util.List):67 -> j + 59:60:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 61:64:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0:0 -> j + 65:68:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133:133 -> j + 65:68:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):88 -> j + 65:68:java.util.List createProjectionMarkers(java.util.List):67 -> j + 65:68:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 69:73:java.util.List com.example.projection.MapProjectionViewController.createProjectionMarkers(java.util.List):178:178 -> j + 69:73:java.util.List createProjectionMarkers(java.util.List):67 -> j + 69:73:java.util.ArrayList uu0.MapAnnotations.createProjectionMarkers(java.util.List):0 -> j + 6:18:void com.example.projection.MapProjectionViewController.removeProjectionMarker(com.example.core.projection.marker.IProjectionMarker):100:100 -> k + 6:18:void removeProjectionMarker(com.example.core.projection.marker.IProjectionMarker):83 -> k + # {"id":"com.android.tools.r8.residualsignature","signature":"(Llv0/c;)V"} + 19:20:void com.example.projection.MapProjectionViewController.removeProjectionMarker(com.example.core.projection.marker.IProjectionMarker):101:101 -> k + 19:20:void removeProjectionMarker(com.example.core.projection.marker.IProjectionMarker):83 -> k + 21:28:void com.example.projection.markers.ProjectionMarkerRepository.remove(com.example.core.projection.marker.IProjectionMarker):19:19 -> k + 21:28:void com.example.projection.MapProjectionViewController.removeProjectionMarker(com.example.core.projection.marker.IProjectionMarker):101 -> k + 21:28:void removeProjectionMarker(com.example.core.projection.marker.IProjectionMarker):83 -> k + 6:23:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79:79 -> l + 6:23:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 6:23:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l + # {"id":"com.android.tools.r8.synthesized"} + # {"id":"com.android.tools.r8.residualsignature","signature":"(Llv0/d;)Llv0/c;"} + 24:29:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133:133 -> l + 24:29:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 24:29:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 24:29:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l + 30:38:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):158:158 -> l + 30:38:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> l + 30:38:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 30:38:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 30:38:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l + 39:40:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):159:159 -> l + 39:40:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> l + 39:40:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 39:40:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 39:40:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l + 41:42:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):160:160 -> l + 41:42:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> l + 41:42:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 41:42:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 41:42:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l + 43:46:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):0:0 -> l + 43:46:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l + # {"id":"com.android.tools.r8.outlineCallsite","positions":{"1":50,"3":52,"6":55},"outline":"Lev/h;b(Ljava/lang/String;Lcom/example/L;)V"} + 47:49:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133:133 -> l + 47:49:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 47:49:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 47:49:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l + 50:50:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):160:160 -> l + 50:50:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> l + 50:50:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 50:50:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 52:52:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):160:160 -> l + 52:52:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> l + 52:52:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 52:52:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 55:55:java.lang.Object com.example.projection.MapProjectionViewController.onProjectionView(kotlin.jvm.functions.Function1):160:160 -> l + 55:55:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133 -> l + 55:55:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l + 55:55:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l + 1:8:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):31:31 -> m + 1:8:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + # {"id":"com.android.tools.r8.residualsignature","signature":"(Liv0/k;)Liv0/j$b;"} + 9:10:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):32:32 -> m + 9:10:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 11:18:com.jakewharton.rxrelay2.PublishRelay com.jakewharton.rxrelay2.PublishRelay.create():59:59 -> m + 11:18:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):33 -> m + 11:18:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 19:22:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):34:34 -> m + 19:22:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 23:25:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):32:32 -> m + 23:25:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 26:27:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):36:36 -> m + 26:27:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 28:33:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):39:39 -> m + 28:33:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 34:36:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):36:36 -> m + 34:36:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 37:46:com.example.core.polygon.IClickablePolygon com.example.core.polygon.PolygonManager.addPolygon(com.example.core.polygon.IPolygonOptions):45:45 -> m + 37:46:com.example.core.polygon.IClickablePolygon createPolygon(com.example.core.polygon.IPolygonOptions):103 -> m + 6:18:void com.example.projection.MapProjectionViewController.removeProjectionPolyline(com.example.core.projection.polyline.IProjectionPolyline):124:124 -> n + 6:18:void removeProjectionPolyline(com.example.core.projection.polyline.IProjectionPolyline):87 -> n + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lnv0/a;)V"} + 19:20:void com.example.projection.MapProjectionViewController.removeProjectionPolyline(com.example.core.projection.polyline.IProjectionPolyline):125:125 -> n + 19:20:void removeProjectionPolyline(com.example.core.projection.polyline.IProjectionPolyline):87 -> n + 21:28:void com.example.projection.polyline.ProjectionPolylineRepository.remove(com.example.core.projection.polyline.IProjectionPolyline):20:20 -> n + 21:28:void com.example.projection.MapProjectionViewController.removeProjectionPolyline(com.example.core.projection.polyline.IProjectionPolyline):125 -> n + 21:28:void removeProjectionPolyline(com.example.core.projection.polyline.IProjectionPolyline):87 -> n + 1:8:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):51:51 -> o + 1:8:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + # {"id":"com.android.tools.r8.residualsignature","signature":"(Liv0/i;)Liv0/j$c;"} + 9:10:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):52:52 -> o + 9:10:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 11:18:com.jakewharton.rxrelay2.PublishRelay com.jakewharton.rxrelay2.PublishRelay.create():59:59 -> o + 11:18:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):53 -> o + 11:18:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 19:22:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):54:54 -> o + 19:22:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 23:25:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):52:52 -> o + 23:25:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 26:27:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):56:56 -> o + 26:27:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 28:33:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):59:59 -> o + 28:33:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 34:36:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):56:56 -> o + 34:36:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 37:46:com.example.core.polygon.IClickablePolygonGroup com.example.core.polygon.PolygonManager.addPolygonGroup(com.example.core.polygon.PolygonGroupOptions):65:65 -> o + 37:46:com.example.core.polygon.IClickablePolygonGroup createPolygonGroup(com.example.core.polygon.PolygonGroupOptions):108 -> o + 1:7:com.example.core.polyline.IPolyline createPolyline(com.example.core.polyline.PolylineOptions):95:95 -> p + # {"id":"com.android.tools.r8.residualsignature","signature":"(Ljv0/d;)Ljv0/a;"} + 1:9:com.example.core.projection.overlay.IMapOverlay com.example.projection.overlays.MapOverlayViewController.createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):30:30 -> q + 1:9:com.example.core.projection.overlay.IMapOverlay createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):79 -> q + 1:9:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0 -> q + # {"id":"com.android.tools.r8.synthesized"} + # {"id":"com.android.tools.r8.residualsignature","signature":"(Low0/a;)Lmv0/a;"} + 10:18:android.view.View com.example.projection.overlays.LayoutMapOverlayOptions.inflate(android.widget.FrameLayout):12:12 -> q + 10:18:com.example.core.projection.overlay.IMapOverlay com.example.projection.overlays.MapOverlayViewController.createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):30 -> q + 10:18:com.example.core.projection.overlay.IMapOverlay createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):79 -> q + 10:18:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0 -> q + 19:29:android.view.LayoutInflater com.example.wrappers.DynamicLayoutInflater.from(android.content.Context):24:24 -> q + 19:29:android.view.View com.example.projection.overlays.LayoutMapOverlayOptions.inflate(android.widget.FrameLayout):12 -> q + 19:29:com.example.core.projection.overlay.IMapOverlay com.example.projection.overlays.MapOverlayViewController.createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):30 -> q + 19:29:com.example.core.projection.overlay.IMapOverlay createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):79 -> q + 19:29:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0 -> q + 30:31:android.view.LayoutInflater com.example.wrappers.DynamicLayoutInflater.from(android.content.Context):25:25 -> q + 30:31:android.view.View com.example.projection.overlays.LayoutMapOverlayOptions.inflate(android.widget.FrameLayout):12 -> q + 30:31:com.example.core.projection.overlay.IMapOverlay com.example.projection.overlays.MapOverlayViewController.createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):30 -> q + 30:31:com.example.core.projection.overlay.IMapOverlay createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):79 -> q + 30:31:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0 -> q + 32:35:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0:0 -> q + 36:47:android.view.View com.example.projection.overlays.LayoutMapOverlayOptions.inflate(android.widget.FrameLayout):12:12 -> q + 36:47:com.example.core.projection.overlay.IMapOverlay com.example.projection.overlays.MapOverlayViewController.createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):30 -> q + 36:47:com.example.core.projection.overlay.IMapOverlay createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):79 -> q + 36:47:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0 -> q + 48:57:com.example.core.projection.overlay.IMapOverlay com.example.projection.overlays.MapOverlayViewController.createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):31:31 -> q + 48:57:com.example.core.projection.overlay.IMapOverlay createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):79 -> q + 48:57:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0 -> q + 58:63:com.example.core.projection.overlay.IMapOverlay com.example.projection.overlays.MapOverlayViewController.createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):32:32 -> q + 58:63:com.example.core.projection.overlay.IMapOverlay createOverlay(com.example.core.projection.overlay.IMapOverlayOptions):79 -> q + 58:63:mv0.IMapOverlay uu0.MapAnnotations.createOverlay(ow0.LayoutMapOverlayOptions):0 -> q +com.example.mapcomponents.marker.currentlocation.CurrentLocationRenderer -> b80.f: +# {"id":"sourceFile","fileName":"CurrentLocationRenderer.kt"} + me.example.locationproviders.ILocationService locationServices -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lcom/example/PassiveLocationService;"} + com.example.AppForegroundDetector appForegroundDetector -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"Lti0/f;"} + com.example.mapcomponents.marker.currentlocation.ICurrentLocationRendererDelegate currentLocationRendererDelegate -> c + # {"id":"com.android.tools.r8.residualsignature","signature":"Lb80/h;"} + me.example.rx.RxUIBinder binder -> d + 6:8:void (me.example.locationproviders.ILocationService,com.example.AppForegroundDetector,com.example.core.api.IAnimatedLocationProvider,com.example.core.feature.puck.IPuckStateProvider,com.example.mapcomponents.marker.currentlocation.ICurrentLocationRendererDelegate):19:19 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lcom/example/PassiveLocationService;Lti0/f;Ldm1/g;Lcy0/b;Lb80/h;)V"} + 9:10:void (me.example.locationproviders.ILocationService,com.example.AppForegroundDetector,com.example.core.api.IAnimatedLocationProvider,com.example.core.feature.puck.IPuckStateProvider,com.example.mapcomponents.marker.currentlocation.ICurrentLocationRendererDelegate):20:20 -> + 11:12:void (me.example.locationproviders.ILocationService,com.example.AppForegroundDetector,com.example.core.api.IAnimatedLocationProvider,com.example.core.feature.puck.IPuckStateProvider,com.example.mapcomponents.marker.currentlocation.ICurrentLocationRendererDelegate):21:21 -> + 13:14:void (me.example.locationproviders.ILocationService,com.example.AppForegroundDetector,com.example.core.api.IAnimatedLocationProvider,com.example.core.feature.puck.IPuckStateProvider,com.example.mapcomponents.marker.currentlocation.ICurrentLocationRendererDelegate):24:24 -> + 15:24:void (me.example.locationproviders.ILocationService,com.example.AppForegroundDetector,com.example.core.api.IAnimatedLocationProvider,com.example.core.feature.puck.IPuckStateProvider,com.example.mapcomponents.marker.currentlocation.ICurrentLocationRendererDelegate):26:26 -> + 1:9:void render():33:33 -> a + 10:13:void render():37:37 -> a + 14:17:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():33:33 -> a + 14:17:void render():39 -> a + 18:19:com.example.core.projection.marker.ViewProjectionMarker com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker():101:101 -> a + 18:19:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34 -> a + 18:19:void render():39 -> a + 20:21:com.example.core.projection.marker.ViewProjectionMarker com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker():102:102 -> a + 20:21:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34 -> a + 20:21:void render():39 -> a + 22:23:com.example.core.projection.marker.ViewProjectionMarker com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker():103:103 -> a + 22:23:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34 -> a + 22:23:void render():39 -> a + 24:29:com.example.core.projection.marker.ViewProjectionMarker com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker():105:105 -> a + 24:29:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34 -> a + 24:29:void render():39 -> a + 30:32:com.example.core.projection.marker.ViewProjectionMarker com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker():102:102 -> a + 30:32:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34 -> a + 30:32:void render():39 -> a + 33:40:com.example.core.projection.marker.ViewProjectionMarker com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker():101:101 -> a + 33:40:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34 -> a + 33:40:void render():39 -> a + 41:42:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34:34 -> a + 41:42:void render():39 -> a + 43:52:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():35:35 -> a + 43:52:void render():39 -> a + 53:55:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():36:36 -> a + 53:55:void render():39 -> a + 56:57:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():35:35 -> a + 56:57:void render():39 -> a + 58:67:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():38:38 -> a + 58:67:void render():39 -> a + 68:71:com.example.core.circle.ICircle com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createAccuracyCircle():111:111 -> a + 68:71:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39 -> a + 68:71:void render():39 -> a + 72:73:com.example.core.circle.ICircle com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createAccuracyCircle():113:113 -> a + 72:73:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39 -> a + 72:73:void render():39 -> a + 74:79:int androidx.core.content.ContextCompat$Api23Impl.getColor(android.content.Context,int):1074:1074 -> a + 74:79:int androidx.core.content.ContextCompat.getColor(android.content.Context,int):537 -> a + 74:79:com.example.core.circle.ICircle com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createAccuracyCircle():113 -> a + 74:79:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39 -> a + 74:79:void render():39 -> a + 80:83:com.example.core.circle.ICircle com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createAccuracyCircle():114:114 -> a + 80:83:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39 -> a + 80:83:void render():39 -> a + 84:87:com.example.core.circle.ICircle com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createAccuracyCircle():112:112 -> a + 84:87:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39 -> a + 84:87:void render():39 -> a + 88:92:com.example.core.circle.ICircle com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createAccuracyCircle():117:117 -> a + 88:92:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39 -> a + 88:92:void render():39 -> a + 93:96:com.example.core.circle.ICircle com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createAccuracyCircle():116:116 -> a + 93:96:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39 -> a + 93:96:void render():39 -> a + 97:100:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():39:39 -> a + 97:100:void render():39 -> a + 101:102:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render():34:34 -> a + 101:102:void render():39 -> a + 103:113:io.reactivex.Observable com.example.development.noop.NoOpPuckStateProvider.observe():11:11 -> a + 103:113:void render():40 -> a + 114:115:void render():105:105 -> a + 116:118:void com.example.mapcomponents.marker.currentlocation.CurrentLocationRenderer$render$$inlined$bindStream$1.(com.example.mapcomponents.marker.currentlocation.CurrentLocationRenderer):0:0 -> a + 116:118:void render():105 -> a + 119:121:void render():105:105 -> a + 122:127:void bindLocationStream():73:73 -> a + 122:127:void render():47 -> a + 128:131:void bindLocationStream():74:74 -> a + 128:131:void render():47 -> a + 132:137:void bindLocationStream():75:75 -> a + 132:137:void render():47 -> a + 138:146:void bindLocationStream():107:107 -> a + 138:146:void render():47 -> a + 147:152:void bindLocationStream():97:97 -> a + 147:152:void render():47 -> a + 153:158:io.reactivex.Observable io.reactivex.Observable.distinctUntilChanged():7916:7916 -> a + 153:158:void bindLocationStream():98 -> a + 153:158:void render():47 -> a + 159:167:void bindLocationStream():108:108 -> a + 159:167:void render():47 -> a + 1:5:void clear():55:55 -> clear + 6:14:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.remove():90:90 -> clear + 6:14:void clear():56 -> clear + 15:18:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.remove():91:91 -> clear + 15:18:void clear():56 -> clear + 19:24:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.remove():92:92 -> clear + 19:24:void clear():56 -> clear + 25:26:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.remove():94:94 -> clear + 25:26:void clear():56 -> clear + 27:29:void com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.remove():95:95 -> clear + 27:29:void clear():56 -> clear +com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1$mapReadyCallback$1 -> er3.f: +# {"id":"sourceFile","fileName":"CurrentLocationMarkerMapCollection.kt"} + com.example.mapcomponents.marker.currentlocation.ICurrentLocationRenderer $renderer -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lb80/i;"} + 1:7:void (com.example.mapcomponents.marker.currentlocation.ICurrentLocationRenderer):0:0 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lb80/i;)V"} + 1:5:void invoke():36:36 -> invoke + 1:5:java.lang.Object invoke():36 -> invoke + 6:8:java.lang.Object invoke():36:36 -> invoke +com.example.mapbox.MapboxMapView -> yv0.g: +# {"id":"sourceFile","fileName":"MapboxMapView.kt"} + 6:7:void addMapReadyCallback(kotlin.jvm.functions.Function0):366:366 -> d + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lkz3/a;)V"} + 8:9:java.util.concurrent.CopyOnWriteArrayList com.example.mapbox.MapboxCallbacks.getMapReadyCallbacks():31:31 -> d + 8:9:void addMapReadyCallback(kotlin.jvm.functions.Function0):366 -> d + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 10:12:void addMapReadyCallback(kotlin.jvm.functions.Function0):366:366 -> d + 13:16:void addMapReadyCallback(kotlin.jvm.functions.Function0):367:367 -> d + 17:20:void addMapReadyCallback(kotlin.jvm.functions.Function0):368:368 -> d + 6:7:void addFpsChangedCallback(kotlin.jvm.functions.Function1):441:441 -> d0 +com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1 -> er3.g$a: +# {"id":"sourceFile","fileName":"CurrentLocationMarkerMapCollection.kt"} + androidx.compose.runtime.State $locationEnabled -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/q1;"} + com.example.core.IMapView $mapView -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"Lbv0/i;"} + com.example.mapcomponents.marker.currentlocation.ICurrentLocationRenderer $renderer -> c + # {"id":"com.android.tools.r8.residualsignature","signature":"Lb80/i;"} + 1:11:void (androidx.compose.runtime.State,com.example.core.IMapView,com.example.mapcomponents.marker.currentlocation.ICurrentLocationRenderer):0:0 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/q1;Lbv0/i;Lb80/i;)V"} + 1:2:java.lang.Object invoke(java.lang.Object):35:35 -> invoke + 3:7:androidx.compose.runtime.DisposableEffectResult invoke(androidx.compose.runtime.DisposableEffectScope):0:0 -> invoke + 3:7:java.lang.Object invoke(java.lang.Object):35 -> invoke + 8:14:androidx.compose.runtime.DisposableEffectResult invoke(androidx.compose.runtime.DisposableEffectScope):36:36 -> invoke + 8:14:java.lang.Object invoke(java.lang.Object):35 -> invoke + 15:19:androidx.compose.runtime.DisposableEffectResult invoke(androidx.compose.runtime.DisposableEffectScope):37:37 -> invoke + 15:19:java.lang.Object invoke(java.lang.Object):35 -> invoke + 20:35:androidx.compose.runtime.DisposableEffectResult invoke(androidx.compose.runtime.DisposableEffectScope):39:39 -> invoke + 20:35:java.lang.Object invoke(java.lang.Object):35 -> invoke + 36:38:androidx.compose.runtime.DisposableEffectResult invoke(androidx.compose.runtime.DisposableEffectScope):40:40 -> invoke + 36:38:java.lang.Object invoke(java.lang.Object):35 -> invoke + 39:41:androidx.compose.runtime.DisposableEffectResult invoke(androidx.compose.runtime.DisposableEffectScope):41:41 -> invoke + 39:41:java.lang.Object invoke(java.lang.Object):35 -> invoke + 42:47:androidx.compose.runtime.DisposableEffectResult invoke(androidx.compose.runtime.DisposableEffectScope):66:66 -> invoke + 42:47:java.lang.Object invoke(java.lang.Object):35 -> invoke +androidx.compose.runtime.DisposableEffectImpl -> h1.p0: +# {"id":"sourceFile","fileName":"Effects.kt"} + kotlin.jvm.functions.Function1 effect -> a + androidx.compose.runtime.DisposableEffectResult onDispose -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/q0;"} + 1:3:void (kotlin.jvm.functions.Function1):79:79 -> + 4:6:void (kotlin.jvm.functions.Function1):80:80 -> + 1:2:void onRemembered():85:85 -> d + 3:4:androidx.compose.runtime.DisposableEffectScope androidx.compose.runtime.EffectsKt.access$getInternalDisposableEffectScope$p():1:1 -> d + 3:4:void onRemembered():85 -> d + 5:13:void onRemembered():85:85 -> d + 1:1:void onAbandoned():95:95 -> f + 1:8:void onForgotten():89:89 -> g + 9:11:void onForgotten():90:90 -> g +androidx.compose.runtime.internal.RememberEventDispatcher -> p1.k: +# {"id":"sourceFile","fileName":"RememberEventDispatcher.kt"} + java.util.Set abandoning -> a + androidx.compose.runtime.tooling.CompositionErrorContext traceContext -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"Lt1/d;"} + androidx.compose.runtime.collection.MutableVector remembering -> c + # {"id":"com.android.tools.r8.residualsignature","signature":"Lj1/c;"} + androidx.collection.MutableScatterSet rememberSet -> d + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + androidx.compose.runtime.collection.MutableVector currentRememberingList -> e + # {"id":"com.android.tools.r8.residualsignature","signature":"Lj1/c;"} + androidx.compose.runtime.collection.MutableVector leaving -> f + # {"id":"com.android.tools.r8.residualsignature","signature":"Lj1/c;"} + androidx.compose.runtime.collection.MutableVector sideEffects -> g + # {"id":"com.android.tools.r8.residualsignature","signature":"Lj1/c;"} + androidx.collection.MutableScatterSet releasing -> h + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + androidx.collection.MutableScatterMap pausedPlaceholders -> i + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/k0;"} + java.util.ArrayList nestedRemembersLists -> j + androidx.collection.ScatterSet ignoreLeavingSet -> k + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/w0;"} + 1:3:void ():61:61 -> + 4:12:void ():296:296 -> + 13:14:void ():64:64 -> + 15:20:void ():65:65 -> + 21:22:void ():66:66 -> + 23:29:void ():299:299 -> + 30:31:void ():67:67 -> + 32:38:void ():302:302 -> + 39:41:void ():68:68 -> + 2:3:void clear():96:96 -> a + 4:5:void clear():97:97 -> a + 6:10:void clear():98:98 -> a + 11:15:void clear():99:99 -> a + 16:17:void clear():100:100 -> a + 18:22:void clear():101:101 -> a + 23:27:void clear():102:102 -> a + 28:29:void clear():103:103 -> a + 30:31:void clear():104:104 -> a + 32:34:void clear():105:105 -> a + 1:5:void dispatchAbandons():267:267 -> b + 6:14:void dispatchAbandons():268:268 -> b + 15:16:void dispatchAbandons():269:269 -> b + 17:19:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> b + 17:19:void dispatchAbandons():355 -> b + 20:23:void dispatchAbandons():270:270 -> b + 24:29:void dispatchAbandons():273:273 -> b + 30:35:void dispatchAbandons():274:274 -> b + 36:38:void dispatchAbandons():275:275 -> b + 39:44:void dispatchAbandons():276:276 -> b + 45:46:void dispatchAbandons():278:278 -> b + 47:53:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> b + 47:53:void dispatchAbandons():359 -> b + 54:55:void dispatchAbandons():359:359 -> b + 1:7:void dispatchRememberObservers():195:195 -> c + 8:9:void dispatchRememberObservers():196:196 -> c + 10:15:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> c + 10:15:void dispatchRememberObservers():310 -> c + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 16:17:void dispatchRememberObservers():200:200 -> c + 18:20:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> c + 18:20:void dispatchRememberObservers():311 -> c + 21:22:void dispatchRememberObservers():201:201 -> c + 23:29:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> c + 23:29:void dispatchRememberObservers():202 -> c + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 30:33:void dispatchRememberObservers():314:314 -> c + 34:37:void dispatchRememberObservers():205:205 -> c + 38:40:void dispatchRememberObservers():206:206 -> c + 41:42:androidx.compose.runtime.RememberObserver androidx.compose.runtime.RememberObserverHolder.getWrapped():4736:4736 -> c + 41:42:void dispatchRememberObservers():206 -> c + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 43:45:void dispatchRememberObservers():207:207 -> c + 46:51:void dispatchRememberObservers():208:208 -> c + 52:57:void dispatchRememberObservers():210:210 -> c + 58:63:void dispatchRememberObservers():212:212 -> c + 64:70:void dispatchRememberObservers():213:213 -> c + 71:76:void dispatchRememberObservers():215:215 -> c + 77:81:void dispatchRememberObservers():218:218 -> c + 82:92:void dispatchRememberObservers():318:318 -> c + 93:94:void dispatchRememberObservers():220:220 -> c + 95:101:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> c + 95:101:void dispatchRememberObservers():321 -> c + 102:102:void dispatchRememberObservers():321:321 -> c + 103:108:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> c + 103:108:void dispatchRememberObservers():322 -> c + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 109:110:void dispatchRememberObservers():225:225 -> c + 111:113:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> c + 111:113:void dispatchRememberObservers():323 -> c + 114:118:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):249:249 -> c + 114:118:void dispatchRememberObservers():225 -> c + 119:120:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):329:329 -> c + 119:120:void dispatchRememberObservers():225 -> c + 121:125:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> c + 121:125:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):330 -> c + 121:125:void dispatchRememberObservers():225 -> c + 126:129:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):332:332 -> c + 126:129:void dispatchRememberObservers():225 -> c + 130:131:androidx.compose.runtime.RememberObserver androidx.compose.runtime.RememberObserverHolder.getWrapped():4736:4736 -> c + 130:131:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):251 -> c + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 130:131:void dispatchRememberObservers():225 -> c + 132:134:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):252:252 -> c + 132:134:void dispatchRememberObservers():225 -> c + 135:143:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):253:253 -> c + 135:143:void dispatchRememberObservers():225 -> c + 144:151:void dispatchRememberList(androidx.compose.runtime.collection.MutableVector):336:336 -> c + 144:151:void dispatchRememberObservers():225 -> c + 152:153:void dispatchRememberObservers():225:225 -> c + 154:161:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> c + 154:161:void dispatchRememberObservers():327 -> c + 162:163:void dispatchRememberObservers():327:327 -> c + 1:6:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> d + 1:6:void dispatchSideEffects():342 -> d + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 7:8:void dispatchSideEffects():259:259 -> d + 9:11:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> d + 9:11:void dispatchSideEffects():343 -> d + 12:13:void dispatchSideEffects():347:347 -> d + 14:18:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> d + 14:18:void dispatchSideEffects():348 -> d + 19:22:void dispatchSideEffects():350:350 -> d + 23:30:void dispatchSideEffects():260:260 -> d + 31:33:void dispatchSideEffects():261:261 -> d + 34:35:void dispatchSideEffects():262:262 -> d + 36:42:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> d + 36:42:void dispatchSideEffects():354 -> d + 43:44:void dispatchSideEffects():354:354 -> d + 1:8:void forgetting(androidx.compose.runtime.RememberObserverHolder):114:114 -> e + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/j3;)V"} + 9:13:void forgetting(androidx.compose.runtime.RememberObserverHolder):115:115 -> e + 14:30:void forgetting(androidx.compose.runtime.RememberObserverHolder):116:116 -> e + 31:33:void forgetting(androidx.compose.runtime.RememberObserverHolder):130:130 -> e + 34:38:void forgetting(androidx.compose.runtime.RememberObserverHolder):136:136 -> e + 39:40:androidx.compose.runtime.RememberObserver androidx.compose.runtime.RememberObserverHolder.getWrapped():4736:4736 -> e + 39:40:void forgetting(androidx.compose.runtime.RememberObserverHolder):137 -> e + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 41:43:void forgetting(androidx.compose.runtime.RememberObserverHolder):137:137 -> e + 44:47:void forgetting(androidx.compose.runtime.RememberObserverHolder):139:139 -> e + 48:55:void forgetting(androidx.compose.runtime.RememberObserverHolder):140:140 -> e + 56:61:void recordLeaving(java.lang.Object):283:283 -> e + 56:61:void forgetting(androidx.compose.runtime.RememberObserverHolder):141 -> e + 1:2:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):361:361 -> f + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/j3;Lj1/c;)Z"} + 3:8:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> f + 3:8:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):362 -> f + 9:12:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):364:364 -> f + 13:14:androidx.compose.runtime.RememberObserver androidx.compose.runtime.RememberObserverHolder.getWrapped():4736:4736 -> f + 13:14:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):121 -> f + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 15:18:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):122:122 -> f + 19:20:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):123:123 -> f + 21:22:androidx.compose.runtime.collection.MutableVector androidx.compose.runtime.internal.PausedCompositionRemembers.getPausedRemembers():44:44 -> f + 21:22:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):123 -> f + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 23:29:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):124:124 -> f + 30:41:boolean forgetting$removeFrom(androidx.compose.runtime.RememberObserverHolder,androidx.compose.runtime.collection.MutableVector):125:125 -> f + 1:3:void prepare(java.util.Set,androidx.compose.runtime.tooling.CompositionErrorContext):77:77 -> g + # {"id":"com.android.tools.r8.residualsignature","signature":"(Ljava/util/Set;Lt1/f;)V"} + 4:5:void prepare(java.util.Set,androidx.compose.runtime.tooling.CompositionErrorContext):78:78 -> g + 6:8:void prepare(java.util.Set,androidx.compose.runtime.tooling.CompositionErrorContext):79:79 -> g + 1:5:void remembering(androidx.compose.runtime.RememberObserverHolder):109:109 -> h + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/j3;)V"} + 6:11:void remembering(androidx.compose.runtime.RememberObserverHolder):110:110 -> h +androidx.compose.runtime.CompositionImpl -> h1.y: +# {"id":"sourceFile","fileName":"Composition.kt"} + androidx.compose.runtime.CompositionContext parent -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/v;"} + androidx.compose.runtime.Applier applier -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/a;"} + java.util.concurrent.atomic.AtomicReference pendingModifications -> c + java.lang.Object lock -> d + java.util.Set abandonSet -> e + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/m0;"} + androidx.compose.runtime.SlotTable slotTable -> f + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/o3;"} + androidx.collection.MutableScatterMap observations -> g + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/k0;"} + androidx.collection.MutableScatterSet invalidatedScopes -> h + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + androidx.collection.MutableScatterSet conditionallyInvalidatedScopes -> i + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + androidx.collection.MutableScatterMap derivedStates -> j + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/k0;"} + androidx.compose.runtime.changelist.ChangeList changes -> k + # {"id":"com.android.tools.r8.residualsignature","signature":"Li1/a;"} + androidx.compose.runtime.changelist.ChangeList lateChanges -> l + # {"id":"com.android.tools.r8.residualsignature","signature":"Li1/a;"} + androidx.collection.MutableScatterMap observationsProcessed -> m + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/k0;"} + androidx.collection.MutableScatterMap invalidations -> n + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/k0;"} + boolean pendingInvalidScopes -> o + androidx.compose.runtime.ShouldPauseCallback shouldPause -> p + # {"id":"com.android.tools.r8.residualsignature","signature":"Lc5/c;"} + androidx.compose.runtime.PausedCompositionImpl pendingPausedComposition -> q + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/g2;"} + androidx.compose.runtime.CompositionImpl invalidationDelegate -> r + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/y;"} + int invalidationDelegateGroup -> s + androidx.compose.runtime.CompositionObserverHolder observerHolder -> t + # {"id":"com.android.tools.r8.residualsignature","signature":"Lbv3/n;"} + androidx.compose.runtime.internal.RememberEventDispatcher rememberManager -> u + # {"id":"com.android.tools.r8.residualsignature","signature":"Lp1/k;"} + androidx.compose.runtime.ComposerImpl composer -> v + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/n;"} + int state -> w + kotlin.jvm.functions.Function2 composable -> x + # {"id":"com.android.tools.r8.residualsignature","signature":"Lkz3/o;"} + void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext) -> + # {"id":"com.android.tools.r8.residualsignature","signature":"()V"} + 1:1:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):442:442 -> + 1:1:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/v;Lh1/a;)V"} + 2:2:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):447:447 -> + 2:2:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 3:3:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):450:450 -> + 3:3:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 4:4:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):466:466 -> + 4:4:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 5:5:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):1449:1449 -> + 5:5:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 6:6:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):469:469 -> + 6:6:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 7:7:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):479:479 -> + 7:7:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 8:8:java.util.Set androidx.collection.MutableScatterSet.asMutableSet():1129:1129 -> + 8:8:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):479 -> + 8:8:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 9:9:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):479:479 -> + 9:9:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 10:11:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):484:485 -> + 10:11:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 12:12:void androidx.compose.runtime.SlotTable.collectCalledByInformation():550:550 -> + 12:12:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):485 -> + 12:12:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 13:13:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):486:486 -> + 13:13:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 14:14:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):484:484 -> + 14:14:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 15:15:androidx.collection.MutableScatterMap androidx.compose.runtime.collection.ScopeMap.constructor-impl$default(androidx.collection.MutableScatterMap,int,kotlin.jvm.internal.DefaultConstructorMarker):27:27 -> + 15:15:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):493 -> + 15:15:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 16:16:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):493:493 -> + 16:16:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 17:17:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):503:503 -> + 17:17:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 18:18:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):511:511 -> + 18:18:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 19:19:androidx.collection.MutableScatterMap androidx.compose.runtime.collection.ScopeMap.constructor-impl$default(androidx.collection.MutableScatterMap,int,kotlin.jvm.internal.DefaultConstructorMarker):27:27 -> + 19:19:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):514 -> + 19:19:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 20:20:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):514:514 -> + 20:20:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 21:21:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):531:531 -> + 21:21:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 22:22:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):541:541 -> + 22:22:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 23:23:androidx.collection.MutableScatterMap androidx.compose.runtime.collection.ScopeMap.constructor-impl$default(androidx.collection.MutableScatterMap,int,kotlin.jvm.internal.DefaultConstructorMarker):27:27 -> + 23:23:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):550 -> + 23:23:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 24:24:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):550:550 -> + 24:24:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 25:25:androidx.collection.MutableScatterMap androidx.compose.runtime.collection.ScopeMap.constructor-impl$default(androidx.collection.MutableScatterMap,int,kotlin.jvm.internal.DefaultConstructorMarker):27:27 -> + 25:25:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):559 -> + 25:25:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 26:26:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):559:559 -> + 26:26:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 27:27:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):582:582 -> + 27:27:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 28:28:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):584:584 -> + 28:28:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 29:29:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):588:588 -> + 29:29:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 30:30:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):598:598 -> + 30:30:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 31:31:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext):621:621 -> + 31:31:void (androidx.compose.runtime.CompositionContext,androidx.compose.runtime.Applier,kotlin.coroutines.CoroutineContext,int,kotlin.jvm.internal.DefaultConstructorMarker):442 -> + 5:19:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1099:1099 -> A + # {"id":"com.android.tools.r8.residualsignature","signature":"(Li1/a;)V"} + 20:21:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 20:21:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1101 -> A + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 22:27:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 22:27:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1101 -> A + 28:29:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 28:29:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137 -> A + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 30:35:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 30:35:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137 -> A + 36:39:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137:1137 -> A + 40:45:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1138:1138 -> A + 46:53:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1141:1141 -> A + 54:55:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1102:1102 -> A + 56:58:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> A + 56:58:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2147 -> A + 59:62:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1103:1103 -> A + 63:72:androidx.compose.runtime.RecordingApplier androidx.compose.runtime.PausedCompositionImpl.getPausableApplier$runtime():216:216 -> A + 63:72:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1103 -> A + 73:76:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1103:1103 -> A + 77:81:androidx.compose.runtime.internal.RememberEventDispatcher androidx.compose.runtime.PausedCompositionImpl.getRememberManager$runtime():214:214 -> A + 77:81:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1104 -> A + 82:84:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1105:1105 -> A + 85:86:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1108:1108 -> A + 87:91:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2150:2150 -> A + 92:95:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1113:1113 -> A + 96:98:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1109:1109 -> A + 99:101:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1115:1115 -> A + 102:104:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2155:2155 -> A + 105:107:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1116:1116 -> A + 108:110:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> A + 108:110:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2158 -> A + 111:113:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1122:1122 -> A + 114:116:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1123:1123 -> A + 117:120:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1125:1125 -> A + 121:122:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1126:1126 -> A + 123:125:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> A + 123:125:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2159 -> A + 126:127:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1127:1127 -> A + 128:129:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1128:1128 -> A + 130:131:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2164:2164 -> A + 132:137:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2165:2165 -> A + 138:183:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2168:2168 -> A + 184:191:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2177:2177 -> A + 192:195:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2179:2179 -> A + 196:202:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2180:2180 -> A + 203:204:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2182:2182 -> A + 205:208:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2185:2185 -> A + 209:220:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2186:2186 -> A + 221:257:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2189:2189 -> A + 258:261:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2200:2200 -> A + 262:267:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1128:1128 -> A + 268:297:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2201:2201 -> A + 298:315:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2211:2211 -> A + 316:322:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2214:2214 -> A + 323:333:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1128:1128 -> A + 334:394:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2217:2217 -> A + 395:397:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1129:1129 -> A + 398:399:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1130:1130 -> A + 400:408:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> A + 400:408:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2228 -> A + 409:415:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2228:2228 -> A + 416:417:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 416:417:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137 -> A + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 418:423:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 418:423:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137 -> A + 424:427:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137:1137 -> A + 428:433:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1138:1138 -> A + 434:445:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1141:1141 -> A + 446:450:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2155:2155 -> A + 451:453:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> A + 451:453:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2158 -> A + 454:454:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):2158:2158 -> A + 455:456:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 455:456:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137 -> A + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 457:462:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> A + 457:462:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137 -> A + 463:466:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1137:1137 -> A + 467:472:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1138:1138 -> A + 473:480:void applyChangesInLocked(androidx.compose.runtime.changelist.ChangeList):1141:1141 -> A + 3:6:void cleanUpDerivedStateObservations():1887:1887 -> B + 7:22:void cleanUpDerivedStateObservations():1888:1888 -> B + 23:58:void cleanUpDerivedStateObservations():1891:1891 -> B + 59:66:void cleanUpDerivedStateObservations():1900:1900 -> B + 67:72:void cleanUpDerivedStateObservations():1902:1902 -> B + 73:79:void cleanUpDerivedStateObservations():1903:1903 -> B + 80:81:void cleanUpDerivedStateObservations():1905:1905 -> B + 82:85:void cleanUpDerivedStateObservations():1908:1908 -> B + 86:95:void cleanUpDerivedStateObservations():1909:1909 -> B + 96:133:void cleanUpDerivedStateObservations():1912:1912 -> B + 134:141:void cleanUpDerivedStateObservations():1923:1923 -> B + 142:147:boolean androidx.compose.runtime.collection.ScopeMap.contains-impl(androidx.collection.MutableScatterMap,java.lang.Object):63:63 -> B + 142:147:void cleanUpDerivedStateObservations():1001 -> B + 148:181:void cleanUpDerivedStateObservations():1924:1924 -> B + 182:194:void cleanUpDerivedStateObservations():1934:1934 -> B + 195:201:void cleanUpDerivedStateObservations():1937:1937 -> B + 202:212:boolean androidx.compose.runtime.collection.ScopeMap.contains-impl(androidx.collection.MutableScatterMap,java.lang.Object):63:63 -> B + 202:212:void cleanUpDerivedStateObservations():1001 -> B + 213:296:void cleanUpDerivedStateObservations():1940:1940 -> B + 297:304:void cleanUpDerivedStateObservations():1002:1002 -> B + 305:306:void cleanUpDerivedStateObservations():1951:1951 -> B + 307:308:void cleanUpDerivedStateObservations():1954:1954 -> B + 309:314:void cleanUpDerivedStateObservations():1955:1955 -> B + 315:352:void cleanUpDerivedStateObservations():1958:1958 -> B + 353:356:void cleanUpDerivedStateObservations():1967:1967 -> B + 357:365:boolean androidx.compose.runtime.RecomposeScopeImpl.isConditional():319:319 -> B + 357:365:void cleanUpDerivedStateObservations():1003 -> B + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 366:387:void cleanUpDerivedStateObservations():1968:1968 -> B + 1:2:boolean clearDeactivated():720:720 -> C + 3:3:boolean clearDeactivated():1467:1467 -> C + 4:13:boolean clearDeactivated():721:721 -> C + 14:18:boolean clearDeactivated():723:723 -> C + 19:22:boolean clearDeactivated():1467:1467 -> C + 1:5:androidx.compose.runtime.PausedComposition composeInitialPaused(boolean,kotlin.jvm.functions.Function2):679:679 -> D + # {"id":"com.android.tools.r8.residualsignature","signature":"(ZLkz3/o;)Lh1/g2;"} + 6:7:androidx.compose.runtime.PausedComposition composeInitialPaused(boolean,kotlin.jvm.functions.Function2):680:680 -> D + 8:10:androidx.compose.runtime.PausedComposition composeInitialPaused(boolean,kotlin.jvm.functions.Function2):1456:1456 -> D + 11:28:androidx.compose.runtime.PausedComposition composeInitialPaused(boolean,kotlin.jvm.functions.Function2):683:683 -> D + 29:31:androidx.compose.runtime.PausedComposition composeInitialPaused(boolean,kotlin.jvm.functions.Function2):693:693 -> D + 1:10:void drainPendingModificationsForCompositionLocked():766:766 -> E + 11:16:boolean kotlin.jvm.internal.Intrinsics.areEqual(java.lang.Object,java.lang.Object):169:169 -> E + 11:16:void drainPendingModificationsForCompositionLocked():770 -> E + 17:21:void drainPendingModificationsForCompositionLocked():773:773 -> E + 22:27:void drainPendingModificationsForCompositionLocked():774:774 -> E + 28:31:void drainPendingModificationsForCompositionLocked():776:776 -> E + 32:39:void drainPendingModificationsForCompositionLocked():777:777 -> E + 40:45:void drainPendingModificationsForCompositionLocked():778:778 -> E + 46:68:void drainPendingModificationsForCompositionLocked():780:780 -> E + 69:80:void drainPendingModificationsForCompositionLocked():771:771 -> E + 2:7:void drainPendingModificationsLocked():786:786 -> F + 8:15:void drainPendingModificationsLocked():787:787 -> F + 16:20:void drainPendingModificationsLocked():790:790 -> F + 21:26:void drainPendingModificationsLocked():791:791 -> F + 27:30:void drainPendingModificationsLocked():793:793 -> F + 31:38:void drainPendingModificationsLocked():794:794 -> F + 39:46:void drainPendingModificationsLocked():795:795 -> F + 47:48:void drainPendingModificationsLocked():799:799 -> F + 49:57:void drainPendingModificationsLocked():798:798 -> F + 58:81:void drainPendingModificationsLocked():801:801 -> F + 1:8:void drainPendingModificationsOutOfBandLocked():809:809 -> G + 9:19:void drainPendingModificationsOutOfBandLocked():810:810 -> G + 20:24:void drainPendingModificationsOutOfBandLocked():814:814 -> G + 25:30:void drainPendingModificationsOutOfBandLocked():815:815 -> G + 31:34:void drainPendingModificationsOutOfBandLocked():817:817 -> G + 35:42:void drainPendingModificationsOutOfBandLocked():818:818 -> G + 43:48:void drainPendingModificationsOutOfBandLocked():819:819 -> G + 49:72:void drainPendingModificationsOutOfBandLocked():821:821 -> G + 1:14:void ensureRunning():704:704 -> H + 15:17:void ensureRunning():711:711 -> H + 18:20:void ensureRunning():709:709 -> H + 21:23:void ensureRunning():707:707 -> H + 24:25:void ensureRunning():710:710 -> H + 26:28:void ensureRunning():1460:1460 -> H + 29:33:void ensureRunning():714:714 -> H + 34:35:void ensureRunning():715:715 -> H + 36:39:void ensureRunning():1464:1464 -> H + 9:10:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1293:1293 -> I + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/t2;Lh1/c;Ljava/lang/Object;)Lh1/a1;"} + 11:11:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2325:2325 -> I + 12:16:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1295:1295 -> I + 17:20:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302:1302 -> I + 21:24:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):261:261 -> I + 21:24:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 25:26:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):261:261 -> I + 25:26:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 27:31:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):4103:4103 -> I + 27:31:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 32:38:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):262:262 -> I + 32:38:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 39:41:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):4107:4107 -> I + 39:41:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 42:47:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):263:263 -> I + 42:47:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 48:53:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):264:264 -> I + 48:53:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 54:56:int androidx.compose.runtime.SlotTableKt.groupSize(int[],int):3857:3857 -> I + 54:56:int androidx.compose.runtime.SlotTableKt.access$groupSize(int[],int):1 -> I + 54:56:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):264 -> I + 54:56:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 57:71:int androidx.compose.runtime.Anchor.getLocation$runtime():696:696 -> I + 57:71:boolean androidx.compose.runtime.SlotTable.groupContainsAnchor(int,androidx.compose.runtime.Anchor):264 -> I + 57:71:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1302 -> I + 72:73:boolean isComposing():624:624 -> I + 72:73:boolean tryImminentInvalidation(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1285 -> I + 72:73:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1307 -> I + 74:77:boolean androidx.compose.runtime.ComposerImpl.isComposing$runtime():1460:1460 -> I + 74:77:boolean isComposing():624 -> I + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 74:77:boolean tryImminentInvalidation(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1285 -> I + 74:77:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1307 -> I + 78:88:boolean tryImminentInvalidation(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1285:1285 -> I + 78:88:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1307 -> I + 89:94:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1309:1309 -> I + 95:98:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1317:1317 -> I + 99:103:void androidx.compose.runtime.collection.ScopeMap.set-impl(androidx.collection.MutableScatterMap,java.lang.Object,java.lang.Object):59:59 -> I + 99:103:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1317 -> I + 104:107:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1318:1318 -> I + 108:111:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1321:1321 -> I + 112:116:void androidx.compose.runtime.collection.ScopeMap.set-impl(androidx.collection.MutableScatterMap,java.lang.Object,java.lang.Object):59:59 -> I + 112:116:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1321 -> I + 117:118:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1323:1323 -> I + 119:124:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2327:2327 -> I + 125:128:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2331:2331 -> I + 129:130:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2332:2332 -> I + 131:132:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2334:2334 -> I + 133:134:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2337:2337 -> I + 135:140:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2338:2338 -> I + 141:182:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2341:2341 -> I + 183:186:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2335:2335 -> I + 187:213:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1323:1323 -> I + 214:218:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1324:1324 -> I + 219:221:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2325:2325 -> I + 222:226:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1333:1333 -> I + 227:231:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1335:1335 -> I + 232:233:boolean isComposing():624:624 -> I + 232:233:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1336 -> I + 234:237:boolean androidx.compose.runtime.ComposerImpl.isComposing$runtime():1460:1460 -> I + 234:237:boolean isComposing():624 -> I + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 234:237:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1336 -> I + 238:243:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):1336:1336 -> I + 244:245:androidx.compose.runtime.InvalidationResult invalidateChecked(androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.Anchor,java.lang.Object):2325:2325 -> I + 5:6:void invalidateScopeOfLocked(java.lang.Object):1043:1043 -> J + 7:12:void invalidateScopeOfLocked(java.lang.Object):2003:2003 -> J + 13:18:void invalidateScopeOfLocked(java.lang.Object):2007:2007 -> J + 19:20:void invalidateScopeOfLocked(java.lang.Object):2008:2008 -> J + 21:22:void invalidateScopeOfLocked(java.lang.Object):2010:2010 -> J + 23:24:void invalidateScopeOfLocked(java.lang.Object):2013:2013 -> J + 25:31:void invalidateScopeOfLocked(java.lang.Object):2014:2014 -> J + 32:71:void invalidateScopeOfLocked(java.lang.Object):2017:2017 -> J + 72:75:void invalidateScopeOfLocked(java.lang.Object):2011:2011 -> J + 76:83:void invalidateScopeOfLocked(java.lang.Object):1044:1044 -> J + 84:97:void invalidateScopeOfLocked(java.lang.Object):1046:1046 -> J + 98:99:void invalidateScopeOfLocked(java.lang.Object):2034:2034 -> J + 100:107:void invalidateScopeOfLocked(java.lang.Object):1044:1044 -> J + 108:111:void invalidateScopeOfLocked(java.lang.Object):1046:1046 -> J + 5:12:boolean androidx.compose.runtime.ComposerImpl.getAreChildrenComposing$runtime():1467:1467 -> a + 5:12:boolean getAreChildrenComposing():615 -> a + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 5:12:void recordReadOf(java.lang.Object):1009 -> a + 13:18:void recordReadOf(java.lang.Object):1010:1010 -> a + 19:22:void androidx.compose.runtime.RecomposeScopeImpl.setUsed(boolean):444:444 -> a + 19:22:void recordReadOf(java.lang.Object):1011 -> a + 23:31:void androidx.compose.runtime.RecomposeScopeImpl.setUsed(boolean):445:445 -> a + 23:31:void recordReadOf(java.lang.Object):1011 -> a + 32:42:boolean androidx.compose.runtime.RecomposeScopeImpl.recordRead(java.lang.Object):296:296 -> a + 32:42:void recordReadOf(java.lang.Object):1013 -> a + 43:44:boolean androidx.compose.runtime.RecomposeScopeImpl.recordRead(java.lang.Object):298:298 -> a + 43:44:void recordReadOf(java.lang.Object):1013 -> a + 45:53:int androidx.collection.MutableObjectIntMap.put(java.lang.Object,int,int):729:729 -> a + 45:53:boolean androidx.compose.runtime.RecomposeScopeImpl.recordRead(java.lang.Object):298 -> a + 45:53:void recordReadOf(java.lang.Object):1013 -> a + 54:57:int androidx.collection.MutableObjectIntMap.put(java.lang.Object,int,int):734:734 -> a + 54:57:boolean androidx.compose.runtime.RecomposeScopeImpl.recordRead(java.lang.Object):298 -> a + 54:57:void recordReadOf(java.lang.Object):1013 -> a + 58:61:int androidx.collection.MutableObjectIntMap.put(java.lang.Object,int,int):736:736 -> a + 58:61:boolean androidx.compose.runtime.RecomposeScopeImpl.recordRead(java.lang.Object):298 -> a + 58:61:void recordReadOf(java.lang.Object):1013 -> a + 62:65:int androidx.collection.MutableObjectIntMap.put(java.lang.Object,int,int):737:737 -> a + 62:65:boolean androidx.compose.runtime.RecomposeScopeImpl.recordRead(java.lang.Object):298 -> a + 62:65:void recordReadOf(java.lang.Object):1013 -> a + 66:70:boolean androidx.compose.runtime.RecomposeScopeImpl.recordRead(java.lang.Object):299:299 -> a + 66:70:void recordReadOf(java.lang.Object):1013 -> a + 71:77:androidx.compose.runtime.tooling.CompositionObserver observer():1388:1388 -> a + 71:77:void recordReadOf(java.lang.Object):1015 -> a + 78:81:void recordReadOf(java.lang.Object):1018:1018 -> a + 82:87:void recordReadOf(java.lang.Object):1019:1019 -> a + 88:92:void recordReadOf(java.lang.Object):1022:1022 -> a + 93:96:void recordReadOf(java.lang.Object):1025:1025 -> a + 97:103:void recordReadOf(java.lang.Object):1026:1026 -> a + 104:108:void recordReadOf(java.lang.Object):1027:1027 -> a + 109:110:androidx.collection.ObjectIntMap androidx.compose.runtime.DerivedSnapshotState$ResultRecord.getDependencies():101:101 -> a + 109:110:void recordReadOf(java.lang.Object):1028 -> a + 111:112:void recordReadOf(java.lang.Object):1979:1979 -> a + 113:114:void recordReadOf(java.lang.Object):1982:1982 -> a + 115:120:void recordReadOf(java.lang.Object):1983:1983 -> a + 121:165:void recordReadOf(java.lang.Object):1986:1986 -> a + 166:173:void recordReadOf(java.lang.Object):1981:1981 -> a + 174:177:void recordReadOf(java.lang.Object):1029:1029 -> a + 178:186:void recordReadOf(java.lang.Object):1030:1030 -> a + 187:218:void recordReadOf(java.lang.Object):1032:1032 -> a + 219:220:java.lang.Object androidx.compose.runtime.DerivedSnapshotState$ResultRecord.getCurrentValue():166:166 -> a + 219:220:void recordReadOf(java.lang.Object):1034 -> a + 221:224:void androidx.compose.runtime.RecomposeScopeImpl.recordDerivedStateValue(androidx.compose.runtime.DerivedState,java.lang.Object):308:308 -> a + 221:224:void recordReadOf(java.lang.Object):1034 -> a + 225:232:void androidx.compose.runtime.RecomposeScopeImpl.recordDerivedStateValue(androidx.compose.runtime.DerivedState,java.lang.Object):309:309 -> a + 225:232:void recordReadOf(java.lang.Object):1034 -> a + 233:236:void androidx.compose.runtime.RecomposeScopeImpl.recordDerivedStateValue(androidx.compose.runtime.DerivedState,java.lang.Object):311:311 -> a + 233:236:void recordReadOf(java.lang.Object):1034 -> a + 2:3:void recomposeScopeReleased(androidx.compose.runtime.RecomposeScopeImpl):1275:1275 -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"()V"} + 4:9:androidx.compose.runtime.tooling.CompositionObserver observer():1388:1388 -> b + 4:9:void recomposeScopeReleased(androidx.compose.runtime.RecomposeScopeImpl):1277 -> b + 1:2:void applyLateChanges():1156:1156 -> c + 3:3:void applyLateChanges():2250:2250 -> c + 4:5:void applyLateChanges():1158:1158 -> c + 6:7:boolean androidx.compose.runtime.changelist.ChangeList.isNotEmpty():78:78 -> c + 6:7:void applyLateChanges():1158 -> c + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 8:13:boolean androidx.compose.runtime.changelist.ChangeList.isNotEmpty():78:78 -> c + 8:13:void applyLateChanges():1158 -> c + 14:21:void applyLateChanges():1159:1159 -> c + 22:23:void applyLateChanges():1161:1161 -> c + 24:25:void applyLateChanges():2250:2250 -> c + 26:27:void applyLateChanges():2257:2257 -> c + 28:29:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> c + 28:29:void applyLateChanges():2257 -> c + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 30:35:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> c + 30:35:void applyLateChanges():2257 -> c + 36:45:void applyLateChanges():2258:2258 -> c + 46:48:void applyLateChanges():2260:2260 -> c + 49:51:void applyLateChanges():2258:2258 -> c + 52:62:void applyLateChanges():2263:2263 -> c + 63:63:void applyLateChanges():2265:2265 -> c + 64:66:void applyLateChanges():2268:2268 -> c + 67:68:void applyLateChanges():2269:2269 -> c + 69:70:void applyLateChanges():2250:2250 -> c + 3:10:boolean kotlin.jvm.internal.Intrinsics.areEqual(java.lang.Object,java.lang.Object):169:169 -> d + 3:10:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1230 -> d + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/k0;ILkz3/a;)Ljava/lang/Object;"} + 11:14:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1231:1231 -> d + 15:18:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1232:1232 -> d + 19:22:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1234:1234 -> d + 23:24:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1236:1236 -> d + 25:28:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1237:1237 -> d + 29:30:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1236:1236 -> d + 31:33:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1237:1237 -> d + 34:38:java.lang.Object delegateInvalidations(androidx.compose.runtime.ControlledComposition,int,kotlin.jvm.functions.Function0):1239:1239 -> d + 1:2:void deactivate():1391:1391 -> deactivate + 3:3:void deactivate():2394:2394 -> deactivate + 4:8:void deactivate():1392:1392 -> deactivate + 9:10:void deactivate():1393:1393 -> deactivate + 11:13:void deactivate():2396:2396 -> deactivate + 14:15:void deactivate():1395:1395 -> deactivate + 16:26:int androidx.compose.runtime.SlotTable.getGroupsSize():102:102 -> deactivate + 16:26:void deactivate():1395 -> deactivate + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 27:28:void deactivate():1396:1396 -> deactivate + 29:30:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> deactivate + 29:30:void deactivate():1396 -> deactivate + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 31:40:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> deactivate + 31:40:void deactivate():1396 -> deactivate + 41:42:void deactivate():1397:1397 -> deactivate + 43:45:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> deactivate + 43:45:void deactivate():2399 -> deactivate + 46:55:void deactivate():1398:1398 -> deactivate + 56:60:void deactivate():2403:2403 -> deactivate + 61:65:void deactivate():1400:1400 -> deactivate + 66:67:void deactivate():1401:1401 -> deactivate + 68:71:void deactivate():2405:2405 -> deactivate + 72:73:void deactivate():1402:1402 -> deactivate + 74:75:int androidx.compose.runtime.SlotWriter.getCurrentGroup():1326:1326 -> deactivate + 74:75:void androidx.compose.runtime.ComposerKt.deactivateCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4512 -> deactivate + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 74:75:void deactivate():1402 -> deactivate + 76:83:void androidx.compose.runtime.ComposerKt.deactivateCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4512:4512 -> deactivate + 76:83:void deactivate():1402 -> deactivate + 84:85:void deactivate():1403:1403 -> deactivate + 86:88:void deactivate():2410:2410 -> deactivate + 89:93:void deactivate():1404:1404 -> deactivate + 94:100:void deactivate():1405:1405 -> deactivate + 101:104:void deactivate():2410:2410 -> deactivate + 105:107:void deactivate():1407:1407 -> deactivate + 108:110:void deactivate():2413:2413 -> deactivate + 111:112:void deactivate():1409:1409 -> deactivate + 113:115:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> deactivate + 113:115:void deactivate():2416 -> deactivate + 116:117:void deactivate():1411:1411 -> deactivate + 118:120:void androidx.compose.runtime.collection.ScopeMap.clear-impl(androidx.collection.MutableScatterMap):87:87 -> deactivate + 118:120:void deactivate():1411 -> deactivate + 121:122:void deactivate():1412:1412 -> deactivate + 123:125:void androidx.compose.runtime.collection.ScopeMap.clear-impl(androidx.collection.MutableScatterMap):87:87 -> deactivate + 123:125:void deactivate():1412 -> deactivate + 126:127:void deactivate():1413:1413 -> deactivate + 128:130:void androidx.compose.runtime.collection.ScopeMap.clear-impl(androidx.collection.MutableScatterMap):87:87 -> deactivate + 128:130:void deactivate():1413 -> deactivate + 131:132:void deactivate():1414:1414 -> deactivate + 133:134:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> deactivate + 133:134:void deactivate():1414 -> deactivate + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 135:137:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> deactivate + 135:137:void deactivate():1414 -> deactivate + 138:139:void deactivate():1415:1415 -> deactivate + 140:141:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> deactivate + 140:141:void deactivate():1415 -> deactivate + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 142:144:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> deactivate + 142:144:void deactivate():1415 -> deactivate + 145:146:void deactivate():1416:1416 -> deactivate + 147:148:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1819:1819 -> deactivate + 147:148:void deactivate():1416 -> deactivate + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 149:151:void androidx.compose.runtime.Stack.clear-impl(java.util.ArrayList):42:42 -> deactivate + 149:151:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1819 -> deactivate + 149:151:void deactivate():1416 -> deactivate + 152:156:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1820:1820 -> deactivate + 152:156:void deactivate():1416 -> deactivate + 157:158:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1821:1821 -> deactivate + 157:158:void deactivate():1416 -> deactivate + 159:164:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> deactivate + 159:164:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1821 -> deactivate + 159:164:void deactivate():1416 -> deactivate + 165:166:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1822:1822 -> deactivate + 165:166:void deactivate():1416 -> deactivate + 167:168:void deactivate():1418:1418 -> deactivate + 169:170:void deactivate():1419:1419 -> deactivate + 171:174:void deactivate():2394:2394 -> deactivate + 175:178:void deactivate():2413:2413 -> deactivate + 179:181:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> deactivate + 179:181:void deactivate():2416 -> deactivate + 182:182:void deactivate():2416:2416 -> deactivate + 183:184:void deactivate():2394:2394 -> deactivate + 1:2:void dispose():848:848 -> dispose + 3:3:void dispose():1511:1511 -> dispose + 4:5:void dispose():849:849 -> dispose + 6:9:boolean androidx.compose.runtime.ComposerImpl.isComposing$runtime():1460:1460 -> dispose + 6:9:void dispose():849 -> dispose + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 10:11:void dispose():850:850 -> dispose + 12:18:void dispose():1513:1513 -> dispose + 19:23:void dispose():853:853 -> dispose + 24:25:void dispose():854:854 -> dispose + 26:29:void dispose():855:855 -> dispose + 30:31:void dispose():864:864 -> dispose + 32:35:androidx.compose.runtime.changelist.ChangeList androidx.compose.runtime.ComposerImpl.getDeferredChanges$runtime():1483:1483 -> dispose + 32:35:void dispose():864 -> dispose + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 36:38:void dispose():866:866 -> dispose + 39:40:void dispose():874:874 -> dispose + 41:51:int androidx.compose.runtime.SlotTable.getGroupsSize():102:102 -> dispose + 41:51:void dispose():874 -> dispose + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 52:53:void dispose():875:875 -> dispose + 54:55:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> dispose + 54:55:void dispose():875 -> dispose + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 56:61:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> dispose + 56:61:void dispose():875 -> dispose + 62:71:void dispose():876:876 -> dispose + 72:76:void dispose():1517:1517 -> dispose + 77:81:void dispose():878:878 -> dispose + 82:83:void dispose():879:879 -> dispose + 84:87:void dispose():1519:1519 -> dispose + 88:89:void dispose():879:879 -> dispose + 90:91:int androidx.compose.runtime.SlotWriter.getCurrentGroup():1326:1326 -> dispose + 90:91:void androidx.compose.runtime.ComposerKt.removeCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4473 -> dispose + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 90:91:void dispose():879 -> dispose + 92:99:void androidx.compose.runtime.ComposerKt.removeCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4473:4473 -> dispose + 92:99:void dispose():879 -> dispose + 100:102:void androidx.compose.runtime.ComposerKt.removeCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4487:4487 -> dispose + 100:102:void dispose():879 -> dispose + 103:104:void dispose():879:879 -> dispose + 105:107:void dispose():1524:1524 -> dispose + 108:112:void dispose():880:880 -> dispose + 113:117:void dispose():881:881 -> dispose + 118:124:void dispose():882:882 -> dispose + 125:128:void dispose():1524:1524 -> dispose + 129:131:void dispose():884:884 -> dispose + 132:134:void dispose():1527:1527 -> dispose + 135:139:void dispose():887:887 -> dispose + 140:141:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1810:1810 -> dispose + 140:141:void dispose():887 -> dispose + 142:144:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> dispose + 142:144:void androidx.compose.runtime.ComposerImpl.dispose$runtime():5045 -> dispose + 142:144:void dispose():887 -> dispose + 145:149:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1811:1811 -> dispose + 145:149:void dispose():887 -> dispose + 150:151:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1819:1819 -> dispose + 150:151:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1812 -> dispose + 150:151:void dispose():887 -> dispose + 152:154:void androidx.compose.runtime.Stack.clear-impl(java.util.ArrayList):42:42 -> dispose + 152:154:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1819 -> dispose + 152:154:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1812 -> dispose + 152:154:void dispose():887 -> dispose + 155:159:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1820:1820 -> dispose + 155:159:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1812 -> dispose + 155:159:void dispose():887 -> dispose + 160:161:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1821:1821 -> dispose + 160:161:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1812 -> dispose + 160:161:void dispose():887 -> dispose + 162:167:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> dispose + 162:167:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1821 -> dispose + 162:167:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1812 -> dispose + 162:167:void dispose():887 -> dispose + 168:169:void androidx.compose.runtime.ComposerImpl.deactivate$runtime():1822:1822 -> dispose + 168:169:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1812 -> dispose + 168:169:void dispose():887 -> dispose + 170:171:androidx.compose.runtime.Applier androidx.compose.runtime.ComposerImpl.getApplier():1407:1407 -> dispose + 170:171:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1813 -> dispose + 170:171:void dispose():887 -> dispose + 172:174:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1813:1813 -> dispose + 172:174:void dispose():887 -> dispose + 175:176:void androidx.compose.runtime.ComposerImpl.dispose$runtime():1815:1815 -> dispose + 175:176:void dispose():887 -> dispose + 177:184:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> dispose + 177:184:void androidx.compose.runtime.ComposerImpl.dispose$runtime():5049 -> dispose + 177:184:void dispose():887 -> dispose + 185:185:void androidx.compose.runtime.ComposerImpl.dispose$runtime():5049:5049 -> dispose + 185:185:void dispose():887 -> dispose + 186:189:void dispose():1527:1527 -> dispose + 190:191:void dispose():889:889 -> dispose + 192:192:void dispose():1511:1511 -> dispose + 193:198:void dispose():890:890 -> dispose + 199:200:void dispose():1511:1511 -> dispose + 1:3:androidx.compose.runtime.PausedComposition setPausableContentWithReuse(kotlin.jvm.functions.Function2):656:656 -> e + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lkz3/o;)Lh1/g2;"} + 4:7:androidx.compose.runtime.PausedComposition setPausableContentWithReuse(kotlin.jvm.functions.Function2):657:657 -> e + 8:12:androidx.compose.runtime.PausedComposition setPausableContentWithReuse(kotlin.jvm.functions.Function2):659:659 -> e + 1:2:androidx.compose.runtime.ShouldPauseCallback getAndSetShouldPauseCallback(androidx.compose.runtime.ShouldPauseCallback):1245:1245 -> f + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lc5/c;)Lc5/c;"} + 3:5:androidx.compose.runtime.ShouldPauseCallback getAndSetShouldPauseCallback(androidx.compose.runtime.ShouldPauseCallback):1246:1246 -> f + 1:2:boolean recompose():1061:1061 -> g + 3:3:boolean recompose():2074:2074 -> g + 4:8:boolean recompose():1062:1062 -> g + 9:19:boolean androidx.compose.runtime.PausedCompositionImpl.isRecomposing$runtime():218:218 -> g + 9:19:boolean recompose():1063 -> g + 20:22:boolean recompose():1069:1069 -> g + 23:27:boolean recompose():1070:1070 -> g + 28:30:boolean recompose():1072:1072 -> g + 31:32:androidx.collection.MutableScatterMap takeInvalidations-afanTW4():1355:1355 -> g + 31:32:boolean recompose():2080 -> g + 33:36:androidx.collection.MutableScatterMap androidx.compose.runtime.collection.ScopeMap.constructor-impl$default(androidx.collection.MutableScatterMap,int,kotlin.jvm.internal.DefaultConstructorMarker):27:27 -> g + 33:36:androidx.collection.MutableScatterMap takeInvalidations-afanTW4():1356 -> g + 33:36:boolean recompose():2080 -> g + 37:38:androidx.collection.MutableScatterMap takeInvalidations-afanTW4():1356:1356 -> g + 37:38:boolean recompose():2080 -> g + 39:42:boolean recompose():1075:1075 -> g + 43:44:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3771:3771 -> g + 43:44:boolean recompose():1075 -> g + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 45:46:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> g + 45:46:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3771 -> g + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 45:46:boolean recompose():1075 -> g + 47:52:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> g + 47:52:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3771 -> g + 47:52:boolean recompose():1075 -> g + 53:54:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3771:3771 -> g + 53:54:boolean recompose():1075 -> g + 55:57:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):5282:5282 -> g + 55:57:boolean recompose():1075 -> g + 58:61:int androidx.collection.ScatterMap.getSize():280:280 -> g + 58:61:int androidx.compose.runtime.collection.ScopeMap.getSize-impl(androidx.collection.MutableScatterMap):32 -> g + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 58:61:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3776 -> g + 58:61:boolean recompose():1075 -> g + 62:70:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3776:3776 -> g + 62:70:boolean recompose():1075 -> g + 71:73:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3777:3777 -> g + 71:73:boolean recompose():1075 -> g + 74:76:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3779:3779 -> g + 74:76:boolean recompose():1075 -> g + 77:78:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3781:3781 -> g + 77:78:boolean recompose():1075 -> g + 79:84:boolean androidx.compose.runtime.changelist.ChangeList.isNotEmpty():78:78 -> g + 79:84:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3783 -> g + 79:84:boolean recompose():1075 -> g + 85:90:boolean recompose():1077:1077 -> g + 91:93:boolean recompose():2074:2074 -> g + 94:96:boolean androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(androidx.collection.MutableScatterMap,androidx.compose.runtime.ShouldPauseCallback):3781:3781 -> g + 94:96:boolean recompose():1075 -> g + 97:98:boolean recompose():2084:2084 -> g + 99:100:boolean recompose():2085:2085 -> g + 101:102:boolean recompose():2087:2087 -> g + 103:104:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> g + 103:104:boolean recompose():2087 -> g + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 105:110:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> g + 105:110:boolean recompose():2087 -> g + 111:120:boolean recompose():2088:2088 -> g + 121:123:boolean recompose():2090:2090 -> g + 124:126:boolean recompose():2088:2088 -> g + 127:137:boolean recompose():2093:2093 -> g + 138:138:boolean recompose():2095:2095 -> g + 139:141:boolean recompose():2098:2098 -> g + 142:142:boolean recompose():2099:2099 -> g + 143:144:boolean recompose():2074:2074 -> g + 5:14:boolean observesAnyOf(java.util.Set):1533:1533 -> h + 15:16:boolean observesAnyOf(java.util.Set):1534:1534 -> h + 17:18:androidx.collection.ScatterSet androidx.compose.runtime.collection.ScatterSetWrapper.getSet$runtime():25:25 -> h + 17:18:boolean observesAnyOf(java.util.Set):1534 -> h + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 19:20:boolean observesAnyOf(java.util.Set):1536:1536 -> h + 21:22:boolean observesAnyOf(java.util.Set):1539:1539 -> h + 23:28:boolean observesAnyOf(java.util.Set):1540:1540 -> h + 29:68:boolean observesAnyOf(java.util.Set):1543:1543 -> h + 69:70:boolean observesAnyOf(java.util.Set):1537:1537 -> h + 71:94:boolean androidx.compose.runtime.collection.ScopeMap.contains-impl(androidx.collection.MutableScatterMap,java.lang.Object):63:63 -> h + 71:94:boolean observesAnyOf(java.util.Set):926 -> h + 95:96:boolean observesAnyOf(java.util.Set):1560:1560 -> h + 97:110:boolean observesAnyOf(java.util.Set):1561:1561 -> h + 111:124:boolean androidx.compose.runtime.collection.ScopeMap.contains-impl(androidx.collection.MutableScatterMap,java.lang.Object):63:63 -> h + 111:124:boolean observesAnyOf(java.util.Set):926 -> h + 1:4:void insertMovableContent(java.util.List):1086:1086 -> i + # {"id":"com.android.tools.r8.residualsignature","signature":"(Ljava/util/ArrayList;)V"} + 5:11:void insertMovableContent(java.util.List):2102:2102 -> i + 12:15:void insertMovableContent(java.util.List):2103:2103 -> i + 16:17:void insertMovableContent(java.util.List):2101:2101 -> i + 18:19:java.lang.Object kotlin.Pair.getFirst():27:27 -> i + 18:19:void insertMovableContent(java.util.List):1086 -> i + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 20:21:void insertMovableContent(java.util.List):1086:1086 -> i + 22:23:androidx.compose.runtime.ControlledComposition androidx.compose.runtime.MovableContentStateReference.getComposition$runtime():389:389 -> i + 22:23:void insertMovableContent(java.util.List):1086 -> i + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 24:29:boolean kotlin.jvm.internal.Intrinsics.areEqual(java.lang.Object,java.lang.Object):169:169 -> i + 24:29:void insertMovableContent(java.util.List):1086 -> i + 30:31:void insertMovableContent(java.util.List):2108:2108 -> i + 32:38:void insertMovableContent(java.util.List):2110:2110 -> i + 39:41:void insertMovableContent(java.util.List):1087:1087 -> i + 42:44:void androidx.compose.runtime.ComposerImpl.insertMovableContentReferences(java.util.List):3498:3498 -> i + 42:44:void insertMovableContent(java.util.List):1087 -> i + 45:47:void androidx.compose.runtime.ComposerImpl.insertMovableContentReferences(java.util.List):3502:3502 -> i + 45:47:void insertMovableContent(java.util.List):1087 -> i + 48:53:void insertMovableContent(java.util.List):1087:1087 -> i + 54:57:void androidx.compose.runtime.ComposerImpl.insertMovableContentReferences(java.util.List):3505:3505 -> i + 54:57:void insertMovableContent(java.util.List):1087 -> i + 58:65:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> i + 58:65:void insertMovableContent(java.util.List):2119 -> i + 66:71:void insertMovableContent(java.util.List):2120:2120 -> i + 72:74:void insertMovableContent(java.util.List):2122:2122 -> i + 75:77:void insertMovableContent(java.util.List):2120:2120 -> i + 78:88:void insertMovableContent(java.util.List):2125:2125 -> i + 89:89:void insertMovableContent(java.util.List):2127:2127 -> i + 90:92:void insertMovableContent(java.util.List):2130:2130 -> i + 93:93:void insertMovableContent(java.util.List):2131:2131 -> i + 1:9:boolean isDisposed():627:627 -> isDisposed + 1:8:boolean androidx.compose.runtime.RecomposeScopeImpl.getDefaultsInScope():488:488 -> j + 1:8:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1251 -> j + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/t2;Ljava/lang/Object;)Lh1/a1;"} + 9:10:void androidx.compose.runtime.RecomposeScopeImpl.setDefaultsInvalid(boolean):499:499 -> j + 9:10:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1252 -> j + 11:14:androidx.compose.runtime.Anchor androidx.compose.runtime.RecomposeScopeImpl.getAnchor():95:95 -> j + 11:14:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1254 -> j + 15:21:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1255:1255 -> j + 22:29:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1257:1257 -> j + 30:31:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1259:1259 -> j + 32:32:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):2324:2324 -> j + 33:34:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1259:1259 -> j + 35:37:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):2324:2324 -> j + 38:39:boolean isComposing():624:624 -> j + 38:39:boolean tryImminentInvalidation(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1285 -> j + 38:39:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1260 -> j + 40:43:boolean androidx.compose.runtime.ComposerImpl.isComposing$runtime():1460:1460 -> j + 40:43:boolean isComposing():624 -> j + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 40:43:boolean tryImminentInvalidation(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1285 -> j + 40:43:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1260 -> j + 44:49:boolean tryImminentInvalidation(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1285:1285 -> j + 44:49:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1260 -> j + 50:52:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1261:1261 -> j + 53:56:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1263:1263 -> j + 57:58:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):2324:2324 -> j + 59:62:boolean androidx.compose.runtime.RecomposeScopeImpl.getCanRecompose():106:106 -> j + 59:62:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1265 -> j + 63:66:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1267:1267 -> j + 67:70:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1268:1268 -> j + 71:76:androidx.compose.runtime.tooling.CompositionObserver observer():1388:1388 -> j + 71:76:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1269 -> j + 77:79:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1266:1266 -> j + 80:82:androidx.compose.runtime.InvalidationResult invalidate(androidx.compose.runtime.RecomposeScopeImpl,java.lang.Object):1256:1256 -> j + 1:4:void setContent(kotlin.jvm.functions.Function2):633:633 -> k + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lkz3/o;)V"} + 5:7:void setContent(kotlin.jvm.functions.Function2):634:634 -> k + 8:13:void setContent(kotlin.jvm.functions.Function2):636:636 -> k + 14:18:void androidx.compose.runtime.ComposerImpl.startReuseFromRoot():1932:1932 -> k + 14:18:void composeInitialWithReuse(kotlin.jvm.functions.Function2):698 -> k + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 14:18:void setContent(kotlin.jvm.functions.Function2):637 -> k + 19:20:void androidx.compose.runtime.ComposerImpl.startReuseFromRoot():1933:1933 -> k + 19:20:void composeInitialWithReuse(kotlin.jvm.functions.Function2):698 -> k + 19:20:void setContent(kotlin.jvm.functions.Function2):637 -> k + 21:22:void composeInitial(kotlin.jvm.functions.Function2):671:671 -> k + 21:22:void composeInitialWithReuse(kotlin.jvm.functions.Function2):699 -> k + 21:22:void setContent(kotlin.jvm.functions.Function2):637 -> k + 23:25:void composeInitial(kotlin.jvm.functions.Function2):672:672 -> k + 23:25:void composeInitialWithReuse(kotlin.jvm.functions.Function2):699 -> k + 23:25:void setContent(kotlin.jvm.functions.Function2):637 -> k + 26:29:void composeInitialWithReuse(kotlin.jvm.functions.Function2):700:700 -> k + 26:29:void setContent(kotlin.jvm.functions.Function2):637 -> k + 30:31:void composeInitial(kotlin.jvm.functions.Function2):671:671 -> k + 30:31:void setContent(kotlin.jvm.functions.Function2):639 -> k + 32:35:void composeInitial(kotlin.jvm.functions.Function2):672:672 -> k + 32:35:void setContent(kotlin.jvm.functions.Function2):639 -> k + 1:10:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):1091:1091 -> l + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/l1;)V"} + 11:13:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):2134:2134 -> l + 14:15:androidx.compose.runtime.SlotTable androidx.compose.runtime.MovableContentState.getSlotTable$runtime():411:411 -> l + 14:15:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):1092 -> l + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 16:19:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):2136:2136 -> l + 20:21:int androidx.compose.runtime.SlotWriter.getCurrentGroup():1326:1326 -> l + 20:21:void androidx.compose.runtime.ComposerKt.removeCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4473 -> l + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 20:21:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):1093 -> l + 22:29:void androidx.compose.runtime.ComposerKt.removeCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4473:4473 -> l + 22:29:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):1093 -> l + 30:32:void androidx.compose.runtime.ComposerKt.removeCurrentGroup(androidx.compose.runtime.SlotWriter,androidx.compose.runtime.RememberManager):4487:4487 -> l + 30:32:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):1093 -> l + 33:35:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):1093:1093 -> l + 36:38:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):2141:2141 -> l + 39:41:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):1094:1094 -> l + 42:49:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):2144:2144 -> l + 50:53:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):2141:2141 -> l + 54:57:void disposeUnusedMovableContent(androidx.compose.runtime.MovableContentState):2144:2144 -> l + 1:2:void applyChanges():1147:1147 -> m + 3:3:void applyChanges():2229:2229 -> m + 4:8:void applyChanges():1149:1149 -> m + 9:11:void applyChanges():1150:1150 -> m + 12:13:void applyChanges():1151:1151 -> m + 14:16:void applyChanges():2229:2229 -> m + 17:18:void applyChanges():2236:2236 -> m + 19:20:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> m + 19:20:void applyChanges():2236 -> m + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 21:26:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> m + 21:26:void applyChanges():2236 -> m + 27:36:void applyChanges():2237:2237 -> m + 37:39:void applyChanges():2239:2239 -> m + 40:42:void applyChanges():2237:2237 -> m + 43:53:void applyChanges():2242:2242 -> m + 54:54:void applyChanges():2244:2244 -> m + 55:57:void applyChanges():2247:2247 -> m + 58:59:void applyChanges():2248:2248 -> m + 60:61:void applyChanges():2229:2229 -> m + 1:2:boolean isComposing():624:624 -> n + 3:5:boolean androidx.compose.runtime.ComposerImpl.isComposing$runtime():1460:1460 -> n + 3:5:boolean isComposing():624 -> n + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 1:2:void recordWriteOf(java.lang.Object):1052:1052 -> o + 3:3:void recordWriteOf(java.lang.Object):2038:2038 -> o + 4:6:void recordWriteOf(java.lang.Object):1053:1053 -> o + 7:8:void recordWriteOf(java.lang.Object):1057:1057 -> o + 9:14:void recordWriteOf(java.lang.Object):2039:2039 -> o + 15:18:void recordWriteOf(java.lang.Object):2043:2043 -> o + 19:20:void recordWriteOf(java.lang.Object):2044:2044 -> o + 21:22:void recordWriteOf(java.lang.Object):2046:2046 -> o + 23:24:void recordWriteOf(java.lang.Object):2049:2049 -> o + 25:31:void recordWriteOf(java.lang.Object):2050:2050 -> o + 32:71:void recordWriteOf(java.lang.Object):2053:2053 -> o + 72:75:void recordWriteOf(java.lang.Object):2047:2047 -> o + 76:92:void recordWriteOf(java.lang.Object):1057:1057 -> o + 93:94:void recordWriteOf(java.lang.Object):2070:2070 -> o + 95:97:void recordWriteOf(java.lang.Object):1057:1057 -> o + 98:99:void recordWriteOf(java.lang.Object):1058:1058 -> o + 100:103:void recordWriteOf(java.lang.Object):2038:2038 -> o + 1:2:void composeContent(kotlin.jvm.functions.Function2):829:829 -> p + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lkz3/o;)V"} + 3:3:void composeContent(kotlin.jvm.functions.Function2):1482:1482 -> p + 4:6:void composeContent(kotlin.jvm.functions.Function2):830:830 -> p + 7:8:androidx.collection.MutableScatterMap takeInvalidations-afanTW4():1355:1355 -> p + 7:8:void composeContent(kotlin.jvm.functions.Function2):1483 -> p + 9:12:androidx.collection.MutableScatterMap androidx.compose.runtime.collection.ScopeMap.constructor-impl$default(androidx.collection.MutableScatterMap,int,kotlin.jvm.internal.DefaultConstructorMarker):27:27 -> p + 9:12:androidx.collection.MutableScatterMap takeInvalidations-afanTW4():1356 -> p + 9:12:void composeContent(kotlin.jvm.functions.Function2):1483 -> p + 13:14:androidx.collection.MutableScatterMap takeInvalidations-afanTW4():1356:1356 -> p + 13:14:void composeContent(kotlin.jvm.functions.Function2):1483 -> p + 15:18:void composeContent(kotlin.jvm.functions.Function2):832:832 -> p + 19:20:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3744:3744 -> p + 19:20:void composeContent(kotlin.jvm.functions.Function2):832 -> p + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 21:22:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> p + 21:22:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3744 -> p + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 21:22:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 23:28:boolean androidx.compose.runtime.changelist.ChangeList.isEmpty():76:76 -> p + 23:28:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3744 -> p + 23:28:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 29:30:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3744:3744 -> p + 29:30:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 31:33:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):5274:5274 -> p + 31:33:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 34:36:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3745:3745 -> p + 34:36:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 37:39:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3747:3747 -> p + 37:39:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 40:41:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3749:3749 -> p + 40:41:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 42:43:void composeContent(kotlin.jvm.functions.Function2):833:833 -> p + 44:50:void composeContent(kotlin.jvm.functions.Function2):1482:1482 -> p + 51:53:void androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(androidx.collection.MutableScatterMap,kotlin.jvm.functions.Function2,androidx.compose.runtime.ShouldPauseCallback):3749:3749 -> p + 51:53:void composeContent(kotlin.jvm.functions.Function2):832 -> p + 54:55:void composeContent(kotlin.jvm.functions.Function2):1487:1487 -> p + 56:57:void composeContent(kotlin.jvm.functions.Function2):1488:1488 -> p + 58:59:void composeContent(kotlin.jvm.functions.Function2):1482:1482 -> p + 60:61:void composeContent(kotlin.jvm.functions.Function2):1490:1490 -> p + 62:63:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> p + 62:63:void composeContent(kotlin.jvm.functions.Function2):1490 -> p + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 64:69:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> p + 64:69:void composeContent(kotlin.jvm.functions.Function2):1490 -> p + 70:79:void composeContent(kotlin.jvm.functions.Function2):1491:1491 -> p + 80:82:void composeContent(kotlin.jvm.functions.Function2):1493:1493 -> p + 83:85:void composeContent(kotlin.jvm.functions.Function2):1491:1491 -> p + 86:96:void composeContent(kotlin.jvm.functions.Function2):1496:1496 -> p + 97:97:void composeContent(kotlin.jvm.functions.Function2):1498:1498 -> p + 98:100:void composeContent(kotlin.jvm.functions.Function2):1501:1501 -> p + 101:101:void composeContent(kotlin.jvm.functions.Function2):1502:1502 -> p + 1:2:boolean getHasInvalidations():894:894 -> q + 3:3:boolean getHasInvalidations():1530:1530 -> q + 4:5:boolean getHasInvalidations():894:894 -> q + 6:12:int androidx.collection.ScatterMap.getSize():280:280 -> q + 6:12:int androidx.compose.runtime.collection.ScopeMap.getSize-impl(androidx.collection.MutableScatterMap):32 -> q + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 6:12:boolean getHasInvalidations():894 -> q + 13:17:boolean getHasInvalidations():1530:1530 -> q + 1:6:void androidx.compose.runtime.ComposerImpl.prepareCompose$runtime(kotlin.jvm.functions.Function0):3754:3754 -> r + 1:6:void prepareCompose(kotlin.jvm.functions.Function0):931 -> r + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/a3;)V"} + 7:8:void androidx.compose.runtime.ComposerImpl.prepareCompose$runtime(kotlin.jvm.functions.Function0):3754:3754 -> r + 7:8:void prepareCompose(kotlin.jvm.functions.Function0):931 -> r + 9:12:void androidx.compose.runtime.ComposerImpl.prepareCompose$runtime(kotlin.jvm.functions.Function0):5278:5278 -> r + 9:12:void prepareCompose(kotlin.jvm.functions.Function0):931 -> r + 13:15:void androidx.compose.runtime.ComposerImpl.prepareCompose$runtime(kotlin.jvm.functions.Function0):3755:3755 -> r + 13:15:void prepareCompose(kotlin.jvm.functions.Function0):931 -> r + 16:18:void androidx.compose.runtime.ComposerImpl.prepareCompose$runtime(kotlin.jvm.functions.Function0):3757:3757 -> r + 16:18:void prepareCompose(kotlin.jvm.functions.Function0):931 -> r + 19:25:void androidx.compose.runtime.ComposerImpl.prepareCompose$runtime(kotlin.jvm.functions.Function0):3759:3759 -> r + 19:25:void prepareCompose(kotlin.jvm.functions.Function0):931 -> r + 1:6:void abandonChanges():1202:1202 -> s + 7:8:void abandonChanges():1203:1203 -> s + 9:10:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> s + 9:10:void abandonChanges():1203 -> s + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 11:13:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> s + 11:13:void abandonChanges():1203 -> s + 14:15:void abandonChanges():1204:1204 -> s + 16:17:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> s + 16:17:void abandonChanges():1204 -> s + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 18:20:void androidx.compose.runtime.changelist.ChangeList.clear():81:81 -> s + 18:20:void abandonChanges():1204 -> s + 21:24:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> s + 21:24:void abandonChanges():1206 -> s + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 25:30:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> s + 25:30:void abandonChanges():1206 -> s + 31:38:void abandonChanges():1207:1207 -> s + 39:41:void abandonChanges():2314:2314 -> s + 42:44:void abandonChanges():1207:1207 -> s + 45:54:void abandonChanges():2317:2317 -> s + 1:2:void changesApplied():1166:1166 -> t + 3:3:void changesApplied():2271:2271 -> t + 4:6:void changesApplied():1168:1168 -> t + 7:8:void androidx.compose.runtime.ComposerImpl.changesApplied$runtime():1764:1764 -> t + 7:8:void changesApplied():1168 -> t + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 9:10:void changesApplied():1172:1172 -> t + 11:12:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> t + 11:12:void changesApplied():1172 -> t + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 13:18:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> t + 13:18:void changesApplied():1172 -> t + 19:28:void changesApplied():1173:1173 -> t + 29:31:void changesApplied():2278:2278 -> t + 32:34:void changesApplied():1174:1174 -> t + 35:45:void changesApplied():2281:2281 -> t + 46:47:void changesApplied():1177:1177 -> t + 48:49:void changesApplied():2271:2271 -> t + 50:51:void changesApplied():2285:2285 -> t + 52:53:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> t + 52:53:void changesApplied():2285 -> t + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 54:59:boolean androidx.collection.SetWrapper.isEmpty():1150:1150 -> t + 54:59:void changesApplied():2285 -> t + 60:69:void changesApplied():2286:2286 -> t + 70:72:void changesApplied():2288:2288 -> t + 73:75:void changesApplied():2286:2286 -> t + 76:86:void changesApplied():2291:2291 -> t + 87:87:void changesApplied():2293:2293 -> t + 88:90:void changesApplied():2296:2296 -> t + 91:92:void changesApplied():2297:2297 -> t + 93:94:void changesApplied():2271:2271 -> t + 1:8:void recordModificationsOf(java.util.Set):906:906 -> u + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lj1/e;)V"} + 9:10:void recordModificationsOf(java.util.Set):910:910 -> u + 11:17:boolean kotlin.jvm.internal.Intrinsics.areEqual(java.lang.Object,java.lang.Object):169:169 -> u + 11:17:void recordModificationsOf(java.util.Set):910 -> u + 18:31:void recordModificationsOf(java.util.Set):911:911 -> u + 32:38:void recordModificationsOf(java.util.Set):912:912 -> u + 39:41:java.lang.Object[] kotlin.collections.ArraysKt___ArraysJvmKt.plus(java.lang.Object[],java.lang.Object):1664:1664 -> u + 39:41:void recordModificationsOf(java.util.Set):912 -> u + 42:45:java.lang.Object[] kotlin.collections.ArraysKt___ArraysJvmKt.plus(java.lang.Object[],java.lang.Object):1665:1665 -> u + 42:45:void recordModificationsOf(java.util.Set):912 -> u + 46:48:java.lang.Object[] kotlin.collections.ArraysKt___ArraysJvmKt.plus(java.lang.Object[],java.lang.Object):1666:1666 -> u + 46:48:void recordModificationsOf(java.util.Set):912 -> u + 49:50:void recordModificationsOf(java.util.Set):912:912 -> u + 51:75:void recordModificationsOf(java.util.Set):913:913 -> u + 76:77:void recordModificationsOf(java.util.Set):915:915 -> u + 78:85:boolean java.util.concurrent.atomic.AtomicReference.compareAndSet(java.lang.Object,java.lang.Object):0:0 -> u + 78:85:void recordModificationsOf(java.util.Set):915 -> u + 86:87:void recordModificationsOf(java.util.Set):917:917 -> u + 88:88:void recordModificationsOf(java.util.Set):1531:1531 -> u + 89:93:void recordModificationsOf(java.util.Set):917:917 -> u + 94:99:void recordModificationsOf(java.util.Set):1531:1531 -> u + 100:106:boolean java.util.concurrent.atomic.AtomicReference.compareAndSet(java.lang.Object,java.lang.Object):0:0 -> u + 100:106:void recordModificationsOf(java.util.Set):915 -> u + 1:3:void setContentWithReuse(kotlin.jvm.functions.Function2):644:644 -> v + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lkz3/o;)V"} + 4:8:void setContentWithReuse(kotlin.jvm.functions.Function2):645:645 -> v + 9:13:void androidx.compose.runtime.ComposerImpl.startReuseFromRoot():1932:1932 -> v + 9:13:void composeInitialWithReuse(kotlin.jvm.functions.Function2):698 -> v + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 9:13:void setContentWithReuse(kotlin.jvm.functions.Function2):647 -> v + 14:15:void androidx.compose.runtime.ComposerImpl.startReuseFromRoot():1933:1933 -> v + 14:15:void composeInitialWithReuse(kotlin.jvm.functions.Function2):698 -> v + 14:15:void setContentWithReuse(kotlin.jvm.functions.Function2):647 -> v + 16:17:void composeInitial(kotlin.jvm.functions.Function2):671:671 -> v + 16:17:void composeInitialWithReuse(kotlin.jvm.functions.Function2):699 -> v + 16:17:void setContentWithReuse(kotlin.jvm.functions.Function2):647 -> v + 18:22:void composeInitial(kotlin.jvm.functions.Function2):672:672 -> v + 18:22:void composeInitialWithReuse(kotlin.jvm.functions.Function2):699 -> v + 18:22:void setContentWithReuse(kotlin.jvm.functions.Function2):647 -> v + 23:26:void composeInitialWithReuse(kotlin.jvm.functions.Function2):700:700 -> v + 23:26:void setContentWithReuse(kotlin.jvm.functions.Function2):647 -> v + 1:4:androidx.compose.runtime.PausedComposition setPausableContent(kotlin.jvm.functions.Function2):651:651 -> w + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lkz3/o;)Lh1/g2;"} + 5:9:androidx.compose.runtime.PausedComposition setPausableContent(kotlin.jvm.functions.Function2):652:652 -> w + 1:2:void invalidateAll():1212:1212 -> x + 3:3:void invalidateAll():2320:2320 -> x + 4:5:void invalidateAll():1212:1212 -> x + 6:7:java.lang.Object[] androidx.compose.runtime.SlotTable.getSlots():111:111 -> x + 6:7:void invalidateAll():1212 -> x + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 8:13:void invalidateAll():2321:2321 -> x + 14:33:void invalidateAll():1212:1212 -> x + 34:37:void invalidateAll():2320:2320 -> x + 5:6:void addPendingInvalidationsLocked(java.lang.Object,boolean):959:959 -> y + 7:12:void addPendingInvalidationsLocked(java.lang.Object,boolean):1631:1631 -> y + 13:22:void addPendingInvalidationsLocked(java.lang.Object,boolean):1635:1635 -> y + 23:24:void addPendingInvalidationsLocked(java.lang.Object,boolean):1636:1636 -> y + 25:26:void addPendingInvalidationsLocked(java.lang.Object,boolean):1638:1638 -> y + 27:28:void addPendingInvalidationsLocked(java.lang.Object,boolean):1641:1641 -> y + 29:34:void addPendingInvalidationsLocked(java.lang.Object,boolean):1642:1642 -> y + 35:74:void addPendingInvalidationsLocked(java.lang.Object,boolean):1645:1645 -> y + 75:78:void addPendingInvalidationsLocked(java.lang.Object,boolean):1639:1639 -> y + 79:84:void addPendingInvalidationsLocked(java.lang.Object,boolean):961:961 -> y + 85:94:void addPendingInvalidationsLocked(java.lang.Object,boolean):962:962 -> y + 95:100:boolean androidx.compose.runtime.RecomposeScopeImpl.isConditional():319:319 -> y + 95:100:void addPendingInvalidationsLocked(java.lang.Object,boolean):964 -> y + 101:104:void addPendingInvalidationsLocked(java.lang.Object,boolean):965:965 -> y + 105:125:void addPendingInvalidationsLocked(java.lang.Object,boolean):967:967 -> y + 126:127:void addPendingInvalidationsLocked(java.lang.Object,boolean):1662:1662 -> y + 128:133:void addPendingInvalidationsLocked(java.lang.Object,boolean):961:961 -> y + 134:141:void addPendingInvalidationsLocked(java.lang.Object,boolean):962:962 -> y + 142:147:boolean androidx.compose.runtime.RecomposeScopeImpl.isConditional():319:319 -> y + 142:147:void addPendingInvalidationsLocked(java.lang.Object,boolean):964 -> y + 148:151:void addPendingInvalidationsLocked(java.lang.Object,boolean):965:965 -> y + 152:155:void addPendingInvalidationsLocked(java.lang.Object,boolean):967:967 -> y + 7:15:void addPendingInvalidationsLocked(java.util.Set,boolean):1667:1667 -> z + 16:17:void addPendingInvalidationsLocked(java.util.Set,boolean):1668:1668 -> z + 18:19:androidx.collection.ScatterSet androidx.compose.runtime.collection.ScatterSetWrapper.getSet$runtime():25:25 -> z + 18:19:void addPendingInvalidationsLocked(java.util.Set,boolean):1668 -> z + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 20:21:void addPendingInvalidationsLocked(java.util.Set,boolean):1670:1670 -> z + 22:23:void addPendingInvalidationsLocked(java.util.Set,boolean):1673:1673 -> z + 24:33:void addPendingInvalidationsLocked(java.util.Set,boolean):1674:1674 -> z + 34:69:void addPendingInvalidationsLocked(java.util.Set,boolean):1677:1677 -> z + 70:73:void addPendingInvalidationsLocked(java.util.Set,boolean):1671:1671 -> z + 74:77:void addPendingInvalidationsLocked(java.util.Set,boolean):975:975 -> z + 78:90:void addPendingInvalidationsLocked(java.util.Set,boolean):976:976 -> z + 91:93:void addPendingInvalidationsLocked(java.util.Set,boolean):978:978 -> z + 94:99:void addPendingInvalidationsLocked(java.util.Set,boolean):1686:1686 -> z + 100:103:void addPendingInvalidationsLocked(java.util.Set,boolean):1690:1690 -> z + 104:105:void addPendingInvalidationsLocked(java.util.Set,boolean):1691:1691 -> z + 106:107:void addPendingInvalidationsLocked(java.util.Set,boolean):1693:1693 -> z + 108:109:void addPendingInvalidationsLocked(java.util.Set,boolean):1696:1696 -> z + 110:119:void addPendingInvalidationsLocked(java.util.Set,boolean):1697:1697 -> z + 120:154:void addPendingInvalidationsLocked(java.util.Set,boolean):1700:1700 -> z + 155:162:void addPendingInvalidationsLocked(java.util.Set,boolean):1694:1694 -> z + 163:202:void addPendingInvalidationsLocked(java.util.Set,boolean):980:980 -> z + 203:204:void addPendingInvalidationsLocked(java.util.Set,boolean):1717:1717 -> z + 205:214:void addPendingInvalidationsLocked(java.util.Set,boolean):980:980 -> z + 215:293:void addPendingInvalidationsLocked(java.util.Set,boolean):1720:1720 -> z + 294:295:void addPendingInvalidationsLocked(java.util.Set,boolean):1728:1728 -> z + 296:309:void addPendingInvalidationsLocked(java.util.Set,boolean):1729:1729 -> z + 310:313:void addPendingInvalidationsLocked(java.util.Set,boolean):975:975 -> z + 314:321:void addPendingInvalidationsLocked(java.util.Set,boolean):976:976 -> z + 322:324:void addPendingInvalidationsLocked(java.util.Set,boolean):978:978 -> z + 325:330:void addPendingInvalidationsLocked(java.util.Set,boolean):1686:1686 -> z + 331:334:void addPendingInvalidationsLocked(java.util.Set,boolean):1690:1690 -> z + 335:336:void addPendingInvalidationsLocked(java.util.Set,boolean):1691:1691 -> z + 337:338:void addPendingInvalidationsLocked(java.util.Set,boolean):1731:1731 -> z + 339:340:void addPendingInvalidationsLocked(java.util.Set,boolean):1734:1734 -> z + 341:346:void addPendingInvalidationsLocked(java.util.Set,boolean):1735:1735 -> z + 347:379:void addPendingInvalidationsLocked(java.util.Set,boolean):1738:1738 -> z + 380:383:void addPendingInvalidationsLocked(java.util.Set,boolean):1732:1732 -> z + 384:401:void addPendingInvalidationsLocked(java.util.Set,boolean):980:980 -> z + 402:403:void addPendingInvalidationsLocked(java.util.Set,boolean):1717:1717 -> z + 404:406:void addPendingInvalidationsLocked(java.util.Set,boolean):980:980 -> z + 407:409:void addPendingInvalidationsLocked(java.util.Set,boolean):1720:1720 -> z + 410:427:void addPendingInvalidationsLocked(java.util.Set,boolean):987:987 -> z + 428:429:void addPendingInvalidationsLocked(java.util.Set,boolean):1759:1759 -> z + 430:435:void addPendingInvalidationsLocked(java.util.Set,boolean):1760:1760 -> z + 436:468:void addPendingInvalidationsLocked(java.util.Set,boolean):1763:1763 -> z + 469:476:void addPendingInvalidationsLocked(java.util.Set,boolean):1772:1772 -> z + 477:480:void addPendingInvalidationsLocked(java.util.Set,boolean):1774:1774 -> z + 481:485:void addPendingInvalidationsLocked(java.util.Set,boolean):1775:1775 -> z + 486:487:void addPendingInvalidationsLocked(java.util.Set,boolean):1777:1777 -> z + 488:491:void addPendingInvalidationsLocked(java.util.Set,boolean):1780:1780 -> z + 492:501:void addPendingInvalidationsLocked(java.util.Set,boolean):1781:1781 -> z + 502:541:void addPendingInvalidationsLocked(java.util.Set,boolean):1784:1784 -> z + 542:549:void addPendingInvalidationsLocked(java.util.Set,boolean):1793:1793 -> z + 550:561:void addPendingInvalidationsLocked(java.util.Set,boolean):989:989 -> z + 562:598:void addPendingInvalidationsLocked(java.util.Set,boolean):1794:1794 -> z + 599:609:void addPendingInvalidationsLocked(java.util.Set,boolean):1804:1804 -> z + 610:614:void addPendingInvalidationsLocked(java.util.Set,boolean):1807:1807 -> z + 615:632:void addPendingInvalidationsLocked(java.util.Set,boolean):989:989 -> z + 633:680:void addPendingInvalidationsLocked(java.util.Set,boolean):1810:1810 -> z + 681:683:void addPendingInvalidationsLocked(java.util.Set,boolean):991:991 -> z + 684:687:void addPendingInvalidationsLocked(java.util.Set,boolean):992:992 -> z + 688:693:void addPendingInvalidationsLocked(java.util.Set,boolean):993:993 -> z + 694:695:void addPendingInvalidationsLocked(java.util.Set,boolean):1823:1823 -> z + 696:701:void addPendingInvalidationsLocked(java.util.Set,boolean):1824:1824 -> z + 702:739:void addPendingInvalidationsLocked(java.util.Set,boolean):1827:1827 -> z + 740:747:void addPendingInvalidationsLocked(java.util.Set,boolean):1836:1836 -> z + 748:751:void addPendingInvalidationsLocked(java.util.Set,boolean):1838:1838 -> z + 752:756:void addPendingInvalidationsLocked(java.util.Set,boolean):1839:1839 -> z + 757:758:void addPendingInvalidationsLocked(java.util.Set,boolean):1841:1841 -> z + 759:760:void addPendingInvalidationsLocked(java.util.Set,boolean):1844:1844 -> z + 761:770:void addPendingInvalidationsLocked(java.util.Set,boolean):1845:1845 -> z + 771:817:void addPendingInvalidationsLocked(java.util.Set,boolean):1848:1848 -> z + 818:825:void addPendingInvalidationsLocked(java.util.Set,boolean):1857:1857 -> z + 826:831:void addPendingInvalidationsLocked(java.util.Set,boolean):994:994 -> z + 832:875:void addPendingInvalidationsLocked(java.util.Set,boolean):1858:1858 -> z + 876:886:void addPendingInvalidationsLocked(java.util.Set,boolean):1868:1868 -> z + 887:891:void addPendingInvalidationsLocked(java.util.Set,boolean):1871:1871 -> z + 892:897:void addPendingInvalidationsLocked(java.util.Set,boolean):994:994 -> z + 898:946:void addPendingInvalidationsLocked(java.util.Set,boolean):1874:1874 -> z + 947:949:void addPendingInvalidationsLocked(java.util.Set,boolean):995:995 -> z + 950:953:void addPendingInvalidationsLocked(java.util.Set,boolean):996:996 -> z +androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$ExternalSyntheticLambda0 -> h1.e3: +# {"id":"sourceFile","fileName":"R8$$SyntheticClass"} +# {"id":"com.android.tools.r8.synthesized"} + androidx.compose.runtime.Recomposer androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$0 -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lh1/b3;"} + # {"id":"com.android.tools.r8.synthesized"} + androidx.collection.MutableScatterSet androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$1 -> b + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + # {"id":"com.android.tools.r8.synthesized"} + androidx.collection.MutableScatterSet androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$2 -> c + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + # {"id":"com.android.tools.r8.synthesized"} + java.util.List androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$3 -> d + # {"id":"com.android.tools.r8.synthesized"} + java.util.List androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$4 -> e + # {"id":"com.android.tools.r8.synthesized"} + androidx.collection.MutableScatterSet androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$5 -> f + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + # {"id":"com.android.tools.r8.synthesized"} + java.util.List androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$6 -> g + # {"id":"com.android.tools.r8.synthesized"} + androidx.collection.MutableScatterSet androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$7 -> h + # {"id":"com.android.tools.r8.residualsignature","signature":"Lx/l0;"} + # {"id":"com.android.tools.r8.synthesized"} + java.util.Set androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$InternalSyntheticLambda$2$b7d92ab79e12ad665ce7929b0c6ee8087c162ee98ed47cce4be00a2db4c9c46a$0.f$8 -> i + # {"id":"com.android.tools.r8.synthesized"} + 1:1:void h1.Recomposer$runRecomposeAndApplyChanges$2$$ExternalSyntheticLambda0.(h1.Recomposer,x.MutableScatterSet,x.MutableScatterSet,java.util.List,java.util.List,x.MutableScatterSet,java.util.List,x.MutableScatterSet,java.util.Set):0:0 -> + # {"id":"com.android.tools.r8.synthesized"} + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lh1/b3;Lx/l0;Lx/l0;Ljava/util/List;Ljava/util/List;Lx/l0;Ljava/util/List;Lx/l0;Ljava/util/Set;)V"} + 29:30:boolean androidx.compose.runtime.Recomposer.getHasBroadcastFrameClockAwaiters():318:318 -> invoke + 29:30:boolean androidx.compose.runtime.Recomposer.access$getHasBroadcastFrameClockAwaiters(androidx.compose.runtime.Recomposer):156 -> invoke + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 29:30:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):601 -> invoke + # {"id":"com.android.tools.r8.residualsignature","signature":"(Ljava/lang/Object;)Ljava/lang/Object;"} + 31:31:boolean androidx.compose.runtime.Recomposer.getHasBroadcastFrameClockAwaiters():1912:1912 -> invoke + 31:31:boolean androidx.compose.runtime.Recomposer.access$getHasBroadcastFrameClockAwaiters(androidx.compose.runtime.Recomposer):156 -> invoke + 31:31:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):601 -> invoke + 32:35:boolean androidx.compose.runtime.Recomposer.getHasBroadcastFrameClockAwaiters():318:318 -> invoke + 32:35:boolean androidx.compose.runtime.Recomposer.access$getHasBroadcastFrameClockAwaiters(androidx.compose.runtime.Recomposer):156 -> invoke + 32:35:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):601 -> invoke + 36:38:boolean androidx.compose.runtime.Recomposer.getHasBroadcastFrameClockAwaiters():1912:1912 -> invoke + 36:38:boolean androidx.compose.runtime.Recomposer.access$getHasBroadcastFrameClockAwaiters(androidx.compose.runtime.Recomposer):156 -> invoke + 36:38:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):601 -> invoke + 39:40:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):602:602 -> invoke + 41:43:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> invoke + 41:43:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):1991 -> invoke + 44:45:androidx.compose.runtime.BroadcastFrameClock androidx.compose.runtime.Recomposer.access$getBroadcastFrameClock$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 44:45:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):605 -> invoke + 46:48:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):605:605 -> invoke + 49:56:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):608:608 -> invoke + 57:58:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):609:609 -> invoke + 59:66:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> invoke + 59:66:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):1995 -> invoke + 67:67:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):1995:1995 -> invoke + 68:69:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):612:612 -> invoke + 70:72:java.lang.Object androidx.compose.runtime.internal.Trace.beginSection(java.lang.String):21:21 -> invoke + 70:72:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):1996 -> invoke + 73:75:boolean androidx.compose.runtime.Recomposer.access$recordComposerModifications(androidx.compose.runtime.Recomposer):156:156 -> invoke + 73:75:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):615 -> invoke + 76:77:java.lang.Object androidx.compose.runtime.Recomposer.access$getStateLock$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 76:77:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):616 -> invoke + 78:78:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):1999:1999 -> invoke + 79:80:androidx.compose.runtime.collection.MutableVector androidx.compose.runtime.Recomposer.access$getCompositionInvalidations$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 79:80:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):617 -> invoke + 81:82:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2001:2001 -> invoke + 83:87:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> invoke + 83:87:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2002 -> invoke + 88:91:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2004:2004 -> invoke + 92:103:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):617:617 -> invoke + 104:105:androidx.compose.runtime.collection.MutableVector androidx.compose.runtime.Recomposer.access$getCompositionInvalidations$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 104:105:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):618 -> invoke + 106:108:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):618:618 -> invoke + 109:110:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):619:619 -> invoke + 111:111:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):1999:1999 -> invoke + 112:114:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):622:622 -> invoke + 115:117:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):623:623 -> invoke + 118:138:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):624:624 -> invoke + 139:143:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2036:2036 -> invoke + 144:147:androidx.compose.runtime.snapshots.Snapshot androidx.compose.runtime.snapshots.Snapshot$Companion.getCurrent():293:293 -> invoke + 144:147:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2036 -> invoke + 148:151:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2039:2039 -> invoke + 152:153:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2040:2040 -> invoke + 154:162:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2041:2041 -> invoke + 163:170:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2040:2040 -> invoke + 171:177:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2048:2048 -> invoke + 178:181:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2057:2057 -> invoke + 182:190:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):692:692 -> invoke + 191:200:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2060:2060 -> invoke + 201:204:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2061:2061 -> invoke + 205:206:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2062:2062 -> invoke + 207:214:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):702:702 -> invoke + 215:224:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2065:2065 -> invoke + 225:228:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2066:2066 -> invoke + 229:230:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2067:2067 -> invoke + 231:236:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):705:705 -> invoke + 237:243:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):712:712 -> invoke + 244:246:void androidx.compose.runtime.Recomposer.processCompositionError$default(androidx.compose.runtime.Recomposer,java.lang.Throwable,androidx.compose.runtime.ControlledComposition,boolean,int,java.lang.Object):764:764 -> invoke + 244:246:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):708 -> invoke + 247:249:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):709:709 -> invoke + 250:251:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):710:710 -> invoke + 252:254:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):712:712 -> invoke + 255:257:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2070:2070 -> invoke + 258:260:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2071:2071 -> invoke + 261:269:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> invoke + 261:269:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2013 -> invoke + 270:273:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):712:712 -> invoke + 274:288:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):716:716 -> invoke + 289:291:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):718:718 -> invoke + 292:295:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2073:2073 -> invoke + 296:297:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2076:2076 -> invoke + 298:307:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2077:2077 -> invoke + 308:341:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2080:2080 -> invoke + 342:345:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2074:2074 -> invoke + 346:370:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):720:720 -> invoke + 371:374:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):727:727 -> invoke + 375:377:void androidx.compose.runtime.Recomposer.processCompositionError$default(androidx.compose.runtime.Recomposer,java.lang.Throwable,androidx.compose.runtime.ControlledComposition,boolean,int,java.lang.Object):764:764 -> invoke + 375:377:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):723 -> invoke + 378:380:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):724:724 -> invoke + 381:382:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):725:725 -> invoke + 383:385:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):727:727 -> invoke + 386:391:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2070:2070 -> invoke + 392:397:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):727:727 -> invoke + 398:403:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):731:731 -> invoke + 404:405:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2098:2098 -> invoke + 406:407:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2101:2101 -> invoke + 408:413:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2102:2102 -> invoke + 414:451:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2105:2105 -> invoke + 452:455:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2099:2099 -> invoke + 456:488:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):734:734 -> invoke + 489:492:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):741:741 -> invoke + 493:495:void androidx.compose.runtime.Recomposer.processCompositionError$default(androidx.compose.runtime.Recomposer,java.lang.Throwable,androidx.compose.runtime.ControlledComposition,boolean,int,java.lang.Object):764:764 -> invoke + 493:495:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):737 -> invoke + 496:498:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):738:738 -> invoke + 499:500:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):739:739 -> invoke + 501:503:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):741:741 -> invoke + 504:509:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2070:2070 -> invoke + 510:513:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):741:741 -> invoke + 514:515:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):744:744 -> invoke + 516:518:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2070:2070 -> invoke + 519:521:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2071:2071 -> invoke + 522:523:java.lang.Object androidx.compose.runtime.Recomposer.access$getStateLock$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 522:523:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):746 -> invoke + 524:524:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2124:2124 -> invoke + 525:527:kotlinx.coroutines.CancellableContinuation androidx.compose.runtime.Recomposer.access$deriveStateLocked(androidx.compose.runtime.Recomposer):156:156 -> invoke + 525:527:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):746 -> invoke + 528:528:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2124:2124 -> invoke + 529:533:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):753:753 -> invoke + 534:540:void androidx.compose.runtime.snapshots.Snapshot$Companion.notifyObjectsInitialized():666:666 -> invoke + 534:540:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):753 -> invoke + 541:543:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):754:754 -> invoke + 544:547:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):755:755 -> invoke + 548:549:void androidx.compose.runtime.Recomposer.access$setCompositionsRemoved$p(androidx.compose.runtime.Recomposer,java.util.Set):156:156 -> invoke + 548:549:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):756 -> invoke + 550:552:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> invoke + 550:552:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2013 -> invoke + 553:556:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):758:758 -> invoke + 557:558:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2124:2124 -> invoke + 559:562:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2070:2070 -> invoke + 563:566:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2071:2071 -> invoke + 567:576:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2008:2008 -> invoke + 577:580:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2009:2009 -> invoke + 581:582:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2010:2010 -> invoke + 583:588:androidx.compose.runtime.ControlledComposition androidx.compose.runtime.Recomposer.access$performRecompose(androidx.compose.runtime.Recomposer,androidx.compose.runtime.ControlledComposition,androidx.collection.MutableScatterSet):156:156 -> invoke + 583:588:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):627 -> invoke + 589:594:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):628:628 -> invoke + 595:601:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):629:629 -> invoke + 602:607:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):630:630 -> invoke + 608:610:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):637:637 -> invoke + 611:616:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):645:645 -> invoke + 617:618:androidx.compose.runtime.collection.MutableVector androidx.compose.runtime.Recomposer.access$getCompositionInvalidations$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 617:618:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):645 -> invoke + 619:622:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> invoke + 619:622:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2014 -> invoke + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 623:624:java.lang.Object androidx.compose.runtime.Recomposer.access$getStateLock$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 623:624:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):647 -> invoke + 625:625:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2015:2015 -> invoke + 626:629:java.util.List androidx.compose.runtime.Recomposer.access$knownCompositionsLocked(androidx.compose.runtime.Recomposer):156:156 -> invoke + 626:629:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):648 -> invoke + 630:639:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2016:2016 -> invoke + 640:643:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2017:2017 -> invoke + 644:645:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2018:2018 -> invoke + 646:651:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):650:650 -> invoke + 652:657:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):651:651 -> invoke + 658:670:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):653:653 -> invoke + 671:672:androidx.compose.runtime.collection.MutableVector androidx.compose.runtime.Recomposer.access$getCompositionInvalidations$p(androidx.compose.runtime.Recomposer):156:156 -> invoke + 671:672:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):661 -> invoke + 673:678:int androidx.compose.runtime.collection.MutableVector.getSize():39:39 -> invoke + 673:678:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2022 -> invoke + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 679:684:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2024:2024 -> invoke + 685:696:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):662:662 -> invoke + 697:707:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):663:663 -> invoke + 708:718:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2030:2030 -> invoke + 719:723:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2033:2033 -> invoke + 724:726:void kotlin.collections.ArraysKt___ArraysJvmKt.fill(java.lang.Object[],java.lang.Object,int,int):1545:1545 -> invoke + 724:726:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2033 -> invoke + 727:728:void androidx.compose.runtime.collection.MutableVector.setSize(int):737:737 -> invoke + 727:728:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2034 -> invoke + 729:730:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):669:669 -> invoke + 731:731:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2015:2015 -> invoke + 732:737:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):672:672 -> invoke + 738:740:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):674:674 -> invoke + 741:749:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):675:675 -> invoke + 750:753:java.util.List androidx.compose.runtime.Recomposer.access$performInsertValues(androidx.compose.runtime.Recomposer,java.util.List,androidx.collection.MutableScatterSet):156:156 -> invoke + 750:753:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):676 -> invoke + 754:758:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):676:676 -> invoke + 759:772:void androidx.collection.MutableScatterSet.plusAssign(java.lang.Iterable):1225:1225 -> invoke + 759:772:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):676 -> invoke + 773:776:void androidx.collection.MutableScatterSet.plusAssign(java.lang.Iterable):614:614 -> invoke + 773:776:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):676 -> invoke + 777:787:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):677:677 -> invoke + 788:790:void androidx.compose.runtime.Recomposer.processCompositionError$default(androidx.compose.runtime.Recomposer,java.lang.Throwable,androidx.compose.runtime.ControlledComposition,boolean,int,java.lang.Object):764:764 -> invoke + 788:790:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):680 -> invoke + 791:793:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):681:681 -> invoke + 794:797:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):682:682 -> invoke + 798:799:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2015:2015 -> invoke + 800:802:void androidx.compose.runtime.Recomposer.processCompositionError$default(androidx.compose.runtime.Recomposer,java.lang.Throwable,androidx.compose.runtime.ControlledComposition,boolean,int,java.lang.Object):764:764 -> invoke + 800:802:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):633 -> invoke + 803:805:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):634:634 -> invoke + 806:807:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):635:635 -> invoke + 808:818:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):637:637 -> invoke + 819:820:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):1999:1999 -> invoke + 821:823:void androidx.compose.runtime.internal.Trace.endSection(java.lang.Object):26:26 -> invoke + 821:823:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2013 -> invoke + 824:825:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):2013:2013 -> invoke + 826:827:boolean androidx.compose.runtime.Recomposer.getHasBroadcastFrameClockAwaiters():1912:1912 -> invoke + 826:827:boolean androidx.compose.runtime.Recomposer.access$getHasBroadcastFrameClockAwaiters(androidx.compose.runtime.Recomposer):156 -> invoke + 826:827:kotlin.Unit androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(androidx.compose.runtime.Recomposer,androidx.collection.MutableScatterSet,androidx.collection.MutableScatterSet,java.util.List,java.util.List,androidx.collection.MutableScatterSet,java.util.List,androidx.collection.MutableScatterSet,java.util.Set,long):601 -> invoke +androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1 -> w2.r0$c: +# {"id":"sourceFile","fileName":"AndroidUiFrameClock.android.kt"} + kotlinx.coroutines.CancellableContinuation $co -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lvz3/k;"} + kotlin.jvm.functions.Function1 $onFrame -> b + 1:8:void (kotlinx.coroutines.CancellableContinuation,androidx.compose.ui.platform.AndroidUiFrameClock,kotlin.jvm.functions.Function1):0:0 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lvz3/k;Lw2/r0;Lkotlin/jvm/functions/Function1;)V"} + 1:22:void doFrame(long):39:39 -> doFrame +androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1 -> w2.q0$c: +# {"id":"sourceFile","fileName":"AndroidUiDispatcher.android.kt"} + androidx.compose.ui.platform.AndroidUiDispatcher this$0 -> a + # {"id":"com.android.tools.r8.residualsignature","signature":"Lw2/q0;"} + 1:3:void (androidx.compose.ui.platform.AndroidUiDispatcher):55:55 -> + # {"id":"com.android.tools.r8.residualsignature","signature":"(Lw2/q0;)V"} + 4:6:void (androidx.compose.ui.platform.AndroidUiDispatcher):0:0 -> + 1:2:void doFrame(long):67:67 -> doFrame + 3:4:android.os.Handler androidx.compose.ui.platform.AndroidUiDispatcher.access$getHandler$p(androidx.compose.ui.platform.AndroidUiDispatcher):41:41 -> doFrame + 3:4:void doFrame(long):67 -> doFrame + 5:7:void doFrame(long):67:67 -> doFrame + 8:12:void doFrame(long):68:68 -> doFrame + 13:14:void doFrame(long):69:69 -> doFrame + 15:16:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):98:98 -> doFrame + 15:16:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + # {"id":"com.android.tools.r8.rewriteFrame","conditions":["throws(Ljava/lang/NullPointerException;)"],"actions":["removeInnerFrames(1)"]} + 15:16:void doFrame(long):69 -> doFrame + 17:17:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):196:196 -> doFrame + 17:17:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 17:17:void doFrame(long):69 -> doFrame + 18:24:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):99:99 -> doFrame + 18:24:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 18:24:void doFrame(long):69 -> doFrame + 25:26:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):100:100 -> doFrame + 25:26:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 25:26:void doFrame(long):69 -> doFrame + 27:28:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):101:101 -> doFrame + 27:28:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 27:28:void doFrame(long):69 -> doFrame + 29:32:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):102:102 -> doFrame + 29:32:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 29:32:void doFrame(long):69 -> doFrame + 33:34:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):103:103 -> doFrame + 33:34:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 33:34:void doFrame(long):69 -> doFrame + 35:35:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):196:196 -> doFrame + 35:35:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 35:35:void doFrame(long):69 -> doFrame + 36:41:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):106:106 -> doFrame + 36:41:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 36:41:void doFrame(long):69 -> doFrame + 42:53:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):108:108 -> doFrame + 42:53:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 42:53:void doFrame(long):69 -> doFrame + 54:58:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):110:110 -> doFrame + 54:58:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 54:58:void doFrame(long):69 -> doFrame + 59:60:void androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(long):196:196 -> doFrame + 59:60:void androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(androidx.compose.ui.platform.AndroidUiDispatcher,long):41 -> doFrame + 59:60:void doFrame(long):69 -> doFrame + 1:5:void run():57:57 -> run + 6:7:void run():58:58 -> run + 8:9:java.lang.Object androidx.compose.ui.platform.AndroidUiDispatcher.access$getLock$p(androidx.compose.ui.platform.AndroidUiDispatcher):41:41 -> run + 8:9:void run():58 -> run + 10:10:void run():194:194 -> run + 11:12:java.util.List androidx.compose.ui.platform.AndroidUiDispatcher.access$getToRunOnFrame$p(androidx.compose.ui.platform.AndroidUiDispatcher):41:41 -> run + 11:12:void run():59 -> run + 13:18:void run():59:59 -> run + 19:20:android.view.Choreographer androidx.compose.ui.platform.AndroidUiDispatcher.getChoreographer():42:42 -> run + 19:20:void run():60 -> run + 21:24:void run():60:60 -> run + 25:29:void androidx.compose.ui.platform.AndroidUiDispatcher.access$setScheduledFrameDispatch$p(androidx.compose.ui.platform.AndroidUiDispatcher,boolean):41:41 -> run + 25:29:void run():61 -> run + 30:31:void run():63:63 -> run + 32:35:void run():194:194 -> run +com.example.projection.MapProjectionViewController -> mw0.f: +# {"id":"sourceFile","fileName":"MapProjectionViewController.kt"} +com.example.mapcomponents.marker.currentlocation.DotRendererDelegate -> b80.h: +# {"id":"sourceFile","fileName":"DotRendererDelegate.kt"} +androidx.compose.ui.platform.AndroidUiFrameClock -> w2.r0: +# {"id":"sourceFile","fileName":"AndroidUiFrameClock.android.kt"} +androidx.compose.ui.platform.AndroidUiDispatcher -> w2.q0: +# {"id":"sourceFile","fileName":"AndroidUiDispatcher.android.kt"} +androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2 -> h1.f3: +# {"id":"sourceFile","fileName":"Recomposer.kt"} \ No newline at end of file diff --git a/tests/res/mapping-outline.txt b/tests/res/mapping-outline.txt new file mode 100644 index 0000000..1152a29 --- /dev/null +++ b/tests/res/mapping-outline.txt @@ -0,0 +1,11 @@ +# compiler: R8 +# compiler_version: 2.0 +# min_api: 15 +outline.Class -> a: + 1:2:int outline() -> a +# { "id":"com.android.tools.r8.outline" } +some.Class -> b: + 4:4:int outlineCaller(int):98:98 -> s + 5:5:int outlineCaller(int):100:100 -> s + 27:27:int outlineCaller(int):0:0 -> s +# { "id":"com.android.tools.r8.outlineCallsite", "positions": { "1": 4, "2": 5 }, "outline":"La;a()I"} From 26591c75d0609676838f22ae3ffc29e5174f8cea Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Mon, 3 Nov 2025 13:24:22 +0100 Subject: [PATCH 03/12] Move outline_call_positions to Member --- src/builder.rs | 20 +++++++++------- src/cache/raw.rs | 8 +++---- src/mapper.rs | 61 +++++++++++++++++++++++++++++++++++------------- 3 files changed, 61 insertions(+), 28 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index b34cdf0..46b92cc 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -122,7 +122,7 @@ pub(crate) struct MethodInfo { } /// A member record in a Proguard file. -#[derive(Clone, Copy, Debug)] +#[derive(Clone, Debug)] pub(crate) struct Member<'s> { /// The method the member refers to. pub(crate) method: MethodKey<'s>, @@ -134,6 +134,8 @@ pub(crate) struct Member<'s> { pub(crate) original_startline: usize, /// The original end line. pub(crate) original_endline: Option, + /// Optional outline callsite positions map attached to this member. + pub(crate) outline_callsite_positions: Option>, } /// A collection of member records for a particular class @@ -145,8 +147,6 @@ pub(crate) struct Members<'s> { /// The complete list of members for the class and method, /// grouped by arguments string. pub(crate) by_params: HashMap<&'s str, Vec>>, - /// Optional outline callsite positions map for this obfuscated method. - pub(crate) outline_callsite_positions: Option>, /// Whether this obfuscated method is an outline method. pub(crate) method_is_outline: bool, } @@ -268,7 +268,10 @@ impl<'s> ParsedProguardMapping<'s> { let method_info: &mut MethodInfo = slf.method_infos.entry(method).or_default(); - // Consume R8 headers attached to this method. + // Collect any OutlineCallsite mapping attached to this member. + let mut outline_callsite_positions: Option> = None; + + // Consume R8 headers attached to this method/member. while let Some(ProguardRecord::R8Header(r8_header)) = records.peek() { match r8_header { R8Header::Synthesized => method_info.is_synthesized = true, @@ -280,13 +283,13 @@ impl<'s> ParsedProguardMapping<'s> { positions, outline: _, } => { - // Attach outline callsite mapping to the current obfuscated method. + // Attach outline callsite mapping to this specific member. let map: HashMap = positions .iter() .filter_map(|(k, v)| k.parse::().ok().map(|kk| (kk, *v))) .collect(); if !map.is_empty() { - members.outline_callsite_positions = Some(map); + outline_callsite_positions = Some(map); } } R8Header::SourceFile { .. } | R8Header::Other => {} @@ -301,9 +304,10 @@ impl<'s> ParsedProguardMapping<'s> { endline, original_startline, original_endline, + outline_callsite_positions, }; - members.all.push(member); + members.all.push(member.clone()); if !initialize_param_mapping { continue; @@ -331,7 +335,7 @@ impl<'s> ParsedProguardMapping<'s> { .by_params .entry(arguments) .or_insert_with(|| Vec::with_capacity(1)) - .push(member); + .push(member.clone()); } } // end ProguardRecord::Method } diff --git a/src/cache/raw.rs b/src/cache/raw.rs index 8808dbf..0a06bac 100644 --- a/src/cache/raw.rs +++ b/src/cache/raw.rs @@ -261,7 +261,7 @@ impl<'data> ProguardCache<'data> { .entry(obfuscated_method.as_str()) .or_default(); - for member in members.all.iter().copied() { + for member in members.all.iter() { method_mappings.push(Self::resolve_mapping( &mut string_table, &parsed, @@ -277,12 +277,12 @@ impl<'data> ProguardCache<'data> { .entry((obfuscated_method.as_str(), args)) .or_default(); - for member in param_members { + for member in param_members.iter() { param_mappings.push(Self::resolve_mapping( &mut string_table, &parsed, obfuscated_method_offset, - *member, + member, )); current_class.class.members_by_params_len += 1; } @@ -345,7 +345,7 @@ impl<'data> ProguardCache<'data> { string_table: &mut StringTable, parsed: &ParsedProguardMapping<'_>, obfuscated_name_offset: u32, - member: builder::Member, + member: &builder::Member, ) -> Member { let original_file = parsed .class_infos diff --git a/src/mapper.rs b/src/mapper.rs index fad3b0d..1f56ff2 100644 --- a/src/mapper.rs +++ b/src/mapper.rs @@ -51,7 +51,7 @@ impl fmt::Display for DeobfuscatedSignature { } } -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Clone, Debug, PartialEq, Eq)] struct MemberMapping<'s> { startline: usize, endline: usize, @@ -62,6 +62,7 @@ struct MemberMapping<'s> { original_endline: Option, is_synthesized: bool, is_outline: bool, + outline_callsite_positions: Option>, } #[derive(Clone, Debug, Default)] @@ -69,7 +70,6 @@ struct ClassMembers<'s> { all_mappings: Vec>, // method_params -> Vec[MemberMapping] mappings_by_params: HashMap<&'s str, Vec>>, - outline_callsite_positions: Option>, method_is_outline: bool, } @@ -268,7 +268,7 @@ impl<'s> ProguardMapper<'s> { .entry(obfuscated_method.as_str()) .or_default(); - for member in members.all.iter().copied() { + for member in members.all.iter() { method_mappings .all_mappings .push(Self::resolve_mapping(&parsed, member)); @@ -277,13 +277,11 @@ impl<'s> ProguardMapper<'s> { for (args, param_members) in members.by_params.iter() { let param_mappings = method_mappings.mappings_by_params.entry(args).or_default(); - for member in param_members { - param_mappings.push(Self::resolve_mapping(&parsed, *member)); + for member in param_members.iter() { + param_mappings.push(Self::resolve_mapping(&parsed, member)); } } - // Propagate outline callsite info if present - method_mappings.outline_callsite_positions = members.outline_callsite_positions.clone(); method_mappings.method_is_outline = members.method_is_outline; } @@ -294,7 +292,7 @@ impl<'s> ProguardMapper<'s> { fn resolve_mapping( parsed: &ParsedProguardMapping<'s>, - member: Member<'s>, + member: &Member<'s>, ) -> MemberMapping<'s> { let original_file = parsed .class_infos @@ -315,6 +313,8 @@ impl<'s> ProguardMapper<'s> { let is_synthesized = method_info.is_synthesized; let is_outline = method_info.is_outline; + let outline_callsite_positions = member.outline_callsite_positions.clone(); + MemberMapping { startline: member.startline, endline: member.endline, @@ -325,17 +325,41 @@ impl<'s> ProguardMapper<'s> { original_endline: member.original_endline, is_synthesized, is_outline, + outline_callsite_positions, } } /// If the previous frame was an outline and carried a position, attempt to /// map that outline position to a callsite position for the given method. - fn map_outline_position(&self, class: &str, method: &str, pos: usize) -> Option { - self.classes - .get(class) - .and_then(|c| c.members.get(method)) - .and_then(|ms| ms.outline_callsite_positions.as_ref()) - .and_then(|m| m.get(&pos).copied()) + fn map_outline_position( + &self, + class: &str, + method: &str, + callsite_line: usize, + pos: usize, + parameters: Option<&str>, + ) -> Option { + let ms = self.classes.get(class)?.members.get(method)?; + let candidates: &[_] = if let Some(params) = parameters { + match ms.mappings_by_params.get(params) { + Some(v) => &v[..], + None => &[], + } + } else { + &ms.all_mappings[..] + }; + + // Find the member mapping covering the callsite line, then map the pos. + candidates + .iter() + .filter(|m| { + m.endline == 0 || (callsite_line >= m.startline && callsite_line <= m.endline) + }) + .find_map(|m| { + m.outline_callsite_positions + .as_ref() + .and_then(|mm| mm.get(&pos).copied()) + }) } /// Determines if a frame refers to an outline method, either via the @@ -378,8 +402,13 @@ impl<'s> ProguardMapper<'s> { ) -> (StackFrame<'a>, bool) { let mut effective = frame.clone(); if let Some(pos) = carried_outline_pos.take() { - if let Some(mapped) = self.map_outline_position(effective.class, effective.method, pos) - { + if let Some(mapped) = self.map_outline_position( + effective.class, + effective.method, + effective.line, + pos, + effective.parameters, + ) { effective.line = mapped; } } From 0b423e1d11e28886a28a4d97e6ba1fbca5620b16 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Mon, 3 Nov 2025 13:32:17 +0100 Subject: [PATCH 04/12] Remove method_is_outline from Members --- src/builder.rs | 3 --- src/mapper.rs | 5 ----- 2 files changed, 8 deletions(-) diff --git a/src/builder.rs b/src/builder.rs index 46b92cc..b906f5b 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -147,8 +147,6 @@ pub(crate) struct Members<'s> { /// The complete list of members for the class and method, /// grouped by arguments string. pub(crate) by_params: HashMap<&'s str, Vec>>, - /// Whether this obfuscated method is an outline method. - pub(crate) method_is_outline: bool, } /// A parsed representation of a [`ProguardMapping`]. @@ -277,7 +275,6 @@ impl<'s> ParsedProguardMapping<'s> { R8Header::Synthesized => method_info.is_synthesized = true, R8Header::Outline => { method_info.is_outline = true; - members.method_is_outline = true; } R8Header::OutlineCallsite { positions, diff --git a/src/mapper.rs b/src/mapper.rs index 1f56ff2..b0ca77b 100644 --- a/src/mapper.rs +++ b/src/mapper.rs @@ -70,7 +70,6 @@ struct ClassMembers<'s> { all_mappings: Vec>, // method_params -> Vec[MemberMapping] mappings_by_params: HashMap<&'s str, Vec>>, - method_is_outline: bool, } #[derive(Clone, Debug, Default)] @@ -282,7 +281,6 @@ impl<'s> ProguardMapper<'s> { } } - method_mappings.method_is_outline = members.method_is_outline; } Self { @@ -375,9 +373,6 @@ impl<'s> ProguardMapper<'s> { .get(class) .and_then(|c| c.members.get(method)) .map(|ms| { - if ms.method_is_outline { - return true; - } let mappings: &[_] = if let Some(params) = parameters { match ms.mappings_by_params.get(params) { Some(v) => &v[..], From c62a62ca4338070e2f17197031dd7c3de2406aff Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Mon, 3 Nov 2025 14:13:55 +0100 Subject: [PATCH 05/12] Add more outline_positions to have them per-member in test --- tests/res/mapping-outline-complex.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/res/mapping-outline-complex.txt b/tests/res/mapping-outline-complex.txt index e7376e3..9e62fb2 100644 --- a/tests/res/mapping-outline-complex.txt +++ b/tests/res/mapping-outline-complex.txt @@ -179,6 +179,7 @@ com.example.MapAnnotations -> uu0.k: 43:46:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l # {"id":"com.android.tools.r8.outlineCallsite","positions":{"1":50,"3":52,"6":55},"outline":"Lev/h;b(Ljava/lang/String;Lcom/example/L;)V"} 47:49:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(com.example.core.projection.marker.IProjectionMarkerOptions,com.example.core.projection.IProjection,float,com.example.core.latlng.IBoundsFactory):133:133 -> l + # {"id":"com.android.tools.r8.outlineCallsite","positions":{"2":51,"4":50,"5":40},"outline":"Lev/h;b(Ljava/lang/String;Lcom/example/L;)V"} 47:49:com.example.core.projection.marker.IProjectionMarker com.example.projection.MapProjectionViewController.createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):79 -> l 47:49:com.example.core.projection.marker.IProjectionMarker createProjectionMarker(com.example.core.projection.marker.IProjectionMarkerOptions):63 -> l 47:49:lv0.IProjectionMarker uu0.MapAnnotations.createProjectionMarker(lv0.IProjectionMarkerOptions):0 -> l From 2c2bfbd2ad10dd2cdc7db02e33349f827f99649f Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Mon, 3 Nov 2025 14:16:47 +0100 Subject: [PATCH 06/12] formatting --- src/mapper.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mapper.rs b/src/mapper.rs index b0ca77b..a78e538 100644 --- a/src/mapper.rs +++ b/src/mapper.rs @@ -280,7 +280,6 @@ impl<'s> ProguardMapper<'s> { param_mappings.push(Self::resolve_mapping(&parsed, member)); } } - } Self { From 1c53342784c431975274d6fc6322a707152c04fa Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Fri, 7 Nov 2025 14:08:58 +0100 Subject: [PATCH 07/12] feat(r8): Support outline and outlineCallsite annotations in ProguardCache --- src/cache/debug.rs | 1 + src/cache/mod.rs | 222 +++++++++++++++++++++++++++++++++++++++------ src/cache/raw.rs | 151 +++++++++++++++++++++++++----- tests/r8.rs | 101 ++++++++++++++++++++- 4 files changed, 424 insertions(+), 51 deletions(-) diff --git a/src/cache/debug.rs b/src/cache/debug.rs index 957308d..cf901a3 100644 --- a/src/cache/debug.rs +++ b/src/cache/debug.rs @@ -107,6 +107,7 @@ impl fmt::Debug for MemberDebug<'_, '_> { .field("original_endline", &self.original_endline()) .field("params", &self.params()) .field("is_synthesized", &self.raw.is_synthesized()) + .field("is_outline", &self.raw.is_outline()) .finish() } } diff --git a/src/cache/mod.rs b/src/cache/mod.rs index 8a31d5d..ee84f54 100644 --- a/src/cache/mod.rs +++ b/src/cache/mod.rs @@ -2,15 +2,17 @@ //! //! # Structure //! A [`ProguardCache`] file comprises the following parts: -//! * A [header](ProguardCache::header), containing the version number, the numbers of class, member, and -//! member-by-params entries, and the length of the string section; +//! * A [header](ProguardCache::header), containing: +//! - the format version, +//! - the number of class, member, and member-by-params entries, +//! - the number of outline mapping pairs, +//! - and the length of the string section; //! * A [list](ProguardCache::classes) of [`Class`](raw::Class) entries; //! * A [list](ProguardCache::members) of [`Member`](raw::Member) entries; -//! * Another [list](Proguard_cache::members_by_params) of `Member` entries, sorted -//! by parameter strings; -//! * A [string section](ProguardCache::string_bytes) in which class names, method -//! names, &c. are collected. Whenever a class or member entry references a string, -//! it is by offset into this section. +//! * Another [list](Proguard_cache::members_by_params) of `Member` entries, sorted by parameter strings; +//! * A [list] of outline mapping pairs shared by all members; +//! * A [string section](ProguardCache::string_bytes) in which class names, method names, &c. are collected. +//! Whenever a class or member entry references a string, it is by offset into this section. //! //! ## Class entries //! A class entry contains @@ -26,7 +28,10 @@ //! * an obfuscated and an original method name, //! * a start and end line (1- based and inclusive), //! * a params string, -//! * and an `is_synthesized` flag. +//! * an `is_synthesized` flag, +//! * an `is_outline` flag designating outline methods, +//! * an `outline_pairs_offset` and `outline_pairs_len` which slice into the global outline +//! pairs section. //! //! It may also contain //! * an original class name, @@ -37,9 +42,15 @@ //! obfuscated method name, and finally by the order in which they were encountered //! in the original proguard file. //! -//! Member entries in `members_by_params` are sorted by the class they belong to, -//! then by obfuscated method name, then by params string, and finally -//! by the order in which they were encountered in the original proguard file. +//! Member entries in `members_by_params` are sorted by the class they belong to, then by obfuscated +//! method name, then by params string, and finally by the order in which they were encountered in the +//! original proguard file. +//! +//! ## Outline pairs section +//! The outline pairs section is a flat array of pairs mapping an outline-position to a callsite line. +//! Each [`Member`](raw::Member) that carries outline callsite information references a sub-slice of this +//! section via its `outline_pairs_offset` and `outline_pairs_len`. This keeps members fixed-size and +//! enables zero-copy parsing while supporting variable-length metadata. mod debug; mod raw; @@ -332,17 +343,165 @@ impl<'data> ProguardCache<'data> { }) } + /// Returns the outline mapping pairs slice for a given member. + fn member_outline_pairs(&self, member: &raw::Member) -> &'data [raw::OutlinePair] { + let start = member.outline_pairs_offset as usize; + let end = start + member.outline_pairs_len as usize; + if start >= self.outline_pairs.len() || end > self.outline_pairs.len() { + &self.outline_pairs[0..0] + } else { + &self.outline_pairs[start..end] + } + } + + /// If the previous frame was an outline and carried a position, attempt to + /// map that outline position to a callsite position for the given method. + fn map_outline_position( + &self, + class: &str, + method: &str, + callsite_line: usize, + pos: usize, + parameters: Option<&str>, + ) -> Option { + let class = self.get_class(class)?; + + let candidates: &[raw::Member] = if let Some(params) = parameters { + let members = self.get_class_members_by_params(class)?; + Self::find_range_by_binary_search(members, |m| { + let Ok(obfuscated_name) = self.read_string(m.obfuscated_name_offset) else { + return Ordering::Greater; + }; + let p = self.read_string(m.params_offset).unwrap_or_default(); + (obfuscated_name, p).cmp(&(method, params)) + })? + } else { + let members = self.get_class_members(class)?; + Self::find_range_by_binary_search(members, |m| { + let Ok(obfuscated_name) = self.read_string(m.obfuscated_name_offset) else { + return Ordering::Greater; + }; + obfuscated_name.cmp(method) + })? + }; + + candidates + .iter() + .filter(|m| { + m.endline == 0 + || (callsite_line >= m.startline as usize + && callsite_line <= m.endline as usize) + }) + .find_map(|m| { + self.member_outline_pairs(m) + .iter() + .find(|pair| pair.outline_pos as usize == pos) + .map(|pair| pair.callsite_line as usize) + }) + } + + /// Determines if a frame refers to an outline method, either via the + /// method-level flag or via any matching mapping entry for the frame line. + fn is_outline_frame( + &self, + class: &str, + method: &str, + line: usize, + parameters: Option<&str>, + ) -> bool { + let class = match self.get_class(class) { + Some(c) => c, + None => return false, + }; + + let candidates: &[raw::Member] = if let Some(params) = parameters { + let members = match self.get_class_members_by_params(class) { + Some(m) => m, + None => return false, + }; + match Self::find_range_by_binary_search(members, |m| { + let Ok(obfuscated_name) = self.read_string(m.obfuscated_name_offset) else { + return Ordering::Greater; + }; + let p = self.read_string(m.params_offset).unwrap_or_default(); + (obfuscated_name, p).cmp(&(method, params)) + }) { + Some(v) => v, + None => return false, + } + } else { + let members = match self.get_class_members(class) { + Some(m) => m, + None => return false, + }; + match Self::find_range_by_binary_search(members, |m| { + let Ok(obfuscated_name) = self.read_string(m.obfuscated_name_offset) else { + return Ordering::Greater; + }; + obfuscated_name.cmp(method) + }) { + Some(v) => v, + None => return false, + } + }; + + candidates.iter().any(|m| { + m.is_outline() + && (m.endline == 0 || (line >= m.startline as usize && line <= m.endline as usize)) + }) + } + + /// Applies any carried outline position to the frame line and determines if + /// the (original) frame is an outline. Returns the adjusted frame and flag. + fn prepare_frame_for_mapping<'a>( + &self, + frame: &StackFrame<'a>, + carried_outline_pos: &mut Option, + ) -> (StackFrame<'a>, bool) { + let mut effective = frame.clone(); + if let Some(pos) = carried_outline_pos.take() { + if let Some(mapped) = self.map_outline_position( + effective.class, + effective.method, + effective.line, + pos, + effective.parameters, + ) { + effective.line = mapped; + } + } + + let is_outline = + self.is_outline_frame(frame.class, frame.method, frame.line, frame.parameters); + + (effective, is_outline) + } + /// Remaps a complete Java StackTrace, similar to [`Self::remap_stacktrace_typed`] but instead works on /// strings as input and output. pub fn remap_stacktrace(&self, input: &str) -> Result { let mut stacktrace = String::new(); let mut lines = input.lines(); + let mut carried_outline_pos: Option = None; + if let Some(line) = lines.next() { match stacktrace::parse_throwable(line) { None => match stacktrace::parse_frame(line) { None => writeln!(&mut stacktrace, "{line}")?, - Some(frame) => format_frames(&mut stacktrace, line, self.remap_frame(&frame))?, + Some(frame) => { + let (effective_frame, is_outline) = + self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); + if is_outline { + carried_outline_pos = Some(frame.line); + } else { + format_frames( + &mut stacktrace, + line, + self.remap_frame(&effective_frame), + )?; + } + } }, Some(throwable) => { format_throwable(&mut stacktrace, line, self.remap_throwable(&throwable))? @@ -361,7 +520,15 @@ impl<'data> ProguardCache<'data> { format_cause(&mut stacktrace, line, self.remap_throwable(&cause))? } }, - Some(frame) => format_frames(&mut stacktrace, line, self.remap_frame(&frame))?, + Some(frame) => { + let (effective_frame, is_outline) = + self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); + if is_outline { + carried_outline_pos = Some(frame.line); + } else { + format_frames(&mut stacktrace, line, self.remap_frame(&effective_frame))?; + } + } } } Ok(stacktrace) @@ -374,20 +541,23 @@ impl<'data> ProguardCache<'data> { .as_ref() .and_then(|t| self.remap_throwable(t)); - let frames = - trace - .frames - .iter() - .fold(Vec::with_capacity(trace.frames.len()), |mut frames, f| { - let mut peek_frames = self.remap_frame(f).peekable(); - if peek_frames.peek().is_some() { - frames.extend(peek_frames); - } else { - frames.push(f.clone()); - } + let mut carried_outline_pos: Option = None; + let mut frames: Vec> = Vec::with_capacity(trace.frames.len()); + for f in trace.frames.iter() { + let (effective, is_outline) = + self.prepare_frame_for_mapping(f, &mut carried_outline_pos); + if is_outline { + carried_outline_pos = Some(f.line); + continue; + } - frames - }); + let mut iter = self.remap_frame(&effective).peekable(); + if iter.peek().is_some() { + frames.extend(iter); + } else { + frames.push(f.clone()); + } + } let cause = trace .cause diff --git a/src/cache/raw.rs b/src/cache/raw.rs index 0a06bac..b790ff7 100644 --- a/src/cache/raw.rs +++ b/src/cache/raw.rs @@ -19,7 +19,7 @@ pub(crate) const PRGCACHE_MAGIC: u32 = u32::from_le_bytes(PRGCACHE_MAGIC_BYTES); pub(crate) const PRGCACHE_MAGIC_FLIPPED: u32 = PRGCACHE_MAGIC.swap_bytes(); /// The current version of the ProguardCache format. -pub const PRGCACHE_VERSION: u32 = 2; +pub const PRGCACHE_VERSION: u32 = 3; /// The header of a proguard cache file. #[derive(Debug, Clone, PartialEq, Eq)] @@ -35,6 +35,8 @@ pub(crate) struct Header { pub(crate) num_members: u32, /// The total number of member-by-params entries in this cache. pub(crate) num_members_by_params: u32, + /// The total number of outline mapping pairs across all members. + pub(crate) num_outline_pairs: u32, /// The number of string bytes in this cache. pub(crate) string_bytes: u32, } @@ -118,9 +120,16 @@ pub(crate) struct Member { /// /// `0` means `false`, all other values mean `true`. pub(crate) is_synthesized: u8, - + /// Whether this member refers to an outline method. + /// + /// `0` means `false`, all other values mean `true`. + pub(crate) is_outline: u8, + /// Offset into the outline pairs section for this member's outline callsite mapping. + pub(crate) outline_pairs_offset: u32, + /// Number of outline pairs for this member. + pub(crate) outline_pairs_len: u32, /// Reserved space. - pub(crate) _reserved: [u8; 3], + pub(crate) _reserved: [u8; 2], } impl Member { @@ -128,12 +137,26 @@ impl Member { pub(crate) fn is_synthesized(&self) -> bool { self.is_synthesized != 0 } + /// Returns true if this member refers to an outline method. + pub(crate) fn is_outline(&self) -> bool { + self.is_outline != 0 + } } unsafe impl Pod for Header {} unsafe impl Pod for Class {} unsafe impl Pod for Member {} +/// A single outline mapping pair: outline position -> callsite line. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(C)] +pub(crate) struct OutlinePair { + pub(crate) outline_pos: u32, + pub(crate) callsite_line: u32, +} + +unsafe impl Pod for OutlinePair {} + /// The serialized `ProguardCache` binary format. #[derive(Clone, PartialEq, Eq)] pub struct ProguardCache<'data> { @@ -153,6 +176,8 @@ pub struct ProguardCache<'data> { /// These entries are sorted by class, then /// obfuscated method name, then params string. pub(crate) members_by_params: &'data [Member], + /// A flat list of outline mapping pairs. + pub(crate) outline_pairs: &'data [OutlinePair], /// The collection of all strings in the cache file. pub(crate) string_bytes: &'data [u8], } @@ -196,6 +221,11 @@ impl<'data> ProguardCache<'data> { Member::slice_from_prefix(rest, header.num_members_by_params as usize) .ok_or(CacheErrorKind::InvalidMembers)?; + let (_, rest) = watto::align_to(rest, 8).ok_or(CacheErrorKind::InvalidMembers)?; + let (outline_pairs, rest) = + OutlinePair::slice_from_prefix(rest, header.num_outline_pairs as usize) + .ok_or(CacheErrorKind::InvalidMembers)?; + let (_, string_bytes) = watto::align_to(rest, 8).ok_or(CacheErrorKind::UnexpectedStringBytes { expected: header.string_bytes as usize, @@ -215,6 +245,7 @@ impl<'data> ProguardCache<'data> { classes, members, members_by_params, + outline_pairs, string_bytes, }) } @@ -292,7 +323,6 @@ impl<'data> ProguardCache<'data> { // At this point, we know how many members/members-by-params each class has because we kept count, // but we don't know where each class's entries start. We'll rectify that below. - let mut writer = watto::Writer::new(writer); let string_bytes = string_table.into_bytes(); let num_members = classes.values().map(|c| c.class.members_len).sum::(); @@ -301,41 +331,86 @@ impl<'data> ProguardCache<'data> { .map(|c| c.class.members_by_params_len) .sum::(); + // Build output vectors first to know outline pair count. + let mut out_classes: Vec = Vec::with_capacity(classes.len()); + let mut members: Vec = Vec::with_capacity(num_members as usize); + let mut members_by_params: Vec = Vec::with_capacity(num_members_by_params as usize); + let mut outline_pairs: Vec = Vec::new(); + + for mut c in classes.into_values() { + // Set offsets relative to current vector sizes + c.class.members_offset = members.len() as u32; + c.class.members_by_params_offset = members_by_params.len() as u32; + + // Serialize members without params + for (_method, ms) in c.members.into_iter() { + for mut mp in ms.into_iter() { + let start = outline_pairs.len() as u32; + if !mp.outline_pairs.is_empty() { + mp.member.outline_pairs_offset = start; + mp.member.outline_pairs_len = mp.outline_pairs.len() as u32; + outline_pairs.extend(mp.outline_pairs.into_iter()); + } else { + mp.member.outline_pairs_offset = start; + mp.member.outline_pairs_len = 0; + } + members.push(mp.member); + } + } + + // Serialize members by params + for (_key, ms) in c.members_by_params.into_iter() { + for mut mp in ms.into_iter() { + let start = outline_pairs.len() as u32; + if !mp.outline_pairs.is_empty() { + mp.member.outline_pairs_offset = start; + mp.member.outline_pairs_len = mp.outline_pairs.len() as u32; + outline_pairs.extend(mp.outline_pairs.into_iter()); + } else { + mp.member.outline_pairs_offset = start; + mp.member.outline_pairs_len = 0; + } + members_by_params.push(mp.member); + } + } + + out_classes.push(c.class); + } + + let num_outline_pairs = outline_pairs.len() as u32; + let header = Header { magic: PRGCACHE_MAGIC, version: PRGCACHE_VERSION, - num_classes: classes.len() as u32, + num_classes: out_classes.len() as u32, num_members, num_members_by_params, + num_outline_pairs, string_bytes: string_bytes.len() as u32, }; + let mut writer = watto::Writer::new(writer); writer.write_all(header.as_bytes())?; writer.align_to(8)?; - let mut members = Vec::new(); - let mut members_by_params = Vec::new(); - - for mut c in classes.into_values() { - // We can now set the class's members_offset/members_by_params_offset. - c.class.members_offset = members.len() as u32; - c.class.members_by_params_offset = members.len() as u32; - members.extend(c.members.into_values().flat_map(|m| m.into_iter())); - members_by_params.extend( - c.members_by_params - .into_values() - .flat_map(|m| m.into_iter()), - ); - writer.write_all(c.class.as_bytes())?; + // Write classes + for c in out_classes.iter() { + writer.write_all(c.as_bytes())?; } writer.align_to(8)?; + // Write member sections writer.write_all(members.as_bytes())?; writer.align_to(8)?; writer.write_all(members_by_params.as_bytes())?; writer.align_to(8)?; + // Write outline pairs + writer.write_all(outline_pairs.as_bytes())?; + writer.align_to(8)?; + + // Write strings writer.write_all(&string_bytes)?; Ok(()) @@ -346,7 +421,7 @@ impl<'data> ProguardCache<'data> { parsed: &ParsedProguardMapping<'_>, obfuscated_name_offset: u32, member: &builder::Member, - ) -> Member { + ) -> MemberInProgress { let original_file = parsed .class_infos .get(&member.method.receiver.name()) @@ -370,8 +445,22 @@ impl<'data> ProguardCache<'data> { .copied() .unwrap_or_default(); let is_synthesized = method_info.is_synthesized as u8; + let is_outline = method_info.is_outline as u8; + + let outline_pairs: Vec = member + .outline_callsite_positions + .as_ref() + .map(|m| { + m.iter() + .map(|(k, v)| OutlinePair { + outline_pos: *k as u32, + callsite_line: *v as u32, + }) + .collect() + }) + .unwrap_or_default(); - Member { + let member = Member { startline: member.startline as u32, endline: member.endline as u32, original_class_offset, @@ -382,7 +471,15 @@ impl<'data> ProguardCache<'data> { obfuscated_name_offset, params_offset, is_synthesized, - _reserved: [0; 3], + is_outline, + _reserved: [0; 2], + outline_pairs_offset: 0, + outline_pairs_len: 0, + }; + + MemberInProgress { + member, + outline_pairs, } } @@ -441,7 +538,13 @@ struct ClassInProgress<'data> { /// The class record. class: Class, /// The members records for the class, grouped by method name. - members: BTreeMap<&'data str, Vec>, + members: BTreeMap<&'data str, Vec>, /// The member records for the class, grouped by method name and parameter string. - members_by_params: BTreeMap<(&'data str, &'data str), Vec>, + members_by_params: BTreeMap<(&'data str, &'data str), Vec>, +} + +#[derive(Debug, Clone, Default)] +struct MemberInProgress { + member: Member, + outline_pairs: Vec, } diff --git a/tests/r8.rs b/tests/r8.rs index f5540f3..8a0717f 100644 --- a/tests/r8.rs +++ b/tests/r8.rs @@ -1,6 +1,6 @@ use std::sync::LazyLock; -use proguard::{ProguardMapper, ProguardMapping, StackFrame}; +use proguard::{ProguardCache, ProguardMapper, ProguardMapping, StackFrame}; static MAPPING_R8: &[u8] = include_bytes!("res/mapping-r8.txt"); static MAPPING_R8_SYMBOLICATED_FILE_NAMES: &[u8] = @@ -186,6 +186,105 @@ fn test_remap_outlines() { at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1899)"#.trim(), test.unwrap().trim()); } +#[test] +fn test_remap_outlines_cache() { + let mapping = ProguardMapping::new(MAPPING_OUTLINE_COMPLEX); + + let mut buf = Vec::new(); + ProguardCache::write(&mapping, &mut buf).unwrap(); + let cache = ProguardCache::parse(&buf).unwrap(); + + let test = cache.remap_stacktrace( + r#" + java.lang.IllegalStateException: Oops! + at ev.h.b(SourceFile:3) + at uu0.k.l(SourceFile:43) + at b80.f.a(SourceFile:33) + at er3.f.invoke(SourceFile:3) + at yv0.g.d(SourceFile:17) + at er3.g$a.invoke(SourceFile:36) + at h1.p0.d(SourceFile:5) + at p1.k.c(SourceFile:135) + at h1.y.A(SourceFile:111) + at h1.y.m(SourceFile:6) + at h1.e3.invoke(SourceFile:231) + at w2.r0$c.doFrame(SourceFile:7) + at w2.q0$c.doFrame(SourceFile:48) + at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1899)"#, + ); + + assert_eq!(r#" + java.lang.IllegalStateException: Oops! + at com.example.projection.MapProjectionViewController.onProjectionView(MapProjectionViewController.kt:160) + at com.example.projection.MapProjectionViewController.createProjectionMarkerInternal(MapProjectionViewController.kt:133) + at com.example.projection.MapProjectionViewController.createProjectionMarker(MapProjectionViewController.kt:79) + at com.example.MapAnnotations.createProjectionMarker(MapAnnotations.kt:63) + at com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.createCurrentLocationProjectionMarker(DotRendererDelegate.kt:101) + at com.example.mapcomponents.marker.currentlocation.DotRendererDelegate.render(DotRendererDelegate.kt:34) + at com.example.mapcomponents.marker.currentlocation.CurrentLocationRenderer.render(CurrentLocationRenderer.kt:39) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1$mapReadyCallback$1.invoke(CurrentLocationMarkerMapCollection.kt:36) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1$mapReadyCallback$1.invoke(CurrentLocationMarkerMapCollection.kt:36) + at com.example.mapbox.MapboxMapView.addMapReadyCallback(MapboxMapView.kt:368) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1.invoke(CurrentLocationMarkerMapCollection.kt:40) + at com.example.map.internal.CurrentLocationMarkerMapCollectionKt$CurrentLocationMarkerMapCollection$1$1.invoke(CurrentLocationMarkerMapCollection.kt:35) + at androidx.compose.runtime.DisposableEffectImpl.onRemembered(Effects.kt:85) + at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberList(RememberEventDispatcher.kt:253) + at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:225) + at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1122) + at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1149) + at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$22(Recomposer.kt:705) + at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:39) + at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:108) + at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41) + at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69) + at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1899)"#.trim(), test.unwrap().trim()); +} + +#[test] +fn test_outline_header_parsing_cache() { + let mapping = ProguardMapping::new(MAPPING_OUTLINE); + assert!(mapping.is_valid()); + + let mut buf = Vec::new(); + ProguardCache::write(&mapping, &mut buf).unwrap(); + let cache = ProguardCache::parse(&buf).unwrap(); + + // Test that we can remap the outline class + let class = cache.remap_class("a"); + assert_eq!(class, Some("outline.Class")); + + // Test that we can remap the other class + let class = cache.remap_class("b"); + assert_eq!(class, Some("some.Class")); +} + +#[test] +fn test_outline_frame_retracing_cache() { + let mapping = ProguardMapping::new(MAPPING_OUTLINE); + + let mut buf = Vec::new(); + ProguardCache::write(&mapping, &mut buf).unwrap(); + let cache = ProguardCache::parse(&buf).unwrap(); + + // Test retracing a frame from the outline class + let mut mapped = cache.remap_frame(&StackFrame::new("a", "a", 1)); + + assert_eq!( + mapped.next().unwrap(), + StackFrame::new("outline.Class", "outline", 1) + ); + assert_eq!(mapped.next(), None); + + // Test retracing a frame from the class with outlineCallsite + let mut mapped = cache.remap_frame(&StackFrame::new("b", "s", 27)); + + assert_eq!( + mapped.next().unwrap(), + StackFrame::new("some.Class", "outlineCaller", 0) + ); + assert_eq!(mapped.next(), None); +} + #[test] fn test_outline_header_parsing() { let mapping = ProguardMapping::new(MAPPING_OUTLINE); From 8ae8034f3af48b4b8d6f9a80773ec8ad3bc494a5 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Fri, 7 Nov 2025 14:11:20 +0100 Subject: [PATCH 08/12] reorder --- src/cache/raw.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cache/raw.rs b/src/cache/raw.rs index b790ff7..bbaad48 100644 --- a/src/cache/raw.rs +++ b/src/cache/raw.rs @@ -472,9 +472,9 @@ impl<'data> ProguardCache<'data> { params_offset, is_synthesized, is_outline, - _reserved: [0; 2], outline_pairs_offset: 0, outline_pairs_len: 0, + _reserved: [0; 2], }; MemberInProgress { From a5b5cb1ce207921f50569314a3d1682a61c5455d Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Fri, 7 Nov 2025 14:17:32 +0100 Subject: [PATCH 09/12] test outline(callsite) integrity in cache --- src/cache/raw.rs | 7 +++++++ tests/r8.rs | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/cache/raw.rs b/src/cache/raw.rs index bbaad48..d1c7aa1 100644 --- a/src/cache/raw.rs +++ b/src/cache/raw.rs @@ -511,6 +511,13 @@ impl<'data> ProguardCache<'data> { assert!(self.read_string(member.obfuscated_name_offset).is_ok()); assert!(self.read_string(member.original_name_offset).is_ok()); assert!(member.is_synthesized == 0 || member.is_synthesized == 1); + assert!(member.is_outline == 0 || member.is_outline == 1); + + // Ensure outline pair range is within bounds + let start = member.outline_pairs_offset as usize; + let len = member.outline_pairs_len as usize; + let end = start.saturating_add(len); + assert!(end <= self.outline_pairs.len()); if member.params_offset != u32::MAX { assert!(self.read_string(member.params_offset).is_ok()); diff --git a/tests/r8.rs b/tests/r8.rs index 8a0717f..502291a 100644 --- a/tests/r8.rs +++ b/tests/r8.rs @@ -193,6 +193,7 @@ fn test_remap_outlines_cache() { let mut buf = Vec::new(); ProguardCache::write(&mapping, &mut buf).unwrap(); let cache = ProguardCache::parse(&buf).unwrap(); + cache.test(); let test = cache.remap_stacktrace( r#" @@ -248,6 +249,7 @@ fn test_outline_header_parsing_cache() { let mut buf = Vec::new(); ProguardCache::write(&mapping, &mut buf).unwrap(); let cache = ProguardCache::parse(&buf).unwrap(); + cache.test(); // Test that we can remap the outline class let class = cache.remap_class("a"); @@ -265,6 +267,7 @@ fn test_outline_frame_retracing_cache() { let mut buf = Vec::new(); ProguardCache::write(&mapping, &mut buf).unwrap(); let cache = ProguardCache::parse(&buf).unwrap(); + cache.test(); // Test retracing a frame from the outline class let mut mapped = cache.remap_frame(&StackFrame::new("a", "a", 1)); From 4cadc4d678dfb587ea33993b467ed8042c702249 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Mon, 10 Nov 2025 14:45:52 +0100 Subject: [PATCH 10/12] match -> if-let --- src/cache/mod.rs | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/cache/mod.rs b/src/cache/mod.rs index ee84f54..4dc52c5 100644 --- a/src/cache/mod.rs +++ b/src/cache/mod.rs @@ -409,40 +409,37 @@ impl<'data> ProguardCache<'data> { line: usize, parameters: Option<&str>, ) -> bool { - let class = match self.get_class(class) { - Some(c) => c, - None => return false, + let Some(class) = self.get_class(class) else { + return false; }; let candidates: &[raw::Member] = if let Some(params) = parameters { - let members = match self.get_class_members_by_params(class) { - Some(m) => m, - None => return false, + let Some(members) = self.get_class_members_by_params(class) else { + return false; }; - match Self::find_range_by_binary_search(members, |m| { + let Some(range) = Self::find_range_by_binary_search(members, |m| { let Ok(obfuscated_name) = self.read_string(m.obfuscated_name_offset) else { return Ordering::Greater; }; let p = self.read_string(m.params_offset).unwrap_or_default(); (obfuscated_name, p).cmp(&(method, params)) - }) { - Some(v) => v, - None => return false, - } + }) else { + return false; + }; + range } else { - let members = match self.get_class_members(class) { - Some(m) => m, - None => return false, + let Some(members) = self.get_class_members(class) else { + return false; }; - match Self::find_range_by_binary_search(members, |m| { + let Some(range) = Self::find_range_by_binary_search(members, |m| { let Ok(obfuscated_name) = self.read_string(m.obfuscated_name_offset) else { return Ordering::Greater; }; obfuscated_name.cmp(method) - }) { - Some(v) => v, - None => return false, - } + }) else { + return false; + }; + range }; candidates.iter().any(|m| { From bca9be2a6ae259e085f9ea2e01cfa5a958629e99 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Mon, 10 Nov 2025 15:11:02 +0100 Subject: [PATCH 11/12] Reorder Member members (lol) --- src/cache/raw.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cache/raw.rs b/src/cache/raw.rs index d1c7aa1..183f7b2 100644 --- a/src/cache/raw.rs +++ b/src/cache/raw.rs @@ -116,6 +116,10 @@ pub(crate) struct Member { pub(crate) original_endline: u32, /// The entry's parameter string (offset into the strings section). pub(crate) params_offset: u32, + /// Offset into the outline pairs section for this member's outline callsite mapping. + pub(crate) outline_pairs_offset: u32, + /// Number of outline pairs for this member. + pub(crate) outline_pairs_len: u32, /// Whether this member was synthesized by the compiler. /// /// `0` means `false`, all other values mean `true`. @@ -124,10 +128,6 @@ pub(crate) struct Member { /// /// `0` means `false`, all other values mean `true`. pub(crate) is_outline: u8, - /// Offset into the outline pairs section for this member's outline callsite mapping. - pub(crate) outline_pairs_offset: u32, - /// Number of outline pairs for this member. - pub(crate) outline_pairs_len: u32, /// Reserved space. pub(crate) _reserved: [u8; 2], } From a793d58f0da46aacfe06edcef036fbc23f576e01 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Mon, 10 Nov 2025 16:04:42 +0100 Subject: [PATCH 12/12] decouple is_outline and outline frame remapping --- src/cache/mod.rs | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/cache/mod.rs b/src/cache/mod.rs index 4dc52c5..b681761 100644 --- a/src/cache/mod.rs +++ b/src/cache/mod.rs @@ -448,13 +448,12 @@ impl<'data> ProguardCache<'data> { }) } - /// Applies any carried outline position to the frame line and determines if - /// the (original) frame is an outline. Returns the adjusted frame and flag. + /// Applies any carried outline position to the frame line and returns the adjusted frame. fn prepare_frame_for_mapping<'a>( &self, frame: &StackFrame<'a>, carried_outline_pos: &mut Option, - ) -> (StackFrame<'a>, bool) { + ) -> StackFrame<'a> { let mut effective = frame.clone(); if let Some(pos) = carried_outline_pos.take() { if let Some(mapped) = self.map_outline_position( @@ -468,10 +467,7 @@ impl<'data> ProguardCache<'data> { } } - let is_outline = - self.is_outline_frame(frame.class, frame.method, frame.line, frame.parameters); - - (effective, is_outline) + effective } /// Remaps a complete Java StackTrace, similar to [`Self::remap_stacktrace_typed`] but instead works on @@ -487,11 +483,17 @@ impl<'data> ProguardCache<'data> { None => match stacktrace::parse_frame(line) { None => writeln!(&mut stacktrace, "{line}")?, Some(frame) => { - let (effective_frame, is_outline) = - self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); - if is_outline { + if self.is_outline_frame( + frame.class, + frame.method, + frame.line, + frame.parameters, + ) { carried_outline_pos = Some(frame.line); } else { + let effective_frame = + self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); + format_frames( &mut stacktrace, line, @@ -518,13 +520,19 @@ impl<'data> ProguardCache<'data> { } }, Some(frame) => { - let (effective_frame, is_outline) = - self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); - if is_outline { + if self.is_outline_frame( + frame.class, + frame.method, + frame.line, + frame.parameters, + ) { carried_outline_pos = Some(frame.line); - } else { - format_frames(&mut stacktrace, line, self.remap_frame(&effective_frame))?; + continue; } + + let effective_frame = + self.prepare_frame_for_mapping(&frame, &mut carried_outline_pos); + format_frames(&mut stacktrace, line, self.remap_frame(&effective_frame))?; } } } @@ -541,13 +549,12 @@ impl<'data> ProguardCache<'data> { let mut carried_outline_pos: Option = None; let mut frames: Vec> = Vec::with_capacity(trace.frames.len()); for f in trace.frames.iter() { - let (effective, is_outline) = - self.prepare_frame_for_mapping(f, &mut carried_outline_pos); - if is_outline { + if self.is_outline_frame(f.class, f.method, f.line, f.parameters) { carried_outline_pos = Some(f.line); continue; } + let effective = self.prepare_frame_for_mapping(f, &mut carried_outline_pos); let mut iter = self.remap_frame(&effective).peekable(); if iter.peek().is_some() { frames.extend(iter);