expo-app-metrics 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/android/src/main/java/expo/modules/appmetrics/appstartup/AppStartupManager.kt +12 -5
  2. package/android/src/main/java/expo/modules/appmetrics/frames/FrameMetricsRecorder.kt +3 -0
  3. package/android/src/main/java/expo/modules/appmetrics/frames/FrameRateMonitor.kt +21 -8
  4. package/expo-module.config.json +1 -1
  5. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/{0.2.1/expo.modules.appmetrics-0.2.1-sources.jar → 0.2.2/expo.modules.appmetrics-0.2.2-sources.jar} +0 -0
  6. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2-sources.jar.md5 +1 -0
  7. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2-sources.jar.sha1 +1 -0
  8. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2-sources.jar.sha256 +1 -0
  9. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2-sources.jar.sha512 +1 -0
  10. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.aar +0 -0
  11. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.aar.md5 +1 -0
  12. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.aar.sha1 +1 -0
  13. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.aar.sha256 +1 -0
  14. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.aar.sha512 +1 -0
  15. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/{0.2.1/expo.modules.appmetrics-0.2.1.module → 0.2.2/expo.modules.appmetrics-0.2.2.module} +22 -22
  16. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.module.md5 +1 -0
  17. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.module.sha1 +1 -0
  18. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.module.sha256 +1 -0
  19. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.module.sha512 +1 -0
  20. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/{0.2.1/expo.modules.appmetrics-0.2.1.pom → 0.2.2/expo.modules.appmetrics-0.2.2.pom} +1 -1
  21. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.pom.md5 +1 -0
  22. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.pom.sha1 +1 -0
  23. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.pom.sha256 +1 -0
  24. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.2/expo.modules.appmetrics-0.2.2.pom.sha512 +1 -0
  25. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml +4 -4
  26. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.md5 +1 -1
  27. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.sha1 +1 -1
  28. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.sha256 +1 -1
  29. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.sha512 +1 -1
  30. package/package.json +2 -2
  31. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1-sources.jar.md5 +0 -1
  32. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1-sources.jar.sha1 +0 -1
  33. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1-sources.jar.sha256 +0 -1
  34. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1-sources.jar.sha512 +0 -1
  35. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.aar +0 -0
  36. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.aar.md5 +0 -1
  37. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.aar.sha1 +0 -1
  38. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.aar.sha256 +0 -1
  39. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.aar.sha512 +0 -1
  40. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.module.md5 +0 -1
  41. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.module.sha1 +0 -1
  42. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.module.sha256 +0 -1
  43. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.module.sha512 +0 -1
  44. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.pom.md5 +0 -1
  45. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.pom.sha1 +0 -1
  46. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.pom.sha256 +0 -1
  47. package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/0.2.1/expo.modules.appmetrics-0.2.1.pom.sha512 +0 -1
@@ -15,6 +15,7 @@ import expo.modules.appmetrics.utils.TimeUtils.getCurrentTimeInMillis
15
15
  import expo.modules.appmetrics.utils.TimeUtils.getCurrentTimestampInISOFormat
16
16
  import expo.modules.appmetrics.utils.TimeUtils.getProcessStartTimeInMillis
17
17
  import org.json.JSONObject
18
+ import java.util.concurrent.CopyOnWriteArrayList
18
19
 
19
20
  enum class AppStartType { COLD, WARM }
20
21
 
