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 1wEbx4-004Cda-2m for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Apr 2026 23:53:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wEbx1-00GmiJ-1l for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Apr 2026 23:53:19 +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.96) (envelope-from ) id 1wEbx1-00GmiA-0L for pgsql-hackers@lists.postgresql.org; Sun, 19 Apr 2026 23:53:19 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wEbwy-000000022mJ-41yM for pgsql-hackers@lists.postgresql.org; Sun, 19 Apr 2026 23:53:18 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-43fea39e066so1568011f8f.1 for ; Sun, 19 Apr 2026 16:53:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776642791; cv=none; d=google.com; s=arc-20240605; b=R+g5JZnP+kKziJWbktNVn3QcsfKG49CsnOTWy2BKXMllqHqVBkMSPj+mwyJu9r+MjB fP+kp2/jobG81j25Wy6Ftl+f/cgHx5JGjCnaLlaPjuuSyGALNtJ0y6eexiCVJxoMFacK /24dQtPWj5WTGVxoPCCg8PwbZ+IsAeOx25WUnko9U3XtU8Q8rojEGox1l5ij8QlhSeEp C8XaNc8gSLXhJZCn5yv+FxRmfD34ECKWGvYQf4K6ScprPwenORutewc/2Iup3YnNEykS t1onDbqZtCHQmUxfxyBAewkns3Lwg6lPVZh08IiyMBj9rkLhdSUDiy6nVg7kFd3EklNZ 0HsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=SK8NbZ2PhwkgWKahlQ8g8CwGYfEFrVYRvcigxun7fDU=; fh=V8t5FQ+nZRtUXd6+80jkivvMdtKj+aWM6dDPHmFLksM=; b=JH6aBWyAVzkb5rGo5miSQ5yxXLH1nyH4SmdaLjfIsQODs65nbzwqN+LQWYLh7dA3Cf mKSutTKsLhnxLounr/5XJOazS+mKX0oKdiWaJvgcY/qg6sf2mWpoe+nQ2Gj5nhl3SD2z ybNp4KFeTL4CPNnGKb34cmzieQTqVD5bFoK673/q2y1p1dWdgUC/XCl8TRzoXPBPH/3r rBc4g3zQyLbuKfqPdv8i/FMRg7zIXk1ZvKobuO9SyFZ7YPi8oflIfKh1RhADdRAv6Efq 8g9Gb5h5/473nvifP81me3EAq4gcbh+6tI6ew+HkG3vaK3pL3oI3Nbtq/BsMjODUcVN8 L7gw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776642791; x=1777247591; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=SK8NbZ2PhwkgWKahlQ8g8CwGYfEFrVYRvcigxun7fDU=; b=FjxeFDQZ8JIjyt1C7T8CRk+lTXe34IRWGVVsScpSWCqAXOIM44MRN4S5vqWPfKiYZT KC+A1ugGnfdiioauBMy5WT7J46j1l+D9GvK6nXHmRF7LpcjvWYIL5Yqze1ZZtqtEI0N3 ePRJdoW5CzRLPMpilUyeScTxNbtNuq9lIjeDOt+xfdcGgOta79Enzk01glpWSMQQn7CA 1heHMHC0VF4Hi9F88D6qVg9v+ohqpH2s7IAjqombG7KV8fgbCm89fDxaHKi4uKxRZYAL ITnc0AOo7ikaOZS0lEWG6HNIOlsXgpfRJ1kwZaAUkHuFT+ozVVV/EKYx/Zi22IldZmgG Awpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776642791; x=1777247591; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=SK8NbZ2PhwkgWKahlQ8g8CwGYfEFrVYRvcigxun7fDU=; b=s+Rnro4oIEqf7YbAsx0+Cdq/b4iO6DnEKU80nAUXju7qJ7f1w59Hq85ZMDGB8iUk8G vnUFkTOQa6lfTPKjqFr7HyGA1r+x2LfU2tFkiJE+3Vdc9bN/XDLPg5ycCMD5s2Y6m1kh EKLqvVH0RrGH22irHWDMfEZ0wp4oFCIBxmcjVS6kZx5ZvzNugbduN+dTNol86AloOE66 0kwjOjdpy/NfBb6eKhdUBoen/qevGAhT86hkd4HW+zLdRmTvq6NL2W5F/ps4JtKWWPHX AkdS5YtWcivIiOJuPcBTLwu1Hx8m0GkEpcuL7uQTZGVgHoUL8bGN3l3f64n73/YPGcIc Svhw== X-Forwarded-Encrypted: i=1; AFNElJ8BQ9TNFwcjlhBplG8tP3v26CkNKy8OeWqSHXwP+uht3EX+FpdlDSgUtJwuNsIatoRk3kAFFiSvEuU7ASO5@lists.postgresql.org X-Gm-Message-State: AOJu0Yyxn6n1mlKUEYXQYuuD4WB2zld15FtazvYUq+WUh5bu3q6nosvL StLIfV44GVovX3IKE4MCePaW3xX7Y4nN9dbmoatIBAtLfg79MzFm4fN/Op+cmRPlJZIzk/QcRnQ G87CcDtmVx9xy2/AHO17IJO+2TH7tR2s= X-Gm-Gg: AeBDiet9YhMFS7MHL2NAY6c+G9P9tZLYgd/vEAz+YkjfR1ZRC4Osj1A2ztraCd2p2n6 oB/j5wvuiXU+VgguG95Aqc2+hAcowN+GR1/+BhJZ9PGeDbklMJVvQETUpzCBC9te+h1VEn3ibn3 D6jI/uHypch5yZHK9TBD0AjdQ8yZIUewu/ZvZFlwxklzbGZ2V3HtOe8gblHlLnmB59fn7lyeway 9tmLQ1+RUivZc2DxKtS1KnIk0r4wQ1o4mFias4Z7ISSRFMP+OWM9jxbJU4o+3CshiT8ZTo/kkv6 OY0ckqS+COxKGib2JkjsBUN6g4TBvHlYuHUtqR0nh4cjD7NuzqVFcULjK+2b6QJngtKDN+TcnCz 5gNbJRxoE X-Received: by 2002:a05:6000:200c:b0:43d:77f4:7145 with SMTP id ffacd0b85a97d-43fe3dd407dmr16844057f8f.19.1776642790840; Sun, 19 Apr 2026 16:53:10 -0700 (PDT) MIME-Version: 1.0 References: <278B9FE3-F349-4494-99C5-483105C1C999@gmail.com> <1900289.1776212948@sss.pgh.pa.us> <1913188.1776220247@sss.pgh.pa.us> <77f5109f-6d39-4cf1-8d0d-f826435d6cb6@app.fastmail.com> In-Reply-To: <77f5109f-6d39-4cf1-8d0d-f826435d6cb6@app.fastmail.com> From: David Rowley Date: Mon, 20 Apr 2026 11:52:58 +1200 X-Gm-Features: AQROBzBD4KNwAlyxB9fCSvi6rhLQp-KqnAqjckMzFSLNqRMKvbTey2yG5wBBzY4 Message-ID: Subject: Re: Add bms_offset_members() function for bitshifting Bitmapsets To: Greg Burd Cc: Tom Lane , Chao Li , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000070f190064fd8e2a5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000070f190064fd8e2a5 Content-Type: text/plain; charset="UTF-8" On Mon, 20 Apr 2026 at 07:22, Greg Burd wrote: > I applied, tested, and reviewed these changes. Thanks for doing this, only a few small things jumped out. Many thanks. I took all of those suggestions. > SELECT test_bms_offset_members('(b 1)', -2147483648); I made that one use member 0 instead of 1. That'll mean "new_highest" goes to INT_MIN rather than INT_MIN + 1. David --00000000000070f190064fd8e2a5 Content-Type: application/octet-stream; name="v3-0001-Introduce-bms_offset_members-function.patch" Content-Disposition: attachment; filename="v3-0001-Introduce-bms_offset_members-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo6f7g0r0 RnJvbSAwOTU3Y2NjZTYwYThjMTBjNDNmNmVjOGRlYjgwMTFmZTNiOWU5NzIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyMCBNYXIgMjAyNiAxMTowMToxMyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjNdIElu dHJvZHVjZSBibXNfb2Zmc2V0X21lbWJlcnMoKSBmdW5jdGlvbgoKRWZmZWN0aXZlbHkgYSBmdW5j dGlvbiB0byBiaXRzaGlmdCBtZW1iZXJzIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mCmJpdHMu ICBXZSBoYXZlIHZhcmlvdXMgZnJhZ21lbnRzIG9mIGNvZGUgZG9pbmcgdGhpcyBtYW51YWxseSB3 aXRoIGEKYm1zX25leHRfbWVtYmVyKCkgbG9vcC4gIFdlIGNhbiBkbyB0aGlzIG1vcmUgZWZmaWNp ZW50bHkgd2l0aApiaXRzaGlmdGluZy4KLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQu YyAgICAgICAgICAgICAgICAgfCAxMzUgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jICAgICB8ICAzMCArKy0tCiBzcmMvYmFja2VuZC9y ZXdyaXRlL3Jld3JpdGVNYW5pcC5jICAgICAgICAgICAgfCAgMjUgKy0tLQogc3JjL2JhY2tlbmQv c3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jICAgICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9u b2Rlcy9iaXRtYXBzZXQuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL2V4cGVjdGVkL3Rl c3RfYml0bWFwc2V0Lm91dCAgICAgICAgICAgICAgIHwgIDgxICsrKysrKysrKysrCiAuLi4vdGVz dF9iaXRtYXBzZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNxbCAgICAgfCAgMjMgKysrCiAuLi4vdGVz dF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwgICAgfCAgIDggKysKIC4uLi9tb2R1 bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMgICB8IDEwMSArKysrKysrKysrKyst CiAxMCBmaWxlcyBjaGFuZ2VkLCAzNzQgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvYml0bWFwc2V0LmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9iaXRtYXBzZXQuYwppbmRleCBmMDUzZDhjNGQ2NC4uOWNiNGUyNTJiMmMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVz L2JpdG1hcHNldC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAog I2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCiAjaW5j bHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2lu Y2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKQEAgLTQwNSw2ICs0MDYsMTQwIEBAIGJtc19kaWZm ZXJlbmNlKGNvbnN0IEJpdG1hcHNldCAqYSwgY29uc3QgQml0bWFwc2V0ICpiKQogCXJldHVybiBy ZXN1bHQ7CiB9CiAKKy8qCisgKiBibXNfb2Zmc2V0X21lbWJlcnMKKyAqCQlDcmVhdGVzIGEgbmV3 IEJpdG1hcHNldCB3aXRoIGFsbCBtZW1iZXJzIG9mICdhJyBhZGp1c3RlZCB0byBhZGQgdGhlCisg KgkJdmFsdWUgb2YgJ29mZnNldCcgdG8gZWFjaCBtZW1iZXIuCisgKgorICogTWVtYmVycyB3aGlj aCB3b3VsZCBiZWNvbWUgbmVnYXRpdmUgYXMgYSByZXN1bHQgb2YgYSBuZWdhdGl2ZSBvZmZzZXQg d2lsbAorICogYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXQsIHdoZXJlYXMgdG9vIGxhcmdlIGFuIG9m ZnNldCwgd2hpY2ggd291bGQgcmVzdWx0IGluCisgKiBhIG1lbWJlciBnb2luZyA+IElOVF9NQVgs IHdpbGwgcmVzdWx0IGluIGFuIEVSUk9SLgorICovCitCaXRtYXBzZXQgKgorYm1zX29mZnNldF9t ZW1iZXJzKGNvbnN0IEJpdG1hcHNldCAqYSwgaW50IG9mZnNldCkKK3sKKwlCaXRtYXBzZXQgICpy ZXN1bHQ7CisJaW50CQkJb2Zmc2V0X3dvcmRzOworCWludAkJCW9mZnNldF9iaXRzOworCWludAkJ CW5ld19ud29yZHM7CisJaW50CQkJb2xkX253b3JkczsKKwlpbnQzMgkJaGlnaF9iaXQ7CisJaW50 CQkJb2xkX2hpZ2hlc3Q7CisJaW50CQkJbmV3X2hpZ2hlc3Q7CisKKwlBc3NlcnQoYm1zX2lzX3Zh bGlkX3NldChhKSk7CisKKwkvKiBub3RoaW5nIHRvIGRvIGZvciBlbXB0eSBzZXRzICovCisJaWYg KGEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlvbGRfbndvcmRzID0gYS0+bndvcmRzOwor CW9mZnNldF93b3JkcyA9IFdPUkROVU0ob2Zmc2V0KTsKKwlvZmZzZXRfYml0cyA9IEJJVE5VTShv ZmZzZXQpOworCWhpZ2hfYml0ID0gYm13X2xlZnRtb3N0X29uZV9wb3MoYS0+d29yZHNbYS0+bndv cmRzIC0gMV0pOworCW9sZF9oaWdoZXN0ID0gKG9sZF9ud29yZHMgLSAxKSAqIEJJVFNfUEVSX0JJ VE1BUFdPUkQgKyBoaWdoX2JpdDsKKworCS8qIGRvbid0IGNyZWF0ZSBhIHNldCB3aXRoIGEgbWVt YmVyIHRoYXQgZG9lc24ndCBmaXQgaW50byBhbiBpbnQzMiAqLworCWlmIChwZ19hZGRfczMyX292 ZXJmbG93KG9sZF9oaWdoZXN0LCBvZmZzZXQsICZuZXdfaGlnaGVzdCkpCisJCWVsb2coRVJST1Is ICJiaXRtYXBzZXQgb3ZlcmZsb3ciKTsKKwkvKiByZXR1cm4gTlVMTCBpZiB0aGUgbmV3IHNldCB3 b3VsZCBiZSBlbXB0eSAqLworCWVsc2UgaWYgKG5ld19oaWdoZXN0IDwgMCkKKwkJcmV0dXJuIE5V TEw7CisKKwluZXdfbndvcmRzID0gV09SRE5VTShuZXdfaGlnaGVzdCkgKyAxOworCXJlc3VsdCA9 IChCaXRtYXBzZXQgKikgcGFsbG9jMChCSVRNQVBTRVRfU0laRShuZXdfbndvcmRzKSk7CisJcmVz dWx0LT50eXBlID0gVF9CaXRtYXBzZXQ7CisJcmVzdWx0LT5ud29yZHMgPSBuZXdfbndvcmRzOwor CisJLyogaGFuZGxlIHplcm8gYW5kIHBvc2l0aXZlIG9mZnNldHMgKGJpdHNoaWZ0IGxlZnQpICov CisJaWYgKG9mZnNldCA+PSAwKQorCXsKKwkJLyoKKwkJICogV2Ugc3BlY2lhbC1jYXNlIG9mZnNl dHRpbmcgb25seSBieSB3aG9sZSB3b3JkcyBzbyB3ZSBkb24ndCBoYXZlIHRvCisJCSAqIHNwZWNp YWwtY2FzZSBiaXRzaGlmdGluZyBieSBCSVRTX1BFUl9CSVRNQVBXT1JEIHBsYWNlcywgd2hpY2gg aGFzCisJCSAqIGFuIHVuZGVmaW5lZCBiZWhhdmlvci4KKwkJICovCisJCWlmIChvZmZzZXRfYml0 cyA9PSAwKQorCQl7CisJCQlpbnQJCQlpID0gMDsKKworCQkJLyoKKwkJCSAqIFRoZSBvbGQgc2V0 IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhdCBsZWFzdCAxIHdvcmQsIHNvIHVzZQorCQkJICogZG8v d2hpbGUgdG8gc2F2ZSB0aGUgcmVkdW5kYW50IGluaXRpYWwgbG9vcCBib3VuZHMgY2hlY2suCisJ CQkgKi8KKwkJCWRvCisJCQl7CisJCQkJQXNzZXJ0KGkgKyBvZmZzZXRfd29yZHMgPCBuZXdfbndv cmRzKTsKKwkJCQlyZXN1bHQtPndvcmRzW2kgKyBvZmZzZXRfd29yZHNdID0gYS0+d29yZHNbaV07 CisJCQl9IHdoaWxlICgrK2kgPCBvbGRfbndvcmRzKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlu dAkJCWNhcnJ5X2JpdHMgPSBCSVRTX1BFUl9CSVRNQVBXT1JEIC0gb2Zmc2V0X2JpdHM7CisJCQli aXRtYXB3b3JkCXByZXZfY2FycnkgPSAwOworCQkJaW50CQkJaSA9IDA7CisKKwkJCWRvCisJCQl7 CisJCQkJYml0bWFwd29yZAljYXJyeSA9IChhLT53b3Jkc1tpXSA+PiBjYXJyeV9iaXRzKTsKKwor CQkJCUFzc2VydChpICsgb2Zmc2V0X3dvcmRzIDwgbmV3X253b3Jkcyk7CisJCQkJLyogc2hpZnQg Yml0cyB1cCBhbmQgY2FycnkgYml0cyBmcm9tIHRoZSBwcmV2aW91cyB3b3JkICovCisJCQkJcmVz dWx0LT53b3Jkc1tpICsgb2Zmc2V0X3dvcmRzXSA9IChhLT53b3Jkc1tpXSA8PCBvZmZzZXRfYml0 cykgfCBwcmV2X2NhcnJ5OworCQkJCXByZXZfY2FycnkgPSBjYXJyeTsKKwkJCX0gd2hpbGUgKCsr aSA8IG9sZF9ud29yZHMpOworCQkJcmVzdWx0LT53b3Jkc1tuZXdfbndvcmRzIC0gMV0gfD0gcHJl dl9jYXJyeTsKKwkJfQorCX0KKworCS8qIGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXQgKGJpdHNoaWZ0 IHJpZ2h0KSAqLworCWVsc2UKKwl7CisJCS8qIG1ha2UgdGhlIG5lZ2F0aXZlIG9mZnNldF93b3Jk cyBhbmQgb2Zmc2V0X2JpdHMgcG9zaXRpdmUgKi8KKwkJb2Zmc2V0X3dvcmRzID0gMCAtIG9mZnNl dF93b3JkczsKKwkJb2Zmc2V0X2JpdHMgPSAwIC0gb2Zmc2V0X2JpdHM7CisKKwkJLyogYXMgYWJv dmUsIHNwZWNpYWwgY2FzZSBzaGlmdGluZyBvbmx5IGJ5IHdob2xlIHdvcmRzICovCisJCWlmIChv ZmZzZXRfYml0cyA9PSAwKQorCQl7CisJCQlpbnQJCQlpID0gMDsKKworCQkJZG8KKwkJCXsKKwkJ CQlBc3NlcnQoaSArIG9mZnNldF93b3JkcyA8IG9sZF9ud29yZHMpOworCQkJCXJlc3VsdC0+d29y ZHNbaV0gPSBhLT53b3Jkc1tpICsgb2Zmc2V0X3dvcmRzXTsKKwkJCX0gd2hpbGUgKCsraSA8IG5l d19ud29yZHMpOworCQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJY2FycnlfYml0cyA9IEJJVFNf UEVSX0JJVE1BUFdPUkQgLSBvZmZzZXRfYml0czsKKwkJCWJpdG1hcHdvcmQJcHJldl9jYXJyeSA9 IDA7CisJCQlpbnQJCQlpID0gbmV3X253b3JkcyAtIDE7CisKKwkJCS8qIGNhcnJ5IGJpdHMgZnJv bSBhbnkgd29yZCBqdXN0IGFib3ZlIHdoZXJlIHRoZSBsb29wIHN0YXJ0cyAqLworCQkJaWYgKG9s ZF9ud29yZHMgPiBuZXdfbndvcmRzICsgb2Zmc2V0X3dvcmRzKQorCQkJCXByZXZfY2FycnkgPSAo YS0+d29yZHNbbmV3X253b3JkcyArIG9mZnNldF93b3Jkc10gPDwgY2FycnlfYml0cyk7CisKKwkJ CS8qCisJCQkgKiBXZSBsb29wIGJhY2t3YXJkIG92ZXIgdGhlIGFycmF5IHNvIHdlIGNvcnJlY3Rs eSBjYXJyeSBiaXRzIGZyb20KKwkJCSAqIGhpZ2hlciB3b3Jkcy4KKwkJCSAqLworCQkJZG8KKwkJ CXsKKwkJCQliaXRtYXB3b3JkCWNhcnJ5ID0gKGEtPndvcmRzW2kgKyBvZmZzZXRfd29yZHNdIDw8 IGNhcnJ5X2JpdHMpOworCisJCQkJQXNzZXJ0KGkgKyBvZmZzZXRfd29yZHMgPCBvbGRfbndvcmRz KTsKKworCQkJCS8qIHNoaWZ0IGJpdHMgZG93biBhbmQgY2FycnkgYml0cyBmcm9tIHRoZSBwcmV2 aW91cyB3b3JkICovCisJCQkJcmVzdWx0LT53b3Jkc1tpXSA9IChhLT53b3Jkc1tpICsgb2Zmc2V0 X3dvcmRzXSA+PiBvZmZzZXRfYml0cykgfCBwcmV2X2NhcnJ5OworCQkJCXByZXZfY2FycnkgPSBj YXJyeTsKKwkJCX0gd2hpbGUgKC0taSA+PSAwKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7 Cit9CisKIC8qCiAgKiBibXNfaXNfc3Vic2V0IC0gaXMgQSBhIHN1YnNldCBvZiBCPwogICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggZmYwZTg3NWYyYTIuLmViYWU3YThk ZWE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0yMDU3LDE2ICsyMDU3 LDEwIEBAIHNldF9oYXNoX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4s IGludCBydG9mZnNldCkKIHN0YXRpYyBSZWxpZHMKIG9mZnNldF9yZWxpZF9zZXQoUmVsaWRzIHJl bGlkcywgaW50IHJ0b2Zmc2V0KQogewotCVJlbGlkcwkJcmVzdWx0ID0gTlVMTDsKLQlpbnQJCQly dGluZGV4OwotCi0JLyogSWYgdGhlcmUncyBubyBvZmZzZXQgdG8gYXBwbHksIHdlIG5lZWRuJ3Qg cmVjb21wdXRlIHRoZSB2YWx1ZSAqLworCS8qIElmIHRoZXJlJ3Mgbm8gb2Zmc2V0IHRvIGFwcGx5 LCB3ZSBuZWVkbid0IG1ha2UgYW5vdGhlciBzZXQgKi8KIAlpZiAocnRvZmZzZXQgPT0gMCkKIAkJ cmV0dXJuIHJlbGlkczsKLQlydGluZGV4ID0gLTE7Ci0Jd2hpbGUgKChydGluZGV4ID0gYm1zX25l eHRfbWVtYmVyKHJlbGlkcywgcnRpbmRleCkpID49IDApCi0JCXJlc3VsdCA9IGJtc19hZGRfbWVt YmVyKHJlc3VsdCwgcnRpbmRleCArIHJ0b2Zmc2V0KTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVy biBibXNfb2Zmc2V0X21lbWJlcnMocmVsaWRzLCBydG9mZnNldCk7CiB9CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCmluZGV4IDk1YmY1MTYwNmNjLi43ODI4 MTI2MmJhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50 cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKQEAg LTM3MzEsNyArMzczMSw3IEBAIGhhc19ub3RudWxsX2ZvcmNlZF92YXIoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmZvcmNlZF9udWxsX3ZhcnMsCiAJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKIAkJQml0 bWFwc2V0ICAqbm90bnVsbGF0dG51bXM7CiAJCUJpdG1hcHNldCAgKmZvcmNlZG51bGxhdHRudW1z ID0gTlVMTDsKLQkJaW50CQkJYXR0bm87CisJCWludAkJCWxvd2VzdF9hdHRubzsKIAogCQl2YXJu bysrOwogCkBAIC0zNzUxLDIyICszNzUxLDIyIEBAIGhhc19ub3RudWxsX2ZvcmNlZF92YXIoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmZvcmNlZF9udWxsX3ZhcnMsCiAJCWlmIChibXNfaXNfbWVt YmVyKHZhcm5vLCByaWdodF9zdGF0ZS0+bnVsbGFibGVfcmVscykpCiAJCQljb250aW51ZTsKIAot CQkvKgotCQkgKiBJdGVyYXRlIG92ZXIgYXR0cmlidXRlcyBhbmQgYWRqdXN0IHRoZSBiaXRtYXAg aW5kZXhlcyBieQotCQkgKiBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyIHRvIGdl dCB0aGUgYWN0dWFsIGF0dHJpYnV0ZQotCQkgKiBudW1iZXJzLgotCQkgKi8KLQkJYXR0bm8gPSAt MTsKLQkJd2hpbGUgKChhdHRubyA9IGJtc19uZXh0X21lbWJlcihhdHRycywgYXR0bm8pKSA+PSAw KQotCQl7Ci0JCQlBdHRyTnVtYmVyCXJlYWxfYXR0bm8gPSBhdHRubyArIEZpcnN0TG93SW52YWxp ZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisJCS8qIGZpbmQgdGhlIGxvd2VzdCBtZW1iZXIgdG8gY2hl Y2sgaWYgc3lzdGVtIGNvbHVtbnMgYXJlIHByZXNlbnQgKi8KKwkJbG93ZXN0X2F0dG5vID0gYm1z X25leHRfbWVtYmVyKGF0dHJzLCAtMSk7CiAKLQkJCS8qIHN5c3RlbSBjb2x1bW5zIGNhbm5vdCBi ZSBOVUxMICovCi0JCQlpZiAocmVhbF9hdHRubyA8IDApCi0JCQkJcmV0dXJuIHRydWU7CisJCS8q IHdlIGNoZWNrZWQgZm9yIGFuIGVtcHR5IHNldCBhYm92ZSAqLworCQlBc3NlcnQobG93ZXN0X2F0 dG5vID49IDApOwogCi0JCQlmb3JjZWRudWxsYXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKGZvcmNl ZG51bGxhdHRudW1zLCByZWFsX2F0dG5vKTsKLQkJfQorCQkvKiBzeXN0ZW0gY29sdW1ucyBjYW5u b3QgYmUgTlVMTCAqLworCQlpZiAobG93ZXN0X2F0dG5vICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0 dHJpYnV0ZU51bWJlciA8IDApCisJCQlyZXR1cm4gdHJ1ZTsKKworCQkvKgorCQkgKiBPZmZzZXQg dGhlIGJpdG1hcCBtZW1iZXJzIGJ5IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIg dG8KKwkJICogZ2V0IHRoZSBhY3R1YWwgYXR0cmlidXRlIG51bWJlcnMuCisJCSAqLworCQlmb3Jj ZWRudWxsYXR0bnVtcyA9IGJtc19vZmZzZXRfbWVtYmVycyhhdHRycywKKwkJCQkJCQkJCQkJICAg Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CiAKIAkJcnRlID0gcnRfZmV0Y2go dmFybm8sIHJvb3QtPnBhcnNlLT5ydGFibGUpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXdyaXRlL3Jld3JpdGVNYW5pcC5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAu YwppbmRleCA0YmY0YWEwZDZkMS4uNjEzN2Y0MzAzZjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRl TWFuaXAuYwpAQCAtNjQsNyArNjQsNiBAQCBzdGF0aWMgYm9vbCBjb250YWluX3dpbmRvd2Z1bmNz X3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KTsKIHN0YXRpYyBib29sIGxvY2F0ZV93 aW5kb3dmdW5jX3dhbGtlcihOb2RlICpub2RlLAogCQkJCQkJCQkJIGxvY2F0ZV93aW5kb3dmdW5j X2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGJvb2wgY2hlY2tFeHBySGFzU3ViTGlua193YWxr ZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCk7Ci1zdGF0aWMgUmVsaWRzIG9mZnNldF9yZWxp ZF9zZXQoUmVsaWRzIHJlbGlkcywgaW50IG9mZnNldCk7CiBzdGF0aWMgTm9kZSAqYWRkX251bGxp bmdfcmVsaWRzX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQkJCQkJCQlhZGRfbnVsbGluZ19yZWxp ZHNfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgTm9kZSAqcmVtb3ZlX251bGxpbmdfcmVsaWRz X211dGF0b3IoTm9kZSAqbm9kZSwKQEAgLTM5Nyw4ICszOTYsOCBAQCBPZmZzZXRWYXJOb2Rlc193 YWxrZXIoTm9kZSAqbm9kZSwgT2Zmc2V0VmFyTm9kZXNfY29udGV4dCAqY29udGV4dCkKIAkJaWYg KHZhci0+dmFybGV2ZWxzdXAgPT0gY29udGV4dC0+c3VibGV2ZWxzX3VwKQogCQl7CiAJCQl2YXIt PnZhcm5vICs9IGNvbnRleHQtPm9mZnNldDsKLQkJCXZhci0+dmFybnVsbGluZ3JlbHMgPSBvZmZz ZXRfcmVsaWRfc2V0KHZhci0+dmFybnVsbGluZ3JlbHMsCi0JCQkJCQkJCQkJCQkgICBjb250ZXh0 LT5vZmZzZXQpOworCQkJdmFyLT52YXJudWxsaW5ncmVscyA9IGJtc19vZmZzZXRfbWVtYmVycyh2 YXItPnZhcm51bGxpbmdyZWxzLAorCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5vZmZzZXQpOwogCQkJ aWYgKHZhci0+dmFybm9zeW4gPiAwKQogCQkJCXZhci0+dmFybm9zeW4gKz0gY29udGV4dC0+b2Zm c2V0OwogCQl9CkBAIC00MzUsMTAgKzQzNCwxMCBAQCBPZmZzZXRWYXJOb2Rlc193YWxrZXIoTm9k ZSAqbm9kZSwgT2Zmc2V0VmFyTm9kZXNfY29udGV4dCAqY29udGV4dCkKIAogCQlpZiAocGh2LT5w aGxldmVsc3VwID09IGNvbnRleHQtPnN1YmxldmVsc191cCkKIAkJewotCQkJcGh2LT5waHJlbHMg PSBvZmZzZXRfcmVsaWRfc2V0KHBodi0+cGhyZWxzLAotCQkJCQkJCQkJCSAgIGNvbnRleHQtPm9m ZnNldCk7Ci0JCQlwaHYtPnBobnVsbGluZ3JlbHMgPSBvZmZzZXRfcmVsaWRfc2V0KHBodi0+cGhu dWxsaW5ncmVscywKLQkJCQkJCQkJCQkJCSAgY29udGV4dC0+b2Zmc2V0KTsKKwkJCXBodi0+cGhy ZWxzID0gYm1zX29mZnNldF9tZW1iZXJzKHBodi0+cGhyZWxzLAorCQkJCQkJCQkJCQkgY29udGV4 dC0+b2Zmc2V0KTsKKwkJCXBodi0+cGhudWxsaW5ncmVscyA9IGJtc19vZmZzZXRfbWVtYmVycyhw aHYtPnBobnVsbGluZ3JlbHMsCisJCQkJCQkJCQkJCQkJY29udGV4dC0+b2Zmc2V0KTsKIAkJfQog CQkvKiBmYWxsIHRocm91Z2ggdG8gZXhhbWluZSBjaGlsZHJlbiAqLwogCX0KQEAgLTUyNCwxOCAr NTIzLDYgQEAgT2Zmc2V0VmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50IG9mZnNldCwgaW50IHN1Ymxl dmVsc191cCkKIAkJT2Zmc2V0VmFyTm9kZXNfd2Fsa2VyKG5vZGUsICZjb250ZXh0KTsKIH0KIAot c3RhdGljIFJlbGlkcwotb2Zmc2V0X3JlbGlkX3NldChSZWxpZHMgcmVsaWRzLCBpbnQgb2Zmc2V0 KQotewotCVJlbGlkcwkJcmVzdWx0ID0gTlVMTDsKLQlpbnQJCQlydGluZGV4OwotCi0JcnRpbmRl eCA9IC0xOwotCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aW5k ZXgpKSA+PSAwKQotCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIHJ0aW5kZXggKyBv ZmZzZXQpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KIC8qCiAgKiBDaGFuZ2VWYXJOb2RlcyAtIGFk anVzdCBWYXIgbm9kZXMgZm9yIGEgc3BlY2lmaWMgY2hhbmdlIG9mIFJUIGluZGV4CiAgKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIGIvc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCmluZGV4IDJiODMzNTVkMjZlLi4zMzJl NzQyM2JkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0 cy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpAQCAtMTY3 Myw4ICsxNjczLDcgQEAgc3RhdGV4dF9pc19jb21wYXRpYmxlX2NsYXVzZShQbGFubmVySW5mbyAq cm9vdCwgTm9kZSAqY2xhdXNlLCBJbmRleCByZWxpZCwKIAkgKi8KIAlpZiAoIWxlYWtwcm9vZikK IAl7Ci0JCUJpdG1hcHNldCAgKmNsYXVzZV9hdHRudW1zID0gTlVMTDsKLQkJaW50CQkJYXR0bnVt ID0gLTE7CisJCUJpdG1hcHNldCAgKmNsYXVzZV9hdHRudW1zOwogCiAJCS8qCiAJCSAqIFdlIGhh dmUgdG8gY2hlY2sgcGVyLWNvbHVtbiBwcml2aWxlZ2VzLiAgKmF0dG51bXMgaGFzIHRoZSBhdHRu dW1zCkBAIC0xNjg1LDEzICsxNjg0LDggQEAgc3RhdGV4dF9pc19jb21wYXRpYmxlX2NsYXVzZShQ bGFubmVySW5mbyAqcm9vdCwgTm9kZSAqY2xhdXNlLCBJbmRleCByZWxpZCwKIAkJICogd2hpbGUg YXR0bnVtcyB3aXRoaW4gKmF0dG51bXMgYXJlbid0LiAgQ29udmVydCAqYXR0bnVtcyB0byB0aGUK IAkJICogb2Zmc2V0IHN0eWxlIHNvIHdlIGNhbiBjb21iaW5lIHRoZSByZXN1bHRzLgogCQkgKi8K LQkJd2hpbGUgKChhdHRudW0gPSBibXNfbmV4dF9tZW1iZXIoKmF0dG51bXMsIGF0dG51bSkpID49 IDApCi0JCXsKLQkJCWNsYXVzZV9hdHRudW1zID0KLQkJCQlibXNfYWRkX21lbWJlcihjbGF1c2Vf YXR0bnVtcywKLQkJCQkJCQkgICBhdHRudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRl TnVtYmVyKTsKLQkJfQotCisJCWNsYXVzZV9hdHRudW1zID0gYm1zX29mZnNldF9tZW1iZXJzKCph dHRudW1zLAorCQkJCQkJCQkJCQkwIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJl cik7CiAJCS8qIE5vdyBtZXJnZSBhdHRudW1zIGZyb20gKmV4cHJzIGludG8gY2xhdXNlX2F0dG51 bXMgKi8KIAkJaWYgKCpleHBycyAhPSBOSUwpCiAJCQlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKSAq ZXhwcnMsIHJlbGlkLCAmY2xhdXNlX2F0dG51bXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvYml0bWFwc2V0LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9iaXRtYXBzZXQuaAppbmRleCAw NjdlYzcyZTk5Yi4uOTk3ZjhhMWNkOTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2Jp dG1hcHNldC5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2JpdG1hcHNldC5oCkBAIC0xMDAsNiAr MTAwLDcgQEAgZXh0ZXJuIHZvaWQgYm1zX2ZyZWUoQml0bWFwc2V0ICphKTsKIGV4dGVybiBCaXRt YXBzZXQgKmJtc191bmlvbihjb25zdCBCaXRtYXBzZXQgKmEsIGNvbnN0IEJpdG1hcHNldCAqYik7 CiBleHRlcm4gQml0bWFwc2V0ICpibXNfaW50ZXJzZWN0KGNvbnN0IEJpdG1hcHNldCAqYSwgY29u c3QgQml0bWFwc2V0ICpiKTsKIGV4dGVybiBCaXRtYXBzZXQgKmJtc19kaWZmZXJlbmNlKGNvbnN0 IEJpdG1hcHNldCAqYSwgY29uc3QgQml0bWFwc2V0ICpiKTsKK2V4dGVybiBCaXRtYXBzZXQgKmJt c19vZmZzZXRfbWVtYmVycyhjb25zdCBCaXRtYXBzZXQgKmEsIGludCBvZmZzZXQpOwogZXh0ZXJu IGJvb2wgYm1zX2lzX3N1YnNldChjb25zdCBCaXRtYXBzZXQgKmEsIGNvbnN0IEJpdG1hcHNldCAq Yik7CiBleHRlcm4gQk1TX0NvbXBhcmlzb24gYm1zX3N1YnNldF9jb21wYXJlKGNvbnN0IEJpdG1h cHNldCAqYSwgY29uc3QgQml0bWFwc2V0ICpiKTsKIGV4dGVybiBib29sIGJtc19pc19tZW1iZXIo aW50IHgsIGNvbnN0IEJpdG1hcHNldCAqYSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0CmluZGV4IDBi NzJiOTFjZDFmLi4wNTc0YjA0Nzg0NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5vdXQKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5vdXQKQEAgLTUyOCw2 ICs1MjgsODAgQEAgU0VMRUNUIHRlc3RfYm1zX2RpZmZlcmVuY2UoTlVMTCwgTlVMTCkgQVMgcmVz dWx0OwogIDw+CiAoMSByb3cpCiAKKy0tIGJtc19vZmZzZXRfbWVtYmVycygpCistLSBFbnN1cmUg b3ZlcmZsb3cgZGV0ZWN0aW9uIHdvcmtzCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMo JyhiIDEpJywgMjE0NzQ4MzY0Nyk7CitFUlJPUjogIGJpdG1hcHNldCBvdmVyZmxvdworU0VMRUNU IHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAyKScsIDIxNDc0ODM2NDYpOworRVJST1I6ICBi aXRtYXBzZXQgb3ZlcmZsb3cKKy0tIEVuc3VyZSBtZW1iZXJzIGFyZSBhbGwgb2Zmc2V0IGFzIGV4 cGVjdGVkCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDEgMyA1KScsIDEpOwor IHRlc3RfYm1zX29mZnNldF9tZW1iZXJzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChi IDIgNCA2KQorKDEgcm93KQorCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDEg MyA1KScsIDApOworIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIChiIDEgMyA1KQorKDEgcm93KQorCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21l bWJlcnMoJyhiIDEgMyA1KScsIC0xKTsKKyB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoYiAwIDIgNCkKKygxIHJvdykKKworU0VMRUNUIHRlc3Rf Ym1zX29mZnNldF9tZW1iZXJzKCcoYiAzMSAzMiA2MyA2NCknLCAxKTsKKyB0ZXN0X2Jtc19vZmZz ZXRfbWVtYmVycyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoYiAzMiAzMyA2NCA2NSkK KygxIHJvdykKKworU0VMRUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAzMSAzMiA2MyA2 NCknLCAwKTsKKyB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAoYiAzMSAzMiA2MyA2NCkKKygxIHJvdykKKworU0VMRUNUIHRlc3RfYm1zX29mZnNl dF9tZW1iZXJzKCcoYiAzMSAzMiA2MyA2NCknLCAtMSk7CisgdGVzdF9ibXNfb2Zmc2V0X21lbWJl cnMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKGIgMzAgMzEgNjIgNjMpCisoMSByb3cp CisKK1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMSAyIDMpJywgNjQpOworIHRl c3RfYm1zX29mZnNldF9tZW1iZXJzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChiIDY1 IDY2IDY3KQorKDEgcm93KQorCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDY1 IDY2IDY3KScsIC02NCk7CisgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKGIgMSAyIDMpCisoMSByb3cpCisKKy0tIEVuc3VyZSBtZW1iZXJzIGdv aW5nIGJlbG93IHplcm8gc2lsZW50bHkgZmFsbCBvZmYgdGhlIHNldAorU0VMRUNUIHRlc3RfYm1z X29mZnNldF9tZW1iZXJzKCcoYiAwIDEgMiAxMCknLCAtMik7CisgdGVzdF9ibXNfb2Zmc2V0X21l bWJlcnMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKGIgMCA4KQorKDEgcm93KQorCitT RUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDEgMiAzKScsIC0xMCk7CisgdGVzdF9i bXNfb2Zmc2V0X21lbWJlcnMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPD4KKygxIHJv dykKKworU0VMRUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAwKScsIC0yMTQ3NDgzNjQ4 KTsKKyB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyA8PgorKDEgcm93KQorCiAtLSBibXNfaXNfbWVtYmVyKCkKIFNFTEVDVCB0ZXN0X2Jtc19pc19t ZW1iZXIoJyhiKScsIC01KTsgLS0gZXJyb3IKIEVSUk9SOiAgbmVnYXRpdmUgYml0bWFwc2V0IG1l bWJlciBub3QgYWxsb3dlZApAQCAtMTU3NSw0ICsxNjQ5LDExIEBAIFNFTEVDVCB0ZXN0X3JhbmRv bV9vcGVyYXRpb25zKE5VTEwsIDEwMDAwLCA4MTkyMCwgMCkgPiAwIEFTIHJlc3VsdDsKICB0CiAo MSByb3cpCiAKKy0tIHBlcmZvcm0gc29tZSByYW5kb20gdGVzdHMgb24gYm1zX29mZnNldF9tZW1i ZXJzKCkKK1NFTEVDVCB0ZXN0X3JhbmRvbV9vZmZzZXRfb3BlcmF0aW9ucyhOVUxMLCAxMDAwMCwg MTAyNCwgMCkgQVMgcmVzdWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgIDEwMDAwCisoMSByb3cp CisKIERST1AgRVhURU5TSU9OIHRlc3RfYml0bWFwc2V0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsCmluZGV4IGM1MzIz MmUwYWRhLi4xZDI5MTZkY2FhNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9iaXRtYXBzZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNxbApAQCAtMTQ1LDYgKzE0NSwyNiBAQCBT RUxFQ1QgdGVzdF9ibXNfZGlmZmVyZW5jZSgnKGIgNSknLCBOVUxMKSBBUyByZXN1bHQ7CiBTRUxF Q1QgdGVzdF9ibXNfZGlmZmVyZW5jZShOVUxMLCAnKGIgNSknKSBBUyByZXN1bHQ7CiBTRUxFQ1Qg dGVzdF9ibXNfZGlmZmVyZW5jZShOVUxMLCBOVUxMKSBBUyByZXN1bHQ7CiAKKy0tIGJtc19vZmZz ZXRfbWVtYmVycygpCistLSBFbnN1cmUgb3ZlcmZsb3cgZGV0ZWN0aW9uIHdvcmtzCitTRUxFQ1Qg dGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDEpJywgMjE0NzQ4MzY0Nyk7CitTRUxFQ1QgdGVz dF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDIpJywgMjE0NzQ4MzY0Nik7CisKKy0tIEVuc3VyZSBt ZW1iZXJzIGFyZSBhbGwgb2Zmc2V0IGFzIGV4cGVjdGVkCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0 X21lbWJlcnMoJyhiIDEgMyA1KScsIDEpOworU0VMRUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJz KCcoYiAxIDMgNSknLCAwKTsKK1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMSAz IDUpJywgLTEpOworU0VMRUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAzMSAzMiA2MyA2 NCknLCAxKTsKK1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMzEgMzIgNjMgNjQp JywgMCk7CitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDMxIDMyIDYzIDY0KScs IC0xKTsKK1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMSAyIDMpJywgNjQpOwor U0VMRUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiA2NSA2NiA2NyknLCAtNjQpOworCist LSBFbnN1cmUgbWVtYmVycyBnb2luZyBiZWxvdyB6ZXJvIHNpbGVudGx5IGZhbGwgb2ZmIHRoZSBz ZXQKK1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMCAxIDIgMTApJywgLTIpOwor U0VMRUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAxIDIgMyknLCAtMTApOworU0VMRUNU IHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAwKScsIC0yMTQ3NDgzNjQ4KTsKKwogLS0gYm1z X2lzX21lbWJlcigpCiBTRUxFQ1QgdGVzdF9ibXNfaXNfbWVtYmVyKCcoYiknLCAtNSk7IC0tIGVy cm9yCiBTRUxFQ1QgdGVzdF9ibXNfaXNfbWVtYmVyKCcoYiAxIDMgNSknLCAxKSBBUyByZXN1bHQ7 CkBAIC00MDMsNCArNDIzLDcgQEAgU0VMRUNUIHRlc3RfYm1zX25vbmVtcHR5X2RpZmZlcmVuY2Uo JyhiIDEgMiknLCAnKGIgNTAgMTAwKScpIEFTIHJlc3VsdDsKIC0tIHJhbmRvbSBvcGVyYXRpb25z CiBTRUxFQ1QgdGVzdF9yYW5kb21fb3BlcmF0aW9ucyhOVUxMLCAxMDAwMCwgODE5MjAsIDApID4g MCBBUyByZXN1bHQ7CiAKKy0tIHBlcmZvcm0gc29tZSByYW5kb20gdGVzdHMgb24gYm1zX29mZnNl dF9tZW1iZXJzKCkKK1NFTEVDVCB0ZXN0X3JhbmRvbV9vZmZzZXRfb3BlcmF0aW9ucyhOVUxMLCAx MDAwMCwgMTAyNCwgMCkgQVMgcmVzdWx0OworCiBEUk9QIEVYVEVOU0lPTiB0ZXN0X2JpdG1hcHNl dDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRt YXBzZXQtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0 bWFwc2V0LS0xLjAuc3FsCmluZGV4IGU3YjI2M2U1MWY1Li4xMDJmZGQ2OTQ3OCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNx bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LS0x LjAuc3FsCkBAIC01Niw2ICs1NiwxMCBAQCBDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfZGlmZmVy ZW5jZSh0ZXh0LCB0ZXh0KQogUkVUVVJOUyB0ZXh0CiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5H VUFHRSBDOwogCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnModGV4dCwg aW50ZWdlcikKK1JFVFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsK KwogQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2lzX2VtcHR5KHRleHQpCiBSRVRVUk5TIGJvb2xl YW4KIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CkBAIC0xMzcsNCArMTQxLDggQEAg Q1JFQVRFIEZVTkNUSU9OIHRlc3RfcmFuZG9tX29wZXJhdGlvbnMoYmlnaW50LCBpbnRlZ2VyLCBp bnRlZ2VyLCBpbnRlZ2VyKQogUkVUVVJOUyBpbnRlZ2VyCiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBM QU5HVUFHRSBDOwogCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9yYW5kb21fb2Zmc2V0X29wZXJhdGlv bnMoYmlnaW50LCBpbnRlZ2VyLCBpbnRlZ2VyLCBpbnRlZ2VyKQorUkVUVVJOUyBpbnRlZ2VyCitB UyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCiBDT01NRU5UIE9OIEVYVEVOU0lPTiB0 ZXN0X2JpdG1hcHNldCBJUyAnVGVzdCBjb2RlIGZvciBCaXRtYXBzZXQnOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCmluZGV4IDNhMTg1MzY5 NjUxLi45NTA3OTVhZTYxMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1h cHNldC90ZXN0X2JpdG1hcHNldC5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvdGVzdF9iaXRtYXBzZXQuYwpAQCAtNDQsNiArNDQsNyBAQCBQR19GVU5DVElPTl9JTkZPX1Yx KHRlc3RfYm1zX3N1YnNldF9jb21wYXJlKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNf dW5pb24pOwogUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19pbnRlcnNlY3QpOwogUEdfRlVO Q1RJT05fSU5GT19WMSh0ZXN0X2Jtc19kaWZmZXJlbmNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo dGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMpOwogUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19p c19lbXB0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX21lbWJlcnNoaXApOwogUEdf RlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKTsKQEAgLTY2LDYgKzY3 LDcgQEAgUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2JpdG1hcF9tYXRjaCk7CiAKIC8qIFRlc3Qg dXRpbGl0eSBmdW5jdGlvbnMgKi8KIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9yYW5kb21fb3Bl cmF0aW9ucyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfcmFuZG9tX29mZnNldF9vcGVyYXRp b25zKTsKIAogLyogQ29udmVuaWVudCBtYWNyb3MgdG8gdGVzdCByZXN1bHRzICovCiAjZGVmaW5l IEVYUEVDVF9UUlVFKGV4cHIpCVwKQEAgLTI5Niw2ICsyOTgsMTcgQEAgdGVzdF9ibXNfZGlmZmVy ZW5jZShQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9CSVRNQVBTRVRfQVNfVEVYVChyZXN1 bHRfYm1zKTsKIH0KIAorRGF0dW0KK3Rlc3RfYm1zX29mZnNldF9tZW1iZXJzKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlp bnQJCQlvZmZzZXQgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKKwlibXMgPSBibXNfb2Zmc2V0X21l bWJlcnMoYm1zLCBvZmZzZXQpOworCisJUEdfUkVUVVJOX0JJVE1BUFNFVF9BU19URVhUKGJtcyk7 Cit9CisKIERhdHVtCiB0ZXN0X2Jtc19jb21wYXJlKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CkBAIC01 ODEsNyArNTk0LDcgQEAgdGVzdF9iaXRtYXBfbWF0Y2goUEdfRlVOQ1RJT05fQVJHUykKIH0KIAog LyoKLSAqIENvbnRyYXJ5IHRvIGFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zIHdoaWNoIGFyZSBvbmUt b25lIG1hcHBpbmdzIHdpdGggdGhlCisgKiBDb250cmFyeSB0byBtb3N0IG9mIHRoZSBvdGhlciBm dW5jdGlvbnMgd2hpY2ggYXJlIG9uZS1vbmUgbWFwcGluZ3Mgd2l0aCB0aGUKICAqIGVxdWl2YWxl bnQgQyBmdW5jdGlvbnMsIHRoaXMgc3RyZXNzZXMgQml0bWFwc2V0cyBpbiBhIHJhbmRvbSBmYXNo aW9uIGZvcgogICogdmFyaW91cyBvcGVyYXRpb25zLgogICoKQEAgLTc2NiwzICs3NzksODkgQEAg dGVzdF9yYW5kb21fb3BlcmF0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0lO VDMyKHRvdGFsX29wcyk7CiB9CisKKy8qCisgKiBSYW5kb20gdGVzdGluZyBmb3IgYm1zX29mZnNl dF9tZW1iZXJzKCkuICBHZW5lcmF0ZXMgYSByYW5kb20gc2V0IGFuZCB0aGVuCisgKiBwaWNrcyBh IG51bWJlciB0byBvZmZzZXQgdGhlIG1lbWJlcnMgYnkuICBXZSB0aGVuIGNyZWF0ZSBhbm90aGVy IHNldCwgd2hpY2gKKyAqIGlzIGJ1aWx0IGJ5IGxvb3Bpbmcgb3ZlciB0aGUgbWVtYmVycyBvZiB0 aGUgcmFuZG9tIHNldCBhbmQgcGVyZm9ybWluZworICogYm1zX2FkZF9tZW1iZXIgYW5kIGFkZGlu ZyBvbiB0aGUgb2Zmc2V0IHRvIGNyZWF0ZSBhIGtub3duIGdvb2Qgc2V0IHRvCisgKiBjb21wYXJl IHRoZSByZXN1bHQgb2YgYm1zX29mZnNldF9tZW1iZXJzKCkgdG8uCisgKgorICogQXJndW1lbnRz OgorICogIGFyZzE6IG9wdGlvbmFsIHJhbmRvbSBzZWVkLiAgTlVMTCBtZWFucyB1c2UgYSByYW5k b20gc2VlZC4KKyAqICBhcmcyOiB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybS4K KyAqICBhcmczOiB0aGUgbWF4aW11bSBiaXRtYXBzZXQgbWVtYmVyIG51bWJlciB0byB1c2UgaW4g dGhlIHJhbmRvbSBzZXQuCisgKiAgYXJnNDogdGhlIG1pbmltdW0gYml0bWFwc2V0IG1lbWJlciBu dW1iZXIgdG8gdXNlIGluIHRoZSByYW5kb20gc2V0LgorICovCitEYXR1bQordGVzdF9yYW5kb21f b2Zmc2V0X29wZXJhdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlwZ19wcm5nX3N0YXRlIHN0 YXRlOworCXVpbnQ2NAkJc2VlZDsKKwlpbnQJCQludW1fb3BzOworCWludAkJCW1heF9yYW5nZTsK KwlpbnQJCQltaW5fdmFsdWU7CisJaW50CQkJbWVtYmVyOworCisJaWYgKFBHX0FSR0lTTlVMTCgw KSkKKwkJc2VlZCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwllbHNlCisJCXNlZWQgPSBQR19H RVRBUkdfSU5UNjQoMCk7CisKKwludW1fb3BzID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCW1heF9y YW5nZSA9IFBHX0dFVEFSR19JTlQzMigyKTsKKwltaW5fdmFsdWUgPSBQR19HRVRBUkdfSU5UMzIo Myk7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDEpIHx8IG51bV9vcHMgPD0gMCkKKwkJZWxvZyhFUlJP UiwgImludmFsaWQgbnVtYmVyIG9mIG9wZXJhdGlvbnMiKTsKKwlpZiAoUEdfQVJHSVNOVUxMKDIp IHx8IG1heF9yYW5nZSA8PSAwKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBtYXhpbXVtIHJhbmdl Iik7CisJaWYgKFBHX0FSR0lTTlVMTCgzKSB8fCBtaW5fdmFsdWUgPCAwKQorCQllbG9nKEVSUk9S LCAiaW52YWxpZCBtaW5pbXVtIHZhbHVlIik7CisKKwlwZ19wcm5nX3NlZWQoJnN0YXRlLCBzZWVk KTsKKworCWZvciAoaW50IG9wID0gMDsgb3AgPCBudW1fb3BzOyBvcCsrKQorCXsKKwkJQml0bWFw c2V0ICAqcmFuZG9tX2JtcyA9IE5VTEw7CisJCUJpdG1hcHNldCAgKm9mZnNldF9ibXMxOworCQlC aXRtYXBzZXQgICpvZmZzZXRfYm1zMiA9IE5VTEw7CisJCWludAkJCW9mZnNldDsKKwkJaW50CQkJ bm1lbWJlcnM7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBGaWd1cmUgb3V0 IGEgcmFuZG9tIG9mZnNldCBhbmQgaG93IG1hbnkgbWVtYmVycyB0byBhZGQgKi8KKwkJb2Zmc2V0 ID0gKHBnX3BybmdfdWludDMyKCZzdGF0ZSkgJSBtYXhfcmFuZ2UpIC0gKHBnX3BybmdfdWludDMy KCZzdGF0ZSkgJSBtYXhfcmFuZ2UpOworCQlubWVtYmVycyA9IHBnX3BybmdfdWludDMyKCZzdGF0 ZSkgJSBtYXhfcmFuZ2UgKyBtaW5fdmFsdWU7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBubWVt YmVyczsgaSsrKQorCQl7CisJCQltZW1iZXIgPSBwZ19wcm5nX3VpbnQzMigmc3RhdGUpICUgbWF4 X3JhbmdlICsgbWluX3ZhbHVlOworCQkJcmFuZG9tX2JtcyA9IGJtc19hZGRfbWVtYmVyKHJhbmRv bV9ibXMsIG1lbWJlcik7CisJCX0KKworCQkvKiBjcmVhdGUgYSBrbm93bi1nb29kIHNldCB0aGUg b2xkIGZhc2hpb25lZCB3YXkgKi8KKwkJb2Zmc2V0X2JtczIgPSBOVUxMOworCQltZW1iZXIgPSAt MTsKKwkJd2hpbGUgKChtZW1iZXIgPSBibXNfbmV4dF9tZW1iZXIocmFuZG9tX2JtcywgbWVtYmVy KSkgPj0gMCkKKwkJeworCQkJaWYgKG1lbWJlciArIG9mZnNldCA+PSAwKQorCQkJCW9mZnNldF9i bXMyID0gYm1zX2FkZF9tZW1iZXIob2Zmc2V0X2JtczIsIG1lbWJlciArIG9mZnNldCk7CisJCX0K KworCQkvKiBkbyB0aGUgb2Zmc2V0dGluZyAqLworCQlvZmZzZXRfYm1zMSA9IGJtc19vZmZzZXRf bWVtYmVycyhyYW5kb21fYm1zLCBvZmZzZXQpOworCisJCS8qIGNoZWNrIGFnYWluc3QgdGhlIGtu b3duLWdvb2Qgc2V0ICovCisJCWlmICghYm1zX2VxdWFsKG9mZnNldF9ibXMxLCBvZmZzZXRfYm1z MikpCisJCQllbG9nKEVSUk9SLCAiYm1zX29mZnNldF9tZW1iZXJzIGZhaWxlZCB3aXRoIG9mZnNl dCAlZCBzZWVkICIgSU5UNjRfRk9STUFULCBvZmZzZXQsIHNlZWQpOworCisJCS8qIENsZWFudXAg YmVmb3JlIHRoZSBuZXh0IGxvb3AgKi8KKwkJYm1zX2ZyZWUocmFuZG9tX2Jtcyk7CisJCWJtc19m cmVlKG9mZnNldF9ibXMxKTsKKwkJYm1zX2ZyZWUob2Zmc2V0X2JtczIpOworCX0KKworCVBHX1JF VFVSTl9JTlQzMihudW1fb3BzKTsKK30KLS0gCjIuNTEuMAoK --00000000000070f190064fd8e2a5--