react-native-tvos 0.69.6-3 → 0.69.8-0rc

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 (174) hide show
  1. package/Libraries/Components/TV/TVFocusGuideView.js +72 -61
  2. package/Libraries/Components/View/ViewNativeComponent.js +1 -1
  3. package/Libraries/Core/ReactNativeVersion.js +2 -2
  4. package/Libraries/Lists/VirtualizedList.js +25 -10
  5. package/README.md +2 -1
  6. package/React/Base/RCTVersion.m +2 -2
  7. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +66 -29
  8. package/React/Views/RCTTVView.h +6 -1
  9. package/React/Views/RCTTVView.m +65 -7
  10. package/React/Views/RCTViewManager.m +5 -1
  11. package/ReactAndroid/gradle.properties +1 -1
  12. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +7 -1
  13. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactAndroidHWInputDeviceHelper.java +44 -14
  14. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +2 -2
  15. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +25 -0
  16. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +60 -11
  17. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +40 -4
  18. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  19. package/ReactCommon/react/renderer/components/view/ViewProps.cpp +80 -16
  20. package/ReactCommon/react/renderer/components/view/ViewProps.h +8 -0
  21. package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-debug-javadoc.jar → 0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-javadoc.jar} +0 -0
  22. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-javadoc.jar.md5 +1 -0
  23. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-javadoc.jar.sha1 +1 -0
  24. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-javadoc.jar.sha256 +1 -0
  25. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-javadoc.jar.sha512 +1 -0
  26. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug.aar +0 -0
  27. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug.aar.md5 +1 -0
  28. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug.aar.sha1 +1 -0
  29. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug.aar.sha256 +1 -0
  30. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-debug.aar.sha512 +1 -0
  31. package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-release-javadoc.jar → 0.69.8-0rc/hermes-engine-0.69.8-0rc-release-javadoc.jar} +0 -0
  32. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release-javadoc.jar.md5 +1 -0
  33. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release-javadoc.jar.sha1 +1 -0
  34. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release-javadoc.jar.sha256 +1 -0
  35. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release-javadoc.jar.sha512 +1 -0
  36. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release.aar +0 -0
  37. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release.aar.md5 +1 -0
  38. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release.aar.sha1 +1 -0
  39. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release.aar.sha256 +1 -0
  40. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc-release.aar.sha512 +1 -0
  41. package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3.module → 0.69.8-0rc/hermes-engine-0.69.8-0rc.module} +47 -47
  42. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.module.md5 +1 -0
  43. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.module.sha1 +1 -0
  44. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.module.sha256 +1 -0
  45. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.module.sha512 +1 -0
  46. package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3.pom → 0.69.8-0rc/hermes-engine-0.69.8-0rc.pom} +1 -1
  47. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.pom.md5 +1 -0
  48. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.pom.sha1 +1 -0
  49. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.pom.sha256 +1 -0
  50. package/android/com/facebook/react/hermes-engine/0.69.8-0rc/hermes-engine-0.69.8-0rc.pom.sha512 +1 -0
  51. package/android/com/facebook/react/hermes-engine/maven-metadata.xml +4 -4
  52. package/android/com/facebook/react/hermes-engine/maven-metadata.xml.md5 +1 -1
  53. package/android/com/facebook/react/hermes-engine/maven-metadata.xml.sha1 +1 -1
  54. package/android/com/facebook/react/hermes-engine/maven-metadata.xml.sha256 +1 -1
  55. package/android/com/facebook/react/hermes-engine/maven-metadata.xml.sha512 +1 -1
  56. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3-debug-javadoc.jar → 0.69.8-0rc/react-native-0.69.8-0rc-debug-javadoc.jar} +0 -0
  57. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-javadoc.jar.md5 +1 -0
  58. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-javadoc.jar.sha1 +1 -0
  59. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-javadoc.jar.sha256 +1 -0
  60. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-javadoc.jar.sha512 +1 -0
  61. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3-debug-sources.jar → 0.69.8-0rc/react-native-0.69.8-0rc-debug-sources.jar} +0 -0
  62. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-sources.jar.md5 +1 -0
  63. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-sources.jar.sha1 +1 -0
  64. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-sources.jar.sha256 +1 -0
  65. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug-sources.jar.sha512 +1 -0
  66. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3-debug.aar → 0.69.8-0rc/react-native-0.69.8-0rc-debug.aar} +0 -0
  67. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug.aar.md5 +1 -0
  68. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug.aar.sha1 +1 -0
  69. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug.aar.sha256 +1 -0
  70. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-debug.aar.sha512 +1 -0
  71. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3-release-javadoc.jar → 0.69.8-0rc/react-native-0.69.8-0rc-release-javadoc.jar} +0 -0
  72. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-javadoc.jar.md5 +1 -0
  73. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-javadoc.jar.sha1 +1 -0
  74. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-javadoc.jar.sha256 +1 -0
  75. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-javadoc.jar.sha512 +1 -0
  76. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3-release-sources.jar → 0.69.8-0rc/react-native-0.69.8-0rc-release-sources.jar} +0 -0
  77. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-sources.jar.md5 +1 -0
  78. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-sources.jar.sha1 +1 -0
  79. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-sources.jar.sha256 +1 -0
  80. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release-sources.jar.sha512 +1 -0
  81. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3-release.aar → 0.69.8-0rc/react-native-0.69.8-0rc-release.aar} +0 -0
  82. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release.aar.md5 +1 -0
  83. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release.aar.sha1 +1 -0
  84. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release.aar.sha256 +1 -0
  85. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc-release.aar.sha512 +1 -0
  86. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3.module → 0.69.8-0rc/react-native-0.69.8-0rc.module} +57 -57
  87. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.module.md5 +1 -0
  88. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.module.sha1 +1 -0
  89. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.module.sha256 +1 -0
  90. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.module.sha512 +1 -0
  91. package/android/com/facebook/react/react-native/{0.69.6-3/react-native-0.69.6-3.pom → 0.69.8-0rc/react-native-0.69.8-0rc.pom} +1 -1
  92. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.pom.md5 +1 -0
  93. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.pom.sha1 +1 -0
  94. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.pom.sha256 +1 -0
  95. package/android/com/facebook/react/react-native/0.69.8-0rc/react-native-0.69.8-0rc.pom.sha512 +1 -0
  96. package/android/com/facebook/react/react-native/maven-metadata.xml +4 -4
  97. package/android/com/facebook/react/react-native/maven-metadata.xml.md5 +1 -1
  98. package/android/com/facebook/react/react-native/maven-metadata.xml.sha1 +1 -1
  99. package/android/com/facebook/react/react-native/maven-metadata.xml.sha256 +1 -1
  100. package/android/com/facebook/react/react-native/maven-metadata.xml.sha512 +1 -1
  101. package/package.json +2 -2
  102. package/sdks/hermesc/linux64-bin/hermesc +0 -0
  103. package/sdks/hermesc/osx-bin/hermesc +0 -0
  104. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  105. package/template/package.json +1 -1
  106. package/tvos-types.d.ts +28 -5
  107. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug-javadoc.jar.md5 +0 -1
  108. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug-javadoc.jar.sha1 +0 -1
  109. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug-javadoc.jar.sha256 +0 -1
  110. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug-javadoc.jar.sha512 +0 -1
  111. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug.aar +0 -0
  112. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug.aar.md5 +0 -1
  113. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug.aar.sha1 +0 -1
  114. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug.aar.sha256 +0 -1
  115. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-debug.aar.sha512 +0 -1
  116. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release-javadoc.jar.md5 +0 -1
  117. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release-javadoc.jar.sha1 +0 -1
  118. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release-javadoc.jar.sha256 +0 -1
  119. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release-javadoc.jar.sha512 +0 -1
  120. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release.aar +0 -0
  121. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release.aar.md5 +0 -1
  122. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release.aar.sha1 +0 -1
  123. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release.aar.sha256 +0 -1
  124. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3-release.aar.sha512 +0 -1
  125. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.module.md5 +0 -1
  126. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.module.sha1 +0 -1
  127. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.module.sha256 +0 -1
  128. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.module.sha512 +0 -1
  129. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.pom.md5 +0 -1
  130. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.pom.sha1 +0 -1
  131. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.pom.sha256 +0 -1
  132. package/android/com/facebook/react/hermes-engine/0.69.6-3/hermes-engine-0.69.6-3.pom.sha512 +0 -1
  133. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-javadoc.jar.md5 +0 -1
  134. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-javadoc.jar.sha1 +0 -1
  135. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-javadoc.jar.sha256 +0 -1
  136. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-javadoc.jar.sha512 +0 -1
  137. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-sources.jar.md5 +0 -1
  138. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-sources.jar.sha1 +0 -1
  139. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-sources.jar.sha256 +0 -1
  140. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug-sources.jar.sha512 +0 -1
  141. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug.aar.md5 +0 -1
  142. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug.aar.sha1 +0 -1
  143. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug.aar.sha256 +0 -1
  144. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-debug.aar.sha512 +0 -1
  145. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-javadoc.jar.md5 +0 -1
  146. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-javadoc.jar.sha1 +0 -1
  147. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-javadoc.jar.sha256 +0 -1
  148. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-javadoc.jar.sha512 +0 -1
  149. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-sources.jar.md5 +0 -1
  150. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-sources.jar.sha1 +0 -1
  151. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-sources.jar.sha256 +0 -1
  152. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release-sources.jar.sha512 +0 -1
  153. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release.aar.md5 +0 -1
  154. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release.aar.sha1 +0 -1
  155. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release.aar.sha256 +0 -1
  156. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3-release.aar.sha512 +0 -1
  157. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.module.md5 +0 -1
  158. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.module.sha1 +0 -1
  159. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.module.sha256 +0 -1
  160. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.module.sha512 +0 -1
  161. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.pom.md5 +0 -1
  162. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.pom.sha1 +0 -1
  163. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.pom.sha256 +0 -1
  164. package/android/com/facebook/react/react-native/0.69.6-3/react-native-0.69.6-3.pom.sha512 +0 -1
  165. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-debug-sources.jar → 0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-sources.jar} +0 -0
  166. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-debug-sources.jar.md5 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-sources.jar.md5} +0 -0
  167. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-debug-sources.jar.sha1 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-sources.jar.sha1} +0 -0
  168. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-debug-sources.jar.sha256 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-sources.jar.sha256} +0 -0
  169. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-debug-sources.jar.sha512 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-debug-sources.jar.sha512} +0 -0
  170. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-release-sources.jar → 0.69.8-0rc/hermes-engine-0.69.8-0rc-release-sources.jar} +0 -0
  171. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-release-sources.jar.md5 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-release-sources.jar.md5} +0 -0
  172. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-release-sources.jar.sha1 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-release-sources.jar.sha1} +0 -0
  173. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-release-sources.jar.sha256 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-release-sources.jar.sha256} +0 -0
  174. /package/android/com/facebook/react/hermes-engine/{0.69.6-3/hermes-engine-0.69.6-3-release-sources.jar.sha512 → 0.69.8-0rc/hermes-engine-0.69.8-0rc-release-sources.jar.sha512} +0 -0
