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 1v0gIN-00GwjO-OJ for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Sep 2025 13:09:32 +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 1v0gIL-000Zah-Hk for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Sep 2025 13:09:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v0gIK-000ZaX-SP for pgsql-hackers@lists.postgresql.org; Mon, 22 Sep 2025 13:09:29 +0000 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v0gIH-001lhp-38 for pgsql-hackers@postgresql.org; Mon, 22 Sep 2025 13:09:27 +0000 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-77f22902b46so1385525b3a.0 for ; Mon, 22 Sep 2025 06:09:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758546565; x=1759151365; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+gaME8Mu8W+0OP8O66/AJXgzGIqvbS3NjgpmFIb1lsM=; b=h/mLvSHRbKh9OhRk+54GD1LUairac8eqH8LP1VLPkVaV8ccwb/GBbkYGrGJ8VvSUYm TDW9i6wy1y6EStkfq3A7GkjetY5SUY0msOHccIzUpkTO3rXK7D/tUfkmLr9mA+ZrASHN sMnEq4i+rxmzdyZVMkO73VR+pNfauodyK4g+LVH11ReffPF7xXrof4FUIaLMdBEZlvtf lbws9BIlTNdCQUURpQI1a/TvMLEsryORBcBd0AW7AjIbAgGZyt4Aqya7c5TChVG4ly6V iMC+J6UL+9NMFj+Laz0gISvRnOFZcqvMfZTMu/AabadhweJxUvOos9pnqu1H++3ADIqN PalA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758546565; x=1759151365; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+gaME8Mu8W+0OP8O66/AJXgzGIqvbS3NjgpmFIb1lsM=; b=L28LmHhj2Jburhs0BWiTUAlIiqk7YO+bYl/0eF/0kHbcTjtvMZz1Q/v3PCVd8QQW/E 5D6dgU1c1AIjw1DLFc5lS3Ugl/PBULCo/0ghmttKUKhZl4yXssjQULsXGnpIybkto4xk V+YD0v3sFamXn3mva49WD2bdzK+V5h1Q7aSKi0Qhg4YmnSWEFIIiXO2HFmmSiDYR5ers WivOrSYC1hXgnPZg01KFM492jswnU/pByorOmLxdxyfSQsvq7UZUchyEVCbZJyk0s1NZ IXCKpBanDPp/mdw3rbMaKJC/mtj7dH4gkjljpASmD5drAuMTHHkPWKeDFV9bqJ/nXPF4 ZpJg== X-Forwarded-Encrypted: i=1; AJvYcCUVqXzEwXTB7sUd7YlyC1SqryfR2I7mewdBOGzkWWD4nvt6rOWhi55iRGbnBQQqQ0V050OwhnvquKDznymF@postgresql.org X-Gm-Message-State: AOJu0YwwYT72BxNRUG+9Lryl1Ln+tysgZA0oy8OZ5utMfHLRYDNNrS+r yhGfl6Y0z37cgXa4Wqd9QvOIxR8cbXw46PuW2o2aSiXng2o/gY1eRttk X-Gm-Gg: ASbGncsj+OyI0gxkHbQIwDZWrlppW/wGlsepv/GEQ6uA/wHUmvH/4DVeVZD/sUIMClR rdxnST7P5PTCOh6H7JI3MQVwmnsHhkVODZBD2ufoWSJqqapCiXJ/kbaNm76y9A0e2qpADUT+YeQ HiniYtrN1hWwv5tG1gVkgaGewB+UfI+uOpI8QC/10wNEe3NzaPK3qcQGVP2zzlecqUTqjXMbdHG 4dpfiQAjnmu/FPzWFP3uiOqNCASyubv2xFvVRLZbGtE2WgGI4XLMOLMDKYOw5SEiucQyjX9RY87 q0MGk7wActuwhlrS5+jhNoTkY5gXh9xHWkUv6AaMmVB0yE0OhQtamQaW4jDpflAptgUeBVrQ2UX BnunykFfzPr4axFGikzPo1KKi7OSjlaXgPzjVisI7+RJMjQ== X-Google-Smtp-Source: AGHT+IEpyGqmk0JQZPLquLzTVzzufx0UElxFvpYSOrRiUDhjWX/4ANkA3Z/yzyb28zqzT3WOGRe2WA== X-Received: by 2002:a05:6a20:748c:b0:2c8:1ab8:596b with SMTP id adf61e73a8af0-2c81ac79f0bmr1837811637.60.1758546565197; Mon, 22 Sep 2025 06:09:25 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:f04e:ef6d:ad4c:8520]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b5509b47f55sm10864249a12.48.2025.09.22.06.09.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 22 Sep 2025 06:09:24 -0700 (PDT) Content-Type: multipart/mixed; boundary=31c127c84bb7790a084baa2c15e70aee88f7be4ade82c12392ce75725c0e Mime-Version: 1.0 Date: Mon, 22 Sep 2025 10:09:20 -0300 Message-Id: Cc: "Masahiko Sawada" , "Rishu Bagga" , "Yura Sokolov" , "Daniil Davydov" <3danissimo@gmail.com>, =?utf-8?q?=C3=81lvaro_Herrera?= , "Alexandra Wang" , "PostgreSQL Hackers" , "Tom Lane" , "Joel Jacobson" Subject: Re: LISTEN/NOTIFY bug: VACUUM sets frozenxid past a xid in async queue From: "Matheus Alcantara" To: "Arseniy Mukhin" X-Mailer: aerc 0.20.1 References: <202508061044.ptcyt7aqsaaa@alvherre.pgsql> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --31c127c84bb7790a084baa2c15e70aee88f7be4ade82c12392ce75725c0e Content-Type: multipart/alternative; boundary=ac093d9dbabd821e9d1a660a251e9c995d5c7316e916a2847756f446c9ef --ac093d9dbabd821e9d1a660a251e9c995d5c7316e916a2847756f446c9ef Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Fri Sep 19, 2025 at 12:13 PM -03, Arseniy Mukhin wrote: > I think it's impossible: before pushing anything to the queue we > acquire global lock in PreCommit_Notify(): > > LockSharedObject(DatabaseRelationId, InvalidOid, 0, AccessExclusiveLock); > > While we are holding the lock, no writers can add anything to the > queue. Then we save head position and add pending notifications to the > queue. The moment we get in AtAbort_Notify(), we still hold the global > lock (maybe it is worth adding Assert about it if we start relying on > it), so we can be sure there are no notifications in the queue after > the saved head position except ours. So it seems safe but maybe I > missed something. > Thanks for the explanation! I'm just not sure if I understand why do we need the LWLockAcquire(NotifyQueueLock, LW_EXCLUSIVE) on PreCommit_Notify() if we already have the LockSharedObject(DatabaseRelationId, InvalidOid, 0, AccessExclusiveLock); See the attached patch that is based on your the previous comment of resetting the QUEUE_HEAD at AtAbort_Notify() -- Matheus Alcantara --ac093d9dbabd821e9d1a660a251e9c995d5c7316e916a2847756f446c9ef-- --31c127c84bb7790a084baa2c15e70aee88f7be4ade82c12392ce75725c0e Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0001-Reset-LISTEN-NOTIFY-QUEUE_HEAD-for-crashed-transa.patch Content-Type: text/plain; charset=utf-8; name=v2-0001-Reset-LISTEN-NOTIFY-QUEUE_HEAD-for-crashed-transa.patch RnJvbSBmMzFlMDk2ZWQ4ZWVmNmI2OTg4ZDE0NWVjYWEwZjUxM2VjOWYxMDQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFNhdCwgNiBTZXAgMjAyNSAxMToyOTowMiAtMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIFJl c2V0IExJU1RFTi9OT1RJRlkgUVVFVUVfSEVBRCBmb3IgY3Jhc2hlZCB0cmFuc2FjdGlvbnMKClBy ZXZpb3VzbHkgdGhlIGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXMoKSB1c2UgdGhlClRyYW5z YWN0aW9uSWREaWRDb21taXQoKSB0byBjaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBhIG5v dGlmaWNhdGlvbgpiZWxvbmdzIGlzIGNvbW1pdHRlZCBvciBub3QuIEFsdGhvdWdoIHRoaXMgd29y ayBmb3IgYWxtb3N0IGFsbCBzY2VuYXJpb3MKd2UgbWF5IGhhdmUgc29tZSBjYXNlcyB3aGVyZSBp ZiBhIG5vdGlmaWNhdGlvbiBpcyBrZWVwIGZvciB0byBsb25nIG9uCnRoZSBxdWV1ZSBhbmQgdGhl IFZBQ1VVTSBGUkVFWkUgaXMgZXhlY3V0ZWQgZHVyaW5nIHRoaXMgdGltZSBpdCBtYXkKcmVtb3Zl IGNsb2cgZmlsZXMgdGhhdCBpcyBuZWVkZWQgdG8gY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXR1 cyBvZgp0aGVzZSBub3RpZmljYXRpb25zIHdoaWNoIHdpbGwgY2F1c2UgZXJyb3JzIHRvIGxpc3Rl bmVyIGJhY2tlbmRzIHdoZW4KcmVhZGluZyB0aGUgYXN5bmMgcXVldWUuCgpUaGlzIGNvbW1pdCBm aXggdGhpcyBpc3N1ZSBieSBwcmVzZXJ2aW5nIHRoZSBRVUVVRV9IRUFEIHBvc2l0aW9uIGJlZm9y ZQphIHRyYW5zYWN0aW9uJ3Mgbm90aWZpY2F0aW9ucyBhcmUgYWRkZWQgdG8gdGhlIHNoYXJlZCBx dWV1ZS4gVGhpcwplbnN1cmVzIHRoYXQgaWYgdGhlIHRyYW5zYWN0aW9uIGZhaWxzIGJldHdlZW4g dGhlIFByZUNvbW1pdF9Ob3RpZnkoKSBhbmQKQXRDb21taXRfTm90aWZ5KCkgcGhhc2VzLCB0aGUg QXRfQWJvcnROb3RpZnkoKSB3aWxsIGJlIGNhbGxlZCB0byByZXNldAp0aGUgUVVFVUVfSEVBRCB0 byBpdHMgcHJpb3Igc3RhdGUsIHJlbW92aW5nIHRoZSBlbnRyaWVzIGZyb20gdGhlIGFib3J0ZWQK dHJhbnNhY3Rpb24gZnJvbSB0aGUgc2hhcmVkIHF1ZXVlLgoKQWxzbyB0aGlzIGNvbW1pdCBpbmNs dWRlIFRBUCB0ZXN0cyB0byBleGVyY2lzZSB0aGUgVkFDVVVNIEZSRUVaRSBpc3N1ZQphbmQgYWxz byB0aGUgc2NlbmFyaW8gb2YgYW4gZXJyb3IgYmVpbmcgb2NjdXIgYmV0d2VlbiB0aGUKUHJlQ29t bWl0X05vdGlmeSgpIGFuZCBBdENvbW1pdF9Ob3RpZnkoKSBjYWxscy4KCkNvLWF1dGhvcmVkLWJ5 OiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdtYWlsLmNvbT4KLS0tCiBzcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jICAgICAgICAgICAgICAgICAgfCA2MiArKysrKysrKysr KysrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xtZ3IuYyAgICAgICAgICAgICAgIHwg MTkgKysrKysrCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaCAgICAgICAgICAgICAgICAgICAg fCAgMyArCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAg MSArCiBzcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgMSAr CiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9NYWtlZmlsZSAgfCAxNyArKysr KwogLi4uL21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkICAgIHwgMTQgKysr KwogLi4uL3Rlc3RfbGlzdGVuX25vdGlmeS90LzAwMV94aWRfZnJlZXplLnBsICAgIHwgNjYgKysr KysrKysrKysrKysrKysrKwogLi4uL3QvMDAyX2Fib3J0ZWRfdHhfbm90aWZpZXMucGwgICAgICAg ICAgICAgIHwgNjYgKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgICAgICAgIHwgIDEgKwogMTAgZmlsZXMgY2hhbmdlZCwgMjQyIGluc2Vy dGlvbnMoKyksIDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVl emUucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25v dGlmeS90LzAwMl9hYm9ydGVkX3R4X25vdGlmaWVzLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXgg NGJkMzdkNWJlYjUuLjcyNzZhMWRhOGYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTQwMSw4ICs0 MDEsMTcgQEAgc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gKIAlOb3RpZmljYXRpb24gKmV2ZW50OwkJ LyogPT4gdGhlIGFjdHVhbCBOb3RpZmljYXRpb24gc3RydWN0ICovCiB9OwogCisvKiAgSW5mb3Jt YXRpb24gbmVlZGVkIGJ5IEF0X0Fib3J0Tm90aWZ5KCkgdG8gcmVtb3ZlIGVudHJpZXMgZnJvbSB0 aGUgcXVldWUgZm9yIGNyYXNoZWQgdHJhbnNhY3Rpb25zLiAqLwordHlwZWRlZiBzdHJ1Y3QgQXRB Ym9ydE5vdGlmeUluZm8KK3sKKwlRdWV1ZVBvc2l0aW9uIHByZXZpb3VzSGVhZDsKKworfSBBdEFi b3J0Tm90aWZ5SW5mbzsKKwogc3RhdGljIE5vdGlmaWNhdGlvbkxpc3QgKnBlbmRpbmdOb3RpZmll cyA9IE5VTEw7CiAKK3N0YXRpYyBBdEFib3J0Tm90aWZ5SW5mbyAqYXRBYm9ydEluZm8gPSBOVUxM OworCiAvKgogICogSW5ib3VuZCBub3RpZmljYXRpb25zIGFyZSBpbml0aWFsbHkgcHJvY2Vzc2Vk IGJ5IEhhbmRsZU5vdGlmeUludGVycnVwdCgpLAogICogY2FsbGVkIGZyb20gaW5zaWRlIGEgc2ln bmFsIGhhbmRsZXIuIFRoYXQganVzdCBzZXRzIHRoZQpAQCAtMTQ2NSw2ICsxNDc0LDE5IEBAIGFz eW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCQl9CiAJfQogCisJLyoK KwkgKiBJZiAnYXRBYm9ydEluZm8nIGlzIE5VTEwsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Un cmUgYWRkaW5nCisJICogbm90aWZpY2F0aW9ucyBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24g b24gdGhlIHNoYXJlZCBnbG9iYWwgcXVldWUuCisJICogV2Ugc2F2ZSB0aGUgaW5pdGlhbCBRVUVV RV9IRUFEIHBvc2l0aW9uIGFuZCBpZiB0aGUgdHJhbnNhY3Rpb24gbGF0ZXIKKwkgKiBhYm9ydHMs IEF0X0Fib3J0Tm90aWZ5KCkgd2lsbCB1c2UgdGhpcyBzYXZlZCBwb3NpdGlvbiB0byByZXNldAor CSAqIFFVRVVFX0hFQUQsIGRpc2NhcmRpbmcgdGhlIHVuY29tbWl0dGVkIG5vdGlmaWNhdGlvbnMg ZnJvbSB0aGUgcXVldWUuCisJICovCisJaWYgKGF0QWJvcnRJbmZvID09IE5VTEwpCisJeworCQlh dEFib3J0SW5mbyA9IHBhbGxvYyhzaXplb2YoQXRBYm9ydE5vdGlmeUluZm8pKTsKKwkJYXRBYm9y dEluZm8tPnByZXZpb3VzSGVhZCA9IFFVRVVFX0hFQUQ7CisJfQorCiAJLyogU3VjY2Vzcywgc28g dXBkYXRlIHRoZSBnbG9iYWwgUVVFVUVfSEVBRCAqLwogCVFVRVVFX0hFQUQgPSBxdWV1ZV9oZWFk OwogCkBAIC0xNjc4LDYgKzE3MDAsMjUgQEAgQXRBYm9ydF9Ob3RpZnkodm9pZCkKIAlpZiAoYW1S ZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQogCQlhc3luY1F1ZXVl VW5yZWdpc3RlcigpOwogCisJLyoKKwkgKiBBdEFib3J0X05vdGlmeSBpbmZvcm1hdGlvbiBpcyBz ZXQgd2hlbiB3ZSBhcmUgYWRkaW5nIGVudHJpZXMgb24gdGhlCisJICogZ2xvYmFsIHNoYXJlZCBx dWV1ZSBhdCBQcmVDb21taXRfTm90aWZ5KCksIHNvIGluIGNhc2Ugb2YgYSBjcmFzaCBvbiB0aGUK KwkgKiB0cmFuc2FjdGlvbiBiZXR3ZWVuIHRoZSBQcmVDb21taXRfTm90aWZ5KCkgYW5kIEF0Q29t bWl0X05vdGlmeSgpIHdlIHVzZQorCSAqIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVtb3ZlIHRoZSBl bnRyaWVzIGZyb20gdGhlIGNyYXNoZWQgdHJhbnNhY3Rpb24KKwkgKiBmcm9tIHRoZSBxdWV1ZS4g V2UgcmVtb3ZlIHRoZXNlIGVudHJpZXMgYnkgcmVzZXR0aW5nIHRoZSBRVUVVRV9IRUFEIHRvCisJ ICogdGhlIHBvc2l0aW9uIHRoYXQgaXQgd2FzIGJlZm9yZSB0aGUgZW50cmllcyBiZWluZyBhZGRl ZCBvbiB0aGUgcXVldWUuCisJICoKKwkgKiBXZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBnbG9iYWwg c2hhcmVkIGxvY2sgb24gdGhlIGRhdGFiYXNlLgorCSAqLworCWlmIChhdEFib3J0SW5mbyAhPSBO VUxMKQorCXsKKwkJQXNzZXJ0KENoZWNrU2hhcmVkT2JqZWN0TG9ja2VkQnlNZShEYXRhYmFzZVJl bGF0aW9uSWQsIExXX0VYQ0xVU0lWRSwgdHJ1ZSkpOworCisJCUxXTG9ja0FjcXVpcmUoTm90aWZ5 UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCQlRVUVVRV9IRUFEID0gYXRBYm9ydEluZm8tPnBy ZXZpb3VzSGVhZDsKKwkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCX0KKwogCS8q IEFuZCBjbGVhbiB1cCAqLwogCUNsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcygpOwogfQpA QCAtMjA2Niw4ICsyMTA3LDE5IEBAIGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXModm9sYXRp bGUgUXVldWVQb3NpdGlvbiAqY3VycmVudCwKIAkJCQlyZWFjaGVkU3RvcCA9IHRydWU7CiAJCQkJ YnJlYWs7CiAJCQl9Ci0JCQllbHNlIGlmIChUcmFuc2FjdGlvbklkRGlkQ29tbWl0KHFlLT54aWQp KQorCQkJZWxzZQogCQkJeworCQkJCS8qCisJCQkJICogQXN5bmNRdWV1ZUVudHJ5J3MgZnJvbSBj cmFzaGVkIHRyYW5zYWN0aW9ucyBhcmUgcmVtb3ZlZAorCQkJCSAqIGZyb20gdGhlIHF1ZXVlIGF0 IEF0X0Fib3J0Tm90aWZ5KCksIHNvIGlmIGEgbm90aWZpY2F0aW9uCisJCQkJICogZW50cnkgaXMg bm90IGluLXByb2dyZXNzIGl0IGlzIGZ1bGx5IGNvbW1pdHRlZCBhbmQgc2FmZSB0bworCQkJCSAq IGJlIHByb2Nlc3NlZCBieSBhIGxpc3RlbmVyIGJhY2tlbmRzLgorCQkJCSAqCisJCQkJICogRm9y IGFib3J0ZWQgdHJhbnNhY3Rpb25zIHRoZSBub3RpZmljYXRpb25zIGFyZSBub3QgYWRkZWQgb24K KwkJCQkgKiB0aGUgc2hhcmVkIGdsb2JhbCBxdWV1ZSBzaW5jZSB0aGUgQ09NTUlUIHNob3VsZCBi ZSBleGVjdXRlZAorCQkJCSAqIGJ5IHRoZSB0cmFuc2FjdGlvbiB0byBpbmNsdWRlIHRoZXNlIG9u IHRoZSBxdWV1ZS4KKwkJCQkgKi8KKwogCQkJCS8qIHFlLT5kYXRhIGlzIHRoZSBudWxsLXRlcm1p bmF0ZWQgY2hhbm5lbCBuYW1lICovCiAJCQkJY2hhcgkgICAqY2hhbm5lbCA9IHFlLT5kYXRhOwog CkBAIC0yMDc5LDEzICsyMTMxLDYgQEAgYXN5bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcyh2b2xh dGlsZSBRdWV1ZVBvc2l0aW9uICpjdXJyZW50LAogCQkJCQlOb3RpZnlNeUZyb250RW5kKGNoYW5u ZWwsIHBheWxvYWQsIHFlLT5zcmNQaWQpOwogCQkJCX0KIAkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJ CQkvKgotCQkJCSAqIFRoZSBzb3VyY2UgdHJhbnNhY3Rpb24gYWJvcnRlZCBvciBjcmFzaGVkLCBz byB3ZSBqdXN0Ci0JCQkJICogaWdub3JlIGl0cyBub3RpZmljYXRpb25zLgotCQkJCSAqLwotCQkJ fQogCQl9CiAKIAkJLyogTG9vcCBiYWNrIGlmIHdlJ3JlIG5vdCBhdCBlbmQgb2YgcGFnZSAqLwpA QCAtMjM4NSw2ICsyNDMwLDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQp CiAJICovCiAJcGVuZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBlbmRpbmdOb3RpZmllcyA9IE5VTEw7 CisJYXRBYm9ydEluZm8gPSBOVUxMOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL2xtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKaW5k ZXggNDc5OGViNzkwMDMuLjEyYTIxYzUxNDUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvbG1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKQEAg LTM1Nyw2ICszNTcsMjUgQEAgQ2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUoT2lkIHJlbGlkLCBM T0NLTU9ERSBsb2NrbW9kZSwgYm9vbCBvcnN0cm9uZ2VyKQogCXJldHVybiBMb2NrSGVsZEJ5TWUo JnRhZywgbG9ja21vZGUsIG9yc3Ryb25nZXIpOwogfQogCisvKgorICogIENoZWNrU2hhcmVkT2Jq ZWN0TG9ja2VkQnlNZQorICoKKyAqICBMaWtlIENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lLCBidXQg aXQgY2hlY2tzIGZvciBzaGFyZWQgb2JqZWN0cy4KKyAqLworYm9vbAorQ2hlY2tTaGFyZWRPYmpl Y3RMb2NrZWRCeU1lKE9pZCBjbGFzc2lkLCBMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCBvcnN0cm9u Z2VyKQoreworCUxPQ0tUQUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX09CSkVDVCh0YWcsCisJCQkJ CSAgIEludmFsaWRPaWQsCisJCQkJCSAgIGNsYXNzaWQsCisJCQkJCSAgIEludmFsaWRPaWQsCisJ CQkJCSAgIDApOworCisJcmV0dXJuIExvY2tIZWxkQnlNZSgmdGFnLCBsb2NrbW9kZSwgb3JzdHJv bmdlcik7Cit9CisKIC8qCiAgKgkJTG9ja0hhc1dhaXRlcnNSZWxhdGlvbgogICoKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdy LmgKaW5kZXggYjdhYmQxODM5N2QuLmMxMTljOGY0ZGVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2xtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaApAQCAtNTAs NiArNTAsOSBAQCBleHRlcm4gYm9vbCBDaGVja1JlbGF0aW9uTG9ja2VkQnlNZShSZWxhdGlvbiBy ZWxhdGlvbiwgTE9DS01PREUgbG9ja21vZGUsCiAJCQkJCQkJCQlib29sIG9yc3Ryb25nZXIpOwog ZXh0ZXJuIGJvb2wgQ2hlY2tSZWxhdGlvbk9pZExvY2tlZEJ5TWUoT2lkIHJlbGlkLCBMT0NLTU9E RSBsb2NrbW9kZSwKIAkJCQkJCQkJCSAgIGJvb2wgb3JzdHJvbmdlcik7CitleHRlcm4gYm9vbCBD aGVja1NoYXJlZE9iamVjdExvY2tlZEJ5TWUoT2lkIGNsYXNzaWQsIExPQ0tNT0RFIGxvY2ttb2Rl LAorCQkJCQkJCQkJICAgYm9vbCBvcnN0cm9uZ2VyKTsKKwogZXh0ZXJuIGJvb2wgTG9ja0hhc1dh aXRlcnNSZWxhdGlvbihSZWxhdGlvbiByZWxhdGlvbiwgTE9DS01PREUgbG9ja21vZGUpOwogCiBl eHRlcm4gdm9pZCBMb2NrUmVsYXRpb25JZEZvclNlc3Npb24oTG9ja1JlbElkICpyZWxpZCwgTE9D S01PREUgbG9ja21vZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBi L3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggOGEzY2QyYWZhYjcuLjRiZTgyNGQ3YTMx IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvTWFrZWZpbGUKQEAgLTI4LDYgKzI4LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X2lu dDEyOCBcCiAJCSAgdGVzdF9pbnRlZ2Vyc2V0IFwKIAkJICB0ZXN0X2pzb25fcGFyc2VyIFwKKwkJ ICB0ZXN0X2xpc3Rlbl9ub3RpZnkgXAogCQkgIHRlc3RfbGZpbmQgXAogCQkgIHRlc3RfbHdsb2Nr X3RyYW5jaGVzIFwKIAkJICB0ZXN0X21pc2MgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggNzE3ZTg1 MDY2YmEuLmMwYjBiMzI3OTIyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1 aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTI3LDYgKzI3LDcgQEAg c3ViZGlyKCd0ZXN0X2dpbnBvc3RpbmdsaXN0JykKIHN1YmRpcigndGVzdF9pbnQxMjgnKQogc3Vi ZGlyKCd0ZXN0X2ludGVnZXJzZXQnKQogc3ViZGlyKCd0ZXN0X2pzb25fcGFyc2VyJykKK3N1YmRp cigndGVzdF9saXN0ZW5fbm90aWZ5JykKIHN1YmRpcigndGVzdF9sZmluZCcpCiBzdWJkaXIoJ3Rl c3RfbHdsb2NrX3RyYW5jaGVzJykKIHN1YmRpcigndGVzdF9taXNjJykKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmRhMWJmNWJiMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIyBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9NYWtlZmlsZQorCitNT0RVTEUgPSB0 ZXN0X2xpc3Rlbl9ub3RpZnkKK1BHRklMRURFU0MgPSAidGVzdF9saXN0ZW5fbm90aWZ5IC0gcmVn cmVzc2lvbiB0ZXN0aW5nIGZvciBMSVNURU4vTk9USUZZIHN1cHBvcnQiCisKK1RBUF9URVNUUyA9 IDEKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNo ZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9 IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5Cit0b3BfYnVpbGRkaXIgPSAuLi8u Li8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5j bHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hNjgwNTJjZDM1MwotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkCkBA IC0wLDAgKzEsMTQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9saXN0 ZW5fbm90aWZ5JywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6 IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWwor ICAgICAgJ3QvMDAxX3hpZF9mcmVlemUucGwnLAorICAgICAgJ3QvMDAyX2Fib3J0ZWRfdHhfbm90 aWZpZXMucGwnCisgICAgXSwKKyAgfSwKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2xpc3Rlbl9ub3RpZnkvdC8wMDFfeGlkX2ZyZWV6ZS5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBhNTEzMGEwNDJlCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvdC8wMDFfeGlkX2ZyZWV6ZS5wbApA QCAtMCwwICsxLDY2IEBACisjIENvcHlyaWdodCAoYykgMjAyNC0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOwordXNlIEZpbGU6OlBhdGggcXcobWtwYXRoKTsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1v cmU7CisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7 Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworIyBTZXR1cAorJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiB4aWRfd3JhcGFyb3VuZCcpOworJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSdDUkVBVEUgVEFCTEUgdCBBUyBTRUxFQ1QgZyBBUyBh LCBnKzIgQVMgYiBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsnCispOworJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSdBTFRFUiBEQVRBQkFTRSB0ZW1wbGF0ZTAgV0lUSCBB TExPV19DT05ORUNUSU9OUyB0cnVlJyk7CisKKyMgLS0tIFN0YXJ0IFNlc3Npb24gMSBhbmQgbGVh dmUgaXQgaWRsZSBpbiB0cmFuc2FjdGlvbgorbXkgJHBzcWxfc2Vzc2lvbjEgPSAkbm9kZS0+YmFj a2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworJHBzcWxfc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoJ2xp c3RlbiBzOycsICJTZXNzaW9uIDEgbGlzdGVucyB0byAncyciKTsKKyRwc3FsX3Nlc3Npb24xLT5x dWVyeV9zYWZlKCdiZWdpbjsnLCAiU2Vzc2lvbiAxIHN0YXJ0cyBhIHRyYW5zYWN0aW9uIik7CisK KyMgLS0tIFNlc3Npb24gMiwgbXVsdGlwbGUgbm90aWZ5J3MsIGFuZCBjb21taXQgLS0tCitmb3Ig bXkgJGkgKDEgLi4gMTApCit7CisJJG5vZGUtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgor CQlCRUdJTjsKKwkJTk9USUZZIHMsICckaSc7CisJCUNPTU1JVDsiKTsKK30KKworIyBDb25zdW1l IGVub3VnaCBYSURzIHRvIHRyaWdnZXIgdHJ1bmNhdGlvbgorJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAnc2VsZWN0IGNvbnN1bWVfeGlkcygxMDAwMDAwMCk7Jyk7CisKKyMgRXhlY3V0ZSB1 cGRhdGUgc28gdGhlIGZyb3plbiB4aWQgb2YgInQiIHRhYmxlIGlzIHVwZGF0ZWQgdG8gYSB4aWQg Z3JlYXRlcgorIyB0aGFuIGNvbnN1bWVfeGlkcygpIHJlc3VsdAorJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAnVVBEQVRFIHQgU0VUIGEgPSBhK2I7Jyk7CisKKyMgUmVtZW1iZXIgY3VycmVu dCBkYXRmcm96ZW54aWQgYmVmb3JlIHZhY3V1bSBmcmVlemUgdG8gZW5zdXJlIHRoYXQgaXQgaXMg YWR2YW5jZWQuCitteSAkZGF0YWZyb256ZW54aWQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJzZWxlY3QgZGF0ZnJvemVueGlkIGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9 ICdwb3N0Z3JlcyciKTsKKworIyBFeGVjdXRlIHZhY3V1bSBmcmVlemUgb24gYWxsIGRhdGFiYXNl cworJG5vZGUtPmNvbW1hbmRfb2soWyAndmFjdXVtZGInLCAnLS1hbGwnLCAnLS1mcmVlemUnLCAn LS1wb3J0JywgJG5vZGUtPnBvcnQgXSwKKwkidmFjdXVtZGIgLS1hbGwgLS1mcmVlemUiKTsKKwor IyBHZXQgdGhlIG5ldyBkYXRmcm96ZW54aWQgYWZ0ZXIgdmFjdXVtIGZyZWV6ZSB0byBlbnN1cmUg dGhhdCBpcyBhZHZhbmNlZCBidXQKKyMgd2UgY2FuIHN0aWxsIGdldCB0aGUgbm90aWZpY2F0aW9u IHN0YXR1cyBvZiB0aGUgbm90aWZpY2F0aW9uCitteSAkZGF0YWZyb256ZW54aWRfZnJlZXplID0g JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAic2VsZWN0IGRhdGZyb3plbnhpZCBmcm9tIHBn X2RhdGFiYXNlIHdoZXJlIGRhdG5hbWUgPSAncG9zdGdyZXMnIik7CitvaygkZGF0YWZyb256ZW54 aWRfZnJlZXplID4gJGRhdGFmcm9uemVueGlkLCAnZGF0ZnJvemVueGlkIGlzIGFkdmFuY2VkJyk7 CisKKyMgT24gU2Vzc2lvbiAxLCBjb21taXQgYW5kIGVuc3VyZSB0aGF0IHRoZSBhbGwgbm90aWZp Y2F0aW9ucyBpcyByZWNlaXZlZAorbXkgJHJlcyA9ICRwc3FsX3Nlc3Npb24xLT5xdWVyeV9zYWZl KCdjb21taXQ7JywgImNvbW1pdCBsaXN0ZW4gczsiKTsKK215ICRub3RpZmljYXRpb25zX2NvdW50 ID0gMDsKK2ZvcmVhY2ggbXkgJGkgKHNwbGl0KCdcbicsICRyZXMpKQoreworCSRub3RpZmljYXRp b25zX2NvdW50Kys7CisJbGlrZSgkaSwgcXIvQXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiAicyIg d2l0aCBwYXlsb2FkICIkbm90aWZpY2F0aW9uc19jb3VudCIgcmVjZWl2ZWQvKTsKK30KK2lzKCRu b3RpZmljYXRpb25zX2NvdW50LCAxMCwgJ3JlY2VpdmVkIGFsbCBjb21taXR0ZWQgbm90aWZpY2F0 aW9ucycpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAyX2Fib3J0ZWRfdHhfbm90aWZpZXMucGwgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS90LzAwMl9hYm9ydGVkX3R4X25vdGlmaWVzLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xN2ZjYjRiNzg2ZQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAy X2Fib3J0ZWRfdHhfbm90aWZpZXMucGwKQEAgLTAsMCArMSw2NiBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0 cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBGaWxlOjpQYXRoIHF3KG1r cGF0aCk7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygnbm9kZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisK KyMgVGVzdCBjaGVja3MgdGhhdCBsaXN0ZW5lcnMgZG8gbm90IHJlY2VpdmUgbm90aWZpY2F0aW9u cyBmcm9tIGFib3J0ZWQKKyMgdHJhbnNhY3Rpb24gZXZlbiBpZiBub3RpZmljYXRpb25zIGhhdmUg YmVlbiBhZGRlZCB0byB0aGUgbGlzdGVuL25vdGlmeQorIyBxdWV1ZS4gVG8gcmVwcm9kdWNlIGl0 IHdlIHVzZSB0aGUgZmFjdCB0aGF0IHNlcmlhbGl6YWJsZSBjb25mbGljdHMKKyMgYXJlIGNoZWNr ZWQgYWZ0ZXIgdHggYWRkcyBub3RpZmljYXRpb25zIHRvIHRoZSBxdWV1ZS4KKworIyBTZXR1cAor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIFRBQkxFIHQxIChhIGJpZ3Nlcmlh bCk7Jyk7CisKKyMgTGlzdGVuZXIKK215ICRwc3FsX2xpc3RlbmVyID0gJG5vZGUtPmJhY2tncm91 bmRfcHNxbCgncG9zdGdyZXMnKTsKKyRwc3FsX2xpc3RlbmVyLT5xdWVyeV9zYWZlKCdMSVNURU4g Y2g7Jyk7CisKKyMgU2Vzc2lvbjEuIFN0YXJ0IFNFUklBTElaQUJMRSB0eCBhbmQgYWRkIGEgbm90 aWZpY2F0aW9uLgorbXkgJHBzcWxfc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdw b3N0Z3JlcycpOworJHBzcWxfc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIgorCUJFR0lOIElTT0xBVElP TiBMRVZFTCBTRVJJQUxJWkFCTEU7CisJU0VMRUNUICogRlJPTSB0MTsKKwlJTlNFUlQgSU5UTyB0 MSBERUZBVUxUIFZBTFVFUzsKKwlOT1RJRlkgY2gsJ2NvbW1pdHRlZCc7CisiKTsKKworIyBTZXNz aW9uMi4gU3RhcnQgU0VSSUFMSVpBQkxFIHR4LCBhZGQgYSBub3RpZmljYXRpb24gYW5kIGludHJv ZHVjZSBhIGNvbmZsaWN0CisjIHdpdGggc2Vzc2lvbjEuCitteSAkcHNxbF9zZXNzaW9uMiA9ICRu b2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywgb25fZXJyb3Jfc3RvcCA9PiAwKTsKKyRw c3FsX3Nlc3Npb24yLT5xdWVyeV9zYWZlKCIKKwlCRUdJTiBJU09MQVRJT04gTEVWRUwgU0VSSUFM SVpBQkxFOworCVNFTEVDVCAqIEZST00gdDE7CisJSU5TRVJUIElOVE8gdDEgREVGQVVMVCBWQUxV RVM7CisJTk9USUZZIGNoLCdhYm9ydGVkJzsKKyIpOworCisjIFNlc3Npb24xIHNob3VsZCBiZSBj b21taXR0ZWQgc3VjY2Vzc2Z1bGx5LiBMaXN0ZW5lcnMgbXVzdCByZWNlaXZlIHNlc3Npb24xCisj IG5vdGlmaWNhdGlvbnMuCiskcHNxbF9zZXNzaW9uMS0+cXVlcnlfc2FmZSgiQ09NTUlUOyIpOwor CisjIFNlc3Npb24yIHNob3VsZCBiZSBhYm9ydGVkIGR1ZSB0byB0aGUgY29uZmxpY3Qgd2l0aCBz ZXNzaW9uMS4gVHJhbnNhY3Rpb24KKyMgaXMgYWJvcnRlZCBhZnRlciBhZGRpbmcgbm90aWZpY2F0 aW9ucyB0byB0aGUgbGlzdGVuL25vdGlmeSBxdWV1ZSwgYnV0CisjIGxpc3RlbmVycyBzaG91bGQg bm90IHJlY2VpdmUgc2Vzc2lvbjIgbm90aWZpY2F0aW9ucy4KKyRwc3FsX3Nlc3Npb24yLT5xdWVy eSgiQ09NTUlUOyIpOworCisjIHNlbmQgYW5vdGhlciBub3RpZmljYXRpb24gYWZ0ZXIgYWJvcnRl ZAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiTk9USUZZIGNoLCAnbmV4dF9jb21taXR0 ZWQnOyIpOworCisjIGZldGNoIG5vdGlmaWNhdGlvbnMKK215ICRyZXMgPSAkcHNxbF9saXN0ZW5l ci0+cXVlcnlfc2FmZSgnYmVnaW47IGNvbW1pdDsnKTsKKworIyBjaGVjayByZWNlaXZlZCBub3Rp ZmljYXRpb25zCitteSBAbGluZXMgPSBzcGxpdCgnXG4nLCAkcmVzKTsKK2lzKEBsaW5lcywgMiwg J3JlY2VpdmVkIGFsbCBjb21taXR0ZWQgbm90aWZpY2F0aW9ucycpOworbGlrZSgkbGluZXNbMF0s IHFyL0FzeW5jaHJvbm91cyBub3RpZmljYXRpb24gImNoIiB3aXRoIHBheWxvYWQgImNvbW1pdHRl ZCIgcmVjZWl2ZWQvKTsKK2xpa2UoJGxpbmVzWzFdLCBxci9Bc3luY2hyb25vdXMgbm90aWZpY2F0 aW9uICJjaCIgd2l0aCBwYXlsb2FkICJuZXh0X2NvbW1pdHRlZCIgcmVjZWl2ZWQvKTsKKworZG9u ZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGU5MGFmNWIyYWQzLi5l MWMyMzg0YWEzZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE1OSw2ICsxNTksNyBA QCBBcnJheVR5cGUKIEFzeW5jUXVldWVDb250cm9sCiBBc3luY1F1ZXVlRW50cnkKIEFzeW5jUmVx dWVzdAorQXRBYm9ydE5vdGlmeUluZm8KIEF0dEluTWV0YWRhdGEKIEF0dFN0YXRzU2xvdAogQXR0 b3B0Q2FjaGVFbnRyeQotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --31c127c84bb7790a084baa2c15e70aee88f7be4ade82c12392ce75725c0e--