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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id F1A19C4332F for ; Wed, 13 Dec 2023 10:24:19 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B26D310E768; Wed, 13 Dec 2023 10:24:19 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id B034610E768 for ; Wed, 13 Dec 2023 10:24:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702463057; x=1733999057; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=GDBN8GBOMLXxeIQrwlX49cvPjay1j3MGPumiWppwo14=; b=Y2OAYwo/L8fAuz2SsUETfLo6GDVaAyRjO4GomElOuYJRTgwQokNhipb7 9CeSCgh43bE380rjRnTb4j7kytHDQgf1H5Y3V8i7sjRc3oHUes6HgWzwT 8D2dM/bfrXs5uWQysuYhYcIO6r0lDP+DVGr4N42H7qNZhf2XUtQ6t6mki WgB2YjasvobCWCLrMqoHNhC2wacS3jTgbIy8G5/QBQlhaADcUua1kXUuk QV+3iqz4+AMG6P8Nwj8Kb45fX2L3PXSPHt3OTVsN5HpzD5TEBkB1TgX+J lqHx26DkL3nP457cSpqYOgG6m+qKoKN6MfFEMyivz4mMRmjdJjdqrbpvV A==; X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="393815876" X-IronPort-AV: E=Sophos;i="6.04,272,1695711600"; d="scan'208";a="393815876" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Dec 2023 02:24:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10922"; a="767161440" X-IronPort-AV: E=Sophos;i="6.04,272,1695711600"; d="scan'208";a="767161440" Received: from mstribae-mobl.ger.corp.intel.com (HELO [10.249.254.149]) ([10.249.254.149]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Dec 2023 02:24:15 -0800 Message-ID: Subject: Re: [PATCH v2] drm/xe/uapi: Uniform async vs sync handling From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Matthew Brost , intel-xe@lists.freedesktop.org Date: Wed, 13 Dec 2023 11:24:12 +0100 In-Reply-To: <20231213043517.609363-1-matthew.brost@intel.com> References: <20231213043517.609363-1-matthew.brost@intel.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Francois Dugast , Rodrigo Vivi Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gVHVlLCAyMDIzLTEyLTEyIGF0IDIwOjM1IC0wODAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ IFJlbW92ZSBjb25jZXB0IG9mIGFzeW5jIHZzIHN5bmMgVk0gYmluZCBxdWV1ZXMsIHJhdGhlciBt YWtlIGFzeW5jIHZzCj4gc3luYyBhIHBlciBJT0NUTCBjaG9pY2UuIFNpbmNlIHRoaXMgaXMgcGVy IElPQ1RMLCBpdCBtYWtlcyBzZW5zZSB0bwo+IGhhdmUKPiBhIHNpbmd1bGFyIGZsYWcgSU9DVEwg cmF0aGVyIHRoYW4gcGVyIFZNIGJpbmQgb3AgZmxhZyB0b28uIEFkZAo+IERSTV9YRV9TWU5DU19G TEFHX1dBSVRfRk9SX09QIHdoaWNoIGlzIGFuIGlucHV0IHN5bmMgZmxhZyB0byBzdXBwb3J0Cj4g dGhpcy4gU3VwcG9ydCB0aGlzIG5ldyBmbGFnIGZvciBib3RoIHRoZSBWTSBiaW5kIElPQ1RMIG9u bHkgd2l0aCBhCj4gcGF0aAo+IHRvIHN1cHBvcnQgdGhpcyBmb3IgZXhlY3MgdG9vLgo+IAo+IHYy OiBBZGQgY29va2llLCBtb3ZlIHN5bmMgd2FpdCBvdXRzaWRlIG9mIGFueSBsb2Nrcy4KPiAKPiBD YzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgo+IENjOiBUaG9tYXMgSGVs bHN0csO2bSA8dGhvbWFzLmhlbGxzdHJvbUBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6IEZyYW5jb2lz IER1Z2FzdCA8ZnJhbmNvaXMuZHVnYXN0QGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBNYXR0 aGV3IEJyb3N0IDxtYXR0aGV3LmJyb3N0QGludGVsLmNvbT4KClNvbWUgbWlub3IgdGhpbmdzIGJl bG93LCAKQnV0IEkgZG9uJ3Qgc2VlIHdoZXJlIHdlIHJlYWQgdGhlIGNvb2tlIGFuZCBieXBhc3Mg dGhlIHN1Ym1pc3Npb24gdG8KanVzdCB3YWl0IGZvciB0aGUgbGFzdCBmZW5jZSB3aGVyZSAqY29v a2llICE9IDA/CgpMaWtlOgp2bV9iaW5kKCkKCWNvbW1pdCgpOwoJd2FpdF9mb3JfbGFzdF9mZW5j ZSgpOyAtIFJldHVybnMgLUVSRVNUQVJUU1lTOwoJc2V0X2Nvb2tpZSgxKTsKCXJldHVybiBvciBy ZXN0YXJ0OwoKdm1fYmluZCgpOwppZiAoY29va2llKCkgPT0gMSkKCXdhaXRfZm9yX2xhc3RfZmVu Y2UoKTsKCXJldHVybjsKfSBlbHNlIHsKCS4uLgoKCgoKL1Rob21hcwoKCj4gLS0tCj4gwqBkcml2 ZXJzL2dwdS9kcm0veGUveGVfZXhlYy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxMiAr Ky0KPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVlLmPCoMKgwqDCoMKgwqAgfMKg wqAgNyArLQo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWVfdHlwZXMuaCB8wqDC oCAyIC0KPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8IDExNiArKysrKysrKysrKy0tLS0tLS0tLS0KPiAtLQo+IMKgZHJpdmVycy9ncHUv ZHJtL3hlL3hlX3ZtX3R5cGVzLmjCoMKgwqDCoMKgwqDCoMKgIHzCoCAxMyArKy0KPiDCoGluY2x1 ZGUvdWFwaS9kcm0veGVfZHJtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDY0 ICsrKysrKysrLS0tLS0KPiDCoDYgZmlsZXMgY2hhbmdlZCwgMTA5IGluc2VydGlvbnMoKyksIDEw NSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4 ZWMuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWMuYwo+IGluZGV4IGJhOTJlNTYxOWRh My4uOGExNTMwZGFiNjVmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVj LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlYy5jCj4gQEAgLTEwNCw3ICsxMDQs NyBAQCBpbnQgeGVfZXhlY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkCj4gKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2Rl dmljZSAqeGUgPSB0b194ZV9kZXZpY2UoZGV2KTsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhl X2ZpbGUgKnhlZiA9IHRvX3hlX2ZpbGUoZmlsZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cm1feGVfZXhlYyAqYXJncyA9IGRhdGE7Cj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV94ZV9z eW5jIF9fdXNlciAqc3luY3NfdXNlciA9IHU2NF90b191c2VyX3B0cihhcmdzLQo+ID5zeW5jcyk7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV94ZV9zeW5jIF9fdXNlciAqc3luY3NfdXNlciA9 IHU2NF90b191c2VyX3B0cihhcmdzLQo+ID5zeW5jcy5zeW5jcyk7Cj4gwqDCoMKgwqDCoMKgwqDC oHU2NCBfX3VzZXIgKmFkZHJlc3Nlc191c2VyID0gdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmFkZHJl c3MpOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcTsKPiDCoMKgwqDC oMKgwqDCoMKgc3RydWN0IHhlX3N5bmNfZW50cnkgKnN5bmNzID0gTlVMTDsKPiBAQCAtMTIwLDcg KzEyMCw5IEBAIGludCB4ZV9leGVjX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQK PiAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgZXJy ID0gMDsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCBhcmdzLT5l eHRlbnNpb25zKSB8fAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCBYRV9JT0NUTF9EQkcoeGUsIGFy Z3MtPnBhZFswXSB8fCBhcmdzLT5wYWRbMV0gfHwgYXJncy0KPiA+cGFkWzJdKSB8fAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoCBYRV9JT0NUTF9EQkcoeGUsIGFyZ3MtPnBhZCB8fCBhcmdzLT5wYWQy WzBdIHx8IGFyZ3MtCj4gPnBhZDJbMV0gfHwgYXJncy0+cGFkMlsyXSkgfHwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgWEVfSU9DVExfREJHKHhlLCBhcmdzLT5zeW5jcy5mbGFncykgfHwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfREJHKHhlLCBhcmdzLT5zeW5jcy5jb29raWUpIHx8 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRV9JT0NUTF9EQkcoeGUsIGFyZ3MtPnJlc2VydmVk WzBdIHx8IGFyZ3MtPnJlc2VydmVkWzFdKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAtRUlOVkFMOwo+IMKgCj4gQEAgLTE0MCw4ICsxNDIsOCBAQCBpbnQgeGVfZXhl Y19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkCj4gKmRhdGEsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX2V4 ZWNfcXVldWU7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmIChh cmdzLT5udW1fc3luY3MpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3luY3Mg PSBrY2FsbG9jKGFyZ3MtPm51bV9zeW5jcywgc2l6ZW9mKCpzeW5jcyksCj4gR0ZQX0tFUk5FTCk7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGFyZ3MtPnN5bmNzLm51bV9zeW5jcykgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzeW5jcyA9IGtjYWxsb2MoYXJncy0+c3luY3MubnVtX3N5 bmNzLAo+IHNpemVvZigqc3luY3MpLCBHRlBfS0VSTkVMKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghc3luY3MpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRU5PTUVNOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX2V4ZWNfcXVldWU7Cj4gQEAgLTE1 MCw3ICsxNTIsNyBAQCBpbnQgeGVfZXhlY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkCj4gKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiDCoAo+IMKgwqDCoMKgwqDCoMKg wqB2bSA9IHEtPnZtOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGFyZ3Mt Pm51bV9zeW5jczsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGFyZ3Mt PnN5bmNzLm51bV9zeW5jczsgaSsrKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlcnIgPSB4ZV9zeW5jX2VudHJ5X3BhcnNlKHhlLCB4ZWYsCj4gJnN5bmNzW251bV9zeW5jcysr XSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzeW5jc191c2VyW2ldLAo+IFNZTkNfUEFS U0VfRkxBR19FWEVDIHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh4ZV92bV9pbl9scl9t b2RlKHZtKSA/Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVl LmMKPiBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1ZXVlLmMKPiBpbmRleCBlZWI5NjA1 ZGQ0NWYuLmEyNWQ2Nzk3MWZkZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVf ZXhlY19xdWV1ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWUuYwo+ IEBAIC02MjUsMTAgKzYyNSw3IEBAIGludCB4ZV9leGVjX3F1ZXVlX2NyZWF0ZV9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZQo+ICpkZXYsIHZvaWQgKmRhdGEsCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChY RV9JT0NUTF9EQkcoeGUsIGVjaVswXS5ndF9pZCA+PSB4ZS0+aW5mby5ndF9jb3VudCkpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiDCoAo+IC3CoMKg wqDCoMKgwqDCoGlmIChlY2lbMF0uZW5naW5lX2NsYXNzID49IERSTV9YRV9FTkdJTkVfQ0xBU1Nf Vk1fQklORF9BU1lOQykKPiB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wg c3luYyA9IGVjaVswXS5lbmdpbmVfY2xhc3MgPT0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9YRV9FTkdJTkVfQ0xBU1NfVk1fQklORF9TWU5DOwo+ IC0KPiArwqDCoMKgwqDCoMKgwqBpZiAoZWNpWzBdLmVuZ2luZV9jbGFzcyA9PSBEUk1fWEVfRU5H SU5FX0NMQVNTX1ZNX0JJTkQpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZv cl9lYWNoX2d0KGd0LCB4ZSwgaWQpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqbmV3Owo+IMKgCj4gQEAgLTY1 NCw4ICs2NTEsNiBAQCBpbnQgeGVfZXhlY19xdWV1ZV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UKPiAqZGV2LCB2b2lkICpkYXRhLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXJncy0+d2lkdGgsIGh3ZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gRVhFQ19RVUVVRV9GTEFHX1BFUlNJU1RFTlQgfAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRVhFQ19RVUVVRV9GTEFH X1ZNCj4gfAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc3lu YyA/IDAgOgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4g RVhFQ19RVUVVRV9GTEFHX1ZNX0FTWU5DKSB8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAoaWQgPwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoAo+IEVYRUNfUVVFVUVfRkxBR19CSU5EX0VOR0lORV9DSElMRCA6Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDApKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWVfdHlwZXMuaAo+IGIvZHJpdmVy cy9ncHUvZHJtL3hlL3hlX2V4ZWNfcXVldWVfdHlwZXMuaAo+IGluZGV4IGM3YWVmYTFjOGMzMS4u MGY3ZjZjZGVkNGEzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9leGVjX3F1 ZXVlX3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZXhlY19xdWV1ZV90eXBl cy5oCj4gQEAgLTg0LDggKzg0LDYgQEAgc3RydWN0IHhlX2V4ZWNfcXVldWUgewo+IMKgI2RlZmlu ZSBFWEVDX1FVRVVFX0ZMQUdfVk3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoNCkKPiDCoC8qIGNoaWxkIG9mIFZNIHF1ZXVlIGZvciBtdWx0aS10aWxlIFZNIGpv YnMgKi8KPiDCoCNkZWZpbmUgRVhFQ19RVUVVRV9GTEFHX0JJTkRfRU5HSU5FX0NISUxEwqDCoMKg wqDCoMKgQklUKDUpCj4gLS8qIFZNIGpvYnMgZm9yIHRoaXMgcXVldWUgYXJlIGFzeW5jaHJvbm91 cyAqLwo+IC0jZGVmaW5lIEVYRUNfUVVFVUVfRkxBR19WTV9BU1lOQ8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoEJJVCg2KQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoC8qKgo+IMKgwqDCoMKg wqDCoMKgwqAgKiBAZmxhZ3M6IGZsYWdzIGZvciB0aGlzIGV4ZWMgcXVldWUsIHNob3VsZCBzdGF0 aWNhbGx5IHNldHVwCj4gYXNpZGUgZnJvbSBiYW4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3hlL3hlX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYwo+IGluZGV4IDJmM2Rm OWVlNjdjOS4uYWIzODY4NWQyZGFmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94 ZV92bS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMKPiBAQCAtMTM0Myw5ICsx MzQzLDcgQEAgc3RydWN0IHhlX3ZtICp4ZV92bV9jcmVhdGUoc3RydWN0IHhlX2RldmljZQo+ICp4 ZSwgdTMyIGZsYWdzKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCB4ZV9ndCAqZ3QgPSB0aWxlLT5wcmltYXJ5X2d0Owo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV92bSAqbWlncmF0 ZV92bTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHUzMiBjcmVhdGVfZmxhZ3MgPSBFWEVDX1FVRVVFX0ZMQUdfVk0gfAo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCgoZmxhZ3MgJiBYRV9WTV9GTEFHX0FTWU5DX0RFRkFVTFQpID8KPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBFWEVD X1FVRVVFX0ZMQUdfVk1fQVNZTkMgOiAwKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBjcmVhdGVfZmxhZ3MgPSBFWEVDX1FVRVVFX0ZMQUdfVk07 Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoIXZtLT5wdF9yb290W2lkXSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gQEAgLTE3MTIsMTIgKzE3 MTAsNiBAQCB4ZV92bV9iaW5kX3ZtYShzdHJ1Y3QgeGVfdm1hICp2bWEsIHN0cnVjdAo+IHhlX2V4 ZWNfcXVldWUgKnEsCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKGVycik7Cj4gwqB9 Cj4gwqAKPiAtc3RhdGljIGJvb2wgeGVfdm1fc3luY19tb2RlKHN0cnVjdCB4ZV92bSAqdm0sIHN0 cnVjdCB4ZV9leGVjX3F1ZXVlCj4gKnEpCj4gLXsKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gcSA/ ICEocS0+ZmxhZ3MgJiBFWEVDX1FVRVVFX0ZMQUdfVk1fQVNZTkMpIDoKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgISh2bS0+ZmxhZ3MgJiBYRV9WTV9GTEFHX0FTWU5DX0RFRkFVTFQp Owo+IC19Cj4gLQo+IMKgc3RhdGljIGludCBfX3hlX3ZtX2JpbmQoc3RydWN0IHhlX3ZtICp2bSwg c3RydWN0IHhlX3ZtYSAqdm1hLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9leGVjX3F1ZXVlICpxLCBzdHJ1Y3QgeGVfc3luY19lbnRy eQo+ICpzeW5jcywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1MzIgbnVtX3N5bmNzLCBib29sIGltbWVkaWF0ZSwgYm9vbCBmaXJzdF9vcCwKPiBAQCAt MTc0Nyw4ICsxNzM5LDYgQEAgc3RhdGljIGludCBfX3hlX3ZtX2JpbmQoc3RydWN0IHhlX3ZtICp2 bSwKPiBzdHJ1Y3QgeGVfdm1hICp2bWEsCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGxhc3Rf b3ApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3F1ZXVlX2xhc3Rf ZmVuY2Vfc2V0KHdhaXRfZXhlY19xdWV1ZSwgdm0sCj4gZmVuY2UpOwo+IC3CoMKgwqDCoMKgwqDC oGlmIChsYXN0X29wICYmIHhlX3ZtX3N5bmNfbW9kZSh2bSwgcSkpCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV93YWl0KGZlbmNlLCB0cnVlKTsKPiDCoMKgwqDCoMKg wqDCoMKgZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IDA7Cj4gQEAgLTE3OTEsOCArMTc4MSw2IEBAIHN0YXRpYyBpbnQgeGVfdm1fdW5iaW5kKHN0cnVj dCB4ZV92bSAqdm0sCj4gc3RydWN0IHhlX3ZtYSAqdm1hLAo+IMKgwqDCoMKgwqDCoMKgwqB4ZV92 bWFfZGVzdHJveSh2bWEsIGZlbmNlKTsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGxhc3Rfb3ApCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3F1ZXVlX2xhc3RfZmVuY2Vf c2V0KHdhaXRfZXhlY19xdWV1ZSwgdm0sCj4gZmVuY2UpOwo+IC3CoMKgwqDCoMKgwqDCoGlmIChs YXN0X29wICYmIHhlX3ZtX3N5bmNfbW9kZSh2bSwgcSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRtYV9mZW5jZV93YWl0KGZlbmNlLCB0cnVlKTsKPiDCoMKgwqDCoMKgwqDCoMKg ZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4g QEAgLTE4MDAsNyArMTc4OCw2IEBAIHN0YXRpYyBpbnQgeGVfdm1fdW5iaW5kKHN0cnVjdCB4ZV92 bSAqdm0sCj4gc3RydWN0IHhlX3ZtYSAqdm1hLAo+IMKgCj4gwqAjZGVmaW5lIEFMTF9EUk1fWEVf Vk1fQ1JFQVRFX0ZMQUdTCj4gKERSTV9YRV9WTV9DUkVBVEVfRkxBR19TQ1JBVENIX1BBR0UgfCBc Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBEUk1fWEVfVk1fQ1JFQVRFX0ZMQUdfTFJfTU9ERSB8IFwKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAKPiBEUk1fWEVfVk1fQ1JFQVRFX0ZMQUdfQVNZTkNfREVGQVVMVCB8IFwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIERSTV9YRV9WTV9DUkVBVEVfRkxBR19GQVVMVF9NT0RFKQo+IMKgCj4gwqBpbnQg eGVfdm1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4g QEAgLTE4NTQsOCArMTg0MSw2IEBAIGludCB4ZV92bV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiB2b2lkICpkYXRhLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZmxhZ3MgfD0gWEVfVk1fRkxBR19TQ1JBVENIX1BBR0U7Cj4gwqDCoMKgwqDCoMKgwqDCoGlm IChhcmdzLT5mbGFncyAmIERSTV9YRV9WTV9DUkVBVEVfRkxBR19MUl9NT0RFKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmxhZ3MgfD0gWEVfVk1fRkxBR19MUl9NT0RFOwo+IC3C oMKgwqDCoMKgwqDCoGlmIChhcmdzLT5mbGFncyAmIERSTV9YRV9WTV9DUkVBVEVfRkxBR19BU1lO Q19ERUZBVUxUKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFncyB8PSBYRV9W TV9GTEFHX0FTWU5DX0RFRkFVTFQ7Cj4gwqDCoMKgwqDCoMKgwqDCoGlmIChhcmdzLT5mbGFncyAm IERSTV9YRV9WTV9DUkVBVEVfRkxBR19GQVVMVF9NT0RFKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZmxhZ3MgfD0gWEVfVk1fRkxBR19GQVVMVF9NT0RFOwo+IMKgCj4gQEAgLTIy NjMsOCArMjI0OCw3IEBAIHN0YXRpYyBpbnQgeGVfdm1hX29wX2NvbW1pdChzdHJ1Y3QgeGVfdm0g KnZtLAo+IHN0cnVjdCB4ZV92bWFfb3AgKm9wKQo+IMKgc3RhdGljIGludCB2bV9iaW5kX2lvY3Rs X29wc19wYXJzZShzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QKPiB4ZV9leGVjX3F1ZXVlICpxLAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fZ3B1dmFfb3BzICpvcHMsCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHhlX3N5bmNfZW50cnkgKnN5bmNzLCB1MzIKPiBudW1fc3luY3MsCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgbGlzdF9oZWFkICpvcHNfbGlzdCwgYm9vbAo+IGxhc3QsCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29s IGFzeW5jKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCAqb3BzX2xpc3QsIGJvb2wKPiBs YXN0KQo+IMKgewo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm1hX29wICpsYXN0X29wID0g TlVMTDsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqX19vcDsKPiBAQCAt MjY5NiwxNiArMjY4MCwxNiBAQCBzdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfb3BzX2V4ZWN1dGUo c3RydWN0Cj4geGVfdm0gKnZtLAo+IMKgCj4gwqAjaWZkZWYgVEVTVF9WTV9BU1lOQ19PUFNfRVJS T1IKPiDCoCNkZWZpbmUgU1VQUE9SVEVEX0ZMQUdTwqDCoMKgwqDCoMKgwqDCoFwKPiAtwqDCoMKg wqDCoMKgwqAoRk9SQ0VfQVNZTkNfT1BfRVJST1IgfCBEUk1fWEVfVk1fQklORF9GTEFHX0FTWU5D IHwgXAo+IC3CoMKgwqDCoMKgwqDCoCBEUk1fWEVfVk1fQklORF9GTEFHX1JFQURPTkxZIHwgRFJN X1hFX1ZNX0JJTkRfRkxBR19JTU1FRElBVEUKPiB8IFwKPiAtwqDCoMKgwqDCoMKgwqAgRFJNX1hF X1ZNX0JJTkRfRkxBR19OVUxMIHwgMHhmZmZmKQo+ICvCoMKgwqDCoMKgwqDCoChGT1JDRV9BU1lO Q19PUF9FUlJPUiB8IERSTV9YRV9WTV9CSU5EX0ZMQUdfUkVBRE9OTFkgfCBcCj4gK8KgwqDCoMKg wqDCoMKgIERSTV9YRV9WTV9CSU5EX0ZMQUdfSU1NRURJQVRFIHwgRFJNX1hFX1ZNX0JJTkRfRkxB R19OVUxMIHwKPiAweGZmZmYpCj4gwqAjZWxzZQo+IMKgI2RlZmluZSBTVVBQT1JURURfRkxBR1PC oMKgwqDCoMKgwqDCoMKgXAo+IC3CoMKgwqDCoMKgwqDCoChEUk1fWEVfVk1fQklORF9GTEFHX0FT WU5DIHwgRFJNX1hFX1ZNX0JJTkRfRkxBR19SRUFET05MWSB8IFwKPiArwqDCoMKgwqDCoMKgwqAo RFJNX1hFX1ZNX0JJTkRfRkxBR19SRUFET05MWSB8IFwKPiDCoMKgwqDCoMKgwqDCoMKgIERSTV9Y RV9WTV9CSU5EX0ZMQUdfSU1NRURJQVRFIHwgRFJNX1hFX1ZNX0JJTkRfRkxBR19OVUxMIHwgXAo+ IMKgwqDCoMKgwqDCoMKgwqAgMHhmZmZmKQo+IMKgI2VuZGlmCj4gwqAjZGVmaW5lIFhFXzY0S19Q QUdFX01BU0sgMHhmZmZmdWxsCj4gKyNkZWZpbmUgQUxMX0RSTV9YRV9TWU5DU19GTEFHUyAoRFJN X1hFX1NZTkNTX0ZMQUdfV0FJVF9GT1JfT1ApCj4gwqAKPiDCoCNkZWZpbmUgTUFYX0JJTkRTwqDC oMKgwqDCoMKgNTEywqDCoMKgwqDCoC8qIEZJWE1FOiBQaWNraW5nIHJhbmRvbSB1cHBlciBsaW1p dAo+ICovCj4gwqAKPiBAQCAtMjcxNyw3ICsyNzAxLDcgQEAgc3RhdGljIGludCB2bV9iaW5kX2lv Y3RsX2NoZWNrX2FyZ3Moc3RydWN0Cj4geGVfZGV2aWNlICp4ZSwKPiDCoMKgwqDCoMKgwqDCoMKg aW50IGVycjsKPiDCoMKgwqDCoMKgwqDCoMKgaW50IGk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBp ZiAoWEVfSU9DVExfREJHKHhlLCBhcmdzLT5wYWQgfHwgYXJncy0+cGFkMikgfHwKPiArwqDCoMKg wqDCoMKgwqBpZiAoWEVfSU9DVExfREJHKHhlLCBhcmdzLT5wYWQpIHx8Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBYRV9JT0NUTF9EQkcoeGUsIGFyZ3MtPnJlc2VydmVkWzBdIHx8IGFyZ3MtPnJl c2VydmVkWzFdKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlO VkFMOwo+IMKgCj4gQEAgLTI3NDUsNiArMjcyOSwxNCBAQCBzdGF0aWMgaW50IHZtX2JpbmRfaW9j dGxfY2hlY2tfYXJncyhzdHJ1Y3QKPiB4ZV9kZXZpY2UgKnhlLAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgKmJpbmRfb3BzID0gJmFyZ3MtPmJpbmQ7Cj4gwqDCoMKgwqDCoMKgwqDC oH0KPiDCoAo+ICvCoMKgwqDCoMKgwqDCoCphc3luYyA9ICEoYXJncy0+c3luY3MuZmxhZ3MgJgo+ IERSTV9YRV9TWU5DU19GTEFHX1dBSVRfRk9SX09QKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KFhFX0lPQ1RMX0RCRyh4ZSwgYXJncy0+c3luY3MuZmxhZ3MgJgo+IH5BTExfRFJNX1hFX1NZTkNT X0ZMQUdTKSB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRV9JT0NUTF9EQkcoeGUsICEqYXN5 bmMgJiYgYXJncy0+c3luY3MubnVtX3N5bmNzKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlcnIgPSAtRUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBn b3RvIGZyZWVfYmluZF9vcHM7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiDCoMKgwqDCoMKgwqDC oMKgZm9yIChpID0gMDsgaSA8IGFyZ3MtPm51bV9iaW5kczsgKytpKSB7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB1NjQgcmFuZ2UgPSAoKmJpbmRfb3BzKVtpXS5yYW5nZTsKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCBhZGRyID0gKCpiaW5kX29wcylbaV0u YWRkcjsKPiBAQCAtMjc3NSwxOCArMjc2Nyw2IEBAIHN0YXRpYyBpbnQgdm1fYmluZF9pb2N0bF9j aGVja19hcmdzKHN0cnVjdAo+IHhlX2RldmljZSAqeGUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2JpbmRfb3BzOwo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChpID09IDApIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCphc3luYyA9ICEhKGZsYWdzICYKPiBEUk1fWEVfVk1fQklORF9GTEFHX0FT WU5DKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChYRV9JT0NUTF9EQkcoeGUsICEqYXN5bmMgJiYgYXJncy0KPiA+bnVtX3N5bmNzKSkgewo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGVyciA9IC1FSU5WQUw7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2JpbmRfb3BzOwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKFhFX0lPQ1RMX0RCRyh4ZSwgKmFzeW5jICE9Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCEhKGZsYWdzICYKPiBEUk1fWEVfVk1fQklORF9GTEFHX0FT WU5DKSkpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVyciA9IC1FSU5WQUw7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIGZyZWVfYmluZF9vcHM7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0KPiAtCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoWEVfSU9DVExf REJHKHhlLCBvcCA+IERSTV9YRV9WTV9CSU5EX09QX1BSRUZFVENIKQo+IHx8Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVfSU9DVExfREJHKHhlLCBmbGFncyAmIH5T VVBQT1JURURfRkxBR1MpIHx8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgWEVfSU9DVExfREJHKHhlLCBvYmogJiYgaXNfbnVsbCkgfHwKPiBAQCAtMjg1NCwxMiArMjgz NCwyNSBAQCBzdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfc2lnbmFsX2ZlbmNlcyhzdHJ1Y3QKPiB4 ZV92bSAqdm0sCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9sYXN0X2ZlbmNl X3NldCh0b193YWl0X2V4ZWNfcXVldWUodm0sIHEpLCB2bSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmVu Y2UpOwo+ICvCoMKgwqDCoMKgwqDCoGRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+IMKgCj4gLcKgwqDC oMKgwqDCoMKgaWYgKHhlX3ZtX3N5bmNfbW9kZSh2bSwgcSkpIHsKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbG9uZyB0aW1lb3V0ID0gZG1hX2ZlbmNlX3dhaXQoZmVuY2UsIHRydWUp Owo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBlcnI7Cj4gK30KPiDCoAo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAodGltZW91dCA8IDApCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRUlOVFI7Cj4gK3N0YXRpYyBpbnQgdm1f YmluZF9pb2N0bF9zeW5jX3dhaXQoc3RydWN0IHhlX3ZtICp2bSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkbWFfZmVuY2UgKmZlbmNlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IF9fdXNlciAqY29va2llKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgbG9uZyB0aW1lb3V0OwoKUGVyaGFwcyB1c2UgZXJyPyBJdCBjYW4g b25seSBldmVyIGJlIDw9IDAsIHNvIHRpbWVvdXQgaXMgbWlzbGVhZGluZy4KCj4gK8KgwqDCoMKg wqDCoMKgaW50IGVyciA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHRpbWVvdXQgPSBkbWFfZmVu Y2Vfd2FpdChmZW5jZSwgdHJ1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHRpbWVvdXQgPCAwKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCB2YWx1ZSA9IDE7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRVJFU1RBUlRTWVM7CgpKdXN0IGZv cndhcmQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGRtYV9mZW5jZV93YWl0KCkuCgo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY29weV90b191c2VyKGNvb2tpZSwgJnZhbHVlLCBz aXplb2YodmFsdWUpKSkKCnB1dF91c2VyKCkKCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSAtRUZBVUxUOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gQEAgLTI4NzUsNiAr Mjg2OCw3IEBAIGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g dm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX3hlX3N5bmMgX191c2VyICpzeW5jc191c2VyOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgeGVfYm8gKipib3MgPSBOVUxMOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZh X29wcyAqKm9wcyA9IE5VTEw7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRtYV9mZW5jZSAqZmVu Y2UgPSBOVUxMOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfdm0gKnZtOwo+IMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcSA9IE5VTEw7Cj4gwqDCoMKgwqDCoMKgwqDC oHUzMiBudW1fc3luY3M7Cj4gQEAgLTI4ODksNyArMjg4Myw3IEBAIGludCB4ZV92bV9iaW5kX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxl ICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NU TF9EQkcoeGUsIGFyZ3MtPnBhZCB8fCBhcmdzLT5wYWQyKSB8fAo+ICvCoMKgwqDCoMKgwqDCoGlm IChYRV9JT0NUTF9EQkcoeGUsIGFyZ3MtPnBhZCkgfHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFhFX0lPQ1RMX0RCRyh4ZSwgYXJncy0+cmVzZXJ2ZWRbMF0gfHwgYXJncy0+cmVzZXJ2ZWRbMV0p KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gwqAK PiBAQCAtMjkwNCwxMiArMjg5OCw2IEBAIGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1FSU5WQUw7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBw dXRfZXhlY19xdWV1ZTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAtCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9EQkcoeGUsIGFyZ3Mt Pm51bV9iaW5kcyAmJiBhc3luYyAhPQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhIShxLT5mbGFncyAmCj4gRVhFQ19RVUVV RV9GTEFHX1ZNX0FTWU5DKSkpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGVyciA9IC1FSU5WQUw7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHB1dF9leGVjX3F1ZXVlOwo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqB2bSA9IHhlX3ZtX2xvb2t1cCh4ZWYsIGFyZ3MtPnZtX2lkKTsKPiBAQCAtMjkxOCwxNCAr MjkwNiw2IEBAIGludCB4ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g dm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ290byBwdXRfZXhlY19xdWV1ZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKg Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFhcmdzLT5leGVjX3F1ZXVlX2lkKSB7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChYRV9JT0NUTF9EQkcoeGUsIGFyZ3MtPm51bV9iaW5k cyAmJiBhc3luYyAhPQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhISh2bS0+ZmxhZ3MgJgo+IFhFX1ZNX0ZMQUdfQVNZTkNf REVGQVVMVCkpKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlcnIgPSAtRUlOVkFMOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ290byBwdXRfdm07Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiAtwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBkb3duX3dy aXRlX2tpbGxhYmxlKCZ2bS0+bG9jayk7Cj4gwqDCoMKgwqDCoMKgwqDCoGlmIChlcnIpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHB1dF92bTsKPiBAQCAtMzAxNSwxNiAr Mjk5NSwxNiBAQCBpbnQgeGVfdm1fYmluZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ IHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKg aWYgKGFyZ3MtPm51bV9zeW5jcykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz eW5jcyA9IGtjYWxsb2MoYXJncy0+bnVtX3N5bmNzLCBzaXplb2YoKnN5bmNzKSwKPiBHRlBfS0VS TkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoYXJncy0+c3luY3MubnVtX3N5bmNzKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN5bmNzID0ga2NhbGxvYyhhcmdzLT5zeW5jcy5u dW1fc3luY3MsCj4gc2l6ZW9mKCpzeW5jcyksIEdGUF9LRVJORUwpOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzeW5jcykgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IC1FTk9NRU07Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBwdXRfb2JqOwo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDC oMKgwqDCoMKgwqBzeW5jc191c2VyID0gdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPnN5bmNzKTsKPiAt wqDCoMKgwqDCoMKgwqBmb3IgKG51bV9zeW5jcyA9IDA7IG51bV9zeW5jcyA8IGFyZ3MtPm51bV9z eW5jczsgbnVtX3N5bmNzKyspCj4gewo+ICvCoMKgwqDCoMKgwqDCoHN5bmNzX3VzZXIgPSB1NjRf dG9fdXNlcl9wdHIoYXJncy0+c3luY3Muc3luY3MpOwo+ICvCoMKgwqDCoMKgwqDCoGZvciAobnVt X3N5bmNzID0gMDsgbnVtX3N5bmNzIDwgYXJncy0+c3luY3MubnVtX3N5bmNzOwo+IG51bV9zeW5j cysrKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnIgPSB4ZV9zeW5jX2Vu dHJ5X3BhcnNlKHhlLCB4ZWYsICZzeW5jc1tudW1fc3luY3NdLAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJnN5bmNzX3VzZXJbbnVtX3N5bmNzXSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICh4ZV92bV9pbl9scl9tb2RlKHZtKSA/Cj4gQEAgLTMwNjAsOCArMzA0MCw3IEBAIGludCB4 ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9pZCAqZGF0YSwgc3Ry dWN0IGRybV9maWxlICpmaWxlKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlcnIgPSB2bV9iaW5kX2lvY3RsX29wc19wYXJzZSh2bSwgcSwgb3BzW2ldLCBzeW5jcywKPiBu dW1fc3luY3MsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZvcHNfbGlzdCwK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpID09IGFyZ3MtPm51bV9iaW5kcyAt Cj4gMSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3luYyk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaSA9PSBhcmdzLT5udW1fYmluZHMgLQo+IDEpOwo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHVud2luZF9vcHM7Cj4gwqDC oMKgwqDCoMKgwqDCoH0KPiBAQCAtMzA3Nyw3ICszMDU2LDEwIEBAIGludCB4ZV92bV9iaW5kX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxl ICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZXhlY19xdWV1ZV9n ZXQocSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgZXJyID0gdm1fYmluZF9pb2N0bF9vcHNfZXhl Y3V0ZSh2bSwgJm9wc19saXN0KTsKPiAtCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFlcnIgJiYgIWFz eW5jKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZlbmNlID0KPiB4ZV9leGVj X3F1ZXVlX2xhc3RfZmVuY2VfZ2V0KHRvX3dhaXRfZXhlY19xdWV1ZSh2bSwgcSksIHZtKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX2ZlbmNlX2dldChmZW5jZSk7Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqB1cF93cml0ZSgmdm0tPmxvY2spOwo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoGlmIChxKQo+IEBAIC0zMDkyLDEzICszMDc0LDE5IEBAIGludCB4 ZV92bV9iaW5kX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gdm9pZCAqZGF0YSwgc3Ry dWN0IGRybV9maWxlICpmaWxlKQo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoYXJncy0+bnVtX2JpbmRz ID4gMSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKGJpbmRfb3BzKTsK PiDCoAo+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBlcnI7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IGZlbmNlID8gdm1fYmluZF9pb2N0bF9zeW5jX3dhaXQodm0sIGZlbmNlLAo+IHU2NF90b191c2Vy X3B0cihhcmdzLT5zeW5jcy5jb29raWUpKSA6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGVycjsKPiDCoAo+IMKgdW53aW5kX29wczoKPiDCoMKgwqDCoMKgwqDCoMKgdm1fYmluZF9p b2N0bF9vcHNfdW53aW5kKHZtLCBvcHMsIGFyZ3MtPm51bV9iaW5kcyk7Cj4gwqBmcmVlX3N5bmNz Ogo+IC3CoMKgwqDCoMKgwqDCoGlmIChlcnIgPT0gLUVOT0RBVEEpCj4gK8KgwqDCoMKgwqDCoMKg aWYgKGVyciA9PSAtRU5PREFUQSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZXJyID0gdm1fYmluZF9pb2N0bF9zaWduYWxfZmVuY2VzKHZtLCBxLCBzeW5jcywKPiBudW1fc3lu Y3MpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWFzeW5jKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmZW5jZSA9Cj4geGVf ZXhlY19xdWV1ZV9sYXN0X2ZlbmNlX2dldCh0b193YWl0X2V4ZWNfcXVldWUodm0sIHEpLCB2bSk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfZmVu Y2VfZ2V0KGZlbmNlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKg wqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqDCoMKgd2hpbGUgKG51bV9zeW5jcy0tKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfc3luY19lbnRyeV9jbGVhbnVwKCZzeW5jc1tu dW1fc3luY3NdKTsKPiDCoAo+IEBAIC0zMTA4LDYgKzMwOTYsOCBAQCBpbnQgeGVfdm1fYmluZF9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2JvX3B1dChib3Nb aV0pOwo+IMKgcmVsZWFzZV92bV9sb2NrOgo+IMKgwqDCoMKgwqDCoMKgwqB1cF93cml0ZSgmdm0t PmxvY2spOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChmZW5jZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZXJyID0gdm1fYmluZF9pb2N0bF9zeW5jX3dhaXQodm0sIGZlbmNlLAo+IHU2 NF90b191c2VyX3B0cihhcmdzLT5zeW5jcy5jb29raWUpKTsKPiDCoHB1dF92bToKPiDCoMKgwqDC oMKgwqDCoMKgeGVfdm1fcHV0KHZtKTsKPiDCoHB1dF9leGVjX3F1ZXVlOgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaAo+IGIvZHJpdmVycy9ncHUvZHJtL3hl L3hlX3ZtX3R5cGVzLmgKPiBpbmRleCAyZTAyMzU5NmNiMTUuLjYzZThhNTBiODhlOSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfdm1fdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV92bV90eXBlcy5oCj4gQEAgLTEzOCwxMyArMTM4LDEyIEBAIHN0cnVjdCB4 ZV92bSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCAqLwo+IMKgI2RlZmluZSBYRV9WTV9GTEFHXzY0S8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMCkKPiDCoCNkZWZpbmUgWEVfVk1f RkxBR19MUl9NT0RFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMSkKPiAtI2RlZmluZSBY RV9WTV9GTEFHX0FTWU5DX0RFRkFVTFTCoMKgwqDCoMKgwqDCoEJJVCgyKQo+IC0jZGVmaW5lIFhF X1ZNX0ZMQUdfTUlHUkFUSU9OwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzKQo+IC0jZGVmaW5l IFhFX1ZNX0ZMQUdfU0NSQVRDSF9QQUdFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBC SVQoNCkKPiAtI2RlZmluZSBYRV9WTV9GTEFHX0ZBVUxUX01PREXCoMKgwqDCoMKgwqDCoMKgwqDC oEJJVCg1KQo+IC0jZGVmaW5lIFhFX1ZNX0ZMQUdfQkFOTkVEwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoEJJVCg2KQo+IC0jZGVmaW5lIFhFX1ZNX0ZMQUdfVElMRV9JRChmbGFncynCoMKgwqDC oMKgwqBGSUVMRF9HRVQoR0VOTUFTSyg4LCA3KSwKPiBmbGFncykKPiAtI2RlZmluZSBYRV9WTV9G TEFHX1NFVF9USUxFX0lEKHRpbGUpwqDCoMKgRklFTERfUFJFUChHRU5NQVNLKDgsIDcpLAo+ICh0 aWxlKS0+aWQpCj4gKyNkZWZpbmUgWEVfVk1fRkxBR19NSUdSQVRJT07CoMKgwqDCoMKgwqDCoMKg wqDCoMKgQklUKDIpCj4gKyNkZWZpbmUgWEVfVk1fRkxBR19TQ1JBVENIX1BBR0XCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzKQo+ICsjZGVmaW5lIFhFX1ZNX0ZMQUdfRkFVTFRf TU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDQpCj4gKyNkZWZpbmUgWEVfVk1fRkxBR19CQU5O RUTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDUpCj4gKyNkZWZpbmUgWEVfVk1fRkxB R19USUxFX0lEKGZsYWdzKcKgwqDCoMKgwqDCoEZJRUxEX0dFVChHRU5NQVNLKDcsIDYpLAo+IGZs YWdzKQo+ICsjZGVmaW5lIFhFX1ZNX0ZMQUdfU0VUX1RJTEVfSUQodGlsZSnCoMKgwqBGSUVMRF9Q UkVQKEdFTk1BU0soNywgNiksCj4gKHRpbGUpLT5pZCkKPiDCoMKgwqDCoMKgwqDCoMKgdW5zaWdu ZWQgbG9uZyBmbGFnczsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQGNvbXBvc2l0ZV9mZW5j ZV9jdHg6IGNvbnRleHQgY29tcG9zaXRlIGZlbmNlICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUv dWFwaS9kcm0veGVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL3hlX2RybS5oCj4gaW5kZXggMDg5 NWU0ZDJhOTgxLi5kNzJlNDQ0MWNjODAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS94 ZV9kcm0uaAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0veGVfZHJtLmgKPiBAQCAtMTQwLDggKzE0 MCw3IEBAIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlIHsKPiDCoMKgwqDCoMKg wqDCoMKgICogS2VybmVsIG9ubHkgY2xhc3NlcyAobm90IGFjdHVhbCBoYXJkd2FyZSBlbmdpbmUg Y2xhc3MpLgo+IFVzZWQgZm9yCj4gwqDCoMKgwqDCoMKgwqDCoCAqIGNyZWF0aW5nIG9yZGVyZWQg cXVldWVzIG9mIFZNIGJpbmQgb3BlcmF0aW9ucy4KPiDCoMKgwqDCoMKgwqDCoMKgICovCj4gLSNk ZWZpbmUgRFJNX1hFX0VOR0lORV9DTEFTU19WTV9CSU5EX0FTWU5DwqDCoMKgwqDCoMKgNQo+IC0j ZGVmaW5lIERSTV9YRV9FTkdJTkVfQ0xBU1NfVk1fQklORF9TWU5DwqDCoMKgwqDCoMKgwqA2Cj4g KyNkZWZpbmUgRFJNX1hFX0VOR0lORV9DTEFTU19WTV9CSU5EwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgNQo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQGVuZ2luZV9jbGFzczogZW5naW5lIGNsYXNzIGlk ICovCj4gwqDCoMKgwqDCoMKgwqDCoF9fdTE2IGVuZ2luZV9jbGFzczsKPiDCoMKgwqDCoMKgwqDC oMKgLyoqIEBlbmdpbmVfaW5zdGFuY2U6IGVuZ2luZSBpbnN0YW5jZSBpZCAqLwo+IEBAIC02NjEs NyArNjYwLDYgQEAgc3RydWN0IGRybV94ZV92bV9jcmVhdGUgewo+IMKgwqDCoMKgwqDCoMKgwqAg KiBzdGlsbCBlbmFibGUgcmVjb3ZlcmFibGUgcGFnZWZhdWx0cyBpZiBzdXBwb3J0ZWQgYnkgdGhl Cj4gZGV2aWNlLgo+IMKgwqDCoMKgwqDCoMKgwqAgKi8KPiDCoCNkZWZpbmUgRFJNX1hFX1ZNX0NS RUFURV9GTEFHX0xSX01PREXCoMKgwqDCoMKgwqDCoMKgwqAgKDEgPDwgMSkKPiAtI2RlZmluZSBE Uk1fWEVfVk1fQ1JFQVRFX0ZMQUdfQVNZTkNfREVGQVVMVMKgwqDCoMKgKDEgPDwgMikKPiDCoMKg wqDCoMKgwqDCoMKgLyoKPiDCoMKgwqDCoMKgwqDCoMKgICogRFJNX1hFX1ZNX0NSRUFURV9GTEFH X0ZBVUxUX01PREUgcmVxdWlyZXMgYWxzbwo+IMKgwqDCoMKgwqDCoMKgwqAgKiBEUk1fWEVfVk1f Q1JFQVRFX0ZMQUdfTFJfTU9ERS4gSXQgYWxsb3dzIG1lbW9yeSB0byBiZQo+IGFsbG9jYXRlZAo+ IEBAIC02NjksNyArNjY3LDcgQEAgc3RydWN0IGRybV94ZV92bV9jcmVhdGUgewo+IMKgwqDCoMKg wqDCoMKgwqAgKiBUaGUgeGUgZHJpdmVyIGludGVybmFsbHkgdXNlcyByZWNvdmVyYWJsZSBwYWdl ZmF1bHRzIHRvCj4gaW1wbGVtZW50Cj4gwqDCoMKgwqDCoMKgwqDCoCAqIHRoaXMuCj4gwqDCoMKg wqDCoMKgwqDCoCAqLwo+IC0jZGVmaW5lIERSTV9YRV9WTV9DUkVBVEVfRkxBR19GQVVMVF9NT0RF wqDCoMKgwqDCoMKgwqAoMSA8PCAzKQo+ICsjZGVmaW5lIERSTV9YRV9WTV9DUkVBVEVfRkxBR19G QVVMVF9NT0RFwqDCoMKgwqDCoMKgwqAoMSA8PCAyKQo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQGZs YWdzOiBGbGFncyAqLwo+IMKgwqDCoMKgwqDCoMKgwqBfX3UzMiBmbGFnczsKPiDCoAo+IEBAIC03 NzcsMTIgKzc3NSwxMSBAQCBzdHJ1Y3QgZHJtX3hlX3ZtX2JpbmRfb3Agewo+IMKgwqDCoMKgwqDC oMKgwqBfX3UzMiBvcDsKPiDCoAo+IMKgI2RlZmluZSBEUk1fWEVfVk1fQklORF9GTEFHX1JFQURP TkxZwqDCoMKgKDEgPDwgMCkKPiAtI2RlZmluZSBEUk1fWEVfVk1fQklORF9GTEFHX0FTWU5DwqDC oMKgwqDCoMKgKDEgPDwgMSkKPiDCoMKgwqDCoMKgwqDCoMKgLyoKPiDCoMKgwqDCoMKgwqDCoMKg ICogVmFsaWQgb24gYSBmYXVsdGluZyBWTSBvbmx5LCBkbyB0aGUgTUFQIG9wZXJhdGlvbgo+IGlt bWVkaWF0ZWx5IHJhdGhlcgo+IMKgwqDCoMKgwqDCoMKgwqAgKiB0aGFuIGRlZmVycmluZyB0aGUg TUFQIHRvIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIuCj4gwqDCoMKgwqDCoMKgwqDCoCAqLwo+IC0j ZGVmaW5lIERSTV9YRV9WTV9CSU5EX0ZMQUdfSU1NRURJQVRFwqDCoCgxIDw8IDIpCj4gKyNkZWZp bmUgRFJNX1hFX1ZNX0JJTkRfRkxBR19JTU1FRElBVEXCoMKgKDEgPDwgMSkKPiDCoMKgwqDCoMKg wqDCoMKgLyoKPiDCoMKgwqDCoMKgwqDCoMKgICogV2hlbiB0aGUgTlVMTCBmbGFnIGlzIHNldCwg dGhlIHBhZ2UgdGFibGVzIGFyZSBzZXR1cCB3aXRoCj4gYSBzcGVjaWFsCj4gwqDCoMKgwqDCoMKg wqDCoCAqIGJpdCB3aGljaCBpbmRpY2F0ZXMgd3JpdGVzIGFyZSBkcm9wcGVkIGFuZCBhbGwgcmVh ZHMKPiByZXR1cm4gemVyby7CoCBJbgo+IEBAIC03OTAsNyArNzg3LDcgQEAgc3RydWN0IGRybV94 ZV92bV9iaW5kX29wIHsKPiDCoMKgwqDCoMKgwqDCoMKgICogb3BlcmF0aW9ucywgdGhlIEJPIGhh bmRsZSBNQlosIGFuZCB0aGUgQk8gb2Zmc2V0IE1CWi4gVGhpcwo+IGZsYWcgaXMKPiDCoMKgwqDC oMKgwqDCoMKgICogaW50ZW5kZWQgdG8gaW1wbGVtZW50IFZLIHNwYXJzZSBiaW5kaW5ncy4KPiDC oMKgwqDCoMKgwqDCoMKgICovCj4gLSNkZWZpbmUgRFJNX1hFX1ZNX0JJTkRfRkxBR19OVUxMwqDC oMKgwqDCoMKgwqAoMSA8PCAzKQo+ICsjZGVmaW5lIERSTV9YRV9WTV9CSU5EX0ZMQUdfTlVMTMKg wqDCoMKgwqDCoMKgKDEgPDwgMikKPiDCoMKgwqDCoMKgwqDCoMKgLyoqIEBmbGFnczogQmluZCBm bGFncyAqLwo+IMKgwqDCoMKgwqDCoMKgwqBfX3UzMiBmbGFnczsKPiDCoAo+IEBAIC04MDgsNiAr ODA1LDM1IEBAIHN0cnVjdCBkcm1feGVfdm1fYmluZF9vcCB7Cj4gwqDCoMKgwqDCoMKgwqDCoF9f dTY0IHJlc2VydmVkWzNdOwo+IMKgfTsKPiDCoAo+ICsvKioKPiArICogc3RydWN0IGRybV94ZV9z eW5jcyAtIEluIC8gb3V0IHN5bmNzIGZvciBJT0NUTHMuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX3hl X3N5bmNzIHsKPiArwqDCoMKgwqDCoMKgwqAvKiogQG51bV9zeW5jczogYW1vdW50IG9mIHN5bmNz IHRvIHdhaXQgb24gKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBudW1fc3luY3M7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoC8qCj4gK8KgwqDCoMKgwqDCoMKgICogQmxvY2sgaW4gSU9DVEwgdW50aWwg b3BlcmF0aW9uIGNvbXBsZXRlLCBudW1fc3luY3MgTUJaIGlmCj4gc2V0Lgo+ICvCoMKgwqDCoMKg wqDCoCAqLwo+ICsjZGVmaW5lIERSTV9YRV9TWU5DU19GTEFHX1dBSVRfRk9SX09QICgxIDw8IDAp Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBmbGFnczogU3luYyBmbGFncyAqLwo+ICvCoMKgwqDCoMKg wqDCoF9fdTMyIGZsYWdzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKioKPiArwqDCoMKgwqDCoMKg wqAgKiBAY29va2llOiBwb2ludGVyIHdoaWNoIGlzIHdyaXR0ZW4gd2l0aCBhbiBub24temVybyB2 YWx1ZQo+IGlmIElPQ1RMCj4gK8KgwqDCoMKgwqDCoMKgICogb3BlcmF0aW9uIGhhcyBiZWVuIGNv bW1pdHRlZCBidXQgdGhlIHdhaXQgZm9yIGNvbXBsZXRpb24KPiArwqDCoMKgwqDCoMKgwqAgKiAo RFJNX1hFX1NZTkNTX0ZMQUdfV0FJVF9GT1JfT1AgaXMgc2V0KSBpcyBpbnRlcnJ1cHRlZC4KPiBW YWx1ZSBvbmx5Cj4gK8KgwqDCoMKgwqDCoMKgICogdmFsaWQgd2hlbiBJT0NUTCByZXR1cm5zIC1F SU5UUiBvciAtRVJFU1RBUlRTWVMuCgpNQlogb24gaW5pdGlhbCBjYWxsLiBTaG91bGQgYmUgb3Bh cXVlIHRvIHVzZXItc3BhY2UuCgpDb3VsZCB3ZSBhZGQgdGhhdCB0aGUgcHJlZmVycmVkIG1ldGhv ZCBmb3IgcHJvZHVjdGlvbiBjb2RlIGlzIHRvIHVzZQphc3luYyB2bV9iaW5kcyBhbmQgaWYgbmVj ZXNzYXJ5IHdhaXQgb24gYW4gb3V0LWZlbmNlLCBwcmVmZXJyYWJseSB1c2VyLQpmZW5jZT8uCgoK PiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBjb29raWU7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoC8qKiBAc3luY3M6IHBvaW50ZXIgdG8gc3RydWN0IGRybV94ZV9zeW5j IGFycmF5ICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgc3luY3M7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgcmVz ZXJ2ZWRbMl07Cj4gK307Cj4gKwo+IMKgc3RydWN0IGRybV94ZV92bV9iaW5kIHsKPiDCoMKgwqDC oMKgwqDCoMKgLyoqIEBleHRlbnNpb25zOiBQb2ludGVyIHRvIHRoZSBmaXJzdCBleHRlbnNpb24g c3RydWN0LCBpZgo+IGFueSAqLwo+IMKgwqDCoMKgwqDCoMKgwqBfX3U2NCBleHRlbnNpb25zOwo+ IEBAIC04MzksMTQgKzg2NSw4IEBAIHN0cnVjdCBkcm1feGVfdm1fYmluZCB7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3U2NCB2ZWN0b3Jfb2ZfYmluZHM7Cj4gwqDCoMKgwqDC oMKgwqDCoH07Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAvKiogQHBhZDogTUJaICovCj4gLcKgwqDC oMKgwqDCoMKgX191MzIgcGFkMjsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgLyoqIEBudW1fc3luY3M6 IGFtb3VudCBvZiBzeW5jcyB0byB3YWl0IG9uICovCj4gLcKgwqDCoMKgwqDCoMKgX191MzIgbnVt X3N5bmNzOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqAvKiogQHN5bmNzOiBwb2ludGVyIHRvIHN0cnVj dCBkcm1feGVfc3luYyBhcnJheSAqLwo+IC3CoMKgwqDCoMKgwqDCoF9fdTY0IHN5bmNzOwo+ICvC oMKgwqDCoMKgwqDCoC8qKiBAc3luY3M6IHN5bmNzIGZvciBiaW5kICovCj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGRybV94ZV9zeW5jcyBzeW5jczsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiog QHJlc2VydmVkOiBSZXNlcnZlZCAqLwo+IMKgwqDCoMKgwqDCoMKgwqBfX3U2NCByZXNlcnZlZFsy XTsKPiBAQCAtOTc1LDE0ICs5OTUsMTQgQEAgc3RydWN0IGRybV94ZV9leGVjIHsKPiDCoMKgwqDC oMKgwqDCoMKgLyoqIEBleHRlbnNpb25zOiBQb2ludGVyIHRvIHRoZSBmaXJzdCBleHRlbnNpb24g c3RydWN0LCBpZgo+IGFueSAqLwo+IMKgwqDCoMKgwqDCoMKgwqBfX3U2NCBleHRlbnNpb25zOwo+ IMKgCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBwYWQ6IE1CWiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9f dTMyIHBhZDsKPiArCj4gwqDCoMKgwqDCoMKgwqDCoC8qKiBAZXhlY19xdWV1ZV9pZDogRXhlYyBx dWV1ZSBJRCBmb3IgdGhlIGJhdGNoIGJ1ZmZlciAqLwo+IMKgwqDCoMKgwqDCoMKgwqBfX3UzMiBl eGVjX3F1ZXVlX2lkOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgLyoqIEBudW1fc3luY3M6IEFtb3Vu dCBvZiBzdHJ1Y3QgZHJtX3hlX3N5bmMgaW4gYXJyYXkuICovCj4gLcKgwqDCoMKgwqDCoMKgX191 MzIgbnVtX3N5bmNzOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqAvKiogQHN5bmNzOiBQb2ludGVyIHRv IHN0cnVjdCBkcm1feGVfc3luYyBhcnJheS4gKi8KPiAtwqDCoMKgwqDCoMKgwqBfX3U2NCBzeW5j czsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHN5bmNzOiBzeW5jcyBmb3IgZXhlYyAqLwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBkcm1feGVfc3luY3Mgc3luY3M7Cj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgLyoqCj4gwqDCoMKgwqDCoMKgwqDCoCAqIEBhZGRyZXNzOiBhZGRyZXNzIG9mIGJhdGNoIGJ1 ZmZlciBpZiBudW1fYmF0Y2hfYnVmZmVyID09IDEKPiBvciBhbgo+IEBAIC05OTYsOCArMTAxNiw4 IEBAIHN0cnVjdCBkcm1feGVfZXhlYyB7Cj4gwqDCoMKgwqDCoMKgwqDCoCAqLwo+IMKgwqDCoMKg wqDCoMKgwqBfX3UxNiBudW1fYmF0Y2hfYnVmZmVyOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgLyoq IEBwYWQ6IE1CWiAqLwo+IC3CoMKgwqDCoMKgwqDCoF9fdTE2IHBhZFszXTsKPiArwqDCoMKgwqDC oMKgwqAvKiogQHBhZDI6IE1CWiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTE2IHBhZDJbM107Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgKi8KPiDCoMKgwqDC oMKgwqDCoMKgX191NjQgcmVzZXJ2ZWRbMl07Cgo=