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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CD0FAC25B76 for ; Fri, 31 May 2024 00:09:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Dd9ytWyvw4af9JlKkg2sq0XYMAqb8QG1RlCqC/vTjmE=; b=zGrKCO7Za3VIBO vkzPWI5FTNv9a9OpTBKlRWDACsWUhmiyV4+g+JFfpP7eYCw3YmL3FWlE5sSQ2r3N1aBUmVAfUcffo eNYcLQvIJQYNaLmwap7ju+hP3Nm8xQvbcPpELJSFJIpKU2370+BhPgSEkeeKeVoBcvCryDMNOtbo1 Neqyc3Dz70U4KynDphgzW4ZMXeWWXR4Tjg59g2T749fNO2tWTxDEt5i2VtD++yABtst2Pen95wRT2 6bPhO2uClaOiD4Xcgv7r5fTbzU1e8VTjfxSw1znNaiJuXJFOYGESLA2jrEtVx9mrZOq50aH72r3/+ 1HFEffCYX6PBRUuK8Org==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCppq-00000008lXX-2HCB; Fri, 31 May 2024 00:09:30 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCppl-00000008lX2-05cW for linux-arm-kernel@lists.infradead.org; Fri, 31 May 2024 00:09:28 +0000 Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 3D14C11A3; Fri, 31 May 2024 02:09:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1717114156; bh=fegVz/cmIf29HwbAsa6sfuaO6oTpfkPL8AT6AINy9Vo=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=nb9n32/bpwzydRh6Am52Cff4lNfzUulnDImuJ5qgj+bq0ei2zKoG0ddgPj2tC7h66 ofca7XaBFD5+Ga6G23T9+0yotwYi7WdBYu2CZkFvDlXwq5fhijUmlpqDYbGQYxQEh3 Va7/v2DFvmtYFASnj12gjwvygXvbQlVO/mOTogj0= Date: Fri, 31 May 2024 03:09:07 +0300 From: Laurent Pinchart To: Daniel Scally Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, jacopo.mondi@ideasonboard.com, nayden.kanchev@arm.com, robh+dt@kernel.org, mchehab@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, jerome.forissier@linaro.org, kieran.bingham@ideasonboard.com, sakari.ailus@iki.fi Subject: Re: [PATCH v5 14/16] media: uapi: Add parameters structs to mali-c55-config.h Message-ID: <20240531000907.GG5213@pendragon.ideasonboard.com> References: <20240529152858.183799-1-dan.scally@ideasonboard.com> <20240529152858.183799-15-dan.scally@ideasonboard.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240529152858.183799-15-dan.scally@ideasonboard.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240530_170925_539318_9B054510 X-CRM114-Status: GOOD ( 47.42 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRGFuLAoKVGhhbmsgeW91IGZvciB0aGUgcGF0Y2guCgpPbiBXZWQsIE1heSAyOSwgMjAyNCBh dCAwNDoyODo1NlBNICswMTAwLCBEYW5pZWwgU2NhbGx5IHdyb3RlOgo+IEFkZCBzdHJ1Y3R1cmVz IGRlc2NyaWJpbmcgdGhlIElTUCBwYXJhbWV0ZXJzIHRvIG1hbGktYzU1LWNvbmZpZy5oCj4gCj4g QWNrZWQtYnk6IE5heWRlbiBLYW5jaGV2ICA8bmF5ZGVuLmthbmNoZXZAYXJtLmNvbT4KPiBDby1k ZXZlbG9wZWQtYnk6IEphY29wbyBNb25kaSA8amFjb3BvLm1vbmRpQGlkZWFzb25ib2FyZC5jb20+ Cj4gU2lnbmVkLW9mZi1ieTogSmFjb3BvIE1vbmRpIDxqYWNvcG8ubW9uZGlAaWRlYXNvbmJvYXJk LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgU2NhbGx5IDxkYW4uc2NhbGx5QGlkZWFzb25i b2FyZC5jb20+Cj4gLS0tCj4gQ2hhbmdlcyBpbiB2NToKPiAKPiAJLSBOZXcgcGF0Y2gKPiAKPiAg Li4uL3VhcGkvbGludXgvbWVkaWEvYXJtL21hbGktYzU1LWNvbmZpZy5oICAgIHwgNjY5ICsrKysr KysrKysrKysrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwgNjY5IGluc2VydGlvbnMoKykKPiAKPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21lZGlhL2FybS9tYWxpLWM1NS1jb25maWcu aCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZWRpYS9hcm0vbWFsaS1jNTUtY29uZmlnLmgKPiBpbmRl eCA4ZmI4OWFmNmM4NzQuLmZjZTE0YmM3NGY0YSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkv bGludXgvbWVkaWEvYXJtL21hbGktYzU1LWNvbmZpZy5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2xp bnV4L21lZGlhL2FybS9tYWxpLWM1NS1jb25maWcuaAo+IEBAIC0xNzksNCArMTc5LDY3MyBAQCBz dHJ1Y3QgbWFsaV9jNTVfc3RhdHNfYnVmZmVyIHsKPiAgCV9fdTMyIHJlc2VydmVkM1sxNV07Cj4g IH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cj4gIAo+ICsvKioKPiArICogZW51bSBtYWxpX2M1 NV9wYXJhbV9idWZmZXJfdmVyc2lvbiAtIE1hbGktQzU1IHBhcmFtZXRlcnMgYmxvY2sgdmVyc2lv bmluZwo+ICsgKgo+ICsgKiBATUFMSV9DNTVfUEFSQU1fQlVGRkVSX1YwOiBGaXJzdCB2ZXJzaW9u IG9mIE1hbGktQzU1IHBhcmFtZXRlcnMgYmxvY2sKClNvIHlvdSBsaWtlIHZlcnNpb25zIHRvIGJl IDAtYmFzZWQgPyA6LSkKCj4gKyAqLwo+ICtlbnVtIG1hbGlfYzU1X3BhcmFtX2J1ZmZlcl92ZXJz aW9uIHsKPiArCU1BTElfQzU1X1BBUkFNX0JVRkZFUl9WMCwKPiArfTsKPiArCj4gKy8qKgo+ICsg KiBlbnVtIG1hbGlfYzU1X3BhcmFtX2Jsb2NrX3R5cGUgLSBFbnVtZXJhdGlvbiBvZiBNYWxpLUM1 NSBwYXJhbWV0ZXIgYmxvY2tzCj4gKyAqCj4gKyAqIFRoaXMgZW51bWVyYXRpb24gZGVmaW5lcyB0 aGUgdHlwZXMgb2YgTWFsaS1DNTUgcGFyYW1ldGVycyBibG9jay4gRWFjaCBibG9jawo+ICsgKiBj b25maWd1cmVzIGEgc3BlY2lmaWMgcHJvY2Vzc2luZyBibG9jayBvZiB0aGUgTWFsaS1DNTUgSVNQ LiBUaGUgYmxvY2sKPiArICogdHlwZSBhbGxvd3MgdGhlIGRyaXZlciB0byBjb3JyZWN0bHkgaW50 ZXJwcmV0IHRoZSBwYXJhbWV0ZXJzIGJsb2NrIGRhdGEuCj4gKyAqCj4gKyAqIEl0IGlzIHRoZSBy ZXNwb25zaWJpbGl0eSBvZiB1c2Vyc3BhY2UgdG8gY29ycmVjdGx5IHNldCB0aGUgdHlwZSBvZiBl YWNoCj4gKyAqIHBhcmFtZXRlcnMgYmxvY2suCj4gKyAqCj4gKyAqIEBNQUxJX0M1NV9QQVJBTV9C TE9DS19TRU5TT1JfT0ZGUzogU2Vuc29yIHByZS1zaGFkaW5nIGJsYWNrIGxldmVsIG9mZnNldAo+ ICsgKiBATUFMSV9DNTVfUEFSQU1fQkxPQ0tfQUVYUF9ISVNUOiBBdXRvLWV4cG9zdXJlIDEwMjQt YmluIGhpc3RvZ3JhbQo+ICsgKgkJCQkgICAgY29uZmlndXJhdGlvbgo+ICsgKiBATUFMSV9DNTVf UEFSQU1fQkxPQ0tfQUVYUF9JSElTVDogUG9zdC1JcmlkaXggYXV0by1leHBvc3VyZSAxMDI0LWJp bgo+ICsgKgkJCQkgICAgIGhpc3RvZ3JhbSBjb25maWd1cmF0aW9uCj4gKyAqIEBNQUxJX0M1NV9Q QVJBTV9CTE9DS19BRVhQX0hJU1RfV0VJR0hUUzogQXV0by1leHBvc3VyZSAxMDI0LWJpbiBoaXN0 b2dyYW0KPiArICoJCQkJCSAgICB3ZWlnaHRpbmcKPiArICogQE1BTElfQzU1X1BBUkFNX0JMT0NL X0FFWFBfSUhJU1RfV0VJR0hUUzogUG9zdC1JcmlkaXggYXV0by1leHBvc3VyZSAxMDI0LWJpbgo+ ICsgKgkJCQkJICAgICBoaXN0b2dyYW0gd2VpZ2h0aW5nCgpEbyB5b3UgZXhwZWN0IGFwcGxpY2F0 aW9ucyB0byBuZWVkIHRvIHNldCB0aGUgaGlzdG9ncmFtIGNvbmZpZ3VyYXRpb24KYW5kIHdlaWdo dHMgc2VwYXJhdGVseSA/Cgo+ICsgKiBATUFMSV9DNTVfUEFSQU1fQkxPQ0tfRElHSVRBTF9HQUlO OiBEaWdpdGFsIGdhaW4KPiArICogQE1BTElfQzU1X1BBUkFNX0JMT0NLX0FXQl9HQUlOUzogQXV0 by13aGl0ZSBiYWxhbmNlIGdhaW5zCgpJIHdhcyB0aGlua2luZyB0aGF0IHRob3NlIHR3byBjb3Vs ZCBiZSBjb21iaW5lZCwgYnV0IGlmIHRoZSBmb3JtZXIgaXMKdXNlZCBieSBBRUMgYW5kIHRoZSBs YXR0ZXIgYnkgQVdCLCBtYXliZSBrZWVwaW5nIHRoZW0gc2VwYXJhdGUgd291bGQKbWFrZSBsaWtl IGVhc2llciBmb3IgdXNlcnNwYWNlLgoKPiArICogQE1BTElfQzU1X1BBUkFNX0JMT0NLX0FXQl9D T05GSUc6IEF1dG8td2hpdGUgYmFsYW5jZSBzdGF0aXN0aWNzIGNvbmZpZwo+ICsgKiBATUFMSV9D NTVfUEFSQU1fQkxPQ0tfQVdCX0dBSU5TX0FFWFA6IEF1dG8td2hpdGUgYmFsYW5jZSBnYWlucyBm b3IgQUVYUC0wIHRhcAo+ICsgKiBATUFMSV9DNTVfUEFSQU1fTUVTSF9TSEFESU5HX0NPTkZJRyA6 IE1lc2ggc2hhZGluZyB0YWJsZXMgY29uZmlndXJhdGlvbgo+ICsgKiBATUFMSV9DNTVfUEFSQU1f TUVTSF9TSEFESU5HX1NFTEVDVElPTjogTWVzaCBzaGFkaW5nIHRhYmxlIHNlbGVjdGlvbgo+ICsg KiBATUFMSV9DNTVfUEFSQU1fQkxPQ0tfU0VOVElORUw6IEZpcnN0IG5vbi12YWxpZCBibG9jayBp bmRleAoKWW91IHNob3VsZCBpbmRpY2F0ZSBzb21ld2hlcmUgdGhlIGNvcnJlc3BvbmRhbmNlIGJl dHdlZW4gdGhlIGJsb2NrIHR5cGUKYW5kIHRoZSBibG9jayBkYXRhIHN0cnVjdHVyZS4gSXQgY291 bGQgYmUgZG9uZSBpbiB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoCmRhdGEgc3RydWN0dXJlIGZvciBp bnN0YW5jZS4KCj4gKyAqLwo+ICtlbnVtIG1hbGlfYzU1X3BhcmFtX2Jsb2NrX3R5cGUgewo+ICsJ TUFMSV9DNTVfUEFSQU1fQkxPQ0tfU0VOU09SX09GRlMsCj4gKwlNQUxJX0M1NV9QQVJBTV9CTE9D S19BRVhQX0hJU1QsCj4gKwlNQUxJX0M1NV9QQVJBTV9CTE9DS19BRVhQX0lISVNULAo+ICsJTUFM SV9DNTVfUEFSQU1fQkxPQ0tfQUVYUF9ISVNUX1dFSUdIVFMsCj4gKwlNQUxJX0M1NV9QQVJBTV9C TE9DS19BRVhQX0lISVNUX1dFSUdIVFMsCj4gKwlNQUxJX0M1NV9QQVJBTV9CTE9DS19ESUdJVEFM X0dBSU4sCj4gKwlNQUxJX0M1NV9QQVJBTV9CTE9DS19BV0JfR0FJTlMsCj4gKwlNQUxJX0M1NV9Q QVJBTV9CTE9DS19BV0JfQ09ORklHLAo+ICsJTUFMSV9DNTVfUEFSQU1fQkxPQ0tfQVdCX0dBSU5T X0FFWFAsCj4gKwlNQUxJX0M1NV9QQVJBTV9NRVNIX1NIQURJTkdfQ09ORklHLAo+ICsJTUFMSV9D NTVfUEFSQU1fTUVTSF9TSEFESU5HX1NFTEVDVElPTiwKPiArCU1BTElfQzU1X1BBUkFNX0JMT0NL X1NFTlRJTkVMLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBtYWxpX2M1NV9wYXJhbXNf YmxvY2tfaGVhZGVyIC0gTWFsaS1DNTUgcGFyYW1ldGVyIGJsb2NrIGhlYWRlcgo+ICsgKgo+ICsg KiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBjb21tb24gcGFydCBvZiBhbGwgdGhlIElT UCBjb25maWd1cmF0aW9uCj4gKyAqIGJsb2Nrcy4gRWFjaCBwYXJhbWV0ZXJzIGJsb2NrIHNoYWxs IGVtYmVkIGFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIHR5cGUKCnMvc2hhbGwgZW1iZWQv ZW1iZWRzLwoKPiArICogYXMgaXRzIGZpcnN0IG1lbWJlciwgZm9sbG93ZWQgYnkgdGhlIGJsb2Nr LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGF0YS4gVGhlCj4gKyAqIGRyaXZlciBpbnNwZWN0cyB0 aGlzIGNvbW1vbiBoZWFkZXIgdG8gZGlzY2VybiB0aGUgYmxvY2sgdHlwZSBhbmQgaXRzIHNpemUg YW5kCj4gKyAqIHByb3Blcmx5IGhhbmRsZSB0aGUgYmxvY2sgY29udGVudCBieSBjYXN0aW5nIGl0 IHRvIHRoZSBjb3JyZWN0IGJsb2NrLXNwZWNpZmljCj4gKyAqIHR5cGUuCj4gKyAqCj4gKyAqIFRo ZSBAdHlwZSBmaWVsZCBpcyBvbmUgb2YgdGhlIHZhbHVlcyBlbnVtZXJhdGVkIGJ5Cj4gKyAqIDpj OnR5cGU6YG1hbGlfYzU1X3BhcmFtX2Jsb2NrX3R5cGVgIGFuZCBzcGVjaWZpZXMgaG93IHRoZSBk YXRhIHNob3VsZCBiZQo+ICsgKiBpbnRlcnByZXRlZCBieSB0aGUgZHJpdmVyLiBUaGUgQHNpemUg ZmllbGQgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZQo+ICsgKiBwYXJhbWV0ZXJzIGJsb2NrIGFu ZCBpcyB1c2VkIGJ5IHRoZSBkcml2ZXIgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMuIFRoZQo+ICsg KiBAZW5hYmxlZCBmaWVsZCBzcGVjaWZpZXMgaWYgdGhlIElTUCBibG9jayBzaG91bGQgYmUgZW5h YmxlZCAoYW5kIGNvbmZpZ3VyZWQKPiArICogYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBwYXJh bWV0ZXJzKSBvciBkaXNhYmxlZC4KPiArICoKPiArICogLi4gY29kZS1ibG9jazo6IGMKPiArICoK PiArICoJc3RydWN0IG1hbGlfYzU1X3BhcmFtc19ibG9ja19oZWFkZXIgKmJsb2NrID0gLi4uOwo+ ICsgKgo+ICsgKglzd2l0Y2ggKGJsb2NrLT50eXBlKSB7Cj4gKyAqCWNhc2UgTUFMSV9DNTVfUEFS QU1fQkxPQ0tfU0VOU09SX09GRlM6Cj4gKyAqCQlzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX3NlbnNv cl9vZmZfcHJlc2hhZGluZyAqc2Vuc29yX29mZnMgPQo+ICsgKgkJCShzdHJ1Y3QgbWFsaV9jNTVf cGFyYW1zX3NlbnNvcl9vZmZfcHJlc2hhZGluZyAqKWJsb2NrOwo+ICsgKgo+ICsgKgkJaWYgKGJs b2NrLT5zaXplICE9Cj4gKyAqCQkgICAgc2l6ZW9mKHN0cnVjdCBtYWxpX2M1NV9wYXJhbXNfc2Vu c29yX29mZl9wcmVzaGFkaW5nKSkKPiArICoJCQlyZXR1cm4gLUVJTlZBTDsKPiArICoKPiArICoJ CWhhbmRsZV9zZW5zb3Jfb2ZmcyhzZW5zb3Jfb2Zmcyk7Cj4gKyAqCQlicmVhazsKPiArICoKPiAr ICoJY2FzZSBNQUxJX0M1NV9QQVJBTV9CTE9DS19BRVhQX0hJU1Q6Cj4gKyAqCQlzdHJ1Y3QgbWFs aV9jNTVfcGFyYW1zX2FleHBfaGlzdCAqYWV4cF9oaXN0ID0KPiArICoJCQkoc3RydWN0IG1hbGlf YzU1X3BhcmFtc19hZXhwX2hpc3QpYmxvY2s7Cj4gKyAqCj4gKyAqCQlpZiAoYmxvY2stPnNpemUg IT0gc2l6ZW9mKG1hbGlfYzU1X3BhcmFtc19hZXhwX2hpc3QpKQo+ICsgKgkJCXJldHVybiAtRUlO VkFMOwo+ICsgKgo+ICsgKgkJaGFuZGxlX2FleHBfaGlzdChhZXNwX2hpc3QpOwo+ICsgKgkJYnJl YWs7Cj4gKyAqCj4gKyAqCS4uLgo+ICsgKgo+ICsgKgl9CgpJIHdvdWxkIHByb2JhYmx5IHNraXAg dGhpcy4gVGhlIGtlcm5lbC1zaWRlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUKZm91bmQg aW4gdGhlIGRyaXZlci4gSSB3b3VsZCBkb2N1bWVudCB0aGUgVUFQSSBoZXJlIHdpdGggZXhhbXBs ZXMKZm9jdXNzaW5nIG9uIHRoZSB1c2Vyc3BhY2Ugc2lkZSBvbmx5LgoKPiArICoKPiArICogVXNl cnNwYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBjb3JyZWN0bHkgcG9wdWxhdGluZyB0aGUgcGFyYW1l dGVycyBibG9jayBoZWFkZXIKPiArICogZmllbGRzIChAdHlwZSwgQGVuYWJsZWQgYW5kIEBzaXpl KSBhbmQgY29ycmVjdGx5IHBvcHVsYXRlIHRoZSBibG9jay1zcGVjaWZpYwo+ICsgKiBwYXJhbWV0 ZXJzLgo+ICsgKgo+ICsgKiBGb3IgZXhhbXBsZToKPiArICoKPiArICogLi4gY29kZS1ibG9jazo6 IGMKPiArICoKPiArICoJdm9pZCBwb3B1bGF0ZV9zZW5zb3Jfb2ZmcyhzdHJ1Y3QgbWFsaV9jNTVf cGFyYW1zX2Jsb2NrX2hlYWRlciAqYmxvY2spIHsKPiArICoJCWJsb2NrLT50eXBlID0gTUFMSV9D NTVfUEFSQU1fQkxPQ0tfU0VOU09SX09GRlM7Cj4gKyAqCQlibG9jay0+ZW5hYmxlZCA9IHRydWU7 Cj4gKyAqCQlibG9jay0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX3NlbnNv cl9vZmZfcHJlc2hhZGluZyk7Cj4gKyAqCj4gKyAqCQlzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX3Nl bnNvcl9vZmZfcHJlc2hhZGluZyAqc2Vuc29yX29mZnMgPQo+ICsgKgkJCShzdHJ1Y3QgbWFsaV9j NTVfcGFyYW1zX3NlbnNvcl9vZmZfcHJlc2hhZGluZyAqKWJsb2NrOwo+ICsgKgo+ICsgKgkJc2Vu c29yX29mZnMtPmNoYW4wMCA9IG9mZnNldDAwOwo+ICsgKgkJc2Vuc29yX29mZnMtPmNoYW4wMSA9 IG9mZnNldDAxOwo+ICsgKgkJc2Vuc29yX29mZnMtPmNoYW4xMCA9IG9mZnNldDEwOwo+ICsgKgkJ c2Vuc29yX29mZnMtPmNoYW4xMSA9IG9mZnNldDExOwo+ICsgKgl9Cj4gKyAqCj4gKyAqIEB0eXBl OiBUaGUgcGFyYW1ldGVycyBibG9jayB0eXBlIChlbnVtIG1hbGlfYzU1X3BhcmFtX2Jsb2NrX3R5 cGUpCj4gKyAqIEBlbmFibGVkOiBCbG9jayBlbmFibGVkL2Rpc2FibGVkIGZsYWcKCkRvZXMgdGhp cyBmbGFnIGFwcGx5IHRvIGFsbCBibG9ja3MgPyBJZiBub3QsIGl0IHdvdWxkIGJlIGdvb2QgdG8K aW5kaWNhdGUgd2hpY2ggYmxvY2tzIGl0IGFwcGxpZXMgdG8uCgpBbHNvLCBJIHRoaW5rIHdlIGRp c2N1c3NlZCBwcmV2aW91c2x5IHRoYXQsIHdoZW4gYSBibG9jayBpcyBkaXNhYmxlZCwKaXRzIGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUgbm90IGFwcGxpY2FibGUgYW55bW9yZSwgYW5kIGNv dWxkIHRoZW4KYmUgc2tpcHBlZC4gSXMgdGhhdCBzb21ldGhpbmcgdXNlZnVsIHRvIGRvID8KCj4g KyAqIEBzaXplOiBTaXplIChpbiBieXRlcykgb2YgdGhlIHBhcmFtZXRlcnMgYmxvY2sKPiArICov Cj4gK3N0cnVjdCBtYWxpX2M1NV9wYXJhbXNfYmxvY2tfaGVhZGVyIHsKPiArCWVudW0gbWFsaV9j NTVfcGFyYW1fYmxvY2tfdHlwZSB0eXBlOwo+ICsJYm9vbCBlbmFibGVkOwo+ICsJc2l6ZV90IHNp emU7CgplbnVtcywgYm9vbCBhbmQgc2l6ZV90IHNob3VsZG4ndCBiZSB1c2VkIGluIGEgVUFQSSwg YXMgdGhleSBzaXplIG1heQp2YXJ5IGJldHdlZW4gMzItIGFuZCA2NC1iaXQgYXJjaGl0ZWN0dXJl cywgbWFraW5nIDMyLWJpdCB1c2Vyc3BhY2Ugb24gYQo2NC1iaXQga2VybmVsIHJlcXVpcmUgY29t cGF0IGhhbmRsaW5nIGluIHRoZSBkcml2ZXIuIFVzZSB0eXBlcyB3aXRoCndlbGwtZGVmaW5lZCBz aXplcy4gU2FtZSBiZWxvdy4KCj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IG1hbGlfYzU1 X3BhcmFtc19zZW5zb3Jfb2ZmX3ByZXNoYWRpbmcgLSBvZmZzZXQgc3VidHJhY3Rpb24gZm9yIGVh Y2gKPiArICoJCQkJCQkgIGNvbG9yIGNoYW5uZWwKPiArICoKPiArICogUHJvdmlkZXMgcmVtb3Zh bCBvZiB0aGUgc2Vuc29yIGJsYWNrIGxldmVsIGZyb20gdGhlIHNlbnNvciBkYXRhLiBTZXBhcmF0 ZQo+ICsgKiBv76yAc2V0cyBhcmUgcHJvdmlkZWQgZm9yIGVhY2ggb2YgdGhlIGZvdXIgQmF5ZXIg Y29tcG9uZW50IGNvbG9yIGNoYW5uZWxzCgpUaGF0J3MgYSB3ZWlyZCBzcGVsbGluZyBvZiBvZmZz ZXRzLgoKPiArICogd2hpY2ggYXJlIGRlZmF1bHRlZCB0byBSLCBHciwgR2IsIEIuCgpJIHRoaW5r IGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBpbmRpY2F0ZSwgZm9yIGVhY2ggc3RydWN0dXJlLCB3aGF0 IGJsb2NrCml0IGNvcnJlc3BvbmRzIHRvIGluIHRoZSBhc2NpaSBkaWFncmFtIGluIHBhdGNoIDEy LzE2LiBPbiBhIHNpZGUgbm90ZSwKYXQgc29tZSBwb2ludCB0dXJuaW5nIHRoYXQgZGlhZ3JhbSBp bnRvIFNWRyBtYXkgbWFrZSBzZW5zZS4KCj4gKyAqCj4gKyAqIEBoZWFkZXI6IFRoZSBNYWxpLUM1 NSBwYXJhbWV0ZXJzIGJsb2NrIGhlYWRlcgo+ICsgKiBAY2hhbjAwOiBPZmZzZXQgZm9yIGNvbG9y IGNoYW5uZWwgMDAgKGRlZmF1bHQ6IFIpCj4gKyAqIEBjaGFuMDE6IE9mZnNldCBmb3IgY29sb3Ig Y2hhbm5lbCAwMSAoZGVmYXVsdDogR3IpCj4gKyAqIEBjaGFuMTA6IE9mZnNldCBmb3IgY29sb3Ig Y2hhbm5lbCAxMCAoZGVmYXVsdDogR2IpCj4gKyAqIEBjaGFuMTE6IE9mZnNldCBmb3IgY29sb3Ig Y2hhbm5lbCAxMSAoZGVmYXVsdDogQikKPiArICovCj4gK3N0cnVjdCBtYWxpX2M1NV9wYXJhbXNf c2Vuc29yX29mZl9wcmVzaGFkaW5nIHsKPiArCXN0cnVjdCBtYWxpX2M1NV9wYXJhbXNfYmxvY2tf aGVhZGVyIGhlYWRlcjsKPiArCV9fdTMyIGNoYW4wMDsKPiArCV9fdTMyIGNoYW4wMTsKPiArCV9f dTMyIGNoYW4xMDsKPiArCV9fdTMyIGNoYW4xMTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBlbnVt IG1hbGlfYzU1X2FleHBfaGlzdF90YXBfcG9pbnRzIC0gVGFwIHBvaW50cyBmb3IgdGhlIEFFWFAg aGlzdG9ncmFtCj4gKyAqIEBNQUxJX0M1NV9BRVhQX0hJU1RfVEFQX1dCOiBBZnRlciBzdGF0aWMg d2hpdGUgYmFsYW5jZQo+ICsgKiBATUFMSV9DNTVfQUVYUF9ISVNUX1RBUF9GUzogQWZ0ZXIgV0RS IEZyYW1lIFN0aXRjaAo+ICsgKiBATUFMSV9DNTVfQUVYUF9ISVNUX1RBUF9UUEc6IEFmdGVyIHRo ZSB0ZXN0IHBhdHRlcm4gZ2VuZXJhdG9yCj4gKyAqLwo+ICtlbnVtIG1hbGlfYzU1X2FleHBfaGlz dF90YXBfcG9pbnRzIHsKPiArCU1BTElfQzU1X0FFWFBfSElTVF9UQVBfV0IgPSAwLAo+ICsJTUFM SV9DNTVfQUVYUF9ISVNUX1RBUF9GUywKPiArCU1BTElfQzU1X0FFWFBfSElTVF9UQVBfVFBHLAo+ ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gbWFsaV9jNTVfYWV4cF9za2lwX3ggLSBIb3Jpem9u dGFsIHBpeGVsIHNraXBwaW5nCj4gKyAqIEBNQUxJX0M1NV9BRVhQX1NLSVBfWF9FVkVSWV8yTkQ6 IENvbGxlY3QgZXZlcnkgMm5kIHBpeGVsIGhvcml6b250YWxseQo+ICsgKiBATUFMSV9DNTVfQUVY UF9TS0lQX1hfRVZFUllfM1JEOiBDb2xsZWN0IGV2ZXJ5IDNyZCBwaXhlbCBob3Jpem9udGFsbHkK PiArICogQE1BTElfQzU1X0FFWFBfU0tJUF9YX0VWRVJZXzRUSDogQ29sbGVjdCBldmVyeSA0dGgg cGl4ZWwgaG9yaXpvbnRhbGx5Cj4gKyAqIEBNQUxJX0M1NV9BRVhQX1NLSVBfWF9FVkVSWV81VEg6 IENvbGxlY3QgZXZlcnkgNXRoIHBpeGVsIGhvcml6b250YWxseQo+ICsgKiBATUFMSV9DNTVfQUVY UF9TS0lQX1hfRVZFUllfOFRIOiBDb2xsZWN0IGV2ZXJ5IDh0aCBwaXhlbCBob3Jpem9udGFsbHkK PiArICogQE1BTElfQzU1X0FFWFBfU0tJUF9YX0VWRVJZXzlUSDogQ29sbGVjdCBldmVyeSA5dGgg cGl4ZWwgaG9yaXpvbnRhbGx5Cj4gKyAqLwo+ICtlbnVtIG1hbGlfYzU1X2FleHBfc2tpcF94IHsK PiArCU1BTElfQzU1X0FFWFBfU0tJUF9YX0VWRVJZXzJORCwKPiArCU1BTElfQzU1X0FFWFBfU0tJ UF9YX0VWRVJZXzNSRCwKPiArCU1BTElfQzU1X0FFWFBfU0tJUF9YX0VWRVJZXzRUSCwKPiArCU1B TElfQzU1X0FFWFBfU0tJUF9YX0VWRVJZXzVUSCwKPiArCU1BTElfQzU1X0FFWFBfU0tJUF9YX0VW RVJZXzhUSCwKPiArCU1BTElfQzU1X0FFWFBfU0tJUF9YX0VWRVJZXzlUSAo+ICt9OwoKRG9lcyB0 aGlzIG1lYW4gdGhhdCB0aGF0IHRoZSBoaXN0b2dyYW0gY2FuJ3Qgb3BlcmF0ZSBvbiBldmVyeSBw aXhlbHMsCmJ1dCB3aWxsIGFsd2F5cyBza2lwIGF0IGxlYXN0IGV2ZXJ5IG90aGVyIHBpeGVsID8K Cj4gKwo+ICsvKioKPiArICogZW51bSBtYWxpX2M1NV9hZXhwX3NraXBfeSAtIFZlcnRpY2FsIHBp eGVsIHNraXBwaW5nCj4gKyAqIEBNQUxJX0M1NV9BRVhQX1NLSVBfWV9BTEw6IENvbGxlY3QgZXZl cnkgc2luZ2xlIHBpeGVsIHZlcnRpY2FsbHkKPiArICogQE1BTElfQzU1X0FFWFBfU0tJUF9ZX0VW RVJZXzJORDogQ29sbGVjdCBldmVyeSAybmQgcGl4ZWwgdmVydGljYWxseQo+ICsgKiBATUFMSV9D NTVfQUVYUF9TS0lQX1lfRVZFUllfM1JEOiBDb2xsZWN0IGV2ZXJ5IDNyZCBwaXhlbCB2ZXJ0aWNh bGx5Cj4gKyAqIEBNQUxJX0M1NV9BRVhQX1NLSVBfWV9FVkVSWV80VEg6IENvbGxlY3QgZXZlcnkg NHRoIHBpeGVsIHZlcnRpY2FsbHkKPiArICogQE1BTElfQzU1X0FFWFBfU0tJUF9ZX0VWRVJZXzVU SDogQ29sbGVjdCBldmVyeSA1dGggcGl4ZWwgdmVydGljYWxseQo+ICsgKiBATUFMSV9DNTVfQUVY UF9TS0lQX1lfRVZFUllfOFRIOiBDb2xsZWN0IGV2ZXJ5IDh0aCBwaXhlbCB2ZXJ0aWNhbGx5Cj4g KyAqIEBNQUxJX0M1NV9BRVhQX1NLSVBfWV9FVkVSWV85VEg6IENvbGxlY3QgZXZlcnkgOXRoIHBp eGVsIHZlcnRpY2FsbHkKPiArICovCj4gK2VudW0gbWFsaV9jNTVfYWV4cF9za2lwX3kgewo+ICsJ TUFMSV9DNTVfQUVYUF9TS0lQX1lfQUxMLAo+ICsJTUFMSV9DNTVfQUVYUF9TS0lQX1lfRVZFUllf Mk5ELAo+ICsJTUFMSV9DNTVfQUVYUF9TS0lQX1lfRVZFUllfM1JELAo+ICsJTUFMSV9DNTVfQUVY UF9TS0lQX1lfRVZFUllfNFRILAo+ICsJTUFMSV9DNTVfQUVYUF9TS0lQX1lfRVZFUllfNVRILAo+ ICsJTUFMSV9DNTVfQUVYUF9TS0lQX1lfRVZFUllfOFRILAo+ICsJTUFMSV9DNTVfQUVYUF9TS0lQ X1lfRVZFUllfOVRICj4gK307Cj4gKwo+ICsvKioKPiArICogZW51bSBtYWxpX2M1NV9hZXhwX3Jv d19jb2x1bW5fb2Zmc2V0IC0gU3RhcnQgZnJvbSB0aGUgZmlyc3Qgb3Igc2Vjb25kIHJvdyBvcgo+ ICsgKgkJCQkJICBjb2x1bW4KPiArICogQE1BTElfQzU1X0FFWFBfRklSU1RfUk9XX09SX0NPTDoJ U3RhcnQgZnJvbSB0aGUgZmlyc3Qgcm93IC8gY29sdW1uCj4gKyAqIEBNQUxJX0M1NV9BRVhQX1NF Q09ORF9ST1dfT1JfQ09MOglTdGFydCBmcm9tIHRoZSBzZWNvbmQgcm93IC8gY29sdW1uCj4gKyAq Lwo+ICtlbnVtIG1hbGlfYzU1X2FleHBfcm93X2NvbHVtbl9vZmZzZXQgewo+ICsJTUFMSV9DNTVf QUVYUF9GSVJTVF9ST1dfT1JfQ09MID0gMSwKPiArCU1BTElfQzU1X0FFWFBfU0VDT05EX1JPV19P Ul9DT0wgPSAyLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gbWFsaV9jNTVfYWV4cF9oaXN0 X3BsYW5lX21vZGUgLSBNb2RlIGZvciB0aGUgQUVYUCBIaXN0b2dyYW1zCgpBcyBoaXN0b2dyYW1z IGFyZSBjb21wdXRlZCBvbiBiYXllciBkYXRhLCBJJ2QgdGFsayBhYm91dCAiY29tcG9uZW50Igpp bnN0ZWFkIG9mICJwbGFuZSIgaGVyZSwgdW5sZXNzIHRoZSB3b3JkIHBsYW5lIG1hdGNoZXMgZG9j dW1lbnRhdGlvbi4KCj4gKyAqIEBNQUxJX0M1NV9BRVhQX0hJU1RfQ09NQklORUQ6IEFsbCBjb2xv ciBwbGFuZXMgaW4gb25lIDEwMjQtYmluIGhpc3RvZ3JhbQo+ICsgKiBATUFMSV9DNTVfQUVYUF9I SVNUX1NFUEFSQVRFOiBFYWNoIGNvbG9yIHBsYW5lIGluIG9uZSAyNTYtYmluIGhpc3RvZ3JhbSB3 aXRoIGEgYmluIHdpZHRoIG9mIDE2Cj4gKyAqIEBNQUxJX0M1NV9BRVhQX0hJU1RfRk9DVVNfMDA6 IFRvcCBsZWZ0IHBsYW5lIGluIHRoZSBmaXJzdCBiYW5rLCByZXN0IGluIHNlY29uZCBiYW5rCj4g KyAqIEBNQUxJX0M1NV9BRVhQX0hJU1RfRk9DVVNfMDE6IFRvcCByaWdodCBwbGFuZSBpbiB0aGUg Zmlyc3QgYmFuaywgcmVzdCBpbiBzZWNvbmQgYmFuawo+ICsgKiBATUFMSV9DNTVfQUVYUF9ISVNU X0ZPQ1VTXzEwOiBCb3R0b20gbGVmdCBwbGFuZSBpbiB0aGUgZmlyc3QgYmFuaywgcmVzdCBpbiBz ZWNvbmQgYmFuawo+ICsgKiBATUFMSV9DNTVfQUVYUF9ISVNUX0ZPQ1VTXzExOiBCb3R0b20gcmln aHQgcGxhbmUgaW4gdGhlIGZpcnN0IGJhbmssIHJlc3QgaW4gc2Vjb25kIGJhbmsKPiArICoKPiAr ICogSW4gdGhlICJmb2N1cyIgbW9kZXMgc3RhdGlzdGljcyBhcmUgY29sbGVjdGVkIGludG8gdHdv IDUxMi1iaW4gaGlzdG9ncmFtcwo+ICsgKiB3aXRoIGEgYmluIHdpZHRoIG9mIDguIE9uZSBjb2xv dXIgcGxhbmUgaXMgaW4gdGhlIGZpcnN0IGhpc3RvZ3JhbSB3aXRoIHRoZQo+ICsgKiByZW1haW5k ZXIgY29tYmluZWQgaW50byB0aGUgc2Vjb25kLiBUaGUgZm91ciBvcHRpb25zIHJlcHJlc2VudCB3 aGljaCBvZiB0aGUKPiArICogZm91ciBwb3NpdGlvbnMgaW4gYSBiYXllciBwYXR0ZXJuIGFyZSB0 aGUgZm9jdXNlZCBwbGFuZS4KCkhvdyBkb2VzIHRoYXQgd29yayB3aXRoIHgveSBza2lwcGluZyA/ IElzIHNraXBwaW5nIHRoZW4gYXBwbGllZCB0byAyeDIKYmxvY2tzLCBvciBzdGlsbCB0byBwaXhl bHMgPwoKPiArICovCj4gK2VudW0gbWFsaV9jNTVfYWV4cF9oaXN0X3BsYW5lX21vZGUgewo+ICsJ TUFMSV9DNTVfQUVYUF9ISVNUX0NPTUJJTkVEID0gMCwKPiArCU1BTElfQzU1X0FFWFBfSElTVF9T RVBBUkFURSA9IDEsCj4gKwlNQUxJX0M1NV9BRVhQX0hJU1RfRk9DVVNfMDAgPSA0LAo+ICsJTUFM SV9DNTVfQUVYUF9ISVNUX0ZPQ1VTXzAxID0gNSwKPiArCU1BTElfQzU1X0FFWFBfSElTVF9GT0NV U18xMCA9IDYsCj4gKwlNQUxJX0M1NV9BRVhQX0hJU1RfRk9DVVNfMTEgPSA3LAo+ICt9Owo+ICsK PiArLyoqCj4gKyAqIHN0cnVjdCBtYWxpX2M1NV9wYXJhbXNfYWV4cF9oaXN0IC0gY29uZmlndXJh dGlvbiBmb3IgQUVYUCBtZXRlcmluZyBoaXN0cwo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdCBhbGxv d3MgdXNlcnMgdG8gY29uZmlndXJlIHRoZSAxMDI0LWJpbiBBRVhQIGhpc3RvZ3JhbXMuIEJyb2Fk bHkKPiArICogc3BlYWtpbmcgdGhlIHBhcmFtZXRlcnMgYWxsb3cgeW91IHRvIG1hc2sgcGFydGlj dWxhciByZWdpb25zIG9mIHRoZSBpbWFnZSBhbmQKPiArICogdG8gc2VsZWN0IGRpZmZlcmVudCBr aW5kcyBvZiBoaXN0b2dyYW0uCj4gKyAqCj4gKyAqIEBoZWFkZXI6CQlUaGUgTWFsaS1DNTUgcGFy YW1ldGVycyBibG9jayBoZWFkZXIKPiArICogQHNraXBfeDoJCUhvcml6b250YWwgZGVjaW1hdGlv bi4gU2VlIGVudW0gbWFsaV9jNTVfYWV4cF9za2lwX3gKPiArICogQG9mZnNldF94OgkJQ29sdW1u IHRvIHN0YXJ0IGZyb20uIFNlZSBlbnVtIG1hbGlfYzU1X2FleHBfcm93X2NvbHVtbl9vZmZzZXQK PiArICogQHNraXBfeToJCVZlcnRpY2FsIGRlY2ltYXRpb24uIFNlZSBlbnVtIG1hbGlfYzU1X2Fl eHBfc2tpcF95Cj4gKyAqIEBvZmZzZXRfeToJCVJvdyB0byBzdGFydCBmcm9tLiBTZWUgZW51bSBt YWxpX2M1NV9hZXhwX3Jvd19jb2x1bW5fb2Zmc2V0CgpEbyB0aGUgb2Zmc2V0cyBuZWVkIHRvIGJl IG11bHRpcGxlcyBvZiAyID8KCj4gKyAqIEBzY2FsZV9ib3R0b206CXNjYWxlIG9mIGJvdHRvbSBo YWxmIG9mIHJhbmdlOiAwPTF4ICwxPTJ4LCAyPTR4LCA0PTh4LCA0PTE2eAoKQ291bGQgeW91IGVs YWJvcmF0ZSBvbiB0aGlzID8KCj4gKyAqIEBzY2FsZV90b3A6CQlzY2FsZSBvZiB0b3AgaGFsZiBv ZiByYW5nZTogMD0xeCAsMT0yeCwgMj00eCwgND04eCwgND0xNngKPiArICogQHBsYW5lX21vZGU6 CQlQbGFuZSBzZXBhcmF0aW9uIG1vZGUuIFNlZSBlbnVtIG1hbGlfYzU1X2FleHBfaGlzdF9wbGFu ZV9tb2RlCj4gKyAqIEB0YXBfcG9pbnQ6CQlUYXAgcG9pbnQgZm9yIGhpc3RvZ3JhbSBmcm9tIGVu dW0gbWFsaV9jNTVfYWV4cF9oaXN0X3RhcF9wb2ludHMuCj4gKyAqCQkJVGhpcyBwYXJhbWV0ZXIg aXMgdW51c2VkIGZvciB0aGUgcG9zdC1JcmlkaXggSGlzdG9ncmFtCj4gKyAqLwo+ICtzdHJ1Y3Qg bWFsaV9jNTVfcGFyYW1zX2FleHBfaGlzdCB7Cj4gKwlzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2Js b2NrX2hlYWRlciBoZWFkZXI7Cj4gKwlfX3U4IHNraXBfeDsKPiArCV9fdTggb2Zmc2V0X3g7Cj4g KwlfX3U4IHNraXBfeTsKPiArCV9fdTggb2Zmc2V0X3k7Cj4gKwlfX3U4IHNjYWxlX2JvdHRvbTsK PiArCV9fdTggc2NhbGVfdG9wOwo+ICsJX191OCBwbGFuZV9tb2RlOwo+ICsJX191OCB0YXBfcG9p bnQ7Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IG1hbGlfYzU1X3BhcmFtc19hZXhwX3dl aWdodHMgLSBBcnJheSBvZiB3ZWlnaHRzIGZvciBBRVhQIG1ldGVyaW5nCj4gKyAqCj4gKyAqIFRo aXMgc3RydWN0IGFsbG93cyB1c2VycyB0byBjb25maWd1cmUgdGhlIHdlaWdodGluZyBmb3IgYm90 aCBvZiB0aGUgMTAyNC1iaW4KPiArICogQUVYUCBoaXN0b2dyYW1zLiBUaGUgcGl4ZWwgZGF0YSBj b2xsZWN0ZWQgZm9yIGVhY2ggem9uZSBpcyBtdWx0aXBsaWVkIGJ5IHRoZQo+ICsgKiBjb3JyZXNw b25kaW5nIHdlaWdodCBmcm9tIHRoaXMgYXJyYXksIHdoaWNoIG1heSBiZSB6ZXJvIGlmIHRoZSBp bnRlbnRpb24gaXMKPiArICogdG8gbWFzayBvZmYgdGhlIHpvbmUgZW50aXJlbHkuCj4gKyAqCj4g KyAqIEBoZWFkZXI6CQlUaGUgTWFsaS1DNTUgcGFyYW1ldGVycyBibG9jayBoZWFkZXIKPiArICog QG5vZGVzX3VzZWRfaG9yaXo6CU51bWJlciBvZiBhY3RpdmUgem9uZXMgaG9yaXpvbnRhbGx5IFsw Li4xNV0KPiArICogQG5vZGVzX3VzZWRfdmVydDoJTnVtYmVyIG9mIGFjdGl2ZSB6b25lcyB2ZXJ0 aWNhbGx5IFswLi4xNV0KCklzIHRoZSBpbWFnZSBhdXRvbWF0aWNhbGx5IHNwbGl0IGluIHRoZSBu dW1iZXIgb2Ygem9uZXMgd2l0aCBhIHVuaWZvcm0KZGlzdHJpYnV0aW9uID8KCldoYXQgaGFwcGVu cyBpZiB0aGUgbnVtYmVyIG9mIHpvbmVzIGlzIDAgPwoKPiArICogQHpvbmVfd2VpZ2h0czoJWm9u ZSB3ZWlnaHRpbmcuIEluZGV4IGlzIHJvdypjb2wgd2hlcmUgMCwwIGlzIHRoZSB0b3AKPiArICog CQkJbGVmdCB6b25lIGNvbnRpbnVpbmcgaW4gcmFzdGVyIG9yZGVyLiBFYWNoIHpvbmUgY2FuIGJl Cj4gKyAqCQkJd2VpZ2h0ZWQgaW4gdGhlIHJhbmdlIFswLi4xNV0uIFRoZSBudW1iZXIgb2Ygcm93 cyBhbmQKPiArICoJCQljb2x1bW5zIGlzIGRlZmluZWQgYnkgQG5vZGVzX3VzZWRfdmVydCBhbmQK PiArICoJCQlAbm9kZXNfdXNlZF9ob3Jpego+ICsgKi8KPiArc3RydWN0IG1hbGlfYzU1X3BhcmFt c19hZXhwX3dlaWdodHMgewo+ICsJc3RydWN0IG1hbGlfYzU1X3BhcmFtc19ibG9ja19oZWFkZXIg aGVhZGVyOwo+ICsJX191OCBub2Rlc191c2VkX2hvcml6Owo+ICsJX191OCBub2Rlc191c2VkX3Zl cnQ7Cj4gKwlfX3U4IHpvbmVfd2VpZ2h0c1tNQUxJX0M1NV9NQVhfWk9ORVNdOwo+ICt9Owo+ICsK PiArLyoqCj4gKyAqIHN0cnVjdCBtYWxpX2M1NV9wYXJhbXNfZGlnaXRhbF9nYWluIC0gRGlnaXRh bCBnYWluIHZhbHVlCj4gKyAqCj4gKyAqIFRoaXMgc3RydWN0IGNhcnJpZXMgYSBkaWdpdGFsIGdh aW4gdmFsdWUgdG8gc2V0IGluIHRoZSBJU1AKPiArICoKPiArICogQGhlYWRlcjoJVGhlIE1hbGkt QzU1IHBhcmFtZXRlcnMgYmxvY2sgaGVhZGVyCj4gKyAqIEBnYWluOglUaGUgZGlnaXRhbCBnYWlu IHZhbHVlIHRvIGFwcGx5LCBpbiBRNS44IGZvcm1hdC4KPiArICovCj4gK3N0cnVjdCBtYWxpX2M1 NV9wYXJhbXNfZGlnaXRhbF9nYWluIHsKPiArCXN0cnVjdCBtYWxpX2M1NV9wYXJhbXNfYmxvY2tf aGVhZGVyIGhlYWRlcjsKPiArCV9fdTE2IGdhaW47Cj4gK307Cj4gKwo+ICsvKioKPiArICogZW51 bSBtYWxpX2M1NV9hd2Jfc3RhdHNfbW9kZSAtIFN0YXRpc3RpY3MgbW9kZSBmb3IgQVdCCj4gKyAq IEBNQUxJX0M1NV9BV0JfTU9ERV9HUkJSOiBTdGF0aXN0aWNzIGNvbGxlY3RlZCBhcyBHcmVlbi9S ZWQgYW5kIEJsdWUvUmVkIHJhdGlvcwo+ICsgKiBATUFMSV9DNTVfQVdCX01PREVfUkdCRzogU3Rh dGlzdGljcyBjb2xsZWN0ZWQgYXMgUmVkL0dyZWVuIGFuZCBCbHVlL0dyZWVuIHJhdGlvcwo+ICsg Ki8KPiArZW51bSBtYWxpX2M1NV9hd2Jfc3RhdHNfbW9kZSB7Cj4gKyAgICAgICBNQUxJX0M1NV9B V0JfTU9ERV9HUkJSID0gMCwKPiArICAgICAgIE1BTElfQzU1X0FXQl9NT0RFX1JHQkcsCj4gK307 Cj4gKwo+ICsvKioKPiArICogc3RydWN0IG1hbGlfYzU1X3BhcmFtc19hd2JfZ2FpbnMgLSBHYWlu IHNldHRpbmdzIGZvciBhdXRvIHdoaXRlIGJhbGFuY2UKPiArICoKPiArICogVGhpcyBzdHJ1Y3Qg YWxsb3dzIHVzZXJzIHRvIGNvbmZpZ3VyZSB0aGUgZ2FpbnMgZm9yIGF1dG8td2hpdGUgYmFsYW5j ZS4gVGhlcmUKPiArICogYXJlIGZvdXIgZ2FpbiBzZXR0aW5ncyBjb3JyZXNwb25kaW5nIHRvIGVh Y2ggY29sb3VyIGNoYW5uZWwgaW4gdGhlIGJheWVyCj4gKyAqIGRvbWFpbi4gQWx0aG91Z2ggbmFt ZWQgZ2VuZXJpY2FsbHksIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBnYWluIGFwcGxpZWQK PiArICogYW5kIHRoZSBjb2xvdXIgY2hhbm5lbCBpcyBkb25lIGF1dG9tYXRpY2FsbHkgd2l0aGlu IHRoZSBJU1AgZGVwZW5kaW5nIG9uIHRoZQo+ICsgKiBpbnB1dCBmb3JtYXQsIGFuZCBzbyB0aGUg Zm9sbG93aW5nIG1hcHBpbmcgYWx3YXlzIGhvbGRzIHRydWU6Ogo+ICsgKgo+ICsgKglnYWluMDAg PSBSCj4gKyAqCWdhaW4wMSA9IEdyCj4gKyAqCWdhaW4xMCA9IEdiCj4gKyAqCWdhaW4xMSA9IEIK CkhvdyBhYm91dCBuYW1pbmcgdGhlbSBhY2NvcmRpbmdseSB0aGVuID8gOi0pCgo+ICsgKgo+ICsg KiBBbGwgb2YgdGhlIGdhaW5zIGFyZSBzdG9yZWQgaW4gUTQuOCBmb3JtYXQuCj4gKyAqCj4gKyAq IEBoZWFkZXI6CVRoZSBNYWxpLUM1NSBwYXJhbWV0ZXJzIGJsb2NrIGhlYWRlcgo+ICsgKiBAZ2Fp bjAwOglNdWx0aXBsaWVyIGZvciBjb2xvdXIgY2hhbm5lbCAwMAo+ICsgKiBAZ2FpbjAxOglNdWx0 aXBsaWVyIGZvciBjb2xvdXIgY2hhbm5lbCAwMQo+ICsgKiBAZ2FpbjEwOglNdWx0aXBsaWVyIGZv ciBjb2xvdXIgY2hhbm5lbCAxMAo+ICsgKiBAZ2FpbjExOglNdWx0aXBsaWVyIGZvciBjb2xvdXIg Y2hhbm5lbCAxMQo+ICsgKi8KPiArc3RydWN0IG1hbGlfYzU1X3BhcmFtc19hd2JfZ2FpbnMgewo+ ICsJc3RydWN0IG1hbGlfYzU1X3BhcmFtc19ibG9ja19oZWFkZXIgaGVhZGVyOwo+ICsJX191MTYg Z2FpbjAwOwo+ICsJX191MTYgZ2FpbjAxOwo+ICsJX191MTYgZ2FpbjEwOwo+ICsJX191MTYgZ2Fp bjExOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gbWFsaV9jNTVfcGFyYW1zX2F3Yl90YXBf cG9pbnRzIC0gVGFwIHBvaW50cyBmb3IgdGhlIEFXQiBzdGF0aXN0aWNzCj4gKyAqIEBNQUxJX0M1 NV9BV0JfU1RBVFNfVEFQX1BGOiBJbW1lZGlhdGVseSBhZnRlciB0aGUgUHVycGxlIEZyaW5nZSBi bG9jawo+ICsgKiBATUFMSV9DNTVfQVdCX1NUQVRTX1RBUF9DTlI6IEltbWVkaWF0ZWx5IGFmdGVy IHRoZSBDTlIgYmxvY2sKPiArICovCj4gK2VudW0gbWFsaV9jNTVfcGFyYW1zX2F3Yl90YXBfcG9p bnRzIHsKPiArCU1BTElfQzU1X0FXQl9TVEFUU19UQVBfUEYgPSAwLAo+ICsJTUFMSV9DNTVfQVdC X1NUQVRTX1RBUF9DTlIsCj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IG1hbGlfYzU1X3Bh cmFtc19hd2JfY29uZmlnIC0gU3RhdHMgc2V0dGluZ3MgZm9yIGF1dG8td2hpdGUgYmFsYW5jZQo+ ICsgKgo+ICsgKiBUaGlzIHN0cnVjdCBhbGxvd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN0 YXRpc3RpY3MgZ2VuZXJhdGVkIGZvciBhdXRvCj4gKyAqIHdoaXRlIGJhbGFuY2UuIFBpeGVsIGlu dGVuc2l0eSBsaW1pdHMgY2FuIGJlIHNldCB0byBleGNsdWRlIG92ZXJseSBicmlnaHQgb3IKPiAr ICogZGFyayByZWdpb25zIG9mIGFuIGltYWdlIGZyb20gdGhlIHN0YXRpc3RpY3MgZW50aXJlbHku IENvbG91ciByYXRpbyBtaW5pbWEKPiArICogYW5kIG1heGltYSBjYW4gYmUgc2V0IHRvIGRpc2Nv dW50IHBpeGVscyB3aG8ncyByYXRpb3MgZmFsbCBvdXRzaWRlIHRoZQo+ICsgKiBkZWZpbmVkIGJv dW5kYXJpZXM7IHRoZXJlIGFyZSB0d28gc2V0cyBvZiByZWdpc3RlcnMgdG8gZG8gdGhpcyAtIHRo ZQo+ICsgKiAibWluL21heCIgcmF0aW9zIHdoaWNoIGJvdW5kIGEgcmVnaW9uIGFuZCB0aGUgImhp Z2gvbG93IiByYXRpb3Mgd2hpY2ggZnVydGhlcgo+ICsgKiB0cmltIHRoZSB1cHBlciBhbmQgbG93 ZXIgcmF0aW9zLiBGb3IgZXhhbXBsZSB3aXRoIHRoZSBib3VuZGFyaWVzIGNvbmZpZ3VyZWQKPiAr ICogYXMgZm9sbG93cywgb25seSBwaXhlbHMgd2hvcyBjb2xvdXIgcmF0aW9zIGZhbGxzIGludG8g dGhlIHJlZ2lvbiBtYXJrZWQgIkEiCj4gKyAqIHdvdWxkIGJlIGNvdW50ZWQ6Ogo+ICsgKgo+ICsg KgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3JfaGlnaAo+ICsgKgkgICAgMi4wIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8Cj4gKyAqCSAgICAgICAgfCAgICAgICAgICAgICAgIGNiX21h eCAtLT4gX19fX19fX19fX19fX19fX19fX19fX19fX3ZfX19fXwo+ICsgKgkgICAgMS44IHwgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBcICAgIHwKPiAr ICoJICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgIFwgICB8Cj4gKyAqCSAgICAxLjYgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgXCAgfAo+ICsgKgkgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIHwKPiArICoJIGMgIDEu NCB8ICAgICAgICAgICAgICAgY2JfbG93IC0tPnxcICAgICAgICAgICAgICBBICAgICAgICAgICAg IFx8PC0tICBjYl9oaWdoCj4gKyAqCSBiICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8 IFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKgkgICAgMS4yIHwgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICoJIHIg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBcICAgICAgICAgICAgICAgICAgICAg ICAgICB8Cj4gKyAqCSBhICAxLjAgfCAgICAgICAgICAgICAgY2JfbWluIC0tPiB8X19fX1xfX19f X19fX19fX19fX19fX19fX19fX19ffAo+ICsgKgkgdCAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgXiAgICBeICAgICAgICAgICAgICAgICAgICAgICAgIF4KPiArICoJIGkgIDAuOCB8ICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4g KyAqCSBvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBjcl9taW4gIHwgICAgICAgICAgICAg ICAgICAgICAgIGNyX21heAo+ICsgKgkgcyAgMC42IHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8Cj4gKyAqCSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JfbG93 Cj4gKyAqCSAgICAwLjQgfAo+ICsgKgkgICAgICAgIHwKPiArICoJICAgIDAuMiB8Cj4gKyAqCSAg ICAgICAgfAo+ICsgKgkgICAgMC4wIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiArICoJICAgICAgICAwLjAgICAwLjIgICAw LjQgICAwLjYgICAwLjggICAxLjAgICAxLjIgICAxLjQgICAxLjYgICAxLjggICAyLjAKPiArICoJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciByYXRpb3MKPiArICoKPiArICog QGhlYWRlcjoJCVRoZSBNYWxpLUM1NSBwYXJhbWV0ZXJzIGJsb2NrIGhlYWRlcgo+ICsgKiBAdGFw X3BvaW50OgkJVGhlIHRhcCBwb2ludCBmcm9tIGVudW0gbWFsaV9jNTVfcGFyYW1zX2F3Yl90YXBf cG9pbnRzCj4gKyAqIEBzdGF0c19tb2RlOgkJQVdCIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBtb2Rl LCBzZWUgOmM6dHlwZTpgbWFsaV9jNTVfYXdiX3N0YXRzX21vZGVgCj4gKyAqIEB3aGl0ZV9sZXZl bDoJVXBwZXIgcGl4ZWwgaW50ZW5zaXR5IChJLkUuIHJhdyBwaXhlbCB2YWx1ZXMpIGxpbWl0Cj4g KyAqIEBibGFja19sZXZlbDoJTG93ZXIgcGl4ZWwgaW50ZW5zaXR5IChJLkUuIHJhdyBwaXhlbCB2 YWx1ZXMpIGxpbWl0Cj4gKyAqIEBjcl9tYXg6CQlNYXhpbXVtIFIvRyByYXRpbyAoUTQuOCBmb3Jt YXQpCj4gKyAqIEBjcl9taW46CQlNaW5pbXVtIFIvRyByYXRpbyAoUTQuOCBmb3JtYXQpCj4gKyAq IEBjYl9tYXg6CQlNYXhpbXVtIEIvRyByYXRpbyAoUTQuOCBmb3JtYXQpCj4gKyAqIEBjYl9taW46 CQlNaW5pbXVtIEIvRyByYXRpbyAoUTQuOCBmb3JtYXQpCj4gKyAqIEBub2Rlc191c2VkX2hvcml6 OglOdW1iZXIgb2YgYWN0aXZlIHpvbmVzIGhvcml6b250YWxseSBbMC4uMTVdCj4gKyAqIEBub2Rl c191c2VkX3ZlcnQ6CU51bWJlciBvZiBhY3RpdmUgem9uZXMgdmVydGljYWxseSBbMC4uMTVdCj4g KyAqIEBjcl9oaWdoOgkJUi9HIHJhdGlvIHRyaW0gaGlnaCAoUTQuOCBmb3JtYXQpCj4gKyAqIEBj cl9sb3c6CQlSL0cgcmF0aW8gdHJpbSBsb3cgKFE0LjggZm9ybWF0KQo+ICsgKiBAY2JfaGlnaDoJ CUIvRyByYXRpbyB0cmltIGhpZ2ggKFE0LjggZm9ybWF0KQo+ICsgKiBAY2JfbG93OgkJQi9HIHJh dGlvIHRyaW0gbG93IChRNC44IGZvcm1hdCkKPiArICovCj4gK3N0cnVjdCBtYWxpX2M1NV9wYXJh bXNfYXdiX2NvbmZpZyB7Cj4gKwlzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2Jsb2NrX2hlYWRlciBo ZWFkZXI7Cj4gKwlfX3U4IHRhcF9wb2ludDsKPiArCV9fdTggc3RhdHNfbW9kZTsKPiArCV9fdTE2 IHdoaXRlX2xldmVsOwo+ICsJX191MTYgYmxhY2tfbGV2ZWw7Cj4gKwlfX3UxNiBjcl9tYXg7Cj4g KwlfX3UxNiBjcl9taW47Cj4gKwlfX3UxNiBjYl9tYXg7Cj4gKwlfX3UxNiBjYl9taW47Cj4gKwlf X3U4IG5vZGVzX3VzZWRfaG9yaXo7Cj4gKwlfX3U4IG5vZGVzX3VzZWRfdmVydDsKPiArCV9fdTE2 IGNyX2hpZ2g7Cj4gKwlfX3UxNiBjcl9sb3c7Cj4gKwlfX3UxNiBjYl9oaWdoOwo+ICsJX191MTYg Y2JfbG93Owo+ICt9Owo+ICsKPiArI2RlZmluZSBNQUxJX0M1NV9OVU1fTUVTSF9TSEFESU5HX0VM RU1FTlRTIDMwNzIKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX21lc2hf c2hhZGluZ19jb25maWcgLSBNZXNoIHNoYWRpbmcgY29uZmlndXJhdGlvbgo+ICsgKgo+ICsgKiBU aGUgbWVzaCBzaGFkaW5nIGNvcnJlY3Rpb24gbW9kdWxlIGFsbG93cyBwcm9ncmFtbWluZyBhIHNl cGFyYXRlIHRhYmxlIG9mCj4gKyAqIGVpdGhlciAxNngxNiBvciAzMngzMiBub2RlIGNvZWZmaWNp ZW50cyBmb3IgMyBkaWZmZXJlbnQgbGlnaHQgc291cmNlcy4gVGhlCj4gKyAqIGZpbmFsIGNvcnJl Y3Rpb24gY29lZmZpY2llbnRzIGFwcGxpZWQgYXJlIGNvbXB1dGVkIGJ5IGJsZW5kaW5nIHRoZQo+ ICsgKiBjb2VmZmljaWVudHMgZnJvbSB0d28gdGFibGVzIHRvZ2V0aGVyLgo+ICsgKgo+ICsgKiBB IHBhZ2Ugb2YgMTAyNCAzMi1iaXQgaW50ZWdlcnMgaXMgYXNzb2NpYXRlZCB0byBlYWNoIGNvbG91 ciBjaGFubmVsLCB3aXRoCj4gKyAqIHBhZ2VzIHN0b3JlZCBjb25zZWN1dGl2ZWx5IGluIG1lbW9y eS4gRWFjaCAzMi1iaXQgaW50ZWdlciBwYWNrcyAzIDgtYml0Cj4gKyAqIGNvcnJlY3Rpb24gY29l ZmZpY2llbnRzIGZvciBhIHNpbmdsZSBub2RlLCBvbmUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIGxp Z2h0Cj4gKyAqIHNvdXJjZXMuIFRoZSA4IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgdW51c2Vk LiBUaGUgZm9sbG93aW5nIHRhYmxlCj4gKyAqIGRlc2NyaWJlcyB0aGUgbGF5b3V0OjoKPiArICoK PiArICoJKy0tLS0tLS0tLS0tIFBhZ2UgKENvbG91ciBQbGFuZSkgMCAtLS0tLS0tLS0tLS0tKwo+ ICsgKgl8IEBtZXNoW2ldICB8IE1lc2ggUG9pbnQgfCBCaXRzICB8IExpZ2h0IFNvdXJjZSB8Cj4g KyAqCSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLSsKPiAr ICoJfCAgICAgICAgIDAgfCAgICAgICAgMCwwIHwgMTYsMjMgfCBMUzIgICAgICAgICAgfAo+ICsg Kgl8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAwOC0xNSB8IExTMSAgICAgICAgICB8Cj4gKyAq CXwgICAgICAgICAgIHwgICAgICAgICAgICB8IDAwLTA3IHwgTFMwICAgICAgICAgIHwKPiArICoJ Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tKwo+ICsgKgl8 ICAgICAgICAgMSB8ICAgICAgICAwLDEgfCAxNiwyMyB8IExTMiAgICAgICAgICB8Cj4gKyAqCXwg ICAgICAgICAgIHwgICAgICAgICAgICB8IDA4LTE1IHwgTFMxICAgICAgICAgIHwKPiArICoJfCAg ICAgICAgICAgfCAgICAgICAgICAgIHwgMDAtMDcgfCBMUzAgICAgICAgICAgfAo+ICsgKgkrLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCj4gKyAqCXwgICAg ICAgLi4uIHwgICAgICAgIC4uLiB8IC4uLiAgIHwgLi4uICAgICAgICAgIHwKPiArICoJKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tKwo+ICsgKgl8ICAgICAg MTAyMyB8ICAgICAgMzEsMzEgfCAxNiwyMyB8IExTMiAgICAgICAgICB8Cj4gKyAqCXwgICAgICAg ICAgIHwgICAgICAgICAgICB8IDA4LTE1IHwgTFMxICAgICAgICAgIHwKPiArICoJfCAgICAgICAg ICAgfCAgICAgICAgICAgIHwgMDAtMDcgfCBMUzAgICAgICAgICAgfAo+ICsgKgkrLS0tLS0tLS0t LS0gUGFnZSAoQ29sb3VyIFBsYW5lKSAxIC0tLS0tLS0tLS0tLS0rCj4gKyAqCXwgQG1lc2hbaV0g IHwgTWVzaCBQb2ludCB8IEJpdHMgIHwgTGlnaHQgU291cmNlIHwKPiArICoJKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tKwo+ICsgKgl8ICAgICAgMTAyNCB8 ICAgICAgICAwLDAgfCAxNiwyMyB8IExTMiAgICAgICAgICB8Cj4gKyAqCXwgICAgICAgICAgIHwg ICAgICAgICAgICB8IDA4LTE1IHwgTFMxICAgICAgICAgIHwKPiArICoJfCAgICAgICAgICAgfCAg ICAgICAgICAgIHwgMDAtMDcgfCBMUzAgICAgICAgICAgfAo+ICsgKgkrLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCj4gKyAqCXwgICAgICAxMDI1IHwgICAg ICAgIDAsMSB8IDE2LDIzIHwgTFMyICAgICAgICAgIHwKPiArICoJfCAgICAgICAgICAgfCAgICAg ICAgICAgIHwgMDgtMTUgfCBMUzEgICAgICAgICAgfAo+ICsgKgl8ICAgICAgICAgICB8ICAgICAg ICAgICAgfCAwMC0wNyB8IExTMCAgICAgICAgICB8Cj4gKyAqCSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLSsKPiArICoJfCAgICAgICAuLi4gfCAgICAgICAg Li4uIHwgLi4uICAgfCAuLi4gICAgICAgICAgfAo+ICsgKgkrLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCj4gKyAqCXwgICAgICAyMDQ3IHwgICAgICAzMSwz MSB8IDE2LDIzIHwgTFMyICAgICAgICAgIHwKPiArICoJfCAgICAgICAgICAgfCAgICAgICAgICAg IHwgMDgtMTUgfCBMUzEgICAgICAgICAgfAo+ICsgKgl8ICAgICAgICAgICB8ICAgICAgICAgICAg fCAwMC0wNyB8IExTMCAgICAgICAgICB8Cj4gKyAqCSstLS0tLS0tLS0tLSBQYWdlIChDb2xvdXIg UGxhbmUpIDIgLS0tLS0tLS0tLS0tLSsKPiArICoJfCBAbWVzaFtpXSAgfCBNZXNoIFBvaW50IHwg Qml0cyAgfCBMaWdodCBTb3VyY2UgfAo+ICsgKgkrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0tLS0tLS0rCj4gKyAqCXwgICAgICAyMDQ4IHwgICAgICAgIDAsMCB8IDE2 LDIzIHwgTFMyICAgICAgICAgIHwKPiArICoJfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgMDgt MTUgfCBMUzEgICAgICAgICAgfAo+ICsgKgl8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAwMC0w NyB8IExTMCAgICAgICAgICB8Cj4gKyAqCSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0tLS0tLS0tLSsKPiArICoJfCAgICAgIDIwNDkgfCAgICAgICAgMCwxIHwgMTYsMjMg fCBMUzIgICAgICAgICAgfAo+ICsgKgl8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAwOC0xNSB8 IExTMSAgICAgICAgICB8Cj4gKyAqCXwgICAgICAgICAgIHwgICAgICAgICAgICB8IDAwLTA3IHwg TFMwICAgICAgICAgIHwKPiArICoJKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0tLS0tLS0tKwo+ICsgKgl8ICAgICAgIC4uLiB8ICAgICAgICAuLi4gfCAuLi4gICB8IC4u LiAgICAgICAgICB8Cj4gKyAqCSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0tLSsKPiArICoJfCAgICAgIDMwNzEgfCAgICAgIDMxLDMxIHwgMTYsMjMgfCBMUzIg ICAgICAgICAgfAo+ICsgKgl8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAwOC0xNSB8IExTMSAg ICAgICAgICB8Cj4gKyAqCXwgICAgICAgICAgIHwgICAgICAgICAgICB8IDAwLTA3IHwgTFMwICAg ICAgICAgIHwKPiArICoJKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0t LS0tLS0tKwo+ICsgKgo+ICsgKiBUaGUgQG1lc2hfc2NhbGUgbWVtYmVyIGRldGVybWluZXMgdGhl IHByZWNpc2lvbiBhbmQgbWluaW11bSBhbmQgbWF4aW11bSBnYWluLgo+ICsgKiBGb3IgZXhhbXBs ZSBpZiBAbWVzaF9zY2FsZSBpcyAwIGFuZCB0aGVyZWZvcmUgc2VsZWN0cyAwIC0gMnggZ2Fpbiwg YSB2YWx1ZSBvZgo+ICsgKiAwIGluIGEgY29lZmZpY2llbnQgbWVhbnMgMC4wIGdhaW4sIGEgdmFs dWUgb2YgMTI4IG1lYW5zIDEuMCBnYWluIGFuZCAyNTUKPiArICogbWVhbnMgMi4wIGdhaW4uCj4g KyAqCj4gKyAqIEBoZWFkZXI6CQlUaGUgTWFsaS1DNTUgcGFyYW1ldGVycyBibG9jayBoZWFkZXIK PiArICogQG1lc2hfc2hvdzoJCU91dHB1dCB0aGUgbWVzaCBkYXRhIHJhdGhlciB0aGFuIGltYWdl IGRhdGEKPiArICogQG1lc2hfc2NhbGU6CQlTZXQgdGhlIHByZWNpc2lvbiBhbmQgbWF4aW11bSBn YWluIHJhbmdlIG9mIG1lc2ggc2hhZGluZwo+ICsgKgkJCQktIDAgPSAwLTJ4IGdhaW4KPiArICoJ CQkJLSAxID0gMC00eCBnYWluCj4gKyAqCQkJCS0gMiA9IDAtOHggZ2Fpbgo+ICsgKgkJCQktIDMg PSAwLTE2eCBnYWluCj4gKyAqCQkJCS0gNCA9IDEtMnggZ2Fpbgo+ICsgKgkJCQktIDUgPSAxLTN4 IGdhaW4KPiArICoJCQkJLSA2ID0gMS01eCBnYWluCj4gKyAqCQkJCS0gNyA9IDEtOXggZ2Fpbgo+ ICsgKiBAbWVzaF9wYWdlX3I6CU1lc2ggcGFnZSBzZWxlY3QgZm9yIHJlZCBjb2xvdXIgcGxhbmUg WzAuLjJdCj4gKyAqIEBtZXNoX3BhZ2VfZzoJTWVzaCBwYWdlIHNlbGVjdCBmb3IgZ3JlZW4gY29s b3VyIHBsYW5lIFswLi4yXQo+ICsgKiBAbWVzaF9wYWdlX2I6CU1lc2ggcGFnZSBzZWxlY3QgZm9y IGJsdWUgY29sb3VyIHBsYW5lIFswLi4yXQo+ICsgKiBAbWVzaF93aWR0aDoJCU51bWJlciBvZiBo b3Jpem9udGFsIG5vZGVzIG1pbnVzIDEgWzE1LDMxXQo+ICsgKiBAbWVzaF9oZWlnaHQ6CU51bWJl ciBvZiB2ZXJ0aWNhbCBub2RlcyBtaW51cyAxIFsxNSwzMV0KPiArICogQG1lc2g6CQlNZXNoIHNo YWRpbmcgY29ycmVjdGlvbiB0YWJsZXMKPiArICovCj4gK3N0cnVjdCBtYWxpX2M1NV9wYXJhbXNf bWVzaF9zaGFkaW5nX2NvbmZpZyB7Cj4gKwlzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2Jsb2NrX2hl YWRlciBoZWFkZXI7Cj4gKwlib29sIG1lc2hfc2hvdzsKPiArCV9fdTggbWVzaF9zY2FsZTsKPiAr CV9fdTggbWVzaF9wYWdlX3I7Cj4gKwlfX3U4IG1lc2hfcGFnZV9nOwo+ICsJX191OCBtZXNoX3Bh Z2VfYjsKPiArCV9fdTggbWVzaF93aWR0aDsKPiArCV9fdTggbWVzaF9oZWlnaHQ7Cj4gKwlfX3Uz MiBtZXNoW01BTElfQzU1X05VTV9NRVNIX1NIQURJTkdfRUxFTUVOVFNdOwo+ICt9Owo+ICsKPiAr LyoqIGVudW0gbWFsaV9jNTVfcGFyYW1zX21lc2hfYWxwaGFfYmFuayAtIE1lc2ggc2hhZGluZyB0 YWJsZSBiYW5rIHNlbGVjdGlvbgo+ICsgKiBATUFMSV9DNTVfTUVTSF9BTFBIQV9CQU5LX0xTMF9B TkRfTFMxIC0gU2VsZWN0IExpZ2h0IFNvdXJjZXMgMCBhbmQgMQo+ICsgKiBATUFMSV9DNTVfTUVT SF9BTFBIQV9CQU5LX0xTMV9BTkRfTFMyIC0gU2VsZWN0IExpZ2h0IFNvdXJjZXMgMSBhbmQgMgo+ ICsgKiBATUFMSV9DNTVfTUVTSF9BTFBIQV9CQU5LX0xTMF9BTkRfTFMyIC0gU2VsZWN0IExpZ2h0 IFNvdXJjZXMgMCBhbmQgMgo+ICsgKi8KPiArZW51bSBtYWxpX2M1NV9wYXJhbXNfbWVzaF9hbHBo YV9iYW5rIHsKPiArCU1BTElfQzU1X01FU0hfQUxQSEFfQkFOS19MUzBfQU5EX0xTMSA9IDAsCj4g KwlNQUxJX0M1NV9NRVNIX0FMUEhBX0JBTktfTFMxX0FORF9MUzIgPSAxLAo+ICsJTUFMSV9DNTVf TUVTSF9BTFBIQV9CQU5LX0xTMF9BTkRfTFMyID0gNAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0 cnVjdCBtYWxpX2M1NV9wYXJhbXNfbWVzaF9zaGFkaW5nX3NlbGVjdGlvbiAtIE1lc2ggdGFibGUg c2VsZWN0aW9uCj4gKyAqCj4gKyAqIFRoZSBtb2R1bGUgY29tcHV0ZXMgdGhlIGZpbmFsIGNvcnJl Y3Rpb24gY29lZmZpY2llbnRzIGJ5IGJsZW5kaW5nIHRoZSBvbmVzCj4gKyAqIGZyb20gdHdvIGxp Z2h0IHNvdXJjZSB0YWJsZXMsIHdoaWNoIGFyZSBzZWxlY3RlZCAoaW5kZXBlbmRlbnRseSBmb3Ig ZWFjaAo+ICsgKiBjb2xvdXIgY2hhbm5lbCkgYnkgdGhlIEBtZXNoX2FscGhhX2Jhbmtfci9nL2Ig ZmllbGRzLgo+ICsgKgo+ICsgKiBUaGUgZmluYWwgYmxlbmRlZCBjb2VmZmljaWVudHMgZm9yIGVh Y2ggbm9kZSBhcmUgY2FsY3VsYXRlZCB1c2luZyB0aGUKPiArICogZm9sbG93aW5nIGVxdWF0aW9u Ogo+ICsgKgo+ICsgKiAgICAgRmluYWwgY29lZmZpY2llbnQgPSAoYSB4IExTXCA6c3ViOmBiYFwg KyAoMjU2IC0gYSkgeCBMU1wgOnN1YjpgYWBcKSAvIDI1Ngo+ICsgKgo+ICsgKiBXaGVyZSBhIGlz IHRoZSBAbWVzaF9hbHBoYV9yL2cvYiB2YWx1ZSwgYW5kIExTXCA6c3ViOmBhYFwgYW5kIExTXCA6 c3ViOmBiYFwKPiArICogYXJlIHRoZSBub2RlIGNvZmZpY2llbnRzIGZvciB0aGUgdHdvIHRhYmxl cyBzZWxlY3RlZCBieSB0aGUKPiArICogQG1lc2hfYWxwaGFfYmFua19yL2cvYiB2YWx1ZS4KPiAr ICoKPiArICogVGhlIHNjYWxlIG9mIHRoZSBhcHBsaWVkIGNvcnJlY3Rpb24gbWF5IGFsc28gYmUg Y29udHJvbGxlZCBieSB0dW5pbmcgdGhlCj4gKyAqIEBtZXNoX3N0cmVuZ3RoIG1lbWJlci4gVGhp cyBpcyBhIG1vZGlmaWVyIHRvIHRoZSBmaW5hbCBjb2VmZmljaWVudHMgd2hpY2ggY2FuCj4gKyAq IGJlIHVzZWQgdG8gZ2xvYmFsbHkgcmVkdWNlIHRoZSBnYWlucyBhcHBsaWVkLgo+ICsgKgo+ICsg KiBAaGVhZGVyOgkJVGhlIE1hbGktQzU1IHBhcmFtZXRlcnMgYmxvY2sgaGVhZGVyCj4gKyAqIEBt ZXNoX2FscGhhX2JhbmtfcjoJUmVkIG1lc2ggdGFibGUgc2VsZWN0IChjOnR5cGU6YGVudW0gbWFs aV9jNTVfcGFyYW1zX21lc2hfYWxwaGFfYmFua2ApCj4gKyAqIEBtZXNoX2FscGhhX2JhbmtfZzoJ R3JlZW4gbWVzaCB0YWJsZSBzZWxlY3QgKGM6dHlwZTpgZW51bSBtYWxpX2M1NV9wYXJhbXNfbWVz aF9hbHBoYV9iYW5rYCkKPiArICogQG1lc2hfYWxwaGFfYmFua19iOglCbHVlIG1lc2ggdGFibGUg c2VsZWN0IChjOnR5cGU6YGVudW0gbWFsaV9jNTVfcGFyYW1zX21lc2hfYWxwaGFfYmFua2ApCj4g KyAqIEBtZXNoX2FscGhhX3I6CUJsZW5kIGNvZWZmaWNpZW50IGZvciBSIFswLi4yNTVdCj4gKyAq IEBtZXNoX2FscGhhX2c6CUJsZW5kIGNvZWZmaWNpZW50IGZvciBHIFswLi4yNTVdCj4gKyAqIEBt ZXNoX2FscGhhX2I6CUJsZW5kIGNvZWZmaWNpZW50IGZvciBCIFswLi4yNTVdCj4gKyAqIEBtZXNo X3N0cmVuZ3RoOglNZXNoIHN0cmVuZ3RoIGluIFE0LjEyIGZvcm1hdCBbMC4uNDA5Nl0KPiArICov Cj4gK3N0cnVjdCBtYWxpX2M1NV9wYXJhbXNfbWVzaF9zaGFkaW5nX3NlbGVjdGlvbiB7Cj4gKwlz dHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2Jsb2NrX2hlYWRlciBoZWFkZXI7Cj4gKwlfX3U4IG1lc2hf YWxwaGFfYmFua19yOwo+ICsJX191OCBtZXNoX2FscGhhX2JhbmtfZzsKPiArCV9fdTggbWVzaF9h bHBoYV9iYW5rX2I7Cj4gKwlfX3U4IG1lc2hfYWxwaGFfcjsKPiArCV9fdTggbWVzaF9hbHBoYV9n Owo+ICsJX191OCBtZXNoX2FscGhhX2I7Cj4gKwlfX3UxNiBtZXNoX3N0cmVuZ3RoOwo+ICt9Owo+ ICsKPiArLyoqCj4gKyAqIGRlZmluZSBNQUxJX0M1NV9QQVJBTVNfTUFYX1NJWkUgLSBNYXhpbXVt IHNpemUgb2YgYWxsIE1hbGkgQzU1IFBhcmFtZXRlcnMKPiArICoKPiArICogVGhvdWdoIHRoZSBw YXJhbWV0ZXJzIGZvciB0aGUgTWFsaS1DNTUgYXJlIHBhc3NlZCBhcyBvcHRpb25hbCBibG9ja3Ms IHRoZQo+ICsgKiBkcml2ZXIgc3RpbGwgbmVlZHMgdG8ga25vdyB0aGUgYWJzb2x1dGUgbWF4aW11 bSBzaXplIHNvIHRoYXQgaXQgY2FuIGFsbG9jYXRlCj4gKyAqIGEgYnVmZmVyIHNpemVkIGFwcHJv cHJpYXRlbHkgdG8gYWNjb21vZGF0ZSB1c2Vyc3BhY2UgYXR0ZW1wdGluZyB0byBzZXQgYWxsCj4g KyAqIHBvc3NpYmxlIHBhcmFtZXRlcnMgaW4gYSBzaW5nbGUgZnJhbWUuCj4gKyAqLwo+ICsjZGVm aW5lIE1BTElfQzU1X1BBUkFNU19NQVhfU0laRQkJCQlcCj4gKwlzaXplb2Yoc3RydWN0IG1hbGlf YzU1X3BhcmFtc19zZW5zb3Jfb2ZmX3ByZXNoYWRpbmcpICsgCVwKPiArCXNpemVvZihzdHJ1Y3Qg bWFsaV9jNTVfcGFyYW1zX2FleHBfaGlzdCkgKwkJXAo+ICsJc2l6ZW9mKHN0cnVjdCBtYWxpX2M1 NV9wYXJhbXNfYWV4cF93ZWlnaHRzKSArCQlcCj4gKwlzaXplb2Yoc3RydWN0IG1hbGlfYzU1X3Bh cmFtc19hZXhwX2hpc3QpICsJCVwKPiArCXNpemVvZihzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2Fl eHBfd2VpZ2h0cykgKwkJXAo+ICsJc2l6ZW9mKHN0cnVjdCBtYWxpX2M1NV9wYXJhbXNfZGlnaXRh bF9nYWluKSArCQlcCj4gKwlzaXplb2Yoc3RydWN0IG1hbGlfYzU1X3BhcmFtc19hd2JfZ2FpbnMp ICsJCVwKPiArCXNpemVvZihzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2F3Yl9jb25maWcpICsJCVwK PiArCXNpemVvZihzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2F3Yl9nYWlucykgKwkJXAoKU29tZSBk YXRhIHN0cnVjdHVyZXMgYXJlIGR1cGxpY2F0ZWQsIHBsZWFzZSBleHBsYWluIHdoeSBzb21ld2hl cmUsIG9yIGl0Cm1heSBhcHBlYXIgdG8gYmUgYSBidWcuCgo+ICsJc2l6ZW9mKHN0cnVjdCBtYWxp X2M1NV9wYXJhbXNfbWVzaF9zaGFkaW5nX2NvbmZpZykgKwlcCj4gKwlzaXplb2Yoc3RydWN0IG1h bGlfYzU1X3BhcmFtc19tZXNoX3NoYWRpbmdfc2VsZWN0aW9uKQoKSSB0aGluayB0aGlzIHdpbGwg d29yayBmaW5lIG5vdywgYnV0IGFzIHNvb24gYXMgeW91IGFkZCBhIGJsb2NrIHRoYXQKY29udGFp bnMgYSA2NC1iaXQgZmllbGQsIHlvdSdsbCBoYXZlIGlzc3Vlcy4gTWFueSBDUFVzIGV4cGVjdCA2 NC1iaXQKYWNjZXNzZXMgdG8gYmUgYWxpZ25lZC4gSWYgc29tZSBzdHJ1Y3R1cmVzIGhhdmUgYSBz aXplIHRoYXQgYXJlIG5vdAptdWx0aXBsZXMgb2YgNjQtYml0LCB5b3UnbGwgZW5kIHVwIGhhdmlu ZyB1bmFsaWduZWQgYmxvY2tzLgoKSSB3b3VsZCByZWNvbW1lbmQgYWxpZ25pbmcgdGhlIHNpemUg b2YgZWFjaCBkYXRhIHN0cnVjdHVyZSB0byA2NCBiaXRzLiBBCnNpbXBsZSB3YXkgdG8gZG8gc28g d291bGQgYmUgdG8gYWxpZ24gdGhlIHNpemUgb2YgdGhlIGhlYWRlciB0byA2NCBiaXRzLgpQbGVh c2UgdGVzdCB0aGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSBJJ20gcmlnaHQgdGhvdWdoIDotKQoKPiAr Cj4gKy8qKgo+ICsgKiBzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2J1ZmZlciAtIDNBIGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVycwo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdCBjb250YWlucyB0aGUgY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXJzIG9mIHRoZSBNYWxpLUM1NSBJU1AKPiArICogYWxnb3JpdGht cywgc2VyaWFsaXplZCBieSB1c2Vyc3BhY2UgaW50byBhbiBvcGFxdWUgZGF0YSBidWZmZXIuIEVh Y2gKCkl0J3Mgbm90IG9wYXF1ZSwgeW91J3ZlIGRvY3VtZW50ZWQgaXQgZnVsbHkgOi0pCgpzL29w YXF1ZSAvLwoKPiArICogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgYmxvY2sgaXMgcmVwcmVzZW50 ZWQgYnkgYSBibG9jay1zcGVjaWZpYyBzdHJ1Y3R1cmUKPiArICogd2hpY2ggY29udGFpbnMgYSA6 Yzp0eXBlOmBtYWxpX2M1NV9wYXJhbXNfYmxvY2tfaGVhZGVyYCBlbnRyeSBhcyBmaXJzdAo+ICsg KiBtZW1iZXIuIFVzZXJzcGFjZSBwb3B1bGF0ZXMgdGhlIEBkYXRhIGJ1ZmZlciB3aXRoIGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVycwo+ICsgKiBmb3IgdGhlIGJsb2NrcyB0aGF0IGl0IGludGVuZHMg dG8gY29uZmlndXJlLiBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgZGF0YQo+ICsgKiBidWZmZXIgZWZm ZWN0aXZlIHNpemUgY2hhbmdlcyBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBJU1AgYmxvY2tz IHRoYXQKPiArICogdXNlcnNwYWNlIGludGVuZHMgdG8gY29uZmlndXJlLgo+ICsgKgo+ICsgKiBU aGUgcGFyYW1ldGVycyBidWZmZXIgaXMgdmVyc2lvbmVkIGJ5IHRoZSBAdmVyc2lvbiBmaWVsZCB0 byBhbGxvdyBtb2RpZnlpbmcKPiArICogYW5kIGV4dGVuZGluZyBpdHMgZGVmaW5pdGlvbi4gVXNl cnNwYWNlIHNob3VsZCBwb3B1bGF0ZSB0aGUgQHZlcnNpb24gZmllbGQgdG8KCnMvc2hvdWxkL3No YWxsLwoKPiArICogaW5mb3JtIHRoZSBkcml2ZXIgYWJvdXQgdGhlIHZlcnNpb24gaXQgaW50ZW5k cyB0byB1c2UuIFRoZSBkcml2ZXIgd2lsbCBwYXJzZQo+ICsgKiBhbmQgaGFuZGxlIHRoZSBAZGF0 YSBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZSBkYXRhIGxheW91dCBzcGVjaWZpYyB0byB0aGUKPiAr ICogaW5kaWNhdGVkIHJldmlzaW9uIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGRlc2lyZWQg cmV2aXNpb24gaXMgbm90CgpzL3JldmlzaW9uL3ZlcnNpb24vZwoKPiArICogc3VwcG9ydGVkLgo+ ICsgKgo+ICsgKiBGb3IgZWFjaCBJU1AgYmxvY2sgdGhhdCB1c2Vyc3BhY2Ugd2FudHMgdG8gY29u ZmlndXJlLCBhIGJsb2NrLXNwZWNpZmljCj4gKyAqIHN0cnVjdHVyZSBpcyBhcHBlbmRlZCB0byB0 aGUgQGRhdGEgYnVmZmVyLCBvbmUgYWZ0ZXIgdGhlIG90aGVyIHdpdGhvdXQgZ2Fwcwo+ICsgKiBp biBiZXR3ZWVuIG5vciBvdmVybGFwcy4gVXNlcnNwYWNlIHNoYWxsIHBvcHVsYXRlIHRoZSBAdG90 YWxfc2l6ZSBmaWVsZCB3aXRoCj4gKyAqIHRoZSBlZmZlY3RpdmUgc2l6ZSwgaW4gYnl0ZXMsIG9m IHRoZSBAZGF0YSBidWZmZXIuCj4gKyAqCj4gKyAqIFRoZSBleHBlY3RlZCBtZW1vcnkgbGF5b3V0 IG9mIHRoZSBwYXJhbWV0ZXJzIGJ1ZmZlciBpczo6Cj4gKyAqCj4gKyAqCSstLS0tLS0tLS0tLS0t LS0tLS0tLSBzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2J1ZmZlciAtLS0tLS0tLS0tLS0tLS0tLS0r Cj4gKyAqCXwgdmVyc2lvbiA9IE1BTElfQzU1X1BBUkFNX0JVRkZFUl9WMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8Cj4gKyAqCXwgdG90YWxfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg bWFsaV9jNTVfcGFyYW1zX3NlbnNvcl9vZmZfcHJlc2hhZGluZykgICB8Cj4gKyAqCXwgICAgICAg ICAgICAgIHNpemVvZihzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2FleHBfaGlzdCk7ICAgICAgICAg ICAgICB8Cj4gKyAqCXwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGF0YSAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cj4gKyAqCXwgfCArLS0tLS0tLS0tIHN0cnVjdCBt YWxpX2M1NV9wYXJhbXNfc2Vuc29yX29mZl9wcmVzaGFkaW5nIC0tLS0tLSsgfCB8Cj4gKyAqCXwg fCB8ICstLS0tLS0tLSBzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2Jsb2NrX2hlYWRlciBoZWFkZXIg LS0tLS0rIHwgfCB8Cj4gKyAqCXwgfCB8IHwgdHlwZSA9IE1BTElfQzU1X1BBUkFNX0JMT0NLX1NF TlNPUl9PRkZTOyAgICAgICAgICAgICAgICB8IHwgfCB8Cj4gKyAqCXwgfCB8IHwgZW5hYmxlZCA9 IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8Cj4g KyAqCXwgfCB8IHwgc2l6ZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IHwgfCB8Cj4gKyAqCXwgfCB8IHwgICAgc2l6ZW9mKHN0cnVjdCBtYWxpX2M1 NV9wYXJhbXNfc2Vuc29yX29mZl9wcmVzaGFkaW5nKTt8IHwgfCB8Cj4gKyAqCXwgfCB8ICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwg fCB8Cj4gKyAqCXwgfCB8IGNoYW4wMCA9IC4uLjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwgfCB8IGNoYW4wMSA9IC4uLjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwgfCB8 IGNoYW4xMCA9IC4uLjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgfCB8Cj4gKyAqCXwgfCB8IGNoYW4xMSA9IC4uLjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwgfCArLS0tLS0tLS0tLS0tIHN0 cnVjdCBtYWxpX2M1NV9wYXJhbXNfYWV4cF9oaXN0IC0tLS0tLS0tLS0tLS0tLSsgfCB8Cj4gKyAq CXwgfCB8ICstLS0tLS0tLSBzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2Jsb2NrX2hlYWRlciBoZWFk ZXIgLS0tLS0rIHwgfCB8Cj4gKyAqCXwgfCB8IHwgdHlwZSA9IE1BTElfQzU1X1BBUkFNX0JMT0NL X0FFWFBfSElTVDsgICAgICAgICAgICAgICAgICB8IHwgfCB8Cj4gKyAqCXwgfCB8IHwgZW5hYmxl ZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8 Cj4gKyAqCXwgfCB8IHwgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbWFsaV9jNTVfcGFyYW1zX2FleHBf aGlzdCk7ICAgICAgICB8IHwgfCB8Cj4gKyAqCXwgfCB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgfCB8Cj4gKyAqCXwgfCB8IHNr aXBfeCA9IC4uLjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgfCB8Cj4gKyAqCXwgfCB8IG9mZnNldF94ID0gLi4uOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwgfCB8IHNraXBfeSA9IC4uLjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwg fCB8IG9mZnNldF95ID0gLi4uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgfCB8Cj4gKyAqCXwgfCB8IHNjYWxlX2JvdHRvbSA9IC4uLjsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwgfCB8IHNjYWxlX3RvcCA9 IC4uLjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4g KyAqCXwgfCB8IHBsYW5lX21vZGUgPSAuLi47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwgfCB8IHRhcF9wb2ludCA9IC4uLjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8Cj4gKyAqCXwgfCArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsg fCB8Cj4gKyAqCXwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cj4gKyAqCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqCj4gKyAq IEB2ZXJzaW9uOiBUaGUgTWFsaS1DNTUgcGFyYW1ldGVycyBidWZmZXIgdmVyc2lvbgo+ICsgKiBA dG90YWxfc2l6ZTogVGhlIE1hbGktQzU1IGNvbmZpZ3VyYXRpb24gZGF0YSBlZmZlY3RpdmUgc2l6 ZSwgZXhjbHVkaW5nIHRoaXMKPiArICoJCWhlYWRlcgo+ICsgKiBAZGF0YTogVGhlIE1hbGktQzU1 IGNvbmZpZ3VyYXRpb24gYmxvY2tzIGRhdGEKPiArICovCj4gK3N0cnVjdCBtYWxpX2M1NV9wYXJh bXNfYnVmZmVyIHsKPiArCWVudW0gbWFsaV9jNTVfcGFyYW1fYnVmZmVyX3ZlcnNpb24gdmVyc2lv bjsKPiArCXNpemVfdCB0b3RhbF9zaXplOwo+ICsJX191OCBkYXRhW01BTElfQzU1X1BBUkFNU19N QVhfU0laRV07Cj4gK307Cj4gKwo+ICAjZW5kaWYgLyogX19VQVBJX01BTElfQzU1X0NPTkZJR19I ICovCgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK