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 1w8Tzw-000Zs3-1m for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 02:11:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8Tzv-009NpK-1I for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 02:10:59 +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 1w8TyF-009L9N-13 for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 02:09:15 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8TyD-00000000HZa-0l5n for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 02:09:14 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-43cfd1f9fd1so874331f8f.3 for ; Thu, 02 Apr 2026 19:09:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775182151; cv=none; d=google.com; s=arc-20240605; b=MHQlSIRIxSD+5VMG9sGLtKFl5naNKMR1ugIPFRSGW/KMADb4os9En+1U/M4YhlsWUA j7fzpm9uuHF+jl8UZOO42/1gmlf9jedkHjtrXVSiPg/J9wmll304bqLO1NCk5BsjTXPu V+/SD0bmzNQHbX1NhadNzZIFIE2/Oi+j5cWG/Yi16TaIEqDwq/Bda39ZXT2QZqHkKJNP 2Oworpjr01x24sPB7D7qACCpppUqyqO+cjzBCZL4bah3WZ1LV6nR8rBhTXSvwCxOc7bg x17Mu6oOCggm6lfsvQojKBciJOppoOELmGpyaeZ5wvi8cy5/dNEnjB3PVAMEqsYqCM6q p6Lw== 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=IK4+iFzOoJzhcGAjvqa5tcyRdmcPZ5qp6i43gzSAZh4=; fh=lK8Ey75qlt4w4S087HA2sQsiHJBeqk3Wvx6fjumIn6g=; b=PegGmoApBkqguJNp6wRgWBaHbLPuWuVEgcbVax9lLxJCdahbUyUMRugTbaWiTxwXTA vTNct55Vrbo9WVb3uUv+wvIowTQAkDiTw2uNtv4vpFQfiVN6kK0w2SafG+mom+bXON+n KE2b0O8ExK5SHWaFpuy5La9PWzt/eaq0YRSMA6bdZAqzyzLnI9JJSVMr+SJnxo5uLnqc iyz2cHFz6pMBHwEBRBsr3WXP8GnfTmXwqVx8bDvGAFBAXVPoBW7vB2vWya16I+IamT7L v+z3OBC0F5jOBsSLVI7nyAvoacx7tT6BLKCNIhH0qxZ8oHsQDYF/jyYkMNsQqpP/uOaD RZpA==; 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=1775182151; x=1775786951; 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=IK4+iFzOoJzhcGAjvqa5tcyRdmcPZ5qp6i43gzSAZh4=; b=R19m5JvyipTOoGnFxtzm0i6ytzfWqfZab3ghTmIKri8g/qn7V+GpQzTAiYBuzlUQ+W MYbZCohVbsAeq8aIh6qhcSyd7jmFAfMbJIS6HN1yvro0iPLhFuBRglBSADboWElBUWbT sJUOzT+xcXDLqjDz0+Puwiyx0FiQ3Xb+Ku4fhLtxzlx0/qXKtvKr7O5emDAIOf8i19gO 9IG9ZKC2fu0LlzowXO1MMJVfwBfeUicL9fxhoUhuVS1ohEosODxhg27IxFAA+TBC/0BK giwuULOSyfL0bg3igu98JybRRChN5FN1V+NTklPH6Er+H/i74/F/OggTXyxyjho6GnUI rG7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775182151; x=1775786951; 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=IK4+iFzOoJzhcGAjvqa5tcyRdmcPZ5qp6i43gzSAZh4=; b=MK+HN+lXt0Amdd6vT3MAHkQrFtVlHNqfm1+VYde1mVzP9TIxaMZILMa7K2yDAtUPAZ 5sx35eEym2D+weytLTX/0S/pPQkf7p180+q3mvhztykPjHiuCmF4F5m7Rj82yEkqhKlm sMIU5lruffm+l/6a/sw5CixPmjxEIraerRvCT6qf9E6FMR5I8fZLjlTzeXPYQal3k9gI Lp1AINUKcub2Qu311y1grQPz6GZ21QlXJtRM2R/l1HFwqVrofY/UVlbn3S6kclOzc+O4 pGfaAzcRr47EqtxF24gaG2DSYwTIF9RuiW4A/D/t4OWO9wphvPuHInS3QWO7TgRfgUHU Rrhg== X-Gm-Message-State: AOJu0YwptdbpDgiWjMFA3R7GD796S7m7LKhNyB1BvDnxA7MiknwWGt9e RAdeWMEfolfhm+rK4CfG2BfrzGcQ3DHaGE1Glwm6FgI1DRtxi6eVHyVmF1cAJBn4afiAKvABJ+M /6RZsPiPGEIgLDmzznnhAuq4oSpWdn8o= X-Gm-Gg: AeBDievFnw9dKS12L0QKEGvB96evHKfOXxJrBA5WfrVJwJKi79inXqdeYqNltDbQXz5 CZitRSpjYAtM0evkeLFQiMLUD2PLIfere6/ap4luIXt3jIFl8s2cSXAw7/N6f4hF9rrvFm+9MD8 7voaRoJLCD4BQVI6J8qf+dwUpJFHQR2tzMclejNWeg1tozkQ+OasNXD4xf86IKPfLWIwdOLCuPY LFKA13mmjoxr39gXXdyGdP/cKQwlfs88mGnyJTn8nNC4KxIgo9+CNM5BwdVro6XadOnM5yzEwFS rYxLOvEIFwCFQ9q/HPI5oFbCX93tBOGdiZ7eCvyxXANDYtzphwdb0Ot8nlkcZ5es2q5vGhEE3w= = X-Received: by 2002:a05:6000:2885:b0:43d:1deb:a5da with SMTP id ffacd0b85a97d-43d291e2378mr1787774f8f.0.1775182150547; Thu, 02 Apr 2026 19:09:10 -0700 (PDT) MIME-Version: 1.0 References: <3190647.1775103768@sss.pgh.pa.us> In-Reply-To: From: David Rowley Date: Fri, 3 Apr 2026 15:08:58 +1300 X-Gm-Features: AQROBzBpsZxh9jcIZ-DqE0bn-fJ175EcH9u-fVtNQMXJSj-wTqObMVSMrbsLDCM Message-ID: Subject: Re: Small and unlikely overflow hazard in bms_next_member() To: Tom Lane Cc: PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000007ed5b4064e84cdb7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007ed5b4064e84cdb7 Content-Type: text/plain; charset="UTF-8" On Fri, 3 Apr 2026 at 11:12, David Rowley wrote: > > On Thu, 2 Apr 2026 at 17:22, Tom Lane wrote: > > I don't think we should add cycles here for this purpose. > > I'm not keen on slowing things down for this either. I did do some > experiments in [1] that sees fewer instructions from using 64-bit > maths. I might go off and see if there are any wins there that also > give us the INT_MAX fix. It's not great effort to reward ratio > though... The reduction in instructions with the patched version got me curious to see if it would translate into a performance increase. I tested on an AMD Zen2 machine, and it's a decent amount faster than master. I tested with gcc and clang. I also scanned over the remaining parts of bitmapset.c and didn't find anywhere else that has overflow risk aside from what you pointed out in bms_prev_member(). The attached patch contains the benchmark function I added to the test_bitmapset module. It should apply to master with a bit of noise. CREATE EXTENSION test_bitmapset; SELECT generate_series(1,3) AS run, bench_bms_next_member('(b 1 2 3 4 5 6 7 8 64)', 1000000)/1000 AS bms_next_member_us, bench_bms_prev_member('(b 1 2 3 4 5 6 7 8 64)', 1000000)/1000 AS bms_prev_member_us; master (gcc) run | bms_next_member_us | bms_prev_member_us -----+--------------------+-------------------- 1 | 26473 | 40404 2 | 26218 | 40413 3 | 26209 | 40387 patched (gcc) run | bms_next_member_us | bms_prev_member_us -----+--------------------+-------------------- 1 | 25409 | 29705 2 | 24905 | 29693 3 | 24870 | 29707 Times are in microseconds to do 1 million bms_*_member() loops over the entire set. I've also attached the full results I got. I've also included the results from Chao's version, which does slow things down decently on clang. IMO, if we can make bitmapset.c work with INT_MAX members and get a performance increase, then we should do it. David > [1] https://godbolt.org/z/Eh1vzssq7 --0000000000007ed5b4064e84cdb7 Content-Type: text/plain; charset="US-ASCII"; name="benchmark_results.txt" Content-Disposition: attachment; filename="benchmark_results.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mni94xmm1 KiogR0NDICoqCgpNYXN0ZXI6Cgpwb3N0Z3Jlcz0jIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgcnVuLGJlbmNoX2Jtc19uZXh0X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4IDY0KScsIDEw MDAwMDApLzEwMDAgYXMgYm1zX25leHRfbWVtYmVyX3VzLCBiZW5jaF9ibXNfcHJldl9tZW1iZXIo JyhiIDEgMiAzIDQgNSA2IDcgOCA2NCknLCAxMDAwMDAwKS8xMDAwIGFzIGJtc19wcmV2X21lbWJl cl91czsKIHJ1biB8IGJtc19uZXh0X21lbWJlcl91cyB8IGJtc19wcmV2X21lbWJlcl91cwotLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLQogICAxIHwgICAgICAg ICAgICAgIDI2NDczIHwgICAgICAgICAgICAgIDQwNDA0CiAgIDIgfCAgICAgICAgICAgICAgMjYy MTggfCAgICAgICAgICAgICAgNDA0MTMKICAgMyB8ICAgICAgICAgICAgICAyNjIwOSB8ICAgICAg ICAgICAgICA0MDM4NwogICA0IHwgICAgICAgICAgICAgIDI2MjQ1IHwgICAgICAgICAgICAgIDQw NTIxCiAgIDUgfCAgICAgICAgICAgICAgMjYzNDMgfCAgICAgICAgICAgICAgNDA1NTkKICAgNiB8 ICAgICAgICAgICAgICAyNjM0MyB8ICAgICAgICAgICAgICA0MDU4MAogICA3IHwgICAgICAgICAg ICAgIDI2MzY2IHwgICAgICAgICAgICAgIDQwNjM5CiAgIDggfCAgICAgICAgICAgICAgMjY3MzUg fCAgICAgICAgICAgICAgNDA0NjcKICAgOSB8ICAgICAgICAgICAgICAyNjIwMSB8ICAgICAgICAg ICAgICA0MDMzNAogIDEwIHwgICAgICAgICAgICAgIDI2MjA4IHwgICAgICAgICAgICAgIDQwMzQz CigxMCByb3dzKQoKVGltZTogNzM1LjU2MCBtcwpwb3N0Z3Jlcz0jIHNlbGVjdCBnZW5lcmF0ZV9z ZXJpZXMoMSwxMCkgcnVuLGJlbmNoX2Jtc19uZXh0X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4 IDY0KScsIDEwMDAwMDApLzEwMDAgYXMgYm1zX25leHRfbWVtYmVyX3VzLCBiZW5jaF9ibXNfcHJl dl9tZW1iZXIoJyhiIDEgMiAzIDQgNSA2IDcgOCA2NCknLCAxMDAwMDAwKS8xMDAwIGFzIGJtc19w cmV2X21lbWJlcl91czsKIHJ1biB8IGJtc19uZXh0X21lbWJlcl91cyB8IGJtc19wcmV2X21lbWJl cl91cwotLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLQogICAx IHwgICAgICAgICAgICAgIDI2NjE2IHwgICAgICAgICAgICAgIDQwMzkyCiAgIDIgfCAgICAgICAg ICAgICAgMjYyMzkgfCAgICAgICAgICAgICAgNDAzNzQKICAgMyB8ICAgICAgICAgICAgICAyNjE5 MSB8ICAgICAgICAgICAgICA0MDM3NAogICA0IHwgICAgICAgICAgICAgIDI2MjMwIHwgICAgICAg ICAgICAgIDQwMzcwCiAgIDUgfCAgICAgICAgICAgICAgMjYyMzIgfCAgICAgICAgICAgICAgNDAz ODAKICAgNiB8ICAgICAgICAgICAgICAyNjIxMCB8ICAgICAgICAgICAgICA0MDM3NwogICA3IHwg ICAgICAgICAgICAgIDI2MjA2IHwgICAgICAgICAgICAgIDQwMzk1CiAgIDggfCAgICAgICAgICAg ICAgMjYyNDkgfCAgICAgICAgICAgICAgNDA0MzEKICAgOSB8ICAgICAgICAgICAgICAyNjIwOSB8 ICAgICAgICAgICAgICA0MDM3NAogIDEwIHwgICAgICAgICAgICAgIDI2MjM0IHwgICAgICAgICAg ICAgIDQwNDMyCigxMCByb3dzKQoKVGltZTogNzMzLjkyNyBtcwoKUGF0Y2hlZDoKCnBvc3RncmVz PSMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLDEwKSBydW4sYmVuY2hfYm1zX25leHRfbWVtYmVy KCcoYiAxIDIgMyA0IDUgNiA3IDggNjQpJywgMTAwMDAwMCkvMTAwMCBhcyBibXNfbmV4dF9tZW1i ZXJfdXMsIGJlbmNoX2Jtc19wcmV2X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4IDY0KScsIDEw MDAwMDApLzEwMDAgYXMgYm1zX3ByZXZfbWVtYmVyX3VzOwogcnVuIHwgYm1zX25leHRfbWVtYmVy X3VzIHwgYm1zX3ByZXZfbWVtYmVyX3VzCi0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgIDEgfCAgICAgICAgICAgICAgMjU0MDkgfCAgICAgICAgICAgICAg Mjk3MDUKICAgMiB8ICAgICAgICAgICAgICAyNDkwNSB8ICAgICAgICAgICAgICAyOTY5MwogICAz IHwgICAgICAgICAgICAgIDI0ODcwIHwgICAgICAgICAgICAgIDI5NzA3CiAgIDQgfCAgICAgICAg ICAgICAgMjQ5MzMgfCAgICAgICAgICAgICAgMjk4NjkKICAgNSB8ICAgICAgICAgICAgICAyNTA1 OSB8ICAgICAgICAgICAgICAyOTg3MAogICA2IHwgICAgICAgICAgICAgIDI1MDI2IHwgICAgICAg ICAgICAgIDI5OTA2CiAgIDcgfCAgICAgICAgICAgICAgMjUwNTUgfCAgICAgICAgICAgICAgMjk4 OTcKICAgOCB8ICAgICAgICAgICAgICAyNTA1NSB8ICAgICAgICAgICAgICAyOTg3NQogICA5IHwg ICAgICAgICAgICAgIDI1MDMxIHwgICAgICAgICAgICAgIDI5ODcwCiAgMTAgfCAgICAgICAgICAg ICAgMjUwNDIgfCAgICAgICAgICAgICAgMjk4MTYKKDEwIHJvd3MpCgpUaW1lOiA2MDQuMDg2IG1z CnBvc3RncmVzPSMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLDEwKSBydW4sYmVuY2hfYm1zX25l eHRfbWVtYmVyKCcoYiAxIDIgMyA0IDUgNiA3IDggNjQpJywgMTAwMDAwMCkvMTAwMCBhcyBibXNf bmV4dF9tZW1iZXJfdXMsIGJlbmNoX2Jtc19wcmV2X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4 IDY0KScsIDEwMDAwMDApLzEwMDAgYXMgYm1zX3ByZXZfbWVtYmVyX3VzOwogcnVuIHwgYm1zX25l eHRfbWVtYmVyX3VzIHwgYm1zX3ByZXZfbWVtYmVyX3VzCi0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIDEgfCAgICAgICAgICAgICAgMjUwNzQgfCAgICAg ICAgICAgICAgMjk3MjMKICAgMiB8ICAgICAgICAgICAgICAyNDg4MiB8ICAgICAgICAgICAgICAy OTcyMQogICAzIHwgICAgICAgICAgICAgIDI0ODc1IHwgICAgICAgICAgICAgIDI5NzEwCiAgIDQg fCAgICAgICAgICAgICAgMjQ5NzYgfCAgICAgICAgICAgICAgMjk4NTQKICAgNSB8ICAgICAgICAg ICAgICAyNTA1MiB8ICAgICAgICAgICAgICAyOTg2NQogICA2IHwgICAgICAgICAgICAgIDI1MDIx IHwgICAgICAgICAgICAgIDI5OTA0CiAgIDcgfCAgICAgICAgICAgICAgMjUwMjUgfCAgICAgICAg ICAgICAgMjk4MTgKICAgOCB8ICAgICAgICAgICAgICAyNTAzNCB8ICAgICAgICAgICAgICAyOTgx MwogICA5IHwgICAgICAgICAgICAgIDI1MDI5IHwgICAgICAgICAgICAgIDI5ODI4CiAgMTAgfCAg ICAgICAgICAgICAgMjUwNDIgfCAgICAgICAgICAgICAgMjk4NjYKKDEwIHJvd3MpCgpUaW1lOiA2 MDMuNzA4IG1zCgpDaGFvJ3MgaWRlYToKCnBvc3RncmVzPSMgc2VsZWN0IGdlbmVyYXRlX3Nlcmll cygxLDEwKSBydW4sYmVuY2hfYm1zX25leHRfbWVtYmVyKCcoYiAxIDIgMyA0IDUgNiA3IDggNjQp JywgMTAwMDAwMCkvMTAwMCBhcyBibXNfbmV4dF9tZW1iZXJfdXMsIGJlbmNoX2Jtc19wcmV2X21l bWJlcignKGIgMSAyIDMgNCA1IDYgNyA4IDY0KScsIDEwMDAwMDApLzEwMDAgYXMgYm1zX3ByZXZf bWVtYmVyX3VzOwogcnVuIHwgYm1zX25leHRfbWVtYmVyX3VzIHwgYm1zX3ByZXZfbWVtYmVyX3Vz Ci0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIDEgfCAg ICAgICAgICAgICAgMjU2NzcgfCAgICAgICAgICAgICAgNDAzNzYKICAgMiB8ICAgICAgICAgICAg ICAyNTI3MSB8ICAgICAgICAgICAgICA0MDQzMAogICAzIHwgICAgICAgICAgICAgIDI1MjYzIHwg ICAgICAgICAgICAgIDQwMzcwCiAgIDQgfCAgICAgICAgICAgICAgMjUzMDEgfCAgICAgICAgICAg ICAgNDAzNzcKICAgNSB8ICAgICAgICAgICAgICAyNTM1NyB8ICAgICAgICAgICAgICA0MDU1Mgog ICA2IHwgICAgICAgICAgICAgIDI1Mzk0IHwgICAgICAgICAgICAgIDQwNTYwCiAgIDcgfCAgICAg ICAgICAgICAgMjU0MTIgfCAgICAgICAgICAgICAgNDA1MDEKICAgOCB8ICAgICAgICAgICAgICAy NTQwMSB8ICAgICAgICAgICAgICA0MDU1OAogICA5IHwgICAgICAgICAgICAgIDI1MzgxIHwgICAg ICAgICAgICAgIDQwNTY1CiAgMTAgfCAgICAgICAgICAgICAgMjUzNzAgfCAgICAgICAgICAgICAg NDA1NDgKKDEwIHJvd3MpCgpUaW1lOiA3MjUuMzc2IG1zCgoKKiogQ0xBTkcgKioKCm1hc3RlcjoK CnBvc3RncmVzPSMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLDEwKSBydW4sYmVuY2hfYm1zX25l eHRfbWVtYmVyKCcoYiAxIDIgMyA0IDUgNiA3IDggNjQpJywgMTAwMDAwMCkvMTAwMCBhcyBibXNf bmV4dF9tZW1iZXJfdXMsIGJlbmNoX2Jtc19wcmV2X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4 IDY0KScsIDEwMDAwMDApLzEwMDAgYXMgYm1zX3ByZXZfbWVtYmVyX3VzOwogcnVuIHwgYm1zX25l eHRfbWVtYmVyX3VzIHwgYm1zX3ByZXZfbWVtYmVyX3VzCi0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIDEgfCAgICAgICAgICAgICAgMjk5NzAgfCAgICAg ICAgICAgICAgNDI1NTEKICAgMiB8ICAgICAgICAgICAgICAyOTQ3OSB8ICAgICAgICAgICAgICA0 Mjc2NQogICAzIHwgICAgICAgICAgICAgIDI5NDc1IHwgICAgICAgICAgICAgIDQyODA1CiAgIDQg fCAgICAgICAgICAgICAgMjk1MjMgfCAgICAgICAgICAgICAgNDI4MjUKICAgNSB8ICAgICAgICAg ICAgICAyOTU3OCB8ICAgICAgICAgICAgICA0Mjg5OAogICA2IHwgICAgICAgICAgICAgIDI5NTI5 IHwgICAgICAgICAgICAgIDQyOTk3CiAgIDcgfCAgICAgICAgICAgICAgMjk1MzUgfCAgICAgICAg ICAgICAgNDI5ODUKICAgOCB8ICAgICAgICAgICAgICAyOTU5MyB8ICAgICAgICAgICAgICA0MzAy MQogICA5IHwgICAgICAgICAgICAgIDI5NTc1IHwgICAgICAgICAgICAgIDQyOTc2CiAgMTAgfCAg ICAgICAgICAgICAgMjk1NjIgfCAgICAgICAgICAgICAgNDI5NjcKKDEwIHJvd3MpCgpUaW1lOiA3 OTguMTMxIG1zCgpwb3N0Z3Jlcz0jIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgcnVuLGJl bmNoX2Jtc19uZXh0X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4IDY0KScsIDEwMDAwMDApLzEw MDAgYXMgYm1zX25leHRfbWVtYmVyX3VzLCBiZW5jaF9ibXNfcHJldl9tZW1iZXIoJyhiIDEgMiAz IDQgNSA2IDcgOCA2NCknLCAxMDAwMDAwKS8xMDAwIGFzIGJtc19wcmV2X21lbWJlcl91czsKIHJ1 biB8IGJtc19uZXh0X21lbWJlcl91cyB8IGJtc19wcmV2X21lbWJlcl91cwotLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLQogICAxIHwgICAgICAgICAgICAgIDMw OTE5IHwgICAgICAgICAgICAgIDQyNTE2CiAgIDIgfCAgICAgICAgICAgICAgMjkzMTIgfCAgICAg ICAgICAgICAgNDI2MjkKICAgMyB8ICAgICAgICAgICAgICAyOTQyMiB8ICAgICAgICAgICAgICA0 Mjc3NwogICA0IHwgICAgICAgICAgICAgIDI5MzA3IHwgICAgICAgICAgICAgIDQyODExCiAgIDUg fCAgICAgICAgICAgICAgMjkyNzMgfCAgICAgICAgICAgICAgNDI4NTIKICAgNiB8ICAgICAgICAg ICAgICAyOTIxOSB8ICAgICAgICAgICAgICA0MjgyNgogICA3IHwgICAgICAgICAgICAgIDI5ODYw IHwgICAgICAgICAgICAgIDQzMjY0CiAgIDggfCAgICAgICAgICAgICAgMjkzMjUgfCAgICAgICAg ICAgICAgNDI4MTQKICAgOSB8ICAgICAgICAgICAgICAyOTI5OSB8ICAgICAgICAgICAgICA0Mjgz NwogIDEwIHwgICAgICAgICAgICAgIDI5MzUxIHwgICAgICAgICAgICAgIDQyOTA5CigxMCByb3dz KQoKVGltZTogNzk2LjQ5NSBtcwoKUGF0Y2hlZDoKCnBvc3RncmVzPSMgc2VsZWN0IGdlbmVyYXRl X3NlcmllcygxLDEwKSBydW4sYmVuY2hfYm1zX25leHRfbWVtYmVyKCcoYiAxIDIgMyA0IDUgNiA3 IDggNjQpJywgMTAwMDAwMCkvMTAwMCBhcyBibXNfbmV4dF9tZW1iZXJfdXMsIGJlbmNoX2Jtc19w cmV2X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4IDY0KScsIDEwMDAwMDApLzEwMDAgYXMgYm1z X3ByZXZfbWVtYmVyX3VzOwogcnVuIHwgYm1zX25leHRfbWVtYmVyX3VzIHwgYm1zX3ByZXZfbWVt YmVyX3VzCi0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg IDEgfCAgICAgICAgICAgICAgMjY3NDEgfCAgICAgICAgICAgICAgMzM1MzcKICAgMiB8ICAgICAg ICAgICAgICAyNjA5NCB8ICAgICAgICAgICAgICAzMzU5MAogICAzIHwgICAgICAgICAgICAgIDI2 MDg3IHwgICAgICAgICAgICAgIDMzNzI0CiAgIDQgfCAgICAgICAgICAgICAgMjYyNzYgfCAgICAg ICAgICAgICAgMzM4NjgKICAgNSB8ICAgICAgICAgICAgICAyNjM0NiB8ICAgICAgICAgICAgICAz Mzk0MwogICA2IHwgICAgICAgICAgICAgIDI2NDMzIHwgICAgICAgICAgICAgIDMzODE1CiAgIDcg fCAgICAgICAgICAgICAgMjYzMjQgfCAgICAgICAgICAgICAgMzM5MjcKICAgOCB8ICAgICAgICAg ICAgICAyNjI3NCB8ICAgICAgICAgICAgICAzMzg5MwogICA5IHwgICAgICAgICAgICAgIDI2MzUw IHwgICAgICAgICAgICAgIDMzODc4CiAgMTAgfCAgICAgICAgICAgICAgMjYzMDQgfCAgICAgICAg ICAgICAgMzM4NDEKKDEwIHJvd3MpCgpUaW1lOiA2NjEuOTI0IG1zCnBvc3RncmVzPSMgc2VsZWN0 IGdlbmVyYXRlX3NlcmllcygxLDEwKSBydW4sYmVuY2hfYm1zX25leHRfbWVtYmVyKCcoYiAxIDIg MyA0IDUgNiA3IDggNjQpJywgMTAwMDAwMCkvMTAwMCBhcyBibXNfbmV4dF9tZW1iZXJfdXMsIGJl bmNoX2Jtc19wcmV2X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4IDY0KScsIDEwMDAwMDApLzEw MDAgYXMgYm1zX3ByZXZfbWVtYmVyX3VzOwogcnVuIHwgYm1zX25leHRfbWVtYmVyX3VzIHwgYm1z X3ByZXZfbWVtYmVyX3VzCi0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgIDEgfCAgICAgICAgICAgICAgMjY1MDIgfCAgICAgICAgICAgICAgMzM1MjMKICAg MiB8ICAgICAgICAgICAgICAyNjE3MyB8ICAgICAgICAgICAgICAzMzYzNQogICAzIHwgICAgICAg ICAgICAgIDI2MTg4IHwgICAgICAgICAgICAgIDMzNzcyCiAgIDQgfCAgICAgICAgICAgICAgMjYy OTAgfCAgICAgICAgICAgICAgMzM3NjcKICAgNSB8ICAgICAgICAgICAgICAyNjMyNSB8ICAgICAg ICAgICAgICAzMzkzNQogICA2IHwgICAgICAgICAgICAgIDI2MzI2IHwgICAgICAgICAgICAgIDMz OTUxCiAgIDcgfCAgICAgICAgICAgICAgMjYzMzUgfCAgICAgICAgICAgICAgMzM4ODMKICAgOCB8 ICAgICAgICAgICAgICAyNjU3MSB8ICAgICAgICAgICAgICAzMzg4NAogICA5IHwgICAgICAgICAg ICAgIDI2NDcyIHwgICAgICAgICAgICAgIDMzODM3CiAgMTAgfCAgICAgICAgICAgICAgMjYyNzcg fCAgICAgICAgICAgICAgMzM5MTkKKDEwIHJvd3MpCgpUaW1lOiA2NjIuNDIyIG1zCgoKQ2hhbydz IGlkZWE6Cgpwb3N0Z3Jlcz0jIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgcnVuLGJlbmNo X2Jtc19uZXh0X21lbWJlcignKGIgMSAyIDMgNCA1IDYgNyA4IDY0KScsIDEwMDAwMDApLzEwMDAg YXMgYm1zX25leHRfbWVtYmVyX3VzLCBiZW5jaF9ibXNfcHJldl9tZW1iZXIoJyhiIDEgMiAzIDQg NSA2IDcgOCA2NCknLCAxMDAwMDAwKS8xMDAwIGFzIGJtc19wcmV2X21lbWJlcl91czsKIHJ1biB8 IGJtc19uZXh0X21lbWJlcl91cyB8IGJtc19wcmV2X21lbWJlcl91cwotLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLQogICAxIHwgICAgICAgICAgICAgIDM0ODY1 IHwgICAgICAgICAgICAgIDQyNTk5CiAgIDIgfCAgICAgICAgICAgICAgMzQ1NDcgfCAgICAgICAg ICAgICAgNDI4MTcKICAgMyB8ICAgICAgICAgICAgICAzNDYyMyB8ICAgICAgICAgICAgICA0Mjk0 OAogICA0IHwgICAgICAgICAgICAgIDM0Njg5IHwgICAgICAgICAgICAgIDQyOTU0CiAgIDUgfCAg ICAgICAgICAgICAgMzQ3MzMgfCAgICAgICAgICAgICAgNDI5MjgKICAgNiB8ICAgICAgICAgICAg ICAzNDczMSB8ICAgICAgICAgICAgICA0Mjg0NQogICA3IHwgICAgICAgICAgICAgIDM0NzI3IHwg ICAgICAgICAgICAgIDQyOTY3CiAgIDggfCAgICAgICAgICAgICAgMzQ3NjMgfCAgICAgICAgICAg ICAgNDMwMTQKICAgOSB8ICAgICAgICAgICAgICAzNDc3NSB8ICAgICAgICAgICAgICA0Mjk4Nwog IDEwIHwgICAgICAgICAgICAgIDM0Nzg4IHwgICAgICAgICAgICAgIDQzMDM4CigxMCByb3dzKQoK VGltZTogODU0Ljg1MSBtcw== --0000000000007ed5b4064e84cdb7 Content-Type: application/octet-stream; name="bms_fixes.patch" Content-Disposition: attachment; filename="bms_fixes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mni901f90 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2JpdG1hcHNldC5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvYml0bWFwc2V0LmMKaW5kZXggYWMzZTc2M2RlNDMuLjQ2YjRjYTRiMGYxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9iaXRtYXBzZXQuYworKysgYi9zcmMvYmFja2VuZC9ub2Rl cy9iaXRtYXBzZXQuYwpAQCAtMTQ0NCw2ICsxNDQ0LDcgQEAgYm1zX2pvaW4oQml0bWFwc2V0ICph LCBCaXRtYXBzZXQgKmIpCiBpbnQKIGJtc19uZXh0X21lbWJlcihjb25zdCBCaXRtYXBzZXQgKmEs IGludCBwcmV2Yml0KQogeworCWludDY0CQljdXJyYml0OwogCWludAkJCW53b3JkczsKIAliaXRt YXB3b3JkCW1hc2s7CiAKQEAgLTE0NTIsMTMgKzE0NTMsMTMgQEAgYm1zX25leHRfbWVtYmVyKGNv bnN0IEJpdG1hcHNldCAqYSwgaW50IHByZXZiaXQpCiAJaWYgKGEgPT0gTlVMTCkKIAkJcmV0dXJu IC0yOwogCW53b3JkcyA9IGEtPm53b3JkczsKLQlwcmV2Yml0Kys7Ci0JbWFzayA9ICh+KGJpdG1h cHdvcmQpIDApIDw8IEJJVE5VTShwcmV2Yml0KTsKLQlmb3IgKGludCB3b3JkbnVtID0gV09SRE5V TShwcmV2Yml0KTsgd29yZG51bSA8IG53b3Jkczsgd29yZG51bSsrKQorCWN1cnJiaXQgPSAoaW50 NjQpIHByZXZiaXQgKyAxOworCW1hc2sgPSAofihiaXRtYXB3b3JkKSAwKSA8PCBCSVROVU0oY3Vy cmJpdCk7CisJZm9yIChpbnQgd29yZG51bSA9IFdPUkROVU0oY3VycmJpdCk7IHdvcmRudW0gPCBu d29yZHM7IHdvcmRudW0rKykKIAl7CiAJCWJpdG1hcHdvcmQJdyA9IGEtPndvcmRzW3dvcmRudW1d OwogCi0JCS8qIGlnbm9yZSBiaXRzIGJlZm9yZSBwcmV2Yml0ICovCisJCS8qIGlnbm9yZSBiaXRz IGJlZm9yZSBjdXJyYml0ICovCiAJCXcgJj0gbWFzazsKIAogCQlpZiAodyAhPSAwKQpAQCAtMTUw NSw2ICsxNTA2LDcgQEAgaW50CiBibXNfcHJldl9tZW1iZXIoY29uc3QgQml0bWFwc2V0ICphLCBp bnQgcHJldmJpdCkKIHsKIAlpbnQJCQl1c2hpZnRiaXRzOworCXVpbnQzMgkJY3VycmJpdDsKIAli aXRtYXB3b3JkCW1hc2s7CiAKIAlBc3NlcnQoYm1zX2lzX3ZhbGlkX3NldChhKSk7CkBAIC0xNTE3 LDE4ICsxNTE5LDE4IEBAIGJtc19wcmV2X21lbWJlcihjb25zdCBCaXRtYXBzZXQgKmEsIGludCBw cmV2Yml0KQogCQlyZXR1cm4gLTI7CiAKIAkvKiBWYWxpZGF0ZSBjYWxsZXJzIGRpZG4ndCBnaXZl IHVzIHNvbWV0aGluZyBvdXQgb2YgcmFuZ2UgKi8KLQlBc3NlcnQocHJldmJpdCA8PSBhLT5ud29y ZHMgKiBCSVRTX1BFUl9CSVRNQVBXT1JEKTsKKwlBc3NlcnQocHJldmJpdCA8PSAoaW50NjQpIGEt Pm53b3JkcyAqIEJJVFNfUEVSX0JJVE1BUFdPUkQpOwogCUFzc2VydChwcmV2Yml0ID49IC0xKTsK IAogCS8qIHRyYW5zZm9ybSAtMSB0byB0aGUgaGlnaGVzdCBwb3NzaWJsZSBiaXQgd2UgY291bGQg aGF2ZSBzZXQgKi8KIAlpZiAocHJldmJpdCA9PSAtMSkKLQkJcHJldmJpdCA9IGEtPm53b3JkcyAq IEJJVFNfUEVSX0JJVE1BUFdPUkQgLSAxOworCQljdXJyYml0ID0gKHVpbnQzMikgYS0+bndvcmRz ICogQklUU19QRVJfQklUTUFQV09SRCAtIDE7CiAJZWxzZQotCQlwcmV2Yml0LS07CisJCWN1cnJi aXQgPSBwcmV2Yml0IC0gMTsKIAotCXVzaGlmdGJpdHMgPSBCSVRTX1BFUl9CSVRNQVBXT1JEIC0g KEJJVE5VTShwcmV2Yml0KSArIDEpOworCXVzaGlmdGJpdHMgPSBCSVRTX1BFUl9CSVRNQVBXT1JE IC0gKEJJVE5VTShjdXJyYml0KSArIDEpOwogCW1hc2sgPSAofihiaXRtYXB3b3JkKSAwKSA+PiB1 c2hpZnRiaXRzOwotCWZvciAoaW50IHdvcmRudW0gPSBXT1JETlVNKHByZXZiaXQpOyB3b3JkbnVt ID49IDA7IHdvcmRudW0tLSkKKwlmb3IgKGludCB3b3JkbnVtID0gV09SRE5VTShjdXJyYml0KTsg d29yZG51bSA+PSAwOyB3b3JkbnVtLS0pCiAJewogCQliaXRtYXB3b3JkCXcgPSBhLT53b3Jkc1t3 b3JkbnVtXTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90 ZXN0X2JpdG1hcHNldC0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv dGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwKaW5kZXggNjY2OGJjZWY5YTkuLmQ2YzBmNzM5ZTEzIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0 LS0xLjAuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRt YXBzZXQtLTEuMC5zcWwKQEAgLTMsNiArMywxNSBAQAogLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlz IHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KIFxlY2hv IFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2JpdG1hcHNldCIgdG8gbG9hZCB0aGlzIGZpbGUu IFxxdWl0CiAKKy0tIEJlbmNobWFyayBmdW5jdGlvbnMKK0NSRUFURSBGVU5DVElPTiBiZW5jaF9i bXNfbmV4dF9tZW1iZXIodGV4dCwgaW50ZWdlcikKK1JFVFVSTlMgYmlnaW50CitBUyAnTU9EVUxF X1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gYmVuY2hfYm1zX3ByZXZf bWVtYmVyKHRleHQsIGludGVnZXIpCitSRVRVUk5TIGJpZ2ludAorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKKwogLS0gQml0bWFwc2V0IEFQSSBmdW5jdGlvbnMKIENSRUFURSBGVU5D VElPTiB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbihpbnRlZ2VyKQogUkVUVVJOUyB0ZXh0IFNUUklD VApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1h cHNldC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5j CmluZGV4IDRmZTIyZWU2NGQyLi45OTAzNDdhMGYyMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2lu Y2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDx0aW1l Lmg+CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbW9uL3BnX3By bmcuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMjcsOCArMjgsMTMgQEAKICNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogCisK IFBHX01PRFVMRV9NQUdJQzsKIAorLyogQmVuY2htYXJrIGZ1bmN0aW9ucyAqLworUEdfRlVOQ1RJ T05fSU5GT19WMShiZW5jaF9ibXNfbmV4dF9tZW1iZXIpOworUEdfRlVOQ1RJT05fSU5GT19WMShi ZW5jaF9ibXNfcHJldl9tZW1iZXIpOworCiAvKiBCaXRtYXBzZXQgQVBJIGZ1bmN0aW9ucyBpbiBv cmRlciBvZiBhcHBlYXJhbmNlIGluIGJpdG1hcHNldC5jICovCiBQR19GVU5DVElPTl9JTkZPX1Yx KHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNf YWRkX21lbWJlcik7CkBAIC0xMDUsNiArMTExLDczIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEodGVz dF9yYW5kb21fc2hpZnRfb3BlcmF0aW9ucyk7CiAjZGVmaW5lIFBHX1JFVFVSTl9CSVRNQVBTRVRf QVNfVEVYVChibXMpIFwKIAlQR19SRVRVUk5fVEVYVF9QKEJJVE1BUFNFVF9UT19URVhUKGJtcykp CiAKKyNkZWZpbmUgTkFOT1NFQ19QRVJfU0VDIDEwMDAwMDAwMDAKKworaW50NjQgZ2V0X2Nsb2Nr X2RpZmYoc3RydWN0IHRpbWVzcGVjKiB0MSwgc3RydWN0IHRpbWVzcGVjKiB0Mik7CisKK2ludDY0 CitnZXRfY2xvY2tfZGlmZihzdHJ1Y3QgdGltZXNwZWMqIHQxLCBzdHJ1Y3QgdGltZXNwZWMqIHQy KQoreworCWludDY0X3QgbmFub3NlYyA9ICh0MS0+dHZfc2VjIC0gdDItPnR2X3NlYykgKiBOQU5P U0VDX1BFUl9TRUM7CisJbmFub3NlYyArPSAodDEtPnR2X25zZWMgLSB0Mi0+dHZfbnNlYyk7CisK KwlyZXR1cm4gbmFub3NlYzsKK30KKworRGF0dW0KK2JlbmNoX2Jtc19uZXh0X21lbWJlcihQR19G VU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCogYm1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgw KTsKKwlpbnQzMglsb29wcyA9IFBHX0dFVEFSR19JTlQzMigxKTsKKworCXN0cnVjdCB0aW1lc3Bl YyBzdGFydCwgZW5kOworCWludDY0IG5hbm9zZWNvbmRzOworCWludDY0IGNvdW50ZXIgPSAwOwor CisJY2xvY2tfZ2V0dGltZShDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsICZzdGFydCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IGxvb3BzOyBpKyspCisJeworCQlpbnQgbSA9IC0xOworCQl3aGls ZSAoKG0gPSBibXNfbmV4dF9tZW1iZXIoYm1zLCBtKSkgPj0gMCkKKwkJeworCQkJY291bnRlcisr OworCQl9CisJfQorCisJY2xvY2tfZ2V0dGltZShDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsICZl bmQpOworCW5hbm9zZWNvbmRzID0gZ2V0X2Nsb2NrX2RpZmYoJmVuZCwgJnN0YXJ0KTsKKworCVBH X1JFVFVSTl9JTlQ2NChuYW5vc2Vjb25kcyk7Cit9CisKK0RhdHVtCitiZW5jaF9ibXNfcHJldl9t ZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQqIGJtcyA9IFBHX0FSR19HRVRC SVRNQVBTRVQoMCk7CisJaW50MzIJbG9vcHMgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKKwlzdHJ1 Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKwlpbnQ2NCBuYW5vc2Vjb25kczsKKwlpbnQ2NCBjb3Vu dGVyID0gMDsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lELCAmc3Rh cnQpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBsb29wczsgaSsrKQorCXsKKwkJaW50IG0gPSAt MTsKKwkJd2hpbGUgKChtID0gYm1zX3ByZXZfbWVtYmVyKGJtcywgbSkpID49IDApCisJCXsKKwkJ CWNvdW50ZXIrKzsKKwkJfQorCX0KKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUFJPQ0VTU19DUFVU SU1FX0lELCAmZW5kKTsKKwluYW5vc2Vjb25kcyA9IGdldF9jbG9ja19kaWZmKCZlbmQsICZzdGFy dCk7CisKKwlQR19SRVRVUk5fSU5UNjQobmFub3NlY29uZHMpOworfQorCiAvKgogICogSW5kaXZp ZHVhbCB0ZXN0IGZ1bmN0aW9ucyBmb3IgZWFjaCBiaXRtYXBzZXQgQVBJIGZ1bmN0aW9uCiAgKgo= --0000000000007ed5b4064e84cdb7--