unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#51737] Add Waydroid
@ 2021-11-10  1:33 phodina via Guix-patches via
  2021-11-10  1:37 ` [bug#51737] [PATCH 1/4] gnu: Add libglibutil phodina via Guix-patches via
                   ` (6 more replies)
  0 siblings, 7 replies; 31+ messages in thread
From: phodina via Guix-patches via @ 2021-11-10  1:33 UTC (permalink / raw)
  To: 51737

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

Hi,

in the following patches there's added support for Waydroid [1]- allowing you to run Android applications in LXC containers.

However, there is still issue that the following kernel options need to be enabled.

CONFIG_ASHMEM=m
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=m
CONFIG_ANDROID_BINDERFS=n
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"

I'd like to ask how to proceed. Probably add these as configuration in the gnu/packages/linux.scm and then create a new kernel with these enabled, right?

Should I then add dependency of waydroid package on this kernel?

Petr

[1] https://waydro.id/

[-- Attachment #2: Type: text/html, Size: 895 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH 1/4] gnu: Add libglibutil.
  2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
@ 2021-11-10  1:37 ` phodina via Guix-patches via
  2021-11-10  1:38 ` [bug#51737] [PATCH 2/4] gnu: Add libgbinder phodina via Guix-patches via
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 31+ messages in thread
From: phodina via Guix-patches via @ 2021-11-10  1:37 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org

* gnu/packages/glib.scm (libglibutil): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 8ed1e3a944..6d8a6801da 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -68,6 +69,7 @@ (define-module (gnu packages glib)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -749,6 +751,49 @@ (define-public glibmm-2.64
       `(("libsigc++" ,libsigc++)
         ("glib" ,glib)))))

+(define-public libglibutil
+  (package
+    (name "libglibutil")
+    (version "1.0.55")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sailfishos.org/mer-core/libglibutil")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0zrxccpyfz4jf14zr6fj9b88p340s66lw5cnqkapfa72kl1rnp4q"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
+                          (string-append "DESTDIR=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'unpack 'remove-usr-prefix
+           (lambda* _
+             (substitute* "libglibutil.pc.in"
+               (("/usr/include") (string-append %output "/include")))
+             (substitute* "Makefile"
+               (("usr/") ""))))
+         (add-after 'install 'install-dev
+           (lambda* _
+             (invoke "make" "install-dev" (string-append "DESTDIR=" %output))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (chdir "test")
+               (invoke "make" (string-append "CC=" ,(cc-for-target)))
+               (chdir "..") #t))))))
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs `(("glib" ,glib)))
+    (home-page "https://git.sailfishos.org/mer-core/libglibutil")
+    (synopsis "GLib utilites")
+    (description "This package provides library of glib utilities.")
+    (license license:bsd-3)))
+
 (define-public python2-pygobject-2
   (package
     (name "python2-pygobject")
--
2.33.1




^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH 2/4] gnu: Add libgbinder.
  2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
  2021-11-10  1:37 ` [bug#51737] [PATCH 1/4] gnu: Add libglibutil phodina via Guix-patches via
@ 2021-11-10  1:38 ` phodina via Guix-patches via
  2021-11-10  1:38 ` [bug#51737] [PATCH 3/4] gnu: Add python-gbinder phodina via Guix-patches via
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 31+ messages in thread
From: phodina via Guix-patches via @ 2021-11-10  1:38 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org

* gnu/packages/glib.scm (libgbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 6d8a6801da..4f3e026d1b 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -751,6 +751,59 @@ (define-public glibmm-2.64
       `(("libsigc++" ,libsigc++)
         ("glib" ,glib)))))

+(define-public libgbinder
+  (package
+    (name "libgbinder")
+    (version "1.1.13")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mer-hybris/libgbinder")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "054kghsyyxk7lbsgwis1fczbgjlh0g0x6smwvcczd8dqacfclvpy"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
+                          (string-append "DESTDIR=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'unpack 'fix-pkg-config-in
+           (lambda* _
+             (substitute* "Makefile"
+               (("usr/") ""))
+             (substitute* "libgbinder.pc.in"
+               (("@libdir@") (string-append (assoc-ref %outputs "out") "/lib"))
+               (("/usr/include") (string-append %output "/include")))))
+         (add-after 'install 'install-dev
+           (lambda* _
+             (invoke "make" "install-dev" (string-append "DESTDIR=" %output))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (chdir "test")
+               (invoke "make" (string-append "CC=" ,(cc-for-target)))
+               (chdir "..") #t))))))
+    (native-inputs `(("bison" ,bison)
+                     ("flex" ,flex)
+                     ("pkg-config" ,pkg-config)))
+    (inputs `(("glib" ,glib)
+              ("libglibutil" ,libglibutil)))
+    (home-page "https://github.com/mer-hybris/libgbinder")
+    (synopsis "GLib-style interface to binder")
+    (description "This package provides GLib-style interface to binder:
+@enumerate
+@item Integration with GLib event loop
+@item Detection of 32 vs 64 bit kernel at runtime
+@item Asynchronous transactions that don't block the event thread
+@item Stable service manager and low-level transation APIs
+@end enumerate")
+    (license license:bsd-3)))
+
 (define-public libglibutil
   (package
     (name "libglibutil")
--
2.33.1




^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH 3/4] gnu: Add python-gbinder.
  2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
  2021-11-10  1:37 ` [bug#51737] [PATCH 1/4] gnu: Add libglibutil phodina via Guix-patches via
  2021-11-10  1:38 ` [bug#51737] [PATCH 2/4] gnu: Add libgbinder phodina via Guix-patches via
@ 2021-11-10  1:38 ` phodina via Guix-patches via
  2021-11-10  1:39 ` [bug#51737] [PATCH 4/4] gnu: Add waydroid phodina via Guix-patches via
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 31+ messages in thread
From: phodina via Guix-patches via @ 2021-11-10  1:38 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org

* gnu/packages/glib.scm (python-gbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 4f3e026d1b..d9e50a69c8 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -847,6 +847,37 @@ (define-public libglibutil
     (description "This package provides library of glib utilities.")
     (license license:bsd-3)))

+(define-public python-gbinder
+  (package
+    (name "python-gbinder")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/erfanoabdi/gbinder-python")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0jgblzakjgsy0cj93bmh5gr7qnl2xgsrm0wzc6xjvzry9lrbs360"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda* _
+             (invoke "python" "setup.py" "build_ext" "--inplace" "--cython"))))))
+    (native-inputs `(("python-cython" ,python-cython)
+                     ("pkg-config" ,pkg-config)))
+    (inputs `(("glib" ,glib)
+              ("libgbinder" ,libgbinder)
+              ("libglibutil" ,libglibutil)))
+    (home-page "https://github.com/erfanoabdi/gbinder-python")
+    (synopsis "Python bindings for libgbinder")
+    (description "This package provides Python bindings for libgbinder.")
+    (license license:gpl3+)))
+
 (define-public python2-pygobject-2
   (package
     (name "python2-pygobject")
--
2.33.1




^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH 4/4] gnu: Add waydroid.
  2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
                   ` (2 preceding siblings ...)
  2021-11-10  1:38 ` [bug#51737] [PATCH 3/4] gnu: Add python-gbinder phodina via Guix-patches via
@ 2021-11-10  1:39 ` phodina via Guix-patches via
  2021-11-15 20:03   ` Liliana Marie Prikler
  2022-06-25 13:08 ` [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid phodina via Guix-patches via
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 31+ messages in thread
From: phodina via Guix-patches via @ 2021-11-10  1:39 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org

* gnu/packages/virtualization.scm (waydroid): New variable.

diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 1817f6dc22..d47d8402f6 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -2005,6 +2005,72 @@ (define-public bochs
 DOS or Microsoft Windows.")
     (license license:lgpl2.0+)))

+(define-public waydroid
+  (package
+    (name "waydroid")
+    (version "1.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/waydroid/waydroid")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "03d87sh443kn0j2mpih1g909khkx3wgb04h605f9jhd0znskkbmw"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'build)                ; no setup.py
+         (delete 'check)                ; no test suite
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib/waydroid"))
+                    (tools (string-append lib "/tools"))
+                    (data (string-append lib "/data"))
+                    (apps (string-append out "/share/applications"))
+                    (bin (string-append out "/bin"))
+                    (site (string-append out "/lib/python"
+                                         ,(version-major+minor
+                                           (package-version python))
+                                         "/site-packages"))
+                    (path (getenv "PYTHONPATH")))
+               (mkdir-p tools)
+               (mkdir-p data)
+               (mkdir-p apps)
+               (mkdir-p bin)
+               (copy-recursively "tools" tools)
+               (copy-recursively "data" data)
+               (install-file (string-append data "/Waydroid.desktop")
+                             (string-append apps))
+               (substitute* (string-append apps "/Waydroid.desktop")
+                 (("/usr") lib))
+               (install-file "waydroid.py" lib)
+               (symlink (string-append lib "/waydroid.py") (string-append bin
+                                                                          "/waydroid.py"))
+               (wrap-program (string-append bin "/waydroid.py")
+                 `("PYTHONPATH" ":" prefix (,site ,path)))))))))
+    (inputs `(("bash-minimal" ,bash-minimal)
+              ("dnsmasq" ,dnsmasq)
+              ("libgbinder" ,libgbinder)
+              ("lxc" ,lxc)
+              ("nftables" ,nftables)
+              ("python" ,python)
+              ("python-gbinder" ,python-gbinder)
+              ("python-pygobject" ,python-pygobject)))
+    (home-page "https://waydro.id")
+    (synopsis "Container-based approach to boot a full Android system")
+    (description "Waydroid uses Linux namespaces @code{(user, pid, uts, net,
+mount, ipc)} to run a full Android system in a container and provide Android
+applications.  The Android inside the container has direct access to needed
+underlying hardware.  The Android runtime environment ships with a minimal
+customized Android system image based on LineageOS.  The used image is
+currently based on Android 10.")
+    (license license:gpl3)))
+
 (define-public xen
   (package
     (name "xen")
--
2.33.1




^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH 4/4] gnu: Add waydroid.
  2021-11-10  1:39 ` [bug#51737] [PATCH 4/4] gnu: Add waydroid phodina via Guix-patches via
@ 2021-11-15 20:03   ` Liliana Marie Prikler
  2021-11-15 22:30     ` phodina via Guix-patches via
  2021-12-03 15:00     ` phodina via Guix-patches via
  0 siblings, 2 replies; 31+ messages in thread
From: Liliana Marie Prikler @ 2021-11-15 20:03 UTC (permalink / raw)
  To: phodina, 51737@debbugs.gnu.org

Hi,

Am Mittwoch, den 10.11.2021, 01:39 +0000 schrieb phodina:
> [...]
> +    (description "Waydroid uses Linux namespaces @code{(user, pid,
> uts, net,
> +mount, ipc)} to run a full Android system in a container and provide
> Android
> +applications.  The Android inside the container has direct access to
> needed
> +underlying hardware.  The Android runtime environment ships with a
> minimal
> +customized Android system image based on LineageOS.  The used image
> is
> +currently based on Android 10.")
How exactly/when is this RTE built?  Is it just included as a blob?






^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH 4/4] gnu: Add waydroid.
  2021-11-15 20:03   ` Liliana Marie Prikler
@ 2021-11-15 22:30     ` phodina via Guix-patches via
  2021-12-03 15:00     ` phodina via Guix-patches via
  1 sibling, 0 replies; 31+ messages in thread
From: phodina via Guix-patches via @ 2021-11-15 22:30 UTC (permalink / raw)
  To: Liliana Marie Prikler, Julien Lepiller; +Cc: 51737@debbugs.gnu.org

Hi Liliana,

On Monday, November 15th, 2021 at 9:03 PM, Liliana Marie Prikler <liliana.prikler@gmail.com> wrote:

> Hi,
>
> Am Mittwoch, den 10.11.2021, 01:39 +0000 schrieb phodina:
>
> > [...]
> >
> > -   (description "Waydroid uses Linux namespaces @code{(user, pid,
> >
> >     uts, net,
> >
> >     +mount, ipc)} to run a full Android system in a container and provide
> >
> >     Android
> >
> >     +applications. The Android inside the container has direct access to
> >
> >     needed
> >
> >     +underlying hardware. The Android runtime environment ships with a
> >
> >     minimal
> >
> >     +customized Android system image based on LineageOS. The used image
> >
> >     is
> >
> >     +currently based on Android 10.")
>
> How exactly/when is this RTE built? Is it just included as a blob?

Nope, it's downloaded as part of the =waydroid init= command.

You can see the RTE here:
$ ls /var/lib/waydroid/images/
system.img  vendor.img

On waydroid website [1] they provide instructions on how to create this runtime environment - basically "+-" Android rootfs.

I cameacross a channel [2] with Android support but haven't had the chance to test it yet. Then again I'm not sure if that's the right way as there are phones that run close to vanilla Linux [3]. Though this technological solution enables Android apps to run on those phones.

But it also has drawback as it requires custom kernel.

Though these patches require support in the kernel [3] and LXD service running [4] at least.

Currently I'm able to run the waydroid container and get shell over adb.

However, for some unknown reason I can't launch the UI.

That might be due to the fact I run Sway VM. I'll test this with GDM as this is recommended in the issues on github and report back.

Petr

[1]: https://docs.waydro.id/development/compile-waydroid-lineage-os-based-images
[2]: https://framagit.org/tyreunom/guix-android
[3]: https://postmarketos.org/
[4]: https://issues.guix.gnu.org/51771
[5]: https://issues.guix.gnu.org/50133





^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH 4/4] gnu: Add waydroid.
  2021-11-15 20:03   ` Liliana Marie Prikler
  2021-11-15 22:30     ` phodina via Guix-patches via
@ 2021-12-03 15:00     ` phodina via Guix-patches via
  1 sibling, 0 replies; 31+ messages in thread
From: phodina via Guix-patches via @ 2021-12-03 15:00 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org

ping




^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid.
  2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
                   ` (3 preceding siblings ...)
  2021-11-10  1:39 ` [bug#51737] [PATCH 4/4] gnu: Add waydroid phodina via Guix-patches via
@ 2022-06-25 13:08 ` phodina via Guix-patches via
  2022-06-25 16:46   ` Maxime Devos
  2022-10-18  9:32 ` [bug#51737] Add Waydroid dan
  2024-03-20 13:56 ` outlook user
  6 siblings, 1 reply; 31+ messages in thread
From: phodina via Guix-patches via @ 2022-06-25 13:08 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org; +Cc: Ludovic Courtès


[-- Attachment #1.1: Type: text/plain, Size: 482 bytes --]

Hi Ludo',

here's updated patch set.

Indeede it's adding another linux-libre kernel since this opens the attack surface for anybody not using the binder and ashmem interface. However, it bring the support for Android apps on Linux which might be necessary on mobile platforms such as PinePhone.

Any thoughts about upstreaming this?

FIY There are also open source implementation of Andorid apps that can be downloaded from F-Droid [1]

[1] https://f-droid.org/

Kind regards,
Petr

[-- Attachment #1.2: Type: text/html, Size: 811 bytes --]

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: v2-0001-gnu-Add-linux-libre-waydroid.patch --]
[-- Type: text/x-patch; name=v2-0001-gnu-Add-linux-libre-waydroid.patch, Size: 1907 bytes --]

From 0e0d1655ebc3474454471449298bd7b6c8d739da Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Thu, 11 Nov 2021 19:26:41 +0100
Subject: [PATCH v2 1/7] gnu: Add linux-libre-waydroid.

* gnu/packages/linux.scm (linux-libre-waydroid,
  waydroid-extra-linux-options): New variables.

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 8f7b4f4f5b..d094c529cb 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -729,6 +729,14 @@ (define %bpf-extra-linux-options
     ;; kheaders module
     ("CONFIG_IKHEADERS" . #t)))
 
+(define %waydroid-extra-linux-options
+  `(;; Modules required for waydroid:
+   ("CONFIG_ASHMEM" . #t)
+   ("CONFIG_ANDROID" . #t)
+   ("CONFIG_ANDROID_BINDER_IPC" . #t)
+   ("CONFIG_ANDROID_BINDERFS" . #t)
+   ("CONFIG_ANDROID_BINDER_DEVICES" . "binder,hwbinder,vndbinder")))
+
 (define (config->string options)
   (string-join (map (match-lambda
                       ((option . 'm)
@@ -1156,6 +1164,24 @@ (define-public linux-libre-mips64el-fuloong2e
                       `(("CONFIG_OVERLAY_FS" . m))
                       %default-extra-linux-options)))
 
+(define-public linux-libre-waydroid
+  (let ((base-linux-libre
+         (make-linux-libre*
+          linux-libre-version
+          linux-libre-gnu-revision
+          linux-libre-source
+          '("x86_64-linux" "i686-linux" "armhf-linux"
+            "aarch64-linux" "riscv64-linux")
+          #:extra-version "linux"
+          #:configuration-file kernel-config
+          #:extra-options
+          (append %waydroid-extra-linux-options
+                  %default-extra-linux-options))))
+    (package
+      (inherit base-linux-libre)
+         (name "linux-libre-waydroid")
+      (inputs `(("cpio" ,cpio) ,@(package-inputs base-linux-libre))))))
+
 (define-public linux-libre-with-bpf
   (let ((base-linux-libre
          (make-linux-libre*
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: v2-0003-gnu-Add-libglibutil.patch --]
[-- Type: text/x-patch; name=v2-0003-gnu-Add-libglibutil.patch, Size: 3540 bytes --]

From 316f4cd48468ee5d2230e976aca24135fbb6af99 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Tue, 9 Nov 2021 22:34:39 +0100
Subject: [PATCH v2 3/7] gnu: Add libglibutil.

* gnu/packages/glib.scm (libglibutil): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 98267fcee5..6686a51fa1 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -75,6 +76,7 @@ (define-module (gnu packages glib)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -848,6 +850,54 @@ (define-public glibmm-2.64
       (modify-inputs (package-propagated-inputs glibmm)
         (replace "libsigc++" libsigc++-2)))))
 
+(define-public libglibutil
+  (package
+    (name "libglibutil")
+    (version "1.0.65")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sailfishos.org/mer-core/libglibutil")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0sc8xw5cbxcicipjp6ycbgqppn31lzsll4r9j6b0zxd747dziv54"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags #~(list (string-append "CC="
+                                               #$(cc-for-target))
+                                (string-append "DESTDIR="
+                                               #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)
+                        (add-after 'unpack 'remove-usr-prefix
+                          (lambda* _
+                            (substitute* "libglibutil.pc.in"
+                              (("/usr/include") (string-append #$output
+                                                               "/include")))
+                            (substitute* "Makefile"
+                              (("usr/") ""))))
+                        (add-after 'install 'install-dev
+                          (lambda* _
+                            (invoke "make" "install-dev"
+                                    (string-append "DESTDIR="
+                                                   #$output))))
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (chdir "test")
+                              (invoke "make"
+                                      (string-append "CC="
+                                                     #$(cc-for-target)))
+                              (chdir "..")))))))
+    (native-inputs (list pkg-config))
+    (inputs (list glib))
+    (home-page "https://git.sailfishos.org/mer-core/libglibutil")
+    (synopsis "GLib utilites")
+    (description "This package provides library of glib utilities.")
+    (license license:bsd-3)))
+
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: v2-0007-services-Add-lxd-service-type.patch --]
[-- Type: text/x-patch; name=v2-0007-services-Add-lxd-service-type.patch, Size: 4198 bytes --]

From e7e3af766279d4e3e87cfe9eeb6458afb1f3bfe4 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 22 Dec 2021 21:31:59 +0100
Subject: [PATCH v2 7/7] services: Add lxd-service-type.

* gnu/services/virtualization.scm (lxd-configuration): New type.
(%lxd-accounts, lxd-service-type): New variables.
(%lxd-activation, lxd-shepherd-service): New procedures.
* gnu/system/file-systems.scm (%elogind-file-systems): Add
"/sys/fs/cgroup/systemd" file-system.

diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index 41afe451c1..15ee30f8e0 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -76,6 +76,9 @@ (define-module (gnu services virtualization)
             virtlog-configuration
             virtlog-service-type
 
+            lxd-configuration
+            lxd-service-type
+
             %qemu-platforms
             lookup-qemu-platforms
             qemu-platform?
@@ -562,6 +565,69 @@ (define (generate-libvirt-documentation)
    `((libvirt-configuration ,libvirt-configuration-fields))
    'libvirt-configuration))
 
+\f
+;;;
+;;; LXD linux container daemon.
+;;;
+
+(define-configuration lxd-configuration
+  (lxd
+   (package lxd)
+   "LXD package.")
+  (debug?
+   (boolean #f)
+   "Enable or disable debug messages.")
+  (verbose?
+   (boolean #f)
+   "Enable or disable information messages."))
+
+(define %lxd-accounts
+  (list (user-group (name "lxd") (system? #t))))
+
+(define (%lxd-activation config)
+  #~(begin
+      (use-modules (guix build utils))
+      (mkdir-p "/var/log/lxd")))
+
+(define (lxd-shepherd-service config)
+  (let* ((lxd (lxd-configuration-lxd config))
+         (debug? (lxd-configuration-debug? config))
+         (verbose? (lxd-configuration-verbose? config)))
+    (list
+     (shepherd-service
+      (documentation "LXD daemon.")
+      (provision '(lxd))
+      (requirement '(dbus-system
+                     elogind
+                     file-system-/sys/fs/cgroup/blkio
+                     file-system-/sys/fs/cgroup/cpu
+                     file-system-/sys/fs/cgroup/cpuset
+                     file-system-/sys/fs/cgroup/devices
+                     file-system-/sys/fs/cgroup/memory
+                     file-system-/sys/fs/cgroup/pids
+                     file-system-/sys/fs/cgroup/systemd
+                     networking
+                     udev))
+      (start #~(make-forkexec-constructor
+                (list (string-append #$lxd "/bin/lxd")
+                      "--group=lxd"
+                      "--logfile=/var/log/lxd/lxd.log"
+                      #$@(if debug? '("--debug") '())
+                      #$@(if verbose? '("--verbose") '()))))
+      (stop #~(make-kill-destructor))))))
+
+(define lxd-service-type
+  (service-type
+   (name 'lxd)
+   (extensions
+    (list (service-extension activation-service-type
+                             %lxd-activation)
+          (service-extension shepherd-root-service-type
+                             lxd-shepherd-service)
+          (service-extension account-service-type
+                             (const %lxd-accounts))))
+   (default-value (lxd-configuration))))
+
 \f
 ;;;
 ;;; Transparent QEMU emulation via binfmt_misc.
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index f8f4276283..01e36268df 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -561,6 +561,17 @@ (define %elogind-file-systems
            (check? #f)
            (options "none,name=elogind")
            (create-mount-point? #t)
+           (dependencies (list (car %control-groups))))
+         ;; The systemd cgroup needs to exist to run systemd inside linux
+         ;; containers (eg. via LXD).  This is *not* required for elogind, but
+         ;; keeping it with the other systemd hacks seemed sensible, for now.
+         (file-system
+           (device "cgroup")
+           (mount-point "/sys/fs/cgroup/systemd")
+           (type "cgroup")
+           (check? #f)
+           (options "none,name=systemd")
+           (create-mount-point? #t)
            (dependencies (list (car %control-groups)))))
    %control-groups))
 
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: v2-0004-gnu-Add-libgbinder.patch --]
[-- Type: text/x-patch; name=v2-0004-gnu-Add-libgbinder.patch, Size: 3252 bytes --]

From 7fecdc80b10c9a9b64b461486b1117acb7785ca1 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Tue, 9 Nov 2021 22:41:30 +0100
Subject: [PATCH v2 4/7] gnu: Add libgbinder.

* gnu/packages/glib.scm (libgbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 6686a51fa1..82765f60f0 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -850,6 +850,62 @@ (define-public glibmm-2.64
       (modify-inputs (package-propagated-inputs glibmm)
         (replace "libsigc++" libsigc++-2)))))
 
+(define-public libgbinder
+  (package
+    (name "libgbinder")
+    (version "1.1.23")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mer-hybris/libgbinder")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "12nw2ihd2xhpvdh0jlyacskqmbdxhnrm5pnz30v4mkyg9kz4xhdc"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags #~(list (string-append "CC="
+                                               #$(cc-for-target))
+                                (string-append "DESTDIR="
+                                               #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)
+                        (add-after 'unpack 'fix-pkg-config-in
+                          (lambda* _
+                            (substitute* "Makefile"
+                              (("usr/") ""))
+                            (substitute* "libgbinder.pc.in"
+                              (("@libdir@") (string-append #$output "/lib"))
+                              (("/usr/include") (string-append #$output
+                                                               "/include")))))
+                        (add-after 'install 'install-dev
+                          (lambda* _
+                            (invoke "make" "install-dev"
+                                    (string-append "DESTDIR="
+                                                   #$output))))
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (chdir "test")
+                              (invoke "make"
+                                      (string-append "CC="
+                                                     #$(cc-for-target)))
+                              (chdir "..")))))))
+    (native-inputs (list bison flex pkg-config))
+    (inputs (list glib libglibutil))
+    (home-page "https://github.com/mer-hybris/libgbinder")
+    (synopsis "GLib-style interface to binder")
+    (description
+     "This package provides GLib-style interface to binder:
+@enumerate
+@item Integration with GLib event loop
+@item Detection of 32 vs 64 bit kernel at runtime
+@item Asynchronous transactions that don't block the event thread
+@item Stable service manager and low-level transation APIs
+@end enumerate")
+    (license license:bsd-3)))
+
 (define-public libglibutil
   (package
     (name "libglibutil")
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: v2-0005-gnu-Add-python-gbinder.patch --]
[-- Type: text/x-patch; name=v2-0005-gnu-Add-python-gbinder.patch, Size: 1775 bytes --]

From b0c14635a2ee8afee561ce7c34904ecd15ac59b5 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 10 Nov 2021 01:25:52 +0100
Subject: [PATCH v2 5/7] gnu: Add python-gbinder.

* gnu/packages/glib.scm (python-gbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 82765f60f0..adad0313b2 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -954,6 +954,33 @@ (define-public libglibutil
     (description "This package provides library of glib utilities.")
     (license license:bsd-3)))
 
+(define-public python-gbinder
+  (package
+    (name "python-gbinder")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/erfanoabdi/gbinder-python")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0jgblzakjgsy0cj93bmh5gr7qnl2xgsrm0wzc6xjvzry9lrbs360"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (replace 'build
+                          (lambda* _
+                            (invoke "python" "setup.py" "build_ext"
+                                    "--inplace" "--cython"))))))
+    (native-inputs (list python-cython pkg-config))
+    (inputs (list glib libgbinder libglibutil))
+    (home-page "https://github.com/erfanoabdi/gbinder-python")
+    (synopsis "Python bindings for libgbinder")
+    (description "This package provides Python bindings for libgbinder.")
+    (license license:gpl3+)))
+
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: v2-0006-gnu-Add-waydroid.patch --]
[-- Type: text/x-patch; name=v2-0006-gnu-Add-waydroid.patch, Size: 5486 bytes --]

From 6c835528014d8e9545e3e28a3fe390683b5b46f4 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 10 Nov 2021 02:21:08 +0100
Subject: [PATCH v2 6/7] gnu: Add waydroid.

* gnu/packages/virtualization.scm (waydroid): New variable.

diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 4a065e4ef4..e624fe8a61 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -2091,6 +2091,94 @@ (define-public bochs
 DOS or Microsoft Windows.")
     (license license:lgpl2.0+)))
 
+(define-public waydroid
+  (package
+    (name "waydroid")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/waydroid/waydroid")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ssqlsnhmpzaq2n9rbkfn3d2ml4vmima0az6gakknjc2q6bnpza9"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (delete 'build)
+                        (delete 'check)
+                        (replace 'install
+                          (lambda* (#:key outputs inputs #:allow-other-keys)
+                            (let* ((lib (string-append #$output
+                                                       "/lib/waydroid")) (tools
+                                                                          (string-append
+                                                                           lib
+                                                                           "/tools"))
+                                   (data (string-append lib "/data"))
+                                   (apps (string-append out
+                                                        "/share/applications"))
+                                   (bin (string-append out "/bin"))
+                                   (paths-bin #~(map (lambda (input)
+                                                     (string-append
+													 #$input "/bin"))
+                                                   '(iptables nftables
+                                                     glibc dnsmasq)))
+                                   (paths-sbin #$(map (lambda (input)
+                                                      (string-append #$input "/sbin"))
+                                                    '(dnsmasq)))
+                                   (site (string-append out "/lib/python"
+                                                        #$(version-major+minor
+                                                           (package-version
+                                                            python))
+                                                        "/site-packages")))
+                              (mkdir-p tools)
+                              (mkdir-p data)
+                              (mkdir-p apps)
+                              (mkdir-p bin)
+                              (copy-recursively "tools" tools)
+                              (copy-recursively "data" data)
+                              (install-file (string-append data
+                                             "/Waydroid.desktop")
+                                            (string-append apps))
+                              (substitute* (string-append apps
+                                                          "/Waydroid.desktop")
+                                (("/usr") lib))
+                              (install-file "waydroid.py" lib)
+                              (symlink (string-append lib "/waydroid.py")
+                                       (string-append bin "/waydroid"))
+                              (wrap-program (string-append bin "/waydroid")
+                                            #~("PYTHONPATH" ":" prefix
+                                               #$paths-bin))
+                              (substitute* (string-append out
+                                            "/lib/waydroid/data/scripts/waydroid-net.sh")
+                                (("/misc") ""))
+                              (wrap-program (string-append out
+                                             "/lib/waydroid/data/scripts/waydroid-net.sh")
+                                            #~("PATH" ":" prefix
+                                               #$(append paths-bin paths-sbin)))))))))
+    (inputs (list bash-minimal
+                  dnsmasq
+                  libgbinder
+                  glibc
+                  lxc
+                  nftables
+                  iptables
+                  python
+                  python-gbinder
+                  python-pygobject))
+    (home-page "https://waydro.id")
+    (synopsis "Container-based approach to boot a full Android system")
+    (description
+     "Waydroid uses Linux namespaces @code{(user, pid, uts, net,
+mount, ipc)} to run a full Android system in a container and provide Android
+applications.  The Android inside the container has direct access to needed
+underlying hardware.  The Android runtime environment ships with a minimal
+customized Android system image based on LineageOS.  The used image is
+currently based on Android 11.")
+    (license license:gpl3)))
+
 (define-public xen
   (package
     (name "xen")
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: v2-0002-gnu-Add-linux-libre-arm64-waydroid.patch --]
[-- Type: text/x-patch; name=v2-0002-gnu-Add-linux-libre-arm64-waydroid.patch, Size: 2130 bytes --]

From cc27e2dbe2d68a337db8706d701c3cc43a4e0b1f Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 22 Dec 2021 02:35:46 +0100
Subject: [PATCH v2 2/7] gnu: Add linux-libre-arm64-waydroid.

* gnu/packages/linux.scm (linux-libre-arm64-waydroid): New variable.

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index d094c529cb..30738bbad9 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1080,6 +1080,33 @@ (define-public linux-libre-arm-omap2plus-4.14
                      #:defconfig "omap2plus_defconfig"
                      #:extra-version "arm-omap2plus"))
 
+(define-public linux-libre-arm64-waydroid
+  (make-linux-libre* linux-libre-version
+                     linux-libre-gnu-revision
+                     linux-libre-source
+                     '("aarch64-linux")
+                     #:defconfig "defconfig"
+                     #:extra-version "arm64-generic"
+                     #:extra-options
+                     (append
+                      `(;; needed to fix the RTC on rockchip platforms
+                        ("CONFIG_RTC_DRV_RK808" . #t)
+                        ;; Pinebook display, battery, charger and usb
+                        ("CONFIG_DRM_ANALOGIX_ANX6345" . m)
+                        ("CONFIG_CHARGER_AXP20X" . m)
+                        ("CONFIG_INPUT_AXP20X_PEK" . m)
+                        ("CONFIG_CHARGER_AXP20X" . m)
+                        ("CONFIG_BATTERY_AXP20X" . m)
+                        ("CONFIG_PINCTRL_AXP209" . m)
+                        ("CONFIG_AXP20X_POWER" . m)
+                        ("CONFIG_AXP20X_ADC" . m)
+                        ;; Pinebook PRO battery and sound support
+                        ("CONFIG_BATTERY_CW2015" . m)
+                        ("CONFIG_CHARGER_GPIO" . m)
+                        ("CONFIG_SND_SOC_ES8316" . m))
+                        %waydroid-extra-linux-options
+                      %default-extra-linux-options)))
+
 (define-public linux-libre-arm64-generic
   (make-linux-libre* linux-libre-version
                      linux-libre-gnu-revision
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid.
  2022-06-25 13:08 ` [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid phodina via Guix-patches via
@ 2022-06-25 16:46   ` Maxime Devos
  2022-06-27  7:07     ` phodina via Guix-patches via
  0 siblings, 1 reply; 31+ messages in thread
From: Maxime Devos @ 2022-06-25 16:46 UTC (permalink / raw)
  To: phodina, 51737@debbugs.gnu.org; +Cc: Ludovic Courtès

[-- Attachment #1: Type: text/plain, Size: 480 bytes --]

phodina via Guix-patches via schreef op za 25-06-2022 om 13:08 [+0000]:
> +                                (string-append "DESTDIR="
> +                                               #$output))

DESTDIR is for staged installation, which Guix doesn't do, so set
DESTDIR=/ or don't set it at all (maybe PREFIX or prefix is what you
need to set instead?).  Likewise for other packages.

Greetings,
Maxime.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid.
  2022-06-25 16:46   ` Maxime Devos
@ 2022-06-27  7:07     ` phodina via Guix-patches via
  2022-07-19 14:56       ` Maxime Devos
  2022-07-19 14:57       ` Maxime Devos
  0 siblings, 2 replies; 31+ messages in thread
From: phodina via Guix-patches via @ 2022-06-27  7:07 UTC (permalink / raw)
  To: Maxime Devos; +Cc: Ludovic Courtès, 51737@debbugs.gnu.org

[-- Attachment #1: Type: text/plain, Size: 733 bytes --]

Hi Maxime,
>
> > +                                (string-append "DESTDIR="
> > +                                               #$output))
>
>
> DESTDIR is for staged installation, which Guix doesn't do, so set
> DESTDIR=/ or don't set it at all (maybe PREFIX or prefix is what you
> need to set instead?). Likewise for other packages.
>
> Greetings,
> Maxime.

I packaged it this way as at that time was the simples solution. Now I switched to substitution in Makefile itself.

Also there's fix for waydroid package as I mistakenly send old patch.

Should I also create a service for waydroid + test to check it's running?

----
Petr

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: v3-0004-gnu-Add-libgbinder.patch --]
[-- Type: text/x-patch; name=v3-0004-gnu-Add-libgbinder.patch, Size: 3198 bytes --]

From ef52a2ac20b691d3eac6614c94787c8bf2daa523 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Tue, 9 Nov 2021 22:41:30 +0100
Subject: [PATCH v3 4/6] gnu: Add libgbinder.

* gnu/packages/glib.scm (libgbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 19f69b3a5c..8b91aac41a 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -850,6 +850,61 @@ (define-public glibmm-2.64
       (modify-inputs (package-propagated-inputs glibmm)
         (replace "libsigc++" libsigc++-2)))))
 
+(define-public libgbinder
+  (package
+    (name "libgbinder")
+    (version "1.1.23")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mer-hybris/libgbinder")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "12nw2ihd2xhpvdh0jlyacskqmbdxhnrm5pnz30v4mkyg9kz4xhdc"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags #~(list (string-append "CC="
+                                               #$(cc-for-target)))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)
+                        (add-after 'unpack 'fix-pkg-config-in
+                          (lambda* _
+                            (substitute* "Makefile"
+                              (("\\$\\(DESTDIR\\)") #$output)
+                              (("usr/") ""))
+                            (substitute* "libgbinder.pc.in"
+                              (("@libdir@") (string-append #$output "/lib"))
+                              (("/usr/include") (string-append #$output
+                                                               "/include")))))
+                        (add-after 'install 'install-dev
+                          (lambda* _
+                            (invoke "make" "install-dev"
+                                    (string-append "DESTDIR="
+                                                   #$output))))
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (chdir "test")
+                              (invoke "make"
+                                      (string-append "CC="
+                                                     #$(cc-for-target)))
+                              (chdir "..")))))))
+    (native-inputs (list bison flex pkg-config))
+    (inputs (list glib libglibutil))
+    (home-page "https://github.com/mer-hybris/libgbinder")
+    (synopsis "GLib-style interface to binder")
+    (description
+     "This package provides GLib-style interface to binder:
+@enumerate
+@item Integration with GLib event loop
+@item Detection of 32 vs 64 bit kernel at runtime
+@item Asynchronous transactions that don't block the event thread
+@item Stable service manager and low-level transation APIs
+@end enumerate")
+    (license license:bsd-3)))
+
 (define-public libglibutil
   (package
     (name "libglibutil")
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: v3-0002-gnu-Add-linux-libre-arm64-waydroid.patch --]
[-- Type: text/x-patch; name=v3-0002-gnu-Add-linux-libre-arm64-waydroid.patch, Size: 2130 bytes --]

From faedb7a4beb492fd024982655a844fb049ba538d Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 22 Dec 2021 02:35:46 +0100
Subject: [PATCH v3 2/6] gnu: Add linux-libre-arm64-waydroid.

* gnu/packages/linux.scm (linux-libre-arm64-waydroid): New variable.

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 3d58f8a2c6..7c57ec0d68 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1080,6 +1080,33 @@ (define-public linux-libre-arm-omap2plus-4.14
                      #:defconfig "omap2plus_defconfig"
                      #:extra-version "arm-omap2plus"))
 
+(define-public linux-libre-arm64-waydroid
+  (make-linux-libre* linux-libre-version
+                     linux-libre-gnu-revision
+                     linux-libre-source
+                     '("aarch64-linux")
+                     #:defconfig "defconfig"
+                     #:extra-version "arm64-generic"
+                     #:extra-options
+                     (append
+                      `(;; needed to fix the RTC on rockchip platforms
+                        ("CONFIG_RTC_DRV_RK808" . #t)
+                        ;; Pinebook display, battery, charger and usb
+                        ("CONFIG_DRM_ANALOGIX_ANX6345" . m)
+                        ("CONFIG_CHARGER_AXP20X" . m)
+                        ("CONFIG_INPUT_AXP20X_PEK" . m)
+                        ("CONFIG_CHARGER_AXP20X" . m)
+                        ("CONFIG_BATTERY_AXP20X" . m)
+                        ("CONFIG_PINCTRL_AXP209" . m)
+                        ("CONFIG_AXP20X_POWER" . m)
+                        ("CONFIG_AXP20X_ADC" . m)
+                        ;; Pinebook PRO battery and sound support
+                        ("CONFIG_BATTERY_CW2015" . m)
+                        ("CONFIG_CHARGER_GPIO" . m)
+                        ("CONFIG_SND_SOC_ES8316" . m))
+                        %waydroid-extra-linux-options
+                      %default-extra-linux-options)))
+
 (define-public linux-libre-arm64-generic
   (make-linux-libre* linux-libre-version
                      linux-libre-gnu-revision
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: v3-0001-gnu-Add-linux-libre-waydroid.patch --]
[-- Type: text/x-patch; name=v3-0001-gnu-Add-linux-libre-waydroid.patch, Size: 1907 bytes --]

From a416098d46b7ca5963d835d2603d9d525f0ca236 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Thu, 11 Nov 2021 19:26:41 +0100
Subject: [PATCH v3 1/6] gnu: Add linux-libre-waydroid.

* gnu/packages/linux.scm (linux-libre-waydroid,
  waydroid-extra-linux-options): New variables.

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 9c59d4ef9b..3d58f8a2c6 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -729,6 +729,14 @@ (define %bpf-extra-linux-options
     ;; kheaders module
     ("CONFIG_IKHEADERS" . #t)))
 
+(define %waydroid-extra-linux-options
+  `(;; Modules required for waydroid:
+   ("CONFIG_ASHMEM" . #t)
+   ("CONFIG_ANDROID" . #t)
+   ("CONFIG_ANDROID_BINDER_IPC" . #t)
+   ("CONFIG_ANDROID_BINDERFS" . #t)
+   ("CONFIG_ANDROID_BINDER_DEVICES" . "binder,hwbinder,vndbinder")))
+
 (define (config->string options)
   (string-join (map (match-lambda
                       ((option . 'm)
@@ -1156,6 +1164,24 @@ (define-public linux-libre-mips64el-fuloong2e
                       `(("CONFIG_OVERLAY_FS" . m))
                       %default-extra-linux-options)))
 
+(define-public linux-libre-waydroid
+  (let ((base-linux-libre
+         (make-linux-libre*
+          linux-libre-version
+          linux-libre-gnu-revision
+          linux-libre-source
+          '("x86_64-linux" "i686-linux" "armhf-linux"
+            "aarch64-linux" "riscv64-linux")
+          #:extra-version "linux"
+          #:configuration-file kernel-config
+          #:extra-options
+          (append %waydroid-extra-linux-options
+                  %default-extra-linux-options))))
+    (package
+      (inherit base-linux-libre)
+         (name "linux-libre-waydroid")
+      (inputs `(("cpio" ,cpio) ,@(package-inputs base-linux-libre))))))
+
 (define-public linux-libre-with-bpf
   (let ((base-linux-libre
          (make-linux-libre*
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: v3-0005-gnu-Add-python-gbinder.patch --]
[-- Type: text/x-patch; name=v3-0005-gnu-Add-python-gbinder.patch, Size: 1775 bytes --]

From fceafa6fefd82d0968781ed03cf5565af76dc7eb Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 10 Nov 2021 01:25:52 +0100
Subject: [PATCH v3 5/6] gnu: Add python-gbinder.

* gnu/packages/glib.scm (python-gbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 8b91aac41a..205c24a909 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -952,6 +952,33 @@ (define-public libglibutil
     (description "This package provides library of glib utilities.")
     (license license:bsd-3)))
 
+(define-public python-gbinder
+  (package
+    (name "python-gbinder")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/erfanoabdi/gbinder-python")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0jgblzakjgsy0cj93bmh5gr7qnl2xgsrm0wzc6xjvzry9lrbs360"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (replace 'build
+                          (lambda* _
+                            (invoke "python" "setup.py" "build_ext"
+                                    "--inplace" "--cython"))))))
+    (native-inputs (list python-cython pkg-config))
+    (inputs (list glib libgbinder libglibutil))
+    (home-page "https://github.com/erfanoabdi/gbinder-python")
+    (synopsis "Python bindings for libgbinder")
+    (description "This package provides Python bindings for libgbinder.")
+    (license license:gpl3+)))
+
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: v3-0006-gnu-Add-waydroid.patch --]
[-- Type: text/x-patch; name=v3-0006-gnu-Add-waydroid.patch, Size: 5486 bytes --]

From 1d8491917107f232dac0fe707aebf6a5571fb730 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 10 Nov 2021 02:21:08 +0100
Subject: [PATCH v3 6/6] gnu: Add waydroid.

* gnu/packages/virtualization.scm (waydroid): New variable.

diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 4cb83b4d85..2ec37201c9 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -2092,6 +2092,94 @@ (define-public bochs
 DOS or Microsoft Windows.")
     (license license:lgpl2.0+)))
 
+(define-public waydroid
+  (package
+    (name "waydroid")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/waydroid/waydroid")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ssqlsnhmpzaq2n9rbkfn3d2ml4vmima0az6gakknjc2q6bnpza9"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (delete 'build)
+                        (delete 'check)
+                        (replace 'install
+                          (lambda* (#:key outputs inputs #:allow-other-keys)
+                            (let* ((lib (string-append #$output
+                                                       "/lib/waydroid")) (tools
+                                                                          (string-append
+                                                                           lib
+                                                                           "/tools"))
+                                   (data (string-append lib "/data"))
+                                   (apps (string-append out
+                                                        "/share/applications"))
+                                   (bin (string-append out "/bin"))
+                                   (paths-bin #~(map (lambda (input)
+                                                     (string-append
+													 #$input "/bin"))
+                                                   '(iptables nftables
+                                                     glibc dnsmasq)))
+                                   (paths-sbin #$(map (lambda (input)
+                                                      (string-append #$input "/sbin"))
+                                                    '(dnsmasq)))
+                                   (site (string-append out "/lib/python"
+                                                        #$(version-major+minor
+                                                           (package-version
+                                                            python))
+                                                        "/site-packages")))
+                              (mkdir-p tools)
+                              (mkdir-p data)
+                              (mkdir-p apps)
+                              (mkdir-p bin)
+                              (copy-recursively "tools" tools)
+                              (copy-recursively "data" data)
+                              (install-file (string-append data
+                                             "/Waydroid.desktop")
+                                            (string-append apps))
+                              (substitute* (string-append apps
+                                                          "/Waydroid.desktop")
+                                (("/usr") lib))
+                              (install-file "waydroid.py" lib)
+                              (symlink (string-append lib "/waydroid.py")
+                                       (string-append bin "/waydroid"))
+                              (wrap-program (string-append bin "/waydroid")
+                                            #~("PYTHONPATH" ":" prefix
+                                               #$paths-bin))
+                              (substitute* (string-append out
+                                            "/lib/waydroid/data/scripts/waydroid-net.sh")
+                                (("/misc") ""))
+                              (wrap-program (string-append out
+                                             "/lib/waydroid/data/scripts/waydroid-net.sh")
+                                            #~("PATH" ":" prefix
+                                               #$(append paths-bin paths-sbin)))))))))
+    (inputs (list bash-minimal
+                  dnsmasq
+                  libgbinder
+                  glibc
+                  lxc
+                  nftables
+                  iptables
+                  python
+                  python-gbinder
+                  python-pygobject))
+    (home-page "https://waydro.id")
+    (synopsis "Container-based approach to boot a full Android system")
+    (description
+     "Waydroid uses Linux namespaces @code{(user, pid, uts, net,
+mount, ipc)} to run a full Android system in a container and provide Android
+applications.  The Android inside the container has direct access to needed
+underlying hardware.  The Android runtime environment ships with a minimal
+customized Android system image based on LineageOS.  The used image is
+currently based on Android 11.")
+    (license license:gpl3)))
+
 (define-public xen
   (package
     (name "xen")
-- 
2.36.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: v3-0003-gnu-Add-libglibutil.patch --]
[-- Type: text/x-patch; name=v3-0003-gnu-Add-libglibutil.patch, Size: 3486 bytes --]

From 9f9dbbfed1d8b7f999c92d940740b478d8d082a8 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Tue, 9 Nov 2021 22:34:39 +0100
Subject: [PATCH v3 3/6] gnu: Add libglibutil.

* gnu/packages/glib.scm (libglibutil): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 98267fcee5..19f69b3a5c 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -75,6 +76,7 @@ (define-module (gnu packages glib)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -848,6 +850,53 @@ (define-public glibmm-2.64
       (modify-inputs (package-propagated-inputs glibmm)
         (replace "libsigc++" libsigc++-2)))))
 
+(define-public libglibutil
+  (package
+    (name "libglibutil")
+    (version "1.0.65")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sailfishos.org/mer-core/libglibutil")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0sc8xw5cbxcicipjp6ycbgqppn31lzsll4r9j6b0zxd747dziv54"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags #~(list (string-append "CC="
+                                               #$(cc-for-target)))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)
+                        (add-after 'unpack 'remove-usr-prefix
+                          (lambda* _
+                            (substitute* "libglibutil.pc.in"
+                              (("/usr/include") (string-append #$output
+                                                               "/include")))
+                            (substitute* "Makefile"
+                              (("\\$\\(DESTDIR\\)") #$output)
+                              (("usr/") ""))))
+                        (add-after 'install 'install-dev
+                          (lambda* _
+                            (invoke "make" "install-dev"
+                                    (string-append "DESTDIR="
+                                                   #$output))))
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (chdir "test")
+                              (invoke "make"
+                                      (string-append "CC="
+                                                     #$(cc-for-target)))
+                              (chdir "..")))))))
+    (native-inputs (list pkg-config))
+    (inputs (list glib))
+    (home-page "https://git.sailfishos.org/mer-core/libglibutil")
+    (synopsis "GLib utilites")
+    (description "This package provides library of glib utilities.")
+    (license license:bsd-3)))
+
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid.
  2022-06-27  7:07     ` phodina via Guix-patches via
@ 2022-07-19 14:56       ` Maxime Devos
  2022-07-19 14:57       ` Maxime Devos
  1 sibling, 0 replies; 31+ messages in thread
From: Maxime Devos @ 2022-07-19 14:56 UTC (permalink / raw)
  To: phodina; +Cc: Ludovic Courtès, 51737@debbugs.gnu.org

phodina schreef op ma 27-06-2022 om 07:07 [+0000]:
> Should I also create a service for waydroid + test to check it's
> running?

That would be nice but Waydroid seems useful by itself even without a
service so not required I think.

Greetings,
Maxime.




^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid.
  2022-06-27  7:07     ` phodina via Guix-patches via
  2022-07-19 14:56       ` Maxime Devos
@ 2022-07-19 14:57       ` Maxime Devos
  2022-10-29 19:28         ` [bug#51737] [PATCH v3 1/8] " phodina via Guix-patches via
  1 sibling, 1 reply; 31+ messages in thread
From: Maxime Devos @ 2022-07-19 14:57 UTC (permalink / raw)
  To: phodina; +Cc: Ludovic Courtès, 51737@debbugs.gnu.org

phodina schreef op ma 27-06-2022 om 07:07 [+0000]:
> "Waydroid uses Linux namespace

In that case, sounds like you can restrict the 'supported-systems'
field to Linux systems, as it is pointless to try to install it on the
Hurd.

Greetings,
Maxime.




^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] Add Waydroid
  2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
                   ` (4 preceding siblings ...)
  2022-06-25 13:08 ` [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid phodina via Guix-patches via
@ 2022-10-18  9:32 ` dan
  2024-03-20 13:56 ` outlook user
  6 siblings, 0 replies; 31+ messages in thread
From: dan @ 2022-10-18  9:32 UTC (permalink / raw)
  To: 51737


[-- Attachment #1.1.1: Type: text/plain, Size: 147 bytes --]

hi,

just found this useful tool and would like to have it on guix.  what is 
currently blocking us from merging the patch series?

-- 
dan

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 8669 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-07-19 14:57       ` Maxime Devos
@ 2022-10-29 19:28         ` phodina via Guix-patches via
  2022-10-31 19:30           ` phodina via Guix-patches via
  0 siblings, 1 reply; 31+ messages in thread
From: phodina via Guix-patches via @ 2022-10-29 19:28 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org
  Cc: Ludovic Courtès, Maxime Devos, Liliana Marie Prikler

[-- Attachment #1: Type: text/plain, Size: 3184 bytes --]

Hello,

here're are updated patches.

The waydroid package now has field supported systems.

Also there is template for OS which adds important file in /etc/gbinder.d/anbox.conf.

The biggest concern is the hardcoded string for the Android LineageOS image (currently v17). It's possible to specifyt throught command line the URI for the images.

```
$ waydroid init --help
usage: waydroid init [-h] [-i IMAGES_PATH] [-f]
                     [-c SYSTEM_CHANNEL] [-v VENDOR_CHANNEL]
                     [-r ROM_TYPE] [-s SYSTEM_TYPE]

optional arguments:
  -h, --help            show this help message and exit
  -i IMAGES_PATH, --images_path IMAGES_PATH
                        custom path to waydroid images (default
                        in /var/lib/waydroid/images)
  -f, --force           re-initialize configs and images
  -c SYSTEM_CHANNEL, --system_channel SYSTEM_CHANNEL
                        custom system channel (options: OTA
                        channel URL; default is Official OTA
                        server)
  -v VENDOR_CHANNEL, --vendor_channel VENDOR_CHANNEL
                        custom vendor channel (options: OTA
                        channel URL; default is Official OTA
                        server)
  -r ROM_TYPE, --rom_type ROM_TYPE
                        rom type (options: "lineage", "bliss" or
                        OTA channel URL; default is LineageOS)
  -s SYSTEM_TYPE, --system_type SYSTEM_TYPE
                        system type (options: VANILLA, FOSS or
                        GAPPS; default is VANILLA)
```

The definition of the hardcoded URI can be found here [1]. If needed this can be patched out. User will specify the source themselves. There is section on how to build the Lineage OS image with waydroid patches. [2]

Also the image and other files are stored under the  `/var/lib/waydroid`. Maybe the image can be stored in the store (once we can build the Android images).

Since some of the operations such as `waydroid init` and `waydroid container start` require elevated priviledges it might be good to create a service as well.

The lxc is not directly input for the waydroid package but has to be in the profile. Do you think it might be better to put it as direct dependency?

Since Linux 5.18 the support for ASHMEM has been dropped [3] and you'll see some warning messages in the console. But the Waydroid project already works on MEMFD which is enabled in the kernel.

```
# waydroid container start
[18:15:51] Failed to load ashmem driver
[18:15:51] modprobe: FATAL: Module ashmem_linux not found in directory /run/booted-system/kernel/lib/modules/5.19.11
[18:15:51] Failed to load Ashmem driver
[18:15:51] Found session config on state: RUNNING, restart session
[gbinder] Service manager /dev/binder has appeared
```

Here you can see the screenshot  

1 https://github.com/waydroid/waydroid/blob/main/tools/config/__init__.py#L77
2 https://docs.waydro.id/development/compile-waydroid-lineage-os-based-images
3 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=721412ed3d819e767cac2b06646bf03aa158aaec

----
Petr

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: v3-0002-gnu-Add-linux-libre-arm64-waydroid.patch --]
[-- Type: text/x-patch; name=v3-0002-gnu-Add-linux-libre-arm64-waydroid.patch, Size: 2130 bytes --]

From bc0c9a3b0d172946a29d4cd648c0f357703221db Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 22 Dec 2021 02:35:46 +0100
Subject: [PATCH v3 2/8] gnu: Add linux-libre-arm64-waydroid.

* gnu/packages/linux.scm (linux-libre-arm64-waydroid): New variable.

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index a75ca8229e..5327d2721d 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1097,6 +1097,33 @@ (define-public linux-libre-arm-omap2plus-4.14
                      #:defconfig "omap2plus_defconfig"
                      #:extra-version "arm-omap2plus"))
 
+(define-public linux-libre-arm64-waydroid
+  (make-linux-libre* linux-libre-version
+                     linux-libre-gnu-revision
+                     linux-libre-source
+                     '("aarch64-linux")
+                     #:defconfig "defconfig"
+                     #:extra-version "arm64-generic"
+                     #:extra-options
+                     (append
+                      `(;; needed to fix the RTC on rockchip platforms
+                        ("CONFIG_RTC_DRV_RK808" . #t)
+                        ;; Pinebook display, battery, charger and usb
+                        ("CONFIG_DRM_ANALOGIX_ANX6345" . m)
+                        ("CONFIG_CHARGER_AXP20X" . m)
+                        ("CONFIG_INPUT_AXP20X_PEK" . m)
+                        ("CONFIG_CHARGER_AXP20X" . m)
+                        ("CONFIG_BATTERY_AXP20X" . m)
+                        ("CONFIG_PINCTRL_AXP209" . m)
+                        ("CONFIG_AXP20X_POWER" . m)
+                        ("CONFIG_AXP20X_ADC" . m)
+                        ;; Pinebook PRO battery and sound support
+                        ("CONFIG_BATTERY_CW2015" . m)
+                        ("CONFIG_CHARGER_GPIO" . m)
+                        ("CONFIG_SND_SOC_ES8316" . m))
+                        %waydroid-extra-linux-options
+                      %default-extra-linux-options)))
+
 (define-public linux-libre-arm64-generic
   (make-linux-libre* linux-libre-version
                      linux-libre-gnu-revision
-- 
2.37.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: v3-0005-gnu-Add-python-gbinder.patch --]
[-- Type: text/x-patch; name=v3-0005-gnu-Add-python-gbinder.patch, Size: 1777 bytes --]

From c696fc516bf7406d342594c1326f271172033568 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 10 Nov 2021 01:25:52 +0100
Subject: [PATCH v3 5/8] gnu: Add python-gbinder.

* gnu/packages/glib.scm (python-gbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 7155856cf3..7dd32d5b73 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -1034,6 +1034,33 @@ (define-public libglibutil
     (description "This package provides library of glib utilities.")
     (license license:bsd-3)))
 
+(define-public python-gbinder
+  (package
+    (name "python-gbinder")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/erfanoabdi/gbinder-python")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0jgblzakjgsy0cj93bmh5gr7qnl2xgsrm0wzc6xjvzry9lrbs360"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (replace 'build
+                          (lambda* _
+                            (invoke "python" "setup.py" "build_ext"
+                                    "--inplace" "--cython"))))))
+    (native-inputs (list python-cython pkg-config))
+    (inputs (list glib libgbinder libglibutil))
+    (home-page "https://github.com/erfanoabdi/gbinder-python")
+    (synopsis "Python bindings for libgbinder")
+    (description "This package provides Python bindings for libgbinder.")
+    (license license:gpl3+)))
+
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-- 
2.37.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: v3-0006-gnu-Add-python-pyclip.patch --]
[-- Type: text/x-patch; name=v3-0006-gnu-Add-python-pyclip.patch, Size: 1910 bytes --]

From c17f86882f11fbbc90dc125d0971894f865b513a Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Sat, 29 Oct 2022 10:05:53 +0200
Subject: [PATCH v3 6/8] gnu: Add python-pyclip.

* gnu/packages/python-xyz.scm (python-pyclip):New variable.

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 1c2f9d7b73..be4b93cb34 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -21296,6 +21296,36 @@ (define-public python-setuptools-rust
 Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
     (license license:expat)))
 
+(define-public python-pyclip
+  (package
+    (name "python-pyclip")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+			  "https://github.com/spyoungtech/pyclip/archive/refs/tags/v" version ".tar.gz"))
+              (sha256
+               (base32
+                "05psqms1varh0q9dlcp0wz6rpd79y7jhjpx1wk24vqnqdn9jrc30"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (system "Xvfb :1 &")
+               (setenv "DISPLAY" ":1")
+               (invoke "dbus-run-session" "--" "pytest")))))))
+	(native-inputs (list dbus python-pytest xorg-server-for-tests))
+	(inputs (list xclip wl-clipboard))
+    (home-page "https://github.com/aristocratos/btop")
+    (synopsis "Clipboard utilities supporting both binary and text data")
+    (description "This package provides clipboard dor both X11 and Wayland that
+supports binary and text data.")
+    (license license:asl2.0)))
+
 (define-public python-pyclipper
   (package
     (name "python-pyclipper")
-- 
2.37.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: v3-0003-gnu-Add-libglibutil.patch --]
[-- Type: text/x-patch; name=v3-0003-gnu-Add-libglibutil.patch, Size: 3540 bytes --]

From c4412fbc65f1992909cc45ed66ebcb018c66a377 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Tue, 9 Nov 2021 22:34:39 +0100
Subject: [PATCH v3 3/8] gnu: Add libglibutil.

* gnu/packages/glib.scm (libglibutil): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 61040c91e7..8c024c2df6 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -76,6 +77,7 @@ (define-module (gnu packages glib)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -928,6 +930,54 @@ (define-public glibmm-2.64
       (modify-inputs (package-propagated-inputs glibmm)
         (replace "libsigc++" libsigc++-2)))))
 
+(define-public libglibutil
+  (package
+    (name "libglibutil")
+    (version "1.0.65")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sailfishos.org/mer-core/libglibutil")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0sc8xw5cbxcicipjp6ycbgqppn31lzsll4r9j6b0zxd747dziv54"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags #~(list (string-append "CC="
+                                               #$(cc-for-target))
+                                (string-append "DESTDIR="
+                                               #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)
+                        (add-after 'unpack 'remove-usr-prefix
+                          (lambda* _
+                            (substitute* "libglibutil.pc.in"
+                              (("/usr/include") (string-append #$output
+                                                               "/include")))
+                            (substitute* "Makefile"
+                              (("usr/") ""))))
+                        (add-after 'install 'install-dev
+                          (lambda* _
+                            (invoke "make" "install-dev"
+                                    (string-append "DESTDIR="
+                                                   #$output))))
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (chdir "test")
+                              (invoke "make"
+                                      (string-append "CC="
+                                                     #$(cc-for-target)))
+                              (chdir "..")))))))
+    (native-inputs (list pkg-config))
+    (inputs (list glib))
+    (home-page "https://git.sailfishos.org/mer-core/libglibutil")
+    (synopsis "GLib utilites")
+    (description "This package provides library of glib utilities.")
+    (license license:bsd-3)))
+
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-- 
2.37.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: v3-0008-gnu-Add-waydroid-template.patch --]
[-- Type: text/x-patch; name=v3-0008-gnu-Add-waydroid-template.patch, Size: 4885 bytes --]

From cd790fe1c9d29c65ba5a05bdd5d82410c6a3d040 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Sun, 23 Oct 2022 17:08:03 +0200
Subject: [PATCH v3 8/8] gnu: Add waydroid template.

* gnu/system/examples/waydroid.tmpl: New file.

diff --git a/gnu/system/examples/waydroid.tmpl b/gnu/system/examples/waydroid.tmpl
new file mode 100644
index 0000000000..f9145e88b6
--- /dev/null
+++ b/gnu/system/examples/waydroid.tmpl
@@ -0,0 +1,114 @@
+;; This is an operating system configuration template
+;; for a "desktop" setup with GNOME and Xfce where the
+;; root partition is encrypted with LUKS, and a swap file.
+
+(use-modules (gnu) (gnu system nss) (guix utils))
+(use-service-modules desktop sddm xorg)
+(use-package-modules certs gnome linux virtualization)
+
+(operating-system
+  (host-name "antelope")
+  (timezone "Europe/Paris")
+  (locale "en_US.utf8")
+
+  ;; Choose US English keyboard layout.  The "altgr-intl"
+  ;; variant provides dead keys for accented characters.
+  (keyboard-layout (keyboard-layout "us" "altgr-intl"))
+
+  (kernel linux-libre-waydroid)
+  ;; Use the UEFI variant of GRUB with the EFI System
+  ;; Partition mounted on /boot/efi.
+  (bootloader (bootloader-configuration
+                (bootloader grub-efi-bootloader)
+                (targets '("/boot/efi"))
+                (keyboard-layout keyboard-layout)))
+
+  ;; Specify a mapped device for the encrypted root partition.
+  ;; The UUID is that returned by 'cryptsetup luksUUID'.
+  (mapped-devices
+   (list (mapped-device
+          (source (uuid "12345678-1234-1234-1234-123456789abc"))
+          (target "my-root")
+          (type luks-device-mapping))))
+
+  (file-systems (append
+                 (list (file-system
+                         (device (file-system-label "my-root"))
+                         (mount-point "/")
+                         (type "ext4")
+                         (dependencies mapped-devices))
+                       (file-system
+                         (device (uuid "1234-ABCD" 'fat))
+                         (mount-point "/boot/efi")
+                         (type "vfat")))
+                 %base-file-systems))
+
+  ;; Specify a swap file for the system, which resides on the
+  ;; root file system.
+  (swap-devices (list (swap-space
+                       (target "/swapfile"))))
+
+  ;; Create user `bob' with `alice' as its initial password.
+  (users (cons (user-account
+                (name "bob")
+                (comment "Alice's brother")
+                (password (crypt "alice" "$6$abc"))
+                (group "students")
+                (supplementary-groups '("wheel" "netdev"
+                                        "audio" "video")))
+               %base-user-accounts))
+
+  ;; Add the `students' group
+  (groups (cons* (user-group
+                  (name "students"))
+                 %base-groups))
+
+  ;; This is where we specify system-wide packages.
+  (packages (append (list
+                     ;; Waydroid
+                     waydroid
+                     lxc
+                     ;; for HTTPS access
+                     nss-certs
+                     ;; for user mounts
+                     gvfs)
+                    %base-packages))
+
+  ;; Add GNOME and Xfce---we can choose at the log-in screen
+  ;; by clicking the gear.  Use the "desktop" services, which
+  ;; include the X11 log-in service, networking with
+  ;; NetworkManager, and more.
+  (services (if (target-x86-64?)
+                (append (list (service gnome-desktop-service-type)
+                (service special-files-service-type
+                 `(("/etc/gbinder.d/anbox.conf" ,(plain-file "anbox.conf"
+"
+[Protocol]
+/dev/binder = aidl2
+/dev/vndbinder = aidl2
+/dev/hwbinder = hidl
+
+[ServiceManager]
+/dev/binder = aidl2
+/dev/vndbinder = aidl2
+/dev/hwbinder = hidl
+"))))
+                              (set-xorg-configuration
+                               (xorg-configuration
+                                (keyboard-layout keyboard-layout))))
+                        %desktop-services)
+
+                ;; FIXME: Since GDM depends on Rust (gdm -> gnome-shell -> gjs
+                ;; -> mozjs -> rust) and Rust is currently unavailable on
+                ;; non-x86_64 platforms, we use SDDM and Mate here instead of
+                ;; GNOME and GDM.
+                (append (list (service mate-desktop-service-type)
+                              (service xfce-desktop-service-type)
+                              (set-xorg-configuration
+                               (xorg-configuration
+                                (keyboard-layout keyboard-layout))
+                               sddm-service-type))
+                        %desktop-services)))
+
+  ;; Allow resolution of '.local' host names with mDNS.
+  (name-service-switch %mdns-host-lookup-nss))
-- 
2.37.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: v3-0004-gnu-Add-libgbinder.patch --]
[-- Type: text/x-patch; name=v3-0004-gnu-Add-libgbinder.patch, Size: 3252 bytes --]

From 958ed4e0679d397c0ecd5c3728f120a8129d5b30 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Tue, 9 Nov 2021 22:41:30 +0100
Subject: [PATCH v3 4/8] gnu: Add libgbinder.

* gnu/packages/glib.scm (libgbinder): New variable.

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 8c024c2df6..7155856cf3 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -930,6 +930,62 @@ (define-public glibmm-2.64
       (modify-inputs (package-propagated-inputs glibmm)
         (replace "libsigc++" libsigc++-2)))))
 
+(define-public libgbinder
+  (package
+    (name "libgbinder")
+    (version "1.1.23")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mer-hybris/libgbinder")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "12nw2ihd2xhpvdh0jlyacskqmbdxhnrm5pnz30v4mkyg9kz4xhdc"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags #~(list (string-append "CC="
+                                               #$(cc-for-target))
+                                (string-append "DESTDIR="
+                                               #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)
+                        (add-after 'unpack 'fix-pkg-config-in
+                          (lambda* _
+                            (substitute* "Makefile"
+                              (("usr/") ""))
+                            (substitute* "libgbinder.pc.in"
+                              (("@libdir@") (string-append #$output "/lib"))
+                              (("/usr/include") (string-append #$output
+                                                               "/include")))))
+                        (add-after 'install 'install-dev
+                          (lambda* _
+                            (invoke "make" "install-dev"
+                                    (string-append "DESTDIR="
+                                                   #$output))))
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (chdir "test")
+                              (invoke "make"
+                                      (string-append "CC="
+                                                     #$(cc-for-target)))
+                              (chdir "..")))))))
+    (native-inputs (list bison flex pkg-config))
+    (inputs (list glib libglibutil))
+    (home-page "https://github.com/mer-hybris/libgbinder")
+    (synopsis "GLib-style interface to binder")
+    (description
+     "This package provides GLib-style interface to binder:
+@enumerate
+@item Integration with GLib event loop
+@item Detection of 32 vs 64 bit kernel at runtime
+@item Asynchronous transactions that don't block the event thread
+@item Stable service manager and low-level transation APIs
+@end enumerate")
+    (license license:bsd-3)))
+
 (define-public libglibutil
   (package
     (name "libglibutil")
-- 
2.37.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: v3-0007-gnu-Add-waydroid.patch --]
[-- Type: text/x-patch; name=v3-0007-gnu-Add-waydroid.patch, Size: 5831 bytes --]

From a0d79a75adb74709ee41b514530a528e0d02b86f Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Wed, 10 Nov 2021 02:21:08 +0100
Subject: [PATCH v3 7/8] gnu: Add waydroid.

* gnu/packages/virtualization.scm (waydroid): New variable.

diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index a2a25025f6..09fe040333 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -2099,6 +2099,102 @@ (define-public bochs
 DOS or Microsoft Windows.")
     (license license:lgpl2.0+)))
 
+(define-public waydroid
+  (package
+    (name "waydroid")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/waydroid/waydroid")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ssqlsnhmpzaq2n9rbkfn3d2ml4vmima0az6gakknjc2q6bnpza9"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (delete 'build)
+                        (delete 'check)
+                        (replace 'install
+                          (lambda* (#:key outputs inputs #:allow-other-keys)
+                            (let* ((lib (string-append #$output
+                                                       "/lib/waydroid"))
+                                   (tools (string-append lib "/tools"))
+                                   (data (string-append lib "/data"))
+                                   (apps (string-append #$output
+                                                        "/share/applications"))
+                                   (bin (string-append #$output "/bin"))
+                                   (paths-bin (map (lambda (input)
+                                                     (string-append input
+                                                                    "/bin"))
+                                                   '(#$which
+                                                     #$glibc)))
+                                   (paths-sbin (map (lambda (input)
+                                                      (string-append input
+                                                                     "/sbin"))
+                                                    '(#$iptables
+                                                      #$iproute
+                                                      #$nftables
+                                                      #$dnsmasq)))
+                                   (site (string-append #$output "/lib/python"
+                                                        #$(version-major+minor
+                                                           (package-version
+                                                            python))
+                                                        "/site-packages")))
+                              (mkdir-p tools)
+                              (mkdir-p data)
+                              (mkdir-p apps)
+                              (mkdir-p bin)
+                              (copy-recursively "tools" tools)
+                              (copy-recursively "data" data)
+                              (install-file (string-append data
+                                             "/Waydroid.desktop")
+                                            (string-append apps))
+                              (substitute* (string-append apps
+                                                          "/Waydroid.desktop")
+                                (("/usr")
+                                 lib))
+                              (install-file "waydroid.py" lib)
+                              (symlink (string-append lib "/waydroid.py")
+                                       (string-append bin "/waydroid"))
+                              (wrap-program (string-append bin "/waydroid")
+                                            `("GUIX_PYTHONPATH" ":" prefix
+                                              ,paths-bin))
+                              (substitute* (string-append #$output
+                                            "/lib/waydroid/data/scripts/waydroid-net.sh")
+                                (("/misc")
+                                 ""))
+                              (wrap-program (string-append #$output
+                                             "/lib/waydroid/data/scripts/waydroid-net.sh")
+                                            `("PATH" ":" prefix
+                                              ,(append paths-bin paths-sbin)))))))))
+    (inputs (list bash-minimal
+                  dnsmasq
+                  libgbinder
+                  glibc
+                  lxc
+                  nftables
+                  iproute
+                  iptables
+                  python
+                  python-gbinder
+                  python-pyclip
+                  python-pygobject
+                  which))
+    (supported-systems '("aarch64-linux" "x86_64-linux"))
+    (home-page "https://waydro.id")
+    (synopsis "Container-based approach to boot a full Android system")
+    (description
+     "Waydroid uses Linux namespaces @code{(user, pid, uts, net,
+mount, ipc)} to run a full Android system in a container and provide Android
+applications.  The Android inside the container has direct access to needed
+underlying hardware.  The Android runtime environment ships with a minimal
+customized Android system image based on LineageOS.  The used image is
+currently based on Android 11.")
+    (license license:gpl3)))
+
 (define-public xen
   (package
     (name "xen")
-- 
2.37.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: v3-0001-gnu-Add-linux-libre-waydroid.patch --]
[-- Type: text/x-patch; name=v3-0001-gnu-Add-linux-libre-waydroid.patch, Size: 88975 bytes --]

From d2387eacf343cdbdf178de279f2a00e73fa55b74 Mon Sep 17 00:00:00 2001
From: Petr Hodina <phodina@protonmail.com>
Date: Thu, 11 Nov 2021 19:26:41 +0100
Subject: [PATCH v3 1/8] gnu: Add linux-libre-waydroid.

* gnu/packages/linux.scm (linux-libre-waydroid,
  waydroid-extra-linux-options): New variables.

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index ff87674260..a75ca8229e 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -742,6 +742,13 @@ (define %bpf-extra-linux-options
     ;; kheaders module
     ("CONFIG_IKHEADERS" . #t)))
 
+(define %waydroid-extra-linux-options
+  `(;; Modules required for waydroid:
+   ("CONFIG_ANDROID" . #t)
+   ("CONFIG_ANDROID_BINDER_IPC" . #t)
+   ("CONFIG_ANDROID_BINDERFS" . #t)
+   ("CONFIG_ANDROID_BINDER_DEVICES" . "binder,hwbinder,vndbinder")))
+
 (define (config->string options)
   (string-join (map (match-lambda
                       ((option . 'm)
@@ -1174,6 +1181,24 @@ (define-public linux-libre-mips64el-fuloong2e
                       `(("CONFIG_OVERLAY_FS" . m))
                       %default-extra-linux-options)))
 
+(define-public linux-libre-waydroid
+  (let ((base-linux-libre
+         (make-linux-libre*
+          linux-libre-version
+          linux-libre-gnu-revision
+          linux-libre-source
+          '("x86_64-linux" "i686-linux" "armhf-linux"
+            "aarch64-linux" "riscv64-linux")
+          #:extra-version "linux"
+          #:configuration-file kernel-config
+          #:extra-options
+          (append %waydroid-extra-linux-options
+                  %default-extra-linux-options))))
+    (package
+      (inherit base-linux-libre)
+         (name "linux-libre-waydroid")
+      (inputs `(("cpio" ,cpio) ,@(package-inputs base-linux-libre))))))
+
 (define-public linux-libre-with-bpf
   (let ((base-linux-libre
          (make-linux-libre*

base-commit: 5dc5d6fa8136f067c85295d88018a7cd8b7cfe40
prerequisite-patch-id: 6fd01b4846454247ece2bbaea5a46361cc6e33df
prerequisite-patch-id: 4ed7bbb8dfb7bc2cba72cc19396da4ae0f81a25d
prerequisite-patch-id: 950b861efd5941f0a164673b4cc6064e011922c7
prerequisite-patch-id: 92042892554f54e743f3d5f9f25a3235fcd979f8
prerequisite-patch-id: 27871d09b8facb1fd8e55b982ce2d91b135482e1
prerequisite-patch-id: 38273cdd9a9ddf1977f06c8b183033346231642f
prerequisite-patch-id: 13e01740444278ed93c12b578d03cbf1ffd44ccb
prerequisite-patch-id: 7ed37c269df53c69b61929d59e236123d0af37cf
prerequisite-patch-id: 2b6c538244ad416c8f904dd95b6a510f2e4dcfe0
prerequisite-patch-id: e3356d90ed3b1a2285176424b4ff96f11a128139
prerequisite-patch-id: d03cd2519b3aecd89333d7a1ae4945fa8b88da8c
prerequisite-patch-id: dae588b190217049ea965878130169449c733c5b
prerequisite-patch-id: 4558cc94b32dfbc5882f4a6298c851ebd435b754
prerequisite-patch-id: 7652acb6af23789c6e94a1c96e31b923faef2673
prerequisite-patch-id: 4b96be248424b470ebb46391f7b757600b557964
prerequisite-patch-id: 55e839f7bc254df9134d1d8107a386a19c83122b
prerequisite-patch-id: 39132f3e9a8804557ac98dd8ab144e39c0b53021
prerequisite-patch-id: 65a9dd33a9c3cea26836a5d79fc1e2d29646a251
prerequisite-patch-id: dd7d7371c626dd2e0269934b0295d0f7fb8f2286
prerequisite-patch-id: 8672335cfacc63dc3426ae5eaaa79604cb990b85
prerequisite-patch-id: 027ed606ea2261551862313b43272e4f6f8c3dfd
prerequisite-patch-id: 7e009363d1a0ef8ab443e423c9c02d10b3dfb4d8
prerequisite-patch-id: ae0e8812691f657f57c6e95cb2483c0e3a705be8
prerequisite-patch-id: 2ba5ed755d0bb4c635f28c29030e2088d9e96a74
prerequisite-patch-id: 79a0bc77332532d5f25a6007ba26c481a12e1680
prerequisite-patch-id: a52fa5348533cd65856ee3d4085089399132dc3b
prerequisite-patch-id: d41ede4fc59f43b55e47998e9a32d39ffeae6dbd
prerequisite-patch-id: 851b01c28cd00a6b4083fb80d9c000d3e98a4ef3
prerequisite-patch-id: 735da2783ce0f969780911c4b9d9bd50b824468c
prerequisite-patch-id: cdf388e9da0475015e6280e267f62b2b13630a04
prerequisite-patch-id: bdab45c7f8fcaa7b3360b1003b190ac9c3b64427
prerequisite-patch-id: 6e3b14c9985d4e5727554f6fe8d6bdb126f7b0f1
prerequisite-patch-id: 8250185d0e01ab1d8c5c94ac1cd5282f88dbfac9
prerequisite-patch-id: ed5e7e9917892047326146444c4ecca0ed99d632
prerequisite-patch-id: 1009e75ae547a2732759e83f17c2b0337fe7c83d
prerequisite-patch-id: 38309b3893cbdef0fd9728adac8ef5563c308c83
prerequisite-patch-id: 197cd1b5f94ac2ba858695bb109500e28fd429c6
prerequisite-patch-id: 8866b66f91c1ebd7f1930eae5a67393f313fdb33
prerequisite-patch-id: 0074bffce6c0749f2ab05a5a733be73c438fb6d1
prerequisite-patch-id: a73c0b11f9198e68332219439a7a43c25764f19d
prerequisite-patch-id: b7ff38ce2238102ca1f98158465730a087996319
prerequisite-patch-id: 4e68f2f26ab442c7a2b7bd91d80a3e18fe80307e
prerequisite-patch-id: e24e494f4681609da299e7e9bc7b3dc05e84de12
prerequisite-patch-id: 5e1782fa1e7a4cb88c989892dd74d2e9cfec4f7a
prerequisite-patch-id: f1d592fe0f11d90f1d52b23686559ae10169e161
prerequisite-patch-id: 5db61640fa93da00665b89d024379ea7dee5e54f
prerequisite-patch-id: 68126f85a2b60b108a74d6a7961bebb0e60a052f
prerequisite-patch-id: 4c213501cb615949c1b5c81b0571ae9487298a31
prerequisite-patch-id: 8abf76659fe88d2dd53ab011f3578be028b90e7e
prerequisite-patch-id: e9472db485c7b6426719cb8b436ed646743558e7
prerequisite-patch-id: 6997126fcff08083ae744af71b018ad065e456ce
prerequisite-patch-id: 653bec4cc2a1b1d14ce4c90589b9bcded162fe3d
prerequisite-patch-id: be902351cb0b898553fc73e345c814250e5c337a
prerequisite-patch-id: e658b0a088a61736f1a7be28b75c2c976f148356
prerequisite-patch-id: 376cc68a10354ba102dd69f0b63c48fdc7425ad7
prerequisite-patch-id: 556117c1637e906d9da41bb4dbc6a567d20d629f
prerequisite-patch-id: 4e33b8d043f7e857c1b8ac740a24fe6630de6023
prerequisite-patch-id: 6f9b2d08cddacb04f1e48cd3ccba586765352bb1
prerequisite-patch-id: 1b6137b7de32aa82847b351f09a9bbb51281eb6e
prerequisite-patch-id: 9e587ff59e13209e948e447b1602ee77ed160490
prerequisite-patch-id: 68c7c850192b918547bc3a263e786f73a2c6d7b4
prerequisite-patch-id: 66ecd159a4865a5a8898d9fdb238a6aa24765a84
prerequisite-patch-id: 7545b6bfbcc200cb97c811938de138ac3b08ee08
prerequisite-patch-id: 4b30753ccd2d48efcf25f2a675d2720d1b9f2b13
prerequisite-patch-id: 29d252d5f6dc19a54732ac35e8347325d4205cc2
prerequisite-patch-id: 2f25e4de9554d37ea26d92e295810bfdbeee5e67
prerequisite-patch-id: ec74730008d17a110255a40c29880ca33851941e
prerequisite-patch-id: 38e70a492197598601285068565b69b02d454876
prerequisite-patch-id: c03a52752525c345ccda3219950eb074a75d01e8
prerequisite-patch-id: 1a6b00ccd7d47bb76ca9bd0171b4e030d3af2e17
prerequisite-patch-id: 85b52a9bc0ad8acf7d8cc5b6bae84e0f68282f69
prerequisite-patch-id: 9c1e0fd17dd4a652fec1aa14bff2dead453b799d
prerequisite-patch-id: 721cc6416217b7d6c45a64c05462b92c5aae0916
prerequisite-patch-id: a77bc7552513b57fb5bd83c3d450748a0790b591
prerequisite-patch-id: 0a7b49d181989b7282079bbc23bd6adb51ee760f
prerequisite-patch-id: 4f8feb3648e811792b1770cf49faaeb1060df737
prerequisite-patch-id: c57c3a160240dd847a2d0da14df813f06f7686d9
prerequisite-patch-id: 8ac9cb80a6789b87c31f6dac784ae3e74a6a459b
prerequisite-patch-id: 9bbcc67f11d7a9a9d71e21daa7c2f5c1c08635f4
prerequisite-patch-id: b80401112a833e8654d8376119760b5039cb01e6
prerequisite-patch-id: 864e9937a9635b9e4d464a067fe258d0069850ed
prerequisite-patch-id: a4e42f72654e69b63223fb45c0bf20a7c9c750bc
prerequisite-patch-id: b94e809f9be5f006390f5a670f945c784763581b
prerequisite-patch-id: 4989377c9735cc986b6acedb3b6dc8cb6ef7b305
prerequisite-patch-id: be439b070a930b9b56de1108c4a7c2acac20723a
prerequisite-patch-id: ea54b43910e9b03e9a0a4b9b7b043abbd180c235
prerequisite-patch-id: 179328402f6b0c03bbcccb466961ec63c69f1f8d
prerequisite-patch-id: f68eee491a60d917107e71020fd1125c0ca86b57
prerequisite-patch-id: f6d0fd004c0e86361fa8d22fc370205a42ea1639
prerequisite-patch-id: 120e4e697c9fec7aa8a9d1825ba58094068bcb83
prerequisite-patch-id: 6777c50374ae5e27eee349d91695b750d413cae4
prerequisite-patch-id: a4d42892ffb7cd908d2873e44e086c7241e5a71f
prerequisite-patch-id: 6c6c59fc22cee43f338f472301633c55006258e9
prerequisite-patch-id: 24656265c9244b0904c5c7eaf34b3bb0c839f67d
prerequisite-patch-id: c5245ecbd73fb28ce5ed63f265fc89d661ee9f13
prerequisite-patch-id: 1d710b1f90cab4aeecb51021f603ebdcc0945093
prerequisite-patch-id: 9d0455330a456cdae472d3c757068a95b348f4a4
prerequisite-patch-id: 73fbbecf9570f08b4255fac717046993d2143a61
prerequisite-patch-id: c15db8ad5b2a58a691fa275e0c341fe2316460c0
prerequisite-patch-id: a57022331e760a680de5479eecf081910d5cf356
prerequisite-patch-id: d0c109b7a73ac27c9382796f1e689bf79d216a84
prerequisite-patch-id: 915a33f0a8e18cd6f89b01cee5a84ed9adaa8c14
prerequisite-patch-id: 2766f49f779386cf1d38966b6431ef04f2638dc7
prerequisite-patch-id: 999f2660ecae25a39d657bf6b335e5ea042e0c33
prerequisite-patch-id: 991ef421c0432566eeb11a190575b2efb6b9f2de
prerequisite-patch-id: b864b46f78bbf3e567f61917d3f13ec0a7c806e4
prerequisite-patch-id: d3c9a98f815735bbed4e16f6243818bd6ae8fa4a
prerequisite-patch-id: 94b9ec2e78319f91122f9e4e72306f6db75a56fa
prerequisite-patch-id: 1bfb143d062c1d44b3ca5cf32d3426932d0e24d2
prerequisite-patch-id: b47d3675a00ba88fe9711641d2288bb67184497e
prerequisite-patch-id: 26a0e780f8b7fba5eef005d61740ef235766eb38
prerequisite-patch-id: ea27cd8efe578f2df3ab5f8590b8c6cae7185605
prerequisite-patch-id: 2ca375e7c247f97c319b7090a6747fb7d796d7ce
prerequisite-patch-id: 32c581a531f907e729b69cd354e19f6d2a6d036e
prerequisite-patch-id: 773fb3f31820fb4123f363af648d055fa764b010
prerequisite-patch-id: 1dd3d30c4f74fa459f06a2719dbf611b1f958990
prerequisite-patch-id: 38363a594f3b4fd1358414fc1a371ae542f6619a
prerequisite-patch-id: c1651664644a92cd3c5773a9e2646a59afa93db9
prerequisite-patch-id: c00a752d5b07631838e1f55536efcd2e3ad86b8d
prerequisite-patch-id: 4ee83660ca78af60a0f41c181e5cf643387b9c4e
prerequisite-patch-id: d100862fd916af75a44eb40ad475ef231a51965f
prerequisite-patch-id: 52ad2c232a30b91d6c0762fb84b0a839f769df29
prerequisite-patch-id: 10460678cda15e87026e9d3ece9eb0c842e91c94
prerequisite-patch-id: 5f42df183b5feb2eb76fa79659e31ddd13ff7558
prerequisite-patch-id: a21fc9da29f2da85b8fd224823e0228bcbcc7809
prerequisite-patch-id: 0afccc8d6244cddc7b85439b3e32c8888df4c6af
prerequisite-patch-id: 481b43d3567f2499fc282c80b80ce1ffa0f61792
prerequisite-patch-id: 1585098cb9fb8fb129e536e85bf4c1bbb670da80
prerequisite-patch-id: acb027446acd4c3c9fe1274b79e331c612f73d76
prerequisite-patch-id: 161d4e1d5111cc7bd207b3ec604e0bb1f1cddd2b
prerequisite-patch-id: 4e7e646afa96057a13cb7b48c6405d5400fa4c46
prerequisite-patch-id: 5e86f8aff502fc443d25ae7aedac2c74650ab16e
prerequisite-patch-id: ffdd4e7fea40b4ccba21390376a8b5058016b006
prerequisite-patch-id: 8e31b074bc62635e2d1c08161a63844c475144c5
prerequisite-patch-id: 59a236adcca9f9541c54bf54da5d773a945e80f5
prerequisite-patch-id: 33aff1fe5efa500acdb4a8c5ab80237932f268ee
prerequisite-patch-id: 01e79ca0dca100cdb9b40fcbeb4e96f395133e28
prerequisite-patch-id: 1bcffedbb613c04262a0c088ccd772c87fa239db
prerequisite-patch-id: 71902814d2e15b49583adef1862699bb4920df12
prerequisite-patch-id: 3e6b01729ec378e75aa23383e4cc155317fc82db
prerequisite-patch-id: 81eeafeed3192f45f3b9be119cf9d6018736f05a
prerequisite-patch-id: 9ba248311c31e2c0520afd01dc9f874c29ff3a00
prerequisite-patch-id: 9e8dec4135669ed23694bee7ef495199dee8cbb0
prerequisite-patch-id: 908db1798f9db6479460f41bc05fe93ca8666575
prerequisite-patch-id: a93a8a0a0582b95cca4a35a0520f81adbf51fc8f
prerequisite-patch-id: 12b1cfa0239f259df8273a597787e991c8408a36
prerequisite-patch-id: c137ee0c85a06e783684d42513c2e388075a44d4
prerequisite-patch-id: 44f40178a07c5b50a9e97bfb73f0b1455e673847
prerequisite-patch-id: be7558b7400bc4b68d53849c591bb058875dc8b5
prerequisite-patch-id: 90026ffc69498da8a7a4dc206a4adcf1a5ebe010
prerequisite-patch-id: ab30eefd6b0fdbbc3b51d01026e9ac3965a8b7d7
prerequisite-patch-id: 7013d1d2bed603b06058539d364969e98b8c7b26
prerequisite-patch-id: 99bd069194fa1e235ea481cdd86bc7e543926a41
prerequisite-patch-id: a941b6998a7f730e2fa617fb65c6dc33dcd8d606
prerequisite-patch-id: 476ea0f706b71eddb28733408dfbda2a63437cda
prerequisite-patch-id: 22f97d2d935390641e03ff8383e4511e0602dc75
prerequisite-patch-id: c8951b057b056ed9081ddbb5cb70a9426124dc14
prerequisite-patch-id: ccefa3097b29f86205ebb7bbcf9f413ce576dc3f
prerequisite-patch-id: 2039a7d88505bc044f7e2ea05bed1dbc6ebfd8da
prerequisite-patch-id: 0a45558010783d98dbbef16c86fcdff561216a0f
prerequisite-patch-id: a67c7bae5bfdbd4b3d1b042bb6b5722fa58da06e
prerequisite-patch-id: e569248d110b8bb459b6d0120859f52d2665330d
prerequisite-patch-id: 9920e4c05c9125bbb3da0346124e110a4159e8bf
prerequisite-patch-id: 7602506f60b09e2f1ce523c8c736031509dc3079
prerequisite-patch-id: 7a6b88c073b270de0cb83a396ae971d6a013462a
prerequisite-patch-id: 9bb937a27ad3dffc8f416dc631f13c55e7fac0a1
prerequisite-patch-id: 20f397bb83e6519b880a420cd3fd7f3842b82473
prerequisite-patch-id: d0979b3e46221b459be89348a5e67ce1022b2257
prerequisite-patch-id: 8055b696f359d1858f1d8545d5ea53ae0bd65211
prerequisite-patch-id: dcd007b0c393b279f8db051d3888385f5b3a66a3
prerequisite-patch-id: b0654736f63e05f1ed40086052f9a52470ab9925
prerequisite-patch-id: 3e5037866475779bbbf19c338d44406099a76cc7
prerequisite-patch-id: f2ab704174de6f736385537813d1f02347476754
prerequisite-patch-id: 50d251bf78c52b34defe794f517c022957f302c7
prerequisite-patch-id: 8200823c50016f610823a165ba5bab676303dca4
prerequisite-patch-id: 73139afdb67def8fe3feae0474cee7cfd8b2a595
prerequisite-patch-id: ffc1879438c727f74b9de0be1c74d50c4360b88b
prerequisite-patch-id: 9cab1047d36fe11b5b60d81d920aa48c5e9eca94
prerequisite-patch-id: cfc088e89d57f651b41f27c8c43e29f774048a20
prerequisite-patch-id: 49c68291d3212f1bc7beec78cffc27acda35b8e1
prerequisite-patch-id: a02ce7e9a3687d1e83d8eff9aca7787755ccbae5
prerequisite-patch-id: 4cec4776400702451d1e2ed437aee8fb3683c7e1
prerequisite-patch-id: 13e3ffdd2e3374f76eb0db56556c433724b705e8
prerequisite-patch-id: 6d6852b41c75d409a2e9ec9db61204d007c44498
prerequisite-patch-id: 3cd10f56a98be094dbffceab1be20d7feda62ea7
prerequisite-patch-id: 94b89a4b8733a645502e5fec5d5409e96fc13501
prerequisite-patch-id: 9961081c78d6a6aebd9e839556d88716fc1830d8
prerequisite-patch-id: e84f1456a3c84feb6f19353d90845a3a953420a9
prerequisite-patch-id: cecf9be8f298fe71d3005bd520bdcbf112b80ed3
prerequisite-patch-id: 3ad27ce747f94ae20146dc6782848ce113ba0ffa
prerequisite-patch-id: 806c98be67cd77280e5e850267c1b03373764a24
prerequisite-patch-id: ba4266ee6e0e1bda9c54859a4022b7b7a1f357ed
prerequisite-patch-id: d19decc6f2d688ebb0841812617119d4bcbe75cf
prerequisite-patch-id: 38e5ed9177c5842c2990744844d48ebf381db96b
prerequisite-patch-id: 367208f24967640c43782ee8a54b59d7ee14d8c7
prerequisite-patch-id: 5f96c015e6186a2ed6771ccbbc57d29dd05917fd
prerequisite-patch-id: bc7f7fd44cdd7d2fd06bf66c32b450ae510cfdb4
prerequisite-patch-id: 361e568230d24520e3e02bf6136bc0b7b682aeec
prerequisite-patch-id: e57ad16cded3bb9f2e08cf8795a3bedbc4dacc32
prerequisite-patch-id: 5280aeb8074905fe48dd45d638860f66b56a3d18
prerequisite-patch-id: ae9eaffc2df7eaca1c72633ee2e615f64bf30a08
prerequisite-patch-id: a83742b4291e943ab7598c482e39676124013122
prerequisite-patch-id: d18234f66ebc28aaab1ee1f489c2eca6b9330615
prerequisite-patch-id: b71190d86118b85a61ebfdc882b5daf0a4bca408
prerequisite-patch-id: 3b68b119d64dc8b93eeb89eb8b7d40fa1b75e5f7
prerequisite-patch-id: f7d78956475f3d9de22555e53181c465c9f48078
prerequisite-patch-id: f7b43e693b126d4998b7d7d46eb3f24fb58fca85
prerequisite-patch-id: e47ca0b858dcbf7474fa79ba3502665feac09340
prerequisite-patch-id: 56e0612a6f087b585f3bbbb7e92bf033acc69254
prerequisite-patch-id: 0e1c995f9571b47b2edcdf3dffec2bdd93ccebb6
prerequisite-patch-id: 3659522381197e127ae1b344c28b95e3ebd030a0
prerequisite-patch-id: 4a9e5f5bce3e58db7224f68c599218dc2bf31523
prerequisite-patch-id: 650c3c90d0a8a4115e288066f1aa47dd5cc935fd
prerequisite-patch-id: 367e6b3094d2e632d797865080965133f9553bd6
prerequisite-patch-id: 3b8a947ef06c33a1592a618e0802e799c8555c5a
prerequisite-patch-id: aca9f5fa063eb981d74efce1e130e9b494b41f8c
prerequisite-patch-id: e5c651c846d703be263e17418adfbaadf40ee229
prerequisite-patch-id: e7bfaeee42163efcdbdcee213a2a00519879ce48
prerequisite-patch-id: 9fa9f221f7f39ea880c1636ff0b834c3eda68e9b
prerequisite-patch-id: 920d3d8106e2590950996ffcdddbadd1a3084d87
prerequisite-patch-id: cec5e0ac540e748867f5e1ef8fb540b92bedeb84
prerequisite-patch-id: bf531180cfc4b58ee7dccaae3f925d80300670cb
prerequisite-patch-id: cae7568f6089d95b1426e2ba8b8d64f92a636014
prerequisite-patch-id: 60e7898318ad71f9db3ca153a93f8e0ba8f751b8
prerequisite-patch-id: 639de43ea364a0baf9331b164c11b240d4e4b8d8
prerequisite-patch-id: c071e6453d6ad38f7a14f66e82756c15c3f0a11b
prerequisite-patch-id: 9a03ce547736c463e3e33622e0a340b27ef55caa
prerequisite-patch-id: 21ae78cb4446b5bb83f6f0035c11d1bf09355a09
prerequisite-patch-id: da5edb676822b7575b957f4516a3d82f089d4788
prerequisite-patch-id: 1fcb6d51706f678359da2fc5852d735a7be96d00
prerequisite-patch-id: 083220a7c5cec5257e1f0b803306f374fb9879c3
prerequisite-patch-id: aba1d2e9979b8770d249653b2413aa0b3f97ca5e
prerequisite-patch-id: 88874434d31d96b024225e021dbd3b6da882e48f
prerequisite-patch-id: e314337dc11b7d0e49f085c7ec9888c704e4f252
prerequisite-patch-id: 1b6bbf892dcd70ba20aabb7b9c147d81eae81808
prerequisite-patch-id: 8eee4b1ee4894d4bd5ce9c6ef0d804478bf12190
prerequisite-patch-id: bbbed07349a11c71e2f788d90be44012405af78b
prerequisite-patch-id: 90f3545a7b1af8a819547eb237ccd99faa22d2db
prerequisite-patch-id: c43e4e17349ba12d718f910455ccd06256745972
prerequisite-patch-id: 978e536b3e1e327416d6bc2011954873297f25e5
prerequisite-patch-id: 38901ff877bdfa64c31c1e25c754b31fb5a9db14
prerequisite-patch-id: a1395bad564515efb998b73751a091ca3872a23f
prerequisite-patch-id: f5f70449f2e9e0b89e3533a5819d7d093005a1e3
prerequisite-patch-id: ea22b24994d475550a6555e7940d3ca5dc603520
prerequisite-patch-id: 945065e38967aabae15685d79e195f83fa878b19
prerequisite-patch-id: 2061e50b6cac93d2c1c944d21c4b9a89317ded8f
prerequisite-patch-id: 143064f7e7ca0a7abdc01c389bc48b151cea55dc
prerequisite-patch-id: cf9f7d4ac09034537cba9a9d19691df322958172
prerequisite-patch-id: c4d3445c2470742432e03c39e3affd4532bfe842
prerequisite-patch-id: 7bdc00c5912bef857f2f7ff1ceeec5980b912b5f
prerequisite-patch-id: 74d9af82447aef02631e6007cbdef6c9bb1afe08
prerequisite-patch-id: ad8a1a0a8412885bf17e4bb6c9111712d5ea9773
prerequisite-patch-id: ccdf38c180f932d11424d4afc99eb15f2a1f53ae
prerequisite-patch-id: 97dc6b6ab7902a534bbac063f6ea48aeb082fb45
prerequisite-patch-id: 1e2b842f173c2766082cf89608f309f9f48f5544
prerequisite-patch-id: e076ce8224ebe7934833966428e61c761118498c
prerequisite-patch-id: 2f07a47a91f815491f82b15339b49be1f1ed456d
prerequisite-patch-id: 962472bc251762fcee3bb03e9a4184e70df0cb61
prerequisite-patch-id: 43cb86d8a6aa4844f4bc92b2a05019056206fb7c
prerequisite-patch-id: acb5abab3a0d1177167d7810a85b84de18fbd36e
prerequisite-patch-id: 43794c0466d99cabe7151bad3a5303f233c09054
prerequisite-patch-id: f7530b059e6b074ea534d359c108b9fe09966701
prerequisite-patch-id: 23148850dbdb9e9a24ad4830571604d9816f0d01
prerequisite-patch-id: 2642b0479b5fdcbbd9f2149f77a2e38f76499a6a
prerequisite-patch-id: d431cac6db79bde0ce472634e1cdf9b64f17fd52
prerequisite-patch-id: 170a29e7ca04932ceb8df2c160e87dd3d3aa5cb4
prerequisite-patch-id: 2528439adf75217f1d6213ae1bfa1cbf15801f24
prerequisite-patch-id: 5cea4f81ffa5bd7557adcc2e52b3c26bfbf8af11
prerequisite-patch-id: 1b26046663d1e78e44f92d091088856b20560db7
prerequisite-patch-id: aa6932157b21a9ba92944693ba8abe79c6c386cf
prerequisite-patch-id: 6c053cfa0377ba49d44753e6f6bf43f662f2f6dd
prerequisite-patch-id: 8d18df3ed173a8f4ade2fee4c37c2feaec2628ef
prerequisite-patch-id: c6b2961596230f0c33d29a8fb3be6dbfe9d6353c
prerequisite-patch-id: 1f796e78c8fc033ac4c8b7c0b90e2f852c45580e
prerequisite-patch-id: 21bad9cdef00cc43c29627d467f8afaa4fb29572
prerequisite-patch-id: 28268ffa9c1ea5aa241e7067666639d593c1ad7e
prerequisite-patch-id: a47442abc73091ed288193fb666aadf772b4edf1
prerequisite-patch-id: e93eb39f27e8415a7b91d9f5b1a50f3de451b61b
prerequisite-patch-id: c40cb0db32373195dcb5655a3f94497dc2b13f57
prerequisite-patch-id: 0762291c80f7f5af744a31583712dfe9736a1ebc
prerequisite-patch-id: a2e1b35a53334d90fcb629ce5ca93067c601f968
prerequisite-patch-id: 57ab9c2a25d1b3d5105077ab43c56606416586ae
prerequisite-patch-id: b19c8615c9985ae8fad56a63cdbeb5e37bd23387
prerequisite-patch-id: be18eac327f2be73e0e9ab7ac7ec9f5b78c0e016
prerequisite-patch-id: ddc88555df00f69cb5377925b81b6889e3ee6a2a
prerequisite-patch-id: c78b4072500e25771134f25a068e988a28f6da06
prerequisite-patch-id: 6a6cc9f486013b2161d2a9c46e07e5dda3867ef1
prerequisite-patch-id: f43424e62fb4fd16c2e78d0955afc55e71883f2e
prerequisite-patch-id: a04f9e05160688780e3113decf68ba6f6193a31c
prerequisite-patch-id: ebbe920f1fdbc8346084184457aaa7d3c6ca6fe4
prerequisite-patch-id: b5ea4058182454f2f2b573ddf372229216352863
prerequisite-patch-id: b7edf1ebb25edd81ceaa3a075a26d5291b79023a
prerequisite-patch-id: 1178d41f3dfbec5e00ab6df82155dae0c891c243
prerequisite-patch-id: d551fbde3c484eb663b1024bf127f5e0521321c0
prerequisite-patch-id: 9fbc173ce95f4b50389ad0c97a7e185985492ce1
prerequisite-patch-id: eed8ebb36a9f21b3274f75b1d51340ee89a69c81
prerequisite-patch-id: f4a61d995ed9b0dfc0aa096b425440e26f84afea
prerequisite-patch-id: eacb7452820ea2d39e40fb2b0f740bf3e6f597a0
prerequisite-patch-id: a16af42e0851d2aecad72e1d283a88ced8afc32c
prerequisite-patch-id: 5cad4104fe6ede3a8184440e80d8cc86329464c7
prerequisite-patch-id: cb62f550809b6b32afb0772e29aa1ed6288a813c
prerequisite-patch-id: f9927f46f07adf870757456ba35eadef5ee08047
prerequisite-patch-id: 70cdc38e54e4d3c3efee46d81d09cf0530e9d4c8
prerequisite-patch-id: 59ada2b3a053786cab4fdf1dcb3efbb246083d6b
prerequisite-patch-id: b7e17fcac0073cd791a978fa94d63ce8b0d2f76a
prerequisite-patch-id: a82061ad69189a116f7bb49fb116bf9a090b874b
prerequisite-patch-id: d9a0c2dc7abc676398a6b6f8289bbccc009f3c20
prerequisite-patch-id: dd730abeff232ae146dc7e5a7e5573c2cdbce3ed
prerequisite-patch-id: 956f2317b47d9242944a66cae2b048c247e12162
prerequisite-patch-id: 91bfe7d62c6e77dad718b437904fd3a6cbfcb4f7
prerequisite-patch-id: e1b4be236a8f8aec950186c9b031f611feb703b2
prerequisite-patch-id: f79aed236679ccee3b18e3ebf8dabf1689bf72d9
prerequisite-patch-id: b164f1c9cd0ee211f9173eb5786949455c082bbf
prerequisite-patch-id: c526c9a83e796c1e9d276896ef0c672545788b61
prerequisite-patch-id: f14a2776fb8f25dafdaa0925700d733662fab315
prerequisite-patch-id: 64d7c5887354088ffff408d44c4d30ff2b6bffd2
prerequisite-patch-id: 65843871d157881b5e6f7ffa89ee6a06685f4df4
prerequisite-patch-id: d459a3b65c0388eccf5d02acc9ce9fc0a96c3850
prerequisite-patch-id: 977834241a1280babad47bf414abd7b609bf39d6
prerequisite-patch-id: 29cfc854b8cf17a1e6966046454341b6512a4b95
prerequisite-patch-id: e18f26944c7428e1266b14fc9af42167be942e69
prerequisite-patch-id: 09ffdeda14eb364bdf0941b5a92be5b17b2ff957
prerequisite-patch-id: 751b8a064ad3a0a53a46bd4d01d8b50e393ceda2
prerequisite-patch-id: 0b693cc0af5dbbe2bc05c40d747e986748ceea48
prerequisite-patch-id: 0d2b578b0afac3168c12e9f9919e61f5a8f6967d
prerequisite-patch-id: 74cba32349e7324f67f3f08dffc81334e2a2595b
prerequisite-patch-id: 86a167ad708ffdd4d04f4adb37c3c18d9966dec6
prerequisite-patch-id: 995c13d5c9651b82dfa7c18ec2c6e607eb285d40
prerequisite-patch-id: 1904dbe0c53da604ca9ca07b060bdd95cec9867d
prerequisite-patch-id: 35a3a0aad24069fbfd4a36da0a5383eaf6fa36bd
prerequisite-patch-id: 414bef3f559955c14dd77c92281e9ecff4ccd893
prerequisite-patch-id: abc09ee4f7f93d821b1fdac616dd9c43c595d24b
prerequisite-patch-id: 907eb82fcc465ed7e59cf930d8cf4f786562754a
prerequisite-patch-id: 6d33a9ee4e17feb53b25dd50b1af488af9829850
prerequisite-patch-id: 24c58897327493f1679d56a108c94659be3ad7df
prerequisite-patch-id: c481df91eccc6a6cc6729a2c838fa5815c081df3
prerequisite-patch-id: 05cb57cb49da31b42252c43972351815fa50f262
prerequisite-patch-id: 01eacbafd2a4afb4f1aeb0141836bf9ae3f73fc5
prerequisite-patch-id: 8b3446a8da508d68607521bf60d29a017c0c44fe
prerequisite-patch-id: 05cb57cb49da31b42252c43972351815fa50f262
prerequisite-patch-id: f3bc03ad967434d7d285c5872d03147e078be20a
prerequisite-patch-id: beb698eb0aab28721fb83961ccd2b46ed091547d
prerequisite-patch-id: 8c154eb3b1bfb876d16eca3450ef5e15558d1883
prerequisite-patch-id: e8805cedb91cd156f084d2de56e729049ec87ebb
prerequisite-patch-id: ad6965f0da6fddc1b52549a6f06d5718dd805210
prerequisite-patch-id: c631bb3ff5fb222ddbb7b9251f7d9797302490c0
prerequisite-patch-id: c0baadff36537def44f57b820575cd464d19735e
prerequisite-patch-id: 61d73eeec71e34b30ac098b9de0b0b786c0c2a15
prerequisite-patch-id: 62f4f64913e8ec39c4e664db76dd80d5ad25e74c
prerequisite-patch-id: 7edf12728a8d45860c3a82d4501884905af0897d
prerequisite-patch-id: f55e17cbe7cb76c9050dc4f8f613f5d96af23331
prerequisite-patch-id: b0018cac21b4481ea452a3f496b4896df18af66a
prerequisite-patch-id: bf9c24dade5cda25e465adddd0569dc471496612
prerequisite-patch-id: cfb1fb5eac9858d461ec964dd8055845f4032136
prerequisite-patch-id: bb39c1809b73c814485e6413e85ccb09be37cf52
prerequisite-patch-id: f9263a38ae9fd6f1c93cfe7e23afe473adaacdc8
prerequisite-patch-id: 40c10ece2ca47f5d9fa2b055aa22cee958ced0b2
prerequisite-patch-id: a03ab838e055028daac5040446b5a63bb26f5fd9
prerequisite-patch-id: 31c7a3a4c12a90a50fabc4ab77ca55b323df845e
prerequisite-patch-id: 62d01f5363ade50c62ad4dfd86ed6145927ac49b
prerequisite-patch-id: 43720be04f14f55cbebcc194427f92cf047ae003
prerequisite-patch-id: f94a23312c862336ea01f7b4177be0a377b26cbe
prerequisite-patch-id: 9d4f21c49e82e7c3de24665f6b7e58184585756a
prerequisite-patch-id: 75f6ee6d390f4502b5e3def58372fc6babfad3d8
prerequisite-patch-id: 974cb2f141456c8f6aeec2b54818161104732761
prerequisite-patch-id: a80825ef38d29a9be7666464b4028fb810959fa7
prerequisite-patch-id: 0a30410ac2e8f566752e7a5d50165a906d242830
prerequisite-patch-id: 7472a8957109f6f868008883a8a428adef381d87
prerequisite-patch-id: b190683177b8c35e3322e36e209f0769b8b1185e
prerequisite-patch-id: 48e017930923ebf6f36260a875b6614d941ed233
prerequisite-patch-id: b35abacb43aba7e7d7ae5cff188e5d42367939b6
prerequisite-patch-id: aac8a1dce62bf7be4b792b17350ccbc2139296ca
prerequisite-patch-id: 435b4c8d0b657efd703d046c470ab2b748d3f149
prerequisite-patch-id: 12e00f6e339cc0e1d551a654a69142a97197393a
prerequisite-patch-id: e075fe71766b30fc1bcecf8efc7c323f03d64e56
prerequisite-patch-id: 587d55052a1489307b2a30b4c4708dc11c11d05f
prerequisite-patch-id: 14d42aca47251bd6f0d60202fda4d16d67f0b091
prerequisite-patch-id: e4efdd594a013fdc4bc375fd09bcc07cbfb7b8d4
prerequisite-patch-id: 4f8a6ca177b0dab86ae210b9e32fd365bb10417b
prerequisite-patch-id: 3a27dcdf503065b403cd97edae8f6c17e88577e0
prerequisite-patch-id: cad718f4f237909be47c74a6c4cc12f11a221dfb
prerequisite-patch-id: bbd93ffda721c1d6e10a0b5bbb10872db4445cd8
prerequisite-patch-id: 91eb447ca781dea6e44d5654bab3d9b75e34ecfc
prerequisite-patch-id: 81d84661a402cde8277e86af5b7ff7e3f746a714
prerequisite-patch-id: 029719b3496654203305b7823d58943611f85bb6
prerequisite-patch-id: fb6401e5af28a49f77afe453d47904f44ab5bb3f
prerequisite-patch-id: d0e79d09bf78f80821543af90ba71f1699440467
prerequisite-patch-id: 622ba78401b6ef18c90fa88f0dd0c80e341a76ea
prerequisite-patch-id: 7f97060ed9c7bdc46207e36f729207135031462c
prerequisite-patch-id: 326d6dff0f753690adcce2162a1d0bae0ce229b8
prerequisite-patch-id: fec848ddc78737ff7666918f5e5157cff75d30a1
prerequisite-patch-id: dafa70ec80a4644b4e8e0db4e2de1cddde36a541
prerequisite-patch-id: 35fc2b4f42020330ac86954b7cae0ef86116d91d
prerequisite-patch-id: a0866ff269e2848ce993e7f33250be4c6e925d7f
prerequisite-patch-id: 98b33c9a73bf24c92b0bfc19a3485580d1980b4f
prerequisite-patch-id: 0b91b1d5a4fdb215438765366d027ebfca310ecf
prerequisite-patch-id: 24ff59e18cc9a95a3585e920e1a559c619dfdd25
prerequisite-patch-id: fa6ff19be625ec15b216e6656792dd42733bb3f0
prerequisite-patch-id: 031529fa24d3bbdcc95105800c60f72798961110
prerequisite-patch-id: 5db0e32d733dfcdde0bf18c6ba6233e670101035
prerequisite-patch-id: 7b605bbe090904cb660434930e8cb86c100c4e36
prerequisite-patch-id: 32ff48373733228623f7a1feb95a7c0c4c4af1fd
prerequisite-patch-id: 693fa88f783365647ebb3030f4cf421d7154f3be
prerequisite-patch-id: e22554df2a3391bf1caaf1cef5fbe7f4211a1e89
prerequisite-patch-id: fc00fbf9fdcbdcba0631021e7dd46cd635805286
prerequisite-patch-id: c656553384bf23912394a1297f7073eb7863b4d6
prerequisite-patch-id: 2ad966362b064eda58aadeea84b6febcbb23251f
prerequisite-patch-id: d29246fbbdd3f044a010fc5d63f57ed7a8902c6d
prerequisite-patch-id: 1a71e2c88e050b1866f188dc28a9f1d3206f0d0c
prerequisite-patch-id: 4a1bd10a03374ad2aa00cdcdc4258d3949e4ae51
prerequisite-patch-id: e817b7691672a6890c7a5e0d686bdc41896860b4
prerequisite-patch-id: 0ca736f1a71d638b95b422fbca0056c7a756d711
prerequisite-patch-id: 6b982cc4f6eeda800518b8c4598fffac0f193664
prerequisite-patch-id: c659c72599030c3e3ece657f3ad4b4f6820941fd
prerequisite-patch-id: 6fbf6d9785cbc65b1ba022071fffa24a527d5b46
prerequisite-patch-id: e46362d531a0a56e2e38e68e7db2c20870c56559
prerequisite-patch-id: 4bfc1710634f660dcc1f7bb5468d5560c72a1df6
prerequisite-patch-id: b4192546bb8005b355a55df16621f10330749236
prerequisite-patch-id: 4662597086fb7d7830ec0988432dcc2d87999841
prerequisite-patch-id: 7519070be3e8d878428c1aa594d0b803b9e99dae
prerequisite-patch-id: b255d293991589b54e839deb3dc1b9f802f28622
prerequisite-patch-id: 9c889be01d4bf2759db0dfabd0110c57647c3328
prerequisite-patch-id: 1a6698a7d7b9cc67f798ef6e4c9a3e2ce40bd4e7
prerequisite-patch-id: 2d0f34ca0dbff28fe96fa158f677d6850f612e72
prerequisite-patch-id: da23b17364a82ff89d7c01de9d81e53db86933dd
prerequisite-patch-id: 7f4a141bc29952d180bd97a9bc8a5e10a2be9576
prerequisite-patch-id: 4eadaca8e705e451edddfc66e09b5a5e620965ac
prerequisite-patch-id: 2646510893f70158b21c2fdd22970fa55b553ab6
prerequisite-patch-id: 54f85c7a22974d3569ce1ce8af961e1d7981bd1d
prerequisite-patch-id: b4413c74a27bf2c64dee157d1bbd764410b9f50f
prerequisite-patch-id: a806a4576cc208e17e2a08ee79e0e45391e7a6d8
prerequisite-patch-id: 910c17c0a67a7b3d013623e38560414a7d3958cb
prerequisite-patch-id: 7b6bcd091c5abc8dce492faa7b2bcefbc38f9306
prerequisite-patch-id: 802ef657adaa53539b50e003be03b347c8d6133d
prerequisite-patch-id: a949c84c6009ae3678033d54317c86203a31f59d
prerequisite-patch-id: 80c44b95d7d4f08da33fc170e5c426849a3d2540
prerequisite-patch-id: 24c01ce761231d6a517a6fc6448618c6764fafb2
prerequisite-patch-id: 173de80dc8986780261fe269487cb594a971084f
prerequisite-patch-id: 0c4afe5b6cb875ae0eb59790fe85085aae1813f3
prerequisite-patch-id: f5b99dcd4e9913578fe7699c87c7beefa4fc3242
prerequisite-patch-id: c5c470988e082912756a2c8374af4b3c3a4c57b1
prerequisite-patch-id: 15fc61352051220fd36866e410f084b8b41d3162
prerequisite-patch-id: 1a85caa4eb13b88b9eaeae2dd8c6526a0db5cde7
prerequisite-patch-id: e94a167b27d6bc1fcb00bfebb16acb1b43732746
prerequisite-patch-id: 97c8644ea337450ee66f8b9f7d5ada477b44e67f
prerequisite-patch-id: 6ccb894df68daa4a452ecb1dc27eaffebee751e1
prerequisite-patch-id: 6682db7ba984d920761f3cd1d8707d3bd5f8425b
prerequisite-patch-id: 36959857754a131c36f8bccd92cb0b8113a74057
prerequisite-patch-id: 4eacd58624cea76451be98f0e6914c42c18d324c
prerequisite-patch-id: b7fd3a23645244b9b847eb8e527e7297a00211aa
prerequisite-patch-id: bcba06fda8150f173e6aa8640bc7e11b87f61e12
prerequisite-patch-id: b32ce1f3e9e3050a1ac30e721c8a991ea6e31f26
prerequisite-patch-id: e58196d7cc20bc074a90bbf5deb55c5a6f4b992c
prerequisite-patch-id: e81db3da0769961b8f9020f28e40a6b567fee68b
prerequisite-patch-id: 81b4b5ae2ec8977b14e4d780a1d69dbadcf54423
prerequisite-patch-id: 3d8db2a9f43035dcb89b0102906d89eb404213d0
prerequisite-patch-id: 44b96764e8db6e593589c282bc89dafafde448e1
prerequisite-patch-id: 6ecf8c01879db72942c59a7c4d732caf7e282c10
prerequisite-patch-id: f07714b637f1672fa3dd128fe52f57df877a1197
prerequisite-patch-id: 0b84c95d3b2a1f248d66b9c6c5aa05f2e12136f2
prerequisite-patch-id: e42f004ceea2672ee74b1447a74d63890f95931b
prerequisite-patch-id: da6c6f075c663a101ed8756eaaddf5c9319f442c
prerequisite-patch-id: c450f84a1cec84a3fe3029ee6ee562a907ad269a
prerequisite-patch-id: 048b7261d0c6c3467421fd84aa07b7d7583a3004
prerequisite-patch-id: 98ba548afb208d52bb75336f8758f53cfd49a894
prerequisite-patch-id: 1fd06c41cac86d7ae14de7be4cc31cd53ac3e1be
prerequisite-patch-id: 9b61c58076ef0d1ca2572ac9acd9f4adadcb378b
prerequisite-patch-id: 3c931ac2dbcebcd054bacaebc96e5d631a6492b9
prerequisite-patch-id: 54351dd55572da08915679f2a05c88ba26d4312d
prerequisite-patch-id: ad603e2cb0e997b25daf10dbcb1e14aef11d3123
prerequisite-patch-id: c87e2bb0b31bf3002ba259a04d96f69eb957743b
prerequisite-patch-id: e1f885cc1d8c2fe4fa028a09f71be7e3b0dbf043
prerequisite-patch-id: 9b76bd62a2fa25a3fda9522769e4d0fdb95e208c
prerequisite-patch-id: e0967b01eb7917bea870b51ff545aa87b319ce1b
prerequisite-patch-id: 3750a900b509b684d55f2f2178a7f1aae70d20cd
prerequisite-patch-id: b1f953b819fcd1c1373acf55643ae0082bb187a7
prerequisite-patch-id: eb3c9926e1b44d0701b5f18c13281851a8571a27
prerequisite-patch-id: 768fbf74d955ea901f1b2a43a74471cbc5b205f6
prerequisite-patch-id: 4c59e627b3babab9a2bbbae6139b4410c80df9d4
prerequisite-patch-id: 17c2381299e94bbedad061f50a150a4d1676aa03
prerequisite-patch-id: 9acf001d19b6d53e039f759762d6cb73a3a034e4
prerequisite-patch-id: eaefaecc7eddef0faabda61ff05e0c6fcab80f31
prerequisite-patch-id: cf8bf84e2bed7be4e4eaed3d5a99ce123d52f9d5
prerequisite-patch-id: 10bdc2ebff01916c1055b51d73cb711cca91ebe9
prerequisite-patch-id: 02f413ecde33b51558f37d77cdd36f17ee7b8b42
prerequisite-patch-id: cb914a2b09bdf6f42becf41e49bbfb6cf402ab56
prerequisite-patch-id: b317e7b3ac4614f7bf289fb82acac9eef4cd34dc
prerequisite-patch-id: fca13f06944a53cda0795a5d25894e47c21b555d
prerequisite-patch-id: 4ab2fbc195fd53eb123ee5c22f85f0f912458f52
prerequisite-patch-id: 6493e03f03a5b26e448607642d1e7bf91381528a
prerequisite-patch-id: 602263acb8c443084e904c877b2175b10b849dee
prerequisite-patch-id: a06ca46f09a7217895456fccaa390f3a70609a45
prerequisite-patch-id: 67810e22504619f1f6cfb562787b1069f684fa56
prerequisite-patch-id: 4eb90150edea2a09498defee6c3c0f3293b78546
prerequisite-patch-id: b7343eaf27b284f21f00ed536108abc4147266bc
prerequisite-patch-id: a00374c767db055554aad58fd1277e1d159ed395
prerequisite-patch-id: 972fddc356d654bfef915f23581726646c1306a8
prerequisite-patch-id: 10ceda7bb39d7fff4f5789af0f89a16e73bcd21b
prerequisite-patch-id: aa019e46b28612b62b8ef44e5cda2f8163efd041
prerequisite-patch-id: acc582186ce36776bb4c47eb73a63bafcd17a582
prerequisite-patch-id: c167a4cf1087470535c625cdb98cd8834073c9ef
prerequisite-patch-id: 0337ee6bf33283cab8b6e7d56880ee5e8e6c5fe5
prerequisite-patch-id: 0ec3fe37a3bb2def01e7e85f8e8deb720f14bc36
prerequisite-patch-id: 97e0a600e1002735badaba17bd755e18fe187062
prerequisite-patch-id: 435d464cfad2cab06f05ec42a500bf20209e980e
prerequisite-patch-id: 175aba44851800370c21f84f866bd7f141893215
prerequisite-patch-id: 86aaad8e34894531292cb77eae41b4f3467f6a37
prerequisite-patch-id: 0f26812dabd3f1457752ffdd454bfade1af186b4
prerequisite-patch-id: 6fa4f420cd59ad550672f0d785a41a63c6b6e413
prerequisite-patch-id: b25edaef790a7a37aaf646b6de4bd3ff62a40cab
prerequisite-patch-id: bdec135c01b688895f03e023b8e17fbe0ac2043b
prerequisite-patch-id: 75f0bb0b7ac591495d33a4ceb0c89117630f87f3
prerequisite-patch-id: 61a89fcc6ffd61742eff3bd9eb081ad68a70f83e
prerequisite-patch-id: a93315cc7b75705536e703ae7b617820acd15324
prerequisite-patch-id: 9cf224841cec08b83e979b0b721e5169c484c00c
prerequisite-patch-id: 8723c258f83e6826e823bf17918ee29da9c4468d
prerequisite-patch-id: 57852237800b781abe3d6f841f73c6184c348216
prerequisite-patch-id: ab7a74e4ef5c09df8911723e037580a7918f4690
prerequisite-patch-id: 14153e68b1e3b03237d2416ed763c2cb8187967e
prerequisite-patch-id: 25360517613ab0be1f2f235b86efecd9876a9348
prerequisite-patch-id: b5b96af8f9998dc298d96616010cdba67e2fb1a4
prerequisite-patch-id: b798bbfdd08f748b18419c90b9a284e39f4dcfb5
prerequisite-patch-id: 6eb1abce01a15b9f1948f5204cc97c6cf86a4a87
prerequisite-patch-id: a7589f0d1429c3913a0a4374b7e188759a80c559
prerequisite-patch-id: 08c59ab02bb62a4763cbaca391173915c0f1cc35
prerequisite-patch-id: fced1e4da5c3c0934683ae02d18310b3eee010e6
prerequisite-patch-id: 33de9ee48af8a416fda3c89f4b3d1818079cc480
prerequisite-patch-id: efab6a944b9b13e8d47fef24ae3a2a56a8a6deee
prerequisite-patch-id: a3bae5949c542021c06789892f1167572ebc305a
prerequisite-patch-id: de754834b4ce37b5a4bb0733651a011a41389269
prerequisite-patch-id: 7e87659310a494bbd6e0af6fa5dbb002f26ad6b2
prerequisite-patch-id: 065be740741a4ea0b9666f4033a70c82671c77ec
prerequisite-patch-id: 7be9d36e4336e9ea001d19de30b856ed648b7493
prerequisite-patch-id: af1631d308c81aa9399cc407b411aa3202930c0b
prerequisite-patch-id: 47e25dcb1ec42d379dead8376b72e90f99ea1598
prerequisite-patch-id: 623af77337166cbf0e2f7316e058e0fe0c656c6a
prerequisite-patch-id: b8df87190494c7577c81f493fe095d185b093831
prerequisite-patch-id: 767388ad36c71e8fee26546eb328bbd7cf5ffc45
prerequisite-patch-id: 3af7f7010ec6a3624c14aa51d85cbbeb2bb5e6f4
prerequisite-patch-id: 1c6aec2bb9b723b493678fa44242993addbb0d5f
prerequisite-patch-id: 05deb86ad2b61562c99ed8574e922b1cee373730
prerequisite-patch-id: b5a51825830c997bd9f374b30cbecaf3b82665f2
prerequisite-patch-id: 19761de2e9b016c020f156ff1ea273482506b183
prerequisite-patch-id: 944c0c0b2d5d404598475d2beada135081c0f86f
prerequisite-patch-id: 0cf3f0e3b1987f153fa63f2d105e3ee08b95c7db
prerequisite-patch-id: 9d0246c003e78801a16fc76d034de067b9f779b9
prerequisite-patch-id: dc450dbc407ee4e164b976af97c0e7379dcc28d4
prerequisite-patch-id: d2e7b2470eacf539e600eaa03741d4d3037a95a0
prerequisite-patch-id: 5f3fe612a1296dc3937d4d938a7339c151f34ab9
prerequisite-patch-id: 8961c22a1c0b3e40d56cd60453dba3f578c9e5bb
prerequisite-patch-id: 3b5dab93851b80e42a06c285a26d82f95dd6fd67
prerequisite-patch-id: 5528807be4c593404bdcbc746d36c55b1f403b6f
prerequisite-patch-id: 4fd25543da05ac9ab77772235dcc02f235d2c080
prerequisite-patch-id: 57dd34c5a1b9306b71b774b96d5592710b4c5d62
prerequisite-patch-id: 750e36b6e706c78a86c04317ebdff65f4e015756
prerequisite-patch-id: f0c1cde5560eacf9865346a424d01f892af5a152
prerequisite-patch-id: 41ae04c404ec6b2b4079b7781a46cf2d98fdaaa8
prerequisite-patch-id: 5ea8cf37723d396ba92fc59b1fd33ee198880f3c
prerequisite-patch-id: f6c6ae32d3098579c41edb2fe7d8f78b006e2adc
prerequisite-patch-id: 07fa9800e902c549cbb0a2aa8d92c1a6269c01c7
prerequisite-patch-id: 7921ec3cce247fc0478f13224e1814dde655c160
prerequisite-patch-id: 27eaa63bb35653e03679784f490a6e0214ed8b18
prerequisite-patch-id: b20779b45dc51828c27db774cf080a0cf78f4eb2
prerequisite-patch-id: 6909a2ef12c22fdaa845a429e415fe8ce092a3fa
prerequisite-patch-id: 0be82307bb5bbfd8baa0d9acb17d8ed97bd7201e
prerequisite-patch-id: 654ce3088efc7192499ae0d169852602845ef3e6
prerequisite-patch-id: 73a30aae730ad0c555c43259f548f8db16277621
prerequisite-patch-id: b0d7902eee4da271912ec7507a190ea4f80a20e8
prerequisite-patch-id: 7bdea0a767f36e4ed8353fc3d06b9d3ec856014f
prerequisite-patch-id: 8bdd93be913ef9dd16d75602a0e16afd1ea559a2
prerequisite-patch-id: 7016063f1ce703056f764119e0c3c27692487caf
prerequisite-patch-id: 3ca58f286751f384a85300e6a39372439b8ec0a4
prerequisite-patch-id: a888e607927fd0fbb97b07ee2cf06cb52fe7c64f
prerequisite-patch-id: 9e066bb61a9ae2b7095bdee29b48c53b56c03cc1
prerequisite-patch-id: ab9f6052dd92ca5d2f8680cedd93b4e1a2ddc715
prerequisite-patch-id: 2ce71b5a34d4601086ef0109be5f7942efb2d9ee
prerequisite-patch-id: 5e2aaaa0348bb9c060e0f4ebd5d2cf3053420fb5
prerequisite-patch-id: f7956d0cd5e179eda0126f770916969ff047f038
prerequisite-patch-id: c79a7fd37f1c4862f94227a14e59ada6cac699e5
prerequisite-patch-id: a9e1e2f5e25e450c45778c5452cb8944b356fb46
prerequisite-patch-id: d832a8316586adac12317ffe462a69a26a0a7c71
prerequisite-patch-id: aa4bd8b4af62824a0f7075df204d85a784d3f33a
prerequisite-patch-id: dd95c9b0ad6e8b41cbc9147c2070e4bd30714f7c
prerequisite-patch-id: f3825e25c2183632f89c9c9bf6f661117345f5cd
prerequisite-patch-id: 8dfdd54fbb919ab01171cc5553d97a225d2c6c5a
prerequisite-patch-id: 5a6cdc37caad3def900c417f18e364545523318d
prerequisite-patch-id: b18f13efa6c7fb3f6c35beef1eddd83a5af153cc
prerequisite-patch-id: 9aba858d78ed453e03bcd46b6b4e29abbf201d38
prerequisite-patch-id: 1f4dbd1b954284214d7e4661e60dbfb8503610da
prerequisite-patch-id: 43c8a1e7ea8917c1e10a48cda87c13fcc4dcfbaf
prerequisite-patch-id: 242cd45bb32c435e3236af1002c2bf184c17110f
prerequisite-patch-id: c9d4f56c7cd66032754c8b12de63a5f44d89850c
prerequisite-patch-id: 9f502ceba6aa8956663cdb933d77b9833391ca66
prerequisite-patch-id: 468af8cd28809d33c99950b7aa0263d0785860f6
prerequisite-patch-id: aa3eb211ddadea33f6cd6a879ff9490608072079
prerequisite-patch-id: 24b7c60660b89bfb9119380e87bf1bc6dfae8403
prerequisite-patch-id: c043edd411477501be85d327d03e1b33006aebc3
prerequisite-patch-id: 296b665b28630a7618031564f9a1bbef791b4d0f
prerequisite-patch-id: b89b3ecfe9f2853510ad5611eeec993ddd900fc6
prerequisite-patch-id: e8e45ed57a2b604907830041580b19c066d0d91f
prerequisite-patch-id: 8e34b518e2e802202758a61363cd631d22565190
prerequisite-patch-id: 938f1f2a26da915d69ba7e93664a0bba8ba809a5
prerequisite-patch-id: b5224aa89b2187ec192c05c19001b72c54e2c562
prerequisite-patch-id: 70f9a49b580740fad17d4c07d84173718e548510
prerequisite-patch-id: 1ab38a2484becd1c1b9589bb3908b29443044242
prerequisite-patch-id: adcbfda34860a845a6eaee333cf042c1cb692f2d
prerequisite-patch-id: dc395bcc1f726e6236249561e3a3fc0b5f2f0cda
prerequisite-patch-id: 2bb8b86172bb41db1ada179b0037b1194eb6a825
prerequisite-patch-id: 397d2527776d1c81aee3d52256e31a320a5acc39
prerequisite-patch-id: 8130d67646adcd9b2a3a9f345c875613869506f1
prerequisite-patch-id: 2e65b7ed6c695a3567ae27a54efc196de712a0b9
prerequisite-patch-id: 7f6d4f15d535d1b7add2321a7c36bef0a295d729
prerequisite-patch-id: 0e3e23a01a4dd860f9fa8f49d967402210fd4727
prerequisite-patch-id: b885cf68416de63ca1ddcd4138790d12541bdc89
prerequisite-patch-id: f7346769f81ec3fbe1f8036f2d8428f1b9d55be3
prerequisite-patch-id: e8c4d31fb8773c13e636df3c4ec1b7c5371294b0
prerequisite-patch-id: 352b1577033a379efae8eb32fe3e30674232e31a
prerequisite-patch-id: 32bf7b6564c7272c00fc4903c5a04254329b4368
prerequisite-patch-id: f596805461def645269c99f6fbb1ac0a7bdd636b
prerequisite-patch-id: 2835307c070d5f1ad98d6a2a4fb254fb7382a00d
prerequisite-patch-id: c42155e4a5952deb72e98f46b94f84f6570be385
prerequisite-patch-id: 12430ae86699530622e9b604395c273b131ca0ce
prerequisite-patch-id: 287b4ebf0459dd8519e8a5d4b89b9c2b46777855
prerequisite-patch-id: 03879fe39429c7ff8160fd86a89ed8db113a4714
prerequisite-patch-id: 5c8ca9ed4e975e3d6fa3a0d633195a93a53f6d2b
prerequisite-patch-id: db34a23e9122dd4d82a0095cfffa4f72fc35f715
prerequisite-patch-id: cdc84344b2cebb925ea8fb0d45485fc43045e90e
prerequisite-patch-id: 0bda1e7b49773f694c14854a2b22ef7f23e6343c
prerequisite-patch-id: e3c355fd2a10eb3f977f843c5f74cd14f26140d4
prerequisite-patch-id: c884e29db66b5b67315c28b618f7028666226b90
prerequisite-patch-id: f9133e057ff8f54011547e9a8712e2133ddb5976
prerequisite-patch-id: eb9b32dc29d688d2a7dfb80de51ad8bae54eb1c7
prerequisite-patch-id: 3a684f235b7de9146a011680ce28b536ddb73e12
prerequisite-patch-id: 21600461a16f714b8baddc08b0dc6220fa0a1957
prerequisite-patch-id: 8abe382219244177a4d30526ff3a3e5aed0ebc77
prerequisite-patch-id: 25e1ac079df3b71f75ddab733f3695b6a13625e5
prerequisite-patch-id: f11a4e1e9177d24827cf42bb1b38a4d6c75e5b86
prerequisite-patch-id: accb1c98db8c776d8cfde56f153eab649d50bb12
prerequisite-patch-id: d16f4b1463de0aea58070cdfd606f7983fbff5a9
prerequisite-patch-id: ce07963cc07d67e3ed15899229ce53e958b7bebb
prerequisite-patch-id: b06c8f671a7ffca1bd54d1a542f90101f6782f16
prerequisite-patch-id: 094344ab5a50005c6c6d10836cfba60804c7acd5
prerequisite-patch-id: 742efbc7de63bb5b4f50133d48b3f0e92dedefc9
prerequisite-patch-id: db9004cd8d835ac1bca98af9bd9ec37585edad62
prerequisite-patch-id: e46b07f968f8b3c5e507f701f1e3db6098ab10fa
prerequisite-patch-id: bdffaac96d6e77b73874160393a6891f3462a659
prerequisite-patch-id: 787e5521b9ce44467ad6da1d0f93d107d1719c14
prerequisite-patch-id: b7ca42c7d97a31c4a94d23b4f3833e11b7756598
prerequisite-patch-id: a3ed3d21fae6ab9bb406d32e714375d620caebe1
prerequisite-patch-id: 663500102e48f418ea47bd64e47bd4cfd97aded9
prerequisite-patch-id: 4f734f4b0bb0b187f1ad2db32c8fa87eff0a2146
prerequisite-patch-id: 90a0442022d742095772f7aa36bdc110944dbcdd
prerequisite-patch-id: 92a29803becd4a3c564c92cff708862ecbd58a80
prerequisite-patch-id: abf540446cea2695e0b2fc49a313c70a44338771
prerequisite-patch-id: 845222e46923887d3a32f57a0242a904995df43c
prerequisite-patch-id: 3c5c996c901329daa600a68f3fe71f84db13c069
prerequisite-patch-id: 64804539785b3be336ce2614fad1819d23637dde
prerequisite-patch-id: f997efd8c7b046e94d7fbf714abb083903e1e0fc
prerequisite-patch-id: 5a128e0a04c8268620010185e629499f75a84149
prerequisite-patch-id: 966d79d9c312faf6a266fd8ac17585cf5d8d6061
prerequisite-patch-id: 1d892fa6931f80bc6dcef866b46502b8487b7665
prerequisite-patch-id: 5ef7d2015a7abaab3026ac315e18ff968b4dc60c
prerequisite-patch-id: a2112341bac527880041c0a555a7991d37f1c72b
prerequisite-patch-id: 2f133bb22c8a1ed083049d7d9c48ffa953437142
prerequisite-patch-id: 601dba6c9889bfe27725f8512d4540f91dccb601
prerequisite-patch-id: 0253512c58319dc5324d7dc9a20622cef3f3853f
prerequisite-patch-id: a91a87376ff8f395fb0401cae3556fbc06c7586e
prerequisite-patch-id: 4437d63c9694870e95143ee8bea2f61ab4d49f02
prerequisite-patch-id: 9d6065bd56df710cfa3c6f635ae003105ac3c97c
prerequisite-patch-id: d188d2ab0326cb64b51d295fdd7afb523dbe9c76
prerequisite-patch-id: 71cf23658e9cfb53e5110fa2502c8865be88b6b8
prerequisite-patch-id: 6a9b9523087c2307f3569514a6288fd19031ca9f
prerequisite-patch-id: 421bfcc20423ae10160cde71dcddc35e8f3fbb2f
prerequisite-patch-id: 5cc3cbf685e96d40787ef46213ff03adeb336034
prerequisite-patch-id: 102080984402785e7db36fda14350e45f6faeddc
prerequisite-patch-id: a5af144a3a0a40c555017136419d7921d561baee
prerequisite-patch-id: 679d1599c66ce917d417c58af5ed787c2a149d4c
prerequisite-patch-id: 5509afa578b0bf399dacf48926a0e0baaef26a91
prerequisite-patch-id: c78f6a500e6a6ffb24a34677d2293d5f194ef8b7
prerequisite-patch-id: 309965aee3d1d7cdd42ab423ca41a9a6116d8f74
prerequisite-patch-id: 85f5fc851a935ec63bbb61fa9772cd231be1de3c
prerequisite-patch-id: b205e41876814d73eba7766aed1c0e0f29903668
prerequisite-patch-id: 404ad7a152d266ddb98e473732996eee74f2d08f
prerequisite-patch-id: 5714c1262af4d62b2332a46759a75229284f73eb
prerequisite-patch-id: a493a523363571feec2f97fa58798a071dc9539e
prerequisite-patch-id: 42f9d1988161f5f3e90b707e60b80176361f1cfe
prerequisite-patch-id: b7b3aca046447e0c9cc07af2bf7ec910fac8b744
prerequisite-patch-id: e58752b573a06c15afc003220a80a8bd50708aef
prerequisite-patch-id: 1dd835864d9b57beea560a83a361828d23e3b246
prerequisite-patch-id: a1a776249c8fd0e2fb082cab196661589160c722
prerequisite-patch-id: 126c22ebe224a0372978bc0d7a08983e2014f1d6
prerequisite-patch-id: effddf32b86ba66f71e388a51ab4f7d0e36d6461
prerequisite-patch-id: c97f898c932a475baa7541e1141454c22a497b02
prerequisite-patch-id: 7a8fd944e9d14f0f68c8264eaa0bda6871cdcb06
prerequisite-patch-id: a6fb15c27458f4f40e6248bf0670d04db446eaf0
prerequisite-patch-id: e29442c9e9dd50b8919837dad7bd789567bf5386
prerequisite-patch-id: f488a971553efaae194e9e96312689fdbf555725
prerequisite-patch-id: cb38c39b9a9f6e64248e3e997bc03a6e621298f9
prerequisite-patch-id: 9eccdb079338adbe795b9a22532d47d4003925c1
prerequisite-patch-id: d23bf8394d3a87b8034cb6babe7e9daa13628a4e
prerequisite-patch-id: b90b85fc8921da2062ef574966f091c6bd86d77c
prerequisite-patch-id: 280842a1d07d0e6b18d9aef5e2f47a6f4c7fc235
prerequisite-patch-id: 80c923af64a684e15ff080499ca0c9068cc1c06f
prerequisite-patch-id: 41e6c12a84de9b3532fd14740c5c46a7fb422ec6
prerequisite-patch-id: 818a57d88cb6b5397cd582f946fc687eefe6c1da
prerequisite-patch-id: 86ab20ea9edb456d361fde6c8f5eb6e2f2def37c
prerequisite-patch-id: c6da83b5bd188d08e2a347c0da23cb31a1acc7d0
prerequisite-patch-id: 171b6406cb961c57ac603409c4facf3c527f0251
prerequisite-patch-id: 08bfd3e4853dd773d3b68671c65e1902d3dd97dd
prerequisite-patch-id: e7b94fb2f29f20c1698c5ca777d1e2df49e4fcb7
prerequisite-patch-id: 8f4dce1f425c3871176f08c9f72efdb8454e59a0
prerequisite-patch-id: 58f5e3abad336102d23ead626b0d15425cf2dc85
prerequisite-patch-id: 4f5488f448d231251944716f9b5429443f6e725f
prerequisite-patch-id: 205915025617f3f8c208781af0367dea8c67eac8
prerequisite-patch-id: c500fbd81c077607051ffc13a530df4af70c3312
prerequisite-patch-id: 5b68e39248cbb24867221087bbb5ba2d75b15c31
prerequisite-patch-id: 39e82453ba83e1cf41475af6f55ed169c6c83984
prerequisite-patch-id: 1e5bf26149083166be801783ba9723d9b4678d79
prerequisite-patch-id: 28d610ab76dd6e0df685d36bd2b10594e2f0a4d1
prerequisite-patch-id: 6a818848ce20698a21810a15dd467c34c785e9a7
prerequisite-patch-id: 21188d0ff828a5a4856928344fb72c1145b75133
prerequisite-patch-id: 0e52870d4b5e45bb046c092ec8d28d1702f36a3a
prerequisite-patch-id: 9072d4834cefdead8be9fe44c352096d07f65916
prerequisite-patch-id: ab787f8f2ebff179ceaafda38a5505352fbdb9e8
prerequisite-patch-id: 0a0a55b0906d2158acb5f5078e7dc65776533786
prerequisite-patch-id: 3957d5f6c78e89eeb8f8f7978f34cc17c3bea84a
prerequisite-patch-id: 20c1fd1336b953e6453b021d864b8e1367508ffc
prerequisite-patch-id: b0c670efd1f8cda6977dbdbdc228e418b919d293
prerequisite-patch-id: ab543b0e44819da4c755ef4e540be40938e48e1b
prerequisite-patch-id: 2d4dd4159c0f76cb6a8362cfa7f7b2b8b29ac215
prerequisite-patch-id: 1385546137cb37c25d8a82b941852ea7d8e318bc
prerequisite-patch-id: 8a36e7cf93f80cab1b4e1b7de155e8fa8909b51e
prerequisite-patch-id: ac2b853c2df51f296b822acc82834c0e38cc87bd
prerequisite-patch-id: 28bff0fa89358ddc58f76bdf0c5a3187bba6c5c8
prerequisite-patch-id: 88f27147ad8e45b5dc67050f1be722817c7f2034
prerequisite-patch-id: 2a796874647470aa4aa3d342c6037ff5bce64cdb
prerequisite-patch-id: 40452c94dc26f25263c3ce2d5bf21e9bcfba9a42
prerequisite-patch-id: 58451a41486273e5fd1333d0b0ba061e3d28f6b2
prerequisite-patch-id: db50bca20574bd3623937a4d215aec250a96aea5
prerequisite-patch-id: 0be0fadc25acc03796ead2e6ef3d7cc6f113bf56
prerequisite-patch-id: 0bf66d9bcfebff78a22baa995a5da9085e26151d
prerequisite-patch-id: 5b6fa8ee4da2d476e73f487e6a85093fc56c8108
prerequisite-patch-id: 82f64a8fe314820e4acd72f1659b4057e810bbc5
prerequisite-patch-id: 9a183b5314fb3419d1b21d05adb6c42e94836700
prerequisite-patch-id: 7312109e13c1525c61c654c1bae55d815eac2357
prerequisite-patch-id: 3553090a9191fdb55a95a8a84ebbdee0b04493b2
prerequisite-patch-id: fd3f3bf528bf15f7959da6c5f84011e24c44ad36
prerequisite-patch-id: ba77335db3b3004ca557cf9bc95fdcc8af509f6a
prerequisite-patch-id: ce6539f08ab8514feb38b28ffaf929eea5a9f4fb
prerequisite-patch-id: 9ddd17952d790450ec80d770b2ab571dd92115b6
prerequisite-patch-id: ac95c82469159ac3faab43a5277641640a651e87
prerequisite-patch-id: d76a9df2350bd54520efab7482193455ce641ccc
prerequisite-patch-id: ff6b66ecbf7fd92e36fae0a47e6ecc4a822c0281
prerequisite-patch-id: d1f8942bcb4ba98b5fac8601540a2a35ba432cf7
prerequisite-patch-id: 332a3f236deb7033e4cc7eef22b530e9ccfeaef9
prerequisite-patch-id: aca67709ace017f89ec1b428a221afa52648ee96
prerequisite-patch-id: 3fb985984b7bcbc7c7b446a058f122ec00ef3e16
prerequisite-patch-id: 15619e402325b7daf6f172dc4314a0ae3bff1420
prerequisite-patch-id: 04f96cd9b91c3fa8ca567110b62467253f627f59
prerequisite-patch-id: 8d15bb7824f5e09feb15897588e9ce41e6160df0
prerequisite-patch-id: 8430ec4a9dff4e1e3b8618622a4824443fdc6649
prerequisite-patch-id: cbc6e3803c3f69ff8e8085edfe4d55eba80584d2
prerequisite-patch-id: 11d5cd14b7623fcac7fde365832a6d6771e1ea5e
prerequisite-patch-id: af7c79b7baef18d843420fdd640399669c4ef783
prerequisite-patch-id: 1dc7e095caf41f596ae0bfb7d64bbd497909ed0f
prerequisite-patch-id: 4a5e533abbeb832268920609e290ab3ba8df10dc
prerequisite-patch-id: 1df85f108e8a8123f092a08aaf9e7f84373e110a
prerequisite-patch-id: e0bc822f361da475456292e20b665e20ca8b23a7
prerequisite-patch-id: ba951ab9a87b15ffba84c0900486b9f2fa30c67a
prerequisite-patch-id: 79e0ed52363c1cca843e5b34c3a22f5e109907c0
prerequisite-patch-id: 48b89b8f0961cf7659f99b6cde061a17f36f30ee
prerequisite-patch-id: a060a852a57a85db46801b0f6c861b79424a602c
prerequisite-patch-id: d2a1395d11b5156a8cb6d73587654c8accf56954
prerequisite-patch-id: dae28de0be72d5c9f1d2f4e7ff440a3d89d3d802
prerequisite-patch-id: 124626876424b86b114de6772f970a6b14a53b3e
prerequisite-patch-id: 6e0ad5f2598bf72e178b1c478ba03b23d3133aea
prerequisite-patch-id: 3b78d25432bfeaf5c31f9a5537d03d54baf3412c
prerequisite-patch-id: 3f768705aaab227cc87fa9af7e9db06a97c05cb1
prerequisite-patch-id: 0215bc9d281a9abaff3cd1ba7b8a850de76c9493
prerequisite-patch-id: 3cce1bc6fbf30fdc699b0286eea92c9c6dc07775
prerequisite-patch-id: dd4e2ddd0f1b191b5790b8d3e1e178ef7f187224
prerequisite-patch-id: 36be362d8b67321cab457246eda74b675382b601
prerequisite-patch-id: 74e8885916c0f790517807e1f85cf76046e7cfb4
prerequisite-patch-id: 8d1edce7da2f521877c0bfa8b5e6e8da4dd9bffa
prerequisite-patch-id: 71b2d88144e5919cfd7feab68cdfe556e3ffba83
prerequisite-patch-id: 15ef8e982ac5e376333adcac1d72f6c1190ae806
prerequisite-patch-id: 1b83face1443d6f01584b9d87bb0364b609c07e1
prerequisite-patch-id: 5b24d081698d3cb2858ec7c21fe737f256474966
prerequisite-patch-id: 42f40baf3c5057bdbaf8beffb898c160e1df2149
prerequisite-patch-id: 5e8f496d26a9cfbc8b0f87ddb6e153b129d36f22
prerequisite-patch-id: adcd63235af8da13a75bfaf5f2ef897eb130a947
prerequisite-patch-id: abe644215cc6a0b9475ad3e1b669857d5851f3f3
prerequisite-patch-id: cf7109e935a173e4b7059613eac1c6d5db829b44
prerequisite-patch-id: 80d60ae37565de1459d6e9afe75dac241de6d0c6
prerequisite-patch-id: f334203fd3521b2d4ab23a7b9fe611a8ee6d5d5d
prerequisite-patch-id: 3f776301256c03bda06300180c8223d28e6eb1f5
prerequisite-patch-id: 7678d3b8fa74f2f3584c2325ba50954d1a1bd670
prerequisite-patch-id: 1eb383bce9f6179c768dabcdff35e0a436fea7a2
prerequisite-patch-id: fe3db87a997a95bf8a35efb60cf6590a927e6a65
prerequisite-patch-id: 92bd97f2bbb3863125fb76520eaecac0ca961fc9
prerequisite-patch-id: 26e49d649a1b9c6920e44065d85253e7f79dfc22
prerequisite-patch-id: 84f8fec309a67495ae1c17a8cfb13891ff51a0c5
prerequisite-patch-id: 5c8de4af7caf00c0f96decdc5cec50dea2c7e467
prerequisite-patch-id: 486aa8334baae274e079f424af0a94c7b874498c
prerequisite-patch-id: c4784fa980ed8ada309fdf15cb6b98b375f5676e
prerequisite-patch-id: 689c09b17dbf486df2dfdf9853d1686a7b7bc174
prerequisite-patch-id: 8df8a65dee7c1fd8a544ff8e045843c83598ed9e
prerequisite-patch-id: 54d5cc1af69800991f26c4ed4479639bbab0a1d7
prerequisite-patch-id: 5e0b2fe1855aa64c29f0e3d0bca66d6e8eafe68b
prerequisite-patch-id: 11b84c3f1cd0847c8fe1fe472bdaa61f595ea9d3
prerequisite-patch-id: ec4d8405d37d05adac5a75230d7b5b782b40b062
prerequisite-patch-id: 91046e49c6d7f73b2ac82b6e38ae46d0fd99aa82
prerequisite-patch-id: f006a6ee22cc026f5911ea581a04a74cc5f6a327
prerequisite-patch-id: b6b36042b0563184fb84b7e1fec36e5d4547497a
prerequisite-patch-id: a35e32a3def1dbaf768e37ff4ce2179cd6c30583
prerequisite-patch-id: ad4e92165528f79fb80064fe382462732fcbed4a
prerequisite-patch-id: f94c681753efc38b4197b945c5963b9196884ae2
prerequisite-patch-id: 2d7ee1fd9ef2a8a99bf5b005afa8d887381c0c6c
prerequisite-patch-id: a56fc93346617c732b807cef0b4f757899c7f659
prerequisite-patch-id: 9e1925adad5c550a959345f1b0ff7de74e76d4ed
prerequisite-patch-id: 62b44068137f2bbec9fe4a0be88eb1064c424098
prerequisite-patch-id: 204a39d92d0bba1494d6af32efdf53bfa669eae5
prerequisite-patch-id: 11c479dd20c8cfed69c1a42b37bcb6546d7f8e71
prerequisite-patch-id: 758fe0776cb130d776a767b9a0cf739b93659c2d
prerequisite-patch-id: 22eb1d52c2ffded03c56389bd4ccc67ea2111ef3
prerequisite-patch-id: 42d23e654b94adc06985d86aea1f00521163d478
prerequisite-patch-id: 1f97e09ff9941c0e098a0b3a7acb30b2178dfcb7
prerequisite-patch-id: 8c71959950c952565e75044243dea4a169cbd277
prerequisite-patch-id: d26c5f890f7754a33b286bb9d0632e03dbf6d59d
prerequisite-patch-id: 5cfc574b924ea22d987e8c432055f5f97f42d9b0
prerequisite-patch-id: d2af2784831bbdfe6e889e6da506f0dd83256025
prerequisite-patch-id: 95cb576a249650131056a8a710febc7010bf5ce8
prerequisite-patch-id: 7df9ee2274af4af3cf3118404d515e66cf400071
prerequisite-patch-id: 3acf4d003cb21becea7a55120067ba7718a15a62
prerequisite-patch-id: 6df3a982a5e71179a607b97074e95de9b5574290
prerequisite-patch-id: a229be28bd1ffe3ac24c6d55e2c1137611edf850
prerequisite-patch-id: 8cc9a633b18484cdf43c7f818f6b61df6ebd5aa8
prerequisite-patch-id: b9d5cd5ea4538879619f0f9f5436630a98e2b7cc
prerequisite-patch-id: bb42e5b98500b2f871ae7534cfc4e7dedc9ba3b2
prerequisite-patch-id: 60a53a2adf9877b757afc47fcc7e9dbc39daa5bc
prerequisite-patch-id: 84b15560cb8bcd000d5a1d3015e890c5956f170b
prerequisite-patch-id: c75b38a5351871ad2c595a5d5d0ae098a0282452
prerequisite-patch-id: 5d2de138a9257ad8a1ad2a364c8dc40978b2ecc1
prerequisite-patch-id: 4366426ee06a0ed61330c244b4d86e67faa7e984
prerequisite-patch-id: e512ea61eb9883654a196df99ce4384b095a939d
prerequisite-patch-id: 1c63d35dc689cc3013f9a3f924bbed6acd0fb812
prerequisite-patch-id: 59533c28319f2650160fa77b2e1a23875f1dead0
prerequisite-patch-id: 2a5e404eb3e72b1817f9dd21ef606b5d5e4a005b
prerequisite-patch-id: a8ddb8eab58df02edee26e98c981e32ca1e660d0
prerequisite-patch-id: 545d81052c8fc545b9e281903b90defc41ee9165
prerequisite-patch-id: 13e3ba558932aa2c230545df636e269bb305316d
prerequisite-patch-id: 54c7a975af283db1bb6db47a5712c66064f4ad09
prerequisite-patch-id: 18fa0fbf755bb4fdfb984ad259f69db5a4477ece
prerequisite-patch-id: 1ad7e5857e5b68bf5dd158cb435b6149f6f69a31
prerequisite-patch-id: 30b10a6141ba0add2ca0d34738d2e9949346008c
prerequisite-patch-id: c77152543a181e630315880fc15c39e34e8ace7d
prerequisite-patch-id: e4397b0c9e78f4056e1149f5a65c8b9a09865dc1
prerequisite-patch-id: 5ef36ea58ad431b5862d107808643731f31072e9
prerequisite-patch-id: 9b96c21a3aa5da35063022a6351149561d9e2cb7
prerequisite-patch-id: 3d9b6e6cc66105a542a098626cc0a987805893f3
prerequisite-patch-id: 343d600a9b79debe506a23561db1733f99342017
prerequisite-patch-id: 5bedd6f8ec43fb6a57bec988509f8abcf781c083
prerequisite-patch-id: 5a1aaffc8f8dd50816e8b748997255e0a976bfe3
prerequisite-patch-id: b182e9633493913157a28788dab50d34cbd22e1e
prerequisite-patch-id: 73d03fdff17bac151ccc851afaf4dcdcef05dc12
prerequisite-patch-id: a907452afbbb815ab51e5877808b62f5986ea8f5
prerequisite-patch-id: 481c44f173c436b69eb729e9ff626ca39496ef12
prerequisite-patch-id: 04ae55b52dc15da74202338e34a62e9c1be71fe3
prerequisite-patch-id: 2053aecbd438d6c3597fc2be99a5f97b5eca44ee
prerequisite-patch-id: e010a94c0cc9879c69e340ecf38a41907e3d3f92
prerequisite-patch-id: 78c6c54668d2219c0ca6a65ad5a01345e8d2bef2
prerequisite-patch-id: 94b37e35511dc6165df8cdabcc11b50068e8a060
prerequisite-patch-id: ceaa17cd6aa1d55816d128d6ae3409411b356803
prerequisite-patch-id: 2123ab976ef489f38014f4e2c1618f14511729d6
prerequisite-patch-id: 9312e269b296e2e1b963e72dc5f289ebcd98c5fd
prerequisite-patch-id: adc365315411ff823e1620800b5896a7f020139f
prerequisite-patch-id: 6edb19d148092ffabb8a88849cefbd9823cdc641
prerequisite-patch-id: cbb426c01c885c10160ed004d823afb175b48f40
prerequisite-patch-id: 978f5d6b9cb61d2980d3a32978d377a47d937009
prerequisite-patch-id: d22ba1e128c60b23f896fac86e83d4f49ccc0efc
prerequisite-patch-id: 2cbe8d702dde5d68df0b416bce8a62779c6a909a
prerequisite-patch-id: 9e82e42e89289dfbe36fc1c839cec4d23ca931de
prerequisite-patch-id: e1b7651a4df10647cc83114d59085a19c721d4e8
prerequisite-patch-id: c5d515316d6a29ae37f30fff589e1265c0bd7eac
prerequisite-patch-id: 9b4494211b3be663c7de649fdb72608dd1eb188f
prerequisite-patch-id: e5ec5c4c78c4f741b56b002f953a4a8ce898ba61
prerequisite-patch-id: 6cd81b95b71cdb19a3c0fe2b174e40df9f62facb
prerequisite-patch-id: 715a87825c64784341005aa796900ee45555c714
prerequisite-patch-id: 3fb3aedf0e54e6b6f9dc6fcf01fefaddc588a55b
prerequisite-patch-id: c26cb27ddd83c351be1bd4421ffd68c44a1e9de7
prerequisite-patch-id: 5e4c64851e750ca313011c7801b6328e217491cc
prerequisite-patch-id: f7dc8625c7c43429f848d453a272028d8dae4184
prerequisite-patch-id: d2db780c404f6eeedcd055856beaeb7e6d11a554
prerequisite-patch-id: f764e2c9354ebe5181a0d24116807d97e9ccb517
prerequisite-patch-id: fbead08913efc917fe9c763ba0011bd3e5b864c6
prerequisite-patch-id: 94ca9660e9c15cb2b87364638f627c3b049fd195
prerequisite-patch-id: c9cd64e92865370d47581e6348c4885bf8001e74
prerequisite-patch-id: 44af43b802bc01e33af5e9c70420218559e8dda8
prerequisite-patch-id: 5425aa141166dcb60fb1a706ba6a4a48096ab39c
prerequisite-patch-id: feeaedb61810da32fff942b0f8000c04bd19de2a
prerequisite-patch-id: 54c55578b50c0217ad0d1741f25538bddc1b4d9e
prerequisite-patch-id: d1ba75fc7df5ce9ba85c9b155ac1f90ce7ff4985
prerequisite-patch-id: b1ef3ecf33ec5db547b1b36b64b1d9ed5afb7d52
prerequisite-patch-id: e3166d57ef0b93d2315fa0db97ad137782be9b19
prerequisite-patch-id: a3b18a90bc6dfdd288c3fb99c0b1edd43d9214de
prerequisite-patch-id: a7bf1cc8b5e8eaa07079f1c5e717ba04fa65af07
prerequisite-patch-id: 3f116dd1d6204da2e4faa577f664f69e05a05c2d
prerequisite-patch-id: 6f759812be92fe684ececc191b754ebe1a9b0dc3
prerequisite-patch-id: c2953682f99ca29d7e4620fcec55f3bd80ec0ace
prerequisite-patch-id: b5fb273f977aa2ffcdc8e91f1053a3759341b681
prerequisite-patch-id: f7163ffa4d1fef6e56b70fa30f195e4d6c262cc5
prerequisite-patch-id: 79e1584c05934d750ba2d7e8705e9f8c8e69892b
prerequisite-patch-id: 85294497efa266db5fc91b8eb528da11fee7e75b
prerequisite-patch-id: a93ea758bf19e71419d463b0dfa61c551527b1e3
prerequisite-patch-id: 698cee2ae13807745f8f87a211a41bcd8d12a089
prerequisite-patch-id: cf12dde887bc39de72955d3c4ddd8cddabe257c0
prerequisite-patch-id: b40817a58e8f841a9ea8ecf459ed70f71328bfb8
prerequisite-patch-id: d0b8c6654c80071289b4e4f6847c8e532bf0ef5d
prerequisite-patch-id: 5afa9eb9c42bd713289801a3075f5689140d4083
prerequisite-patch-id: c0fc0154d4469c8adc7bb9f625221814289940cf
prerequisite-patch-id: f1ef44b5af7f4dc59302001b794150f127131310
prerequisite-patch-id: b754c1bbfb9030c7eb6221214e7af496dc31b28f
prerequisite-patch-id: 9fd50526d5a24a617ba32ef0e60ef4d9d0d39bdb
prerequisite-patch-id: 768b96bb18b61541ec29f97018e6cbafa3bd7b5c
prerequisite-patch-id: 7dc235fd9358e4c41c38953fe44ebb40cab6bbf5
prerequisite-patch-id: ab752fe2e11ad35290d015b8cad51b5789d47b93
prerequisite-patch-id: 2039928fe4faaf06a6432eda1ba5c932d7a142bd
prerequisite-patch-id: ec04807350aff228f90b3aa6e765ca2dd531a689
prerequisite-patch-id: 3fbbc89a7d273c3cea3761a7e0644ca645f29ddb
prerequisite-patch-id: 5466f467a20d16b495e88853b77b548e38255777
prerequisite-patch-id: 3a16e8fcb6aa2af4e7093c8da71938a78ed42f26
prerequisite-patch-id: 0fbd471f1bf228e0569dec6827c741287a047950
prerequisite-patch-id: 4e47b02b5b72fa1ff8ccf3c906ccd20467070184
prerequisite-patch-id: 1f4754f34730f9dc85b02ebf689e9a98524e574a
prerequisite-patch-id: edff44d7404119effff25ef8d55f22a35a01d964
prerequisite-patch-id: 17ca7fd8f57921742f15ae707d9102266d627826
prerequisite-patch-id: ae9d074aa64c3427143868e011dac9279636509b
prerequisite-patch-id: c83c49794c41681649278b178113c88e1f96ea3e
prerequisite-patch-id: 943a8bbe65665f275a7a9c6e7ba520300027bf16
prerequisite-patch-id: 442145824b7397cc9c63570072e32726a20fea2d
prerequisite-patch-id: 7934f8a8abeb64c55dd1f138d4ad7711567c209e
prerequisite-patch-id: e891c5390b7c6f7d2001362b628a360995bbe2f4
prerequisite-patch-id: 097379234c63eb50d53beabb704c657087122e8d
prerequisite-patch-id: 935ead07a112287352368face12cdcb9cb81b993
prerequisite-patch-id: 106376c57aa509065c2755b032163638670f09da
prerequisite-patch-id: 583a8627ab21820ebc613cae6e0e105194681a84
prerequisite-patch-id: 0b24fe8e367546952233e4b48835d6596fbe9f97
prerequisite-patch-id: 9d8ca11ff2c0966d39c15f31428a041a826e3205
prerequisite-patch-id: e6123ffdfdc1d3b1a3b81213b7dae50caf8c6841
prerequisite-patch-id: 81ad53436eb4fbb970d6cd52236595e85a6c737d
prerequisite-patch-id: 3be226f2cdd7f94626857c2e6e6bbdfaa3413327
prerequisite-patch-id: a872ec5baecc303a7f021f04e62e61f1f83a2c88
prerequisite-patch-id: 41a64a2b89423cb271f823d945d3516c1fafa035
prerequisite-patch-id: f61293f62c077334de4953b7aef2675ff32ece35
prerequisite-patch-id: 342d2a106f749a7860fec5d9bc0205fcbb33d3ab
prerequisite-patch-id: 2694e47241e2e5f8e62fff2ab1a529785a67bac5
prerequisite-patch-id: cd5be02903140ea648558ad5b3567c1092fc80b0
prerequisite-patch-id: 69e9f3a3ac78b21af6d5fb7c1bd1fee7ce63decc
prerequisite-patch-id: 0740ccbcbb1c2459b051da987692c705b5da4b09
prerequisite-patch-id: d729a9cfd07f6e2f8f844ac5307ae4397a7cd209
prerequisite-patch-id: 90a00e36b563ec52376066488666ec22eb252268
prerequisite-patch-id: 4c2a62a732067d3fbfaae17e6b3946453cd29e4c
prerequisite-patch-id: d67e510b5bbee7e135c8bf8fc028415a1b1cc348
prerequisite-patch-id: 86c956a3fe35f288ec7ff874936a28a0bff595cb
prerequisite-patch-id: d6357fa429364dd4a9ac0845fc6d3d2090364719
prerequisite-patch-id: 84858e4abb8d86deb94a4a194bfd858fd47a0977
prerequisite-patch-id: 6ffd7de2c756457aa2ca21d60bfc02d7b9cee79a
prerequisite-patch-id: 619b9551ea049d9559bdd10e0cd47ffa31f392b7
prerequisite-patch-id: 5aebbbef41279e5ad48fabf1dca8682891e28d46
prerequisite-patch-id: 55110b4fbeb0810db1f270c7cdcc5b8ba234dca1
prerequisite-patch-id: 2eea71d8d186ed55644ac3214dcf25b2dc3a44de
prerequisite-patch-id: db86664f36b82385fdf653d1c58b26baf53081a2
prerequisite-patch-id: d10303f4c8dc6671e9243f3cb7f6f234e3c56ea8
prerequisite-patch-id: ca6f03a95c5bc9d76f8a4ae1cb89f6fcc52ac571
prerequisite-patch-id: 72211b5e52769d2dafa8df120099f6ead5432c34
prerequisite-patch-id: bbb43c58b76a7be7a03c81c2d1bc82207521b796
prerequisite-patch-id: 817bf27339b6de2139c1dbf2eb412abb400326bd
prerequisite-patch-id: f478d3852ae53087dd2f87539fd2ea8266e51aad
prerequisite-patch-id: 8462e8d52834b9f3e6c19e02a9d23954f340f596
prerequisite-patch-id: c5d11ce8fbb3d84ce7e435a44cdccd7a62fc7ad7
prerequisite-patch-id: 0d050a43a8393759a3e926aa697828bdda313043
prerequisite-patch-id: 1333548743e1fb7f3699f9b956777d4fa1a9d06e
prerequisite-patch-id: cd8861a12007265a3d7b6b7c91f9d7aae6824140
prerequisite-patch-id: 3364835a12c0d666083ec450e27883098c9af48a
prerequisite-patch-id: 94c95c45dde9438e7ec7cc97c2b236a40078e0ac
prerequisite-patch-id: c684ab423eefa5737c1a2c4242045c2470725ddc
prerequisite-patch-id: ad08d0e44ad9325e622228a7040bfe286e458db2
prerequisite-patch-id: 6647e4676744a549fea3ab8ed973ace0d1fd252f
prerequisite-patch-id: 50cca1d7b2b1516a2743d89b1bd1565ba9b05cc0
prerequisite-patch-id: 92bd4645a272680445c518de74c73f08c82e6d52
prerequisite-patch-id: dbc0475564bda6a6e654d527e3b23e4fc81ba965
prerequisite-patch-id: 995dc6db298ed1d68c89bc6df887f1d8701a7c97
prerequisite-patch-id: 78ec55ccb5bbf5f6c1810aa2ba71bbc671e9e0f3
prerequisite-patch-id: 57f0c9f3d35c0124560d310a0175ccf21354d764
prerequisite-patch-id: 270595ecefcd9961077107a4e6f07cfaf1b52c2f
prerequisite-patch-id: ebeff3a6f018a2333d697580d3a98022b329dbf6
prerequisite-patch-id: 0f657b7b198736a8619724b546fe336c7687d98d
prerequisite-patch-id: ee8b745e80d8ae77b99240cdfb6d82f0608f8dab
prerequisite-patch-id: 7e77690d22d69687b14c8ef4b0fbbf8df20ddab3
prerequisite-patch-id: a995e4744bc219f7fac3ca29ae64f770d7d04856
prerequisite-patch-id: 721d309373fbf3abd8a61943edb8835430029619
prerequisite-patch-id: 7e1c8ecb9e17b70d4588aaf745b6b014f2d37d8b
prerequisite-patch-id: e4c01160095e3d32977eacaa1771c70c6a1309ae
prerequisite-patch-id: 71c28477ccefe8e6bb92edc6c410f7cb9ddbad4f
prerequisite-patch-id: 3f774aa5ef26087e3c6df4c31682268fe965ae38
prerequisite-patch-id: 72e8fa244b954d29a54ad5a6a5e3de710f067711
prerequisite-patch-id: df0326c1d4dca43ea91f6fd74a5a9b7e5e12ab81
prerequisite-patch-id: 7e1fd37e7526f89d3a98df585efea79405c24aea
prerequisite-patch-id: ee90ec0bbba7adac6a1cb5988b74864368c956eb
prerequisite-patch-id: 6f33c4284799724762d7b5b69100567c011c65ce
prerequisite-patch-id: fbdf2a9720b3198e9361a6b9ebea4891130d6457
prerequisite-patch-id: 063371944d2e68a5510c7fc472e4c5ec5ab516eb
prerequisite-patch-id: 785ad94ea138a7c508c63501f276f90a726e7e2d
prerequisite-patch-id: 814fd94e880cc98c93d3eaf2cd259ed171af8df3
prerequisite-patch-id: 437def487979a3d0b2a955ab6a503c7904eed6f2
prerequisite-patch-id: 881e2370240622447bc8c63d6d9d463bebaa9ddd
prerequisite-patch-id: f341543d5d7d30efb632dad3e26ab88bfc590501
prerequisite-patch-id: 23ba0f17af38feae6783ad40f7b0497368f8d594
prerequisite-patch-id: e8e968e4099b4967b155ef61ef4b2d155bdb65ff
prerequisite-patch-id: af2425a73b513c18bb96457761ae5b12d904e11a
prerequisite-patch-id: c9081cf297fc14f7074bc1f8933194e14bd69f4c
prerequisite-patch-id: 85f424ae7392197f48c9c1c1e7f4c999717016e1
prerequisite-patch-id: b6ecbdaa23451e5f0b2b9e21377f03c4f328c047
prerequisite-patch-id: 73a55886f302e10286ba687686a1b3d35f0e3eda
prerequisite-patch-id: 497448ad11e05a73fa7401650450e5abaecf83d1
prerequisite-patch-id: 150be027ceef9567f2b6e46cbd44a55c33518cf1
prerequisite-patch-id: c1db47444fb5ac9e2357ca93fb55fa9a6bb3b55a
prerequisite-patch-id: 21d5d868085d36ce6436ca506a7f73d3cd253005
prerequisite-patch-id: 36b09f2b9043bfcbca9bc7f865f8544f3f674e3a
prerequisite-patch-id: 3c6158d264ddba669ff93651af83f7fc5f9a60aa
prerequisite-patch-id: 79d89e74ab399b847c8e4c1d8d4b9c546ad3e368
prerequisite-patch-id: 5cdfdfd100d87426e74602979e6f496ede7a8d45
prerequisite-patch-id: 44658aa52d43a03fcb2648090113c554a6141be8
prerequisite-patch-id: e6586efa968c3d56d013a4f275e972e8b61fcc47
prerequisite-patch-id: f65aab1bd1f994c08c606b6ced7b3034619a55e5
prerequisite-patch-id: 47c60252ac48013f570b4658b7dd262d656877a4
prerequisite-patch-id: 3e3db15c2ed93845bd22481f7e6bc0157577b719
prerequisite-patch-id: feff66aa407efe12dbb7fde07a99c1981cceac02
prerequisite-patch-id: 4660001605181e436e60b2476a406fbe3cd96959
prerequisite-patch-id: b980e23995d83237b1247f4f0e01bf0fa8f17364
prerequisite-patch-id: 065008a5ac1da23b442f578778ecead41f760d3f
prerequisite-patch-id: e099dc4b0800aac2a96d9bcc2a5e3b1b2603ff93
prerequisite-patch-id: 1b8176f70e40a064c9d028a328e2eee57303173a
prerequisite-patch-id: 138da4555d5b5f598dde69c40b056086663e6aa7
prerequisite-patch-id: a33e9af00831c9bac057a26931d443f973c43997
prerequisite-patch-id: 342348e843f43f487bdb64305258c4908457036f
prerequisite-patch-id: 827c3b14d4f1157c2bdb5261a9d7e28bd004d132
prerequisite-patch-id: dc85047d4645948768503f82e873c4fc5a290ac1
prerequisite-patch-id: 70faa2e602555c5b96cd097bbbc160baca3b3d7c
prerequisite-patch-id: 52ece9f0e7e04ddcaab52fe9466618aa333f8f5f
prerequisite-patch-id: 2c11b641c046ed73874e787f63634d3f3c592e6e
prerequisite-patch-id: c39d8840eab70510b5b19600d4a209cde98529f5
prerequisite-patch-id: 1d152b35977cdd089b4bcffa82a2343edab054ce
prerequisite-patch-id: 650a93dcfd74641c4133fc31dc7a042f5ee76324
prerequisite-patch-id: a5750edf15dcd8f111c601037eee99450c8ba1fd
prerequisite-patch-id: d21a0418349b41dae78d4a617ab1e1cfbe9e0c1e
prerequisite-patch-id: 69f7550c955c99d008bdb5c5e0201a7b3949f45a
prerequisite-patch-id: d815bef8b73e2230859eac150cff50590a624a61
prerequisite-patch-id: 8afd55a2d3b0636a07e0dc44fe5d152678d6212f
prerequisite-patch-id: eb5dfc52dad67bdd4a2805393507549a4dfad5e5
prerequisite-patch-id: 8a83a12f54dd0074053b511d1baf82413c3cc174
prerequisite-patch-id: b152a6e8cc2639fcb9b45cd367a206072f83e841
prerequisite-patch-id: ba82dd49153b46b68b5444d0394941103cf11353
prerequisite-patch-id: a402c8600227ce55529c0b328cf1feb0e2f03b7b
prerequisite-patch-id: abc003029f3a30c5467ecaa25108ea68884e34e8
prerequisite-patch-id: 989f2d6cf2e79a0f96700fdfba5369208b809b4f
prerequisite-patch-id: e202d7a316bbeeede617ea0d961659f6bd392703
prerequisite-patch-id: e191b3f113c253cdd56fb1b3cb59faecb7ea0d08
prerequisite-patch-id: 0b2edd571aebc3242276bd035fc68a7d04c1ec79
prerequisite-patch-id: 60f59c30efa07a0652b3cf9c43229f8821d7f081
prerequisite-patch-id: d67aeea81fd3430736f3c49298f8db5852c1e0bd
prerequisite-patch-id: 18525befaae6c1c9a3ba82f79d0df85cbe1cdf14
prerequisite-patch-id: 23a2a1f519636bcb5308ae3ea3b9c2d20ba3c033
prerequisite-patch-id: 5b2b2e997d6d482cb1326d57328a973722496fb8
prerequisite-patch-id: c6446a78d36ce396efe35ef1a1dfc05051697191
prerequisite-patch-id: 7c2fbda6d524e1b621a56c1cb6d0b5ef5a387d3f
prerequisite-patch-id: 991bc77229de19a59335ff41b19fc43943c64a2e
prerequisite-patch-id: da76b2a4972c51e0841adf0f258935fb07588bcd
prerequisite-patch-id: 74876c8c98c2bcb998f42465ef75f3126c54d189
prerequisite-patch-id: 468d33212417ae3968443d45e98d31700b3e8379
prerequisite-patch-id: 5208c8c8a8f0e0221a0249b8851ddcc581c2bda4
prerequisite-patch-id: 7902e29c0828ecc79f4a1e94394e362a354070df
prerequisite-patch-id: ea227af0ef1a0e6f329b48f3a45bf18863c4ca1d
prerequisite-patch-id: 061a39da0fb8025d4b071a7b6530aa950ece7058
prerequisite-patch-id: 4879c3bbcc293ec0ebb3e03a2c7ce33870228830
prerequisite-patch-id: 6831d39bbb99975820b46cff53626d9dc41c5cf7
prerequisite-patch-id: 0c38cc681cbfc846df11cc5e94ec4bd728c293f2
prerequisite-patch-id: b31ea77c0e37db7c32e83c0c560f5d796791d28f
prerequisite-patch-id: cb5e4b85670e894259fc3d114c07b5448f4c2abf
prerequisite-patch-id: a9c461eca4937b00d119f082dccdd276af7db19d
prerequisite-patch-id: 3212d0eff0de8b318dbae5fdf0ba56867de39021
prerequisite-patch-id: 69e8dcc395b33d47a2fdc84c2fa5386d67d32c17
prerequisite-patch-id: 71b89178e5dc83383914302036e156306183b801
prerequisite-patch-id: 2f1307949f7264033a75473a5220e13ddd989e5c
prerequisite-patch-id: 81ce8ec07c755ed02ea418a62086b86f0f6bb118
prerequisite-patch-id: 93b835fe3945d523db9958aa1a7f2bee16de357a
prerequisite-patch-id: 7e375234b7d72cdedbb092c21bca49aa236de493
prerequisite-patch-id: 95aa112881195b1ce9d7c91bb647986acbcad5ef
prerequisite-patch-id: 3b6d3dc4894594bc0bc38c813f26c162d07762fd
prerequisite-patch-id: 19c8a6b7fdd8fb7ca1516c3097f68cde40891e71
prerequisite-patch-id: cf69afb337ba1bb39ffb31027df60d14e1af9a5e
prerequisite-patch-id: a80fd0c61e26479146012ec7ffe1a72e5c9ecd01
prerequisite-patch-id: 7b75f3d512022a249bc6f63c0037449f97b26896
prerequisite-patch-id: 4fb8d8562007d685eed943854d8a6ad98bb84375
prerequisite-patch-id: 5442fe4af96feb88ddfd761e7a9ad51b2ecd14a7
prerequisite-patch-id: 8b19da006c04ed24c9a59ae56532b71e56c4804d
prerequisite-patch-id: 74f1df8f447fe54370933ba7d5c720e0c48cc14e
prerequisite-patch-id: b33247f5951a052db630278c9798f9d9859ff8ec
prerequisite-patch-id: f4d78df469cfd27eb362d7233c4dcb57ab7ab243
prerequisite-patch-id: fe85f54738f59464840f293b4264d9dfef9cd5bb
prerequisite-patch-id: acf8d97cba9acfd1c7120598926c8f23ded80e0c
prerequisite-patch-id: 1a470e499922103d48cb613fdc9cb3d61d8f5600
prerequisite-patch-id: 66752354874c88fc816371ee064ca238e37aa300
prerequisite-patch-id: 384feec66a4535e9a140ef01e9ebbb5b724dc309
prerequisite-patch-id: 9cbcc336dc7ce831db5d78152cac9bb45baa6eb7
prerequisite-patch-id: 75a6ab1e5fb3199ac962a955cce77de7836166f6
prerequisite-patch-id: 622384fd5ea4763d3412ce6f63c7bfe47668fc0a
prerequisite-patch-id: c6ef77f5872cf58a4abb1d5b289e282336bd453e
prerequisite-patch-id: 6d64789f07e35f5c8c3f225d03f3b5cf81fe22b4
prerequisite-patch-id: 3706a15614a00297bcdf876fc8b7df6c5120ba90
prerequisite-patch-id: 6c63e8b27e8263edbf8d8047e661a9ee935a4e84
prerequisite-patch-id: ea50b72627dc62dbf14b8a96c4eac5456412ae25
prerequisite-patch-id: 5bbef1fc529902b18e6fd5f2c5e2331624f21263
prerequisite-patch-id: 5e5945f5f45db1214cdcecab9f4bfe48ad41c886
prerequisite-patch-id: 25f60deddf4a6573b5dd294fea52ea6ba092d48a
prerequisite-patch-id: 4ad3f9c3b96d7e5890a2da1756acfe2b76113de5
prerequisite-patch-id: 212527fe545f5f000b3b8c0ef39427fbbcdf49c2
prerequisite-patch-id: e9a7c0a6174da83e2142a511c8d278a3a87124c5
prerequisite-patch-id: bb44dcb5cc4359598126934b35fec35511e009b2
prerequisite-patch-id: b618a156803ca8520127f812054e9aa7e7a93139
prerequisite-patch-id: 0a11fc5142cee40508b9a0a118cbd19e0b56cfd0
prerequisite-patch-id: 38c36d7d10104e2bd9ca7f4ff9cb59ab760269a6
prerequisite-patch-id: 0abe8b9447632bb8d708990432a9c894620d1cab
prerequisite-patch-id: 9a6f61331cb1da46fc6dfdd32291b8c5c28934a4
prerequisite-patch-id: 44058783b4091843df897a233db610232c295d89
prerequisite-patch-id: b1163b6c54155373c7d54c5e9378a2abaf53f824
prerequisite-patch-id: 4f7e62f34e09c760d546fe3d4222c4b7fe534583
prerequisite-patch-id: bcfe0b09fc60cd2166b8106905536fb6d88885b4
prerequisite-patch-id: 37f20c5aecc9dc9f9562e72c5aac8531c6a11ca5
prerequisite-patch-id: 8cb37be00c97053610b8f2c677578c0cc8db8bcc
prerequisite-patch-id: cdfc99250ac70d780edeb9402a6cb9e74ebc7f0d
prerequisite-patch-id: 9019228ea91bf4f52a52636777021099daed7bb0
prerequisite-patch-id: 965a5e8a7e6d418918e94aa1d6e47d75abc3dfb7
prerequisite-patch-id: 3fc7adb12565820afda4278ef96f860c83e15c76
prerequisite-patch-id: 3d725eb874aa2b29864fbc598ded71793f1729af
prerequisite-patch-id: 77101f5d299837a6e828a7fdfbda2f6c410f07c9
prerequisite-patch-id: 6364301d940e4da995c971c25b6af092cb2febee
prerequisite-patch-id: 90bf51ac20b7c7d9d371e58a77427b370d456282
prerequisite-patch-id: ca36f7e3dff44d37eae93966995c56f9405ab1f8
prerequisite-patch-id: 45455f0ee8449afc6e87485290369d09145291e6
prerequisite-patch-id: 662d8857a2e6ab08acab19f9e5993716410abfe0
prerequisite-patch-id: cafda77dd0a9e39e5992725d3af969b39d821b2c
prerequisite-patch-id: 1eb9beaab4a85c3d7022c5f566e96a1be032778e
prerequisite-patch-id: 9d79da1818050d87a5be6bd51b639fe9c0cbf06b
prerequisite-patch-id: d8f053911172ecee5a461fa9b336ac23554c6390
prerequisite-patch-id: f84cbbfabde15508705e2bb2be3c502695bd884a
prerequisite-patch-id: 004bbd25e022329d9989f26a012d2b4dfc2dcdca
prerequisite-patch-id: 9e66e09ed065cd1a581beeae1cf40fa57bfd1bcf
prerequisite-patch-id: 0d33ec294c1d63eb81c3a43e4ee735276229c15d
prerequisite-patch-id: a680fb1982b9e1a571e65e70fe57ccdc5970d849
prerequisite-patch-id: 1420085b2d3a35b0e12f2ee4789760ebb2933322
prerequisite-patch-id: 26774c1c3cea53f39a5cb5fbddcfa224c8b4651e
prerequisite-patch-id: 8bc00ca7b71221a9e4247c0d01e832ab594dcbeb
prerequisite-patch-id: 6f443e847f6167f24122404aec149bd8a6293d95
prerequisite-patch-id: 0c8de36284e2ce9b3d2232dd7b1020e590c88d65
prerequisite-patch-id: af043494bbeaab26e1b8dc0729f6995669da79cb
prerequisite-patch-id: 42e780e66e3dedb8039ef8de7c8875b96cf710d3
prerequisite-patch-id: 0ea4486d443076512712f3d729f1bf40c7215cb7
prerequisite-patch-id: 9ce56e7af4b70a89e373947399b19a670f53932b
prerequisite-patch-id: 39178791d08c78c7a1fd07a83e73c344fa675e5f
prerequisite-patch-id: 4ace0d7df48a4cffb313eb39ee2eaca7551cf785
prerequisite-patch-id: d1d7022fb73bbd8c3378b309f0ac0b1b74423ad4
prerequisite-patch-id: 6ccc493b3ce23f5ead5b63919c44d3af61de7485
prerequisite-patch-id: e41d35b7dd3446b820160c62aeeeef9b6bdb7a0a
prerequisite-patch-id: daa07f7b598fdf9555661b081f5430972a494f09
prerequisite-patch-id: e067f30c340a033d6a1312a992d1f62ecbff6e29
prerequisite-patch-id: 25eaa90efc6207469a679ab0692935ab530806bb
prerequisite-patch-id: c1d2c6cac308b569f6dc06cea9bcab92588cc249
prerequisite-patch-id: aa2c71094053101bcae08783dfd6b0f30382e85e
prerequisite-patch-id: 15c1989a8aa87f97b5bbcdc3c6e42d071e4655f9
prerequisite-patch-id: f23a79bb0eefa1a04a3cbfa7e64393405a1bc4b2
prerequisite-patch-id: 7b245dfbd404b08188b405372d2fd8c5a2e8177e
prerequisite-patch-id: 4eb760dbe18709b86ab925f1e2e9367b59004c98
prerequisite-patch-id: efcefb9f8d360f9525527e844b32458c4f94c4af
prerequisite-patch-id: daa00f6ccd8defeea14ed84ea45d93b8b84b4b61
prerequisite-patch-id: 188e384d82429015cac286245c8add7320e7be5f
prerequisite-patch-id: 883ce56cbc0c791165abb41d01e1668ebe244b81
prerequisite-patch-id: c4e6653e8731e075a77322367b27d236dcc1a119
prerequisite-patch-id: 99fb348b32739cbe44619f9628b621b4ba4e45ff
prerequisite-patch-id: 0e10edd0addcb518e87a3732e20be975cf96b154
prerequisite-patch-id: 5f50f131f5e7a823de6b76cb9db38cf746a77763
prerequisite-patch-id: 297d96e2425825fa67e961dba9f06c63f9226786
prerequisite-patch-id: d42b3e96e11cd962b6ab2a9fa8fc8cfcdecc9fd7
prerequisite-patch-id: 35a42940106f74ccce0580387f49dec474dbab66
prerequisite-patch-id: 338fa1223ead9445433e2c427ed9130287c0f711
prerequisite-patch-id: 1a427c99edfffe44639267b7dfa055a2693e4ae2
prerequisite-patch-id: 25c8304d9bca7a64da4aff14bdbfdee7afb094a2
prerequisite-patch-id: 39dc0a57293242d51d76ec2232865be59c5d873c
prerequisite-patch-id: edcadba213f54d11c42d053cbc08fe69a29b4e5c
prerequisite-patch-id: d9c0c50d3f5a412bb3f8ed2abc0062405d558612
prerequisite-patch-id: cafda77dd0a9e39e5992725d3af969b39d821b2c
prerequisite-patch-id: 1e320d637f0d8a4dced46fd8468483d8754d9504
prerequisite-patch-id: 840d367b8fd5818719589f29a1fcb8789ffe234c
prerequisite-patch-id: ebca199b37483c68cdb5c00b2b17b25262e25758
prerequisite-patch-id: b593229ff5d119b030c69b3fd4148f6b73a906c1
prerequisite-patch-id: 12feff0a1b45ea715eb311af4aa06f70c81bf18d
prerequisite-patch-id: df12fd7a284511fffa1f87856140790a00d9afd5
prerequisite-patch-id: d4106a42e8510109beb9326da894b1ea3468d923
prerequisite-patch-id: 2d3ab940fd35e9264a9c6a3cfe0c6e72305cc857
prerequisite-patch-id: 7cda241ec0a6c3fa49221636b33a95776f126b6c
prerequisite-patch-id: dd9390e07eac292473ae3fdd9228cf0609865bf1
prerequisite-patch-id: 8053895144fcf84665de857857cda3d1a0168ea2
prerequisite-patch-id: 0f1cc6bc2cb23c50ff27e5b64ace4a16012b991b
prerequisite-patch-id: 22cca909ac16bf4e523edf420e8928d61ab68e25
prerequisite-patch-id: 26ec5a03b0ac6b2d5b9df1a82b699a3701e62f91
prerequisite-patch-id: 2716573293cd922c7b3991fd2935aa4577ab115f
prerequisite-patch-id: deebcba73de2b9d66868d78332035a89af9d9ea3
prerequisite-patch-id: 426756cd56a85b0f0c858bdb017850fb72f840fe
prerequisite-patch-id: d4db6d5eac8e778ddbbf9b62a890f99b8d293264
prerequisite-patch-id: 624b5385e62a8beb159e2528faba304bfb922c22
prerequisite-patch-id: 432b8a96287c97e3ed522cbbc14704f8425dbb2d
prerequisite-patch-id: 5e595b06a6eaf744d4d5740de17ae17dff2ac4cd
prerequisite-patch-id: 9d750c6a01410701c8638a3e92ce079a06d45bab
prerequisite-patch-id: 2b2c16ef52e91003b4d03d898b67878098fb8566
prerequisite-patch-id: cd2c99150eb688d1faf6d245d2a6e565d464ffcc
prerequisite-patch-id: b402dad9260bd6621f87164857477e6e2c0a8a64
prerequisite-patch-id: 7ae14d7e0442905703eb99ece856bec8c3a90447
prerequisite-patch-id: 095ca11ca995746009cfac42d672d12ce255fe74
prerequisite-patch-id: c75d1fb8f52d5532f811a869b5c03a75eca97ab4
prerequisite-patch-id: da8706f810f63c032b43aa880c9c8846b2fd5a03
prerequisite-patch-id: 309cdd87806fbe506642d34f764e2f9731eb8909
prerequisite-patch-id: 3fe939c536518ad8adceb8225dfebac2ed1356bb
prerequisite-patch-id: 7a8290e5f111475894b03ee0336d44e5ba1d9f99
prerequisite-patch-id: 481b0d3810b45a408d02091c851ada9e55ec3b95
prerequisite-patch-id: a64ac6ec39e8f0bec5d76851bca7b1d621cc31f3
prerequisite-patch-id: f602b54178356bca9b9a12a237b7583e81e650c6
prerequisite-patch-id: 4d2b7561f7b1bf5167f0908653861ffe60dc6f44
prerequisite-patch-id: 22b0a5fd5cb89e460c994705a22f58bf3d6f27c6
prerequisite-patch-id: 24dc8fd15b485495f63b9b08ef2a5f679fd37984
prerequisite-patch-id: 328a49261e5e55912ecb59fe465364fda1e773b4
prerequisite-patch-id: 7906d0cebc260ba4d43641c9aee31844a660ce31
prerequisite-patch-id: d0910429cb2b01484ae070ab9ced381160da70f8
prerequisite-patch-id: 15c8b9cb9f2fa407fbf2d69efb729eba4b24ae58
prerequisite-patch-id: 746a4de17d6b895af8f8e3dedbdb2d7a275a4660
prerequisite-patch-id: 53abda39c8a31fb987462d70ce3a728522a3f102
prerequisite-patch-id: cef05eccc1447d0a8ccd0ad0ccb7571854f89a45
prerequisite-patch-id: 4573b07640a5c06adb5b5fb99eb9f9d116d79454
prerequisite-patch-id: e8fe69d627e6de23fa67e209ed916d424ca36990
prerequisite-patch-id: 37366a80aa758595101e5ace158bb3a71a695eac
prerequisite-patch-id: 1d74c3ee8b0632a6d4b44c9d532b9ad094d66ce5
prerequisite-patch-id: c78a51be7799a107c91efe2dccf4143aec8d9d92
prerequisite-patch-id: 768b1616e181ddf0d7425297af8f6b36ca37862d
prerequisite-patch-id: 52434e5edbac4363329b389860af08d23a6684f2
prerequisite-patch-id: db815eba6f563e93e877967a9bb3235aa9df66a2
prerequisite-patch-id: 849acb319f8b82b4038f9675afe8cae95156abbe
prerequisite-patch-id: de144c69c5b8907cab825b7dcb7343b4c2a2bd31
prerequisite-patch-id: 0a013d5ef14f677b4f0ce16f5584c59c9afb73a5
prerequisite-patch-id: 0f35456e77d8ba76bca910111f57652dbbfc3c8a
prerequisite-patch-id: 5e70e62c1674f211b075642bc7b32b9eef480770
prerequisite-patch-id: 19aa9657206ad38a1bc67ff364f7e0ca59036931
prerequisite-patch-id: 229db81b21bde08aa603ed58eaa7ae9ee59d2efb
prerequisite-patch-id: 4234f0f7afb5edb55f4ce9553b7119ced5af4374
prerequisite-patch-id: 60d8748b31ff798525cc71d12e575e2ebab68b70
prerequisite-patch-id: a5897126193217c819e6df02b6ffecf98155b001
prerequisite-patch-id: 3ee2fd004f6aa755afbd97f0d80f0b5088c7d4c8
prerequisite-patch-id: bca2f3c3cad7f40c518901c34dd096b2b713b19a
prerequisite-patch-id: 70e2bb4c9abe066a32393c02afa83f47f323a8ef
prerequisite-patch-id: ed3a02203dd53a980fbb9a29d571f6a5ce7c165c
prerequisite-patch-id: 879cfdd09cb9cecb9361679fd36180d2c7716347
prerequisite-patch-id: 76708a6de330beed65124c27390b8377c83a1f39
prerequisite-patch-id: 44ec7232237e4b32d7af713413e6cb2bc1b4b4fd
prerequisite-patch-id: c1203a62028e6c595427dba644c22bc05d1816e9
prerequisite-patch-id: d729e3277afa3d361f7ee91ce6235ede6b5cb4a3
prerequisite-patch-id: 598869bf357bd04930dc4fe7c914f09b5e9be4d2
prerequisite-patch-id: 75e4cc67b8c9f547b3476786cb3bef10bb9c501b
prerequisite-patch-id: f4f99e26f41d0c5674fa7524dd8a560aa7e16638
prerequisite-patch-id: 5ce3c7c5808adefe5adf0685c1c7232158125a22
prerequisite-patch-id: bc5f90705d95d4cfbf47b5e56edcb03701aba64a
prerequisite-patch-id: 8c8b58347018d19d697f661efcd8d7bfb3f0fc1f
prerequisite-patch-id: faac56fcf9e544732ddf9865834ebbc365a2453e
prerequisite-patch-id: 5383aea54059aede8cb9c1f6298c05ae89e7f195
prerequisite-patch-id: 93091afa8a0e145afc42fe0a2e128fd7925ca13d
prerequisite-patch-id: 1b9ca1fd699b563c9ea50a155feb6565b53d618b
prerequisite-patch-id: 3b6b86fc24b4b196ba40057a32686b74ebfde6b6
prerequisite-patch-id: 3b33915a99098aa7cd1c6245b5afe45e818ac97f
prerequisite-patch-id: 452c82428fe03972d947f36674df74757e6c9d6d
prerequisite-patch-id: 48ac44c1af9bef33c5359b0e702b0673446d7d75
prerequisite-patch-id: a5fcb5624cf22abe497c6af0caa0e6979693016e
prerequisite-patch-id: 401efc540ca3f28d67258bb574e7c0fc2446f2a5
prerequisite-patch-id: 6ceeda96d2c4fd2ee26ae0b729cfbc343d15f163
prerequisite-patch-id: e4f4fe9c72985de7c8e8cea13522a1a148447eaf
prerequisite-patch-id: 8e91cc455505376b43d14e5fc56be2cbd866c270
prerequisite-patch-id: 9916689cc32ee0e274f5854dfc81290d917a8d35
prerequisite-patch-id: a1eb8662bf8feec6f2c4d299e4f0a83c58f17fc4
prerequisite-patch-id: b853f16a5a1db98e25de23e61f9a4f4dcb48e508
prerequisite-patch-id: 0ff39a7d72a7ecde6cf782ac2cb85c65a8e5d762
prerequisite-patch-id: 62c19e53f42a08afde4cd4fb020bd862bdd42bd5
prerequisite-patch-id: 79e03bda66f3846c9b8c1a5abaac5f5369439f0b
prerequisite-patch-id: 28439b7a776c494868969c0fc71a558e8837835e
prerequisite-patch-id: 977da299f6e84e092e45699e0b5c469d98b645f8
prerequisite-patch-id: 5267e5fd113d2edb8d2f92dd83f3aed6c14312ed
prerequisite-patch-id: a0c83cd47016892a4d0cd820564dc76500ca0390
prerequisite-patch-id: d6a90225a22b35705496202414dd571bfa9fe6f3
prerequisite-patch-id: c17cb96e75d21066a7143021d7e85eeb93dfe265
prerequisite-patch-id: fa033fb52f92677f942923486090683b155a257b
prerequisite-patch-id: f6b8bee6a3a419bad2098cdb3577468dd70e9040
prerequisite-patch-id: 5abec0158acb74f88fdcd200d14c04c4fa732724
prerequisite-patch-id: 889b22c83de675d7b51f47fc0e20c7b7513ac4c1
prerequisite-patch-id: dc4bb7ad0b180af076882fed0d41113e72b1a2f9
prerequisite-patch-id: a059c03530a952ef7fe0bce857ed4640d068947d
prerequisite-patch-id: 001e7338835d54964c460480713690a443cbe339
prerequisite-patch-id: 272b0630cfa3cef3409631088314e605c87b68fb
prerequisite-patch-id: 5fa5fc699c888654c4dae508affe2076270864f4
prerequisite-patch-id: 7462ace66fc059ed2396891e9a57ebbc8769ca23
prerequisite-patch-id: 0a64959bf5d2246562f7ccdddf2fe3bb181f4d26
prerequisite-patch-id: f7ff73a0ea84032a17d8adfa8c6709f30d226785
prerequisite-patch-id: c4197c954cb4752c7393a00309f19726d3636bbc
prerequisite-patch-id: 1e326cc9bf9b47df7da00804a5ff3440aa5cee25
prerequisite-patch-id: de06d61c53889e7a65709ab5a0a2bd2724cf8c91
prerequisite-patch-id: cf39c1c0fbb682d939ec17545509184433a9c62c
prerequisite-patch-id: a43031afcabb6cb73615e6a811504733a514bd79
prerequisite-patch-id: 07e5dd88396d5f75a15fcfccdf8309cc95ba0738
prerequisite-patch-id: 061fdc184ef4f4dde20c7f7de15a39365c58ef4d
prerequisite-patch-id: 74f0bf069b1b88fa7f501a2d532679884781f336
prerequisite-patch-id: 072459f500d9a786cfcc274d35fd0f1168862811
prerequisite-patch-id: e6a1273bc8fe5be95655470ec87f79709fb4a1d6
prerequisite-patch-id: 39d3dce38dd6e8ad02f26929b6e8e5232b016508
prerequisite-patch-id: e5b579bb69659f5f56ae867917c3a2faf922362c
prerequisite-patch-id: 4950bbb24e0efcec838c4ffb0438de56fca5d77d
prerequisite-patch-id: 7830c69e3f4a5277c1afc2ee6332f697cd8442d0
prerequisite-patch-id: 8d60c7f7e05749ae7ecea4df1f414d93ed4b454e
prerequisite-patch-id: 7dd5577e258394a2753040fe255e2e8a48b471ab
prerequisite-patch-id: e04ad15605d6909b9c490472eba79d39900d06e3
prerequisite-patch-id: 99bb3f26ab231f085dd54f6ceab4ab372da038c9
prerequisite-patch-id: e4819d13c05fdb6aee5a0a8d44e264aee9d2257c
prerequisite-patch-id: 07735f6135b0bfed9b8edf2426a4b31ddcd2a25e
prerequisite-patch-id: d300b98d032bd9591755f50546e9e70a10dfc25d
prerequisite-patch-id: 64f6bf76193288080aa05b54c2c243ead7d03bcc
prerequisite-patch-id: 5f983e48c2f81cb37ef4e0fd96c73f9aae555c32
prerequisite-patch-id: f65dd972e2ce5413253e0699c0ae0b10b940fb28
prerequisite-patch-id: 96a1c3131aeced67bcb6be961fa1a5aea70c426b
prerequisite-patch-id: 101e64caf43847b1a428f716d29303d7a173bdd0
prerequisite-patch-id: 52d3584a7caca0323fb24b6505943a9aae56f103
prerequisite-patch-id: e89a783391860ca8b65580f90e3225ae75030362
prerequisite-patch-id: 41fc23e655905685d5409681df2896711f495df9
prerequisite-patch-id: b21fbe4ebe78a5465370cc16b55f2fdad9d88b07
prerequisite-patch-id: 77da6e3876c80e0db1fc5ff952113dc14098f6f6
prerequisite-patch-id: bdf53174a1a366eb8a0578ffd8237d7bc698832f
prerequisite-patch-id: d824d42cfea8453de9c5b2bc283ca7c1e0f72ac1
prerequisite-patch-id: 9b7be9e27d0a0dfe9137926281c14e2a663f092f
prerequisite-patch-id: b9b1fc8e6dc2faae1e4831137a8b348d5627019b
prerequisite-patch-id: f2ba0aa850340490d3bc875cc0878b5be0ddbc44
prerequisite-patch-id: fc4b58f0a4387c1f4508643eeb8654e3102c5dff
prerequisite-patch-id: f2c636260d4af1a14fffd8a373468a65ab1f6935
prerequisite-patch-id: f67845fc0277caabf9fac61fe08aca950e7a3ff9
prerequisite-patch-id: d0c4e18249f8ca47ccaa0dea7e26441745ac9757
prerequisite-patch-id: 4a906a52f7b3faafa11296cf8452bbdbc00a2f55
prerequisite-patch-id: 82e881b0296f0bdea249323d071ff1038d7b78c5
prerequisite-patch-id: 63ef98ec9c0d2f16fa2596acb5ef337b5f936067
prerequisite-patch-id: 90923df19b43f3bc09479f405e1392376c8095f1
-- 
2.37.2


[-- Attachment #10: waydroid.png --]
[-- Type: image/png, Size: 416752 bytes --]

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-10-29 19:28         ` [bug#51737] [PATCH v3 1/8] " phodina via Guix-patches via
@ 2022-10-31 19:30           ` phodina via Guix-patches via
  2022-11-01  6:51             ` Liliana Marie Prikler
  0 siblings, 1 reply; 31+ messages in thread
From: phodina via Guix-patches via @ 2022-10-31 19:30 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org
  Cc: Julien Lepiller, Ludovic Courtès, Maxime Devos,
	Liliana Marie Prikler, GNUtoo@cyberdimension.org

Regarding the Waydroid (Android) image.

We are currently unable to build the whole image due to the issues summarized by Julien Lepiller on the 10 Years of Guix. Thanks for the presentation! [1]

However, there is project in Nix that allows to build the image. [2]

Would it be possible to use that instead of the one hardcoded in Waydroid?

It's not the perfect solution but definitely better than a random Andorid image pulled from the network. 
 

1 https://10years.guix.gnu.org/video/towards-building-modern-android-as-a-guix-package/
2 https://github.com/danielfullmer/robotnix

--
Petr




^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-10-31 19:30           ` phodina via Guix-patches via
@ 2022-11-01  6:51             ` Liliana Marie Prikler
  2022-11-01  7:04               ` Julien Lepiller
  2022-12-13 16:49               ` phodina via Guix-patches via
  0 siblings, 2 replies; 31+ messages in thread
From: Liliana Marie Prikler @ 2022-11-01  6:51 UTC (permalink / raw)
  To: phodina, 51737@debbugs.gnu.org
  Cc: Ludovic Courtès, Maxime Devos, Julien Lepiller,
	GNUtoo@cyberdimension.org

Am Montag, dem 31.10.2022 um 19:30 +0000 schrieb phodina:
> Regarding the Waydroid (Android) image.
> 
> We are currently unable to build the whole image due to the issues
> summarized by Julien Lepiller on the 10 Years of Guix. Thanks for the
> presentation! [1]
> 
> However, there is project in Nix that allows to build the image. [2]
> 
> Would it be possible to use that instead of the one hardcoded in
> Waydroid?
IIUC you would have to translate the nix packages there into guix
packages, assuming there's a 1:1 translation (which might not be the
case since everything's just a derivation in Nix).  You also have to
take into account different quality guidelines between Guix and Nix –
Guix tends to be more stringent.

Since it's possible to specify the URLs via command line, how about
simply removing the defaults and making the respective command line
options required for the time being?

Cheers




^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-01  6:51             ` Liliana Marie Prikler
@ 2022-11-01  7:04               ` Julien Lepiller
  2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
  2022-12-13 17:10                 ` phodina via Guix-patches via
  2022-12-13 16:49               ` phodina via Guix-patches via
  1 sibling, 2 replies; 31+ messages in thread
From: Julien Lepiller @ 2022-11-01  7:04 UTC (permalink / raw)
  To: Liliana Marie Prikler, phodina, 51737@debbugs.gnu.org
  Cc: Ludovic Courtès, Maxime Devos, GNUtoo@cyberdimension.org

[-- Attachment #1: Type: text/plain, Size: 1545 bytes --]

That sounds good to me. We could have a default, though we must at least make sure we don't advertise for a non-free image.

Concerning my own work, I'm currently trying to build some base system libraries. I managed to get a working cross-compiler for x86_64-linux-android, and I managed to cross-build a couple libraries. I'm hopeful I'll be able to build bionic (android's libc) by the end of the week, then a complete cross toolchain that will help build the rest of the system.

Le 1 novembre 2022 07:51:17 GMT+01:00, Liliana Marie Prikler <liliana.prikler@gmail.com> a écrit :
>Am Montag, dem 31.10.2022 um 19:30 +0000 schrieb phodina:
>> Regarding the Waydroid (Android) image.
>> 
>> We are currently unable to build the whole image due to the issues
>> summarized by Julien Lepiller on the 10 Years of Guix. Thanks for the
>> presentation! [1]
>> 
>> However, there is project in Nix that allows to build the image. [2]
>> 
>> Would it be possible to use that instead of the one hardcoded in
>> Waydroid?
>IIUC you would have to translate the nix packages there into guix
>packages, assuming there's a 1:1 translation (which might not be the
>case since everything's just a derivation in Nix).  You also have to
>take into account different quality guidelines between Guix and Nix –
>Guix tends to be more stringent.
>
>Since it's possible to specify the URLs via command line, how about
>simply removing the defaults and making the respective command line
>options required for the time being?
>
>Cheers

[-- Attachment #2: Type: text/html, Size: 1941 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-01  7:04               ` Julien Lepiller
@ 2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
  2022-11-04 11:38                   ` Denis 'GNUtoo' Carikli
                                     ` (4 more replies)
  2022-12-13 17:10                 ` phodina via Guix-patches via
  1 sibling, 5 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-11-04  3:03 UTC (permalink / raw)
  To: Julien Lepiller
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Liliana Marie Prikler, phodina

[-- Attachment #1: Type: text/plain, Size: 6495 bytes --]

On Tue, 01 Nov 2022 08:04:03 +0100
Julien Lepiller <julien@lepiller.eu> wrote:

> That sounds good to me. We could have a default, though we must at
> least make sure we don't advertise for a non-free image.
> 
> Concerning my own work, I'm currently trying to build some base
> system libraries. I managed to get a working cross-compiler for
> x86_64-linux-android, and I managed to cross-build a couple
> libraries. I'm hopeful I'll be able to build bionic (android's libc)
> by the end of the week, then a complete cross toolchain that will
> help build the rest of the system.

Sorry for catching up late, I was really busy before.

Note that I'm not familiar with Waydroid. Reviewing the Android part
and the overall architecture it was on my TODO list[5] but I've not yet
got the time to do that[1].

I'm also not a Guix maintainer and I don't know if the project already
took decisions or not with what I'm about to discuss.

What I wonder is that if Waydroid gets added as-is, it might be useful
to at least be able to test its functionalities with some FSDG
compliant image.

For instance if users report that audio is broken, it would probably be
a good idea to be able to run test ourselves. And if there is a bug in
binder, we could also do security testing ourselves for instance.

If I compare with another similar Guix functionality: we can
produce software for Microsoft Windows with "guix build -t
x86_64-w64-mingw32 hello" but we at least have Wine for testing.

As I see it, there might be several approaches to solve this testing
issue.

(1) Use GNU/Linux and Guix to make that FSDG compliant image. 

   For instance we could have:
   +-----------------------------------------------+
   | Guix host                                     |
   |                                               |
   | Waydroid (the host/container tools)           |
   |   ^                                           |
   |   |                                           |
   |   v                                           |
   | The communication protocols (like Pulseaudio) |
   |   ^                                           |
   |   |                                           |
   +---+-------------------------------------------+
       |
   +---+------------------------------------------------------+
   |   |  Guix guest                                          |
   |   v                                                      |
   | Android HAL like hardware/waydroid/audio                 |
   |   ^                                                      |
   |   |                                                      |
   |   v                                                      |
   | Libhybris or compatibility software that can run Android |
   | libraries on GNU/Linux.                                  |
   |   ^                                                      |
   |   |                                                      |
   |   v                                                      |
   | GNU/Linux audio stack or software that can use the       |
   | Android audio API somehow.                               |
   +----------------------------------------------------------+

   I'm unsure how much work that would be, and I've also not looked if
   some GNU/Linux distributions are already using libhybris with Android
   10 HAL. I'm also unsure if we need to use glibc or bionic (guix can
   build Android components with glibc and libhybris probably expects
   bionic).

   The advantage of this approach that it might be possible to do
   automatic testing within Guix as Guix would be used everywhere.

(2) Another approach would be to look more closely at lineage-17.1 and
    make a stripped down version that is hopefuly FSDG compliant. It
    should normally build fine on top of Trisquel.

    In Replicant we moved to AOSP for our work on Android 11, so we
    didn't do extensive research on what needs to be removed in
    LineageOS 17.1.

    However there is at least low hanging fruits that could be removed
    easily like:
    - The Linux kernel
    - The unused hardware support code, like vendor specific libraries
      in hardware/ or device repositories in device/.

    The waydroid additions probably need to be reviewed too.

    The downside here is probably maintenance: users need a way to
    report FSDG compliance issue, and there needs to be a way to fix
    that.

(3) Porting the Waydroid modifications[2][3] on top of Replicant 11 (and
    reviewing these modifications too).

    While Replicant 11 is not really usable yet on real devices yet
    (telephony support for the GT-I9300 (Galaxy SIII) isn't complete for
    instance, sound support is very basic, etc), Replicant 11 status
    shouldn't affect the ability to add Waydroid support.

    The advantage of Replicant here is that there is already a community
    and infrastructure and Replicant is already listed in the FSDG
    compliant distributions.

    An issue with Replicant would probably be with boringdroid[4]:
    It ships a binary apk (though it's released under the Apache 2.0).
    Building it from source within the Replicant source code would fix
    that, and the boringdroid seems to be doing something like that
    already. However we also need to deactivate it for real devices, so
    that seems to require more code integration work as boringdroid
    seems to patch core android components like
    platform/frameworks/base[4].

By the way, does someone knows where to find information about the
architecture of Waydroid. For instance is there some document that
explains how it works (like that it uses a HAL that use alsa that
then somehow talks to the host pulseaudio?, what modifications it did
for graphics, etc).

References:
-----------
[1]In Replicant 11, we now use a kernel based on upstream Linux (more
   precisely a Debian kernel with our patches on top). So we need to
   understand which projects we can share (maintenance) work with.
[2]https://raw.githubusercontent.com/waydroid/android_vendor_waydroid/lineage-17.1/manifest_scripts/generate-manifest.sh
[3]https://raw.githubusercontent.com/waydroid/android_vendor_waydroid/lineage-17.1/manifest_scripts/manifests/02-waydroid.xml
[4]https://github.com/boringdroid/platform_frameworks_base
[5]https://redmine.replicant.us/issues/2290

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
@ 2022-11-04 11:38                   ` Denis 'GNUtoo' Carikli
  2022-11-04 11:51                   ` Denis 'GNUtoo' Carikli
                                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-11-04 11:38 UTC (permalink / raw)
  To: Julien Lepiller
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Liliana Marie Prikler, phodina

[-- Attachment #1: Type: text/plain, Size: 1091 bytes --]

On Fri, 4 Nov 2022 04:03:08 +0100
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> wrote:
> (1) Use GNU/Linux and Guix to make that FSDG compliant image. 

I've looked into more details for audio and it uses the alsa
interface exported by pulseaudio[1][2]:
> ret = snd_pcm_open(&out->pcm, "pulse", SND_PCM_STREAM_PLAYBACK, 0);

I'm not sure if "pulse" is the host name for the interface or not
though[3][4].

So here using plain GNU/Linux and "mplayer -ao alsa <file>" could
probably work for testing.

I'll try to look into some other interfaces later on.

References:
-----------
[1]https://github.com/waydroid/android_hardware_waydroid/blob/lineage-18.1/audio/audio_hw.c
[2]https://github.com/waydroid/android_hardware_waydroid/blob/lineage-18.1/audio/audio_policy_configuration.xml
[3]https://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html#ga8340c7dc0ac37f37afe5e7c21d6c528b
[4]They use a modified version of the real alsa library[5], so the
   API documentation should be the same.
[5]https://github.com/WayDroid/android_external_alsa-lib

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
  2022-11-04 11:38                   ` Denis 'GNUtoo' Carikli
@ 2022-11-04 11:51                   ` Denis 'GNUtoo' Carikli
  2022-11-04 12:26                   ` Denis 'GNUtoo' Carikli
                                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-11-04 11:51 UTC (permalink / raw)
  To: Julien Lepiller
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Liliana Marie Prikler, phodina

[-- Attachment #1: Type: text/plain, Size: 621 bytes --]

On Fri, 4 Nov 2022 04:03:08 +0100
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> wrote:
> (1) Use GNU/Linux and Guix to make that FSDG compliant image. 

For graphics GNU/Linux probably works out of the box too[1]:
>     make_entry(tools.helpers.gpu.getDriNode(args),
> "dev/dri/renderD128")
> 
>     for n in glob.glob("/dev/fb*"):
>         make_entry(n)
>     for n in glob.glob("/dev/graphics/fb*"):
>         make_entry(n)
>     for n in glob.glob("/dev/video*"):
>         make_entry(n)

References:
-----------
[1]https://github.com/waydroid/waydroid/blob/main/tools/helpers/lxc.py

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
  2022-11-04 11:38                   ` Denis 'GNUtoo' Carikli
  2022-11-04 11:51                   ` Denis 'GNUtoo' Carikli
@ 2022-11-04 12:26                   ` Denis 'GNUtoo' Carikli
  2022-11-12 15:54                   ` Denis 'GNUtoo' Carikli
  2022-12-13 17:48                   ` phodina via Guix-patches via
  4 siblings, 0 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-11-04 12:26 UTC (permalink / raw)
  To: Julien Lepiller
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Liliana Marie Prikler, phodina

[-- Attachment #1: Type: text/plain, Size: 1942 bytes --]

On Fri, 4 Nov 2022 04:03:08 +0100
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> wrote:
> (1) Use GNU/Linux and Guix to make that FSDG compliant image.

I found projects that have test code for binder under GNU/Linux[1][2],
however it seems to require selinux.

For getting a shell, it uses lxc directly[3]:
> def shell(args):
>     if status(args) != "RUNNING":
>         logging.error("WayDroid container is {}".format(status(args)))
>         return
>     command = ["lxc-attach", "-P", tools.config.defaults["lxc"],
>                "-n", "waydroid", "--"]
>     if args.COMMAND:
>         command.append(args.COMMAND)
>     else:
>         command.append("/system/bin/sh")
>     subprocess.run(command, env={"PATH": os.environ['PATH'] +
> ":/system/bin:/vendor/bin"})

Though it uses Android specific paths. If we add a symlink from /bin/sh
to /system/bin/sh, it might work.

So it's probably not that hard to somehow generate an image where the
non-android specific functions could at least work for testing.

It might also be possible to use that as a starting point to later on
switch to Android images built with Guix.

As for building applications, beside the technical part that Julien is
working on as far as I understand, there is also the practical issue of
finding applications that are easy to review (without tons of
dependencies and so on) and that could work in Waydroid (Silence
requires a telephony stack to be useful, and Waydroid doesn't seem to
have one).

We started doing code review long time ago in Replicant[4] but I didn't
manage to complete a single review yet due to the lack of time.

References:
-----------
[1]https://github.com/hiking90/binder-linux
[2]https://github.com/hungys/binder-for-linux
[3]https://github.com/waydroid/waydroid/blob/main/tools/helpers/lxc.py
[4]https://redmine.replicant.us/projects/replicant/wiki/F-DroidAndApplications

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
                                     ` (2 preceding siblings ...)
  2022-11-04 12:26                   ` Denis 'GNUtoo' Carikli
@ 2022-11-12 15:54                   ` Denis 'GNUtoo' Carikli
  2022-12-13 17:48                   ` phodina via Guix-patches via
  4 siblings, 0 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-11-12 15:54 UTC (permalink / raw)
  To: Julien Lepiller
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Liliana Marie Prikler, phodina

[-- Attachment #1: Type: text/plain, Size: 1234 bytes --]

On Fri, 4 Nov 2022 04:03:08 +0100
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> wrote:
> (3) Porting the Waydroid modifications[2][3] on top of Replicant 11
> (and reviewing these modifications too).
> 
>     While Replicant 11 is not really usable yet on real devices yet
>     (telephony support for the GT-I9300 (Galaxy SIII) isn't complete
> for instance, sound support is very basic, etc), Replicant 11 status
>     shouldn't affect the ability to add Waydroid support.
I've tried a very quick approach to evaluate how complicated that would
be: 
- The device repositories and HAL related code can be imported pretty
  easily. Some minor changes are needed as there is no lineageOS
  distribution.
- The repositories that are replaced (like mesa, minigbm, etc) seem to
  be needed somehow. If I use the Replicant ones I've get some errors
  about missing headers. I'm unsure what is the best approach here
  between making a stripped down version of these repositories just for
  the header or figuring out another way to integrate the changes
  somehow.
- There is still the boringdroid apk that I didn't look into. While
  it's a separate APK, it looks complicated to build in the sources.

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-01  6:51             ` Liliana Marie Prikler
  2022-11-01  7:04               ` Julien Lepiller
@ 2022-12-13 16:49               ` phodina via Guix-patches via
  2022-12-15 16:44                 ` Denis 'GNUtoo' Carikli
  1 sibling, 1 reply; 31+ messages in thread
From: phodina via Guix-patches via @ 2022-12-13 16:49 UTC (permalink / raw)
  To: Liliana Marie Prikler
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Julien Lepiller, GNUtoo@cyberdimension.org






Sent with Proton Mail secure email.

------- Original Message -------
On Tuesday, November 1st, 2022 at 7:51 AM, Liliana Marie Prikler <liliana.prikler@gmail.com> wrote:


> Am Montag, dem 31.10.2022 um 19:30 +0000 schrieb phodina:
> 
> > Regarding the Waydroid (Android) image.
> > 
> > We are currently unable to build the whole image due to the issues
> > summarized by Julien Lepiller on the 10 Years of Guix. Thanks for the
> > presentation! [1]
> > 
> > However, there is project in Nix that allows to build the image. [2]
> > 
> > Would it be possible to use that instead of the one hardcoded in
> > Waydroid?
> 
> IIUC you would have to translate the nix packages there into guix
> packages, assuming there's a 1:1 translation (which might not be the
> case since everything's just a derivation in Nix). You also have to
> take into account different quality guidelines between Guix and Nix –
> Guix tends to be more stringent.
> 
> Since it's possible to specify the URLs via command line, how about
> simply removing the defaults and making the respective command line
> options required for the time being?

I agree with you to submit a patch which will remove the default image and require the user to pass the image as argument.

In order to build the image and not just blindly download and run some off the internet I suggest to use Robotnix project, which is a way how to build the whole Android image.

Once we have all the necessary components in Guix we can build the image ourselves.

----
Petr




^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-01  7:04               ` Julien Lepiller
  2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
@ 2022-12-13 17:10                 ` phodina via Guix-patches via
  2022-12-13 18:23                   ` Julien Lepiller
  1 sibling, 1 reply; 31+ messages in thread
From: phodina via Guix-patches via @ 2022-12-13 17:10 UTC (permalink / raw)
  To: Julien Lepiller
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Liliana Marie Prikler, GNUtoo@cyberdimension.org

[-- Attachment #1: Type: text/plain, Size: 2221 bytes --]

Hi Julien,

agreed, though rather than being non-free the issue is more of being opaque as we shouldn't trust what's inside.

There's documentation on how to build one based on Lineage OS. [1]

Do you think if LineageOS would build the Waydroid image as another device it would be acceptable for Guix to download the artifact directly? [2]

Also how's the bionic library going?

[1] https://docs.waydro.id/development/compile-waydroid-lineage-os-based-images[2] https://wiki.lineageos.org/devices/

----
Petr
------- Original Message -------
On Tuesday, November 1st, 2022 at 8:04 AM, Julien Lepiller <julien@lepiller.eu> wrote:

> That sounds good to me. We could have a default, though we must at least make sure we don't advertise for a non-free image.
>
> Concerning my own work, I'm currently trying to build some base system libraries. I managed to get a working cross-compiler for x86_64-linux-android, and I managed to cross-build a couple libraries. I'm hopeful I'll be able to build bionic (android's libc) by the end of the week, then a complete cross toolchain that will help build the rest of the system.
>
> Le 1 novembre 2022 07:51:17 GMT+01:00, Liliana Marie Prikler <liliana.prikler@gmail.com> a écrit :
>
>> Am Montag, dem 31.10.2022 um 19:30 +0000 schrieb phodina:
>>
>>> Regarding the Waydroid (Android) image.
>>>
>>> We are currently unable to build the whole image due to the issues
>>>
>>> summarized by Julien Lepiller on the 10 Years of Guix. Thanks for the
>>>
>>> presentation! [1]
>>>
>>> However, there is project in Nix that allows to build the image. [2]
>>>
>>> Would it be possible to use that instead of the one hardcoded in
>>>
>>> Waydroid?
>>
>> IIUC you would have to translate the nix packages there into guix
>>
>> packages, assuming there's a 1:1 translation (which might not be the
>>
>> case since everything's just a derivation in Nix).  You also have to
>>
>> take into account different quality guidelines between Guix and Nix –
>>
>> Guix tends to be more stringent.
>>
>> Since it's possible to specify the URLs via command line, how about
>>
>> simply removing the defaults and making the respective command line
>>
>> options required for the time being?
>>
>> Cheers

[-- Attachment #2: Type: text/html, Size: 3083 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
                                     ` (3 preceding siblings ...)
  2022-11-12 15:54                   ` Denis 'GNUtoo' Carikli
@ 2022-12-13 17:48                   ` phodina via Guix-patches via
  2022-12-15 17:02                     ` Denis 'GNUtoo' Carikli
  4 siblings, 1 reply; 31+ messages in thread
From: phodina via Guix-patches via @ 2022-12-13 17:48 UTC (permalink / raw)
  To: Denis 'GNUtoo' Carikli
  Cc: Ludovic Courtès, Maxime Devos, Julien Lepiller,
	51737@debbugs.gnu.org, Liliana Marie Prikler

Hi Denis,

> What I wonder is that if Waydroid gets added as-is, it might be useful
> to at least be able to test its functionalities with some FSDG
> compliant image.

Agreed, the question is what to add as the Waydroid runs the Android Userspace in a container
 - therefore the HW specific part can be removed, Guix (or foreign kernel) will be used.

I haven't done research into the FSDG compliant Android images. I'm familiar with Graphene OS
 on my phone, previously LineageOS and before Cyanogenmod.

I'm aware of Replicant but haven't had the chance to look into it unfortunately yet.


>
> For instance if users report that audio is broken, it would probably be
> a good idea to be able to run test ourselves. And if there is a bug in
> binder, we could also do security testing ourselves for instance.

Nice idea. There could be file e.g. 'guix/gnu/tests/waydroid.scm' with tests which would run
each time the image or the waydroid would be changed.

>
> If I compare with another similar Guix functionality: we can
> produce software for Microsoft Windows with "guix build -t
> x86_64-w64-mingw32 hello" but we at least have Wine for testing.

You can think of waydroid of a "Wine" also. You launch the container and then you can
develop using normal tools such as ADB to get shell etc.

Waydroid can show the whole UI screen or just the application.

The only issue is that the apps are more designed for touch than mouse since most laptops
and PCs don't have a touchscreen.

>
> As I see it, there might be several approaches to solve this testing
> issue.
>
> (1) Use GNU/Linux and Guix to make that FSDG compliant image.
>
> For instance we could have:
> +-----------------------------------------------+
> | Guix host |
> | |
> | Waydroid (the host/container tools) |
> | ^ |
> | | |
> | v |
> | The communication protocols (like Pulseaudio) |
> | ^ |
> | | |
> +---+-------------------------------------------+
> |
> +---+------------------------------------------------------+
> | | Guix guest |
> | v |
> | Android HAL like hardware/waydroid/audio |
> | ^ |
> | | |
> | v |
> | Libhybris or compatibility software that can run Android |
> | libraries on GNU/Linux. |
> | ^ |
> | | |
> | v |
> | GNU/Linux audio stack or software that can use the |
> | Android audio API somehow. |
> +----------------------------------------------------------+
>
> I'm unsure how much work that would be, and I've also not looked if
> some GNU/Linux distributions are already using libhybris with Android
> 10 HAL. I'm also unsure if we need to use glibc or bionic (guix can
> build Android components with glibc and libhybris probably expects
> bionic).
>
> The advantage of this approach that it might be possible to do
> automatic testing within Guix as Guix would be used everywhere.

This is perphaps the solution in the long run. It tould offer a lot of integration
into Guix and nice way to build, test and interact with the image.

> (2) Another approach would be to look more closely at lineage-17.1 and
> make a stripped down version that is hopefuly FSDG compliant. It
> should normally build fine on top of Trisquel.

This is probably the best approach atm. What's missing is the host - Trisquel, Robotnix
and the base image (AOSP, LineageOS, Replicant ...).


> The waydroid additions probably need to be reviewed too.

Agreed. As users want to pack other proprietary stuff inside e.g. GApps and others.


> (3) Porting the Waydroid modifications[2][3] on top of Replicant 11 (and
> reviewing these modifications too).

Well IMHO I'd rather focus in another direction - PostmarketOS[1].

It's GNU/Linux on Phones and works quite good. The downside are the Apps. As most
corporations and developers won't port their apps the Waydroid fills in quite nicely
with the ability to launch the Android app.

However, if you are interested somebody already asked about different base images [2]

> By the way, does someone knows where to find information about the
> architecture of Waydroid. For instance is there some document that
> explains how it works (like that it uses a HAL that use alsa that
> then somehow talks to the host pulseaudio?, what modifications it did
> for graphics, etc).

Haven't found any architecture wiki or document that would describe in greater detail
how it exactly works. Just issue on github which is already closed :-( [3]


[1] https://postmarketos.org/
[2] https://github.com/waydroid/waydroid/discussions/597
[3] https://github.com/waydroid/waydroid/issues/287

----
Petr




^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-12-13 17:10                 ` phodina via Guix-patches via
@ 2022-12-13 18:23                   ` Julien Lepiller
  2022-12-15 16:38                     ` Denis 'GNUtoo' Carikli
  0 siblings, 1 reply; 31+ messages in thread
From: Julien Lepiller @ 2022-12-13 18:23 UTC (permalink / raw)
  To: phodina
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	Liliana Marie Prikler, GNUtoo@cyberdimension.org

[-- Attachment #1: Type: text/plain, Size: 2817 bytes --]

I managed to build bionic in the time frame I envisionned, but I have some issues with recursive module imports when trying to define the base inputs for the gnu-build-system (and ultimately the blueprint-build-system).

One concern I have is that Lineage OS includes some non free components, though I'm not sure what exactly (at least non-free firmware in the kernel, probably drivers too).

Le 13 décembre 2022 18:10:38 GMT+01:00, phodina <phodina@protonmail.com> a écrit :
>Hi Julien,
>
>agreed, though rather than being non-free the issue is more of being opaque as we shouldn't trust what's inside.
>
>There's documentation on how to build one based on Lineage OS. [1]
>
>Do you think if LineageOS would build the Waydroid image as another device it would be acceptable for Guix to download the artifact directly? [2]
>
>Also how's the bionic library going?
>
>[1] https://docs.waydro.id/development/compile-waydroid-lineage-os-based-images[2] https://wiki.lineageos.org/devices/
>
>----
>Petr
>------- Original Message -------
>On Tuesday, November 1st, 2022 at 8:04 AM, Julien Lepiller <julien@lepiller.eu> wrote:
>
>> That sounds good to me. We could have a default, though we must at least make sure we don't advertise for a non-free image.
>>
>> Concerning my own work, I'm currently trying to build some base system libraries. I managed to get a working cross-compiler for x86_64-linux-android, and I managed to cross-build a couple libraries. I'm hopeful I'll be able to build bionic (android's libc) by the end of the week, then a complete cross toolchain that will help build the rest of the system.
>>
>> Le 1 novembre 2022 07:51:17 GMT+01:00, Liliana Marie Prikler <liliana.prikler@gmail.com> a écrit :
>>
>>> Am Montag, dem 31.10.2022 um 19:30 +0000 schrieb phodina:
>>>
>>>> Regarding the Waydroid (Android) image.
>>>>
>>>> We are currently unable to build the whole image due to the issues
>>>>
>>>> summarized by Julien Lepiller on the 10 Years of Guix. Thanks for the
>>>>
>>>> presentation! [1]
>>>>
>>>> However, there is project in Nix that allows to build the image. [2]
>>>>
>>>> Would it be possible to use that instead of the one hardcoded in
>>>>
>>>> Waydroid?
>>>
>>> IIUC you would have to translate the nix packages there into guix
>>>
>>> packages, assuming there's a 1:1 translation (which might not be the
>>>
>>> case since everything's just a derivation in Nix).  You also have to
>>>
>>> take into account different quality guidelines between Guix and Nix –
>>>
>>> Guix tends to be more stringent.
>>>
>>> Since it's possible to specify the URLs via command line, how about
>>>
>>> simply removing the defaults and making the respective command line
>>>
>>> options required for the time being?
>>>
>>> Cheers

[-- Attachment #2: Type: text/html, Size: 3794 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-12-13 18:23                   ` Julien Lepiller
@ 2022-12-15 16:38                     ` Denis 'GNUtoo' Carikli
  0 siblings, 0 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-12-15 16:38 UTC (permalink / raw)
  To: Julien Lepiller
  Cc: Maxime Devos, Ludovic Courtès, 51737@debbugs.gnu.org,
	phodina, Liliana Marie Prikler

[-- Attachment #1: Type: text/plain, Size: 4100 bytes --]

On Tue, 13 Dec 2022 19:23:06 +0100
Julien Lepiller <julien@lepiller.eu> wrote:

> I managed to build bionic in the time frame I envisionned, but I have
> some issues with recursive module imports when trying to define the
> base inputs for the gnu-build-system (and ultimately the
> blueprint-build-system).
> 
> One concern I have is that Lineage OS includes some non free
> components, though I'm not sure what exactly (at least non-free
> firmware in the kernel, probably drivers too).
Part of the work of making an FSDG compliant LineageOS derivative can
be really easy:
- The kernel can be removed as it's not needed here. I'm not sure where
  the kernel headers are but they are most likely separate.
- Most of the device repositories (in device/<vendor>/<product>) contain
  scripts whose only goal is to download (from the device) the required
  nonfree software.
- All hardware related HAL that depends on these nonfree software can
  be removed.

Here in practice it means forking the LineageOS manifest and removing
the offending repositories.

The hard part is with the rest of the code: With Android, knowing the
license of the repositories is not easy because you don't have package
definitions and you probably don't have very strict copyright
requirements (like in Debian). 

There are empty files like LICENSE_APACHE2 in some repositories, and 
that is used to indicate the license (it's the closest we have to a
license field in a package definition), but I've no idea how precise
they are. These are used by code that generate the list of licenses
displayed in the phone settings, but I didn't look yet how it works.

So if we want to do it right we'd probably need to review at least the
usual suspect ourselves (like libraries with fat code, AAC related
code, try to look if there are nonfree binaries left, etc).

If people want to use LineageOS as a base, they need to check the
DivestOS project as they have a script that can partially deblob more
recent versions of LineageOS (they also informed Replicant of some of
the blobs Replicant missed). They don't remove all the blobs though, so
it might be a good idea to check with them what blobs still need to be
removed.

Replicant 6.0 is based on LineageOS 13.0 which is based on Android
6.0.1, and over time we found and/or were notified of freedom and
privacy issues (that both conflicted with the FSDG). And none of these
issues were present in AOSP. At least some of these issues came from
CyanogenMod, so maybe they are not present anymore.

Another option is to use AOSP instead of LineageOS. This could make
FSDG compliance easier as there won't be any potential issues with
LineageOS additions.

It will also enable to share more work because several Android
distributions using AOSP and kernels based on upstream Linux started to
create a community[1] to share work. So for instance the vibrator HAL
of Waydroid could be replaced by the "Force Feedback haptic hal" that
is generic. Replicant has applied for funding through NLnet to improve
the sharing of work through that community. So for the long term
maintenance of such a project, using AOSP might be a better bet,
especially if distributions like Guix start packaging more and more
AOSP components (this way we'd share more and more work on reviewing
licensing information).

As for linux-libre-waydroid itself, if the only change is to enable
Android drivers, maybe the kernel could be renamed to something more
generic like linux-libre-android.

And if for instance we package for instance userspace tools to test the
binder driver, and with that we might already have a use case and be
able to test this kernel anyway. And I've not reviewed the patch but
the maintenance here could be completely automatized (so when somebody
updates linux-libre, linux-libre-android gets updated automatically).

PS: To all readers: I'm not a Guix maintainer, so I can't decide if
    patches get in or not.

References:
-----------
[1]https://aosp-developers-community.github.io

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-12-13 16:49               ` phodina via Guix-patches via
@ 2022-12-15 16:44                 ` Denis 'GNUtoo' Carikli
  0 siblings, 0 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-12-15 16:44 UTC (permalink / raw)
  To: phodina
  Cc: Maxime Devos, Ludovic Courtès, Julien Lepiller,
	51737@debbugs.gnu.org, Liliana Marie Prikler

[-- Attachment #1: Type: text/plain, Size: 1067 bytes --]

On Tue, 13 Dec 2022 16:49:00 +0000
phodina <phodina@protonmail.com> wrote:
> 
> I agree with you to submit a patch which will remove the default
> image and require the user to pass the image as argument.
> 
> In order to build the image and not just blindly download and run
> some off the internet I suggest to use Robotnix project, which is a
> way how to build the whole Android image.
I've looked at it some time ago and as far as I understand it depends on
NixOS which is not FSDG compliant, but at least it might give us better
information than the AOSP source code as there are package definitions
in Robotnix.

Does someone knows how accurate the licensing information is in
Robotnix? 

In any case there are already FSDG distributions like Parabola that
rely on upstream packages that are less strict with license compliance,
so maybe we could use that as a base to find potential issues way
faster than by going through the AOSP code, and maybe a quick look
would be good enough.

PS: Note that I'm not a guix maintainer.

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] [PATCH v3 1/8] gnu: Add linux-libre-waydroid.
  2022-12-13 17:48                   ` phodina via Guix-patches via
@ 2022-12-15 17:02                     ` Denis 'GNUtoo' Carikli
  0 siblings, 0 replies; 31+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-12-15 17:02 UTC (permalink / raw)
  To: phodina
  Cc: Ludovic Courtès, Maxime Devos, Julien Lepiller,
	51737@debbugs.gnu.org, Liliana Marie Prikler

[-- Attachment #1: Type: text/plain, Size: 3216 bytes --]

On Tue, 13 Dec 2022 17:48:28 +0000
phodina <phodina@protonmail.com> wrote:

> Hi Denis,
Hi,

> Waydroid can show the whole UI screen or just the application.
> 
> The only issue is that the apps are more designed for touch than
> mouse since most laptops and PCs don't have a touchscreen.
I think there are more limitations. For instance the "silence"
application will probably not work as it requires a modem stack that
would somehow be able to interact with GNU/Linux modem stack.

But applications like Replica Island will probably work.

> > (2) Another approach would be to look more closely at lineage-17.1
> > and make a stripped down version that is hopefuly FSDG compliant. It
> > should normally build fine on top of Trisquel.
> 
> This is probably the best approach atm. What's missing is the host -
> Trisquel, Robotnix and the base image (AOSP, LineageOS, Replicant
> ...).
> 
> 
> > The waydroid additions probably need to be reviewed too.
> 
> Agreed. As users want to pack other proprietary stuff inside e.g.
> GApps and others.
I was more thinking about (1) the code that they added, like their
HAL etc. That code is probably fine and fast to review.  And (2)
the apk they bundle in to get their windowing system working. That
might be harder to review but it has more probability to be
problematic.

> > (3) Porting the Waydroid modifications[2][3] on top of Replicant 11
> > (and reviewing these modifications too).
> 
> Well IMHO I'd rather focus in another direction - PostmarketOS[1].
I wasn't implying to use Replicant as the operating system controlling
the computer, but rather to reuse Replicant 11 to make a base image to
be used with Waydroid. The advantage here is to share the maintenance
of the FSDG compliance. The downside is that it requires porting the
Waydroid changes in ways that don't confilict with the current Replicant
source code.
 
> It's GNU/Linux on Phones and works quite good. The downside are the
> Apps. As most corporations and developers won't port their apps the
> Waydroid fills in quite nicely with the ability to launch the Android
> app.
The nice thing about PostmarketOS is that they also work to upstream
their work, so for instance Guix could also package what they use to
make the Pinephone work for instance. 

In Replicant we also collaborate with PostmarketOS to try to support the
devices supported by Replicant 6.0 with upstream kernels, so you can
even collaborate with them if you're using a completely different
userspace (and without having to run postmarketOS).

> However, if you are interested somebody already asked about different
> base images [2]
> 
> > By the way, does someone knows where to find information about the
> > architecture of Waydroid. For instance is there some document that
> > explains how it works (like that it uses a HAL that use alsa that
> > then somehow talks to the host pulseaudio?, what modifications it
> > did for graphics, etc).
> 
> Haven't found any architecture wiki or document that would describe
> in greater detail how it exactly works. Just issue on github which is
> already closed :-( [3]
Thanks, I'll look into it.

Denis.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [bug#51737] Add Waydroid
  2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
                   ` (5 preceding siblings ...)
  2022-10-18  9:32 ` [bug#51737] Add Waydroid dan
@ 2024-03-20 13:56 ` outlook user
  6 siblings, 0 replies; 31+ messages in thread
From: outlook user @ 2024-03-20 13:56 UTC (permalink / raw)
  To: 51737@debbugs.gnu.org

[-- Attachment #1: Type: text/plain, Size: 101 bytes --]

On which branch all that was pushed? Where is it available? How to apply all those patches at once?

[-- Attachment #2: Type: text/html, Size: 453 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2024-03-20 14:20 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-10  1:33 [bug#51737] Add Waydroid phodina via Guix-patches via
2021-11-10  1:37 ` [bug#51737] [PATCH 1/4] gnu: Add libglibutil phodina via Guix-patches via
2021-11-10  1:38 ` [bug#51737] [PATCH 2/4] gnu: Add libgbinder phodina via Guix-patches via
2021-11-10  1:38 ` [bug#51737] [PATCH 3/4] gnu: Add python-gbinder phodina via Guix-patches via
2021-11-10  1:39 ` [bug#51737] [PATCH 4/4] gnu: Add waydroid phodina via Guix-patches via
2021-11-15 20:03   ` Liliana Marie Prikler
2021-11-15 22:30     ` phodina via Guix-patches via
2021-12-03 15:00     ` phodina via Guix-patches via
2022-06-25 13:08 ` [bug#51737] [PATCH v2 1/7] gnu: Add linux-libre-waydroid phodina via Guix-patches via
2022-06-25 16:46   ` Maxime Devos
2022-06-27  7:07     ` phodina via Guix-patches via
2022-07-19 14:56       ` Maxime Devos
2022-07-19 14:57       ` Maxime Devos
2022-10-29 19:28         ` [bug#51737] [PATCH v3 1/8] " phodina via Guix-patches via
2022-10-31 19:30           ` phodina via Guix-patches via
2022-11-01  6:51             ` Liliana Marie Prikler
2022-11-01  7:04               ` Julien Lepiller
2022-11-04  3:03                 ` Denis 'GNUtoo' Carikli
2022-11-04 11:38                   ` Denis 'GNUtoo' Carikli
2022-11-04 11:51                   ` Denis 'GNUtoo' Carikli
2022-11-04 12:26                   ` Denis 'GNUtoo' Carikli
2022-11-12 15:54                   ` Denis 'GNUtoo' Carikli
2022-12-13 17:48                   ` phodina via Guix-patches via
2022-12-15 17:02                     ` Denis 'GNUtoo' Carikli
2022-12-13 17:10                 ` phodina via Guix-patches via
2022-12-13 18:23                   ` Julien Lepiller
2022-12-15 16:38                     ` Denis 'GNUtoo' Carikli
2022-12-13 16:49               ` phodina via Guix-patches via
2022-12-15 16:44                 ` Denis 'GNUtoo' Carikli
2022-10-18  9:32 ` [bug#51737] Add Waydroid dan
2024-03-20 13:56 ` outlook user

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).