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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5E330C38A2D for ; Mon, 24 Oct 2022 09:38:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230041AbiJXJiX (ORCPT ); Mon, 24 Oct 2022 05:38:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229501AbiJXJiV (ORCPT ); Mon, 24 Oct 2022 05:38:21 -0400 Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73B9D46626; Mon, 24 Oct 2022 02:38:17 -0700 (PDT) Received: by mail-ed1-x52c.google.com with SMTP id i21so7906708edj.10; Mon, 24 Oct 2022 02:38:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=6V6AbFZSLmTmqXpP40vHvxHzXRG/0jghbqgIWxtBxMY=; b=NyrsGLIh7qlfr+d2dl4mcQCSv4iyVKmq0fWV5+24FQumyO53Bxn+NNB6TVuDY0lvwK FK3xcAZKvrEU3zwHhiyl4NRhtl+TNtcpaV+kQGBILw5bebtKx7qoV5n4ln/KLm26uO1M pn9vbuIAJSMx06IR/NzEDCmwlvubZyelaERLceqYQ2of+iMheeR60k3m9fa2QBm13emg 8s4v0r42wxoxc5IzrTEtTYhS6lrru3qKwgo0SpABgfDGlMKOJxMhq1l8zEo3saJCIXd3 dbBPhh8RqlO+rpNbsHL1ekmQbLnLs1H35xPQy53bWHtsy68nzfeE3U8Xlg7H3FZnNh+u 12hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=6V6AbFZSLmTmqXpP40vHvxHzXRG/0jghbqgIWxtBxMY=; b=ssLG7DcO73zsbH/ZUu5yEB84ERgbHzMucCGEM/XwxkARCdKMOJ+0IqVqC3vNnYnq1p GdS0k6fNQK0Y7TCMgfJMM8QUJANcWIOHEhlJyHziuMbXkIYj007gvLbOLvIRiNt6hlVC XBFiuDky3RICh4uLe6ouYVZu0SKvLCcCZiYwhR3Lze/QV6EKXfTDr5uo9G0NlCmbjzfr Eypasc26C1JCfC/GE2a79dmaH7bVRNGt6MdvjSFDWgIAqdJuFmpNRFBiG4gwRNDUMq4j QmdWiuW7eHJUxxN2/DJ+YmdRjoV4C0T02FfPx/TE+m8po1FQ7fazGVny8uLzMRHbjlsM oRGA== X-Gm-Message-State: ACrzQf3Owa4DVYlYbejVJKG0UYcXTJDKlB4Rn9LTBxr9bjSJGrzleU2j H3tZKNDCKwWuFS1FTHq0a2M= X-Google-Smtp-Source: AMsMyM7T8UZtkwcTCGY3VZfCSa6Ms/e7ZhwJFEzUMhwloaF9JaD1Ky8s+WMk/Bjeui57GQtTg+DD8Q== X-Received: by 2002:a05:6402:1e88:b0:461:a513:f543 with SMTP id f8-20020a0564021e8800b00461a513f543mr6717500edf.183.1666604295282; Mon, 24 Oct 2022 02:38:15 -0700 (PDT) Received: from 192-168-0-182.rdsnet.ro ([188.24.15.51]) by smtp.gmail.com with ESMTPSA id f19-20020a056402195300b00459cd13fd34sm18298638edz.85.2022.10.24.02.38.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Oct 2022 02:38:14 -0700 (PDT) Message-ID: <2b376fa84c79b89354ef30405c36da4254adfd5e.camel@gmail.com> Subject: Re: [PATCH v10 2/2] iio: adc: ad4130: add AD4130 driver From: Cosmin Tanislav To: Jonathan Cameron Cc: Rob Herring , Linus Walleij , linux-iio@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Cosmin Tanislav , Andy Shevchenko Date: Mon, 24 Oct 2022 12:38:17 +0300 In-Reply-To: <20221023125303.59726e3a@jic23-huawei> References: <20221021104115.1812486-1-demonsingur@gmail.com> <20221021104115.1812486-3-demonsingur@gmail.com> <20221023125303.59726e3a@jic23-huawei> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.4 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org T24gU3VuLCAyMDIyLTEwLTIzIGF0IDEyOjUzICswMTAwLCBKb25hdGhhbiBDYW1lcm9uIHdyb3Rl Ogo+IE9uIEZyaSwgMjEgT2N0IDIwMjIgMTM6NDE6MTUgKzAzMDAKPiBDb3NtaW4gVGFuaXNsYXYg PGRlbW9uc2luZ3VyQGdtYWlsLmNvbT4gd3JvdGU6Cj4gCj4gPiBGcm9tOiBDb3NtaW4gVGFuaXNs YXYgPGNvc21pbi50YW5pc2xhdkBhbmFsb2cuY29tPgo+ID4gCj4gPiBBRDQxMzAtOCBpcyBhbiB1 bHRyYS1sb3cgcG93ZXIsIGhpZ2ggcHJlY2lzaW9uLCBtZWFzdXJlbWVudAo+ID4gc29sdXRpb24g Zm9yCj4gPiBsb3cgYmFuZHdpZHRoIGJhdHRlcnkgb3BlcmF0ZWQgYXBwbGljYXRpb25zLgo+ID4g Cj4gPiBUaGUgZnVsbHkgaW50ZWdyYXRlZCBBRkUgKEFuYWxvZyBGcm9udC1FbmQpIGluY2x1ZGVz IGEgbXVsdGlwbGV4ZXIKPiA+IGZvciB1cAo+ID4gdG8gMTYgc2luZ2xlLWVuZGVkIG9yIDggZGlm ZmVyZW50aWFsIGlucHV0cywgUEdBIChQcm9ncmFtbWFibGUgR2Fpbgo+ID4gQW1wbGlmaWVyKSwg MjQtYml0IFNpZ21hLURlbHRhIEFEQywgb24tY2hpcCByZWZlcmVuY2UgYW5kCj4gPiBvc2NpbGxh dG9yLAo+ID4gc2VsZWN0YWJsZSBmaWx0ZXIgb3B0aW9ucywgc21hcnQgc2VxdWVuY2VyLCBzZW5z b3IgYmlhc2luZyBhbmQKPiA+IGV4Y2l0YXRpb24KPiA+IG9wdGlvbnMsIGRpYWdub3N0aWNzLCBh bmQgYSBGSUZPIGJ1ZmZlci4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogQ29zbWluIFRhbmlzbGF2 IDxjb3NtaW4udGFuaXNsYXZAYW5hbG9nLmNvbT4KPiA+IFJldmlld2VkLWJ5OiBBbmR5IFNoZXZj aGVua28gPGFuZHkuc2hldmNoZW5rb0BnbWFpbC5jb20+Cj4gCj4gCj4gbWFrZSBXPTEgb24geDg2 XzY0Lgo+IAo+IMKgIERFU0NFTkQgb2JqdG9vbAo+IMKgIENBTEzCoMKgwqAgc2NyaXB0cy9jaGVj a3N5c2NhbGxzLnNoCj4gwqAgQ0MgW01dwqAgZHJpdmVycy9paW8vYWRjL2FkNDEzMC5vCj4gZHJp dmVycy9paW8vYWRjL2FkNDEzMC5jOjEzODo3OTogd2FybmluZzogaW5pdGlhbGl6ZWQgZmllbGQK PiBvdmVyd3JpdHRlbiBbLVdvdmVycmlkZS1pbml0XQo+IMKgIDEzOCB8wqDCoMKgwqDCoMKgwqDC oCBbQUQ0MTMwX0NPTkZJR19YX1JFRygwKSAuLi4KPiBBRDQxMzBfQ09ORklHX1hfUkVHKEFENDEz MF9NQVhfU0VUVVBTKV0gPSAyLAo+IMKgwqDCoMKgwqAKPiB8wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIF4KPiBkcml2ZXJzL2lpby9hZGMvYWQ0MTMwLmM6MTM4 Ojc5OiBub3RlOiAobmVhciBpbml0aWFsaXphdGlvbiBmb3IKPiDigJhhZDQxMzBfcmVnX3NpemVb MjVd4oCZKQo+IGRyaXZlcnMvaWlvL2FkYy9hZDQxMzAuYzoxMzk6Nzk6IHdhcm5pbmc6IGluaXRp YWxpemVkIGZpZWxkCj4gb3ZlcndyaXR0ZW4gWy1Xb3ZlcnJpZGUtaW5pdF0KPiDCoCAxMzkgfMKg wqDCoMKgwqDCoMKgwqAgW0FENDEzMF9GSUxURVJfWF9SRUcoMCkgLi4uCj4gQUQ0MTMwX0ZJTFRF Ul9YX1JFRyhBRDQxMzBfTUFYX1NFVFVQUyldID0gMywKPiDCoMKgwqDCoMKgCj4gfMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBeCj4gZHJpdmVycy9paW8vYWRj L2FkNDEzMC5jOjEzOTo3OTogbm90ZTogKG5lYXIgaW5pdGlhbGl6YXRpb24gZm9yCj4g4oCYYWQ0 MTMwX3JlZ19zaXplWzMzXeKAmSkKPiBkcml2ZXJzL2lpby9hZGMvYWQ0MTMwLmM6MTQwOjc5OiB3 YXJuaW5nOiBpbml0aWFsaXplZCBmaWVsZAo+IG92ZXJ3cml0dGVuIFstV292ZXJyaWRlLWluaXRd Cj4gwqAgMTQwIHzCoMKgwqDCoMKgwqDCoMKgIFtBRDQxMzBfT0ZGU0VUX1hfUkVHKDApIC4uLgo+ IEFENDEzMF9PRkZTRVRfWF9SRUcoQUQ0MTMwX01BWF9TRVRVUFMpXSA9IDMsCj4gwqDCoMKgwqDC oAo+IHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgXgo+IGRy aXZlcnMvaWlvL2FkYy9hZDQxMzAuYzoxNDA6Nzk6IG5vdGU6IChuZWFyIGluaXRpYWxpemF0aW9u IGZvcgo+IOKAmGFkNDEzMF9yZWdfc2l6ZVs0MV3igJkpCj4gZHJpdmVycy9paW8vYWRjL2FkNDEz MC5jOjE0MTo3NTogd2FybmluZzogaW5pdGlhbGl6ZWQgZmllbGQKPiBvdmVyd3JpdHRlbiBbLVdv dmVycmlkZS1pbml0XQo+IMKgIDE0MSB8wqDCoMKgwqDCoMKgwqDCoCBbQUQ0MTMwX0dBSU5fWF9S RUcoMCkgLi4uCj4gQUQ0MTMwX0dBSU5fWF9SRUcoQUQ0MTMwX01BWF9TRVRVUFMpXSA9IDMsCj4g wqDCoMKgwqDCoAo+IHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gwqDCoMKgwqDCoMKgIF4KPiBk cml2ZXJzL2lpby9hZGMvYWQ0MTMwLmM6MTQxOjc1OiBub3RlOiAobmVhciBpbml0aWFsaXphdGlv biBmb3IKPiDigJhhZDQxMzBfcmVnX3NpemVbNDld4oCZKQo+IGRyaXZlcnMvaWlvL2FkYy9hZDQx MzAuYzoxNDI6Mjk6IHdhcm5pbmc6IGluaXRpYWxpemVkIGZpZWxkCj4gb3ZlcndyaXR0ZW4gWy1X b3ZlcnJpZGUtaW5pdF0KPiDCoCAxNDIgfMKgwqDCoMKgwqDCoMKgwqAgW0FENDEzMF9NSVNDX1JF R10gPSAyLAo+IMKgwqDCoMKgwqAgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIF4KPiBkcml2ZXJzL2lpby9hZGMvYWQ0MTMwLmM6MTQyOjI5 OiBub3RlOiAobmVhciBpbml0aWFsaXphdGlvbiBmb3IKPiDigJhhZDQxMzBfcmVnX3NpemVbNTdd 4oCZKQo+IMKgIE1PRFBPU1QgTW9kdWxlLnN5bXZlcnMKPiAKPiBJIHRoaW5rIHRoYXQncyBhbiBv ZmYgYnkgb25lIGluIHRoYXQgeW91IHVzZWQgQUQ0MTMwX01BWF9TRVRVUFMgd2hlbgo+IGl0IHNo b3VsZCBiZQo+IEFENDEzMF9NQVhfU0VUVVBTIC0gMSBldGMuCj4gCj4gSSd2ZSBtYWRlIHRoYXQg Y2hhbmdlIHdoaWxzdCBhcHBseWluZy7CoCBTaG91dCBpZiBJIGdvdCB0aGUgZml4IHdyb25nIQo+ IAoKTG9va3MgZmluZS4gVGhpcyBpcyBhIGxlc3NvbiBmb3IgbXlzZWxmIHRvIHVzZSBfTlVNIGlu c3RlYWQgb2YgX01BWAppbiBjYXNlcyBsaWtlIHRoaXMuCgo+IFdpdGggdGhhdCBjaGFuZ2UsIHNl cmllcyBhcHBsaWVkIHRvIHRoZSB0b2dyZWcgYnJhbmNoIG9mIGlpby5naXQgYW5kCj4gcHVzaGVk IG91dCBhcyB0ZXN0aW5nIGZvcgo+IDAtZGF5IHRvIHRha2UgYSBsb29rIGFuZCBzZWUgaWYgaXQg Y2FuIGZpbmQgYW55dGhpbmcgZWxzZSB3ZSd2ZQo+IG1pc3NlZCEKPiAKPiBUaGFua3MsCj4gCj4g Sm9uYXRoYW4KPiAKPiA+IC0tLQo+ID4gwqAuLi4vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWlpby1h ZGMtYWQ0MTMwwqDCoMKgwqDCoCB8wqDCoCAzNiArCj4gPiDCoE1BSU5UQUlORVJTwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfMKgwqDCoCAyICsKPiA+IMKgZHJpdmVycy9paW8vYWRjL0tjb25maWfCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxNCArCj4gPiDCoGRyaXZlcnMv aWlvL2FkYy9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqDCoMKgIDEgKwo+ID4gwqBkcml2ZXJzL2lpby9hZGMvYWQ0MTMwLmPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAyMTAwCj4gPiArKysrKysrKysrKysrKysr Kwo+ID4gwqA1IGZpbGVzIGNoYW5nZWQsIDIxNTMgaW5zZXJ0aW9ucygrKQo+ID4gwqBjcmVhdGUg bW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtaWlvLWFkYy0K PiA+IGFkNDEzMAo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9paW8vYWRjL2FkNDEz MC5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2Zz LWJ1cy1paW8tYWRjLWFkNDEzMAo+ID4gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2Zz LWJ1cy1paW8tYWRjLWFkNDEzMAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAw MDAwMDAwMDAwMC4uZDk1NTU3NTFkMjFjCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9Eb2N1 bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1paW8tYWRjLWFkNDEzMAo+ID4gQEAgLTAs MCArMSwzNiBAQAo+ID4gK1doYXQ6wqDCoMKgwqDCoMKgwqDCoMKgwqAvc3lzL2J1cy9paW8vZGV2 aWNlcy9paW86ZGV2aWNlWC9pbl92b2x0YWdlLQo+ID4gdm9sdGFnZV9maWx0ZXJfbW9kZV9hdmFp bGFibGUKPiA+ICtLZXJuZWxWZXJzaW9uOsKgIDYuMgo+ID4gK0NvbnRhY3Q6wqDCoMKgwqDCoMKg wqBsaW51eC1paW9Admdlci5rZXJuZWwub3JnCj4gPiArRGVzY3JpcHRpb246Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUmVhZGluZyByZXR1cm5zIGEgbGlzdCB3aXRoIHRoZSBw b3NzaWJsZSBmaWx0ZXIKPiA+IG1vZGVzLgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCJzaW5jNCLCoMKgwqDCoMKgwqAgLSBTaW5jIDQuIEV4Y2VsbGVudCBub2lzZQo+ID4gcGVy Zm9ybWFuY2UuIExvbmcgMXN0Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb252ZXJzaW9uIHRpbWUuIE5vIG5hdHVyYWwg NTAvNjBIego+ID4gcmVqZWN0aW9uLgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCJzaW5jNCtzaW5jMSIgLSBTaW5jNCArIGF2ZXJhZ2luZyBieSA4LiBMb3cgMXN0Cj4gPiBjb252 ZXJzaW9uIHRpbWUuCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInNpbmMzIsKg wqDCoMKgwqDCoCAtIFNpbmMzLiBNb2RlcmF0ZSAxc3QgY29udmVyc2lvbgo+ID4gdGltZS4gR29v ZCBub2lzZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcGVyZm9ybWFuY2UuCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgInNpbmMzK3JlajYwIiAtIFNpbmMzICsgNjBIeiByZWplY3Rpb24uIEF0IGEKPiA+ IHNhbXBsaW5nIGZyZXF1ZW5jeQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2YgNTBIeiwgYWNoaWV2ZXMgc2ltdWx0YW5l b3VzIDUwSHoKPiA+IGFuZCA2MEh6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWplY3Rpb24uCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgInNpbmMzK3NpbmMxIiAtIFNpbmMzICsgYXZlcmFnaW5nIGJ5 IDguIExvdyAxc3QKPiA+IGNvbnZlcnNpb24gdGltZS4KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJlc3QgdXNlZCB3aXRo IGEgc2FtcGxpbmcgZnJlcXVlbmN5Cj4gPiBvZiBhdCBsZWFzdAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMjE2LjE5SHou Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInNpbmMzK3BmMSLCoMKgIC0gU2lu YzMgKyBQb3N0IEZpbHRlciAxLgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgNTNkQiByZWplY3Rpb24gQCA1MEh6LCA1OGRC Cj4gPiByZWplY3Rpb24gQCA2MEh6Lgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCJzaW5jMytwZjIiwqDCoCAtIFNpbmMzICsgUG9zdCBGaWx0ZXIgMi4KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDcwZEIg cmVqZWN0aW9uIEAgNTBIeiwgNzBkQgo+ID4gcmVqZWN0aW9uIEAgNjBIei4KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAic2luYzMrcGYzIsKgwqAgLSBTaW5jMyArIFBvc3QgRmls dGVyIDMuCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA5OWRCIHJlamVjdGlvbiBAIDUwSHosIDEwM2RCCj4gPiByZWplY3Rp b24gQCA2MEh6Lgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJzaW5jMytwZjQi wqDCoCAtIFNpbmMzICsgUG9zdCBGaWx0ZXIgNC4KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDEwM2RCIHJlamVjdGlvbiBA IDUwSHosIDEwOWRCCj4gPiByZWplY3Rpb24gQCA2MEh6Lgo+ID4gKwo+ID4gK1doYXQ6wqDCoMKg wqDCoMKgwqDCoMKgwqAvc3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlWC9pbl92b2x0YWdl WS0KPiA+IHZvbHRhZ2VaX2ZpbHRlcl9tb2RlCj4gPiArS2VybmVsVmVyc2lvbjrCoCA2LjIKPiA+ ICtDb250YWN0OsKgwqDCoMKgwqDCoMKgbGludXgtaWlvQHZnZXIua2VybmVsLm9yZwo+ID4gK0Rl c2NyaXB0aW9uOgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFNldCB0aGUgZmls dGVyIG1vZGUgb2YgdGhlIGRpZmZlcmVudGlhbCBjaGFubmVsLgo+ID4gV2hlbiB0aGUgZmlsdGVy Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbW9kZSBjaGFuZ2VzLCB0aGUgaW5f dm9sdGFnZVktCj4gPiB2b2x0YWdlWl9zYW1wbGluZ19mcmVxdWVuY3kgYW5kCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5fdm9sdGFnZVktdm9sdGFnZVpfc2FtcGxpbmdfZnJl cXVlbmN5X2F2YWlsYWJsZQo+ID4gYXR0cmlidXRlcwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1pZ2h0IGFsc28gY2hhbmdlIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgZmlsdGVy Cj4gPiBtb2RlLgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoElmIHRoZSBjdXJy ZW50IHNhbXBsaW5nIGZyZXF1ZW5jeSBpcyBvdXQgb2YgcmFuZ2UKPiA+IGZvciB0aGUgbmV3Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmlsdGVyIG1vZGUsIHRoZSBzYW1wbGlu ZyBmcmVxdWVuY3kgd2lsbCBiZSBjaGFuZ2VkCj4gPiB0byB0aGUKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjbG9zZXN0IHZhbGlkIG9uZS4KPiA+IGRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCj4gPiBpbmRleCAxZWEzOWU5ZWVhOTEuLjk3ZmQ4ODkxMWNh OCAxMDA2NDQKPiA+IC0tLSBhL01BSU5UQUlORVJTCj4gPiArKysgYi9NQUlOVEFJTkVSUwo+ID4g QEAgLTExMjIsNyArMTEyMiw5IEBAIE06wqDCoMKgwqDCoMKgwqDCoENvc21pbiBUYW5pc2xhdgo+ ID4gPGNvc21pbi50YW5pc2xhdkBhbmFsb2cuY29tPgo+ID4gwqBMOsKgwqDCoMKgwqBsaW51eC1p aW9Admdlci5rZXJuZWwub3JnCj4gPiDCoFM6wqDCoMKgwqDCoFN1cHBvcnRlZAo+ID4gwqBXOsKg wqDCoMKgwqBodHRwOi8vZXouYW5hbG9nLmNvbS9jb21tdW5pdHkvbGludXgtZGV2aWNlLWRyaXZl cnMKPiA+ICtGOsKgwqDCoMKgwqBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1p aW8tYWRjLWFkNDEzMAo+ID4gwqBGOsKgwqDCoMKgwqBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3MvaWlvL2FkYy9hZGksYWQ0MTMwLnlhbWwKPiA+ICtGOsKgwqDCoMKgwqBkcml2ZXJz L2lpby9hZGMvYWQ0MTMwLmMKPiA+IMKgCj4gPiDCoEFOQUxPRyBERVZJQ0VTIElOQyBBRDcxOTIg RFJJVkVSCj4gPiDCoE06wqDCoMKgwqDCoEFsZXhhbmRydSBUYWNoaWNpIDxhbGV4YW5kcnUudGFj aGljaUBhbmFsb2cuY29tPgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9LY29uZmln IGIvZHJpdmVycy9paW8vYWRjL0tjb25maWcKPiA+IGluZGV4IDUzODZkODYyZGVmOS4uOGQ3MTlm YmI2YWNjIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9paW8vYWRjL0tjb25maWcKPiA+ICsrKyBi L2RyaXZlcnMvaWlvL2FkYy9LY29uZmlnCj4gPiBAQCAtMjEsNiArMjEsMjAgQEAgY29uZmlnIEFE X1NJR01BX0RFTFRBCj4gPiDCoMKgwqDCoMKgwqDCoMKgc2VsZWN0IElJT19CVUZGRVIKPiA+IMKg wqDCoMKgwqDCoMKgwqBzZWxlY3QgSUlPX1RSSUdHRVJFRF9CVUZGRVIKPiA+IMKgCj4gPiArY29u ZmlnIEFENDEzMAo+ID4gK8KgwqDCoMKgwqDCoMKgdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2UgQUQ0 MTMwIEFEQyBEcml2ZXIiCj4gPiArwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIFNQSQo+ID4gK8Kg wqDCoMKgwqDCoMKgc2VsZWN0IElJT19CVUZGRVIKPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBJ SU9fS0ZJRk9fQlVGCj4gPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgUkVHTUFQX1NQSQo+ID4gK8Kg wqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBDT01NT05fQ0xLCj4gPiArwqDCoMKgwqDCoMKgwqBoZWxw Cj4gPiArwqDCoMKgwqDCoMKgwqDCoCBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3Ig QW5hbG9nIERldmljZXMgQUQ0MTMwLTgKPiA+IFNQSSBhbmFsb2cKPiA+ICvCoMKgwqDCoMKgwqDC oMKgIHRvIGRpZ2l0YWwgY29udmVydGVycyAoQURDKS4KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRo ZQo+ID4gbW9kdWxlIHdpbGwgYmUKPiA+ICvCoMKgwqDCoMKgwqDCoMKgIGNhbGxlZCBhZDQxMzAu Cj4gPiArCj4gPiDCoGNvbmZpZyBBRDcwOTFSNQo+ID4gwqDCoMKgwqDCoMKgwqDCoHRyaXN0YXRl ICJBbmFsb2cgRGV2aWNlcyBBRDcwOTFSNSBBREMgRHJpdmVyIgo+ID4gwqDCoMKgwqDCoMKgwqDC oGRlcGVuZHMgb24gSTJDCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL01ha2VmaWxl IGIvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCj4gPiBpbmRleCAxNTcxZTg5MTgyOGUuLjRlZjQx YTdkZmFjNiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvaWlvL2FkYy9NYWtlZmlsZQo+ID4gKysr IGIvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCj4gPiBAQCAtNiw2ICs2LDcgQEAKPiA+IMKgIyBX aGVuIGFkZGluZyBuZXcgZW50cmllcyBrZWVwIHRoZSBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRl cgo+ID4gwqBvYmotJChDT05GSUdfQUI4NTAwX0dQQURDKSArPSBhYjg1MDAtZ3BhZGMubwo+ID4g wqBvYmotJChDT05GSUdfQURfU0lHTUFfREVMVEEpICs9IGFkX3NpZ21hX2RlbHRhLm8KPiA+ICtv YmotJChDT05GSUdfQUQ0MTMwKSArPSBhZDQxMzAubwo+ID4gwqBvYmotJChDT05GSUdfQUQ3MDkx UjUpICs9IGFkNzA5MXI1Lm8gYWQ3MDkxci1iYXNlLm8KPiA+IMKgb2JqLSQoQ09ORklHX0FENzEy NCkgKz0gYWQ3MTI0Lm8KPiA+IMKgb2JqLSQoQ09ORklHX0FENzE5MikgKz0gYWQ3MTkyLm8KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvYWQ0MTMwLmMgYi9kcml2ZXJzL2lpby9hZGMv YWQ0MTMwLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAu LmM5ZTI3ZGMzYmE1Mwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9paW8vYWRj L2FkNDEzMC5jCj4gPiBAQCAtMCwwICsxLDIxMDAgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCsKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAyMiBBbmFs b2cgRGV2aWNlcywgSW5jLgo+ID4gKyAqIEF1dGhvcjogQ29zbWluIFRhbmlzbGF2IDxjb3NtaW4u dGFuaXNsYXZAYW5hbG9nLmNvbT4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgv Yml0ZmllbGQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2RyaXZl ci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvaXJxLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KPiA+ICsjaW5j bHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25z dW1lci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Cj4gPiArI2luY2x1ZGUgPGxp bnV4L3VuaXRzLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgo+ID4gKyNpbmNs dWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lpby9idWZm ZXIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9paW8va2ZpZm9fYnVmLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lpby9zeXNmcy5oPgo+ID4g Kwo+ID4gKyNkZWZpbmUgQUQ0MTMwX05BTUXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJhZDQxMzAiCj4gPiArCj4gPiArI2RlZmluZSBBRDQx MzBfQ09NTVNfUkVBRF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg2 KQo+ID4gKwo+ID4gKyNkZWZpbmUgQUQ0MTMwX1NUQVRVU19SRUfCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAKPiA+ICsKPiA+ICsjZGVmaW5lIEFENDEzMF9B RENfQ09OVFJPTF9SRUfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMQo+ID4g KyNkZWZpbmUgQUQ0MTMwX0FEQ19DT05UUk9MX0JJUE9MQVJfTUFTS8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgQklUKDE0KQo+ID4gKyNkZWZpbmUgQUQ0MTMwX0FEQ19DT05UUk9MX0lO VF9SRUZfVkFMX01BU0vCoMKgwqDCoEJJVCgxMykKPiA+ICsjZGVmaW5lIEFENDEzMF9JTlRfUkVG XzJfNVbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMjUwMDAwMAo+ID4g KyNkZWZpbmUgQUQ0MTMwX0lOVF9SRUZfMV8yNVbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDEyNTAwMDAKPiA+ICsjZGVmaW5lIEFENDEzMF9BRENfQ09OVFJPTF9DU0JfRU5f TUFTS8KgwqDCoMKgwqDCoMKgwqDCoEJJVCg5KQo+ID4gKyNkZWZpbmUgQUQ0MTMwX0FEQ19DT05U Uk9MX0lOVF9SRUZfRU5fTUFTS8KgwqDCoMKgwqBCSVQoOCkKPiA+ICsjZGVmaW5lIEFENDEzMF9B RENfQ09OVFJPTF9NT0RFX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSyg1LCAyKQo+ ID4gKyNkZWZpbmUgQUQ0MTMwX0FEQ19DT05UUk9MX01DTEtfU0VMX01BU0vCoMKgwqDCoMKgwqDC oEdFTk1BU0soMSwgMCkKPiA+ICsjZGVmaW5lIEFENDEzMF9NQ0xLX0ZSRVFfNzZfOEtIWsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDc2ODAwCj4gPiArI2RlZmluZSBBRDQxMzBfTUNMS19G UkVRXzE1M182S0hawqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDE1MzYwMAo+ID4gKwo+ID4g KyNkZWZpbmUgQUQ0MTMwX0RBVEFfUkVHwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDIKPiA+ICsKPiA+ICsjZGVmaW5lIEFE NDEzMF9JT19DT05UUk9MX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MDMKPiA+ICsjZGVmaW5lIEFENDEzMF9JT19DT05UUk9MX0lOVF9QSU5fU0VMX01BU0vCoMKgwqDC oMKgR0VOTUFTSyg5LCA4KQo+ID4gKyNkZWZpbmUgQUQ0MTMwX0lPX0NPTlRST0xfR1BJT19EQVRB X01BU0vCoMKgwqDCoMKgwqDCoEdFTk1BU0soNywgNCkKPiA+ICsjZGVmaW5lIEFENDEzMF9JT19D T05UUk9MX0dQSU9fQ1RSTF9NQVNLwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDMsIDApCj4gPiArCj4g PiArI2RlZmluZSBBRDQxMzBfVkJJQVNfUkVHwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4MDQKPiA+ICsKPiA+ICsjZGVmaW5lIEFENDEzMF9JRF9SRUfCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwNQo+ID4g Kwo+ID4gKyNkZWZpbmUgQUQ0MTMwX0VSUk9SX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDA2Cj4gPiArCj4gPiArI2RlZmluZSBBRDQxMzBfRVJST1Jf RU5fUkVHwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDcKPiA+ICsK PiA+ICsjZGVmaW5lIEFENDEzMF9NQ0xLX0NPVU5UX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDB4MDgKPiA+ICsKPiA+ICsjZGVmaW5lIEFENDEzMF9DSEFOTkVMX1hfUkVH KHgpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDB4MDkg Kwo+ID4gKHgpKQo+ID4gKyNkZWZpbmUgQUQ0MTMwX0NIQU5ORUxfRU5fTUFTS8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMjMpCj4gPiArI2RlZmluZSBBRDQxMzBfQ0hBTk5F TF9TRVRVUF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMjIsIDIwKQo+ ID4gKyNkZWZpbmUgQUQ0MTMwX0NIQU5ORUxfQUlOUF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgR0VOTUFTSygxNywgMTMpCj4gPiArI2RlZmluZSBBRDQxMzBfQ0hBTk5FTF9BSU5N X01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDEyLCA4KQo+ID4gKyNk ZWZpbmUgQUQ0MTMwX0NIQU5ORUxfSU9VVDFfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBHRU5NQVNLKDcsIDQpCj4gPiArI2RlZmluZSBBRDQxMzBfQ0hBTk5FTF9JT1VUMl9NQVNLwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMywgMCkKPiA+ICsKPiA+ICsjZGVmaW5l IEFENDEzMF9DT05GSUdfWF9SRUcoeCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg KDB4MTkgKyAoeCkpCj4gPiArI2RlZmluZSBBRDQxMzBfQ09ORklHX0lPVVQxX1ZBTF9NQVNLwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMTUsIDEzKQo+ID4gKyNkZWZpbmUgQUQ0MTMwX0NP TkZJR19JT1VUMl9WQUxfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDEyLCAxMCkK PiA+ICsjZGVmaW5lIEFENDEzMF9DT05GSUdfQlVSTk9VVF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBHRU5NQVNLKDksIDgpCj4gPiArI2RlZmluZSBBRDQxMzBfQ09ORklHX1JFRl9CVUZQ X01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNykKPiA+ICsjZGVmaW5lIEFENDEzMF9D T05GSUdfUkVGX0JVRk1fTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg2KQo+ID4gKyNk ZWZpbmUgQUQ0MTMwX0NPTkZJR19SRUZfU0VMX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oEdFTk1BU0soNSwgNCkKPiA+ICsjZGVmaW5lIEFENDEzMF9DT05GSUdfUEdBX01BU0vCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygzLCAxKQo+ID4gKwo+ID4gKyNkZWZp bmUgQUQ0MTMwX0ZJTFRFUl9YX1JFRyh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAoMHgyMSArICh4KSkKPiA+ICsjZGVmaW5lIEFENDEzMF9GSUxURVJfTU9ERV9NQVNLwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygxNSwKPiA+ IDEyKQo+ID4gKyNkZWZpbmUgQUQ0MTMwX0ZJTFRFUl9TRUxFQ1RfTUFTS8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBHRU5NQVNLKDEwLCAwKQo+ID4gKyNkZWZpbmUgQUQ0MTMwX0ZJTFRFUl9T RUxFQ1RfTUlOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMQo+ID4gKwo+ID4gKyNkZWZp bmUgQUQ0MTMwX09GRlNFVF9YX1JFRyh4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAoMHgyOSArICh4KSkKPiA+ICsKPiA+ICsjZGVmaW5lIEFENDEzMF9HQUlOX1hfUkVHKHgpwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgzMSArICh4KSkKPiA+ICsKPiA+ ICsjZGVmaW5lIEFENDEzMF9NSVNDX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDM5Cj4gPiArCj4gPiArI2RlZmluZSBB RDQxMzBfRklGT19DT05UUk9MX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDB4M2EKPiA+ICsjZGVmaW5lIEFENDEzMF9GSUZPX0NPTlRST0xfSEVBREVS X01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxOCkKPiA+ICsjZGVmaW5l IEFENDEzMF9GSUZPX0NPTlRST0xfTU9ERV9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNL KDE3LCAxNikKPiA+ICsjZGVmaW5lIEFENDEzMF9GSUZPX0NPTlRST0xfV01fSU5UX0VOX01BU0vC oMKgwqDCoMKgQklUKDkpCj4gPiArI2RlZmluZSBBRDQxMzBfRklGT19DT05UUk9MX1dNX01BU0vC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDcsIDApCj4gPiArI2RlZmluZSBBRDQxMzBf V0FURVJNQVJLXzI1NsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMAo+ID4g Kwo+ID4gKyNkZWZpbmUgQUQ0MTMwX0ZJRk9fU1RBVFVTX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDNiCj4gPiArCj4gPiArI2RlZmluZSBBRDQxMzBfRklGT19USFJFU0hP TERfUkVHwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4M2MKPiA+ICsKPiA+ICsjZGVmaW5l IEFENDEzMF9GSUZPX0RBVEFfUkVHwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDNkCj4gPiArI2RlZmluZSBBRDQxMzBfRklGT19TSVpFwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDI1Ngo+ID4gKyNkZWZpbmUgQUQ0MTMwX0ZJRk9fTUFY X1NBTVBMRV9TSVpFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMwo+ID4gKwo+ID4gKyNkZWZpbmUg QUQ0MTMwX01BWF9BTkFMT0dfUElOU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAx Ngo+ID4gKyNkZWZpbmUgQUQ0MTMwX01BWF9DSEFOTkVMU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAxNgo+ID4gKyNkZWZpbmUgQUQ0MTMwX01BWF9ESUZGX0lOUFVUU8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAzMAo+ID4gKyNkZWZpbmUgQUQ0MTMwX01B WF9HUElPU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA0Cj4g PiArI2RlZmluZSBBRDQxMzBfTUFYX09EUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMjQwMAo+ID4gKyNkZWZpbmUgQUQ0MTMwX01BWF9QR0HCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDgKPiA+ICsjZGVmaW5l IEFENDEzMF9NQVhfU0VUVVBTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqA4Cj4gPiArCj4gPiArI2RlZmluZSBBRDQxMzBfQUlOMl9QMcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyCj4gPiArI2RlZmluZSBBRDQxMzBf QUlOM19QMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgzCj4gPiArCj4gPiArI2RlZmluZSBBRDQxMzBfUkVTRVRfQlVGX1NJWkXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA4Cj4gPiArI2RlZmluZSBBRDQxMzBfUkVTRVRfU0xFRVBf VVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMTYwICogTUlDUk8gLwo+ID4g QUQ0MTMwX01DTEtfRlJFUV83Nl84S0haKQo+ID4gKwo+ID4gKyNkZWZpbmUgQUQ0MTMwX0lOVkFM SURfU0xPVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAtMQo+ID4gKwo+ ID4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWQ0MTMwX3JlZ19zaXplW10gPSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqBbQUQ0MTMwX1NUQVRVU19SRUddID0gMSwKPiA+ICvCoMKgwqDCoMKgwqDC oFtBRDQxMzBfQURDX0NPTlRST0xfUkVHXSA9IDIsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMw X0RBVEFfUkVHXSA9IDMsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0lPX0NPTlRST0xfUkVH XSA9IDIsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX1ZCSUFTX1JFR10gPSAyLAo+ID4gK8Kg wqDCoMKgwqDCoMKgW0FENDEzMF9JRF9SRUddID0gMSwKPiA+ICvCoMKgwqDCoMKgwqDCoFtBRDQx MzBfRVJST1JfUkVHXSA9IDIsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0VSUk9SX0VOX1JF R10gPSAyLAo+ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9NQ0xLX0NPVU5UX1JFR10gPSAxLAo+ ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9DSEFOTkVMX1hfUkVHKDApIC4uLgo+ID4gQUQ0MTMw X0NIQU5ORUxfWF9SRUcoQUQ0MTMwX01BWF9DSEFOTkVMUyldID0gMywKPiA+ICvCoMKgwqDCoMKg wqDCoFtBRDQxMzBfQ09ORklHX1hfUkVHKDApIC4uLgo+ID4gQUQ0MTMwX0NPTkZJR19YX1JFRyhB RDQxMzBfTUFYX1NFVFVQUyldID0gMiwKPiA+ICvCoMKgwqDCoMKgwqDCoFtBRDQxMzBfRklMVEVS X1hfUkVHKDApIC4uLgo+ID4gQUQ0MTMwX0ZJTFRFUl9YX1JFRyhBRDQxMzBfTUFYX1NFVFVQUyld ID0gMywKPiA+ICvCoMKgwqDCoMKgwqDCoFtBRDQxMzBfT0ZGU0VUX1hfUkVHKDApIC4uLgo+ID4g QUQ0MTMwX09GRlNFVF9YX1JFRyhBRDQxMzBfTUFYX1NFVFVQUyldID0gMywKPiA+ICvCoMKgwqDC oMKgwqDCoFtBRDQxMzBfR0FJTl9YX1JFRygwKSAuLi4KPiA+IEFENDEzMF9HQUlOX1hfUkVHKEFE NDEzMF9NQVhfU0VUVVBTKV0gPSAzLAo+ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9NSVNDX1JF R10gPSAyLAo+ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9GSUZPX0NPTlRST0xfUkVHXSA9IDMs Cj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0ZJRk9fU1RBVFVTX1JFR10gPSAxLAo+ID4gK8Kg wqDCoMKgwqDCoMKgW0FENDEzMF9GSUZPX1RIUkVTSE9MRF9SRUddID0gMywKPiA+ICvCoMKgwqDC oMKgwqDCoFtBRDQxMzBfRklGT19EQVRBX1JFR10gPSAzLAo+ID4gK307Cj4gPiArCj4gPiArZW51 bSBhZDQxMzBfaW50X3JlZl92YWwgewo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX0lOVF9SRUZf VkFMXzJfNVYsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfSU5UX1JFRl9WQUxfMV8yNVYsCj4g PiArfTsKPiA+ICsKPiA+ICtlbnVtIGFkNDEzMF9tY2xrX3NlbCB7Cj4gPiArwqDCoMKgwqDCoMKg wqBBRDQxMzBfTUNMS183Nl84S0haLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX01DTEtfNzZf OEtIWl9PVVQsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfTUNMS183Nl84S0haX0VYVCwKPiA+ ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9NQ0xLXzE1M182S0haX0VYVCwKPiA+ICt9Owo+ID4gKwo+ ID4gK2VudW0gYWQ0MTMwX2ludF9waW5fc2VsIHsKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9J TlRfUElOX0lOVCwKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9JTlRfUElOX0NMSywKPiA+ICvC oMKgwqDCoMKgwqDCoEFENDEzMF9JTlRfUElOX1AyLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMw X0lOVF9QSU5fRE9VVCwKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gYWQ0MTMwX2lvdXQgewo+ID4g K8KgwqDCoMKgwqDCoMKgQUQ0MTMwX0lPVVRfT0ZGLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMw X0lPVVRfMTAwMDBOQSwKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9JT1VUXzIwMDAwTkEsCj4g PiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfSU9VVF81MDAwME5BLAo+ID4gK8KgwqDCoMKgwqDCoMKg QUQ0MTMwX0lPVVRfMTAwMDAwTkEsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfSU9VVF8xNTAw MDBOQSwKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9JT1VUXzIwMDAwME5BLAo+ID4gK8KgwqDC oMKgwqDCoMKgQUQ0MTMwX0lPVVRfMTAwTkEsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfSU9V VF9NQVgKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gYWQ0MTMwX2J1cm5vdXQgewo+ID4gK8KgwqDC oMKgwqDCoMKgQUQ0MTMwX0JVUk5PVVRfT0ZGLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX0JV Uk5PVVRfNTAwTkEsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfQlVSTk9VVF8yMDAwTkEsCj4g PiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfQlVSTk9VVF80MDAwTkEsCj4gPiArwqDCoMKgwqDCoMKg wqBBRDQxMzBfQlVSTk9VVF9NQVgKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gYWQ0MTMwX3JlZl9z ZWwgewo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX1JFRl9SRUZJTjEsCj4gPiArwqDCoMKgwqDC oMKgwqBBRDQxMzBfUkVGX1JFRklOMiwKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9SRUZfUkVG T1VUX0FWU1MsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfUkVGX0FWRERfQVZTUywKPiA+ICvC oMKgwqDCoMKgwqDCoEFENDEzMF9SRUZfU0VMX01BWAo+ID4gK307Cj4gPiArCj4gPiArZW51bSBh ZDQxMzBfZmlmb19tb2RlIHsKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9GSUZPX01PREVfRElT QUJMRUQgPSAwYjAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX0ZJRk9fTU9ERV9XTSA9IDBi MDEsCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIGFkNDEzMF9tb2RlIHsKPiA+ICvCoMKgwqDCoMKg wqDCoEFENDEzMF9NT0RFX0NPTlRJTlVPVVMgPSAwYjAwMDAsCj4gPiArwqDCoMKgwqDCoMKgwqBB RDQxMzBfTU9ERV9JRExFID0gMGIwMTAwLAo+ID4gK307Cj4gPiArCj4gPiArZW51bSBhZDQxMzBf ZmlsdGVyX21vZGUgewo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX0ZJTFRFUl9TSU5DNCwKPiA+ ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9GSUxURVJfU0lOQzRfU0lOQzEsCj4gPiArwqDCoMKgwqDC oMKgwqBBRDQxMzBfRklMVEVSX1NJTkMzLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX0ZJTFRF Ul9TSU5DM19SRUo2MCwKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9GSUxURVJfU0lOQzNfU0lO QzEsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfRklMVEVSX1NJTkMzX1BGMSwKPiA+ICvCoMKg wqDCoMKgwqDCoEFENDEzMF9GSUxURVJfU0lOQzNfUEYyLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0 MTMwX0ZJTFRFUl9TSU5DM19QRjMsCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfRklMVEVSX1NJ TkMzX1BGNCwKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gYWQ0MTMwX3Bpbl9mdW5jdGlvbiB7Cj4g PiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfUElOX0ZOX05PTkUsCj4gPiArwqDCoMKgwqDCoMKgwqBB RDQxMzBfUElOX0ZOX1NQRUNJQUwgPSBCSVQoMCksCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBf UElOX0ZOX0RJRkYgPSBCSVQoMSksCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfUElOX0ZOX0VY Q0lUQVRJT04gPSBCSVQoMiksCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfUElOX0ZOX1ZCSUFT ID0gQklUKDMpLAo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGFkNDEzMF9zZXR1cF9pbmZvIHsK PiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpb3V0MF92YWw7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW91dDFfdmFsOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdW5zaWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJ1cm5vdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGdhOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5z aWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZzOwo+ID4g K8KgwqDCoMKgwqDCoMKgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJlZl9zZWw7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbnVtIGFkNDEz MF9maWx0ZXJfbW9kZcKgwqDCoMKgwqDCoMKgwqDCoGZpbHRlcl9tb2RlOwo+ID4gK8KgwqDCoMKg wqDCoMKgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmVmX2J1ZnA7Cj4gPiArwqDCoMKgwqDCoMKgwqBib29swqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWZfYnVmbTsKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0cnVjdCBhZDQxMzBfc2xvdF9pbmZvIHsKPiA+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBhZDQxMzBfc2V0dXBfaW5mb8KgwqDCoMKgwqDCoMKgwqBzZXR1cDsKPiA+ICvCoMKg wqDCoMKgwqDCoHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlbmFibGVkX2NoYW5uZWxzOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5uZWxzOwo+ID4gK307Cj4g PiArCj4gPiArc3RydWN0IGFkNDEzMF9jaGFuX2luZm8gewo+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGFkNDEzMF9zZXR1cF9pbmZvwqDCoMKgwqDCoMKgwqDCoHNldHVwOwo+ID4gK8KgwqDCoMKg wqDCoMKgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlvdXQwOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMywqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlvdXQxOwo+ID4gK8KgwqDC oMKgwqDCoMKgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHNsb3Q7Cj4gPiArwqDCoMKgwqDCoMKgwqBib29swqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmFibGVkOwo+ID4gK8Kg wqDCoMKgwqDCoMKgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaW5pdGlhbGl6ZWQ7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgYWQ0 MTMwX2ZpbHRlcl9jb25maWcgewo+ID4gK8KgwqDCoMKgwqDCoMKgZW51bSBhZDQxMzBfZmlsdGVy X21vZGXCoMKgwqDCoMKgwqDCoMKgwqBmaWx0ZXJfbW9kZTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVu c2lnbmVkIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvZHJfZGl2 Owo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGZzX21heDsKPiA+ICvCoMKgwqDCoMKgwqDCoGVudW0gaWlvX2F2YWls YWJsZV90eXBlwqDCoMKgwqDCoMKgwqDCoMKgc2FtcF9mcmVxX2F2YWlsX3R5cGU7Cj4gPiArwqDC oMKgwqDCoMKgwqBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc2FtcF9mcmVxX2F2YWlsX2xlbjsKPiA+ICvCoMKgwqDCoMKgwqDCoGlu dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzYW1wX2ZyZXFfYXZhaWxbM11bMl07Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgYWQ0MTMw X3N0YXRlIHsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdtYXDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpyZWdtYXA7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg c3BpX2RldmljZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpzcGk7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgY2xrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAqbWNsazsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRh wqDCoMKgwqDCoMKgcmVndWxhdG9yc1s0XTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpcnFfdHJp Z2dlcjsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnZfaXJxX3RyaWdnZXI7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogU3luY2hyb25pemUgYWNjZXNz IHRvIG1lbWJlcnMgdGhlIG9mIGRyaXZlciBzdGF0ZSwgYW5kCj4gPiBlbnN1cmUKPiA+ICvCoMKg wqDCoMKgwqDCoCAqIGF0b21pY2l0eSBvZiBjb25zZWN1dGl2ZSByZWdtYXAgb3BlcmF0aW9ucy4K PiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG11dGV4wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxvY2s7Cj4gPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgY29tcGxldGlvbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXBs ZXRpb247Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaWlvX2NoYW5fc3BlY8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5zW0FENDEzMF9NQVhfQ0hBTk5FTFNdOwo+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0Cj4gPiBhZDQxMzBfY2hhbl9pbmZvwqDCoMKgwqDCoMKgwqDCoMKgY2hh bnNfaW5mb1tBRDQxMzBfTUFYX0NIQU5ORUxTXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdAo+ ID4gYWQ0MTMwX3Nsb3RfaW5mb8KgwqDCoMKgwqDCoMKgwqDCoHNsb3RzX2luZm9bQUQ0MTMwX01B WF9TRVRVUFNdOwo+ID4gK8KgwqDCoMKgwqDCoMKgZW51bQo+ID4gYWQ0MTMwX3Bpbl9mdW5jdGlv bsKgwqDCoMKgwqDCoMKgwqBwaW5zX2ZuW0FENDEzMF9NQVhfQU5BTE9HX1BJTlNdOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZiaWFzX3BpbnNbQUQ0MTMwX01BWF9BTkFMTwo+ID4gR19QSU5TXTsK PiA+ICvCoMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBudW1fdmJpYXNfcGluczsKPiA+ICvCoMKgwqDCoMKgwqDC oGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzY2FsZV90YmxzW0FENDEzMF9SRUZfU0VMX00KPiA+IEFYXVtBRDQxMzBfTUFYX1BHQV1b Ml07Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZ3Bpb19jaGlwwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnYzsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjbGtfaHfCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludF9jbGtfaHc7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp bnRfcGluX3NlbDsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGludF9yZWZfdXY7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzLCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtY2xrX3NlbDsKPiA+ICvCoMKg wqDCoMKgwqDCoGJvb2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50 X3JlZl9lbjsKPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYmlwb2xhcjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVk IGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG51bV9lbmFibGVkX2NoYW5uZWxzOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdW5zaWduZWQgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWZmZWN0aXZl X3dhdGVybWFyazsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHdhdGVybWFyazsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBzcGlf bWVzc2FnZcKgwqDCoMKgwqDCoGZpZm9fbXNnOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHNw aV90cmFuc2ZlcsKgwqDCoMKgwqBmaWZvX3hmZXJbMl07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogRE1BICh0aHVzIGNhY2hlIGNvaGVyZW5jeSBtYWlu dGVuYW5jZSkgcmVxdWlyZXMgYW55Cj4gPiB0cmFuc2Zlcgo+ID4gK8KgwqDCoMKgwqDCoMKgICog YnVmZmVycyB0byBsaXZlIGluIHRoZWlyIG93biBjYWNoZSBsaW5lcy4gQXMgdGhlIHVzZSBvZgo+ ID4gdGhlc2UKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIGJ1ZmZlcnMgaXMgc3luY2hyb25vdXMsIGFs bCBvZiB0aGUgYnVmZmVycyB1c2VkIGZvciBETUEKPiA+IGluIHRoaXMKPiA+ICvCoMKgwqDCoMKg wqDCoCAqIGRyaXZlciBtYXkgc2hhcmUgYSBjYWNoZSBsaW5lLgo+ID4gK8KgwqDCoMKgwqDCoMKg ICovCj4gPiArwqDCoMKgwqDCoMKgwqB1OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmVzZXRfYnVmW0FENDEzMF9SRVNFVF9CVUZfU0laRV0KPiA+IF9fYWxpZ25l ZChJSU9fRE1BX01JTkFMSUdOKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdfd3JpdGVfdHhfYnVmWzRdOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJlZ19yZWFkX3R4X2J1ZlsxXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdfcmVhZF9yeF9idWZbM107Cj4gPiArwqDC oMKgwqDCoMKgwqB1OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Zmlmb190eF9idWZbMl07Cj4gPiArwqDCoMKgwqDCoMKgwqB1OMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmlmb19yeF9idWZbQUQ0MTMwX0ZJRk9fU0laRSAqCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiBBRDQxMzBfRklGT19NQVhfU0FNUExF X1NJWkVdOwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhZDQx MzBfaW50X3Bpbl9uYW1lc1tdID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9JTlRfUElO X0lOVF0gPSAiaW50IiwKPiA+ICvCoMKgwqDCoMKgwqDCoFtBRDQxMzBfSU5UX1BJTl9DTEtdID0g ImNsayIsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0lOVF9QSU5fUDJdID0gInAyIiwKPiA+ ICvCoMKgwqDCoMKgwqDCoFtBRDQxMzBfSU5UX1BJTl9ET1VUXSA9ICJkb3V0IiwKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQKPiA+IGFkNDEzMF9pb3V0X2N1cnJl bnRfbmFfdGJsW0FENDEzMF9JT1VUX01BWF0gPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMw X0lPVVRfT0ZGXSA9IDAsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0lPVVRfMTAwTkFdID0g MTAwLAo+ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9JT1VUXzEwMDAwTkFdID0gMTAwMDAsCj4g PiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0lPVVRfMjAwMDBOQV0gPSAyMDAwMCwKPiA+ICvCoMKg wqDCoMKgwqDCoFtBRDQxMzBfSU9VVF81MDAwME5BXSA9IDUwMDAwLAo+ID4gK8KgwqDCoMKgwqDC oMKgW0FENDEzMF9JT1VUXzEwMDAwME5BXSA9IDEwMDAwMCwKPiA+ICvCoMKgwqDCoMKgwqDCoFtB RDQxMzBfSU9VVF8xNTAwMDBOQV0gPSAxNTAwMDAsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMw X0lPVVRfMjAwMDAwTkFdID0gMjAwMDAwLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGludAo+ID4gYWQ0MTMwX2J1cm5vdXRfY3VycmVudF9uYV90YmxbQUQ0MTMwX0JV Uk5PVVRfTUFYXSA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoFtBRDQxMzBfQlVSTk9VVF9PRkZdID0g MCwKPiA+ICvCoMKgwqDCoMKgwqDCoFtBRDQxMzBfQlVSTk9VVF81MDBOQV0gPSA1MDAsCj4gPiAr wqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0JVUk5PVVRfMjAwME5BXSA9IDIwMDAsCj4gPiArwqDCoMKg wqDCoMKgwqBbQUQ0MTMwX0JVUk5PVVRfNDAwME5BXSA9IDQwMDAsCj4gPiArfTsKPiA+ICsKPiA+ ICsjZGVmaW5lIEFENDEzMF9WQVJJQUJMRV9PRFJfQ09ORklHKF9maWx0ZXJfbW9kZSwgX29kcl9k aXYsCj4gPiBfZnNfbWF4KcKgwqDCoMKgXAo+ID4gK3vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiDCoMKg wqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5maWx0ZXJfbW9kZSA9 Cj4gPiAoX2ZpbHRlcl9tb2RlKSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5vZHJf ZGl2ID0KPiA+IChfb2RyX2RpdikswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLmZzX21heCA9Cj4gPiAoX2ZzX21heCkswqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zYW1wX2ZyZXFfYXZhaWxfdHlwZSA9Cj4g PiBJSU9fQVZBSUxfUkFOR0UswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnNhbXBfZnJlcV9hdmFpbCA9Cj4gPiB7wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB7IEFENDEzMF9NQVhfT0RSLCAoX29kcl9kaXYpICogKF9mc19tYXgpCj4gPiB9LMKg wqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHsgQUQ0MTMwX01BWF9PRFIsIChfb2RyX2RpdikgKiAoX2ZzX21heCkKPiA+IH0swqDCoMKg wqDCoFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg eyBBRDQxMzBfTUFYX09EUiwgKF9vZHJfZGl2KQo+ID4gfSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0swqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IMKgwqDCoMKgwqBcCj4gPiAr fQo+ID4gKwo+ID4gKyNkZWZpbmUgQUQ0MTMwX0ZJWEVEX09EUl9DT05GSUcoX2ZpbHRlcl9tb2Rl LAo+ID4gX29kcl9kaXYpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgXAo+ID4gK3vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiDCoMKgwqDCoMKgXAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5maWx0ZXJfbW9kZSA9Cj4gPiAoX2ZpbHRlcl9tb2Rl KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5vZHJfZGl2ID0KPiA+IChfb2RyX2Rp dikswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZzX21h eCA9Cj4gPiBBRDQxMzBfRklMVEVSX1NFTEVDVF9NSU4swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5z YW1wX2ZyZXFfYXZhaWxfdHlwZSA9Cj4gPiBJSU9fQVZBSUxfTElTVCzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5z YW1wX2ZyZXFfYXZhaWxfbGVuID0KPiA+IDEswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLnNhbXBfZnJlcV9hdmFpbCA9Cj4gPiB7wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7IEFENDEzMF9N QVhfT0RSLCAoX29kcl9kaXYpCj4gPiB9LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gwqDCoMKgwqDCoFwKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhZDQxMzBfZmlsdGVyX2NvbmZpZyBhZDQxMzBfZmlsdGVy X2NvbmZpZ3NbXSA9Cj4gPiB7Cj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfVkFSSUFCTEVfT0RS X0NPTkZJRyhBRDQxMzBfRklMVEVSX1NJTkM0LMKgwqDCoMKgwqDCoCAxLMKgCj4gPiAxMCksCj4g PiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfVkFSSUFCTEVfT0RSX0NPTkZJRyhBRDQxMzBfRklMVEVS X1NJTkM0X1NJTkMxLCAxMSwKPiA+IDEwKSwKPiA+ICvCoMKgwqDCoMKgwqDCoEFENDEzMF9WQVJJ QUJMRV9PRFJfQ09ORklHKEFENDEzMF9GSUxURVJfU0lOQzMswqDCoMKgwqDCoMKgIDEswqAKPiA+ IDIwNDcpLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX1ZBUklBQkxFX09EUl9DT05GSUcoQUQ0 MTMwX0ZJTFRFUl9TSU5DM19SRUo2MCwgMSzCoAo+ID4gMjA0NyksCj4gPiArwqDCoMKgwqDCoMKg wqBBRDQxMzBfVkFSSUFCTEVfT0RSX0NPTkZJRyhBRDQxMzBfRklMVEVSX1NJTkMzX1NJTkMxLCAx MCwKPiA+IDIwNDcpLAo+ID4gK8KgwqDCoMKgwqDCoMKgQUQ0MTMwX0ZJWEVEX09EUl9DT05GSUco QUQ0MTMwX0ZJTFRFUl9TSU5DM19QRjEswqDCoMKgwqDCoCA5MiksCj4gPiArwqDCoMKgwqDCoMKg wqBBRDQxMzBfRklYRURfT0RSX0NPTkZJRyhBRDQxMzBfRklMVEVSX1NJTkMzX1BGMizCoMKgwqDC oMKgIDEwMCksCj4gPiArwqDCoMKgwqDCoMKgwqBBRDQxMzBfRklYRURfT0RSX0NPTkZJRyhBRDQx MzBfRklMVEVSX1NJTkMzX1BGMyzCoMKgwqDCoMKgIDEyNCksCj4gPiArwqDCoMKgwqDCoMKgwqBB RDQxMzBfRklYRURfT0RSX0NPTkZJRyhBRDQxMzBfRklMVEVSX1NJTkMzX1BGNCzCoMKgwqDCoMKg IDE0OCksCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFkNDEz MF9maWx0ZXJfbW9kZXNfc3RyW10gPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0ZJTFRF Ul9TSU5DNF0gPSAic2luYzQiLAo+ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9GSUxURVJfU0lO QzRfU0lOQzFdID0gInNpbmM0K3NpbmMxIiwKPiA+ICvCoMKgwqDCoMKgwqDCoFtBRDQxMzBfRklM VEVSX1NJTkMzXSA9ICJzaW5jMyIsCj4gPiArwqDCoMKgwqDCoMKgwqBbQUQ0MTMwX0ZJTFRFUl9T SU5DM19SRUo2MF0gPSAic2luYzMrcmVqNjAiLAo+ID4gK8KgwqDCoMKgwqDCoMKgW0FENDEzMF9G SUxURVJfU0lOQzNfU0lOQzFdID0gInNpbmMzK3NpbmMxIiwKPiA+ICvCoMKgwqDCoMKgwqDCoFtB RDQxMzBfRklMVEVSX1NJTkMzX1BGMV0gPSAic2luYzMrcGYxIiwKPiA+ICvCoMKgwqDCoMKgwqDC oFtBRDQxMzBfRklMVEVSX1NJTkMzX1BGMl0gPSAic2luYzMrcGYyIiwKPiA+ICvCoMKgwqDCoMKg wqDCoFtBRDQxMzBfRklMVEVSX1NJTkMzX1BGM10gPSAic2luYzMrcGYzIiwKPiA+ICvCoMKgwqDC oMKgwqDCoFtBRDQxMzBfRklMVEVSX1NJTkMzX1BGNF0gPSAic2luYzMrcGY0IiwKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX2dldF9yZWdfc2l6ZShzdHJ1Y3QgYWQ0MTMwX3N0 YXRlICpzdCwgdW5zaWduZWQKPiA+IGludCByZWcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgKnNpemUp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlZyA+PSBBUlJBWV9TSVpFKGFkNDEzMF9y ZWdfc2l6ZSkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5W QUw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAqc2l6ZSA9IGFkNDEzMF9yZWdfc2l6ZVtyZWdd Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB1bnNpZ25lZCBpbnQgYWQ0MTMwX2RhdGFfcmVnX3NpemUoc3RydWN0IGFkNDEzMF9zdGF0 ZSAqc3QpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGRhdGFfcmVnX3Np emU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg cmV0ID0gYWQ0MTMwX2dldF9yZWdfc2l6ZShzdCwgQUQ0MTMwX0RBVEFfUkVHLAo+ID4gJmRhdGFf cmVnX3NpemUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVy biBkYXRhX3JlZ19zaXplOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGFk NDEzMF9yZXNvbHV0aW9uKHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0KQo+ID4gK3sKPiA+ICvCoMKg wqDCoMKgwqDCoHJldHVybiBhZDQxMzBfZGF0YV9yZWdfc2l6ZShzdCkgKiBCSVRTX1BFUl9CWVRF Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9yZWdfd3JpdGUodm9pZCAqY29u dGV4dCwgdW5zaWduZWQgaW50IHJlZywKPiA+IHVuc2lnbmVkIGludCB2YWwpCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBjb250ZXh0Owo+ID4gK8Kg wqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHNpemU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0 Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX2dldF9yZWdfc2l6ZShzdCwg cmVnLCAmc2l6ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBz dC0+cmVnX3dyaXRlX3R4X2J1ZlswXSA9IHJlZzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHN3 aXRjaCAoc2l6ZSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSAzOgo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHB1dF91bmFsaWduZWRfYmUyNCh2YWwsICZzdC0+cmVnX3dyaXRl X3R4X2J1ZlsxXSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4g PiArwqDCoMKgwqDCoMKgwqBjYXNlIDI6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcHV0X3VuYWxpZ25lZF9iZTE2KHZhbCwgJnN0LT5yZWdfd3JpdGVfdHhfYnVmWzFdKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKgwqDCoMKgwqDC oGNhc2UgMToKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdC0+cmVnX3dyaXRl X3R4X2J1ZlsxXSA9IHZhbDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsKPiA+ICvCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gc3BpX3dyaXRlKHN0LT5zcGksIHN0LT5yZWdfd3JpdGVfdHhf YnVmLCBzaXplICsgMSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX3JlZ19y ZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCj4gPiB1bnNpZ25lZCBpbnQgKnZh bCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGNv bnRleHQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbXSA9IHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC50eF9idWYgPSBzdC0+cmVnX3JlYWRfdHhfYnVm LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubGVu ID0gc2l6ZW9mKHN0LT5yZWdfcmVhZF90eF9idWYpLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnhfYnVmID0gc3Qt PnJlZ19yZWFkX3J4X2J1ZiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+ ID4gK8KgwqDCoMKgwqDCoMKgfTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBzaXpl Owo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IGFkNDEzMF9nZXRfcmVnX3NpemUoc3QsIHJlZywgJnNpemUpOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0 Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPnJlZ19yZWFkX3R4X2J1ZlswXSA9IEFENDEz MF9DT01NU19SRUFEX01BU0sgfCByZWc7Cj4gPiArwqDCoMKgwqDCoMKgwqB0WzFdLmxlbiA9IHNp emU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBzcGlfc3luY190cmFuc2ZlcihzdC0+ c3BpLCB0LCBBUlJBWV9TSVpFKHQpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoHN3aXRjaCAoc2l6ZSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSAzOgo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2YWwgPSBnZXRfdW5hbGlnbmVkX2JlMjQo c3QtPnJlZ19yZWFkX3J4X2J1Zik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg YnJlYWs7Cj4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIDI6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKnZhbCA9IGdldF91bmFsaWduZWRfYmUxNihzdC0+cmVnX3JlYWRfcnhfYnVm KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKgwqDC oMKgwqDCoGNhc2UgMToKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqdmFsID0g c3QtPnJlZ19yZWFkX3J4X2J1ZlswXTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBicmVhazsKPiA+ICvCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFkNDEzMF9yZWdtYXBfY29uZmlnID0gewo+ID4gK8Kg wqDCoMKgwqDCoMKgLnJlZ19yZWFkID0gYWQ0MTMwX3JlZ19yZWFkLAo+ID4gK8KgwqDCoMKgwqDC oMKgLnJlZ193cml0ZSA9IGFkNDEzMF9yZWdfd3JpdGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGFkNDEzMF9ncGlvX2luaXRfdmFsaWRfbWFzayhzdHJ1Y3QgZ3Bpb19jaGlwICpnYywK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nICp2YWxpZF9tYXNrLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBuZ3Bpb3MpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7Cj4g PiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgaTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oC8qCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBPdXRwdXQtb25seSBHUElPIGZ1bmN0aW9uYWxpdHkg aXMgYXZhaWxhYmxlIG9uIHBpbnMgQUlOMgo+ID4gdGhyb3VnaAo+ID4gK8KgwqDCoMKgwqDCoMKg ICogQUlONS4gSWYgdGhlc2UgcGlucyBhcmUgdXNlZCBmb3IgYW55dGhpbmcgZWxzZSwgZG8gbm90 Cj4gPiBleHBvc2UgdGhlbS4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDC oMKgZm9yIChpID0gMDsgaSA8IG5ncGlvczsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHBpbiA9IGkgKyBBRDQxMzBfQUlOMl9QMTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIHZhbGlkID0gc3QtPnBpbnNfZm5bcGlu XSA9PQo+ID4gQUQ0MTMwX1BJTl9GTl9OT05FOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoF9fYXNzaWduX2JpdChpLCB2YWxpZF9tYXNrLCB2YWxpZCk7Cj4gPiArwqDC oMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfZ3Bpb19nZXRfZGlyZWN0aW9uKHN0cnVjdCBncGlv X2NoaXAgKmdjLAo+ID4gdW5zaWduZWQgaW50IG9mZnNldCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gR1BJT19MSU5FX0RJUkVDVElPTl9PVVQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIGFkNDEzMF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQg aW50Cj4gPiBvZmZzZXQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbnQgdmFsdWUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7Cj4gPiArwqDCoMKg wqDCoMKgwqB1bnNpZ25lZCBpbnQgbWFzayA9Cj4gPiBGSUVMRF9QUkVQKEFENDEzMF9JT19DT05U Uk9MX0dQSU9fREFUQV9NQVNLLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVChvZmZzZXQpKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlZ21hcF91cGRhdGVfYml0cyhzdC0+cmVnbWFwLCBB RDQxMzBfSU9fQ09OVFJPTF9SRUcsIG1hc2ssCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsdWUgPyBtYXNrIDogMCk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX3NldF9tb2RlKHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0 LCBlbnVtCj4gPiBhZDQxMzBfbW9kZSBtb2RlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiByZWdtYXBfdXBkYXRlX2JpdHMoc3QtPnJlZ21hcCwKPiA+IEFENDEzMF9BRENfQ09OVFJP TF9SRUcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBBRDQxMzBfQURDX0NPTlRST0xfTU9ERV9NQVNLLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAKPiA+IEZJRUxEX1BSRVAoQUQ0MTMwX0FEQ19DT05UUk9MX01PREVfTUFTSywgbW9kZSkp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9zZXRfd2F0ZXJtYXJrX2ludGVy cnVwdF9lbihzdHJ1Y3QgYWQ0MTMwX3N0YXRlCj4gPiAqc3QsIGJvb2wgZW4pCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhzdC0+cmVnbWFwLAo+ID4g QUQ0MTMwX0ZJRk9fQ09OVFJPTF9SRUcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gQUQ0MTMwX0ZJRk9fQ09O VFJPTF9XTV9JTlRfRU5fTUFTSywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiBGSUVMRF9QUkVQKEFENDEzMF9G SUZPX0NPTlRST0xfV01fSU5UX0VOX01BU0ssIGVuKSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB1bnNpZ25lZCBpbnQgYWQ0MTMwX3dhdGVybWFya19yZWdfdmFsKHVuc2lnbmVkIGludCB2YWwp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHZhbCA9PSBBRDQxMzBfRklGT19TSVpFKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IEFENDEzMF9XQVRFUk1BUktf MjU2Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHZhbDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBhZDQxMzBfc2V0X2ZpZm9fbW9kZShzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpz dCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGVudW0gYWQ0MTMwX2ZpZm9fbW9kZSBtb2RlKQo+ID4gK3sKPiA+ICvCoMKg wqDCoMKgwqDCoHJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoc3QtPnJlZ21hcCwKPiA+IEFENDEz MF9GSUZPX0NPTlRST0xfUkVHLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQUQ0MTMwX0ZJRk9fQ09OVFJPTF9NT0RF X01BU0ssCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gRklFTERfUFJFUChBRDQxMzBfRklGT19DT05UUk9MX01P REVfTUFTSywgbW9kZSkpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhZDQxMzBfcHVz aF9maWZvX2RhdGEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKPiA+ICt7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4g PiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgZGF0YV9yZWdfc2l6ZSA9IGFkNDEzMF9kYXRh X3JlZ19zaXplKHN0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCB0cmFuc2Zlcl9s ZW4gPSBzdC0+ZWZmZWN0aXZlX3dhdGVybWFyayAqCj4gPiBkYXRhX3JlZ19zaXplOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHNldF9zaXplID0gc3QtPm51bV9lbmFibGVkX2NoYW5u ZWxzICoKPiA+IGRhdGFfcmVnX3NpemU7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQg aTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBz dC0+Zmlmb190eF9idWZbMV0gPSBhZDQxMzBfd2F0ZXJtYXJrX3JlZ192YWwoc3QtCj4gPiA+ZWZm ZWN0aXZlX3dhdGVybWFyayk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdC0+Zmlmb194ZmVyWzFdLmxl biA9IHRyYW5zZmVyX2xlbjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHNwaV9zeW5j KHN0LT5zcGksICZzdC0+Zmlmb19tc2cpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgdHJhbnNmZXJfbGVuOyBpICs9IHNldF9zaXplKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlpb19wdXNoX3RvX2J1ZmZlcnMoaW5kaW9f ZGV2LCAmc3QtCj4gPiA+Zmlmb19yeF9idWZbaV0pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg aXJxcmV0dXJuX3QgYWQ0MTMwX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHByaXZh dGU7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGlpb19wcml2 KGluZGlvX2Rldik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoaWlvX2J1ZmZlcl9lbmFi bGVkKGluZGlvX2RldikpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWQ0MTMw X3B1c2hfZmlmb19kYXRhKGluZGlvX2Rldik7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29tcGxldGUoJnN0LT5jb21wbGV0aW9uKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBJUlFfSEFORExFRDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBhZDQxMzBfZmluZF9zbG90KHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0 LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGFkNDEzMF9zZXR1cF9pbmZvCj4gPiAqdGFyZ2V0X3NldHVwX2luZm8sCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNp Z25lZCBpbnQgKnNsb3QsIGJvb2wgKm92ZXJ3cml0ZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqB1bnNpZ25lZCBpbnQgaTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCpzbG90ID0gQUQ0MTMw X0lOVkFMSURfU0xPVDsKPiA+ICvCoMKgwqDCoMKgwqDCoCpvdmVyd3JpdGUgPSBmYWxzZTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBBRDQxMzBfTUFYX1NFVFVQUzsg aSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9z bG90X2luZm8gKnNsb3RfaW5mbyA9ICZzdC0KPiA+ID5zbG90c19pbmZvW2ldOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEltbWVkaWF0ZWx5IGFjY2VwdCBhIG1h dGNoaW5nIHNldHVwIGluZm8uICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFtZW1jbXAodGFyZ2V0X3NldHVwX2luZm8sICZzbG90X2luZm8tPnNldHVwLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9m KCp0YXJnZXRfc2V0dXBfaW5mbykpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCpzbG90ID0gaTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q IElnbm9yZSBhbGwgc2V0dXBzIHdoaWNoIGFyZSB1c2VkIGJ5IGVuYWJsZWQKPiA+IGNoYW5uZWxz LiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzbG90X2luZm8tPmVu YWJsZWRfY2hhbm5lbHMpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbnRpbnVlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8qIEZpbmQgdGhlIGxlYXN0IHVzZWQgc2xvdC4gKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoKnNsb3QgPT0gQUQ0MTMwX0lOVkFMSURfU0xPVCB8fAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbG90X2luZm8tPmNoYW5uZWxzIDwg c3QtCj4gPiA+c2xvdHNfaW5mb1sqc2xvdF0uY2hhbm5lbHMpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpzbG90ID0gaTsKPiA+ICvCoMKgwqDCoMKg wqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICgqc2xvdCA9PSBBRDQxMzBfSU5WQUxJ RF9TTE9UKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFM Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgKm92ZXJ3cml0ZSA9IHRydWU7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgYWQ0 MTMwX3VubGlua19jaGFubmVsKHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0LAo+ID4gdW5zaWduZWQg aW50IGNoYW5uZWwpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9jaGFu X2luZm8gKmNoYW5faW5mbyA9ICZzdC0KPiA+ID5jaGFuc19pbmZvW2NoYW5uZWxdOwo+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9zbG90X2luZm8gKnNsb3RfaW5mbyA9ICZzdC0KPiA+ ID5zbG90c19pbmZvW2NoYW5faW5mby0+c2xvdF07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBj aGFuX2luZm8tPnNsb3QgPSBBRDQxMzBfSU5WQUxJRF9TTE9UOwo+ID4gK8KgwqDCoMKgwqDCoMKg c2xvdF9pbmZvLT5jaGFubmVscy0tOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEz MF91bmxpbmtfc2xvdChzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCwgdW5zaWduZWQKPiA+IGludCBz bG90KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBpOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IEFENDEzMF9NQVhfQ0hBTk5FTFM7IGkrKykg ewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfY2hhbl9p bmZvICpjaGFuX2luZm8gPSAmc3QtCj4gPiA+Y2hhbnNfaW5mb1tpXTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWNoYW5faW5mby0+aW5pdGlhbGl6ZWQgfHwg Y2hhbl9pbmZvLT5zbG90ICE9Cj4gPiBzbG90KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBhZDQxMzBfdW5saW5rX2NoYW5uZWwoc3QsIGkpOwo+ID4gK8KgwqDC oMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX2xpbmtfY2hhbm5lbF9zbG90KHN0cnVjdCBhZDQxMzBf c3RhdGUgKnN0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25l ZAo+ID4gaW50IHNsb3QpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9z bG90X2luZm8gKnNsb3RfaW5mbyA9ICZzdC0+c2xvdHNfaW5mb1tzbG90XTsKPiA+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBhZDQxMzBfY2hhbl9pbmZvICpjaGFuX2luZm8gPSAmc3QtCj4gPiA+Y2hh bnNfaW5mb1tjaGFubmVsXTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqByZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoc3QtPnJlZ21hcCwKPiA+IEFE NDEzMF9DSEFOTkVMX1hfUkVHKGNoYW5uZWwpLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFENDEzMF9DSEFOTkVMX1NF VFVQX01BU0ssCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+IEZJRUxEX1BSRVAoQUQ0MTMwX0NIQU5ORUxfU0VUVVBf TUFTSywgc2xvdCkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg Y2hhbl9pbmZvLT5zbG90ID0gc2xvdDsKPiA+ICvCoMKgwqDCoMKgwqDCoHNsb3RfaW5mby0+Y2hh bm5lbHMrKzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IGFkNDEzMF93cml0ZV9zbG90X3NldHVwKHN0cnVjdCBhZDQxMzBfc3Rh dGUgKnN0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgc2xvdCwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGFkNDEzMF9zZXR1cF9pbmZvCj4gPiAqc2V0dXBfaW5mbykKPiA+ICt7Cj4gPiArwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgdmFsOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IEZJRUxEX1BSRVAoQUQ0MTMwX0NPTkZJR19J T1VUMV9WQUxfTUFTSywgc2V0dXBfaW5mby0KPiA+ID5pb3V0MF92YWwpIHwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChBRDQxMzBfQ09ORklHX0lPVVQxX1ZBTF9NQVNL LCBzZXR1cF9pbmZvLQo+ID4gPmlvdXQxX3ZhbCkgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBGSUVMRF9QUkVQKEFENDEzMF9DT05GSUdfQlVSTk9VVF9NQVNLLCBzZXR1cF9pbmZvLQo+ ID4gPmJ1cm5vdXQpIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChB RDQxMzBfQ09ORklHX1JFRl9CVUZQX01BU0ssIHNldHVwX2luZm8tCj4gPiA+cmVmX2J1ZnApIHwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChBRDQxMzBfQ09ORklHX1JF Rl9CVUZNX01BU0ssIHNldHVwX2luZm8tCj4gPiA+cmVmX2J1Zm0pIHwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChBRDQxMzBfQ09ORklHX1JFRl9TRUxfTUFTSywgc2V0 dXBfaW5mby0KPiA+ID5yZWZfc2VsKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJ RUxEX1BSRVAoQUQ0MTMwX0NPTkZJR19QR0FfTUFTSywgc2V0dXBfaW5mby0+cGdhKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHJlZ21hcF93cml0ZShzdC0+cmVnbWFwLCBBRDQxMzBf Q09ORklHX1hfUkVHKHNsb3QpLAo+ID4gdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQp Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHZhbCA9IEZJRUxEX1BSRVAoQUQ0MTMwX0ZJTFRFUl9NT0RFX01BU0ss IHNldHVwX2luZm8tCj4gPiA+ZmlsdGVyX21vZGUpIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRklFTERfUFJFUChBRDQxMzBfRklMVEVSX1NFTEVDVF9NQVNLLCBzZXR1cF9pbmZvLQo+ ID4gPmZzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHJlZ21hcF93cml0ZShzdC0+ cmVnbWFwLCBBRDQxMzBfRklMVEVSX1hfUkVHKHNsb3QpLAo+ID4gdmFsKTsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG1lbWNweSgmc3QtPnNsb3RzX2luZm9bc2xv dF0uc2V0dXAsIHNldHVwX2luZm8sCj4gPiBzaXplb2YoKnNldHVwX2luZm8pKTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFk NDEzMF93cml0ZV9jaGFubmVsX3NldHVwKHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0LAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgYm9vbAo+ID4gb25fZW5hYmxlKQo+ ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfY2hhbl9pbmZvICpjaGFuX2lu Zm8gPSAmc3QtCj4gPiA+Y2hhbnNfaW5mb1tjaGFubmVsXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBhZDQxMzBfc2V0dXBfaW5mbyAqc2V0dXBfaW5mbyA9ICZjaGFuX2luZm8tPnNldHVwOwo+ ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCBvdmVyd3JpdGU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQg c2xvdDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogVGhlIGZvbGxvd2luZyBjYXNlcyBuZWVkIHRvIGJl IGhhbmRsZWQuCj4gPiArwqDCoMKgwqDCoMKgwqAgKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogMS4g RW5hYmxlZCBhbmQgbGlua2VkIGNoYW5uZWwgd2l0aCBzZXR1cCBjaGFuZ2VzOgo+ID4gK8KgwqDC oMKgwqDCoMKgICrCoMKgwqAgLSBGaW5kIGEgc2xvdC4gSWYgbm90IHBvc3NpYmxlLCByZXR1cm4g ZXJyb3IuCj4gPiArwqDCoMKgwqDCoMKgwqAgKsKgwqDCoCAtIFVubGluayBjaGFubmVsIGZyb20g Y3VycmVudCBzbG90Lgo+ID4gK8KgwqDCoMKgwqDCoMKgICrCoMKgwqAgLSBJZiB0aGUgc2xvdCBo YXMgY2hhbm5lbHMgbGlua2VkIHRvIGl0LCB1bmxpbmsgYWxsCj4gPiBjaGFubmVscywgYW5kCj4g PiArwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgwqAgd3JpdGUgdGhlIG5ldyBzZXR1cCB0byBpdC4K PiA+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgIC0gTGluayBjaGFubmVsIHRvIG5ldyBzbG90Lgo+ ID4gK8KgwqDCoMKgwqDCoMKgICoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIDIuIFNvb24gdG8gYmUg ZW5hYmxlZCBhbmQgdW5saW5rZWQgY2hhbm5lbDoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKg IC0gRmluZCBhIHNsb3QuIElmIG5vdCBwb3NzaWJsZSwgcmV0dXJuIGVycm9yLgo+ID4gK8KgwqDC oMKgwqDCoMKgICrCoMKgwqAgLSBJZiB0aGUgc2xvdCBoYXMgY2hhbm5lbHMgbGlua2VkIHRvIGl0 LCB1bmxpbmsgYWxsCj4gPiBjaGFubmVscywgYW5kCj4gPiArwqDCoMKgwqDCoMKgwqAgKsKgwqDC oMKgwqAgd3JpdGUgdGhlIG5ldyBzZXR1cCB0byBpdC4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqwqDC oMKgIC0gTGluayBjaGFubmVsIHRvIHRoZSBzbG90Lgo+ID4gK8KgwqDCoMKgwqDCoMKgICoKPiA+ ICvCoMKgwqDCoMKgwqDCoCAqIDMuIERpc2FibGVkIGFuZCBsaW5rZWQgY2hhbm5lbCB3aXRoIHNl dHVwIGNoYW5nZXM6Cj4gPiArwqDCoMKgwqDCoMKgwqAgKsKgwqDCoCAtIFVubGluayBjaGFubmVs IGZyb20gY3VycmVudCBzbG90Lgo+ID4gK8KgwqDCoMKgwqDCoMKgICoKPiA+ICvCoMKgwqDCoMKg wqDCoCAqIDQuIFNvb24gdG8gYmUgZW5hYmxlZCBhbmQgbGlua2VkIGNoYW5uZWw6Cj4gPiArwqDC oMKgwqDCoMKgwqAgKiA1LiBEaXNhYmxlZCBhbmQgdW5saW5rZWQgY2hhbm5lbCB3aXRoIHNldHVw IGNoYW5nZXM6Cj4gPiArwqDCoMKgwqDCoMKgwqAgKsKgwqDCoCAtIERvIG5vdGhpbmcuCj4gPiAr wqDCoMKgwqDCoMKgwqAgKi8KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIENhc2UgNCAqLwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG9uX2VuYWJsZSAmJiBjaGFuX2luZm8tPnNsb3QgIT0gQUQ0 MTMwX0lOVkFMSURfU0xPVCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghb25fZW5hYmxlICYmICFjaGFuX2lu Zm8tPmVuYWJsZWQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY2hh bl9pbmZvLT5zbG90ICE9IEFENDEzMF9JTlZBTElEX1NMT1QpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIENhc2UgMyAqLwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZDQxMzBfdW5saW5rX2NoYW5u ZWwoc3QsIGNoYW5uZWwpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIENhc2VzIDMgJiA1ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIDA7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBD YXNlcyAxICYgMiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX2ZpbmRfc2xvdChz dCwgc2V0dXBfaW5mbywgJnNsb3QsICZvdmVyd3JpdGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGNoYW5faW5mby0+c2xvdCAhPSBBRDQxMzBfSU5WQUxJ RF9TTE9UKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIENhc2UgMSAqLwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFkNDEzMF91bmxpbmtfY2hhbm5lbChz dCwgY2hhbm5lbCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAob3ZlcndyaXRlKSB7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3VubGlua19zbG90 KHN0LCBzbG90KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g cmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGFkNDEz MF93cml0ZV9zbG90X3NldHVwKHN0LCBzbG90LAo+ID4gc2V0dXBfaW5mbyk7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICvCoMKgwqDCoMKgwqDC oH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBhZDQxMzBfbGlua19jaGFubmVsX3Ns b3Qoc3QsIGNoYW5uZWwsIHNsb3QpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEz MF9zZXRfY2hhbm5lbF9lbmFibGUoc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgYm9vbAo+ID4gc3RhdHVzKQo+ID4gK3sKPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfY2hhbl9pbmZvICpjaGFuX2luZm8gPSAmc3Qt Cj4gPiA+Y2hhbnNfaW5mb1tjaGFubmVsXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQx MzBfc2xvdF9pbmZvICpzbG90X2luZm87Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGNoYW5faW5mby0+ZW5hYmxlZCA9PSBzdGF0dXMpCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoc3RhdHVzKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gYWQ0MTMwX3dyaXRlX2NoYW5uZWxfc2V0dXAoc3QsIGNoYW5uZWwsCj4gPiB0cnVl KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc2xvdF9pbmZvID0gJnN0 LT5zbG90c19pbmZvW2NoYW5faW5mby0+c2xvdF07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoc3QtPnJlZ21hcCwKPiA+IEFENDEzMF9DSEFOTkVMX1hf UkVHKGNoYW5uZWwpLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFENDEzMF9DSEFOTkVMX0VOX01BU0ssCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgRklFTERfUFJFUChBRDQxMzBfQ0hBTk5FTF9FTl9NQVNLLAo+ID4gc3RhdHVzKSk7Cj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzbG90X2luZm8tPmVuYWJsZWRf Y2hhbm5lbHMgKz0gc3RhdHVzID8gMSA6IC0xOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbl9pbmZv LT5lbmFibGVkID0gc3RhdHVzOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gKy8qCj4gPiArICogVGFibGUgNTguIEZJTFRFUl9NT0RFX24gYml0cyBh bmQgRmlsdGVyIFR5cGVzIG9mIHRoZSBkYXRhc2hlZXQKPiA+IGRlc2NyaWJlcwo+ID4gKyAqIHRo ZSByZWxhdGlvbiBiZXR3ZWVuIGZpbHRlciBtb2RlLCBPRFIgYW5kIEZTLgo+ID4gKyAqCj4gPiAr ICogTm90aWNlIHRoYXQgdGhlIG1heCBPRFIgb2YgZWFjaCBmaWx0ZXIgbW9kZSBpcyBub3QgbmVj ZXNzYXJpbHkKPiA+IHRoZQo+ID4gKyAqIGFic29sdXRlIG1heCBPRFIgc3VwcG9ydGVkIGJ5IHRo ZSBjaGlwLgo+ID4gKyAqCj4gPiArICogVGhlIE9EUiBkaXZpZGVyIGlzIG5vdCBleHBsaWNpdGx5 IHNwZWNpZmllZCwgYnV0IGl0IGNhbiBiZQo+ID4gZGVkdWNlZCBiYXNlZAo+ID4gKyAqIG9uIHRo ZSBPRFIgcmFuZ2Ugb2YgZWFjaCBmaWx0ZXIgbW9kZS4KPiA+ICsgKgo+ID4gKyAqIEZvciBleGFt cGxlLCBmb3IgU2luYzQrU2luYzEsIG1heCBPRFIgaXMgMjE4LjE4LiBUaGF0IG1lYW5zCj4gPiB0 aGF0IHRoZQo+ID4gKyAqIGFic29sdXRlIG1heCBPRFIgaXMgZGl2aWRlZCBieSAxMSB0byBhY2hp ZXZlIHRoZSBtYXggT0RSIG9mCj4gPiB0aGlzIGZpbHRlcgo+ID4gKyAqIG1vZGUuCj4gPiArICoK PiA+ICsgKiBUaGUgZm9ybXVsYXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBPRFIgYW5kIEZTIGZv ciBhIHNwZWNpZmljCj4gPiBmaWx0ZXIKPiA+ICsgKiBtb2RlIGNhbiBiZSBkZWR1Y2VkIGZyb20g dGhlIHNhbWUgdGFibGUuCj4gPiArICoKPiA+ICsgKiBOb3RpY2UgdGhhdCBGUyA9IDEgYWN0dWFs bHkgbWVhbnMgbWF4IE9EUiwgYW5kIHRoYXQgT0RSCj4gPiBkZWNyZWFzZXMgYnkKPiA+ICsgKiAo bWF4aW11bSBPRFIgLyBtYXhpbXVtIEZTKSBmb3IgZWFjaCBpbmNyZW1lbnQgb2YgRlMuCj4gPiAr ICoKPiA+ICsgKiBvZHIgPSBNQVhfT0RSIC8gb2RyX2RpdiAqICgxIC0gKGZzIC0gMSkgLyBmc19t YXgpIDw9Pgo+ID4gKyAqIG9kciA9IE1BWF9PRFIgKiAoMSAtIChmcyAtIDEpIC8gZnNfbWF4KSAv IG9kcl9kaXYgPD0+Cj4gPiArICogb2RyID0gTUFYX09EUiAqICgxIC0gKGZzIC0gMSkgLyBmc19t YXgpIC8gb2RyX2RpdiA8PT4KPiA+ICsgKiBvZHIgPSBNQVhfT0RSICogKGZzX21heCAtIGZzICsg MSkgLyAoZnNfbWF4ICogb2RyX2RpdikKPiA+ICsgKiAodXNlZCBpbiBhZDQxMzBfZnNfdG9fZnJl cSkKPiA+ICsgKgo+ID4gKyAqIEZvciB0aGUgb3Bwb3NpdGUgZm9ybXVsYSwgRlMgY2FuIGJlIGV4 dHJhY3RlZCBmcm9tIHRoZSBsYXN0Cj4gPiBvbmUuCj4gPiArICoKPiA+ICsgKiBNQVhfT0RSICog KGZzX21heCAtIGZzICsgMSkgPSBmc19tYXggKiBvZHJfZGl2ICogb2RyIDw9Pgo+ID4gKyAqIGZz X21heCAtIGZzICsgMSA9IGZzX21heCAqIG9kcl9kaXYgKiBvZHIgLyBNQVhfT0RSIDw9Pgo+ID4g KyAqIGZzID0gMSArIGZzX21heCAtIGZzX21heCAqIG9kcl9kaXYgKiBvZHIgLyBNQVhfT0RSCj4g PiArICogKHVzZWQgaW4gYWQ0MTMwX2ZzX3RvX2ZyZXEpCj4gPiArICovCj4gPiArCj4gPiArc3Rh dGljIHZvaWQgYWQ0MTMwX2ZyZXFfdG9fZnMoZW51bSBhZDQxMzBfZmlsdGVyX21vZGUgZmlsdGVy X21vZGUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW50IHZhbCwgaW50IHZhbDIsIHVuc2lnbmVkIGludCAqZnMpCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGFkNDEzMF9maWx0ZXJfY29uZmlnICpmaWx0 ZXJfY29uZmlnID0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmYWQ0MTMwX2Zp bHRlcl9jb25maWdzW2ZpbHRlcl9tb2RlXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHU2NCBkaXZpZGVu ZCwgZGl2aXNvcjsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCB0ZW1wOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgZGl2aWRlbmQgPSBmaWx0ZXJfY29uZmlnLT5mc19tYXggKiBmaWx0ZXJfY29uZmln LT5vZHJfZGl2ICoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgodTY0 KXZhbCAqIE5BTk8gKyB2YWwyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGRpdmlzb3IgPSAodTY0KUFE NDEzMF9NQVhfT0RSICogTkFOTzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHRlbXAgPSBBRDQx MzBfRklMVEVSX1NFTEVDVF9NSU4gKyBmaWx0ZXJfY29uZmlnLT5mc19tYXggLQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIERJVjY0X1U2NF9ST1VORF9DTE9TRVNUKGRpdmlkZW5kLCBk aXZpc29yKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh0ZW1wIDwgQUQ0MTMwX0ZJTFRF Ul9TRUxFQ1RfTUlOKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlbXAgPSBB RDQxMzBfRklMVEVSX1NFTEVDVF9NSU47Cj4gPiArwqDCoMKgwqDCoMKgwqBlbHNlIGlmICh0ZW1w ID4gZmlsdGVyX2NvbmZpZy0+ZnNfbWF4KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHRlbXAgPSBmaWx0ZXJfY29uZmlnLT5mc19tYXg7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqAqZnMgPSB0ZW1wOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhZDQxMzBfZnNfdG9f ZnJlcShlbnVtIGFkNDEzMF9maWx0ZXJfbW9kZSBmaWx0ZXJfbW9kZSwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBp bnQgZnMsIGludCAqdmFsLCBpbnQgKnZhbDIpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgY29u c3Qgc3RydWN0IGFkNDEzMF9maWx0ZXJfY29uZmlnICpmaWx0ZXJfY29uZmlnID0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmYWQ0MTMwX2ZpbHRlcl9jb25maWdzW2ZpbHRlcl9t b2RlXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBkaXZpZGVuZCwgZGl2aXNvcjsK PiA+ICvCoMKgwqDCoMKgwqDCoHU2NCB0ZW1wOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZGl2 aWRlbmQgPSAoZmlsdGVyX2NvbmZpZy0+ZnNfbWF4IC0gZnMgKwo+ID4gQUQ0MTMwX0ZJTFRFUl9T RUxFQ1RfTUlOKSAqCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBRDQx MzBfTUFYX09EUjsKPiA+ICvCoMKgwqDCoMKgwqDCoGRpdmlzb3IgPSBmaWx0ZXJfY29uZmlnLT5m c19tYXggKiBmaWx0ZXJfY29uZmlnLT5vZHJfZGl2Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg dGVtcCA9IGRpdl91NjQoKHU2NClkaXZpZGVuZCAqIE5BTk8sIGRpdmlzb3IpOwo+ID4gK8KgwqDC oMKgwqDCoMKgKnZhbCA9IGRpdl91NjRfcmVtKHRlbXAsIE5BTk8sIHZhbDIpOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9zZXRfZmlsdGVyX21vZGUoc3RydWN0IGlpb19kZXYg KmluZGlvX2RldiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFu LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHZhbCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gPiArwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IGNoYW4tPnNjYW5faW5kZXg7Cj4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX2NoYW5faW5mbyAqY2hhbl9pbmZvID0gJnN0LQo+ ID4gPmNoYW5zX2luZm9bY2hhbm5lbF07Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMw X3NldHVwX2luZm8gKnNldHVwX2luZm8gPSAmY2hhbl9pbmZvLT5zZXR1cDsKPiA+ICvCoMKgwqDC oMKgwqDCoGVudW0gYWQ0MTMwX2ZpbHRlcl9tb2RlIG9sZF9maWx0ZXJfbW9kZTsKPiA+ICvCoMKg wqDCoMKgwqDCoGludCBmcmVxX3ZhbCwgZnJlcV92YWwyOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5z aWduZWQgaW50IG9sZF9mczsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmc3QtPmxvY2spOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKHNldHVwX2luZm8tPmZpbHRlcl9tb2RlID09IHZhbCkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG9sZF9m cyA9IHNldHVwX2luZm8tPmZzOwo+ID4gK8KgwqDCoMKgwqDCoMKgb2xkX2ZpbHRlcl9tb2RlID0g c2V0dXBfaW5mby0+ZmlsdGVyX21vZGU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKgo+ID4g K8KgwqDCoMKgwqDCoMKgICogV2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBmaWx0ZXIgbW9kZXMsIHRy eSB0byBtYXRjaCB0aGUKPiA+IE9EUiBhcwo+ID4gK8KgwqDCoMKgwqDCoMKgICogY2xvc2UgYXMg cG9zc2libGUuIFRvIGRvIHRoaXMsIGNvbnZlcnQgdGhlIGN1cnJlbnQgRlMKPiA+IGludG8gT0RS Cj4gPiArwqDCoMKgwqDCoMKgwqAgKiB1c2luZyB0aGUgb2xkIGZpbHRlciBtb2RlLCB0aGVuIGNv bnZlcnQgaXQgYmFjayBpbnRvIEZTCj4gPiB1c2luZwo+ID4gK8KgwqDCoMKgwqDCoMKgICogdGhl IG5ldyBmaWx0ZXIgbW9kZS4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDC oMKgYWQ0MTMwX2ZzX3RvX2ZyZXEoc2V0dXBfaW5mby0+ZmlsdGVyX21vZGUsIHNldHVwX2luZm8t PmZzLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmZnJlcV92YWwsICZmcmVxX3ZhbDIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgYWQ0MTMw X2ZyZXFfdG9fZnModmFsLCBmcmVxX3ZhbCwgZnJlcV92YWwyLCAmc2V0dXBfaW5mby0KPiA+ID5m cyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzZXR1cF9pbmZvLT5maWx0ZXJfbW9kZSA9IHZh bDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFkNDEzMF93cml0ZV9jaGFubmVsX3Nl dHVwKHN0LCBjaGFubmVsLCBmYWxzZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2V0dXBfaW5mby0+ZnMgPSBvbGRfZnM7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2V0dXBfaW5mby0+ZmlsdGVyX21v ZGUgPSBvbGRfZmlsdGVyX21vZGU7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArIG91 dDoKPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmc3QtPmxvY2spOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBh ZDQxMzBfZ2V0X2ZpbHRlcl9tb2RlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbikKPiA+ICt7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4g PiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IGNoYW4tPnNjYW5faW5kZXg7 Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3NldHVwX2luZm8gKnNldHVwX2luZm8g PSAmc3QtCj4gPiA+Y2hhbnNfaW5mb1tjaGFubmVsXS5zZXR1cDsKPiA+ICvCoMKgwqDCoMKgwqDC oGVudW0gYWQ0MTMwX2ZpbHRlcl9tb2RlIGZpbHRlcl9tb2RlOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgbXV0ZXhfbG9jaygmc3QtPmxvY2spOwo+ID4gK8KgwqDCoMKgwqDCoMKgZmlsdGVyX21v ZGUgPSBzZXR1cF9pbmZvLT5maWx0ZXJfbW9kZTsKPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3Vu bG9jaygmc3QtPmxvY2spOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGZpbHRlcl9t b2RlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19lbnVtIGFkNDEz MF9maWx0ZXJfbW9kZV9lbnVtID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgLml0ZW1zID0gYWQ0MTMw X2ZpbHRlcl9tb2Rlc19zdHIsCj4gPiArwqDCoMKgwqDCoMKgwqAubnVtX2l0ZW1zID0gQVJSQVlf U0laRShhZDQxMzBfZmlsdGVyX21vZGVzX3N0ciksCj4gPiArwqDCoMKgwqDCoMKgwqAuc2V0ID0g YWQ0MTMwX3NldF9maWx0ZXJfbW9kZSwKPiA+ICvCoMKgwqDCoMKgwqDCoC5nZXQgPSBhZDQxMzBf Z2V0X2ZpbHRlcl9tb2RlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBp aW9fY2hhbl9zcGVjX2V4dF9pbmZvCj4gPiBhZDQxMzBfZmlsdGVyX21vZGVfZXh0X2luZm9bXSA9 IHsKPiA+ICvCoMKgwqDCoMKgwqDCoElJT19FTlVNKCJmaWx0ZXJfbW9kZSIsIElJT19TRVBBUkFU RSwKPiA+ICZhZDQxMzBfZmlsdGVyX21vZGVfZW51bSksCj4gPiArwqDCoMKgwqDCoMKgwqBJSU9f RU5VTV9BVkFJTEFCTEUoImZpbHRlcl9tb2RlIiwgSUlPX1NIQVJFRF9CWV9UWVBFLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZhZDQxMzBf ZmlsdGVyX21vZGVfZW51bSksCj4gPiArwqDCoMKgwqDCoMKgwqB7IH0KPiA+ICt9Owo+ID4gKwo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBhZDQxMzBfY2hhbm5lbF90ZW1w bGF0ZSA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoC50eXBlID0gSUlPX1ZPTFRBR0UsCj4gPiArwqDC oMKgwqDCoMKgwqAuaW5kZXhlZCA9IDEsCj4gPiArwqDCoMKgwqDCoMKgwqAuZGlmZmVyZW50aWFs ID0gMSwKPiA+ICvCoMKgwqDCoMKgwqDCoC5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NI QU5fSU5GT19SQVcpIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoSUlPX0NIQU5fSU5GT19TQ0FMRSkgfAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVChJ SU9fQ0hBTl9JTkZPX09GRlNFVCkgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSks Cj4gPiArwqDCoMKgwqDCoMKgwqAuaW5mb19tYXNrX3NlcGFyYXRlX2F2YWlsYWJsZSA9IEJJVChJ SU9fQ0hBTl9JTkZPX1NDQUxFKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKElJT19D SEFOX0lORk9fU0FNUF9GUkVRCj4gPiApLAo+ID4gK8KgwqDCoMKgwqDCoMKgLmV4dF9pbmZvID0g YWQ0MTMwX2ZpbHRlcl9tb2RlX2V4dF9pbmZvLAo+ID4gK8KgwqDCoMKgwqDCoMKgLnNjYW5fdHlw ZSA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc2lnbiA9ICd1JywKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZW5kaWFubmVzcyA9IElJT19CRSwKPiA+ ICvCoMKgwqDCoMKgwqDCoH0sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9z ZXRfY2hhbm5lbF9wZ2Eoc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QsCj4gPiB1bnNpZ25lZCBpbnQg Y2hhbm5lbCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCB2YWwsIGludCB2YWwyKQo+ID4gK3sKPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfY2hhbl9pbmZvICpjaGFuX2luZm8gPSAmc3QtCj4gPiA+ Y2hhbnNfaW5mb1tjaGFubmVsXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfc2V0 dXBfaW5mbyAqc2V0dXBfaW5mbyA9ICZjaGFuX2luZm8tPnNldHVwOwo+ID4gK8KgwqDCoMKgwqDC oMKgdW5zaWduZWQgaW50IHBnYSwgb2xkX3BnYTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQg PSAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChwZ2EgPSAwOyBwZ2EgPCBBRDQxMzBf TUFYX1BHQTsgcGdhKyspCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZh bCA9PSBzdC0+c2NhbGVfdGJsc1tzZXR1cF9pbmZvLQo+ID4gPnJlZl9zZWxdW3BnYV1bMF0gJiYK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsMiA9PSBzdC0+c2Nh bGVfdGJsc1tzZXR1cF9pbmZvLQo+ID4gPnJlZl9zZWxdW3BnYV1bMV0pCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKHBnYSA9PSBBRDQxMzBfTUFYX1BHQSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oG11dGV4X2xvY2soJnN0LT5sb2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChwZ2EgPT0gc2V0 dXBfaW5mby0+cGdhKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0 Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgb2xkX3BnYSA9IHNldHVwX2luZm8tPnBnYTsKPiA+ ICvCoMKgwqDCoMKgwqDCoHNldHVwX2luZm8tPnBnYSA9IHBnYTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHJldCA9IGFkNDEzMF93cml0ZV9jaGFubmVsX3NldHVwKHN0LCBjaGFubmVsLCBmYWxz ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNldHVwX2luZm8tPnBnYSA9IG9sZF9wZ2E7Cj4gPiArCj4gPiArb3V0Ogo+ID4g K8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9z ZXRfY2hhbm5lbF9mcmVxKHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0LAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 bnNpZ25lZCBpbnQgY2hhbm5lbCwgaW50IHZhbCwKPiA+IGludCB2YWwyKQo+ID4gK3sKPiA+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfY2hhbl9pbmZvICpjaGFuX2luZm8gPSAmc3QtCj4g PiA+Y2hhbnNfaW5mb1tjaGFubmVsXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBf c2V0dXBfaW5mbyAqc2V0dXBfaW5mbyA9ICZjaGFuX2luZm8tPnNldHVwOwo+ID4gK8KgwqDCoMKg wqDCoMKgdW5zaWduZWQgaW50IGZzLCBvbGRfZnM7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0 ID0gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJnN0LT5sb2NrKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoG9sZF9mcyA9IHNldHVwX2luZm8tPmZzOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgYWQ0MTMwX2ZyZXFfdG9fZnMoc2V0dXBfaW5mby0+ZmlsdGVyX21vZGUsIHZhbCwg dmFsMiwgJmZzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChmcyA9PSBzZXR1cF9pbmZv LT5mcykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHNldHVwX2luZm8tPmZzID0gZnM7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqByZXQgPSBhZDQxMzBfd3JpdGVfY2hhbm5lbF9zZXR1cChzdCwgY2hhbm5lbCwgZmFs c2UpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzZXR1cF9pbmZvLT5mcyA9IG9sZF9mczsKPiA+ICsKPiA+ICtvdXQ6Cj4gPiAr wqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJnN0LT5sb2NrKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX2FkNDEzMF9y ZWFkX3NhbXBsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCB1bnNpZ25lZAo+ID4gaW50IGNo YW5uZWwsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpbnQgKnZhbCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg YWQ0MTMwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gPiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3NldF9jaGFu bmVsX2VuYWJsZShzdCwgY2hhbm5lbCwgdHJ1ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqByZWluaXRfY29tcGxldGlvbigmc3QtPmNvbXBsZXRpb24pOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3NldF9tb2RlKHN0LCBBRDQxMzBfTU9E RV9DT05USU5VT1VTKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3QtPmNvbXBsZXRpb24sCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXNlY3NfdG9famlmZmllcygxMDAwKSk7Cj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoIXJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVUSU1FRE9VVDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFkNDEzMF9z ZXRfbW9kZShzdCwgQUQ0MTMwX01PREVfSURMRSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqByZXQgPSByZWdtYXBfcmVhZChzdC0+cmVnbWFwLCBBRDQxMzBfREFU QV9SRUcsIHZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBhZDQxMzBfc2V0X2NoYW5uZWxfZW5hYmxlKHN0LCBjaGFubmVsLCBmYWxzZSk7Cj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gSUlPX1ZBTF9JTlQ7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX3JlYWRfc2FtcGxlKHN0cnVjdCBp aW9fZGV2ICppbmRpb19kZXYsIHVuc2lnbmVkCj4gPiBpbnQgY2hhbm5lbCwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgKnZh bCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGlp b19wcml2KGluZGlvX2Rldik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0ID0gaWlvX2RldmljZV9jbGFpbV9kaXJlY3RfbW9kZShpbmRpb19k ZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfbG9j aygmc3QtPmxvY2spOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gX2FkNDEzMF9yZWFkX3NhbXBs ZShpbmRpb19kZXYsIGNoYW5uZWwsIHZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxv Y2soJnN0LT5sb2NrKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlpb19kZXZpY2VfcmVsZWFz ZV9kaXJlY3RfbW9kZShpbmRpb19kZXYpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfcmVhZF9yYXcoc3RydWN0 IGlpb19kZXYgKmluZGlvX2RldiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQg KnZhbCwgaW50ICp2YWwyLCBsb25nIGluZm8pCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ID4gK8KgwqDCoMKg wqDCoMKgdW5zaWduZWQgaW50IGNoYW5uZWwgPSBjaGFuLT5zY2FuX2luZGV4Owo+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGFkNDEzMF9zZXR1cF9pbmZvICpzZXR1cF9pbmZvID0gJnN0LQo+ID4g PmNoYW5zX2luZm9bY2hhbm5lbF0uc2V0dXA7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzd2l0 Y2ggKGluZm8pIHsKPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgSUlPX0NIQU5fSU5GT19SQVc6Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGFkNDEzMF9yZWFkX3NhbXBs ZShpbmRpb19kZXYsIGNoYW5uZWwsIHZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIElJT19D SEFOX0lORk9fU0NBTEU6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhf bG9jaygmc3QtPmxvY2spOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2YWwg PSBzdC0+c2NhbGVfdGJsc1tzZXR1cF9pbmZvLQo+ID4gPnJlZl9zZWxdW3NldHVwX2luZm8tPnBn YV1bMF07Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnZhbDIgPSBzdC0+c2Nh bGVfdGJsc1tzZXR1cF9pbmZvLQo+ID4gPnJlZl9zZWxdW3NldHVwX2luZm8tPnBnYV1bMV07Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIElJT19WQUxf SU5UX1BMVVNfTkFOTzsKPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgSUlPX0NIQU5fSU5GT19PRkZT RVQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnZhbCA9IHN0LT5iaXBvbGFy ID8gLUJJVChjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMKPiA+IC0gMSkgOiAwOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBJSU9fVkFMX0lOVDsKPiA+ICvC oMKgwqDCoMKgwqDCoGNhc2UgSUlPX0NIQU5fSU5GT19TQU1QX0ZSRVE6Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmc3QtPmxvY2spOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFkNDEzMF9mc190b19mcmVxKHNldHVwX2luZm8tPmZpbHRl cl9tb2RlLAo+ID4gc2V0dXBfaW5mby0+ZnMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwsIHZhbDIpOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmc3QtPmxvY2spOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBJSU9fVkFMX0lO VF9QTFVTX05BTk87Cj4gPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9yZWFkX2F2YWlsKHN0cnVjdCBpaW9f ZGV2ICppbmRpb19kZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25zdCBpbnQgKip2YWxzLCBpbnQgKnR5cGUsIGludAo+ID4gKmxlbmd0aCwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9uZyBpbmZv KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0ID0gaWlv X3ByaXYoaW5kaW9fZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBjaGFubmVs ID0gY2hhbi0+c2Nhbl9pbmRleDsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfc2V0 dXBfaW5mbyAqc2V0dXBfaW5mbyA9ICZzdC0KPiA+ID5jaGFuc19pbmZvW2NoYW5uZWxdLnNldHVw Owo+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGFkNDEzMF9maWx0ZXJfY29uZmlnICpm aWx0ZXJfY29uZmlnOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChpbmZvKSB7Cj4g PiArwqDCoMKgwqDCoMKgwqBjYXNlIElJT19DSEFOX0lORk9fU0NBTEU6Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgKnZhbHMgPSAoaW50ICopc3QtPnNjYWxlX3RibHNbc2V0dXBf aW5mby0+cmVmX3NlbF07Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKmxlbmd0 aCA9IEFSUkFZX1NJWkUoc3QtPnNjYWxlX3RibHNbc2V0dXBfaW5mby0KPiA+ID5yZWZfc2VsXSkg KiAyOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp0eXBlID0gSUlP X1ZBTF9JTlRfUExVU19OQU5POwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBJSU9fQVZBSUxfTElTVDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgSUlPX0NI QU5fSU5GT19TQU1QX0ZSRVE6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0 ZXhfbG9jaygmc3QtPmxvY2spOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZp bHRlcl9jb25maWcgPSAmYWQ0MTMwX2ZpbHRlcl9jb25maWdzW3NldHVwX2luZm8tCj4gPiA+Zmls dGVyX21vZGVdOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9j aygmc3QtPmxvY2spOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2 YWxzID0gKGludCAqKWZpbHRlcl9jb25maWctPnNhbXBfZnJlcV9hdmFpbDsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqbGVuZ3RoID0gZmlsdGVyX2NvbmZpZy0+c2FtcF9mcmVx X2F2YWlsX2xlbiAqIDI7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnR5cGUg PSBJSU9fVkFMX0ZSQUNUSU9OQUw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGZpbHRlcl9jb25maWctPnNhbXBfZnJlcV9hdmFpbF90eXBlOwo+ID4gK8Kg wqDCoMKgwqDCoMKgZGVmYXVsdDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBhZDQxMzBfd3JpdGVfcmF3X2dldF9mbXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rl diwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdAo+ID4gKmNoYW4s Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbG9uZyBpbmZvKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN3 aXRjaCAoaW5mbykgewo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSBJSU9fQ0hBTl9JTkZPX1NDQUxF Ogo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUToKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19OQU5P Owo+ID4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBhZDQxMzBfd3JpdGVfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19k ZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCB2YWwsIGludCB2YWwy LCBsb25nIGluZm8pCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9zdGF0 ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQg aW50IGNoYW5uZWwgPSBjaGFuLT5zY2FuX2luZGV4Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg c3dpdGNoIChpbmZvKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIElJT19DSEFOX0lORk9fU0NB TEU6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGFkNDEzMF9zZXRf Y2hhbm5lbF9wZ2Eoc3QsIGNoYW5uZWwsIHZhbCwKPiA+IHZhbDIpOwo+ID4gK8KgwqDCoMKgwqDC oMKgY2FzZSBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUToKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gYWQ0MTMwX3NldF9jaGFubmVsX2ZyZXEoc3QsIGNoYW5uZWwsIHZh bCwKPiA+IHZhbDIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0K PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfcmVnX2FjY2VzcyhzdHJ1Y3QgaWlv X2RldiAqaW5kaW9fZGV2LCB1bnNpZ25lZAo+ID4gaW50IHJlZywKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHdy aXRldmFsLCB1bnNpZ25lZCBpbnQKPiA+ICpyZWFkdmFsKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZWFkdmFsKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiByZWdtYXBfcmVhZChzdC0+cmVnbWFwLCByZWcsIHJlYWR2YWwpOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJlZ21hcF93cml0ZShzdC0+cmVnbWFwLCBy ZWcsIHdyaXRldmFsKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfdXBkYXRl X3NjYW5fbW9kZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25z dCB1bnNpZ25lZCBsb25nICpzY2FuX21hc2spCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ID4gK8KgwqDCoMKg wqDCoMKgdW5zaWduZWQgaW50IGNoYW5uZWw7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBp bnQgdmFsID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBtdXRleF9sb2NrKCZzdC0+bG9jayk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBm b3JfZWFjaF9zZXRfYml0KGNoYW5uZWwsIHNjYW5fbWFzaywgaW5kaW9fZGV2LQo+ID4gPm51bV9j aGFubmVscykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGFkNDEz MF9zZXRfY2hhbm5lbF9lbmFibGUoc3QsIGNoYW5uZWwsIHRydWUpOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZhbCsrOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgc3QtPm51bV9lbmFibGVkX2NoYW5uZWxzID0gdmFsOwo+ID4gKwo+ID4gK291 dDoKPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmc3QtPmxvY2spOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0 MTMwX3NldF9maWZvX3dhdGVybWFyayhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAo+ID4gdW5z aWduZWQgaW50IHZhbCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0 YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25l ZCBpbnQgZWZmOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmICh2YWwgPiBBRDQxMzBfRklGT19TSVpFKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZWZm ID0gdmFsICogc3QtPm51bV9lbmFibGVkX2NoYW5uZWxzOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KGVmZiA+IEFENDEzMF9GSUZPX1NJWkUpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBBbHdheXMgc2V0IHdh dGVybWFyayB0byBhIG11bHRpcGxlIG9mIHRoZSBudW1iZXIKPiA+IG9mCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZW5hYmxlZCBjaGFubmVscyB0byBhdm9pZCBtYWtpbmcg dGhlIEZJRk8KPiA+IHVuYWxpZ25lZC4KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlZmYgPSByb3VuZGRvd24o QUQ0MTMwX0ZJRk9fU0laRSwgc3QtCj4gPiA+bnVtX2VuYWJsZWRfY2hhbm5lbHMpOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmc3QtPmxvY2spOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHN0LT5yZWdtYXAsCj4gPiBBRDQxMzBf RklGT19DT05UUk9MX1JFRywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBRDQxMzBfRklGT19DT05UUk9MX1dNX01BU0ss Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAKPiA+IEZJRUxEX1BSRVAoQUQ0MTMwX0ZJRk9fQ09OVFJPTF9XTV9NQVNLLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gYWQ0MTMwX3dhdGVybWFya19yZWdf dmFsKGVmZikpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzdC0+ ZWZmZWN0aXZlX3dhdGVybWFyayA9IGVmZjsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0LT53YXRlcm1h cmsgPSB2YWw7Cj4gPiArCj4gPiArb3V0Ogo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2Nr KCZzdC0+bG9jayk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNDEzMF9pbmZvID0gewo+ ID4gK8KgwqDCoMKgwqDCoMKgLnJlYWRfcmF3ID0gYWQ0MTMwX3JlYWRfcmF3LAo+ID4gK8KgwqDC oMKgwqDCoMKgLnJlYWRfYXZhaWwgPSBhZDQxMzBfcmVhZF9hdmFpbCwKPiA+ICvCoMKgwqDCoMKg wqDCoC53cml0ZV9yYXdfZ2V0X2ZtdCA9IGFkNDEzMF93cml0ZV9yYXdfZ2V0X2ZtdCwKPiA+ICvC oMKgwqDCoMKgwqDCoC53cml0ZV9yYXcgPSBhZDQxMzBfd3JpdGVfcmF3LAo+ID4gK8KgwqDCoMKg wqDCoMKgLnVwZGF0ZV9zY2FuX21vZGUgPSBhZDQxMzBfdXBkYXRlX3NjYW5fbW9kZSwKPiA+ICvC oMKgwqDCoMKgwqDCoC5od2ZpZm9fc2V0X3dhdGVybWFyayA9IGFkNDEzMF9zZXRfZmlmb193YXRl cm1hcmssCj4gPiArwqDCoMKgwqDCoMKgwqAuZGVidWdmc19yZWdfYWNjZXNzID0gYWQ0MTMwX3Jl Z19hY2Nlc3MsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9idWZmZXJfcG9z dGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKPiA+ICvC oMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF9sb2Nr KCZzdC0+bG9jayk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhZDQxMzBfc2V0X3dh dGVybWFya19pbnRlcnJ1cHRfZW4oc3QsIHRydWUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJl dCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldCA9IGlycV9zZXRfaXJxX3R5cGUoc3QtPnNwaS0+aXJxLCBzdC0+ aW52X2lycV90cmlnZ2VyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqByZXQgPSBhZDQxMzBfc2V0X2ZpZm9fbW9kZShzdCwgQUQ0MTMwX0ZJRk9fTU9ERV9XTSk7Cj4g PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gb3V0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3NldF9t b2RlKHN0LCBBRDQxMzBfTU9ERV9DT05USU5VT1VTKTsKPiA+ICsKPiA+ICtvdXQ6Cj4gPiArwqDC oMKgwqDCoMKgwqBtdXRleF91bmxvY2soJnN0LT5sb2NrKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX2J1ZmZl cl9wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCj4gPiArewo+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQg cmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmc3QtPmxvY2spOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3NldF9tb2RlKHN0LCBBRDQxMzBfTU9E RV9JRExFKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBp cnFfc2V0X2lycV90eXBlKHN0LT5zcGktPmlycSwgc3QtPmlycV90cmlnZ2VyKTsKPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byBvdXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhZDQxMzBfc2V0X2ZpZm9fbW9k ZShzdCwgQUQ0MTMwX0ZJRk9fTU9ERV9ESVNBQkxFRCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo cmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3NldF93YXRlcm1hcmtfaW50ZXJydXB0X2Vu KHN0LCBmYWxzZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyoK PiA+ICvCoMKgwqDCoMKgwqDCoCAqIHVwZGF0ZV9zY2FuX21vZGUoKSBpcyBub3QgY2FsbGVkIGlu IHRoZSBkaXNhYmxlIHBhdGgsCj4gPiBkaXNhYmxlIGFsbAo+ID4gK8KgwqDCoMKgwqDCoMKgICog Y2hhbm5lbHMgaGVyZS4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKg Zm9yIChpID0gMDsgaSA8IGluZGlvX2Rldi0+bnVtX2NoYW5uZWxzOyBpKyspIHsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhZDQxMzBfc2V0X2NoYW5uZWxfZW5hYmxl KHN0LCBpLCBmYWxzZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJl dCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArb3V0Ogo+ID4gK8KgwqDCoMKg wqDCoMKgbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19idWZm ZXJfc2V0dXBfb3BzIGFkNDEzMF9idWZmZXJfb3BzID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgLnBv c3RlbmFibGUgPSBhZDQxMzBfYnVmZmVyX3Bvc3RlbmFibGUsCj4gPiArwqDCoMKgwqDCoMKgwqAu cHJlZGlzYWJsZSA9IGFkNDEzMF9idWZmZXJfcHJlZGlzYWJsZSwKPiA+ICt9Owo+ID4gKwo+ID4g K3N0YXRpYyBzc2l6ZV90IGh3Zmlmb193YXRlcm1hcmtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiA+IGNo YXIgKmJ1ZikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpz dCA9IGlpb19wcml2KGRldl90b19paW9fZGV2KGRldikpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5z aWduZWQgaW50IHZhbDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJnN0LT5s b2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IHN0LT53YXRlcm1hcms7Cj4gPiArwqDCoMKg wqDCoMKgwqBtdXRleF91bmxvY2soJnN0LT5sb2NrKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgIiVkXG4iLCB2YWwpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgc3NpemVfdCBod2ZpZm9fZW5hYmxlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gPiBjaGFyICpidWYp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBpaW9f cHJpdihkZXZfdG9faWlvX2RldihkZXYpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGlu dCB2YWw7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gcmVnbWFwX3JlYWQoc3QtPnJlZ21hcCwgQUQ0MTMwX0ZJRk9fQ09OVFJPTF9SRUcs Cj4gPiAmdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHZh bCA9IEZJRUxEX0dFVChBRDQxMzBfRklGT19DT05UUk9MX01PREVfTUFTSywgdmFsKTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgIiVkXG4iLCB2YWwgIT0K PiA+IEFENDEzMF9GSUZPX01PREVfRElTQUJMRUQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg c3NpemVfdCBod2ZpZm9fd2F0ZXJtYXJrX21pbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKPiA+ICphdHRy LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyICpidWYpCj4gPiArewo+ID4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAiJXNcbiIsICIxIik7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBzc2l6ZV90IGh3Zmlmb193YXRlcm1hcmtfbWF4X3Nob3coc3RydWN0IGRl dmljZSAqZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZQo+ID4gKmF0dHIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYXIgKmJ1ZikKPiA+ ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc3lzZnNfZW1pdChidWYsICIlc1xuIiwKPiA+ IF9fc3RyaW5naWZ5KEFENDEzMF9GSUZPX1NJWkUpKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IElJT19ERVZJQ0VfQVRUUl9STyhod2ZpZm9fd2F0ZXJtYXJrX21pbiwgMCk7Cj4gPiArc3RhdGlj IElJT19ERVZJQ0VfQVRUUl9STyhod2ZpZm9fd2F0ZXJtYXJrX21heCwgMCk7Cj4gPiArc3RhdGlj IElJT19ERVZJQ0VfQVRUUl9STyhod2ZpZm9fd2F0ZXJtYXJrLCAwKTsKPiA+ICtzdGF0aWMgSUlP X0RFVklDRV9BVFRSX1JPKGh3Zmlmb19lbmFibGVkLCAwKTsKPiA+ICsKPiA+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGF0dHJpYnV0ZSAqYWQ0MTMwX2ZpZm9fYXR0cmlidXRlc1tdID0gewo+ID4gK8Kg wqDCoMKgwqDCoMKgJmlpb19kZXZfYXR0cl9od2ZpZm9fd2F0ZXJtYXJrX21pbi5kZXZfYXR0ci5h dHRyLAo+ID4gK8KgwqDCoMKgwqDCoMKgJmlpb19kZXZfYXR0cl9od2ZpZm9fd2F0ZXJtYXJrX21h eC5kZXZfYXR0ci5hdHRyLAo+ID4gK8KgwqDCoMKgwqDCoMKgJmlpb19kZXZfYXR0cl9od2ZpZm9f d2F0ZXJtYXJrLmRldl9hdHRyLmF0dHIsCj4gPiArwqDCoMKgwqDCoMKgwqAmaWlvX2Rldl9hdHRy X2h3Zmlmb19lbmFibGVkLmRldl9hdHRyLmF0dHIsCj4gPiArwqDCoMKgwqDCoMKgwqBOVUxMCj4g PiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9hZDQxMzBfZmluZF90YWJsZV9pbmRleChjb25z dCB1bnNpZ25lZCBpbnQgKnRibCwKPiA+IHNpemVfdCBsZW4sCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgaW50IHZhbCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgaTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodGJsW2ldID09IHZhbCkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGk7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICt9Cj4gPiArCj4gPiArI2Rl ZmluZSBhZDQxMzBfZmluZF90YWJsZV9pbmRleCh0YWJsZSwgdmFsKSBcCj4gPiArwqDCoMKgwqDC oMKgwqBfYWQ0MTMwX2ZpbmRfdGFibGVfaW5kZXgodGFibGUsIEFSUkFZX1NJWkUodGFibGUpLCB2 YWwpCj4gPiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfZ2V0X3JlZl92b2x0YWdlKHN0cnVjdCBh ZDQxMzBfc3RhdGUgKnN0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBhZDQxMzBfcmVmX3NlbCByZWZfc2Vs KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAocmVmX3NlbCkgewo+ID4gK8KgwqDC oMKgwqDCoMKgY2FzZSBBRDQxMzBfUkVGX1JFRklOMToKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmVndWxhdG9yX2dldF92b2x0YWdlKHN0LQo+ID4gPnJlZ3VsYXRv cnNbMl0uY29uc3VtZXIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSBBRDQxMzBfUkVGX1JFRklO MjoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVndWxhdG9yX2dl dF92b2x0YWdlKHN0LQo+ID4gPnJlZ3VsYXRvcnNbM10uY29uc3VtZXIpOwo+ID4gK8KgwqDCoMKg wqDCoMKgY2FzZSBBRDQxMzBfUkVGX0FWRERfQVZTUzoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmVndWxhdG9yX2dldF92b2x0YWdlKHN0LQo+ID4gPnJlZ3VsYXRv cnNbMF0uY29uc3VtZXIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSBBRDQxMzBfUkVGX1JFRk9V VF9BVlNTOgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzdC0+aW50 X3JlZl91djsKPiA+ICvCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX3BhcnNlX2Z3X3NldHVwKHN0cnVjdCBhZDQx MzBfc3RhdGUgKnN0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZCwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgYWQ0MTMwX3NldHVwX2luZm8KPiA+ICpzZXR1cF9pbmZvKQo+ID4gK3sK PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+c3BpLT5kZXY7Cj4g PiArwqDCoMKgwqDCoMKgwqB1MzIgdG1wOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHRtcCA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqBmd25vZGVf cHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJhZGksZXhjaXRhdGlvbi1jdXJyZW50LTAtCj4gPiBu YW5vYW1wIiwgJnRtcCk7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhZDQxMzBfZmluZF90YWJs ZV9pbmRleChhZDQxMzBfaW91dF9jdXJyZW50X25hX3RibCwKPiA+IHRtcCk7Cj4gPiArwqDCoMKg wqDCoMKgwqBpZiAocmV0IDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJJbnZhbGlk IGV4Y2l0YXRpb24gY3VycmVudAo+ID4gJXVuQVxuIiwgdG1wKTsKPiA+ICvCoMKgwqDCoMKgwqDC oHNldHVwX2luZm8tPmlvdXQwX3ZhbCA9IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHRt cCA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQs ICJhZGksZXhjaXRhdGlvbi1jdXJyZW50LTEtCj4gPiBuYW5vYW1wIiwgJnRtcCk7Cj4gPiArwqDC oMKgwqDCoMKgwqByZXQgPSBhZDQxMzBfZmluZF90YWJsZV9pbmRleChhZDQxMzBfaW91dF9jdXJy ZW50X25hX3RibCwKPiA+IHRtcCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYs IHJldCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJJbnZhbGlkIGV4Y2l0YXRpb24gY3VycmVudAo+ID4g JXVuQVxuIiwgdG1wKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHNldHVwX2luZm8tPmlvdXQxX3ZhbCA9 IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHRtcCA9IDA7Cj4gPiArwqDCoMKgwqDCoMKg wqBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJhZGksYnVybm91dC1jdXJyZW50LQo+ ID4gbmFub2FtcCIsICZ0bXApOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0KPiA+IGFkNDEzMF9m aW5kX3RhYmxlX2luZGV4KGFkNDEzMF9idXJub3V0X2N1cnJlbnRfbmFfdGJsLCB0bXApOwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAi SW52YWxpZCBidXJub3V0IGN1cnJlbnQKPiA+ICV1bkFcbiIsIHRtcCk7Cj4gPiArwqDCoMKgwqDC oMKgwqBzZXR1cF9pbmZvLT5idXJub3V0ID0gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg c2V0dXBfaW5mby0+cmVmX2J1ZnAgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGNoaWxkLAo+ ID4gImFkaSxidWZmZXJlZC1wb3NpdGl2ZSIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgc2V0dXBfaW5m by0+cmVmX2J1Zm0gPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGNoaWxkLAo+ID4gImFkaSxi dWZmZXJlZC1uZWdhdGl2ZSIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc2V0dXBfaW5mby0+ cmVmX3NlbCA9IEFENDEzMF9SRUZfUkVGSU4xOwo+ID4gK8KgwqDCoMKgwqDCoMKgZndub2RlX3By b3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiYWRpLHJlZmVyZW5jZS1zZWxlY3QiLAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICZzZXR1cF9pbmZvLT5yZWZfc2VsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChzZXR1cF9pbmZv LT5yZWZfc2VsID49IEFENDEzMF9SRUZfU0VMX01BWCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAiSW52YWxpZCByZWZlcmVuY2Ugc2VsZWN0ZWQKPiA+ICV1XG4iLAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc2V0dXBfaW5mby0+cmVmX3NlbCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoc2V0dXBfaW5mby0+cmVmX3NlbCA9PSBBRDQxMzBfUkVGX1JFRk9VVF9BVlNTKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0LT5pbnRfcmVmX2VuID0gdHJ1ZTsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFkNDEzMF9nZXRfcmVmX3ZvbHRhZ2Uoc3QsIHNldHVw X2luZm8tPnJlZl9zZWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQs ICJDYW5ub3QgdXNlCj4gPiByZWZlcmVuY2UgJXVcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXR1 cF9pbmZvLT5yZWZfc2VsKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF92YWxpZGF0ZV9kaWZmX2NoYW5uZWwoc3Ry dWN0IGFkNDEzMF9zdGF0ZSAqc3QsCj4gPiB1MzIgcGluKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+c3BpLT5kZXY7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBpZiAocGluID49IEFENDEzMF9NQVhfRElGRl9JTlBVVFMpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgIkludmFsaWQgZGlmZnJlZW50aWFsIGNoYW5uZWwKPiA+ICV1XG4i LCBwaW4pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHBpbiA+PSBBRDQxMzBfTUFYX0FO QUxPR19QSU5TKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0LT5waW5zX2ZuW3Bpbl0gPT0gQUQ0MTMwX1BJ Tl9GTl9TUEVDSUFMKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBk ZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJQaW4gJXUgYWxy ZWFkeSB1c2VkIHdpdGggZm4KPiA+ICV1XG4iLCBwaW4sCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdC0+ cGluc19mbltwaW5dKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0LT5waW5zX2ZuW3Bpbl0g fD0gQUQ0MTMwX1BJTl9GTl9ESUZGOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX3ZhbGlkYXRlX2RpZmZfY2hhbm5l bHMoc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUz MiAqcGlucywgdW5zaWduZWQgaW50Cj4gPiBsZW4pCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKg dW5zaWduZWQgaW50IGk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3ZhbGlkYXRlX2RpZmZfY2hhbm5lbChzdCwg cGluc1tpXSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF92YWxpZGF0ZV9leGNpdGF0aW9u X3BpbihzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCwKPiA+IHUzMiBwaW4pCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5zcGktPmRldjsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChwaW4gPj0gQUQ0MTMwX01BWF9BTkFMT0dfUElOUykKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1F SU5WQUwsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiSW52YWxpZCBleGNpdGF0aW9uIHBpbiAldVxuIiwK PiA+IHBpbik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoc3QtPnBpbnNfZm5bcGluXSA9 PSBBRDQxMzBfUElOX0ZOX1NQRUNJQUwpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg IlBpbiAldSBhbHJlYWR5IHVzZWQgd2l0aCBmbgo+ID4gJXVcbiIsIHBpbiwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0LT5waW5zX2ZuW3Bpbl0pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPnBp bnNfZm5bcGluXSB8PSBBRDQxMzBfUElOX0ZOX0VYQ0lUQVRJT047Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfdmFs aWRhdGVfdmJpYXNfcGluKHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0LCB1MzIKPiA+IHBpbikKPiA+ ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3QtPnNwaS0+ZGV2 Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHBpbiA+PSBBRDQxMzBfTUFYX0FOQUxPR19Q SU5TKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZfZXJyX3By b2JlKGRldiwgLUVJTlZBTCwgIkludmFsaWQgdmJpYXMKPiA+IHBpbiAldVxuIiwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBpbik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoc3QtPnBpbnNfZm5b cGluXSA9PSBBRDQxMzBfUElOX0ZOX1NQRUNJQUwpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIlBpbiAldSBhbHJlYWR5IHVzZWQgd2l0aCBmbgo+ID4gJXVcbiIsIHBpbiwKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0LT5waW5zX2ZuW3Bpbl0pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg c3QtPnBpbnNfZm5bcGluXSB8PSBBRDQxMzBfUElOX0ZOX1ZCSUFTOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX3Zh bGlkYXRlX3ZiaWFzX3BpbnMoc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QsCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHUzMiAqcGlucywgdW5zaWduZWQgaW50IGxlbikKPiA+ICt7Cj4gPiArwqDCoMKgwqDC oMKgwqB1bnNpZ25lZCBpbnQgaTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgc3QtPm51bV92Ymlhc19waW5zOyBpKysp IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhZDQxMzBfdmFsaWRh dGVfdmJpYXNfcGluKHN0LCBwaW5zW2ldKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYWQ0MTMwX3Bh cnNlX2Z3X2NoYW5uZWwoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBhZDQxMzBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKPiA+ICvCoMKgwqDC oMKgwqDCoHVuc2lnbmVkIGludCByZXNvbHV0aW9uID0gYWQ0MTMwX3Jlc29sdXRpb24oc3QpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGluZGV4ID0gaW5kaW9fZGV2LT5udW1fY2hh bm5lbHMrKzsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+c3Bp LT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX2NoYW5faW5mbyAqY2hhbl9p bmZvOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW47Cj4gPiAr wqDCoMKgwqDCoMKgwqB1MzIgcGluc1syXTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoaW5kZXggPj0gQUQ0MTMwX01BWF9DSEFOTkVMUykK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShk ZXYsIC1FSU5WQUwsICJUb28gbWFueQo+ID4gY2hhbm5lbHNcbiIpOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgY2hhbiA9ICZzdC0+Y2hhbnNbaW5kZXhdOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hh bl9pbmZvID0gJnN0LT5jaGFuc19pbmZvW2luZGV4XTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oCpjaGFuID0gYWQ0MTMwX2NoYW5uZWxfdGVtcGxhdGU7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFu LT5zY2FuX3R5cGUucmVhbGJpdHMgPSByZXNvbHV0aW9uOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hh bi0+c2Nhbl90eXBlLnN0b3JhZ2ViaXRzID0gcmVzb2x1dGlvbjsKPiA+ICvCoMKgwqDCoMKgwqDC oGNoYW4tPnNjYW5faW5kZXggPSBpbmRleDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoYW5f aW5mby0+c2xvdCA9IEFENDEzMF9JTlZBTElEX1NMT1Q7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFu X2luZm8tPnNldHVwLmZzID0gQUQ0MTMwX0ZJTFRFUl9TRUxFQ1RfTUlOOwo+ID4gK8KgwqDCoMKg wqDCoMKgY2hhbl9pbmZvLT5pbml0aWFsaXplZCA9IHRydWU7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqByZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoY2hpbGQsICJkaWZmLQo+ ID4gY2hhbm5lbHMiLCBwaW5zLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFS UkFZX1NJWkUocGlucykpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gYWQ0MTMwX3ZhbGlkYXRlX2RpZmZfY2hhbm5lbHMoc3QsIHBpbnMsCj4gPiBBUlJB WV9TSVpFKHBpbnMpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oGNoYW4tPmNoYW5uZWwgPSBwaW5zWzBdOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hhbi0+Y2hhbm5l bDIgPSBwaW5zWzFdOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3BhcnNl X2Z3X3NldHVwKHN0LCBjaGlsZCwgJmNoYW5faW5mby0+c2V0dXApOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0 Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxk LCAiYWRpLGV4Y2l0YXRpb24tcGluLTAiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjaGFuX2luZm8tPmlvdXQwKTsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChjaGFuX2luZm8tPnNldHVwLmlvdXQwX3ZhbCAhPSBBRDQx MzBfSU9VVF9PRkYpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBh ZDQxMzBfdmFsaWRhdGVfZXhjaXRhdGlvbl9waW4oc3QsIGNoYW5faW5mby0KPiA+ID5pb3V0MCk7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICvC oMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZ3bm9kZV9wcm9wZXJ0eV9y ZWFkX3UzMihjaGlsZCwgImFkaSxleGNpdGF0aW9uLXBpbi0xIiwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY2hhbl9p bmZvLT5pb3V0MSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoY2hhbl9pbmZvLT5zZXR1cC5pb3V0 MV92YWwgIT0gQUQ0MTMwX0lPVVRfT0ZGKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0ID0gYWQ0MTMwX3ZhbGlkYXRlX2V4Y2l0YXRpb25fcGluKHN0LCBjaGFuX2luZm8t Cj4gPiA+aW91dDEpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQp Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfcGFyc2VfZndfY2hpbGRy ZW4oc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3QtPnNwaS0+ZGV2Owo+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50 IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGluZGlvX2Rldi0+Y2hhbm5lbHMgPSBzdC0+ Y2hhbnM7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9k ZShkZXYsIGNoaWxkKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0g YWQ0MTMwX3BhcnNlX2Z3X2NoYW5uZWwoaW5kaW9fZGV2LCBjaGlsZCk7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKg fQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgYWQ0MzEwX3BhcnNlX2Z3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFkNDEzMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihp bmRpb19kZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5z cGktPmRldjsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBleHRfY2xrX2ZyZXEgPSBBRDQxMzBfTUNM S19GUkVRXzc2XzhLSFo7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgaTsKPiA+ICvC oMKgwqDCoMKgwqDCoGludCBhdmRkX3V2Owo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IGlycTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzdC0+bWNs ayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChkZXYsICJtY2xrIik7Cj4gPiArwqDCoMKgwqDCoMKg wqBpZiAoSVNfRVJSKHN0LT5tY2xrKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoc3QtPm1jbGspLAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIkZhaWxlZCB0byBnZXQgbWNsa1xuIik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqBzdC0+aW50X3Bpbl9zZWwgPSBBRDQxMzBfSU5UX1BJTl9JTlQ7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZDQxMzBfaW50X3Bpbl9uYW1lcyk7 IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlycSA9IGZ3bm9kZV9p cnFfZ2V0X2J5bmFtZShkZXZfZndub2RlKGRldiksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgCj4gPiBhZDQxMzBfaW50X3Bpbl9uYW1lc1tpXSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKGlycSA+IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3QtPmludF9waW5fc2VsID0gaTsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHN0LT5pbnRfcGluX3NlbCA9PSBBRDQxMzBfSU5UX1BJTl9ET1VU KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZfZXJyX3Byb2Jl KGRldiwgLUVJTlZBTCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJDYW5ub3QgdXNlIERPVVQgYXMgaW50 ZXJydXB0Cj4gPiBwaW5cbiIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0LT5pbnRf cGluX3NlbCA9PSBBRDQxMzBfSU5UX1BJTl9QMikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdC0+cGluc19mbltBRDQxMzBfQUlOM19QMl0gPQo+ID4gQUQ0MTMwX1BJTl9GTl9T UEVDSUFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMy KGRldiwgImFkaSxleHQtY2xrLWZyZXEtaHoiLAo+ID4gJmV4dF9jbGtfZnJlcSk7Cj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoZXh0X2Nsa19mcmVxICE9IEFENDEzMF9NQ0xLX0ZSRVFfMTUzXzZLSFog JiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBleHRfY2xrX2ZyZXEgIT0gQUQ0MTMwX01DTEtf RlJFUV83Nl84S0haKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBk ZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJJbnZhbGlkIGV4 dGVybmFsIGNsb2NrCj4gPiBmcmVxdWVuY3kgJXVcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleHRf Y2xrX2ZyZXEpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0LT5tY2xrICYmIGV4dF9j bGtfZnJlcSA9PSBBRDQxMzBfTUNMS19GUkVRXzE1M182S0haKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0LT5tY2xrX3NlbCA9IEFENDEzMF9NQ0xLXzE1M182S0haX0VYVDsK PiA+ICvCoMKgwqDCoMKgwqDCoGVsc2UgaWYgKHN0LT5tY2xrKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0LT5tY2xrX3NlbCA9IEFENDEzMF9NQ0xLXzc2XzhLSFpfRVhUOwo+ ID4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0LT5tY2xrX3NlbCA9IEFENDEzMF9NQ0xLXzc2XzhLSFo7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoc3QtPmludF9waW5fc2VsID09IEFENDEzMF9JTlRfUElOX0NMSyAmJgo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIHN0LT5tY2xrX3NlbCAhPSBBRDQxMzBfTUNMS183Nl84S0haKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZfZXJyX3Byb2JlKGRl diwgLUVJTlZBTCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJJbnZhbGlkIGNsb2NrICV1IGZvcgo+ID4g aW50ZXJydXB0IHBpbiAldVxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0LT5tY2xrX3NlbCwgc3Qt Cj4gPiA+aW50X3Bpbl9zZWwpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPmludF9yZWZf dXYgPSBBRDQxMzBfSU5UX1JFRl8yXzVWOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ ICvCoMKgwqDCoMKgwqDCoCAqIFdoZW4gdGhlIEFWREQgc3VwcGx5IGlzIHNldCB0byBiZWxvdyAy LjVWIHRoZSBpbnRlcm5hbAo+ID4gcmVmZXJlbmNlIG9mCj4gPiArwqDCoMKgwqDCoMKgwqAgKiAx LjI1ViBzaG91bGQgYmUgc2VsZWN0ZWQuCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBTZWUgZGF0YXNo ZWV0IHBhZ2UgMzcsIHNlY3Rpb24gQURDIFJFRkVSRU5DRS4KPiA+ICvCoMKgwqDCoMKgwqDCoCAq Lwo+ID4gK8KgwqDCoMKgwqDCoMKgYXZkZF91diA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdC0K PiA+ID5yZWd1bGF0b3JzWzBdLmNvbnN1bWVyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChhdmRk X3V2ID4gMCAmJiBhdmRkX3V2IDwgQUQ0MTMwX0lOVF9SRUZfMl81VikKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdC0+aW50X3JlZl91diA9IEFENDEzMF9JTlRfUkVGXzFfMjVW Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPmJpcG9sYXIgPSBkZXZpY2VfcHJvcGVydHlf cmVhZF9ib29sKGRldiwKPiA+ICJhZGksYmlwb2xhciIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gZGV2aWNlX3Byb3BlcnR5X2NvdW50X3UzMihkZXYsICJhZGksdmJpYXMtcGlucyIp Owo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA+IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAocmV0ID4gQUQ0MTMwX01BWF9BTkFMT0dfUElOUykKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldl9lcnJf cHJvYmUoZGV2LCAtRUlOVkFMLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJU b28gbWFueSB2YmlhcyBwaW5zCj4gPiAldVxuIiwgcmV0KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdC0+bnVtX3ZiaWFzX3BpbnMgPSByZXQ7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRf dTMyX2FycmF5KGRldiwKPiA+ICJhZGksdmJpYXMtcGlucyIsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0LQo+ID4gPnZiaWFzX3BpbnMsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0LQo+ID4gPm51 bV92Ymlhc19waW5zKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0 KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiRmFpbGVkIHRvIHJlYWQgdmJpYXMKPiA+IHBpbnNcbiIpOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGFkNDEzMF92YWxpZGF0ZV92Ymlhc19waW5z KHN0LCBzdC0KPiA+ID52Ymlhc19waW5zLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3QtCj4gPiA+bnVtX3ZiaWFzX3BpbnMpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhZDQxMzBfcGFyc2VfZndfY2hpbGRyZW4oaW5kaW9f ZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhZDQxMzBfZmlsbF9zY2FsZV90YmxzKHN0 cnVjdCBhZDQxMzBfc3RhdGUgKnN0KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVk IGludCBwb3cgPSBhZDQxMzBfcmVzb2x1dGlvbihzdCkgLSBzdC0+Ymlwb2xhcjsKPiA+ICvCoMKg wqDCoMKgwqDCoHVuc2lnbmVkIGludCBpLCBqOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9y IChpID0gMDsgaSA8IEFENDEzMF9SRUZfU0VMX01BWDsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1NjQgbnY7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gYWQ0MTMwX2dldF9yZWZfdm9sdGFnZShzdCwgaSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG52ID0gKHU2NClyZXQgKiBOQU5POwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaiA9IDA7IGogPCBBRDQxMzBfTUFYX1BHQTsgaisrKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdC0+c2Nh bGVfdGJsc1tpXVtqXVsxXSA9IGRpdl91NjQobnYgPj4KPiA+IChwb3cgKyBqKSwgTUlMTEkpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhZDQxMzBf Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHZvaWQgKmNsaykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqBjbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBhZDQxMzBfc2V0X21jbGtfc2VsKHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0LAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51 bSBhZDQxMzBfbWNsa19zZWwgbWNsa19zZWwpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIHJlZ21hcF91cGRhdGVfYml0cyhzdC0+cmVnbWFwLAo+ID4gQUQ0MTMwX0FEQ19DT05UUk9M X1JFRywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBBRDQxMzBfQURDX0NPTlRST0xfTUNMS19TRUxfTUFTSywKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoAo+ID4gRklFTERfUFJFUChBRDQxMzBfQURDX0NPTlRST0xfTUNMS19TRUxfTUFTSywKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWNsa19zZWwpKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgYWQ0MTMwX2ludF9jbGtfcmVjYWxjX3JhdGUoc3RydWN0 IGNsa19odyAqaHcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVu c2lnbmVkIGxvbmcKPiA+IHBhcmVudF9yYXRlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBBRDQxMzBfTUNMS19GUkVRXzc2XzhLSFo7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgYWQ0MTMwX2ludF9jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodykKPiA+ICt7Cj4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZiho dywgc3RydWN0Cj4gPiBhZDQxMzBfc3RhdGUsIGludF9jbGtfaHcpOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIHN0LT5tY2xrX3NlbCA9PSBBRDQxMzBfTUNMS183Nl84S0haX09VVDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhZDQxMzBfaW50X2Nsa19wcmVwYXJlKHN0cnVj dCBjbGtfaHcgKmh3KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfc3Rh dGUgKnN0ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QKPiA+IGFkNDEzMF9zdGF0ZSwgaW50X2Ns a19odyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gYWQ0MTMwX3NldF9tY2xrX3NlbChzdCwgQUQ0MTMwX01DTEtfNzZfOEtIWl9PVVQp Owo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPm1jbGtfc2Vs ID0gQUQ0MTMwX01DTEtfNzZfOEtIWl9PVVQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgYWQ0MTMwX2ludF9jbGtfdW5wcmVw YXJlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBh ZDQxMzBfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QKPiA+IGFkNDEzMF9zdGF0 ZSwgaW50X2Nsa19odyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3NldF9tY2xrX3NlbChzdCwgQUQ0MTMwX01DTEtfNzZf OEtIWik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0LT5tY2xrX3Nl bCA9IEFENDEzMF9NQ0xLXzc2XzhLSFo7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgY2xrX29wcyBhZDQxMzBfaW50X2Nsa19vcHMgPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqAu cmVjYWxjX3JhdGUgPSBhZDQxMzBfaW50X2Nsa19yZWNhbGNfcmF0ZSwKPiA+ICvCoMKgwqDCoMKg wqDCoC5pc19lbmFibGVkID0gYWQ0MTMwX2ludF9jbGtfaXNfZW5hYmxlZCwKPiA+ICvCoMKgwqDC oMKgwqDCoC5wcmVwYXJlID0gYWQ0MTMwX2ludF9jbGtfcHJlcGFyZSwKPiA+ICvCoMKgwqDCoMKg wqDCoC51bnByZXBhcmUgPSBhZDQxMzBfaW50X2Nsa191bnByZXBhcmUsCj4gPiArfTsKPiA+ICsK PiA+ICtzdGF0aWMgaW50IGFkNDEzMF9zZXR1cF9pbnRfY2xrKHN0cnVjdCBhZDQxMzBfc3RhdGUg KnN0KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+ c3BpLT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUg PSBkZXZfb2Zfbm9kZShkZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsa19pbml0X2Rh dGEgaW5pdDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmNsa19uYW1lOwo+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGNsayAqY2xrOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHN0LT5pbnRfcGluX3NlbCA9PSBBRDQxMzBfSU5UX1BJTl9DTEsgfHwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdC0+bWNsa19zZWwgIT0gQUQ0MTMwX01DTEtfNzZfOEtIWikKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmICghb2Zfbm9kZSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGNsa19uYW1lID0gb2Zfbm9kZS0+bmFtZTsK PiA+ICvCoMKgwqDCoMKgwqDCoG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG9mX25vZGUsICJjbG9j ay1vdXRwdXQtbmFtZXMiLAo+ID4gJmNsa19uYW1lKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oGluaXQubmFtZSA9IGNsa19uYW1lOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW5pdC5vcHMgPSAmYWQ0 MTMwX2ludF9jbGtfb3BzOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPmludF9jbGtfaHcu aW5pdCA9ICZpbml0Owo+ID4gK8KgwqDCoMKgwqDCoMKgY2xrID0gZGV2bV9jbGtfcmVnaXN0ZXIo ZGV2LCAmc3QtPmludF9jbGtfaHcpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihjbGsp KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGNsayk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gb2ZfY2xrX2FkZF9wcm92aWRlcihvZl9u b2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsCj4gPiBjbGspOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IGFkNDEzMF9zZXR1cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQo+ID4gK3sK PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5k aW9fZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+c3Bp LT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgaW50X3JlZl92YWw7Cj4gPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIHJhdGUgPSBBRDQxMzBfTUNMS19GUkVRXzc2XzhL SFo7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgdmFsOwo+ID4gK8KgwqDCoMKgwqDC oMKgdW5zaWduZWQgaW50IGk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHN0LT5tY2xrX3NlbCA9PSBBRDQxMzBfTUNMS18xNTNfNktIWl9F WFQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmF0ZSA9IEFENDEzMF9NQ0xL X0ZSRVFfMTUzXzZLSFo7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBjbGtfc2V0X3Jh dGUoc3QtPm1jbGssIHJhdGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHN0LT5tY2xrKTsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNl dChkZXYsCj4gPiBhZDQxMzBfY2xrX2Rpc2FibGVfdW5wcmVwYXJlLAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0LT5tY2xrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChzdC0+aW50X3JlZl91diA9PSBBRDQxMzBfSU5UX1JFRl8yXzVWKQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludF9yZWZfdmFsID0gQUQ0MTMwX0lOVF9SRUZfVkFM XzJfNVY7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaW50X3JlZl92YWwgPSBBRDQxMzBfSU5UX1JFRl9WQUxfMV8yNVY7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqAvKiBTd2l0Y2ggdG8gU1BJIDQtd2lyZSBtb2RlLiAqLwo+ID4gK8Kg wqDCoMKgwqDCoMKgdmFsID3CoCBGSUVMRF9QUkVQKEFENDEzMF9BRENfQ09OVFJPTF9DU0JfRU5f TUFTSywgMSk7Cj4gPiArwqDCoMKgwqDCoMKgwqB2YWwgfD0gRklFTERfUFJFUChBRDQxMzBfQURD X0NPTlRST0xfQklQT0xBUl9NQVNLLCBzdC0KPiA+ID5iaXBvbGFyKTsKPiA+ICvCoMKgwqDCoMKg wqDCoHZhbCB8PSBGSUVMRF9QUkVQKEFENDEzMF9BRENfQ09OVFJPTF9JTlRfUkVGX0VOX01BU0ss IHN0LQo+ID4gPmludF9yZWZfZW4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgdmFsIHw9IEZJRUxEX1BS RVAoQUQ0MTMwX0FEQ19DT05UUk9MX01PREVfTUFTSywKPiA+IEFENDEzMF9NT0RFX0lETEUpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgdmFsIHw9IEZJRUxEX1BSRVAoQUQ0MTMwX0FEQ19DT05UUk9MX01D TEtfU0VMX01BU0ssIHN0LQo+ID4gPm1jbGtfc2VsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCB8 PSBGSUVMRF9QUkVQKEFENDEzMF9BRENfQ09OVFJPTF9JTlRfUkVGX1ZBTF9NQVNLLAo+ID4gaW50 X3JlZl92YWwpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3dyaXRlKHN0 LT5yZWdtYXAsIEFENDEzMF9BRENfQ09OVFJPTF9SRUcsCj4gPiB2YWwpOwo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g cmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIENv bmZpZ3VyZSBhbGwgR1BJT3MgZm9yIG91dHB1dC4gSWYgY29uZmlndXJlZCwgdGhlCj4gPiBpbnRl cnJ1cHQgZnVuY3Rpb24KPiA+ICvCoMKgwqDCoMKgwqDCoCAqIG9mIFAyIHRha2VzIHByaW9yaXR5 IG92ZXIgdGhlIEdQSU8gb3V0IGZ1bmN0aW9uLgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiAr wqDCoMKgwqDCoMKgwqB2YWwgPcKgIEFENDEzMF9JT19DT05UUk9MX0dQSU9fQ1RSTF9NQVNLOwo+ ID4gK8KgwqDCoMKgwqDCoMKgdmFsIHw9IEZJRUxEX1BSRVAoQUQ0MTMwX0lPX0NPTlRST0xfSU5U X1BJTl9TRUxfTUFTSywgc3QtCj4gPiA+aW50X3Bpbl9zZWwpOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gcmVnbWFwX3dyaXRlKHN0LT5yZWdtYXAsIEFENDEzMF9JT19DT05UUk9MX1JF RywgdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9 IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgc3QtPm51bV92Ymlhc19waW5z OyBpKyspCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsIHw9IEJJVChzdC0+ dmJpYXNfcGluc1tpXSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSByZWdtYXBfd3Jp dGUoc3QtPnJlZ21hcCwgQUQ0MTMwX1ZCSUFTX1JFRywgdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhzdC0+cmVn bWFwLAo+ID4gQUQ0MTMwX0ZJRk9fQ09OVFJPTF9SRUcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQUQ0MTMwX0ZJRk9f Q09OVFJPTF9IRUFERVJfTUFTSywKPiA+IDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgLyogRklGTyB3YXRlcm1hcmsgaW50ZXJydXB0IHN0YXJ0cyBvdXQgYXMg ZW5hYmxlZCwgZGlzYWJsZQo+ID4gaXQuICovCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhZDQx MzBfc2V0X3dhdGVybWFya19pbnRlcnJ1cHRfZW4oc3QsIGZhbHNlKTsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFNldHVwIGNoYW5uZWxzLiAqLwo+ID4gK8Kg wqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGluZGlvX2Rldi0+bnVtX2NoYW5uZWxzOyBpKysp IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWQ0MTMwX2NoYW5f aW5mbyAqY2hhbl9pbmZvID0gJnN0LQo+ID4gPmNoYW5zX2luZm9baV07Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW4gPSAmc3QtPmNo YW5zW2ldOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCB2 YWw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gRklFTERf UFJFUChBRDQxMzBfQ0hBTk5FTF9BSU5QX01BU0ssIGNoYW4tCj4gPiA+Y2hhbm5lbCkgfAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChBRDQx MzBfQ0hBTk5FTF9BSU5NX01BU0ssIGNoYW4tCj4gPiA+Y2hhbm5lbDIpIHwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoQUQ0MTMwX0NIQU5O RUxfSU9VVDFfTUFTSywKPiA+IGNoYW5faW5mby0+aW91dDApIHwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoQUQ0MTMwX0NIQU5ORUxfSU9V VDJfTUFTSywKPiA+IGNoYW5faW5mby0+aW91dDEpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IHJlZ21hcF93cml0ZShzdC0+cmVnbWFwLAo+ID4gQUQ0MTMw X0NIQU5ORUxfWF9SRUcoaSksIHZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGFkNDEzMF9zb2Z0 X3Jlc2V0KHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDC oGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBzcGlfd3JpdGUoc3QtPnNw aSwgc3QtPnJlc2V0X2J1Ziwgc2l6ZW9mKHN0LQo+ID4gPnJlc2V0X2J1ZikpOwo+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZnNsZWVwKEFENDEzMF9SRVNFVF9TTEVF UF9VUyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgYWQ0MTMwX2Rpc2FibGVfcmVndWxhdG9ycyh2b2lkICpkYXRhKQo+ID4g K3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhZDQxMzBfc3RhdGUgKnN0ID0gZGF0YTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShz dC0+cmVndWxhdG9ycyksIHN0LQo+ID4gPnJlZ3VsYXRvcnMpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IGFkNDEzMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ID4gK3sKPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZzcGktPmRldjsKPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgYWQ0MTMwX3N0YXRlICpzdDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqBpbmRpb19kZXYgPSBkZXZtX2lpb19kZXZpY2VfYWxsb2MoZGV2 LCBzaXplb2YoKnN0KSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWluZGlvX2RldikKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoG1lbXNldChzdC0+cmVzZXRfYnVmLCAweGZmLCBzaXplb2Yoc3QtPnJlc2V0X2J1Zikp Owo+ID4gK8KgwqDCoMKgwqDCoMKgaW5pdF9jb21wbGV0aW9uKCZzdC0+Y29tcGxldGlvbik7Cj4g PiArwqDCoMKgwqDCoMKgwqBtdXRleF9pbml0KCZzdC0+bG9jayk7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdC0+c3BpID0gc3BpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKgwqDC oMKgwqDCoCAqIFhmZXI6wqDCoCBbIFhGUjEgXSBbwqDCoMKgwqDCoMKgwqDCoCBYRlIywqDCoMKg wqDCoMKgwqDCoCBdCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBNYXN0ZXI6wqAgMHg3RCBOwqDCoCAu Li4uLi4uLi4uLi4uLi4uLi4uLi4uCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBTbGF2ZTrCoMKgIC4u Li4uLsKgwqAgREFUQTEgREFUQTIgLi4uIERBVEFOCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ ICvCoMKgwqDCoMKgwqDCoHN0LT5maWZvX3R4X2J1ZlswXSA9IEFENDEzMF9DT01NU19SRUFEX01B U0sgfAo+ID4gQUQ0MTMwX0ZJRk9fREFUQV9SRUc7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdC0+Zmlm b194ZmVyWzBdLnR4X2J1ZiA9IHN0LT5maWZvX3R4X2J1ZjsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0 LT5maWZvX3hmZXJbMF0ubGVuID0gc2l6ZW9mKHN0LT5maWZvX3R4X2J1Zik7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdC0+Zmlmb194ZmVyWzFdLnJ4X2J1ZiA9IHN0LT5maWZvX3J4X2J1ZjsKPiA+ICvC oMKgwqDCoMKgwqDCoHNwaV9tZXNzYWdlX2luaXRfd2l0aF90cmFuc2ZlcnMoJnN0LT5maWZvX21z Zywgc3QtCj4gPiA+Zmlmb194ZmVyLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFSUkFZX1NJ WkUoc3QtPmZpZm9feGZlcikpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaW5kaW9fZGV2LT5u YW1lID0gQUQ0MTMwX05BTUU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbmRpb19kZXYtPm1vZGVzID0g SU5ESU9fRElSRUNUX01PREU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbmRpb19kZXYtPmluZm8gPSAm YWQ0MTMwX2luZm87Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzdC0+cmVnbWFwID0gZGV2bV9y ZWdtYXBfaW5pdChkZXYsIE5VTEwsIHN0LAo+ID4gJmFkNDEzMF9yZWdtYXBfY29uZmlnKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoc3QtPnJlZ21hcCkpCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoc3QtPnJlZ21hcCk7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBzdC0+cmVndWxhdG9yc1swXS5zdXBwbHkgPSAiYXZkZCI7Cj4gPiArwqDC oMKgwqDCoMKgwqBzdC0+cmVndWxhdG9yc1sxXS5zdXBwbHkgPSAiaW92ZGQiOwo+ID4gK8KgwqDC oMKgwqDCoMKgc3QtPnJlZ3VsYXRvcnNbMl0uc3VwcGx5ID0gInJlZmluMSI7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdC0+cmVndWxhdG9yc1szXS5zdXBwbHkgPSAicmVmaW4yIjsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGRldiwgQVJSQVlfU0la RShzdC0KPiA+ID5yZWd1bGF0b3JzKSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3QtPnJlZ3VsYXRv cnMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkZhaWxlZCB0byBnZXQK PiA+IHJlZ3VsYXRvcnNcbiIpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVndWxh dG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoc3QtPnJlZ3VsYXRvcnMpLCBzdC0KPiA+ID5yZWd1 bGF0b3JzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8g ZW5hYmxlCj4gPiByZWd1bGF0b3JzXG4iKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsCj4gPiBhZDQxMzBfZGlzYWJsZV9yZWd1bGF0 b3JzLCBzdCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIkZhaWxlZCB0byBhZGQgcmVndWxhdG9ycwo+ID4gZGlzYWJsZSBhY3Rpb25cbiIp Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MTMwX3NvZnRfcmVzZXQoc3QpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWQ0MzEwX3Bh cnNlX2Z3KGluZGlvX2Rldik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqByZXQgPSBhZDQxMzBfc2V0dXAoaW5kaW9fZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFkNDEzMF9zZXR1cF9pbnRfY2xrKHN0KTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGFkNDEzMF9maWxsX3NjYWxl X3RibHMoc3QpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPmdjLm93bmVyID0gVEhJU19N T0RVTEU7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdC0+Z2MubGFiZWwgPSBBRDQxMzBfTkFNRTsKPiA+ ICvCoMKgwqDCoMKgwqDCoHN0LT5nYy5iYXNlID0gLTE7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdC0+ Z2MubmdwaW8gPSBBRDQxMzBfTUFYX0dQSU9TOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3QtPmdjLnBh cmVudCA9IGRldjsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0LT5nYy5jYW5fc2xlZXAgPSB0cnVlOwo+ ID4gK8KgwqDCoMKgwqDCoMKgc3QtPmdjLmluaXRfdmFsaWRfbWFzayA9IGFkNDEzMF9ncGlvX2lu aXRfdmFsaWRfbWFzazsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0LT5nYy5nZXRfZGlyZWN0aW9uID0g YWQ0MTMwX2dwaW9fZ2V0X2RpcmVjdGlvbjsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0LT5nYy5zZXQg PSBhZDQxMzBfZ3Bpb19zZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkZXZtX2dw aW9jaGlwX2FkZF9kYXRhKGRldiwgJnN0LT5nYywgc3QpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZGV2bV9paW9fa2ZpZm9fYnVmZmVyX3NldHVwX2V4 dChkZXYsIGluZGlvX2RldiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZh ZDQxMzBfYnVmZmVyX29wcywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4g PiBhZDQxMzBfZmlmb19hdHRyaWJ1dGVzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBzcGktPmly cSwgTlVMTCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZDQxMzBfaXJxX2hhbmRsZXIsCj4g PiBJUlFGX09ORVNIT1QsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5kaW9fZGV2LT5uYW1l LAo+ID4gaW5kaW9fZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJG YWlsZWQgdG8gcmVxdWVzdAo+ID4gaXJxXG4iKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8q Cj4gPiArwqDCoMKgwqDCoMKgwqAgKiBXaGVuIHRoZSBjaGlwIGVudGVycyBGSUZPIG1vZGUsIElS USBwb2xhcml0eSBpcwo+ID4gaW52ZXJ0ZWQuCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBXaGVuIHRo ZSBjaGlwIGV4aXRzIEZJRk8gbW9kZSwgSVJRIHBvbGFyaXR5IHJldHVybnMgdG8KPiA+IG5vcm1h bC4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqIFNlZSBkYXRhc2hlZXQgcGFnZXM6IDY1LCBGSUZPIFdh dGVybWFyayBJbnRlcnJ1cHQKPiA+IHNlY3Rpb24sCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBhbmQg NzEsIEJpdCBEZXNjcmlwdGlvbnMgZm9yIFNUQVRVUyBSZWdpc3RlciwgUkRZQi4KPiA+ICvCoMKg wqDCoMKgwqDCoCAqIENhY2hlIHRoZSBub3JtYWwgYW5kIGludmVydGVkIElSUSB0cmlnZ2VycyB0 byBzZXQgdGhlbQo+ID4gd2hlbgo+ID4gK8KgwqDCoMKgwqDCoMKgICogZW50ZXJpbmcgYW5kIGV4 aXRpbmcgRklGTyBtb2RlLgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDCoMKg wqBzdC0+aXJxX3RyaWdnZXIgPSBpcnFfZ2V0X3RyaWdnZXJfdHlwZShzcGktPmlycSk7Cj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoc3QtPmlycV90cmlnZ2VyICYgSVJRRl9UUklHR0VSX1JJU0lORykK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdC0+aW52X2lycV90cmlnZ2VyID0g SVJRRl9UUklHR0VSX0ZBTExJTkc7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChzdC0+aXJx X3RyaWdnZXIgJiBJUlFGX1RSSUdHRVJfRkFMTElORykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzdC0+aW52X2lycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX1JJU0lORzsKPiA+ ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsICJJbnZhbGlkIGlycQo+ID4gZmxhZ3M6 ICV1XG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3QtPmlycV90cmlnZ2VyKTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBkZXZtX2lpb19kZXZpY2VfcmVnaXN0ZXIoZGV2LCBpbmRpb19k ZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBh ZDQxMzBfb2ZfbWF0Y2hbXSA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoHsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuY29tcGF0aWJsZSA9ICJhZGksYWQ0MTMwIiwKPiA+ICvCoMKg wqDCoMKgwqDCoH0sCj4gPiArwqDCoMKgwqDCoMKgwqB7IH0KPiA+ICt9Owo+ID4gK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIGFkNDEzMF9vZl9tYXRjaCk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVj dCBzcGlfZHJpdmVyIGFkNDEzMF9kcml2ZXIgPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqAuZHJpdmVy ID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lID0gQUQ0MTMwX05B TUUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9mX21hdGNoX3RhYmxlID0g YWQ0MTMwX29mX21hdGNoLAo+ID4gK8KgwqDCoMKgwqDCoMKgfSwKPiA+ICvCoMKgwqDCoMKgwqDC oC5wcm9iZSA9IGFkNDEzMF9wcm9iZSwKPiA+ICt9Owo+ID4gK21vZHVsZV9zcGlfZHJpdmVyKGFk NDEzMF9kcml2ZXIpOwo+ID4gKwo+ID4gK01PRFVMRV9BVVRIT1IoIkNvc21pbiBUYW5pc2xhdiA8 Y29zbWluLnRhbmlzbGF2QGFuYWxvZy5jb20+Iik7Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJB bmFsb2cgRGV2aWNlcyBBRDQxMzAgU1BJIGRyaXZlciIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsKPiAKCg==