detox 20.44.0-smoke.2 → 20.44.0-smoke.4

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 (37) hide show
  1. package/Detox-android/com/wix/detox/{20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar → 20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar} +0 -0
  2. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.md5 +1 -0
  3. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.sha1 +1 -0
  4. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.sha256 +1 -0
  5. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.sha512 +1 -0
  6. package/Detox-android/com/wix/detox/{20.44.0-smoke.2/detox-20.44.0-smoke.2.aar → 20.44.0-smoke.4/detox-20.44.0-smoke.4.aar} +0 -0
  7. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.md5 +1 -0
  8. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.sha1 +1 -0
  9. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.sha256 +1 -0
  10. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.sha512 +1 -0
  11. package/Detox-android/com/wix/detox/{20.44.0-smoke.2/detox-20.44.0-smoke.2.pom → 20.44.0-smoke.4/detox-20.44.0-smoke.4.pom} +1 -1
  12. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.pom.md5 +1 -0
  13. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.pom.sha1 +1 -0
  14. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.pom.sha256 +1 -0
  15. package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.pom.sha512 +1 -0
  16. package/Detox-android/com/wix/detox/maven-metadata.xml +4 -4
  17. package/Detox-android/com/wix/detox/maven-metadata.xml.md5 +1 -1
  18. package/Detox-android/com/wix/detox/maven-metadata.xml.sha1 +1 -1
  19. package/Detox-android/com/wix/detox/maven-metadata.xml.sha256 +1 -1
  20. package/Detox-android/com/wix/detox/maven-metadata.xml.sha512 +1 -1
  21. package/Detox-ios-framework.tbz +0 -0
  22. package/Detox-ios-src.tbz +0 -0
  23. package/Detox-ios-xcuitest.tbz +0 -0
  24. package/android/detox/src/full/java/com/wix/detox/inquiry/FabricAnimationsInquirer.kt +207 -8
  25. package/package.json +2 -2
  26. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.md5 +0 -1
  27. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha1 +0 -1
  28. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha256 +0 -1
  29. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha512 +0 -1
  30. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.md5 +0 -1
  31. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.sha1 +0 -1
  32. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.sha256 +0 -1
  33. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.sha512 +0 -1
  34. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.md5 +0 -1
  35. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.sha1 +0 -1
  36. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.sha256 +0 -1
  37. package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.sha512 +0 -1
@@ -0,0 +1 @@
1
+ 1c1260d5d5dd7ba851908271b86c49c8
@@ -0,0 +1 @@
1
+ f5fd22fc1bec6c426f5dbcfa7d57bcb3a2663583
@@ -0,0 +1 @@
1
+ d0dcf3a7c33b5aeb99f910b1e264e3979c679531884ac40e3b8c00864890c253
@@ -0,0 +1 @@
1
+ f096a65c66dc7241116db2c1dbd5cf1c86553e4a919b4e7ac9c61d618d25a0a5dedd7170fcd55dbf041a252856a32e124c5958eaa52d8aadaedc7c8adf6d0f44
@@ -0,0 +1 @@
1
+ 21a721aa6c15fde7188e5fbad97cc6af
@@ -0,0 +1 @@
1
+ b4d1dc9cfdd36505fabaccdf7a0c97c624a1d3ac
@@ -0,0 +1 @@
1
+ 4abfe61356f07d39e8fc5291cd4aac0c34bceb987afdb8fef942f43cb07f33c4
@@ -0,0 +1 @@
1
+ 442065e378030ae4f6cabbb777c80e335ad8c0902c5ed01869c8a18afa14b7fe4b523fd887f19027357dbd8eae8cefd1e18cbb1678ba0d680ef30a5944b8e619
@@ -3,7 +3,7 @@
3
3
  <modelVersion>4.0.0</modelVersion>
4
4
  <groupId>com.wix</groupId>
5
5
  <artifactId>detox</artifactId>
6
- <version>20.44.0-smoke.2</version>
6
+ <version>20.44.0-smoke.4</version>
7
7
  <packaging>aar</packaging>
