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=-7.7 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,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 06330C04EBF for ; Tue, 4 Dec 2018 23:23:10 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id C0D282082B for ; Tue, 4 Dec 2018 23:23:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="f0o3BiP6"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="mR8jdRxg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C0D282082B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: To:Subject:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=YeI5FFkR7Mp982t/nZMgUmf08FuiMbCsi3ih6ZxWnVA=; b=f0o3BiP6tsVJfm0hP6g5S2C5r f5U2aVQnz5R5FfSlPMtJPbyiDmk/Z549Br0CM3RNnYcNz84lDXQ9NQDcrM8OJp4wmO7wcOMV1wqgW PgEkceLaJD9EY8C7h+4NM87YzPlgc5sPk9jJQS2KFwwFled0Uz/yQ/zOkpFpd2HXXN6wRu6+GlBeY XiD9ruvoPwr8EgnZu22svqIc7hRJBdZYNwke3JYDfPOAo/5MUgAWvFMoT2GHTxoBER53ZlACbcpKO aV3Ctwgt0pOubCBJXo0iht9/RlwkvTtOOhfwa/TUqqyhL8i8CRMx9EHDmbybqgQTmAvQirVcPmcDn WMrmCAYJw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gUK20-0000Yd-RC; Tue, 04 Dec 2018 23:23:08 +0000 Received: from esa3.hgst.iphmx.com ([216.71.153.141]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gUK1w-0000I6-Js for linux-riscv@lists.infradead.org; Tue, 04 Dec 2018 23:23:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1543965784; x=1575501784; h=from:subject:to:cc:references:message-id:date: mime-version:in-reply-to:content-transfer-encoding; bh=jrCkjx05kw4qXcl+4u3nuK4Vlu/nilHuSj2NpGs/DUI=; b=mR8jdRxg5AXT79iow+PIgJzYly13QdgTnKBrKA9KFZvmvOaXFTqHW0XL jX8Yrb3GFQv7b90dcrCcguIt5VGpNLeDGJVMUSF3A4QHUnSx/CZ0zg3nH i7hSizgFRB3jhdxryXMSenQ92uuVGA6GTUhu6orCHBJ+nTUS9RqJeSryM QuGEyKUWBMVcq+NHvlkVGtscrc/ZrhuCkaDOVyACxe/EDXQXs7TLN71UB EzGMW97F4HVx+Lg2rqJQSz+XZjZAIBtRpyDsyL3Jhy3ExDuZJBXvt7wLW l4y7Bhg7lpBZ4zzWeRHat3wtX0oSapMpyvjbqzbU46OR+JKP3UCzRLz5A w==; X-IronPort-AV: E=Sophos;i="5.56,316,1539619200"; d="scan'208";a="100671986" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 05 Dec 2018 07:22:51 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 04 Dec 2018 15:05:40 -0800 Received: from 17p6g12.ad.shared (HELO [10.86.56.40]) ([10.86.56.40]) by uls-op-cesaip02.wdc.com with ESMTP; 04 Dec 2018 15:22:50 -0800 From: Atish Patra Subject: Re: [sw-dev] Re: SBI extension proposal v2 To: Nick Kossifidis References: <4aef7216-726c-f565-5c0f-cebd2aefb46d@wdc.com> <11ad3063d779721695f0ac775bc114c1@mailhost.ics.forth.gr> Message-ID: <81b7b5dd-0ad9-c6ef-f095-53f05f4b362a@wdc.com> Date: Tue, 4 Dec 2018 15:22:50 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.3.0 MIME-Version: 1.0 In-Reply-To: <11ad3063d779721695f0ac775bc114c1@mailhost.ics.forth.gr> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181204_152304_905111_4FFA8F18 X-CRM114-Status: GOOD ( 42.19 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "mark.rutland@arm.com" , Christoph Hellwig , Damien Le Moal , "olof.johansson@gmail.com" , "alankao@andestech.com" , "abner.chang@hpe.com" , "anup@brainfault.org" , Palmer Dabbelt , Alexander Graf , Zong Li , Alistair Francis , "paul.walmsley@sifive.com" , "sw-dev@groups.riscv.org" , "linux-riscv@lists.infradead.org" , "andrew@sifive.com" Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org T24gMTEvMTEvMTggODozNCBQTSwgTmljayBLb3NzaWZpZGlzIHdyb3RlOgo+IEhlbGxvIEF0aXNo LAo+IAoKQXBvbG9naWVzIGZvciBub3QgcmVzcG9uZGluZyB0byB0aGlzIGVhcmxpZXIuIEl0IGdv dCBsb3N0IGluIHRoZSBlbWFpbCAKZmxvb2QuIFRoYW5rIHlvdSBmb3IgcmVtaW5kaW5nIGFib3V0 IHRoaXMgeWVzdGVyZGF5LgoKPiDOo8+EzrnPgiAyMDE4LTExLTEwIDA0OjQyLCBBdGlzaCBQYXRy YSDOrc6zz4HOsc+IzrU6Cj4+IEhpLAo+PiBJIGhhdmUgdXBkYXRlZCB0aGUgcHJvcG9zYWwgYmFz ZWQgb24gZmVlZGJhY2sgcmVjZWl2ZWQgb24gcHJldmlvdXMKPj4gdmVyc2lvbi4gVGhpcyB2ZXJz aW9uIGhhcyBhIGJldHRlciBzY2FsYWJsZSBTQkkgRnVuY3Rpb24gSUQKPj4gbnVtYmVyaW5nIHNj aGVtZS4gSSBoYXZlIGFkb3B0ZWQgbWFya2Rvd24gZm9ybWF0dGluZyBmb3IgZ2l0aHViIGRvY3Mu Cj4+Cj4+IElmIHlvdSBwcmVmZXIgYSBnaXRodWIgaW50ZXJmYWNlLCBpdCdzIGF2YWlsYWJsZSBo ZXJlIGFzIHdlbGwuCj4+Cj4+IGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi1zYmktZG9j L3B1bGwvMTIKPj4KPj4gTG9va2luZyBmb3J3YXJkIHRvIHlvdXIgZmVlZGJhY2suCj4+Cj4+IFJl Z2FyZHMsCj4+IEF0aXNoCj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pgo+PiAjIyBJbnRyb2R1Y3Rpb246 Cj4+IFRoaXMgaXMgYSBwcm9wb3NhbCB0byBtYWtlIFNCSSBhIGZsZXhpYmxlIGFuZCBleHRlbnNp YmxlIGludGVyZmFjZS4KPj4gSXQgaXMgYmFzZWQgb24gdGhlIGZvdW5kYXRpb24gcG9saWN5IG9m IFJJU0MtViBpLmUuIG1vZHVsYXJpdHkgYW5kCj4+IG9wZW5uZXNzLiBUaGUgcHJvcG9zYWwgdHJp ZXMgdG8gaW50cm9kdWNlcyB2ZXJ5IGZldyBuZXcgbWFuZGF0b3J5IFNCSQo+PiBGdW5jdGlvbnMs IHRoYXQgYXJlIGFic29sdXRlbHkgcmVxdWlyZWQgdG8gbWFpbnRhaW4gYmFja3dhcmQKPj4gY29t cGF0aWJpbGl0eS4gRXZlcnl0aGluZyBlbHNlIGlzIG9wdGlvbmFsIHNvIHRoYXQgaXQgcmVtYWlu cyBhbiBvcGVuCj4+IHN0YW5kYXJkIHlldCByb2J1c3QuCj4+Cj4+IFRoZSBjdXJyZW50IFJJU0Mt ViBTQkkgb25seSBkZWZpbmVzIGEgZmV3IG1hbmRhdG9yeSBmdW5jdGlvbnMgc3VjaCBhcwo+PiBp bnRlci1wcm9jZXNzb3IgaW50ZXJydXB0cyAoSVBJKSBpbnRlcmZhY2UsIHJlcHJvZ3JhbW1pbmcg dGltZXIsIHNlcmlhbAo+PiBjb25zb2xlLCBhbmQgbWVtb3J5IGJhcnJpZXIgaW5zdHJ1Y3Rpb25z LiBUaGUgZXhpc3RpbmcgU0JJCj4+IGRvY3VtZW50YXRpb24KPj4gY2FuIGJlIGZvdW5kIGhlcmUg WzFdLiBNYW55IGltcG9ydGFudCBmdW5jdGlvbmFsaXRpZXMgc3VjaCBhcyBwb3dlcgo+PiBtYW5h Z2VtZW50L2NwdS1ob3RwbHVnIGFyZSBub3QgeWV0IGRlZmluZWQgZHVlIHRvIGRpZmZpY3VsdGll cyBpbgo+PiBhY2NvbW1vZGF0aW5nIG1vZGlmaWNhdGlvbnMgd2l0aG91dCBicmVha2luZyB0aGUg YmFja3dhcmQgY29tcGF0aWJpbGl0eQo+PiB3aXRoIHRoZSBjdXJyZW50IGludGVyZmFjZS4KPj4K Pj4gVGhlIHByb3Bvc2VkIGRlc2lnbiBpcyBpbnNwaXJlZCBieSBQb3dlciBTdGF0ZSBDb29yZGlu YXRpb24gSW50ZXJmYWNlCj4+IChQU0NJKSBmcm9tIEFSTSB3b3JsZC4gSG93ZXZlciwgaXQgYWRk cyBvbmx5IHR3byBuZXcgbWFuZGF0b3J5IFNCSQo+PiBjYWxscyBwcm92aWRpbmcgdmVyc2lvbiBp bmZvcm1hdGlvbiBhbmQgc3VwcG9ydGVkIEZ1bmN0aW9ucywgdW5saWtlCj4+IFBTQ0kgd2hlcmUg YSBzaWduaWZpY2FudCBudW1iZXIgb2YgZnVuY3Rpb25zIGFyZSBtYW5kYXRvcnkuIFRoZQo+PiB2 ZXJzaW9uIG9mIHRoZSBleGlzdGluZyBTQkkgd2lsbCBiZSBkZWZpbmVkIGFzIGEgbWluaW11bSB2 ZXJzaW9uKDAuMSkKPj4gd2hpY2ggd2lsbCBhbHdheXMgYmUgYmFja3dhcmQgY29tcGF0aWJsZS4g U2ltaWxhcmx5LCBhbnkgTGludXgga2VybmVsCj4+IHdpdGggYSBuZXdlciBmZWF0dXJlIHdpbGwg ZmFsbCBiYWNrIGlmIGFuIG9sZGVyIHZlcnNpb24gb2YgU0JJIGRvZXMKPj4gbm90IHN1cHBvcnQg dGhlIHVwZGF0ZWQgY2FwYWJpbGl0aWVzLiBCb3RoIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZAo+ PiBTRUUgY2FuIGJlIGltcGxlbWVudGVkIHRvIGJlIHR3byB3YXkgYmFja3dhcmQgY29tcGF0aWJs ZS4KPj4KPiAKPiBMZXQncyByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gTGludXgsIGl0IGNhbiBi ZSBtaXNsZWFkaW5nIHNpbmNlCj4gdGhpcyBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGJ5IGV2ZXJ5 IE9TLgo+IAoKQUNLLgoKPj4gIyMgU0JJIENhbGxpbmcgQ29udmVudGlvbnMgKFRPRE8pCj4+IFRo ZXJlIGFyZSBzb21lIHN1Z2dlc3Rpb25zWzNdIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gU0JJIGZ1 bmN0aW9uCj4+IHJldHVybiB2YWx1ZSBhbmQgU0JJIGNhbGxpbmcgc2VxdWVuY2UgcmV0dXJuIHZh bHVlLiBIZXJlIGFyZSB0aGUgZmV3Cj4+IHBvc3NpYmxlIGRpc2N1c3NlZCBpZGVhcy4KPj4KPj4g MS4gUmV0dXJuIGEgc2luZ2xlIHZhbHVlLCBidXQgdmFsdWVzIGluIHRoZSByYW5nZSB7LTUxMSwg LTF9IGFyZQo+PiBjb25zaWRlcmVkIGVycm9ycywgd2hlcmVhcyByZXR1cm4gdmFsdWVzIGluIHRo ZSByYW5nZSB7MCwgMl5YTEVOLTUxMn0KPj4gYXJlIGNvbnNpZGVyZWQgc3VjY2Vzcy4KPj4KPiAK PiBJJ20gdGhpbmtpbmcgYWJvdXQgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGEgNjRiaXQgZmlybXdh cmUgYW5kIGEgMzJiaXQKPiBzdXBlcnZpc29yIGFuZCB2aWNlLXZlcnNhLiBJZiB3ZSByZXBvcnQg YmFjayB2YWx1ZXMgdGhhdCBjYW4ndCBmaXQKPiB3aXRoaW4gMzJiaXRzLCB0aGlzIGlzIGdvaW5n IHRvIGJyZWFrIHRoaW5ncy4KPgpZZWFoLiBUaGF0J3MgdmFsaWQgcG9pbnQuIEkgdGhpbmsgd2Ug Y2FuIGtlZXAgYm90aCB2YWx1ZSAmIGVycm9yIHRvIGJlIAp1aW50MzJfdC4gV2UgY2FuIGNsZWFy bHkgZGVmaW5lIHVpbnQ2NF90IGZvciBmb3IgUlY2NEdDIGFuZCB1aW50MzJfdCBmb3IgClJWMzJH QyBpZiBhbnkgZnVuY3Rpb25zIHJlcXVpcmUgYSA2NGJpdCB2YWx1ZSBhcyBhbiBhcmd1bWVudC9y ZXR1cm4gdmFsdWUuCgpOb3RlOiBUaGF0J3Mgbm90IG15IHByZWZlcnJlZCBjaG9pY2UuIEJ1dCBp dCBjYW4gYmUgZG9uZS4KCj4+IDIuIEV2ZXJ5IFNCSSBmdW5jdGlvbiBjYWxsIG1heSByZXR1cm4g dGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUKPj4gYGBgCj4+IHN0cnVjdCB2YWxlcnIgewo+PiAgICBs b25nIHZhbHVlOwo+PiAgICBsb25nIGVycm9yOwo+PiB9Owo+PiBgYGAKPj4gQWNjb3JkaW5nIHRv IHRoZSBSSVNDLVYgQUJJIHNwZWNbNF0sIGJvdGggYTAgJiBhMSByZWdpc3RlcnMgY2FuIGJlCj4+ IHVzZWQgZm9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuCj4+Cj4gCj4gVGhpcyBtYWtlcyBzZW5z ZSwgaG93ZXZlciBsZXQncyBhbGxvdyBmb3IgdGhpcyB0byBiZSBleHRlbnNpYmxlLAo+IHRoZXJl IG1heSBiZSBTQkkgY2FsbHMgdGhhdCB3YW50IHRvIHJldHVybiBzb21ldGhpbmcgbW9yZSwgdGhl cmUKPiBtYXkgYWxzbyBiZSBTQkkgY2FsbHMgdGhhdCBhcmUgYXN5bmNocm9ub3VzIHNvIGl0J3Mg YSBnb29kIGlkZWEgSQo+IHRoaW5rIHRvIGFsc28gaW5jbHVkZSB0aGUgZnVuY3Rpb24gaWQgdGhl cmUuIEFsc28gcGxlYXNlIGxldCdzIHVzZQo+IHR5cGVkIGludGVnZXJzIGluc3RlYWQuIEhvdyBh Ym91dCBzb21ldGhpbmcgbGlrZSB0aGlzOgo+IAoKQUNLIGZvciB0eXBlZCBpbnRlZ2Vycy4KCj4g c3RydWN0IHNiaV9yZXBvcnQgewo+ICAgIHVpbnQzMl90IHN0YXR1czsKPiAgICB1aW50MzJfdCB2 YWx1ZTsKPiAgICB1aW50MzJfdCBmdW5jdGlvbl9pZDsKPiAgICB1aW50OF90IGhhc19wYXlsb2Fk Owo+ICAgIHVpbnQxNl90IHBheWxvYWRfc2l6ZTsKPiAgICAvKiAxIGJ5dGUgaG9sZSAqLwo+ICAg IHZvaWQgcGF5bG9hZFtdOwo+IH07CklNSE8sIHRoYXQncyBvdmVya2lsbCBmb3IgU0JJLiBCZXR3 ZWVuIGVycm9yIGFuZCB2YWx1ZSwgSSB0aGluayB3ZSBjYW4gCmNvdmVyIGFsbCB0aGUgY2FzZXMu Cgo+IAo+PiAzLiBJbnRyb2R1Y2UgYW4gZXh0cmEgYXJndW1lbnQgdGhhdCBjYW4gcmV0dXJuIGVy cm9yIGJ5IHJlZmVyZW5jZS4KPj4gYGBgCj4+IC8qIFJldHVybnMgdGhlIENQVSB0aGF0IHdhcyBz dGFydGVkLgo+PiAgICogQGVyciBpbmRpY2F0ZXMgYW4gZXJyb3IgSUQgaWYgb25lIG9jY3VycmVk LCBvdGhlcndpc2UgMC4KPj4gICAqIEBlcnIgY2FuIGJlIE5VTEwgaWYgbm8gZXJyb3IgZGV0ZWN0 aW9uIGlzIHJlcXVpcmVkLgo+PiAqLwo+PiBpbnQgc3RhcnRfY3B1KGludCBjcHVfbnVtLC4uLiwg RXJyb3IgKmVycik7Cj4+IGBgYAo+PiBCb3RoIGFwcHJvYWNoZXMgKDIgJiAzKSB3aWxsIHdvcmss IGJ1dCB0aGVyZSB3aWxsIGJlIHR3byB2ZXJzaW9ucyBvZgo+PiBleGlzdGluZyBTQkkgZnVuY3Rp b25zIHRvIG1haW50YWluIHRoZSBjb21wYXRpYmlsaXR5Lgo+Pgo+IAo+IElmIHdlIGtlZXAgdGhl IGZpcnN0IGZpZWxkIG9mIHNiaV9yZXBvcnQgYXMgdGhlIHN0YXR1cyBjb2RlIHRoZW4KPiAzIGlz IGVxdWl2YWxlbnQgdG8gMi4gSWYgeW91IGp1c3Qgd2FudCB0byBnZXQgdGhlIHN0YXR1cy9lcnJv ciBjb2RlCj4geW91IGNhc3QgdGhlIHBvaW50ZXIgdG8gdWludDMyX3QqIGluc3RlYWQgb2Ygc3Ry dWN0IHNiaV9yZXBvcnQqLgo+IAo+IE15IHZvdGUgZ29lcyBmb3IgKDEgfHwgMiB3aXRoIHRoZSBt b2RzIGFib3ZlKSwgbWVhbmluZyB0aGF0IEkKPiBiZWxpZXZlIHdlIHNob3VsZCBzdXBwb3J0IGJv dGgsIDEgZm9yIHNpbXBsZSBmdW5jdGlvbnMgdGhhdAo+IGp1c3Qgd2FudCB0byByZXR1cm4gYSB2 YWx1ZSBhbmQgMiBmb3IgbW9yZSBjb21wbGV4IGZ1bmN0aW9ucwo+IHRoYXQgd2FudCB0byBhbHNv IHJldHVybiBhIHBheWxvYWQgb3IgdGhhdCBkaXN0aW5ndWlzaCB0aGUKPiByZXR1cm4gdmFsdWUg ZnJvbSBhbiBlcnJvciBjb2RlLiBBbHRlcm5hdGl2ZWx5IEknZCBnbyB3aXRoCj4ganVzdCAyIHdp dGggdGhlIG1vZHMgYWJvdmUsIHNpbmNlIGl0IGNvdmVycyBib3RoIGNhc2VzLgo+IAoKWWVhaCAy IHNlZW1zIHRvIGJlIHRoZSBiZXN0IGNob2ljZS4gV2UgaGFkIGEgbG9uZ2VyIGRpc2N1c3Npb24g YWJvdXQgCnRoaXMgZHVyaW5nIExpbnV4IFBsdW1iZXJzIGFzIHdlbGwuIEhlcmUgYXJlIHRoZSBu b3RlcyBpbiBjYXNlIHlvdSBhcmUgCmludGVyZXN0ZWQuCgpodHRwczovL2V0aGVycGFkLm9wZW5z dGFjay5vcmcvcC9SSVNDLVYKCj4+ICMjIFNCSSBGdW5jdGlvbnM6Cj4+Cj4+IEEgU0JJIGZ1bmN0 aW9uIGlzIGFuIGluZGl2aWR1YWwgZmVhdHVyZSB0aGF0IFNCSSBpbnRlcmZhY2UgcHJvdmlkZXMg dG8KPj4gc3VwZXJ2aXNvciBtb2RlIGZyb20gbWFjaGluZSBtb2RlLiBFYWNoIGZ1bmN0aW9uIElE IGlzIGFzc2lnbmVkIGFzIHBlcgo+PiBiZWxvdyBzZWN0aW9uLgo+Pgo+IAo+IEFzIEkgbWVudGlv bmVkIG9uIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHlvdXIgcHJvcG9zYWwKPiBJJ2QgbGlrZSB0 byBiZSBhYmxlIHRvIGNhbGwgdGhlc2UgZnVuY3Rpb25zIGZyb20gVSBhbmQKPiBIUy9IVSBtb2Rl cyBhcyB3ZWxsLiBJIHRoaW5rIGhhdmluZyBhIGxpbWl0YXRpb24gZm9yCj4gYWNjZXNzaW5nIE0g bW9kZSBvbmx5IGZyb20gUyBtb2RlIGlzIHdyb25nLgo+IAoKSSB1bmRlcnN0YW5kIHlvdXIgY29u Y2Vybi4gSG93ZXZlciwgdGhpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGlzIApiYXNlZCBv biB3aGF0IGlzIGRlZmluZWQgb24gcHJpdmlsZWdlZCBzcGVjLiBJIHdvdWxkIGxpa2UgdG8ga2Vl cCBpdCAKY29uc2lzdGVudCB3aXRoIHByaXZpbGVnZWQgc3BlYy4KCj4+ICMjIyMgU0JJIEZ1bmN0 aW9uIElEIG51bWJlcmluZyBzY2hlbWU6Cj4+IEEgRnVuY3Rpb24gU2V0IGlzIGEgZ3JvdXAgb2Yg U0JJIGZ1bmN0aW9ucyB3aGljaCBjb2xsZWN0aXZlbHkKPj4gaW1wbGVtZW50IHNpbWlsYXIga2lu ZCBvZiBmZWF0dXJlL2Z1bmN0aW9uYWxpdHkuIFRoZSBmdW5jdGlvbiBJRAo+PiBudW1iZXJpbmcg c2NoZW1lIG5lZWQgdG8gYmUgc2NhbGFibGUgaW4gdGhlIGZ1dHVyZS4gQXQgdGhlIHNhbWUgdGlt ZSwKPj4gZnVuY3Rpb24gdmFsaWRhdGlvbiBjaGVjayBzaG91bGQgYmUgYXMgcXVpY2sgYXMgcG9z c2libGUuIEtlZXBpbmcKPj4gdGhlc2UgdHdvIHJlcXVpcmVtZW50cyBpbiBtaW5kLCBhIGh5YnJp ZCBmdW5jdGlvbiBJRCBzY2hlbWUgaXMKPj4gcHJvcG9zZWQuCj4+Cj4+IFNCSSBGdW5jdGlvbiBJ RCBpcyB1MzIgdHlwZS4KPj4KPj4gYGBgCj4+IDMxICAgICAgICAgICAgMjQgICAgICAgICAgICAg ICAgICAgICAgICAwCj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4+IHxPfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8Cj4+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+IEZ1bmN0aW9uIFNldCAgIHwgRnVu Y3Rpb24gVHlwZSAgICAgICAgICB8Cj4+IGBgYAo+PiBCaXRbMzFdICAgID0gIElEIG92ZXJmbG93 IGJpdAo+Pgo+PiBCaXRbMzA6MjRdID0gIEZ1bmN0aW9uIFNldAo+Pgo+PiBCaXRbMjM6MF0gID0g IEZ1bmN0aW9uIFR5cGUgd2l0aGluIEZ1bmN0aW9uIFNldAo+Pgo+PiBUaGUgRnVuY3Rpb24gc2V0 IGlzIEJpdHMgWzMxOjI0XSBkZXNjcmliaW5nIGJvdGggZnVuY3Rpb24gc2V0IG51bWJlcgo+PiBh bmQgb3ZlcmZsb3cgYml0LiBJbiB0aGUgYmVnaW5uaW5nLCB0aGUgb3ZlcmZsb3cgYml0IHNob3Vs ZCBiZSBzZXQgdG8KPj4gKip6ZXJvKiogYW5kIHRoZSBmdW5jdGlvbiBUeXBlIHBlciBmdW5jdGlv biBzZXQgY2FuIGJlIGFzc2lnbmVkIGJ5Cj4+IGxlZnQgc2hpZnRpbmcgMSBiaXQgYXQgYSB0aW1l LiBUaGUgb3ZlcmZsb3cgYml0IGNhbiBiZSBzZXQgdG8gb25lCj4+ICoqb25seSoqIHdoZW4gd2Ug bmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMjQgZnVuY3Rpb25zIHBlciBmdW5jdGlvbgo+PiBz ZXQgaW4gZnV0dXJlLiBTZXR0aW5nIHRoZSBvdmVyZmxvdyBiaXQgd2lsbCBpbmRpY2F0ZSBhbiBp bnRlZ2VyCj4+IGZ1bmN0aW9uIHR5cGUgc2NoZW1lLiBUaHVzLCB0aGVyZSB3aWxsIG1vcmUgdGhh biBlbm91Z2ggZnVuY3Rpb24gSURzCj4+IGF2YWlsYWJsZSB0byB1c2UgaW4gdGhlIGZ1dHVyZS4g UmVmZXIgYXBwZW5kaXggMSBmb3IgZXhhbXBsZXMuCj4+Cj4+IEhlcmUgYXJlIGZldyBGdW5jdGlv biBTZXRzIGZvciBTQkkgdjAuMjoKPj4KPj4gfCBGdW5jdGlvbiBTZXQgICAgICAgICB8IFZhbHVl ICB8IERlc2NyaXB0aW9uICAgICAgIHwKPj4gfCAtLS0tLS0tLS0tLS0tLS0tLS0tICB8Oi0tLS0t LTp8Cj4+IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKPj4g fCBCYXNlIEZ1bmN0aW9ucyAgICAgICB8IDB4MDAgICB8IEJhc2UgRnVuY3Rpb25zIG1hbmRhdG9y eSBmb3IgYW55IFNCSQo+PiB2ZXJzaW9uIHwKPj4gfCBIQVJUIFBNIEZ1bmN0aW9ucyAgICB8IDB4 MDEgICB8IEhhcnQgVVAvRG93bi9TdXNwZW5kIEZ1bmN0aW9ucyBmb3IKPj4gcGVyLUhhcnQgcG93 ZXIgbWFuYWdlbWVudHwKPj4gfCBTeXN0ZW0gUE0gRnVuY3Rpb25zICB8IDB4MDIgICB8IFN5c3Rl bSBTaHV0ZG93bi9SZWJvb3QvU3VzcGVuZCBmb3IKPj4gc3lzdGVtLWxldmVsIHBvd2VyIG1hbmFn ZW1lbnR8Cj4+IHwgVmVuZG9yIEZ1bmN0aW9ucyAgICAgfCAweDdmICAgfCBWZW5kb3Igc3BlY2lm aWMgRnVuY3Rpb25zfAo+Pgo+PiBOLkIuIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBkaWZm ZXJlbnQgdmVuZG9ycyBjYW4gY2hvb3NlIHRvCj4+IGFzc2lnbiB0aGUgc2FtZSBmdW5jdGlvbiBu dW1iZXJzIGZvciBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eS4gVGhhdCdzCj4+IHdoeSB2ZW5kb3Ig c3BlY2lmaWMgc3RyaW5ncyBpbiBEZXZpY2UgVHJlZS9BQ1BJIG9yIGFueSBvdGhlciBoYXJkd2Fy ZQo+PiBkZXNjcmlwdGlvbiBkb2N1bWVudCBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgaWYgYSBzcGVj aWZpYyBGdW5jdGlvbgo+PiBiZWxvbmdzIHRvIHRoZSBpbnRlbmRlZCB2ZW5kb3Igb3Igbm90Lgo+ Pgo+PiAjIFNCSSBGdW5jdGlvbiBMaXN0IGluIGJvdGggU0JJIHYwLjIgYW5kIHYwLjEKPj4KPj4g fEZ1bmN0aW9uIFR5cGUgICAgICAgICAgICAgIHwgRnVuY3Rpb24gU2V0ICAgICAgfCBJRCh2MC4y KSAgICAgfElECj4+ICh2MC4xKSAgfAo+PiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAo+ PiAtLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLTp8Cj4+IHwgc2Jp X3NldF90aW1lciAgICAgICAgICAgICB8IEJhc2UgICAgICAgICAgICAgIHwgMHgwMCAwMDAwMDAg IHwwCj4+ICAgICB8Cj4+IHwgc2JpX2NvbnNvbGVfcHV0Y2hhciAgICAgICB8IEJhc2UgICAgICAg ICAgICAgIHwgMHgwMCAwMDAwMDEgIHwxCj4+ICAgICB8Cj4+IHwgc2JpX2NvbnNvbGVfZ2V0Y2hh ciAgICAgICB8IEJhc2UgICAgICAgICAgICAgIHwgMHgwMCAwMDAwMDIgIHwyCj4+ICAgICB8Cj4+ IHwgc2JpX2NsZWFyX2lwaSAgICAgICAgICAgICB8IEJhc2UgICAgICAgICAgICAgIHwgMHgwMCAw MDAwMDQgIHwzCj4+ICAgICB8Cj4+IHwgc2JpX3NlbmRfaXBpICAgICAgICAgICAgICB8IEJhc2Ug ICAgICAgICAgICAgIHwgMHgwMCAwMDAwMDggIHw0Cj4+ICAgICB8Cj4+IHwgc2JpX3JlbW90ZV9m ZW5jZV9pICAgICAgICB8IEJhc2UgICAgICAgICAgICAgIHwgMHgwMCAwMDAwMTAgIHw1Cj4+ICAg ICB8Cj4+IHwgc2JpX3JlbW90ZV9zZmVuY2Vfdm1hICAgICB8IEJhc2UgICAgICAgICAgICAgIHwg MHgwMCAwMDAwMjAgIHw2Cj4+ICAgICB8Cj4+IHwgc2JpX3JlbW90ZV9zZmVuY2Vfdm1hX2FzaWR8 IEJhc2UgICAgICAgICAgICAgIHwgMHgwMCAwMDAwNDAgIHw3Cj4+ICAgICB8Cj4+IHwgc2JpX3No dXRkb3duICAgICAgICAgICAgICB8IFN5c3RlbSBQTSAgICAgICAgIHwgMHgwMiAwMDAwMDAgIHw4 Cj4+ICAgICB8Cj4+IHwgc2JpX3N5c3RlbV9yZXNldCAgICAgICAgICB8IFN5c3RlbSBQTSAgICAg ICAgIHwgMHgwMiAwMDAwMDEgIHwtCj4+ICAgICB8Cj4+IHwgc2JpX2dldF92ZXJzaW9uICAgICAg ICAgICB8IEJhc2UgICAgICAgICAgICAgIHwgMHgwMCAwMDAwODAgIHwtCj4+ICAgICB8Cj4+IHwg c2JpX2dldF9mdW5jdGlvbl9tYXNrICAgICB8IEJhc2UgICAgICAgICAgICAgIHwgMHgwMCAwMDAx MDAgIHwtCj4+ICAgICB8Cj4+IHwgc2JpX2dldF9mdW5jdGlvbl9jb3VudCAgICB8IEJhc2UgICAg ICAgICAgICAgIHwgMHgwMCAwMDAyMDAgIHwtCj4+ICAgICB8Cj4+IHwgc2JpX2hhcnRfdXAgICAg ICAgICAgICAgICB8IEhhcnQgUE0gICAgICAgICAgIHwgMHgwMSAwMDAwMDAgIHwtCj4+ICAgICB8 Cj4+IHwgc2JpX2hhcnRfZG93biAgICAgICAgICAgICB8IEhhcnQgUE0gICAgICAgICAgIHwgMHgw MSAwMDAwMDEgIHwtCj4+ICAgICB8Cj4+IHwgc2JpX2hhcnRfc3VzcGVuZCAgICAgICAgICB8IEhh cnQgUE0gICAgICAgICAgIHwgMHgwMSAwMDAwMDIgIHwtCj4+ICAgICB8Cj4+IHwgc2JpX2hhcnRf c3RhdGUgICAgICAgICAgICB8IEhhcnQgUE0gICAgICAgICAgIHwgMHgwMSAwMDAwMDQgIHwtCj4+ ICAgICB8Cj4+Cj4gCj4gV2hpbGUgSSBhZ3JlZSB3aXRoIHRoZSBjb25jZXB0IG9mIGNhdGVnb3Jp emluZyBmdW5jdGlvbnMsIEkgdGhpbmsgdGhlCj4gaW1wbGVtZW50YXRpb24gaXMgYSBiaXQgY29t cGxpY2F0ZWQuIFdlIGNhbiBqdXN0IGhhdmUgZnVuY3Rpb24gaWQKPiByYW5nZXMgaW5zdGVhZCBv ZiB3YXN0aW5nIGEgYnl0ZSBmb3IgZW5jb2RpbmcgYSBjYXRlZ29yeSB3aXRoaW4gdGhlCj4gZnVu Y3Rpb24gaWQuIEFsc28gdGhpcyBhcHByb2FjaCB3aWxsIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxl IHdpdGggdGhlCj4gZnVuY3Rpb24gaWRzIHdlIGFscmVhZHkgaGF2ZSBvbiBjdXJyZW50IFNCSS4K PiAKPiBFbmNvZGluZyBmdW5jdGlvbiBzZXRzIGFuZCBhIGJpdG1hc2sgZm9yIGZ1bmN0aW9ucywg YWxvbmcgd2l0aAo+IHRoZSBvdmVyZmxvdyBiaXQgb24gdGhlIGZ1bmN0aW9uIGlkIHNlZW1zIG92 ZXJseSBjb21wbGljYXRlZCB0byBtZQo+IGFuZCBJIGRvbid0IHNlZSB3aGF0IHdlIGdhaW4gZnJv bSB0aGlzLiBXZSBhcmUgd2FzdGluZyBiaXRzIGZvcgo+IHNldHMgdGhhdCBtYXkgaGF2ZSBvbmx5 IGEgZmV3IGZ1bmN0aW9ucyBhbmQgbmVlZCB0byBzdXBwb3J0Cj4gb3ZlcmZsb3cgZm9yIHNldHMg dGhhdCBhcmUgbGFyZ2VyIHRoYW4gMjQgZnVuY3Rpb25zIHdoaWNoIGlzIG5vdAo+IHRoYXQgbXVj aCwgZXNwZWNpYWxseSBpZiB5b3UgdGFrZSB2ZW5kb3Igc2V0cyBpbnRvIGFjY291bnQuCj4gSSB1 bmRlcnN0YW5kIHRoYXQgeW91IHdhbnQgdGhpcyBiaXRtYXNrIGZvciByZXBvcnRpbmcgYmFjayB0 aGUgbGlzdAo+IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMgcGVyIHNldCBidXQgdGhpcyBjYW4gYmUg ZG9uZSBkaWZmZXJlbnRseS4gRm9yCj4gZXhhbXBsZSB3ZSBjYW4gdXNlIGludHJvZHVjZSBhIGZ1 bmN0aW9uIGNhbGxlZCBzYmlfY2FsbF9jaGVjayh1aW50MzJfdAo+IGZ1bmN0aW9uX2lkKSBhbmQg ZXhwZWN0IFNCSV9FUlJfU1VDQ0VTUyBvciBTQklfRVJSX05PVF9TVVBQT1JURUQuCj4gCgpZZWFo LiBJIGhhZCB0aGF0IGluIHRoZSBmaXJzdCB2ZXJzaW9uLiBJIHdpbGwgZHJvcCB0aGUgYWJvdmUg Y29tcGxpY2F0ZWQgCnNjaGVtZS4KCj4gQWxzbyB3aXRoIHJlZ2FyZHMgdG8gdGhlIERUL0FDUEkg dGhlIGhhcmR3YXJlIHZlbmRvciBkb2Vzbid0IGFsd2F5cwo+IGltcGx5IGZpcm13YXJlIHZlbmRv ci4gSSB0aGluayB3ZSBzaG91bGQgYmUgbW9yZSBzcGVjaWZpYyBoZXJlLgo+IEFsc28gbmVlZGlu ZyBhIHNpZGUgY2hhbm5lbCB0byB1bmRlcnN0YW5kIHdoaWNoIHZlbmRvciBzcGVjaWZpYwo+IGZ1 bmN0aW9uIHdlIGFyZSBjYWxsaW5nIGlzIHN1Ym9wdGltYWwuIFdlIG1pZ2h0IHdhbnQgdG8gY2Fs bAo+IGEgdmVuZG9yIHNwZWNpZmljIFNCSSBjYWxsIGZvciBleGFtcGxlIGJlZm9yZSBwYXJzaW5n IERUIG9yCj4gQUNQSS4KPiAKPiBJIGJlbGlldmUgd2Ugc2hvdWxkIHVzZSBHVUlEcyBmb3IgdmVu ZG9yIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzCj4gaW5zdGVhZCBvZiBmdW5jdGlvbiBpZHMuIE5v cm1hbGx5IHRoZXNlIGFyZSAxMjhiaXQgbG9uZyAoUkZDIDQxMjIpCj4gYnV0IHdlIGNhbiBnZXQg YXdheSB3aXRoIDY0Yml0cy4gSW5zdGVhZCBvZiBhbGxvd2luZyBhIHJhbmdlIG9mCj4gZnVuY3Rp b24gaWRzIGZvciB2ZW5kb3JzLCB3ZSBjYW4ganVzdCBzcGVjaWZ5IG9uZSBjYWxsIHRvIHJ1bGUK PiB0aGVtIGFsbCwgc29tZXRoaW5nIGxpa2U6Cj4gCj4gaW50IHNiaV92ZW5kb3JfY2FsbCh1aW50 MzJfdCB2ZmlkX2hpZ2gsIHVpbnQzMl90IHZmaWRfbG93LCB2b2lkKiBhcmcpCj4gCj4gdW5kZXIg dGhlIGhvb2QgdGhpcyBjYW4gYmUgYW4gU0JJIGNhbGwgZS5nLiB3aXRoIGZpZCAweDEwMDAwMDAw IHRoYXQKPiB0YWtlcyAzIGFyZ3VtZW50cyAoYWxyZWFkeSBzdXBwb3J0ZWQpLCB3aXRoIHRoZSBw b2ludGVyIG9uIHRoZSAzcmQKPiBhcmd1bWVudCB0byBwb2ludCB0byBhIHN0cnVjdCB3aXRoIHRo ZSB2ZW5kb3IgY2FsbCBhcmd1bWVudHMgb24KPiBjYWxsLCBhbmQgYSBwb2ludGVyIGNvbnRhaW4g YSBzdHJ1Y3Qgc2JpX3JlcG9ydCBvbiByZXR1cm4uCj4gCgpUaGFua3MgZm9yIHlvdXIgaW5wdXRz LiBXZSBjYW4gZGlzY3VzcyB0aGVzZSBpbiBkZXRhaWxzIGR1cmluZyB2ZW5kb3IgClNCSSBleHRl bnNpb24gcHJvcG9zYWwuCgo+PiAjIyMjIEZ1bmN0aW9uIERlc2NyaXB0aW9uCj4+Cj4+IFRoaXMg c2VjdGlvbiBkZXNjcmliZXMgZXZlcnkgbmV3bHkgaW50cm9kdWNlZChpbiB2MC4yKSBmdW5jdGlv biBpbgo+PiBkZXRhaWxzLiBQbGVhc2UgcmVmZXIgdG8gWzFdIGZvciBhbnkgdjAuMSBmdW5jdGlv bnMuCj4+Cj4+IGBgYAo+PiB1MzIgc2JpX2dldF92ZXJzaW9uKHZvaWQpOgo+PiBgYGAKPj4gUmV0 dXJucyB0aGUgY3VycmVudCBTQkkgdmVyc2lvbiBpbXBsZW1lbnRlZCBieSB0aGUgZmlybXdhcmUu Cj4+IHZlcnNpb246IHVpbnQzMjogQml0c1szMToxNl0gTWFqb3IgVmVyc2lvbgo+PiAgICAgICAg ICAgICAgIEJpdHNbMTU6MF0gTWlub3IgVmVyc2lvbgo+Pgo+PiBUaGUgZXhpc3RpbmcgU0JJIHZl cnNpb24gY2FuIGJlIDAuMS4gVGhlIHByb3Bvc2VkIHZlcnNpb24gd2lsbCBiZSBhdAo+PiAwLjIK Pj4gQSBkaWZmZXJlbnQgbWFqb3IgdmVyc2lvbiBtYXkgaW5kaWNhdGUgcG9zc2libGUgaW5jb21w YXRpYmxlIGZ1bmN0aW9ucy4KPj4gQSBkaWZmZXJlbnQgbWlub3IgdmVyc2lvbiBtdXN0IGJlIGNv bXBhdGlibGUgd2l0aCBlYWNoIG90aGVyIGV2ZW4gaWYKPj4gdGhleSBoYXZlIGEgaGlnaGVyIG51 bWJlciBvZiBmZWF0dXJlcy4KPj4KPj4gYGBgCj4+IHUzMiBzYmlfZ2V0X2Z1bmN0aW9uX21hc2so dTMyIGZ0eXBlKQo+PiBgYGAKPj4gR2l2ZW4gYSBmdW5jdGlvbiBzZXQgdHlwZSwgaXQgcmV0dXJu cyBhIGJpdG1hc2sgb2YgYWxsIGZ1bmN0aW9ucyBJRHMKPj4gdGhhdCBhcmUgaW1wbGVtZW50ZWQg Zm9yIHRoYXQgZnVuY3Rpb24gc2V0Lgo+Pgo+PiBgYGAKPj4gdTMyIHNiaV9nZXRfZnVuY3Rpb25f Y291bnQodTMyIGZ0eXBlLCB1MzIgc3RhcnRfZmlkLCB1bnNpZ25lZCBsb25nCj4+IGNvdW50KToK Pj4gYGBgCj4+Cj4+IFRoaXMgaXMgYSAqKnJlc2VydmVkKiogZnVuY3Rpb24gdGhhdCBzaG91bGQg b25seSBiZSB1c2VkIGlmIG92ZXJmbG93Cj4+IGJpdCBpbiBTQkkgZnVuY3Rpb24gSUQgaXMgc2V0 Lgo+Pgo+PiBBY2NlcHRzIGEgc3RhcnRfRnVuY3Rpb25faWQgYXMgYW4gYXJndW1lbnQgYW5kIHJl dHVybnMgaWYKPj4gc3RhcnRfRnVuY3Rpb25faWQgdG8gKHN0YXJ0X0Z1bmN0aW9uX2lkICsgY291 bnQgLSAxKSBhcmUgc3VwcG9ydGVkIG9yCj4+IG5vdC4KPj4KPj4gQSBjb3VudCBjYW4gaGVscCBp biBtaW5pbWl6aW5nIHRoZSBudW1iZXIgb2YgdGhlIE0tbW9kZSB0cmFwcyBieQo+PiBjaGVja2lu ZyBhIHJhbmdlIG9mIFNCSSBmdW5jdGlvbnMgdG9nZXRoZXIuCj4+Cj4gCj4gQXMgSSBtZW50aW9u ZWQgYWJvdmUgSSB0aGluZyB0aGlzIGNvbXBsaWNhdGVzIHRoaW5ncyBhbmQgZm9yY2VzIGEKPiBz dWJvcHRpbWFsIGZ1bmN0aW9uIGlkIGVuY29kaW5nLiBXZSBjYW4gaW5zdGVhZCBpbnRyb2R1Y2Ug c29tZXRoaW5nCj4gbGlrZSBzYmlfY2FsbF9jaGVjaygpIGluc3RlYWQuIEFzIGZvciB0aGUgdmVu ZG9yIGNhbGxzLCB3ZSBjYW4gYWxzbwo+IGludHJvZHVjZToKPiAKPiBpbnQgc2JpX3ZlbmRvcl9j YWxsX2NoZWNrKHVpbnQzMl90IHZmaWRfaGlnaCwgdWludDMyX3QgdmZpZF9sb3cpOwo+IAo+IEFu b3RoZXIgcmVhc29uIEkgZmluZCBzYmlfdmVuZG9yX2NhbGwvc2JpX3ZlbmRvcl9jYWxsX2NoZWNr IGJldHRlcgo+IGlzIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIG5hbWVzIGZvbGxvdyB0aGUgcmVzdCBv ZiB0aGUgbmFtZXNwYWNlIHNjaGVtZS4KPiBJJ2xsIGNvbWUgYmFjayB0byB0aGF0IGxhdGVyIG9u Lgo+IAoKCgo+PiBgYGAKPj4gaW50IHNiaV9oYXJ0X3VwKHVuc2lnbmVkIGxvbmcgaGFydGlkLCB1 bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZAo+PiBsb25nIHByaXYpCj4+IGBgYAo+PiBCcmlu Z3MgdXAgImhhcnRpZCIgZWl0aGVyIGR1cmluZyBpbml0aWFsIGJvb3Qgb3IgYWZ0ZXIgYSBzYmlf aGFydF9kb3duCj4+IFNCSSBjYWxsLgo+Pgo+PiAic3RhcnQiIHBvaW50cyB0byBhIHJ1bnRpbWUt c3BlY2lmaWVkIGFkZHJlc3Mgd2hlcmUgYSBoYXJ0IGNhbiBlbnRlcgo+PiBpbnRvIHN1cGVydmlz b3IgbW9kZS4gVGhpcyBtdXN0IGJlIGEgcGh5c2ljYWwgYWRkcmVzcy4KPj4KPj4gInByaXYiIGlz IGEgcHJpdmF0ZSBkYXRhIHRoYXQgY2FsbGVyIGNhbiB1c2UgdG8gcGFzcyBpbmZvcm1hdGlvbiBh Ym91dAo+PiBleGVjdXRpb24gY29udGV4dC4KPj4KPj4gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBT QkkgZXJyb3IgY29kZS4KPj4KPj4gYGBgCj4+IGludCBzYmlfaGFydF9zdXNwZW5kKHUzMiBzdGF0 ZSwgdW5zaWduZWQgbG9uZyByZXN1bWVfZW50cnksIHVuc2lnbmVkCj4+IGxvbmcgcHJpdikKPj4g YGBgCj4+IFN1c3BlbmRzIHRoZSBjYWxsaW5nIGhhcnQgdG8gYSBwYXJ0aWN1bGFyIHBvd2VyIHN0 YXRlLiBTdXNwZW5kZWQgaGFydAo+PiB3aWxsIGF1dG9tYXRpY2FsbHkgd2FrZS11cCBiYXNlZCBv biBzb21lIHdha2V1cCBldmVudHMgYXQgcmVzdW1lX2VudHJ5Cj4+IHBoeXNpY2FsIGFkZHJlc3Mu Cj4+Cj4+ICJwcml2IiBpcyBhIHByaXZhdGUgZGF0YSB0aGF0IGNhbGxlciBjYW4gdXNlIHRvIHBh c3MgaW5mb3JtYXRpb24gYWJvdXQKPj4gZXhlY3V0aW9uIGNvbnRleHQuIFRoZSBTQkkgaW1wbGVt ZW50YXRpb24gbXVzdCBzYXZlIGEgY29weSBzbyB0aGF0Cj4+IGNhbGxlciBjYW4gcmV1c2Ugd2hp bGUgcmVzdG9yaW5nIGhhcnQgZnJvbSBzdXNwZW5kLgo+Pgo+PiBSZXR1cm4gdGhlIGFwcHJvcHJp YXRlIFNCSSBlcnJvciBjb2RlLgo+Pgo+PiBgYGAKPj4gaW50IHNiaV9oYXJ0X2Rvd24oKQo+PiBg YGAKPj4gSXQgcG93ZXJzIG9mZiB0aGUgaGFydCBhbmQgd2lsbCBiZSB1c2VkIGluIGNwdS1ob3Rw bHVnLgo+PiBPbmx5IGluZGl2aWR1YWwgaGFydCBjYW4gcmVtb3ZlIGl0c2VsZiBmcm9tIHN1cGVy dmlzb3IgbW9kZS4gSXQgY2FuIGJlCj4+IG1vdmVkIHRvIG5vcm1hbCBzdGF0ZSBvbmx5IGJ5IHNi aV9oYXJ0X3VwIGZ1bmN0aW9uLgo+Pgo+PiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIFNCSSBlcnJv ciBjb2RlLgo+Pgo+PiBgYGAKPj4gdTMyIHNiaV9oYXJ0X3N0YXRlKHVuc2lnbmVkIGxvbmcgaGFy dGlkKQo+PiBgYGAKPj4gUmV0dXJucyB0aGUgUklTQ1ZfUE9XRVJfU1RBVEUgZm9yIGEgc3BlY2lm aWMgaGFydGlkLiBUaGlzIHdpbGwgaGVscAo+PiBtYWtlCj4+IGtleGVjIGxpa2UgZnVuY3Rpb25h bGl0eSBtb3JlIHJvYnVzdC4KPj4KPiAKPiBJIHN0aWxsIHRoaW5rIHRoYXQgaXQgd291bGQgYmUg YmV0dGVyIHRvIGhhdmUgc2JpX2hhcnRfc2V0X3N0YXRlIGFuZAo+IHNiaV9oYXJ0X2dldF9zdGF0 ZSBpbnN0ZWFkIG9mIGhhdmluZyBkaWZmZXJlbnQgY2FsbHMgZm9yIGRpZmZlcmVudAo+IHN0YXRl cyBidXQgSSBndWVzcyBpdCdzIGEgbWF0dGVyIG9mIHRhc3RlLiBDb3VsZCB3ZSBhdCBsZWFzdAo+ IHVzZSBzYmlfaGFydF9nZXRfc3RhdGUgaW5zdGVhZCBvZiBzYmlfaGFydF9zdGF0ZSB0byBiZSBj b25zaXN0ZW50Cj4gd2l0aCB0aGUgcmVzdCBvZiB0aGUgY2FsbHMgdGhhdCBjb250YWluIGdldC9z ZXQgb24gdGhlaXIgbmFtZSA/Cj4gCgpBQ0suCgo+PiBgYGAKPj4gdm9pZCBzYmlfc3lzdGVtX3Jl c2V0KHUzMiByZXNldF90eXBlKQo+PiBgYGAKPj4gUmVzZXQgdGhlIGVudGlyZSBzeXN0ZW0uCj4+ Cj4gCj4gQ291bGQgd2UgcGxlYXNlIHJlbmFtZSBzYmlfc2h1dGRvd24gdG8gc2JpX3N5c3RlbV9z aHV0ZG93biBzbyB0aGF0Cj4gaXQncyBjb25zaXN0ZW50IHdpdGggdGhlIF9zeXN0ZW1fIG5hbWVz cGFjZS9jYXRlZ29yeSA/Cj4gCgpBQ0suIEhvd2V2ZXIsIHNiaV9zaHV0ZG93biBpcyBhbHJlYWR5 IGEgcGFydCBvZiBsZWdhY3kgQVBJcy4gU28gaXQgaGFzIAp0byBiZSBzdXBwb3J0ZWQgdGhhdCB3 YXkuCgpUaGUgcG93ZXIgbWFuYWdlbWVudCBTQkkgZXh0ZW5zaW9uLCB3ZSB3aWxsIHVzZSB0aGUg Y29uc2lzdGVudCBuYW1pbmcuCgo+PiAjIyBSZXR1cm4gZXJyb3IgY29kZSBUYWJsZToKPj4gSGVy ZSBhcmUgdGhlIFNCSSByZXR1cm4gZXJyb3IgY29kZXMgZGVmaW5lZC4KPj4KPj4gfCBFcnJvciBU eXBlICAgICAgICAgICAgICAgfCBWYWx1ZSAgfAo+PiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS18Oi0tLS0tLTp8Cj4+IHwgIFNCSV9FUlJfU1VDQ0VTUyAgICAgICAgIHwgIDAgICAgIHwKPj4g fCAgU0JJX0VSUl9GQUlMVVJFICAgICAgICAgfCAtMSAgICAgfAo+PiB8ICBTQklfRVJSX05PVF9T VVBQT1JURUQgICB8IC0yICAgICB8Cj4+IHwgIFNCSV9FUlJfSU5WQUxJRF9QQVJBTSAgIHwgLTMg ICAgIHwKPj4gfCAgU0JJX0VSUl9ERU5JRUQgICAgICAgICAgfCAtNCAgICAgfAo+PiB8ICBTQklf RVJSX0lOVkFMSURfQUREUkVTUyB8IC01ICAgICB8Cj4+Cj4+Cj4gCj4gU2luY2Ugc3VjY2VzcyBp cyBub3QgZXJyb3IsIGNvdWxkIHdlIGNhbGwgdGhlbSBzdGF0dXMgY29kZXMgb3IganVzdAo+IHJl dHVybiBjb2RlcyBpbnN0ZWFkID8KPiAKCll1cC4gUmV0dXJuIGNvZGUgaXMgb2suCgoKUmVnYXJk cywKQXRpc2gKPiBUaGFuayB5b3UgZm9yIHlvdXIgdGltZSBhbmQgZWZmb3J0IG9uIHRoaXMgIQo+ IAo+IFJlZ2FyZHMsCj4gTmljawo+IAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXJpc2N2Cg==