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 1vMr5p-003ohO-0g for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Nov 2025 17:08:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vMr5n-00C7Na-20 for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Nov 2025 17:08:11 +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 1vMr5n-00C7NQ-06 for pgsql-hackers@lists.postgresql.org; Sat, 22 Nov 2025 17:08:11 +0000 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vMr5i-000vFB-0Q for pgsql-hackers@postgresql.org; Sat, 22 Nov 2025 17:08:11 +0000 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-5945510fd7aso2590888e87.0 for ; Sat, 22 Nov 2025 09:08:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763831285; x=1764436085; darn=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=1Uup5y1O9HHtAPYwhh8MMzXDhDHg6GhDN82OXXMzlow=; b=G8GFb5AKThD2/0sa6LtJxjHeoq0QYsazzoDt+9xQtOPrWdSIgmtvYrfUqYwlZTlOc9 yChyhKZp3vSsl/8FSww0ZHGMbt9XOYZm79mH1nbIqsNnnYQyZp/GA1C33Tnt6Mg6ZsjF ClyJVMFtLjo2EWGu7vll4tfZs4pozl0Flo4NxmX4slbr3XVuR70UwtjnHfiQBQuqEIfy igSMpejfP7+HC/KApIsQ9l9uwivPHJBSJU3DUuHpk15qOoXc6HUHD/LpPXZal4K97J/8 Kge137zQkfBByZbX93ZvMnCVbpHgPiTkkw6ucUFutlNj0Fiolyt3MHSr5ysLxSIKeuXt 2FdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763831285; x=1764436085; 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=1Uup5y1O9HHtAPYwhh8MMzXDhDHg6GhDN82OXXMzlow=; b=d3J5acX4fbs83RFsAwfH4flW9exRafteTVDUz/ruK9eZQpIRvuzwBFukcJOTzQHEMX SYvPvqUn5sCUQV3J0UI7rzFbS1a6PGWahnXhZmEoZDnnMF35zIy21kT3zYoJXou4Ds9B oev2fN58HPlXzLmQJup3aHq5Cs8WBjOOkjWI2t52ccbofY2J9LEciFdVgL3Xg6tgJ32g QnI6p3bdCe/w/nZZafTGar2XalkQ4S7ZfiGlSBeM3L5uCNFdR1SMYvm8qJ5raKaxsTSl wdLIZGRw9fP6tUyVnMcshb7xZKVpsO1cTF7pcPOlY0t+KDsEar/qrrTi5kbprLELm74j qzzQ== X-Forwarded-Encrypted: i=1; AJvYcCUBq0pnkYAuVbBenprB5gXIB14vWRyp5KUkKrU2hbEaN23zI5Xsx5tlZMWIBTs2mGtowf5jBRjPKs6cIW6R@postgresql.org X-Gm-Message-State: AOJu0YyHZ+84kDtbiWNNvSVS82LAWYbPJIHvy2tBRr9BNe8/A/EaiwPB Wib/kiby2nDvIfSUfOp7bAfN+VtIrI4qNLt64Y0eY6mfXTBRjCDfc93pGsfTgqp8T9NUI7655NH mQ0DKS7aE5tqoj4mWu2FrJIoQEMwpqgA= X-Gm-Gg: ASbGnctrEmrEPVDiSewayqAUXc1AWKx/D1c3ZshPvgFT2933e/U/uytqwvcorf464eT CZcpSYwTKyUoywdyB/g52/7+pKhkivDblsX9tkABI76+GuYlvb9NYrp+9KRLA60F4pW22rZVBAZ gZGe6MkoCIQadMdQ9jhQ/24mV6rVF0r/qQ+um7um4KnxIz5ywZHMjTwn8UnhrdgDqf0Az9jtLPK 4o28GGrFapz6LOC/CNXtTnT85PtgSRXE/FK0hZyoohLRtsw/WCSoK2h6Nt2KHVRUeOMtjqsPNKu 5uloFEuvx8S5Ii69XOWGUKwuhLR1fw== X-Google-Smtp-Source: AGHT+IF5A0togI8SA2ZSBYiTXxPTtojjSigQ2ddWRfWrlAuCAk26X1Wgg434vZMy+86bH5fbIyNFL9OeK6hSorcWWk8= X-Received: by 2002:a05:6512:104c:b0:595:7d94:eaa1 with SMTP id 2adb3069b0e04-596a3edbc22mr1760812e87.32.1763831284675; Sat, 22 Nov 2025 09:08:04 -0800 (PST) MIME-Version: 1.0 References: <202505181556.3n6oiowvntyr@alvherre.pgsql> In-Reply-To: From: Mihail Nikalayeu Date: Sat, 22 Nov 2025 18:08:00 +0100 X-Gm-Features: AWmQ_bkFnW0mzQtt3TPTOpLagDFh1pwx9aemsydCaMkT4eNdVcmcfYbv8u_YTCk Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Sergey Sargsyan Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Andres Freund , Michael Paquier , PostgreSQL Hackers , Andrey Borodin , Melanie Plageman , Matthias van de Meent Content-Type: multipart/mixed; boundary="0000000000002ad96a064431f950" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002ad96a064431f950 Content-Type: text/plain; charset="UTF-8" Reduced memory used by stress-test to avoid OOM in CI. Best regards, Mikhail. --0000000000002ad96a064431f950 Content-Type: text/plain; charset="UTF-8"; name="v27-0007-Optimize-auxiliary-index-handling.patch" Content-Disposition: attachment; filename="v27-0007-Optimize-auxiliary-index-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg71b1 RnJvbSA1NTdiMjI1ZDY0ZDM4OTQ4OTgwMWQwODEwMTZiNzc1N2VmMzE3MGZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAzMCBEZWMgMjAyNCAxNjozNzoxMiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDcvOF0gT3B0aW1pemUgYXV4aWxpYXJ5IGluZGV4IGhhbmRsaW5nCk1JTUUtVmVy c2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50 LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpTa2lwIHVubmVjZXNzYXJ5IGNvbXB1dGF0aW9ucyBm b3IgYXV4aWxpYXJ5IGluZGljZXMgYnk6Ci0gaW4gdGhlIGluZGV44oCQaW5zZXJ0IHBhdGgsIGRl dGVjdCBhdXhpbGlhcnkgaW5kZXhlcyBhbmQgYnlwYXNzIERhdHVtIHZhbHVlIGNvbXB1dGF0aW9u Ci0gc2V0IGluZGV4VW5jaGFuZ2VkPWZhbHNlIGZvciBhdXhpbGlhcnkgaW5kaWNlcyB0byBhdm9p ZCByZWR1bmRhbnQgY2hlY2tzCgpUaGVzZSBvcHRpbWl6YXRpb25zIHJlZHVjZSBvdmVyaGVhZCBk dXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyAgICAgICAgIHwgMTEgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNJbmRleGluZy5jIHwgMTEgKysrKysrKy0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5z ZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRh bG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggZmJlYmM2ZWQ5 YWIuLjIwNDRiNzI0YmE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTE2LDYgKzI5MTYsMTcgQEAg Rm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJTGlzdENlbGwgICAqaW5kZXhw cl9pdGVtOwogCWludAkJCWk7CiAKKwkvKiBBdXhpbGlhcnkgaW5kZXggZG9lcyBub3QgbmVlZCBh bnkgdmFsdWVzIHRvIGJlIGNvbXB1dGVkICovCisJaWYgKHVubGlrZWx5KGluZGV4SW5mby0+aWlf QXV4aWxpYXJ5KSkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBpbmRleEluZm8tPmlpX051bUluZGV4 QXR0cnM7IGkrKykKKwkJeworCQkJdmFsdWVzW2ldID0gUG9pbnRlckdldERhdHVtKE5VTEwpOwor CQkJaXNudWxsW2ldID0gdHJ1ZTsKKwkJfQorCQlyZXR1cm47CisJfQorCiAJaWYgKGluZGV4SW5m by0+aWlfRXhwcmVzc2lvbnMgIT0gTklMICYmCiAJCWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNT dGF0ZSA9PSBOSUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0lu ZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBkZjdl N2JjZTg2ZC4uZmY0Nzk1MTU2MGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBA IC00NDAsMTEgKzQ0MCwxNCBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVsSW5mbyAq cmVzdWx0UmVsSW5mbywKIAkJICogVGhlcmUncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGFuIGlu ZGV4X2luc2VydCgpIGNhbGwgZm9yIHRoaXMKIAkJICogaW5kZXguICBJZiB3ZSdyZSBiZWluZyBj YWxsZWQgYXMgcGFydCBvZiBhbiBVUERBVEUgc3RhdGVtZW50LAogCQkgKiBjb25zaWRlciBpZiB0 aGUgJ2luZGV4VW5jaGFuZ2VkJyA9IHRydWUgaGludCBzaG91bGQgYmUgcGFzc2VkLgorCQkgKgor CQkgKiBJbiBjYXNlIG9mIGF1eGlsaWFyeSBpbmRleCBhbHdheXMgcGFzcyBmYWxzZSBhcyBvcHRp bWlzYXRpb24uCiAJCSAqLwotCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0ZSAmJiBpbmRleF91bmNo YW5nZWRfYnlfdXBkYXRlKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkJCQkJCQkgZXN0YXRlLAot CQkJCQkJCQkJCQkJCQkJIGluZGV4SW5mbywKLQkJCQkJCQkJCQkJCQkJCSBpbmRleFJlbGF0aW9u KTsKKwkJaW5kZXhVbmNoYW5nZWQgPSB1cGRhdGUgJiYgbGlrZWx5KCFpbmRleEluZm8tPmlpX0F1 eGlsaWFyeSkgJiYKKwkJCQkJCQkJCWluZGV4X3VuY2hhbmdlZF9ieV91cGRhdGUocmVzdWx0UmVs SW5mbywKKwkJCQkJCQkJCQkJCQkJCSAgZXN0YXRlLAorCQkJCQkJCQkJCQkJCQkJICBpbmRleElu Zm8sCisJCQkJCQkJCQkJCQkJCQkgIGluZGV4UmVsYXRpb24pOwogCiAJCXNhdGlzZmllc0NvbnN0 cmFpbnQgPQogCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sIC8qIGluZGV4IHJlbGF0aW9u ICovCi0tIAoyLjQzLjAKCg== --0000000000002ad96a064431f950 Content-Type: text/plain; charset="US-ASCII"; name="v27-0008-Refresh-snapshot-periodically-during-index-valid.patch" Content-Disposition: attachment; filename="v27-0008-Refresh-snapshot-periodically-during-index-valid.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg7170 RnJvbSBiOTA4ZDZlYmMyMjBhNzI1ZmJjN2QxZTUyM2NjNDc1OGQ1NzE2YWY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAyMSBBcHIgMjAyNSAxNDoxMTo1MyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDgvOF0gUmVmcmVzaCBzbmFwc2hvdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGluZGV4 IHZhbGlkYXRpb24KCkVuaGFuY2VzIHZhbGlkYXRpb24gcGhhc2Ugb2YgY29uY3VycmVudGx5IGJ1 aWx0IGluZGV4ZXMgYnkgcGVyaW9kaWNhbGx5IHJlZnJlc2hpbmcgc25hcHNob3RzIHJhdGhlciB0 aGFuIHVzaW5nIGEgc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdC4gVGhpcyBhZGRyZXNzZXMgaXNz dWVzIHdpdGggeG1pbiBwcm9wYWdhdGlvbiBkdXJpbmcgbG9uZy1ydW5uaW5nIHZhbGlkYXRpb25z LgoKVGhlIHZhbGlkYXRpb24gbm93IHRha2VzIGEgZnJlc2ggc25hcHNob3QgZXZlcnkgZmV3IHBh Z2VzLCBhbGxvd2luZyB0aGUgeG1pbiBob3Jpem9uIHRvIGFkdmFuY2UuIFRoaXMgcmVzdG9yZXMg ZmVhdHVyZSBvZiBjb21taXQgZDlkMDc2MjIyZjViLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gY29t bWl0IGUyOGJiODg1MTk2OS4gTmV3IFNUSVItYmFzZWQgYXBwcm9hY2ggaXMgbm90IGRlcGVuZHMg b24gc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdCBhbnltb3JlLgotLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL1JFQURNRS5IT1QgICAgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYyB8IDczICsrKysrKysrKysrKysrKysrKysrKy0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyAgICB8IDEyICsrKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgfCA0MiArKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICB8IDUwICsrLS0tLS0tLS0tLS0tLS0K IHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCAyNSArKysrLS0tLQog c3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaCAgICAgICAgICAgICB8IDE1ICsrKysrCiBzcmMv aW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgIHwgIDIgKy0KIDggZmlsZXMgY2hh bmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9SRUFETUUuSE9UCmluZGV4IDI4ZTJhMTYwNGM0Li42MDRiZGRhNTlmZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVAorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9SRUFETUUuSE9UCkBAIC00MDEsMTIgKzQwMSwxMiBAQCBsaXZlIHR1cGxlLgogV2Ug bWFyayB0aGUgaW5kZXggb3BlbiBmb3IgaW5zZXJ0cyAoYnV0IHN0aWxsIG5vdCByZWFkeSBmb3Ig cmVhZHMpIHRoZW4KIHdlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZlIHRo ZSB0YWJsZSBvcGVuLiAgVGhlbiB2YWxpZGF0ZQogdGhlIGluZGV4LiAgVGhpcyBzZWFyY2hlcyBm b3IgdHVwbGVzIG1pc3NpbmcgZnJvbSB0aGUgaW5kZXggaW4gYXV4aWxpYXJ5Ci1pbmRleCwgYW5k IGluc2VydHMgYW55IG1pc3Npbmcgb25lcyBpZiB0aGVtIHZpc2libGUgdG8gcmVmZXJlbmNlIHNu YXBzaG90LgoraW5kZXgsIGFuZCBpbnNlcnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhlbSB2aXNp YmxlIHRvIGZyZXNoIHNuYXBzaG90LgogQWdhaW4sIHRoZSBpbmRleCBlbnRyaWVzIGhhdmUgdG8g aGF2ZSBUSURzIGVxdWFsIHRvIEhPVC1jaGFpbiByb290IFRJRHMsIGJ1dAogdGhlIHZhbHVlIHRv IGJlIGluc2VydGVkIGlzIHRoZSBvbmUgZnJvbSB0aGUgbGl2ZSB0dXBsZS4KIAogVGhlbiB3ZSB3 YWl0IHVudGlsIGV2ZXJ5IHRyYW5zYWN0aW9uIHRoYXQgY291bGQgaGF2ZSBhIHNuYXBzaG90IG9s ZGVyIHRoYW4KLXRoZSBzZWNvbmQgcmVmZXJlbmNlIHNuYXBzaG90IGlzIGZpbmlzaGVkLiAgVGhp cyBlbnN1cmVzIHRoYXQgbm9ib2R5IGlzCit0aGUgbGF0ZXN0IHVzZWQgc25hcHNob3QgaXMgZmlu aXNoZWQuICBUaGlzIGVuc3VyZXMgdGhhdCBub2JvZHkgaXMKIGFsaXZlIGFueSBsb25nZXIgd2hv IGNvdWxkIG5lZWQgdG8gc2VlIGFueSB0dXBsZXMgdGhhdCBtaWdodCBiZSBtaXNzaW5nCiBmcm9t IHRoZSBpbmRleCwgYXMgd2VsbCBhcyBlbnN1cmluZyB0aGF0IG5vIG9uZSBjYW4gc2VlIGFueSBp bmNvbnNpc3RlbnQKIHJvd3MgaW4gYSBicm9rZW4gSE9UIGNoYWluICh0aGUgZmlyc3QgY29uZGl0 aW9uIGlzIHN0cm9uZ2VyIHRoYW4gdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwppbmRleCBjODVlNTMzMmJhMi4uMTJiYWE4NzI4ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMTk5NiwyMyArMTk5NiwyNiBAQCBoZWFwYW1f aW5kZXhfdmFsaWRhdGVfc2Nhbl9yZWFkX3N0cmVhbV9uZXh0KAogCXJldHVybiByZXN1bHQ7CiB9 CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgVHJhbnNhY3Rpb25JZAogaGVhcGFtX2luZGV4X3ZhbGlk YXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJICAgUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwKIAkJCQkJCSAgIEluZGV4SW5mbyAqaW5kZXhJbmZvLAotCQkJCQkJICAgU25hcHNo b3Qgc25hcHNob3QsCiAJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAogCQkJCQkJ ICAgVmFsaWRhdGVJbmRleFN0YXRlICphdXhTdGF0ZSkKIHsKKwlUcmFuc2FjdGlvbklkIGxpbWl0 WG1pbjsKKwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJ TkRFWF9NQVhfS0VZU107CiAKKwlTbmFwc2hvdAkJc25hcHNob3Q7CiAJVHVwbGVUYWJsZVNsb3Qg ICpzbG90OwogCUVTdGF0ZQkJCSplc3RhdGU7CiAJRXhwckNvbnRleHQJCSplY29udGV4dDsKIAlC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVM S1JFQUQpOwogCi0JaW50CQkJCW51bV90b19jaGVjazsKKwlpbnQJCQkJbnVtX3RvX2NoZWNrLAor CQkJCQlwYWdlX3JlYWRfY291bnRlciA9IDE7IC8qIHNldCB0byAxIHRvIHNraXAgc25hcHNob3Qg cmVzZXQgYXQgc3RhcnQgKi8KIAlUdXBsZXN0b3Jlc3RhdGUgKnR1cGxlc19mb3JfY2hlY2s7CiAJ VmFsaWRhdGVJbmRleFNjYW5TdGF0ZSBjYWxsYmFja19wcml2YXRlX2RhdGE7CiAKQEAgLTIwMjMs MTQgKzIwMjYsMTYgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCS8qIFVzZSAxMCUgb2YgbWVtb3J5IGZvciB0dXBsZSBzdG9yZS4gKi8KIAlpbnQJ CXN0b3JlX3dvcmtfbWVtX3BhcnQgPSBtYWludGVuYW5jZV93b3JrX21lbSAvIDEwOwogCi0JLyoK LQkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVlcyBmb3IgdGhlIHNvcnQsIHJhdGhlciB0aGFu IGRpcmVjdGx5IHNvcnRpbmcKLQkgKiBpdGVtIHBvaW50ZXJzLiAgVGhpcyBjYW4gYmUgc2lnbmlm aWNhbnRseSBmYXN0ZXIsIHByaW1hcmlseSBiZWNhdXNlIFRJRAotCSAqIGlzIGEgcGFzcy1ieS1y ZWZlcmVuY2UgdHlwZSBvbiBhbGwgcGxhdGZvcm1zLCB3aGVyZWFzIGludDggaXMKLQkgKiBwYXNz LWJ5LXZhbHVlIG9uIG1vc3QgcGxhdGZvcm1zLgotCSAqLworCVB1c2hBY3RpdmVTbmFwc2hvdChH ZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCiAJdHVwbGVzX2Zvcl9jaGVjayA9ICB0dXBsZXN0 b3JlX2JlZ2luX2RhdHVtKElOVDhPSUQsIGZhbHNlLCBmYWxzZSwgc3RvcmVfd29ya19tZW1fcGFy dCk7CiAKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3Qo KTsKKworCUFzc2VydCghSGF2ZVJlZ2lzdGVyZWRPckFjdGl2ZVNuYXBzaG90KCkpOworCUFzc2Vy dCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisKIAkvKgogCSAqIHNhbml0 eSBjaGVja3MKIAkgKi8KQEAgLTIwNDYsNiArMjA1MSwyOSBAQCBoZWFwYW1faW5kZXhfdmFsaWRh dGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAKIAlzdGF0ZS0+dHVwbGVzb3J0ID0gYXV4 U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CiAKKwkvKgorCSAqIE5vdyB0YWtlIHRoZSBmaXJzdCBz bmFwc2hvdCB0aGF0IHdpbGwgYmUgdXNlZCBieSB0byBmaWx0ZXIgY2FuZGlkYXRlCisJICogdHVw bGVzLiBXZSBhcmUgZ29pbmcgdG8gcmVwbGFjZSBpdCBieSBuZXdlciBzbmFwc2hvdCBldmVyeSBz byBvZnRlbgorCSAqIHRvIHByb3BhZ2F0ZSBob3Jpem9uLgorCSAqCisJICogQmV3YXJlISAgVGhl cmUgbWlnaHQgc3RpbGwgYmUgc25hcHNob3RzIGluIHVzZSB0aGF0IHRyZWF0IHNvbWUgdHJhbnNh Y3Rpb24KKwkgKiBhcyBpbi1wcm9ncmVzcyB0aGF0IG91ciB0ZW1wb3Jhcnkgc25hcHNob3QgdHJl YXRzIGFzIGNvbW1pdHRlZC4KKwkgKgorCSAqIElmIHN1Y2ggYSByZWNlbnRseS1jb21taXR0ZWQg dHJhbnNhY3Rpb24gZGVsZXRlZCB0dXBsZXMgaW4gdGhlIHRhYmxlLAorCSAqIHdlIHdpbGwgbm90 IGluY2x1ZGUgdGhlbSBpbiB0aGUgaW5kZXg7IHlldCB0aG9zZSB0cmFuc2FjdGlvbnMgd2hpY2gK KwkgKiBzZWUgdGhlIGRlbGV0aW5nIG9uZSBhcyBzdGlsbC1pbi1wcm9ncmVzcyB3aWxsIGV4cGVj dCBzdWNoIHR1cGxlcyB0bworCSAqIGJlIHRoZXJlIG9uY2Ugd2UgbWFyayB0aGUgaW5kZXggYXMg dmFsaWQuCisJICoKKwkgKiBXZSBzb2x2ZSB0aGlzIGJ5IHdhaXRpbmcgZm9yIGFsbCBlbmRhbmdl cmVkIHRyYW5zYWN0aW9ucyB0byBleGl0IGJlZm9yZQorCSAqIHdlIG1hcmsgdGhlIGluZGV4IGFz IHZhbGlkLCBmb3IgdGhhdCByZWFzb24gbGltaXRYbWluIGlzIHN1cHBvcnRlZC4KKwkgKgorCSAq IFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRvIHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25z IGluIGluZGV4ZXMgbWF5CisJICogbmVlZCBhIHNuYXBzaG90LgorCSAqLworCXNuYXBzaG90ID0g UmVnaXN0ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsKKwlQdXNoQWN0aXZlU25hcHNo b3Qoc25hcHNob3QpOworCWxpbWl0WG1pbiA9IHNuYXBzaG90LT54bWluOworCiAJZXN0YXRlID0g Q3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4 dChlc3RhdGUpOwogCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXRE ZXNjcihoZWFwUmVsYXRpb24pLApAQCAtMjA3OSw2ICsyMTA3LDcgQEAgaGVhcGFtX2luZGV4X3Zh bGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCiAJCUxvY2tCdWZmZXIoYnVmLCBC VUZGRVJfTE9DS19TSEFSRSk7CiAJCWJsb2NrX251bWJlciA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1Zik7CisJCXBhZ2VfcmVhZF9jb3VudGVyKys7CiAKIAkJaSA9IDA7CiAJCXdoaWxlICgob2Zm ID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQpAQCAtMjEzNCw2ICsyMTYzLDIw IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJ fQogCiAJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKyNkZWZpbmUgVkFMSURBVEVfSU5ERVhfUkVTRVRf U05BUFNIT1RfRUFDSF9OX1BBR0UgNDA5NgorCQlpZiAocGFnZV9yZWFkX2NvdW50ZXIgJSBWQUxJ REFURV9JTkRFWF9SRVNFVF9TTkFQU0hPVF9FQUNIX05fUEFHRSA9PSAwKQorCQl7CisJCQlQb3BB Y3RpdmVTbmFwc2hvdCgpOworCQkJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwkJCS8q IHRvIG1ha2Ugc3VyZSB3ZSBwcm9wYWdhdGUgeG1pbiAqLworCQkJSW52YWxpZGF0ZUNhdGFsb2dT bmFwc2hvdCgpOworCQkJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4p KTsKKworCQkJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkp OworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJCS8qIHhtaW4gc2hvdWxkIG5v dCBnbyBiYWNrd2FyZHMsIGJ1dCBqdXN0IGZvciB0aGUgY2FzZSovCisJCQlsaW1pdFhtaW4gPSBU cmFuc2FjdGlvbklkTmV3ZXIobGltaXRYbWluLCBzbmFwc2hvdC0+eG1pbik7CisJCX0KIAl9CiAK IAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwpAQCAtMjE0Myw5ICsyMTg2LDIx IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAly ZWFkX3N0cmVhbV9lbmQocmVhZF9zdHJlYW0pOwogCXR1cGxlc3RvcmVfZW5kKHR1cGxlc19mb3Jf Y2hlY2spOwogCisJLyoKKwkgKiBEcm9wIHRoZSBsYXRlc3Qgc25hcHNob3QuICBXZSBtdXN0IGRv IHRoaXMgYmVmb3JlIHdhaXRpbmcgb3V0IG90aGVyCisJICogc25hcHNob3QgaG9sZGVycywgZWxz ZSB3ZSB3aWxsIGRlYWRsb2NrIGFnYWluc3Qgb3RoZXIgcHJvY2Vzc2VzIGFsc28KKwkgKiBkb2lu ZyBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZLCB3aGljaCB3b3VsZCBzZWUgb3VyIHNuYXBzaG90 IGFzIG9uZQorCSAqIHRoZXkgbXVzdCB3YWl0IGZvci4KKwkgKi8KKwlQb3BBY3RpdmVTbmFwc2hv dCgpOworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJSW52YWxpZGF0ZUNhdGFsb2dT bmFwc2hvdCgpOworCUFzc2VydChNeVByb2MtPnhtaW4gPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQp OwogCS8qIFRoZXNlIG1heSBoYXZlIGJlZW4gcG9pbnRpbmcgdG8gdGhlIG5vdy1nb25lIGVzdGF0 ZSAqLwogCWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNTdGF0ZSA9IE5JTDsKIAlpbmRleEluZm8t PmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKworCXJldHVybiBsaW1pdFhtaW47CiB9CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwppbmRleCA3MWVmMmU1MDM2Zi4uODE0 MDZkOGZjMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVt LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwpAQCAtMTkxLDE0 ICsxOTEsMTYgQEAgdmFjdXVtTGVhZlBhZ2Uoc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMsIFJlbGF0 aW9uIGluZGV4LCBCdWZmZXIgYnVmZmVyLAogCQkJICogQWRkIHRhcmdldCBUSUQgdG8gcGVuZGlu ZyBsaXN0IGlmIHRoZSByZWRpcmVjdGlvbiBjb3VsZCBoYXZlCiAJCQkgKiBoYXBwZW5lZCBzaW5j ZSBWQUNVVU0gc3RhcnRlZC4gIChJZiB4aWQgaXMgaW52YWxpZCwgYXNzdW1lIGl0CiAJCQkgKiBt dXN0IGhhdmUgaGFwcGVuZWQgYmVmb3JlIFZBQ1VVTSBzdGFydGVkLCBzaW5jZSBSRUlOREVYCi0J CQkgKiBDT05DVVJSRU5UTFkgbG9ja3Mgb3V0IFZBQ1VVTS4pCisJCQkgKiBDT05DVVJSRU5UTFkg bG9ja3Mgb3V0IFZBQ1VVTSwgaWYgbXlYbWluIGlzIGludmFsaWQgaXQgaXMKKwkJCSAqIHZhbGlk YXRpb24gc2Nhbi4pCiAJCQkgKgogCQkJICogTm90ZTogd2UgY291bGQgbWFrZSBhIHRpZ2h0ZXIg dGVzdCBieSBzZWVpbmcgaWYgdGhlIHhpZCBpcwogCQkJICogInJ1bm5pbmciIGFjY29yZGluZyB0 byB0aGUgYWN0aXZlIHNuYXBzaG90OyBidXQgc25hcG1nci5jCiAJCQkgKiBkb2Vzbid0IGN1cnJl bnRseSBleHBvcnQgYSBzdWl0YWJsZSBBUEksIGFuZCBpdCdzIG5vdCBlbnRpcmVseQogCQkJICog Y2xlYXIgdGhhdCBhIHRpZ2h0ZXIgdGVzdCBpcyB3b3J0aCB0aGUgY3ljbGVzIGFueXdheS4KIAkJ CSAqLwotCQkJaWYgKFRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMoZHQtPnhpZCwgYmRzLT5t eVhtaW4pKQorCQkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChiZHMtPm15WG1pbikgfHwKKwkJ CQkJVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhkdC0+eGlkLCBiZHMtPm15WG1pbikpCiAJ CQkJc3BnQWRkUGVuZGluZ1RJRChiZHMsICZkdC0+cG9pbnRlcik7CiAJCX0KIAkJZWxzZQpAQCAt ODA4LDcgKzgxMCw2IEBAIHNwZ3ZhY3V1bXNjYW4oc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMpCiAJ LyogRmluaXNoIHNldHRpbmcgdXAgc3BnQnVsa0RlbGV0ZVN0YXRlICovCiAJaW5pdFNwR2lzdFN0 YXRlKCZiZHMtPnNwZ3N0YXRlLCBpbmRleCk7CiAJYmRzLT5wZW5kaW5nTGlzdCA9IE5VTEw7Ci0J YmRzLT5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwogCWJkcy0+bGFzdEZpbGxl ZEJsb2NrID0gU1BHSVNUX0xBU1RfRklYRURfQkxLTk87CiAKIAkvKgpAQCAtOTU5LDYgKzk2MCwx MCBAQCBzcGdidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRl UmVzdWx0ICpzdGF0cywKIAliZHMuc3RhdHMgPSBzdGF0czsKIAliZHMuY2FsbGJhY2sgPSBjYWxs YmFjazsKIAliZHMuY2FsbGJhY2tfc3RhdGUgPSBjYWxsYmFja19zdGF0ZTsKKwlpZiAoaW5mby0+ dmFsaWRhdGVfaW5kZXgpCisJCWJkcy5teVhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwll bHNlCisJCWJkcy5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwogCiAJc3BndmFj dXVtc2NhbigmYmRzKTsKIApAQCAtOTk5LDYgKzEwMDQsNyBAQCBzcGd2YWN1dW1jbGVhbnVwKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cykKIAkJYmRz LnN0YXRzID0gc3RhdHM7CiAJCWJkcy5jYWxsYmFjayA9IGR1bW15X2NhbGxiYWNrOwogCQliZHMu Y2FsbGJhY2tfc3RhdGUgPSBOVUxMOworCQliZHMubXlYbWluID0gR2V0QWN0aXZlU25hcHNob3Qo KS0+eG1pbjsKIAogCQlzcGd2YWN1dW1zY2FuKCZiZHMpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRl eCAyMDQ0YjcyNGJhNS4uMjQxNWUxZjJmMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTM1MTMsOCAr MzUxMyw5IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICog aW5zZXJ0IHRoZWlyIG5ldyB0dXBsZXMgaW50byBpdC4gQXQgdGhlIHNhbWUgbW9tZW50IHdlIGNs ZWFyICJpbmRpc3JlYWR5IiBmb3IKICAqIGF1eGlsaWFyeSBpbmRleCwgc2luY2UgaXQgaXMgbm8g bW9yZSByZXF1aXJlZCB0byBiZSB1cGRhdGVkLgogICoKLSAqIFdlIHRoZW4gdGFrZSBhIG5ldyBy ZWZlcmVuY2Ugc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCi0g KiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0 byB0aGUgaW5kZXguCisgKiBXZSB0aGVuIHRha2UgYSBuZXcgc25hcHNob3QsIGFueSB0dXBsZXMg dGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCisgKiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGlu IHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0byB0aGUgaW5kZXguIEluCisgKiBvcmRlciB0byBw cm9wYWdhdGUgeG1pbiB3ZSByZXNldCB0aGF0IHNuYXBzaG90IGV2ZXJ5IGZldyBzbyBvZnRlbi4K ICAqIChBbnkgdHVwbGVzIGNvbW1pdHRlZCBsaXZlIGFmdGVyIHRoZSBzbmFwIHdpbGwgYmUgaW5z ZXJ0ZWQgaW50byB0aGUKICAqIGluZGV4IGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHRyYW5zYWN0aW9u LiAgQW55IHR1cGxlcyBjb21taXR0ZWQgZGVhZCBiZWZvcmUKICAqIHRoZSBzbmFwIG5lZWQgbm90 IGJlIGluZGV4ZWQsIGJlY2F1c2Ugd2Ugd2lsbCB3YWl0IG91dCBhbGwgdHJhbnNhY3Rpb25zCkBA IC0zNTI3LDcgKzM1MjgsNyBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKICAqIFRJRHMgb2YgYm90aCBhdXhpbGlhcnkgYW5kIHRhcmdldCBpbmRleGVzLCBhbmQg ZG9pbmcgYSAibWVyZ2Ugam9pbiIgYWdhaW5zdAogICogdGhlIFRJRCBsaXN0cyB0byBzZWUgd2hp Y2ggdHVwbGVzIGZyb20gYXV4aWxpYXJ5IGluZGV4IGFyZSBtaXNzaW5nIGZyb20gdGhlCiAgKiB0 YXJnZXQgaW5kZXguICBUaHVzIHdlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHR1cGxlcyB2YWxpZCBh Y2NvcmRpbmcgdG8gdGhlCi0gKiByZWZlcmVuY2Ugc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4g Tm90aWNlIHdlIG5lZWQgdG8gZG8gYnVsa2RlbGV0ZSBpbiB0aGUKKyAqIGxhdGVzdCBzbmFwc2hv dCBhcmUgaW4gdGhlIGluZGV4LiBOb3RpY2Ugd2UgbmVlZCB0byBkbyBidWxrZGVsZXRlIGluIHRo ZQogICogcGFydGljdWxhciBvcmRlcjogYXV4aWxpYXJ5IGZpcnN0LCB0YXJnZXQgbGFzdC4KICAq CiAgKiBCdWlsZGluZyBhIHVuaXF1ZSBpbmRleCB0aGlzIHdheSBpcyB0cmlja3k6IHdlIG1pZ2h0 IHRyeSB0byBpbnNlcnQgYQpAQCAtMzU0OCwxMyArMzU0OSwxNCBAQCBJbmRleENoZWNrRXhjbHVz aW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqCiAgKiBBbHNvLCBzb21lIGFjdGlvbnMgdG8g Y29uY3VycmVudCBkcm9wIHRoZSBhdXhpbGlhcnkgaW5kZXggYXJlIHBlcmZvcm1lZC4KICAqLwot dm9pZAotdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRl eElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKK1RyYW5zYWN0aW9uSWQKK3ZhbGlkYXRlX2luZGV4KE9p ZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCkKIHsKIAlSZWxhdGlvbgloZWFw UmVsYXRpb24sCiAJCQkJaW5kZXhSZWxhdGlvbiwKIAkJCQlhdXhJbmRleFJlbGF0aW9uOwogCUlu ZGV4SW5mbyAgKmluZGV4SW5mbzsKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKIAlJbmRleFZh Y3V1bUluZm8gaXZpbmZvLCBhdXhpdmluZm87CiAJVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRlLCBh dXhTdGF0ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTM2MDQsOCArMzYwNiwxMiBAQCB2YWxp ZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBz aG90IHNuYXBzaG90KQogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZvciBpbmRleF9pbnNlcnQuICAo WW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCiAJICogcGFzc2VkIGluIGZyb20gRGVmaW5l SW5kZXgsIGJ1dCBpdHMgY29weSBpcyBsb25nIGdvbmUgZHVlIHRvIGhhdmluZwogCSAqIGJlZW4g YnVpbHQgaW4gYSBwcmV2aW91cyB0cmFuc2FjdGlvbi4pCisJICoKKwkgKiBXZSBtaWdodCBuZWVk IHNuYXBzaG90IGZvciBpbmRleCBleHByZXNzaW9ucyBvciBwcmVkaWNhdGVzLgogCSAqLworCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCWluZGV4SW5mbyA9 IEJ1aWxkSW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAK IAkvKiBtYXJrIGJ1aWxkIGlzIGNvbmN1cnJlbnQganVzdCBmb3IgY29uc2lzdGVuY3kgKi8KIAlp bmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSB0cnVlOwpAQCAtMzY0MSw2ICszNjQ3LDkgQEAgdmFs aWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFw c2hvdCBzbmFwc2hvdCkKIAkJCQkJCQkJCQkgICBOVUxMLCBUVVBMRVNPUlRfTk9ORSk7CiAJYXV4 U3RhdGUuaHR1cHMgPSBhdXhTdGF0ZS5pdHVwcyA9IGF1eFN0YXRlLnR1cHNfaW5zZXJ0ZWQgPSAw OwogCisJLyogdHVwbGVzb3J0X2JlZ2luX2RhdHVtIG1heSByZXF1aXJlIGNhdGFsb2cgc25hcHNo b3QgKi8KKwlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisKIAkodm9pZCkgaW5kZXhfYnVs a19kZWxldGUoJmF1eGl2aW5mbywgTlVMTCwKIAkJCQkJCQkgdmFsaWRhdGVfaW5kZXhfY2FsbGJh Y2ssICZhdXhTdGF0ZSk7CiAJLyogSWYgYXV4IGluZGV4IGlzIGVtcHR5LCBtZXJnZSBtYXkgYmUg c2tpcHBlZCAqLwpAQCAtMzY3NSw2ICszNjg0LDkgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJ ZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCQkJ CQkJCQkJTlVMTCwgVFVQTEVTT1JUX05PTkUpOwogCXN0YXRlLmh0dXBzID0gc3RhdGUuaXR1cHMg PSBzdGF0ZS50dXBzX2luc2VydGVkID0gMDsKIAorCS8qIHR1cGxlc29ydF9iZWdpbl9kYXR1bSBt YXkgcmVxdWlyZSBjYXRhbG9nIHNuYXBzaG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hv dCgpOworCiAJLyogYW1idWxrZGVsZXRlIHVwZGF0ZXMgcHJvZ3Jlc3MgbWV0cmljcyAqLwogCSh2 b2lkKSBpbmRleF9idWxrX2RlbGV0ZSgmaXZpbmZvLCBOVUxMLAogCQkJCQkJCSB2YWxpZGF0ZV9p bmRleF9jYWxsYmFjaywgJnN0YXRlKTsKQEAgLTM2OTQsMTkgKzM3MDYsMjQgQEAgdmFsaWRhdGVf aW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBz bmFwc2hvdCkKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSgzLCBwcm9ncmVz c19pbmRleCwgcHJvZ3Jlc3NfdmFscyk7CiAJfQogCXR1cGxlc29ydF9wZXJmb3Jtc29ydChzdGF0 ZS50dXBsZXNvcnQpOworCS8qIHR1cGxlc29ydF9wZXJmb3Jtc29ydCBtYXkgcmVxdWlyZSBjYXRh bG9nIHNuYXBzaG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCiAJdHVwbGVz b3J0X3BlcmZvcm1zb3J0KGF1eFN0YXRlLnR1cGxlc29ydCk7CisJLyogdHVwbGVzb3J0X3BlcmZv cm1zb3J0IG1heSByZXF1aXJlIGNhdGFsb2cgc25hcHNob3QgKi8KKwlJbnZhbGlkYXRlQ2F0YWxv Z1NuYXBzaG90KCk7CisJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4p KTsKIAogCS8qCiAJICogTm93IG1lcmdlIGJvdGggaW5kZXhlcwogCSAqLwogCXBnc3RhdF9wcm9n cmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAogCQkJCQkJCQkgUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lEWE1FUkdFKTsKLQl0YWJsZV9pbmRleF92 YWxpZGF0ZV9zY2FuKGhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIGluZGV4UmVsYXRpb24sCi0JCQkJ CQkJICBpbmRleEluZm8sCi0JCQkJCQkJICBzbmFwc2hvdCwKLQkJCQkJCQkgICZzdGF0ZSwKLQkJ CQkJCQkgICZhdXhTdGF0ZSk7CisJbGltaXRYbWluID0gdGFibGVfaW5kZXhfdmFsaWRhdGVfc2Nh bihoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJICBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCSAg aW5kZXhJbmZvLAorCQkJCQkJCQkJCSAgJnN0YXRlLAorCQkJCQkJCQkJCSAgJmF1eFN0YXRlKTsK IAogCS8qIFR1cGxlIHNvcnQgY2xvc2VkIGJ5IHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4gKi8K IAlBc3NlcnQoc3RhdGUudHVwbGVzb3J0ID09IE5VTEwgJiYgYXV4U3RhdGUudHVwbGVzb3J0ID09 IE5VTEwpOwpAQCAtMzcyOSw2ICszNzQ2LDkgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwg T2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAlpbmRleF9j bG9zZShhdXhJbmRleFJlbGF0aW9uLCBOb0xvY2spOwogCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRp b24sIE5vTG9jayk7CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOworCisJQXNz ZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKwlyZXR1cm4gbGltaXRY bWluOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCBjYTRkYzAwM2QxNS4u NzUxNTJkNjliODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC01OTEsNyArNTkxLDYg QEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlMT0NL VEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKLQlTbmFwc2hvdAlzbmFwc2hv dDsKIAlPaWQJCQlyb290X3NhdmVfdXNlcmlkOwogCWludAkJCXJvb3Rfc2F2ZV9zZWNfY29udGV4 dDsKIAlpbnQJCQlyb290X3NhdmVfbmVzdGxldmVsOwpAQCAtMTgwNSwzMiArMTgwNCwxMSBAQCBE ZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRz IHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCiAJaWYgKHNhZmVfaW5kZXgpCiAJ CXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7Ci0KLQkvKgotCSAqIE5vdyB0YWtlIHRoZSAicmVm ZXJlbmNlIHNuYXBzaG90IiB0aGF0IHdpbGwgYmUgdXNlZCBieSB2YWxpZGF0ZV9pbmRleCgpCi0J ICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuICBCZXdhcmUhICBUaGVyZSBtaWdodCBzdGls bCBiZSBzbmFwc2hvdHMgaW4KLQkgKiB1c2UgdGhhdCB0cmVhdCBzb21lIHRyYW5zYWN0aW9uIGFz IGluLXByb2dyZXNzIHRoYXQgb3VyIHJlZmVyZW5jZQotCSAqIHNuYXBzaG90IHRyZWF0cyBhcyBj b21taXR0ZWQuICBJZiBzdWNoIGEgcmVjZW50bHktY29tbWl0dGVkIHRyYW5zYWN0aW9uCi0JICog ZGVsZXRlZCB0dXBsZXMgaW4gdGhlIHRhYmxlLCB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0gaW4g dGhlIGluZGV4OyB5ZXQKLQkgKiB0aG9zZSB0cmFuc2FjdGlvbnMgd2hpY2ggc2VlIHRoZSBkZWxl dGluZyBvbmUgYXMgc3RpbGwtaW4tcHJvZ3Jlc3Mgd2lsbAotCSAqIGV4cGVjdCBzdWNoIHR1cGxl cyB0byBiZSB0aGVyZSBvbmNlIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgotCSAqCi0JICog V2Ugc29sdmUgdGhpcyBieSB3YWl0aW5nIGZvciBhbGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlvbnMg dG8gZXhpdCBiZWZvcmUKLQkgKiB3ZSBtYXJrIHRoZSBpbmRleCBhcyB2YWxpZC4KLQkgKgotCSAq IFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRvIHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25z IGluIGluZGV4ZXMgbWF5Ci0JICogbmVlZCBhIHNuYXBzaG90LgotCSAqLwotCXNuYXBzaG90ID0g UmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCVB1c2hBY3RpdmVT bmFwc2hvdChzbmFwc2hvdCk7CiAJLyoKIAkgKiBNZXJnZSBjb250ZW50IG9mIGF1eGlsaWFyeSBh bmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNlcnQgYW55IG1pc3NpbmcgaW5kZXggZW50cmllcy4KIAkg Ki8KLQl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJlbGF0aW9uSWQsIGF1eEluZGV4UmVs YXRpb25JZCwgc25hcHNob3QpOwotCWxpbWl0WG1pbiA9IHNuYXBzaG90LT54bWluOworCWxpbWl0 WG1pbiA9IHZhbGlkYXRlX2luZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhS ZWxhdGlvbklkKTsKIAotCVBvcEFjdGl2ZVNuYXBzaG90KCk7Ci0JVW5yZWdpc3RlclNuYXBzaG90 KHNuYXBzaG90KTsKIAkvKgogCSAqIFRoZSBzbmFwc2hvdCBzdWJzeXN0ZW0gY291bGQgc3RpbGwg Y29udGFpbiByZWdpc3RlcmVkIHNuYXBzaG90cyB0aGF0CiAJICogYXJlIGhvbGRpbmcgYmFjayBv dXIgcHJvY2VzcydzIGFkdmVydGlzZWQgeG1pbjsgaW4gcGFydGljdWxhciwgaWYKQEAgLTE4NTIs OCArMTgzMCw4IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCS8qCiAJICogVGhlIGluZGV4 IGlzIG5vdyB2YWxpZCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBjb250YWlucyBhbGwgY3VycmVudGx5 CiAJICogaW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWlu IHR1cGxlcyBkZWxldGVkIGp1c3QKLQkgKiBiZWZvcmUgdGhlIHJlZmVyZW5jZSBzbmFwIHdhcyB0 YWtlbiwgd2UgaGF2ZSB0byB3YWl0IG91dCBhbnkKLQkgKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdo dCBoYXZlIG9sZGVyIHNuYXBzaG90cy4KKwkgKiBiZWZvcmUgdGhlIGxhc3Qgc25hcHNob3QgZHVy aW5nIHZhbGlkYXRpbmcgd2FzIHRha2VuLCB3ZSBoYXZlIHRvIHdhaXQKKwkgKiBvdXQgYW55IHRy YW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNob3RzLgogCSAqLwogCUlOSkVD VElPTl9QT0lOVCgiZGVmaW5lX2luZGV4X2JlZm9yZV9zZXRfdmFsaWQiLCBOVUxMKTsKIAlwZ3N0 YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKQEAgLTQ0 MDEsNyArNDM3OSw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJewogCQlSZWluZGV4SW5k ZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMpOwogCQlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsK LQkJU25hcHNob3QJc25hcHNob3Q7CiAKIAkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIApA QCAtNDQxNiwxMyArNDM5Myw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBS ZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWlmIChuZXdp ZHgtPnNhZmUpCiAJCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOwogCi0JCS8qCi0JCSAqIFRh a2UgdGhlICJyZWZlcmVuY2Ugc25hcHNob3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRl X2luZGV4KCkKLQkJICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuCi0JCSAqLwotCQlzbmFw c2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKLQkJUHVz aEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKLQogCQkvKgogCQkgKiBVcGRhdGUgcHJvZ3Jlc3Mg Zm9yIHRoZSBpbmRleCB0byBidWlsZCwgd2l0aCB0aGUgY29ycmVjdCBwYXJlbnQKIAkJICogdGFi bGUgaW52b2x2ZWQuCkBAIC00NDM0LDE2ICs0NDA0LDggQEAgUmVpbmRleFJlbGF0aW9uQ29uY3Vy cmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJl aW4KIAkJcHJvZ3Jlc3NfdmFsc1szXSA9IG5ld2lkeC0+YW1JZDsKIAkJcGdzdGF0X3Byb2dyZXNz X3VwZGF0ZV9tdWx0aV9wYXJhbSg0LCBwcm9ncmVzc19pbmRleCwgcHJvZ3Jlc3NfdmFscyk7CiAK LQkJdmFsaWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmluZGV4SWQsIG5ld2lk eC0+YXV4SW5kZXhJZCwgc25hcHNob3QpOwotCi0JCS8qCi0JCSAqIFdlIGNhbiBub3cgZG8gYXdh eSB3aXRoIG91ciBhY3RpdmUgc25hcHNob3QsIHdlIHN0aWxsIG5lZWQgdG8gc2F2ZQotCQkgKiB0 aGUgeG1pbiBsaW1pdCB0byB3YWl0IGZvciBvbGRlciBzbmFwc2hvdHMuCi0JCSAqLwotCQlsaW1p dFhtaW4gPSBzbmFwc2hvdC0+eG1pbjsKLQotCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwotCQlVbnJl Z2lzdGVyU25hcHNob3Qoc25hcHNob3QpOworCQlsaW1pdFhtaW4gPSB2YWxpZGF0ZV9pbmRleChu ZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+aW5kZXhJZCwgbmV3aWR4LT5hdXhJbmRleElkKTsKKwkJ QXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKIAogCQkvKgogCQkg KiBUbyBlbnN1cmUgbm8gZGVhZGxvY2tzLCB3ZSBtdXN0IGNvbW1pdCBhbmQgc3RhcnQgeWV0IGFu b3RoZXIKQEAgLTQ0NTYsNyArNDQxOCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCS8q CiAJCSAqIFRoZSBpbmRleCBpcyBub3cgdmFsaWQgaW4gdGhlIHNlbnNlIHRoYXQgaXQgY29udGFp bnMgYWxsIGN1cnJlbnRseQogCQkgKiBpbnRlcmVzdGluZyB0dXBsZXMuICBCdXQgc2luY2UgaXQg bWlnaHQgbm90IGNvbnRhaW4gdHVwbGVzIGRlbGV0ZWQKLQkJICoganVzdCBiZWZvcmUgdGhlIHJl ZmVyZW5jZSBzbmFwIHdhcyB0YWtlbiwgd2UgaGF2ZSB0byB3YWl0IG91dCBhbnkKKwkJICoganVz dCBiZWZvcmUgdGhlIGxhdGVzdCBzbmFwIHdhcyB0YWtlbiwgd2UgaGF2ZSB0byB3YWl0IG91dCBh bnkKIAkJICogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBvbGRlciBzbmFwc2hvdHMuCiAJ CSAqCiAJCSAqIEJlY2F1c2Ugd2UgZG9uJ3QgdGFrZSBhIHNuYXBzaG90IG9yIFhpZCBpbiB0aGlz IHRyYW5zYWN0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMjI0NDZiMzIxNTcuLjVmYTYwZThl MzdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTcwMiwxMiArNzAyLDExIEBAIHR5cGVkZWYgc3Ry dWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJICAgVGFibGVTY2FuRGVzYyBzY2FuKTsKIAog CS8qIHNlZSB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuIGZvciByZWZlcmVuY2UgYWJvdXQgcGFy YW1ldGVycyAqLwotCXZvaWQJCSgqaW5kZXhfdmFsaWRhdGVfc2NhbikgKFJlbGF0aW9uIHRhYmxl X3JlbCwKLQkJCQkJCQkJCQlSZWxhdGlvbiBpbmRleF9yZWwsCi0JCQkJCQkJCQkJSW5kZXhJbmZv ICppbmRleF9pbmZvLAotCQkJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCVZh bGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCi0JCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICph dXhfc3RhdGUpOworCVRyYW5zYWN0aW9uSWQgCQkoKmluZGV4X3ZhbGlkYXRlX3NjYW4pIChSZWxh dGlvbiB0YWJsZV9yZWwsCisJCQkJCQkJCQkJCQlSZWxhdGlvbiBpbmRleF9yZWwsCisJCQkJCQkJ CQkJCQlJbmRleEluZm8gKmluZGV4X2luZm8sCisJCQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3Rh dGUgKnN0YXRlLAorCQkJCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICphdXhfc3RhdGUpOwog CiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4MDgsMjAgKzE4MDcsMTggQEAgdGFibGVfaW5k ZXhfYnVpbGRfcmFuZ2Vfc2NhbihSZWxhdGlvbiB0YWJsZV9yZWwsCiAgKiBOb3RlOiBpdCBpcyBy ZXNwb25zaWJpbGl0eSBvZiB0aGF0IGZ1bmN0aW9uIHRvIGNsb3NlIHNvcnRzdGF0ZXMgaW4KICAq IGJvdGggYHN0YXRlYCBhbmQgYGF1eHN0YXRlYC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitz dGF0aWMgaW5saW5lIFRyYW5zYWN0aW9uSWQKIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVs YXRpb24gdGFibGVfcmVsLAogCQkJCQkJICBSZWxhdGlvbiBpbmRleF9yZWwsCiAJCQkJCQkgIElu ZGV4SW5mbyAqaW5kZXhfaW5mbywKLQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkg IFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCiAJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAq YXV4c3RhdGUpCiB7Ci0JdGFibGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2Fu KHRhYmxlX3JlbCwKLQkJCQkJCQkJCQkJICAgaW5kZXhfcmVsLAotCQkJCQkJCQkJCQkgICBpbmRl eF9pbmZvLAotCQkJCQkJCQkJCQkgICBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUsCi0J CQkJCQkJCQkJCSAgIGF1eHN0YXRlKTsKKwlyZXR1cm4gdGFibGVfcmVsLT5yZF90YWJsZWFtLT5p bmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwKKwkJCQkJCQkJCQkJCQkgIGluZGV4X3JlbCwK KwkJCQkJCQkJCQkJCQkgIGluZGV4X2luZm8sCisJCQkJCQkJCQkJCQkJICBzdGF0ZSwKKwkJCQkJ CQkJCQkJCQkgIGF1eHN0YXRlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCBjOWUyMDQx ODI3NS4uYjRhNDQ0YTY2ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2Ft LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApAQCAtNDE3LDYgKzQxNywyMSBA QCBOb3JtYWxUcmFuc2FjdGlvbklkT2xkZXIoVHJhbnNhY3Rpb25JZCBhLCBUcmFuc2FjdGlvbklk IGIpCiAJcmV0dXJuIGI7CiB9CiAKKy8qIHJldHVybiB0aGUgbmV3ZXIgb2YgdGhlIHR3byBJRHMg Ki8KK3N0YXRpYyBpbmxpbmUgVHJhbnNhY3Rpb25JZAorVHJhbnNhY3Rpb25JZE5ld2VyKFRyYW5z YWN0aW9uSWQgYSwgVHJhbnNhY3Rpb25JZCBiKQoreworCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQoYSkpCisJCXJldHVybiBiOworCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChiKSkKKwkJ cmV0dXJuIGE7CisKKwlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3MoYSwgYikpCisJCXJldHVybiBh OworCXJldHVybiBiOworfQorCiAvKiByZXR1cm4gdGhlIG5ld2VyIG9mIHRoZSB0d28gSURzICov CiBzdGF0aWMgaW5saW5lIEZ1bGxUcmFuc2FjdGlvbklkCiBGdWxsVHJhbnNhY3Rpb25JZE5ld2Vy KEZ1bGxUcmFuc2FjdGlvbklkIGEsIEZ1bGxUcmFuc2FjdGlvbklkIGIpCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgK aW5kZXggYzI5ZjQ0ZjI0NjUuLjA1MWFjMDJmZjljIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2luZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC0xNTIs NyArMTUyLDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9u LAogCQkJCQkJYm9vbCBpc3JlaW5kZXgsCiAJCQkJCQlib29sIHBhcmFsbGVsKTsKIAotZXh0ZXJu IHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRl eElkLCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gVHJhbnNhY3Rpb25JZCB2YWxpZGF0ZV9p bmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQpOwogCiBleHRlcm4g dm9pZCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4SWQsIEluZGV4U3RhdGVGbGFnc0Fj dGlvbiBhY3Rpb24pOwogCi0tIAoyLjQzLjAKCg== --0000000000002ad96a064431f950 Content-Type: text/plain; charset="US-ASCII"; name="v27-0006-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Disposition: attachment; filename="v27-0006-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg71c2 RnJvbSA1OTUzMjI0NTVhNjc1ZTRmMjgwY2Q2YjU4ZDVlYzMxYjc3OTM0NjU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDozNjozMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDYvOF0gVHJhY2sgYW5kIGRyb3AgYXV4aWxpYXJ5IGluZGV4ZXMgaW4gRFJPUC9S RUlOREVYCgpEdXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLCBhdXhpbGlhcnkgaW5k ZXhlcyBtYXkgYmUgbGVmdCBhcyBvcnBoYW5lZCBvYmplY3RzIHdoZW4gZXJyb3JzIG9jY3VyIChq dW5rIGF1eGlsaWFyeSBpbmRleGVzKS4KClRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIGhhbmRsaW5n IG9mIHN1Y2ggYXV4aWxpYXJ5IGluZGV4ZXM6Ci0gYWRkIGF1eGlsaWFyeUZvckluZGV4SWQgcGFy YW1ldGVyIHRvIGluZGV4X2NyZWF0ZSgpIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzCi0gYXV0b21hdGljYWxseSBkcm9wIGF1eGlsaWFyeSBp bmRleGVzIHdoZW4gdGhlIG1haW4gaW5kZXggaXMgZHJvcHBlZAotIGRlbGV0ZSBqdW5rIGF1eGls aWFyeSBpbmRleGVzIHByb3Blcmx5IGR1cmluZyBSRUlOREVYIG9wZXJhdGlvbnMKLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sICAgICAgICAgfCAgMTQgKystCiBkb2Mvc3Jj L3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgIDcxICsrKysrKysrKystLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5jICAgICAgICAgICAgfCAgNTcgKysrKysrKysrKysKIHNy Yy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyAgICAgICAgICAgfCAgMzggKysrKysrKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICB8ICA0OCArKysrKysrKystCiBz cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9k ZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgIHwgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgfCAxMDUgKysrKysrKysrKysrKysrKysrKy0tCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsICAgICAgfCAgNTcgKysrKysrKysrKy0K IDE0IGZpbGVzIGNoYW5nZWQsIDM2NyBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAppbmRleCBiYTM4N2YyODk3Ny4uYmFkMGRmMTA1ZDIg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbApAQCAtNjY4LDEwICs2NjgsMTYgQEAgSW5k ZXhlczoKICAgICAiaWR4X2NjYXV4IiBzdGlyIChjb2wpIElOVkFMSUQKIDwvcHJvZ3JhbWxpc3Rp bmc+CiAKLSAgICBUaGUgcmVjb21tZW5kZWQgcmVjb3ZlcnkKLSAgICBtZXRob2QgaW4gc3VjaCBj YXNlcyBpcyB0byBkcm9wIHRoZXNlIGluZGV4ZXMgYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3JtCi0g ICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uIChBbm90aGVy IHBvc3NpYmlsaXR5IGlzCi0gICAgdG8gcmVidWlsZCB0aGUgaW5kZXggd2l0aCA8Y29tbWFuZD5S RUlOREVYIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4pLgorICAgIFRoZSByZWNvbW1lbmRl ZCByZWNvdmVyeSBtZXRob2QgaW4gc3VjaCBjYXNlcyBpcyB0byBkcm9wIHRoZSBpbmRleCB3aXRo CisgICAgPGNvbW1hbmQ+RFJPUCBJTkRFWDwvY29tbWFuZD4uIFRoZSBhdXhpbGlhcnkgaW5kZXgg KHN1ZmZpeGVkIHdpdGgKKyAgICA8bGl0ZXJhbD5jY2F1eDwvbGl0ZXJhbD4pIHdpbGwgYmUgYXV0 b21hdGljYWxseSBkcm9wcGVkIHdoZW4gdGhlIG1haW4KKyAgICBpbmRleCBpcyBkcm9wcGVkLiBB ZnRlciBkcm9wcGluZyB0aGUgaW5kZXhlcywgeW91IGNhbiB0cnkgYWdhaW4gdG8gcGVyZm9ybQor ICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAoQW5vdGhl ciBwb3NzaWJpbGl0eSBpcyB0bworICAgIHJlYnVpbGQgdGhlIGluZGV4IHdpdGggPGNvbW1hbmQ+ UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LAorICAgIHdoaWNoIHdpbGwgYWxz byBoYW5kbGUgY2xlYW51cCBvZiBhbnkgaW52YWxpZCBhdXhpbGlhcnkgaW5kZXhlcy4pCisgICAg SWYgdGhlIG9ubHkgaW52YWxpZCBpbmRleCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+Y2NhdXg8 L2xpdGVyYWw+CisgICAgcmVjb21tZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVy YWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4KKyAgICBmb3IgdGhhdCBpbmRleC4KICAgIDwvcGFyYT4K IAogICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCmluZGV4IDk3ZjU1MWE1NWE2Li4wMjVmZTM3 YTM3MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAgLTQ3NywxMSArNDc3LDE1IEBAIEluZGV4ZXM6 CiAgICAgPGxpdGVyYWw+X2NjbmV3PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5fY2NhdXg8L2xpdGVy YWw+LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFuc2llbnQgb3IgYXV4aWxpYXJ5CiAg ICAgaW5kZXggY3JlYXRlZCBkdXJpbmcgdGhlIGNvbmN1cnJlbnQgb3BlcmF0aW9uLCBhbmQgdGhl IHJlY29tbWVuZGVkCiAgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhl cyB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwKLSAgICB0aGVuIGF0dGVtcHQg PGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWluLgorICAgIHRoZW4g YXR0ZW1wdCA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gYWdhaW4uIFRo ZSBhdXhpbGlhcnkgaW5kZXgKKyAgICAoc3VmZml4ZWQgd2l0aCA8bGl0ZXJhbD5fY2NhdXg8L2xp dGVyYWw+KSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZAorICAgIGFsb25nIHdpdGggaXRz IG1haW4gaW5kZXguCiAgICAgSWYgdGhlIGludmFsaWQgaW5kZXggaXMgaW5zdGVhZCBzdWZmaXhl ZCA8bGl0ZXJhbD5fY2NvbGQ8L2xpdGVyYWw+LAogICAgIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBv cmlnaW5hbCBpbmRleCB3aGljaCBjb3VsZCBub3QgYmUgZHJvcHBlZDsKICAgICB0aGUgcmVjb21t ZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGp1c3QgZHJvcCBzYWlkIGluZGV4LCBzaW5jZSB0 aGUKLSAgICByZWJ1aWxkIHByb3BlciBoYXMgYmVlbiBzdWNjZXNzZnVsLgorICAgIHJlYnVpbGQg cHJvcGVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWwuIElmIHRoZSBvbmx5CisgICAgaW52YWxpZCBpbmRl eCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+Y2NhdXg8L2xpdGVyYWw+IHJlY29tbWVuZGVkCisg ICAgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4g Zm9yIHRoYXQgaW5kZXguCiAgICAgQSBub256ZXJvIG51bWJlciBtYXkgYmUgYXBwZW5kZWQgdG8g dGhlIHN1ZmZpeCBvZiB0aGUgaW52YWxpZCBpbmRleAogICAgIG5hbWVzIHRvIGtlZXAgdGhlbSB1 bmlxdWUsIGxpa2UgPGxpdGVyYWw+X2NjbmV3MTwvbGl0ZXJhbD4sCiAgICAgPGxpdGVyYWw+X2Nj b2xkMjwvbGl0ZXJhbD4sIGV0Yy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVw ZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMKaW5kZXggN2RkZWQ2 MzRlYjguLmI1NzlkMjZhZmYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVu ZGVuY3kuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwpAQCAtMjg2LDcg KzI4Niw3IEBAIHBlcmZvcm1EZWxldGlvbihjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCiAJ ICogQWNxdWlyZSBkZWxldGlvbiBsb2NrIG9uIHRoZSB0YXJnZXQgb2JqZWN0LiAgKElkZWFsbHkg dGhlIGNhbGxlciBoYXMKIAkgKiBkb25lIHRoaXMgYWxyZWFkeSwgYnV0IG1hbnkgcGxhY2VzIGFy ZSBzbG9wcHkgYWJvdXQgaXQuKQogCSAqLwotCUFjcXVpcmVEZWxldGlvbkxvY2sob2JqZWN0LCAw KTsKKwlBY3F1aXJlRGVsZXRpb25Mb2NrKG9iamVjdCwgZmxhZ3MpOwogCiAJLyoKIAkgKiBDb25z dHJ1Y3QgYSBsaXN0IG9mIG9iamVjdHMgdG8gZGVsZXRlIChpZSwgdGhlIGdpdmVuIG9iamVjdCBw bHVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNmE0YjM0OGRkMWIuLmZiZWJjNmVkOWFiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jCkBAIC03NzUsNiArNzc1LDggQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIAkJICAgKChmbGFncyAmIElOREVYX0NSRUFURV9BRERfQ09OU1RSQUlOVCkgIT0g MCkpOwogCS8qIHBhcnRpdGlvbmVkIGluZGV4ZXMgbXVzdCBuZXZlciBiZSAiYnVpbHQiIGJ5IHRo ZW1zZWx2ZXMgKi8KIAlBc3NlcnQoIXBhcnRpdGlvbmVkIHx8IChmbGFncyAmIElOREVYX0NSRUFU RV9TS0lQX0JVSUxEKSk7CisJLyogaWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCBhbmQgSU5ERVhfQ1JF QVRFX0FVWElMSUFSWSBhcmUgcmVxdWlyZWQgYm90aCBvciBuZWl0aGVyICovCisJQXNzZXJ0KE9p ZElzVmFsaWQoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJbmRleElkKSA9PSBhdXhpbGlhcnkp OwogCiAJcmVsa2luZCA9IHBhcnRpdGlvbmVkID8gUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWCA6 IFJFTEtJTkRfSU5ERVg7CiAJaXNfZXhjbHVzaW9uID0gKGluZGV4SW5mby0+aWlfRXhjbHVzaW9u T3BzICE9IE5VTEwpOwpAQCAtMTE4MCw2ICsxMTgyLDE1IEBAIGluZGV4X2NyZWF0ZShSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJCQlyZWNvcmREZXBlbmRlbmN5T24oJm15c2VsZiwgJnJlZmVyZW5j ZWQsIERFUEVOREVOQ1lfUEFSVElUSU9OX1NFQyk7CiAJCX0KIAorCQkvKgorCQkgKiBSZWNvcmQg ZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBpbmRleCBpbiBjYXNlIG9mIGF1eGlsaWFyeSBpbmRleC4K KwkJICovCisJCWlmIChPaWRJc1ZhbGlkKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJ ZCkpCisJCXsKKwkJCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgUmVsYXRpb25SZWxhdGlv bklkLCBpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQpOworCQkJcmVjb3JkRGVwZW5k ZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9CisKIAkJ LyogcGxhY2Vob2xkZXIgZm9yIG5vcm1hbCBkZXBlbmRlbmNpZXMgKi8KIAkJYWRkcnMgPSBuZXdf b2JqZWN0X2FkZHJlc3NlcygpOwogCkBAIC0xNDEyLDcgKzE0MjMsOCBAQCBpbmRleF9jb25jdXJy ZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgb2xkSW5kZXhJZCwK IAkJCQkJCQl0cnVlLAogCQkJCQkJCWluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXN1bW1hcml6 aW5nLAogCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcywKLQkJCQkJCQlmYWxzZSk7 CisJCQkJCQkJZmFsc2UsCisJCQkJCQkJSW52YWxpZE9pZCk7CiAKIAkvKgogCSAqIEV4dHJhY3Qg dGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBu ZXcKQEAgLTE1ODAsNyArMTU5Miw4IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfYXV4KFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG1haW5JbmRleElkLAogCQkJCQkJCXRydWUsCiAJCQkJ CQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHN1bW1hcml6aW5nICovCiAJCQkJCQkJZmFsc2UsCS8q IGF1eCBhcmUgbm90IHdpdGhvdXQgb3ZlcmxhcHMgKi8KLQkJCQkJCQl0cnVlCS8qIGF1eGlsaWFy eSAqLyk7CisJCQkJCQkJdHJ1ZQkvKiBhdXhpbGlhcnkgKi8sCisJCQkJCQkJbWFpbkluZGV4SWQg LyogYXV4aWxpYXJ5Rm9ySW5kZXhJZCAqLyk7CiAKIAkvKgogCSAqIEV4dHJhY3QgdGhlIGxpc3Qg b2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBuZXcKQEAgLTI2 MTYsNyArMjYyOSw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJCQkgICBm YWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAogCQkJCQkgICBp bmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlLAot CQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkg aWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09J RCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIEludmFsaWRPaWQgLyogYXV4aWxp YXJ5X2Zvcl9pbmRleF9pZCBpcyBzZXQgb25seSBkdXJpbmcgYnVpbGQgKi8pOwogCiAJLyogZmls bCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1BdHRzOyBpKysp CkBAIC0yNjc3LDcgKzI2OTEsOCBAQCBCdWlsZER1bW15SW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4 KQogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5n LAogCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmlu ZGlzdW5pcXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAv KiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9 PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIEludmFsaWRP aWQpOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9IDA7IGkg PCBudW1BdHRzOyBpKyspCkBAIC0zODQ4LDYgKzM4NjMsNyBAQCByZWluZGV4X2luZGV4KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJCQloZWFwUmVsYXRpb247CiAJT2lk CQkJaGVhcElkOwogCU9pZAkJCXNhdmVfdXNlcmlkOworCU9pZAkJCWp1bmtBdXhJbmRleElkOwog CWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAJSW5kZXhJ bmZvICAqaW5kZXhJbmZvOwpAQCAtMzkwNCw2ICszOTIwLDE5IEBAIHJlaW5kZXhfaW5kZXgoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX211bHRpX3BhcmFtKDIsIHByb2dyZXNzX2NvbHMsIHByb2dyZXNzX3ZhbHMpOwogCX0KIAor CS8qIENoZWNrIGZvciB0aGUgYXV4aWxpYXJ5IGluZGV4IGZvciB0aGF0IGluZGV4LCBpdCBuZWVk cyB0byBkcm9wcGVkICovCisJanVua0F1eEluZGV4SWQgPSBnZXRfYXV4aWxpYXJ5X2luZGV4KGlu ZGV4SWQpOworCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwl7CisJCU9iamVjdEFk ZHJlc3Mgb2JqZWN0OworCQlvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJ b2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4SWQ7CisJCW9iamVjdC5vYmplY3RTdWJJZCA9 IDA7CisJCXBlcmZvcm1EZWxldGlvbigmb2JqZWN0LCBEUk9QX1JFU1RSSUNULAorCQkJCQkJCQkg UEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX1FV SUVUTFkpOworCX0KKwogCS8qCiAJICogT3BlbiB0aGUgdGFyZ2V0IGluZGV4IHJlbGF0aW9uIGFu ZCBnZXQgYW4gZXhjbHVzaXZlIGxvY2sgb24gaXQsIHRvCiAJICogZW5zdXJlIHRoYXQgbm8gb25l IGVsc2UgaXMgdG91Y2hpbmcgdGhpcyBwYXJ0aWN1bGFyIGluZGV4LgpAQCAtNDE5Miw3ICs0MjIx LDggQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGlk LCBpbnQgZmxhZ3MsCiB7CiAJUmVsYXRpb24JcmVsOwogCU9pZAkJCXRvYXN0X3JlbGlkOwotCUxp c3QJICAgKmluZGV4SWRzOworCUxpc3QJICAgKmluZGV4SWRzLAorCQkJICAgKmF1eEluZGV4SWRz ID0gTklMOwogCWNoYXIJCXBlcnNpc3RlbmNlOwogCWJvb2wJCXJlc3VsdCA9IGZhbHNlOwogCUxp c3RDZWxsICAgKmluZGV4SWQ7CkBAIC00MjgxLDEzICs0MzExLDMwIEBAIHJlaW5kZXhfcmVsYXRp b24oY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdzLAogCWVsc2UK IAkJcGVyc2lzdGVuY2UgPSByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CiAKKwlmb3JlYWNo KGluZGV4SWQsIGluZGV4SWRzKQorCXsKKwkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGlu ZGV4SWQpOworCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7CisKKwkJ LyogQWxsIFNUSVIgaW5kZXhlcyBhcmUgYXV4aWxpYXJ5IGluZGV4ZXMgKi8KKwkJaWYgKGluZGV4 QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWlmIChmbGFncyAmIFJFSU5ERVhfUkVMX1NVUFBS RVNTX0lOREVYX1VTRSkKKwkJCQlSZW1vdmVSZWluZGV4UGVuZGluZyhpbmRleE9pZCk7CisJCQlh dXhJbmRleElkcyA9IGxhcHBlbmRfb2lkKGF1eEluZGV4SWRzLCBpbmRleE9pZCk7CisJCX0KKwl9 CisKIAkvKiBSZWluZGV4IGFsbCB0aGUgaW5kZXhlcy4gKi8KIAlpID0gMTsKIAlmb3JlYWNoKGlu ZGV4SWQsIGluZGV4SWRzKQogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGluZGV4 SWQpOwogCQlPaWQJCQlpbmRleE5hbWVzcGFjZUlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhP aWQpOwotCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7CisKKwkJLyog QXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGdvaW5nIHRvIGJlIGRyb3BwZWQgZHVyaW5nIG1haW4gaW5k ZXggcmVidWlsZCAqLworCQlpZiAobGlzdF9tZW1iZXJfb2lkKGF1eEluZGV4SWRzLCBpbmRleE9p ZCkpCisJCQljb250aW51ZTsKIAogCQkvKgogCQkgKiBTa2lwIGFueSBpbnZhbGlkIGluZGV4ZXMg b24gYSBUT0FTVCB0YWJsZS4gIFRoZXNlIGNhbiBvbmx5IGJlCkBAIC00MzEzLDE4ICs0MzYwLDYg QEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGlkLCBp bnQgZmxhZ3MsCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChpbmRleEFtID09IFNUSVJfQU1f T0lEKQotCQl7Ci0JCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBh dXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKLQkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoaW5k ZXhOYW1lc3BhY2VJZCksCi0JCQkJCQkJZ2V0X3JlbF9uYW1lKGluZGV4T2lkKSkpKTsKLQkJCWlm IChmbGFncyAmIFJFSU5ERVhfUkVMX1NVUFBSRVNTX0lOREVYX1VTRSkKLQkJCQlSZW1vdmVSZWlu ZGV4UGVuZGluZyhpbmRleE9pZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXJlaW5kZXhfaW5k ZXgoc3RtdCwgaW5kZXhPaWQsICEoZmxhZ3MgJiBSRUlOREVYX1JFTF9DSEVDS19DT05TVFJBSU5U UyksCiAJCQkJCSAgcGVyc2lzdGVuY2UsIHBhcmFtcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5j CmluZGV4IGM4YjExZjg4N2UyLi4xYzI3NWVmMzczZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19kZXBlbmQuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5j CkBAIC0xMDM1LDYgKzEwMzUsNjMgQEAgZ2V0X2luZGV4X2NvbnN0cmFpbnQoT2lkIGluZGV4SWQp CiAJcmV0dXJuIGNvbnN0cmFpbnRJZDsKIH0KIAorLyoKKyAqIGdldF9hdXhpbGlhcnlfaW5kZXgK KyAqCQlHaXZlbiB0aGUgT0lEIG9mIGFuIGluZGV4LCByZXR1cm4gdGhlIE9JRCBvZiBpdHMgYXV4 aWxpYXJ5CisgKgkJaW5kZXgsIG9yIEludmFsaWRPaWQgaWYgdGhlcmUgaXMgbm8gYXV4aWxpYXJ5 IGluZGV4LgorICovCitPaWQKK2dldF9hdXhpbGlhcnlfaW5kZXgoT2lkIGluZGV4SWQpCit7CisJ T2lkCQkJYXV4aWxpYXJ5SW5kZXhPaWQgPSBJbnZhbGlkT2lkOworCVJlbGF0aW9uCWRlcFJlbDsK KwlTY2FuS2V5RGF0YSBrZXlbM107CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVw OworCisJLyogU2VhcmNoIHRoZSBkZXBlbmRlbmN5IHRhYmxlIGZvciB0aGUgaW5kZXggKi8KKwlk ZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZmNsYXNzaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o UmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleVsxXSwKKwkJCQlBbnVtX3Bn X2RlcGVuZF9yZWZvYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShpbmRleElkKSk7CisJU2NhbktleUluaXQoJmtleVsyXSwKKwkJ CQlBbnVtX3BnX2RlcGVuZF9yZWZvYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2Jl Z2luc2NhbihkZXBSZWwsIERlcGVuZFJlZmVyZW5jZUluZGV4SWQsIHRydWUsCisJCQkJCQkJICBO VUxMLCAzLCBrZXkpOworCisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJs ZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfZGVwZW5kIGRlcHJlYyA9IChGb3JtX3Bn X2RlcGVuZCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJLyoKKwkJICogV2UgYXNzdW1lIGFueSBBVVRP IGRlcGVuZGVuY3kgb24gaW5kZXggd2l0aCByZWxfa2luZAorCQkgKiBvZiBSRUxLSU5EX0lOREVY IGlzIHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgorCQkgKi8KKwkJaWYgKGRlcHJlYy0+Y2xhc3Np ZCA9PSBSZWxhdGlvblJlbGF0aW9uSWQgJiYKKwkJCShkZXByZWMtPmRlcHR5cGUgPT0gREVQRU5E RU5DWV9BVVRPKSAmJgorCQkJZ2V0X3JlbF9yZWxraW5kKGRlcHJlYy0+b2JqaWQpID09IFJFTEtJ TkRfSU5ERVgpCisJCXsKKwkJCWF1eGlsaWFyeUluZGV4T2lkID0gZGVwcmVjLT5vYmppZDsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9z ZShkZXBSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYXV4aWxpYXJ5SW5kZXhPaWQ7 Cit9CisKIC8qCiAgKiBnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzCiAgKgkJR2l2ZW4gdGhlIE9J RCBvZiBhbiBpbmRleCwgcmV0dXJuIHRoZSBPSUQgb2YgYWxsIGZvcmVpZ24ga2V5CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3RvYXN0aW5nLmMKaW5kZXggOWNjNGYwNmRhOWYuLjNhYTY1N2M3OWNiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90 b2FzdGluZy5jCkBAIC0zMDgsNiArMzA4LDcgQEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9u IHJlbCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAlpbmRleEluZm8tPmlpX0Ft ID0gQlRSRUVfQU1fT0lEOwogCWluZGV4SW5mby0+aWlfQW1DYWNoZSA9IE5VTEw7CiAJaW5kZXhJ bmZvLT5paV9BdXhpbGlhcnkgPSBmYWxzZTsKKwlpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvcklu ZGV4SWQgPSBJbnZhbGlkT2lkOwogCWluZGV4SW5mby0+aWlfQ29udGV4dCA9IEN1cnJlbnRNZW1v cnlDb250ZXh0OwogCiAJY29sbGF0aW9uSWRzWzBdID0gSW52YWxpZE9pZDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv aW5kZXhjbWRzLmMKaW5kZXggOWMzNDgyNWU5N2QuLmNhNGRjMDAzZDE1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9pbmRleGNtZHMuYwpAQCAtMjQ1LDcgKzI0NSw3IEBAIENoZWNrSW5kZXhDb21wYXRpYmxlKE9p ZCBvbGRJZCwKIAlpbmRleEluZm8gPSBtYWtlSW5kZXhJbmZvKG51bWJlck9mQXR0cmlidXRlcywg bnVtYmVyT2ZBdHRyaWJ1dGVzLAogCQkJCQkJCSAgYWNjZXNzTWV0aG9kSWQsIE5JTCwgTklMLCBm YWxzZSwgZmFsc2UsCiAJCQkJCQkJICBmYWxzZSwgZmFsc2UsIGFtc3VtbWFyaXppbmcsCi0JCQkJ CQkJICBpc1dpdGhvdXRPdmVybGFwcywgaXNhdXhpbGlhcnkpOworCQkJCQkJCSAgaXNXaXRob3V0 T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5LCBJbnZhbGlkT2lkKTsKIAl0eXBlSWRzID0gcGFsbG9jX2Fy cmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJy YXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCW9wY2xhc3NJZHMgPSBwYWxsb2NfYXJyYXko T2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtOTQzLDcgKzk0Myw4IEBAIERlZmluZUluZGV4 KE9pZCB0YWJsZUlkLAogCQkJCQkJCSAgY29uY3VycmVudCwKIAkJCQkJCQkgIGFtaXNzdW1tYXJp emluZywKIAkJCQkJCQkgIHN0bXQtPmlzd2l0aG91dG92ZXJsYXBzLAotCQkJCQkJCSAgZmFsc2Up OworCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJICBJbnZhbGlkT2lkKTsKIAogCXR5cGVJZHMgPSBw YWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBh bGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBAIC0zNjgzLDYgKzM2ODQsNyBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCXsKIAkJT2lkCQkJaW5kZXhJZDsKIAkJT2lkCQkJ YXV4SW5kZXhJZDsKKwkJT2lkCQkJanVua0F1eEluZGV4SWQ7CiAJCU9pZAkJCXRhYmxlSWQ7CiAJ CU9pZAkJCWFtSWQ7CiAJCWJvb2wJCXNhZmU7CQkvKiBmb3Igc2V0X2luZGV4c2FmZV9wcm9jZmxh Z3MgKi8KQEAgLTQwMzIsNiArNDAzNCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVJl aW5kZXhJbmRleEluZm8gKm5ld2lkeDsKIAkJT2lkCQkJbmV3SW5kZXhJZDsKIAkJT2lkCQkJYXV4 SW5kZXhJZDsKKwkJT2lkCQkJanVua0F1eEluZGV4SWQ7CiAJCVJlbGF0aW9uCWluZGV4UmVsOwog CQlSZWxhdGlvbgloZWFwUmVsOwogCQlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTQwMzksNiArNDA0 Miw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWludAkJCXNhdmVfbmVzdGxldmVsOwog CQlSZWxhdGlvbgluZXdJbmRleFJlbDsKIAkJUmVsYXRpb24JYXV4SW5kZXhSZWw7CisJCVJlbGF0 aW9uCWp1bmtBdXhJbmRleFJlbDsKIAkJTG9ja1JlbElkICAqbG9ja3JlbGlkOwogCQlPaWQJCQl0 YWJsZXNwYWNlaWQ7CiAKQEAgLTQxMTIsMTIgKzQxMTYsMTcgQEAgUmVpbmRleFJlbGF0aW9uQ29u Y3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0 IFJlaW4KIAkJCQkJCQkJCQkJCSAgIHRhYmxlc3BhY2VpZCwKIAkJCQkJCQkJCQkJCSAgIGF1eENv bmN1cnJlbnROYW1lKTsKIAorCQkvKiBTZWFyY2ggZm9yIGF1eGlsaWFyeSBpbmRleCBmb3IgcmVp bmRleGVkIGluZGV4LCB0byBkcm9wIGl0ICovCisJCWp1bmtBdXhJbmRleElkID0gZ2V0X2F1eGls aWFyeV9pbmRleChpZHgtPmluZGV4SWQpOworCiAJCS8qCiAJCSAqIE5vdyBvcGVuIHRoZSByZWxh dGlvbiBvZiB0aGUgbmV3IGluZGV4LCBhIHNlc3Npb24tbGV2ZWwgbG9jayBpcwogCQkgKiBhbHNv IG5lZWRlZCBvbiBpdC4KIAkJICovCiAJCW5ld0luZGV4UmVsID0gaW5kZXhfb3BlbihuZXdJbmRl eElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCQlhdXhJbmRleFJlbCA9IGluZGV4X29w ZW4oYXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKwkJaWYgKE9pZElzVmFs aWQoanVua0F1eEluZGV4SWQpKQorCQkJanVua0F1eEluZGV4UmVsID0gaW5kZXhfb3BlbihqdW5r QXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAogCQkvKgogCQkgKiBTYXZl IHRoZSBsaXN0IG9mIE9JRHMgYW5kIGxvY2tzIGluIHByaXZhdGUgY29udGV4dApAQCAtNDEyNyw2 ICs0MTM2LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10 ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJbmV3aWR4ID0gcGFsbG9jX29i amVjdChSZWluZGV4SW5kZXhJbmZvKTsKIAkJbmV3aWR4LT5pbmRleElkID0gbmV3SW5kZXhJZDsK IAkJbmV3aWR4LT5hdXhJbmRleElkID0gYXV4SW5kZXhJZDsKKwkJbmV3aWR4LT5qdW5rQXV4SW5k ZXhJZCA9IGp1bmtBdXhJbmRleElkOwogCQluZXdpZHgtPnNhZmUgPSBpZHgtPnNhZmU7CiAJCW5l d2lkeC0+dGFibGVJZCA9IGlkeC0+dGFibGVJZDsKIAkJbmV3aWR4LT5hbUlkID0gaWR4LT5hbUlk OwpAQCAtNDE0OCwxMCArNDE1OCwxOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlsb2Nr cmVsaWQgPSBwYWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7CiAJCSpsb2NrcmVsaWQgPSBhdXhJbmRl eFJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOwogCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVuZChy ZWxhdGlvbkxvY2tzLCBsb2NrcmVsaWQpOworCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4SW5kZXhJ ZCkpCisJCXsKKwkJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJCSps b2NrcmVsaWQgPSBqdW5rQXV4SW5kZXhSZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZDsKKwkJCXJl bGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCX0KIAog CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAkJaW5kZXhfY2xvc2UoaW5k ZXhSZWwsIE5vTG9jayk7CisJCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwkJCWlu ZGV4X2Nsb3NlKGp1bmtBdXhJbmRleFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UoYXV4SW5k ZXhSZWwsIE5vTG9jayk7CiAJCWluZGV4X2Nsb3NlKG5ld0luZGV4UmVsLCBOb0xvY2spOwogCkBA IC00MzQwLDcgKzQzNTgsOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVp bmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCiAJLyoKIAkgKiBB dCB0aGlzIG1vbWVudCBhbGwgdGFyZ2V0IGluZGV4ZXMgYXJlIG1hcmtlZCBhcyAicmVhZHktdG8t aW5zZXJ0Ii4gU28sCi0JICogd2UgYXJlIGZyZWUgdG8gc3RhcnQgcHJvY2VzcyBvZiBkcm9wcGlu ZyBhdXhpbGlhcnkgaW5kZXhlcy4KKwkgKiB3ZSBhcmUgZnJlZSB0byBzdGFydCBwcm9jZXNzIG9m IGRyb3BwaW5nIGF1eGlsaWFyeSBpbmRleGVzIC0gaW5jbHVkaW5nCisJICoganVzdCBpbmRleGVz IGRldGVjdGVkIGVhcmxpZXIuCiAJICovCiAJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCiAJewpA QCAtNDM2Myw2ICs0MzgyLDkgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJl aW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJICovCiAJCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCQlpbmRleF9zZXRf c3RhdGVfZmxhZ3MobmV3aWR4LT5hdXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsK KwkJLyogRW5zdXJlIGp1c3QgaW5kZXggaXMgbWFya2VkIGFzIG5vbi1yZWFkeSAqLworCQlpZiAo T2lkSXNWYWxpZChuZXdpZHgtPmp1bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X3NldF9zdGF0ZV9m bGFncyhuZXdpZHgtPmp1bmtBdXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKIAkJ UG9wQWN0aXZlU25hcHNob3QoKTsKIAogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKQEAg LTQ1ODEsNiArNDYwMyw4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWlu ZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVB1c2hBY3RpdmVT bmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCiAJCWluZGV4X2NvbmN1cnJlbnRs eV9zZXRfZGVhZChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisJCWlmIChP aWRJc1ZhbGlkKG5ld2lkeC0+anVua0F1eEluZGV4SWQpKQorCQkJaW5kZXhfY29uY3VycmVudGx5 X3NldF9kZWFkKG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5qdW5rQXV4SW5kZXhJZCk7CiAKIAkJ UG9wQWN0aXZlU25hcHNob3QoKTsKIAl9CkBAIC00NjMyLDYgKzQ2NTYsMTQgQEAgUmVpbmRleFJl bGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25P aWQsIGNvbnN0IFJlaW4KIAkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CiAKIAkJCWFkZF9leGFj dF9vYmplY3RfYWRkcmVzcygmb2JqZWN0LCBvYmplY3RzKTsKKworCQkJaWYgKE9pZElzVmFsaWQo aWR4LT5qdW5rQXV4SW5kZXhJZCkpCisJCQl7CisKKwkJCQlvYmplY3Qub2JqZWN0SWQgPSBpZHgt Pmp1bmtBdXhJbmRleElkOworCQkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJCQkJYWRkX2V4 YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3QsIG9iamVjdHMpOworCQkJfQogCQl9CiAKIAkJLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMjNlYmFhM2YyMzAuLjVhNmFhOWFmZTMyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTUzMiw2ICsxNTMyLDggQEAgUmVtb3ZlUmVs YXRpb25zKERyb3BTdG10ICpkcm9wKQogCUxpc3RDZWxsICAgKmNlbGw7CiAJaW50CQkJZmxhZ3Mg PSAwOwogCUxPQ0tNT0RFCWxvY2ttb2RlID0gQWNjZXNzRXhjbHVzaXZlTG9jazsKKwlNZW1vcnlD b250ZXh0IHByaXZhdGVfY29udGV4dCwKKwkJCQkgIG9sZGNvbnRleHQ7CiAKIAkvKiBEUk9QIENP TkNVUlJFTlRMWSB1c2VzIGEgd2Vha2VyIGxvY2ssIGFuZCBoYXMgc29tZSByZXN0cmljdGlvbnMg Ki8KIAlpZiAoZHJvcC0+Y29uY3VycmVudCkKQEAgLTE1OTIsOSArMTU5NCwyMCBAQCBSZW1vdmVS ZWxhdGlvbnMoRHJvcFN0bXQgKmRyb3ApCiAJCQlyZWxraW5kID0gMDsJCS8qIGtlZXAgY29tcGls ZXIgcXVpZXQgKi8KIAkJCWJyZWFrOwogCX0KKwkvKgorCSAqIENyZWF0ZSBhIG1lbW9yeSBjb250 ZXh0IHRoYXQgd2lsbCBzdXJ2aXZlIGZvcmNlZCB0cmFuc2FjdGlvbiBjb21taXRzIHdlCisJICog bWF5IG5lZWQgdG8gZG8gYmVsb3cgKGluIGNhc2Ugb2YgY29uY3VycmVudCBpbmRleCBkcm9wKS4K KwkgKiBTaW5jZSBpdCBpcyBhIGNoaWxkIG9mIFBvcnRhbENvbnRleHQsIGl0IHdpbGwgZ28gYXdh eSBldmVudHVhbGx5IGV2ZW4gaWYKKwkgKiB3ZSBzdWZmZXIgYW4gZXJyb3I7IHRoZXJlJ3Mgbm8g bmVlZCBmb3Igc3BlY2lhbCBhYm9ydCBjbGVhbnVwIGxvZ2ljLgorCSAqLworCXByaXZhdGVfY29u dGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShQb3J0YWxDb250ZXh0LAorCQkJCQkJCQkJCQki UmVtb3ZlUmVsYXRpb25zIiwKKwkJCQkJCQkJCQkJQUxMT0NTRVRfU01BTExfU0laRVMpOwogCisJ b2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCS8q IExvY2sgYW5kIHZhbGlkYXRlIGVhY2ggcmVsYXRpb247IGJ1aWxkIGEgbGlzdCBvZiBvYmplY3Qg YWRkcmVzc2VzICovCiAJb2JqZWN0cyA9IG5ld19vYmplY3RfYWRkcmVzc2VzKCk7CisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJZm9yZWFjaChjZWxsLCBkcm9wLT5vYmpl Y3RzKQogCXsKQEAgLTE2NDYsNiArMTY1OSwzNCBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQg KmRyb3ApCiAJCQlmbGFncyB8PSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRMWTsKIAkJfQog CisJCS8qCisJCSAqIENvbmN1cnJlbnQgaW5kZXggZHJvcCByZXF1aXJlcyB0byBiZSB0aGUgZmly c3QgdHJhbnNhY3Rpb24uIEJ1dCBpbgorCQkgKiBjYXNlIHdlIGhhdmUganVuayBhdXhpbGlhcnkg aW5kZXggLSB3ZSB3YW50IHRvIGRyb3AgaXQgdG9vIChhbmQgYWxzbworCQkgKiBpbiBhIGNvbmN1 cnJlbnQgd2F5KS4gSW4gdGhpcyBjYXNlIHBlcmZvcm0gc2lsZW50IGludGVybmFsIGRlbGV0aW9u CisJCSAqIG9mIGF1eGlsaWFyeSBpbmRleCwgYW5kIHJlc3RvcmUgdHJhbnNhY3Rpb24gc3RhdGUu IEl0IGlzIGZpbmUgdG8gZG8gaXQKKwkJICogaW4gdGhlIGxvb3AgYmVjYXVzZSB0aGVyZSBpcyBv bmx5IHNpbmdsZSBlbGVtZW50IGluIGRyb3AtPm9iamVjdHMuCisJCSAqLworCQlpZiAoKGZsYWdz ICYgUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UTFkpICE9IDAgJiYKKwkJCXN0YXRlLmFjdHVh bF9yZWxraW5kID09IFJFTEtJTkRfSU5ERVgpCisJCXsKKwkJCU9pZCBqdW5rQXV4SW5kZXhPaWQg PSBnZXRfYXV4aWxpYXJ5X2luZGV4KHJlbE9pZCk7CisJCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4 SW5kZXhPaWQpKQorCQkJeworCQkJCU9iamVjdEFkZHJlc3Mgb2JqZWN0OworCQkJCW9iamVjdC5j bGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJCW9iamVjdC5vYmplY3RJZCA9IGp1bmtB dXhJbmRleE9pZDsKKwkJCQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCQkJCXBlcmZvcm1EZWxl dGlvbigmb2JqZWN0LCBEUk9QX1JFU1RSSUNULAorCQkJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9O X0NPTkNVUlJFTlRMWSB8CisJCQkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fSU5URVJOQUwgfAor CQkJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX1FVSUVUTFkpOworCQkJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCQkJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkJUHVzaEFj dGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQkJUHJldmVudEluVHJh bnNhY3Rpb25CbG9jayh0cnVlLCAiRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkiKTsKKwkJCX0KKwkJ fQorCiAJCS8qCiAJCSAqIENvbmN1cnJlbnQgaW5kZXggZHJvcCBjYW5ub3QgYmUgdXNlZCB3aXRo IHBhcnRpdGlvbmVkIGluZGV4ZXMsCiAJCSAqIGVpdGhlci4KQEAgLTE2NzQsMTIgKzE3MTUsMTcg QEAgUmVtb3ZlUmVsYXRpb25zKERyb3BTdG10ICpkcm9wKQogCQlvYmoub2JqZWN0SWQgPSByZWxP aWQ7CiAJCW9iai5vYmplY3RTdWJJZCA9IDA7CiAKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3Mo Jm9iaiwgb2JqZWN0cyk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAl9 CiAKKwkvKiBEZWxldGlvbiBtYXkgaW52b2x2ZSBtdWx0aXBsZSBjb21taXRzLCBzbywgc3dpdGNo IHRvIG1lbW9yeSBjb250ZXh0ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwcml2YXRlX2NvbnRleHQpOwogCXBlcmZvcm1NdWx0aXBsZURlbGV0aW9ucyhvYmplY3RzLCBk cm9wLT5iZWhhdmlvciwgZmxhZ3MpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKIAotCWZyZWVfb2JqZWN0X2FkZHJlc3NlcyhvYmplY3RzKTsKKwlNZW1vcnlDb250ZXh0RGVs ZXRlKHByaXZhdGVfY29udGV4dCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IGI1 NTZiYTQ4MTdiLi5kN2JlODcxNWQ1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFr ZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTgzNCw3ICs4 MzQsNyBAQCBJbmRleEluZm8gKgogbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1r ZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkJCSAgTGlzdCAqcHJlZGlj YXRlcywgYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJICBib29sIGlz cmVhZHksIGJvb2wgY29uY3VycmVudCwgYm9vbCBzdW1tYXJpemluZywKLQkJCSAgYm9vbCB3aXRo b3V0b3ZlcmxhcHMsIGJvb2wgYXV4aWxpYXJ5KQorCQkJICBib29sIHdpdGhvdXRvdmVybGFwcywg Ym9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKQogewogCUluZGV4SW5m byAgKm4gPSBtYWtlTm9kZShJbmRleEluZm8pOwogCkBAIC04NTEsNiArODUxLDcgQEAgbWFrZUlu ZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpl eHByZXNzaW9ucywKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwogCW4tPmlpX1dp dGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKIAluLT5paV9BdXhpbGlhcnkgPSBhdXhp bGlhcnk7CisJbi0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IGF1eGlsaWFyeV9mb3JfaW5kZXhf aWQ7CiAKIAkvKiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWluIG5vbi1rZXkgYXR0 cmlidXRlcyAqLwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0dHJzID09IG51bWF0 dHJzKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCmluZGV4IDBlYTdjY2Y1MjQzLi4wMmJjZjVl OTMxNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKKysrIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKQEAgLTE4MCw2ICsxODAsNyBAQCBleHRl cm4gTGlzdCAqZ2V0T3duZWRTZXF1ZW5jZXMoT2lkIHJlbGlkKTsKIGV4dGVybiBPaWQJZ2V0SWRl bnRpdHlTZXF1ZW5jZShSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIG1pc3Np bmdfb2spOwogCiBleHRlcm4gT2lkCWdldF9pbmRleF9jb25zdHJhaW50KE9pZCBpbmRleElkKTsK K2V4dGVybiBPaWQJZ2V0X2F1eGlsaWFyeV9pbmRleChPaWQgaW5kZXhJZCk7CiAKIGV4dGVybiBM aXN0ICpnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzKE9pZCBpbmRleElkKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaAppbmRleCA4NGIzMjMxOWZiMy4uNTg5NmM2MWE5MTggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCkBAIC0yMTgsNiArMjE4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvCiAJaW50CQkJ aWlfUGFyYWxsZWxXb3JrZXJzOwogCS8qIGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVudCBpbmRl eCBidWlsZD8gKi8KIAlib29sCQlpaV9BdXhpbGlhcnk7CisJLyogaWYgY3JlYXRpbmcgYW4gYXV4 aWxpYXJ5IGluZGV4LCB0aGUgT0lEIG9mIHRoZSBtYWluIGluZGV4OyBvdGhlcndpc2UgSW52YWxp ZE9pZC4gKi8KKwlPaWQJCQlpaV9BdXhpbGlhcnlGb3JJbmRleElkOwogCS8qIE9pZCBvZiBpbmRl eCBBTSAqLwogCU9pZAkJCWlpX0FtOwogCS8qIHByaXZhdGUgY2FjaGUgYXJlYSBmb3IgaW5kZXgg QU0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggNDkwNDc0OGY1ZmMuLjM1NzQ1YmM1MjFjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTAwLDcgKzEwMCw3IEBAIGV4dGVybiBJbmRleEluZm8g Km1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwK IAkJCQkJCQkJYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJCQli b29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwKIAkJCQkJCQkJYm9vbCBzdW1tYXJpemluZywg Ym9vbCB3aXRob3V0b3ZlcmxhcHMsCi0JCQkJCQkJCWJvb2wgYXV4aWxpYXJ5KTsKKwkJCQkJCQkJ Ym9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKTsKIAogZXh0ZXJuIE5v ZGUgKm1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGludCBsb2NhdGlvbik7CiBleHRlcm4gRGVm RWxlbSAqbWFrZURlZkVsZW0oY2hhciAqbmFtZSwgTm9kZSAqYXJnLCBpbnQgbG9jYXRpb24pOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGFhNGZhNzYz NThhLi4zZWQ4OTk5ZDc0ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j cmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2lu ZGV4Lm91dApAQCAtMzI2NSwyMCArMzI2NSwxMDkgQEAgRVJST1I6ICByZWluZGV4IG9mIGF1eGls aWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKIFJFSU5ERVgg SU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OwogRVJST1I6ICByZWluZGV4 IG9mIGF1eGlsaWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQK IC0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4 IGNhbiBiZWNvbWUgdmFsaWQuCi1ERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0IFdIRVJF IGMxID0gMTsKLUVSUk9SOiAgcmVsYXRpb24gImNvbmN1cl9yZWluZGV4X3RhYjQiIGRvZXMgbm90 IGV4aXN0Ci1MSU5FIDE6IERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEg PSAxOwotICAgICAgICAgICAgICAgICAgICBeCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBX SEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJv cHBlZAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5k ZXggaXMgZHJvcHBlZAorXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1Ymxp Yy5hdXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFi bGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJ bmRleGVzOgorICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisKK0RST1Ag SU5ERVggYXV4X2luZGV4X2luZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJU IElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQg aW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9p bmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5p cXVlIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBs aWNhdGVkLgorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0 aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdI RVJFIGMxID0gMTsKIC0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4Ci1SRUlOREVY IFRBQkxFIGF1eF9pbmRleF90YWI1OwotRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBp bmRleCAiYXV4X2luZGV4X2luZDYiCi1ERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRl ZC4KLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKIFJFSU5E RVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OwogV0FSTklORzogIHNraXBwaW5n IHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCAicHVibGljLmF1eF9pbmRleF9pbmQ2IgogSElOVDog IFVzZSBEUk9QIElOREVYIG9yIFJFSU5ERVggSU5ERVguCiBXQVJOSU5HOiAgc2tpcHBpbmcgcmVp bmRleCBvZiBhdXhpbGlhcnkgaW5kZXggInB1YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1eCIKIE5P VElDRTogIHRhYmxlICJhdXhfaW5kZXhfdGFiNSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBjYW4gYmUg cmVpbmRleGVkIGNvbmN1cnJlbnRseQorLS0gTWFrZSBzdXJlIGl0IGlzIHN0aWxsIGV4aXN0cwor XGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5kZXhfdGFi NSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAor LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYzEg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJh dXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpIElOVkFMSUQKKyAgICAiYXV4X2luZGV4 X2luZDZfY2NhdXgiIHN0aXIgKGMxKSBJTlZBTElECisKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1 cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1Owor LS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorICAg ICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBlICAg fCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAg ICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBVTklRVUUs IGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIEluc2VydCBkdXBs aWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7 CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05D VVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VSUk9SOiAg Y291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlMOiAg S2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBm YWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZS T00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVy aW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9p bmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5k ZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVt biB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRl Z2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9p bmQ2IiBVTklRVUUsIGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0t IEluc2VydCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxV RVMgKDEpLCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFV RSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMx KTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2 IgorREVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRo ZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlk LgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gRHJvcCBtYWlu IGluZGV4IENPTkNVUlJFTlRMWQorRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2lu ZDY7CistLSBNYWtlIHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5k ZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVt biB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRl Z2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5k NjsKK0VSUk9SOiAgaW5kZXggImF1eF9pbmRleF9pbmQ2IiBkb2VzIG5vdCBleGlzdAorLS0gSW5z ZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAo MSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5JUVVFIElO REVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOwor RVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitE RVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIERyb3AgbWFpbiBpbmRleAor RFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXgg ZHJvcHBlZCB0b28KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMu YXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxl IHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorCiBE Uk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5kZXhlcyB3 aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZpbml0aW9ucyBvZiB0 aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IDdhZThlNDQwMTliLi42ZDU5Nzc5MGI1NiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC0xMzQwLDExICsxMzQwLDYyIEBA IFJFSU5ERVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBDb25jdXJyZW50bHkgYWxz bwogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBU aGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4g YmVjb21lIHZhbGlkLgotREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9 IDE7CitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQg YmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRFWCBhdXhf aW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4X2lu ZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBkdXBsaWNh dGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7Cist LSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJS RU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRoaXMgbWFr ZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNvbWUg dmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CiAtLSBTaG91 bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleAotUkVJTkRFWCBUQUJMRSBhdXhfaW5kZXhfdGFi NTsKLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKIFJFSU5E RVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OworLS0gTWFrZSBzdXJlIGl0IGlz IHN0aWxsIGV4aXN0cworXGQgYXV4X2luZGV4X3RhYjUKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1 cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1Owor LS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorRFJP UCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lO U0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZh bGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5k ZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlv dXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVU RSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKKy0tIFNob3VsZCBiZSBza2lwcGVk IGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBh dXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4 X2luZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBkdXBs aWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7 CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05D VVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRoaXMg bWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNv bWUgdmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBE cm9wIG1haW4gaW5kZXggQ09OQ1VSUkVOVExZCitEUk9QIElOREVYIENPTkNVUlJFTlRMWSBhdXhf aW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBlZCB0b28KK1xk IGF1eF9pbmRleF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJbnNlcnQg ZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwg KDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVgg Q09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CistLSBE cm9wIG1haW4gaW5kZXgKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBNYWtlIHN1cmUg YXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQorCiBEUk9QIFRB QkxFIGF1eF9pbmRleF90YWI1OwogCiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGgg ZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMuICBUaGUKLS0gCjIuNDMuMAoK --0000000000002ad96a064431f950 Content-Type: text/plain; charset="UTF-8"; name="v27-0005-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Disposition: attachment; filename="v27-0005-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg71d3 RnJvbSAzMTFhNzAyMGQwN2Q4MTNjZTA0MThjZjdmMGZmN2UwNWZmMzBlNDkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNTowMzoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDUvOF0gVXNlIGF1eGlsaWFyeSBpbmRleGVzIGZvciBjb25jdXJyZW50IGluZGV4 IG9wZXJhdGlvbnMKClJlcGxhY2UgdGhlIHNlY29uZCB0YWJsZSBmdWxsIHNjYW4gaW4gY29uY3Vy cmVudCBpbmRleCBidWlsZHMgd2l0aCBhbiBhdXhpbGlhcnkgaW5kZXggYXBwcm9hY2g6Ci0gY3Jl YXRlIGEgU1RJUiAgYXV4aWxpYXJ5IGluZGV4IHdpdGggdGhlIHNhbWUgcHJlZGljYXRlIChpZiBl eGlzdHMpIGFzIGluIG1haW4gaW5kZXgKLSB1c2UgaXQgdG8gdHJhY2sgdHVwbGVzIGluc2VydGVk IGR1cmluZyB0aGUgZmlyc3QgcGhhc2UKLSBtZXJnZSBhdXhpbGlhcnkgaW5kZXggd2l0aCBtYWlu IGluZGV4IGR1cmluZyB2YWxpZGF0aW9uIHRvIGNhdGNoIHVwIG5ldyBpbmRleCB3aXRoIGFueSB0 dXBsZXMgbWlzc2VkIGR1cmluZyB0aGUgZmlyc3QgcGhhc2UKLSBhdXRvbWF0aWNhbGx5IGRyb3Ag YXV4aWxpYXJ5IHdoZW4gbWFpbiBpbmRleCBpcyByZWFkeQoKVG8gbWVyZ2UgbWFpbiBhbmQgYXV4 aWxpYXJ5IGluZGV4ZXM6Ci0gaW5kZXhfYnVsa19kZWxldGUgY2FsbGVkIGZvciBib3RoLCBUSURz IHB1dCBpbnRvIHR1cGxlc29ydAotIGJvdGggdHVwbGVzb3J0IGFyZSBiZWluZyBzb3J0ZWQKLSBi b3RoIHR1cGxlc29ydCBzY2FubmVkIHdpdGggdHdvIHBvaW50ZXJzIGxvb2tpbmcgZm9yIHRoZSBU SURzIHByZXNlbnQgaW4gYXV4aWxpYXJ5IGluZGV4LCBidXQgYWJzZW50IGluIG1haW4gb25lCi0g YWxsIHN1Y2ggVElEcyBhcmUgcHV0IGludG8gdHVwbGVzdG9yZQotIGFsbCBUSURzIGluIHR1cGxl c3RvcmUgYXJlIGZldGNoZWQgdXNpbmcgdGhlIHN0cmVhbSwgdHVwbGVzdG9yZSB1c2VkIGluIGhl YXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuX3JlYWRfc3RyZWFtX25leHQgdG8gcHJvdmlkZSB0aGUg bmV4dCBwYWdlIHRvIHByZWZldGNoCi0gaWYgZmV0Y2hlZCB0dXBsZSBpcyBhbGl2ZSAtIGl0IGlz IGluc2VydGVkIGludG8gdGhlIG1haW4gaW5kZXgKClRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBm b3IgYSBzZWNvbmQgZnVsbCB0YWJsZSBzY2FuIGR1cmluZyB2YWxpZGF0aW9uLCBpbXByb3Zpbmcg cGVyZm9ybWFuY2UgZXNwZWNpYWxseSBmb3IgbGFyZ2UgdGFibGVzLiBBZmZlY3RzIGJvdGggQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBhbmQgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgb3Bl cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAg fCAgMjYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICB8ICAz NCArLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgIHwgIDQxICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDU0NCArKysrKysrKysr KysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 IDMxNCArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAg ICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAg IHwgMzQ0ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAg fCAgIDkgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggICAgICAgICAgICB8ICAx MyArLQogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgIHwgICAzICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgfCAgNDIgKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0ICAgICB8ICAgMyArLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgIDE3ICstCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsICAgICAgfCAgMjEgKwogMTcgZmlsZXMgY2hhbmdl ZCwgMTEyMyBpbnNlcnRpb25zKCspLCAzMzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwK aW5kZXggNDM2ZWYwZThiZDAuLjExMDlhZTIzY2M4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTY0 MDgsNiArNjQwOCwxOCBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNr ZW5kaWQ7CiAgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAgICA8L2VudHJ5 PgogICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5n IGZvciB3cml0ZXJzIHRvIHVzZSBhdXhpbGlhcnkgaW5kZXg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgIDxlbnRyeT4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9j b21tYW5kPiBvciA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2Fp dGluZyBmb3IgdHJhbnNhY3Rpb25zCisgICAgICAgd2l0aCB3cml0ZSBsb2NrcyB0aGF0IGNhbiBw b3RlbnRpYWxseSBzZWUgdGhlIHRhYmxlIHRvIGZpbmlzaCwgdG8gZW5zdXJlIHVzZSBvZiBhdXhp bGlhcnkgaW5kZXggZm9yIG5ldyB0dXBsZXMgaW4KKyAgICAgICBmdXR1cmUgdHJhbnNhY3Rpb25z LgorICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJyZW50IG1v ZGUuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5sb2NrZXJzX3RvdGFsPC9zdHJ1Y3RuYW1l PiwgPHN0cnVjdG5hbWU+bG9ja2Vyc19kb25lPC9zdHJ1Y3RuYW1lPgorICAgICAgIGFuZCA8c3Ry dWN0bmFtZT5jdXJyZW50X2xvY2tlcl9waWQ8L3N0cnVjdG5hbWU+IGNvbnRhaW4gdGhlIHByb2dy ZXNzCisgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICA8L2VudHJ5Pgor ICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5idWlsZGluZyBp bmRleDwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgpAQCAtNjQ0OCwxMyArNjQ2MCwx MiBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNrZW5kaWQ7CiAgICAg ICA8L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJh bD5pbmRleCB2YWxpZGF0aW9uOiBzY2FubmluZyB0YWJsZTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlczwvbGl0 ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgotICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRF WCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGlzIHNjYW5uaW5nIHRoZSB0YWJsZQotICAgICAgIHRv IHZhbGlkYXRlIHRoZSBpbmRleCB0dXBsZXMgY29sbGVjdGVkIGluIHRoZSBwcmV2aW91cyB0d28g cGhhc2VzLgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1h bmQ+IG1lcmdpbmcgY29udGVudCBvZiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgdGFyZ2V0IGlu ZGV4LgogICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJyZW50 IG1vZGUuCi0gICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5ibG9ja3NfdG90YWw8L3N0cnVjdG5h bWU+IChzZXQgdG8gdGhlIHRvdGFsIHNpemUgb2YgdGhlIHRhYmxlKQotICAgICAgIGFuZCA8c3Ry dWN0bmFtZT5ibG9ja3NfZG9uZTwvc3RydWN0bmFtZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3MgaW5m b3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT50dXBs ZXNfdG90YWw8L3N0cnVjdG5hbWU+IChzZXQgdG8gdGhlIG51bWJlciBvZiB0dXBsZXMgdG8gYmUg bWVyZ2VkKQorICAgICAgIGFuZCA8c3RydWN0bmFtZT50dXBsZXNfZG9uZTwvc3RydWN0bmFtZT4g Y29udGFpbiB0aGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAgICA8 L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KQEAgLTY0NzEsOCArNjQ4Miw5IEBAIEZS T00gcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgPHJvdz4K ICAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBtYXJraW5n IGRlYWQ8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT4KLSAgICAgICA8Y29tbWFuZD5S RUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2FpdGluZyBmb3IgdHJhbnNhY3Rpb25z Ci0gICAgICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9yZSBt YXJraW5nIHRoZSBvbGQgaW5kZXggZGVhZC4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVgg Q09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMKKyAgICAg ICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9yZSBtYXJraW5n IHRoZSBhdXhpbGlhcnkgaW5kZXggYXMgZGVhZC4KKyAgICAgICA8Y29tbWFuZD5SRUlOREVYIENP TkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgYWxzbyB3YWl0aW5nIGJlZm9yZSBtYXJraW5nIHRoZSBv bGQgaW5kZXggYXMgZGVhZC4KICAgICAgICBUaGlzIHBoYXNlIGlzIHNraXBwZWQgd2hlbiBub3Qg aW4gY29uY3VycmVudCBtb2RlLgogICAgICAgIENvbHVtbnMgPHN0cnVjdG5hbWU+bG9ja2Vyc190 b3RhbDwvc3RydWN0bmFtZT4sIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfZG9uZTwvc3RydWN0bmFtZT4K ICAgICAgICBhbmQgPHN0cnVjdG5hbWU+Y3VycmVudF9sb2NrZXJfcGlkPC9zdHJ1Y3RuYW1lPiBj b250YWluIHRoZSBwcm9ncmVzcwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf aW5kZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKaW5kZXggYmI3 NTA1ZDE3MWIuLmJhMzg3ZjI4OTc3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9pbmRleC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKQEAg LTYyMCwxMCArNjIwLDEwIEBAIENSRUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZ IF0gWyBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9CiAgICAgb3V0IHdyaXRl cy4gIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgc3BlY2lmeWluZyB0aGUKICAgICA8bGl0ZXJh bD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbiBvZiA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8 L2NvbW1hbmQ+LgogICAgIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwKLSAgICA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9ybSB0d28gc2NhbnMgb2YgdGhl IHRhYmxlLCBhbmQgaW4KLSAgICBhZGRpdGlvbiBpdCBtdXN0IHdhaXQgZm9yIGFsbCBleGlzdGlu ZyB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseQotICAgIG1vZGlmeSBvciB1c2Ug dGhlIGluZGV4IHRvIHRlcm1pbmF0ZS4gIFRodXMKLSAgICB0aGlzIG1ldGhvZCByZXF1aXJlcyBt b3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4IGJ1aWxkIGFuZCB0YWtlcworICAg IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHRhYmxl IHNjYW4gZm9sbG93ZWQgYnkKKyAgICB2YWxpZGF0aW9uIHBoYXNlLCBhbmQgaW4gYWRkaXRpb24g aXQgbXVzdCB3YWl0IGZvciBhbGwgZXhpc3RpbmcgdHJhbnNhY3Rpb25zCisgICAgdGhhdCBjb3Vs ZCBwb3RlbnRpYWxseSBtb2RpZnkgb3IgdXNlIHRoZSBpbmRleCB0byB0ZXJtaW5hdGUuICBUaHVz CisgICAgdGhpcyBtZXRob2QgcmVxdWlyZXMgbW9yZSB0b3RhbCB3b3JrIHRoYW4gYSBzdGFuZGFy ZCBpbmRleCBidWlsZCBhbmQgbWF5IHRha2UKICAgICBzaWduaWZpY2FudGx5IGxvbmdlciB0byBj b21wbGV0ZS4gIEhvd2V2ZXIsIHNpbmNlIGl0IGFsbG93cyBub3JtYWwKICAgICBvcGVyYXRpb25z IHRvIGNvbnRpbnVlIHdoaWxlIHRoZSBpbmRleCBpcyBidWlsdCwgdGhpcyBtZXRob2QgaXMgdXNl ZnVsIGZvcgogICAgIGFkZGluZyBuZXcgaW5kZXhlcyBpbiBhIHByb2R1Y3Rpb24gZW52aXJvbm1l bnQuICBPZiBjb3Vyc2UsIHRoZSBleHRyYSBDUFUKQEAgLTYzMSwxNCArNjMxLDE0IEBAIENSRUFU RSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBbIElGIE5PVCBFWElTVFMgXSA8 cmVwbGFjZWFibGUgY2xhc3M9CiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgotICAgIEluIGEgY29u Y3VycmVudCBpbmRleCBidWlsZCwgdGhlIGluZGV4IGlzIGFjdHVhbGx5IGVudGVyZWQgYXMgYW4K LSAgICA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KLSAgICB0aGUgc3lzdGVtIGNh dGFsb2dzIGluIG9uZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gdGFibGUgc2NhbnMgb2NjdXIgaW4K LSAgICB0d28gbW9yZSB0cmFuc2FjdGlvbnMuICBCZWZvcmUgZWFjaCB0YWJsZSBzY2FuLCB0aGUg aW5kZXggYnVpbGQgbXVzdAorICAgIEluIGEgY29uY3VycmVudCBpbmRleCBidWlsZCwgdGhlIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzIGlzIGFjdHVhbGx5CisgICAgZW50ZXJlZCBhcyBhbiA8 cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KKyAgICB0aGUgc3lzdGVtIGNhdGFsb2dz IGluIG9uZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gcGhhc2VzIG9jY3VyIGluCisgICAgbXVsdGlw bGUgdHJhbnNhY3Rpb25zLiAgQmVmb3JlIGVhY2ggcGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0 CiAgICAgd2FpdCBmb3IgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBtb2RpZmllZCB0 aGUgdGFibGUgdG8gdGVybWluYXRlLgotICAgIEFmdGVyIHRoZSBzZWNvbmQgc2NhbiwgdGhlIGlu ZGV4IGJ1aWxkIG11c3Qgd2FpdCBmb3IgYW55IHRyYW5zYWN0aW9ucworICAgIEFmdGVyIHRoZSBz ZWNvbmQgcGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0IHdhaXQgZm9yIGFueSB0cmFuc2FjdGlv bnMKICAgICB0aGF0IGhhdmUgYSBzbmFwc2hvdCAoc2VlIDx4cmVmIGxpbmtlbmQ9Im12Y2MiLz4p IHByZWRhdGluZyB0aGUgc2Vjb25kCi0gICAgc2NhbiB0byB0ZXJtaW5hdGUsIGluY2x1ZGluZyB0 cmFuc2FjdGlvbnMgdXNlZCBieSBhbnkgcGhhc2Ugb2YgY29uY3VycmVudAorICAgIHBoYXNlIHRv IHRlcm1pbmF0ZSwgaW5jbHVkaW5nIHRyYW5zYWN0aW9ucyB1c2VkIGJ5IGFueSBwaGFzZSBvZiBj b25jdXJyZW50CiAgICAgaW5kZXggYnVpbGRzIG9uIG90aGVyIHRhYmxlcywgaWYgdGhlIGluZGV4 ZXMgaW52b2x2ZWQgYXJlIHBhcnRpYWwgb3IgaGF2ZQogICAgIGNvbHVtbnMgdGhhdCBhcmUgbm90 IHNpbXBsZSBjb2x1bW4gcmVmZXJlbmNlcy4KICAgICBUaGVuIGZpbmFsbHkgdGhlIGluZGV4IGNh biBiZSBtYXJrZWQgPHF1b3RlPnZhbGlkPC9xdW90ZT4gYW5kIHJlYWR5IGZvciB1c2UsCkBAIC02 NTEsMTAgKzY1MSwxMSBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBd IFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgPHBhcmE+CiAgICAg SWYgYSBwcm9ibGVtIGFyaXNlcyB3aGlsZSBzY2FubmluZyB0aGUgdGFibGUsIHN1Y2ggYXMgYSBk ZWFkbG9jayBvciBhCiAgICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgs IHRoZSA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+Ci0gICAgY29tbWFuZCB3aWxsIGZh aWwgYnV0IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4LiBUaGlz IGluZGV4Ci0gICAgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcyBiZWNhdXNl IGl0IG1pZ2h0IGJlIGluY29tcGxldGU7Ci0gICAgaG93ZXZlciBpdCB3aWxsIHN0aWxsIGNvbnN1 bWUgdXBkYXRlIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPgot ICAgIDxjb21tYW5kPlxkPC9jb21tYW5kPiBjb21tYW5kIHdpbGwgcmVwb3J0IHN1Y2ggYW4gaW5k ZXggYXMgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgY29tbWFuZCB3aWxsIGZhaWwg YnV0IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGFuZCBpdHMK KyAgICBhc3NvY2lhdGVkIGF1eGlsaWFyeSBpbmRleC4gVGhlc2UgaW5kZXhlcworICAgIHdpbGwg YmUgaWdub3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIGlu Y29tcGxldGU7CisgICAgaG93ZXZlciB0aGV5IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUgb3Zl cmhlYWQuIFRoZSA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+CisgICAgPGNvbW1hbmQ+ XGQ8L2NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQgc3VjaCBpbmRleGVzIGFzIDxsaXRlcmFs PklOVkFMSUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+CiBwb3N0Z3Jlcz0jIFxkIHRh YgpAQCAtNjY0LDExICs2NjUsMTIgQEAgcG9zdGdyZXM9IyBcZCB0YWIKICBjb2wgICAgfCBpbnRl Z2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfAogSW5kZXhlczoKICAgICAiaWR4IiBidHJlZSAo Y29sKSBJTlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dy YW1saXN0aW5nPgogCiAgICAgVGhlIHJlY29tbWVuZGVkIHJlY292ZXJ5Ci0gICAgbWV0aG9kIGlu IHN1Y2ggY2FzZXMgaXMgdG8gZHJvcCB0aGUgaW5kZXggYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3Jt Ci0gICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uICAoQW5v dGhlciBwb3NzaWJpbGl0eSBpcworICAgIG1ldGhvZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3Ag dGhlc2UgaW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZvcm0KKyAgICA8Y29tbWFuZD5DUkVB VEUgSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFub3RoZXIgcG9zc2liaWxpdHkgaXMK ICAgICB0byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21tYW5kPlJFSU5ERVggSU5ERVggQ09O Q1VSUkVOVExZPC9jb21tYW5kPikuCiAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9yZWYvcmVpbmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKaW5k ZXggMTg1Y2Q3NWNhMzAuLjk3ZjU1MWE1NWE2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L3JlaW5kZXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbApAQCAtMzY4 LDkgKzM2OCw4IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5v cHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAgICAgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzdXBwb3J0cyByZWJ1aWxkaW5nIGluZGV4ZXMgd2l0aCBt aW5pbXVtIGxvY2tpbmcKICAgICBvZiB3cml0ZXMuICBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5 IHNwZWNpZnlpbmcgdGhlCiAgICAgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRp b24gb2YgPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4uIFdoZW4gdGhpcyBvcHRpb24KLSAgICBp cyB1c2VkLCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9y bSB0d28gc2NhbnMgb2YgdGhlIHRhYmxlCi0gICAgZm9yIGVhY2ggaW5kZXggdGhhdCBuZWVkcyB0 byBiZSByZWJ1aWx0IGFuZCB3YWl0IGZvciB0ZXJtaW5hdGlvbiBvZgotICAgIGFsbCBleGlzdGlu ZyB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB1c2UgdGhlIGluZGV4LgorICAg IGlzIHVzZWQsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJm b3JtIHNldmVyYWwgc3RlcHMgdG8gZW5zdXJlIGRhdGEKKyAgICBjb25zaXN0ZW5jeSB3aGlsZSBh bGxvd2luZyBub3JtYWwgb3BlcmF0aW9ucyB0byBjb250aW51ZS4KICAgICBUaGlzIG1ldGhvZCBy ZXF1aXJlcyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4CiAgICAgcmVidWls ZCBhbmQgdGFrZXMgc2lnbmlmaWNhbnRseSBsb25nZXIgdG8gY29tcGxldGUgYXMgaXQgbmVlZHMg dG8gd2FpdAogICAgIGZvciB1bmZpbmlzaGVkIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IG1vZGlm eSB0aGUgaW5kZXguIEhvd2V2ZXIsIHNpbmNlCkBAIC0zODgsNyArMzg3LDcgQEAgUkVJTkRFWCBb ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFss IC4uLl0gKSBdIHsgREEKICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgIDxsaXN0aXRlbT4KICAgICAg IDxwYXJhPgotICAgICAgIEEgbmV3IHRyYW5zaWVudCBpbmRleCBkZWZpbml0aW9uIGlzIGFkZGVk IHRvIHRoZSBjYXRhbG9nCisgICAgICAgQSBuZXcgdHJhbnNpZW50IGluZGV4IGRlZmluaXRpb24g YW5kIGFuIGF1eGlsaWFyeSBpbmRleCBhcmUgYWRkZWQgdG8gdGhlIGNhdGFsb2cKICAgICAgICA8 bGl0ZXJhbD5wZ19pbmRleDwvbGl0ZXJhbD4uICBUaGlzIGRlZmluaXRpb24gd2lsbCBiZSB1c2Vk IHRvIHJlcGxhY2UKICAgICAgICB0aGUgb2xkIGluZGV4LiAgQSA8bGl0ZXJhbD5TSEFSRSBVUERB VEUgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGF0CiAgICAgICAgc2Vzc2lvbiBsZXZlbCBpcyB0 YWtlbiBvbiB0aGUgaW5kZXhlcyBiZWluZyByZWluZGV4ZWQgYXMgd2VsbCBhcyB0aGVpcgpAQCAt Mzk4LDcgKzM5NywxNSBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0aXRl bT4KICAgICAgIDxwYXJhPgotICAgICAgIEEgZmlyc3QgcGFzcyB0byBidWlsZCB0aGUgaW5kZXgg aXMgZG9uZSBmb3IgZWFjaCBuZXcgaW5kZXguICBPbmNlIHRoZQorICAgICAgIFRoZSBhdXhpbGlh cnkgaW5kZXggaXMgbWFya2VkIGFzICJyZWFkeSBmb3IgaW5zZXJ0cyIsIG1ha2luZworICAgICAg IGl0IHZpc2libGUgdG8gb3RoZXIgc2Vzc2lvbnMuIFRoaXMgaW5kZXggZWZmaWNpZW50bHkgdHJh Y2tzIGFsbCBuZXcKKyAgICAgICB0dXBsZXMgZHVyaW5nIHRoZSByZWluZGV4IHByb2Nlc3MuCisg ICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAg PHBhcmE+CisgICAgICAgVGhlIG5ldyBtYWluIGluZGV4IGlzIGJ1aWx0IGJ5IHNjYW5uaW5nIHRo ZSB0YWJsZS4gIE9uY2UgdGhlCiAgICAgICAgaW5kZXggaXMgYnVpbHQsIGl0cyBmbGFnIDxsaXRl cmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IGlzCiAgICAgICAgc3dpdGNoZWQgdG8g PHF1b3RlPnRydWU8L3F1b3RlPiB0byBtYWtlIGl0IHJlYWR5IGZvciBpbnNlcnRzLCBtYWtpbmcg aXQKICAgICAgICB2aXNpYmxlIHRvIG90aGVyIHNlc3Npb25zIG9uY2UgdGhlIHRyYW5zYWN0aW9u IHRoYXQgcGVyZm9ybWVkIHRoZSBidWlsZApAQCAtNDA5LDkgKzQxNiw5IEBAIFJFSU5ERVggWyAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAu Li5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgVGhl biBhIHNlY29uZCBwYXNzIGlzIHBlcmZvcm1lZCB0byBhZGQgdHVwbGVzIHRoYXQgd2VyZSBhZGRl ZCB3aGlsZSB0aGUKLSAgICAgICBmaXJzdCBwYXNzIHdhcyBydW5uaW5nLiAgVGhpcyBzdGVwIGlz IGFsc28gZG9uZSBpbiBhIHNlcGFyYXRlCi0gICAgICAgdHJhbnNhY3Rpb24gZm9yIGVhY2ggaW5k ZXguCisgICAgICAgQSB2YWxpZGF0aW9uIHBoYXNlIG1lcmdlcyBhbnkgbWlzc2luZyBlbnRyaWVz IGZyb20gdGhlIGF1eGlsaWFyeSBpbmRleAorICAgICAgIGludG8gdGhlIG1haW4gaW5kZXgsIGVu c3VyaW5nIGFsbCBjb25jdXJyZW50IGNoYW5nZXMgYXJlIGNhcHR1cmVkLgorICAgICAgIFRoaXMg c3RlcCBpcyBhbHNvIGRvbmUgaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbiBmb3IgZWFjaCBpbmRl eC4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KIApAQCAtNDI4LDcgKzQzNSw3IEBA IFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxh Y2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+ Ci0gICAgICAgVGhlIG9sZCBpbmRleGVzIGhhdmUgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFk eTwvbGl0ZXJhbD4gc3dpdGNoZWQgdG8KKyAgICAgICBUaGUgb2xkIGFuZCBhdXhpbGlhcnkgaW5k ZXhlcyBoYXZlIDxsaXRlcmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IHN3aXRjaGVk IHRvCiAgICAgICAgPHF1b3RlPmZhbHNlPC9xdW90ZT4gdG8gcHJldmVudCBhbnkgbmV3IHR1cGxl IGluc2VydGlvbnMsIGFmdGVyIHdhaXRpbmcKICAgICAgICBmb3IgcnVubmluZyBxdWVyaWVzIHRo YXQgbWlnaHQgcmVmZXJlbmNlIHRoZSBvbGQgaW5kZXggdG8gY29tcGxldGUuCiAgICAgICA8L3Bh cmE+CkBAIC00MzYsNyArNDQzLDcgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKIAogICAgICA8 bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBUaGUgb2xkIGluZGV4ZXMgYXJlIGRyb3Bw ZWQuICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCisgICAgICAgVGhlIG9sZCBhbmQgYXV4aWxp YXJ5IGluZGV4ZXMgYXJlIGRyb3BwZWQuICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCiAgICAg ICAgRVhDTFVTSVZFPC9saXRlcmFsPiBzZXNzaW9uIGxvY2tzIGZvciB0aGUgaW5kZXhlcyBhbmQg dGhlIHRhYmxlIGFyZQogICAgICAgIHJlbGVhc2VkLgogICAgICAgPC9wYXJhPgpAQCAtNDQ3LDEx ICs0NTQsMTEgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9w dGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKICAgIDxwYXJhPgogICAgIElmIGEg cHJvYmxlbSBhcmlzZXMgd2hpbGUgcmVidWlsZGluZyB0aGUgaW5kZXhlcywgc3VjaCBhcyBhCiAg ICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgsIHRoZSA8Y29tbWFuZD5S RUlOREVYPC9jb21tYW5kPgotICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1dCBsZWF2ZSBiZWhpbmQg YW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBuZXcgaW5kZXggaW4gYWRkaXRpb24gdG8KLSAgICB0 aGUgcHJlLWV4aXN0aW5nIG9uZS4gVGhpcyBpbmRleCB3aWxsIGJlIGlnbm9yZWQgZm9yIHF1ZXJ5 aW5nIHB1cnBvc2VzCi0gICAgYmVjYXVzZSBpdCBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVy IGl0IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKKyAgICBjb21tYW5kIHdpbGwgZmFpbCBidXQg bGVhdmUgYmVoaW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gbmV3IGluZGV4IGFuZCBpdHMg YXV4aWxpYXJ5IGluZGV4IGluIGFkZGl0aW9uIHRvCisgICAgdGhlIHByZS1leGlzdGluZyBvbmUu IFRoZXNlIGluZGV4ZXMgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcworICAg IGJlY2F1c2UgdGhleSBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVyIHRoZXkgd2lsbCBzdGls bCBjb25zdW1lIHVwZGF0ZQogICAgIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2Fw cGxpY2F0aW9uPiA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29tbWFuZCB3aWxsIHJlcG9ydAotICAg IHN1Y2ggYW4gaW5kZXggYXMgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgc3VjaCBp bmRleGVzIGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+ CiBwb3N0Z3Jlcz0jIFxkIHRhYgpAQCAtNDYyLDEyICs0NjksMTQgQEAgcG9zdGdyZXM9IyBcZCB0 YWIKIEluZGV4ZXM6CiAgICAgImlkeCIgYnRyZWUgKGNvbCkKICAgICAiaWR4X2NjbmV3IiBidHJl ZSAoY29sKSBJTlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECisKIDwv cHJvZ3JhbWxpc3Rpbmc+CiAKICAgICBJZiB0aGUgaW5kZXggbWFya2VkIDxsaXRlcmFsPklOVkFM SUQ8L2xpdGVyYWw+IGlzIHN1ZmZpeGVkCi0gICAgPGxpdGVyYWw+X2NjbmV3PC9saXRlcmFsPiwg dGhlbiBpdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhbnNpZW50CisgICAgPGxpdGVyYWw+X2NjbmV3 PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5fY2NhdXg8L2xpdGVyYWw+LCB0aGVuIGl0IGNvcnJlc3Bv bmRzIHRvIHRoZSB0cmFuc2llbnQgb3IgYXV4aWxpYXJ5CiAgICAgaW5kZXggY3JlYXRlZCBkdXJp bmcgdGhlIGNvbmN1cnJlbnQgb3BlcmF0aW9uLCBhbmQgdGhlIHJlY29tbWVuZGVkCi0gICAgcmVj b3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgaXQgdXNpbmcgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0 ZXJhbD4sCisgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhlcyB1c2lu ZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwKICAgICB0aGVuIGF0dGVtcHQgPGNvbW1h bmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWluLgogICAgIElmIHRoZSBpbnZh bGlkIGluZGV4IGlzIGluc3RlYWQgc3VmZml4ZWQgPGxpdGVyYWw+X2Njb2xkPC9saXRlcmFsPiwK ICAgICBpdCBjb3JyZXNwb25kcyB0byB0aGUgb3JpZ2luYWwgaW5kZXggd2hpY2ggY291bGQgbm90 IGJlIGRyb3BwZWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUu SE9UIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVAppbmRleCA3NGU0MDdmMzc1 YS4uMjhlMmExNjA0YzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURN RS5IT1QKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVApAQCAtMzc1LDYg KzM3NSwxMSBAQCBjb25zdHJhaW50IG9uIHdoaWNoIHVwZGF0ZXMgY2FuIGJlIEhPVC4gIE90aGVy IHRyYW5zYWN0aW9ucyBtdXN0IGluY2x1ZGUKIHN1Y2ggYW4gaW5kZXggd2hlbiBkZXRlcm1pbmlu ZyBIT1Qtc2FmZXR5IG9mIHVwZGF0ZXMsIGV2ZW4gdGhvdWdoIHRoZXkKIG11c3QgaWdub3JlIGl0 IGZvciBib3RoIGluc2VydGlvbiBhbmQgc2VhcmNoaW5nIHB1cnBvc2VzLgogCitBbHNvLCBzcGVj aWFsIGF1eGlsaWFyeSBpbmRleCBpcyBjcmVhdGVkIHRoZSBzYW1lIHdheS4gSXQgbWFya2VkIGFz CisicmVhZHkgZm9yIGluc2VydHMiIHdpdGhvdXQgYW55IGFjdHVhbCB0YWJsZSBzY2FuLiBJdHMg cHVycG9zZSBpcyBjb2xsZWN0CituZXcgdHVwbGVzIGluc2VydGVkIGludG8gdGFibGUgd2hpbGUg b3VyIHRhcmdldCBpbmRleCBpcyBzdGlsbCAibm90IHJlYWR5Citmb3IgaW5zZXJ0cyIKKwogV2Ug bXVzdCBkbyB0aGlzIHRvIGF2b2lkIG1ha2luZyBpbmNvcnJlY3QgaW5kZXggZW50cmllcy4gIEZv ciBleGFtcGxlLAogc3VwcG9zZSB3ZSBhcmUgYnVpbGRpbmcgYW4gaW5kZXggb24gY29sdW1uIFgg YW5kIHdlIG1ha2UgYW4gaW5kZXggZW50cnkgZm9yCiBhIG5vbi1IT1QgdHVwbGUgd2l0aCBYPTEu ICBUaGVuIHNvbWUgb3RoZXIgYmFja2VuZCwgdW5hd2FyZSB0aGF0IFggaXMgYW4KQEAgLTM5NCwx MCArMzk5LDEwIEBAIGVudHJ5IGF0IHRoZSByb290IG9mIHRoZSBIT1QtdXBkYXRlIGNoYWluIGJ1 dCB3ZSB1c2UgdGhlIGtleSB2YWx1ZSBmcm9tIHRoZQogbGl2ZSB0dXBsZS4KIAogV2UgbWFyayB0 aGUgaW5kZXggb3BlbiBmb3IgaW5zZXJ0cyAoYnV0IHN0aWxsIG5vdCByZWFkeSBmb3IgcmVhZHMp IHRoZW4KLXdlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZlIHRoZSB0YWJs ZSBvcGVuLiAgVGhlbiB3ZSB0YWtlCi1hIHNlY29uZCByZWZlcmVuY2Ugc25hcHNob3QgYW5kIHZh bGlkYXRlIHRoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMgZm9yCi10dXBsZXMgbWlzc2luZyBmcm9t IHRoZSBpbmRleCwgYW5kIGluc2VydHMgYW55IG1pc3Npbmcgb25lcy4gIEFnYWluLAotdGhlIGlu ZGV4IGVudHJpZXMgaGF2ZSB0byBoYXZlIFRJRHMgZXF1YWwgdG8gSE9ULWNoYWluIHJvb3QgVElE cywgYnV0Cit3ZSBhZ2FpbiB3YWl0IGZvciB0cmFuc2FjdGlvbnMgd2hpY2ggaGF2ZSB0aGUgdGFi bGUgb3Blbi4gIFRoZW4gdmFsaWRhdGUKK3RoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMgZm9yIHR1 cGxlcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4IGluIGF1eGlsaWFyeQoraW5kZXgsIGFuZCBpbnNl cnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhlbSB2aXNpYmxlIHRvIHJlZmVyZW5jZSBzbmFwc2hv dC4KK0FnYWluLCB0aGUgaW5kZXggZW50cmllcyBoYXZlIHRvIGhhdmUgVElEcyBlcXVhbCB0byBI T1QtY2hhaW4gcm9vdCBUSURzLCBidXQKIHRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpcyB0aGUg b25lIGZyb20gdGhlIGxpdmUgdHVwbGUuCiAKIFRoZW4gd2Ugd2FpdCB1bnRpbCBldmVyeSB0cmFu c2FjdGlvbiB0aGF0IGNvdWxkIGhhdmUgYSBzbmFwc2hvdCBvbGRlciB0aGFuCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBiY2JhYzg0NGJiNi4uYzg1ZTUzMzJi YTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNDEsNiAr NDEsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv bG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9y YWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgpAQCAtMTc0MywyNDIgKzE3 NDQsNDA1IEBAIGhlYXBhbV9pbmRleF9idWlsZF9yYW5nZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKIAlyZXR1cm4gcmVsdHVwbGVzOwogfQogCisvKgorICogQ2FsY3VsYXRlIHNldCBkaWZm ZXJlbmNlIChyZWxhdGl2ZSBjb21wbGVtZW50KSBvZiBtYWluIGFuZCBhdXgKKyAqIHNldHMuCisg KgorICogQWxsIHJlY29yZHMgd2hpY2ggYXJlIHByZXNlbnQgaW4gYXV4bGlhcnkgdHVwbGVzb3J0 IGJ1dCBub3QgaXMKKyAqIG1haW4gYXJlIGFkZGVkIHRvIHRoZSBzdG9yZS4KKyAqCisgKiBJbiBz ZXQgdGhlb3J5IG5vdGF0aW9uIHN0b3JlID0gYXV4IC0gbWFpbiBvciBzdG9yZSA9IGF1eCAvIG1h aW4uCisgKgorICogcmV0dXJucyBudW1iZXIgb2YgaXRlbXMgYWRkZWQgdG8gc3RvcmUKKyAqLwor c3RhdGljIGludAoraGVhcGFtX2luZGV4X3ZhbGlkYXRlX3R1cGxlc29ydF9kaWZmZXJlbmNlKFR1 cGxlc29ydHN0YXRlICAqbWFpbiwKKwkJCQkJCQkJCQkgICBUdXBsZXNvcnRzdGF0ZSAgKmF1eCwK KwkJCQkJCQkJCQkgICBUdXBsZXN0b3Jlc3RhdGUgKnN0b3JlKQoreworCWludAkJCQludW0gPSAw OworCS8qIHN0YXRlIHZhcmlhYmxlcyBmb3IgdGhlIG1lcmdlICovCisJSXRlbVBvaW50ZXIgCWlu ZGV4Y3Vyc29yID0gTlVMTCwKKwkJCQkJYXV4aW5kZXhjdXJzb3IgPSBOVUxMOworCUl0ZW1Qb2lu dGVyRGF0YSBkZWNvZGVkLAorCQkJCQlhdXhkZWNvZGVkOworCWJvb2wJCQl0dXBsZXNvcnRfZW1w dHkgPSBmYWxzZSwKKwkJCQkJYXV4dHVwbGVzb3J0X2VtcHR5ID0gZmFsc2U7CisKKwkvKiBJbml0 aWFsaXplIHBvaW50ZXJzLiAqLworCUl0ZW1Qb2ludGVyU2V0SW52YWxpZCgmZGVjb2RlZCk7CisJ SXRlbVBvaW50ZXJTZXRJbnZhbGlkKCZhdXhkZWNvZGVkKTsKKworCS8qCisJICogTWFpbiBsb29w OiB3ZSBzdGVwIHRocm91Z2ggdGhlIGF1eGlsaWFyeSBzb3J0IChhdXhTdGF0ZS0+dHVwbGVzb3J0 KSwKKwkgKiB3aGljaCBob2xkcyBUSURzIHRoYXQgbXVzdCBjb21wYXJlZCB0byB0aG9zZSBmcm9t IHRoZSAibWFpbiIgc29ydAorCSAqIChzdGF0ZS0+dHVwbGVzb3J0KS4KKwkgKi8KKwl3aGlsZSAo IWF1eHR1cGxlc29ydF9lbXB0eSkKKwl7CisJCURhdHVtCQl0c192YWw7CisJCWJvb2wJCXRzX2lz bnVsbDsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKgorCQkqIEF0dGVtcHQgdG8g ZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGF1eGlsaWFyeSBzb3J0LiBJZiBpdCdzCisJCSog ZW1wdHksIHdlIHNldCBhdXhpbmRleGN1cnNvciB0byBOVUxMLgorCQkqLworCQlhdXh0dXBsZXNv cnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKGF1eCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSBm YWxzZSwgJnRzX3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJCQkJCQkJCSBOVUxMKTsKKwkJQXNzZXJ0 KGF1eHR1cGxlc29ydF9lbXB0eSB8fCAhdHNfaXNudWxsKTsKKwkJaWYgKCFhdXh0dXBsZXNvcnRf ZW1wdHkpCisJCXsKKwkJCWl0ZW1wdHJfZGVjb2RlKCZhdXhkZWNvZGVkLCBEYXR1bUdldEludDY0 KHRzX3ZhbCkpOworCQkJYXV4aW5kZXhjdXJzb3IgPSAmYXV4ZGVjb2RlZDsKKwkJfQorCQllbHNl CisJCXsKKwkJCWF1eGluZGV4Y3Vyc29yID0gTlVMTDsKKwkJfQorCisJCS8qCisJCSogSWYgdGhl IGF1eGlsaWFyeSBzb3J0IGlzIG5vdCB5ZXQgZW1wdHksIHdlIG5vdyB0cnkgdG8gc3luY2hyb25p emUKKwkJKiB0aGUgIm1haW4iIHNvcnQgY3Vyc29yIChpbmRleGN1cnNvcikgd2l0aCBhdXhpbmRl eGN1cnNvci4gV2UgYWR2YW5jZQorCQkqIHRoZSBtYWluIHNvcnQgY3Vyc29yIHVudGlsIHdlJ3Zl IHJlYWNoZWQgb3IgcGFzc2VkIHRoZSBhdXhpbGlhcnkgVElELgorCQkqLworCQlpZiAoIWF1eHR1 cGxlc29ydF9lbXB0eSkKKwkJeworCQkJLyoKKwkJCSAqIE1vdmUgdGhlIG1haW4gc29ydCBmb3J3 YXJkIHdoaWxlOgorCQkJICogICAoMSkgSXQncyBub3QgZXhoYXVzdGVkICh0dXBsZXNvcnRfZW1w dHkgPT0gZmFsc2UpLCBhbmQKKwkJCSAqICAgKDIpIEVpdGhlciBpbmRleGN1cnNvciBpcyBOVUxM IChmaXJzdCBpdGVyYXRpb24pIG9yCisJCQkgKiAgICAgICBpbmRleGN1cnNvciA8IGF1eGluZGV4 Y3Vyc29yIGluIFRJRCBvcmRlci4KKwkJCSAqLworCQkJd2hpbGUgKCF0dXBsZXNvcnRfZW1wdHkg JiYgKGluZGV4Y3Vyc29yID09IE5VTEwgfHwgLyogbnVsbCBvbiBmaXJzdCB0aW1lIGhlcmUgKi8K KwkJCQkJCUl0ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpIDwg MCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIG1haW4g c29ydC4gSWYgaXQncyBlbXB0eSwKKwkJCQkgKiB3ZSBzZXQgaW5kZXhjdXJzb3IgdG8gTlVMTC4K KwkJCQkgKi8KKwkJCQl0dXBsZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKG1haW4s IHRydWUsCisJCQkJCQkJCQkJCQkJICBmYWxzZSwgJnRzX3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJ CQkJCQkJCQkgIE5VTEwpOworCQkJCUFzc2VydCh0dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVs bCk7CisKKwkJCQlpZiAoIXR1cGxlc29ydF9lbXB0eSkKKwkJCQl7CisJCQkJCWl0ZW1wdHJfZGVj b2RlKCZkZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3ZhbCkpOworCQkJCQlpbmRleGN1cnNvciA9 ICZkZWNvZGVkOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpbmRleGN1cnNvciA9IE5V TEw7CisJCQkJfQorCisJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJCX0KKworCQkJLyoK KwkJCSAqIE5vdywgaWYgZWl0aGVyOgorCQkJICogIC0gdGhlIG1haW4gc29ydCBpcyBlbXB0eSwg b3IKKwkJCSAqICAtIGluZGV4Y3Vyc29yID4gYXV4aW5kZXhjdXJzb3IsCisJCQkgKgorCQkJICog dGhlbiBhdXhpbmRleGN1cnNvciBpZGVudGlmaWVzIGEgVElEIHRoYXQgZG9lc24ndCBhcHBlYXIg aW4KKwkJCSAqIHRoZSBtYWluIHNvcnQuIFdlIGxpa2VseSBuZWVkIHRvIGluc2VydCBpdAorCQkJ ICogaW50byB0aGUgdGFyZ2V0IGluZGV4IGlmIGl04oCZcyB2aXNpYmxlIGluIHRoZSBoZWFwLgor CQkJICovCisJCQlpZiAodHVwbGVzb3J0X2VtcHR5IHx8IEl0ZW1Qb2ludGVyQ29tcGFyZShpbmRl eGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpID4gMCkKKwkJCXsKKwkJCQl0dXBsZXN0b3JlX3B1dGRh dHVtKHN0b3JlLCBJbnQ2NEdldERhdHVtKGl0ZW1wdHJfZW5jb2RlKGF1eGluZGV4Y3Vyc29yKSkp OworCQkJCW51bSsrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG51bTsKK30KKwordHlwZWRl ZiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFNjYW5TdGF0ZQoreworCVR1cGxlc3RvcmVzdGF0ZQkJKnN0 b3JlOworCUJsb2NrTnVtYmVyCQkJcHJldl9ibG9ja19udW1iZXI7CisJT2Zmc2V0TnVtYmVyCQlw cmV2X29mZl9vZmZzZXRfbnVtYmVyOworfSBWYWxpZGF0ZUluZGV4U2NhblN0YXRlOworCisvKgor ICogVGhpcyBpcyBSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBpbXBsZW1lbnRhdGlvbiB3aGljaCB3 b3JrcyBhcyBmb2xsb3dzOgorICoKKyAqIDEpIEl0IGl0ZXJhdGVzIG92ZXIgYSBzb3J0ZWQgdHVw bGVzdG9yZSwgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGFuIGVuY29kZWQKKyAqICAgIEl0ZW1Qb2lu dGVyCisgKgorICogMikgSXQgcmV0dXJucyB0aGUgY3VycmVudCBCbG9ja051bWJlciBhbmQgY29s bGVjdHMgYWxsIE9mZnNldE51bWJlcnMKKyAqICAgIGZvciB0aGF0IGJsb2NrIGluIHBlcl9idWZm ZXJfZGF0YS4KKyAqCisgKiAzKSBPbmNlIHRoZSBjb2RlIGVuY291bnRlcnMgYSBuZXcgQmxvY2tO dW1iZXIsIGl0IHN0b3BzIHJlYWRpbmcgbW9yZQorICogICAgb2Zmc2V0cyBhbmQgc2F2ZXMgdGhl IE9mZnNldE51bWJlciBvZiB0aGUgbmV3IGJsb2NrIGZvciB0aGUgbmV4dCBjYWxsLgorICoKKyAq IDQpIFRoZSBsaXN0IG9mIG9mZnNldHMgZm9yIGEgYmxvY2sgaXMgYWx3YXlzIHRlcm1pbmF0ZWQg d2l0aCBJbnZhbGlkT2Zmc2V0TnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5k ZWQgdG8gYmUgcmVwZWF0ZWRseSBjYWxsZWQsIGVhY2ggdGltZSByZXR1cm5pbmcKKyAqIHRoZSBu ZXh0IGJsb2NrIGFuZCBpdHMgY29ycmVzcG9uZGluZyBzZXQgb2Ygb2Zmc2V0cy4KKyAqLworc3Rh dGljIEJsb2NrTnVtYmVyCitoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9yZWFkX3N0cmVhbV9u ZXh0KAorCQkJCQkJCQkgIFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJICB2b2lkICp2b2lk X2NhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJICB2b2lkICp2b2lkX3Blcl9idWZmZXJf ZGF0YQorCQkJCQkJCQkgICkKK3sKKwlib29sIHNob3VkX2ZyZWU7CisJRGF0dW0gZGF0dW07CisJ QmxvY2tOdW1iZXIgcmVzdWx0ID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWludCBpID0gMDsKKwor CS8qCisJICogUmV0cmlldmUgdGhlIHNwZWNpYWxpemVkIGNhbGxiYWNrIHN0YXRlIGFuZCB0aGUg b3V0cHV0IGJ1ZmZlci4KKwkgKiBjYWxsYmFja19wcml2YXRlX2RhdGEga2VlcHMgdHJhY2sgb2Yg dGhlIHByZXZpb3VzIGJsb2NrIGFuZCBvZmZzZXQKKwkgKiBmcm9tIGEgcHJpb3IgaW52b2NhdGlv biwgaWYgYW55LgorCSAqLworCVZhbGlkYXRlSW5kZXhTY2FuU3RhdGUgKmNhbGxiYWNrX3ByaXZh dGVfZGF0YSA9IHZvaWRfY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCU9mZnNldE51bWJlciAqcGVy X2J1ZmZlcl9kYXRhID0gdm9pZF9wZXJfYnVmZmVyX2RhdGE7CisKKwkvKgorCSAqIElmIHRoZXJl IGlzIGEgImxlZnRvdmVyIiBvZmZzZXQgbnVtYmVyIGZyb20gdGhlIHByZXZpb3VzIGludm9jYXRp b24sCisJICogaXQgbWVhbnMgd2UgaGFkIHN3aXRjaGVkIHRvIGEgbmV3IGJsb2NrIGluIHRoZSBt aWRkbGUgb2YgdGhlIGxhc3QgY2FsbC4KKwkgKiBXZSBwbGFjZSB0aGF0IGxlZnRvdmVyIG9mZnNl dCBudW1iZXIgaW50byB0aGUgYnVmZmVyIGZpcnN0LgorCSAqLworCWlmIChjYWxsYmFja19wcml2 YXRlX2RhdGEtPnByZXZfb2ZmX29mZnNldF9udW1iZXIgIT0gSW52YWxpZE9mZnNldE51bWJlcikK Kwl7CisJCUFzc2VydChjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyICE9 IEludmFsaWRCbG9ja051bWJlcik7CisJCS8qCisJCSAqICdyZXN1bHQnIGlzIHRoZSBibG9jayBu dW1iZXIgdG8gcmV0dXJuLiBXZSBzZXQgaXQgdG8gdGhlIGJsb2NrCisJCSAqIGZyb20gdGhlIHBy ZXZpb3VzIGxlZnRvdmVyIG9mZnNldC4KKwkJICovCisJCXJlc3VsdCA9IGNhbGxiYWNrX3ByaXZh dGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXI7CisJCS8qIFBsYWNlIGxlZnRvdmVyIG9mZnNldCBu dW1iZXIgaW4gdGhlIG91dHB1dCBidWZmZXIuICovCisJCXBlcl9idWZmZXJfZGF0YVtpKytdID0g Y2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZl9vZmZzZXRfbnVtYmVyOworCQkvKgorCQkg KiBDbGVhciB0aGUgbGVmdG92ZXIgb2Zmc2V0IG51bWJlciBzbyBpdCB3b24ndCBiZSByZXVzZWQg dW5sZXNzCisJCSAqIHdlIGVuY291bnRlciBhbm90aGVyIGJsb2NrIGNoYW5nZS4KKwkJICovCisJ CWNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9vZmZfb2Zmc2V0X251bWJlciA9IEludmFsaWRP ZmZzZXROdW1iZXI7CisJfQorCisJLyoKKwkgKiBSZWFkIGZyb20gdGhlIHR1cGxlc3RvcmUgdW50 aWwgd2UgZWl0aGVyIHJ1biBvdXQgb2YgdHVwbGVzIG9yIHdlCisJICogZW5jb3VudGVyIGEgYmxv Y2sgY2hhbmdlLiBGb3IgZWFjaCB0dXBsZToKKwkgKgorCSAqICAgMSkgRGVjb2RlIGl0cyBibG9j ay9vZmZzZXQgZnJvbSB0aGUgRGF0dW0uCisJICogICAyKSBJZiBpdCdzIHRoZSBmaXJzdCB0aW1l IGluIHRoaXMgY2FsbCAocHJldl9ibG9ja19udW1iZXIgPT0gSW52YWxpZEJsb2NrTnVtYmVyKSwK KwkgKiAgICAgIGluaXRpYWxpemUgcHJldl9ibG9ja19udW1iZXIuCisJICogICAzKSBJZiB0aGUg YmxvY2sgbnVtYmVyIG1hdGNoZXMgdGhlIGN1cnJlbnQgYmxvY2ssIGNvbGxlY3QgdGhlIG9mZnNl dC4KKwkgKiAgIDQpIElmIHRoZSBibG9jayBudW1iZXIgZGlmZmVycywgc2F2ZSB0aGF0IG9mZnNl dCBhcyBsZWZ0b3ZlciBhbmQgYnJlYWsKKwkgKiAgICAgIHNvIHRoYXQgdGhlIG5leHQgY2FsbCBj YW4gaGFuZGxlIHRoZSBuZXcgYmxvY2suCisJICovCisJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0ZGF0 dW0oY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5zdG9yZSwgdHJ1ZSwgJnNob3VkX2ZyZWUsICZkYXR1 bSkpCisJeworCQlCbG9ja051bWJlciBuZXh0X2Jsb2NrX251bWJlcjsKKwkJSXRlbVBvaW50ZXJE YXRhIG5leHRfZGF0YTsKKworCQkvKiBEZWNvZGUgdGhlIGRhdHVtIGludG8gYW4gSXRlbVBvaW50 ZXIgKGJsb2NrICsgb2Zmc2V0KS4gKi8KKwkJaXRlbXB0cl9kZWNvZGUoJm5leHRfZGF0YSwgRGF0 dW1HZXRJbnQ2NChkYXR1bSkpOworCQluZXh0X2Jsb2NrX251bWJlciA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIoJm5leHRfZGF0YSk7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZW4ndCBzZXQg YSBibG9jayBudW1iZXIgeWV0IHRoaXMgcm91bmQsIGluaXRpYWxpemUgaXQKKwkJICogdXNpbmcg dGhlIGZpcnN0IHR1cGxlIHdlIHJlYWQuCisJCSAqLworCQlpZiAoY2FsbGJhY2tfcHJpdmF0ZV9k YXRhLT5wcmV2X2Jsb2NrX251bWJlciA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCQljYWxsYmFj a19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyID0gbmV4dF9ibG9ja19udW1iZXI7CisK KwkJLyoKKwkJICogQWx3YXlzIHNldCB0aGUgcmVzdWx0IHRvIGJlIHRoZSAiY3VycmVudCIgYmxv Y2sgbnVtYmVyCisJCSAqIHdlIGFyZSBmaWxsaW5nIG9mZnNldHMgZm9yLgorCQkgKi8KKwkJcmVz dWx0ID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlcjsKKworCQkvKgor CQkgKiBJZiB0aGlzIHR1cGxlIGlzIGZyb20gdGhlIHNhbWUgYmxvY2ssIGp1c3Qgc3RvcmUgaXRz IG9mZnNldAorCQkgKiBpbiBvdXIgcGVyX2J1ZmZlcl9kYXRhIGFycmF5LgorCQkgKi8KKwkJaWYg KG5leHRfYmxvY2tfbnVtYmVyID09IGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19u dW1iZXIpCisJCXsKKwkJCXBlcl9idWZmZXJfZGF0YVtpKytdID0gSXRlbVBvaW50ZXJHZXRPZmZz ZXROdW1iZXIoJm5leHRfZGF0YSk7CisKKwkJCS8qIEZyZWUgdGhlIGRhdHVtIGlmIG5lZWRlZC4g Ki8KKwkJCWlmIChzaG91ZF9mcmVlKQorCQkJCXBmcmVlKERhdHVtR2V0UG9pbnRlcihkYXR1bSkp OworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBibG9jayBqdXN0IGNoYW5n ZWQsIHN0b3JlIHRoZSBvZmZzZXQgb2YgdGhlIG5ldyBibG9jaworCQkJICogYXMgbGVmdG92ZXIg Zm9yIHRoZSBuZXh0IGludm9jYXRpb24gYW5kIGJyZWFrIG91dC4KKwkJCSAqLworCQkJY2FsbGJh Y2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlciA9IG5leHRfYmxvY2tfbnVtYmVyOwor CQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZl9vZmZzZXRfbnVtYmVyID0gIEl0ZW1Q b2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZuZXh0X2RhdGEpOworCisJCQkvKiBGcmVlIHRoZSBkYXR1 bSBpZiBuZWVkZWQuICovCisJCQlpZiAoc2hvdWRfZnJlZSkKKwkJCQlwZnJlZShEYXR1bUdldFBv aW50ZXIoZGF0dW0pKTsKKworCQkJLyogQnJlYWsgdG8gbGV0IHRoZSBuZXh0IGNhbGwgaGFuZGxl IHRoZSBuZXcgYmxvY2suICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogVGVybWlu YXRlIHRoZSBsaXN0IG9mIG9mZnNldHMgZm9yIHRoaXMgYmxvY2sgd2l0aCBhbiBJbnZhbGlkT2Zm c2V0TnVtYmVyLgorCSAqLworCXBlcl9idWZmZXJfZGF0YVtpXSA9IEludmFsaWRPZmZzZXROdW1i ZXI7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIHZvaWQKIGhlYXBhbV9pbmRleF92YWxp ZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCSAgIFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sCiAJCQkJCQkgICBJbmRleEluZm8gKmluZGV4SW5mbywKIAkJCQkJCSAgIFNuYXBz aG90IHNuYXBzaG90LAotCQkJCQkJICAgVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSkKKwkJCQkJ CSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3Rh dGUgKmF1eFN0YXRlKQogewotCVRhYmxlU2NhbkRlc2Mgc2NhbjsKLQlIZWFwU2NhbkRlc2MgaHNj YW47Ci0JSGVhcFR1cGxlCWhlYXBUdXBsZTsKIAlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlT XTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwotCUV4cHJTdGF0ZSAgKnByZWRpY2F0 ZTsKLQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlFU3RhdGUJICAgKmVzdGF0ZTsKLQlFeHByQ29u dGV4dCAqZWNvbnRleHQ7Ci0JQmxvY2tOdW1iZXIgcm9vdF9ibGtubyA9IEludmFsaWRCbG9ja051 bWJlcjsKLQlPZmZzZXROdW1iZXIgcm9vdF9vZmZzZXRzW01heEhlYXBUdXBsZXNQZXJQYWdlXTsK LQlib29sCQlpbl9pbmRleFtNYXhIZWFwVHVwbGVzUGVyUGFnZV07Ci0JQmxvY2tOdW1iZXIgcHJl dmlvdXNfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KLQkvKiBzdGF0ZSB2YXJpYWJsZXMg Zm9yIHRoZSBtZXJnZSAqLwotCUl0ZW1Qb2ludGVyIGluZGV4Y3Vyc29yID0gTlVMTDsKLQlJdGVt UG9pbnRlckRhdGEgZGVjb2RlZDsKLQlib29sCQl0dXBsZXNvcnRfZW1wdHkgPSBmYWxzZTsKKwor CVR1cGxlVGFibGVTbG90ICAqc2xvdDsKKwlFU3RhdGUJCQkqZXN0YXRlOworCUV4cHJDb250ZXh0 CQkqZWNvbnRleHQ7CisJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5ID0gR2V0QWNjZXNz U3RyYXRlZ3koQkFTX0JVTEtSRUFEKTsKKworCWludAkJCQludW1fdG9fY2hlY2s7CisJVHVwbGVz dG9yZXN0YXRlICp0dXBsZXNfZm9yX2NoZWNrOworCVZhbGlkYXRlSW5kZXhTY2FuU3RhdGUgY2Fs bGJhY2tfcHJpdmF0ZV9kYXRhOworCisJQnVmZmVyIGJ1ZjsKKwlPZmZzZXROdW1iZXIqIHR1cGxl czsKKwlSZWFkU3RyZWFtICpyZWFkX3N0cmVhbTsKKworCS8qIFVzZSAxMCUgb2YgbWVtb3J5IGZv ciB0dXBsZSBzdG9yZS4gKi8KKwlpbnQJCXN0b3JlX3dvcmtfbWVtX3BhcnQgPSBtYWludGVuYW5j ZV93b3JrX21lbSAvIDEwOworCisJLyoKKwkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVlcyBm b3IgdGhlIHNvcnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKKwkgKiBpdGVtIHBvaW50 ZXJzLiAgVGhpcyBjYW4gYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIsIHByaW1hcmlseSBiZWNhdXNl IFRJRAorCSAqIGlzIGEgcGFzcy1ieS1yZWZlcmVuY2UgdHlwZSBvbiBhbGwgcGxhdGZvcm1zLCB3 aGVyZWFzIGludDggaXMKKwkgKiBwYXNzLWJ5LXZhbHVlIG9uIG1vc3QgcGxhdGZvcm1zLgorCSAq LworCXR1cGxlc19mb3JfY2hlY2sgPSAgdHVwbGVzdG9yZV9iZWdpbl9kYXR1bShJTlQ4T0lELCBm YWxzZSwgZmFsc2UsIHN0b3JlX3dvcmtfbWVtX3BhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hl Y2tzCiAJICovCiAJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxh bSkpOwogCi0JLyoKLQkgKiBOZWVkIGFuIEVTdGF0ZSBmb3IgZXZhbHVhdGlvbiBvZiBpbmRleCBl eHByZXNzaW9ucyBhbmQgcGFydGlhbC1pbmRleAotCSAqIHByZWRpY2F0ZXMuICBBbHNvIGEgc2xv dCB0byBob2xkIHRoZSBjdXJyZW50IHR1cGxlLgotCSAqLworCW51bV90b19jaGVjayA9IGhlYXBh bV9pbmRleF92YWxpZGF0ZV90dXBsZXNvcnRfZGlmZmVyZW5jZShzdGF0ZS0+dHVwbGVzb3J0LAor CQkJCQkJCQkJCQkJCQkgYXV4U3RhdGUtPnR1cGxlc29ydCwKKwkJCQkJCQkJCQkJCQkJIHR1cGxl c19mb3JfY2hlY2spOworCisJLyogSXQgaXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNsb3NlIHR1 cGxlIHNvcnQgYXMgZmFzdCBhcyB3ZSBjYW4gKi8KKwl0dXBsZXNvcnRfZW5kKHN0YXRlLT50dXBs ZXNvcnQpOworCXR1cGxlc29ydF9lbmQoYXV4U3RhdGUtPnR1cGxlc29ydCk7CisKKwlzdGF0ZS0+ dHVwbGVzb3J0ID0gYXV4U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CisKIAllc3RhdGUgPSBDcmVh dGVFeGVjdXRvclN0YXRlKCk7CiAJZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVz dGF0ZSk7CiAJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2Ny KGhlYXBSZWxhdGlvbiksCi0JCQkJCQkJCQkmVFRTT3BzSGVhcFR1cGxlKTsKKwkJCQkJCQkJCSZU VFNPcHNCdWZmZXJIZWFwVHVwbGUpOwogCiAJLyogQXJyYW5nZSBmb3IgZWNvbnRleHQncyBzY2Fu IHR1cGxlIHRvIGJlIHRoZSB0dXBsZSB1bmRlciB0ZXN0ICovCiAJZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlID0gc2xvdDsKIAotCS8qIFNldCB1cCBleGVjdXRpb24gc3RhdGUgZm9yIHByZWRpY2F0 ZSwgaWYgYW55LiAqLwotCXByZWRpY2F0ZSA9IEV4ZWNQcmVwYXJlUXVhbChpbmRleEluZm8tPmlp X1ByZWRpY2F0ZSwgZXN0YXRlKTsKKwljYWxsYmFja19wcml2YXRlX2RhdGEucHJldl9ibG9ja19u dW1iZXIgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnN0b3Jl ID0gdHVwbGVzX2Zvcl9jaGVjazsKKwljYWxsYmFja19wcml2YXRlX2RhdGEucHJldl9vZmZfb2Zm c2V0X251bWJlciA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAKLQkvKgotCSAqIFByZXBhcmUgZm9y IHNjYW4gb2YgdGhlIGJhc2UgcmVsYXRpb24uICBXZSBuZWVkIGp1c3QgdGhvc2UgdHVwbGVzCi0J ICogc2F0aXNmeWluZyB0aGUgcGFzc2VkLWluIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdlIG11c3Qg ZGlzYWJsZSBzeW5jc2NhbgotCSAqIGhlcmUsIGJlY2F1c2UgaXQncyBjcml0aWNhbCB0aGF0IHdl IHJlYWQgZnJvbSBibG9jayB6ZXJvIGZvcndhcmQgdG8KLQkgKiBtYXRjaCB0aGUgc29ydGVkIFRJ RHMuCi0JICovCi0Jc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRpb24sCS8q IHJlbGF0aW9uICovCi0JCQkJCQkJCSBzbmFwc2hvdCwJLyogc25hcHNob3QgKi8KLQkJCQkJCQkJ IDAsIC8qIG51bWJlciBvZiBrZXlzICovCi0JCQkJCQkJCSBOVUxMLAkvKiBzY2FuIGtleSAqLwot CQkJCQkJCQkgdHJ1ZSwJLyogYnVmZmVyIGFjY2VzcyBzdHJhdGVneSBPSyAqLwotCQkJCQkJCQkg ZmFsc2UpOwkvKiBzeW5jc2NhbiBub3QgT0sgKi8KLQloc2NhbiA9IChIZWFwU2NhbkRlc2MpIHNj YW47CisJcmVhZF9zdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVB TV9NQUlOVEVOQU5DRSB8IFJFQURfU1RSRUFNX1VTRV9CQVRDSElORywKKwkJCQkJCQkJCQkJCQkJ IGJzdHJhdGVneSwKKwkJCQkJCQkJCQkJCQkJIGhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAor CQkJCQkJCQkJCQkJCQkgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4 dCwKKwkJCQkJCQkJCQkJCQkJICZjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCQkJ CSAoTWF4SGVhcFR1cGxlc1BlclBhZ2UgKyAxKSAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKIAot CXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfU0NBTl9CTE9DS1NfVE9UQUws Ci0JCQkJCQkJCSBoc2Nhbi0+cnNfbmJsb2Nrcyk7CisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9w YXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX1RPVEFMLCBudW1fdG9fY2hlY2spOworCXBn c3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1RVUExFU19ET05F LCAwKTsKIAotCS8qCi0JICogU2NhbiBhbGwgdHVwbGVzIG1hdGNoaW5nIHRoZSBzbmFwc2hvdC4K LQkgKi8KLQl3aGlsZSAoKGhlYXBUdXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hpbGUgKChidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcihyZWFkX3N0cmVhbSwgKHZvaWQqKSAmdHVwbGVzKSkgIT0gSW52YWxpZEJ1ZmZlcikKIAl7 Ci0JCUl0ZW1Qb2ludGVyIGhlYXBjdXJzb3IgPSAmaGVhcFR1cGxlLT50X3NlbGY7Ci0JCUl0ZW1Q b2ludGVyRGF0YSByb290VHVwbGU7Ci0JCU9mZnNldE51bWJlciByb290X29mZm51bTsKKwkJSGVh cFR1cGxlRGF0YQloZWFwX3R1cGxlX2RhdGFbTWF4SGVhcFR1cGxlc1BlclBhZ2VdOworCQlpbnQg aTsKKwkJT2Zmc2V0TnVtYmVyIG9mZjsKKwkJQmxvY2tOdW1iZXIgYmxvY2tfbnVtYmVyOwogCiAJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJc3RhdGUtPmh0dXBzICs9IDE7CisJCUxvY2tC dWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCWJsb2NrX251bWJlciA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ1Zik7CiAKLQkJaWYgKChwcmV2aW91c19ibGtubyA9PSBJbnZhbGlkQmxv Y2tOdW1iZXIpIHx8Ci0JCQkoaHNjYW4tPnJzX2NibG9jayAhPSBwcmV2aW91c19ibGtubykpCisJ CWkgPSAwOworCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9mZnNldE51bWJl cikKIAkJewotCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19TQ0FOX0JM T0NLU19ET05FLAotCQkJCQkJCQkJCSBoc2Nhbi0+cnNfY2Jsb2NrKTsKLQkJCXByZXZpb3VzX2Js a25vID0gaHNjYW4tPnJzX2NibG9jazsKKwkJCUl0ZW1Qb2ludGVyRGF0YSB0aWQ7CisJCQlib29s CQlhbGxfZGVhZCwgZm91bmQ7CisJCQlJdGVtUG9pbnRlclNldCgmdGlkLCBibG9ja19udW1iZXIs IG9mZik7CisKKwkJCWZvdW5kID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcigmdGlkLCBoZWFwUmVs YXRpb24sIGJ1Ziwgc25hcHNob3QsCisJCQkJCQkJCQkJICAgJmhlYXBfdHVwbGVfZGF0YVtpXSwg JmFsbF9kZWFkLCB0cnVlKTsKKwkJCWlmICghZm91bmQpCisJCQkJSXRlbVBvaW50ZXJTZXRJbnZh bGlkKCZoZWFwX3R1cGxlX2RhdGFbaV0udF9zZWxmKTsKKwkJCWkrKzsKIAkJfQorCQlMb2NrQnVm ZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIAotCQkvKgotCQkgKiBBcyBjb21tZW50ZWQg aW4gdGFibGVfaW5kZXhfYnVpbGRfc2Nhbiwgd2Ugc2hvdWxkIGluZGV4IGhlYXAtb25seQotCQkg KiB0dXBsZXMgdW5kZXIgdGhlIFRJRHMgb2YgdGhlaXIgcm9vdCB0dXBsZXM7IHNvIHdoZW4gd2Ug YWR2YW5jZSBvbnRvCi0JCSAqIGEgbmV3IGhlYXAgcGFnZSwgYnVpbGQgYSBtYXAgb2Ygcm9vdCBp dGVtIG9mZnNldHMgb24gdGhlIHBhZ2UuCi0JCSAqCi0JCSAqIFRoaXMgY29tcGxpY2F0ZXMgbWVy Z2luZyBhZ2FpbnN0IHRoZSB0dXBsZXNvcnQgb3V0cHV0OiB3ZSB3aWxsCi0JCSAqIHZpc2l0IHRo ZSBsaXZlIHR1cGxlcyBpbiBvcmRlciBieSB0aGVpciBvZmZzZXRzLCBidXQgdGhlIHJvb3QKLQkJ ICogb2Zmc2V0cyB0aGF0IHdlIG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBpbmRleCBjb250 ZW50cyBtaWdodCBiZQotCQkgKiBvcmRlcmVkIGRpZmZlcmVudGx5LiAgU28gd2UgbWlnaHQgaGF2 ZSB0byAibG9vayBiYWNrIiB3aXRoaW4gdGhlCi0JCSAqIHR1cGxlc29ydCBvdXRwdXQsIGJ1dCBv bmx5IHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLiAgV2UgaGFuZGxlIHRoYXQKLQkJICogYnkga2Vl cGluZyBhIGJvb2wgYXJyYXkgaW5faW5kZXhbXSBzaG93aW5nIGFsbCB0aGUKLQkJICogYWxyZWFk eS1wYXNzZWQtb3ZlciB0dXBsZXNvcnQgb3V0cHV0IFRJRHMgb2YgdGhlIGN1cnJlbnQgcGFnZS4g V2UKLQkJICogY2xlYXIgdGhhdCBhcnJheSBoZXJlLCB3aGVuIGFkdmFuY2luZyBvbnRvIGEgbmV3 IGhlYXAgcGFnZS4KLQkJICovCi0JCWlmIChoc2Nhbi0+cnNfY2Jsb2NrICE9IHJvb3RfYmxrbm8p CisJCWkgPSAwOworCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9mZnNldE51 bWJlcikKIAkJewotCQkJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoaHNjYW4tPnJzX2NidWYp OwotCi0JCQlMb2NrQnVmZmVyKGhzY2FuLT5yc19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0J CQloZWFwX2dldF9yb290X3R1cGxlcyhwYWdlLCByb290X29mZnNldHMpOwotCQkJTG9ja0J1ZmZl cihoc2Nhbi0+cnNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCQkJbWVtc2V0KGluX2lu ZGV4LCAwLCBzaXplb2YoaW5faW5kZXgpKTsKLQotCQkJcm9vdF9ibGtubyA9IGhzY2FuLT5yc19j YmxvY2s7Ci0JCX0KLQotCQkvKiBDb252ZXJ0IGFjdHVhbCB0dXBsZSBUSUQgdG8gcm9vdCBUSUQg Ki8KLQkJcm9vdFR1cGxlID0gKmhlYXBjdXJzb3I7Ci0JCXJvb3Rfb2ZmbnVtID0gSXRlbVBvaW50 ZXJHZXRPZmZzZXROdW1iZXIoaGVhcGN1cnNvcik7Ci0KLQkJaWYgKEhlYXBUdXBsZUlzSGVhcE9u bHkoaGVhcFR1cGxlKSkKLQkJewotCQkJcm9vdF9vZmZudW0gPSByb290X29mZnNldHNbcm9vdF9v ZmZudW0gLSAxXTsKLQkJCWlmICghT2Zmc2V0TnVtYmVySXNWYWxpZChyb290X29mZm51bSkpCi0J CQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQp LAotCQkJCQkJIGVycm1zZ19pbnRlcm5hbCgiZmFpbGVkIHRvIGZpbmQgcGFyZW50IHR1cGxlIGZv ciBoZWFwLW9ubHkgdHVwbGUgYXQgKCV1LCV1KSBpbiB0YWJsZSBcIiVzXCIiLAotCQkJCQkJCQkJ CSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKGhlYXBjdXJzb3IpLAotCQkJCQkJCQkJCSBJdGVt UG9pbnRlckdldE9mZnNldE51bWJlcihoZWFwY3Vyc29yKSwKLQkJCQkJCQkJCQkgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoaGVhcFJlbGF0aW9uKSkpKTsKLQkJCUl0ZW1Qb2ludGVyU2V0T2Zmc2V0 TnVtYmVyKCZyb290VHVwbGUsIHJvb3Rfb2ZmbnVtKTsKLQkJfQotCi0JCS8qCi0JCSAqICJtZXJn ZSIgYnkgc2tpcHBpbmcgdGhyb3VnaCB0aGUgaW5kZXggdHVwbGVzIHVudGlsIHdlIGZpbmQgb3Ig cGFzcwotCQkgKiB0aGUgY3VycmVudCByb290IHR1cGxlLgotCQkgKi8KLQkJd2hpbGUgKCF0dXBs ZXNvcnRfZW1wdHkgJiYKLQkJCSAgICghaW5kZXhjdXJzb3IgfHwKLQkJCQlJdGVtUG9pbnRlckNv bXBhcmUoaW5kZXhjdXJzb3IsICZyb290VHVwbGUpIDwgMCkpCi0JCXsKLQkJCURhdHVtCQl0c192 YWw7Ci0JCQlib29sCQl0c19pc251bGw7Ci0KLQkJCWlmIChpbmRleGN1cnNvcikKKwkJCWlmIChJ dGVtUG9pbnRlcklzVmFsaWQoJmhlYXBfdHVwbGVfZGF0YVtpXS50X3NlbGYpKQogCQkJeworCQkJ CUl0ZW1Qb2ludGVyRGF0YSByb290X3RpZDsKKwkJCQlJdGVtUG9pbnRlclNldCgmcm9vdF90aWQs IGJsb2NrX251bWJlciwgb2ZmKTsKKworCQkJCS8qIFJlc2V0IHRoZSBwZXItdHVwbGUgbWVtb3J5 IGNvbnRleHQgZm9yIHRoZSBuZXh0IGZldGNoLiAqLworCQkJCU1lbW9yeUNvbnRleHRSZXNldChl Y29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5KTsKKwkJCQlFeGVjU3RvcmVCdWZmZXJIZWFw VHVwbGUoJmhlYXBfdHVwbGVfZGF0YVtpXSwgc2xvdCwgYnVmKTsKKworCQkJCS8qIENvbXB1dGUg dGhlIGtleSB2YWx1ZXMgYW5kIG51bGwgZmxhZ3MgZm9yIHRoaXMgdHVwbGUuICovCisJCQkJRm9y bUluZGV4RGF0dW0oaW5kZXhJbmZvLAorCQkJCQkJCSAgIHNsb3QsCisJCQkJCQkJICAgZXN0YXRl LAorCQkJCQkJCSAgIHZhbHVlcywKKwkJCQkJCQkgICBpc251bGwpOworCiAJCQkJLyoKLQkJCQkg KiBSZW1lbWJlciBpbmRleCBpdGVtcyBzZWVuIGVhcmxpZXIgb24gdGhlIGN1cnJlbnQgaGVhcCBw YWdlCisJCQkJICogSW5zZXJ0IHRoZSB0dXBsZSBpbnRvIHRoZSB0YXJnZXQgaW5kZXguCiAJCQkJ ICovCi0JCQkJaWYgKEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoaW5kZXhjdXJzb3IpID09IHJv b3RfYmxrbm8pCi0JCQkJCWluX2luZGV4W0l0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKGluZGV4 Y3Vyc29yKSAtIDFdID0gdHJ1ZTsKKwkJCQlpbmRleF9pbnNlcnQoaW5kZXhSZWxhdGlvbiwKKwkJ CQkJCQkgdmFsdWVzLAorCQkJCQkJCSBpc251bGwsCisJCQkJCQkJICZyb290X3RpZCwgLyogaW5z ZXJ0IHJvb3QgdHVwbGUgKi8KKwkJCQkJCQkgaGVhcFJlbGF0aW9uLAorCQkJCQkJCSBpbmRleElu Zm8tPmlpX1VuaXF1ZSA/CisJCQkJCQkJIFVOSVFVRV9DSEVDS19ZRVMgOiBVTklRVUVfQ0hFQ0tf Tk8sCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBpbmRleEluZm8pOwogCQkJfQogCi0JCQl0dXBs ZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKHN0YXRlLT50dXBsZXNvcnQsIHRydWUs Ci0JCQkJCQkJCQkJCQkgIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAotCQkJCQkJCQkJCQkJ ICBOVUxMKTsKLQkJCUFzc2VydCh0dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVsbCk7Ci0JCQlp ZiAoIXR1cGxlc29ydF9lbXB0eSkKLQkJCXsKLQkJCQlpdGVtcHRyX2RlY29kZSgmZGVjb2RlZCwg RGF0dW1HZXRJbnQ2NCh0c192YWwpKTsKLQkJCQlpbmRleGN1cnNvciA9ICZkZWNvZGVkOwotCQkJ fQotCQkJZWxzZQotCQkJewotCQkJCS8qIEJlIHRpZHkgKi8KLQkJCQlpbmRleGN1cnNvciA9IE5V TEw7Ci0JCQl9CisJCQlzdGF0ZS0+aHR1cHMgKz0gMTsKKwkJCXBnc3RhdF9wcm9ncmVzc19pbmNy X3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9UVVBMRVNfRE9ORSwgMSk7CisJCQlpKys7CiAJCX0K IAotCQkvKgotCQkgKiBJZiB0aGUgdHVwbGVzb3J0IGhhcyBvdmVyc2hvdCAqYW5kKiB3ZSBkaWRu J3Qgc2VlIGEgbWF0Y2ggZWFybGllciwKLQkJICogdGhlbiB0aGlzIHR1cGxlIGlzIG1pc3Npbmcg ZnJvbSB0aGUgaW5kZXgsIHNvIGluc2VydCBpdC4KLQkJICovCi0JCWlmICgodHVwbGVzb3J0X2Vt cHR5IHx8Ci0JCQkgSXRlbVBvaW50ZXJDb21wYXJlKGluZGV4Y3Vyc29yLCAmcm9vdFR1cGxlKSA+ IDApICYmCi0JCQkhaW5faW5kZXhbcm9vdF9vZmZudW0gLSAxXSkKLQkJewotCQkJTWVtb3J5Q29u dGV4dFJlc2V0KGVjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkpOwotCi0JCQkvKiBTZXQg dXAgZm9yIHByZWRpY2F0ZSBvciBleHByZXNzaW9uIGV2YWx1YXRpb24gKi8KLQkJCUV4ZWNTdG9y ZUhlYXBUdXBsZShoZWFwVHVwbGUsIHNsb3QsIGZhbHNlKTsKLQotCQkJLyoKLQkJCSAqIEluIGEg cGFydGlhbCBpbmRleCwgZGlzY2FyZCB0dXBsZXMgdGhhdCBkb24ndCBzYXRpc2Z5IHRoZQotCQkJ ICogcHJlZGljYXRlLgotCQkJICovCi0JCQlpZiAocHJlZGljYXRlICE9IE5VTEwpCi0JCQl7Ci0J CQkJaWYgKCFFeGVjUXVhbChwcmVkaWNhdGUsIGVjb250ZXh0KSkKLQkJCQkJY29udGludWU7Ci0J CQl9Ci0KLQkJCS8qCi0JCQkgKiBGb3IgdGhlIGN1cnJlbnQgaGVhcCB0dXBsZSwgZXh0cmFjdCBh bGwgdGhlIGF0dHJpYnV0ZXMgd2UgdXNlCi0JCQkgKiBpbiB0aGlzIGluZGV4LCBhbmQgbm90ZSB3 aGljaCBhcmUgbnVsbC4gIFRoaXMgYWxzbyBwZXJmb3JtcwotCQkJICogZXZhbHVhdGlvbiBvZiBh bnkgZXhwcmVzc2lvbnMgbmVlZGVkLgotCQkJICovCi0JCQlGb3JtSW5kZXhEYXR1bShpbmRleElu Zm8sCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgZXN0YXRlLAotCQkJCQkJICAgdmFsdWVzLAot CQkJCQkJICAgaXNudWxsKTsKLQotCQkJLyoKLQkJCSAqIFlvdSdkIHRoaW5rIHdlIHNob3VsZCBn byBhaGVhZCBhbmQgYnVpbGQgdGhlIGluZGV4IHR1cGxlIGhlcmUsCi0JCQkgKiBidXQgc29tZSBp bmRleCBBTXMgd2FudCB0byBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gdGhlIGRhdGEKLQkJCSAq IGZpcnN0LiBTbyBwYXNzIHRoZSB2YWx1ZXNbXSBhbmQgaXNudWxsW10gYXJyYXlzLCBpbnN0ZWFk LgotCQkJICovCi0KLQkJCS8qCi0JCQkgKiBJZiB0aGUgdHVwbGUgaXMgYWxyZWFkeSBjb21taXR0 ZWQgZGVhZCwgeW91IG1pZ2h0IHRoaW5rIHdlCi0JCQkgKiBjb3VsZCBzdXBwcmVzcyB1bmlxdWVu ZXNzIGNoZWNraW5nLCBidXQgdGhpcyBpcyBubyBsb25nZXIgdHJ1ZQotCQkJICogaW4gdGhlIHBy ZXNlbmNlIG9mIEhPVCwgYmVjYXVzZSB0aGUgaW5zZXJ0IGlzIGFjdHVhbGx5IGEgcHJveHkKLQkJ CSAqIGZvciBhIHVuaXF1ZW5lc3MgY2hlY2sgb24gdGhlIHdob2xlIEhPVC1jaGFpbi4gIFRoYXQg aXMsIHRoZQotCQkJICogdHVwbGUgd2UgaGF2ZSBoZXJlIGNvdWxkIGJlIGRlYWQgYmVjYXVzZSBp dCB3YXMgYWxyZWFkeQotCQkJICogSE9ULXVwZGF0ZWQsIGFuZCBpZiBzbyB0aGUgdXBkYXRpbmcg dHJhbnNhY3Rpb24gd2lsbCBub3QgaGF2ZQotCQkJICogdGhvdWdodCBpdCBzaG91bGQgaW5zZXJ0 IGluZGV4IGVudHJpZXMuICBUaGUgaW5kZXggQU0gd2lsbAotCQkJICogY2hlY2sgdGhlIHdob2xl IEhPVC1jaGFpbiBhbmQgY29ycmVjdGx5IGRldGVjdCBhIGNvbmZsaWN0IGlmCi0JCQkgKiB0aGVy ZSBpcyBvbmUuCi0JCQkgKi8KLQotCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sCi0JCQkJ CQkgdmFsdWVzLAotCQkJCQkJIGlzbnVsbCwKLQkJCQkJCSAmcm9vdFR1cGxlLAotCQkJCQkJIGhl YXBSZWxhdGlvbiwKLQkJCQkJCSBpbmRleEluZm8tPmlpX1VuaXF1ZSA/Ci0JCQkJCQkgVU5JUVVF X0NIRUNLX1lFUyA6IFVOSVFVRV9DSEVDS19OTywKLQkJCQkJCSBmYWxzZSwKLQkJCQkJCSBpbmRl eEluZm8pOwotCi0JCQlzdGF0ZS0+dHVwc19pbnNlcnRlZCArPSAxOwotCQl9CisJCVJlbGVhc2VC dWZmZXIoYnVmKTsKIAl9CiAKLQl0YWJsZV9lbmRzY2FuKHNjYW4pOwotCiAJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAogCUZyZWVFeGVjdXRvclN0YXRlKGVzdGF0ZSk7CiAK KwlyZWFkX3N0cmVhbV9lbmQocmVhZF9zdHJlYW0pOworCXR1cGxlc3RvcmVfZW5kKHR1cGxlc19m b3JfY2hlY2spOworCiAJLyogVGhlc2UgbWF5IGhhdmUgYmVlbiBwb2ludGluZyB0byB0aGUgbm93 LWdvbmUgZXN0YXRlICovCiAJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOwog CWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4 IDhlNTA5YTUxYzExLi42YTRiMzQ4ZGQxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtNzE0LDExICs3 MTQsMTYgQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhvaWQsCiAgKgkJCWFscmVhZHkg ZXhpc3RzLgogICoJCUlOREVYX0NSRUFURV9QQVJUSVRJT05FRDoKICAqCQkJY3JlYXRlIGEgcGFy dGl0aW9uZWQgaW5kZXggKHRhYmxlIG11c3QgYmUgcGFydGl0aW9uZWQpCisgKgkJSU5ERVhfQ1JF QVRFX0FVWElMSUFSWToKKyAqCQkJbWFyayBpbmRleCBhcyBhdXhpbGlhcnkgaW5kZXgKICAqIGNv bnN0cl9mbGFnczogZmxhZ3MgcGFzc2VkIHRvIGluZGV4X2NvbnN0cmFpbnRfY3JlYXRlCiAgKgkJ KG9ubHkgaWYgSU5ERVhfQ1JFQVRFX0FERF9DT05TVFJBSU5UIGlzIHNldCkKICAqIGFsbG93X3N5 c3RlbV90YWJsZV9tb2RzOiBhbGxvdyB0YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nCiAgKiBp c19pbnRlcm5hbDogaWYgdHJ1ZSwgcG9zdCBjcmVhdGlvbiBob29rIGZvciBuZXcgaW5kZXgKICAq IGNvbnN0cmFpbnRJZDogaWYgbm90IE5VTEwsIHJlY2VpdmVzIE9JRCBvZiBjcmVhdGVkIGNvbnN0 cmFpbnQKKyAqIHJlbHBlcnNpc3RlbmNlOiBwZXJzaXN0ZW5jZSBsZXZlbCB0byB1c2UgZm9yIGlu ZGV4LiBJbiBtb3N0IG9mIHRoZQorICoJCWNhc2VzIGl0IGlzIHNob3VsZCBiZSBlcXVhbCB0byBw ZXJzaXN0ZW5jZSBsZXZlbCBvZiB0YWJsZSwKKyAqCQlhdXhpbGlhcnkgaW5kZXhlcyBhcmUgb25s eSBleGNlcHRpb24gaGVyZS4KICAqCiAgKiBSZXR1cm5zIHRoZSBPSUQgb2YgdGhlIGNyZWF0ZWQg aW5kZXguCiAgKi8KQEAgLTc1OSw2ICs3NjQsNyBAQCBpbmRleF9jcmVhdGUoUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogCWJvb2wJCWludmFsaWQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVfSU5WQUxJ RCkgIT0gMDsKIAlib29sCQljb25jdXJyZW50ID0gKGZsYWdzICYgSU5ERVhfQ1JFQVRFX0NPTkNV UlJFTlQpICE9IDA7CiAJYm9vbAkJcGFydGl0aW9uZWQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVf UEFSVElUSU9ORUQpICE9IDA7CisJYm9vbAkJYXV4aWxpYXJ5ID0gKGZsYWdzICYgSU5ERVhfQ1JF QVRFX0FVWElMSUFSWSkgIT0gMDsKIAljaGFyCQlyZWxraW5kOwogCVRyYW5zYWN0aW9uSWQgcmVs ZnJvemVueGlkOwogCU11bHRpWGFjdElkIHJlbG1pbm14aWQ7CkBAIC03ODQsNyArNzkwLDEwIEBA IGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJbmFtZXNwYWNlSWQgPSBSZWxh dGlvbkdldE5hbWVzcGFjZShoZWFwUmVsYXRpb24pOwogCXNoYXJlZF9yZWxhdGlvbiA9IGhlYXBS ZWxhdGlvbi0+cmRfcmVsLT5yZWxpc3NoYXJlZDsKIAltYXBwZWRfcmVsYXRpb24gPSBSZWxhdGlv bklzTWFwcGVkKGhlYXBSZWxhdGlvbik7Ci0JcmVscGVyc2lzdGVuY2UgPSBoZWFwUmVsYXRpb24t PnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CisJaWYgKGF1eGlsaWFyeSkKKwkJcmVscGVyc2lzdGVu Y2UgPSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDsgLyogYXV4IGluZGV4ZXMgYXJlIGFsd2F5cyB1 bmxvZ2dlZCAqLworCWVsc2UKKwkJcmVscGVyc2lzdGVuY2UgPSBoZWFwUmVsYXRpb24tPnJkX3Jl bC0+cmVscGVyc2lzdGVuY2U7CiAKIAkvKgogCSAqIGNoZWNrIHBhcmFtZXRlcnMKQEAgLTc5Miw2 ICs4MDEsMTEgQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoaW5k ZXhJbmZvLT5paV9OdW1JbmRleEF0dHJzIDwgMSkKIAkJZWxvZyhFUlJPUiwgIm11c3QgaW5kZXgg YXQgbGVhc3Qgb25lIGNvbHVtbiIpOwogCisJaWYgKGluZGV4SW5mby0+aWlfQW0gPT0gU1RJUl9B TV9PSUQgJiYgIWF1eGlsaWFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygidXNlci1kZWZpbmVkIGlu ZGV4ZXMgd2l0aCBTVElSIGFjY2VzcyBtZXRob2QgYXJlIG5vdCBzdXBwb3J0ZWQiKSkpOworCiAJ aWYgKCFhbGxvd19zeXN0ZW1fdGFibGVfbW9kcyAmJgogCQlJc1N5c3RlbVJlbGF0aW9uKGhlYXBS ZWxhdGlvbikgJiYKIAkJSXNOb3JtYWxQcm9jZXNzaW5nTW9kZSgpKQpAQCAtMTM5Nyw3ICsxNDEx LDggQEAgaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlv biwgT2lkIG9sZEluZGV4SWQsCiAJCQkJCQkJZmFsc2UsCS8qIG5vdCByZWFkeSBmb3IgaW5zZXJ0 cyAqLwogCQkJCQkJCXRydWUsCiAJCQkJCQkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtc3Vt bWFyaXppbmcsCi0JCQkJCQkJb2xkSW5mby0+aWlfV2l0aG91dE92ZXJsYXBzKTsKKwkJCQkJCQlv bGRJbmZvLT5paV9XaXRob3V0T3ZlcmxhcHMsCisJCQkJCQkJZmFsc2UpOwogCiAJLyoKIAkgKiBF eHRyYWN0IHRoZSBsaXN0IG9mIGNvbHVtbiBuYW1lcyBhbmQgdGhlIGNvbHVtbiBudW1iZXJzIGZv ciB0aGUgbmV3CkBAIC0xNDcyLDYgKzE0ODcsMTU0IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVh dGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBvbGRJbmRleElkLAogCXJldHVybiBu ZXdJbmRleElkOwogfQogCisvKgorICogaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgKKyAq CisgKiBDcmVhdGUgY29uY3VycmVudGx5IGFuIGF1eGlsaWFyeSBpbmRleCBiYXNlZCBvbiB0aGUg ZGVmaW5pdGlvbiBvZiB0aGUgb25lCisgKiBwcm92aWRlZCBieSBjYWxsZXIuICBUaGUgaW5kZXgg aXMgaW5zZXJ0ZWQgaW50byBjYXRhbG9ncyBhbmQgbmVlZHMgdG8gYmUKKyAqIGJ1aWx0IGxhdGVy IG9uLiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgY29uY3VycmVudCByZWluZGV4IHByb2Nlc3Npbmcu CisgKgorICogInRhYmxlc3BhY2VPaWQiIGlzIHRoZSB0YWJsZXNwYWNlIHRvIHVzZSBmb3IgdGhp cyBpbmRleC4KKyAqLworT2lkCitpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxhdGlv biBoZWFwUmVsYXRpb24sIE9pZCBtYWluSW5kZXhJZCwKKwkJCQkJCQkgICBPaWQgdGFibGVzcGFj ZU9pZCwgY29uc3QgY2hhciAqbmV3TmFtZSkKK3sKKwlSZWxhdGlvbglpbmRleFJlbGF0aW9uOwor CUluZGV4SW5mbyAgKm9sZEluZm8sCisJCQkqbmV3SW5mbzsKKwlPaWQJCQluZXdJbmRleElkID0g SW52YWxpZE9pZDsKKwlIZWFwVHVwbGUJaW5kZXhUdXBsZTsKKworCUxpc3QJICAgKmluZGV4Q29s TmFtZXMgPSBOSUw7CisJTGlzdAkgICAqaW5kZXhFeHBycyA9IE5JTDsKKwlMaXN0CSAgICppbmRl eFByZWRzID0gTklMOworCisJT2lkICphdXhPcGNsYXNzSWRzOworCWludDE2ICphdXhDb2xvcHRp b25zOworCisJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4obWFpbkluZGV4SWQsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJLyogVGhlIG5ldyBpbmRleCBuZWVkcyBzb21lIGluZm9ybWF0aW9uIGZy b20gdGhlIG9sZCBpbmRleCAqLworCW9sZEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleFJlbGF0 aW9uKTsKKworCS8qCisJICogQnVpbGQgb2YgYW4gYXV4aWxpYXJ5IGluZGV4IHdpdGggZXhjbHVz aW9uIGNvbnN0cmFpbnRzIGlzIG5vdAorCSAqIHN1cHBvcnRlZC4KKwkgKi8KKwlpZiAob2xkSW5m by0+aWlfRXhjbHVzaW9uT3BzICE9IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJZXJybXNnKCJhdXhpbGlh cnkgaW5kZXggY3JlYXRpb24gZm9yIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3Qgc3VwcG9y dGVkIikpKTsKKworCS8qIEdldCB0aGUgYXJyYXkgb2YgY2xhc3MgYW5kIGNvbHVtbiBvcHRpb25z IElEcyBmcm9tIGluZGV4IGluZm8gKi8KKwlpbmRleFR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKElO REVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0obWFpbkluZGV4SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoaW5kZXhUdXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBpbmRleCAldSIsIG1haW5JbmRleElkKTsKKworCisJLyoKKwkgKiBGZXRjaCB0aGUgbGlz dCBvZiBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcyBkaXJlY3RseSBmcm9tIHRoZQorCSAqIGNh dGFsb2dzLiAgVGhpcyBjYW5ub3QgcmVseSBvbiB0aGUgaW5mb3JtYXRpb24gZnJvbSBJbmRleElu Zm8gb2YgdGhlCisJICogb2xkIGluZGV4IGFzIHRoZXNlIGhhdmUgYmVlbiBmbGF0dGVuZWQgZm9y IHRoZSBwbGFubmVyLgorCSAqLworCWlmIChvbGRJbmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwp CisJeworCQlEYXR1bQkJZXhwckRhdHVtOworCQljaGFyCSAgICpleHByU3RyaW5nOworCisJCWV4 cHJEYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoSU5ERVhSRUxJRCwgaW5kZXhUdXBsZSwK KwkJCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2luZGV4cHJzKTsKKwkJZXhwclN0cmluZyA9IFRl eHREYXR1bUdldENTdHJpbmcoZXhwckRhdHVtKTsKKwkJaW5kZXhFeHBycyA9IChMaXN0ICopIHN0 cmluZ1RvTm9kZShleHByU3RyaW5nKTsKKwkJcGZyZWUoZXhwclN0cmluZyk7CisJfQorCWlmIChv bGRJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKQorCXsKKwkJRGF0dW0JCXByZWREYXR1bTsKKwkJ Y2hhcgkgICAqcHJlZFN0cmluZzsKKworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3RO dWxsKElOREVYUkVMSUQsIGluZGV4VHVwbGUsCisJCQkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9p bmRwcmVkKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsK KwkJaW5kZXhQcmVkcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKworCQkv KiBBbHNvIGNvbnZlcnQgdG8gaW1wbGljaXQtQU5EIGZvcm1hdCAqLworCQlpbmRleFByZWRzID0g bWFrZV9hbmRzX2ltcGxpY2l0KChFeHByICopIGluZGV4UHJlZHMpOworCQlwZnJlZShwcmVkU3Ry aW5nKTsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBpbmRleCBpbmZvcm1hdGlvbiBmb3IgdGhl IG5ldyBpbmRleC4gIE5vdGUgdGhhdCByZWJ1aWxkIG9mCisJICogaW5kZXhlcyB3aXRoIGV4Y2x1 c2lvbiBjb25zdHJhaW50cyBpcyBub3Qgc3VwcG9ydGVkLCBoZW5jZSB0aGVyZSBpcyBubworCSAq IG5lZWQgdG8gZmlsbCBhbGwgdGhlIGlpX0V4Y2x1c2lvbiogZmllbGRzLgorCSAqLworCW5ld0lu Zm8gPSBtYWtlSW5kZXhJbmZvKG9sZEluZm8tPmlpX051bUluZGV4QXR0cnMsCisJCQkJCQkJb2xk SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRycywKKwkJCQkJCQlTVElSX0FNX09JRCwgLyogc3BlY2lh bCBBTSBmb3IgYXV4IGluZGV4ZXMgKi8KKwkJCQkJCQlpbmRleEV4cHJzLAorCQkJCQkJCWluZGV4 UHJlZHMsCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBpbmRleCBhcmUgbm90IHVuaXF1ZSAqLworCQkJ CQkJCW9sZEluZm8tPmlpX051bGxzTm90RGlzdGluY3QsCisJCQkJCQkJZmFsc2UsCS8qIG5vdCBy ZWFkeSBmb3IgaW5zZXJ0cyAqLworCQkJCQkJCXRydWUsCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBh cmUgbm90IHN1bW1hcml6aW5nICovCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHdpdGhv dXQgb3ZlcmxhcHMgKi8KKwkJCQkJCQl0cnVlCS8qIGF1eGlsaWFyeSAqLyk7CisKKwkvKgorCSAq IEV4dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMg Zm9yIHRoZSBuZXcKKwkgKiBpbmRleCBpbmZvcm1hdGlvbi4gIEFsbCB0aGlzIGluZm9ybWF0aW9u IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGluZGV4CisJICogY3JlYXRpb24uCisJICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBvbGRJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCisJeworCQlUdXBs ZURlc2MJaW5kZXhUdXBEZXNjID0gUmVsYXRpb25HZXREZXNjcihpbmRleFJlbGF0aW9uKTsKKwkJ Rm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cihpbmRleFR1cERlc2MsIGkpOwor CisJCWluZGV4Q29sTmFtZXMgPSBsYXBwZW5kKGluZGV4Q29sTmFtZXMsIE5hbWVTdHIoYXR0LT5h dHRuYW1lKSk7CisJCW5ld0luZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV0gPSBvbGRJbmZvLT5p aV9JbmRleEF0dHJOdW1iZXJzW2ldOworCX0KKworCWF1eE9wY2xhc3NJZHMgPSBwYWxsb2MwKHNp emVvZihPaWQpICogbmV3SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJYXV4Q29sb3B0aW9ucyA9 IHBhbGxvYzAoc2l6ZW9mKGludDE2KSAqIG5ld0luZm8tPmlpX051bUluZGV4QXR0cnMpOworCisJ LyogRmlsbCB3aXRoICJhbnkgb3BzIiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbmV3SW5mby0+ aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCXsKKwkJYXV4T3BjbGFzc0lkc1tpXSA9IEFOWV9TVElS X09QU19PSUQ7CisJCWF1eENvbG9wdGlvbnNbaV0gPSAwOworCX0KKworCW5ld0luZGV4SWQgPSBp bmRleF9jcmVhdGUoaGVhcFJlbGF0aW9uLAorCQkJCQkJCSAgbmV3TmFtZSwKKwkJCQkJCQkgIElu dmFsaWRPaWQsICAgIC8qIGluZGV4UmVsYXRpb25JZCAqLworCQkJCQkJCSAgSW52YWxpZE9pZCwg ICAgLyogcGFyZW50SW5kZXhSZWxpZCAqLworCQkJCQkJCSAgSW52YWxpZE9pZCwgICAgLyogcGFy ZW50Q29uc3RyYWludElkICovCisJCQkJCQkJICBJbnZhbGlkUmVsRmlsZU51bWJlciwgLyogcmVs RmlsZU51bWJlciAqLworCQkJCQkJCSAgbmV3SW5mbywKKwkJCQkJCQkgIGluZGV4Q29sTmFtZXMs CisJCQkJCQkJICBTVElSX0FNX09JRCwKKwkJCQkJCQkgIHRhYmxlc3BhY2VPaWQsCisJCQkJCQkJ ICBpbmRleFJlbGF0aW9uLT5yZF9pbmRjb2xsYXRpb24sCisJCQkJCQkJICBhdXhPcGNsYXNzSWRz LAorCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkgIGF1eENvbG9wdGlvbnMsCisJCQkJCQkJICBOVUxM LAorCQkJCQkJCSAgKERhdHVtKSAwLAorCQkJCQkJCSAgSU5ERVhfQ1JFQVRFX1NLSVBfQlVJTEQg fCBJTkRFWF9DUkVBVEVfQ09OQ1VSUkVOVCB8IElOREVYX0NSRUFURV9BVVhJTElBUlksCisJCQkJ CQkJICAwLAorCQkJCQkJCSAgdHJ1ZSwgLyogYWxsb3cgdGFibGUgdG8gYmUgYSBzeXN0ZW0gY2F0 YWxvZz8gKi8KKwkJCQkJCQkgIGZhbHNlLCAgICAvKiBpc19pbnRlcm5hbD8gKi8KKwkJCQkJCQkg IE5VTEwpOworCisJLyogQ2xvc2UgdGhlIHJlbGF0aW9ucyB1c2VkIGFuZCBjbGVhbiB1cCAqLwor CWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CisJUmVsZWFzZVN5c0NhY2hlKGlu ZGV4VHVwbGUpOworCisJcmV0dXJuIG5ld0luZGV4SWQ7Cit9CisKIC8qCiAgKiBpbmRleF9jb25j dXJyZW50bHlfYnVpbGQKICAqCkBAIC0yNDUyLDcgKzI2MTUsOCBAQCBCdWlsZEluZGV4SW5mbyhS ZWxhdGlvbiBpbmRleCkKIAkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzcmVhZHksCiAJCQkJCSAg IGZhbHNlLAogCQkJCQkgICBpbmRleC0+cmRfaW5kYW0tPmFtc3VtbWFyaXppbmcsCi0JCQkJCSAg IGluZGV4U3RydWN0LT5pbmRpc2V4Y2x1c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUp OworCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmlu ZGlzdW5pcXVlLAorCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAv KiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVy cyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1BdHRzOyBpKyspCkBAIC0yNTEyLDcgKzI2NzYsOCBA QCBCdWlsZER1bW15SW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJCQkgICBpbmRleFN0cnVj dC0+aW5kaXNyZWFkeSwKIAkJCQkJICAgZmFsc2UsCiAJCQkJCSAgIGluZGV4LT5yZF9pbmRhbS0+ YW1zdW1tYXJpemluZywKLQkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uICYmIGlu ZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSk7CisJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRpc2V4Y2x1 c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUsCisJCQkJCSAgIGluZGV4LT5yZF9yZWwt PnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBpZmYgU1RJUiAqLyk7CiAKIAkvKiBm aWxsIGluIGF0dHJpYnV0ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaSA8IG51bUF0dHM7IGkr KykKQEAgLTMyODgsMTIgKzM0NTMsMjEgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiAgKgogICogV2UgZG8gYSBjb25jdXJyZW50IGluZGV4IGJ1aWxkIGJ5IGZp cnN0IGluc2VydGluZyB0aGUgY2F0YWxvZyBlbnRyeSBmb3IgdGhlCiAgKiBpbmRleCB2aWEgaW5k ZXhfY3JlYXRlKCksIG1hcmtpbmcgaXQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3ZhbGlk LgorICogVGhlbiB3ZSBjcmVhdGUgc3BlY2lhbCBhdXhpbGlhcnkgaW5kZXggdGhlIHNhbWUgd2F5 LiBJdCBiYXNlZCBvbiBTVElSIEFNLgogICogVGhlbiB3ZSBjb21taXQgb3VyIHRyYW5zYWN0aW9u IGFuZCBzdGFydCBhIG5ldyBvbmUsIHRoZW4gd2Ugd2FpdCBmb3IgYWxsCiAgKiB0cmFuc2FjdGlv bnMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gbW9kaWZ5aW5nIHRoZSB0YWJsZSB0byB0ZXJtaW5hdGUu ICBOb3cKLSAqIHdlIGtub3cgdGhhdCBhbnkgc3Vic2VxdWVudGx5LXN0YXJ0ZWQgdHJhbnNhY3Rp b25zIHdpbGwgc2VlIHRoZSBpbmRleCBhbmQKKyAqIHdlIGtub3cgdGhhdCBhbnkgc3Vic2VxdWVu dGx5LXN0YXJ0ZWQgdHJhbnNhY3Rpb25zIHdpbGwgc2VlIGluZGV4ZXMgYW5kCiAgKiBob25vciBp dHMgY29uc3RyYWludHMgb24gSE9UIHVwZGF0ZXM7IHNvIHdoaWxlIGV4aXN0aW5nIEhPVC1jaGFp bnMgbWlnaHQKICAqIGJlIGJyb2tlbiB3aXRoIHJlc3BlY3QgdG8gdGhlIGluZGV4LCBubyBjdXJy ZW50bHkgbGl2ZSB0dXBsZSB3aWxsIGhhdmUgYW4KLSAqIGluY29tcGF0aWJsZSBIT1QgdXBkYXRl IGRvbmUgdG8gaXQuICBXZSBub3cgYnVpbGQgdGhlIGluZGV4IG5vcm1hbGx5IHZpYQorICogaW5j b21wYXRpYmxlIEhPVCB1cGRhdGUgZG9uZSB0byBpdC4KKyAqCisgKiBBZnRlciB3ZSBidWlsZCBh dXhpbGlhcnkgaW5kZXguIEl0IGlzIGZhc3Qgb3BlcmF0aW9uIHdpdGhvdXQgYW55IGFjdHVhbAor ICogdGFibGUgc2Nhbi4gQXMgcmVzdWx0LCB3ZSBoYXZlIGVtcHR5IFNUSVIgaW5kZXguIFdlIGNv bW1pdCB0cmFuc2FjdGlvbiBhbmQKKyAqIGFnYWluIHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbnMg dGhhdCBjb3VsZCBoYXZlIGJlZW4gbW9kaWZ5aW5nIHRoZSB0YWJsZQorICogdG8gdGVybWluYXRl LiBBdCB0aGF0IG1vbWVudCBhbGwgbmV3IHR1cGxlcyBhcmUgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQg aW50bworICogYXV4aWxpYXJ5IGluZGV4LgorICoKKyAqIFdlIG5vdyBidWlsZCB0aGUgaW5kZXgg bm9ybWFsbHkgdmlhCiAgKiBpbmRleF9idWlsZCgpLCB3aGlsZSBob2xkaW5nIGEgd2VhayBsb2Nr IHRoYXQgYWxsb3dzIGNvbmN1cnJlbnQKICAqIGluc2VydC91cGRhdGUvZGVsZXRlLiAgQWxzbywg d2UgaW5kZXggb25seSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQKICAqIGFzIG9mIHRoZSBzdGFydCBv ZiB0aGUgc2NhbiAoc2VlIHRhYmxlX2luZGV4X2J1aWxkX3NjYW4pLCB3aGVyZWFzIGEgbm9ybWFs CkBAIC0zMzAzLDE0ICszNDc3LDE3IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogICogYm9ndXMgdW5pcXVlLWluZGV4IGZhaWx1cmVzIGR1ZSB0byBjb25jdXJy ZW50IFVQREFURXMgKHdlIG1pZ2h0IHNlZQogICogZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBz YW1lIHJvdyBhcyBiZWluZyB2YWxpZCB3aGVuIHdlIHBhc3Mgb3ZlciB0aGVtLAogICogaWYgd2Ug dXNlZCBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0pLiAgVGhpcyBsZWF2ZXMgdXMgd2l0aCBhbiBp bmRleCB0aGF0Ci0gKiBkb2VzIG5vdCBjb250YWluIGFueSB0dXBsZXMgYWRkZWQgdG8gdGhlIHRh YmxlIHdoaWxlIHdlIGJ1aWx0IHRoZSBpbmRleC4KKyAqIGRvZXMgbm90IGNvbnRhaW4gYW55IHR1 cGxlcyBhZGRlZCB0byB0aGUgdGFibGUgd2hpbGUgd2UgYnVpbHQgdGhlIGluZGV4CisgKiAoYnV0 IHRoZXNlIHR1cGxlcyBjb250YWluZWQgaW4gYXV4aWxpYXJ5IGluZGV4KS4KICAqCiAgKiBOZXh0 LCB3ZSBtYXJrIHRoZSBpbmRleCAiaW5kaXNyZWFkeSIgKGJ1dCBzdGlsbCBub3QgImluZGlzdmFs aWQiKSBhbmQKLSAqIGNvbW1pdCB0aGUgc2Vjb25kIHRyYW5zYWN0aW9uIGFuZCBzdGFydCBhIHRo aXJkLiAgQWdhaW4gd2Ugd2FpdCBmb3IgYWxsCisgKiBjb21taXQgdGhlIHRoaXJkIHRyYW5zYWN0 aW9uIGFuZCBzdGFydCBhIGZvdXJ0aC4gIEFnYWluIHdlIHdhaXQgZm9yIGFsbAogICogdHJhbnNh Y3Rpb25zIHRoYXQgY291bGQgaGF2ZSBiZWVuIG1vZGlmeWluZyB0aGUgdGFibGUgdG8gdGVybWlu YXRlLiAgTm93CiAgKiB3ZSBrbm93IHRoYXQgYW55IHN1YnNlcXVlbnRseS1zdGFydGVkIHRyYW5z YWN0aW9ucyB3aWxsIHNlZSB0aGUgaW5kZXggYW5kCi0gKiBpbnNlcnQgdGhlaXIgbmV3IHR1cGxl cyBpbnRvIGl0LiAgV2UgdGhlbiB0YWtlIGEgbmV3IHJlZmVyZW5jZSBzbmFwc2hvdAotICogd2hp Y2ggaXMgcGFzc2VkIHRvIHZhbGlkYXRlX2luZGV4KCkuICBBbnkgdHVwbGVzIHRoYXQgYXJlIHZh bGlkIGFjY29yZGluZworICogaW5zZXJ0IHRoZWlyIG5ldyB0dXBsZXMgaW50byBpdC4gQXQgdGhl IHNhbWUgbW9tZW50IHdlIGNsZWFyICJpbmRpc3JlYWR5IiBmb3IKKyAqIGF1eGlsaWFyeSBpbmRl eCwgc2luY2UgaXQgaXMgbm8gbW9yZSByZXF1aXJlZCB0byBiZSB1cGRhdGVkLgorICoKKyAqIFdl IHRoZW4gdGFrZSBhIG5ldyByZWZlcmVuY2Ugc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUg dmFsaWQgYWNjb3JkaW5nCiAgKiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRl eCwgbXVzdCBiZSBhZGRlZCB0byB0aGUgaW5kZXguCiAgKiAoQW55IHR1cGxlcyBjb21taXR0ZWQg bGl2ZSBhZnRlciB0aGUgc25hcCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlCiAgKiBpbmRleCBi eSB0aGVpciBvcmlnaW5hdGluZyB0cmFuc2FjdGlvbi4gIEFueSB0dXBsZXMgY29tbWl0dGVkIGRl YWQgYmVmb3JlCkBAIC0zMzE4LDEyICszNDk1LDE0IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogICogdGhhdCBtaWdodCBjYXJlIGFib3V0IHRoZW0gYmVmb3Jl IHdlIG1hcmsgdGhlIGluZGV4IHZhbGlkLikKICAqCiAgKiB2YWxpZGF0ZV9pbmRleCgpIHdvcmtz IGJ5IGZpcnN0IGdhdGhlcmluZyBhbGwgdGhlIFRJRHMgY3VycmVudGx5IGluIHRoZQotICogaW5k ZXgsIHVzaW5nIGEgYnVsa2RlbGV0ZSBjYWxsYmFjayB0aGF0IGp1c3Qgc3RvcmVzIHRoZSBUSURz IGFuZCBkb2Vzbid0CisgKiBpbmRleGVzLCB1c2luZyBhIGJ1bGtkZWxldGUgY2FsbGJhY2sgdGhh dCBqdXN0IHN0b3JlcyB0aGUgVElEcyBhbmQgZG9lc24ndAogICogZXZlciBzYXkgImRlbGV0ZSBp dCIuICAoVGhpcyBzaG91bGQgYmUgZmFzdGVyIHRoYW4gYSBwbGFpbiBpbmRleHNjYW47CiAgKiBh bHNvLCBub3QgYWxsIGluZGV4IEFNcyBzdXBwb3J0IGZ1bGwtaW5kZXggaW5kZXhzY2FuLikgIFRo ZW4gd2Ugc29ydCB0aGUKLSAqIFRJRHMsIGFuZCBmaW5hbGx5IHNjYW4gdGhlIHRhYmxlIGRvaW5n IGEgIm1lcmdlIGpvaW4iIGFnYWluc3QgdGhlIFRJRCBsaXN0Ci0gKiB0byBzZWUgd2hpY2ggdHVw bGVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0 Ci0gKiBhbGwgdHVwbGVzIHZhbGlkIGFjY29yZGluZyB0byB0aGUgcmVmZXJlbmNlIHNuYXBzaG90 IGFyZSBpbiB0aGUgaW5kZXguCisgKiBUSURzIG9mIGJvdGggYXV4aWxpYXJ5IGFuZCB0YXJnZXQg aW5kZXhlcywgYW5kIGRvaW5nIGEgIm1lcmdlIGpvaW4iIGFnYWluc3QKKyAqIHRoZSBUSUQgbGlz dHMgdG8gc2VlIHdoaWNoIHR1cGxlcyBmcm9tIGF1eGlsaWFyeSBpbmRleCBhcmUgbWlzc2luZyBm cm9tIHRoZQorICogdGFyZ2V0IGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0 dXBsZXMgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZQorICogcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBp biB0aGUgaW5kZXguIE5vdGljZSB3ZSBuZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCisgKiBw YXJ0aWN1bGFyIG9yZGVyOiBhdXhpbGlhcnkgZmlyc3QsIHRhcmdldCBsYXN0LgogICoKICAqIEJ1 aWxkaW5nIGEgdW5pcXVlIGluZGV4IHRoaXMgd2F5IGlzIHRyaWNreTogd2UgbWlnaHQgdHJ5IHRv IGluc2VydCBhCiAgKiB0dXBsZSB0aGF0IGlzIGFscmVhZHkgZGVhZCBvciBpcyBpbiBwcm9jZXNz IG9mIGJlaW5nIGRlbGV0ZWQsIGFuZCB3ZQpAQCAtMzM0MSwyMiArMzUyMCwyNiBAQCBJbmRleENo ZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqIG5vdCBpbmRleCkuICBUaGVu IHdlIG1hcmsgdGhlIGluZGV4ICJpbmRpc3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVudAog ICogdHJhbnNhY3Rpb25zIHdpbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAgKgot ICogRG9pbmcgdHdvIGZ1bGwgdGFibGUgc2NhbnMgaXMgYSBicnV0ZS1mb3JjZSBzdHJhdGVneS4g IFdlIGNvdWxkIHRyeSB0byBiZQotICogY2xldmVyZXIsIGVnIHN0b3JpbmcgbmV3IHR1cGxlcyBp biBhIHNwZWNpYWwgYXJlYSBvZiB0aGUgdGFibGUgKHBlcmhhcHMKLSAqIG1ha2luZyB0aGUgdGFi bGUgYXBwZW5kLW9ubHkgYnkgc2V0dGluZyB1c2VfZnNtKS4gIEhvd2V2ZXIgdGhhdCB3b3VsZAot ICogYWRkIHlldCBtb3JlIGxvY2tpbmcgaXNzdWVzLgorICogQWxzbywgc29tZSBhY3Rpb25zIHRv IGNvbmN1cnJlbnQgZHJvcCB0aGUgYXV4aWxpYXJ5IGluZGV4IGFyZSBwZXJmb3JtZWQuCiAgKi8K IHZvaWQKLXZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBz bmFwc2hvdCkKK3ZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4 SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiB7CiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uLAot CQkJCWluZGV4UmVsYXRpb247CisJCQkJaW5kZXhSZWxhdGlvbiwKKwkJCQlhdXhJbmRleFJlbGF0 aW9uOwogCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKLQlJbmRleFZhY3V1bUluZm8gaXZpbmZvOwot CVZhbGlkYXRlSW5kZXhTdGF0ZSBzdGF0ZTsKKwlJbmRleFZhY3V1bUluZm8gaXZpbmZvLCBhdXhp dmluZm87CisJVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRlLCBhdXhTdGF0ZTsKIAlPaWQJCQlzYXZl X3VzZXJpZDsKIAlpbnQJCQlzYXZlX3NlY19jb250ZXh0OwogCWludAkJCXNhdmVfbmVzdGxldmVs OworCS8qIFVzZSA4MCUgb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gdG8gdGFyZ2V0IGluZGV4IHNv cnRpbmcgYW5kCisJICogMTAlIHJlc3QgZm9yIGF1eGlsaWFyeS4KKwkgKgorCSAqIFJlc3QgMTAl IHdpbGwgYmUgdXNlZCBmb3IgdHVwbGVzdG9yZSBsYXRlci4gKi8KKwlpbnQ2NAkJbWFpbl93b3Jr X21lbV9wYXJ0ID0gKGludDY0KSBtYWludGVuYW5jZV93b3JrX21lbSAqIDggLyAxMDsKKwlpbnQJ CQlhdXhfd29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CiAKIAl7CiAJ CWNvbnN0IGludAlwcm9ncmVzc19pbmRleFtdID0gewpAQCAtMzM4OSw2ICszNTcyLDcgQEAgdmFs aWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQog CVJlc3RyaWN0U2VhcmNoUGF0aCgpOwogCiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaW5k ZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7CisJYXV4SW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4o YXV4SW5kZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAkvKgogCSAqIEZldGNoIGluZm8gbmVl ZGVkIGZvciBpbmRleF9pbnNlcnQuICAoWW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCkBA IC0zNDEzLDE1ICszNTk3LDU1IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRl eElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAlpdmluZm8uc3RyYXRlZ3kgPSBOVUxMOwogCWl2aW5m by52YWxpZGF0ZV9pbmRleCA9IHRydWU7CiAKKwkvKgorCSAqIENvcHkgYWxsIGluZm8gdG8gYXV4 aWxpYXJ5IGluZm8sIGNoYW5naW5nIG9ubHkgcmVsYXRpb24uCisJICovCisJYXV4aXZpbmZvID0g aXZpbmZvOworCWF1eGl2aW5mby5pbmRleCA9IGF1eEluZGV4UmVsYXRpb247CisKIAkvKgogCSAq IEVuY29kZSBUSURzIGFzIGludDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGly ZWN0bHkgc29ydGluZwogCSAqIGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2Fu dGx5IGZhc3RlciwgcHJpbWFyaWx5IGJlY2F1c2UgVElECiAJICogaXMgYSBwYXNzLWJ5LXJlZmVy ZW5jZSB0eXBlIG9uIGFsbCBwbGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcwogCSAqIHBhc3MtYnkt dmFsdWUgb24gbW9zdCBwbGF0Zm9ybXMuCiAJICovCisJYXV4U3RhdGUudHVwbGVzb3J0ID0gdHVw bGVzb3J0X2JlZ2luX2RhdHVtKElOVDhPSUQsIEludDhMZXNzT3BlcmF0b3IsCisJCQkJCQkJCQkJ ICAgSW52YWxpZE9pZCwgZmFsc2UsCisJCQkJCQkJCQkJICAgYXV4X3dvcmtfbWVtX3BhcnQsCisJ CQkJCQkJCQkJICAgTlVMTCwgVFVQTEVTT1JUX05PTkUpOworCWF1eFN0YXRlLmh0dXBzID0gYXV4 U3RhdGUuaXR1cHMgPSBhdXhTdGF0ZS50dXBzX2luc2VydGVkID0gMDsKKworCSh2b2lkKSBpbmRl eF9idWxrX2RlbGV0ZSgmYXV4aXZpbmZvLCBOVUxMLAorCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9j YWxsYmFjaywgJmF1eFN0YXRlKTsKKwkvKiBJZiBhdXggaW5kZXggaXMgZW1wdHksIG1lcmdlIG1h eSBiZSBza2lwcGVkICovCisJaWYgKGF1eFN0YXRlLml0dXBzID09IDApCisJeworCQl0dXBsZXNv cnRfZW5kKGF1eFN0YXRlLnR1cGxlc29ydCk7CisJCWF1eFN0YXRlLnR1cGxlc29ydCA9IE5VTEw7 CisKKwkJLyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5j dGlvbnMgKi8KKwkJQXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CisKKwkJLyog UmVzdG9yZSB1c2VyaWQgYW5kIHNlY3VyaXR5IGNvbnRleHQgKi8KKwkJU2V0VXNlcklkQW5kU2Vj Q29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4dCk7CisKKwkJLyogQ2xvc2UgcmVs cywgYnV0IGtlZXAgbG9ja3MgKi8KKwkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9M b2NrKTsKKwkJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJdGFibGVfY2xv c2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOworCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFu c2FjdGlvblNuYXBzaG90KCkpOworCQlsaW1pdFhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54 bWluOworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90 KCk7CisKKwkJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKwkJ cmV0dXJuIGxpbWl0WG1pbjsKKwl9CisKIAlzdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRfYmVn aW5fZGF0dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKIAkJCQkJCQkJCQkJSW52YWxpZE9p ZCwgZmFsc2UsCi0JCQkJCQkJCQkJCW1haW50ZW5hbmNlX3dvcmtfbWVtLAorCQkJCQkJCQkJCQko aW50KSBtYWluX3dvcmtfbWVtX3BhcnQsCiAJCQkJCQkJCQkJCU5VTEwsIFRVUExFU09SVF9OT05F KTsKIAlzdGF0ZS5odHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUudHVwc19pbnNlcnRlZCA9IDA7 CiAKQEAgLTM0NDQsMjcgKzM2NjgsMzAgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lk IGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211 bHRpX3BhcmFtKDMsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVzc192YWxzKTsKIAl9CiAJdHVwbGVz b3J0X3BlcmZvcm1zb3J0KHN0YXRlLnR1cGxlc29ydCk7CisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0 KGF1eFN0YXRlLnR1cGxlc29ydCk7CiAKIAkvKgotCSAqIE5vdyBzY2FuIHRoZSBoZWFwIGFuZCAi bWVyZ2UiIGl0IHdpdGggdGhlIGluZGV4CisJICogTm93IG1lcmdlIGJvdGggaW5kZXhlcwogCSAq LwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF LAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1RBQkxFU0NBTik7 CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYTUVSR0UpOwog CXRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAogCQkJCQkJCSAgaW5kZXhS ZWxhdGlvbiwKIAkJCQkJCQkgIGluZGV4SW5mbywKIAkJCQkJCQkgIHNuYXBzaG90LAotCQkJCQkJ CSAgJnN0YXRlKTsKKwkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJCQkgICZhdXhTdGF0ZSk7CiAKLQkv KiBEb25lIHdpdGggdHVwbGVzb3J0IG9iamVjdCAqLwotCXR1cGxlc29ydF9lbmQoc3RhdGUudHVw bGVzb3J0KTsKKwkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9pbmRleF92YWxpZGF0ZV9z Y2FuICovCisJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYmIGF1eFN0YXRlLnR1cGxl c29ydCA9PSBOVUxMKTsKIAogCS8qIE1ha2Ugc3VyZSB0byByZWxlYXNlIHJlc291cmNlcyBjYWNo ZWQgaW4gaW5kZXhJbmZvIChpZiBuZWVkZWQpLiAqLwogCWluZGV4X2luc2VydF9jbGVhbnVwKGlu ZGV4UmVsYXRpb24sIGluZGV4SW5mbyk7CiAKIAllbG9nKERFQlVHMiwKLQkJICJ2YWxpZGF0ZV9p bmRleCBmb3VuZCAlLjBmIGhlYXAgdHVwbGVzLCAlLjBmIGluZGV4IHR1cGxlczsgaW5zZXJ0ZWQg JS4wZiBtaXNzaW5nIHR1cGxlcyIsCi0JCSBzdGF0ZS5odHVwcywgc3RhdGUuaXR1cHMsIHN0YXRl LnR1cHNfaW5zZXJ0ZWQpOworCQkgInZhbGlkYXRlX2luZGV4IGZldGNoZWQgJS4wZiBoZWFwIHR1 cGxlcywgJS4wZiBpbmRleCB0dXBsZXM7IgorCQkJCQkJIiAlLjBmIGF1eCBpbmRleCB0dXBsZXM7 IGluc2VydGVkICUuMGYgbWlzc2luZyB0dXBsZXMiLAorCQkgc3RhdGUuaHR1cHMsIHN0YXRlLml0 dXBzLCBhdXhTdGF0ZS5pdHVwcywgc3RhdGUudHVwc19pbnNlcnRlZCk7CiAKIAkvKiBSb2xsIGJh Y2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0aW9ucyAqLwogCUF0RU9Y YWN0X0dVQyhmYWxzZSwgc2F2ZV9uZXN0bGV2ZWwpOwpAQCAtMzQ3Myw2ICszNzAwLDcgQEAgdmFs aWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQog CVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZV91c2VyaWQsIHNhdmVfc2VjX2NvbnRleHQpOwog CiAJLyogQ2xvc2UgcmVscywgYnV0IGtlZXAgbG9ja3MgKi8KKwlpbmRleF9jbG9zZShhdXhJbmRl eFJlbGF0aW9uLCBOb0xvY2spOwogCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7 CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOwogfQpAQCAtMzUzMyw2ICszNzYx LDEyIEBAIGluZGV4X3NldF9zdGF0ZV9mbGFncyhPaWQgaW5kZXhJZCwgSW5kZXhTdGF0ZUZsYWdz QWN0aW9uIGFjdGlvbikKIAkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKIAkJCWlu ZGV4Rm9ybS0+aW5kaXN2YWxpZCA9IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSBJTkRFWF9EUk9Q X0NMRUFSX1JFQURZOgorCQkJLyogQ2xlYXIgaW5kaXNyZWFkeSBkdXJpbmcgYSBDUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZIHNlcXVlbmNlICovCisJCQlBc3NlcnQoaW5kZXhGb3JtLT5pbmRpc3Jl YWR5KTsKKwkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKKwkJCWluZGV4Rm9ybS0+ aW5kaXNyZWFkeSA9IGZhbHNlOworCQkJYnJlYWs7CiAJCWNhc2UgSU5ERVhfRFJPUF9DTEVBUl9W QUxJRDoKIAogCQkJLyoKQEAgLTM4MDQsNiArNDAzOCwxMyBAQCByZWluZGV4X2luZGV4KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJaW5kZXhJbmZvLT5paV9FeGNsdXNp b25TdHJhdHMgPSBOVUxMOwogCX0KIAorCS8qIEF1eGlsaWFyeSBpbmRleGVzIGFyZSBub3QgYWxs b3dlZCB0byBiZSByZWJ1aWx0ICovCisJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KQorCQll cmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJIGVycm1zZygicmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlc1wiIG5vdCBzdXBw b3J0ZWQiLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpUmVsKSkpKTsKKwogCS8qIFN1 cHByZXNzIHVzZSBvZiB0aGUgdGFyZ2V0IGluZGV4IHdoaWxlIHJlYnVpbGRpbmcgaXQgKi8KIAlT ZXRSZWluZGV4UHJvY2Vzc2luZyhoZWFwSWQsIGluZGV4SWQpOwogCkBAIC00MDQ2LDYgKzQyODcs NyBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsaWQs IGludCBmbGFncywKIAl7CiAJCU9pZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChpbmRleElkKTsK IAkJT2lkCQkJaW5kZXhOYW1lc3BhY2VJZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4T2lkKTsK KwkJT2lkCQkJaW5kZXhBbSA9IGdldF9yZWxfcmVsYW0oaW5kZXhPaWQpOwogCiAJCS8qCiAJCSAq IFNraXAgYW55IGludmFsaWQgaW5kZXhlcyBvbiBhIFRPQVNUIHRhYmxlLiAgVGhlc2UgY2FuIG9u bHkgYmUKQEAgLTQwNzEsNiArNDMxMywxOCBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5k ZXhTdG10ICpzdG10LCBPaWQgcmVsaWQsIGludCBmbGFncywKIAkJCWNvbnRpbnVlOwogCQl9CiAK KwkJaWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJy bXNnKCJza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAorCQkJ CQkJCWdldF9uYW1lc3BhY2VfbmFtZShpbmRleE5hbWVzcGFjZUlkKSwKKwkJCQkJCQlnZXRfcmVs X25hbWUoaW5kZXhPaWQpKSkpOworCQkJaWYgKGZsYWdzICYgUkVJTkRFWF9SRUxfU1VQUFJFU1Nf SU5ERVhfVVNFKQorCQkJCVJlbW92ZVJlaW5kZXhQZW5kaW5nKGluZGV4T2lkKTsKKwkJCWNvbnRp bnVlOworCQl9CisKIAkJcmVpbmRleF9pbmRleChzdG10LCBpbmRleE9pZCwgIShmbGFncyAmIFJF SU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTKSwKIAkJCQkJICBwZXJzaXN0ZW5jZSwgcGFyYW1z KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDk1YWQyOWE2NGI5Li42 OGJjMjRiZmY2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Mu c3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTMwOCwx NiArMTMwOCwxNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRleCBB UwogICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLAogICAgICAgICBDQVNFIFMu cGFyYW0xMCBXSEVOIDAgVEhFTiAnaW5pdGlhbGl6aW5nJwogICAgICAgICAgICAgICAgICAgICAg ICBXSEVOIDEgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUgYnVpbGQnCi0gICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gMiBUSEVOICdidWlsZGluZyBpbmRleCcgfHwKKyAgICAgICAg ICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgdG8gdXNlIGF1 eGlsaWFyeSBpbmRleCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ2J1aWxk aW5nIGluZGV4JyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKCc6ICcg fHwgcGdfaW5kZXhhbV9wcm9ncmVzc19waGFzZW5hbWUoUy5wYXJhbTk6Om9pZCwgUy5wYXJhbTEx KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgICAg ICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZhbGlk YXRpb24nCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICdpbmRleCB2YWxpZGF0 aW9uOiBzY2FubmluZyBpbmRleCcKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA1IFRIRU4g J2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJwotICAgICAgICAgICAgICAgICAgICAg ICBXSEVOIDYgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcgdGFibGUnCi0gICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJwot ICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBi ZWZvcmUgbWFya2luZyBkZWFkJwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDkgVEhFTiAn d2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCisgICAgICAgICAgICAgICAgICAg ICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9uJwor ICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nh bm5pbmcgaW5kZXgnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNiBUSEVOICdpbmRleCB2 YWxpZGF0aW9uOiBzb3J0aW5nIHR1cGxlcycKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA3 IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcycKKyAgICAgICAgICAgICAg ICAgICAgICAgV0hFTiA4IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnCisgICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gOSBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBt YXJraW5nIGRlYWQnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2FpdGlu ZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIEVO RCBhcyBwaGFzZSwKICAgICAgICAgUy5wYXJhbTQgQVMgbG9ja2Vyc190b3RhbCwKICAgICAgICAg Uy5wYXJhbTUgQVMgbG9ja2Vyc19kb25lLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCA5 NzQyNDNjNWM2MC4uOWMzNDgyNWU5N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0x ODEsNiArMTgxLDcgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCQkJCQkgYm9v bCBpc1dpdGhvdXRPdmVybGFwcykKIHsKIAlib29sCQlpc2NvbnN0cmFpbnQ7CisJYm9vbAkJaXNh dXhpbGlhcnk7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAgICpjb2xsYXRpb25JZHM7CiAJ T2lkCQkgICAqb3BjbGFzc0lkczsKQEAgLTIzMSw2ICsyMzIsNyBAQCBDaGVja0luZGV4Q29tcGF0 aWJsZShPaWQgb2xkSWQsCiAKIAlhbWNhbm9yZGVyID0gYW1Sb3V0aW5lLT5hbWNhbm9yZGVyOwog CWFtc3VtbWFyaXppbmcgPSBhbVJvdXRpbmUtPmFtc3VtbWFyaXppbmc7CisJaXNhdXhpbGlhcnkg PSBhY2Nlc3NNZXRob2RJZCA9PSBTVElSX0FNX09JRDsKIAogCS8qCiAJICogQ29tcHV0ZSB0aGUg b3BlcmF0b3IgY2xhc3NlcywgY29sbGF0aW9ucywgYW5kIGV4Y2x1c2lvbiBvcGVyYXRvcnMgZm9y CkBAIC0yNDIsNyArMjQ0LDggQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCSAq LwogCWluZGV4SW5mbyA9IG1ha2VJbmRleEluZm8obnVtYmVyT2ZBdHRyaWJ1dGVzLCBudW1iZXJP ZkF0dHJpYnV0ZXMsCiAJCQkJCQkJICBhY2Nlc3NNZXRob2RJZCwgTklMLCBOSUwsIGZhbHNlLCBm YWxzZSwKLQkJCQkJCQkgIGZhbHNlLCBmYWxzZSwgYW1zdW1tYXJpemluZywgaXNXaXRob3V0T3Zl cmxhcHMpOworCQkJCQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6aW5nLAorCQkJCQkJCSAg aXNXaXRob3V0T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5KTsKIAl0eXBlSWRzID0gcGFsbG9jX2FycmF5 KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJyYXko T2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCW9wY2xhc3NJZHMgPSBwYWxsb2NfYXJyYXkoT2lk LCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtNTUyLDYgKzU1NSw3IEBAIERlZmluZUluZGV4KE9p ZCB0YWJsZUlkLAogewogCWJvb2wJCWNvbmN1cnJlbnQ7CiAJY2hhcgkgICAqaW5kZXhSZWxhdGlv bk5hbWU7CisJY2hhcgkgICAqYXV4SW5kZXhSZWxhdGlvbk5hbWUgPSBOVUxMOwogCWNoYXIJICAg KmFjY2Vzc01ldGhvZE5hbWU7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAgICpjb2xsYXRp b25JZHM7CkBAIC01NjEsNiArNTY1LDcgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJT2lk CQkJbmFtZXNwYWNlSWQ7CiAJT2lkCQkJdGFibGVzcGFjZUlkOwogCU9pZAkJCWNyZWF0ZWRDb25z dHJhaW50SWQgPSBJbnZhbGlkT2lkOworCU9pZAkJCWF1eEluZGV4UmVsYXRpb25JZCA9IEludmFs aWRPaWQ7CiAJTGlzdAkgICAqaW5kZXhDb2xOYW1lczsKIAlMaXN0CSAgICphbGxJbmRleFBhcmFt czsKIAlSZWxhdGlvbglyZWw7CkBAIC01ODIsNiArNTg3LDcgQEAgRGVmaW5lSW5kZXgoT2lkIHRh YmxlSWQsCiAJaW50CQkJbnVtYmVyT2ZLZXlBdHRyaWJ1dGVzOwogCVRyYW5zYWN0aW9uSWQgbGlt aXRYbWluOwogCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwlPYmplY3RBZGRyZXNzIGF1eEFkZHJl c3M7CiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlMT0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NL TU9ERQlsb2NrbW9kZTsKQEAgLTgzMiw2ICs4MzgsMTUgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxl SWQsCiAJCQkJCQkJCQkJCXN0bXQtPmV4Y2x1ZGVPcE5hbWVzLAogCQkJCQkJCQkJCQlzdG10LT5w cmltYXJ5LAogCQkJCQkJCQkJCQlzdG10LT5pc2NvbnN0cmFpbnQpOworCS8qCisJICogU2VsZWN0 IG5hbWUgZm9yIGF1eGlsaWFyeSBpbmRleAorCSAqLworCWlmIChjb25jdXJyZW50KQorCQlhdXhJ bmRleFJlbGF0aW9uTmFtZSA9IENob29zZVJlbGF0aW9uTmFtZShpbmRleFJlbGF0aW9uTmFtZSwK KwkJCQkJCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkJCSAgImNjYXV4IiwKKwkJCQkJCQkJCQkJ CSAgbmFtZXNwYWNlSWQsCisJCQkJCQkJCQkJCQkgIGZhbHNlKTsKIAogCS8qCiAJICogbG9vayB1 cCB0aGUgYWNjZXNzIG1ldGhvZCwgdmVyaWZ5IGl0IGNhbiBoYW5kbGUgdGhlIHJlcXVlc3RlZCBm ZWF0dXJlcwpAQCAtOTI3LDcgKzk0Miw4IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCQkJ CQkJCSAgIWNvbmN1cnJlbnQsCiAJCQkJCQkJICBjb25jdXJyZW50LAogCQkJCQkJCSAgYW1pc3N1 bW1hcml6aW5nLAotCQkJCQkJCSAgc3RtdC0+aXN3aXRob3V0b3ZlcmxhcHMpOworCQkJCQkJCSAg c3RtdC0+aXN3aXRob3V0b3ZlcmxhcHMsCisJCQkJCQkJICBmYWxzZSk7CiAKIAl0eXBlSWRzID0g cGFsbG9jX2FycmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBw YWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtMTU5Miw2ICsxNjA4LDE2 IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCQlyZXR1cm4gYWRkcmVzczsKIAl9CiAKKwkv KgorCSAqIEluIGNhc2Ugb2YgY29uY3VycmVudCBidWlsZCAtIGNyZWF0ZSBhdXhpbGlhcnkgaW5k ZXggcmVjb3JkLgorCSAqLworCWlmIChjb25jdXJyZW50KQorCXsKKwkJYXV4SW5kZXhSZWxhdGlv bklkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgocmVsLCBpbmRleFJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCXRhYmxlc3BhY2VJZCwgYXV4SW5kZXhSZWxhdGlvbk5hbWUpOworCQlPYmpl Y3RBZGRyZXNzU2V0KGF1eEFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwgYXV4SW5kZXhSZWxh dGlvbklkKTsKKwl9CisKIAlBdEVPWGFjdF9HVUMoZmFsc2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwp OwogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQocm9vdF9zYXZlX3VzZXJpZCwgcm9vdF9zYXZlX3Nl Y19jb250ZXh0KTsKIApAQCAtMTYyMCwxMSArMTY0NiwxMSBAQCBEZWZpbmVJbmRleChPaWQgdGFi bGVJZCwKIAkvKgogCSAqIEZvciBhIGNvbmN1cnJlbnQgYnVpbGQsIGl0J3MgaW1wb3J0YW50IHRv IG1ha2UgdGhlIGNhdGFsb2cgZW50cmllcwogCSAqIHZpc2libGUgdG8gb3RoZXIgdHJhbnNhY3Rp b25zIGJlZm9yZSB3ZSBzdGFydCB0byBidWlsZCB0aGUgaW5kZXguIFRoYXQKLQkgKiB3aWxsIHBy ZXZlbnQgdGhlbSBmcm9tIG1ha2luZyBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuICBUaGUgbmV3 IGluZGV4Ci0JICogd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3Zh bGlkLCBzbyB0aGF0IG5vIG9uZSBlbHNlCi0JICogdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRv IGl0IG9yIHVzZSBpdCBmb3IgcXVlcmllcy4KKwkgKiB3aWxsIHByZXZlbnQgdGhlbSBmcm9tIG1h a2luZyBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuIE5ldyBpbmRleGVzCisJICogKG1haW4gYW5k IGF1eGlsaWFyeSkgd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3Zh bGlkLAorCSAqIHNvIHRoYXQgbm8gb25lIGVsc2UgdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRv IGl0IG9yIHVzZSBpdCBmb3IgcXVlcmllcy4KIAkgKgotCSAqIFdlIG11c3QgY29tbWl0IG91ciBj dXJyZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIGluZGV4IGJlY29tZXMKKwkgKiBXZSBtdXN0 IGNvbW1pdCBvdXIgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZSBpbmRleGVzIGJlY29t ZXMKIAkgKiB2aXNpYmxlOyB0aGVuIHN0YXJ0IGFub3RoZXIuICBOb3RlIHRoYXQgYWxsIHRoZSBk YXRhIHN0cnVjdHVyZXMgd2UganVzdAogCSAqIGJ1aWx0IGFyZSBsb3N0IGluIHRoZSBjb21taXQu ICBUaGUgb25seSBkYXRhIHdlIGtlZXAgcGFzdCBoZXJlIGFyZSB0aGUKIAkgKiByZWxhdGlvbiBJ RHMuCkBAIC0xNjM0LDcgKzE2NjAsNyBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkgKiBj YW5ub3QgYmxvY2ssIGV2ZW4gaWYgc29tZW9uZSBlbHNlIGlzIHdhaXRpbmcgZm9yIGFjY2Vzcywg YmVjYXVzZSB3ZQogCSAqIGFscmVhZHkgaGF2ZSB0aGUgc2FtZSBsb2NrIHdpdGhpbiBvdXIgdHJh bnNhY3Rpb24uCiAJICoKLQkgKiBOb3RlOiB3ZSBkb24ndCBjdXJyZW50bHkgYm90aGVyIHdpdGgg YSBzZXNzaW9uIGxvY2sgb24gdGhlIGluZGV4LAorCSAqIE5vdGU6IHdlIGRvbid0IGN1cnJlbnRs eSBib3RoZXIgd2l0aCBhIHNlc3Npb24gbG9jayBvbiB0aGUgaW5kZXhlcywKIAkgKiBiZWNhdXNl IHRoZXJlIGFyZSBubyBvcGVyYXRpb25zIHRoYXQgY291bGQgY2hhbmdlIGl0cyBzdGF0ZSB3aGls ZSB3ZQogCSAqIGhvbGQgbG9jayBvbiB0aGUgcGFyZW50IHRhYmxlLiAgVGhpcyBtaWdodCBuZWVk IHRvIGNoYW5nZSBsYXRlci4KIAkgKi8KQEAgLTE2NzMsNyArMTY5OSw3IEBAIERlZmluZUluZGV4 KE9pZCB0YWJsZUlkLAogCSAqIHdpdGggdGhlIG9sZCBsaXN0IG9mIGluZGV4ZXMuICBVc2UgU2hh cmVMb2NrIHRvIGNvbnNpZGVyIHJ1bm5pbmcKIAkgKiB0cmFuc2FjdGlvbnMgdGhhdCBob2xkIGxv Y2tzIHRoYXQgcGVybWl0IHdyaXRpbmcgdG8gdGhlIHRhYmxlLiAgTm90ZSB3ZQogCSAqIGRvIG5v dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHhhY3RzIHRoYXQgb3BlbiB0aGUgdGFibGUgZm9yIHdyaXRp bmcgYWZ0ZXIKLQkgKiB0aGlzIHBvaW50OyB0aGV5IHdpbGwgc2VlIHRoZSBuZXcgaW5kZXggd2hl biB0aGV5IG9wZW4gaXQuCisJICogdGhpcyBwb2ludDsgdGhleSB3aWxsIHNlZSB0aGUgbmV3IGlu ZGV4ZXMgd2hlbiB0aGV5IG9wZW4gaXQuCiAJICoKIAkgKiBOb3RlOiB0aGUgcmVhc29uIHdlIHVz ZSBhY3R1YWwgbG9jayBhY3F1aXNpdGlvbiBoZXJlLCByYXRoZXIgdGhhbiBqdXN0CiAJICogY2hl Y2tpbmcgdGhlIFByb2NBcnJheSBhbmQgc2xlZXBpbmcsIGlzIHRoYXQgZGVhZGxvY2sgaXMgcG9z c2libGUgaWYKQEAgLTE2ODUsMTQgKzE3MTEsNDQgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQs CiAKIAkvKgogCSAqIEF0IHRoaXMgbW9tZW50IHdlIGFyZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5v IHRyYW5zYWN0aW9ucyB3aXRoIHRoZQotCSAqIHRhYmxlIG9wZW4gZm9yIHdyaXRlIHRoYXQgZG9u J3QgaGF2ZSB0aGlzIG5ldyBpbmRleCBpbiB0aGVpciBsaXN0IG9mCisJICogdGFibGUgb3BlbiBm b3Igd3JpdGUgdGhhdCBkb24ndCBoYXZlIHRoaXMgbmV3IGluZGV4ZXMgaW4gdGhlaXIgbGlzdCBv ZgogCSAqIGluZGV4ZXMuICBXZSBoYXZlIHdhaXRlZCBvdXQgYWxsIHRoZSBleGlzdGluZyB0cmFu c2FjdGlvbnMgYW5kIGFueSBuZXcKLQkgKiB0cmFuc2FjdGlvbiB3aWxsIGhhdmUgdGhlIG5ldyBp bmRleCBpbiBpdHMgbGlzdCwgYnV0IHRoZSBpbmRleCBpcyBzdGlsbAotCSAqIG1hcmtlZCBhcyAi bm90LXJlYWR5LWZvci1pbnNlcnRzIi4gIFRoZSBpbmRleCBpcyBjb25zdWx0ZWQgd2hpbGUKKwkg KiB0cmFuc2FjdGlvbiB3aWxsIGhhdmUgYm90aCBuZXcgaW5kZXhlcyBpbiBpdHMgbGlzdCwgYnV0 IGluZGV4ZXMgYXJlIHN0aWxsCisJICogbWFya2VkIGFzICJub3QtcmVhZHktZm9yLWluc2VydHMi LiBUaGUgaW5kZXhlcyBhcmUgY29uc3VsdGVkIHdoaWxlCiAJICogZGVjaWRpbmcgSE9ULXNhZmV0 eSB0aG91Z2guICBUaGlzIGFycmFuZ2VtZW50IGVuc3VyZXMgdGhhdCBubyBuZXcgSE9UCiAJICog Y2hhaW5zIGNhbiBiZSBjcmVhdGVkIHdoZXJlIHRoZSBuZXcgdHVwbGUgYW5kIHRoZSBvbGQgdHVw bGUgaW4gdGhlCiAJICogY2hhaW4gaGF2ZSBkaWZmZXJlbnQgaW5kZXgga2V5cy4KIAkgKgorCSAq IE5vdyBjYWxsIGJ1aWxkIG9uIGF1eGlsaWFyeSBpbmRleC4gSW5kZXggd2lsbCBiZSBjcmVhdGVk IGVtcHR5IHdpdGhvdXQKKwkgKiBhbnkgYWN0dWFsIGhlYXAgc2NhbiwgYnV0IG1hcmtlZCBhcyAi cmVhZHktZm9yLWluc2VydHMiLiBUaGUgZ29hbCBvZgorCSAqIHRoYXQgaW5kZXggaXMgYWNjdW11 bGF0ZSBuZXcgdHVwbGVzIHdoaWxlIG1haW4gaW5kZXggaXMgYWN0dWFsbHkgYnVpbHQuCisJICov CisKKwkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rpb25zIGluIHRoZSBpbmRleGVz IG1heSBuZWVkIGl0ICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNo b3QoKSk7CisKKwlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQodGFibGVJZCwgYXV4SW5kZXhSZWxh dGlvbklkKTsKKwkvKiB3ZSBjYW4gZG8gYXdheSB3aXRoIG91ciBzbmFwc2hvdCAqLworCVBvcEFj dGl2ZVNuYXBzaG90KCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRy YW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0 byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlz ZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0o UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0VfV0FJVF8yKTsKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgbm8gdHJhbnNh Y3Rpb25zIHdpdGggdGhlIHdpdGggYXV4aWxpYXJ5IGluZGV4CisJICogbWFya2VkIGFzICJub3Qt cmVhZHktZm9yLWluc2VydHMiLgorCSAqLworCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2NrdGFnLCBT aGFyZUxvY2ssIHRydWUpOworCisJLyoKKwkgKiBBdCB0aGlzIG1vbWVudCB3ZSBhcmUgc3VyZSB3 aGF0IGFsbCBuZXcgdHVwbGVzIGluIHRhYmxlIGFyZSBpbnNlcnRlZCBpbnRvCisJICogYXV4aWxp YXJ5IGluZGV4LiBOb3cgaXQgaXMgdGltZSB0byBidWlsZCB0aGUgdGFyZ2V0IGluZGV4IGl0c2Vs Zi4KKwkgKgogCSAqIFdlIG5vdyB0YWtlIGEgbmV3IHNuYXBzaG90LCBhbmQgYnVpbGQgdGhlIGlu ZGV4IHVzaW5nIGFsbCB0dXBsZXMgdGhhdAogCSAqIGFyZSB2aXNpYmxlIGluIHRoaXMgc25hcHNo b3QuICBXZSBjYW4gYmUgc3VyZSB0aGF0IGFueSBIT1QgdXBkYXRlcyB0bwogCSAqIHRoZXNlIHR1 cGxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaW5kZXgsIHNpbmNlIGFueSB1cGRhdGVz IG1hZGUKQEAgLTE3MjcsOSArMTc4MywyOCBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkg KiB0aGUgaW5kZXggbWFya2VkIGFzIHJlYWQtb25seSBmb3IgdXBkYXRlcy4KIAkgKi8KIAlwZ3N0 YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJ CQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzIpOworCQkJCQkJCQkgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CiAJV2FpdEZvckxvY2tlcnMoaGVhcGxvY2t0YWcsIFNo YXJlTG9jaywgdHJ1ZSk7CiAKKwkvKgorCSAqIFVwZGF0aW5nIHBnX2luZGV4IG1pZ2h0IGludm9s dmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UKKwkgKiBoYXZlIGEgdmFsaWQgc25h cHNob3QuCisJICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3Qo KSk7CisJLyoKKwkgKiBOb3cgdGFyZ2V0IGluZGV4IGlzIG1hcmtlZCBhcyAicmVhZHkiIGZvciBh bGwgdHJhbnNhY3Rpb25zLiBTbywgYXV4aWxpYXJ5CisJICogaW5kZXggaXMgbm90IG1vcmUgbmVl ZGVkLiBTbywgc3RhcnQgcmVtb3ZpbmcgcHJvY2VzcyBieSByZXZlcnRpbmcgInJlYWR5IgorCSAq IGZsYWcuCisJICovCisJaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKGF1eEluZGV4UmVsYXRpb25JZCwg SU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CisJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJLyog VGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxp ZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOwor CiAJLyoKIAkgKiBOb3cgdGFrZSB0aGUgInJlZmVyZW5jZSBzbmFwc2hvdCIgdGhhdCB3aWxsIGJl IHVzZWQgYnkgdmFsaWRhdGVfaW5kZXgoKQogCSAqIHRvIGZpbHRlciBjYW5kaWRhdGUgdHVwbGVz LiAgQmV3YXJlISAgVGhlcmUgbWlnaHQgc3RpbGwgYmUgc25hcHNob3RzIGluCkBAIC0xNzQ3LDI0 ICsxODIyLDE0IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCSAqLwogCXNuYXBzaG90ID0g UmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCVB1c2hBY3RpdmVT bmFwc2hvdChzbmFwc2hvdCk7Ci0KIAkvKgotCSAqIFNjYW4gdGhlIGluZGV4IGFuZCB0aGUgaGVh cCwgaW5zZXJ0IGFueSBtaXNzaW5nIGluZGV4IGVudHJpZXMuCi0JICovCi0JdmFsaWRhdGVfaW5k ZXgodGFibGVJZCwgaW5kZXhSZWxhdGlvbklkLCBzbmFwc2hvdCk7Ci0KLQkvKgotCSAqIERyb3Ag dGhlIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2FpdGluZyBv dXQgb3RoZXIKLQkgKiBzbmFwc2hvdCBob2xkZXJzLCBlbHNlIHdlIHdpbGwgZGVhZGxvY2sgYWdh aW5zdCBvdGhlciBwcm9jZXNzZXMgYWxzbwotCSAqIGRvaW5nIENSRUFURSBJTkRFWCBDT05DVVJS RU5UTFksIHdoaWNoIHdvdWxkIHNlZSBvdXIgc25hcHNob3QgYXMgb25lCi0JICogdGhleSBtdXN0 IHdhaXQgZm9yLiAgQnV0IGZpcnN0LCBzYXZlIHRoZSBzbmFwc2hvdCdzIHhtaW4gdG8gdXNlIGFz Ci0JICogbGltaXRYbWluIGZvciBHZXRDdXJyZW50VmlydHVhbFhJRHMoKS4KKwkgKiBNZXJnZSBj b250ZW50IG9mIGF1eGlsaWFyeSBhbmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNlcnQgYW55IG1pc3Np bmcgaW5kZXggZW50cmllcy4KIAkgKi8KKwl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJl bGF0aW9uSWQsIGF1eEluZGV4UmVsYXRpb25JZCwgc25hcHNob3QpOwogCWxpbWl0WG1pbiA9IHNu YXBzaG90LT54bWluOwogCiAJUG9wQWN0aXZlU25hcHNob3QoKTsKIAlVbnJlZ2lzdGVyU25hcHNo b3Qoc25hcHNob3QpOwotCiAJLyoKIAkgKiBUaGUgc25hcHNob3Qgc3Vic3lzdGVtIGNvdWxkIHN0 aWxsIGNvbnRhaW4gcmVnaXN0ZXJlZCBzbmFwc2hvdHMgdGhhdAogCSAqIGFyZSBob2xkaW5nIGJh Y2sgb3VyIHByb2Nlc3MncyBhZHZlcnRpc2VkIHhtaW47IGluIHBhcnRpY3VsYXIsIGlmCkBAIC0x NzkxLDcgKzE4NTYsNyBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkgKi8KIAlJTkpFQ1RJ T05fUE9JTlQoImRlZmluZV9pbmRleF9iZWZvcmVfc2V0X3ZhbGlkIiwgTlVMTCk7CiAJcGdzdGF0 X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJ CSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsKKwkJCQkJCQkJIFBST0dSRVNTX0NS RUFURUlEWF9QSEFTRV9XQUlUXzQpOwogCVdhaXRGb3JPbGRlclNuYXBzaG90cyhsaW1pdFhtaW4s IHRydWUpOwogCiAJLyoKQEAgLTE4MTYsNiArMTg4MSw1MyBAQCBEZWZpbmVJbmRleChPaWQgdGFi bGVJZCwKIAkgKiB0byByZXBsYW47IHNvIHJlbGNhY2hlIGZsdXNoIG9uIHRoZSBpbmRleCBpdHNl bGYgd2FzIHN1ZmZpY2llbnQuKQogCSAqLwogCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlSZWxp ZChoZWFwcmVsaWQucmVsSWQpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRz IHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCisJaWYgKHNhZmVfaW5kZXgpCisJ CXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX1dBSVRfNSk7CisJLyogTm93IHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbiB0byBzZWUg YXV4aWxpYXJ5IGFzICJub24tcmVhZHkgZm9yIGluc2VydHMiICovCisJV2FpdEZvckxvY2tlcnMo aGVhcGxvY2t0YWcsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHRydWUpOworCisJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICog VXBkYXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVu c3VyZSB3ZQorCSAqIGhhdmUgYSB2YWxpZCBzbmFwc2hvdC4KKwkgKi8KKwlQdXNoQWN0aXZlU25h cHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkvKiBOb3cgaXQgaXMgdGltZSB0byBt YXJrIGF1eGlsaWFyeSBpbmRleCBhcyBkZWFkICovCisJaW5kZXhfY29uY3VycmVudGx5X3NldF9k ZWFkKHRhYmxlSWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CisJUG9wQWN0aXZlU25hcHNob3QoKTsK KworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisKKwkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIHRvIGlnbm9yZSB1cywgaWYg aW5kZXggcXVhbGlmaWVzICovCisJaWYgKHNhZmVfaW5kZXgpCisJCXNldF9pbmRleHNhZmVfcHJv Y2ZsYWdzKCk7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFU RUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNik7CisJ LyogTm93IHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbiB0byBpZ25vcmUgYXV4aWxpYXJ5IGJlY2F1 c2UgaXQgaXMgZGVhZCAqLworCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2NrdGFnLCBBY2Nlc3NFeGNs dXNpdmVMb2NrLCB0cnVlKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIERyb3AgYXV4aWxpYXJ5IGluZGV4Lgor CSAqCisJICogVXNlIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVF9MT0NLIHNvIHRoYXQgaW5k ZXhfZHJvcCgpIHVzZXMgdGhlCisJICogcmlnaHQgbG9jayBsZXZlbC4KKwkgKi8KKwlwZXJmb3Jt RGVsZXRpb24oJmF1eEFkZHJlc3MsIERST1BfUkVTVFJJQ1QsCisJCQkJCQkJIFBFUkZPUk1fREVM RVRJT05fQ09OQ1VSUkVOVF9MT0NLIHwgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCk7CiAKIAkv KgogCSAqIExhc3QgdGhpbmcgdG8gZG8gaXMgcmVsZWFzZSB0aGUgc2Vzc2lvbi1sZXZlbCBsb2Nr IG9uIHRoZSBwYXJlbnQgdGFibGUuCkBAIC0zNTcwLDYgKzM2ODIsNyBAQCBSZWluZGV4UmVsYXRp b25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwg Y29uc3QgUmVpbgogCXR5cGVkZWYgc3RydWN0IFJlaW5kZXhJbmRleEluZm8KIAl7CiAJCU9pZAkJ CWluZGV4SWQ7CisJCU9pZAkJCWF1eEluZGV4SWQ7CiAJCU9pZAkJCXRhYmxlSWQ7CiAJCU9pZAkJ CWFtSWQ7CiAJCWJvb2wJCXNhZmU7CQkvKiBmb3Igc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MgKi8K QEAgLTM2NzUsOCArMzc4OCwxNSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJCQlPaWQJ CQljZWxsT2lkID0gbGZpcnN0X29pZChsYyk7CiAJCQkJCVJlbGF0aW9uCWluZGV4UmVsYXRpb24g PSBpbmRleF9vcGVuKGNlbGxPaWQsCiAJCQkJCQkJCQkJCQkJCSAgIFNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jayk7CisJCQkJCUluZGV4SW5mbyoJaW5kZXhJbmZvID0gQnVpbGREdW1teUluZGV4SW5m byhpbmRleFJlbGF0aW9uKTsKIAotCQkJCQlpZiAoIWluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5p bmRpc3ZhbGlkKQorCisJCQkJCWlmIChpbmRleEluZm8tPmlpX0F1eGlsaWFyeSkKKwkJCQkJCWVy ZXBvcnQoV0FSTklORywoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4l c1wiIiwKKwkJCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShjZWxs T2lkKSksCisJCQkJCQkJCQlnZXRfcmVsX25hbWUoY2VsbE9pZCkpKSk7CisJCQkJCWVsc2UgaWYg KCFpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kaXN2YWxpZCkKIAkJCQkJCWVyZXBvcnQoV0FS TklORywKIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lU RV9TVEFURSksCiAJCQkJCQkJCSBlcnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBp bmRleCBcIiVzLiVzXCIiLApAQCAtMzcyOCw4ICszODQ4LDE1IEBAIFJlaW5kZXhSZWxhdGlvbkNv bmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25z dCBSZWluCiAJCQkJCQlPaWQJCQljZWxsT2lkID0gbGZpcnN0X29pZChsYzIpOwogCQkJCQkJUmVs YXRpb24JaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oY2VsbE9pZCwKIAkJCQkJCQkJCQkJCQkJ CSAgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCQkJCQlJbmRleEluZm8qCWluZGV4SW5m byA9IEJ1aWxkRHVtbXlJbmRleEluZm8oaW5kZXhSZWxhdGlvbik7CiAKLQkJCQkJCWlmICghaW5k ZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQpCisJCQkJCQlpZiAoaW5kZXhJbmZvLT5p aV9BdXhpbGlhcnkpCisJCQkJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCQkJIGVycm1zZygic2tpcHBp bmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKKwkJCQkJCQkJCQkJZ2V0 X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKGNlbGxPaWQpKSwKKwkJCQkJCQkJCQkJ Z2V0X3JlbF9uYW1lKGNlbGxPaWQpKSkpOworCQkJCQkJZWxzZSBpZiAoIWluZGV4UmVsYXRpb24t PnJkX2luZGV4LT5pbmRpc3ZhbGlkKQogCQkJCQkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJ CQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBpbnZhbGlkIGluZGV4IFwiJXMuJXNc IiIsCkBAIC0zNzkwLDYgKzM5MTcsMTMgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNv bnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCQkJIGVycm1z ZygiY2Fubm90IHJlaW5kZXggaW52YWxpZCBpbmRleCBvbiBUT0FTVCB0YWJsZSIpKSk7CiAKKwkJ CQkvKiBBdXhpbGlhcnkgaW5kZXhlcyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgcmVidWlsdCAqLwor CQkJCWlmIChnZXRfcmVsX3JlbGFtKHJlbGF0aW9uT2lkKSA9PSBTVElSX0FNX09JRCkKKwkJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQkJCSBlcnJtc2coInJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXNcIiBu b3Qgc3VwcG9ydGVkIiwKKwkJCQkJCQkJZ2V0X3JlbF9uYW1lKHJlbGF0aW9uT2lkKSkpKTsKKwog CQkJCS8qCiAJCQkJICogQ2hlY2sgaWYgcGFyZW50IHJlbGF0aW9uIGNhbiBiZSBsb2NrZWQgYW5k IGlmIGl0IGV4aXN0cywKIAkJCQkgKiB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYXQgdGhpcyBzdGFn ZSBhcyB0aGUgbGlzdCBvZiBpbmRleGVzCkBAIC0zODkzLDE1ICs0MDI3LDE4IEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJZm9yZWFjaChsYywgaW5kZXhJZHMpCiAJewogCQljaGFyCSAgICpj b25jdXJyZW50TmFtZTsKKwkJY2hhcgkgICAqYXV4Q29uY3VycmVudE5hbWU7CiAJCVJlaW5kZXhJ bmRleEluZm8gKmlkeCA9IGxmaXJzdChsYyk7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeDsK IAkJT2lkCQkJbmV3SW5kZXhJZDsKKwkJT2lkCQkJYXV4SW5kZXhJZDsKIAkJUmVsYXRpb24JaW5k ZXhSZWw7CiAJCVJlbGF0aW9uCWhlYXBSZWw7CiAJCU9pZAkJCXNhdmVfdXNlcmlkOwogCQlpbnQJ CQlzYXZlX3NlY19jb250ZXh0OwogCQlpbnQJCQlzYXZlX25lc3RsZXZlbDsKIAkJUmVsYXRpb24J bmV3SW5kZXhSZWw7CisJCVJlbGF0aW9uCWF1eEluZGV4UmVsOwogCQlMb2NrUmVsSWQgICpsb2Nr cmVsaWQ7CiAJCU9pZAkJCXRhYmxlc3BhY2VpZDsKIApAQCAtMzk1Miw2ICs0MDg5LDExIEBAIFJl aW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJl bGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCQkJCQkJCSJjY25ldyIsCiAJCQkJCQkJCQkJCWdl dF9yZWxfbmFtZXNwYWNlKGluZGV4UmVsLT5yZF9pbmRleC0+aW5kcmVsaWQpLAogCQkJCQkJCQkJ CQlmYWxzZSk7CisJCWF1eENvbmN1cnJlbnROYW1lID0gQ2hvb3NlUmVsYXRpb25OYW1lKGdldF9y ZWxfbmFtZShpZHgtPmluZGV4SWQpLAorCQkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCQkiY2Nh dXgiLAorCQkJCQkJCQkJCQlnZXRfcmVsX25hbWVzcGFjZShpbmRleFJlbC0+cmRfaW5kZXgtPmlu ZHJlbGlkKSwKKwkJCQkJCQkJCQkJZmFsc2UpOwogCiAJCS8qIENob29zZSB0aGUgbmV3IHRhYmxl c3BhY2UsIGluZGV4ZXMgb2YgdG9hc3QgdGFibGVzIGFyZSBub3QgbW92ZWQgKi8KIAkJaWYgKE9p ZElzVmFsaWQocGFyYW1zLT50YWJsZXNwYWNlT2lkKSAmJgpAQCAtMzk2NSwxMiArNDEwNywxNyBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJCQkJCQkJCQkJCWlkeC0+aW5kZXhJZCwKIAkJ CQkJCQkJCQkJCQl0YWJsZXNwYWNlaWQsCiAJCQkJCQkJCQkJCQkJY29uY3VycmVudE5hbWUpOwor CQlhdXhJbmRleElkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgoaGVhcFJlbCwKKwkJ CQkJCQkJCQkJCSAgIG5ld0luZGV4SWQsCisJCQkJCQkJCQkJCQkgICB0YWJsZXNwYWNlaWQsCisJ CQkJCQkJCQkJCQkgICBhdXhDb25jdXJyZW50TmFtZSk7CiAKIAkJLyoKIAkJICogTm93IG9wZW4g dGhlIHJlbGF0aW9uIG9mIHRoZSBuZXcgaW5kZXgsIGEgc2Vzc2lvbi1sZXZlbCBsb2NrIGlzCiAJ CSAqIGFsc28gbmVlZGVkIG9uIGl0LgogCQkgKi8KIAkJbmV3SW5kZXhSZWwgPSBpbmRleF9vcGVu KG5ld0luZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCWF1eEluZGV4UmVsID0g aW5kZXhfb3BlbihhdXhJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCiAJCS8q CiAJCSAqIFNhdmUgdGhlIGxpc3Qgb2YgT0lEcyBhbmQgbG9ja3MgaW4gcHJpdmF0ZSBjb250ZXh0 CkBAIC0zOTc5LDYgKzQxMjYsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCiAJCW5ld2lk eCA9IHBhbGxvY19vYmplY3QoUmVpbmRleEluZGV4SW5mbyk7CiAJCW5ld2lkeC0+aW5kZXhJZCA9 IG5ld0luZGV4SWQ7CisJCW5ld2lkeC0+YXV4SW5kZXhJZCA9IGF1eEluZGV4SWQ7CiAJCW5ld2lk eC0+c2FmZSA9IGlkeC0+c2FmZTsKIAkJbmV3aWR4LT50YWJsZUlkID0gaWR4LT50YWJsZUlkOwog CQluZXdpZHgtPmFtSWQgPSBpZHgtPmFtSWQ7CkBAIC0zOTk3LDEwICs0MTQ1LDE0IEBAIFJlaW5k ZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0 aW9uT2lkLCBjb25zdCBSZWluCiAJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElk KTsKIAkJKmxvY2tyZWxpZCA9IG5ld0luZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CiAJ CXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCWxv Y2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJKmxvY2tyZWxpZCA9IGF1eElu ZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5k KHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOwogCiAJCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBOb0xvY2spOworCQlpbmRleF9j bG9zZShhdXhJbmRleFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UobmV3SW5kZXhSZWwsIE5v TG9jayk7CiAKIAkJLyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRl eCBmdW5jdGlvbnMgKi8KQEAgLTQwODEsMTMgKzQyMzMsNjAgQEAgUmVpbmRleFJlbGF0aW9uQ29u Y3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0 IFJlaW4KIAkgKiBkb2luZyB0aGF0LCB3YWl0IHVudGlsIG5vIHJ1bm5pbmcgdHJhbnNhY3Rpb25z IGNvdWxkIGhhdmUgdGhlIHRhYmxlIG9mCiAJICogdGhlIGluZGV4IG9wZW4gd2l0aCB0aGUgb2xk IGxpc3Qgb2YgaW5kZXhlcy4gIFNlZSAicGhhc2UgMiIgaW4KIAkgKiBEZWZpbmVJbmRleCgpIGZv ciBtb3JlIGRldGFpbHMuCisJKi8KKworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf V0FJVF8xKTsKKwlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBTaGFyZUxvY2ssIHRy dWUpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBOb3cgYnVpbGQg YWxsIGF1eGlsaWFyeSBpbmRleGVzIGFuZCBtYXJrIHRoZW0gYXMgInJlYWR5LWZvci1pbnNlcnRz Ii4KKwkgKi8KKwlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKKwl7CisJCVJlaW5kZXhJbmRleElu Zm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CisKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGlu c2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVz ZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tz IGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXhpbmcgdG8gaWdub3JlIHVzLCBpZiBpbmRl eCBxdWFsaWZpZXMgKi8KKwkJaWYgKG5ld2lkeC0+c2FmZSkKKwkJCXNldF9pbmRleHNhZmVfcHJv Y2ZsYWdzKCk7CisKKwkJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNpbmNlIGZ1bmN0aW9ucyBpbiB0 aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNh Y3Rpb25TbmFwc2hvdCgpKTsKKworCQkvKiBCdWlsZCBhdXhpbGlhcnkgaW5kZXgsIGl0IGlzIGZh c3QgLSB3aXRob3V0IGFueSBhY3R1YWwgaGVhcCBzY2FuLCBqdXN0IGFuIGVtcHR5IGluZGV4LiAq LworCQlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmF1 eEluZGV4SWQpOworCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCUNvbW1pdFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCX0KKworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAq IEJlY2F1c2Ugd2UgZG9uJ3QgdGFrZSBhIHNuYXBzaG90IGluIHRoaXMgdHJhbnNhY3Rpb24sIHRo ZXJlJ3Mgbm8gbmVlZAorCSAqIHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZsYWcgaGVyZS4K IAkgKi8KIAogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMSk7CisJCQkJ CQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yKTsKKwkvKgorCSAqIFdhaXQgdW50 aWwgYWxsIGF1eGlsaWFyeSBpbmRleGVzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgYnkgYWxsCisJ ICogdHJhbnNhY3Rpb25zLgorCSAqLwogCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3Ms IFNoYXJlTG9jaywgdHJ1ZSk7CiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKKwkvKiBO b3cgaXQgaXMgdGltZSB0byBwZXJmb3JtIHRhcmdldCBpbmRleCBidWlsZC4gKi8KIAlmb3JlYWNo KGxjLCBuZXdJbmRleElkcykKIAl7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJz dChsYyk7CkBAIC00MTM0LDYgKzQzMzMsNDEgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkg KiBuZWVkIHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZsYWcgaGVyZS4KIAkgKi8KIAorCXBn c3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJ CQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CisJV2FpdEZvckxvY2tlcnNN dWx0aXBsZShsb2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsKKwlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKworCS8qCisJICogQXQgdGhpcyBtb21lbnQgYWxsIHRhcmdldCBpbmRleGVzIGFy ZSBtYXJrZWQgYXMgInJlYWR5LXRvLWluc2VydCIuIFNvLAorCSAqIHdlIGFyZSBmcmVlIHRvIHN0 YXJ0IHByb2Nlc3Mgb2YgZHJvcHBpbmcgYXV4aWxpYXJ5IGluZGV4ZXMuCisJICovCisJZm9yZWFj aChsYywgbmV3SW5kZXhJZHMpCisJeworCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHggPSBsZmly c3QobGMpOworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkvKgorCQkgKiBDaGVjayBm b3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNv IGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVu c3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFi b3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBUZWxsIGNvbmN1 cnJlbnQgaW5kZXhpbmcgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwkJaWYg KG5ld2lkeC0+c2FmZSkKKwkJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKKwkJLyoKKwkJ ICogVXBkYXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNv IGVuc3VyZSB3ZQorCQkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJCSAqLworCQlQdXNoQWN0 aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJaW5kZXhfc2V0X3N0YXRl X2ZsYWdzKG5ld2lkeC0+YXV4SW5kZXhJZCwgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CisJCVBv cEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJfQor CiAJLyoKIAkgKiBQaGFzZSAzIG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZCiAJICoKQEAgLTQxNDEs MTIgKzQzNzUsNiBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0 bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCSAqIHdlcmUgY3JlYXRlZCBk dXJpbmcgdGhlIHByZXZpb3VzIHBoYXNlLiAgU2VlICJwaGFzZSAzIiBpbiBEZWZpbmVJbmRleCgp CiAJICogZm9yIG1vcmUgZGV0YWlscy4KIAkgKi8KLQotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVf cGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRF SURYX1BIQVNFX1dBSVRfMik7Ci0JV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgU2hh cmVMb2NrLCB0cnVlKTsKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKLQogCWZvcmVhY2go bGMsIG5ld0luZGV4SWRzKQogCXsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0 KGxjKTsKQEAgLTQxODQsNyArNDQxMiw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCXBy b2dyZXNzX3ZhbHNbM10gPSBuZXdpZHgtPmFtSWQ7CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVf bXVsdGlfcGFyYW0oNCwgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCi0JCXZhbGlk YXRlX2luZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBzbmFwc2hvdCk7CisJ CXZhbGlkYXRlX2luZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBuZXdpZHgt PmF1eEluZGV4SWQsIHNuYXBzaG90KTsKIAogCQkvKgogCQkgKiBXZSBjYW4gbm93IGRvIGF3YXkg d2l0aCBvdXIgYWN0aXZlIHNuYXBzaG90LCB3ZSBzdGlsbCBuZWVkIHRvIHNhdmUKQEAgLTQyMTMs NyArNDQ0MSw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3Rt dCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCSAqIHRoZXJlJ3Mgbm8gbmVl ZCB0byBzZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBmbGFnIGhlcmUuCiAJCSAqLwogCQlwZ3N0YXRf cHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJ CSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsKKwkJCQkJCQkJCSBQUk9HUkVTU19D UkVBVEVJRFhfUEhBU0VfV0FJVF80KTsKIAkJV2FpdEZvck9sZGVyU25hcHNob3RzKGxpbWl0WG1p biwgdHJ1ZSk7CiAKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC00MzAzLDE0ICs0 NTMxLDE0IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAq c3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJLyoKIAkgKiBQaGFzZSA1IG9mIFJF SU5ERVggQ09OQ1VSUkVOVExZCiAJICoKLQkgKiBNYXJrIHRoZSBvbGQgaW5kZXhlcyBhcyBkZWFk LiAgRmlyc3Qgd2UgbXVzdCB3YWl0IHVudGlsIG5vIHJ1bm5pbmcKLQkgKiB0cmFuc2FjdGlvbiBj b3VsZCBiZSB1c2luZyB0aGUgaW5kZXggZm9yIGEgcXVlcnkuICBTZWUgYWxzbworCSAqIE1hcmsg dGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMgYXMgZGVhZC4gRmlyc3Qgd2UgbXVzdCB3YWl0 IHVudGlsIG5vCisJICogcnVubmluZyB0cmFuc2FjdGlvbiBjb3VsZCBiZSB1c2luZyB0aGUgaW5k ZXggZm9yIGEgcXVlcnkuICBTZWUgYWxzbwogCSAqIGluZGV4X2Ryb3AoKSBmb3IgbW9yZSBkZXRh aWxzLgogCSAqLwogCiAJSU5KRUNUSU9OX1BPSU5UKCJyZWluZGV4X3JlbGF0aW9uX2NvbmN1cnJl bnRseV9iZWZvcmVfc2V0X2RlYWQiLCBOVUxMKTsKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlE WF9QSEFTRV9XQUlUXzQpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRf NSk7CiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgQWNjZXNzRXhjbHVzaXZlTG9j aywgdHJ1ZSk7CiAKIAlmb3JlYWNoKGxjLCBpbmRleElkcykKQEAgLTQzMzUsNiArNDU2MywyOCBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCX0KIAor CWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4 ID0gbGZpcnN0KGxjKTsKKworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJv cnQuICBUaGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3QuYyBkb2Vz IG5vdCBpc3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkgKiBzZXNz aW9uLWxldmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKgorCQkgKiBVcGRhdGluZyBwZ19pbmRleCBtaWdodCBp bnZvbHZlIFRPQVNUIHRhYmxlIGFjY2Vzcywgc28gZW5zdXJlIHdlCisJCSAqIGhhdmUgYSB2YWxp ZCBzbmFwc2hvdC4KKwkJICovCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNu YXBzaG90KCkpOworCisJCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZChuZXdpZHgtPnRhYmxl SWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwl9CisK IAkvKiBDb21taXQgdGhpcyB0cmFuc2FjdGlvbiB0byBtYWtlIHRoZSB1cGRhdGVzIHZpc2libGUu ICovCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKQEAgLTQzNDgsMTEgKzQ1OTgsMTEgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkv KgogCSAqIFBoYXNlIDYgb2YgUkVJTkRFWCBDT05DVVJSRU5UTFkKIAkgKgotCSAqIERyb3AgdGhl IG9sZCBpbmRleGVzLgorCSAqIERyb3AgdGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMuCiAJ ICovCiAKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9Q SEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzUpOworCQkJCQkJ CQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNik7CiAJV2FpdEZvckxvY2tlcnNNdWx0 aXBsZShsb2NrVGFncywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CiAKIAlQdXNoQWN0aXZl U25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKQEAgLTQzNzIsNiArNDYyMiwxOCBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZv YmplY3QsIG9iamVjdHMpOwogCQl9CiAKKwkJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCisJCXsK KwkJCVJlaW5kZXhJbmRleEluZm8gKmlkeCA9IGxmaXJzdChsYyk7CisJCQlPYmplY3RBZGRyZXNz IG9iamVjdDsKKworCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlv YmplY3Qub2JqZWN0SWQgPSBpZHgtPmF1eEluZGV4SWQ7CisJCQlvYmplY3Qub2JqZWN0U3ViSWQg PSAwOworCisJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iamVjdCwgb2JqZWN0cyk7CisJ CX0KKwogCQkvKgogCQkgKiBVc2UgUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgc28g dGhhdCBpbmRleF9kcm9wKCkgdXNlcyB0aGUKIAkJICogcmlnaHQgbG9jayBsZXZlbC4KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMv bWFrZWZ1bmNzLmMKaW5kZXggZTk3ZTA5NDNmNWIuLmI1NTZiYTQ4MTdiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtl ZnVuY3MuYwpAQCAtODM0LDcgKzgzNCw3IEBAIEluZGV4SW5mbyAqCiBtYWtlSW5kZXhJbmZvKGlu dCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25z LAogCQkJICBMaXN0ICpwcmVkaWNhdGVzLCBib29sIHVuaXF1ZSwgYm9vbCBudWxsc19ub3RfZGlz dGluY3QsCiAJCQkgIGJvb2wgaXNyZWFkeSwgYm9vbCBjb25jdXJyZW50LCBib29sIHN1bW1hcml6 aW5nLAotCQkJICBib29sIHdpdGhvdXRvdmVybGFwcykKKwkJCSAgYm9vbCB3aXRob3V0b3Zlcmxh cHMsIGJvb2wgYXV4aWxpYXJ5KQogewogCUluZGV4SW5mbyAgKm4gPSBtYWtlTm9kZShJbmRleElu Zm8pOwogCkBAIC04NTAsNiArODUwLDcgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGlu dCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAluLT5paV9Db25j dXJyZW50ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwog CW4tPmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKKwluLT5paV9BdXhpbGlh cnkgPSBhdXhpbGlhcnk7CiAKIAkvKiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWlu IG5vbi1rZXkgYXR0cmlidXRlcyAqLwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0 dHJzID09IG51bWF0dHJzKSk7CkBAIC04NzUsNyArODc2LDYgQEAgbWFrZUluZGV4SW5mbyhpbnQg bnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywK IAkvKiBpbml0aWFsaXplIGluZGV4LWJ1aWxkIHN0YXRlIHRvIGRlZmF1bHQgKi8KIAluLT5paV9C cm9rZW5Ib3RDaGFpbiA9IGZhbHNlOwogCW4tPmlpX1BhcmFsbGVsV29ya2VycyA9IDA7Ci0Jbi0+ aWlfQXV4aWxpYXJ5ID0gZmFsc2U7CiAKIAkvKiBzZXQgdXAgZm9yIHBvc3NpYmxlIHVzZSBieSBp bmRleCBBTSAqLwogCW4tPmlpX0FtID0gYW1vaWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBlMTZi ZjAyNTY5Mi4uMjI0NDZiMzIxNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJs ZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNzA2LDcgKzcwNiw4 IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJUmVsYXRpb24gaW5k ZXhfcmVsLAogCQkJCQkJCQkJCUluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJCQkJCQlTbmFw c2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlKTsKKwkJ CQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCVZhbGlkYXRlSW5k ZXhTdGF0ZSAqYXV4X3N0YXRlKTsKIAogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODAzLDE5 ICsxODA0LDI0IEBAIHRhYmxlX2luZGV4X2J1aWxkX3JhbmdlX3NjYW4oUmVsYXRpb24gdGFibGVf cmVsLAogICogdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbiAtIHNlY29uZCB0YWJsZSBzY2FuIGZv ciBjb25jdXJyZW50IGluZGV4IGJ1aWxkCiAgKgogICogU2VlIHZhbGlkYXRlX2luZGV4KCkgZm9y IGFuIGV4cGxhbmF0aW9uLgorICoKKyAqIE5vdGU6IGl0IGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRo YXQgZnVuY3Rpb24gdG8gY2xvc2Ugc29ydHN0YXRlcyBpbgorICogYm90aCBgc3RhdGVgIGFuZCBg YXV4c3RhdGVgLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIHRhYmxlX2luZGV4X3ZhbGlkYXRl X3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAogCQkJCQkJICBSZWxhdGlvbiBpbmRleF9yZWwsCiAJ CQkJCQkgIEluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJCSAgU25hcHNob3Qgc25hcHNob3Qs Ci0JCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUpCisJCQkJCQkgIFZhbGlkYXRlSW5k ZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4c3RhdGUpCiB7 CiAJdGFibGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwK IAkJCQkJCQkJCQkJICAgaW5kZXhfcmVsLAogCQkJCQkJCQkJCQkgICBpbmRleF9pbmZvLAogCQkJ CQkJCQkJCQkgICBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUpOworCQkJCQkJCQkJCQkg ICBzdGF0ZSwKKwkJCQkJCQkJCQkJICAgYXV4c3RhdGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApp bmRleCBkZGE5NWU1NDkwMy4uYzI5ZjQ0ZjI0NjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKQEAgLTI1LDYg KzI1LDcgQEAgdHlwZWRlZiBlbnVtCiB7CiAJSU5ERVhfQ1JFQVRFX1NFVF9SRUFEWSwKIAlJTkRF WF9DUkVBVEVfU0VUX1ZBTElELAorCUlOREVYX0RST1BfQ0xFQVJfUkVBRFksCiAJSU5ERVhfRFJP UF9DTEVBUl9WQUxJRCwKIAlJTkRFWF9EUk9QX1NFVF9ERUFELAogfSBJbmRleFN0YXRlRmxhZ3NB Y3Rpb247CkBAIC02NSw2ICs2Niw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2NoZWNrX3ByaW1hcnlf a2V5KFJlbGF0aW9uIGhlYXBSZWwsCiAjZGVmaW5lCUlOREVYX0NSRUFURV9JRl9OT1RfRVhJU1RT CQkJKDEgPDwgNCkKICNkZWZpbmUJSU5ERVhfQ1JFQVRFX1BBUlRJVElPTkVECQkJKDEgPDwgNSkK ICNkZWZpbmUgSU5ERVhfQ1JFQVRFX0lOVkFMSUQJCQkJKDEgPDwgNikKKyNkZWZpbmUgSU5ERVhf Q1JFQVRFX0FVWElMSUFSWQkJCQkoMSA8PCA3KQogCiBleHRlcm4gT2lkCWluZGV4X2NyZWF0ZShS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgY29uc3QgY2hhciAqaW5kZXhSZWxhdGlvbk5h bWUsCkBAIC0xMDAsNiArMTAyLDExIEBAIGV4dGVybiBPaWQJaW5kZXhfY29uY3VycmVudGx5X2Ny ZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCQkgICBPaWQgdGFibGVz cGFjZU9pZCwKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpuZXdOYW1lKTsKIAorZXh0ZXJuIE9p ZAlpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJ CQkJCQkJCQkJICBPaWQgbWFpbkluZGV4SWQsCisJCQkJCQkJCQkJICBPaWQgdGFibGVzcGFjZU9p ZCwKKwkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm5ld05hbWUpOworCiBleHRlcm4gdm9pZCBpbmRl eF9jb25jdXJyZW50bHlfYnVpbGQoT2lkIGhlYXBSZWxhdGlvbklkLAogCQkJCQkJCQkJIE9pZCBp bmRleFJlbGF0aW9uSWQpOwogCkBAIC0xNDUsNyArMTUyLDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhf YnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJYm9vbCBpc3JlaW5kZXgsCiAJCQkJ CQlib29sIHBhcmFsbGVsKTsKIAotZXh0ZXJuIHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJ ZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiB2b2lkIHZhbGlkYXRl X2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qg c25hcHNob3QpOwogCiBleHRlcm4gdm9pZCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4 SWQsIEluZGV4U3RhdGVGbGFnc0FjdGlvbiBhY3Rpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3Mu aAppbmRleCAxY2RlNGJkOWJjZi4uOWU5M2E0ZDkzMTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3Byb2dyZXNzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3Mu aApAQCAtOTQsMTQgKzk0LDE1IEBACiAKIC8qIFBoYXNlcyBvZiBDUkVBVEUgSU5ERVggKGFzIGFk dmVydGlzZWQgdmlhIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSkgKi8KICNkZWZpbmUgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMQkJCTEKLSNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX0JVSUxECQkJMgotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8y CQkJMwotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYU0NBTgk0 Ci0jZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9TT1JUCQk1Ci0jZGVm aW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9UQUJMRVNDQU4JNgotI2RlZmlu ZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zCQkJNworI2RlZmluZSBQUk9HUkVTU19D UkVBVEVJRFhfUEhBU0VfV0FJVF8yCQkJMgorI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0VfQlVJTEQJCQkzCisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMJCQk0 CisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhTQ0FOCTUKKyNk ZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1NPUlQJCTYKKyNkZWZpbmUg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lEWE1FUkdFCTcKICNkZWZpbmUgUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNAkJCTgKICNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRF SURYX1BIQVNFX1dBSVRfNQkJCTkKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dB SVRfNgkJCTEwCiAKIC8qCiAgKiBTdWJwaGFzZXMgb2YgQ1JFQVRFIElOREVYLCBmb3IgaW5kZXhf YnVpbGQuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBiL3NyYy9p bmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCmluZGV4IDU0NzNjZTlhMjg4Li40OTA0NzQ4ZjVmYyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTk5LDcgKzk5LDggQEAgZXh0ZXJuIEluZGV4SW5mbyAq bWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLAog CQkJCQkJCQlMaXN0ICpleHByZXNzaW9ucywgTGlzdCAqcHJlZGljYXRlcywKIAkJCQkJCQkJYm9v bCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJCQlib29sIGlzcmVhZHks IGJvb2wgY29uY3VycmVudCwKLQkJCQkJCQkJYm9vbCBzdW1tYXJpemluZywgYm9vbCB3aXRob3V0 b3ZlcmxhcHMpOworCQkJCQkJCQlib29sIHN1bW1hcml6aW5nLCBib29sIHdpdGhvdXRvdmVybGFw cywKKwkJCQkJCQkJYm9vbCBhdXhpbGlhcnkpOwogCiBleHRlcm4gTm9kZSAqbWFrZVN0cmluZ0Nv bnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKTsKIGV4dGVybiBEZWZFbGVtICptYWtlRGVmRWxl bShjaGFyICpuYW1lLCBOb2RlICphcmcsIGludCBsb2NhdGlvbik7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggYzc0M2ZjNzY5Y2IuLmFhNGZhNzYzNThh IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CkBAIC0xNDIz LDYgKzE0MjMsNyBAQCBERVRBSUw6ICBLZXkgKGYxKT0oYikgYWxyZWFkeSBleGlzdHMuCiBDUkVB VEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgzIE9OIGNvbmN1cl9oZWFw KGYyKTsKIEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9pbmRl eDMiCiBERVRBSUw6ICBLZXkgKGYyKT0oYikgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29u Y3VyX2luZGV4M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBh cnRpYWwgaW5kZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRM WSBjb25jdXJfaW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJF IGYxPSd4JzsKQEAgLTMxOTcsNiArMzE5OCw3IEBAIElOU0VSVCBJTlRPIGNvbmN1cl9yZWluZGV4 X3RhYjQgVkFMVUVTICgxKSwgKDEpLCAoMik7CiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJF TlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxKTsKIEVS Uk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9yZWluZGV4X2luZDUi CiBERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29uY3Vy X3JlaW5kZXhfaW5kNV9jY2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5k ZXggZmFpbHMgd2l0aCB0aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0 ZWQgaXMgaXRzZWxmIGludmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVgg Q09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDU7CkBAIC0zMjA5LDggKzMyMTEsMTAgQEAg REVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCiAgYzEgICAgIHwgaW50ZWdlciB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgCiBJbmRleGVzOgogICAgICJjb25jdXJfcmVpbmRleF9p bmQ1IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAorICAgICJjb25jdXJfcmVpbmRleF9pbmQ1 X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAogICAgICJjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3 IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAogCitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4 X2luZDVfY2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7CiAtLSBU aGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4g YmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9 IDE7CkBAIC0zMjM4LDYgKzMyNDIsNDQgQEAgSW5kZXhlczoKICAgICAiY29uY3VyX3JlaW5kZXhf aW5kNSIgVU5JUVVFLCBidHJlZSAoYzEpCiAKIERST1AgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFi NDsKKy0tIENoZWNrIGhhbmRsaW5nIG9mIGF1eGlsaWFyeSBpbmRleGVzCitDUkVBVEUgVEFCTEUg YXV4X2luZGV4X3RhYjUgKGMxIGludCk7CitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxV RVMgKDEpLCAoMSksICgyKTsKKy0tIFRoaXMgdHJpY2sgY3JlYXRlcyBhbiBpbnZhbGlkIGluZGV4 IGFuZCBhdXhpbGlhcnkgaW5kZXggZm9yIGl0CitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJF TlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworRVJST1I6ICBjb3Vs ZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRBSUw6ICBLZXkg KGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRh YmxlICJwdWJsaWMuYXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlv biB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAg ICAgICB8IAorSW5kZXhlczoKKyAgICAiYXV4X2luZGV4X2luZDYiIFVOSVFVRSwgYnRyZWUgKGMx KSBJTlZBTElECisgICAgImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAor CistLSBOb3QgYWxsb3dlZCB0byByZWluZGV4IGF1eGlsaWFyeSBpbmRleAorUkVJTkRFWCBJTkRF WCBhdXhfaW5kZXhfaW5kNl9jY2F1eDsKK0VSUk9SOiAgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5k ZXggImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBub3Qgc3VwcG9ydGVkCistLSBDb25jdXJyZW50bHkg YWxzbworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CitF UlJPUjogIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5kZXhfaW5kNl9jY2F1eCIg bm90IHN1cHBvcnRlZAorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5 LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGNvbmN1cl9yZWlu ZGV4X3RhYjQgV0hFUkUgYzEgPSAxOworRVJST1I6ICByZWxhdGlvbiAiY29uY3VyX3JlaW5kZXhf dGFiNCIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhf dGFiNCBXSEVSRSBjMSA9IDE7CisgICAgICAgICAgICAgICAgICAgIF4KKy0tIFNob3VsZCBiZSBz a2lwcGVkIGR1cmluZyByZWluZGV4CitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1OworRVJS T1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRB SUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1 cmluZyBjb25jdXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9p bmRleF90YWI1OworV0FSTklORzogIHNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCAi cHVibGljLmF1eF9pbmRleF9pbmQ2IgorSElOVDogIFVzZSBEUk9QIElOREVYIG9yIFJFSU5ERVgg SU5ERVguCitXQVJOSU5HOiAgc2tpcHBpbmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggInB1 YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1eCIKK05PVElDRTogIHRhYmxlICJhdXhfaW5kZXhfdGFi NSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBjYW4gYmUgcmVpbmRleGVkIGNvbmN1cnJlbnRseQorRFJP UCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKIC0tIENoZWNrIGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0 aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRoZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhl IHJlYnVpbHQgaW5kZXhlcyBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsCiAtLSBkZWZpbml0aW9u cy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKaW5kZXggNGQyOWZiODUyOTMu LjU0YjI1MWI5NmVhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4 aW5nLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dApAQCAt MTU4NSwxMCArMTU4NSwxMSBAQCBzZWxlY3QgaW5kZXhyZWxpZDo6cmVnY2xhc3MsIGluZGlzdmFs aWQsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHBhcnRl ZF9pc3ZhbGlkX2lkeCAgICAgICAgICAgICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90 YWIgICAgfCAKICBwYXJ0ZWRfaXN2YWxpZF9pZHhfMTEgICAgICAgICAgfCBmICAgICAgICAgIHwg cGFydGVkX2lzdmFsaWRfdGFiXzExIHwgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHgKKyBw YXJ0ZWRfaXN2YWxpZF9pZHhfMTFfY2NhdXggICAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFs aWRfdGFiXzExIHwgCiAgcGFydGVkX2lzdmFsaWRfdGFiXzEyX2V4cHJfaWR4IHwgdCAgICAgICAg ICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xMiB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xX2V4cHJfaWR4 CiAgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHggIHwgZiAgICAgICAgICB8IHBhcnRlZF9p c3ZhbGlkX3RhYl8xICB8IHBhcnRlZF9pc3ZhbGlkX2lkeAogIHBhcnRlZF9pc3ZhbGlkX3RhYl8y X2V4cHJfaWR4ICB8IHQgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMiAgfCBwYXJ0ZWRf aXN2YWxpZF9pZHgKLSg1IHJvd3MpCisoNiByb3dzKQogCiBkcm9wIHRhYmxlIHBhcnRlZF9pc3Zh bGlkX3RhYjsKIC0tIENoZWNrIHN0YXRlIG9mIHJlcGxpY2EgaW5kZXhlcyB3aGVuIGF0dGFjaGlu ZyBhIHBhcnRpdGlvbi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggMzcyYTIx ODhjMjIuLmM4ZGFlMzI4M2IyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAt MjA2MCwxNCArMjA2MCwxNSBAQCBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRleHwgU0VMRUNU IHMucGlkLAogICAgICAgICBDQVNFIHMucGFyYW0xMAogICAgICAgICAgICAgV0hFTiAwIFRIRU4g J2luaXRpYWxpemluZyc6OnRleHQKICAgICAgICAgICAgIFdIRU4gMSBUSEVOICd3YWl0aW5nIGZv ciB3cml0ZXJzIGJlZm9yZSBidWlsZCc6OnRleHQKLSAgICAgICAgICAgIFdIRU4gMiBUSEVOICgn YnVpbGRpbmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8IHBnX2luZGV4 YW1fcHJvZ3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTExKSksICcnOjp0 ZXh0KSkKLSAgICAgICAgICAgIFdIRU4gMyBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9y ZSB2YWxpZGF0aW9uJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA0IFRIRU4gJ2luZGV4IHZhbGlk YXRpb246IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAotICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2lu ZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA2 IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIHRhYmxlJzo6dGV4dAotICAgICAgICAg ICAgV0hFTiA3IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnOjp0ZXh0Ci0gICAgICAg ICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgbWFya2luZyBkZWFk Jzo6dGV4dAotICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVm b3JlIGRyb3BwaW5nJzo6dGV4dAorICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9y IHdyaXRlcnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4g MyBUSEVOICgnYnVpbGRpbmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8 IHBnX2luZGV4YW1fcHJvZ3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTEx KSksICcnOjp0ZXh0KSkKKyAgICAgICAgICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0 ZXJzIGJlZm9yZSB2YWxpZGF0aW9uJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2lu ZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA2 IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAorICAgICAgICAg ICAgV0hFTiA3IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcyc6OnRleHQK KyAgICAgICAgICAgIFdIRU4gOCBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJzo6dGV4 dAorICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1h cmtpbmcgZGVhZCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2FpdGluZyBmb3Ig cmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnOjp0ZXh0CiAgICAgICAgICAgICBFTFNFIE5VTEw6OnRl eHQKICAgICAgICAgRU5EIEFTIHBoYXNlLAogICAgIHMucGFyYW00IEFTIGxvY2tlcnNfdG90YWws CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCBlYWJjOTYyM2IyMC4uN2Fl OGU0NDAxOWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApAQCAtNDk5LDYg KzQ5OSw3IEBAIENSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIElGIE5PVCBFWElTVFMg Y29uY3VyX2luZGV4MiBPTiBjb25jdXJfaGVhcChmMSk7CiBJTlNFUlQgSU5UTyBjb25jdXJfaGVh cCBWQUxVRVMgKCdiJywneCcpOwogLS0gY2hlY2sgaWYgY29uc3RyYWludCBpcyBlbmZvcmNlZCBw cm9wZXJseSBhdCBidWlsZCB0aW1lCiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBj b25jdXJfaW5kZXgzIE9OIGNvbmN1cl9oZWFwKGYyKTsKK0RST1AgSU5ERVggY29uY3VyX2luZGV4 M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBhcnRpYWwgaW5k ZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJf aW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSd4JzsK QEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgQ1JFQVRFIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYjQg KGMxIGludCk7CiBJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWI0IFZBTFVFUyAoMSksICgx KSwgKDIpOwogLS0gVGhpcyB0cmljayBjcmVhdGVzIGFuIGludmFsaWQgaW5kZXguCiBDUkVBVEUg VU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9y ZWluZGV4X3RhYjQgKGMxKTsKK0RST1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY2F1eDsK IC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5kZXggZmFpbHMgd2l0aCB0aGUgc2Ft ZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0ZWQgaXMgaXRzZWxmIGludmFsaWQs IGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9y ZWluZGV4X2luZDU7CiBcZCBjb25jdXJfcmVpbmRleF90YWI0CitEUk9QIElOREVYIGNvbmN1cl9y ZWluZGV4X2luZDVfY2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7 CiAtLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRl eCBjYW4gYmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVS RSBjMSA9IDE7CkBAIC0xMzI2LDYgKzEzMjksMjQgQEAgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5U TFkgY29uY3VyX3JlaW5kZXhfaW5kNTsKIFxkIGNvbmN1cl9yZWluZGV4X3RhYjQKIERST1AgVEFC TEUgY29uY3VyX3JlaW5kZXhfdGFiNDsKIAorLS0gQ2hlY2sgaGFuZGxpbmcgb2YgYXV4aWxpYXJ5 IGluZGV4ZXMKK0NSRUFURSBUQUJMRSBhdXhfaW5kZXhfdGFiNSAoYzEgaW50KTsKK0lOU0VSVCBJ TlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKSwgKDIpOworLS0gVGhpcyB0cmljayBj cmVhdGVzIGFuIGludmFsaWQgaW5kZXggYW5kIGF1eGlsaWFyeSBpbmRleCBmb3IgaXQKK0NSRUFU RSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90 YWI1IChjMSk7CitcZCBhdXhfaW5kZXhfdGFiNQorLS0gTm90IGFsbG93ZWQgdG8gcmVpbmRleCBh dXhpbGlhcnkgaW5kZXgKK1JFSU5ERVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CistLSBD b25jdXJyZW50bHkgYWxzbworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2lu ZDZfY2NhdXg7CistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNv IHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhf dGFiNCBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleAor UkVJTkRFWCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmlu ZyBjb25jdXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRl eF90YWI1OworRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKwogLS0gQ2hlY2sgaGFuZGxpbmcg b2YgaW5kZXhlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZp bml0aW9ucyBvZiB0aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwK IC0tIGRlZmluaXRpb25zLgotLSAKMi40My4wCgo= --0000000000002ad96a064431f950 Content-Type: text/plain; charset="US-ASCII"; name="v27-0004-Add-Datum-storage-support-to-tuplestore.patch" Content-Disposition: attachment; filename="v27-0004-Add-Datum-storage-support-to-tuplestore.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg71e4 RnJvbSA1ZjgzM2Q3Y2ZlYmNjZjIzMDIwM2ZmMTNkNjc5Njg4YTNjNDZjMmNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAyNSBKYW4gMjAyNSAxMzozMzoyMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDQvOF0gQWRkIERhdHVtIHN0b3JhZ2Ugc3VwcG9ydCB0byB0dXBsZXN0b3JlCgog RXh0ZW5kIHR1cGxlc3RvcmUgdG8gc3RvcmUgaW5kaXZpZHVhbCBEYXR1bSB2YWx1ZXM6Ci0gZml4 ZWQtbGVuZ3RoIGRhdGF0eXBlczogc3RvcmUgcmF3IGJ5dGVzIHdpdGhvdXQgYSBsZW5ndGggaGVh ZGVyCi0gdmFyaWFibGUtbGVuZ3RoIGRhdGF0eXBlczogaW5jbHVkZSBhIGxlbmd0aCBoZWFkZXIg YW5kIHBhZGRpbmcKLSBieS12YWx1ZSB0eXBlczogc3RvcmUgaW5saW5lCgpUaGlzIHN1cHBvcnQg ZW5hYmxlcyB1c2FnZXMgdHVwbGVzdG9yZSBmb3Igbm9uLXR1cGxlIGRhdGEgKFRJRHMpIGluIHRo ZSBuZXh0IGNvbW1pdC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc3RvcmUuYyB8 IDMwMiArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy90dXBs ZXN0b3JlLmggICAgICB8ICAzMyArLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjYzIGluc2VydGlvbnMo KyksIDcyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQv dHVwbGVzdG9yZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXN0b3JlLmMKaW5kZXgg YzlhZWNhYjhkNjYuLjM4MDc2ZjM0NThlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9z b3J0L3R1cGxlc3RvcmUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc3RvcmUu YwpAQCAtMSwxNiArMSwxOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogdHVwbGVzdG9y ZS5jCi0gKgkgIEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3JhcnkgdHVwbGUgc3RvcmFn ZS4KKyAqCSAgR2VuZXJhbGl6ZWQgcm91dGluZXMgZm9yIHRlbXBvcmFyeSBzdG9yYWdlIG9mIHR1 cGxlcyBhbmQgRGF0dW1zLgorICoKKyAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVtcG9yYXJ5IHN0 b3JhZ2Ugb2YgZWl0aGVyIHR1cGxlcyBvciBzaW5nbGUKKyAqIERhdHVtIHZhbHVlcyBmb3IgcHVy cG9zZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2gKKyAqIGZpbGVz LCBldGMuIEl0IGlzIGVzc2VudGlhbGx5IGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNv cnQuYzsKKyAqIGl0IGRvZXMgbm8gc29ydGluZyBvZiB0dXBsZXMgYnV0IGNhbiBvbmx5IHN0b3Jl IGFuZCByZWd1cmdpdGF0ZSBhIHNlcXVlbmNlCisgKiBvZiB0dXBsZXMuICBIb3dldmVyLCBiZWNh dXNlIG5vIHNvcnQgaXMgcmVxdWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQKKyAqIHJlYWRp bmcgdGhlIHNlcXVlbmNlIGJlZm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4KKyAqCisgKiBU aGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGN1cnNvcnMsIGJlY2F1c2UgaXQgYWxsb3dz IHJhbmRvbSBhY2Nlc3MKKyAqIHdpdGhpbiB0aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24gb2Yg YSBxdWVyeSB3aXRob3V0IGhhdmluZyB0byBwcm9jZXNzCisgKiB0aGUgdW5kZXJseWluZyBzY2Fu IHRvIGNvbXBsZXRpb24uCiAgKgotICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0ZW1wb3Jhcnkgc3Rv cmFnZSBvZiB0dXBsZXMgZm9yIHB1cnBvc2VzIHN1Y2gKLSAqIGFzIE1hdGVyaWFsaXplIG5vZGVz LCBoYXNoam9pbiBiYXRjaCBmaWxlcywgZXRjLiAgSXQgaXMgZXNzZW50aWFsbHkKLSAqIGEgZHVt YmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsgaXQgZG9lcyBubyBzb3J0aW5nIG9mIHR1 cGxlcwotICogYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBhIHNlcXVlbmNlIG9m IHR1cGxlcy4gIEhvd2V2ZXIsCi0gKiBiZWNhdXNlIG5vIHNvcnQgaXMgcmVxdWlyZWQsIGl0IGlz IGFsbG93ZWQgdG8gc3RhcnQgcmVhZGluZyB0aGUgc2VxdWVuY2UKLSAqIGJlZm9yZSBpdCBoYXMg YWxsIGJlZW4gd3JpdHRlbi4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3Vyc29y cywKLSAqIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3Mgd2l0aGluIHRoZSBhbHJlYWR5 LXNjYW5uZWQgcG9ydGlvbiBvZgotICogYSBxdWVyeSB3aXRob3V0IGhhdmluZyB0byBwcm9jZXNz IHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqIEFsc28sIGl0IGlzIHBvc3Np YmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW5kZXBlbmRlbnQgcmVhZCBwb2ludGVycy4KICAqCiAg KiBBIHRlbXBvcmFyeSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRhIGlmIGl0IGV4Y2Vl ZHMgdGhlCkBAIC02MSw2ICs2NCw4IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKKyNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVzb3duZXIuaCIKIApA QCAtMTE1LDE2ICsxMjAsMTUgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogCUJ1ZkZpbGUgICAg Km15ZmlsZTsJCQkvKiB1bmRlcmx5aW5nIGZpbGUsIG9yIE5VTEwgaWYgbm9uZSAqLwogCU1lbW9y eUNvbnRleHQgY29udGV4dDsJCS8qIG1lbW9yeSBjb250ZXh0IGZvciBob2xkaW5nIHR1cGxlcyAq LwogCVJlc291cmNlT3duZXIgcmVzb3duZXI7CQkvKiByZXNvd25lciBmb3IgaG9sZGluZyB0ZW1w IGZpbGVzICovCisJT2lkCQkJZGF0dW1UeXBlOwkJLyogSW52YWxpZE9pZCBvciBvaWQgb2YgRGF0 dW0ncyB0byBiZSBzdG9yZWQgKi8KKwlpbnQxNgkJZGF0dW1UeXBlTGVuOwkvKiB0eXBlbGVuIG9m IHRoYXQgRGF0dW0gKi8KKwlib29sCQlkYXR1bVR5cGVCeVZhbDsgLyogYnktdmFsdWUgb2YgdGhh dCBhdHVtICovCiAKIAkvKgogCSAqIFRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzIGRlY291cGxlIHRo ZSByb3V0aW5lcyB0aGF0IG11c3Qga25vdyB3aGF0IGtpbmQKIAkgKiBvZiB0dXBsZSB3ZSBhcmUg aGFuZGxpbmcgZnJvbSB0aGUgcm91dGluZXMgdGhhdCBkb24ndCBuZWVkIHRvIGtub3cgaXQuCiAJ ICogVGhleSBhcmUgc2V0IHVwIGJ5IHRoZSB0dXBsZXN0b3JlX2JlZ2luX3h4eCByb3V0aW5lcy4K IAkgKgotCSAqIChBbHRob3VnaCB0dXBsZXN0b3JlLmMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMg aGVhcCB0dXBsZXMsIEkndmUgY29waWVkCi0JICogdGhpcyBwYXJ0IG9mIHR1cGxlc29ydC5jIHNv IHRoYXQgZXh0ZW5zaW9uIHRvIG90aGVyIGtpbmRzIG9mIG9iamVjdHMKLQkgKiB3aWxsIGJlIGVh c3kgaWYgaXQncyBldmVyIG5lZWRlZC4pCi0JICoKIAkgKiBGdW5jdGlvbiB0byBjb3B5IGEgc3Vw cGxpZWQgaW5wdXQgdHVwbGUgaW50byBwYWxsb2MnZCBzcGFjZS4gKE5COiB3ZQogCSAqIGFzc3Vt ZSB0aGF0IGEgc2luZ2xlIHBmcmVlKCkgaXMgZW5vdWdoIHRvIHJlbGVhc2UgdGhlIHR1cGxlIGxh dGVyLCBzbwogCSAqIHRoZSByZXByZXNlbnRhdGlvbiBtdXN0IGJlICJmbGF0IiBpbiBvbmUgcGFs bG9jIGNodW5rLikgc3RhdGUtPmF2YWlsTWVtCkBAIC0xNDMsMTIgKzE0NywxOCBAQCBzdHJ1Y3Qg VHVwbGVzdG9yZXN0YXRlCiAKIAkvKgogCSAqIEZ1bmN0aW9uIHRvIHJlYWQgYSBzdG9yZWQgdHVw bGUgZnJvbSB0YXBlIGJhY2sgaW50byBtZW1vcnkuICdsZW4nIGlzCi0JICogdGhlIGFscmVhZHkt cmVhZCBsZW5ndGggb2YgdGhlIHN0b3JlZCB0dXBsZS4gIENyZWF0ZSBhbmQgcmV0dXJuIGEKLQkg KiBwYWxsb2MnZCBjb3B5LCBhbmQgZGVjcmVhc2Ugc3RhdGUtPmF2YWlsTWVtIGJ5IHRoZSBhbW91 bnQgb2YgbWVtb3J5Ci0JICogc3BhY2UgY29uc3VtZWQuCisJICogdGhlIGFscmVhZHkta25vd24g KHJlYWQgb2YgY29uc3RhbnQpIGxlbmd0aCBvZiB0aGUgc3RvcmVkIHR1cGxlLgorCSAqIENyZWF0 ZSBhbmQgcmV0dXJuIGEgcGFsbG9jJ2QgY29weSwgYW5kIGRlY3JlYXNlIHN0YXRlLT5hdmFpbE1l bSBieSB0aGUKKwkgKiBhbW91bnQgb2YgbWVtb3J5IHNwYWNlIGNvbnN1bWVkLgogCSAqLwogCXZv aWQJICAgKigqcmVhZHR1cCkgKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBs ZW4pOwogCisJLyoKKwkgKiBGdW5jdGlvbiB0byBnZXQgbGVuZ2ggb2YgdHVwbGUgZnJvbSB0YXBl LiBVc2VkIHRvIHByb3ZpZGUgJ2xlbicgYXJndW1lbnQKKwkgKiBmb3IgcmVhZHR1cCAoc2VlIGFi b3ZlKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQoKmxlbnR1cCkoVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgYm9vbCBlb2ZPSyk7CisKIAkvKgogCSAqIFRoaXMgYXJyYXkgaG9sZHMgcG9pbnRlcnMgdG8g dHVwbGVzIGluIG1lbW9yeSBpZiB3ZSBhcmUgaW4gc3RhdGUgSU5NRU0uCiAJICogSW4gc3RhdGVz IFdSSVRFRklMRSBhbmQgUkVBREZJTEUgaXQncyBub3QgdXNlZC4KQEAgLTE4NSw2ICsxOTUsNyBA QCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAjZGVmaW5lIENPUFlUVVAoc3RhdGUsdHVwKQkoKCoo c3RhdGUpLT5jb3B5dHVwKSAoc3RhdGUsIHR1cCkpCiAjZGVmaW5lIFdSSVRFVFVQKHN0YXRlLHR1 cCkgKCgqKHN0YXRlKS0+d3JpdGV0dXApIChzdGF0ZSwgdHVwKSkKICNkZWZpbmUgUkVBRFRVUChz dGF0ZSxsZW4pCSgoKihzdGF0ZSktPnJlYWR0dXApIChzdGF0ZSwgbGVuKSkKKyNkZWZpbmUgTEVO VFVQKHN0YXRlLGVvZk9LKQkoKCooc3RhdGUpLT5sZW50dXApIChzdGF0ZSwgZW9mT0spKQogI2Rl ZmluZSBMQUNLTUVNKHN0YXRlKQkJKChzdGF0ZSktPmF2YWlsTWVtIDwgMCkKICNkZWZpbmUgVVNF TUVNKHN0YXRlLGFtdCkJKChzdGF0ZSktPmF2YWlsTWVtIC09IChhbXQpKQogI2RlZmluZSBGUkVF TUVNKHN0YXRlLGFtdCkJKChzdGF0ZSktPmF2YWlsTWVtICs9IChhbXQpKQpAQCAtMTkzLDkgKzIw NCw5IEBAIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUKICAqCiAgKiBOT1RFUyBhYm91dCBvbi10YXBl IHJlcHJlc2VudGF0aW9uIG9mIHR1cGxlczoKICAqCi0gKiBXZSByZXF1aXJlIHRoZSBmaXJzdCAi dW5zaWduZWQgaW50IiBvZiBhIHN0b3JlZCB0dXBsZSB0byBiZSB0aGUgdG90YWwgc2l6ZQotICog b24tdGFwZSBvZiB0aGUgdHVwbGUsIGluY2x1ZGluZyBpdHNlbGYgKHNvIGl0IGlzIG5ldmVyIHpl cm8pLgotICogVGhlIHJlbWFpbmRlciBvZiB0aGUgc3RvcmVkIHR1cGxlCisgKiBJbiBjYXNlIG9m IHR1cGxlcyB3ZSB1c2UgZmlyc3QgInVuc2lnbmVkIGludCIgb2YgYSBzdG9yZWQgdHVwbGUKKyAq IHRvIGJlIHRoZSB0b3RhbCBzaXplIG9uLXRhcGUgb2YgdGhlIHR1cGxlLCBpbmNsdWRpbmcgaXRz ZWxmCisgKiAoc28gaXQgaXMgbmV2ZXIgemVybykuIFRoZSByZW1haW5kZXIgb2YgdGhlIHN0b3Jl ZCB0dXBsZQogICogbWF5IG9yIG1heSBub3QgbWF0Y2ggdGhlIGluLW1lbW9yeSByZXByZXNlbnRh dGlvbiBvZiB0aGUgdHVwbGUgLS0tCiAgKiBhbnkgY29udmVyc2lvbiBuZWVkZWQgaXMgdGhlIGpv YiBvZiB0aGUgd3JpdGV0dXAgYW5kIHJlYWR0dXAgcm91dGluZXMuCiAgKgpAQCAtMjA2LDEwICsy MTcsMTMgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogICogc3RhdGUtPmJhY2t3YXJkIGlzIG5v dCBzZXQsIHRoZSB3cml0ZS9yZWFkIHJvdXRpbmVzIG1heSBvbWl0IHRoZSBleHRyYQogICogbGVu Z3RoIHdvcmQuCiAgKgorICogSW4gY2FzZSBvZiBEYXR1bSB3aXRoIGNvbnN0YW50IGxlbmdodCBi b3RoICJ1bnNpZ25lZCBpbnQiIGFyZSBvbW1pdHRlZC4KKyAqCiAgKiB3cml0ZXR1cCBpcyBleHBl Y3RlZCB0byB3cml0ZSBib3RoIGxlbmd0aCB3b3JkcyBhcyB3ZWxsIGFzIHRoZSB0dXBsZQogICog ZGF0YS4gIFdoZW4gcmVhZHR1cCBpcyBjYWxsZWQsIHRoZSB0YXBlIGlzIHBvc2l0aW9uZWQganVz dCBhZnRlciB0aGUKLSAqIGZyb250IGxlbmd0aCB3b3JkOyByZWFkdHVwIG11c3QgcmVhZCB0aGUg dHVwbGUgZGF0YSBhbmQgYWR2YW5jZSBwYXN0Ci0gKiB0aGUgYmFjayBsZW5ndGggd29yZCAoaWYg cHJlc2VudCkuCisgKiBmcm9udCBsZW5ndGggd29yZCAoaWYgaXQgbm90IG9tbWl0dGVkIGxpa2Ug aW4gY2FzZSBvZiBjb250YW50LXNpemUgRGF0dW0pOworICogcmVhZHR1cCBtdXN0IHJlYWQgdGhl IHR1cGxlIGRhdGEgYW5kIGFkdmFuY2UgcGFzdCB0aGUgYmFjayBsZW5ndGggd29yZAorICogKGlm IHByZXNlbnQpLgogICoKICAqIFRoZSB3cml0ZS9yZWFkIHJvdXRpbmVzIGNhbiBtYWtlIHVzZSBv ZiB0aGUgdHVwbGUgZGVzY3JpcHRpb24gZGF0YQogICogc3RvcmVkIGluIHRoZSBUdXBsZXN0b3Jl c3RhdGUgcmVjb3JkLCBpZiBuZWVkZWQuIFRoZXkgYXJlIGFsc28gZXhwZWN0ZWQKQEAgLTI0MSwx MSArMjU1LDE2IEBAIHN0YXRpYyBUdXBsZXN0b3Jlc3RhdGUgKnR1cGxlc3RvcmVfYmVnaW5fY29t bW9uKGludCBlZmxhZ3MsCiBzdGF0aWMgdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxlX2NvbW1vbihU dXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB2b2lkICp0dXBsZSk7CiBzdGF0aWMgdm9pZCBkdW1wdHVw bGVzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgdHVwbGVzdG9yZV91cGRh dGVtYXgoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGdldGxl bihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKTsKKworc3RhdGljIHVuc2lnbmVk IGludCBsZW50dXBfaGVhcChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKTsKIHN0 YXRpYyB2b2lkICpjb3B5dHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVw KTsKIHN0YXRpYyB2b2lkIHdyaXRldHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9p ZCAqdHVwKTsKIHN0YXRpYyB2b2lkICpyZWFkdHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgdW5zaWduZWQgaW50IGxlbik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGVudHVwX2RhdHVt KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spOworc3RhdGljIHZvaWQgKmNvcHl0 dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pOworc3RhdGljIHZv aWQgd3JpdGV0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pOwor c3RhdGljIHZvaWQgKnJlYWR0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWdu ZWQgaW50IGxlbik7CiAKIC8qCiAgKgkJdHVwbGVzdG9yZV9iZWdpbl94eHgKQEAgLTI2OCw2ICsy ODcsMTIgQEAgdHVwbGVzdG9yZV9iZWdpbl9jb21tb24oaW50IGVmbGFncywgYm9vbCBpbnRlclhh Y3QsIGludCBtYXhLQnl0ZXMpCiAJc3RhdGUtPmFsbG93ZWRNZW0gPSBtYXhLQnl0ZXMgKiAoaW50 NjQpIDEwMjQ7CiAJc3RhdGUtPmF2YWlsTWVtID0gc3RhdGUtPmFsbG93ZWRNZW07CiAJc3RhdGUt Pm15ZmlsZSA9IE5VTEw7CisJLyoKKwkgKiBTZXQgRGF0dW0gcmVsYXRlZCBkYXRhIHRvIGludmFs aWQgYnkgZGVmYXVsdC4KKwkgKi8KKwlzdGF0ZS0+ZGF0dW1UeXBlID0gSW52YWxpZE9pZDsKKwlz dGF0ZS0+ZGF0dW1UeXBlTGVuID0gIDA7CisJc3RhdGUtPmRhdHVtVHlwZUJ5VmFsID0gZmFsc2U7 CiAKIAkvKgogCSAqIFRoZSBwYWxsb2MvcGZyZWUgcGF0dGVybiBmb3IgdHVwbGUgbWVtb3J5IGlz IGluIGEgRklGTyBwYXR0ZXJuLiAgQQpAQCAtMzQ1LDYgKzM3MCwzNiBAQCB0dXBsZXN0b3JlX2Jl Z2luX2hlYXAoYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVz KQogCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9oZWFwOwogCXN0YXRlLT53cml0ZXR1cCA9IHdy aXRldHVwX2hlYXA7CiAJc3RhdGUtPnJlYWR0dXAgPSByZWFkdHVwX2hlYXA7CisJc3RhdGUtPmxl bnR1cCA9IGxlbnR1cF9oZWFwOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogVGhlIHNh bWUgYXMgdHVwbGVzdG9yZV9iZWdpbl9oZWFwIGJ1dCBjcmVhdGUgc3RvcmUgZm9yIERhdHVtIHZh bHVlcy4KKyAqLworVHVwbGVzdG9yZXN0YXRlICoKK3R1cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lk IGRhdHVtVHlwZSwgYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5 dGVzKQoreworCVR1cGxlc3RvcmVzdGF0ZSAqc3RhdGU7CisJaW50CQkJZWZsYWdzOworCisJLyoK KwkgKiBUaGlzIGludGVycHJldGF0aW9uIG9mIHRoZSBtZWFuaW5nIG9mIHJhbmRvbUFjY2VzcyBp cyBjb21wYXRpYmxlIHdpdGgKKwkgKiB0aGUgcHJlLTguMyBiZWhhdmlvciBvZiB0dXBsZXN0b3Jl cy4KKwkgKi8KKwllZmxhZ3MgPSByYW5kb21BY2Nlc3MgPworCQkoRVhFQ19GTEFHX0JBQ0tXQVJE IHwgRVhFQ19GTEFHX1JFV0lORCkgOgorCQkoRVhFQ19GTEFHX1JFV0lORCk7CisKKwlzdGF0ZSA9 IHR1cGxlc3RvcmVfYmVnaW5fY29tbW9uKGVmbGFncywgaW50ZXJYYWN0LCBtYXhLQnl0ZXMpOwor CXN0YXRlLT5kYXR1bVR5cGUgPSBkYXR1bVR5cGU7CisJZ2V0X3R5cGxlbmJ5dmFsKHN0YXRlLT5k YXR1bVR5cGUsICZzdGF0ZS0+ZGF0dW1UeXBlTGVuLCAmc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKTsK KworCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9kYXR1bTsKKwlzdGF0ZS0+d3JpdGV0dXAgPSB3 cml0ZXR1cF9kYXR1bTsKKwlzdGF0ZS0+cmVhZHR1cCA9IHJlYWR0dXBfZGF0dW07CisJc3RhdGUt PmxlbnR1cCA9IGxlbnR1cF9kYXR1bTsKIAogCXJldHVybiBzdGF0ZTsKIH0KQEAgLTQ0MywxNiAr NDk4LDE5IEBAIHR1cGxlc3RvcmVfY2xlYXIoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSkKIAl7CiAJ CWludDY0CQlhdmFpbE1lbSA9IHN0YXRlLT5hdmFpbE1lbTsKIAotCQkvKgotCQkgKiBCZWxvdywg d2UgcmVzZXQgdGhlIG1lbW9yeSBjb250ZXh0IGZvciBzdG9yaW5nIHR1cGxlcy4gIFRvIHNhdmUK LQkJICogZnJvbSBoYXZpbmcgdG8gYWx3YXlzIGNhbGwgR2V0TWVtb3J5Q2h1bmtTcGFjZSgpIG9u IGFsbCBzdG9yZWQKLQkJICogdHVwbGVzLCB3ZSBhZGp1c3QgdGhlIGF2YWlsTWVtIHRvIGZvcmdl dCBhbGwgdGhlIHR1cGxlcyBhbmQganVzdAotCQkgKiByZWNhbGwgVVNFTUVNIGZvciB0aGUgc3Bh Y2UgdXNlZCBieSB0aGUgbWVtdHVwbGVzIGFycmF5LiAgSGVyZSB3ZQotCQkgKiBqdXN0IEFzc2Vy dCB0aGF0J3MgY29ycmVjdCBhbmQgdGhlIG1lbW9yeSB0cmFja2luZyBoYXNuJ3QgZ29uZQotCQkg KiB3cm9uZyBhbnl3aGVyZS4KLQkJICovCi0JCWZvciAoaSA9IHN0YXRlLT5tZW10dXBkZWxldGVk OyBpIDwgc3RhdGUtPm1lbXR1cGNvdW50OyBpKyspCi0JCQlhdmFpbE1lbSArPSBHZXRNZW1vcnlD aHVua1NwYWNlKHN0YXRlLT5tZW10dXBsZXNbaV0pOworCQlpZiAoIXN0YXRlLT5kYXR1bVR5cGVC eVZhbCkKKwkJeworCQkJLyoKKwkJCSAqIEJlbG93LCB3ZSByZXNldCB0aGUgbWVtb3J5IGNvbnRl eHQgZm9yIHN0b3JpbmcgdHVwbGVzLiAgVG8gc2F2ZQorCQkJICogZnJvbSBoYXZpbmcgdG8gYWx3 YXlzIGNhbGwgR2V0TWVtb3J5Q2h1bmtTcGFjZSgpIG9uIGFsbCBzdG9yZWQKKwkJCSAqIHR1cGxl cywgd2UgYWRqdXN0IHRoZSBhdmFpbE1lbSB0byBmb3JnZXQgYWxsIHRoZSB0dXBsZXMgYW5kIGp1 c3QKKwkJCSAqIHJlY2FsbCBVU0VNRU0gZm9yIHRoZSBzcGFjZSB1c2VkIGJ5IHRoZSBtZW10dXBs ZXMgYXJyYXkuICBIZXJlIHdlCisJCQkgKiBqdXN0IEFzc2VydCB0aGF0J3MgY29ycmVjdCBhbmQg dGhlIG1lbW9yeSB0cmFja2luZyBoYXNuJ3QgZ29uZQorCQkJICogd3JvbmcgYW55d2hlcmUuCisJ CQkgKi8KKwkJCWZvciAoaSA9IHN0YXRlLT5tZW10dXBkZWxldGVkOyBpIDwgc3RhdGUtPm1lbXR1 cGNvdW50OyBpKyspCisJCQkJYXZhaWxNZW0gKz0gR2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+ bWVtdHVwbGVzW2ldKTsKKwkJfQogCiAJCWF2YWlsTWVtICs9IEdldE1lbW9yeUNodW5rU3BhY2Uo c3RhdGUtPm1lbXR1cGxlcyk7CiAKQEAgLTc3Niw2ICs4MzQsMjUgQEAgdHVwbGVzdG9yZV9wdXR0 dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBIZWFwVHVwbGUgdHVwbGUpCiAJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBMaWtlIHR1cGxlc3RvcmVfcHV0dHVw bGVzbG90IGJ1dCBmb3Igc2luZ2xlIERhdHVtLgorICovCit2b2lkCit0dXBsZXN0b3JlX3B1dGRh dHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIERhdHVtIGRhdHVtKQoreworCU1lbW9yeUNvbnRl eHQgb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5jb250ZXh0KTsKKworCS8q CisJICogQ29weSB0aGUgRGF0dW0uICAoTXVzdCBkbyB0aGlzIGV2ZW4gaW4gV1JJVEVGSUxFIGNh c2UuICBOb3RlIHRoYXQKKwkgKiBDT1BZVFVQIGluY2x1ZGVzIFVTRU1FTSwgc28gd2UgbmVlZG4n dCBkbyB0aGF0IGhlcmUuKQorCSAqLworCWRhdHVtID0gUG9pbnRlckdldERhdHVtKENPUFlUVVAo c3RhdGUsIERhdHVtR2V0UG9pbnRlcihkYXR1bSkpKTsKKworCXR1cGxlc3RvcmVfcHV0dHVwbGVf Y29tbW9uKHN0YXRlLCBEYXR1bUdldFBvaW50ZXIoZGF0dW0pKTsKKworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogU2ltaWxhciB0byB0dXBsZXN0b3JlX3B1dHR1 cGxlKCksIGJ1dCB3b3JrIGZyb20gdmFsdWVzICsgbnVsbHMgYXJyYXlzLgogICogVGhpcyBhdm9p ZHMgYW4gZXh0cmEgdHVwbGUtY29uc3RydWN0aW9uIG9wZXJhdGlvbi4KQEAgLTEwMjcsMTAgKzEx MDQsMTAgQEAgdHVwbGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29s IGZvcndhcmQsCiAJCQkvKiBGQUxMVEhST1VHSCAqLwogCiAJCWNhc2UgVFNTX1JFQURGSUxFOgot CQkJKnNob3VsZF9mcmVlID0gdHJ1ZTsKKwkJCSpzaG91bGRfZnJlZSA9ICFzdGF0ZS0+ZGF0dW1U eXBlQnlWYWw7CiAJCQlpZiAoZm9yd2FyZCkKIAkJCXsKLQkJCQlpZiAoKHR1cGxlbiA9IGdldGxl bihzdGF0ZSwgdHJ1ZSkpICE9IDApCisJCQkJaWYgKCh0dXBsZW4gPSBMRU5UVVAoc3RhdGUsIHRy dWUpKSAhPSAwKQogCQkJCXsKIAkJCQkJdHVwID0gUkVBRFRVUChzdGF0ZSwgdHVwbGVuKTsKIAkJ CQkJcmV0dXJuIHR1cDsKQEAgLTEwNTksNyArMTEzNiw3IEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUo VHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCUFzc2VydCghc3RhdGUt PnRydW5jYXRlZCk7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9Ci0JCQl0dXBsZW4gPSBnZXRsZW4o c3RhdGUsIGZhbHNlKTsKKwkJCXR1cGxlbiA9IExFTlRVUChzdGF0ZSwgZmFsc2UpOwogCiAJCQlp ZiAocmVhZHB0ci0+ZW9mX3JlYWNoZWQpCiAJCQl7CkBAIC0xMDkwLDcgKzExNjcsNyBAQCB0dXBs ZXN0b3JlX2dldHR1cGxlKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwKIAkJ CQkJQXNzZXJ0KCFzdGF0ZS0+dHJ1bmNhdGVkKTsKIAkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJfQot CQkJCXR1cGxlbiA9IGdldGxlbihzdGF0ZSwgZmFsc2UpOworCQkJCXR1cGxlbiA9IExFTlRVUChz dGF0ZSwgZmFsc2UpOwogCQkJfQogCiAJCQkvKgpAQCAtMTE1Miw2ICsxMjI5LDI1IEBAIHR1cGxl c3RvcmVfZ2V0dHVwbGVzbG90KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwK IAl9CiB9CiAKK2V4dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0ZGF0dW0oVHVwbGVzdG9yZXN0YXRl ICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAorCQkJCQkJCQlib29sICpzaG91bGRfZnJlZSwgRGF0dW0g KnJlc3VsdCkKK3sKKwlEYXR1bSBkYXR1bTsKKwkqc2hvdWxkX2ZyZWUgPSBmYWxzZTsKKworCWRh dHVtID0gKERhdHVtKSB0dXBsZXN0b3JlX2dldHR1cGxlKHN0YXRlLCBmb3J3YXJkLCBzaG91bGRf ZnJlZSk7CisJaWYgKGRhdHVtKQorCXsKKwkJKnJlc3VsdCA9ZGF0dW07CisJCXJldHVybiB0cnVl OworCX0KKwllbHNlCisJeworCQkqcmVzdWx0ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQly ZXR1cm4gZmFsc2U7CisJfQorfQorCiAvKgogICogdHVwbGVzdG9yZV9hZHZhbmNlIC0gZXhwb3J0 ZWQgZnVuY3Rpb24gdG8gYWRqdXN0IHBvc2l0aW9uIHdpdGhvdXQgZmV0Y2hpbmcKICAqCkBAIC0x NDYwLDggKzE1NTYsMTEgQEAgdHVwbGVzdG9yZV90cmltKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUp CiAJLyogUmVsZWFzZSBuby1sb25nZXItbmVlZGVkIHR1cGxlcyAqLwogCWZvciAoaSA9IHN0YXRl LT5tZW10dXBkZWxldGVkOyBpIDwgbnJlbW92ZTsgaSsrKQogCXsKLQkJRlJFRU1FTShzdGF0ZSwg R2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKSk7Ci0JCXBmcmVlKHN0YXRl LT5tZW10dXBsZXNbaV0pOworCQlpZiAoIXN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwkJeworCQkJ RlJFRU1FTShzdGF0ZSwgR2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKSk7 CisJCQlwZnJlZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsKKwkJfQogCQlzdGF0ZS0+bWVtdHVwbGVz W2ldID0gTlVMTDsKIAl9CiAJc3RhdGUtPm1lbXR1cGRlbGV0ZWQgPSBucmVtb3ZlOwpAQCAtMTU1 NiwyNSArMTY1NSw2IEBAIHR1cGxlc3RvcmVfaW5fbWVtb3J5KFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUpCiAJcmV0dXJuIChzdGF0ZS0+c3RhdHVzID09IFRTU19JTk1FTSk7CiB9CiAKLQotLyoKLSAq IFRhcGUgaW50ZXJmYWNlIHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2V0 bGVuKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCi17Ci0JdW5zaWduZWQgaW50 IGxlbjsKLQlzaXplX3QJCW5ieXRlczsKLQotCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yo c3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKLQlpZiAobmJ5dGVzID09 IDApCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIGxlbjsKLX0KLQotCiAvKgogICogUm91 dGluZXMgc3BlY2lhbGl6ZWQgZm9yIEhlYXBUdXBsZSBjYXNlCiAgKgpAQCAtMTU4NSw2ICsxNjY1 LDE5IEBAIGdldGxlbihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQogICogdG8g d3JpdGUgdGhhdCBzZXBhcmF0ZWx5LgogICovCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlbnR1 cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWduZWQg aW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVF T0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAobmJ5dGVz ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGxlbjsKK30KKwogc3RhdGljIHZv aWQgKgogY29weXR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCkKIHsK QEAgLTE2MzEsMyArMTcyNCw5OCBAQCByZWFkdHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgdW5zaWduZWQgaW50IGxlbikKIAkJQnVmRmlsZVJlYWRFeGFjdChzdGF0ZS0+bXlmaWxlLCAm dHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CiAJcmV0dXJuIHR1cGxlOwogfQorCisvKgorICogUm91 dGluZXMgc3BlY2lhbGl6ZWQgZm9yIERhdHVtIGNhc2UuCisgKgorICogSGFuZGxlcyBib3RoIGZp eGVkIGFuZCB2YXJpYWJsZS1sZW5ndGggRGF0dW1zIGVmZmljaWVudGx5OgorICogLSBGaXhlZC1s ZW5ndGg6IHN0b3JlcyByYXcgYnl0ZXMgd2l0aG91dCBsZW5ndGggcHJlZml4CisgKiAtIFZhcmlh YmxlLWxlbmd0aDogaW5jbHVkZXMgbGVuZ3RoIHByZWZpeCAoYW5kIHN1ZmZpeCBpZiBiYWNrd2Fy ZCBzY2FuKQorICogLSBCeS12YWx1ZSB0eXBlcyBoYW5kbGVkIGlubGluZSB3aXRob3V0IGV4dHJh IGNvcHlpbmcKKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CitsZW50dXBfZGF0dW0oVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBlb2ZPSykKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCXNp emVfdAkJbmJ5dGVzOworCisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGUgIT0gSW52YWxpZE9pZCk7 CisKKwlpZiAoc3RhdGUtPmRhdHVtVHlwZUxlbiA+IDApCisJCXJldHVybiBzdGF0ZS0+ZGF0dW1U eXBlTGVuOworCisJbmJ5dGVzID0gQnVmRmlsZVJlYWRNYXliZUVPRihzdGF0ZS0+bXlmaWxlLCAm bGVuLCBzaXplb2YobGVuKSwgZW9mT0spOworCWlmIChuYnl0ZXMgPT0gMCkKKwkJcmV0dXJuIDA7 CisJZWxzZQorCQlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCAqCitjb3B5dHVwX2RhdHVt KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQqIGRhdHVtKQoreworCUFzc2VydChzdGF0ZS0+ ZGF0dW1UeXBlICE9IEludmFsaWRPaWQpOworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJ CXJldHVybiBEYXR1bUdldFBvaW50ZXIoUG9pbnRlckdldERhdHVtKGRhdHVtKSk7CisJZWxzZQor CXsKKwkJRGF0dW0gZCA9IGRhdHVtQ29weShQb2ludGVyR2V0RGF0dW0oZGF0dW0pLCBzdGF0ZS0+ ZGF0dW1UeXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQlVU0VNRU0oc3RhdGUsIEdl dE1lbW9yeUNodW5rU3BhY2UoRGF0dW1HZXRQb2ludGVyKGQpKSk7CisJCXJldHVybiBEYXR1bUdl dFBvaW50ZXIoZCk7CisJfQorfQorCitzdGF0aWMgdm9pZAord3JpdGV0dXBfZGF0dW0oVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgdm9pZCogZGF0dW0pCit7CisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5 cGUgIT0gSW52YWxpZE9pZCk7CisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCUFz c2VydChzdGF0ZS0+ZGF0dW1UeXBlTGVuID4gMCk7CisJCUJ1ZkZpbGVXcml0ZShzdGF0ZS0+bXlm aWxlLCBkYXR1bSwgc3RhdGUtPmRhdHVtVHlwZUxlbik7CisJfQorCWVsc2UKKwl7CisJCVNpemUg c2l6ZSA9IHN0YXRlLT5kYXR1bVR5cGVMZW47CisJCWlmIChzdGF0ZS0+ZGF0dW1UeXBlTGVuIDwg MCkKKwkJeworCQkJQnVmRmlsZVdyaXRlKHN0YXRlLT5teWZpbGUsICZzaXplLCBzaXplb2Yoc2l6 ZSkpOworCQkJc2l6ZSA9IGRhdHVtR2V0U2l6ZShQb2ludGVyR2V0RGF0dW0oZGF0dW0pLCBzdGF0 ZS0+ZGF0dW1UeXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQl9CisKKwkJQnVmRmls ZVdyaXRlKHN0YXRlLT5teWZpbGUsIGRhdHVtLCBzaXplKTsKKworCQkvKiBuZWVkIHRyYWlsaW5n IGxlbmd0aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkICYmIHN0YXRlLT5kYXR1bVR5 cGVMZW4gPCAwKQorCQkJQnVmRmlsZVdyaXRlKHN0YXRlLT5teWZpbGUsICZzaXplLCBzaXplb2Yo c2l6ZSkpOworCisJCUZSRUVNRU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3BhY2UoZGF0dW0pKTsK KwkJcGZyZWUoZGF0dW0pOworCX0KK30KKworc3RhdGljIHZvaWQqCityZWFkdHVwX2RhdHVtKFR1 cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pCit7CisJQXNzZXJ0KHN0YXRl LT5kYXR1bVR5cGUgIT0gSW52YWxpZE9pZCk7CisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkK Kwl7CisJCURhdHVtIGRhdHVtID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQlBc3NlcnQoc3Rh dGUtPmRhdHVtVHlwZUxlbiA+IDApOworCQlBc3NlcnQobGVuID09IHN0YXRlLT5kYXR1bVR5cGVM ZW4pOworCQlCdWZGaWxlUmVhZEV4YWN0KHN0YXRlLT5teWZpbGUsICZkYXR1bSwgc3RhdGUtPmRh dHVtVHlwZUxlbik7CisJCXJldHVybiBEYXR1bUdldFBvaW50ZXIoZGF0dW0pOworCX0KKwllbHNl CisJeworCQlEYXR1bSAqZGF0dW1zID0gcGFsbG9jKGxlbik7CisJCUJ1ZkZpbGVSZWFkRXhhY3Qo c3RhdGUtPm15ZmlsZSwgJmRhdHVtcywgbGVuKTsKKworCQkvKiBuZWVkIHRyYWlsaW5nIGxlbmd0 aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkICYmIHN0YXRlLT5kYXR1bVR5cGVMZW4g PCAwKQorCQkJQnVmRmlsZVJlYWRFeGFjdChzdGF0ZS0+bXlmaWxlLCAmbGVuLCBzaXplb2YobGVu KSk7CisKKwkJcmV0dXJuIERhdHVtR2V0UG9pbnRlcigqZGF0dW1zKTsKKwl9Cit9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmggYi9zcmMvaW5jbHVkZS91dGlscy90 dXBsZXN0b3JlLmgKaW5kZXggODY1YmE3YjgyNjUuLjAzNDFjNDdiODUxIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHVw bGVzdG9yZS5oCkBAIC0xLDE3ICsxLDE4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiB0 dXBsZXN0b3JlLmgKLSAqCSAgR2VuZXJhbGl6ZWQgcm91dGluZXMgZm9yIHRlbXBvcmFyeSB0dXBs ZSBzdG9yYWdlLgorICoJICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHN0b3Jh Z2Ugb2YgdHVwbGVzIGFuZCBEYXR1bXMuCiAgKgotICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0ZW1w b3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgZm9yIHB1cnBvc2VzIHN1Y2gKLSAqIGFzIE1hdGVyaWFs aXplIG5vZGVzLCBoYXNoam9pbiBiYXRjaCBmaWxlcywgZXRjLiAgSXQgaXMgZXNzZW50aWFsbHkK LSAqIGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsgaXQgZG9lcyBubyBzb3J0 aW5nIG9mIHR1cGxlcwotICogYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBhIHNl cXVlbmNlIG9mIHR1cGxlcy4gIEhvd2V2ZXIsCi0gKiBiZWNhdXNlIG5vIHNvcnQgaXMgcmVxdWly ZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQgcmVhZGluZyB0aGUgc2VxdWVuY2UKLSAqIGJlZm9y ZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBm b3IgY3Vyc29ycywKLSAqIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3Mgd2l0aGluIHRo ZSBhbHJlYWR5LXNjYW5uZWQgcG9ydGlvbiBvZgotICogYSBxdWVyeSB3aXRob3V0IGhhdmluZyB0 byBwcm9jZXNzIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KLSAqIEFsc28sIGl0 IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW5kZXBlbmRlbnQgcmVhZCBwb2ludGVy cy4KKyAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVtcG9yYXJ5IHN0b3JhZ2Ugb2YgZWl0aGVyIHR1 cGxlcyBvciBzaW5nbGUKKyAqIERhdHVtIHZhbHVlcyBmb3IgcHVycG9zZXMgc3VjaCBhcyBNYXRl cmlhbGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2gKKyAqIGZpbGVzLCBldGMuIEl0IGlzIGVzc2Vu dGlhbGx5IGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsKKyAqIGl0IGRvZXMg bm8gc29ydGluZyBvZiB0dXBsZXMgYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBh IHNlcXVlbmNlCisgKiBvZiB0dXBsZXMuICBIb3dldmVyLCBiZWNhdXNlIG5vIHNvcnQgaXMgcmVx dWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQKKyAqIHJlYWRpbmcgdGhlIHNlcXVlbmNlIGJl Zm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4KKyAqCisgKiBUaGlzIGlzIHBhcnRpY3VsYXJs eSB1c2VmdWwgZm9yIGN1cnNvcnMsIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3MKKyAq IHdpdGhpbiB0aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24gb2YgYSBxdWVyeSB3aXRob3V0IGhh dmluZyB0byBwcm9jZXNzCisgKiB0aGUgdW5kZXJseWluZyBzY2FuIHRvIGNvbXBsZXRpb24uCiAg KgogICogQSB0ZW1wb3JhcnkgZmlsZSBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgZGF0YSBpZiBpdCBl eGNlZWRzIHRoZQogICogc3BhY2UgbGltaXQgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIuCkBAIC0z OSwxNCArNDAsMTMgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlIFR1cGxl c3RvcmVzdGF0ZTsKIAotLyoKLSAqIEN1cnJlbnRseSB3ZSBvbmx5IG5lZWQgdG8gc3RvcmUgTWlu aW1hbFR1cGxlcywgYnV0IGl0IHdvdWxkIGJlIGVhc3kKLSAqIHRvIHN1cHBvcnQgdGhlIHNhbWUg YmVoYXZpb3IgZm9yIEluZGV4VHVwbGVzIGFuZC9vciBiYXJlIERhdHVtcy4KLSAqLwotCiBleHRl cm4gVHVwbGVzdG9yZXN0YXRlICp0dXBsZXN0b3JlX2JlZ2luX2hlYXAoYm9vbCByYW5kb21BY2Nl c3MsCiAJCQkJCQkJCQkJCSAgYm9vbCBpbnRlclhhY3QsCiAJCQkJCQkJCQkJCSAgaW50IG1heEtC eXRlcyk7CitleHRlcm4gVHVwbGVzdG9yZXN0YXRlICp0dXBsZXN0b3JlX2JlZ2luX2RhdHVtKE9p ZCBkYXR1bVR5cGUsCisJCQkJCQkJCQkJCSBib29sIHJhbmRvbUFjY2VzcywKKwkJCQkJCQkJCQkJ IGJvb2wgaW50ZXJYYWN0LAorCQkJCQkJCQkJCQkgaW50IG1heEtCeXRlcyk7CiAKIGV4dGVybiB2 b2lkIHR1cGxlc3RvcmVfc2V0X2VmbGFncyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBpbnQgZWZs YWdzKTsKIApAQCAtNTUsNiArNTUsNyBAQCBleHRlcm4gdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxl c2xvdChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLAogZXh0ZXJuIHZvaWQgdHVwbGVzdG9yZV9wdXR0 dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBIZWFwVHVwbGUgdHVwbGUpOwogZXh0ZXJuIHZv aWQgdHVwbGVzdG9yZV9wdXR2YWx1ZXMoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgVHVwbGVEZXNj IHRkZXNjLAogCQkJCQkJCQkgY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9vbCAqaXNudWxs KTsKK2V4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0ZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgRGF0dW0gZGF0dW0pOwogCiBleHRlcm4gaW50CXR1cGxlc3RvcmVfYWxsb2NfcmVhZF9wb2lu dGVyKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludCBlZmxhZ3MpOwogCkBAIC03Miw2ICs3Myw4 IEBAIGV4dGVybiBib29sIHR1cGxlc3RvcmVfaW5fbWVtb3J5KFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUpOwogCiBleHRlcm4gYm9vbCB0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChUdXBsZXN0b3Jlc3Rh dGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJCQkJCQkJCQlib29sIGNvcHksIFR1cGxlVGFibGVT bG90ICpzbG90KTsKK2V4dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0ZGF0dW0oVHVwbGVzdG9yZXN0 YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAorCQkJCQkJCQlib29sICpzaG91bGRfZnJlZSwgRGF0 dW0gKnJlc3VsdCk7CiAKIGV4dGVybiBib29sIHR1cGxlc3RvcmVfYWR2YW5jZShUdXBsZXN0b3Jl c3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQpOwogCi0tIAoyLjQzLjAKCg== --0000000000002ad96a064431f950 Content-Type: text/plain; charset="US-ASCII"; name="v27-0003-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Disposition: attachment; filename="v27-0003-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg71g5 RnJvbSA4ZmFlMDFlNzRkOWY0ZDBlNDYzN2IwNmMxNjkxZmUxOTRmZGQxM2Y5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAyMSBEZWMgMjAyNCAxODozNjoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDMvOF0gQWRkIFNUSVIgYWNjZXNzIG1ldGhvZCBhbmQgZmxhZ3MgcmVsYXRlZCB0 byBhdXhpbGlhcnkKIGluZGV4ZXMKClRoaXMgcGF0Y2ggcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgdG8gY29uY3VycmVudCBpbmRleCBidWlsZHMgYnk6 Ci0gaWlfQXV4aWxpYXJ5IGluIEluZGV4SW5mbzogaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggaXMg YW4gYXV4aWxpYXJ5IGluZGV4IHVzZWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKLSB2 YWxpZGF0ZV9pbmRleCBpbiBJbmRleFZhY3V1bUluZm86IHNldCBpZiBpbmRleF9idWxrX2RlbGV0 ZSBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHBoYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGQKLSBTVElSKFNob3J0LVRlcm0gSW5kZXggUmVwbGFjZW1lbnQpIGFjY2VzcyBtZXRob2Qg aXMgaW50cm9kdWNlZCwgaW50ZW5kZWQgc29sZWx5IGZvciBzaG9ydC1saXZlZCwgYXV4aWxpYXJ5 IHVzYWdlCgpTVElSIGZ1bmN0aW9ucyBkZXNpZ25lZCBhcyBhbiBlcGhlbWVyYWwgaGVscGVyIGR1 cmluZyBjb25jdXJyZW50IGluZGV4IGJ1aWxkcywgdGVtcG9yYXJpbHkgc3RvcmluZyBUSURzIHdp dGhvdXQgcHJvdmlkaW5nIHRoZSBmdWxsIGZlYXR1cmVzIG9mIGEgdHlwaWNhbCBhY2Nlc3MgbWV0 aG9kLiBBcyBzdWNoLCBpdCByYWlzZXMgd2FybmluZ3Mgb3IgZXJyb3JzIHdoZW4gYWNjZXNzZWQg b3V0c2lkZSBpdHMgc3BlY2lhbGl6ZWQgdXNhZ2UgcGF0aC4KClBsYW5uZWQgdG8gYmUgdXNlZCBp biBmb2xsb3dpbmcgY29tbWl0cy4KLS0tCiBjb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxl LmMgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZSAgICAgICAgICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyAgICAgfCAg IDIgKwogc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgMSArCiBz cmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZSAgICAgICAgIHwgIDE4ICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvYWNj ZXNzL3N0aXIvc3Rpci5jICAgICAgICAgICB8IDU4MSArKysrKysrKysrKysrKysrKysrKysrKwog c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYyAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtcGFyYWxsZWwuYyAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YyAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaCAgICAgICAgICB8 ICAgMyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaCAgICAgICAgICAgICAgICB8IDExNyAr KysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQgICAgICAgICAgICB8ICAgMyArCiBz cmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3MuZGF0ICAgICAgIHwgICA0ICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0ICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaCAgICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxm dW5jcy5oICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYW11dGlscy5v dXQgICAgfCAgIDggKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQg fCAgIDcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgICAgICAgfCAgMjQg Ky0KIDI0IGZpbGVzIGNoYW5nZWQsIDc4NiBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdzdGF0dHVwbGUvcGdzdGF0dHVwbGUuYyBiL2NvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0dHVw bGUuYwppbmRleCA2YTdmOGNiNGE3Yy4uNWI1OTg0ZTNhYTIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGdzdGF0dHVwbGUvcGdzdGF0dHVwbGUuYworKysgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3Rh dHR1cGxlLmMKQEAgLTI4NSw2ICsyODUsOSBAQCBwZ3N0YXRfcmVsYXRpb24oUmVsYXRpb24gcmVs LCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJCWNhc2UgU1BHSVNUX0FNX09JRDoKIAkJCQll cnIgPSAic3BnaXN0IGluZGV4IjsKIAkJCQlicmVhazsKKwkJCWNhc2UgU1RJUl9BTV9PSUQ6CisJ CQkJZXJyID0gInN0aXIgaW5kZXgiOworCQkJCWJyZWFrOwogCQkJY2FzZSBCUklOX0FNX09JRDoK IAkJCQllcnIgPSAiYnJpbiBpbmRleCI7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvTWFrZWZpbGUKaW5kZXgg MTkzMmQxMWQxNTQuLmNkNjUyNGE1NGFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv TWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlCkBAIC05LDYgKzksNiBA QCB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01h a2VmaWxlLmdsb2JhbAogCiBTVUJESVJTCSAgICA9IGJyaW4gY29tbW9uIGdpbiBnaXN0IGhhc2gg aGVhcCBpbmRleCBuYnRyZWUgcm1ncmRlc2Mgc3BnaXN0IFwKLQkJCSAgc2VxdWVuY2UgdGFibGUg dGFibGVzYW1wbGUgdHJhbnNhbQorCQkJICBzdGlyIHNlcXVlbmNlIHRhYmxlIHRhYmxlc2FtcGxl IHRyYW5zYW0KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IDY1YmIwNTY4YTg2Li5hNWQzMGI4 MjJjMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzEyNiw2ICszMTI2 LDcgQEAgbGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVs ZXRlUmVzdWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmlu Zm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY3Jl bC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyoKIAkg KiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpAQCAtMzE3Nyw2ICszMTc4LDcg QEAgbGF6eV9jbGVhbnVwX29uZV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqaXN0YXQsCiAKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwog CWl2aW5mby5zdHJhdGVneSA9IHZhY3JlbC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9p bmRleCA9IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0 aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCmluZGV4IDdhMmQwZGRiNjg5Li5hMTU2Y2RkZmYzNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBzdWJkaXIoJ25idHJlZScp CiBzdWJkaXIoJ3JtZ3JkZXNjJykKIHN1YmRpcignc2VxdWVuY2UnKQogc3ViZGlyKCdzcGdpc3Qn KQorc3ViZGlyKCdzdGlyJykKIHN1YmRpcigndGFibGUnKQogc3ViZGlyKCd0YWJsZXNhbXBsZScp CiBzdWJkaXIoJ3RyYW5zYW0nKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmFlNTg5OGI4ZDcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIworIyBNYWtlZmlsZS0tCisjICAgIE1ha2VmaWxlIGZvciBhY2Nlc3Mv c3RpcgorIworIyBJREVOVElGSUNBVElPTgorIyAgICBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9N YWtlZmlsZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tlbmQvYWNj ZXNzL3N0aXIKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBcCisJc3Rpci5vCisKK2luY2x1ZGUg JCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4zOWM2ZWNhODQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsNSBAQAorIyBDb3B5cmln aHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2JhY2tl bmRfc291cmNlcyArPSBmaWxlcygKKwknc3Rpci5jJywKKykKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9zdGlyLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9zdGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjJlMDgzZDk1MmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3N0aXIvc3Rpci5jCkBAIC0wLDAgKzEsNTgxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBzdGlyLmMKKyAqCSAgSW1wbGVtZW50YXRpb24gb2YgU2hvcnQtVGVybSBJbmRleCBSZXBs YWNlbWVudC4KKyAqCisgKiBTVElSIGlzIGEgc3BlY2lhbGl6ZWQgYWNjZXNzIG1ldGhvZCB0eXBl IGRlc2lnbmVkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZQorICogb2YgVElEIHZhbHVlcyBkdXJpbmcg Y29uY3VyZXJudCBpbmRleCBidWlsZCBvcGVyYXRpb25zLgorICoKKyAqIFRoZSB0eXBpY2FsIGxp ZmVjeWNsZSBvZiBhIFNUSVIgaW5kZXggaXM6CisgKiAxLiBjcmVhdGVkIGFzIGFuIGF1eGlsaWFy eSBpbmRleCBmb3IgQ0lDL1JJQworICogMi4gYWNjZXB0cyBpbnNlcnRzIGZvciBhIHBlcmlvZAor ICogMy4gc3RpcmJ1bGtkZWxldGUgY2FsbGVkIGR1cmluZyBpbmRleCB2YWxpZGF0aW9uIHBoYXNl CisgKiA1LiBnZXRzIGRyb3BwZWQKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3N0 aXIuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJhY2Nlc3MvYW12YWxpZGF0 ZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv dGFibGVhbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2Ftb3AuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCisjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNsdWRlICJ1dGlscy9pbmRleF9zZWxmdW5j cy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVncHJv Yy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8qCisgKiBTdGlyIGhhbmRsZXIg ZnVuY3Rpb246IHJldHVybiBJbmRleEFtUm91dGluZSB3aXRoIGFjY2VzcyBtZXRob2QgcGFyYW1l dGVycworICogYW5kIGNhbGxiYWNrcy4KKyAqLworRGF0dW0KK3N0aXJoYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZSA9IG1ha2VOb2RlKEluZGV4 QW1Sb3V0aW5lKTsKKworCS8qIFNldCBTVElSLXNwZWNpZmljIHN0cmF0ZWd5IGFuZCBwcm9jZWR1 cmUgbnVtYmVycyAqLworCWFtcm91dGluZS0+YW1zdHJhdGVnaWVzID0gU1RJUl9OU1RSQVRFR0lF UzsKKwlhbXJvdXRpbmUtPmFtc3VwcG9ydCA9IFNUSVJfTlBST0M7CisJYW1yb3V0aW5lLT5hbW9w dHNwcm9jbnVtID0gU1RJUl9PUFRJT05TX1BST0M7CisKKwkvKiBTVElSIGRvZXNuJ3Qgc3VwcG9y dCBtb3N0IGluZGV4IG9wZXJhdGlvbnMgKi8KKwlhbXJvdXRpbmUtPmFtY2Fub3JkZXIgPSBmYWxz ZTsKKwlhbXJvdXRpbmUtPmFtY2Fub3JkZXJieW9wID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNh bmJhY2t3YXJkID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbnVuaXF1ZSA9IGZhbHNlOworCWFt cm91dGluZS0+YW1jYW5tdWx0aWNvbCA9IHRydWU7CisJYW1yb3V0aW5lLT5hbW9wdGlvbmFsa2V5 ID0gdHJ1ZTsKKwlhbXJvdXRpbmUtPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKKwlhbXJvdXRpbmUt PmFtc2VhcmNobnVsbHMgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtc3RvcmFnZSA9IGZhbHNlOwor CWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOworCWFtcm91dGluZS0+YW1wcmVkbG9j a3MgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRp bmUtPmFtY2FuYnVpbGRwYXJhbGxlbCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5pbmNsdWRl ID0gdHJ1ZTsKKwlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7CisJ YW1yb3V0aW5lLT5hbXBhcmFsbGVsdmFjdXVtb3B0aW9ucyA9CisJCQlWQUNVVU1fT1BUSU9OX1BB UkFMTEVMX0JVTEtERUwgfCBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0NMRUFOVVA7CisJYW1yb3V0 aW5lLT5hbWtleXR5cGUgPSBJbnZhbGlkT2lkOworCisJLyogU2V0IHVwIGZ1bmN0aW9uIGNhbGxi YWNrcyAqLworCWFtcm91dGluZS0+YW1idWlsZCA9IHN0aXJidWlsZDsKKwlhbXJvdXRpbmUtPmFt YnVpbGRlbXB0eSA9IHN0aXJidWlsZGVtcHR5OworCWFtcm91dGluZS0+YW1pbnNlcnQgPSBzdGly aW5zZXJ0OworCWFtcm91dGluZS0+YW1pbnNlcnRjbGVhbnVwID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtYnVsa2RlbGV0ZSA9IHN0aXJidWxrZGVsZXRlOworCWFtcm91dGluZS0+YW12YWN1dW1jbGVh bnVwID0gc3RpcnZhY3V1bWNsZWFudXA7CisJYW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IE5VTEw7 CisJYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IHN0aXJjb3N0ZXN0aW1hdGU7CisJYW1yb3V0 aW5lLT5hbW9wdGlvbnMgPSBzdGlyb3B0aW9uczsKKwlhbXJvdXRpbmUtPmFtcHJvcGVydHkgPSBO VUxMOworCWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5h bXZhbGlkYXRlID0gc3RpcnZhbGlkYXRlOworCWFtcm91dGluZS0+YW1hZGp1c3RtZW1iZXJzID0g TlVMTDsKKwlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gc3RpcmJlZ2luc2NhbjsKKwlhbXJvdXRp bmUtPmFtcmVzY2FuID0gc3RpcnJlc2NhbjsKKwlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxM OworCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBOVUxMOworCWFtcm91dGluZS0+YW1lbmRzY2Fu ID0gc3RpcmVuZHNjYW47CisJYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOworCWFtcm91dGlu ZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2Fu ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKKworCVBHX1JFVFVSTl9QT0lOVEVSKGFtcm91 dGluZSk7Cit9CisKKy8qCisgKiBWYWxpZGF0ZXMgb3BlcmF0b3IgY2xhc3MgZm9yIFNUSVIgaW5k ZXguCisgKgorICogU1RJUiBpcyBub3QgYW4gcmVhbCBpbmRleCwgc28gdmFsaWRhdGlvIG1heSBi ZSBza2lwcGVkLgorICogQnV0IHdlIGRvIGl0IGp1c3QgZm9yIGNvbnNpc3RlbmN5LgorICovCiti b29sCitzdGlydmFsaWRhdGUoT2lkIG9wY2xhc3NvaWQpCit7CisJYm9vbCByZXN1bHQgPSB0cnVl OworCUhlYXBUdXBsZSBjbGFzc3R1cDsKKwlGb3JtX3BnX29wY2xhc3MgY2xhc3Nmb3JtOworCU9p ZCBvcGZhbWlseW9pZDsKKwlIZWFwVHVwbGUgZmFtaWx5dHVwOworCUZvcm1fcGdfb3BmYW1pbHkg ZmFtaWx5Zm9ybTsKKwljaGFyICpvcGZhbWlseW5hbWU7CisJQ2F0Q0xpc3QgKnByb2NsaXN0LAor CQkJKm9wcmxpc3Q7CisJaW50IGk7CisKKwkvKiBGZXRjaCBvcGNsYXNzIGluZm9ybWF0aW9uICov CisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9w Y2xhc3NvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2xhc3N0dXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgY2xhc3MgJXUiLCBvcGNsYXNz b2lkKTsKKwljbGFzc2Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1QoY2xhc3N0dXAp OworCisJb3BmYW1pbHlvaWQgPSBjbGFzc2Zvcm0tPm9wY2ZhbWlseTsKKworCisJLyogRmV0Y2gg b3BmYW1pbHkgaW5mb3JtYXRpb24gKi8KKwlmYW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BG QU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoZmFtaWx5dHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIG9wZXJhdG9yIGZhbWlseSAldSIsIG9wZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmYW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0g TmFtZVN0cihmYW1pbHlmb3JtLT5vcGZuYW1lKTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMg YW5kIHN1cHBvcnQgZnVuY3Rpb25zIG9mIHRoZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFy Y2hTeXNDYWNoZUxpc3QxKEFNT1BTVFJBVEVHWSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9p ZCkpOworCXByb2NsaXN0ID0gU2VhcmNoU3lzQ2FjaGVMaXN0MShBTVBST0NOVU0sIE9iamVjdElk R2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKworCS8qIENoZWNrIGluZGl2aWR1YWwgb3BlcmF0b3Jz ICovCisJZm9yIChpID0gMDsgaSA8IG9wcmxpc3QtPm5fbWVtYmVyczsgaSsrKQorCXsKKwkJSGVh cFR1cGxlIG9wcnR1cCA9ICZvcHJsaXN0LT5tZW1iZXJzW2ldLT50dXBsZTsKKwkJRm9ybV9wZ19h bW9wIG9wcmZvcm0gPSAoRm9ybV9wZ19hbW9wKSBHRVRTVFJVQ1Qob3BydHVwKTsKKworCQkvKiBD aGVjayBpdCdzIGFsbG93ZWQgc3RyYXRlZ3kgZm9yIHN0aXIgKi8KKwkJaWYgKG9wcmZvcm0tPmFt b3BzdHJhdGVneSA8IDEgfHwKKwkJCW9wcmZvcm0tPmFtb3BzdHJhdGVneSA+IFNUSVJfTlNUUkFU RUdJRVMpCisJCXsKKwkJCWVyZXBvcnQoSU5GTywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX09CSkVDVF9ERUZJTklUSU9OKSwKKwkJCQkJCQllcnJtc2coInN0aXIgb3BmYW1pbHkgJXMg Y29udGFpbnMgb3BlcmF0b3IgJXMgd2l0aCBpbnZhbGlkIHN0cmF0ZWd5IG51bWJlciAlZCIsCisJ CQkJCQkJCSAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJCQkJICAgZm9ybWF0X29wZXJhdG9yKG9wcmZv cm0tPmFtb3BvcHIpLAorCQkJCQkJCQkgICBvcHJmb3JtLT5hbW9wc3RyYXRlZ3kpKSk7CisJCQly ZXN1bHQgPSBmYWxzZTsKKwkJfQorCisJCS8qIHN0aXIgZG9lc24ndCBzdXBwb3J0IE9SREVSIEJZ IG9wZXJhdG9ycyAqLworCQlpZiAob3ByZm9ybS0+YW1vcHB1cnBvc2UgIT0gQU1PUF9TRUFSQ0gg fHwKKwkJCU9pZElzVmFsaWQob3ByZm9ybS0+YW1vcHNvcnRmYW1pbHkpKQorCQl7CisJCQllcmVw b3J0KElORk8sCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElP TiksCisJCQkJCQkJZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JE RVIgQlkgc3BlY2lmaWNhdGlvbiBmb3Igb3BlcmF0b3IgJXMiLAorCQkJCQkJCQkgICBvcGZhbWls eW5hbWUsCisJCQkJCQkJCSAgIGZvcm1hdF9vcGVyYXRvcihvcHJmb3JtLT5hbW9wb3ByKSkpKTsK KwkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisKKwkJLyogQ2hlY2sgb3BlcmF0b3Igc2lnbmF0dXJl IC0tLSBzYW1lIGZvciBhbGwgc3RpciBzdHJhdGVnaWVzICovCisJCWlmICghY2hlY2tfYW1vcF9z aWduYXR1cmUob3ByZm9ybS0+YW1vcG9wciwgQk9PTE9JRCwKKwkJCQkJCQkJICBvcHJmb3JtLT5h bW9wbGVmdHR5cGUsCisJCQkJCQkJCSAgb3ByZm9ybS0+YW1vcHJpZ2h0dHlwZSkpCisJCXsKKwkJ CWVyZXBvcnQoSU5GTywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJ TklUSU9OKSwKKwkJCQkJCQllcnJtc2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0 b3IgJXMgd2l0aCB3cm9uZyBzaWduYXR1cmUiLAorCQkJCQkJCQkgICBvcGZhbWlseW5hbWUsCisJ CQkJCQkJCSAgIGZvcm1hdF9vcGVyYXRvcihvcHJmb3JtLT5hbW9wb3ByKSkpKTsKKwkJCXJlc3Vs dCA9IGZhbHNlOworCQl9CisJfQorCisKKwlSZWxlYXNlQ2F0Q2FjaGVMaXN0KHByb2NsaXN0KTsK KwlSZWxlYXNlQ2F0Q2FjaGVMaXN0KG9wcmxpc3QpOworCVJlbGVhc2VTeXNDYWNoZShmYW1pbHl0 dXApOworCVJlbGVhc2VTeXNDYWNoZShjbGFzc3R1cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisKKy8qCisgKiBJbml0aWFsaXplIG1ldGFwYWdlIG9mIGEgU1RJUiBpbmRleC4KKyAqIFRoZSBz a2lwSW5zZXJ0cyBmbGFnIGRldGVybWluZXMgaWYgbmV3IGluc2VydHMgd2lsbCBiZSBhY2NlcHRl ZCBvciBza2lwcGVkLgorICovCit2b2lkCitTdGlyRmlsbE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4 LCBQYWdlIG1ldGFQYWdlLCBib29sIHNraXBJbnNlcnRzKQoreworCVN0aXJNZXRhUGFnZURhdGEg Km1ldGFkYXRhOworCisJU3RpckluaXRQYWdlKG1ldGFQYWdlLCBTVElSX01FVEEpOworCW1ldGFk YXRhID0gU3RpclBhZ2VHZXRNZXRhKG1ldGFQYWdlKTsKKwltZW1zZXQobWV0YWRhdGEsIDAsIHNp emVvZihTdGlyTWV0YVBhZ2VEYXRhKSk7CisJbWV0YWRhdGEtPm1hZ2lja051bWJlciA9IFNUSVJf TUFHSUNLX05VTUJFUjsKKwltZXRhZGF0YS0+c2tpcEluc2VydHMgPSBza2lwSW5zZXJ0czsKKwko KFBhZ2VIZWFkZXIpIG1ldGFQYWdlKS0+cGRfbG93ZXIgKz0gc2l6ZW9mKFN0aXJNZXRhUGFnZURh dGEpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBtZXRhcGFnZSBmb3Ig YSBTVElSIGluZGV4LgorICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGluZGV4IGNyZWF0aW9uLgor ICovCit2b2lkCitTdGlySW5pdE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4LCBGb3JrTnVtYmVyIGZv cmtudW0pCit7CisJQnVmZmVyIG1ldGFCdWZmZXI7CisJUGFnZSBtZXRhUGFnZTsKKworCUFzc2Vy dCghUmVsYXRpb25OZWVkc1dBTChpbmRleCkpOworCS8qCisJICogTWFrZSBhIG5ldyBwYWdlOyBz aW5jZSBpdCBpcyBmaXJzdCBwYWdlIGl0IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKKwkgKiBi bG9jayBudW1iZXIgMCAoU1RJUl9NRVRBUEFHRV9CTEtOTykuICBObyBuZWVkIHRvIGhvbGQgdGhl IGV4dGVuc2lvbgorCSAqIGxvY2sgYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUgY29uY3VycmVudCBp bnNlcnRlcnMgeWV0LgorCSAqLworCW1ldGFCdWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoaW5k ZXgsIGZvcmtudW0sIFBfTkVXLCBSQk1fTk9STUFMLCBOVUxMKTsKKwlTVEFSVF9DUklUX1NFQ1RJ T04oKTsKKwlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJ QXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKG1ldGFCdWZmZXIpID09IFNUSVJfTUVUQVBBR0Vf QkxLTk8pOworCisJbWV0YVBhZ2UgPSAgQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKTsKKwlTdGly RmlsbE1ldGFwYWdlKGluZGV4LCBtZXRhUGFnZSwgZm9ya251bSA9PSBJTklUX0ZPUktOVU0pOwor CisJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZmZXIpOworCUVORF9DUklUX1NFQ1RJT04oKTsKKwlV bmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBh bnkgcGFnZSBvZiBhIHN0aXIgaW5kZXguCisgKi8KK3ZvaWQKK1N0aXJJbml0UGFnZShQYWdlIHBh Z2UsIHVpbnQxNiBmbGFncykKK3sKKwlTdGlyUGFnZU9wYXF1ZSBvcGFxdWU7CisKKwlQYWdlSW5p dChwYWdlLCBCTENLU1osIHNpemVvZihTdGlyUGFnZU9wYXF1ZURhdGEpKTsKKworCW9wYXF1ZSA9 IFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW9wYXF1ZS0+ZmxhZ3MgPSBmbGFnczsKKwlvcGFx dWUtPnN0aXJfcGFnZV9pZCA9IFNUSVJfUEFHRV9JRDsKK30KKworLyoKKyAqIEFkZCBhIHR1cGxl IHRvIGEgU1RJUiBwYWdlLiBSZXR1cm5zIGZhbHNlIGlmIHR1cGxlIGRvZXNuJ3QgZml0LgorICog VGhlIHR1cGxlIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHBhZ2UuCisgKi8KK3N0YXRpYyBi b29sCitTdGlyUGFnZUFkZEl0ZW0oUGFnZSBwYWdlLCBTdGlyVHVwbGUgKnR1cGxlKQoreworCVN0 aXJUdXBsZSAqaXR1cDsKKwlTdGlyUGFnZU9wYXF1ZSBvcGFxdWU7CisJUG9pbnRlciBwdHI7CisK KwkvKiBXZSBzaG91bGRuJ3QgYmUgcG9pbnRlZCB0byBhbiBpbnZhbGlkIHBhZ2UgKi8KKwlBc3Nl cnQoIVBhZ2VJc05ldyhwYWdlKSk7CisKKwkvKiBEb2VzIG5ldyB0dXBsZSBmaXQgb24gdGhlIHBh Z2U/ICovCisJaWYgKFN0aXJQYWdlR2V0RnJlZVNwYWNlKHN0YXRlLCBwYWdlKSA8IHNpemVvZihT dGlyVHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDb3B5IG5ldyB0dXBsZSB0byB0aGUg ZW5kIG9mIHBhZ2UgKi8KKwlvcGFxdWUgPSBTdGlyUGFnZUdldE9wYXF1ZShwYWdlKTsKKwlpdHVw ID0gU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOworCW1lbWNweSgo UG9pbnRlcikgaXR1cCwgKFBvaW50ZXIpIHR1cGxlLCBzaXplb2YoU3RpclR1cGxlKSk7CisKKwkv KiBBZGp1c3QgbWF4b2ZmIGFuZCBwZF9sb3dlciAqLworCW9wYXF1ZS0+bWF4b2ZmKys7CisJcHRy ID0gKFBvaW50ZXIpIFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgb3BhcXVlLT5tYXhvZmYgKyAxKTsK KwkoKFBhZ2VIZWFkZXIpIHBhZ2UpLT5wZF9sb3dlciA9IHB0ciAtIHBhZ2U7CisKKwkvKiBBc3Nl cnQgd2UgZGlkbid0IG92ZXJydW4gYXZhaWxhYmxlIHNwYWNlICovCisJQXNzZXJ0KCgoUGFnZUhl YWRlcikgcGFnZSktPnBkX2xvd2VyIDw9ICgoUGFnZUhlYWRlcikgcGFnZSktPnBkX3VwcGVyKTsK KwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEluc2VydCBhIG5ldyB0dXBsZSBpbnRvIGEgU1RJ UiBpbmRleC4KKyAqLworYm9vbAorc3Rpcmluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0gKnZh bHVlcywgYm9vbCAqaXNudWxsLAorCQkgIEl0ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0aW9uIGhl YXBSZWwsCisJCSAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKKwkJICBib29sIGluZGV4 VW5jaGFuZ2VkLAorCQkgIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbykKK3sKKwlTdGlyVHVw bGUgKml0dXA7CisJTWVtb3J5Q29udGV4dCBvbGRDdHg7CisJTWVtb3J5Q29udGV4dCBpbnNlcnRD dHg7CisJU3Rpck1ldGFQYWdlRGF0YSAqbWV0YURhdGE7CisJQnVmZmVyIGJ1ZmZlciwKKwkJCW1l dGFCdWZmZXI7CisJUGFnZSBwYWdlOworCXVpbnQxNiBibGtObzsKKworCS8qIENyZWF0ZSB0ZW1w b3JhcnkgY29udGV4dCBmb3IgaW5zZXJ0IG9wZXJhdGlvbiAqLworCWluc2VydEN0eCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgIlN0aXIg aW5zZXJ0IHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9T SVpFUyk7CisKKwlvbGRDdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaW5zZXJ0Q3R4KTsKKwor CS8qIENyZWF0ZSBuZXcgdHVwbGUgd2l0aCBoZWFwIHBvaW50ZXIgKi8KKwlpdHVwID0gKFN0aXJU dXBsZSAqKSBwYWxsb2MwKHNpemVvZihTdGlyVHVwbGUpKTsKKwlpdHVwLT5oZWFwUHRyID0gKmh0 X2N0aWQ7CisKKwlBc3NlcnQoIVJlbGF0aW9uTmVlZHNXQUwoaW5kZXgpKTsKKwltZXRhQnVmZmVy ID0gUmVhZEJ1ZmZlcihpbmRleCwgU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisKKwlmb3IgKDs7KQor CXsKKwkJTG9ja0J1ZmZlcihtZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCW1ldGFE YXRhID0gU3RpclBhZ2VHZXRNZXRhKEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcikpOworCQkvKiBD aGVjayBpZiBpbnNlcnRzIGFyZSBhbGxvd2VkICovCisJCWlmIChtZXRhRGF0YS0+c2tpcEluc2Vy dHMpCisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisJCQlyZXR1cm4g ZmFsc2U7CisJCX0KKwkJYmxrTm8gPSBtZXRhRGF0YS0+bGFzdEJsa05vOworCQkvKiBEb24ndCBo b2xkIG1ldGFidWZmZXIgbG9jayB3aGlsZSBkb2luZyBpbnNlcnQgKi8KKwkJTG9ja0J1ZmZlciht ZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJCWlmIChibGtObyA+IDApCisJCXsK KwkJCWJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIGJsa05vKTsKKwkJCUxvY2tCdWZmZXIoYnVm ZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CisK KwkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisKKwkJCUFzc2VydCghUGFnZUlzTmV3 KHBhZ2UpKTsKKworCQkJLyogVHJ5IHRvIGFkZCB0dXBsZSB0byBleGlzdGluZyBwYWdlICovCisJ CQlpZiAoU3RpclBhZ2VBZGRJdGVtKHBhZ2UsIGl0dXApKQorCQkJeworCQkJCS8qIFN1Y2Nlc3Mh ICBBcHBseSB0aGUgY2hhbmdlLCBjbGVhbiB1cCwgYW5kIGV4aXQgKi8KKwkJCQlNYXJrQnVmZmVy RGlydHkoYnVmZmVyKTsKKwkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CisKKwkJCQlVbmxvY2tSZWxl YXNlQnVmZmVyKGJ1ZmZlcik7CisJCQkJUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKKwkJCQlNZW1vcnlDb250ZXh0RGVsZXRlKGlu c2VydEN0eCk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlFTkRfQ1JJVF9TRUNUSU9O KCk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCX0KKworCQkvKiBOZWVkIHRv IGFkZCBuZXcgcGFnZSAtIGdldCBleGNsdXNpdmUgbG9jayBvbiBtZXRhIHBhZ2UgKi8KKwkJTG9j a0J1ZmZlcihtZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCisJCW1ldGFEYXRh ID0gU3RpclBhZ2VHZXRNZXRhKEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcikpOworCQkvKiBDaGVj ayBpZiBhbm90aGVyIGJhY2tlbmQgYWxyZWFkeSBleHRlbmRlZCB0aGUgaW5kZXggKi8KKworCQlp ZiAoYmxrTm8gIT0gbWV0YURhdGEtPmxhc3RCbGtObykKKwkJeworCQkJQXNzZXJ0KGJsa05vIDwg bWV0YURhdGEtPmxhc3RCbGtObyk7CisJCQkvKiBTb21lb25lIGVsc2UgaW5zZXJ0ZWQgdGhlIG5l dyBwYWdlIGludG8gdGhlIGluZGV4LCBsZXRzIHRyeSBhZ2FpbiAqLworCQkJTG9ja0J1ZmZlciht ZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJY29udGludWU7CisJCX0KKwkJZWxz ZQorCQl7CisJCQkvKiBNdXN0IGV4dGVuZCB0aGUgZmlsZSAqLworCQkJYnVmZmVyID0gRXh0ZW5k QnVmZmVyZWRSZWwoQk1SX1JFTChpbmRleCksIE1BSU5fRk9SS05VTSwgTlVMTCwKKwkJCQkJCQkJ CSAgIEVCX0xPQ0tfRklSU1QpOworCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwkJ CVNUQVJUX0NSSVRfU0VDVElPTigpOworCisJCQlTdGlySW5pdFBhZ2UocGFnZSwgMCk7CisKKwkJ CWlmICghU3RpclBhZ2VBZGRJdGVtKHBhZ2UsIGl0dXApKQorCQkJeworCQkJCS8qIFdlIHNob3Vs ZG4ndCBiZSBoZXJlIHNpbmNlIHdlJ3JlIGluc2VydGluZyB0byBhbiBlbXB0eSBwYWdlICovCisJ CQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBhZGQgbmV3IHN0aXIgdHVwbGUgdG8gZW1wdHkgcGFn ZSIpOworCQkJfQorCisJCQkvKiBVcGRhdGUgbWV0YSBwYWdlIHdpdGggbmV3IGxhc3QgYmxvY2sg bnVtYmVyICovCisJCQltZXRhRGF0YS0+bGFzdEJsa05vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyKTsKKworCQkJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZmZXIpOworCQkJTWFya0J1ZmZl ckRpcnR5KGJ1ZmZlcik7CisKKwkJCUVORF9DUklUX1NFQ1RJT04oKTsKKworCQkJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWZmZXIpOworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsK KworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN0eCk7CisJCQlNZW1vcnlDb250ZXh0RGVs ZXRlKGluc2VydEN0eCk7CisKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KK30KKworLyoKKyAq IFNUSVIgZG9lc24ndCBzdXBwb3J0IHNjYW5zIC0gdGhlc2UgZnVuY3Rpb25zIGFsbCBlcnJvciBv dXQKKyAqLworSW5kZXhTY2FuRGVzYworc3RpcmJlZ2luc2NhbihSZWxhdGlvbiByLCBpbnQgbmtl eXMsIGludCBub3JkZXJieXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgYSBub3QgaW1wbGVt ZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KKwordm9pZAorc3RpcnJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKKwkJICBTY2FuS2V5IG9yZGVy YnlzLCBpbnQgbm9yZGVyYnlzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxl bWVudGVkIiwgX19mdW5jX18pKSk7Cit9CisKK3ZvaWQgc3RpcmVuZHNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxlbWVudGVkIiwgX19m dW5jX18pKSk7Cit9CisKKy8qCisgKiBCdWlsZCBhIFNUSVIgaW5kZXggLSBvbmx5IGFsbG93ZWQg Zm9yIGF1eGlsaWFyeSBpbmRleGVzLgorICogSnVzdCBpbml0aWFsaXplcyB0aGUgbWV0YSBwYWdl IHdpdGhvdXQgYW55IGhlYXAgc2NhbnMuCisgKi8KK0luZGV4QnVpbGRSZXN1bHQgKgorc3RpcmJ1 aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJICAgc3RydWN0IEluZGV4 SW5mbyAqaW5kZXhJbmZvKQoreworCUluZGV4QnVpbGRSZXN1bHQgKnJlc3VsdDsKKworCWlmICgh aW5kZXhJbmZvLT5paV9BdXhpbGlhcnkpCisJCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJTVElSIGluZGV4ZXMgYXJlIG5vdCBz dXBwb3J0ZWQgdG8gYmUgYnVpbHQiKSkpOworCisJU3RpckluaXRNZXRhcGFnZShpbmRleCwgTUFJ Tl9GT1JLTlVNKTsKKworCXJlc3VsdCA9IChJbmRleEJ1aWxkUmVzdWx0ICopIHBhbGxvYyhzaXpl b2YoSW5kZXhCdWlsZFJlc3VsdCkpOworCXJlc3VsdC0+aGVhcF90dXBsZXMgPSAwOworCXJlc3Vs dC0+aW5kZXhfdHVwbGVzID0gMDsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHN0aXJidWls ZGVtcHR5KFJlbGF0aW9uIGluZGV4KQoreworCVN0aXJJbml0TWV0YXBhZ2UoaW5kZXgsIElOSVRf Rk9SS05VTSk7Cit9CisKK0luZGV4QnVsa0RlbGV0ZVJlc3VsdCAqCitzdGlyYnVsa2RlbGV0ZShJ bmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJCQkJCQkgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpz dGF0cywKKwkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJ CQkJCSB2b2lkICpjYWxsYmFja19zdGF0ZSkKK3sKKwlSZWxhdGlvbiBpbmRleCA9IGluZm8tPmlu ZGV4OworCUJsb2NrTnVtYmVyIGJsa25vLCBucGFnZXM7CisJQnVmZmVyIGJ1ZmZlcjsKKwlQYWdl IHBhZ2U7CisKKwkvKiBGb3Igbm9ybWFsIFZBQ1VVTSwgbWFyayB0byBza2lwIGluc2VydHMgYW5k IHdhcm4gYWJvdXQgaW5kZXggZHJvcCBuZWVkZWQgKi8KKwlpZiAoIWluZm8tPnZhbGlkYXRlX2lu ZGV4KQorCXsKKwkJU3Rpck1hcmtBc1NraXBJbnNlcnRzKGluZGV4KTsKKworCQllcmVwb3J0KFdB Uk5JTkcsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJt c2coIlwiJXNcIiBpcyBub3QgYSBub3QgaW1wbGVtZW50ZWQsIHNlZW1zIGxpa2UgdGhpcyBpbmRl eCBuZWVkIHRvIGJlIGRyb3BwZWQiLCBfX2Z1bmNfXykpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJaWYgKHN0YXRzID09IE5VTEwpCisJCXN0YXRzID0gKEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq KSBwYWxsb2MwKHNpemVvZihJbmRleEJ1bGtEZWxldGVSZXN1bHQpKTsKKworCS8qCisJICogSXRl cmF0ZSBvdmVyIHRoZSBwYWdlcy4gV2UgZG9uJ3QgY2FyZSBhYm91dCBjb25jdXJyZW50bHkgYWRk ZWQgcGFnZXMsCisJICogYmVjYXVzZSBpbmRleCBpcyBtYXJrZWQgYXMgbm90LXJlYWR5IGZvciB0 aGF0IG1vbW1lbnQgYW5kIGluZGV4IG5vdAorCSAqIHVzZWQgZm9yIGluc2VydC4KKwkgKi8KKwlu cGFnZXMgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKGluZGV4KTsKKwlmb3IgKGJsa25vID0g U1RJUl9IRUFEX0JMS05POyBibGtubyA8IG5wYWdlczsgYmxrbm8rKykKKwl7CisJCVN0aXJUdXBs ZSAqaXR1cCwgKml0dXBFbmQ7CisKKwkJdmFjdXVtX2RlbGF5X3BvaW50KGZhbHNlKTsKKworCQli dWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoaW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8sCisJ CQkJCQkJCQlSQk1fTk9STUFMLCBpbmZvLT5zdHJhdGVneSk7CisKKwkJTG9ja0J1ZmZlcihidWZm ZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsK KworCQlpZiAoUGFnZUlzTmV3KHBhZ2UpKQorCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxlKHBh Z2UsIEZpcnN0T2Zmc2V0TnVtYmVyKTsKKwkJaXR1cEVuZCA9IFN0aXJQYWdlR2V0VHVwbGUocGFn ZSwgT2Zmc2V0TnVtYmVyTmV4dChTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSkpOworCQl3aGls ZSAoaXR1cCA8IGl0dXBFbmQpCisJCXsKKwkJCS8qIERvIHdlIGhhdmUgdG8gZGVsZXRlIHRoaXMg dHVwbGU/ICovCisJCQlpZiAoY2FsbGJhY2soJml0dXAtPmhlYXBQdHIsIGNhbGxiYWNrX3N0YXRl KSkKKwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksIGVycm1zZygid2UgbmV2ZXIgZGVsZXRlIGluIHN0aXIiKSkpOworCQkJfQor CisJCQlpdHVwID0gU3RpclBhZ2VHZXROZXh0VHVwbGUoaXR1cCk7CisJCX0KKworCQlVbmxvY2tS ZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXRzOworfQorCisvKgorICog TWFyayBhIFNUSVIgaW5kZXggdG8gc2tpcCBmdXR1cmUgaW5zZXJ0cworICovCit2b2lkCitTdGly TWFya0FzU2tpcEluc2VydHMoUmVsYXRpb24gaW5kZXgpCit7CisJU3Rpck1ldGFQYWdlRGF0YSAq bWV0YURhdGE7CisJQnVmZmVyIG1ldGFCdWZmZXI7CisJUGFnZSBtZXRhUGFnZTsKKworCUFzc2Vy dCghUmVsYXRpb25OZWVkc1dBTChpbmRleCkpOworCW1ldGFCdWZmZXIgPSBSZWFkQnVmZmVyKGlu ZGV4LCBTVElSX01FVEFQQUdFX0JMS05PKTsKKwlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJVRkZF Ul9MT0NLX0VYQ0xVU0lWRSk7CisJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CisKKwltZXRhUGFnZSA9 IEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJbWV0YURhdGEgPSBTdGlyUGFnZUdldE1ldGEo bWV0YVBhZ2UpOworCisJaWYgKCFtZXRhRGF0YS0+c2tpcEluc2VydHMpCisJeworCQltZXRhRGF0 YS0+c2tpcEluc2VydHMgPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkobWV0YUJ1ZmZlcik7CisJ fQorCUVORF9DUklUX1NFQ1RJT04oKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIp OworfQorCitJbmRleEJ1bGtEZWxldGVSZXN1bHQgKgorc3RpcnZhY3V1bWNsZWFudXAoSW5kZXhW YWN1dW1JbmZvICppbmZvLAorCQkJCQkJCQkJCUluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMp Cit7CisJU3Rpck1hcmtBc1NraXBJbnNlcnRzKGluZm8tPmluZGV4KTsKKwllcmVwb3J0KFdBUk5J TkcsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCWVycm1zZygi XCIlc1wiIGlzIG5vdCBhIG5vdCBpbXBsZW1lbnRlZCwgc2VlbXMgbGlrZSB0aGlzIGluZGV4IG5l ZWQgdG8gYmUgZHJvcHBlZCIsIF9fZnVuY19fKSkpOworCXJldHVybiBOVUxMOworfQorCitieXRl YSAqCitzdGlyb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQoreworCXJl dHVybiBOVUxMOworfQorCit2b2lkCitzdGlyY29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpyb290 LCBJbmRleFBhdGggKnBhdGgsCisJCQkJCSBkb3VibGUgbG9vcF9jb3VudCwgQ29zdCAqaW5kZXhT dGFydHVwQ29zdCwKKwkJCQkJIENvc3QgKmluZGV4VG90YWxDb3N0LCBTZWxlY3Rpdml0eSAqaW5k ZXhTZWxlY3Rpdml0eSwKKwkJCQkJIGRvdWJsZSAqaW5kZXhDb3JyZWxhdGlvbiwgZG91YmxlICpp bmRleFBhZ2VzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxlbWVudGVkIiwg X19mdW5jX18pKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNWQ5ZGIxNjdlNTkuLjhlNTA5YTUx YzExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0zNDExLDYgKzM0MTEsNyBAQCB2YWxpZGF0ZV9pbmRl eChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJaXZpbmZvLm1l c3NhZ2VfbGV2ZWwgPSBERUJVRzI7CiAJaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IGhlYXBSZWxh dGlvbi0+cmRfcmVsLT5yZWx0dXBsZXM7CiAJaXZpbmZvLnN0cmF0ZWd5ID0gTlVMTDsKKwlpdmlu Zm8udmFsaWRhdGVfaW5kZXggPSB0cnVlOwogCiAJLyoKIAkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4 IHZhbHVlcyBmb3IgdGhlIHNvcnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvdG9hc3RpbmcuYwppbmRleCA4NzRhOGZjODlhZC4uOWNjNGYwNmRhOWYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3RvYXN0aW5nLmMKQEAgLTMwNyw2ICszMDcsNyBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRp b24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlf UGFyYWxsZWxXb3JrZXJzID0gMDsKIAlpbmRleEluZm8tPmlpX0FtID0gQlRSRUVfQU1fT0lEOwog CWluZGV4SW5mby0+aWlfQW1DYWNoZSA9IE5VTEw7CisJaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkg PSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX0NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsK IAogCWNvbGxhdGlvbklkc1swXSA9IEludmFsaWRPaWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKaW5k ZXggMjUwODlmYWUzZTAuLjg5NzIxNjA3ZjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCkBAIC03 MTksNiArNzE5LDcgQEAgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBjb25zdCBWYWN1 dW1QYXJhbXMgcGFyYW1zLAogCQkJaXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBlbGV2ZWw7CiAJCQlp dmluZm8ubnVtX2hlYXBfdHVwbGVzID0gb25lcmVsLT5yZF9yZWwtPnJlbHR1cGxlczsKIAkJCWl2 aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKKwkJCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IGZhbHNlOwogCiAJCQlzdGF0cyA9IGluZGV4X3ZhY3V1bV9jbGVhbnVwKCZpdmluZm8sIE5VTEwp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCAwZmVlYTFkMzBlYy4u NTgyZGI3N2RkYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFs bGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwpAQCAtODg0 LDYgKzg4NCw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX29uZV9pbmRleChQYXJhbGxlbFZh Y3V1bVN0YXRlICpwdnMsIFJlbGF0aW9uIGluZHJlbCwKIAlpdmluZm8uZXN0aW1hdGVkX2NvdW50 ID0gcHZzLT5zaGFyZWQtPmVzdGltYXRlZF9jb3VudDsKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVz ID0gcHZzLT5zaGFyZWQtPnJlbHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kgPSBwdnMtPmJzdHJh dGVneTsKKwlpdmluZm8udmFsaWRhdGVfaW5kZXggPSBmYWxzZTsKIAogCS8qIFVwZGF0ZSBlcnJv ciB0cmFjZWJhY2sgaW5mb3JtYXRpb24gKi8KIAlwdnMtPmluZG5hbWUgPSBwc3RyZHVwKFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKGluZHJlbCkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9k ZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRleCBlMmQ5 ZTliZTQxYS4uZTk3ZTA5NDNmNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2Vm dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC04NzUsNiArODc1 LDcgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFt b2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkvKiBpbml0aWFsaXplIGluZGV4LWJ1aWxkIHN0YXRl IHRvIGRlZmF1bHQgKi8KIAluLT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNlOwogCW4tPmlpX1Bh cmFsbGVsV29ya2VycyA9IDA7CisJbi0+aWlfQXV4aWxpYXJ5ID0gZmFsc2U7CiAKIAkvKiBzZXQg dXAgZm9yIHBvc3NpYmxlIHVzZSBieSBpbmRleCBBTSAqLwogCW4tPmlpX0FtID0gYW1vaWQ7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oCmluZGV4IDkyMDBhMjJiZDlmLi40MzFhMmZhZTRhZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgK QEAgLTc3LDYgKzc3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhWYWN1dW1JbmZvCiAJYm9vbAkJ ZXN0aW1hdGVkX2NvdW50OwkvKiBudW1faGVhcF90dXBsZXMgaXMgYW4gZXN0aW1hdGUgKi8KIAlp bnQJCQltZXNzYWdlX2xldmVsOwkvKiBlcmVwb3J0IGxldmVsIGZvciBwcm9ncmVzcyBtZXNzYWdl cyAqLwogCWRvdWJsZQkJbnVtX2hlYXBfdHVwbGVzOwkvKiB0dXBsZXMgcmVtYWluaW5nIGluIGhl YXAgKi8KKwlib29sCQl2YWxpZGF0ZV9pbmRleDsgLyogdmFsaWRhdGluZyBjb25jdXJyZW50bHkg YnVpbHQgaW5kZXg/ICovCiAJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3k7CS8qIGFjY2Vz cyBzdHJhdGVneSBmb3IgcmVhZHMgKi8KIH0gSW5kZXhWYWN1dW1JbmZvOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsb3B0aW9ucy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bG9wdGlvbnMuaAppbmRleCBhNjA0YTQ3MDJjMy4uMzEyNzczMWY5YzYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bG9wdGlvbnMuaApAQCAtNTEsOCArNTEsOSBAQCB0eXBlZGVmIGVudW0gcmVsb3B0X2tpbmQKIAlS RUxPUFRfS0lORF9WSUVXID0gKDEgPDwgOSksCiAJUkVMT1BUX0tJTkRfQlJJTiA9ICgxIDw8IDEw KSwKIAlSRUxPUFRfS0lORF9QQVJUSVRJT05FRCA9ICgxIDw8IDExKSwKKwlSRUxPUFRfS0lORF9T VElSID0gKDEgPDwgMTIpLAogCS8qIGlmIHlvdSBhZGQgYSBuZXcga2luZCwgbWFrZSBzdXJlIHlv dSB1cGRhdGUgImxhc3RfZGVmYXVsdCIgdG9vICovCi0JUkVMT1BUX0tJTkRfTEFTVF9ERUZBVUxU ID0gUkVMT1BUX0tJTkRfUEFSVElUSU9ORUQsCisJUkVMT1BUX0tJTkRfTEFTVF9ERUZBVUxUID0g UkVMT1BUX0tJTkRfU1RJUiwKIAkvKiBzb21lIGNvbXBpbGVycyB0cmVhdCBlbnVtcyBhcyBzaWdu ZWQgaW50cywgc28gd2UgY2FuJ3QgdXNlIDEgPDwgMzEgKi8KIAlSRUxPUFRfS0lORF9NQVggPSAo MSA8PCAzMCkKIH0gcmVsb3B0X2tpbmQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv c3Rpci5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uOTk0M2M0MmE5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvc3Rpci5oCkBAIC0wLDAgKzEsMTE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBzdGlyLmgKKyAqCSAgaGVhZGVyIGZpbGUgZm9yIHBvc3RncmVzIHN0aXIgYWNjZXNz IG1ldGhvZCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9p bmNsdWRlL2FjY2Vzcy9zdGlyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBfU1RJUl9IXworI2RlZmluZSBfU1RJUl9IXworCisjaW5jbHVkZSAiYW1hcGkuaCIKKyNpbmNs dWRlICJ4bG9nLmgiCisjaW5jbHVkZSAiZ2VuZXJpY194bG9nLmgiCisjaW5jbHVkZSAiaXR1cC5o IgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKworLyog U3VwcG9ydCBwcm9jZWR1cmVzIG51bWJlcnMgKi8KKyNkZWZpbmUgU1RJUl9OUFJPQwkJCQkwCisK Ky8qIFNjYW4gc3RyYXRlZ2llcyAqLworI2RlZmluZSBTVElSX05TVFJBVEVHSUVTCQkxCisKKyNk ZWZpbmUgU1RJUl9PUFRJT05TX1BST0MJCQkJMAorCisvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBz dGlyIHBhZ2Ugc3RydWN0dXJlcyAqLworI2RlZmluZSBTdGlyUGFnZUdldE9wYXF1ZShwYWdlKSAo KFN0aXJQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSkpCisjZGVmaW5lIFN0 aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpIChTdGlyUGFnZUdldE9wYXF1ZShwYWdlKS0+bWF4b2Zm KQorI2RlZmluZSBTdGlyUGFnZUlzTWV0YShwYWdlKSBcCisJKChTdGlyUGFnZUdldE9wYXF1ZShw YWdlKS0+ZmxhZ3MgJiBTVElSX01FVEEpICE9IDApCisjZGVmaW5lIFN0aXJQYWdlR2V0RGF0YShw YWdlKQkJKChTdGlyVHVwbGUgKilQYWdlR2V0Q29udGVudHMocGFnZSkpCisjZGVmaW5lIFN0aXJQ YWdlR2V0VHVwbGUocGFnZSwgb2Zmc2V0KSBcCisJKChTdGlyVHVwbGUgKikoUGFnZUdldENvbnRl bnRzKHBhZ2UpIFwKKwkJKyBzaXplb2YoU3RpclR1cGxlKSAqICgob2Zmc2V0KSAtIDEpKSkKKyNk ZWZpbmUgU3RpclBhZ2VHZXROZXh0VHVwbGUodHVwbGUpIFwKKwkoKFN0aXJUdXBsZSAqKSgoUG9p bnRlcikodHVwbGUpICsgc2l6ZW9mKFN0aXJUdXBsZSkpKQorCisKKworLyogUHJlc2VydmVkIHBh Z2UgbnVtYmVycyAqLworI2RlZmluZSBTVElSX01FVEFQQUdFX0JMS05PCSgwKQorI2RlZmluZSBT VElSX0hFQURfQkxLTk8JCSgxKSAvKiBmaXJzdCBkYXRhIHBhZ2UgKi8KKworCisvKiBPcGFxdWUg Zm9yIHN0aXIgcGFnZXMgKi8KK3R5cGVkZWYgc3RydWN0IFN0aXJQYWdlT3BhcXVlRGF0YQorewor CU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBudW1iZXIgb2YgaW5kZXggdHVwbGVzIG9uIHBhZ2Ug Ki8KKwl1aW50MTYJCWZsYWdzOwkJCS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVsb3cgKi8KKwl1 aW50MTYJCXVudXNlZDsJCQkvKiBwbGFjZWhvbGRlciB0byBmb3JjZSBtYXhhbGlnbmluZyBvZiBz aXplIG9mCisJCQkJCQkJCSAqIFN0aXJQYWdlT3BhcXVlRGF0YSBhbmQgdG8gcGxhY2UKKwkJCQkJ CQkJICogc3Rpcl9wYWdlX2lkIGV4YWN0bHkgYXQgdGhlIGVuZCBvZiBwYWdlICovCisJdWludDE2 CQlzdGlyX3BhZ2VfaWQ7CS8qIGZvciBpZGVudGlmaWNhdGlvbiBvZiBTVElSIGluZGV4ZXMgKi8K K30gU3RpclBhZ2VPcGFxdWVEYXRhOworCisvKiBTdGlyIHBhZ2UgZmxhZ3MgKi8KKyNkZWZpbmUg U1RJUl9NRVRBCQkoMTw8MCkKKwordHlwZWRlZiBTdGlyUGFnZU9wYXF1ZURhdGEgKlN0aXJQYWdl T3BhcXVlOworCisjZGVmaW5lIFNUSVJfUEFHRV9JRAkJMHhGRjg0CisKKy8qIE1ldGFkYXRhIG9m IHN0aXIgaW5kZXggKi8KK3R5cGVkZWYgc3RydWN0IFN0aXJNZXRhUGFnZURhdGEKK3sKKwl1aW50 MzIJCW1hZ2lja051bWJlcjsKKwl1aW50MTYJCWxhc3RCbGtObzsKKwlib29sCQlza2lwSW5zZXJ0 czsJLyogc2hvdWxkIHdlIGp1c3QgZXhpdCB3aXRob3V0IGFueSBpbnNlcnRzICovCit9IFN0aXJN ZXRhUGFnZURhdGE7CisKKy8qIE1hZ2ljIG51bWJlciB0byBkaXN0aW5ndWlzaCBzdGlyIHBhZ2Vz IGZyb20gb3RoZXJzICovCisjZGVmaW5lIFNUSVJfTUFHSUNLX05VTUJFUiAoMHhEQkFDMERFRikK KworI2RlZmluZSBTdGlyUGFnZUdldE1ldGEocGFnZSkJKChTdGlyTWV0YVBhZ2VEYXRhICopIFBh Z2VHZXRDb250ZW50cyhwYWdlKSkKKwordHlwZWRlZiBzdHJ1Y3QgU3RpclR1cGxlCit7CisJSXRl bVBvaW50ZXJEYXRhIGhlYXBQdHI7Cit9IFN0aXJUdXBsZTsKKworI2RlZmluZSBTdGlyUGFnZUdl dEZyZWVTcGFjZShzdGF0ZSwgcGFnZSkgXAorCShCTENLU1ogLSBNQVhBTElHTihTaXplT2ZQYWdl SGVhZGVyRGF0YSkgXAorCQktIFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpICogKHNpemVvZihT dGlyVHVwbGUpKSBcCisJCS0gTUFYQUxJR04oc2l6ZW9mKFN0aXJQYWdlT3BhcXVlRGF0YSkpKQor CitleHRlcm4gdm9pZCBTdGlyRmlsbE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4LCBQYWdlIG1ldGFQ YWdlLCBib29sIHNraXBJbnNlcnRzKTsKK2V4dGVybiB2b2lkIFN0aXJJbml0TWV0YXBhZ2UoUmVs YXRpb24gaW5kZXgsIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gdm9pZCBTdGlySW5pdFBh Z2UoUGFnZSBwYWdlLCB1aW50MTYgZmxhZ3MpOworZXh0ZXJuIHZvaWQgU3Rpck1hcmtBc1NraXBJ bnNlcnRzKFJlbGF0aW9uIGluZGV4KTsKKworLyogaW5kZXggYWNjZXNzIG1ldGhvZCBpbnRlcmZh Y2UgZnVuY3Rpb25zICovCitleHRlcm4gYm9vbCBzdGlydmFsaWRhdGUoT2lkIG9wY2xhc3NvaWQp OworZXh0ZXJuIGJvb2wgc3Rpcmluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0gKnZhbHVlcywg Ym9vbCAqaXNudWxsLAorCQkJCQkgSXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVsYXRpb24gaGVhcFJl bCwKKwkJCQkJIEluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlxdWUsCisJCQkJCSBib29sIGluZGV4 VW5jaGFuZ2VkLAorCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4dGVybiBJ bmRleFNjYW5EZXNjIHN0aXJiZWdpbnNjYW4oUmVsYXRpb24gciwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKTsKK2V4dGVybiB2b2lkIHN0aXJyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu S2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCisJCQkJCSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQg bm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIHN0aXJlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CitleHRlcm4gSW5kZXhCdWlsZFJlc3VsdCAqc3RpcmJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0 aW9uIGluZGV4LAorCQkJCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4dGVy biB2b2lkIHN0aXJidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KTsKK2V4dGVybiBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKnN0aXJidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKKwkJCQkJ CQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLCBJbmRleEJ1bGtEZWxldGVDYWxs YmFjayBjYWxsYmFjaywKKwkJCQkJCQkJCQkgICB2b2lkICpjYWxsYmFja19zdGF0ZSk7CitleHRl cm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGlydmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUlu Zm8gKmluZm8sCisJCQkJCQkJCQkJCSAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cyk7Citl eHRlcm4gYnl0ZWEgKnN0aXJvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUp OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX2FtLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0 CmluZGV4IDI2ZDE1OTI4YTE1Li5hNWVjZjkyMDhhZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19hbS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQKQEAg LTMzLDUgKzMzLDggQEAKIHsgb2lkID0+ICczNTgwJywgb2lkX3N5bWJvbCA9PiAnQlJJTl9BTV9P SUQnLAogICBkZXNjciA9PiAnYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2Qn LAogICBhbW5hbWUgPT4gJ2JyaW4nLCBhbWhhbmRsZXIgPT4gJ2JyaW5oYW5kbGVyJywgYW10eXBl ID0+ICdpJyB9LAoreyBvaWQgPT4gJzU1NTUnLCBvaWRfc3ltYm9sID0+ICdTVElSX0FNX09JRCcs CisgIGRlc2NyID0+ICdzaG9ydCB0ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2Qn LAorICBhbW5hbWUgPT4gJ3N0aXInLCBhbWhhbmRsZXIgPT4gJ3N0aXJoYW5kbGVyJywgYW10eXBl ID0+ICdpJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xh c3MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAppbmRleCA0YTk2MjQ4 MDJhYS4uNjIyN2M1NjU4ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3Bj bGFzcy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdApAQCAtNDg4 LDQgKzQ4OCw4IEBACiAKICMgbm8gYnJpbiBvcGNsYXNzIGZvciB0aGUgZ2VvbWV0cmljIHR5cGVz IGV4Y2VwdCBib3gKIAorIyBhbGxvdyBhbnkgdHlwZXMgZm9yIFNUSVIKK3sgb3BjbWV0aG9kID0+ ICdzdGlyJywgb2lkX3N5bWJvbCA9PiAnQU5ZX1NUSVJfT1BTX09JRCcsIG9wY25hbWUgPT4gJ3N0 aXJfb3BzJywKKyAgb3BjZmFtaWx5ID0+ICdzdGlyL2FueV9vcHMnLCBvcGNpbnR5cGUgPT4gJ2Fu eSd9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRh dCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0CmluZGV4IGY3ZGNiOTZiNDNj Li44MzhhZDMyYzkzMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWls eS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQKQEAgLTMwNCw1 ICszMDQsNyBAQAogICBvcGZtZXRob2QgPT4gJ2hhc2gnLCBvcGZuYW1lID0+ICdtdWx0aXJhbmdl X29wcycgfSwKIHsgb2lkID0+ICc2MTU4JywKICAgb3BmbWV0aG9kID0+ICdnaXN0Jywgb3BmbmFt ZSA9PiAnbXVsdGlyYW5nZV9vcHMnIH0sCit7IG9pZCA9PiAnNTU1OCcsCisgIG9wZm1ldGhvZCA9 PiAnc3RpcicsIG9wZm5hbWUgPT4gJ2FueV9vcHMnIH0sCiAKIF0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CmluZGV4IDFlZGIxODk1OGY3Li4zZDQ5ODkxYWYzMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC05MzUsNiArOTM1LDEwIEBACiAgIHByb25hbWUgPT4gJ2JyaW5oYW5kbGVyJywgcHJv dm9sYXRpbGUgPT4gJ3YnLAogICBwcm9yZXR0eXBlID0+ICdpbmRleF9hbV9oYW5kbGVyJywgcHJv YXJndHlwZXMgPT4gJ2ludGVybmFsJywKICAgcHJvc3JjID0+ICdicmluaGFuZGxlcicgfSwKK3sg b2lkID0+ICc1NTU2JywgZGVzY3IgPT4gJ3Nob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNj ZXNzIG1ldGhvZCBoYW5kbGVyJywKKyAgcHJvbmFtZSA9PiAnc3RpcmhhbmRsZXInLCBwcm92b2xh dGlsZSA9PiAndicsCisgIHByb3JldHR5cGUgPT4gJ2luZGV4X2FtX2hhbmRsZXInLCBwcm9hcmd0 eXBlcyA9PiAnaW50ZXJuYWwnLAorICBwcm9zcmMgPT4gJ3N0aXJoYW5kbGVyJyB9LAogeyBvaWQg PT4gJzM5NTInLCBkZXNjciA9PiAnYnJpbjogc3RhbmRhbG9uZSBzY2FuIG5ldyB0YWJsZSBwYWdl cycsCiAgIHByb25hbWUgPT4gJ2JyaW5fc3VtbWFyaXplX25ld192YWx1ZXMnLCBwcm92b2xhdGls ZSA9PiAndicsCiAgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsIHBy b2FyZ3R5cGVzID0+ICdyZWdjbGFzcycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDE4YWU4ZjBk NGJiLi44NGIzMjMxOWZiMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE1NSw4ICsxNTUsOCBA QCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQllbnRyaWVzIGZvciBhIHBhcnRpY3VsYXIg aW5kZXguICBVc2VkIGZvciBib3RoIGluZGV4X2J1aWxkIGFuZAogICoJCXJldGFpbCBjcmVhdGlv biBvZiBpbmRleCBlbnRyaWVzLgogICoKLSAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhvdENo YWluLCBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKLSAqIGR1cmluZyBpbmRl eCBidWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLgorICogaWlf Q29uY3VycmVudCwgaWlfQnJva2VuSG90Q2hhaW4sIGlpX0F1eGlsaWFyeSBhbmQgaWlfUGFyYWxs ZWxXb3JrZXJzCisgKiBhcmUgdXNlZCBvbmx5IGR1cmluZyBpbmRleCBidWlsZDsgdGhleSdyZSBj b252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8K IHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwpAQCAtMjE2LDcgKzIxNiw4IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4SW5mbwogCWJvb2wJCWlpX1dpdGhvdXRPdmVybGFwczsKIAkvKiAjIG9mIHdvcmtl cnMgcmVxdWVzdGVkIChleGNsdWRlcyBsZWFkZXIpICovCiAJaW50CQkJaWlfUGFyYWxsZWxXb3Jr ZXJzOwotCisJLyogaXMgYXV4aWxpYXJ5IGZvciBjb25jdXJyZW50IGluZGV4IGJ1aWxkPyAqLwor CWJvb2wJCWlpX0F1eGlsaWFyeTsKIAkvKiBPaWQgb2YgaW5kZXggQU0gKi8KIAlPaWQJCQlpaV9B bTsKIAkvKiBwcml2YXRlIGNhY2hlIGFyZWEgZm9yIGluZGV4IEFNICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxmdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5k ZXhfc2VsZnVuY3MuaAppbmRleCA2YzY0ZGI2ZDQ1Ni4uZTBkOTM5ZDY4NTcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL2luZGV4X3NlbGZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvaW5kZXhfc2VsZnVuY3MuaApAQCAtNjIsNiArNjIsMTQgQEAgZXh0ZXJuIHZvaWQgc3BnY29z dGVzdGltYXRlKHN0cnVjdCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQlTZWxlY3Rpdml0eSAq aW5kZXhTZWxlY3Rpdml0eSwKIAkJCQkJCQlkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sCiAJCQkJ CQkJZG91YmxlICppbmRleFBhZ2VzKTsKK2V4dGVybiB2b2lkIHN0aXJjb3N0ZXN0aW1hdGUoc3Ry dWN0IFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCXN0cnVjdCBJbmRleFBhdGggKnBhdGgsCisJ CQkJCQkJZG91YmxlIGxvb3BfY291bnQsCisJCQkJCQkJQ29zdCAqaW5kZXhTdGFydHVwQ29zdCwK KwkJCQkJCQlDb3N0ICppbmRleFRvdGFsQ29zdCwKKwkJCQkJCQlTZWxlY3Rpdml0eSAqaW5kZXhT ZWxlY3Rpdml0eSwKKwkJCQkJCQlkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sCisJCQkJCQkJZG91 YmxlICppbmRleFBhZ2VzKTsKIGV4dGVybiB2b2lkIGdpbmNvc3Rlc3RpbWF0ZShzdHJ1Y3QgUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJc3RydWN0IEluZGV4UGF0aCAqcGF0aCwKIAkJCQkJCQlk b3VibGUgbG9vcF9jb3VudCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YW11dGlscy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CmluZGV4 IDdhYjYxMTNjNjE5Li45MmMwMzNhMjAxMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9hbXV0aWxzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0CkBAIC0xNzMsNyArMTczLDEzIEBAIHNlbGVjdCBhbW5hbWUsIHByb3AsIHBnX2luZGV4 YW1faGFzX3Byb3BlcnR5KGEub2lkLCBwcm9wKSBhcyBwCiAgc3BnaXN0IHwgY2FuX2V4Y2x1ZGUg ICB8IHQKICBzcGdpc3QgfCBjYW5faW5jbHVkZSAgIHwgdAogIHNwZ2lzdCB8IGJvZ3VzICAgICAg ICAgfCAKLSgzNiByb3dzKQorIHN0aXIgICB8IGNhbl9vcmRlciAgICAgfCBmCisgc3RpciAgIHwg Y2FuX3VuaXF1ZSAgICB8IGYKKyBzdGlyICAgfCBjYW5fbXVsdGlfY29sIHwgdAorIHN0aXIgICB8 IGNhbl9leGNsdWRlICAgfCBmCisgc3RpciAgIHwgY2FuX2luY2x1ZGUgICB8IHQKKyBzdGlyICAg fCBib2d1cyAgICAgICAgIHwgCisoNDIgcm93cykKIAogLS0KIC0tIGFkZGl0aW9uYWwgY2hlY2tz IGZvciBwZ19pbmRleF9jb2x1bW5faGFzX3Byb3BlcnR5CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9vcHJfc2FuaXR5Lm91dAppbmRleCBhMzU3ZTFkMGMwZS4uYzU1OTVlNzg4YTQgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dApAQCAtMjEyMiw5ICsyMTIyLDEwIEBA IEZST00gcGdfb3BjbGFzcyBBUyBjMQogV0hFUkUgTk9UIEVYSVNUUyhTRUxFQ1QgMSBGUk9NIHBn X2Ftb3AgQVMgYTEKICAgICAgICAgICAgICAgICAgV0hFUkUgYTEuYW1vcGZhbWlseSA9IGMxLm9w Y2ZhbWlseQogICAgICAgICAgICAgICAgICAgIEFORCBiaW5hcnlfY29lcmNpYmxlKGMxLm9wY2lu dHlwZSwgYTEuYW1vcGxlZnR0eXBlKSk7Ci0gb3BjbmFtZSB8IG9wY2ZhbWlseSAKLS0tLS0tLS0t LSstLS0tLS0tLS0tLQotKDAgcm93cykKKyBvcGNuYW1lICB8IG9wY2ZhbWlseSAKKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0KKyBzdGlyX29wcyB8ICAgICAgNTU1OAorKDEgcm93KQogCiAtLSBDaGVj ayB0aGF0IGVhY2ggb3BlcmF0b3IgbGlzdGVkIGluIHBnX2Ftb3AgaGFzIGFuIGFzc29jaWF0ZWQg b3BjbGFzcywKIC0tIHRoYXQgaXMgb25lIHdob3NlIG9wY2ludHlwZSBtYXRjaGVzIG9wcmxlZnQg KHBvc3NpYmx5IGJ5IGNvZXJjaW9uKS4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4 IGM4ZjM5MzJlZGYwLi5lY2MyYzJhNjA0OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 CkBAIC01MTcxLDcgKzUxNzEsOCBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwg VGFibGUKICBoZWFwMiAgfCBUYWJsZQogIHNwZ2lzdCB8IEluZGV4Ci0oOCByb3dzKQorIHN0aXIg ICB8IEluZGV4CisoOSByb3dzKQogCiBcZEEgKgogTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwpAQCAt NTE4NSw3ICs1MTg2LDggQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxl CiAgaGVhcDIgIHwgVGFibGUKICBzcGdpc3QgfCBJbmRleAotKDggcm93cykKKyBzdGlyICAgfCBJ bmRleAorKDkgcm93cykKIAogXGRBIGgqCiBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCkBAIC01MjEw LDkgKzUyMTIsOSBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAKIFxkQTogZXh0cmEgYXJndW1l bnQgImJhciIgaWdub3JlZAogXGRBKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIGFjY2VzcyBtZXRob2RzCi0gIE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAg ICB8ICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgIAotLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2Vz cyBtZXRob2RzCisgIE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAg ICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogIGJyaW4gICB8IEluZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9j ayByYW5nZSBpbmRleCAoQlJJTikgYWNjZXNzIG1ldGhvZAogIGJ0cmVlICB8IEluZGV4IHwgYnRo YW5kbGVyICAgICAgICAgICAgfCBiLXRyZWUgaW5kZXggYWNjZXNzIG1ldGhvZAogIGdpbiAgICB8 IEluZGV4IHwgZ2luaGFuZGxlciAgICAgICAgICAgfCBHSU4gaW5kZXggYWNjZXNzIG1ldGhvZApA QCAtNTIyMSwxMiArNTIyMywxMyBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwg VGFibGUgfCBoZWFwX3RhYmxlYW1faGFuZGxlciB8IGhlYXAgdGFibGUgYWNjZXNzIG1ldGhvZAog IGhlYXAyICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCAKICBzcGdpc3QgfCBJbmRl eCB8IHNwZ2hhbmRsZXIgICAgICAgICAgIHwgU1AtR2lTVCBpbmRleCBhY2Nlc3MgbWV0aG9kCi0o OCByb3dzKQorIHN0aXIgICB8IEluZGV4IHwgc3RpcmhhbmRsZXIgICAgICAgICAgfCBzaG9ydCB0 ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2QKKyg5IHJvd3MpCiAKIFxkQSsgKgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCi0gIE5h bWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICBEZXNjcmlw dGlvbiAgICAgICAgICAgICAgIAotLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCisgIE5hbWUgIHwgVHlw ZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGJyaW4gICB8IElu ZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9jayByYW5nZSBpbmRleCAoQlJJTikgYWNj ZXNzIG1ldGhvZAogIGJ0cmVlICB8IEluZGV4IHwgYnRoYW5kbGVyICAgICAgICAgICAgfCBiLXRy ZWUgaW5kZXggYWNjZXNzIG1ldGhvZAogIGdpbiAgICB8IEluZGV4IHwgZ2luaGFuZGxlciAgICAg ICAgICAgfCBHSU4gaW5kZXggYWNjZXNzIG1ldGhvZApAQCAtNTIzNSw3ICs1MjM4LDggQEAgTGlz dCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRs ZXIgfCBoZWFwIHRhYmxlIGFjY2VzcyBtZXRob2QKICBoZWFwMiAgfCBUYWJsZSB8IGhlYXBfdGFi bGVhbV9oYW5kbGVyIHwgCiAgc3BnaXN0IHwgSW5kZXggfCBzcGdoYW5kbGVyICAgICAgICAgICB8 IFNQLUdpU1QgaW5kZXggYWNjZXNzIG1ldGhvZAotKDggcm93cykKKyBzdGlyICAgfCBJbmRleCB8 IHN0aXJoYW5kbGVyICAgICAgICAgIHwgc2hvcnQgdGVybSBpbmRleCByZXBsYWNlbWVudCBhY2Nl c3MgbWV0aG9kCisoOSByb3dzKQogCiBcZEErIGgqCiAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIGFjY2VzcyBtZXRob2RzCi0tIAoyLjQzLjAKCg== --0000000000002ad96a064431f950 Content-Type: text/plain; charset="US-ASCII"; name="v27-0001-This-is-https-commitfest.postgresql.org-50-5160-.patch" Content-Disposition: attachment; filename="v27-0001-This-is-https-commitfest.postgresql.org-50-5160-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg71i7 RnJvbSBjOWYzNmJmNGFjYTIxYjU0MTg5OTg3M2MzM2Y5ODQ5YTY5M2Y1YzVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDowOTo1MiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDEvOF0gVGhpcyBpcyBodHRwczovL2NvbW1pdGZlc3QucG9zdGdyZXNxbC5vcmcv NTAvNTE2MC8KIGFuZCBodHRwczovL2NvbW1pdGZlc3QucG9zdGdyZXNxbC5vcmcvcGF0Y2gvNTQz OC8gbWVyZ2VkIGluIHNpbmdsZSBjb21taXQuIGl0CiBpcyByZXF1aXJlZCBmb3Igc3RhYmlsaXR5 IG9mIHN0cmVzcyB0ZXN0cy4KCi0tLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAg ICAgICAgfCAgNjggKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAg IHwgICAzICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMTE5ICsr KysrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJs ZS5jIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgIHwgMTM1 ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1n ci5jICAgICAgIHwgICAyICsKIDcgZmlsZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKyksIDg4 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVl LmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDA5NDljODg5ODNhLi4y NDQ1ZjAwMTcwMCAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwor KysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC0zODIsNyArMzgyLDYgQEAg YnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBib29s IGhlYXBrZXlzcGFjZSwKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CiAJdWludDMyCQlwcmV2aW91 c2xldmVsOwogCUJ0cmVlTGV2ZWwJY3VycmVudDsKLQlTbmFwc2hvdAlzbmFwc2hvdCA9IFNuYXBz aG90QW55OwogCiAJaWYgKCFyZWFkb25seSkKIAkJZWxvZyhERUJVRzEsICJ2ZXJpZnlpbmcgY29u c2lzdGVuY3kgb2YgdHJlZSBzdHJ1Y3R1cmUgZm9yIGluZGV4IFwiJXNcIiIsCkBAIC00MzMsMzgg KzQzMiwzNSBAQCBidF9jaGVja19ldmVyeV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhl YXByZWwsIGJvb2wgaGVhcGtleXNwYWNlLAogCQlzdGF0ZS0+aGVhcHR1cGxlc3ByZXNlbnQgPSAw OwogCiAJCS8qCi0JCSAqIFJlZ2lzdGVyIG91ciBvd24gc25hcHNob3QgaW4gIXJlYWRvbmx5IGNh c2UsIHJhdGhlciB0aGFuIGFza2luZworCQkgKiBSZWdpc3RlciBvdXIgb3duIHNuYXBzaG90IGZv ciBoZWFwYWxsaW5kZXhlZCwgcmF0aGVyIHRoYW4gYXNraW5nCiAJCSAqIHRhYmxlX2luZGV4X2J1 aWxkX3NjYW4oKSB0byBkbyB0aGlzIGZvciB1cyBsYXRlci4gIFRoaXMgbmVlZHMgdG8KIAkJICog aGFwcGVuIGJlZm9yZSBpbmRleCBmaW5nZXJwcmludGluZyBiZWdpbnMsIHNvIHdlIGNhbiBsYXRl ciBiZQogCQkgKiBjZXJ0YWluIHRoYXQgaW5kZXggZmluZ2VycHJpbnRpbmcgc2hvdWxkIGhhdmUg cmVhY2hlZCBhbGwgdHVwbGVzCiAJCSAqIHJldHVybmVkIGJ5IHRhYmxlX2luZGV4X2J1aWxkX3Nj YW4oKS4KIAkJICovCi0JCWlmICghc3RhdGUtPnJlYWRvbmx5KQotCQl7Ci0JCQlzbmFwc2hvdCA9 IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJc3RhdGUtPnNu YXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCi0J CQkvKgotCQkJICogR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpIGFsd2F5cyBhY3F1aXJlcyBhIG5l dyBNVkNDIHNuYXBzaG90IGluCi0JCQkgKiBSRUFEIENPTU1JVFRFRCBtb2RlLiAgQSBuZXcgc25h cHNob3QgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGFsbAotCQkJICogdGhlIGVudHJpZXMgaXQgcmVx dWlyZXMgaW4gdGhlIGluZGV4LgotCQkJICoKLQkJCSAqIFdlIG11c3QgZGVmZW5kIGFnYWluc3Qg dGhlIHBvc3NpYmlsaXR5IHRoYXQgYW4gb2xkIHhhY3QKLQkJCSAqIHNuYXBzaG90IHdhcyByZXR1 cm5lZCBhdCBoaWdoZXIgaXNvbGF0aW9uIGxldmVscyB3aGVuIHRoYXQKLQkJCSAqIHNuYXBzaG90 IGlzIG5vdCBzYWZlIGZvciBpbmRleCBzY2FucyBvZiB0aGUgdGFyZ2V0IGluZGV4LiAgVGhpcwot CQkJICogaXMgcG9zc2libGUgd2hlbiB0aGUgc25hcHNob3Qgc2VlcyB0dXBsZXMgdGhhdCBhcmUg YmVmb3JlIHRoZQotCQkJICogaW5kZXgncyBpbmRjaGVja3htaW4gaG9yaXpvbi4gIFRocm93aW5n IGFuIGVycm9yIGhlcmUgc2hvdWxkIGJlCi0JCQkgKiB2ZXJ5IHJhcmUuICBJdCBkb2Vzbid0IHNl ZW0gd29ydGggdXNpbmcgYSBzZWNvbmRhcnkgc25hcHNob3QgdG8KLQkJCSAqIGF2b2lkIHRoaXMu Ci0JCQkgKi8KLQkJCWlmIChJc29sYXRpb25Vc2VzWGFjdFNuYXBzaG90KCkgJiYgcmVsLT5yZF9p bmRleC0+aW5kY2hlY2t4bWluICYmCi0JCQkJIVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhIZWFwVHVw bGVIZWFkZXJHZXRYbWluKHJlbC0+cmRfaW5kZXh0dXBsZS0+dF9kYXRhKSwKLQkJCQkJCQkJCSAg IHNuYXBzaG90LT54bWluKSkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSwKLQkJCQkJCSBlcnJtc2coImluZGV4IFwi JXNcIiBjYW5ub3QgYmUgdmVyaWZpZWQgdXNpbmcgdHJhbnNhY3Rpb24gc25hcHNob3QiLAotCQkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwotCQl9Ci0JfQorCQkvKgorCQkg KiBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkgYWx3YXlzIGFjcXVpcmVzIGEgbmV3IE1WQ0Mgc25h cHNob3QgaW4KKwkJICogUkVBRCBDT01NSVRURUQgbW9kZS4gIEEgbmV3IHNuYXBzaG90IGlzIGd1 YXJhbnRlZWQgdG8gaGF2ZSBhbGwKKwkJICogdGhlIGVudHJpZXMgaXQgcmVxdWlyZXMgaW4gdGhl IGluZGV4LgorCQkgKgorCQkgKiBXZSBtdXN0IGRlZmVuZCBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0 eSB0aGF0IGFuIG9sZCB4YWN0CisJCSAqIHNuYXBzaG90IHdhcyByZXR1cm5lZCBhdCBoaWdoZXIg aXNvbGF0aW9uIGxldmVscyB3aGVuIHRoYXQKKwkJICogc25hcHNob3QgaXMgbm90IHNhZmUgZm9y IGluZGV4IHNjYW5zIG9mIHRoZSB0YXJnZXQgaW5kZXguICBUaGlzCisJCSAqIGlzIHBvc3NpYmxl IHdoZW4gdGhlIHNuYXBzaG90IHNlZXMgdHVwbGVzIHRoYXQgYXJlIGJlZm9yZSB0aGUKKwkJICog aW5kZXgncyBpbmRjaGVja3htaW4gaG9yaXpvbi4gIFRocm93aW5nIGFuIGVycm9yIGhlcmUgc2hv dWxkIGJlCisJCSAqIHZlcnkgcmFyZS4gIEl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB1c2luZyBhIHNl Y29uZGFyeSBzbmFwc2hvdCB0bworCQkgKiBhdm9pZCB0aGlzLgorCQkgKi8KKwkJaWYgKElzb2xh dGlvblVzZXNYYWN0U25hcHNob3QoKSAmJiByZWwtPnJkX2luZGV4LT5pbmRjaGVja3htaW4gJiYK KwkJCSFUcmFuc2FjdGlvbklkUHJlY2VkZXMoSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihyZWwtPnJk X2luZGV4dHVwbGUtPnRfZGF0YSksCisJCQkJCQkJCSAgIHN0YXRlLT5zbmFwc2hvdC0+eG1pbikp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9TRVJJQUxJWkFU SU9OX0ZBSUxVUkUpLAorCQkJCQkgZXJybXNnKCJpbmRleCBcIiVzXCIgY2Fubm90IGJlIHZlcmlm aWVkIHVzaW5nIHRyYW5zYWN0aW9uIHNuYXBzaG90IiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKSkpOworfQogCiAJLyoKIAkgKiBXZSBuZWVkIGEgc25hcHNob3QgdG8gY2hl Y2sgdGhlIHVuaXF1ZW5lc3Mgb2YgdGhlIGluZGV4LiBGb3IgYmV0dGVyCkBAIC00NzYsOSArNDcy LDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBib29sIGhlYXBrZXlzcGFjZSwKIAkJc3RhdGUtPmluZGV4aW5mbyA9IEJ1aWxkSW5kZXhJbmZv KHN0YXRlLT5yZWwpOwogCQlpZiAoc3RhdGUtPmluZGV4aW5mby0+aWlfVW5pcXVlKQogCQl7Ci0J CQlpZiAoc25hcHNob3QgIT0gU25hcHNob3RBbnkpCi0JCQkJc3RhdGUtPnNuYXBzaG90ID0gc25h cHNob3Q7Ci0JCQllbHNlCisJCQlpZiAoc3RhdGUtPnNuYXBzaG90ID09IEludmFsaWRTbmFwc2hv dCkKIAkJCQlzdGF0ZS0+c25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9u U25hcHNob3QoKSk7CiAJCX0KIAl9CkBAIC01NTUsMTMgKzU0OSwxMiBAQCBidF9jaGVja19ldmVy eV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGJvb2wgaGVhcGtleXNwYWNl LAogCQkvKgogCQkgKiBDcmVhdGUgb3VyIG93biBzY2FuIGZvciB0YWJsZV9pbmRleF9idWlsZF9z Y2FuKCksIHJhdGhlciB0aGFuCiAJCSAqIGdldHRpbmcgaXQgdG8gZG8gc28gZm9yIHVzLiAgVGhp cyBpcyByZXF1aXJlZCBzbyB0aGF0IHdlIGNhbgotCQkgKiBhY3R1YWxseSB1c2UgdGhlIE1WQ0Mg c25hcHNob3QgcmVnaXN0ZXJlZCBlYXJsaWVyIGluICFyZWFkb25seQotCQkgKiBjYXNlLgorCQkg KiBhY3R1YWxseSB1c2UgdGhlIE1WQ0Mgc25hcHNob3QgcmVnaXN0ZXJlZCBlYXJsaWVyLgogCQkg KgogCQkgKiBOb3RlIHRoYXQgdGFibGVfaW5kZXhfYnVpbGRfc2NhbigpIGNhbGxzIGhlYXBfZW5k c2NhbigpIGZvciB1cy4KIAkJICovCiAJCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fc3RyYXQoc3Rh dGUtPmhlYXByZWwsCS8qIHJlbGF0aW9uICovCi0JCQkJCQkJCQkgc25hcHNob3QsCS8qIHNuYXBz aG90ICovCisJCQkJCQkJCQkgc3RhdGUtPnNuYXBzaG90LAkvKiBzbmFwc2hvdCAqLwogCQkJCQkJ CQkJIDAsIC8qIG51bWJlciBvZiBrZXlzICovCiAJCQkJCQkJCQkgTlVMTCwJLyogc2NhbiBrZXkg Ki8KIAkJCQkJCQkJCSB0cnVlLAkvKiBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5IE9LICovCkBAIC01 NjksNyArNTYyLDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlv biBoZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwKIAogCQkvKgogCQkgKiBTY2FuIHdpbGwgYmVo YXZlIGFzIHRoZSBmaXJzdCBzY2FuIG9mIGEgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWQotCQkg KiBiZWhhdmVzIGluICFyZWFkb25seSBjYXNlLgorCQkgKiBiZWhhdmVzLgogCQkgKgogCQkgKiBJ dCdzIG9rYXkgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlIHNhbWUgbG9jayBzdHJlbmd0 aCBmb3IgdGhlCiAJCSAqIGhlYXAgcmVsYXRpb24gYXMgYW55IG90aGVyIGlpX0NvbmN1cnJlbnQg Y2FsbGVyIHdvdWxkIGluICFyZWFkb25seQpAQCAtNTc4LDcgKzU3MSw3IEBAIGJ0X2NoZWNrX2V2 ZXJ5X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3Bh Y2UsCiAJCSAqIHRoYXQgbmVlZHMgdG8gYmUgc3VyZSB0aGF0IHRoZXJlIHdhcyBubyBjb25jdXJy ZW50IHJlY3ljbGluZyBvZgogCQkgKiBUSURzLgogCQkgKi8KLQkJaW5kZXhpbmZvLT5paV9Db25j dXJyZW50ID0gIXN0YXRlLT5yZWFkb25seTsKKwkJaW5kZXhpbmZvLT5paV9Db25jdXJyZW50ID0g dHJ1ZTsKIAogCQkvKgogCQkgKiBEb24ndCB3YWl0IGZvciB1bmNvbW1pdHRlZCB0dXBsZSB4YWN0 IGNvbW1pdC9hYm9ydCB3aGVuIGluZGV4IGlzIGEKQEAgLTYwMiwxNCArNTk1LDExIEBAIGJ0X2No ZWNrX2V2ZXJ5X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFw a2V5c3BhY2UsCiAJCQkJCQkJCSBzdGF0ZS0+aGVhcHR1cGxlc3ByZXNlbnQsIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKGhlYXByZWwpLAogCQkJCQkJCQkgMTAwLjAgKiBibG9vbV9wcm9wX2JpdHNf c2V0KHN0YXRlLT5maWx0ZXIpKSkpOwogCi0JCWlmIChzbmFwc2hvdCAhPSBTbmFwc2hvdEFueSkK LQkJCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7Ci0KIAkJYmxvb21fZnJlZShzdGF0ZS0+ ZmlsdGVyKTsKIAl9CiAKIAkvKiBCZSB0aWR5OiAqLwotCWlmIChzbmFwc2hvdCA9PSBTbmFwc2hv dEFueSAmJiBzdGF0ZS0+c25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KQorCWlmIChzdGF0ZS0+ c25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KQogCQlVbnJlZ2lzdGVyU25hcHNob3Qoc3RhdGUt PnNuYXBzaG90KTsKIAlNZW1vcnlDb250ZXh0RGVsZXRlKHN0YXRlLT50YXJnZXRjb250ZXh0KTsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggNTcxMmZhYzM2OTcuLjk3NDI0M2M1YzYw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtMTc4OSw2ICsxNzg5LDcgQEAgRGVmaW5l SW5kZXgoT2lkIHRhYmxlSWQsCiAJICogYmVmb3JlIHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFr ZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55CiAJICogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQg aGF2ZSBvbGRlciBzbmFwc2hvdHMuCiAJICovCisJSU5KRUNUSU9OX1BPSU5UKCJkZWZpbmVfaW5k ZXhfYmVmb3JlX3NldF92YWxpZCIsIE5VTEwpOwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFy YW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAogCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX1dBSVRfMyk7CiAJV2FpdEZvck9sZGVyU25hcHNob3RzKGxpbWl0WG1pbiwgdHJ1ZSk7 CkBAIC00MjI4LDcgKzQyMjksNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCSAqIHRoZSBz YW1lIHRpbWUgdG8gbWFrZSBzdXJlIHdlIG9ubHkgZ2V0IGNvbnN0cmFpbnQgdmlvbGF0aW9ucyBm cm9tIHRoZQogCSAqIGluZGV4ZXMgd2l0aCB0aGUgY29ycmVjdCBuYW1lcy4KIAkgKi8KLQorCUlO SkVDVElPTl9QT0lOVCgicmVpbmRleF9yZWxhdGlvbl9jb25jdXJyZW50bHlfYmVmb3JlX3N3YXAi LCBOVUxMKTsKIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCiAJLyoKQEAgLTQzMDcsNiAr NDMwOCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAq c3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJICogaW5kZXhfZHJvcCgpIGZvciBt b3JlIGRldGFpbHMuCiAJICovCiAKKwlJTkpFQ1RJT05fUE9JTlQoInJlaW5kZXhfcmVsYXRpb25f Y29uY3VycmVudGx5X2JlZm9yZV9zZXRfZGVhZCIsIE5VTEwpOwogCXBnc3RhdF9wcm9ncmVzc191 cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAogCQkJCQkJCQkgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfNCk7CiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFn cywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGlu Zy5jCmluZGV4IDQwMTYwNmY4NDBhLi5kZjdlN2JjZTg2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogI2luY2x1ZGUgInV0aWxzL211bHRpcmFu Z2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKICNpbmNsdWRlICJ1dGls cy9zbmFwbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAKIC8qIHdh aXRNb2RlIGFyZ3VtZW50IHRvIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludCgp ICovCiB0eXBlZGVmIGVudW0KQEAgLTk0Miw2ICs5NDMsOCBAQCByZXRyeToKIAllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBzYXZlX3NjYW50dXBsZTsKIAogCUV4ZWNEcm9wU2luZ2xlVHVwbGVU YWJsZVNsb3QoZXhpc3Rpbmdfc2xvdCk7CisJaWYgKCFjb25mbGljdCkKKwkJSU5KRUNUSU9OX1BP SU5UKCJjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnRfbm9fY29uZmxpY3QiLCBO VUxMKTsKIAogCXJldHVybiAhY29uZmxpY3Q7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0 aW9uLmMKaW5kZXggYWExMmU5YWQyZWEuLjA2NjY4NjQ4M2YwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5jCkBAIC00OTAsNiArNDkwLDQ4IEBAIEV4ZWNGaW5kUGFydGl0aW9uKE1v ZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJcmV0dXJuIHJyaTsKIH0KIAorLyoKKyAqIElzSW5k ZXhDb21wYXRpYmxlQXNBcmJpdGVyCisgKiAJCUNoZWNrcyBpZiB0aGUgaW5kZXhlcyBhcmUgaWRl bnRpY2FsIGluIHRlcm1zIG9mIGJlaW5nIHVzZWQKKyAqIAkJYXMgYXJiaXRlcnMgZm9yIHRoZSBJ TlNFUlQgT04gQ09ORkxJQ1Qgb3BlcmF0aW9uIGJ5IGNvbXBhcmluZworICogCQl0aGVtIHRvIHRo ZSBwcm92aWRlZCBhcmJpdGVyIGluZGV4LgorICoKKyAqIFJldHVybnMgdGhlIHRydWUgaWYgaW5k ZXhlcyBhcmUgY29tcGF0aWJsZS4KKyAqLworc3RhdGljIGJvb2wKK0lzSW5kZXhDb21wYXRpYmxl QXNBcmJpdGVyKFJlbGF0aW9uCWFyYml0ZXJJbmRleFJlbGF0aW9uLAorCQkJCQkJICAgSW5kZXhJ bmZvICAqYXJiaXRlckluZGV4SW5mbywKKwkJCQkJCSAgIFJlbGF0aW9uCWluZGV4UmVsYXRpb24s CisJCQkJCQkgICBJbmRleEluZm8gICppbmRleEluZm8pCit7CisJaW50IGk7CisKKwlpZiAoYXJi aXRlckluZGV4SW5mby0+aWlfVW5pcXVlICE9IGluZGV4SW5mby0+aWlfVW5pcXVlKQorCQlyZXR1 cm4gZmFsc2U7CisJLyogaXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgY2FzZXMgb2YgZXhjbHVzaW9u IGNvbnN0cmFpbnRzLiAqLworCWlmIChhcmJpdGVySW5kZXhJbmZvLT5paV9FeGNsdXNpb25PcHMg IT0gTlVMTCB8fCBpbmRleEluZm8tPmlpX0V4Y2x1c2lvbk9wcyAhPSBOVUxMKQorCQlyZXR1cm4g ZmFsc2U7CisJaWYgKGFyYml0ZXJJbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kbmtleWF0dHMg IT0gaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZG5rZXlhdHRzKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZG5rZXlhdHRz OyBpKyspCisJeworCQlpbnQJCQlhcmJpdGVyQXR0b05vID0gYXJiaXRlckluZGV4UmVsYXRpb24t PnJkX2luZGV4LT5pbmRrZXkudmFsdWVzW2ldOworCQlpbnQJCQlhdHRvTm8gPSBpbmRleFJlbGF0 aW9uLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVlc1tpXTsKKwkJaWYgKGFyYml0ZXJBdHRvTm8gIT0g YXR0b05vKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChsaXN0X2RpZmZlcmVuY2UoUmVs YXRpb25HZXRJbmRleEV4cHJlc3Npb25zKGFyYml0ZXJJbmRleFJlbGF0aW9uKSwKKwkJCQkJCVJl bGF0aW9uR2V0SW5kZXhFeHByZXNzaW9ucyhpbmRleFJlbGF0aW9uKSkgIT0gTklMKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlpZiAobGlzdF9kaWZmZXJlbmNlKFJlbGF0aW9uR2V0SW5kZXhQcmVkaWNh dGUoYXJiaXRlckluZGV4UmVsYXRpb24pLAorCQkJCQkJUmVsYXRpb25HZXRJbmRleFByZWRpY2F0 ZShpbmRleFJlbGF0aW9uKSkgIT0gTklMKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7 Cit9CisKIC8qCiAgKiBFeGVjSW5pdFBhcnRpdGlvbkluZm8KICAqCQlMb2NrIHRoZSBwYXJ0aXRp b24gYW5kIGluaXRpYWxpemUgUmVzdWx0UmVsSW5mby4gIEFsc28gc2V0dXAgb3RoZXIKQEAgLTcw MSw2ICs3NDMsOCBAQCBFeGVjSW5pdFBhcnRpdGlvbkluZm8oTW9kaWZ5VGFibGVTdGF0ZSAqbXRz dGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJCWlmIChyb290UmVzdWx0UmVsSW5mby0+cmlfb25Db25m bGljdEFyYml0ZXJJbmRleGVzICE9IE5JTCkKIAkJewogCQkJTGlzdAkgICAqY2hpbGRJZHhzOwor CQkJTGlzdCAJICAgKm5vbkFuY2VzdG9ySWR4cyA9IE5JTDsKKwkJCWludAkJICAgaSwgaiwgYWRk aXRpb25hbF9hcmJpdGVycyA9IDA7CiAKIAkJCWNoaWxkSWR4cyA9IFJlbGF0aW9uR2V0SW5kZXhM aXN0KGxlYWZfcGFydF9ycmktPnJpX1JlbGF0aW9uRGVzYyk7CiAKQEAgLTcxMSwyMyArNzU1LDc0 IEBAIEV4ZWNJbml0UGFydGl0aW9uSW5mbyhNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLCBFU3Rh dGUgKmVzdGF0ZSwKIAkJCQlMaXN0Q2VsbCAgICpsYzI7CiAKIAkJCQlhbmNlc3RvcnMgPSBnZXRf cGFydGl0aW9uX2FuY2VzdG9ycyhjaGlsZElkeCk7Ci0JCQkJZm9yZWFjaChsYzIsIHJvb3RSZXN1 bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0QXJiaXRlckluZGV4ZXMpCisJCQkJaWYgKGFuY2VzdG9y cykKIAkJCQl7Ci0JCQkJCWlmIChsaXN0X21lbWJlcl9vaWQoYW5jZXN0b3JzLCBsZmlyc3Rfb2lk KGxjMikpKQotCQkJCQkJYXJiaXRlckluZGV4ZXMgPSBsYXBwZW5kX29pZChhcmJpdGVySW5kZXhl cywgY2hpbGRJZHgpOworCQkJCQlmb3JlYWNoKGxjMiwgcm9vdFJlc3VsdFJlbEluZm8tPnJpX29u Q29uZmxpY3RBcmJpdGVySW5kZXhlcykKKwkJCQkJeworCQkJCQkJaWYgKGxpc3RfbWVtYmVyX29p ZChhbmNlc3RvcnMsIGxmaXJzdF9vaWQobGMyKSkpCisJCQkJCQkJYXJiaXRlckluZGV4ZXMgPSBs YXBwZW5kX29pZChhcmJpdGVySW5kZXhlcywgY2hpbGRJZHgpOworCQkJCQl9CiAJCQkJfQorCQkJ CWVsc2UgLyogTm8gYW5jZXN0b3Igd2FzIGZvdW5kIGZvciB0aGF0IGluZGV4LiBTYXZlIGl0IGZv ciByZWNoZWNraW5nIGxhdGVyLiAqLworCQkJCQlub25BbmNlc3RvcklkeHMgPSBsYXBwZW5kX29p ZChub25BbmNlc3RvcklkeHMsIGNoaWxkSWR4KTsKIAkJCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsK IAkJCX0KKworCQkJLyoKKwkJCSAqIElmIGFueSBub24tYW5jZXN0b3IgaW5kZXhlcyBhcmUgZm91 bmQsIHdlIG5lZWQgdG8gY29tcGFyZSB0aGVtIHdpdGggb3RoZXIKKwkJCSAqIGluZGV4ZXMgb2Yg dGhlIHJlbGF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGFyYml0ZXJzLiBUaGlzIGlzIG5lY2Vz c2FyeQorCQkJICogd2hlbiBhIHBhcnRpdGlvbmVkIGluZGV4IGlzIHByb2Nlc3NlZCBieSBSRUlO REVYIENPTkNVUlJFTlRMWS4gQm90aCBpbmRleGVzCisJCQkgKiBtdXN0IGJlIGNvbnNpZGVyZWQg YXMgYXJiaXRlcnMgdG8gZW5zdXJlIHRoYXQgYWxsIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zCisJ CQkgKiB1c2UgdGhlIHNhbWUgc2V0IG9mIGFyYml0ZXJzLgorCQkJICovCisJCQlpZiAobm9uQW5j ZXN0b3JJZHhzKQorCQkJeworCQkJCWZvciAoaSA9IDA7IGkgPCBsZWFmX3BhcnRfcnJpLT5yaV9O dW1JbmRpY2VzOyBpKyspCisJCQkJeworCQkJCQlpZiAobGlzdF9tZW1iZXJfb2lkKG5vbkFuY2Vz dG9ySWR4cywgbGVhZl9wYXJ0X3JyaS0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzW2ldLT5yZF9pbmRl eC0+aW5kZXhyZWxpZCkpCisJCQkJCXsKKwkJCQkJCVJlbGF0aW9uIG5vbkFuY2VzdG9ySW5kZXhS ZWxhdGlvbiA9IGxlYWZfcGFydF9ycmktPnJpX0luZGV4UmVsYXRpb25EZXNjc1tpXTsKKwkJCQkJ CUluZGV4SW5mbyAqbm9uQW5jZXN0b3JJbmRleEluZm8gPSBsZWFmX3BhcnRfcnJpLT5yaV9JbmRl eFJlbGF0aW9uSW5mb1tpXTsKKwkJCQkJCUFzc2VydCghbGlzdF9tZW1iZXJfb2lkKGFyYml0ZXJJ bmRleGVzLCBub25BbmNlc3RvckluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5pbmRleHJlbGlkKSk7 CisKKwkJCQkJCS8qIEl0IGlzIHRvbyBlYXJseSB0byB1cyBub24tcmVhZHkgaW5kZXhlcyBhcyBh cmJpdGVycyAqLworCQkJCQkJaWYgKCFub25BbmNlc3RvckluZGV4SW5mby0+aWlfUmVhZHlGb3JJ bnNlcnRzKQorCQkJCQkJCWNvbnRpbnVlOworCisJCQkJCQlmb3IgKGogPSAwOyBqIDwgbGVhZl9w YXJ0X3JyaS0+cmlfTnVtSW5kaWNlczsgaisrKQorCQkJCQkJeworCQkJCQkJCWlmIChsaXN0X21l bWJlcl9vaWQoYXJiaXRlckluZGV4ZXMsCisJCQkJCQkJCQkJCQlsZWFmX3BhcnRfcnJpLT5yaV9J bmRleFJlbGF0aW9uRGVzY3Nbal0tPnJkX2luZGV4LT5pbmRleHJlbGlkKSkKKwkJCQkJCQl7CisJ CQkJCQkJCVJlbGF0aW9uIGFyYml0ZXJJbmRleFJlbGF0aW9uID0gbGVhZl9wYXJ0X3JyaS0+cmlf SW5kZXhSZWxhdGlvbkRlc2NzW2pdOworCQkJCQkJCQlJbmRleEluZm8gKmFyYml0ZXJJbmRleElu Zm8gPSBsZWFmX3BhcnRfcnJpLT5yaV9JbmRleFJlbGF0aW9uSW5mb1tqXTsKKworCQkJCQkJCQkv KiBJZiBub24tYW5jZXN0b3IgaW5kZXggYXJlIGNvbXBhdGlibGUgdG8gYXJiaXRlciAtIHVzZSBp dCBhcyBhcmJpdGVyIHRvby4gKi8KKwkJCQkJCQkJaWYgKElzSW5kZXhDb21wYXRpYmxlQXNBcmJp dGVyKGFyYml0ZXJJbmRleFJlbGF0aW9uLCBhcmJpdGVySW5kZXhJbmZvLAorCQkJCQkJCQkJCQkJ CQkJICAgbm9uQW5jZXN0b3JJbmRleFJlbGF0aW9uLCBub25BbmNlc3RvckluZGV4SW5mbykpCisJ CQkJCQkJCXsKKwkJCQkJCQkJCWFyYml0ZXJJbmRleGVzID0gbGFwcGVuZF9vaWQoYXJiaXRlcklu ZGV4ZXMsCisJCQkJCQkJCQkJCQkJCQkJIG5vbkFuY2VzdG9ySW5kZXhSZWxhdGlvbi0+cmRfaW5k ZXgtPmluZGV4cmVsaWQpOworCQkJCQkJCQkJYWRkaXRpb25hbF9hcmJpdGVycysrOworCQkJCQkJ CQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJbGlzdF9mcmVl KG5vbkFuY2VzdG9ySWR4cyk7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgcmVzdWx0aW5nIGxpc3Rz IGFyZSBvZiBpbmVxdWFsIGxlbmd0aCwgc29tZXRoaW5nIGlzIHdyb25nLgorCQkJICogKFRoaXMg c2hvdWxkbid0IGhhcHBlbiwgc2luY2UgYXJiaXRlciBpbmRleCBzZWxlY3Rpb24gc2hvdWxkIG5v dAorCQkJICogcGljayB1cCBhIG5vbi1yZWFkeSBpbmRleC4pCisJCQkgKgorCQkJICogQnV0IHdl IG5lZWQgdG8gY29uc2lkZXIgYW4gYWRkaXRpb25hbCBhcmJpdGVyIGluZGV4ZXMgYWxzby4KKwkJ CSAqLworCQkJaWYgKGxpc3RfbGVuZ3RoKHJvb3RSZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0 QXJiaXRlckluZGV4ZXMpICE9CisJCQkJbGlzdF9sZW5ndGgoYXJiaXRlckluZGV4ZXMpIC0gYWRk aXRpb25hbF9hcmJpdGVycykKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhcmJpdGVyIGluZGV4 IGxpc3QiKTsKIAkJfQotCi0JCS8qCi0JCSAqIElmIHRoZSByZXN1bHRpbmcgbGlzdHMgYXJlIG9m IGluZXF1YWwgbGVuZ3RoLCBzb21ldGhpbmcgaXMgd3JvbmcuCi0JCSAqIChUaGlzIHNob3VsZG4n dCBoYXBwZW4sIHNpbmNlIGFyYml0ZXIgaW5kZXggc2VsZWN0aW9uIHNob3VsZCBub3QKLQkJICog cGljayB1cCBhbiBpbnZhbGlkIGluZGV4LikKLQkJICovCi0JCWlmIChsaXN0X2xlbmd0aChyb290 UmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdEFyYml0ZXJJbmRleGVzKSAhPQotCQkJbGlzdF9s ZW5ndGgoYXJiaXRlckluZGV4ZXMpKQotCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYXJiaXRlciBp bmRleCBsaXN0Iik7CiAJCWxlYWZfcGFydF9ycmktPnJpX29uQ29uZmxpY3RBcmJpdGVySW5kZXhl cyA9IGFyYml0ZXJJbmRleGVzOwogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jCmluZGV4IDAwNDI5MzI2YzM0Li5iYWMxOThkZTY4ZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTcwLDYgKzcwLDcgQEAKICNpbmNsdWRlICJ1dGlscy9k YXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKIAogCiB0eXBlZGVmIHN0cnVj dCBNVFRhcmdldFJlbExvb2t1cApAQCAtMTE3OSw2ICsxMTgwLDcgQEAgRXhlY0luc2VydChNb2Rp ZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCQkJCXJldHVybiBOVUxMOwogCQkJCX0KIAkJCX0K KwkJCUlOSkVDVElPTl9QT0lOVCgiZXhlY19pbnNlcnRfYmVmb3JlX2luc2VydF9zcGVjdWxhdGl2 ZSIsIE5VTEwpOwogCiAJCQkvKgogCQkJICogQmVmb3JlIHdlIHN0YXJ0IGluc2VydGlvbiBwcm9w ZXIsIGFjcXVpcmUgb3VyICJzcGVjdWxhdGl2ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNh dC5jCmluZGV4IGQ5NTBiZDkzMDAyLi5mZjQxNmYwNTIyYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYwpAQCAtODA4LDEyICs4MDgsMTQgQEAgaW5mZXJfYXJiaXRlcl9pbmRleGVz KFBsYW5uZXJJbmZvICpyb290KQogCUxpc3QJICAgKmluZGV4TGlzdDsKIAlMaXN0Q2VsbCAgICps OwogCi0JLyogTm9ybWFsaXplZCBpbmZlcmVuY2UgYXR0cmlidXRlcyBhbmQgaW5mZXJlbmNlIGV4 cHJlc3Npb25zOiAqLwotCUJpdG1hcHNldCAgKmluZmVyQXR0cnMgPSBOVUxMOwotCUxpc3QJICAg KmluZmVyRWxlbXMgPSBOSUw7CisJLyogTm9ybWFsaXplZCByZXF1aXJlZCBhdHRyaWJ1dGVzIGFu ZCBleHByZXNzaW9uczogKi8KKwlCaXRtYXBzZXQgICpyZXF1aXJlZEFyYml0ZXJBdHRycyA9IE5V TEw7CisJTGlzdAkgICAqcmVxdWlyZWRBcmJpdGVyRWxlbXMgPSBOSUw7CisJTGlzdAkgICAqcmVx dWlyZWRJbmRleFByZWRFeHBycyA9IChMaXN0ICopIG9uY29uZmxpY3QtPmFyYml0ZXJXaGVyZTsK IAogCS8qIFJlc3VsdHMgKi8KIAlMaXN0CSAgICpyZXN1bHRzID0gTklMOworCWJvb2wJICAgZm91 bmRWYWxpZCA9IGZhbHNlOwogCiAJLyoKIAkgKiBRdWlja2x5IHJldHVybiBOSUwgZm9yIE9OIENP TkZMSUNUIERPIE5PVEhJTkcgd2l0aG91dCBhbiBpbmZlcmVuY2UKQEAgLTg0OCw4ICs4NTAsOCBA QCBpbmZlcl9hcmJpdGVyX2luZGV4ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAKIAkJaWYgKCFJc0Eo ZWxlbS0+ZXhwciwgVmFyKSkKIAkJewotCQkJLyogSWYgbm90IGEgcGxhaW4gVmFyLCBqdXN0IHNo b3ZlIGl0IGluIGluZmVyRWxlbXMgZm9yIG5vdyAqLwotCQkJaW5mZXJFbGVtcyA9IGxhcHBlbmQo aW5mZXJFbGVtcywgZWxlbS0+ZXhwcik7CisJCQkvKiBJZiBub3QgYSBwbGFpbiBWYXIsIGp1c3Qg c2hvdmUgaXQgaW4gcmVxdWlyZWRBcmJpdGVyRWxlbXMgZm9yIG5vdyAqLworCQkJcmVxdWlyZWRB cmJpdGVyRWxlbXMgPSBsYXBwZW5kKHJlcXVpcmVkQXJiaXRlckVsZW1zLCBlbGVtLT5leHByKTsK IAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTg2MSwzMCArODYzLDc2IEBAIGluZmVyX2FyYml0ZXJf aW5kZXhlcyhQbGFubmVySW5mbyAqcm9vdCkKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJ3aG9sZSByb3cgdW5pcXVlIGluZGV4IGlu ZmVyZW5jZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCIpKSk7CiAKLQkJaW5mZXJB dHRycyA9IGJtc19hZGRfbWVtYmVyKGluZmVyQXR0cnMsCisJCXJlcXVpcmVkQXJiaXRlckF0dHJz ID0gYm1zX2FkZF9tZW1iZXIocmVxdWlyZWRBcmJpdGVyQXR0cnMsCiAJCQkJCQkJCQlhdHRubyAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOwogCX0KIAorCWluZGV4TGlzdCA9 IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHJlbGF0aW9uKTsKKwogCS8qCiAJICogTG9va3VwIG5hbWVk IGNvbnN0cmFpbnQncyBpbmRleC4gIFRoaXMgaXMgbm90IGltbWVkaWF0ZWx5IHJldHVybmVkCi0J ICogYmVjYXVzZSBzb21lIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBhcmUgcmVxdWlyZWQuCisJ ICogYmVjYXVzZSBzb21lIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBhcmUgcmVxdWlyZWQuIEFk ZGl0aW9uYWxseSwgd2UKKwkgKiBuZWVkIHRvIHByb2Nlc3Mgb3RoZXIgaW5kZXhlcyBhcyBwb3Rl bnRpYWwgYXJiaXRlcnMgdG8gYWNjb3VudCBmb3IKKwkgKiBjYXNlcyB3aGVyZSBSRUlOREVYIENP TkNVUlJFTlRMWSBpcyBwcm9jZXNzaW5nIGFuIGluZGV4IHVzZWQgYXMgYQorCSAqIG5hbWVkIGNv bnN0cmFpbnQuCiAJICovCiAJaWYgKG9uY29uZmxpY3QtPmNvbnN0cmFpbnQgIT0gSW52YWxpZE9p ZCkKIAl7CiAJCWluZGV4T2lkRnJvbUNvbnN0cmFpbnQgPSBnZXRfY29uc3RyYWludF9pbmRleChv bmNvbmZsaWN0LT5jb25zdHJhaW50KTsKIAogCQlpZiAoaW5kZXhPaWRGcm9tQ29uc3RyYWludCA9 PSBJbnZhbGlkT2lkKQorCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJD T0RFX1dST05HX09CSkVDVF9UWVBFKSwKLQkJCQkJIGVycm1zZygiY29uc3RyYWludCBpbiBPTiBD T05GTElDVCBjbGF1c2UgaGFzIG5vIGFzc29jaWF0ZWQgaW5kZXgiKSkpOworCQkJCQllcnJtc2co ImNvbnN0cmFpbnQgaW4gT04gQ09ORkxJQ1QgY2xhdXNlIGhhcyBubyBhc3NvY2lhdGVkIGluZGV4 IikpKTsKKwkJfQorCisJCS8qCisJCSAqIEZpbmQgdGhlIG5hbWVkIGNvbnN0cmFpbnQgaW5kZXgg dG8gZXh0cmFjdCBpdHMgYXR0cmlidXRlcyBhbmQgcHJlZGljYXRlcy4KKwkJICogV2Ugb3BlbiBh bGwgaW5kZXhlcyBpbiB0aGUgbG9vcCB0byBhdm9pZCBkZWFkbG9jayBvZiBjaGFuZ2VkIG9yZGVy IG9mIGxvY2tzLgorCQkgKiAqLworCQlmb3JlYWNoKGwsIGluZGV4TGlzdCkKKwkJeworCQkJT2lk CQkJaW5kZXhvaWQgPSBsZmlyc3Rfb2lkKGwpOworCQkJUmVsYXRpb24JaWR4UmVsOworCQkJRm9y bV9wZ19pbmRleCBpZHhGb3JtOworCQkJQXR0ck51bWJlcgluYXR0OworCisJCQlpZHhSZWwgPSBp bmRleF9vcGVuKGluZGV4b2lkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCWlkeEZvcm0gPSBpZHhS ZWwtPnJkX2luZGV4OworCisJCQlpZiAoaWR4Rm9ybS0+aW5kaXNyZWFkeSkKKwkJCXsKKwkJCQlp ZiAoaW5kZXhPaWRGcm9tQ29uc3RyYWludCA9PSBpZHhGb3JtLT5pbmRleHJlbGlkKQorCQkJCXsK KwkJCQkJLyoKKwkJCQkJICogUHJlcGFyZSByZXF1aXJlbWVudHMgZm9yIG90aGVyIGluZGV4ZXMg dG8gYmUgdXNlZCBhcyBhcmJpdGVyIHRvZ2V0aGVyCisJCQkJCSAqIHdpdGggaW5kZXhPaWRGcm9t Q29uc3RyYWludC4gSXQgaXMgcmVxdWlyZWQgdG8gaW52b2x2ZSBib3RoIGVxdWFscyBpbmRleGVz CisJCQkJCSAqIGluIGNhc2Ugb2YgUkVJTkRFWCBDT05DVVJSRU5UTFkuCisJCQkJCSAqLworCQkJ CQlmb3IgKG5hdHQgPSAwOyBuYXR0IDwgaWR4Rm9ybS0+aW5kbmtleWF0dHM7IG5hdHQrKykKKwkJ CQkJeworCQkJCQkJaW50CQkJYXR0bm8gPSBpZHhSZWwtPnJkX2luZGV4LT5pbmRrZXkudmFsdWVz W25hdHRdOworCisJCQkJCQlpZiAoYXR0bm8gIT0gMCkKKwkJCQkJCQlyZXF1aXJlZEFyYml0ZXJB dHRycyA9IGJtc19hZGRfbWVtYmVyKHJlcXVpcmVkQXJiaXRlckF0dHJzLAorCQkJCQkJCQkJCQkJ CQkgIGF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQkJCX0K KwkJCQkJcmVxdWlyZWRBcmJpdGVyRWxlbXMgPSBSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMo aWR4UmVsKTsKKwkJCQkJcmVxdWlyZWRJbmRleFByZWRFeHBycyA9IFJlbGF0aW9uR2V0SW5kZXhQ cmVkaWNhdGUoaWR4UmVsKTsKKwkJCQkJLyogV2UgYXJlIGRvbmUsIHNvLCBxdWl0ZSB0aGUgbG9v cC4gKi8KKwkJCQkJaW5kZXhfY2xvc2UoaWR4UmVsLCBOb0xvY2spOworCQkJCQlicmVhazsKKwkJ CQl9CisJCQl9CisJCQlpbmRleF9jbG9zZShpZHhSZWwsIE5vTG9jayk7CisJCX0KIAl9CiAKIAkv KgogCSAqIFVzaW5nIHRoYXQgcmVwcmVzZW50YXRpb24sIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlz dCBvZiBpbmRleGVzIG9uIHRoZQogCSAqIHRhcmdldCByZWxhdGlvbiB0byB0cnkgYW5kIGZpbmQg YSBtYXRjaAogCSAqLwotCWluZGV4TGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHJlbGF0aW9u KTsKLQogCWZvcmVhY2gobCwgaW5kZXhMaXN0KQogCXsKIAkJT2lkCQkJaW5kZXhvaWQgPSBsZmly c3Rfb2lkKGwpOwpAQCAtOTA3LDcgKzk1NSwxMyBAQCBpbmZlcl9hcmJpdGVyX2luZGV4ZXMoUGxh bm5lckluZm8gKnJvb3QpCiAJCWlkeFJlbCA9IGluZGV4X29wZW4oaW5kZXhvaWQsIHJ0ZS0+cmVs bG9ja21vZGUpOwogCQlpZHhGb3JtID0gaWR4UmVsLT5yZF9pbmRleDsKIAotCQlpZiAoIWlkeEZv cm0tPmluZGlzdmFsaWQpCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBpbmRp c3ZhbGlkIGFuZCBpbmRpc3JlYWR5IGluZGV4ZXMgYmVjYXVzZQorCQkgKiB0aGVtIG1heSBiZWNv bWUgaW5kaXN2YWxpZCBiZWZvcmUgZXhlY3V0aW9uIHBoYXNlLiBJdCBpcyByZXF1aXJlZAorCQkg KiB0byBrZWVwIHNldCBvZiBpbmRleGVzIHVzZWQgYXMgYXJiaXRlciB0byBiZSB0aGUgc2FtZSBm b3IgYWxsCisJCSAqIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zLgorCQkgKi8KKwkJaWYgKCFpZHhG b3JtLT5pbmRpc3JlYWR5KQogCQkJZ290byBuZXh0OwogCiAJCS8qCkBAIC05MjcsMjcgKzk4MSwy MyBAQCBpbmZlcl9hcmJpdGVyX2luZGV4ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAogCQkJ CQkJIGVycm1zZygiT04gQ09ORkxJQ1QgRE8gVVBEQVRFIG5vdCBzdXBwb3J0ZWQgd2l0aCBleGNs dXNpb24gY29uc3RyYWludHMiKSkpOwotCi0JCQlyZXN1bHRzID0gbGFwcGVuZF9vaWQocmVzdWx0 cywgaWR4Rm9ybS0+aW5kZXhyZWxpZCk7Ci0JCQlsaXN0X2ZyZWUoaW5kZXhMaXN0KTsKLQkJCWlu ZGV4X2Nsb3NlKGlkeFJlbCwgTm9Mb2NrKTsKLQkJCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBOb0xv Y2spOwotCQkJcmV0dXJuIHJlc3VsdHM7CisJCQlnb3RvIGZvdW5kOwogCQl9CiAJCWVsc2UgaWYg KGluZGV4T2lkRnJvbUNvbnN0cmFpbnQgIT0gSW52YWxpZE9pZCkKIAkJewotCQkJLyogTm8gcG9p bnQgaW4gZnVydGhlciB3b3JrIGZvciBpbmRleCBpbiBuYW1lZCBjb25zdHJhaW50IGNhc2UgKi8K LQkJCWdvdG8gbmV4dDsKKwkJCS8qIEluIHRoZSBjYXNlIG9mICJPTiBjb25zdHJhaW50X25hbWUg RE8gVVBEQVRFIiB3ZSBuZWVkIHRvIHNraXAgbm9uLXVuaXF1ZSBjYW5kaWRhdGVzLiAqLworCQkJ aWYgKCFpZHhGb3JtLT5pbmRpc3VuaXF1ZSAmJiBvbmNvbmZsaWN0LT5hY3Rpb24gPT0gT05DT05G TElDVF9VUERBVEUpCisJCQkJZ290byBuZXh0OworCQl9ICBlbHNlIHsKKwkJCS8qCisJCQkgKiBP bmx5IGNvbnNpZGVyaW5nIGNvbnZlbnRpb25hbCBpbmZlcmVuY2UgYXQgdGhpcyBwb2ludCAobm90 IG5hbWVkCisJCQkgKiBjb25zdHJhaW50cyksIHNvIGluZGV4IHVuZGVyIGNvbnNpZGVyYXRpb24g Y2FuIGJlIGltbWVkaWF0ZWx5CisJCQkgKiBza2lwcGVkIGlmIGl0J3Mgbm90IHVuaXF1ZQorCQkJ ICovCisJCQlpZiAoIWlkeEZvcm0tPmluZGlzdW5pcXVlKQorCQkJCWdvdG8gbmV4dDsKIAkJfQog Ci0JCS8qCi0JCSAqIE9ubHkgY29uc2lkZXJpbmcgY29udmVudGlvbmFsIGluZmVyZW5jZSBhdCB0 aGlzIHBvaW50IChub3QgbmFtZWQKLQkJICogY29uc3RyYWludHMpLCBzbyBpbmRleCB1bmRlciBj b25zaWRlcmF0aW9uIGNhbiBiZSBpbW1lZGlhdGVseQotCQkgKiBza2lwcGVkIGlmIGl0J3Mgbm90 IHVuaXF1ZQotCQkgKi8KLQkJaWYgKCFpZHhGb3JtLT5pbmRpc3VuaXF1ZSkKLQkJCWdvdG8gbmV4 dDsKLQogCQkvKgogCQkgKiBTby1jYWxsZWQgdW5pcXVlIGNvbnN0cmFpbnRzIHdpdGggV0lUSE9V VCBPVkVSTEFQUyBhcmUgcmVhbGx5CiAJCSAqIGV4Y2x1c2lvbiBjb25zdHJhaW50cywgc28gc2tp cCB0aG9zZSB0b28uCkBAIC05NjcsNyArMTAxNyw3IEBAIGluZmVyX2FyYml0ZXJfaW5kZXhlcyhQ bGFubmVySW5mbyAqcm9vdCkKIAkJfQogCiAJCS8qIE5vbi1leHByZXNzaW9uIGF0dHJpYnV0ZXMg KGlmIGFueSkgbXVzdCBtYXRjaCAqLwotCQlpZiAoIWJtc19lcXVhbChpbmRleGVkQXR0cnMsIGlu ZmVyQXR0cnMpKQorCQlpZiAoIWJtc19lcXVhbChpbmRleGVkQXR0cnMsIHJlcXVpcmVkQXJiaXRl ckF0dHJzKSkKIAkJCWdvdG8gbmV4dDsKIAogCQkvKiBFeHByZXNzaW9uIGF0dHJpYnV0ZXMgKGlm IGFueSkgbXVzdCBtYXRjaCAqLwpAQCAtOTc1LDYgKzEwMjUsMTAgQEAgaW5mZXJfYXJiaXRlcl9p bmRleGVzKFBsYW5uZXJJbmZvICpyb290KQogCQlpZiAoaWR4RXhwcnMgJiYgdmFybm8gIT0gMSkK IAkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIGlkeEV4cHJzLCAxLCB2YXJubywgMCk7CiAKKwkJ LyoKKwkJICogSWYgYXJiaXRlckVsZW1zIGFyZSBwcmVzZW50LCBjaGVjayB0aGVtLiBJZiBuYW1l ID5jb25zdHJhaW50IGlzCisJCSAqIHByZXNlbnQgYXJiaXRlckVsZW1zID09IE5JTC4KKwkJICov CiAJCWZvcmVhY2goZWwsIG9uY29uZmxpY3QtPmFyYml0ZXJFbGVtcykKIAkJewogCQkJSW5mZXJl bmNlRWxlbSAqZWxlbSA9IChJbmZlcmVuY2VFbGVtICopIGxmaXJzdChlbCk7CkBAIC0xMDEyLDI3 ICsxMDY2LDM1IEBAIGluZmVyX2FyYml0ZXJfaW5kZXhlcyhQbGFubmVySW5mbyAqcm9vdCkKIAkJ fQogCiAJCS8qCi0JCSAqIE5vdyB0aGF0IGFsbCBpbmZlcmVuY2UgZWxlbWVudHMgd2VyZSBtYXRj aGVkLCBlbnN1cmUgdGhhdCB0aGUKKwkJICogSW4gY2FzZSBvZiB0aGUgY29udmVudGlvbmFsIGlu ZmVyZW5jZSBpbnZvbHZlZCBlbnN1cmUgdGhhdCB0aGUKIAkJICogZXhwcmVzc2lvbiBlbGVtZW50 cyBmcm9tIGluZmVyZW5jZSBjbGF1c2UgYXJlIG5vdCBtaXNzaW5nIGFueQogCQkgKiBjYXRhbG9n ZWQgZXhwcmVzc2lvbnMuICBUaGlzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIHdoZW4gdW5pcXVlCiAJ CSAqIGluZGV4ZXMgcmVkdW5kYW50bHkgcmVwZWF0IHRoZSBzYW1lIGF0dHJpYnV0ZSwgb3IgaWYg YXR0cmlidXRlcwogCQkgKiByZWR1bmRhbnRseSBhcHBlYXIgbXVsdGlwbGUgdGltZXMgd2l0aGlu IGFuIGluZmVyZW5jZSBjbGF1c2UuCisJCSAqCisJCSAqIEluIHRoZSBjYXNlIG9mIG5hbWVkIGNv bnN0cmFpbnQgZW5zdXJlIGNhbmRpZGF0ZSBoYXMgZXF1YWwgc2V0CisJCSAqIG9mIGV4cHJlc3Np b25zIGFzIHRoZSBuYW1lZCBjb25zdHJhaW50IGluZGV4LgogCQkgKi8KLQkJaWYgKGxpc3RfZGlm ZmVyZW5jZShpZHhFeHBycywgaW5mZXJFbGVtcykgIT0gTklMKQorCQlpZiAobGlzdF9kaWZmZXJl bmNlKGlkeEV4cHJzLCByZXF1aXJlZEFyYml0ZXJFbGVtcykgIT0gTklMKQogCQkJZ290byBuZXh0 OwogCi0JCS8qCi0JCSAqIElmIGl0J3MgYSBwYXJ0aWFsIGluZGV4LCBpdHMgcHJlZGljYXRlIG11 c3QgYmUgaW1wbGllZCBieSB0aGUgT04KLQkJICogQ09ORkxJQ1QncyBXSEVSRSBjbGF1c2UuCi0J CSAqLwogCQlwcmVkRXhwcnMgPSBSZWxhdGlvbkdldEluZGV4UHJlZGljYXRlKGlkeFJlbCk7CiAJ CWlmIChwcmVkRXhwcnMgJiYgdmFybm8gIT0gMSkKIAkJCUNoYW5nZVZhck5vZGVzKChOb2RlICop IHByZWRFeHBycywgMSwgdmFybm8sIDApOwogCi0JCWlmICghcHJlZGljYXRlX2ltcGxpZWRfYnko cHJlZEV4cHJzLCAoTGlzdCAqKSBvbmNvbmZsaWN0LT5hcmJpdGVyV2hlcmUsIGZhbHNlKSkKKwkJ LyoKKwkJICogSWYgaXQncyBhIHBhcnRpYWwgaW5kZXggYW5kIGNvbnZlbnRpb25hbCBpbmZlcmVu Y2UsIGl0cyBwcmVkaWNhdGUgbXVzdCBiZSBpbXBsaWVkCisJCSAqIGJ5IHRoZSBPTiBDT05GTElD VCdzIFdIRVJFIGNsYXVzZS4KKwkJICovCisJCWlmIChpbmRleE9pZEZyb21Db25zdHJhaW50ID09 IEludmFsaWRPaWQgJiYgIXByZWRpY2F0ZV9pbXBsaWVkX2J5KHByZWRFeHBycywgcmVxdWlyZWRJ bmRleFByZWRFeHBycywgZmFsc2UpKQorCQkJZ290byBuZXh0OworCQkvKiBJZiBpdCdzIGEgcGFy dGlhbCBpbmRleCBhbmQgbmFtZWQgY29uc3RyYWludCBwcmVkaWNhdGVzIG11c3QgYmUgZXF1YWwu ICovCisJCWlmIChpbmRleE9pZEZyb21Db25zdHJhaW50ICE9IEludmFsaWRPaWQgJiYgbGlzdF9k aWZmZXJlbmNlKHByZWRFeHBycywgcmVxdWlyZWRJbmRleFByZWRFeHBycykgIT0gTklMKQogCQkJ Z290byBuZXh0OwogCitmb3VuZDoKIAkJcmVzdWx0cyA9IGxhcHBlbmRfb2lkKHJlc3VsdHMsIGlk eEZvcm0tPmluZGV4cmVsaWQpOworCQlmb3VuZFZhbGlkIHw9IGlkeEZvcm0tPmluZGlzdmFsaWQ7 CiBuZXh0OgogCQlpbmRleF9jbG9zZShpZHhSZWwsIE5vTG9jayk7CiAJfQpAQCAtMTA0MCw3ICsx MTAyLDggQEAgbmV4dDoKIAlsaXN0X2ZyZWUoaW5kZXhMaXN0KTsKIAl0YWJsZV9jbG9zZShyZWxh dGlvbiwgTm9Mb2NrKTsKIAotCWlmIChyZXN1bHRzID09IE5JTCkKKwkvKiBJdCBpcyByZXF1aXJl ZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBpbmRpc3ZhbGlkIGluZGV4IGR1cmluZyB0aGUgcGxhbm5p bmcuICovCisJaWYgKHJlc3VsdHMgPT0gTklMIHx8ICFmb3VuZFZhbGlkKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKIAkJ CQkgZXJybXNnKCJ0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnQgbWF0 Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmljYXRpb24iKSkpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMgYi9zcmMvYmFja2VuZC91dGlscy90aW1lL3Nu YXBtZ3IuYwppbmRleCA2NTU2MWNjNmJjMy4uOGUxYTkxOGYxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUv c25hcG1nci5jCkBAIC0xMjMsNiArMTIzLDcgQEAKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5o IgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5o IgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAKIC8qCkBAIC00NTgsNiAr NDU5LDcgQEAgSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCh2b2lkKQogCQlwYWlyaW5naGVhcF9y ZW1vdmUoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZDYXRhbG9nU25hcHNob3QtPnBoX25vZGUpOwog CQlDYXRhbG9nU25hcHNob3QgPSBOVUxMOwogCQlTbmFwc2hvdFJlc2V0WG1pbigpOworCQlJTkpF Q1RJT05fUE9JTlQoImludmFsaWRhdGVfY2F0YWxvZ19zbmFwc2hvdF9lbmQiLCBOVUxMKTsKIAl9 CiB9CiAKLS0gCjIuNDMuMAoK --0000000000002ad96a064431f950 Content-Type: text/plain; charset="US-ASCII"; name="v27-0002-Add-stress-tests-for-concurrent-index-builds.patch" Content-Disposition: attachment; filename="v27-0002-Add-stress-tests-for-concurrent-index-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miahg71h6 RnJvbSBmMTU5MjJmOGNiZDg3MTYyYWQ0OGU5Njc5OGQwNWJiMTQ3M2YzZDJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAzMCBOb3YgMjAyNCAxNjoyNDoyMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI3IDIvOF0gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgY29uY3VycmVudCBpbmRleCBidWls ZHMKCkludHJvZHVjZSBzdHJlc3MgdGVzdHMgZm9yIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9u czoKLSB0ZXN0IGNvbmN1cnJlbnQgaW5zZXJ0cy91cGRhdGVzIGR1cmluZyBDUkVBVEUvUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkKLSBjb3ZlciB2YXJpb3VzIGluZGV4IHR5cGVzIChidHJlZSwg Z2luLCBnaXN0LCBicmluLCBoYXNoLCBzcGdpc3QpCi0gdGVzdCB1bmlxdWUgYW5kIG5vbi11bmlx dWUgaW5kZXhlcwotIHRlc3Qgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcwotIHRlc3Qg Ym90aCBwYXJhbGxlbCBhbmQgbm9uLXBhcmFsbGVsIG9wZXJhdGlvbnMKClRoZXNlIHRlc3RzIHZl cmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21taXRzLgotLS0KIHNyYy9iaW4v cGdfYW1jaGVjay9tZXNvbi5idWlsZCAgfCAgIDEgKwogc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2 X2NpYy5wbCB8IDIyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyMjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf YW1jaGVjay90LzAwNl9jaWMucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hlY2svbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggMzE2ZWEwZDQw YjguLjdkZjE1NDM1ZmJiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw3IEBA IHRlc3RzICs9IHsKICAgICAgICd0LzAwM19jaGVjay5wbCcsCiAgICAgICAndC8wMDRfdmVyaWZ5 X2hlYXBhbS5wbCcsCiAgICAgICAndC8wMDVfb3BjbGFzc19kYW1hZ2UucGwnLAorICAgICAgJ3Qv MDA2X2NpYy5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYW1j aGVjay90LzAwNl9jaWMucGwgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMTYwZjlkMThkNwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay90LzAwNl9jaWMucGwKQEAgLTAsMCArMSwyMjUg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCisjIFRlc3QgUkVJTkRFWCBDT05DVVJSRU5UTFkgd2l0aCBjb25jdXJyZW50IG1vZGlm aWNhdGlvbnMgYW5kIEhPVCB1cGRhdGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitUZXN0OjpNb3JlLT5idWlsZGVy LT50b2RvX3N0YXJ0KCdmaWxlc3lzdGVtIGJ1ZycpCisgIGlmIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjpoYXNfd2FsX3JlYWRfYnVnOworCitteSAoJG5vZGUsICRyZXN1bHQpOworCisjCisjIFRl c3Qgc2V0LXVwCisjCiskbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnUkNf dGVzdCcpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsCisJJ2xvY2tfdGltZW91dCA9ICcgLiAoMTAwMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czo6dGltZW91dF9kZWZhdWx0KSk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICdmc3luYyA9IG9mZicpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LCAnbWFpbnRlbmFuY2Vfd29ya19tZW0gPSAzMk1CJyk7ICMgdG8gYXZvaWQgT09NCiskbm9kZS0+ YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzaGFyZWRfYnVmZmVycyA9IDMyTUInKTsg IyB0byBhdm9pZCBPT00KKyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShDUkVBVEUgRVhURU5TSU9OIGFtY2hlY2spKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcShDUkVBVEUgVEFCTEUgdGJsKGkgaW50IHByaW1hcnkga2V5LAorCQkJCQkJCQljMSBt b25leSBkZWZhdWx0IDAsIGMyIG1vbmV5IGRlZmF1bHQgMCwKKwkJCQkJCQkJYzMgbW9uZXkgZGVm YXVsdCAwLCB1cGRhdGVkX2F0IHRpbWVzdGFtcCwKKwkJCQkJCQkJaWEgaW50NFtdLCBwIHBvaW50 KSkpOworIyB1bmNvbW1lbnQgdG8gZm9yY2Ugbm9uLUhPVCAtPiAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHEoQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gdGJsKGksIHVwZGF0 ZWRfYXQpOykpOworIyBjcmVhdGUgc2VxdWVuY2UKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcShDUkVBVEUgVU5MT0dHRUQgU0VRVUVOQ0UgaW5fcm93X3JlYnVpbGQgU1RBUlQgMSBJTkNS RU1FTlQgMTspKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShTRUxFQ1QgbmV4dHZh bCgnaW5fcm93X3JlYnVpbGQnKTspKTsKKworIyBDcmVhdGUgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig cHJlZGljYXRlIHRlc3RzCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoCisJQ1JFQVRF IEZVTkNUSU9OIHByZWRpY2F0ZV9zdGFibGUoKSBSRVRVUk5TIGJvb2wgSU1NVVRBQkxFCisJTEFO R1VBR0UgcGxwZ3NxbCBBUyAkJAorCUJFR0lOCisJCUVYRUNVVEUgJ1NFTEVDVCB0eGlkX2N1cnJl bnQoKSc7CisJCVJFVFVSTiB0cnVlOworCUVORDsgJCQ7CispKTsKKworJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxKAorCUNSRUFURSBGVU5DVElPTiBwcmVkaWNhdGVfY29uc3QoaW50ZWdl cikgUkVUVVJOUyBib29sIElNTVVUQUJMRQorCUxBTkdVQUdFIHBscGdzcWwgQVMgJCQKKwlCRUdJ TgorCQlSRVRVUk4gTU9EKCQxLCAyKSA9IDA7CisJRU5EOyAkJDsKKykpOworCisjIFJ1biBDSUMv UklDIGluIGRpZmZlcmVudCBvcHRpb25zIGNvbmN1cnJlbnRseSB3aXRoIHVwc2VydHMKKyRub2Rl LT5wZ2JlbmNoKAorCSctLW5vLXZhY3V1bSAtLWNsaWVudD0xNSAtLWpvYnM9NCAtLWV4aXQtb24t YWJvcnQgLS10cmFuc2FjdGlvbnM9MTAwMCcsCisJMCwKKwlbcXJ7YWN0dWFsbHkgcHJvY2Vzc2Vk fV0sCisJW3Fye14kfV0sCisJJ2NvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aXRoIFJFSU5ERVgvQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWScsCisJeworCQknY29uY3VycmVudF9vcHMnID0+IHEoCisJ CQlTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7IC0tIHRoaXMgaXMgYmVjYXVzZSBwcmVk aWNhdGVfc3RhYmxlIGltcGxlbWVudGF0aW9uCisJCQlTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X2xv Y2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sgXGdzZXQKKwkJCVxpZiA6Z290bG9jaworCQkJCVNF TEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWlsZCcpIEFTIGxhc3RfdmFsdWUgXGdzZXQKKwkJCQlc c2V0IHZhcmlhbnQgcmFuZG9tKDAsIDUpCisJCQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQp CisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJh bGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlcaWYgOnZhcmlhbnQgPSAwCisJCQkJCQlD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpOwor CQkJCQlcZWxpZiA6dmFyaWFudCA9IDEKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkg bmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUgcHJlZGljYXRlX3N0YWJsZSgpOwor CQkJCQlcZWxpZiA6dmFyaWFudCA9IDIKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkg bmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUgTU9EKGksIDIpID0gMDsKKwkJCQkJ XGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19p ZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJ XGVsaWYgOnZhcmlhbnQgPSA0CisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19p ZHggT04gdGJsKHByZWRpY2F0ZV9jb25zdChpKSk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gNQor CQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibChpLCBwcmVkaWNh dGVfY29uc3QoaSksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJ XGVuZGlmCisJCQkJCVxzbGVlcCAxMCBtcworCQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ25l d19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsKKwkJ CQkJUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQkJXHNsZWVwIDEwIG1z CisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVjaygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+ IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUpOworCQkJCQlEUk9QIElOREVYIENPTkNVUlJFTlRM WSBuZXdfaWR4OworCQkJCVxlbmRpZgorCQkJCVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soNDIp OworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSByYW5kb20oMTAwMCwgMTAwMDAwKQorCQkJCUJFR0lO OworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAs bm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5v dygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCww LDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9 IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSks MCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9h dCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51 bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRl ZF9hdCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkq Om51bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBk YXRlZF9hdCA9IG5vdygpOworCQkJCVNFTEVDVCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7 CisJCQkJQ09NTUlUOworCQkJXGVuZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxKFRSVU5DQVRFIFRBQkxFIHRibDspKTsKKworIyBSdW4gQ0lDL1JJQyBmb3Ig dW5pcXVlIGluZGV4IGNvbmN1cnJlbnRseSB3aXRoIHVwc2VydHMKKyRub2RlLT5wZ2JlbmNoKAor CSctLW5vLXZhY3V1bSAtLWNsaWVudD0xNSAtLWpvYnM9NCAtLWV4aXQtb24tYWJvcnQgLS10cmFu c2FjdGlvbnM9MTAwMCcsCisJMCwKKwlbcXJ7YWN0dWFsbHkgcHJvY2Vzc2VkfV0sCisJW3Fye14k fV0sCisJJ2NvbmN1cnJlbnQgb3BlcmF0aW9ucyB3aXRoIFJFSU5ERVgvQ1JFQVRFIElOREVYIENP TkNVUlJFTlRMWSBmb3IgdW5pcXVlIEJUUkVFJywKKwl7CisJCSdjb25jdXJyZW50X29wc191bmlx dWVfaWR4JyA9PiBxKAorCQkJU0VMRUNUIHBnX3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdl ciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgn aW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMg cmFuZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0 YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlDUkVBVEUgVU5JUVVF IElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibChpKTsKKwkJCQkJXHNsZWVwIDEwIG1z CisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVjaygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+ IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUpOworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4OworCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJU0VMRUNUIGJ0X2luZGV4X2No ZWNrKCduZXdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1 ZSk7CisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJXGVuZGlmCisJ CQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVt IHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9tKDEsIDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpKQorCQkJCQlPTiBDT05GTElD VChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlTRUxFQ1Qgc2V0dmFs KCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJXGVuZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxKFRSVU5DQVRFIFRBQkxFIHRibDspKTsKKworIyBSdW4gQ0lD L1JJQyBmb3IgR0lOIHdpdGggdXBzZXJ0cworJG5vZGUtPnBnYmVuY2goCisJJy0tbm8tdmFjdXVt IC0tY2xpZW50PTE1IC0tam9icz00IC0tZXhpdC1vbi1hYm9ydCAtLXRyYW5zYWN0aW9ucz0xMDAw JywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9jZXNzZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3Vy cmVudCBvcGVyYXRpb25zIHdpdGggUkVJTkRFWC9DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGZv ciBHSU4vR0lTVC9CUklOL0hBU0gvU1BHSVNUJywKKwl7CisJCSdjb25jdXJyZW50X29wc19naW5f aWR4JyA9PiBxKAorCQkJU0VMRUNUIHBnX3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBB UyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdvdGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5f cm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVlIFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMgcmFu ZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0Ymwg U0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOworCQkJCQlDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEdJTiAoaWEpOworCQkJCQlcc2xlZXAgMTAg bXMKKwkJCQkJU0VMRUNUIGdpbl9pbmRleF9jaGVjaygnbmV3X2lkeCcpOworCQkJCQlSRUlOREVY IElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJU0VM RUNUIGdpbl9pbmRleF9jaGVjaygnbmV3X2lkeCcpOworCQkJCQlEUk9QIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4OworCQkJCVxlbmRpZgorCQkJCVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2so NDIpOworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSByYW5kb20oMSwgcG93ZXIoMTAsIHJhbmRvbSgx LCA1KSkpCisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSww LDAsMCxub3coKSkKKwkJCQkJT04gQ09ORkxJQ1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0 ID0gbm93KCk7CisJCQkJU0VMRUNUIHNldHZhbCgnaW5fcm93X3JlYnVpbGQnLCAxKTsKKwkJCVxl bmRpZgorCQkpCisJfSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FU RSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJQy9SSUMgZm9yIEdJU1QvQlJJTi9IQVNIL1NQR0lT VCBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1cHNlcnRzCiskbm9kZS0+cGdiZW5jaCgKKwknLS1u by12YWN1dW0gLS1jbGllbnQ9MTUgLS1qb2JzPTQgLS1leGl0LW9uLWFib3J0IC0tdHJhbnNhY3Rp b25zPTEwMDAnLAorCTAsCisJW3Fye2FjdHVhbGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAor CSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJS RU5UTFkgZm9yIEdJTi9HSVNUL0JSSU4vSEFTSC9TUEdJU1QnLAorCXsKKwkJJ2NvbmN1cnJlbnRf b3BzX290aGVyX2lkeCcgPT4gcSgKKwkJCVNFTEVDVCBwZ190cnlfYWR2aXNvcnlfbG9jayg0Mik6 OmludGVnZXIgQVMgZ290bG9jayBcZ3NldAorCQkJXGlmIDpnb3Rsb2NrCisJCQkJU0VMRUNUIG5l eHR2YWwoJ2luX3Jvd19yZWJ1aWxkJykgQVMgbGFzdF92YWx1ZSBcZ3NldAorCQkJCVxzZXQgcGFy YWxsZWxzIHJhbmRvbSgwLCA0KQorCQkJCVxpZiA6bGFzdF92YWx1ZSA8IDMKKwkJCQkJQUxURVIg VEFCTEUgdGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz06cGFyYWxsZWxzKTsKKwkJCQkJXHNldCB2 YXJpYW50IHJhbmRvbSgwLCAzKQorCQkJCQlcaWYgOnZhcmlhbnQgPSAwCisJCQkJCQlDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIEdJU1QgKHApOworCQkJCQlc ZWxpZiA6dmFyaWFudCA9IDEKKwkJCQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lk eCBPTiB0YmwgVVNJTkcgQlJJTiAodXBkYXRlZF9hdCk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0g MgorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBI QVNIICh1cGRhdGVkX2F0KTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVTSU5HIFNQR0lTVCAocCk7CisJCQkJ CVxlbmRpZgorCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5U TFkgbmV3X2lkeDsKKwkJCQkJXHNsZWVwIDEwIG1zCisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVO VExZIG5ld19pZHg7CisJCQkJXGVuZGlmCisJCQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0 Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVtIHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9tKDEs IDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAs MCwwLG5vdygpKQorCQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQg PSBub3coKTsKKwkJCQlTRUxFQ1Qgc2V0dmFsKCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJXGVu ZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjQzLjAKCg== --0000000000002ad96a064431f950--