@@ -81,8 +81,14 @@ public class ReactAndroidHWInputDeviceHelper {
81
81
  */
82
82
  private int mLastFocusedViewId = View.NO_ID;
83
83
 
84
+ // Presses longer than this number of milliseconds are treated as long presses
85
+ // This seems to be roughly the time the emulator waits after the first key down event
86
+ // before sending a continuous stream of rapid key downs on a long press.
87
+ private long mLongPressedDelta = 300;
88
+
89
+ // These are used for long press detection
84
90
  private long mLastKeyDownTime = 0;
85
- private long mPressedDelta = 1000;
91
+ private boolean longPressEventActive = false;
86
92
 
87
93
  public ReactAndroidHWInputDeviceHelper() {}
88
94
 
@@ -101,6 +107,12 @@ public class ReactAndroidHWInputDeviceHelper {
101
107
  eventKeyCode == KeyEvent.KEYCODE_DPAD_LEFT;
102
108
  }
103
109
 
110
+ // True if we are in the long press state and we are more than
111
+ // mLongPressedDelta milliseconds since the last long press event was fired
112
+ private boolean isLongPressEventTime(long time) {
113
+ return mLastKeyDownTime != 0 && time - mLastKeyDownTime > mLongPressedDelta;
114
+ }
115
+
104
116
  /** Called from {@link com.facebook.react.ReactRootView}. This is the main place the key events are handled. */
105
117
  public void handleKeyEvent(KeyEvent ev, ReactContext context) {
106
118
  int eventKeyCode = ev.getKeyCode();
@@ -108,30 +120,48 @@ public class ReactAndroidHWInputDeviceHelper {
108
120
  long time = SystemClock.uptimeMillis();
109
121
  boolean isSelectOrDPadEvent = isDPadEvent(eventKeyCode) || isSelectEvent(eventKeyCode);
110
122
 
111
- // Simple implementation of long press detection
112
- if ((eventKeyAction == KeyEvent.ACTION_DOWN)
113
- && isSelectOrDPadEvent && mLastKeyDownTime == 0) {
114
- mLastKeyDownTime = time;
123
+ // Simple implementation of long press detection for key down events
124
+ if ((eventKeyAction == KeyEvent.ACTION_DOWN) && isSelectOrDPadEvent) {
125
+ if (mLastKeyDownTime == 0) {
126
+ mLastKeyDownTime = time;
127
+ } else {
128
+ if (isLongPressEventTime(time)) {
129
+ // Activate long press state and don't reset until key up event arrives
130
+ longPressEventActive = true;
131
+ }
132
+ }
115
133
  }
116
134
 
117
- if (shouldDispatchEvent(eventKeyCode, eventKeyAction)) {
118
- long delta = time - mLastKeyDownTime;
119
- boolean isLongPress = delta > mPressedDelta;
120
-
121
- if(isLongPress && isSelectOrDPadEvent){
122
- dispatchEvent(KEY_EVENTS_LONG_PRESS_ACTIONS.get(eventKeyCode), mLastFocusedViewId, eventKeyAction, context);
135
+ if (shouldDispatchEvent(eventKeyCode, eventKeyAction, time)) {
136
+ if(longPressEventActive) {
137
+ // If we are not sending key down events to JS, send the long press event as a key up to make sure it is received
138
+ dispatchEvent(
139
+ KEY_EVENTS_LONG_PRESS_ACTIONS.get(eventKeyCode),
140
+ mLastFocusedViewId,
141
+ ReactFeatureFlags.enableKeyDownEvents ? eventKeyAction : KeyEvent.ACTION_UP,
142
+ context
143
+ );
144
+ // Update the start time for detecting the next long press event
145
+ mLastKeyDownTime = time;
123
146
  } else {
124
147
  dispatchEvent(KEY_EVENTS_ACTIONS.get(eventKeyCode), mLastFocusedViewId, eventKeyAction, context);
125
148
  }
149
+ }
150
+
151
+ // If this is key up event, reset long press detector
152
+ if ((eventKeyAction == KeyEvent.ACTION_UP) && isSelectOrDPadEvent) {
126
153
  mLastKeyDownTime = 0;
154
+ longPressEventActive = false;
127
155
  }
156
+
128
157
  }
129
158
 
130
- // Android TV: Only send key up actions, unless key down events are enabled
131
- private boolean shouldDispatchEvent(int eventKeyCode, int eventKeyAction) {
159
+ // Android TV: Only send key up actions, unless key down events are enabled or we need to send a long press event
160
+ private boolean shouldDispatchEvent(int eventKeyCode, int eventKeyAction, long time) {
132
161
  return KEY_EVENTS_ACTIONS.containsKey(eventKeyCode) && (
133
162
  (eventKeyAction == KeyEvent.ACTION_UP) ||
134
- (eventKeyAction == KeyEvent.ACTION_DOWN && ReactFeatureFlags.enableKeyDownEvents)
163
+ (eventKeyAction == KeyEvent.ACTION_DOWN && !longPressEventActive && ReactFeatureFlags.enableKeyDownEvents) ||
164
+ (eventKeyAction == KeyEvent.ACTION_DOWN && longPressEventActive && isLongPressEventTime(time))
135
165
  );
136
166
  }
137
167
 
@@ -17,6 +17,6 @@ public class ReactNativeVersion {
17
17
  public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
18
18
  "major", 0,
19
19
  "minor", 69,
20
- "patch", 6,
21
- "prerelease", "3");
20
+ "patch", 8,
21
+ "prerelease", "0rc");
22
22
  }
@@ -586,6 +586,10 @@ public class ReactEditText extends AppCompatEditText
586
586
  new SpannableStringBuilder(reactTextUpdate.getText());
587
587
 
588
588
  manageSpans(spannableStringBuilder, reactTextUpdate.mContainsMultipleFragments);
589
+
590
+ // Mitigation for https://github.com/facebook/react-native/issues/35936 (S318090)
591
+ stripAbsoluteSizeSpans(spannableStringBuilder);
592
+
589
593
  mContainsImages = reactTextUpdate.containsImages();
590
594
 
591
595
  // When we update text, we trigger onChangeText code that will
@@ -659,6 +663,27 @@ public class ReactEditText extends AppCompatEditText
659
663
  }
660
664
  }
661
665
 
666
+ private void stripAbsoluteSizeSpans(SpannableStringBuilder sb) {
667
+ // We have already set a font size on the EditText itself. We can safely remove sizing spans
668
+ // which are the same as the set font size, and not otherwise overlapped.
669
+ final int effectiveFontSize = mTextAttributes.getEffectiveFontSize();
670
+ ReactAbsoluteSizeSpan[] spans = sb.getSpans(0, sb.length(), ReactAbsoluteSizeSpan.class);
671
+
672
+ outerLoop:
673
+ for (ReactAbsoluteSizeSpan span : spans) {
674
+ ReactAbsoluteSizeSpan[] overlappingSpans =
675
+ sb.getSpans(sb.getSpanStart(span), sb.getSpanEnd(span), ReactAbsoluteSizeSpan.class);
676
+
677
+ for (ReactAbsoluteSizeSpan overlappingSpan : overlappingSpans) {
678
+ if (span.getSize() != effectiveFontSize) {
679
+ continue outerLoop;
680
+ }
681
+ }
682
+
683
+ sb.removeSpan(span);
684
+ }
685
+ }
686
+
662
687
  private static boolean sameTextForSpan(
663
688
  final Editable oldText,
664
689
  final SpannableStringBuilder newText,
@@ -20,6 +20,7 @@ import android.graphics.RectF;
20
20
  import android.graphics.drawable.Drawable;
21
21
  import android.graphics.drawable.LayerDrawable;
22
22
  import android.os.Build;
23
+ import android.view.FocusFinder;
23
24
  import android.view.MotionEvent;
24
25
  import android.view.View;
25
26
  import android.view.ViewGroup;
@@ -86,6 +87,10 @@ public class ReactViewGroup extends ViewGroup
86
87
  private boolean autoFocus = false;
87
88
  private WeakReference<View> lastFocusedElement;
88
89
  private boolean mRecoverFocus = false;
90
+ private boolean trapFocusUp = false;
91
+ private boolean trapFocusDown = false;
92
+ private boolean trapFocusLeft = false;
93
+ private boolean trapFocusRight = false;
89
94
 
90
95
  /**
91
96
  * This listener will be set for child views when removeClippedSubview property is enabled. When
@@ -1092,8 +1097,18 @@ public class ReactViewGroup extends ViewGroup
1092
1097
  return false;
1093
1098
  }
1094
1099
 
1100
+ private boolean isFocusDestinationsSet() {
1101
+ return focusDestinations.length > 0;
1102
+ }
1103
+
1095
1104
  private boolean isTVFocusGuide() {
1096
- return focusDestinations.length > 0 || autoFocus;
1105
+ /**
1106
+ * We don't count a view as `TVFocusGuide` if it has `trapFocus*` props enabled.
1107
+ * The reason is, it's a seperate functionality that has nothing to do with other
1108
+ * TVFocusGuide features that involves heavy focus management. So, the feature
1109
+ * is not directly tied to `TVFocusGuide`.
1110
+ */
1111
+ return isFocusDestinationsSet() || autoFocus;
1097
1112
  }
1098
1113
 
1099
1114
  @Nullable
@@ -1182,6 +1197,14 @@ public class ReactViewGroup extends ViewGroup
1182
1197
  return super.requestFocus(direction, previouslyFocusedRect);
1183
1198
  }
1184
1199
 
1200
+ if (isFocusDestinationsSet()) {
1201
+ View destination = findDestinationView();
1202
+
1203
+ if (destination != null && requestFocusViewOrAncestor(destination)) {
1204
+ return true;
1205
+ }
1206
+ }
1207
+
1185
1208
  if (this.autoFocus) {
1186
1209
  View lastFocusedElem = lastFocusedElement.get();
1187
1210
 
@@ -1207,19 +1230,29 @@ public class ReactViewGroup extends ViewGroup
1207
1230
  }
1208
1231
  }
