From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.0 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C960BC433ED for ; Thu, 29 Apr 2021 07:14:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 693FC6141E for ; Thu, 29 Apr 2021 07:14:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 693FC6141E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9F6596ED24; Thu, 29 Apr 2021 07:14:26 +0000 (UTC) Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by gabe.freedesktop.org (Postfix) with ESMTPS id E14F66ED1B; Thu, 29 Apr 2021 07:14:24 +0000 (UTC) Received: by mail-ed1-x535.google.com with SMTP id n25so5189726edr.5; Thu, 29 Apr 2021 00:14:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=7nI6BbyPEzw70igWdcsrF8qw/i2ynGf/Q5HrAwzuVLM=; b=fhlsQxmAMDnUg+hbv7vkOxh/vuBqXQsuz4NZ18+YlE+toEQqmLp97uXxW5O2MQyLSA lmQJUoOOrSQ58GuPDOHtFL3CTQ31z5eX1IazA0EhkM2uiLhFoCQ6DJAaqnzPlMQJW15S ua/h++/J2hXc8r9tSX+1mN1lhHHBRTu6rGNowcVN30fNHEZ4iNyDankqKBOLm/p9RwLA XtPwPDNtesH02ar7FdbFvUB6gN9n3F28vxj38JhifDzrMMNgyFMq+OYbbe2IkTCM9ZMc kPa3FFIJAI0FidO2nJgUfZ6P03zHDJSGMLErQjG7O3dAL+QNOTjq6USLp9eAa+FPVbNy i7/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=7nI6BbyPEzw70igWdcsrF8qw/i2ynGf/Q5HrAwzuVLM=; b=oLmwUutmhE1bq91vLqs9wCXvMH2nfFr7ZXyqZzHNI7hFMr0Tkp4wX/NiEWMAnDuc9R nK3CBmyIo5ptJ8wMlbzl0l5SPrkcbVzTy+f20j65yq3C5TKGBrN9E94r0kpw8cxwDFn+ /86DaYAQxMs5HEN9hNdaYKvbzktfFzC/xkPvk8DAUh24oC0PC27pHUh5ZNpOadH/5U+x m43grm+qzjaUFVMBoZOV78WW91h91ZI6/EbPNP4q7FJvR7wzwLwAJHlFd8NB02tGiYZN RVqpdRfrKTIpkXbDN6aTKErDfdxX1Al7SJdAZ6CqDTvcNhdfk4MXKVWdDPNH4n2R+Q5r FJDQ== X-Gm-Message-State: AOAM532jRzwGzRB4zIOIX48VV0lxX5Ri7wD2KJ4Exo1PjJM3btbk+eHT 9sp8KmdqOYgWtmGz3yqTD28= X-Google-Smtp-Source: ABdhPJyrdOaVXVjRy/IEAwGB0753boXhOgLOdQfxZhF5D7vMKbL5heCNyoMiOXcxbZrStTeY/uQATg== X-Received: by 2002:aa7:c957:: with SMTP id h23mr16000188edt.301.1619680463195; Thu, 29 Apr 2021 00:14:23 -0700 (PDT) Received: from ?IPv6:2a02:908:1252:fb60:49f7:8b5a:d7ab:5e3e? ([2a02:908:1252:fb60:49f7:8b5a:d7ab:5e3e]) by smtp.gmail.com with ESMTPSA id x20sm1604570edd.58.2021.04.29.00.14.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 29 Apr 2021 00:14:22 -0700 (PDT) Subject: Re: [PATCH v5 10/27] drm/amdgpu: Guard against write accesses after device removal To: Andrey Grodzovsky , dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-pci@vger.kernel.org, daniel.vetter@ffwll.ch, Harry.Wentland@amd.com References: <20210428151207.1212258-1-andrey.grodzovsky@amd.com> <20210428151207.1212258-11-andrey.grodzovsky@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: Date: Thu, 29 Apr 2021 09:14:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <20210428151207.1212258-11-andrey.grodzovsky@amd.com> Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Alexander.Deucher@amd.com, gregkh@linuxfoundation.org, helgaas@kernel.org, Felix.Kuehling@amd.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QW0gMjguMDQuMjEgdW0gMTc6MTEgc2NocmllYiBBbmRyZXkgR3JvZHpvdnNreToKPiBUaGlzIHNo b3VsZCBwcmV2ZW50IHdyaXRpbmcgdG8gbWVtb3J5IG9yIElPIHJhbmdlcyBwb3NzaWJseQo+IGFs cmVhZHkgYWxsb2NhdGVkIGZvciBvdGhlciB1c2VzIGFmdGVyIG91ciBkZXZpY2UgaXMgcmVtb3Zl ZC4KPgo+IHY1Ogo+IFByb3RlY3QgbW9yZSBwbGFjZXMgd2hlciBtZW1jb3B5X3RvL2Zvcm1faW8g dGFrZXMgcGxhY2UKPiBQcm90ZWN0IElCIHN1Ym1pc3Npb25zCj4KPiBTaWduZWQtb2ZmLWJ5OiBB bmRyZXkgR3JvZHpvdnNreSA8YW5kcmV5Lmdyb2R6b3Zza3lAYW1kLmNvbT4KPiAtLS0KPiAgIGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyAgICB8ICA3NSArKystLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nbWMuYyAgICAgICB8ICAgOSAr Cj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWIuYyAgICAgICAgfCAyMjgg KysrKysrKysrLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf cHNwLmMgICAgICAgfCAxMTUgKysrKystLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfcHNwLmggICAgICAgfCAgIDMgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3JpbmcuYyAgICAgIHwgIDcwICsrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3JpbmcuaCAgICAgIHwgIDQ5ICstLS0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV91dmQuYyAgICAgICB8ICAzMSArKy0KPiAgIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92Y2UuYyAgICAgICB8ICAxMSArLQo+ICAgZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zjbi5jICAgICAgIHwgIDIyICstCj4gICBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTFfMC5jICAgICAgICB8ICA0NCArKy0tCj4gICBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjEyXzAuYyAgICAgICAgfCAgIDggKy0KPiAg IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92M18xLmMgICAgICAgICB8ICAgOCArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNlX3Y0XzAuYyAgICAgICAgIHwgIDI2ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92Y25fdjNfMC5jICAgICAgICAgfCAgMjIg Ky0KPiAgIC4uLi9kcm0vYW1kL3BtL3Bvd2VycGxheS9zbXVtZ3Ivc211N19zbXVtZ3IuYyB8ICAg MiArCj4gICAxNyBmaWxlcyBjaGFuZ2VkLCA0MjUgaW5zZXJ0aW9ucygrKSwgMzA1IGRlbGV0aW9u cygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9k ZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwo+IGlu ZGV4IDkxNTk0ZGRjMjQ1OS4uMjJiMDljNGRiMjU1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwo+IEBAIC03MSw2ICs3MSw4IEBACj4gICAjaW5jbHVk ZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICAgCj4gICAKPiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2 Lmg+Cj4gKwo+ICAgTU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUvdmVnYTEwX2dwdV9pbmZvLmJpbiIp Owo+ICAgTU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUvdmVnYTEyX2dwdV9pbmZvLmJpbiIpOwo+ICAg TU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUvcmF2ZW5fZ3B1X2luZm8uYmluIik7Cj4gQEAgLTI3OSw0 OCArMjgxLDU1IEBAIHZvaWQgYW1kZ3B1X2RldmljZV92cmFtX2FjY2VzcyhzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwgbG9mZl90IHBvcywKPiAgIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAg CXVpbnQzMl90IGhpID0gfjA7Cj4gICAJdWludDY0X3QgbGFzdDsKPiArCWludCBpZHg7Cj4gICAK PiArCWlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkgewoKSW4gZ2VuZXJhbCBJ IHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBkbyBzdHVmZiBsaWtlIHRoaXMgYXMKCmlmICgh ZHJtX2Rldl9lbnRlciguLi4pKQogwqDCoMKgIHJldHVybjsgLyogb3IgZ290byBlcnJvcl9ub2Rl djsgKi8KCi4uLgoKZHJtX2Rldl9leGl0KCk7CgpUaGlzIGlzIGVzc2VudGlhbGx5IGVycm9yIGhh bmRsaW5nIGFuZCB3ZSBhdm9pZCBtb2RpZnlpbmcgdGhlIHdob2xlIApmdW5jdGlvbiBmb3IgYWRk aW5nIHRoZSBwcmVyZXF1aXNpdGUuCgpSZWdhcmRzLApDaHJpc3RpYW4uCgoKPiAgIAo+ICAgI2lm ZGVmIENPTkZJR182NEJJVAo+IC0JbGFzdCA9IG1pbihwb3MgKyBzaXplLCBhZGV2LT5nbWMudmlz aWJsZV92cmFtX3NpemUpOwo+IC0JaWYgKGxhc3QgPiBwb3MpIHsKPiAtCQl2b2lkIF9faW9tZW0g KmFkZHIgPSBhZGV2LT5tbWFuLmFwZXJfYmFzZV9rYWRkciArIHBvczsKPiAtCQlzaXplX3QgY291 bnQgPSBsYXN0IC0gcG9zOwo+IC0KPiAtCQlpZiAod3JpdGUpIHsKPiAtCQkJbWVtY3B5X3RvaW8o YWRkciwgYnVmLCBjb3VudCk7Cj4gLQkJCW1iKCk7Cj4gLQkJCWFtZGdwdV9hc2ljX2ZsdXNoX2hk cChhZGV2LCBOVUxMKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlhbWRncHVfYXNpY19pbnZhbGlkYXRl X2hkcChhZGV2LCBOVUxMKTsKPiAtCQkJbWIoKTsKPiAtCQkJbWVtY3B5X2Zyb21pbyhidWYsIGFk ZHIsIGNvdW50KTsKPiAtCQl9Cj4gKwkJbGFzdCA9IG1pbihwb3MgKyBzaXplLCBhZGV2LT5nbWMu dmlzaWJsZV92cmFtX3NpemUpOwo+ICsJCWlmIChsYXN0ID4gcG9zKSB7Cj4gKwkJCXZvaWQgX19p b21lbSAqYWRkciA9IGFkZXYtPm1tYW4uYXBlcl9iYXNlX2thZGRyICsgcG9zOwo+ICsJCQlzaXpl X3QgY291bnQgPSBsYXN0IC0gcG9zOwo+ICsKPiArCQkJaWYgKHdyaXRlKSB7Cj4gKwkJCQltZW1j cHlfdG9pbyhhZGRyLCBidWYsIGNvdW50KTsKPiArCQkJCW1iKCk7Cj4gKwkJCQlhbWRncHVfYXNp Y19mbHVzaF9oZHAoYWRldiwgTlVMTCk7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlhbWRncHVfYXNp Y19pbnZhbGlkYXRlX2hkcChhZGV2LCBOVUxMKTsKPiArCQkJCW1iKCk7Cj4gKwkJCQltZW1jcHlf ZnJvbWlvKGJ1ZiwgYWRkciwgY291bnQpOwo+ICsJCQl9Cj4gICAKPiAtCQlpZiAoY291bnQgPT0g c2l6ZSkKPiAtCQkJcmV0dXJuOwo+ICsJCQlpZiAoY291bnQgPT0gc2l6ZSkgewo+ICsJCQkJZHJt X2Rldl9leGl0KGlkeCk7Cj4gKwkJCQlyZXR1cm47Cj4gKwkJCX0KPiAgIAo+IC0JCXBvcyArPSBj b3VudDsKPiAtCQlidWYgKz0gY291bnQgLyA0Owo+IC0JCXNpemUgLT0gY291bnQ7Cj4gLQl9Cj4g KwkJCXBvcyArPSBjb3VudDsKPiArCQkJYnVmICs9IGNvdW50IC8gNDsKPiArCQkJc2l6ZSAtPSBj b3VudDsKPiArCQl9Cj4gICAjZW5kaWYKPiAgIAo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkZXYt Pm1taW9faWR4X2xvY2ssIGZsYWdzKTsKPiAtCWZvciAobGFzdCA9IHBvcyArIHNpemU7IHBvcyA8 IGxhc3Q7IHBvcyArPSA0KSB7Cj4gLQkJdWludDMyX3QgdG1wID0gcG9zID4+IDMxOwo+ICsJCXNw aW5fbG9ja19pcnFzYXZlKCZhZGV2LT5tbWlvX2lkeF9sb2NrLCBmbGFncyk7Cj4gKwkJZm9yIChs YXN0ID0gcG9zICsgc2l6ZTsgcG9zIDwgbGFzdDsgcG9zICs9IDQpIHsKPiArCQkJdWludDMyX3Qg dG1wID0gcG9zID4+IDMxOwo+ICAgCj4gLQkJV1JFRzMyX05PX0tJUShtbU1NX0lOREVYLCAoKHVp bnQzMl90KXBvcykgfCAweDgwMDAwMDAwKTsKPiAtCQlpZiAodG1wICE9IGhpKSB7Cj4gLQkJCVdS RUczMl9OT19LSVEobW1NTV9JTkRFWF9ISSwgdG1wKTsKPiAtCQkJaGkgPSB0bXA7Cj4gKwkJCVdS RUczMl9OT19LSVEobW1NTV9JTkRFWCwgKCh1aW50MzJfdClwb3MpIHwgMHg4MDAwMDAwMCk7Cj4g KwkJCWlmICh0bXAgIT0gaGkpIHsKPiArCQkJCVdSRUczMl9OT19LSVEobW1NTV9JTkRFWF9ISSwg dG1wKTsKPiArCQkJCWhpID0gdG1wOwo+ICsJCQl9Cj4gKwkJCWlmICh3cml0ZSkKPiArCQkJCVdS RUczMl9OT19LSVEobW1NTV9EQVRBLCAqYnVmKyspOwo+ICsJCQllbHNlCj4gKwkJCQkqYnVmKysg PSBSUkVHMzJfTk9fS0lRKG1tTU1fREFUQSk7Cj4gICAJCX0KPiAtCQlpZiAod3JpdGUpCj4gLQkJ CVdSRUczMl9OT19LSVEobW1NTV9EQVRBLCAqYnVmKyspOwo+IC0JCWVsc2UKPiAtCQkJKmJ1Zisr ID0gUlJFRzMyX05PX0tJUShtbU1NX0RBVEEpOwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmFkZXYtPm1taW9faWR4X2xvY2ssIGZsYWdzKTsKPiArCj4gKwkJZHJtX2Rldl9leGl0KGlkeCk7 Cj4gICAJfQo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRldi0+bW1pb19pZHhfbG9jaywg ZmxhZ3MpOwo+ICAgfQo+ICAgCj4gICAvKgo+IEBAIC00MDIsNiArNDExLDcgQEAgdWludDhfdCBh bWRncHVfbW1fcnJlZzgoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHVpbnQzMl90IG9mZnNl dCkKPiAgICAqLwo+ICAgdm9pZCBhbWRncHVfbW1fd3JlZzgoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIHVpbnQzMl90IG9mZnNldCwgdWludDhfdCB2YWx1ZSkKPiAgIHsKPiArCj4gICAJaWYg KGFkZXYtPmluX3BjaV9lcnJfcmVjb3ZlcnkpCj4gICAJCXJldHVybjsKPiAgIAo+IEBAIC01NDIs NiArNTUyLDcgQEAgdTMyIGFtZGdwdV9tbV9yZG9vcmJlbGwoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIHUzMiBpbmRleCkKPiAgICAqLwo+ICAgdm9pZCBhbWRncHVfbW1fd2Rvb3JiZWxsKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgaW5kZXgsIHUzMiB2KQo+ICAgewo+ICsKPiAg IAlpZiAoYWRldi0+aW5fcGNpX2Vycl9yZWNvdmVyeSkKPiAgIAkJcmV0dXJuOwo+ICAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nbWMuYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nbWMuYwo+IGluZGV4IGZlMWEzOWZmZGE3Mi4u MWJlYjRlNjRiODg0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9nbWMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nbWMu Ywo+IEBAIC0zMSw2ICszMSw4IEBACj4gICAjaW5jbHVkZSAiYW1kZ3B1X3Jhcy5oIgo+ICAgI2lu Y2x1ZGUgImFtZGdwdV94Z21pLmgiCj4gICAKPiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4g Kwo+ICAgLyoqCj4gICAgKiBhbWRncHVfZ21jX2dldF9wZGVfZm9yX2JvIC0gZ2V0IHRoZSBQREUg Zm9yIGEgQk8KPiAgICAqCj4gQEAgLTk4LDYgKzEwMCwxMCBAQCBpbnQgYW1kZ3B1X2dtY19zZXRf cHRlX3BkZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdm9pZCAqY3B1X3B0X2FkZHIsCj4g ICB7Cj4gICAJdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKWNwdV9wdF9hZGRyOwo+ICAgCXVp bnQ2NF90IHZhbHVlOwo+ICsJaW50IGlkeDsKPiArCj4gKwlpZiAoIWRybV9kZXZfZW50ZXIoJmFk ZXYtPmRkZXYsICZpZHgpKQo+ICsJCXJldHVybiAwOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBUaGUg Zm9sbG93aW5nIGlzIGZvciBQVEUgb25seS4gR0FSVCBkb2VzIG5vdCBoYXZlIFBERXMuCj4gQEAg LTEwNSw2ICsxMTEsOSBAQCBpbnQgYW1kZ3B1X2dtY19zZXRfcHRlX3BkZShzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwgdm9pZCAqY3B1X3B0X2FkZHIsCj4gICAJdmFsdWUgPSBhZGRyICYgMHgw MDAwRkZGRkZGRkZGMDAwVUxMOwo+ICAgCXZhbHVlIHw9IGZsYWdzOwo+ICAgCXdyaXRlcSh2YWx1 ZSwgcHRyICsgKGdwdV9wYWdlX2lkeCAqIDgpKTsKPiArCj4gKwlkcm1fZGV2X2V4aXQoaWR4KTsK PiArCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2liLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfaWIuYwo+IGluZGV4IDc2NDUyMjNlYTBlZi4uYjNhMWZmMDRjMTBmIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9pYi5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2liLmMKPiBAQCAtMzEsNiArMzEsNyBAQAo+ICAg Cj4gICAjaW5jbHVkZSA8ZHJtL2FtZGdwdV9kcm0uaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2Rl YnVnZnMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4gICAKPiAgICNpbmNsdWRlICJh bWRncHUuaCIKPiAgICNpbmNsdWRlICJhdG9tLmgiCj4gQEAgLTEzOCw3ICsxMzksNyBAQCBpbnQg YW1kZ3B1X2liX3NjaGVkdWxlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdW5zaWduZWQgbnVt X2licywKPiAgIAlib29sIHNlY3VyZTsKPiAgIAo+ICAgCXVuc2lnbmVkIGk7Cj4gLQlpbnQgciA9 IDA7Cj4gKwlpbnQgaWR4LCByID0gMDsKPiAgIAlib29sIG5lZWRfcGlwZV9zeW5jID0gZmFsc2U7 Cj4gICAKPiAgIAlpZiAobnVtX2licyA9PSAwKQo+IEBAIC0xNzAsMTQyICsxNzEsMTUxIEBAIGlu dCBhbWRncHVfaWJfc2NoZWR1bGUoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCB1bnNpZ25lZCBu dW1faWJzLAo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9Cj4gICAKPiAtCWFsbG9jX3NpemUg PSByaW5nLT5mdW5jcy0+ZW1pdF9mcmFtZV9zaXplICsgbnVtX2licyAqCj4gLQkJcmluZy0+ZnVu Y3MtPmVtaXRfaWJfc2l6ZTsKPiArCWlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4 KSkgewo+ICAgCj4gLQlyID0gYW1kZ3B1X3JpbmdfYWxsb2MocmluZywgYWxsb2Nfc2l6ZSk7Cj4g LQlpZiAocikgewo+IC0JCWRldl9lcnIoYWRldi0+ZGV2LCAic2NoZWR1bGluZyBJQiBmYWlsZWQg KCVkKS5cbiIsIHIpOwo+IC0JCXJldHVybiByOwo+IC0JfQo+IC0KPiAtCW5lZWRfY3R4X3N3aXRj aCA9IHJpbmctPmN1cnJlbnRfY3R4ICE9IGZlbmNlX2N0eDsKPiAtCWlmIChyaW5nLT5mdW5jcy0+ ZW1pdF9waXBlbGluZV9zeW5jICYmIGpvYiAmJgo+IC0JICAgICgodG1wID0gYW1kZ3B1X3N5bmNf Z2V0X2ZlbmNlKCZqb2ItPnNjaGVkX3N5bmMpKSB8fAo+IC0JICAgICAoYW1kZ3B1X3NyaW92X3Zm KGFkZXYpICYmIG5lZWRfY3R4X3N3aXRjaCkgfHwKPiAtCSAgICAgYW1kZ3B1X3ZtX25lZWRfcGlw ZWxpbmVfc3luYyhyaW5nLCBqb2IpKSkgewo+IC0JCW5lZWRfcGlwZV9zeW5jID0gdHJ1ZTsKPiAt Cj4gLQkJaWYgKHRtcCkKPiAtCQkJdHJhY2VfYW1kZ3B1X2liX3BpcGVfc3luYyhqb2IsIHRtcCk7 Cj4gLQo+IC0JCWRtYV9mZW5jZV9wdXQodG1wKTsKPiAtCX0KPiArCQlhbGxvY19zaXplID0gcmlu Zy0+ZnVuY3MtPmVtaXRfZnJhbWVfc2l6ZSArIG51bV9pYnMgKgo+ICsJCQlyaW5nLT5mdW5jcy0+ ZW1pdF9pYl9zaXplOwo+ICAgCj4gLQlpZiAoKGliLT5mbGFncyAmIEFNREdQVV9JQl9GTEFHX0VN SVRfTUVNX1NZTkMpICYmIHJpbmctPmZ1bmNzLT5lbWl0X21lbV9zeW5jKQo+IC0JCXJpbmctPmZ1 bmNzLT5lbWl0X21lbV9zeW5jKHJpbmcpOwo+ICsJCXIgPSBhbWRncHVfcmluZ19hbGxvYyhyaW5n LCBhbGxvY19zaXplKTsKPiArCQlpZiAocikgewo+ICsJCQlkZXZfZXJyKGFkZXYtPmRldiwgInNj aGVkdWxpbmcgSUIgZmFpbGVkICglZCkuXG4iLCByKTsKPiArCQkJZ290byBleGl0Owo+ICsJCX0K PiAgIAo+IC0JaWYgKHJpbmctPmZ1bmNzLT5lbWl0X3dhdmVfbGltaXQgJiYKPiAtCSAgICByaW5n LT5od19wcmlvID09IEFNREdQVV9HRlhfUElQRV9QUklPX0hJR0gpCj4gLQkJcmluZy0+ZnVuY3Mt PmVtaXRfd2F2ZV9saW1pdChyaW5nLCB0cnVlKTsKPiArCQluZWVkX2N0eF9zd2l0Y2ggPSByaW5n LT5jdXJyZW50X2N0eCAhPSBmZW5jZV9jdHg7Cj4gKwkJaWYgKHJpbmctPmZ1bmNzLT5lbWl0X3Bp cGVsaW5lX3N5bmMgJiYgam9iICYmCj4gKwkJICAgICgodG1wID0gYW1kZ3B1X3N5bmNfZ2V0X2Zl bmNlKCZqb2ItPnNjaGVkX3N5bmMpKSB8fAo+ICsJCSAgICAgKGFtZGdwdV9zcmlvdl92ZihhZGV2 KSAmJiBuZWVkX2N0eF9zd2l0Y2gpIHx8Cj4gKwkJICAgICBhbWRncHVfdm1fbmVlZF9waXBlbGlu ZV9zeW5jKHJpbmcsIGpvYikpKSB7Cj4gKwkJCW5lZWRfcGlwZV9zeW5jID0gdHJ1ZTsKPiAgIAo+ IC0JaWYgKHJpbmctPmZ1bmNzLT5pbnNlcnRfc3RhcnQpCj4gLQkJcmluZy0+ZnVuY3MtPmluc2Vy dF9zdGFydChyaW5nKTsKPiArCQkJaWYgKHRtcCkKPiArCQkJCXRyYWNlX2FtZGdwdV9pYl9waXBl X3N5bmMoam9iLCB0bXApOwo+ICAgCj4gLQlpZiAoam9iKSB7Cj4gLQkJciA9IGFtZGdwdV92bV9m bHVzaChyaW5nLCBqb2IsIG5lZWRfcGlwZV9zeW5jKTsKPiAtCQlpZiAocikgewo+IC0JCQlhbWRn cHVfcmluZ191bmRvKHJpbmcpOwo+IC0JCQlyZXR1cm4gcjsKPiArCQkJZG1hX2ZlbmNlX3B1dCh0 bXApOwo+ICAgCQl9Cj4gLQl9Cj4gICAKPiAtCWlmIChqb2IgJiYgcmluZy0+ZnVuY3MtPmluaXRf Y29uZF9leGVjKQo+IC0JCXBhdGNoX29mZnNldCA9IGFtZGdwdV9yaW5nX2luaXRfY29uZF9leGVj KHJpbmcpOwo+ICsJCWlmICgoaWItPmZsYWdzICYgQU1ER1BVX0lCX0ZMQUdfRU1JVF9NRU1fU1lO QykgJiYgcmluZy0+ZnVuY3MtPmVtaXRfbWVtX3N5bmMpCj4gKwkJCXJpbmctPmZ1bmNzLT5lbWl0 X21lbV9zeW5jKHJpbmcpOwo+ICAgCj4gLSNpZmRlZiBDT05GSUdfWDg2XzY0Cj4gLQlpZiAoIShh ZGV2LT5mbGFncyAmIEFNRF9JU19BUFUpKQo+IC0jZW5kaWYKPiAtCXsKPiAtCQlpZiAocmluZy0+ ZnVuY3MtPmVtaXRfaGRwX2ZsdXNoKQo+IC0JCQlhbWRncHVfcmluZ19lbWl0X2hkcF9mbHVzaChy aW5nKTsKPiAtCQllbHNlCj4gLQkJCWFtZGdwdV9hc2ljX2ZsdXNoX2hkcChhZGV2LCByaW5nKTsK PiAtCX0KPiArCQlpZiAocmluZy0+ZnVuY3MtPmVtaXRfd2F2ZV9saW1pdCAmJgo+ICsJCSAgICBy aW5nLT5od19wcmlvID09IEFNREdQVV9HRlhfUElQRV9QUklPX0hJR0gpCj4gKwkJCXJpbmctPmZ1 bmNzLT5lbWl0X3dhdmVfbGltaXQocmluZywgdHJ1ZSk7Cj4gICAKPiAtCWlmIChuZWVkX2N0eF9z d2l0Y2gpCj4gLQkJc3RhdHVzIHw9IEFNREdQVV9IQVZFX0NUWF9TV0lUQ0g7Cj4gKwkJaWYgKHJp bmctPmZ1bmNzLT5pbnNlcnRfc3RhcnQpCj4gKwkJCXJpbmctPmZ1bmNzLT5pbnNlcnRfc3RhcnQo cmluZyk7Cj4gICAKPiAtCXNraXBfcHJlYW1ibGUgPSByaW5nLT5jdXJyZW50X2N0eCA9PSBmZW5j ZV9jdHg7Cj4gLQlpZiAoam9iICYmIHJpbmctPmZ1bmNzLT5lbWl0X2NudHhjbnRsKSB7Cj4gLQkJ c3RhdHVzIHw9IGpvYi0+cHJlYW1ibGVfc3RhdHVzOwo+IC0JCXN0YXR1cyB8PSBqb2ItPnByZWVt cHRpb25fc3RhdHVzOwo+IC0JCWFtZGdwdV9yaW5nX2VtaXRfY250eGNudGwocmluZywgc3RhdHVz KTsKPiAtCX0KPiArCQlpZiAoam9iKSB7Cj4gKwkJCXIgPSBhbWRncHVfdm1fZmx1c2gocmluZywg am9iLCBuZWVkX3BpcGVfc3luYyk7Cj4gKwkJCWlmIChyKSB7Cj4gKwkJCQlhbWRncHVfcmluZ191 bmRvKHJpbmcpOwo+ICsJCQkJZ290byBleGl0Owo+ICsJCQl9Cj4gKwkJfQo+ICAgCj4gLQkvKiBT ZXR1cCBpbml0aWFsIFRNWmluZXNzIGFuZCBzZW5kIGl0IG9mZi4KPiAtCSAqLwo+IC0Jc2VjdXJl ID0gZmFsc2U7Cj4gLQlpZiAoam9iICYmIHJpbmctPmZ1bmNzLT5lbWl0X2ZyYW1lX2NudGwpIHsK PiAtCQlzZWN1cmUgPSBpYi0+ZmxhZ3MgJiBBTURHUFVfSUJfRkxBR1NfU0VDVVJFOwo+IC0JCWFt ZGdwdV9yaW5nX2VtaXRfZnJhbWVfY250bChyaW5nLCB0cnVlLCBzZWN1cmUpOwo+IC0JfQo+ICsJ CWlmIChqb2IgJiYgcmluZy0+ZnVuY3MtPmluaXRfY29uZF9leGVjKQo+ICsJCQlwYXRjaF9vZmZz ZXQgPSBhbWRncHVfcmluZ19pbml0X2NvbmRfZXhlYyhyaW5nKTsKPiArCj4gKwkjaWZkZWYgQ09O RklHX1g4Nl82NAo+ICsJCWlmICghKGFkZXYtPmZsYWdzICYgQU1EX0lTX0FQVSkpCj4gKwkjZW5k aWYKPiArCQl7Cj4gKwkJCWlmIChyaW5nLT5mdW5jcy0+ZW1pdF9oZHBfZmx1c2gpCj4gKwkJCQlh bWRncHVfcmluZ19lbWl0X2hkcF9mbHVzaChyaW5nKTsKPiArCQkJZWxzZQo+ICsJCQkJYW1kZ3B1 X2FzaWNfZmx1c2hfaGRwKGFkZXYsIHJpbmcpOwo+ICsJCX0KPiAgIAo+IC0JZm9yIChpID0gMDsg aSA8IG51bV9pYnM7ICsraSkgewo+IC0JCWliID0gJmlic1tpXTsKPiArCQlpZiAobmVlZF9jdHhf c3dpdGNoKQo+ICsJCQlzdGF0dXMgfD0gQU1ER1BVX0hBVkVfQ1RYX1NXSVRDSDsKPiAgIAo+IC0J CS8qIGRyb3AgcHJlYW1ibGUgSUJzIGlmIHdlIGRvbid0IGhhdmUgYSBjb250ZXh0IHN3aXRjaCAq Lwo+IC0JCWlmICgoaWItPmZsYWdzICYgQU1ER1BVX0lCX0ZMQUdfUFJFQU1CTEUpICYmCj4gLQkJ ICAgIHNraXBfcHJlYW1ibGUgJiYKPiAtCQkgICAgIShzdGF0dXMgJiBBTURHUFVfUFJFQU1CTEVf SUJfUFJFU0VOVF9GSVJTVCkgJiYKPiAtCQkgICAgIWFtZGdwdV9tY2JwICYmCj4gLQkJICAgICFh bWRncHVfc3Jpb3ZfdmYoYWRldikpIC8qIGZvciBTUklPViBwcmVlbXB0aW9uLCBQcmVhbWJsZSBD RSBpYiBtdXN0IGJlIGluc2VydGVkIGFueXdheSAqLwo+IC0JCQljb250aW51ZTsKPiArCQlza2lw X3ByZWFtYmxlID0gcmluZy0+Y3VycmVudF9jdHggPT0gZmVuY2VfY3R4Owo+ICsJCWlmIChqb2Ig JiYgcmluZy0+ZnVuY3MtPmVtaXRfY250eGNudGwpIHsKPiArCQkJc3RhdHVzIHw9IGpvYi0+cHJl YW1ibGVfc3RhdHVzOwo+ICsJCQlzdGF0dXMgfD0gam9iLT5wcmVlbXB0aW9uX3N0YXR1czsKPiAr CQkJYW1kZ3B1X3JpbmdfZW1pdF9jbnR4Y250bChyaW5nLCBzdGF0dXMpOwo+ICsJCX0KPiAgIAo+ ICsJCS8qIFNldHVwIGluaXRpYWwgVE1aaW5lc3MgYW5kIHNlbmQgaXQgb2ZmLgo+ICsJCSAqLwo+ ICsJCXNlY3VyZSA9IGZhbHNlOwo+ICAgCQlpZiAoam9iICYmIHJpbmctPmZ1bmNzLT5lbWl0X2Zy YW1lX2NudGwpIHsKPiAtCQkJaWYgKHNlY3VyZSAhPSAhIShpYi0+ZmxhZ3MgJiBBTURHUFVfSUJf RkxBR1NfU0VDVVJFKSkgewo+IC0JCQkJYW1kZ3B1X3JpbmdfZW1pdF9mcmFtZV9jbnRsKHJpbmcs IGZhbHNlLCBzZWN1cmUpOwo+IC0JCQkJc2VjdXJlID0gIXNlY3VyZTsKPiAtCQkJCWFtZGdwdV9y aW5nX2VtaXRfZnJhbWVfY250bChyaW5nLCB0cnVlLCBzZWN1cmUpOwo+ICsJCQlzZWN1cmUgPSBp Yi0+ZmxhZ3MgJiBBTURHUFVfSUJfRkxBR1NfU0VDVVJFOwo+ICsJCQlhbWRncHVfcmluZ19lbWl0 X2ZyYW1lX2NudGwocmluZywgdHJ1ZSwgc2VjdXJlKTsKPiArCQl9Cj4gKwo+ICsJCWZvciAoaSA9 IDA7IGkgPCBudW1faWJzOyArK2kpIHsKPiArCQkJaWIgPSAmaWJzW2ldOwo+ICsKPiArCQkJLyog ZHJvcCBwcmVhbWJsZSBJQnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGNvbnRleHQgc3dpdGNoICovCj4g KwkJCWlmICgoaWItPmZsYWdzICYgQU1ER1BVX0lCX0ZMQUdfUFJFQU1CTEUpICYmCj4gKwkJCSAg ICBza2lwX3ByZWFtYmxlICYmCj4gKwkJCSAgICAhKHN0YXR1cyAmIEFNREdQVV9QUkVBTUJMRV9J Ql9QUkVTRU5UX0ZJUlNUKSAmJgo+ICsJCQkgICAgIWFtZGdwdV9tY2JwICYmCj4gKwkJCSAgICAh YW1kZ3B1X3NyaW92X3ZmKGFkZXYpKSAvKiBmb3IgU1JJT1YgcHJlZW1wdGlvbiwgUHJlYW1ibGUg Q0UgaWIgbXVzdCBiZSBpbnNlcnRlZCBhbnl3YXkgKi8KPiArCQkJCWNvbnRpbnVlOwo+ICsKPiAr CQkJaWYgKGpvYiAmJiByaW5nLT5mdW5jcy0+ZW1pdF9mcmFtZV9jbnRsKSB7Cj4gKwkJCQlpZiAo c2VjdXJlICE9ICEhKGliLT5mbGFncyAmIEFNREdQVV9JQl9GTEFHU19TRUNVUkUpKSB7Cj4gKwkJ CQkJYW1kZ3B1X3JpbmdfZW1pdF9mcmFtZV9jbnRsKHJpbmcsIGZhbHNlLCBzZWN1cmUpOwo+ICsJ CQkJCXNlY3VyZSA9ICFzZWN1cmU7Cj4gKwkJCQkJYW1kZ3B1X3JpbmdfZW1pdF9mcmFtZV9jbnRs KHJpbmcsIHRydWUsIHNlY3VyZSk7Cj4gKwkJCQl9Cj4gICAJCQl9Cj4gKwo+ICsJCQlhbWRncHVf cmluZ19lbWl0X2liKHJpbmcsIGpvYiwgaWIsIHN0YXR1cyk7Cj4gKwkJCXN0YXR1cyAmPSB+QU1E R1BVX0hBVkVfQ1RYX1NXSVRDSDsKPiAgIAkJfQo+ICAgCj4gLQkJYW1kZ3B1X3JpbmdfZW1pdF9p YihyaW5nLCBqb2IsIGliLCBzdGF0dXMpOwo+IC0JCXN0YXR1cyAmPSB+QU1ER1BVX0hBVkVfQ1RY X1NXSVRDSDsKPiAtCX0KPiArCQlpZiAoam9iICYmIHJpbmctPmZ1bmNzLT5lbWl0X2ZyYW1lX2Nu dGwpCj4gKwkJCWFtZGdwdV9yaW5nX2VtaXRfZnJhbWVfY250bChyaW5nLCBmYWxzZSwgc2VjdXJl KTsKPiAgIAo+IC0JaWYgKGpvYiAmJiByaW5nLT5mdW5jcy0+ZW1pdF9mcmFtZV9jbnRsKQo+IC0J CWFtZGdwdV9yaW5nX2VtaXRfZnJhbWVfY250bChyaW5nLCBmYWxzZSwgc2VjdXJlKTsKPiArCSNp ZmRlZiBDT05GSUdfWDg2XzY0Cj4gKwkJaWYgKCEoYWRldi0+ZmxhZ3MgJiBBTURfSVNfQVBVKSkK PiArCSNlbmRpZgo+ICsJCQlhbWRncHVfYXNpY19pbnZhbGlkYXRlX2hkcChhZGV2LCByaW5nKTsK PiAgIAo+IC0jaWZkZWYgQ09ORklHX1g4Nl82NAo+IC0JaWYgKCEoYWRldi0+ZmxhZ3MgJiBBTURf SVNfQVBVKSkKPiAtI2VuZGlmCj4gLQkJYW1kZ3B1X2FzaWNfaW52YWxpZGF0ZV9oZHAoYWRldiwg cmluZyk7Cj4gKwkJaWYgKGliLT5mbGFncyAmIEFNREdQVV9JQl9GTEFHX1RDX1dCX05PVF9JTlZB TElEQVRFKQo+ICsJCQlmZW5jZV9mbGFncyB8PSBBTURHUFVfRkVOQ0VfRkxBR19UQ19XQl9PTkxZ Owo+ICAgCj4gLQlpZiAoaWItPmZsYWdzICYgQU1ER1BVX0lCX0ZMQUdfVENfV0JfTk9UX0lOVkFM SURBVEUpCj4gLQkJZmVuY2VfZmxhZ3MgfD0gQU1ER1BVX0ZFTkNFX0ZMQUdfVENfV0JfT05MWTsK PiArCQkvKiB3cmFwIHRoZSBsYXN0IElCIHdpdGggZmVuY2UgKi8KPiArCQlpZiAoam9iICYmIGpv Yi0+dWZfYWRkcikgewo+ICsJCQlhbWRncHVfcmluZ19lbWl0X2ZlbmNlKHJpbmcsIGpvYi0+dWZf YWRkciwgam9iLT51Zl9zZXF1ZW5jZSwKPiArCQkJCQkgICAgICAgZmVuY2VfZmxhZ3MgfCBBTURH UFVfRkVOQ0VfRkxBR182NEJJVCk7Cj4gKwkJfQo+ICAgCj4gLQkvKiB3cmFwIHRoZSBsYXN0IElC IHdpdGggZmVuY2UgKi8KPiAtCWlmIChqb2IgJiYgam9iLT51Zl9hZGRyKSB7Cj4gLQkJYW1kZ3B1 X3JpbmdfZW1pdF9mZW5jZShyaW5nLCBqb2ItPnVmX2FkZHIsIGpvYi0+dWZfc2VxdWVuY2UsCj4g LQkJCQkgICAgICAgZmVuY2VfZmxhZ3MgfCBBTURHUFVfRkVOQ0VfRkxBR182NEJJVCk7Cj4gLQl9 Cj4gKwkJciA9IGFtZGdwdV9mZW5jZV9lbWl0KHJpbmcsIGYsIGZlbmNlX2ZsYWdzKTsKPiArCQlp ZiAocikgewo+ICsJCQlkZXZfZXJyKGFkZXYtPmRldiwgImZhaWxlZCB0byBlbWl0IGZlbmNlICgl ZClcbiIsIHIpOwo+ICsJCQlpZiAoam9iICYmIGpvYi0+dm1pZCkKPiArCQkJCWFtZGdwdV92bWlk X3Jlc2V0KGFkZXYsIHJpbmctPmZ1bmNzLT52bWh1Yiwgam9iLT52bWlkKTsKPiArCQkJYW1kZ3B1 X3JpbmdfdW5kbyhyaW5nKTsKPiArCQkJZ290byBleGl0Owo+ICsJCX0KPiAgIAo+IC0JciA9IGFt ZGdwdV9mZW5jZV9lbWl0KHJpbmcsIGYsIGZlbmNlX2ZsYWdzKTsKPiAtCWlmIChyKSB7Cj4gLQkJ ZGV2X2VycihhZGV2LT5kZXYsICJmYWlsZWQgdG8gZW1pdCBmZW5jZSAoJWQpXG4iLCByKTsKPiAt CQlpZiAoam9iICYmIGpvYi0+dm1pZCkKPiAtCQkJYW1kZ3B1X3ZtaWRfcmVzZXQoYWRldiwgcmlu Zy0+ZnVuY3MtPnZtaHViLCBqb2ItPnZtaWQpOwo+IC0JCWFtZGdwdV9yaW5nX3VuZG8ocmluZyk7 Cj4gLQkJcmV0dXJuIHI7Cj4gLQl9Cj4gKwkJaWYgKHJpbmctPmZ1bmNzLT5pbnNlcnRfZW5kKQo+ ICsJCQlyaW5nLT5mdW5jcy0+aW5zZXJ0X2VuZChyaW5nKTsKPiAgIAo+IC0JaWYgKHJpbmctPmZ1 bmNzLT5pbnNlcnRfZW5kKQo+IC0JCXJpbmctPmZ1bmNzLT5pbnNlcnRfZW5kKHJpbmcpOwo+ICsJ CWlmIChwYXRjaF9vZmZzZXQgIT0gfjAgJiYgcmluZy0+ZnVuY3MtPnBhdGNoX2NvbmRfZXhlYykK PiArCQkJYW1kZ3B1X3JpbmdfcGF0Y2hfY29uZF9leGVjKHJpbmcsIHBhdGNoX29mZnNldCk7Cj4g ICAKPiAtCWlmIChwYXRjaF9vZmZzZXQgIT0gfjAgJiYgcmluZy0+ZnVuY3MtPnBhdGNoX2NvbmRf ZXhlYykKPiAtCQlhbWRncHVfcmluZ19wYXRjaF9jb25kX2V4ZWMocmluZywgcGF0Y2hfb2Zmc2V0 KTsKPiArCQlyaW5nLT5jdXJyZW50X2N0eCA9IGZlbmNlX2N0eDsKPiArCQlpZiAodm0gJiYgcmlu Zy0+ZnVuY3MtPmVtaXRfc3dpdGNoX2J1ZmZlcikKPiArCQkJYW1kZ3B1X3JpbmdfZW1pdF9zd2l0 Y2hfYnVmZmVyKHJpbmcpOwo+ICAgCj4gLQlyaW5nLT5jdXJyZW50X2N0eCA9IGZlbmNlX2N0eDsK PiAtCWlmICh2bSAmJiByaW5nLT5mdW5jcy0+ZW1pdF9zd2l0Y2hfYnVmZmVyKQo+IC0JCWFtZGdw dV9yaW5nX2VtaXRfc3dpdGNoX2J1ZmZlcihyaW5nKTsKPiArCQlpZiAocmluZy0+ZnVuY3MtPmVt aXRfd2F2ZV9saW1pdCAmJgo+ICsJCSAgICByaW5nLT5od19wcmlvID09IEFNREdQVV9HRlhfUElQ RV9QUklPX0hJR0gpCj4gKwkJCXJpbmctPmZ1bmNzLT5lbWl0X3dhdmVfbGltaXQocmluZywgZmFs c2UpOwo+ICAgCj4gLQlpZiAocmluZy0+ZnVuY3MtPmVtaXRfd2F2ZV9saW1pdCAmJgo+IC0JICAg IHJpbmctPmh3X3ByaW8gPT0gQU1ER1BVX0dGWF9QSVBFX1BSSU9fSElHSCkKPiAtCQlyaW5nLT5m dW5jcy0+ZW1pdF93YXZlX2xpbWl0KHJpbmcsIGZhbHNlKTsKPiArCQlhbWRncHVfcmluZ19jb21t aXQocmluZyk7Cj4gICAKPiAtCWFtZGdwdV9yaW5nX2NvbW1pdChyaW5nKTsKPiAtCXJldHVybiAw Owo+ICsJfSBlbHNlIHsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gK2V4aXQ6Cj4g Kwlkcm1fZGV2X2V4aXQoaWR4KTsKPiArCXJldHVybiByOwo+ICAgfQo+ICAgCj4gICAvKioKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5jCj4gaW5kZXggODM5OTE3ZWI3YmMz Li42MzhiN2ZkMTg1N2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3BzcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Bz cC5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJl Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fZHJ2Lmg+Cj4gICAKPiAgICNpbmNsdWRlICJhbWRncHUuaCIKPiAgICNpbmNsdWRlICJhbWRn cHVfcHNwLmgiCj4gQEAgLTM4LDYgKzM5LDggQEAKPiAgICNpbmNsdWRlICJhbWRncHVfcmFzLmgi Cj4gICAjaW5jbHVkZSAiYW1kZ3B1X3NlY3VyZWRpc3BsYXkuaCIKPiAgIAo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9kcnYuaD4KPiArCj4gICBzdGF0aWMgaW50IHBzcF9zeXNmc19pbml0KHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KTsKPiAgIHN0YXRpYyB2b2lkIHBzcF9zeXNmc19maW5pKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KTsKPiAgIAo+IEBAIC0yNDksNyArMjUyLDcgQEAgcHNwX2Nt ZF9zdWJtaXRfYnVmKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwLAo+ICAgCQkgICBzdHJ1Y3QgcHNw X2dmeF9jbWRfcmVzcCAqY21kLCB1aW50NjRfdCBmZW5jZV9tY19hZGRyKQo+ICAgewo+ICAgCWlu dCByZXQ7Cj4gLQlpbnQgaW5kZXg7Cj4gKwlpbnQgaW5kZXgsIGlkeDsKPiAgIAlpbnQgdGltZW91 dCA9IDIwMDAwOwo+ICAgCWJvb2wgcmFzX2ludHIgPSBmYWxzZTsKPiAgIAlib29sIHNraXBfdW5z dXBwb3J0ID0gZmFsc2U7Cj4gQEAgLTI1Nyw2ICsyNjAsOSBAQCBwc3BfY21kX3N1Ym1pdF9idWYo c3RydWN0IHBzcF9jb250ZXh0ICpwc3AsCj4gICAJaWYgKHBzcC0+YWRldi0+aW5fcGNpX2Vycl9y ZWNvdmVyeSkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiArCWlmICghZHJtX2Rldl9lbnRlcigmcHNw LT5hZGV2LT5kZGV2LCAmaWR4KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gICAJbXV0ZXhfbG9jaygm cHNwLT5tdXRleCk7Cj4gICAKPiAgIAltZW1zZXQocHNwLT5jbWRfYnVmX21lbSwgMCwgUFNQX0NN RF9CVUZGRVJfU0laRSk7Cj4gQEAgLTI2Nyw4ICsyNzMsNyBAQCBwc3BfY21kX3N1Ym1pdF9idWYo c3RydWN0IHBzcF9jb250ZXh0ICpwc3AsCj4gICAJcmV0ID0gcHNwX3JpbmdfY21kX3N1Ym1pdChw c3AsIHBzcC0+Y21kX2J1Zl9tY19hZGRyLCBmZW5jZV9tY19hZGRyLCBpbmRleCk7Cj4gICAJaWYg KHJldCkgewo+ICAgCQlhdG9taWNfZGVjKCZwc3AtPmZlbmNlX3ZhbHVlKTsKPiAtCQltdXRleF91 bmxvY2soJnBzcC0+bXV0ZXgpOwo+IC0JCXJldHVybiByZXQ7Cj4gKwkJZ290byBleGl0Owo+ICAg CX0KPiAgIAo+ICAgCWFtZGdwdV9hc2ljX2ludmFsaWRhdGVfaGRwKHBzcC0+YWRldiwgTlVMTCk7 Cj4gQEAgLTMwOCw4ICszMTMsOCBAQCBwc3BfY21kX3N1Ym1pdF9idWYoc3RydWN0IHBzcF9jb250 ZXh0ICpwc3AsCj4gICAJCQkgcHNwLT5jbWRfYnVmX21lbS0+Y21kX2lkLAo+ICAgCQkJIHBzcC0+ Y21kX2J1Zl9tZW0tPnJlc3Auc3RhdHVzKTsKPiAgIAkJaWYgKCF0aW1lb3V0KSB7Cj4gLQkJCW11 dGV4X3VubG9jaygmcHNwLT5tdXRleCk7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCQlyZXQg PSAtRUlOVkFMOwo+ICsJCQlnb3RvIGV4aXQ7Cj4gICAJCX0KPiAgIAl9Cj4gICAKPiBAQCAtMzE3 LDggKzMyMiwxMCBAQCBwc3BfY21kX3N1Ym1pdF9idWYoc3RydWN0IHBzcF9jb250ZXh0ICpwc3As Cj4gICAJCXVjb2RlLT50bXJfbWNfYWRkcl9sbyA9IHBzcC0+Y21kX2J1Zl9tZW0tPnJlc3AuZndf YWRkcl9sbzsKPiAgIAkJdWNvZGUtPnRtcl9tY19hZGRyX2hpID0gcHNwLT5jbWRfYnVmX21lbS0+ cmVzcC5md19hZGRyX2hpOwo+ICAgCX0KPiAtCW11dGV4X3VubG9jaygmcHNwLT5tdXRleCk7Cj4g ICAKPiArZXhpdDoKPiArCW11dGV4X3VubG9jaygmcHNwLT5tdXRleCk7Cj4gKwlkcm1fZGV2X2V4 aXQoaWR4KTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gQEAgLTM1NSw4ICszNjIsNyBA QCBzdGF0aWMgaW50IHBzcF9sb2FkX3RvYyhzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCwKPiAgIAlp ZiAoIWNtZCkKPiAgIAkJcmV0dXJuIC1FTk9NRU07Cj4gICAJLyogQ29weSB0b2MgdG8gcHNwIGZp cm13YXJlIHByaXZhdGUgYnVmZmVyICovCj4gLQltZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQ U1BfMV9NRUcpOwo+IC0JbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT50b2Nfc3RhcnRfYWRk ciwgcHNwLT50b2NfYmluX3NpemUpOwo+ICsJcHNwX2NvcHlfZncocHNwLCBwc3AtPnRvY19zdGFy dF9hZGRyLCBwc3AtPnRvY19iaW5fc2l6ZSk7Cj4gICAKPiAgIAlwc3BfcHJlcF9sb2FkX3RvY19j bWRfYnVmKGNtZCwgcHNwLT5md19wcmlfbWNfYWRkciwgcHNwLT50b2NfYmluX3NpemUpOwo+ICAg Cj4gQEAgLTU3MSw4ICs1NzcsNyBAQCBzdGF0aWMgaW50IHBzcF9hc2RfbG9hZChzdHJ1Y3QgcHNw X2NvbnRleHQgKnBzcCkKPiAgIAlpZiAoIWNtZCkKPiAgIAkJcmV0dXJuIC1FTk9NRU07Cj4gICAK PiAtCW1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7Cj4gLQltZW1jcHkocHNw LT5md19wcmlfYnVmLCBwc3AtPmFzZF9zdGFydF9hZGRyLCBwc3AtPmFzZF91Y29kZV9zaXplKTsK PiArCXBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5hc2Rfc3RhcnRfYWRkciwgcHNwLT5hc2RfdWNvZGVf c2l6ZSk7Cj4gICAKPiAgIAlwc3BfcHJlcF9hc2RfbG9hZF9jbWRfYnVmKGNtZCwgcHNwLT5md19w cmlfbWNfYWRkciwKPiAgIAkJCQkgIHBzcC0+YXNkX3Vjb2RlX3NpemUpOwo+IEBAIC03MjcsOCAr NzMyLDcgQEAgc3RhdGljIGludCBwc3BfeGdtaV9sb2FkKHN0cnVjdCBwc3BfY29udGV4dCAqcHNw KQo+ICAgCWlmICghY21kKQo+ICAgCQlyZXR1cm4gLUVOT01FTTsKPiAgIAo+IC0JbWVtc2V0KHBz cC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPiAtCW1lbWNweShwc3AtPmZ3X3ByaV9idWYs IHBzcC0+dGFfeGdtaV9zdGFydF9hZGRyLCBwc3AtPnRhX3hnbWlfdWNvZGVfc2l6ZSk7Cj4gKwlw c3BfY29weV9mdyhwc3AsIHBzcC0+dGFfeGdtaV9zdGFydF9hZGRyLCBwc3AtPnRhX3hnbWlfdWNv ZGVfc2l6ZSk7Cj4gICAKPiAgIAlwc3BfcHJlcF90YV9sb2FkX2NtZF9idWYoY21kLAo+ICAgCQkJ CSBwc3AtPmZ3X3ByaV9tY19hZGRyLAo+IEBAIC05ODMsOCArOTg3LDcgQEAgc3RhdGljIGludCBw c3BfcmFzX2xvYWQoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4gICAJaWYgKCFjbWQpCj4gICAJ CXJldHVybiAtRU5PTUVNOwo+ICAgCj4gLQltZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1Bf MV9NRUcpOwo+IC0JbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT50YV9yYXNfc3RhcnRfYWRk ciwgcHNwLT50YV9yYXNfdWNvZGVfc2l6ZSk7Cj4gKwlwc3BfY29weV9mdyhwc3AsIHBzcC0+dGFf cmFzX3N0YXJ0X2FkZHIsIHBzcC0+dGFfcmFzX3Vjb2RlX3NpemUpOwo+ICAgCj4gICAJcHNwX3By ZXBfdGFfbG9hZF9jbWRfYnVmKGNtZCwKPiAgIAkJCQkgcHNwLT5md19wcmlfbWNfYWRkciwKPiBA QCAtMTIyMCw4ICsxMjIzLDcgQEAgc3RhdGljIGludCBwc3BfaGRjcF9sb2FkKHN0cnVjdCBwc3Bf Y29udGV4dCAqcHNwKQo+ICAgCWlmICghY21kKQo+ICAgCQlyZXR1cm4gLUVOT01FTTsKPiAgIAo+ IC0JbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPiAtCW1lbWNweShwc3At PmZ3X3ByaV9idWYsIHBzcC0+dGFfaGRjcF9zdGFydF9hZGRyLAo+ICsJcHNwX2NvcHlfZncocHNw LCBwc3AtPnRhX2hkY3Bfc3RhcnRfYWRkciwKPiAgIAkgICAgICAgcHNwLT50YV9oZGNwX3Vjb2Rl X3NpemUpOwo+ICAgCj4gICAJcHNwX3ByZXBfdGFfbG9hZF9jbWRfYnVmKGNtZCwKPiBAQCAtMTM3 Miw4ICsxMzc0LDcgQEAgc3RhdGljIGludCBwc3BfZHRtX2xvYWQoc3RydWN0IHBzcF9jb250ZXh0 ICpwc3ApCj4gICAJaWYgKCFjbWQpCj4gICAJCXJldHVybiAtRU5PTUVNOwo+ICAgCj4gLQltZW1z ZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+IC0JbWVtY3B5KHBzcC0+ZndfcHJp X2J1ZiwgcHNwLT50YV9kdG1fc3RhcnRfYWRkciwgcHNwLT50YV9kdG1fdWNvZGVfc2l6ZSk7Cj4g Kwlwc3BfY29weV9mdyhwc3AsIHBzcC0+dGFfZHRtX3N0YXJ0X2FkZHIsIHBzcC0+dGFfZHRtX3Vj b2RlX3NpemUpOwo+ICAgCj4gICAJcHNwX3ByZXBfdGFfbG9hZF9jbWRfYnVmKGNtZCwKPiAgIAkJ CQkgcHNwLT5md19wcmlfbWNfYWRkciwKPiBAQCAtMTUxOCw4ICsxNTE5LDcgQEAgc3RhdGljIGlu dCBwc3BfcmFwX2xvYWQoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4gICAJaWYgKCFjbWQpCj4g ICAJCXJldHVybiAtRU5PTUVNOwo+ICAgCj4gLQltZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQ U1BfMV9NRUcpOwo+IC0JbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT50YV9yYXBfc3RhcnRf YWRkciwgcHNwLT50YV9yYXBfdWNvZGVfc2l6ZSk7Cj4gKwlwc3BfY29weV9mdyhwc3AsIHBzcC0+ dGFfcmFwX3N0YXJ0X2FkZHIsIHBzcC0+dGFfcmFwX3Vjb2RlX3NpemUpOwo+ICAgCj4gICAJcHNw X3ByZXBfdGFfbG9hZF9jbWRfYnVmKGNtZCwKPiAgIAkJCQkgcHNwLT5md19wcmlfbWNfYWRkciwK PiBAQCAtMjkyOCw3ICsyOTI4LDcgQEAgc3RhdGljIHNzaXplX3QgcHNwX3VzYmNfcGRfZndfc3lz ZnNfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAo+ICAgCXN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2ID0gZHJtX3RvX2FkZXYoZGRldik7Cj4gICAJdm9pZCAqY3B1X2FkZHI7Cj4gICAJZG1hX2Fk ZHJfdCBkbWFfYWRkcjsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0LCBpZHg7Cj4gICAJY2hhciBm d19uYW1lWzEwMF07Cj4gICAJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1c2JjX3BkX2Z3Owo+ICAg Cj4gQEAgLTI5MzcsNDcgKzI5MzcsNjYgQEAgc3RhdGljIHNzaXplX3QgcHNwX3VzYmNfcGRfZndf c3lzZnNfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAo+ICAgCQlyZXR1cm4gLUVCVVNZOwo+ICAg CX0KPiAgIAo+IC0Jc25wcmludGYoZndfbmFtZSwgc2l6ZW9mKGZ3X25hbWUpLCAiYW1kZ3B1LyVz IiwgYnVmKTsKPiAtCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnVzYmNfcGRfZncsIGZ3X25hbWUs IGFkZXYtPmRldik7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gZmFpbDsKPiArCWlmIChkcm1fZGV2 X2VudGVyKGRkZXYsICZpZHgpKSB7Cj4gICAKPiAtCS8qIFdlIG5lZWQgY29udGlndW91cyBwaHlz aWNhbCBtZW0gdG8gcGxhY2UgdGhlIEZXICBmb3IgcHNwIHRvIGFjY2VzcyAqLwo+IC0JY3B1X2Fk ZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoYWRldi0+ZGV2LCB1c2JjX3BkX2Z3LT5zaXplLCAmZG1h X2FkZHIsIEdGUF9LRVJORUwpOwo+ICsJCXNucHJpbnRmKGZ3X25hbWUsIHNpemVvZihmd19uYW1l KSwgImFtZGdwdS8lcyIsIGJ1Zik7Cj4gKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmdXNiY19w ZF9mdywgZndfbmFtZSwgYWRldi0+ZGV2KTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIGZhaWw7 Cj4gICAKPiAtCXJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKGFkZXYtPmRldiwgZG1hX2FkZHIpOwo+ IC0JaWYgKHJldCkKPiAtCQlnb3RvIHJlbF9idWY7Cj4gKwkJLyogV2UgbmVlZCBjb250aWd1b3Vz IHBoeXNpY2FsIG1lbSB0byBwbGFjZSB0aGUgRlcgIGZvciBwc3AgdG8gYWNjZXNzICovCj4gKwkJ Y3B1X2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoYWRldi0+ZGV2LCB1c2JjX3BkX2Z3LT5zaXpl LCAmZG1hX2FkZHIsIEdGUF9LRVJORUwpOwo+ICAgCj4gLQltZW1jcHlfdG9pbyhjcHVfYWRkciwg dXNiY19wZF9mdy0+ZGF0YSwgdXNiY19wZF9mdy0+c2l6ZSk7Cj4gKwkJcmV0ID0gZG1hX21hcHBp bmdfZXJyb3IoYWRldi0+ZGV2LCBkbWFfYWRkcik7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBy ZWxfYnVmOwo+ICAgCj4gLQkvKgo+IC0JICogeDg2IHNwZWNpZmljIHdvcmthcm91bmQuCj4gLQkg KiBXaXRob3V0IGl0IHRoZSBidWZmZXIgaXMgaW52aXNpYmxlIGluIFBTUC4KPiAtCSAqCj4gLQkg KiBUT0RPIFJlbW92ZSBvbmNlIFBTUCBzdGFydHMgc25vb3BpbmcgQ1BVIGNhY2hlCj4gLQkgKi8K PiArCQltZW1jcHlfdG9pbyhjcHVfYWRkciwgdXNiY19wZF9mdy0+ZGF0YSwgdXNiY19wZF9mdy0+ c2l6ZSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogeDg2IHNwZWNpZmljIHdvcmthcm91bmQuCj4gKwkJ ICogV2l0aG91dCBpdCB0aGUgYnVmZmVyIGlzIGludmlzaWJsZSBpbiBQU1AuCj4gKwkJICoKPiAr CQkgKiBUT0RPIFJlbW92ZSBvbmNlIFBTUCBzdGFydHMgc25vb3BpbmcgQ1BVIGNhY2hlCj4gKwkJ ICovCj4gICAjaWZkZWYgQ09ORklHX1g4Ngo+IC0JY2xmbHVzaF9jYWNoZV9yYW5nZShjcHVfYWRk ciwgKHVzYmNfcGRfZnctPnNpemUgJiB+KEwxX0NBQ0hFX0JZVEVTIC0gMSkpKTsKPiArCQljbGZs dXNoX2NhY2hlX3JhbmdlKGNwdV9hZGRyLCAodXNiY19wZF9mdy0+c2l6ZSAmIH4oTDFfQ0FDSEVf QllURVMgLSAxKSkpOwo+ICAgI2VuZGlmCj4gICAKPiAtCW11dGV4X2xvY2soJmFkZXYtPnBzcC5t dXRleCk7Cj4gLQlyZXQgPSBwc3BfbG9hZF91c2JjX3BkX2Z3KCZhZGV2LT5wc3AsIGRtYV9hZGRy KTsKPiAtCW11dGV4X3VubG9jaygmYWRldi0+cHNwLm11dGV4KTsKPiArCQltdXRleF9sb2NrKCZh ZGV2LT5wc3AubXV0ZXgpOwo+ICsJCXJldCA9IHBzcF9sb2FkX3VzYmNfcGRfZncoJmFkZXYtPnBz cCwgZG1hX2FkZHIpOwo+ICsJCW11dGV4X3VubG9jaygmYWRldi0+cHNwLm11dGV4KTsKPiAgIAo+ ICAgcmVsX2J1ZjoKPiAtCWRtYV9mcmVlX2NvaGVyZW50KGFkZXYtPmRldiwgdXNiY19wZF9mdy0+ c2l6ZSwgY3B1X2FkZHIsIGRtYV9hZGRyKTsKPiAtCXJlbGVhc2VfZmlybXdhcmUodXNiY19wZF9m dyk7Cj4gLQo+ICsJCWRtYV9mcmVlX2NvaGVyZW50KGFkZXYtPmRldiwgdXNiY19wZF9mdy0+c2l6 ZSwgY3B1X2FkZHIsIGRtYV9hZGRyKTsKPiArCQlyZWxlYXNlX2Zpcm13YXJlKHVzYmNfcGRfZncp Owo+ICAgZmFpbDoKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2Fk IFVTQkMgUEQgRlcsIGVyciA9ICVkIiwgcmV0KTsKPiAtCQlyZXR1cm4gcmV0Owo+ICsJCWlmIChy ZXQpIHsKPiArCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBVU0JDIFBEIEZXLCBlcnIgPSAl ZCIsIHJldCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsKPiArCQlkcm1fZGV2X2V4aXQo aWR4KTsKPiArCQlyZXR1cm4gY291bnQ7Cj4gKwl9IGVsc2Ugewo+ICsJCXJldHVybiAtRU5PREVW Owo+ICAgCX0KPiArfQo+ICsKPiArdm9pZCBwc3BfY29weV9mdyhzdHJ1Y3QgcHNwX2NvbnRleHQg KnBzcCwgdWludDhfdCAqc3RhcnRfYWRkciwgdWludDMyX3QgYmluX3NpemUpCj4gK3sKPiArCWlu dCBpZHg7Cj4gICAKPiAtCXJldHVybiBjb3VudDsKPiArCWlmICghZHJtX2Rldl9lbnRlcigmcHNw LT5hZGV2LT5kZGV2LCAmaWR4KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbWVtc2V0KHBzcC0+Zndf cHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPiArCW1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHN0YXJ0 X2FkZHIsIGJpbl9zaXplKTsKPiArCj4gKwlkcm1fZGV2X2V4aXQoaWR4KTsKPiAgIH0KPiAgIAo+ ICsKPiAgIHN0YXRpYyBERVZJQ0VfQVRUUih1c2JjX3BkX2Z3LCBTX0lSVUdPIHwgU19JV1VTUiwK PiAgIAkJICAgcHNwX3VzYmNfcGRfZndfc3lzZnNfcmVhZCwKPiAgIAkJICAgcHNwX3VzYmNfcGRf Zndfc3lzZnNfd3JpdGUpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfcHNwLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmgK PiBpbmRleCBjYjUwYmE0NDVmOGMuLjBkYmJlZGI4NGM4NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfcHNwLmgKPiBAQCAtNDE3LDQgKzQxNyw3IEBAIGludCBwc3BfaW5p dF90YV9taWNyb2NvZGUoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsCj4gICAJCQkgIGNvbnN0IGNo YXIgKmNoaXBfbmFtZSk7Cj4gICBpbnQgcHNwX2dldF9md19hdHRlc3RhdGlvbl9yZWNvcmRzX2Fk ZHIoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsCj4gICAJCQkJCXVpbnQ2NF90ICpvdXRwdXRfcHRy KTsKPiArCj4gK3ZvaWQgcHNwX2NvcHlfZncoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsIHVpbnQ4 X3QgKnN0YXJ0X2FkZHIsIHVpbnQzMl90IGJpbl9zaXplKTsKPiArCj4gICAjZW5kaWYKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmMKPiBpbmRleCBiNjQ0Yzc4NDc1ZmQu LmY5ZjcxMDA4ZjQ1NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfcmluZy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Jp bmcuYwo+IEBAIC0zNSw2ICszNSw4IEBACj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5j bHVkZSAiYXRvbS5oIgo+ICAgCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICsKPiAgIC8q Cj4gICAgKiBSaW5ncwo+ICAgICogTW9zdCBlbmdpbmVzIG9uIHRoZSBHUFUgYXJlIGZlZCB2aWEg cmluZyBidWZmZXJzLiAgUmluZwo+IEBAIC00NTksMyArNDYxLDcxIEBAIGludCBhbWRncHVfcmlu Z190ZXN0X2hlbHBlcihzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4gICAJcmluZy0+c2NoZWQu cmVhZHkgPSAhcjsKPiAgIAlyZXR1cm4gcjsKPiAgIH0KPiArCj4gK3ZvaWQgYW1kZ3B1X3Jpbmdf Y2xlYXJfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4gK3sKPiArCWludCBpZHg7Cj4g KwlpbnQgaSA9IDA7Cj4gKwo+ICsJaWYgKCFkcm1fZGV2X2VudGVyKCZyaW5nLT5hZGV2LT5kZGV2 LCAmaWR4KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJd2hpbGUgKGkgPD0gcmluZy0+YnVmX21hc2sp Cj4gKwkJcmluZy0+cmluZ1tpKytdID0gcmluZy0+ZnVuY3MtPm5vcDsKPiArCj4gKwlkcm1fZGV2 X2V4aXQoaWR4KTsKPiArCj4gK30KPiArCj4gK3ZvaWQgYW1kZ3B1X3Jpbmdfd3JpdGUoc3RydWN0 IGFtZGdwdV9yaW5nICpyaW5nLCB1aW50MzJfdCB2KQo+ICt7Cj4gKwlpbnQgaWR4Owo+ICsKPiAr CWlmICghZHJtX2Rldl9lbnRlcigmcmluZy0+YWRldi0+ZGRldiwgJmlkeCkpCj4gKwkJcmV0dXJu Owo+ICsKPiArCWlmIChyaW5nLT5jb3VudF9kdyA8PSAwKQo+ICsJCURSTV9FUlJPUigiYW1kZ3B1 OiB3cml0aW5nIG1vcmUgZHdvcmRzIHRvIHRoZSByaW5nIHRoYW4gZXhwZWN0ZWQhXG4iKTsKPiAr CXJpbmctPnJpbmdbcmluZy0+d3B0cisrICYgcmluZy0+YnVmX21hc2tdID0gdjsKPiArCXJpbmct PndwdHIgJj0gcmluZy0+cHRyX21hc2s7Cj4gKwlyaW5nLT5jb3VudF9kdy0tOwo+ICsKPiArCWRy bV9kZXZfZXhpdChpZHgpOwo+ICt9Cj4gKwo+ICt2b2lkIGFtZGdwdV9yaW5nX3dyaXRlX211bHRp cGxlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKPiArCQkJCQkgICAgICB2b2lkICpzcmMsIGlu dCBjb3VudF9kdykKPiArewo+ICsJdW5zaWduZWQgb2NjdXBpZWQsIGNodW5rMSwgY2h1bmsyOwo+ ICsJdm9pZCAqZHN0Owo+ICsJaW50IGlkeDsKPiArCj4gKwlpZiAoIWRybV9kZXZfZW50ZXIoJnJp bmctPmFkZXYtPmRkZXYsICZpZHgpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAodW5saWtlbHko cmluZy0+Y291bnRfZHcgPCBjb3VudF9kdykpCj4gKwkJRFJNX0VSUk9SKCJhbWRncHU6IHdyaXRp bmcgbW9yZSBkd29yZHMgdG8gdGhlIHJpbmcgdGhhbiBleHBlY3RlZCFcbiIpOwo+ICsKPiArCW9j Y3VwaWVkID0gcmluZy0+d3B0ciAmIHJpbmctPmJ1Zl9tYXNrOwo+ICsJZHN0ID0gKHZvaWQgKikm cmluZy0+cmluZ1tvY2N1cGllZF07Cj4gKwljaHVuazEgPSByaW5nLT5idWZfbWFzayArIDEgLSBv Y2N1cGllZDsKPiArCWNodW5rMSA9IChjaHVuazEgPj0gY291bnRfZHcpID8gY291bnRfZHc6IGNo dW5rMTsKPiArCWNodW5rMiA9IGNvdW50X2R3IC0gY2h1bmsxOwo+ICsJY2h1bmsxIDw8PSAyOwo+ ICsJY2h1bmsyIDw8PSAyOwo+ICsKPiArCWlmIChjaHVuazEpCj4gKwkJbWVtY3B5KGRzdCwgc3Jj LCBjaHVuazEpOwo+ICsKPiArCWlmIChjaHVuazIpIHsKPiArCQlzcmMgKz0gY2h1bmsxOwo+ICsJ CWRzdCA9ICh2b2lkICopcmluZy0+cmluZzsKPiArCQltZW1jcHkoZHN0LCBzcmMsIGNodW5rMik7 Cj4gKwl9Cj4gKwo+ICsJcmluZy0+d3B0ciArPSBjb3VudF9kdzsKPiArCXJpbmctPndwdHIgJj0g cmluZy0+cHRyX21hc2s7Cj4gKwlyaW5nLT5jb3VudF9kdyAtPSBjb3VudF9kdzsKPiArCj4gKwlk cm1fZGV2X2V4aXQoaWR4KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfcmluZy5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3JpbmcuaAo+IGluZGV4IDBmMTk1ZjdiZjc5Ny4uYzJiODNmNDhlNmQ2IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcmluZy5oCj4gQEAgLTI5Nyw1MyArMjk3LDEyIEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRncHVfcmluZ19zZXRfcHJlZW1wdF9jb25kX2V4ZWMoc3Ry dWN0IGFtZGdwdV9yaW5nICpyaW5nLAo+ICAgCSpyaW5nLT5jb25kX2V4ZV9jcHVfYWRkciA9IGNv bmRfZXhlYzsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X3JpbmdfY2xl YXJfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCj4gLXsKPiAtCWludCBpID0gMDsKPiAt CXdoaWxlIChpIDw9IHJpbmctPmJ1Zl9tYXNrKQo+IC0JCXJpbmctPnJpbmdbaSsrXSA9IHJpbmct PmZ1bmNzLT5ub3A7Cj4gLQo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X3Jp bmdfd3JpdGUoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCB1aW50MzJfdCB2KQo+IC17Cj4gLQlp ZiAocmluZy0+Y291bnRfZHcgPD0gMCkKPiAtCQlEUk1fRVJST1IoImFtZGdwdTogd3JpdGluZyBt b3JlIGR3b3JkcyB0byB0aGUgcmluZyB0aGFuIGV4cGVjdGVkIVxuIik7Cj4gLQlyaW5nLT5yaW5n W3JpbmctPndwdHIrKyAmIHJpbmctPmJ1Zl9tYXNrXSA9IHY7Cj4gLQlyaW5nLT53cHRyICY9IHJp bmctPnB0cl9tYXNrOwo+IC0JcmluZy0+Y291bnRfZHctLTsKPiAtfQo+ICt2b2lkIGFtZGdwdV9y aW5nX2NsZWFyX3Jpbmcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKTsKPiAgIAo+IC1zdGF0aWMg aW5saW5lIHZvaWQgYW1kZ3B1X3Jpbmdfd3JpdGVfbXVsdGlwbGUoc3RydWN0IGFtZGdwdV9yaW5n ICpyaW5nLAo+IC0JCQkJCSAgICAgIHZvaWQgKnNyYywgaW50IGNvdW50X2R3KQo+IC17Cj4gLQl1 bnNpZ25lZCBvY2N1cGllZCwgY2h1bmsxLCBjaHVuazI7Cj4gLQl2b2lkICpkc3Q7Cj4gLQo+IC0J aWYgKHVubGlrZWx5KHJpbmctPmNvdW50X2R3IDwgY291bnRfZHcpKQo+IC0JCURSTV9FUlJPUigi YW1kZ3B1OiB3cml0aW5nIG1vcmUgZHdvcmRzIHRvIHRoZSByaW5nIHRoYW4gZXhwZWN0ZWQhXG4i KTsKPiAtCj4gLQlvY2N1cGllZCA9IHJpbmctPndwdHIgJiByaW5nLT5idWZfbWFzazsKPiAtCWRz dCA9ICh2b2lkICopJnJpbmctPnJpbmdbb2NjdXBpZWRdOwo+IC0JY2h1bmsxID0gcmluZy0+YnVm X21hc2sgKyAxIC0gb2NjdXBpZWQ7Cj4gLQljaHVuazEgPSAoY2h1bmsxID49IGNvdW50X2R3KSA/ IGNvdW50X2R3OiBjaHVuazE7Cj4gLQljaHVuazIgPSBjb3VudF9kdyAtIGNodW5rMTsKPiAtCWNo dW5rMSA8PD0gMjsKPiAtCWNodW5rMiA8PD0gMjsKPiArdm9pZCBhbWRncHVfcmluZ193cml0ZShz dHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IHYpOwo+ICAgCj4gLQlpZiAoY2h1bmsx KQo+IC0JCW1lbWNweShkc3QsIHNyYywgY2h1bmsxKTsKPiAtCj4gLQlpZiAoY2h1bmsyKSB7Cj4g LQkJc3JjICs9IGNodW5rMTsKPiAtCQlkc3QgPSAodm9pZCAqKXJpbmctPnJpbmc7Cj4gLQkJbWVt Y3B5KGRzdCwgc3JjLCBjaHVuazIpOwo+IC0JfQo+IC0KPiAtCXJpbmctPndwdHIgKz0gY291bnRf ZHc7Cj4gLQlyaW5nLT53cHRyICY9IHJpbmctPnB0cl9tYXNrOwo+IC0JcmluZy0+Y291bnRfZHcg LT0gY291bnRfZHc7Cj4gLX0KPiArdm9pZCBhbWRncHVfcmluZ193cml0ZV9tdWx0aXBsZShzdHJ1 Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCj4gKwkJCQkJICAgICAgdm9pZCAqc3JjLCBpbnQgY291bnRf ZHcpOwo+ICAgCj4gICBpbnQgYW1kZ3B1X3JpbmdfdGVzdF9oZWxwZXIoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdXZkLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXZkLmMK PiBpbmRleCBlMmVkNDY4OTExOGEuLmRmNDdmNWZmYTA4ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXZkLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdXZkLmMKPiBAQCAtMzIsNiArMzIsNyBAQAo+ICAgI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZHJtL2RybS5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9kcnYuaD4KPiAgIAo+ICAgI2luY2x1ZGUgImFtZGdwdS5oIgo+ICAgI2luY2x1 ZGUgImFtZGdwdV9wbS5oIgo+IEBAIC0zNzUsNyArMzc2LDcgQEAgaW50IGFtZGdwdV91dmRfc3Vz cGVuZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIHsKPiAgIAl1bnNpZ25lZCBzaXpl Owo+ICAgCXZvaWQgKnB0cjsKPiAtCWludCBpLCBqOwo+ICsJaW50IGksIGosIGlkeDsKPiAgIAli b29sIGluX3Jhc19pbnRyID0gYW1kZ3B1X3Jhc19pbnRyX3RyaWdnZXJlZCgpOwo+ICAgCj4gICAJ Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGV2LT51dmQuaWRsZV93b3JrKTsKPiBAQCAtNDAz LDExICs0MDQsMTUgQEAgaW50IGFtZGdwdV91dmRfc3VzcGVuZChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldikKPiAgIAkJaWYgKCFhZGV2LT51dmQuaW5zdFtqXS5zYXZlZF9ibykKPiAgIAkJCXJl dHVybiAtRU5PTUVNOwo+ICAgCj4gLQkJLyogcmUtd3JpdGUgMCBzaW5jZSBlcnJfZXZlbnRfYXRo dWIgd2lsbCBjb3JydXB0IFZDUFUgYnVmZmVyICovCj4gLQkJaWYgKGluX3Jhc19pbnRyKQo+IC0J CQltZW1zZXQoYWRldi0+dXZkLmluc3Rbal0uc2F2ZWRfYm8sIDAsIHNpemUpOwo+IC0JCWVsc2UK PiAtCQkJbWVtY3B5X2Zyb21pbyhhZGV2LT51dmQuaW5zdFtqXS5zYXZlZF9ibywgcHRyLCBzaXpl KTsKPiArCQlpZiAoZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpIHsKPiArCQkJLyog cmUtd3JpdGUgMCBzaW5jZSBlcnJfZXZlbnRfYXRodWIgd2lsbCBjb3JydXB0IFZDUFUgYnVmZmVy ICovCj4gKwkJCWlmIChpbl9yYXNfaW50cikKPiArCQkJCW1lbXNldChhZGV2LT51dmQuaW5zdFtq XS5zYXZlZF9ibywgMCwgc2l6ZSk7Cj4gKwkJCWVsc2UKPiArCQkJCW1lbWNweV9mcm9taW8oYWRl di0+dXZkLmluc3Rbal0uc2F2ZWRfYm8sIHB0ciwgc2l6ZSk7Cj4gKwo+ICsJCQlkcm1fZGV2X2V4 aXQoaWR4KTsKPiArCQl9Cj4gICAJfQo+ICAgCj4gICAJaWYgKGluX3Jhc19pbnRyKQo+IEBAIC00 MjAsNyArNDI1LDcgQEAgaW50IGFtZGdwdV91dmRfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2KQo+ICAgewo+ICAgCXVuc2lnbmVkIHNpemU7Cj4gICAJdm9pZCAqcHRyOwo+IC0JaW50 IGk7Cj4gKwlpbnQgaSwgaWR4Owo+ICAgCj4gICAJZm9yIChpID0gMDsgaSA8IGFkZXYtPnV2ZC5u dW1fdXZkX2luc3Q7IGkrKykgewo+ICAgCQlpZiAoYWRldi0+dXZkLmhhcnZlc3RfY29uZmlnICYg KDEgPDwgaSkpCj4gQEAgLTQzMiw3ICs0MzcsMTAgQEAgaW50IGFtZGdwdV91dmRfcmVzdW1lKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgCQlwdHIgPSBhZGV2LT51dmQuaW5zdFtpXS5j cHVfYWRkcjsKPiAgIAo+ICAgCQlpZiAoYWRldi0+dXZkLmluc3RbaV0uc2F2ZWRfYm8gIT0gTlVM TCkgewo+IC0JCQltZW1jcHlfdG9pbyhwdHIsIGFkZXYtPnV2ZC5pbnN0W2ldLnNhdmVkX2JvLCBz aXplKTsKPiArCQkJaWYgKGRybV9kZXZfZW50ZXIoJmFkZXYtPmRkZXYsICZpZHgpKSB7Cj4gKwkJ CQltZW1jcHlfdG9pbyhwdHIsIGFkZXYtPnV2ZC5pbnN0W2ldLnNhdmVkX2JvLCBzaXplKTsKPiAr CQkJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJCQl9Cj4gICAJCQlrdmZyZWUoYWRldi0+dXZkLmlu c3RbaV0uc2F2ZWRfYm8pOwo+ICAgCQkJYWRldi0+dXZkLmluc3RbaV0uc2F2ZWRfYm8gPSBOVUxM Owo+ICAgCQl9IGVsc2Ugewo+IEBAIC00NDIsOCArNDUwLDExIEBAIGludCBhbWRncHVfdXZkX3Jl c3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIAkJCWhkciA9IChjb25zdCBzdHJ1 Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqKWFkZXYtPnV2ZC5mdy0+ZGF0YTsKPiAgIAkJCWlm IChhZGV2LT5maXJtd2FyZS5sb2FkX3R5cGUgIT0gQU1ER1BVX0ZXX0xPQURfUFNQKSB7Cj4gICAJ CQkJb2Zmc2V0ID0gbGUzMl90b19jcHUoaGRyLT51Y29kZV9hcnJheV9vZmZzZXRfYnl0ZXMpOwo+ IC0JCQkJbWVtY3B5X3RvaW8oYWRldi0+dXZkLmluc3RbaV0uY3B1X2FkZHIsIGFkZXYtPnV2ZC5m dy0+ZGF0YSArIG9mZnNldCwKPiAtCQkJCQkgICAgbGUzMl90b19jcHUoaGRyLT51Y29kZV9zaXpl X2J5dGVzKSk7Cj4gKwkJCQlpZiAoZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpIHsK PiArCQkJCQltZW1jcHlfdG9pbyhhZGV2LT51dmQuaW5zdFtpXS5jcHVfYWRkciwgYWRldi0+dXZk LmZ3LT5kYXRhICsgb2Zmc2V0LAo+ICsJCQkJCQkgICAgbGUzMl90b19jcHUoaGRyLT51Y29kZV9z aXplX2J5dGVzKSk7Cj4gKwkJCQkJZHJtX2Rldl9leGl0KGlkeCk7Cj4gKwkJCQl9Cj4gICAJCQkJ c2l6ZSAtPSBsZTMyX3RvX2NwdShoZHItPnVjb2RlX3NpemVfYnl0ZXMpOwo+ICAgCQkJCXB0ciAr PSBsZTMyX3RvX2NwdShoZHItPnVjb2RlX3NpemVfYnl0ZXMpOwo+ICAgCQkJfQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdmNlLmMgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdmNlLmMKPiBpbmRleCBlYTZhNjJmNjdlMzguLjgzMzIw MzQwMWVmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dmNlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdmNlLmMKPiBA QCAtMjksNiArMjksNyBAQAo+ICAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICAgCj4gICAj aW5jbHVkZSA8ZHJtL2RybS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPiAgIAo+ICAg I2luY2x1ZGUgImFtZGdwdS5oIgo+ICAgI2luY2x1ZGUgImFtZGdwdV9wbS5oIgo+IEBAIC0yOTMs NyArMjk0LDcgQEAgaW50IGFtZGdwdV92Y2VfcmVzdW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQo+ICAgCXZvaWQgKmNwdV9hZGRyOwo+ICAgCWNvbnN0IHN0cnVjdCBjb21tb25fZmlybXdh cmVfaGVhZGVyICpoZHI7Cj4gICAJdW5zaWduZWQgb2Zmc2V0Owo+IC0JaW50IHI7Cj4gKwlpbnQg ciwgaWR4Owo+ICAgCj4gICAJaWYgKGFkZXYtPnZjZS52Y3B1X2JvID09IE5VTEwpCj4gICAJCXJl dHVybiAtRUlOVkFMOwo+IEBAIC0zMTMsOCArMzE0LDEyIEBAIGludCBhbWRncHVfdmNlX3Jlc3Vt ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIAo+ICAgCWhkciA9IChjb25zdCBzdHJ1 Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqKWFkZXYtPnZjZS5mdy0+ZGF0YTsKPiAgIAlvZmZz ZXQgPSBsZTMyX3RvX2NwdShoZHItPnVjb2RlX2FycmF5X29mZnNldF9ieXRlcyk7Cj4gLQltZW1j cHlfdG9pbyhjcHVfYWRkciwgYWRldi0+dmNlLmZ3LT5kYXRhICsgb2Zmc2V0LAo+IC0JCSAgICBh ZGV2LT52Y2UuZnctPnNpemUgLSBvZmZzZXQpOwo+ICsKPiArCWlmIChkcm1fZGV2X2VudGVyKCZh ZGV2LT5kZGV2LCAmaWR4KSkgewo+ICsJCW1lbWNweV90b2lvKGNwdV9hZGRyLCBhZGV2LT52Y2Uu ZnctPmRhdGEgKyBvZmZzZXQsCj4gKwkJCSAgICBhZGV2LT52Y2UuZnctPnNpemUgLSBvZmZzZXQp Owo+ICsJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJfQo+ICAgCj4gICAJYW1kZ3B1X2JvX2t1bm1h cChhZGV2LT52Y2UudmNwdV9ibyk7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3Zjbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3Zjbi5jCj4gaW5kZXggOTliODJmM2MyNjE3Li5iNDJkYjIyNzYxYjggMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zjbi5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zjbi5jCj4gQEAgLTI3LDYgKzI3LDcgQEAKPiAg ICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o Pgo+ICAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4K PiAgIAo+ICAgI2luY2x1ZGUgImFtZGdwdS5oIgo+ICAgI2luY2x1ZGUgImFtZGdwdV9wbS5oIgo+ IEBAIC0yNjcsNyArMjY4LDcgQEAgaW50IGFtZGdwdV92Y25fc3VzcGVuZChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldikKPiAgIHsKPiAgIAl1bnNpZ25lZCBzaXplOwo+ICAgCXZvaWQgKnB0cjsK PiAtCWludCBpOwo+ICsJaW50IGksIGlkeDsKPiAgIAo+ICAgCWNhbmNlbF9kZWxheWVkX3dvcmtf c3luYygmYWRldi0+dmNuLmlkbGVfd29yayk7Cj4gICAKPiBAQCAtMjg0LDcgKzI4NSwxMCBAQCBp bnQgYW1kZ3B1X3Zjbl9zdXNwZW5kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgCQlp ZiAoIWFkZXYtPnZjbi5pbnN0W2ldLnNhdmVkX2JvKQo+ICAgCQkJcmV0dXJuIC1FTk9NRU07Cj4g ICAKPiAtCQltZW1jcHlfZnJvbWlvKGFkZXYtPnZjbi5pbnN0W2ldLnNhdmVkX2JvLCBwdHIsIHNp emUpOwo+ICsJCWlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkgewo+ICsJCQlt ZW1jcHlfZnJvbWlvKGFkZXYtPnZjbi5pbnN0W2ldLnNhdmVkX2JvLCBwdHIsIHNpemUpOwo+ICsJ CQlkcm1fZGV2X2V4aXQoaWR4KTsKPiArCQl9Cj4gICAJfQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ IEBAIC0yOTMsNyArMjk3LDcgQEAgaW50IGFtZGdwdV92Y25fcmVzdW1lKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KQo+ICAgewo+ICAgCXVuc2lnbmVkIHNpemU7Cj4gICAJdm9pZCAqcHRyOwo+ IC0JaW50IGk7Cj4gKwlpbnQgaSwgaWR4Owo+ICAgCj4gICAJZm9yIChpID0gMDsgaSA8IGFkZXYt PnZjbi5udW1fdmNuX2luc3Q7ICsraSkgewo+ICAgCQlpZiAoYWRldi0+dmNuLmhhcnZlc3RfY29u ZmlnICYgKDEgPDwgaSkpCj4gQEAgLTMwNSw3ICszMDksMTAgQEAgaW50IGFtZGdwdV92Y25fcmVz dW1lKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgCQlwdHIgPSBhZGV2LT52Y24uaW5z dFtpXS5jcHVfYWRkcjsKPiAgIAo+ICAgCQlpZiAoYWRldi0+dmNuLmluc3RbaV0uc2F2ZWRfYm8g IT0gTlVMTCkgewo+IC0JCQltZW1jcHlfdG9pbyhwdHIsIGFkZXYtPnZjbi5pbnN0W2ldLnNhdmVk X2JvLCBzaXplKTsKPiArCQkJaWYgKGRybV9kZXZfZW50ZXIoJmFkZXYtPmRkZXYsICZpZHgpKSB7 Cj4gKwkJCQltZW1jcHlfdG9pbyhwdHIsIGFkZXYtPnZjbi5pbnN0W2ldLnNhdmVkX2JvLCBzaXpl KTsKPiArCQkJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJCQl9Cj4gICAJCQlrdmZyZWUoYWRldi0+ dmNuLmluc3RbaV0uc2F2ZWRfYm8pOwo+ICAgCQkJYWRldi0+dmNuLmluc3RbaV0uc2F2ZWRfYm8g PSBOVUxMOwo+ICAgCQl9IGVsc2Ugewo+IEBAIC0zMTUsOCArMzIyLDExIEBAIGludCBhbWRncHVf dmNuX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPiAgIAkJCWhkciA9IChjb25z dCBzdHJ1Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqKWFkZXYtPnZjbi5mdy0+ZGF0YTsKPiAg IAkJCWlmIChhZGV2LT5maXJtd2FyZS5sb2FkX3R5cGUgIT0gQU1ER1BVX0ZXX0xPQURfUFNQKSB7 Cj4gICAJCQkJb2Zmc2V0ID0gbGUzMl90b19jcHUoaGRyLT51Y29kZV9hcnJheV9vZmZzZXRfYnl0 ZXMpOwo+IC0JCQkJbWVtY3B5X3RvaW8oYWRldi0+dmNuLmluc3RbaV0uY3B1X2FkZHIsIGFkZXYt PnZjbi5mdy0+ZGF0YSArIG9mZnNldCwKPiAtCQkJCQkgICAgbGUzMl90b19jcHUoaGRyLT51Y29k ZV9zaXplX2J5dGVzKSk7Cj4gKwkJCQlpZiAoZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlk eCkpIHsKPiArCQkJCQltZW1jcHlfdG9pbyhhZGV2LT52Y24uaW5zdFtpXS5jcHVfYWRkciwgYWRl di0+dmNuLmZ3LT5kYXRhICsgb2Zmc2V0LAo+ICsJCQkJCQkgICAgbGUzMl90b19jcHUoaGRyLT51 Y29kZV9zaXplX2J5dGVzKSk7Cj4gKwkJCQkJZHJtX2Rldl9leGl0KGlkeCk7Cj4gKwkJCQl9Cj4g ICAJCQkJc2l6ZSAtPSBsZTMyX3RvX2NwdShoZHItPnVjb2RlX3NpemVfYnl0ZXMpOwo+ICAgCQkJ CXB0ciArPSBsZTMyX3RvX2NwdShoZHItPnVjb2RlX3NpemVfYnl0ZXMpOwo+ICAgCQkJfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4gaW5kZXggYWUxOGMwZTMyMzQ3Li43 YjYyMjA1NmRmNTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3ZtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+ IEBAIC0zMSw2ICszMSw3IEBACj4gICAjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgo+ICAgCj4g ICAjaW5jbHVkZSA8ZHJtL2FtZGdwdV9kcm0uaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+ Cj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X3RyYWNlLmgiCj4g ICAjaW5jbHVkZSAiYW1kZ3B1X2FtZGtmZC5oIgo+IEBAIC0xNjA0LDcgKzE2MDUsMTAgQEAgc3Rh dGljIGludCBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBpbmcoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsCj4gICAJc3RydWN0IGFtZGdwdV92bV91cGRhdGVfcGFyYW1zIHBhcmFtczsKPiAgIAll bnVtIGFtZGdwdV9zeW5jX21vZGUgc3luY19tb2RlOwo+ICAgCXVpbnQ2NF90IHBmbjsKPiAtCWlu dCByOwo+ICsJaW50IHIsIGlkeDsKPiArCj4gKwlpZiAoIWRybV9kZXZfZW50ZXIoJmFkZXYtPmRk ZXYsICZpZHgpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICAgCj4gICAJbWVtc2V0KCZwYXJhbXMs IDAsIHNpemVvZihwYXJhbXMpKTsKPiAgIAlwYXJhbXMuYWRldiA9IGFkZXY7Cj4gQEAgLTE3MTMs NiArMTcxNyw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX2JvX3VwZGF0ZV9tYXBwaW5nKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCj4gICBlcnJvcl91bmxvY2s6Cj4gICAJYW1kZ3B1 X3ZtX2V2aWN0aW9uX3VubG9jayh2bSk7Cj4gKwlkcm1fZGV2X2V4aXQoaWR4KTsKPiAgIAlyZXR1 cm4gcjsKPiAgIH0KPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9wc3BfdjExXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTFfMC5jCj4g aW5kZXggYzMyNWQ2ZjUzYTcxLi45NGNjZTE3MmI5OGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvcHNwX3YxMV8wLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9wc3BfdjExXzAuYwo+IEBAIC0yMyw2ICsyMyw3IEBACj4gICAjaW5jbHVkZSA8bGlu dXgvZmlybXdhcmUuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiAgICNpbmNsdWRl IDxsaW51eC92bWFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICAgCj4gICAj aW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X3BzcC5oIgo+IEBAIC0yNjks MTAgKzI3MCw4IEBAIHN0YXRpYyBpbnQgcHNwX3YxMV8wX2Jvb3Rsb2FkZXJfbG9hZF9rZGIoc3Ry dWN0IHBzcF9jb250ZXh0ICpwc3ApCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAg IAo+IC0JbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPiAtCj4gICAJLyog Q29weSBQU1AgS0RCIGJpbmFyeSB0byBtZW1vcnkgKi8KPiAtCW1lbWNweShwc3AtPmZ3X3ByaV9i dWYsIHBzcC0+a2RiX3N0YXJ0X2FkZHIsIHBzcC0+a2RiX2Jpbl9zaXplKTsKPiArCXBzcF9jb3B5 X2Z3KHBzcCwgcHNwLT5rZGJfc3RhcnRfYWRkciwgcHNwLT5rZGJfYmluX3NpemUpOwo+ICAgCj4g ICAJLyogUHJvdmlkZSB0aGUgUFNQIEtEQiB0byBib290bG9hZGVyICovCj4gICAJV1JFRzMyX1NP QzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR18zNiwKPiBAQCAtMzAyLDEwICszMDEsOCBAQCBz dGF0aWMgaW50IHBzcF92MTFfMF9ib290bG9hZGVyX2xvYWRfc3BsKHN0cnVjdCBwc3BfY29udGV4 dCAqcHNwKQo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4gICAKPiAtCW1lbXNldChw c3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7Cj4gLQo+ICAgCS8qIENvcHkgUFNQIFNQTCBi aW5hcnkgdG8gbWVtb3J5ICovCj4gLQltZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnNwbF9z dGFydF9hZGRyLCBwc3AtPnNwbF9iaW5fc2l6ZSk7Cj4gKwlwc3BfY29weV9mdyhwc3AsIHBzcC0+ c3BsX3N0YXJ0X2FkZHIsIHBzcC0+c3BsX2Jpbl9zaXplKTsKPiAgIAo+ICAgCS8qIFByb3ZpZGUg dGhlIFBTUCBTUEwgdG8gYm9vdGxvYWRlciAqLwo+ICAgCVdSRUczMl9TT0MxNShNUDAsIDAsIG1t TVAwX1NNTl9DMlBNU0dfMzYsCj4gQEAgLTMzNSwxMCArMzMyLDggQEAgc3RhdGljIGludCBwc3Bf djExXzBfYm9vdGxvYWRlcl9sb2FkX3N5c2RydihzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCkKPiAg IAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQltZW1zZXQocHNwLT5md19wcmlf YnVmLCAwLCBQU1BfMV9NRUcpOwo+IC0KPiAgIAkvKiBDb3B5IFBTUCBTeXN0ZW0gRHJpdmVyIGJp bmFyeSB0byBtZW1vcnkgKi8KPiAtCW1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+c3lzX3N0 YXJ0X2FkZHIsIHBzcC0+c3lzX2Jpbl9zaXplKTsKPiArCXBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5z eXNfc3RhcnRfYWRkciwgcHNwLT5zeXNfYmluX3NpemUpOwo+ICAgCj4gICAJLyogUHJvdmlkZSB0 aGUgc3lzIGRyaXZlciB0byBib290bG9hZGVyICovCj4gICAJV1JFRzMyX1NPQzE1KE1QMCwgMCwg bW1NUDBfU01OX0MyUE1TR18zNiwKPiBAQCAtMzcxLDEwICszNjYsOCBAQCBzdGF0aWMgaW50IHBz cF92MTFfMF9ib290bG9hZGVyX2xvYWRfc29zKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQo+ICAg CWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4gICAKPiAtCW1lbXNldChwc3AtPmZ3X3ByaV9i dWYsIDAsIFBTUF8xX01FRyk7Cj4gLQo+ICAgCS8qIENvcHkgU2VjdXJlIE9TIGJpbmFyeSB0byBQ U1AgbWVtb3J5ICovCj4gLQltZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnNvc19zdGFydF9h ZGRyLCBwc3AtPnNvc19iaW5fc2l6ZSk7Cj4gKwlwc3BfY29weV9mdyhwc3AsIHBzcC0+c29zX3N0 YXJ0X2FkZHIsIHBzcC0+c29zX2Jpbl9zaXplKTsKPiAgIAo+ICAgCS8qIFByb3ZpZGUgdGhlIFBT UCBzZWN1cmUgT1MgdG8gYm9vdGxvYWRlciAqLwo+ICAgCVdSRUczMl9TT0MxNShNUDAsIDAsIG1t TVAwX1NNTl9DMlBNU0dfMzYsCj4gQEAgLTYwOCw3ICs2MDEsNyBAQCBzdGF0aWMgaW50IHBzcF92 MTFfMF9tZW1vcnlfdHJhaW5pbmcoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsIHVpbnQzMl90IG9w cykKPiAgIAl1aW50MzJfdCBwMmNfaGVhZGVyWzRdOwo+ICAgCXVpbnQzMl90IHN6Owo+ICAgCXZv aWQgKmJ1ZjsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0LCBpZHg7Cj4gICAKPiAgIAlpZiAoY3R4 LT5pbml0ID09IFBTUF9NRU1fVFJBSU5fTk9UX1NVUFBPUlQpIHsKPiAgIAkJRFJNX0RFQlVHKCJN ZW1vcnkgdHJhaW5pbmcgaXMgbm90IHN1cHBvcnRlZC5cbiIpOwo+IEBAIC02ODEsMTcgKzY3NCwy NCBAQCBzdGF0aWMgaW50IHBzcF92MTFfMF9tZW1vcnlfdHJhaW5pbmcoc3RydWN0IHBzcF9jb250 ZXh0ICpwc3AsIHVpbnQzMl90IG9wcykKPiAgIAkJCXJldHVybiAtRU5PTUVNOwo+ICAgCQl9Cj4g ICAKPiAtCQltZW1jcHlfZnJvbWlvKGJ1ZiwgYWRldi0+bW1hbi5hcGVyX2Jhc2Vfa2FkZHIsIHN6 KTsKPiAtCQlyZXQgPSBwc3BfdjExXzBfbWVtb3J5X3RyYWluaW5nX3NlbmRfbXNnKHBzcCwgUFNQ X0JMX19EUkFNX0xPTkdfVFJBSU4pOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJRFJNX0VSUk9SKCJT ZW5kIGxvbmcgdHJhaW5pbmcgbXNnIGZhaWxlZC5cbiIpOwo+ICsJCWlmIChkcm1fZGV2X2VudGVy KCZhZGV2LT5kZGV2LCAmaWR4KSkgewo+ICsJCQltZW1jcHlfZnJvbWlvKGJ1ZiwgYWRldi0+bW1h bi5hcGVyX2Jhc2Vfa2FkZHIsIHN6KTsKPiArCQkJcmV0ID0gcHNwX3YxMV8wX21lbW9yeV90cmFp bmluZ19zZW5kX21zZyhwc3AsIFBTUF9CTF9fRFJBTV9MT05HX1RSQUlOKTsKPiArCQkJaWYgKHJl dCkgewo+ICsJCQkJRFJNX0VSUk9SKCJTZW5kIGxvbmcgdHJhaW5pbmcgbXNnIGZhaWxlZC5cbiIp Owo+ICsJCQkJdmZyZWUoYnVmKTsKPiArCQkJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJCQkJcmV0 dXJuIHJldDsKPiArCQkJfQo+ICsKPiArCQkJbWVtY3B5X3RvaW8oYWRldi0+bW1hbi5hcGVyX2Jh c2Vfa2FkZHIsIGJ1Ziwgc3opOwo+ICsJCQlhZGV2LT5oZHAuZnVuY3MtPmZsdXNoX2hkcChhZGV2 LCBOVUxMKTsKPiAgIAkJCXZmcmVlKGJ1Zik7Cj4gLQkJCXJldHVybiByZXQ7Cj4gKwkJCWRybV9k ZXZfZXhpdChpZHgpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXZmcmVlKGJ1Zik7Cj4gKwkJCXJldHVy biAtRU5PREVWOwo+ICAgCQl9Cj4gLQo+IC0JCW1lbWNweV90b2lvKGFkZXYtPm1tYW4uYXBlcl9i YXNlX2thZGRyLCBidWYsIHN6KTsKPiAtCQlhZGV2LT5oZHAuZnVuY3MtPmZsdXNoX2hkcChhZGV2 LCBOVUxMKTsKPiAtCQl2ZnJlZShidWYpOwo+ICAgCX0KPiAgIAo+ICAgCWlmIChvcHMgJiBQU1Bf TUVNX1RSQUlOX1NBVkUpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvcHNwX3YxMl8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjEyXzAuYwo+ IGluZGV4IGM0ODI4YmQzMjY0Yi4uNjE4ZTViNmI4NWQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTJfMC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvcHNwX3YxMl8wLmMKPiBAQCAtMTM4LDEwICsxMzgsOCBAQCBzdGF0aWMgaW50IHBz cF92MTJfMF9ib290bG9hZGVyX2xvYWRfc3lzZHJ2KHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQo+ ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4gICAKPiAtCW1lbXNldChwc3AtPmZ3X3By aV9idWYsIDAsIFBTUF8xX01FRyk7Cj4gLQo+ICAgCS8qIENvcHkgUFNQIFN5c3RlbSBEcml2ZXIg YmluYXJ5IHRvIG1lbW9yeSAqLwo+IC0JbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT5zeXNf c3RhcnRfYWRkciwgcHNwLT5zeXNfYmluX3NpemUpOwo+ICsJcHNwX2NvcHlfZncocHNwLCBwc3At PnN5c19zdGFydF9hZGRyLCBwc3AtPnN5c19iaW5fc2l6ZSk7Cj4gICAKPiAgIAkvKiBQcm92aWRl IHRoZSBzeXMgZHJpdmVyIHRvIGJvb3Rsb2FkZXIgKi8KPiAgIAlXUkVHMzJfU09DMTUoTVAwLCAw LCBtbU1QMF9TTU5fQzJQTVNHXzM2LAo+IEBAIC0xNzksMTAgKzE3Nyw4IEBAIHN0YXRpYyBpbnQg cHNwX3YxMl8wX2Jvb3Rsb2FkZXJfbG9hZF9zb3Moc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4g ICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JbWVtc2V0KHBzcC0+ZndfcHJp X2J1ZiwgMCwgUFNQXzFfTUVHKTsKPiAtCj4gICAJLyogQ29weSBTZWN1cmUgT1MgYmluYXJ5IHRv IFBTUCBtZW1vcnkgKi8KPiAtCW1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+c29zX3N0YXJ0 X2FkZHIsIHBzcC0+c29zX2Jpbl9zaXplKTsKPiArCXBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5zb3Nf c3RhcnRfYWRkciwgcHNwLT5zb3NfYmluX3NpemUpOwo+ICAgCj4gICAJLyogUHJvdmlkZSB0aGUg UFNQIHNlY3VyZSBPUyB0byBib290bG9hZGVyICovCj4gICAJV1JFRzMyX1NPQzE1KE1QMCwgMCwg bW1NUDBfU01OX0MyUE1TR18zNiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvcHNwX3YzXzEuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92M18xLmMK PiBpbmRleCBmMmU3MjVmNzJkMmYuLmQwYTZjY2NkMDg5NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjNfMS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvcHNwX3YzXzEuYwo+IEBAIC0xMDIsMTAgKzEwMiw4IEBAIHN0YXRpYyBpbnQgcHNw X3YzXzFfYm9vdGxvYWRlcl9sb2FkX3N5c2RydihzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCkKPiAg IAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQltZW1zZXQocHNwLT5md19wcmlf YnVmLCAwLCBQU1BfMV9NRUcpOwo+IC0KPiAgIAkvKiBDb3B5IFBTUCBTeXN0ZW0gRHJpdmVyIGJp bmFyeSB0byBtZW1vcnkgKi8KPiAtCW1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+c3lzX3N0 YXJ0X2FkZHIsIHBzcC0+c3lzX2Jpbl9zaXplKTsKPiArCXBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5z eXNfc3RhcnRfYWRkciwgcHNwLT5zeXNfYmluX3NpemUpOwo+ICAgCj4gICAJLyogUHJvdmlkZSB0 aGUgc3lzIGRyaXZlciB0byBib290bG9hZGVyICovCj4gICAJV1JFRzMyX1NPQzE1KE1QMCwgMCwg bW1NUDBfU01OX0MyUE1TR18zNiwKPiBAQCAtMTQzLDEwICsxNDEsOCBAQCBzdGF0aWMgaW50IHBz cF92M18xX2Jvb3Rsb2FkZXJfbG9hZF9zb3Moc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4gICAJ aWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JbWVtc2V0KHBzcC0+ZndfcHJpX2J1 ZiwgMCwgUFNQXzFfTUVHKTsKPiAtCj4gICAJLyogQ29weSBTZWN1cmUgT1MgYmluYXJ5IHRvIFBT UCBtZW1vcnkgKi8KPiAtCW1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+c29zX3N0YXJ0X2Fk ZHIsIHBzcC0+c29zX2Jpbl9zaXplKTsKPiArCXBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5zb3Nfc3Rh cnRfYWRkciwgcHNwLT5zb3NfYmluX3NpemUpOwo+ICAgCj4gICAJLyogUHJvdmlkZSB0aGUgUFNQ IHNlY3VyZSBPUyB0byBib290bG9hZGVyICovCj4gICAJV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1N UDBfU01OX0MyUE1TR18zNiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvdmNlX3Y0XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZjZV92NF8wLmMKPiBp bmRleCAzN2ZhMTYzMzkzZmQuLmZkODU5Yzc3OGRmMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS92Y2VfdjRfMC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvdmNlX3Y0XzAuYwo+IEBAIC0yNSw2ICsyNSw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2lu Y2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICAg Cj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X3ZjZS5oIgo+IEBA IC01NTUsMTYgKzU1NiwxOSBAQCBzdGF0aWMgaW50IHZjZV92NF8wX2h3X2Zpbmkodm9pZCAqaGFu ZGxlKQo+ICAgc3RhdGljIGludCB2Y2VfdjRfMF9zdXNwZW5kKHZvaWQgKmhhbmRsZSkKPiAgIHsK PiAgIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq KWhhbmRsZTsKPiAtCWludCByOwo+ICsJaW50IHIsIGlkeDsKPiAgIAo+ICAgCWlmIChhZGV2LT52 Y2UudmNwdV9ibyA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JaWYgKGFkZXYtPmZp cm13YXJlLmxvYWRfdHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1ApIHsKPiAtCQl1bnNpZ25lZCBz aXplID0gYW1kZ3B1X2JvX3NpemUoYWRldi0+dmNlLnZjcHVfYm8pOwo+IC0JCXZvaWQgKnB0ciA9 IGFkZXYtPnZjZS5jcHVfYWRkcjsKPiArCWlmIChkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAm aWR4KSkgewo+ICsJCWlmIChhZGV2LT5maXJtd2FyZS5sb2FkX3R5cGUgPT0gQU1ER1BVX0ZXX0xP QURfUFNQKSB7Cj4gKwkJCXVuc2lnbmVkIHNpemUgPSBhbWRncHVfYm9fc2l6ZShhZGV2LT52Y2Uu dmNwdV9ibyk7Cj4gKwkJCXZvaWQgKnB0ciA9IGFkZXYtPnZjZS5jcHVfYWRkcjsKPiAgIAo+IC0J CW1lbWNweV9mcm9taW8oYWRldi0+dmNlLnNhdmVkX2JvLCBwdHIsIHNpemUpOwo+ICsJCQltZW1j cHlfZnJvbWlvKGFkZXYtPnZjZS5zYXZlZF9ibywgcHRyLCBzaXplKTsKPiArCQl9Cj4gKwkJZHJt X2Rldl9leGl0KGlkeCk7Cj4gICAJfQo+ICAgCj4gICAJciA9IHZjZV92NF8wX2h3X2ZpbmkoYWRl dik7Cj4gQEAgLTU3NywxNiArNTgxLDIwIEBAIHN0YXRpYyBpbnQgdmNlX3Y0XzBfc3VzcGVuZCh2 b2lkICpoYW5kbGUpCj4gICBzdGF0aWMgaW50IHZjZV92NF8wX3Jlc3VtZSh2b2lkICpoYW5kbGUp Cj4gICB7Cj4gICAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKiloYW5kbGU7Cj4gLQlpbnQgcjsKPiArCWludCByLCBpZHg7Cj4gICAKPiAgIAlpZiAo YWRldi0+dmNlLnZjcHVfYm8gPT0gTlVMTCkKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAKPiAg IAlpZiAoYWRldi0+ZmlybXdhcmUubG9hZF90eXBlID09IEFNREdQVV9GV19MT0FEX1BTUCkgewo+ IC0JCXVuc2lnbmVkIHNpemUgPSBhbWRncHVfYm9fc2l6ZShhZGV2LT52Y2UudmNwdV9ibyk7Cj4g LQkJdm9pZCAqcHRyID0gYWRldi0+dmNlLmNwdV9hZGRyOwo+ICAgCj4gLQkJbWVtY3B5X3RvaW8o cHRyLCBhZGV2LT52Y2Uuc2F2ZWRfYm8sIHNpemUpOwo+ICsJCWlmIChkcm1fZGV2X2VudGVyKCZh ZGV2LT5kZGV2LCAmaWR4KSkgewo+ICsJCQl1bnNpZ25lZCBzaXplID0gYW1kZ3B1X2JvX3NpemUo YWRldi0+dmNlLnZjcHVfYm8pOwo+ICsJCQl2b2lkICpwdHIgPSBhZGV2LT52Y2UuY3B1X2FkZHI7 Cj4gKwo+ICsJCQltZW1jcHlfdG9pbyhwdHIsIGFkZXYtPnZjZS5zYXZlZF9ibywgc2l6ZSk7Cj4g KwkJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJCX0KPiAgIAl9IGVsc2Ugewo+ICAgCQlyID0gYW1k Z3B1X3ZjZV9yZXN1bWUoYWRldik7Cj4gICAJCWlmIChyKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS92Y25fdjNfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvdmNuX3YzXzAuYwo+IGluZGV4IGRlZjU4MzkxNjI5NC4uNWFjOGZmZTE5N2FhIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3Zjbl92M18wLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92Y25fdjNfMC5jCj4gQEAgLTM0LDYgKzM0LDggQEAKPiAg ICNpbmNsdWRlICJ2Y24vdmNuXzNfMF8wX3NoX21hc2suaCIKPiAgICNpbmNsdWRlICJpdnNyY2lk L3Zjbi9pcnFzcmNzX3Zjbl8yXzAuaCIKPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4K PiArCj4gICAjZGVmaW5lIG1tVVZEX0NPTlRFWFRfSURfSU5URVJOQUxfT0ZGU0VUCQkJMHgyNwo+ ICAgI2RlZmluZSBtbVVWRF9HUENPTV9WQ1BVX0NNRF9JTlRFUk5BTF9PRkZTRVQJCQkweDBmCj4g ICAjZGVmaW5lIG1tVVZEX0dQQ09NX1ZDUFVfREFUQTBfSU5URVJOQUxfT0ZGU0VUCQkJMHgxMAo+ IEBAIC0yNjMsMTYgKzI2NSwyMCBAQCBzdGF0aWMgaW50IHZjbl92M18wX3N3X2luaXQodm9pZCAq aGFuZGxlKQo+ICAgc3RhdGljIGludCB2Y25fdjNfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKPiAg IHsKPiAgIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqKWhhbmRsZTsKPiAtCWludCBpLCByOwo+ICsJaW50IGksIHIsIGlkeDsKPiAgIAo+IC0JZm9y IChpID0gMDsgaSA8IGFkZXYtPnZjbi5udW1fdmNuX2luc3Q7IGkrKykgewo+IC0JCXZvbGF0aWxl IHN0cnVjdCBhbWRncHVfZndfc2hhcmVkICpmd19zaGFyZWQ7Cj4gKwlpZiAoZHJtX2Rldl9lbnRl cigmYWRldi0+ZGRldiwgJmlkeCkpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dmNuLm51 bV92Y25faW5zdDsgaSsrKSB7Cj4gKwkJCXZvbGF0aWxlIHN0cnVjdCBhbWRncHVfZndfc2hhcmVk ICpmd19zaGFyZWQ7Cj4gICAKPiAtCQlpZiAoYWRldi0+dmNuLmhhcnZlc3RfY29uZmlnICYgKDEg PDwgaSkpCj4gLQkJCWNvbnRpbnVlOwo+IC0JCWZ3X3NoYXJlZCA9IGFkZXYtPnZjbi5pbnN0W2ld LmZ3X3NoYXJlZF9jcHVfYWRkcjsKPiAtCQlmd19zaGFyZWQtPnByZXNlbnRfZmxhZ18wID0gMDsK PiAtCQlmd19zaGFyZWQtPnN3X3JpbmcuaXNfZW5hYmxlZCA9IGZhbHNlOwo+ICsJCQlpZiAoYWRl di0+dmNuLmhhcnZlc3RfY29uZmlnICYgKDEgPDwgaSkpCj4gKwkJCQljb250aW51ZTsKPiArCQkJ Zndfc2hhcmVkID0gYWRldi0+dmNuLmluc3RbaV0uZndfc2hhcmVkX2NwdV9hZGRyOwo+ICsJCQlm d19zaGFyZWQtPnByZXNlbnRfZmxhZ18wID0gMDsKPiArCQkJZndfc2hhcmVkLT5zd19yaW5nLmlz X2VuYWJsZWQgPSBmYWxzZTsKPiArCQl9Cj4gKwo+ICsJCWRybV9kZXZfZXhpdChpZHgpOwo+ICAg CX0KPiAgIAo+ICAgCWlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikpCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvcG0vcG93ZXJwbGF5L3NtdW1nci9zbXU3X3NtdW1nci5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9wbS9wb3dlcnBsYXkvc211bWdyL3NtdTdfc211bWdyLmMKPiBpbmRl eCBhYWUyNTI0M2ViMTAuLmQ2MjhiOTE4NDZjOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL3BtL3Bvd2VycGxheS9zbXVtZ3Ivc211N19zbXVtZ3IuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvcG0vcG93ZXJwbGF5L3NtdW1nci9zbXU3X3NtdW1nci5jCj4gQEAgLTQwNSw2 ICs0MDUsOCBAQCBpbnQgc211N19yZXF1ZXN0X3NtdV9sb2FkX2Z3KHN0cnVjdCBwcF9od21nciAq aHdtZ3IpCj4gICAJCQkJVUNPREVfSURfTUVDX1NUT1JBR0UsICZ0b2MtPmVudHJ5W3RvYy0+bnVt X2VudHJpZXMrK10pLAo+ICAgCQkJCSJGYWlsZWQgdG8gR2V0IEZpcm13YXJlIEVudHJ5LiIsIHIg PSAtRUlOVkFMOyBnb3RvIGZhaWxlZCk7Cj4gICAJfQo+ICsKPiArCS8qIEFHIFRPRE8gQ2FuJ3Qg Y2FsbCBkcm1fZGV2X2VudGVyL2V4aXQgYmVjYXVzZSBhY2Nlc3MgYWRldi0+ZGRldiBoZXJlIC4u LiAqLwo+ICAgCW1lbWNweV90b2lvKHNtdV9kYXRhLT5oZWFkZXJfYnVmZmVyLmthZGRyLCBzbXVf ZGF0YS0+dG9jLAo+ICAgCQkgICAgc2l6ZW9mKHN0cnVjdCBTTVVfRFJBTURhdGFfVE9DKSk7Cj4g ICAJc211bV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3IsCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK