From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [207.46.229.174]) by sourceware.org (Postfix) with ESMTP id 34F833858D1E for ; Tue, 25 Apr 2023 10:11:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 34F833858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com Received: from E0001797DT (unknown [113.200.72.66]) by app1 (Coremail) with SMTP id EwgMCgCnRMRcp0dkn0cNAA--.7651S2; Tue, 25 Apr 2023 18:11:40 +0800 (CST) Date: Tue, 25 Apr 2023 18:11:40 +0800 From: "Fei Gao" To: jiawei Cc: gcc-patches Subject: [PATCH 4/5] RISC-V: Add Zcmp extension supports. X-Priority: 3 X-GUID: 36186CA0-5152-4C78-AD6E-5A5795FD63E8 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <2023042518114000378158@eswincomputing.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:EwgMCgCnRMRcp0dkn0cNAA--.7651S2 X-Coremail-Antispam: 1UD129KBjvAXoWDGFyDWr4UGr4rWr4rArW8JFb_yoWrWr15Co WIgr1FqF15Jryjgr48Jw17GrnxXr1qqrsFqFW8Gry3JF1kAF18X34Iy342qayUtryxKr1U JF4UXrW0vFykAr1rn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUYf7k0a2IF6w4kM7kC6x804xWl1xkIjI8I6I8E6xAIw20EY4v2 0xvaj40_Wr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7 IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xv wVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcx kEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VW8 Jr1UJr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4xvF2IEb7IF0Fy264 kE64k0F24lFcxC0VAYjxAxZF0Ex2IqxwCY02Avz4vE14v_Gw1l42xK82IYc2Ij64vIr41l 42xK82IY6x8ErcxFaVAv8VW8Jr1UJr1l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4 xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1Y6r17 MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I 0E14v26r1j6r4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWU JVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r1j6r4UMVCEFcxC0VAYjxAxZFUvcSsGvfC2Kf nxnUUI43ZEXa7IUnZFx5UUUUU== X-CM-SenderInfo: xjdrwv3l6h245lqf0zpsxwx03jof0z/ X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: CgpoaSBKaWF3ZWkKClBsZWFzZSBpZ25vcmUgbXkgcHJldmlvdXMgcmVwbHkuIEkgYWNjaWRlbnRs eSBzZW50IHRoZSBlbWFpbCBiZWZvcmUgSSBmaW5pc2hlZCBpdC4KU29ycnkgZm9yIHRoYXQhCgpJ IGRvd25sb2FkZWQgdGhlIHNlcmllcyBvZiBwYXRjaGVzIGZyb20geW91IGFuZCBmb3VuZCBpbiBz b21lIGNhc2VzCml0IGZhaWxzIHRvIGdlbmVyYXRlIHpjbXAgcHVzaCBhbmQgcG9wIGluc25zLgoK VEM6CgpjaGFyIG15X2dldGNoYXIoKTsKaW50IHRlc3RfczAoKQp7CgrCoCDCoCDCoCDCoCBpbnQg YSA9IG15X2dldGNoYXIoKTsKwqAgwqAgwqAgwqAgaW50IGIgPSBteV9nZXRjaGFyKCk7CsKgIMKg IMKgIMKgIHJldHVybiBhK2I7Cn0KCmNjMSAtZm5vLXNocmluay13cmFwLXNlcGFyYXRlIC1PMiAt bWFyY2g9cnYzMmVfemNhX3pjbXAgLW1hYmk9aWxwMzJlIMKgLW1jbW9kZWw9bWVkbG93IHRlc3Qu YwoKLWZuby1zaHJpbmstd3JhcC1zZXBhcmF0ZSBpcyB1c2VkIGhlcmUgdG8gYXZvaWQgdGhlIGlt cGFjdCBmcm9twqBzaHJpbmstd3JhcC1zZXBhcmF0ZSB0aGF0IGlzIGJ5IGRlZmF1bHQKZW5hYmxl ZCBpbiBPMi4KCkFzIGknbSBhbHNvIGludGVyZXN0ZWQgaW4gWmMqLCBpIGRpZCBzb21lIGNoYW5n ZXMgbWFpbmx5IGluIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBwYXNzIHF1aXRlIHNpbWxpYXIgdG8K d2hhdCBoYXMgYmVlbiBkb25lIGZvciBzYXZlIGFuZCByZXN0b3JlIGV4Y2VwdCB0aGUgQ0ZJIGRp cmVjdGl2ZXMgZHVlIHRvIHJldmVyc2VkIG9yZGVyIHRoYXQgemNtcApwdXNoZXMgYW5kIHBvcHMg cmEsIHMgcmVnc8KgdGhhbiB3aGF0IHNhdmUgYW5kIHJlc3RvcmUgZG8uIAoKSSB3aWxsIHJlZmlu ZSBhbmQgc2hhcmUgdGhlIGNvZGUgc29vbiBmb3IgeW91ciByZXZpZXcuCgpCUgpGZWkKCgoKCk9u IFRodSBBcHIgNiAwNjoyMToxNyBHTVQgMjAyMyDCoEppYXdlaSBqaWF3ZWlAaXNjYXMuYWMuY24g d3JvdGU6Cj4KPkFkZCBaY21wIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgc3VwcG9ydC4gR2VuZXJh dGUgcHVzaC9wb3AKPndpdGggZm9sbG93IHN0ZXBzOgo+Cj7CoCAxLiBwcmVwcm9jZXNzaW5nOgo+ wqAgwqAgMS4xLiBpZiB0aGVyZSBpcyBubyBwdXNoIHJ0eCwgdGhlbiBqdXN0IHJldHVybi4gZS5n Lgo+wqAgwqAgKG5vdGUgNSAxIDIyIDIgW2JiIDJdIE5PVEVfSU5TTl9CQVNJQ19CTE9DSykKPsKg IMKgIChpbnNuL2YgMjIgNSAyMyAyIChzZXQgKHJlZy9mOlNJIDIgc3ApCj7CoCDCoCDCoCAocGx1 czpTSSAocmVnL2Y6U0kgMiBzcCkKPsKgIMKgIMKgIMKgIChjb25zdF9pbnQgLTMyIFsweGZmZmZm ZmZmZmZmZmZmZTBdKSkpCj7CoCDCoCAobmlsKSkKPsKgIMKgIChub3RlIDIzIDIyIDIgMiBOT1RF X0lOU05fUFJPTE9HVUVfRU5EKQo+wqAgwqAgMS4yLiBpZiBwdXNoIHJ0eCBleGlzdHMsIHRoZW4g d2UgY29tcHV0ZSB0aGUgbnVtYmVyIG9mCj7CoCDCoCBwdXNoZWQgcy1yZWdpc3RlcnMsIG5fc3Jl Zy4KPgo+wqAgcHVzaCBydHggc2hvdWxkIGJlIGZpbmQgYmVmb3JlIE5PVEVfSU5TTl9QUk9MT0dV RV9FTkQgdGFnCj4KPsKgIFsyIGFuZCAzIGhhcHBlbmQgc2ltdWx0YW5lb3VzbHldCj4KPsKgIDIu IGZpbmQgdmFsaWQgbW92ZSBwYXR0ZXJuLCBtdiBzTiwgYU4sIHdoZXJlIE4gPCBuX3NyZWcsCj7C oCDCoCBhbmQgYU4gaXMgbm90IHVzZWQgdGhlIG1vdmUgcGF0dGVybiwgYW5kIHNOIGlzIG5vdAo+ wqAgwqAgZGVmaW5lZCBiZWZvcmUgdGhlIG1vdmUgcGF0dGVybiAoZnJvbSBwcm9sb2d1ZSB0byB0 aGUKPsKgIMKgIHBvc2l0aW9uIG9mIG1vdmUgcGF0dGVybikuCj4KPsKgIDMuIGFuYWx5c2lzIHVz ZSBhbmQgcmVhY2ggb2YgZXZlcnkgaW5zdHJ1Y3Rpb24gZnJvbSBwcm9sb2d1ZQo+wqAgwqAgdG8g dGhlIHBvc2l0aW9uIG9mIG1vdmUgcGF0dGVybi4KPsKgIMKgIGlmIGFueSBzTiBpcyB1c2VkLCB0 aGVuIHdlIG1hcmsgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQgbGlzdAo+wqAgwqAgY2FuZGlk YXRlIGFzIGludmFsaWQuCj7CoCDCoCBlLmcuCj7CoCDCoCDCoCDCoCBwdXNoIMKge3JhLHMwLXMz fSwge30sIC0zMgo+wqAgwqAgwqAgwqAgc3cgwqAgwqAgwqBzMCw0NChzcCkgIyBzMCBpcyB1c2Vk LCB0aGVuIGFyZ3VtZW50IGxpc3QgaXMgaW52YWxpZAo+wqAgwqAgwqAgwqAgbXYgwqAgwqAgwqBh MCxhNSDCoCDCoCAjIGEwIGlzIGRlZmluZWQsIHRoZW4gYXJndW1lbnQgbGlzdCBpcyBpbnZhbGlk Cj7CoCDCoCDCoCDCoCAuLi4KPsKgIMKgIMKgIMKgIG12IMKgIMKgIMKgczAsYTAKPsKgIMKgIMKg IMKgIG12IMKgIMKgIMKgczEsYTEKPsKgIMKgIMKgIMKgIG12IMKgIMKgIMKgczIsYTIKPgo+wqAg NC4gaWYgdGhlcmUgaXMgYSB2YWxpZCBhcmd1bWVudCBsaXN0LCB0aGVuIHJlcGxhY2UgdGhlIHBv cAo+wqAgwqAgcHVzaCBwYXJhbGxlbCBpbnNuLCBhbmQgZGVsZXRlIG12IHBhdHRlcm4uCj7CoCDC oCDCoGlmIG5vdCwgc2tpcC4KPgo+QWxsICJ6Y21wZSIgbWVhbnMgWmNtcCB3aXRoIFJWRSBleHRl bnNpb24uCj5UaGUgcHVzaC9wb3AgaW5zdHJ1bmN0aW9uIGltcGxlbWVudCBpcyBtb3N0bHkgZmlu aXNoZWQgYnkgU2luYW4gTGluLgo+Cj5Dby1BdXRob3JlZCBieTogU2luYW4gTGluIDxzaW5hbi4u Li5AbGludXguYWxpYmFiYS5jb20+Cj5Dby1BdXRob3JlZCBieTogU2ltb24gQ29vayA8c2ltb24u Yy4uLkBlbWJlY29zbS5jb20+Cj5Dby1BdXRob3JlZCBieTogU2hpaHVhIExpYW8gPHNoaS4uLkBp c2Nhcy5hYy5jbj4KPgo+Z2NjL0NoYW5nZUxvZzoKPgo+wqAgwqAgwqAgwqAgKiBjb25maWcuZ2Nj OiBOZXcgb2JqZWN0Lgo+wqAgwqAgwqAgwqAgKiBjb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZCAo cmlzY3Zfc3RhY2tfcHVzaF9vcGVyYXRpb24pOgo+wqAgwqAgwqAgwqAgwqAgTmV3IHByZWRpY2F0 ZS4KPsKgIMKgIMKgIMKgIChyaXNjdl9zdGFja19wb3Bfb3BlcmF0aW9uKTogRGl0dG8uCj7CoCDC oCDCoCDCoCAocG9wX3JldHVybl92YWx1ZV9jb25zdGFudCk6IERpdHRvLgo+wqAgwqAgwqAgwqAg KiBjb25maWcvcmlzY3YvcmlzY3YtcGFzc2VzLmRlZiAoSU5TRVJUX1BBU1NfQUZURVIpOiBOZXcg cGFzcy4KPsKgIMKgIMKgIMKgICogY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oIChyaXNjdl9v dXRwdXRfcG9wcmV0X3ApOgo+wqAgwqAgwqAgwqAgwqAgTmV3IHJvdXRpbmUuCj7CoCDCoCDCoCDC oCAocmlzY3ZfdmFsaWRfc3RhY2tfcHVzaF9wb3BfcCk6IERpdHRvLgo+wqAgwqAgwqAgwqAgKHJp c2N2X2NoZWNrX3JlZ25vKTogRGl0dG8uCj7CoCDCoCDCoCDCoCAobWFrZV9wYXNzX3pjbXBfcG9w cmV0KTogTmV3IHBhc3MuCj7CoCDCoCDCoCDCoCAqIGNvbmZpZy9yaXNjdi9yaXNjdi5jYyAoc3Ry dWN0IHJpc2N2X2ZyYW1lX2luZm8pOiBOZXcgdmFyaWFibGUuCj7CoCDCoCDCoCDCoCAocmlzY3Zf b3V0cHV0X3BvcHJldF9wKTogTmV3IGZ1bmN0aW9uLgo+wqAgwqAgwqAgwqAgKHJpc2N2X3ByaW50 X3BvcF9zaXplKTogRGl0dG8uCj7CoCDCoCDCoCDCoCAocmlzY3ZfcHJpbnRfcmVnbGlzdCk6IERp dHRvLgo+wqAgwqAgwqAgwqAgKHJpc2N2X3ByaW50X29wZXJhbmQpOiBOZXcgY2FzZSBzeW1ib2xz Lgo+wqAgwqAgwqAgwqAgKHJpc2N2X3NhdmVfcHVzaF9wb3BfY291bnQpOiBOZXcgZnVuY3Rpb24u Cj7CoCDCoCDCoCDCoCAocmlzY3ZfcHVzaF9wb3BfYmFzZV9zcF9hZGp1c3QpOiBEaXR0by4KPsKg IMKgIMKgIMKgIChyaXNjdl91c2VfcHVzaF9wb3ApOiBEaXR0by4KPsKgIMKgIMKgIMKgIChyaXNj dl9jb21wdXRlX2ZyYW1lX2luZm8pOiBBZGp1c3QgZnJhbWUgdmFsdWUuCj7CoCDCoCDCoCDCoCAo cmlzY3ZfZW1pdF9wb3BfaW5zbik6IE5ldyBmdW5jdGlvbi4KPsKgIMKgIMKgIMKgIChyaXNjdl9j aGVja19yZWdubyk6IERpdHRvLgo+wqAgwqAgwqAgwqAgKHJpc2N2X3ZhbGlkX3N0YWNrX3B1c2hf cG9wX3ApOiBEaXR0by4KPsKgIMKgIMKgIMKgIChyaXNjdl9lbWl0X3B1c2hfaW5zbik6IERpdHRv Lgo+wqAgwqAgwqAgwqAgKHJpc2N2X2V4cGFuZF9wcm9sb2d1ZSk6IE1vZGlmeSBmcmFtZSBwYXR0 ZXJuLgo+wqAgwqAgwqAgwqAgKHJpc2N2X2V4cGFuZF9lcGlsb2d1ZSk6IERpdHRvLgo+wqAgwqAg wqAgwqAgKiBjb25maWcvcmlzY3YvcmlzY3YuaCAoUkVUVVJOX1ZBTFVFX1JFR05VTSk6Cj7CoCDC oCDCoCDCoCAoUklTQ1ZfWkNFX1BVU0hfUE9QX01BU0spOiBOZXcgbWFzay4KPsKgIMKgIMKgIMKg IChSSVNDVl9aQ01QRV9QVVNIX1BPUF9NQVNLKTogRGl0dG8uCj7CoCDCoCDCoCDCoCAqIGNvbmZp Zy9yaXNjdi9yaXNjdi5tZDogQWRkIG5ldyByZWcgbnVtYmVyIGFuZCBpbmNsdWRlIGluZm8uCj7C oCDCoCDCoCDCoCAqIGNvbmZpZy9yaXNjdi90LXJpc2N2OiBOZXcgb2JqZWN0IHJ1bGVzLgo+wqAg wqAgwqAgwqAgKiBjb25maWcvcmlzY3YvcmlzY3YtemNtcC1wb3ByZXQuY2M6IE5ldyBmaWxlLgo+ wqAgwqAgwqAgwqAgKiBjb25maWcvcmlzY3YvemMubWQ6IE5ldyBmaWxlLgo+LS0tCj7CoGdjYy9j b25maWcuZ2NjIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfCDCoCAyICstCj7C oGdjYy9jb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZCDCoCDCoCDCoCDCoHwgwqAxNiArCj7CoGdj Yy9jb25maWcvcmlzY3YvcmlzY3YtcGFzc2VzLmRlZiDCoCDCoCB8IMKgIDEgKwo+wqBnY2MvY29u ZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oIMKgIMKgIMKgIHwgwqAgNCArCj7CoGdjYy9jb25maWcv cmlzY3YvcmlzY3YtemNtcC1wb3ByZXQuY2MgfCAyNjAgKysrKysrKysrKysrKysrCj7CoGdjYy9j b25maWcvcmlzY3YvcmlzY3YuY2MgwqAgwqAgwqAgwqAgwqAgwqAgfCA0MzcgKysrKysrKysrKysr KysrKysrKysrKysrKy0KPsKgZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5oIMKgIMKgIMKgIMKgIMKg IMKgIMKgfCDCoCA0ICsKPsKgZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZCDCoCDCoCDCoCDCoCDC oCDCoCB8IMKgIDMgKwo+wqBnY2MvY29uZmlnL3Jpc2N2L3QtcmlzY3YgwqAgwqAgwqAgwqAgwqAg wqAgwqB8IMKgIDQgKwo+wqBnY2MvY29uZmlnL3Jpc2N2L3pjLm1kIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgfCDCoDQ3ICsrKwo+wqAxMCBmaWxlcyBjaGFuZ2VkLCA3NjcgaW5zZXJ0aW9ucygrKSwg MTEgZGVsZXRpb25zKC0pCj7CoGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvY29uZmlnL3Jpc2N2L3Jp c2N2LXpjbXAtcG9wcmV0LmNjCj7CoGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvY29uZmlnL3Jpc2N2 L3pjLm1kCj4KPmRpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCj5p bmRleCA2MjlkMzI0YjVlZi4uYTk5MWM1MjczZjkgMTAwNjQ0Cj4tLS0gYS9nY2MvY29uZmlnLmdj Ywo+KysrIGIvZ2NjL2NvbmZpZy5nY2MKPkBAIC01MjksNyArNTI5LDcgQEAgcHJ1LSotKikKPsKg IMKgIMKgIMKgIDs7Cj7CoHJpc2N2KikKPsKgIMKgIMKgIMKgIGNwdV90eXBlPXJpc2N2Cj4tIMKg IMKgIMKgIGV4dHJhX29ianM9InJpc2N2LWJ1aWx0aW5zLm8gcmlzY3YtYy5vIHJpc2N2LXNyLm/C oAo+cmlzY3Ytc2hvcnRlbi1tZW1yZWZzLm8gcmlzY3Ytc2VsZnRlc3RzLm8gcmlzY3Ytdi5vIHJp c2N2LXZzZXR2bC5vIgo+KyDCoCDCoCDCoCBleHRyYV9vYmpzPSJyaXNjdi1idWlsdGlucy5vIHJp c2N2LWMubyByaXNjdi1zci5vwqAKPnJpc2N2LXNob3J0ZW4tbWVtcmVmcy5vIHJpc2N2LXNlbGZ0 ZXN0cy5vIHJpc2N2LXYubyByaXNjdi12c2V0dmwub8KgCj5yaXNjdi16Y21wLXBvcHJldC5vIgo+ wqAgwqAgwqAgwqAgZXh0cmFfb2Jqcz0iJHtleHRyYV9vYmpzfSByaXNjdi12ZWN0b3ItYnVpbHRp bnMub8KgCj5yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLm8gcmlzY3YtdmVjdG9yLWJ1aWx0 aW5zLWJhc2VzLm8iCj7CoCDCoCDCoCDCoCBleHRyYV9vYmpzPSIke2V4dHJhX29ianN9IHRoZWFk Lm8iCj7CoCDCoCDCoCDCoCBkX3RhcmdldF9vYmpzPSJyaXNjdi1kLm8iCj5kaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9yaXNjdi9wcmVkaWNhdGVzLm1kIGIvZ2NjL2NvbmZpZy9yaXNjdi9wcmVkaWNh dGVzLm1kCj5pbmRleCAwZDlkNzcwMWM3ZS4uNmJmZjZjZDA0N2EgMTAwNjQ0Cj4tLS0gYS9nY2Mv Y29uZmlnL3Jpc2N2L3ByZWRpY2F0ZXMubWQKPisrKyBiL2djYy9jb25maWcvcmlzY3YvcHJlZGlj YXRlcy5tZAo+QEAgLTQxMiwzICs0MTIsMTkgQEAKPsKgIMKgKGFuZCAobWF0Y2hfY29kZSAiY29u c3RfaW50IikKPsKgIMKgIMKgIMKgIChpb3IgKG1hdGNoX29wZXJhbmQgMCAibm90X3VpbW1fZXh0 cmFfYml0X29wZXJhbmQiKQo+wqAgwqAgwqAgwqAgwqAgwqAgKG1hdGNoX29wZXJhbmQgMCAiY29u c3Rfbm90dHdvYml0c19vcGVyYW5kIikpKSkKPisKPisoZGVmaW5lX3NwZWNpYWxfcHJlZGljYXRl ICJyaXNjdl9zdGFja19wdXNoX29wZXJhdGlvbiIKPisgwqAobWF0Y2hfY29kZSAicGFyYWxsZWwi KQo+K3sKPisgwqByZXR1cm4gcmlzY3ZfdmFsaWRfc3RhY2tfcHVzaF9wb3BfcCAob3AsIHRydWUp Owo+K30pCj4rCj4rKGRlZmluZV9zcGVjaWFsX3ByZWRpY2F0ZSAicmlzY3Zfc3RhY2tfcG9wX29w ZXJhdGlvbiIKPisgwqAobWF0Y2hfY29kZSAicGFyYWxsZWwiKQo+K3sKPisgwqByZXR1cm4gcmlz Y3ZfdmFsaWRfc3RhY2tfcHVzaF9wb3BfcCAob3AsIGZhbHNlKTsKPit9KQo+Kwo+KyhkZWZpbmVf cHJlZGljYXRlICJwb3BfcmV0dXJuX3ZhbHVlX2NvbnN0YW50Igo+KyDCoChhbmQgKG1hdGNoX2Nv ZGUgImNvbnN0X2ludCIpCj4rIMKgIMKgIMKgIChtYXRjaF90ZXN0ICJJTlRWQUwgKG9wKSA9PSAw IikpKQo+ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcGFzc2VzLmRlZsKgCj5i L2djYy9jb25maWcvcmlzY3YvcmlzY3YtcGFzc2VzLmRlZgo+aW5kZXggNDA4NDEyMmNmMGEuLjI1 NjI1YjlhZjNlIDEwMDY0NAo+LS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wYXNzZXMuZGVm Cj4rKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXBhc3Nlcy5kZWYKPkBAIC0xOSwzICsxOSw0 IEBACj7CoAo+wqBJTlNFUlRfUEFTU19BRlRFUiAocGFzc19ydGxfc3RvcmVfbW90aW9uLCAxLCBw YXNzX3Nob3J0ZW5fbWVtcmVmcyk7Cj7CoElOU0VSVF9QQVNTX0JFRk9SRSAocGFzc19mYXN0X3J0 bF9kY2UsIDEsIHBhc3NfdnNldHZsKTsKPitJTlNFUlRfUEFTU19BRlRFUiAocGFzc19jcHJvcF9o YXJkcmVnLCAxLCBwYXNzX3pjbXBfcG9wcmV0KTsKPmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jp c2N2L3Jpc2N2LXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaAo+aW5k ZXggNDYxMTQ0N2RkZGUuLjhmMjQzY2Q1ZjQ0IDEwMDY0NAo+LS0tIGEvZ2NjL2NvbmZpZy9yaXNj di9yaXNjdi1wcm90b3MuaAo+KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaAo+ QEAgLTU0LDYgKzU0LDcgQEAgZXh0ZXJuIGJvb2wgcmlzY3Zfc3BsaXRfNjRiaXRfbW92ZV9wIChy dHgsIHJ0eCk7Cj7CoGV4dGVybiB2b2lkIHJpc2N2X3NwbGl0X2RvdWJsZXdvcmRfbW92ZSAocnR4 LCBydHgpOwo+wqBleHRlcm4gY29uc3QgY2hhciAqcmlzY3Zfb3V0cHV0X21vdmUgKHJ0eCwgcnR4 KTsKPsKgZXh0ZXJuIGNvbnN0IGNoYXIgKnJpc2N2X291dHB1dF9yZXR1cm4gKCk7Cj4rZXh0ZXJu IGJvb2wgcmlzY3Zfb3V0cHV0X3BvcHJldF9wIChydHgpOwo+wqAKPsKgI2lmZGVmIFJUWF9DT0RF Cj7CoGV4dGVybiB2b2lkIHJpc2N2X2V4cGFuZF9pbnRfc2NjIChydHgsIGVudW0gcnR4X2NvZGUs IHJ0eCwgcnR4KTsKPkBAIC03OSw2ICs4MCw4IEBAIGV4dGVybiB2b2lkIHJpc2N2X3JlaW5pdCAo dm9pZCk7Cj7CoGV4dGVybiBwb2x5X3VpbnQ2NCByaXNjdl9yZWdtb2RlX25hdHVyYWxfc2l6ZSAo bWFjaGluZV9tb2RlKTsKPsKgZXh0ZXJuIGJvb2wgcmlzY3Zfdl9leHRfdmVjdG9yX21vZGVfcCAo bWFjaGluZV9tb2RlKTsKPsKgZXh0ZXJuIGJvb2wgcmlzY3Zfc2hhbXRfbWF0Y2hlc19tYXNrX3Ag KGludCwgSE9TVF9XSURFX0lOVCk7Cj4rZXh0ZXJuIGJvb2wgcmlzY3ZfdmFsaWRfc3RhY2tfcHVz aF9wb3BfcCAocnR4LCBib29sKTsKPitleHRlcm4gYm9vbCByaXNjdl9jaGVja19yZWdubyhydHgs IHVuc2lnbmVkKTsKPsKgCj7CoC8qIFJvdXRpbmVzIGltcGxlbWVudGVkIGluIHJpc2N2LWMuY2Mu IMKgKi8KPsKgdm9pZCByaXNjdl9jcHVfY3BwX2J1aWx0aW5zIChjcHBfcmVhZGVyICopOwo+QEAg LTk5LDYgKzEwMiw3IEBAIGV4dGVybiBib29sIHJpc2N2X2hhcmRfcmVnbm9fcmVuYW1lX29rICh1 bnNpZ25lZCwgdW5zaWduZWQpOwo+wqAKPsKgcnRsX29wdF9wYXNzICogbWFrZV9wYXNzX3Nob3J0 ZW5fbWVtcmVmcyAoZ2NjOjpjb250ZXh0ICpjdHh0KTsKPsKgcnRsX29wdF9wYXNzICogbWFrZV9w YXNzX3ZzZXR2bCAoZ2NjOjpjb250ZXh0ICpjdHh0KTsKPitydGxfb3B0X3Bhc3MgKiBtYWtlX3Bh c3NfemNtcF9wb3ByZXQgKGdjYzo6Y29udGV4dCAqY3R4dCk7Cj7CoAo+wqAvKiBJbmZvcm1hdGlv biBhYm91dCBvbmUgQ1BVIHdlIGtub3cgYWJvdXQuIMKgKi8KPsKgc3RydWN0IHJpc2N2X2NwdV9p bmZvIHsKPmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXpjbXAtcG9wcmV0LmNj wqAKPmIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi16Y21wLXBvcHJldC5jYwo+bmV3IGZpbGUgbW9k ZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAwMDAwLi5kN2I0MGY2YTNlMgo+LS0tIC9kZXYvbnVsbAo+ KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi16Y21wLXBvcHJldC5jYwo+QEAgLTAsMCArMSwy NjAgQEAKPisjaW5jbHVkZSAiY29uZmlnLmgiCj4rI2luY2x1ZGUgInN5c3RlbS5oIgo+KyNpbmNs dWRlICJjb3JldHlwZXMuaCIKPisjaW5jbHVkZSAidG0uaCIKPisjaW5jbHVkZSAicnRsLmgiCj4r I2luY2x1ZGUgImJhY2tlbmQuaCIKPisjaW5jbHVkZSAicmVncy5oIgo+KyNpbmNsdWRlICJ0YXJn ZXQuaCIKPisjaW5jbHVkZSAibWVtbW9kZWwuaCIKPisjaW5jbHVkZSAiZW1pdC1ydGwuaCIKPisj aW5jbHVkZSAiZGYuaCIKPisjaW5jbHVkZSAicHJlZGljdC5oIgo+KyNpbmNsdWRlICJ0cmVlLXBh c3MuaCIKPisjaW5jbHVkZSAidHJlZS5oIgo+KyNpbmNsdWRlICJ0bV9wLmgiCj4rI2luY2x1ZGUg Im9wdGFicy5oIgo+KyNpbmNsdWRlICJyZWNvZy5oIgo+KyNpbmNsdWRlICJjZmdydGwuaCIKPisK PisjZGVmaW5lIElOX1RBUkdFVF9DT0RFIDEKPisKPituYW1lc3BhY2Ugewo+Kwo+Ky8qCj4rIMKg MS4gcHJlcHJvY2Vzc2luZzoKPisgwqAgwqAxLjEuIGlmIHRoZXJlIGlzIG5vIHB1c2ggcnR4LCB0 aGVuIGp1c3QgcmV0dXJuLiBlLmcuCj4rIMKgIMKgKG5vdGUgNSAxIDIyIDIgW2JiIDJdIE5PVEVf SU5TTl9CQVNJQ19CTE9DSykKPisgwqAgwqAoaW5zbi9mIDIyIDUgMjMgMiAoc2V0IChyZWcvZjpT SSAyIHNwKQo+KyDCoCDCoCDCoChwbHVzOlNJIChyZWcvZjpTSSAyIHNwKQo+KyDCoCDCoCDCoCAo Y29uc3RfaW50IC0zMiBbMHhmZmZmZmZmZmZmZmZmZmUwXSkpKQo+KyDCoCDCoChuaWwpKQo+KyDC oCDCoChub3RlIDIzIDIyIDIgMiBOT1RFX0lOU05fUFJPTE9HVUVfRU5EKQo+KyDCoCDCoDEuMi4g aWYgcHVzaCBydHggZXhpc3RzLCB0aGVuIHdlIGNvbXB1dGUgdGhlIG51bWJlciBvZgo+KyDCoCDC oHB1c2hlZCBzLXJlZ2lzdGVycywgbl9zcmVnLgo+Kwo+KyDCoHB1c2ggcnR4IHNob3VsZCBiZSBm aW5kIGJlZm9yZSBOT1RFX0lOU05fUFJPTE9HVUVfRU5EIHRhZwo+Kwo+KyDCoFsyIGFuZCAzIGhh cHBlbmQgc2ltdWx0YW5lb3VzbHldCj4rIMKgMi4gZmluZCB2YWxpZCBtb3ZlIHBhdHRlcm4sIG12 IHNOLCBhTiwgd2hlcmUgTiA8IG5fc3JlZywKPisgwqAgwqBhbmQgYU4gaXMgbm90IHVzZWQgdGhl IG1vdmUgcGF0dGVybiwgYW5kIHNOIGlzIG5vdAo+KyDCoCDCoGRlZmluZWQgYmVmb3JlIHRoZSBt b3ZlIHBhdHRlcm4gKGZyb20gcHJvbG9ndWUgdG8gdGhlCj4rIMKgIMKgcG9zaXRpb24gb2YgbW92 ZSBwYXR0ZXJuKS4KPisgwqAzLiBhbmFseXNpcyB1c2UgYW5kIHJlYWNoIG9mIGV2ZXJ5IGluc3Ry dWN0aW9uIGZyb20gcHJvbG9ndWUKPisgwqAgwqB0byB0aGUgcG9zaXRpb24gb2YgbW92ZSBwYXR0 ZXJuLgo+KyDCoCDCoGlmIGFueSBzTiBpcyB1c2VkLCB0aGVuIHdlIG1hcmsgdGhlIGNvcnJlc3Bv bmRpbmcgYXJndW1lbnQgbGlzdAo+KyDCoCDCoGNhbmRpZGF0ZSBhcyBpbnZhbGlkLgo+KyDCoCDC oGUuZy4KPisgwqAgwqAgwqAgcHVzaCDCoHtyYSxzMC1zM30sIHt9LCAtMzIKPisgwqAgwqAgwqAg c3cgwqAgwqAgwqBzMCw0NChzcCkgIyBzMCBpcyB1c2VkLCB0aGVuIGFyZ3VtZW50IGxpc3QgaXMg aW52YWxpZAo+KyDCoCDCoCDCoCBtdiDCoCDCoCDCoGEwLGE1IMKgIMKgICMgYTAgaXMgZGVmaW5l ZCwgdGhlbiBhcmd1bWVudCBsaXN0IGlzIGludmFsaWQKPisgwqAgwqAgwqAgLi4uCj4rIMKgIMKg IMKgIG12IMKgIMKgIMKgczAsYTAKPisgwqAgwqAgwqAgbXYgwqAgwqAgwqBzMSxhMQo+KyDCoCDC oCDCoCBtdiDCoCDCoCDCoHMyLGEyCj4rCj4rIMKgNC4gaWYgdGhlcmUgaXMgYSB2YWxpZCBhcmd1 bWVudCBsaXN0LCB0aGVuIHJlcGxhY2UgdGhlIHBvcAo+KyDCoCDCoHB1c2ggcGFyYWxsZWwgaW5z biwgYW5kIGRlbGV0ZSBtdiBwYXR0ZXJuLgo+KyDCoCDCoCBpZiBub3QsIHNraXAuCj4rKi8KPisK PitzdGF0aWMgdm9pZAo+K2VtaXRfemNtcF9wb3ByZXQgKHJ0eF9pbnNuICpwb3BfcnR4LAo+KyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBydHhfaW5zbiAqKmNhbmRpZGF0ZXMsCj4rIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGJhc2ljX2Jsb2NrIGJiKQo+K3sKPisgwqBib29sIGdlbl9wb3ByZXR6 X3AgPSBjYW5kaWRhdGVzIFswXTsKPisgwqBib29sIGdlbl9wb3ByZXRfcCA9IGNhbmRpZGF0ZXMg WzJdOwo+Kwo+KyDCoGlmICghKGdlbl9wb3ByZXRfcCB8fCBnZW5fcG9wcmV0el9wKSkKPisgwqAg wqByZXR1cm47Cj4rCj4rIMKgZ2NjX2Fzc2VydCAoKGdlbl9wb3ByZXRfcCAmJiAhZ2VuX3BvcHJl dHpfcCkKPisgwqAgwqAgwqB8fCAoZ2VuX3BvcHJldHpfcCAmJiBnZW5fcG9wcmV0X3ApKTsKPisK PisgwqBydHggcG9wX3BhdCA9IFBBVFRFUk4gKHBvcF9ydHgpOwo+KyDCoHVuc2lnbmVkIHBvcF9p ZHggPSAwLCBwb3ByZXRfaWR4ID0gMDsKPisgwqB1bnNpZ25lZCBuX3BvcF9wYXIgPSBYVkVDTEVO IChwb3BfcGF0LCAwKTsKPisgwqB1bnNpZ25lZCBuX3BvcHJldF9wYXIgPSBuX3BvcF9wYXIKPisg wqAgwqAgwqAgKyAoZ2VuX3BvcHJldHpfcCA/IDIgOiAwKQo+KyDCoCDCoCDCoCArIChnZW5fcG9w cmV0X3AgPyAyIDogMCk7Cj4rCj4rIMKgcnR4IHBvcHJldF9wYXIgPSBnZW5fcnR4X1BBUkFMTEVM IChWT0lEbW9kZSwKPisgwqAgwqAgwqAgwqAgcnR2ZWNfYWxsb2MgKG5fcG9wcmV0X3BhcikpOwo+ Kwo+KyDCoC8qIHJldHVybiB6ZXJvIHBhdHRlcm4gKi8KPisgwqBpZiAoZ2VuX3BvcHJldHpfcCkK PisgwqAgwqB7Cj4rIMKgIMKgIMKgWFZFQ0VYUCAocG9wcmV0X3BhciwgMCwgMCkgPSBQQVRURVJO IChjYW5kaWRhdGVzWzBdKTsKPisgwqAgwqAgwqBYVkVDRVhQIChwb3ByZXRfcGFyLCAwLCAxKSA9 IFBBVFRFUk4gKGNhbmRpZGF0ZXNbMV0pOwo+KyDCoCDCoCDCoHBvcHJldF9pZHggKz0gMjsKPisg wqAgwqAgwqBkZWxldGVfaW5zbiAoY2FuZGlkYXRlc1swXSk7Cj4rIMKgIMKgIMKgZGVsZXRlX2lu c24gKGNhbmRpZGF0ZXNbMV0pOwo+KyDCoCDCoH0KPisKPisgwqAvKiBjb3B5IHBvcCBwYXJ1ZW5j ZS4gwqAqLwo+KyDCoGZvciAoOyBwb3BfaWR4IDwgbl9wb3BfcGFyOwo+KyDCoCDCoCDCoHBvcF9p ZHggKyssIHBvcHJldF9pZHggKyspCj4rIMKgIMKgewo+KyDCoCDCoCDCoFhWRUNFWFAgKHBvcHJl dF9wYXIsIDAsIHBvcHJldF9pZHgpID0KPisgwqAgwqAgwqAgwqAgWFZFQ0VYUCAocG9wX3BhdCwg MCwgcG9wX2lkeCk7Cj4rIMKgIMKgfQo+Kwo+KyDCoC8qIHJldCBwYXR0ZXJuLiDCoCovCj4rIMKg cnR4IHJldF9wYXQgPSBQQVRURVJOIChjYW5kaWRhdGVzWzJdKTsKPisgwqBnY2NfYXNzZXJ0IChH RVRfQ09ERSAocmV0X3BhdCkgPT0gUEFSQUxMRUwpOwo+Kwo+KyDCoGZvciAoaW50IGkgPSAwOyBp IDwgWFZFQ0xFTiAocmV0X3BhdCwgMCk7Cj4rIMKgIMKgIMKgaSsrLCBwb3ByZXRfaWR4KyspCj4r IMKgewo+KyDCoCDCoFhWRUNFWFAgKHBvcHJldF9wYXIsIDAsIHBvcHJldF9pZHgpID0KPisgwqAg wqAgwqAgWFZFQ0VYUCAocmV0X3BhdCwgMCwgaSk7Cj4rIMKgfQo+Kwo+KyDCoHJ0eF9pbnNuICpp bnNuID0gZW1pdF9qdW1wX2luc25fYWZ0ZXIgKAo+KyDCoCDCoCDCoCDCoCBwb3ByZXRfcGFyLAo+ KyDCoCDCoCDCoCDCoCBCQl9FTkQgKGJiKSk7Cj4rIMKgSlVNUF9MQUJFTCAoaW5zbikgPSBzaW1w bGVfcmV0dXJuX3J0eDsKPisKPisgwqBSRUdfTk9URVMgKGluc24pID0gUkVHX05PVEVTIChwb3Bf cnR4KTsKPisgwqBSVFhfRlJBTUVfUkVMQVRFRF9QIChpbnNuKSA9IDE7Cj4rCj4rIMKgaWYgKGR1 bXBfZmlsZSkKPisgwqAgwqB7Cj4rIMKgIMKgIMKgZnByaW50ZihkdW1wX2ZpbGUsICJuZXcgaW5z bjpcbiIpOwo+KyDCoCDCoCDCoHByaW50X3J0bCAoZHVtcF9maWxlLCBpbnNuKTsKPisgwqAgwqB9 Cj4rCj4rIMKgZGVsZXRlX2luc24gKGNhbmRpZGF0ZXMgWzJdKTsKPisgwqBkZWxldGVfaW5zbiAo cG9wX3J0eCk7Cj4rfQo+Kwo+K3N0YXRpYyB2b2lkCj4remNtcF9wb3ByZXQgKHZvaWQpCj4rewo+ KyDCoGJhc2ljX2Jsb2NrIGJiOwo+KyDCoHJ0eF9pbnNuICppbnNuID0gTlVMTCwgKnBvcF9ydHgg PSBOVUxMOwo+KyDCoHJ0eF9pbnNuICpwb3BfY2FuZGlkYXRlc1szXSA9IHtOVUxMLCB9Owo+KyDC oC8qCj4rIMKgIMKgZmluZCBOT1RFX0lOU05fRVBJTE9HVUVfQkVHLCBidXQgcG9wX3J0eCBub3Qg Zm91bmQgPT4gcmV0dXJuCj4rIMKgIMKgZmluZCBOT1RFX0lOU05fRVBJTE9HVUVfQkVHLCBhbmQg cG9wX3J0eCBpcyBmb3VuZCA9PiBsb29raW5nIGZvciBhMAo+KyDCoCovCj4rCj4rIMKgRk9SX0VB Q0hfQkJfUkVWRVJTRV9GTiAoYmIsIGNmdW4pCj4rIMKgewo+KyDCoCDCoEZPUl9CQl9JTlNOU19S RVZFUlNFIChiYiwgaW5zbikKPisgwqAgwqAgwqB7Cj4rIMKgIMKgIMKgIGlmICghcG9wX3J0eAo+ KyDCoCDCoCDCoCDCoCDCoCAmJiBOT1RFX1AgKGluc24pCj4rIMKgIMKgIMKgIMKgIMKgICYmIE5P VEVfS0lORCAoaW5zbikgPT0gTk9URV9JTlNOX0VQSUxPR1VFX0JFRykKPisgwqAgwqAgwqAgwqAg cmV0dXJuOwo+Kwo+KyDCoCDCoCDCoCBpZiAoTk9URV9QIChpbnNuKQo+KyDCoCDCoCDCoCDCoCDC oCAmJiBOT1RFX0tJTkQgKGluc24pID09IE5PVEVfSU5TTl9GVU5DVElPTl9CRUcpCj4rIMKgIMKg IMKgIMKgIHsKPisgwqAgwqAgwqAgwqAgwqAgaWYgKHBvcF9ydHgpCj4rIMKgIMKgIMKgIMKgIMKg IMKgIGVtaXRfemNtcF9wb3ByZXQgKHBvcF9ydHgsIHBvcF9jYW5kaWRhdGVzLCBiYik7Cj4rIMKg IMKgIMKgIMKgIMKgIHJldHVybjsKPisgwqAgwqAgwqAgwqAgfTsKPisKPisgwqAgwqAgwqAgaWYg KCEoTk9OREVCVUdfSU5TTl9QIChpbnNuKQo+KyDCoCDCoCDCoCDCoCDCoCB8fCBDQUxMX1AgKGlu c24pKSkKPisgwqAgwqAgwqAgwqAgY29udGludWU7Cj4rCj4rIMKgIMKgIMKgIHJ0eCBwb3BfcGF0 ID0gUEFUVEVSTiAoaW5zbik7Cj4rCj4rIMKgIMKgIMKgIGlmIChHRVRfQ09ERSAocG9wX3BhdCkg PT0gUEFSQUxMRUwKPisgwqAgwqAgwqAgwqAgwqAgJiYgcmlzY3ZfdmFsaWRfc3RhY2tfcHVzaF9w b3BfcCAocG9wX3BhdCwgZmFsc2UpKQo+KyDCoCDCoCDCoCDCoCB7Cj4rIMKgIMKgIMKgIMKgIMKg IHBvcF9ydHggPSBpbnNuOwo+KyDCoCDCoCDCoCDCoCDCoCBjb250aW51ZTsKPisgwqAgwqAgwqAg wqAgfQo+Kwo+KyDCoCDCoCDCoCAvKiBwYXR0ZXJuIGZvciBgcmV0YC4gwqAqLwo+KyDCoCDCoCDC oCBpZiAoSlVNUF9QIChpbnNuKQo+KyDCoCDCoCDCoCDCoCDCoCAmJiBHRVRfQ09ERSAocG9wX3Bh dCkgPT0gUEFSQUxMRUwKPisgwqAgwqAgwqAgwqAgwqAgJiYgWFZFQ0xFTiAocG9wX3BhdCwgMCkg PT0gMgo+KyDCoCDCoCDCoCDCoCDCoCAmJiBHRVRfQ09ERSAoWFZFQ0VYUCAocG9wX3BhdCwgMCwg MCkpID09IFNJTVBMRV9SRVRVUk4KPisgwqAgwqAgwqAgwqAgwqAgJiYgR0VUX0NPREUgKFhWRUNF WFAgKHBvcF9wYXQsIDAsIDEpKSA9PSBVU0UpCj4rIMKgIMKgIMKgIMKgIHsKPisgwqAgwqAgwqAg wqAgwqAgcnR4IHVzZV9yZWcgPSBYRVhQIChYVkVDRVhQIChwb3BfcGF0LCAwLCAxKSwgMCk7Cj4r IMKgIMKgIMKgIMKgIMKgIGlmIChSRUdfUCAodXNlX3JlZykKPisgwqAgwqAgwqAgwqAgwqAgwqAg JiYgUkVHTk8gKHVzZV9yZWcpID09IFJFVFVSTl9BRERSX1JFR05VTSkKPisgwqAgwqAgwqAgwqAg wqAgwqAgewo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwb3BfY2FuZGlkYXRlcyBbMl0gPSBpbnNu Owo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb250aW51ZTsKPisgwqAgwqAgwqAgwqAgwqAgwqAg fQo+KyDCoCDCoCDCoCDCoCB9Cj4rCj4rIMKgIMKgIMKgIGlmICghcG9wX3J0eCkKPisgwqAgwqAg wqAgwqAgY29udGludWU7Cj4rCj4rIMKgIMKgIMKgIC8qIHBhdHRlcm4gZm9yIHJldHVybiB2YWx1 ZS4gwqAqLwo+KyDCoCDCoCDCoCBpZiAoIXBvcF9jYW5kaWRhdGVzIFswXQo+KyDCoCDCoCDCoCDC oCDCoCAmJiBHRVRfQ09ERSAocG9wX3BhdCkgPT0gVVNFKQo+KyDCoCDCoCDCoCDCoCB7Cj4rIMKg IMKgIMKgIMKgIMKgIHJ0eF9pbnNuICpzZXRfaW5zbiA9IFBSRVZfSU5TTiAoaW5zbik7Cj4rIMKg IMKgIMKgIMKgIMKgIHJ0eCBwYXRfc2V0ID0gUEFUVEVSTiAoc2V0X2luc24pOwo+Kwo+KyDCoCDC oCDCoCDCoCDCoCBpZiAocmlzY3ZfY2hlY2tfcmVnbm8gKFhFWFAgKHBvcF9wYXQsIDApLAo+KyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBSRVRVUk5fVkFMVUVfUkVHTlVNKQo+KyDCoCDCoCDC oCDCoCDCoCDCoCDCoCAmJiBpbnNuCj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYmIHBhdF9zZXQg IT0gTlVMTAo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmJiBHRVRfQ09ERSAocGF0X3NldCkgPT0g U0VUCj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYmIHJpc2N2X2NoZWNrX3JlZ25vIChTRVRfREVT VCAocGF0X3NldCksCj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgUkVUVVJOX1ZB TFVFX1JFR05VTSkKPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgJiYgQ09OU1RfSU5UX1AgKFNFVF9T UkMgKHBhdF9zZXQpKQo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmJiBJTlRWQUwgKFNFVF9TUkMg KHBhdF9zZXQpKSA9PSAwKQo+KyDCoCDCoCDCoCDCoCDCoCDCoCB7Cj4rIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHBvcF9jYW5kaWRhdGVzIFswXSA9IHNldF9pbnNuOwo+KyDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwb3BfY2FuZGlkYXRlcyBbMV0gPSBpbnNuOwo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBi cmVhazsKPisgwqAgwqAgwqAgwqAgwqAgwqAgfQo+KyDCoCDCoCDCoCDCoCB9Cj4rIMKgIMKgIMKg fQo+Kwo+KyDCoCDCoGlmIChwb3BfcnR4KQo+KyDCoCDCoCDCoHsKPisgwqAgwqAgwqAgZW1pdF96 Y21wX3BvcHJldCAocG9wX3J0eCwgcG9wX2NhbmRpZGF0ZXMsIGJiKTsKPisgwqAgwqAgwqAgcmV0 dXJuOwo+KyDCoCDCoCDCoH0KPisgwqB9Cj4rfQo+Kwo+K2NvbnN0IHBhc3NfZGF0YSBwYXNzX2Rh dGFfemNtcF9wb3ByZXQgPQo+K3sKPisgwqBSVExfUEFTUywgLyogdHlwZSAqLwo+KyDCoCJ6Y21w LXBvcHJldCIsIC8qIG5hbWUgKi8KPisgwqBPUFRHUk9VUF9OT05FLCAvKiBvcHRpbmZvX2ZsYWdz ICovCj4rIMKgVFZfTk9ORSwgLyogdHZfaWQgKi8KPisgwqAwLCAvKiBwcm9wZXJ0aWVzX3JlcXVp cmVkICovCj4rIMKgMCwgLyogcHJvcGVydGllc19wcm92aWRlZCAqLwo+KyDCoDAsIC8qIHByb3Bl cnRpZXNfZGVzdHJveWVkICovCj4rIMKgMCwgLyogdG9kb19mbGFnc19zdGFydCAqLwo+KyDCoDAs IC8qIHRvZG9fZmxhZ3NfZmluaXNoICovCj4rfTsKPisKPitjbGFzcyBwYXNzX3pjbXBfcG9wcmV0 IDogcHVibGljIHJ0bF9vcHRfcGFzcwo+K3sKPitwdWJsaWM6Cj4rIMKgcGFzc196Y21wX3BvcHJl dCAoZ2NjOjpjb250ZXh0ICpjdHh0KQo+KyDCoCDCoDogcnRsX29wdF9wYXNzIChwYXNzX2RhdGFf emNtcF9wb3ByZXQsIGN0eHQpCj4rIMKge30KPisKPisgwqAvKiBvcHRfcGFzcyBtZXRob2RzOiAq Lwo+KyDCoHZpcnR1YWwgYm9vbCBnYXRlIChmdW5jdGlvbiAqKQo+KyDCoCDCoHsgcmV0dXJuIFRB UkdFVF9aQ01QOyB9Cj4rIMKgdmlydHVhbCB1bnNpZ25lZCBpbnQgZXhlY3V0ZSAoZnVuY3Rpb24g KikKPisgwqAgwqB7Cj4rIMKgIMKgIMKgemNtcF9wb3ByZXQgKCk7Cj4rIMKgIMKgIMKgcmV0dXJu IDA7Cj4rIMKgIMKgfQo+K307IC8vIGNsYXNzIHBhc3NfemNtcF9wb3ByZXQKPisKPit9IC8vIGFu b24gbmFtZXNwYWNlCj4rCj4rcnRsX29wdF9wYXNzICoKPittYWtlX3Bhc3NfemNtcF9wb3ByZXQg KGdjYzo6Y29udGV4dCAqY3R4dCkKPit7Cj4rIMKgcmV0dXJuIG5ldyBwYXNzX3pjbXBfcG9wcmV0 IChjdHh0KTsKPit9Cj5kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYyBiL2dj Yy9jb25maWcvcmlzY3YvcmlzY3YuY2MKPmluZGV4IDVmOGNiZmMxNWVkLi4xN2RmMmYzZjhjZiAx MDA2NDQKPi0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YuY2MKPisrKyBiL2djYy9jb25maWcv cmlzY3YvcmlzY3YuY2MKPkBAIC0xMTQsNiArMTE0LDkgQEAgc3RydWN0IEdUWSgoKSkgwqByaXNj dl9mcmFtZV9pbmZvIHsKPsKgIMKgLyogTGlrZXdpc2UgRlBSIFguIMKgKi8KPsKgIMKgdW5zaWdu ZWQgaW50IGZtYXNrOwo+wqAKPisgwqAvKiBIb3cgbXVjaCB0aGUgcHVzaC9wb3Agcm91dGluZXMg YWRqdXN0IHNwIChvciAwIGlmIHVudXNlZCkuIMKgKi8KPisgwqB1bnNpZ25lZCBwdXNoX3BvcF9z cF9hZGp1c3Q7Cj4rCj7CoCDCoC8qIEhvdyBtdWNoIHRoZSBHUFIgc2F2ZS9yZXN0b3JlIHJvdXRp bmVzIGFkanVzdCBzcCAob3IgMCBpZiB1bnVzZWQpLiDCoCovCj7CoCDCoHVuc2lnbmVkIHNhdmVf bGliY2FsbF9hZGp1c3RtZW50Owo+wqAKPkBAIC00MDEsNiArNDA0LDIwIEBAIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBncHJfc2F2ZV9yZWdfb3JkZXJbXSA9IHsKPsKgIMKgUzEwX1JFR05VTSwgUzEx X1JFR05VTQo+wqB9Owo+wqAKPisvKiBPcmRlciBmb3IgdGhlIENMT0JCRVJzL1VTRXMgb2YgcHVz aC9wb3AuIMKgKi8KPitzdGF0aWMgY29uc3QgdW5zaWduZWQgcHVzaF9zYXZlX3JlZ19vcmRlcltd ID0gewo+KyDCoElOVkFMSURfUkVHTlVNLCBSRVRVUk5fQUREUl9SRUdOVU0sIFMwX1JFR05VTSwK PisgwqBTMV9SRUdOVU0sIFMyX1JFR05VTSwgUzNfUkVHTlVNLCBTNF9SRUdOVU0sCj4rIMKgUzVf UkVHTlVNLCBTNl9SRUdOVU0sIFM3X1JFR05VTSwgUzhfUkVHTlVNLAo+KyDCoFM5X1JFR05VTSwg UzEwX1JFR05VTSwgUzExX1JFR05VTQo+K307Cj4rCj4rLyogT3JkZXIgZm9yIHRoZSBDTE9CQkVS cy9VU0VzIG9mIHB1c2gvcG9wIGluIHJ2ZS4gwqAqLwo+K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBw dXNoX3NhdmVfcmVnX29yZGVyX3pjbXBlW10gPSB7Cj4rIMKgSU5WQUxJRF9SRUdOVU0sIFJFVFVS Tl9BRERSX1JFR05VTSwgUzBfUkVHTlVNLAo+KyDCoFMxX1JFR05VTQo+K307Cj4rCj7CoC8qIEEg dGFibGUgZGVzY3JpYmluZyBhbGwgdGhlIHByb2Nlc3NvcnMgR0NDIGtub3dzIGFib3V0LiDCoCov Cj7CoHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmlzY3ZfdHVuZV9pbmZvIHJpc2N2X3R1bmVfaW5mb190 YWJsZVtdID0gewo+wqAjZGVmaW5lIFJJU0NWX1RVTkUoVFVORV9OQU1FLCBQSVBFTElORV9NT0RF TCwgVFVORV9JTkZPKSDCoCDCoCDCoCBcCj5AQCAtMjk4OSw2ICszMDA2LDE3IEBAIHJpc2N2X291 dHB1dF9yZXR1cm4gKCkKPsKgIMKgcmV0dXJuICJyZXQiOwo+wqB9Cj7CoAo+K2Jvb2wKPityaXNj dl9vdXRwdXRfcG9wcmV0X3AgKHJ0eCBvcCkKPit7Cj4rIMKgdW5zaWduZWQgbl9ydHggPSBYVkVD TEVOIChvcCwgMCk7Cj4rIMKgcnR4IHVzZSA9IFhWRUNFWFAgKG9wLCAwLCBuX3J0eCAtIDEpOwo+ KyDCoHJ0eCByZXQgPSBYVkVDRVhQIChvcCwgMCwgbl9ydHggLSAyKTsKPisKPisgwqAgwqByZXR1 cm4gR0VUX0NPREUgKHJldCkgPT0gU0lNUExFX1JFVFVSTgo+KyDCoCDCoCDCoCAmJiDCoEdFVF9D T0RFICh1c2UpID09IFVTRTsKPit9Cj4rCj7CoAo+Cj7CoC8qIFJldHVybiB0cnVlIGlmIENNUDEg aXMgYSBzdWl0YWJsZSBzZWNvbmQgb3BlcmFuZCBmb3IgaW50ZWdlciBvcmRlcmluZwo+wqAgwqAg dGVzdCBDT0RFLiDCoFNlZSBhbHNvIHRoZSAqc0NDIHBhdHRlcm5zIGluIHJpc2N2Lm1kLiDCoCov Cj5AQCAtNDMwNiw2ICs0MzM0LDc0IEBAIHJpc2N2X21lbW1vZGVsX25lZWRzX2Ftb19hY3F1aXJl IChlbnVtIG1lbW1vZGVsIG1vZGVsKQo+wqAgwqAgwqB9Cj7CoH0KPsKgCj4rLyogUHJpbnQgU3Ag YWRqdXN0bWVudCBmaWVsZCBvZiBwb3AgaW5zdHJ1Y3Rpb24uIMKgKi8KPisKPitzdGF0aWMgdm9p ZAo+K3Jpc2N2X3ByaW50X3BvcF9zaXplIChGSUxFICpmaWxlLCBydHggb3ApCj4rewo+KyDCoHVu c2lnbmVkIHNwX2FkanVzdF9pZHggPSBYVkVDTEVOIChvcCwgMCkgLSAxOwo+KyDCoHJ0eCBzcF9h ZGp1c3RfcnR4ID0gWFZFQ0VYUCAob3AsIDAsIHNwX2FkanVzdF9pZHgpOwo+Kwo+KyDCoC8qIFNr aXAgcmV0IG9yIHBhdHRlcm4uIMKgKi8KPisgwqB3aGlsZSAoR0VUX0NPREUgKHNwX2FkanVzdF9y dHgpICE9IFNFVCkKPisgwqAgwqBzcF9hZGp1c3RfcnR4ID0gWFZFQ0VYUCAob3AsIDAsIC0tc3Bf YWRqdXN0X2lkeCk7Cj4rCj4rIMKgcnR4IGVsdF9wbHVzID0gU0VUX1NSQyAoc3BfYWRqdXN0X3J0 eCk7Cj4rIMKgZnByaW50ZiAoZmlsZSwgIiVsZCIsIElOVFZBTCAoWEVYUCAoZWx0X3BsdXMsIDEp KSk7Cj4rfQo+Kwo+Ky8qIFByaW50IHB1c2gvcG9wIHJlZ2lzdGVyIGxpc3QuICovCj4rCj4rc3Rh dGljIHZvaWQKPityaXNjdl9wcmludF9yZWdsaXN0IChGSUxFICpmaWxlLCBydHggb3ApCj4rewo+ KyDCoC8qIHdlIG9ubHkgZGVhbCB3aXRoIHRocmVlIGZvcm1hdHM6Cj4rIMKgIMKgIMKgcHVzaCB7 cmF9Cj4rIMKgIMKgIMKgcHVzaCB7cmEsIHMwfQo+KyDCoCDCoCDCoHB1c2gge3JhLCBzMC1zTn0K PisgwqAgwqBvcgo+KyDCoCDCoCDCoHBvcCB7cmF9Cj4rIMKgIMKgIMKgcG9wIHtyYSwgczB9Cj4r IMKgIMKgIMKgcG9wIHtyYSwgczAtc059Cj4rIMKgIMKgcmVnaXN0ZXJzIGV4Y2VwdCByYSBoYXMg dG8gYmUgY29udGludW91cyBzLXJlZ2lzdGVyLAo+KyDCoCDCoGFuZCBpdCBpcyBzdXBwb3NlZCB0 byBiZSBjaGVja2VkIGJlZm9yZS4KPisgwqAgwqByZWdpc3RlciBsaXN0IHBhdHRlcm5zIGluIHB1 c2g6Cj4rIMKgIMKgKHNldC9mIChtZW0vYzpTSQo+KyDCoCDCoCDCoChwbHVzOlNJIChyZWcvZjpT SSAyIHNwKQo+KyDCoCDCoCDCoCAoY29uc3RfaW50IDI4IFsweDFjXSkpIFsyIMKgUzQgQTMyXSkK PisgwqAgwqAgwqAocmVnOlNJIDEgcmEpKQo+KyDCoCDCoHJlZ2lzdGVyIGxpc3QgcGF0dGVybnMg aW4gcG9wOgo+KyDCoCDCoChzZXQvZiAocmVnOkRJIDEgcmEpCj4rIMKgIMKgIMKgKG1lbS9jOkRJ IChwbHVzOkRJIChyZWcvZjpESSAyIHNwKQo+KyDCoCDCoCDCoCAoY29uc3RfaW50IDggWzB4OF0p KSBbMiDCoFM4IEE2NF0pKQo+KyDCoCovCj4rIMKgaW50IHRvdGFsX2NvdW50ID0gWFZFQ0xFTiAo b3AsIDApOwo+KyDCoGludCBuX3JlZ3MgPSAwOwo+KyDCoGJvb2wgcHVzaF9wID0gR0VUX0NPREUg KFhWRUNFWFAgKG9wLCAwLCAwKSkgPT0gU0VUCj4rIMKgIMKgIMKgJiYgR0VUX0NPREUgKFNFVF9T UkMgKFhWRUNFWFAgKG9wLCAwLCAwKSkpID09IFBMVVM7Cj4rCj4rIMKgZm9yIChpbnQgaWR4ID0g MDsgaWR4IDwgdG90YWxfY291bnQ7ICsraWR4KQo+KyDCoCDCoHsKPisgwqAgwqAgwqBydHggZWxl ID0gWFZFQ0VYUCAob3AsIDAsIGlkeCk7Cj4rIMKgIMKgIMKgaWYgKEdFVF9DT0RFIChlbGUpICE9 IFNFVCkKPisgwqAgwqAgwqAgY29udGludWU7Cj4rCj4rIMKgIMKgIMKgYm9vbCByZXN0b3JlX3Nh dmVfcCA9IHB1c2hfcCA/Cj4rIMKgIMKgIMKgIMKgIE1FTV9QIChTRVRfREVTVCAoZWxlKSkgOgo+ KyDCoCDCoCDCoCDCoCBNRU1fUCAoU0VUX1NSQyAoZWxlKSk7Cj4rCj4rIMKgIMKgIMKgaWYgKHJl c3RvcmVfc2F2ZV9wKQo+KyDCoCDCoCDCoCBuX3JlZ3MgKys7Cj4rIMKgIMKgfQo+Kwo+KyDCoGlm IChuX3JlZ3MgPiAyKQo+KyDCoCDCoGZwcmludGYgKGZpbGUsICJyYSxzMC1zJXUiLCBuX3JlZ3Mg LSAyKTsKPisgwqBlbHNlIGlmIChuX3JlZ3MgPiAxKQo+KyDCoCDCoGZwcmludGYgKGZpbGUsICJy YSxzMCIpOwo+KyDCoGVsc2UKPisgwqAgwqBmcHV0cygicmEiLCBmaWxlKTsKPit9Cj4rCj7CoC8q IFJldHVybiB0cnVlIGlmIGEgRkVOQ0Ugc2hvdWxkIGJlIGVtaXR0ZWQgdG8gYmVmb3JlIGEgbWVt b3J5IGFjY2VzcyB0bwo+wqAgwqAgaW1wbGVtZW50IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgbWVt b3J5IG1vZGVsIE1PREVMLiDCoCovCj7CoAo+QEAgLTQ1MTcsNiArNDYxMywxNCBAQCByaXNjdl9w cmludF9vcGVyYW5kIChGSUxFICpmaWxlLCBydHggb3AsIGludCBsZXR0ZXIpCj7CoCDCoCDCoCDC oGZwdXRzIChHRVRfUlRYX05BTUUgKGNvZGUpLCBmaWxlKTsKPsKgIMKgIMKgIMKgYnJlYWs7Cj7C oAo+KyDCoCDCoGNhc2UgJ0wnOgo+KyDCoCDCoCDCoHJpc2N2X3ByaW50X3JlZ2xpc3QgKGZpbGUs IG9wKTsKPisgwqAgwqAgwqBicmVhazsKPisKPisgwqAgwqBjYXNlICdzJzoKPisgwqAgwqAgwqBy aXNjdl9wcmludF9wb3Bfc2l6ZSAoZmlsZSwgb3ApOwo+KyDCoCDCoCDCoGJyZWFrOwo+Kwo+wqAg wqAgwqBjYXNlICdTJzoKPsKgIMKgIMKgIMKgewo+wqAgwqAgwqAgwqAgcnR4IG5ld29wID0gR0VO X0lOVCAoY3R6X2h3aSAoSU5UVkFMIChvcCkpKTsKPkBAIC00Nzc3LDYgKzQ4ODEsNjYgQEAgcmlz Y3ZfdXNlX3NhdmVfbGliY2FsbCAoY29uc3Qgc3RydWN0IHJpc2N2X2ZyYW1lX2luZm/CoAo+KmZy YW1lKQo+wqAgwqByZXR1cm4gZnJhbWUtPnNhdmVfbGliY2FsbF9hZGp1c3RtZW50ICE9IDA7Cj7C oH0KPsKgCj4rLyogRGV0ZXJtaW5lIGhvdyBtYW55IGluc3RydWN0aW9ucyByZWxhdGVkIHRvIHB1 c2gvcG9wIGluc3RydWN0aW9ucy4gwqAqLwo+Kwo+K3N0YXRpYyB1bnNpZ25lZAo+K3Jpc2N2X3Nh dmVfcHVzaF9wb3BfY291bnQgKHVuc2lnbmVkIG1hc2spCj4rewo+KyDCoGlmICghQklUU0VUX1Ag KG1hc2ssIEdQX1JFR19GSVJTVCArIFJFVFVSTl9BRERSX1JFR05VTSkpCj4rIMKgIMKgcmV0dXJu IDA7Cj4rIMKgZm9yICh1bnNpZ25lZCBuID0gR1BfUkVHX0xBU1Q7IG4gPiBHUF9SRUdfRklSU1Q7 IG4tLSkKPisgwqAgwqBpZiAoQklUU0VUX1AgKG1hc2ssIG4pCj4rIMKgIMKgIMKgICYmICFjYWxs X3VzZWRfcmVncyBbbl0pCj4rIMKgIMKgIMKgLyogYWRkIHJhIHNhdmluZyBhbmQgc3AgYWRqdXN0 LiAqLwo+KyDCoCDCoCDCoHJldHVybiBDQUxMRUVfU0FWRURfUkVHX05VTUJFUiAobikgKyAxICsg MjsKPisgwqBhYm9ydCAoKTsKPit9Cj4rCj4rLyogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIHNwIGFk anVzdG1lbnQgb2YgcHVzaC9wb3AgaW5zdHJ1Y3Rpb24uICovCj4rCj4rc3RhdGljIHVuc2lnbmVk Cj4rcmlzY3ZfcHVzaF9wb3BfYmFzZV9zcF9hZGp1c3QgKHVuc2lnbmVkIG1hc2spCj4rewo+KyDC oHVuc2lnbmVkIG5fcmVncyA9IHJpc2N2X3NhdmVfcHVzaF9wb3BfY291bnQgKG1hc2spIC0gMTsK PisgwqByZXR1cm4gKG5fcmVncyAqIFVOSVRTX1BFUl9XT1JEICsgMTUpICYgKH4weGYpOwo+K30K PisKPisvKiBEZXRlcm1pbmUgd2hldGhlciB0byBjYWxsIHB1c2gvcG9wIHJvdXRpbmVzLiDCoCov Cj4rCj4rc3RhdGljIGJvb2wKPityaXNjdl91c2VfcHVzaF9wb3AgKGNvbnN0IHN0cnVjdCByaXNj dl9mcmFtZV9pbmZvICpmcmFtZSwgY29uc3QgSE9TVF9XSURFX0lOVMKgCj5mcmFtZV9zaXplKQo+ K3sKPisgwqBpZiAoIVRBUkdFVF9aQ01QKQo+KyDCoCDCoHJldHVybiBmYWxzZTsKPisKPisgwqAv KiBXZSBkbyBub3QgaGFuZGxlciB2YXJpYWJsZSBhcmd1bWVudCBjYXNlcyBjdXJyZW50bHkuIMKg Ki8KPisgwqBpZiAoY2Z1bi0+bWFjaGluZS0+dmFyYXJnc19zaXplICE9IDApCj4rIMKgIMKgcmV0 dXJuIGZhbHNlOwo+Kwo+KyDCoEhPU1RfV0lERV9JTlQgYmFzZV9zaXplID0gcmlzY3ZfcHVzaF9w b3BfYmFzZV9zcF9hZGp1c3QgKGZyYW1lLT5tYXNrKTsKPisgwqAvKgo+KyDCoCDCoCBQciA5NjAy MTUtMS5jIGluIHJ2NjQgb3VwdXRzCj4rCj4rIMKgIMKgIMKgIGFkZGkgwqAgwqBzcCxzcCwtMzIK PisgwqAgwqAgwqAgc2QgwqAgwqAgwqByYSwyNChzcCkKPisgwqAgwqAgwqAgc2QgwqAgwqAgwqBz MCwxNihzcCkKPisgwqAgwqAgwqAgc2QgwqAgwqAgwqBzMiw4KHNwKQo+KyDCoCDCoCDCoCBzZCDC oCDCoCDCoHMzLDAoc3ApCj4rIMKgIMKgIGl0IGlzIGEgcmFyZSBjYXNlIHRoYXQgY2FsbGVlIHNh dmVkIHJlZ2lzdGVycyBhcmUgbm90IG5vbi1jb250aW5vdXMsCj4rIMKgIMKgIHdoaWNoIGJyZWFr cyB0aGUgb2xkIHB1c2ggaW1wbGVtZW50YXRpb24sIGFuZCB3ZSBqdXN0IHJlamVjdCB0aGlzIGNh c2UKPisgwqAgwqAgbGlrZSBzYXZlLXJlc3RvcmUgZG9lcyBub3cuCj4rIMKgKi8KPisgwqBpZiAo YmFzZV9zaXplID4gZnJhbWVfc2l6ZSkKPisgwqAgwqByZXR1cm4gZmFsc2U7Cj4rCj4rIMKgLyog e3JhLHMwLXMxMH0gaXMgaW52YWxpZC4gKi8KPisgwqBpZiAoZnJhbWUtPm1hc2sgJiAoMSA8PCAo UzEwX1JFR05VTSAtIEdQX1JFR19GSVJTVCkpCj4rIMKgIMKgIMKgJiYgIShmcmFtZS0+bWFzayAm ICgxIDw8IChTMTFfUkVHTlVNIC0gR1BfUkVHX0ZJUlNUKSkpKQo+KyDCoCDCoHJldHVybiBmYWxz ZTsKPisKPisgwqByZXR1cm4gZnJhbWUtPm1hc2sgJiAoMSA8PCAoUkVUVVJOX0FERFJfUkVHTlVN IC0gR1BfUkVHX0ZJUlNUKSk7Cj4rfQo+Kwo+wqAvKiBEZXRlcm1pbmUgd2hpY2ggR1BSIHNhdmUv cmVzdG9yZSByb3V0aW5lIHRvIGNhbGwuIMKgKi8KPsKgCj7CoHN0YXRpYyB1bnNpZ25lZAo+QEAg LTQ5MzQsNiArNTA5OCw4IEBAIHJpc2N2X2NvbXB1dGVfZnJhbWVfaW5mbyAodm9pZCkKPsKgIMKg LyogT25seSB1c2Ugc2F2ZS9yZXN0b3JlIHJvdXRpbmVzIHdoZW4gdGhlIEdQUnMgYXJlIGF0b3Ag dGhlIGZyYW1lLiDCoCovCj7CoCDCoGlmIChrbm93bl9uZSAoZnJhbWUtPmhhcmRfZnJhbWVfcG9p bnRlcl9vZmZzZXQsIGZyYW1lLT50b3RhbF9zaXplKSkKPsKgIMKgIMKgZnJhbWUtPnNhdmVfbGli Y2FsbF9hZGp1c3RtZW50ID0gMDsKPisKPisgwqBmcmFtZS0+cHVzaF9wb3Bfc3BfYWRqdXN0ID0g MDsKPsKgfQo+wqAKPsKgLyogTWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IHRyeWluZyB0byBlbGlt aW5hdGUgdG8gdGhlIHdyb25nIGhhcmQgZnJhbWUKPkBAIC01MTcxLDYgKzUzMzcsODYgQEAgcmlz Y3ZfZm9yX2VhY2hfc2F2ZWRfcmVnIChwb2x5X2ludDY0IHNwX29mZnNldCzCoAo+cmlzY3Zfc2F2 ZV9yZXN0b3JlX2ZuIGZuLAo+wqAgwqAgwqAgwqB9Cj7CoH0KPsKgCj4rc3RhdGljIHZvaWQKPity aXNjdl9lbWl0X3BvcF9pbnNuIChzdHJ1Y3QgcmlzY3ZfZnJhbWVfaW5mbyAqZnJhbWUsIEhPU1Rf V0lERV9JTlQgb2Zmc2V0LMKgCj5IT1NUX1dJREVfSU5UIHNpemUpCj4rewo+KyDCoHVuc2lnbmVk IGludCB2ZWNsZW4gPSByaXNjdl9zYXZlX3B1c2hfcG9wX2NvdW50IChmcmFtZS0+bWFzayk7Cj4r IMKgdW5zaWduZWQgaW50IG5fcmVnID0gdmVjbGVuIC0gMTsKPisgwqBydHZlYyB2ZWMgPSBydHZl Y19hbGxvYyAodmVjbGVuKTsKPisgwqBIT1NUX1dJREVfSU5UIHNwX2FkanVzdDsKPisgwqBydHgg ZHdhcmYgPSBOVUxMX1JUWDsKPisKPisgwqBjb25zdCB1bnNpZ25lZCAqcmVnX29yZGVyID0gKFRB UkdFVF9aQ01QICYmIFRBUkdFVF9SVkUpCj4rIMKgIMKgIMKgID8gcHVzaF9zYXZlX3JlZ19vcmRl cl96Y21wZQo+KyDCoCDCoCDCoCA6IHB1c2hfc2F2ZV9yZWdfb3JkZXI7Cj4rCj4rIMKgZ2NjX2Fz c2VydCAobl9yZWcgPj0gMQo+KyDCoCDCoCDCoCAmJiBUQVJHRVRfWkNNUAo+KyDCoCDCoCDCoCAm JiAoKFRBUkdFVF9SVkUgJiYgKG5fcmVnIDw9IEFSUkFZX1NJWkUgKHB1c2hfc2F2ZV9yZWdfb3Jk ZXJfemNtcGUpKSkKPisgwqAgwqAgwqAgwqAgwqAgfHwgKFRBUkdFVF9aQ01QICYmIChuX3JlZyA8 PSBBUlJBWV9TSVpFIChwdXNoX3NhdmVfcmVnX29yZGVyKSkpKSk7Cj4rCj4rIMKgLyogc3AgYWRq dXN0IHBhdHRlcm4gKi8KPisgwqBpbnQgbWF4X2FsbG93X3NwX2FkanVzdCA9IHJpc2N2X3B1c2hf cG9wX2Jhc2Vfc3BfYWRqdXN0IChmcmFtZS0+bWFzaykgKyA0ODsKPisgwqBpbnQgYWxpZ25lZF9z aXplID0gc2l6ZTsKPisKPisgwqAvKiBpZiBzcCBhZGp1c3RtZW50IGlzIHRvbyBsYXJnZSwgd2Ug c2hvdWxkIHNwbGl0IGl0IGZpcnN0LiAqLwo+KyDCoGlmIChhbGlnbmVkX3NpemUgPiBtYXhfYWxs b3dfc3BfYWRqdXN0KQo+KyDCoCDCoHsKPisgwqAgwqAgwqBydHggZHdhcmZfcHJlX3NwX2FkanVz dCA9IE5VTExfUlRYOwo+KyDCoCDCoCDCoHJ0eCBwcmVfYWRqdXN0X3J0eCA9IGdlbl9hZGQzX2lu c24gKHN0YWNrX3BvaW50ZXJfcnR4LAo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBzdGFja19wb2ludGVyX3J0eCwKPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg R0VOX0lOVCAoYWxpZ25lZF9zaXplIC0gbWF4X2FsbG93X3NwX2FkanVzdCkpOwo+KyDCoCDCoCDC oHJ0eCBpbnNuID0gZW1pdF9pbnNuIChwcmVfYWRqdXN0X3J0eCk7Cj4rCj4rIMKgIMKgIMKgcnR4 IGNmYV9wcmVfYWRqdXN0X3J0eCA9IGdlbl9ydHhfUExVUyAoUG1vZGUsIHN0YWNrX3BvaW50ZXJf cnR4LAo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBHRU5fSU5UIChhbGlnbmVk X3NpemUgLSBtYXhfYWxsb3dfc3BfYWRqdXN0KSk7Cj4rIMKgIMKgIMKgZHdhcmZfcHJlX3NwX2Fk anVzdCA9IGFsbG9jX3JlZ19ub3RlIChSRUdfQ0ZBX0RFRl9DRkEsCj4rIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGNmYV9wcmVfYWRqdXN0X3J0eCwKPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZHdhcmZf cHJlX3NwX2FkanVzdCk7Cj4rCj4rIMKgIMKgIMKgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikg PSAxOwo+KyDCoCDCoCDCoFJFR19OT1RFUyAoaW5zbikgPSBkd2FyZl9wcmVfc3BfYWRqdXN0Owo+ Kwo+KyDCoCDCoCDCoHNwX2FkanVzdCA9IG1heF9hbGxvd19zcF9hZGp1c3Q7Cj4rIMKgIMKgfQo+ KyDCoGVsc2UKPisgwqAgwqBzcF9hZGp1c3QgPSAoYWxpZ25lZF9zaXplICsgMTUpICYgKH4weGYp Owo+Kwo+KyDCoC8qIHJlZ2lzdGVyIHNhdmUgc2VxdWVuY2UuICovCj4rIMKgZm9yICh1bnNpZ25l ZCBpID0gMTsgaSA8IHZlY2xlbjsgKytpKQo+KyDCoCDCoHsKPisgwqAgwqAgwqBvZmZzZXQgLT0g VU5JVFNfUEVSX1dPUkQ7Cj4rIMKgIMKgIMKgdW5zaWduZWQgcmVnbm8gPSByZWdfb3JkZXJbaV07 Cj4rIMKgIMKgIMKgcnR4IHJlZyA9IGdlbl9ydHhfUkVHIChQbW9kZSwgcmVnbm8pOwo+KyDCoCDC oCDCoHJ0eCBtZW0gPSBnZW5fZnJhbWVfbWVtIChQbW9kZSwgcGx1c19jb25zdGFudCAoUG1vZGUs Cj4rIMKgIMKgIMKgIMKgIMKgIMKgIHN0YWNrX3BvaW50ZXJfcnR4LAo+KyDCoCDCoCDCoCDCoCDC oCDCoCBvZmZzZXQpKTsKPisgwqAgwqAgwqBydHggc2V0ID0gZ2VuX3J0eF9TRVQgKHJlZywgbWVt KTsKPisgwqAgwqAgwqBSVFZFQ19FTFQgKHZlYywgaSAtIDEpID0gc2V0Owo+KyDCoCDCoCDCoFJU WF9GUkFNRV9SRUxBVEVEX1AgKHNldCkgPSAxOwo+KyDCoCDCoCDCoGR3YXJmID0gYWxsb2NfcmVn X25vdGUgKFJFR19DRkFfUkVTVE9SRSwgcmVnLCBkd2FyZik7Cj4rIMKgIMKgfQo+Kwo+KyDCoC8q IHNwIGFkanVzdCBwYXR0ZXJuICovCj4rIMKgcnR4IGFkanVzdF9zcF9ydHgKPisgwqAgwqAgwqA9 IGdlbl9ydHhfU0VUIChzdGFja19wb2ludGVyX3J0eCwKPisgwqAgwqAgwqAgwqAgwqAgcGx1c19j b25zdGFudCAoUG1vZGUsCj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0YWNrX3BvaW50ZXJfcnR4 LAo+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzcF9hZGp1c3QpKTsKPisgwqBSVFZFQ19FTFQgKHZl YywgdmVjbGVuIC0gMSkgPSBhZGp1c3Rfc3BfcnR4Owo+Kwo+KyDCoHJ0eCBjZmFfYWRqdXN0X3J0 eCA9IGdlbl9ydHhfUExVUyAoUG1vZGUsIHN0YWNrX3BvaW50ZXJfcnR4LAo+KyDCoCDCoCDCoCBj b25zdDBfcnR4KTsKPisgwqBkd2FyZiA9IGFsbG9jX3JlZ19ub3RlIChSRUdfQ0ZBX0RFRl9DRkEs IGNmYV9hZGp1c3RfcnR4LCBkd2FyZik7Cj4rCj4rIMKgZnJhbWUtPmdwX3NwX29mZnNldCAtPSAo dmVjbGVuIC0gMSkgKiBVTklUU19QRVJfV09SRDsKPisgwqBmcmFtZS0+cHVzaF9wb3Bfc3BfYWRq dXN0ID0gc3BfYWRqdXN0Owo+Kwo+KyDCoHJ0eCBpbnNuID0gZW1pdF9pbnNuIChnZW5fcnR4X1BB UkFMTEVMIChWT0lEbW9kZSwgdmVjKSk7Cj4rIMKgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikg PSAxOwo+KyDCoFJFR19OT1RFUyAoaW5zbikgPSBkd2FyZjsKPit9Cj4rCj7CoC8qIEZvciBzdGFj ayBmcmFtZXMgdGhhdCBjYW4ndCBiZSBhbGxvY2F0ZWQgd2l0aCBhIHNpbmdsZSBBRERJIGluc3Ry dWN0aW9uLAo+wqAgwqAgY29tcHV0ZSB0aGUgYmVzdCB2YWx1ZSB0byBpbml0aWFsbHkgYWxsb2Nh dGUuIMKgSXQgbXVzdCBhdCBhIG1pbmltdW0KPsKgIMKgIGFsbG9jYXRlIGVub3VnaCBzcGFjZSB0 byBzcGlsbCB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycy4gwqBJZiBUQVJHRVRfUlZDLAo+QEAg LTUyNzAsNiArNTUxNiwxNDYgQEAgcmlzY3ZfZW1pdF9zdGFja190aWUgKHZvaWQpCj7CoCDCoCDC oGVtaXRfaW5zbiAoZ2VuX3N0YWNrX3RpZWRpIChzdGFja19wb2ludGVyX3J0eCwgaGFyZF9mcmFt ZV9wb2ludGVyX3J0eCkpOwo+wqB9Cj7CoAo+K2Jvb2wKPityaXNjdl9jaGVja19yZWdubyhydHgg cGF0LCB1bnNpZ25lZCByZWdubykKPit7Cj4rIMKgcmV0dXJuIFJFR19QIChwYXQpCj4rIMKgIMKg IMKgJiYgUkVHTk8gKHBhdCkgPT0gcmVnbm87Cj4rfQo+Kwo+Ky8qIEZ1bmN0aW9uIHRvIGNoZWNr IHdoZXRoZXIgdGhlIE9QIGlzIGEgdmFsaWQgc3RhY2sgcHVzaC9wb3Agb3BlcmF0aW9uLgo+KyDC oCBUaGlzIHBhcnQgaXMgYm9ycm93ZWQgZnJvbSBuZHMzMiBuZHMzMl92YWxpZF9zdGFja19wdXNo X3BvcF9wICovCj4rCj4rYm9vbAo+K3Jpc2N2X3ZhbGlkX3N0YWNrX3B1c2hfcG9wX3AgKHJ0eCBv cCwgYm9vbCBwdXNoX3ApCj4rewo+KyDCoGludCBpbmRleDsKPisgwqBpbnQgdG90YWxfY291bnQ7 Cj4rIMKgaW50IHNwX2FkanVzdF9ydHhfaW5kZXg7Cj4rIMKgcnR4IGVsdDsKPisgwqBydHggZWx0 X3JlZzsKPisgwqBydHggZWx0X3BsdXM7Cj4rCj4rIMKgaWYgKCFUQVJHRVRfWkNNUCkKPisgwqAg wqByZXR1cm4gZmFsc2U7Cj4rCj4rIMKgdG90YWxfY291bnQgPSBYVkVDTEVOIChvcCwgMCk7Cj4r IMKgc3BfYWRqdXN0X3J0eF9pbmRleCA9IHB1c2hfcCA/IDAgOiB0b3RhbF9jb3VudCAtIDE7Cj4r Cj4rIMKgLyogQXQgbGVhc3Qgc3AgKyBvbmUgY2FsbGVlIHNhdmUvcmVzdG9yZSByZWdpc3RlciBy dHggKi8KPisgwqBpZiAodG90YWxfY291bnQgPCAyKQo+KyDCoCDCoHJldHVybiBmYWxzZTsKPisK PisgwqAvKiBQZXJmb3JtIHNvbWUgcXVpY2sgY2hlY2sgZm9yIHRoYXQgZXZlcnkgZWxlbWVudCBz aG91bGQgYmUgJ3NldCcsCj4rIMKgIMKgIGZvciBwb3AsIGl0IG1pZ2h0IGNvbnRhaW4gYHJldGAg YW5kIGByZXQgdmFsdWVgIHBhdHRlcm4uIMKgKi8KPisgwqBmb3IgKGluZGV4ID0gMDsgaW5kZXgg PCB0b3RhbF9jb3VudDsgaW5kZXgrKykKPisgwqAgwqB7Cj4rIMKgIMKgIMKgZWx0ID0gWFZFQ0VY UCAob3AsIDAsIGluZGV4KTsKPisKPisgwqAgwqAgwqAvKiBza2lwIHBvcCByZXR1cm4gdmFsdWUg cnR4ICovCj4rIMKgIMKgIMKgaWYgKCFwdXNoX3AgJiYgR0VUX0NPREUgKGVsdCkgPT0gU0VUCj4r IMKgIMKgIMKgIMKgICYmIHJpc2N2X2NoZWNrX3JlZ25vIChTRVRfREVTVCAoZWx0KSwgUkVUVVJO X1ZBTFVFX1JFR05VTSkKPisgwqAgwqAgwqAgwqAgJiYgdG90YWxfY291bnQgPj0gNAo+KyDCoCDC oCDCoCDCoCAmJiBpbmRleCArIDEgPCB0b3RhbF9jb3VudAo+KyDCoCDCoCDCoCDCoCAmJiBHRVRf Q09ERSAoWFZFQ0VYUCAob3AsIDAsIGluZGV4ICsgMSkpID09IFVTRSkKPisgwqAgwqAgwqAgewo+ KyDCoCDCoCDCoCDCoCBydHggdXNlX3JlZyA9IFhFWFAgKFhWRUNFWFAgKG9wLCAwLCBpbmRleCAr IDEpLCAwKTsKPisKPisgwqAgwqAgwqAgwqAgaWYgKCFyaXNjdl9jaGVja19yZWdubyAodXNlX3Jl ZywgUkVUVVJOX1ZBTFVFX1JFR05VTSkpCj4rIMKgIMKgIMKgIMKgIMKgIHJldHVybiBmYWxzZTsK PisKPisgwqAgwqAgwqAgwqAgaW5kZXggKz0gMTsKPisgwqAgwqAgwqAgwqAgY29udGludWU7Cj4r IMKgIMKgIMKgIH0KPisKPisgwqAgwqAgwqAvKiBza2lwIHJldCBydHggKi8KPisgwqAgwqAgwqBp ZiAoIXB1c2hfcCAmJiBHRVRfQ09ERSAoZWx0KSA9PSBTSU1QTEVfUkVUVVJOCj4rIMKgIMKgIMKg IMKgICYmIHRvdGFsX2NvdW50ID49IDQKPisgwqAgwqAgwqAgwqAgJiYgaW5kZXggKyAxIDwgdG90 YWxfY291bnQKPisgwqAgwqAgwqAgwqAgJiYgR0VUX0NPREUgKFhWRUNFWFAgKG9wLCAwLCBpbmRl eCArIDEpKSA9PSBVU0UpCj4rIMKgIMKgIMKgIHsKPisgwqAgwqAgwqAgwqAgcnR4IHVzZV9yZWcg PSBYRVhQIChYVkVDRVhQIChvcCwgMCwgaW5kZXggKyAxKSwgMCk7Cj4rCj4rIMKgIMKgIMKgIMKg IGlmICghcmlzY3ZfY2hlY2tfcmVnbm8gKHVzZV9yZWcsIFJFVFVSTl9BRERSX1JFR05VTSkpCj4r IMKgIMKgIMKgIMKgIMKgIHJldHVybiBmYWxzZTsKPisKPisgwqAgwqAgwqAgwqAgaW5kZXggKz0g MTsKPisgwqAgwqAgwqAgwqAgc3BfYWRqdXN0X3J0eF9pbmRleCAtPSAyOwo+KyDCoCDCoCDCoCDC oCBjb250aW51ZTsKPisgwqAgwqAgwqAgfQo+Kwo+KyDCoCDCoCDCoGlmIChHRVRfQ09ERSAoZWx0 KSAhPSBTRVQpCj4rIMKgIMKgIMKgIHJldHVybiBmYWxzZTsKPisgwqAgwqB9Cj4rCj4rIMKgZWx0 ID0gWFZFQ0VYUCAob3AsIDAsIHNwX2FkanVzdF9ydHhfaW5kZXgpOwo+KyDCoGVsdF9yZWcgwqA9 IFNFVF9ERVNUIChlbHQpOwo+KyDCoGVsdF9wbHVzID0gU0VUX1NSQyAoZWx0KTsKPisKPisgwqAv KiBDaGVjayB0aGlzIGlzIChzZXQgKHN0YWNrX3JlZykgKHBsdXMgc3RhY2tfcmVnIGNvbnN0KSkg cGF0dGVybi4gwqAqLwo+KyDCoGlmIChHRVRfQ09ERSAoZWx0X3BsdXMpICE9IFBMVVMKPisgwqAg wqAgwqB8fCAhcmlzY3ZfY2hlY2tfcmVnbm8gKGVsdF9yZWcsIFNUQUNLX1BPSU5URVJfUkVHTlVN KSkKPisgwqAgwqByZXR1cm4gZmFsc2U7Cj4rCj4rIMKgLyogUGFzcyBhbGwgdGVzdCwgdGhpcyBp cyBhIHZhbGlkIHJ0eC4gwqAqLwo+KyDCoHJldHVybiB0cnVlOwo+K30KPisKPisvKiBHZW5lcmF0 ZSBwdXNoL3BvcCBydHggKi8KPisKPitzdGF0aWMgdm9pZAo+K3Jpc2N2X2VtaXRfcHVzaF9pbnNu IChzdHJ1Y3QgcmlzY3ZfZnJhbWVfaW5mbyAqZnJhbWUsIEhPU1RfV0lERV9JTlQgc2l6ZSkKPit7 Cj4rIMKgdW5zaWduZWQgaW50IHZlY2xlbiA9IHJpc2N2X3NhdmVfcHVzaF9wb3BfY291bnQgKGZy YW1lLT5tYXNrKTsKPisgwqB1bnNpZ25lZCBpbnQgbl9yZWcgPSB2ZWNsZW4gLSAxOwo+KyDCoHJ0 dmVjIHZlYyA9IHJ0dmVjX2FsbG9jICh2ZWNsZW4pOwo+Kwo+KyDCoGNvbnN0IHVuc2lnbmVkICpy ZWdfb3JkZXIgPSAoVEFSR0VUX1pDTVAgJiYgVEFSR0VUX1JWRSkKPisgwqAgwqAgwqAgPyBwdXNo X3NhdmVfcmVnX29yZGVyX3pjbXBlCj4rIMKgIMKgIMKgIDogcHVzaF9zYXZlX3JlZ19vcmRlcjsK PisKPisgwqBpbnQgYWxpZ25lZF9zaXplID0gKHNpemUgKyAxNSkgJiAofjB4Zik7Cj4rCj4rIMKg Z2NjX2Fzc2VydCAobl9yZWcgPj0gMQo+KyDCoCDCoCDCoCAmJiBUQVJHRVRfWkNNUAo+KyDCoCDC oCDCoCAmJiAoKFRBUkdFVF9SVkUgJiYgKG5fcmVnIDw9IEFSUkFZX1NJWkUgKHB1c2hfc2F2ZV9y ZWdfb3JkZXJfemNtcGUpKSkKPisgwqAgwqAgwqAgwqAgwqAgfHwgKFRBUkdFVF9aQ01QICYmIChu X3JlZyA8PSBBUlJBWV9TSVpFIChwdXNoX3NhdmVfcmVnX29yZGVyKSkpKSk7Cj4rCj4rIMKgLyog c3AgYWRqdXN0IHBhdHRlcm4gKi8KPisgwqBpbnQgbWF4X2FsbG93X3NwX2FkanVzdCA9IHJpc2N2 X3B1c2hfcG9wX2Jhc2Vfc3BfYWRqdXN0IChmcmFtZS0+bWFzaykgKyA0ODsKPisgwqBpbnQgc3Bf YWRqdXN0ID0gYWxpZ25lZF9zaXplID4gbWF4X2FsbG93X3NwX2FkanVzdCA/Cj4rIMKgIMKgIMKg bWF4X2FsbG93X3NwX2FkanVzdAo+KyDCoCDCoCDCoDogYWxpZ25lZF9zaXplOwo+Kwo+KyDCoC8q VE9ETzogbW92ZSB0aGlzIHBhcnQgdG8gZnJhbWUgY29tcHV0YXRpb24gZnVuY3Rpb24uICovCj4r IMKgZnJhbWUtPmdwX3NwX29mZnNldCA9ICh2ZWNsZW4gLSAxKSAqIFVOSVRTX1BFUl9XT1JEOwo+ KyDCoGZyYW1lLT5wdXNoX3BvcF9zcF9hZGp1c3QgPSBzcF9hZGp1c3Q7Cj4rCj4rIMKgcnR4IGFk anVzdF9zcF9ydHgKPisgwqAgwqAgwqA9IGdlbl9ydHhfU0VUIChzdGFja19wb2ludGVyX3J0eCwK PisgwqAgwqAgwqAgwqAgwqAgcGx1c19jb25zdGFudCAoUG1vZGUsCj4rIMKgIMKgIMKgIMKgIMKg IHN0YWNrX3BvaW50ZXJfcnR4LAo+KyDCoCDCoCDCoCDCoCDCoCAtc3BfYWRqdXN0KSk7Cj4rIMKg UlRWRUNfRUxUICh2ZWMsIDApID0gYWRqdXN0X3NwX3J0eDsKPisKPisgwqAvKiBSZWdpc3RlciBz YXZlIHNlcXVlbmNlLiAqLwo+KyDCoGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2ZWNsZW47ICsr aSkKPisgwqAgwqB7Cj4rIMKgIMKgIMKgc3BfYWRqdXN0IC09IFVOSVRTX1BFUl9XT1JEOwo+KyDC oCDCoCDCoHVuc2lnbmVkIHJlZ25vID0gcmVnX29yZGVyW2ldOwo+KyDCoCDCoCDCoHJ0eCByZWcg PSBnZW5fcnR4X1JFRyAoUG1vZGUsIHJlZ25vKTsKPisgwqAgwqAgwqBydHggbWVtID0gZ2VuX2Zy YW1lX21lbSAoUG1vZGUsIHBsdXNfY29uc3RhbnQgKFBtb2RlLAo+KyDCoCDCoCDCoCDCoCDCoCDC oCBzdGFja19wb2ludGVyX3J0eCwKPisgwqAgwqAgwqAgwqAgwqAgwqAgc3BfYWRqdXN0KSk7Cj4r IMKgIMKgIMKgcnR4IHNldCA9IGdlbl9ydHhfU0VUIChtZW0sIHJlZyk7Cj4rIMKgIMKgIMKgUlRW RUNfRUxUICh2ZWMsIGkpID0gc2V0Owo+KyDCoCDCoCDCoFJUWF9GUkFNRV9SRUxBVEVEX1AgKHNl dCkgPSAxOwo+KyDCoCDCoH0KPisKPisgwqBydHggaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX3J0eF9Q QVJBTExFTCAoVk9JRG1vZGUsIHZlYykpOwo+KyDCoFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24p ID0gMTsKPit9Cj4rCj7CoC8qIEV4cGFuZCB0aGUgInByb2xvZ3VlIiBwYXR0ZXJuLiDCoCovCj7C oAo+wqB2b2lkCj5AQCAtNTI3OCw2ICs1NjY0LDcgQEAgcmlzY3ZfZXhwYW5kX3Byb2xvZ3VlICh2 b2lkKQo+wqAgwqBzdHJ1Y3QgcmlzY3ZfZnJhbWVfaW5mbyAqZnJhbWUgPSAmY2Z1bi0+bWFjaGlu ZS0+ZnJhbWU7Cj7CoCDCoHBvbHlfaW50NjQgc2l6ZSA9IGZyYW1lLT50b3RhbF9zaXplOwo+wqAg wqB1bnNpZ25lZCBtYXNrID0gZnJhbWUtPm1hc2s7Cj4rIMKgSE9TVF9XSURFX0lOVCBzdGVwMSA9 IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lKTsKPsKgIMKgcnR4IGluc247Cj7CoAo+wqAg wqBpZiAoZmxhZ19zdGFja191c2FnZV9pbmZvKQo+QEAgLTUzMDAsMTkgKzU2ODcsMzIgQEAgcmlz Y3ZfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQo+wqAgwqAgwqAgwqBSRUdfTk9URVMgKGluc24pID0g ZHdhcmY7Cj7CoCDCoCDCoH0KPsKgCj4rIMKgIMKgaWYgKHNpemUuaXNfY29uc3RhbnQgKCkpCj4r IMKgIMKgc3RlcDEgPSBNSU4gKHNpemUudG9fY29uc3RhbnQoKSwgc3RlcDEpOwo+KyDCoGlmIChy aXNjdl91c2VfcHVzaF9wb3AgKGZyYW1lLCBzdGVwMSkpCj4rIMKgIMKgewo+KyDCoCDCoCDCoHJp c2N2X2VtaXRfcHVzaF9pbnNuIChmcmFtZSwgc3RlcDEpOwo+Kwo+KyDCoCDCoCDCoHN0ZXAxID0g TUFYIChzdGVwMSAtIGZyYW1lLT5wdXNoX3BvcF9zcF9hZGp1c3QsIDApOwo+KyDCoCDCoCDCoHNp emUgPSBNQVggKHNpemUudG9fY29uc3RhbnQoKSAtIGZyYW1lLT5wdXNoX3BvcF9zcF9hZGp1c3Qs IDApOwo+KyDCoCDCoCDCoGZyYW1lLT5tYXNrICY9IH4gKChUQVJHRVRfWkNNUCAmJiBUQVJHRVRf UlZFKSA/Cj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFJJU0NWX1pDTVBFX1BVU0hfUE9QX01B U0sKPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOiBSSVNDVl9aQ0VfUFVTSF9QT1BfTUFTSyk7Cj4r IMKgIMKgfQo+Kwo+wqAgwqAvKiBTYXZlIHRoZSByZWdpc3RlcnMuIMKgKi8KPsKgIMKgaWYgKChm cmFtZS0+bWFzayB8IGZyYW1lLT5mbWFzaykgIT0gMCkKPsKgIMKgIMKgewo+LSDCoCDCoCDCoEhP U1RfV0lERV9JTlQgc3RlcDEgPSByaXNjdl9maXJzdF9zdGFja19zdGVwIChmcmFtZSk7Cj4tIMKg IMKgIMKgaWYgKHNpemUuaXNfY29uc3RhbnQgKCkpCj4tIMKgIMKgIMKgIHN0ZXAxID0gTUlOIChz aXplLnRvX2NvbnN0YW50KCksIHN0ZXAxKTsKPi0KPi0gwqAgwqAgwqBpbnNuID0gZ2VuX2FkZDNf aW5zbiAoc3RhY2tfcG9pbnRlcl9ydHgsCj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHN0YWNrX3BvaW50ZXJfcnR4LAo+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBHRU5fSU5UICgtc3RlcDEpKTsKPi0gwqAgwqAgwqBSVFhfRlJBTUVfUkVM QVRFRF9QIChlbWl0X2luc24gKGluc24pKSA9IDE7Cj4tIMKgIMKgIMKgc2l6ZSAtPSBzdGVwMTsK Pi0gwqAgwqAgwqByaXNjdl9mb3JfZWFjaF9zYXZlZF9yZWcgKHNpemUsIHJpc2N2X3NhdmVfcmVn LCBmYWxzZSwgZmFsc2UpOwo+KyDCoCDCoCDCoCBpZiAoc3RlcDEgPiAwKQo+KyDCoCDCoCDCoCB7 Cj4rIMKgIMKgIMKgIMKgIGluc24gPSBnZW5fYWRkM19pbnNuIChzdGFja19wb2ludGVyX3J0eCwK PisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3RhY2tfcG9pbnRlcl9ydHgsCj4r IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEdFTl9JTlQgKC1zdGVwMSkpOwo+KyDC oCDCoCDCoCDCoCBSVFhfRlJBTUVfUkVMQVRFRF9QIChlbWl0X2luc24gKGluc24pKSA9IDE7Cj4r IMKgIMKgIMKgIMKgIHNpemUgLT0gc3RlcDE7Cj4rIMKgIMKgIMKgIH0KPisgwqAgwqAgcmlzY3Zf Zm9yX2VhY2hfc2F2ZWRfcmVnIChzaXplLCByaXNjdl9zYXZlX3JlZywKPisgwqAgwqAgwqAgwqBm YWxzZSAvKiBib29sIGVwaWxvZ3VlICovLCBmYWxzZSAvKiBib29sIG1heWJlX2VoX3JldHVybiAq Lyk7Cj7CoCDCoCDCoH0KPsKgCj7CoCDCoGZyYW1lLT5tYXNrID0gbWFzazsgLyogVW5kbyB0aGUg YWJvdmUgZmliLiDCoCovCj5AQCAtNTQxMiw2ICs1ODEyLDggQEAgcmlzY3ZfZXhwYW5kX2VwaWxv Z3VlIChpbnQgc3R5bGUpCj7CoCDCoHJ0eCByYSA9IGdlbl9ydHhfUkVHIChQbW9kZSwgUkVUVVJO X0FERFJfUkVHTlVNKTsKPsKgIMKgcnR4IGluc247Cj7CoAo+KyDCoGJvb2wgdXNlX3pjbXBfcG9w ID0gIXVzZV9yZXN0b3JlX2xpYmNhbGwgJiYgIShjcnRsLT5jYWxsc19laF9yZXR1cm4pOwo+Kwo+ wqAgwqAvKiBXZSBuZWVkIHRvIGFkZCBtZW1vcnkgYmFycmllciB0byBwcmV2ZW50IHJlYWQgZnJv bSBkZWFsbG9jYXRlZCBzdGFjay4gwqAqLwo+wqAgwqBib29sIG5lZWRfYmFycmllcl9wID0ga25v d25fbmUgKGdldF9mcmFtZV9zaXplICgpCj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCArIGNmdW4tPm1hY2hpbmUtPmZyYW1lLmFyZ19wb2ludGVyX29m ZnNldCwgMCk7Cj5AQCAtNTUzOCw2ICs1OTQwLDE4IEBAIHJpc2N2X2V4cGFuZF9lcGlsb2d1ZSAo aW50IHN0eWxlKQo+wqAgwqBpZiAodXNlX3Jlc3RvcmVfbGliY2FsbCkKPsKgIMKgIMKgZnJhbWUt Pm1hc2sgPSAwOyAvKiBUZW1wb3JhcmlseSBmaWIgdGhhdCB3ZSBuZWVkIG5vdCBzYXZlIEdQUnMu IMKgKi8KPsKgCj4rIMKgaWYgKHVzZV96Y21wX3BvcCAmJiByaXNjdl91c2VfcHVzaF9wb3AgKGZy YW1lLCBzdGVwMikpCj4rIMKgIMKgewo+KyDCoCDCoCDCoC8qIEVtaXQgYSBiYXJyaWVyIHRvIHBy ZXZlbnQgbG9hZHMgZnJvbSBhIGRlYWxsb2NhdGVkIHN0YWNrLiDCoCovCj4rIMKgIMKgIMKgcmlz Y3ZfZW1pdF9zdGFja190aWUgKCk7Cj4rIMKgIMKgIMKgbmVlZF9iYXJyaWVyX3AgPSBmYWxzZTsK PisgwqAgwqAgwqByaXNjdl9lbWl0X3BvcF9pbnNuIChmcmFtZSwgZnJhbWUtPnRvdGFsX3NpemUu dG9fY29uc3RhbnQoKSwgc3RlcDIpOwo+KyDCoCDCoCDCoGZyYW1lLT5tYXNrICY9IH4gKChUQVJH RVRfWkNNUCAmJiBUQVJHRVRfUlZFKSA/Cj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFJJU0NW X1pDTVBFX1BVU0hfUE9QX01BU0sKPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOiBSSVNDVl9aQ0Vf UFVTSF9QT1BfTUFTSyk7Cj4rIMKgIMKgIMKgc3RlcDIgPSAwOwo+KyDCoCDCoH0KPisKPsKgIMKg LyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzLiDCoCovCj7CoCDCoHJpc2N2X2Zvcl9lYWNoX3NhdmVk X3JlZyAoZnJhbWUtPnRvdGFsX3NpemUgLSBzdGVwMiwgcmlzY3ZfcmVzdG9yZV9yZWcsCj7CoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0cnVlLCBzdHlsZSA9PSBFWENF UFRJT05fUkVUVVJOKTsKPkBAIC01NTUyLDYgKzU5NjYsOSBAQCByaXNjdl9leHBhbmRfZXBpbG9n dWUgKGludCBzdHlsZSkKPsKgIMKgaWYgKG5lZWRfYmFycmllcl9wKQo+wqAgwqAgwqByaXNjdl9l bWl0X3N0YWNrX3RpZSAoKTsKPsKgCj4rIMKgaWYgKHVzZV96Y21wX3BvcCkKPisgwqAgwqBmcmFt ZS0+bWFzayA9IG1hc2s7Cj4rCj7CoCDCoC8qIERlYWxsb2NhdGUgdGhlIGZpbmFsIGJpdCBvZiB0 aGUgZnJhbWUuIMKgKi8KPsKgIMKgaWYgKHN0ZXAyID4gMCkKPsKgIMKgIMKgewo+ZGlmZiAtLWdp dCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YuaCBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YuaAo+ aW5kZXggZDA1YjFkNTk4NTMuLjZlNmUzZWUyYzI1IDEwMDY0NAo+LS0tIGEvZ2NjL2NvbmZpZy9y aXNjdi9yaXNjdi5oCj4rKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmgKPkBAIC0zODMsNiAr MzgzLDcgQEAgQVNNX01JU0FfU1BFQwo+wqAjZGVmaW5lIEhBUkRfRlJBTUVfUE9JTlRFUl9SRUdO VU0gOAo+wqAjZGVmaW5lIFNUQUNLX1BPSU5URVJfUkVHTlVNIDIKPsKgI2RlZmluZSBUSFJFQURf UE9JTlRFUl9SRUdOVU0gNAo+KyNkZWZpbmUgUkVUVVJOX1ZBTFVFX1JFR05VTSAxMAo+wqAKPsKg LyogVGhlc2UgdHdvIHJlZ2lzdGVycyBkb24ndCByZWFsbHkgZXhpc3Q6IHRoZXkgZ2V0IGVsaW1p bmF0ZWQgdG8gZWl0aGVyCj7CoCDCoCB0aGUgc3RhY2sgb3IgaGFyZCBmcmFtZSBwb2ludGVyLiDC oCovCj5AQCAtMTA5Nyw0ICsxMDk4LDcgQEAgZXh0ZXJuIHZvaWQgcmlzY3ZfcmVtb3ZlX3VubmVl ZGVkX3NhdmVfcmVzdG9yZV9jYWxsc8KgCj4odm9pZCk7Cj7CoCNkZWZpbmUgRFdBUkZfUkVHX1RP X1VOV0lORF9DT0xVTU4oUkVHTk8pIFwKPsKgIMKgKChSRUdOTyA9PSBSSVNDVl9EV0FSRl9WTEVO QikgPyAoRklSU1RfUFNFVURPX1JFR0lTVEVSICsgMSkgOiBSRUdOTykKPsKgCj4rI2RlZmluZSBS SVNDVl9aQ0VfUFVTSF9QT1BfTUFTSyAweDBmZmMwMzAydQo+KyNkZWZpbmUgUklTQ1ZfWkNNUEVf UFVTSF9QT1BfTUFTSyAweDMwMnUKPisKPsKgI2VuZGlmIC8qICEgR0NDX1JJU0NWX0ggKi8KPmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kIGIvZ2NjL2NvbmZpZy9yaXNjdi9y aXNjdi5tZAo+aW5kZXggYmMzODRkOWFlZGYuLmI5ZjJhNDI2ZTQ4IDEwMDY0NAo+LS0tIGEvZ2Nj L2NvbmZpZy9yaXNjdi9yaXNjdi5tZAo+KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZAo+ QEAgLTEwOCwxMiArMTA4LDE0IEBACj7CoAo+wqAoZGVmaW5lX2NvbnN0YW50cwo+wqAgwqBbKFJF VFVSTl9BRERSX1JFR05VTSDCoCDCoCDCoCDCoCAxKQo+KyDCoCAoU1BfUkVHTlVNIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgMikKPsKgIMKgIChHUF9SRUdOVU0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAzKQo+wqAgwqAgKFRQX1JFR05VTSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDQp Cj7CoCDCoCAoVDBfUkVHTlVNIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgNSkKPsKgIMKgIChU MV9SRUdOVU0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA2KQo+wqAgwqAgKFMwX1JFR05VTSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDgpCj7CoCDCoCAoUzFfUkVHTlVNIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgOSkKPisgwqAgKEEwX1JFR05VTSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoDEwKQo+wqAgwqAgKFMyX1JFR05VTSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDE4KQo+ wqAgwqAgKFMzX1JFR05VTSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDE5KQo+wqAgwqAgKFM0 X1JFR05VTSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDIwKQo+QEAgLTMxNDcsMyArMzE0OSw0 IEBACj7CoChpbmNsdWRlICJzaWZpdmUtNy5tZCIpCj7CoChpbmNsdWRlICJ0aGVhZC5tZCIpCj7C oChpbmNsdWRlICJ2ZWN0b3IubWQiKQo+KyhpbmNsdWRlICJ6Yy5tZCIpCj5kaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9yaXNjdi90LXJpc2N2IGIvZ2NjL2NvbmZpZy9yaXNjdi90LXJpc2N2Cj5pbmRl eCA2ZTMyNmZjN2UwMi4uOWVmNTIyMzA2YTUgMTAwNjQ0Cj4tLS0gYS9nY2MvY29uZmlnL3Jpc2N2 L3QtcmlzY3YKPisrKyBiL2djYy9jb25maWcvcmlzY3YvdC1yaXNjdgo+QEAgLTkwLDYgKzkwLDEw IEBAIHJpc2N2LXYubzogJChzcmNkaXIpL2NvbmZpZy9yaXNjdi9yaXNjdi12LmNjIFwKPsKgIMKg IMKgIMKgICQoQ09NUElMRSkgJDwKPsKgIMKgIMKgIMKgICQoUE9TVENPTVBJTEUpCj7CoAo+K3Jp c2N2LXpjbXAtcG9wcmV0Lm86ICQoc3JjZGlyKS9jb25maWcvcmlzY3YvcmlzY3YtemNtcC1wb3By ZXQuY2MKPisgwqAgwqAgwqAgJChDT01QSUxFKSAkPAo+KyDCoCDCoCDCoCAkKFBPU1RDT01QSUxF KQo+Kwo+wqB0aGVhZC5vOiAkKHNyY2RpcikvY29uZmlnL3Jpc2N2L3RoZWFkLmNjIFwKPsKgIMKg JChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmggJChUQVJHRVRfSCkgYmFja2VuZC5o ICQoUlRMX0gpIFwKPsKgIMKgbWVtbW9kZWwuaCAkKEVNSVRfUlRMX0gpIHBvbHktaW50Lmggb3V0 cHV0LmgKPmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3pjLm1kIGIvZ2NjL2NvbmZpZy9y aXNjdi96Yy5tZAo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAwMDAwLi4zYWQz NGRhY2Q0OQo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi96Yy5tZAo+QEAg LTAsMCArMSw0NyBAQAo+Kzs7IE1hY2hpbmUgZGVzY3JpcHRpb24gZm9yIFpDRSBleHRlbnNpb24u Cj4rOzsgQ29weXJpZ2h0IChDKSAyMDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgo+ Kwo+Kzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KPisKPis7OyBHQ0MgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+Kzs7IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5Cj4rOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywg b3IgKGF0IHlvdXIgb3B0aW9uKQo+Kzs7IGFueSBsYXRlciB2ZXJzaW9uLgo+Kwo+Kzs7IEdDQyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+Kzs7IGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCj4rOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiDCoFNlZSB0aGUKPis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+Kwo+Kzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4rOzsgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmls ZSBDT1BZSU5HMy4gwqBJZiBub3Qgc2VlCj4rOzsgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+Lgo+Kwo+KyhkZWZpbmVfaW5zbiAiKnN0YWNrX3B1c2g8bW9kZT4iCj4rIMKgWyhtYXRjaF9w YXJhbGxlbCAwICJyaXNjdl9zdGFja19wdXNoX29wZXJhdGlvbiIKPisgwqAgwqBbKHNldCAocmVn OlggU1BfUkVHTlVNKSAocGx1czpYIChyZWc6WCBTUF9SRUdOVU0pCj4rIMKgIMKgIMKgKG1hdGNo X29wZXJhbmQ6WCAxICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpKSldKV0KPisgwqAiVEFSR0VUX1pD TVAiCj4rIMKgImNtLnB1c2hcdHslTDB9LCUxIikKPisKPisoZGVmaW5lX2luc24gIipzdGFja19w b3A8bW9kZT4iCj4rIMKgWyhtYXRjaF9wYXJhbGxlbCAwICJyaXNjdl9zdGFja19wb3Bfb3BlcmF0 aW9uIgo+KyDCoCDCoFsoc2V0IChtYXRjaF9vcGVyYW5kOlggMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiIpCj4rIMKgIMKgIMKgKG1lbTpYIChwbHVzOlggKHJlZzpYIFNQX1JFR05VTSkKPisgwqAgwqAg wqAgKG1hdGNoX29wZXJhbmQ6WCAyICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpKSkpXSldCj4rIMKg IlRBUkdFVF9aQ01QIgo+KyDCoHsKPisgwqAgwqByZXR1cm4gcmlzY3Zfb3V0cHV0X3BvcHJldF9w IChvcGVyYW5kc1swXSkgPwo+KyDCoCDCoCDCoCAiY20ucG9wcmV0XHR7JUwwfSwlczAiIDoKPisg wqAgwqAgwqAgImNtLnBvcFx0eyVMMH0sJXMwIjsKPisgwqB9KQo+Kwo+KyhkZWZpbmVfaW5zbiAi KnN0YWNrX3BvcF93aXRoX3JldHVybl92YWx1ZTxtb2RlPiIKPisgwqBbKG1hdGNoX3BhcmFsbGVs IDAgInJpc2N2X3N0YWNrX3BvcF9vcGVyYXRpb24iCj4rIMKgIMKgWyhzZXQgKHJlZzpBTllJIEEw X1JFR05VTSkKPisgwqAgwqAgwqAobWF0Y2hfb3BlcmFuZDpBTllJIDEgInBvcF9yZXR1cm5fdmFs dWVfY29uc3RhbnQiICIiKSldKV0KPisgwqAiVEFSR0VUX1pDTVAiCj4rIMKgewo+KyDCoCDCoGdj Y19hc3NlcnQgKHJpc2N2X291dHB1dF9wb3ByZXRfcCAob3BlcmFuZHNbMF0pKTsKPisgwqAgwqBy ZXR1cm4gImNtLnBvcHJldHpcdHslTDB9LCVzMCI7Cj4rIMKgfSkKPi0twqAKPjIuMjUuMQ==