1209
1232
 
1210
- View destination = findDestinationView();
1211
-
1212
- if (destination != null && requestFocusViewOrAncestor(destination)) {
1213
- return true;
1214
- }
1233
+ return super.requestFocus(direction, previouslyFocusedRect);
1234
+ }
1215
1235
 
1216
- for (int i = 0; i < getChildCount(); i++) {
1217
- if (getChildAt(i).requestFocus()) {
1218
- return true;
1219
- }
1236
+ @Override
1237
+ public View focusSearch(View focused, int direction) {
1238
+ /**
1239
+ * FocusSearch recursively goes all the way up to the Root view
1240
+ * and runs `FocusFinder.findNextFocus()` to determine the next focusable.
1241
+ * It finds the next focusable by accounting *every* focusable elements on the screen.
1242
+ *
1243
+ * That is exactly the thing we want to prevent if the view has a `focusTrap` enabled
1244
+ * matching the `direction`. We interrupt `focusSearch` to make the `FocusFinder` run
1245
+ * the algorithm only accounting the children elements of the focus trap.
1246
+ * This ensures that focus will always stay inside the container until trap gets disabled.
1247
+ */
1248
+ if ((trapFocusUp && direction == FOCUS_UP)
1249
+ || (trapFocusDown && direction == FOCUS_DOWN)
1250
+ || (trapFocusLeft && direction == FOCUS_LEFT)
1251
+ || (trapFocusRight && direction == FOCUS_RIGHT)) {
1252
+ return FocusFinder.getInstance().findNextFocus(this, focused, direction);
1220
1253
  }
1221
1254
 
1222
- return false;
1255
+ return super.focusSearch(focused, direction);
1223
1256
  }
1224
1257
 
1225
1258
  public void setFocusDestinations(@NonNull int[] focusDestinations) {
@@ -1230,4 +1263,20 @@ public class ReactViewGroup extends ViewGroup
1230
1263
  this.autoFocus = autoFocus;
1231
1264
  lastFocusedElement = new WeakReference<View>(null);
1232
1265
  }
1266
+
1267
+ public void setTrapFocusUp(boolean enabled) {
1268
+ this.trapFocusUp = enabled;
1269
+ }
1270
+
1271
+ public void setTrapFocusDown(boolean enabled) {
1272
+ this.trapFocusDown = enabled;
1273
+ }
1274
+
1275
+ public void setTrapFocusLeft(boolean enabled) {
1276
+ this.trapFocusLeft = enabled;
1277
+ }
1278
+
1279
+ public void setTrapFocusRight(boolean enabled) {
1280
+ this.trapFocusRight = enabled;
1281
+ }
1233
1282
  }
