Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgVON-00ERdO-1I for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 22:00:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vgVOM-001Um3-1T for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 22:00:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgVOL-001Ulv-2P for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 22:00:34 +0000 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgTqZ-000clN-2P for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 20:21:38 +0000 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-40438a46d7cso640502fac.2 for ; Thu, 15 Jan 2026 12:21:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768508496; x=1769113296; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=kut7BwmSdCJVTkZsEtWknB3HWUJKX62+EbQHGaE83U0=; b=YHCJ1pwCZuLceWabirk86KjMAyX3MDpt2oVHFVwoqAj+z7Zm+iIIpaV2vAV7FkAbzd rPsoib7Jtl0c1cgNirElIC70vKuO/7GPsXdCYEBu0gvXwvvNJtljPo8XvpfuAY9TbDF4 xdO2UsiE4QX9O12io25+AsPQbf8yQklxbaPEL/NeYuVThrvHb50VMvP/TzSAaw1V/Weo 6YRHPnwx/W13RRxyTL3/zNvs2MK3MND4LxpsLkbpJUE/wHosjf6EbR1uvU1vtYnF8KpQ FDROlZe5RrugPG3h9Wzy8oMIP5wcgOf2YJhfeJSVNQQpmg72x1isxmgArAjhwlWQsuNc fHgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768508496; x=1769113296; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=kut7BwmSdCJVTkZsEtWknB3HWUJKX62+EbQHGaE83U0=; b=swplhdIgwoRuT7Kde009KVN1lHlbK5FyRS8LlPrEyIfdfGZPIQgI2F+q9eZ7WB43j5 BviStEh4J58EKjzrz1PHqSb5e9et1Zjy/QvLhF9ykEUVIZYf1EHUc0SuD0PrOlXdKxtE 6691SjiGFVdpWB9UBNy6/p+a3vkYewNWYYH40n+DgmhqSb0wzi1lC01sHJBBpQ5aExbB bvHa9bOOCWvdVVvRm8TOrmlriA5589OWef8Xp/bJtg2tODcqziNG5qRSlfw9X85bdNRd BGEt8/NoCVsJTaqvqMIZ8ulDxVXD1ZOO8s2y3rMdH/Ru5Welu3vWQJ9X6kLaf7bYYNaG ukCQ== X-Forwarded-Encrypted: i=1; AJvYcCVEZD5bH/aXGmZP2WejcSFSch7go/+9EXsHSX+FDNnnuiGa/ySfHzL7sSSrrv0tcw0P2yu7fou+H1kTt1iw@lists.postgresql.org X-Gm-Message-State: AOJu0YykNAgk6AsEWAuvRwnTXw1lREI9ja1XehVSMLfbCUnhHGcwL72Q 4KPolOyzq838c1g/CSkdQgK0EsP9nRjsKrJWwTcmYN9fdV5X3xm80lDK6SgWL0LCy2KqRcSacYg 3EraBnDeJq26j3/MAmz0aiATgTd/MlRg= X-Gm-Gg: AY/fxX4tNWrCD686KM39F8aZyqI+BWLMCDmvDhmx4cTwoR6TxDTFVqD+Bt1lw1P1b4O OrCnD05psp3fabMRAWRis2wWbNYxWaC3Q8SsquuBN+vjQgeEQK6MuS27Ly2Em7bmURsyf+YNZUn F7jEtyi85fV+urXHPMuf1VD6TYLG5+M1ldwYPZuFEEZyOcQ3bs9zXpZtKz9z7MLoitYTr6COYYf i1q9m6+g8HIEgXKTjd+pISLSkXbyeSxbwWYE8rt5Sl7ttJjutcoi33f3hdiCNOth7hBQj5+r3ca nXCv8443TY/kM534k7pflbXG451Q/fEbNqX55A== X-Received: by 2002:a4a:e911:0:b0:65c:fc52:c347 with SMTP id 006d021491bc7-661188cc076mr230519eaf.14.1768508495710; Thu, 15 Jan 2026 12:21:35 -0800 (PST) MIME-Version: 1.0 References: <58FB2F62-66DD-495E-83A6-607903834272@gmail.com> In-Reply-To: <58FB2F62-66DD-495E-83A6-607903834272@gmail.com> From: Corey Huinker Date: Thu, 15 Jan 2026 15:21:23 -0500 X-Gm-Features: AZwV_QgKIMmFO_j9NtmPqS3eXQEQ84n9P3xVJnD3I-iGBRROabQ7Jmhk9HifKJc Message-ID: Subject: Re: Extended Statistics set/restore/clear functions. To: Chao Li Cc: Michael Paquier , Tender Wang , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ab65de064872f8d4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ab65de064872f8d4 Content-Type: multipart/alternative; boundary="000000000000ab65dc064872f8d2" --000000000000ab65dc064872f8d2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > > > Here are some comments for v24: > > 1. > ``` > + inherited =3D PG_GETARG_NAME(INHERITED_ARG); > ``` > > Should this use PG_GETARG_BOOL()? > Yes. I'm curious why the compiler didn't catch that. > > 2 > ``` > proparallel =3D> 'u', prorettype =3D> 'void', proargtypes =3D> 'text te= xt text > text bool=E2=80=99, > ``` > > Should we define proargtypes as =E2=80=9Cname name name name bool=E2=80= =9D? As the doc > change mentions type =E2=80=9Cname=E2=80=9D for the first 4 parameters. M= aybe you want to > avoid that because Name is a structure. Anyway, I don=E2=80=99t have a st= rong > opinion here. > The existing pg_restore_relation_stats() and pg_restore_attribute_stats() use the text type for both parameters. This was done mostly to avoid typecasts that could potentially fail in a pg_restore script, and partly to make things easier on someone writing the function call. The -clear variants of those functions followed the same convention of text type for those paramers, and so this is just doing the same. > > 3 - extended_stats_funcs.c > ``` > * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group > ``` > > This is a brand new file, so the copyright year should be just 2026. If > you search for =E2=80=9C2025-2026=E2=80=9D, you will get a bunch of files= , they should be > created in 2025. > That may have been done because some of the code that will end up here is being moved from other files rather than being purely new. My revised patch is leaving it as-is for now. > > 4 - Given comment 1, no test fails. I think that=E2=80=99s because all te= st cases > use inherited =3D false. Maybe we need a test case for inherited =3D true= . > Added. In addition to issues 1 and 4 I added some inheritance-specific tests per Paquier's off-list request, and the result is attached. --000000000000ab65dc064872f8d2 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Here are some comments for v24:

1.
```
+=C2=A0 =C2=A0 =C2=A0 =C2=A0inherited =3D PG_GETARG_NAME(INHERITED_ARG); ```

Should this use PG_GETARG_BOOL()?

Yes. = I'm curious why the compiler didn't catch that.

=C2=A0

2
```
=C2=A0 proparallel =3D> 'u', prorettype =3D> 'void', = proargtypes =3D> 'text text text text bool=E2=80=99,
```

Should we define proargtypes as =E2=80=9Cname name name name bool=E2=80=9D?= As the doc change mentions type =E2=80=9Cname=E2=80=9D for the first 4 par= ameters. Maybe you want to avoid that because Name is a structure. Anyway, = I don=E2=80=99t have a strong opinion here.

=
The existing pg_restore_relation_stats() and pg_restore_attribute_stat= s() use the text type for both parameters. This was done mostly to avoid ty= pecasts that could potentially fail in a pg_restore script, and partly to m= ake things easier on someone writing the function call.=C2=A0 The -clear va= riants of those functions followed the same convention of text type for tho= se paramers, and so this is just doing the same.
=C2= =A0

3 - extended_stats_funcs.c
```
=C2=A0* Portions Copyright (c) 1996-2026, PostgreSQL Global Development Gro= up
```

This is a brand new file, so the copyright year should be just 2026. If you= search for =E2=80=9C2025-2026=E2=80=9D, you will get a bunch of files, the= y should be created in 2025.

That may h= ave been done because some of the code that will end up here is being moved= from other files rather than being purely new. My revised patch is leaving= it as-is for now.
=C2=A0

4 - Given comment 1, no test fails. I think that=E2=80=99s because all test= cases use inherited =3D false. Maybe we need a test case for inherited =3D= true.

