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 1wCnRi-002JmD-0x for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Apr 2026 23:45:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCnRf-00DWK0-1c for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Apr 2026 23:45:28 +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 1wCnRf-00DWJs-0S for pgsql-hackers@lists.postgresql.org; Tue, 14 Apr 2026 23:45:28 +0000 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCnRd-000000017Cw-2lqq for pgsql-hackers@lists.postgresql.org; Tue, 14 Apr 2026 23:45:27 +0000 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-43cfd96354aso3677723f8f.1 for ; Tue, 14 Apr 2026 16:45:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776210324; cv=none; d=google.com; s=arc-20240605; b=llH4lZ9zacVa9XB7Ek8P5TXW78I8Anzut4kEwJuK797qzg5GMkX5KO8/OekH/UQcSO ERd7qogTtZb5y49KgZ6dBPSxuSvxz6PEZzn6exoGZ+U10wWRz826iHjjxXtaQNCmm/D2 +fToQ6M8U6h9VbT1Uid+uowGJrDTtFXyKXJzDRfG8GKDhTd5iadTG+1bhtSvjk+C523T pTK2rvW0HzaQkZdHqvxZ03RPDoxcjNybAdFuwxTrDLD3bPzkYBN2kxcD4AYobILVU6rG kAGj7zqZlDHBBvR1OrKThss8wZjYI3HIFCIFI1ZLd6WCNA0EsDQlS6SoSRGfxyOUlwH3 pD3Q== 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=aVZDMcHWLLyM7evF+eGa1c3POkDUEPOfjG7IXNRKBVM=; fh=LA2qZ/6HKYFgZLyjr3PAPoC/mq1PVnhF0UcOyu06kOQ=; b=gunP+5HCctkjBYHWhD1LBtzO80Tm5c+v6QhZT/xJFx7ax2ccAUk0FmoK/qCJG3Yg1x hsfaXXVSrMniUiXRi5AQKZgLGhs4QyCQCJfkIRLBALFgzNITpCWQpo0V2Satwf8k6+bE /gmfZT2fNzMHrZgf1BRtcdTDCI2Vaz3JgdUFCONyGMm5u/ll+W1M+0uSblH8RNeUu95m BeFWibKDMjRnmRnadBhEKr0vDe9a7Y8Rhn7wkCuYzGD5w1o92jXvF9WF5zhXy6bMn5uB oE71dj5tjQR6AHtkUXa61pB7C4iab8Nrju3mkTpB7xi8EAx6TYijkrXXkYxGMF/Evikq Mviw==; 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=1776210324; x=1776815124; 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=aVZDMcHWLLyM7evF+eGa1c3POkDUEPOfjG7IXNRKBVM=; b=OiOUdDn9ZV0f3tiYbUImXOZifSkzFEt8zOj0yZ9AvtlxBdxwNZQDKgfuNh/Nng4Ov4 mb3C5tz41zhfYsVWC7N9awN4Gab4NbGcT/5xUdygtSBwwTVgzmbxasZR2wWbidMDrP6s bgVVVeeGGqJ324ACSgEvexVJ+u3mOw3pklxXQDxufYU8Zt4v9IQrm8wHsTB+PDKT0AV3 J95wMOF+62v8LoxdR8eNAlrBTzFxt7Wy5mPCx34ViYROPFAZ74QJZOb/libUJuDkbPuO vR19v3VjQFiIbk0+nYAs878g34p3rqhcns+vDAJPnMZkclAcBdFbUKw9WNhDyDeWNpzE vybA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776210324; x=1776815124; 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=aVZDMcHWLLyM7evF+eGa1c3POkDUEPOfjG7IXNRKBVM=; b=QYTM/ygND24l0p0tOLJshNOKAikp5rsoqZ6Xgwx4DXImxgJ5p5gdkzQbrrAFtL+WwO EQ7js5/9i/BghemcDe6ToSPyalS/ySvwjWlDXIrxFJxoBAETdPRToMSwfMXMTsvRUTDS j6i3zx43Pf31h0d+wJUoSMw60iN5GYgwGkS+XXP/+8o2pakvp/YvTCYeKEcXTmt8iP5C RcTOg3VH43Axbyz5/67UmajFaqWZli1SX/JSiSPdyioYKNILtIxXrGgH7hy5zXy3b/7H arzDrNCxuEt/qlAbGBTBkVMKEIga5eX6gAiEUAsA26tlz++Abl1bBwsN7IzckpdkHaLR n+UQ== X-Gm-Message-State: AOJu0YwPvaa3k4734yiS7q3jk2JzcSEelJXNOoSYUGPHv9r+40dCI3yD d7ecthaGkzrIYknAt6jbWvEWbGJu+i2FrSmDqbzsn6ZpyrvuuVJQic3xhIkpa5CFJKVoLKBA877 5I55BIyZWZwG8SG7PIFp9GMB31IwN3Ms= X-Gm-Gg: AeBDievRZ26M7gzhnQVb8600BeOWJ3MaNdtx4u5XtZGXmdm4vb9gqJe1XJh2m1sGFLU odenjDZQdPlZ1jtbN3gyg1wo79tFrXh6B2EqXn2kwDnGHyOv5CEZTLeCCcyoHQ+Gc2oZbJEcpyB fvcq422uTNnfDKGLme3Mtd17S2Pa32iqvH1B34cxHQkv3aLkeJabiH0DtYmay5JRHSX+qEHYF8c os6O+d6YL3hFuDFWukWe81qP42ePwRlof1vrQbg80MoCoptu7ZLNemiSNIFj3fe8mwliVjrBZaW vkrXKzmYRM4jBmHjKY7eNtI1fuRMokVLFjZn7xaUjlczT44ihCBCiTXBqLHEv4Cl9AQmuEnEWCz VVXFQ6fZ/ X-Received: by 2002:a05:6000:26cf:b0:43b:9903:2ba3 with SMTP id ffacd0b85a97d-43d642c083cmr30060330f8f.33.1776210324171; Tue, 14 Apr 2026 16:45:24 -0700 (PDT) MIME-Version: 1.0 References: <278B9FE3-F349-4494-99C5-483105C1C999@gmail.com> In-Reply-To: <278B9FE3-F349-4494-99C5-483105C1C999@gmail.com> From: David Rowley Date: Wed, 15 Apr 2026 11:45:12 +1200 X-Gm-Features: AQROBzAeWT0o2m2yPElH05MMcRB7Xnj3Cf1QX384HcuY0ncHdwoKEeI6R6zU0DI Message-ID: Subject: Re: Add bms_offset_members() function for bitshifting Bitmapsets To: Chao Li Cc: PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000006b486e064f743143" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006b486e064f743143 Content-Type: text/plain; charset="UTF-8" Thanks for looking. On Tue, 14 Apr 2026 at 20:46, Chao Li wrote: > + if (((uint64) new_nwords - 1) * BITS_PER_BITMAPWORD + high_bit + offset_bits > PG_INT32_MAX) > + elog(ERROR, "bitmapset overflow"); > This overflow check seems wrong. Because when high_bit + offset_bits > BITS_PER_BITMAPWORD, new_nwords has been increased by 1, so there high_bit + offset_bits are double counted. Your idea of checking the old highest member plus the offset seems a more robust method, so I've adjusted the patch to use that. David --0000000000006b486e064f743143 Content-Type: application/octet-stream; name="v2-0001-Introduce-bms_offset_members-function.patch" Content-Disposition: attachment; filename="v2-0001-Introduce-bms_offset_members-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnz9pckv0 RnJvbSBjNmRjMWVmMDBkNTk3ZDEzZTc5ZGY2MGVhYjMyMGRjMzVmZWU3MzM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyMCBNYXIgMjAyNiAxMTowMToxMyArMTMwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIElu dHJvZHVjZSBibXNfb2Zmc2V0X21lbWJlcnMoKSBmdW5jdGlvbgoKRWZmZWN0aXZlbHkgYSBmdW5j dGlvbiB0byBiaXRzaGlmdCBtZW1iZXJzIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mCmJpdHMu ICBXZSBoYXZlIHZhcmlvdXMgZnJhZ21lbnRzIG9mIGNvZGUgZG9pbmcgdGhpcyBtYW51YWxseSB3 aXRoIGEKYm1zX25leHRfbWVtYmVyKCkgbG9vcC4gIFdlIGNhbiBkbyB0aGlzIG1vcmUgZWZmaWNp ZW50bHkgd2l0aApiaXRzaGlmdGluZy4KLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQu YyAgICAgICAgICAgICAgICAgfCAxNjAgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jICAgICB8ICAyOCArLS0KIHNyYy9iYWNrZW5kL3Jl d3JpdGUvcmV3cml0ZU1hbmlwLmMgICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9leHRlbmRlZF9zdGF0cy5jICAgICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9ub2Rl cy9iaXRtYXBzZXQuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL2V4cGVjdGVkL3Rlc3Rf Yml0bWFwc2V0Lm91dCAgICAgICAgICAgICAgIHwgIDM4ICsrKysrCiAuLi4vdGVzdF9iaXRtYXBz ZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNxbCAgICAgfCAgMTMgKysKIC4uLi90ZXN0X2JpdG1hcHNl dC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbCAgICB8ICAgOCArCiAuLi4vbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC90ZXN0X2JpdG1hcHNldC5jICAgfCAgODcgKysrKysrKysrLQogMTAgZmlsZXMgY2hh bmdlZCwgMzI2IGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvYml0bWFwc2V0 LmMKaW5kZXggZjA1M2Q4YzRkNjQuLjQ1OGY4ZjY5YzUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9ub2Rlcy9iaXRtYXBzZXQuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYwpA QCAtOTkxLDYgKzk5MSwxNjYgQEAgYm1zX3JlcGxhY2VfbWVtYmVycyhCaXRtYXBzZXQgKmEsIGNv bnN0IEJpdG1hcHNldCAqYikKIAlyZXR1cm4gYTsKIH0KIAorLyoKKyAqIGJtc19vZmZzZXRfbWVt YmVycworICoJCUFkanVzdCBhbGwgZXhpc3RpbmcgbWVtYmVycyBvZiB0aGUgZ2l2ZW4gc2V0IGJ5 IGFkZGluZyAnb2Zmc2V0JyB0bworICoJCWVhY2ggbWVtYmVyLiAgVGhlIG9mZnNldCB2YWx1ZSBt YXkgYmUgbmVnYXRpdmUgb3IgcG9zaXRpdmUuICBNZW1iZXJzCisgKgkJd2hpY2ggd291bGQgYmVj b21lIG5lZ2F0aXZlIGFzIGEgcmVzdWx0IG9mIGEgbmVnYXRpdmUgb2Zmc2V0IHdpbGwgYmUKKyAq CQlyZW1vdmVkIGZyb20gdGhlIHNldCwgd2hlcmVhcyB0b28gbGFyZ2UgYW4gb2Zmc2V0IHdoaWNo IHdvdWxkIHJlc3VsdAorICoJCWluIGEgbWVtYmVyIGdvaW5nID4gSU5UX01BWCB3aWxsIHJlc3Vs dCBpbiBhbiBFUlJPUi4KKyAqCisgKiBUaGUgc2V0IGlzIG1vZGlmaWVkIGluLXBsYWNlIHdoZW4g cG9zc2libGUsIGJ1dCBjYWxsZXJzIG11c3QgYXNzdW1lIHRoZSBzZXQKKyAqIGNhbiBiZSByZWFs bG9jYXRlZCBhbmQgdXNlIHRoZSByZXR1cm5lZCBzZXQuCisgKi8KK0JpdG1hcHNldCAqCitibXNf b2Zmc2V0X21lbWJlcnMoQml0bWFwc2V0ICphLCBpbnQgb2Zmc2V0KQoreworCWludAkJCW9mZnNl dF93b3JkczsKKwlpbnQJCQlvZmZzZXRfYml0czsKKwlpbnQJCQluZXdfbndvcmRzOworCWludAkJ CW9sZF9ud29yZHM7CisJaW50MzIJCWhpZ2hfYml0OworCisJQXNzZXJ0KGJtc19pc192YWxpZF9z ZXQoYSkpOworCisJLyogRG9uJ3QgZ28gdG8gYW55IGVmZm9ydCBpZiB0aGVyZSdzIG5vdGhpbmcg dG8gZG8gKi8KKwlpZiAoYSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW9sZF9ud29yZHMg PSBhLT5ud29yZHM7CisJb2Zmc2V0X3dvcmRzID0gV09SRE5VTShvZmZzZXQpOworCW9mZnNldF9i aXRzID0gQklUTlVNKG9mZnNldCk7CisJbmV3X253b3JkcyA9IGEtPm53b3JkcyArIG9mZnNldF93 b3JkczsKKwloaWdoX2JpdCA9IGJtd19sZWZ0bW9zdF9vbmVfcG9zKGEtPndvcmRzW2EtPm53b3Jk cyAtIDFdKTsKKworCS8qIEFkanVzdCB0aGUgbnVtYmVyIG9mIHdvcmRzIGluIHRoZSBuZXcgc2V0 IHRvIGhvdyBtYW55IHdlJ2xsIG5lZWQgKi8KKwluZXdfbndvcmRzICs9IChvZmZzZXRfYml0cyAr IGhpZ2hfYml0KSA+PSBCSVRTX1BFUl9CSVRNQVBXT1JEOworCW5ld19ud29yZHMgLT0gKG9mZnNl dF9iaXRzICsgaGlnaF9iaXQpIDwgMDsKKworCS8qIElmIHdlIGRvbid0IG5lZWQgYW55IHdvcmRz IHRoZW4gaXQgbXVzdCBiZSBhbiBlbXB0eSBzZXQgKi8KKwlpZiAobmV3X253b3JkcyA8PSAwKQor CXsKKwkJcGZyZWUoYSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIEhhbmRsZSBhIHBvc2l0 aXZlIG9mZnNldCAoYml0c2hpZnQgbGVmdCkgKi8KKwlpZiAob2Zmc2V0ID4gMCkKKwl7CisJCWlu dAkJCW9sZF9oaWdoZXN0ID0gKG9sZF9ud29yZHMgLSAxKSAqIEJJVFNfUEVSX0JJVE1BUFdPUkQg KyBoaWdoX2JpdDsKKworCQkvKgorCQkgKiBBbiB1bmxpa2VseSBzY2VuYXJpbywgYnV0IGNoZWNr IHdlJ3JlIG5vdCBnb2luZyB0byBjcmVhdGUgYSBtZW1iZXIKKwkJICogZ3JlYXRlciB0aGFuIFBH X0lOVDMyX01BWC4KKwkJICovCisJCWlmICgodWludDY0KSBvbGRfaGlnaGVzdCArIG9mZnNldCA+ IFBHX0lOVDMyX01BWCkKKwkJCWVsb2coRVJST1IsICJiaXRtYXBzZXQgb3ZlcmZsb3ciKTsKKwor CQkvKgorCQkgKiBSZWFsbG9jYXRlIHRoZSBtZW1vcnkgZm9yIHRoZSBzZXQgaWYgd2UgbmVlZCBt b3JlIHdvcmRzLCBvdGhlcndpc2UKKwkJICogd2UgcmV1c2UgdGhlIGV4aXN0aW5nIHNldC4KKwkJ ICovCisJCWlmIChuZXdfbndvcmRzID4gYS0+bndvcmRzKQorCQkJYSA9IChCaXRtYXBzZXQgKikg cmVwYWxsb2MwKGEsIEJJVE1BUFNFVF9TSVpFKG9sZF9ud29yZHMpLAorCQkJCQkJCQkJCUJJVE1B UFNFVF9TSVpFKG5ld19ud29yZHMpKTsKKworCQlhLT5ud29yZHMgPSBuZXdfbndvcmRzOworCisJ CS8qIFNoaWZ0IHdvcmRzIHVwIHRvIGhpZ2hlciBhcnJheSBlbGVtZW50cywgaWYgbmVlZGVkICov CisJCWlmIChvZmZzZXRfd29yZHMgPiAwKQorCQl7CisJCQlmb3IgKGludCBpID0gb2xkX253b3Jk cyAtIDE7IGkgPj0gMDsgaS0tKQorCQkJCWEtPndvcmRzW2kgKyBvZmZzZXRfd29yZHNdID0gYS0+ d29yZHNbaV07CisKKwkJCS8qIHplcm8gb3V0IHRoZSBvbGQgbWVtYmVycyBmcm9tIHRoZSBsb3dl ciwgbm93IHVudXNlZCB3b3JkcyAqLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRfd29y ZHM7IGkrKykKKwkJCQlhLT53b3Jkc1tpXSA9IDA7CisJCX0KKworCQkvKiBOb3cgaGFuZGxlIHNo aWZ0aW5nIHVwIHRoZSBiaXRzLCBpZiBuZWVkZWQgKi8KKwkJaWYgKG9mZnNldF9iaXRzID4gMCkK KwkJeworCQkJaW50CQkJY2FycnlfYml0cyA9IEJJVFNfUEVSX0JJVE1BUFdPUkQgLSBvZmZzZXRf Yml0czsKKwkJCWJpdG1hcHdvcmQJcHJldl9jYXJyeSA9IDA7CisKKwkJCWZvciAoaW50IGkgPSBv ZmZzZXRfd29yZHM7IGkgPCBuZXdfbndvcmRzOyBpKyspCisJCQl7CisJCQkJYml0bWFwd29yZAlj YXJyeSA9IChhLT53b3Jkc1tpXSA+PiBjYXJyeV9iaXRzKTsKKworCQkJCS8qIHNoaWZ0IGJpdHMg dXAgYW5kIGNhcnJ5IHRoZSBiaXRzIGZyb20gdGhlIHByZXZpb3VzIHdvcmQgKi8KKwkJCQlhLT53 b3Jkc1tpXSA9IChhLT53b3Jkc1tpXSA8PCBvZmZzZXRfYml0cykgfCBwcmV2X2NhcnJ5OworCQkJ CXByZXZfY2FycnkgPSBjYXJyeTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEhhbmRsZSBuZWdhdGl2 ZSBvZmZzZXQgKGJpdHNoaWZ0IHJpZ2h0KSAqLworCWVsc2UKKwl7CisJCS8qIE1ha2UgdGhlIG5l Z2F0aXZlIHNoaWZ0X3dvcmRzIGFuZCBzaGlmdF9iaXRzIHBvc2l0aXZlIG51bWJlcnMgKi8KKwkJ b2Zmc2V0X3dvcmRzID0gMCAtIG9mZnNldF93b3JkczsKKwkJb2Zmc2V0X2JpdHMgPSAwIC0gb2Zm c2V0X2JpdHM7CisKKwkJLyoKKwkJICogU2hyaW5rIHRoZSBzZXQgdG8gc3RvcmUgdGhlIG5ldyBu dW1iZXIgb2Ygd29yZHMuICBXZSBjYW4ndCByZXBhbGxvYworCQkgKiBoZXJlIGFzIHdlIG5lZWQg dG8gc3RpbGwgYWNjZXNzIHRoZSBtZW1vcnkgZm9yIHRoZSB1cHBlciB3b3JkcyB0bworCQkgKiBt b3ZlIHRoZW0uICBJbiBhbnkgY2FzZSwgcmVwYWxsb2Mgd2l0aCBhIHNtYWxsZXIgYWxsb2NhdGlv biBsaWtlbHkKKwkJICogaXMganVzdCBnb2luZyB0byByZXR1cm4gdGhlIHNhbWUgY2h1bmssIHNv IGRvaW5nIHNvIHdvdWxkIGp1c3QgYmUKKwkJICogbmVlZGxlc3Mgb3ZlcmhlYWQuCisJCSAqLwor CQlhLT5ud29yZHMgPSBuZXdfbndvcmRzOworCisJCS8qIFNoaWZ0IHdvcmRzIGRvd24gdG8gbG93 ZXIgZWxlbWVudHMsIGlmIG5lZWRlZCAqLworCQlpZiAob2Zmc2V0X3dvcmRzID4gMCkKKwkJewor CQkJZm9yIChpbnQgaSA9IDA7IGkgPD0gbmV3X253b3JkczsgaSsrKQorCQkJCWEtPndvcmRzW2ld ID0gKGkgKyBvZmZzZXRfd29yZHMpID49IG9sZF9ud29yZHMgPyAwIDogYS0+d29yZHNbaSArIG9m ZnNldF93b3Jkc107CisKKwkJCS8qCisJCQkgKiBEb24ndCBib3RoZXIgd2l0aCB6ZXJvaW5nIHRo ZSB1cHBlciB3b3Jkcy4gIFRoZXkncmUgbm8gbG9uZ2VyCisJCQkgKiB2aXNpYmxlIGR1ZSB0byBy ZWR1Y2luZyBud29yZHMgZG93biB0byB0aGUgbmV3IHNpemUuCisJCQkgKi8KKwkJfQorCisJCS8q IE5vdyBoYW5kbGUgc2hpZnRpbmcgZG93biB0aGUgYml0cywgaWYgbmVlZGVkICovCisJCWlmIChv ZmZzZXRfYml0cyA+IDApCisJCXsKKwkJCWludAkJCWNhcnJ5X2JpdHMgPSBCSVRTX1BFUl9CSVRN QVBXT1JEIC0gb2Zmc2V0X2JpdHM7CisJCQliaXRtYXB3b3JkCXByZXZfY2FycnkgPSAwOworCisJ CQlpZiAobmV3X253b3JkcyA8IG9sZF9ud29yZHMpCisJCQkJcHJldl9jYXJyeSA9IChhLT53b3Jk c1tuZXdfbndvcmRzXSA8PCBjYXJyeV9iaXRzKTsKKworCQkJZm9yIChpbnQgaSA9IG5ld19ud29y ZHMgLSAxOyBpID49IDA7IGktLSkKKwkJCXsKKwkJCQliaXRtYXB3b3JkCWNhcnJ5ID0gKGEtPndv cmRzW2ldIDw8IGNhcnJ5X2JpdHMpOworCisJCQkJLyogc2hpZnQgYml0cyBkb3duIGFuZCBjYXJy eSB0aGUgYml0cyBmcm9tIHRoZSBwcmV2aW91cyB3b3JkICovCisJCQkJYS0+d29yZHNbaV0gPSAo YS0+d29yZHNbaV0gPj4gb2Zmc2V0X2JpdHMpIHwgcHJldl9jYXJyeTsKKwkJCQlwcmV2X2NhcnJ5 ID0gY2Fycnk7CisJCQl9CisJCX0KKwl9CisKKyNpZmRlZiBSRUFMTE9DQVRFX0JJVE1BUFNFVFMK KworCS8qCisJICogVGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGUgcmVwYWxsb2MgcmV0dXJu ZWQgYSBuZXcgcG9pbnRlciwgc28gY29weQorCSAqIGFuZCBmcmVlIHVuY29uZGl0aW9uYWxseSBo ZXJlLgorCSAqLworCWEgPSBibXNfY29weV9hbmRfZnJlZShhKTsKKyNlbHNlCisKKwkvKgorCSAq IFRoYXQgd2FzIGEgZmFpciBiaXQgb2YgYml0IHR3aWRkbGluZywgc28gbWFrZSBzdXJlIHdlJ3Zl IHN0aWxsIGdvdCBhCisJICogdmFsaWQgc2V0IHdpdGggbm8gbGVhZGluZyB6ZXJvIHdvcmRzCisJ ICovCisJQXNzZXJ0KGJtc19pc192YWxpZF9zZXQoYSkpOworI2VuZGlmCisKKwlyZXR1cm4gYTsK K30KKwogLyoKICAqIGJtc19hZGRfcmFuZ2UKICAqCQlBZGQgbWVtYmVycyBpbiB0aGUgcmFuZ2Ug b2YgJ2xvd2VyJyB0byAndXBwZXInIHRvIHRoZSBzZXQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9z ZXRyZWZzLmMKaW5kZXggZmYwZTg3NWYyYTIuLjg2YThkOTkzOTk3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vc2V0cmVmcy5jCkBAIC0yMDU3LDE2ICsyMDU3LDEwIEBAIHNldF9oYXNoX3JlZmVy ZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sIGludCBydG9mZnNldCkKIHN0YXRp YyBSZWxpZHMKIG9mZnNldF9yZWxpZF9zZXQoUmVsaWRzIHJlbGlkcywgaW50IHJ0b2Zmc2V0KQog ewotCVJlbGlkcwkJcmVzdWx0ID0gTlVMTDsKLQlpbnQJCQlydGluZGV4OwotCi0JLyogSWYgdGhl cmUncyBubyBvZmZzZXQgdG8gYXBwbHksIHdlIG5lZWRuJ3QgcmVjb21wdXRlIHRoZSB2YWx1ZSAq LworCS8qIElmIHRoZXJlJ3Mgbm8gb2Zmc2V0IHRvIGFwcGx5LCB3ZSBuZWVkbid0IG1ha2UgYSBj b3B5ICovCiAJaWYgKHJ0b2Zmc2V0ID09IDApCiAJCXJldHVybiByZWxpZHM7Ci0JcnRpbmRleCA9 IC0xOwotCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aW5kZXgp KSA+PSAwKQotCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIHJ0aW5kZXggKyBydG9m ZnNldCk7Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gYm1zX29mZnNldF9tZW1iZXJzKGJtc19j b3B5KHJlbGlkcyksIHJ0b2Zmc2V0KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcGpvaW50cmVlLmMKaW5kZXggOTViZjUxNjA2Y2MuLjA3MmZkNDdkYjllIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwpAQCAtMzc1MSwyMiArMzc1MSwy MiBAQCBoYXNfbm90bnVsbF9mb3JjZWRfdmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpmb3Jj ZWRfbnVsbF92YXJzLAogCQlpZiAoYm1zX2lzX21lbWJlcih2YXJubywgcmlnaHRfc3RhdGUtPm51 bGxhYmxlX3JlbHMpKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogSXRlcmF0ZSBvdmVyIGF0 dHJpYnV0ZXMgYW5kIGFkanVzdCB0aGUgYml0bWFwIGluZGV4ZXMgYnkKLQkJICogRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciB0byBnZXQgdGhlIGFjdHVhbCBhdHRyaWJ1dGUKLQkJ ICogbnVtYmVycy4KLQkJICovCi0JCWF0dG5vID0gLTE7Ci0JCXdoaWxlICgoYXR0bm8gPSBibXNf bmV4dF9tZW1iZXIoYXR0cnMsIGF0dG5vKSkgPj0gMCkKLQkJewotCQkJQXR0ck51bWJlcglyZWFs X2F0dG5vID0gYXR0bm8gKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOworCQkv KiBGaW5kIHRoZSBsb3dlc3QgbWVtYmVyIHRvIGNoZWNrIGlmIHN5c3RlbSBjb2x1bW5zIGFyZSBw cmVzZW50ICovCisJCWF0dG5vID0gYm1zX25leHRfbWVtYmVyKGF0dHJzLCAtMSk7CiAKLQkJCS8q IHN5c3RlbSBjb2x1bW5zIGNhbm5vdCBiZSBOVUxMICovCi0JCQlpZiAocmVhbF9hdHRubyA8IDAp Ci0JCQkJcmV0dXJuIHRydWU7CisJCS8qIFdlIGNoZWNrZWQgZm9yIGFuIGVtcHR5IHNldCBhYm92 ZSAqLworCQlBc3NlcnQoYXR0bm8gPj0gMCk7CiAKLQkJCWZvcmNlZG51bGxhdHRudW1zID0gYm1z X2FkZF9tZW1iZXIoZm9yY2VkbnVsbGF0dG51bXMsIHJlYWxfYXR0bm8pOwotCQl9CisJCS8qIHN5 c3RlbSBjb2x1bW5zIGNhbm5vdCBiZSBOVUxMICovCisJCWlmIChhdHRubyArIEZpcnN0TG93SW52 YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIgPCAwKQorCQkJcmV0dXJuIHRydWU7CisKKwkJLyoKKwkJ ICogQWRqdXN0IHRoZSBiaXRtYXAgaW5kZXhlcyBieSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmli dXRlTnVtYmVyIHRvCisJCSAqIGdldCB0aGUgYWN0dWFsIGF0dHJpYnV0ZSBudW1iZXJzLgorCQkg Ki8KKwkJZm9yY2VkbnVsbGF0dG51bXMgPSBibXNfb2Zmc2V0X21lbWJlcnMoYm1zX2NvcHkoYXR0 cnMpLAorCQkJCQkJCQkJCQkgICBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsK IAogCQlydGUgPSBydF9mZXRjaCh2YXJubywgcm9vdC0+cGFyc2UtPnJ0YWJsZSk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMgYi9zcmMvYmFja2VuZC9y ZXdyaXRlL3Jld3JpdGVNYW5pcC5jCmluZGV4IDRiZjRhYTBkNmQxLi5lMTAxN2RkZjQyYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYworKysgYi9zcmMvYmFj a2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCkBAIC01MjcsMTMgKzUyNyw3IEBAIE9mZnNldFZh ck5vZGVzKE5vZGUgKm5vZGUsIGludCBvZmZzZXQsIGludCBzdWJsZXZlbHNfdXApCiBzdGF0aWMg UmVsaWRzCiBvZmZzZXRfcmVsaWRfc2V0KFJlbGlkcyByZWxpZHMsIGludCBvZmZzZXQpCiB7Ci0J UmVsaWRzCQlyZXN1bHQgPSBOVUxMOwotCWludAkJCXJ0aW5kZXg7Ci0KLQlydGluZGV4ID0gLTE7 Ci0Jd2hpbGUgKChydGluZGV4ID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpbmRleCkpID49 IDApCi0JCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgcnRpbmRleCArIG9mZnNldCk7 Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gYm1zX29mZnNldF9tZW1iZXJzKGJtc19jb3B5KHJl bGlkcyksIG9mZnNldCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0 YXRzLmMKaW5kZXggMmI4MzM1NWQyNmUuLmYyYzBlMmQzNWQ5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9leHRlbmRlZF9zdGF0cy5jCkBAIC0xNjczLDggKzE2NzMsNyBAQCBzdGF0ZXh0X2lzX2Nv bXBhdGlibGVfY2xhdXNlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpjbGF1c2UsIEluZGV4IHJl bGlkLAogCSAqLwogCWlmICghbGVha3Byb29mKQogCXsKLQkJQml0bWFwc2V0ICAqY2xhdXNlX2F0 dG51bXMgPSBOVUxMOwotCQlpbnQJCQlhdHRudW0gPSAtMTsKKwkJQml0bWFwc2V0ICAqY2xhdXNl X2F0dG51bXM7CiAKIAkJLyoKIAkJICogV2UgaGF2ZSB0byBjaGVjayBwZXItY29sdW1uIHByaXZp bGVnZXMuICAqYXR0bnVtcyBoYXMgdGhlIGF0dG51bXMKQEAgLTE2ODUsMTMgKzE2ODQsOCBAQCBz dGF0ZXh0X2lzX2NvbXBhdGlibGVfY2xhdXNlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpjbGF1 c2UsIEluZGV4IHJlbGlkLAogCQkgKiB3aGlsZSBhdHRudW1zIHdpdGhpbiAqYXR0bnVtcyBhcmVu J3QuICBDb252ZXJ0ICphdHRudW1zIHRvIHRoZQogCQkgKiBvZmZzZXQgc3R5bGUgc28gd2UgY2Fu IGNvbWJpbmUgdGhlIHJlc3VsdHMuCiAJCSAqLwotCQl3aGlsZSAoKGF0dG51bSA9IGJtc19uZXh0 X21lbWJlcigqYXR0bnVtcywgYXR0bnVtKSkgPj0gMCkKLQkJewotCQkJY2xhdXNlX2F0dG51bXMg PQotCQkJCWJtc19hZGRfbWVtYmVyKGNsYXVzZV9hdHRudW1zLAotCQkJCQkJCSAgIGF0dG51bSAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOwotCQl9Ci0KKwkJY2xhdXNlX2F0 dG51bXMgPSBibXNfb2Zmc2V0X21lbWJlcnMoYm1zX2NvcHkoKmF0dG51bXMpLAorCQkJCQkJCQkJ CQkwIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CiAJCS8qIE5vdyBtZXJn ZSBhdHRudW1zIGZyb20gKmV4cHJzIGludG8gY2xhdXNlX2F0dG51bXMgKi8KIAkJaWYgKCpleHBy cyAhPSBOSUwpCiAJCQlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKSAqZXhwcnMsIHJlbGlkLCAmY2xh dXNlX2F0dG51bXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvYml0bWFwc2V0Lmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9iaXRtYXBzZXQuaAppbmRleCAwNjdlYzcyZTk5Yi4uNzQ4ZmEy YWQ1OGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2JpdG1hcHNldC5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL2JpdG1hcHNldC5oCkBAIC0xMjMsNiArMTIzLDcgQEAgZXh0ZXJuIEJp dG1hcHNldCAqYm1zX2FkZF9tZW1iZXIoQml0bWFwc2V0ICphLCBpbnQgeCk7CiBleHRlcm4gQml0 bWFwc2V0ICpibXNfZGVsX21lbWJlcihCaXRtYXBzZXQgKmEsIGludCB4KTsKIGV4dGVybiBCaXRt YXBzZXQgKmJtc19hZGRfbWVtYmVycyhCaXRtYXBzZXQgKmEsIGNvbnN0IEJpdG1hcHNldCAqYik7 CiBleHRlcm4gQml0bWFwc2V0ICpibXNfcmVwbGFjZV9tZW1iZXJzKEJpdG1hcHNldCAqYSwgY29u c3QgQml0bWFwc2V0ICpiKTsKK2V4dGVybiBCaXRtYXBzZXQgKmJtc19vZmZzZXRfbWVtYmVycyhC aXRtYXBzZXQgKmEsIGludCBvZmZzZXQpOwogZXh0ZXJuIEJpdG1hcHNldCAqYm1zX2FkZF9yYW5n ZShCaXRtYXBzZXQgKmEsIGludCBsb3dlciwgaW50IHVwcGVyKTsKIGV4dGVybiBCaXRtYXBzZXQg KmJtc19pbnRfbWVtYmVycyhCaXRtYXBzZXQgKmEsIGNvbnN0IEJpdG1hcHNldCAqYik7CiBleHRl cm4gQml0bWFwc2V0ICpibXNfZGVsX21lbWJlcnMoQml0bWFwc2V0ICphLCBjb25zdCBCaXRtYXBz ZXQgKmIpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBl Y3RlZC90ZXN0X2JpdG1hcHNldC5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 L2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dAppbmRleCBmNzVjYjQ2Yjg2OS4uM2E2ZjA4NDI3 Y2QgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0ZWQv dGVzdF9iaXRtYXBzZXQub3V0CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv ZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0CkBAIC03NjAsNiArNzYwLDM3IEBAIFNFTEVDVCB0 ZXN0X2Jtc19jb21wYXJlKE5VTEwsIE5VTEwpIEFTIHJlc3VsdDsKICAgICAgIDAKICgxIHJvdykK IAorLS0gYm1zX29mZnNldF9tZW1iZXJzKCkKKy0tIEVuc3VyZSBvdmVyZmxvdyBkZXRlY3Rpb24g d29ya3MKK1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMSknLCAyMTQ3NDgzNjQ3 KTsKK0VSUk9SOiAgYml0bWFwc2V0IG92ZXJmbG93CitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21l bWJlcnMoJyhiIDIpJywgMjE0NzQ4MzY0Nik7CitFUlJPUjogIGJpdG1hcHNldCBvdmVyZmxvdwor LS0gRW5zdXJlIG1lbWJlcnMgYXJlIGFsbCBvZmZzZXQgYXMgZXhwZWN0ZWQKK1NFTEVDVCB0ZXN0 X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMSAzIDUpJywgMSk7CisgdGVzdF9ibXNfb2Zmc2V0X21l bWJlcnMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKGIgMiA0IDYpCisoMSByb3cpCisK K1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMSAzIDUpJywgLTEpOworIHRlc3Rf Ym1zX29mZnNldF9tZW1iZXJzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChiIDAgMiA0 KQorKDEgcm93KQorCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMoJyhiIDMxIDMyIDYz IDY0KScsIDEpOworIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIChiIDMyIDMzIDY0IDY1KQorKDEgcm93KQorCitTRUxFQ1QgdGVzdF9ibXNfb2Zm c2V0X21lbWJlcnMoJyhiIDMxIDMyIDYzIDY0KScsIC0xKTsKKyB0ZXN0X2Jtc19vZmZzZXRfbWVt YmVycyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoYiAzMCAzMSA2MiA2MykKKygxIHJv dykKKwogLS0gYm1zX2FkZF9yYW5nZSgpCiBTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKCcoYikn LCAtNSwgMTApOyAtLSBlcnJvcgogRVJST1I6ICBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVyIG5v dCBhbGxvd2VkCkBAIC0xNTc1LDQgKzE2MDYsMTEgQEAgU0VMRUNUIHRlc3RfcmFuZG9tX29wZXJh dGlvbnMoLTEsIDEwMDAwLCA4MTkyMCwgMCkgPiAwIEFTIHJlc3VsdDsKICB0CiAoMSByb3cpCiAK Ky0tIHBlcmZvcm0gc29tZSByYW5kb20gdGVzdCBvbiBibXNfb2Zmc2V0X21lbWJlcnMoKQorU0VM RUNUIHRlc3RfcmFuZG9tX29mZnNldF9vcGVyYXRpb25zKC0xLCAxMDAwMCwgMTAyNCwgMCkgQVMg cmVzdWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgIDEwMDAwCisoMSByb3cpCisKIERST1AgRVhU RU5TSU9OIHRlc3RfYml0bWFwc2V0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsCmluZGV4IGU3NWFiOGY2MjBhLi41YzVj ZmUzZmMxNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwv dGVzdF9iaXRtYXBzZXQuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv c3FsL3Rlc3RfYml0bWFwc2V0LnNxbApAQCAtMjAxLDYgKzIwMSwxNiBAQCBTRUxFQ1QgdGVzdF9i bXNfY29tcGFyZSgnKGIgNSknLCBOVUxMKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfY29t cGFyZShOVUxMLCAnKGIgNSknKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfY29tcGFyZShO VUxMLCBOVUxMKSBBUyByZXN1bHQ7CiAKKy0tIGJtc19vZmZzZXRfbWVtYmVycygpCistLSBFbnN1 cmUgb3ZlcmZsb3cgZGV0ZWN0aW9uIHdvcmtzCitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJl cnMoJyhiIDEpJywgMjE0NzQ4MzY0Nyk7CitTRUxFQ1QgdGVzdF9ibXNfb2Zmc2V0X21lbWJlcnMo JyhiIDIpJywgMjE0NzQ4MzY0Nik7CistLSBFbnN1cmUgbWVtYmVycyBhcmUgYWxsIG9mZnNldCBh cyBleHBlY3RlZAorU0VMRUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAxIDMgNSknLCAx KTsKK1NFTEVDVCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMSAzIDUpJywgLTEpOworU0VM RUNUIHRlc3RfYm1zX29mZnNldF9tZW1iZXJzKCcoYiAzMSAzMiA2MyA2NCknLCAxKTsKK1NFTEVD VCB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycygnKGIgMzEgMzIgNjMgNjQpJywgLTEpOworCiAtLSBi bXNfYWRkX3JhbmdlKCkKIFNFTEVDVCB0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiKScsIC01LCAxMCk7 IC0tIGVycm9yCiBTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKCcoYiknLCA1LCA3KSBBUyByZXN1 bHQ7CkBAIC00MDMsNCArNDEzLDcgQEAgU0VMRUNUIHRlc3RfYm1zX25vbmVtcHR5X2RpZmZlcmVu Y2UoJyhiIDEgMiknLCAnKGIgNTAgMTAwKScpIEFTIHJlc3VsdDsKIC0tIHJhbmRvbSBvcGVyYXRp b25zCiBTRUxFQ1QgdGVzdF9yYW5kb21fb3BlcmF0aW9ucygtMSwgMTAwMDAsIDgxOTIwLCAwKSA+ IDAgQVMgcmVzdWx0OwogCistLSBwZXJmb3JtIHNvbWUgcmFuZG9tIHRlc3Qgb24gYm1zX29mZnNl dF9tZW1iZXJzKCkKK1NFTEVDVCB0ZXN0X3JhbmRvbV9vZmZzZXRfb3BlcmF0aW9ucygtMSwgMTAw MDAsIDEwMjQsIDApIEFTIHJlc3VsdDsKKwogRFJPUCBFWFRFTlNJT04gdGVzdF9iaXRtYXBzZXQ7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFw c2V0LS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1h cHNldC0tMS4wLnNxbAppbmRleCAyMjdlY2I1YWEzYi4uZWExMmVjNDAwNTcgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4w LnNxbApAQCAtMTIwLDYgKzEyMCwxMCBAQCBDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfcmVwbGFj ZV9tZW1iZXJzKHRleHQsIHRleHQpCiBSRVRVUk5TIHRleHQKIEFTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CiAKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycyh0 ZXh0LCBpbnRlZ2VyKQorUkVUVVJOUyB0ZXh0CitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFH RSBDOworCiBDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfam9pbih0ZXh0LCB0ZXh0KQogUkVUVVJO UyB0ZXh0CiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpAQCAtMTM3LDQgKzE0MSw4 IEBAIENSRUFURSBGVU5DVElPTiB0ZXN0X3JhbmRvbV9vcGVyYXRpb25zKGludGVnZXIsIGludGVn ZXIsIGludGVnZXIsIGludGVnZXIpCiBSRVRVUk5TIGludGVnZXIgU1RSSUNUCiBBUyAnTU9EVUxF X1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9yYW5kb21fb2Zm c2V0X29wZXJhdGlvbnMoaW50ZWdlciwgaW50ZWdlciwgaW50ZWdlciwgaW50ZWdlcikKK1JFVFVS TlMgaW50ZWdlciBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKIENP TU1FTlQgT04gRVhURU5TSU9OIHRlc3RfYml0bWFwc2V0IElTICdUZXN0IGNvZGUgZm9yIEJpdG1h cHNldCc7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3Rf Yml0bWFwc2V0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFw c2V0LmMKaW5kZXggMjcyYmVkMzkwYTYuLjFmYmY5ZmZjMjAwIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCkBAIC01OSwxMiArNTksMTQg QEAgUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19hZGRfbWVtYmVycyk7CiBQR19GVU5DVElP Tl9JTkZPX1YxKHRlc3RfYm1zX2ludF9tZW1iZXJzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVz dF9ibXNfZGVsX21lbWJlcnMpOwogUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19yZXBsYWNl X21lbWJlcnMpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19vZmZzZXRfbWVtYmVycyk7 CiBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2pvaW4pOwogUEdfRlVOQ1RJT05fSU5GT19W MSh0ZXN0X2JpdG1hcF9oYXNoKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9iaXRtYXBfbWF0 Y2gpOwogCiAvKiBUZXN0IHV0aWxpdHkgZnVuY3Rpb25zICovCiBQR19GVU5DVElPTl9JTkZPX1Yx KHRlc3RfcmFuZG9tX29wZXJhdGlvbnMpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3JhbmRv bV9vZmZzZXRfb3BlcmF0aW9ucyk7CiAKIC8qIENvbnZlbmllbnQgbWFjcm9zIHRvIHRlc3QgcmVz dWx0cyAqLwogI2RlZmluZSBFWFBFQ1RfVFJVRShleHByKQlcCkBAIC01MzAsNiArNTMyLDE4IEBA IHRlc3RfYm1zX3JlcGxhY2VfbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9C SVRNQVBTRVRfQVNfVEVYVChibXMxKTsKIH0KIAorRGF0dW0KK3Rlc3RfYm1zX29mZnNldF9tZW1i ZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gUEdfQVJHX0dFVEJJ VE1BUFNFVCgwKTsKKwlpbnQJCQlvZmZzZXQgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKKwkvKiBs ZWZ0IGlucHV0IGdldHMgcmVjeWNsZWQgKi8KKwlibXMgPSBibXNfb2Zmc2V0X21lbWJlcnMoYm1z LCBvZmZzZXQpOworCisJUEdfUkVUVVJOX0JJVE1BUFNFVF9BU19URVhUKGJtcyk7Cit9CisKIERh dHVtCiB0ZXN0X2Jtc19qb2luKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CkBAIC01ODAsNyArNTk0LDcg QEAgdGVzdF9iaXRtYXBfbWF0Y2goUEdfRlVOQ1RJT05fQVJHUykKIH0KIAogLyoKLSAqIENvbnRy YXJ5IHRvIGFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zIHdoaWNoIGFyZSBvbmUtb25lIG1hcHBpbmdz IHdpdGggdGhlCisgKiBDb250cmFyeSB0byBtb3N0IG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgd2hp Y2ggYXJlIG9uZS1vbmUgbWFwcGluZ3Mgd2l0aCB0aGUKICAqIGVxdWl2YWxlbnQgQyBmdW5jdGlv bnMsIHRoaXMgc3RyZXNzZXMgQml0bWFwc2V0cyBpbiBhIHJhbmRvbSBmYXNoaW9uIGZvcgogICog dmFyaW91cyBvcGVyYXRpb25zLgogICoKQEAgLTc0MiwzICs3NTYsNzQgQEAgdGVzdF9yYW5kb21f b3BlcmF0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0lOVDMyKHRvdGFsX29w cyk7CiB9CisKKy8qCisgKiBSYW5kb20gdGVzdGluZyBmb3IgYm1zX29mZnNldF9tZW1iZXJzKCku ICBHZW5lcmF0ZXMgYSByYW5kb20gc2V0IGFuZCB0aGVuCisgKiBwaWNrcyBhIG51bWJlciB0byBv ZmZzZXQgdGhlIG1lbWJlcnMgYnkuICBXZSB0aGVuIGNyZWF0ZSBhbm90aGVyIHNldCwgd2hpY2gK KyAqIGlzIGJ1aWx0IGJ5IGxvb3Bpbmcgb3ZlciB0aGUgbWVtYmVycyBvZiB0aGUgcmFuZG9tIHNl dCBhbmQgcGVyZm9ybWluZworICogYm1zX2FkZF9tZW1iZXIgYW5kIGFkZGluZyBvbiB0aGUgb2Zm c2V0IHRvIGNyZWF0ZSBhIGtub3duIGdvb2Qgc2V0IHRvCisgKiBjb21wYXJlIHRoZSByZXN1bHQg b2YgYm1zX29mZnNldF9tZW1iZXJzKCkgdG8uCisgKgorICogQXJndW1lbnRzOgorICoJYXJnMTog b3B0aW9uYWwgcmFuZG9tIHNlZWQsIG9yIDwgMCB0byB1c2UgYSByYW5kb20gc2VlZC4KKyAqICBh cmcyOiB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybS4KKyAqICBhcmczOiB0aGUg bWF4aW11bSBiaXRtYXBzZXQgbWVtYmVyIG51bWJlciB0byB1c2UgaW4gdGhlIHJhbmRvbSBzZXQu CisgKiAgYXJnNDogdGhlIG1pbmltdW0gYml0bWFwc2V0IG1lbWJlciBudW1iZXIgdG8gdXNlIGlu IHRoZSByYW5kb20gc2V0LgorICovCitEYXR1bQordGVzdF9yYW5kb21fb2Zmc2V0X29wZXJhdGlv bnMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMxOworCUJpdG1hcHNldCAg KmJtczI7CisJcGdfcHJuZ19zdGF0ZSBzdGF0ZTsKKwl1aW50NjQJCXNlZWQgPSBHZXRDdXJyZW50 VGltZXN0YW1wKCk7CisJaW50CQkJbnVtX29wczsKKwlpbnQJCQltYXhfcmFuZ2U7CisJaW50CQkJ bWluX3ZhbHVlOworCWludAkJCW1lbWJlcjsKKworCWlmIChQR19HRVRBUkdfSU5UMzIoMCkgPiAw KQorCQlzZWVkID0gUEdfR0VUQVJHX0lOVDMyKDApOworCisJbnVtX29wcyA9IFBHX0dFVEFSR19J TlQzMigxKTsKKwltYXhfcmFuZ2UgPSBQR19HRVRBUkdfSU5UMzIoMik7CisJbWluX3ZhbHVlID0g UEdfR0VUQVJHX0lOVDMyKDMpOworCisJcGdfcHJuZ19zZWVkKCZzdGF0ZSwgc2VlZCk7CisKKwlm b3IgKGludCBvcCA9IDA7IG9wIDwgbnVtX29wczsgb3ArKykKKwl7CisJCWludAkJCW9mZnNldDsK KworCQlibXMxID0gTlVMTDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQorCQl7CisJ CQltZW1iZXIgPSBwZ19wcm5nX3VpbnQzMigmc3RhdGUpICUgbWF4X3JhbmdlICsgbWluX3ZhbHVl OworCisJCQlibXMxID0gYm1zX2FkZF9tZW1iZXIoYm1zMSwgbWVtYmVyKTsKKwkJfQorCisJCW9m ZnNldCA9IChwZ19wcm5nX3VpbnQzMigmc3RhdGUpICUgbWF4X3JhbmdlKSAtIChwZ19wcm5nX3Vp bnQzMigmc3RhdGUpICUgbWF4X3JhbmdlKTsKKworCQkvKiBjcmVhdGUgYSBrbm93bi1nb29kIHNl dCB0aGUgb2xkIGZhc2hpb25lZCB3YXkgKi8KKwkJYm1zMiA9IE5VTEw7CisJCW1lbWJlciA9IC0x OworCQl3aGlsZSAoKG1lbWJlciA9IGJtc19uZXh0X21lbWJlcihibXMxLCBtZW1iZXIpKSA+PSAw KQorCQl7CisJCQlpZiAobWVtYmVyICsgb2Zmc2V0ID49IDApCisJCQkJYm1zMiA9IGJtc19hZGRf bWVtYmVyKGJtczIsIG1lbWJlciArIG9mZnNldCk7CisJCX0KKworCQkvKiBkbyB0aGUgb2Zmc2V0 dGluZyAqLworCQlibXMxID0gYm1zX29mZnNldF9tZW1iZXJzKGJtczEsIG9mZnNldCk7CisKKwkJ LyogY2hlY2sgYWdhaW5zdCB0aGUga25vd24tZ29vZCBzZXQgKi8KKwkJaWYgKCFibXNfZXF1YWwo Ym1zMSwgYm1zMikpCisJCQllbG9nKEVSUk9SLCAiYm1zX29mZnNldF9tZW1iZXJzIGZhaWxlZCB3 aXRoIG9mZnNldCAlZCBzZWVkICIgSU5UNjRfRk9STUFULCBvZmZzZXQsIHNlZWQpOworCisJCWJt c19mcmVlKGJtczEpOworCQlibXNfZnJlZShibXMyKTsKKwl9CisKKwlQR19SRVRVUk5fSU5UMzIo bnVtX29wcyk7Cit9Ci0tIAoyLjUxLjAKCg== --0000000000006b486e064f743143--