@@ -10,6 +10,7 @@ package com.facebook.react.views.view;
10
10
  import android.annotation.TargetApi;
11
11
  import android.graphics.Rect;
12
12
  import android.os.Build;
13
+ import android.util.Log;
13
14
  import android.view.View;
14
15
  import androidx.annotation.NonNull;
15
16
  import androidx.annotation.Nullable;
@@ -51,6 +52,7 @@ public class ReactViewManager extends ReactClippingViewManager<ReactViewGroup> {
51
52
  };
52
53
  private static final int CMD_HOTSPOT_UPDATE = 1;
53
54
  private static final int CMD_SET_PRESSED = 2;
55
+ private static final int CMD_SET_DESTINATIONS = 3;
54
56
  private static final String HOTSPOT_UPDATE_KEY = "hotspotUpdate";
55
57
 
56
58
  @ReactProp(name = "accessible")
@@ -305,7 +307,7 @@ public class ReactViewManager extends ReactClippingViewManager<ReactViewGroup> {
305
307
 
306
308
  @Override
307
309
  public Map<String, Integer> getCommandsMap() {
308
- return MapBuilder.of(HOTSPOT_UPDATE_KEY, CMD_HOTSPOT_UPDATE, "setPressed", CMD_SET_PRESSED);
310
+ return MapBuilder.of(HOTSPOT_UPDATE_KEY, CMD_HOTSPOT_UPDATE, "setPressed", CMD_SET_PRESSED, "setDestinations", CMD_SET_DESTINATIONS);
309
311
  }
310
312
 
311
313
  @Override
@@ -321,6 +323,11 @@ public class ReactViewManager extends ReactClippingViewManager<ReactViewGroup> {
321
323
  handleSetPressed(root, args);
322
324
  break;
323
325
  }
326
+ case CMD_SET_DESTINATIONS:
327
+ {
328
+ handleSetDestinations(root, args);
329
+ break;
330
+ }
324
331
  }
325
332
  }
326
333
 
@@ -337,6 +344,11 @@ public class ReactViewManager extends ReactClippingViewManager<ReactViewGroup> {
337
344
  handleSetPressed(root, args);
338
345
  break;
339
346
  }
347
+ case "setDestinations":
348
+ {
349
+ handleSetDestinations(root, args);
350
+ break;
351
+ }
340
352
  }
341
353
  }
342
354
 
@@ -359,14 +371,18 @@ public class ReactViewManager extends ReactClippingViewManager<ReactViewGroup> {
359
371
  root.drawableHotspotChanged(x, y);
360
372
  }
361
373
 
374
+ private void handleSetDestinations(ReactViewGroup root, @Nullable ReadableArray args) {
375
+ if (args == null || args.size() != 1) {
376
+ throw new JSApplicationIllegalArgumentException(
377
+ "Illegal number of arguments for 'setDestinations' command");
378
+ }
362
379
 
363
- @ReactProp(name = "destinations")
364
- public void setDestinations(final ReactViewGroup view, final ReadableArray destinations) {
380
+ ReadableArray destinations = args.getArray(0);
365
381
  int[] fd = new int[destinations.size()];
366
382
  for (int i = 0; i < fd.length; i++) {
367
383
  fd[i] = destinations.getInt(i);
368
384
  }
369
- view.setFocusDestinations(fd);
385
+ root.setFocusDestinations(fd);
370
386
  }
371
387
 
372
388
  @ReactProp(name = "autoFocus")
@@ -374,4 +390,24 @@ public class ReactViewManager extends ReactClippingViewManager<ReactViewGroup> {
374
390
  view.setAutoFocusTV(autoFocus);
375
391
  }
376
392
 
393
+ @ReactProp(name = "trapFocusUp")
394
+ public void trapFocusUp(ReactViewGroup view, boolean enabled) {
395
+ view.setTrapFocusUp(enabled);
396
+ }
397
+
398
+ @ReactProp(name = "trapFocusDown")
399
+ public void trapFocusDown(ReactViewGroup view, boolean enabled) {
400
+ view.setTrapFocusDown(enabled);
401
+ }
402
+
403
+ @ReactProp(name = "trapFocusLeft")
404
+ public void trapFocusLeft(ReactViewGroup view, boolean enabled) {
405
+ view.setTrapFocusLeft(enabled);
406
+ }
407
+
408
+ @ReactProp(name = "trapFocusRight")
409
+ public void trapFocusRight(ReactViewGroup view, boolean enabled) {
410
+ view.setTrapFocusRight(enabled);
411
+ }
412
+
377
413
  }
