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.94.2) (envelope-from ) id 1uiZq5-00DHxU-Qp for pgsql-hackers@arkaria.postgresql.org; Sun, 03 Aug 2025 14:37:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uiZq2-00Drg2-P3 for pgsql-hackers@arkaria.postgresql.org; Sun, 03 Aug 2025 14:37:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uiZq2-00Drfu-7n for pgsql-hackers@lists.postgresql.org; Sun, 03 Aug 2025 14:37:26 +0000 Received: from mail-yw1-x1133.google.com ([2607:f8b0:4864:20::1133]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uiZpx-000Xf4-0Z for pgsql-hackers@lists.postgresql.org; Sun, 03 Aug 2025 14:37:25 +0000 Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-717b580ff2aso31650967b3.0 for ; Sun, 03 Aug 2025 07:37:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754231838; x=1754836638; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=FBQqLRpDgxUwVmF+9Ot/nXBF4VGACdTqTp3rVE2zEKw=; b=TOyj7/nDk6tQ5njNJsTU6zpLH5XvEhVA98yJfmAsjxLGkQ/5Eu6WL4Hb5aMTQaO8pj cbXaQoDWLBOt/wjylESFtvMhbepKNfOlihMCIskgPatwRfFlrG5+zs++JG+75yIi8mK/ pPq+jRFh/O8D55Bv6exrpCsFukJa85JmDC3qQId+eBloQLvZmqwKH7tj0+mKV0uNlTLQ EvpsQCYTRH0p50nY4+jEyiRQ5f6H5f1XaYDaUu8zh+fk4Quvz+4oLLDbixea9eIYu0WJ ZkyHOB8dz1wS0oDfcV3XyDltcgTUqQNI6ralScfEzvbzJlfKcl8ImzwOQ7uqqZaTJyEO Pn8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754231838; x=1754836638; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FBQqLRpDgxUwVmF+9Ot/nXBF4VGACdTqTp3rVE2zEKw=; b=XTqKtmtkcqwUtBg7AIQiCXjFJa10MwoBBVKCP4AzI8+sAKRmFn7qU3EGgrIDGp+mjE OgQEp3WYRptdnEtSjQeRAJjOtRZjb6As53b9/lja+cvN4UhD2G35pVwRTzrDbZOWoJqx AKfZkQdQz9f87gROgJzl6KxDtOc2VhGcPHc+zFfzgoygLu5G5FJlNhPSimUiW7mFWSRR 47y/RuXnVPKZbgCiVkbLGjiFM08HR8G2izWDPLIgZhTcyFjOcZoByRRLnjdnAU1phAT8 JKGcbd/32yKt3CcERz1abC4j/3ThVZvDGT3EKwCA2yWw2nypmcnZZKy+yAQeJcoRXLFI J3uw== X-Gm-Message-State: AOJu0YxayDmJ/Ehj0UPlOXtZEZq3bW/yayQaqlE62CGLntf+KomUK/PK EQ4SG1QZyJa+bmj27efzytJgCvbCwwBac9Jfthyd3ZTowz9OEPWnZRDW8q3FZ8Srbz92tlPOBMC U6yJDVEl+TY05uZVXUvBncCAddM/VBr6wZ39Dd1rCsg== X-Gm-Gg: ASbGncvypo/BHREAt89l0C0WnL188lAYv2TJtBi8SQnodUCC0jkFI4GSgpvWddiy+Er dqwmO2eR2VoI5RpaO8HI5Go7lGKuh9EriW+9K/pWCT7ZBUxSdbB+cJznSYEd2D3NkXiklAuXP85 xUkqlOin6ji6PbeqnWWjYgXhr0KXx/EHDIeq0a7msyc0Mrehc2chRRRi67j04rc0NdIVX00EAqq rB0ydfjJw== X-Google-Smtp-Source: AGHT+IFzQtPAhtunyk53rS1wK4G1C9Z99tH0yBrvHLqHyEdtelwWtg5vds+FPFohKKM5q3erqxT6FYJx+hRIJIIqcTU= X-Received: by 2002:a05:690c:6e07:b0:711:16d4:60dd with SMTP id 00721157ae682-71b7f5955c3mr72013837b3.19.1754231838177; Sun, 03 Aug 2025 07:37:18 -0700 (PDT) MIME-Version: 1.0 References: <202507071221.am6rbd6n4dct@alvherre.pgsql> <67115399-4799-4c3b-bd17-d43c98099919@vondra.me> In-Reply-To: From: Arseniy Mukhin Date: Sun, 3 Aug 2025 17:37:06 +0300 X-Gm-Features: Ac12FXy54MKYXzFHZi-YB_hX2g9PWylRxtyvrtigHZk0qrtbwBgJG3BlMsoTCL8 Message-ID: Subject: Re: amcheck support for BRIN indexes To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000091f0f7063b76ed0d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000091f0f7063b76ed0d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Aug 1, 2025 at 11:22=E2=80=AFPM Arseniy Mukhin wrote: > > Hi, > > On Tue, Jul 22, 2025 at 6:43=E2=80=AFPM Arseniy Mukhin > wrote: > > > > Hi, > > > > While reviewing gist amcheck patch [1] I realized that brin amcheck > > also must check if current snapshot is OK with index indcheckxmin (as > > btree, gist do it). Currently this check is contained in btree amcheck > > code, but other AMs need it for heapallindexed as well, so I moved it > > from btree to verify_common (0003 patch). > > There was a compiler warning on CI, so there is a new version with the > fix (adds #include to verify_common). > I also moved it to PG19-2. Sorry for the noise, forgot to attach the files. Best regards, Arseniy Mukhin --00000000000091f0f7063b76ed0d Content-Type: text/x-patch; charset="US-ASCII"; name="v9-0001-brin-refactoring.patch" Content-Disposition: attachment; filename="v9-0001-brin-refactoring.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdvsaizk0 RnJvbSA3MTRlZTBhOGY1MTcxNTdjNWY1OWZmODJhYTFmYzgyZTZiZTM2OTIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAxNiBBcHIgMjAyNSAxMToyNjo0NSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjkgMS80XSBicmluIHJlZmFjdG9yaW5nCgpGb3IgYWRkaW5nIEJSSU4gaW5kZXggc3Vw cG9ydCBpbiBhbWNoZWNrIHdlIG5lZWQgc29tZSB0aW55IGNoYW5nZXMgaW4gQlJJTgpjb3JlIGNv ZGU6CgoqIFdlIG5lZWQgdG8gaGF2ZSB0dXBsZSBkZXNjcmlwdG9yIGZvciBvbi1kaXNrIHN0b3Jh Z2Ugb2YgQlJJTiB0dXBsZXMuCiAgSXQgaXMgYSBwdWJsaWMgZmllbGQgJ2JkX2Rpc2t0ZGVzYycg aW4gQnJpbkRlc2MsIGJ1dCB0byBhY2Nlc3MgaXQgd2UKICBuZWVkIGZ1bmN0aW9uICdicnR1cGxl X2Rpc2tfdHVwZGVzYycgd2hpY2ggaXMgaW50ZXJuYWwuIFRoaXMgY29tbWl0CiAgbWFrZXMgaXQg ZXh0ZXJuIGFuZCByZW5hbWVzIGl0IHRvICdicmluX3R1cGxlX3R1cGRlc2MnLgoKKiBGb3IgbWV0 YSBwYWdlIGNoZWNrIHdlIG5lZWQgdG8ga25vdyBwYWdlc19wZXJfcmFuZ2UgdXBwZXIgbGltaXQu IEl0J3MKICBoYXJkY29kZWQgbm93LiBUaGlzIGNvbW1pdCBtb3ZlcyBpdHMgdmFsdWUgdG8gbWFj cm9zIEJSSU5fTUFYX1BBR0VTX1BFUl9SQU5HRQogIHNvIHRoYXQgd2UgY2FuIHVzZSBpdCBpbiBh bWNoZWNrIHRvby4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMgICB8 IDEwICsrKysrLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jIHwg IDMgKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oICAgICAgICAgICAgICB8ICAxICsKIHNy Yy9pbmNsdWRlL2FjY2Vzcy9icmluX3R1cGxlLmggICAgICAgIHwgIDIgKysKIDQgZmlsZXMgY2hh bmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJp bi9icmluX3R1cGxlLmMKaW5kZXggODYxZjM5N2U2ZGIuLmZjNjdhNzA4ZGRhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jCkBAIC01Nyw4ICs1Nyw4IEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBicmluX2RlY29uc3RydWN0X3R1cGxlKEJyaW5EZXNjICpicmRlc2MsCiAvKgogICogUmV0 dXJuIGEgdHVwbGUgZGVzY3JpcHRvciB1c2VkIGZvciBvbi1kaXNrIHN0b3JhZ2Ugb2YgQlJJTiB0 dXBsZXMuCiAgKi8KLXN0YXRpYyBUdXBsZURlc2MKLWJydHVwbGVfZGlza190dXBkZXNjKEJyaW5E ZXNjICpicmRlc2MpCitUdXBsZURlc2MKK2JyaW5fdHVwbGVfdHVwZGVzYyhCcmluRGVzYyAqYnJk ZXNjKQogewogCS8qIFdlIGNhY2hlIHRoZXNlIGluIHRoZSBCcmluRGVzYyAqLwogCWlmIChicmRl c2MtPmJkX2Rpc2t0ZGVzYyA9PSBOVUxMKQpAQCAtMjgwLDcgKzI4MCw3IEBAIGJyaW5fZm9ybV90 dXBsZShCcmluRGVzYyAqYnJkZXNjLCBCbG9ja051bWJlciBibGtubywgQnJpbk1lbVR1cGxlICp0 dXBsZSwKIAogCWxlbiA9IGhvZmYgPSBNQVhBTElHTihsZW4pOwogCi0JZGF0YV9sZW4gPSBoZWFw X2NvbXB1dGVfZGF0YV9zaXplKGJydHVwbGVfZGlza190dXBkZXNjKGJyZGVzYyksCisJZGF0YV9s ZW4gPSBoZWFwX2NvbXB1dGVfZGF0YV9zaXplKGJyaW5fdHVwbGVfdHVwZGVzYyhicmRlc2MpLAog CQkJCQkJCQkJICB2YWx1ZXMsIG51bGxzKTsKIAlsZW4gKz0gZGF0YV9sZW47CiAKQEAgLTI5OSw3 ICsyOTksNyBAQCBicmluX2Zvcm1fdHVwbGUoQnJpbkRlc2MgKmJyZGVzYywgQmxvY2tOdW1iZXIg Ymxrbm8sIEJyaW5NZW1UdXBsZSAqdHVwbGUsCiAJICogbmVlZCB0byBwYXNzIGEgdmFsaWQgbnVs bCBiaXRtYXAgc28gdGhhdCBpdCB3aWxsIGNvcnJlY3RseSBza2lwCiAJICogb3V0cHV0dGluZyBu dWxsIGF0dHJpYnV0ZXMgaW4gdGhlIGRhdGEgYXJlYS4KIAkgKi8KLQloZWFwX2ZpbGxfdHVwbGUo YnJ0dXBsZV9kaXNrX3R1cGRlc2MoYnJkZXNjKSwKKwloZWFwX2ZpbGxfdHVwbGUoYnJpbl90dXBs ZV90dXBkZXNjKGJyZGVzYyksCiAJCQkJCXZhbHVlcywKIAkJCQkJbnVsbHMsCiAJCQkJCShjaGFy ICopIHJldHR1cGxlICsgaG9mZiwKQEAgLTY4Miw3ICs2ODIsNyBAQCBicmluX2RlY29uc3RydWN0 X3R1cGxlKEJyaW5EZXNjICpicmRlc2MsCiAJICogbWF5IHJldXNlIGF0dHJpYnV0ZSBlbnRyaWVz IGZvciBtb3JlIHRoYW4gb25lIGNvbHVtbiwgd2UgY2Fubm90IGNhY2hlCiAJICogb2Zmc2V0cyBo ZXJlLgogCSAqLwotCWRpc2tkc2MgPSBicnR1cGxlX2Rpc2tfdHVwZGVzYyhicmRlc2MpOworCWRp c2tkc2MgPSBicmluX3R1cGxlX3R1cGRlc2MoYnJkZXNjKTsKIAlzdG9yZWQgPSAwOwogCW9mZiA9 IDA7CiAJZm9yIChhdHRudW0gPSAwOyBhdHRudW0gPCBicmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRz OyBhdHRudW0rKykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKaW5kZXggNTA3 NDdjMTYzOTYuLmJjNDk0ODQ3MzQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3JlbG9wdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlv bnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3QuaCIKICNp bmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5o IgorI2luY2x1ZGUgImFjY2Vzcy9icmluLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMu aCIKICNpbmNsdWRlICJhY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKQEAgLTM0Myw3ICszNDQsNyBAQCBzdGF0aWMgcmVsb3B0X2ludCBpbnRSZWxP cHRzW10gPQogCQkJIk51bWJlciBvZiBwYWdlcyB0aGF0IGVhY2ggcGFnZSByYW5nZSBjb3ZlcnMg aW4gYSBCUklOIGluZGV4IiwKIAkJCVJFTE9QVF9LSU5EX0JSSU4sCiAJCQlBY2Nlc3NFeGNsdXNp dmVMb2NrCi0JCX0sIDEyOCwgMSwgMTMxMDcyCisJCX0sIDEyOCwgMSwgQlJJTl9NQVhfUEFHRVNf UEVSX1JBTkdFCiAJfSwKIAl7CiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9i cmluLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCmluZGV4IDgyMWYxZTAyODA2Li4zMzRj ZTk3M2I2NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvYnJpbi5oCkBAIC0zNyw2ICszNyw3IEBAIHR5cGVkZWYgc3RydWN0IEJy aW5TdGF0c0RhdGEKIAogCiAjZGVmaW5lIEJSSU5fREVGQVVMVF9QQUdFU19QRVJfUkFOR0UJMTI4 CisjZGVmaW5lIEJSSU5fTUFYX1BBR0VTX1BFUl9SQU5HRQkxMzEwNzIKICNkZWZpbmUgQnJpbkdl dFBhZ2VzUGVyUmFuZ2UocmVsYXRpb24pIFwKIAkoQXNzZXJ0TWFjcm8ocmVsYXRpb24tPnJkX3Jl bC0+cmVsa2luZCA9PSBSRUxLSU5EX0lOREVYICYmIFwKIAkJCQkgcmVsYXRpb24tPnJkX3JlbC0+ cmVsYW0gPT0gQlJJTl9BTV9PSUQpLCBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv YnJpbl90dXBsZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5fdHVwbGUuaAppbmRleCAwMTBi YTRlYTNjMC4uMmExMmFiMDNjNDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmlu X3R1cGxlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5fdHVwbGUuaApAQCAtMTA5LDQg KzEwOSw2IEBAIGV4dGVybiBCcmluTWVtVHVwbGUgKmJyaW5fbWVtdHVwbGVfaW5pdGlhbGl6ZShC cmluTWVtVHVwbGUgKmR0dXBsZSwKIGV4dGVybiBCcmluTWVtVHVwbGUgKmJyaW5fZGVmb3JtX3R1 cGxlKEJyaW5EZXNjICpicmRlc2MsCiAJCQkJCQkJCQkgICBCcmluVHVwbGUgKnR1cGxlLCBCcmlu TWVtVHVwbGUgKmRNZW10dXBsZSk7CiAKK2V4dGVybiBUdXBsZURlc2MgYnJpbl90dXBsZV90dXBk ZXNjKEJyaW5EZXNjICpicmRlc2MpOworCiAjZW5kaWYJCQkJCQkJLyogQlJJTl9UVVBMRV9IICov Ci0tIAoyLjQzLjAKCg== --00000000000091f0f7063b76ed0d Content-Type: text/x-patch; charset="US-ASCII"; name="v9-0004-amcheck-brin_index_check-heap-all-indexed.patch" Content-Disposition: attachment; filename="v9-0004-amcheck-brin_index_check-heap-all-indexed.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdvsaizt3 RnJvbSBjNDViZjMxZDgxYzhkM2IzNDk1ZTk4N2U3Y2FjM2ZiNjJkZmZhYzUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogRnJpLCAxIEF1ZyAyMDI1IDIzOjAyOjMzICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2OSA0LzRdIGFtY2hlY2s6IGJyaW5faW5kZXhfY2hlY2soKSAtIGhlYXAgYWxsIGluZGV4 ZWQKClRoaXMgY29tbWl0IGV4dGVuZHMgZnVuY3Rpb25hbGl0eSBvZiBicmluX2luZGV4X2NoZWNr KCkgd2l0aApoZWFwX2FsbF9pbmRleGVkIGNoZWNrOiB3ZSB2YWxpZGF0ZSBldmVyeSBpbmRleCBy YW5nZSB0dXBsZQphZ2FpbnN0IGV2ZXJ5IGhlYXAgdHVwbGUgd2l0aGluIHRoZSByYW5nZSB1c2lu ZyBjb25zaXN0ZW50Rm4uCkFsc28sIHdlIGNoZWNrIGhlcmUgdGhhdCBmaWVsZHMgJ2hhc19udWxs cycsICdhbGxfbnVsbHMnIGFuZAonZW1wdHlfcmFuZ2UnIGFyZSBjb25zaXN0ZW50IHdpdGggdGhl IHJhbmdlIGhlYXAgZGF0YS4gSXQncyB0aGUgbW9zdApleHBlbnNpdmUgcGFydCBvZiB0aGUgYnJp bl9pbmRleF9jaGVjaygpLCBzbyBpdCdzIG9wdGlvbmFsLgotLS0KIGNvbnRyaWIvYW1jaGVjay9h bWNoZWNrLS0xLjUtLTEuNi5zcWwgICB8ICAgNiArLQogY29udHJpYi9hbWNoZWNrL2V4cGVjdGVk L2NoZWNrX2JyaW4ub3V0IHwgIDIyICstCiBjb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4u c3FsICAgICAgfCAgMjIgKy0KIGNvbnRyaWIvYW1jaGVjay90LzAwN192ZXJpZnlfYnJpbi5wbCAg ICB8ICA1MSArKy0KIGNvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jICAgICAgICAgICB8IDQ5 MCArKysrKysrKysrKysrKysrKysrKysrKy0KIDUgZmlsZXMgY2hhbmdlZCwgNTY1IGluc2VydGlv bnMoKyksIDI2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9hbWNo ZWNrLS0xLjUtLTEuNi5zcWwgYi9jb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3Fs CmluZGV4IDAzNTQ0NTFjNDcyLi42MzM3ZTA2NWJiMSAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNo ZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbAorKysgYi9jb250cmliL2FtY2hlY2svYW1jaGVjay0t MS41LS0xLjYuc3FsCkBAIC04LDExICs4LDEzIEBACiAtLSBicmluX2luZGV4X2NoZWNrKCkKIC0t CiBDUkVBVEUgRlVOQ1RJT04gYnJpbl9pbmRleF9jaGVjayhpbmRleCByZWdjbGFzcywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJwYWdlc2NoZWNrIGJvb2xlYW4gZGVm YXVsdCBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcnBhZ2Vz Y2hlY2sgYm9vbGVhbiBkZWZhdWx0IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGVhcGFsbGluZGV4ZWQgYm9vbGVhbiBkZWZhdWx0IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc2lzdGVudF9vcGVyYXRvcl9uYW1lcyB0ZXh0W10gZGVm YXVsdCAne30nCiApCiAgICAgUkVUVVJOUyBWT0lECiBBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ2Jy aW5faW5kZXhfY2hlY2snCiBMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBSRVNUUklDVEVEOwog CiAtLSBXZSBkb24ndCB3YW50IHRoaXMgdG8gYmUgYXZhaWxhYmxlIHRvIHB1YmxpYwotUkVWT0tF IEFMTCBPTiBGVU5DVElPTiBicmluX2luZGV4X2NoZWNrKHJlZ2NsYXNzLCBib29sZWFuKSBGUk9N IFBVQkxJQzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitSRVZPS0UgQUxMIE9OIEZVTkNU SU9OIGJyaW5faW5kZXhfY2hlY2socmVnY2xhc3MsIGJvb2xlYW4sIGJvb2xlYW4sIHRleHRbXSkg RlJPTSBQVUJMSUM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9hbWNoZWNrL2V4cGVjdGVkL2NoZWNrX2JyaW4ub3V0IGIvY29udHJpYi9hbWNoZWNrL2V4 cGVjdGVkL2NoZWNrX2JyaW4ub3V0CmluZGV4IGU1ZmM1MmVkNzQ3Li5iZTg1YzMyYmM1OCAxMDA2 NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL2V4cGVjdGVkL2NoZWNrX2JyaW4ub3V0CisrKyBiL2Nv bnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dApAQCAtNSw3ICs1LDcgQEAgJCQg TEFOR1VBR0Ugc3FsOwogLS0gZW1wdHkgdGFibGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCiBDUkVB VEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOwogQ1JF QVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhKTsKLVNFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUp OwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0tLS0tLS0KICAKQEAgLTE5LDcgKzE5 LDcgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChh IFRFWFRfbWlubWF4X29wcywgaWQgaW50OF9taW4KIElOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBT RUxFQ1QgcmFuZG9tX3N0cmluZygoeCAlIDEwMCkpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAw MCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3Qg V0hFUkUgaWQgPiAxNTAwIEFORCBpZCA8IDI1MDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygn YnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2so J2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNr IAogLS0tLS0tLS0tLS0tLS0tLS0tCiAgCkBAIC0yOCw3ICsyOCw3IEBAIFNFTEVDVCBicmluX2lu ZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxkIGlu ZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHgg T04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBURVhUX21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BF Ul9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJF R0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0t LS0tLQogIApAQCAtNDIsNyArNDIsNyBAQCBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJy aW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFUwogSU5TRVJU IElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAw KSB4OwogLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUgRlJPTSBicmludGVzdCBX SEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygn YnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sg CiAtLS0tLS0tLS0tLS0tLS0tLS0KICAKQEAgLTUxLDcgKzUxLDcgQEAgU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKIC0tIHJlYnVpbGQgaW5k ZXgKIERST1AgSU5ERVggYnJpbnRlc3RfaWR4OwogQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBP TiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVS X1JBTkdFID0gMik7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVH Q0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJF R0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0tLS0t LS0tCiAgCkBAIC02NSw3ICs2NSw3IEBAIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJp bnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJVEgKIElOU0VSVCBJ TlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkg eDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hF UkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJp bnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2Jy aW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAog LS0tLS0tLS0tLS0tLS0tLS0tCiAgCkBAIC03NCw3ICs3NCw3IEBAIFNFTEVDVCBicmluX2luZGV4 X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxkIGluZGV4 CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04g YnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VT X1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6 OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgn OjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0t LS0tLS0tLQogIApAQCAtODgsNyArODgsNyBAQCBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9O IGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTXwogSU5T RVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwKSB4OwogLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUgRlJPTSBicmludGVz dCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVj aygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hl Y2sgCiAtLS0tLS0tLS0tLS0tLS0tLS0KICAKQEAgLTk3LDcgKzk3LDcgQEAgU0VMRUNUIGJyaW5f aW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKIC0tIHJlYnVpbGQg aW5kZXgKIERST1AgSU5ERVggYnJpbnRlc3RfaWR4OwogQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lk eCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfYmxvb21fb3BzKSBXSVRIIChQQUdFU19Q RVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6 UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0t LS0tLS0KICAKQEAgLTExMyw3ICsxMTMsNyBAQCBTRUxFQ1QgQk9YKHBvaW50KHJhbmRvbSgpICog MTAwMCwgcmFuZG9tKCkgKiAxMDAwKSwgcG9pbnQocmFuZG9tKCkgKiAxMDAwLCByYW5kbwogRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApOwogLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2Vz CiBERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBpZCA+IDIwMDAgQU5EIGlkIDwgNDAwMDsKLVNF TEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitT RUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRy dWUsICd7IkA+In0nKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0tLS0tLS0tCiAg CkBAIC0xMjIsNyArMTIyLDcgQEAgU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lk eCc6OlJFR0NMQVNTLCB0cnVlKTsKIC0tIHJlYnVpbGQgaW5kZXgKIERST1AgSU5ERVggYnJpbnRl c3RfaWR4OwogQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklO IChhIEJPWF9JTkNMVVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKLVNFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUs ICd7IkA+In0nKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0tLS0tLS0tCiAgCmRp ZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsIGIvY29udHJpYi9h bWNoZWNrL3NxbC9jaGVja19icmluLnNxbAppbmRleCBiMzZhZjM3ZmUwMy4uNGYxNmYzMWM3Zjgg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwKKysrIGIvY29u dHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbApAQCAtNyw3ICs3LDcgQEAgJCQgTEFOR1VB R0Ugc3FsOwogLS0gZW1wdHkgdGFibGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCiBDUkVBVEUgVEFC TEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOwogQ1JFQVRFIElO REVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhKTsKLVNFTEVDVCBicmlu X2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogLS0g Y2xlYW51cAogRFJPUCBUQUJMRSBicmludGVzdDsKIApAQCAtMTcsMTIgKzE3LDEyIEBAIENSRUFU RSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBURVhUX21pbm1h eF9vcHMsIGlkIGludDhfbWluCiBJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHJhbmRv bV9zdHJpbmcoKHggJSAxMDApKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIHg7CiAtLSBj cmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERFTEVURSBGUk9NIGJyaW50ZXN0IFdIRVJFIGlkID4g MTUwMCBBTkQgaWQgPCAyNTAwOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lk eCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9p ZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAKIC0tIHJlYnVpbGQgaW5kZXgKIERST1AgSU5E RVggYnJpbnRlc3RfaWR4OwogQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBV U0lORyBCUklOIChhIFRFWFRfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7 Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUp OworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVl LCB0cnVlKTsKIC0tIGNsZWFudXAKIERST1AgVEFCTEUgYnJpbnRlc3Q7CiAKQEAgLTM0LDEyICsz NCwxMiBAQCBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4g KGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFUwogSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEp IFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OwogLS0gY3JlYXRlIHNv bWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5E IGEgPCA0MDAwMDsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdD TEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVH Q0xBU1MsIHRydWUsIHRydWUpOwogCiAtLSByZWJ1aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50 ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJ TiAoYSBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNU IGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7 CiAtLSBjbGVhbnVwCiBEUk9QIFRBQkxFIGJyaW50ZXN0OwogCkBAIC01MSwxMiArNTEsMTIgQEAg Q1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhf bWlubWF4X211bHRpX29wcykgV0lUSAogSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OwogLS0gY3JlYXRlIHNvbWUgZW1wdHkg cmFuZ2VzCiBERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAw MDsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1 ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRy dWUsIHRydWUpOwogCiAtLSByZWJ1aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsK IENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4 X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBi cmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAt LSBjbGVhbnVwCiBEUk9QIFRBQkxFIGJyaW50ZXN0OwogCkBAIC02OCwxMiArNjgsMTIgQEAgQ1JF QVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfYmxv b21fb3BzKSBXSVRIIChQQUdFU18KIElOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJh bmdlcwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7 Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUp OworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVl LCB0cnVlKTsKIAogLS0gcmVidWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBD UkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9i bG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhf Y2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4 X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAtLSBjbGVhbnVw CiBEUk9QIFRBQkxFIGJyaW50ZXN0OwogCkBAIC04NywxMiArODcsMTIgQEAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMDApOwogLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUg RlJPTSBicmludGVzdCBXSEVSRSBpZCA+IDIwMDAgQU5EIGlkIDwgNDAwMDsKIAotU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBi cmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSwgJ3si QD4ifScpOwogCiAtLSByZWJ1aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENS RUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBCT1hfSU5D TFVTSU9OX09QUykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7Ci1TRUxFQ1QgYnJpbl9pbmRl eF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlLCAneyJAPiJ9Jyk7 CiAtLSBjbGVhbnVwCiBEUk9QIFRBQkxFIGJyaW50ZXN0OwogCmRpZmYgLS1naXQgYS9jb250cmli L2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwgYi9jb250cmliL2FtY2hlY2svdC8wMDdfdmVy aWZ5X2JyaW4ucGwKaW5kZXggMmM2MmI3NmNjNzAuLjUxYmZlZDdlMjczIDEwMDY0NAotLS0gYS9j b250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwKKysrIGIvY29udHJpYi9hbWNoZWNr L3QvMDA3X3ZlcmlmeV9icmluLnBsCkBAIC0yMDAsNiArMjAwLDU1IEBAIG15IEB0ZXN0cyA9ICgK ICAgICAgICAgICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9u YW1lfSAoYSkgVkFMVUVTICgnYWFhYWEnKTspOwogICAgICAgICB9LAogICAgICAgICBleHBlY3Rl ZCAgID0+IHdyYXAoInJldm1hcCBkb2Vzbid0IHBvaW50IHRvIGluZGV4IHR1cGxlLiBSYW5nZSBi bGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSkiKQorICAgIH0s CisgICAgeworICAgICAgICAjIHJhbmdlIGlzIG1hcmtlZCBhcyBlbXB0eV9yYW5nZSwgYnV0IGhl YXAgaGFzIHNvbWUgZGF0YSBmb3IgdGhlIHJhbmdlCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFj aygnTENDJywgMCwgMHg4OCwgMHgwMyksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycs IDAsIDB4QTgsIDB4MDEpLAorICAgICAgICBibGtubyAgICAgID0+IDIsICMgcmVndWxhciBwYWdl CisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1 Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0 LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAobnVsbCk7KTsKKyAgICAgICAgfSwKKyAgICAgICAg ZXhwZWN0ZWQgICA9PiB3cmFwKCdyYW5nZSBpcyBtYXJrZWQgYXMgZW1wdHkgYnV0IGNvbnRhaW5z IHF1YWxpZmllZCBsaXZlIHR1cGxlcy4gUmFuZ2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDEpJykK KyAgICB9LAorICAgIHsKKyAgICAgICAgIyByYW5nZSBoYXNudWxscyAmIGFsbG51bGxzIGFyZSBm YWxzZSwgYnV0IGhlYXAgY29udGFpbnMgbnVsbCB2YWx1ZXMgZm9yIHRoZSByYW5nZQorCisgICAg ICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgsIDB4MDIpLAorICAgICAgICByZXBs YWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweDg4LCAweDAwKSwKKyAgICAgICAgYmxrbm8gICAgICA9 PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICB0YWJsZV9kYXRhID0+IHN1YiB7CisgICAgICAg ICAgICBteSAoJHRlc3Rfc3RydWN0KSA9IEBfOworICAgICAgICAgICAgcmV0dXJuIHFxKElOU0VS VCBJTlRPICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhKSBWQUxVRVMgKG51bGwpLCAoJ2Fh YWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFwKCdyYW5nZSBo YXNudWxscyBhbmQgYWxsbnVsbHMgYXJlIGZhbHNlLCBidXQgY29udGFpbnMgYSBudWxsIHZhbHVl LiBSYW5nZSBibGtubzogMCwgaGVhcCB0aWQgKDAsMSknKQorICAgIH0sCisgICAgeworICAgICAg ICAjIHJhbmdlIGFsbG51bGxzIGlzIHRydWUsIGJ1dCBoZWFwIGNvbnRhaW5zIG5vbi1udWxsIHZh bHVlcyBmb3IgdGhlIHJhbmdlCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywgMCwg MHg4OCwgMHgwMiksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgsIDB4 MDEpLAorICAgICAgICBibGtubyAgICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRh YmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87Cisg ICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFt ZX0gKGEpIFZBTFVFUyAobnVsbCksICgnYWFhYWEnKTspOworICAgICAgICB9LAorICAgICAgICBl eHBlY3RlZCAgID0+IHdyYXAoJ3JhbmdlIGFsbG51bGxzIGlzIHRydWUsIGJ1dCBjb250YWlucyBu b25udWxsIHZhbHVlLiBSYW5nZSBibGtubzogMCwgaGVhcCB0aWQgKDAsMiknKQorICAgIH0sCisg ICAgeworICAgICAgICAjIGNvbnNpc3RlbnQgZnVuY3Rpb24gcmV0dXJuIEZBTFNFIGZvciB0aGUg dmFsaWQgaGVhcCB2YWx1ZQorICAgICAgICAjIHJlcGxhY2UgImNjY2NjIiB3aXRoICJiYmJiYiIg c28gdGhhdCBtaW5fbWF4IGluZGV4IHdhcyB0b28gbmFycm93CisKKyAgICAgICAgZmluZCAgICAg ICA9PiAnY2NjY2MnLAorICAgICAgICByZXBsYWNlICAgID0+ICdiYmJiYicsCisgICAgICAgIGJs a25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIg eworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVy biBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTICgn YWFhYWEnKSwgKCdjY2NjYycpOyk7CisgICAgICAgIH0sCisgICAgICAgIGV4cGVjdGVkICAgPT4g d3JhcCgnaGVhcCB0dXBsZSBpbmNvbnNpc3RlbnQgd2l0aCBpbmRleC4gUmFuZ2UgYmxrbm86IDAs IGhlYXAgdGlkICgwLDIpJykKICAgICB9CiApOwogCkBAIC0yNDEsNyArMjkwLDcgQEAgZm9yZWFj aCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgewogJG5vZGUtPnN0YXJ0OwogCiBmb3JlYWNoIG15 ICR0ZXN0X3N0cnVjdCAoQHRlc3RzKSB7Ci0gICAgbXkgKCRyZXN1bHQsICRzdGRvdXQsICRzdGRl cnIpID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcXEoU0VMRUNUIGJyaW5faW5kZXhfY2hlY2so JyR0ZXN0X3N0cnVjdC0+e2luZGV4X25hbWV9JywgdHJ1ZSkpKTsKKyAgICBteSAoJHJlc3VsdCwg JHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBxcShTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnJHRlc3Rfc3RydWN0LT57aW5kZXhfbmFtZX0nLCB0cnVlLCB0cnVlKSkp OwogICAgIGxpa2UoJHN0ZGVyciwgJHRlc3Rfc3RydWN0LT57ZXhwZWN0ZWR9KTsKIH0KIApkaWZm IC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMgYi9jb250cmliL2FtY2hlY2sv dmVyaWZ5X2JyaW4uYwppbmRleCBkNDAyNGU3NmI1Ni4uYjdiZjE1MTM3MzQgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJp ZnlfYnJpbi5jCkBAIC0zOSw2ICszOSw4IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5DaGVja1N0YXRl CiAJLyogQ2hlY2sgYXJndW1lbnRzICovCiAKIAlib29sCQlyZWd1bGFycGFnZXNjaGVjazsKKwli b29sCQloZWFwYWxsaW5kZXhlZDsKKwlBcnJheVR5cGUgICpjb25zaXN0ZW50X29wZXJfbmFtZXM7 CiAKIAkvKiBCUklOIGNoZWNrIGNvbW1vbiBmaWVsZHMgKi8KIApAQCAtNjcsNiArNjksMzAgQEAg dHlwZWRlZiBzdHJ1Y3QgQnJpbkNoZWNrU3RhdGUKIAlQYWdlCQlyZWdwYWdlOwogCU9mZnNldE51 bWJlciByZWdwYWdlb2Zmc2V0OwogCisJLyogSGVhcCBhbGwgaW5kZXhlZCBjaGVjayBmaWVsZHMg Ki8KKworCVN0cmluZwkgICoqb3BlcmF0b3JOYW1lczsKKwlCcmluUmV2bWFwICpyZXZtYXA7CisJ QnVmZmVyCQlidWY7CisJRm1nckluZm8gICAqY29uc2lzdGVudEZuOworCS8qIFNjYW4ga2V5cyBm b3IgcmVndWxhciB2YWx1ZXMgKi8KKwlTY2FuS2V5ICAgICpub25udWxsX3NrOworCS8qIFNjYW4g a2V5cyBmb3IgbnVsbCB2YWx1ZXMgKi8KKwlTY2FuS2V5ICAgICppc251bGxfc2s7CisJZG91Ymxl CQlyYW5nZV9jbnQ7CisJLyogZmlyc3QgYmxvY2sgb2YgdGhlIG5leHQgcmFuZ2UgKi8KKwlCbG9j a051bWJlciBuZXh0cmFuZ2VCbGs7CisKKwkvKgorCSAqIGNoZWNrYWJsZV9yYW5nZSBzaG93cyBp ZiBjdXJyZW50IHJhbmdlIGNvdWxkIGJlIGNoZWNrZWQgYW5kIGR0dXAKKwkgKiBjb250YWlucyB2 YWxpZCBpbmRleCB0dXBsZSBmb3IgdGhlIHJhbmdlLiBJdCBjb3VsZCBiZSBmYWxzZSBpZiB0aGUK KwkgKiBjdXJyZW50IHJhbmdlIGlzIG5vdCBzdW1tYXJpemVkLCBvciBpdCdzIHBsYWNlaG9sZGVy LCBvciBpdCdzIGp1c3QgYQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY2hlY2sKKwkgKi8KKwlib29s CQljaGVja2FibGVfcmFuZ2U7CisJQnJpbk1lbVR1cGxlICpkdHVwOworCU1lbW9yeUNvbnRleHQg cmFuZ2VDdHg7CisJTWVtb3J5Q29udGV4dCBoZWFwdHVwbGVDdHg7CiB9CQkJQnJpbkNoZWNrU3Rh dGU7CiAKIHN0YXRpYyB2b2lkIGJyaW5fY2hlY2soUmVsYXRpb24gaWR4cmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCB2b2lkICpjYWxsYmFja19zdGF0ZSwgYm9vbCByZWFkb25seSk7CkBAIC04Nyw2ICsx MTMsMjMgQEAgc3RhdGljIGJvb2wgcmV2bWFwX3BvaW50c190b19pbmRleF90dXBsZShCcmluQ2hl Y2tTdGF0ZSAqIHN0YXRlKTsKIAogc3RhdGljIEl0ZW1JZCBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChC cmluQ2hlY2tTdGF0ZSAqIHN0YXRlKTsKIAorc3RhdGljIHZvaWQgY2hlY2tfaGVhcF9hbGxfaW5k ZXhlZChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKTsKKworc3RhdGljIHZvaWQgY2hlY2tfYW5kX3By ZXBhcmVfb3BlcmF0b3JfbmFtZXMoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2 b2lkIGJyaW5fY2hlY2tfY2FsbGJhY2soUmVsYXRpb24gaW5kZXgsCisJCQkJCQkJCUl0ZW1Qb2lu dGVyIHRpZCwKKwkJCQkJCQkJRGF0dW0gKnZhbHVlcywKKwkJCQkJCQkJYm9vbCAqaXNudWxsLAor CQkJCQkJCQlib29sIHR1cGxlSXNBbGl2ZSwKKwkJCQkJCQkJdm9pZCAqYnJzdGF0ZSk7CisKK3N0 YXRpYyB2b2lkIGNoZWNrX2hlYXBfdHVwbGUoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3Qg RGF0dW0gKnZhbHVlcywgY29uc3QgYm9vbCAqbnVsbHMsIEl0ZW1Qb2ludGVyIHRpZCk7CisKK3N0 YXRpYyBTY2FuS2V5IHByZXBhcmVfbm9ubnVsbF9zY2FuX2tleShjb25zdCBCcmluQ2hlY2tTdGF0 ZSAqIHN0YXRlLCBBdHRyTnVtYmVyIGF0dG5vKTsKKworc3RhdGljIFNjYW5LZXkgcHJlcGFyZV9p c251bGxfc2Nhbl9rZXkoQXR0ck51bWJlciBhdHRubyk7CisKIHN0YXRpYyB2b2lkIGJyaW5fY2hl Y2tfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpOwogCiBz dGF0aWMgdm9pZCByZXZtYXBfaXRlbV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNv bnN0IGNoYXIgKmZtdCk7CkBAIC05NSw2ICsxMzgsNyBAQCBzdGF0aWMgdm9pZCBpbmRleF90dXBs ZV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7CiAKIHN0 YXRpYyB2b2lkIGluZGV4X3R1cGxlX29ubHlfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRl LCBjb25zdCBjaGFyICpmbXQpOwogCitzdGF0aWMgdm9pZCBoZWFwX2FsbF9pbmRleGVkX2VyZXBv cnQoY29uc3QgQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0 aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiBEYXR1bQogYnJpbl9pbmRleF9jaGVjayhQR19G VU5DVElPTl9BUkdTKQpAQCAtMTAzLDYgKzE0Nyw4IEBAIGJyaW5faW5kZXhfY2hlY2soUEdfRlVO Q1RJT05fQVJHUykKIAlCcmluQ2hlY2tTdGF0ZSAqc3RhdGUgPSBwYWxsb2MwKHNpemVvZihCcmlu Q2hlY2tTdGF0ZSkpOwogCiAJc3RhdGUtPnJlZ3VsYXJwYWdlc2NoZWNrID0gUEdfR0VUQVJHX0JP T0woMSk7CisJc3RhdGUtPmhlYXBhbGxpbmRleGVkID0gUEdfR0VUQVJHX0JPT0woMik7CisJc3Rh dGUtPmNvbnNpc3RlbnRfb3Blcl9uYW1lcyA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgzKTsKIAog CWFtY2hlY2tfbG9ja19yZWxhdGlvbl9hbmRfY2hlY2soaW5kcmVsaWQsCiAJCQkJCQkJCQlCUklO X0FNX09JRCwKQEAgLTEyNyw5ICsxNzMsMjcgQEAgYnJpbl9jaGVjayhSZWxhdGlvbiBpZHhyZWws IFJlbGF0aW9uIGhlYXByZWwsIHZvaWQgKmNhbGxiYWNrX3N0YXRlLCBib29sIHJlYWRvbmwKIAlz dGF0ZS0+YmRlc2MgPSBicmluX2J1aWxkX2Rlc2MoaWR4cmVsKTsKIAlzdGF0ZS0+bmF0dHMgPSBz dGF0ZS0+YmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRzOwogCisJLyoKKwkgKiBXZSBrbm93IGhvdyBt YW55IGF0dHJpYnV0ZXMgaW5kZXggaGFzLCBzbyBsZXQncyBwcm9jZXNzIG9wZXJhdG9yIG5hbWVz CisJICogYXJyYXkKKwkgKi8KKwlpZiAoc3RhdGUtPmhlYXBhbGxpbmRleGVkKQorCXsKKwkJY2hl Y2tfYW5kX3ByZXBhcmVfb3BlcmF0b3JfbmFtZXMoc3RhdGUpOworCisJCS8qCisJCSAqIENoZWNr IGlmIHdlIGFyZSBPSyB3aXRoIGluZGNoZWNreG1pbiwgYW5kIHVucmVnaXN0ZXIgc25hcHNob3Qg YXMgd2UKKwkJICogZG9uJ3QgbmVlZCBpdCBmdXJ0aGVyCisJCSAqLworCQlVbnJlZ2lzdGVyU25h cHNob3QoUmVnaXN0ZXJTbmFwc2hvdEFuZENoZWNrSW5kZXhDaGVja1hNaW4oc3RhdGUtPmlkeHJl bCkpOworCX0KIAogCWNoZWNrX2JyaW5faW5kZXhfc3RydWN0dXJlKHN0YXRlKTsKIAorCWlmIChz dGF0ZS0+aGVhcGFsbGluZGV4ZWQpCisJeworCQljaGVja19oZWFwX2FsbF9pbmRleGVkKHN0YXRl KTsKKwl9CiAKIAlicmluX2ZyZWVfZGVzYyhzdGF0ZS0+YmRlc2MpOwogfQpAQCAtNjI4LDcgKzY5 Miw2IEBAIGNoZWNrX3JlZ3VsYXJfcGFnZXMoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSkKIAlzdGF0 ZS0+cmVncGFnZW9mZnNldCA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAJc3RhdGUtPmlkeG5ibG9j a3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHN0YXRlLT5pZHhyZWwpOwogCi0KIAkvKgog CSAqIFByZXBhcmUgc3RyZWFtIGRhdGEgZm9yIHJlZ3VsYXIgcGFnZXMgd2Fsay4gSXQgaXMgc2Fm ZSB0byB1c2UgYmF0Y2htb2RlCiAJICogYXMgYmxvY2tfcmFuZ2VfcmVhZF9zdHJlYW1fY2IgdGFr ZXMgbm8gbG9ja3MuCkBAIC03ODgsNiArODUxLDQxNSBAQCBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChC cmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQogCXJldHVybiBpdGVtaWQ7CiB9CiAKKy8qCisgKiBDaGVj ayB0aGF0IGV2ZXJ5IGhlYXAgdHVwbGUgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW5kZXguCisg KgorICogSGVyZSB3ZSBnZW5lcmF0ZSBTY2FuS2V5IGZvciBldmVyeSBoZWFwIHR1cGxlIGFuZCB0 ZXN0IGl0IGFnYWluc3QKKyAqIGFwcHJvcHJpYXRlIHJhbmdlIHVzaW5nIGNvbnNpc3RlbnRGbiAo Zm9yIFNjYW5LZXkgZ2VuZXJhdGlvbiBsb2dpYyBsb29rICdwcmVwYXJlX25vbm51bGxfc2Nhbl9r ZXknKQorICoKKyAqIEFsc28sIHdlIGNoZWNrIHRoYXQgZmllbGRzICdlbXB0eV9yYW5nZScsICdh bGxfbnVsbHMnIGFuZCAnaGFzX251bGxzJworICogYXJlIG5vdCB0b28gIm5hcnJvdyIgZm9yIGVh Y2ggcmFuZ2UsIHdoaWNoIG1lYW5zOgorICogMSkgaGFzX251bGxzID0gZmFsc2UsIGJ1dCB3ZSBz ZWUgbnVsbCB2YWx1ZSAob25seSBmb3Igb2lfcmVndWxhcl9udWxscyBpcyB0cnVlKQorICogMikg YWxsX251bGxzID0gdHJ1ZSwgYnV0IHdlIHNlZSBub25udWxsIHZhbHVlLgorICogMykgZW1wdHlf cmFuZ2UgPSB0cnVlLCBidXQgd2Ugc2VlIHR1cGxlIHdpdGhpbiB0aGUgcmFuZ2UuCisgKgorICog V2UgdXNlIGFsbG93U3luYyA9IGZhbHNlLCBiZWNhdXNlIHRoaXMgd2F5CisgKiB3ZSBwcm9jZXNz IGZ1bGwgcmFuZ2VzIG9uZSBieSBvbmUgZnJvbSB0aGUgZmlyc3QgcmFuZ2UuCisgKiBJdCdzIG5v dCBuZWNlc3NhcnksIGJ1dCBtYWtlcyB0aGUgY29kZSBzaW1wbGVyIGFuZCB0aGlzIHdheQorICog d2UgbmVlZCB0byBmZXRjaCBldmVyeSBpbmRleCB0dXBsZSBvbmx5IG9uY2UuCisgKi8KK3N0YXRp YyB2b2lkCitjaGVja19oZWFwX2FsbF9pbmRleGVkKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7 CisJUmVsYXRpb24JaWR4cmVsID0gc3RhdGUtPmlkeHJlbDsKKwlSZWxhdGlvbgloZWFwcmVsID0g c3RhdGUtPmhlYXByZWw7CisJZG91YmxlCQlyZWx0dXBsZXM7CisJSW5kZXhJbmZvICAqaW5kZXhJ bmZvOworCisJLyogaGVhcCBhbGwgaW5kZXhlZCBjaGVjayBmaWVsZHMgaW5pdGlhbGl6YXRpb24g Ki8KKworCXN0YXRlLT5yZXZtYXAgPSBicmluUmV2bWFwSW5pdGlhbGl6ZShpZHhyZWwsICZzdGF0 ZS0+cGFnZXNQZXJSYW5nZSk7CisJc3RhdGUtPmR0dXAgPSBicmluX25ld19tZW10dXBsZShzdGF0 ZS0+YmRlc2MpOworCXN0YXRlLT5jaGVja2FibGVfcmFuZ2UgPSBmYWxzZTsKKwlzdGF0ZS0+Y29u c2lzdGVudEZuID0gcGFsbG9jMF9hcnJheShGbWdySW5mbywgc3RhdGUtPm5hdHRzKTsKKwlzdGF0 ZS0+cmFuZ2VfY250ID0gMDsKKwkvKiBuZXh0IHJhbmdlIGlzIHRoZSBmaXJzdCByYW5nZSBpbiB0 aGUgYmVnaW5uaW5nICovCisJc3RhdGUtPm5leHRyYW5nZUJsayA9IDA7CisJc3RhdGUtPm5vbm51 bGxfc2sgPSBwYWxsb2MwX2FycmF5KFNjYW5LZXksIHN0YXRlLT5uYXR0cyk7CisJc3RhdGUtPmlz bnVsbF9zayA9IHBhbGxvYzBfYXJyYXkoU2NhbktleSwgc3RhdGUtPm5hdHRzKTsKKwlzdGF0ZS0+ cmFuZ2VDdHggPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkJCSJicmluIGNoZWNrIHJhbmdlIGNvbnRleHQiLAorCQkJCQkJCQkJCQlBTExPQ1NF VF9ERUZBVUxUX1NJWkVTKTsKKwlzdGF0ZS0+aGVhcHR1cGxlQ3R4ID0gQWxsb2NTZXRDb250ZXh0 Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJImJyaW4gY2hlY2sgdHVw bGUgY29udGV4dCIsCisJCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCS8q CisJICogUHJlcGFyZSAibm9uLW51bGwiIGFuZCAiaXNfbnVsbCIgc2NhbiBrZXlzIGFuZCBjb25z aXN0ZW50IGZuIGZvciBlYWNoCisJICogYXR0cmlidXRlCisJICovCisJZm9yIChBdHRyTnVtYmVy IGF0dG5vID0gMTsgYXR0bm8gPD0gc3RhdGUtPm5hdHRzOyBhdHRubysrKQorCXsKKwkJRm1ncklu Zm8gICAqdG1wOworCisJCXRtcCA9IGluZGV4X2dldHByb2NpbmZvKGlkeHJlbCwgYXR0bm8sIEJS SU5fUFJPQ05VTV9DT05TSVNURU5UKTsKKwkJZm1ncl9pbmZvX2NvcHkoJnN0YXRlLT5jb25zaXN0 ZW50Rm5bYXR0bm8gLSAxXSwgdG1wLCBDdXJyZW50TWVtb3J5Q29udGV4dCk7CisKKwkJc3RhdGUt Pm5vbm51bGxfc2tbYXR0bm8gLSAxXSA9IHByZXBhcmVfbm9ubnVsbF9zY2FuX2tleShzdGF0ZSwg YXR0bm8pOworCQlzdGF0ZS0+aXNudWxsX3NrW2F0dG5vIC0gMV0gPSBwcmVwYXJlX2lzbnVsbF9z Y2FuX2tleShhdHRubyk7CisJfQorCisJaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaWR4cmVs KTsKKworCS8qCisJICogVXNlIHNuYXBzaG90IHRvIGNoZWNrIG9ubHkgdGhvc2UgdHVwbGVzIHRo YXQgYXJlIGd1YXJhbnRlZWQgdG8gYmUKKwkgKiBpbmRleGVkIGFscmVhZHkuIFVzaW5nIFNuYXBz aG90QW55IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gc2F5CisJICogaWYgdGhlcmUg aXMgYSBjb3JydXB0aW9uIG9yIGNoZWNrZWQgdHVwbGUganVzdCBoYXZlbid0IGJlZW4gaW5kZXhl ZAorCSAqIHlldC4gQWxzbywgd2Ugd2FudCB0byBzdXBwb3J0IENJQyBpbmRleGVzLgorCSAqLwor CWluZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IHRydWU7CisJcmVsdHVwbGVzID0gdGFibGVfaW5k ZXhfYnVpbGRfc2NhbihoZWFwcmVsLCBpZHhyZWwsIGluZGV4SW5mbywgZmFsc2UsIHRydWUsCisJ CQkJCQkJCQkgICBicmluX2NoZWNrX2NhbGxiYWNrLCAodm9pZCAqKSBzdGF0ZSwgTlVMTCk7CisK KwllbG9nKERFQlVHMywgInJhbmdlcyB3ZXJlIGNoZWNrZWQ6ICVmIiwgc3RhdGUtPnJhbmdlX2Nu dCk7CisJZWxvZyhERUJVRzMsICJzY2FuIHRvdGFsIHR1cGxlczogJWYiLCByZWx0dXBsZXMpOwor CisJaWYgKHN0YXRlLT5idWYgIT0gSW52YWxpZEJ1ZmZlcikKKwkJUmVsZWFzZUJ1ZmZlcihzdGF0 ZS0+YnVmKTsKKworCWJyaW5SZXZtYXBUZXJtaW5hdGUoc3RhdGUtPnJldm1hcCk7CisJTWVtb3J5 Q29udGV4dERlbGV0ZShzdGF0ZS0+cmFuZ2VDdHgpOworCU1lbW9yeUNvbnRleHREZWxldGUoc3Rh dGUtPmhlYXB0dXBsZUN0eCk7Cit9CisKKy8qCisgKiBDaGVjayBvcGVyYXRvciBuYW1lcyBhcnJh eSBpbnB1dCBwYXJhbWV0ZXIgYW5kIGNvbnZlcnQgaXQgdG8gYXJyYXkgb2Ygc3RyaW5ncworICog RW1wdHkgaW5wdXQgYXJyYXkgbWVhbnMgd2UgdXNlICI9IiBvcGVyYXRvciBmb3IgZXZlcnkgYXR0 cmlidXRlCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19hbmRfcHJlcGFyZV9vcGVyYXRvcl9uYW1l cyhCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCU9pZAkJCWVsZW1lbnRfdHlwZSA9IEFSUl9F TEVNVFlQRShzdGF0ZS0+Y29uc2lzdGVudF9vcGVyX25hbWVzKTsKKwlpbnQxNgkJdHlwbGVuOwor CWJvb2wJCXR5cGJ5dmFsOworCWNoYXIJCXR5cGFsaWduOworCURhdHVtCSAgICp2YWx1ZXM7CisJ Ym9vbAkgICAqZWxlbV9udWxsczsKKwlpbnQJCQludW1fZWxlbXM7CisKKwlzdGF0ZS0+b3BlcmF0 b3JOYW1lcyA9IHBhbGxvYyhzaXplb2YoU3RyaW5nKSAqIHN0YXRlLT5uYXR0cyk7CisKKwlnZXRf dHlwbGVuYnl2YWxhbGlnbihlbGVtZW50X3R5cGUsICZ0eXBsZW4sICZ0eXBieXZhbCwgJnR5cGFs aWduKTsKKwlkZWNvbnN0cnVjdF9hcnJheShzdGF0ZS0+Y29uc2lzdGVudF9vcGVyX25hbWVzLCBl bGVtZW50X3R5cGUsIHR5cGxlbiwgdHlwYnl2YWwsIHR5cGFsaWduLAorCQkJCQkgICZ2YWx1ZXMs ICZlbGVtX251bGxzLCAmbnVtX2VsZW1zKTsKKworCS8qIElmIHdlIGhhdmUgc29tZSBpbnB1dCBj aGVjayBpdCBhbmQgY29udmVydCB0byBTdHJpbmcqKiAqLworCWlmIChudW1fZWxlbXMgIT0gMCkK Kwl7CisJCWlmIChudW1fZWxlbXMgIT0gc3RhdGUtPm5hdHRzKQorCQl7CisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJIGVycm1zZygiT3BlcmF0b3IgbmFtZXMgYXJyYXkgbGVuZ3RoICV1LCBidXQgaW5kZXggaGFz ICV1IGF0dHJpYnV0ZXMiLAorCQkJCQkJCW51bV9lbGVtcywgc3RhdGUtPm5hdHRzKSkpOworCQl9 CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZWxlbXM7IGkrKykKKwkJeworCQkJaWYgKGVs ZW1fbnVsbHNbaV0pCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiT3BlcmF0b3Ig bmFtZXMgYXJyYXkgY29udGFpbnMgTlVMTCIpKSk7CisJCQl9CisJCQlzdGF0ZS0+b3BlcmF0b3JO YW1lc1tpXSA9IG1ha2VTdHJpbmcoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZXNbaV0pKTsKKwkJ fQorCX0KKwllbHNlCisJeworCQkvKiBJZiB0aGVyZSBpcyBubyBpbnB1dCBqdXN0IHVzZSAiPSIg b3BlcmF0b3IgZm9yIGFsbCBhdHRyaWJ1dGVzICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc3Rh dGUtPm5hdHRzOyBpKyspCisJCXsKKwkJCXN0YXRlLT5vcGVyYXRvck5hbWVzW2ldID0gbWFrZVN0 cmluZygiPSIpOworCQl9CisJfQorfQorCisvKgorICogUHJlcGFyZSBTY2FuS2V5IGZvciBpbmRl eCBhdHRyaWJ1dGUuCisgKgorICogQ29uc2lzdGVudEZuIHJlcXVpcmVzIFNjYW5LZXksIHNvIHdl IG5lZWQgdG8gZ2VuZXJhdGUgU2NhbktleSBmb3IgZXZlcnkKKyAqIGF0dHJpYnV0ZSBzb21laG93 LiBXZSB3YW50IFNjYW5LZXkgdGhhdCB3b3VsZCByZXN1bHQgaW4gVFJVRSBmb3IgZXZlcnkgaGVh cAorICogdHVwbGUgd2l0aGluIHRoZSByYW5nZSB3aGVuIHdlIHVzZSBpdHMgaW5kZXhlZCB2YWx1 ZSBhcyBza19hcmd1bWVudC4KKyAqIFRvIGdlbmVyYXRlIHN1Y2ggYSBTY2FuS2V5IHdlIG5lZWQg dG8gZGVmaW5lIHRoZSByaWdodCBvcGVyYW5kIHR5cGUgYW5kIHRoZSBzdHJhdGVneSBudW1iZXIu CisgKiBSaWdodCBvcGVyYW5kIHR5cGUgaXMgYSB0eXBlIG9mIGRhdGEgdGhhdCBpbmRleCBpcyBi dWlsdCBvbiwgc28gaXQncyAnb3BjaW50eXBlJy4KKyAqIFRoZXJlIGlzIG5vIHN0cmF0ZWd5IG51 bWJlciB0aGF0IHdlIGNhbiBhbHdheXMgdXNlLAorICogYmVjYXVzZSBldmVyeSBvcGNsYXNzIGRl ZmluZXMgaXRzIG93biBzZXQgb2Ygb3BlcmF0b3JzIGl0IHN1cHBvcnRzIGFuZCBzdHJhdGVneSBu dW1iZXIKKyAqIGZvciB0aGUgc2FtZSBvcGVyYXRvciBjYW4gZGlmZmVyIGZyb20gb3BjbGFzcyB0 byBvcGNsYXNzLgorICogU28gdG8gZ2V0IHN0cmF0ZWd5IG51bWJlciB3ZSBsb29rIHVwIGFuIG9w ZXJhdG9yIHRoYXQgZ2l2ZXMgdXMgZGVzaXJlZCBiZWhhdmlvcgorICogYW5kIHdoaWNoIGJvdGgg b3BlcmFuZCB0eXBlcyBhcmUgJ29wY2ludHlwZScgYW5kIHRoZW4gcmV0cmlldmUgdGhlIHN0cmF0 ZWd5IG51bWJlciBmb3IgaXQuCisgKiBNb3N0IG9mIHRoZSB0aW1lIHdlIGNhbiB1c2UgJz0nLiBX ZSBsZXQgdXNlciBkZWZpbmUgb3BlcmF0b3IgbmFtZSBpbiBjYXNlIG9wY2xhc3MgZG9lc24ndAor ICogc3VwcG9ydCAnPScgb3BlcmF0b3IuIEFsc28sIGlmIHN1Y2ggb3BlcmF0b3IgZG9lc24ndCBl eGlzdCwgd2UgY2FuJ3QgcHJvY2VlZCB3aXRoIHRoZSBjaGVjay4KKyAqCisgKiBHZW5lcmF0ZWQg b25jZSwgYW5kIHdpbGwgYmUgcmV1c2VkIGZvciBhbGwgaGVhcCB0dXBsZXMuCisgKiBBcmd1bWVu dCBmaWVsZCB3aWxsIGJlIGZpbGxlZCBmb3IgZXZlcnkgaGVhcCB0dXBsZSBiZWZvcmUKKyAqIGNv bnNpc3RlbnQgZnVuY3Rpb24gaW52b2NhdGlvbiwgc28gbGVhdmUgaXQgTlVMTCBmb3IgYSB3aGls ZS4KKyAqCisgKi8KK3N0YXRpYyBTY2FuS2V5CitwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXkoY29u c3QgQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgQXR0ck51bWJlciBhdHRubykKK3sKKwlTY2FuS2V5 CQlzY2FuS2V5OworCU9pZAkJCW9wT2lkOworCU9pZAkJCW9wRmFtaWx5T2lkOworCWJvb2wJCWRl ZmluZWQ7CisJU3RyYXRlZ3lOdW1iZXIgc3RyYXRlZ3k7CisJUmVnUHJvY2VkdXJlIG9wUmVnUHJv YzsKKwlMaXN0CSAgICpvcGVyTmFtZUxpc3Q7CisJaW50CQkJYXR0aW5kZXggPSBhdHRubyAtIDE7 CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIoc3RhdGUtPmJkZXNjLT5i ZF90dXBkZXNjLCBhdHRpbmRleCk7CisJT2lkCQkJdHlwZSA9IHN0YXRlLT5pZHhyZWwtPnJkX29w Y2ludHlwZVthdHRpbmRleF07CisJU3RyaW5nCSAgICpvcG5hbWUgPSBzdGF0ZS0+b3BlcmF0b3JO YW1lc1thdHRubyAtIDFdOworCisJb3BGYW1pbHlPaWQgPSBzdGF0ZS0+aWR4cmVsLT5yZF9vcGZh bWlseVthdHRpbmRleF07CisJb3Blck5hbWVMaXN0ID0gbGlzdF9tYWtlMShvcG5hbWUpOworCW9w T2lkID0gT3BlcmF0b3JMb29rdXAob3Blck5hbWVMaXN0LCB0eXBlLCB0eXBlLCAmZGVmaW5lZCk7 CisKKwlpZiAob3BPaWQgPT0gSW52YWxpZE9pZCkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfRlVOQ1RJT04pLAorCQkJCSBlcnJtc2coIlRoZXJl IGlzIG5vIG9wZXJhdG9yICVzIGZvciB0eXBlICV1IiwKKwkJCQkJCW9wbmFtZS0+c3ZhbCwgdHlw ZSkpKTsKKwl9CisKKwlzdHJhdGVneSA9IGdldF9vcF9vcGZhbWlseV9zdHJhdGVneShvcE9pZCwg b3BGYW1pbHlPaWQpOworCisJaWYgKHN0cmF0ZWd5ID09IDApCisJeworCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCSBlcnJtc2co Im9wZXJhdG9yICVzIGlzIG5vdCBhIG1lbWJlciBvZiBvcGVyYXRvciBmYW1pbHkgXCIlc1wiIiwK KwkJCQkJCW9wbmFtZS0+c3ZhbCwKKwkJCQkJCWdldF9vcGZhbWlseV9uYW1lKG9wRmFtaWx5T2lk LCBmYWxzZSkpKSk7CisJfQorCisJb3BSZWdQcm9jID0gZ2V0X29wY29kZShvcE9pZCk7CisJc2Nh bktleSA9IHBhbGxvYzAoc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJU2NhbktleUVudHJ5SW5pdGlh bGl6ZSgKKwkJCQkJCSAgIHNjYW5LZXksCisJCQkJCQkgICAwLAorCQkJCQkJICAgYXR0bm8sCisJ CQkJCQkgICBzdHJhdGVneSwKKwkJCQkJCSAgIHR5cGUsCisJCQkJCQkgICBhdHRyLT5hdHRjb2xs YXRpb24sCisJCQkJCQkgICBvcFJlZ1Byb2MsCisJCQkJCQkgICAoRGF0dW0pIE5VTEwKKwkJKTsK KwlwZnJlZShvcGVyTmFtZUxpc3QpOworCisJcmV0dXJuIHNjYW5LZXk7Cit9CisKK3N0YXRpYyBT Y2FuS2V5CitwcmVwYXJlX2lzbnVsbF9zY2FuX2tleShBdHRyTnVtYmVyIGF0dG5vKQoreworCVNj YW5LZXkJCXNjYW5LZXk7CisKKwlzY2FuS2V5ID0gcGFsbG9jMChzaXplb2YoU2NhbktleURhdGEp KTsKKwlTY2FuS2V5RW50cnlJbml0aWFsaXplKHNjYW5LZXksCisJCQkJCQkgICBTS19JU05VTEwg fCBTS19TRUFSQ0hOVUxMLAorCQkJCQkJICAgYXR0bm8sCisJCQkJCQkgICBJbnZhbGlkU3RyYXRl Z3ksCisJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCSAg IEludmFsaWRPaWQsCisJCQkJCQkgICAoRGF0dW0pIDApOworCXJldHVybiBzY2FuS2V5OworfQor CisvKgorICogV2Ugd2FsayBmcm9tIHRoZSBmaXJzdCByYW5nZSAoYmxrbm8gPSAwKSB0byB0aGUg bGFzdCBhcyB0aGUgc2NhbiBwcm9jZWVkLgorICogRm9yIGV2ZXJ5IGhlYXAgdHVwbGUgd2UgY2hl Y2sgaWYgd2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCByYW5nZSwgYW5kIHdlIG5lZWQgdG8g bW92ZSBmdXJ0aGVyCisgKiB0byB0aGUgY3VycmVudCBoZWFwIHR1cGxlJ3MgcmFuZ2UuIFdoaWxl IG1vdmluZyB0byB0aGUgbmV4dCByYW5nZSB3ZSBjaGVjayB0aGF0IGl0J3Mgbm90IGVtcHR5IChi ZWNhdXNlCisgKiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB0dXBsZSBmb3IgdGhpcyByYW5nZSkuCisg KiBFdmVyeSBoZWFwIHR1cGxlIGFyZSBjaGVja2VkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUg cmFuZ2UgaXQgYmVsb25ncyB0by4KKyAqIEluIGNhc2Ugb2YgdW5zdW1tYXJpemVkIHJhbmdlcyBh bmQgcGxhY2Vob2xkZXJzIHdlIHNraXAgYWxsIGNoZWNrcy4KKyAqCisgKiBXaGlsZSBtb3Zpbmcs IHdlIG1heSBqdW1wIG92ZXIgc29tZSByYW5nZXMsCisgKiBidXQgaXQncyBva2F5IGJlY2F1c2Ug d2Ugd291bGQgbm90IGJlIGFibGUgdG8gY2hlY2sgdGhlbSBhbnl3YXkuCisgKiBXZSBhbHNvIGNh bid0IHNheSB3aGV0aGVyIHNraXBwZWQgcmFuZ2VzIHNob3VsZCBiZSBtYXJrZWQgYXMgZW1wdHkg b3Igbm90LAorICogc2luY2UgaXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdlcmUgc29tZSB0dXBs ZXMgYmVmb3JlIHRoYXQgYXJlIG5vdyBkZWxldGVkLgorICoKKyAqLworc3RhdGljIHZvaWQKK2Jy aW5fY2hlY2tfY2FsbGJhY2soUmVsYXRpb24gaW5kZXgsIEl0ZW1Qb2ludGVyIHRpZCwgRGF0dW0g KnZhbHVlcywgYm9vbCAqaXNudWxsLCBib29sIHR1cGxlSXNBbGl2ZSwgdm9pZCAqYnJzdGF0ZSkK K3sKKwlCcmluQ2hlY2tTdGF0ZSAqc3RhdGU7CisJQmxvY2tOdW1iZXIgaGVhcGJsazsKKworCXN0 YXRlID0gKEJyaW5DaGVja1N0YXRlICopIGJyc3RhdGU7CisJaGVhcGJsayA9IEl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIodGlkKTsKKworCS8qIElmIHdlIHdlbnQgYmV5b25kIHRoZSBjdXJyZW50 IHJhbmdlIGxldCdzIGZldGNoIG5ldyByYW5nZSAqLworCWlmIChoZWFwYmxrID49IHN0YXRlLT5u ZXh0cmFuZ2VCbGspCisJeworCQlCcmluVHVwbGUgICp0dXA7CisJCUJyaW5UdXBsZSAgKnR1cGNv cHkgPSBOVUxMOworCQlNZW1vcnlDb250ZXh0IG9sZEN0eDsKKwkJT2Zmc2V0TnVtYmVyIG9mZjsK KwkJU2l6ZQkJc2l6ZTsKKwkJU2l6ZQkJYnR1cHN6ID0gMDsKKworCQlNZW1vcnlDb250ZXh0UmVz ZXQoc3RhdGUtPnJhbmdlQ3R4KTsKKwkJb2xkQ3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0 YXRlLT5yYW5nZUN0eCk7CisKKwkJc3RhdGUtPnJhbmdlX2NudCsrOworCisJCS8qIE1vdmUgdG8g dGhlIHJhbmdlIHRoYXQgY29udGFpbnMgY3VycmVudCBoZWFwIHR1cGxlICovCisJCXR1cCA9IGJy aW5HZXRUdXBsZUZvckhlYXBCbG9jayhzdGF0ZS0+cmV2bWFwLCBoZWFwYmxrLCAmc3RhdGUtPmJ1 ZiwKKwkJCQkJCQkJCSAgICZvZmYsICZzaXplLCBCVUZGRVJfTE9DS19TSEFSRSk7CisKKwkJaWYg KHR1cCkKKwkJeworCQkJdHVwY29weSA9IGJyaW5fY29weV90dXBsZSh0dXAsIHNpemUsIHR1cGNv cHksICZidHVwc3opOworCQkJTG9ja0J1ZmZlcihzdGF0ZS0+YnVmLCBCVUZGRVJfTE9DS19VTkxP Q0spOworCQkJc3RhdGUtPmR0dXAgPSBicmluX2RlZm9ybV90dXBsZShzdGF0ZS0+YmRlc2MsIHR1 cGNvcHksIHN0YXRlLT5kdHVwKTsKKworCQkJLyogV2UgY2FuJ3QgY2hlY2sgcGxhY2Vob2xkZXIg cmFuZ2VzICovCisJCQlzdGF0ZS0+Y2hlY2thYmxlX3JhbmdlID0gIXN0YXRlLT5kdHVwLT5idF9w bGFjZWhvbGRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIFdlIGNhbid0IGNoZWNrIHVuc3Vt bWFyaXplZCByYW5nZXMuICovCisJCQlzdGF0ZS0+Y2hlY2thYmxlX3JhbmdlID0gZmFsc2U7CisJ CX0KKworCQkvKgorCQkgKiBVcGRhdGUgbmV4dHJhbmdlQmxrIHNvIHdlIGtub3cgd2hlbiB3ZSBh cmUgZG9uZSB3aXRoIHRoZSBjdXJyZW50CisJCSAqIHJhbmdlCisJCSAqLworCQlzdGF0ZS0+bmV4 dHJhbmdlQmxrID0gKGhlYXBibGsgLyBzdGF0ZS0+cGFnZXNQZXJSYW5nZSArIDEpICogc3RhdGUt PnBhZ2VzUGVyUmFuZ2U7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN0eCk7CisKKwkJ LyogUmFuZ2UgbXVzdCBub3QgYmUgZW1wdHkgKi8KKwkJaWYgKHN0YXRlLT5jaGVja2FibGVfcmFu Z2UgJiYgc3RhdGUtPmR0dXAtPmJ0X2VtcHR5X3JhbmdlKQorCQl7CisJCQloZWFwX2FsbF9pbmRl eGVkX2VyZXBvcnQoc3RhdGUsIHRpZCwgInJhbmdlIGlzIG1hcmtlZCBhcyBlbXB0eSBidXQgY29u dGFpbnMgcXVhbGlmaWVkIGxpdmUgdHVwbGVzIik7CisJCX0KKworCX0KKworCS8qIENoZWNrIHR1 cGxlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW5kZXggKi8KKwlpZiAoc3RhdGUtPmNoZWNrYWJs ZV9yYW5nZSkKKwl7CisJCWNoZWNrX2hlYXBfdHVwbGUoc3RhdGUsIHZhbHVlcywgaXNudWxsLCB0 aWQpOworCX0KKworfQorCisvKgorICogV2UgY2hlY2sgaGFzbnVsbHMgZmxhZ3MgZm9yIG51bGwg dmFsdWVzIGFuZCBvaV9yZWd1bGFyX251bGxzID0gdHJ1ZSwKKyAqIGNoZWNrIGFsbG51bGxzIGlz IGZhbHNlIGZvciBhbGwgbm9ubnVsbCB2YWx1ZXMgbm90IG1hdHRlciBvaV9yZWd1bGFyX251bGxz IGlzIHNldCBvciBub3QsCisgKiBGb3IgYWxsIG90aGVyIGNhc2VzIHdlIGNhbGwgY29uc2lzdGVu dEZuIHdpdGggYXBwcm9wcmlhdGUgc2NhbktleToKKyAqIC0gZm9yIG9pX3JlZ3VsYXJfbnVsbHMg PSBmYWxzZSBhbmQgbnVsbCB2YWx1ZXMgd2UgdXNlICdpc051bGwnIHNjYW5LZXksCisgKiAtIGZv ciBub25udWxsIHZhbHVlcyB3ZSB1c2UgJ25vbm51bGwnIHNjYW5LZXkKKyAqLworc3RhdGljIHZv aWQKK2NoZWNrX2hlYXBfdHVwbGUoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgRGF0dW0g KnZhbHVlcywgY29uc3QgYm9vbCAqbnVsbHMsIEl0ZW1Qb2ludGVyIHRpZCkKK3sKKwlpbnQJCQlh dHRpbmRleDsKKwlCcmluTWVtVHVwbGUgKmR0dXAgPSBzdGF0ZS0+ZHR1cDsKKwlCcmluRGVzYyAg ICpiZGVzYyA9IHN0YXRlLT5iZGVzYzsKKwlNZW1vcnlDb250ZXh0IG9sZEN0eDsKKworCUFzc2Vy dChzdGF0ZS0+Y2hlY2thYmxlX3JhbmdlKTsKKworCU1lbW9yeUNvbnRleHRSZXNldChzdGF0ZS0+ aGVhcHR1cGxlQ3R4KTsKKwlvbGRDdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPmhl YXB0dXBsZUN0eCk7CisKKwkvKiBjaGVjayBldmVyeSBpbmRleCBhdHRyaWJ1dGUgKi8KKwlmb3Ig KGF0dGluZGV4ID0gMDsgYXR0aW5kZXggPCBzdGF0ZS0+bmF0dHM7IGF0dGluZGV4KyspCisJewor CQlCcmluVmFsdWVzICpidmFsOworCQlEYXR1bQkJY29uc2lzdGVudEZuUmVzdWx0OworCQlib29s CQljb25zaXN0ZW50OworCQlTY2FuS2V5CQlzY2FuS2V5OworCQlib29sCQlvaV9yZWd1bGFyX251 bGxzID0gYmRlc2MtPmJkX2luZm9bYXR0aW5kZXhdLT5vaV9yZWd1bGFyX251bGxzOworCisJCWJ2 YWwgPSAmZHR1cC0+YnRfY29sdW1uc1thdHRpbmRleF07CisKKwkJaWYgKG51bGxzW2F0dGluZGV4 XSkKKwkJeworCQkJLyoKKwkJCSAqIFVzZSBoYXNudWxscyBmbGFnIGZvciBvaV9yZWd1bGFyX251 bGxzIGlzIHRydWUuIE90aGVyd2lzZSwKKwkJCSAqIGRlbGVnYXRlIGNoZWNrIHRvIGNvbnNpc3Rl bnRGbgorCQkJICovCisJCQlpZiAob2lfcmVndWxhcl9udWxscykKKwkJCXsKKwkJCQkvKiBXZSBo YXZlIG51bGwgdmFsdWUsIHNvIGhhc251bGxzIG9yIGFsbG51bGxzIG11c3QgYmUgdHJ1ZSAqLwor CQkJCWlmICghKGJ2YWwtPmJ2X2hhc251bGxzIHx8IGJ2YWwtPmJ2X2FsbG51bGxzKSkKKwkJCQl7 CisJCQkJCWhlYXBfYWxsX2luZGV4ZWRfZXJlcG9ydChzdGF0ZSwgdGlkLAorCQkJCQkJCQkJCQkg InJhbmdlIGhhc251bGxzIGFuZCBhbGxudWxscyBhcmUgZmFsc2UsIGJ1dCBjb250YWlucyBhIG51 bGwgdmFsdWUiKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJ biBjYXNlIG9mIG51bGwgYW5kIG9pX3JlZ3VsYXJfbnVsbHMgPSBmYWxzZSB3ZSB1c2UgaXNOdWxs CisJCQkgKiBzY2FuS2V5IGZvciBpbnZvY2F0aW9uIG9mIGNvbnNpc3RlbnRGbgorCQkJICovCisJ CQlzY2FuS2V5ID0gc3RhdGUtPmlzbnVsbF9za1thdHRpbmRleF07CisJCX0KKwkJZWxzZQorCQl7 CisJCQkvKiBXZSBoYXZlIGEgbm9ubnVsbCB2YWx1ZSwgc28gYWxsbnVsbHMgc2hvdWxkIGJlIGZh bHNlICovCisJCQlpZiAoYnZhbC0+YnZfYWxsbnVsbHMpCisJCQl7CisJCQkJaGVhcF9hbGxfaW5k ZXhlZF9lcmVwb3J0KHN0YXRlLCB0aWQsICJyYW5nZSBhbGxudWxscyBpcyB0cnVlLCBidXQgY29u dGFpbnMgbm9ubnVsbCB2YWx1ZSIpOworCQkJfQorCisJCQkvKiB1c2Ugbm9ubnVsbCBzY2FuIGtl eSAqLworCQkJc2NhbktleSA9IHN0YXRlLT5ub25udWxsX3NrW2F0dGluZGV4XTsKKwkJCXNjYW5L ZXktPnNrX2FyZ3VtZW50ID0gdmFsdWVzW2F0dGluZGV4XTsKKwkJfQorCisJCS8qIElmIG9pX3Jl Z3VsYXJfbnVsbHMgPSB0cnVlIHdlIHNob3VsZCBuZXZlciBnZXQgdGhlcmUgd2l0aCBudWxsICov CisJCUFzc2VydCghb2lfcmVndWxhcl9udWxscyB8fCAhbnVsbHNbYXR0aW5kZXhdKTsKKworCQlp ZiAoc3RhdGUtPmNvbnNpc3RlbnRGblthdHRpbmRleF0uZm5fbmFyZ3MgPj0gNCkKKwkJeworCQkJ Y29uc2lzdGVudEZuUmVzdWx0ID0gRnVuY3Rpb25DYWxsNENvbGwoJnN0YXRlLT5jb25zaXN0ZW50 Rm5bYXR0aW5kZXhdLAorCQkJCQkJCQkJCQkJICAgc3RhdGUtPmlkeHJlbC0+cmRfaW5kY29sbGF0 aW9uW2F0dGluZGV4XSwKKwkJCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShzdGF0ZS0+YmRl c2MpLAorCQkJCQkJCQkJCQkJICAgUG9pbnRlckdldERhdHVtKGJ2YWwpLAorCQkJCQkJCQkJCQkJ ICAgUG9pbnRlckdldERhdHVtKCZzY2FuS2V5KSwKKwkJCQkJCQkJCQkJCSAgIEludDMyR2V0RGF0 dW0oMSkKKwkJCQkpOworCQl9CisJCWVsc2UKKwkJeworCQkJY29uc2lzdGVudEZuUmVzdWx0ID0g RnVuY3Rpb25DYWxsM0NvbGwoJnN0YXRlLT5jb25zaXN0ZW50Rm5bYXR0aW5kZXhdLAorCQkJCQkJ CQkJCQkJICAgc3RhdGUtPmlkeHJlbC0+cmRfaW5kY29sbGF0aW9uW2F0dGluZGV4XSwKKwkJCQkJ CQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShzdGF0ZS0+YmRlc2MpLAorCQkJCQkJCQkJCQkJICAg UG9pbnRlckdldERhdHVtKGJ2YWwpLAorCQkJCQkJCQkJCQkJICAgUG9pbnRlckdldERhdHVtKHNj YW5LZXkpCisJCQkJKTsKKwkJfQorCisJCWNvbnNpc3RlbnQgPSBEYXR1bUdldEJvb2woY29uc2lz dGVudEZuUmVzdWx0KTsKKworCQlpZiAoIWNvbnNpc3RlbnQpCisJCXsKKwkJCWhlYXBfYWxsX2lu ZGV4ZWRfZXJlcG9ydChzdGF0ZSwgdGlkLCAiaGVhcCB0dXBsZSBpbmNvbnNpc3RlbnQgd2l0aCBp bmRleCIpOworCQl9CisKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKK30K IAogLyogUmVwb3J0IHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgaW5mbyAqLwogc3RhdGljIHZvaWQK QEAgLTg1MywzICsxMzI1LDE5IEBAIHJldm1hcF9pdGVtX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUg KiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KQogCQkJCQlzdGF0ZS0+cmV2bWFwQmxrLAogCQkJCQlz dGF0ZS0+cmV2bWFwaWR4KSkpOwogfQorCisvKiBSZXBvcnQgd2l0aCByYW5nZSBibGtubywgaGVh cCB0dXBsZSBpbmZvICovCitzdGF0aWMgdm9pZAoraGVhcF9hbGxfaW5kZXhlZF9lcmVwb3J0KGNv bnN0IEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLCBj b25zdCBjaGFyICptZXNzYWdlKQoreworCUFzc2VydChzdGF0ZS0+cmFuZ2VCbGtubyAhPSBJbnZh bGlkQmxvY2tOdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVf SU5ERVhfQ09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVzIGlzIG5vdCBjb25zaXN0ZW50 IHdpdGggdGhlIGhlYXAgLSAlcy4gUmFuZ2UgYmxrbm86ICV1LCBoZWFwIHRpZCAoJXUsJXUpIiwK KwkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPmlkeHJlbCksCisJCQkJCW1lc3Nh Z2UsCisJCQkJCXN0YXRlLT5kdHVwLT5idF9ibGtubywKKwkJCQkJSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpLAorCQkJCQlJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcih0aWQpKSkpOwor fQotLSAKMi40My4wCgo= --00000000000091f0f7063b76ed0d Content-Type: text/x-patch; charset="US-ASCII"; name="v9-0003-amcheck-common_verify-register-snapshot-with-indc.patch" Content-Disposition: attachment; filename="v9-0003-amcheck-common_verify-register-snapshot-with-indc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdvsaizs2 RnJvbSBjN2Y4ODBkN2IwYzVhMTk2YjAzMzZlNTA3N2Q4NjY0NGEzZTI2ZGY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAyMiBKdWwgMjAyNSAxNzozNzoxMyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjkgMy80XSBhbWNoZWNrOiBjb21tb25fdmVyaWZ5IC0gcmVnaXN0ZXIgc25hcHNob3Qg d2l0aAogaW5kY2hlY2t4bWluIGNoZWNrCgpNb3ZlcyBjaGVjayB0byBjb21tb25fdmVyaWZ5LiBF dmVyeSBpbmRleCBuZWVkcyBpdCBmb3IgaGVhcGFsbGluZGV4ZWQgY2hlY2suCi0tLQogY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9jb21tb24uYyB8IDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X2NvbW1vbi5oIHwgIDMgKysrCiBjb250cmliL2Ft Y2hlY2svdmVyaWZ5X25idHJlZS5jIHwgMjMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmls ZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9jb21tb24uYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJp ZnlfY29tbW9uLmMKaW5kZXggYTMxY2UwNmVkOTkuLmJiY2VmZTgyODk4IDEwMDY0NAotLS0gYS9j b250cmliL2FtY2hlY2svdmVyaWZ5X2NvbW1vbi5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJp ZnlfY29tbW9uLmMKQEAgLTE4OSwzICsxODksMzIgQEAgaW5kZXhfY2hlY2thYmxlKFJlbGF0aW9u IHJlbCwgT2lkIGFtX2lkKQogCiAJcmV0dXJuIGFtY2hlY2tfaW5kZXhfbWFpbmZvcmtfZXhwZWN0 ZWQocmVsKTsKIH0KKworLyoKKyAqIEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSBhbHdheXMgYWNx dWlyZXMgYSBuZXcgTVZDQyBzbmFwc2hvdCBpbgorICogUkVBRCBDT01NSVRURUQgbW9kZS4gIEEg bmV3IHNuYXBzaG90IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbGwKKyAqIHRoZSBlbnRyaWVzIGl0 IHJlcXVpcmVzIGluIHRoZSBpbmRleC4KKyAqCisgKiBXZSBtdXN0IGRlZmVuZCBhZ2FpbnN0IHRo ZSBwb3NzaWJpbGl0eSB0aGF0IGFuIG9sZCB4YWN0CisgKiBzbmFwc2hvdCB3YXMgcmV0dXJuZWQg YXQgaGlnaGVyIGlzb2xhdGlvbiBsZXZlbHMgd2hlbiB0aGF0CisgKiBzbmFwc2hvdCBpcyBub3Qg c2FmZSBmb3IgaW5kZXggc2NhbnMgb2YgdGhlIHRhcmdldCBpbmRleC4gIFRoaXMKKyAqIGlzIHBv c3NpYmxlIHdoZW4gdGhlIHNuYXBzaG90IHNlZXMgdHVwbGVzIHRoYXQgYXJlIGJlZm9yZSB0aGUK KyAqIGluZGV4J3MgaW5kY2hlY2t4bWluIGhvcml6b24uICBUaHJvd2luZyBhbiBlcnJvciBoZXJl IHNob3VsZCBiZQorICogdmVyeSByYXJlLiAgSXQgZG9lc24ndCBzZWVtIHdvcnRoIHVzaW5nIGEg c2Vjb25kYXJ5IHNuYXBzaG90IHRvCisgKiBhdm9pZCB0aGlzLgorICovCitTbmFwc2hvdAorUmVn aXN0ZXJTbmFwc2hvdEFuZENoZWNrSW5kZXhDaGVja1hNaW4oUmVsYXRpb24gaWR4cmVsKQorewor CVNuYXBzaG90CXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBz aG90KCkpOworCisJaWYgKElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSAmJiBpZHhyZWwtPnJk X2luZGV4LT5pbmRjaGVja3htaW4gJiYKKwkJIVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhIZWFwVHVw bGVIZWFkZXJHZXRYbWluKGlkeHJlbC0+cmRfaW5kZXh0dXBsZS0+dF9kYXRhKSwKKwkJCQkJCQkg ICBzbmFwc2hvdC0+eG1pbikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSwKKwkJCQkgZXJybXNnKCJpbmRleCBcIiVzXCIg Y2Fubm90IGJlIHZlcmlmaWVkIHVzaW5nIHRyYW5zYWN0aW9uIHNuYXBzaG90IiwKKwkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeHJlbCkpKSk7CisKKwlyZXR1cm4gc25hcHNob3Q7Cit9 CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X2NvbW1vbi5oIGIvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9jb21tb24uaAppbmRleCAzZjRjNTdmOTYzZC4uN2I3MGU2YTgwZmUgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfY29tbW9uLmgKKysrIGIvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9jb21tb24uaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG9ja2RlZnMuaCIKICNpbmNsdWRlICJ1dGls cy9yZWxjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAKIC8qIFR5cGVkZWYgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbWNoZWNr X2xvY2tfcmVsYXRpb25fYW5kX2NoZWNrICovCkBAIC0yNiwzICsyNyw1IEBAIGV4dGVybiB2b2lk IGFtY2hlY2tfbG9ja19yZWxhdGlvbl9hbmRfY2hlY2soT2lkIGluZHJlbGlkLAogCQkJCQkJCQkJ CQlPaWQgYW1faWQsCiAJCQkJCQkJCQkJCUluZGV4RG9DaGVja0NhbGxiYWNrIGNoZWNrLAogCQkJ CQkJCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSwgdm9pZCAqc3RhdGUpOworCitleHRlcm4gU25hcHNo b3QgUmVnaXN0ZXJTbmFwc2hvdEFuZENoZWNrSW5kZXhDaGVja1hNaW4oUmVsYXRpb24gaWR4cmVs KTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDA5NDljODg5ODNhLi5jOWFhOTA0NDA0NSAx MDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC00NDEsMjggKzQ0MSw3IEBAIGJ0X2NoZWNrX2V2 ZXJ5X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3Bh Y2UsCiAJCSAqLwogCQlpZiAoIXN0YXRlLT5yZWFkb25seSkKIAkJewotCQkJc25hcHNob3QgPSBS ZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0KLQkJCS8qCi0JCQkg KiBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkgYWx3YXlzIGFjcXVpcmVzIGEgbmV3IE1WQ0Mgc25h cHNob3QgaW4KLQkJCSAqIFJFQUQgQ09NTUlUVEVEIG1vZGUuICBBIG5ldyBzbmFwc2hvdCBpcyBn dWFyYW50ZWVkIHRvIGhhdmUgYWxsCi0JCQkgKiB0aGUgZW50cmllcyBpdCByZXF1aXJlcyBpbiB0 aGUgaW5kZXguCi0JCQkgKgotCQkJICogV2UgbXVzdCBkZWZlbmQgYWdhaW5zdCB0aGUgcG9zc2li aWxpdHkgdGhhdCBhbiBvbGQgeGFjdAotCQkJICogc25hcHNob3Qgd2FzIHJldHVybmVkIGF0IGhp Z2hlciBpc29sYXRpb24gbGV2ZWxzIHdoZW4gdGhhdAotCQkJICogc25hcHNob3QgaXMgbm90IHNh ZmUgZm9yIGluZGV4IHNjYW5zIG9mIHRoZSB0YXJnZXQgaW5kZXguICBUaGlzCi0JCQkgKiBpcyBw b3NzaWJsZSB3aGVuIHRoZSBzbmFwc2hvdCBzZWVzIHR1cGxlcyB0aGF0IGFyZSBiZWZvcmUgdGhl Ci0JCQkgKiBpbmRleCdzIGluZGNoZWNreG1pbiBob3Jpem9uLiAgVGhyb3dpbmcgYW4gZXJyb3Ig aGVyZSBzaG91bGQgYmUKLQkJCSAqIHZlcnkgcmFyZS4gIEl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB1 c2luZyBhIHNlY29uZGFyeSBzbmFwc2hvdCB0bwotCQkJICogYXZvaWQgdGhpcy4KLQkJCSAqLwot CQkJaWYgKElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSAmJiByZWwtPnJkX2luZGV4LT5pbmRj aGVja3htaW4gJiYKLQkJCQkhVHJhbnNhY3Rpb25JZFByZWNlZGVzKEhlYXBUdXBsZUhlYWRlckdl dFhtaW4ocmVsLT5yZF9pbmRleHR1cGxlLT50X2RhdGEpLAotCQkJCQkJCQkJICAgc25hcHNob3Qt PnhtaW4pKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9T RVJJQUxJWkFUSU9OX0ZBSUxVUkUpLAotCQkJCQkJIGVycm1zZygiaW5kZXggXCIlc1wiIGNhbm5v dCBiZSB2ZXJpZmllZCB1c2luZyB0cmFuc2FjdGlvbiBzbmFwc2hvdCIsCi0JCQkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CisJCQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNo b3RBbmRDaGVja0luZGV4Q2hlY2tYTWluKHN0YXRlLT5yZWwpOwogCQl9CiAJfQogCi0tIAoyLjQz LjAKCg== --00000000000091f0f7063b76ed0d Content-Type: text/x-patch; charset="US-ASCII"; name="v9-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Disposition: attachment; filename="v9-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdvsaizr1 RnJvbSBmNGI5NTk3Zjk3NWU1NTU3NWIzMzI4MjExMjlkZDI4M2Q2OTgzMDllIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxODoxMToyNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjkgMi80XSBhbWNoZWNrOiBicmluX2luZGV4X2NoZWNrKCkgLSBpbmRleCBzdHJ1Y3R1 cmUgY2hlY2sKCkFkZHMgYSBuZXcgZnVuY3Rpb24gYnJpbl9pbmRleF9jaGVjaygpIGZvciB2YWxp ZGF0aW5nIEJSSU4gaW5kZXhlcy4KSXQgaW5jdWRlcyBuZXh0IGNoZWNrczoKLSBtZXRhIHBhZ2Ug Y2hlY2tzCi0gcmV2bWFwIHBvaW50ZXJzIGlzIHZhbGlkIGFuZCBwb2ludHMgdG8gaW5kZXggdHVw bGVzIHdpdGggZXhwZWN0ZWQgcmFuZ2UgYmxrbm8KLSBpbmRleCB0dXBsZXMgaGF2ZSBleHBlY3Rl ZCBmb3JtYXQKLSBzb21lIHNwZWNpYWwgY2hlY2tzIGZvciBlbXB0eV9yYW5nZXMKLSBldmVyeSBp bmRleCB0dXBsZSBoYXMgY29ycmVzcG9uZGluZyByZXZtYXAgaXRlbSB0aGF0IHBvaW50cyB0byBp dCAob3B0aW9uYWwpCi0tLQogY29udHJpYi9hbWNoZWNrL01ha2VmaWxlICAgICAgICAgICAgICAg IHwgICA1ICstCiBjb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsICAgfCAgMTgg KwogY29udHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbCAgICAgICAgIHwgICAyICstCiBjb250 cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQgfCAxMzQgKysrKwogY29udHJpYi9h bWNoZWNrL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICA0ICsKIGNvbnRyaWIvYW1jaGVjay9z cWwvY2hlY2tfYnJpbi5zcWwgICAgICB8IDEwMSArKysKIGNvbnRyaWIvYW1jaGVjay90LzAwN192 ZXJpZnlfYnJpbi5wbCAgICB8IDI5MSArKysrKysrKwogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9i cmluLmMgICAgICAgICAgIHwgODU1ICsrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBj aGFuZ2VkLCAxNDA3IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYwoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYW1jaGVjay9NYWtlZmlsZSBiL2NvbnRyaWIvYW1jaGVjay9NYWtlZmlsZQppbmRleCAxYjdh NjNjYmFhNC4uYmRmYjI3NGM4OWMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay9NYWtlZmls ZQorKysgYi9jb250cmliL2FtY2hlY2svTWFrZWZpbGUKQEAgLTYsMTEgKzYsMTIgQEAgT0JKUyA9 IFwKIAl2ZXJpZnlfY29tbW9uLm8gXAogCXZlcmlmeV9naW4ubyBcCiAJdmVyaWZ5X2hlYXBhbS5v IFwKLQl2ZXJpZnlfbmJ0cmVlLm8KKwl2ZXJpZnlfbmJ0cmVlLm8gXAorCXZlcmlmeV9icmluLm8K IAogRVhURU5TSU9OID0gYW1jaGVjawogREFUQSA9IGFtY2hlY2stLTEuMi0tMS4zLnNxbCBhbWNo ZWNrLS0xLjEtLTEuMi5zcWwgYW1jaGVjay0tMS4wLS0xLjEuc3FsIGFtY2hlY2stLTEuMC5zcWwg XAotCQlhbWNoZWNrLS0xLjMtLTEuNC5zcWwgYW1jaGVjay0tMS40LS0xLjUuc3FsCisJCWFtY2hl Y2stLTEuMy0tMS40LnNxbCBhbWNoZWNrLS0xLjQtLTEuNS5zcWwgYW1jaGVjay0tMS41LS0xLjYu c3FsCiBQR0ZJTEVERVNDID0gImFtY2hlY2sgLSBmdW5jdGlvbiBmb3IgdmVyaWZ5aW5nIHJlbGF0 aW9uIGludGVncml0eSIKIAogUkVHUkVTUyA9IGNoZWNrIGNoZWNrX2J0cmVlIGNoZWNrX2dpbiBj aGVja19oZWFwCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYu c3FsIGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDM1NDQ1MWM0NzIKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsCkBAIC0wLDAgKzEsMTggQEAK Ky8qIGNvbnRyaWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwgKi8KKworLS0gY29tcGxh aW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBF WFRFTlNJT04KK1xlY2hvIFVzZSAiQUxURVIgRVhURU5TSU9OIGFtY2hlY2sgVVBEQVRFIFRPICcx LjYnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworCistLQorLS0gYnJpbl9pbmRleF9jaGVj aygpCistLQorQ1JFQVRFIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2soaW5kZXggcmVnY2xhc3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFycGFnZXNjaGVjayBib29s ZWFuIGRlZmF1bHQgZmFsc2UKKykKKyAgICBSRVRVUk5TIFZPSUQKK0FTICdNT0RVTEVfUEFUSE5B TUUnLCAnYnJpbl9pbmRleF9jaGVjaycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFJFU1RS SUNURUQ7CisKKy0tIFdlIGRvbid0IHdhbnQgdGhpcyB0byBiZSBhdmFpbGFibGUgdG8gcHVibGlj CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2socmVnY2xhc3MsIGJvb2xl YW4pIEZST00gUFVCTElDOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYW1jaGVjay9hbWNoZWNrLmNvbnRyb2wgYi9jb250cmliL2FtY2hlY2svYW1jaGVj ay5jb250cm9sCmluZGV4IGM4YmE2ZDdjOWJjLi4yZjMyOWVmMmNmNCAxMDA2NDQKLS0tIGEvY29u dHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbAorKysgYi9jb250cmliL2FtY2hlY2svYW1jaGVj ay5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBhbWNoZWNrIGV4dGVuc2lvbgogY29tbWVudCA9 ICdmdW5jdGlvbnMgZm9yIHZlcmlmeWluZyByZWxhdGlvbiBpbnRlZ3JpdHknCi1kZWZhdWx0X3Zl cnNpb24gPSAnMS41JworZGVmYXVsdF92ZXJzaW9uID0gJzEuNicKIG1vZHVsZV9wYXRobmFtZSA9 ICckbGliZGlyL2FtY2hlY2snCiByZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dCBiL2NvbnRyaWIvYW1jaGVjay9leHBl Y3RlZC9jaGVja19icmluLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZTVmYzUyZWQ3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hlY2svZXhwZWN0 ZWQvY2hlY2tfYnJpbi5vdXQKQEAgLTAsMCArMSwxMzQgQEAKKy0tIGhlbHBlciBmdW5jCitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTiAgcmFuZG9tX3N0cmluZyggSU5UICkgUkVUVVJOUyBURVhU IEFTICQkCitTRUxFQ1Qgc3RyaW5nX2FnZyhzdWJzdHJpbmcoJzAxMjM0NTY3ODlhYmNkZWZnaGlq a2xtbm9wcXJzdHV2d3h5eicsIGNlaWwocmFuZG9tKCkgKiAzNik6OklOVEVHRVIsIDEpLCAnJykg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgJDEpOworJCQgTEFOR1VBR0Ugc3FsOworLS0gZW1wdHkg dGFibGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklH SU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBP TiBicmludGVzdCBVU0lORyBCUklOIChhKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0 OworLS0gbXVsdGlwbGUgYXR0cmlidXRlcyB0ZXN0CitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGlk IEJJR1NFUklBTCwgYSBURVhUKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVY IGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIFRFWFRfbWlubWF4X29wcywg aWQgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJ TlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgcmFuZG9tX3N0cmluZygoeCAlIDEwMCkpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMzAwMCkgeDsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVM RVRFIEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAxNTAwIEFORCBpZCA8IDI1MDA7CitTRUxFQ1Qg YnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5f aW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWls ZCBpbmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3Rf aWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5tYXhfb3BzKSBXSVRIIChQQUdF U19QRVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgn OjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0t LQorIAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworLS0gbWlu X21heCBvcGNsYXNzCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChGSUxM RkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lO RyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitJ TlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwMDApIHg7CistLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKK0RFTEVURSBGUk9NIGJyaW50 ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAor LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1Ag SU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0g Mik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRy dWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKy0tIG11bHRpX21pbl9tYXggb3Bj bGFzcworQ1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9 IDEwKTsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAo YSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5T RVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVz dCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElO REVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3Qg VVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5H RSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNT LCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJpbnRlc3Q7CistLSBibG9vbSBvcGNsYXNz CitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTAp OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGlu dDhfYmxvb21fb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJy aW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsKKy0t IGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgYSA+ IDIwMDAwIEFORCBhIDwgNDAwMDA7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3Rf aWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWlsZCBpbmRleAorRFJPUCBJTkRFWCBicmludGVz dF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4g KGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2lu ZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIGNsZWFudXAK K0RST1AgVEFCTEUgYnJpbnRlc3Q7CistLSBpbmNsdXNpb24gb3BjbGFzcworQ1JFQVRFIFRBQkxF IGJyaW50ZXN0IChpZCBTRVJJQUwgUFJJTUFSWSBLRVksIGEgQk9YKTsKK0NSRUFURSBJTkRFWCBi cmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBCT1hfSU5DTFVTSU9OX09QUykg V0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitJTlNFUlQgSU5UTyBicmludGVzdCAoYSkKK1NF TEVDVCBCT1gocG9pbnQocmFuZG9tKCkgKiAxMDAwLCByYW5kb20oKSAqIDEwMDApLCBwb2ludChy YW5kb20oKSAqIDEwMDAsIHJhbmRvbSgpICogMTAwMCkpCitGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMDAwMCk7CistLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKK0RFTEVURSBGUk9NIGJyaW50 ZXN0IFdIRVJFIGlkID4gMjAwMCBBTkQgaWQgPCA0MDAwOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAor LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1Ag SU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0Ug PSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywg dHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworLS0gY2xlYW51cAorRFJPUCBG VU5DVElPTiByYW5kb21fc3RyaW5nOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL21lc29u LmJ1aWxkIGIvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCmluZGV4IDFmMGMzNDdlZDU0Li5i YTgxNmMyZmFmMCAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCisrKyBi L2NvbnRyaWIvYW1jaGVjay9tZXNvbi5idWlsZApAQCAtNSw2ICs1LDcgQEAgYW1jaGVja19zb3Vy Y2VzID0gZmlsZXMoCiAgICd2ZXJpZnlfZ2luLmMnLAogICAndmVyaWZ5X2hlYXBhbS5jJywKICAg J3ZlcmlmeV9uYnRyZWUuYycsCisgICd2ZXJpZnlfYnJpbi5jJwogKQogCiBpZiBob3N0X3N5c3Rl bSA9PSAnd2luZG93cycKQEAgLTI3LDYgKzI4LDcgQEAgaW5zdGFsbF9kYXRhKAogICAnYW1jaGVj ay0tMS4yLS0xLjMuc3FsJywKICAgJ2FtY2hlY2stLTEuMy0tMS40LnNxbCcsCiAgICdhbWNoZWNr LS0xLjQtLTEuNS5zcWwnLAorICAnYW1jaGVjay0tMS41LS0xLjYuc3FsJywKICAga3dhcmdzOiBj b250cmliX2RhdGFfYXJncywKICkKIApAQCAtNDAsNiArNDIsNyBAQCB0ZXN0cyArPSB7CiAgICAg ICAnY2hlY2tfYnRyZWUnLAogICAgICAgJ2NoZWNrX2dpbicsCiAgICAgICAnY2hlY2tfaGVhcCcs CisgICAgICAnY2hlY2tfYnJpbicKICAgICBdLAogICB9LAogICAndGFwJzogewpAQCAtNTAsNiAr NTMsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfdmVyaWZ5X25idHJlZV91bmlxdWUucGwn LAogICAgICAgJ3QvMDA1X3BpdHIucGwnLAogICAgICAgJ3QvMDA2X3ZlcmlmeV9naW4ucGwnLAor ICAgICAgJ3QvMDA3X3ZlcmlmeV9icmluLnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbCBiL2NvbnRyaWIvYW1jaGVjay9z cWwvY2hlY2tfYnJpbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmIzNmFmMzdmZTAzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVj a19icmluLnNxbApAQCAtMCwwICsxLDEwMSBAQAorLS0gaGVscGVyIGZ1bmMKK0NSRUFURSBPUiBS RVBMQUNFIEZVTkNUSU9OICByYW5kb21fc3RyaW5nKCBJTlQgKSBSRVRVUk5TIFRFWFQgQVMgJCQK K1NFTEVDVCBzdHJpbmdfYWdnKHN1YnN0cmluZygnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3Bx cnN0dXZ3eHl6JywgY2VpbChyYW5kb20oKSAqIDM2KTo6SU5URUdFUiwgMSksICcnKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAkMSk7CiskJCBMQU5HVUFHRSBzcWw7CisKKworLS0gZW1wdHkgdGFi bGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5U KSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBi cmludGVzdCBVU0lORyBCUklOIChhKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVz dF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0 OworCistLSBtdWx0aXBsZSBhdHRyaWJ1dGVzIHRlc3QKK0NSRUFURSBUQUJMRSBicmludGVzdCAo aWQgQklHU0VSSUFMLCBhIFRFWFQpIFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5E RVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5tYXhfb3Bz LCBpZCBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJU IElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCByYW5kb21fc3RyaW5nKCh4ICUgMTAwKSkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitE RUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBpZCA+IDE1MDAgQU5EIGlkIDwgMjUwMDsKK1NFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0t IHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJy aW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIFRFWFRfbWlubWF4X29wcykgV0lU SCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRl c3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVz dDsKKworCisKKy0tIG1pbl9tYXggb3BjbGFzcworQ1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJ R0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHgg T04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BF Ul9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitE RUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0t IHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJy aW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lU SCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRl c3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVz dDsKKworCisKKy0tIG11bHRpX21pbl9tYXggb3BjbGFzcworQ1JFQVRFIFRBQkxFIGJyaW50ZXN0 IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKK0NSRUFURSBJTkRFWCBicmludGVz dF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJ VEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVD VCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1w dHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0 MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywg dHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JF QVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlu bWF4X211bHRpX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9p bmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51cAor RFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIGJsb29tIG9wY2xhc3MKK0NSRUFURSBUQUJM RSBicmludGVzdCAoYSBCSUdJTlQpIFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5E RVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9ibG9vbV9vcHMp IFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNF TEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRlIHNvbWUg ZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEg PCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFT UywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4Owor Q1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhf Ymxvb21fb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4 X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9Q IFRBQkxFIGJyaW50ZXN0OworCisKKy0tIGluY2x1c2lvbiBvcGNsYXNzCitDUkVBVEUgVEFCTEUg YnJpbnRlc3QgKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgYSBCT1gpOworQ1JFQVRFIElOREVYIGJy aW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05fT1BTKSBX SVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhKQorU0VM RUNUIEJPWChwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRvbSgpICogMTAwMCksIHBvaW50KHJh bmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAwKTsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRFIEZST00gYnJpbnRl c3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CisKK1NFTEVDVCBicmluX2luZGV4X2No ZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgK K0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBi cmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJf UkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdD TEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworCisKKy0tIGNs ZWFudXAKK0RST1AgRlVOQ1RJT04gcmFuZG9tX3N0cmluZzsKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwg Yi9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJjNjJiNzZjYzcwCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCkBAIC0wLDAgKzEsMjkxIEBACisjIENv cHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKKwor dXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlOworbXkgJGJsa3NpemU7CitteSAkbWV0YV9wYWdl X2Jsa25vID0gMDsKKworIworIyBUZXN0IHNldC11cAorIworJG5vZGUgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3Rlc3QnKTsKKyRub2RlLT5pbml0KG5vX2RhdGFfY2hlY2tzdW1z ID0+IDEpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnYXV0b3ZhY3V1 bT1vZmYnKTsKKyRub2RlLT5zdGFydDsKKyRibGtzaXplID0gaW50KCRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ1NIT1cgYmxvY2tfc2l6ZTsnKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHEoQ1JFQVRFIEVYVEVOU0lPTiBhbWNoZWNrKSk7CisKKyMgVGVzdHMKK215IEB0ZXN0 cyA9ICgKKyAgICB7CisgICAgICAgICMgaW52YWxpZCBtZXRhIHBhZ2UgdHlwZQorCisgICAgICAg IGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNr KCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAg ICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAor ICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIG1ldGEgcGFnZSBtYWdpYyB3b3JkCisKKyAgICAgICAg ZmluZCAgICAgPT4gcGFjaygnTCcsIDB4QTgxMDlDRkEpLAorICAgICAgICByZXBsYWNlICA9PiBw YWNrKCdMJywgMHhCQjEwOUNGQiksCisgICAgICAgIGJsa25vICAgID0+ICRtZXRhX3BhZ2VfYmxr bm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdlIGlzIGNvcnJ1cHRlZCcpLAor ICAgIH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgbWV0YSBwYWdlIGluZGV4IHZlcnNpb24K KworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEpLAorICAgICAg ICByZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDIpLAorICAgICAgICBibGtubyAg ICA9PiAkbWV0YV9wYWdlX2Jsa25vLAorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdtZXRhcGFn ZSBpcyBjb3JydXB0ZWQnKQorICAgIH0sCisgICAgeworICAgICAgICAjIHBhZ2VzX3Blcl9yYW5n ZSBiZWxvdyBsb3dlciBsaW1pdAorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0wqJywgMHhB ODEwOUNGQSwgMSwgMTI4KSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTConLCAweEE4MTA5 Q0ZBLCAxLCAwKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAg ICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAorICAg IHsKKyAgICAgICAgIyBwYWdlc19wZXJfcmFuZ2UgYWJvdmUgdXBwZXIgbGltaXQKKworICAgICAg ICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEsIDEyOCksCisgICAgICAgIHJl cGxhY2UgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwgMTMxMDczKSwKKyAgICAgICAgYmxr bm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0 YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBsYXN0X3Jldm1h cF9wYWdlIGJlbG93IGxvd2VyIGxpbWl0CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTCon LCAweEE4MTA5Q0ZBLCAxLCAxMjgsIDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMKics IDB4QTgxMDlDRkEsIDEsIDEyOCwgMCksCisgICAgICAgIGJsa25vICAgID0+ICRtZXRhX3BhZ2Vf Ymxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdlIGlzIGNvcnJ1cHRlZCcp LAorICAgIH0sCisgICAgeworCisgICAgICAgICMgbGFzdF9yZXZtYXBfcGFnZSBiZXlvbmQgaW5k ZXggcmVsYXRpb24gc2l6ZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0wqJywgMHhBODEw OUNGQSwgMSwgMTI4LCAxKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTConLCAweEE4MTA5 Q0ZBLCAxLCAxMjgsIDEwMCksCisgICAgICAgIGJsa25vICAgID0+ICRtZXRhX3BhZ2VfYmxrbm8s CisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdlIGlzIGNvcnJ1cHRlZCcpLAorICAg IH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgcmV2bWFwIHBhZ2UgdHlwZQorCisgICAgICAg IGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTIpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNr KCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMSwgIyByZXZtYXAgcGFnZQorICAg ICAgICBleHBlY3RlZCA9PiB3cmFwKCdyZXZtYXAgcGFnZSBpcyBleHBlY3RlZCBhdCBibG9jayAx LCBsYXN0IHJldm1hcCBwYWdlIDEnKSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyByZXZtYXAg aXRlbSBwb2ludHMgYmV5b25kIGluZGV4IHJlbGF0aW9uIHNpemUKKyAgICAgICAgIyByZXBsYWNl ICgyLDEpIHdpdGggKDEwMCwxKQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MqJywgMCwg MiwgMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ1MqJywgMCwgMTAwLCAxKSwKKyAgICAg ICAgYmxrbm8gICAgPT4gMSwgIyByZXZtYXAgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFw KCdyZXZtYXAgaXRlbSBwb2ludHMgdG8gYSBub24gZXhpc3RpbmcgYmxvY2sgMTAwLCAnCisgICAg ICAgICAgICAuICdpbmRleCBtYXggYmxvY2sgMi4gUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVt OiAoMSwwKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgaW52YWxpZCByZWd1bGFyIHBhZ2Ug dHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTMpLAorICAgICAgICBy ZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMiwgIyBy ZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgncmV2bWFwIGl0ZW0gcG9pbnRz IHRvIHRoZSBwYWdlIHdoaWNoIGlzIG5vdCByZWd1bGFyIChibGtubzogMikuICcKKyAgICAgICAg ICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEsMCknKQorICAgIH0sCisgICAg eworICAgICAgICAjIHJldm1hcCBpdGVtIHBvaW50cyBiZXlvbmQgcmVndWxhciBwYWdlIG1heCBv ZmZzZXQKKyAgICAgICAgIyByZXBsYWNlICgyLDEpIHdpdGggKDIsMikKKworICAgICAgICBmaW5k ICAgICA9PiBwYWNrKCdTKicsIDAsIDIsIDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdT KicsIDAsIDIsIDIpLAorICAgICAgICBibGtubyAgICA9PiAxLCAjIHJldm1hcCBwYWdlCisgICAg ICAgIGV4cGVjdGVkID0+IHdyYXAoJ3Jldm1hcCBpdGVtIG9mZnNldCBudW1iZXIgMiBpcyBncmVh dGVyIHRoYW4gcmVndWxhciBwYWdlIDIgbWF4IG9mZnNldCAxLiAnCisgICAgICAgICAgICAuICdS YW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApJykKKyAgICB9LAorICAgIHsKKyAgICAg ICAgIyBpbnZhbGlkIGluZGV4IHR1cGxlIHJhbmdlIGJsa25vCisKKyAgICAgICAgZmluZCAgICAg PT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2so J0xDQycsIDEsIDB4QTgsIDB4MDEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJlZ3VsYXIg cGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdpbmRleCB0dXBsZSBoYXMgaW52YWxpZCBi bGtubyAxLiBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTog KDIsMSknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJhbmdlIGJleW9uZCB0aGUgdGFibGUg c2l6ZSBhbmQgaXMgbm90IGVtcHR5CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywg MCwgMHhBOCwgMHgwMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgs IDB4MDEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICBl eHBlY3RlZCA9PiB3cmFwKCd0aGUgcmFuZ2UgaXMgYmV5b25kIHRoZSB0YWJsZSBzaXplLCBidXQg aXMgbm90IG1hcmtlZCBhcyBlbXB0eSwgdGFibGUgc2l6ZTogMCBibG9ja3MuICcKKyAgICAgICAg ICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEsMCksIGluZGV4IHR1cGxlOiAo MiwxKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgY29ycnVwdCBpbmRleCB0dXBsZSBkYXRh IG9mZnNldAorICAgICAgICAjIGhlcmUgIDB4MDAsIDB4MDAsIDB4MDAgaXMgcGFkZGluZyBhbmQg Jy4nIGlzIHZhcmxlbmEgbGVuIGJ5dGUKKworICAgICAgICBmaW5kICAgICAgID0+IHBhY2soJ0xD Q0NDJywgMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCkgLiAnKC4pJyAuICdhYWFhYScsCisgICAg ICAgIHJlcGxhY2UgICAgPT4gcGFjaygnTENDQ0MnLCAwLCAweDFGLCAweDAwLCAweDAwLCAweDAw KSAuICckMScgLiAnYWFhYWEnLAorICAgICAgICBibGtubyAgICAgID0+IDIsICMgcmVndWxhciBw YWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9z dHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3Ry dWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAg ICAgICAgZXhwZWN0ZWQgICA9PiBxci9pbmRleCB0dXBsZSBoZWFkZXIgbGVuZ3RoIDMxIGlzIGdy ZWF0ZXIgdGhhbiB0dXBsZSBsZW4gLi5cLiBcUVJhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTog KDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKVxFLworICAgIH0sCisgICAgeworICAgICAgICAjIGVt cHR5IHJhbmdlIGluZGV4IHR1cGxlIGRvZXNuJ3QgaGF2ZSBudWxsIGJpdG1hcAorCisgICAgICAg IGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4QTgsIDB4MDEpLAorICAgICAgICByZXBsYWNl ICA9PiBwYWNrKCdMQ0MnLCAwLCAweDI4LCAweDAxKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMiwg IyByZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnZW1wdHkgcmFuZ2UgaW5k ZXggdHVwbGUgZG9lc25cJ3QgaGF2ZSBudWxsIGJpdG1hcC4gJworICAgICAgICAgICAgLiAnUmFu Z2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpJykKKyAg ICB9LAorICAgIHsKKyAgICAgICAgIyBlbXB0eSByYW5nZSBpbmRleCB0dXBsZSBhbGxfbnVsbHMg LT4gZmFsc2UKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAx KSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMCksCisgICAg ICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdy YXAoJ2VtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGF0dHJpYnV0ZSAwIHdpdGggYWxsbnVsbHMgaXMg ZmFsc2UuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEs MCksIGluZGV4IHR1cGxlOiAoMiwxKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgZW1wdHkg cmFuZ2UgaW5kZXggdHVwbGUgaGFzX251bGxzIC0+IHRydWUKKworICAgICAgICBmaW5kICAgICA9 PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAxKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygn TENDJywgMCwgMHhBOCwgMHgwMyksCisgICAgICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBw YWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ2VtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGF0 dHJpYnV0ZSAwIHdpdGggaGFzbnVsbHMgaXMgdHJ1ZS4gJworICAgICAgICAgICAgLiAnUmFuZ2Ug Ymxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpJykKKyAgICB9 LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIGluZGV4IHR1cGxlIGRhdGEKKyAgICAgICAgIyBy ZXBsYWNlIHZhcmxlbmEgbGVuIHdpdGggRkYgLSBzaG91bGQgd29yayB3aXRoIGFueSBlbmRpYW5u ZXNzCisKKyAgICAgICAgZmluZCAgICAgICA9PiBwYWNrKCdMQ0NDQycsIDAsIDB4MDgsIDB4MDAs IDB4MDAsIDB4MDApIC4gJy4nIC4gJ2FhYWFhJywKKyAgICAgICAgcmVwbGFjZSAgICA9PiBwYWNr KCdMQ0NDQ0MnLCAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweEZGKSAuICdhYWFhYScsCisg ICAgICAgIGJsa25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgdGFibGVfZGF0 YSA9PiBzdWIgeworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0cnVjdCkgPSBAXzsKKyAgICAgICAg ICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9uYW1lfSAoYSkg VkFMVUVTICgnYWFhYWEnKTspOworICAgICAgICB9LAorICAgICAgICBleHBlY3RlZCAgID0+IHFy L2F0dHJpYnV0ZSAwIHN0b3JlZCB2YWx1ZSAwIHdpdGggbGVuZ3RoIC0xIGVuZHMgYXQgb2Zmc2V0 IDEyNyBiZXlvbmQgdG90YWwgdHVwbGUgbGVuZ3RoIC4uXC5cUSBSYW5nZSBibGtubzogMCwgcmV2 bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSlcRS8KKyAgICB9LAorICAgIHsKKyAg ICAgICAgIyBvcnBoYW4gaW5kZXggdHVwbGUKKyAgICAgICAgIyByZXBsYWNlIHZhbGlkIHJldm1h cCBpdGVtIHdpdGggKDAsMCkKKworICAgICAgICBmaW5kICAgICAgID0+IHBhY2soJ1MqJywgMCwg MiwgMSksCisgICAgICAgIHJlcGxhY2UgICAgPT4gcGFjaygnUyonLCAwLCAwLCAwKSwKKyAgICAg ICAgYmxrbm8gICAgICA9PiAxLCAjIHJldm1hcCBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4g c3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICBy ZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVF UyAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFwKCJy ZXZtYXAgZG9lc24ndCBwb2ludCB0byBpbmRleCB0dXBsZS4gUmFuZ2UgYmxrbm86IDAsIHJldm1h cCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpIikKKyAgICB9CispOworCisKKyMgaW5p dCB0ZXN0IGRhdGEKK215ICRpID0gMTsKK2ZvcmVhY2ggbXkgJHRlc3Rfc3RydWN0IChAdGVzdHMp IHsKKworICAgICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9ID0gJ3QnIC4gJGkrKzsKKyAgICAk dGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfSA9ICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IC4g J19icmluX2lkeCc7CisKKyAgICBteSAkdGVzdF9kYXRhX3NxbCA9ICcnOworICAgIGlmIChleGlz dHMgJHRlc3Rfc3RydWN0LT57dGFibGVfZGF0YX0pIHsKKyAgICAgICAgJHRlc3RfZGF0YV9zcWwg PSAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9kYXRhfS0+KCR0ZXN0X3N0cnVjdCk7CisgICAgfQorCisg ICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKyAgICAgICAgQ1JFQVRFIFRBQkxF ICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhIFRFWFQpOworICAgICAgICAkdGVzdF9kYXRh X3NxbAorICAgICAgICBDUkVBVEUgSU5ERVggJHRlc3Rfc3RydWN0LT57aW5kZXhfbmFtZX0gT04g JHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gVVNJTkcgQlJJTiAoYSk7CisgICAgKSk7CisKKyAg ICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSA9IHJlbGF0aW9uX2ZpbGVwYXRoKCR0ZXN0X3N0cnVj dC0+e2luZGV4X25hbWV9KTsKK30KKworIyBjb3JydXB0IGluZGV4Ciskbm9kZS0+c3RvcDsKKwor Zm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgeworICAgIHN0cmluZ19yZXBsYWNlX2Js b2NrKAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSwKKyAgICAgICAgJHRlc3Rfc3Ry dWN0LT57ZmluZH0sCisgICAgICAgICR0ZXN0X3N0cnVjdC0+e3JlcGxhY2V9LAorICAgICAgICAk dGVzdF9zdHJ1Y3QtPntibGtub30KKyAgICApOworfQorCisjIGFzc2VydGlvbnMKKyRub2RlLT5z dGFydDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgeworICAgIG15ICgkcmVz dWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsIHFxKFNFTEVD VCBicmluX2luZGV4X2NoZWNrKCckdGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfScsIHRydWUpKSk7 CisgICAgbGlrZSgkc3RkZXJyLCAkdGVzdF9zdHJ1Y3QtPntleHBlY3RlZH0pOworfQorCisKKyMg SGVscGVycworCisjIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0gcGF0aCBmb3IgdGhlIG5hbWVkIHJl bGF0aW9uLgorc3ViIHJlbGF0aW9uX2ZpbGVwYXRoIHsKKyAgICBteSAoJHJlbG5hbWUpID0gQF87 CisKKyAgICBteSAkcGdkYXRhID0gJG5vZGUtPmRhdGFfZGlyOworICAgIG15ICRyZWwgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgICAgIHFxKFNFTEVDVCBwZ19yZWxhdGlvbl9m aWxlcGF0aCgnJHJlbG5hbWUnKSkpOworICAgIGRpZSAicGF0aCBub3QgZm91bmQgZm9yIHJlbGF0 aW9uICRyZWxuYW1lIiB1bmxlc3MgZGVmaW5lZCAkcmVsOworICAgIHJldHVybiAiJHBnZGF0YS8k cmVsIjsKK30KKworc3ViIHN0cmluZ19yZXBsYWNlX2Jsb2NrIHsKKyAgICBteSAoJGZpbGVuYW1l LCAkZmluZCwgJHJlcGxhY2UsICRibGtubykgPSBAXzsKKworICAgIG15ICRmaDsKKyAgICBvcGVu KCRmaCwgJys8JywgJGZpbGVuYW1lKSBvciBCQUlMX09VVCgib3BlbiBmYWlsZWQ6ICQhIik7Cisg ICAgYmlubW9kZSAkZmg7CisKKyAgICBteSAkb2Zmc2V0ID0gJGJsa25vICogJGJsa3NpemU7Cisg ICAgbXkgJGJ1ZmZlcjsKKworICAgIHN5c3NlZWsoJGZoLCAkb2Zmc2V0LCAwKSBvciBCQUlMX09V VCgic2VlayBmYWlsZWQ6ICQhIik7CisgICAgc3lzcmVhZCgkZmgsICRidWZmZXIsICRibGtzaXpl KSBvciBCQUlMX09VVCgicmVhZCBmYWlsZWQ6ICQhIik7CisKKyAgICAkYnVmZmVyID1+IHMvJGZp bmQvJyInIC4gJHJlcGxhY2UgLiAnIicvZ2VlOworCisgICAgc3lzc2VlaygkZmgsICRvZmZzZXQs IDApIG9yIEJBSUxfT1VUKCJzZWVrIGZhaWxlZDogJCEiKTsKKyAgICBzeXN3cml0ZSgkZmgsICRi dWZmZXIpIG9yIEJBSUxfT1VUKCJ3cml0ZSBmYWlsZWQ6ICQhIik7CisKKyAgICBjbG9zZSgkZmgp IG9yIEJBSUxfT1VUKCJjbG9zZSBmYWlsZWQ6ICQhIik7CisKKyAgICByZXR1cm47Cit9CisKK3N1 YiB3cmFwCit7CisgICAgbXkgJGlucHV0ID0gQF87CisgICAgcmV0dXJuIHFyL1xRJGlucHV0XEUv Cit9CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jIGIvY29udHJpYi9hbWNoZWNrL3Zl cmlmeV9icmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ0MDI0 ZTc2YjU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMK QEAgLTAsMCArMSw4NTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHZlcmlmeV9icmlu LmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNoZWNrIHBvc3RncmVzcWwgYnJpbiBpbmRleGVzIGZvciBj b3JydXB0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL2FtY2hlY2svdmVyaWZ5X2Jy aW4uYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5o IgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0u aCIKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJh dG9yLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbl9wYWdlLmgiCisj aW5jbHVkZSAiYWNjZXNzL2JyaW5fcmV2bWFwLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidmVyaWZ5X2NvbW1vbi5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKworCitQR19GVU5DVElPTl9JTkZPX1YxKGJy aW5faW5kZXhfY2hlY2spOworCit0eXBlZGVmIHN0cnVjdCBCcmluQ2hlY2tTdGF0ZQoreworCisJ LyogQ2hlY2sgYXJndW1lbnRzICovCisKKwlib29sCQlyZWd1bGFycGFnZXNjaGVjazsKKworCS8q IEJSSU4gY2hlY2sgY29tbW9uIGZpZWxkcyAqLworCisJUmVsYXRpb24JaWR4cmVsOworCVJlbGF0 aW9uCWhlYXByZWw7CisJQnJpbkRlc2MgICAqYmRlc2M7CisJaW50CQkJbmF0dHM7CisJQmxvY2tO dW1iZXIgcGFnZXNQZXJSYW5nZTsKKworCS8qIEluZGV4IHN0cnVjdHVyZSBjaGVjayBmaWVsZHMg Ki8KKworCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGNoZWNrc3RyYXRlZ3k7CisJQmxvY2tOdW1iZXIg aWR4bmJsb2NrczsKKwlCbG9ja051bWJlciBoZWFwbmJsb2NrczsKKwlCbG9ja051bWJlciBsYXN0 UmV2bWFwUGFnZTsKKwkvKiBDdXJyZW50IHJhbmdlIGJsa25vICovCisJQmxvY2tOdW1iZXIgcmFu Z2VCbGtubzsKKwkvKiBDdXJyZW50IHJldm1hcCBpdGVtICovCisJQmxvY2tOdW1iZXIgcmV2bWFw QmxrOworCUJ1ZmZlcgkJcmV2bWFwYnVmOworCVBhZ2UJCXJldm1hcHBhZ2U7CisJdWludDMyCQly ZXZtYXBpZHg7CisJLyogQ3VycmVudCBpbmRleCB0dXBsZSAqLworCUJsb2NrTnVtYmVyIHJlZ3Bh Z2VCbGs7CisJQnVmZmVyCQlyZWdwYWdlYnVmOworCVBhZ2UJCXJlZ3BhZ2U7CisJT2Zmc2V0TnVt YmVyIHJlZ3BhZ2VvZmZzZXQ7CisKK30JCQlCcmluQ2hlY2tTdGF0ZTsKKworc3RhdGljIHZvaWQg YnJpbl9jaGVjayhSZWxhdGlvbiBpZHhyZWwsIFJlbGF0aW9uIGhlYXByZWwsIHZvaWQgKmNhbGxi YWNrX3N0YXRlLCBib29sIHJlYWRvbmx5KTsKKworc3RhdGljIHZvaWQgY2hlY2tfYnJpbl9pbmRl eF9zdHJ1Y3R1cmUoQnJpbkNoZWNrU3RhdGUgKiBwU3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVj a19tZXRhKEJyaW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVja19yZXZt YXAoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX3Jldm1hcF9p dGVtKEJyaW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVja19pbmRleF90 dXBsZShCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBCcmluVHVwbGUgKnR1cGxlLCBJdGVtSWQgbHAp OworCitzdGF0aWMgdm9pZCBjaGVja19yZWd1bGFyX3BhZ2VzKEJyaW5DaGVja1N0YXRlICogc3Rh dGUpOworCitzdGF0aWMgYm9vbCByZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKEJyaW5DaGVj a1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgSXRlbUlkIFBhZ2VHZXRJdGVtSWRDYXJlZnVsKEJy aW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgdm9pZCBicmluX2NoZWNrX2VyZXBvcnQo QnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KTsKKworc3RhdGljIHZvaWQg cmV2bWFwX2l0ZW1fZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpm bXQpOworCitzdGF0aWMgdm9pZCBpbmRleF90dXBsZV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICog c3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7CisKK3N0YXRpYyB2b2lkIGluZGV4X3R1cGxlX29ubHlf ZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpOworCisKK0Rh dHVtCiticmluX2luZGV4X2NoZWNrKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJaW5kcmVs aWQgPSBQR19HRVRBUkdfT0lEKDApOworCUJyaW5DaGVja1N0YXRlICpzdGF0ZSA9IHBhbGxvYzAo c2l6ZW9mKEJyaW5DaGVja1N0YXRlKSk7CisKKwlzdGF0ZS0+cmVndWxhcnBhZ2VzY2hlY2sgPSBQ R19HRVRBUkdfQk9PTCgxKTsKKworCWFtY2hlY2tfbG9ja19yZWxhdGlvbl9hbmRfY2hlY2soaW5k cmVsaWQsCisJCQkJCQkJCQlCUklOX0FNX09JRCwKKwkJCQkJCQkJCWJyaW5fY2hlY2ssCisJCQkJ CQkJCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQlzdGF0ZSk7CisKKwlQR19S RVRVUk5fVk9JRCgpOworfQorCisvKgorICogTWFpbiBjaGVjayBmdW5jdGlvbgorICovCitzdGF0 aWMgdm9pZAorYnJpbl9jaGVjayhSZWxhdGlvbiBpZHhyZWwsIFJlbGF0aW9uIGhlYXByZWwsIHZv aWQgKmNhbGxiYWNrX3N0YXRlLCBib29sIHJlYWRvbmx5KQoreworCUJyaW5DaGVja1N0YXRlICpz dGF0ZSA9IChCcmluQ2hlY2tTdGF0ZSAqKSBjYWxsYmFja19zdGF0ZTsKKworCS8qIEluaXRpYWxp emUgY2hlY2sgY29tbW9uIGZpZWxkcyAqLworCXN0YXRlLT5pZHhyZWwgPSBpZHhyZWw7CisJc3Rh dGUtPmhlYXByZWwgPSBoZWFwcmVsOworCXN0YXRlLT5iZGVzYyA9IGJyaW5fYnVpbGRfZGVzYyhp ZHhyZWwpOworCXN0YXRlLT5uYXR0cyA9IHN0YXRlLT5iZGVzYy0+YmRfdHVwZGVzYy0+bmF0dHM7 CisKKworCWNoZWNrX2JyaW5faW5kZXhfc3RydWN0dXJlKHN0YXRlKTsKKworCisJYnJpbl9mcmVl X2Rlc2Moc3RhdGUtPmJkZXNjKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgaW5kZXggaGFzIGV4 cGVjdGVkIHN0cnVjdHVyZQorICoKKyAqICBTb21lIGNoZWNrIGV4cGVjdGF0aW9uczoKKyAqIC0g d2UgaG9sZCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssIHNvIHJldm1hcCBjb3VsZCBub3QgYmUg ZXh0ZW5kZWQgKGkuZS4gbm8gZXZhY3VhdGlvbikgd2hpbGUgY2hlY2sgYXMgd2VsbCBhcworICog ICBhbGwgcmVndWxhciBwYWdlcyBzaG91bGQgc3RheSByZWd1bGFyIGFuZCByYW5nZXMgY291bGQg bm90IGJlIHN1bW1hcml6ZWQgYW5kIGRlc3VtbWFyaXplZC4KKyAqICAgTmV2ZXJ0aGVsZXNzLCBj b25jdXJyZW50IHVwZGF0ZXMgY291bGQgbGVhZCB0byBuZXcgcmVndWxhciBwYWdlIGFsbG9jYXRp b25zCisgKiAgIGFuZCBtb3Zpbmcgb2YgaW5kZXggdHVwbGVzLgorICogLSBpZiByZXZtYXAgcG9p bnRlciBpcyB2YWxpZCB0aGVyZSBzaG91bGQgYmUgdmFsaWQgaW5kZXggdHVwbGUgaXQgcG9pbnRz IHRvLgorICogLSB0aGVyZSBhcmUgbm8gb3JwaGFuIGluZGV4IHR1cGxlcyAoaWYgdGhlcmUgaXMg YW4gaW5kZXggdHVwbGUsIHRoZSByZXZtYXAgaXRlbSBwb2ludHMgdG8gdGhpcyB0dXBsZSBhbHNv IG11c3QgZXhpc3QpCisgKiAtIGl0J3MgcG9zc2libGUgdG8gZW5jb3VudGVyIHBsYWNlaG9sZGVy IHR1cGxlcyAoYXMgYSByZXN1bHQgb2YgY3Jhc2gpCisgKiAtIGl0J3MgcG9zc2libGUgdG8gZW5j b3VudGVyIG5ldyBwYWdlcyBpbnN0ZWFkIG9mIHJlZ3VsYXIgKGFzIGEgcmVzdWx0IG9mIGNyYXNo KQorICogLSBpdCdzIHBvc3NpYmxlIHRvIGVuY291bnRlciBwYWdlcyB3aXRoIGV2YWN1YXRpb24g Yml0IChhcyBhIHJlc3VsdCBvZiBjcmFzaCkKKyAqCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19i cmluX2luZGV4X3N0cnVjdHVyZShCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCS8qIEluZGV4 IHN0cnVjdHVyZSBjaGVjayBmaWVsZHMgaW5pdGlhbGl6YXRpb24gKi8KKwlzdGF0ZS0+Y2hlY2tz dHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CisKKwljaGVja19tZXRh KHN0YXRlKTsKKworCS8qIENoZWNrIHJldm1hcCBmaXJzdCwgYmxvY2tzOiBbMSwgbGFzdFJldm1h cFBhZ2VdICovCisJY2hlY2tfcmV2bWFwKHN0YXRlKTsKKworCisJaWYgKHN0YXRlLT5yZWd1bGFy cGFnZXNjaGVjaykKKwl7CisJCS8qIENoZWNrIHJlZ3VsYXIgcGFnZXMsIGJsb2NrczogW2xhc3RS ZXZtYXBQYWdlICsgMSwgaWR4bmJsb2Nrc10gKi8KKwkJY2hlY2tfcmVndWxhcl9wYWdlcyhzdGF0 ZSk7CisJfQorCit9CisKKy8qIE1ldGEgcGFnZSBjaGVjayBhbmQgc2F2ZSBzb21lIGRhdGEgZm9y IHRoZSBmdXJ0aGVyIGNoZWNrICovCitzdGF0aWMgdm9pZAorY2hlY2tfbWV0YShCcmluQ2hlY2tT dGF0ZSAqIHN0YXRlKQoreworCUJ1ZmZlcgkJbWV0YWJ1ZjsKKwlQYWdlCQltZXRhcGFnZTsKKwlC cmluTWV0YVBhZ2VEYXRhICptZXRhZGF0YTsKKworCS8qIE1ldGEgcGFnZSBjaGVjayAqLworCW1l dGFidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBC UklOX01FVEFQQUdFX0JMS05PLCBSQk1fTk9STUFMLAorCQkJCQkJCQkgc3RhdGUtPmNoZWNrc3Ry YXRlZ3kpOworCUxvY2tCdWZmZXIobWV0YWJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCW1ldGFw YWdlID0gQnVmZmVyR2V0UGFnZShtZXRhYnVmKTsKKwltZXRhZGF0YSA9IChCcmluTWV0YVBhZ2VE YXRhICopIFBhZ2VHZXRDb250ZW50cyhtZXRhcGFnZSk7CisJc3RhdGUtPmlkeG5ibG9ja3MgPSBS ZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHN0YXRlLT5pZHhyZWwpOworCisKKwlpZiAoIUJSSU5f SVNfTUVUQV9QQUdFKG1ldGFwYWdlKSB8fAorCQltZXRhZGF0YS0+YnJpbk1hZ2ljICE9IEJSSU5f TUVUQV9NQUdJQyB8fAorCQltZXRhZGF0YS0+YnJpblZlcnNpb24gIT0gQlJJTl9DVVJSRU5UX1ZF UlNJT04gfHwKKwkJbWV0YWRhdGEtPnBhZ2VzUGVyUmFuZ2UgPCAxIHx8IG1ldGFkYXRhLT5wYWdl c1BlclJhbmdlID4gQlJJTl9NQVhfUEFHRVNfUEVSX1JBTkdFIHx8CisJCW1ldGFkYXRhLT5sYXN0 UmV2bWFwUGFnZSA8PSBCUklOX01FVEFQQUdFX0JMS05PIHx8IG1ldGFkYXRhLT5sYXN0UmV2bWFw UGFnZSA+PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwl7CisJCWJyaW5fY2hlY2tfZXJlcG9ydChzdGF0 ZSwgIm1ldGFwYWdlIGlzIGNvcnJ1cHRlZCIpOworCX0KKworCXN0YXRlLT5sYXN0UmV2bWFwUGFn ZSA9IG1ldGFkYXRhLT5sYXN0UmV2bWFwUGFnZTsKKwlzdGF0ZS0+cGFnZXNQZXJSYW5nZSA9IG1l dGFkYXRhLT5wYWdlc1BlclJhbmdlOworCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YWJ1Zik7Cit9 CisKKy8qCisgKiBXYWxrIHJldm1hcCBwYWdlIGJ5IHBhZ2UgZnJvbSB0aGUgYmVnaW5uaW5nIGFu ZCBjaGVjayBldmVyeSByZXZtYXAgaXRlbS4KKyAqIEFsc28gY2hlY2sgdGhhdCBhbGwgcGFnZXMg d2l0aGluIFsxLCBsYXN0UmV2bWFwUGFnZV0gYXJlIHJldm1hcCBwYWdlcy4KKyAqLworc3RhdGlj IHZvaWQKK2NoZWNrX3Jldm1hcChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCVJlbGF0aW9u CWlkeHJlbCA9IHN0YXRlLT5pZHhyZWw7CisJQmxvY2tOdW1iZXIgbGFzdFJldm1hcFBhZ2UgPSBz dGF0ZS0+bGFzdFJldm1hcFBhZ2U7CisJUmVhZFN0cmVhbSAqc3RyZWFtOworCWludAkJCXN0cmVh bV9mbGFnczsKKwlSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBzdHJlYW1fY2I7CisJQmxvY2tSYW5n ZVJlYWRTdHJlYW1Qcml2YXRlIHN0cmVhbV9kYXRhOworCisJc3RhdGUtPnJhbmdlQmxrbm8gPSAw OworCXN0YXRlLT5yZWdwYWdlYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwlzdGF0ZS0+aGVhcG5ibG9j a3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHN0YXRlLT5oZWFwcmVsKTsKKworCisJLyoK KwkgKiBQcmVwYXJlIHN0cmVhbSBkYXRhIGZvciByZXZtYXAgd2Fsay4gSXQgaXMgc2FmZSB0byB1 c2UgYmF0Y2htb2RlIGFzCisJICogYmxvY2tfcmFuZ2VfcmVhZF9zdHJlYW1fY2IgdGFrZXMgbm8g bG9ja3MuCisJICovCisJc3RyZWFtX2ZsYWdzID0gUkVBRF9TVFJFQU1fU0VRVUVOVElBTCB8IFJF QURfU1RSRUFNX1VTRV9CQVRDSElORzsKKwkvKiBGaXJzdCByZXZtYXAgcGFnZSBpcyByaWdodCBh ZnRlciBtZXRhIHBhZ2UgKi8KKwlzdHJlYW1fZGF0YS5jdXJyZW50X2Jsb2NrbnVtID0gQlJJTl9N RVRBUEFHRV9CTEtOTyArIDE7CisJc3RyZWFtX2RhdGEubGFzdF9leGNsdXNpdmUgPSBsYXN0UmV2 bWFwUGFnZSArIDE7CisKKwlzdHJlYW1fY2IgPSBibG9ja19yYW5nZV9yZWFkX3N0cmVhbV9jYjsK KwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihzdHJlYW1fZmxhZ3MsCisJCQkJ CQkJCQkJR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKSwKKwkJCQkJCQkJCQlpZHhyZWws CisJCQkJCQkJCQkJTUFJTl9GT1JLTlVNLAorCQkJCQkJCQkJCXN0cmVhbV9jYiwKKwkJCQkJCQkJ CQkmc3RyZWFtX2RhdGEsCisJCQkJCQkJCQkJMCk7CisKKwkvKiBXYWxrIGVhY2ggcmV2bWFwIHBh Z2UgKi8KKwl3aGlsZSAoKHN0YXRlLT5yZXZtYXBidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihzdHJlYW0sIE5VTEwpKSAhPSBJbnZhbGlkQnVmZmVyKQorCXsKKwkJc3RhdGUtPnJldm1hcEJs ayA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHN0YXRlLT5yZXZtYXBidWYpOworCQlMb2NrQnVmZmVy KHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJc3RhdGUtPnJldm1hcHBh Z2UgPSBCdWZmZXJHZXRQYWdlKHN0YXRlLT5yZXZtYXBidWYpOworCisJCS8qCisJCSAqIFBhZ2Vz IHdpdGggYmxvY2sgbnVtYmVycyBpbiBbMSwgbGFzdFJldm1hcFBhZ2VdIHNob3VsZCBiZSByZXZt YXAKKwkJICogcGFnZXMKKwkJICovCisJCWlmICghQlJJTl9JU19SRVZNQVBfUEFHRShzdGF0ZS0+ cmV2bWFwcGFnZSkpCisJCXsKKwkJCWJyaW5fY2hlY2tfZXJlcG9ydChzdGF0ZSwgcHNwcmludGYo InJldm1hcCBwYWdlIGlzIGV4cGVjdGVkIGF0IGJsb2NrICV1LCBsYXN0IHJldm1hcCBwYWdlICV1 IiwKKwkJCQkJCQkJCQkJICAgc3RhdGUtPnJldm1hcEJsaywKKwkJCQkJCQkJCQkJICAgbGFzdFJl dm1hcFBhZ2UpKTsKKwkJfQorCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisKKwkJLyogV2FsayBhbmQgY2hlY2sgYWxsIGJyaW4gdHVwbGVzIGZyb20g dGhlIGN1cnJlbnQgcmV2bWFwIHBhZ2UgKi8KKwkJc3RhdGUtPnJldm1hcGlkeCA9IDA7CisJCXdo aWxlIChzdGF0ZS0+cmV2bWFwaWR4IDwgUkVWTUFQX1BBR0VfTUFYSVRFTVMpCisJCXsKKwkJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJCS8qIENoZWNrIHJldm1hcCBpdGVtICovCisJCQlj aGVja19yZXZtYXBfaXRlbShzdGF0ZSk7CisKKwkJCXN0YXRlLT5yYW5nZUJsa25vICs9IHN0YXRl LT5wYWdlc1BlclJhbmdlOworCQkJc3RhdGUtPnJldm1hcGlkeCsrOworCQl9CisKKwkJZWxvZyhE RUJVRzMsICJDb21wbGV0ZSByZXZtYXAgcGFnZSBjaGVjazogJWQiLCBzdGF0ZS0+cmV2bWFwQmxr KTsKKworCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYpOworCX0KKworCXJlYWRfc3Ry ZWFtX2VuZChzdHJlYW0pOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoc3RhdGUtPnJlZ3BhZ2VidWYp KQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJfQorfQorCisvKgor ICogQ2hlY2sgcmV2bWFwIGl0ZW0uCisgKgorICogV2UgY2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRl ciBpdHNlbGYgYW5kIGlmIGl0IGlzIG9rIHdlIGNoZWNrIHRoZSBpbmRleCB0dXBsZSBpdCBwb2lu dHMgdG8uCisgKgorICogVG8gYXZvaWQgZGVhZGxvY2sgd2UgbmVlZCB0byB1bmxvY2sgcmV2bWFw IHBhZ2UgYmVmb3JlIGxvY2tpbmcgcmVndWxhciBwYWdlLAorICogc28gd2hlbiB3ZSBnZXQgdGhl IGxvY2sgb24gdGhlIHJlZ3VsYXIgcGFnZSBvdXIgaW5kZXggdHVwbGUgcG9pbnRlciBtYXkgbm8g bG9uZ2VyIGJlIHJlbGV2YW50LgorICogU28gZm9yIHNvbWUgY2hlY2tzIGJlZm9yZSByZXBvcnRp bmcgYW4gZXJyb3Igd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBvdXIgcG9pbnRlciBpcyBzdGls bCByZWxldmFudCBhbmQgaWYgaXQncyBub3QgLSByZXRyeS4KKyAqLworc3RhdGljIHZvaWQKK2No ZWNrX3Jldm1hcF9pdGVtKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7CisJSXRlbVBvaW50ZXJE YXRhICpyZXZtYXB0aWRzOworCVJldm1hcENvbnRlbnRzICpjb250ZW50czsKKwlJdGVtUG9pbnRl ckRhdGEgKmlwdHI7CisJSXRlbUlkCQlscDsKKwlCcmluVHVwbGUgICp0dXA7CisJUmVsYXRpb24J aWR4cmVsID0gc3RhdGUtPmlkeHJlbDsKKworCS8qIExvb3AgdG8gcmV0cnkgcmV2bWFwIGl0ZW0g Y2hlY2sgaWYgdGhlcmUgd2FzIGEgY29uY3VycmVudCB1cGRhdGUuICovCisJZm9yICg7OykKKwl7 CisJCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCisJ CWNvbnRlbnRzID0gKFJldm1hcENvbnRlbnRzICopIFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQ YWdlKHN0YXRlLT5yZXZtYXBidWYpKTsKKwkJcmV2bWFwdGlkcyA9IGNvbnRlbnRzLT5ybV90aWRz OworCQkvKiBQb2ludGVyIGZvciB0aGUgcmFuZ2Ugd2l0aCBzdGFydCBhdCBzdGF0ZS0+cmFuZ2VC bGtubyAqLworCQlpcHRyID0gcmV2bWFwdGlkcyArIHN0YXRlLT5yZXZtYXBpZHg7CisKKwkJLyog QXQgZmlyc3QgY2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRlciAqLworCisJCS8qCisJCSAqIFR1cGxl IHBvaW50ZXIgaXMgaW52YWxpZCBtZWFucyByYW5nZSBpc24ndCBzdW1tYXJpemVkLCBqdXN0IG1v dmUKKwkJICogZnVydGhlcgorCQkgKi8KKwkJaWYgKCFJdGVtUG9pbnRlcklzVmFsaWQoaXB0cikp CisJCXsKKwkJCWVsb2coREVCVUczLCAiUmFuZ2UgJXUgaXMgbm90IHN1bW1hcml6ZWQiLCBzdGF0 ZS0+cmFuZ2VCbGtubyk7CisJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFBvaW50ZXIgaXMgdmFs aWQsIGl0IHNob3VsZCBwb2ludHMgdG8gaW5kZXggdHVwbGUgZm9yIHRoZSByYW5nZQorCQkgKiB3 aXRoIGJsa25vIHJhbmdlQmxrbm8uIFJlbWVtYmVyIGl0IGFuZCB1bmxvY2sgcmV2bWFwIHBhZ2Ug dG8gYXZvaWQKKwkJICogZGVhZGxvY2sKKwkJICovCisJCXN0YXRlLT5yZWdwYWdlQmxrID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcihpcHRyKTsKKwkJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJ dGVtUG9pbnRlckdldE9mZnNldE51bWJlcihpcHRyKTsKKworCQlMb2NrQnVmZmVyKHN0YXRlLT5y ZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhl IHJlZ3BhZ2UgYmxvY2sgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVsYXRpb24KKwkJICog c2l6ZS4gVG8gYXZvaWQgZmV0Y2hpbmcgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIGVhY2ggdHVw bGUsIHVzZQorCQkgKiBjYWNoZWQgdmFsdWUgZmlyc3QKKwkJICovCisJCWlmIChzdGF0ZS0+cmVn cGFnZUJsayA+PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwkJeworCQkJLyoKKwkJCSAqIFJlZ3VsYXIg cGFnZXMgbWF5IGhhdmUgYmVlbiBhZGRlZCwgc28gcmVmcmVzaCBpZHhuYmxvY2tzIGFuZAorCQkJ ICogcmVjaGVjaworCQkJICovCisJCQlzdGF0ZS0+aWR4bmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVt YmVyT2ZCbG9ja3MoaWR4cmVsKTsKKwkJCWlmIChzdGF0ZS0+cmVncGFnZUJsayA+PSBzdGF0ZS0+ aWR4bmJsb2NrcykKKwkJCXsKKwkJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJ CQkJcHNwcmludGYoInJldm1hcCBpdGVtIHBvaW50cyB0byBhIG5vbiBleGlzdGluZyBibG9jayAl dSwgaW5kZXggbWF4IGJsb2NrICV1IiwKKwkJCQkJCQkJCQkJIHN0YXRlLT5yZWdwYWdlQmxrLAor CQkJCQkJCQkJCQkgc3RhdGUtPmlkeG5ibG9ja3MgLSAxKSk7CisJCQl9CisJCX0KKworCQkvKgor CQkgKiBUbyBhdm9pZCBzb21lIHBpbi91bnBpbiBjeWNsZXMgd2UgY2FjaGUgbGFzdCB1c2VkIHJl Z3VsYXIgcGFnZS4KKwkJICogQ2hlY2sgaWYgd2UgbmVlZCBkaWZmZXJlbnQgcmVndWxhciBwYWdl IGFuZCBmZXRjaCBpdC4KKwkJICovCisJCWlmICghQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFn ZWJ1ZikgfHwgQnVmZmVyR2V0QmxvY2tOdW1iZXIoc3RhdGUtPnJlZ3BhZ2VidWYpICE9IHN0YXRl LT5yZWdwYWdlQmxrKQorCQl7CisJCQlpZiAoQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1 ZikpCisJCQl7CisJCQkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJCQl9CisJ CQlzdGF0ZS0+cmVncGFnZWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChpZHhyZWwsIE1BSU5fRk9S S05VTSwgc3RhdGUtPnJlZ3BhZ2VCbGssIFJCTV9OT1JNQUwsCisJCQkJCQkJCQkJCQkgICBzdGF0 ZS0+Y2hlY2tzdHJhdGVneSk7CisJCX0KKworCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVm LCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXN0YXRlLT5yZWdwYWdlID0gQnVmZmVyR2V0UGFnZShz dGF0ZS0+cmVncGFnZWJ1Zik7CisKKwkJLyogUmV2bWFwIHNob3VsZCBhbHdheXMgcG9pbnQgdG8g YSByZWd1bGFyIHBhZ2UgKi8KKwkJaWYgKCFCUklOX0lTX1JFR1VMQVJfUEFHRShzdGF0ZS0+cmVn cGFnZSkpCisJCXsKKwkJCXJldm1hcF9pdGVtX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJCXBzcHJp bnRmKCJyZXZtYXAgaXRlbSBwb2ludHMgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgbm90IHJlZ3VsYXIg KGJsa25vOiAldSkiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVncGFnZUJsaykpOworCisJCX0KKwor CQkvKiBDaGVjayBpdGVtIG9mZnNldCBpcyB2YWxpZCAqLworCQlpZiAoc3RhdGUtPnJlZ3BhZ2Vv ZmZzZXQgPiBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHN0YXRlLT5yZWdwYWdlKSkKKwkJeworCisJ CQkvKiBJZiBjb25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRy eSAqLworCQkJaWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsK KwkJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwor CQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJ CQkJCQlwc3ByaW50ZigicmV2bWFwIGl0ZW0gb2Zmc2V0IG51bWJlciAldSBpcyBncmVhdGVyIHRo YW4gcmVndWxhciBwYWdlICV1IG1heCBvZmZzZXQgJXUiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVn cGFnZW9mZnNldCwKKwkJCQkJCQkJCQkgc3RhdGUtPnJlZ3BhZ2VCbGssCisJCQkJCQkJCQkJIFBh Z2VHZXRNYXhPZmZzZXROdW1iZXIoc3RhdGUtPnJlZ3BhZ2UpKSk7CisJCX0KKworCQllbG9nKERF QlVHMywgIlByb2Nlc3MgcmFuZ2U6ICV1LCBpcHRyOiAoJXUsJXUpIiwgc3RhdGUtPnJhbmdlQmxr bm8sIHN0YXRlLT5yZWdwYWdlQmxrLCBzdGF0ZS0+cmVncGFnZW9mZnNldCk7CisKKwkJLyoKKwkJ ICogUmV2bWFwIHBvaW50ZXIgaXMgT0suIEl0IHBvaW50cyB0byBleGlzdGluZyByZWd1bGFyIHBh Z2UsIG9mZnNldAorCQkgKiBhbHNvIGlzIG9rLiBMZXQncyBjaGVjayBpbmRleCB0dXBsZSBpdCBw b2ludHMgdG8uCisJCSAqLworCisJCWxwID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUpOwor CisJCS8qIFJldm1hcCBzaG91bGQgcG9pbnQgdG8gTk9STUFMIHR1cGxlcyBvbmx5ICovCisJCWlm ICghSXRlbUlkSXNVc2VkKGxwKSkKKwkJeworCisJCQkvKiBJZiBjb25jdXJyZW50IHVwZGF0ZSBt b3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJaWYgKCFyZXZtYXBfcG9pbnRz X3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdw YWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlp bmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLCAicmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHVudXNlZCBp bmRleCB0dXBsZSIpOworCQl9CisKKworCQl0dXAgPSAoQnJpblR1cGxlICopIFBhZ2VHZXRJdGVt KHN0YXRlLT5yZWdwYWdlLCBscCk7CisKKwkJLyogQ2hlY2sgaWYgcmFuZ2UgYmxvY2sgbnVtYmVy IGlzIGFzIGV4cGVjdGVkICovCisJCWlmICh0dXAtPmJ0X2Jsa25vICE9IHN0YXRlLT5yYW5nZUJs a25vKQorCQl7CisKKwkJCS8qIElmIGNvbmN1cnJlbnQgdXBkYXRlIG1vdmVkIG91ciB0dXBsZSB3 ZSBuZWVkIHRvIHJldHJ5ICovCisJCQlpZiAoIXJldm1hcF9wb2ludHNfdG9faW5kZXhfdHVwbGUo c3RhdGUpKQorCQkJeworCQkJCUxvY2tCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWluZGV4X3R1cGxlX2VyZXBv cnQoc3RhdGUsIHBzcHJpbnRmKCJpbmRleCB0dXBsZSBoYXMgaW52YWxpZCBibGtubyAldSIsIHR1 cC0+YnRfYmxrbm8pKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSByYW5nZSBpcyBiZXlvbmQg dGhlIHRhYmxlIHNpemUgLSB0aGUgcmFuZ2UgbXVzdCBiZSBlbXB0eS4KKwkJICogSXQncyB2YWxp ZCBzaXR1YXRpb24gZm9yIGVtcHR5IHRhYmxlIG5vdy4KKwkJICovCisJCWlmIChzdGF0ZS0+cmFu Z2VCbGtubyA+PSBzdGF0ZS0+aGVhcG5ibG9ja3MpCisJCXsKKwkJCWlmICghQnJpblR1cGxlSXNF bXB0eVJhbmdlKHR1cCkpCisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJ CQkJCQkJCXBzcHJpbnRmKCJ0aGUgcmFuZ2UgaXMgYmV5b25kIHRoZSB0YWJsZSBzaXplLCAiCisJ CQkJCQkJCQkJCSAiYnV0IGlzIG5vdCBtYXJrZWQgYXMgZW1wdHksIHRhYmxlIHNpemU6ICV1IGJs b2NrcyIsCisJCQkJCQkJCQkJCSBzdGF0ZS0+aGVhcG5ibG9ja3MpKTsKKwkJCX0KKwkJfQorCisJ CS8qIENoZWNrIGluZGV4IHR1cGxlIGl0c2VsZiAqLworCQljaGVja19pbmRleF90dXBsZShzdGF0 ZSwgdHVwLCBscCk7CisKKwkJTG9ja0J1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1ZiwgQlVGRkVSX0xP Q0tfVU5MT0NLKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogQ2hlY2sgdGhhdCBpbmRleCB0 dXBsZSBoYXMgZXhwZWN0ZWQgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9sbG93 cyB0aGUgbG9naWMgcGVyZm9ybWVkIGJ5IGJyaW5fZGVmb3JtX3R1cGxlKCkuCisgKiBBZnRlciB0 aGlzIGNoZWNrIGlzIGNvbXBsZXRlIHdlIGFyZSBzdXJlIHRoYXQgYnJpbl9kZWZvcm1fdHVwbGUg Y2FuIHByb2Nlc3MgaXQuCisgKgorICogSW4gY2FzZSBvZiBlbXB0eSByYW5nZSBjaGVjayB0aGF0 IGZvciBhbGwgYXR0cmlidXRlcyBhbGxudWxscyBhcmUgdHJ1ZSwgaGFzbnVsbHMgYXJlIGZhbHNl IGFuZAorICogdGhlcmUgaXMgbm8gZGF0YS4gQWxsIGNvcmUgb3BjbGFzc2VzIGV4cGVjdCBhbGxu dWxscyBpcyB0cnVlIGZvciBlbXB0eSByYW5nZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2lu ZGV4X3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEJyaW5UdXBsZSAqdHVwbGUsIEl0ZW1J ZCBscCkKK3sKKworCWNoYXIJICAgKnRwOwkJCQkvKiB0dXBsZSBkYXRhICovCisJdWludDE2CQlv ZmY7CisJYml0czgJICAgKm51bGxiaXRzOworCVR1cGxlRGVzYwlkaXNrdGRlc2M7CisJaW50CQkJ c3RvcmVkOworCWJvb2wJCWVtcHR5X3JhbmdlID0gQnJpblR1cGxlSXNFbXB0eVJhbmdlKHR1cGxl KTsKKwlib29sCQloYXNudWxsYml0bWFwID0gQnJpblR1cGxlSGFzTnVsbHModHVwbGUpOworCXVp bnQ4CQlob2ZmID0gQnJpblR1cGxlRGF0YU9mZnNldCh0dXBsZSk7CisJdWludDE2CQl0dXBsZW4g PSBJdGVtSWRHZXRMZW5ndGgobHApOworCisKKwkvKiBDaGVjayB0aGF0IGhlYWRlciBsZW5ndGgg aXMgbm90IGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW5ndGggKi8KKwlpZiAoaG9mZiA+IHR1cGxlbikK Kwl7CisJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsIHBzcHJpbnRmKCJpbmRleCB0dXBsZSBo ZWFkZXIgbGVuZ3RoICV1IGlzIGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW4gJXUiLCBob2ZmLCB0dXBs ZW4pKTsKKwl9CisKKwkvKiBJZiB0dXBsZSBoYXMgbnVsbCBiaXRtYXAgLSBpbml0aWFsaXplIGl0 ICovCisJaWYgKGhhc251bGxiaXRtYXApCisJeworCQludWxsYml0cyA9IChiaXRzOCAqKSAoKGNo YXIgKikgdHVwbGUgKyBTaXplT2ZCcmluVHVwbGUpOworCX0KKwllbHNlCisJeworCQludWxsYml0 cyA9IE5VTEw7CisJfQorCisJLyogRW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgY2hlY2tzICovCisJ aWYgKGVtcHR5X3JhbmdlKQorCXsKKwkJLyogRW1wdHkgcmFuZ2UgdHVwbGUgc2hvdWxkIGhhdmUg bnVsbCBiaXRtYXAgKi8KKwkJaWYgKCFoYXNudWxsYml0bWFwKQorCQl7CisJCQlpbmRleF90dXBs ZV9lcmVwb3J0KHN0YXRlLCAiZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgZG9lc24ndCBoYXZlIG51 bGwgYml0bWFwIik7CisJCX0KKworCQlBc3NlcnQobnVsbGJpdHMgIT0gTlVMTCk7CisKKwkJLyog Q2hlY2sgZXZlcnkgYXR0cmlidXRlIGhhcyBhbGxudWxscyBpcyB0cnVlIGFuZCBoYXNudWxscyBp cyBmYWxzZSAqLworCQlmb3IgKGludCBhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5h dHRzOyArK2F0dGluZGV4KQorCQl7CisKKwkJCS8qIEF0dHJpYnV0ZSBhbGxudWxscyBzaG91bGQg YmUgdHJ1ZSBmb3IgZW1wdHkgcmFuZ2UgKi8KKwkJCWlmIChhdHRfaXNudWxsKGF0dGluZGV4LCBu dWxsYml0cykpCisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJ CXBzcHJpbnRmKCJlbXB0eSByYW5nZSBpbmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBhbGxu dWxscyBpcyBmYWxzZSIsCisJCQkJCQkJCQkJCSBhdHRpbmRleCkpOworCQkJfQorCisJCQkvKiBB dHRyaWJ1dGUgaGFzbnVsbHMgc2hvdWxkIGJlIGZhbHNlIGZvciBlbXB0eSByYW5nZSAqLworCQkJ aWYgKCFhdHRfaXNudWxsKHN0YXRlLT5uYXR0cyArIGF0dGluZGV4LCBudWxsYml0cykpCisJCQl7 CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRmKCJlbXB0 eSByYW5nZSBpbmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBoYXNudWxscyBpcyB0cnVlIiwK KwkJCQkJCQkJCQkJIGF0dGluZGV4KSk7CisJCQl9CisJCX0KKworCQkvKiBXZSBhcmUgZG9uZSB3 aXRoIGVtcHR5IHJhbmdlIHR1cGxlICovCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJhbmdl IGlzIG1hcmtlZCBhcyBub3QgZW1wdHkgc28gd2UgY2FuIGhhdmUgc29tZSBkYXRhIGluIHRoZSB0 dXBsZS4KKwkgKiBXYWxrIGFsbCBhdHRyaWJ1dGVzIGFuZCBjaGVja3MgdGhhdCBhbGwgc3RvcmVk IHZhbHVlcyBmaXQgaW50byB0aGUKKwkgKiB0dXBsZQorCSAqLworCisJdHAgPSAoY2hhciAqKSB0 dXBsZSArIEJyaW5UdXBsZURhdGFPZmZzZXQodHVwbGUpOworCXN0b3JlZCA9IDA7CisJb2ZmID0g MDsKKworCWRpc2t0ZGVzYyA9IGJyaW5fdHVwbGVfdHVwZGVzYyhzdGF0ZS0+YmRlc2MpOworCisJ Zm9yIChpbnQgYXR0aW5kZXggPSAwOyBhdHRpbmRleCA8IHN0YXRlLT5uYXR0czsgKythdHRpbmRl eCkKKwl7CisJCUJyaW5PcGNJbmZvICpvcGNsYXNzID0gc3RhdGUtPmJkZXNjLT5iZF9pbmZvW2F0 dGluZGV4XTsKKworCQkvKgorCQkgKiBpZiBhbGxudWxscyBpcyBzZXQgd2UgaGF2ZSBubyBkYXRh IGZvciB0aGlzIGF0dHJpYnV0ZSwgbW92ZSB0byB0aGUKKwkJICogbmV4dAorCQkgKi8KKwkJaWYg KGhhc251bGxiaXRtYXAgJiYgIWF0dF9pc251bGwoYXR0aW5kZXgsIG51bGxiaXRzKSkKKwkJewor CQkJc3RvcmVkICs9IG9wY2xhc3MtPm9pX25zdG9yZWQ7CisJCQljb250aW51ZTsKKwkJfQorCisJ CS8qIFdhbGsgYWxsIHN0b3JlZCB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSAqLwor CQlmb3IgKGludCBkYXR1bW5vID0gMDsgZGF0dW1ubyA8IG9wY2xhc3MtPm9pX25zdG9yZWQ7IGRh dHVtbm8rKykKKwkJeworCQkJQ29tcGFjdEF0dHJpYnV0ZSAqdGhpc2F0dCA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKGRpc2t0ZGVzYywgc3RvcmVkKTsKKworCQkJaWYgKHRoaXNhdHQtPmF0dGxlbiA9 PSAtMSkKKwkJCXsKKwkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJ CQkgIHRoaXNhdHQtPmF0dGFsaWduYnksCisJCQkJCQkJCQkJICAtMSwKKwkJCQkJCQkJCQkgIHRw ICsgb2ZmKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGln bmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSk7CisJCQl9CisKKwkJCS8qIENoZWNrIHRoYXQg d2UgYXJlIHN0aWxsIGluIHRoZSB0dXBsZSAqLworCQkJaWYgKGhvZmYgKyBvZmYgPiB0dXBsZW4p CisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRm KCJhdHRyaWJ1dGUgJXUgc3RvcmVkIHZhbHVlICV1IHdpdGggbGVuZ3RoICVkICIKKwkJCQkJCQkJ CQkJICJzdGFydHMgYXQgb2Zmc2V0ICV1IGJleW9uZCB0b3RhbCB0dXBsZSBsZW5ndGggJXUiLAor CQkJCQkJCQkJCQkgYXR0aW5kZXgsIGRhdHVtbm8sIHRoaXNhdHQtPmF0dGxlbiwgb2ZmLCB0dXBs ZW4pKTsKKwkJCX0KKworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgdGhpc2F0 dC0+YXR0bGVuLCB0cCArIG9mZik7CisKKwkJCS8qIENoZWNrIHRoYXQgd2UgYXJlIHN0aWxsIGlu IHRoZSB0dXBsZSAqLworCQkJaWYgKGhvZmYgKyBvZmYgPiB0dXBsZW4pCisJCQl7CisJCQkJaW5k ZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRmKCJhdHRyaWJ1dGUgJXUg c3RvcmVkIHZhbHVlICV1IHdpdGggbGVuZ3RoICVkICIKKwkJCQkJCQkJCQkJICJlbmRzIGF0IG9m ZnNldCAldSBiZXlvbmQgdG90YWwgdHVwbGUgbGVuZ3RoICV1IiwKKwkJCQkJCQkJCQkJIGF0dGlu ZGV4LCBkYXR1bW5vLCB0aGlzYXR0LT5hdHRsZW4sIG9mZiwgdHVwbGVuKSk7CisJCQl9CisJCQlz dG9yZWQrKzsKKwkJfQorCisJfQorCit9CisKKy8qCisgKiBDaGVjayBhbGwgcGFnZXMgd2l0aGlu IHRoZSByYW5nZSBbbGFzdFJldm1hcFBhZ2UgKyAxLCBpbmRleG5ibG9ja3NdIGFyZSByZWd1bGFy IHBhZ2VzIG9yIG5ldworICogYW5kIHRoZXJlIGlzIGEgcG9pbnRlciBpbiByZXZtYXAgdG8gZWFj aCBOT1JNQUwgaW5kZXggdHVwbGUuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19yZWd1bGFyX3Bh Z2VzKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7CisJUmVhZFN0cmVhbSAqc3RyZWFtOworCWlu dAkJCXN0cmVhbV9mbGFnczsKKwlSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBzdHJlYW1fY2I7CisJ QmxvY2tSYW5nZVJlYWRTdHJlYW1Qcml2YXRlIHN0cmVhbV9kYXRhOworCisJLyogcmVzZXQgc3Rh dGUgKi8KKwlzdGF0ZS0+cmV2bWFwQmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXN0YXRlLT5y ZXZtYXBidWYgPSBJbnZhbGlkQnVmZmVyOworCXN0YXRlLT5yZXZtYXBpZHggPSAtMTsKKwlzdGF0 ZS0+cmVncGFnZUJsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwlzdGF0ZS0+cmVncGFnZWJ1ZiA9 IEludmFsaWRCdWZmZXI7CisJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJbnZhbGlkT2Zmc2V0TnVt YmVyOworCXN0YXRlLT5pZHhuYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhzdGF0 ZS0+aWR4cmVsKTsKKworCisJLyoKKwkgKiBQcmVwYXJlIHN0cmVhbSBkYXRhIGZvciByZWd1bGFy IHBhZ2VzIHdhbGsuIEl0IGlzIHNhZmUgdG8gdXNlIGJhdGNobW9kZQorCSAqIGFzIGJsb2NrX3Jh bmdlX3JlYWRfc3RyZWFtX2NiIHRha2VzIG5vIGxvY2tzLgorCSAqLworCXN0cmVhbV9mbGFncyA9 IFJFQURfU1RSRUFNX1NFUVVFTlRJQUwgfCBSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkcgfCBSRUFE X1NUUkVBTV9GVUxMOworCS8qIEZpcnN0IHJlZ3VsYXIgcGFnZSBpcyByaWdodCBhZnRlciB0aGUg bGFzdCByZXZtYXAgcGFnZSAqLworCXN0cmVhbV9kYXRhLmN1cnJlbnRfYmxvY2tudW0gPSBzdGF0 ZS0+bGFzdFJldm1hcFBhZ2UgKyAxOworCXN0cmVhbV9kYXRhLmxhc3RfZXhjbHVzaXZlID0gc3Rh dGUtPmlkeG5ibG9ja3M7CisKKwlzdHJlYW1fY2IgPSBibG9ja19yYW5nZV9yZWFkX3N0cmVhbV9j YjsKKwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihzdHJlYW1fZmxhZ3MsCisJ CQkJCQkJCQkJR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKSwKKwkJCQkJCQkJCQlzdGF0 ZS0+aWR4cmVsLAorCQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQlzdHJlYW1fY2Is CisJCQkJCQkJCQkJJnN0cmVhbV9kYXRhLAorCQkJCQkJCQkJCTApOworCisJd2hpbGUgKChzdGF0 ZS0+cmVncGFnZWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCkpICE9 IEludmFsaWRCdWZmZXIpCisJeworCQlPZmZzZXROdW1iZXIgbWF4b2ZmOworCisJCXN0YXRlLT5y ZWdwYWdlQmxrID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc3RhdGUtPnJlZ3BhZ2VidWYpOworCQlM b2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXN0YXRl LT5yZWdwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmVncGFnZWJ1Zik7CisKKwkJLyogU2tp cCBuZXcgcGFnZXMgKi8KKwkJaWYgKFBhZ2VJc05ldyhzdGF0ZS0+cmVncGFnZSkpCisJCXsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYpOworCQkJY29udGludWU7CisJ CX0KKworCQlpZiAoIUJSSU5fSVNfUkVHVUxBUl9QQUdFKHN0YXRlLT5yZWdwYWdlKSkKKwkJewor CQkJYnJpbl9jaGVja19lcmVwb3J0KHN0YXRlLCBwc3ByaW50ZigiZXhwZWN0ZWQgbmV3IG9yIHJl Z3VsYXIgcGFnZSBhdCBibG9jayAldSIsIHN0YXRlLT5yZWdwYWdlQmxrKSk7CisJCX0KKworCQkv KiBDaGVjayB0aGF0IGFsbCBOT1JNQUwgaW5kZXggdHVwbGVzIHdpdGhpbiB0aGUgcGFnZSBhcmUg bm90IG9ycGhhbnMgKi8KKwkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihzdGF0ZS0+ cmVncGFnZSk7CisJCWZvciAoc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBGaXJzdE9mZnNldE51bWJl cjsgc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPD0gbWF4b2ZmOyBzdGF0ZS0+cmVncGFnZW9mZnNldCsr KQorCQl7CisJCQlJdGVtSWQJCWxwOworCQkJQnJpblR1cGxlICAqdHVwOworCQkJQmxvY2tOdW1i ZXIgcmV2bWFwQmxrOworCisJCQlscCA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlKTsKKwor CQkJaWYgKEl0ZW1JZElzVXNlZChscCkpCisJCQl7CisJCQkJdHVwID0gKEJyaW5UdXBsZSAqKSBQ YWdlR2V0SXRlbShzdGF0ZS0+cmVncGFnZSwgbHApOworCisJCQkJLyogR2V0IHJldm1hcCBibG9j ayBudW1iZXIgZm9yIGluZGV4IHR1cGxlIGJsa25vICovCisJCQkJcmV2bWFwQmxrID0gKCh0dXAt PmJ0X2Jsa25vIC8gc3RhdGUtPnBhZ2VzUGVyUmFuZ2UpIC8gUkVWTUFQX1BBR0VfTUFYSVRFTVMp ICsgMTsKKwkJCQlpZiAocmV2bWFwQmxrID4gc3RhdGUtPmxhc3RSZXZtYXBQYWdlKQorCQkJCXsK KwkJCQkJaW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KHN0YXRlLCBwc3ByaW50Zigibm8gcmV2bWFw IHBhZ2UgZm9yIHRoZSBpbmRleCB0dXBsZSB3aXRoIGJsa25vICV1IiwKKwkJCQkJCQkJCQkJCQkJ CSB0dXAtPmJ0X2Jsa25vKSk7CisJCQkJfQorCisJCQkJLyogRmV0Y2ggYW5vdGhlciByZXZtYXAg cGFnZSBpZiBuZWVkZWQgKi8KKwkJCQlpZiAoc3RhdGUtPnJldm1hcEJsayAhPSByZXZtYXBCbGsp CisJCQkJeworCQkJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKHN0YXRlLT5yZXZtYXBCbGspKQor CQkJCQl7CisJCQkJCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYpOworCQkJCQl9CisJ CQkJCXN0YXRlLT5yZXZtYXBCbGsgPSByZXZtYXBCbGs7CisJCQkJCXN0YXRlLT5yZXZtYXBidWYg PSBSZWFkQnVmZmVyRXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBzdGF0ZS0+ cmV2bWFwQmxrLCBSQk1fTk9STUFMLAorCQkJCQkJCQkJCQkJCQkgIHN0YXRlLT5jaGVja3N0cmF0 ZWd5KTsKKwkJCQl9CisKKwkJCQlzdGF0ZS0+cmV2bWFwaWR4ID0gKHR1cC0+YnRfYmxrbm8gLyBz dGF0ZS0+cGFnZXNQZXJSYW5nZSkgJSBSRVZNQVBfUEFHRV9NQVhJVEVNUzsKKwkJCQlzdGF0ZS0+ cmFuZ2VCbGtubyA9IHR1cC0+YnRfYmxrbm87CisKKwkJCQkvKiBjaGVjayB0aGF0IHJldm1hcCBp dGVtIHBvaW50cyB0byBpbmRleCB0dXBsZSAqLworCQkJCWlmICghcmV2bWFwX3BvaW50c190b19p bmRleF90dXBsZShzdGF0ZSkpCisJCQkJeworCQkJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRl LCBwc3ByaW50ZigicmV2bWFwIGRvZXNuJ3QgcG9pbnQgdG8gaW5kZXggdHVwbGUiKSk7CisJCQkJ fQorCisJCQl9CisJCX0KKworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVm KTsKKwl9CisKKwlyZWFkX3N0cmVhbV9lbmQoc3RyZWFtKTsKKworCWlmIChzdGF0ZS0+cmV2bWFw YnVmICE9IEludmFsaWRCdWZmZXIpCisJeworCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBi dWYpOworCX0KK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSByZXZtYXAgaXRlbSBwb2ludHMgdG8g dGhlIGluZGV4IHR1cGxlIChyZWdwYWdlQmxrLCByZWdwYWdlb2Zmc2V0KS4KKyAqIFdlIGhhdmUg bG9ja2VkIHJlZyBwYWdlLCBhbmQgbG9jayByZXZtYXAgcGFnZSBoZXJlLgorICogSXQncyBhIHZh bGlkIGxvY2sgb3JkZXJpbmcsIHNvIG5vIGRlYWRsb2NrIGlzIHBvc3NpYmxlLgorICovCitzdGF0 aWMgYm9vbAorcmV2bWFwX3BvaW50c190b19pbmRleF90dXBsZShCcmluQ2hlY2tTdGF0ZSAqIHN0 YXRlKQoreworCUl0ZW1Qb2ludGVyRGF0YSAqcmV2bWFwdGlkczsKKwlSZXZtYXBDb250ZW50cyAq Y29udGVudHM7CisJSXRlbVBvaW50ZXJEYXRhICp0aWQ7CisJYm9vbAkJcG9pbnRzOworCisJTG9j a0J1ZmZlcihzdGF0ZS0+cmV2bWFwYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJY29udGVudHMg PSAoUmV2bWFwQ29udGVudHMgKikgUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2Uoc3RhdGUt PnJldm1hcGJ1ZikpOworCXJldm1hcHRpZHMgPSBjb250ZW50cy0+cm1fdGlkczsKKwl0aWQgPSBy ZXZtYXB0aWRzICsgc3RhdGUtPnJldm1hcGlkeDsKKworCXBvaW50cyA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXJOb0NoZWNrKHRpZCkgPT0gc3RhdGUtPnJlZ3BhZ2VCbGsgJiYKKwkJSXRlbVBv aW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKHRpZCkgPT0gc3RhdGUtPnJlZ3BhZ2VvZmZzZXQ7 CisKKwlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJ cmV0dXJuIHBvaW50czsKK30KKworLyoKKyAqIFBhZ2VHZXRJdGVtSWQoKSB3cmFwcGVyIHRoYXQg dmFsaWRhdGVzIHJldHVybmVkIGxpbmUgcG9pbnRlci4KKyAqCisgKiBpdGVtSWQgaW4gYnJpbiBp bmRleCBjb3VsZCBiZSBVTlVTRUQgb3IgTk9STUFMLgorICovCitzdGF0aWMgSXRlbUlkCitQYWdl R2V0SXRlbUlkQ2FyZWZ1bChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCVBhZ2UJCXBhZ2Ug PSBzdGF0ZS0+cmVncGFnZTsKKwlPZmZzZXROdW1iZXIgb2Zmc2V0ID0gc3RhdGUtPnJlZ3BhZ2Vv ZmZzZXQ7CisJSXRlbUlkCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZnNldCk7CisK KwlpZiAoSXRlbUlkR2V0T2Zmc2V0KGl0ZW1pZCkgKyBJdGVtSWRHZXRMZW5ndGgoaXRlbWlkKSA+ CisJCUJMQ0tTWiAtIE1BWEFMSUdOKHNpemVvZihCcmluU3BlY2lhbFNwYWNlKSkpCisJCWluZGV4 X3R1cGxlX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJcHNwcmludGYoImxpbmUgcG9pbnRlciBwb2lu dHMgcGFzdCBlbmQgb2YgdHVwbGUgc3BhY2UgaW4gaW5kZXguICIKKwkJCQkJCQkJCSAibHBfb2Zm PSV1LCBscF9sZW49JXUgbHBfZmxhZ3M9JXUiLAorCQkJCQkJCQkJIEl0ZW1JZEdldE9mZnNldChp dGVtaWQpLAorCQkJCQkJCQkJIEl0ZW1JZEdldExlbmd0aChpdGVtaWQpLAorCQkJCQkJCQkJIEl0 ZW1JZEdldEZsYWdzKGl0ZW1pZCkKKwkJCQkJCQkJCSApCisJCQkpOworCisJLyogVmVyaWZ5IHRo YXQgbGluZSBwb2ludGVyIGlzIExQX05PUk1BTCBvciBMUF9VTlVTRUQgKi8KKwlpZiAoISgoSXRl bUlkSXNOb3JtYWwoaXRlbWlkKSAmJiBJdGVtSWRIYXNTdG9yYWdlKGl0ZW1pZCkpIHx8CisJCSAg KCFJdGVtSWRJc1VzZWQoaXRlbWlkKSAmJiAhSXRlbUlkSGFzU3RvcmFnZShpdGVtaWQpKSkpCisJ eworCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCXBzcHJpbnRmKCJpbnZhbGlk IGxpbmUgcG9pbnRlciBzdG9yYWdlIGluIGluZGV4LiAiCisJCQkJCQkJCQkgImxwX29mZj0ldSwg bHBfbGVuPSV1IGxwX2ZsYWdzPSV1IiwKKwkJCQkJCQkJCSBJdGVtSWRHZXRPZmZzZXQoaXRlbWlk KSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRMZW5ndGgoaXRlbWlkKSwKKwkJCQkJCQkJCSBJdGVtSWRH ZXRGbGFncyhpdGVtaWQpCisJCQkJCQkJCQkgKSk7CisJfQorCisJcmV0dXJuIGl0ZW1pZDsKK30K KworCisvKiBSZXBvcnQgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBpbmZvICovCitzdGF0aWMgdm9p ZAorYnJpbl9jaGVja19lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IGNoYXIg KmZtdCkKK3sKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JS VVBURUQpLAorCQkJIGVycm1zZygiSW5kZXggJXMgaXMgY29ycnVwdGVkIC0gJXMiLCBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+aWR4cmVsKSwgZm10KSkpOworfQorCisvKiBSZXBvcnQg d2l0aCByYW5nZSBibGtubywgcmV2bWFwIGl0ZW0gaW5mbywgaW5kZXggdHVwbGUgaW5mbyAqLwor dm9pZAoraW5kZXhfdHVwbGVfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBj aGFyICpmbXQpCit7CisJQXNzZXJ0KHN0YXRlLT5yYW5nZUJsa25vICE9IEludmFsaWRCbG9ja051 bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZXZtYXBCbGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsK KwlBc3NlcnQoc3RhdGUtPnJldm1hcGlkeCA+PSAwICYmIHN0YXRlLT5yZXZtYXBpZHggPCBSRVZN QVBfUEFHRV9NQVhJVEVNUyk7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlQmxrICE9IEludmFsaWRC bG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlb2Zmc2V0ICE9IEludmFsaWRPZmZz ZXROdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhf Q09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVzIGlzIGNvcnJ1cHRlZCAtICVzLiBSYW5n ZSBibGtubzogJXUsIHJldm1hcCBpdGVtOiAoJXUsJXUpLCBpbmRleCB0dXBsZTogKCV1LCV1KSIs CisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5pZHhyZWwpLAorCQkJCQlmbXQs CisJCQkJCXN0YXRlLT5yYW5nZUJsa25vLAorCQkJCQlzdGF0ZS0+cmV2bWFwQmxrLAorCQkJCQlz dGF0ZS0+cmV2bWFwaWR4LAorCQkJCQlzdGF0ZS0+cmVncGFnZUJsaywKKwkJCQkJc3RhdGUtPnJl Z3BhZ2VvZmZzZXQpKSk7Cit9CisKKy8qIFJlcG9ydCB3aXRoIGluZGV4IHR1cGxlIGluZm8gKi8K K3ZvaWQKK2luZGV4X3R1cGxlX29ubHlfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBj b25zdCBjaGFyICpmbXQpCit7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlQmxrICE9IEludmFsaWRC bG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlb2Zmc2V0ICE9IEludmFsaWRPZmZz ZXROdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhf Q09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVzIGlzIGNvcnJ1cHRlZCAtICVzLiBJbmRl eCB0dXBsZTogKCV1LCV1KSIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5p ZHhyZWwpLAorCQkJCQlmbXQsCisJCQkJCXN0YXRlLT5yZWdwYWdlQmxrLAorCQkJCQlzdGF0ZS0+ cmVncGFnZW9mZnNldCkpKTsKK30KKworLyogUmVwb3J0IHdpdGggcmFuZ2UgYmxrbm8sIHJldm1h cCBpdGVtIGluZm8gKi8KK3ZvaWQKK3Jldm1hcF9pdGVtX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUg KiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KQoreworCUFzc2VydChzdGF0ZS0+cmFuZ2VCbGtubyAh PSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCUFzc2VydChzdGF0ZS0+cmV2bWFwQmxrICE9IEludmFs aWRCbG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZXZtYXBpZHggPj0gMCAmJiBzdGF0ZS0+ cmV2bWFwaWR4IDwgUkVWTUFQX1BBR0VfTUFYSVRFTVMpOworCisJZXJlcG9ydChFUlJPUiwKKwkJ CShlcnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVz IGlzIGNvcnJ1cHRlZCAtICVzLiBSYW5nZSBibGtubzogJXUsIHJldm1hcCBpdGVtOiAoJXUsJXUp LiIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5pZHhyZWwpLAorCQkJCQlm bXQsCisJCQkJCXN0YXRlLT5yYW5nZUJsa25vLAorCQkJCQlzdGF0ZS0+cmV2bWFwQmxrLAorCQkJ CQlzdGF0ZS0+cmV2bWFwaWR4KSkpOworfQotLSAKMi40My4wCgo= --00000000000091f0f7063b76ed0d--