From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 0124C44BA0 for ; Mon, 7 Nov 2022 02:28:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C7D7F68B9F2; Mon, 7 Nov 2022 04:28:22 +0200 (EET) Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A03D68B8AF for ; Mon, 7 Nov 2022 04:28:17 +0200 (EET) Received: by mail-ej1-f50.google.com with SMTP id d26so26549422eje.10 for ; Sun, 06 Nov 2022 18:28:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :reply-to:in-reply-to:references:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=2AMQCzoNY/u5vRvSV30NHs1QglvdGrOcd9Yi9W7jKtw=; b=F78qq2mFXHYZvjrZMKedLpHdplx1O+h3kgVp+shpIqJ+uGv1kl2YkKjWxmyjkDjMoP 0734kKVdqymtW48882Rn5vykVF/yGnpYIj7xA2Qm07+esNHB8yeByyeGo+2bXsODFwre tcS8YFJJG+HMbuXNSfOKmr9A6MlpfT1fkCKHqER1hzSSghDB4hnTOHc9OWXTHTsoSX1h zNixpZGVP3aqd7sznQRcPnpEB6LenqMWm8B11UItaXNgIPRUj9h58o5HJbPO5qGqkfCk +dPoCQvqxO+wruwsRRcqIXroahWsFFBy0Z0eZ6cEPV8kXvY7n6c82751tIQ3lwTQxt0p FNrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :reply-to:in-reply-to:references:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=2AMQCzoNY/u5vRvSV30NHs1QglvdGrOcd9Yi9W7jKtw=; b=EH8Gw0dPkdqDF6SgQbrIgHNtmI1PIOsoXPRSXY6MF5oRGgh3zw2DJdC3TZkpBGfZCJ We71ph3w3GoOHUPOSYbLUeBOz1vjOAkzmKcGigxm0pMY6MGFdqM0tiuop5CcnlRBTIFn 6aXGqcIXubE1nYpJav/4vwv9lCJsXAJNR4KCVgICCNy5f+5kyXzP54Bs0QiLGHDGcu2F B30M1nd2jCAL7CJXOEY+XEiVUy2nehUSKxL2qK8zDAE74+60Uq0NYOvp9v2xIVFVX/eD 7X/92nhTMdYQ/fU8AT/COC13ZHrxMq0CMT0zG/ljaZogXY5k/hHIFa3Qnn5evmAvYJhr 6pHQ== X-Gm-Message-State: ACrzQf01Ky3U2Qn+i0RFo6a30L6IZNGATfZqHRXpJW1uBQDefu91PvOG 8H3PvSL/uC/R5QGiVg2trGNRJDrkyvQqAitUPxZ2CO3Yu7Y= X-Google-Smtp-Source: AMsMyM5eVU1/b5qeIsxiMVL8DQGK1VrogttABMMkH7NHFdKiJUN7F4WSkgDS2aWLwiylIqkBO8TQLzubjrlRB+aMIqQ= X-Received: by 2002:a17:907:6ea9:b0:794:8b93:2e44 with SMTP id sh41-20020a1709076ea900b007948b932e44mr46632603ejc.407.1667788095951; Sun, 06 Nov 2022 18:28:15 -0800 (PST) MIME-Version: 1.0 References: <20221103122158.27169-1-thomas.ff@spin-digital.com> <20221103122158.27169-6-thomas.ff@spin-digital.com> In-Reply-To: <20221103122158.27169-6-thomas.ff@spin-digital.com> From: "mypopy@gmail.com" Date: Mon, 7 Nov 2022 10:28:04 +0800 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v3 05/10] avformat: add demuxer and probe support for H266/VVC X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Thomas Siedel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gVGh1LCBOb3YgMywgMjAyMiBhdCA4OjIzIFBNIFRob21hcyBTaWVkZWwgPHRob21hcy5mZkBz cGluLWRpZ2l0YWwuY29tPiB3cm90ZToKPgo+IEFkZCBkZW11eGVyIHRvIHByb2JlIHJhdyB2dmMg YW5kIHBhcnNlIHZ2Y2MgYnl0ZSBzdHJlYW0gZm9ybWF0Lgo+Cj4gU2lnbmVkLW9mZi1ieTogVGhv bWFzIFNpZWRlbCA8dGhvbWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+Cj4gLS0tCj4gIGxpYmF2Zm9y bWF0L01ha2VmaWxlICAgICB8ICAgMSArCj4gIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyB8ICAg MSArCj4gIGxpYmF2Zm9ybWF0L2RlbXV4LmMgICAgICB8ICAgNyArLQo+ICBsaWJhdmZvcm1hdC92 dmMuYyAgICAgICAgfCA5MTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIGxpYmF2Zm9ybWF0L3Z2Yy5oICAgICAgICB8ICA5OSArKysrKwo+ICBsaWJhdmZvcm1hdC92 dmNkZWMuYyAgICAgfCAgNjEgKysrCj4gIDYgZmlsZXMgY2hhbmdlZCwgMTA4NiBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZj LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L3Z2Yy5oCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWJhdmZvcm1hdC92dmNkZWMuYwo+Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBpbmRleCBkN2YxOThiZjM5Li4wMGFi NGRlZDg5IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIvbGliYXZm b3JtYXQvTWFrZWZpbGUKPiBAQCAtNTk1LDYgKzU5NSw3IEBAIE9CSlMtJChDT05GSUdfVk9DX01V WEVSKSAgICAgICAgICAgICAgICAgKz0gdm9jZW5jLm8gdm9jLm8KPiAgT0JKUy0kKENPTkZJR19W UEtfREVNVVhFUikgICAgICAgICAgICAgICArPSB2cGsubwo+ICBPQkpTLSQoQ09ORklHX1ZQTEFZ RVJfREVNVVhFUikgICAgICAgICAgICs9IHZwbGF5ZXJkZWMubyBzdWJ0aXRsZXMubwo+ICBPQkpT LSQoQ09ORklHX1ZRRl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IHZxZi5vCj4gK09CSlMtJChD T05GSUdfVlZDX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gdnZjZGVjLm8gcmF3ZGVjLm8KPiAg T0JKUy0kKENPTkZJR19XNjRfREVNVVhFUikgICAgICAgICAgICAgICArPSB3YXZkZWMubyB3NjQu byBwY20ubwo+ICBPQkpTLSQoQ09ORklHX1c2NF9NVVhFUikgICAgICAgICAgICAgICAgICs9IHdh dmVuYy5vIHc2NC5vCj4gIE9CSlMtJChDT05GSUdfV0FWX0RFTVVYRVIpICAgICAgICAgICAgICAg Kz0gd2F2ZGVjLm8gcGNtLm8KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5j IGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gaW5kZXggNDdjNDE5YTAwOS4uYTRlMzgyMjY4 MSAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiArKysgYi9saWJhdmZv cm1hdC9hbGxmb3JtYXRzLmMKPiBAQCAtNDc0LDYgKzQ3NCw3IEBAIGV4dGVybiBjb25zdCBBVk91 dHB1dEZvcm1hdCBmZl92b2NfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBm Zl92cGtfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3ZwbGF5ZXJf ZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3ZxZl9kZW11eGVyOwo+ ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfdnZjX2RlbXV4ZXI7Cj4gIGV4dGVybiBj b25zdCBBVklucHV0Rm9ybWF0ICBmZl93NjRfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWT3V0 cHV0Rm9ybWF0IGZmX3c2NF9tdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZm X3dhdl9kZW11eGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9kZW11eC5jIGIvbGliYXZm b3JtYXQvZGVtdXguYwo+IGluZGV4IDJkZmQ4MmE2M2MuLjhkYmRlMjNmY2QgMTAwNjQ0Cj4gLS0t IGEvbGliYXZmb3JtYXQvZGVtdXguYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2RlbXV4LmMKPiBAQCAt MTIwLDYgKzEyMCw3IEBAIHN0YXRpYyBpbnQgc2V0X2NvZGVjX2Zyb21fcHJvYmVfZGF0YShBVkZv cm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwKPiAgICAgICAgICB7ICJtcDMiLCAgICAgICAg QVZfQ09ERUNfSURfTVAzLCAgICAgICAgICBBVk1FRElBX1RZUEVfQVVESU8gICAgfSwKPiAgICAg ICAgICB7ICJtcGVndmlkZW8iLCAgQVZfQ09ERUNfSURfTVBFRzJWSURFTywgICBBVk1FRElBX1RZ UEVfVklERU8gICAgfSwKPiAgICAgICAgICB7ICJ0cnVlaGQiLCAgICAgQVZfQ09ERUNfSURfVFJV RUhELCAgICAgICBBVk1FRElBX1RZUEVfQVVESU8gICAgfSwKPiArICAgICAgICB7ICJ2dmMiLCAg ICAgICAgQVZfQ09ERUNfSURfVlZDLCAgICAgICAgICBBVk1FRElBX1RZUEVfVklERU8gICAgfSwK PiAgICAgICAgICB7IDAgfQo+ICAgICAgfTsKPiAgICAgIGludCBzY29yZTsKPiBAQCAtNzQzLDcg Kzc0NCw4IEBAIHN0YXRpYyBpbnQ2NF90IHNlbGVjdF9mcm9tX3B0c19idWZmZXIoQVZTdHJlYW0g KnN0LCBpbnQ2NF90ICpwdHNfYnVmZmVyLCBpbnQ2NF90Cj4gIHsKPiAgICAgIEZGU3RyZWFtICpj b25zdCBzdGkgPSBmZnN0cmVhbShzdCk7Cj4gICAgICBpbnQgb25laW5fb25lb3V0ID0gc3QtPmNv ZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IMjY0ICYmCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNf SURfSEVWQyAmJgo+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNf aWQgIT0gQVZfQ09ERUNfSURfVlZDOwo+Cj4gICAgICBpZiAoIW9uZWluX29uZW91dCkgewo+ICAg ICAgICAgIGludCBkZWxheSA9IHN0aS0+YXZjdHgtPmhhc19iX2ZyYW1lczsKPiBAQCAtOTMzLDcg KzkzNSw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfcGt0X2ZpZWxkcyhBVkZvcm1hdENvbnRleHQg KnMsIEFWU3RyZWFtICpzdCwKPiAgICAgIGludDY0X3Qgb2Zmc2V0Owo+ICAgICAgQVZSYXRpb25h bCBkdXJhdGlvbjsKPiAgICAgIGludCBvbmVpbl9vbmVvdXQgPSBzdC0+Y29kZWNwYXItPmNvZGVj X2lkICE9IEFWX0NPREVDX0lEX0gyNjQgJiYKPiAtICAgICAgICAgICAgICAgICAgICAgICBzdC0+ Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0hFVkM7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDICYmCj4g KyAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RF Q19JRF9WVkM7Cj4KPiAgICAgIGlmIChzLT5mbGFncyAmIEFWRk1UX0ZMQUdfTk9GSUxMSU4pCj4g ICAgICAgICAgcmV0dXJuOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92dmMuYyBiL2xpYmF2 Zm9ybWF0L3Z2Yy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5i MjdhNTIyMDA5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L3Z2Yy5jCj4gQEAg LTAsMCArMSw5MTkgQEAKPiArLyoKPiArICogVlZDIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11eGVy cwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIFRob21hcyBTaWVkZWwKPiArICoKPiAr ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K PiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK PiArICovCj4gKwo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9nZXRfYml0cy5oIgo+ICsjaW5jbHVk ZSAibGliYXZjb2RlYy9nb2xvbWIuaCIKPiArI2luY2x1ZGUgImxpYmF2Y29kZWMvdnZjLmgiCj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCj4gKyNpbmNsdWRlICJhdmMuaCIK PiArI2luY2x1ZGUgImF2aW8uaCIKPiArI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKPiArI2lu Y2x1ZGUgInZ2Yy5oIgo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVlZDQ05BTFVuaXRBcnJheSB7Cj4g KyAgICB1aW50OF90ICBhcnJheV9jb21wbGV0ZW5lc3M7Cj4gKyAgICB1aW50OF90ICBOQUxfdW5p dF90eXBlOwo+ICsgICAgdWludDE2X3QgbnVtX25hbHVzOwo+ICsgICAgdWludDE2X3QgKm5hbF91 bml0X2xlbmd0aDsKPiArICAgIHVpbnQ4X3QgICoqbmFsX3VuaXQ7Cj4gK30gVlZDQ05BTFVuaXRB cnJheTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZWQ1BUTFJlY29yZCB7Cj4gKyAgICB1aW50OF90 ICBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOwo+ICsgICAgdWludDhfdCAgZ2VuZXJhbF9wcm9m aWxlX2lkYzsKPiArICAgIHVpbnQ4X3QgIGdlbmVyYWxfdGllcl9mbGFnOwo+ICsgICAgdWludDhf dCAgZ2VuZXJhbF9sZXZlbF9pZGM7Cj4gKyAgICB1aW50OF90ICBwdGxfZnJhbWVfb25seV9jb25z dHJhaW50X2ZsYWc7Cj4gKyAgICB1aW50OF90ICBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7 Cj4gKyAgICB1aW50OF90ICBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1s5XTsKPiArICAgIHVpbnQ4 X3QgICpwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnOwo+ICsgICAgdWludDhfdCAgKnN1 YmxheWVyX2xldmVsX2lkYzsKPiArICAgIHVpbnQ4X3QgIHB0bF9udW1fc3ViX3Byb2ZpbGVzOwo+ ICsgICAgdWludDMyX3QgKmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjOwo+ICt9IFZWQ1BUTFJlY29y ZDsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHsK PiArICAgIHVpbnQ4X3QgIGxlbmd0aFNpemVNaW51c09uZTsKPiArICAgIHVpbnQ4X3QgIHB0bF9w cmVzZW50X2ZsYWc7Cj4gKyAgICB1aW50MTZfdCBvbHNfaWR4Owo+ICsgICAgdWludDhfdCAgbnVt X3N1YmxheWVyczsKPiArICAgIHVpbnQ4X3QgIGNvbnN0YW50X2ZyYW1lX3JhdGU7Cj4gKyAgICB1 aW50OF90ICBjaHJvbWFfZm9ybWF0X2lkYzsKPiArICAgIHVpbnQ4X3QgIGJpdF9kZXB0aF9taW51 czg7Cj4gKyAgICBWVkNQVExSZWNvcmQgcHRsOwo+ICsgICAgdWludDE2X3QgbWF4X3BpY3R1cmVf d2lkdGg7Cj4gKyAgICB1aW50MTZfdCBtYXhfcGljdHVyZV9oZWlnaHQ7Cj4gKyAgICB1aW50MTZf dCBhdmdfZnJhbWVfcmF0ZTsKPiArICAgIHVpbnQ4X3QgIG51bV9vZl9hcnJheXM7Cj4gKyAgICBW VkNDTkFMVW5pdEFycmF5ICphcnJheTsKPiArfSBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29y ZDsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZWQ0NQcm9maWxlVGllckxldmVsIHsKPiArICAgIHVp bnQ4X3QgcHJvZmlsZV9pZGM7Cj4gKyAgICB1aW50OF90IHRpZXJfZmxhZzsKPiArICAgIHVpbnQ4 X3QgZ2VuZXJhbF9sZXZlbF9pZGM7Cj4gKyAgICB1aW50OF90IHB0bF9mcmFtZV9vbmx5X2NvbnN0 cmFpbnRfZmxhZzsKPiArICAgIHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOwo+ ICsvLyBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbwo+ICsgICAgdWludDhfdCAgZ2NpX3ByZXNlbnRf ZmxhZzsKPiArICAgIHVpbnQ4X3QgIGdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzWzldOwo+ICsgICAg dWludDhfdCAgZ2NpX251bV9yZXNlcnZlZF9iaXRzOwo+ICsvLyBlbmQgZ2VuZXJhbF9jb25zdHJh aW50X2luZm8KPiArICAgIHVpbnQ4X3QgICpwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFn Owo+ICsgICAgdWludDhfdCAgKnN1YmxheWVyX2xldmVsX2lkYzsKPiArICAgIHVpbnQ4X3QgIHB0 bF9udW1fc3ViX3Byb2ZpbGVzOwo+ICsgICAgdWludDMyX3QgKmdlbmVyYWxfc3ViX3Byb2ZpbGVf aWRjOwo+ICt9IFZWQ0NQcm9maWxlVGllckxldmVsOwo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHZ2 Y2NfdXBkYXRlX3B0bChWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0NQcm9maWxlVGllckxldmVsICpwdGwpCj4gK3sK PiArICAgIC8qCj4gKyAgICAgKiBUaGUgbGV2ZWwgaW5kaWNhdGlvbiBnZW5lcmFsX2xldmVsX2lk YyBtdXN0IGluZGljYXRlIGEgbGV2ZWwgb2YKPiArICAgICAqIGNhcGFiaWxpdHkgZXF1YWwgdG8g b3IgZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IGxldmVsIGluZGljYXRlZCBmb3IgdGhlCj4gKyAg ICAgKiBoaWdoZXN0IHRpZXIgaW4gYWxsIHRoZSBwYXJhbWV0ZXIgc2V0cy4KPiArICAgICAqLwo+ ICsgICAgaWYgKHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyA8IHB0bC0+dGllcl9mbGFnKQo+ ICsgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyA9IHB0bC0+Z2VuZXJhbF9sZXZl bF9pZGM7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRj ID0gRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjLCBwdGwtPmdlbmVyYWxfbGV2ZWxf aWRjKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogVGhlIHRpZXIgaW5kaWNhdGlvbiBnZW5lcmFs X3RpZXJfZmxhZyBtdXN0IGluZGljYXRlIGEgdGllciBlcXVhbCB0byBvcgo+ICsgICAgICogZ3Jl YXRlciB0aGFuIHRoZSBoaWdoZXN0IHRpZXIgaW5kaWNhdGVkIGluIGFsbCB0aGUgcGFyYW1ldGVy IHNldHMuCj4gKyAgICAgKi8KPiArICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyA9IEZG TUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZywgcHRsLT50aWVyX2ZsYWcpOwo+ICsKPiAr ICAgIC8qCj4gKyAgICAgKiBUaGUgcHJvZmlsZSBpbmRpY2F0aW9uIGdlbmVyYWxfcHJvZmlsZV9p ZGMgbXVzdCBpbmRpY2F0ZSBhIHByb2ZpbGUgdG8KPiArICAgICAqIHdoaWNoIHRoZSBzdHJlYW0g YXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiByZWNvcmQgY29uZm9ybXMuCj4gKyAg ICAgKgo+ICsgICAgICogSWYgdGhlIHNlcXVlbmNlIHBhcmFtZXRlciBzZXRzIGFyZSBtYXJrZWQg d2l0aCBkaWZmZXJlbnQgcHJvZmlsZXMsIHRoZW4KPiArICAgICAqIHRoZSBzdHJlYW0gbWF5IG5l ZWQgZXhhbWluYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHByb2ZpbGUsIGlmIGFueSwgdGhlCj4g KyAgICAgKiBlbnRpcmUgc3RyZWFtIGNvbmZvcm1zIHRvLiBJZiB0aGUgZW50aXJlIHN0cmVhbSBp cyBub3QgZXhhbWluZWQsIG9yIHRoZQo+ICsgICAgICogZXhhbWluYXRpb24gcmV2ZWFscyB0aGF0 IHRoZXJlIGlzIG5vIHByb2ZpbGUgdG8gd2hpY2ggdGhlIGVudGlyZSBzdHJlYW0KPiArICAgICAq IGNvbmZvcm1zLCB0aGVuIHRoZSBlbnRpcmUgc3RyZWFtIG11c3QgYmUgc3BsaXQgaW50byB0d28g b3IgbW9yZQo+ICsgICAgICogc3ViLXN0cmVhbXMgd2l0aCBzZXBhcmF0ZSBjb25maWd1cmF0aW9u IHJlY29yZHMgaW4gd2hpY2ggdGhlc2UgcnVsZXMgY2FuCj4gKyAgICAgKiBiZSBtZXQuCj4gKyAg ICAgKgo+ICsgICAgICogTm90ZTogc2V0IHRoZSBwcm9maWxlIHRvIHRoZSBoaWdoZXN0IHZhbHVl IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5Lgo+ICsgICAgICovCj4gKyAgICB2dmNjLT5wdGwu Z2VuZXJhbF9wcm9maWxlX2lkYyA9IEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRj LCBwdGwtPnByb2ZpbGVfaWRjKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogRWFjaCBiaXQgaW4g ZmxhZ3MgbWF5IG9ubHkgYmUgc2V0IGlmIGFsbAo+ICsgICAgICogdGhlIHBhcmFtZXRlciBzZXRz IHNldCB0aGF0IGJpdC4KPiArICAgICAqLwo+ICsgICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5 X2NvbnN0cmFpbnRfZmxhZyAmPSBwdGwtPnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsK PiArICAgIHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgJj0gcHRsLT5wdGxf bXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIENvbnN0cmFp bnRzIEluZm8KPiArICAgICAqLwo+ICsgICAgaWYocHRsLT5nY2lfcHJlc2VudF9mbGFnKSB7Cj4g KyAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gPSA5Owo+ICsgICAg ICAgIG1lbWNweSgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvWzBdLCAmcHRsLT5n Y2lfZ2VuZXJhbF9jb25zdHJhaW50c1swXSwgc2l6ZW9mKHVpbnQ4X3QpKjkpOwo+ICsKPiArICAg IH0gZWxzZSB7Cj4gKyAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8g PSAxOwo+ICsgICAgICAgIG1lbXNldCgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZv WzBdLCAwLCBzaXplb2YodWludDhfdCkqOSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyoKPiArICAg ICAqIEVhY2ggYml0IGluIGZsYWdzIG1heSBvbmx5IGJlIHNldCBpZiBvbmUgb2YKPiArICAgICAq IHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQuCj4gKyAgICAgKi8KPiArICAgIHZ2Y2Mt PnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnID0gKHVpbnQ4X3QgKikgbWFsbG9j KHNpemVvZih1aW50OF90KSp2dmNjLT5udW1fc3VibGF5ZXJzLTEpOwo+ICsgICAgdnZjYy0+cHRs LnN1YmxheWVyX2xldmVsX2lkYyAgICAgICAgICAgICAgPSAodWludDhfdCAqKSBtYWxsb2Moc2l6 ZW9mKHVpbnQ4X3QpKnZ2Y2MtPm51bV9zdWJsYXllcnMtMSk7Cj4gKwo+ICsgICAgbWVtc2V0KHZ2 Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnLCAwLCBzaXplb2YodWludDhf dCkqdnZjYy0+bnVtX3N1YmxheWVycy0xKTsKPiArICAgIG1lbXNldCh2dmNjLT5wdGwuc3VibGF5 ZXJfbGV2ZWxfaWRjLCAwLCBzaXplb2YodWludDhfdCkqdnZjYy0+bnVtX3N1YmxheWVycy0xKTsK PiArCj4gKyAgICBmb3IoaW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBp LS0pCj4gKyAgICB7Cj4gKyAgICAgICAgdnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWdbaV0gfD0gcHRsLT5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldOwo+ ICsgICAgICAgIGlmKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ld KXsKPiArICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSA9IEZGTUFY KHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0sIHB0bC0+c3VibGF5ZXJfbGV2ZWxfaWRj W2ldKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZWxzZXsKPiArICAgICAgICAgIGlmKGkgPT0g dnZjYy0+bnVtX3N1YmxheWVycyAtIDEpewo+ICsgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJs YXllcl9sZXZlbF9pZGNbaV0gPSB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGM7Cj4gKyAgICAg ICAgICB9ZWxzZXsKPiArICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRj W2ldID0gdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpKzFdOwo+ICsgICAgICAgICAgfQo+ ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJv ZmlsZXMgPSBGRk1BWCh2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMsIHB0bC0+cHRsX251 bV9zdWJfcHJvZmlsZXMpOwo+ICsgICAgaWYoIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxl cyApewo+ICsgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyA9ICh1aW50 MzJfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSp2dmNjLT5wdGwucHRsX251bV9zdWJfcHJv ZmlsZXMpOwo+ICsgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB2dmNjLT5wdGwucHRsX251bV9z dWJfcHJvZmlsZXM7IGkrKykgewo+ICsgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJf cHJvZmlsZV9pZGNbaV0gPSBwdGwtPmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldOwo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsKPiArICAgICAgdnZjYy0+cHRsLmdl bmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0gKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2YodWludDMy X3QpKTsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnZjY19wYXJzZV9wdGwoR2V0 Qml0Q29udGV4dCAqZ2IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJD b25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgcHJvZmlsZVRpZXJQcmVzZW50RmxhZywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IG1heF9zdWJfbGF5ZXJzX21pbnVzMSkKPiArewo+ICsgICAg VlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgZ2VuZXJhbF9wdGw7Cj4gKyAgICBpbnQgajsKPiArCj4gKyAg ICBpZihwcm9maWxlVGllclByZXNlbnRGbGFnKSB7Cj4gKyAgICAgICAgZ2VuZXJhbF9wdGwucHJv ZmlsZV9pZGMgICAgICAgICAgICAgICAgID0gZ2V0X2JpdHMoZ2IsIDcpOwo+ICsgICAgICAgIGdl bmVyYWxfcHRsLnRpZXJfZmxhZyAgICAgICAgICAgICAgICAgICA9IGdldF9iaXRzMShnYik7Cj4g KyAgICB9Cj4gKyAgICBnZW5lcmFsX3B0bC5nZW5lcmFsX2xldmVsX2lkYyAgICAgICAgICAgICAg ICAgICA9IGdldF9iaXRzKGdiLCA4KTsKPiArCj4gKyAgICBnZW5lcmFsX3B0bC5wdGxfZnJhbWVf b25seV9jb25zdHJhaW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOwo+ICsgICAgZ2VuZXJhbF9wdGwu cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKPiArICAgIGlmKHBy b2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsgIC8vIHBhcnNlIGNvbnN0cmFpbnQgaW5mbwo+ICsgICAg ICAgIGdlbmVyYWxfcHRsLmdjaV9wcmVzZW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOwo+ICsgICAg ICAgIGlmKGdlbmVyYWxfcHRsLmdjaV9wcmVzZW50X2ZsYWcpIHsKPiArICAgICAgICAgICAgZm9y IChqID0gMDsgaiA8IDg7IGorKykKPiArICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9n ZW5lcmFsX2NvbnN0cmFpbnRzW2pdID0gZ2V0X2JpdHMoZ2IsIDgpOwo+ICsgICAgICAgICAgICBn ZW5lcmFsX3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IDA7Cj4gKyAgICAgICAgICAg IGdlbmVyYWxfcHRsLmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzWzhdID0gZ2V0X2JpdHMoZ2IsIDcp Owo+ICsKPiArICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX251bV9yZXNlcnZlZF9iaXRzID0g Z2V0X2JpdHMoZ2IsIDgpOwo+ICsgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGdlbmVyYWxfcHRs LmdjaV9udW1fcmVzZXJ2ZWRfYml0cyk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHdoaWxlKGdi LT5pbmRleCAlIDggIT0gMCkKPiArICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgZ2VuZXJhbF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyA9 ICh1aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkqbWF4X3N1Yl9sYXllcnNfbWludXMx KTsKPiArICAgIGZvcihpbnQgaSA9IG1heF9zdWJfbGF5ZXJzX21pbnVzMS0xOyBpID49IDA7IGkt LSkgewo+ICsgICAgICAgIGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2Zs YWdbaV0gPSBnZXRfYml0czEoZ2IpOwo+ICsgICAgfQo+ICsgICAgd2hpbGUoZ2ItPmluZGV4JTgg IT0gMCkKPiArICAgICAgICBza2lwX2JpdHMxKGdiKTsKPiArCj4gKyAgICBnZW5lcmFsX3B0bC5z dWJsYXllcl9sZXZlbF9pZGMgPSAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpKm1h eF9zdWJfbGF5ZXJzX21pbnVzMSk7Cj4gKyAgICBmb3IoaW50IGkgPSBtYXhfc3ViX2xheWVyc19t aW51czEtMTsgaSA+PSAwOyBpLS0pIHsKPiArICAgICAgICBpZiggZ2VuZXJhbF9wdGwucHRsX3N1 YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSApCj4gKyAgICAgICAgICAgIGdlbmVyYWxfcHRs LnN1YmxheWVyX2xldmVsX2lkY1tpXSA9IGdldF9iaXRzKGdiLCA4KTsKPiArICAgIH0KPiArCj4g KyAgICBpZihwcm9maWxlVGllclByZXNlbnRGbGFnKSB7Cj4gKyAgICAgICAgZ2VuZXJhbF9wdGwu cHRsX251bV9zdWJfcHJvZmlsZXMgPSBnZXRfYml0cyhnYiwgOCk7Cj4gKyAgICAgICAgaWYoIGdl bmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKSB7Cj4gKyAgICAgICAgICAgIGdlbmVyYWxf cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0gKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2Yo dWludDMyX3QpKmdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKPiArICAgICAgICAg ICAgZm9yKGludCBpID0gMDsgaSA8IGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBp KyspIHsKPiArICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVf aWRjW2ldID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGdlbmVyYWxf cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0gKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2Yo dWludDMyX3QpKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgdnZjY191cGRhdGVf cHRsKHZ2Y2MsICZnZW5lcmFsX3B0bCk7Cj4gKwo+ICsgICAgZnJlZShnZW5lcmFsX3B0bC5wdGxf c3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnKTsKPiArICAgIGZyZWUoZ2VuZXJhbF9wdGwuc3Vi bGF5ZXJfbGV2ZWxfaWRjKTsKPiArICAgIGZyZWUoZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJv ZmlsZV9pZGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZ2Y2NfcGFyc2VfdnBzKEdldEJpdENv bnRleHQgKmdiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1 cmF0aW9uUmVjb3JkICp2dmNjKQo+ICt7Cj4gKyAgdW5zaWduZWQgaW50IHZwc19tYXhfbGF5ZXJz X21pbnVzMTsKPiArICB1bnNpZ25lZCBpbnQgdnBzX21heF9zdWJfbGF5ZXJzX21pbnVzMTsKPiAr ICB1bnNpZ25lZCBpbnQgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnOwo+ICsg IHVuc2lnbmVkIGludCB2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWc7Cj4gKyAgdW5zaWdu ZWQgaW50IHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnOwo+ICsgIHVuc2lnbmVkIGludCB2 cHNfb2xzX21vZGVfaWRjOwo+ICsKCmluIEZGbXBlZ++8jCB0aGUgaW5kZW50IHNpemUgaXMgNAoK Cj4gKyAgdW5zaWduZWQgaW50ICp2cHNfcHRfcHJlc2VudF9mbGFnOwo+ICsgIHVuc2lnbmVkIGlu dCAqdnBzX3B0bF9tYXhfdGlkOwo+ICsgIHVuc2lnbmVkIGludCB2cHNfbnVtX3B0bHNfbWludXMx ID0gMDsKPiArCj4gKwo+ICsgICAgLyoKPiArICAgICAqIHZwc192aWRlb19wYXJhbWV0ZXJfc2V0 X2lkIHUoNCkKPiArICAgICAqLwo+ICsgICAgc2tpcF9iaXRzKGdiLCA0KTsKPiArCj4gKyAgICB2 cHNfbWF4X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgNik7Cj4gKyAgICB2cHNfbWF4X3N1 Yl9sYXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDMpOwo+ICsKPiArICAgIC8qCj4gKyAgICAg KiBudW1UZW1wb3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3Ry ZWFtIHRvIHdoaWNoIHRoaXMKPiArICAgICAqIGNvbmZpZ3VyYXRpb24gcmVjb3JkIGFwcGxpZXMg aXMgdGVtcG9yYWxseSBzY2FsYWJsZSBhbmQgdGhlIGNvbnRhaW5lZAo+ICsgICAgICogbnVtYmVy IG9mIHRlbXBvcmFsIGxheWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWItbGF5 ZXIgb3IKPiArICAgICAqIHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRv IG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCj4gKyAgICAgKiBpbmRpY2F0ZXMgdGhhdCB0aGUg c3RyZWFtIGlzIG5vdCB0ZW1wb3JhbGx5IHNjYWxhYmxlLiBWYWx1ZSAwIGluZGljYXRlcwo+ICsg ICAgICogdGhhdCBpdCBpcyB1bmtub3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5 IHNjYWxhYmxlLgo+ICsgICAgICovCj4gKyAgICB2dmNjLT5udW1fc3VibGF5ZXJzID0gRkZNQVgo dnZjYy0+bnVtX3N1YmxheWVycywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZwc19tYXhfc3ViX2xheWVyc19taW51czEgKyAxKTsKPiArCj4gKwo+ICsgICAgaWYodnBz X21heF9sYXllcnNfbWludXMxID4gMCAmJiB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxID4gMCkK PiArICAgICAgICB2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWcgPSBnZXRfYml0 czEoZ2IpOyAvL3Zwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZ3MKPiArICAgIGlm KHZwc19tYXhfbGF5ZXJzX21pbnVzMSA+IDApCj4gKyAgICAgICAgdnBzX2FsbF9pbmRlcGVuZGFu dF9sYXllcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKPiArCj4gKyAgICBmb3IoaW50IGkgPTA7IGkg PD0gdnBzX21heF9sYXllcnNfbWludXMxOyBpKyspIHsKPiArICAgICAgICBza2lwX2JpdHMoZ2Is IDYpOyAvL3Zwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZ3N2cHNfbGF5ZXJfaWRb aV0KPiArICAgICAgICBpZihpID4gMCAmJiAhdnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFn KSB7Cj4gKyAgICAgICAgICAgIGlmKGdldF9iaXRzMShnYikpIHsgLy8gdnBzX2luZGVwZW5kYW50 X2xheWVyX2ZsYWcKPiArICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2cHNfbWF4X3RpZF9y ZWZfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKPiArICAgICAgICAgICAgICAgIGZvciAo aW50IGogPTA7IGo8aTsgaisrKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgaWYodnBzX21heF90 aWRfcmVmX3ByZXNlbnRfZmxhZyAmJiBnZXRfYml0czEoZ2IpKSAvLyB2cHNfZGlyZWN0X3JlZl9s YXllcl9mbGFnW2ldW2pdCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwg Myk7IC8vdnBzX21heF90aWRfaWxfcmVmX3BpY3NfcGx1czEKPiArICAgICAgICAgICAgICAgIH0K PiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBpZih2cHNf bWF4X2xheWVyc19taW51czEgPiAwKSB7Cj4gKyAgICAgICAgaWYodnBzX2FsbF9pbmRlcGVuZGFu dF9sYXllcl9mbGFnKQo+ICsgICAgICAgICAgICB2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxh ZyA9IGdldF9iaXRzMShnYik7Cj4gKyAgICAgICAgaWYodnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xz X2ZsYWcpIHsKPiArICAgICAgICAgICAgaWYoIXZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxh ZykKPiArICAgICAgICAgICAgICAgIHZwc19vbHNfbW9kZV9pZGMgPSBnZXRfYml0cyhnYiwgMik7 Cj4gKyAgICAgICAgICAgIGlmKHZwc19vbHNfbW9kZV9pZGMgPT0gMikgewo+ICsgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHZwc19udW1fb3V0cHV0X2xheWVyX3NldHNfbWludXMyID0gZ2V0 X2JpdHMoZ2IsIDgpOwo+ICsgICAgICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDE7IGkgPD0gdnBz X251bV9vdXRwdXRfbGF5ZXJfc2V0c19taW51czIgKzE7IGkrKykgewo+ICsgICAgICAgICAgICAg ICAgICAgIGZvciggaW50IGogPSAwOyBqIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaisrKSB7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOwo+ICsgICAgICAgICAg ICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAg ICAgIH0KPiArICAgICAgICB2cHNfbnVtX3B0bHNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDgpOwo+ ICsgICAgfQo+ICsKPiArICAgIHZwc19wdF9wcmVzZW50X2ZsYWcgPSAodW5zaWduZWQgaW50ICop IG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqICh2cHNfbnVtX3B0bHNfbWludXMxKzEpKTsK PiArICAgIHZwc19wdGxfbWF4X3RpZCA9ICh1bnNpZ25lZCBpbnQgKikgbWFsbG9jKHNpemVvZih1 bnNpZ25lZCBpbnQpICogKHZwc19udW1fcHRsc19taW51czErMSkpOwo+ICsgICAgZm9yKGludCBp ID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNfbWludXMxOyBpKyspIHsKPiArICAgICAgICBpZihpPjAp Cj4gKyAgICAgICAgICAgICAgICAgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSA9IGdldF9iaXRzMShn Yik7Cj4gKyAgICAgICAgaWYoIXZwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZykK PiArICAgICAgICAgICAgICAgICB2cHNfcHRsX21heF90aWRbaV0gPSBnZXRfYml0cyhnYiwgMyk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgd2hpbGUoZ2ItPmluZGV4JTggIT0gMCkKPiArICAgICAgICBz a2lwX2JpdHMxKGdiKTsKPiArCj4gKyAgICBmb3IoaW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRs c19taW51czE7IGkrKykgewo+ICsgICAgICAgIHZ2Y2NfcGFyc2VfcHRsKGdiLCB2dmNjLCB2cHNf cHRfcHJlc2VudF9mbGFnW2ldLCB2cHNfcHRsX21heF90aWRbaV0pOwo+ICsgICAgfQo+ICsKPiAr ICAgIGZyZWUodnBzX3B0X3ByZXNlbnRfZmxhZyk7Cj4gKyAgICBmcmVlKHZwc19wdGxfbWF4X3Rp ZCk7Cj4gKwo+ICsgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50 ICovCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dmNjX3BhcnNlX3Nw cyhHZXRCaXRDb250ZXh0ICpnYiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNv ZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKPiArewo+ICsgICAgdW5zaWduZWQgaW50IHNw c19tYXhfc3ViX2xheWVyc19taW51czEsIGxvZzJfY3R1X3NpemVfbWludXM1Owo+ICsgICAgLy91 bnNpZ25lZCBpbnQgbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzLCBudW1fZGVsdGFfcG9jc1tW VkNfTUFYX1JFRl9QSUNfTElTVFNdOwo+ICsgICAgLy91bnNpZ25lZCBpbnQgc3BzX2Nocm9tYV9m b3JtYXRfaWRjOwo+ICsgICAgdW5zaWduZWQgaW50IHNwc19zdWJwaWNfc2FtZV9zaXplX2ZsYWcs IHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSwgc3BzX3BpY193aWR0aF9tYXhfaW5f bHVtYV9zYW1wbGU7Cj4gKyAgICB1bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5kYW50X3N1YnBpY3Nf ZmxhZzsKPiArICAgIHVuc2lnbmVkIGludCBmbGFnOwo+ICsKPiArICAgIHNraXBfYml0cyhnYiwg OCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAmJiBzcHNfdmlkZW9fcGFyYW1ldGVyX3Nl dF9pZAo+ICsgICAgc3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMSA9IGdldF9iaXRzIChnYiwgMyk7 Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIG51bVRlbXBvcmFsTGF5ZXJzIGdyZWF0ZXIgdGhhbiAx IGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gdG8gd2hpY2ggdGhpcwo+ICsgICAgICogY29uZmln dXJhdGlvbiByZWNvcmQgYXBwbGllcyBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlIGFuZCB0aGUgY29u dGFpbmVkCj4gKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVycmVk IHRvIGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgo+ICsgICAgICogc3ViLWxheWVyIGluIElTTy9J RUMgMjMwMDgtMikgaXMgZXF1YWwgdG8gbnVtVGVtcG9yYWxMYXllcnMuIFZhbHVlIDEKPiArICAg ICAqIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gaXMgbm90IHRlbXBvcmFsbHkgc2NhbGFibGUu IFZhbHVlIDAgaW5kaWNhdGVzCj4gKyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0 aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCj4gKyAgICAgKi8KPiArICAgIHZ2Y2Mt Pm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5udW1fc3VibGF5ZXJzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxICsgMSk7 Cj4gKwo+ICsgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMgPSBnZXRfYml0cyhnYiwgMik7Cj4g KyAgICBsb2cyX2N0dV9zaXplX21pbnVzNSA9IGdldF9iaXRzKGdiLCAyKTsKPiArCj4gKyAgICBp ZihnZXRfYml0czEoZ2IpKSAvL3Nwc19wdGxfZHBiX2hyZF9wYXJhbXNfcHJlc2VudF9mbGFnCj4g KyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2Y2MsIDEsIHNwc19tYXhfc3ViX2xheWVyc19t aW51czEpOwo+ICsKPiArICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7IC8vc2tpcF9iaXRzMShn Yik7IC8vc3BzX2dkcl9lbmFibGVkX2ZsYWcKPiArICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7 ICAvL3Nwc19yZWZfcGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9mbGFnCj4gKyAgICBpZihmbGFnKXsg Ly9zcHNfcmVmX3BpY19yZXNhbXBsaW5nX2VuYWJsZWRfZmxhZwo+ICsgICAgICAgIGZsYWcgPSBn ZXRfYml0cyhnYiwgMSk7IC8vc2tpcF9iaXRzMShnYik7IC8vc3BzX3Jlc19jaGFuZ2VfaW5fY2x2 c19hbGxvd2VkX2ZsYWcKPiArICAgIH0KPiArCj4gKyAgICBzcHNfcGljX3dpZHRoX21heF9pbl9s dW1hX3NhbXBsZSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7Cj4gKyAgICB2dmNjLT5tYXhfcGlj dHVyZV93aWR0aCA9IEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoICwgc3BzX3BpY193aWR0 aF9tYXhfaW5fbHVtYV9zYW1wbGUpOwo+ICsgICAgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFf c2FtcGxlPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOwo+ICsgICAgdnZjYy0+bWF4X3BpY3R1cmVf aGVpZ2h0ID0gRkZNQVgodnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0ICwgc3BzX3BpY19oZWlnaHRf bWF4X2luX2x1bWFfc2FtcGxlKTsKPiArCj4gKyAgICBpZihnZXRfYml0czEoZ2IpKSB7Cj4gKyAg ICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX2xlZnRfb2Zmc2V0 Cj4gKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX3JpZ2h0 X29mZnNldAo+ICsgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19jb25mX3dp bl90b3Bfb2Zmc2V0Cj4gKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2Nv bmZfd2luX2JvdHRvbV9vZmZzZXQKPiArICAgIH0KPiArCj4gKyAgICBpZihnZXRfYml0czEoZ2Ip KSB7IC8vIHNwc19zdWJwaWNfaW5mb19wcmVzZW50X2ZsYWcKPiArICAgICAgICB1bnNpZ25lZCBp bnQgc3BzX251bV9zdWJwaWNzX21pbnVzMSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7Cj4gKyAg ICAgICAgaWYoc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDApIHsgLy8gc3BzX251bV9zdWJwaWNz X21pbnVzMQo+ICsgICAgICAgICAgICBzcHNfaW5kZXBlbmRhbnRfc3VicGljc19mbGFnID0gZ2V0 X2JpdHMxKGdiKTsKPiArICAgICAgICAgICAgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZyA9IGdl dF9iaXRzMShnYik7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGZvcihpbnQgaSA9IDA7IHNwc19u dW1fc3VicGljc19taW51czEgPiAwICYmIGkgPD0gc3BzX251bV9zdWJwaWNzX21pbnVzMTsgaSsr KSB7Cj4gKyAgICAgICAgICAgIGlmKCFzcHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnIHx8IGkgPT0g MCkgewo+ICsgICAgICAgICAgICAgICAgaW50IGxlbiA9IEZGTUlOKGxvZzJfY3R1X3NpemVfbWlu dXM1ICs1LCAxNik7Cj4gKyAgICAgICAgICAgICAgICBpZihpID4gMCAmJiBzcHNfcGljX3dpZHRo X21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKPiArICAgICAgICAgICAgICAgICAgICBza2lwX2Jp dHMoZ2IsIGxlbik7Cj4gKyAgICAgICAgICAgICAgICBpZihpID4gMCAmJiBzcHNfcGljX2hlaWdo dF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCj4gKyAgICAgICAgICAgICAgICAgICAgc2tpcF9i aXRzKGdiLCBsZW4pOwo+ICsgICAgICAgICAgICAgICAgaWYoaSA8IHNwc19udW1fc3VicGljc19t aW51czEgJiYgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCj4gKyAgICAg ICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4pOwo+ICsgICAgICAgICAgICAgICAgaWYo aSA8IHNwc19udW1fc3VicGljc19taW51czEgJiYgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFf c2FtcGxlID4gMTI4KQo+ICsgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsK PiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBpZighc3BzX2luZGVwZW5kYW50X3N1YnBp Y3NfZmxhZykgewo+ICsgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAyKTsgLy8gc3BzX3N1 YnBpY190cmVhdGVkX2FzX3BpY19mbGFnICYmIHNwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc3VicGlj X2VuYWJsZWRfZmxhZwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGdl dF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19zdWJwaWNfaWRfbGVuX21pbnVzMQo+ICsgICAg ICAgIGlmKGdldF9iaXRzMShnYikpIHsgLy8gc3BzX3N1YnBpY19pZF9tYXBwaW5nX2V4cGxpY2l0 bHlfc2lnbmFsbGVkX2ZsYWcKPiArICAgICAgICAgICAgaWYoZ2V0X2JpdHMxKGdiKSkgLy8gc3Bz X3N1YnBpY19pZF9tYXBwaW5nX3ByZXNlbnRfZmxhZwo+ICsgICAgICAgICAgICBmb3IoaW50IGkg PSAwOyBpIDw9IHNwc19udW1fc3VicGljc19taW51czE7IGkrKykgewo+ICsgICAgICAgICAgICAg ICAgc2tpcF9iaXRzMShnYik7IC8vIHNwc19zdWJwaWNfaWRbaV0KPiArICAgICAgICAgICAgfQo+ ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPSBnZXRf dWVfZ29sb21iX2xvbmcoZ2IpOwo+ICsKPiArICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNj IHBhc3QgdGhpcyBwb2ludCAqLwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgdnZjY19wYXJzZV9wcHMoR2V0Qml0Q29udGV4dCAqZ2IsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCj4gK3sKPiArCj4g KyAgICAvLyBOb3RoaW5nIG9mIGltcG9ydGFuY2UgdG8gcGFyc2UgaW4gUFBTCj4gKyAgICAvKiBu b3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9pbnQgKi8KPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBuYWxfdW5pdF9wYXJzZV9oZWFkZXIoR2V0Qml0Q29u dGV4dCAqZ2IsIHVpbnQ4X3QgKm5hbF90eXBlKQo+ICt7Cj4gKyAgICAvKgo+ICsgICAgICogZm9y YmlkZGVuX3plcm9fYml0ICAgIHUoMSkKPiArICAgICAqIG51aF9yZXNlcnZlZF96ZXJvX2JpdCB1 KDEpCj4gKyAgICAgKiBudWhfbGF5ZXJfaWQgICAgICAgICAgdSg2KQo+ICsgICAgICovCj4gKyAg ICBza2lwX2JpdHMoZ2IsIDgpOwo+ICsgICAgKm5hbF90eXBlID0gZ2V0X2JpdHMoZ2IsIDUpOwo+ ICsKPiArICAgIC8qCj4gKyAgICAgKiBudWhfdGVtcG9yYWxfaWRfcGx1czEgdSgzKQo+ICsgICAg ICovCj4gKyAgICBza2lwX2JpdHMoZ2IsIDMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZ2Y2Nf YXJyYXlfYWRkX25hbF91bml0KHVpbnQ4X3QgKm5hbF9idWYsIHVpbnQzMl90IG5hbF9zaXplLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbmFsX3R5cGUsIGlu dCBwc19hcnJheV9jb21wbGV0ZW5lc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCj4gK3sKPiArICAgIGlu dCByZXQ7Cj4gKyAgICB1aW50OF90IGluZGV4Owo+ICsgICAgdWludDE2X3QgbnVtX25hbHVzOwo+ ICsgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7Cj4gKwo+ICsgICAgZm9yIChpbmRleCA9IDA7 IGluZGV4IDwgdnZjYy0+bnVtX29mX2FycmF5czsgaW5kZXgrKykKPiArICAgICAgICBpZiAodnZj Yy0+YXJyYXlbaW5kZXhdLk5BTF91bml0X3R5cGUgPT0gbmFsX3R5cGUpCj4gKyAgICAgICAgICAg IGJyZWFrOwo+ICsKPiArICAgIGlmIChpbmRleCA+PSB2dmNjLT5udW1fb2ZfYXJyYXlzKSB7Cj4g KyAgICAgICAgdWludDhfdCBpOwo+ICsKPiArICAgICAgICByZXQgPSBhdl9yZWFsbG9jcF9hcnJh eSgmdnZjYy0+YXJyYXksIGluZGV4ICsgMSwgc2l6ZW9mKFZWQ0NOQUxVbml0QXJyYXkpKTsKPiAr ICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAg ICAgICAgZm9yIChpID0gdnZjYy0+bnVtX29mX2FycmF5czsgaSA8PSBpbmRleDsgaSsrKQo+ICsg ICAgICAgICAgICBtZW1zZXQoJnZ2Y2MtPmFycmF5W2ldLCAwLCBzaXplb2YoVlZDQ05BTFVuaXRB cnJheSkpOwo+ICsgICAgICAgIHZ2Y2MtPm51bV9vZl9hcnJheXMgPSBpbmRleCArIDE7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgYXJyYXkgICAgPSAmdnZjYy0+YXJyYXlbaW5kZXhdOwo+ICsgICAgbnVt X25hbHVzID0gYXJyYXktPm51bV9uYWx1czsKPiArCj4gKyAgICByZXQgPSBhdl9yZWFsbG9jcF9h cnJheSgmYXJyYXktPm5hbF91bml0LCBudW1fbmFsdXMgKyAxLCBzaXplb2YodWludDhfdCopKTsK PiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgcmV0 ID0gYXZfcmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5pdF9sZW5ndGgsIG51bV9uYWx1cyAr IDEsIHNpemVvZih1aW50MTZfdCkpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0 dXJuIHJldDsKPiArCj4gKyAgICBhcnJheS0+bmFsX3VuaXQgICAgICAgW251bV9uYWx1c10gPSBu YWxfYnVmOwo+ICsgICAgYXJyYXktPm5hbF91bml0X2xlbmd0aFtudW1fbmFsdXNdID0gbmFsX3Np emU7Cj4gKyAgICBhcnJheS0+TkFMX3VuaXRfdHlwZSAgICAgICAgICAgICAgPSBuYWxfdHlwZTsK PiArICAgIGFycmF5LT5udW1fbmFsdXMrKzsKPiArCj4gKyAgICAvKgo+ICsgICAgICogV2hlbiB0 aGUgc2FtcGxlIGVudHJ5IG5hbWUgaXMg4oCYdnZjMeKAmSwgdGhlIGRlZmF1bHQgYW5kIG1hbmRh dG9yeSB2YWx1ZSBvZgo+ICsgICAgICogYXJyYXlfY29tcGxldGVuZXNzIGlzIDEgZm9yIGFycmF5 cyBvZiBhbGwgdHlwZXMgb2YgcGFyYW1ldGVyIHNldHMsIGFuZCAwCj4gKyAgICAgKiBmb3IgYWxs IG90aGVyIGFycmF5cy4gV2hlbiB0aGUgc2FtcGxlIGVudHJ5IG5hbWUgaXMg4oCYaGV2MeKAmSwg dGhlIGRlZmF1bHQKPiArICAgICAqIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcyBpcyAwIGZv ciBhbGwgYXJyYXlzLgo+ICsgICAgICovCj4gKyAgICBpZiAobmFsX3R5cGUgPT0gVlZDX1ZQU19O VVQgfHwgbmFsX3R5cGUgPT0gVlZDX1NQU19OVVQgfHwgbmFsX3R5cGUgPT0gVlZDX1BQU19OVVQp Cj4gKyAgICAgICAgYXJyYXktPmFycmF5X2NvbXBsZXRlbmVzcyA9IHBzX2FycmF5X2NvbXBsZXRl bmVzczsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dmNjX2Fk ZF9uYWxfdW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxfc2l6ZSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2 dmNjKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIEdldEJpdENvbnRleHQgZ2JjOwo+ ICsgICAgdWludDhfdCBuYWxfdHlwZTsKPiArICAgIHVpbnQ4X3QgKnJic3BfYnVmOwo+ICsgICAg dWludDMyX3QgcmJzcF9zaXplOwo+ICsKPiArICAgIHJic3BfYnVmID0gZmZfbmFsX3VuaXRfZXh0 cmFjdF9yYnNwKG5hbF9idWYsIG5hbF9zaXplLCAmcmJzcF9zaXplLCAyKTsKPiArICAgIGlmICgh cmJzcF9idWYpIHsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAg Z290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gaW5pdF9nZXRfYml0czgoJmdiYywg cmJzcF9idWYsIHJic3Bfc2l6ZSk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICBnb3Rv IGVuZDsKPiArCj4gKyAgICBuYWxfdW5pdF9wYXJzZV9oZWFkZXIoJmdiYywgJm5hbF90eXBlKTsK PiArCj4gKyAgICAvKgo+ICsgICAgICogTm90ZTogb25seSAnZGVjbGFyYXRpdmUnIFNFSSBtZXNz YWdlcyBhcmUgYWxsb3dlZCBpbgo+ICsgICAgICogdnZjYy4gUGVyaGFwcyB0aGUgU0VJIHBsYXls b2FkIHR5cGUgc2hvdWxkIGJlIGNoZWNrZWQKPiArICAgICAqIGFuZCBub24tZGVjbGFyYXRpdmUg U0VJIG1lc3NhZ2VzIGRpc2NhcmRlZD8KPiArICAgICAqLwo+ICsgICAgc3dpdGNoIChuYWxfdHlw ZSkgewo+ICsgICAgY2FzZSBWVkNfT1BJX05VVDoKPiArICAgIGNhc2UgVlZDX1ZQU19OVVQ6Cj4g KyAgICBjYXNlIFZWQ19TUFNfTlVUOgo+ICsgICAgY2FzZSBWVkNfUFBTX05VVDoKPiArICAgIGNh c2UgVlZDX1BSRUZJWF9TRUlfTlVUOgo+ICsgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6Cj4g KyAgICAgICAgcmV0ID0gdnZjY19hcnJheV9hZGRfbmFsX3VuaXQobmFsX2J1ZiwgbmFsX3NpemUs IG5hbF90eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzX2Fy cmF5X2NvbXBsZXRlbmVzcywgdnZjYyk7Cj4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAg ICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19WUFNf TlVUKQo+ICsgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3ZwcygmZ2JjLCB2dmNjKTsKPiAr ICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCkKPiArICAgICAgICAgICAg cmV0ID0gdnZjY19wYXJzZV9zcHMoJmdiYywgdnZjYyk7Cj4gKyAgICAgICAgZWxzZSBpZiAobmFs X3R5cGUgPT0gVlZDX1BQU19OVVQpCj4gKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2VfcHBz KCZnYmMsIHZ2Y2MpOwo+ICsgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19PUElfTlVU KSB7Cj4gKyAgICAgICAgICAgICAvLyBub3QgeWV0IHN1cHBvcnRlZAo+ICsgICAgICAgIH0KPiAr ICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAgICAg YnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICtlbmQ6Cj4gKyAgICBhdl9m cmVlKHJic3BfYnVmKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZ2Y2NfaW5pdChWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKPiArewo+ICsg ICAgbWVtc2V0KHZ2Y2MsIDAsIHNpemVvZihWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCkp Owo+ICsgICAgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lICAgPSAzOyAvLyA0IGJ5dGVzCj4gKwo+ ICsgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gPSAxOwo+ICsKPiArICAg IHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcgPSAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2dmNj X2Nsb3NlKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQo+ICt7Cj4gKyAgICB1 aW50OF90IGk7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7 IGkrKykgewo+ICsgICAgICAgIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyA9IDA7Cj4gKyAgICAg ICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0KTsKPiArICAgICAgICBhdl9mcmVl cCgmdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoKTsKPiArICAgIH0KPiArCj4gKyAgICBm cmVlKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnKTsKPiArICAgIGZy ZWUodnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYyk7Cj4gKyAgICBmcmVlKHZ2Y2MtPnB0bC5n ZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyk7Cj4gKwo+ICsgICAgdnZjYy0+bnVtX29mX2FycmF5cyA9 IDA7Cj4gKyAgICBhdl9mcmVlcCgmdnZjYy0+YXJyYXkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHZ2Y2Nfd3JpdGUoQVZJT0NvbnRleHQgKnBiLCBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29y ZCAqdnZjYykKPiArewo+ICsgICAgdWludDhfdCBpOwo+ICsgICAgdWludDE2X3QgaiwgdnBzX2Nv dW50ID0gMCwgc3BzX2NvdW50ID0gMCwgcHBzX2NvdW50ID0gMDsKPiArICAgIHVuc2lnbmVkIGNo YXIgKmJ1ZiA9IE5VTEw7Cj4gKyAgICAvKgo+ICsgICAgICogSXQncyB1bmNsZWFyIGhvdyB0byBw cm9wZXJseSBjb21wdXRlIHRoZXNlIGZpZWxkcywgc28KPiArICAgICAqIGxldCdzIGFsd2F5cyBz ZXQgdGhlbSB0byB2YWx1ZXMgbWVhbmluZyAndW5zcGVjaWZpZWQnLgo+ICsgICAgICovCj4gKyAg ICB2dmNjLT5hdmdfZnJhbWVfcmF0ZSAgICAgID0gMDsKPiArICAgIHZ2Y2MtPmNvbnN0YW50X2Zy YW1lX3JhdGUgPSAxOwo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAibGVu Z3RoU2l6ZU1pbnVzT25lOiAgICAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAo+ICsgICAgICAg ICAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUpOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19UUkFDRSwgICJwdGxfcHJlc2VudF9mbGFnOiAgICAgICAgICAgICAgICAgICAgJSJQUkl1OCJc biIsCj4gKyAgICAgICAgICAgIHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcpOwo+ICsgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19UUkFDRSwgICJvbHNfaWR4OiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJSJQUkl1MTYiXG4iLAo+ICsgICAgICAgICAgICB2dmNjLT5vbHNfaWR4KTsKPiArICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAibnVtX3N1YmxheWVyczogICAgICAgICAgICAgICAg ICAgICAgICUiUFJJdTgiXG4iLAo+ICsgICAgICAgICAgICB2dmNjLT5udW1fc3VibGF5ZXJzKTsK PiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiY29uc3RhbnRfZnJhbWVfcmF0ZTog ICAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAo+ICsgICAgICAgICAgICB2dmNjLT5jb25zdGFu dF9mcmFtZV9yYXRlKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiY2hyb21h X2Zvcm1hdF9pZGM6ICAgICAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAo+ICsgICAgICAgICAg ICB2dmNjLT5jaHJvbWFfZm9ybWF0X2lkYyk7Cj4gKwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19UUkFDRSwgICJiaXRfZGVwdGhfbWludXM4OiAgICAgICAgICAgICAgICAgICAgJSJQUkl1OCJc biIsCj4gKyAgICAgICAgICAgIHZ2Y2MtPmJpdF9kZXB0aF9taW51czgpOwo+ICsgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19UUkFDRSwgICJudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOiAgICAgICAg ICAgJSJQUkl1OCJcbiIsCj4gKyAgICAgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3Ry YWludF9pbmZvKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiZ2VuZXJhbF9w cm9maWxlX2lkYzogICAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAo+ICsgICAgICAgICAgICB2 dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9H X1RSQUNFLCAgImdlbmVyYWxfdGllcl9mbGFnOiAgICAgICAgICAgICAgICAgICAlIlBSSXU4Ilxu IiwKPiArICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnKTsKPiArICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiZ2VuZXJhbF9sZXZlbF9pZGM6ICAgICAgICAgICAg ICAgICAgICUiUFJJdTgiXG4iLAo+ICsgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZl bF9pZGMpOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJwdGxfZnJhbWVfb25s eV9jb25zdHJhaW50X2ZsYWc6ICAgICAgJSJQUkl1OCJcbiIsCj4gKyAgICAgICAgICAgIHZ2Y2Mt PnB0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcpOwo+ICsgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwgICJwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc6ICAgICAgICAgJSJQ Ukl1OCJcbiIsCj4gKyAgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVk X2ZsYWcpOwo+ICsgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3Ry YWludF9pbmZvOyBpKyspIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAg ImdlbmVyYWxfY29uc3RyYWludF9pbmZvWyVkXTogICAgICAgICAgJSJQUkl1OCJcbiIsCj4gKyAg ICAgICAgICAgICAgIGksIHZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1tpXSk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9zdWJsYXllcnMtMTsg aSsrKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJwdGxfc3VibGF5 ZXJfbGV2ZWxfcHJlc2VudF9mbGFnWyUiUFJJdTgiXTogICUiUFJJdTgiXG4iLAo+ICsgICAgICAg ICAgICAgICAgaSwgdnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0p Owo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAic3VibGF5ZXJfbGV2ZWxf aWRjWyUiUFJJdTgiXTogJSJQUkl1OCJcbiIsCj4gKyAgICAgICAgICAgICAgICBpLCB2dmNjLT5w dGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKPiArICAgIH0KPiArCj4gKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLCAgIm51bV9zdWJfcHJvZmlsZXM6ICAgICAgICAgICAgICAgICAgICAl IlBSSXU4IlxuIiwKPiArICAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVz KTsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2Zp bGVzOyBpKyspIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgImdlbmVy YWxfc3ViX3Byb2ZpbGVfaWRjWyUiUFJJdTgiXTogICAgICAgICAlIlBSSXgzMiJcbiIsCj4gKyAg ICAgICAgICAgICAgICBpLCB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbaV0pOwo+ ICsgICAgfQo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAibWF4X3BpY3R1 cmVfd2lkdGg6ICAgICAgICAgICAgICAgICAgICUiUFJJdTE2IlxuIiwKPiArICAgICAgICAgICAg dnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFD RSwgICJtYXhfcGljdHVyZV9oZWlnaHQ6ICAgICAgICAgICAgICAgICAgJSJQUkl1MTYiXG4iLAo+ ICsgICAgICAgICAgICB2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQpOwo+ICsgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwgICJhdmdfZnJhbWVfcmF0ZTogICAgICAgICAgICAgICAgICAgICAg JSJQUkl1MTYiXG4iLAo+ICsgICAgICAgICAgICB2dmNjLT5hdmdfZnJhbWVfcmF0ZSk7Cj4gKwo+ ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJudW1fb2ZfYXJyYXlzOiAgICAgICAg ICAgICAgICAgICAgICAgJSJQUkl1OCJcbiIsCj4gKyAgICAgICAgICAgIHZ2Y2MtPm51bV9vZl9h cnJheXMpOwo+ICsgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykg ewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICJhcnJheV9jb21wbGV0ZW5l c3NbJSJQUkl1OCJdOiAgICAgICAgICAgICAgICUiUFJJdTgiXG4iLAo+ICsgICAgICAgICAgICAg ICAgaSwgdnZjYy0+YXJyYXlbaV0uYXJyYXlfY29tcGxldGVuZXNzKTsKPiArICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX1RSQUNFLCAiTkFMX3VuaXRfdHlwZVslIlBSSXU4Il06ICAgICAgICAg ICAgICAgICAgICAlIlBSSXU4IlxuIiwKPiArICAgICAgICAgICAgICAgIGksIHZ2Y2MtPmFycmF5 W2ldLk5BTF91bml0X3R5cGUpOwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0Us ICJudW1fbmFsdXNbJSJQUkl1OCJdOiAgICAgICAgICAgICAgICAgICAgICAgICUiUFJJdTE2Ilxu IiwKPiArICAgICAgICAgICAgICAgIGksIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyk7Cj4gKyAg ICAgICAgZm9yIChqID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKQo+ICsg ICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+ICsgICAgICAgICAgICAgICAg ICAgICJuYWxfdW5pdF9sZW5ndGhbJSJQUkl1OCJdWyUiUFJJdTE2Il06ICAgICAgICAgICAgICAg JSJQUkl1MTYiXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgIGksIGosIHZ2Y2MtPmFycmF5W2ld Lm5hbF91bml0X2xlbmd0aFtqXSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIFdl IG5lZWQgYXQgbGVhc3Qgb25lIG9mIGVhY2g6IFZQUyBhbmQgU1BTLgo+ICsgICAgICovCj4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKQo+ICsgICAgICAgIHN3 aXRjaCAodnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSkgewo+ICsgICAgICAgIGNhc2UgVlZD X1ZQU19OVVQ6Cj4gKyAgICAgICAgICAgIHZwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1f bmFsdXM7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6 Cj4gKyAgICAgICAgICAgIHNwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7Cj4g KyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6Cj4gKyAgICAg ICAgICAgIHBwc19jb3VudCArPSB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7Cj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICBpZiAoIXNwc19jb3VudCB8fCBzcHNfY291bnQgPiBWVkNfTUFY X1NQU19DT1VOVCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4g KyAgICAvKiBiaXQoNSkgcmVzZXJ2ZWQgPSDigJgxMTExMeKAmWI7Cj4gKyAgICAgICB1bnNpZ25l ZCBpbnQgKDIpIExlbmd0aFNpemVNaW51c09uZQo+ICsgICAgICAgdW5zaWduZWQgaW50ICgxKSBw dGxfcHJlc2VudF9mbGFnICovCj4gKyAgICBhdmlvX3c4KHBiLCB2dmNjLT5sZW5ndGhTaXplTWlu dXNPbmUgPDwgMSB8IHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcgfCAweGY4KTsKPiArCj4gKyAgICBp Zih2dmNjLT5wdGxfcHJlc2VudF9mbGFnKSB7Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAqIHVu c2lnbmVkIGludCg5KSBvbHNfaWR4Owo+ICsgICAgICAgICogdW5zaWduZWQgaW50KDMpIG51bV9z dWJsYXllcnM7Cj4gKyAgICAgICAgKiB1bnNpZ25lZCBpbnQoMikgY29uc3RhbnRfZnJhbWVfcmF0 ZTsKPiArICAgICAgICAqIHVuc2lnbmVkIGludCgyKSBjaHJvbWFfZm9ybWF0X2lkYzsgICAgICov Cj4gKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5vbHNfaWR4IDw8IDcgfCB2dmNjLT5udW1f c3VibGF5ZXJzIDw8IDQgfCB2dmNjLT5jb25zdGFudF9mcmFtZV9yYXRlIDw8IDIgfCB2dmNjLT5j aHJvbWFfZm9ybWF0X2lkYyk7Cj4gKwo+ICsgICAgICAgIC8qIHVuc2lnbmVkIGludCgzKSBiaXRf ZGVwdGhfbWludXM4Owo+ICsgICAgICAgICAgYml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJli OyovCj4gKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCA8PCA1IHwg MHgxZik7Cj4gKwo+ICsgICAgICAgIC8vVlZDUFRMUmVjb3JkCj4gKwo+ICsgICAgICAgIC8qIGJp dCgyKSByZXNlcnZlZCA9IOKAmDAw4oCZYjsKPiArICAgICAgICAgIHVuc2lnbmVkIGludCAoNikg bnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAqLwo+ICsgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2Mt PnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICYgMHgzZik7Cj4gKwo+ICsgICAgICAgIC8q IHVuc2lnbmVkIGludCAoNykgZ2VuZXJhbF9wcm9maWxlX2lkYwo+ICsgICAgICAgICAgdW5zaWdu ZWQgaW50ICgxKSBnZW5lcmFsX3RpZXJfZmxhZyAqLwo+ICsgICAgICAgIGF2aW9fdzgocGIsIHZ2 Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjIDw8IDEgfCB2dmNjLT5wdGwuZ2VuZXJhbF90aWVy X2ZsYWcpOwo+ICsKPiArICAgICAgICAvKiB1bnNpZ25lZCBpbnQgKDgpIGdlbmVyYWxfbGV2ZWxf aWRjICovCj4gKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRj KTsKPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAqIHVuc2lnbmVkIGludCAoMSkgcHRsX2Zy YW1lX29ubHlfY29uc3RyYWludF9mbGFnCj4gKyAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDEpIHB0 bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZwo+ICsgICAgICAgICogdW5zaWduZWQgaW50ICg4Km51 bV9ieXRlc19jb25zdHJhaW50X2luZm8gLTIpIGdlbmVyYWxfY29uc3RyYWludF9pbmZvICovCj4g KyAgICAgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jKHNpemVvZih1bnNpZ25lZCBj aGFyKSAqIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsKPiArICAgICAgICAq YnVmID0gdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA8PCB2dmNjLT5w dGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyo4LTEgfCB2dmNjLT5wdGwucHRsX211bHRpbGF5 ZXJfZW5hYmxlZF9mbGFnIDw8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKjgt MiB8ICp2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gPj4gMjsKPiArICAgICAgICBh dmlvX3dyaXRlKHBiLCBidWYsIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsK PiArICAgICAgICBmcmVlKGJ1Zik7Cj4gKwo+ICsgICAgICAgIGlmKHZ2Y2MtPm51bV9zdWJsYXll cnMgPiAxKSB7Cj4gKyAgICAgICAgICB1aW50OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50 X2ZsYWdzID0gMDsKPiArICAgICAgICAgIGZvcihpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMg LTI7IGkgPj0gMDsgaS0tKSB7Cj4gKyAgICAgICAgICAgIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWdzID0gKHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzIDw8IDEgfCB2dmNj LT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSk7Cj4gKyAgICAgICAgICB9 Cj4gKyAgICAgICAgICBhdmlvX3c4KHBiLCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFn cyk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBmb3IoaW50IGkgPSB2dmNjLT5udW1fc3Vi bGF5ZXJzIC0yOyBpID49IDA7IGktLSkgewo+ICsgICAgICAgICAgaWYodnZjYy0+cHRsLnB0bF9z dWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pCj4gKyAgICAgICAgICAgIGF2aW9fdzgocGIs IHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOwo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgLyogdW5zaWduZWQgaW50KDgpIG51bV9zdWJfcHJvZmlsZXM7ICovCj4gKyAgICAgICAg YXZpb193OChwYiwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKPiArCj4gKyAgICAg ICAgZm9yKGludCBqID0gMDsgaiA8IHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlczsgaisr KSB7Cj4gKyAgICAgICAgLyogdW5zaWduZWQgaW50KDMyKSBnZW5lcmFsX3N1Yl9wcm9maWxlX2lk Y1tqXTsgKi8KPiArICAgICAgICBhdmlvX3diMzIocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9w cm9maWxlX2lkY1tqXSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvL0VuZCBvZiBWdmNQ VExSZWNvcmQKPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAqIHVuc2lnbmVkIGludCgxNikg bWF4X3BpY3R1cmVfd2lkdGg7Ki8KPiArICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPm1heF9w aWN0dXJlX3dpZHRoKTsKPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAqIHVuc2lnbmVkIGlu dCgxNikgbWF4X3BpY3R1cmVfaGVpZ2h0OyovCj4gKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNj LT5tYXhfcGljdHVyZV9oZWlnaHQpOwo+ICsKPiArICAgICAgICAvKgo+ICsgICAgICAgICogdW5z aWduZWQgaW50KDE2KSBhdmdfZnJhbWVfcmF0ZTsgKi8KPiArICAgICAgICBhdmlvX3diMTYocGIs IHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiB1bnNpZ25lZCBp bnQoOCkgbnVtX29mX2FycmF5czsgKi8KPiArICAgIGF2aW9fdzgocGIsIHZ2Y2MtPm51bV9vZl9h cnJheXMpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBp KyspIHsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAqIGJpdCgxKSBhcnJheV9jb21wbGV0ZW5l c3M7Cj4gKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIHJlc2VydmVkID0gMDsKPiArICAgICAg ICAgKiB1bnNpZ25lZCBpbnQoNSkgTkFMX3VuaXRfdHlwZTsKPiArICAgICAgICAgKi8KPiArICAg ICAgYXZpb193OChwYiwgdnZjYy0+YXJyYXlbaV0uYXJyYXlfY29tcGxldGVuZXNzIDw8IDcgfAo+ ICsgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgJiAweDFm KTsKPiArICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYpIG51bV9uYWx1czsgKi8KPiArICAgICAg aWYodnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfRENJX05VVCAmJiB2dmNjLT5h cnJheVtpXS5OQUxfdW5pdF90eXBlICE9IFZWQ19PUElfTlVUKQo+ICsgICAgICAgIGF2aW9fd2Ix NihwYiwgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzKTsKPiArICAgICAgZm9yIChqID0gMDsgaiA8 IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKSB7Cj4gKyAgICAgICAgLyogdW5zaWduZWQg aW50KDE2KSBuYWxfdW5pdF9sZW5ndGg7ICovCj4gKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNj LT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOwo+ICsKPiArICAgICAgICAvKiBiaXQoOCpu YWxfdW5pdF9sZW5ndGgpIG5hbF91bml0OyAqLwo+ICsgICAgICAgIGF2aW9fd3JpdGUocGIsIHZ2 Y2MtPmFycmF5W2ldLm5hbF91bml0W2pdLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGhb al0pOwo+ICsgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4g K2ludCBmZl92dmNfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmJ1 Zl9pbiwKPiArICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IGZpbHRlcl9wcywg aW50ICpwc19jb3VudCkKPiArewo+ICsgICAgaW50IG51bV9wcyA9IDAsIHJldCA9IDA7Cj4gKyAg ICB1aW50OF90ICpidWYsICplbmQsICpzdGFydCA9IE5VTEw7Cj4gKwo+ICsgICAgaWYgKCFmaWx0 ZXJfcHMpIHsKPiArICAgICAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzKHBiLCBidWZf aW4sIHNpemUpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9 IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHNfYnVmKGJ1Zl9pbiwgJnN0YXJ0LCAmc2l6ZSk7Cj4gKyAg ICBpZiAocmV0IDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArCj4gKyAgICByZXQgPSAwOwo+ ICsgICAgYnVmID0gc3RhcnQ7Cj4gKyAgICBlbmQgPSBzdGFydCArIHNpemU7Cj4gKwo+ICsgICAg d2hpbGUgKGVuZCAtIGJ1ZiA+IDQpIHsKPiArICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihB Vl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQpOwo+ICsgICAgICAgIHVpbnQ4X3QgdHlwZSA9IChi dWZbNV0gPj4gMyk7Cj4gKwo+ICsgICAgICAgIGJ1ZiArPSA0Owo+ICsKPiArICAgICAgICBzd2l0 Y2ggKHR5cGUpIHsKPiArICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgo+ICsgICAgICAgIGNhc2Ug VlZDX1NQU19OVVQ6Cj4gKyAgICAgICAgY2FzZSBWVkNfUFBTX05VVDoKPiArICAgICAgICAgICAg bnVtX3BzKys7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAg ICAgICAgICAgIHJldCArPSA0ICsgbGVuOwo+ICsgICAgICAgICAgICBhdmlvX3diMzIocGIsIGxl bik7Cj4gKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIGJ1ZiwgbGVuKTsKPiArICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBidWYgKz0gbGVuOwo+ICsgICAg fQo+ICsKPiArZW5kOgo+ICsgICAgYXZfZnJlZShzdGFydCk7Cj4gKyAgICBpZiAocHNfY291bnQp Cj4gKyAgICAgICAgKnBzX2NvdW50ID0gbnVtX3BzOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ ICsKPiAraW50IGZmX3Z2Y19hbm5leGIybXA0X2J1Zihjb25zdCB1aW50OF90ICpidWZfaW4sIHVp bnQ4X3QgKipidWZfb3V0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNpemUs IGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpCj4gK3sKPiArICAgIEFWSU9Db250ZXh0ICpw YjsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgcmV0ID0gYXZpb19vcGVuX2R5bl9idWYoJnBi KTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAg cmV0ICAgPSBmZl92dmNfYW5uZXhiMm1wNChwYiwgYnVmX2luLCAqc2l6ZSwgZmlsdGVyX3BzLCBw c19jb3VudCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGZmaW9fZnJlZV9keW5f YnVmKCZwYik7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICAqc2l6 ZSA9IGF2aW9fY2xvc2VfZHluX2J1ZihwYiwgYnVmX291dCk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK2ludCBmZl9pc29tX3dyaXRlX3Z2Y2MoQVZJT0NvbnRleHQgKnBiLCBjb25z dCB1aW50OF90ICpkYXRhLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQg cHNfYXJyYXlfY29tcGxldGVuZXNzKQo+ICt7Cj4gKyAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlv blJlY29yZCB2dmNjOwo+ICsgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQ7Cj4gKyAgICBp bnQgcmV0Owo+ICsKPiArICAgIGlmIChzaXplIDwgNikgewo+ICsgICAgICAgIC8qIFdlIGNhbid0 IHdyaXRlIGEgdmFsaWQgdnZjYyBmcm9tIHRoZSBwcm92aWRlZCBkYXRhICovCj4gKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9IGVsc2UgaWYgKCpkYXRhID09IDEp IHsKPiArICAgICAgICAvKiBEYXRhIGlzIGFscmVhZHkgdnZjYy1mb3JtYXR0ZWQgKi8KPiArICAg ICAgICBhdmlvX3dyaXRlKHBiLCBkYXRhLCBzaXplKTsKPiArICAgICAgICByZXR1cm4gMDsKPiAr ICAgIH0gZWxzZSBpZiAoIShBVl9SQjI0KGRhdGEpID09IDEgfHwgQVZfUkIzMihkYXRhKSA9PSAx KSkgewo+ICsgICAgICAgIC8qIE5vdCBhIHZhbGlkIEFubmV4IEIgc3RhcnQgY29kZSBwcmVmaXgg Ki8KPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4g KyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihkYXRhLCAmc3RhcnQsICZzaXpl KTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAg dnZjY19pbml0KCZ2dmNjKTsKPiArCj4gKyAgICBidWYgPSBzdGFydDsKPiArICAgIGVuZCA9IHN0 YXJ0ICsgc2l6ZTsKPiArCj4gKyAgICB3aGlsZSAoZW5kIC0gYnVmID4gNCkgewo+ICsgICAgICAg IHVpbnQzMl90IGxlbiA9IEZGTUlOKEFWX1JCMzIoYnVmKSwgZW5kIC0gYnVmIC0gNCk7Cj4gKyAg ICAgICAgdWludDhfdCB0eXBlID0gKGJ1Zls1XSA+PiAzKTsKPiArCj4gKyAgICAgICAgYnVmICs9 IDQ7Cj4gKwo+ICsgICAgICAgIHN3aXRjaCAodHlwZSkgewo+ICsgICAgICAgY2FzZSBWVkNfT1BJ X05VVDoKPiArICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgo+ICsgICAgICAgIGNhc2UgVlZDX1NQ U19OVVQ6Cj4gKyAgICAgICAgY2FzZSBWVkNfUFBTX05VVDoKPiArICAgICAgICBjYXNlIFZWQ19Q UkVGSVhfU0VJX05VVDoKPiArICAgICAgICBjYXNlIFZWQ19TVUZGSVhfU0VJX05VVDoKPiArICAg ICAgICAgICAgcmV0ID0gdnZjY19hZGRfbmFsX3VuaXQoYnVmLCBsZW4sIHBzX2FycmF5X2NvbXBs ZXRlbmVzcywgJnZ2Y2MpOwo+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAg ICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBkZWZhdWx0 Ogo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGJ1ZiAr PSBsZW47Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gdnZjY193cml0ZShwYiwgJnZ2Y2MpOwo+ ICsKPiArZW5kOgo+ICsgICAgdnZjY19jbG9zZSgmdnZjYyk7Cj4gKyAgICBhdl9mcmVlKHN0YXJ0 KTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZj LmggYi9saWJhdmZvcm1hdC92dmMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMC4uY2RmNGY2ZDNmNQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZvcm1hdC92 dmMuaAo+IEBAIC0wLDAgKzEsOTkgQEAKPiArLyoKPiArICogVlZDIGhlbHBlciBmdW5jdGlvbnMg Zm9yIG11eGVycwo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAq Cj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsgKiBp bnRlcm5hbCBoZWFkZXIgZm9yIFZWQyAoZGUpbXV4ZXIgdXRpbGl0aWVzCj4gKyAqLwo+ICsKPiAr I2lmbmRlZiBBVkZPUk1BVF9WVkNfSAo+ICsjZGVmaW5lIEFWRk9STUFUX1ZWQ19ICj4gKwo+ICsj aW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlICJhdmlvLmgiCj4gKwo+ICsvKioKPiArICog V3JpdGVzIEFubmV4IEIgZm9ybWF0dGVkIFZWQyBOQUwgdW5pdHMgdG8gdGhlIHByb3ZpZGVkIEFW SU9Db250ZXh0Lgo+ICsgKgo+ICsgKiBUaGUgTkFMIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gYW4g TVA0LWNvbXBhdGlibGUgZm9ybWF0IChzdGFydCBjb2RlIHByZWZpeGVzCj4gKyAqIGFyZSByZXBs YWNlZCBieSA0LWJ5dGUgc2l6ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KPiAr ICoKPiArICogSWYgZmlsdGVyX3BzIGlzIG5vbi16ZXJvLCBhbnkgVlZDIHBhcmFtZXRlciBzZXRz IGZvdW5kIGluIHRoZSBpbnB1dCB3aWxsIGJlCj4gKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3Vu dCB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCj4g KyAqCj4gKyAqIEBwYXJhbSBwYiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUg ZGF0YSBzaGFsbCBiZSB3cml0dGVuCj4gKyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUg YnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKPiArICogQHBhcmFtIHNpemUgc2l6ZSAoaW4g Ynl0ZXMpIG9mIHRoZSBpbnB1dCBidWZmZXIKPiArICogQHBhcmFtIGZpbHRlcl9wcyB3aGV0aGVy IHRvIHdyaXRlIHBhcmFtZXRlciBzZXQgTkFMIHVuaXRzIHRvIHRoZSBvdXRwdXQgKDApCj4gKyAq ICAgICAgICBvciB0byBkaXNjYXJkIHRoZW0gKG5vbi16ZXJvKQo+ICsgKiBAcGFyYW0gcHNfY291 bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBkaXNjYXJkZWQK PiArICogICAgICAgIHBhcmFtZXRlciBzZXQgTkFMIHVuaXRzIHNoYWxsIGJlIHdyaXR0ZW4sIG1h eSBiZSBOVUxMCj4gKyAqIEByZXR1cm4gdGhlIGFtb3VudCAoaW4gYnl0ZXMpIG9mIGRhdGEgd3Jp dHRlbiBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUKPiArICogICAgICAgICB2YWx1ZSBj b3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKPiArICov Cj4gK2ludCBmZl92dmNfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3Qg KmJ1Zl9pbiwKPiArICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IGZpbHRlcl9w cywgaW50ICpwc19jb3VudCk7Cj4gKwo+ICsvKioKPiArICogV3JpdGVzIEFubmV4IEIgZm9ybWF0 dGVkIFZWQyBOQUwgdW5pdHMgdG8gYSBkYXRhIGJ1ZmZlci4KPiArICoKPiArICogVGhlIE5BTCB1 bml0cyBhcmUgY29udmVydGVkIHRvIGFuIE1QNC1jb21wYXRpYmxlIGZvcm1hdCAoc3RhcnQgY29k ZSBwcmVmaXhlcwo+ICsgKiBhcmUgcmVwbGFjZWQgYnkgNC1ieXRlIHNpemUgZmllbGRzLCBhcyBw ZXIgSVNPL0lFQyAxNDQ5Ni0xNSkuCj4gKyAqCj4gKyAqIElmIGZpbHRlcl9wcyBpcyBub24temVy bywgYW55IFZWQyBwYXJhbWV0ZXIgc2V0cyBmb3VuZCBpbiB0aGUgaW5wdXQgd2lsbCBiZQo+ICsg KiBkaXNjYXJkZWQsIGFuZCAqcHNfY291bnQgd2lsbCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBk aXNjYXJkZWQgUFMgTkFMIHVuaXRzLgo+ICsgKgo+ICsgKiBPbiBzdWNjZXNzLCAqc2l6ZSBob2xk cyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBvdXRwdXQgZGF0YSBidWZmZXIuCj4gKyAqCj4g KyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0 IGRhdGEKPiArICogQHBhcmFtIHNpemUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgaG9sZGluZyB0 aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnB1dAo+ICsgKiAgICAgICAgYnVmZmVyIChvbiBp bnB1dCkgYW5kIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChvbiBzdWNjZXNzKQo+ICsgKiBAcGFyYW0g YnVmX291dCBvbiBzdWNjZXNzLCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBh ZGRyZXNzIG9mCj4gKyAqICAgICAgICB0aGUgb3V0cHV0IGJ1ZmZlcgo+ICsgKiBAcGFyYW0gZmls dGVyX3BzIHdoZXRoZXIgdG8gd3JpdGUgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgdG8gdGhlIG91 dHB1dCAoMCkKPiArICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCj4gKyAq IEBwYXJhbSBwc19jb3VudCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSB3aGVyZSB0aGUgbnVtYmVy IG9mIGRpc2NhcmRlZAo+ICsgKiAgICAgICAgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgc2hhbGwg YmUgd3JpdHRlbiwgbWF5IGJlIE5VTEwKPiArICogQHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2Vz cywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IKPiArICogICAg ICAgICBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQo+ICsgKiBAbm90ZSAqYnVmX291dCB3aWxsIGJl IHRyZWF0ZWQgYXMgdW5pbml0aWFsaXplZCBvbiBpbnB1dCBhbmQgd29uJ3QgYmUgZnJlZWQuCj4g KyAqLwo+ICtpbnQgZmZfdnZjX2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwg dWludDhfdCAqKmJ1Zl9vdXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc2l6 ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCk7Cj4gKwo+ICsvKioKPiArICogV3JpdGVz IFZWQyBleHRyYWRhdGEgKHBhcmFtZXRlciBzZXRzLCBkZWNsYXJhdGl2ZSBTRUkgTkFMIHVuaXRz KSB0byB0aGUKPiArICogcHJvdmlkZWQgQVZJT0NvbnRleHQuCj4gKyAqCj4gKyAqIElmIHRoZSBl eHRyYWRhdGEgaXMgQW5uZXggQiBmb3JtYXQsIGl0IGdldHMgY29udmVydGVkIHRvIHZ2Y0MgZm9y bWF0IGJlZm9yZQo+ICsgKiB3cml0aW5nLgo+ICsgKgo+ICsgKiBAcGFyYW0gcGIgYWRkcmVzcyBv ZiB0aGUgQVZJT0NvbnRleHQgd2hlcmUgdGhlIHZ2Y0Mgc2hhbGwgYmUgd3JpdHRlbgo+ICsgKiBA cGFyYW0gZGF0YSBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgZGF0YSBuZWVkZWQg dG8gd3JpdGUgdGhlIHZ2Y0MKPiArICogQHBhcmFtIHNpemUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRo ZSBkYXRhIGJ1ZmZlcgo+ICsgKiBAcGFyYW0gcHNfYXJyYXlfY29tcGxldGVuZXNzIHdoZXRoZXIg YWxsIHBhcmFtZXRlciBzZXRzIGFyZSBpbiB0aGUgdnZjQyAoMSkKPiArICogICAgICAgIG9yIHRo ZXJlIG1heSBiZSBhZGRpdGlvbmFsIHBhcmFtZXRlciBzZXRzIGluIHRoZSBiaXRzdHJlYW0gKDAp Cj4gKyAqIEByZXR1cm4gPj0wIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBj b3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IKPiArICogICAgICAgICBjb2RlIGluIGNhc2Ugb2Yg ZmFpbHVyZQo+ICsgKi8KPiAraW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAqcGIs IGNvbnN0IHVpbnQ4X3QgKmRhdGEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUs IGludCBwc19hcnJheV9jb21wbGV0ZW5lc3MpOwo+ICsKPiArI2VuZGlmIC8qIEFWRk9STUFUX1ZW Q19IICovCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2Y2RlYy5jIGIvbGliYXZmb3JtYXQv dnZjZGVjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjMwNGY5 MDA5NjYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZmb3JtYXQvdnZjZGVjLmMKPiBAQCAt MCwwICsxLDYxIEBACj4gKy8qCj4gKyAqIFJBVyBWVkMgdmlkZW8gZGVtdXhlcgo+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMjAgTnVvIE1pIDxudW9taTIwMjFAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK PiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsg Kgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsg Ki8KPiArCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5oIgo+ICsKPiArI2luY2x1ZGUgImF2 Zm9ybWF0LmgiCj4gKyNpbmNsdWRlICJyYXdkZWMuaCIKPiArCj4gK3N0YXRpYyBpbnQgdnZjX3By b2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQo+ICt7Cj4gKyAgICB1aW50MzJfdCBjb2RlID0gLTE7 Cj4gKyAgICBpbnQgc3BzID0gMCwgcHBzID0gMCwgaXJhcCA9IDA7Cj4gKyAgICBpbnQgaTsKPiAr Cj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcC0+YnVmX3NpemUgLSAxOyBpKyspIHsKPiArICAgICAg ICBjb2RlID0gKGNvZGUgPDwgOCkgKyBwLT5idWZbaV07Cj4gKyAgICAgICAgaWYgKChjb2RlICYg MHhmZmZmZmYwMCkgPT0gMHgxMDApIHsKPiArICAgICAgICAgICAgdWludDhfdCBuYWwyID0gcC0+ YnVmW2kgKyAxXTsKPiArICAgICAgICAgICAgaW50IHR5cGUgPSAobmFsMiAmIDB4RjgpID4+IDM7 Cj4gKwo+ICsgICAgICAgICAgICBpZiAoY29kZSAmIDB4ODApIC8vIGZvcmJpZGRlbl96ZXJvX2Jp dAo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoKG5h bDIgJiAweDcpID09IDApIC8vIG51aF90ZW1wb3JhbF9pZF9wbHVzMQo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKPiArICAgICAg ICAgICAgY2FzZSBWVkNfU1BTX05VVDogICAgICAgc3BzKys7ICBicmVhazsKPiArICAgICAgICAg ICAgY2FzZSBWVkNfUFBTX05VVDogICAgICAgcHBzKys7ICBicmVhazsKPiArICAgICAgICAgICAg Y2FzZSBWVkNfSURSX05fTFA6Cj4gKyAgICAgICAgICAgIGNhc2UgVlZDX0lEUl9XX1JBREw6Cj4g KyAgICAgICAgICAgIGNhc2UgVlZDX0NSQV9OVVQ6Cj4gKyAgICAgICAgICAgIGNhc2UgVlZDX0dE Ul9OVVQ6ICAgICAgIGlyYXArKzsgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9 Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHNwcyAmJiBwcHMgJiYgaXJhcCkKPiArICAgICAgICBy ZXR1cm4gQVZQUk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOyAvLyAxIG1vcmUgdGhhbiAubXBnCj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArRkZfREVGX1JBV1ZJREVPX0RFTVVYRVIodnZjLCAi cmF3IFZWQyB2aWRlbyIsIHZ2Y19wcm9iZSwgImgyNjYsMjY2LHZ2YyIsIEFWX0NPREVDX0lEX1ZW QykKPiAtLQo+IDIuMjUuMQo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZmZtcGVnLWRldmVsQGZm bXBlZy5vcmcKPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2 ZWwKPgo+IFRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+IGZmbXBl Zy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCgoK Ci0tIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSnVuIHpoYW8v6LW1 5YabCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBs aXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9y IGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1 YnNjcmliZSIuCg==