Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDQd8-00076H-3I for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Jan 2023 13:50:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pDQd6-0006Oz-W1 for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Jan 2023 13:50:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDQd6-0006Nv-De for pgsql-hackers@lists.postgresql.org; Thu, 05 Jan 2023 13:50:00 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pDQd3-0005W2-DG for pgsql-hackers@lists.postgresql.org; Thu, 05 Jan 2023 13:49:59 +0000 Received: by mail-wm1-x32c.google.com with SMTP id bi26-20020a05600c3d9a00b003d3404a89faso2288699wmb.1 for ; Thu, 05 Jan 2023 05:49:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=/c6YgykaOOCeBiwFV7JZUPntln9tjJM3DwmukJyWfog=; b=kNWJE1SdU1ZrLOMHjKXnxS6MA/5QmG+ySoV8/styThXpTuTdhg7m+mfUxTJgnCtjnV nHucO3Y7/hcNufocLICTKr7PuFFGg8PuNYDe6OfzyNUf8U+DQ5u0t+1l3pXEdrU3pKDS YS2TYI4sozG8s8XSYj3W4k771nHkMmwGiSD9dTD5xACpAvnnkbRz5A6LRyrH1XVdOF1O 01S+qhS7eX0IUBg6suopo25E/p9XfiEXAZ+H77HciXAy4JuzC3Ud5tNNb4Csd7uU/yJo 1GfoFbCfRA2dbiii6vxCwRLYL/AIpa+axTzaBI6BA0abe6AnuwpH9jIa49cZ/P1Dh2as ZwXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/c6YgykaOOCeBiwFV7JZUPntln9tjJM3DwmukJyWfog=; b=er8AO6yzSaLqnyPUStkzRQInjy8iOjhB7VIvR8+3blmfKnqft6gYhuevxLdBBwwHrR oTGNpIFVo2WFi4hvudljPcjXbHG/d2rsiQxIUgT7QgGnq9lSnkWOpy6Yvnm1POpQsf+0 amy6szvK/sAQ23/xV0zSxpRrGKRY9F2gIC2/qnqBYfAIUGHB9iQ5H4/Zpg+pyMYRySpQ idsdPdpj3NGTYIYmaWK2KnsTaFQur2ZT980lJABOn+fNDdjBZNTjFpASRZtAlAL6vEDK kidnsnbdUQtITn0E/gBWy1bYMKnIjd3hBTID1a4IN036YIvVf6g/LGhSz7NLzkfhzzRS 1joQ== X-Gm-Message-State: AFqh2kouUT3Dlbraa9HHepMG+YSUy31WKj5emo2vk2hX63h98/EwhpPW lAsZANPv7GzTfx6SJtsjfJSoupH71dlLNw== X-Google-Smtp-Source: AMrXdXutb/hbsQVdLzakmaC4MXr3CxbllEXz5WUL0FU6aOs7GiSNyjdv8ulSfNViV0GeuJnaOq51LQ== X-Received: by 2002:a05:600c:4191:b0:3d7:9ae7:e4f2 with SMTP id p17-20020a05600c419100b003d79ae7e4f2mr38481142wmh.35.1672926595987; Thu, 05 Jan 2023 05:49:55 -0800 (PST) Received: from [10.95.75.13] ([54.239.6.180]) by smtp.gmail.com with ESMTPSA id g12-20020a05600c310c00b003c70191f267sm2660272wmo.39.2023.01.05.05.49.55 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 05 Jan 2023 05:49:55 -0800 (PST) Content-Type: multipart/mixed; boundary="------------zfSF2RxPCMlb9VfpdurVedGr" Message-ID: <89606d96-cd94-af74-18f3-c7ab2b684ba2@gmail.com> Date: Thu, 5 Jan 2023 14:48:39 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Content-Language: en-US From: "Drouvot, Bertrand" Subject: Generate pg_stat_get_xact*() functions with Macros To: PostgreSQL Hackers List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------zfSF2RxPCMlb9VfpdurVedGr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi hackers, Please find attached a patch proposal to $SUBJECT. This is the same kind of work that has been done in 83a1a1b566 and 8018ffbf58 but this time for the pg_stat_get_xact*() functions (as suggested by Andres in [1]). The function names remain the same, but some fields have to be renamed. While at it, I also took the opportunity to create the macros for pg_stat_get_xact_function_total_time(), pg_stat_get_xact_function_self_time() and pg_stat_get_function_total_time(), pg_stat_get_function_self_time() (even if the same code pattern is only repeated two 2 times). Now that this patch renames some fields, I think that, for consistency, those ones should be renamed too (aka remove the f_ and t_ prefixes): PgStat_FunctionCounts.f_numcalls PgStat_StatFuncEntry.f_numcalls PgStat_TableCounts.t_truncdropped PgStat_TableCounts.t_delta_live_tuples PgStat_TableCounts.t_delta_dead_tuples PgStat_TableCounts.t_changed_tuples But I think it would be better to do it in a follow-up patch (once this one get committed). [1]: https://www.postgresql.org/message-id/20230105002733.ealhzubjaiqis6ua%40awork3.anarazel.de Looking forward to your feedback, Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------zfSF2RxPCMlb9VfpdurVedGr Content-Type: text/plain; charset=UTF-8; name="v1-0001-generate-pg_stat_get_xact-functions-with-macros.patch" Content-Disposition: attachment; filename*0="v1-0001-generate-pg_stat_get_xact-functions-with-macros.patc"; filename*1="h" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlv bi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2Z1bmN0aW9uLmMKaW5k ZXggNjEzOWEyN2ZlZS4uNzdhZjg1NDFlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvcGdzdGF0X2Z1bmN0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvcGdzdGF0X2Z1bmN0aW9uLmMKQEAgLTEyNCw3ICsxMjQsNyBAQCBwZ3N0YXRf aW5pdF9mdW5jdGlvbl91c2FnZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAlmY3UtPmZz ID0gJnBlbmRpbmctPmZfY291bnRzOwogCiAJLyogc2F2ZSBzdGF0cyBmb3IgdGhpcyBmdW5j dGlvbiwgbGF0ZXIgdXNlZCB0byBjb21wZW5zYXRlIGZvciByZWN1cnNpb24gKi8KLQlmY3Ut PnNhdmVfZl90b3RhbF90aW1lID0gcGVuZGluZy0+Zl9jb3VudHMuZl90b3RhbF90aW1lOwor CWZjdS0+c2F2ZV90b3RhbF90aW1lID0gcGVuZGluZy0+Zl9jb3VudHMudG90YWxfdGltZTsK IAogCS8qIHNhdmUgY3VycmVudCBiYWNrZW5kLXdpZGUgdG90YWwgdGltZSAqLwogCWZjdS0+ c2F2ZV90b3RhbCA9IHRvdGFsX2Z1bmNfdGltZTsKQEAgLTE2OCwxOSArMTY4LDE5IEBAIHBn c3RhdF9lbmRfZnVuY3Rpb25fdXNhZ2UoUGdTdGF0X0Z1bmN0aW9uQ2FsbFVzYWdlICpmY3Us IGJvb2wgZmluYWxpemUpCiAJSU5TVFJfVElNRV9BREQodG90YWxfZnVuY190aW1lLCBmX3Nl bGYpOwogCiAJLyoKLQkgKiBDb21wdXRlIHRoZSBuZXcgZl90b3RhbF90aW1lIGFzIHRoZSB0 b3RhbCBlbGFwc2VkIHRpbWUgYWRkZWQgdG8gdGhlCi0JICogcHJlLWNhbGwgdmFsdWUgb2Yg Zl90b3RhbF90aW1lLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQKKwkgKiBDb21wdXRl IHRoZSBuZXcgdG90YWxfdGltZSBhcyB0aGUgdG90YWwgZWxhcHNlZCB0aW1lIGFkZGVkIHRv IHRoZQorCSAqIHByZS1jYWxsIHZhbHVlIG9mIHRvdGFsX3RpbWUuICBUaGlzIGlzIG5lY2Vz c2FyeSB0byBhdm9pZAogCSAqIGRvdWJsZS1jb3VudGluZyBhbnkgdGltZSB0YWtlbiBieSBy ZWN1cnNpdmUgY2FsbHMgb2YgbXlzZWxmLiAgKFdlIGRvCiAJICogbm90IG5lZWQgYW55IHNp bWlsYXIga2x1Z2UgZm9yIHNlbGYgdGltZSwgc2luY2UgdGhhdCBhbHJlYWR5IGV4Y2x1ZGVz CiAJICogYW55IHJlY3Vyc2l2ZSBjYWxscy4pCiAJICovCi0JSU5TVFJfVElNRV9BREQoZl90 b3RhbCwgZmN1LT5zYXZlX2ZfdG90YWxfdGltZSk7CisJSU5TVFJfVElNRV9BREQoZl90b3Rh bCwgZmN1LT5zYXZlX3RvdGFsX3RpbWUpOwogCiAJLyogdXBkYXRlIGNvdW50ZXJzIGluIGZ1 bmN0aW9uIHN0YXRzIHRhYmxlICovCiAJaWYgKGZpbmFsaXplKQogCQlmcy0+Zl9udW1jYWxs cysrOwotCWZzLT5mX3RvdGFsX3RpbWUgPSBmX3RvdGFsOwotCUlOU1RSX1RJTUVfQUREKGZz LT5mX3NlbGZfdGltZSwgZl9zZWxmKTsKKwlmcy0+dG90YWxfdGltZSA9IGZfdG90YWw7CisJ SU5TVFJfVElNRV9BREQoZnMtPnNlbGZfdGltZSwgZl9zZWxmKTsKIH0KIAogLyoKQEAgLTIw NCwxMCArMjA0LDEwIEBAIHBnc3RhdF9mdW5jdGlvbl9mbHVzaF9jYihQZ1N0YXRfRW50cnlS ZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBmYWxzZTsKIAogCXNoZnVu Y2VudC0+c3RhdHMuZl9udW1jYWxscyArPSBsb2NhbGVudC0+Zl9jb3VudHMuZl9udW1jYWxs czsKLQlzaGZ1bmNlbnQtPnN0YXRzLmZfdG90YWxfdGltZSArPQotCQlJTlNUUl9USU1FX0dF VF9NSUNST1NFQyhsb2NhbGVudC0+Zl9jb3VudHMuZl90b3RhbF90aW1lKTsKLQlzaGZ1bmNl bnQtPnN0YXRzLmZfc2VsZl90aW1lICs9Ci0JCUlOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKGxv Y2FsZW50LT5mX2NvdW50cy5mX3NlbGZfdGltZSk7CisJc2hmdW5jZW50LT5zdGF0cy50b3Rh bF90aW1lICs9CisJCUlOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKGxvY2FsZW50LT5mX2NvdW50 cy50b3RhbF90aW1lKTsKKwlzaGZ1bmNlbnQtPnN0YXRzLnNlbGZfdGltZSArPQorCQlJTlNU Ul9USU1FX0dFVF9NSUNST1NFQyhsb2NhbGVudC0+Zl9jb3VudHMuc2VsZl90aW1lKTsKIAog CXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYwppbmRleCAxNzMwNDI1ZGUxLi42MjVj ZDJhOTZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRf cmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVs YXRpb24uYwpAQCAtMzcxLDkgKzM3MSw5IEBAIHBnc3RhdF9jb3VudF9oZWFwX3VwZGF0ZShS ZWxhdGlvbiByZWwsIGJvb2wgaG90KQogCQllbnN1cmVfdGFic3RhdF94YWN0X2xldmVsKHBn c3RhdF9pbmZvKTsKIAkJcGdzdGF0X2luZm8tPnRyYW5zLT50dXBsZXNfdXBkYXRlZCsrOwog Ci0JCS8qIHRfdHVwbGVzX2hvdF91cGRhdGVkIGlzIG5vbnRyYW5zYWN0aW9uYWwsIHNvIGp1 c3QgYWR2YW5jZSBpdCAqLworCQkvKiB0dXBsZXNfaG90X3VwZGF0ZWQgaXMgbm9udHJhbnNh Y3Rpb25hbCwgc28ganVzdCBhZHZhbmNlIGl0ICovCiAJCWlmIChob3QpCi0JCQlwZ3N0YXRf aW5mby0+dF9jb3VudHMudF90dXBsZXNfaG90X3VwZGF0ZWQrKzsKKwkJCXBnc3RhdF9pbmZv LT50X2NvdW50cy50dXBsZXNfaG90X3VwZGF0ZWQrKzsKIAl9CiB9CiAKQEAgLTUwMSw5ICs1 MDEsOSBAQCBBdEVPWGFjdF9QZ1N0YXRfUmVsYXRpb25zKFBnU3RhdF9TdWJYYWN0U3RhdHVz ICp4YWN0X3N0YXRlLCBib29sIGlzQ29tbWl0KQogCQlpZiAoIWlzQ29tbWl0KQogCQkJcmVz dG9yZV90cnVuY2Ryb3BfY291bnRlcnModHJhbnMpOwogCQkvKiBjb3VudCBhdHRlbXB0ZWQg YWN0aW9ucyByZWdhcmRsZXNzIG9mIGNvbW1pdC9hYm9ydCAqLwotCQl0YWJzdGF0LT50X2Nv dW50cy50X3R1cGxlc19pbnNlcnRlZCArPSB0cmFucy0+dHVwbGVzX2luc2VydGVkOwotCQl0 YWJzdGF0LT50X2NvdW50cy50X3R1cGxlc191cGRhdGVkICs9IHRyYW5zLT50dXBsZXNfdXBk YXRlZDsKLQkJdGFic3RhdC0+dF9jb3VudHMudF90dXBsZXNfZGVsZXRlZCArPSB0cmFucy0+ dHVwbGVzX2RlbGV0ZWQ7CisJCXRhYnN0YXQtPnRfY291bnRzLnR1cGxlc19pbnNlcnRlZCAr PSB0cmFucy0+dHVwbGVzX2luc2VydGVkOworCQl0YWJzdGF0LT50X2NvdW50cy50dXBsZXNf dXBkYXRlZCArPSB0cmFucy0+dHVwbGVzX3VwZGF0ZWQ7CisJCXRhYnN0YXQtPnRfY291bnRz LnR1cGxlc19kZWxldGVkICs9IHRyYW5zLT50dXBsZXNfZGVsZXRlZDsKIAkJaWYgKGlzQ29t bWl0KQogCQl7CiAJCQl0YWJzdGF0LT50X2NvdW50cy50X3RydW5jZHJvcHBlZCA9IHRyYW5z LT50cnVuY2Ryb3BwZWQ7CkBAIC02MDcsOSArNjA3LDkgQEAgQXRFT1N1YlhhY3RfUGdTdGF0 X1JlbGF0aW9ucyhQZ1N0YXRfU3ViWGFjdFN0YXR1cyAqeGFjdF9zdGF0ZSwgYm9vbCBpc0Nv bW1pdCwgaW4KIAkJCS8qIGZpcnN0IHJlc3RvcmUgdmFsdWVzIG9ibGl0ZXJhdGVkIGJ5IHRy dW5jYXRlL2Ryb3AgKi8KIAkJCXJlc3RvcmVfdHJ1bmNkcm9wX2NvdW50ZXJzKHRyYW5zKTsK IAkJCS8qIGNvdW50IGF0dGVtcHRlZCBhY3Rpb25zIHJlZ2FyZGxlc3Mgb2YgY29tbWl0L2Fi b3J0ICovCi0JCQl0YWJzdGF0LT50X2NvdW50cy50X3R1cGxlc19pbnNlcnRlZCArPSB0cmFu cy0+dHVwbGVzX2luc2VydGVkOwotCQkJdGFic3RhdC0+dF9jb3VudHMudF90dXBsZXNfdXBk YXRlZCArPSB0cmFucy0+dHVwbGVzX3VwZGF0ZWQ7Ci0JCQl0YWJzdGF0LT50X2NvdW50cy50 X3R1cGxlc19kZWxldGVkICs9IHRyYW5zLT50dXBsZXNfZGVsZXRlZDsKKwkJCXRhYnN0YXQt PnRfY291bnRzLnR1cGxlc19pbnNlcnRlZCArPSB0cmFucy0+dHVwbGVzX2luc2VydGVkOwor CQkJdGFic3RhdC0+dF9jb3VudHMudHVwbGVzX3VwZGF0ZWQgKz0gdHJhbnMtPnR1cGxlc191 cGRhdGVkOworCQkJdGFic3RhdC0+dF9jb3VudHMudHVwbGVzX2RlbGV0ZWQgKz0gdHJhbnMt PnR1cGxlc19kZWxldGVkOwogCQkJLyogaW5zZXJ0ZWQgdHVwbGVzIGFyZSBkZWFkLCBkZWxl dGVkIHR1cGxlcyBhcmUgdW5hZmZlY3RlZCAqLwogCQkJdGFic3RhdC0+dF9jb3VudHMudF9k ZWx0YV9kZWFkX3R1cGxlcyArPQogCQkJCXRyYW5zLT50dXBsZXNfaW5zZXJ0ZWQgKyB0cmFu cy0+dHVwbGVzX3VwZGF0ZWQ7CkBAIC02OTEsOSArNjkxLDkgQEAgcGdzdGF0X3R3b3BoYXNl X3Bvc3Rjb21taXQoVHJhbnNhY3Rpb25JZCB4aWQsIHVpbnQxNiBpbmZvLAogCXBnc3RhdF9p bmZvID0gcGdzdGF0X3ByZXBfcmVsYXRpb25fcGVuZGluZyhyZWMtPnRfaWQsIHJlYy0+dF9z aGFyZWQpOwogCiAJLyogU2FtZSBtYXRoIGFzIGluIEF0RU9YYWN0X1BnU3RhdCwgY29tbWl0 IGNhc2UgKi8KLQlwZ3N0YXRfaW5mby0+dF9jb3VudHMudF90dXBsZXNfaW5zZXJ0ZWQgKz0g cmVjLT50dXBsZXNfaW5zZXJ0ZWQ7Ci0JcGdzdGF0X2luZm8tPnRfY291bnRzLnRfdHVwbGVz X3VwZGF0ZWQgKz0gcmVjLT50dXBsZXNfdXBkYXRlZDsKLQlwZ3N0YXRfaW5mby0+dF9jb3Vu dHMudF90dXBsZXNfZGVsZXRlZCArPSByZWMtPnR1cGxlc19kZWxldGVkOworCXBnc3RhdF9p bmZvLT50X2NvdW50cy50dXBsZXNfaW5zZXJ0ZWQgKz0gcmVjLT50dXBsZXNfaW5zZXJ0ZWQ7 CisJcGdzdGF0X2luZm8tPnRfY291bnRzLnR1cGxlc191cGRhdGVkICs9IHJlYy0+dHVwbGVz X3VwZGF0ZWQ7CisJcGdzdGF0X2luZm8tPnRfY291bnRzLnR1cGxlc19kZWxldGVkICs9IHJl Yy0+dHVwbGVzX2RlbGV0ZWQ7CiAJcGdzdGF0X2luZm8tPnRfY291bnRzLnRfdHJ1bmNkcm9w cGVkID0gcmVjLT50X3RydW5jZHJvcHBlZDsKIAlpZiAocmVjLT50X3RydW5jZHJvcHBlZCkK IAl7CkBAIC03MzMsOSArNzMzLDkgQEAgcGdzdGF0X3R3b3BoYXNlX3Bvc3RhYm9ydChUcmFu c2FjdGlvbklkIHhpZCwgdWludDE2IGluZm8sCiAJCXJlYy0+dHVwbGVzX3VwZGF0ZWQgPSBy ZWMtPnVwZGF0ZWRfcHJlX3RydW5jZHJvcDsKIAkJcmVjLT50dXBsZXNfZGVsZXRlZCA9IHJl Yy0+ZGVsZXRlZF9wcmVfdHJ1bmNkcm9wOwogCX0KLQlwZ3N0YXRfaW5mby0+dF9jb3VudHMu dF90dXBsZXNfaW5zZXJ0ZWQgKz0gcmVjLT50dXBsZXNfaW5zZXJ0ZWQ7Ci0JcGdzdGF0X2lu Zm8tPnRfY291bnRzLnRfdHVwbGVzX3VwZGF0ZWQgKz0gcmVjLT50dXBsZXNfdXBkYXRlZDsK LQlwZ3N0YXRfaW5mby0+dF9jb3VudHMudF90dXBsZXNfZGVsZXRlZCArPSByZWMtPnR1cGxl c19kZWxldGVkOworCXBnc3RhdF9pbmZvLT50X2NvdW50cy50dXBsZXNfaW5zZXJ0ZWQgKz0g cmVjLT50dXBsZXNfaW5zZXJ0ZWQ7CisJcGdzdGF0X2luZm8tPnRfY291bnRzLnR1cGxlc191 cGRhdGVkICs9IHJlYy0+dHVwbGVzX3VwZGF0ZWQ7CisJcGdzdGF0X2luZm8tPnRfY291bnRz LnR1cGxlc19kZWxldGVkICs9IHJlYy0+dHVwbGVzX2RlbGV0ZWQ7CiAJcGdzdGF0X2luZm8t PnRfY291bnRzLnRfZGVsdGFfZGVhZF90dXBsZXMgKz0KIAkJcmVjLT50dXBsZXNfaW5zZXJ0 ZWQgKyByZWMtPnR1cGxlc191cGRhdGVkOwogfQpAQCAtNzc5LDE5ICs3NzksMTkgQEAgcGdz dGF0X3JlbGF0aW9uX2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29s IG5vd2FpdCkKIAkvKiBhZGQgdGhlIHZhbHVlcyB0byB0aGUgc2hhcmVkIGVudHJ5LiAqLwog CXRhYmVudHJ5ID0gJnNodGFic3RhdHMtPnN0YXRzOwogCi0JdGFiZW50cnktPm51bXNjYW5z ICs9IGxzdGF0cy0+dF9jb3VudHMudF9udW1zY2FuczsKLQlpZiAobHN0YXRzLT50X2NvdW50 cy50X251bXNjYW5zKQorCXRhYmVudHJ5LT5udW1zY2FucyArPSBsc3RhdHMtPnRfY291bnRz Lm51bXNjYW5zOworCWlmIChsc3RhdHMtPnRfY291bnRzLm51bXNjYW5zKQogCXsKIAkJVGlt ZXN0YW1wVHogdCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvblN0b3BUaW1lc3RhbXAoKTsKIAkJ aWYgKHQgPiB0YWJlbnRyeS0+bGFzdHNjYW4pCiAJCQl0YWJlbnRyeS0+bGFzdHNjYW4gPSB0 OwogCX0KLQl0YWJlbnRyeS0+dHVwbGVzX3JldHVybmVkICs9IGxzdGF0cy0+dF9jb3VudHMu dF90dXBsZXNfcmV0dXJuZWQ7Ci0JdGFiZW50cnktPnR1cGxlc19mZXRjaGVkICs9IGxzdGF0 cy0+dF9jb3VudHMudF90dXBsZXNfZmV0Y2hlZDsKLQl0YWJlbnRyeS0+dHVwbGVzX2luc2Vy dGVkICs9IGxzdGF0cy0+dF9jb3VudHMudF90dXBsZXNfaW5zZXJ0ZWQ7Ci0JdGFiZW50cnkt PnR1cGxlc191cGRhdGVkICs9IGxzdGF0cy0+dF9jb3VudHMudF90dXBsZXNfdXBkYXRlZDsK LQl0YWJlbnRyeS0+dHVwbGVzX2RlbGV0ZWQgKz0gbHN0YXRzLT50X2NvdW50cy50X3R1cGxl c19kZWxldGVkOwotCXRhYmVudHJ5LT50dXBsZXNfaG90X3VwZGF0ZWQgKz0gbHN0YXRzLT50 X2NvdW50cy50X3R1cGxlc19ob3RfdXBkYXRlZDsKKwl0YWJlbnRyeS0+dHVwbGVzX3JldHVy bmVkICs9IGxzdGF0cy0+dF9jb3VudHMudHVwbGVzX3JldHVybmVkOworCXRhYmVudHJ5LT50 dXBsZXNfZmV0Y2hlZCArPSBsc3RhdHMtPnRfY291bnRzLnR1cGxlc19mZXRjaGVkOworCXRh YmVudHJ5LT50dXBsZXNfaW5zZXJ0ZWQgKz0gbHN0YXRzLT50X2NvdW50cy50dXBsZXNfaW5z ZXJ0ZWQ7CisJdGFiZW50cnktPnR1cGxlc191cGRhdGVkICs9IGxzdGF0cy0+dF9jb3VudHMu dHVwbGVzX3VwZGF0ZWQ7CisJdGFiZW50cnktPnR1cGxlc19kZWxldGVkICs9IGxzdGF0cy0+ dF9jb3VudHMudHVwbGVzX2RlbGV0ZWQ7CisJdGFiZW50cnktPnR1cGxlc19ob3RfdXBkYXRl ZCArPSBsc3RhdHMtPnRfY291bnRzLnR1cGxlc19ob3RfdXBkYXRlZDsKIAogCS8qCiAJICog SWYgdGFibGUgd2FzIHRydW5jYXRlZC9kcm9wcGVkLCBmaXJzdCByZXNldCB0aGUgbGl2ZS9k ZWFkIGNvdW50ZXJzLgpAQCAtODA2LDkgKzgwNiw5IEBAIHBnc3RhdF9yZWxhdGlvbl9mbHVz aF9jYihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpCiAJdGFiZW50 cnktPmxpdmVfdHVwbGVzICs9IGxzdGF0cy0+dF9jb3VudHMudF9kZWx0YV9saXZlX3R1cGxl czsKIAl0YWJlbnRyeS0+ZGVhZF90dXBsZXMgKz0gbHN0YXRzLT50X2NvdW50cy50X2RlbHRh X2RlYWRfdHVwbGVzOwogCXRhYmVudHJ5LT5tb2Rfc2luY2VfYW5hbHl6ZSArPSBsc3RhdHMt PnRfY291bnRzLnRfY2hhbmdlZF90dXBsZXM7Ci0JdGFiZW50cnktPmluc19zaW5jZV92YWN1 dW0gKz0gbHN0YXRzLT50X2NvdW50cy50X3R1cGxlc19pbnNlcnRlZDsKLQl0YWJlbnRyeS0+ YmxvY2tzX2ZldGNoZWQgKz0gbHN0YXRzLT50X2NvdW50cy50X2Jsb2Nrc19mZXRjaGVkOwot CXRhYmVudHJ5LT5ibG9ja3NfaGl0ICs9IGxzdGF0cy0+dF9jb3VudHMudF9ibG9ja3NfaGl0 OworCXRhYmVudHJ5LT5pbnNfc2luY2VfdmFjdXVtICs9IGxzdGF0cy0+dF9jb3VudHMudHVw bGVzX2luc2VydGVkOworCXRhYmVudHJ5LT5ibG9ja3NfZmV0Y2hlZCArPSBsc3RhdHMtPnRf Y291bnRzLmJsb2Nrc19mZXRjaGVkOworCXRhYmVudHJ5LT5ibG9ja3NfaGl0ICs9IGxzdGF0 cy0+dF9jb3VudHMuYmxvY2tzX2hpdDsKIAogCS8qIENsYW1wIGxpdmVfdHVwbGVzIGluIGNh c2Ugb2YgbmVnYXRpdmUgZGVsdGFfbGl2ZV90dXBsZXMgKi8KIAl0YWJlbnRyeS0+bGl2ZV90 dXBsZXMgPSBNYXgodGFiZW50cnktPmxpdmVfdHVwbGVzLCAwKTsKQEAgLTgxOSwxMyArODE5 LDEzIEBAIHBnc3RhdF9yZWxhdGlvbl9mbHVzaF9jYihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5 X3JlZiwgYm9vbCBub3dhaXQpCiAKIAkvKiBUaGUgZW50cnkgd2FzIHN1Y2Nlc3NmdWxseSBm bHVzaGVkLCBhZGQgdGhlIHNhbWUgdG8gZGF0YWJhc2Ugc3RhdHMgKi8KIAlkYmVudHJ5ID0g cGdzdGF0X3ByZXBfZGF0YWJhc2VfcGVuZGluZyhkYm9pZCk7Ci0JZGJlbnRyeS0+dHVwbGVz X3JldHVybmVkICs9IGxzdGF0cy0+dF9jb3VudHMudF90dXBsZXNfcmV0dXJuZWQ7Ci0JZGJl bnRyeS0+dHVwbGVzX2ZldGNoZWQgKz0gbHN0YXRzLT50X2NvdW50cy50X3R1cGxlc19mZXRj aGVkOwotCWRiZW50cnktPnR1cGxlc19pbnNlcnRlZCArPSBsc3RhdHMtPnRfY291bnRzLnRf dHVwbGVzX2luc2VydGVkOwotCWRiZW50cnktPnR1cGxlc191cGRhdGVkICs9IGxzdGF0cy0+ dF9jb3VudHMudF90dXBsZXNfdXBkYXRlZDsKLQlkYmVudHJ5LT50dXBsZXNfZGVsZXRlZCAr PSBsc3RhdHMtPnRfY291bnRzLnRfdHVwbGVzX2RlbGV0ZWQ7Ci0JZGJlbnRyeS0+YmxvY2tz X2ZldGNoZWQgKz0gbHN0YXRzLT50X2NvdW50cy50X2Jsb2Nrc19mZXRjaGVkOwotCWRiZW50 cnktPmJsb2Nrc19oaXQgKz0gbHN0YXRzLT50X2NvdW50cy50X2Jsb2Nrc19oaXQ7CisJZGJl bnRyeS0+dHVwbGVzX3JldHVybmVkICs9IGxzdGF0cy0+dF9jb3VudHMudHVwbGVzX3JldHVy bmVkOworCWRiZW50cnktPnR1cGxlc19mZXRjaGVkICs9IGxzdGF0cy0+dF9jb3VudHMudHVw bGVzX2ZldGNoZWQ7CisJZGJlbnRyeS0+dHVwbGVzX2luc2VydGVkICs9IGxzdGF0cy0+dF9j b3VudHMudHVwbGVzX2luc2VydGVkOworCWRiZW50cnktPnR1cGxlc191cGRhdGVkICs9IGxz dGF0cy0+dF9jb3VudHMudHVwbGVzX3VwZGF0ZWQ7CisJZGJlbnRyeS0+dHVwbGVzX2RlbGV0 ZWQgKz0gbHN0YXRzLT50X2NvdW50cy50dXBsZXNfZGVsZXRlZDsKKwlkYmVudHJ5LT5ibG9j a3NfZmV0Y2hlZCArPSBsc3RhdHMtPnRfY291bnRzLmJsb2Nrc19mZXRjaGVkOworCWRiZW50 cnktPmJsb2Nrc19oaXQgKz0gbHN0YXRzLT50X2NvdW50cy5ibG9ja3NfaGl0OwogCiAJcmV0 dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0 ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCmluZGV4IDZj ZGRkNzRhYTcuLjI3YmI5MjhkYjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ3N0YXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5j cy5jCkBAIC0xNDgsMjkgKzE0OCwyNCBAQCBwZ19zdGF0X2dldF9mdW5jdGlvbl9jYWxscyhQ R19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2NChmdW5jZW50cnktPmZfbnVtY2Fs bHMpOwogfQogCi1EYXR1bQotcGdfc3RhdF9nZXRfZnVuY3Rpb25fdG90YWxfdGltZShQR19G VU5DVElPTl9BUkdTKQotewotCU9pZAkJCWZ1bmNpZCA9IFBHX0dFVEFSR19PSUQoMCk7Ci0J UGdTdGF0X1N0YXRGdW5jRW50cnkgKmZ1bmNlbnRyeTsKLQotCWlmICgoZnVuY2VudHJ5ID0g cGdzdGF0X2ZldGNoX3N0YXRfZnVuY2VudHJ5KGZ1bmNpZCkpID09IE5VTEwpCi0JCVBHX1JF VFVSTl9OVUxMKCk7Ci0JLyogY29udmVydCBjb3VudGVyIGZyb20gbWljcm9zZWMgdG8gbWls bGlzZWMgZm9yIGRpc3BsYXkgKi8KLQlQR19SRVRVUk5fRkxPQVQ4KCgoZG91YmxlKSBmdW5j ZW50cnktPmZfdG90YWxfdGltZSkgLyAxMDAwLjApOworI2RlZmluZSBQR19TVEFUX0dFVF9G VU5DRU5UUllfRkxPQVQ4KHN0YXQpCQkJCQkJCVwKK0RhdHVtCQkJCQkJCQkJCQkJCQkJCVwK K0NwcENvbmNhdChwZ19zdGF0X2dldF9mdW5jdGlvbl8sc3RhdCkoUEdfRlVOQ1RJT05fQVJH UykJCQkJXAorewkJCQkJCQkJCQkJCQkJCQkJXAorCU9pZAkJCWZ1bmNpZCA9IFBHX0dFVEFS R19PSUQoMCk7CQkJCQkJCVwKKwlQZ1N0YXRfU3RhdEZ1bmNFbnRyeSAqZnVuY2VudHJ5OwkJ CQkJCQkJXAorCQkJCQkJCQkJCQkJCQkJCQlcCisJaWYgKChmdW5jZW50cnkgPSBwZ3N0YXRf ZmV0Y2hfc3RhdF9mdW5jZW50cnkoZnVuY2lkKSkgPT0gTlVMTCkJXAorCQlQR19SRVRVUk5f TlVMTCgpOwkJCQkJCQkJCQkJXAorCS8qIGNvbnZlcnQgY291bnRlciBmcm9tIG1pY3Jvc2Vj IHRvIG1pbGxpc2VjIGZvciBkaXNwbGF5ICovCQlcCisJUEdfUkVUVVJOX0ZMT0FUOCgoKGRv dWJsZSkgZnVuY2VudHJ5LT5zdGF0KSAvIDEwMDAuMCk7CQkJXAogfQogCi1EYXR1bQotcGdf c3RhdF9nZXRfZnVuY3Rpb25fc2VsZl90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCi17Ci0JT2lk CQkJZnVuY2lkID0gUEdfR0VUQVJHX09JRCgwKTsKLQlQZ1N0YXRfU3RhdEZ1bmNFbnRyeSAq ZnVuY2VudHJ5OworLyogcGdfc3RhdF9nZXRfZnVuY3Rpb25fdG90YWxfdGltZSAqLworUEdf U1RBVF9HRVRfRlVOQ0VOVFJZX0ZMT0FUOCh0b3RhbF90aW1lKQogCi0JaWYgKChmdW5jZW50 cnkgPSBwZ3N0YXRfZmV0Y2hfc3RhdF9mdW5jZW50cnkoZnVuY2lkKSkgPT0gTlVMTCkKLQkJ UEdfUkVUVVJOX05VTEwoKTsKLQkvKiBjb252ZXJ0IGNvdW50ZXIgZnJvbSBtaWNyb3NlYyB0 byBtaWxsaXNlYyBmb3IgZGlzcGxheSAqLwotCVBHX1JFVFVSTl9GTE9BVDgoKChkb3VibGUp IGZ1bmNlbnRyeS0+Zl9zZWxmX3RpbWUpIC8gMTAwMC4wKTsKLX0KKy8qIHBnX3N0YXRfZ2V0 X2Z1bmN0aW9uX3NlbGZfdGltZSAqLworUEdfU1RBVF9HRVRfRlVOQ0VOVFJZX0ZMT0FUOChz ZWxmX3RpbWUpCiAKIERhdHVtCiBwZ19zdGF0X2dldF9iYWNrZW5kX2lkc2V0KFBHX0ZVTkNU SU9OX0FSR1MpCkBAIC0xMzQ1LDE1OCArMTM0MCw3MCBAQCBwZ19zdGF0X2dldF9zbHJ1KFBH X0ZVTkNUSU9OX0FSR1MpCiAJcmV0dXJuIChEYXR1bSkgMDsKIH0KIAotRGF0dW0KLXBnX3N0 YXRfZ2V0X3hhY3RfbnVtc2NhbnMoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlPaWQJCQlyZWxp ZCA9IFBHX0dFVEFSR19PSUQoMCk7Ci0JaW50NjQJCXJlc3VsdDsKLQlQZ1N0YXRfVGFibGVT dGF0dXMgKnRhYmVudHJ5OwotCi0JaWYgKCh0YWJlbnRyeSA9IGZpbmRfdGFic3RhdF9lbnRy eShyZWxpZCkpID09IE5VTEwpCi0JCXJlc3VsdCA9IDA7Ci0JZWxzZQotCQlyZXN1bHQgPSAo aW50NjQpICh0YWJlbnRyeS0+dF9jb3VudHMudF9udW1zY2Fucyk7Ci0KLQlQR19SRVRVUk5f SU5UNjQocmVzdWx0KTsKLX0KLQotRGF0dW0KLXBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3Jl dHVybmVkKFBHX0ZVTkNUSU9OX0FSR1MpCi17Ci0JT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdf T0lEKDApOwotCWludDY0CQlyZXN1bHQ7Ci0JUGdTdGF0X1RhYmxlU3RhdHVzICp0YWJlbnRy eTsKLQotCWlmICgodGFiZW50cnkgPSBmaW5kX3RhYnN0YXRfZW50cnkocmVsaWQpKSA9PSBO VUxMKQotCQlyZXN1bHQgPSAwOwotCWVsc2UKLQkJcmVzdWx0ID0gKGludDY0KSAodGFiZW50 cnktPnRfY291bnRzLnRfdHVwbGVzX3JldHVybmVkKTsKLQotCVBHX1JFVFVSTl9JTlQ2NChy ZXN1bHQpOwotfQotCi1EYXR1bQotcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfZmV0Y2hlZChQ R19GVU5DVElPTl9BUkdTKQotewotCU9pZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsK LQlpbnQ2NAkJcmVzdWx0OwotCVBnU3RhdF9UYWJsZVN0YXR1cyAqdGFiZW50cnk7Ci0KLQlp ZiAoKHRhYmVudHJ5ID0gZmluZF90YWJzdGF0X2VudHJ5KHJlbGlkKSkgPT0gTlVMTCkKLQkJ cmVzdWx0ID0gMDsKLQllbHNlCi0JCXJlc3VsdCA9IChpbnQ2NCkgKHRhYmVudHJ5LT50X2Nv dW50cy50X3R1cGxlc19mZXRjaGVkKTsKLQotCVBHX1JFVFVSTl9JTlQ2NChyZXN1bHQpOwot fQotCi1EYXR1bQotcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaW5zZXJ0ZWQoUEdfRlVOQ1RJ T05fQVJHUykKLXsKLQlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7Ci0JaW50NjQJ CXJlc3VsdDsKLQlQZ1N0YXRfVGFibGVTdGF0dXMgKnRhYmVudHJ5OwotCVBnU3RhdF9UYWJs ZVhhY3RTdGF0dXMgKnRyYW5zOwotCi0JaWYgKCh0YWJlbnRyeSA9IGZpbmRfdGFic3RhdF9l bnRyeShyZWxpZCkpID09IE5VTEwpCi0JCXJlc3VsdCA9IDA7Ci0JZWxzZQotCXsKLQkJcmVz dWx0ID0gdGFiZW50cnktPnRfY291bnRzLnRfdHVwbGVzX2luc2VydGVkOwotCQkvKiBsaXZl IHN1YnRyYW5zYWN0aW9ucycgY291bnRzIGFyZW4ndCBpbiB0X3R1cGxlc19pbnNlcnRlZCB5 ZXQgKi8KLQkJZm9yICh0cmFucyA9IHRhYmVudHJ5LT50cmFuczsgdHJhbnMgIT0gTlVMTDsg dHJhbnMgPSB0cmFucy0+dXBwZXIpCi0JCQlyZXN1bHQgKz0gdHJhbnMtPnR1cGxlc19pbnNl cnRlZDsKLQl9Ci0KLQlQR19SRVRVUk5fSU5UNjQocmVzdWx0KTsKLX0KLQotRGF0dW0KLXBn X3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWQoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlP aWQJCQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7Ci0JaW50NjQJCXJlc3VsdDsKLQlQZ1N0 YXRfVGFibGVTdGF0dXMgKnRhYmVudHJ5OwotCVBnU3RhdF9UYWJsZVhhY3RTdGF0dXMgKnRy YW5zOwotCi0JaWYgKCh0YWJlbnRyeSA9IGZpbmRfdGFic3RhdF9lbnRyeShyZWxpZCkpID09 IE5VTEwpCi0JCXJlc3VsdCA9IDA7Ci0JZWxzZQotCXsKLQkJcmVzdWx0ID0gdGFiZW50cnkt PnRfY291bnRzLnRfdHVwbGVzX3VwZGF0ZWQ7Ci0JCS8qIGxpdmUgc3VidHJhbnNhY3Rpb25z JyBjb3VudHMgYXJlbid0IGluIHRfdHVwbGVzX3VwZGF0ZWQgeWV0ICovCi0JCWZvciAodHJh bnMgPSB0YWJlbnRyeS0+dHJhbnM7IHRyYW5zICE9IE5VTEw7IHRyYW5zID0gdHJhbnMtPnVw cGVyKQotCQkJcmVzdWx0ICs9IHRyYW5zLT50dXBsZXNfdXBkYXRlZDsKLQl9Ci0KLQlQR19S RVRVUk5fSU5UNjQocmVzdWx0KTsKLX0KLQotRGF0dW0KLXBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2RlbGV0ZWQoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlPaWQJCQlyZWxpZCA9IFBHX0dF VEFSR19PSUQoMCk7Ci0JaW50NjQJCXJlc3VsdDsKLQlQZ1N0YXRfVGFibGVTdGF0dXMgKnRh YmVudHJ5OwotCVBnU3RhdF9UYWJsZVhhY3RTdGF0dXMgKnRyYW5zOwotCi0JaWYgKCh0YWJl bnRyeSA9IGZpbmRfdGFic3RhdF9lbnRyeShyZWxpZCkpID09IE5VTEwpCi0JCXJlc3VsdCA9 IDA7Ci0JZWxzZQotCXsKLQkJcmVzdWx0ID0gdGFiZW50cnktPnRfY291bnRzLnRfdHVwbGVz X2RlbGV0ZWQ7Ci0JCS8qIGxpdmUgc3VidHJhbnNhY3Rpb25zJyBjb3VudHMgYXJlbid0IGlu IHRfdHVwbGVzX2RlbGV0ZWQgeWV0ICovCi0JCWZvciAodHJhbnMgPSB0YWJlbnRyeS0+dHJh bnM7IHRyYW5zICE9IE5VTEw7IHRyYW5zID0gdHJhbnMtPnVwcGVyKQotCQkJcmVzdWx0ICs9 IHRyYW5zLT50dXBsZXNfZGVsZXRlZDsKLQl9Ci0KLQlQR19SRVRVUk5fSU5UNjQocmVzdWx0 KTsKLX0KLQotRGF0dW0KLXBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKFBH X0ZVTkNUSU9OX0FSR1MpCi17Ci0JT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOwot CWludDY0CQlyZXN1bHQ7Ci0JUGdTdGF0X1RhYmxlU3RhdHVzICp0YWJlbnRyeTsKLQotCWlm ICgodGFiZW50cnkgPSBmaW5kX3RhYnN0YXRfZW50cnkocmVsaWQpKSA9PSBOVUxMKQotCQly ZXN1bHQgPSAwOwotCWVsc2UKLQkJcmVzdWx0ID0gKGludDY0KSAodGFiZW50cnktPnRfY291 bnRzLnRfdHVwbGVzX2hvdF91cGRhdGVkKTsKLQotCVBHX1JFVFVSTl9JTlQ2NChyZXN1bHQp OwotfQotCi1EYXR1bQotcGdfc3RhdF9nZXRfeGFjdF9ibG9ja3NfZmV0Y2hlZChQR19GVU5D VElPTl9BUkdTKQotewotCU9pZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKLQlpbnQ2 NAkJcmVzdWx0OwotCVBnU3RhdF9UYWJsZVN0YXR1cyAqdGFiZW50cnk7Ci0KLQlpZiAoKHRh YmVudHJ5ID0gZmluZF90YWJzdGF0X2VudHJ5KHJlbGlkKSkgPT0gTlVMTCkKLQkJcmVzdWx0 ID0gMDsKLQllbHNlCi0JCXJlc3VsdCA9IChpbnQ2NCkgKHRhYmVudHJ5LT50X2NvdW50cy50 X2Jsb2Nrc19mZXRjaGVkKTsKLQotCVBHX1JFVFVSTl9JTlQ2NChyZXN1bHQpOwotfQotCi1E YXR1bQotcGdfc3RhdF9nZXRfeGFjdF9ibG9ja3NfaGl0KFBHX0ZVTkNUSU9OX0FSR1MpCi17 Ci0JT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOwotCWludDY0CQlyZXN1bHQ7Ci0J UGdTdGF0X1RhYmxlU3RhdHVzICp0YWJlbnRyeTsKLQotCWlmICgodGFiZW50cnkgPSBmaW5k X3RhYnN0YXRfZW50cnkocmVsaWQpKSA9PSBOVUxMKQotCQlyZXN1bHQgPSAwOwotCWVsc2UK LQkJcmVzdWx0ID0gKGludDY0KSAodGFiZW50cnktPnRfY291bnRzLnRfYmxvY2tzX2hpdCk7 Ci0KLQlQR19SRVRVUk5fSU5UNjQocmVzdWx0KTsKLX0KKyNkZWZpbmUgUEdfU1RBVF9HRVRf WEFDVF9SRUxFTlRSWV9JTlQ2NChzdGF0KQkJCQlcCitEYXR1bQkJCQkJCQkJCQkJCQkJXAor Q3BwQ29uY2F0KHBnX3N0YXRfZ2V0X3hhY3RfLHN0YXQpKFBHX0ZVTkNUSU9OX0FSR1MpCQkJ XAorewkJCQkJCQkJCQkJCQkJCVwKKwlPaWQgICAgICAgICByZWxpZCA9IFBHX0dFVEFSR19P SUQoMCk7CQkJCQlcCisJaW50NjQgICAgICAgcmVzdWx0OwkJCQkJCQkJCQlcCisJUGdTdGF0 X1RhYmxlU3RhdHVzICp0YWJlbnRyeTsJCQkJCQkJXAorCQkJCQkJCQkJCQkJCQkJXAorCWlm ICgodGFiZW50cnkgPSBmaW5kX3RhYnN0YXRfZW50cnkocmVsaWQpKSA9PSBOVUxMKQkJXAor CQlyZXN1bHQgPSAwOwkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJXAorCQlyZXN1 bHQgPSAoaW50NjQpICh0YWJlbnRyeS0+dF9jb3VudHMuc3RhdCk7CQkJXAorCQkJCQkJCQkJ CQkJCQkJXAorCVBHX1JFVFVSTl9JTlQ2NChyZXN1bHQpOwkJCQkJCQkJXAorfQorCisvKiBw Z19zdGF0X2dldF94YWN0X251bXNjYW5zICovCitQR19TVEFUX0dFVF9YQUNUX1JFTEVOVFJZ X0lOVDY0KG51bXNjYW5zKQorCisvKiBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19yZXR1cm5l ZCAqLworUEdfU1RBVF9HRVRfWEFDVF9SRUxFTlRSWV9JTlQ2NCh0dXBsZXNfcmV0dXJuZWQp CisKKy8qIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2ZldGNoZWQgKi8KK1BHX1NUQVRfR0VU X1hBQ1RfUkVMRU5UUllfSU5UNjQodHVwbGVzX2ZldGNoZWQpCisKKy8qIHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkICovCitQR19TVEFUX0dFVF9YQUNUX1JFTEVOVFJZ X0lOVDY0KHR1cGxlc19ob3RfdXBkYXRlZCkKKworLyogcGdfc3RhdF9nZXRfeGFjdF9ibG9j a3NfZmV0Y2hlZCAqLworUEdfU1RBVF9HRVRfWEFDVF9SRUxFTlRSWV9JTlQ2NChibG9ja3Nf ZmV0Y2hlZCkKKworLyogcGdfc3RhdF9nZXRfeGFjdF9ibG9ja3NfaGl0ICovCitQR19TVEFU X0dFVF9YQUNUX1JFTEVOVFJZX0lOVDY0KGJsb2Nrc19oaXQpCisKKyNkZWZpbmUgUEdfU1RB VF9HRVRfWEFDVF9XSVRIX1NVQlRSQU5TX1JFTEVOVFJZX0lOVDY0KHN0YXQpCQkJCQlcCitE YXR1bQkJCQkJCQkJCQkJCQkJCQkJCVwKK0NwcENvbmNhdChwZ19zdGF0X2dldF94YWN0Xyxz dGF0KShQR19GVU5DVElPTl9BUkdTKQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCQkJCVwK KwlPaWQgICAgICAgICByZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CQkJCQkJCQkJXAorCWlu dDY0ICAgICAgIHJlc3VsdDsJCQkJCQkJCQkJCQkJCVwKKwlQZ1N0YXRfVGFibGVTdGF0dXMg KnRhYmVudHJ5OwkJCQkJCQkJCQkJXAorCVBnU3RhdF9UYWJsZVhhY3RTdGF0dXMgKnRyYW5z OwkJCQkJCQkJCQkJXAorCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwlpZiAoKHRhYmVudHJ5ID0g ZmluZF90YWJzdGF0X2VudHJ5KHJlbGlkKSkgPT0gTlVMTCkJCQkJCQlcCisJCXJlc3VsdCA9 IDA7CQkJCQkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJ CQkJCQkJCQkJCQkJXAorCQlyZXN1bHQgPSB0YWJlbnRyeS0+dF9jb3VudHMuc3RhdDsJCQkJ CQkJCQlcCisJCS8qIGxpdmUgc3VidHJhbnNhY3Rpb25zJyBjb3VudHMgYXJlbid0IGluIHRo ZSBzdGF0IHlldCAqLwkJCVwKKwkJZm9yICh0cmFucyA9IHRhYmVudHJ5LT50cmFuczsgdHJh bnMgIT0gTlVMTDsgdHJhbnMgPSB0cmFucy0+dXBwZXIpCVwKKwkJCXJlc3VsdCArPSB0cmFu cy0+c3RhdDsJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkJCQkJ CQkJCQkJCQkJCVwKKwlQR19SRVRVUk5fSU5UNjQocmVzdWx0KTsJCQkJCQkJCQkJCQlcCit9 CisKKy8qIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2luc2VydGVkICovCitQR19TVEFUX0dF VF9YQUNUX1dJVEhfU1VCVFJBTlNfUkVMRU5UUllfSU5UNjQodHVwbGVzX2luc2VydGVkKQor CisvKiBwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkICovCitQR19TVEFUX0dFVF9Y QUNUX1dJVEhfU1VCVFJBTlNfUkVMRU5UUllfSU5UNjQodHVwbGVzX3VwZGF0ZWQpCisKKy8q IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2RlbGV0ZWQgKi8KK1BHX1NUQVRfR0VUX1hBQ1Rf V0lUSF9TVUJUUkFOU19SRUxFTlRSWV9JTlQ2NCh0dXBsZXNfZGVsZXRlZCkKIAogRGF0dW0K IHBnX3N0YXRfZ2V0X3hhY3RfZnVuY3Rpb25fY2FsbHMoUEdfRlVOQ1RJT05fQVJHUykKQEAg LTE1MDksMjggKzE0MTYsMjMgQEAgcGdfc3RhdF9nZXRfeGFjdF9mdW5jdGlvbl9jYWxscyhQ R19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2NChmdW5jZW50cnktPmZfY291bnRz LmZfbnVtY2FsbHMpOwogfQogCi1EYXR1bQotcGdfc3RhdF9nZXRfeGFjdF9mdW5jdGlvbl90 b3RhbF90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCi17Ci0JT2lkCQkJZnVuY2lkID0gUEdfR0VU QVJHX09JRCgwKTsKLQlQZ1N0YXRfQmFja2VuZEZ1bmN0aW9uRW50cnkgKmZ1bmNlbnRyeTsK LQotCWlmICgoZnVuY2VudHJ5ID0gZmluZF9mdW5jc3RhdF9lbnRyeShmdW5jaWQpKSA9PSBO VUxMKQotCQlQR19SRVRVUk5fTlVMTCgpOwotCVBHX1JFVFVSTl9GTE9BVDgoSU5TVFJfVElN RV9HRVRfTUlMTElTRUMoZnVuY2VudHJ5LT5mX2NvdW50cy5mX3RvdGFsX3RpbWUpKTsKKyNk ZWZpbmUgUEdfU1RBVF9HRVRfWEFDVF9GVU5DRU5UUllfRkxPQVQ4KHN0YXQpCQkJCQkJCQlc CitEYXR1bQkJCQkJCQkJCQkJCQkJCQkJCVwKK0NwcENvbmNhdChwZ19zdGF0X2dldF94YWN0 X2Z1bmN0aW9uXyxzdGF0KShQR19GVU5DVElPTl9BUkdTKQkJCQlcCit7CQkJCQkJCQkJCQkJ CQkJCQkJCVwKKwlPaWQJCQlmdW5jaWQgPSBQR19HRVRBUkdfT0lEKDApOwkJCQkJCQkJCVwK KwlQZ1N0YXRfQmFja2VuZEZ1bmN0aW9uRW50cnkgKmZ1bmNlbnRyeTsJCQkJCQkJCQlcCisJ CQkJCQkJCQkJCQkJCQkJCQkJXAorCWlmICgoZnVuY2VudHJ5ID0gZmluZF9mdW5jc3RhdF9l bnRyeShmdW5jaWQpKSA9PSBOVUxMKQkJCQkJXAorCQlQR19SRVRVUk5fTlVMTCgpOwkJCQkJ CQkJCQkJCQlcCisJUEdfUkVUVVJOX0ZMT0FUOChJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhm dW5jZW50cnktPmZfY291bnRzLnN0YXQpKTsJXAogfQogCi1EYXR1bQotcGdfc3RhdF9nZXRf eGFjdF9mdW5jdGlvbl9zZWxmX3RpbWUoUEdfRlVOQ1RJT05fQVJHUykKLXsKLQlPaWQJCQlm dW5jaWQgPSBQR19HRVRBUkdfT0lEKDApOwotCVBnU3RhdF9CYWNrZW5kRnVuY3Rpb25FbnRy eSAqZnVuY2VudHJ5OwotCi0JaWYgKChmdW5jZW50cnkgPSBmaW5kX2Z1bmNzdGF0X2VudHJ5 KGZ1bmNpZCkpID09IE5VTEwpCi0JCVBHX1JFVFVSTl9OVUxMKCk7Ci0JUEdfUkVUVVJOX0ZM T0FUOChJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhmdW5jZW50cnktPmZfY291bnRzLmZfc2Vs Zl90aW1lKSk7Ci19CisvKiBwZ19zdGF0X2dldF94YWN0X2Z1bmN0aW9uX3RvdGFsX3RpbWUg Ki8KK1BHX1NUQVRfR0VUX1hBQ1RfRlVOQ0VOVFJZX0ZMT0FUOCh0b3RhbF90aW1lKQogCisv KiBwZ19zdGF0X2dldF94YWN0X2Z1bmN0aW9uX3NlbGZfdGltZSAqLworUEdfU1RBVF9HRVRf WEFDVF9GVU5DRU5UUllfRkxPQVQ4KHNlbGZfdGltZSkKIAogLyogR2V0IHRoZSB0aW1lc3Rh bXAgb2YgdGhlIGN1cnJlbnQgc3RhdGlzdGljcyBzbmFwc2hvdCAqLwogRGF0dW0KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKaW5k ZXggZDNlOTY1ZDc0NC4uZDI2ZDBkODMyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdz dGF0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKQEAgLTEwNiw4ICsxMDYsOCBAQCB0 eXBlZGVmIGludDY0IFBnU3RhdF9Db3VudGVyOwogdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X0Z1 bmN0aW9uQ291bnRzCiB7CiAJUGdTdGF0X0NvdW50ZXIgZl9udW1jYWxsczsKLQlpbnN0cl90 aW1lCWZfdG90YWxfdGltZTsKLQlpbnN0cl90aW1lCWZfc2VsZl90aW1lOworCWluc3RyX3Rp bWUJdG90YWxfdGltZTsKKwlpbnN0cl90aW1lCXNlbGZfdGltZTsKIH0gUGdTdGF0X0Z1bmN0 aW9uQ291bnRzOwogCiAvKiAtLS0tLS0tLS0tCkBAIC0xMjgsNyArMTI4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGdTdGF0X0Z1bmN0aW9uQ2FsbFVzYWdlCiAJLyogTlVMTCBtZWFucyB3ZSBh cmUgbm90IHRyYWNraW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgKi8KIAlQZ1N0YXRf RnVuY3Rpb25Db3VudHMgKmZzOwogCS8qIFRvdGFsIHRpbWUgcHJldmlvdXNseSBjaGFyZ2Vk IHRvIGZ1bmN0aW9uLCBhcyBvZiBmdW5jdGlvbiBzdGFydCAqLwotCWluc3RyX3RpbWUJc2F2 ZV9mX3RvdGFsX3RpbWU7CisJaW5zdHJfdGltZQlzYXZlX3RvdGFsX3RpbWU7CiAJLyogQmFj a2VuZC13aWRlIHRvdGFsIHRpbWUgYXMgb2YgZnVuY3Rpb24gc3RhcnQgKi8KIAlpbnN0cl90 aW1lCXNhdmVfdG90YWw7CiAJLyogc3lzdGVtIGNsb2NrIGFzIG9mIGZ1bmN0aW9uIHN0YXJ0 ICovCkBAIC0xNjcsMjMgKzE2NywyMyBAQCB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRfQmFja2Vu ZFN1YkVudHJ5CiAgKi8KIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9UYWJsZUNvdW50cwogewot CVBnU3RhdF9Db3VudGVyIHRfbnVtc2NhbnM7CisJUGdTdGF0X0NvdW50ZXIgbnVtc2NhbnM7 CiAKLQlQZ1N0YXRfQ291bnRlciB0X3R1cGxlc19yZXR1cm5lZDsKLQlQZ1N0YXRfQ291bnRl ciB0X3R1cGxlc19mZXRjaGVkOworCVBnU3RhdF9Db3VudGVyIHR1cGxlc19yZXR1cm5lZDsK KwlQZ1N0YXRfQ291bnRlciB0dXBsZXNfZmV0Y2hlZDsKIAotCVBnU3RhdF9Db3VudGVyIHRf dHVwbGVzX2luc2VydGVkOwotCVBnU3RhdF9Db3VudGVyIHRfdHVwbGVzX3VwZGF0ZWQ7Ci0J UGdTdGF0X0NvdW50ZXIgdF90dXBsZXNfZGVsZXRlZDsKLQlQZ1N0YXRfQ291bnRlciB0X3R1 cGxlc19ob3RfdXBkYXRlZDsKKwlQZ1N0YXRfQ291bnRlciB0dXBsZXNfaW5zZXJ0ZWQ7CisJ UGdTdGF0X0NvdW50ZXIgdHVwbGVzX3VwZGF0ZWQ7CisJUGdTdGF0X0NvdW50ZXIgdHVwbGVz X2RlbGV0ZWQ7CisJUGdTdGF0X0NvdW50ZXIgdHVwbGVzX2hvdF91cGRhdGVkOwogCWJvb2wJ CXRfdHJ1bmNkcm9wcGVkOwogCiAJUGdTdGF0X0NvdW50ZXIgdF9kZWx0YV9saXZlX3R1cGxl czsKIAlQZ1N0YXRfQ291bnRlciB0X2RlbHRhX2RlYWRfdHVwbGVzOwogCVBnU3RhdF9Db3Vu dGVyIHRfY2hhbmdlZF90dXBsZXM7CiAKLQlQZ1N0YXRfQ291bnRlciB0X2Jsb2Nrc19mZXRj aGVkOwotCVBnU3RhdF9Db3VudGVyIHRfYmxvY2tzX2hpdDsKKwlQZ1N0YXRfQ291bnRlciBi bG9ja3NfZmV0Y2hlZDsKKwlQZ1N0YXRfQ291bnRlciBibG9ja3NfaGl0OwogfSBQZ1N0YXRf VGFibGVDb3VudHM7CiAKIC8qIC0tLS0tLS0tLS0KQEAgLTMxNSw4ICszMTUsOCBAQCB0eXBl ZGVmIHN0cnVjdCBQZ1N0YXRfU3RhdEZ1bmNFbnRyeQogewogCVBnU3RhdF9Db3VudGVyIGZf bnVtY2FsbHM7CiAKLQlQZ1N0YXRfQ291bnRlciBmX3RvdGFsX3RpbWU7CS8qIHRpbWVzIGlu IG1pY3Jvc2Vjb25kcyAqLwotCVBnU3RhdF9Db3VudGVyIGZfc2VsZl90aW1lOworCVBnU3Rh dF9Db3VudGVyIHRvdGFsX3RpbWU7CS8qIHRpbWVzIGluIG1pY3Jvc2Vjb25kcyAqLworCVBn U3RhdF9Db3VudGVyIHNlbGZfdGltZTsKIH0gUGdTdGF0X1N0YXRGdW5jRW50cnk7CiAKIHR5 cGVkZWYgc3RydWN0IFBnU3RhdF9TdGF0UmVwbFNsb3RFbnRyeQpAQCAtNTI1LDM3ICs1MjUs MzcgQEAgZXh0ZXJuIHZvaWQgcGdzdGF0X3JlcG9ydF9hbmFseXplKFJlbGF0aW9uIHJlbCwK ICNkZWZpbmUgcGdzdGF0X2NvdW50X2hlYXBfc2NhbihyZWwpCQkJCQkJCQkJXAogCWRvIHsJ CQkJCQkJCQkJCQkJCQlcCiAJCWlmIChwZ3N0YXRfc2hvdWxkX2NvdW50X3JlbGF0aW9uKHJl bCkpCQkJCQkJXAotCQkJKHJlbCktPnBnc3RhdF9pbmZvLT50X2NvdW50cy50X251bXNjYW5z Kys7CQkJCVwKKwkJCShyZWwpLT5wZ3N0YXRfaW5mby0+dF9jb3VudHMubnVtc2NhbnMrKzsJ CQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3RhdF9jb3VudF9oZWFwX2dldG5leHQo cmVsKQkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCQkJCQkJCQlcCiAJCWlmIChwZ3N0YXRfc2hv dWxkX2NvdW50X3JlbGF0aW9uKHJlbCkpCQkJCQkJXAotCQkJKHJlbCktPnBnc3RhdF9pbmZv LT50X2NvdW50cy50X3R1cGxlc19yZXR1cm5lZCsrOwkJXAorCQkJKHJlbCktPnBnc3RhdF9p bmZvLT50X2NvdW50cy50dXBsZXNfcmV0dXJuZWQrKzsJCQlcCiAJfSB3aGlsZSAoMCkKICNk ZWZpbmUgcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2gocmVsKQkJCQkJCQkJXAogCWRvIHsJCQkJ CQkJCQkJCQkJCQlcCiAJCWlmIChwZ3N0YXRfc2hvdWxkX2NvdW50X3JlbGF0aW9uKHJlbCkp CQkJCQkJXAotCQkJKHJlbCktPnBnc3RhdF9pbmZvLT50X2NvdW50cy50X3R1cGxlc19mZXRj aGVkKys7CQlcCisJCQkocmVsKS0+cGdzdGF0X2luZm8tPnRfY291bnRzLnR1cGxlc19mZXRj aGVkKys7CQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3RhdF9jb3VudF9pbmRleF9z Y2FuKHJlbCkJCQkJCQkJCVwKIAlkbyB7CQkJCQkJCQkJCQkJCQkJXAogCQlpZiAocGdzdGF0 X3Nob3VsZF9jb3VudF9yZWxhdGlvbihyZWwpKQkJCQkJCVwKLQkJCShyZWwpLT5wZ3N0YXRf aW5mby0+dF9jb3VudHMudF9udW1zY2FucysrOwkJCQlcCisJCQkocmVsKS0+cGdzdGF0X2lu Zm8tPnRfY291bnRzLm51bXNjYW5zKys7CQkJCVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBw Z3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHJlbCwgbikJCQkJCQkJXAogCWRvIHsJCQkJCQkJ CQkJCQkJCQlcCiAJCWlmIChwZ3N0YXRfc2hvdWxkX2NvdW50X3JlbGF0aW9uKHJlbCkpCQkJ CQkJXAotCQkJKHJlbCktPnBnc3RhdF9pbmZvLT50X2NvdW50cy50X3R1cGxlc19yZXR1cm5l ZCArPSAobik7CVwKKwkJCShyZWwpLT5wZ3N0YXRfaW5mby0+dF9jb3VudHMudHVwbGVzX3Jl dHVybmVkICs9IChuKTsJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3RhdF9jb3VudF9i dWZmZXJfcmVhZChyZWwpCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwKIAkJaWYg KHBnc3RhdF9zaG91bGRfY291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCi0JCQkocmVsKS0+ cGdzdGF0X2luZm8tPnRfY291bnRzLnRfYmxvY2tzX2ZldGNoZWQrKzsJCVwKKwkJCShyZWwp LT5wZ3N0YXRfaW5mby0+dF9jb3VudHMuYmxvY2tzX2ZldGNoZWQrKzsJCQlcCiAJfSB3aGls ZSAoMCkKICNkZWZpbmUgcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQocmVsKQkJCQkJCQkJXAog CWRvIHsJCQkJCQkJCQkJCQkJCQlcCiAJCWlmIChwZ3N0YXRfc2hvdWxkX2NvdW50X3JlbGF0 aW9uKHJlbCkpCQkJCQkJXAotCQkJKHJlbCktPnBnc3RhdF9pbmZvLT50X2NvdW50cy50X2Js b2Nrc19oaXQrKzsJCQlcCisJCQkocmVsKS0+cGdzdGF0X2luZm8tPnRfY291bnRzLmJsb2Nr c19oaXQrKzsJCQkJXAogCX0gd2hpbGUgKDApCiAKIGV4dGVybiB2b2lkIHBnc3RhdF9jb3Vu dF9oZWFwX2luc2VydChSZWxhdGlvbiByZWwsIFBnU3RhdF9Db3VudGVyIG4pOwo= --------------zfSF2RxPCMlb9VfpdurVedGr--