From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52616) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dtAyA-0001Ea-MU for guix-patches@gnu.org; Sat, 16 Sep 2017 07:09:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dtAy6-0007sr-En for guix-patches@gnu.org; Sat, 16 Sep 2017 07:09:06 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:34702) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dtAy6-0007sn-8l for guix-patches@gnu.org; Sat, 16 Sep 2017 07:09:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dtAy6-0008An-3W for guix-patches@gnu.org; Sat, 16 Sep 2017 07:09:02 -0400 Subject: [bug#28444] [PATCH 3/3] build-system: Add 'meson-build-system'. Resent-Message-ID: MIME-Version: 1.0 In-Reply-To: <87a81vllgk.fsf@gnu.org> References: <20170913125003.13313-1-petermikkelsen10@gmail.com> <20170913125003.13313-3-petermikkelsen10@gmail.com> <87a81vllgk.fsf@gnu.org> From: Peter Mikkelsen Date: Sat, 16 Sep 2017 13:08:37 +0200 Message-ID: Content-Type: multipart/mixed; boundary="001a113ff5e809b97d05594c8833" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 28444@debbugs.gnu.org --001a113ff5e809b97d05594c8833 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 2017-09-15 23:07 GMT+02:00 Ludovic Court=C3=A8s : > > Peter Mikkelsen skribis: > > > * Makefile.am (MODULES): Add 'guix/build-system/meson.scm' and > > 'guix/build/meson-build-system.scm'. > > * guix/build-system/meson.scm: New file. > > * guix/build/meson-build-system.scm: New file. > > * doc/guix.texi (Build Systems): Add 'meson-build-system'. > > Overall LGTM! I have minor questions and comments: > > > +(define* (configure #:key outputs configure-flags build-type > > + #:allow-other-keys) > > + "Configure the given package" > > Make sure to add a period at the end of sentences. :-) Oops, will do :) > > > +(define* (fix-runpath #:key elf-directories outputs > > + #:allow-other-keys) > > ELF-DIRECTORIES should default to a list, probably the empty list (here > it defaults to #f, which cannot work.) I thought it was enough giving it a default value in guix/build-system/meson.scm, but allright, I have added it here. > > > + "Try to make sure all ELF files in ELF-DIRECTORIES are able to find = their > > +local dependencies in their RUNPATH. Also shrink the RUNPATH to what = is needed, > > +since alot of directories are left over from meson." > > =E2=80=9Ca lot=E2=80=9D > > According to this description, half of it corresponds to the > =E2=80=98validate-runpath=E2=80=99 phase, no? To my understanding 'validate-runpath' just checks and complains, but this phase checks if it can find any dependencies in directories that are local to the package, and if it can, it adds them to the runpath. I have tried to update the description :) > > The second half is the shrink-RUNPATH thing, but can you clarify why it > is needed? Which directories in RUNPATH are =E2=80=9Cleft over from meso= n=E2=80=9D? I also tried giving an example of that in the new description. > > > + (define (find-deps dep-name elf-files) > > + "Find the directories (if any) that contains DEP-NAME. The direct= ories > > +searched are the ones that ELF-FILES are in." > > + (let* ((matches (filter (lambda (file) > > + (string=3D? dep-name (basename file))) > > + elf-files))) > > + (map dirname matches))) > > Avoid local variable =E2=80=98matches=E2=80=99, to keep it concise. Also= , for inner > =E2=80=98define=E2=80=99s, use a comment instead of a docstring (the docs= tring would be > inaccessible.) > OK. > > + (define (file-needed file) > > + "Return a list of libraries that FILE needs." > > + (let* ((elf (call-with-input-file file > > + (compose parse-elf get-bytevector-all))) > > + (dyninfo (elf-dynamic-info elf))) > > + (if dyninfo > > + (elf-dynamic-info-needed dyninfo) > > + '()))) > > + > > + (define (handle-file file elf-files) > > + "If FILE needs any libs that are part of ELF-FILES, the RUNPATH > > +is modified accordingly." > > + (let* ((dep-dirs (apply append (map (lambda (dep-name) > > + (find-deps dep-name elf-file= s)) > > + (file-needed file))))) > > + (unless (null? dep-dirs) > > + (augment-rpath file (string-join dep-dirs ":"))))) > > + > > + (define handle-output > > + (match-lambda > > + (elf-list (apply append (map (lambda (dir) > > + (find-files dir elf-pred)= ) > > + excisting-elf-dirs)))) > > (apply append lstlst) =3D (concatenate lstlst) > I assume it is the 'concatenate' from (srfi srfi-1), so I have added it to the imports > That=E2=80=99s it! Could you comment and send an updated patch? > > Thanks for working on it, looks like it=E2=80=99s going to be useful very= soon! > > Ludo=E2=80=99. Updated patch attached, thanks for reviewing! Peter --001a113ff5e809b97d05594c8833 Content-Type: text/x-patch; charset="UTF-8"; name="0001-build-system-Add-meson-build-system.patch" Content-Disposition: attachment; filename="0001-build-system-Add-meson-build-system.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j7n7ljgw0 RnJvbSA4MTg1YzJhMTU0Yzc0NzNkM2I1MDM1MTI0NmNjODNiNzkyZWM2YTU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBNaWtrZWxzZW4gPHBldGVybWlra2Vsc2VuMTBAZ21h aWwuY29tPgpEYXRlOiBXZWQsIDEzIFNlcCAyMDE3IDE0OjM3OjM5ICswMjAwClN1YmplY3Q6IFtQ QVRDSF0gYnVpbGQtc3lzdGVtOiBBZGQgJ21lc29uLWJ1aWxkLXN5c3RlbScuCgoqIE1ha2VmaWxl LmFtIChNT0RVTEVTKTogQWRkICdndWl4L2J1aWxkLXN5c3RlbS9tZXNvbi5zY20nIGFuZAogICdn dWl4L2J1aWxkL21lc29uLWJ1aWxkLXN5c3RlbS5zY20nLgoqIGd1aXgvYnVpbGQtc3lzdGVtL21l c29uLnNjbTogTmV3IGZpbGUuCiogZ3VpeC9idWlsZC9tZXNvbi1idWlsZC1zeXN0ZW0uc2NtOiBO ZXcgZmlsZS4KKiBkb2MvZ3VpeC50ZXhpIChCdWlsZCBTeXN0ZW1zKTogQWRkICdtZXNvbi1idWls ZC1zeXN0ZW0nLgotLS0KIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiAr CiBkb2MvZ3VpeC50ZXhpICAgICAgICAgICAgICAgICAgICAgfCAgNTUgKysrKysrKysrKysrCiBn dWl4L2J1aWxkLXN5c3RlbS9tZXNvbi5zY20gICAgICAgfCAxNzggKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIGd1aXgvYnVpbGQvbWVzb24tYnVpbGQtc3lzdGVtLnNjbSB8 IDE0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDM4 NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3VpeC9idWlsZC1zeXN0ZW0vbWVz b24uc2NtCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3VpeC9idWlsZC9tZXNvbi1idWlsZC1zeXN0ZW0u c2NtCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQppbmRleCA0YzJlNzdk MTkuLmFkZWI2ZTYyMSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFrZWZpbGUuYW0K QEAgLTc5LDYgKzc5LDcgQEAgTU9EVUxFUyA9CQkJCQlcCiAgIGd1aXgvYnVpbGQtc3lzdGVtL2R1 Yi5zY20JCQlcCiAgIGd1aXgvYnVpbGQtc3lzdGVtL2VtYWNzLnNjbQkJCVwKICAgZ3VpeC9idWls ZC1zeXN0ZW0vZm9udC5zY20JCQlcCisgIGd1aXgvYnVpbGQtc3lzdGVtL21lc29uLnNjbQkJCVwK ICAgZ3VpeC9idWlsZC1zeXN0ZW0vbWluaWZ5LnNjbQkJCVwKICAgZ3VpeC9idWlsZC1zeXN0ZW0v YXNkZi5zY20JCQlcCiAgIGd1aXgvYnVpbGQtc3lzdGVtL2dsaWItb3ItZ3RrLnNjbQkJXApAQCAt MTA2LDYgKzEwNyw3IEBAIE1PRFVMRVMgPQkJCQkJXAogICBndWl4L2J1aWxkL2NtYWtlLWJ1aWxk LXN5c3RlbS5zY20JCVwKICAgZ3VpeC9idWlsZC9kdWItYnVpbGQtc3lzdGVtLnNjbQkJXAogICBn dWl4L2J1aWxkL2VtYWNzLWJ1aWxkLXN5c3RlbS5zY20JCVwKKyAgZ3VpeC9idWlsZC9tZXNvbi1i dWlsZC1zeXN0ZW0uc2NtCQlcCiAgIGd1aXgvYnVpbGQvbWluaWZ5LWJ1aWxkLXN5c3RlbS5zY20J CVwKICAgZ3VpeC9idWlsZC9mb250LWJ1aWxkLXN5c3RlbS5zY20JCVwKICAgZ3VpeC9idWlsZC9h c2RmLWJ1aWxkLXN5c3RlbS5zY20JCVwKZGlmZiAtLWdpdCBhL2RvYy9ndWl4LnRleGkgYi9kb2Mv Z3VpeC50ZXhpCmluZGV4IDA2MzM2OTEyMi4uMTZiYjIwYjRhIDEwMDY0NAotLS0gYS9kb2MvZ3Vp eC50ZXhpCisrKyBiL2RvYy9ndWl4LnRleGkKQEAgLTM4MTEsNiArMzgxMSw2MSBAQCBuZWVkIHRv IGJlIGNvcGllZCBpbnRvIHBsYWNlLiAgSXQgY29waWVzIGZvbnQgZmlsZXMgdG8gc3RhbmRhcmQK IGxvY2F0aW9ucyBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KIEBlbmQgZGVmdnIKIAorQGRlZnZy IHtTY2hlbWUgVmFyaWFibGV9IG1lc29uLWJ1aWxkLXN5c3RlbQorVGhpcyB2YXJpYWJsZSBpcyBl eHBvcnRlZCBieSBAY29kZXsoZ3VpeCBidWlsZC1zeXN0ZW0gbWVzb24pfS4gIEl0CitpbXBsZW1l bnRzIHRoZSBidWlsZCBwcm9jZWR1cmUgZm9yIHBhY2thZ2VzIHRoYXQgdXNlCitAdXJse2h0dHA6 Ly9tZXNvbmJ1aWxkLmNvbSwgbWVzb259IGFzIHRoZWlyIGJ1aWxkIHN5c3RlbS4KKworSXQgYWRk cyBib3RoIEBjb2Rle21lc29ufSBhbmQgQGNvZGV7bmluamF9IHRvIHRoZSBzZXQgb2YgaW5wdXRz LCBhbmQgdGhleQorY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBAY29kZXsjOm1l c29ufSBhbmQgQGNvZGV7IzpuaW5qYX0gaWYgbmVlZGVkLgorVGhlIGRlZmF1bHQgQGNvZGV7bWVz b259IGlzIEBjb2Rle21lc29uLWZvci1idWlsZH0gd2hpY2ggaXMgc3BlY2lhbCBiZWNhdXNlCitp dCBkb2Vzbid0IGNsZWFyIHRoZSBAY29kZXtSVU5QQVRIfSBvZiBiaW5hcmllcyBhbmQgbGlicmFy aWVzIHdoZW4gdGhleSBhcmUKK2luc3RhbGxlZC4KKworVGhlIGJ1aWxkLXN5c3RlbSBpcyBhbiBl eHRlbnNpb24gb2YgQHZhcntnbnUtYnVpbGQtc3lzdGVtfSwgYnV0IHdpdGggdGhlCitmb2xsb3dp bmcgcGhhc2VzIGNoYW5nZWQgdG8gc29tZSBzcGVjaWZpYyBmb3IgbWVzb246CisKK0B0YWJsZSBA Y29kZQorCitAaXRlbSBjb25maWd1cmUKK1RoZSBwaGFzZSBydW5zIEBjb2Rle21lc29ufSB3aXRo IHRoZSBmbGFncyBzcGVjaWZpZWQgaW4KK0Bjb2RleyM6Y29uZmlndXJlLWZsYWdzfS4gIFRoZSBm bGFnIEBjb2Rley0tYnVpbGQtdHlwZX0gaXMgYWx3YXlzIHNldCB0bworQGNvZGV7cGxhaW59IHVu bGVzcyBzb21ldGhpbmcgZWxzZSBpcyBzcGVjaWZpZWQgaW4gQGNvZGV7IzpidWlsZC10eXBlfS4K KworQGl0ZW0gYnVpbGQKK1RoZSBwaGFzZSBydW5zIEBjb2Rle25pbmphfSB0byBidWlsZCB0aGUg cGFja2FnZSBpbiBwYXJhbGxlbCBieSBkZWZhdWx0LCBidXQKK3RoaXMgY2FuIGJlIGNoYW5nZWQg d2l0aCBAY29kZXsjOnBhcmFsbGVsLWJ1aWxkP30uCisKK0BpdGVtIGNoZWNrCitUaGUgcGhhc2Ug cnVucyBAY29kZXtuaW5qYX0gd2l0aCB0aGUgdGFyZ2V0IHNwZWNpZmllZCBpbiBAY29kZXsjOnRl c3QtdGFyZ2V0fSwKK3doaWNoIGlzIEB2YXJ7YGB0ZXN0Jyd9IGJ5IGRlZmF1bHQuCisKK0BpdGVt IGluc3RhbGwKK1RoZSBwaGFzZSBydW5zIEBjb2Rle25pbmphIGluc3RhbGx9IGFuZCBjYW4gbm90 IGJlIGNoYW5nZWQuCitAZW5kIHRhYmxlCisKK0FwYXJ0IGZyb20gdGhhdCwgdGhlIGJ1aWxkIHN5 c3RlbSBhbHNvIGFkZHMgdGhlIGZvbGxvd2luZyBwaGFzZXM6CisKK0B0YWJsZSBAY29kZQorCitA aXRlbSBmaXgtcnVucGF0aAorVGhpcyBwaGFzZSB0cmllcyB0byBsb2NhdGUgdGhlIGxvY2FsIGRp cmVjdG9yaWVzIGluIHRoZSBwYWNrYWdlIGJlaW5nIGJ1aWxkLAord2hpY2ggaGFzIGxpYnJhcmll cyB0aGF0IHNvbWUgb2YgdGhlIGJpbmFyaWVzIG5lZWQuICBJZiBhbnkgYXJlIGZvdW5kLCB0aGV5 IHdpbGwKK2JlIGFkZGVkIHRvIHRoZSBwcm9ncmFtcyBAY29kZXtSVU5QQVRIfS4gIEl0IGlzIG5l ZWRlZCBiZWNhdXNlCitAY29kZXttZXNvbi1mb3ItYnVpbGR9IGtlZXBzIHRoZSBAY29kZXtSVU5Q QVRIfSBvZiBiaW5hcmllcyBhbmQgbGlicmFyaWVzIGZyb20KK3doZW4gdGhleSBhcmUgYnVpbGQs IGJ1dCBvZnRlbiB0aGF0IGlzIG5vdCB0aGUgQGNvZGV7UlVOUEFUSH0gd2Ugd2FudC4KK1RoZXJl Zm9yIGl0IGlzIGFsc28gc2hyaW5rZWQgdG8gdGhlIG1pbmltdW0gbmVlZGVkIGJ5IHRoZSBwcm9n cmFtLgorCitAaXRlbSBnbGliLW9yLWd0ay13cmFwCitUaGlzIHBoYXNlIGlzIHRoZSBwaGFzZSBw cm92aWRlZCBieSBAdmFye2dsaWItb3ItZ3RrLWJ1aWxkLXN5c3RlbX0sIGFuZCBpdAoraXMgbm90 IGVuYWJsZWQgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSBlbmFibGVkIHdpdGggQGNvZGV7IzpnbGli LW9yLWd0az99LgorCitAaXRlbSBnbGliLW9yLWd0ay1jb21waWxlLXNjaGVtYXMKK1RoaXMgcGhh c2UgaXMgdGhlIHBoYXNlIHByb3ZpZGVkIGJ5IEB2YXJ7Z2xpYi1vci1ndGstYnVpbGQtc3lzdGVt fSwgYW5kIGl0CitpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiAgSXQgY2FuIGJlIGVuYWJsZWQg d2l0aCBAY29kZXsjOmdsaWItb3ItZ3RrP30uCitAZW5kIHRhYmxlCitAZW5kIGRlZnZyCisKIExh c3RseSwgZm9yIHBhY2thZ2VzIHRoYXQgZG8gbm90IG5lZWQgYW55dGhpbmcgYXMgc29waGlzdGlj YXRlZCwgYQogYGB0cml2aWFsJycgYnVpbGQgc3lzdGVtIGlzIHByb3ZpZGVkLiAgSXQgaXMgdHJp dmlhbCBpbiB0aGUgc2Vuc2UgdGhhdAogaXQgcHJvdmlkZXMgYmFzaWNhbGx5IG5vIHN1cHBvcnQ6 IGl0IGRvZXMgbm90IHB1bGwgYW55IGltcGxpY2l0IGlucHV0cywKZGlmZiAtLWdpdCBhL2d1aXgv YnVpbGQtc3lzdGVtL21lc29uLnNjbSBiL2d1aXgvYnVpbGQtc3lzdGVtL21lc29uLnNjbQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmQ2NmVjNzYwYQotLS0gL2Rldi9udWxs CisrKyBiL2d1aXgvYnVpbGQtc3lzdGVtL21lc29uLnNjbQpAQCAtMCwwICsxLDE3OCBAQAorOzs7 IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCis7Ozsg Q29weXJpZ2h0IMKpIDIwMTcgUGV0ZXIgTWlra2Vsc2VuIDxwZXRlcm1pa2tlbHNlbjEwQGdtYWls LmNvbT4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgorOzs7Cis7Ozsg R05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cis7OzsgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXggaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7OzsgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzs7IE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK Kzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzs7Cis7 OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAoZ3VpeCBidWlsZC1z eXN0ZW0gbWVzb24pCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBzdG9yZSkKKyAgIzp1c2UtbW9kdWxl IChndWl4IHV0aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZGVyaXZhdGlvbnMpCisgICM6dXNl LW1vZHVsZSAoZ3VpeCBzZWFyY2gtcGF0aHMpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBidWlsZC1z eXN0ZW0pCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBidWlsZC1zeXN0ZW0gZ251KQorICAjOnVzZS1t b2R1bGUgKGd1aXggYnVpbGQtc3lzdGVtIGdsaWItb3ItZ3RrKQorICAjOnVzZS1tb2R1bGUgKGd1 aXggcGFja2FnZXMpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gpCisgICM6ZXhwb3J0ICgl bWVzb24tYnVpbGQtc3lzdGVtLW1vZHVsZXMKKyAgICAgICAgICAgIG1lc29uLWJ1aWxkLXN5c3Rl bSkpCisKKzs7IENvbW1lbnRhcnk6Cis7OworOzsgU3RhbmRhcmQgYnVpbGQgcHJvY2VkdXJlIGZv ciBwYWNrYWdlcyB1c2luZyBNZXNvbi4gVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbgorOzsgZXh0 ZW5zaW9uIG9mIGBnbnUtYnVpbGQtc3lzdGVtJywgd2l0aCB0aGUgb3B0aW9uIHRvIHR1cm4gb24g dGhlIGdsaWIvZ3RrCis7OyBwaGFzZXMgZnJvbSBgZ2xpYi1vci1ndGstYnVpbGQtc3lzdGVtJy4K Kzs7Cis7OyBDb2RlOgorCisoZGVmaW5lICVtZXNvbi1idWlsZC1zeXN0ZW0tbW9kdWxlcworICA7 OyBCdWlsZC1zaWRlIG1vZHVsZXMgaW1wb3J0ZWQgYnkgZGVmYXVsdC4KKyAgYCgoZ3VpeCBidWls ZCBtZXNvbi1idWlsZC1zeXN0ZW0pCisgICAgKGd1aXggYnVpbGQgcnBhdGgpCisgICAgOzsgVGhl IG1vZHVsZXMgZnJvbSBnbGliLW9yLWd0ayBjb250YWlucyB0aGUgbW9kdWxlcyBmcm9tIGdudS1i dWlsZC1zeXN0ZW0sCisgICAgOzsgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBpbXBvcnQgdGhhdCB0 b28uCisgICAgLEAlZ2xpYi1vci1ndGstYnVpbGQtc3lzdGVtLW1vZHVsZXMpKQorCisoZGVmaW5l IChkZWZhdWx0LW5pbmphKQorICAiUmV0dXJuIHRoZSBkZWZhdWx0IG5pbmphIHBhY2thZ2UuIgor ICA7OyBMYXppbHkgcmVzb2x2ZSB0aGUgYmluZGluZyB0byBhdm9pZCBhIGNpcmN1bGFyIGRlcGVu ZGVuY3kuCisgIChsZXQgKChtb2R1bGUgKHJlc29sdmUtaW50ZXJmYWNlICcoZ251IHBhY2thZ2Vz IG5pbmphKSkpKQorICAgIChtb2R1bGUtcmVmIG1vZHVsZSAnbmluamEpKSkKKworKGRlZmluZSAo ZGVmYXVsdC1tZXNvbikKKyAgIlJldHVybiB0aGUgZGVmYXVsdCBtZXNvbiBwYWNrYWdlLiIKKyAg OzsgTGF6aWx5IHJlc29sdmUgdGhlIGJpbmRpbmcgdG8gYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRl bmN5LgorICAobGV0ICgobW9kdWxlIChyZXNvbHZlLWludGVyZmFjZSAnKGdudSBwYWNrYWdlcyBi dWlsZC10b29scykpKSkKKyAgICAobW9kdWxlLXJlZiBtb2R1bGUgJ21lc29uLWZvci1idWlsZCkp KQorCisoZGVmaW5lIChkZWZhdWx0LXBhdGNoZWxmKQorICAiUmV0dXJuIHRoZSBkZWZhdWx0IHBh dGNoZWxmIHBhY2thZ2UuIgorICA7OyBMYXppbHkgcmVzb2x2ZSB0aGUgYmluZGluZyB0byBhdm9p ZCBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuCisgIChsZXQgKChtb2R1bGUgKHJlc29sdmUtaW50ZXJm YWNlICcoZ251IHBhY2thZ2VzIGVsZikpKSkKKyAgICAobW9kdWxlLXJlZiBtb2R1bGUgJ3BhdGNo ZWxmKSkpCisKKyhkZWZpbmUqIChsb3dlciBuYW1lCisgICAgICAgICAgICAgICAgIzprZXkgc291 cmNlIGlucHV0cyBuYXRpdmUtaW5wdXRzIG91dHB1dHMgc3lzdGVtIHRhcmdldAorICAgICAgICAg ICAgICAgIChtZXNvbiAoZGVmYXVsdC1tZXNvbikpCisgICAgICAgICAgICAgICAgKG5pbmphIChk ZWZhdWx0LW5pbmphKSkKKyAgICAgICAgICAgICAgICAoZ2xpYi1vci1ndGsgI2YpCisgICAgICAg ICAgICAgICAgIzphbGxvdy1vdGhlci1rZXlzCisgICAgICAgICAgICAgICAgIzpyZXN0IGFyZ3Vt ZW50cykKKyAgIlJldHVybiBhIGJhZyBmb3IgTkFNRS4iCisgIChkZWZpbmUgcHJpdmF0ZS1rZXl3 b3JkcworICAgIGAoIzpzb3VyY2UgIzptZXNvbiAjOm5pbmphICM6aW5wdXRzICM6bmF0aXZlLWlu cHV0cyAjOm91dHB1dHMgIzp0YXJnZXQpKQorCisgIChhbmQgKG5vdCB0YXJnZXQpIDs7IFRPRE86 IGFkZCBzdXBwb3J0IGZvciBjcm9zcy1jb21waWxhdGlvbi4KKyAgICAgICAoYmFnCisgICAgICAg ICAobmFtZSBuYW1lKQorICAgICAgICAgKHN5c3RlbSBzeXN0ZW0pCisgICAgICAgICAoYnVpbGQt aW5wdXRzIGAoKCJtZXNvbiIgLG1lc29uKQorICAgICAgICAgICAgICAgICAgICAgICAgICgibmlu amEiICxuaW5qYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA7OyBBZGQgcGF0Y2hlbGYgZm9y IChndWl4IGJ1aWxkIHJwYXRoKSB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgICgi cGF0Y2hlbGYiICwoZGVmYXVsdC1wYXRjaGVsZikpCisgICAgICAgICAgICAgICAgICAgICAgICAg LEBuYXRpdmUtaW5wdXRzKSkKKyAgICAgICAgIChob3N0LWlucHV0cyBgKCxAKGlmIHNvdXJjZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCgoInNvdXJjZSIgLHNvdXJjZSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAs QGlucHV0cworICAgICAgICAgICAgICAgICAgICAgICAgOzsgS2VlcCB0aGUgc3RhbmRhcmQgaW5w dXRzIG9mICdnbnUtYnVpbGQtc3lzdGVtJy4KKyAgICAgICAgICAgICAgICAgICAgICAgICxAKHN0 YW5kYXJkLXBhY2thZ2VzKSkpCisgICAgICAgICAob3V0cHV0cyBvdXRwdXRzKQorICAgICAgICAg KGJ1aWxkIG1lc29uLWJ1aWxkKQorICAgICAgICAgKGFyZ3VtZW50cyAoc3RyaXAta2V5d29yZC1h cmd1bWVudHMgcHJpdmF0ZS1rZXl3b3JkcyBhcmd1bWVudHMpKSkpKQorCisoZGVmaW5lKiAobWVz b24tYnVpbGQgc3RvcmUgbmFtZSBpbnB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAjOmtleSAo Z3VpbGUgI2YpCisgICAgICAgICAgICAgICAgICAgICAgKG91dHB1dHMgJygib3V0IikpCisgICAg ICAgICAgICAgICAgICAgICAgKGNvbmZpZ3VyZS1mbGFncyAnJygpKQorICAgICAgICAgICAgICAg ICAgICAgIChzZWFyY2gtcGF0aHMgJygpKQorICAgICAgICAgICAgICAgICAgICAgIChidWlsZC10 eXBlICJwbGFpbiIpCisgICAgICAgICAgICAgICAgICAgICAgKHRlc3RzPyAjdCkKKyAgICAgICAg ICAgICAgICAgICAgICAodGVzdC10YXJnZXQgInRlc3QiKQorICAgICAgICAgICAgICAgICAgICAg IChnbGliLW9yLWd0az8gI2YpCisgICAgICAgICAgICAgICAgICAgICAgKHBhcmFsbGVsLWJ1aWxk PyAjdCkKKyAgICAgICAgICAgICAgICAgICAgICAocGFyYWxsZWwtdGVzdHM/ICNmKQorICAgICAg ICAgICAgICAgICAgICAgICh2YWxpZGF0ZS1ydW5wYXRoPyAjdCkKKyAgICAgICAgICAgICAgICAg ICAgICAocGF0Y2gtc2hlYmFuZ3M/ICN0KQorICAgICAgICAgICAgICAgICAgICAgIChzdHJpcC1i aW5hcmllcz8gI3QpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmlwLWZsYWdzICcnKCItLXN0 cmlwLWRlYnVnIikpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmlwLWRpcmVjdG9yaWVzICcn KCJsaWIiICJsaWI2NCIgImxpYmV4ZWMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJiaW4iICJzYmluIikpCisgICAgICAgICAgICAgICAgICAgICAgKGVsZi1k aXJlY3RvcmllcyAnJygibGliIiAibGliNjQiICJsaWJleGVjIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImJpbiIgInNiaW4iKSkKKyAgICAgICAgICAgICAgICAg ICAgICAocGhhc2VzICcoQCAoZ3VpeCBidWlsZCBtZXNvbi1idWlsZC1zeXN0ZW0pCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJXN0YW5kYXJkLXBoYXNlcykpCisgICAgICAgICAg ICAgICAgICAgICAgKHN5c3RlbSAoJWN1cnJlbnQtc3lzdGVtKSkKKyAgICAgICAgICAgICAgICAg ICAgICAoaW1wb3J0ZWQtbW9kdWxlcyAlbWVzb24tYnVpbGQtc3lzdGVtLW1vZHVsZXMpCisgICAg ICAgICAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCBtZXNvbi1idWlsZC1zeXN0 ZW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VpeCBidWlsZCB1dGlscykp KSkKKyAgIkJ1aWxkIFNPVVJDRSB1c2luZyBNRVNPTiwgYW5kIHdpdGggSU5QVVRTLCBhc3N1bWlu ZyB0aGF0IFNPVVJDRQoraGFzIGEgJ21lc29uLmJ1aWxkJyBmaWxlLiIKKyAgKGRlZmluZSBidWls ZGVyCisgICAgYChsZXQgKChidWlsZC1waGFzZXMgKGlmICxnbGliLW9yLWd0az8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLHBoYXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobW9kaWZ5LXBoYXNlcyAscGhhc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGRlbGV0ZSAnZ2xpYi1vci1ndGstY29tcGlsZS1zY2hlbWFzKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChkZWxldGUgJ2dsaWItb3ItZ3RrLXdyYXApKSkpKQorICAgICAgICh1c2Ut bW9kdWxlcyAsQG1vZHVsZXMpCisgICAgICAgKG1lc29uLWJ1aWxkICM6c291cmNlICwobWF0Y2gg KGFzc29jLXJlZiBpbnB1dHMgInNvdXJjZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgoKD8gZGVyaXZhdGlvbj8gc291cmNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChkZXJpdmF0aW9uLT5vdXRwdXQtcGF0aCBzb3VyY2UpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlKSkKKyAgICAgICAgICAgICAgICAg ICAgIzpzeXN0ZW0gLHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAjOm91dHB1dHMgJW91dHB1 dHMKKyAgICAgICAgICAgICAgICAgICAgIzppbnB1dHMgJWJ1aWxkLWlucHV0cworICAgICAgICAg ICAgICAgICAgICAjOnNlYXJjaC1wYXRocyAnLChtYXAgc2VhcmNoLXBhdGgtc3BlY2lmaWNhdGlv bi0+c2V4cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNo LXBhdGhzKQorICAgICAgICAgICAgICAgICAgICAjOnBoYXNlcyBidWlsZC1waGFzZXMKKyAgICAg ICAgICAgICAgICAgICAgIzpjb25maWd1cmUtZmxhZ3MgLGNvbmZpZ3VyZS1mbGFncworICAgICAg ICAgICAgICAgICAgICAjOmJ1aWxkLXR5cGUgLGJ1aWxkLXR5cGUKKyAgICAgICAgICAgICAgICAg ICAgIzp0ZXN0cz8gLHRlc3RzPworICAgICAgICAgICAgICAgICAgICAjOnRlc3QtdGFyZ2V0ICx0 ZXN0LXRhcmdldAorICAgICAgICAgICAgICAgICAgICAjOnBhcmFsbGVsLWJ1aWxkPyAscGFyYWxs ZWwtYnVpbGQ/CisgICAgICAgICAgICAgICAgICAgICM6cGFyYWxsZWwtdGVzdHM/ICxwYXJhbGxl bC10ZXN0cz8KKyAgICAgICAgICAgICAgICAgICAgIzp2YWxpZGF0ZS1ydW5wYXRoPyAsdmFsaWRh dGUtcnVucGF0aD8KKyAgICAgICAgICAgICAgICAgICAgIzpwYXRjaC1zaGViYW5ncz8gLHBhdGNo LXNoZWJhbmdzPworICAgICAgICAgICAgICAgICAgICAjOnN0cmlwLWJpbmFyaWVzPyAsc3RyaXAt YmluYXJpZXM/CisgICAgICAgICAgICAgICAgICAgICM6c3RyaXAtZmxhZ3MgLHN0cmlwLWZsYWdz CisgICAgICAgICAgICAgICAgICAgICM6c3RyaXAtZGlyZWN0b3JpZXMgLHN0cmlwLWRpcmVjdG9y aWVzCisgICAgICAgICAgICAgICAgICAgICM6ZWxmLWRpcmVjdG9yaWVzICxlbGYtZGlyZWN0b3Jp ZXMpKSkKKworICAoZGVmaW5lIGd1aWxlLWZvci1idWlsZAorICAgIChtYXRjaCBndWlsZQorICAg ICAgKCg/IHBhY2thZ2U/KQorICAgICAgIChwYWNrYWdlLWRlcml2YXRpb24gc3RvcmUgZ3VpbGUg c3lzdGVtICM6Z3JhZnQ/ICNmKSkKKyAgICAgICgjZiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyB0aGUgZGVmYXVsdAorICAgICAgIChsZXQqICgoZGlzdHJvIChyZXNv bHZlLWludGVyZmFjZSAnKGdudSBwYWNrYWdlcyBjb21tZW5jZW1lbnQpKSkKKyAgICAgICAgICAg ICAgKGd1aWxlICAobW9kdWxlLXJlZiBkaXN0cm8gJ2d1aWxlLWZpbmFsKSkpCisgICAgICAgICAo cGFja2FnZS1kZXJpdmF0aW9uIHN0b3JlIGd1aWxlIHN5c3RlbSAjOmdyYWZ0PyAjZikpKSkpCisK KyAgKGJ1aWxkLWV4cHJlc3Npb24tPmRlcml2YXRpb24gc3RvcmUgbmFtZSBidWlsZGVyCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6c3lzdGVtIHN5c3RlbQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjOmlucHV0cyBpbnB1dHMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIzptb2R1bGVzIGltcG9ydGVkLW1vZHVsZXMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIzpvdXRwdXRzIG91dHB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIzpndWlsZS1mb3ItYnVpbGQgZ3VpbGUtZm9yLWJ1aWxkKSkKKworKGRlZmluZSBt ZXNvbi1idWlsZC1zeXN0ZW0KKyAgKGJ1aWxkLXN5c3RlbQorICAgIChuYW1lICdtZXNvbikKKyAg ICAoZGVzY3JpcHRpb24gIlRoZSBzdGFuZGFyZCBNZXNvbiBidWlsZCBzeXN0ZW0iKQorICAgIChs b3dlciBsb3dlcikpKQorCis7OzsgbWVzb24uc2NtIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvZ3Vp eC9idWlsZC9tZXNvbi1idWlsZC1zeXN0ZW0uc2NtIGIvZ3VpeC9idWlsZC9tZXNvbi1idWlsZC1z eXN0ZW0uc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNTE1NDI5NzRl Ci0tLSAvZGV2L251bGwKKysrIGIvZ3VpeC9idWlsZC9tZXNvbi1idWlsZC1zeXN0ZW0uc2NtCkBA IC0wLDAgKzEsMTQ5IEBACis7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5h Z2VtZW50IGZvciBHTlUKKzs7OyBDb3B5cmlnaHQgwqkgMjAxNyBQZXRlciBNaWtrZWxzZW4gPHBl dGVybWlra2Vsc2VuMTBAZ21haWwuY29tPgorOzs7Cis7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R05VIEd1aXguCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7OzsgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7OyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQKKzs7OyB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OzsKKzs7OyBHTlUg R3VpeCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBi dXQKKzs7OyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCis7OzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorOzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCis7OzsKKzs7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzs7IGFsb25nIHdpdGggR05VIEd1aXgu ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyhkZWZpbmUt bW9kdWxlIChndWl4IGJ1aWxkIG1lc29uLWJ1aWxkLXN5c3RlbSkKKyAgIzp1c2UtbW9kdWxlICgo Z3VpeCBidWlsZCBnbnUtYnVpbGQtc3lzdGVtKSAjOnByZWZpeCBnbnU6KQorICAjOnVzZS1tb2R1 bGUgKChndWl4IGJ1aWxkIGdsaWItb3ItZ3RrLWJ1aWxkLXN5c3RlbSkgIzpwcmVmaXggZ2xpYi1v ci1ndGs6KQorICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQgdXRpbHMpCisgICM6dXNlLW1vZHVs ZSAoZ3VpeCBidWlsZCBycGF0aCkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxkIGdyZW1saW4p CisgICM6dXNlLW1vZHVsZSAoZ3VpeCBlbGYpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gp CisgICM6dXNlLW1vZHVsZSAocm5ycyBpbyBwb3J0cykKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNy ZmktMSkKKyAgIzpleHBvcnQgKCVzdGFuZGFyZC1waGFzZXMKKyAgICAgICAgICAgICVnbGliLW9y LWd0ay1waGFzZXMKKyAgICAgICAgICAgIG1lc29uLWJ1aWxkKSkKKworOzsgQ29tbWVudGFyeToK Kzs7Cis7OyBCdWlsZGVyLXNpZGUgY29kZSBvZiB0aGUgc3RhbmRhcmQgbWVzb24gYnVpbGQgcHJv Y2VkdXJlLgorOzsKKzs7IENvZGU6CisKKyhkZWZpbmUqIChjb25maWd1cmUgIzprZXkgb3V0cHV0 cyBjb25maWd1cmUtZmxhZ3MgYnVpbGQtdHlwZQorICAgICAgICAgICAgICAgICAgICAjOmFsbG93 LW90aGVyLWtleXMpCisgICJDb25maWd1cmUgdGhlIGdpdmVuIHBhY2thZ2UuIgorICAobGV0KiAo KG91dCAoYXNzb2MtcmVmIG91dHB1dHMgIm91dCIpKQorICAgICAgICAgKHNvdXJjZS1kaXIgKGdl dGN3ZCkpCisgICAgICAgICAoYnVpbGQtZGlyICIuLi9idWlsZCIpCisgICAgICAgICAocHJlZml4 IChhc3NvYy1yZWYgb3V0cHV0cyAib3V0IikpCisgICAgICAgICAoYXJncyBgKCwoc3RyaW5nLWFw cGVuZCAiLS1wcmVmaXg9IiBwcmVmaXgpCisgICAgICAgICAgICAgICAgICwoc3RyaW5nLWFwcGVu ZCAiLS1idWlsZHR5cGU9IiBidWlsZC10eXBlKQorICAgICAgICAgICAgICAgICAsQGNvbmZpZ3Vy ZS1mbGFncworICAgICAgICAgICAgICAgICAsc291cmNlLWRpcikpKQorICAgIChta2RpciBidWls ZC1kaXIpCisgICAgKGNoZGlyIGJ1aWxkLWRpcikKKyAgICAoemVybz8gKGFwcGx5IHN5c3RlbSog Im1lc29uIiBhcmdzKSkpKQorCisoZGVmaW5lKiAoYnVpbGQgIzprZXkgcGFyYWxsZWwtYnVpbGQ/ CisgICAgICAgICAgICAgICAgIzphbGxvdy1vdGhlci1rZXlzKQorICAiQnVpbGQgYSBnaXZlbiBt ZXNvbiBwYWNrYWdlLiIKKyAgKHplcm8/IChhcHBseSBzeXN0ZW0qICJuaW5qYSIKKyAgICAgICAg ICAgICAgICAoaWYgcGFyYWxsZWwtYnVpbGQ/CisgICAgICAgICAgICAgICAgICAgIGAoIi1qIiAs KG51bWJlci0+c3RyaW5nIChwYXJhbGxlbC1qb2ItY291bnQpKSkKKyAgICAgICAgICAgICAgICAg ICAgJygiLWoiICIxIikpKSkpCisKKyhkZWZpbmUqIChjaGVjayAjOmtleSB0ZXN0LXRhcmdldCBw YXJhbGxlbC10ZXN0cz8gdGVzdHM/CisgICAgICAgICAgICAgICAgIzphbGxvdy1vdGhlci1rZXlz KQorICAodW5sZXNzIHBhcmFsbGVsLXRlc3RzPworICAgIChzZXRlbnYgIk1FU09OX1RFU1RUSFJF QURTIiAiMSIpKQorICAoaWYgdGVzdHM/CisgICAgICAoemVybz8gKHN5c3RlbSogIm5pbmphIiB0 ZXN0LXRhcmdldCkpCisgICAgICAoYmVnaW4KKyAgICAgICAgKGZvcm1hdCAjdCAidGVzdCBzdWl0 ZSBub3QgcnVufiUiKQorICAgICAgICAjdCkpKQorCisoZGVmaW5lKiAoaW5zdGFsbCAjOnJlc3Qg YXJncykKKyAgKHplcm8/IChzeXN0ZW0qICJuaW5qYSIgImluc3RhbGwiKSkpCisKKyhkZWZpbmUq IChmaXgtcnVucGF0aCAjOmtleSAoZWxmLWRpcmVjdG9yaWVzICcoImxpYiIgImxpYjY0IiAibGli ZXhlYyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJp biIgInNiaW4iKSkKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRzICM6YWxsb3ctb3RoZXIt a2V5cykKKyAgIlRyeSB0byBtYWtlIHN1cmUgYWxsIEVMRiBmaWxlcyBpbiBFTEYtRElSRUNUT1JJ RVMgYXJlIGFibGUgdG8gZmluZCB0aGVpcgorbG9jYWwgZGVwZW5kZW5jaWVzIGluIHRoZWlyIFJV TlBBVEgsIGJ5IHNlYXJjaGluZyBmb3IgdGhlIG5lZWRlZCBsaWJyYXJpZXMgaW4KK3RoZSBkaXJl Y3RvcmllcyBvZiB0aGUgcGFja2FnZSwgYW5kIGFkZGluZyB0aGVtIHRvIHRoZSBSVU5QQVRIIGlm IG5lZWRlZC4KK0Fsc28gc2hyaW5rIHRoZSBSVU5QQVRIIHRvIHdoYXQgaXMgbmVlZGVkLAorc2lu Y2UgYSBsb3Qgb2YgZGlyZWN0b3JpZXMgYXJlIGxlZnQgb3ZlciBmcm9tIHRoZSBidWlsZCBwaGFz ZSBvZiBtZXNvbiwKK2ZvciBleGFtcGxlIGxpYnJhcmllcyBvbmx5IG5lZWRlZCBmb3IgdGhlIHRl c3RzLiIKKworICA7OyBGaW5kIHRoZSBkaXJlY3RvcmllcyAoaWYgYW55KSB0aGF0IGNvbnRhaW5z IERFUC1OQU1FLiAgVGhlIGRpcmVjdG9yaWVzCisgIDs7IHNlYXJjaGVkIGFyZSB0aGUgb25lcyB0 aGF0IEVMRi1GSUxFUyBhcmUgaW4uCisgIChkZWZpbmUgKGZpbmQtZGVwcyBkZXAtbmFtZSBlbGYt ZmlsZXMpCisgICAgKG1hcCBkaXJuYW1lIChmaWx0ZXIgKGxhbWJkYSAoZmlsZSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzdHJpbmc9PyBkZXAtbmFtZSAoYmFzZW5hbWUgZmlsZSkpKQor ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZi1maWxlcykpKQorCisgIDs7IFJldHVybiBhIGxp c3Qgb2YgbGlicmFyaWVzIHRoYXQgRklMRSBuZWVkcy4KKyAgKGRlZmluZSAoZmlsZS1uZWVkZWQg ZmlsZSkKKyAgICAobGV0KiAoKGVsZiAoY2FsbC13aXRoLWlucHV0LWZpbGUgZmlsZQorICAgICAg ICAgICAgICAgICAgKGNvbXBvc2UgcGFyc2UtZWxmIGdldC1ieXRldmVjdG9yLWFsbCkpKQorICAg ICAgICAgICAoZHluaW5mbyAoZWxmLWR5bmFtaWMtaW5mbyBlbGYpKSkKKyAgICAgIChpZiBkeW5p bmZvCisgICAgICAgICAgKGVsZi1keW5hbWljLWluZm8tbmVlZGVkIGR5bmluZm8pCisgICAgICAg ICAgJygpKSkpCisKKworICA7OyBJZiBGSUxFIG5lZWRzIGFueSBsaWJzIHRoYXQgYXJlIHBhcnQg b2YgRUxGLUZJTEVTLCB0aGUgUlVOUEFUSAorICA7OyBpcyBtb2RpZmllZCBhY2NvcmRpbmdseS4K KyAgKGRlZmluZSAoaGFuZGxlLWZpbGUgZmlsZSBlbGYtZmlsZXMpCisgICAgKGxldCogKChkZXAt ZGlycyAoY29uY2F0ZW5hdGUgKG1hcCAobGFtYmRhIChkZXAtbmFtZSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbmQtZGVwcyBkZXAtbmFtZSBlbGYtZmlsZXMp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtbmVlZGVkIGZp bGUpKSkpKQorICAgICAgKHVubGVzcyAobnVsbD8gZGVwLWRpcnMpCisgICAgICAgIChhdWdtZW50 LXJwYXRoIGZpbGUgKHN0cmluZy1qb2luIGRlcC1kaXJzICI6IikpKSkpCisKKyAgKGRlZmluZSBo YW5kbGUtb3V0cHV0CisgICAgKG1hdGNoLWxhbWJkYQorICAgICAgKChvdXRwdXQgLiBkaXJlY3Rv cnkpCisgICAgICAgKGxldCogKChlbGYtZGlybmFtZXMgKG1hcCAobGFtYmRhIChzdWJkaXIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGRpcmVjdG9y eSAiLyIgc3ViZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZi1kaXJl Y3RvcmllcykpCisgICAgICAgICAgICAgIChleGNpc3RpbmctZWxmLWRpcnMgKGZpbHRlciAobGFt YmRhIChkaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChh bmQgKGZpbGUtZXhpc3RzPyBkaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGZpbGUtaXMtZGlyZWN0b3J5PyBkaXIpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZi1kaXJuYW1lcykpCisgICAgICAgICAgICAg IChlbGYtcHJlZCAobGFtYmRhIChuYW1lIHN0YXQpCisgICAgICAgICAgICAgICAgICAgICAgICAg IChlbGYtZmlsZT8gbmFtZSkpKQorICAgICAgICAgICAgICAoZWxmLWxpc3QgKGNvbmNhdGVuYXRl IChtYXAgKGxhbWJkYSAoZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZmluZC1maWxlcyBkaXIgZWxmLXByZWQpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXhjaXN0aW5nLWVsZi1kaXJzKSkpKQorICAgICAgICAgKGZv ci1lYWNoIChsYW1iZGEgKGVsZi1maWxlKQorICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbSog InBhdGNoZWxmIiAiLS1zaHJpbmstcnBhdGgiIGVsZi1maWxlKQorICAgICAgICAgICAgICAgICAg ICAgKGhhbmRsZS1maWxlIGVsZi1maWxlIGVsZi1saXN0KSkKKyAgICAgICAgICAgICAgICAgICBl bGYtbGlzdCkpKSkpCisgIChmb3ItZWFjaCBoYW5kbGUtb3V0cHV0IG91dHB1dHMpCisgICN0KQor CisoZGVmaW5lICVzdGFuZGFyZC1waGFzZXMKKyAgOzsgVGhlIHN0YW5kYXJkLXBoYXNlcyBvZiBn bGliLW9yLWd0ayBjb250YWlucyBhIHN1cGVyc2V0IG9mIHRoZSBwaGFzZXMKKyAgOzsgZnJvbSB0 aGUgZ251LWJ1aWxkLXN5c3RlbS4gIElmIHRoZSBnbGliLW9yLWd0az8ga2V5IGlzICNmICh0aGUg ZGVmYXVsdCkKKyAgOzsgdGhlbiB0aGUgZXh0cmEgcGhhc2VzIHdpbGwgYmUgcmVtb3ZlZCBhZ2Fp biBpbiAoZ3VpeCBidWlsZC1zeXN0ZW0gbWVzb24pLgorICAobW9kaWZ5LXBoYXNlcyBnbGliLW9y LWd0azolc3RhbmRhcmQtcGhhc2VzCisgICAgKHJlcGxhY2UgJ2NvbmZpZ3VyZSBjb25maWd1cmUp CisgICAgKHJlcGxhY2UgJ2J1aWxkIGJ1aWxkKQorICAgIChyZXBsYWNlICdjaGVjayBjaGVjaykK KyAgICAocmVwbGFjZSAnaW5zdGFsbCBpbnN0YWxsKQorICAgIChhZGQtYWZ0ZXIgJ3N0cmlwICdm aXgtcnVucGF0aCBmaXgtcnVucGF0aCkpKQorCisoZGVmaW5lKiAobWVzb24tYnVpbGQgIzprZXkg aW5wdXRzIHBoYXNlcworICAgICAgICAgICAgICAgICAgICAgICM6YWxsb3ctb3RoZXIta2V5cyAj OnJlc3QgYXJncykKKyAgIkJ1aWxkIHRoZSBnaXZlbiBwYWNrYWdlLCBhcHBseWluZyBhbGwgb2Yg UEhBU0VTIGluIG9yZGVyLiIKKyAgKGFwcGx5IGdudTpnbnUtYnVpbGQgIzppbnB1dHMgaW5wdXRz ICM6cGhhc2VzIHBoYXNlcyBhcmdzKSkKKworOzs7IG1lc29uLWJ1aWxkLXN5c3RlbS5zY20gZW5k cyBoZXJlCi0tIAoyLjE0LjEKCg== --001a113ff5e809b97d05594c8833--