aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (test-union)
  #:use-module (guix tests)
  #:use-module (guix store)
  #:use-module (guix utils)
  #:use-module (guix derivations)
  #:use-module (guix packages)
  #:use-module (guix build union)
  #:use-module ((guix build utils)
                #:select (with-directory-excursion directory-exists?))
  #:use-module (gnu packages bootstrap)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-64)
  #:use-module (rnrs io ports)
  #:use-module (ice-9 match))

;; Exercise the (guix build union) module.

(define %store
  (open-connection-for-tests))


(test-begin "union")

(test-assert "union-build with symlink to directory"
  ;; http://bugs.gnu.org/17083
  ;; Here both ONE and TWO provide an element called 'foo', but in ONE it's a
  ;; directory whereas in TWO it's a symlink to a directory.
  (let* ((one     (build-expression->derivation
                   %store "one"
                   '(begin
                      (use-modules (guix build utils) (srfi srfi-26))
                      (let ((foo (string-append %output "/foo")))
                        (mkdir-p foo)
                        (call-with-output-file (string-append foo "/one")
                          (cut display "one" <>))))
                   #:modules '((guix build utils))))
         (two     (build-expression->derivation
                   %store "two"
                   '(begin
                      (use-modules (guix build utils) (srfi srfi-26))
                      (let ((foo (string-append %output "/foo"))
                            (bar (string-append %output "/bar")))
                        (mkdir-p bar)
                        (call-with-output-file (string-append bar "/two")
                          (cut display "two" <>))
                        (symlink "bar" foo)))
                   #:modules '((guix build utils))))
         (builder '(begin
                     (use-modules (guix build union))

                     (union-build (assoc-ref %outputs "out")
                                  (list (assoc-ref %build-inputs "one")
                                        (assoc-ref %build-inputs "two")))))
         (drv
          (build-expression->derivation %store "union-collision-symlink"
                                        builder
                                        #:inputs `(("one" ,one) ("two" ,two))
                                        #:modules '((guix build union)))))
    (and (build-derivations %store (list drv))
         (with-directory-excursion (pk (derivation->output-path drv))
           (and (string=? "one"
                          (call-with-input-file "foo/one" get-string-all))
                (string=? "two"
                          (call-with-input-file "foo/two" get-string-all))
                (string=? "two"
                          (call-with-input-file "bar/two" get-string-all))
                (not (file-exists? "bar/one")))))))

(test-skip (if (and %store (network-reachable?))
               0
               1))

(test-assert "union-build"
  (let* ((inputs  (map (match-lambda
                        ((name package)
                         `(,name ,(package-derivation %store package))))

                       ;; Purposefully leave duplicate entries.
                       (filter (compose package? cadr)
                               (append %bootstrap-inputs-for-tests
                                       (take %bootstrap-inputs-for-tests 3)))))
         (builder `(begin
                     (use-modules (guix build union))
                     (union-build (assoc-ref %outputs "out")
                                  (map cdr %build-inputs))))
         (drv
          (build-expression->derivation %store "union-test"
                                        builder
                                        #:inputs inputs
                                        #:modules '((guix build union)))))
    (and (build-derivations %store (list (pk 'drv drv)))
         (with-directory-excursion (derivation->output-path drv)
           (and (file-exists? "bin/touch")
                (file-exists? "bin/gcc")
                (file-exists? "bin/ld")
                (file-exists? "lib/libc.so")
                (directory-exists? "lib/gcc")
                (file-exists? "include/unistd.h")

                ;; The 'include/c++' sub-directory is only found in
                ;; gcc-bootstrap, so it should be unified in a
                ;; straightforward way, without traversing it.
                (eq? 'symlink (stat:type (lstat "include/c++")))

                ;; Conversely, several inputs have a 'bin' sub-directory, so
                ;; unifying it requires traversing them all, and creating a
                ;; new 'bin' sub-directory in the profile.
                (eq? 'directory (stat:type (lstat "bin"))))))))

(test-assert "union-build collision first & last"
  (let* ((guile   (package-derivation %store %bootstrap-guile))
         (fake    (build-expression->derivation
                   %store "fake-guile"
                   '(begin
                      (use-modules (guix build utils))
                      (let ((out (assoc-ref %outputs "out")))
                        (mkdir-p (string-append out "/bin"))
                        (call-with-output-file (string-append out "/bin/guile")
                          (const #t))))
                   #:modules '((guix build utils))))
         (builder (lambda (policy)
                    `(begin
                       (use-modules (guix build union)
                                    (srfi srfi-1))
                       (union-build (assoc-ref %outputs "out")
                                    (map cdr %build-inputs)
                                    #:resolve-collision ,policy))))
         (drv1
          (build-expression->derivation %store "union-first"
                                        (builder 'first)
                                        #:inputs `(("guile" ,guile)
                                                   ("fake" ,fake))
                                        #:modules '((guix build union))))
         (drv2
          (build-expression->derivation %store "union-last"
                                        (builder 'last)
                                        #:inputs `(("guile" ,guile)
                                                   ("fake" ,fake))
                                        #:modules '((guix build union)))))
    (and (build-derivations %store (list drv1 drv2))
         (with-directory-excursion (derivation->output-path drv1)
           (string=? (readlink "bin/guile")
                     (string-append (derivation->output-path guile)
                                    "/bin/guile")))
         (with-directory-excursion (derivation->output-path drv2)
           (string=? (readlink "bin/guile")
                     (string-append (derivation->output-path fake)
                                    "/bin/guile"))))))

(test-assert "union-build #:create-all-directories? #t"
  (let* ((build  `(begin
                    (use-modules (guix build union))
                    (union-build (assoc-ref %outputs "out")
                                 (map cdr %build-inputs)
                                 #:create-all-directories? #t)))
         (input  (package-derivation %store %bootstrap-guile))
         (drv    (build-expression->derivation %store "union-test-all-dirs"
                                               build
                                               #:modules '((guix build union))
                                               #:inputs `(("g" ,input)))))
    (and (build-derivations %store (list drv))
         (with-directory-excursion (derivation->output-path drv)
           ;; Even though there's only one input to the union,
           ;; #:create-all-directories? #t must have created bin/ rather than
           ;; making it a symlink to Guile's bin/.
           (and (file-exists? "bin/guile")
                (file-is-directory? "bin")
                (eq? 'symlink (stat:type (lstat "bin/guile"))))))))

(letrec-syntax ((test-relative-file-name
                 (syntax-rules (=>)
                   ((_ (reference file => expected) rest ...)
                    (begin
                      (test-equal (string-append "relative-file-name "
                                                 reference " " file)
                        expected
                        (relative-file-name reference file))
                      (test-relative-file-name rest ...)))
                   ((_)
                    #t))))
  (test-relative-file-name
   ("/a/b" "/a/c/d"     => "../c/d")
   ("/a/b" "/a/b"       => "")
   ("/a/b" "/a"         => "..")
   ("/a/b" "/a/b/c/d"   => "c/d")
   ("/a/b/c" "/a/d/e/f" => "../../d/e/f")))

(test-end)
1d e7 72 4e 9f fa fa 7a 81 3b 9a 44 e1 69 68 68 v.Bt=...;;........rN...z.;.D.ihh 0600 98 38 71 22 21 24 3c 3c 7c d7 ae 5d 8d 8d 8d b1 b1 b1 9b 37 6f 1e bc 3b e6 e7 e7 e7 e5 e5 dd bb .8q"!$<<|..].......7o..;........ 0620 77 2f 26 26 26 38 38 58 b8 49 a7 d3 21 c3 1b 00 cc d5 d5 af 9b 23 8f b8 6f fb e1 f9 d9 91 e3 73 w/&&&88X.I..!........#..o......s 0640 d7 57 13 42 8e 27 de 58 f2 c7 89 db af bc b0 f8 fd 89 c7 df ba 41 08 f9 32 b9 ce 71 aa ec dd ef .W.B.'.X.............A..2..q.... 0660 a7 3b 4c 91 7d 99 52 47 08 f9 5b 56 fd df 73 ee 86 7e ec 96 52 ed b3 eb 17 1f 4e 1f e1 09 7c d0 .;L.}.RG..[V..s..~..R.....N...|. 0680 0b 0f 45 51 1f 7e f8 e1 e8 d1 a3 1d 1d 1d f3 f2 f2 08 21 3b 76 ec 18 37 6e 1c b3 86 a0 28 aa a7 ..EQ.~............!;v..7n....(.. 06a0 a7 87 7e dd dd dd 4d 9e 6c 9a 7d f5 d5 57 9c 4b 95 97 97 7b 79 79 29 14 8a a4 a4 24 f6 fa 83 79 ..~...M.l.}..W.K...{yy)....$...y 06c0 9d 94 94 a4 50 28 bc bd bd 2f 5d ba 44 08 a9 ac ac f4 f3 f3 b3 b4 b4 e4 2f 56 8e 1f 3f ee e5 e5 ....P(.../].D.........../V..?... 06e0 65 65 65 e5 ef ef 2f 93 c9 8c 6c 02 00 30 3f 2b fe cb d5 4e 35 92 92 50 23 46 52 d6 63 47 10 42 eee.../...l..0?+...N5..P#FR.cG.B 0700 6c c6 5b 10 42 e8 89 d3 d6 61 24 21 e4 e7 73 cd b3 a3 c6 5b 8d 92 ce 89 1e 7f ed 5c 0b 21 e4 ef l.[.B....a$!..s....[.......\.!.. 0720 47 ee 2e de 32 61 c2 74 6b ea 49 19 61 f7 29 29 29 11 b8 a3 18 2b 1e 3b 3b bb db b7 6f 67 65 65 G...2a.tk.I.a.)))....+.;;...ogee 0740 25 24 24 10 42 76 ee dc 99 9c 9c ac d5 6a e9 65 04 fb 7f 8d 46 13 17 17 67 67 67 f7 cd 37 df 34 %$$.Bv.......j.e....F...ggg..7.4 0760 36 36 72 ae b3 66 cd 9a f5 eb d7 37 34 34 38 3b 3b eb bd 91 b3 b3 73 43 43 43 74 74 74 4c 4c 0c 66r..f.....7448;;.....sCCCtttLL. 0780 21 24 22 22 62 c5 8a 15 2d 2d 2d 86 d6 2b 77 ee dc 09 0a 0a 4a 4f 4f ef 53 13 00 80 99 79 c7 b9 !$""b...---..+w.....JOO.S....y.. 07a0 7c cb a4 8b 9f 6f aa 59 9e ec 42 08 59 9e e2 92 bb be 7a f3 b3 17 8f be 59 fd 87 3f 3d 43 08 69 |....o.Y..B.Y.....z.....Y..?=C.i 07c0 bb d7 a5 50 5a 10 42 14 4a 8b 87 4d 9d 84 90 fb b5 8f ae fd ad f5 bd a9 97 76 bd 54 59 f5 df cd ...PZ.B.J..M.............v.TY... 07e0 9c 3e 77 ef de 15 b8 9d 18 85 67 ed da b5 32 99 2c 30 30 f0 d6 ad 5b 84 90 cc cc cc 03 07 0e 38 .>w.......g...2.,00...[........8 0800 39 39 6d db b6 8d d3 73 f1 e2 c5 d7 ae 5d 6b 6b 6b 9b 3d 7b b6 ab ab 2b f9 f5 e7 2b 57 ae 5c 09 99m....s.....]kkk.={...+...+W.\. 0820 0b 0b 93 cb e5 ab 56 ad d2 7b a3 f0 f0 70 b9 5c be 7a f5 ea cb 97 2f 13 42 2a 2b 2b a3 a2 a2 2c ......V..{...p.\.z..../.B*++..., 0840 2d 2d e9 56 ce 47 35 65 65 65 7e 7e 7e f1 f1 f1 4b 97 2e e5 5c 47 a0 09 00 c0 fc ec fa c5 67 c7 --.V.G5eee~~~...K...\G........g. 0860 cf 2f bc f6 e1 33 47 e3 aa 09 21 c7 e2 6e 84 7c ec f6 a7 eb bf 09 ce 70 cb 8b bf 41 08 b1 1e 33 ./...3G...!..n.|.......p...A...3 0880 82 fe 68 e7 61 63 a7 62 ac 05 21 44 6e 37 62 ea 3c db 6d 3f cc 78 75 eb c4 fc b7 6b 38 7d c6 8d ..h.ac.b..!Dn7b.<.m?.xu....k8}.. 08a0 13 fa 1b f0 62 14 1e 89 e4 57 77 09 09 09 b9 70 e1 c2 99 33 67 52 53 53 f9 9d 7b 7a 7a 2e 5e bc ....b....Ww....p...3gRSS..{zz.^. 08c0 f8 ce 3b ef c4 c6 c6 92 27 9f af d0 4b 96 69 d3 a6 65 67 67 b7 b7 b7 1f 3a 74 48 ef 8d 98 56 4f ..;.....'...K.i..egg....:tH...VO 08e0 4f 4f 42 88 b7 b7 b7 46 a3 79 f4 e8 11 dd ca be 94 46 a3 59 ba 74 a9 5a ad 0e 0d 0d e5 5c 44 a0 OOB....F.y.......F.Y.t.Z.....\D. 0900 09 00 c0 fc 14 6e ab 6d 6b ea 22 84 50 12 d2 fd 58 47 08 e9 68 e9 22 4f b6 da da 5b ba 09 21 93 .....n.mk.".P...XG..h."O...[..!. 0920 67 db 9c d7 d4 77 b4 76 9f d7 d4 4f 9e 6d 43 08 99 32 d7 96 e9 43 49 28 4e 9f 05 0b 16 08 dc 71 g....w.v...O.mC..2...CI(N......q 0940 10 ff f4 35 45 51 3a 9d 8e fe 9f 73 84 10 a2 54 2a e3 e3 e3 b7 6c d9 c2 1c a7 5f 48 24 12 57 57 ...5EQ:....s...T*....l...._H$.WW 0960 d7 d8 d8 d8 f8 f8 78 4e c5 2a 2f 2f 0f 0b 0b ab a9 a9 89 8c 8c 3c 78 f0 60 6b 6b 2b fb 16 14 45 ......xN.*//.........<x.`kk+...E 0980 6d da b4 29 23 23 c3 cd cd 2d 3b 3b fb 85 17 5e f8 f1 c7 1f 23 23 23 2f 5d ba d4 d5 d5 c5 79 9b m..)##...-;;...^....###/].....y. 09a0 9c 4f 7d 5a 5b 5b 47 8d 1a c5 8c 81 df c4 3e 22 f0 1b c3 17 48 01 e0 a9 f3 8f bc c6 e2 b4 ba 8e .O}Z[[G.......>"....H........... 09c0 87 dd 8e 53 e5 4b de 9b f0 cc 6f 14 97 4b 1e 7c f9 a7 9b f7 6f 3e b2 9b 60 b9 f8 bd 09 d3 e6 8f ...S.K....o..K.|....o>..`....... 09e0 6e bd db 79 74 c3 8d 5f fe f9 d0 f9 79 45 f0 5e d7 51 e3 2c 1e 36 75 1d 4f b8 51 fd 7d eb 68 a7 n..yt.._....yE.^.Q.,.6u.O.Q.}.h. 0a00 91 cb b6 3b 4f fe bd 0d bb cf f9 cf ab 1c 1c 1c 0c dd 71 10 0b cf 20 79 fc f8 71 46 46 46 41 41 ...;O.............q....y..qFFFAA 0a20 c1 f9 f3 e7 87 7a 2c 00 00 d0 67 4f 59 64 0e 45 51 52 a9 d4 d3 d3 d3 d0 6e 1b 00 00 98 b8 a7 6f .....z,...gOYd.EQR......n......o 0a40 c5 63 ca 12 0f fd 73 a8 87 00 a6 cb da 72 c4 f6 60 af a1 1e 05 c0 d0 33 89 2f 90 02 00 c0 f0 31 .c....s......r..`......3./.....1 0a60 58 85 e7 69 0f 98 41 0a 1c 00 c0 20 e9 4f e1 e9 5f a2 1a c5 a2 54 2a fb 71 5f 61 db b6 6d e3 57 X..i..A......O.._....T*.q_a..m.W 0a80 88 a2 a2 22 0f 0f 0f 2b 2b 2b 0f 0f 8f a2 a2 22 23 cf 62 60 1f 12 00 cc 1e 3f 8e b2 a7 a7 27 2d ..."...+++....."#.b`.....?....'- 0aa0 2d 6d f2 e4 c9 52 a9 94 3e 5e 5f 5f 1f 10 10 60 63 63 13 10 10 40 e7 b0 f1 fb b0 27 79 e1 3b f6 -m...R..>^__...`cc...@.....'y.;. 0ac0 a7 f0 f4 2f 51 8d f9 1a cd 77 df 7d b7 66 cd 9a 7e dc 57 40 79 79 b9 5a ad e6 1f 0f 0f 0f 4f 4f .../Q....w.}.f..~.W@yy.Z......OO 0ae0 4f 6f 6e 6e 4e 4b 4b 8b 88 88 30 f2 2c 00 80 e1 83 1f 47 b9 77 ef de fd fb f7 1f 3d 7a b4 b3 b3 OonnNKK...0.,.....G.w......=z... 0b00 93 6e 4a 4a 4a f2 f6 f6 ae ad ad f5 f2 f2 a2 a7 7d 7e 1f f2 eb af 4b 0a 30 b6 f0 50 14 b5 61 c3 .nJJJ...........}~....K.0..P..a. 0b20 86 91 23 47 12 7d 89 6a fc 40 36 c2 4b 4e 63 ec d8 b1 63 dd ba 75 9c eb f3 73 d8 38 49 6b 02 c1 ..#G.}.j.@6.KNc...c..u...s.8Ik.. 0b40 6b 1d 1d 1d 11 11 11 39 39 39 fc 61 3b 39 39 31 43 55 a9 54 46 9e c5 7e d7 c2 ef 05 00 c0 fc 64 k......999.a;991CU.TF..~.......d 0b60 66 66 ee da b5 cb c7 c7 87 f9 32 65 49 49 49 42 42 82 ad ad 6d 62 62 22 9d c3 c6 ef 43 08 b1 b3 ff........2eIIIBB...mbb"....C... 0b80 b3 1b 3b 76 ec f2 e5 cb 6f de bc 29 70 fd 3e ac 78 7c 7c 7c da db db 89 81 44 35 4e 20 1b e1 25 ..;v....o..)p.>.x|||.....D5N...% 0ba0 a7 d1 be fd f6 db 31 63 c6 38 3a 3a 72 2e ce cf 61 e3 24 ad 09 04 af 25 25 25 85 87 87 fb fb fb ......1c.8::r...a.$....%%%...... 0bc0 f3 c7 ac 56 ab 83 83 83 2d 2d 2d 43 43 43 33 33 33 8d 3c 8b 4f ef 7b 01 00 30 4b 35 35 35 a5 a5 ...V....---CCC333.<.O.{..0K555.. 0be0 a5 0a 85 c2 dd dd fd f4 e9 d3 84 90 c6 c6 46 7b 7b 7b 42 88 bd bd 3d 9d c3 c6 ef a3 d3 e9 ee df ..............F{{{B...=......... 0c00 bf 7f f5 ea 55 17 17 97 b0 b0 30 81 eb 1b fb 38 35 45 51 9d 9d 9d 23 46 fc ea 7b 3f 05 05 05 5b ....U.....0....85EQ...#F..{?...[ 0c20 b6 6c b9 72 e5 0a 45 51 dd dd dd 74 dd 63 72 04 b4 5a ad 4c 26 d3 6a b5 4a a5 52 ab d5 d2 a7 cc .l.r..EQ...t.cr..Z.L&.j.J.R..... 0c40 9f 3f 3f 35 35 75 c6 8c 19 84 b5 9e d0 e9 74 72 b9 bc a9 a9 89 ee 6f 6d 6d 4d 1f 69 6c 6c 94 cb .??55u........tr......ommM.ill.. 0c60 e5 74 1f ce 8f ec 73 25 12 09 fb 5d b0 5f bb bb bb ef d9 b3 67 de bc 79 a5 a5 a5 09 09 09 55 55 .t....s%...]._......g..y......UU 0c80 55 4c 13 ff 2c f6 35 39 99 08 7a df 0b 1f 1e a7 06 01 78 9c 1a 4c 19 3b 65 46 a5 52 a9 d5 ea f9 UL..,.59..z.......x..L.;eF.R.... 0ca0 f3 e7 97 96 96 46 47 47 d7 d5 d5 a9 54 aa b2 b2 32 95 4a 55 57 57 e7 eb eb 7b f3 e6 4d 7e 1f e6 .....FGG....T...2.JUWW...{..M~.. 0cc0 52 2d 2d 2d 2a 95 aa b5 b5 d5 d0 bd fa b0 e2 61 57 1d 4e a2 1a e1 05 b2 11 5e 72 1a 21 e4 dc b9 R---*..........aW.N......^r.!... 0ce0 73 5d 5d 5d 74 d5 21 bd e5 b0 71 92 d6 04 82 d7 7a 7a 7a 98 d7 9c 3a da dc dc 4c 9e 54 29 fa 35 s]]]t.!...q.....zzz...:...L.T).5 0d00 fb 2d 70 ce 12 d8 9d e4 bf 17 00 00 73 15 18 18 48 9e cc 9c f4 dc be 60 c1 02 fa f3 f2 f4 f4 74 .-p.........s...H......`.......t 0d20 3a 87 8d df 87 f6 e0 c1 83 94 94 14 66 9e d7 ab 3f 0f 17 50 14 65 61 61 11 14 14 14 13 13 c3 ff :...........f...?..P.eaa........ 0d40 b4 86 51 53 53 a3 54 2a f7 ed db b7 7f ff 7e fa c8 d6 ad 5b e3 e2 e2 f4 76 ce cc cc cc c8 c8 50 ..QSS.T*......~....[....v......P 0d60 2a 95 55 55 55 0a 85 82 10 f2 d9 67 9f e5 e6 e6 2a 14 0a fa 8d 71 7e ec 75 84 f4 0b b5 5a 1d 17 *.UUU......g....*....q~.u....Z.. 0d80 17 67 63 63 93 90 90 a0 d1 68 48 7f 9f 8d e6 bf 17 00 00 f3 c0 fe eb 68 f4 8b e4 e4 e4 4f 3e f9 .gcc.....hH............h.....O>. 0da0 64 cc 98 31 6f bf fd 76 56 56 16 21 24 25 25 a5 a2 a2 62 c2 84 09 15 15 15 c9 c9 c9 7a fb d0 a7 d..1o..vVV.!$%%...b.........z... 0dc0 bb b8 b8 54 54 54 64 67 67 0b dd d1 a4 9e 18 46 0e 1b 00 80 d9 33 a1 ac 36 e4 b0 01 00 0c 07 a6 ...TTTdgg......F.....3..6....... 0de0 b5 e2 79 da 9d d8 f6 7f 8f 92 8f 76 b4 9b 17 13 30 b4 83 01 00 30 4d c8 6a 03 00 00 51 f5 f3 e1 ..y........v....0....0M.j...Q... 0e00 82 01 e9 03 00 00 c3 d0 c0 ac 78 fa 97 c3 d6 d7 b3 d8 c5 cc 98 c2 96 9f 9f ef e9 e9 29 97 cb 67 ..........x.................)..g 0e20 ce 9c 79 ee dc 39 7e 07 81 a0 36 76 13 3f 92 08 00 60 58 c9 cb cb 9b 3a 75 2a 3d 9d 9e 3d 7b 56 ..y..9~...6v.?...`X....:u*=..={V 0e40 ef 11 e3 a7 ca 81 29 3c fd cb 61 1b d4 f4 36 42 48 7e 7e 7e 5e 5e de bd 7b f7 62 62 62 82 83 83 ......)<..a...6BH~~~^^..{.bbb... 0e60 39 ad 02 41 6d 9c 26 bd 91 44 00 00 c3 c7 a9 53 a7 8a 8b 8b 9b 9a 9a e2 e3 e3 e9 e9 94 7f a4 0f 9..Am.&..D.....S................ 0e80 53 a5 ae ef 08 21 9b 36 6d b2 b6 b6 f6 f2 f2 ba 78 f1 22 bb 69 f1 e2 c5 b7 6e dd a2 fb 6c df be S....!.6m.......x.".i....n...l.. 0ea0 dd d6 d6 d6 c1 c1 e1 d8 b1 63 3a 9d ee e2 c5 8b 5e 5e 5e d6 d6 d6 9b 36 6d e2 dc 97 39 8b 7f 23 .........c:.....^^^....6m...9..# 0ec0 8a a2 5c 5d 5d 8b 8b 8b 05 c6 4f 08 79 f3 cd 37 2d 2c 2c 0c 0d f8 fa f5 eb cf 3e fb 2c fb 48 7b ..\]].....O.y..7-,,.......>.,.H{ 0ee0 7b bb b7 b7 f7 37 df 7c c3 ff 0d f0 9b a6 4c 99 72 e2 c4 09 63 7e 33 7f d9 7a 8c fe f7 75 66 b1 {....7.|......L.r...c~3..z...uf. 0f00 31 fd 01 00 9e 22 1d 1d 1d 9f 7f fe f9 f4 e9 d3 f5 1e 31 7e aa ec e7 8a c7 98 1c 36 4e 7a 5b 4c 1...."............1~.......6Nz[L 0f20 4c 4c 6c 6c 6c 43 43 03 27 ac d3 50 7a 1b 3d ef 77 75 75 65 65 65 6d dc b8 51 c7 0b 17 60 5e 10 LLlllCC.'..Pz.=.wuueeem..Q...`^. 0f40 56 8e 1c df 9d 3b 77 82 82 82 d2 d3 d3 d9 07 05 82 da f8 4d fc 48 22 00 80 e1 86 a2 28 2b 2b ab V....;w............M.H".....(++. 0f60 a8 a8 28 e6 7b f4 9c 23 7d 98 2a fb 51 f4 08 21 5a ad 56 a7 d3 b5 b5 b5 c9 64 32 e6 f8 cb 2f bf ..(.{..#}.*.Q..!Z.V......d2.../. 0f80 7c e9 d2 25 a6 4f 77 77 37 bb 48 d0 59 67 f4 59 ec fb 72 ce 62 46 f5 e9 a7 9f ba ba ba d2 39 3d |..%.Oww7.H.Yg.Y..r.bF........9= 0fa0 52 a9 d4 50 e1 a1 5f d3 2b 3b ce 15 74 3a dd f7 df 7f ef e2 e2 72 e4 c8 11 ce 5b e0 ec 3f 0a 37 R..P.._.+;..t:.......r....[..?.7 0fc0 39 39 39 15 15 15 75 74 74 14 15 15 39 39 39 09 fc 66 b0 e2 01 00 33 a6 d5 6a 73 72 72 26 4d 9a 999...utt...999..f....3..jsrr&M. 0fe0 a4 f7 88 f1 53 65 3f 57 3c bd e6 b0 11 5e 7a 9b a7 a7 27 27 8d 8d 7f 16 33 2c 42 48 52 52 d2 c7 ....Se?W<....^z...''....3,BHRR.. 1000 1f 7f fc e0 c1 83 c2 c2 42 fa 0f 31 c8 64 b2 db b7 6f d3 3d d9 af 09 2b 47 8e 7d 05 8d 46 b3 74 ........B..1.d...o.=...+G.}..F.t 1020 e9 52 b5 5a 1d 1a 1a ca 19 bf 40 bc 1b bf c9 50 24 11 00 c0 30 11 17 17 47 87 52 4b 24 12 3a 33 .R.Z......@....P$...0...G.RK$.:3 1040 93 7f a4 0f 53 65 3f 8a 1e 21 64 d3 a6 4d 72 b9 9c fd 19 cf dc b9 73 4f 9e 3c c9 ee c3 79 4d 7f ....Se?..!d..Mr.......sO.<...yM. 1060 c6 23 97 cb d9 9f f1 70 ce 62 a3 3f 22 72 74 74 fc e0 83 0f e8 fe 89 89 89 74 8c 1b e7 b5 a1 77 .#.....p.b.?"rtt.........t.....w 1080 c1 79 a7 74 54 2a bf 0f 7f c0 9c 23 f5 f5 f5 0b 17 2e b4 b6 b6 f6 f0 f0 38 73 e6 8c c0 6f 06 2b .y.tT*.....#............8s...o.+ 10a0 1e 00 30 4b 07 0e 1c 70 72 72 52 28 14 bf fb dd ef be fb ee 3b bd 47 8c 9f 2a 87 26 b9 80 9d bf ..0K...prrR(........;.G..*.&.... 10c0 0d 00 00 c3 0a 36 8e 00 00 40 54 58 79 0c a4 07 d3 a6 b1 7f 94 ba bb 8f 2a 28 18 aa c1 00 00 98 .....6...@TXy...........*(...... 10e0 26 ac 78 00 00 40 54 83 5b 78 44 0b 98 41 92 0d 00 c0 d3 62 70 0b 8f ee 49 fa 00 83 3e ce 4f 69 &.x..@T.[xD..A.....bp...I...>.Oi 1100 e3 74 f8 f7 09 04 b5 09 34 f1 87 da 6b e0 1b 00 80 d9 13 98 c6 39 3d 05 32 30 19 22 6d b5 31 4f .t......4...k........9=.20."m.1O 1120 d1 71 7e 64 52 da d8 ad 03 42 20 a8 4d 38 c3 8d 33 54 e1 ce 00 00 c3 84 de 69 9c d3 47 20 03 93 .q~dR....B..M8..3T.......i..G... 1140 6d e0 0b 0f 45 51 1b 36 6c 18 39 72 24 61 ed 80 d9 d9 d9 8d 1d 3b 76 f9 f2 e5 37 6f de 64 77 de m...EQ.6l.9r$a.......;v...7o.dw. 1160 b1 63 c7 ba 75 eb 8c bc ac 44 22 71 73 73 2b 29 29 21 84 54 56 56 fa f9 f9 59 5a 5a 1a 2a ad c7 .c..u....D"qss+))!.TVV...YZZ.*.. 1180 8f 1f f7 f2 f2 b2 b2 b2 f2 f7 f7 97 c9 64 46 36 f1 87 2a dc 19 00 60 98 30 34 8d 33 3a 3a 3a 22 .............dF6..*...`.04.3:::" 11a0 22 22 72 72 72 7a bd d4 a0 ac 78 38 c9 69 3a 9d ee fe fd fb 57 af 5e 75 71 71 09 0b 0b 63 8e 0b ""rrrz....x8.i:.....W.^uqq...c.. 11c0 a4 b4 f1 e9 58 b9 6d 84 90 88 88 88 15 2b 56 b4 b4 b4 08 af 93 f4 06 b5 09 34 19 1a aa c0 75 00 ....X.m......+V..........4....u. 11e0 00 cc 9e a1 b9 91 4d 20 03 53 cf e5 06 16 f9 75 72 1a bb a9 b9 b9 59 a1 50 30 3f b2 53 da f8 fd ......M..S.....ur.....Y.P0?.S... 1200 d9 23 e4 e7 b6 c9 64 b2 b6 b6 36 ce 89 9c 37 65 28 a8 4d b8 89 3f d4 5e 3b 33 ee 7b 78 b0 ff b5 .#....d...6...7e(.M..?.^;3.{x... 1220 2c 5b d6 eb 29 00 00 4f 11 ce 34 ce 9e b4 05 32 30 39 06 65 c5 c3 24 a7 b1 3d 78 f0 20 25 25 85 ,[..)..O..4....209.e..$..=x..%%. 1240 89 65 e3 67 bb 71 b0 df 18 3f b7 cd db db 5b a3 d1 d0 01 41 7a 4f 11 08 6a 13 68 e2 0f b5 d7 ce .e.g.q...?....[....AzO..j.h..... 1260 00 00 c3 04 67 1a e7 10 c8 c0 e4 1a a8 32 c8 9e f4 39 af e9 1b d9 da da 2e 5a b4 a8 ba ba 9a 6e ....g........2...9.......Z.....n 1280 e2 67 bb 09 8c 8a 9f db f6 c3 0f 3f cc 9a 35 8b ae 70 3a 03 49 6b 6c ec a0 b6 5e 9b d8 43 e5 77 .g.........?..5..p:.Ikl...^..C.w 12a0 16 78 ef 58 f1 00 80 59 ea 75 6e e4 74 16 be 1a 92 0b 00 00 40 54 48 2e 00 00 00 51 e9 f9 30 06 .x.X...Y.un.t.......@TH....Q..0. 12c0 fa ad a1 64 e3 80 5f 53 2a 1b 33 76 f6 d6 01 bf 2c 00 c0 50 c1 8a 07 00 00 44 65 26 59 6d 00 00 ...d.._S*.3v....,..P.....De&Ym.. 12e0 f0 b4 f8 b7 0a 0f 3f bd c7 a4 f4 f4 f4 a4 a5 a5 4d 9e 3c 59 2a 95 72 46 58 5f 5f 1f 10 10 60 63 ......?.........M.<Y*.rFX__...`c 1300 63 13 10 10 50 5f 5f 6f 64 13 00 c0 70 c0 cf a8 14 8e dc a4 8f 18 3f 79 fe bb 2b 1e ce c3 76 26 c...P__od...p.........?y..+...v& 1320 65 ef de bd fb f7 ef 3f 7a f4 28 fd 85 56 76 53 52 52 92 b7 b7 77 6d 6d ad 97 97 d7 e6 cd 9b 8d e......?z.(..VvSRR...wmm........ 1340 6c 02 00 18 0e f4 66 54 f2 67 7b ce 11 e3 27 cf 3e 14 1e 8a a2 92 92 92 14 0a 85 b7 b7 f7 a5 4b l.....fT.g{...'.>..............K 1360 97 e8 83 9c f4 9e 1d 3b 76 8c 1b 37 8e 5d 03 f9 a7 70 52 d7 d8 ca cb cb bd bc bc 14 0a 45 52 52 .......;v..7.]...pR..........ERR 1380 12 7d 05 8a a2 3e fa e8 23 3b 3b bb f1 e3 c7 e7 e5 e5 6d dd ba 75 cc 98 31 0e 0e 0e f9 f9 f9 86 .}...>..#;;.......m..u..1....... 13a0 86 c4 c8 cc cc dc b5 6b 97 8f 8f 8f 44 c2 7d 9b 25 25 25 09 09 09 b6 b6 b6 89 89 89 9c 61 e8 6d .......k....D.}.%%%..........a.m 13c0 12 18 33 00 80 99 d1 9b 51 c9 cf 6a e3 1c 11 98 57 39 fa b6 e2 71 76 76 6e 68 68 88 8e 8e 8e 89 ..3.....Q..j....W9...qvvnhh..... 13e0 89 21 fa d2 7b 76 ee dc 99 9c 9c ac d5 6a 99 1a c8 39 85 f0 52 d7 d8 d6 ac 59 b3 7e fd fa 86 86 .!..{v.......j...9..R....Y.~.... 1400 06 67 67 67 e6 e0 e8 d1 a3 6f dd ba 75 f8 f0 e1 95 2b 57 2a 95 ca ba ba ba ec ec ec f8 f8 78 43 .ggg.....o..u....+W*..........xC 1420 d7 67 d4 d4 d4 94 96 96 2a 14 0a 77 77 f7 d3 a7 4f b3 9b 1a 1b 1b ed ed ed 09 21 f6 f6 f6 77 ef .g......*..ww...O.........!...w. 1440 de ed b5 49 60 cc 00 00 66 89 9d 51 c9 9f ed f9 47 04 e6 55 8e 3e 7c 81 94 a2 28 ad 56 2b 93 c9 ...I`...f..Q....G..U.>|...(.V+.. 1460 b4 5a ad 52 a9 d4 6a b5 4c 53 4b 4b 8b 4a a5 6a 6d 6d cd cd cd cd c8 c8 f8 e9 a7 9f 36 6e dc 48 .Z.R..j.LSKK.J.jmm..........6n.H 1480 ff 55 06 ce 29 fb f6 ed 4b 4d 4d ad ad ad ed ea ea 92 4a a5 5d 5d 5d cc da 48 a7 d3 c9 e5 f2 a6 .U..)...KMM.......J.]]]..H...... 14a0 a6 26 ba bf b5 b5 b5 4e a7 a3 28 aa bb bb 9b 5e b2 70 5e d3 ad 9c eb b3 af a6 52 a9 d4 6a f5 fc .&.....N..(....^.p^.......R..j.. 14c0 f9 f3 4b 4b 4b a3 a3 a3 eb ea ea 98 01 ab 54 aa b2 b2 32 95 4a 55 57 57 e7 eb eb cb 0e 5b e5 37 ..KKK.........T...2.JUWW.....[.7 14e0 f1 c7 6c e8 57 84 c7 a9 01 c0 3c 94 95 95 05 05 05 7d f4 d1 47 9c b4 30 66 b6 e7 1f 11 98 57 39 ..l.W.....<......}..G..0f.....W9 1500 fa b6 e2 c9 ce ce 6e 6f 6f 3f 74 e8 90 a7 a7 27 73 90 9d de 13 12 12 72 e1 c2 85 33 67 ce a4 a6 ......noo?t....'s......r...3g... 1520 a6 ea 3d 85 9f ba c6 de 25 9c 36 6d 1a d3 ff ff 87 c8 da 28 e3 6f 9a 71 ae cf be 5a 60 60 20 79 ..=.....%.6m.......(.o.q...Z``.y 1540 f2 64 1d e7 c4 05 0b 16 a4 a7 a7 37 37 37 a7 a7 a7 2f 58 b0 40 b8 89 3f 66 00 00 33 66 28 a3 92 .d.........777.../X.@..?f..3f(.. 1560 9f d5 c6 3e 22 30 af 72 f4 ed 0b a4 35 35 35 4a a5 d2 cd cd 2d 3b 3b 9b 3c 99 d3 6d 6d 6d 5f 7c ...>"0.r....555J....-;;.<..mmm_| 1580 f1 45 f6 11 a5 52 f9 ee bb ef ea 3d e5 ad b7 de 0a 09 09 91 cb e5 f4 df 7f e3 c8 cc cc 0c 0b 0b .E...R.....=.................... 15a0 4b 4c 4c 8c 8c 8c 54 28 14 fd 18 12 5b 72 72 f2 aa 55 ab 82 82 82 9c 9d 9d b3 b2 b2 c8 93 75 12 KLL...T(....[rr..U............u. 15c0 21 24 25 25 e5 8d 37 de 98 30 61 82 af af ef 91 23 47 84 9b 84 c7 0c 00 60 66 a2 a3 a3 09 21 01 !$%%..7..0a.....#G......`f....!. 15e0 01 01 f4 8f ad ad ad a3 46 8d 22 fa 66 7b f6 11 fe e4 69 48 df b6 da c4 79 7a ed f1 e3 c7 19 19 ........F.".f{....iH....yz...... 1600 19 05 05 05 e7 cf 9f 37 91 21 01 00 c0 40 31 b9 c8 1c 8a a2 a4 52 a9 a7 a7 27 7b b7 0d 00 00 cc .......7.!...@1......R...'{..... 1620 06 56 0c 03 a9 bb e0 a5 a1 1e 02 0c 22 6a 94 ab e4 e5 43 43 3d 0a 80 a7 1e b2 da 00 00 40 54 bd .V.........."j....CC=........@T. 1640 17 1e e3 e3 70 f8 3d d3 d2 d2 e4 72 b9 98 81 3a cc d7 4e 45 bb 23 00 00 f4 89 b1 2b 1e 7e 2c 4f ....p.=....r...:..NE.#.....+.~,O 1660 51 51 91 87 87 87 95 95 95 87 87 47 51 51 91 de b3 76 ef de 5d 55 55 35 d8 bb 79 ec 32 63 e4 bd QQ.........GQQ...v..]UU5..y.2c.. 1680 04 06 cf 0f 29 ca cb cb 9b 3a 75 2a 7d e4 ec d9 b3 03 3b 78 00 80 21 64 28 6f 93 fe 22 26 fd 9a ....)....:u*}.....;x..!d(o.."&.. 16a0 3f 2b f2 63 d9 f8 7d 04 f4 61 ab 8d 13 cb 13 1e 1e 4e 3f b2 9d 96 96 16 11 11 a1 f7 94 86 86 86 ?+.c..}..a.......N?............. 16c0 89 13 27 1a 7f 0b d1 08 0c 9e 1f 52 74 ea d4 a9 e2 e2 e2 a6 a6 a6 f8 f8 78 26 b6 08 00 c0 0c e8 ..'........Rt...........x&...... 16e0 0d db 2c 2f 2f 57 ab d5 cc 8f fc 59 91 1f cb a6 37 de cd 90 3e 14 1e 4e 2c 8f 93 93 13 79 b2 da ..,//W.....Y....7...>..N,....y.. 1700 50 a9 54 4c b7 d2 d2 52 07 07 87 03 07 0e 50 14 d5 d3 d3 c3 2f a4 95 95 95 7e 7e 7e 96 96 96 74 P.TL...R......P...../....~~~...t 1720 53 45 45 c5 ac 59 b3 ac ad ad 7d 7d 7d 2b 2b 2b e9 6b 6e d8 b0 61 e4 c8 91 84 90 6b d7 ae f9 fb SEE..Y....}}}+++.kn..a.....k.... 1740 fb 2b 14 8a e9 d3 a7 97 95 95 91 5f af 6f 98 42 cd 7e c1 b4 f2 83 e3 18 86 06 4f f4 85 14 1d 3e .+........._.o.B.~........O....> 1760 7c f8 99 67 9e 91 48 24 96 96 96 e3 c6 8d 33 fe 37 06 00 f0 d4 e9 e8 e8 88 88 88 c8 c9 c9 61 8e |..g..H$......3.7.............a. 1780 f0 67 45 7e 2c 9b de 78 37 43 8c 2d 3c fc 58 1e b5 5a 1d 1c 1c 6c 69 69 19 1a 1a 9a 99 99 49 77 .gE~,..x7C.-<.X..Z...lii......Iw 17a0 fb f3 9f ff bc 7e fd fa af be fa 6a f5 ea d5 74 15 e5 d7 d2 88 88 88 15 2b 56 b4 b4 b4 d0 4d 91 .....~.....j...t........+V....M. 17c0 91 91 2b 57 ae 6c 68 68 78 e3 8d 37 56 af 5e 4d f7 f1 f1 f1 69 6f 6f 27 84 ac 5e bd 7a d5 aa 55 ..+W.lhhx..7V.^M....ioo'..^.z..U 17e0 4d 4d 4d 3b 77 ee 8c 8a 8a d2 3b 30 62 a0 68 f3 83 e3 18 7a 07 cf c6 0e 29 22 84 50 14 65 65 65 MMM;w.....;0b.h....z....)".P.eee 1800 15 15 15 b5 7f ff 7e 23 7f 63 00 00 4f a3 a4 a4 a4 f0 f0 70 7f 7f 7f ce 71 f6 ac 68 28 96 8d 33 ......~#.c..O......p....q..h(..3 1820 73 1a d2 fb e3 d4 9c 2f 69 32 b1 3c ee ee ee 7b f6 ec 99 37 6f 5e 69 69 69 42 42 42 55 55 15 45 s....../i2.<...{...7o^iiiBBBUU.E 1840 51 16 16 16 05 05 05 8b 16 2d e2 9c cb 09 64 6b 6c 6c 94 cb e5 f4 11 26 9f ad ad ad cd de de be Q........-....dkll.....&........ 1860 ad ad 8d a2 a8 ce ce ce 11 23 46 10 42 14 0a 45 5b 5b 1b dd 53 22 91 74 77 77 33 d7 ec e9 e9 91 .........#F.B..E[[..S".tww3..... 1880 4a a5 74 62 1b 33 42 26 c3 4d a7 d3 f1 83 e3 98 31 f0 07 cf 7e cb 7a 43 8a da db db 4f 9e 3c b9 J.tb.3B&.M......1...~.zC....O.<. 18a0 75 eb d6 6b d7 ae 19 fa 5d e1 71 6a f3 86 c7 a9 c1 5c b1 67 51 89 44 c2 f9 db 07 84 37 2b ea 8d u..k....].qj.....\.gQ.D.....7+.. 18c0 65 33 14 ef c6 d7 b7 c7 a9 d9 b1 3c cd cd cd e4 49 45 a1 5f 13 42 0a 0b 0b c3 c3 c3 4f 9c 38 c1 e3.........<....IE._.B......O.8. 18e0 39 91 fd f9 90 b7 b7 b7 46 a3 79 f4 e8 11 dd e4 e9 e9 99 9d 9d ad d5 6a 0f 1e 3c c8 44 c0 d1 55 9.......F.y............j..<.D..U 1900 87 10 32 63 c6 8c 43 87 0e b5 b5 b5 e9 74 3a 3a 27 cd c9 c9 e9 f4 e9 d3 ed ed ed 9f 7e fa 29 dd ..2c..C......t::'...........~.). 1920 47 26 93 dd be 7d 9b 3f 5a 4e 70 1c 7b 0c 7a 07 4f e3 87 14 c5 c5 c5 d1 25 5d 22 91 30 c3 06 00 G&...}.?ZNp.{.z.O.......%]".0... 1940 30 4b 3d 3d 3d cc 54 49 ff cf 9f 15 f9 b1 6c 86 e2 dd f4 ea db 53 6d 2e 2e 2e 15 15 15 74 2c 8f 0K===.TI......l......Sm......t,. 1960 5a ad 8e 8b 8b b3 b1 b1 49 48 48 d0 68 34 74 b7 c0 c0 c0 e2 e2 e2 8d 1b 37 ee d9 b3 c7 d0 a5 3e Z.......IHH.h4t.........7......> 1980 fb ec b3 dc dc 5c 85 42 41 cf fb 6a b5 fa c0 81 03 4a a5 f2 f0 e1 c3 cc 75 18 87 0f 1f 3e 7e fc .....\.BA..j.....J......u....>~. 19a0 b8 a3 a3 23 f3 51 4d 7a 7a 7a 78 78 b8 a3 a3 23 53 30 d6 ae 5d eb ee ee ce ff 20 87 3e 65 e1 c2 ...#.QMzzzxx...#S0..].......>e.. 19c0 85 4c 70 1c 83 3f 78 e6 f4 e8 e8 68 fa 81 0d fa f4 87 0f 1f 4e 9f 3e fd f9 e7 9f b7 b7 b7 cf c8 .Lp..?x....h........N.>......... 19e0 c8 c8 cb cb 33 f2 37 06 00 60 fa f8 9f 94 f3 f1 67 c5 94 94 94 8a 8a 8a 09 13 26 54 54 54 24 27 ....3.7..`......g.........&TTT$' 1a00 27 eb ed 23 74 53 24 17 00 00 80 98 90 5c 00 00 00 a2 42 e1 01 00 00 51 a1 f0 00 00 80 a8 50 78 '..#tS$......\....B....Q......Px 1a20 00 00 40 54 28 3c 00 00 20 2a 14 1e 00 00 10 15 0a 0f 00 00 88 0a 85 07 00 00 44 85 c2 03 00 00 ..@T(<...*................D..... 1a40 a2 42 e1 01 00 00 51 a1 f0 00 00 80 a8 fe 17 f4 6d 9f 9f 79 91 94 91 00 00 00 00 49 45 4e 44 ae .B....Q.........m..y.......IEND. 1a60 42 60 82 B`.