Added.

In add= ition to issues 1 and 4 I added some inheritance-specific tests per Paquier= 's off-list request, and the result is attached.
--000000000000ab65dc064872f8d2-- --000000000000ab65de064872f8d4 Content-Type: text/x-patch; charset="US-ASCII"; name="v25-0001-Add-pg_clear_extended_stats.patch" Content-Disposition: attachment; filename="v25-0001-Add-pg_clear_extended_stats.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkfumjyy0 RnJvbSAxNmNlNjIwNWJjZTFhMDk2NDA1MTRlY2QzZWFkOGFmZjM4M2QxZDIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIFBhcXVpZXIgPG1pY2hhZWxAcGFxdWllci54eXo+ CkRhdGU6IFRodSwgMTUgSmFuIDIwMjYgMTY6NTk6MTggKzA5MDAKU3ViamVjdDogW1BBVENIIHYy NV0gQWRkIHBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzKCkKClRoaXMgZnVuY3Rpb24gaXMgYWJsZSB0 byBjbGVhciB0aGUgZGF0YSBhc3NvY2lhdGVkIHRvIGFuIGV4dGVuZGVkCnN0YXRpc3RpY3Mgb2Jq ZWN0LCBtYWtpbmcgdGhpbmdzIHNvIGFzIHRoZSBvYmplY3QgbG9va3MgYXMKbmV3bHktY3JlYXRl ZC4KClRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBuZWVkcyB0aGUgZm9sbG93aW5nIGFyZ3Vt ZW50cyBmb3IgdGhlIHN0YXRzCmNsZWFyZWQ6Ci0gVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uLgot IFRoZSBzY2hlbWEgbmFtZSBvZiB0aGUgcmVsYXRpb24uCi0gVGhlIG5hbWUgb2YgdGhlIGV4dGVu ZGVkIHN0YXRzIG9iamVjdC4KLSBUaGUgc2NoZW1hIG5hbWUgb2YgdGhlIGV4dGVuZGVkIHN0YXRz IG9iamVjdC4KClRoZSBmaXJzdCB0d28gcGFyYW1ldGVycyBhcmUgZXNwZWNpYWxseSBpbXBvcnRh bnQgdG8gZW5zdXJlIGEgY29uc2lzdGVudApsb29rdXAgYXQgdGhlIHJlbGF0aW9uIHdlIGV4cGVj dCB0byBmaW5kIGZvciB0aGUgc3RhdHMgb2JqZWN0LCByZWx5aW5nCm9uIGEgUmFuZ2VWYXIgbG9v a3VwIHdoZXJlIEFDTCBhcmUgY2hlY2tzIHdpdGhvdXQgbG9ja2luZyBhIHJlbGF0aW9uLApjcml0 aWNhbCB0byBwcmV2ZW50IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3Mgd2hlbiB1c2luZyB0aGlz IGZ1bmN0aW9uLgpUaGUgdGhpcmQgYW5kIGZvdXJ0aCBwYXJhbWV0ZXJzIGFyZSBpbXBvcnRhbnQg YXMgYSBzdGF0cyBvYmplY3QgbWF5IGJlCm9uIGEgZGlmZmVyZW50IHNjaGVtYSB0aGFuIGl0cyBy ZWxhdGlvbi4KClRoaXMgaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20gYSBsYXJnZXIgcGF0Y2ggYnkg dGhlIHNhbWUgYXV0aG9yLCBmb3IgYQpwaWVjZSB3aGljaCBpcyBhZ2FpbiB1c2VmdWwgb24gaXRz IG93bi4gIEkgaGF2ZSByZXdyaXR0ZW4gbGFyZ2UgcG9ydGlvbnMKb2YgaXQuCgpYWFg6IEJ1bXAg Y2F0YWxvZyB2ZXJzaW9uLgoKQXV0aG9yOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdt YWlsLmNvbT4KQ28tYXV0aG9yZWQtYnk6IE1pY2hhZWwgUGFxdWllciA8bWljaGFlbEBwYXF1aWVy Lnh5ej4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQURrTE09ZHB6M0tGbnFQLWRn Si16dlJ2dGpzYThVWnY4d0RBUWRxaG89cU4za1gwWmdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDcgKwogc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfZnVuY3MuYyB8IDIzMiArKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAg MSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQgICAgfCAyMDEg KysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19pbXBvcnQuc3FsICAg ICAgICAgfCAxMzEgKysrKysrKysrKwogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21s ICAgICAgICAgICAgIHwgIDI5ICsrKwogNyBmaWxlcyBjaGFuZ2VkLCA2MDIgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3Rh dHNfZnVuY3MuYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDJhYzY5YmYyZGY1Li44OTRi NmExYjZkNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjYxOCw2ICsxMjYxOCwxMyBA QAogICBwcm9uYW1lID0+ICdnaXN0X3RyYW5zbGF0ZV9jbXB0eXBlX2NvbW1vbicsIHByb3JldHR5 cGUgPT4gJ2ludDInLAogICBwcm9hcmd0eXBlcyA9PiAnaW50NCcsIHByb3NyYyA9PiAnZ2lzdF90 cmFuc2xhdGVfY21wdHlwZV9jb21tb24nIH0sCiAKKyMgRXh0ZW5kZWQgU3RhdGlzdGljcyBmdW5j dGlvbnMKK3sgb2lkID0+ICc5OTQ4JywgZGVzY3IgPT4gJ2NsZWFyIHN0YXRpc3RpY3Mgb24gZXh0 ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QnLAorICBwcm9uYW1lID0+ICdwZ19jbGVhcl9leHRlbmRl ZF9zdGF0cycsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvdm9sYXRpbGUgPT4gJ3YnLAorICBwcm9w YXJhbGxlbCA9PiAndScsIHByb3JldHR5cGUgPT4gJ3ZvaWQnLCBwcm9hcmd0eXBlcyA9PiAndGV4 dCB0ZXh0IHRleHQgdGV4dCBib29sJywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzY2hlbWFuYW1lLHJl bG5hbWUsc3RhdGlzdGljc19zY2hlbWFuYW1lLHN0YXRpc3RpY3NfbmFtZSxpbmhlcml0ZWR9JywK KyAgcHJvc3JjID0+ICdwZ19jbGVhcl9leHRlbmRlZF9zdGF0cycgfSwKKwogIyBBSU8gcmVsYXRl ZCBmdW5jdGlvbnMKIHsgb2lkID0+ICc2Mzk5JywgZGVzY3IgPT4gJ2luZm9ybWF0aW9uIGFib3V0 IGluLXByb2dyZXNzIGFzeW5jaHJvbm91cyBJT3MnLAogICBwcm9uYW1lID0+ICdwZ19nZXRfYWlv cycsIHByb3Jvd3MgPT4gJzEwMCcsIHByb3JldHNldCA9PiAndCcsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9NYWtl ZmlsZQppbmRleCA0NjcyYmQ5MGYyMi4uN2ZmNTkzOGIwMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0YXRpc3RpY3MvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9NYWtl ZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBPQkpTID0gXAogCWF0dHJpYnV0ZV9zdGF0cy5vIFwKIAlk ZXBlbmRlbmNpZXMubyBcCiAJZXh0ZW5kZWRfc3RhdHMubyBcCisJZXh0ZW5kZWRfc3RhdHNfZnVu Y3MubyBcCiAJbWN2Lm8gXAogCW12ZGlzdGluY3QubyBcCiAJcmVsYXRpb25fc3RhdHMubyBcCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2Z1bmNzLmMg Yi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2Z1bmNzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhlOGJmNWZjYTVmCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19mdW5jcy5jCkBAIC0w LDAgKzEsMjMyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBleHRlbmRlZF9zdGF0c19m dW5jcy5jCisgKgkgIEZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGV4dGVuZGVkIHN0YXRpc3Rp Y3MuCisgKgorICogVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBzZXQgb2YgZmFjaWxpdGllcyByZXF1 aXJlZCB0byBzdXBwb3J0IHRoZSBkaXJlY3QKKyAqIG1hbmlwdWxhdGlvbnMgb2YgZXh0ZW5kZWQg c3RhdGlzdGljcyBvYmplY3RzLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEK KyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVu ZGVkX3N0YXRzX2Z1bmNzLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9pbmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGlj X2V4dC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dF9kYXRhLmgiCisjaW5j bHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVk ZSAic3RhdGlzdGljcy9zdGF0X3V0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisK KworLyoKKyAqIEluZGV4IG9mIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBTUUwgZnVuY3Rpb25zLgor ICovCitlbnVtIGV4dGVuZGVkX3N0YXRzX2FyZ251bQoreworCVJFTFNDSEVNQV9BUkcgPSAwLAor CVJFTE5BTUVfQVJHLAorCVNUQVRTQ0hFTUFfQVJHLAorCVNUQVROQU1FX0FSRywKKwlJTkhFUklU RURfQVJHLAorCU5VTV9FWFRFTkRFRF9TVEFUU19BUkdTLAorfTsKKworLyoKKyAqIFRoZSBhcmd1 bWVudCBuYW1lcyBhbmQgdHlwZSBPSURzIG9mIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBTUUwKKyAq IGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gZXh0YXJnaW5mb1td ID0KK3sKKwlbUkVMU0NIRU1BX0FSR10gPSB7InNjaGVtYW5hbWUiLCBURVhUT0lEfSwKKwlbUkVM TkFNRV9BUkddID0geyJyZWxuYW1lIiwgVEVYVE9JRH0sCisJW1NUQVRTQ0hFTUFfQVJHXSA9IHsi c3RhdGlzdGljc19zY2hlbWFuYW1lIiwgVEVYVE9JRH0sCisJW1NUQVROQU1FX0FSR10gPSB7InN0 YXRpc3RpY3NfbmFtZSIsIFRFWFRPSUR9LAorCVtJTkhFUklURURfQVJHXSA9IHsiaW5oZXJpdGVk IiwgQk9PTE9JRH0sCisJW05VTV9FWFRFTkRFRF9TVEFUU19BUkdTXSA9IHswfSwKK307CisKK3N0 YXRpYyBIZWFwVHVwbGUgZ2V0X3BnX3N0YXRpc3RpY19leHQoUmVsYXRpb24gcGdfc3RleHQsIE9p ZCBuc3BvaWQsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnN0eG5hbWUpOworc3RhdGljIGJvb2wg ZGVsZXRlX3BnX3N0YXRpc3RpY19leHRfZGF0YShPaWQgc3R4b2lkLCBib29sIGluaGVyaXRlZCk7 CisKKy8qCisgKiBGZXRjaCBhIHBnX3N0YXRpc3RpY19leHQgcm93IGJ5IG5hbWUgYW5kIG5hbWVz cGFjZSBPSUQuCisgKi8KK3N0YXRpYyBIZWFwVHVwbGUKK2dldF9wZ19zdGF0aXN0aWNfZXh0KFJl bGF0aW9uIHBnX3N0ZXh0LCBPaWQgbnNwb2lkLCBjb25zdCBjaGFyICpzdHhuYW1lKQoreworCVNj YW5LZXlEYXRhIGtleVsyXTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisJ T2lkCQkJc3R4b2lkID0gSW52YWxpZE9pZDsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJ QW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eG5hbWUsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LAorCQkJCUZfTkFNRUVRLAorCQkJCUNTdHJpbmdHZXREYXR1bShzdHhuYW1lKSk7CisJU2Nhbktl eUluaXQoJmtleVsxXSwKKwkJCQlBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4bmFtZXNwYWNlLAor CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJCQlGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0obnNwb2lkKSk7CisKKwkvKgorCSAqIFRyeSB0byBmaW5kIG1hdGNoaW5nIHBnX3N0YXRp c3RpY19leHQgcm93LgorCSAqLworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfc3RleHQs CisJCQkJCQkJICBTdGF0aXN0aWNFeHROYW1lSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsCisJCQkJ CQkJICBOVUxMLAorCQkJCQkJCSAgMiwKKwkJCQkJCQkgIGtleSk7CisKKwkvKiBMb29rdXAgaXMg YmFzZWQgb24gYSB1bmlxdWUgaW5kZXgsIHNvIHdlIGdldCBlaXRoZXIgMCBvciAxIHR1cGxlLiAq LworCXR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisKKwlpZiAoSGVhcFR1cGxlSXNWYWxp ZCh0dXApKQorCQlzdHhvaWQgPSAoKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHR1 cCkpLT5vaWQ7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCisJaWYgKCFPaWRJc1ZhbGlk KHN0eG9pZCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIFNlYXJjaFN5c0NhY2hlQ29weTEo U1RBVEVYVE9JRCwgT2JqZWN0SWRHZXREYXR1bShzdHhvaWQpKTsKK30KKworLyoKKyAqIFJlbW92 ZSBhbiBleGlzdGluZyBwZ19zdGF0aXN0aWNfZXh0X2RhdGEgcm93IGZvciBhIGdpdmVuIHBnX3N0 YXRpc3RpY19leHQKKyAqIHJvdyBhbmQgImluaGVyaXRlZCIgcGFpci4KKyAqLworc3RhdGljIGJv b2wKK2RlbGV0ZV9wZ19zdGF0aXN0aWNfZXh0X2RhdGEoT2lkIHN0eG9pZCwgYm9vbCBpbmhlcml0 ZWQpCit7CisJUmVsYXRpb24Jc2VkID0gdGFibGVfb3BlbihTdGF0aXN0aWNFeHREYXRhUmVsYXRp b25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJSGVhcFR1cGxlCW9sZHR1cDsKKwlib29sCQlyZXN1 bHQgPSBmYWxzZTsKKworCS8qIElzIHRoZXJlIGFscmVhZHkgYSBwZ19zdGF0aXN0aWMgdHVwbGUg Zm9yIHRoaXMgYXR0cmlidXRlPyAqLworCW9sZHR1cCA9IFNlYXJjaFN5c0NhY2hlMihTVEFURVhU REFUQVNUWE9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShzdHhvaWQpLAorCQkJCQkJCSBC b29sR2V0RGF0dW0oaW5oZXJpdGVkKSk7CisKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZChvbGR0dXAp KQorCXsKKwkJQ2F0YWxvZ1R1cGxlRGVsZXRlKHNlZCwgJm9sZHR1cC0+dF9zZWxmKTsKKwkJUmVs ZWFzZVN5c0NhY2hlKG9sZHR1cCk7CisJCXJlc3VsdCA9IHRydWU7CisJfQorCisJdGFibGVfY2xv c2Uoc2VkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogRGVsZXRlIHN0YXRpc3RpY3MgZm9yIHRo ZSBnaXZlbiBzdGF0aXN0aWNzIG9iamVjdC4KKyAqLworRGF0dW0KK3BnX2NsZWFyX2V4dGVuZGVk X3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqcmVsbnNwbmFtZTsKKwljaGFy CSAgICpyZWxuYW1lOworCWNoYXIJICAgKm5zcG5hbWU7CisJT2lkCQkJbnNwb2lkOworCU9pZAkJ CXJlbGlkOworCWNoYXIJICAgKnN0eG5hbWU7CisJYm9vbAkJaW5oZXJpdGVkOworCVJlbGF0aW9u CXBnX3N0ZXh0OworCUhlYXBUdXBsZQl0dXA7CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0eGZv cm07CisJT2lkCQkJbG9ja2VkX3RhYmxlID0gSW52YWxpZE9pZDsKKworCS8qIHJlbGF0aW9uIGFy Z3VtZW50cyAqLworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8s IFJFTFNDSEVNQV9BUkcpOworCXJlbG5zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dF VEFSR19EQVRVTShSRUxTQ0hFTUFfQVJHKSk7CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZj aW5mbywgZXh0YXJnaW5mbywgUkVMTkFNRV9BUkcpOworCXJlbG5hbWUgPSBUZXh0RGF0dW1HZXRD U3RyaW5nKFBHX0dFVEFSR19EQVRVTShSRUxOQU1FX0FSRykpOworCisJLyogZXh0ZW5kZWQgc3Rh dGlzdGljcyBhcmd1bWVudHMgKi8KKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBl eHRhcmdpbmZvLCBTVEFUU0NIRU1BX0FSRyk7CisJbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJp bmcoUEdfR0VUQVJHX0RBVFVNKFNUQVRTQ0hFTUFfQVJHKSk7CisJc3RhdHNfY2hlY2tfcmVxdWly ZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgU1RBVE5BTUVfQVJHKTsKKwlzdHhuYW1lID0gVGV4 dERhdHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oU1RBVE5BTUVfQVJHKSk7CisJc3RhdHNf Y2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgSU5IRVJJVEVEX0FSRyk7CisJ aW5oZXJpdGVkID0gUEdfR0VUQVJHX0JPT0woSU5IRVJJVEVEX0FSRyk7CisKKwlpZiAoUmVjb3Zl cnlJblByb2dyZXNzKCkpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJZXJyY29kZShFUlJD T0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQllcnJtc2coInJlY292 ZXJ5IGlzIGluIHByb2dyZXNzIiksCisJCQkJZXJyaGludCgiU3RhdGlzdGljcyBjYW5ub3QgYmUg bW9kaWZpZWQgZHVyaW5nIHJlY292ZXJ5LiIpKTsKKwkJUEdfUkVUVVJOX1ZPSUQoKTsKKwl9CisK KwkvKgorCSAqIEZpcnN0IG9wZW4gdGhlIHJlbGF0aW9uIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5k IHRoZSBzdGF0aXN0aWNzLiAgVGhpcworCSAqIGlzIHNpbWlsYXIgdG8gcmVsYXRpb24gYW5kIGF0 dHJpYnV0ZSBzdGF0aXN0aWNzLCBzbyBhcyBBQ0wgY2hlY2tzIGFyZQorCSAqIGRvbmUgYmVmb3Jl IGFueSBsb2NrcyBhcmUgdGFrZW4sIGV2ZW4gYmVmb3JlIGFueSBhdHRlbXB0cyByZWxhdGVkIHRv CisJICogdGhlIGV4dGVuZGVkIHN0YXRzIG9iamVjdC4KKwkgKi8KKwlyZWxpZCA9IFJhbmdlVmFy R2V0UmVsaWRFeHRlbmRlZChtYWtlUmFuZ2VWYXIocmVsbnNwbmFtZSwgcmVsbmFtZSwgLTEpLAor CQkJCQkJCQkJIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywgMCwKKwkJCQkJCQkJCSBSYW5nZVZh ckNhbGxiYWNrRm9yU3RhdHMsICZsb2NrZWRfdGFibGUpOworCisJLyogTm93IGNoZWNrIGlmIHRo ZSBuYW1lc3BhY2Ugb2YgdGhlIHN0YXRzIG9iamVjdCBleGlzdHMuICovCisJbnNwb2lkID0gZ2V0 X25hbWVzcGFjZV9vaWQobnNwbmFtZSwgdHJ1ZSk7CisJaWYgKG5zcG9pZCA9PSBJbnZhbGlkT2lk KQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklORURf T0JKRUNUKSwKKwkJCQllcnJtc2coImNvdWxkIG5vdCBmaW5kIHNjaGVtYSBcIiVzXCIiLCBuc3Bu YW1lKSk7CisJCVBHX1JFVFVSTl9WT0lEKCk7CisJfQorCisJcGdfc3RleHQgPSB0YWJsZV9vcGVu KFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXR1cCA9IGdldF9w Z19zdGF0aXN0aWNfZXh0KHBnX3N0ZXh0LCBuc3BvaWQsIHN0eG5hbWUpOworCisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHR1cCkpCisJeworCQl0YWJsZV9jbG9zZShwZ19zdGV4dCwgUm93RXhjbHVz aXZlTG9jayk7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX09CSkVDVCksCisJCQkJZXJybXNnKCJjb3VsZCBub3QgZmluZCBleHRlbmRlZCBzdGF0aXN0 aWNzIG9iamVjdCBcIiVzXCIuXCIlc1wiIiwKKwkJCQkJICAgbnNwbmFtZSwgc3R4bmFtZSkpOwor CQlQR19SRVRVUk5fVk9JRCgpOworCX0KKworCXN0eGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNf ZXh0KSBHRVRTVFJVQ1QodHVwKTsKKworCS8qCisJICogVGhpcyBzaG91bGQgYmUgY29uc2lzdGVu dCwgYmFzZWQgb24gdGhlIGxvY2sgdGFrZW4gb24gdGhlIHRhYmxlCisJICogd2hlbiB3ZSBzdGFy dGVkLgorCSAqLworCWlmIChzdHhmb3JtLT5zdHhyZWxpZCAhPSByZWxpZCkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuZGVkIHN0YXRzICV1OiBmb3VuZCByZWxh dGlvbiAldSBidXQgZXhwZWN0ZWQgJXUiLAorCQkJIHN0eGZvcm0tPm9pZCwgc3R4Zm9ybS0+c3R4 cmVsaWQsIHJlbGlkKTsKKworCWRlbGV0ZV9wZ19zdGF0aXN0aWNfZXh0X2RhdGEoc3R4Zm9ybS0+ b2lkLCBpbmhlcml0ZWQpOworCWhlYXBfZnJlZXR1cGxlKHR1cCk7CisKKwl0YWJsZV9jbG9zZShw Z19zdGV4dCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5k L3N0YXRpc3RpY3MvbWVzb24uYnVpbGQKaW5kZXggNWM4OWY4Njk4MTIuLjlhN2JmNTVlMzAxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9i YWNrZW5kL3N0YXRpc3RpY3MvbWVzb24uYnVpbGQKQEAgLTQsNiArNCw3IEBAIGJhY2tlbmRfc291 cmNlcyArPSBmaWxlcygKICAgJ2F0dHJpYnV0ZV9zdGF0cy5jJywKICAgJ2RlcGVuZGVuY2llcy5j JywKICAgJ2V4dGVuZGVkX3N0YXRzLmMnLAorICAnZXh0ZW5kZWRfc3RhdHNfZnVuY3MuYycsCiAg ICdtY3YuYycsCiAgICdtdmRpc3RpbmN0LmMnLAogICAncmVsYXRpb25fc3RhdHMuYycsCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQKaW5kZXggOThjZTdkYzI4NDEu LmE0NTE5ZmNlZTgxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz X2ltcG9ydC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQu b3V0CkBAIC0xMzIsOCArMTMyLDM1IEBAIENSRUFURSBUQUJMRSBzdGF0c19pbXBvcnQucGFydF9j aGlsZF8xCiAgIFBBUlRJVElPTiBPRiBzdGF0c19pbXBvcnQucGFydF9wYXJlbnQKICAgRk9SIFZB TFVFUyBGUk9NICgwKSBUTyAoMTApCiAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl KTsKKy0tIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB3ZSBoYXZlIGluaGVyaXRlZCA9IHRydWUgZXh0 ZW5kZWQgc3RhdHMKK0NSRUFURSBTVEFUSVNUSUNTIHN0YXRzX2ltcG9ydC5wYXJ0X3BhcmVudF9z dGF0CisgIE9OIGksIChpICUgMikKKyAgRlJPTSBzdGF0c19pbXBvcnQucGFydF9wYXJlbnQ7CiBD UkVBVEUgSU5ERVggcGFydF9wYXJlbnRfaSBPTiBzdGF0c19pbXBvcnQucGFydF9wYXJlbnQoaSk7 CitJTlNFUlQgSU5UTyBzdGF0c19pbXBvcnQucGFydF9wYXJlbnQKK1NFTEVDVCBnLmcKK0ZST00g Z2VuZXJhdGVfc2VyaWVzKDAsOSkgQVMgZyhnKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHN0YXRz X2ltcG9ydC5wYXJ0X3BhcmVudDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxMAorKDEgcm93KQor CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBzdGF0c19pbXBvcnQucGFydF9jaGlsZF8xOworIGNvdW50 IAorLS0tLS0tLQorICAgIDEwCisoMSByb3cpCisKIEFOQUxZWkUgc3RhdHNfaW1wb3J0LnBhcnRf cGFyZW50OworU0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHNfZXh0IEFTIGUKKyAgV0hFUkUg ZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JyBBTkQKKyAgZS5zdGF0aXN0 aWNzX25hbWUgPSAncGFydF9wYXJlbnRfc3RhdCcgQU5EIGUuaW5oZXJpdGVkID0gdHJ1ZTsKKyBj b3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCiBTRUxFQ1QgcmVscGFnZXMKIEZST00g cGdfY2xhc3MKIFdIRVJFIG9pZCA9ICdzdGF0c19pbXBvcnQucGFydF9wYXJlbnQnOjpyZWdjbGFz czsKQEAgLTEwODQsMTEgKzExMTEsMTcgQEAgU0VMRUNUIDMsICd0cmUnLCAoMywgMy4zLCAnVFJF JywgJzIwMDMtMDMtMDMnLCBOVUxMKTo6c3RhdHNfaW1wb3J0LmNvbXBsZXhfdHlwZSwKIFVOSU9O IEFMTAogU0VMRUNUIDQsICdmb3VyJywgTlVMTCwgaW50NHJhbmdlKDAsMTAwKSwgTlVMTDsKIENS RUFURSBJTkRFWCBpc19vZGQgT04gc3RhdHNfaW1wb3J0LnRlc3QoKChjb21wKS5hICUgMiA9IDEp KTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0YXRzX2ltcG9ydC50ZXN0X3N0YXQKKyAgT04gbmFtZSwg Y29tcCwgbG93ZXIoYXJhbmdlKSwgYXJyYXlfbGVuZ3RoKHRhZ3MsMSkKKyAgRlJPTSBzdGF0c19p bXBvcnQudGVzdDsKIC0tIEdlbmVyYXRlIHN0YXRpc3RpY3Mgb24gdGFibGUgd2l0aCBkYXRhCiBB TkFMWVpFIHN0YXRzX2ltcG9ydC50ZXN0OwogQ1JFQVRFIFRBQkxFIHN0YXRzX2ltcG9ydC50ZXN0 X2Nsb25lICggTElLRSBzdGF0c19pbXBvcnQudGVzdCApCiAgICAgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOwogQ1JFQVRFIElOREVYIGlzX29kZF9jbG9uZSBPTiBzdGF0c19pbXBv cnQudGVzdF9jbG9uZSgoKGNvbXApLmEgJSAyID0gMSkpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3Rh dHNfaW1wb3J0LnRlc3Rfc3RhdF9jbG9uZQorICBPTiBuYW1lLCBjb21wLCBsb3dlcihhcmFuZ2Up LCBhcnJheV9sZW5ndGgodGFncywxKQorICBGUk9NIHN0YXRzX2ltcG9ydC50ZXN0X2Nsb25lOwog LS0KIC0tIENvcHkgc3RhdHMgZnJvbSB0ZXN0IHRvIHRlc3RfY2xvbmUsIGFuZCBpc19vZGQgdG8g aXNfb2RkX2Nsb25lCiAtLQpAQCAtMTM0Miw2ICsxMzc1LDE3NCBAQCBBTkQgYXR0bmFtZSA9ICdp JzsKICgxIHJvdykKIAogRFJPUCBUQUJMRSBzdGF0c190ZW1wOworLS0gVGVzdHMgZm9yIHBnX2Ns ZWFyX2V4dGVuZGVkX3N0YXRzKCkuCistLSAgSW52YWxpZCBhcmd1bWVudCB2YWx1ZXMuCitTRUxF Q1QgcGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiBOVUxMLAorICByZWxuYW1l ID0+ICdyZWxfZm9vJywKKyAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzY2hlbWFfZm9vJywK KyAgc3RhdGlzdGljc19uYW1lID0+ICdzdGF0X2JhcicsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7 CitFUlJPUjogIGFyZ3VtZW50ICJzY2hlbWFuYW1lIiBtdXN0IG5vdCBiZSBudWxsCitTRUxFQ1Qg cGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiAnc2NoZW1hX2ZvbycsCisgIHJl bG5hbWUgPT4gTlVMTCwKKyAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzY2hlbWFfZm9vJywK KyAgc3RhdGlzdGljc19uYW1lID0+ICdzdGF0X2JhcicsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7 CitFUlJPUjogIGFyZ3VtZW50ICJyZWxuYW1lIiBtdXN0IG5vdCBiZSBudWxsCitTRUxFQ1QgcGdf Y2xlYXJfZXh0ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiAnc2NoZW1hX2ZvbycsCisgIHJlbG5h bWUgPT4gJ3JlbF9mb28nLAorICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gTlVMTCwKKyAgc3Rh dGlzdGljc19uYW1lID0+ICdzdGF0X2JhcicsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7CitFUlJP UjogIGFyZ3VtZW50ICJzdGF0aXN0aWNzX3NjaGVtYW5hbWUiIG11c3Qgbm90IGJlIG51bGwKK1NF TEVDVCBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyhzY2hlbWFuYW1lID0+ICdzY2hlbWFfZm9vJywK KyAgcmVsbmFtZSA9PiAncmVsX2ZvbycsCisgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc2No ZW1hX2ZvbycsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiBOVUxMLAorICBpbmhlcml0ZWQgPT4gZmFs c2UpOworRVJST1I6ICBhcmd1bWVudCAic3RhdGlzdGljc19uYW1lIiBtdXN0IG5vdCBiZSBudWxs CitTRUxFQ1QgcGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiAnc2NoZW1hX2Zv bycsCisgIHJlbG5hbWUgPT4gJ3JlbF9mb28nLAorICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4g J3NjaGVtYV9mb28nLAorICBzdGF0aXN0aWNzX25hbWUgPT4gJ3N0YXRfYmFyJywKKyAgaW5oZXJp dGVkID0+IE5VTEwpOworRVJST1I6ICBhcmd1bWVudCAiaW5oZXJpdGVkIiBtdXN0IG5vdCBiZSBu dWxsCistLSBNaXNzaW5nIG9iamVjdHMKK1NFTEVDVCBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyhz Y2hlbWFuYW1lID0+ICdzY2hlbWFfbm90X2V4aXN0JywKKyAgcmVsbmFtZSA9PiAndGVzdCcsCisg IHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc2NoZW1hX25vdF9leGlzdCcsCisgIHN0YXRpc3Rp Y3NfbmFtZSA9PiAndGVzdF9zdGF0JywKKyAgaW5oZXJpdGVkID0+IGZhbHNlKTsKK0VSUk9SOiAg c2NoZW1hICJzY2hlbWFfbm90X2V4aXN0IiBkb2VzIG5vdCBleGlzdAorU0VMRUNUIHBnX2NsZWFy X2V4dGVuZGVkX3N0YXRzKHNjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisgIHJlbG5hbWUg PT4gJ3RhYmxlX25vdF9leGlzdCcsCisgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNf aW1wb3J0JywKKyAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXQnLAorICBpbmhlcml0ZWQg PT4gZmFsc2UpOworRVJST1I6ICByZWxhdGlvbiAic3RhdHNfaW1wb3J0LnRhYmxlX25vdF9leGlz dCIgZG9lcyBub3QgZXhpc3QKK1NFTEVDVCBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyhzY2hlbWFu YW1lID0+ICdzdGF0c19pbXBvcnQnLAorICByZWxuYW1lID0+ICd0ZXN0JywKKyAgc3RhdGlzdGlj c19zY2hlbWFuYW1lID0+ICdzY2hlbWFfbm90X2V4aXN0JywKKyAgc3RhdGlzdGljc19uYW1lID0+ ICd0ZXN0X3N0YXQnLAorICBpbmhlcml0ZWQgPT4gZmFsc2UpOworV0FSTklORzogIGNvdWxkIG5v dCBmaW5kIHNjaGVtYSAic2NoZW1hX25vdF9leGlzdCIKKyBwZ19jbGVhcl9leHRlbmRlZF9zdGF0 cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIHBnX2Ns ZWFyX2V4dGVuZGVkX3N0YXRzKHNjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisgIHJlbG5h bWUgPT4gJ3Rlc3QnLAorICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcs CisgIHN0YXRpc3RpY3NfbmFtZSA9PiAnZXh0X3N0YXRzX25vdF9leGlzdCcsCisgIGluaGVyaXRl ZCA9PiBmYWxzZSk7CitXQVJOSU5HOiAgY291bGQgbm90IGZpbmQgZXh0ZW5kZWQgc3RhdGlzdGlj cyBvYmplY3QgInN0YXRzX2ltcG9ydCIuImV4dF9zdGF0c19ub3RfZXhpc3QiCisgcGdfY2xlYXJf ZXh0ZW5kZWRfc3RhdHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisK Ky0tIENoZWNrIHRoYXQgcmVjb3JkcyBhcmUgcmVtb3ZlZCBhZnRlciBhIHZhbGlkIGNsZWFyIGNh bGwuCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19zdGF0c19leHQgQVMgZQorICBXSEVSRSBlLnN0 YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnIEFORAorICBlLnN0YXRpc3RpY3Nf bmFtZSA9ICd0ZXN0X3N0YXQnIEFORCBlLmluaGVyaXRlZCA9IGZhbHNlOworIGNvdW50IAorLS0t LS0tLQorICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX3N0YXRzX2V4 dF9leHBycyBBUyBlCisgIFdIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2lt cG9ydCcgQU5ECisgIGUuc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdCcgQU5EIGUuaW5oZXJp dGVkID0gZmFsc2U7CisgY291bnQgCistLS0tLS0tCisgICAgIDIKKygxIHJvdykKKworU0VMRUNU IHBnX2NhdGFsb2cucGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoCisgIHNjaGVtYW5hbWUgPT4gJ3N0 YXRzX2ltcG9ydCcsCisgIHJlbG5hbWUgPT4gJ3Rlc3QnLAorICBzdGF0aXN0aWNzX3NjaGVtYW5h bWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0JywK KyAgaW5oZXJpdGVkID0+IGZhbHNlKTsKKyBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIENPVU5UKCopIEZST00g cGdfc3RhdHNfZXh0IEFTIGUKKyAgV0hFUkUgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3Rh dHNfaW1wb3J0JyBBTkQKKyAgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JyBBTkQgZS5p bmhlcml0ZWQgPSBmYWxzZTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMAorKDEgcm93KQorCitT RUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgZQorICBXSEVSRSBlLnN0 YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnIEFORAorICBlLnN0YXRpc3RpY3Nf bmFtZSA9ICd0ZXN0X3N0YXQnIEFORCBlLmluaGVyaXRlZCA9IGZhbHNlOworIGNvdW50IAorLS0t LS0tLQorICAgICAwCisoMSByb3cpCisKKy0tIEFuZCBiZWZvcmUvYWZ0ZXIgb24gaW5oZXJpdGVk IHN0YXRzCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19zdGF0c19leHQgQVMgZQorICBXSEVSRSBl LnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnIEFORAorICBlLnN0YXRpc3Rp Y3NfbmFtZSA9ICdwYXJ0X3BhcmVudF9zdGF0JyBBTkQgZS5pbmhlcml0ZWQgPSB0cnVlOworIGNv dW50IAorLS0tLS0tLQorICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX2Ns ZWFyX2V4dGVuZGVkX3N0YXRzKAorICBzY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnLAorICBy ZWxuYW1lID0+ICdwYXJ0X3BhcmVudCcsCisgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3Rh dHNfaW1wb3J0JywKKyAgc3RhdGlzdGljc19uYW1lID0+ICdwYXJ0X3BhcmVudF9zdGF0JywKKyAg aW5oZXJpdGVkID0+IHRydWUpOworIHBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19z dGF0c19leHQgQVMgZQorICBXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19p bXBvcnQnIEFORAorICBlLnN0YXRpc3RpY3NfbmFtZSA9ICdwYXJ0X3BhcmVudF9zdGF0JyBBTkQg ZS5pbmhlcml0ZWQgPSB0cnVlOworIGNvdW50IAorLS0tLS0tLQorICAgICAwCisoMSByb3cpCisK Ky0tIENoZWNrIHRoYXQgTUFJTlRBSU4gaXMgcmVxdWlyZWQgd2hlbiBjbGVhcmluZyBzdGF0aXN0 aWNzLgorQ1JFQVRFIFJPTEUgcmVncmVzc190ZXN0X2V4dHN0YXRfY2xlYXI7CitHUkFOVCBBTEwg T04gU0NIRU1BIHN0YXRzX2ltcG9ydCBUTyByZWdyZXNzX3Rlc3RfZXh0c3RhdF9jbGVhcjsKK1NF VCBST0xFIHJlZ3Jlc3NfdGVzdF9leHRzdGF0X2NsZWFyOworU0VMRUNUIHBnX2NhdGFsb2cucGdf Y2xlYXJfZXh0ZW5kZWRfc3RhdHMoCisgIHNjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisg IHJlbG5hbWUgPT4gJ3Rlc3QnLAorICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2lt cG9ydCcsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0JywKKyAgaW5oZXJpdGVkID0+ IGZhbHNlKTsKK0VSUk9SOiAgcGVybWlzc2lvbiBkZW5pZWQgZm9yIHRhYmxlIHRlc3QKK1JFU0VU IFJPTEU7CitHUkFOVCBNQUlOVEFJTiBPTiBzdGF0c19pbXBvcnQudGVzdCBUTyByZWdyZXNzX3Rl c3RfZXh0c3RhdF9jbGVhcjsKK1NFVCBST0xFIHJlZ3Jlc3NfdGVzdF9leHRzdGF0X2NsZWFyOwor U0VMRUNUIHBnX2NhdGFsb2cucGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoCisgIHNjaGVtYW5hbWUg PT4gJ3N0YXRzX2ltcG9ydCcsCisgIHJlbG5hbWUgPT4gJ3Rlc3QnLAorICBzdGF0aXN0aWNzX3Nj aGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9z dGF0JywKKyAgaW5oZXJpdGVkID0+IGZhbHNlKTsKKyBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworUkVTRVQgUk9MRTsKK1JF Vk9LRSBNQUlOVEFJTiBPTiBzdGF0c19pbXBvcnQudGVzdCBGUk9NIHJlZ3Jlc3NfdGVzdF9leHRz dGF0X2NsZWFyOworUkVWT0tFIEFMTCBPTiBTQ0hFTUEgc3RhdHNfaW1wb3J0IEZST00gcmVncmVz c190ZXN0X2V4dHN0YXRfY2xlYXI7CitEUk9QIFJPTEUgcmVncmVzc190ZXN0X2V4dHN0YXRfY2xl YXI7CiBEUk9QIFNDSEVNQSBzdGF0c19pbXBvcnQgQ0FTQ0FERTsKIE5PVElDRTogIGRyb3AgY2Fz Y2FkZXMgdG8gNiBvdGhlciBvYmplY3RzCiBERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHR5cGUg c3RhdHNfaW1wb3J0LmNvbXBsZXhfdHlwZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvc3RhdHNfaW1wb3J0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5z cWwKaW5kZXggZDE0MDczM2E3NTAuLmY3YTEwMjE1YTg2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zdGF0c19pbXBvcnQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0 YXRzX2ltcG9ydC5zcWwKQEAgLTEwOCwxMCArMTA4LDI2IEBAIENSRUFURSBUQUJMRSBzdGF0c19p bXBvcnQucGFydF9jaGlsZF8xCiAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKQogICBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CiAKKy0tIFRoaXMgd2lsbCBlbnN1cmUgdGhh dCB3ZSBoYXZlIGluaGVyaXRlZCA9IHRydWUgZXh0ZW5kZWQgc3RhdHMKK0NSRUFURSBTVEFUSVNU SUNTIHN0YXRzX2ltcG9ydC5wYXJ0X3BhcmVudF9zdGF0CisgIE9OIGksIChpICUgMikKKyAgRlJP TSBzdGF0c19pbXBvcnQucGFydF9wYXJlbnQ7CisKIENSRUFURSBJTkRFWCBwYXJ0X3BhcmVudF9p IE9OIHN0YXRzX2ltcG9ydC5wYXJ0X3BhcmVudChpKTsKIAorSU5TRVJUIElOVE8gc3RhdHNfaW1w b3J0LnBhcnRfcGFyZW50CitTRUxFQ1QgZy5nCitGUk9NIGdlbmVyYXRlX3NlcmllcygwLDkpIEFT IGcoZyk7CisKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHN0YXRzX2ltcG9ydC5wYXJ0X3BhcmVudDsK K1NFTEVDVCBDT1VOVCgqKSBGUk9NIHN0YXRzX2ltcG9ydC5wYXJ0X2NoaWxkXzE7CisKIEFOQUxZ WkUgc3RhdHNfaW1wb3J0LnBhcnRfcGFyZW50OwogCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19z dGF0c19leHQgQVMgZQorICBXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19p bXBvcnQnIEFORAorICBlLnN0YXRpc3RpY3NfbmFtZSA9ICdwYXJ0X3BhcmVudF9zdGF0JyBBTkQg ZS5pbmhlcml0ZWQgPSB0cnVlOworCiBTRUxFQ1QgcmVscGFnZXMKIEZST00gcGdfY2xhc3MKIFdI RVJFIG9pZCA9ICdzdGF0c19pbXBvcnQucGFydF9wYXJlbnQnOjpyZWdjbGFzczsKQEAgLTc2Niw2 ICs3ODIsMTAgQEAgU0VMRUNUIDQsICdmb3VyJywgTlVMTCwgaW50NHJhbmdlKDAsMTAwKSwgTlVM TDsKIAogQ1JFQVRFIElOREVYIGlzX29kZCBPTiBzdGF0c19pbXBvcnQudGVzdCgoKGNvbXApLmEg JSAyID0gMSkpOwogCitDUkVBVEUgU1RBVElTVElDUyBzdGF0c19pbXBvcnQudGVzdF9zdGF0Cisg IE9OIG5hbWUsIGNvbXAsIGxvd2VyKGFyYW5nZSksIGFycmF5X2xlbmd0aCh0YWdzLDEpCisgIEZS T00gc3RhdHNfaW1wb3J0LnRlc3Q7CisKIC0tIEdlbmVyYXRlIHN0YXRpc3RpY3Mgb24gdGFibGUg d2l0aCBkYXRhCiBBTkFMWVpFIHN0YXRzX2ltcG9ydC50ZXN0OwogCkBAIC03NzQsNiArNzk0LDEw IEBAIENSRUFURSBUQUJMRSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZSAoIExJS0Ugc3RhdHNfaW1w b3J0LnRlc3QgKQogCiBDUkVBVEUgSU5ERVggaXNfb2RkX2Nsb25lIE9OIHN0YXRzX2ltcG9ydC50 ZXN0X2Nsb25lKCgoY29tcCkuYSAlIDIgPSAxKSk7CiAKK0NSRUFURSBTVEFUSVNUSUNTIHN0YXRz X2ltcG9ydC50ZXN0X3N0YXRfY2xvbmUKKyAgT04gbmFtZSwgY29tcCwgbG93ZXIoYXJhbmdlKSwg YXJyYXlfbGVuZ3RoKHRhZ3MsMSkKKyAgRlJPTSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZTsKKwog LS0KIC0tIENvcHkgc3RhdHMgZnJvbSB0ZXN0IHRvIHRlc3RfY2xvbmUsIGFuZCBpc19vZGQgdG8g aXNfb2RkX2Nsb25lCiAtLQpAQCAtOTcwLDQgKzk5NCwxMTEgQEAgQU5EIHRhYmxlbmFtZSA9ICdz dGF0c190ZW1wJwogQU5EIGluaGVyaXRlZCA9IGZhbHNlCiBBTkQgYXR0bmFtZSA9ICdpJzsKIERS T1AgVEFCTEUgc3RhdHNfdGVtcDsKKworLS0gVGVzdHMgZm9yIHBnX2NsZWFyX2V4dGVuZGVkX3N0 YXRzKCkuCistLSAgSW52YWxpZCBhcmd1bWVudCB2YWx1ZXMuCitTRUxFQ1QgcGdfY2xlYXJfZXh0 ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiBOVUxMLAorICByZWxuYW1lID0+ICdyZWxfZm9vJywK KyAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzY2hlbWFfZm9vJywKKyAgc3RhdGlzdGljc19u YW1lID0+ICdzdGF0X2JhcicsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7CitTRUxFQ1QgcGdfY2xl YXJfZXh0ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiAnc2NoZW1hX2ZvbycsCisgIHJlbG5hbWUg PT4gTlVMTCwKKyAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzY2hlbWFfZm9vJywKKyAgc3Rh dGlzdGljc19uYW1lID0+ICdzdGF0X2JhcicsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7CitTRUxF Q1QgcGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiAnc2NoZW1hX2ZvbycsCisg IHJlbG5hbWUgPT4gJ3JlbF9mb28nLAorICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gTlVMTCwK KyAgc3RhdGlzdGljc19uYW1lID0+ICdzdGF0X2JhcicsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7 CitTRUxFQ1QgcGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoc2NoZW1hbmFtZSA9PiAnc2NoZW1hX2Zv bycsCisgIHJlbG5hbWUgPT4gJ3JlbF9mb28nLAorICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4g J3NjaGVtYV9mb28nLAorICBzdGF0aXN0aWNzX25hbWUgPT4gTlVMTCwKKyAgaW5oZXJpdGVkID0+ IGZhbHNlKTsKK1NFTEVDVCBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyhzY2hlbWFuYW1lID0+ICdz Y2hlbWFfZm9vJywKKyAgcmVsbmFtZSA9PiAncmVsX2ZvbycsCisgIHN0YXRpc3RpY3Nfc2NoZW1h bmFtZSA9PiAnc2NoZW1hX2ZvbycsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiAnc3RhdF9iYXInLAor ICBpbmhlcml0ZWQgPT4gTlVMTCk7CistLSBNaXNzaW5nIG9iamVjdHMKK1NFTEVDVCBwZ19jbGVh cl9leHRlbmRlZF9zdGF0cyhzY2hlbWFuYW1lID0+ICdzY2hlbWFfbm90X2V4aXN0JywKKyAgcmVs bmFtZSA9PiAndGVzdCcsCisgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc2NoZW1hX25vdF9l eGlzdCcsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0JywKKyAgaW5oZXJpdGVkID0+ IGZhbHNlKTsKK1NFTEVDVCBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyhzY2hlbWFuYW1lID0+ICdz dGF0c19pbXBvcnQnLAorICByZWxuYW1lID0+ICd0YWJsZV9ub3RfZXhpc3QnLAorICBzdGF0aXN0 aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiAn dGVzdF9zdGF0JywKKyAgaW5oZXJpdGVkID0+IGZhbHNlKTsKK1NFTEVDVCBwZ19jbGVhcl9leHRl bmRlZF9zdGF0cyhzY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnLAorICByZWxuYW1lID0+ICd0 ZXN0JywKKyAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzY2hlbWFfbm90X2V4aXN0JywKKyAg c3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXQnLAorICBpbmhlcml0ZWQgPT4gZmFsc2UpOwor U0VMRUNUIHBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzKHNjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9y dCcsCisgIHJlbG5hbWUgPT4gJ3Rlc3QnLAorICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0 YXRzX2ltcG9ydCcsCisgIHN0YXRpc3RpY3NfbmFtZSA9PiAnZXh0X3N0YXRzX25vdF9leGlzdCcs CisgIGluaGVyaXRlZCA9PiBmYWxzZSk7CisKKy0tIENoZWNrIHRoYXQgcmVjb3JkcyBhcmUgcmVt b3ZlZCBhZnRlciBhIHZhbGlkIGNsZWFyIGNhbGwuCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19z dGF0c19leHQgQVMgZQorICBXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19p bXBvcnQnIEFORAorICBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnIEFORCBlLmluaGVy aXRlZCA9IGZhbHNlOworU0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHNfZXh0X2V4cHJzIEFT IGUKKyAgV0hFUkUgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JyBBTkQK KyAgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JyBBTkQgZS5pbmhlcml0ZWQgPSBmYWxz ZTsKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzKAorICBzY2hlbWFu YW1lID0+ICdzdGF0c19pbXBvcnQnLAorICByZWxuYW1lID0+ICd0ZXN0JywKKyAgc3RhdGlzdGlj c19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnLAorICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rl c3Rfc3RhdCcsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBw Z19zdGF0c19leHQgQVMgZQorICBXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0 c19pbXBvcnQnIEFORAorICBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnIEFORCBlLmlu aGVyaXRlZCA9IGZhbHNlOworU0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHNfZXh0X2V4cHJz IEFTIGUKKyAgV0hFUkUgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JyBB TkQKKyAgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JyBBTkQgZS5pbmhlcml0ZWQgPSBm YWxzZTsKKy0tIEFuZCBiZWZvcmUvYWZ0ZXIgb24gaW5oZXJpdGVkIHN0YXRzCitTRUxFQ1QgQ09V TlQoKikgRlJPTSBwZ19zdGF0c19leHQgQVMgZQorICBXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1h bmFtZSA9ICdzdGF0c19pbXBvcnQnIEFORAorICBlLnN0YXRpc3RpY3NfbmFtZSA9ICdwYXJ0X3Bh cmVudF9zdGF0JyBBTkQgZS5pbmhlcml0ZWQgPSB0cnVlOworU0VMRUNUIHBnX2NhdGFsb2cucGdf Y2xlYXJfZXh0ZW5kZWRfc3RhdHMoCisgIHNjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcsCisg IHJlbG5hbWUgPT4gJ3BhcnRfcGFyZW50JywKKyAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdz dGF0c19pbXBvcnQnLAorICBzdGF0aXN0aWNzX25hbWUgPT4gJ3BhcnRfcGFyZW50X3N0YXQnLAor ICBpbmhlcml0ZWQgPT4gdHJ1ZSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19zdGF0c19leHQg QVMgZQorICBXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnIEFO RAorICBlLnN0YXRpc3RpY3NfbmFtZSA9ICdwYXJ0X3BhcmVudF9zdGF0JyBBTkQgZS5pbmhlcml0 ZWQgPSB0cnVlOworCistLSBDaGVjayB0aGF0IE1BSU5UQUlOIGlzIHJlcXVpcmVkIHdoZW4gY2xl YXJpbmcgc3RhdGlzdGljcy4KK0NSRUFURSBST0xFIHJlZ3Jlc3NfdGVzdF9leHRzdGF0X2NsZWFy OworR1JBTlQgQUxMIE9OIFNDSEVNQSBzdGF0c19pbXBvcnQgVE8gcmVncmVzc190ZXN0X2V4dHN0 YXRfY2xlYXI7CitTRVQgUk9MRSByZWdyZXNzX3Rlc3RfZXh0c3RhdF9jbGVhcjsKK1NFTEVDVCBw Z19jYXRhbG9nLnBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzKAorICBzY2hlbWFuYW1lID0+ICdzdGF0 c19pbXBvcnQnLAorICByZWxuYW1lID0+ICd0ZXN0JywKKyAgc3RhdGlzdGljc19zY2hlbWFuYW1l ID0+ICdzdGF0c19pbXBvcnQnLAorICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdCcsCisg IGluaGVyaXRlZCA9PiBmYWxzZSk7CitSRVNFVCBST0xFOworR1JBTlQgTUFJTlRBSU4gT04gc3Rh dHNfaW1wb3J0LnRlc3QgVE8gcmVncmVzc190ZXN0X2V4dHN0YXRfY2xlYXI7CitTRVQgUk9MRSBy ZWdyZXNzX3Rlc3RfZXh0c3RhdF9jbGVhcjsKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX2NsZWFyX2V4 dGVuZGVkX3N0YXRzKAorICBzY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnLAorICByZWxuYW1l ID0+ICd0ZXN0JywKKyAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnLAor ICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdCcsCisgIGluaGVyaXRlZCA9PiBmYWxzZSk7 CitSRVNFVCBST0xFOworUkVWT0tFIE1BSU5UQUlOIE9OIHN0YXRzX2ltcG9ydC50ZXN0IEZST00g cmVncmVzc190ZXN0X2V4dHN0YXRfY2xlYXI7CitSRVZPS0UgQUxMIE9OIFNDSEVNQSBzdGF0c19p bXBvcnQgRlJPTSByZWdyZXNzX3Rlc3RfZXh0c3RhdF9jbGVhcjsKK0RST1AgUk9MRSByZWdyZXNz X3Rlc3RfZXh0c3RhdF9jbGVhcjsKKwogRFJPUCBTQ0hFTUEgc3RhdHNfaW1wb3J0IENBU0NBREU7 CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWFkbWluLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvZnVuYy9mdW5jLWFkbWluLnNnbWwKaW5kZXggMjg5NmNkOWU0MjkuLmU3ZWExNmY3M2Iz IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWFkbWluLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sCkBAIC0yMTY1LDYgKzIxNjUsMzUgQEAgU0VM RUNUIHBnX3Jlc3RvcmVfYXR0cmlidXRlX3N0YXRzKAogICAgICAgICA8L3BhcmE+CiAgICAgICAg PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0i ZnVuY190YWJsZV9lbnRyeSI+CisgICAgICAgIDxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4K KyAgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICAgPHByaW1hcnk+cGdfY2xlYXJfZXh0ZW5k ZWRfc3RhdHM8L3ByaW1hcnk+CisgICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgIDxmdW5j dGlvbj5wZ19jbGVhcl9leHRlbmRlZF9zdGF0czwvZnVuY3Rpb24+ICgKKyAgICAgICAgIDxwYXJh bWV0ZXI+c2NoZW1hbmFtZTwvcGFyYW1ldGVyPiA8dHlwZT5uYW1lPC90eXBlPiwKKyAgICAgICAg IDxwYXJhbWV0ZXI+cmVsbmFtZTwvcGFyYW1ldGVyPiA8dHlwZT5uYW1lPC90eXBlPiwKKyAgICAg ICAgIDxwYXJhbWV0ZXI+c3RhdGlzdGljc19zY2hlbWFuYW1lPC9wYXJhbWV0ZXI+IDx0eXBlPm5h bWU8L3R5cGU+LAorICAgICAgICAgPHBhcmFtZXRlcj5zdGF0aXN0aWNzX25hbWU8L3BhcmFtZXRl cj4gPHR5cGU+bmFtZTwvdHlwZT4sCisgICAgICAgICA8cGFyYW1ldGVyPmluaGVyaXRlZDwvcGFy YW1ldGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPiApCisgICAgICAgICA8cmV0dXJudmFsdWU+dm9p ZDwvcmV0dXJudmFsdWU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICBDbGVhcnMgZGF0YSBvZiBhbiBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCwgYXMgdGhvdWdo IHRoZSBvYmplY3QKKyAgICAgICAgIHdhcyBuZXdseS1jcmVhdGVkLiBUaGUgcmVxdWlyZWQgYXJn dW1lbnRzIGFyZQorICAgICAgICAgPGxpdGVyYWw+c2NoZW1hbmFtZTwvbGl0ZXJhbD4gYW5kIDxs aXRlcmFsPnJlbG5hbWU8L2xpdGVyYWw+IHRvCisgICAgICAgICBzcGVjaWZ5IHRoZSBzY2hlbWEg YW5kIHRhYmxlIG5hbWUgb2YgdGhlIHJlbGF0aW9uIHdob3NlIHN0YXRpc3RpY3MKKyAgICAgICAg IGFyZSBjbGVhcmVkLCBhcyB3ZWxsIGFzIDxsaXRlcmFsPnN0YXRpc3RpY3Nfc2NoZW1hbmFtZTwv bGl0ZXJhbD4KKyAgICAgICAgIGFuZCA8bGl0ZXJhbD5zdGF0aXN0aWNzX25hbWU8L2xpdGVyYWw+ IHRvIHNwZWNpZnkgdGhlIHNjaGVtYSBhbmQKKyAgICAgICAgIGV4dGVuZGVkIHN0YXRpc3RpY3Mg bmFtZSBvZiB0aGUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QgdG8gY2xlYXIuCisgICAgICAg IDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0 aGUgPGxpdGVyYWw+TUFJTlRBSU48L2xpdGVyYWw+IHByaXZpbGVnZSBvbgorICAgICAgICAgdGhl IHRhYmxlIG9yIGJlIHRoZSBvd25lciBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgIDwvcGFyYT4K KyAgICAgICA8L2VudHJ5PgorICAgICAgPC9yb3c+CiAgICAgIDwvdGJvZHk+CiAgICAgPC90Z3Jv dXA+CiAgICA8L3RhYmxlPgoKYmFzZS1jb21taXQ6IGZjYjljOTc3YWE1ZjFlZWZlNzQ0NGU0MjNl ODMzZmY2NGE1ZDFkOGYKLS0gCjIuNTIuMAoK --000000000000ab65de064872f8d4--