8
8
  <name>Detox</name>
9
9
  <description>Gray box end-to-end testing and automation library for mobile apps</description>
@@ -0,0 +1 @@
1
+ 852edb86e316ab26eafb9490e8069101
@@ -0,0 +1 @@
1
+ fa2ef4968b4fd325cb5daab3504e95cf23be0004
@@ -0,0 +1 @@
1
+ d998c8d633fc50c9df2155745628c50e3d30585e9f2aaeba00fb2b08cb996a35
@@ -0,0 +1 @@
1
+ 91d26d9c5cc270127b659984508f52d84cca4e9c97ad54736d0a4bf6d9a661fd0df9797db449133dad5703f99ed62d28e8a8376b92629c309c8d0d1c37294015
@@ -3,11 +3,11 @@
3
3
  <groupId>com.wix</groupId>
4
4
  <artifactId>detox</artifactId>
5
5
  <versioning>
6
- <latest>20.44.0-smoke.2</latest>
7
- <release>20.44.0-smoke.2</release>
6
+ <latest>20.44.0-smoke.4</latest>
7
+ <release>20.44.0-smoke.4</release>
8
8
  <versions>
9
- <version>20.44.0-smoke.2</version>
9
+ <version>20.44.0-smoke.4</version>
10
10
  </versions>
