From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 285AFC433E1 for ; Mon, 24 Aug 2020 10:33:05 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DF5B42075B for ; Mon, 24 Aug 2020 10:33:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="cdaZpDQl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DF5B42075B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 8404D8851E; Mon, 24 Aug 2020 10:33:04 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NcuJQo2vU46u; Mon, 24 Aug 2020 10:33:02 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 7BBCA8850E; Mon, 24 Aug 2020 10:33:02 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6B917C016F; Mon, 24 Aug 2020 10:33:02 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 35E1BC0051 for ; Mon, 24 Aug 2020 10:33:01 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 271DA8850E for ; Mon, 24 Aug 2020 10:33:01 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xjG+Vgbaxi2C for ; Mon, 24 Aug 2020 10:32:59 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-ed1-f65.google.com (mail-ed1-f65.google.com [209.85.208.65]) by hemlock.osuosl.org (Postfix) with ESMTPS id 8BF168851E for ; Mon, 24 Aug 2020 10:32:58 +0000 (UTC) Received: by mail-ed1-f65.google.com with SMTP id k25so7533610edj.13 for ; Mon, 24 Aug 2020 03:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=gQJsdW9V+/O/V6viLqmhaLN2g7JwKwLu9J/aT+L/weo=; b=cdaZpDQlkAjWBwm5OjUe12TCF7bqBxV/JfzoEPQoYwICM3068SGGxOoS60+u3dgG3T B6KBzeiPCZTvRnNqYdziUS24QgRnvg2A42Ebm+5VvJmysEwHKOlvn0RLuMNnsvPvJ6Td POL/3dyqXixjviEWVSK1cZ61wBCJyUlTWxrR3J4s43FRB2C8KbLyjQSblXCzkCzS0W2J qyFqadhiumetB0c6dXQdMrV7jFvxxcS17bFKeFy5GgX4ESICfEVg3TJcgqcKPIDes2cT Xdikw1/35IT5PR2IubTrO+SdtlZIH4kdvm3qLvPwTFfYkxp/xBJgcoWDK1m6eQRfZvPq M8Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=gQJsdW9V+/O/V6viLqmhaLN2g7JwKwLu9J/aT+L/weo=; b=eR1jRDK0wq5c9KQp1toU0X7UOHul3RedeBxvpHNFyA7+KXOaR4CD1DIXjImZr1bxm/ Pcgz/Wfba2WBSg9QxFE19R7bqxqzrwmxdothzor4DkANx9xenpiN9regVMe2Jp8smKVY e9ynIIRWx1w3B6L8L3gW2hWG5ZSZZ+HE+ghGe6mhMRZm+bUS5t5EWFtW67aQ4vfCxEpp WEbZJ/oFBz0YFVg0oLLv2SrXA5dOdKPK+s5WV4lsmkQgtsJKfyRJegPmHXwEdy0buTb/ NPkYYhRrorseNk/ok9ZYNkFNobZOg0rqmIYatoz+WiSm8WIHM96w8LaZ87ZL6plCto9F kegQ== X-Gm-Message-State: AOAM531MMYrdgY/Vn9vuREV83kG8bcCSBeRhOwdWDHgmZyPTkN0oue8a lkiyuU09fAqCXcbGgpH201Ohdg== X-Google-Smtp-Source: ABdhPJwWd8QMtprqxDgyS0FAQKX9nQkMyfOfsXe/S8HwKO9QfEIaSYo7iJr9hwlr4m9+L9/onUD3BQ== X-Received: by 2002:a05:6402:748:: with SMTP id p8mr4856393edy.305.1598265176484; Mon, 24 Aug 2020 03:32:56 -0700 (PDT) Received: from myrica ([2001:1715:4e26:a7e0:116c:c27a:3e7f:5eaf]) by smtp.gmail.com with ESMTPSA id r18sm9436293ejz.118.2020.08.24.03.32.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2020 03:32:55 -0700 (PDT) Date: Mon, 24 Aug 2020 12:32:39 +0200 From: Jean-Philippe Brucker To: Jacob Pan Subject: Re: [PATCH v2 1/9] docs: Document IO Address Space ID (IOASID) APIs Message-ID: <20200824103239.GA3210689@myrica> References: <1598070918-21321-1-git-send-email-jacob.jun.pan@linux.intel.com> <1598070918-21321-2-git-send-email-jacob.jun.pan@linux.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1598070918-21321-2-git-send-email-jacob.jun.pan@linux.intel.com> Cc: "Tian, Kevin" , Raj Ashok , Jean-Philippe Brucker , LKML , iommu@lists.linux-foundation.org, Wu Hao , David Woodhouse X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" T24gRnJpLCBBdWcgMjEsIDIwMjAgYXQgMDk6MzU6MTBQTSAtMDcwMCwgSmFjb2IgUGFuIHdyb3Rl Ogo+IElPQVNJRCBpcyB1c2VkIHRvIGlkZW50aWZ5IGFkZHJlc3Mgc3BhY2VzIHRoYXQgY2FuIGJl IHRhcmdldGVkIGJ5IGRldmljZQo+IERNQS4gSXQgaXMgYSBzeXN0ZW0td2lkZSByZXNvdXJjZSB0 aGF0IGlzIGVzc2VudGlhbCB0byBpdHMgbWFueSB1c2Vycy4KPiBUaGlzIGRvY3VtZW50IGlzIGFu IGF0dGVtcHQgdG8gaGVscCBkZXZlbG9wZXJzIGZyb20gYWxsIHZlbmRvcnMgbmF2aWdhdGUKPiB0 aGUgQVBJcy4gQXQgdGhpcyB0aW1lLCBBUk0gU01NVSBhbmQgSW50ZWzigJlzIFNjYWxhYmxlIElP IFZpcnR1YWxpemF0aW9uCj4gKFNJT1YpIGVuYWJsZWQgcGxhdGZvcm1zIGFyZSB0aGUgcHJpbWFy eSB1c2VycyBvZiBJT0FTSUQuIEV4YW1wbGVzIG9mCj4gaG93IFNJT1YgY29tcG9uZW50cyBpbnRl cmFjdCB3aXRoIElPQVNJRCBBUElzIGFyZSBwcm92aWRlZCBpbiB0aGF0IG1hbnkKPiBBUElzIGFy ZSBkcml2ZW4gYnkgdGhlIHJlcXVpcmVtZW50cyBmcm9tIFNJT1YuCj4gCj4gU2lnbmVkLW9mZi1i eTogTGl1IFlpIEwgPHlpLmwubGl1QGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBXdSBIYW8g PGhhby53dUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmFjb2IgUGFuIDxqYWNvYi5qdW4u cGFuQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgRG9jdW1lbnRhdGlvbi9pb2FzaWQucnN0IHwg NjE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEg ZmlsZSBjaGFuZ2VkLCA2MTggaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9j dW1lbnRhdGlvbi9pb2FzaWQucnN0Cj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9h c2lkLnJzdCBiL0RvY3VtZW50YXRpb24vaW9hc2lkLnJzdAoKVGhhbmtzIGZvciB3cml0aW5nIHRo aXMgdXAuIFNob3VsZCBpdCBnbyB0byBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvLCBvcgpEb2N1 bWVudGF0aW9uL2RyaXZlci1hcGkvaW9tbXUvPyBJIHRoaW5rIHRoaXMgYWxzbyBuZWVkcyB0byBD YwpsaW51eC1kb2NAdmdlci5rZXJuZWwub3JnIGFuZCBjb3JiZXRAbHduLm5ldAoKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjZhOGNkYzg4NWZmCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vaW9hc2lkLnJzdAo+IEBAIC0wLDAgKzEsNjE4 IEBACj4gKy4uIGlvYXNpZDoKPiArCj4gKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KPiArSU8gQWRkcmVzcyBTcGFjZSBJRAo+ICs9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Cj4gKwo+ICtJT0FTSUQgaXMgYSBnZW5lcmljIG5hbWUgZm9yIFBDSWUgUHJv Y2VzcyBBZGRyZXNzIElEIChQQVNJRCkgb3IgQVJNCj4gK1NNTVUgc3ViLXN0cmVhbSBJRC4gQW4g SU9BU0lEIGlkZW50aWZpZXMgYW4gYWRkcmVzcyBzcGFjZSB0aGF0IERNQQoKIlN1YnN0cmVhbUlE IgoKPiArcmVxdWVzdHMgY2FuIHRhcmdldC4KPiArCj4gK1RoZSBwcmltYXJ5IHVzZSBjYXNlcyBm b3IgSU9BU0lEIGFyZSBTaGFyZWQgVmlydHVhbCBBZGRyZXNzIChTVkEpIGFuZAo+ICtJTyBWaXJ0 dWFsIEFkZHJlc3MgKElPVkEpLiBIb3dldmVyLCB0aGUgcmVxdWlyZW1lbnRzIGZvciBJT0FTSUQK CklPVkEgYWxvbmUgaXNuJ3QgYSB1c2UgY2FzZSwgbWF5YmUgIm11bHRpcGxlIElPVkEgc3BhY2Vz IHBlciBkZXZpY2UiPwoKPiArbWFuYWdlbWVudCBjYW4gdmFyeSBhbW9uZyBoYXJkd2FyZSBhcmNo aXRlY3R1cmVzLgo+ICsKPiArVGhpcyBkb2N1bWVudCBjb3ZlcnMgdGhlIGdlbmVyaWMgZmVhdHVy ZXMgc3VwcG9ydGVkIGJ5IElPQVNJRAo+ICtBUElzLiBWZW5kb3Itc3BlY2lmaWMgdXNlIGNhc2Vz IGFyZSBhbHNvIGlsbHVzdHJhdGVkIHdpdGggSW50ZWwncyBWVC1kCj4gK2Jhc2VkIHBsYXRmb3Jt cyBhcyB0aGUgZmlyc3QgZXhhbXBsZS4KPiArCj4gKy4uIGNvbnRlbnRzOjogOmxvY2FsOgo+ICsK PiArR2xvc3NhcnkKPiArPT09PT09PT0KPiArUEFTSUQgLSBQcm9jZXNzIEFkZHJlc3MgU3BhY2Ug SUQKPiArCj4gK0lPQVNJRCAtIElPIEFkZHJlc3MgU3BhY2UgSUQgKGdlbmVyaWMgdGVybSBmb3Ig UENJZSBQQVNJRCBhbmQKPiArc3ViLXN0cmVhbSBJRCBpbiBTTU1VKQoKIlN1YnN0cmVhbUlEIgoK PiArCj4gK1NWQS9TVk0gLSBTaGFyZWQgVmlydHVhbCBBZGRyZXNzaW5nL01lbW9yeQo+ICsKPiAr RU5RQ01EIC0gTmV3IEludGVsIFg4NiBJU0EgZm9yIGVmZmljaWVudCB3b3JrcXVldWUgc3VibWlz c2lvbiBbMV0KCk1heWJlIGRyb3AgdGhlICJOZXciLCB0byBrZWVwIHRoZSBkb2N1bWVudGF0aW9u IHBlcmVubmlhbC4gSXQgbWlnaHQgYmUKZ29vZCB0byBhZGQgaW50ZXJuYWwgbGlua3MgaGVyZSB0 byB0aGUgc3BlY2lmaWNhdGlvbnMgVVJMcyBhdCB0aGUgYm90dG9tLgoKPiArCj4gK0RTQSAtIElu dGVsIERhdGEgU3RyZWFtaW5nIEFjY2VsZXJhdG9yIFsyXQo+ICsKPiArVkRDTSAtIFZpcnR1YWwg ZGV2aWNlIGNvbXBvc2l0aW9uIG1vZHVsZSBbM10KPiArCj4gK1NJT1YgLSBJbnRlbCBTY2FsYWJs ZSBJTyBWaXJ0dWFsaXphdGlvbgo+ICsKPiArCj4gK0tleSBDb25jZXB0cwo+ICs9PT09PT09PT09 PT0KPiArCj4gK0lPQVNJRCBTZXQKPiArLS0tLS0tLS0tLS0KPiArQW4gSU9BU0lEIHNldCBpcyBh IGdyb3VwIG9mIElPQVNJRHMgYWxsb2NhdGVkIGZyb20gdGhlIHN5c3RlbS13aWRlCj4gK0lPQVNJ RCBwb29sLiBBbiBJT0FTSUQgc2V0IGlzIGNyZWF0ZWQgYW5kIGNhbiBiZSBpZGVudGlmaWVkIGJ5 IGEKPiArdG9rZW4gb2YgdTY0LiBSZWZlciB0byBJT0FTSUQgc2V0IEFQSXMgZm9yIG1vcmUgZGV0 YWlscy4KCklkZW50aWZpZWQgZWl0aGVyIGJ5IGFuIHU2NCBvciBhbiBtbV9zdHJ1Y3QsIHJpZ2h0 PyAgTWF5YmUganVzdCBkcm9wIHRoZQpzZWNvbmQgc2VudGVuY2UgaWYgaXQncyBkZXRhaWxlZCBp biB0aGUgSU9BU0lEIHNldCBzZWN0aW9uIGJlbG93LgoKPiArCj4gK0lPQVNJRCBzZXQgaXMgcGFy dGljdWxhcmx5IHVzZWZ1bCBmb3IgZ3Vlc3QgU1ZBIHdoZXJlIGVhY2ggZ3Vlc3QgY291bGQKPiAr aGF2ZSBpdHMgb3duIElPQVNJRCBzZXQgZm9yIHNlY3VyaXR5IGFuZCBlZmZpY2llbmN5IHJlYXNv bnMuCj4gKwo+ICtJT0FTSUQgU2V0IFByaXZhdGUgSUQgKFNQSUQpCj4gKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiArU1BJRHMgYXJlIGludHJvZHVjZWQgYXMgSU9BU0lEcyB3aXRoaW4g aXRzIHNldC4gRWFjaCBTUElEIG1hcHMgdG8gYQo+ICtzeXN0ZW0td2lkZSBJT0FTSUQgYnV0IHRo ZSBuYW1lc3BhY2Ugb2YgU1BJRCBpcyB3aXRoaW4gaXRzIElPQVNJRAo+ICtzZXQuCgpUaGUgaW50 cm8gaXNuJ3Qgc3VwZXIgY2xlYXIuIFBlcmhhcHMgdGhpcyBpcyBzaW1wbGVyOgoiRWFjaCBJT0FT SUQgc2V0IGhhcyBhIHByaXZhdGUgbmFtZXNwYWNlIG9mIFNQSURzLiBBbiBTUElEIG1hcHMgdG8g YQpzaW5nbGUgc3lzdGVtLXdpZGUgSU9BU0lELiIKCj4gU1BJRHMgY2FuIGJlIHVzZWQgYXMgZ3Vl c3QgSU9BU0lEcyB3aGVyZSBlYWNoIGd1ZXN0IGNvdWxkIGRvCj4gK0lPQVNJRCBhbGxvY2F0aW9u IGZyb20gaXRzIG93biBwb29sIGFuZCBtYXAgdGhlbSB0byBob3N0IHBoeXNpY2FsCj4gK0lPQVNJ RHMuIFNQSURzIGFyZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzdXBwb3J0aW5nIGxpdmUgbWln cmF0aW9uCj4gK3doZXJlIGRlY291cGxpbmcgZ3Vlc3QgYW5kIGhvc3QgcGh5c2ljYWwgcmVzb3Vy Y2VzIGFyZSBuZWNlc3NhcnkuCj4gKwo+ICtGb3IgZXhhbXBsZSwgdHdvIFZNcyBjYW4gYm90aCBh bGxvY2F0ZSBndWVzdCBQQVNJRC9TUElEICMxMDEgYnV0IG1hcCB0bwo+ICtkaWZmZXJlbnQgaG9z dCBQQVNJRHMgIzIwMSBhbmQgIzIwMiByZXNwZWN0aXZlbHkgYXMgc2hvd24gaW4gdGhlCj4gK2Rp YWdyYW0gYmVsb3cuCj4gKzo6Cj4gKwo+ICsgLi0tLS0tLS0tLS0tLS0tLS0tLS4gICAgLi0tLS0t LS0tLS0tLS0tLS0tLS4KPiArIHwgICBWTSAxICAgICAgICAgICB8ICAgIHwgICBWTSAyICAgICAg ICAgICB8Cj4gKyB8ICAgICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgICAgICAgICAgfAo+ ICsgfC0tLS0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLS0tLXwKPiArIHwgR1BB U0lEL1NQSUQgMTAxICB8ICAgIHwgR1BBU0lEL1NQSUQgMTAxICB8Cj4gKyAnLS0tLS0tLS0tLS0t LS0tLS0tJyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tJyAgICAgR3Vlc3QKPiArIF9fX19fX19fX198 X19fX19fX19fX19fX19fX19fX19fX3xfX19fX19fX19fX19fX19fX19fX19fCj4gKyAgICAgICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgSG9zdAo+ICsgICAgICAg ICAgIHYgICAgICAgICAgICAgICAgICAgICAgdgo+ICsgLi0tLS0tLS0tLS0tLS0tLS0tLS4gICAg Li0tLS0tLS0tLS0tLS0tLS0tLS4KPiArIHwgSG9zdCBJT0FTSUQgMjAxICB8ICAgIHwgSG9zdCBJ T0FTSUQgMjAyICB8Cj4gKyAnLS0tLS0tLS0tLS0tLS0tLS0tJyAgICAnLS0tLS0tLS0tLS0tLS0t LS0tJwo+ICsgfCAgIElPQVNJRCBzZXQgMSAgIHwgICAgfCAgIElPQVNJRCBzZXQgMiAgIHwKPiAr ICctLS0tLS0tLS0tLS0tLS0tLS0nICAgICctLS0tLS0tLS0tLS0tLS0tLS0nCj4gKwo+ICtHdWVz dCBQQVNJRCBpcyB0cmVhdGVkIGFzIElPQVNJRCBzZXQgcHJpdmF0ZSBJRCAoU1BJRCkgd2l0aGlu IGFuCj4gK0lPQVNJRCBzZXQsIG1hcHBpbmdzIGJldHdlZW4gZ3Vlc3QgYW5kIGhvc3QgSU9BU0lE cyBhcmUgc3RvcmVkIGluIHRoZQo+ICtzZXQgZm9yIGlucXVpcnkuCj4gKwo+ICtJT0FTSUQgQVBJ cwo+ICs9PT09PT09PT09PQo+ICtUbyBnZXQgdGhlIElPQVNJRCBBUElzLCB1c2VycyBtdXN0ICNp bmNsdWRlIDxsaW51eC9pb2FzaWQuaD4uIFRoZXNlIEFQSXMKPiArc2VydmUgdGhlIGZvbGxvd2lu ZyBmdW5jdGlvbmFsaXRpZXM6Cj4gKwo+ICsgIC0gSU9BU0lEIGFsbG9jYXRpb24vRnJlZQo+ICsg IC0gR3JvdXAgbWFuYWdlbWVudCBpbiB0aGUgZm9ybSBvZiBpb2FzaWRfc2V0Cj4gKyAgLSBQcml2 YXRlIGRhdGEgc3RvcmFnZSBhbmQgbG9va3VwCj4gKyAgLSBSZWZlcmVuY2UgY291bnRpbmcKPiAr ICAtIEV2ZW50IG5vdGlmaWNhdGlvbiBpbiBjYXNlIG9mIHN0YXRlIGNoYW5nZQo+ICsKPiArSU9B U0lEIFNldCBMZXZlbCBBUElzCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gK0ZvciB1 c2UgY2FzZXMgc3VjaCBhcyBndWVzdCBTVkEgaXQgaXMgbmVjZXNzYXJ5IHRvIG1hbmFnZSBJT0FT SURzIGF0Cj4gK2EgZ3JvdXAgbGV2ZWwuIEZvciBleGFtcGxlLCBWTXMgbWF5IGFsbG9jYXRlIG11 bHRpcGxlIElPQVNJRHMgZm9yCj4gK2d1ZXN0IHByb2Nlc3MgYWRkcmVzcyBzaGFyaW5nICh2U1ZB KS4gSXQgaXMgaW1wZXJhdGl2ZSB0byBlbmZvcmNlCj4gK1ZNLUlPQVNJRCBvd25lcnNoaXAgc3Vj aCB0aGF0IG1hbGljaW91cyBndWVzdCBjYW5ub3QgdGFyZ2V0IERNQQoKImEgbWFsaWNpb3VzIGd1 ZXN0IgoKPiArdHJhZmZpYyBvdXRzaWRlIGl0cyBvd24gSU9BU0lEcywgb3IgZnJlZSBhbiBhY3Rp dmUgSU9BU0lEIGJlbG9uZyB0bwoKInRoYXQgYmVsb25ncyB0byIKCj4gK2Fub3RoZXIgVk0uCj4g Kzo6Cj4gKwo+ICsgc3RydWN0IGlvYXNpZF9zZXQgKmlvYXNpZF9hbGxvY19zZXQodm9pZCAqdG9r ZW4sIGlvYXNpZF90IHF1b3RhLCB1MzIgdHlwZSkKPiArCj4gKyBpbnQgaW9hc2lkX2FkanVzdF9z ZXQoc3RydWN0IGlvYXNpZF9zZXQgKnNldCwgaW50IHF1b3RhKTsKClRoZXNlIGNvdWxkIGJlIG5h bWVkICJpb2FzaWRfc2V0X2FsbG9jIiBhbmQgImlvYXNpZF9zZXRfYWRqdXN0IiB0byBiZQpjb25z aXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlIEFQSS4KCj4gKwo+ICsgdm9pZCBpb2FzaWRfc2V0 X2dldChzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0KQo+ICsKPiArIHZvaWQgaW9hc2lkX3NldF9wdXQo c3RydWN0IGlvYXNpZF9zZXQgKnNldCkKPiArCj4gKyB2b2lkIGlvYXNpZF9zZXRfZ2V0X2xvY2tl ZChzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0KQo+ICsKPiArIHZvaWQgaW9hc2lkX3NldF9wdXRfbG9j a2VkKHN0cnVjdCBpb2FzaWRfc2V0ICpzZXQpCj4gKwo+ICsgaW50IGlvYXNpZF9zZXRfZm9yX2Vh Y2hfaW9hc2lkKHN0cnVjdCBpb2FzaWRfc2V0ICpzZGF0YSwKCk1pZ2h0IGJlIG5pY2VyIHRvIGtl ZXAgdGhlIHNhbWUgYXJndW1lbnQgbmFtZXMgd2l0aGluIHRoZSBBUEkuIEhlcmUgInNldCIKcmF0 aGVyIHRoYW4gInNkYXRhIi4KCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAoKmZuKShpb2FzaWRfdCBpZCwgdm9pZCAqZGF0YSksCj4gKwkJCQl2b2lkICpkYXRhKQoKKGFs aWdubWVudCkKCj4gKwo+ICsKPiArSU9BU0lEIHNldCBjb25jZXB0IGlzIGludHJvZHVjZWQgdG8g cmVwcmVzZW50IHN1Y2ggSU9BU0lEIGdyb3Vwcy4gRWFjaAoKT3IganVzdCAiSU9BU0lEIHNldHMg cmVwcmVzZW50IHN1Y2ggSU9BU0lEIGdyb3VwcyIsIGJ1dCBtaWdodCBiZQpyZWR1bmRhbnQuCgo+ ICtJT0FTSUQgc2V0IGlzIGNyZWF0ZWQgd2l0aCBhIHRva2VuIHdoaWNoIGNhbiBiZSBvbmUgb2Yg dGhlIGZvbGxvd2luZwo+ICt0eXBlczoKPiArCj4gKyAtIElPQVNJRF9TRVRfVFlQRV9OVUxMIChB cmJpdHJhcnkgdTY0IHZhbHVlKQo+ICsgLSBJT0FTSURfU0VUX1RZUEVfTU0gKFNldCB0b2tlbiBp cyBhIG1tX3N0cnVjdCkKPiArCj4gK1RoZSBleHBsaWNpdCBNTSB0b2tlbiB0eXBlIGlzIHVzZWZ1 bCB3aGVuIG11bHRpcGxlIHVzZXJzIG9mIGFuIElPQVNJRAo+ICtzZXQgdW5kZXIgdGhlIHNhbWUg cHJvY2VzcyBuZWVkIHRvIGNvbW11bmljYXRlIGFib3V0IHRoZWlyIHNoYXJlZCBJT0FTSURzLgo+ ICtFLmcuIEFuIElPQVNJRCBzZXQgY3JlYXRlZCBieSBWRklPIGZvciBvbmUgZ3Vlc3QgY2FuIGJl IGFzc29jaWF0ZWQKPiArd2l0aCB0aGUgS1ZNIGluc3RhbmNlIGZvciB0aGUgc2FtZSBndWVzdCBz aW5jZSB0aGV5IHNoYXJlIGEgY29tbW9uIG1tX3N0cnVjdC4KPiArCj4gK1RoZSBJT0FTSUQgc2V0 IEFQSXMgc2VydmUgdGhlIGZvbGxvd2luZyBwdXJwb3NlczoKPiArCj4gKyAtIE93bmVyc2hpcC9w ZXJtaXNzaW9uIGVuZm9yY2VtZW50Cj4gKyAtIFRha2UgY29sbGVjdGl2ZSBhY3Rpb25zLCBlLmcu IGZyZWUgYW4gZW50aXJlIHNldAo+ICsgLSBFdmVudCBub3RpZmljYXRpb25zIHdpdGhpbiBhIHNl dAo+ICsgLSBMb29rIHVwIGEgc2V0IGJhc2VkIG9uIHRva2VuCj4gKyAtIFF1b3RhIGVuZm9yY2Vt ZW50CgpUaGlzIHBhcmFncmFwaCBjb3VsZCBiZSBlYXJsaWVyIGluIHRoZSBzZWN0aW9uCgo+ICsK PiArSW5kaXZpZHVhbCBJT0FTSUQgQVBJcwo+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gK09u Y2UgYW4gaW9hc2lkX3NldCBpcyBjcmVhdGVkLCBJT0FTSURzIGNhbiBiZSBhbGxvY2F0ZWQgZnJv bSB0aGUgc2V0Lgo+ICtXaXRoaW4gdGhlIElPQVNJRCBzZXQgbmFtZXNwYWNlLCBzZXQgcHJpdmF0 ZSBJRCAoU1BJRCkgaXMgc3VwcG9ydGVkLiBJbgo+ICt0aGUgVk0gdXNlIGNhc2UsIFNQSUQgY2Fu IGJlIHVzZWQgZm9yIHN0b3JpbmcgZ3Vlc3QgUEFTSUQuCj4gKwo+ICs6Ogo+ICsKPiArIGlvYXNp ZF90IGlvYXNpZF9hbGxvYyhzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0LCBpb2FzaWRfdCBtaW4sIGlv YXNpZF90IG1heCwKPiArICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcml2YXRlKTsKPiAr Cj4gKyBpbnQgaW9hc2lkX2dldChzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0LCBpb2FzaWRfdCBpb2Fz aWQpOwo+ICsKPiArIHZvaWQgaW9hc2lkX3B1dChzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0LCBpb2Fz aWRfdCBpb2FzaWQpOwo+ICsKPiArIGludCBpb2FzaWRfZ2V0X2xvY2tlZChzdHJ1Y3QgaW9hc2lk X3NldCAqc2V0LCBpb2FzaWRfdCBpb2FzaWQpOwo+ICsKPiArIHZvaWQgaW9hc2lkX3B1dF9sb2Nr ZWQoc3RydWN0IGlvYXNpZF9zZXQgKnNldCwgaW9hc2lkX3QgaW9hc2lkKTsKPiArCj4gKyB2b2lk ICppb2FzaWRfZmluZChzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0LCBpb2FzaWRfdCBpb2FzaWQsCj4g KyAgICAgICAgICAgICAgICAgICBib29sICgqZ2V0dGVyKSh2b2lkICopKTsKPiArCj4gKyBpb2Fz aWRfdCBpb2FzaWRfZmluZF9ieV9zcGlkKHN0cnVjdCBpb2FzaWRfc2V0ICpzZXQsIGlvYXNpZF90 IHNwaWQpCj4gKwo+ICsgaW50IGlvYXNpZF9hdHRhY2hfZGF0YShzdHJ1Y3QgaW9hc2lkX3NldCAq c2V0LCBpb2FzaWRfdCBpb2FzaWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRh dGEpOwo+ICsgaW50IGlvYXNpZF9hdHRhY2hfc3BpZChzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0LCBp b2FzaWRfdCBpb2FzaWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlvYXNpZF90IHNzaWQp OwoKcy9zc2lkL3NwaWQKCj4gKwo+ICsKPiArTm90aWZpY2F0aW9ucwo+ICstLS0tLS0tLS0tLS0t Cj4gK0FuIElPQVNJRCBtYXkgaGF2ZSBtdWx0aXBsZSB1c2VycywgZWFjaCB1c2VyIG1heSBoYXZl IGhhcmR3YXJlIGNvbnRleHQKPiArYXNzb2NpYXRlZCB3aXRoIGFuIElPQVNJRC4gV2hlbiB0aGUg c3RhdHVzIG9mIGFuIElPQVNJRCBjaGFuZ2VzLAo+ICtlLmcuIGFuIElPQVNJRCBpcyBiZWluZyBm cmVlZCwgdXNlcnMgbmVlZCB0byBiZSBub3RpZmllZCBzdWNoIHRoYXQgdGhlCj4gK2Fzc29jaWF0 ZWQgaGFyZHdhcmUgY29udGV4dCBjYW4gYmUgY2xlYXJlZCwgZmx1c2hlZCwgYW5kIGRyYWluZWQu Cj4gKwo+ICs6Ogo+ICsKPiArIGludCBpb2FzaWRfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGlv YXNpZF9zZXQgKnNldCwgc3RydWN0Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v dGlmaWVyX2Jsb2NrICpuYikKPiArCj4gKyB2b2lkIGlvYXNpZF91bnJlZ2lzdGVyX25vdGlmaWVy KHN0cnVjdCBpb2FzaWRfc2V0ICpzZXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCj4gKwo+ICsgaW50IGlvYXNpZF9yZWdpc3Rl cl9ub3RpZmllcl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyX2Jsb2NrICpuYikKPiArCj4gKyB2b2lkIGlv YXNpZF91bnJlZ2lzdGVyX25vdGlmaWVyX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXJfYmxvY2sgKm5i KQo+ICsKPiArIGludCBpb2FzaWRfbm90aWZ5KGlvYXNpZF90IGlvYXNpZCwgZW51bSBpb2FzaWRf bm90aWZ5X3ZhbCBjbWQsCj4gKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3Mp Cj4gKwo+ICsKPiArRXZlbnRzCj4gK35+fn5+fgo+ICtOb3RpZmljYXRpb24gZXZlbnRzIGFyZSBw ZXJ0aW5lbnQgdG8gaW5kaXZpZHVhbCBJT0FTSURzLCB0aGV5IGNhbiBiZQo+ICtvbmUgb2YgdGhl IGZvbGxvd2luZzoKPiArCj4gKyAtIEFMTE9DCj4gKyAtIEZSRUUKPiArIC0gQklORAo+ICsgLSBV TkJJTkQKPiArCj4gK09yZGVyaW5nCj4gK35+fn5+fn5+Cj4gK09yZGVyaW5nIGlzIHN1cHBvcnRl ZCBieSBJT0FTSUQgbm90aWZpY2F0aW9uIHByaW9yaXRpZXMgYXMgdGhlCj4gK2ZvbGxvd2luZyAo aW4gYXNjZW5kaW5nIG9yZGVyKToKPiArCj4gKzo6Cj4gKwo+ICsgZW51bSBpb2FzaWRfbm90aWZp ZXJfcHJpb3Mgewo+ICsJSU9BU0lEX1BSSU9fTEFTVCwKPiArCUlPQVNJRF9QUklPX0lPTU1VLAo+ ICsJSU9BU0lEX1BSSU9fREVWSUNFLAo+ICsJSU9BU0lEX1BSSU9fQ1BVLAo+ICsgfTsKPiArCj4g K1RoZSB0eXBpY2FsIHVzZSBjYXNlIGlzIHdoZW4gYW4gSU9BU0lEIGlzIGZyZWVkIGR1ZSB0byBh biBleGNlcHRpb24sIERNQQo+ICtzb3VyY2Ugc2hvdWxkIGJlIHF1aWVzY2VkIGJlZm9yZSB0ZWFy aW5nIGRvd24gb3RoZXIgaGFyZHdhcmUgY29udGV4dHMKPiAraW4gdGhlIHN5c3RlbS4gVGhpcyB3 aWxsIHJlZHVjZSB0aGUgY2h1cm4gaW4gaGFuZGxpbmcgZmF1bHRzLiBETUEgd29yawo+ICtzdWJt aXNzaW9uIGlzIHBlcmZvcm1lZCBieSB0aGUgQ1BVIHdoaWNoIGlzIGdyYW50ZWQgaGlnaGVyIHBy aW9yaXR5IHRoYW4KPiArZGV2aWNlcy4KPiArCj4gKwo+ICtTY29wZXMKPiArfn5+fn5+Cj4gK1Ro ZXJlIGFyZSB0d28gdHlwZXMgb2Ygbm90aWZpZXJzIGluIElPQVNJRCBjb3JlOiBzeXN0ZW0td2lk ZSBhbmQKPiAraW9hc2lkX3NldC13aWRlLgo+ICsKPiArU3lzdGVtLXdpZGUgbm90aWZpZXIgaXMg Y2F0ZXJpbmcgZm9yIHVzZXJzIHRoYXQgbmVlZCB0byBoYW5kbGUgYWxsCj4gK0lPQVNJRHMgaW4g dGhlIHN5c3RlbS4gRS5nLiBUaGUgSU9NTVUgZHJpdmVyIGhhbmRsZXMgYWxsIElPQVNJRHMuCj4g Kwo+ICtQZXIgaW9hc2lkX3NldCBub3RpZmllciBjYW4gYmUgdXNlZCBieSBWTSBzcGVjaWZpYyBj b21wb25lbnRzIHN1Y2ggYXMKPiArS1ZNLiBBZnRlciBhbGwsIGVhY2ggS1ZNIGluc3RhbmNlIG9u bHkgY2FyZXMgYWJvdXQgSU9BU0lEcyB3aXRoaW4gaXRzCj4gK293biBzZXQuCj4gKwo+ICsKPiAr QXRvbWljaXR5Cj4gK35+fn5+fn5+fgo+ICtJT0FTSUQgbm90aWZpZXJzIGFyZSBhdG9taWMgZHVl IHRvIHNwaW5sb2NrcyB1c2VkIGluc2lkZSB0aGUgSU9BU0lECj4gK2NvcmUuIEZvciB0YXNrcyBj YW5ub3QgYmUgY29tcGxldGVkIGluIHRoZSBub3RpZmllciBoYW5kbGVyLCBhc3luYyB3b3JrCgoi dGFza3MgdGhhdCBjYW5ub3QgYmUiCgo+ICtjYW4gYmUgc3VibWl0dGVkIHRvIGNvbXBsZXRlIHRo ZSB3b3JrIGxhdGVyIGFzIGxvbmcgYXMgdGhlcmUgaXMgbm8KPiArb3JkZXJpbmcgcmVxdWlyZW1l bnQuCj4gKwo+ICtSZWZlcmVuY2UgY291bnRpbmcKPiArLS0tLS0tLS0tLS0tLS0tLS0tCj4gK0lP QVNJRCBsaWZlY3ljbGUgbWFuYWdlbWVudCBpcyBiYXNlZCBvbiByZWZlcmVuY2UgY291bnRpbmcu IFVzZXJzIG9mCj4gK0lPQVNJRCBpbnRlbmQgdG8gYWxpZ24gbGlmZWN5Y2xlIHdpdGggdGhlIElP QVNJRCBuZWVkIHRvIGhvbGQKCiJ3aG8gaW50ZW5kIHRvIgoKPiArcmVmZXJlbmNlIG9mIHRoZSBJ T0FTSUQuIElPQVNJRCB3aWxsIG5vdCBiZSByZXR1cm5lZCB0byB0aGUgcG9vbCBmb3IKCiJhIHJl ZmVyZW5jZSB0byB0aGUgSU9BU0lELiBUaGUgSU9BU0lEIgoKPiArYWxsb2NhdGlvbiB1bnRpbCBh bGwgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gQ2FsbGluZyBpb2FzaWRfZnJlZSgpCj4gK3dpbGwg bWFyayB0aGUgSU9BU0lEIGFzIEZSRUVfUEVORElORyBpZiB0aGUgSU9BU0lEIGhhcyBvdXRzdGFu ZGluZwo+ICtyZWZlcmVuY2UuIGlvYXNpZF9nZXQoKSBpcyBub3QgYWxsb3dlZCBvbmNlIGFuIElP QVNJRCBpcyBpbiB0aGUKPiArRlJFRV9QRU5ESU5HIHN0YXRlLgo+ICsKPiArRXZlbnQgbm90aWZp Y2F0aW9ucyBhcmUgdXNlZCB0byBpbmZvcm0gdXNlcnMgb2YgSU9BU0lEIHN0YXR1cyBjaGFuZ2Uu Cj4gK0lPQVNJRF9GUkVFIGV2ZW50IHByb21wdHMgdXNlcnMgdG8gZHJvcCB0aGVpciByZWZlcmVu Y2VzIGFmdGVyCj4gK2NsZWFyaW5nIGl0cyBjb250ZXh0Lgo+ICsKPiArRm9yIGV4YW1wbGUsIG9u IFZULWQgcGxhdGZvcm0gd2hlbiBhbiBJT0FTSUQgaXMgZnJlZWQsIHRlYXJkb3duCj4gK2FjdGlv bnMgYXJlIHBlcmZvcm1lZCBvbiBLVk0sIGRldmljZSBkcml2ZXIsIGFuZCBJT01NVSBkcml2ZXIu Cj4gK0tWTSBzaGFsbCByZWdpc3RlciBub3RpZmllciBibG9jayB3aXRoOjoKPiArCj4gKyBzdGF0 aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhc2lkX25iX2t2bSA9IHsKPiArCS5ub3RpZmllcl9j YWxsID0gcGFzaWRfc3RhdHVzX2NoYW5nZV9rdm0sCj4gKwkucHJpb3JpdHkgICAgICA9IElPQVNJ RF9QUklPX0NQVSwKPiArIH07Cj4gKwo+ICtWRENNIGRyaXZlciBzaGFsbCByZWdpc3RlciBub3Rp ZmllciBibG9jayB3aXRoOjoKPiArCj4gKyBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBh c2lkX25iX3ZkY20gPSB7Cj4gKwkubm90aWZpZXJfY2FsbCA9IHBhc2lkX3N0YXR1c19jaGFuZ2Vf dmRjbSwKPiArCS5wcmlvcml0eSAgICAgID0gSU9BU0lEX1BSSU9fREVWSUNFLAo+ICsgfTsKPiAr Cj4gK0luIGJvdGggY2FzZXMsIG5vdGlmaWVyIGJsb2NrcyBzaGFsbCBiZSByZWdpc3RlcmVkIG9u IHRoZSBJT0FTSUQgc2V0Cj4gK3N1Y2ggdGhhdCAqb25seSogZXZlbnRzIGZyb20gdGhlIG1hdGNo aW5nIFZNIGlzIHJlY2VpdmVkLgo+ICsKPiArSWYgS1ZNIGF0dGVtcHRzIHRvIHJlZ2lzdGVyIG5v dGlmaWVyIGJsb2NrIGJlZm9yZSB0aGUgSU9BU0lEIHNldCBpcwo+ICtjcmVhdGVkIGZvciB0aGUg TU0gdG9rZW4sIHRoZSBub3RpZmllciBibG9jayB3aWxsIGJlIHBsYWNlZCBvbiBhCj4gK3BlbmRp bmcgbGlzdCBpbnNpZGUgSU9BU0lEIGNvcmUuIE9uY2UgdGhlIHRva2VuIG1hdGNoaW5nIElPQVNJ RCBzZXQKPiAraXMgY3JlYXRlZCwgSU9BU0lEIHdpbGwgcmVnaXN0ZXIgdGhlIG5vdGlmaWVyIGJs b2NrIGF1dG9tYXRpY2FsbHkuCj4gK0lPQVNJRCBjb3JlIGRvZXMgbm90IHJlcGxheSBldmVudHMg Zm9yIHRoZSBleGlzdGluZyBJT0FTSURzIGluIHRoZQo+ICtzZXQuIEZvciBJT0FTSUQgc2V0IG9m IE1NIHR5cGUsIG5vdGlmaWNhdGlvbiBibG9ja3MgY2FuIGJlIHJlZ2lzdGVyZWQKPiArb24gZW1w dHkgc2V0cyBvbmx5LiBUaGlzIGlzIHRvIGF2b2lkIGxvc3QgZXZlbnRzLgo+ICsKPiArSU9NTVUg ZHJpdmVyIHNoYWxsIHJlZ2lzdGVyIG5vdGlmaWVyIGJsb2NrIG9uIGdsb2JhbCBjaGFpbjo6Cj4g Kwo+ICsgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYXNpZF9uYl92dGQgPSB7Cj4gKwku bm90aWZpZXJfY2FsbCA9IHBhc2lkX3N0YXR1c19jaGFuZ2VfdnRkLAo+ICsJLnByaW9yaXR5ICAg ICAgPSBJT0FTSURfUFJJT19JT01NVSwKPiArIH07Cj4gKwo+ICtDdXN0b20gYWxsb2NhdG9yIEFQ SXMKPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICs6Ogo+ICsKPiArIGludCBpb2FzaWRf cmVnaXN0ZXJfYWxsb2NhdG9yKHN0cnVjdCBpb2FzaWRfYWxsb2NhdG9yX29wcyAqYWxsb2NhdG9y KTsKPiArCj4gKyB2b2lkIGlvYXNpZF91bnJlZ2lzdGVyX2FsbG9jYXRvcihzdHJ1Y3QgaW9hc2lk X2FsbG9jYXRvcl9vcHMgKmFsbG9jYXRvcik7Cj4gKwo+ICtBbGxvY2F0b3IgQ2hvaWNlcwo+ICt+ fn5+fn5+fn5+fn5+fn5+fgo+ICtJT0FTSURzIGFyZSBhbGxvY2F0ZWQgZm9yIGJvdGggaG9zdCBh bmQgZ3Vlc3QgU1ZBL0lPVkEgdXNhZ2UuIEhvd2V2ZXIsCj4gK2FsbG9jYXRvcnMgY2FuIGJlIGRp ZmZlcmVudC4gRm9yIGV4YW1wbGUsIG9uIFZULWQgZ3Vlc3QgUEFTSUQKPiArYWxsb2NhdGlvbiBt dXN0IGJlIHBlcmZvcm1lZCB2aWEgYSB2aXJ0dWFsIGNvbW1hbmQgaW50ZXJmYWNlIHdoaWNoIGlz Cj4gK2VtdWxhdGVkIGJ5IFZNTS4KPiArCj4gK0lPQVNJRCBjb3JlIGhhcyB0aGUgbm90aW9uIG9m ICJjdXN0b20gYWxsb2NhdG9yIiBzdWNoIHRoYXQgZ3Vlc3QgY2FuCj4gK3JlZ2lzdGVyIHZpcnR1 YWwgY29tbWFuZCBhbGxvY2F0b3IgdGhhdCBwcmVjZWRlcyB0aGUgZGVmYXVsdCBvbmUuCj4gKwo+ ICtOYW1lc3BhY2VzCj4gK35+fn5+fn5+fn4KPiArSU9BU0lEcyBhcmUgbGltaXRlZCBzeXN0ZW0g cmVzb3VyY2VzIHRoYXQgZGVmYXVsdCB0byAyMCBiaXRzIGluCj4gK3NpemUuIFNpbmNlIGVhY2gg ZGV2aWNlIGhhcyBpdHMgb3duIHRhYmxlLCB0aGVvcmV0aWNhbGx5IHRoZSBuYW1lc3BhY2UKPiAr Y2FuIGJlIHBlciBkZXZpY2UgYWxzby4gSG93ZXZlciwgZm9yIHNlY3VyaXR5IHJlYXNvbnMgc2hh cmluZyBQQVNJRAo+ICt0YWJsZXMgYW1vbmcgZGV2aWNlcyBhcmUgbm90IGdvb2QgZm9yIGlzb2xh dGlvbi4gVGhlcmVmb3JlLCBJT0FTSUQKPiArbmFtZXNwYWNlIGlzIHN5c3RlbS13aWRlLgoKSSBk b24ndCBmb2xsb3cgdGhpcyBkZXZlbG9wbWVudC4gSGF2aW5nIHBlci1kZXZpY2UgUEFTSUQgdGFi bGUgd291bGQgd29yawpmaW5lIGZvciBpc29sYXRpb24gKGFzc3VtaW5nIG5vIGhhcmR3YXJlIGJ1 ZyBuZWNlc3NpdGF0aW5nIElPTU1VIGdyb3VwcykuCklmIEkgcmVtZW1iZXIgY29ycmVjdGx5IElP QVNJRCBzcGFjZSB3YXMgY2hvc2VuIHRvIGJlIE9TLXdpZGUgYmVjYXVzZSBpdApzaW1wbGlmaWVz IHRoZSBtYW5hZ2VtZW50IGNvZGUgKHNpbmdsZSBQQVNJRCBwZXIgdGFzayksIGFuZCBpdCBpcwpz eXN0ZW0td2lkZSBhY3Jvc3MgVk1zIG9ubHkgaW4gdGhlIGNhc2Ugb2YgVlQtZCBzY2FsYWJsZSBt b2RlLgoKPiArCj4gK1RoZXJlIGFyZSBhbHNvIG90aGVyIHJlYXNvbnMgdG8gaGF2ZSB0aGlzIHNp bXBsZXIgc3lzdGVtLXdpZGUKPiArbmFtZXNwYWNlLiBUYWtlIFZULWQgYXMgYW4gZXhhbXBsZSwg VlQtZCBzdXBwb3J0cyBzaGFyZWQgd29ya3F1ZXVlCj4gK2FuZCBFTlFDTURbMV0gd2hlcmUgb25l IElPQVNJRCBjb3VsZCBiZSB1c2VkIHRvIHN1Ym1pdCB3b3JrIG9uCgpNYXliZSB1c2UgdGhlIFNw aGlueCBnbG9zc2FyeSBzeW50YXggcmF0aGVyIHRoYW4gIlsxXSIKaHR0cHM6Ly93d3cuc3BoaW54 LWRvYy5vcmcvZW4vbWFzdGVyL3VzYWdlL3Jlc3RydWN0dXJlZHRleHQvZGlyZWN0aXZlcy5odG1s I2dsb3NzYXJ5LWRpcmVjdGl2ZQoKPiArbXVsdGlwbGUgZGV2aWNlcyB0aGF0IGFyZSBzaGFyZWQg d2l0aCBvdGhlciBWTXMuIFRoaXMgcmVxdWlyZXMgSU9BU0lECj4gK3RvIGJlIHN5c3RlbS13aWRl LiBUaGlzIGlzIGFsc28gdGhlIHJlYXNvbiB3aHkgZ3Vlc3RzIG11c3QgdXNlIGFuCj4gK2VtdWxh dGVkIHZpcnR1YWwgY29tbWFuZCBpbnRlcmZhY2UgdG8gYWxsb2NhdGUgSU9BU0lEIGZyb20gdGhl IGhvc3QuCj4gKwo+ICsKPiArTGlmZSBjeWNsZQo+ICs9PT09PT09PT09Cj4gK1RoaXMgc2VjdGlv biBjb3ZlcnMgSU9BU0lEIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciBib3RoIGJhcmUtbWV0YWwK PiArYW5kIGd1ZXN0IHVzYWdlcy4gSW4gYmFyZS1tZXRhbCBTVkEsIE1NVSBub3RpZmllciBpcyBk aXJlY3RseSBob29rZWQKPiArdXAgd2l0aCBJT01NVSBkcml2ZXIsIHRoZXJlZm9yZSB0aGUgcHJv Y2VzcyBhZGRyZXNzIHNwYWNlIChNTSkKPiArbGlmZWN5Y2xlIGlzIGFsaWduZWQgd2l0aCBJT0FT SUQuCj4gKwo+ICtIb3dldmVyLCBndWVzdCBNTVUgbm90aWZpZXIgaXMgbm90IGF2YWlsYWJsZSB0 byBob3N0IElPTU1VIGRyaXZlciwKPiArd2hlbiBndWVzdCBNTSB0ZXJtaW5hdGVzIHVuZXhwZWN0 ZWRseSwgdGhlIGV2ZW50cyBoYXZlIHRvIGdvIHRocm91Z2gKPiArVkZJTyBhbmQgSU9NTVUgVUFQ SSB0byByZWFjaCBob3N0IElPTU1VIGRyaXZlci4gVGhlcmUgYXJlIGFsc28gbW9yZQo+ICtwYXJ0 aWVzIGludm9sdmVkIGluIGd1ZXN0IFNWQSwgZS5nLiBvbiBJbnRlbCBWVC1kIHBsYXRmb3JtLCBJ T0FTSURzCj4gK2FyZSB1c2VkIGJ5IElPTU1VIGRyaXZlciwgS1ZNLCBWRENNLCBhbmQgVkZJTy4K PiArCj4gK05hdGl2ZSBJT0FTSUQgTGlmZSBDeWNsZSAoVlQtZCBFeGFtcGxlKQo+ICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArCj4gK1RoZSBub3JtYWwgZmxvdyBv ZiBuYXRpdmUgU1ZBIGNvZGUgd2l0aCBJbnRlbCBEYXRhIFN0cmVhbWluZwo+ICtBY2NlbGVyYXRv cihEU0EpIFsyXSBhcyBleGFtcGxlOgo+ICsKPiArMS4gSG9zdCB1c2VyIG9wZW5zIGFjY2VsZXJh dG9yIEZELCBlLmcuIERTQSBkcml2ZXIsIG9yIHVhY2NlOwo+ICsyLiBEU0EgZHJpdmVyIGFsbG9j YXRlIFdRLCBkbyBzdmFfYmluZF9kZXZpY2UoKTsKPiArMy4gSU9NTVUgZHJpdmVyIGNhbGxzIGlv YXNpZF9hbGxvYygpLCB0aGVuIGJpbmQgUEFTSUQgd2l0aCBkZXZpY2UsCj4gKyAgIG1tdV9ub3Rp Zmllcl9nZXQoKQo+ICs0LiBETUEgc3RhcnRzIGJ5IERTQSBkcml2ZXIgdXNlcnNwYWNlCj4gKzUu IERTQSB1c2Vyc3BhY2UgY2xvc2UgRkQKPiArNi4gRFNBL3VhY2NlIGtlcm5lbCBkcml2ZXIgaGFu ZGxlcyBGRC5jbG9zZSgpCj4gKzcuIERTQSBkcml2ZXIgc3RvcHMgRE1BCj4gKzguIERTQSBkcml2 ZXIgY2FsbHMgc3ZhX3VuYmluZF9kZXZpY2UoKTsKPiArOS4gSU9NTVUgZHJpdmVyIGRvZXMgdW5i aW5kLCBjbGVhcnMgUEFTSUQgY29udGV4dCBpbiBJT01NVSwgZmx1c2gKPiArICAgVExCcy4gbW11 X25vdGlmaWVyX3B1dCgpIGNhbGxlZC4KPiArMTAuIG1tdV9ub3RpZmllci5yZWxlYXNlKCkgY2Fs bGVkLCBJT01NVSBTVkEgY29kZSBjYWxscyBpb2FzaWRfZnJlZSgpKgo+ICsxMS4gVGhlIElPQVNJ RCBpcyByZXR1cm5lZCB0byB0aGUgcG9vbCwgcmVjbGFpbWVkLgo+ICsKPiArOjoKPiArCgpVc2Ug YSBmb290bm90ZT8gaHR0cHM6Ly93d3cuc3BoaW54LWRvYy5vcmcvZW4vbWFzdGVyL3VzYWdlL3Jl c3RydWN0dXJlZHRleHQvYmFzaWNzLmh0bWwjZm9vdG5vdGVzCgo+ICsgICAqIFdpdGggRU5RQ01E LCBQQVNJRCB1c2VkIG9uIFZULWQgaXMgbm90IHJlbGVhc2VkIGluIG1tdV9ub3RpZmllcigpIGJ1 dAo+ICsgICAgIG1tZHJvcCgpLiBtbWRyb3AgY29tZXMgYWZ0ZXIgRkQgY2xvc2UuIFNob3VsZCBu b3QgbWF0dGVyLgoKImNvbWVzIGFmdGVyIEZEIGNsb3NlLCB3aGljaCBkb2Vzbid0IG1ha2UgYSBk aWZmZXJlbmNlPyIKVGhlIGZvbGxvd2luZyBtaWdodCBub3QgYmUgbmVjZXNzYXJ5IHNpbmNlIGVh cmx5IHByb2Nlc3MgdGVybWluYXRpb24gaXMKZGVzY3JpYmVkIGxhdGVyLgoKPiArICAgICBJZiB0 aGUgdXNlciBwcm9jZXNzIGRpZXMgdW5leHBlY3RlZGx5LCBTdGVwICMxMCBtYXkgY29tZSBiZWZv cmUKPiArICAgICBTdGVwICM1LCBpbiBiZXR3ZWVuLCBhbGwgRE1BIGZhdWx0cyBkaXNjYXJkZWQu IFBSUSByZXNwb25kZWQgd2l0aAoKUFJRIGhhc24ndCBiZWVuIGRlZmluZWQgaW4gdGhpcyBkb2N1 bWVudC4KCj4gKyAgICAgY29kZSBJTlZBTElEIFJFUVVFU1QuCj4gKwo+ICtEdXJpbmcgdGhlIG5v cm1hbCB0ZWFyZG93biwgdGhlIGZvbGxvd2luZyB0aHJlZSBzdGVwcyB3b3VsZCBoYXBwZW4gaW4K PiArb3JkZXI6Cj4gKwo+ICsxLiBEZXZpY2UgZHJpdmVyIHN0b3BzIERNQSByZXF1ZXN0Cj4gKzIu IElPTU1VIGRyaXZlciB1bmJpbmRzIFBBU0lEIGFuZCBtbSwgZmx1c2ggYWxsIFRMQnMsIGRyYWlu IGluLWZsaWdodAo+ICsgICByZXF1ZXN0cy4KPiArMy4gSU9BU0lEIGZyZWVkCj4gKwo+ICtFeGNl cHRpb24gaGFwcGVucyB3aGVuIHByb2Nlc3MgdGVybWluYXRlcyAqYmVmb3JlKiBkZXZpY2UgZHJp dmVyIHN0b3BzCj4gK0RNQSBhbmQgY2FsbCBJT01NVSBkcml2ZXIgdG8gdW5iaW5kLiBUaGUgZmxv dyBvZiBwcm9jZXNzIGV4aXN0cyBhcmUgYXMKCiJleGl0cyIKCj4gK2ZvbGxvd3M6Cj4gKwo+ICs6 Ogo+ICsKPiArICAgZG9fZXhpdCgpIHsKPiArCWV4aXRfbW0oKSB7Cj4gKwkJbW1fcHV0KCk7Cj4g KwkJZXhpdF9tbWFwKCkgewo+ICsJCQlpbnRlbF9pbnZhbGlkYXRlX3JhbmdlKCkgLy9tbXUgbm90 aWZpZXIKPiArCQkJdGxiX2ZpbmlzaF9tbXUoKQo+ICsJCQltbXVfbm90aWZpZXJfcmVsZWFzZSht bSkgewo+ICsJCQkJaW50ZWxfaW9tbXVfcmVsZWFzZSgpIHsKPiArICAgWzJdCQkJCQlpbnRlbF9p b21tdV90ZWFyZG93bl9wYXNpZCgpOwoKUGFyZW50aGVzZXMgbWlnaHQgYmUgYmV0dGVyIHRoYW4g c3F1YXJlIGJyYWNrZXRzIGZvciBzdGVwIG51bWJlcnMKCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnRlbF9pb21tdV9mbHVzaF90bGJzKCk7Cj4gKwkJCQl9Cj4g KwkJCQkvLyB0bGJfaW52YWxpZGF0ZV9yYW5nZSBjYiByZW1vdmVkCj4gKwkJCX0KPiArCQkJdW5t YXBfdm1hcygpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BndGFibGVzKCk7IC8v IElPTU1VIGNhbm5vdCB3YWxrIFBHVCBhZnRlciB0aGlzCj4gKwkJfTsKPiArCX0KPiArCWV4aXRf ZmlsZXModHNrKSB7Cj4gKwkJY2xvc2VfZmlsZXMoKSB7Cj4gKwkJCWRzYV9jbG9zZSgpOwo+ICsg ICBbMV0JCQlkc2Ffc3RvcF9kbWEoKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWxf c3ZtX3VuYmluZF9wYXNpZCgpOyAvL25vdGhpbmcgdG8gZG8KPiArCQl9Cj4gKwl9Cj4gKyAgIH0K PiArCj4gKyAgIG1tZHJvcCgpIC8qIHNvbWUgcmFuZG9tIHRpbWUgbGF0ZXIsIGxhenkgbW0gdXNl ciAqLyB7Cj4gKyAgIAltbV9mcmVlX3BnZCgpOwo+ICsgICAgICAgIGRlc3Ryb3lfY29udGV4dCht bSk7IHsKPiArICAgWzNdCSAgICAgICAgaW9hc2lkX2ZyZWUoKTsKPiArCX0KPiArICAgfQo+ICsK PiArQXMgc2hvd24gaW4gdGhlIGxpc3QgYWJvdmUsIHN0ZXAgIzIgY291bGQgaGFwcGVuIGJlZm9y ZQo+ICsjMS4gVW5yZWNvdmVyYWJsZShVUikgZmF1bHRzIGNvdWxkIGhhcHBlbiBiZXR3ZWVuICMy IGFuZCAjMS4KPiArCj4gK0Fsc28gbm90aWNlIHRoYXQgVExCIGludmFsaWRhdGlvbiBvY2N1cnMg YXQgbW11X25vdGlmaWVyCj4gK2ludmFsaWRhdGVfcmFuZ2UgY2FsbGJhY2sgYXMgd2VsbCBhcyB0 aGUgcmVsZWFzZSBjYWxsYmFjay4gVGhlIHJlYXNvbgo+ICtpcyB0aGF0IHJlbGVhc2UgY2FsbGJh Y2sgd2lsbCBkZWxldGUgSU9NTVUgZHJpdmVyIGZyb20gdGhlIG5vdGlmaWVyCj4gK2NoYWluIHdo aWNoIG1heSBza2lwIGludmFsaWRhdGVfcmFuZ2UoKSBjYWxscyBkdXJpbmcgdGhlIGV4aXQgcGF0 aC4KPiArCj4gK1RvIGF2b2lkIHVubmVjZXNzYXJ5IHJlcG9ydGluZyBvZiBVUiBmYXVsdCwgSU9N TVUgZHJpdmVyIHNoYWxsIGRpc2FibGUKPiArZmF1bHQgcmVwb3J0aW5nIGFmdGVyIGZyZWUgYW5k IGJlZm9yZSB1bmJpbmQuCj4gKwo+ICtHdWVzdCBJT0FTSUQgTGlmZSBDeWNsZSAoVlQtZCBFeGFt cGxlKQo+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICtHdWVzdCBJ T0FTSUQgbGlmZSBjeWNsZSBzdGFydHMgd2l0aCBndWVzdCBkcml2ZXIgb3BlbigpLCB0aGlzIGNv dWxkIGJlCj4gK3VhY2NlIG9yIGluZGl2aWR1YWwgYWNjZWxlcmF0b3IgZHJpdmVyIHN1Y2ggYXMg RFNBLiBBdCBGRCBvcGVuLAo+ICtzdmFfYmluZF9kZXZpY2UoKSBpcyBjYWxsZWQgd2hpY2ggdHJp Z2dlcnMgYSBzZXJpZXMgb2YgYWN0aW9ucy4KPiArCj4gK1RoZSBleGFtcGxlIGJlbG93IGlzIGFu IGlsbHVzdHJhdGlvbiBvZiAqbm9ybWFsKiBvcGVyYXRpb25zIHRoYXQKPiAraW52b2x2ZXMgKmFs bCogdGhlIFNXIGNvbXBvbmVudHMgaW4gVlQtZC4gVGhlIGZsb3cgY2FuIGJlIHNpbXBsZXIgaWYK PiArbm8gRU5RQ01EIGlzIHN1cHBvcnRlZC4KPiArCj4gKzo6Cj4gKwo+ICsgICAgIFZGSU8gICAg ICAgIElPTU1VICAgICAgICBLVk0gICAgICAgIFZEQ00gICAgICAgIElPQVNJRCAgICAgICBSZWYK PiArICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uCj4gKyAgIDEgICAgICAgICAgICAgaW9hc2lkX3JlZ2lzdGVyX25vdGlm aWVyL19tbSgpCj4gKyAgIDIgaW9hc2lkX2FsbG9jKCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEKPiArICAgMyBiaW5kX2dwYXNpZCgpCj4gKyAgIDQgICAg ICAgICAgICAgaW9tbXVfYmluZCgpLT5pb2FzaWRfZ2V0KCkgICAgICAgICAgICAgICAgICAgICAg IDIKPiArICAgNSAgICAgICAgICAgICBpb2FzaWRfbm90aWZ5KEJJTkQpCj4gKyAgIDYgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+IGlvYXNpZF9nZXQoKSAgICAgICAgICAgICAgICAgICAgIDMK PiArICAgNyAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gdm1jc191cGRhdGVfYXRvbWljKCkK PiArICAgOCBtZGV2X3dyaXRlKGdwYXNpZCkKPiArICAgOSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGhwYXNpZD0KPiArICAgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZpbmRfYnlfc3BpZChncGFzaWQpICAgICAgNAo+ICsgICAxMSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmRldl93cml0ZShocGFzaWQpCj4gKyAgIDEyIC0tLS0tLS0t IEdVRVNUIFNUQVJUUyBETUEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICAgMTMgLS0t LS0tLS0gR1VFU1QgU1RPUFMgRE1BIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAgIDE0 IG1kZXZfY2xlYXIoZ3Bhc2lkKQo+ICsgICAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmRldl9jbGVhcihocGFzaWQpCj4gKyAgIDE2ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpb2FzaWRfcHV0KCkgICAgICAgICAgICAgICAzCj4gKyAgIDE3IHVuYmluZF9n cGFzaWQoKQo+ICsgICAxOCAgICAgICAgICAgIGlvbW11X3ViaW5kKCkKPiArICAgMTkgICAgICAg ICAgICBpb2FzaWRfbm90aWZ5KFVOQklORCkKPiArICAgMjAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+IHZtY3NfdXBkYXRlX2F0b21pYygpCj4gKyAgIDIxICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiBpb2FzaWRfcHV0KCkgICAgICAgICAgICAgICAgICAgICAyCj4gKyAgIDIyIGlvYXNp ZF9mcmVlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx Cj4gKyAgIDIzICAgICAgICAgICAgaW9hc2lkX3B1dCgpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwCj4gKyAgIDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlY2xhaW1lZAo+ICsgICAtLS0tLS0tLS0tLS0tLSBOZXcgTGlmZSBD eWNsZSBCZWdpbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAgIDEgIGlvYXNpZF9h bGxvYygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgICAgICAxCj4g Kwo+ICsgICBOb3RlOiBJT0FTSUQgTm90aWZpY2F0aW9uIEV2ZW50czogRlJFRSwgQklORCwgVU5C SU5ECj4gKwo+ICtFeGNlcHRpb24gY2FzZXMgYXJpc2Ugd2hlbiBhIGd1ZXN0IGNyYXNoZXMgb3Ig YSBtYWxpY2lvdXMgZ3Vlc3QKPiArYXR0ZW1wdHMgdG8gY2F1c2UgZGlzcnVwdGlvbiBvbiB0aGUg aG9zdCBzeXN0ZW0uIFRoZSBmYXVsdCBoYW5kbGluZwo+ICtydWxlcyBhcmU6Cj4gKwo+ICsxLiBJ T0FTSUQgZnJlZSBtdXN0ICphbHdheXMqIHN1Y2NlZWQuCj4gKzIuIEFuIGluYWN0aXZlIHBlcmlv ZCBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlIHRoZSBmcmVlZCBJT0FTSUQgaXMKPiArICAgcmVjbGFp bWVkLiBEdXJpbmcgdGhpcyBwZXJpb2QsIGNvbnN1bWVycyBvZiBJT0FTSUQgcGVyZm9ybSBjbGVh bnVwLgo+ICszLiBNYWxmdW5jdGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBndWVzdCBvd25lZCByZXNv dXJjZXMgZm9yIGFsbAo+ICsgICBwcm9ncmFtbWluZyBlcnJvcnMuCj4gKwo+ICtUaGUgcHJpbWFy eSBzb3VyY2Ugb2YgZXhjZXB0aW9uIGlzIHdoZW4gdGhlIGZvbGxvd2luZyBhcmUgb3V0IG9mCj4g K29yZGVyOgo+ICsKPiArMS4gU3RhcnQvU3RvcCBvZiBETUEgYWN0aXZpdHkKPiArICAgKEd1ZXN0 IGRldmljZSBkcml2ZXIsIG1kZXYgdmlhIFZGSU8pCj4gKzIuIFNldHVwL1RlYXJkb3duIG9mIElP TU1VIFBBU0lEIGNvbnRleHQsIElPVExCLCBEZXZUTEIgZmx1c2hlcwo+ICsgICAoSG9zdCBJT01N VSBkcml2ZXIgYmluZC91bmJpbmQpCj4gKzMuIFNldHVwL1RlYXJkb3duIG9mIFZNQ1MgUEFTSUQg dHJhbnNsYXRpb24gdGFibGUgZW50cmllcyAoS1ZNKSBpbgo+ICsgICBjYXNlIG9mIEVOUUNNRAo+ ICs0LiBQcm9ncmFtbWluZy9DbGVhcmluZyBob3N0IFBBU0lEIGluIFZEQ00gKEhvc3QgVkRDTSBk cml2ZXIpCj4gKzUuIElPQVNJRCBhbGxvYy9mcmVlIChIb3N0IElPQVNJRCkKPiArCj4gK1ZGSU8g aXMgdGhlICpvbmx5KiB1c2VyLWtlcm5lbCBpbnRlcmZhY2UsIHdoaWNoIGlzIHVsdGltYXRlbHkK PiArcmVzcG9uc2libGUgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZ3MuCgoiaGFuZGxpbmciCgo+ICsK PiArIzEgaXMgcHJvY2Vzc2VkIHRoZSBzYW1lIHdheSBhcyB0aGUgYXNzaWduZWQgZGV2aWNlIHRv ZGF5IGJhc2VkIG9uCj4gK2RldmljZSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBldmVudHMuIFRoZXJl IGlzIG5vIHNwZWNpYWwgaGFuZGxpbmcuCj4gKwo+ICsjMyBpcyBiYXNlZCBvbiBiaW5kL3VuYmlu ZCBldmVudHMgZW1pdHRlZCBieSAjMi4KPiArCj4gKyM0IGlzIG5hdHVyYWxseSBhbGlnbmVkIHdp dGggSU9BU0lEIGxpZmUgY3ljbGUgaW4gdGhhdCBhbiBpbGxlZ2FsCj4gK2d1ZXN0IFBBU0lEIHBy b2dyYW1taW5nIHdvdWxkIGZhaWwgaW4gb2J0YWluaW5nIHJlZmVyZW5jZSBvZiB0aGUKPiArbWF0 Y2hpbmcgaG9zdCBJT0FTSUQuCj4gKwo+ICsjNSBpcyBzaW1pbGFyIHRvICM0LiBUaGUgZmF1bHQg d2lsbCBiZSByZXBvcnRlZCB0byB0aGUgdXNlciBpZiBQQVNJRAo+ICt1c2VkIGluIHRoZSBFTlFD TUQgaXMgbm90IHNldCB1cCBpbiBWTUNTIFBBU0lEIHRyYW5zbGF0aW9uIHRhYmxlLgo+ICsKPiAr VGhlcmVmb3JlLCB0aGUgcmVtYWluaW5nIG91dCBvZiBvcmRlciBwcm9ibGVtIGlzIGJldHdlZW4g IzIgYW5kCj4gKyM1LiBJLmUuIHVuYmluZCB2cy4gZnJlZS4gTW9yZSBzcGVjaWZpY2FsbHksIGZy ZWUgYmVmb3JlIHVuYmluZC4KPiArCj4gK0lPQVNJRCBub3RpZmllciBhbmQgcmVmY291bnRpbmcg YXJlIHVzZWQgdG8gZW5zdXJlIG9yZGVyLiBGb2xsb3dpbmcKPiArYSBwdWJsaXNoZXItc3Vic2Ny aWJlciBwYXR0ZXJuIHdoZXJlOgo+ICsKPiArLSBQdWJsaXNoZXJzOiBWRklPICYgSU9NTVUKPiAr LSBTdWJzY3JpYmVyczogS1ZNLCBWRENNLCBJT01NVQo+ICsKPiArSU9BU0lEIG5vdGlmaWVyIGlz IGF0b21pYyB3aGljaCByZXF1aXJlcyBzdWJzY3JpYmVycyB0byBkbyBxdWljawo+ICtoYW5kbGlu ZyBvZiB0aGUgZXZlbnQgaW4gdGhlIGF0b21pYyBjb250ZXh0LiBXb3JrcXVldWUgY2FuIGJlIHVz ZWQgZm9yCj4gK2FueSBwcm9jZXNzaW5nIHRoYXQgcmVxdWlyZXMgdGhyZWFkIGNvbnRleHQuIElP QVNJRCByZWZlcmVuY2UgbXVzdCBiZQo+ICthY3F1aXJlZCBiZWZvcmUgcmVjZWl2aW5nIHRoZSBG UkVFIGV2ZW50LiBUaGUgcmVmZXJlbmNlIG11c3QgYmUKPiArZHJvcHBlZCBhdCB0aGUgZW5kIG9m IHRoZSBwcm9jZXNzaW5nIGluIG9yZGVyIHRvIHJldHVybiB0aGUgSU9BU0lEIHRvCj4gK3RoZSBw b29sLgo+ICsKPiArTGV0J3MgZXhhbWluZSB0aGUgSU9BU0lEIGxpZmUgY3ljbGUgYWdhaW4gd2hl biBmcmVlIGhhcHBlbnMgKmJlZm9yZSoKPiArdW5iaW5kLiBUaGlzIGNvdWxkIGJlIGEgcmVzdWx0 IG9mIG1pc2JlaGF2aW5nIGd1ZXN0cyBvciBjcmFzaC4gQXNzdW1pbmcKPiArVkZJTyBjYW5ub3Qg ZW5mb3JjZSB1bmJpbmQtPmZyZWUgb3JkZXIuIE5vdGljZSB0aGF0IHRoZSBzZXR1cCBwYXJ0IHVw Cj4gK3VudGlsIHN0ZXAgIzEyIGlzIGlkZW50aWNhbCB0byB0aGUgbm9ybWFsIGNhc2UsIHRoZSBm bG93IGJlbG93IHN0YXJ0cwo+ICt3aXRoIHN0ZXAgMTMuCj4gKwo+ICs6Ogo+ICsKPiArICAgICBW RklPICAgICAgICBJT01NVSAgICAgICAgS1ZNICAgICAgICBWRENNICAgICAgICBJT0FTSUQgICAg ICAgUmVmCj4gKyAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLgo+ICsgICAxMyAtLS0tLS0tLSBHVUVTVCBTVEFSVFMgRE1B IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAgIDE0IC0tLS0tLS0tICpHVUVTVCBNSVNC RUhBVkVTISEhKiAtLS0tLS0tLS0tLS0tLS0tCj4gKyAgIDE1IGlvYXNpZF9mcmVlKCkKPiArICAg MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb2FzaWRfbm90 aWZ5KEZSRUUpCj4gKyAgIDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFya19pb2FzaWRfaW5hY3RpdmVbMV0KPiArICAgMTggICAgICAgICAgICAgICAgICAg ICAgICAgIGt2bV9uYl9oYW5kbGVyKEZSRUUpCj4gKyAgIDE5ICAgICAgICAgICAgICAgICAgICAg ICAgICB2bWNzX3VwZGF0ZV9hdG9taWMoKQo+ICsgICAyMCAgICAgICAgICAgICAgICAgICAgICAg ICAgaW9hc2lkX3B1dF9sb2NrZWQoKSAgIC0+ICAgICAgICAgICAzCj4gKyAgIDIxICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZGNtX25iX2hhbmRsZXIoRlJFRSkKPiArICAgMjIg ICAgICAgICAgICBpb21tX25iX2hhbmRsZXIoRlJFRSkKPiArICAgMjMgaW9hc2lkX2ZyZWUoKSBy ZXR1cm5zWzJdICAgICAgICAgIHNjaGVkdWxlX3dvcmsoKSAgICAgICAgICAgMgo+ICsgICAyNCAg ICAgICAgICAgIHNjaGVkdWxlX3dvcmsoKSAgICAgICAgdmRldl9jbGVhcl93ayhocGFzaWQpCj4g KyAgIDI1ICAgICAgICAgICAgdGVhcmRvd25fcGFzaWRfd2soKQo+ICsgICAyNiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW9hc2lkX3B1dCgpIC0+ICAgICAgICAgICAxCj4gKyAg IDI3ICAgICAgICAgICAgaW9hc2lkX3B1dCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAKPiArICAgMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVjbGFpbWVkCj4gKyAgIDI5IHVuYmluZF9ncGFzaWQoKQo+ICsgICAzMCAgICAg ICAgICAgIGlvbW11X3VuYmluZCgpLT5pb2FzaWRfZmluZCgpIEZhaWxzWzNdCj4gKyAgIC0tLS0t LS0tLS0tLS0tIE5ldyBMaWZlIEN5Y2xlIEJlZ2luIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiArCj4gK05vdGU6Cj4gKwo+ICsxLiBCeSBtYXJraW5nIElPQVNJRCBpbmFjdGl2ZSBhdCBz dGVwICMxNywgbm8gbmV3IHJlZmVyZW5jZXMgY2FuIGJlCgpJcyAiaW5hY3RpdmUiIEZSRUVfUEVO RElORz8KCj4gKyAgIGhlbGQuIGlvYXNpZF9nZXQvZmluZCgpIHdpbGwgcmV0dXJuIC1FTk9FTlQ7 Cj4gKzIuIEFmdGVyIHN0ZXAgIzIzLCBhbGwgZXZlbnRzIGNhbiBnbyBvdXQgb2Ygb3JkZXIuIFNo YWxsIG5vdCBhZmZlY3QKPiArICAgdGhlIG91dGNvbWUuCj4gKzMuIElPTU1VIGRyaXZlciBmYWls cyB0byBmaW5kIHByaXZhdGUgZGF0YSBmb3IgdW5iaW5kaW5nLiBJZiB1bmJpbmQgaXMKPiArICAg Y2FsbGVkIGFmdGVyIHRoZSBzYW1lIElPQVNJRCBpcyBhbGxvY2F0ZWQgZm9yIHRoZSBzYW1lIGd1 ZXN0IGFnYWluLAo+ICsgICB0aGlzIGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuIFRoZSBkYW1hZ2Ug aXMgbGltaXRlZCB0byB0aGUgZ3Vlc3QKPiArICAgaXRzZWxmIHNpbmNlIHVuYmluZCBwZXJmb3Jt cyBwZXJtaXNzaW9uIGNoZWNraW5nIGJhc2VkIG9uIHRoZQo+ICsgICBJT0FTSUQgc2V0IGFzc29j aWF0ZWQgd2l0aCB0aGUgZ3Vlc3QgcHJvY2Vzcy4KPiArCj4gK0tWTSBQQVNJRCBUcmFuc2xhdGlv biBUYWJsZSBVcGRhdGVzCj4gK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4g K1BlciBWTSBQQVNJRCB0cmFuc2xhdGlvbiB0YWJsZSBpcyBtYWludGFpbmVkIGJ5IEtWTSBpbiBv cmRlciB0bwo+ICtzdXBwb3J0IEVOUUNNRCBpbiB0aGUgZ3Vlc3QuIFRoZSB0YWJsZSBjb250YWlu cyBob3N0LWd1ZXN0IFBBU0lECj4gK3RyYW5zbGF0aW9ucyB0byBiZSBjb25zdW1lZCBieSBDUFUg dWNvZGUuIFRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlCj4gK1BBU0lEIHN0YXRlcyBkZXBlbmRz IG9uIFZGSU8vSU9NTVUgZHJpdmVyLCB3aGVyZSBJT0NUTCBhbmQgYXRvbWljCj4gK25vdGlmaWVy cyBhcmUgdXNlZC4gS1ZNIG11c3QgcmVnaXN0ZXIgSU9BU0lEIG5vdGlmaWVyIHBlciBWTSBpbnN0 YW5jZQo+ICtkdXJpbmcgbGF1bmNoIHRpbWUuIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBoYW5k bGVkOgo+ICsKPiArMS4gQklORC9VTkJJTkQKPiArMi4gRlJFRQo+ICsKPiArUnVsZXM6Cj4gKwo+ ICsxLiBNdWx0aXBsZSBkZXZpY2VzIGNhbiBiaW5kIHdpdGggdGhlIHNhbWUgUEFTSUQsIHRoaXMg Y2FuIGJlIGRpZmZlcmVudCBQQ0kKPiArICAgZGV2aWNlcyBvciBtZGV2cyB3aXRoaW4gdGhlIHNh bWUgUENJIGRldmljZS4gSG93ZXZlciwgb25seSB0aGUKPiArICAgKmZpcnN0KiBCSU5EIGFuZCAq bGFzdCogVU5CSU5EIGVtaXQgbm90aWZpY2F0aW9ucy4KPiArMi4gSU9BU0lEIGNvZGUgaXMgcmVz cG9uc2libGUgZm9yIGVuc3VyaW5nIHRoZSBjb3JyZWN0bmVzcyBvZiBILUcKPiArICAgUEFTSUQg bWFwcGluZy4gVGhlcmUgaXMgbm8gbmVlZCBmb3IgS1ZNIHRvIHZhbGlkYXRlIHRoZQo+ICsgICBu b3RpZmljYXRpb24gZGF0YS4KPiArMy4gV2hlbiBVTkJJTkQgaGFwcGVucyAqYWZ0ZXIqIEZSRUUs IEtWTSB3aWxsIHNlZSBlcnJvciBpbgo+ICsgICBpb2FzaWRfZ2V0KCkgZXZlbiB3aGVuIHRoZSBy ZWNsYWltIGlzIG5vdCBkb25lLiBJT01NVSBkcml2ZXIgd2lsbAo+ICsgICBhbHNvIGF2b2lkIHNl bmRpbmcgVU5CSU5EIGlmIHRoZSBQQVNJRCBpcyBhbHJlYWR5IEZSRUUuCj4gKzQuIFdoZW4gS1ZN IHRlcm1pbmF0ZXMgKmJlZm9yZSogRlJFRSAmIFVOQklORCwgcmVmZXJlbmNlcyB3aWxsIGJlCj4g KyAgIGRyb3BwZWQgZm9yIGFsbCBob3N0IFBBU0lEcy4KPiArCj4gK1ZEQ00gUEFTSUQgUHJvZ3Jh bW1pbmcKPiArfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ICtWRENNIGNvbXBvc2VzIHZpcnR1YWwg ZGV2aWNlcyBhbmQgZXhwb3NlcyB0aGVtIHRvIHRoZSBndWVzdHMuIFdoZW4KPiArdGhlIGd1ZXN0 IGFsbG9jYXRlcyBhIFBBU0lEIHRoZW4gcHJvZ3JhbSBpdCB0byB0aGUgdmlydHVhbCBkZXZpY2Us IFZEQ00KPiAraW50ZXJjZXB0cyB0aGUgcHJvZ3JhbW1pbmcgYXR0ZW1wdCB0aGVuIHByb2dyYW0g dGhlIG1hdGNoaW5nIGhvc3QKCiJwcm9ncmFtcyIKClRoYW5rcywKSmVhbgoKPiArUEFTSUQgb24g dG8gdGhlIGhhcmR3YXJlLgo+ICtDb252ZXJzZWx5LCB3aGVuIGEgZGV2aWNlIGlzIGdvaW5nIGF3 YXksIFZEQ00gbXVzdCBiZSBpbmZvcm1lZCBzdWNoCj4gK3RoYXQgUEFTSUQgY29udGV4dCBvbiB0 aGUgaGFyZHdhcmUgY2FuIGJlIGNsZWFyZWQuIFRoZXJlIGNvdWxkIGJlCj4gK211bHRpcGxlIG1k ZXZzIGFzc2lnbmVkIHRvIGRpZmZlcmVudCBndWVzdHMgaW4gdGhlIHNhbWUgVkRDTS4gU2luY2UK PiArdGhlIFBBU0lEIHRhYmxlIGlzIHNoYXJlZCBhdCBQQ0kgZGV2aWNlIGxldmVsLCBsYXp5IGNs ZWFyaW5nIGlzIG5vdAo+ICtzZWN1cmUuIEEgbWFsaWNpb3VzIGd1ZXN0IGNhbiBhdHRhY2sgYnkg dXNpbmcgbmV3bHkgZnJlZWQgUEFTSURzIHRoYXQKPiArYXJlIGFsbG9jYXRlZCBieSBhbm90aGVy IGd1ZXN0Lgo+ICsKPiArQnkgaG9sZGluZyBhIHJlZmVyZW5jZSBvZiB0aGUgUEFTSUQgdW50aWwg VkRDTSBjbGVhbnMgdXAgdGhlIEhXIGNvbnRleHQsCj4gK2l0IGlzIGd1YXJhbnRlZWQgdGhhdCBQ QVNJRCBsaWZlIGN5Y2xlcyBkbyBub3QgY3Jvc3Mgd2l0aGluIHRoZSBzYW1lCj4gK2RldmljZS4K PiArCj4gKwo+ICtSZWZlcmVuY2UKPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQo+ICsxLiBodHRwczovL3NvZnR3YXJlLmludGVsLmNvbS9zaXRl cy9kZWZhdWx0L2ZpbGVzL21hbmFnZWQvYzUvMTUvYXJjaGl0ZWN0dXJlLWluc3RydWN0aW9uLXNl dC1leHRlbnNpb25zLXByb2dyYW1taW5nLXJlZmVyZW5jZS5wZGYKPiArCj4gKzIuIGh0dHBzOi8v MDEub3JnL2Jsb2dzLzIwMTkvaW50cm9kdWNpbmctaW50ZWwtZGF0YS1zdHJlYW1pbmctYWNjZWxl cmF0b3IKPiArCj4gKzMuIGh0dHBzOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2Rvd25sb2Fk L2ludGVsLWRhdGEtc3RyZWFtaW5nLWFjY2VsZXJhdG9yLXByZWxpbWluYXJ5LWFyY2hpdGVjdHVy ZS1zcGVjaWZpY2F0aW9uCj4gLS0gCj4gMi43LjQKPiAKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KaW9tbXUgbWFpbGluZyBsaXN0CmlvbW11QGxpc3RzLmxp bnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lvbW11