Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxT87-00Flf5-29 for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 17:01:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxT86-007qyz-0D for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 17:01:54 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxT85-007qyp-1e for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 17:01:54 +0000 Received: from mail-dy1-x132a.google.com ([2607:f8b0:4864:20::132a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxT82-00000000D3c-3xQw for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 17:01:52 +0000 Received: by mail-dy1-x132a.google.com with SMTP id 5a478bee46e88-2b4520f6b32so6716729eec.0 for ; Tue, 03 Mar 2026 09:01:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772557310; x=1773162110; darn=lists.postgresql.org; h=in-reply-to:fcc:content-language:references:user-agent:mime-version :to:from:subject:cc:message-id:date:from:to:cc:subject:date :message-id:reply-to; bh=PTWsZqOS2FyFHVM0yrHPlwLVOr95ft+Iynizq/Dg7tw=; b=aycf8xPQUdI25lr8x90SkkcLhkWfLOCw2U8oebMjiBXzPISi6YoS+5M8FRuuJARkF4 ViWh3P/GQ0MSJZzaK4n0REnk0vAlnlgvJ/4vOeG3JBMtuiBe1tEuZ41vrxT9SWbpuw1K 0vNHfypN0ckkx7p8YKMFla5II2gR/bUJjWHkdvDotSMkd2MrrlhM/YzfyDmlz7JI42/4 lur3IIIMHscMceHqXTpf84iti2+rLPallvwQRQC02nNo/1qoMnaAo5qAuXhNMEhK6cGd /pkbzHqKiYmXkU4dYaM3tY8/+NTIiJDYOE8RljGbQnCeUCgnj7rZ8IZOgO9MUurNmlRw ZlIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772557310; x=1773162110; h=in-reply-to:fcc:content-language:references:user-agent:mime-version :to:from:subject:cc:message-id:date:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=PTWsZqOS2FyFHVM0yrHPlwLVOr95ft+Iynizq/Dg7tw=; b=Pt3Eo1wagePnAU4V7h2JfQtscQXw4wPdF9IsjcDCcds8gWiNSH+MY/uwZazAdja4Fo 0EbckCx4GiWk/b4Ez8/rJ9Tzt9xgZfLOuwUoQ1pd+PV2aakk6GS2iQ/VnyDeIsNXvDxT oqJkLLeILnWqTQ/5HvZo0bHAN/5SNQTXr7Mpip+encGGG0wzkVTLgSfbgB+53M5iUcDV e5wL6hORyUc40fshdN6DNeWSq/Y/f2Uqn7npTV+jdvYM8Xb2s56qZHeLYMZLxzfAGFAj 8P+EloXMDdzbjsHG1vv2+cY5n93AtcDJbR/WYgPrj7bivadNF9ieDi6SgIIwA05Al+TN urEQ== X-Gm-Message-State: AOJu0YzRIyEX0NQBGq4Ln2thIDudqoDE5aiGOUqYxDx/iSbZerd0N4Pt ST+gbAy7/cn/ukjKWm16w5FKOoH+MDarR0+uu1bonaWvcb24EUoIwni/PM1DVQ== X-Gm-Gg: ATEYQzx7/zhNDXSF9Yav9xioy7tehrozLCyEywPnwWNbyZNCI70YPi4HEsqzVnSVFFL KqiVpP6Xz2a6UzfPuTX0mU6q7bd6NGonR7khHtHHWW1B7lp29HNoZy+Cpcju0446QFH6UVbFVR5 cOvGTFWsUpH4WBDWEQ4fthK4RUv9TKsNCLqUJ5vn4vjG0Ij7atmn5D9OXvp3WMkHT6nLhv9EU9i LtlDJscwnpAaOLw6jHzgtwpjCCaaqOfHY8F+K6AneWnelVWU2FkjMo7VUEcs0KLGF6rhLJ4iAJi naYeDu1c/3fKeChtRPzY1TuxmxJ5yIrCTmDTkRotQzJaqEQjvZU+XnSRsp6HDMvdfBBWDaTB104 GrvSsn9nx4oonrjSXWIlY6KvBez/wYg57iJTigZTzeYZw6zvMPvJ71LTy6oyMwKizBRmOmQv8ZZ c3HoTtUJnUKRVzMiDa+k0MUWgQ/ISdRtdF9WJfbbb0bbt4UiZ983QntxD9gvkC7Fzd4hsK/Deba w== X-Received: by 2002:a05:693c:40c6:b0:2be:494:71ce with SMTP id 5a478bee46e88-2be04949b2bmr2783901eec.18.1772557309341; Tue, 03 Mar 2026 09:01:49 -0800 (PST) Received: from localhost (163.116.230.147.netskope-rdns.com. [163.116.230.147]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be1281ff70sm6051493eec.14.2026.03.03.09.01.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Mar 2026 09:01:48 -0800 (PST) Content-Type: multipart/mixed; boundary=0a934772d24f45c37ec80fe89927776927e19e3d49807fd57f461c7ba07d Date: Tue, 03 Mar 2026 14:01:43 -0300 Message-Id: Cc: , "Peter Eisentraut" , "Yugo Nagata" Subject: Re: Show expression of virtual columns in error messages From: "Matheus Alcantara" To: "Tom Lane" MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <7c18e854-0ddb-4670-b0c4-f2541b5edd91@eisentraut.org> <20260205114521.6fed028d8d3185663f3c4226@sraoss.co.jp> <20260206125414.8f8c5f5735aa34fb05c5cc72@sraoss.co.jp> <2f55b9a4-332f-45c7-9b27-590637a2bb9a@gmail.com> <719803.1772131627@sss.pgh.pa.us> <742565.1772144083@sss.pgh.pa.us> Content-Language: en-US X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0; attachmentreminder=0; deliveryformat=1 X-Identity-Key: id3 Fcc: imap://matheusssilv97%40gmail.com@imap.gmail.com/[Gmail]/Sent Mail In-Reply-To: <742565.1772144083@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0a934772d24f45c37ec80fe89927776927e19e3d49807fd57f461c7ba07d Content-Type: multipart/alternative; boundary=9af30105e0a58dbf0446a947fb5fce95d1278ef70506e87ab49289bd4213 --9af30105e0a58dbf0446a947fb5fce95d1278ef70506e87ab49289bd4213 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On 26/02/26 19:14, Tom Lane wrote: >> Thanks for the feedback. After investigating the code a bit, I found >> that IIUC virtual column values are actually never computed and stored >> separately, they're computed by expanding the expression wherever the >> column is referenced. >=20 > Correct: rather than storing them, we recalculate the expression > whenever the column's value is demanded. But what I'm suggesting is > that we ought to calculate the value during INSERT/UPDATE as well, > even though it will not get written to disk. It'd be useful to do > that for the purposes of this error message. But I think we ought to > do it even when there are no constraints, because that ensures that > it's *possible* to calculate the value, and that there are not for > instance overflow problems. As things stand, it's possible to create > a row that cannot be fetched: >=20 > regression=3D# create table foo (f1 int, f2 int generated always as (f1 *= 1000000)); > CREATE TABLE > regression=3D# insert into foo values(1); > INSERT 0 1 > regression=3D# table foo; > f1 | f2 > ----+--------- > 1 | 1000000 > (1 row) >=20 > regression=3D# insert into foo values(1000000); > INSERT 0 1 > regression=3D# table foo; > ERROR: integer out of range >=20 > That may or may not be per spec, but I submit that it's extremely > unhelpful and unfriendly, as well as being an undesirable discrepancy > from the behavior of a stored generated column. >=20 > Of course, calculating the value at insertion time won't completely > prevent such problems: if the expression is less immutable than > advertised, we could still fail at readout time. But that's pretty > clearly a case of user misfeasance. Index expressions that aren't > really immutable cause worse problems than this, so I don't have a > problem with saying "you broke it, you get to keep both pieces". >=20 > Perhaps someone will argue that their expression is too expensive for > it to be okay to calculate at insertion. But if it's that expensive, > why in the world did they make the column virtual rather than stored? >=20 An addition to this, the expression is evaluated multiple times for=20 each check constraint that a virtual column have. > In short, I think we ought to compute these values during > INSERT/UPDATE, even though we're not going to write them to disk. > And then they'd be available to display in this error message. >=20 Please see the attached patch where I implement this. I followed a=20 similar pattern used for stored generated columns with some small=20 changes. Some special handling for virtual columns was removed but I=20 still left some comments but I'm not sure if it's really needed. With this change I think that doc/src/sgml/ddl.sgml should be updated=20 to mention that a virtual generated column expression is also=20 evaluated when writing the data, or perhaps we can just remove the=20 following: as if it were a normal column. A virtual generated column occupies no - storage and is computed when it is read. Thus, a virtual generated col= umn + storage. Thus, a virtual generated column is similar to a view and a stored generated column is similar to a -- Matheus Alcantara EDB: https://www.enterprisedb.com --9af30105e0a58dbf0446a947fb5fce95d1278ef70506e87ab49289bd4213-- --0a934772d24f45c37ec80fe89927776927e19e3d49807fd57f461c7ba07d Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v4-0001-Compute-virtual-generated-columns-during-INSERT-U.patch Content-Type: text/plain; charset=utf-8; name=v4-0001-Compute-virtual-generated-columns-during-INSERT-U.patch RnJvbSBiNDViY2RlZTg0YzU1MDY1ZDNmODRkYmRlZWRmYTE2YjRlOTE2YjQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IE1vbiwgMiBGZWIgMjAyNiAxOTowNjo0NCAtMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjRdIENv bXB1dGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBkdXJpbmcgSU5TRVJUL1VQREFURQoKUHJl dmlvdXNseSwgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIHZhbHVlcyB3ZXJlIG5ldmVyIGNvbXB1 dGVkIGFuZApzdG9yZWQgaW4gdGhlIHNsb3QuIEluc3RlYWQsIHJlZmVyZW5jZXMgdG8gZS5nIHZp cnR1YWwgY29sdW1ucyBpbiBjaGVjawpjb25zdHJhaW50cyB3ZXJlIGV4cGFuZGVkIHRvIHRoZWly IGdlbmVyYXRpb24gZXhwcmVzc2lvbnMgZHVyaW5nCkV4ZWNDaGVjaygpLgoKVGhpcyBjb21taXQg Y2hhbmdlcyB0aGUgYXBwcm9hY2ggdG8gY29tcHV0ZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4K dmFsdWVzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBzbG90IGJlZm9yZSBjb25zdHJhaW50IGNoZWNr aW5nLCBzaW1pbGFyCnRvIGhvdyBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVtbnMgYXJlIGhhbmRsZWQu IFRoaXMgaGFzIHR3byBiZW5lZml0czoKCiAgIENoZWNrIGNvbnN0cmFpbnRzIGNhbiBub3cgcmVh ZCB2aXJ0dWFsIGNvbHVtbiB2YWx1ZXMgZGlyZWN0bHkgZnJvbQogICB0aGUgc2xvdCwgc2ltcGxp ZnlpbmcgY29uc3RyYWludCBldmFsdWF0aW9uLiBJdCBhbHNvIGF2b2lkIHJlLWV4ZWN1dGUKICAg dGhlIHZpcnR1YWwgZXhwcmVzc2lvbiBmb3IgZWFjaCBjaGVjayBjb25zdHJhaW50IGV2YWx1YXRp b24uCgogICBFcnJvciBtZXNzYWdlcyBub3cgZGlzcGxheSB0aGUgYWN0dWFsIGNvbXB1dGVkIHZh bHVlIChlLmcuLCAiMTAiKQogICBpbnN0ZWFkIG9mIHRoZSAidmlydHVhbCIgc3RyaW5nLCBtYWtp bmcgdGhlbSBtb3JlIGNvbnNpc3RlbnQgd2l0aAogICBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVtbnMg YW5kIGVhc2llciB0byB1bmRlcnN0YW5kLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdy ZXNxbC5vcmcvbWVzc2FnZS1pZC9ERzVEVjhTRUQ2MkcuMldGSkI0NkQ3V0lUOCU0MGdtYWlsLmNv bQotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgICAgICAgICB8ICAg NyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgIDIx ICsrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgICAgIHwgIDEy ICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAgICAgfCAxMzEg KysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu aCAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAg ICAgICAgIHwgIDEwICsrCiAuLi4vcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5v dXQgICAgfCAgMjIgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJn ZS5vdXQgfCAgIDggKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNx bCAgICB8ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbCAg ICAgIHwgICA2ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCAxOTQgaW5zZXJ0aW9ucygrKSwgMzEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRl cnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggNjFmZjVk ZGM3NGMuLmZjMWNhODk4ODQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMK QEAgLTI0MDUsOSArMjQwNSwxMCBAQCBDaGVja1ZhclNsb3RDb21wYXRpYmlsaXR5KFR1cGxlVGFi bGVTbG90ICpzbG90LCBpbnQgYXR0bnVtLCBPaWQgdmFydHlwZSkKIAogCQlhdHRyID0gVHVwbGVE ZXNjQXR0cihzbG90X3R1cGRlc2MsIGF0dG51bSAtIDEpOwogCi0JCS8qIEludGVybmFsIGVycm9y OiBzb21lYm9keSBmb3Jnb3QgdG8gZXhwYW5kIGl0LiAqLwotCQlpZiAoYXR0ci0+YXR0Z2VuZXJh dGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKLQkJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiByZWZlcmVuY2UiKTsKKwkJLyoKKwkJICog VmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm93IGNvbXB1dGVkIGFuZCBzdG9yZWQgaW4g dGhlIHNsb3QKKwkJICogYnkgRXhlY0NvbXB1dGVWaXJ0dWFsR2VuZXJhdGVkKCksIHNvIHJlYWRp bmcgdGhlbSBpcyB2YWxpZC4KKwkJICovCiAKIAkJaWYgKGF0dHItPmF0dGlzZHJvcHBlZCkKIAkJ CWVyZXBvcnQoRVJST1IsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCBiZmQzZWJjNjAxZS4u ZmNjNTlhNzg0ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNTEsNiArNTEsOCBAQAog I2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNs dWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgog I2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpA QCAtMTI5Niw2ICsxMjk4LDggQEAgSW5pdFJlc3VsdFJlbEluZm8oUmVzdWx0UmVsSW5mbyAqcmVz dWx0UmVsSW5mbywKIAlyZXN1bHRSZWxJbmZvLT5yaV9HZW5WaXJ0dWFsTm90TnVsbENvbnN0cmFp bnRFeHBycyA9IE5VTEw7CiAJcmVzdWx0UmVsSW5mby0+cmlfR2VuZXJhdGVkRXhwcnNJID0gTlVM TDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0ZWRFeHByc1UgPSBOVUxMOworCXJlc3VsdFJl bEluZm8tPnJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc0kgPSBOVUxMOworCXJlc3VsdFJlbEluZm8t PnJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc1UgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX3By b2plY3RSZXR1cm5pbmcgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX29uQ29uZmxpY3RBcmJp dGVySW5kZXhlcyA9IE5JTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0ID0gTlVMTDsK QEAgLTE4MTUsNyArMTgxOSwxMyBAQCBFeGVjUmVsQ2hlY2soUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbywKIAkJCQljb250aW51ZTsKIAogCQkJY2hlY2tjb25zdHIgPSBzdHJpbmdUb05vZGUo Y2hlY2tbaV0uY2NiaW4pOwotCQkJY2hlY2tjb25zdHIgPSAoRXhwciAqKSBleHBhbmRfZ2VuZXJh dGVkX2NvbHVtbnNfaW5fZXhwcigoTm9kZSAqKSBjaGVja2NvbnN0ciwgcmVsLCAxKTsKKworCQkJ LyoKKwkJCSAqIE5vIG5lZWQgdG8gY2FsbCBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW5fZXhw cigpIGhlcmUuCisJCQkgKiBWaXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gdmFsdWVzIGFyZSBjb21w dXRlZCBhbmQgc3RvcmVkIGluIHRoZQorCQkJICogc2xvdCBieSBFeGVjQ29tcHV0ZVZpcnR1YWxH ZW5lcmF0ZWQoKSBiZWZvcmUgd2UgZ2V0IGhlcmUsIHNvCisJCQkgKiB0aGUgZXhwcmVzc2lvbiBl dmFsdWF0b3IgY2FuIHJlYWQgdGhlbSBkaXJlY3RseSBmcm9tIHRoZSBzbG90LgorCQkJICovCiAJ CQlyZXN1bHRSZWxJbmZvLT5yaV9DaGVja0NvbnN0cmFpbnRFeHByc1tpXSA9CiAJCQkJRXhlY1By ZXBhcmVFeHByKGNoZWNrY29uc3RyLCBlc3RhdGUpOwogCQl9CkBAIC0yNDc2LDkgKzI0ODYsMTIg QEAgRXhlY0J1aWxkU2xvdFZhbHVlRGVzY3JpcHRpb24oT2lkIHJlbG9pZCwKIAogCQlpZiAodGFi bGVfcGVybSB8fCBjb2x1bW5fcGVybSkKIAkJewotCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09 IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKLQkJCQl2YWwgPSAidmlydHVhbCI7Ci0JCQll bHNlIGlmIChzbG90LT50dHNfaXNudWxsW2ldKQorCQkJLyoKKwkJCSAqIFZpcnR1YWwgZ2VuZXJh dGVkIGNvbHVtbiB2YWx1ZXMgYXJlIGNvbXB1dGVkIGFuZCBzdG9yZWQgaW4gdGhlCisJCQkgKiBz bG90IGJ5IEV4ZWNDb21wdXRlVmlydHVhbEdlbmVyYXRlZCgpLCBzbyB3ZSBjYW4gcmVhZCB0aGVt CisJCQkgKiBkaXJlY3RseSBsaWtlIHJlZ3VsYXIgY29sdW1ucy4KKwkJCSAqLworCQkJaWYgKHNs b3QtPnR0c19pc251bGxbaV0pCiAJCQkJdmFsID0gIm51bGwiOwogCQkJZWxzZQogCQkJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRleCAyNDk3ZWU3ZWRjNS4uN2U5MTUy ZTQyMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC04MzQsNiAr ODM0LDEyIEBAIEV4ZWNTaW1wbGVSZWxhdGlvbkluc2VydChSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvLAogCQkJRXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0 YXRlLCBzbG90LAogCQkJCQkJCQkJICAgQ01EX0lOU0VSVCk7CiAKKwkJLyogQ29tcHV0ZSB2aXJ0 dWFsIGdlbmVyYXRlZCBjb2x1bW5zICovCisJCWlmIChyZWwtPnJkX2F0dC0+Y29uc3RyICYmCisJ CQlyZWwtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3ZpcnR1YWwpCisJCQlFeGVjQ29t cHV0ZVZpcnR1YWxHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBzbG90LAorCQkJCQkJ CQkJCUNNRF9JTlNFUlQpOworCiAJCS8qIENoZWNrIHRoZSBjb25zdHJhaW50cyBvZiB0aGUgdHVw bGUgKi8KIAkJaWYgKHJlbC0+cmRfYXR0LT5jb25zdHIpCiAJCQlFeGVjQ29uc3RyYWludHMocmVz dWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlKTsKQEAgLTkzOCw2ICs5NDQsMTIgQEAgRXhlY1NpbXBs ZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQlFeGVjQ29t cHV0ZVN0b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3QsCiAJCQkJCQkJ CQkgICBDTURfVVBEQVRFKTsKIAorCQkvKiBDb21wdXRlIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt bnMgKi8KKwkJaWYgKHJlbC0+cmRfYXR0LT5jb25zdHIgJiYKKwkJCXJlbC0+cmRfYXR0LT5jb25z dHItPmhhc19nZW5lcmF0ZWRfdmlydHVhbCkKKwkJCUV4ZWNDb21wdXRlVmlydHVhbEdlbmVyYXRl ZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3QsCisJCQkJCQkJCQkJQ01EX1VQREFURSk7CisK IAkJLyogQ2hlY2sgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSB0dXBsZSAqLwogCQlpZiAocmVsLT5y ZF9hdHQtPmNvbnN0cikKIAkJCUV4ZWNDb25zdHJhaW50cyhyZXN1bHRSZWxJbmZvLCBzbG90LCBl c3RhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxl LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCA3OTNjNzZk NGY4Mi4uNWE5M2E3NGJjYzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN b2RpZnlUYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j CkBAIC00MjUsOCArNDI1LDEwIEBAIEV4ZWNDaGVja1RJRFZpc2libGUoRVN0YXRlICplc3RhdGUs CiAgKiBJbml0aWFsaXplIGdlbmVyYXRlZCBjb2x1bW5zIGhhbmRsaW5nIGZvciBhIHR1cGxlCiAg KgogICogVGhpcyBmaWxscyB0aGUgcmVzdWx0UmVsSW5mbydzIHJpX0dlbmVyYXRlZEV4cHJzSS9y aV9OdW1HZW5lcmF0ZWROZWVkZWRJIG9yCi0gKiByaV9HZW5lcmF0ZWRFeHByc1UvcmlfTnVtR2Vu ZXJhdGVkTmVlZGVkVSBmaWVsZHMsIGRlcGVuZGluZyBvbiBjbWR0eXBlLgotICogVGhpcyBpcyB1 c2VkIG9ubHkgZm9yIHN0b3JlZCBnZW5lcmF0ZWQgY29sdW1ucy4KKyAqIHJpX0dlbmVyYXRlZEV4 cHJzVS9yaV9OdW1HZW5lcmF0ZWROZWVkZWRVIGZpZWxkcyBmb3Igc3RvcmVkIGdlbmVyYXRlZAor ICogY29sdW1ucywgYW5kIHJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc0kvcmlfTnVtVmlydHVhbEdl bmVyYXRlZE5lZWRlZEkgb3IKKyAqIHJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc1UvcmlfTnVtVmly dHVhbEdlbmVyYXRlZE5lZWRlZFUgZmllbGRzIGZvciB2aXJ0dWFsCisgKiBnZW5lcmF0ZWQgY29s dW1ucywgZGVwZW5kaW5nIG9uIGNtZHR5cGUuCiAgKgogICogSWYgY21kVHlwZSA9PSBDTURfVVBE QVRFLCB0aGUgcmlfZXh0cmFVcGRhdGVkQ29scyBmaWVsZCBpcyBmaWxsZWQgdG9vLgogICogVGhp cyBpcyB1c2VkIGJ5IGJvdGggc3RvcmVkIGFuZCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLgpA QCAtNDQ2LDYgKzQ0OCw4IEBAIEV4ZWNJbml0R2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8sCiAJaW50CQkJbmF0dHMgPSB0dXBkZXNjLT5uYXR0czsKIAlFeHByU3RhdGUgKipy aV9HZW5lcmF0ZWRFeHByczsKIAlpbnQJCQlyaV9OdW1HZW5lcmF0ZWROZWVkZWQ7CisJRXhwclN0 YXRlICoqcmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzOworCWludAkJCXJpX051bVZpcnR1YWxHZW5l cmF0ZWROZWVkZWQ7CiAJQml0bWFwc2V0ICAqdXBkYXRlZENvbHM7CiAJTWVtb3J5Q29udGV4dCBv bGRDb250ZXh0OwogCkBAIC00NzMsNiArNDc3LDggQEAgRXhlY0luaXRHZW5lcmF0ZWQoUmVzdWx0 UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAogCXJpX0dlbmVyYXRlZEV4cHJzID0gKEV4cHJTdGF0 ZSAqKikgcGFsbG9jMChuYXR0cyAqIHNpemVvZihFeHByU3RhdGUgKikpOwogCXJpX051bUdlbmVy YXRlZE5lZWRlZCA9IDA7CisJcmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzID0gKEV4cHJTdGF0ZSAq KikgcGFsbG9jMChuYXR0cyAqIHNpemVvZihFeHByU3RhdGUgKikpOworCXJpX051bVZpcnR1YWxH ZW5lcmF0ZWROZWVkZWQgPSAwOwogCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBuYXR0czsgaSsrKQog CXsKQEAgLTUwOCw2ICs1MTQsMTEgQEAgRXhlY0luaXRHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAq cmVzdWx0UmVsSW5mbywKIAkJCQlyaV9HZW5lcmF0ZWRFeHByc1tpXSA9IEV4ZWNQcmVwYXJlRXhw cihleHByLCBlc3RhdGUpOwogCQkJCXJpX051bUdlbmVyYXRlZE5lZWRlZCsrOwogCQkJfQorCQkJ ZWxzZSBpZiAoYXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKKwkJ CXsKKwkJCQlyaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNbaV0gPSBFeGVjUHJlcGFyZUV4cHIoZXhw ciwgZXN0YXRlKTsKKwkJCQlyaV9OdW1WaXJ0dWFsR2VuZXJhdGVkTmVlZGVkKys7CisJCQl9CiAK IAkJCS8qIElmIFVQREFURSwgbWFyayBjb2x1bW4gaW4gcmVzdWx0UmVsSW5mby0+cmlfZXh0cmFV cGRhdGVkQ29scyAqLwogCQkJaWYgKGNtZHR5cGUgPT0gQ01EX1VQREFURSkKQEAgLTUyNCwxNCAr NTM1LDI0IEBAIEV4ZWNJbml0R2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CiAJCXJpX0dlbmVyYXRlZEV4cHJzID0gTlVMTDsKIAl9CiAKKwlpZiAocmlfTnVtVmlydHVhbEdl bmVyYXRlZE5lZWRlZCA9PSAwKQorCXsKKwkJLyogZGlkbid0IG5lZWQgaXQgYWZ0ZXIgYWxsICov CisJCXBmcmVlKHJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHBycyk7CisJCXJpX1ZpcnR1YWxHZW5lcmF0 ZWRFeHBycyA9IE5VTEw7CisJfQorCiAJLyogU2F2ZSBpbiBhcHByb3ByaWF0ZSBzZXQgb2YgZmll bGRzICovCiAJaWYgKGNtZHR5cGUgPT0gQ01EX1VQREFURSkKIAl7CiAJCS8qIERvbid0IGNhbGwg dHdpY2UgKi8KIAkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX0dlbmVyYXRlZEV4cHJzVSA9PSBO VUxMKTsKKwkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc1Ug PT0gTlVMTCk7CiAKIAkJcmVzdWx0UmVsSW5mby0+cmlfR2VuZXJhdGVkRXhwcnNVID0gcmlfR2Vu ZXJhdGVkRXhwcnM7CiAJCXJlc3VsdFJlbEluZm8tPnJpX051bUdlbmVyYXRlZE5lZWRlZFUgPSBy aV9OdW1HZW5lcmF0ZWROZWVkZWQ7CisJCXJlc3VsdFJlbEluZm8tPnJpX1ZpcnR1YWxHZW5lcmF0 ZWRFeHByc1UgPSByaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnM7CisJCXJlc3VsdFJlbEluZm8tPnJp X051bVZpcnR1YWxHZW5lcmF0ZWROZWVkZWRVID0gcmlfTnVtVmlydHVhbEdlbmVyYXRlZE5lZWRl ZDsKIAogCQlyZXN1bHRSZWxJbmZvLT5yaV9leHRyYVVwZGF0ZWRDb2xzX3ZhbGlkID0gdHJ1ZTsK IAl9CkBAIC01MzksOSArNTYwLDEyIEBAIEV4ZWNJbml0R2VuZXJhdGVkKFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAJewogCQkvKiBEb24ndCBjYWxsIHR3aWNlICovCiAJCUFzc2VydChy ZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0ZWRFeHByc0kgPT0gTlVMTCk7CisJCUFzc2VydChyZXN1 bHRSZWxJbmZvLT5yaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNJID09IE5VTEwpOwogCiAJCXJlc3Vs dFJlbEluZm8tPnJpX0dlbmVyYXRlZEV4cHJzSSA9IHJpX0dlbmVyYXRlZEV4cHJzOwogCQlyZXN1 bHRSZWxJbmZvLT5yaV9OdW1HZW5lcmF0ZWROZWVkZWRJID0gcmlfTnVtR2VuZXJhdGVkTmVlZGVk OworCQlyZXN1bHRSZWxJbmZvLT5yaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNJID0gcmlfVmlydHVh bEdlbmVyYXRlZEV4cHJzOworCQlyZXN1bHRSZWxJbmZvLT5yaV9OdW1WaXJ0dWFsR2VuZXJhdGVk TmVlZGVkSSA9IHJpX051bVZpcnR1YWxHZW5lcmF0ZWROZWVkZWQ7CiAJfQogCiAJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwpAQCAtNjM3LDYgKzY2MSw4NSBAQCBFeGVjQ29tcHV0 ZVN0b3JlZEdlbmVyYXRlZChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0KTsKIH0KIAorLyoKKyAqIENvbXB1dGUgdmlydHVhbCBn ZW5lcmF0ZWQgY29sdW1ucyBmb3IgYSB0dXBsZQorICoKKyAqIFRoaXMgZXZhbHVhdGVzIHRoZSBn ZW5lcmF0aW9uIGV4cHJlc3Npb25zIGZvciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCisgKiBh bmQgc3RvcmVzIHRoZSByZXN1bHRzIGRpcmVjdGx5IGluIHRoZSBzbG90LiBVbmxpa2Ugc3RvcmVk IGdlbmVyYXRlZAorICogY29sdW1ucywgdGhlc2UgdmFsdWVzIGFyZSBub3QgcGVyc2lzdGVkIHRv IGRpc2sgYnV0IGFyZSBjb21wdXRlZCBmb3IKKyAqIHVzZSBpbiBjb25zdHJhaW50IGNoZWNraW5n IGFuZCBlcnJvciBtZXNzYWdlcy4KKyAqLwordm9pZAorRXhlY0NvbXB1dGVWaXJ0dWFsR2VuZXJh dGVkKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCQkJRVN0YXRlICplc3RhdGUs IFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCUNtZFR5cGUgY21kdHlwZSkKK3sKKwlSZWxh dGlvbglyZWwgPSByZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CisJVHVwbGVEZXNjCXR1 cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJaW50CQkJbmF0dHMgPSB0dXBkZXNjLT5u YXR0czsKKwlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVz dGF0ZSk7CisJRXhwclN0YXRlICoqcmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzOworCU1lbW9yeUNv bnRleHQgb2xkQ29udGV4dDsKKworCS8qIFdlIHNob3VsZCBub3QgYmUgY2FsbGVkIHVubGVzcyB0 aGlzIGlzIHRydWUgKi8KKwlBc3NlcnQodHVwZGVzYy0+Y29uc3RyICYmIHR1cGRlc2MtPmNvbnN0 ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFsKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgZXhw cmVzc2lvbnMgaWYgd2UgZGlkbid0IGFscmVhZHksIGFuZCBjaGVjayB3aGV0aGVyIHdlCisJICog Y2FuIGV4aXQgZWFybHkgYmVjYXVzZSBub3RoaW5nIG5lZWRzIHRvIGJlIGNvbXB1dGVkLgorCSAq LworCWlmIChjbWR0eXBlID09IENNRF9VUERBVEUpCisJeworCQlpZiAocmVzdWx0UmVsSW5mby0+ cmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzVSA9PSBOVUxMKQorCQkJRXhlY0luaXRHZW5lcmF0ZWQo cmVzdWx0UmVsSW5mbywgZXN0YXRlLCBjbWR0eXBlKTsKKwkJaWYgKHJlc3VsdFJlbEluZm8tPnJp X051bVZpcnR1YWxHZW5lcmF0ZWROZWVkZWRVID09IDApCisJCQlyZXR1cm47CisJCXJpX1ZpcnR1 YWxHZW5lcmF0ZWRFeHBycyA9IHJlc3VsdFJlbEluZm8tPnJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHBy c1U7CisJfQorCWVsc2UKKwl7CisJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9WaXJ0dWFsR2VuZXJh dGVkRXhwcnNJID09IE5VTEwpCisJCQlFeGVjSW5pdEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBl c3RhdGUsIGNtZHR5cGUpOworCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtVmlydHVhbEdlbmVy YXRlZE5lZWRlZEkgPT0gMCkKKwkJCXJldHVybjsKKwkJcmlfVmlydHVhbEdlbmVyYXRlZEV4cHJz ID0gcmVzdWx0UmVsSW5mby0+cmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzSTsKKwl9CisKKwlvbGRD b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChl c3RhdGUpKTsKKworCS8qIE1ha2Ugc3VyZSBhbGwgYmFzZSBjb2x1bW4gdmFsdWVzIGFyZSBhdmFp bGFibGUgKi8KKwlzbG90X2dldGFsbGF0dHJzKHNsb3QpOworCisJZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlID0gc2xvdDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKKwl7CisJ CUNvbXBhY3RBdHRyaWJ1dGUgKmF0dHIgPSBUdXBsZURlc2NDb21wYWN0QXR0cih0dXBkZXNjLCBp KTsKKworCQlpZiAocmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzW2ldKQorCQl7CisJCQlEYXR1bQkJ dmFsOworCQkJYm9vbAkJaXNudWxsOworCisJCQlBc3NlcnQoVHVwbGVEZXNjQXR0cih0dXBkZXNj LCBpKS0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCk7CisKKwkJ CXZhbCA9IEV4ZWNFdmFsRXhwcihyaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNbaV0sIGVjb250ZXh0 LCAmaXNudWxsKTsKKworCQkJLyoKKwkJCSAqIFdlIG11c3QgbWFrZSBhIGNvcHkgb2YgdmFsIGFz IHdlIGhhdmUgbm8gZ3VhcmFudGVlcyBhYm91dCB3aGVyZQorCQkJICogbWVtb3J5IGZvciBhIHBh c3MtYnktcmVmZXJlbmNlIERhdHVtIGlzIGxvY2F0ZWQuCisJCQkgKi8KKwkJCWlmICghaXNudWxs KQorCQkJCXZhbCA9IGRhdHVtQ29weSh2YWwsIGF0dHItPmF0dGJ5dmFsLCBhdHRyLT5hdHRsZW4p OworCisJCQlzbG90LT50dHNfdmFsdWVzW2ldID0gdmFsOworCQkJc2xvdC0+dHRzX2lzbnVsbFtp XSA9IGlzbnVsbDsKKwkJfQorCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0 KTsKK30KKwogLyoKICAqIEV4ZWNJbml0SW5zZXJ0UHJvamVjdGlvbgogICoJCURvIG9uZS10aW1l IGluaXRpYWxpemF0aW9uIG9mIHByb2plY3Rpb24gZGF0YSBmb3IgSU5TRVJUIHR1cGxlcy4KQEAg LTk0NSw2ICsxMDQ4LDE0IEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0 LAogCQkJRXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBz bG90LAogCQkJCQkJCQkJICAgQ01EX0lOU0VSVCk7CiAKKwkJLyoKKwkJICogQ29tcHV0ZSB2aXJ0 dWFsIGdlbmVyYXRlZCBjb2x1bW5zCisJCSAqLworCQlpZiAocmVzdWx0UmVsYXRpb25EZXNjLT5y ZF9hdHQtPmNvbnN0ciAmJgorCQkJcmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ci0+ aGFzX2dlbmVyYXRlZF92aXJ0dWFsKQorCQkJRXhlY0NvbXB1dGVWaXJ0dWFsR2VuZXJhdGVkKHJl c3VsdFJlbEluZm8sIGVzdGF0ZSwgc2xvdCwKKwkJCQkJCQkJCQlDTURfSU5TRVJUKTsKKwogCQkv KgogCQkgKiBJZiB0aGUgRkRXIHN1cHBvcnRzIGJhdGNoaW5nLCBhbmQgYmF0Y2hpbmcgaXMgcmVx dWVzdGVkLCBhY2N1bXVsYXRlCiAJCSAqIHJvd3MgYW5kIGluc2VydCB0aGVtIGluIGJhdGNoZXMu IE90aGVyd2lzZSB1c2UgdGhlIHBlci1yb3cgaW5zZXJ0cy4KQEAgLTEwNzAsNiArMTE4MSwxNCBA QCBFeGVjSW5zZXJ0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJCUV4ZWNDb21wdXRl U3RvcmVkR2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwgc2xvdCwKIAkJCQkJCQkJCSAg IENNRF9JTlNFUlQpOwogCisJCS8qCisJCSAqIENvbXB1dGUgdmlydHVhbCBnZW5lcmF0ZWQgY29s dW1ucworCQkgKi8KKwkJaWYgKHJlc3VsdFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25zdHIgJiYK KwkJCXJlc3VsdFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfdmly dHVhbCkKKwkJCUV4ZWNDb21wdXRlVmlydHVhbEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3Rh dGUsIHNsb3QsCisJCQkJCQkJCQkJQ01EX0lOU0VSVCk7CisKIAkJLyoKIAkJICogQ2hlY2sgYW55 IFJMUyBXSVRIIENIRUNLIHBvbGljaWVzLgogCQkgKgpAQCAtMjE3OCw2ICsyMjk3LDE0IEBAIEV4 ZWNVcGRhdGVQcmVwYXJlU2xvdChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQlyZXN1 bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3N0b3JlZCkKIAkJ RXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBzbG90LAog CQkJCQkJCQkgICBDTURfVVBEQVRFKTsKKworCS8qCisJICogQ29tcHV0ZSB2aXJ0dWFsIGdlbmVy YXRlZCBjb2x1bW5zCisJICovCisJaWYgKHJlc3VsdFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25z dHIgJiYKKwkJcmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRl ZF92aXJ0dWFsKQorCQlFeGVjQ29tcHV0ZVZpcnR1YWxHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywg ZXN0YXRlLCBzbG90LAorCQkJCQkJCQkJQ01EX1VQREFURSk7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaCBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5oCmluZGV4IGY2MDcwZTFjZGYzLi43Y2JiZThjMWExZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmgKQEAgLTIzLDYgKzIzLDEwIEBA IGV4dGVybiB2b2lkIEV4ZWNDb21wdXRlU3RvcmVkR2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJl c3VsdFJlbEluZm8sCiAJCQkJCQkJCQkgICBFU3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QsCiAJCQkJCQkJCQkgICBDbWRUeXBlIGNtZHR5cGUpOwogCitleHRlcm4gdm9pZCBFeGVj Q29tcHV0ZVZpcnR1YWxHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJ CQkJCQkJCQlFU3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJ Q21kVHlwZSBjbWR0eXBlKTsKKwogZXh0ZXJuIE1vZGlmeVRhYmxlU3RhdGUgKkV4ZWNJbml0TW9k aWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKTsK IGV4dGVybiB2b2lkIEV4ZWNFbmRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2RlKTsK IGV4dGVybiB2b2lkIEV4ZWNSZVNjYW5Nb2RpZnlUYWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2Rl KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNjNjMDY3ZDVhYWUuLjUwMmU0ZTE0ZDY0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtNTczLDYgKzU3MywxNiBAQCB0eXBlZGVmIHN0cnVjdCBSZXN1 bHRSZWxJbmZvCiAJaW50CQkJcmlfTnVtR2VuZXJhdGVkTmVlZGVkSTsKIAlpbnQJCQlyaV9OdW1H ZW5lcmF0ZWROZWVkZWRVOwogCisJLyoKKwkgKiBBcnJheXMgb2YgdmlydHVhbCBnZW5lcmF0ZWQg Y29sdW1ucyBFeHByU3RhdGVzIGZvciBJTlNFUlQvVVBEQVRFL01FUkdFLgorCSAqLworCUV4cHJT dGF0ZSAqKnJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc0k7CisJRXhwclN0YXRlICoqcmlfVmlydHVh bEdlbmVyYXRlZEV4cHJzVTsKKworCS8qIG51bWJlciBvZiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1 bW5zIHdlIG5lZWQgdG8gY29tcHV0ZSAqLworCWludAkJCXJpX051bVZpcnR1YWxHZW5lcmF0ZWRO ZWVkZWRJOworCWludAkJCXJpX051bVZpcnR1YWxHZW5lcmF0ZWROZWVkZWRVOworCiAJLyogbGlz dCBvZiBSRVRVUk5JTkcgZXhwcmVzc2lvbnMgKi8KIAlMaXN0CSAgICpyaV9yZXR1cm5pbmdMaXN0 OwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0 dWFsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0 CmluZGV4IDZkYWI2MGM5MzdiLi4xOGNmZDVhYjQ2YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKQEAgLTE2NiwxMSArMTY2LDkgQEAgU0VM RUNUIGEsIGIgRlJPTSBndGVzdDEgV0hFUkUgYiA9IDQgT1JERVIgQlkgYTsKICAyIHwgNAogKDEg cm93KQogCi0tLSB0ZXN0IHRoYXQgb3ZlcmZsb3cgZXJyb3IgaGFwcGVucyBvbiByZWFkCistLSB0 ZXN0IHRoYXQgb3ZlcmZsb3cgZXJyb3IgaGFwcGVucyBvbiB3cml0ZQogSU5TRVJUIElOVE8gZ3Rl c3QxIFZBTFVFUyAoMjAwMDAwMDAwMCk7Ci1TRUxFQ1QgKiBGUk9NIGd0ZXN0MTsKIEVSUk9SOiAg aW50ZWdlciBvdXQgb2YgcmFuZ2UKLURFTEVURSBGUk9NIGd0ZXN0MSBXSEVSRSBhID0gMjAwMDAw MDAwMDsKIC0tIHRlc3Qgd2l0aCBqb2lucwogQ1JFQVRFIFRBQkxFIGd0ZXN0eCAoeCBpbnQsIHkg aW50KTsKIElOU0VSVCBJTlRPIGd0ZXN0eCBWQUxVRVMgKDExLCAxKSwgKDIyLCAyKSwgKDMzLCAz KTsKQEAgLTYzOCw3ICs2MzYsNyBAQCBDUkVBVEUgVEFCTEUgZ3Rlc3QyMCAoYSBpbnQgUFJJTUFS WSBLRVksIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEgKiAyKSBWSVJUVQogSU5TRVJUIElO VE8gZ3Rlc3QyMCAoYSkgVkFMVUVTICgxMCk7ICAtLSBvawogSU5TRVJUIElOVE8gZ3Rlc3QyMCAo YSkgVkFMVUVTICgzMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CiBFUlJPUjogIG5ldyByb3cg Zm9yIHJlbGF0aW9uICJndGVzdDIwIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJndGVzdDIw X2JfY2hlY2siCi1ERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMzAsIHZpcnR1YWwpLgor REVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDMwLCA2MCkuCiBBTFRFUiBUQUJMRSBndGVz dDIwIEFMVEVSIENPTFVNTiBiIFNFVCBFWFBSRVNTSU9OIEFTIChhICogMTAwKTsgIC0tIHZpb2xh dGVzIGNvbnN0cmFpbnQKIEVSUk9SOiAgY2hlY2sgY29uc3RyYWludCAiZ3Rlc3QyMF9iX2NoZWNr IiBvZiByZWxhdGlvbiAiZ3Rlc3QyMCIgaXMgdmlvbGF0ZWQgYnkgc29tZSByb3cKIEFMVEVSIFRB QkxFIGd0ZXN0MjAgQUxURVIgQ09MVU1OIGIgU0VUIEVYUFJFU1NJT04gQVMgKGEgKiAzKTsgIC0t IG9rCkBAIC02ODQsMTggKzY4MiwxOCBAQCBBTFRFUiBUQUJMRSBndGVzdDIwYyBBREQgQ09OU1RS QUlOVCB3aG9sZV9yb3dfY2hlY2sgQ0hFQ0sgKGd0ZXN0MjBjIElTIE5PVCBOVUxMKQogSU5TRVJU IElOVE8gZ3Rlc3QyMGMgVkFMVUVTICgxKTsgIC0tIG9rCiBJTlNFUlQgSU5UTyBndGVzdDIwYyBW QUxVRVMgKE5VTEwpOyAgLS0gZmFpbHMKIEVSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gImd0 ZXN0MjBjIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ3aG9sZV9yb3dfY2hlY2siCi1ERVRB SUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAobnVsbCwgdmlydHVhbCkuCitERVRBSUw6ICBGYWls aW5nIHJvdyBjb250YWlucyAobnVsbCwgbnVsbCkuCiAtLSBub3QtbnVsbCBjb25zdHJhaW50cwog Q1JFQVRFIFRBQkxFIGd0ZXN0MjFhIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgR0VORVJBVEVE IEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBWSVJUVUFMIE5PVCBOVUxMKTsKIElOU0VSVCBJTlRP IGd0ZXN0MjFhIChhKSBWQUxVRVMgKDEpOyAgLS0gb2sKIElOU0VSVCBJTlRPIGd0ZXN0MjFhIChh KSBWQUxVRVMgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAogRVJST1I6ICBudWxsIHZhbHVl IGluIGNvbHVtbiAiYiIgb2YgcmVsYXRpb24gImd0ZXN0MjFhIiB2aW9sYXRlcyBub3QtbnVsbCBj b25zdHJhaW50Ci1ERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMCwgdmlydHVhbCkuCitE RVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMCwgbnVsbCkuCiAtLSBhbHNvIGNoZWNrIHdp dGggdGFibGUgY29uc3RyYWludCBzeW50YXgKIENSRUFURSBUQUJMRSBndGVzdDIxYXggKGEgaW50 IFBSSU1BUlkgS0VZLCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYoYSwgMCkpIFZJ UlRVQUwsIENPTlNUUkFJTlQgY2MgTk9UIE5VTEwgYik7CiBJTlNFUlQgSU5UTyBndGVzdDIxYXgg KGEpIFZBTFVFUyAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CiBFUlJPUjogIG51bGwgdmFs dWUgaW4gY29sdW1uICJiIiBvZiByZWxhdGlvbiAiZ3Rlc3QyMWF4IiB2aW9sYXRlcyBub3QtbnVs bCBjb25zdHJhaW50Ci1ERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMCwgdmlydHVhbCku CitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMCwgbnVsbCkuCiBJTlNFUlQgSU5UTyBn dGVzdDIxYXggKGEpIFZBTFVFUyAoMSk7ICAtLW9rCiAtLSBTRVQgRVhQUkVTU0lPTiBzdXBwb3J0 cyBub3QgbnVsbCBjb25zdHJhaW50CiBBTFRFUiBUQUJMRSBndGVzdDIxYXggQUxURVIgQ09MVU1O IGIgU0VUIEVYUFJFU1NJT04gQVMgKG51bGxpZihhLCAxKSk7IC0tZXJyb3IKQEAgLTcwNSwxNyAr NzAzLDE3IEBAIENSRUFURSBUQUJMRSBndGVzdDIxYXggKGEgaW50IFBSSU1BUlkgS0VZLCBiIGlu dCBHRU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYoYSwKIEFMVEVSIFRBQkxFIGd0ZXN0MjFheCBB REQgQ09OU1RSQUlOVCBjYyBOT1QgTlVMTCBiOwogSU5TRVJUIElOVE8gZ3Rlc3QyMWF4IChhKSBW QUxVRVMgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAogRVJST1I6ICBudWxsIHZhbHVlIGlu IGNvbHVtbiAiYiIgb2YgcmVsYXRpb24gImd0ZXN0MjFheCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludAotREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDAsIHZpcnR1YWwpLgorREVU QUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDAsIG51bGwpLgogRFJPUCBUQUJMRSBndGVzdDIx YXg7CiBDUkVBVEUgVEFCTEUgZ3Rlc3QyMWIgKGEgaW50LCBiIGludCBHRU5FUkFURUQgQUxXQVlT IEFTIChudWxsaWYoYSwgMCkpIFZJUlRVQUwpOwogQUxURVIgVEFCTEUgZ3Rlc3QyMWIgQUxURVIg Q09MVU1OIGIgU0VUIE5PVCBOVUxMOwogSU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAo MSk7ICAtLSBvawogSU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAoMiksICgwKTsgIC0t IHZpb2xhdGVzIGNvbnN0cmFpbnQKIEVSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gImIiIG9m IHJlbGF0aW9uICJndGVzdDIxYiIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludAotREVUQUlM OiAgRmFpbGluZyByb3cgY29udGFpbnMgKDAsIHZpcnR1YWwpLgorREVUQUlMOiAgRmFpbGluZyBy b3cgY29udGFpbnMgKDAsIG51bGwpLgogSU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAo TlVMTCk7ICAtLSBlcnJvcgogRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiAiYiIgb2YgcmVs YXRpb24gImd0ZXN0MjFiIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50Ci1ERVRBSUw6ICBG YWlsaW5nIHJvdyBjb250YWlucyAobnVsbCwgdmlydHVhbCkuCitERVRBSUw6ICBGYWlsaW5nIHJv dyBjb250YWlucyAobnVsbCwgbnVsbCkuCiBBTFRFUiBUQUJMRSBndGVzdDIxYiBBTFRFUiBDT0xV TU4gYiBEUk9QIE5PVCBOVUxMOwogSU5TRVJUIElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAoMCk7 ICAtLSBvayBub3cKIC0tIG5vdC1udWxsIGNvbnN0cmFpbnQgd2l0aCBwYXJ0aXRpb25lZCB0YWJs ZQpAQCAtNzMwLDEwICs3MjgsMTAgQEAgQ1JFQVRFIFRBQkxFIGd0ZXN0bm5fY2hpbGRkZWYgUEFS VElUSU9OIE9GIGd0ZXN0bm5fcGFyZW50IGRlZmF1bHQ7CiBJTlNFUlQgSU5UTyBndGVzdG5uX3Bh cmVudCBWQUxVRVMgKDIsIDIsIGRlZmF1bHQpLCAoMywgNSwgZGVmYXVsdCksICgxNCwgMTIsIGRl ZmF1bHQpOyAgLS0gb2sKIElOU0VSVCBJTlRPIGd0ZXN0bm5fcGFyZW50IFZBTFVFUyAoMSwgMiwg ZGVmYXVsdCk7ICAtLSBlcnJvcgogRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiAiZjMiIG9m IHJlbGF0aW9uICJndGVzdG5uX2NoaWxkIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50Ci1E RVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMSwgMiwgdmlydHVhbCkuCitERVRBSUw6ICBG YWlsaW5nIHJvdyBjb250YWlucyAoMSwgMiwgbnVsbCkuCiBJTlNFUlQgSU5UTyBndGVzdG5uX3Bh cmVudCBWQUxVRVMgKDIsIDEwLCBkZWZhdWx0KTsgIC0tIGVycm9yCiBFUlJPUjogIG51bGwgdmFs dWUgaW4gY29sdW1uICJmMyIgb2YgcmVsYXRpb24gImd0ZXN0bm5fY2hpbGQiIHZpb2xhdGVzIG5v dC1udWxsIGNvbnN0cmFpbnQKLURFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgyLCAxMCwg dmlydHVhbCkuCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMiwgMTAsIG51bGwpLgog QUxURVIgVEFCTEUgZ3Rlc3Rubl9wYXJlbnQgQUxURVIgQ09MVU1OIGYzIFNFVCBFWFBSRVNTSU9O IEFTIChudWxsaWYoZjEsIDIpICsgbnVsbGlmKGYyLCAxMSkpOyAgLS0gZXJyb3IKIEVSUk9SOiAg Y29sdW1uICJmMyIgb2YgcmVsYXRpb24gImd0ZXN0bm5fY2hpbGQiIGNvbnRhaW5zIG51bGwgdmFs dWVzCiBJTlNFUlQgSU5UTyBndGVzdG5uX3BhcmVudCBWQUxVRVMgKDEwLCAxMSwgZGVmYXVsdCk7 ICAtLSBvawpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f bWVyZ2Uub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0 CmluZGV4IDkyNWZlNGY1NzBhLi44MjkxNGJlNDVlNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dApAQCAtMTA2MCw5ICsxMDYwLDkgQEAgU0VMRUNU IGNvdW50KCopIEZST00gdCBXSEVSRSBpID0gMCBBTkQgdGFiX2lkIElOIChTRUxFQ1QgdGFiX2lk IEZST00gdCBXSEVSRSBpID0KIERST1AgVEFCTEUgdDsKIC0tIFRlc3QgZm9yIGdlbmVyYXRlZCBj b2x1bW5zIChkaWZmZXJlbnQgb3JkZXIgb2YgY29sdW1ucyBpbiBwYXJ0aXRpb25lZCB0YWJsZQog LS0gYW5kIHBhcnRpdGlvbnMpLgotQ1JFQVRFIFRBQkxFIHQgKGkgaW50LCBnIGludCBHRU5FUkFU RUQgQUxXQVlTIEFTIChpICsgdGFibGVvaWQ6OmludCkpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7 Ci1DUkVBVEUgVEFCTEUgdHBfMSAoZyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaSArIHRhYmxl b2lkOjppbnQpLCBpIGludCk7Ci1DUkVBVEUgVEFCTEUgdHBfMiAoZyBpbnQgR0VORVJBVEVEIEFM V0FZUyBBUyAoaSArIHRhYmxlb2lkOjppbnQpLCBpIGludCk7CitDUkVBVEUgVEFCTEUgdCAoaSBp bnQsIGcgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGkgKyAyKSkgUEFSVElUSU9OIEJZIFJBTkdF IChpKTsKK0NSRUFURSBUQUJMRSB0cF8xIChnIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChpICsg MiksIGkgaW50KTsKK0NSRUFURSBUQUJMRSB0cF8yIChnIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IChpICsgMiksIGkgaW50KTsKIEFMVEVSIFRBQkxFIHQgQVRUQUNIIFBBUlRJVElPTiB0cF8xIEZP UiBWQUxVRVMgRlJPTSAoLTEpIFRPICgxMCk7CiBBTFRFUiBUQUJMRSB0IEFUVEFDSCBQQVJUSVRJ T04gdHBfMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOwogQUxURVIgVEFCTEUgdCBBREQg Q0hFQ0sgKGcgPiAwKTsKQEAgLTEwNzMsNyArMTA3Myw3IEBAIElOU0VSVCBJTlRPIHQgVkFMVUVT ICgxNik7CiAtLSBFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0cF8xMiIgdmlvbGF0ZXMg Y2hlY2sgY29uc3RyYWludCAidF9pX2NoZWNrIgogSU5TRVJUIElOVE8gdCBWQUxVRVMgKDApOwog RVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidHBfMTIiIHZpb2xhdGVzIGNoZWNrIGNvbnN0 cmFpbnQgInRfaV9jaGVjayIKLURFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgwLCB2aXJ0 dWFsKS4KK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgwLCAyKS4KIC0tIFNob3VsZCBi ZSAzIHJvd3M6ICg1KSwgKDE1KSwgKDE2KToKIFNFTEVDVCBpIEZST00gdCBPUkRFUiBCWSBpOwog IGkgIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCmluZGV4IGU3 NTA4NjZkMmQ4Li5jOGU2Yzc0OTk5MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Z2VuZXJhdGVkX3ZpcnR1YWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRl ZF92aXJ0dWFsLnNxbApAQCAtNzEsMTAgKzcxLDggQEAgU0VMRUNUICogRlJPTSBndGVzdDEgT1JE RVIgQlkgYTsKIFNFTEVDVCBhLCBiLCBiICogMiBBUyBiMiBGUk9NIGd0ZXN0MSBPUkRFUiBCWSBh OwogU0VMRUNUIGEsIGIgRlJPTSBndGVzdDEgV0hFUkUgYiA9IDQgT1JERVIgQlkgYTsKIAotLS0g dGVzdCB0aGF0IG92ZXJmbG93IGVycm9yIGhhcHBlbnMgb24gcmVhZAorLS0gdGVzdCB0aGF0IG92 ZXJmbG93IGVycm9yIGhhcHBlbnMgb24gd3JpdGUKIElOU0VSVCBJTlRPIGd0ZXN0MSBWQUxVRVMg KDIwMDAwMDAwMDApOwotU0VMRUNUICogRlJPTSBndGVzdDE7Ci1ERUxFVEUgRlJPTSBndGVzdDEg V0hFUkUgYSA9IDIwMDAwMDAwMDA7CiAKIC0tIHRlc3Qgd2l0aCBqb2lucwogQ1JFQVRFIFRBQkxF IGd0ZXN0eCAoeCBpbnQsIHkgaW50KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BhcnRpdGlvbl9tZXJnZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVy Z2Uuc3FsCmluZGV4IGEyMTFmZWUyYWQxLi5kZjQyMzk3MThjYiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3FsCkBAIC03NjIsOSArNzYyLDkgQEAgRFJPUCBUQUJMRSB0 OwogCiAtLSBUZXN0IGZvciBnZW5lcmF0ZWQgY29sdW1ucyAoZGlmZmVyZW50IG9yZGVyIG9mIGNv bHVtbnMgaW4gcGFydGl0aW9uZWQgdGFibGUKIC0tIGFuZCBwYXJ0aXRpb25zKS4KLUNSRUFURSBU QUJMRSB0IChpIGludCwgZyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaSArIHRhYmxlb2lkOjpp bnQpKSBQQVJUSVRJT04gQlkgUkFOR0UgKGkpOwotQ1JFQVRFIFRBQkxFIHRwXzEgKGcgaW50IEdF TkVSQVRFRCBBTFdBWVMgQVMgKGkgKyB0YWJsZW9pZDo6aW50KSwgaSBpbnQpOwotQ1JFQVRFIFRB QkxFIHRwXzIgKGcgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGkgKyB0YWJsZW9pZDo6aW50KSwg aSBpbnQpOworQ1JFQVRFIFRBQkxFIHQgKGkgaW50LCBnIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IChpICsgMikpIFBBUlRJVElPTiBCWSBSQU5HRSAoaSk7CitDUkVBVEUgVEFCTEUgdHBfMSAoZyBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaSArIDIpLCBpIGludCk7CitDUkVBVEUgVEFCTEUgdHBf MiAoZyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaSArIDIpLCBpIGludCk7CiBBTFRFUiBUQUJM RSB0IEFUVEFDSCBQQVJUSVRJT04gdHBfMSBGT1IgVkFMVUVTIEZST00gKC0xKSBUTyAoMTApOwog QUxURVIgVEFCTEUgdCBBVFRBQ0ggUEFSVElUSU9OIHRwXzIgRk9SIFZBTFVFUyBGUk9NICgxMCkg VE8gKDIwKTsKIEFMVEVSIFRBQkxFIHQgQUREIENIRUNLIChnID4gMCk7Ci0tIAoyLjUyLjAKCg== --0a934772d24f45c37ec80fe89927776927e19e3d49807fd57f461c7ba07d--