@@ -17,8 +17,8 @@ namespace facebook::react {
17
17
  constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 69;
20
- int32_t Patch = 6;
21
- std::string_view Prerelease = "3";
20
+ int32_t Patch = 8;
21
+ std::string_view Prerelease = "0rc";
22
22
  } ReactNativeVersion;
23
23
 
24
24
  } // namespace facebook::react
@@ -31,33 +31,73 @@ ViewProps::ViewProps(
31
31
  rawProps,
32
32
  "isTVSelectable",
33
33
  sourceProps.isTVSelectable,
34
- (Boolean)false)),
34
+ (Boolean) false)),
35
35
  hasTVPreferredFocus(convertRawProp(
36
36
  context,
37
37
  rawProps,
38
38
  "hasTVPreferredFocus",
39
39
  sourceProps.hasTVPreferredFocus,
40
- (Boolean)false)),
40
+ (Boolean) false)),
41
41
  tvParallaxProperties(convertRawProp(
42
42
  context,
43
43
  rawProps,
44
44
  "tvParallaxProperties",
45
45
  sourceProps.tvParallaxProperties,
46
46
  {})),
47
- nextFocusUp(
48
- convertRawProp(context, rawProps, "nextFocusUp", sourceProps.nextFocusUp, {})),
49
- nextFocusDown(
50
- convertRawProp(context, rawProps, "nextFocusDown", sourceProps.nextFocusDown, {})),
51
- nextFocusLeft(
52
- convertRawProp(context, rawProps, "nextFocusLeft", sourceProps.nextFocusLeft, {})),
53
- nextFocusRight(
54
- convertRawProp(context, rawProps, "nextFocusRight", sourceProps.nextFocusRight, {})),
47
+ nextFocusUp(convertRawProp(
48
+ context,
49
+ rawProps,
50
+ "nextFocusUp",
51
+ sourceProps.nextFocusUp,
52
+ {})),
53
+ nextFocusDown(convertRawProp(
54
+ context,
55
+ rawProps,
56
+ "nextFocusDown",
57
+ sourceProps.nextFocusDown,
58
+ {})),
59
+ nextFocusLeft(convertRawProp(
60
+ context,
61
+ rawProps,
62
+ "nextFocusLeft",
63
+ sourceProps.nextFocusLeft,
64
+ {})),
65
+ nextFocusRight(convertRawProp(
66
+ context,
67
+ rawProps,
68
+ "nextFocusRight",
69
+ sourceProps.nextFocusRight,
70
+ {})),
55
71
  autoFocus(convertRawProp(
56
72
  context,
57
73
  rawProps,
58
74
  "autoFocus",
59
75
  sourceProps.autoFocus,
60
76
  (Boolean) false)),
77
+ trapFocusUp(convertRawProp(
78
+ context,
79
+ rawProps,
80
+ "trapFocusUp",
81
+ sourceProps.trapFocusUp,
82
+ false)),
83
+ trapFocusDown(convertRawProp(
84
+ context,
85
+ rawProps,
86
+ "trapFocusDown",
87
+ sourceProps.trapFocusDown,
88
+ false)),
89
+ trapFocusLeft(convertRawProp(
90
+ context,
91
+ rawProps,
92
+ "trapFocusLeft",
93
+ sourceProps.trapFocusLeft,
94
+ false)),
95
+ trapFocusRight(convertRawProp(
96
+ context,
97
+ rawProps,
98
+ "trapFocusRight",
99
+ sourceProps.trapFocusRight,
100
+ false)),
61
101
  #endif
62
102
  opacity(convertRawProp(
63
103
  context,
@@ -217,12 +257,36 @@ ViewProps::ViewProps(
217
257
  "renderToHardwareTextureAndroid",
218
258
  sourceProps.renderToHardwareTextureAndroid,
219
259
  {})),
220
- autoFocus(convertRawProp(
221
- context,
222
- rawProps,
223
- "autoFocus",
224
- sourceProps.autoFocus,
225
- false))
260
+ autoFocus(convertRawProp(
261
+ context,
262
+ rawProps,
263
+ "autoFocus",
264
+ sourceProps.autoFocus,
265
+ false)),
266
+ trapFocusUp(convertRawProp(
267
+ context,
268
+ rawProps,
269
+ "trapFocusUp",
270
+ sourceProps.trapFocusUp,
271
+ false)),
272
+ trapFocusDown(convertRawProp(
273
+ context,
274
+ rawProps,
275
+ "trapFocusDown",
276
+ sourceProps.trapFocusDown,
277
+ false)),
278
+ trapFocusLeft(convertRawProp(
279
+ context,
280
+ rawProps,
281
+ "trapFocusLeft",
282
+ sourceProps.trapFocusLeft,
283
+ false)),
284
+ trapFocusRight(convertRawProp(
285
+ context,
286
+ rawProps,
287
+ "trapFocusRight",
288
+ sourceProps.trapFocusRight,
289
+ false))
226
290
  #endif
227
291
  {};
228
292
 
@@ -79,6 +79,10 @@ class ViewProps : public YogaStylableProps, public AccessibilityProps {
79
79
  std::optional<int> nextFocusLeft;
80
80
  std::optional<int> nextFocusRight;
81
81
  bool autoFocus{false};
82
+ bool trapFocusUp{false};
83
+ bool trapFocusDown{false};
84
+ bool trapFocusLeft{false};
85
+ bool trapFocusRight{false};
82
86
  #endif
83
87
 
84
88
  Float elevation{}; /* Android-only */
@@ -93,6 +97,10 @@ class ViewProps : public YogaStylableProps, public AccessibilityProps {
93
97
  bool needsOffscreenAlphaCompositing{false};
94
98
  bool renderToHardwareTextureAndroid{false};
95
99
  bool autoFocus{false};
100
+ bool trapFocusUp{false};
101
+ bool trapFocusDown{false};
102
+ bool trapFocusLeft{false};
103
+ bool trapFocusRight{false};
96
104
  #endif
97
105
 
98
106
  #pragma mark - Convenience Methods
@@ -0,0 +1 @@
1
+ c255a9cbbfc674bcc34776435b85dcf390bc56c2341329971951d556b6162907
@@ -0,0 +1 @@
1
+ 4927a35f8ef2836598e81608424fe18557522c9a0985b58596e15cc992c233992e9d568e391c28c3d74d997793123e32b764959867aaec66681f035df463dc24
@@ -0,0 +1 @@
1
+ 4b8c8be5bc8c00dfb4715cc8a11488ecf08c657a
@@ -0,0 +1 @@
1
+ 3464ef617b14406c64d3c3cbf74f4ffeb897dcd2bde49ec919b00130cbb180c5
@@ -0,0 +1 @@
1
+ a72a2164acad5c06eec6eb6bce29e5640f8ae2eb5c2870545fd79f0a2f2c7b261885e106a6477bdd8d961a2fb17545273a7d44a4aaff57aa6751c43936d8bf18
@@ -0,0 +1 @@
1
+ c255a9cbbfc674bcc34776435b85dcf390bc56c2341329971951d556b6162907
@@ -0,0 +1 @@
1
+ 4927a35f8ef2836598e81608424fe18557522c9a0985b58596e15cc992c233992e9d568e391c28c3d74d997793123e32b764959867aaec66681f035df463dc24
@@ -0,0 +1 @@
1
+ 8eaec92f520a73dc46bd9d157b1bcc4461616d7a
@@ -0,0 +1 @@
1
+ fda0279686d0fe1fb30949a96cdf72146371049a87f7a83425e91ed53eece376
@@ -0,0 +1 @@
1
+ 5d53f0dcffd9099915e76d0018c4e08588d42facb49e9ff0bd0896db6609ae40cd57ee79ab7043f4412dbe3f672e9a66a5e10f52f755a510ad47fa66b99b8c60