11
- <lastUpdated>20251009140416</lastUpdated>
11
+ <lastUpdated>20251015123718</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 2469ab7c1f6e02f87a553c743f7273f7
1
+ 1424a26ea132414e2a25cdf24897ca55
@@ -1 +1 @@
1
- 42abf211a01d8b4c41c878e1cea39e70627b85c4
1
+ 419ebf124657f635cb3ecec2f6a3256cce093e46
@@ -1 +1 @@
1
- 8b61392f283c0ae6ca8cd9658dcbf6c3118ce680b21bfc0d31141a815ba82bd0
1
+ e31c759d7ed1f7bea2b6e77276bbb1eb2ef29291b9d2a81162dfb785de74816d
@@ -1 +1 @@
1
- 62b5a4ce031a74086e51bfdf1e431258d9ddfd1c44b9b4930ddd388f7c42681240b93c02649c51ec91bbd0e5181516eb6aad6f1a313644a4c89a9b0d8cf5d3a2
1
+ c4e0b8a52b3cb63613de5310d16ef65fbe591dede27d78812e55b19a527b00cc5521e4dcbf9ebe5331147e8c5b37dd0114a366255eacfb4e8788a27f999066f0
Binary file
package/Detox-ios-src.tbz CHANGED
Binary file
Binary file
@@ -27,6 +27,10 @@ object FabricAnimationsInquirer {
27
27
  private var propMappingField: Field? = null
28
28
  private var nodeValueField: Field? = null
29
29
  private var offsetField: Field? = null
30
+ private var preOperationsField: Field? = null
31
+ private var operationsField: Field? = null
32
+ private var mQueueField: Field? = null
33
+ private var mPeekedOperationField: Field? = null
30
34
 
31
35
  fun logAnimatingViews(reactContext: ReactApplicationContext) {
32
36
  try {
@@ -38,15 +42,35 @@ object FabricAnimationsInquirer {
38
42
  val nodesManager = getNodesManager(reactContext) ?: return
39
43
  Log.d(LOG_TAG, "Got nodesManager: ${nodesManager.javaClass.simpleName}")
40
44
 
41
- // Check if there are any active animations first
45
+ // Check for both queued and active animations
46
+ val animatedModule = reactContext.getNativeModule(NativeAnimatedModule::class.java)
47
+ if (animatedModule == null) {
48
+ Log.d(LOG_TAG, "NativeAnimatedModule not found")
49
+ return
50
+ }
51
+
52
+ // Check queued animations first
53
+ val hasQueued = checkQueuedAnimations(animatedModule)
54
+ Log.d(LOG_TAG, "hasQueuedAnimations() returned: $hasQueued")
55
+
56
+ // Check active animations
42
57
  val hasActive = nodesManager.hasActiveAnimations()
43
58
  Log.d(LOG_TAG, "hasActiveAnimations() returned: $hasActive")
44
59
 
45
- if (!hasActive) {
46
- Log.d(LOG_TAG, "No active animations detected")
60
+ if (!hasQueued && !hasActive) {
61
+ Log.d(LOG_TAG, "No queued or active animations detected")
47
62
  return
48
63
  }
49
64
 
65
+ if (hasQueued) {
66
+ Log.d(LOG_TAG, "Found queued animations - analyzing operations queue")
67
+ val queuedViewTags = analyzeQueuedOperations(animatedModule)
68
+ if (queuedViewTags.isNotEmpty()) {
69
+ Log.d(LOG_TAG, "Found ${queuedViewTags.size} views with queued animations: $queuedViewTags")
70
+ logViews(reactContext, queuedViewTags)
71
+ }
72
+ }
73
+
50
74
  // Get all animated nodes from the graph
51
75
  val allNodes = getAllAnimatedNodes(nodesManager)
52
76
  Log.d(LOG_TAG, "Found ${allNodes.size()} total animated nodes")
@@ -171,7 +195,7 @@ object FabricAnimationsInquirer {
171
195
  val visited = mutableSetOf<AnimatedNode>()
172
196
 
173
197
  while (queue.isNotEmpty()) {
174
- val node = queue.poll()
198
+ val node = queue.poll() ?: continue
175
199
  if (node in visited) {
176
200
  continue
177
201
  }
@@ -181,15 +205,15 @@ object FabricAnimationsInquirer {
181
205
  val nodeType = node.javaClass.simpleName
182
206
  when (nodeType) {
183
207
  "PropsAnimatedNode" -> {
184
- allRelevantNodes.add(node)
208
+ allRelevantNodes.add(node as Any)
185
209
  Log.d(LOG_TAG, "Found PropsAnimatedNode: $nodeType")
186
210
  }
187
211
  "StyleAnimatedNode" -> {
188
- allRelevantNodes.add(node)
212
+ allRelevantNodes.add(node as Any)
189
213
  Log.d(LOG_TAG, "Found StyleAnimatedNode: $nodeType")
190
214
  }
191
215
  "ValueAnimatedNode" -> {
192
- allRelevantNodes.add(node)
216
+ allRelevantNodes.add(node as Any)
193
217
  Log.d(LOG_TAG, "Found ValueAnimatedNode: $nodeType")
194
218
  }
195
219
  else -> {
@@ -247,6 +271,7 @@ object FabricAnimationsInquirer {
247
271
  // Log the property mapping to see what properties are being animated
248
272
  try {
249
273
  val propNodeMappingField = findOrCacheField(node.javaClass, "propNodeMapping", "propNodeMappingField")
274
+ @Suppress("UNCHECKED_CAST")
250
275
  val propNodeMapping = propNodeMappingField?.get(node) as? Map<String, Int>
251
276
  if (propNodeMapping != null) {
252
277
  Log.d(LOG_TAG, "View $viewTag has animated properties: ${propNodeMapping.keys}")
@@ -263,6 +288,7 @@ object FabricAnimationsInquirer {
263
288
  // Try to access propMapping to see what properties it handles
264
289
  try {
265
290
  val propMappingField = findOrCacheField(node.javaClass, "propMapping", "propMappingField")
291
+ @Suppress("UNCHECKED_CAST")
266
292
  val propMapping = propMappingField?.get(node) as? Map<String, Int>
267
293
  if (propMapping != null) {
268
294
  Log.d(LOG_TAG, "StyleAnimatedNode handles properties: ${propMapping.keys}")
@@ -321,7 +347,17 @@ object FabricAnimationsInquirer {
321
347
  val view = uiManager.resolveView(tag)
322
348
  if (view != null) {
323
349
  ViewLifecycleRegistry.markAnimated(view)
324
- Log.i(LOG_TAG, "Animating view: tag=$tag, class=${view.javaClass.simpleName}, id=${view.id}")
350
+
351
+ // Get view coordinates and dimensions
352
+ val left = view.left
353
+ val top = view.top
354
+ val right = view.right
355
+ val bottom = view.bottom
356
+ val width = right - left
357
+ val height = bottom - top
358
+
359
+ Log.i(LOG_TAG, "Animating view: tag=$tag, class=${view.javaClass.simpleName}, id=${view.id}, " +
360
+ "bounds=[$left,$top,$right,$bottom], size=${width}x${height}")
325
361
  } else {
326
362
  Log.w(LOG_TAG, "Could not resolve view for tag: $tag")
327
363
  }
@@ -427,4 +463,167 @@ object FabricAnimationsInquirer {
427
463
 
428
464
  return -1
429
465
  }
466
+
467
+ private fun checkQueuedAnimations(animatedModule: NativeAnimatedModule): Boolean {
468
+ return try {
469
+ // Check mPreOperations queue (Android field name)
470
+ val preOperationsField = findOrCacheField(animatedModule.javaClass, "mPreOperations", "preOperationsField")
471
+ val preOperations = preOperationsField?.get(animatedModule)
472
+ val preOperationsEmpty = checkOperationsQueueEmpty(preOperations)
473
+ Log.d(LOG_TAG, "mPreOperations queue empty: $preOperationsEmpty")
474
+
475
+ // Check mOperations queue (Android field name)
476
+ val operationsField = findOrCacheField(animatedModule.javaClass, "mOperations", "operationsField")
477
+ val operations = operationsField?.get(animatedModule)
478
+ val operationsEmpty = checkOperationsQueueEmpty(operations)
479
+ Log.d(LOG_TAG, "mOperations queue empty: $operationsEmpty")
480
+
481
+ val hasQueued = !preOperationsEmpty || !operationsEmpty
482
+ Log.d(LOG_TAG, "Has queued animations: $hasQueued")
483
+ hasQueued
484
+ } catch (e: Exception) {
485
+ Log.e(LOG_TAG, "Failed to check queued animations", e)
486
+ false
487
+ }
488
+ }
489
+
490
+ private fun checkOperationsQueueEmpty(operationsQueue: Any?): Boolean {
491
+ if (operationsQueue == null) {
492
+ Log.d(LOG_TAG, "Operations queue is null")
493
+ return true
494
+ }
495
+
496
+ return try {
497
+ // Try to get isEmpty method
498
+ val isEmptyMethod = operationsQueue.javaClass.getDeclaredMethod("isEmpty")
499
+ isEmptyMethod.isAccessible = true
500
+ val isEmpty = isEmptyMethod.invoke(operationsQueue) as Boolean
501
+ Log.d(LOG_TAG, "Operations queue isEmpty() result: $isEmpty")
502
+ isEmpty
503
+ } catch (e: Exception) {
504
+ Log.d(LOG_TAG, "Could not call isEmpty() on operations queue, trying property access")
505
+ try {
506
+ // Fallback to property access
507
+ val isEmptyProperty = operationsQueue.javaClass.getDeclaredField("isEmpty")
508
+ isEmptyProperty.isAccessible = true
509
+ val isEmpty = isEmptyProperty.get(operationsQueue) as Boolean
510
+ Log.d(LOG_TAG, "Operations queue isEmpty property: $isEmpty")
511
+ isEmpty
512
+ } catch (e2: Exception) {
513
+ Log.e(LOG_TAG, "Could not access isEmpty property on operations queue", e2)
514
+ true // Assume empty if we can't determine
515
+ }
516
+ }
517
+ }
518
+
519
+ private fun analyzeQueuedOperations(animatedModule: NativeAnimatedModule): Set<Int> {
520
+ val viewTags = mutableSetOf<Int>()
521
+ try {
522
+ Log.d(LOG_TAG, "Analyzing queued operations...")
523
+
524
+ // Analyze mPreOperations queue (Android field name)
525
+ val preOperationsField = findOrCacheField(animatedModule.javaClass, "mPreOperations", "preOperationsField")
526
+ val preOperations = preOperationsField?.get(animatedModule)
527
+ if (preOperations != null) {
528
+ Log.d(LOG_TAG, "Analyzing mPreOperations queue...")
529
+ val preOpsViewTags = analyzeOperationsQueue(preOperations, "mPreOperations")
530
+ viewTags.addAll(preOpsViewTags)
531
+ }
532
+
533
+ // Analyze mOperations queue (Android field name)
534
+ val operationsField = findOrCacheField(animatedModule.javaClass, "mOperations", "operationsField")
535
+ val operations = operationsField?.get(animatedModule)
536
+ if (operations != null) {
537
+ Log.d(LOG_TAG, "Analyzing mOperations queue...")
538
+ val opsViewTags = analyzeOperationsQueue(operations, "mOperations")
539
+ viewTags.addAll(opsViewTags)
540
+ }
541
+ } catch (e: Exception) {
542
+ Log.e(LOG_TAG, "Failed to analyze queued operations", e)
543
+ }
544
+ return viewTags
545
+ }
546
+
547
+ private fun analyzeOperationsQueue(operationsQueue: Any, queueName: String): Set<Int> {
548
+ val viewTags = mutableSetOf<Int>()
549
+ try {
550
+ // Log queue class information first
551
+ Log.d(LOG_TAG, "$queueName queue class: ${operationsQueue.javaClass.simpleName}")
552
+ Log.d(LOG_TAG, "$queueName queue fields: ${operationsQueue.javaClass.declaredFields.map { it.name }}")
553
+
554
+ // Try to access the internal mQueue field (ConcurrentLinkedQueue)
555
+ val mQueueField = findOrCacheField(operationsQueue.javaClass, "mQueue", "mQueueField")
556
+ if (mQueueField != null) {
557
+ val mQueue = mQueueField.get(operationsQueue)
558
+ Log.d(LOG_TAG, "Found mQueue in $queueName: $mQueue")
559
+
560
+ // Try to get queue size
561
+ try {
562
+ val sizeMethod = mQueue.javaClass.getDeclaredMethod("size")
563
+ sizeMethod.isAccessible = true
564
+ val size = sizeMethod.invoke(mQueue) as Int
565
+ Log.d(LOG_TAG, "$queueName mQueue size: $size")
566
+ } catch (e: Exception) {
567
+ Log.d(LOG_TAG, "Could not get size of $queueName mQueue")
568
+ }
569
+
570
+ // Try to peek at queue contents (without removing)
571
+ try {
572
+ val peekMethod = mQueue.javaClass.getDeclaredMethod("peek")
573
+ peekMethod.isAccessible = true
574
+ val peekedOperation = peekMethod.invoke(mQueue)
575
+ if (peekedOperation != null) {
576
+ Log.d(LOG_TAG, "Peeked operation from $queueName: ${peekedOperation.javaClass.simpleName}")
577
+
578
+ // Try to extract view tags from the operation
579
+ val operationViewTags = extractViewTagsFromOperation(peekedOperation)
580
+ viewTags.addAll(operationViewTags)
581
+ }
582
+ } catch (e: Exception) {
583
+ Log.d(LOG_TAG, "Could not peek at $queueName queue contents: ${e.message}")
584
+ }
585
+ }
586
+
587
+ // Try to access mPeekedOperation field
588
+ val mPeekedOperationField = findOrCacheField(operationsQueue.javaClass, "mPeekedOperation", "mPeekedOperationField")
589
+ if (mPeekedOperationField != null) {
590
+ val mPeekedOperation = mPeekedOperationField.get(operationsQueue)
591
+ if (mPeekedOperation != null) {
592
+ Log.d(LOG_TAG, "Found mPeekedOperation in $queueName: ${mPeekedOperation.javaClass.simpleName}")
593
+
594
+ // Try to extract view tags from the peeked operation
595
+ val peekedViewTags = extractViewTagsFromOperation(mPeekedOperation)
596
+ viewTags.addAll(peekedViewTags)
597
+ }
598
+ }
599
+
600
+ } catch (e: Exception) {
601
+ Log.e(LOG_TAG, "Failed to analyze $queueName queue", e)
602
+ }
603
+ return viewTags
604
+ }
605
+
606
+ private fun extractViewTagsFromOperation(operation: Any): Set<Int> {
607
+ val viewTags = mutableSetOf<Int>()
608
+ try {
609
+ Log.d(LOG_TAG, "Analyzing operation: ${operation.javaClass.simpleName}")
610
+
611
+ // Try to find view tags in the operation's fields
612
+ val fields = operation.javaClass.declaredFields
613
+ for (field in fields) {
614
+ field.isAccessible = true
615
+ val value = field.get(operation)
616
+ Log.d(LOG_TAG, "Operation field ${field.name}: $value (${value?.javaClass?.simpleName})")
617
+
618
+ // Look for integer fields that might be view tags
619
+ if (value is Int && value > 0) {
620
+ Log.d(LOG_TAG, "Found potential view tag: $value")
621
+ viewTags.add(value)
622
+ }
623
+ }
624
+ } catch (e: Exception) {
625
+ Log.d(LOG_TAG, "Failed to extract view tags from operation: ${e.message}")
626
+ }
627
+ return viewTags
628
+ }
430
629
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "detox",
3
3
  "description": "E2E tests and automation for mobile",
4
- "version": "20.44.0-smoke.2",
4
+ "version": "20.44.0-smoke.4",
5
5
  "bin": {
6
6
  "detox": "local-cli/cli.js"
7
7
  },
@@ -120,5 +120,5 @@
120
120
  "browserslist": [
121
121
  "node 14"
122
122
  ],
123
- "gitHead": "e8582f26e8814a014881f63334fa04d1462fa7d2"
123
+ "gitHead": "35e4dca0f8f18ac2e348331d1ae7519f37e237a4"
124
124
  }
@@ -1 +0,0 @@
1
- fb1630195ebbd2014c1be43fadd17edf
@@ -1 +0,0 @@
1
- 2bc090ab7886acf6b461a8f221f8ed068ad66595
@@ -1 +0,0 @@
1
- b0828f9ccb925e381189df50e59a8cf8a38af81a695ff6700767b756819f18d8
@@ -1 +0,0 @@
1
- 6577058c84bf0f2e9f0f200c83b2e15295cb063415b66f65733b7932124650f3527ea7150b607b39e68c8db423d21f5b65a49339d916546f116d57c202ebadfb
@@ -1 +0,0 @@
1
- d68c582dd3f095bc97c4fe52f2b2c9bb
@@ -1 +0,0 @@
1
- e8379345cc00e6d1f929e8e13c8d9126fb48b83c
@@ -1 +0,0 @@
1
- 3ee37344966d136f6ffc73db2a6ed3caddd4c5624bdd70752066a937e893c74e
@@ -1 +0,0 @@
1
- 604ba5aee32797797fa722a67583f045e5a2c831c37514d3aa29d094b87f1e75c20e7b6746c73fb8d402dce1cbfd35a14fdeab9d7118ef39ba533840e81cec02
@@ -1 +0,0 @@
1
- 70d26301171607b2dbba0e581fc12c81
@@ -1 +0,0 @@
1
- fcef241bd4be7155a23da9ed9e505a53bdbf7c8d
@@ -1 +0,0 @@
1
- 0fceb53da773f5072b415d8cba73c562fef8dde2cc13c18ef155ff86de33cfde
@@ -1 +0,0 @@
1
- 6ec079455199bacdf64876b62b3314f09ba44b3c435d462f00f5627153a985cf32365f5d17924eff0502dd3939a0f1941778b68e76e69d2d6717319ec8a0ab22