@@ -33,14 +34,20 @@ data class EASObserveAppStartupInfo(
33
34
  object AppStartupManager {
34
35
  private const val BACKGROUND_THRESHOLD_MS = 60_000L
35
36
 
36
- private val _metrics: MutableList<Metric> = mutableListOf()
37
+ // CopyOnWriteArrayList: writes (addMetric) happen on the React/JS/main threads;
38
+ // reads (saveStartupMetricsIfNotSaved) happen on appContext.modulesQueue. Snapshot
39
+ // iteration on the read side means we never CME under concurrent add().
40
+ private val _metrics: MutableList<Metric> = CopyOnWriteArrayList()
37
41
  internal val metrics: List<Metric>
38
42
  get() = _metrics
39
43
 
40
- private var bundleLoadStartTime: Long? = null
41
- private var launchTimeInMillis: Long? = null
42
- private var hasRecordedInteractive = false
43
- private var hasRecordedFirstRender = false
44
+ // These fields are read and written across the React marker thread, the main thread,
45
+ // and the JS thread. @Volatile guarantees writes are visible across threads so the
46
+ // one-shot guards (hasRecorded*) don't spuriously fire twice.
47
+ @Volatile private var bundleLoadStartTime: Long? = null
48
+ @Volatile private var launchTimeInMillis: Long? = null
49
+ @Volatile private var hasRecordedInteractive = false
50
+ @Volatile private var hasRecordedFirstRender = false
44
51
 
45
52
  @Volatile
46
53
  var startupState: StartupState = StartupState.LAUNCHING
@@ -9,6 +9,9 @@ import android.app.Activity
9
9
  * and retrieve the accumulated metrics.
10
10
  */
11
11
  class FrameMetricsRecorder {
12
+ // Reassigned from JS thread in stop() while dispatchFrame mutates it on the
13
+ // main thread. @Volatile gives stop() a stable visible reference to swap.
14
+ @Volatile
12
15
  private var record = FrameMetricsRecord()
13
16
 
14
17
  /** Starts recording frame metrics for the given activity's window. */
@@ -5,24 +5,34 @@ import android.os.Handler
5
5
  import android.os.Looper
6
6
  import android.view.Window
7
7
  import java.lang.ref.WeakReference
8
+ import java.util.concurrent.CopyOnWriteArrayList
8
9
 
9
10
  /**
10
11
  * Internal singleton that manages the [Window.OnFrameMetricsAvailableListener].
11
12
  * Auto-attaches to the window when the first recorder is added and
12
13
  * auto-detaches when the last is removed.
14
+ *
15
+ * The frame callback runs on the main thread while [addRecorder] / [removeRecorder]
16
+ * are typically invoked from the JS thread, so [recorders] must be safe for
17
+ * concurrent iteration. [CopyOnWriteArrayList] gives lock-free iteration on the
18
+ * hot frame path; writes are rare (per record start/stop).
13
19
  */
14
20
  internal object FrameRateMonitor {
15
21
  private var listener: Window.OnFrameMetricsAvailableListener? = null
16
22
  private var currentActivity: WeakReference<Activity>? = null
17
- private val recorders = mutableListOf<WeakReference<FrameMetricsRecorder>>()
23
+ private val recorders = CopyOnWriteArrayList<WeakReference<FrameMetricsRecorder>>()
18
24
 
25
+ @Synchronized
19
26
  fun addRecorder(recorder: FrameMetricsRecorder, activity: Activity) {
20
27
  recorders.add(WeakReference(recorder))
21
28
  startMonitoringIfNeeded(activity)
22
29
  }
23
30
 
31
+ @Synchronized
24
32
  fun removeRecorder(recorder: FrameMetricsRecorder) {
25
- recorders.removeAll { it.get() === recorder || it.get() == null }
33
+ // Use CopyOnWriteArrayList's atomic removeIf Kotlin's removeAll { } extension
34
+ // uses an indexed iterator that is not safe against concurrent add().
35
+ recorders.removeIf { ref -> ref.get().let { it === recorder || it == null } }
26
36
  stopMonitoringIfEmpty()
27
37
  }
28
38
 
@@ -33,11 +43,7 @@ internal object FrameRateMonitor {
33
43
  val newListener = Window.OnFrameMetricsAvailableListener { _, frameMetrics, _ ->
34
44
  val frameDurationMs =
35
45
  (frameMetrics.getMetric(android.view.FrameMetrics.TOTAL_DURATION) / 1_000_000.0).toLong()
36
-
37
- removeReleasedRecorders()
38
- for (ref in recorders) {
39
- ref.get()?.processFrame(frameDurationMs)
40
- }
46
+ dispatchFrame(frameDurationMs)
41
47
  }
42
48
  listener = newListener
43
49
 
@@ -57,6 +63,13 @@ internal object FrameRateMonitor {
57
63
  }
58
64
 
59
65
  private fun removeReleasedRecorders() {
60
- recorders.removeAll { it.get() == null }
66
+ recorders.removeIf { it.get() == null }
67
+ }
68
+
69
+ internal fun dispatchFrame(frameDurationMs: Long) {
70
+ removeReleasedRecorders()
71
+ for (ref in recorders) {
72
+ ref.get()?.processFrame(frameDurationMs)
73
+ }
61
74
  }
62
75
  }
@@ -9,7 +9,7 @@
9
9
  "publication": {
10
10
  "groupId": "expo.modules.appmetrics",
11
11
  "artifactId": "expo.modules.appmetrics",
12
- "version": "0.2.1",
12
+ "version": "0.2.2",
13
13
  "repository": "local-maven-repo"
14
14
  }
15
15
  }
@@ -0,0 +1 @@
1
+ aa37f857dc81185bfdc5a79b4f6809665fc6e628cc0f78ea33a6bdae73de52f8
@@ -0,0 +1 @@
1
+ 109e9ab55405318afb0508ca54eb5b3ed4dda338f378ce1d8d3b7afc05b80436fb7b222ea5fb83bf1eb6e9b65e51a4db0f64bc665020523bc85342b7ff68e73c
@@ -0,0 +1 @@
1
+ 533a152f1787038b2c313e207fc6ebe170f5120bfa00752f557fe89ffaca9229
@@ -0,0 +1 @@
1
+ ecbfd6a98f3c97d5274a5089de53b0cccb0c983454332a4153cb75739607403afff5d51a1daebe093a589d1f0221452ba96697d5f8afe23b2db8df0f0d955e97
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.appmetrics",
5
5
  "module": "expo.modules.appmetrics",
6
- "version": "0.2.1",
6
+ "version": "0.2.2",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.appmetrics-0.2.1.aar",
28
- "url": "expo.modules.appmetrics-0.2.1.aar",
29
- "size": 154963,
30
- "sha512": "dbd18373df03e727059f033964386b054a2181133d81e730d366d35b60636438471a47249a06eae00364c20d97b44ad3989934b846cc7934b7592980660e3a17",
31
- "sha256": "53d2434b8982c5a5dfc9d40f60cf5b0d1944d1ffbdbb833ddc814283b1f769d2",
32
- "sha1": "67db3499152b0642aedde53a6c44f5180bbf1db7",
33
- "md5": "c288d9a281ddaf8de0a6836fe7e4bd18"
27
+ "name": "expo.modules.appmetrics-0.2.2.aar",
28
+ "url": "expo.modules.appmetrics-0.2.2.aar",
29
+ "size": 155442,
30
+ "sha512": "ecbfd6a98f3c97d5274a5089de53b0cccb0c983454332a4153cb75739607403afff5d51a1daebe093a589d1f0221452ba96697d5f8afe23b2db8df0f0d955e97",
31
+ "sha256": "533a152f1787038b2c313e207fc6ebe170f5120bfa00752f557fe89ffaca9229",
32
+ "sha1": "de72b3f6b28d5dc2d03f8ccb6562ea9889a5f3c1",
33
+ "md5": "80daabe3fc27405f53db3b325a4b31f6"
34
34
  }
35
35
  ]
36
36
  },
