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 1u8QMZ-003hQe-KY for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Apr 2025 21:13:36 +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 1u8QMW-00FNcV-5l for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Apr 2025 21:13:33 +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 1u8QMV-00FNcM-Kv for pgsql-hackers@lists.postgresql.org; Fri, 25 Apr 2025 21:13:32 +0000 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u8QMS-0024SN-26 for pgsql-hackers@lists.postgresql.org; Fri, 25 Apr 2025 21:13:31 +0000 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-30bfe0d2b6dso26356031fa.3 for ; Fri, 25 Apr 2025 14:13:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745615608; x=1746220408; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=vKeNQVKaokAj8uOGE9568PzpFGsciVmDs3QWchaqZQ4=; b=RhgzOiRyd2z++lIBX+eJS95NmtJhu5q1MUuGFl74lP4WGLMaXxRizJ8g45kabsox80 EBD6/fX+i5FfVrwc183gWvXnEDAtl6iVdl2V0ggMeXKRxjLkXYaBhJs5VxOKdhKS/aMx NsvqTls+2oLrjgU1SqUFc4ecpj/Vw4dcI0elVVM4opBJ3Le9SzvLwmULhbKA50jC0h0t 0+1gCo/MQYc7MfiKUHNm3fPv3qfdqf2blUExC4XJR0prCmHCatPpwS5bGhjS8VDoGI0Z fdEIsVyJmXyXH+TpnABHjE/AcT+jzPfwEuH5BggdF9BrFBaK7/Isgo+3yvUg/QP0VkwY 6dpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745615608; x=1746220408; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=vKeNQVKaokAj8uOGE9568PzpFGsciVmDs3QWchaqZQ4=; b=dJORgb1q5BovjaBFWkoovFbtsFqLRs6Z6R4mrEFCONDhlieTOGnaZMHOIV24b8j11y 9rTGtaYEWO3UKDQE6ELFnsUJ068fhn3ktT7xaK89hh98dCFHyrdDVQOu/kum7j2N4TJq gnKUBa4gzw91g+pfnOmL4cTjFoJks1/5vriPLugODtYm09ODhIa6zT4DSm/sOwSGZxQ7 48cTil71qvSTreahF3U3sZk1JiSkNyMKxLXDZSLiRN13rkJhgF2W9wwcXsKQbqH8Ox/u vKcNDnfeRcNPmCbkDYAqrzmZDOo+BwWx70u/PmKlPMywKbDEIrm2o6etL1dPBW+7Gw0M UK3w== X-Forwarded-Encrypted: i=1; AJvYcCXQGAr6g8mcu2hFCOeshq0CWAu92WQAWcU05EcSNzzvOfMRRsTE/kY5iz2itKdCRBbpR/3vpKcfqmJNCDoH@lists.postgresql.org X-Gm-Message-State: AOJu0Yzkm7+p2hAX17zd+1RWYnPaKma2ca9/fLcKZA3wD/bG2exYGHEE Na01aTRN2pUdn/TOfySwhHw3EgQIx/RokqvzQ2xU+9eRGrYDEItpqLMIK9yTaTgcOAx/Ces02S8 h0K//Ogf7uyKAqCUBjghwSYjH44Q= X-Gm-Gg: ASbGnctL4EM94SDCh8CKKYTOtx1do04N93hcf8+HGMpTTgRnL+zzniJmZOeYMbYC+BK o/8547lusS4dWjF0xq+kDEMUnz3CtHuNjL72mwxzezg/JSmrYb74D04/XzV4174x9+N4AAnotaH ZrGUafAquBIiS7xvlaIsJWfQ== X-Google-Smtp-Source: AGHT+IHyuKPlpF/oR5qN1+ONhJJbSVyrocaI7Cp0ivUEknubDFB3JqQzC4wwHGumyGSw+0QE0SNIvSPJVAzHhCy0TqM= X-Received: by 2002:a05:651c:b12:b0:30c:160b:c766 with SMTP id 38308e7fff4ca-31906050822mr10334081fa.14.1745615607383; Fri, 25 Apr 2025 14:13:27 -0700 (PDT) MIME-Version: 1.0 From: Matthias van de Meent Date: Fri, 25 Apr 2025 23:13:14 +0200 X-Gm-Features: ATxdqUEIJjPT3nybvVi4KY8oQ-pGy5qD2yLmwM0_xtwN0SZXnWBCJ7NoZ69ljHY Message-ID: Subject: [SP-]GiST IOS visibility bug (was: Why doens't GiST require super-exclusive lock) To: Heikki Linnakangas , Peter Geoghegan , PostgreSQL Hackers Cc: Michail Nikolaev Content-Type: multipart/mixed; boundary="000000000000316de90633a0ceb1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000316de90633a0ceb1 Content-Type: text/plain; charset="UTF-8" Hi, In the original thread [0] we established that GIST and SP-GiST support index-only scans, but don't have sufficient interlocking to prevent dead tuples from being revived for their scan by vacuum. As that thread already contains a lot of detail, I won't go into the specifics here, but the gist (heh) of it is as follows: (SP-)GiST index scans don't interlock with their index vacuum in a way that guarantees that their index-only scans only return TIDs that are known to be valid TIDs when they're returned by amgettuple, thus allowing index vacuum to clean TIDs up and let VACUUM mark their pages ALL_VISIBLE before the tids were returned by the index-only scan. The keen-eyed reader may have noticed that this issue is very similar to the issue fixed with 459e7bf8, and that's correct. Both are cases where the visibility map was accessed to determine the visibility of a TID of which we didn't know for sure it was still a valid TID on that heap page. While the thread in [0] contains a very thorough fix, and (IMO) some good additions to how index-only scans work with table AMs, the patch currently proposed there changes things in non-backpatchable ways. So, attached is a set of 4 patches designed for backpatching a fix. The patches work similar to [0]'s, but with less invasive code changes and no meaningful ABI breaks: index vacuum's lock requirements are increased to super-exclusive (cleanup) locks. Additionally, index-only scans will now do visibility checks of each tuple they want to return, before the pin on the index page that contains those tuples is released. The visibility check is done on a tuple-by-tuple basis, through a new function table_index_vischeck_tuple (so as to not totally break the semantic barrier between indexes and tables regarding visibility checks). In the patchset of [0] I added a table AM routine to allow tableAMs to extend this, but that's not backportable, hence this separate thread for discussing a backpatchable bugfix. The one exposed ABI change is done by adding a single-byte "visrecheck" field in an alignment area in IndexScanDescData - which historically has been the place to put new fields required for backported bugfixes. The size of the struct doesn't change, and there should be no backward or forward compatibility issues for extensions that might make use of this new field as long as they don't assume the value of the field when they haven't set it themselves. Kind regards, Matthias van de Meent Neon (https://neon.tech) [0] https://postgr.es/m/flat/CAH2-Wz=PqOziyRSrnN5jAtfXWXY7-BJcHz9S355LH8Dt=5qxWQ@mail.gmail.com --000000000000316de90633a0ceb1 Content-Type: application/octet-stream; name="v01-0002-GIST-Fix-visibility-issues-in-IOS.patch" Content-Disposition: attachment; filename="v01-0002-GIST-Fix-visibility-issues-in-IOS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9x8waes1 RnJvbSBmZGM5YzZjZTZiZmY1MGIwZGZkZTM5NjBmODAwYTQ1NWQ4MzVkM2QwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3VybStwb3N0 Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgMjUgQXByIDIwMjUgMTY6MTQ6MjYgKzAyMDAKU3Vi amVjdDogW1BBVENIIHYwMSAyLzRdIEdJU1Q6IEZpeCB2aXNpYmlsaXR5IGlzc3VlcyBpbiBJT1MK ClByZXZpb3VzbHksIEdJU1QgSU9TIGNvdWxkIGJ1ZmZlciB0dXBsZXMgZnJvbSBwYWdlcyB3aGls ZSBWQUNVVU0gY2FtZQphbG9uZyBhbmQgY2xlYW5lZCB1cCBhbiBBTExfREVBRCB0dXBsZSwgbWFy a2luZyB0aGUgdHVwbGUncyBwYWdlCkFMTF9WSVNJQkxFIGFnYWluIGFuZCBtYWtpbmcgSU9TIG1p c3Rha2VubHkgYmVsaWV2ZSB0aGUgdHVwbGUgaXMgaW5kZWVkCnZpc2libGUuCgpXaXRoIHRoaXMg Y29tbWl0LCBidWZmZXIgcGlucyBub3cgY29uZmxpY3Qgd2l0aCBHSVNUIHZhY3V1bSwgYW5kIHdl IG5vdwpkbyB2aXNpYmlsaXR5IGNoZWNrcyBvbiBoZWFwIGl0ZW1zIHJldHVybmVkIGZyb20gaW5k ZXggcGFnZXMgd2hpbGUgd2UKaG9sZCB0aGUgcGluLCBzbyB0aGF0IHRoZSBJT1MgaW5mcmFzdHJ1 Y3R1cmUga25vd3MgdG8gcmVjaGVjayB0aGUgaGVhcApwYWdlIGV2ZW4gaWYgdGhhdCBoZWFwIHBh Z2UgaGFzIGJlY29tZSBBTExfVklTSUJMRSBhZnRlciB3ZSByZWxlYXNlZCB0aGUKaW5kZXggcGFn ZS4KCklkZWEgZnJvbSBIZWlra2kgTGlubmFrYW5nYXMKCkJhY2twYXRjaDogMTctCi0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oICAgIHwgIDUgKysrKwogc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdGdldC5jICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrLS0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHNjYW4uYyAgIHwgMTEgKysrKysrKysrCiBz cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFjdXVtLmMgfCAgNiArKy0tLQogNCBmaWxlcyBj aGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0 X3ByaXZhdGUuaAppbmRleCA3Yjg3NDljOGRiMC4uNzhiZWUzYTkzZjMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2lzdF9wcml2YXRlLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2J1ZmZp bGUuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFt LmgiCisjaW5jbHVkZSAidGFibGVhbS5oIgogCiAvKgogICogTWF4aW11bSBudW1iZXIgb2YgImhh bHZlcyIgYSBwYWdlIGNhbiBiZSBzcGxpdCBpbnRvIGluIG9uZSBvcGVyYXRpb24uCkBAIC0xMjQs NiArMTI1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgR0lTVFNlYXJjaEhlYXBJdGVtCiAJCQkJCQkJCSAq IGluZGV4LW9ubHkgc2NhbnMgKi8KIAlPZmZzZXROdW1iZXIgb2ZmbnVtOwkJLyogdHJhY2sgb2Zm c2V0IGluIHBhZ2UgdG8gbWFyayB0dXBsZSBhcwogCQkJCQkJCQkgKiBMUF9ERUFEICovCisJdWlu dDgJCXZpc3JlY2hlY2s7CQkvKiBDYWNoZWQgdmlzaWJpbGl0eSBjaGVjayByZXN1bHQgZm9yIHRo aXMKKwkJCQkJCQkJICogaGVhcCBwb2ludGVyLiAqLwogfSBHSVNUU2VhcmNoSGVhcEl0ZW07CiAK IC8qIFVudmlzaXRlZCBpdGVtLCBlaXRoZXIgaW5kZXggcGFnZSBvciBoZWFwIHR1cGxlICovCkBA IC0xNzYsNiArMTc5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgR0lTVFNjYW5PcGFxdWVEYXRhCiAJT2Zm c2V0TnVtYmVyIGN1clBhZ2VEYXRhOwkvKiBuZXh0IGl0ZW0gdG8gcmV0dXJuICovCiAJTWVtb3J5 Q29udGV4dCBwYWdlRGF0YUN4dDsJLyogY29udGV4dCBob2xkaW5nIHRoZSBmZXRjaGVkIHR1cGxl cywgZm9yCiAJCQkJCQkJCSAqIGluZGV4LW9ubHkgc2NhbnMgKi8KKwkvKiBpbmZvIHVzZWQgYnkg SW5kZXgtT25seSBTY2FucyAqLworCUJ1ZmZlcgkJdm1idWY7CQkJLyogcmV1c2FibGUgYnVmZmVy IGZvciBJT1MnIHZtIGxvb2t1cHMgKi8KIH0gR0lTVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVm IEdJU1RTY2FuT3BhcXVlRGF0YSAqR0lTVFNjYW5PcGFxdWU7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 Z2V0LmMKaW5kZXggYjM1YjhhOTc1NzcuLjhmNmE2ODBiMDEwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdGdldC5jCkBAIC00NjIsOCArNDYyLDkgQEAgZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgR0lTVFNlYXJjaEl0ZW0gKnBhZ2VJdGVtLAogCQkJc28tPnBhZ2VEYXRhW3NvLT5uUGFn ZURhdGFdLm9mZm51bSA9IGk7CiAKIAkJCS8qCi0JCQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4s IGFsc28gZmV0Y2ggdGhlIGRhdGEgZnJvbSB0aGUgdHVwbGUuICBUaGUKLQkJCSAqIHJlY29uc3Ry dWN0ZWQgdHVwbGVzIGFyZSBzdG9yZWQgaW4gcGFnZURhdGFDeHQuCisJCQkgKiBJbiBhbiBpbmRl eC1vbmx5IHNjYW4sIGFsc28gZmV0Y2ggdGhlIGRhdGEgZnJvbSB0aGUgdHVwbGUsCisJCQkgKiBh bmQgaXRzIHZpc2liaWxpdHkgc3RhdGUuICBUaGUgcmVjb25zdHJ1Y3RlZCB0dXBsZXMgYXJlIHN0 b3JlZAorCQkJICogaW4gcGFnZURhdGFDeHQuCiAJCQkgKi8KIAkJCWlmIChzY2FuLT54c193YW50 X2l0dXApCiAJCQl7CkBAIC00NzEsNiArNDcyLDEwIEBAIGdpc3RTY2FuUGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEdJU1RTZWFyY2hJdGVtICpwYWdlSXRlbSwKIAkJCQlzby0+cGFnZURhdGFbc28t Pm5QYWdlRGF0YV0ucmVjb250dXAgPQogCQkJCQlnaXN0RmV0Y2hUdXBsZShnaXN0c3RhdGUsIHIs IGl0KTsKIAkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCQkJCXNvLT5wYWdl RGF0YVtzby0+blBhZ2VEYXRhXS52aXNyZWNoZWNrID0KKwkJCQkJdGFibGVfaW5kZXhfdmlzY2hl Y2tfdHVwbGUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCQkgICAmc28tPnZtYnVmLCAm aXQtPnRfdGlkKTsKIAkJCX0KIAkJCXNvLT5uUGFnZURhdGErKzsKIAkJfQpAQCAtNDk4LDEwICs1 MDMsMTYgQEAgZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0g KnBhZ2VJdGVtLAogCQkJCWl0ZW0tPmRhdGEuaGVhcC5yZWNoZWNrRGlzdGFuY2VzID0gcmVjaGVj a19kaXN0YW5jZXM7CiAKIAkJCQkvKgotCQkJCSAqIEluIGFuIGluZGV4LW9ubHkgc2NhbiwgYWxz byBmZXRjaCB0aGUgZGF0YSBmcm9tIHRoZSB0dXBsZS4KKwkJCQkgKiBJbiBhbiBpbmRleC1vbmx5 IHNjYW4sIGFsc28gZmV0Y2ggdGhlIGRhdGEgZnJvbSB0aGUgdHVwbGUsCisJCQkJICogYW5kIGl0 cyB2aXNpYmlsaXR5IHN0YXRlLgogCQkJCSAqLwogCQkJCWlmIChzY2FuLT54c193YW50X2l0dXAp CisJCQkJewogCQkJCQlpdGVtLT5kYXRhLmhlYXAucmVjb250dXAgPSBnaXN0RmV0Y2hUdXBsZShn aXN0c3RhdGUsIHIsIGl0KTsKKwkJCQkJaXRlbS0+ZGF0YS5oZWFwLnZpc3JlY2hlY2sgPQorCQkJ CQkJdGFibGVfaW5kZXhfdmlzY2hlY2tfdHVwbGUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJ CQkJCQkJICAgJnNvLT52bWJ1ZiwgJml0LT50X3RpZCk7CisJCQkJfQogCQkJfQogCQkJZWxzZQog CQkJewpAQCAtNTg2LDkgKzU5NywxNiBAQCBnZXROZXh0TmVhcmVzdChJbmRleFNjYW5EZXNjIHNj YW4pCiAJCQkJCQkJCQkJCQkgaXRlbS0+ZGlzdGFuY2VzLAogCQkJCQkJCQkJCQkJIGl0ZW0tPmRh dGEuaGVhcC5yZWNoZWNrRGlzdGFuY2VzKTsKIAotCQkJLyogaW4gYW4gaW5kZXgtb25seSBzY2Fu LCBhbHNvIHJldHVybiB0aGUgcmVjb25zdHJ1Y3RlZCB0dXBsZS4gKi8KKwkJCS8qCisJCQkgKiBJ biBhbiBpbmRleC1vbmx5IHNjYW4sIGFsc28gcmV0dXJuIHRoZSByZWNvbnN0cnVjdGVkIHR1cGxl CisJCQkgKiBhbmQgdGhlIHZpc2liaWxpdHkgY2hlY2sgd2UgZGlkIHdoZW4gd2Ugc3RpbGwgaGFk IGEgcGluIG9uCisJCQkgKiB0aGUgaW5kZXggcGFnZS4KKwkJCSAqLwogCQkJaWYgKHNjYW4tPnhz X3dhbnRfaXR1cCkKKwkJCXsKIAkJCQlzY2FuLT54c19oaXR1cCA9IGl0ZW0tPmRhdGEuaGVhcC5y ZWNvbnR1cDsKKwkJCQlzY2FuLT54c192aXNyZWNoZWNrID0gaXRlbS0+ZGF0YS5oZWFwLnZpc3Jl Y2hlY2s7CisJCQl9CiAJCQlyZXMgPSB0cnVlOwogCQl9CiAJCWVsc2UKQEAgLTY3MSw5ICs2ODks MTcgQEAgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJCQkJc2Nhbi0+eHNfaGVhcHRpZCA9IHNvLT5wYWdlRGF0YVtzby0+Y3VyUGFnZURhdGFdLmhl YXBQdHI7CiAJCQkJc2Nhbi0+eHNfcmVjaGVjayA9IHNvLT5wYWdlRGF0YVtzby0+Y3VyUGFnZURh dGFdLnJlY2hlY2s7CiAKLQkJCQkvKiBpbiBhbiBpbmRleC1vbmx5IHNjYW4sIGFsc28gcmV0dXJu IHRoZSByZWNvbnN0cnVjdGVkIHR1cGxlICovCisJCQkJLyoKKwkJCQkgKiBJbiBhbiBpbmRleC1v bmx5IHNjYW4sIGFsc28gcmV0dXJuIHRoZSByZWNvbnN0cnVjdGVkIHR1cGxlCisJCQkJICogYW5k IHRoZSB2aXNpYmlsaXR5IGNoZWNrIHdlIGRpZCB3aGVuIHdlIHN0aWxsIGhhZCBhIHBpbiBvbgor CQkJCSAqIHRoZSBpbmRleCBwYWdlLgorCQkJCSAqLwogCQkJCWlmIChzY2FuLT54c193YW50X2l0 dXApCisJCQkJewogCQkJCQlzY2FuLT54c19oaXR1cCA9IHNvLT5wYWdlRGF0YVtzby0+Y3VyUGFn ZURhdGFdLnJlY29udHVwOworCQkJCQlzY2FuLT54c192aXNyZWNoZWNrID0KKwkJCQkJCXNvLT5w YWdlRGF0YVtzby0+Y3VyUGFnZURhdGFdLnZpc3JlY2hlY2s7CisJCQkJfQogCiAJCQkJc28tPmN1 clBhZ2VEYXRhKys7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Rz Y2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCmluZGV4IGUwNTgwMWUy ZjViLi45N2ZlY2ZjYjFiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCkBAIC0zNDEs NiArMzQxLDEyIEBAIGdpc3RyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IGtleSwg aW50IG5rZXlzLAogCQkJcGZyZWUoZm5fZXh0cmFzKTsKIAl9CiAKKwlpZiAoQnVmZmVySXNWYWxp ZChzby0+dm1idWYpKQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihzby0+dm1idWYpOworCQlzby0+dm1i dWYgPSBJbnZhbGlkQnVmZmVyOworCX0KKwogCS8qIGFueSBwcmV2aW91cyB4c19oaXR1cCB3aWxs IGhhdmUgYmVlbiBwZnJlZSdkIGluIGNvbnRleHQgcmVzZXRzIGFib3ZlICovCiAJc2Nhbi0+eHNf aGl0dXAgPSBOVUxMOwogfQpAQCAtMzQ5LDYgKzM1NSwxMSBAQCB2b2lkCiBnaXN0ZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJR0lTVFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKKwlpZiAoQnVmZmVySXNWYWxpZChzby0+dm1idWYpKQorCXsKKwkJ UmVsZWFzZUJ1ZmZlcihzby0+dm1idWYpOworCQlzby0+dm1idWYgPSBJbnZhbGlkQnVmZmVyOwor CX0KIAogCS8qCiAJICogZnJlZUdJU1RzdGF0ZSBpcyBlbm91Z2ggdG8gY2xlYW4gdXAgZXZlcnl0 aGluZyBtYWRlIGJ5IGdpc3RiZWdpbnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0dmFjdXVtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFjdXVt LmMKaW5kZXggMjRmYjk0ZjQ3M2UuLmUwZGE2ZTM3ZGNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0dmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdHZhY3V1bS5jCkBAIC0yODksMTAgKzI4OSwxMCBAQCByZXN0YXJ0OgogCQkJCQkJCQlpbmZv LT5zdHJhdGVneSk7CiAKIAkvKgotCSAqIFdlIGFyZSBub3QgZ29pbmcgdG8gc3RheSBoZXJlIGZv ciBhIGxvbmcgdGltZSwgYWdncmVzc2l2ZWx5IGdyYWIgYW4KLQkgKiBleGNsdXNpdmUgbG9jay4K KwkgKiBXZSBhcmUgbm90IGdvaW5nIHRvIHN0YXkgaGVyZSBmb3IgYSBsb25nIHRpbWUsIGFnZ3Jl c3NpdmVseSBncmFiIGEKKwkgKiBjbGVhbnVwIGxvY2suCiAJICovCi0JTG9ja0J1ZmZlcihidWZm ZXIsIEdJU1RfRVhDTFVTSVZFKTsKKwlMb2NrQnVmZmVyRm9yQ2xlYW51cChidWZmZXIpOwogCXBh Z2UgPSAoUGFnZSkgQnVmZmVyR2V0UGFnZShidWZmZXIpOwogCiAJaWYgKGdpc3RQYWdlUmVjeWNs YWJsZShwYWdlKSkKLS0gCjIuNDUuMgoK --000000000000316de90633a0ceb1 Content-Type: application/octet-stream; name="v01-0001-Expose-visibility-checking-shim-for-index-usage.patch" Content-Disposition: attachment; filename="v01-0001-Expose-visibility-checking-shim-for-index-usage.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9x8wae90 RnJvbSA2ZjMzODQ2ZWFlMDQxN2U0Njc3MmY0Y2FmZTQ5M2MzZjU1OGM0YWQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3VybStwb3N0 Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgMjUgQXByIDIwMjUgMTQ6NTc6MDYgKzAyMDAKU3Vi amVjdDogW1BBVENIIHYwMSAxLzRdIEV4cG9zZSB2aXNpYmlsaXR5IGNoZWNraW5nIHNoaW0gZm9y IGluZGV4IHVzYWdlCgpUaGlzIHdpbGwgYmUgdGhlIGJhY2tib25lIG9mIGEgZml4IGZvciB2aXNp YmlsaXR5IGlzc3VlcyBpbiBnaXN0IGFuZApzcC1naXN0J3MgaW5kZXgtb25seSBzY2FuIGNvZGUg aW4gbGF0ZXIgY29tbWl0cy4KClRoZSBpc3N1ZSB0byBiZSBzb2x2ZWQgaXMgaW5kZXggc2NhbnMg Y2FjaGluZyB0dXBsZXMgaW4gbWVtb3J5IHRoYXQKYXJlIGJlaW5nIHJlbW92ZWQgYnkgYSBjb25j dXJyZW50bHkgcnVubmluZyB2YWN1dW07IHRvIHRoZSBwb2ludCB0aGF0CnRoZSBWQUNVVU0gcHJv Y2VzcyBoYXMgcmVtb3ZlZCB0aGUgdHVwbGUgYW5kIG1hcmtlZCBpdHMgcGFnZSBhcwpBTExfVklT SUJMRSBieSB0aGUgdGltZSB0aGUgSU9TIGNvZGUgcmV0dXJucyB0aGF0IHR1cGxlIHRocm91Z2gK YW1nZXR0dXBsZS4KCldoaWxlIHRoZSBzdHJ1Y3R1cmUgb2YgSW5kZXhTY2FuRGVzYyBpcyB1cGRh dGVkLCB0aGlzIG5ldyBmaWVsZCBpcwpsb2NhdGVkIGluIGFuIGFsaWdubWVudCBnYXAsIHRodXMg bWFraW5nIHRoaXMgbmV3IGZpZWxkIHNhZmUgdG8gdXNlLgotLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmggICAgICAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVh bS5oICAgICAgICAgICAgIHwgNTMgKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jICAgICAgIHwgIDYgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgfCA4MyArKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgfCAzNiArKysrKysrLS0tCiA1IGZpbGVzIGNo YW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aAppbmRleCA1MjEwNDMzMDRhYi4uYmE2OTRhYzRkMWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAt MTUwLDYgKzE1MCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJSW5kZXhG ZXRjaFRhYmxlRGF0YSAqeHNfaGVhcGZldGNoOwogCiAJYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQg bWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkICovCisJdWludDgJCXhzX3Zpc3JlY2hl Y2s7CS8qIFRNVkNfUmVzdWx0OyBzZWUgdGFibGVhbS5oICovCiAKIAkvKgogCSAqIFdoZW4gZmV0 Y2hpbmcgd2l0aCBhbiBvcmRlcmluZyBvcGVyYXRvciwgdGhlIHZhbHVlcyBvZiB0aGUgT1JERVIg QlkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDdiZTc4ODdiNGE4Li4wMDA3NzlhYzk4NCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0 cmVhbS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBzaG90 LmgiCisjaW5jbHVkZSAidmlzaWJpbGl0eW1hcC5oIgogCiAKICNkZWZpbmUgREVGQVVMVF9UQUJM RV9BQ0NFU1NfTUVUSE9ECSJoZWFwIgpAQCAtMjU2LDYgKzI1NywyOCBAQCB0eXBlZGVmIHN0cnVj dCBUTV9JbmRleERlbGV0ZU9wCiAJVE1fSW5kZXhTdGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhE ZWxldGVPcDsKIAorLyoKKyAqIE91dHB1dCBvZiB0YWJsZV9pbmRleF92aXNjaGVja190dXBsZSgp CisgKgorICogSW5kZXgtb25seSBzY2FucyBuZWVkIHRvIGtub3cgdGhlIHZpc2liaWxpdHkgb2Yg dGhlIGFzc29jaWF0ZWQgdGFibGUgdHVwbGVzCisgKiBiZWZvcmUgdGhleSBjYW4gcmV0dXJuIHRo ZSBpbmRleCB0dXBsZS4gIElmIHRoZSBpbmRleCB0dXBsZSBpcyBrbm93biB0byBiZQorICogdmlz aWJsZSB3aXRoIGEgY2hlYXAgY2hlY2ssIHdlIGNhbiByZXR1cm4gaXQgZGlyZWN0bHkgd2l0aG91 dCByZXF1ZXN0aW5nCisgKiB0aGUgdmlzaWJpbGl0eSBpbmZvIGZyb20gdGhlIHRhYmxlIEFNIGRp cmVjdGx5LgorICoKKyAqIFRoaXMgQU0gQVBJIGV4cG9zZXMgYSBjaGVhcCB2aXNpYmlsaXR5IGNo ZWNraW5nIEFQSSB0byBpbmRleGVzLCBhbGxvd2luZworICogdGhlc2UgaW5kZXhlcyB0byBjaGVj ayBtdWx0aXBsZSB0dXBsZXMgd29ydGggb2YgdmlzaWJpbGl0eSBpbmZvIGF0IG9uY2UsCisgKiBh bmQgYWxsb3dpbmcgdGhlIEFNIHRvIHN0b3JlIHRoZXNlIGNoZWNrcywgaW1wcm92aW5nIHRoZSBw aW5uaW5nIGVyZ29ub21pY3MKKyAqIG9mIGluZGV4IEFNcyBieSBhbGxvd2luZyBhIHNjYW4gdG8g Y2FjaGUgaW5kZXggdHVwbGVzIGluIG1lbW9yeSB3aXRob3V0CisgKiBob2xkaW5nIHBpbnMgb24g dGhvc2UgaW5kZXggdHVwbGVzJyBwYWdlcyB1bnRpbCB0aGUgaW5kZXggdHVwbGVzIHdlcmUKKyAq IHJldHVybmVkLgorICovCit0eXBlZGVmIGVudW0gVE1WQ19SZXN1bHQKK3sKKwlUTVZDX1VuY2hl Y2tlZCwKKwlUTVZDX01heWJlVmlzaWJsZSwKKwlUTVZDX1Zpc2libGUsCit9IFRNVkNfUmVzdWx0 OworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0YWJsZV90dXBsZV9pbnNlcnQgKi8KIC8q IFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAxOyBSZWxhdGlvbk5lZWRzV0FMKCkgbm93 IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJUX1NLSVBfRlNNCQkweDAwMDIKQEAgLTEz NTksNiArMTM4MiwzNiBAQCB0YWJsZV9pbmRleF9kZWxldGVfdHVwbGVzKFJlbGF0aW9uIHJlbCwg VE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpCiAJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5k ZXhfZGVsZXRlX3R1cGxlcyhyZWwsIGRlbHN0YXRlKTsKIH0KIAorLyoKKyAqIERldGVybWluZSBy b3VnaCB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIG9mIGluZGV4IHR1cGxlcyBiYXNlZCBvbiBlYWNo IFRJRC4KKyAqCisgKiBEZXRlcm1pbmVzIHdoaWNoIGVudHJpZXMgZnJvbSBpbmRleCBBTSBjYWxs ZXIncyBUTV9JbmRleFZpc2liaWxpdHlDaGVja09wCisgKiBzdGF0ZSBwb2ludCB0byBUTVZDX1ZJ U0lCTEUgb3IgVE1WQ19NQVlCRV9WSVNJQkxFIHRhYmxlIHR1cGxlcywgYXQgbG93IElPCisgKiBv dmVyaGVhZC4gIEZvciB0aGUgaGVhcCBBTSwgdGhlIGltcGxlbWVudGF0aW9uIGlzIGVmZmVjdGl2 ZWx5IGEgd3JhcHBlcgorICogYXJvdW5kIFZNX0FMTF9GUk9aRU4uCisgKgorICogT24gcmV0dXJu LCBhbGwgVE1fVmlzQ2hlY2tzIGluZGljYXRlZCBieSBjaGVja29wLT5jaGVja3RpZHMgd2lsbCBo YXZlIGJlZW4KKyAqIHVwZGF0ZWQgd2l0aCB0aGUgY29ycmVjdCB2aXNpYmlsaXR5IHN0YXR1cy4K KyAqCisgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gdmFsdWUgZm9yICJkZWZpbml0ZWx5IGRlYWQi IHR1cGxlcywgYXMgdGhlIEhlYXAgQU0KKyAqIGRvZXNuJ3QgaGF2ZSBhbiBlZmZpY2llbnQgbWV0 aG9kIHRvIGRldGVybWluZSB0aGF0IGEgdHVwbGUgaXMgZGVhZCB0byBhbGwKKyAqIHVzZXJzLCBh cyBpdCB3b3VsZCBoYXZlIHRvIGdvIGludG8gdGhlIGhlYXAuICBJZiBhbmQgd2hlbiBBTXMgYXJl IGJ1aWx0CisgKiB0aGF0IHdvdWxkIHN1cHBvcnQgVk0gY2hlY2tzIHdpdGggYW4gZXF1aXZhbGVu dCB0byBWTV9BTExfREVBRCB0aGlzCisgKiBkZWNpc2lvbiBjYW4gYmUgcmVjb25zaWRlcmVkLgor ICovCitzdGF0aWMgaW5saW5lIFRNVkNfUmVzdWx0Cit0YWJsZV9pbmRleF92aXNjaGVja190dXBs ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciAqdm1idWZmZXIsIEl0ZW1Qb2ludGVyIHRpZCkKK3sKKwlC bG9ja051bWJlcglibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXJOb0NoZWNrKHRpZCk7 CisJVE1WQ19SZXN1bHQJcmVzOworCisJaWYgKFZNX0FMTF9WSVNJQkxFKHJlbCwgYmxrbm8sIHZt YnVmZmVyKSkKKwkJcmVzID0gVE1WQ19WaXNpYmxlOworCWVsc2UKKwkJcmVzID0gVE1WQ19NYXli ZVZpc2libGU7CisKKwlyZXR1cm4gcmVzOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg KiAgRnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpb25zIG9mIHBoeXNpY2FsIHR1cGxlcy4KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IGRjZDA0YjgxM2Q4Li4yZTdlNDg0MDY2YiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC01ODEsNiArNTgxLDEyIEBAIGluZGV4X2dl dG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJ LyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVn aXN0ZXJlZCAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CiAK KwkvKgorCSAqIFJlc2V0IHhzX3Zpc3JlY2hlY2ssIHNvIHdlIGRvbid0IGNvbmZ1c2UgdGhlIG5l eHQgdHVwbGUncyB2aXNpYmlsaXR5CisJICogc3RhdGUgd2l0aCB0aGF0IG9mIHRoZSBwcmV2aW91 cy4KKwkgKi8KKwlzY2FuLT54c192aXNyZWNoZWNrID0gVE1WQ19VbmNoZWNrZWQ7CisKIAkvKgog CSAqIFRoZSBBTSdzIGFtZ2V0dHVwbGUgcHJvYyBmaW5kcyB0aGUgbmV4dCBpbmRleCBlbnRyeSBt YXRjaGluZyB0aGUgc2NhbgogCSAqIGtleXMsIGFuZCBwdXRzIHRoZSBUSUQgaW50byBzY2FuLT54 c19oZWFwdGlkLiAgSXQgc2hvdWxkIGFsc28gc2V0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYwppbmRleCBiNDkxOTRjMDE2Ny4uMTg4MThhNThmOTIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMTIwLDYgKzEyMCw3IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCXdoaWxlICgodGlkID0gaW5kZXhf Z2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9IE5VTEwpCiAJewogCQlib29sCQl0 dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKKwkJVE1WQ19SZXN1bHQJdmlzY2hlY2sgPSBzY2FuZGVz Yy0+eHNfdmlzcmVjaGVjazsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBAIC0xMjcs NiArMTI4LDkgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAq IFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAg cGFnZSBvbgogCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5 Ym9keS4gIEluIGFueSBjYXNlLAogCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0 aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YSBzb3VyY2UuCisJCSAqIFRoZSBpbmRleCBtYXkgaGF2 ZSBhbHJlYWR5IHByZS1jaGVja2VkIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSB0dXBsZQorCQkgKiBm b3IgdXMsIGFuZCBzdG9yZWQgdGhlIHJlc3VsdCBpbiB4c192aXNyZWNoZWNrLCBpbiB3aGljaCBj YXNlIHdlCisJCSAqIGNhbiBza2lwIHRoZSBjYWxsLgogCQkgKgogCQkgKiBOb3RlIG9uIE1lbW9y eSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKIAkJ ICogbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1 bHQgd2UgcmVhZApAQCAtMTU2LDM3ICsxNjAsNjAgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlT Y2FuU3RhdGUgKm5vZGUpCiAJCSAqCiAJCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlz IGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCiAJCSAqIHRoZSBWTSBidWZmZXIs IHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCisJCSAqCisJCSAqIFRo ZSBpbmRleCBkb2luZyB0aGVzZSBjaGVja3MgZm9yIHVzIGRvZXNuJ3QgbWF0ZXJpYWxseSBjaGFu Z2UgdGhlc2UKKwkJICogY29uc2lkZXJhdGlvbnMuCiAJCSAqLwotCQlpZiAoIVZNX0FMTF9WSVNJ QkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewotCQkJLyoKLQkJ CSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4K LQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAoIWluZGV4X2Zl dGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQljb250aW51ZTsJ CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCisJCWlmICh2aXNj aGVjayA9PSBUTVZDX1VuY2hlY2tlZCkKKwkJCXZpc2NoZWNrID0gdGFibGVfaW5kZXhfdmlzY2hl Y2tfdHVwbGUoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSAgJm5vZGUtPmlv c3NfVk1CdWZmZXIsCisJCQkJCQkJCQkJCQkgIHRpZCk7CiAKLQkJCUV4ZWNDbGVhclR1cGxlKG5v ZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMg YXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8KLQkJCSAqIG5lZWQgdG8g a2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMKLQkJ CSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkIG5lZWQg dG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJlciBub3QgdG8gY2FsbCBpbmRleF9n ZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9j b250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mgc25hcHNob3RzIGFyZSBub3Qgc3Vw cG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKKwkJQXNzZXJ0KHZpc2NoZWNrICE9IFRNVkNf VW5jaGVja2VkKTsKIAotCQkJLyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhv bGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5k ZXNjLT54c19jYnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQg aXQncyBub3QgY2xlYXIgd2hldGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5k ZXgKLQkJCSAqIGVudHJ5IG1pZ2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBh Z2UuCi0JCQkgKi8KLQotCQkJdHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKKwkJc3dpdGNoICh2aXNj aGVjaykKKwkJeworCQkJY2FzZSBUTVZDX1VuY2hlY2tlZDoKKwkJCQllbG9nKEVSUk9SLCAiRmFp bGVkIHRvIGNoZWNrIHZpc2liaWxpdHkgZm9yIHR1cGxlIik7CisJCQkJLyoKKwkJCQkgKiBJbiBj YXNlIG9mIGNvbXBpbGVycyB0aGF0IGRvbid0IHVuZGVydGFuZCB0aGF0IGVsb2coRVJST1IpCisJ CQkJICogZG9lbnMndCBleGl0LCBhbmQgd2hpY2ggaGF2ZSAtV2ltcGxpY2l0LWZhbGx0aHJvdWdo OgorCQkJCSAqLworCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQljYXNlIFRNVkNfTWF5YmVWaXNp YmxlOgorCQkJeworCQkJCS8qCisJCQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVh cCB0byBjaGVjayB2aXNpYmlsaXR5LgorCQkJCSAqLworCQkJCUluc3RyQ291bnRUdXBsZXMyKG5v ZGUsIDEpOworCQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVzYywgbm9kZS0+aW9zc19U YWJsZVNsb3QpKQorCQkJCQljb250aW51ZTsJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQg aW5kZXggZW50cnkgKi8KKworCQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90 KTsKKworCQkJCS8qCisJCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUgc3VwcG9ydGVkIGhl cmUsIHNvIHRoZXJlIHNob3VsZCBiZQorCQkJCSAqIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcg dGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJsZQorCQkJCSAqIGVudHJ5IGhhcyBiZWVuIGZvdW5k LiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhhdCwgd2UnZAorCQkJCSAqIG5lZWQgdG8ga2Vl cCBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsCisJCQkJICogaW5kZXhfZ2V0bmV4 dF90aWQgbmV4dCB0aW1lLgorCQkJCSAqLworCQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9jb250 aW51ZSkKKwkJCQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBv cnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIik7CisKKwkJCQkvKgorCQkJCSAqIE5vdGU6IGF0IHRo aXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwKKwkJCQkgKiBh cyByZWNvcmRlZCBpbiBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdAor CQkJCSAqIHBpbiBub3csIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8g ZG8gc28uCisJCQkJICogVGhlIG5leHQgaW5kZXggZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0 IHRvIHRoZSBzYW1lIGhlYXAKKwkJCQkgKiBwYWdlLgorCQkJCSAqLworCisJCQkJdHVwbGVfZnJv bV9oZWFwID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgVE1WQ19WaXNpYmxlOgor CQkJCWJyZWFrOwogCQl9CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggZjQy MDUxNzk2MWYuLmU2MDhiNmE5MzA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtNjM2 NCwxNSArNjM2NCwyOSBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhl YXBSZWwsCiAJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KIAlpbmRleF9zY2Fu LT54c193YW50X2l0dXAgPSB0cnVlOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5 cywgMSwgTlVMTCwgMCk7CisJaW5kZXhfc2Nhbi0+eHNfdmlzcmVjaGVjayA9IFRNVkNfVW5jaGVj a2VkOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9u ICovCiAJd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNj YW5kaXIpKSAhPSBOVUxMKQogCXsKIAkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCk7CisJCVRNVkNfUmVzdWx0IHZpc3JlcyA9IGluZGV4X3NjYW4tPnhz X3Zpc3JlY2hlY2s7CiAKLQkJaWYgKCFWTV9BTExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJCWJs b2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCisJCWlmICh2aXNyZXMgPT0gVE1WQ19VbmNoZWNrZWQp CisJCQl2aXNyZXMgPSB0YWJsZV9pbmRleF92aXNjaGVja190dXBsZShoZWFwUmVsLCAmdm1idWZm ZXIsIHRpZCk7CisKKwkJQXNzZXJ0KHZpc3JlcyAhPSBUTVZDX1VuY2hlY2tlZCk7CisKKwkJc3dp dGNoICh2aXNyZXMpCisJCXsKKwkJY2FzZSBUTVZDX1VuY2hlY2tlZDoKKwkJCWVsb2coRVJST1Is ICJGYWlsZWQgdG8gY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHVwbGUiKTsKKwkJCS8qCisJCQkgKiBJ biBjYXNlIG9mIGNvbXBpbGVycyB0aGF0IGRvbid0IHVuZGVydGFuZCB0aGF0IGVsb2coRVJST1Ip CisJCQkgKiBkb2Vucyd0IGV4aXQsIGFuZCB3aGljaCBoYXZlIC1XaW1wbGljaXQtZmFsbHRocm91 Z2g6CisJCQkgKi8KKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgVE1WQ19NYXliZVZpc2li bGU6CiAJCXsKIAkJCS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sg dmlzaWJpbGl0eSAqLwogCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxl c2xvdCkpCkBAIC02MzgyLDEwICs2Mzk2LDExIEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9p bnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAg QmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwCiAJCQkJICogcGFnZSBmZXRjaGVzIGFuZCBnaXZl IHVwIGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCiAJCQkJICoKLQkJCQkgKiBXZSBkb24ndCBjaGFy Z2UgYSBwYWdlIGZldGNoIGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0JCQkJICogYXMg dGhlIHByZXZpb3VzIHR1cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUsCi0J CQkJICogc2luY2Ugb3RoZXIgcmVjZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0 aWxsIGluCi0JCQkJICogYnVmZmVycyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciB0aGlz IGhldXJpc3RpYy4KKwkJCQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNoIGlmIHRoaXMg aXMgdGhlIHNhbWUgaGVhcAorCQkJCSAqIHBhZ2UgYXMgdGhlIHByZXZpb3VzIHR1cGxlLiAgVGhp cyBpcyBvbiB0aGUKKwkJCQkgKiBjb25zZXJ2YXRpdmUgc2lkZSwgc2luY2Ugb3RoZXIgcmVjZW50 bHktYWNjZXNzZWQgcGFnZXMKKwkJCQkgKiBhcmUgcHJvYmFibHkgc3RpbGwgaW4gYnVmZmVycyB0 b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoCisJCQkJICogZm9yIHRoaXMgaGV1cmlzdGljLgogCQkJ CSAqLwogI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAogCkBAIC02Mzk0LDcgKzY0MDks NyBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJCQkJ CWxhc3RfaGVhcF9ibG9jayA9IGJsb2NrOwogCQkJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcysrOwog CQkJCQlpZiAobl92aXNpdGVkX2hlYXBfcGFnZXMgPiBWSVNJVEVEX1BBR0VTX0xJTUlUKQotCQkJ CQkJYnJlYWs7CisJCQkJCQlnb3RvIGV4aXRfbG9vcDsKIAkJCQl9CiAKIAkJCQljb250aW51ZTsJ CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCkBAIC02NDA3LDYg KzY0MjIsMTAgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVs LAogCQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2aXNp YmxlIHR1cGxlIGluCiAJCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUsIHRo YXQncyBnb29kIGVub3VnaC4KIAkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBUTVZDX1Zp c2libGU6CisJCQlicmVhazsKIAkJfQogCiAJCS8qCkBAIC02NDM1LDYgKzY0NTQsNyBAQCBnZXRf YWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJCWhhdmVfZGF0YSA9 IHRydWU7CiAJCWJyZWFrOwogCX0KK2V4aXRfbG9vcDoKIAogCWlmICh2bWJ1ZmZlciAhPSBJbnZh bGlkQnVmZmVyKQogCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKLS0gCjIuNDUuMgoK --000000000000316de90633a0ceb1 Content-Type: application/octet-stream; name="v01-0003-SP-GIST-Fix-visibility-issues-in-IOS.patch" Content-Disposition: attachment; filename="v01-0003-SP-GIST-Fix-visibility-issues-in-IOS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9x8wafa2 RnJvbSA5YTZhNmNhNGYxODc3ZjBhMTEyYzYzYjZlNDcwNzRmYTE1ZGQxZDRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3VybStwb3N0 Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgMjUgQXByIDIwMjUgMTc6Mjk6NDIgKzAyMDAKU3Vi amVjdDogW1BBVENIIHYwMSAzLzRdIFNQLUdJU1Q6IEZpeCB2aXNpYmlsaXR5IGlzc3VlcyBpbiBJ T1MKClByZXZpb3VzbHksIFNQLUdJU1QgSU9TIGNvdWxkIGJ1ZmZlciB0dXBsZXMgZnJvbSBwYWdl cyB3aGlsZSBWQUNVVU0gY2FtZQphbG9uZyBhbmQgY2xlYW5lZCB1cCBhbiBBTExfREVBRCB0dXBs ZSwgbWFya2luZyB0aGUgdHVwbGUncyBwYWdlCkFMTF9WSVNJQkxFIGFnYWluIGFuZCBtYWtpbmcg SU9TIG1pc3Rha2VubHkgYmVsaWV2ZSB0aGUgdHVwbGUgaXMgaW5kZWVkCnZpc2libGUuCgpXaXRo IHRoaXMgY29tbWl0LCBidWZmZXIgcGlucyBub3cgY29uZmxpY3Qgd2l0aCBTUC1HSVNUIHZhY3V1 bSwgYW5kIHdlIG5vdwpkbyB2aXNpYmlsaXR5IGNoZWNrcyBvbiBoZWFwIGl0ZW1zIHJldHVybmVk IGZyb20gaW5kZXggcGFnZXMgd2hpbGUgd2UKaG9sZCB0aGUgcGluLCBzbyB0aGF0IHRoZSBJT1Mg aW5mcmFzdHJ1Y3R1cmUga25vd3MgdG8gcmVjaGVjayB0aGUgaGVhcApwYWdlIGV2ZW4gaWYgdGhh dCBoZWFwIHBhZ2UgaGFzIGJlY29tZSBBTExfVklTSUJMRSBhZnRlciB3ZSByZWxlYXNlZCB0aGUK aW5kZXggcGFnZS4KCklkZWEgZnJvbSBIZWlra2kgTGlubmFrYW5nYXMKCkJhY2twYXRjaDogMTct Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmggICB8ICA1ICsrCiBzcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYyAgIHwgNzIgKysrKysrKysrKysrKysrKysr KysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jIHwgIDIgKy0K IDMgZmlsZXMgY2hhbmdlZCwgNjQgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaAppbmRleCBlN2NiZTEwYTg5Yi4uZGQxZGNlNjYwZTgg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5j bHVkZSAic3RvcmFnZS9idWYuaCIKICNpbmNsdWRlICJ1dGlscy9nZW9fZGVjbHMuaCIKICNpbmNs dWRlICJ1dGlscy9yZWxjYWNoZS5oIgorI2luY2x1ZGUgInRhYmxlYW0uaCIKIAogCiB0eXBlZGVm IHN0cnVjdCBTcEdpc3RPcHRpb25zCkBAIC0xNzUsNiArMTc2LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg U3BHaXN0U2VhcmNoSXRlbQogCWJvb2wJCWlzTGVhZjsJCQkvKiBTZWFyY2hJdGVtIGlzIGhlYXAg aXRlbSAqLwogCWJvb2wJCXJlY2hlY2s7CQkvKiBxdWFsIHJlY2hlY2sgaXMgbmVlZGVkICovCiAJ Ym9vbAkJcmVjaGVja0Rpc3RhbmNlczsJLyogZGlzdGFuY2UgcmVjaGVjayBpcyBuZWVkZWQgKi8K Kwl1aW50OAkJdmlzcmVjaGVjazsJCS8qIElPUzogVE1WQ19SZXN1bHQgb2YgY29udGFpbmVkIGhl YXAgdHVwbGUgKi8KIAogCS8qIGFycmF5IHdpdGggbnVtYmVyT2ZPcmRlckJ5cyBlbnRyaWVzICov CiAJZG91YmxlCQlkaXN0YW5jZXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKQEAgLTIyMyw2ICsy MjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBTcEdpc3RTY2FuT3BhcXVlRGF0YQogCiAJLyogVGhlc2Ug ZmllbGRzIGFyZSBvbmx5IHVzZWQgaW4gYW1nZXR0dXBsZSBzY2FuczogKi8KIAlib29sCQl3YW50 X2l0dXA7CQkvKiBhcmUgd2UgcmVjb25zdHJ1Y3RpbmcgdHVwbGVzPyAqLworCUJ1ZmZlcgkJdm1i dWY7CQkJLyogSU9TOiB1c2VkIGZvciB0YWJsZV9pbmRleF92aXNjaGVja190dXBsZXMgKi8KIAlU dXBsZURlc2MJcmVjb25UdXBEZXNjOwkvKiBpZiBzbywgZGVzY3JpcHRvciBmb3IgcmVjb25zdHJ1 Y3RlZCB0dXBsZXMgKi8KIAlpbnQJCQluUHRyczsJCQkvKiBudW1iZXIgb2YgVElEcyBmb3VuZCBv biBjdXJyZW50IHBhZ2UgKi8KIAlpbnQJCQlpUHRyOwkJCS8qIGluZGV4IGZvciBzY2FubmluZyB0 aHJvdWdoIHNhbWUgKi8KQEAgLTIzMSw2ICsyMzQsOCBAQCB0eXBlZGVmIHN0cnVjdCBTcEdpc3RT Y2FuT3BhcXVlRGF0YQogCWJvb2wJCXJlY2hlY2tEaXN0YW5jZXNbTWF4SW5kZXhUdXBsZXNQZXJQ YWdlXTsJLyogZGlzdGFuY2UgcmVjaGVjawogCQkJCQkJCQkJCQkJCQkJICogZmxhZ3MgKi8KIAlI ZWFwVHVwbGUJcmVjb25UdXBzW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIHJlY29uc3RydWN0 ZWQgdHVwbGVzICovCisJLyogc3VwcG9ydCBmb3IgSU9TICovCisJdWludDgJICAgKnZpc3JlY2hl Y2s7CQkvKiBJT1MgdmlzIGNoZWNrIHJlc3VsdHMsIGNvdW50ZWQgYnkgblB0cnMgKi8KIAogCS8q IGRpc3RhbmNlcyAoZm9yIHJlY2hlY2spICovCiAJSW5kZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3Rh bmNlc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3NwZ2lzdC9zcGdzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4u YwppbmRleCAwMzI5M2E3ODE2ZS4uZjNlNWQ5YmY4NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3Bnc2Nhbi5jCkBAIC0zMCw3ICszMCw4IEBACiB0eXBlZGVmIHZvaWQgKCpzdG9yZVJlc19mdW5j KSAoU3BHaXN0U2Nhbk9wYXF1ZSBzbywgSXRlbVBvaW50ZXIgaGVhcFB0ciwKIAkJCQkJCQkgICBE YXR1bSBsZWFmVmFsdWUsIGJvb2wgaXNOdWxsLAogCQkJCQkJCSAgIFNwR2lzdExlYWZUdXBsZSBs ZWFmVHVwbGUsIGJvb2wgcmVjaGVjaywKLQkJCQkJCQkgICBib29sIHJlY2hlY2tEaXN0YW5jZXMs IGRvdWJsZSAqZGlzdGFuY2VzKTsKKwkJCQkJCQkgICBib29sIHJlY2hlY2tEaXN0YW5jZXMsIGRv dWJsZSAqZGlzdGFuY2VzLAorCQkJCQkJCSAgIFRNVkNfUmVzdWx0IHZpc2NoZWNrKTsKIAogLyoK ICAqIFBhaXJpbmcgaGVhcCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0aGUgU3BHaXN0U2VhcmNo SXRlbSBxdWV1ZS4KQEAgLTE0Miw2ICsxNDMsNyBAQCBzcGdBZGRTdGFydEl0ZW0oU3BHaXN0U2Nh bk9wYXF1ZSBzbywgYm9vbCBpc251bGwpCiAJc3RhcnRFbnRyeS0+dHJhdmVyc2FsVmFsdWUgPSBO VUxMOwogCXN0YXJ0RW50cnktPnJlY2hlY2sgPSBmYWxzZTsKIAlzdGFydEVudHJ5LT5yZWNoZWNr RGlzdGFuY2VzID0gZmFsc2U7CisJc3RhcnRFbnRyeS0+dmlzcmVjaGVjayA9IFRNVkNfVW5jaGVj a2VkOwogCiAJc3BnQWRkU2VhcmNoSXRlbVRvUXVldWUoc28sIHN0YXJ0RW50cnkpOwogfQpAQCAt MTg5LDYgKzE5MSwxMSBAQCByZXNldFNwR2lzdFNjYW5PcGFxdWUoU3BHaXN0U2Nhbk9wYXF1ZSBz bykKIAogCQlmb3IgKGkgPSAwOyBpIDwgc28tPm5QdHJzOyBpKyspCiAJCQlwZnJlZShzby0+cmVj b25UdXBzW2ldKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChzby0+dm1idWYpKQorCQkJUmVsZWFz ZUJ1ZmZlcihzby0+dm1idWYpOworCisJCXNvLT52bWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJfQog CXNvLT5pUHRyID0gc28tPm5QdHJzID0gMDsKIH0KQEAgLTM4Nyw2ICszOTQsMTMgQEAgc3BncmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAog CQltZW1tb3ZlKHNjYW4tPmtleURhdGEsIHNjYW5rZXksCiAJCQkJc2Nhbi0+bnVtYmVyT2ZLZXlz ICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CiAKKwkvKiBwcmVwYXJlIGluZGV4LW9ubHkgc2NhbiBy ZXF1aXJlbWVudHMgKi8KKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCXsKKwkJaWYgKHNvLT52 aXNyZWNoZWNrID09IE5VTEwpCisJCQlzby0+dmlzcmVjaGVjayA9IHBhbGxvYyhNYXhJbmRleFR1 cGxlc1BlclBhZ2UpOworCX0KKwogCS8qIGluaXRpYWxpemUgb3JkZXItYnkgZGF0YSBpZiBuZWVk ZWQgKi8KIAlpZiAob3JkZXJieXMgJiYgc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA+IDApCiAJewpA QCAtNDUzLDYgKzQ2Nyw5IEBAIHNwZ2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlwZnJl ZShzY2FuLT54c19vcmRlcmJ5bnVsbHMpOwogCX0KIAorCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT52 bWJ1ZikpCisJCVJlbGVhc2VCdWZmZXIoc28tPnZtYnVmKTsKKwogCXBmcmVlKHNvKTsKIH0KIApA QCAtNTAyLDYgKzUxOSw3IEBAIHNwZ05ld0hlYXBJdGVtKFNwR2lzdFNjYW5PcGFxdWUgc28sIGlu dCBsZXZlbCwgU3BHaXN0TGVhZlR1cGxlIGxlYWZUdXBsZSwKIAlpdGVtLT5pc0xlYWYgPSB0cnVl OwogCWl0ZW0tPnJlY2hlY2sgPSByZWNoZWNrOwogCWl0ZW0tPnJlY2hlY2tEaXN0YW5jZXMgPSBy ZWNoZWNrRGlzdGFuY2VzOworCWl0ZW0tPnZpc3JlY2hlY2sgPSBUTVZDX1VuY2hlY2tlZDsKIAog CXJldHVybiBpdGVtOwogfQpAQCAtNTE1LDcgKzUzMyw4IEBAIHNwZ05ld0hlYXBJdGVtKFNwR2lz dFNjYW5PcGFxdWUgc28sIGludCBsZXZlbCwgU3BHaXN0TGVhZlR1cGxlIGxlYWZUdXBsZSwKIHN0 YXRpYyBib29sCiBzcGdMZWFmVGVzdChTcEdpc3RTY2FuT3BhcXVlIHNvLCBTcEdpc3RTZWFyY2hJ dGVtICppdGVtLAogCQkJU3BHaXN0TGVhZlR1cGxlIGxlYWZUdXBsZSwgYm9vbCBpc251bGwsCi0J CQlib29sICpyZXBvcnRlZFNvbWUsIHN0b3JlUmVzX2Z1bmMgc3RvcmVSZXMpCisJCQlib29sICpy ZXBvcnRlZFNvbWUsIHN0b3JlUmVzX2Z1bmMgc3RvcmVSZXMsCisJCQlSZWxhdGlvbiB0YWJsZVJl bCkKIHsKIAlEYXR1bQkJbGVhZlZhbHVlOwogCWRvdWJsZQkgICAqZGlzdGFuY2VzOwpAQCAtNTcx LDYgKzU5MCwxNSBAQCBzcGdMZWFmVGVzdChTcEdpc3RTY2FuT3BhcXVlIHNvLCBTcEdpc3RTZWFy Y2hJdGVtICppdGVtLAogCiAJaWYgKHJlc3VsdCkKIAl7CisJCVRNVkNfUmVzdWx0IHZpc2NoZWNr ID0gVE1WQ19VbmNoZWNrZWQ7CisKKwkJaWYgKHNvLT53YW50X2l0dXApCisJCXsKKwkJCUFzc2Vy dChQb2ludGVySXNWYWxpZChzby0+aXRlbXMpKTsKKwkJCXZpc2NoZWNrID0gdGFibGVfaW5kZXhf dmlzY2hlY2tfdHVwbGUodGFibGVSZWwsICZzby0+dm1idWYsCisJCQkJCQkJCQkJCQkgICZpdGVt LT5oZWFwUHRyKTsKKwkJfQorCiAJCS8qIGl0ZW0gcGFzc2VzIHRoZSBzY2Fua2V5cyAqLwogCQlp ZiAoc28tPm51bWJlck9mTm9uTnVsbE9yZGVyQnlzID4gMCkKIAkJewpAQCAtNTgzLDYgKzYxMSw3 IEBAIHNwZ0xlYWZUZXN0KFNwR2lzdFNjYW5PcGFxdWUgc28sIFNwR2lzdFNlYXJjaEl0ZW0gKml0 ZW0sCiAJCQkJCQkJCQkJCQkJCXJlY2hlY2tEaXN0YW5jZXMsCiAJCQkJCQkJCQkJCQkJCWlzbnVs bCwKIAkJCQkJCQkJCQkJCQkJZGlzdGFuY2VzKTsKKwkJCWhlYXBJdGVtLT52aXNyZWNoZWNrID0g dmlzY2hlY2s7CiAKIAkJCXNwZ0FkZFNlYXJjaEl0ZW1Ub1F1ZXVlKHNvLCBoZWFwSXRlbSk7CiAK QEAgLTU5Myw3ICs2MjIsNyBAQCBzcGdMZWFmVGVzdChTcEdpc3RTY2FuT3BhcXVlIHNvLCBTcEdp c3RTZWFyY2hJdGVtICppdGVtLAogCQkJLyogbm9uLW9yZGVyZWQgc2Nhbiwgc28gcmVwb3J0IHRo ZSBpdGVtIHJpZ2h0IGF3YXkgKi8KIAkJCUFzc2VydCghcmVjaGVja0Rpc3RhbmNlcyk7CiAJCQlz dG9yZVJlcyhzbywgJmxlYWZUdXBsZS0+aGVhcFB0ciwgbGVhZlZhbHVlLCBpc251bGwsCi0JCQkJ CSBsZWFmVHVwbGUsIHJlY2hlY2ssIGZhbHNlLCBOVUxMKTsKKwkJCQkJIGxlYWZUdXBsZSwgcmVj aGVjaywgZmFsc2UsIE5VTEwsIHZpc2NoZWNrKTsKIAkJCSpyZXBvcnRlZFNvbWUgPSB0cnVlOwog CQl9CiAJfQpAQCAtNzY1LDcgKzc5NCw4IEBAIHNwZ1Rlc3RMZWFmVHVwbGUoU3BHaXN0U2Nhbk9w YXF1ZSBzbywKIAkJCQkgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2Zmc2V0LAogCQkJCSBib29s IGlzbnVsbCwgYm9vbCBpc3Jvb3QsCiAJCQkJIGJvb2wgKnJlcG9ydGVkU29tZSwKLQkJCQkgc3Rv cmVSZXNfZnVuYyBzdG9yZVJlcykKKwkJCQkgc3RvcmVSZXNfZnVuYyBzdG9yZVJlcywKKwkJCQkg UmVsYXRpb24gdGFibGVyZWwpCiB7CiAJU3BHaXN0TGVhZlR1cGxlIGxlYWZUdXBsZSA9IChTcEdp c3RMZWFmVHVwbGUpCiAJCVBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgb2Zm c2V0KSk7CkBAIC04MDEsNyArODMxLDggQEAgc3BnVGVzdExlYWZUdXBsZShTcEdpc3RTY2FuT3Bh cXVlIHNvLAogCiAJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmbGVhZlR1cGxlLT5oZWFwUHRy KSk7CiAKLQlzcGdMZWFmVGVzdChzbywgaXRlbSwgbGVhZlR1cGxlLCBpc251bGwsIHJlcG9ydGVk U29tZSwgc3RvcmVSZXMpOworCXNwZ0xlYWZUZXN0KHNvLCBpdGVtLCBsZWFmVHVwbGUsIGlzbnVs bCwgcmVwb3J0ZWRTb21lLCBzdG9yZVJlcywKKwkJCQl0YWJsZXJlbCk7CiAKIAlyZXR1cm4gU0dM VF9HRVRfTkVYVE9GRlNFVChsZWFmVHVwbGUpOwogfQpAQCAtODE0LDggKzg0NSw4IEBAIHNwZ1Rl c3RMZWFmVHVwbGUoU3BHaXN0U2Nhbk9wYXF1ZSBzbywKICAqIG5leHQgcGFnZSBib3VuZGFyeSBv bmNlIHdlIGhhdmUgcmVwb3J0ZWQgYXQgbGVhc3Qgb25lIHR1cGxlLgogICovCiBzdGF0aWMgdm9p ZAotc3BnV2FsayhSZWxhdGlvbiBpbmRleCwgU3BHaXN0U2Nhbk9wYXF1ZSBzbywgYm9vbCBzY2Fu V2hvbGVJbmRleCwKLQkJc3RvcmVSZXNfZnVuYyBzdG9yZVJlcykKK3NwZ1dhbGsoUmVsYXRpb24g aW5kZXgsIFJlbGF0aW9uIHRhYmxlLCBTcEdpc3RTY2FuT3BhcXVlIHNvLAorCQlib29sIHNjYW5X aG9sZUluZGV4LCBzdG9yZVJlc19mdW5jIHN0b3JlUmVzKQogewogCUJ1ZmZlcgkJYnVmZmVyID0g SW52YWxpZEJ1ZmZlcjsKIAlib29sCQlyZXBvcnRlZFNvbWUgPSBmYWxzZTsKQEAgLTgzNyw3ICs4 NjgsOCBAQCByZWRpcmVjdDoKIAkJCUFzc2VydChzby0+bnVtYmVyT2ZOb25OdWxsT3JkZXJCeXMg PiAwKTsKIAkJCXN0b3JlUmVzKHNvLCAmaXRlbS0+aGVhcFB0ciwgaXRlbS0+dmFsdWUsIGl0ZW0t PmlzTnVsbCwKIAkJCQkJIGl0ZW0tPmxlYWZUdXBsZSwgaXRlbS0+cmVjaGVjaywKLQkJCQkJIGl0 ZW0tPnJlY2hlY2tEaXN0YW5jZXMsIGl0ZW0tPmRpc3RhbmNlcyk7CisJCQkJCSBpdGVtLT5yZWNo ZWNrRGlzdGFuY2VzLCBpdGVtLT5kaXN0YW5jZXMsCisJCQkJCSBpdGVtLT52aXNyZWNoZWNrKTsK IAkJCXJlcG9ydGVkU29tZSA9IHRydWU7CiAJCX0KIAkJZWxzZQpAQCAtODc2LDcgKzkwOCw4IEBA IHJlZGlyZWN0OgogCQkJCQlmb3IgKG9mZnNldCA9IEZpcnN0T2Zmc2V0TnVtYmVyOyBvZmZzZXQg PD0gbWF4OyBvZmZzZXQrKykKIAkJCQkJCSh2b2lkKSBzcGdUZXN0TGVhZlR1cGxlKHNvLCBpdGVt LCBwYWdlLCBvZmZzZXQsCiAJCQkJCQkJCQkJCQlpc251bGwsIHRydWUsCi0JCQkJCQkJCQkJCQkm cmVwb3J0ZWRTb21lLCBzdG9yZVJlcyk7CisJCQkJCQkJCQkJCQkmcmVwb3J0ZWRTb21lLCBzdG9y ZVJlcywKKwkJCQkJCQkJCQkJCXRhYmxlKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKQEAgLTg4 Niw3ICs5MTksOCBAQCByZWRpcmVjdDoKIAkJCQkJCUFzc2VydChvZmZzZXQgPj0gRmlyc3RPZmZz ZXROdW1iZXIgJiYgb2Zmc2V0IDw9IG1heCk7CiAJCQkJCQlvZmZzZXQgPSBzcGdUZXN0TGVhZlR1 cGxlKHNvLCBpdGVtLCBwYWdlLCBvZmZzZXQsCiAJCQkJCQkJCQkJCQkgIGlzbnVsbCwgZmFsc2Us Ci0JCQkJCQkJCQkJCQkgICZyZXBvcnRlZFNvbWUsIHN0b3JlUmVzKTsKKwkJCQkJCQkJCQkJCSAg JnJlcG9ydGVkU29tZSwgc3RvcmVSZXMsCisJCQkJCQkJCQkJCQkgIHRhYmxlKTsKIAkJCQkJCWlm IChvZmZzZXQgPT0gU3BHaXN0UmVkaXJlY3RPZmZzZXROdW1iZXIpCiAJCQkJCQkJZ290byByZWRp cmVjdDsKIAkJCQkJfQpAQCAtOTMxLDcgKzk2NSw4IEBAIHN0YXRpYyB2b2lkCiBzdG9yZUJpdG1h cChTcEdpc3RTY2FuT3BhcXVlIHNvLCBJdGVtUG9pbnRlciBoZWFwUHRyLAogCQkJRGF0dW0gbGVh ZlZhbHVlLCBib29sIGlzbnVsbCwKIAkJCVNwR2lzdExlYWZUdXBsZSBsZWFmVHVwbGUsIGJvb2wg cmVjaGVjaywKLQkJCWJvb2wgcmVjaGVja0Rpc3RhbmNlcywgZG91YmxlICpkaXN0YW5jZXMpCisJ CQlib29sIHJlY2hlY2tEaXN0YW5jZXMsIGRvdWJsZSAqZGlzdGFuY2VzLAorCQkJVE1WQ19SZXN1 bHQgdmlzY2hlY2spCiB7CiAJQXNzZXJ0KCFyZWNoZWNrRGlzdGFuY2VzICYmICFkaXN0YW5jZXMp OwogCXRibV9hZGRfdHVwbGVzKHNvLT50Ym0sIGhlYXBQdHIsIDEsIHJlY2hlY2spOwpAQCAtOTQ5 LDcgKzk4NCw3IEBAIHNwZ2dldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAq dGJtKQogCXNvLT50Ym0gPSB0Ym07CiAJc28tPm50aWRzID0gMDsKIAotCXNwZ1dhbGsoc2Nhbi0+ aW5kZXhSZWxhdGlvbiwgc28sIHRydWUsIHN0b3JlQml0bWFwKTsKKwlzcGdXYWxrKHNjYW4tPmlu ZGV4UmVsYXRpb24sIHNjYW4tPmhlYXBSZWxhdGlvbiwgc28sIHRydWUsIHN0b3JlQml0bWFwKTsK IAogCXJldHVybiBzby0+bnRpZHM7CiB9CkBAIC05NTksNyArOTk0LDggQEAgc3RhdGljIHZvaWQK IHN0b3JlR2V0dHVwbGUoU3BHaXN0U2Nhbk9wYXF1ZSBzbywgSXRlbVBvaW50ZXIgaGVhcFB0ciwK IAkJCSAgRGF0dW0gbGVhZlZhbHVlLCBib29sIGlzbnVsbCwKIAkJCSAgU3BHaXN0TGVhZlR1cGxl IGxlYWZUdXBsZSwgYm9vbCByZWNoZWNrLAotCQkJICBib29sIHJlY2hlY2tEaXN0YW5jZXMsIGRv dWJsZSAqbm9uTnVsbERpc3RhbmNlcykKKwkJCSAgYm9vbCByZWNoZWNrRGlzdGFuY2VzLCBkb3Vi bGUgKm5vbk51bGxEaXN0YW5jZXMsCisJCQkgIFRNVkNfUmVzdWx0IHZpc2NoZWNrKQogewogCUFz c2VydChzby0+blB0cnMgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpOwogCXNvLT5oZWFwUHRyc1tz by0+blB0cnNdID0gKmhlYXBQdHI7CkBAIC0xMDE4LDYgKzEwNTQsOCBAQCBzdG9yZUdldHR1cGxl KFNwR2lzdFNjYW5PcGFxdWUgc28sIEl0ZW1Qb2ludGVyIGhlYXBQdHIsCiAJCXNvLT5yZWNvblR1 cHNbc28tPm5QdHJzXSA9IGhlYXBfZm9ybV90dXBsZShzby0+cmVjb25UdXBEZXNjLAogCQkJCQkJ CQkJCQkJICAgbGVhZkRhdHVtcywKIAkJCQkJCQkJCQkJCSAgIGxlYWZJc251bGxzKTsKKworCQlz by0+dmlzcmVjaGVja1tzby0+blB0cnNdID0gdmlzY2hlY2s7CiAJfQogCXNvLT5uUHRycysrOwog fQpAQCAtMTA0Miw2ICsxMDgwLDExIEBAIHNwZ2dldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlzY2FuLT54c19yZWNoZWNrID0gc28tPnJlY2hlY2tbc28t PmlQdHJdOwogCQkJc2Nhbi0+eHNfaGl0dXAgPSBzby0+cmVjb25UdXBzW3NvLT5pUHRyXTsKIAor CQkJaWYgKHNvLT53YW50X2l0dXApCisJCQkJc2Nhbi0+eHNfdmlzcmVjaGVjayA9IHNvLT52aXNy ZWNoZWNrW3NvLT5pUHRyXTsKKworCQkJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXAgfHwgc2Nh bi0+eHNfdmlzcmVjaGVjayAhPSBUTVZDX1VuY2hlY2tlZCk7CisKIAkJCWlmIChzby0+bnVtYmVy T2ZPcmRlckJ5cyA+IDApCiAJCQkJaW5kZXhfc3RvcmVfZmxvYXQ4X29yZGVyYnlfZGlzdGFuY2Vz KHNjYW4sIHNvLT5vcmRlckJ5VHlwZXMsCiAJCQkJCQkJCQkJCQkJIHNvLT5kaXN0YW5jZXNbc28t PmlQdHJdLApAQCAtMTA3MCw3ICsxMTEzLDggQEAgc3BnZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJfQogCQlzby0+aVB0ciA9IHNvLT5uUHRycyA9IDA7 CiAKLQkJc3BnV2FsayhzY2FuLT5pbmRleFJlbGF0aW9uLCBzbywgZmFsc2UsIHN0b3JlR2V0dHVw bGUpOworCQlzcGdXYWxrKHNjYW4tPmluZGV4UmVsYXRpb24sIHNjYW4tPmhlYXBSZWxhdGlvbiwg c28sIGZhbHNlLAorCQkJCXN0b3JlR2V0dHVwbGUpOwogCiAJCWlmIChzby0+blB0cnMgPT0gMCkK IAkJCWJyZWFrOwkJCQkvKiBtdXN0IGhhdmUgY29tcGxldGVkIHNjYW4gKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCmluZGV4IDBkYTA2OWZkNGQ3Li5kMDY4MGE1MDczZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCkBAIC02MjksNyArNjI5LDcgQEAgc3Bn dmFjdXVtcGFnZShzcGdCdWxrRGVsZXRlU3RhdGUgKmJkcywgQmxvY2tOdW1iZXIgYmxrbm8pCiAK IAlidWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoaW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8s CiAJCQkJCQkJCVJCTV9OT1JNQUwsIGJkcy0+aW5mby0+c3RyYXRlZ3kpOwotCUxvY2tCdWZmZXIo YnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCUxvY2tCdWZmZXJGb3JDbGVhbnVwKGJ1 ZmZlcik7CiAJcGFnZSA9IChQYWdlKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAKIAlpZiAoUGFn ZUlzTmV3KHBhZ2UpKQotLSAKMi40NS4yCgo= --000000000000316de90633a0ceb1 Content-Type: application/octet-stream; name="v01-0004-Test-for-IOS-Vacuum-race-conditions-in-index-AMs.patch" Content-Disposition: attachment; filename="v01-0004-Test-for-IOS-Vacuum-race-conditions-in-index-AMs.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9x8wafp3 RnJvbSAwZDUwNGVhY2FlYTkxZjFkYTU0ODNiMTQyZTk0Yjk4MDQ1NmE3MTFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3VybStwb3N0 Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgMjEgTWFyIDIwMjUgMTY6NDE6MzEgKzAxMDAKU3Vi amVjdDogW1BBVENIIHYwMSA0LzRdIFRlc3QgZm9yIElPUy9WYWN1dW0gcmFjZSBjb25kaXRpb25z IGluIGluZGV4IEFNcwoKQWRkIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCBkZW1vbnN0cmF0ZSB3cm9u ZyByZXN1bHRzIGNhbiBvY2N1ciB3aXRoIGluZGV4LW9ubHkKc2NhbnMgaW4gR2lTVCBhbmQgU1At R2lTVCBpbmRleGVzIHdoZW4gZW5jb3VudGVyaW5nIHR1cGxlcyBiZWluZyByZW1vdmVkIGJ5IGEK Y29uY3VycmVudCBWQUNVVU0gb3BlcmF0aW9uLgoKV2l0aCB0aGVzZSB0ZXN0cyB0aGUgaW5kZXgg QU1zIGFyZSBhbHNvIGV4cGVjdGVkIHRvIG5vdCBibG9jayBWQUNVVU0gZXZlbiB3aGVuCnRoZXkn cmUgdXNlZCBpbnNpZGUgYSBjdXJzb3IuCgpSZXBvcnRlZC1ieTogUGV0ZXIgR2VvZ2hlZ2FuIDxw Z0Bib3d0LmllPgpDby1hdXRob3JlZC1ieTogTWF0dGhpYXMgdmFuIGRlIE1lZW50IDxib2VrZXd1 cm0rcG9zdGdyZXNAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogUGV0ZXIgR2VvZ2hlZ2FuIDxw Z0Bib3d0LmllPgpDby1hdXRob3JlZC1ieTogTWljaGFpbCBOaWtvbGFldiA8bWljaGFpbC5uaWtv bGFldkBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZmxhdC9DQU50 dTBvaTBya1IlMkJGc2d5TFhuR1otdVcyOTUwLXVyQXBBV0xoeS0lMkJWMVdKRCUzRF9aWEElNDBt YWlsLmdtYWlsLmNvbQotLS0KIC4uLi9leHBlY3RlZC9pbmRleC1vbmx5LXNjYW4tZ2lzdC12YWN1 dW0ub3V0ICB8ICA1MyArKysrKysrCiAuLi4vaW5kZXgtb25seS1zY2FuLXNwZ2lzdC12YWN1dW0u b3V0ICAgICAgICAgfCAgNTMgKysrKysrKwogc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9z Y2hlZHVsZSAgICAgICAgIHwgICAyICsKIC4uLi9zcGVjcy9pbmRleC1vbmx5LXNjYW4tZ2lzdC12 YWN1dW0uc3BlYyAgICB8IDExMiArKysrKysrKysrKysrKwogLi4uL3NwZWNzL2luZGV4LW9ubHkt c2Nhbi1zcGdpc3QtdmFjdXVtLnNwZWMgIHwgMTEyICsrKysrKysrKysrKysrCiAuLi4vaXNvbGF0 aW9uL3NwZWNzL3ZhY3V1bS1pb3MtY29uZmxpY3RzLnNwZWMgfCAxNDMgKysrKysrKysrKysrKysr KysrCiA2IGZpbGVzIGNoYW5nZWQsIDQ3NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2luZGV4LW9ubHktc2Nhbi1naXN0LXZhY3V1 bS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5k ZXgtb25seS1zY2FuLXNwZ2lzdC12YWN1dW0ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvaXNvbGF0aW9uL3NwZWNzL2luZGV4LW9ubHktc2Nhbi1naXN0LXZhY3V1bS5zcGVjCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2luZGV4LW9ubHktc2Nhbi1z cGdpc3QtdmFjdXVtLnNwZWMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9pc29sYXRpb24v c3BlY3MvdmFjdXVtLWlvcy1jb25mbGljdHMuc3BlYwoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lz b2xhdGlvbi9leHBlY3RlZC9pbmRleC1vbmx5LXNjYW4tZ2lzdC12YWN1dW0ub3V0IGIvc3JjL3Rl c3QvaXNvbGF0aW9uL2V4cGVjdGVkL2luZGV4LW9ubHktc2Nhbi1naXN0LXZhY3V1bS5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI3YzAyZWU5NTI5Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2luZGV4LW9ubHktc2Nhbi1n aXN0LXZhY3V1bS5vdXQKQEAgLTAsMCArMSw1MyBAQAorUGFyc2VkIHRlc3Qgc3BlYyB3aXRoIDIg c2Vzc2lvbnMKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMyX21vZCBzMV9iZWdpbiBzMV9wcmVw YXJlX3NvcnRlZCBzMV9mZXRjaF8xIHMyX3ZhY3V1bSBzMV9mZXRjaF9hbGwgczFfY29tbWl0Citz dGVwIHMyX21vZDogCisgIERFTEVURSBGUk9NIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgV0hFUkUg YSAhPSBwb2ludCAnKDEsMSknOworCitzdGVwIHMxX2JlZ2luOiBCRUdJTjsKK3N0ZXAgczFfcHJl cGFyZV9zb3J0ZWQ6IAorCURFQ0xBUkUgZm9vIE5PIFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVDVCBh IDwtPiBwb2ludCAnKDAsMCknIGFzIHggRlJPTSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIE9SREVS IEJZIGEgPC0+IHBvaW50ICcoMCwwKSc7CisKK3N0ZXAgczFfZmV0Y2hfMTogCisJRkVUQ0ggRlJP TSBmb287CisKKyAgICAgICAgICAgICAgICAgeAorLS0tLS0tLS0tLS0tLS0tLS0tCisxLjQxNDIx MzU2MjM3MzA5NTEKKygxIHJvdykKKworc3RlcCBzMl92YWN1dW06IFZBQ1VVTSAoVFJVTkNBVEUg ZmFsc2UpIGlvc19uZWVkc19jbGVhbnVwX2xvY2s7CitzdGVwIHMxX2ZldGNoX2FsbDogCisJRkVU Q0ggQUxMIEZST00gZm9vOworCit4CistCisoMCByb3dzKQorCitzdGVwIHMxX2NvbW1pdDogQ09N TUlUOworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJfbW9kIHMxX2JlZ2luIHMxX3ByZXBhcmVf dW5zb3J0ZWQgczFfZmV0Y2hfMSBzMl92YWN1dW0gczFfZmV0Y2hfYWxsIHMxX2NvbW1pdAorc3Rl cCBzMl9tb2Q6IAorICBERUxFVEUgRlJPTSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIFdIRVJFIGEg IT0gcG9pbnQgJygxLDEpJzsKKworc3RlcCBzMV9iZWdpbjogQkVHSU47CitzdGVwIHMxX3ByZXBh cmVfdW5zb3J0ZWQ6IAorCURFQ0xBUkUgZm9vIE5PIFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVDVCBh IEZST00gaW9zX25lZWRzX2NsZWFudXBfbG9jayBXSEVSRSBib3ggJygoLTEwMCwtMTAwKSwoMTAw LDEwMCkpJyBAPiBhOworCitzdGVwIHMxX2ZldGNoXzE6IAorCUZFVENIIEZST00gZm9vOworCith ICAgIAorLS0tLS0KKygxLDEpCisoMSByb3cpCisKK3N0ZXAgczJfdmFjdXVtOiBWQUNVVU0gKFRS VU5DQVRFIGZhbHNlKSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrOworc3RlcCBzMV9mZXRjaF9hbGw6 IAorCUZFVENIIEFMTCBGUk9NIGZvbzsKKworYQorLQorKDAgcm93cykKKworc3RlcCBzMV9jb21t aXQ6IENPTU1JVDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbmRl eC1vbmx5LXNjYW4tc3BnaXN0LXZhY3V1bS5vdXQgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0 ZWQvaW5kZXgtb25seS1zY2FuLXNwZ2lzdC12YWN1dW0ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5iN2MwMmVlOTUyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbmRleC1vbmx5LXNjYW4tc3BnaXN0LXZhY3V1bS5vdXQK QEAgLTAsMCArMSw1MyBAQAorUGFyc2VkIHRlc3Qgc3BlYyB3aXRoIDIgc2Vzc2lvbnMKKworc3Rh cnRpbmcgcGVybXV0YXRpb246IHMyX21vZCBzMV9iZWdpbiBzMV9wcmVwYXJlX3NvcnRlZCBzMV9m ZXRjaF8xIHMyX3ZhY3V1bSBzMV9mZXRjaF9hbGwgczFfY29tbWl0CitzdGVwIHMyX21vZDogCisg IERFTEVURSBGUk9NIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgV0hFUkUgYSAhPSBwb2ludCAnKDEs MSknOworCitzdGVwIHMxX2JlZ2luOiBCRUdJTjsKK3N0ZXAgczFfcHJlcGFyZV9zb3J0ZWQ6IAor CURFQ0xBUkUgZm9vIE5PIFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVDVCBhIDwtPiBwb2ludCAnKDAs MCknIGFzIHggRlJPTSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIE9SREVSIEJZIGEgPC0+IHBvaW50 ICcoMCwwKSc7CisKK3N0ZXAgczFfZmV0Y2hfMTogCisJRkVUQ0ggRlJPTSBmb287CisKKyAgICAg ICAgICAgICAgICAgeAorLS0tLS0tLS0tLS0tLS0tLS0tCisxLjQxNDIxMzU2MjM3MzA5NTEKKygx IHJvdykKKworc3RlcCBzMl92YWN1dW06IFZBQ1VVTSAoVFJVTkNBVEUgZmFsc2UpIGlvc19uZWVk c19jbGVhbnVwX2xvY2s7CitzdGVwIHMxX2ZldGNoX2FsbDogCisJRkVUQ0ggQUxMIEZST00gZm9v OworCit4CistCisoMCByb3dzKQorCitzdGVwIHMxX2NvbW1pdDogQ09NTUlUOworCitzdGFydGlu ZyBwZXJtdXRhdGlvbjogczJfbW9kIHMxX2JlZ2luIHMxX3ByZXBhcmVfdW5zb3J0ZWQgczFfZmV0 Y2hfMSBzMl92YWN1dW0gczFfZmV0Y2hfYWxsIHMxX2NvbW1pdAorc3RlcCBzMl9tb2Q6IAorICBE RUxFVEUgRlJPTSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIFdIRVJFIGEgIT0gcG9pbnQgJygxLDEp JzsKKworc3RlcCBzMV9iZWdpbjogQkVHSU47CitzdGVwIHMxX3ByZXBhcmVfdW5zb3J0ZWQ6IAor CURFQ0xBUkUgZm9vIE5PIFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVDVCBhIEZST00gaW9zX25lZWRz X2NsZWFudXBfbG9jayBXSEVSRSBib3ggJygoLTEwMCwtMTAwKSwoMTAwLDEwMCkpJyBAPiBhOwor CitzdGVwIHMxX2ZldGNoXzE6IAorCUZFVENIIEZST00gZm9vOworCithICAgIAorLS0tLS0KKygx LDEpCisoMSByb3cpCisKK3N0ZXAgczJfdmFjdXVtOiBWQUNVVU0gKFRSVU5DQVRFIGZhbHNlKSBp b3NfbmVlZHNfY2xlYW51cF9sb2NrOworc3RlcCBzMV9mZXRjaF9hbGw6IAorCUZFVENIIEFMTCBG Uk9NIGZvbzsKKworYQorLQorKDAgcm93cykKKworc3RlcCBzMV9jb21taXQ6IENPTU1JVDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgYi9zcmMvdGVz dC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCmluZGV4IDE0MzEwOWFhNGRhLi45NzIwYzlh MmRjOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQor KysgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCkBAIC0xNyw2ICsxNyw4 IEBAIHRlc3Q6IHBhcnRpYWwtaW5kZXgKIHRlc3Q6IHR3by1pZHMKIHRlc3Q6IG11bHRpcGxlLXJv dy12ZXJzaW9ucwogdGVzdDogaW5kZXgtb25seS1zY2FuCit0ZXN0OiBpbmRleC1vbmx5LXNjYW4t Z2lzdC12YWN1dW0KK3Rlc3Q6IGluZGV4LW9ubHktc2Nhbi1zcGdpc3QtdmFjdXVtCiB0ZXN0OiBw cmVkaWNhdGUtbG9jay1ob3QtdHVwbGUKIHRlc3Q6IHVwZGF0ZS1jb25mbGljdC1vdXQKIHRlc3Q6 IGRlYWRsb2NrLXNpbXBsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2lu ZGV4LW9ubHktc2Nhbi1naXN0LXZhY3V1bS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNz L2luZGV4LW9ubHktc2Nhbi1naXN0LXZhY3V1bS5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi45ZDI0MWIyNTkyMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L2lzb2xhdGlvbi9zcGVjcy9pbmRleC1vbmx5LXNjYW4tZ2lzdC12YWN1dW0uc3BlYwpAQCAtMCww ICsxLDExMiBAQAorIyBpbmRleC1vbmx5LXNjYW4gdGVzdCBzaG93aW5nIHdyb25nIHJlc3VsdHMg d2l0aCBHaVNUCisjCitzZXR1cAoreworCS0tIGJ5IHVzaW5nIGEgbG93IGZpbGxmYWN0b3IgYW5k IGEgd2lkZSB0dXBsZSB3ZSBjYW4gZ2V0IG11bHRpcGxlIGJsb2NrcworCS0tIHdpdGgganVzdCBm ZXcgcm93cworCUNSRUFURSBUQUJMRSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIChhIHBvaW50IE5P VCBOVUxMLCBiIGludCBub3QgbnVsbCwgcGFkIGNoYXIoMTAyNCkgZGVmYXVsdCAnJykKKwlXSVRI IChBVVRPVkFDVVVNX0VOQUJMRUQgPSBmYWxzZSwgRklMTEZBQ1RPUiA9IDEwKTsKKworCUlOU0VS VCBJTlRPIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgU0VMRUNUIHBvaW50KGcuaSwgZy5pKSwgZy5p IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBnKGkpOworCisJQ1JFQVRFIElOREVYIGlvc19z cGdpc3RfYSBPTiBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIFVTSU5HIGdpc3QoYSk7Cit9CitzZXR1 cAoreworCVZBQ1VVTSAoQU5BTFlaRSkgaW9zX25lZWRzX2NsZWFudXBfbG9jazsKK30KKwordGVh cmRvd24KK3sKKwlEUk9QIFRBQkxFIGlvc19uZWVkc19jbGVhbnVwX2xvY2s7Cit9CisKKworc2Vz c2lvbiBzMQorCisjIEZvcmNlIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2hlcmUgcG9zc2libGU6Citz ZXR1cCB7CisJU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gZmFsc2U7CisJU0VUIGVuYWJsZV9pbmRl eG9ubHlzY2FuID0gdHJ1ZTsKKwlTRVQgZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7Cit9CisKK3N0 ZXAgczFfYmVnaW4geyBCRUdJTjsgfQorc3RlcCBzMV9jb21taXQgeyBDT01NSVQ7IH0KKworc3Rl cCBzMV9wcmVwYXJlX3NvcnRlZCB7CisJREVDTEFSRSBmb28gTk8gU0NST0xMIENVUlNPUiBGT1Ig U0VMRUNUIGEgPC0+IHBvaW50ICcoMCwwKScgYXMgeCBGUk9NIGlvc19uZWVkc19jbGVhbnVwX2xv Y2sgT1JERVIgQlkgYSA8LT4gcG9pbnQgJygwLDApJzsKK30KKworc3RlcCBzMV9wcmVwYXJlX3Vu c29ydGVkIHsKKwlERUNMQVJFIGZvbyBOTyBTQ1JPTEwgQ1VSU09SIEZPUiBTRUxFQ1QgYSBGUk9N IGlvc19uZWVkc19jbGVhbnVwX2xvY2sgV0hFUkUgYm94ICcoKC0xMDAsLTEwMCksKDEwMCwxMDAp KScgQD4gYTsKK30KKworc3RlcCBzMV9mZXRjaF8xIHsKKwlGRVRDSCBGUk9NIGZvbzsKK30KKwor c3RlcCBzMV9mZXRjaF9hbGwgeworCUZFVENIIEFMTCBGUk9NIGZvbzsKK30KKworCitzZXNzaW9u IHMyCisKKyMgRG9uJ3QgZGVsZXRlIHJvdyAxIHNvIHdlIGhhdmUgYSByb3cgZm9yIHRoZSBjdXJz b3IgdG8gInJlc3QiIG9uLgorc3RlcCBzMl9tb2QKK3sKKyAgREVMRVRFIEZST00gaW9zX25lZWRz X2NsZWFudXBfbG9jayBXSEVSRSBhICE9IHBvaW50ICcoMSwxKSc7Cit9CisKKyMgRGlzYWJsZSB0 cnVuY2F0aW9uLCBhcyBvdGhlcndpc2Ugd2UnbGwganVzdCB3YWl0IGZvciBhIHRpbWVvdXQgd2hp bGUgdHJ5aW5nCisjIHRvIGFjcXVpcmUgdGhlIGxvY2sKK3N0ZXAgczJfdmFjdXVtICB7IFZBQ1VV TSAoVFJVTkNBVEUgZmFsc2UpIGlvc19uZWVkc19jbGVhbnVwX2xvY2s7IH0KKworcGVybXV0YXRp b24KKyAgIyBkZWxldGUgbmVhcmx5IGFsbCByb3dzLCB0byBtYWtlIGlzc3VlIHZpc2libGUKKyAg czJfbW9kCisgICMgY3JlYXRlIGEgY3Vyc29yCisgIHMxX2JlZ2luCisgIHMxX3ByZXBhcmVfc29y dGVkCisKKyAgIyBmZXRjaCBvbmUgcm93IGZyb20gdGhlIGN1cnNvciwgdGhhdCBlbnN1cmVzIHRo ZSBpbmRleCBzY2FuIHBvcnRpb24gaXMgZG9uZQorICAjIGJlZm9yZSB0aGUgdmFjdXVtIGluIHRo ZSBuZXh0IHN0ZXAKKyAgczFfZmV0Y2hfMQorCisgICMgd2l0aCB0aGUgYnVnIHRoaXMgdmFjdXVt IHdpbGwgbWFyayBwYWdlcyBhcyBhbGwtdmlzaWJsZSB0aGF0IHRoZSBzY2FuIGluCisgICMgdGhl IG5leHQgc3RlcCB0aGVuIGNvbnNpZGVycyBhbGwtdmlzaWJsZSwgZGVzcGl0ZSBhbGwgcm93cyBm cm9tIHRob3NlCisgICMgcGFnZXMgaGF2aW5nIGJlZW4gcmVtb3ZlZC4KKyAgIyBCZWNhdXNlIHRo aXMgc2hvdWxkIGJsb2NrIG9uIGJ1ZmZlci1sZXZlbCBsb2NrcywgdGhpcyB3b24ndCBldmVyIGJl CisgICMgY29uc2lkZXJlZCAiYmxvY2tlZCIgYnkgaXNvbGF0aW9uIHRlc3RlciwgYW5kIHNvIHdl IG9ubHkgaGF2ZSBhIHNpbmdsZQorICAjIHN0ZXAgd2UgY2FuIHdvcmsgd2l0aCBjb25jdXJyZW50 bHkuCisgIHMyX3ZhY3V1bQorCisgICMgaWYgdGhpcyByZXR1cm5zIGFueSByb3dzLCB3ZSdyZSBi dXN0ZWQKKyAgczFfZmV0Y2hfYWxsCisKKyAgczFfY29tbWl0CisKK3Blcm11dGF0aW9uCisgICMg ZGVsZXRlIG5lYXJseSBhbGwgcm93cywgdG8gbWFrZSBpc3N1ZSB2aXNpYmxlCisgIHMyX21vZAor ICAjIGNyZWF0ZSBhIGN1cnNvcgorICBzMV9iZWdpbgorICBzMV9wcmVwYXJlX3Vuc29ydGVkCisK KyAgIyBmZXRjaCBvbmUgcm93IGZyb20gdGhlIGN1cnNvciwgdGhhdCBlbnN1cmVzIHRoZSBpbmRl eCBzY2FuIHBvcnRpb24gaXMgZG9uZQorICAjIGJlZm9yZSB0aGUgdmFjdXVtIGluIHRoZSBuZXh0 IHN0ZXAKKyAgczFfZmV0Y2hfMQorCisgICMgd2l0aCB0aGUgYnVnIHRoaXMgdmFjdXVtIHdpbGwg bWFyayBwYWdlcyBhcyBhbGwtdmlzaWJsZSB0aGF0IHRoZSBzY2FuIGluCisgICMgdGhlIG5leHQg c3RlcCB0aGVuIGNvbnNpZGVycyBhbGwtdmlzaWJsZSwgZGVzcGl0ZSBhbGwgcm93cyBmcm9tIHRo b3NlCisgICMgcGFnZXMgaGF2aW5nIGJlZW4gcmVtb3ZlZC4KKyAgIyBCZWNhdXNlIHRoaXMgc2hv dWxkIGJsb2NrIG9uIGJ1ZmZlci1sZXZlbCBsb2NrcywgdGhpcyB3b24ndCBldmVyIGJlCisgICMg Y29uc2lkZXJlZCAiYmxvY2tlZCIgYnkgaXNvbGF0aW9uIHRlc3RlciwgYW5kIHNvIHdlIG9ubHkg aGF2ZSBhIHNpbmdsZQorICAjIHN0ZXAgd2UgY2FuIHdvcmsgd2l0aCBjb25jdXJyZW50bHkuCisg IHMyX3ZhY3V1bQorCisgICMgaWYgdGhpcyByZXR1cm5zIGFueSByb3dzLCB3ZSdyZSBidXN0ZWQK KyAgczFfZmV0Y2hfYWxsCisKKyAgczFfY29tbWl0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9pc29s YXRpb24vc3BlY3MvaW5kZXgtb25seS1zY2FuLXNwZ2lzdC12YWN1dW0uc3BlYyBiL3NyYy90ZXN0 L2lzb2xhdGlvbi9zcGVjcy9pbmRleC1vbmx5LXNjYW4tc3BnaXN0LXZhY3V1bS5zcGVjCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZDYyMWQ0ZjdmMgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9pbmRleC1vbmx5LXNjYW4tc3BnaXN0 LXZhY3V1bS5zcGVjCkBAIC0wLDAgKzEsMTEyIEBACisjIGluZGV4LW9ubHktc2NhbiB0ZXN0IHNo b3dpbmcgd3JvbmcgcmVzdWx0cyB3aXRoIFNQR2lTVAorIworc2V0dXAKK3sKKwktLSBieSB1c2lu ZyBhIGxvdyBmaWxsZmFjdG9yIGFuZCBhIHdpZGUgdHVwbGUgd2UgY2FuIGdldCBtdWx0aXBsZSBi bG9ja3MKKwktLSB3aXRoIGp1c3QgZmV3IHJvd3MKKwlDUkVBVEUgVEFCTEUgaW9zX25lZWRzX2Ns ZWFudXBfbG9jayAoYSBwb2ludCBOT1QgTlVMTCwgYiBpbnQgbm90IG51bGwsIHBhZCBjaGFyKDEw MjQpIGRlZmF1bHQgJycpCisJV0lUSCAoQVVUT1ZBQ1VVTV9FTkFCTEVEID0gZmFsc2UsIEZJTExG QUNUT1IgPSAxMCk7CisKKwlJTlNFUlQgSU5UTyBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIFNFTEVD VCBwb2ludChnLmksIGcuaSksIGcuaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgZyhpKTsK KworCUNSRUFURSBJTkRFWCBpb3Nfc3BnaXN0X2EgT04gaW9zX25lZWRzX2NsZWFudXBfbG9jayBV U0lORyBzcGdpc3QoYSk7Cit9CitzZXR1cAoreworCVZBQ1VVTSAoQU5BTFlaRSkgaW9zX25lZWRz X2NsZWFudXBfbG9jazsKK30KKwordGVhcmRvd24KK3sKKwlEUk9QIFRBQkxFIGlvc19uZWVkc19j bGVhbnVwX2xvY2s7Cit9CisKKworc2Vzc2lvbiBzMQorCisjIEZvcmNlIGFuIGluZGV4LW9ubHkg c2Nhbiwgd2hlcmUgcG9zc2libGU6CitzZXR1cCB7CisJU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0g ZmFsc2U7CisJU0VUIGVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKKwlTRVQgZW5hYmxlX2lu ZGV4c2NhbiA9IHRydWU7Cit9CisKK3N0ZXAgczFfYmVnaW4geyBCRUdJTjsgfQorc3RlcCBzMV9j b21taXQgeyBDT01NSVQ7IH0KKworc3RlcCBzMV9wcmVwYXJlX3NvcnRlZCB7CisJREVDTEFSRSBm b28gTk8gU0NST0xMIENVUlNPUiBGT1IgU0VMRUNUIGEgPC0+IHBvaW50ICcoMCwwKScgYXMgeCBG Uk9NIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgT1JERVIgQlkgYSA8LT4gcG9pbnQgJygwLDApJzsK K30KKworc3RlcCBzMV9wcmVwYXJlX3Vuc29ydGVkIHsKKwlERUNMQVJFIGZvbyBOTyBTQ1JPTEwg Q1VSU09SIEZPUiBTRUxFQ1QgYSBGUk9NIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgV0hFUkUgYm94 ICcoKC0xMDAsLTEwMCksKDEwMCwxMDApKScgQD4gYTsKK30KKworc3RlcCBzMV9mZXRjaF8xIHsK KwlGRVRDSCBGUk9NIGZvbzsKK30KKworc3RlcCBzMV9mZXRjaF9hbGwgeworCUZFVENIIEFMTCBG Uk9NIGZvbzsKK30KKworCitzZXNzaW9uIHMyCisKKyMgRG9uJ3QgZGVsZXRlIHJvdyAxIHNvIHdl IGhhdmUgYSByb3cgZm9yIHRoZSBjdXJzb3IgdG8gInJlc3QiIG9uLgorc3RlcCBzMl9tb2QKK3sK KyAgREVMRVRFIEZST00gaW9zX25lZWRzX2NsZWFudXBfbG9jayBXSEVSRSBhICE9IHBvaW50ICco MSwxKSc7Cit9CisKKyMgRGlzYWJsZSB0cnVuY2F0aW9uLCBhcyBvdGhlcndpc2Ugd2UnbGwganVz dCB3YWl0IGZvciBhIHRpbWVvdXQgd2hpbGUgdHJ5aW5nCisjIHRvIGFjcXVpcmUgdGhlIGxvY2sK K3N0ZXAgczJfdmFjdXVtICB7IFZBQ1VVTSAoVFJVTkNBVEUgZmFsc2UpIGlvc19uZWVkc19jbGVh bnVwX2xvY2s7IH0KKworcGVybXV0YXRpb24KKyAgIyBkZWxldGUgbmVhcmx5IGFsbCByb3dzLCB0 byBtYWtlIGlzc3VlIHZpc2libGUKKyAgczJfbW9kCisgICMgY3JlYXRlIGEgY3Vyc29yCisgIHMx X2JlZ2luCisgIHMxX3ByZXBhcmVfc29ydGVkCisKKyAgIyBmZXRjaCBvbmUgcm93IGZyb20gdGhl IGN1cnNvciwgdGhhdCBlbnN1cmVzIHRoZSBpbmRleCBzY2FuIHBvcnRpb24gaXMgZG9uZQorICAj IGJlZm9yZSB0aGUgdmFjdXVtIGluIHRoZSBuZXh0IHN0ZXAKKyAgczFfZmV0Y2hfMQorCisgICMg d2l0aCB0aGUgYnVnIHRoaXMgdmFjdXVtIHdpbGwgbWFyayBwYWdlcyBhcyBhbGwtdmlzaWJsZSB0 aGF0IHRoZSBzY2FuIGluCisgICMgdGhlIG5leHQgc3RlcCB0aGVuIGNvbnNpZGVycyBhbGwtdmlz aWJsZSwgZGVzcGl0ZSBhbGwgcm93cyBmcm9tIHRob3NlCisgICMgcGFnZXMgaGF2aW5nIGJlZW4g cmVtb3ZlZC4KKyAgIyBCZWNhdXNlIHRoaXMgc2hvdWxkIGJsb2NrIG9uIGJ1ZmZlci1sZXZlbCBs b2NrcywgdGhpcyB3b24ndCBldmVyIGJlCisgICMgY29uc2lkZXJlZCAiYmxvY2tlZCIgYnkgaXNv bGF0aW9uIHRlc3RlciwgYW5kIHNvIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZQorICAjIHN0ZXAgd2Ug Y2FuIHdvcmsgd2l0aCBjb25jdXJyZW50bHkuCisgIHMyX3ZhY3V1bQorCisgICMgaWYgdGhpcyBy ZXR1cm5zIGFueSByb3dzLCB3ZSdyZSBidXN0ZWQKKyAgczFfZmV0Y2hfYWxsCisKKyAgczFfY29t bWl0CisKK3Blcm11dGF0aW9uCisgICMgZGVsZXRlIG5lYXJseSBhbGwgcm93cywgdG8gbWFrZSBp c3N1ZSB2aXNpYmxlCisgIHMyX21vZAorICAjIGNyZWF0ZSBhIGN1cnNvcgorICBzMV9iZWdpbgor ICBzMV9wcmVwYXJlX3Vuc29ydGVkCisKKyAgIyBmZXRjaCBvbmUgcm93IGZyb20gdGhlIGN1cnNv ciwgdGhhdCBlbnN1cmVzIHRoZSBpbmRleCBzY2FuIHBvcnRpb24gaXMgZG9uZQorICAjIGJlZm9y ZSB0aGUgdmFjdXVtIGluIHRoZSBuZXh0IHN0ZXAKKyAgczFfZmV0Y2hfMQorCisgICMgd2l0aCB0 aGUgYnVnIHRoaXMgdmFjdXVtIHdpbGwgbWFyayBwYWdlcyBhcyBhbGwtdmlzaWJsZSB0aGF0IHRo ZSBzY2FuIGluCisgICMgdGhlIG5leHQgc3RlcCB0aGVuIGNvbnNpZGVycyBhbGwtdmlzaWJsZSwg ZGVzcGl0ZSBhbGwgcm93cyBmcm9tIHRob3NlCisgICMgcGFnZXMgaGF2aW5nIGJlZW4gcmVtb3Zl ZC4KKyAgIyBCZWNhdXNlIHRoaXMgc2hvdWxkIGJsb2NrIG9uIGJ1ZmZlci1sZXZlbCBsb2Nrcywg dGhpcyB3b24ndCBldmVyIGJlCisgICMgY29uc2lkZXJlZCAiYmxvY2tlZCIgYnkgaXNvbGF0aW9u IHRlc3RlciwgYW5kIHNvIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZQorICAjIHN0ZXAgd2UgY2FuIHdv cmsgd2l0aCBjb25jdXJyZW50bHkuCisgIHMyX3ZhY3V1bQorCisgICMgaWYgdGhpcyByZXR1cm5z IGFueSByb3dzLCB3ZSdyZSBidXN0ZWQKKyAgczFfZmV0Y2hfYWxsCisKKyAgczFfY29tbWl0CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvdmFjdXVtLWlvcy1jb25mbGljdHMu c3BlYyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy92YWN1dW0taW9zLWNvbmZsaWN0cy5zcGVj Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOTQ0ZDlhZGFkMQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy92YWN1dW0taW9zLWNvbmZs aWN0cy5zcGVjCkBAIC0wLDAgKzEsMTQzIEBACisjIGluZGV4LW9ubHktc2NhbiB0ZXN0IHNob3dp bmcgY29ycmVjdCBsb2NraW5nIGludGVyYWN0aW9ucyB3aXRoIHZhcmlvdXMKKyMgaW5kZXggdHlw ZXM6CisjICAtIGJ0cmVlIChmb3J3YXJkLCBiYWNrd2FyZCksCisjICAtIEdJU1QgKG9yZGVyZWQs IHVub3JkZXJlZCksIGFuZAorIyAgLSBTUC1HSVNUIChvcmRlcmVkLCB1bm9yZGVyZWQpCitzZXR1 cAoreworICAgIC0tIGJ5IHVzaW5nIGEgbG93IGZpbGxmYWN0b3IgYW5kIGEgd2lkZSB0dXBsZSB3 ZSBjYW4gZ2V0IG11bHRpcGxlIGJsb2NrcworICAgIC0tIHdpdGgganVzdCBmZXcgcm93cworICAg IENSRUFURSBUQUJMRSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIChhIGludCBOT1QgTlVMTCwgYiBp bnQgbm90IG51bGwsIHBhZCBjaGFyKDEwMjQpIGRlZmF1bHQgJycpCisgICAgV0lUSCAoQVVUT1ZB Q1VVTV9FTkFCTEVEID0gZmFsc2UsIEZJTExGQUNUT1IgPSAxMCk7CisKKyAgICBJTlNFUlQgSU5U TyBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIFNFTEVDVCBnLmksIGcuaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMCkgZyhpKTsKK30KKwordGVhcmRvd24KK3sKKyAgICBEUk9QIFRBQkxFIGlvc19u ZWVkc19jbGVhbnVwX2xvY2s7Cit9CisKKworc2Vzc2lvbiBzMQorCisjIEZvcmNlIGFuIGluZGV4 LW9ubHkgc2Nhbiwgd2hlcmUgcG9zc2libGU6CitzZXR1cCB7CisgICAgU0VUIGVuYWJsZV9iaXRt YXBzY2FuID0gZmFsc2U7CisgICAgU0VUIGVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKKyAg ICBTRVQgZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7Cit9CisKK3N0ZXAgczFfYmVnaW4geyBCRUdJ TjsgfQorc3RlcCBzMV9jb21taXQgeyBDT01NSVQ7IH0KKworIyBidHJlZQorc3RlcCBzMV9pbmRl eF9idHJlZSB7CisgICAgQ1JFQVRFIElOREVYIGlvc192YWN1dW1fY29uZmxpY3RfYSBPTiBpb3Nf bmVlZHNfY2xlYW51cF9sb2NrIFVTSU5HIGJ0cmVlIChhKTsKK30KK3N0ZXAgczFfcHJlcGFyZV9i dHJlZV9mb3J3YXJkIHsKKyAgICBERUNMQVJFIGZvbyBOTyBTQ1JPTEwgQ1VSU09SIEZPUiBTRUxF Q1QgYSBGUk9NIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgT1JERVIgQlkgYSBBU0M7Cit9CitzdGVw IHMxX3ByZXBhcmVfYnRyZWVfYmFja3dhcmQgeworICAgIERFQ0xBUkUgZm9vIE5PIFNDUk9MTCBD VVJTT1IgRk9SIFNFTEVDVCBhIEZST00gaW9zX25lZWRzX2NsZWFudXBfbG9jayBPUkRFUiBCWSBh IERFU0M7Cit9CisKKyMgR0lTVAorc3RlcCBzMV9pbmRleF9naXN0IHsKKyAgICBDUkVBVEUgSU5E RVggaW9zX3ZhY3V1bV9jb25mbGljdF9hIE9OIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgVVNJTkcg Z2lzdChhKTsKK30KK3N0ZXAgczFfcHJlcGFyZV9naXN0X3NvcnRlZCB7CisgICAgREVDTEFSRSBm b28gTk8gU0NST0xMIENVUlNPUiBGT1IgU0VMRUNUIGEgRlJPTSBpb3NfbmVlZHNfY2xlYW51cF9s b2NrIFdIRVJFIGEgPiAwIE9SREVSIEJZIGEgPC0+IDA7Cit9CitzdGVwIHMxX3ByZXBhcmVfZ2lz dF91bnNvcnRlZCB7CisgICAgREVDTEFSRSBmb28gTk8gU0NST0xMIENVUlNPUiBGT1IgU0VMRUNU IGEgRlJPTSBpb3NfbmVlZHNfY2xlYW51cF9sb2NrIFdIRVJFIGEgPiAwOworfQorCisjIEdJU1QK K3N0ZXAgczFfaW5kZXhfc3BnIHsKKyAgICBDUkVBVEUgSU5ERVggaW9zX3ZhY3V1bV9jb25mbGlj dF9hIE9OIGlvc19uZWVkc19jbGVhbnVwX2xvY2sgVVNJTkcgc3BnaXN0KGEpOworfQorc3RlcCBz MV9wcmVwYXJlX3NwZ19zb3J0ZWQgeworICAgIERFQ0xBUkUgZm9vIE5PIFNDUk9MTCBDVVJTT1Ig Rk9SIFNFTEVDVCBhIEZST00gaW9zX25lZWRzX2NsZWFudXBfbG9jayBXSEVSRSBhID4gMCBPUkRF UiBCWSBhIDwtPiAwOworfQorc3RlcCBzMV9wcmVwYXJlX3NwZ191bnNvcnRlZCB7CisgICAgREVD TEFSRSBmb28gTk8gU0NST0xMIENVUlNPUiBGT1IgU0VMRUNUIGEgRlJPTSBpb3NfbmVlZHNfY2xl YW51cF9sb2NrIFdIRVJFIGEgPiAwOworfQorCitzdGVwIHMxX2ZldGNoXzEgeworICAgIEZFVENI IEZST00gZm9vOworfQorCitzdGVwIHMxX2ZldGNoX2FsbCB7CisgICAgU0VMRUNUIHBnX3NsZWVw X2ZvcihJTlRFUlZBTCAnNTBtcycpOworICAgIEZFVENIIEFMTCBGUk9NIGZvbzsKK30KKworCitz ZXNzaW9uIHMyCisKKyMgRG9uJ3QgZGVsZXRlIHJvdyAxIHNvIHdlIGhhdmUgYSByb3cgZm9yIHRo ZSBjdXJzb3IgdG8gInJlc3QiIG9uLgorc3RlcCBzMl9tb2QKK3sKKyAgREVMRVRFIEZST00gaW9z X25lZWRzX2NsZWFudXBfbG9jayBXSEVSRSBhID4gMTsKK30KKworIyBEaXNhYmxlIHRydW5jYXRp b24sIGFzIG90aGVyd2lzZSB3ZSdsbCBqdXN0IHdhaXQgZm9yIGEgdGltZW91dCB3aGlsZSB0cnlp bmcKKyMgdG8gYWNxdWlyZSB0aGUgbG9jaworc3RlcCBzMl92YWN1dW0gIHsgVkFDVVVNIChUUlVO Q0FURSBmYWxzZSkgaW9zX25lZWRzX2NsZWFudXBfbG9jazsgfQorCitwZXJtdXRhdGlvbgorICAj IFZhY3V1bSBmaXJzdCwgdG8gZW5zdXJlIFZNIGV4aXN0cywgb3RoZXJ3aXNlIHRoZSBiaXRtYXBz Y2FuIHdpbGwgY29uc2lkZXIKKyAgIyBWTSB0byBiZSBzaXplIDAsIGR1ZSB0byBjYWNoaW5nLiBD YW4ndCBkbyB0aGF0IGluIHNldHVwIGJlY2F1c2UKKyAgczJfdmFjdXVtCisKKyAgIyBkZWxldGUg bmVhcmx5IGFsbCByb3dzLCB0byBtYWtlIGlzc3VlIHZpc2libGUKKyAgczJfbW9kCisgICMgY3Jl YXRlIGEgY3Vyc29yCisgIHMxX2JlZ2luCisgIHMxX3ByZXBhcmVfc29ydGVkCisKKyAgIyBmZXRj aCBvbmUgcm93IGZyb20gdGhlIGN1cnNvciwgdGhhdCBlbnN1cmVzIHRoZSBpbmRleCBzY2FuIHBv cnRpb24gaXMgZG9uZQorICAjIGJlZm9yZSB0aGUgdmFjdXVtIGluIHRoZSBuZXh0IHN0ZXAKKyAg czFfZmV0Y2hfMQorCisgICMgd2l0aCB0aGUgYnVnIHRoaXMgdmFjdXVtIHdpbGwgbWFyayBwYWdl cyBhcyBhbGwtdmlzaWJsZSB0aGF0IHRoZSBzY2FuIGluCisgICMgdGhlIG5leHQgc3RlcCB0aGVu IGNvbnNpZGVycyBhbGwtdmlzaWJsZSwgZGVzcGl0ZSBhbGwgcm93cyBmcm9tIHRob3NlCisgICMg cGFnZXMgaGF2aW5nIGJlZW4gcmVtb3ZlZC4KKyAgIyBCZWNhdXNlIHRoaXMgc2hvdWxkIGJsb2Nr IG9uIGJ1ZmZlci1sZXZlbCBsb2NrcywgdGhpcyB3b24ndCBldmVyIGJlCisgICMgY29uc2lkZXJl ZCAiYmxvY2tlZCIgYnkgaXNvbGF0aW9uIHRlc3RlciwgYW5kIHNvIHdlIG9ubHkgaGF2ZSBhIHNp bmdsZQorICAjIHN0ZXAgd2UgY2FuIHdvcmsgd2l0aCBjb25jdXJyZW50bHkuCisgIHMyX3ZhY3V1 bSAoKikKKworICAjIGlmIHRoaXMgcmV0dXJucyBhbnkgcm93cywgd2UncmUgYnVzdGVkCisgIHMx X2ZldGNoX2FsbAorCisgIHMxX2NvbW1pdAorCitwZXJtdXRhdGlvbgorICAjIFZhY3V1bSBmaXJz dCwgdG8gZW5zdXJlIFZNIGV4aXN0cywgb3RoZXJ3aXNlIHRoZSBiaXRtYXBzY2FuIHdpbGwgY29u c2lkZXIKKyAgIyBWTSB0byBiZSBzaXplIDAsIGR1ZSB0byBjYWNoaW5nLiBDYW4ndCBkbyB0aGF0 IGluIHNldHVwIGJlY2F1c2UKKyAgczJfdmFjdXVtCisKKyAgIyBkZWxldGUgbmVhcmx5IGFsbCBy b3dzLCB0byBtYWtlIGlzc3VlIHZpc2libGUKKyAgczJfbW9kCisgICMgY3JlYXRlIGEgY3Vyc29y CisgIHMxX2JlZ2luCisgIHMxX3ByZXBhcmVfdW5zb3J0ZWQKKworICAjIGZldGNoIG9uZSByb3cg ZnJvbSB0aGUgY3Vyc29yLCB0aGF0IGVuc3VyZXMgdGhlIGluZGV4IHNjYW4gcG9ydGlvbiBpcyBk b25lCisgICMgYmVmb3JlIHRoZSB2YWN1dW0gaW4gdGhlIG5leHQgc3RlcAorICBzMV9mZXRjaF8x CisKKyAgIyB3aXRoIHRoZSBidWcgdGhpcyB2YWN1dW0gd2lsbCBtYXJrIHBhZ2VzIGFzIGFsbC12 aXNpYmxlIHRoYXQgdGhlIHNjYW4gaW4KKyAgIyB0aGUgbmV4dCBzdGVwIHRoZW4gY29uc2lkZXJz IGFsbC12aXNpYmxlLCBkZXNwaXRlIGFsbCByb3dzIGZyb20gdGhvc2UKKyAgIyBwYWdlcyBoYXZp bmcgYmVlbiByZW1vdmVkLgorICAjIEJlY2F1c2UgdGhpcyBzaG91bGQgYmxvY2sgb24gYnVmZmVy LWxldmVsIGxvY2tzLCB0aGlzIHdvbid0IGV2ZXIgYmUKKyAgIyBjb25zaWRlcmVkICJibG9ja2Vk IiBieSBpc29sYXRpb24gdGVzdGVyLCBhbmQgc28gd2Ugb25seSBoYXZlIGEgc2luZ2xlCisgICMg c3RlcCB3ZSBjYW4gd29yayB3aXRoIGNvbmN1cnJlbnRseS4KKyAgczJfdmFjdXVtICgqKQorCisg ICMgaWYgdGhpcyByZXR1cm5zIGFueSByb3dzLCB3ZSdyZSBidXN0ZWQKKyAgczFfZmV0Y2hfYWxs CisKKyAgczFfY29tbWl0Ci0tIAoyLjQ1LjIKCg== --000000000000316de90633a0ceb1--