From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8CA86C5DF62 for ; Wed, 6 Nov 2019 05:30:00 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 39119217F4 for ; Wed, 6 Nov 2019 05:30:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Bj0NzlS8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 39119217F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iSDs7-0004US-R7; Wed, 06 Nov 2019 05:28:47 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iSAzr-0006sP-Jc for xen-devel@lists.xenproject.org; Wed, 06 Nov 2019 02:24:35 +0000 X-Inumbo-ID: 926a801e-003c-11ea-984a-bc764e2007e4 Received: from mail-qt1-x844.google.com (unknown [2607:f8b0:4864:20::844]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 926a801e-003c-11ea-984a-bc764e2007e4; Wed, 06 Nov 2019 02:24:34 +0000 (UTC) Received: by mail-qt1-x844.google.com with SMTP id y10so25272770qto.3 for ; Tue, 05 Nov 2019 18:24:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=P8fOGhYBTGfi3b8RXuMfUi/FtJchPenENoKZznTMI5U=; b=Bj0NzlS85ahpRYZpEc9irHx95wHoTj5srxzZD+Gcs805TW/cD2vt7s+pRpAuhbn9Xz QNiD8WqY4ffM7MX8ZgYcmG1KPlaBwz2xDveAc0MapQ2h9iiAfdmVbJuy6hf1eOswvC2A AwbKwwDr3WdsMTCMtHjpZdsz0skMu/eCqVJD4pCTYo16PJTTWvsXdYXyjNp3Sjdgz8of YyprC8uwLRZkgVfubEwxCYb9H9QHwPL1PTGfotCtTgVEq2Qt+fi/be+gth3zBJfQkQ1w SigoKaU+YBnMqlhagn7aPLDBHegFlQI8wzqlPZtl8svYOyrqIXcfqBD3Nuu/bPmMytYO Z5fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=P8fOGhYBTGfi3b8RXuMfUi/FtJchPenENoKZznTMI5U=; b=ElQ7FVncEVvEVBhAOCAS+z6LLxh+XRCIb15Si3CTUfjJtL6TveLTYmDKiKdfCo147+ vnndH0v6pX4fud0OygJ+ZeYng45uVmSV7jx0lpoiDuTF6hYn9/XHnG1V3QsaEh5Um2jS 7sOINMq8giOpC5urpbTZ/3LFFykNae3yYqFG7KZqraKTtVMIOq0cpTElaaIpxJOwEdv8 g6dAXqGdOIP3oPmV3cjZUuvJJfXlRlCpK+WvWAzsfXx8+4zgRikCtke95NGO8D1RNUYV 6uWkvIAD8//NzY/yErFeI2Uu7TMY4kgFoE6n65PyckQLhgdjzR2N8IDvlK1Zixc5tSAw 6Vsw== X-Gm-Message-State: APjAAAUg96oxK4kuhoRWe+wmY9i3ezHIeBk5oi+j/RmkskeF8u1gxtWw rLl96D3Uom4OB8Sk0i8MF+j4ujsXp3P5PA== X-Google-Smtp-Source: APXvYqzLXS7H8QPvyiBDwLLqJIu02L663575Sge1YgR5HxL0+wbGFqmWtfTePcDfT9VfNnzCO/DrWQ== X-Received: by 2002:ac8:4294:: with SMTP id o20mr297468qtl.341.1573007073465; Tue, 05 Nov 2019 18:24:33 -0800 (PST) Received: from Julian-PROG.wv.cc.cmu.edu (Julian-PROG.wv.cc.cmu.edu. [128.237.124.97]) by smtp.gmail.com with ESMTPSA id j16sm6142679qki.27.2019.11.05.18.24.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Nov 2019 18:24:33 -0800 (PST) From: Julian Tuminaro To: xen-devel@lists.xenproject.org Date: Tue, 5 Nov 2019 21:24:27 -0500 Message-Id: <20191106022427.9088-1-julian.tuminaro@gmail.com> X-Mailer: git-send-email 2.17.1 X-Mailman-Approved-At: Wed, 06 Nov 2019 05:28:46 +0000 Subject: [Xen-devel] [PATCH 1/1] kdd.c: Add support for initial handshake in KD protocol for Win 7, 8 and 10 (64 bit) X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: wl@xen.org, paul@xen.org, ian.jackson@eu.citrix.com, Jenish Rakholiya , tim@xen.org, Julian Tuminaro , "julian.tuminaro@gmail.com" MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" RnJvbTogImp1bGlhbi50dW1pbmFyb0BnbWFpbC5jb20iIDxqdWxpYW4udHVtaW5hcm9AZ21haWwu Y29tPgoKCkN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZmluZF9vcyBpcyBiYXNlZCBvbiB0aGUg aGFyZC1jb2RlZCB2YWx1ZXMgZm9yCmRpZmZlcmVudCBXaW5kb3dzIHZlcnNpb24uIEl0IHVzZXMg dGhlIHZhbHVlIGZvciBnZXQgdGhlIGFkZHJlc3MgdG8Kc3RhcnQgbG9va2luZyBmb3IgRE9TIGhl YWRlciBpbiB0aGUgZ2l2ZW4gc3BlY2lmaWVkIHJhbmdlLiBIb3dldmVyLCB0aGlzCmlzIG5vdCBz Y2FsYWJsZSB0byBhbGwgdmVyc2lvbiBvZiBXaW5kb3dzIGFzIGl0IHdpbGwgcmVxdWlyZSB1cyB0 byBrZWVwCmFkZGluZyBuZXcgZW50cmllcyBhbmQgYWxzbyBkdWUgdG8gS0FTTFIsIGNoYW5jZXMg b2Ygbm90IGhpdHRpbmcgdGhlIFBFCmhlYWRlciBpcyBzaWduaWZpY2FudC4gV2UgaW1wbGVtZW50 IGEgd2F5IGZvciA2NC1iaXQgc3lzdGVtcyB0byB1c2UgSURUCmVudHJ5IHRvIGdldCBhIHZhbGlk IGV4Y2VwdGlvbi9pbnRlcnJ1cHQgaGFuZGxlciBhbmQgdGhlbiBtb3ZlIGJhY2sgaW50bwp0aGUg bWVtb3J5IHRvIGZpbmQgdGhlIHZhbGlkIERPUyBoZWFkZXIuIFNpbmNlIElEVCBlbnRyaWVzIGFy ZSBwcm90ZWN0ZWQKYnkgUGF0Y2hHdWFyZCwgd2UgdGhpbmsgb3VyIGFzc3VtcHRpb24gdGhhdCBJ RFQgZW50cmllcyB3aWxsIG5vdCBiZQpjb3JydXB0ZWQgaXMgdmFsaWQgZm9yIG91ciBwdXJwb3Nl LiBPbmNlIHdlIGhhdmUgdGhlIGltYWdlIGJhc2UsIHdlCnNlYXJjaCBmb3IgdGhlIERCR0tEX0dF VF9WRVJTSU9ONjQgc3RydWN0dXJlIHR5cGUgaW4gLmRhdGEgc2VjdGlvbiB0bwpnZXQgaW5mb3Jt YXRpb24gcmVxdWlyZWQgZm9yIGhhbmRzaGFrZS4KCkN1cnJlbnRseSwgdGhpcyBpcyBhIHdvcmsg aW4gcHJvZ3Jlc3MgZmVhdHVyZSBhbmQgY3VycmVudCBwYXRjaCBvbmx5CnN1cHBvcnRzIHRoZSBo YW5kc2hha2UgYW5kIG1lbW9yeSByZWFkL3dyaXRlIG9uIDY0LWJpdCBzeXN0ZW1zLgoKU2lnbmVk LW9mZi1ieTogSmVuaXNoIFJha2hvbGl5YSA8cmplbmlzaEBjbXUuZWR1PgpTaWduZWQtb2ZmLWJ5 OiBKdWxpYW4gVHVtaW5hcm8gPGp0dW1pbmFyQGFuZHJldy5jbXUuZWR1PgotLS0KIHRvb2xzL2Rl YnVnZ2VyL2tkZC9rZGQuYyB8IDM4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAzODggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoK ZGlmZiAtLWdpdCBhL3Rvb2xzL2RlYnVnZ2VyL2tkZC9rZGQuYyBiL3Rvb2xzL2RlYnVnZ2VyL2tk ZC9rZGQuYwppbmRleCBmYjhjNjQ1MzU1Li40MDdiNzBhMjFjIDEwMDY0NAotLS0gYS90b29scy9k ZWJ1Z2dlci9rZGQva2RkLmMKKysrIGIvdG9vbHMvZGVidWdnZXIva2RkL2tkZC5jCkBAIC01MSw2 ICs1MSw4IEBACiAKICNpbmNsdWRlICJrZGQuaCIKIAorLy8gVE9ETzogbWFrZSBmaXggdGhpcyB0 byBhY3R1YWxseSB1c2UgYWRkcmVzcyBpbnN0ZWFkIG9mIG9mZnNldD8KKy8vIFRPRE86IE1heWJl IGNsZWFuIHNvbWV0aGluZyBhcyB3ZWxsPwogLyogV2luZG93cyB2ZXJzaW9uIGRldGFpbHMgKi8K IHR5cGVkZWYgc3RydWN0IHsKICAgICB1aW50MzJfdCBidWlsZDsgICAgICAgICAgICAgCkBAIC02 Miw2ICs2NCw3IEBAIHR5cGVkZWYgc3RydWN0IHsKICAgICB1aW50MzJfdCB2ZXJzaW9uOyAgICAg ICAgICAgLyogKy0+IE50QnVpbGROdW1iZXIgKi8KICAgICB1aW50MzJfdCBtb2R1bGVzOyAgICAg ICAgICAgLyogKy0+IFBzTG9hZGVkTW9kdWxlTGlzdCAqLwogICAgIHVpbnQzMl90IHByY2JzOyAg ICAgICAgICAgICAvKiArLT4gS2lQcm9jZXNzb3JCbG9jayAqLworICAgIHVpbnQzMl90IGtkZGw7 CiB9IGtkZF9vczsKIAogLyogU3RhdGUgb2YgdGhlIGRlYnVnZ2VyIHN0dWIgKi8KQEAgLTg1LDYg Kzg4LDEwNiBAQCB0eXBlZGVmIHN0cnVjdCB7CiAgICAga2RkX29zIG9zOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE9TLXNwZWNpZmljIG1hZ2ljIG51bWJlcnMgKi8KIH0ga2Rk X3N0YXRlOwogCisvKioKKyAqIEBicmllZiBTaXplIG9mIHBvaW50ZXIgb24gNjQgbWFjaGluZQor ICovCisjZGVmaW5lIFNJWkVfUFRSNjQgOAorCisvKioKKyAqIEBicmllZiBTaXplIG9mIHBvaW50 ZXIgb24gMzIgbWFjaGluZQorICovCisjZGVmaW5lIFNJWkVfUFRSMzIgNAorCisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogUEUgYW5kIERPUyBIZWFkZXIgcmVsYXRlZCBvZmZzZXRzCisgKi8K KworLyoqCisgKiBAYnJpZWYgT2Zmc2V0IGluIERPUyBoZWFkZXIgdG8gbG9vayBmb3IgUEUgaGVh ZGVyCisgKi8KKyNkZWZpbmUgRE9TX0hEUl9QRV9PRkYgMHgzYworCisvKioKKyAqIEBicmllZiBT aXplIG9mIFBFIGhlYWRlciBvZmZzZXQgZmllbGQgaW4gRE9TIGhlYWRlcgorICovCisjZGVmaW5l IERPU19IRFJfUEVfU1ogNAorCisvKioKKyAqIEBicmllZiBPZmZzZXQgb2YgbnVtYmVyIG9mIHNl Y3Rpb25zIGZpZWxkIGluIFBFIGhlYWRlcgorICovCisjZGVmaW5lIFBFX05VTV9TRUNUSU9OX09G RiAweDYKKworLyoqCisgKiBAYnJpZWYgU2l6ZSBvZiBudW1iZXIgb2Ygc2VjdGlvbnMgZmllbGQg aW4gUEUgaGVhZGVyCisgKi8KKyNkZWZpbmUgUEVfTlVNX1NFQ1RJT05fU1ogMgorCisvKioKKyAq IEBicmllZiBPZmZzZXQgb2Ygb3B0aW9uYWwgaGVhZGVyIHNpemUgZmllbGQgaW4gUEUgaGVhZGVy CisgKi8KKyNkZWZpbmUgUEVfT1BUX0hEUl9TWl9PRkYgMHgxNAorCisvKioKKyAqIEBicmllZiBT aXplIG9mIG9wdGlvbmFsIGhlYWRlciBzaXplIGZpZWxkIGluIFBFIGhlYWRlcgorICovCisjZGVm aW5lIFBFX09QVF9IRFJfU1pfU1ogMgorCisvKioKKyAqIEBicmllZiBTaXplIG9mIFBFIGhlYWRl cgorICovCisjZGVmaW5lIFBFX0hEUl9TWiAweDE4CisKKy8qKgorICogQGJyaWVmIFNpemUgb2Yg c2VjdGlvbiBoZWFkZXIgZW50cmllcyBpbiBQRQorICovCisjZGVmaW5lIFBFX1NFQ1RfRU5UX1Na IDB4MjgKKworLyoqCisgKiBAYnJpZWYgT2Zmc2V0IG9mIG5hbWUgZmllbGQgaW4gc2VjdGlvbiBo ZWFkZXIgZW50cnkKKyAqLworI2RlZmluZSBQRV9TRUNUX05BTUVfT0ZGIDAKKworLyoqCisgKiBA YnJpZWYgU2l6ZSBvZiBuYW1lIGZpZWxkIGluIHNlY3Rpb24gaGVhZGVyIGVudHJ5CisgKi8KKyNk ZWZpbmUgUEVfU0VDVF9OQU1FX1NaIDB4OAorCisvKioKKyAqIEBicmllZiBPZmZzZXQgb2Ygdmly dHVhbCBhZGRyZXNzIChSVkEpIGZpZWxkIGluIHNlY3Rpb24gaGVhZGVyIGVudHJ5CisgKi8KKyNk ZWZpbmUgUEVfU0VDVF9SVkFfT0ZGIDB4YworCisvKioKKyAqIEBicmllZiBPZmZzZXQgb2Ygdmly dHVhbCBzaXplIGZpZWxkIGluIHNlY3Rpb24gaGVhZGVyIGVudHJ5CisgKi8KKyNkZWZpbmUgUEVf U0VDVF9WU0laRV9PRkYgMHg4CisKKy8qKgorICogQGJyaWVmIFNpemUgb2YgREJHS0RfR0VUX1ZF UlNJT042NCBzdHJ1Y3QKKyAqLworI2RlZmluZSBEQkdLRF9HRVRfVkVSU0lPTjY0X1NaIDB4MjgK KworLyoqCisgKiBAYnJpZWYgT2Zmc2V0IG9mIEtFUk5fQkFTRSBpbiBEQkdLRF9HRVRfVkVSU0lP TjY0IHN0cnVjdAorICovCisjZGVmaW5lIERCR0tEX0tFUk5fQkFTRV9PRkYgMHgxMAorCisvKioK KyAqIEBicmllZiBPZmZzZXQgb2YgUHNMb2FkZWRNb2R1bGVzTGlzdCBpbiBEQkdLRF9HRVRfVkVS U0lPTjY0IHN0cnVjdAorICovCisjZGVmaW5lIERCR0tEX01PRF9MSVNUX09GRiAweDE4CisKKy8q KgorICogQGJyaWVmIE9mZnNldCBvZiBEZWJ1Z2dlckRhdGFMaXN0IGluIERCR0tEX0dFVF9WRVJT SU9ONjQgc3RydWN0CisgKi8KKyNkZWZpbmUgREJHS0RfS0RETF9PRkYgMHgyMAorCisvKioKKyAq IEBicmllZiBPZmZzZXQgb2YgRGVidWdnZXJEYXRhTGlzdCBpbiBEQkdLRF9HRVRfVkVSU0lPTjY0 IHN0cnVjdAorICovCisjZGVmaW5lIERCR0tEX01JTk9SX09GRiAweDIKKwogLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCiAgKiAgVXRpbGl0eSBmdW5jdGlvbnMKICAqLwpAQCAtMzkwLDYgKzQ5MywyODQg QEAgc3RhdGljIHZvaWQgZmluZF9vcyhrZGRfc3RhdGUgKnMpCiAgICAgcy0+b3MgPSB1bmtub3du X29zOwogfQogCisjaWYgMAorLyoqCisgKiBAYnJpZWYgVGVtcG9yYXJ5IGZ1bmN0aW9uIGZvciBw cmludGluZyBtZW1vcnkgZHVtcCB3aGlsZSBkZWJ1Z2dpbmcKKyAqIER1bXBzIGluIHRoZSBmb3Jt YXQgb2YgUVdPUkQgdHlwZQorICoKKyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhlIGtkZF9zdGF0 ZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBhZGRyIEFkZHJlc3MgdG8gc3RhcnQgZHVtcGluZyBtZW1v cnkgZnJvbQorICogQHBhcmFtIHNpemUgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50IChhdXRvbWF0 aWNhbGx5IGFsaWduZWQgdG8gaGlnaGVyCisgKiBtdWx0aXBsZSBvZiA4IGJ5dGVzCisgKgorICog QG5vdGUgVE9ETzogUmVtb3ZlIHRoaXMgYmVmb3JlIHB1c2hpbmcgdG8gbWFzdGVyCisgKiBAbm90 ZSBUT0RPOiBNYXliZSBhZGQgbGV2ZWwgb2YgbG9nZ2luZyB0byBrZGQgKHVzaW5nIC12IG9wdGlv bikgLSBUaGUKKyAqIGlkZWEgb2YgdXNpbmcgcHJpbnRmIGluc3RlYWQgb2YgS0REX0xPRyB3YXMg dG8gbm90IHByaW50IGFsbCBvdGhlciB1bndhbnRlZAorICogbG9nZ2luZyBvdXRwdXQKKyAqLwor c3RhdGljIHZvaWQgbXlfbWVtZHVtcChrZGRfc3RhdGUgKnMsIHVpbnQ2NF90IGFkZHIsIGludCBz aXplKQoreworICAgIGludCByZXQ7CisgICAgdWludDY0X3QgYnVmOworCisgICAgLy8gd2UgZG9u J3QgaGFuZGxlIG1pcy1hbGlnbmVkIGFkZHJlc3NlcworICAgIGlmIChhZGRyICYgNykgeworICAg ICAgICAvLyBYWFg6IFRPRE86IGRvbid0IGRvIHRoaXMKKyAgICAgICAgcmV0dXJuOworICAgIH0K KworICAgIC8vIGR1bXAgbWVtb3J5IDEgUVdPUkQgYXQgYSB0aW1lCisgICAgLy8gZm9ybWF0OiA8 YWRkcmVzcz4gW29mZnNldCBmcm9tIHN0YXJ0XTogZHVtcDEgZHVtcDIKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IHNpemU7IGkgKz0gMTYpIHsKKworICAgICAgICAvLyByZWFkIDggYnl0ZXMgLSBv biBmYWlsdXJlLCBicmVhaworICAgICAgICByZXQgPSBrZGRfcmVhZF92aXJ0dWFsKHMsIHMtPmNw dWlkLCBhZGRyICsgaSwgOCwgJmJ1Zik7CisgICAgICAgIGlmIChyZXQgIT0gOCkgeworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBwcmludCBmaXJzdCBwYXJ0Cisg ICAgICAgIHByaW50ZigiMHglcCBbKzB4JTAzeF06ICVwICIsICh2b2lkICopKGFkZHIgKyBpKSwg aSwgKHZvaWQgKilidWYpOworCisgICAgICAgIC8vIHJlYWQgbmV4dCA4IGJ5dGVzIGFuZCBwcmlu dCBpdAorICAgICAgICByZXQgPSBrZGRfcmVhZF92aXJ0dWFsKHMsIHMtPmNwdWlkLCBhZGRyICsg aSArIDgsIDgsICZidWYpOworICAgICAgICBpZiAocmV0ICE9IDgpIHsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiJXBcbiIsICh2b2lkICopYnVmKTsKKyAg ICB9CisgICAgcHJpbnRmKCJcbiIpOworfQorI2VuZGlmCisKKy8qKgorICogQGJyaWVmIFBhcnNl IHRoZSBtZW1vcnkgYXQgXGEgZmlsZWJhc2UgYXMgYSB2YWxpZCBET1MgaGVhZGVyIGFuZCBnZXQg dmlydHVhbAorICogYWRkcmVzcyBvZmZzZXQgYW5kIHNpemUgZm9yIGFueSBnaXZlbiBzZWN0aW9u IG5hbWUgKGlmIGl0IGV4aXN0cykKKyAqCisgKiBAcGFyYW0gcyBQb2ludGVyIHRvIHRoZSBrZGRf c3RhdGUgc3RydWN0dXJlCisgKiBAcGFyYW0gZmlsZWJhc2UgQmFzZSBhZGRyZXNzIG9mIHRoZSBm aWxlIHN0cnVjdHVyZQorICogQHBhcmFtIHNlY3RuYW1lIFBvaW50ZXIgdG8gdGhlIHNlY3Rpb24g bmFtZSBjLXN0cmluZyB0byBsb29rIGZvcgorICogQHBhcmFtIHZhZGRyIFBvaW50ZXIgdG8gd3Jp dGUgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiBzZWN0aW9uIHN0YXJ0IHRvCisgKiAoaWYgZm91bmQp CisgKiBAcGFyYW0gdmlzemUgUG9pbnRlciB0byB3cml0ZSB0aGUgc2VjdGlvbiBzaXplIHRvIChp ZiBmb3VuZCkKKyAqCisgKiBAcmV0dXJuIC0xIG9uIGZhaWx1cmUgdG8gZmluZCB0aGUgc2VjdGlv biBuYW1lCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IGdldF9wZTY0 X3NlY3Rpb25zKGtkZF9zdGF0ZSAqcywgdWludDY0X3QgZmlsZWJhc2UsIGNoYXIgKnNlY3RuYW1l LAorICAgICAgICB1aW50NjRfdCAqdmFkZHIsIHVpbnQzMl90ICp2c2l6ZSkKK3sKKyAgICB1aW50 OF90IGJ1ZlsweDMwXTsKKyAgICB1aW50NjRfdCBwZV9oZHI7CisgICAgdWludDY0X3Qgc2VjdF9z dGFydDsKKyAgICB1aW50MTZfdCBudW1fc2VjdGlvbnM7CisgICAgaW50IHJldDsKKworICAgIHJl dCA9IC0xOworCisgICAgaWYgKCFzLT5vcy53NjQpIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAg ICB9CisKKyAgICAvLyByZWFkIFBFIGhlYWRlciBvZmZzZXQKKyAgICBpZiAoa2RkX3JlYWRfdmly dHVhbChzLCBzLT5jcHVpZCwgZmlsZWJhc2UgKyBET1NfSERSX1BFX09GRiwgRE9TX0hEUl9QRV9T WiwKKyAgICAgICAgICAgICAgICBidWYpICE9IERPU19IRFJfUEVfU1opIHsKKyAgICAgICAgcmV0 dXJuIC0xOworICAgIH0KKworICAgIHBlX2hkciA9IGZpbGViYXNlICsgKih1aW50MzJfdCAqKWJ1 ZjsKKworICAgIC8vIHJlYWQgbnVtYmVyIG9mIHNlY3Rpb25zCisgICAgaWYgKGtkZF9yZWFkX3Zp cnR1YWwocywgcy0+Y3B1aWQsIHBlX2hkciArIFBFX05VTV9TRUNUSU9OX09GRiwKKyAgICAgICAg ICAgICAgICBQRV9OVU1fU0VDVElPTl9TWiwgJmJ1ZikgIT0gUEVfTlVNX1NFQ1RJT05fU1opIHsK KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBudW1fc2VjdGlvbnMgPSAqKHVpbnQxNl90 ICopYnVmOworCisgICAgLy8gcmVhZCBzaXplIG9mIG9wdGlvbmFsIGhlYWRlcgorICAgIGlmIChr ZGRfcmVhZF92aXJ0dWFsKHMsIHMtPmNwdWlkLCBwZV9oZHIgKyBQRV9PUFRfSERSX1NaX09GRiwK KyAgICAgICAgICAgICAgICBQRV9PUFRfSERSX1NaX1NaLCAmYnVmKSAhPSBQRV9PUFRfSERSX1Na X1NaKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyAweDE4IGlzIHRoZSBz aXplIG9mIFBFIGhlYWRlcgorICAgIHNlY3Rfc3RhcnQgPSBwZV9oZHIgKyBQRV9IRFJfU1ogKyAq KHVpbnQxNl90ICopYnVmOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc2VjdGlvbnM7 IGkrKykgeworICAgICAgICBpZiAoa2RkX3JlYWRfdmlydHVhbChzLCBzLT5jcHVpZCwgc2VjdF9z dGFydCArIChpICogUEVfU0VDVF9FTlRfU1opLAorICAgICAgICAgICAgICAgICAgICBQRV9TRUNU X0VOVF9TWiwgJmJ1ZikgIT0gUEVfU0VDVF9FTlRfU1opIHsKKyAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RybmNtcChzZWN0bmFtZSwgKGNoYXIgKiko YnVmICsgUEVfU0VDVF9OQU1FX09GRiksCisgICAgICAgICAgICAgICAgICAgIFBFX1NFQ1RfTkFN RV9TWikpIHsKKyAgICAgICAgICAgICp2YWRkciA9IGZpbGViYXNlICsgKih1aW50MzJfdCAqKShi dWYgKyBQRV9TRUNUX1JWQV9PRkYpOworICAgICAgICAgICAgKnZzaXplID0gKih1aW50MzJfdCAq KShidWYgKyBQRV9TRUNUX1ZTSVpFX09GRik7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisv KioKKyAqIEBicmllZiBHZXQgdGhlIE9TIGluZm9ybWF0aW9uIGxpa2UgYmFzZSBhZGRyZXNzLCBt aW5vciB2ZXJzaW9uLAorICogUHNMb2FkZWRNb2R1bGVMaXN0IGFuZCBEZWJ1Z2dlckRhdGFMaXN0 IChiYXNpY2FsbHkgdGhlIGZpZWxkcyBvZgorICogREJHS0RfR0VUX1ZFUlNJT042NCBzdHJ1dHVy ZSByZXF1aXJlZCB0byBkbyBoYW5kc2hha2U/KS4KKyAqCisgKiBUaGlzIGlzIGRvbmUgYnkgcmVh ZGluZyB0aGUgSURUIGVudHJ5IGZvciBkaXZpZGUtYnktemVybyBleGNlcHRpb24gYW5kCisgKiBz ZWFyY2hpbmcgYmFjayBpbnRvIHRoZSBtZW1vcnkgZm9yIERPUyBoZWFkZXIgKHdoaWNoIGlzIG91 ciBrZXJuZWwgYmFzZSkuCisgKiBPbmNlIHdlIGhhdmUgdGhlIGtlcm5lbCBiYXNlLCB3ZSBwYXJz ZSB0aGUgUEUgaGVhZGVyIGFuZCBsb29rIGZvciBrZXJuZWwKKyAqIGJhc2UgYWRkcmVzcyBpbiB0 aGUgLmRhdGEgc2VjdGlvbi4gT25jZSB3ZSBoYXZlIHBvc3NpYmxlIHZhbHVlcywgd2UgbG9vayBm b3IKKyAqIERCR0tEX0dFVF9WRVJTSU9ONjQgYmxvY2sgYnkgdXNpbmcgZm9sbG93aW5nIGhldXJp c3RpY3Mgb24gdGhlIGFkZHJlc3Mgd2hpY2gKKyAqIGhhcyB0aGUga2VybmVsIGJhc2U6CisgKgor ICogIC0gYXQgYWRkcmVzcyBbLTB4MTBdLCBpdCBzaG91bGQgaGF2ZSAweGYgYXMgdGhlIE1ham9y VmVyc2lvbgorICogIC0gYXQgYWRkcmVzcyBbKzB4OF0sIGl0IHNob3VsZCBoYXZlIGEgdmFsaWQg a2VybmVsIG1lbW9yeSBhZGRyZXNzIHBvaW50aW5nCisgKiAgaW4gLmRhdGEKKyAqICAtIGF0IGFk ZHJlc3MgWysweDEwXSwgaXQgc2hvdWxkIGhhdmUgYSB2YWxpZCBrZXJuZWwgbWVtb3J5IGFkZHJl c3MgcG9pbnRpbmcKKyAqICBpbiAuZGF0YQorICoKKyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhl IGtkZCBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBnZXRfb3NfaW5mb182NChrZGRfc3RhdGUgKnMp Cit7CisgICAga2RkX2N0cmwgY3RybDsKKyAgICBpbnQgcmV0OworICAgIHVpbnQ2NF90IGJ1ZjsK KyAgICB1aW50NjRfdCBpZHQwX2FkZHI7CisgICAgdWludDY0X3QgYmFzZTsKKyAgICB1aW50NjRf dCBjYWRkcjsKKyAgICB1aW50NjRfdCBkYXRhX2Jhc2U7CisgICAgdWludDMyX3QgZGF0YV9zaXpl OworICAgIHVpbnQ2NF90IG1vZHB0cjsKKyAgICB1aW50NjRfdCBrZGRsOworICAgIHVpbnQxNl90 IG1pbm9yOworICAgIHVpbnQ4X3QgZGJna2RfZ2V0X3ZlcnNpb242NFsweDI4XTsKKworICAgIC8q IFRPRE86IHJpZ2h0IG5vdywgd2UgYXJlIGZvcmNpbmcgdGhpcyB0byAxIChhcyB3ZSBvbmx5IHN1 cHBvcnQgNjQgYml0CisgICAgICogc3lzdGVtLCBob3dldmVyLCB3ZSBzaG91bGQgdXNlIGtkZF9z dGF0ZSBvciBodm0gY2FsbHMgdG8gY2hlY2sgaWYgd2UgYXJlCisgICAgICogaW4gNjQtYml0Cisg ICAgICovCisgICAgcy0+b3MudzY0ID0gMTsKKworICAgIC8vIGlmIHdlIGFyZSBubyBpbiA2NC1i aXQgbW9kZSwgZmFpbAorICAgIGlmICghcy0+b3MudzY0KSB7CisgICAgICAgIGdvdG8gZmFpbDsK KyAgICB9CisKKyAgICAvLyBnZXQgY29udHJvbCByZWdpc3RlcnMgZm9yIG91ciBvcworICAgIHJl dCA9IGtkZF9nZXRfY3RybChzLT5ndWVzdCwgcy0+Y3B1aWQsICZjdHJsLCBzLT5vcy53NjQpOwor ICAgIGlmIChyZXQpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8vIHJlYWQg dGhlIGRpdi1ieS16ZXJvIGhhbmRsZXIgZnVuY3Rpb24gYWRkcmVzcworICAgIGtkZF9yZWFkX3Zp cnR1YWwocywgcy0+Y3B1aWQsIGN0cmwuYzY0LmlkdF9iYXNlICsgOCwgOCwgJmJ1Zik7CisgICAg aWR0MF9hZGRyID0gKCh1aW50NjRfdClidWYgPDwgMzIpICYgMHhmZmZmZmZmZjAwMDAwMDAwOwor CisgICAga2RkX3JlYWRfdmlydHVhbChzLCBzLT5jcHVpZCwgY3RybC5jNjQuaWR0X2Jhc2UsIDgs ICZidWYpOworICAgIGlkdDBfYWRkciB8PSAoKGJ1ZiA+PiAzMikgJiAweGZmZmYwMDAwKTsKKyAg ICBpZHQwX2FkZHIgfD0gKGJ1ZiAmIDB4ZmZmZik7CisKKyAgICBLRERfTE9HKHMsICJpZHQwIGFk ZHI6ICVwXG4iLCAodm9pZCAqKWlkdDBfYWRkcik7CisgICAgcHJpbnRmKCJpZHQwIGFkZHI6ICVw XG4iLCAodm9pZCAqKWlkdDBfYWRkcik7CisKKyAgICAvLyBnZXQgdGhlIHBhZ2Ugc3RhcnQgYW5k IGxvb2sgZm9yICJNWiIgZmlsZSBoZWFkZXIKKworICAgIGJhc2UgPSBpZHQwX2FkZHIgJiB+KFBB R0VfU0laRSAtIDEpOworICAgIC8vIHByaW50ZigiJXBcbiIsICh2b2lkICopYmFzZSk7CisKKyAg ICB3aGlsZSAoMSkgeworICAgICAgICB1aW50MTZfdCB2YWw7CisgICAgICAgIGlmIChrZGRfcmVh ZF92aXJ0dWFsKHMsIHMtPmNwdWlkLCBiYXNlLCAyLCAmdmFsKSAhPSAyKSB7CisgICAgICAgICAg ICAvLyBqdXN0IG1vdmUgZ29pbmcgYmFjaz8/IHRoaXMgaXMgYmFkIHRob3VnaAorICAgICAgICAg ICAgcHJpbnRmKCJyYW4gaW50byB1bm1hcHBlZCByZWdpb24gd2l0aG91dCBmaW5kaW5nIFBFIGhl YWRlclxuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFsID09IDB4NWE0ZCkgeyAvLyBN WgorICAgICAgICAgICAgLy8gcHJpbnRmKCJtYXliZSBzdWNjZXNzXG4iKTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYmFzZSAtPSBQQUdFX1NJWkU7CisgICAgfQor CisgICAgS0REX0xPRyhzLCAiYmFzZTogJXBcbiIsICh2b2lkICopYmFzZSk7CisKKyAgICAvLyBm b3VuZCB0aGUgZGF0YSBzZWN0aW9uIHN0YXJ0CisgICAgaWYgKGdldF9wZTY0X3NlY3Rpb25zKHMs IGJhc2UsICIuZGF0YSIsICZkYXRhX2Jhc2UsICZkYXRhX3NpemUpKSB7CisgICAgICAgIGdvdG8g ZmFpbDsKKyAgICB9CisKKyAgICAvLyBsb29rIGZvciBhZGRyZXNzZXMgd2hpY2ggaGFzIGtlcm5l bCBiYXNlIHdyaXR0ZW4gaW50byBpdAorICAgIGNhZGRyID0gZGF0YV9iYXNlOworCisgICAgbW9k cHRyID0gMDsKKyAgICBrZGRsID0gMDsKKyAgICBtaW5vciA9IDA7CisKKyAgICB3aGlsZSAoY2Fk ZHIgPCBkYXRhX2Jhc2UgKyBkYXRhX3NpemUpIHsKKyAgICAgICAgaWYgKGtkZF9yZWFkX3ZpcnR1 YWwocywgcy0+Y3B1aWQsIGNhZGRyLCBTSVpFX1BUUjY0LCAmYnVmKSAhPQorICAgICAgICAgICAg ICAgIFNJWkVfUFRSNjQpIHsKKyAgICAgICAgICAgIC8vIHJlYWNoZWQgZW5kIGFuZCBmb3VuZCBu b3RoaW5nCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvLyBp ZiB3ZSBmb3VuZCBiYXNlIGluIHRoZSBtZW1vcnkgYWRkcmVzc2VzCisgICAgICAgIGlmIChidWYg PT0gYmFzZSkgeworICAgICAgICAgICAgLy8gcmVhZCB0aGUgREJHS0RfR0VUX1ZFUlNJT042NCBz dHJ1Y3QKKyAgICAgICAgICAgIGlmIChrZGRfcmVhZF92aXJ0dWFsKHMsIHMtPmNwdWlkLCBjYWRk ciAtIERCR0tEX0tFUk5fQkFTRV9PRkYsCisgICAgICAgICAgICAgICAgICAgICAgICBEQkdLRF9H RVRfVkVSU0lPTjY0X1NaLCBkYmdrZF9nZXRfdmVyc2lvbjY0KSA9PQorICAgICAgICAgICAgICAg ICAgICBEQkdLRF9HRVRfVkVSU0lPTjY0X1NaKSB7CisgICAgICAgICAgICAgICAgLy8gY2hlY2sg aWYgbWFqb3IgdmVyc2lvbiBpcyAweGYKKyAgICAgICAgICAgICAgICBpZiAoZGJna2RfZ2V0X3Zl cnNpb242NFswXSA9PSAnXHgwZicpIHsKKworICAgICAgICAgICAgICAgICAgICAvLyByZWFkIG1p bm9yIHZlcnNpb24sIFBzTG9hZGVkTW9kdWxlTGlzdCBwb2ludGVyIGFuZAorICAgICAgICAgICAg ICAgICAgICAvLyBEZWJ1Z2dlckRhdGFMaXN0CisgICAgICAgICAgICAgICAgICAgIG1vZHB0ciA9 CisgICAgICAgICAgICAgICAgICAgICAgICAqKHVpbnQ2NF90ICopKGRiZ2tkX2dldF92ZXJzaW9u NjQgKyBEQkdLRF9NT0RfTElTVF9PRkYpOworICAgICAgICAgICAgICAgICAgICBrZGRsID0gKih1 aW50NjRfdCAqKShkYmdrZF9nZXRfdmVyc2lvbjY0ICsgREJHS0RfS0RETF9PRkYpOworICAgICAg ICAgICAgICAgICAgICBtaW5vciA9CisgICAgICAgICAgICAgICAgICAgICAgICAqKHVpbnQxNl90 ICopKGRiZ2tkX2dldF92ZXJzaW9uNjQgKyBEQkdLRF9NSU5PUl9PRkYpOworCisgICAgICAgICAg ICAgICAgICAgIC8vIGRvIGhldXJpc3RpYyBjaGVjaworICAgICAgICAgICAgICAgICAgICBpZiAo bW9kcHRyICYmIGtkZGwgJiYgbW9kcHRyICE9IGtkZGwgJiYga2RkbCAhPSBiYXNlICYmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAhPSBtb2RwdHIgJiYgbW9kcHRyID49IGRhdGFf YmFzZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHB0ciA8IChkYXRhX2Jhc2Ug KyBkYXRhX3NpemUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2RkbCA+PSBkYXRh X2Jhc2UgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZGRsIDwgKGRhdGFfYmFzZSAr IGRhdGFfc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG15X21lbWR1bXAocywg Y2FkZHIgLSAweDEwLCAweDMwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK KyAgICAgICAgfQorCisgICAgICAgIGNhZGRyICs9IHNpemVvZih2b2lkICopOworICAgIH0KKwor ICAgIC8vIFRPRE86IHVzZSBLRERfTE9HPworICAgIHByaW50ZigiYmFzZTogJXBcbiIsICh2b2lk ICopYmFzZSk7CisgICAgcHJpbnRmKCJtb2R1bGVzIGxpc3Q6ICVwXG4iLCAodm9pZCAqKW1vZHB0 cik7CisgICAgcHJpbnRmKCJrZGRsOiAlcFxuIiwgKHZvaWQgKilrZGRsKTsKKyAgICBwcmludGYo Im1pbm9yIHZlcnNpb246IDB4JWh4XG4iLCBtaW5vcik7CisKKyAgICBzLT5vcy5iYXNlID0gYmFz ZTsKKyAgICBzLT5vcy5tb2R1bGVzID0gbW9kcHRyIC0gYmFzZTsKKyAgICBzLT5vcy5rZGRsID0g a2RkbCAtIGJhc2U7CisgICAgcy0+b3MuYnVpbGQgPSAodWludDMyX3QpIG1pbm9yOworICAgIHJl dHVybjsKKworZmFpbDoKKyAgICAvLyBYWFg6IFRPRE86IGhhbmRsZSBmYWlsdXJlIGNhc2UKKyAg ICBzLT5vcyA9IHVua25vd25fb3M7CisgICAgcmV0dXJuOworfQorCiAKIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICogIEhvdyB0byBzZW5kIHBhY2tldHMgYW5kIGFja3MuCkBAIC01MzQsNiArOTE1 LDEyIEBAIHN0YXRpYyB2b2lkIGtkZF9oYW5kbGVfaGFuZHNoYWtlKGtkZF9zdGF0ZSAqcykKIHsK ICAgICAvKiBGaWd1cmUgb3V0IHdoYXQgd2UncmUgbG9va2luZyBhdCAqLwogICAgIGZpbmRfb3Mo cyk7CisKKyAgICAvKiBpZiB1bmtub3duIG9zLCB1c2UgdGhlIGlkdCBtZXRob2QgKi8KKyAgICBp ZiAoIXMtPm9zLmJhc2UpIHsKKyAgICAgICAgZ2V0X29zX2luZm9fNjQocyk7CisgICAgfQorCiAg ICAga2RkX3NlbmRfc3RyaW5nKHMsICJba2RkOiAlcyBAMHglIlBSSXg2NCJdXHJcbiIsIHMtPm9z Lm5hbWUsIHMtPm9zLmJhc2UpOwogCiAgICAgLyogUmVzcG9uZCB3aXRoIHNvbWUgZGV0YWlscyBh Ym91dCB0aGUgZGVidWdnZXIgc3R1YiB3ZSBzaW11bGF0ZSAqLwpAQCAtNTU1LDcgKzk0Miw3IEBA IHN0YXRpYyB2b2lkIGtkZF9oYW5kbGVfaGFuZHNoYWtlKGtkZF9zdGF0ZSAqcykKICAgICBzLT50 eHAuY21kLnNoYWtlLnUzWzJdICAgICA9IDB4NTU7CiAgICAgcy0+dHhwLmNtZC5zaGFrZS5rZXJu X2FkZHIgPSBzLT5vcy5iYXNlOwogICAgIHMtPnR4cC5jbWQuc2hha2UubW9kc19hZGRyID0gcy0+ b3MuYmFzZSArIHMtPm9zLm1vZHVsZXM7Ci0gICAgcy0+dHhwLmNtZC5zaGFrZS5kYXRhX2FkZHIg PSAwOyAvKiBEZWJ1Z2dlciBkYXRhIHByb2JhYmx5IGRvZXNuJ3QgZXhpc3QgKi8KKyAgICBzLT50 eHAuY21kLnNoYWtlLmRhdGFfYWRkciA9IHMtPm9zLmJhc2UgKyBzLT5vcy5rZGRsOyAvLyAwOyAv KiBEZWJ1Z2dlciBkYXRhIHByb2JhYmx5IGRvZXNuJ3QgZXhpc3QgKi8KIAogICAgIEtERF9MT0co cywgIkNsaWVudCBpbml0aWFsIGhhbmRzaGFrZTogJXNcbiIsIHMtPm9zLm5hbWUpOwogICAgIGtk ZF9zZW5kX2NtZChzLCBLRERfQ01EX1NIQUtFLCAwKTsKLS0gCjIuMTcuMQoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj dC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=