From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.77.122; helo=nam02-sn1-obe.outbound.protection.outlook.com; envelope-from=mike.li@bayhubtech.com; receiver=edk2-devel@lists.01.org Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-eopbgr770122.outbound.protection.outlook.com [40.107.77.122]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B31A5211B158C for ; Wed, 23 Jan 2019 02:39:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=towerbridgetechnology.onmicrosoft.com; s=selector1-bayhubtech-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ccbLfyaToDekLGUBRMYRIH0X6/2wYERFve1IjIJiS1k=; b=i1g446cGaIWlWZG0gG4awoU0XW/uamWpgv/Mf0JZVhud9/UnFzC5QO5GOTGQ3NcwIjIVVJ56uZ2M8WDQ/2CmTitB4El1q/PXvuMMeVqGTnSm9QUrCmjE5SWhmxpy64pcHmiX4D6TrRzGS6GhvHL4GYh6fu5nKO11fmYEENa7rHc= Received: from MWHPR16MB1679.namprd16.prod.outlook.com (10.172.59.149) by MWHPR16MB1663.namprd16.prod.outlook.com (10.172.59.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.29; Wed, 23 Jan 2019 10:39:17 +0000 Received: from MWHPR16MB1679.namprd16.prod.outlook.com ([fe80::151:66e0:7431:2f5d]) by MWHPR16MB1679.namprd16.prod.outlook.com ([fe80::151:66e0:7431:2f5d%10]) with mapi id 15.20.1558.016; Wed, 23 Jan 2019 10:39:17 +0000 From: "Mike Li (WH)" To: "Mike Li (WH)" , "Xiaoguang Yu (WH)" , "Ernest Zhang(WH)" , "Andy Dai (WH)" CC: "Shirley Her (SC)" , "edk2-devel@lists.01.org" Thread-Topic: [edk2] [patch_2] make EDK Driver Support BH720+EMMC chip Thread-Index: AdSy/gGCBZ1Vimj1Q1KozDK4Cs6GQwACZJeg Date: Wed, 23 Jan 2019 10:39:16 +0000 Message-ID: Accept-Language: en-AU, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=mike.li@bayhubtech.com; x-originating-ip: [218.106.122.62] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; MWHPR16MB1663; 6:JeDb0CnQk8MNnz1cEJAtso/IzZQSQHlJgXj442rpOlVoFCw4lTFrIHOS0pEj0Q4/KXSxFwN+VaDT5Hkja9se2/inTYxKQds/cuBWe0RAyQne4PkqBUUF8qwzADACbZIyGahgTNQ+spQu1HavnVI1Sg4RxMcslucuNV9j31kWIKLcGX7z1Kx6Da+dZ7vzRtmLtHSHD/2fSrnDZUYBffUHnFnQ9LxDs9li64gF/Yxvj7gS2Rydkgv3Sz4jmEw+mqw1tPuR9eJPScQrzVfm2l5NTx5mGEQLfTRgDGIR4kAwtIsZCku0ndNqHHbsf1lWEibsNTJMqxKJoQIQc5pndyRlJcCy9EMnJG5y0/z7b4EYIXfKVWgpGji/tMk+n9DsgfdEM7CH0UPmWcdWYmxOWiDNkx8e+Q5LlPtsIvNi67SAdtGjzIsNLbrShCPymNBEFGdNdbU2aBnEtFnWw8LH5Qhuxw==; 5:6UlpsuTuzK5DOQKc9xDnpI/7EpOvebhwabdKyTlcDnFbbzCVJ4DUvk01uX8jlA6T+ArJNonEhIWDAdS39p/1Nn5CHWX4RLGLmhKb+3trPoY+V47DxsP+XyeBxEsELkdaxPzn9Jn9gInzqHxJGtZxBL2B2AXHtbb+FC1JANfB69XxWP1a+NpT1lQca84sKB8vJ8GN0p7AnVfdyFZCImi21g==; 7:hDRjFcebCZgeV8a+riLC9goVRNwroYoQz2bmoAr9UXKjOvrdK+2Eo4IYDWdd/WjWlfdrFAlIenaenGqe/SRQ8O7stfbve2MXnvKSnqTxe6ci3eUhsViSnWupZukWxP5mxaIxqj9KkwRbIWIuwoDv9g== x-ms-office365-filtering-correlation-id: 6e68482d-b267-4053-1699-08d6811f0688 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600110)(711020)(4605077)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:MWHPR16MB1663; x-ms-traffictypediagnostic: MWHPR16MB1663: x-microsoft-antispam-prvs: x-forefront-prvs: 0926B0E013 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(346002)(39840400004)(396003)(366004)(376002)(136003)(189003)(199004)(476003)(186003)(2906002)(106356001)(105586002)(14454004)(790700001)(25786009)(3846002)(6116002)(4326008)(486006)(33656002)(229853002)(54896002)(6306002)(316002)(8676002)(53936002)(68736007)(110136005)(54906003)(9686003)(7696005)(55016002)(53946003)(102836004)(6246003)(6436002)(6506007)(53546011)(97736004)(26005)(99286004)(81156014)(478600001)(8936002)(81166006)(7736002)(66066001)(30864003)(14444005)(74316002)(86362001)(6636002)(19627235002)(256004)(71190400001)(71200400001)(579004)(569006); DIR:OUT; SFP:1102; SCL:1; SRVR:MWHPR16MB1663; H:MWHPR16MB1679.namprd16.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:3; A:1; received-spf: None (protection.outlook.com: bayhubtech.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 5RLcr0wn4LNmyOhQFgc9halndE89y5Ve8OjRwWR5df7mFvwgZ7Y3OOhjmrsvvQYbVlk2d6xB3GESxGeXLmGi4Qx1up4maYOjxmtfnP8fsBIV3p7z2t/JHSt6SfYnfF0BDl4lLTphc1K9GJp28ertUGfdvv4rl18Sc6n6eBv63BQM0Jg6ZYImVvmIflJAQiZHhmMhTI4FHhi1rQ9E/xfWnj49ZePIzOVCXJsAeHF+rjmIhMA1SILi1fOrCNBC48PP5yGbknb74BBL2I8XG+BOLF8drmsiQ2HBvILawMfuHOgTpTtwJC6JPQQjrH+i1UYoiIPJFQxl2xcYzIbXZ7vFpaMNfCq+AAQPpdGRlpjuirE2MedILp4JCebX+ony2deYbeus5Y2D2M2TcUmYVE/T0quVGaX4VkWrUEvfWAatsrs= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: bayhubtech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e68482d-b267-4053-1699-08d6811f0688 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jan 2019 10:39:17.1273 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0a7aae2b-8f2e-44df-ba2f-42de7f93c642 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR16MB1663 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [patch_2] make EDK Driver Support BH720+EMMC chip X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 X-List-Received-Date: Wed, 23 Jan 2019 10:39:23 -0000 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGksIGFsbA0KDQpUaGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gZW5hYmxl IEVESyBEcml2ZXIgU3VwcG9ydCBCSDcyMCBDSElQLg0KDQotLS0gL2MveXgvZWRrMi9NZGVNb2R1 bGVQa2cvQnVzL1BjaS9TZE1tY1BjaUhjRHhlL0VtbWNEZXZpY2UuYyAgICAgICAgICAgIDIwMTkt MDEtMjEgMTU6MzY6MTIuMTg2NzM5NjAwIC0wODAwDQorKysgL2MvTXlXb3Jrc3BhY2UvZWRrMi12 VURLMjAxOC9NZGVNb2R1bGVQa2cvQnVzL1BjaS9TZE1tY1BjaUhjRHhlL0VtbWNEZXZpY2UuYyAg ICAgICAgICAgMjAxOS0wMS0xMCAxNDozNDoyMy4wNzI1Mzg5MDAgLTA4MDANCkBAIC0xLDcgKzEs NiBAQA0KLyoqIEBmaWxlDQogICBUaGlzIGZpbGUgcHJvdmlkZXMgc29tZSBoZWxwZXIgZnVuY3Rp b25zIHdoaWNoIGFyZSBzcGVjaWZpYyBmb3IgRU1NQyBkZXZpY2UuDQotICBDb3B5cmlnaHQgKGMp IDIwMTgsIE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgIENvcHly aWdodCAoYykgMjAxNSAtIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN CiAgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KQEAgLTUyNywxNyArNTI2LDM1IEBAIEVtbWNU dW5pbmdDbGtGb3JIczIwMCAoDQogICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgIHJl dHVybiBTdGF0dXM7DQogICB9DQorDQorICBpZihCaHRIb3N0UGNpU3VwcG9ydChQY2lJbykpew0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2V0IGRhdGEgdHJhbnNmZXIgd2l0aCA0 Yml0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RNbWNIY1NldEJ1 c1dpZHRoIChQY2lJbywgU2xvdCwgNCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly9lbmFibGUgaGFyZHdhcmUgdHVuaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SG9zdEN0cmwyID0gKH4weDEwKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXMgPSBTZE1tY0hjQW5kTW1pbyAoUGNpSW8sIFNsb3QsIDB4MTEwLHNpemVvZiAoSG9zdEN0cmwy KSwgJkhvc3RDdHJsMik7DQorDQorICAgICAgICAgICAgICAgIFN0YXR1cyA9IEVtbWNTZW5kVHVu aW5nQmxrIChQYXNzVGhydSwgU2xvdCwgNCk7DQorICAgICAgICAgICAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiRW1tY1R1bmluZ0Nsa0ZvckhzMjAwOiBTZW5kIHR1bmluZyBibG9jayBmYWls cyB3aXRoICVyXG4iLCBTdGF0dXMpKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gU3RhdHVzOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICB9DQogICAvLw0KICAgLy8g QXNrIHRoZSBkZXZpY2UgdG8gc2VuZCBhIHNlcXVlbmNlIG9mIHR1bmluZyBibG9ja3MgdGlsbCB0 aGUgdHVuaW5nIHByb2NlZHVyZSBpcyBkb25lLg0KICAgLy8NCiAgIFJldHJ5ID0gMDsNCiAgIGRv IHsNCi0gICAgU3RhdHVzID0gRW1tY1NlbmRUdW5pbmdCbGsgKFBhc3NUaHJ1LCBTbG90LCBCdXNX aWR0aCk7DQotICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiRW1tY1R1bmluZ0Nsa0ZvckhzMjAwOiBTZW5kIHR1bmluZyBibG9jayBmYWls cyB3aXRoICVyXG4iLCBTdGF0dXMpKTsNCi0gICAgICByZXR1cm4gU3RhdHVzOw0KLSAgICB9DQot DQorICAgICAgICAgICAgICBpZighQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8pKXsNCisgICAgICAg ICAgICAgICAgICBTdGF0dXMgPSBFbW1jU2VuZFR1bmluZ0JsayAoUGFzc1RocnUsIFNsb3QsIEJ1 c1dpZHRoKTsNCisgICAgICAgICAgICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQor ICAgICAgICAgICAgICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRW1tY1R1bmluZ0Nsa0Zv ckhzMjAwOiBTZW5kIHR1bmluZyBibG9jayBmYWlscyB3aXRoICVyXG4iLCBTdGF0dXMpKTsNCisg ICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXM7DQorICAgICAgICAgICAgICAgICAgfQ0K KyAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn QlMtPlN0YWxsKDUwMDApOw0KKyAgICAgICAgICAgICAgfQ0KICAgICBTdGF0dXMgPSBTZE1tY0hj UndNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIsIFRSVUUsIHNpemVvZiAo SG9zdEN0cmwyKSwgJkhvc3RDdHJsMik7DQogICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CiAgICAgICByZXR1cm4gU3RhdHVzOw0KQEAgLTU0OCw2ICs1NjUsMTAgQEAgRW1tY1R1bmluZ0Ns a0ZvckhzMjAwICgNCiAgICAgfQ0KICAgICBpZiAoKEhvc3RDdHJsMiAmIChCSVQ2IHwgQklUNykp ID09IEJJVDcpIHsNCisgICAgICAgICAgICAgICAgaWYoQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8p KXsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NldCBkYXRhIHRyYW5zZmVyIHdp dGggZGVmYXVsdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IFNkTW1j SGNTZXRCdXNXaWR0aCAoUGNpSW8sIFNsb3QsIEJ1c1dpZHRoKTsNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQogICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgICB9DQogICB9 IHdoaWxlICgrK1JldHJ5IDwgNDApOw0KQEAgLTY1Miw3ICs2NzMsNiBAQCBFbW1jU3dpdGNoQnVz V2lkdGggKA0KICAgQHBhcmFtW2luXSBTbG90ICAgICAgICAgICBUaGUgc2xvdCBudW1iZXIgb2Yg dGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4NCiAgIEBwYXJhbVtpbl0gUmNhICAg ICAgICAgICAgVGhlIHJlbGF0aXZlIGRldmljZSBhZGRyZXNzIHRvIGJlIGFzc2lnbmVkLg0KICAg QHBhcmFtW2luXSBIc1RpbWluZyAgICAgICBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBIU19U SU1JTkcgZmllbGQgb2YgRVhUX0NTRCByZWdpc3Rlci4NCi0gIEBwYXJhbVtpbl0gVGltaW5nICAg ICAgICAgVGhlIGJ1cyBtb2RlIHRpbWluZyBpbmRpY2F0b3IuDQogICBAcGFyYW1baW5dIENsb2Nr RnJlcSAgICAgIFRoZSBtYXggY2xvY2sgZnJlcXVlbmN5IHRvIGJlIHNldCwgdGhlIHVuaXQgaXMg TUh6Lg0KICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUg Y29ycmVjdGx5Lg0KQEAgLTY2Niw3ICs2ODYsNiBAQCBFbW1jU3dpdGNoQ2xvY2tGcmVxICgNCiAg IElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCwNCiAgIElOIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmNhLA0KICAgSU4gVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBIc1RpbWluZywNCi0gIElOIFNEX01NQ19CVVNfTU9ERSAgICAg ICAgICAgICAgICAgICAgVGltaW5nLA0KICAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDbG9ja0ZyZXENCiAgICkNCnsNCkBAIC03MDgsMjggKzcyNyw3IEBAIEVtbWNTd2l0 Y2hDbG9ja0ZyZXEgKA0KICAgLy8NCiAgIC8vIENvbnZlcnQgdGhlIGNsb2NrIGZyZXEgdW5pdCBm cm9tIE1IeiB0byBLSHouDQogICAvLw0KLSAgU3RhdHVzID0gU2RNbWNIY0Nsb2NrU3VwcGx5IChQ Y2lJbywgU2xvdCwgQ2xvY2tGcmVxICogMTAwMCwgUHJpdmF0ZS0+QmFzZUNsa0ZyZXFbU2xvdF0s IFByaXZhdGUtPkNvbnRyb2xsZXJWZXJzaW9uW1Nsb3RdKTsNCi0gIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCi0gICAgcmV0dXJuIFN0YXR1czsNCi0gIH0NCi0NCi0gIGlmIChtT3ZlcnJpZGUg IT0gTlVMTCAmJiBtT3ZlcnJpZGUtPk5vdGlmeVBoYXNlICE9IE5VTEwpIHsNCi0gICAgU3RhdHVz ID0gbU92ZXJyaWRlLT5Ob3RpZnlQaGFzZSAoDQotICAgICAgICAgICAgICAgICAgICAgICAgICBQ cml2YXRlLT5Db250cm9sbGVySGFuZGxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgU2xv dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEVka2lpU2RNbWNTd2l0Y2hDbG9ja0ZyZXFQ b3N0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlRpbWluZw0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsNCi0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAgIERF QlVHICgoDQotICAgICAgICBERUJVR19FUlJPUiwNCi0gICAgICAgICIlYTogU0QvTU1DIHN3aXRj aCBjbG9jayBmcmVxIHBvc3Qgbm90aWZpZXIgY2FsbGJhY2sgZmFpbGVkIC0gJXJcbiIsDQotICAg ICAgICBfX0ZVTkNUSU9OX18sDQotICAgICAgICBTdGF0dXMNCi0gICAgICAgICkpOw0KLSAgICAg IHJldHVybiBTdGF0dXM7DQotICAgIH0NCi0gIH0NCisgIFN0YXR1cyA9IFNkTW1jSGNDbG9ja1N1 cHBseSAoUGNpSW8sIFNsb3QsIENsb2NrRnJlcSAqIDEwMDAsIFByaXZhdGUtPkNhcGFiaWxpdHlb U2xvdF0pOw0KICAgcmV0dXJuIFN0YXR1czsNCn0NCkBAIC03NjQsMTMgKzc2MiwxMCBAQCBFbW1j U3dpdGNoVG9IaWdoU3BlZWQgKA0KICAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCdXNXaWR0aA0KICAgKQ0Kew0KLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVz Ow0KLSAgVUlOVDggICAgICAgICAgICAgICAgICAgSHNUaW1pbmc7DQotICBVSU5UOCAgICAgICAg ICAgICAgICAgICBIb3N0Q3RybDE7DQotICBTRF9NTUNfQlVTX01PREUgICAgICAgICBUaW1pbmc7 DQotICBTRF9NTUNfSENfUFJJVkFURV9EQVRBICAqUHJpdmF0ZTsNCi0NCi0gIFByaXZhdGUgPSBT RF9NTUNfSENfUFJJVkFURV9GUk9NX1RISVMgKFBhc3NUaHJ1KTsNCisgIEVGSV9TVEFUVVMgICAg ICAgICAgU3RhdHVzOw0KKyAgVUlOVDggICAgICAgICAgICAgICBIc1RpbWluZzsNCisgIFVJTlQ4 ICAgICAgICAgICAgICAgSG9zdEN0cmwxOw0KKyAgVUlOVDggICAgICAgICAgICAgICBIb3N0Q3Ry bDI7DQogICBTdGF0dXMgPSBFbW1jU3dpdGNoQnVzV2lkdGggKFBjaUlvLCBQYXNzVGhydSwgU2xv dCwgUmNhLCBJc0RkciwgQnVzV2lkdGgpOw0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K QEAgLTc4NSwyMSArNzgwLDMxIEBAIEVtbWNTd2l0Y2hUb0hpZ2hTcGVlZCAoDQogICAgIHJldHVy biBTdGF0dXM7DQogICB9DQorICAvLw0KKyAgLy8gQ2xlYW4gVUhTIE1vZGUgU2VsZWN0IGZpZWxk IG9mIEhvc3QgQ29udHJvbCAyIHJlaWdzdGVyIGJlZm9yZSB1cGRhdGUNCisgIC8vDQorICBIb3N0 Q3RybDIgPSAoVUlOVDgpfjB4NzsNCisgIFN0YXR1cyA9IFNkTW1jSGNBbmRNbWlvIChQY2lJbywg U2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIsIHNpemVvZiAoSG9zdEN0cmwyKSwgJkhvc3RDdHJs Mik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQor ICB9DQorICAvLw0KKyAgLy8gU2V0IFVIUyBNb2RlIFNlbGVjdCBmaWVsZCBvZiBIb3N0IENvbnRy b2wgMiByZWlnc3RlciB0byBTRFIxMi8yNS81MA0KKyAgLy8NCiAgIGlmIChJc0Rkcikgew0KLSAg ICBUaW1pbmcgPSBTZE1tY01tY0hzRGRyOw0KKyAgICBIb3N0Q3RybDIgPSBCSVQyOw0KICAgfSBl bHNlIGlmIChDbG9ja0ZyZXEgPT0gNTIpIHsNCi0gICAgVGltaW5nID0gU2RNbWNNbWNIc1NkcjsN CisgICAgSG9zdEN0cmwyID0gQklUMDsNCiAgIH0gZWxzZSB7DQotICAgIFRpbWluZyA9IFNkTW1j TW1jTGVnYWN5Ow0KKyAgICBIb3N0Q3RybDIgPSAwOw0KICAgfQ0KLQ0KLSAgU3RhdHVzID0gU2RN bWNIY1Voc1NpZ25hbGluZyAoUHJpdmF0ZS0+Q29udHJvbGxlckhhbmRsZSwgUGNpSW8sIFNsb3Qs IFRpbWluZyk7DQorICBTdGF0dXMgPSBTZE1tY0hjT3JNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1D X0hDX0hPU1RfQ1RSTDIsIHNpemVvZiAoSG9zdEN0cmwyKSwgJkhvc3RDdHJsMik7DQogICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgIHJldHVybiBTdGF0dXM7DQogICB9DQogICBIc1Rp bWluZyA9IDE7DQotICBTdGF0dXMgPSBFbW1jU3dpdGNoQ2xvY2tGcmVxIChQY2lJbywgUGFzc1Ro cnUsIFNsb3QsIFJjYSwgSHNUaW1pbmcsIFRpbWluZywgQ2xvY2tGcmVxKTsNCisgIFN0YXR1cyA9 IEVtbWNTd2l0Y2hDbG9ja0ZyZXEgKFBjaUlvLCBQYXNzVGhydSwgU2xvdCwgUmNhLCBIc1RpbWlu ZywgQ2xvY2tGcmVxKTsNCiAgIHJldHVybiBTdGF0dXM7DQp9DQpAQCAtODMxLDEzICs4MzYsMTAg QEAgRW1tY1N3aXRjaFRvSFMyMDAgKA0KICAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCdXNXaWR0aA0KICAgKQ0Kew0KLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0 YXR1czsNCi0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBIc1RpbWluZzsNCi0gIFVJTlQxNiAg ICAgICAgICAgICAgICAgICBDbG9ja0N0cmw7DQotICBTRF9NTUNfQlVTX01PREUgICAgICAgICAg VGltaW5nOw0KLSAgU0RfTU1DX0hDX1BSSVZBVEVfREFUQSAgKlByaXZhdGU7DQotDQotICBQcml2 YXRlID0gU0RfTU1DX0hDX1BSSVZBVEVfRlJPTV9USElTIChQYXNzVGhydSk7DQorICBFRklfU1RB VFVTICAgICAgICAgIFN0YXR1czsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgSHNUaW1pbmc7DQor ICBVSU5UOCAgICAgICAgICAgICAgIEhvc3RDdHJsMjsNCisgIFVJTlQxNiAgICAgICAgICAgICAg Q2xvY2tDdHJsOw0KICAgaWYgKChCdXNXaWR0aCAhPSA0KSAmJiAoQnVzV2lkdGggIT0gOCkpIHsN CiAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCkBAIC04NTcsMjkgKzg1OSw2MCBA QCBFbW1jU3dpdGNoVG9IUzIwMCAoDQogICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAg IHJldHVybiBTdGF0dXM7DQogICB9DQotDQotICBUaW1pbmcgPSBTZE1tY01tY0hzMjAwOw0KLQ0K LSAgU3RhdHVzID0gU2RNbWNIY1Voc1NpZ25hbGluZyAoUHJpdmF0ZS0+Q29udHJvbGxlckhhbmRs ZSwgUGNpSW8sIFNsb3QsIFRpbWluZyk7DQorICAvLw0KKyAgLy8gQ2xlYW4gVUhTIE1vZGUgU2Vs ZWN0IGZpZWxkIG9mIEhvc3QgQ29udHJvbCAyIHJlaWdzdGVyIGJlZm9yZSB1cGRhdGUNCisgIC8v DQorICBIb3N0Q3RybDIgPSAoVUlOVDgpfjB4NzsNCisgIFN0YXR1cyA9IFNkTW1jSGNBbmRNbWlv IChQY2lJbywgU2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIsIHNpemVvZiAoSG9zdEN0cmwyKSwg Jkhvc3RDdHJsMik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBT dGF0dXM7DQorICB9DQorICAvLw0KKyAgLy8gU2V0IFVIUyBNb2RlIFNlbGVjdCBmaWVsZCBvZiBI b3N0IENvbnRyb2wgMiByZWlnc3RlciB0byBTRFIxMDQNCisgIC8vDQorICBIb3N0Q3RybDIgPSBC SVQwIHwgQklUMTsNCisgIFN0YXR1cyA9IFNkTW1jSGNPck1taW8gKFBjaUlvLCBTbG90LCBTRF9N TUNfSENfSE9TVF9DVFJMMiwgc2l6ZW9mIChIb3N0Q3RybDIpLCAmSG9zdEN0cmwyKTsNCiAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCi0NCiAg IC8vDQogICAvLyBXYWl0IEludGVybmFsIENsb2NrIFN0YWJsZSBpbiB0aGUgQ2xvY2sgQ29udHJv bCByZWdpc3RlciB0byBiZSAxIGJlZm9yZSBzZXQgU0QgQ2xvY2sgRW5hYmxlIGJpdA0KICAgLy8N Ci0gIFN0YXR1cyA9IFNkTW1jSGNXYWl0TW1pb1NldCAoDQotICAgICAgICAgICAgIFBjaUlvLA0K LSAgICAgICAgICAgICBTbG90LA0KLSAgICAgICAgICAgICBTRF9NTUNfSENfQ0xPQ0tfQ1RSTCwN Ci0gICAgICAgICAgICAgc2l6ZW9mIChDbG9ja0N0cmwpLA0KLSAgICAgICAgICAgICBCSVQxLA0K LSAgICAgICAgICAgICBCSVQxLA0KLSAgICAgICAgICAgICBTRF9NTUNfSENfR0VORVJJQ19USU1F T1VUDQorICBpZiAoQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8pKSB7DQorICAgICAgICAgICAgICAg ICAgU3RhdHVzID0gU2RNbWNIY1dhaXRNbWlvU2V0ICgNCisgICAgICAgICAgICAgICBQY2lJbywN CisgICAgICAgICAgICAgICBTbG90LA0KKyAgICAgICAgICAgICAgIDB4MWNjLA0KKyAgICAgICAg ICAgICAgIHNpemVvZiAoQ2xvY2tDdHJsKSwNCisgICAgICAgICAgICAgICBCSVQxNCwNCisgICAg ICAgICAgICAgICBCSVQxNCwNCisgICAgICAgICAgICAgICBTRF9NTUNfSENfR0VORVJJQ19USU1F T1VUDQorICAgICAgICAgICAgICk7DQorICB9DQorICBlbHNlIHsNCisgICAgU3RhdHVzID0gU2RN bWNIY1dhaXRNbWlvU2V0ICgNCisgICAgICAgICAgICAgICBQY2lJbywNCisgICAgICAgICAgICAg ICBTbG90LA0KKyAgICAgICAgICAgICAgIFNEX01NQ19IQ19DTE9DS19DVFJMLA0KKyAgICAgICAg ICAgICAgIHNpemVvZiAoQ2xvY2tDdHJsKSwNCisgICAgICAgICAgICAgICBCSVQxLA0KKyAgICAg ICAgICAgICAgIEJJVDEsDQorICAgICAgICAgICAgICAgU0RfTU1DX0hDX0dFTkVSSUNfVElNRU9V VA0KICAgICAgICAgICAgICApOw0KKyAgfQ0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K ICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KKw0KKyAgaWYgKEJodEhvc3RQY2lTdXBwb3J0KFBj aUlvKSl7DQorICAgIC8vV2FpdCAybmQgQ2FyZCBEZXRlY3QgZGVib3VuY2UgRmluaXNoZWQgYnkg d2FpdCB0d2ljZSBvZiBkZWJvdW5jZSBtYXggdGltZQ0KKyAgICBVSU5UMzIgdmFsdWUzMjsNCisg ICAgd2hpbGUgKDEpIHsNCisgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAo UGNpSW8sIFNsb3QsIFNEX01NQ19IQ19QUkVTRU5UX1NUQVRFLCBUUlVFLCBzaXplb2YodmFsdWUz MiksICZ2YWx1ZTMyKTsNCisgICAgICAgICAgICAgICAgaWYgKCgodmFsdWUzMiA+PiAxOCkgJiAw eDAxKSA9PSAoKHZhbHVlMzIgPj4gMTYpICYgMHgwMSkpDQorICAgICAgICAgICAgICAgICAgYnJl YWs7DQorICAgIH0NCisgIH0NCiAgIC8vDQogICAvLyBTZXQgU0QgQ2xvY2sgRW5hYmxlIGluIHRo ZSBDbG9jayBDb250cm9sIHJlZ2lzdGVyIHRvIDENCiAgIC8vDQpAQCAtODg3LDEyICs5MjAsMzMg QEAgRW1tY1N3aXRjaFRvSFMyMDAgKA0KICAgU3RhdHVzID0gU2RNbWNIY09yTW1pbyAoUGNpSW8s IFNsb3QsIFNEX01NQ19IQ19DTE9DS19DVFJMLCBzaXplb2YgKENsb2NrQ3RybCksICZDbG9ja0N0 cmwpOw0KICAgSHNUaW1pbmcgPSAyOw0KLSAgU3RhdHVzID0gRW1tY1N3aXRjaENsb2NrRnJlcSAo UGNpSW8sIFBhc3NUaHJ1LCBTbG90LCBSY2EsIEhzVGltaW5nLCBUaW1pbmcsIENsb2NrRnJlcSk7 DQorICBTdGF0dXMgPSBFbW1jU3dpdGNoQ2xvY2tGcmVxIChQY2lJbywgUGFzc1RocnUsIFNsb3Qs IFJjYSwgSHNUaW1pbmcsIENsb2NrRnJlcSk7DQogICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQogICAgIHJldHVybiBTdGF0dXM7DQogICB9DQotICBTdGF0dXMgPSBFbW1jVHVuaW5nQ2xrRm9y SHMyMDAgKFBjaUlvLCBQYXNzVGhydSwgU2xvdCwgQnVzV2lkdGgpOw0KKyAgaWYgKEJodEhvc3RQ Y2lTdXBwb3J0KFBjaUlvKSl7DQorICAgIFN0YXR1cyA9IFNkTW1jSGNXYWl0TW1pb1NldCAoDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGNpSW8sDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3QsDQor ICAgICAgICAgICAgICAgMHgxY2MsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZiAoQ2xvY2tDdHJsKSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUMTEsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVDExLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRF9NTUNfQ0xPQ0tfU1RBQkxFX1RJTUVP VVQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN CisgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQorICAgICAgICAgICAgICAgIERiZ01zZyhM IldhaXQgQ2xvY2sgU3RhYmxlIHRpbWVvdXQsIENsb2NrRnJlcT0lZFxuIiwgQ2xvY2tGcmVxKTsN CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgICB9DQorICB9DQorDQorICBp ZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCisgICAgICAgICAgICAgIERiZ01zZyhMIkVtbWMgdHVu aW5nIGZhaWxlZFxuIik7DQorICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0K Kw0KICAgcmV0dXJuIFN0YXR1czsNCn0NCkBAIC05MjIsMTIgKzk3Niw5IEBAIEVtbWNTd2l0Y2hU b0hTNDAwICgNCiAgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvY2tG cmVxDQogICApDQp7DQotICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQotICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICBIc1RpbWluZzsNCi0gIFNEX01NQ19CVVNfTU9ERSAg ICAgICAgICAgIFRpbWluZzsNCi0gIFNEX01NQ19IQ19QUklWQVRFX0RBVEEgICAgICpQcml2YXRl Ow0KLQ0KLSAgUHJpdmF0ZSA9IFNEX01NQ19IQ19QUklWQVRFX0ZST01fVEhJUyAoUGFzc1RocnUp Ow0KKyAgRUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQorICBVSU5UOCAgICAgICAgICAgICAg IEhzVGltaW5nOw0KKyAgVUlOVDggICAgICAgICAgICAgICBIb3N0Q3RybDI7DQogICBTdGF0dXMg PSBFbW1jU3dpdGNoVG9IUzIwMCAoUGNpSW8sIFBhc3NUaHJ1LCBTbG90LCBSY2EsIENsb2NrRnJl cSwgOCk7DQogICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQpAQCAtOTM3LDcgKzk4OCw3IEBA IEVtbWNTd2l0Y2hUb0hTNDAwICgNCiAgIC8vIFNldCB0byBIaWdodCBTcGVlZCB0aW1pbmcgYW5k IHNldCB0aGUgY2xvY2sgZnJlcXVlbmN5IHRvIGEgdmFsdWUgbGVzcyB0aGFuIDUyTUh6Lg0KICAg Ly8NCiAgIEhzVGltaW5nID0gMTsNCi0gIFN0YXR1cyA9IEVtbWNTd2l0Y2hDbG9ja0ZyZXEgKFBj aUlvLCBQYXNzVGhydSwgU2xvdCwgUmNhLCBIc1RpbWluZywgU2RNbWNNbWNIc1NkciwgNTIpOw0K KyAgU3RhdHVzID0gRW1tY1N3aXRjaENsb2NrRnJlcSAoUGNpSW8sIFBhc3NUaHJ1LCBTbG90LCBS Y2EsIEhzVGltaW5nLCA1Mik7DQogICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgIHJl dHVybiBTdGF0dXM7DQogICB9DQpAQCAtOTQ4LDE2ICs5OTksMjUgQEAgRW1tY1N3aXRjaFRvSFM0 MDAgKA0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICByZXR1cm4gU3RhdHVzOw0K ICAgfQ0KLQ0KLSAgVGltaW5nID0gU2RNbWNNbWNIczQwMDsNCi0NCi0gIFN0YXR1cyA9IFNkTW1j SGNVaHNTaWduYWxpbmcgKFByaXZhdGUtPkNvbnRyb2xsZXJIYW5kbGUsIFBjaUlvLCBTbG90LCBU aW1pbmcpOw0KKyAgLy8NCisgIC8vIENsZWFuIFVIUyBNb2RlIFNlbGVjdCBmaWVsZCBvZiBIb3N0 IENvbnRyb2wgMiByZWlnc3RlciBiZWZvcmUgdXBkYXRlDQorICAvLw0KKyAgSG9zdEN0cmwyID0g KFVJTlQ4KX4weDc7DQorICBTdGF0dXMgPSBTZE1tY0hjQW5kTW1pbyAoUGNpSW8sIFNsb3QsIFNE X01NQ19IQ19IT1NUX0NUUkwyLCBzaXplb2YgKEhvc3RDdHJsMiksICZIb3N0Q3RybDIpOw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKyAg Ly8NCisgIC8vIFNldCBVSFMgTW9kZSBTZWxlY3QgZmllbGQgb2YgSG9zdCBDb250cm9sIDIgcmVp Z3N0ZXIgdG8gSFM0MDANCisgIC8vDQorICBIb3N0Q3RybDIgPSBCSVQwIHwgQklUMjsNCisgIFN0 YXR1cyA9IFNkTW1jSGNPck1taW8gKFBjaUlvLCBTbG90LCBTRF9NTUNfSENfSE9TVF9DVFJMMiwg c2l6ZW9mIChIb3N0Q3RybDIpLCAmSG9zdEN0cmwyKTsNCiAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCiAgIEhzVGltaW5nID0gMzsNCi0gIFN0 YXR1cyA9IEVtbWNTd2l0Y2hDbG9ja0ZyZXEgKFBjaUlvLCBQYXNzVGhydSwgU2xvdCwgUmNhLCBI c1RpbWluZywgVGltaW5nLCBDbG9ja0ZyZXEpOw0KKyAgU3RhdHVzID0gRW1tY1N3aXRjaENsb2Nr RnJlcSAoUGNpSW8sIFBhc3NUaHJ1LCBTbG90LCBSY2EsIEhzVGltaW5nLCBDbG9ja0ZyZXEpOw0K ICAgcmV0dXJuIFN0YXR1czsNCn0NCkBAIC0xMDA4LDcgKzEwNjgsNyBAQCBFbW1jU2V0QnVzTW9k ZSAoDQogICAgIHJldHVybiBTdGF0dXM7DQogICB9DQotICBBU1NFUlQgKFByaXZhdGUtPkJhc2VD bGtGcmVxW1Nsb3RdICE9IDApOw0KKyAgQVNTRVJUIChQcml2YXRlLT5DYXBhYmlsaXR5W1Nsb3Rd LkJhc2VDbGtGcmVxICE9IDApOw0KICAgLy8NCiAgIC8vIENoZWNrIGlmIHRoZSBIb3N0IENvbnRy b2xsZXIgc3VwcG9ydCA4Yml0cyBidXMgd2lkdGguDQogICAvLw0KQEAgLTEwODAsNiArMTE0MCw0 MiBAQCBFbW1jU2V0QnVzTW9kZSAoDQogICAgIC8vIEV4ZWN1dGUgSFMyMDAgdGltaW5nIHN3aXRj aCBwcm9jZWR1cmUNCiAgICAgLy8NCiAgICAgU3RhdHVzID0gRW1tY1N3aXRjaFRvSFMyMDAgKFBj aUlvLCBQYXNzVGhydSwgU2xvdCwgUmNhLCBDbG9ja0ZyZXEsIEJ1c1dpZHRoKTsNCisgICAgICAg ICAgICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KKyAgICAgIGlmIChCaHRIb3N0UGNpU3Vw cG9ydChQY2lJbykpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiB2 YWwzMjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERiZ01zZyhMInN3aXRjaCB0 byBIUzIwMCAyMDBNSFogZmFpbGVkLCBmcmVxIGRlY3JlYXNlIHRvIDEwME1IelxuIik7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9ja0ZyZXEgPSAxMDA7DQorDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTZE1tY0hjUndNbWlvIChQY2lJbywgU2xvdCwgMHgz QywgVFJVRSwgc2l6ZW9mKHZhbDMyKSwgJnZhbDMyKTsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbDMyICY9IH5CSVQyMjsNCisgICAgICAgICAgICAgICAgICAgIFNkTW1jSGNS d01taW8gKFBjaUlvLCBTbG90LCAweDNDLCBGQUxTRSwgc2l6ZW9mKHZhbDMyKSwgJnZhbDMyKTsN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDMyID0gKEJJVDI2IHwgQklUMjUp Ow0KKyAgICAgICAgICAgICAgICAgICAgU2RNbWNIY09yTW1pbyAoUGNpSW8sIFNsb3QsIDB4MkMs IHNpemVvZih2YWwzMiksICZ2YWwzMik7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGF0dXMgPSBFbW1jU3dpdGNoVG9IUzIwMCAoUGNpSW8sIFBhc3NUaHJ1LCBTbG90LCBS Y2EsIENsb2NrRnJlcSwgQnVzV2lkdGgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoKEV4dENzZC5EZXZpY2VUeXBlICYgQklUMSkgICE9IDAp ICYmIChQcml2YXRlLT5DYXBhYmlsaXR5W1Nsb3RdLkhpZ2hTcGVlZCAhPSAwKSkgew0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGJnTXNnKEwic3dpdGNo IHRvIEhTMjAwIDEwME1IWiBmYWlsZWQsIG1vZGUgZGVjcmVhc2UgdG8gSFMgNTBNSHpcbiIpOw0K Kw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhzVGltaW5nICA9IDE7DQor ICAgICAgICAgICAgICBJc0RkciAgICAgPSBGQUxTRTsNCisgICAgICAgICAgICAgIENsb2NrRnJl cSA9IDUyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXR1cyA9IEVtbWNTd2l0Y2hUb0hpZ2hTcGVlZCAoUGNpSW8sIFBhc3NUaHJ1LCBTbG90LCBS Y2EsIENsb2NrRnJlcSwgSXNEZHIsIEJ1c1dpZHRoKTsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKEV4dENzZC5EZXZpY2VUeXBlICYgQklUMCkgICE9 IDApICYmIChQcml2YXRlLT5DYXBhYmlsaXR5W1Nsb3RdLkhpZ2hTcGVlZCAhPSAwKSkgew0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERiZ01zZyhMInN3 aXRjaCB0byBIUzIwMCAxMDBNSFogZmFpbGVkLCBtb2RlIGRlY3JlYXNlIHRvIEhTIDI1TUh6XG4i KTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI c1RpbWluZyAgPSAxOw0KKyAgICAgICAgICAgICAgSXNEZHIgICAgID0gRkFMU0U7DQorICAgICAg ICAgICAgICBDbG9ja0ZyZXEgPSAyNjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXMgPSBFbW1jU3dpdGNoVG9IaWdoU3BlZWQgKFBjaUlvLCBQ YXNzVGhydSwgU2xvdCwgUmNhLCBDbG9ja0ZyZXEsIElzRGRyLCBCdXNXaWR0aCk7DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYmdNc2coTCJzd2l0Y2ggdG8gSFMyMDAg MTAwTUhaIGZhaWxlZCwgYnV0IGVtbWMgY2hpcCBkaWRuJ3Qgc3VwcG9ydCBocyBtb2RlXG4iKTsN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0NCisgICAgfQ0KICAgfSBlbHNlIHsNCiAgICAgLy8NCiAgICAgLy8gRXhlY3V0ZSBIaWdo IFNwZWVkIHRpbWluZyBzd2l0Y2ggcHJvY2VkdXJlDQoNClBsZWFzZSBjaGVjayBpdCENCkJyLA0K TWlrZQ0KDQpGcm9tOiBNaWtlIExpIChXSCkNClNlbnQ6IDIwMTnE6jHUwjIzyNUgMTc6MjkNClRv OiBYaWFvZ3VhbmcgWXUgKFdIKTsgRXJuZXN0IFpoYW5nKFdIKTsgQW5keSBEYWkgKFdIKQ0KQ2M6 IFNoaXJsZXkgSGVyIChTQyk7ICdlZGsyLWRldmVsQGxpc3RzLjAxLm9yZycNClN1YmplY3Q6IFtl ZGsyXSBbcGF0Y2hfMV0gbWFrZSBFREsgRHJpdmVyIFN1cHBvcnQgQkg3MjArRU1NQyBjaGlwDQoN Cg0KSGksIGFsbA0KDQpUaGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gZW5h YmxlIEVESyBEcml2ZXIgU3VwcG9ydCBCSDcyMCBDSElQLg0KDQotLS0gL2MvTXlXb3Jrc3BhY2Uv ZWRrMi12VURLMjAxOC9NZGVNb2R1bGVQa2cvQnVzL1BjaS9TZE1tY1BjaUhjRHhlL1NkTW1jUGNp SGNpLmMgICAgICAgICAgICAyMDE5LTAxLTEwIDE0OjM1OjIxLjM0MjczNjIwMCAtMDgwMA0KKysr IC9jL3l4L2VkazIvTWRlTW9kdWxlUGtnL0J1cy9QY2kvU2RNbWNQY2lIY0R4ZS9TZE1tY1BjaUhj aS5jICAgICAgICAgMjAxOS0wMS0yMSAxNTozNjoxMi4xOTU3MTUzMDAgLTA4MDANCkBAIC00LDYg KzQsNyBAQA0KDQogICBJdCB3b3VsZCBleHBvc2UgRUZJX1NEX01NQ19QQVNTX1RIUlVfUFJPVE9D T0wgZm9yIHVwcGVyIGxheWVyIHVzZS4NCg0KKyAgQ29weXJpZ2h0IChjKSAyMDE4LCBOVklESUEg Q09SUE9SQVRJT04uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICBDb3B5cmlnaHQgKGMpIDIwMTUg LSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQogICBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQogICBhcmUgbGljZW5z ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgQlNEIExpY2Vuc2UNCkBAIC0xNiw4ICsxNyw2IEBADQoqKi8NCg0KICNpbmNsdWRlICJTZE1t Y1BjaUhjRHhlLmgiDQotaW50IGdfZGV2aWNlSWQgPSAwOw0KLQ0KDQogLyoqDQogICBEdW1wIHRo ZSBjb250ZW50IG9mIFNEL01NQyBob3N0IGNvbnRyb2xsZXIncyBDYXBhYmlsaXR5IFJlZ2lzdGVy Lg0KQEAgLTQ3LDcgKzQ2LDggQEAgRHVtcENhcGFiaWxpdHlSZWcgKA0KICAgREVCVUcgKChERUJV R19JTkZPLCAiICAgVm9sdGFnZSAzLjMgICAgICAgJWFcbiIsIENhcGFiaWxpdHktPlZvbHRhZ2Uz MyA/ICJUUlVFIiA6ICJGQUxTRSIpKTsNCiAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgIFZvbHRh Z2UgMy4wICAgICAgICVhXG4iLCBDYXBhYmlsaXR5LT5Wb2x0YWdlMzAgPyAiVFJVRSIgOiAiRkFM U0UiKSk7DQogICBERUJVRyAoKERFQlVHX0lORk8sICIgICBWb2x0YWdlIDEuOCAgICAgICAlYVxu IiwgQ2FwYWJpbGl0eS0+Vm9sdGFnZTE4ID8gIlRSVUUiIDogIkZBTFNFIikpOw0KLSAgREVCVUcg KChERUJVR19JTkZPLCAiICAgNjQtYml0IFN5cyBCdXMgICAgJWFcbiIsIENhcGFiaWxpdHktPlN5 c0J1czY0ID8gIlRSVUUiIDogIkZBTFNFIikpOw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiICAg VjQgNjQtYml0IFN5cyBCdXMgJWFcbiIsIENhcGFiaWxpdHktPlN5c0J1czY0VjQgPyAiVFJVRSIg OiAiRkFMU0UiKSk7DQorICBERUJVRyAoKERFQlVHX0lORk8sICIgICBWMyA2NC1iaXQgU3lzIEJ1 cyAlYVxuIiwgQ2FwYWJpbGl0eS0+U3lzQnVzNjRWMyA/ICJUUlVFIiA6ICJGQUxTRSIpKTsNCiAg IERFQlVHICgoREVCVUdfSU5GTywgIiAgIEFzeW5jIEludGVycnVwdCAgICVhXG4iLCBDYXBhYmls aXR5LT5Bc3luY0ludCA/ICJUUlVFIiA6ICJGQUxTRSIpKTsNCiAgIERFQlVHICgoREVCVUdfSU5G TywgIiAgIFNsb3RUeXBlICAgICAgICAgICIpKTsNCiAgIGlmIChDYXBhYmlsaXR5LT5TbG90VHlw ZSA9PSAweDAwKSB7DQpAQCAtNDE5LDkgKzQxOSwzOSBAQCBTZE1tY0hjV2FpdE1taW9TZXQgKA0K fQ0KDQogLyoqDQorICBHZXQgdGhlIGNvbnRyb2xsZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9t IHRoZSBzcGVjaWZpZWQgc2xvdC4NCisNCisgIEBwYXJhbVtpbl0gIFBjaUlvICAgICAgICAgICBU aGUgUENJIElPIHByb3RvY29sIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luXSAgU2xvdCAgICAgICAg ICAgIFRoZSBzbG90IG51bWJlciBvZiB0aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kIHRv Lg0KKyAgQHBhcmFtW291dF0gVmVyc2lvbiAgICAgICAgIFRoZSBidWZmZXIgdG8gc3RvcmUgdGhl IHZlcnNpb24gaW5mb3JtYXRpb24uDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg VGhlIG9wZXJhdGlvbiBleGVjdXRlcyBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBmYWlscy4NCisNCisqKi8NCitFRklfU1RBVFVTDQor U2RNbWNIY0dldENvbnRyb2xsZXJWZXJzaW9uICgNCisgIElOICAgICBFRklfUENJX0lPX1BST1RP Q09MICAqUGNpSW8sDQorICBJTiAgICAgVUlOVDggICAgICAgICAgICAgICAgU2xvdCwNCisgIE9V VCAgICBVSU5UMTYgICAgICAgICAgICAgICAqVmVyc2lvbg0KKyAgKQ0KK3sNCisgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KKw0KKyAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAo UGNpSW8sIFNsb3QsIFNEX01NQ19IQ19DVFJMX1ZFUiwgVFJVRSwgc2l6ZW9mIChVSU5UMTYpLCBW ZXJzaW9uKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1 czsNCisgIH0NCisNCisgICpWZXJzaW9uICY9IDB4RkY7DQorDQorICByZXR1cm4gRUZJX1NVQ0NF U1M7DQorfQ0KKw0KKy8qKg0KICAgU29mdHdhcmUgcmVzZXQgdGhlIHNwZWNpZmllZCBTRC9NTUMg aG9zdCBjb250cm9sbGVyIGFuZCBlbmFibGUgYWxsIGludGVycnVwdHMuDQoNCi0gIEBwYXJhbVtp bl0gUGNpSW8gICAgICAgICAgVGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCisgIEBwYXJh bVtpbl0gUHJpdmF0ZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBTRF9NTUNfSENfUFJJVkFURV9E QVRBIGluc3RhbmNlLg0KICAgQHBhcmFtW2luXSBTbG90ICAgICAgICAgICBUaGUgc2xvdCBudW1i ZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4NCg0KICAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICBUaGUgc29mdHdhcmUgcmVzZXQgZXhlY3V0ZXMgc3VjY2Vzc2Z1bGx5 Lg0KQEAgLTQzMCwxOCArNDYwLDM4IEBAIFNkTW1jSGNXYWl0TW1pb1NldCAoDQoqKi8NCkVGSV9T VEFUVVMNClNkTW1jSGNSZXNldCAoDQotICBJTiBFRklfUENJX0lPX1BST1RPQ09MICAgICpQY2lJ bywNCisgIElOIFNEX01NQ19IQ19QUklWQVRFX0RBVEEgKlByaXZhdGUsDQogICBJTiBVSU5UOCAg ICAgICAgICAgICAgICAgIFNsb3QNCiAgICkNCnsNCiAgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgU3RhdHVzOw0KICAgVUlOVDggICAgICAgICAgICAgICAgICAgICBTd1Jlc2V0Ow0KKyAgRUZJ X1BDSV9JT19QUk9UT0NPTCAgICAgICAqUGNpSW87DQorDQorICAvLw0KKyAgLy8gTm90aWZ5IHRo ZSBTRC9NTUMgb3ZlcnJpZGUgcHJvdG9jb2wgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gcmVzZXQNCisg IC8vIHRoZSBTRC9NTUMgaG9zdCBjb250cm9sbGVyLg0KKyAgLy8NCisgIGlmIChtT3ZlcnJpZGUg IT0gTlVMTCAmJiBtT3ZlcnJpZGUtPk5vdGlmeVBoYXNlICE9IE5VTEwpIHsNCisgICAgU3RhdHVz ID0gbU92ZXJyaWRlLT5Ob3RpZnlQaGFzZSAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICBQ cml2YXRlLT5Db250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2xv dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVka2lpU2RNbWNSZXNldFByZSwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICAgREVCVUcgKChERUJVR19XQVJOLA0KKyAgICAgICAgIiVhOiBTRC9NTUMgcHJl IHJlc2V0IG5vdGlmaWVyIGNhbGxiYWNrIGZhaWxlZCAtICVyXG4iLA0KKyAgICAgICAgX19GVU5D VElPTl9fLCBTdGF0dXMpKTsNCisgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICB9DQoN Ci0gIFN3UmVzZXQgPSAweEZGOw0KLSAgU3RhdHVzICA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBT bG90LCBTRF9NTUNfSENfU1dfUlNULCBGQUxTRSwgc2l6ZW9mIChTd1Jlc2V0KSwgJlN3UmVzZXQp Ow0KKyAgUGNpSW8gICA9IFByaXZhdGUtPlBjaUlvOw0KKyAgU3dSZXNldCA9IEJJVDA7DQorICBT dGF0dXMgID0gU2RNbWNIY09yTW1pbyAoUGNpSW8sIFNsb3QsIFNEX01NQ19IQ19TV19SU1QsIHNp emVvZiAoU3dSZXNldCksICZTd1Jlc2V0KTsNCg0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiU2RNbWNIY1Jlc2V0OiB3cml0ZSBmdWxsIDEg ZmFpbHM6ICVyXG4iLCBTdGF0dXMpKTsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlNkTW1j SGNSZXNldDogd3JpdGUgU1cgUmVzZXQgZm9yIEFsbCBmYWlsczogJXJcbiIsIFN0YXR1cykpOw0K ICAgICByZXR1cm4gU3RhdHVzOw0KICAgfQ0KDQpAQCAtNDUwLDcgKzUwMCw3IEBAIFNkTW1jSGNS ZXNldCAoDQogICAgICAgICAgICAgIFNsb3QsDQogICAgICAgICAgICAgIFNEX01NQ19IQ19TV19S U1QsDQogICAgICAgICAgICAgIHNpemVvZiAoU3dSZXNldCksDQotICAgICAgICAgICAgIDB4RkYs DQorICAgICAgICAgICAgIEJJVDAsDQogICAgICAgICAgICAgIDB4MDAsDQogICAgICAgICAgICAg IFNEX01NQ19IQ19HRU5FUklDX1RJTUVPVVQNCiAgICAgICAgICAgICAgKTsNCkBAIC00NTgsMTAg KzUwOCwzMyBAQCBTZE1tY0hjUmVzZXQgKA0KICAgICBERUJVRyAoKERFQlVHX0lORk8sICJTZE1t Y0hjUmVzZXQ6IHJlc2V0IGRvbmUgd2l0aCAlclxuIiwgU3RhdHVzKSk7DQogICAgIHJldHVybiBT dGF0dXM7DQogICB9DQorDQogICAvLw0KICAgLy8gRW5hYmxlIGFsbCBpbnRlcnJ1cHQgYWZ0ZXIg cmVzZXQgYWxsLg0KICAgLy8NCiAgIFN0YXR1cyA9IFNkTW1jSGNFbmFibGVJbnRlcnJ1cHQgKFBj aUlvLCBTbG90KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChE RUJVR19JTkZPLCAiU2RNbWNIY1Jlc2V0OiBTZE1tY0hjRW5hYmxlSW50ZXJydXB0IGRvbmUgd2l0 aCAlclxuIiwNCisgICAgICBTdGF0dXMpKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisN CisgIC8vDQorICAvLyBOb3RpZnkgdGhlIFNEL01NQyBvdmVycmlkZSBwcm90b2NvbCB0aGF0IHdl IGhhdmUganVzdCByZXNldA0KKyAgLy8gdGhlIFNEL01NQyBob3N0IGNvbnRyb2xsZXIuDQorICAv Lw0KKyAgaWYgKG1PdmVycmlkZSAhPSBOVUxMICYmIG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgIT0g TlVMTCkgew0KKyAgICBTdGF0dXMgPSBtT3ZlcnJpZGUtPk5vdGlmeVBoYXNlICgNCisgICAgICAg ICAgICAgICAgICAgICAgICAgIFByaXZhdGUtPkNvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICBTbG90LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRWRraWlT ZE1tY1Jlc2V0UG9zdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgREVCVUcgKChERUJVR19XQVJOLA0KKyAg ICAgICAgIiVhOiBTRC9NTUMgcG9zdCByZXNldCBub3RpZmllciBjYWxsYmFjayBmYWlsZWQgLSAl clxuIiwNCisgICAgICAgIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQorICAgIH0NCisgIH0NCg0K ICAgcmV0dXJuIFN0YXR1czsNCn0NCkBAIC02ODAsNyArNzUzLDggQEAgU2RNbWNIY1N0b3BDbG9j ayAoDQogICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgIFRoZSBQQ0kgSU8gcHJvdG9jb2wgaW5z dGFuY2UuDQogICBAcGFyYW1baW5dIFNsb3QgICAgICAgICAgIFRoZSBzbG90IG51bWJlciBvZiB0 aGUgU0QgY2FyZCB0byBzZW5kIHRoZSBjb21tYW5kIHRvLg0KICAgQHBhcmFtW2luXSBDbG9ja0Zy ZXEgICAgICBUaGUgbWF4IGNsb2NrIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFRoZSB1bml0IGlzIEtI ei4NCi0gIEBwYXJhbVtpbl0gQ2FwYWJpbGl0eSAgICAgVGhlIGNhcGFiaWxpdHkgb2YgdGhlIHNs b3QuDQorICBAcGFyYW1baW5dIEJhc2VDbGtGcmVxICAgIFRoZSBiYXNlIGNsb2NrIGZyZXF1ZW5j eSBvZiBob3N0IGNvbnRyb2xsZXIgaW4gTUh6Lg0KKyAgQHBhcmFtW2luXSBDb250cm9sbGVyVmVy ICBUaGUgdmVyc2lvbiBvZiBob3N0IGNvbnRyb2xsZXIuDQoNCiAgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgVGhlIGNsb2NrIGlzIHN1cHBsaWVkIHN1Y2Nlc3NmdWxseS4NCiAgIEByZXR2YWwg T3RoZXJzICAgICAgICAgICAgVGhlIGNsb2NrIGlzbid0IHN1cHBsaWVkIHN1Y2Nlc3NmdWxseS4N CkBAIC02OTEsMjMgKzc2NSwyMSBAQCBTZE1tY0hjQ2xvY2tTdXBwbHkgKA0KICAgSU4gRUZJX1BD SV9JT19QUk9UT0NPTCAgICAqUGNpSW8sDQogICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgIFNs b3QsDQogICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgIENsb2NrRnJlcSwNCi0gIElOIFNEX01N Q19IQ19TTE9UX0NBUCAgICAgQ2FwYWJpbGl0eQ0KKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAg ICBCYXNlQ2xrRnJlcSwNCisgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgQ29udHJvbGxlclZl cg0KICAgKQ0Kew0KICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQotICBVSU5U MzIgICAgICAgICAgICAgICAgICAgIEJhc2VDbGtGcmVxOw0KICAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICBTZXR0aW5nRnJlcTsNCiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgRGl2aXNv cjsNCiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgUmVtYWluZGVyOw0KLSAgVUlOVDE2ICAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVyVmVyOw0KICAgVUlOVDE2ICAgICAgICAgICAgICAg ICAgICBDbG9ja0N0cmw7DQoNCiAgIC8vDQogICAvLyBDYWxjdWxhdGUgYSBkaXZpc29yIGZvciBT RCBjbG9jayBmcmVxdWVuY3kNCiAgIC8vDQotICBBU1NFUlQgKENhcGFiaWxpdHkuQmFzZUNsa0Zy ZXEgIT0gMCk7DQorICBBU1NFUlQgKEJhc2VDbGtGcmVxICE9IDApOw0KDQotICBCYXNlQ2xrRnJl cSA9IENhcGFiaWxpdHkuQmFzZUNsa0ZyZXE7DQogICBpZiAoQ2xvY2tGcmVxID09IDApIHsNCiAg ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgIH0NCkBAIC03MzYsMTcgKzgwOCwx NSBAQCBTZE1tY0hjQ2xvY2tTdXBwbHkgKA0KDQogICBERUJVRyAoKERFQlVHX0lORk8sICJCYXNl Q2xrRnJlcSAlZE1IeiBEaXZpc29yICVkIENsb2NrRnJlcSAlZEtoelxuIiwgQmFzZUNsa0ZyZXEs IERpdmlzb3IsIENsb2NrRnJlcSkpOw0KDQotICBTdGF0dXMgPSBTZE1tY0hjUndNbWlvIChQY2lJ bywgU2xvdCwgU0RfTU1DX0hDX0NUUkxfVkVSLCBUUlVFLCBzaXplb2YgKENvbnRyb2xsZXJWZXIp LCAmQ29udHJvbGxlclZlcik7DQotICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgIHJl dHVybiBTdGF0dXM7DQotICB9DQogICAvLw0KICAgLy8gU2V0IFNEQ0xLIEZyZXF1ZW5jeSBTZWxl Y3QgYW5kIEludGVybmFsIENsb2NrIEVuYWJsZSBmaWVsZHMgaW4gQ2xvY2sgQ29udHJvbCByZWdp c3Rlci4NCiAgIC8vDQotICBpZiAoKChDb250cm9sbGVyVmVyICYgMHhGRikgPT0gMikgfHwgKChD b250cm9sbGVyVmVyICYgMHhGRikgPT0gMykpIHsNCisgIGlmICgoQ29udHJvbGxlclZlciA+PSBT RF9NTUNfSENfQ1RSTF9WRVJfMzAwKSAmJg0KKyAgICAgIChDb250cm9sbGVyVmVyIDw9IFNEX01N Q19IQ19DVFJMX1ZFUl80MjApKSB7DQogICAgIEFTU0VSVCAoRGl2aXNvciA8PSAweDNGRik7DQog ICAgIENsb2NrQ3RybCA9ICgoRGl2aXNvciAmIDB4RkYpIDw8IDgpIHwgKChEaXZpc29yICYgMHgz MDApID4+IDIpOw0KLSAgfSBlbHNlIGlmICgoKENvbnRyb2xsZXJWZXIgJiAweEZGKSA9PSAwKSB8 fCAoKENvbnRyb2xsZXJWZXIgJiAweEZGKSA9PSAxKSkgew0KKyAgfSBlbHNlIGlmICgoQ29udHJv bGxlclZlciA9PSBTRF9NTUNfSENfQ1RSTF9WRVJfMTAwKSB8fA0KKyAgICAgICAgICAgICAoQ29u dHJvbGxlclZlciA9PSBTRF9NTUNfSENfQ1RSTF9WRVJfMjAwKSkgew0KICAgICAvLw0KICAgICAv LyBPbmx5IHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBjYW4gYmUgdXNlZCBhcyBkaXZpc29yLg0K ICAgICAvLw0KQEAgLTg5NCwxMSArOTY0LDYyIEBAIFNkTW1jSGNTZXRCdXNXaWR0aCAoDQp9DQoN CiAvKioNCi0gIFN1cHBseSBTRC9NTUMgY2FyZCB3aXRoIGxvd2VzdCBjbG9jayBmcmVxdWVuY3kg YXQgaW5pdGlhbGl6YXRpb24uDQorICBDb25maWd1cmUgVjQgY29udHJvbGxlciBlbmhhbmNlbWVu dHMgYXQgaW5pdGlhbGl6YXRpb24uDQoNCiAgIEBwYXJhbVtpbl0gUGNpSW8gICAgICAgICAgVGhl IFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCiAgIEBwYXJhbVtpbl0gU2xvdCAgICAgICAgICAg VGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8uDQog ICBAcGFyYW1baW5dIENhcGFiaWxpdHkgICAgIFRoZSBjYXBhYmlsaXR5IG9mIHRoZSBzbG90Lg0K KyAgQHBhcmFtW2luXSBDb250cm9sbGVyVmVyICBUaGUgdmVyc2lvbiBvZiBob3N0IGNvbnRyb2xs ZXIuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBjbG9jayBpcyBzdXBwbGll ZCBzdWNjZXNzZnVsbHkuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK1NkTW1jSGNJbml0VjRFbmhh bmNlbWVudHMgKA0KKyAgSU4gRUZJX1BDSV9JT19QUk9UT0NPTCAgICAqUGNpSW8sDQorICBJTiBV SU5UOCAgICAgICAgICAgICAgICAgIFNsb3QsDQorICBJTiBTRF9NTUNfSENfU0xPVF9DQVAgICAg IENhcGFiaWxpdHksDQorICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJWZXIN CisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgSG9zdEN0cmwyOw0KKw0KKyAgLy8NCisgIC8vIENoZWNrIGlm IGNvbnRyb2xsZXIgdmVyc2lvbiBWNCBvciBoaWdoZXINCisgIC8vDQorICBpZiAoQ29udHJvbGxl clZlciA+PSBTRF9NTUNfSENfQ1RSTF9WRVJfNDAwKSB7DQorICAgIEhvc3RDdHJsMiA9IFNEX01N Q19IQ19WNF9FTjsNCisgICAgLy8NCisgICAgLy8gQ2hlY2sgaWYgVjQgNjRiaXQgc3VwcG9ydCBp cyBhdmFpbGFibGUNCisgICAgLy8NCisgICAgaWYgKENhcGFiaWxpdHkuU3lzQnVzNjRWNCAhPSAw KSB7DQorICAgICAgSG9zdEN0cmwyIHw9IFNEX01NQ19IQ182NF9BRERSX0VOOw0KKyAgICAgIERF QlVHICgoREVCVUdfSU5GTywgIkVuYWJsZWQgVjQgNjQgYml0IHN5c3RlbSBidXMgc3VwcG9ydFxu IikpOw0KKyAgICB9DQorICAgIC8vDQorICAgIC8vIENoZWNrIGlmIGNvbnRyb2xsZXIgdmVyc2lv biBWNC4xMCBvciBoaWdoZXINCisgICAgLy8NCisgICAgaWYgKENvbnRyb2xsZXJWZXIgPj0gU0Rf TU1DX0hDX0NUUkxfVkVSXzQxMCkgew0KKyAgICAgIEhvc3RDdHJsMiB8PSBTRF9NTUNfSENfMjZf REFUQV9MRU5fQURNQV9FTjsNCisgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJFbmFibGVkIFY0 IDI2IGJpdCBkYXRhIGxlbmd0aCBBRE1BIHN1cHBvcnRcbiIpKTsNCisgICAgfQ0KKyAgICBTdGF0 dXMgPSBTZE1tY0hjT3JNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIsIHNp emVvZiAoSG9zdEN0cmwyKSwgJkhvc3RDdHJsMik7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICB9DQorDQorICByZXR1cm4g RUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyAgU3VwcGx5IFNEL01NQyBjYXJkIHdpdGggbG93 ZXN0IGNsb2NrIGZyZXF1ZW5jeSBhdCBpbml0aWFsaXphdGlvbi4NCisNCisgIEBwYXJhbVtpbl0g UGNpSW8gICAgICAgICAgVGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCisgIEBwYXJhbVtp bl0gU2xvdCAgICAgICAgICAgVGhlIHNsb3QgbnVtYmVyIG9mIHRoZSBTRCBjYXJkIHRvIHNlbmQg dGhlIGNvbW1hbmQgdG8uDQorICBAcGFyYW1baW5dIEJhc2VDbGtGcmVxICAgIFRoZSBiYXNlIGNs b2NrIGZyZXF1ZW5jeSBvZiBob3N0IGNvbnRyb2xsZXIgaW4gTUh6Lg0KKyAgQHBhcmFtW2luXSBD b250cm9sbGVyVmVyICBUaGUgdmVyc2lvbiBvZiBob3N0IGNvbnRyb2xsZXIuDQoNCiAgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIGNsb2NrIGlzIHN1cHBsaWVkIHN1Y2Nlc3NmdWxseS4N CiAgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgVGhlIGNsb2NrIGlzbid0IHN1cHBsaWVkIHN1 Y2Nlc3NmdWxseS4NCkBAIC05MDgsMTYgKzEwMjksMjAgQEAgRUZJX1NUQVRVUw0KU2RNbWNIY0lu aXRDbG9ja0ZyZXEgKA0KICAgSU4gRUZJX1BDSV9JT19QUk9UT0NPTCAgICAqUGNpSW8sDQogICBJ TiBVSU5UOCAgICAgICAgICAgICAgICAgIFNsb3QsDQotICBJTiBTRF9NTUNfSENfU0xPVF9DQVAg ICAgIENhcGFiaWxpdHkNCisgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgQmFzZUNsa0ZyZXEs DQorICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJWZXINCiAgICkNCnsNCiAg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICBJbml0RnJlcTsNCg0KICAgLy8NCi0gIC8vIENhbGN1bGF0ZSBhIGRpdmlzb3IgZm9y IFNEIGNsb2NrIGZyZXF1ZW5jeQ0KKyAgLy8gQWNjb3JkaW5nIHRvIFNESENJIHNwZWNpZmljYXRp b24gdmVyLiA0LjIsIEJhc2VDbGtGcmVxIGZpZWxkIHZhbHVlIG9mDQorICAvLyB0aGUgQ2FwYWJp bGl0eSBSZWdpc3RlciAxIGNhbiBiZSB6ZXJvLCB3aGljaCBtZWFucyBhIG5lZWQgZm9yIG9idGFp bmluZw0KKyAgLy8gdGhlIGNsb2NrIGZyZXF1ZW5jeSB2aWEgYW5vdGhlciBtZXRob2QuIEZhaWwg aW4gY2FzZSBpdCBpcyBub3QgdXBkYXRlZA0KKyAgLy8gYnkgU1cgYXQgdGhpcyBwb2ludC4NCiAg IC8vDQotICBpZiAoQ2FwYWJpbGl0eS5CYXNlQ2xrRnJlcSA9PSAwKSB7DQorICBpZiAoQmFzZUNs a0ZyZXEgPT0gMCkgew0KICAgICAvLw0KICAgICAvLyBEb24ndCBzdXBwb3J0IGdldCBCYXNlIENs b2NrIEZyZXF1ZW5jeSBpbmZvcm1hdGlvbiB2aWEgYW5vdGhlciBtZXRob2QNCiAgICAgLy8NCkBA IC05MjcsNyArMTA1Miw3IEBAIFNkTW1jSGNJbml0Q2xvY2tGcmVxICgNCiAgIC8vIFN1cHBseSA0 MDBLSHogY2xvY2sgZnJlcXVlbmN5IGF0IGluaXRpYWxpemF0aW9uIHBoYXNlLg0KICAgLy8NCiAg IEluaXRGcmVxID0gNDAwOw0KLSAgU3RhdHVzID0gU2RNbWNIY0Nsb2NrU3VwcGx5IChQY2lJbywg U2xvdCwgSW5pdEZyZXEsIENhcGFiaWxpdHkpOw0KKyAgU3RhdHVzID0gU2RNbWNIY0Nsb2NrU3Vw cGx5IChQY2lJbywgU2xvdCwgSW5pdEZyZXEsIEJhc2VDbGtGcmVxLCBDb250cm9sbGVyVmVyKTsN CiAgIHJldHVybiBTdGF0dXM7DQp9DQoNCkBAIC05ODgsMTUgKzExMTMsNiBAQCBTZE1tY0hjSW5p dFBvd2VyVm9sdGFnZSAoDQogICAvLyBTZXQgU0QgQnVzIFZvbHRhZ2UgU2VsZWN0IGFuZCBTRCBC dXMgUG93ZXIgZmllbGRzIGluIFBvd2VyIENvbnRyb2wgUmVnaXN0ZXINCiAgIC8vDQogICBTdGF0 dXMgPSBTZE1tY0hjUG93ZXJDb250cm9sIChQY2lJbywgU2xvdCwgTWF4Vm9sdGFnZSk7DQotICBp ZiAoQmh0SG9zdFBjaVN1cHBvcnQoUGNpSW8pKXsNCi0gICAgICAgICAgICAgICAgLy8gMS44ViBz aWduYWxpbmcgZW5hYmxlDQotICAgICAgICAgICAgICAgIEhvc3RDdHJsMiAgPSBCSVQzOw0KLSAg ICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjT3JNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1D X0hDX0hPU1RfQ1RSTDIsIHNpemVvZiAoSG9zdEN0cmwyKSwgJkhvc3RDdHJsMik7DQotICAgICAg ICAgICAgICAgIGdCUy0+U3RhbGwgKDUwMDApOw0KLSAgICAgICAgICAgICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0 YXR1czsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgfQ0KDQogICByZXR1cm4gU3RhdHVzOw0KfQ0K QEAgLTEwMzIsOSArMTE0OCw4IEBAIFNkTW1jSGNJbml0VGltZW91dEN0cmwgKA0KICAgSW5pdGlh bCBTRC9NTUMgaG9zdCBjb250cm9sbGVyIHdpdGggbG93ZXN0IGNsb2NrIGZyZXF1ZW5jeSwgbWF4 IHBvd2VyIGFuZCBtYXggdGltZW91dCB2YWx1ZQ0KICAgYXQgaW5pdGlhbGl6YXRpb24uDQoNCi0g IEBwYXJhbVtpbl0gUGNpSW8gICAgICAgICAgVGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4N CisgIEBwYXJhbVtpbl0gUHJpdmF0ZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBTRF9NTUNfSENf UFJJVkFURV9EQVRBIGluc3RhbmNlLg0KICAgQHBhcmFtW2luXSBTbG90ICAgICAgICAgICBUaGUg c2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0by4NCi0gIEBw YXJhbVtpbl0gQ2FwYWJpbGl0eSAgICAgVGhlIGNhcGFiaWxpdHkgb2YgdGhlIHNsb3QuDQoNCiAg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIGhvc3QgY29udHJvbGxlciBpcyBpbml0aWFs aXplZCBzdWNjZXNzZnVsbHkuDQogICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgIFRoZSBob3N0 IGNvbnRyb2xsZXIgaXNuJ3QgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KQEAgLTEwNDIsOTYg KzExNTcsMTY0IEBAIFNkTW1jSGNJbml0VGltZW91dEN0cmwgKA0KKiovDQpFRklfU1RBVFVTDQpT ZE1tY0hjSW5pdEhvc3QgKA0KLSAgSU4gRUZJX1BDSV9JT19QUk9UT0NPTCAgICAqUGNpSW8sDQot ICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgIFNsb3QsDQotICBJTiBTRF9NTUNfSENfU0xPVF9D QVAgICAgIENhcGFiaWxpdHkNCisgIElOIFNEX01NQ19IQ19QUklWQVRFX0RBVEEgKlByaXZhdGUs DQorICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgIFNsb3QNCiAgICkNCnsNCi0gIEVGSV9TVEFU VVMgICAgICAgU3RhdHVzOw0KLSAgVUlOVDMyICAgICAgICAgICB2YWx1ZTMyOw0KLQ0KLSAgaWYg KEJodEhvc3RQY2lTdXBwb3J0KFBjaUlvKSl7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGJnTXNnKEwiZmluZCBiaHQgZW1tYyBjaGlwXG4iKTsNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGRVQgb24gKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQY2lCaHRPcjMyKFBjaUlvLCAweEVDLCAweDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExlZCBvbiAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUGNp Qmh0QW5kMzIoUGNpSW8sIDB4MzM0LCAoVUlOVDMyKX5CSVQxMyk7DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUGNpQmh0T3IzMihQY2lJbywgMHhENCwgQklUNik7DQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IDEuOHYgZW1tYyBzaWduYWxpbmcgZmxhZyAqLw0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBjaUJodE9yMzIoUGNpSW8sIDB4MzA4LCBC SVQ0KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgMjAwTUJhc2VDbG9j ayAqLw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlMzIgPSBQY2lCaHRSZWFk MzIoUGNpSW8sIDB4MzA0KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTMy ICY9IDB4MDAwMEZGRkY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUzMiB8 PSAweDI1MTAwMDAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBjaUJodFdyaXRl MzIoUGNpSW8sIDB4MzA0LCB2YWx1ZTMyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQY2lCaHRPcjMyKFBjaUlvLCAweDNFNCwgQklUMjIpOw0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBjaUJodFdyaXRlMzIoUGNpSW8sIDB4MzAwLCAweDIxNDAwMDMzKTsNCi0NCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VuYWJsZSBpbnRlcm5hbCBjbGsNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTMyID0gQklUMDsNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjT3JNbWlvIChQY2lJbywgU2xvdCwgU0Rf TU1DX0hDX0NMT0NLX0NUUkwsc2l6ZW9mKHZhbHVlMzIpLCAmdmFsdWUzMik7DQotDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNldCBwbGwgc3RhcnQNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjUndNbWlvIChQY2lJbywgU2xvdCwgMHgx Q0MsIFRSVUUsIHNpemVvZih2YWx1ZTMyKSwgJnZhbHVlMzIpOw0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhbHVlMzIgfD0gQklUMTI7DQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIDB4MUNDLCBGQUxTRSwg c2l6ZW9mKHZhbHVlMzIpLCAmdmFsdWUzMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ0JTLT5TdGFsbCgxKTsNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3Jl c2V0IHBsbCBlbmQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1t Y0hjUndNbWlvIChQY2lJbywgU2xvdCwgMHgxQ0MsIFRSVUUsc2l6ZW9mKHZhbHVlMzIpLCAmdmFs dWUzMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUzMiAmPSB+QklUMTI7 DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUzMiB8PSBCSVQxODsNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjUndNbWlvIChQY2lJbywg U2xvdCwgMHgxQ0MsIEZBTFNFLCBzaXplb2YodmFsdWUzMiksICZ2YWx1ZTMyKTsNCi0NCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dhaXQgQmFzZUNsayBzdGFibGUgMHgxQ0MgYml0 MTQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjUndNbWlv IChQY2lJbywgU2xvdCwgMHgxQ0MsIFRSVUUsIHNpemVvZih2YWx1ZTMyKSwgJnZhbHVlMzIpOw0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCEodmFsdWUzMiZCSVQxNCkpew0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnQlMtPlN0YWxs KDEwMCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXR1cyA9IFNkTW1jSGNSd01taW8gKFBjaUlvLCBTbG90LCAweDFDQywgVFJVRSwgc2l6ZW9mKHZh bHVlMzIpLCAmdmFsdWUzMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERiZ01zZyhMIjFDQz0weCUwOHhcbiIsIHZhbHVlMzIpOw0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAodmFsdWUzMiAmIEJJVDE4KQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vV2FpdCAybmQgQ2FyZCBEZXRlY3QgZGVi b3VuY2UgRmluaXNoZWQgYnkgd2FpdCB0d2ljZSBvZiBkZWJvdW5jZSBtYXggdGltZQ0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIFNE X01NQ19IQ19QUkVTRU5UX1NUQVRFLCBUUlVFLCBzaXplb2YodmFsdWUzMiksICZ2YWx1ZTMyKTsN Ci0gICAgICAgICAgICBpZiAoKCh2YWx1ZTMyID4+IDE2KSAmIDB4MDEpID09ICgodmFsdWUzMiA+ PiAxOCkgJiAweDAxKSkNCi0gICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3Jj ZSBwbGwgYWN0aXZlIGVuZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz ID0gU2RNbWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIDB4MUNDLCBUUlVFLCBzaXplb2YodmFsdWUz MiksICZ2YWx1ZTMyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlMzIg Jj0gfkJJVDE4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU2RN bWNIY1J3TW1pbyAoUGNpSW8sIFNsb3QsIDB4MUNDLCBGQUxTRSwgc2l6ZW9mKHZhbHVlMzIpLCAm dmFsdWUzMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IFNkTW1jSGNJbml0UG93ZXJWb2x0YWdlIChQ Y2lJbywgU2xvdCwgQ2FwYWJpbGl0eSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEYmdNc2coTCJlbW1jIGhvc3QgaW5pdCBmYWlsdXJlXG4iKTsNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1czsNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9DQotDQotDQotICB9DQotDQotICBTdGF0dXMgPSBTZE1tY0hjSW5pdENsb2Nr RnJlcSAoUGNpSW8sIFNsb3QsIENhcGFiaWxpdHkpOw0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KLSAgICByZXR1cm4gU3RhdHVzOw0KLSAgfQ0KLQ0KLSAgaWYgKCFCaHRIb3N0UGNpU3Vw cG9ydChQY2lJbykpew0KLSAgICAgICAgICAgICAgICBTdGF0dXMgPSBTZE1tY0hjSW5pdFBvd2Vy Vm9sdGFnZSAoUGNpSW8sIFNsb3QsIENhcGFiaWxpdHkpOw0KLSAgICAgICAgICAgICAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1czsN Ci0gICAgICAgICAgICAgICAgfQ0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7 DQorICBFRklfUENJX0lPX1BST1RPQ09MICAgICAgICpQY2lJbzsNCisgIFNEX01NQ19IQ19TTE9U X0NBUCAgICAgICAgQ2FwYWJpbGl0eTsNCisNCisgIC8vDQorICAvLyBOb3RpZnkgdGhlIFNEL01N QyBvdmVycmlkZSBwcm90b2NvbCB0aGF0IHdlIGFyZSBhYm91dCB0byBpbml0aWFsaXplDQorICAv LyB0aGUgU0QvTU1DIGhvc3QgY29udHJvbGxlci4NCisgIC8vDQorICBpZiAobU92ZXJyaWRlICE9 IE5VTEwgJiYgbU92ZXJyaWRlLT5Ob3RpZnlQaGFzZSAhPSBOVUxMKSB7DQorICAgIFN0YXR1cyA9 IG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHJp dmF0ZS0+Q29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qs DQorICAgICAgICAgICAgICAgICAgICAgICAgICBFZGtpaVNkTW1jSW5pdEhvc3RQcmUsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KKyAgICAgIERFQlVHICgoREVCVUdfV0FSTiwNCisgICAgICAgICIlYTogU0QvTU1DIHBy ZSBpbml0IG5vdGlmaWVyIGNhbGxiYWNrIGZhaWxlZCAtICVyXG4iLA0KKyAgICAgICAgX19GVU5D VElPTl9fLCBTdGF0dXMpKTsNCisgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICB9DQor DQorICBQY2lJbyA9IFByaXZhdGUtPlBjaUlvOw0KKyAgQ2FwYWJpbGl0eSA9IFByaXZhdGUtPkNh cGFiaWxpdHlbU2xvdF07DQorDQorICBTdGF0dXMgPSBTZE1tY0hjSW5pdFY0RW5oYW5jZW1lbnRz IChQY2lJbywgU2xvdCwgQ2FwYWJpbGl0eSwgUHJpdmF0ZS0+Q29udHJvbGxlclZlcnNpb25bU2xv dF0pOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0K KyAgfQ0KKw0KKyAgU3RhdHVzID0gU2RNbWNIY0luaXRDbG9ja0ZyZXEgKFBjaUlvLCBTbG90LCBQ cml2YXRlLT5CYXNlQ2xrRnJlcVtTbG90XSwgUHJpdmF0ZS0+Q29udHJvbGxlclZlcnNpb25bU2xv dF0pOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0K ICAgfQ0KLQ0KKw0KKyAgU3RhdHVzID0gU2RNbWNIY0luaXRQb3dlclZvbHRhZ2UgKFBjaUlvLCBT bG90LCBDYXBhYmlsaXR5KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0 dXJuIFN0YXR1czsNCisgIH0NCisNCiAgIFN0YXR1cyA9IFNkTW1jSGNJbml0VGltZW91dEN0cmwg KFBjaUlvLCBTbG90KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJu IFN0YXR1czsNCisgIH0NCisNCisgIC8vDQorICAvLyBOb3RpZnkgdGhlIFNEL01NQyBvdmVycmlk ZSBwcm90b2NvbCB0aGF0IHdlIGFyZSBoYXZlIGp1c3QgaW5pdGlhbGl6ZWQNCisgIC8vIHRoZSBT RC9NTUMgaG9zdCBjb250cm9sbGVyLg0KKyAgLy8NCisgIGlmIChtT3ZlcnJpZGUgIT0gTlVMTCAm JiBtT3ZlcnJpZGUtPk5vdGlmeVBoYXNlICE9IE5VTEwpIHsNCisgICAgU3RhdHVzID0gbU92ZXJy aWRlLT5Ob3RpZnlQaGFzZSAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICBQcml2YXRlLT5D b250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgIEVka2lpU2RNbWNJbml0SG9zdFBvc3QsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyAgICAgIERFQlVHICgoREVCVUdfV0FSTiwNCisgICAgICAgICIlYTogU0QvTU1DIHBvc3QgaW5p dCBub3RpZmllciBjYWxsYmFjayBmYWlsZWQgLSAlclxuIiwNCisgICAgICAgIF9fRlVOQ1RJT05f XywgU3RhdHVzKSk7DQorICAgIH0NCisgIH0NCiAgIHJldHVybiBTdGF0dXM7DQp9DQoNCiAvKioN CisgIFNldCBTRCBIb3N0IENvbnRyb2xlciBjb250cm9sIDIgcmVnaXN0cnkgYWNjb3JkaW5nIHRv IHNlbGVjdGVkIHNwZWVkLg0KKw0KKyAgQHBhcmFtW2luXSBDb250cm9sbGVySGFuZGxlIFRoZSBo YW5kbGUgb2YgdGhlIGNvbnRyb2xsZXIuDQorICBAcGFyYW1baW5dIFBjaUlvICAgICAgICAgICAg VGhlIFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gU2xvdCAgICAgICAg ICAgICBUaGUgc2xvdCBudW1iZXIgb2YgdGhlIFNEIGNhcmQgdG8gc2VuZCB0aGUgY29tbWFuZCB0 by4NCisgIEBwYXJhbVtpbl0gVGltaW5nICAgICAgICAgICBUaGUgdGltaW5nIHRvIHNlbGVjdC4N CisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICBUaGUgdGltaW5nIGlzIHNldCBzdWNj ZXNzZnVsbHkuDQorICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgVGhlIHRpbWluZyBpc24n dCBzZXQgc3VjY2Vzc2Z1bGx5Lg0KKyoqLw0KK0VGSV9TVEFUVVMNCitTZE1tY0hjVWhzU2lnbmFs aW5nICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCisg IElOIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgKlBjaUlvLA0KKyAgSU4gVUlOVDggICAgICAgICAg ICAgICAgICBTbG90LA0KKyAgSU4gU0RfTU1DX0JVU19NT0RFICAgICAgICBUaW1pbmcNCisgICkN Cit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICBIb3N0Q3RybDI7DQorDQorICBIb3N0Q3RybDIgPSAoVUlOVDgpflNE X01NQ19IQ19DVFJMX1VIU19NQVNLOw0KKyAgU3RhdHVzID0gU2RNbWNIY0FuZE1taW8gKFBjaUlv LCBTbG90LCBTRF9NTUNfSENfSE9TVF9DVFJMMiwgc2l6ZW9mIChIb3N0Q3RybDIpLCAmSG9zdEN0 cmwyKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsN CisgIH0NCisNCisgIHN3aXRjaCAoVGltaW5nKSB7DQorICAgIGNhc2UgU2RNbWNVaHNTZHIxMjoN CisgICAgICBIb3N0Q3RybDIgPSBTRF9NTUNfSENfQ1RSTF9VSFNfU0RSMTI7DQorICAgICAgYnJl YWs7DQorICAgIGNhc2UgU2RNbWNVaHNTZHIyNToNCisgICAgICBIb3N0Q3RybDIgPSBTRF9NTUNf SENfQ1RSTF9VSFNfU0RSMjU7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgU2RNbWNVaHNTZHI1 MDoNCisgICAgICBIb3N0Q3RybDIgPSBTRF9NTUNfSENfQ1RSTF9VSFNfU0RSNTA7DQorICAgICAg YnJlYWs7DQorICAgIGNhc2UgU2RNbWNVaHNTZHIxMDQ6DQorICAgICAgSG9zdEN0cmwyID0gU0Rf TU1DX0hDX0NUUkxfVUhTX1NEUjEwNDsNCisgICAgICBicmVhazsNCisgICAgY2FzZSBTZE1tY1Vo c0RkcjUwOg0KKyAgICAgIEhvc3RDdHJsMiA9IFNEX01NQ19IQ19DVFJMX1VIU19ERFI1MDsNCisg ICAgICBicmVhazsNCisgICAgY2FzZSBTZE1tY01tY0xlZ2FjeToNCisgICAgICBIb3N0Q3RybDIg PSBTRF9NTUNfSENfQ1RSTF9NTUNfTEVHQUNZOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFNk TW1jTW1jSHNTZHI6DQorICAgICAgSG9zdEN0cmwyID0gU0RfTU1DX0hDX0NUUkxfTU1DX0hTX1NE UjsNCisgICAgICBicmVhazsNCisgICAgY2FzZSBTZE1tY01tY0hzRGRyOg0KKyAgICAgIEhvc3RD dHJsMiA9IFNEX01NQ19IQ19DVFJMX01NQ19IU19ERFI7DQorICAgICAgYnJlYWs7DQorICAgIGNh c2UgU2RNbWNNbWNIczIwMDoNCisgICAgICBIb3N0Q3RybDIgPSBTRF9NTUNfSENfQ1RSTF9NTUNf SFMyMDA7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgU2RNbWNNbWNIczQwMDoNCisgICAgICBI b3N0Q3RybDIgPSBTRF9NTUNfSENfQ1RSTF9NTUNfSFM0MDA7DQorICAgICAgYnJlYWs7DQorICAg IGRlZmF1bHQ6DQorICAgICBIb3N0Q3RybDIgPSAwOw0KKyAgICAgYnJlYWs7DQorICB9DQorICBT dGF0dXMgPSBTZE1tY0hjT3JNbWlvIChQY2lJbywgU2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIs IHNpemVvZiAoSG9zdEN0cmwyKSwgJkhvc3RDdHJsMik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBpZiAobU92ZXJyaWRlICE9 IE5VTEwgJiYgbU92ZXJyaWRlLT5Ob3RpZnlQaGFzZSAhPSBOVUxMKSB7DQorICAgIFN0YXR1cyA9 IG1PdmVycmlkZS0+Tm90aWZ5UGhhc2UgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3QsDQorICAgICAg ICAgICAgICAgICAgICAgICAgICBFZGtpaVNkTW1jVWhzU2lnbmFsaW5nLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgJlRpbWluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIERFQlVHICgoDQorICAgICAgICBE RUJVR19FUlJPUiwNCisgICAgICAgICIlYTogU0QvTU1DIHVocyBzaWduYWxpbmcgbm90aWZpZXIg Y2FsbGJhY2sgZmFpbGVkIC0gJXJcbiIsDQorICAgICAgICBfX0ZVTkNUSU9OX18sDQorICAgICAg ICBTdGF0dXMNCisgICAgICAgICkpOw0KKyAgICAgIHJldHVybiBTdGF0dXM7DQorICAgIH0NCisg IH0NCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQogICBUdXJuIG9uL29m ZiBMRUQuDQoNCiAgIEBwYXJhbVtpbl0gUGNpSW8gICAgICAgICAgVGhlIFBDSSBJTyBwcm90b2Nv bCBpbnN0YW5jZS4NCkBAIC0xMTY2LDkgKzEzNDksMTAgQEAgU2RNbWNIY0xlZE9uT2ZmICgNCi8q Kg0KICAgQnVpbGQgQURNQSBkZXNjcmlwdG9yIHRhYmxlIGZvciB0cmFuc2Zlci4NCg0KLSAgUmVm ZXIgdG8gU0QgSG9zdCBDb250cm9sbGVyIFNpbXBsaWZpZWQgc3BlYyAzLjAgU2VjdGlvbiAxLjEz IGZvciBkZXRhaWxzLg0KKyAgUmVmZXIgdG8gU0QgSG9zdCBDb250cm9sbGVyIFNpbXBsaWZpZWQg c3BlYyA0LjIgU2VjdGlvbiAxLjEzIGZvciBkZXRhaWxzLg0KDQogICBAcGFyYW1baW5dIFRyYiAg ICAgICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBTRF9NTUNfSENfVFJCIGluc3RhbmNlLg0KKyAg QHBhcmFtW2luXSBDb250cm9sbGVyVmVyICBUaGUgdmVyc2lvbiBvZiBob3N0IGNvbnRyb2xsZXIu DQoNCiAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIEFETUEgZGVzY3JpcHRvciB0YWJs ZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4NCiAgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAg VGhlIEFETUEgZGVzY3JpcHRvciB0YWJsZSBpc24ndCBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4NCkBA IC0xMTc2LDcgKzEzNjAsOCBAQCBTZE1tY0hjTGVkT25PZmYgKA0KKiovDQpFRklfU1RBVFVTDQpC dWlsZEFkbWFEZXNjVGFibGUgKA0KLSAgSU4gU0RfTU1DX0hDX1RSQiAgICAgICAgICAqVHJiDQor ICBJTiBTRF9NTUNfSENfVFJCICAgICAgICAgICpUcmIsDQorICBJTiBVSU5UMTYgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJWZXINCiAgICkNCnsNCiAgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg ICAgRGF0YTsNCkBAIC0xMTg0LDQ5ICsxMzY5LDkzIEBAIEJ1aWxkQWRtYURlc2NUYWJsZSAoDQog ICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEVudHJpZXM7DQogICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBSZW1haW5pbmc7 DQotICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEFkZHJlc3M7DQorICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgIEFkZHJlc3M7DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFRhYmxl U2l6ZTsNCiAgIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgICAgKlBjaUlvOw0KICAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICBTdGF0dXM7DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEJ5 dGVzOw0KKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICBBZGRyZXNzaW5nTW9kZTY0Ow0KKyAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoMjY7DQorICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIEFkbWFNYXhEYXRhUGVyTGluZTsNCisgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgRGVzY1NpemU7DQorICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpBZG1hRGVzYzsN CisNCisgIEFkZHJlc3NpbmdNb2RlNjQgICA9IEZBTFNFOw0KKyAgRGF0YUxlbmd0aDI2ICAgICAg ID0gRkFMU0U7DQorICBBZG1hTWF4RGF0YVBlckxpbmUgPSBBRE1BX01BWF9EQVRBX1BFUl9MSU5F XzE2QjsNCisgIERlc2NTaXplICAgICAgICAgICA9IHNpemVvZiAoU0RfTU1DX0hDX0FETUFfMzJf REVTQ19MSU5FKTsNCisgIEFkbWFEZXNjICAgICAgICAgICA9IE5VTEw7DQoNCiAgIERhdGEgICAg PSBUcmItPkRhdGFQaHk7DQogICBEYXRhTGVuID0gVHJiLT5EYXRhTGVuOw0KICAgUGNpSW8gICA9 IFRyYi0+UHJpdmF0ZS0+UGNpSW87DQorDQogICAvLw0KLSAgLy8gT25seSBzdXBwb3J0IDMyYml0 IEFETUEgRGVzY3JpcHRvciBUYWJsZQ0KKyAgLy8gRGV0ZWN0IHdoZXRoZXIgNjRiaXQgYWRkcmVz c2luZyBpcyBzdXBwb3J0ZWQuDQogICAvLw0KLSAgaWYgKChEYXRhID49IDB4MTAwMDAwMDAwdWwp IHx8ICgoRGF0YSArIERhdGFMZW4pID4gMHgxMDAwMDAwMDB1bCkpIHsNCisgIGlmIChDb250cm9s bGVyVmVyID49IFNEX01NQ19IQ19DVFJMX1ZFUl80MDApIHsNCisgICAgU3RhdHVzID0gU2RNbWNI Y0NoZWNrTW1pb1NldChQY2lJbywgVHJiLT5TbG90LCBTRF9NTUNfSENfSE9TVF9DVFJMMiwgc2l6 ZW9mKFVJTlQxNiksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RfTU1DX0hD X1Y0X0VOfFNEX01NQ19IQ182NF9BRERSX0VOLCBTRF9NTUNfSENfVjRfRU58U0RfTU1DX0hDXzY0 X0FERFJfRU4pOw0KKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIEFkZHJl c3NpbmdNb2RlNjQgPSBUUlVFOw0KKyAgICAgIERlc2NTaXplID0gc2l6ZW9mIChTRF9NTUNfSENf QURNQV82NF9ERVNDX0xJTkUpOw0KKyAgICB9DQorICB9DQorICAvLw0KKyAgLy8gQ2hlY2sgZm9y IHZhbGlkIHJhbmdlcyBpbiAzMmJpdCBBRE1BIERlc2NyaXB0b3IgVGFibGUNCisgIC8vDQorICBp ZiAoIUFkZHJlc3NpbmdNb2RlNjQgJiYNCisgICAgICAoKERhdGEgPj0gMHgxMDAwMDAwMDB1bCkg fHwgKChEYXRhICsgRGF0YUxlbikgPiAweDEwMDAwMDAwMHVsKSkpIHsNCiAgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCiAgIH0NCiAgIC8vDQotICAvLyBBZGRyZXNzIGZpZWxkIHNo YWxsIGJlIHNldCBvbiAzMi1iaXQgYm91bmRhcnkgKExvd2VyIDItYml0IGlzIGFsd2F5cyBzZXQg dG8gMCkNCi0gIC8vIGZvciAzMi1iaXQgYWRkcmVzcyBkZXNjcmlwdG9yIHRhYmxlLg0KKyAgLy8g Q2hlY2sgYWRkcmVzcyBmaWVsZCBhbGlnbm1lbnQNCiAgIC8vDQotICBpZiAoKERhdGEgJiAoQklU MCB8IEJJVDEpKSAhPSAwKSB7DQotICAgIERFQlVHICgoREVCVUdfSU5GTywgIlRoZSBidWZmZXIg WzB4JXhdIHRvIGNvbnN0cnVjdCBBRE1BIGRlc2MgaXMgbm90IGFsaWduZWQgdG8gNCBieXRlcyBi b3VuZGFyeSFcbiIsIERhdGEpKTsNCisgIGlmIChBZGRyZXNzaW5nTW9kZTY0KSB7DQorICAgIC8v DQorICAgIC8vIEFkZHJlc3MgZmllbGQgc2hhbGwgYmUgc2V0IG9uIDY0LWJpdCBib3VuZGFyeSAo TG93ZXIgMy1iaXQgaXMgYWx3YXlzIHNldCB0byAwKQ0KKyAgICAvLw0KKyAgICBpZiAoKERhdGEg JiAoQklUMCB8IEJJVDEgfCBCSVQyKSkgIT0gMCkgew0KKyAgICAgIERFQlVHICgoREVCVUdfSU5G TywgIlRoZSBidWZmZXIgWzB4JXhdIHRvIGNvbnN0cnVjdCBBRE1BIGRlc2MgaXMgbm90IGFsaWdu ZWQgdG8gOCBieXRlcyBib3VuZGFyeSFcbiIsIERhdGEpKTsNCisgICAgfQ0KKyAgfSBlbHNlIHsN CisgICAgLy8NCisgICAgLy8gQWRkcmVzcyBmaWVsZCBzaGFsbCBiZSBzZXQgb24gMzItYml0IGJv dW5kYXJ5IChMb3dlciAyLWJpdCBpcyBhbHdheXMgc2V0IHRvIDApDQorICAgIC8vDQorICAgIGlm ICgoRGF0YSAmIChCSVQwIHwgQklUMSkpICE9IDApIHsNCisgICAgICBERUJVRyAoKERFQlVHX0lO Rk8sICJUaGUgYnVmZmVyIFsweCV4XSB0byBjb25zdHJ1Y3QgQURNQSBkZXNjIGlzIG5vdCBhbGln bmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkhXG4iLCBEYXRhKSk7DQorICAgIH0NCisgIH0NCisgIC8v DQorICAvLyBEZXRlY3Qgd2hldGhlciAyNmJpdCBkYXRhIGxlbmd0aCBpcyBzdXBwb3J0ZWQuDQor ICAvLw0KKyAgU3RhdHVzID0gU2RNbWNIY0NoZWNrTW1pb1NldChQY2lJbywgVHJiLT5TbG90LCBT RF9NTUNfSENfSE9TVF9DVFJMMiwgc2l6ZW9mKFVJTlQxNiksDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNEX01NQ19IQ18yNl9EQVRBX0xFTl9BRE1BX0VOLCBTRF9NTUNfSENfMjZf REFUQV9MRU5fQURNQV9FTik7DQorICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBE YXRhTGVuZ3RoMjYgPSBUUlVFOw0KKyAgICBBZG1hTWF4RGF0YVBlckxpbmUgPSBBRE1BX01BWF9E QVRBX1BFUl9MSU5FXzI2QjsNCiAgIH0NCg0KLSAgRW50cmllcyAgID0gRGl2VTY0eDMyICgoRGF0 YUxlbiArIEFETUFfTUFYX0RBVEFfUEVSX0xJTkUgLSAxKSwgQURNQV9NQVhfREFUQV9QRVJfTElO RSk7DQotICBUYWJsZVNpemUgPSAoVUlOVE4pTXVsdFU2NHgzMiAoRW50cmllcywgc2l6ZW9mIChT RF9NTUNfSENfQURNQV9ERVNDX0xJTkUpKTsNCisgIEVudHJpZXMgICA9IERpdlU2NHgzMiAoKERh dGFMZW4gKyBBZG1hTWF4RGF0YVBlckxpbmUgLSAxKSwgQWRtYU1heERhdGFQZXJMaW5lKTsNCisg IFRhYmxlU2l6ZSA9IChVSU5UTilNdWx0VTY0eDMyIChFbnRyaWVzLCBEZXNjU2l6ZSk7DQogICBU cmItPkFkbWFQYWdlcyA9IChVSU5UMzIpRUZJX1NJWkVfVE9fUEFHRVMgKFRhYmxlU2l6ZSk7DQog ICBTdGF0dXMgPSBQY2lJby0+QWxsb2NhdGVCdWZmZXIgKA0KICAgICAgICAgICAgICAgICAgICAg UGNpSW8sDQogICAgICAgICAgICAgICAgICAgICBBbGxvY2F0ZUFueVBhZ2VzLA0KICAgICAgICAg ICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCiAgICAgICAgICAgICAgICAgICAgIEVG SV9TSVpFX1RPX1BBR0VTIChUYWJsZVNpemUpLA0KLSAgICAgICAgICAgICAgICAgICAgKFZPSUQg KiopJlRyYi0+QWRtYURlc2MsDQorICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmQWRtYURl c2MsDQogICAgICAgICAgICAgICAgICAgICAwDQogICAgICAgICAgICAgICAgICAgICApOw0KICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQogICB9DQotICBaZXJvTWVtIChUcmItPkFkbWFEZXNjLCBUYWJsZVNpemUpOw0KKyAgWmVy b01lbSAoQWRtYURlc2MsIFRhYmxlU2l6ZSk7DQogICBCeXRlcyAgPSBUYWJsZVNpemU7DQogICBT dGF0dXMgPSBQY2lJby0+TWFwICgNCiAgICAgICAgICAgICAgICAgICAgIFBjaUlvLA0KICAgICAg ICAgICAgICAgICAgICAgRWZpUGNpSW9PcGVyYXRpb25CdXNNYXN0ZXJDb21tb25CdWZmZXIsDQot ICAgICAgICAgICAgICAgICAgICBUcmItPkFkbWFEZXNjLA0KKyAgICAgICAgICAgICAgICAgICAg QWRtYURlc2MsDQogICAgICAgICAgICAgICAgICAgICAmQnl0ZXMsDQogICAgICAgICAgICAgICAg ICAgICAmVHJiLT5BZG1hRGVzY1BoeSwNCiAgICAgICAgICAgICAgICAgICAgICZUcmItPkFkbWFN YXANCkBAIC0xMjM5LDEyICsxNDY4LDEzIEBAIEJ1aWxkQWRtYURlc2NUYWJsZSAoDQogICAgIFBj aUlvLT5GcmVlQnVmZmVyICgNCiAgICAgICAgICAgICAgUGNpSW8sDQogICAgICAgICAgICAgIEVG SV9TSVpFX1RPX1BBR0VTIChUYWJsZVNpemUpLA0KLSAgICAgICAgICAgICBUcmItPkFkbWFEZXNj DQorICAgICAgICAgICAgIEFkbWFEZXNjDQogICAgICAgICAgICAgICk7DQogICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCiAgIH0NCg0KLSAgaWYgKChVSU5UNjQpKFVJTlROKVRyYi0+ QWRtYURlc2NQaHkgPiAweDEwMDAwMDAwMHVsKSB7DQorICBpZiAoKCFBZGRyZXNzaW5nTW9kZTY0 KSAmJg0KKyAgICAgIChVSU5UNjQpKFVJTlROKVRyYi0+QWRtYURlc2NQaHkgPiAweDEwMDAwMDAw MHVsKSB7DQogICAgIC8vDQogICAgIC8vIFRoZSBBRE1BIGRvZXNuJ3Qgc3VwcG9ydCA2NGJpdCBh ZGRyZXNzaW5nLg0KICAgICAvLw0KQEAgLTEyNTUsMzUgKzE0ODUsNzEgQEAgQnVpbGRBZG1hRGVz Y1RhYmxlICgNCiAgICAgUGNpSW8tPkZyZWVCdWZmZXIgKA0KICAgICAgIFBjaUlvLA0KICAgICAg IEVGSV9TSVpFX1RPX1BBR0VTIChUYWJsZVNpemUpLA0KLSAgICAgIFRyYi0+QWRtYURlc2MNCisg ICAgICBBZG1hRGVzYw0KICAgICApOw0KICAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCiAg IH0NCg0KICAgUmVtYWluaW5nID0gRGF0YUxlbjsNCi0gIEFkZHJlc3MgICA9IChVSU5UMzIpRGF0 YTsNCisgIEFkZHJlc3MgICA9IERhdGE7DQorICBpZiAoIUFkZHJlc3NpbmdNb2RlNjQpIHsNCisg ICAgVHJiLT5BZG1hMzJEZXNjID0gQWRtYURlc2M7DQorICAgIFRyYi0+QWRtYTY0RGVzYyA9IE5V TEw7DQorICB9IGVsc2Ugew0KKyAgICBUcmItPkFkbWE2NERlc2MgPSBBZG1hRGVzYzsNCisgICAg VHJiLT5BZG1hMzJEZXNjID0gTlVMTDsNCisgIH0NCiAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IEVudHJpZXM7IEluZGV4KyspIHsNCi0gICAgaWYgKFJlbWFpbmluZyA8PSBBRE1BX01BWF9EQVRB X1BFUl9MSU5FKSB7DQotICAgICAgVHJiLT5BZG1hRGVzY1tJbmRleF0uVmFsaWQgPSAxOw0KLSAg ICAgIFRyYi0+QWRtYURlc2NbSW5kZXhdLkFjdCAgID0gMjsNCi0gICAgICBUcmItPkFkbWFEZXNj W0luZGV4XS5MZW5ndGggID0gKFVJTlQxNilSZW1haW5pbmc7DQotICAgICAgVHJiLT5BZG1hRGVz Y1tJbmRleF0uQWRkcmVzcyA9IEFkZHJlc3M7DQotICAgICAgYnJlYWs7DQorICAgIGlmICghQWRk cmVzc2luZ01vZGU2NCkgew0KKyAgICAgIGlmIChSZW1haW5pbmcgPD0gQWRtYU1heERhdGFQZXJM aW5lKSB7DQorICAgICAgICBUcmItPkFkbWEzMkRlc2NbSW5kZXhdLlZhbGlkID0gMTsNCisgICAg ICAgIFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uQWN0ICAgPSAyOw0KKyAgICAgICAgaWYgKERhdGFM ZW5ndGgyNikgew0KKyAgICAgICAgICBUcmItPkFkbWEzMkRlc2NbSW5kZXhdLlVwcGVyTGVuZ3Ro ID0gKFVJTlQxNilSU2hpZnRVNjQgKFJlbWFpbmluZywgMTYpOw0KKyAgICAgICAgfQ0KKyAgICAg ICAgVHJiLT5BZG1hMzJEZXNjW0luZGV4XS5Mb3dlckxlbmd0aCA9IChVSU5UMTYpKFJlbWFpbmlu ZyAmIE1BWF9VSU5UMTYpOw0KKyAgICAgICAgVHJiLT5BZG1hMzJEZXNjW0luZGV4XS5BZGRyZXNz ID0gKFVJTlQzMilBZGRyZXNzOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfSBlbHNlIHsNCisg ICAgICAgIFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uVmFsaWQgPSAxOw0KKyAgICAgICAgVHJiLT5B ZG1hMzJEZXNjW0luZGV4XS5BY3QgICA9IDI7DQorICAgICAgICBpZiAoRGF0YUxlbmd0aDI2KSB7 DQorICAgICAgICAgIFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uVXBwZXJMZW5ndGggID0gMDsNCisg ICAgICAgIH0NCisgICAgICAgIFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uTG93ZXJMZW5ndGggID0g MDsNCisgICAgICAgIFRyYi0+QWRtYTMyRGVzY1tJbmRleF0uQWRkcmVzcyA9IChVSU5UMzIpQWRk cmVzczsNCisgICAgICB9DQogICAgIH0gZWxzZSB7DQotICAgICAgVHJiLT5BZG1hRGVzY1tJbmRl eF0uVmFsaWQgPSAxOw0KLSAgICAgIFRyYi0+QWRtYURlc2NbSW5kZXhdLkFjdCAgID0gMjsNCi0g ICAgICBUcmItPkFkbWFEZXNjW0luZGV4XS5MZW5ndGggID0gMDsNCi0gICAgICBUcmItPkFkbWFE ZXNjW0luZGV4XS5BZGRyZXNzID0gQWRkcmVzczsNCisgICAgICBpZiAoUmVtYWluaW5nIDw9IEFk bWFNYXhEYXRhUGVyTGluZSkgew0KKyAgICAgICAgVHJiLT5BZG1hNjREZXNjW0luZGV4XS5WYWxp ZCA9IDE7DQorICAgICAgICBUcmItPkFkbWE2NERlc2NbSW5kZXhdLkFjdCAgID0gMjsNCisgICAg ICAgIGlmIChEYXRhTGVuZ3RoMjYpIHsNCisgICAgICAgICAgVHJiLT5BZG1hNjREZXNjW0luZGV4 XS5VcHBlckxlbmd0aCAgPSAoVUlOVDE2KVJTaGlmdFU2NCAoUmVtYWluaW5nLCAxNik7DQorICAg ICAgICB9DQorICAgICAgICBUcmItPkFkbWE2NERlc2NbSW5kZXhdLkxvd2VyTGVuZ3RoICA9IChV SU5UMTYpKFJlbWFpbmluZyAmIE1BWF9VSU5UMTYpOw0KKyAgICAgICAgVHJiLT5BZG1hNjREZXNj W0luZGV4XS5Mb3dlckFkZHJlc3MgPSAoVUlOVDMyKUFkZHJlc3M7DQorICAgICAgICBUcmItPkFk bWE2NERlc2NbSW5kZXhdLlVwcGVyQWRkcmVzcyA9IChVSU5UMzIpUlNoaWZ0VTY0IChBZGRyZXNz LCAzMik7DQorICAgICAgICBicmVhazsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgVHJiLT5B ZG1hNjREZXNjW0luZGV4XS5WYWxpZCA9IDE7DQorICAgICAgICBUcmItPkFkbWE2NERlc2NbSW5k ZXhdLkFjdCAgID0gMjsNCisgICAgICAgIGlmIChEYXRhTGVuZ3RoMjYpIHsNCisgICAgICAgICAg VHJiLT5BZG1hNjREZXNjW0luZGV4XS5VcHBlckxlbmd0aCAgPSAwOw0KKyAgICAgICAgfQ0KKyAg ICAgICAgVHJiLT5BZG1hNjREZXNjW0luZGV4XS5Mb3dlckxlbmd0aCAgPSAwOw0KKyAgICAgICAg VHJiLT5BZG1hNjREZXNjW0luZGV4XS5Mb3dlckFkZHJlc3MgPSAoVUlOVDMyKUFkZHJlc3M7DQor ICAgICAgICBUcmItPkFkbWE2NERlc2NbSW5kZXhdLlVwcGVyQWRkcmVzcyA9IChVSU5UMzIpUlNo aWZ0VTY0IChBZGRyZXNzLCAzMik7DQorICAgICAgfQ0KICAgICB9DQoNCi0gICAgUmVtYWluaW5n IC09IEFETUFfTUFYX0RBVEFfUEVSX0xJTkU7DQotICAgIEFkZHJlc3MgICArPSBBRE1BX01BWF9E QVRBX1BFUl9MSU5FOw0KKyAgICBSZW1haW5pbmcgLT0gQWRtYU1heERhdGFQZXJMaW5lOw0KKyAg ICBBZGRyZXNzICAgKz0gQWRtYU1heERhdGFQZXJMaW5lOw0KICAgfQ0KDQogICAvLw0KICAgLy8g U2V0IHRoZSBsYXN0IGRlc2NyaXB0b3IgbGluZSBhcyBlbmQgb2YgZGVzY3JpcHRvciB0YWJsZQ0K ICAgLy8NCi0gIFRyYi0+QWRtYURlc2NbSW5kZXhdLkVuZCA9IDE7DQorICBBZGRyZXNzaW5nTW9k ZTY0ID8gKFRyYi0+QWRtYTY0RGVzY1tJbmRleF0uRW5kID0gMSkgOiAoVHJiLT5BZG1hMzJEZXNj W0luZGV4XS5FbmQgPSAxKTsNCiAgIHJldHVybiBFRklfU1VDQ0VTUzsNCn0NCg0KQEAgLTEzODEs NyArMTY0Nyw3IEBAIFNkTW1jQ3JlYXRlVHJiICgNCiAgICAgICBUcmItPk1vZGUgPSBTZE1tY05v RGF0YTsNCiAgICAgfSBlbHNlIGlmIChQcml2YXRlLT5DYXBhYmlsaXR5W1Nsb3RdLkFkbWEyICE9 IDApIHsNCiAgICAgICBUcmItPk1vZGUgPSBTZE1tY0FkbWFNb2RlOw0KLSAgICAgIFN0YXR1cyA9 IEJ1aWxkQWRtYURlc2NUYWJsZSAoVHJiKTsNCisgICAgICBTdGF0dXMgPSBCdWlsZEFkbWFEZXNj VGFibGUgKFRyYiwgUHJpdmF0ZS0+Q29udHJvbGxlclZlcnNpb25bU2xvdF0pOw0KICAgICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCiAgICAgICAgIFBjaUlvLT5Vbm1hcCAoUGNpSW8sIFRy Yi0+RGF0YU1hcCk7DQogICAgICAgICBnb3RvIEVycm9yOw0KQEAgLTE0MjcsMTEgKzE2OTMsMTgg QEAgU2RNbWNGcmVlVHJiICgNCiAgICAgICBUcmItPkFkbWFNYXANCiAgICAgKTsNCiAgIH0NCi0g IGlmIChUcmItPkFkbWFEZXNjICE9IE5VTEwpIHsNCisgIGlmIChUcmItPkFkbWEzMkRlc2MgIT0g TlVMTCkgew0KKyAgICBQY2lJby0+RnJlZUJ1ZmZlciAoDQorICAgICAgUGNpSW8sDQorICAgICAg VHJiLT5BZG1hUGFnZXMsDQorICAgICAgVHJiLT5BZG1hMzJEZXNjDQorICAgICk7DQorICB9DQor ICBpZiAoVHJiLT5BZG1hNjREZXNjICE9IE5VTEwpIHsNCiAgICAgUGNpSW8tPkZyZWVCdWZmZXIg KA0KICAgICAgIFBjaUlvLA0KICAgICAgIFRyYi0+QWRtYVBhZ2VzLA0KLSAgICAgIFRyYi0+QWRt YURlc2MNCisgICAgICBUcmItPkFkbWE2NERlc2MNCiAgICAgKTsNCiAgIH0NCiAgIGlmIChUcmIt PkRhdGFNYXAgIT0gTlVMTCkgew0KQEAgLTE1NzEsMTIgKzE4NDQsMTUgQEAgU2RNbWNFeGVjVHJi ICgNCiAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENtZDsNCiAgIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFN0YXR1czsNCiAgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50Ow0KLSAgVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQmxrQ291bnQ7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCbGtDb3VudDsNCiAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJsa1NpemU7DQogICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFu c01vZGU7DQogICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0Q3RybDE7 DQotICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZG1hQWRkcjsNCisgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkbWFBZGRyOw0KICAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRtYUFkZHI7DQorICBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzaW5nTW9kZTY0Ow0KKw0KKyAgQWRkcmVzc2luZ01v ZGU2NCA9IEZBTFNFOw0KDQogICBQYWNrZXQgPSBUcmItPlBhY2tldDsNCiAgIFBjaUlvICA9IFRy Yi0+UHJpdmF0ZS0+UGNpSW87DQpAQCAtMTYwOSwxMyArMTg4NSwyOCBAQCBTZE1tY0V4ZWNUcmIg KA0KDQogICBTZE1tY0hjTGVkT25PZmYgKFBjaUlvLCBUcmItPlNsb3QsIFRSVUUpOw0KDQorICBp ZiAoUHJpdmF0ZS0+Q29udHJvbGxlclZlcnNpb25bVHJiLT5TbG90XSA+PSBTRF9NTUNfSENfQ1RS TF9WRVJfNDAwKSB7DQorICAgIFN0YXR1cyA9IFNkTW1jSGNDaGVja01taW9TZXQoUGNpSW8sIFRy Yi0+U2xvdCwgU0RfTU1DX0hDX0hPU1RfQ1RSTDIsIHNpemVvZihVSU5UMTYpLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNEX01NQ19IQ19WNF9FTnxTRF9NTUNfSENfNjRfQURE Ul9FTiwgU0RfTU1DX0hDX1Y0X0VOfFNEX01NQ19IQ182NF9BRERSX0VOKTsNCisgICAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBBZGRyZXNzaW5nTW9kZTY0ID0gVFJVRTsNCisg ICAgfQ0KKyAgfQ0KKw0KICAgaWYgKFRyYi0+TW9kZSA9PSBTZE1tY1NkbWFNb2RlKSB7DQotICAg IGlmICgoVUlOVDY0KShVSU5UTilUcmItPkRhdGFQaHkgPj0gMHgxMDAwMDAwMDB1bCkgew0KKyAg ICBpZiAoKCFBZGRyZXNzaW5nTW9kZTY0KSAmJg0KKyAgICAgICAgKChVSU5UNjQpKFVJTlROKVRy Yi0+RGF0YVBoeSA+PSAweDEwMDAwMDAwMHVsKSkgew0KICAgICAgIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVI7DQogICAgIH0NCg0KLSAgICBTZG1hQWRkciA9IChVSU5UMzIpKFVJTlROKVRy Yi0+RGF0YVBoeTsNCi0gICAgU3RhdHVzICAgPSBTZE1tY0hjUndNbWlvIChQY2lJbywgVHJiLT5T bG90LCBTRF9NTUNfSENfU0RNQV9BRERSLCBGQUxTRSwgc2l6ZW9mIChTZG1hQWRkciksICZTZG1h QWRkcik7DQorICAgIFNkbWFBZGRyID0gKFVJTlQ2NCkoVUlOVE4pVHJiLT5EYXRhUGh5Ow0KKw0K KyAgICBpZiAoUHJpdmF0ZS0+Q29udHJvbGxlclZlcnNpb25bVHJiLT5TbG90XSA+PSBTRF9NTUNf SENfQ1RSTF9WRVJfNDAwKSB7DQorICAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAoUGNpSW8s IFRyYi0+U2xvdCwgU0RfTU1DX0hDX0FETUFfU1lTX0FERFIsIEZBTFNFLCBzaXplb2YgKFVJTlQ2 NCksICZTZG1hQWRkcik7DQorICAgIH0gZWxzZSB7DQorICAgICAgU3RhdHVzID0gU2RNbWNIY1J3 TW1pbyAoUGNpSW8sIFRyYi0+U2xvdCwgU0RfTU1DX0hDX1NETUFfQUREUiwgRkFMU0UsIHNpemVv ZiAoVUlOVDMyKSwgJlNkbWFBZGRyKTsNCisgICAgfQ0KKw0KICAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQogICAgICAgcmV0dXJuIFN0YXR1czsNCiAgICAgfQ0KQEAgLTE2NDUsOSArMTkz NiwxMyBAQCBTZE1tY0V4ZWNUcmIgKA0KICAgICAvLw0KICAgICAvLyBDYWxjdWF0ZSBCbG9jayBD b3VudC4NCiAgICAgLy8NCi0gICAgQmxrQ291bnQgPSAoVUlOVDE2KShUcmItPkRhdGFMZW4gLyBU cmItPkJsb2NrU2l6ZSk7DQorICAgIEJsa0NvdW50ID0gKFRyYi0+RGF0YUxlbiAvIFRyYi0+Qmxv Y2tTaXplKTsNCisgIH0NCisgIGlmIChQcml2YXRlLT5Db250cm9sbGVyVmVyc2lvbltUcmItPlNs b3RdID49IFNEX01NQ19IQ19DVFJMX1ZFUl80MTApIHsNCisgICAgU3RhdHVzID0gU2RNbWNIY1J3 TW1pbyAoUGNpSW8sIFRyYi0+U2xvdCwgU0RfTU1DX0hDX1NETUFfQUREUiwgRkFMU0UsIHNpemVv ZiAoVUlOVDMyKSwgJkJsa0NvdW50KTsNCisgIH0gZWxzZSB7DQorICAgIFN0YXR1cyA9IFNkTW1j SGNSd01taW8gKFBjaUlvLCBUcmItPlNsb3QsIFNEX01NQ19IQ19CTEtfQ09VTlQsIEZBTFNFLCBz aXplb2YgKFVJTlQxNiksICZCbGtDb3VudCk7DQogICB9DQotICBTdGF0dXMgICA9IFNkTW1jSGNS d01taW8gKFBjaUlvLCBUcmItPlNsb3QsIFNEX01NQ19IQ19CTEtfQ09VTlQsIEZBTFNFLCBzaXpl b2YgKEJsa0NvdW50KSwgJkJsa0NvdW50KTsNCiAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CiAgICAgcmV0dXJuIFN0YXR1czsNCiAgIH0NCkBAIC0xNzQzLDcgKzIwMzgsNyBAQCBTZE1tY0No ZWNrVHJiUmVzdWx0ICgNCiAgIEVGSV9TRF9NTUNfUEFTU19USFJVX0NPTU1BTkRfUEFDS0VUICpQ YWNrZXQ7DQogICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTdGF0dXM7 DQogICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZVs0XTsNCi0g IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNkbWFBZGRyOw0KKyAgVUlOVDY0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2RtYUFkZHI7DQogICBVSU5UOCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCiAgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN3UmVzZXQ7DQogICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQaW9MZW5ndGg7DQpAQCAtMTg2Nyw4ICsyMTYyLDE5IEBAIFNkTW1jQ2hlY2tUcmJSZXN1 bHQgKA0KICAgICAvLw0KICAgICAvLyBVcGRhdGUgU0RNQSBBZGRyZXNzIHJlZ2lzdGVyLg0KICAg ICAvLw0KLSAgICBTZG1hQWRkciA9IFNEX01NQ19TRE1BX1JPVU5EX1VQICgoVUlOVDMyKShVSU5U TilUcmItPkRhdGFQaHksIFNEX01NQ19TRE1BX0JPVU5EQVJZKTsNCi0gICAgU3RhdHVzICAgPSBT ZE1tY0hjUndNbWlvICgNCisgICAgU2RtYUFkZHIgPSBTRF9NTUNfU0RNQV9ST1VORF9VUCAoKFVJ TlROKVRyYi0+RGF0YVBoeSwgU0RfTU1DX1NETUFfQk9VTkRBUlkpOw0KKw0KKyAgICBpZiAoUHJp dmF0ZS0+Q29udHJvbGxlclZlcnNpb25bVHJiLT5TbG90XSA+PSBTRF9NTUNfSENfQ1RSTF9WRVJf NDAwKSB7DQorICAgICAgU3RhdHVzID0gU2RNbWNIY1J3TW1pbyAoDQorICAgICAgICAgICAgICAg ICBQcml2YXRlLT5QY2lJbywNCisgICAgICAgICAgICAgICAgIFRyYi0+U2xvdCwNCisgICAgICAg ICAgICAgICAgIFNEX01NQ19IQ19BRE1BX1NZU19BRERSLA0KKyAgICAgICAgICAgICAgICAgRkFM U0UsDQorICAgICAgICAgICAgICAgICBzaXplb2YgKFVJTlQ2NCksDQorICAgICAgICAgICAgICAg ICAmU2RtYUFkZHINCisgICAgICAgICAgICAgICAgICk7DQorICAgIH0gZWxzZSB7DQorICAgICAg U3RhdHVzID0gU2RNbWNIY1J3TW1pbyAoDQogICAgICAgICAgICAgICAgICBQcml2YXRlLT5QY2lJ bywNCiAgICAgICAgICAgICAgICAgIFRyYi0+U2xvdCwNCiAgICAgICAgICAgICAgICAgIFNEX01N Q19IQ19TRE1BX0FERFIsDQpAQCAtMTg3NiwxMCArMjE4MiwxMiBAQCBTZE1tY0NoZWNrVHJiUmVz dWx0ICgNCiAgICAgICAgICAgICAgICAgIHNpemVvZiAoVUlOVDMyKSwNCiAgICAgICAgICAgICAg ICAgICZTZG1hQWRkcg0KICAgICAgICAgICAgICAgICAgKTsNCisgICAgfQ0KKw0KICAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgICAgZ290byBEb25lOw0KICAgICB9DQotICAgIFRy Yi0+RGF0YVBoeSA9IChVSU5UMzIpKFVJTlROKVNkbWFBZGRyOw0KKyAgICBUcmItPkRhdGFQaHkg PSAoVUlOVDY0KShVSU5UTilTZG1hQWRkcjsNCiAgIH0NCg0KICAgaWYgKChQYWNrZXQtPlNkTW1j Q21kQmxrLT5Db21tYW5kVHlwZSAhPSBTZE1tY0NvbW1hbmRUeXBlQWR0YykgJiYNCkBAIC0yMDAw LDI4MSArMjMwOCwzIEBAIFNkTW1jV2FpdFRyYlJlc3VsdCAoDQogICByZXR1cm4gRUZJX1RJTUVP VVQ7DQp9DQoNCi1CT09MRUFOIEJodEhvc3RQY2lTdXBwb3J0KEVGSV9QQ0lfSU9fUFJPVE9DT0wg KlBjaUlvKQ0KLXsNCi0gICAgICAgICAgICAgIFBDSV9UWVBFMDAgICAgICAgICAgICAgICAgICAg ICAgICAgUGNpOw0KLQ0KLSAgICAgICAgICAgICAgUGNpSW8tPlBjaS5SZWFkIChQY2lJbywgRWZp UGNpSW9XaWR0aFVpbnQzMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mIFBjaSAvIHNpemVvZiAoVUlOVDMy KSwgJlBjaSk7DQotDQotICAgICAgICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJjaGVjayBk ZXZpY2UgJTA0eDolMDR4XG4iLCBQY2kuSGRyLlZlbmRvcklkLCBQY2kuSGRyLkRldmljZUlkKSk7 DQotDQotICAgICAgICAgICAgICBpZiAoUGNpLkhkci5WZW5kb3JJZCAhPSAweDEyMTcpDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7DQotDQotICAgICAgICAgICAgICBz d2l0Y2ggKFBjaS5IZHIuRGV2aWNlSWQpDQotICAgICAgICAgICAgICB7DQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAweDg0MjA6ICAgICAgIC8vUENJX0RFVl9JRF9TRFMwDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDg0MjE6ICAgICAgIC8vUENJX0RF Vl9JRF9TRFMxDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDg1MjA6ICAg ICAgIC8vUENJX0RFVl9JRF9GSjINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDB4ODYyMDogICAgICAgLy9QQ0lfREVWX0lEX1NCMA0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgMHg4NjIxOiAgICAgICAvL1BDSV9ERVZfSURfU0IxDQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfZGV2aWNlSWQgPSBQY2kuSGRyLkRl dmljZUlkOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAg ICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgIGVuZDoNCi0gICAgICAgICAgICAgIHJldHVybiAw Ow0KLX0NCi0NCi12b2lkIERiZ051bGwoSU4gQ09OU1QgQ0hBUjE2ICogZm10LCAuLi4pDQotew0K LX0NCi0NCi1VSU5UMzIgYmh0X3JlYWRsKEVGSV9QQ0lfSU9fUFJPVE9DT0wgKlBjaUlvLCBVSU5U MzIgb2Zmc2V0KQ0KLXsNCi0gICAgICAgICAgICAgIFVJTlQzMiBhcmc7DQotICAgICAgICAgICAg ICBQY2lJby0+TWVtLlJlYWQoUGNpSW8sRWZpUGNpSW9XaWR0aFVpbnQzMiwxLG9mZnNldCwxLCZh cmcpOw0KLSAgICAgICAgICAgICAgcmV0dXJuIGFyZzsNCi19DQotDQotdm9pZCBiaHRfd3JpdGVs KEVGSV9QQ0lfSU9fUFJPVE9DT0wgKlBjaUlvLCBVSU5UMzIgb2Zmc2V0LCBVSU5UMzIgdmFsdWUp DQotew0KLSAgICAgICAgICAgICAgUGNpSW8tPk1lbS5Xcml0ZShQY2lJbyxFZmlQY2lJb1dpZHRo VWludDMyLDEsb2Zmc2V0LDEsJnZhbHVlKTsNCi19DQotDQotDQotVUlOVDMyIFBjaUJodFJlYWQz MihFRklfUENJX0lPX1BST1RPQ09MICpQY2lJbywgVUlOVDMyIG9mZnNldCkNCi17DQotICAgICAg ICAgICAgICBVSU5UMzIgaSA9IDA7DQotICAgICAgICAgICAgICBVSU5UMzIgdG1wWzNdID0gezB9 Ow0KLQ0KLSAgICAgICAgICAgICAgaWYoKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TRFMwKSB8 fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19kZXZp Y2VJZCA9PSBQQ0lfREVWX0lEX1NEUzEpIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlkID09IFBDSV9ERVZfSURfRkoyKSB8fA0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19kZXZpY2VJZCA9 PSBQQ0lfREVWX0lEX1NCMCkgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TQjEpKQ0KLSAgICAgICAgICAg ICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBTYW5kc3Rvcm0sIEhX IGltcGxlbWVudCBhIG1hcHBpbmcgbWV0aG9kIGJ5IG1lbW9yeSBzcGFjZSByZWcgdG8gYWNjZXNz IFBDSSByZWcuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5hYmxlIG1hcHBp bmcNCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmdW5jdGlvbiBj b25mbGljdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKChnX2RldmljZUlkID09 IFBDSV9ERVZfSURfU0RTMCkgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlkID09IFBDSV9ERVZfSURfRkoy KSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TQjApIHx8DQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19k ZXZpY2VJZCA9PSBQQ0lfREVWX0lEX1NCMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0g MDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmh0X3dy aXRlbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nRW4sIDB4NDAwMDAwMDApOw0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgoYmh0X3JlYWRsKFBjaUlv LCBCSFRfUENJUk1hcHBpbmdFbikgJiAweDQwMDAwMDAwKSA9PSAwKQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09IDUpDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9EYmdNc2coKERSSVZFUk5BTUUgIiAtICVzKCkg ZnVuY3Rpb24gMCBjYW4ndCBsb2NrIVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBSRF9ESVNfTUFQUElORzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ0JTLT5TdGFsbCgxMDAwKTsNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwgMHg0 MDAwMDAwMCk7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZihnX2RldmljZUlkID09IFBDSV9ERVZfSURfU0RTMSkNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwg MHgyMDAwMDAwMCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdoaWxlKChiaHRfcmVhZGwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0VuKSAmIDB4MjAwMDAw MDApID09IDApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmKGkgPT0gNSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Ri Z0VycigoRFJJVkVSTkFNRSAiIC0gJXMoKSBmdW5jdGlvbiAxIGNhbid0IGxvY2shXG4iLCBfX0ZV TkNUSU9OX18pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFJEX0RJU19NQVBQSU5HOw0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ0JTLT5TdGFsbCgxMDAwKTsNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJodF93 cml0ZWwoUGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0VuLCAweDIwMDAwMDAwKTsNCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVj ayBsYXN0IG9wZXJhdGlvbiBpcyBjb21wbGV0ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGkgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKGJodF9yZWFk bChQY2lJbywgQkhUX1BDSVJNYXBwaW5nQ3RsKSAmIDB4YzAwMDAwMDApDQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZihpID09IDUpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vRGJnRXJyKChEUklWRVJOQU1FICIgLSBbMjA0XSA9IDB4 JXhcbiIsIFJlZ2lzdGVyUmVhZDMyKEVMTl9kUENJUk1hcHBpbmdDdGwpKSk7DQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Ri Z0VycigoRFJJVkVSTkFNRSAiIC0gWzIwOF0gPSAweCV4XG4iLCBSZWdpc3RlclJlYWQzMihFTE5f ZFBDSVJNYXBwaW5nRW4pKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvL0RiZ0VycigoRFJJVkVSTkFNRSAiIC0gJXMoKSBj aGVjayBsYXN0IG9wZXJhdGlvbiBjb21wbGV0ZSB0aW1lb3V0ISEhXG4iLCBfX0ZVTkNUSU9OX18p KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gUkRfRElTX01BUFBJTkc7DQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ0JTLT5TdGFsbCgxMDAwKTsNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgcmVnaXN0 ZXIgYWRkcmVzcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFswXSB8PSAweDQw MDAwMDAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFswXSB8PSBvZmZzZXQ7 DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmh0X3dyaXRlbChQY2lJbywgQkhUX1BD SVJNYXBwaW5nQ3RsLCB0bXBbMF0pOw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIENoZWNrIHJlYWQgaXMgY29tcGxldGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShiaHRfcmVhZGwo UGNpSW8sIEJIVF9QQ0lSTWFwcGluZ0N0bCkgJiAweDQwMDAwMDAwKQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYoaSA9PSA1KQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvL0RiZ0VycigoRFJJVkVSTkFNRSAiIC0gJXMoKSBjaGVjayBy ZWFkIG9wZXJhdGlvbiBjb21wbGV0ZSB0aW1lb3V0ISEhXG4iLCBfX0ZVTkNUSU9OX18pKTsNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gUkRfRElTX01BUFBJTkc7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ0JTLT5TdGFsbCgxMDAwKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaSArPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgUENJUiB2YWx1ZQ0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFsxXSA9IGJodF9yZWFkbChQY2lJbywg QkhUX1BDSVJNYXBwaW5nVmFsKTsNCi0NCi1SRF9ESVNfTUFQUElORzoNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIG1hcHBpbmcNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwgMHg4MDAwMDAw MCk7DQotDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9EYmdEZWJ1ZyhMIiVzIG9m ZnNldD0leCBWYWx1ZToleFxuIiwgX19GVU5DVElPTl9fLCBvZmZzZXQsIHRtcFsxXSk7DQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcFsxXTsNCi0gICAgICAgICAgICAg IH0NCi0NCi0gICAgICAgICAgICAgIC8vRGJnRGVidWcoTCIlcyBvZmZzZXQ9JXggVmFsdWU6JXhc biIsIF9fRlVOQ1RJT05fXywgb2Zmc2V0LCB0bXBbMF0pOw0KLSAgICAgICAgICAgICAgcmV0dXJu IHRtcFswXTsNCi19DQotDQotdm9pZCBQY2lCaHRXcml0ZTMyKEVGSV9QQ0lfSU9fUFJPVE9DT0wg KlBjaUlvLCBVSU5UMzIgb2Zmc2V0LCBVSU5UMzIgdmFsdWUpDQotew0KLSAgICAgICAgICAgICAg VUlOVDMyIHRtcCA9IDA7DQotICAgIFVJTlQzMiBpID0gMDsNCi0NCi0gICAgICAgICAgICAgIGlm KChnX2RldmljZUlkID09IFBDSV9ERVZfSURfU0RTMCkgfHwNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TRFMx KSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19k ZXZpY2VJZCA9PSBQQ0lfREVWX0lEX0ZKMikgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TQjApIHx8DQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlk ID09IFBDSV9ERVZfSURfU0IxKSkNCi0gICAgew0KLSAgICAgICAgLy8gRm9yIFNhbmRzdG9ybSwg SFcgaW1wbGVtZW50IGEgbWFwcGluZyBtZXRob2QgYnkgbWVtb3J5IHNwYWNlIHJlZyB0byBhY2Nl c3MgUENJIHJlZy4NCi0gICAgICAgIC8vIFVwcGVyIGNhbGxlciBkb2Vzbid0IG5lZWQgdG8gc2V0 IDB4RDAuDQotDQotICAgICAgICAvLyBFbmFibGUgbWFwcGluZw0KLQ0KLSAgICAgICAgLy8gQ2hl Y2sgZnVuY3Rpb24gY29uZmxpY3QNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigo Z19kZXZpY2VJZCA9PSBQQ0lfREVWX0lEX1NEUzApIHx8DQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ19kZXZpY2VJZCA9PSBQ Q0lfREVWX0lEX0ZKMikgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChnX2RldmljZUlkID09IFBDSV9ERVZfSURfU0IwKSB8 fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGdfZGV2aWNlSWQgPT0gUENJX0RFVl9JRF9TQjEpKQ0KLSAgICAgICAgew0KLSAg ICAgICAgICAgIGkgPSAwOw0KLSAgICAgICAgICAgIGJodF93cml0ZWwoUGNpSW8sIEJIVF9QQ0lS TWFwcGluZ0VuLCAweDQwMDAwMDAwKTsNCi0gICAgICAgICAgICB3aGlsZSgoYmh0X3JlYWRsKFBj aUlvLCBCSFRfUENJUk1hcHBpbmdFbikgJiAweDQwMDAwMDAwKSA9PSAwKQ0KLSAgICAgICAgICAg IHsNCi0gICAgICAgICAgICAgICAgaWYoaSA9PSA1KQ0KLSAgICAgICAgICAgICAgICB7DQotICAg ICAgICAgICAgICAgICAgICAvL0RiZ0VycigoRFJJVkVSTkFNRSAiIC0gJXMoKSBmdW5jdGlvbiAw IGNhbid0IGxvY2shXG4iLCBfX0ZVTkNUSU9OX18pKTsNCi0gICAgICAgICAgICAgICAgICAgIGdv dG8gV1JfRElTX01BUFBJTkc7DQotICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAg ICAgZ0JTLT5TdGFsbCgxMDAwKTsNCi0gICAgICAgICAgICAgICAgaSsrOw0KLSAgICAgICAgICAg ICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwgMHg0MDAwMDAwMCk7DQot ICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZSBpZihnX2RldmljZUlkID09 IFBDSV9ERVZfSURfU0RTMSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpID0gMDsNCi0gICAg ICAgICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwgMHgyMDAwMDAwMCk7 DQotDQotICAgICAgICAgICAgd2hpbGUoKGJodF9yZWFkbChQY2lJbywgQkhUX1BDSVJNYXBwaW5n RW4pICYgMHgyMDAwMDAwMCkgPT0gMCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAg IGlmKGkgPT0gNSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgLy9E YmdFcnIoKERSSVZFUk5BTUUgIiAtICVzKCkgZnVuY3Rpb24gMCBjYW4ndCBsb2NrIVxuIiwgX19G VU5DVElPTl9fKSk7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIFdSX0RJU19NQVBQSU5HOw0K LSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7 DQotICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICAgICAgYmh0X3dyaXRlbChQY2lJ bywgQkhUX1BDSVJNYXBwaW5nRW4sIDB4MjAwMDAwMDApOw0KLSAgICAgICAgICAgIH0NCi0gICAg ICAgIH0NCi0NCi0gICAgICAgIC8vIEVuYWJsZSBNRU0gYWNjZXNzDQotICAgICAgICBiaHRfd3Jp dGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdWYWwsIDB4ODAwMDAwMDApOw0KLSAgICAgICAgYmh0 X3dyaXRlbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nQ3RsLCAweDgwMDAwMEQwKTsNCi0NCi0gICAg ICAgIC8vIENoZWNrIGxhc3Qgb3BlcmF0aW9uIGlzIGNvbXBsZXRlDQotICAgICAgICBpID0gMDsN Ci0gICAgICAgIHdoaWxlKGJodF9yZWFkbChQY2lJbywgQkhUX1BDSVJNYXBwaW5nQ3RsKSAmIDB4 YzAwMDAwMDApDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoaSA9PSA1KQ0KLSAgICAgICAg ICAgIHsNCi0gICAgICAgICAgICAgICAgLy9EYmdFcnIoKERSSVZFUk5BTUUgIiAtICVzKCkgY2hl Y2sgbGFzdCBvcGVyYXRpb24gY29tcGxldGUgdGltZW91dCEhIVxuIiwgX19GVU5DVElPTl9fKSk7 DQotICAgICAgICAgICAgICAgIGdvdG8gV1JfRElTX01BUFBJTkc7DQotICAgICAgICAgICAgfQ0K LSAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7DQotICAgICAgICAgICAgaSArPSAxOw0KLSAg ICAgICAgfQ0KLQ0KLSAgICAgICAgLy8gU2V0IHdyaXRlIHZhbHVlDQotICAgICAgICBiaHRfd3Jp dGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdWYWwsIHZhbHVlKTsNCi0gICAgICAgIC8vIFNldCBy ZWdpc3RlciBhZGRyZXNzDQotICAgICAgICB0bXAgfD0gMHg4MDAwMDAwMDsNCi0gICAgICAgIHRt cCB8PSBvZmZzZXQ7DQotICAgICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdD dGwsIHRtcCk7DQotDQotICAgICAgICAvLyBDaGVjayB3cml0ZSBpcyBjb21wbGV0ZQ0KLSAgICAg ICAgaSA9IDA7DQotICAgICAgICB3aGlsZShiaHRfcmVhZGwoUGNpSW8sIEJIVF9QQ0lSTWFwcGlu Z0N0bCkgJiAweDgwMDAwMDAwKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKGkgPT0gNSkN Ci0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8vRGJnRXJyKChEUklWRVJOQU1FICIg LSAlcygpIGNoZWNrIHdyaXRlIG9wZXJhdGlvbiBjb21wbGV0ZSB0aW1lb3V0ISEhXG4iLCBfX0ZV TkNUSU9OX18pKTsNCi0gICAgICAgICAgICAgICAgZ290byBXUl9ESVNfTUFQUElORzsNCi0gICAg ICAgICAgICB9DQotICAgICAgICAgICAgZ0JTLT5TdGFsbCgxMDAwKTsNCi0gICAgICAgICAgICBp ICs9IDE7DQotICAgICAgICB9DQotDQotV1JfRElTX01BUFBJTkc6DQotICAgICAgICAvLyBEaXNh YmxlIE1FTSBhY2Nlc3MNCi0gICAgICAgIGJodF93cml0ZWwoUGNpSW8sIEJIVF9QQ0lSTWFwcGlu Z1ZhbCwgMHg4MDAwMDAwMSk7DQotICAgICAgICBiaHRfd3JpdGVsKFBjaUlvLCBCSFRfUENJUk1h cHBpbmdDdGwsIDB4ODAwMDAwRDApOw0KLQ0KLSAgICAgICAgLy8gQ2hlY2sgbGFzdCBvcGVyYXRp b24gaXMgY29tcGxldGUNCi0gICAgICAgIGkgPSAwOw0KLSAgICAgICAgd2hpbGUoYmh0X3JlYWRs KFBjaUlvLCBCSFRfUENJUk1hcHBpbmdDdGwpICYgMHhjMDAwMDAwMCkNCi0gICAgICAgIHsNCi0g ICAgICAgICAgICBpZihpID09IDUpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAv L0RiZ0VycigoRFJJVkVSTkFNRSAiIC0gJXMoKSBjaGVjayBsYXN0IG9wZXJhdGlvbiBjb21wbGV0 ZSB0aW1lb3V0ISEhXG4iLCBfX0ZVTkNUSU9OX18pKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7 DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGdCUy0+U3RhbGwoMTAwMCk7DQotICAgICAg ICAgICAgaSArPSAxOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLy8gRGlzYWJsZSBmdW5jdGlv biBjb25mbGljdA0KLQ0KLSAgICAgICAgLy8gRGlzYWJsZSBtYXBwaW5nDQotICAgICAgICBiaHRf d3JpdGVsKFBjaUlvLCBCSFRfUENJUk1hcHBpbmdFbiwgMHg4MDAwMDAwMCk7DQotICAgIH0NCi19 DQotDQotdm9pZCBQY2lCaHRPcjMyKEVGSV9QQ0lfSU9fUFJPVE9DT0wgKlBjaUlvLCBVSU5UMzIg b2Zmc2V0LCBVSU5UMzIgdmFsdWUpDQotew0KLSAgICAgICAgICAgICAgVUlOVDMyIGFyZzsNCi0g ICAgICAgICAgICAgIGFyZyA9IFBjaUJodFJlYWQzMihQY2lJbywgb2Zmc2V0KTsNCi0gICAgICAg ICAgICAgIFBjaUJodFdyaXRlMzIoUGNpSW8sIG9mZnNldCwgdmFsdWUgfCBhcmcpOw0KLX0NCi0N Ci12b2lkIFBjaUJodEFuZDMyKEVGSV9QQ0lfSU9fUFJPVE9DT0wgKlBjaUlvLCBVSU5UMzIgb2Zm c2V0LCBVSU5UMzIgdmFsdWUpDQotew0KLSAgICAgICAgICAgICAgVUlOVDMyIGFyZzsNCi0gICAg ICAgICAgICAgIGFyZyA9IFBjaUJodFJlYWQzMihQY2lJbywgb2Zmc2V0KTsNCi0gICAgICAgICAg ICAgIFBjaUJodFdyaXRlMzIoUGNpSW8sIG9mZnNldCwgdmFsdWUgJiBhcmcpOw0KLX0NCi0NCg0K DQpQbGVhc2UgY2hlY2sgaXQhDQpCciwNCk1pa2UNCg==