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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 104A9C433FE for ; Mon, 20 Sep 2021 21:38:09 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 753D161213 for ; Mon, 20 Sep 2021 21:38:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 753D161213 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:43492 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mSQzG-0006YS-Lh for qemu-devel@archiver.kernel.org; Mon, 20 Sep 2021 17:38:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60388) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mSQmQ-0001vD-1z for qemu-devel@nongnu.org; Mon, 20 Sep 2021 17:24:50 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:50145) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1mSQmL-00023H-Hv for qemu-devel@nongnu.org; Mon, 20 Sep 2021 17:24:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1632173085; x=1663709085; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jaWBbFHO5oQSgJB5IY1NCeJKbsUiK7kDZXPzUruErCY=; b=JfawlCb6fK6TviqKangHC5l72eD0MIxnUuWJADvJ35RE5hGUB0k/+YGG IIVCQtoN+izPUblEw07dxfbr4FjXD0VrNugB1oxpehgWFekeAwu0CHFJz 3iDGvn0RRDdMd6kmt3JeiIfllPKFbd7RI/EkS5X/u+nuzbJvZ0NZy2Pfx Y=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 20 Sep 2021 14:24:38 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 20 Sep 2021 14:24:37 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id D7F751761; Mon, 20 Sep 2021 16:24:35 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v3 29/30] Hexagon HVX (tests/tcg/hexagon) scatter_gather test Date: Mon, 20 Sep 2021 16:24:24 -0500 Message-Id: <1632173065-18522-30-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1632173065-18522-1-git-send-email-tsimpson@quicinc.com> References: <1632173065-18522-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, bcain@quicinc.com, tsimpson@quicinc.com, richard.henderson@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" U2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0K IHRlc3RzL3RjZy9oZXhhZ29uL3NjYXR0ZXJfZ2F0aGVyLmMgfCAxMDExICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMvdGNnL2hleGFnb24vTWFrZWZpbGUudGFyZ2V0 ICB8ICAgIDIgKwogMiBmaWxlcyBjaGFuZ2VkLCAxMDEzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0cy90Y2cvaGV4YWdvbi9zY2F0dGVyX2dhdGhlci5jCgpkaWZmIC0tZ2l0 IGEvdGVzdHMvdGNnL2hleGFnb24vc2NhdHRlcl9nYXRoZXIuYyBiL3Rlc3RzL3RjZy9oZXhhZ29u L3NjYXR0ZXJfZ2F0aGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkz ZWIxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3RjZy9oZXhhZ29uL3NjYXR0ZXJfZ2F0aGVy LmMKQEAgLTAsMCArMSwxMDExIEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjEgUXVh bGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg KiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgKiBUaGlz IGV4YW1wbGUgdGVzdHMgdGhlIEhWWCBzY2F0dGVyL2dhdGhlciBpbnN0cnVjdGlvbnMKKyAqCisg KiBTZWUgc2VjdGlvbiA1LjEzIG9mIHRoZSBWNjggSFZYIFByb2dyYW1tZXIncyBSZWZlcmVuY2UK KyAqCisgKiBUaGVyZSBhcmUgMyBtYWluIGNsYXNzZXMgb3BlcmF0aW9ucworICogICAgIF8xNiAg ICAgICAgICAgICAgICAgMTYtYml0IGVsZW1lbnRzIGFuZCAxNi1iaXQgb2Zmc2V0cworICogICAg IF8zMiAgICAgICAgICAgICAgICAgMzItYml0IGVsZW1lbnRzIGFuZCAzMi1iaXQgb2Zmc2V0cwor ICogICAgIF8xNl8zMiAgICAgICAgICAgICAgMTYtYml0IGVsZW1lbnRzIGFuZCAzMi1iaXQgb2Zm c2V0cworICoKKyAqIFRoZXJlIGFyZSBhbHNvIG1hc2tlZCBhbmQgYWNjdW11bGF0ZSB2ZXJzaW9u cworICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1 ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKK3R5cGVkZWYgbG9uZyBIVlhf VmVjdG9yICAgICAgIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxMjgpKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwor dHlwZWRlZiBsb25nIEhWWF9WZWN0b3JQYWlyICAgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6 ZV9fKDI1NikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygo YWxpZ25lZCgxMjgpKSk7Cit0eXBlZGVmIGxvbmcgSFZYX1ZlY3RvclByZWQgICBfX2F0dHJpYnV0 ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTI4KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTsKKworI2RlZmluZSBWU0NBVFRFUl8xNihC QVNFLCBSR04sIE9GRiwgVkFMUykgXAorICAgIF9fYnVpbHRpbl9IRVhBR09OX1Y2X3ZzY2F0dGVy bWhfMTI4QigoaW50KUJBU0UsIFJHTiwgT0ZGLCBWQUxTKQorI2RlZmluZSBWU0NBVFRFUl8xNl9N QVNLRUQoTUFTSywgQkFTRSwgUkdOLCBPRkYsIFZBTFMpIFwKKyAgICBfX2J1aWx0aW5fSEVYQUdP Tl9WNl92c2NhdHRlcm1ocV8xMjhCKE1BU0ssIChpbnQpQkFTRSwgUkdOLCBPRkYsIFZBTFMpCisj ZGVmaW5lIFZTQ0FUVEVSXzMyKEJBU0UsIFJHTiwgT0ZGLCBWQUxTKSBcCisgICAgX19idWlsdGlu X0hFWEFHT05fVjZfdnNjYXR0ZXJtd18xMjhCKChpbnQpQkFTRSwgUkdOLCBPRkYsIFZBTFMpCisj ZGVmaW5lIFZTQ0FUVEVSXzMyX01BU0tFRChNQVNLLCBCQVNFLCBSR04sIE9GRiwgVkFMUykgXAor ICAgIF9fYnVpbHRpbl9IRVhBR09OX1Y2X3ZzY2F0dGVybXdxXzEyOEIoTUFTSywgKGludClCQVNF LCBSR04sIE9GRiwgVkFMUykKKyNkZWZpbmUgVlNDQVRURVJfMTZfMzIoQkFTRSwgUkdOLCBPRkYs IFZBTFMpIFwKKyAgICBfX2J1aWx0aW5fSEVYQUdPTl9WNl92c2NhdHRlcm1od18xMjhCKChpbnQp QkFTRSwgUkdOLCBPRkYsIFZBTFMpCisjZGVmaW5lIFZTQ0FUVEVSXzE2XzMyX01BU0tFRChNQVNL LCBCQVNFLCBSR04sIE9GRiwgVkFMUykgXAorICAgIF9fYnVpbHRpbl9IRVhBR09OX1Y2X3ZzY2F0 dGVybWh3cV8xMjhCKE1BU0ssIChpbnQpQkFTRSwgUkdOLCBPRkYsIFZBTFMpCisjZGVmaW5lIFZT Q0FUVEVSXzE2X0FDQyhCQVNFLCBSR04sIE9GRiwgVkFMUykgXAorICAgIF9fYnVpbHRpbl9IRVhB R09OX1Y2X3ZzY2F0dGVybWhfYWRkXzEyOEIoKGludClCQVNFLCBSR04sIE9GRiwgVkFMUykKKyNk ZWZpbmUgVlNDQVRURVJfMzJfQUNDKEJBU0UsIFJHTiwgT0ZGLCBWQUxTKSBcCisgICAgX19idWls dGluX0hFWEFHT05fVjZfdnNjYXR0ZXJtd19hZGRfMTI4QigoaW50KUJBU0UsIFJHTiwgT0ZGLCBW QUxTKQorI2RlZmluZSBWU0NBVFRFUl8xNl8zMl9BQ0MoQkFTRSwgUkdOLCBPRkYsIFZBTFMpIFwK KyAgICBfX2J1aWx0aW5fSEVYQUdPTl9WNl92c2NhdHRlcm1od19hZGRfMTI4QigoaW50KUJBU0Us IFJHTiwgT0ZGLCBWQUxTKQorCisjZGVmaW5lIFZHQVRIRVJfMTYoRFNUQUREUiwgQkFTRSwgUkdO LCBPRkYpIFwKKyAgICBfX2J1aWx0aW5fSEVYQUdPTl9WNl92Z2F0aGVybWhfMTI4QihEU1RBRERS LCAoaW50KUJBU0UsIFJHTiwgT0ZGKQorI2RlZmluZSBWR0FUSEVSXzE2X01BU0tFRChEU1RBRERS LCBNQVNLLCBCQVNFLCBSR04sIE9GRikgXAorICAgIF9fYnVpbHRpbl9IRVhBR09OX1Y2X3ZnYXRo ZXJtaHFfMTI4QihEU1RBRERSLCBNQVNLLCAoaW50KUJBU0UsIFJHTiwgT0ZGKQorI2RlZmluZSBW R0FUSEVSXzMyKERTVEFERFIsIEJBU0UsIFJHTiwgT0ZGKSBcCisgICAgX19idWlsdGluX0hFWEFH T05fVjZfdmdhdGhlcm13XzEyOEIoRFNUQUREUiwgKGludClCQVNFLCBSR04sIE9GRikKKyNkZWZp bmUgVkdBVEhFUl8zMl9NQVNLRUQoRFNUQUREUiwgTUFTSywgQkFTRSwgUkdOLCBPRkYpIFwKKyAg ICBfX2J1aWx0aW5fSEVYQUdPTl9WNl92Z2F0aGVybXdxXzEyOEIoRFNUQUREUiwgTUFTSywgKGlu dClCQVNFLCBSR04sIE9GRikKKyNkZWZpbmUgVkdBVEhFUl8xNl8zMihEU1RBRERSLCBCQVNFLCBS R04sIE9GRikgXAorICAgIF9fYnVpbHRpbl9IRVhBR09OX1Y2X3ZnYXRoZXJtaHdfMTI4QihEU1RB RERSLCAoaW50KUJBU0UsIFJHTiwgT0ZGKQorI2RlZmluZSBWR0FUSEVSXzE2XzMyX01BU0tFRChE U1RBRERSLCBNQVNLLCBCQVNFLCBSR04sIE9GRikgXAorICAgIF9fYnVpbHRpbl9IRVhBR09OX1Y2 X3ZnYXRoZXJtaHdxXzEyOEIoRFNUQUREUiwgTUFTSywgKGludClCQVNFLCBSR04sIE9GRikKKwor I2RlZmluZSBWU0hVRkZfSChWKSBcCisgICAgX19idWlsdGluX0hFWEFHT05fVjZfdnNodWZmaF8x MjhCKFYpCisjZGVmaW5lIFZTUExBVF9IKFgpIFwKKyAgICBfX2J1aWx0aW5fSEVYQUdPTl9WNl9s dnNwbGF0aF8xMjhCKFgpCisjZGVmaW5lIFZBTkRfVkFMKFBSRUQsIFZBTCkgXAorICAgIF9fYnVp bHRpbl9IRVhBR09OX1Y2X3ZhbmR2cnRfMTI4QihQUkVELCBWQUwpCisjZGVmaW5lIFZERUFMX0go VikgXAorICAgIF9fYnVpbHRpbl9IRVhBR09OX1Y2X3ZkZWFsaF8xMjhCKFYpCisKK2ludCBlcnI7 CisKKy8qIGRlZmluZSB0aGUgbnVtYmVyIG9mIHJvd3MvY29scyBpbiBhIHNxdWFyZSBtYXRyaXgg Ki8KKyNkZWZpbmUgTUFUUklYX1NJWkUgNjQKKworLyogZGVmaW5lIHRoZSBzaXplIG9mIHRoZSBz Y2F0dGVyIGJ1ZmZlciAqLworI2RlZmluZSBTQ0FUVEVSX0JVRkZFUl9TSVpFIChNQVRSSVhfU0la RSAqIE1BVFJJWF9TSVpFKQorCisvKiBmYWtlIHZ0Y20gLSBwdXQgYnVmZmVycyB0b2dldGhlciBh bmQgZm9yY2UgYWxpZ25tZW50ICovCitzdGF0aWMgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBzaG9y dCB2c2NhdHRlcjE2W1NDQVRURVJfQlVGRkVSX1NJWkVdOworICAgIHVuc2lnbmVkIHNob3J0IHZn YXRoZXIxNltNQVRSSVhfU0laRV07CisgICAgdW5zaWduZWQgaW50ICAgdnNjYXR0ZXIzMltTQ0FU VEVSX0JVRkZFUl9TSVpFXTsKKyAgICB1bnNpZ25lZCBpbnQgICB2Z2F0aGVyMzJbTUFUUklYX1NJ WkVdOworICAgIHVuc2lnbmVkIHNob3J0IHZzY2F0dGVyMTZfMzJbU0NBVFRFUl9CVUZGRVJfU0la RV07CisgICAgdW5zaWduZWQgc2hvcnQgdmdhdGhlcjE2XzMyW01BVFJJWF9TSVpFXTsKK30gdnRj bSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDB4MTAwMDApKSk7CisKKy8qIGRlY2xhcmUgdGhlIGFy cmF5cyBvZiByZWZlcmVuY2UgdmFsdWVzICovCit1bnNpZ25lZCBzaG9ydCB2c2NhdHRlcjE2X3Jl ZltTQ0FUVEVSX0JVRkZFUl9TSVpFXTsKK3Vuc2lnbmVkIHNob3J0IHZnYXRoZXIxNl9yZWZbTUFU UklYX1NJWkVdOwordW5zaWduZWQgaW50ICAgdnNjYXR0ZXIzMl9yZWZbU0NBVFRFUl9CVUZGRVJf U0laRV07Cit1bnNpZ25lZCBpbnQgICB2Z2F0aGVyMzJfcmVmW01BVFJJWF9TSVpFXTsKK3Vuc2ln bmVkIHNob3J0IHZzY2F0dGVyMTZfMzJfcmVmW1NDQVRURVJfQlVGRkVSX1NJWkVdOwordW5zaWdu ZWQgc2hvcnQgdmdhdGhlcjE2XzMyX3JlZltNQVRSSVhfU0laRV07CisKKy8qIGRlY2xhcmUgdGhl IGFycmF5cyBvZiBvZmZzZXRzICovCit1bnNpZ25lZCBzaG9ydCBoYWxmX29mZnNldHNbTUFUUklY X1NJWkVdOwordW5zaWduZWQgaW50ICAgd29yZF9vZmZzZXRzW01BVFJJWF9TSVpFXTsKKworLyog ZGVjbGFyZSB0aGUgYXJyYXlzIG9mIHZhbHVlcyAqLwordW5zaWduZWQgc2hvcnQgaGFsZl92YWx1 ZXNbTUFUUklYX1NJWkVdOwordW5zaWduZWQgc2hvcnQgaGFsZl92YWx1ZXNfYWNjW01BVFJJWF9T SVpFXTsKK3Vuc2lnbmVkIHNob3J0IGhhbGZfdmFsdWVzX21hc2tlZFtNQVRSSVhfU0laRV07Cit1 bnNpZ25lZCBpbnQgICB3b3JkX3ZhbHVlc1tNQVRSSVhfU0laRV07Cit1bnNpZ25lZCBpbnQgICB3 b3JkX3ZhbHVlc19hY2NbTUFUUklYX1NJWkVdOwordW5zaWduZWQgaW50ICAgd29yZF92YWx1ZXNf bWFza2VkW01BVFJJWF9TSVpFXTsKKworLyogZGVjbGFyZSB0aGUgYXJyYXlzIG9mIHByZWRpY2F0 ZXMgKi8KK3Vuc2lnbmVkIHNob3J0IGhhbGZfcHJlZGljYXRlc1tNQVRSSVhfU0laRV07Cit1bnNp Z25lZCBpbnQgICB3b3JkX3ByZWRpY2F0ZXNbTUFUUklYX1NJWkVdOworCisvKiBtYWtlIHRoaXMg YmlnIGVub3VnaCBmb3IgYWxsIHRoZSBpbnRyaW5zaWNzICovCitjb25zdCBzaXplX3QgcmVnaW9u X2xlbiA9IHNpemVvZih2dGNtKTsKKworLyogb3B0aW9uYWxseSBhZGQgc3luYyBpbnN0cnVjdGlv bnMgKi8KKyNkZWZpbmUgU1lOQ19WRUNUT1IgMQorCitzdGF0aWMgdm9pZCBzeW5jX3NjYXR0ZXIo dm9pZCAqYWRkcikKK3sKKyNpZiBTWU5DX1ZFQ1RPUgorICAgIC8qCisgICAgICogRG8gdGhlIHNj YXR0ZXIgcmVsZWFzZSBmb2xsb3dlZCBieSBhIGR1bW15IGxvYWQgdG8gY29tcGxldGUgdGhlCisg ICAgICogc3luY2hyb25pemF0aW9uLiAgTm9ybWFsbHkgdGhlIGR1bW15IGxvYWQgd291bGQgYmUg ZGVmZXJyZWQgYXMKKyAgICAgKiBsb25nIGFzIHBvc3NpYmxlIHRvIG1pbmltaXplIHN0YWxscy4K KyAgICAgKi8KKyAgICBhc20gdm9sYXRpbGUoInZtZW0oJTAgKyAjMCk6c2NhdHRlcl9yZWxlYXNl XG4iIDogOiAiciIoYWRkcikpOworICAgIC8qIHVzZSB2b2xhdGlsZSB0byBmb3JjZSB0aGUgbG9h ZCAqLworICAgIHZvbGF0aWxlIEhWWF9WZWN0b3IgdkR1bW15ID0gKihIVlhfVmVjdG9yICopYWRk cjsgdkR1bW15ID0gdkR1bW15OworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHN5bmNfZ2F0aGVy KHZvaWQgKmFkZHIpCit7CisjaWYgU1lOQ19WRUNUT1IKKyAgICAvKiB1c2Ugdm9sYXRpbGUgdG8g Zm9yY2UgdGhlIGxvYWQgKi8KKyAgICB2b2xhdGlsZSBIVlhfVmVjdG9yIHZEdW1teSA9ICooSFZY X1ZlY3RvciAqKWFkZHI7IHZEdW1teSA9IHZEdW1teTsKKyNlbmRpZgorfQorCisvKiBvcHRpb25h bGx5IHByaW50IHRoZSByZXN1bHRzICovCisjZGVmaW5lIFBSSU5UX0RBVEEgMAorCisjZGVmaW5l IEZJTExfQ0hBUiAgICAgICAnLicKKworLyogZmlsbCB2dGNtIHNjcmF0Y2ggd2l0aCBlZSAqLwor dm9pZCBwcmVmaWxsX3Z0Y21fc2NyYXRjaCh2b2lkKQoreworICAgIG1lbXNldCgmdnRjbSwgRklM TF9DSEFSLCBzaXplb2YodnRjbSkpOworfQorCisvKiBjcmVhdGUgYnl0ZSBvZmZzZXRzIHRvIGJl IGEgZGlhZ29uYWwgb2YgdGhlIG1hdHJpeCB3aXRoIDE2IGJpdCBlbGVtZW50cyAqLwordm9pZCBj cmVhdGVfb2Zmc2V0c192YWx1ZXNfcHJlZHNfMTYodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBzaG9y dCBoYWxmX2VsZW1lbnQgPSAwOworICAgIHVuc2lnbmVkIHNob3J0IGhhbGZfZWxlbWVudF9tYXNr ZWQgPSAwOworICAgIGNoYXIgbGV0dGVyID0gJ0EnOworICAgIGNoYXIgbGV0dGVyX21hc2tlZCA9 ICdAJzsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFUUklYX1NJWkU7IGkrKykgeworICAg ICAgICBoYWxmX29mZnNldHNbaV0gPSBpICogKDIgKiBNQVRSSVhfU0laRSArIDIpOworCisgICAg ICAgIGhhbGZfZWxlbWVudCA9IDA7CisgICAgICAgIGhhbGZfZWxlbWVudF9tYXNrZWQgPSAwOwor ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykgeworICAgICAgICAgICAgaGFsZl9l bGVtZW50IHw9IGxldHRlciA8PCBqICogODsKKyAgICAgICAgICAgIGhhbGZfZWxlbWVudF9tYXNr ZWQgfD0gbGV0dGVyX21hc2tlZCA8PCBqICogODsKKyAgICAgICAgfQorCisgICAgICAgIGhhbGZf dmFsdWVzW2ldID0gaGFsZl9lbGVtZW50OworICAgICAgICBoYWxmX3ZhbHVlc19hY2NbaV0gPSAo KGkgJSAxMCkgPDwgOCkgKyAoaSAlIDEwKTsKKyAgICAgICAgaGFsZl92YWx1ZXNfbWFza2VkW2ld ID0gaGFsZl9lbGVtZW50X21hc2tlZDsKKworICAgICAgICBsZXR0ZXIrKzsKKyAgICAgICAgLyog cmVzZXQgdG8gJ0EnICovCisgICAgICAgIGlmIChsZXR0ZXIgPT0gJ00nKSB7CisgICAgICAgICAg ICBsZXR0ZXIgPSAnQSc7CisgICAgICAgIH0KKworICAgICAgICBoYWxmX3ByZWRpY2F0ZXNbaV0g PSAoaSAlIDMgPT0gMCB8fCBpICUgNSA9PSAwKSA/IH4wIDogMDsKKyAgICB9Cit9CisKKy8qIGNy ZWF0ZSBieXRlIG9mZnNldHMgdG8gYmUgYSBkaWFnb25hbCBvZiB0aGUgbWF0cml4IHdpdGggMzIg Yml0IGVsZW1lbnRzICovCit2b2lkIGNyZWF0ZV9vZmZzZXRzX3ZhbHVlc19wcmVkc18zMih2b2lk KQoreworICAgIHVuc2lnbmVkIGludCB3b3JkX2VsZW1lbnQgPSAwOworICAgIHVuc2lnbmVkIGlu dCB3b3JkX2VsZW1lbnRfbWFza2VkID0gMDsKKyAgICBjaGFyIGxldHRlciA9ICdBJzsKKyAgICBj aGFyIGxldHRlcl9tYXNrZWQgPSAnJic7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BVFJJ WF9TSVpFOyBpKyspIHsKKyAgICAgICAgd29yZF9vZmZzZXRzW2ldID0gaSAqICg0ICogTUFUUklY X1NJWkUgKyA0KTsKKworICAgICAgICB3b3JkX2VsZW1lbnQgPSAwOworICAgICAgICB3b3JkX2Vs ZW1lbnRfbWFza2VkID0gMDsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspIHsK KyAgICAgICAgICAgIHdvcmRfZWxlbWVudCB8PSBsZXR0ZXIgPDwgaiAqIDg7CisgICAgICAgICAg ICB3b3JkX2VsZW1lbnRfbWFza2VkIHw9IGxldHRlcl9tYXNrZWQgPDwgaiAqIDg7CisgICAgICAg IH0KKworICAgICAgICB3b3JkX3ZhbHVlc1tpXSA9IHdvcmRfZWxlbWVudDsKKyAgICAgICAgd29y ZF92YWx1ZXNfYWNjW2ldID0gKChpICUgMTApIDw8IDgpICsgKGkgJSAxMCk7CisgICAgICAgIHdv cmRfdmFsdWVzX21hc2tlZFtpXSA9IHdvcmRfZWxlbWVudF9tYXNrZWQ7CisKKyAgICAgICAgbGV0 dGVyKys7CisgICAgICAgIC8qIHJlc2V0IHRvICdBJyAqLworICAgICAgICBpZiAobGV0dGVyID09 ICdNJykgeworICAgICAgICAgICAgbGV0dGVyID0gJ0EnOworICAgICAgICB9CisKKyAgICAgICAg d29yZF9wcmVkaWNhdGVzW2ldID0gKGkgJSA0ID09IDAgfHwgaSAlIDcgPT0gMCkgPyB+MCA6IDA7 CisgICAgfQorfQorCisvKgorICogY3JlYXRlIGJ5dGUgb2Zmc2V0cyB0byBiZSBhIGRpYWdvbmFs IG9mIHRoZSBtYXRyaXggd2l0aCAxNiBiaXQgZWxlbWVudHMKKyAqIGFuZCAzMiBiaXQgb2Zmc2V0 cworICovCit2b2lkIGNyZWF0ZV9vZmZzZXRzX3ZhbHVlc19wcmVkc18xNl8zMih2b2lkKQorewor ICAgIHVuc2lnbmVkIHNob3J0IGhhbGZfZWxlbWVudCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQg aGFsZl9lbGVtZW50X21hc2tlZCA9IDA7CisgICAgY2hhciBsZXR0ZXIgPSAnRCc7CisgICAgY2hh ciBsZXR0ZXJfbWFza2VkID0gJyQnOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVRSSVhf U0laRTsgaSsrKSB7CisgICAgICAgIHdvcmRfb2Zmc2V0c1tpXSA9IGkgKiAoMiAqIE1BVFJJWF9T SVpFICsgMik7CisKKyAgICAgICAgaGFsZl9lbGVtZW50ID0gMDsKKyAgICAgICAgaGFsZl9lbGVt ZW50X21hc2tlZCA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKSB7Cisg ICAgICAgICAgICBoYWxmX2VsZW1lbnQgfD0gbGV0dGVyIDw8IGogKiA4OworICAgICAgICAgICAg aGFsZl9lbGVtZW50X21hc2tlZCB8PSBsZXR0ZXJfbWFza2VkIDw8IGogKiA4OworICAgICAgICB9 CisKKyAgICAgICAgaGFsZl92YWx1ZXNbaV0gPSBoYWxmX2VsZW1lbnQ7CisgICAgICAgIGhhbGZf dmFsdWVzX2FjY1tpXSA9ICgoaSAlIDEwKSA8PCA4KSArIChpICUgMTApOworICAgICAgICBoYWxm X3ZhbHVlc19tYXNrZWRbaV0gPSBoYWxmX2VsZW1lbnRfbWFza2VkOworCisgICAgICAgIGxldHRl cisrOworICAgICAgICAvKiByZXNldCB0byAnQScgKi8KKyAgICAgICAgaWYgKGxldHRlciA9PSAn UCcpIHsKKyAgICAgICAgICAgIGxldHRlciA9ICdEJzsKKyAgICAgICAgfQorCisgICAgICAgIGhh bGZfcHJlZGljYXRlc1tpXSA9IChpICUgMiA9PSAwIHx8IGkgJSAxMyA9PSAwKSA/IH4wIDogMDsK KyAgICB9Cit9CisKKy8qIHNjYXR0ZXIgdGhlIDE2IGJpdCBlbGVtZW50cyB1c2luZyBpbnRyaW5z aWNzICovCit2b2lkIHZlY3Rvcl9zY2F0dGVyXzE2KHZvaWQpCit7CisgICAgLyogY29weSB0aGUg b2Zmc2V0cyBhbmQgdmFsdWVzIHRvIHZlY3RvcnMgKi8KKyAgICBIVlhfVmVjdG9yIG9mZnNldHMg PSAqKEhWWF9WZWN0b3IgKiloYWxmX29mZnNldHM7CisgICAgSFZYX1ZlY3RvciB2YWx1ZXMgPSAq KEhWWF9WZWN0b3IgKiloYWxmX3ZhbHVlczsKKworICAgIFZTQ0FUVEVSXzE2KCZ2dGNtLnZzY2F0 dGVyMTYsIHJlZ2lvbl9sZW4sIG9mZnNldHMsIHZhbHVlcyk7CisKKyAgICBzeW5jX3NjYXR0ZXIo dnRjbS52c2NhdHRlcjE2KTsKK30KKworLyogc2NhdHRlci1hY2N1bXVsYXRlIHRoZSAxNiBiaXQg ZWxlbWVudHMgdXNpbmcgaW50cmluc2ljcyAqLwordm9pZCB2ZWN0b3Jfc2NhdHRlcl8xNl9hY2Mo dm9pZCkKK3sKKyAgICAvKiBjb3B5IHRoZSBvZmZzZXRzIGFuZCB2YWx1ZXMgdG8gdmVjdG9ycyAq LworICAgIEhWWF9WZWN0b3Igb2Zmc2V0cyA9ICooSFZYX1ZlY3RvciAqKWhhbGZfb2Zmc2V0czsK KyAgICBIVlhfVmVjdG9yIHZhbHVlcyA9ICooSFZYX1ZlY3RvciAqKWhhbGZfdmFsdWVzX2FjYzsK KworICAgIFZTQ0FUVEVSXzE2X0FDQygmdnRjbS52c2NhdHRlcjE2LCByZWdpb25fbGVuLCBvZmZz ZXRzLCB2YWx1ZXMpOworCisgICAgc3luY19zY2F0dGVyKHZ0Y20udnNjYXR0ZXIxNik7Cit9CisK Ky8qIHNjYXR0ZXIgdGhlIDE2IGJpdCBlbGVtZW50cyB1c2luZyBpbnRyaW5zaWNzICovCit2b2lk IHZlY3Rvcl9zY2F0dGVyXzE2X21hc2tlZCh2b2lkKQoreworICAgIC8qIGNvcHkgdGhlIG9mZnNl dHMgYW5kIHZhbHVlcyB0byB2ZWN0b3JzICovCisgICAgSFZYX1ZlY3RvciBvZmZzZXRzID0gKihI VlhfVmVjdG9yICopaGFsZl9vZmZzZXRzOworICAgIEhWWF9WZWN0b3IgdmFsdWVzID0gKihIVlhf VmVjdG9yICopaGFsZl92YWx1ZXNfbWFza2VkOworICAgIEhWWF9WZWN0b3IgcHJlZF9yZWcgPSAq KEhWWF9WZWN0b3IgKiloYWxmX3ByZWRpY2F0ZXM7CisgICAgSFZYX1ZlY3RvclByZWQgcHJlZHMg PSBWQU5EX1ZBTChwcmVkX3JlZywgfjApOworCisgICAgVlNDQVRURVJfMTZfTUFTS0VEKHByZWRz LCAmdnRjbS52c2NhdHRlcjE2LCByZWdpb25fbGVuLCBvZmZzZXRzLCB2YWx1ZXMpOworCisgICAg c3luY19zY2F0dGVyKHZ0Y20udnNjYXR0ZXIxNik7Cit9CisKKy8qIHNjYXR0ZXIgdGhlIDMyIGJp dCBlbGVtZW50cyB1c2luZyBpbnRyaW5zaWNzICovCit2b2lkIHZlY3Rvcl9zY2F0dGVyXzMyKHZv aWQpCit7CisgICAgLyogY29weSB0aGUgb2Zmc2V0cyBhbmQgdmFsdWVzIHRvIHZlY3RvcnMgKi8K KyAgICBIVlhfVmVjdG9yIG9mZnNldHNsbyA9ICooSFZYX1ZlY3RvciAqKXdvcmRfb2Zmc2V0czsK KyAgICBIVlhfVmVjdG9yIG9mZnNldHNoaSA9ICooSFZYX1ZlY3RvciAqKSZ3b3JkX29mZnNldHNb TUFUUklYX1NJWkUgLyAyXTsKKyAgICBIVlhfVmVjdG9yIHZhbHVlc2xvID0gKihIVlhfVmVjdG9y ICopd29yZF92YWx1ZXM7CisgICAgSFZYX1ZlY3RvciB2YWx1ZXNoaSA9ICooSFZYX1ZlY3RvciAq KSZ3b3JkX3ZhbHVlc1tNQVRSSVhfU0laRSAvIDJdOworCisgICAgVlNDQVRURVJfMzIoJnZ0Y20u dnNjYXR0ZXIzMiwgcmVnaW9uX2xlbiwgb2Zmc2V0c2xvLCB2YWx1ZXNsbyk7CisgICAgVlNDQVRU RVJfMzIoJnZ0Y20udnNjYXR0ZXIzMiwgcmVnaW9uX2xlbiwgb2Zmc2V0c2hpLCB2YWx1ZXNoaSk7 CisKKyAgICBzeW5jX3NjYXR0ZXIodnRjbS52c2NhdHRlcjMyKTsKK30KKworLyogc2NhdHRlci1h Y2MgdGhlIDMyIGJpdCBlbGVtZW50cyB1c2luZyBpbnRyaW5zaWNzICovCit2b2lkIHZlY3Rvcl9z Y2F0dGVyXzMyX2FjYyh2b2lkKQoreworICAgIC8qIGNvcHkgdGhlIG9mZnNldHMgYW5kIHZhbHVl cyB0byB2ZWN0b3JzICovCisgICAgSFZYX1ZlY3RvciBvZmZzZXRzbG8gPSAqKEhWWF9WZWN0b3Ig Kil3b3JkX29mZnNldHM7CisgICAgSFZYX1ZlY3RvciBvZmZzZXRzaGkgPSAqKEhWWF9WZWN0b3Ig Kikmd29yZF9vZmZzZXRzW01BVFJJWF9TSVpFIC8gMl07CisgICAgSFZYX1ZlY3RvciB2YWx1ZXNs byA9ICooSFZYX1ZlY3RvciAqKXdvcmRfdmFsdWVzX2FjYzsKKyAgICBIVlhfVmVjdG9yIHZhbHVl c2hpID0gKihIVlhfVmVjdG9yICopJndvcmRfdmFsdWVzX2FjY1tNQVRSSVhfU0laRSAvIDJdOwor CisgICAgVlNDQVRURVJfMzJfQUNDKCZ2dGNtLnZzY2F0dGVyMzIsIHJlZ2lvbl9sZW4sIG9mZnNl dHNsbywgdmFsdWVzbG8pOworICAgIFZTQ0FUVEVSXzMyX0FDQygmdnRjbS52c2NhdHRlcjMyLCBy ZWdpb25fbGVuLCBvZmZzZXRzaGksIHZhbHVlc2hpKTsKKworICAgIHN5bmNfc2NhdHRlcih2dGNt LnZzY2F0dGVyMzIpOworfQorCisvKiBzY2F0dGVyIHRoZSAzMiBiaXQgZWxlbWVudHMgdXNpbmcg aW50cmluc2ljcyAqLwordm9pZCB2ZWN0b3Jfc2NhdHRlcl8zMl9tYXNrZWQodm9pZCkKK3sKKyAg ICAvKiBjb3B5IHRoZSBvZmZzZXRzIGFuZCB2YWx1ZXMgdG8gdmVjdG9ycyAqLworICAgIEhWWF9W ZWN0b3Igb2Zmc2V0c2xvID0gKihIVlhfVmVjdG9yICopd29yZF9vZmZzZXRzOworICAgIEhWWF9W ZWN0b3Igb2Zmc2V0c2hpID0gKihIVlhfVmVjdG9yICopJndvcmRfb2Zmc2V0c1tNQVRSSVhfU0la RSAvIDJdOworICAgIEhWWF9WZWN0b3IgdmFsdWVzbG8gPSAqKEhWWF9WZWN0b3IgKil3b3JkX3Zh bHVlc19tYXNrZWQ7CisgICAgSFZYX1ZlY3RvciB2YWx1ZXNoaSA9ICooSFZYX1ZlY3RvciAqKSZ3 b3JkX3ZhbHVlc19tYXNrZWRbTUFUUklYX1NJWkUgLyAyXTsKKyAgICBIVlhfVmVjdG9yIHByZWRf cmVnbG8gPSAqKEhWWF9WZWN0b3IgKil3b3JkX3ByZWRpY2F0ZXM7CisgICAgSFZYX1ZlY3RvciBw cmVkX3JlZ2hpID0gKihIVlhfVmVjdG9yICopJndvcmRfcHJlZGljYXRlc1tNQVRSSVhfU0laRSAv IDJdOworICAgIEhWWF9WZWN0b3JQcmVkIHByZWRzbG8gPSBWQU5EX1ZBTChwcmVkX3JlZ2xvLCB+ MCk7CisgICAgSFZYX1ZlY3RvclByZWQgcHJlZHNoaSA9IFZBTkRfVkFMKHByZWRfcmVnaGksIH4w KTsKKworICAgIFZTQ0FUVEVSXzMyX01BU0tFRChwcmVkc2xvLCAmdnRjbS52c2NhdHRlcjMyLCBy ZWdpb25fbGVuLCBvZmZzZXRzbG8sCisgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc2xvKTsK KyAgICBWU0NBVFRFUl8zMl9NQVNLRUQocHJlZHNoaSwgJnZ0Y20udnNjYXR0ZXIzMiwgcmVnaW9u X2xlbiwgb2Zmc2V0c2hpLAorICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNoaSk7CisKKyAg ICBzeW5jX3NjYXR0ZXIodnRjbS52c2NhdHRlcjE2KTsKK30KKworLyogc2NhdHRlciB0aGUgMTYg Yml0IGVsZW1lbnRzIHdpdGggMzIgYml0IG9mZnNldHMgdXNpbmcgaW50cmluc2ljcyAqLwordm9p ZCB2ZWN0b3Jfc2NhdHRlcl8xNl8zMih2b2lkKQoreworICAgIEhWWF9WZWN0b3JQYWlyIG9mZnNl dHM7CisgICAgSFZYX1ZlY3RvciB2YWx1ZXM7CisKKyAgICAvKiBnZXQgdGhlIHdvcmQgb2Zmc2V0 cyBpbiBhIHZlY3RvciBwYWlyICovCisgICAgb2Zmc2V0cyA9ICooSFZYX1ZlY3RvclBhaXIgKil3 b3JkX29mZnNldHM7CisKKyAgICAvKiB0aGVzZSB2YWx1ZXMgbmVlZCB0byBiZSBzaHVmZmxlZCBm b3IgdGhlIHNjYXR0ZXIgKi8KKyAgICB2YWx1ZXMgPSAqKEhWWF9WZWN0b3IgKiloYWxmX3ZhbHVl czsKKyAgICB2YWx1ZXMgPSBWU0hVRkZfSCh2YWx1ZXMpOworCisgICAgVlNDQVRURVJfMTZfMzIo JnZ0Y20udnNjYXR0ZXIxNl8zMiwgcmVnaW9uX2xlbiwgb2Zmc2V0cywgdmFsdWVzKTsKKworICAg IHN5bmNfc2NhdHRlcih2dGNtLnZzY2F0dGVyMTZfMzIpOworfQorCisvKiBzY2F0dGVyLWFjYyB0 aGUgMTYgYml0IGVsZW1lbnRzIHdpdGggMzIgYml0IG9mZnNldHMgdXNpbmcgaW50cmluc2ljcyAq Lwordm9pZCB2ZWN0b3Jfc2NhdHRlcl8xNl8zMl9hY2Modm9pZCkKK3sKKyAgICBIVlhfVmVjdG9y UGFpciBvZmZzZXRzOworICAgIEhWWF9WZWN0b3IgdmFsdWVzOworCisgICAgLyogZ2V0IHRoZSB3 b3JkIG9mZnNldHMgaW4gYSB2ZWN0b3IgcGFpciAqLworICAgIG9mZnNldHMgPSAqKEhWWF9WZWN0 b3JQYWlyICopd29yZF9vZmZzZXRzOworCisgICAgLyogdGhlc2UgdmFsdWVzIG5lZWQgdG8gYmUg c2h1ZmZsZWQgZm9yIHRoZSBzY2F0dGVyICovCisgICAgdmFsdWVzID0gKihIVlhfVmVjdG9yICop aGFsZl92YWx1ZXNfYWNjOworICAgIHZhbHVlcyA9IFZTSFVGRl9IKHZhbHVlcyk7CisKKyAgICBW U0NBVFRFUl8xNl8zMl9BQ0MoJnZ0Y20udnNjYXR0ZXIxNl8zMiwgcmVnaW9uX2xlbiwgb2Zmc2V0 cywgdmFsdWVzKTsKKworICAgIHN5bmNfc2NhdHRlcih2dGNtLnZzY2F0dGVyMTZfMzIpOworfQor CisvKiBtYXNrZWQgc2NhdHRlciB0aGUgMTYgYml0IGVsZW1lbnRzIHdpdGggMzIgYml0IG9mZnNl dHMgdXNpbmcgaW50cmluc2ljcyAqLwordm9pZCB2ZWN0b3Jfc2NhdHRlcl8xNl8zMl9tYXNrZWQo dm9pZCkKK3sKKyAgICBIVlhfVmVjdG9yUGFpciBvZmZzZXRzOworICAgIEhWWF9WZWN0b3IgdmFs dWVzOworICAgIEhWWF9WZWN0b3IgcHJlZF9yZWc7CisKKyAgICAvKiBnZXQgdGhlIHdvcmQgb2Zm c2V0cyBpbiBhIHZlY3RvciBwYWlyICovCisgICAgb2Zmc2V0cyA9ICooSFZYX1ZlY3RvclBhaXIg Kil3b3JkX29mZnNldHM7CisKKyAgICAvKiB0aGVzZSB2YWx1ZXMgbmVlZCB0byBiZSBzaHVmZmxl ZCBmb3IgdGhlIHNjYXR0ZXIgKi8KKyAgICB2YWx1ZXMgPSAqKEhWWF9WZWN0b3IgKiloYWxmX3Zh bHVlc19tYXNrZWQ7CisgICAgdmFsdWVzID0gVlNIVUZGX0godmFsdWVzKTsKKworICAgIHByZWRf cmVnID0gKihIVlhfVmVjdG9yICopaGFsZl9wcmVkaWNhdGVzOworICAgIHByZWRfcmVnID0gVlNI VUZGX0gocHJlZF9yZWcpOworICAgIEhWWF9WZWN0b3JQcmVkIHByZWRzID0gVkFORF9WQUwocHJl ZF9yZWcsIH4wKTsKKworICAgIFZTQ0FUVEVSXzE2XzMyX01BU0tFRChwcmVkcywgJnZ0Y20udnNj YXR0ZXIxNl8zMiwgcmVnaW9uX2xlbiwgb2Zmc2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWVzKTsKKworICAgIHN5bmNfc2NhdHRlcih2dGNtLnZzY2F0dGVyMTZfMzIpOworfQor CisvKiBnYXRoZXIgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNjYXR0ZXIxNiBidWZmZXIgKi8KK3Zv aWQgdmVjdG9yX2dhdGhlcl8xNih2b2lkKQoreworICAgIEhWWF9WZWN0b3IgKnZnYXRoZXIgPSAo SFZYX1ZlY3RvciAqKSZ2dGNtLnZnYXRoZXIxNjsKKyAgICBIVlhfVmVjdG9yIG9mZnNldHMgPSAq KEhWWF9WZWN0b3IgKiloYWxmX29mZnNldHM7CisKKyAgICBWR0FUSEVSXzE2KHZnYXRoZXIsICZ2 dGNtLnZzY2F0dGVyMTYsIHJlZ2lvbl9sZW4sIG9mZnNldHMpOworCisgICAgc3luY19nYXRoZXIo dmdhdGhlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnYXRoZXJfMTZfbWFza2VkX2lu aXQodm9pZCkKK3sKKyAgICBjaGFyIGxldHRlciA9ICc/JzsKKyAgICByZXR1cm4gbGV0dGVyIHwg KGxldHRlciA8PCA4KTsKK30KKwordm9pZCB2ZWN0b3JfZ2F0aGVyXzE2X21hc2tlZCh2b2lkKQor eworICAgIEhWWF9WZWN0b3IgKnZnYXRoZXIgPSAoSFZYX1ZlY3RvciAqKSZ2dGNtLnZnYXRoZXIx NjsKKyAgICBIVlhfVmVjdG9yIG9mZnNldHMgPSAqKEhWWF9WZWN0b3IgKiloYWxmX29mZnNldHM7 CisgICAgSFZYX1ZlY3RvciBwcmVkX3JlZyA9ICooSFZYX1ZlY3RvciAqKWhhbGZfcHJlZGljYXRl czsKKyAgICBIVlhfVmVjdG9yUHJlZCBwcmVkcyA9IFZBTkRfVkFMKHByZWRfcmVnLCB+MCk7CisK KyAgICAqdmdhdGhlciA9IFZTUExBVF9IKGdhdGhlcl8xNl9tYXNrZWRfaW5pdCgpKTsKKyAgICBW R0FUSEVSXzE2X01BU0tFRCh2Z2F0aGVyLCBwcmVkcywgJnZ0Y20udnNjYXR0ZXIxNiwgcmVnaW9u X2xlbiwgb2Zmc2V0cyk7CisKKyAgICBzeW5jX2dhdGhlcih2Z2F0aGVyKTsKK30KKworLyogZ2F0 aGVyIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzY2F0dGVyMzIgYnVmZmVyICovCit2b2lkIHZlY3Rv cl9nYXRoZXJfMzIodm9pZCkKK3sKKyAgICBIVlhfVmVjdG9yICp2Z2F0aGVybG8gPSAoSFZYX1Zl Y3RvciAqKSZ2dGNtLnZnYXRoZXIzMjsKKyAgICBIVlhfVmVjdG9yICp2Z2F0aGVyaGkgPQorICAg ICAgICAoSFZYX1ZlY3RvciAqKSgoaW50KSZ2dGNtLnZnYXRoZXIzMiArIChNQVRSSVhfU0laRSAq IDIpKTsKKyAgICBIVlhfVmVjdG9yIG9mZnNldHNsbyA9ICooSFZYX1ZlY3RvciAqKXdvcmRfb2Zm c2V0czsKKyAgICBIVlhfVmVjdG9yIG9mZnNldHNoaSA9ICooSFZYX1ZlY3RvciAqKSZ3b3JkX29m ZnNldHNbTUFUUklYX1NJWkUgLyAyXTsKKworICAgIFZHQVRIRVJfMzIodmdhdGhlcmxvLCAmdnRj bS52c2NhdHRlcjMyLCByZWdpb25fbGVuLCBvZmZzZXRzbG8pOworICAgIFZHQVRIRVJfMzIodmdh dGhlcmhpLCAmdnRjbS52c2NhdHRlcjMyLCByZWdpb25fbGVuLCBvZmZzZXRzaGkpOworCisgICAg c3luY19nYXRoZXIodmdhdGhlcmhpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnYXRoZXJf MzJfbWFza2VkX2luaXQodm9pZCkKK3sKKyAgICBjaGFyIGxldHRlciA9ICc/JzsKKyAgICByZXR1 cm4gbGV0dGVyIHwgKGxldHRlciA8PCA4KSB8IChsZXR0ZXIgPDwgMTYpIHwgKGxldHRlciA8PCAy NCk7Cit9CisKK3ZvaWQgdmVjdG9yX2dhdGhlcl8zMl9tYXNrZWQodm9pZCkKK3sKKyAgICBIVlhf VmVjdG9yICp2Z2F0aGVybG8gPSAoSFZYX1ZlY3RvciAqKSZ2dGNtLnZnYXRoZXIzMjsKKyAgICBI VlhfVmVjdG9yICp2Z2F0aGVyaGkgPQorICAgICAgICAoSFZYX1ZlY3RvciAqKSgoaW50KSZ2dGNt LnZnYXRoZXIzMiArIChNQVRSSVhfU0laRSAqIDIpKTsKKyAgICBIVlhfVmVjdG9yIG9mZnNldHNs byA9ICooSFZYX1ZlY3RvciAqKXdvcmRfb2Zmc2V0czsKKyAgICBIVlhfVmVjdG9yIG9mZnNldHNo aSA9ICooSFZYX1ZlY3RvciAqKSZ3b3JkX29mZnNldHNbTUFUUklYX1NJWkUgLyAyXTsKKyAgICBI VlhfVmVjdG9yIHByZWRfcmVnbG8gPSAqKEhWWF9WZWN0b3IgKil3b3JkX3ByZWRpY2F0ZXM7Cisg ICAgSFZYX1ZlY3RvclByZWQgcHJlZHNsbyA9IFZBTkRfVkFMKHByZWRfcmVnbG8sIH4wKTsKKyAg ICBIVlhfVmVjdG9yIHByZWRfcmVnaGkgPSAqKEhWWF9WZWN0b3IgKikmd29yZF9wcmVkaWNhdGVz W01BVFJJWF9TSVpFIC8gMl07CisgICAgSFZYX1ZlY3RvclByZWQgcHJlZHNoaSA9IFZBTkRfVkFM KHByZWRfcmVnaGksIH4wKTsKKworICAgICp2Z2F0aGVybG8gPSBWU1BMQVRfSChnYXRoZXJfMzJf bWFza2VkX2luaXQoKSk7CisgICAgKnZnYXRoZXJoaSA9IFZTUExBVF9IKGdhdGhlcl8zMl9tYXNr ZWRfaW5pdCgpKTsKKyAgICBWR0FUSEVSXzMyX01BU0tFRCh2Z2F0aGVybG8sIHByZWRzbG8sICZ2 dGNtLnZzY2F0dGVyMzIsIHJlZ2lvbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0 c2xvKTsKKyAgICBWR0FUSEVSXzMyX01BU0tFRCh2Z2F0aGVyaGksIHByZWRzaGksICZ2dGNtLnZz Y2F0dGVyMzIsIHJlZ2lvbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0c2hpKTsK KworICAgIHN5bmNfZ2F0aGVyKHZnYXRoZXJsbyk7CisgICAgc3luY19nYXRoZXIodmdhdGhlcmhp KTsKK30KKworLyogZ2F0aGVyIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzY2F0dGVyMTZfMzIgYnVm ZmVyICovCit2b2lkIHZlY3Rvcl9nYXRoZXJfMTZfMzIodm9pZCkKK3sKKyAgICBIVlhfVmVjdG9y ICp2Z2F0aGVyOworICAgIEhWWF9WZWN0b3JQYWlyIG9mZnNldHM7CisgICAgSFZYX1ZlY3RvciB2 YWx1ZXM7CisKKyAgICAvKiBnZXQgdGhlIHZ0Y20gYWRkcmVzcyB0byBnYXRoZXIgZnJvbSAqLwor ICAgIHZnYXRoZXIgPSAoSFZYX1ZlY3RvciAqKSZ2dGNtLnZnYXRoZXIxNl8zMjsKKworICAgIC8q IGdldCB0aGUgd29yZCBvZmZzZXRzIGluIGEgdmVjdG9yIHBhaXIgKi8KKyAgICBvZmZzZXRzID0g KihIVlhfVmVjdG9yUGFpciAqKXdvcmRfb2Zmc2V0czsKKworICAgIFZHQVRIRVJfMTZfMzIodmdh dGhlciwgJnZ0Y20udnNjYXR0ZXIxNl8zMiwgcmVnaW9uX2xlbiwgb2Zmc2V0cyk7CisKKyAgICAv KiBkZWFsIHRoZSBlbGVtZW50cyB0byBnZXQgdGhlIG9yZGVyIGJhY2sgKi8KKyAgICB2YWx1ZXMg PSAqKEhWWF9WZWN0b3IgKil2Z2F0aGVyOworICAgIHZhbHVlcyA9IFZERUFMX0godmFsdWVzKTsK KworICAgIC8qIHdyaXRlIGl0IGJhY2sgdG8gdnRjbSBhZGRyZXNzICovCisgICAgKihIVlhfVmVj dG9yICopdmdhdGhlciA9IHZhbHVlczsKK30KKwordm9pZCB2ZWN0b3JfZ2F0aGVyXzE2XzMyX21h c2tlZCh2b2lkKQoreworICAgIEhWWF9WZWN0b3IgKnZnYXRoZXI7CisgICAgSFZYX1ZlY3RvclBh aXIgb2Zmc2V0czsKKyAgICBIVlhfVmVjdG9yIHByZWRfcmVnOworICAgIEhWWF9WZWN0b3JQcmVk IHByZWRzOworICAgIEhWWF9WZWN0b3IgdmFsdWVzOworCisgICAgLyogZ2V0IHRoZSB2dGNtIGFk ZHJlc3MgdG8gZ2F0aGVyIGZyb20gKi8KKyAgICB2Z2F0aGVyID0gKEhWWF9WZWN0b3IgKikmdnRj bS52Z2F0aGVyMTZfMzI7CisKKyAgICAvKiBnZXQgdGhlIHdvcmQgb2Zmc2V0cyBpbiBhIHZlY3Rv ciBwYWlyICovCisgICAgb2Zmc2V0cyA9ICooSFZYX1ZlY3RvclBhaXIgKil3b3JkX29mZnNldHM7 CisgICAgcHJlZF9yZWcgPSAqKEhWWF9WZWN0b3IgKiloYWxmX3ByZWRpY2F0ZXM7CisgICAgcHJl ZF9yZWcgPSBWU0hVRkZfSChwcmVkX3JlZyk7CisgICAgcHJlZHMgPSBWQU5EX1ZBTChwcmVkX3Jl ZywgfjApOworCisgICAqdmdhdGhlciA9IFZTUExBVF9IKGdhdGhlcl8xNl9tYXNrZWRfaW5pdCgp KTsKKyAgIFZHQVRIRVJfMTZfMzJfTUFTS0VEKHZnYXRoZXIsIHByZWRzLCAmdnRjbS52c2NhdHRl cjE2XzMyLCByZWdpb25fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cyk7CisK KyAgICAvKiBkZWFsIHRoZSBlbGVtZW50cyB0byBnZXQgdGhlIG9yZGVyIGJhY2sgKi8KKyAgICB2 YWx1ZXMgPSAqKEhWWF9WZWN0b3IgKil2Z2F0aGVyOworICAgIHZhbHVlcyA9IFZERUFMX0godmFs dWVzKTsKKworICAgIC8qIHdyaXRlIGl0IGJhY2sgdG8gdnRjbSBhZGRyZXNzICovCisgICAgKihI VlhfVmVjdG9yICopdmdhdGhlciA9IHZhbHVlczsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYnVm ZmVyKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmMsIHZvaWQgKnIsIHNpemVfdCBzaXplKQorewor ICAgIGNoYXIgKmNoZWNrID0gKGNoYXIgKiljOworICAgIGNoYXIgKnJlZiA9IChjaGFyICopcjsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAoY2hlY2tb aV0gIT0gcmVmW2ldKSB7CisgICAgICAgICAgICBwcmludGYoIkVSUk9SICVzIFslZF06IDB4JXgg KCVjKSAhPSAweCV4ICglYylcbiIsIG5hbWUsIGksCisgICAgICAgICAgICAgICAgICAgY2hlY2tb aV0sIGNoZWNrW2ldLCByZWZbaV0sIHJlZltpXSk7CisgICAgICAgICAgICBlcnIrKzsKKyAgICAg ICAgfQorICAgIH0KK30KKworLyoKKyAqIFRoZXNlIHNjYWxhciBmdW5jdGlvbnMgYXJlIHRoZSBD IGVxdWl2YWxlbnRzIG9mIHRoZSB2ZWN0b3IgZnVuY3Rpb25zIHRoYXQKKyAqIHVzZSBIVlgKKyAq LworCisvKiBzY2F0dGVyIHRoZSAxNiBiaXQgZWxlbWVudHMgdXNpbmcgQyAqLwordm9pZCBzY2Fs YXJfc2NhdHRlcl8xNih1bnNpZ25lZCBzaG9ydCAqdnNjYXR0ZXIxNikKK3sKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IE1BVFJJWF9TSVpFOyArK2kpIHsKKyAgICAgICAgdnNjYXR0ZXIxNltoYWxm X29mZnNldHNbaV0gLyAyXSA9IGhhbGZfdmFsdWVzW2ldOworICAgIH0KK30KKwordm9pZCBjaGVj a19zY2F0dGVyXzE2KCkKK3sKKyAgICBtZW1zZXQodnNjYXR0ZXIxNl9yZWYsIEZJTExfQ0hBUiwK KyAgICAgICAgICAgU0NBVFRFUl9CVUZGRVJfU0laRSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkp OworICAgIHNjYWxhcl9zY2F0dGVyXzE2KHZzY2F0dGVyMTZfcmVmKTsKKyAgICBjaGVja19idWZm ZXIoX19mdW5jX18sIHZ0Y20udnNjYXR0ZXIxNiwgdnNjYXR0ZXIxNl9yZWYsCisgICAgICAgICAg ICAgICAgIFNDQVRURVJfQlVGRkVSX1NJWkUgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKK30K KworLyogc2NhdHRlciB0aGUgMTYgYml0IGVsZW1lbnRzIHVzaW5nIEMgKi8KK3ZvaWQgc2NhbGFy X3NjYXR0ZXJfMTZfYWNjKHVuc2lnbmVkIHNob3J0ICp2c2NhdHRlcjE2KQoreworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgTUFUUklYX1NJWkU7ICsraSkgeworICAgICAgICB2c2NhdHRlcjE2W2hh bGZfb2Zmc2V0c1tpXSAvIDJdICs9IGhhbGZfdmFsdWVzX2FjY1tpXTsKKyAgICB9Cit9CisKK3Zv aWQgY2hlY2tfc2NhdHRlcl8xNl9hY2MoKQoreworICAgIG1lbXNldCh2c2NhdHRlcjE2X3JlZiwg RklMTF9DSEFSLAorICAgICAgICAgICBTQ0FUVEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2ln bmVkIHNob3J0KSk7CisgICAgc2NhbGFyX3NjYXR0ZXJfMTYodnNjYXR0ZXIxNl9yZWYpOworICAg IHNjYWxhcl9zY2F0dGVyXzE2X2FjYyh2c2NhdHRlcjE2X3JlZik7CisgICAgY2hlY2tfYnVmZmVy KF9fZnVuY19fLCB2dGNtLnZzY2F0dGVyMTYsIHZzY2F0dGVyMTZfcmVmLAorICAgICAgICAgICAg ICAgICBTQ0FUVEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7Cit9CisK Ky8qIHNjYXR0ZXIgdGhlIDE2IGJpdCBlbGVtZW50cyB1c2luZyBDICovCit2b2lkIHNjYWxhcl9z Y2F0dGVyXzE2X21hc2tlZCh1bnNpZ25lZCBzaG9ydCAqdnNjYXR0ZXIxNikKK3sKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IE1BVFJJWF9TSVpFOyBpKyspIHsKKyAgICAgICAgaWYgKGhhbGZfcHJl ZGljYXRlc1tpXSkgeworICAgICAgICAgICAgdnNjYXR0ZXIxNltoYWxmX29mZnNldHNbaV0gLyAy XSA9IGhhbGZfdmFsdWVzX21hc2tlZFtpXTsKKyAgICAgICAgfQorICAgIH0KKworfQorCit2b2lk IGNoZWNrX3NjYXR0ZXJfMTZfbWFza2VkKCkKK3sKKyAgICBtZW1zZXQodnNjYXR0ZXIxNl9yZWYs IEZJTExfQ0hBUiwKKyAgICAgICAgICAgU0NBVFRFUl9CVUZGRVJfU0laRSAqIHNpemVvZih1bnNp Z25lZCBzaG9ydCkpOworICAgIHNjYWxhcl9zY2F0dGVyXzE2KHZzY2F0dGVyMTZfcmVmKTsKKyAg ICBzY2FsYXJfc2NhdHRlcl8xNl9hY2ModnNjYXR0ZXIxNl9yZWYpOworICAgIHNjYWxhcl9zY2F0 dGVyXzE2X21hc2tlZCh2c2NhdHRlcjE2X3JlZik7CisgICAgY2hlY2tfYnVmZmVyKF9fZnVuY19f LCB2dGNtLnZzY2F0dGVyMTYsIHZzY2F0dGVyMTZfcmVmLAorICAgICAgICAgICAgICAgICBTQ0FU VEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7Cit9CisKKy8qIHNjYXR0 ZXIgdGhlIDMyIGJpdCBlbGVtZW50cyB1c2luZyBDICovCit2b2lkIHNjYWxhcl9zY2F0dGVyXzMy KHVuc2lnbmVkIGludCAqdnNjYXR0ZXIzMikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1B VFJJWF9TSVpFOyArK2kpIHsKKyAgICAgICAgdnNjYXR0ZXIzMlt3b3JkX29mZnNldHNbaV0gLyA0 XSA9IHdvcmRfdmFsdWVzW2ldOworICAgIH0KK30KKwordm9pZCBjaGVja19zY2F0dGVyXzMyKCkK K3sKKyAgICBtZW1zZXQodnNjYXR0ZXIzMl9yZWYsIEZJTExfQ0hBUiwKKyAgICAgICAgICAgU0NB VFRFUl9CVUZGRVJfU0laRSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKyAgICBzY2FsYXJfc2Nh dHRlcl8zMih2c2NhdHRlcjMyX3JlZik7CisgICAgY2hlY2tfYnVmZmVyKF9fZnVuY19fLCB2dGNt LnZzY2F0dGVyMzIsIHZzY2F0dGVyMzJfcmVmLAorICAgICAgICAgICAgICAgICBTQ0FUVEVSX0JV RkZFUl9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOworfQorCisvKiBzY2F0dGVyIHRoZSAz MiBiaXQgZWxlbWVudHMgdXNpbmcgQyAqLwordm9pZCBzY2FsYXJfc2NhdHRlcl8zMl9hY2ModW5z aWduZWQgaW50ICp2c2NhdHRlcjMyKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFUUklY X1NJWkU7ICsraSkgeworICAgICAgICB2c2NhdHRlcjMyW3dvcmRfb2Zmc2V0c1tpXSAvIDRdICs9 IHdvcmRfdmFsdWVzX2FjY1tpXTsKKyAgICB9Cit9CisKK3ZvaWQgY2hlY2tfc2NhdHRlcl8zMl9h Y2MoKQoreworICAgIG1lbXNldCh2c2NhdHRlcjMyX3JlZiwgRklMTF9DSEFSLAorICAgICAgICAg ICBTQ0FUVEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOworICAgIHNjYWxh cl9zY2F0dGVyXzMyKHZzY2F0dGVyMzJfcmVmKTsKKyAgICBzY2FsYXJfc2NhdHRlcl8zMl9hY2Mo dnNjYXR0ZXIzMl9yZWYpOworICAgIGNoZWNrX2J1ZmZlcihfX2Z1bmNfXywgdnRjbS52c2NhdHRl cjMyLCB2c2NhdHRlcjMyX3JlZiwKKyAgICAgICAgICAgICAgICAgU0NBVFRFUl9CVUZGRVJfU0la RSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKK30KKworLyogc2NhdHRlciB0aGUgMzIgYml0IGVs ZW1lbnRzIHVzaW5nIEMgKi8KK3ZvaWQgc2NhbGFyX3NjYXR0ZXJfMzJfbWFza2VkKHVuc2lnbmVk IGludCAqdnNjYXR0ZXIzMikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BVFJJWF9TSVpF OyBpKyspIHsKKyAgICAgICAgaWYgKHdvcmRfcHJlZGljYXRlc1tpXSkgeworICAgICAgICAgICAg dnNjYXR0ZXIzMlt3b3JkX29mZnNldHNbaV0gLyA0XSA9IHdvcmRfdmFsdWVzX21hc2tlZFtpXTsK KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBjaGVja19zY2F0dGVyXzMyX21hc2tlZCgpCit7 CisgICAgbWVtc2V0KHZzY2F0dGVyMzJfcmVmLCBGSUxMX0NIQVIsCisgICAgICAgICAgIFNDQVRU RVJfQlVGRkVSX1NJWkUgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CisgICAgc2NhbGFyX3NjYXR0 ZXJfMzIodnNjYXR0ZXIzMl9yZWYpOworICAgIHNjYWxhcl9zY2F0dGVyXzMyX2FjYyh2c2NhdHRl cjMyX3JlZik7CisgICAgc2NhbGFyX3NjYXR0ZXJfMzJfbWFza2VkKHZzY2F0dGVyMzJfcmVmKTsK KyAgICBjaGVja19idWZmZXIoX19mdW5jX18sIHZ0Y20udnNjYXR0ZXIzMiwgdnNjYXR0ZXIzMl9y ZWYsCisgICAgICAgICAgICAgICAgICBTQ0FUVEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2ln bmVkIGludCkpOworfQorCisvKiBzY2F0dGVyIHRoZSAzMiBiaXQgZWxlbWVudHMgdXNpbmcgQyAq Lwordm9pZCBzY2FsYXJfc2NhdHRlcl8xNl8zMih1bnNpZ25lZCBzaG9ydCAqdnNjYXR0ZXIxNl8z MikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BVFJJWF9TSVpFOyArK2kpIHsKKyAgICAg ICAgdnNjYXR0ZXIxNl8zMlt3b3JkX29mZnNldHNbaV0gLyAyXSA9IGhhbGZfdmFsdWVzW2ldOwor ICAgIH0KK30KKwordm9pZCBjaGVja19zY2F0dGVyXzE2XzMyKCkKK3sKKyAgICBtZW1zZXQodnNj YXR0ZXIxNl8zMl9yZWYsIEZJTExfQ0hBUiwKKyAgICAgICAgICAgU0NBVFRFUl9CVUZGRVJfU0la RSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworICAgIHNjYWxhcl9zY2F0dGVyXzE2XzMyKHZz Y2F0dGVyMTZfMzJfcmVmKTsKKyAgICBjaGVja19idWZmZXIoX19mdW5jX18sIHZ0Y20udnNjYXR0 ZXIxNl8zMiwgdnNjYXR0ZXIxNl8zMl9yZWYsCisgICAgICAgICAgICAgICAgIFNDQVRURVJfQlVG RkVSX1NJWkUgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKK30KKworLyogc2NhdHRlciB0aGUg MzIgYml0IGVsZW1lbnRzIHVzaW5nIEMgKi8KK3ZvaWQgc2NhbGFyX3NjYXR0ZXJfMTZfMzJfYWNj KHVuc2lnbmVkIHNob3J0ICp2c2NhdHRlcjE2XzMyKQoreworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgTUFUUklYX1NJWkU7ICsraSkgeworICAgICAgICB2c2NhdHRlcjE2XzMyW3dvcmRfb2Zmc2V0 c1tpXSAvIDJdICs9IGhhbGZfdmFsdWVzX2FjY1tpXTsKKyAgICB9Cit9CisKK3ZvaWQgY2hlY2tf c2NhdHRlcl8xNl8zMl9hY2MoKQoreworICAgIG1lbXNldCh2c2NhdHRlcjE2XzMyX3JlZiwgRklM TF9DSEFSLAorICAgICAgICAgICBTQ0FUVEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2lnbmVk IHNob3J0KSk7CisgICAgc2NhbGFyX3NjYXR0ZXJfMTZfMzIodnNjYXR0ZXIxNl8zMl9yZWYpOwor ICAgIHNjYWxhcl9zY2F0dGVyXzE2XzMyX2FjYyh2c2NhdHRlcjE2XzMyX3JlZik7CisgICAgY2hl Y2tfYnVmZmVyKF9fZnVuY19fLCB2dGNtLnZzY2F0dGVyMTZfMzIsIHZzY2F0dGVyMTZfMzJfcmVm LAorICAgICAgICAgICAgICAgICBTQ0FUVEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2lnbmVk IHNob3J0KSk7Cit9CisKK3ZvaWQgc2NhbGFyX3NjYXR0ZXJfMTZfMzJfbWFza2VkKHVuc2lnbmVk IHNob3J0ICp2c2NhdHRlcjE2XzMyKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFUUklY X1NJWkU7IGkrKykgeworICAgICAgICBpZiAoaGFsZl9wcmVkaWNhdGVzW2ldKSB7CisgICAgICAg ICAgICB2c2NhdHRlcjE2XzMyW3dvcmRfb2Zmc2V0c1tpXSAvIDJdID0gaGFsZl92YWx1ZXNfbWFz a2VkW2ldOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIGNoZWNrX3NjYXR0ZXJfMTZfMzJf bWFza2VkKCkKK3sKKyAgICBtZW1zZXQodnNjYXR0ZXIxNl8zMl9yZWYsIEZJTExfQ0hBUiwKKyAg ICAgICAgICAgU0NBVFRFUl9CVUZGRVJfU0laRSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwor ICAgIHNjYWxhcl9zY2F0dGVyXzE2XzMyKHZzY2F0dGVyMTZfMzJfcmVmKTsKKyAgICBzY2FsYXJf c2NhdHRlcl8xNl8zMl9hY2ModnNjYXR0ZXIxNl8zMl9yZWYpOworICAgIHNjYWxhcl9zY2F0dGVy XzE2XzMyX21hc2tlZCh2c2NhdHRlcjE2XzMyX3JlZik7CisgICAgY2hlY2tfYnVmZmVyKF9fZnVu Y19fLCB2dGNtLnZzY2F0dGVyMTZfMzIsIHZzY2F0dGVyMTZfMzJfcmVmLAorICAgICAgICAgICAg ICAgICBTQ0FUVEVSX0JVRkZFUl9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7Cit9CisK Ky8qIGdhdGhlciB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc2NhdHRlciBidWZmZXIgdXNpbmcgQyAq Lwordm9pZCBzY2FsYXJfZ2F0aGVyXzE2KHVuc2lnbmVkIHNob3J0ICp2Z2F0aGVyMTYpCit7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVRSSVhfU0laRTsgKytpKSB7CisgICAgICAgIHZnYXRo ZXIxNltpXSA9IHZ0Y20udnNjYXR0ZXIxNltoYWxmX29mZnNldHNbaV0gLyAyXTsKKyAgICB9Cit9 CisKK3ZvaWQgY2hlY2tfZ2F0aGVyXzE2KCkKK3sKKyAgICAgIG1lbXNldCh2Z2F0aGVyMTZfcmVm LCAwLCBNQVRSSVhfU0laRSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworICAgICAgc2NhbGFy X2dhdGhlcl8xNih2Z2F0aGVyMTZfcmVmKTsKKyAgICAgIGNoZWNrX2J1ZmZlcihfX2Z1bmNfXywg dnRjbS52Z2F0aGVyMTYsIHZnYXRoZXIxNl9yZWYsCisgICAgICAgICAgICAgICAgICAgTUFUUklY X1NJWkUgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKK30KKwordm9pZCBzY2FsYXJfZ2F0aGVy XzE2X21hc2tlZCh1bnNpZ25lZCBzaG9ydCAqdmdhdGhlcjE2KQoreworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgTUFUUklYX1NJWkU7ICsraSkgeworICAgICAgICBpZiAoaGFsZl9wcmVkaWNhdGVz W2ldKSB7CisgICAgICAgICAgICB2Z2F0aGVyMTZbaV0gPSB2dGNtLnZzY2F0dGVyMTZbaGFsZl9v ZmZzZXRzW2ldIC8gMl07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgY2hlY2tfZ2F0aGVy XzE2X21hc2tlZCgpCit7CisgICAgbWVtc2V0KHZnYXRoZXIxNl9yZWYsIGdhdGhlcl8xNl9tYXNr ZWRfaW5pdCgpLAorICAgICAgICAgICBNQVRSSVhfU0laRSAqIHNpemVvZih1bnNpZ25lZCBzaG9y dCkpOworICAgIHNjYWxhcl9nYXRoZXJfMTZfbWFza2VkKHZnYXRoZXIxNl9yZWYpOworICAgIGNo ZWNrX2J1ZmZlcihfX2Z1bmNfXywgdnRjbS52Z2F0aGVyMTYsIHZnYXRoZXIxNl9yZWYsCisgICAg ICAgICAgICAgICAgIE1BVFJJWF9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7Cit9CisK Ky8qIGdhdGhlciB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc2NhdHRlciBidWZmZXIgdXNpbmcgQyAq Lwordm9pZCBzY2FsYXJfZ2F0aGVyXzMyKHVuc2lnbmVkIGludCAqdmdhdGhlcjMyKQoreworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgTUFUUklYX1NJWkU7ICsraSkgeworICAgICAgICB2Z2F0aGVy MzJbaV0gPSB2dGNtLnZzY2F0dGVyMzJbd29yZF9vZmZzZXRzW2ldIC8gNF07CisgICAgfQorfQor Cit2b2lkIGNoZWNrX2dhdGhlcl8zMih2b2lkKQoreworICAgIG1lbXNldCh2Z2F0aGVyMzJfcmVm LCAwLCBNQVRSSVhfU0laRSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKyAgICBzY2FsYXJfZ2F0 aGVyXzMyKHZnYXRoZXIzMl9yZWYpOworICAgIGNoZWNrX2J1ZmZlcihfX2Z1bmNfXywgdnRjbS52 Z2F0aGVyMzIsIHZnYXRoZXIzMl9yZWYsCisgICAgICAgICAgICAgICAgIE1BVFJJWF9TSVpFICog c2l6ZW9mKHVuc2lnbmVkIGludCkpOworfQorCit2b2lkIHNjYWxhcl9nYXRoZXJfMzJfbWFza2Vk KHVuc2lnbmVkIGludCAqdmdhdGhlcjMyKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFU UklYX1NJWkU7ICsraSkgeworICAgICAgICBpZiAod29yZF9wcmVkaWNhdGVzW2ldKSB7CisgICAg ICAgICAgICB2Z2F0aGVyMzJbaV0gPSB2dGNtLnZzY2F0dGVyMzJbd29yZF9vZmZzZXRzW2ldIC8g NF07CisgICAgICAgIH0KKyAgICB9Cit9CisKKwordm9pZCBjaGVja19nYXRoZXJfMzJfbWFza2Vk KHZvaWQpCit7CisgICAgbWVtc2V0KHZnYXRoZXIzMl9yZWYsIGdhdGhlcl8zMl9tYXNrZWRfaW5p dCgpLAorICAgICAgICAgICBNQVRSSVhfU0laRSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKyAg ICBzY2FsYXJfZ2F0aGVyXzMyX21hc2tlZCh2Z2F0aGVyMzJfcmVmKTsKKyAgICBjaGVja19idWZm ZXIoX19mdW5jX18sIHZ0Y20udmdhdGhlcjMyLAorICAgICAgICAgICAgICAgICB2Z2F0aGVyMzJf cmVmLCBNQVRSSVhfU0laRSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKK30KKworLyogZ2F0aGVy IHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzY2F0dGVyIGJ1ZmZlciB1c2luZyBDICovCit2b2lkIHNj YWxhcl9nYXRoZXJfMTZfMzIodW5zaWduZWQgc2hvcnQgKnZnYXRoZXIxNl8zMikKK3sKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IE1BVFJJWF9TSVpFOyArK2kpIHsKKyAgICAgICAgdmdhdGhlcjE2 XzMyW2ldID0gdnRjbS52c2NhdHRlcjE2XzMyW3dvcmRfb2Zmc2V0c1tpXSAvIDJdOworICAgIH0K K30KKwordm9pZCBjaGVja19nYXRoZXJfMTZfMzIodm9pZCkKK3sKKyAgICBtZW1zZXQodmdhdGhl cjE2XzMyX3JlZiwgMCwgTUFUUklYX1NJWkUgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKKyAg ICBzY2FsYXJfZ2F0aGVyXzE2XzMyKHZnYXRoZXIxNl8zMl9yZWYpOworICAgIGNoZWNrX2J1ZmZl cihfX2Z1bmNfXywgdnRjbS52Z2F0aGVyMTZfMzIsIHZnYXRoZXIxNl8zMl9yZWYsCisgICAgICAg ICAgICAgICAgIE1BVFJJWF9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7Cit9CisKK3Zv aWQgc2NhbGFyX2dhdGhlcl8xNl8zMl9tYXNrZWQodW5zaWduZWQgc2hvcnQgKnZnYXRoZXIxNl8z MikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BVFJJWF9TSVpFOyArK2kpIHsKKyAgICAg ICAgaWYgKGhhbGZfcHJlZGljYXRlc1tpXSkgeworICAgICAgICAgICAgdmdhdGhlcjE2XzMyW2ld ID0gdnRjbS52c2NhdHRlcjE2XzMyW3dvcmRfb2Zmc2V0c1tpXSAvIDJdOworICAgICAgICB9Cisg ICAgfQorCit9CisKK3ZvaWQgY2hlY2tfZ2F0aGVyXzE2XzMyX21hc2tlZCh2b2lkKQoreworICAg IG1lbXNldCh2Z2F0aGVyMTZfMzJfcmVmLCBnYXRoZXJfMTZfbWFza2VkX2luaXQoKSwKKyAgICAg ICAgICAgTUFUUklYX1NJWkUgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKKyAgICBzY2FsYXJf Z2F0aGVyXzE2XzMyX21hc2tlZCh2Z2F0aGVyMTZfMzJfcmVmKTsKKyAgICBjaGVja19idWZmZXIo X19mdW5jX18sIHZ0Y20udmdhdGhlcjE2XzMyLCB2Z2F0aGVyMTZfMzJfcmVmLAorICAgICAgICAg ICAgICAgICBNQVRSSVhfU0laRSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworfQorCisvKiBw cmludCBzY2F0dGVyMTYgYnVmZmVyICovCit2b2lkIHByaW50X3NjYXR0ZXIxNl9idWZmZXIodm9p ZCkKK3sKKyAgICBpZiAoUFJJTlRfREFUQSkgeworICAgICAgICBwcmludGYoIlxuXG5QcmludGlu ZyB0aGUgMTYgYml0IHNjYXR0ZXIgYnVmZmVyIik7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBTQ0FUVEVSX0JVRkZFUl9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgoaSAlIE1B VFJJWF9TSVpFKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAyOyBqKyspIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoIiVjIiwgKGNoYXIpKCh2dGNtLnZzY2F0dGVyMTZbaV0gPj4gaiAq IDgpICYgMHhmZikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCIgIik7Cisg ICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KK30KKworLyogcHJpbnQgdGhl IGdhdGhlciAxNiBidWZmZXIgKi8KK3ZvaWQgcHJpbnRfZ2F0aGVyX3Jlc3VsdF8xNih2b2lkKQor eworICAgIGlmIChQUklOVF9EQVRBKSB7CisgICAgICAgIHByaW50ZigiXG5cblByaW50aW5nIHRo ZSAxNiBiaXQgZ2F0aGVyIHJlc3VsdFxuIik7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBNQVRSSVhfU0laRTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7 IGorKykgeworICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLCAoY2hhcikoKHZ0Y20udmdhdGhl cjE2W2ldID4+IGogKiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBy aW50ZigiICIpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9Cit9CisK Ky8qIHByaW50IHRoZSBzY2F0dGVyMzIgYnVmZmVyICovCit2b2lkIHByaW50X3NjYXR0ZXIzMl9i dWZmZXIodm9pZCkKK3sKKyAgICBpZiAoUFJJTlRfREFUQSkgeworICAgICAgICBwcmludGYoIlxu XG5QcmludGluZyB0aGUgMzIgYml0IHNjYXR0ZXIgYnVmZmVyIik7CisKKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBTQ0FUVEVSX0JVRkZFUl9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGlm ICgoaSAlIE1BVFJJWF9TSVpFKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKysp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwgKGNoYXIpKCh2dGNtLnZzY2F0dGVyMzJb aV0gPj4gaiAqIDgpICYgMHhmZikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRm KCIgIik7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KK30KKworLyog cHJpbnQgdGhlIGdhdGhlciAzMiBidWZmZXIgKi8KK3ZvaWQgcHJpbnRfZ2F0aGVyX3Jlc3VsdF8z Mih2b2lkKQoreworICAgIGlmIChQUklOVF9EQVRBKSB7CisgICAgICAgIHByaW50ZigiXG5cblBy aW50aW5nIHRoZSAzMiBiaXQgZ2F0aGVyIHJlc3VsdFxuIik7CisKKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBNQVRSSVhfU0laRTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0g MDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLCAoY2hhcikoKHZ0 Y20udmdhdGhlcjMyW2ldID4+IGogKiA4KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHByaW50ZigiICIpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAg ICB9Cit9CisKKy8qIHByaW50IHRoZSBzY2F0dGVyMTZfMzIgYnVmZmVyICovCit2b2lkIHByaW50 X3NjYXR0ZXIxNl8zMl9idWZmZXIodm9pZCkKK3sKKyAgICBpZiAoUFJJTlRfREFUQSkgeworICAg ICAgICBwcmludGYoIlxuXG5QcmludGluZyB0aGUgMTZfMzIgYml0IHNjYXR0ZXIgYnVmZmVyIik7 CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQ0FUVEVSX0JVRkZFUl9TSVpFOyBpKysp IHsKKyAgICAgICAgICAgIGlmICgoaSAlIE1BVFJJWF9TSVpFKSA9PSAwKSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQg aiA9IDA7IGogPCAyOyBqKyspIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwKKyAgICAg ICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcikoKHZ0Y20udnNjYXR0ZXIxNl8zMltpXSA+ PiBqICogOCkgJiAweGZmKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoIiAi KTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorfQorCisvKiBwcmlu dCB0aGUgZ2F0aGVyIDE2XzMyIGJ1ZmZlciAqLwordm9pZCBwcmludF9nYXRoZXJfcmVzdWx0XzE2 XzMyKHZvaWQpCit7CisgICAgaWYgKFBSSU5UX0RBVEEpIHsKKyAgICAgICAgcHJpbnRmKCJcblxu UHJpbnRpbmcgdGhlIDE2XzMyIGJpdCBnYXRoZXIgcmVzdWx0XG4iKTsKKworICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IE1BVFJJWF9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50 IGogPSAwOyBqIDwgMjsgaisrKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsCisgICAg ICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSgodnRjbS52Z2F0aGVyMTZfMzJbaV0g Pj4gaiAqIDgpICYgMHhmZikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCIg Iik7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KK30KKworaW50IG1h aW4oKQoreworICAgIHByZWZpbGxfdnRjbV9zY3JhdGNoKCk7CisKKyAgICAvKiAxNiBiaXQgZWxl bWVudHMgd2l0aCAxNiBiaXQgb2Zmc2V0cyAqLworICAgIGNyZWF0ZV9vZmZzZXRzX3ZhbHVlc19w cmVkc18xNigpOworCisgICAgdmVjdG9yX3NjYXR0ZXJfMTYoKTsKKyAgICBwcmludF9zY2F0dGVy MTZfYnVmZmVyKCk7CisgICAgY2hlY2tfc2NhdHRlcl8xNigpOworCisgICAgdmVjdG9yX2dhdGhl cl8xNigpOworICAgIHByaW50X2dhdGhlcl9yZXN1bHRfMTYoKTsKKyAgICBjaGVja19nYXRoZXJf MTYoKTsKKworICAgIHZlY3Rvcl9nYXRoZXJfMTZfbWFza2VkKCk7CisgICAgcHJpbnRfZ2F0aGVy X3Jlc3VsdF8xNigpOworICAgIGNoZWNrX2dhdGhlcl8xNl9tYXNrZWQoKTsKKworICAgIHZlY3Rv cl9zY2F0dGVyXzE2X2FjYygpOworICAgIHByaW50X3NjYXR0ZXIxNl9idWZmZXIoKTsKKyAgICBj aGVja19zY2F0dGVyXzE2X2FjYygpOworCisgICAgdmVjdG9yX3NjYXR0ZXJfMTZfbWFza2VkKCk7 CisgICAgcHJpbnRfc2NhdHRlcjE2X2J1ZmZlcigpOworICAgIGNoZWNrX3NjYXR0ZXJfMTZfbWFz a2VkKCk7CisKKyAgICAvKiAzMiBiaXQgZWxlbWVudHMgd2l0aCAzMiBiaXQgb2Zmc2V0cyAqLwor ICAgIGNyZWF0ZV9vZmZzZXRzX3ZhbHVlc19wcmVkc18zMigpOworCisgICAgdmVjdG9yX3NjYXR0 ZXJfMzIoKTsKKyAgICBwcmludF9zY2F0dGVyMzJfYnVmZmVyKCk7CisgICAgY2hlY2tfc2NhdHRl cl8zMigpOworCisgICAgdmVjdG9yX2dhdGhlcl8zMigpOworICAgIHByaW50X2dhdGhlcl9yZXN1 bHRfMzIoKTsKKyAgICBjaGVja19nYXRoZXJfMzIoKTsKKworICAgIHZlY3Rvcl9nYXRoZXJfMzJf bWFza2VkKCk7CisgICAgcHJpbnRfZ2F0aGVyX3Jlc3VsdF8zMigpOworICAgIGNoZWNrX2dhdGhl cl8zMl9tYXNrZWQoKTsKKworICAgIHZlY3Rvcl9zY2F0dGVyXzMyX2FjYygpOworICAgIHByaW50 X3NjYXR0ZXIzMl9idWZmZXIoKTsKKyAgICBjaGVja19zY2F0dGVyXzMyX2FjYygpOworCisgICAg dmVjdG9yX3NjYXR0ZXJfMzJfbWFza2VkKCk7CisgICAgcHJpbnRfc2NhdHRlcjMyX2J1ZmZlcigp OworICAgIGNoZWNrX3NjYXR0ZXJfMzJfbWFza2VkKCk7CisKKyAgICAvKiAxNiBiaXQgZWxlbWVu dHMgd2l0aCAzMiBiaXQgb2Zmc2V0cyAqLworICAgIGNyZWF0ZV9vZmZzZXRzX3ZhbHVlc19wcmVk c18xNl8zMigpOworCisgICAgdmVjdG9yX3NjYXR0ZXJfMTZfMzIoKTsKKyAgICBwcmludF9zY2F0 dGVyMTZfMzJfYnVmZmVyKCk7CisgICAgY2hlY2tfc2NhdHRlcl8xNl8zMigpOworCisgICAgdmVj dG9yX2dhdGhlcl8xNl8zMigpOworICAgIHByaW50X2dhdGhlcl9yZXN1bHRfMTZfMzIoKTsKKyAg ICBjaGVja19nYXRoZXJfMTZfMzIoKTsKKworICAgIHZlY3Rvcl9nYXRoZXJfMTZfMzJfbWFza2Vk KCk7CisgICAgcHJpbnRfZ2F0aGVyX3Jlc3VsdF8xNl8zMigpOworICAgIGNoZWNrX2dhdGhlcl8x Nl8zMl9tYXNrZWQoKTsKKworICAgIHZlY3Rvcl9zY2F0dGVyXzE2XzMyX2FjYygpOworICAgIHBy aW50X3NjYXR0ZXIxNl8zMl9idWZmZXIoKTsKKyAgICBjaGVja19zY2F0dGVyXzE2XzMyX2FjYygp OworCisgICAgdmVjdG9yX3NjYXR0ZXJfMTZfMzJfbWFza2VkKCk7CisgICAgcHJpbnRfc2NhdHRl cjE2XzMyX2J1ZmZlcigpOworICAgIGNoZWNrX3NjYXR0ZXJfMTZfMzJfbWFza2VkKCk7CisKKyAg ICBwdXRzKGVyciA/ICJGQUlMIiA6ICJQQVNTIik7CisgICAgcmV0dXJuIGVycjsKK30KZGlmZiAt LWdpdCBhL3Rlc3RzL3RjZy9oZXhhZ29uL01ha2VmaWxlLnRhcmdldCBiL3Rlc3RzL3RjZy9oZXhh Z29uL01ha2VmaWxlLnRhcmdldAppbmRleCA3NzA4ZTc2Li5mYTFmYTU3IDEwMDY0NAotLS0gYS90 ZXN0cy90Y2cvaGV4YWdvbi9NYWtlZmlsZS50YXJnZXQKKysrIGIvdGVzdHMvdGNnL2hleGFnb24v TWFrZWZpbGUudGFyZ2V0CkBAIC0zOCwxMSArMzgsMTMgQEAgSEVYX1RFU1RTICs9IGJyZXYKIEhF WF9URVNUUyArPSBsb2FkX3VucGFjawogSEVYX1RFU1RTICs9IGxvYWRfYWxpZ24KIEhFWF9URVNU UyArPSB2ZWN0b3JfYWRkX2ludAorSEVYX1RFU1RTICs9IHNjYXR0ZXJfZ2F0aGVyCiBIRVhfVEVT VFMgKz0gYXRvbWljcwogSEVYX1RFU1RTICs9IGZwc3R1ZmYKIEhFWF9URVNUUyArPSBodnhfbWlz YwogCiBURVNUUyArPSAkKEhFWF9URVNUUykKIAorc2NhdHRlcl9nYXRoZXI6IENGTEFHUyArPSAt bWh2eAogdmVjdG9yX2FkZF9pbnQ6IENGTEFHUyArPSAtbWh2eCAtZnZlY3Rvcml6ZQogaHZ4X21p c2M6IENGTEFHUyArPSAtbWh2eAotLSAKMi43LjQKCg==