@@ -92,13 +92,13 @@
92
92
  ],
93
93
  "files": [
94
94
  {
95
- "name": "expo.modules.appmetrics-0.2.1.aar",
96
- "url": "expo.modules.appmetrics-0.2.1.aar",
97
- "size": 154963,
98
- "sha512": "dbd18373df03e727059f033964386b054a2181133d81e730d366d35b60636438471a47249a06eae00364c20d97b44ad3989934b846cc7934b7592980660e3a17",
99
- "sha256": "53d2434b8982c5a5dfc9d40f60cf5b0d1944d1ffbdbb833ddc814283b1f769d2",
100
- "sha1": "67db3499152b0642aedde53a6c44f5180bbf1db7",
101
- "md5": "c288d9a281ddaf8de0a6836fe7e4bd18"
95
+ "name": "expo.modules.appmetrics-0.2.2.aar",
96
+ "url": "expo.modules.appmetrics-0.2.2.aar",
97
+ "size": 155442,
98
+ "sha512": "ecbfd6a98f3c97d5274a5089de53b0cccb0c983454332a4153cb75739607403afff5d51a1daebe093a589d1f0221452ba96697d5f8afe23b2db8df0f0d955e97",
99
+ "sha256": "533a152f1787038b2c313e207fc6ebe170f5120bfa00752f557fe89ffaca9229",
100
+ "sha1": "de72b3f6b28d5dc2d03f8ccb6562ea9889a5f3c1",
101
+ "md5": "80daabe3fc27405f53db3b325a4b31f6"
102
102
  }
103
103
  ]
