I got an exception when try to run on Android

When running the sample project on a physical Android device, I got this error:
`System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.'
[mono-rt] [ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
[mono-rt]  ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
[mono-rt]  ---> System.TypeInitializationException: The type initializer for 'RiveSharp.Factory' threw an exception.
[mono-rt]  ---> System.DllNotFoundException: rive
[mono-rt]    at RiveSharp.Factory..cctor() in D:\Projects\rive-maui\src\RiveSharp\Factory.cs:line 22
[mono-rt]    --- End of inner exception stack trace ---
[mono-rt]    at RiveSharp.Scene..ctor() in D:\Projects\rive-maui\src\RiveSharp\Scene.cs:line 28
[mono-rt]    at RiveSharp.Views.RivePlayer..ctor() in D:\Projects\rive-maui\src\RiveSharp.Views.MAUI\RivePlayer.cs:line 169
[mono-rt]    at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Constructor(Object obj, IntPtr* args)
[mono-rt]    at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[mono-rt]    --- End of inner exception stack trace ---
[mono-rt]    at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[mono-rt]    at System.RuntimeType.CreateInstanceMono(Boolean nonPublic, Boolean wrapExceptions)
[mono-rt]    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions)
[mono-rt]    at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
[mono-rt]    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
[mono-rt]    at System.Activator.CreateInstance(Type type)
[mono-rt]    at Microsoft.Maui.Controls.Xaml.CreateValuesVisitor.Visit(ElementNode node, INode parentNode) in D:\a_work\1\s\src\Controls\src\Xaml\CreateValuesVisitor.cs:line 102
[mono-rt]    at Microsoft.Maui.Controls.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) in D:\a_work\1\s\src\Controls\src\Xaml\XamlNode.cs:line 159
[mono-rt]    at Microsoft.Maui.Controls.Xaml.ElementNode.Accept(IXamlNodeVisitor visitor, INode parentNode) in D:\a_work\1\s\src\Controls\src\Xaml\XamlNode.cs:line 155
[mono-rt]    at Microsoft.Maui.Controls.Xaml.RootNode.Accept(IXamlNodeVisitor visitor, INode parentNode) in D:\a_work\1\s\src\Controls\src\Xaml\XamlNode.cs:line 212
[mono-rt]    at Microsoft.Maui.Controls.Xaml.XamlLoader.Visit(RootNode rootnode, HydrationContext visitorContext, Boolean useDesignProperties) in D:\a_work\1\s\src\Controls\src\Xaml\XamlLoader.cs:line 207
[mono-rt]    at Microsoft.Maui.Controls.Xaml.XamlLoader.Load(Object view, String xaml, Assembly rootAssembly, Boolean useDesignProperties) in D:\a_work\1\s\src\Controls\src\Xaml\XamlLoader.cs:line 78
[mono-rt]    at Microsoft.Maui.Controls.Xaml.XamlLoader.Load(Object view, String xaml, Boolean useDesignProperties) in D:\a_work\1\s\src\Controls\src\Xaml\XamlLoader.cs:line 53
[mono-rt]    at Microsoft.Maui.Controls.Xaml.XamlLoader.Load(Object view, Type callingType) in D:\a_work\1\s\src\Controls\src\Xaml\XamlLoader.cs:line 49
[mono-rt]    at Microsoft.Maui.Controls.Xaml.Extensions.LoadFromXaml[MainPage](MainPage view, Type callingType) in D:\a_work\1\s\src\Controls\src\Xaml\ViewExtensions.cs:line 37
[mono-rt]    at Viewer.MainPage.InitializeComponent() in D:\Projects\rive-maui\src\Viewer\Microsoft.Maui.Controls.SourceGen\Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator\MainPage.xaml.sg.cs:line 22
[mono-rt]    at Viewer.MainPage..ctor() in D:\Projects\rive-maui\src\Viewer\MainPage.xaml.cs:line 7
[mono-rt]    at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Constructor(Object obj, IntPtr* args)
[mono-rt]    at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[mono-rt]    --- End of inner exception stack trace ---
[mono-rt]    at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[mono-rt]    at System.RuntimeType.CreateInstanceMono(Boolean nonPublic, Boolean wrapExceptions)
[mono-rt]    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions)
[mono-rt]    at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
[mono-rt]    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
[mono-rt]    at System.Activator.CreateInstance(Type type)
[mono-rt]    at Microsoft.Maui.Controls.ShellContent.<>c__DisplayClass19_0.<Microsoft.Maui.Controls.IShellContentController.GetOrCreateContent>b__0() in D:\a_work\1\s\src\Controls\src\Core\Shell\ShellContent.cs:line 76
[mono-rt]    at Microsoft.Maui.Controls.ElementTemplate.CreateContent() in D:\a_work\1\s\src\Controls\src\Core\ElementTemplate.cs:line 86
[mono-rt]    at Microsoft.Maui.Controls.Internals.DataTemplateExtensions.CreateContent(DataTemplate self, Object item, BindableObject container) in D:\a_work\1\s\src\Controls\src\Core\DataTemplateExtensions.cs:line 23
[mono-rt]    at Microsoft.Maui.Controls.ShellContent.Microsoft.Maui.Controls.IShellContentController.GetOrCreateContent() in D:\a_work\1\s\src\Controls\src\Core\Shell\ShellContent.cs:line 81
[mono-rt]    at Microsoft.Maui.Controls.Platform.Compatibility.ShellSectionRenderer.OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) in D:\a_work\1\s\src\Controls\src\Core\Compatibility\Handlers\Shell\Android\ShellSectionRenderer.cs:line 124
[mono-rt]    at AndroidX.Fragment.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_(IntPtr jnienv, IntPtr native__this, IntPtr native_inflater, IntPtr native_container, IntPtr native_savedInstanceState) in C:\a_work\1\s\generated\androidx.fragment.fragment\obj\Release
et6.0-android\generated\src\AndroidX.Fragment.App.Fragment.cs:line 2031
[mono-rt]    at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_L(_JniMarshal_PPLLL_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:line 367`
Windows is running fine (after manualy copy the rive.dll to the AnyCPU folder (which I get an error on):

Android will need its own library file I guess.
I tried including the .so files from the Android library (https://repo1.maven.org/maven2/app/rive/rive-android/9.2.2/rive-android-9.2.2.aar) using the AndroidNativeLibrary build action (note: librive-android.so would need to be renamed to rive.so), but that doesn't work since that binary misses RiveSharpInterop.cpp.
I asked the Rive developers to publish a nuget package that supports more platforms than only win10.

What I did further:

restore submodule
download and put premake5.exe in native folder
update the cpp file from https://github.com/rive-app/rive-sharp/blob/main/native/RiveSharpInterop.cpp and modify lines 37-41 to be (clang / android doesn't use __declspec(dllexport)):#ifdef WINDOWS
#define RIVE_DLL(RET) extern "C" __declspec(dllexport) RET __cdecl
#else // WASM / ANDROID
#define RIVE_DLL(RET) extern "C" __attribute__((visibility("default"))) RET __cdecl
#endif

run .\premake5.exe --os=android vs2022 from the native folder
open RiveSharpSample.sln (it needs the Mobile development using c++ workload in Visual Studio)
disable all TargetFrameworks except net8.0-android for these projects to deal with the point that the rive project now won't build a Windows dll anymore:

RiveSharp.Views.MAUI
Viewer
StateMachineInputs

When trying to build the rive project in this solution, I now get these errors:
Build started at 00:55...
1>------ Build started: Project: rive, Configuration: Debug x64 ------
1>ANDROID_HOME=C:\Program Files (x86)\Android\android-sdk
1>ANDROID_SDK_ROOT=C:\Program Files (x86)\Android\android-sdk
1>ANT_HOME=
1>JAVA_HOME=C:\Program Files\Android\jdk\jdk-8.0.302.8-hotspot\jdk8u302-b08
1>NDK_ROOT=C:\\Microsoft\AndroidNDK\android-ndk-r23c
1>ld: error: obj/x64/Debug\animation_state.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\animation_state.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\animation_state_instance.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\animation_state_instance.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_animation.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_animation.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_animation_1d.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_animation_1d.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_animation_direct.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_animation_direct.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_state.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_state.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_state_1d.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_state_1d.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_state_1d_instance.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_state_1d_instance.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_state_direct.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_state_direct.o: unable to find library from dependent library specifier: oldnames
1>ld: error: obj/x64/Debug\blend_state_direct_instance.o: unable to find library from dependent library specifier: msvcrtd
1>ld: error: obj/x64/Debug\blend_state_direct_instance.o: unable to find library from dependent library specifier: oldnames
1>ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
1>clang: error: linker command failed with exit code 1 (use -v to see invocation)
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Microsoft\VC\v170\Application Type\Android\3.0\Android.Common.targets(125,5): error MSB6006: "clang.exe" exited with code 1.
1>Done building project "rive.vcxproj" -- FAILED.

For iOS and Android I suggest creating a binding project for the runtimes of each platform
https://learn.microsoft.com/en-us/xamarin/ios/platform/binding-swift/walkthrough
https://learn.microsoft.com/en-us/xamarin/android/platform/binding-java-library/binding-an-aar
Here is a very basic starting point
https://github.com/Matmork/Rive-Maui
Note: Only iOS is showing the animation. Android is pretty close, some problems adding/displaying view. Maybe you can figure it out.
https://github.com/jsuarezruiz/rive-maui/assets/11912795/2bca270a-4606-427e-99db-6e9c064a7af1

@Matmork cool that you're experimenting with this!
I saw you only included the Rive AAR for android and I believe that had dependencies on other libraries like Volley (not sure why it would need to call REST APIs though).
Did you get any missing dependencies errors or were those other errors?

You are right, there were some missing dependencies. Added them to Rive.Android. Guess it needs Volley for fetching .riv files from url.
It's building and running, but I can't confirm if it's working or not. As mentioned I am having some problems adding a view/updating the content inside Maui's ContentViewHandler. I even tried just adding a red box, but nothing is showing.. I don't have the most experience with Android so I am pretty sure I am missing something. Or another approach is needed. See RiveViewHandler.cs

You are right, there were some missing dependencies. Added them to Rive.Android.

I haven't tried making a binding project before, but after your yesterday's comment I read the tutorial about it which said this:
"A binding project can only include one .AAR file. If the .AAR depends on other .AAR, then those dependencies should be contained in their own binding project and then referenced."
So the dependencies probably need to be added to their own binding projects and referenced that way.
I'd like to try your project but likely won't have much time behind my computer - will let you know when I tried.

Changed to a ViewRenderer instead of ContentViewHandler. Can confirm its working
https://github.com/jsuarezruiz/rive-maui/assets/11912795/2923fc07-b963-4e0d-a2b2-099e8f2ac43b

@Matmork wow, well done!
If you want to discuss further - let's create a discussion or issue at https://github.com/Matmork/Rive-Maui - to keep this issue related to the code in https://github.com/jsuarezruiz/rive-maui?

Sounds good. Would like to create a PR to add the bindings here but I am unsure how to structure the solution.
There is still work to be done like exposing apis for events, state machine, dartboard etc. But it's a start!

Would like to create a PR to add the bindings here

Currently the RivePlayer class in this repo directly inherits from SKCanvasView instead of just defining an API with bindable properties and methods, and putting the logic in handlers (as described in https://learn.microsoft.com/en-us/dotnet/maui/user-interface/handlers/create?view=net-maui-8.0).
If you want to have these two codebases merged, then there needs to be

a common class like RivePlayer or your RiveView as an entry point, that does not mandate a certain implementation (currently it mandates SKCanvasView)
probably some platform-independent classes for the State machine input
the platform-specific code for the various implementations

From a technical point I'm wondering what approach would have a better performance and smaller filesize - directly embedding the compiled C library, or binding the Android / iOS libraries with their own references?
However, I think the Flutter library also builds upon the Android / iOS libraries instead of building its own from the C-code.
I tried compiling the C library, and as an outsider not used to the C ecosystem and that premake5 build system I found it a huge barrier :-/

Seeing the two approaches are so different I agree it's best to keep them separate. Performance and file size is probably better by embedding. Flutter is built upon skia/impeller so maybe they are hooking into that but I see the rive-react-native  is also just wrapping the native runtimes

Performance and file size is probably better by embedding
Which one do you mean with "embedding"? using an AAR/iOS library? Or compiling the C-code yourself and creating bindings for that?


YT comment harvesting loop detection issue?

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I intentionally remove or skip any mandatory* field

Checklist

[X] I'm reporting that a supported site is broken
[X] I've verified that I'm running yt-dlp version 2023.03.04 (update instructions) or later (specify commit)
[X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
[X] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[X] I've searched known issues and the bugtracker for similar issues including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue
[X] I've read about sharing account credentials and I'm willing to share it if required

Region
US
Provide a description that is worded well enough to be understood
I believe there is a bug in the YT comment harvesting.  I understand @coletdjnz  has stated before it is a server issue ( #6478 #5490 #1787 #6290 ).   I think there may be more to it.  I have tried this one several times in the last week and able to consistently get the yt-dlp loop detection to fire around # 647.  While https://github.com/egbertbouman/youtube-comment-downloader/blob/master/youtube_comment_downloader/downloader.py uses a similar strategy it is able to get all 1087 comments.  I verified the comments it fetches in addition are not duplicates having unique id's and text.
Provide verbose output that clearly demonstrates the problem

[X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[ ] If using API, add 'verbose': True to YoutubeDL params instead
[X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
[debug] Command-line config: ['--write-comments', '--no-check-certificate', '--simulate', '-vU', '47PyY4K47KU']
[debug] Encodings: locale cp65001, fs utf-8, pref cp65001, out utf-8 (No ANSI), error utf-8 (No ANSI), screen utf-8 (No ANSI)
[debug] yt-dlp version<EMAIL_ADDRESS>[392389b7d] (win_exe)
[debug] Python 3.10.10 (CPython AMD64 64bit) - Windows-10 (OpenSSL 1.1.1k  25 Mar 2021)
[debug] Optional libraries: Cryptodome-3.17, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1786 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Available version<EMAIL_ADDRESS>Current version<EMAIL_ADDRESS>Current Build Hash: 5590c57bd0433ed239a2deaaf92e2ad6f37fe50f53664c821575cafe106a9421
yt-dlp is up to date<EMAIL_ADDRESS>[youtube] Extracting URL: 47PyY4K47KU
[youtube] 47PyY4K47KU: Downloading webpage
[youtube] 47PyY4K47KU: Downloading android player API JSON
[debug] Loading youtube-nsig.fa7eb95c from cache
[debug] [youtube] Decrypted nsig 0YID0CxGXyfYEP2JgD => G5ahkgA5tcsmmA
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[youtube] Downloading comment section API JSON
[youtube] Downloading ~1087 comments
[youtube] Sorting comments by newest first
[youtube] Downloading comment API JSON page 1 (0/1087)
[youtube]     Downloading comment API JSON reply thread 1 (1/1087)
[youtube]     Downloading comment API JSON reply thread 2 (9/1087)
[youtube]     Downloading comment API JSON reply thread 3 (16/1087)
[youtube]     Downloading comment API JSON reply thread 4 (18/1087)
[youtube]     Downloading comment API JSON reply thread 5 (21/1087)
[youtube]     Downloading comment API JSON reply thread 6 (25/1087)
[youtube] Downloading comment API JSON page 2 (27/1087)
[youtube]     Downloading comment API JSON reply thread 1 (34/1087)
[youtube]     Downloading comment API JSON reply thread 2 (37/1087)
[youtube]     Downloading comment API JSON reply thread 3 (39/1087)
[youtube]     Downloading comment API JSON reply thread 4 (43/1087)
[youtube]     Downloading comment API JSON reply thread 5 (45/1087)
[youtube]     Downloading comment API JSON reply thread 6 (47/1087)
[youtube]     Downloading comment API JSON reply thread 7 (50/1087)
[youtube]     Downloading comment API JSON reply thread 8 (52/1087)
[youtube] Downloading comment API JSON page 3 (55/1087)
[youtube]     Downloading comment API JSON reply thread 1 (57/1087)
[youtube]     Downloading comment API JSON reply thread 2 (62/1087)
[youtube]     Downloading comment API JSON reply thread 3 (66/1087)
[youtube]     Downloading comment API JSON reply thread 4 (69/1087)
[youtube]     Downloading comment API JSON reply thread 5 (73/1087)
[youtube]     Downloading comment API JSON reply thread 6 (76/1087)
[youtube]     Downloading comment API JSON reply thread 7 (78/1087)
[youtube]     Downloading comment API JSON reply thread 8 (82/1087)
[youtube]     Downloading comment API JSON reply thread 9 (84/1087)
[youtube]     Downloading comment API JSON reply thread 10 (86/1087)
[youtube]     Downloading comment API JSON reply thread 11 (89/1087)
[youtube] Downloading comment API JSON page 4 (90/1087)
[youtube]     Downloading comment API JSON reply thread 1 (91/1087)
[youtube]     Downloading comment API JSON reply thread 2 (93/1087)
[youtube]     Downloading comment API JSON reply thread 3 (95/1087)
[youtube]     Downloading comment API JSON reply thread 4 (97/1087)
[youtube]     Downloading comment API JSON reply thread 5 (100/1087)
[youtube]     Downloading comment API JSON reply thread 6 (102/1087)
[youtube]     Downloading comment API JSON reply thread 7 (105/1087)
[youtube]     Downloading comment API JSON reply thread 8 (107/1087)
[youtube]     Downloading comment API JSON reply thread 9 (111/1087)
[youtube]     Downloading comment API JSON reply thread 10 (115/1087)
[youtube]     Downloading comment API JSON reply thread 11 (119/1087)
[youtube]     Downloading comment API JSON reply thread 12 (121/1087)
[youtube] Downloading comment API JSON page 5 (123/1087)
[youtube]     Downloading comment API JSON reply thread 1 (125/1087)
[youtube]     Downloading comment API JSON reply thread 2 (127/1087)
[youtube]     Downloading comment API JSON reply thread 3 (129/1087)
[youtube]     Downloading comment API JSON reply thread 4 (134/1087)
[youtube]     Downloading comment API JSON reply thread 5 (138/1087)
[youtube]     Downloading comment API JSON reply thread 6 (147/1087)
[youtube]     Downloading comment API JSON reply thread 7 (150/1087)
[youtube] Downloading comment API JSON page 6 (151/1087)
[youtube]     Downloading comment API JSON reply thread 1 (153/1087)
[youtube]     Downloading comment API JSON reply thread 2 (157/1087)
[youtube]     Downloading comment API JSON reply thread 3 (159/1087)
[youtube]     Downloading comment API JSON reply thread 4 (161/1087)
[youtube]     Downloading comment API JSON reply thread 5 (164/1087)
[youtube]     Downloading comment API JSON reply thread 6 (167/1087)
[youtube]     Downloading comment API JSON reply thread 7 (169/1087)
[youtube]     Downloading comment API JSON reply thread 8 (173/1087)
[youtube]     Downloading comment API JSON reply thread 9 (176/1087)
[youtube]     Downloading comment API JSON reply thread 10 (178/1087)
[youtube]     Downloading comment API JSON reply thread 11 (180/1087)
[youtube]     Downloading comment API JSON reply thread 12 (183/1087)
[youtube]     Downloading comment API JSON reply thread 13 (185/1087)
[youtube] Downloading comment API JSON page 7 (186/1087)
[youtube]     Downloading comment API JSON reply thread 1 (187/1087)
[youtube]     Downloading comment API JSON reply thread 2 (189/1087)
[youtube]     Downloading comment API JSON reply thread 3 (196/1087)
[youtube]     Downloading comment API JSON reply thread 4 (198/1087)
[youtube]     Downloading comment API JSON reply thread 5 (200/1087)
[youtube]     Downloading comment API JSON reply thread 6 (203/1087)
[youtube]     Downloading comment API JSON reply thread 7 (207/1087)
[youtube]     Downloading comment API JSON reply thread 8 (210/1087)
[youtube]     Downloading comment API JSON reply thread 9 (213/1087)
[youtube] Downloading comment API JSON page 8 (215/1087)
[youtube]     Downloading comment API JSON reply thread 1 (218/1087)
[youtube]     Downloading comment API JSON reply thread 2 (223/1087)
[youtube]     Downloading comment API JSON reply thread 3 (225/1087)
[youtube]     Downloading comment API JSON reply thread 4 (229/1087)
[youtube]     Downloading comment API JSON reply thread 5 (232/1087)
[youtube]     Downloading comment API JSON reply thread 6 (234/1087)
[youtube]     Downloading comment API JSON reply thread 7 (237/1087)
[youtube]     Downloading comment API JSON reply thread 8 (239/1087)
[youtube]     Downloading comment API JSON reply thread 9 (241/1087)
[youtube]     Downloading comment API JSON reply thread 10 (243/1087)
[youtube]     Downloading comment API JSON reply thread 11 (245/1087)
[youtube]     Downloading comment API JSON reply thread 12 (247/1087)
[youtube]     Downloading comment API JSON reply thread 13 (250/1087)
[youtube] Downloading comment API JSON page 9 (252/1087)
[youtube]     Downloading comment API JSON reply thread 1 (253/1087)
[youtube]     Downloading comment API JSON reply thread 2 (258/1087)
[youtube]     Downloading comment API JSON reply thread 3 (260/1087)
[youtube]     Downloading comment API JSON reply thread 4 (264/1087)
[youtube]     Downloading comment API JSON reply thread 5 (272/1087)
[youtube]     Downloading comment API JSON reply thread 6 (274/1087)
[youtube]     Downloading comment API JSON reply thread 7 (277/1087)
[youtube] Downloading comment API JSON page 10 (284/1087)
[youtube]     Downloading comment API JSON reply thread 1 (285/1087)
[youtube]     Downloading comment API JSON reply thread 2 (287/1087)
[youtube]     Downloading comment API JSON reply thread 3 (291/1087)
[youtube]     Downloading comment API JSON reply thread 4 (293/1087)
[youtube]     Downloading comment API JSON reply thread 5 (298/1087)
[youtube]     Downloading comment API JSON reply thread 6 (301/1087)
[youtube]     Downloading comment API JSON reply thread 7 (304/1087)
[youtube]     Downloading comment API JSON reply thread 8 (315/1087)
[youtube]     Downloading comment API JSON reply thread 9 (318/1087)
[youtube]     Downloading comment API JSON reply thread 10 (322/1087)
[youtube]     Downloading comment API JSON reply thread 11 (324/1087)
[youtube] Downloading comment API JSON page 11 (328/1087)
[youtube]     Downloading comment API JSON reply thread 1 (329/1087)
[youtube]     Downloading comment API JSON reply thread 2 (332/1087)
[youtube]     Downloading comment API JSON reply thread 3 (337/1087)
[youtube]     Downloading comment API JSON reply thread 4 (342/1087)
[youtube]     Downloading comment API JSON reply thread 5 (345/1087)
[youtube]     Downloading comment API JSON reply thread 6 (351/1087)
[youtube]     Downloading comment API JSON reply thread 7 (357/1087)
[youtube]     Downloading comment API JSON reply thread 8 (360/1087)
[youtube]     Downloading comment API JSON reply thread 9 (362/1087)
[youtube]     Downloading comment API JSON reply thread 10 (365/1087)
[youtube]     Downloading comment API JSON reply thread 11 (370/1087)
[youtube]     Downloading comment API JSON reply thread 12 (373/1087)
[youtube]     Downloading comment API JSON reply thread 13 (379/1087)
[youtube] Downloading comment API JSON page 12 (380/1087)
[youtube]     Downloading comment API JSON reply thread 1 (383/1087)
[youtube]     Downloading comment API JSON reply thread 2 (385/1087)
[youtube]     Downloading comment API JSON reply thread 3 (392/1087)
[youtube]     Downloading comment API JSON reply thread 4 (397/1087)
[youtube]     Downloading comment API JSON reply thread 5 (405/1087)
[youtube]     Downloading comment API JSON reply thread 6 (407/1087)
[youtube]     Downloading comment API JSON reply thread 7 (409/1087)
[youtube]     Downloading comment API JSON reply thread 8 (411/1087)
[youtube]     Downloading comment API JSON reply thread 9 (413/1087)
[youtube]     Downloading comment API JSON reply thread 10 (415/1087)
[youtube]     Downloading comment API JSON reply thread 11 (417/1087)
[youtube] Downloading comment API JSON page 13 (418/1087)
[youtube]     Downloading comment API JSON reply thread 1 (420/1087)
[youtube]     Downloading comment API JSON reply thread 2 (423/1087)
[youtube]     Downloading comment API JSON reply thread 3 (425/1087)
[youtube]     Downloading comment API JSON reply thread 4 (428/1087)
[youtube]     Downloading comment API JSON reply thread 5 (430/1087)
[youtube]     Downloading comment API JSON reply thread 6 (433/1087)
[youtube]     Downloading comment API JSON reply thread 7 (436/1087)
[youtube]     Downloading comment API JSON reply thread 8 (439/1087)
[youtube]     Downloading comment API JSON reply thread 9 (442/1087)
[youtube]     Downloading comment API JSON reply thread 10 (448/1087)
[youtube]     Downloading comment API JSON reply thread 11 (450/1087)
[youtube]     Downloading comment API JSON reply thread 12 (453/1087)
[youtube] Downloading comment API JSON page 14 (456/1087)
[youtube]     Downloading comment API JSON reply thread 1 (458/1087)
[youtube]     Downloading comment API JSON reply thread 2 (460/1087)
[youtube]     Downloading comment API JSON reply thread 3 (462/1087)
[youtube]     Downloading comment API JSON reply thread 4 (467/1087)
[youtube]     Downloading comment API JSON reply thread 5 (469/1087)
[youtube]     Downloading comment API JSON reply thread 6 (471/1087)
[youtube]     Downloading comment API JSON reply thread 7 (473/1087)
[youtube]     Downloading comment API JSON reply thread 8 (476/1087)
[youtube]     Downloading comment API JSON reply thread 9 (479/1087)
[youtube]     Downloading comment API JSON reply thread 10 (483/1087)
[youtube]     Downloading comment API JSON reply thread 11 (486/1087)
[youtube]     Downloading comment API JSON reply thread 12 (488/1087)
[youtube]     Downloading comment API JSON reply thread 13 (490/1087)
[youtube]     Downloading comment API JSON reply thread 14 (492/1087)
[youtube] Downloading comment API JSON page 15 (494/1087)
[youtube]     Downloading comment API JSON reply thread 1 (496/1087)
[youtube]     Downloading comment API JSON reply thread 2 (502/1087)
[youtube]     Downloading comment API JSON reply thread 3 (505/1087)
[youtube]     Downloading comment API JSON reply thread 4 (507/1087)
[youtube]     Downloading comment API JSON reply thread 5 (513/1087)
[youtube]     Downloading comment API JSON reply thread 6 (518/1087)
[youtube]     Downloading comment API JSON reply thread 7 (520/1087)
[youtube]     Downloading comment API JSON reply thread 8 (522/1087)
[youtube]     Downloading comment API JSON reply thread 9 (524/1087)
[youtube]     Downloading comment API JSON reply thread 10 (528/1087)
[youtube]     Downloading comment API JSON reply thread 11 (530/1087)
[youtube] Downloading comment API JSON page 16 (532/1087)
[youtube]     Downloading comment API JSON reply thread 1 (533/1087)
[youtube]     Downloading comment API JSON reply thread 2 (535/1087)
[youtube]     Downloading comment API JSON reply thread 3 (543/1087)
[youtube]     Downloading comment API JSON reply thread 4 (548/1087)
[youtube]     Downloading comment API JSON reply thread 5 (550/1087)
[youtube]     Downloading comment API JSON reply thread 6 (555/1087)
[youtube] Downloading comment API JSON page 17 (558/1087)
[youtube]     Downloading comment API JSON reply thread 1 (562/1087)
[youtube]     Downloading comment API JSON reply thread 2 (564/1087)
[youtube]     Downloading comment API JSON reply thread 3 (568/1087)
[youtube]     Downloading comment API JSON reply thread 4 (571/1087)
[youtube]     Downloading comment API JSON reply thread 5 (576/1087)
[youtube]     Downloading comment API JSON reply thread 6 (579/1087)
[youtube]     Downloading comment API JSON reply thread 7 (582/1087)
[youtube]     Downloading comment API JSON reply thread 8 (587/1087)
[youtube]     Downloading comment API JSON reply thread 9 (589/1087)
[youtube] Downloading comment API JSON page 18 (592/1087)
[youtube]     Downloading comment API JSON reply thread 1 (593/1087)
[youtube]     Downloading comment API JSON reply thread 2 (595/1087)
[youtube]     Downloading comment API JSON reply thread 3 (600/1087)
[youtube]     Downloading comment API JSON reply thread 4 (603/1087)
[youtube]     Downloading comment API JSON reply thread 5 (606/1087)
[youtube]     Downloading comment API JSON reply thread 6 (614/1087)
[youtube]     Downloading comment API JSON reply thread 7 (616/1087)
[youtube]     Downloading comment API JSON reply thread 8 (620/1087)
[youtube]     Downloading comment API JSON reply thread 9 (622/1087)
[youtube]     Downloading comment API JSON reply thread 10 (624/1087)
[youtube] Downloading comment API JSON page 19 (628/1087)
[youtube]     Downloading comment API JSON reply thread 1 (629/1087)
[youtube]     Downloading comment API JSON reply thread 2 (632/1087)
[youtube]     Downloading comment API JSON reply thread 3 (634/1087)
[youtube]     Downloading comment API JSON reply thread 4 (638/1087)
[youtube]     Downloading comment API JSON reply thread 5 (641/1087)
[youtube]     Downloading comment API JSON reply thread 6 (646/1087)
WARNING: [youtube] Detected YouTube comments looping. Stopping comment extraction as we probably cannot get any more.
[youtube] Extracted 647 comments
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 47PyY4K47KU: Downloading 1 format(s): 315+251

Think you may be onto something.
From a quick investigation it seems that in this case the pinned comment is being shown twice: once as the first comment due to it being pinned, and a second time for when it shows in chronological order in the newest comment feed.
We should probably take pinned comments into account.


How to get demo app?

Hi, sorry for asking this simple question, but I'd love to test this project. Where can I get the demo app? If it build from source, can you give me steps to build it?
Thanks!

(Pasted to all my answers today: it's been a long time since my last issues review. I am sorry about the delay and I know you likely have moved on by now. Still, I'm going to answer where I can)
Hi, the demo app is in the demo folder. You can just open the project in Android Studio and after sync it will be ready to run.


Fixed an issue where registering a UIProgessView to a task that was a…

Noticed that when having a UIProgressView calling setProgressWithUploadProgressOfTask:animated: or setProgressWithDownloadProgressOfTask:animated of UIProgressView+AFNetworking with the task parameter object having already completed (status == NSURLSessionTaskStateCompleted), the app would crash when the task object is deallocated with the following error:

CRASH: Fatal exception: An instance ***** of class ******* was deallocated while key value observers were still registered with it.

[Current coverage][cc-pull] is 77.92%

No coverage report found for master at 2a53b2c.

Powered by Codecov. Last updated by [2a53b2c...7dc973b][cc-compare]
[cc-base-branch]: https://codecov.io/gh/AFNetworking/AFNetworking/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/AFNetworking/AFNetworking/compare/2a53b2c3f49275352677dfd46a35b0287ae01458...7dc973b89cae141686282f4c2b47f249ff8ad0d4
[cc-pull]: https://codecov.io/gh/AFNetworking/AFNetworking/pull/3604?src=pr

Thanks!


Add public access modifiers where needed for use in frameworks

Public access specifier is necessary for a framework, otherwise the class and its methods are not accessible.

+1

thanks for the PR! I'm wrapping up an Xcode 7.3 update and will push a new pod version


bug: windowSoftInputMode to adjustPane - Maybe a bug?

Type: bug
Platform: android 4.1 webview
Hello. I am implementing an app using the ionic cli for building the app.
I try yesterday to change the ‘windowSoftInputMode’ for Android to ‘adjustPane’ without success.
I put  to my config.xml and upload the app. I try to do this with both preference options for fullscreen (true/false).
What is here there right option? From the documentation it must be set to true. In many stack-over-flows answers it should work with false.
I have also try ‘ionic add platform android’ to see what for a AndroidManifest.xml file is generated. The generated file is not affected by my preference:

Is there a bug maybe? Or what I did wrong? I see if I change for example the orientation via preference there is also a change in the generated Manifest file.
I use the latest version of ionic and cordova.

Greetings @GeorgePapado!
My sensors indicate that you need to update your issue through our custom issue form. We are now requiring all issues to be submitted this way, to ensure that we have all of the information necessary to fix them as quickly as possible.
Click Here To Update Your Issue
I will have no choice but to close this issue if it is not resubmitted through the form. Please fill out the rest of the form, so that I may use my friendly robot powers to assist you.
Thank you!

Preference in config.xml: ""
Generated Manifest: ""

@tlancina, can you take a look?

I don't believe there is a "android-windowSoftInputMode" preference for Cordova: https://cordova.apache.org/docs/en/5.0.0/guide_platforms_android_config.md.html#Android Configuration (there is one for PhoneGap, which is probably where the confusion is). If you want to use adjustPan, you'll have to edit the generated AndroidManifest.xml in your Android project folder, making sure to set your fullscreen preference to false.  You might also have to call ionic.keyboard.disable() to prevent the Ionic keyboard code from scrolling things into view for you.
Closing this as it's not really an issue with the framework.  If you're still having troubles, the Ionic forum is a great place to get help.


Warn about incompatibility of policy and materialized view

@shsagir
Can you review the proposed changes?
When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

#sign-off


20 timer callback slots may not be enough for C6

I'm getting this error:
[WARN] - Failed to set timer function 40824b98
The set of features I have enabled on esp-wifi are as follows, so I don't have BLE and coex enabled (meaning the library should be limited to 20 timers)
features = [
    "phy-enable-usb",
    "ps-max-modem",
    "wifi",
    "async",
    "embassy-net",
    "tcp",
    "dns",
    "ipv4",
    "dhcpv4"
]

These queues are now heap allocated.


Will you release windows version Remote-Control demo?

Do you have the plan to give a windows version Remote-Control demo?
Thanks

Unfortunately no. However if you have some thoughts while being blocked by not knowing how to use our sdk, i can try helping.


Scheduler Page - Some UI issues

Describe the bug

browsers tab showing Schedulers and view showing Scheduler make both same
when there is not any scheduler it shows message No Template Found.
when we filter data if there is not data found then pagination is not reset

https://www.berrycast.com/conversations/b76b11f6-6f30-5212-86c7-18dad724aac8

https://www.berrycast.com/conversations/647cbfdc-1639-5342-89db-e57c4cc4def6


Require click as a wheel dependency

Fixes https://github.com/rapidsai/cucim/issues/703
Trying to import cucim results in import click, which fails if click is not installed. This was encountered recently by a user that tested out the cuCIM wheel packages.
The Conda packages already solve this by adding click to requirements/run. So this makes an equivalent change to the wheel packages.
Should fix user install issues.

/merge

Ran into a network error in one job. Mentioned in this upstream issue ( https://github.com/conda/infrastructure/issues/906#issuecomment-2033231631 ). Have also restarted it

Thanks all! 🙏


JAMES-3925 Recompute current values of JMAP upload

Please document your WebAdmin API change:

https://github.com/apache/james-project/blob/master/src/site/markdown/server/manage-webadmin.md
https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc

06:24:28,731 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project apache-james-mailbox-tools-quota-recompute: Compilation failure: Compilation failure:
06:24:28,731 [ERROR] /home/jenkins/jenkins-agent/workspace/james_ApacheJames_PR-1707/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasService.java:[35,40] package org.apache.james.jmap.api.upload does not exist
06:24:28,731 [ERROR] /home/jenkins/jenkins-agent/workspace/james_ApacheJames_PR-1707/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasService.java:[168,19] cannot find symbol
06:24:28,731 [ERROR]   symbol:   class CurrentUploadUsageRecomputator
06:24:28,731 [ERROR]   location: class org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService
06:24:28,731 [ERROR] /home/jenkins/jenkins-agent/workspace/james_ApacheJames_PR-1707/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasService.java:[177,42] cannot find symbol
06:24:28,731 [ERROR]   symbol:   class CurrentUploadUsageRecomputator
06:24:28,731 [ERROR]   location: class org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService
06:24:28,731 [ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project apache-james-mailbox-tools-quota-recompute: Compilation failure

03:54:51,885 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.3.0:check (check-style) on project apache-james-mailbox-tools-quota-recompute: You have 1 Checkstyle violation. -> [Help 1]

document updated

ERROR: Miss guice binding
    ```
Error
Unable to create injector, see the following errors:
1) [Guice/MissingImplementation]: No implementation for UploadRepository was bound.
Requested by:
1  : JMAPCurrentUploadUsageCalculator.(JMAPCurrentUploadUsageCalculator.java:37)
      \_ for 1st parameter
     at RecomputeCurrentQuotasService.(RecomputeCurrentQuotasService.java:177)
      \_ for 7th parameter
     at WebadminMailboxTaskSerializationModule.recomputeCurrentQuotasTask(WebadminMailboxTaskSerializationModule.java:76)
      \_ for 1st parameter
     at WebadminMailboxTaskSerializationModule.recomputeCurrentQuotasTask(WebadminMailboxTaskSerializationModule.java:76)
      \_ installed by: Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> MailboxRoutesModule -> WebadminMailboxTaskSerializationModule
2  : JMAPCurrentUploadUsageCalculator.(JMAPCurrentUploadUsageCalculator.java:37)
      \_ for 1st parameter
     at RecomputeCurrentQuotasService.(RecomputeCurrentQuotasService.java:177)
      \_ for 7th parameter
     at UserQuotaRoutes$RecomputeCurrentQuotasRequestToTask.(UserQuotaRoutes.java:85)
      \_ for 1st parameter
     at InconsistencyQuotasSolvingRoutesModule.configure(InconsistencyQuotasSolvingRoutesModule.java:36)
      \_ installed by: Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> InconsistencyQuotasSolvingRoutesModule
Learn more:
  https://github.com/google/guice/wiki/MISSING_IMPLEMENTATION
2) [Guice/MissingImplementation]: No implementation for UploadUsageRepository was bound.
Requested by:
1  : JMAPCurrentUploadUsageCalculator.(JMAPCurrentUploadUsageCalculator.java:37)
      \_ for 2nd parameter
     at RecomputeCurrentQuotasService.(RecomputeCurrentQuotasService.java:177)
      \_ for 7th parameter
     at WebadminMailboxTaskSerializationModule.recomputeCurrentQuotasTask(WebadminMailboxTaskSerializationModule.java:76)
      \_ for 1st parameter
     at WebadminMailboxTaskSerializationModule.recomputeCurrentQuotasTask(WebadminMailboxTaskSerializationModule.java:76)
      \_ installed by: Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> MailboxRoutesModule -> WebadminMailboxTaskSerializationModule
2  : JMAPCurrentUploadUsageCalculator.(JMAPCurrentUploadUsageCalculator.java:37)
      \_ for 2nd parameter
     at RecomputeCurrentQuotasService.(RecomputeCurrentQuotasService.java:177)
      \_ for 7th parameter
     at UserQuotaRoutes$RecomputeCurrentQuotasRequestToTask.(UserQuotaRoutes.java:85)
      \_ for 1st parameter
     at InconsistencyQuotasSolvingRoutesModule.configure(InconsistencyQuotasSolvingRoutesModule.java:36)
      \_ installed by: Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> Modules$CombinedModule -> InconsistencyQuotasSolvingRoutesModule
Learn more:
  https://github.com/google/guice/wiki/MISSING_IMPLEMENTATION
2 errors
  ```

weird, I tried to run startShouldSucceedWhenRequiredCapabilities(GuiceJamesServer) – org.apache.james.JamesCapabilitiesServerTest on my local, and it passed (command line), no guice error

weird, I tried to run startShouldSucceedWhenRequiredCapabilities(GuiceJamesServer) – org.apache.james.JamesCapabilitiesServerTest on my local, and it passed (command line), no guice error

It seems that this test is in jpa-app. Do we run test for jpa version?

It seems that this test is in jpa-app. Do we run test for jpa version?

ah, My miss, I ran JamesCapabilitiesServerTest in cassandra module

It seems that RecomputeCurrentQuotasService also run in jpa version. I use UploadRepository to recompute jmap quota but there is no implementation of UploadRepository for jpa. What should I do? :((

It seems that RecomputeCurrentQuotasService also run in jpa version. I use UploadRepository to recompute jmap quota but there is no implementation of UploadRepository for jpa. What should I do? :((

What do you think about creating a UnSupportUploadRepository and guice it for JPA?
Ex:
    static class UnSupportUploadRepository implements UploadRepository {

        @Override
        public Publisher<UploadMetaData> upload(InputStream data, ContentType contentType, Username user) {
            return Mono.error(new UnsupportedOperationException());
        }
        ///...
    }

It seems that RecomputeCurrentQuotasService also run in jpa version. I use UploadRepository to recompute jmap quota but there is no implementation of UploadRepository for jpa. What should I do? :((

What do you think about creating a UnSupportUploadRepository and guice it for JPA?
Ex:
    static class UnSupportUploadRepository implements UploadRepository {

        @Override
        public Publisher<UploadMetaData> upload(InputStream data, ContentType contentType, Username user) {
            return Mono.error(new UnsupportedOperationException());
        }
        ///...
    }

Ok I will follow this way :))

Ok I think I get it... There is no JMAP implementation in JPA guice, so yes there will be no implementation for JPA of upload repository. What @vttranlina proposes might be enough, a fake implem that just returns UnsupportedOperationException

Last commit https://github.com/apache/james-project/pull/1707/commits/0a2058bb1b41f8ccfe72d0890351da73139670e2 to fix JamesCapabilitiesServerTest

Is this test failure related? https://ci-builds.apache.org/job/james/job/ApacheJames/job/PR-1707/17/testReport/junit/org.apache.james.jmap.memory.upload/InMemoryUploadServiceTest/givenQuotaExceededThenUploadShouldRepairInconsistentCurrentUsage/

No I don't think so. It still run successfully in my local

Big update with https://github.com/apache/james-project/pull/1707/commits/5facf395802ddb04e5fcd0bc8f6849798f99940f

can you squash?
// IMO, the force push after rebase but no squash makes it a bit hard to follow, then the fixup commits do not really make sense


Added tests for signature acquisition

This commit adds tests for the signature_acquisition module. They check the behavior of apply_signature, register_pending and signature_weight mainly.

What issue is this for?

What issue is this for?

https://github.com/casper-network/casper-node/issues/3776


Update version of macroquad in Cargo.toml

It's a bit out of date =)
Could you set it to use "any version above ..." rather than use an explicit version? That way it would work with all current and future versions of Macroquad!

Done, 0.3.0 is released with macroquad 0.3.0.

any version

As I understand if macroquad releases version 0.3.1, this crate will work by just cargo update? Because 0.3.0 is interpreted as ^0.3.0.

Great! Thanks for the quick response! :)


Issue214 activation without trigger

Add global setting to support bypassing of trigger exists check during rollup summary activation.
Additional capabilities could be added to specify regex or "pattern" to enforce in addition to or instead of the bypass.  Given the possible combinations of naming conventions individual use, a simple bypass flag was added.  By default, triggers are still required to support activation.

Thanks for this, though this validation can be disabled by using Developer mode, that was the original intent for your use case here. Though it seems folks do want to full emulate what the triggerHandler does. So what is missing is in the API a means to do the work triggerHandler does basically (which although public was not really intended to be an API). So something like an override for dlrs.RollupService.rollup, e.g. dlrs.RollupService(Map<ID, SObject> oldRecords, Map <ID, SObject> newRecords). This new API entry method would look for Developer mode DLRS records (like the current API entry method). Make sense?

Take a look at the discussion on this issue for a bit more background, https://github.com/afawcett/declarative-lookup-rollup-summaries/issues/165.

#165 showed me the light and clued me in to what I think you are thinking.  Updated my comments in #208 with a summary.  If my understanding is correct, I think exposing an API to mimick triggerHandler would meet my need and be a much better approach than what I proposed.

I think this can be closed as we've shifted to approach in PR #208


swift-module-digester: always canonicalize super class types.

@swift-ci please smoke test

Do you canonicalize all types, or just superclasses?

We canonicalize all types when checking ABI stability. This patch is to canonicalize super class type names disregarding of checking ABI or source compatibility.

@swift-ci please smoke test

@nkcsgexi Why do you need to canonicalize superclass types but not other types when checking API stability?

Because synthesizing type alias of the same name with an old type is an api-notes' way to maintain source-compatibility for many frameworks.

@nkcsgexi I see, so its specific to imported modules? Maybe you should conditionalize the check on that hten.

yeah, i think it's specific to imported module. Since we'll deploy ABI checker for Swift modules with all types canonicalized, i'm not sure it's useful to introduce another flag.

@swift-ci please smoke test


Support slots in cgx

I should probably use a different name for 'default' content. Vue docs call it 'fallback' content which is more aptly named.


Create RESTful API for communicating map data between client and server

While the web server provides the webpage, the map must be able to communicate to the web server as the user navigates the map and looks at different points on the map. This will be done creating a RESTful API, where the web page will continually request data as necessary.
Acceptance criteria

Consumers can receive data about multiple roads (likely sending a proximity or bounding box coordinates as input) and emissions correlated with them
Respond back with the schema discussed in #16

https://flask-restful.readthedocs.io/en/latest/

Client will send a request to the RESTful endpoint containing two coordinate pairs representing a bounding box of the roads they want information about.
I don't have the details of how the client will do this yet, but probably as query parameters in an HTTP URL request.
Upon success, HTTP code 200 is returned with the following proposed JSON:
[
	{
		"road": "road_name_here"
		"segments": [
			{
				"NOx": 0,   # Don't have units for these emitted particles yet.
				"VOC": 0,
				"PM2.5": 0,
				"PM10": 0,
				"CO2": 0,
				"shape": [
					[long,lat]
					...
				]
			}
			...
		]
	}
	...
]

If for some reason we are unable to perform the request, such as being rate limited by HERE, HTTP code 503 is returned with no further information.
As always, if an error occurs on the server, HTTP 500 is returned.


Truncated/shortened lines in help_format.txt

Longer lines in help_format.txt are truncated/incomplete. See lines 3, 9, 12, and 28.

Fixed in a87463fc090b6acd25919e1c688683f71b4098e9


Compilation Error; pointer/integer comparison.

Trying to compile with make aborts with the two following errors:
src/demangle.cc: In function 'bool google::AtLeastNumCharsRemaining(const char*, int)':
src/demangle.cc:170:16: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
if (str == '\0') {
src/demangle.cc: In function 'bool google::ParseCharClass(google::State*, const char*)':
src/demangle.cc:226:29: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
if (state->mangled_cur == '\0') {

fixed in https://github.com/google/glog/commit/a5ffa884137f7687d0393ccba22557d583654a25#diff-81af9f0eab9a04e1d26013a0af666c73
you seem to be using a very old release. In the future please add the used version of glog for reference


[low gas] Object gets locked if gas is insufficient

Steps to Reproduce Issue
Unfortunately, this can not be reproduced with wallet (I need to prepare a test environment in JS):

Publish a counter with a Capability. Ie only an owner of a Capability can increase a counter.
Try to increment a counter with a low gas setting (in my case 200)
Transaction fails, Capability gets locked. Further actions are impossible.4.

Code:
module me::locked {
    use sui::transfer;
    use sui::id::VersionedID;
    use sui::tx_context::{Self, TxContext};

    struct SharedBeep has key { id: VersionedID, count: u64 }
    struct OwnedBoop has key { id: VersionedID }

    fun init(ctx: &mut TxContext) {
        transfer::share_object(SharedBeep { id: tx_context::new_id(ctx), count: 0 });
        transfer::transfer(OwnedBoop { id: tx_context::new_id(ctx) }, tx_context::sender(ctx))
    }

    entry fun test(beep: &mut SharedBeep, _boop: &OwnedBoop) {
        beep.count = beep.count + 1;
    }
}

Expected Result
Transaction should fail with insufficient gas but the object shouldn't get locked.
Actual Result
{
    "jsonrpc": "2.0",
    "error": {
        "code": -32000,
        "message": "Error acquiring lock for object(s): [InvalidObjectDigest { object_id: 0xb5aeca9b7cbedcfee0db8a37888495cb29c8e8f0, expected_digest: o#2270deed7cec0bba1b5376a4a4ee764546618b7e69b1cdc10ec2e2d40079c42e }]"
    },
    "id": 1
}

If I do the same thing with wallet, I get this message:
Error calling module: Failure {
    error: "InsufficientGas",
}

System Information

OS: MacOS
Compiler: 76eb5aa5dfc265457443e9f1881b77b334e522dd

Need steps to reproduce this. Passing back to damir.

Closing this issue as the behavior has changed a fair bit since then. Will open new issues as needed.


warning  in ./node_modules/vue-panzoom/dist/vue-panzoom.esm.js

Getting the following warnings, in the CLI,  when launching a page using 'vue-panzoom', version 1.1.4:
 WARNING  Compiled with 4 warnings                                                                                10:16:56 p.m.

 warning  in ./node_modules/vue-panzoom/dist/vue-panzoom.esm.js

"export 'createBlock' was not found in 'vue'

 warning  in ./node_modules/vue-panzoom/dist/vue-panzoom.esm.js

"export 'createVNode' was not found in 'vue'

 warning  in ./node_modules/vue-panzoom/dist/vue-panzoom.esm.js

"export 'openBlock' was not found in 'vue'

 warning  in ./node_modules/vue-panzoom/dist/vue-panzoom.esm.js

"export 'renderSlot' was not found in 'vue'

Using with vue 2.6.12

kindly downgrade to v1.1.3 if you're using Vue 2

Thanks. Missed that item in the readme.

It should be added to README

It is actually in the README, but you need to read the end to see that detail.


Reduce build size

Is your feature request related to a problem? Please describe.
The build size will grow quite a lot if #17 is merged due to adding the ramda and monet libraries.
Describe the solution you'd like
Add rollup to the build step (using @rollup/plugin-typescript) to reduce the bundle size through tree-shaking and dead code elimination.
Describe alternatives you've considered
Webpack is another popular bundler though it's treeshaking is reportedly worse.
Snowpack is an another up-and-coming alternative.
Additional context
Tree-shaking may be improved (even without a bundler) by optimising imports when building ES modules.

Hi
I made a PR adding to project Rollup with ts plugin and terser to create a bundle.
Can you assign this issue to me please?

I assigned the issue to you @fernando24164. Thanks for the collaberation. I saw your comments in the PR, I'll respond to them there 👍

This package is not longer being maintained.


Fix the document

In the example for Client you wrote:
wcs = c.calibrate_wcs_file(filename)
while Client module doesn't have that attribute. In stead, it's calibrate_file_wcs.

Indeed! Thanks for the feedback. I have changed the README accordingly.


networkx version problem?

I am trying to run the example given at the causality main github page but I run into the following problem:
Traceback (most recent call last):
File "", line 25, in
graph = ic_algorithm.search(X, variable_types)
File "...../causality/inference/search/init.py", line 26, in search
self._find_skeleton(data, variable_types)
File "......./causality/inference/search/init.py", line 126, in _find_skeleton
z_candidates = list(set(x_neighbors + y_neighbors) - set([x,y]))
TypeError: unsupported operand type(s) for +: 'dict_keyiterator' and 'dict_keyiterator'
The x_neighbor and y_neighbors are variables returned by the networkx.Graph.neighbors function which returns an iterator over all neighbors of node n. At least for version 2.0 as is specified  by the requirements.txt. For earlier versions (e.g. 1.10) this function returns a list of nodes that are adjacent to n. Can it be that the causality package only runs with version 1.10 of networkx and not the 2.0 verson?
thanks for the help,
Jeroen

The most recent commit solves your issue. I don't think it was pushed to pypi yet (@akelleh, do you know?). You could either solve it by installing from source or use an earlier version of networkx.
Saul

Not yet! I'll get on that tonight.

should be resolved! upgrade to causality-0.0.5


Cannot Install via PIP

I'm currently using Python version 3.10.13.
I cannot install this autodistill-grounding-dino and autodistill-grounded-sam using
pip install autodistill-grounding-dino
and
pip install autodistill-grounded-sam
autodistill-grounding-dino

autodistill-grounded-sam

Hello! Were you able to fix this issue?


README.md

Changes

Context

Documentation (please check one with an [x])

[ ] I have updated the documentation, or
[ ] No documentation update is required

How I've tested my work (please select one)
I have verified these changes via:

[ ] Code inspection only, or
[ ] Newly added/modified unit tests, or
[ ] No unit tests but ran on a real repository, or
[ ] Both unit tests + ran on a real repository

Art added - Creation and dissolution of a torus energy field 💙


engine/admin/index - Fix typo in Debian log path

Proposed changes
Just fix a typo

Indeed, thanks @ondrejsika 👍


Per document access control

first draft implementation of https://github.com/apache/couchdb-documentation/pull/424 (which is itself a little out of date, but it paints the big picture).

Currently this PR has no description, and I wonder if you could add some high level documentation of how this works, or maybe link to an architectural document?

sorry for not making this explicit, but if you follow the superseded PRs backwards, you should find more commentary that I didn’t think was necessary to repeat here. The main design is outlined here: https://github.com/apache/couchdb-documentation/pull/424

latest push fixes compiler warnings noted by Jay

I am coming back to couchdb updating an old application that has already implemented the above (per-document access, with linux-like permissions like owner/read/write access, even per-field protection on the doc).  I personally don't like this feature and wouldn't like to see it merged:

This kind of security requirement is almost always specific to the application.  In my case, for example, this solution is not fit for purpose.
Most of the time a front-end application server is better suited to handle security requirements, which might be complex.
I believe CouchDB should stick to being a database.  We should refine the current codebase instead.
If we need to implement this kind of functionality (like in my case), we are better off providing a plugin/hook system where can enter the validate and read lifecycle of the document.  Devs are free to implement what they want and we could provide a working example. (This is what I did).  Providing a _custom_<field> on documents for devs to freely use would be great.
Are we going to filter the views?  Are we going to filter the document counts on views?  What about leaking information on views?  Some views need some info, some others not?  Will I sometimes use per-user view, sometimes the global views?  And what about searching with Lucene?  I feel we should not touch our indices.
Replicating documents into your database where the _access field changes, are we doing that?  Will devs want a "master" where the _access field is allowed to change, and slaves where you won't?  Is the ultimate purpose of this PR to segregate documents within your own DB?  Then why not create per-user DBs?

I would be in favour of document lifecycle plugins/hooks, where we can implement this feature and many others.

@arturog
I think secondary indexes would need to be updated to support this for it to have the desired effect (restricting a user's visibility of a database to a subset). I'm sure we've not done that work for dreyfus/clouseau (and I definitely haven't for nouveau).
I share your concern that this implementation might not meet everyone's needs, but that's not necessarily a blocker. It just needs to meet a significant number of people's needs.
I don't find "I believe CouchDB should stick to being a database." compelling. Other databases have richer permissions and access controls that we currently do, they're not off-topic.
The PR changes a number of internal records which prevents a smooth upgrade of existing CouchDB clusters and is blocked from merging until that is fixed imo, so there's time to think.
We currently have validate_doc_update where you can implement any kind of write control logic, but no equivalent for reads (or view queries besides the deprecated _list option). If Javascript were evaluated more efficiently (c.f, the quickjs embedding idea) we might add that.

We currently have validate_doc_update where you can implement any kind of write control logic, but no equivalent for reads (or view queries besides the deprecated _list option). If Javascript were evaluated more efficiently (c.f, the quickjs embedding idea) we might add that.

We implemented a fork of CouchDB with exactly that (a validate_doc_read), with code written in Erlang.  We also added our own validate_doc_write in Erlang before the JS one kicks in.  If extended, I believe it can provide not only this feature, but much more.  Also, the issue of leaking out data in indices (specially to the lucene index) lead me to limit indexing to only public fields -- so the field-access was also born.  Indices in CouchDB were kept untouched, and though all views had the full set of _ids, on document access (or requesting the full document via views), you would get <unauthorized>.  Our implementation was not meant to present a "subset" of documents, but instead control access to the document.
Perhaps the requirement to present a subset of the database needs to be revisited?  If this requirement were to be dropped, things might become easier.

@arturog thank you for your comments, practical experience with variants of the same idea here are invaluable.

This kind of security requirement is almost always specific to the application. In my case, for example, this solution is not fit for purpose.
Most of the time a front-end application server is better suited to handle security requirements, which might be complex.

I’m 100% on board with you here. That’s why this is designed as an opt-in feature. If you have a system on top of this that works for you, that will just continue to work.
To avoid confusion, let me restate the design goal of this PR: “make the db-per-user pattern obsolete”. It is specifically not “support arbitrary ACLs inside a database”.
With that out of the way, the scope of the potential work for a complete solution here is very big. In accordance with common wisdom: to built a complex system that works, one first has to build a simple system that works. The current PR reflects the simplest system that I could think of to get the minimal functionality working that satisfies the design goal.
To this end, per-user design docs (and all associated indexes of any form, JS, Mango, Search/Nouveau) are not supported. A future version of this PR however can use the new by-access-seq index to build per-user indexes, including reduces that are guaranteed to not leak any data. Global views are already supported but are limited to database admins.

Perhaps the requirement to present a subset of the database needs to be revisited? If this requirement were to be dropped, things might become easier.

Maybe you want a different feature. You are stating the explicit design goal of this PR that should be dropped.


Extract interesting data from CVE and other vulnerabilities body

We should extract interesting data from CVE and other vulnerabilities body. This is based on this research https://rp.os3.nl/2020-2021/p06/report.pdf and https://rp.os3.nl/2020-2021/p06/presentation.pdf by Bart van Dongen and @armijnhemel
See also for related projects https://rp.os3.nl/2020-2021/index.html
For instance in https://nvd.nist.gov/vuln/detail/CVE-2020-0002 we have a description choke full of unstructured data, with clues of file name,  function name and various Android version and Android IDs:

Description

In ih264d_init_decoder of ih264d_api.c, there is a possible out of bounds write due to a use after free. This could lead to remote code execution with no additional execution privileges needed. User interaction is needed for exploitation Product: Android Versions: Android-8.0, Android-8.1, Android-9, and Android-10 Android ID: A-142602711

Here for instance we could extract a cross reference between the Android ID and the actual advisory which is in https://source.android.com/security/bulletin/2020-01-01
See also:

#317
#251
#340 (also list a file name)

See also https://github.com/pinkymm/inconsistency_detection

Paths should be fairly easy to extract using textcode.

First shot at this: https://github.com/armijnhemel/compliance-scripts/tree/cve_extract_paths/cve

To expand on this a bit more, there are certain identifiers I would be very interested in. One of those is searching by chipset. There are CVEs that contain chipset numbers, for example CVE-2021-41788:
MediaTek microchips, as used in NETGEAR devices through 2021-12-13 and other devices, mishandle attempts at Wi-Fi authentication flooding. (Affected Chipsets MT7603E, MT7612, MT7613, MT7615, MT7622, MT7628, MT7629, MT7915; Affected Software Versions <IP_ADDRESS>).

This information is not recorded somewhere else in the CVE (but it is mentioned in some of the references). I know that this isn't specific to a single package or package version, but it is useful information to have nonetheless.
Another one would be SDK/BSP:
CVE-2022-29558
CVE-2021-35393
or various keywords, such as UPnP, or program names (for examples of both see CVE-2021-35393 ).
I could help assemble lists of keywords that are interesting to me.

First shot at this: https://github.com/armijnhemel/compliance-scripts/tree/cve_extract_paths/cve

I updated the scripts here to the V5 JSON format.

Relevant in this context: https://github.com/armijnhemel/devicecode


refactor: toFields serialization in classes

Fixes #4332

Current dependencies on/for this PR:

master

PR #4335   👈

This stack of pull requests is managed by Graphite.

Benchmark results
Metrics with a significant change:

note_successful_decrypting_time_in_ms (8): 231 (-31%)
note_trial_decrypting_time_in_ms (32): 122 (+189%)

Detailed results
All benchmarks are run on txs on the Benchmarking contract on the repository. Each tx consists of a batch call  to create_note and increment_balance, which guarantees that each tx has a private call, a nested private call, a public call, and a nested public call, as well as an emitted private note, an unencrypted log, and public storage read and write.
This benchmark source data is available in JSON format on S3 here.
Values are compared against data from master at commit 83686598 and shown if the difference exceeds 1%.
L2 block published to L1
Each column represents the number of txs on an L2 block published to L1.

Metric
8 txs
32 txs
128 txs

l1_rollup_calldata_size_in_bytes
45,412
179,524
716,068

l1_rollup_calldata_gas
221,704
866,836
3,447,976

l1_rollup_execution_gas
314,191
984,576
3,667,633

l2_block_processing_time_in_ms
1,152 (-1%)
4,314 (-1%)
17,106 (-1%)

note_successful_decrypting_time_in_ms
:warning: 231 (-31%)
889 (-14%)
3,615 (-4%)

note_trial_decrypting_time_in_ms
41.5 (-3%)
:warning: 122 (+189%)
151 (+5%)

l2_block_building_time_in_ms
18,240 (-1%)
72,005
288,696 (-1%)

l2_block_rollup_simulation_time_in_ms
13,111
51,707
207,961

l2_block_public_tx_process_time_in_ms
5,103 (-2%)
20,174 (-1%)
80,490 (-1%)

L2 chain processing
Each column represents the number of blocks on the L2 chain where each block has 16 txs.

Metric
5 blocks
10 blocks

node_history_sync_time_in_ms
13,795 (+1%)
26,462 (-1%)

note_history_successful_decrypting_time_in_ms
2,448 (+5%)
4,640

note_history_trial_decrypting_time_in_ms
93.5 (+15%)
153 (-12%)

node_database_size_in_bytes
17,342,544
33,136,720

pxe_database_size_in_bytes
29,923
59,478

Circuits stats
Stats on running time and I/O sizes collected for every circuit run across all benchmarks.

Circuit
circuit_simulation_time_in_ms
circuit_input_size_in_bytes
circuit_output_size_in_bytes

private-kernel-init
317
44,897
26,193

private-kernel-ordering
193 (-1%)
44,513
14,929

base-rollup
1,411
128,970
881

root-rollup
82.1 (-1%)
4,088
677

private-kernel-inner
423
72,056
26,193

public-kernel-private-input
243
32,615
26,193

public-kernel-non-first-iteration
242
32,657
26,193

merge-rollup
7.62 (-6%)
2,608
881

Tree insertion stats
The duration to insert a fixed batch of leaves into each tree type.

Metric
0 deployed contracts
1 deployed contracts

tx_size_in_bytes
15,575
37,972

Transaction processing duration by data writes.

Metric
0 new commitments
1 new commitments

tx_pxe_processing_time_ms
582 (-1%)
1,365 (-1%)

Metric
1 public data writes

tx_sequencer_processing_time_ms
629


/beakerx/settings 404 (Not Found)

Before the split beakerx_tabledisplay was using /settings endpoint to check auto_link_table_links UI option.
Now we have to decide how this feature should work.

Additionally, there is not mocked call to this endpoint in tests

@ildipo @jaroslawmalekcodete
After analyzing this one I've decided that we don't need /settings endpoint in TableDisplay at all.
We are using two configurable options there

auto_link_table_links
show_publication

Instead of checking those via ajax request, we can provide that automatically when creating TableDisplay object.
I've hardcoded it for python as a proof of concept. Will have to load those settings from a file.
We will have to do this same way in java implementation (@jaroslawmalekcodete )

@ildipo as I've mentioned earlier I've removed /settings API calls and moved providing needed settings to TableDisplay constructor.
I've prepared a _get_settings method in python that for now is not reading settings from a configuration file. I've created an issue for that (#9)

done here


Project management

make git ignore vim's .swp files

On second thought - forget about it.
I put the rule into my afew/.git/info/exclude. No need to bother everybody on the project with the quirks of the editor I'm using.

btw, I'm not quite certain I understand why this pull request would contain 6 commits -.- May that is a diff against /my/ remote master, that hadn't been updated at the time of the request duh -.-


[Migrated] No way to override ZIP_EXCLUDES

Originally from: https://github.com/Miserlou/Zappa/issues/1754 by youcandanch

Context
For some libraries like nltk, additional assets are required in order to run them. In this specific use case, we're using the wordnet resource for nltk, which requires a wordnet.zip file to be located somewhere in the filesystem. Ideally, we'd be able to download this dependency in CI, and include it with our zappa-deployed package, but ZIP_EXCLUDES automatically excludes anything with a .zip extension. This means that on every lambda creation, we'll need to download this file, as opposed to being able to do it once in CI.
Expected Behavior
There should be a way to override ZIP_INCLUDES with either specific file names or extensions.
Actual Behavior
There's no way to include a .zip file in the zappa package at the moment.
Possible Fix
Could go a couple different ways. This line in particular is where the problem is. The easiest way to handle this, I think, is to add a new property in zappa_settings.json, but I'm hung up on naming and implementation.
Steps to Reproduce

Create a zappa project that has a .zip file as a dependency.
Try to do zappa deploy.
.zip file won't be present in the package.

Your Environment

Zappa version used: 0.47.1
Operating System and Python version: Debian Buster
The output of pip freeze:

#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file requirements/development.txt requirements/development.in
#
argcomplete==1.9.3
atomicwrites==1.2.1       # via pytest
attrs==18.2.0             # via pytest
blinker==1.4
boto3==1.9.57
botocore==1.12.57
certifi==2018.11.29
cfn-flip==1.1.0.post1
chardet==3.0.4
click==7.0
coverage==4.5.2           # via pytest-cov
docutils==0.14
durationpy==0.5
flake8==3.6.0
flask==1.0.2
future==0.16.0
hjson==3.0.1
idna==2.7
itsdangerous==1.1.0
jinja2==2.10
jmespath==0.9.3
kappa==0.6.0
lambda-packages==0.20.0
markupsafe==1.1.0
mccabe==0.6.1             # via flake8
more-itertools==4.3.0     # via pytest
nltk==3.4
pip-tools==3.1.0
placebo==0.8.2
pluggy==0.8.0             # via pytest
py==1.7.0                 # via pytest
pycodestyle==2.4.0        # via flake8
pyflakes==2.0.0           # via flake8
pymysql==0.9.3
pytest-cov==2.6.0
pytest==4.0.1
python-dateutil==2.6.1
python-dotenv==0.10.0
python-slugify==1.2.4
pyyaml==3.13
requests==2.20.1
s3transfer==0.1.13
sentry-sdk[flask]==0.6.6
singledispatch==<IP_ADDRESS>
six==1.11.0
toml==0.10.0
tqdm==4.19.1
troposphere==2.3.4
unidecode==1.0.23
urllib3==1.24.1
werkzeug==0.14.1
wheel==0.32.3
wsgi-request-logger==0.4.6
zappa==0.47.1

Link to your project (optional):
Your zappa_settings.json:

{
    "staging": {
        "app_function": "application.app",
        "project_name": "my_project",
        "runtime": "python3.6",
        "s3_bucket": "our-zappa",
        "aws_region": "us-east-1",
    }
}

Hi @jneves , any update on this? I desperately need to include a zip file in my deployment package but Zappa doesn't allow me to do so.

You may want to try callbacks to define a custom function to pull your required zip from s3.


[BUG] 'failed to fill whole buffer' error when using k256 crate

Bug Report
When using the k256 crate - a pure Rust secp256k1 implementation - in the zkVM guest, the guest program executes OK, but prover.prove returns an error on the host side: failed to fill whole buffer
$ cargo run .
proving execution...
thread 'main' panicked at host/src/main.rs:28:10:
failed to prove: failed to fill whole buffer
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Following the backtrace, the error seems to originate from the ark-std crate, in src/io/mod.rs. I am currently waiting for risc0 to reinstall. Once it does I will provide a full backtrace.
If I comment out the two critical lines in the guest crate's code, the proof runs OK, except obviously the elliptic curve point output is not written to the journal anymore.
diff --git a/methods/guest/src/main.rs b/methods/guest/src/main.rs
index 78e7b81..a2a905f 100644
--- a/methods/guest/src/main.rs
+++ b/methods/guest/src/main.rs
@@ -25,8 +25,8 @@ fn main() {

     // Compute the public key of the given input.
     // Uncommenting these lines out will cause the host to panic.
-    let point = secp256k1_ec_mul(&input);
-    output[32..].copy_from_slice(&point);
+    // let point = secp256k1_ec_mul(&input);
+    // output[32..].copy_from_slice(&point);

     let output_bytes: &[u8] = output.as_ref();
     env::commit(&output_bytes);

$ cargo run .
proving execution...
receipt journal output:
  hash:  72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793
  point:<PHONE_NUMBER>00000000000000000000000000000000000000000000000000000000
verifying receipt...
OK

Steps to Reproduce

I followed the instructions here to install the risc0 tools and toolchain.
I set up a simple ZK key-statement proof which asserts than a given hash preimage is also the secret key to some public key on the secp256k1 curve. The full code is here, but i'll also include the guest and host code below.

Guest
#![no_main]
#![no_std]

use k256::elliptic_curve::group::GroupEncoding as _;
use risc0_zkvm::guest::env;
use risc0_zkvm::sha;
use sha::Sha256 as _;

risc0_zkvm::guest::entry!(main);

#[allow(dead_code)]
fn secp256k1_ec_mul(secret: &[u8; 32]) -> [u8; 33] {
    let seckey = k256::SecretKey::from_bytes(secret.into()).expect("secret key is invalid");
    let pubkey = seckey.public_key();
    pubkey.as_affine().to_bytes().into()
}

fn main() {
    let input: [u8; 32] = env::read();
    let mut output = [0u8; 32 + 33];

    // Compute SHA256 hash, and write it to the journal as a public output
    let digest = sha::Impl::hash_bytes(&input);
    output[..32].copy_from_slice(digest.as_bytes());

    // Compute the public key of the given input.
    // Uncommenting these lines out will cause the host to panic.
    let point = secp256k1_ec_mul(&input);
    output[32..].copy_from_slice(&point);

    let output_bytes: &[u8] = output.as_ref();
    env::commit(&output_bytes);
}

Cargo.toml:
[package]
name = "provable_sha256_dlog"
version = "0.1.0"
edition = "2021"

[workspace]

[dependencies]
# If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm
risc0-zkvm = { version = "0.20.1", default-features = false, features = [] }
k256 = { version = "0.13.3", default-features = false, features = ["arithmetic", "serde"] }

Host
// These constants represent the RISC-V ELF and the image ID generated by risc0-build.
// The ELF is used for proving and the ID is used for verification.
use methods::{PROVABLE_SHA256_DLOG_ELF, PROVABLE_SHA256_DLOG_ID};
use risc0_zkvm::{default_prover, ExecutorEnv};

fn main() {
    // Initialize tracing. In order to view logs, run `RUST_LOG=info cargo run`
    tracing_subscriber::fmt()
        .with_env_filter(tracing_subscriber::filter::EnvFilter::from_default_env())
        .init();

    // Arbitrary input.
    let input = [1u8; 32];

    let env = ExecutorEnv::builder()
        .write(&input)
        .unwrap()
        .build()
        .unwrap();

    // Obtain the default prover.
    let prover = default_prover();

    // Produce a receipt by proving the specified ELF binary.
    println!("proving execution...");
    let receipt = prover
        .prove(env, PROVABLE_SHA256_DLOG_ELF)
        .expect("failed to prove"); // <-------- CRASH HERE

    // Parse the journal from a receipt.
    let output: Vec<u8> = receipt
        .journal
        .decode()
        .expect("failed to decode journal output");

    assert_eq!(output.len(), 32 + 33);

    let hash = &output[..32];
    let point = &output[32..];

    println!("receipt journal output:");
    println!("  hash:  {}", hex::encode(hash));
    println!("  point: {}", hex::encode(point));

    // The receipt was verified at the end of proving, but the below code is an
    // example of how someone else could verify this receipt.
    println!("verifying receipt...");
    receipt.verify(PROVABLE_SHA256_DLOG_ID).unwrap();
    println!("OK");
}

Cargo.toml
[package]
name = "host"
version = "0.1.0"
edition = "2021"

[dependencies]
methods = { path = "../methods" }
risc0-zkvm = { version = "0.20.1" }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
serde = "1.0"
hex = { version = "0.4.3", default-features = false }

cargo run . -> Panics.

Expected behavior
If the k256 elliptic curve code should work with zkVM, the proof should be constructed successfully.
If k256 is doing something wrong/disallowed by the zkVM, I should see some clear error telling me what/why so that I can help address it upstream.
Your Environment

risc0-zkvm version: 0.20.1
Rust version: rustc 1.76.0 (07dca489a 2024-02-04)
Platform/OS: Linux (Debian 12)

Additional context
TODO:

Does the prover work in dev mode?
Does the prover work if no elliptic curve math is done, but k256 is still used? What if we only do finite field math (e.g. multiply the input secret) instead of point-scalar multiplication?

The full backtrace:
$ RUST_BACKTRACE=full cargo run .
proving execution...
thread 'main' panicked at host/src/main.rs:28:10:
failed to prove: failed to fill whole buffer

Stack backtrace:
   0: anyhow::error::<impl core::convert::From<E> for anyhow::Error>::from
             at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/anyhow-1.0.79/src/error.rs:565:25
   1: <core::result::Result<T,F> as core::ops::try_trait::FromResidual<core::result::Result<core::convert::Infallible,E>>>::from_residual
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/result.rs:1959:27
   2: risc0_zkvm::host::api::ConnectionWrapper::recv
   3: risc0_zkvm::host::api::client::Client::prove_handler
             at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/risc0-zkvm-0.20.1/src/host/api/client.rs:510:47
   4: risc0_zkvm::host::api::client::Client::prove
             at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/risc0-zkvm-0.20.1/src/host/api/client.rs:87:21
   5: <risc0_zkvm::host::client::prove::external::ExternalProver as risc0_zkvm::host::client::prove::Prover>::prove_with_ctx
             at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/risc0-zkvm-0.20.1/src/host/client/prove/external.rs:55:23
   6: risc0_zkvm::host::client::prove::Prover::prove
             at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/risc0-zkvm-0.20.1/src/host/client/prove/mod.rs:65:9
   7: host::main
             at ./host/src/main.rs:26:19
   8: core::ops::function::FnOnce::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
   9: std::sys_common::backtrace::__rust_begin_short_backtrace
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:155:18
  10: std::rt::lang_start::{{closure}}
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:166:18
  11: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:284:13
  12: std::panicking::try::do_call
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  13: std::panicking::try
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  14: std::panic::catch_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  15: std::rt::lang_start_internal::{{closure}}
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:148:48
  16: std::panicking::try::do_call
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  17: std::panicking::try
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  18: std::panic::catch_unwind
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  19: std::rt::lang_start_internal
             at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:148:20
  20: main
  21: __libc_start_main
  22: _start
stack backtrace:
   0:     0x607063810686 - std::backtrace_rs::backtrace::libunwind::trace::hbee8a7973eeb6c93
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:     0x607063810686 - std::backtrace_rs::backtrace::trace_unsynchronized::hc8ac75eea3aa6899
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x607063810686 - std::sys_common::backtrace::_print_fmt::hc7f3e3b5298b1083
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x607063810686 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hbb235daedd7c6190
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x60706383d000 - core::fmt::rt::Argument::fmt::h76c38a80d925a410
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/fmt/rt.rs:142:9
   5:     0x60706383d000 - core::fmt::write::h3ed6aeaa977c8e45
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/fmt/mod.rs:1120:17
   6:     0x60706380d95f - std::io::Write::write_fmt::h78b18af5775fedb5
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/io/mod.rs:1810:15
   7:     0x607063810464 - std::sys_common::backtrace::_print::h5d645a07e0fcfdbb
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x607063810464 - std::sys_common::backtrace::print::h85035a511aafe7a8
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x607063811b37 - std::panicking::default_hook::{{closure}}::hcce8cea212785a25
  10:     0x607063811899 - std::panicking::default_hook::hf5fcb0f213fe709a
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:292:9
  11:     0x607063811fc8 - std::panicking::rust_panic_with_hook::h095fccf1dc9379ee
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:779:13
  12:     0x607063811ea2 - std::panicking::begin_panic_handler::{{closure}}::h032ba12139b353db
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:657:13
  13:     0x607063810b86 - std::sys_common::backtrace::__rust_end_short_backtrace::h9259bc2ff8fd0f76
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:171:18
  14:     0x607063811c00 - rust_begin_unwind
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:645:5
  15:     0x6070633c6805 - core::panicking::panic_fmt::h784f20a50eaab275
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:72:14
  16:     0x6070633c6e43 - core::result::unwrap_failed::h03d8a5018196e1cd
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/result.rs:1649:5
  17:     0x6070633d6638 - core::result::Result<T,E>::expect::hee9e0eeebe8726d0
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/result.rs:1030:23
  18:     0x6070633d6638 - host::main::h0cfe23277e3581b0
                               at /home/user/src/zkpreimage/host/src/main.rs:26:19
  19:     0x6070633cf2b3 - core::ops::function::FnOnce::call_once::h1e862edc13c75a5f
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
  20:     0x6070633cf2b3 - std::sys_common::backtrace::__rust_begin_short_backtrace::hf3ca1823e35a112e
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:155:18
  21:     0x6070633c9be9 - std::rt::lang_start::{{closure}}::h5edd8c0ef85debd4
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:166:18
  22:     0x607063806ad1 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h37600b1e5eea4ecd
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:284:13
  23:     0x607063806ad1 - std::panicking::try::do_call::hb4bda49fa13a0c2b
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  24:     0x607063806ad1 - std::panicking::try::h8bbf75149211aaaa
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  25:     0x607063806ad1 - std::panic::catch_unwind::h8c78ec68ebea34cb
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  26:     0x607063806ad1 - std::rt::lang_start_internal::{{closure}}::hffdf44a19fd9e220
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:148:48
  27:     0x607063806ad1 - std::panicking::try::do_call::hcb3194972c74716d
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  28:     0x607063806ad1 - std::panicking::try::hcdc6892c5f0dba4c
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  29:     0x607063806ad1 - std::panic::catch_unwind::h4910beb4573f4776
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  30:     0x607063806ad1 - std::rt::lang_start_internal::h6939038e2873596b
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/rt.rs:148:20
  31:     0x6070633d686c - main
  32:     0x77d02a678d0a - __libc_start_main
  33:     0x6070633c714a - _start
  34:                0x0 - <unknown>

Running in dev mode:
$ RISC0_DEV_MODE=true cargo run .
proving execution...
WARNING: proving in dev mode. This will not generate valid, secure proofs.
WARNING: Proving in dev mode does not generate a valid receipt. Receipts generated from this process are invalid and should never be used in production.
receipt journal output:
  hash:  72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793
  point: 031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f
verifying receipt...
OK

Running with only scalar finite field arithmetic instead of EC point multiplication:
diff --git a/methods/guest/src/main.rs b/methods/guest/src/main.rs
index 78e7b81..d104bb4 100644
--- a/methods/guest/src/main.rs
+++ b/methods/guest/src/main.rs
@@ -1,7 +1,7 @@
 #![no_main]
 #![no_std]

-use k256::elliptic_curve::group::GroupEncoding as _;
+// use k256::elliptic_curve::group::GroupEncoding as _;
 use risc0_zkvm::guest::env;
 use risc0_zkvm::sha;
 use sha::Sha256 as _;
@@ -11,8 +11,11 @@ risc0_zkvm::guest::entry!(main);
 #[allow(dead_code)]
 fn secp256k1_ec_mul(secret: &[u8; 32]) -> [u8; 33] {
     let seckey = k256::SecretKey::from_bytes(secret.into()).expect("secret key is invalid");
-    let pubkey = seckey.public_key();
-    pubkey.as_affine().to_bytes().into()
+    let scalar = seckey.to_nonzero_scalar() * seckey.to_nonzero_scalar();
+    let bytes = k256::FieldBytes::from(scalar);
+    let mut out = [0u8; 33];
+    out[1..].copy_from_slice(&bytes);
+    out
 }

 fn main() {

proving execution...
receipt journal output:
  hash:  72cd6e8422c407fb6d098690f1130b7ded7ec2f7f5e1d30bd9d521f015363793
  point:<PHONE_NUMBER>241588c29833b5cfdfd42440cfcce085d0b9a247124793a078423c47
verifying receipt...
OK

So in summary:

Dev mode works fine.
Scalar multiplication in k256 works fine.
It's just EC point multiplication in prod mode which seems to have issues.

I also tried using your fork of k256:
diff --git a/methods/guest/Cargo.toml b/methods/guest/Cargo.toml
index b74f270..71cd0d9 100644
--- a/methods/guest/Cargo.toml
+++ b/methods/guest/Cargo.toml
@@ -8,4 +8,18 @@ edition = "2021"
 [dependencies]
 # If you want to try (experimental) std support, add `features = [ "std" ]` to risc0-zkvm
 risc0-zkvm = { version = "0.20.1", default-features = false, features = [] }
-k256 = { version = "0.13.3", default-features = false, features = ["arithmetic", "serde"] }
+# k256 = { version = "0.13.3", default-features = false, features = ["arithmetic", "serde"] }
+
+[dependencies.k256]
+git = "https://github.com/risc0/RustCrypto-elliptic-curves"
+tag = "k256/v0.13.3-risczero.0"
+default-features = false
+features = ["arithmetic", "serde"]
+
+[patch.crates-io.crypto-bigint]
+git = "https://github.com/risc0/RustCrypto-crypto-bigint"
+tag = "v0.5.5-risczero.0"
+
+[patch.crates-io.sha2]
+git = "https://github.com/risc0/RustCrypto-hashes"
+tag = "sha2-v0.10.8-risczero.0"

$ cargo run .
proving execution...
thread 'main' panicked at host/src/main.rs:28:10:
failed to prove: failed to fill whole buffer
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Bump

I'm not immediately sure. Using k256 without the patch, this should just be like any other standard Rust crate. It's definitely something I've definitely something I've done before (e.g. in our ecdsa example). The error itself is in the prover client that talks to the server subprocess. I've seen this before when the prover subprocess fails. I imagine it can also happen when there is a breaking protocol change and the client and the server are running different versions.

I'll have to try running this code to see if I can reproduce it.

I just retried with<EMAIL_ADDRESS>and the crash still occurs. OP revised with code and config files for v1.0.1

The crash seems to occur with any secp256k1 point multiplication operation regardless of which implementation i use. I have also tried using the secp256k1 crate (binds to libsecp256k1) in the guest zkVM, and I still get the exact same crash as if I had used k256 to perform the point multiplication.
Is there some kind of syscall or operation which these secp256k1 implementations are performing which is somehow causing a crash?

I believe I found a much simpler reproduction method.
Guest program:
#![no_main]
#![no_std]

use num_bigint::{BigInt, Sign};
use num_integer::Integer;
use risc0_zkvm::guest::env;
use risc0_zkvm::sha;
use sha::Sha256 as _;

risc0_zkvm::guest::entry!(main);

fn modpow(base: &BigInt, exp: &BigInt, modulus: &BigInt) -> BigInt {
    let mut product = BigInt::from(1);
    let mut r = base.clone();
    for i in 0..10 {
        if exp.bit(i) {
            product = (&product * &r).mod_floor(modulus); // correct
        }
        r = (&r * &r).mod_floor(modulus); // correct
    }
    product
}

fn main() {
    let input: [u8; 32] = env::read();
    let mut output = [0u8; 32 + 33];

    // Compute SHA256 hash, and write it to the journal as a public output
    let digest = sha::Impl::hash_bytes(&input);
    output[..32].copy_from_slice(digest.as_bytes());

    let input_num = BigInt::from_bytes_be(Sign::Plus, input.as_ref());
    let output_num = {
        let modulus = BigInt::parse_bytes(
            b"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F",
            16,
        )
        .unwrap();

        modpow(&input_num, &(&modulus - BigInt::from(2)), &modulus)
    };
    output[33..].copy_from_slice(output_num.to_bytes_be().1.as_ref());

    let output_bytes: &[u8] = output.as_ref();
    env::commit(&output_bytes);
}

The above program works fine. But with this one small modification, it fails.
--- a/methods/guest/src/main.rs
+++ b/methods/guest/src/main.rs
@@ -105,7 +105,7 @@ risc0_zkvm::guest::entry!(main);
 fn modpow(base: &BigInt, exp: &BigInt, modulus: &BigInt) -> BigInt {
     let mut product = BigInt::from(1);
     let mut r = base.clone();
-    for i in 0..10 {
+    for i in 0..100 {
         if exp.bit(i) {
             product = (&product * &r).mod_floor(modulus); // correct
         }

Anybody home?

Thanks @nategraf, I'll try to replicate again using a fresh install and see what I get

Thanks, and apologies again for not responding earlier.

I found a few unrelated bugs while installing the latest version: #2446 #2447
And #2446 gave me a hint as to why these operations were failing on my machine but not yours. Turns out it was due to insufficient memory. While running the prover, i watched the output of free -h and my free RAM drops to zero just before the risc0 prover crashes. So I added some swap space and now everything is working, albeit very slowly, sorry for the mix up!

Ok, thanks for opening those issues!