104
104
  },
@@ -112,13 +112,13 @@
112
112
  },
113
113
  "files": [
114
114
  {
115
- "name": "expo.modules.appmetrics-0.2.1-sources.jar",
116
- "url": "expo.modules.appmetrics-0.2.1-sources.jar",
117
- "size": 19818,
118
- "sha512": "0879f6fb1d82c4f94ea5a5409da1885eb02179d1af687760b7ec3bb847e4cedb3c0c8e2b61c25a735ac153bece56a0d3008e053e3e6c78321d1f38f801d025db",
119
- "sha256": "32b09d72fd6db616dd1bf90c26981413f64ed0b85d5cde4b89505f1b437665de",
120
- "sha1": "4907713a2f0b77199040b8e10a02b51dd2c3473e",
121
- "md5": "f837719f787f84f52a7752a6af31c5c3"
115
+ "name": "expo.modules.appmetrics-0.2.2-sources.jar",
116
+ "url": "expo.modules.appmetrics-0.2.2-sources.jar",
117
+ "size": 20446,
118
+ "sha512": "109e9ab55405318afb0508ca54eb5b3ed4dda338f378ce1d8d3b7afc05b80436fb7b222ea5fb83bf1eb6e9b65e51a4db0f64bc665020523bc85342b7ff68e73c",
119
+ "sha256": "aa37f857dc81185bfdc5a79b4f6809665fc6e628cc0f78ea33a6bdae73de52f8",
120
+ "sha1": "2bc1133c43e4bea087bff455a5fc86a6bf183ceb",
121
+ "md5": "b1ec457195fa1432826eeaaeab0e7a09"
122
122
  }
123
123
  ]
124
124
  }
@@ -0,0 +1 @@
1
+ 5173bc036a9506ac190e340a2974c743990a6b15001921c33f70bcc1a150b64b
@@ -0,0 +1 @@
1
+ 323700da96924de4c311f342521c127cd5dcd5d95c23a62aef19946f723101762e7acfeb961b78e5816fd5ffd2623fde2906e3ca4bcf441cace449381c7ef37c
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>expo.modules.appmetrics</groupId>
11
11
  <artifactId>expo.modules.appmetrics</artifactId>
12
- <version>0.2.1</version>
12
+ <version>0.2.2</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.appmetrics</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ 5f2143312aae0dc3ed98f11a05b18db534eb90f81188fefe9b650091abe577f2
@@ -0,0 +1 @@
1
+ 44a2a05ae55d15d076910835983b50e3cc1ac13a98076e4170d085f50f0ebc6eca07307d4332a49502678370c1e6ecf8c7e1831250df3994e574ada9b93e9bec
@@ -3,11 +3,11 @@
3
3
  <groupId>expo.modules.appmetrics</groupId>
4
4
  <artifactId>expo.modules.appmetrics</artifactId>
5
5
  <versioning>
6
- <latest>0.2.1</latest>
7
- <release>0.2.1</release>
6
+ <latest>0.2.2</latest>
7
+ <release>0.2.2</release>
8
8
  <versions>
9
- <version>0.2.1</version>
9
+ <version>0.2.2</version>
10
10
  </versions>
11
- <lastUpdated>20260513100111</lastUpdated>
11
+ <lastUpdated>20260519122308</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- f2a3b84edee0994eed8e6fd5360eb85b
1
+ 4d8077a2a3780274d44910aa6b5faabc
@@ -1 +1 @@
1
- 5f50b3a60270d3e10850ceb7fbd6629e62324c7a
1
+ 9082be87ffb0e91dbdd063279ef4126e3289ca15
@@ -1 +1 @@
1
- 66211b153fdf1b033e1a9f193847b7bde8ae242b044af5af86fb600351217355
1
+ 6e135d2189ee3fb8cc00fa83160d93fd654111dc3b27e8586573849c532255c0
@@ -1 +1 @@
1
- 5dbe02e7d381bf38fbfb2085bf241e4113b0392a67af99f59b334be50c89b66a64fd66285042a459d2e82c8f42bed5113899bbbd60bc14334c7a12bf042f15f4
1
+ bfecf19e3951b1040c76e20428559bbe205cf72fd625f8d3ee057c3aaf7aecdb7787779c834ec1758041304878e3427e19caf80cc7931bf2609ccaa4b9cbe421
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-app-metrics",
3
3
  "title": "Expo App Metrics",
4
- "version": "0.2.1",
4
+ "version": "0.2.2",
5
5
  "description": "Expo module that collects app startup, frame rate, memory, and session metrics",
6
6
  "main": "src/index.ts",
7
7
  "types": "build/index.d.ts",
@@ -41,5 +41,5 @@
41
41
  "react": "*",
42
42
  "react-native": "*"
43
43
  },
44
- "gitHead": "0675db12d13a5309e3109e8ecf7f6011522194c6"
44
+ "gitHead": "fcb091766242d53248cd3c5949965961dbc5ec1d"
45
45
  }
@@ -1 +0,0 @@
1
- 32b09d72fd6db616dd1bf90c26981413f64ed0b85d5cde4b89505f1b437665de
@@ -1 +0,0 @@
1
- 0879f6fb1d82c4f94ea5a5409da1885eb02179d1af687760b7ec3bb847e4cedb3c0c8e2b61c25a735ac153bece56a0d3008e053e3e6c78321d1f38f801d025db
@@ -1 +0,0 @@
1
- 53d2434b8982c5a5dfc9d40f60cf5b0d1944d1ffbdbb833ddc814283b1f769d2
@@ -1 +0,0 @@
1
- dbd18373df03e727059f033964386b054a2181133d81e730d366d35b60636438471a47249a06eae00364c20d97b44ad3989934b846cc7934b7592980660e3a17
@@ -1 +0,0 @@
1
- 39acd24d37ba9441881775bed913934d16e5b67c8662517ae311848e0f7ad536
@@ -1 +0,0 @@
1
- 4612bc978bfe3013a03886164283436e0b2d1cf528f7d9f2ed9698f65289aa3d79894fa1618bfea841dac2f4a790a6b2aba1a8d55be8721281ad3f0bbe638e81
@@ -1 +0,0 @@
1
- fad0413f33963e7935bd9cbde96e412e6fba67685dcf54911cb545005cb3c5a5
@@ -1 +0,0 @@
1
- f852ac23c4aab7db9f1a4fddc929d5081890d6ee775eaf78cdbc1e20137ce9db19bf7fb327fdadb3acebc9c48cdecba1697647748bc5f82626a60c7f56ace768