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 4CC4A44CD0 for ; Tue, 15 Nov 2022 10:38:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8D0C068BD07; Tue, 15 Nov 2022 12:37:11 +0200 (EET) Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6575268BC38 for ; Tue, 15 Nov 2022 12:37:03 +0200 (EET) Received: by mail-wr1-f49.google.com with SMTP id cl5so23485876wrb.9 for ; Tue, 15 Nov 2022 02:37:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bVEqBqUWCNUWc/rTTaL28QihfFt3VY0EShXdnu8zyIo=; b=msSTggjpwkM8iZgJm3xZ2Vgb9/LJUBtPHf9F73OK4zWBkJASGn2HcUt2rKX+w5jJz5 +7pUWHG4IJLCdBsJq3navJO4R2XFizsStSROeF7SaE09jV7eQd5r2LeUBlX3EvM3myq7 HXBBwRrCc7A8qkWXohSlugzrK+aeY7LsqNx1o9d2U+PgWt/nEOhOl3zocNPmZRO+NUyY 7tMmS3j43rv797/6iSHyhLLNq0A7rW9qnsZ4M6NrE1ojqJRHFj2dQ8dB18J0t/P2t07M g37T3QPfX+OTTvyrHVEYTH1MS+NbTl//Z0q9jVcJTiCcjFrwYqHe1WYWyWqTED9XXJwn PE7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bVEqBqUWCNUWc/rTTaL28QihfFt3VY0EShXdnu8zyIo=; b=6URWHK76WDUgXuqNLY3dc9his1TdTRInHC8ptDut4aRAsPkTDMY+yplUSnlCPG0QkB ouXBtovrrBW+rq6ffbqdKWW/2DAYDI/kQd8wBzh22Gu3KebbgeO7vUofMW6jlGGkpBlM YcosRapbI6IFJV4ewLojux41xR5+B/6DqqAkJKcD9DdrhzP4H58sXoWlcJS4wskp4WOH FokjoeLslzM6Qk8Gr9/XmAOJCYdjWMOgRqkKTlZVnfGxZszZgSqjEXrkMnKy+RnEHBou gI+3apC0VBKL5BYZT5in4Hnapt0CtiHK3BXVJH7BhlYnzzAD77e8pLoKM4HhE5XKxgnD tc2w== X-Gm-Message-State: ANoB5pnMB/ZLCcYQ/m8eVl2Arz0uREhXTuYf8223Au0mtwPRzlHGZCMR 4sQgac4ABcPYJaN5tQOMd0P7kid+jF23/A== X-Google-Smtp-Source: AA0mqf7SqiZ50UT1xofp71hQuUM1wpNznjtLxk3rmsw5YGs2MEzMMjbCqbfPtcEedJkv5cGZ10itOg== X-Received: by 2002:adf:d846:0:b0:236:73af:f9ae with SMTP id k6-20020adfd846000000b0023673aff9aemr10304202wrl.344.1668508621752; Tue, 15 Nov 2022 02:37:01 -0800 (PST) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id e8-20020adffc48000000b00236863c02f5sm11764882wrs.96.2022.11.15.02.37.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Nov 2022 02:37:01 -0800 (PST) From: Thomas Siedel To: ffmpeg-devel@ffmpeg.org Date: Tue, 15 Nov 2022 11:36:19 +0100 Message-Id: <20221115103624.48778-6-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221115103624.48778-1-thomas.ff@spin-digital.com> References: <20221115103624.48778-1-thomas.ff@spin-digital.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 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: QWRkIGRlbXV4ZXIgdG8gcHJvYmUgcmF3IHZ2YyBhbmQgcGFyc2UgdnZjYyBieXRlIHN0cmVhbSBm b3JtYXQuCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgU2llZGVsIDx0aG9tYXMuZmZAc3Bpbi1kaWdp dGFsLmNvbT4KLS0tCiBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgfCAgIDEgKwogbGliYXZmb3Jt YXQvYWxsZm9ybWF0cy5jIHwgICAxICsKIGxpYmF2Zm9ybWF0L2RlbXV4LmMgICAgICB8ICAgNyAr LQogbGliYXZmb3JtYXQvdnZjLmMgICAgICAgIHwgOTg0ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogbGliYXZmb3JtYXQvdnZjLmggICAgICAgIHwgIDk5ICsrKysKIGxp YmF2Zm9ybWF0L3Z2Y2RlYy5jICAgICB8ICA2MSArKysKIDYgZmlsZXMgY2hhbmdlZCwgMTE1MSBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9y bWF0L3Z2Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZjLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdmZvcm1hdC92dmNkZWMuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKaW5kZXggZDdmMTk4YmYzOS4uMDBhYjRk ZWQ4OSAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKKysrIGIvbGliYXZmb3JtYXQv TWFrZWZpbGUKQEAgLTU5NSw2ICs1OTUsNyBAQCBPQkpTLSQoQ09ORklHX1ZPQ19NVVhFUikgICAg ICAgICAgICAgICAgICs9IHZvY2VuYy5vIHZvYy5vCiBPQkpTLSQoQ09ORklHX1ZQS19ERU1VWEVS KSAgICAgICAgICAgICAgICs9IHZway5vCiBPQkpTLSQoQ09ORklHX1ZQTEFZRVJfREVNVVhFUikg ICAgICAgICAgICs9IHZwbGF5ZXJkZWMubyBzdWJ0aXRsZXMubwogT0JKUy0kKENPTkZJR19WUUZf REVNVVhFUikgICAgICAgICAgICAgICArPSB2cWYubworT0JKUy0kKENPTkZJR19WVkNfREVNVVhF UikgICAgICAgICAgICAgICArPSB2dmNkZWMubyByYXdkZWMubwogT0JKUy0kKENPTkZJR19XNjRf REVNVVhFUikgICAgICAgICAgICAgICArPSB3YXZkZWMubyB3NjQubyBwY20ubwogT0JKUy0kKENP TkZJR19XNjRfTVVYRVIpICAgICAgICAgICAgICAgICArPSB3YXZlbmMubyB3NjQubwogT0JKUy0k KENPTkZJR19XQVZfREVNVVhFUikgICAgICAgICAgICAgICArPSB3YXZkZWMubyBwY20ubwpkaWZm IC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0 cy5jCmluZGV4IDQ3YzQxOWEwMDkuLmE0ZTM4MjI2ODEgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0 L2FsbGZvcm1hdHMuYworKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKQEAgLTQ3NCw2ICs0 NzQsNyBAQCBleHRlcm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfdm9jX211eGVyOwogZXh0ZXJu IGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3Zwa19kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX3ZwbGF5ZXJfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0 ICBmZl92cWZfZGVtdXhlcjsKK2V4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl92dmNfZGVt dXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl93NjRfZGVtdXhlcjsKIGV4dGVy biBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl93NjRfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfd2F2X2RlbXV4ZXI7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9kZW11eC5j IGIvbGliYXZmb3JtYXQvZGVtdXguYwppbmRleCAyZGZkODJhNjNjLi44ZGJkZTIzZmNkIDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9kZW11eC5jCisrKyBiL2xpYmF2Zm9ybWF0L2RlbXV4LmMKQEAg LTEyMCw2ICsxMjAsNyBAQCBzdGF0aWMgaW50IHNldF9jb2RlY19mcm9tX3Byb2JlX2RhdGEoQVZG b3JtYXRDb250ZXh0ICpzLCBBVlN0cmVhbSAqc3QsCiAgICAgICAgIHsgIm1wMyIsICAgICAgICBB Vl9DT0RFQ19JRF9NUDMsICAgICAgICAgIEFWTUVESUFfVFlQRV9BVURJTyAgICB9LAogICAgICAg ICB7ICJtcGVndmlkZW8iLCAgQVZfQ09ERUNfSURfTVBFRzJWSURFTywgICBBVk1FRElBX1RZUEVf VklERU8gICAgfSwKICAgICAgICAgeyAidHJ1ZWhkIiwgICAgIEFWX0NPREVDX0lEX1RSVUVIRCwg ICAgICAgQVZNRURJQV9UWVBFX0FVRElPICAgIH0sCisgICAgICAgIHsgInZ2YyIsICAgICAgICBB Vl9DT0RFQ19JRF9WVkMsICAgICAgICAgIEFWTUVESUFfVFlQRV9WSURFTyAgICB9LAogICAgICAg ICB7IDAgfQogICAgIH07CiAgICAgaW50IHNjb3JlOwpAQCAtNzQzLDcgKzc0NCw4IEBAIHN0YXRp YyBpbnQ2NF90IHNlbGVjdF9mcm9tX3B0c19idWZmZXIoQVZTdHJlYW0gKnN0LCBpbnQ2NF90ICpw dHNfYnVmZmVyLCBpbnQ2NF90CiB7CiAgICAgRkZTdHJlYW0gKmNvbnN0IHN0aSA9IGZmc3RyZWFt KHN0KTsKICAgICBpbnQgb25laW5fb25lb3V0ID0gc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBB Vl9DT0RFQ19JRF9IMjY0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+ Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSEVWQzsKKyAgICAgICAgICAgICAgICAgICAgICAgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDICYmCisgICAgICAgICAgICAg ICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfVlZDOwogCiAg ICAgaWYgKCFvbmVpbl9vbmVvdXQpIHsKICAgICAgICAgaW50IGRlbGF5ID0gc3RpLT5hdmN0eC0+ aGFzX2JfZnJhbWVzOwpAQCAtOTMzLDcgKzkzNSw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfcGt0 X2ZpZWxkcyhBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwKICAgICBpbnQ2NF90IG9m ZnNldDsKICAgICBBVlJhdGlvbmFsIGR1cmF0aW9uOwogICAgIGludCBvbmVpbl9vbmVvdXQgPSBz dC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0gyNjQgJiYKLSAgICAgICAgICAg ICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDOwor ICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVD X0lEX0hFVkMgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19p ZCAhPSBBVl9DT0RFQ19JRF9WVkM7CiAKICAgICBpZiAocy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX05P RklMTElOKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92dmMuYyBi L2xpYmF2Zm9ybWF0L3Z2Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmNlMTEyNzA1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC92dmMuYwpAQCAtMCww ICsxLDk4NCBAQAorLyoKKyAqIFZWQyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtdXhlcnMKKyAqCisg KiBDb3B5cmlnaHQgKEMpIDIwMjIsIFRob21hcyBTaWVkZWwKKyAqCisgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2Y29kZWMvZ2V0X2JpdHMuaCIKKyNp bmNsdWRlICJsaWJhdmNvZGVjL2dvbG9tYi5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvdnZjLmgi CisjaW5jbHVkZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgorI2luY2x1ZGUgImF2Yy5oIgor I2luY2x1ZGUgImF2aW8uaCIKKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAi dnZjLmgiCisKK3R5cGVkZWYgc3RydWN0IFZWQ0NOQUxVbml0QXJyYXkgeworICAgIHVpbnQ4X3Qg YXJyYXlfY29tcGxldGVuZXNzOworICAgIHVpbnQ4X3QgTkFMX3VuaXRfdHlwZTsKKyAgICB1aW50 MTZfdCBudW1fbmFsdXM7CisgICAgdWludDE2X3QgKm5hbF91bml0X2xlbmd0aDsKKyAgICB1aW50 OF90ICoqbmFsX3VuaXQ7Cit9IFZWQ0NOQUxVbml0QXJyYXk7CisKK3R5cGVkZWYgc3RydWN0IFZW Q1BUTFJlY29yZCB7CisgICAgdWludDhfdCBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOworICAg IHVpbnQ4X3QgZ2VuZXJhbF9wcm9maWxlX2lkYzsKKyAgICB1aW50OF90IGdlbmVyYWxfdGllcl9m bGFnOworICAgIHVpbnQ4X3QgZ2VuZXJhbF9sZXZlbF9pZGM7CisgICAgdWludDhfdCBwdGxfZnJh bWVfb25seV9jb25zdHJhaW50X2ZsYWc7CisgICAgdWludDhfdCBwdGxfbXVsdGlsYXllcl9lbmFi bGVkX2ZsYWc7CisgICAgdWludDhfdCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1s5XTsKKyAgICB1 aW50OF90ICpwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnOworICAgIHVpbnQ4X3QgKnN1 YmxheWVyX2xldmVsX2lkYzsKKyAgICB1aW50OF90IHB0bF9udW1fc3ViX3Byb2ZpbGVzOworICAg IHVpbnQzMl90ICpnZW5lcmFsX3N1Yl9wcm9maWxlX2lkYzsKK30gVlZDUFRMUmVjb3JkOworCit0 eXBlZGVmIHN0cnVjdCBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB7CisgICAgdWludDhf dCBsZW5ndGhTaXplTWludXNPbmU7CisgICAgdWludDhfdCBwdGxfcHJlc2VudF9mbGFnOworICAg IHVpbnQxNl90IG9sc19pZHg7CisgICAgdWludDhfdCBudW1fc3VibGF5ZXJzOworICAgIHVpbnQ4 X3QgY29uc3RhbnRfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90IGNocm9tYV9mb3JtYXRfaWRjOwor ICAgIHVpbnQ4X3QgYml0X2RlcHRoX21pbnVzODsKKyAgICBWVkNQVExSZWNvcmQgcHRsOworICAg IHVpbnQxNl90IG1heF9waWN0dXJlX3dpZHRoOworICAgIHVpbnQxNl90IG1heF9waWN0dXJlX2hl aWdodDsKKyAgICB1aW50MTZfdCBhdmdfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90IG51bV9vZl9h cnJheXM7CisgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7Cit9IFZWQ0RlY29kZXJDb25maWd1 cmF0aW9uUmVjb3JkOworCit0eXBlZGVmIHN0cnVjdCBWVkNDUHJvZmlsZVRpZXJMZXZlbCB7Cisg ICAgdWludDhfdCBwcm9maWxlX2lkYzsKKyAgICB1aW50OF90IHRpZXJfZmxhZzsKKyAgICB1aW50 OF90IGdlbmVyYWxfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3QgcHRsX2ZyYW1lX29ubHlfY29uc3Ry YWludF9mbGFnOworICAgIHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOworLy8g Z2VuZXJhbF9jb25zdHJhaW50X2luZm8KKyAgICB1aW50OF90IGdjaV9wcmVzZW50X2ZsYWc7Cisg ICAgdWludDhfdCBnY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s5XTsKKyAgICB1aW50OF90IGdjaV9u dW1fcmVzZXJ2ZWRfYml0czsKKy8vIGVuZCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbworICAgIHVp bnQ4X3QgKnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWc7CisgICAgdWludDhfdCAqc3Vi bGF5ZXJfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7CisgICAg dWludDMyX3QgKmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjOworfSBWVkNDUHJvZmlsZVRpZXJMZXZl bDsKKworc3RhdGljIHZvaWQgdnZjY191cGRhdGVfcHRsKFZWQ0RlY29kZXJDb25maWd1cmF0aW9u UmVjb3JkICp2dmNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0NQcm9maWxlVGll ckxldmVsICpwdGwpCit7CisgICAgLyoKKyAgICAgKiBUaGUgbGV2ZWwgaW5kaWNhdGlvbiBnZW5l cmFsX2xldmVsX2lkYyBtdXN0IGluZGljYXRlIGEgbGV2ZWwgb2YKKyAgICAgKiBjYXBhYmlsaXR5 IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgaGlnaGVzdCBsZXZlbCBpbmRpY2F0ZWQgZm9y IHRoZQorICAgICAqIGhpZ2hlc3QgdGllciBpbiBhbGwgdGhlIHBhcmFtZXRlciBzZXRzLgorICAg ICAqLworICAgIGlmICh2dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcgPCBwdGwtPnRpZXJfZmxh ZykKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0gcHRsLT5nZW5lcmFsX2xl dmVsX2lkYzsKKyAgICBlbHNlCisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyA9 CisgICAgICAgICAgICBGRk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMsIHB0bC0+Z2Vu ZXJhbF9sZXZlbF9pZGMpOworCisgICAgLyoKKyAgICAgKiBUaGUgdGllciBpbmRpY2F0aW9uIGdl bmVyYWxfdGllcl9mbGFnIG11c3QgaW5kaWNhdGUgYSB0aWVyIGVxdWFsIHRvIG9yCisgICAgICog Z3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IHRpZXIgaW5kaWNhdGVkIGluIGFsbCB0aGUgcGFyYW1l dGVyIHNldHMuCisgICAgICovCisgICAgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnID0KKyAg ICAgICAgRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnLCBwdGwtPnRpZXJfZmxhZyk7 CisKKyAgICAvKgorICAgICAqIFRoZSBwcm9maWxlIGluZGljYXRpb24gZ2VuZXJhbF9wcm9maWxl X2lkYyBtdXN0IGluZGljYXRlIGEgcHJvZmlsZSB0bworICAgICAqIHdoaWNoIHRoZSBzdHJlYW0g YXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiByZWNvcmQgY29uZm9ybXMuCisgICAg ICoKKyAgICAgKiBJZiB0aGUgc2VxdWVuY2UgcGFyYW1ldGVyIHNldHMgYXJlIG1hcmtlZCB3aXRo IGRpZmZlcmVudCBwcm9maWxlcywgdGhlbgorICAgICAqIHRoZSBzdHJlYW0gbWF5IG5lZWQgZXhh bWluYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHByb2ZpbGUsIGlmIGFueSwgdGhlCisgICAgICog ZW50aXJlIHN0cmVhbSBjb25mb3JtcyB0by4gSWYgdGhlIGVudGlyZSBzdHJlYW0gaXMgbm90IGV4 YW1pbmVkLCBvciB0aGUKKyAgICAgKiBleGFtaW5hdGlvbiByZXZlYWxzIHRoYXQgdGhlcmUgaXMg bm8gcHJvZmlsZSB0byB3aGljaCB0aGUgZW50aXJlIHN0cmVhbQorICAgICAqIGNvbmZvcm1zLCB0 aGVuIHRoZSBlbnRpcmUgc3RyZWFtIG11c3QgYmUgc3BsaXQgaW50byB0d28gb3IgbW9yZQorICAg ICAqIHN1Yi1zdHJlYW1zIHdpdGggc2VwYXJhdGUgY29uZmlndXJhdGlvbiByZWNvcmRzIGluIHdo aWNoIHRoZXNlIHJ1bGVzIGNhbgorICAgICAqIGJlIG1ldC4KKyAgICAgKgorICAgICAqIE5vdGU6 IHNldCB0aGUgcHJvZmlsZSB0byB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgdGhlIHNha2Ugb2Ygc2lt cGxpY2l0eS4KKyAgICAgKi8KKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA9Cisg ICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjLCBwdGwtPnByb2ZpbGVf aWRjKTsKKworICAgIC8qCisgICAgICogRWFjaCBiaXQgaW4gZmxhZ3MgbWF5IG9ubHkgYmUgc2V0 IGlmIGFsbAorICAgICAqIHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQuCisgICAgICov CisgICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyAmPQorICAgICAg ICBwdGwtPnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB2dmNjLT5wdGwucHRs X211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnICY9IHB0bC0+cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9m bGFnOworCisgICAgLyoKKyAgICAgKiBDb25zdHJhaW50cyBJbmZvCisgICAgICovCisgICAgaWYg KHB0bC0+Z2NpX3ByZXNlbnRfZmxhZykgeworICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2Nv bnN0cmFpbnRfaW5mbyA9IDk7CisgICAgICAgIG1lbWNweSgmdnZjYy0+cHRsLmdlbmVyYWxfY29u c3RyYWludF9pbmZvWzBdLAorICAgICAgICAgICAgICAgJnB0bC0+Z2NpX2dlbmVyYWxfY29uc3Ry YWludHNbMF0sIHNpemVvZih1aW50OF90KSAqIDkpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAg dnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gPSAxOworICAgICAgICBtZW1zZXQo JnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1swXSwgMCwgc2l6ZW9mKHVpbnQ4X3Qp ICogOSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFYWNoIGJpdCBpbiBmbGFncyBtYXkgb25s eSBiZSBzZXQgaWYgb25lIG9mCisgICAgICogdGhlIHBhcmFtZXRlciBzZXRzIHNldCB0aGF0IGJp dC4KKyAgICAgKi8KKyAgICB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxh ZyA9CisgICAgICAgICh1aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiB2dmNjLT5u dW1fc3VibGF5ZXJzIC0gMSk7CisgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYyA9Cisg ICAgICAgICh1aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3Vi bGF5ZXJzIC0gMSk7CisKKyAgICBtZW1zZXQodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9w cmVzZW50X2ZsYWcsIDAsCisgICAgICAgICAgIHNpemVvZih1aW50OF90KSAqIHZ2Y2MtPm51bV9z dWJsYXllcnMgLSAxKTsKKyAgICBtZW1zZXQodnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYywg MCwKKyAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEp OworCisgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGkt LSkgeworICAgICAgICB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tp XSB8PQorICAgICAgICAgICAgcHRsLT5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ld OworICAgICAgICBpZiAodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdb aV0pIHsKKyAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPQorICAg ICAgICAgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0sCisgICAg ICAgICAgICAgICAgICAgICAgcHRsLT5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgaWYgKGkgPT0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpIHsK KyAgICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0gdnZjYy0+ cHRsLmdlbmVyYWxfbGV2ZWxfaWRjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0KKyAgICAgICAgICAgICAgICAg ICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpICsgMV07CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgPQor ICAgICAgICBGRk1BWCh2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMsIHB0bC0+cHRsX251 bV9zdWJfcHJvZmlsZXMpOworICAgIGlmICh2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMp IHsKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAgICAg ICAgICh1aW50MzJfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSAqCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBp KyspIHsKKyAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9 CisgICAgICAgICAgICAgICAgcHRsLT5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXTsKKyAgICAg ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxl X2lkYyA9CisgICAgICAgICAgICAodWludDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkp OworICAgIH0KK30KKworc3RhdGljIHZvaWQgdnZjY19wYXJzZV9wdGwoR2V0Qml0Q29udGV4dCAq Z2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJl Y29yZCAqdnZjYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm9m aWxlVGllclByZXNlbnRGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IG1heF9zdWJfbGF5ZXJzX21pbnVzMSkKK3sKKyAgICBWVkNDUHJvZmlsZVRpZXJMZXZlbCBn ZW5lcmFsX3B0bDsKKyAgICBpbnQgajsKKworICAgIGlmIChwcm9maWxlVGllclByZXNlbnRGbGFn KSB7CisgICAgICAgIGdlbmVyYWxfcHRsLnByb2ZpbGVfaWRjID0gZ2V0X2JpdHMoZ2IsIDcpOwor ICAgICAgICBnZW5lcmFsX3B0bC50aWVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIH0KKyAg ICBnZW5lcmFsX3B0bC5nZW5lcmFsX2xldmVsX2lkYyA9IGdldF9iaXRzKGdiLCA4KTsKKworICAg IGdlbmVyYWxfcHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9IGdldF9iaXRzMShn Yik7CisgICAgZ2VuZXJhbF9wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnID0gZ2V0X2Jp dHMxKGdiKTsKKyAgICBpZiAocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeyAgICAgICAvLyBwYXJz ZSBjb25zdHJhaW50IGluZm8KKyAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX3ByZXNlbnRfZmxhZyA9 IGdldF9iaXRzMShnYik7CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5nY2lfcHJlc2VudF9mbGFn KSB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgODsgaisrKQorICAgICAgICAgICAgICAg IGdlbmVyYWxfcHRsLmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzW2pdID0gZ2V0X2JpdHMoZ2IsIDgp OworICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOF0gPSAw OworICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOF0gPSBn ZXRfYml0cyhnYiwgNyk7CisKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9udW1fcmVzZXJ2 ZWRfYml0cyA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgICAgIHNraXBfYml0cyhnYiwgZ2Vu ZXJhbF9wdGwuZ2NpX251bV9yZXNlcnZlZF9iaXRzKTsKKyAgICAgICAgfQorICAgICAgICB3aGls ZSAoZ2ItPmluZGV4ICUgOCAhPSAwKQorICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7CisgICAg fQorCisgICAgZ2VuZXJhbF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyA9Cisg ICAgICAgICh1aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiBtYXhfc3ViX2xheWVy c19taW51czEpOworICAgIGZvciAoaW50IGkgPSBtYXhfc3ViX2xheWVyc19taW51czEgLSAxOyBp ID49IDA7IGktLSkgeworICAgICAgICBnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJl c2VudF9mbGFnW2ldID0gZ2V0X2JpdHMxKGdiKTsKKyAgICB9CisgICAgd2hpbGUgKGdiLT5pbmRl eCAlIDggIT0gMCkKKyAgICAgICAgc2tpcF9iaXRzMShnYik7CisKKyAgICBnZW5lcmFsX3B0bC5z dWJsYXllcl9sZXZlbF9pZGMgPQorICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVp bnQ4X3QpICogbWF4X3N1Yl9sYXllcnNfbWludXMxKTsKKyAgICBmb3IgKGludCBpID0gbWF4X3N1 Yl9sYXllcnNfbWludXMxIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKGdlbmVyYWxf cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pCisgICAgICAgICAgICBnZW5l cmFsX3B0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgfQor CisgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2VuZXJhbF9wdGwu cHRsX251bV9zdWJfcHJvZmlsZXMgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgIGlmIChnZW5l cmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcykgeworICAgICAgICAgICAgZ2VuZXJhbF9wdGwu Z2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPQorICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKSBt YWxsb2Moc2l6ZW9mKHVpbnQzMl90KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsK KyAgICAgICAgICAgICAgICBnZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9 IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAg ICAgICAgICAgICAodWludDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkpOworICAgICAg ICB9CisgICAgfQorCisgICAgdnZjY191cGRhdGVfcHRsKHZ2Y2MsICZnZW5lcmFsX3B0bCk7CisK KyAgICBmcmVlKGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcpOwor ICAgIGZyZWUoZ2VuZXJhbF9wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjKTsKKyAgICBmcmVlKGdlbmVy YWxfcHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjKTsKK30KKworc3RhdGljIGludCB2dmNjX3Bh cnNlX3ZwcyhHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZD RGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdW5zaWduZWQgaW50IHZw c19tYXhfbGF5ZXJzX21pbnVzMTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX21heF9zdWJfbGF5ZXJz X21pbnVzMTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3Rp ZF9mbGFnOworICAgIHVuc2lnbmVkIGludCB2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWc7 CisgICAgdW5zaWduZWQgaW50IHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnOworICAgIHVu c2lnbmVkIGludCB2cHNfb2xzX21vZGVfaWRjOworCisgICAgdW5zaWduZWQgaW50ICp2cHNfcHRf cHJlc2VudF9mbGFnOworICAgIHVuc2lnbmVkIGludCAqdnBzX3B0bF9tYXhfdGlkOworICAgIHVu c2lnbmVkIGludCB2cHNfbnVtX3B0bHNfbWludXMxID0gMDsKKworICAgIC8qCisgICAgICogdnBz X3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgdSg0KQorICAgICAqLworICAgIHNraXBfYml0cyhnYiwg NCk7CisKKyAgICB2cHNfbWF4X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgNik7CisgICAg dnBzX21heF9zdWJfbGF5ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKKworICAgIC8qCisg ICAgICogbnVtVGVtcG9yYWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhl IHN0cmVhbSB0byB3aGljaCB0aGlzCisgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGll cyBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCisgICAgICogbnVtYmVy IG9mIHRlbXBvcmFsIGxheWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWItbGF5 ZXIgb3IKKyAgICAgKiBzdWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0byBu dW1UZW1wb3JhbExheWVycy4gVmFsdWUgMQorICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBzdHJl YW0gaXMgbm90IHRlbXBvcmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCisgICAgICog dGhhdCBpdCBpcyB1bmtub3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5IHNjYWxh YmxlLgorICAgICAqLworICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5udW1f c3VibGF5ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cHNfbWF4X3N1Yl9s YXllcnNfbWludXMxICsgMSk7CisKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCAm JiB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxID4gMCkKKyAgICAgICAgdnBzX2RlZmF1bHRfcHRs X2RwYl9ocmRfbWF4X3RpZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBpZiAodnBzX21heF9s YXllcnNfbWludXMxID4gMCkKKyAgICAgICAgdnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFn ID0gZ2V0X2JpdHMxKGdiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZwc19tYXhfbGF5 ZXJzX21pbnVzMTsgaSsrKSB7CisgICAgICAgIHNraXBfYml0cyhnYiwgNik7ICAgIC8vdnBzX2Rl ZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnW2ldCisgICAgICAgIGlmIChpID4gMCAmJiAh dnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnKSB7CisgICAgICAgICAgICBpZiAoZ2V0X2Jp dHMxKGdiKSkgeyAgICAvLyB2cHNfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZworICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCB2cHNfbWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMx KGdiKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgeworICAg ICAgICAgICAgICAgICAgICBpZiAodnBzX21heF90aWRfcmVmX3ByZXNlbnRfZmxhZyAmJiBnZXRf Yml0czEoZ2IpKSAgLy8gdnBzX2RpcmVjdF9yZWZfbGF5ZXJfZmxhZ1tpXVtqXQorICAgICAgICAg ICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAzKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gdnBzX21heF90aWRfaWxfcmVmX3BpY3NfcGx1czEKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodnBzX21heF9sYXll cnNfbWludXMxID4gMCkgeworICAgICAgICBpZiAodnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9m bGFnKQorICAgICAgICAgICAgdnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcgPSBnZXRfYml0 czEoZ2IpOworICAgICAgICBpZiAodnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcpIHsKKyAg ICAgICAgICAgIGlmICghdnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnKQorICAgICAgICAg ICAgICAgIHZwc19vbHNfbW9kZV9pZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICBp ZiAodnBzX29sc19tb2RlX2lkYyA9PSAyKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IHZwc19udW1fb3V0cHV0X2xheWVyX3NldHNfbWludXMyID0gZ2V0X2JpdHMoZ2IsIDgpOworICAg ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHZwc19udW1fb3V0cHV0X2xheWVyX3Nl dHNfbWludXMyICsgMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBza2lwX2JpdHMxKGdiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2cHNfbnVtX3B0bHNfbWlu dXMxID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIH0KKworICAgIHZwc19wdF9wcmVzZW50X2ZsYWcg PQorICAgICAgICAodW5zaWduZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAq CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2cHNfbnVtX3B0bHNfbWludXMxICsg MSkpOworICAgIHZwc19wdGxfbWF4X3RpZCA9CisgICAgICAgICh1bnNpZ25lZCBpbnQgKikgbWFs bG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHZwc19udW1fcHRsc19taW51czEgKyAxKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0g dnBzX251bV9wdGxzX21pbnVzMTsgaSsrKSB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAg ICAgIHZwc19wdF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOworICAgICAgICBpZiAo IXZwc19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZykKKyAgICAgICAgICAgIHZwc19w dGxfbWF4X3RpZFtpXSA9IGdldF9iaXRzKGdiLCAzKTsKKyAgICB9CisKKyAgICB3aGlsZSAoZ2It PmluZGV4ICUgOCAhPSAwKQorICAgICAgICBza2lwX2JpdHMxKGdiKTsKKworICAgIGZvciAoaW50 IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19taW51czE7IGkrKykgeworICAgICAgICB2dmNjX3Bh cnNlX3B0bChnYiwgdnZjYywgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSwgdnBzX3B0bF9tYXhfdGlk W2ldKTsKKyAgICB9CisKKyAgICBmcmVlKHZwc19wdF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUo dnBzX3B0bF9tYXhfdGlkKTsKKworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3Qg dGhpcyBwb2ludCAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2Vf c3BzKEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNv ZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3BzX21h eF9zdWJfbGF5ZXJzX21pbnVzMSwgbG9nMl9jdHVfc2l6ZV9taW51czU7CisgICAgLy91bnNpZ25l ZCBpbnQgbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzLCBudW1fZGVsdGFfcG9jc1tWVkNfTUFY X1JFRl9QSUNfTElTVFNdOworICAgIC8vdW5zaWduZWQgaW50IHNwc19jaHJvbWFfZm9ybWF0X2lk YzsKKyAgICB1bnNpZ25lZCBpbnQgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZywgc3BzX3BpY19o ZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlLAorICAgICAgICBzcHNfcGljX3dpZHRoX21heF9pbl9s dW1hX3NhbXBsZTsKKyAgICB1bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5kYW50X3N1YnBpY3NfZmxh ZzsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZzsKKworICAgIHNraXBfYml0cyhnYiwgOCk7ICAvLyBz cHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgJiYgc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQKKyAg ICBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDMpOworCisgICAgLyoK KyAgICAgKiBudW1UZW1wb3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0 aGUgc3RyZWFtIHRvIHdoaWNoIHRoaXMKKyAgICAgKiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBs aWVzIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWluZWQKKyAgICAgKiBudW1i ZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1s YXllciBvcgorICAgICAqIHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRv IG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCisgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0 cmVhbSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAg KiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2Nh bGFibGUuCisgICAgICovCisgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51 bV9zdWJsYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwc19tYXhfc3Vi X2xheWVyc19taW51czEgKyAxKTsKKworICAgIHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjID0gZ2V0 X2JpdHMoZ2IsIDIpOworICAgIGxvZzJfY3R1X3NpemVfbWludXM1ID0gZ2V0X2JpdHMoZ2IsIDIp OworCisgICAgaWYgKGdldF9iaXRzMShnYikpICAgICAgICAgIC8vc3BzX3B0bF9kcGJfaHJkX3Bh cmFtc19wcmVzZW50X2ZsYWcKKyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2Y2MsIDEsIHNw c19tYXhfc3ViX2xheWVyc19taW51czEpOworCisgICAgZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsg ICAgIC8vc2tpcF9iaXRzMShnYik7IC8vc3BzX2dkcl9lbmFibGVkX2ZsYWcKKyAgICBmbGFnID0g Z2V0X2JpdHMoZ2IsIDEpOyAgICAgLy9zcHNfcmVmX3BpY19yZXNhbXBsaW5nX2VuYWJsZWRfZmxh ZworICAgIGlmIChmbGFnKSB7ICAgICAgICAgICAgICAgICAvL3Nwc19yZWZfcGljX3Jlc2FtcGxp bmdfZW5hYmxlZF9mbGFnCisgICAgICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7IC8vc2tpcF9i aXRzMShnYik7IC8vc3BzX3Jlc19jaGFuZ2VfaW5fY2x2c19hbGxvd2VkX2ZsYWcKKyAgICB9CisK KyAgICBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZSA9IGdldF91ZV9nb2xvbWJfbG9u ZyhnYik7CisgICAgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGggPQorICAgICAgICBGRk1BWCh2dmNj LT5tYXhfcGljdHVyZV93aWR0aCwgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUpOwor ICAgIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSA9IGdldF91ZV9nb2xvbWJfbG9u ZyhnYik7CisgICAgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0ID0KKyAgICAgICAgRkZNQVgodnZj Yy0+bWF4X3BpY3R1cmVfaGVpZ2h0LCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUp OworCisgICAgaWYgKGdldF9iaXRzMShnYikpIHsKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25n KGdiKTsgLy8gc3BzX2NvbmZfd2luX2xlZnRfb2Zmc2V0CisgICAgICAgIGdldF91ZV9nb2xvbWJf bG9uZyhnYik7IC8vIHNwc19jb25mX3dpbl9yaWdodF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dv bG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX3RvcF9vZmZzZXQKKyAgICAgICAgZ2V0X3Vl X2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX2JvdHRvbV9vZmZzZXQKKyAgICB9CisK KyAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAgICAgICAgLy8gc3BzX3N1YnBpY19pbmZvX3ByZXNl bnRfZmxhZworICAgICAgICB1bnNpZ25lZCBpbnQgc3BzX251bV9zdWJwaWNzX21pbnVzMSA9IGdl dF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgICAgIGlmIChzcHNfbnVtX3N1YnBpY3NfbWludXMx ID4gMCkgeyAgICAgICAvLyBzcHNfbnVtX3N1YnBpY3NfbWludXMxCisgICAgICAgICAgICBzcHNf aW5kZXBlbmRhbnRfc3VicGljc19mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgIHNw c19zdWJwaWNfc2FtZV9zaXplX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICB9CisgICAg ICAgIGZvciAoaW50IGkgPSAwOworICAgICAgICAgICAgIHNwc19udW1fc3VicGljc19taW51czEg PiAwICYmIGkgPD0gc3BzX251bV9zdWJwaWNzX21pbnVzMTsgaSsrKSB7CisgICAgICAgICAgICBp ZiAoIXNwc19zdWJwaWNfc2FtZV9zaXplX2ZsYWcgfHwgaSA9PSAwKSB7CisgICAgICAgICAgICAg ICAgaW50IGxlbiA9IEZGTUlOKGxvZzJfY3R1X3NpemVfbWludXM1ICsgNSwgMTYpOworICAgICAg ICAgICAgICAgIGlmIChpID4gMCAmJiBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZSA+ IDEyOCkKKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4pOworICAgICAgICAg ICAgICAgIGlmIChpID4gMCAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAx MjgpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAgICAgICAgICAg ICAgICBpZiAoaSA8IHNwc19udW1fc3VicGljc19taW51czEKKyAgICAgICAgICAgICAgICAgICAg JiYgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAgICAgICAgICAg ICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNwc19u dW1fc3VicGljc19taW51czEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3BzX3BpY19oZWlnaHRf bWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQorICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMo Z2IsIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXNwc19pbmRlcGVuZGFu dF9zdWJwaWNzX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDIpOyAgICAg ICAvLyBzcHNfc3VicGljX3RyZWF0ZWRfYXNfcGljX2ZsYWcgJiYgc3BzX2xvb3BfZmlsdGVyX2Fj cm9zc19zdWJwaWNfZW5hYmxlZF9mbGFnCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX3N1YnBpY19pZF9sZW5fbWludXMxCisg ICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAgIC8vIHNwc19zdWJwaWNfaWRfbWFwcGluZ19l eHBsaWNpdGx5X3NpZ25hbGxlZF9mbGFnCisgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkg IC8vIHNwc19zdWJwaWNfaWRfbWFwcGluZ19wcmVzZW50X2ZsYWcKKyAgICAgICAgICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8PSBzcHNfbnVtX3N1YnBpY3NfbWludXMxOyBpKyspIHsKKyAgICAg ICAgICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7ICAgICAvLyBzcHNfc3VicGljX2lkW2ldCisg ICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHZ2Y2MtPmJpdF9kZXB0aF9t aW51czggPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOworCisgICAgLyogbm90aGluZyB1c2VmdWwg Zm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgdnZjY19wYXJzZV9wcHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworCisgICAgLy8g Tm90aGluZyBvZiBpbXBvcnRhbmNlIHRvIHBhcnNlIGluIFBQUworICAgIC8qIG5vdGhpbmcgdXNl ZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAqLworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBuYWxfdW5pdF9wYXJzZV9oZWFkZXIoR2V0Qml0Q29udGV4dCAqZ2IsIHVpbnQ4X3Qg Km5hbF90eXBlKQoreworICAgIC8qCisgICAgICogZm9yYmlkZGVuX3plcm9fYml0ICAgIHUoMSkK KyAgICAgKiBudWhfcmVzZXJ2ZWRfemVyb19iaXQgdSgxKQorICAgICAqIG51aF9sYXllcl9pZCAg ICAgICAgICB1KDYpCisgICAgICovCisgICAgc2tpcF9iaXRzKGdiLCA4KTsKKyAgICAqbmFsX3R5 cGUgPSBnZXRfYml0cyhnYiwgNSk7CisKKyAgICAvKgorICAgICAqIG51aF90ZW1wb3JhbF9pZF9w bHVzMSB1KDMpCisgICAgICovCisgICAgc2tpcF9iaXRzKGdiLCAzKTsKK30KKworc3RhdGljIGlu dCB2dmNjX2FycmF5X2FkZF9uYWxfdW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxf c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBuYWxfdHlw ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgaW50 IHJldDsKKyAgICB1aW50OF90IGluZGV4OworICAgIHVpbnQxNl90IG51bV9uYWx1czsKKyAgICBW VkNDTkFMVW5pdEFycmF5ICphcnJheTsKKworICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHZ2 Y2MtPm51bV9vZl9hcnJheXM7IGluZGV4KyspCisgICAgICAgIGlmICh2dmNjLT5hcnJheVtpbmRl eF0uTkFMX3VuaXRfdHlwZSA9PSBuYWxfdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg aWYgKGluZGV4ID49IHZ2Y2MtPm51bV9vZl9hcnJheXMpIHsKKyAgICAgICAgdWludDhfdCBpOwor CisgICAgICAgIHJldCA9CisgICAgICAgICAgICBhdl9yZWFsbG9jcF9hcnJheSgmdnZjYy0+YXJy YXksIGluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihWVkND TkFMVW5pdEFycmF5KSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJu IHJldDsKKworICAgICAgICBmb3IgKGkgPSB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpIDw9IGluZGV4 OyBpKyspCisgICAgICAgICAgICBtZW1zZXQoJnZ2Y2MtPmFycmF5W2ldLCAwLCBzaXplb2YoVlZD Q05BTFVuaXRBcnJheSkpOworICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0gaW5kZXggKyAx OworICAgIH0KKworICAgIGFycmF5ID0gJnZ2Y2MtPmFycmF5W2luZGV4XTsKKyAgICBudW1fbmFs dXMgPSBhcnJheS0+bnVtX25hbHVzOworCisgICAgcmV0ID0gYXZfcmVhbGxvY3BfYXJyYXkoJmFy cmF5LT5uYWxfdW5pdCwgbnVtX25hbHVzICsgMSwgc2l6ZW9mKHVpbnQ4X3QgKikpOworICAgIGlm IChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0KKyAgICAgICAgYXZf cmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5pdF9sZW5ndGgsIG51bV9uYWx1cyArIDEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50MTZfdCkpOworICAgIGlmIChyZXQg PCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgYXJyYXktPm5hbF91bml0W251bV9uYWx1 c10gPSBuYWxfYnVmOworICAgIGFycmF5LT5uYWxfdW5pdF9sZW5ndGhbbnVtX25hbHVzXSA9IG5h bF9zaXplOworICAgIGFycmF5LT5OQUxfdW5pdF90eXBlID0gbmFsX3R5cGU7CisgICAgYXJyYXkt Pm51bV9uYWx1cysrOworCisgICAgLyoKKyAgICAgKiBXaGVuIHRoZSBzYW1wbGUgZW50cnkgbmFt ZSBpcyDigJh2dmMx4oCZLCB0aGUgZGVmYXVsdCBhbmQgbWFuZGF0b3J5IHZhbHVlIG9mCisgICAg ICogYXJyYXlfY29tcGxldGVuZXNzIGlzIDEgZm9yIGFycmF5cyBvZiBhbGwgdHlwZXMgb2YgcGFy YW1ldGVyIHNldHMsIGFuZCAwCisgICAgICogZm9yIGFsbCBvdGhlciBhcnJheXMuIFdoZW4gdGhl IHNhbXBsZSBlbnRyeSBuYW1lIGlzIOKAmGhldjHigJksIHRoZSBkZWZhdWx0CisgICAgICogdmFs dWUgb2YgYXJyYXlfY29tcGxldGVuZXNzIGlzIDAgZm9yIGFsbCBhcnJheXMuCisgICAgICovCisg ICAgaWYgKG5hbF90eXBlID09IFZWQ19WUFNfTlVUIHx8IG5hbF90eXBlID09IFZWQ19TUFNfTlVU IHx8CisgICAgICAgIG5hbF90eXBlID09IFZWQ19QUFNfTlVUKQorICAgICAgICBhcnJheS0+YXJy YXlfY29tcGxldGVuZXNzID0gcHNfYXJyYXlfY29tcGxldGVuZXNzOworCisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgdnZjY19hZGRfbmFsX3VuaXQodWludDhfdCAqbmFsX2J1ZiwgdWlu dDMyX3QgbmFsX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwc19hcnJh eV9jb21wbGV0ZW5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJD b25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIGludCByZXQgPSAwOworICAgIEdldEJp dENvbnRleHQgZ2JjOworICAgIHVpbnQ4X3QgbmFsX3R5cGU7CisgICAgdWludDhfdCAqcmJzcF9i dWY7CisgICAgdWludDMyX3QgcmJzcF9zaXplOworCisgICAgcmJzcF9idWYgPSBmZl9uYWxfdW5p dF9leHRyYWN0X3Jic3AobmFsX2J1ZiwgbmFsX3NpemUsICZyYnNwX3NpemUsIDIpOworICAgIGlm ICghcmJzcF9idWYpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBn b3RvIGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBpbml0X2dldF9iaXRzOCgmZ2JjLCByYnNwX2J1 ZiwgcmJzcF9zaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAg ICBuYWxfdW5pdF9wYXJzZV9oZWFkZXIoJmdiYywgJm5hbF90eXBlKTsKKworICAgIC8qCisgICAg ICogTm90ZTogb25seSAnZGVjbGFyYXRpdmUnIFNFSSBtZXNzYWdlcyBhcmUgYWxsb3dlZCBpbgor ICAgICAqIHZ2Y2MuIFBlcmhhcHMgdGhlIFNFSSBwbGF5bG9hZCB0eXBlIHNob3VsZCBiZSBjaGVj a2VkCisgICAgICogYW5kIG5vbi1kZWNsYXJhdGl2ZSBTRUkgbWVzc2FnZXMgZGlzY2FyZGVkPwor ICAgICAqLworICAgIHN3aXRjaCAobmFsX3R5cGUpIHsKKyAgICBjYXNlIFZWQ19PUElfTlVUOgor ICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAgICBjYXNlIFZW Q19QUFNfTlVUOgorICAgIGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgorICAgIGNhc2UgVlZDX1NV RkZJWF9TRUlfTlVUOgorICAgICAgICByZXQgPSB2dmNjX2FycmF5X2FkZF9uYWxfdW5pdChuYWxf YnVmLCBuYWxfc2l6ZSwgbmFsX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBzX2FycmF5X2NvbXBsZXRlbmVzcywgdnZjYyk7CisgICAgICAgIGlmIChyZXQgPCAw KQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZW Q19WUFNfTlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV92cHMoJmdiYywgdnZjYyk7 CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19TUFNfTlVUKQorICAgICAgICAgICAg cmV0ID0gdnZjY19wYXJzZV9zcHMoJmdiYywgdnZjYyk7CisgICAgICAgIGVsc2UgaWYgKG5hbF90 eXBlID09IFZWQ19QUFNfTlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV9wcHMoJmdi YywgdnZjYyk7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19PUElfTlVUKSB7Cisg ICAgICAgICAgICAvLyBub3QgeWV0IHN1cHBvcnRlZAorICAgICAgICB9CisgICAgICAgIGlmIChy ZXQgPCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1 bHQ6CisgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGdvdG8gZW5k OworICAgIH0KKworICBlbmQ6CisgICAgYXZfZnJlZShyYnNwX2J1Zik7CisgICAgcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgdnZjY19pbml0KFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVj b3JkICp2dmNjKQoreworICAgIG1lbXNldCh2dmNjLCAwLCBzaXplb2YoVlZDRGVjb2RlckNvbmZp Z3VyYXRpb25SZWNvcmQpKTsKKyAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgPSAzOyAgICAg ICAvLyA0IGJ5dGVzCisKKyAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9 IDE7CisKKyAgICB2dmNjLT5wdGxfcHJlc2VudF9mbGFnID0gMTsKK30KKworc3RhdGljIHZvaWQg dnZjY19jbG9zZShWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1 aW50OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsr KSB7CisgICAgICAgIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyA9IDA7CisgICAgICAgIGF2X2Zy ZWVwKCZ2dmNjLT5hcnJheVtpXS5uYWxfdW5pdCk7CisgICAgICAgIGF2X2ZyZWVwKCZ2dmNjLT5h cnJheVtpXS5uYWxfdW5pdF9sZW5ndGgpOworICAgIH0KKworICAgIGZyZWUodnZjYy0+cHRsLnB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUodnZjYy0+cHRsLnN1Ymxh eWVyX2xldmVsX2lkYyk7CisgICAgZnJlZSh2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9p ZGMpOworCisgICAgdnZjYy0+bnVtX29mX2FycmF5cyA9IDA7CisgICAgYXZfZnJlZXAoJnZ2Y2Mt PmFycmF5KTsKK30KKworc3RhdGljIGludCB2dmNjX3dyaXRlKEFWSU9Db250ZXh0ICpwYiwgVlZD RGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdWludDhfdCBpOworICAg IHVpbnQxNl90IGosIHZwc19jb3VudCA9IDAsIHNwc19jb3VudCA9IDAsIHBwc19jb3VudCA9IDA7 CisgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKyAgICAvKgorICAgICAqIEl0J3MgdW5j bGVhciBob3cgdG8gcHJvcGVybHkgY29tcHV0ZSB0aGVzZSBmaWVsZHMsIHNvCisgICAgICogbGV0 J3MgYWx3YXlzIHNldCB0aGVtIHRvIHZhbHVlcyBtZWFuaW5nICd1bnNwZWNpZmllZCcuCisgICAg ICovCisgICAgdnZjYy0+YXZnX2ZyYW1lX3JhdGUgPSAwOworICAgIHZ2Y2MtPmNvbnN0YW50X2Zy YW1lX3JhdGUgPSAxOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAg ICAgImxlbmd0aFNpemVNaW51c09uZTogICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAor ICAgICAgICAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJwdGxfcHJlc2VudF9mbGFnOiAgICAgICAgICAgICAg ICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsX3ByZXNlbnRfZmxhZyk7 CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm9sc19pZHg6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwgdnZjYy0+b2xzX2lkeCk7 CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9zdWJsYXll cnM6ICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNj LT5udW1fc3VibGF5ZXJzKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAg ICAgICAiY29uc3RhbnRfZnJhbWVfcmF0ZTogICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIs CisgICAgICAgICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1lX3JhdGUpOworICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lkYzogICAgICAgICAg ICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9p ZGMpOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImJpdF9k ZXB0aF9taW51czg6ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAg ICB2dmNjLT5iaXRfZGVwdGhfbWludXM4KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNF LAorICAgICAgICAgICAibnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzogICAgICAgICAgICUiIFBS SXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZv KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiZ2VuZXJhbF9w cm9maWxlX2lkYzogICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2 Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RS QUNFLAorICAgICAgICAgICAiZ2VuZXJhbF90aWVyX2ZsYWc6ICAgICAgICAgICAgICAgICAgICUi IFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyk7Cisg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImdlbmVyYWxfbGV2ZWxf aWRjOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5w dGwuZ2VuZXJhbF9sZXZlbF9pZGMpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisg ICAgICAgICAgICJwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc6ICAgICAgJSIgUFJJdTgg IlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxh Zyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgInB0bF9tdWx0 aWxheWVyX2VuYWJsZWRfZmxhZzogICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2 dmNjLT5wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnKTsKKyAgICBmb3IgKGkgPSAwOyBp IDwgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm87IGkrKykgeworICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgImdlbmVyYWxfY29uc3Ry YWludF9pbmZvWyVkXTogICAgICAgICAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAg IHZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1tpXSk7CisgICAgfQorCisgICAgZm9y IChpID0gMDsgaSA8IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxOyBpKyspIHsKKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJwdGxfc3VibGF5ZXJfbGV2 ZWxfcHJlc2VudF9mbGFnWyUiIFBSSXU4ICJdOiAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAg ICAgICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJzdWJsYXll cl9sZXZlbF9pZGNbJSIgUFJJdTggIl06ICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAg ICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICB9CisKKyAgICBhdl9sb2co TlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibnVtX3N1Yl9wcm9maWxlczogICAgICAg ICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbnVt X3N1Yl9wcm9maWxlcyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1f c3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwK KyAgICAgICAgICAgICAgICJnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1slIiBQUkl1OCAiXTogICAg ICAgICAlIiBQUkl4MzIgIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFs X3N1Yl9wcm9maWxlX2lkY1tpXSk7CisgICAgfQorCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgIm1heF9waWN0dXJlX3dpZHRoOiAgICAgICAgICAgICAgICAgICAl IiBQUkl1MTYgIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJtYXhfcGljdHVyZV9oZWln aHQ6ICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPm1h eF9waWN0dXJlX2hlaWdodCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAg ICAgICAgImF2Z19mcmFtZV9yYXRlOiAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxu IiwKKyAgICAgICAgICAgdnZjYy0+YXZnX2ZyYW1lX3JhdGUpOworCisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9vZl9hcnJheXM6ICAgICAgICAgICAgICAg ICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzKTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7CisgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAiYXJyYXlfY29tcGxl dGVuZXNzWyUiIFBSSXU4ICJdOiAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsIGksCisgICAg ICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3MpOworICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgIk5BTF91bml0X3R5cGVb JSIgUFJJdTggIl06ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAg ICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSk7CisgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAibnVtX25hbHVzWyUiIFBSSXU4ICJd OiAgICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLCBpLAorICAgICAgICAgICAg ICAgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzKTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHZ2 Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICAgICAibmFsX3VuaXRfbGVuZ3RoWyUiIFBSSXU4 ICJdWyUiIFBSSXUxNiAiXTogICAgICAgICAgICAgICAlIgorICAgICAgICAgICAgICAgICAgIFBS SXUxNiAiXG4iLCBpLCBqLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOworICAg IH0KKworICAgIC8qCisgICAgICogV2UgbmVlZCBhdCBsZWFzdCBvbmUgb2YgZWFjaDogVlBTIGFu ZCBTUFMuCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7 IGkrKykKKyAgICAgICAgc3dpdGNoICh2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKSB7Cisg ICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgICAgICAgICB2cHNfY291bnQgKz0gdnZjYy0+ YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZD X1NQU19OVVQ6CisgICAgICAgICAgICBzcHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25h bHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAg ICAgICAgICBwcHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorCisgICAgaWYgKCFzcHNfY291bnQgfHwgc3BzX2NvdW50ID4gVlZDX01BWF9TUFNfQ09VTlQp CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgLyogYml0KDUpIHJl c2VydmVkID0g4oCYMTExMTHigJliOworICAgICAgIHVuc2lnbmVkIGludCAoMikgTGVuZ3RoU2l6 ZU1pbnVzT25lCisgICAgICAgdW5zaWduZWQgaW50ICgxKSBwdGxfcHJlc2VudF9mbGFnICovCisg ICAgYXZpb193OChwYiwgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lIDw8IDEgfCB2dmNjLT5wdGxf cHJlc2VudF9mbGFnIHwgMHhmOCk7CisKKyAgICBpZiAodnZjYy0+cHRsX3ByZXNlbnRfZmxhZykg eworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoOSkgb2xzX2lkeDsKKyAgICAg ICAgICogdW5zaWduZWQgaW50KDMpIG51bV9zdWJsYXllcnM7CisgICAgICAgICAqIHVuc2lnbmVk IGludCgyKSBjb25zdGFudF9mcmFtZV9yYXRlOworICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMikg Y2hyb21hX2Zvcm1hdF9pZGM7ICAgICAqLworICAgICAgICBhdmlvX3diMTYocGIsCisgICAgICAg ICAgICAgICAgICB2dmNjLT5vbHNfaWR4IDw8IDcgfCB2dmNjLT5udW1fc3VibGF5ZXJzIDw8IDQg fCB2dmNjLT4KKyAgICAgICAgICAgICAgICAgIGNvbnN0YW50X2ZyYW1lX3JhdGUgPDwgMiB8IHZ2 Y2MtPmNocm9tYV9mb3JtYXRfaWRjKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMykgYml0 X2RlcHRoX21pbnVzODsKKyAgICAgICAgICAgYml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJli OyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5iaXRfZGVwdGhfbWludXM4IDw8IDUgfCAw eDFmKTsKKworICAgICAgICAvL1ZWQ1BUTFJlY29yZAorCisgICAgICAgIC8qIGJpdCgyKSByZXNl cnZlZCA9IOKAmDAw4oCZYjsKKyAgICAgICAgICAgdW5zaWduZWQgaW50ICg2KSBudW1fYnl0ZXNf Y29uc3RyYWludF9pbmZvICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5udW1fYnl0 ZXNfY29uc3RyYWludF9pbmZvICYgMHgzZik7CisKKyAgICAgICAgLyogdW5zaWduZWQgaW50ICg3 KSBnZW5lcmFsX3Byb2ZpbGVfaWRjCisgICAgICAgICAgIHVuc2lnbmVkIGludCAoMSkgZ2VuZXJh bF90aWVyX2ZsYWcgKi8KKyAgICAgICAgYXZpb193OChwYiwKKyAgICAgICAgICAgICAgICB2dmNj LT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA8PCAxIHwgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9m bGFnKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQgKDgpIGdlbmVyYWxfbGV2ZWxfaWRjICov CisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7CisKKyAg ICAgICAgLyoKKyAgICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfZnJhbWVfb25seV9jb25z dHJhaW50X2ZsYWcKKyAgICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfbXVsdGlsYXllcl9l bmFibGVkX2ZsYWcKKyAgICAgICAgICogdW5zaWduZWQgaW50ICg4Km51bV9ieXRlc19jb25zdHJh aW50X2luZm8gLTIpIGdlbmVyYWxfY29uc3RyYWludF9pbmZvICovCisgICAgICAgIGJ1ZiA9Cisg ICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGNoYXIp ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmNjLT5wdGwubnVtX2J5 dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAgICpidWYgPSB2dmNjLT5wdGwucHRsX2ZyYW1l X29ubHlfY29uc3RyYWludF9mbGFnIDw8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAgIG51bV9ieXRl c19jb25zdHJhaW50X2luZm8gKiA4IC0gMSB8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAgIHB0bF9t dWx0aWxheWVyX2VuYWJsZWRfZmxhZyA8PCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRf aW5mbyAqCisgICAgICAgICAgICA4IC0gMiB8ICp2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50 X2luZm8gPj4gMjsKKyAgICAgICAgYXZpb193cml0ZShwYiwgYnVmLCB2dmNjLT5wdGwubnVtX2J5 dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAgIGZyZWUoYnVmKTsKKworICAgICAgICBpZiAo dnZjYy0+bnVtX3N1YmxheWVycyA+IDEpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgcHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHZ2 Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIHB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzID0KKyAgICAgICAgICAgICAgICAgICAgKHB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzIDw8IDEgfCB2dmNjLT5wdGwuCisgICAgICAg ICAgICAgICAgICAgICBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGF2aW9fdzgocGIsIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVz ZW50X2ZsYWdzKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSB2dmNjLT5udW1f c3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmICh2dmNjLT5wdGwu cHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkKKyAgICAgICAgICAgICAgICBhdmlv X3c4KHBiLCB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICAgICAgfQorCisg ICAgICAgIC8qIHVuc2lnbmVkIGludCg4KSBudW1fc3ViX3Byb2ZpbGVzOyAqLworICAgICAgICBh dmlvX3c4KHBiLCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworCisgICAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBqKyspIHsK KyAgICAgICAgICAgIC8qIHVuc2lnbmVkIGludCgzMikgZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNb al07ICovCisgICAgICAgICAgICBhdmlvX3diMzIocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9w cm9maWxlX2lkY1tqXSk7CisgICAgICAgIH0KKworICAgICAgICAvL0VuZCBvZiBWdmNQVExSZWNv cmQKKworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIG1heF9waWN0dXJl X3dpZHRoOyovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgp OworCisgICAgICAgIC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVf aGVpZ2h0OyovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0 KTsKKworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIGF2Z19mcmFtZV9y YXRlOyAqLworICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKKyAg ICB9CisKKyAgICAvKiB1bnNpZ25lZCBpbnQoOCkgbnVtX29mX2FycmF5czsgKi8KKyAgICBhdmlv X3c4KHBiLCB2dmNjLT5udW1fb2ZfYXJyYXlzKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNj LT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYml0KDEpIGFy cmF5X2NvbXBsZXRlbmVzczsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIHJlc2VydmVkID0g MDsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDUpIE5BTF91bml0X3R5cGU7CisgICAgICAgICAq LworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5hcnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3Mg PDwgNyB8CisgICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAmIDB4 MWYpOworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYpIG51bV9uYWx1czsgKi8KKyAgICAgICAg aWYgKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX0RDSV9OVVQgJiYKKyAgICAg ICAgICAgIHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX09QSV9OVVQpCisgICAg ICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyk7CisgICAgICAg IGZvciAoaiA9IDA7IGogPCB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7IGorKykgeworICAgICAg ICAgICAgLyogdW5zaWduZWQgaW50KDE2KSBuYWxfdW5pdF9sZW5ndGg7ICovCisgICAgICAgICAg ICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aFtqXSk7CisKKyAg ICAgICAgICAgIC8qIGJpdCg4Km5hbF91bml0X2xlbmd0aCkgbmFsX3VuaXQ7ICovCisgICAgICAg ICAgICBhdmlvX3dyaXRlKHBiLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdFtqXSwKKyAgICAgICAg ICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsKKyAgICAg ICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdnZjX2FubmV4YjJtcDQo QVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpidWZfaW4sCisgICAgICAgICAgICAgICAg ICAgICAgaW50IHNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpCit7CisgICAgaW50 IG51bV9wcyA9IDAsIHJldCA9IDA7CisgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQgPSBO VUxMOworCisgICAgaWYgKCFmaWx0ZXJfcHMpIHsKKyAgICAgICAgcmV0ID0gZmZfYXZjX3BhcnNl X25hbF91bml0cyhwYiwgYnVmX2luLCBzaXplKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQor CisgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25hbF91bml0c19idWYoYnVmX2luLCAmc3RhcnQsICZz aXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICByZXQgPSAw OworICAgIGJ1ZiA9IHN0YXJ0OworICAgIGVuZCA9IHN0YXJ0ICsgc2l6ZTsKKworICAgIHdoaWxl IChlbmQgLSBidWYgPiA0KSB7CisgICAgICAgIHVpbnQzMl90IGxlbiA9IEZGTUlOKEFWX1JCMzIo YnVmKSwgZW5kIC0gYnVmIC0gNCk7CisgICAgICAgIHVpbnQ4X3QgdHlwZSA9IChidWZbNV0gPj4g Myk7CisKKyAgICAgICAgYnVmICs9IDQ7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg ICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgICAg IGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAgICAgICBudW1fcHMrKzsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ICs9IDQgKyBsZW47CisgICAg ICAgICAgICBhdmlvX3diMzIocGIsIGxlbik7CisgICAgICAgICAgICBhdmlvX3dyaXRlKHBiLCBi dWYsIGxlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZiAr PSBsZW47CisgICAgfQorCisgIGVuZDoKKyAgICBhdl9mcmVlKHN0YXJ0KTsKKyAgICBpZiAocHNf Y291bnQpCisgICAgICAgICpwc19jb3VudCA9IG51bV9wczsKKyAgICByZXR1cm4gcmV0OworfQor CitpbnQgZmZfdnZjX2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwgdWludDhf dCAqKmJ1Zl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc2l6ZSwgaW50IGZp bHRlcl9wcywgaW50ICpwc19jb3VudCkKK3sKKyAgICBBVklPQ29udGV4dCAqcGI7CisgICAgaW50 IHJldDsKKworICAgIHJldCA9IGF2aW9fb3Blbl9keW5fYnVmKCZwYik7CisgICAgaWYgKHJldCA8 IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBmZl92dmNfYW5uZXhiMm1wNChw YiwgYnVmX2luLCAqc2l6ZSwgZmlsdGVyX3BzLCBwc19jb3VudCk7CisgICAgaWYgKHJldCA8IDAp IHsKKyAgICAgICAgZmZpb19mcmVlX2R5bl9idWYoJnBiKTsKKyAgICAgICAgcmV0dXJuIHJldDsK KyAgICB9CisKKyAgICAqc2l6ZSA9IGF2aW9fY2xvc2VfZHluX2J1ZihwYiwgYnVmX291dCk7CisK KyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAq cGIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXpl LCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKQoreworICAgIFZWQ0RlY29kZXJDb25maWd1cmF0 aW9uUmVjb3JkIHZ2Y2M7CisgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQ7CisgICAgaW50 IHJldDsKKworICAgIGlmIChzaXplIDwgNikgeworICAgICAgICAvKiBXZSBjYW4ndCB3cml0ZSBh IHZhbGlkIHZ2Y2MgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAqLworICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICB9IGVsc2UgaWYgKCpkYXRhID09IDEpIHsKKyAgICAgICAg LyogRGF0YSBpcyBhbHJlYWR5IHZ2Y2MtZm9ybWF0dGVkICovCisgICAgICAgIGF2aW9fd3JpdGUo cGIsIGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCEoQVZf UkIyNChkYXRhKSA9PSAxIHx8IEFWX1JCMzIoZGF0YSkgPT0gMSkpIHsKKyAgICAgICAgLyogTm90 IGEgdmFsaWQgQW5uZXggQiBzdGFydCBjb2RlIHByZWZpeCAqLworICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3Vu aXRzX2J1ZihkYXRhLCAmc3RhcnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIHZ2Y2NfaW5pdCgmdnZjYyk7CisKKyAgICBidWYgPSBzdGFydDsK KyAgICBlbmQgPSBzdGFydCArIHNpemU7CisKKyAgICB3aGlsZSAoZW5kIC0gYnVmID4gNCkgewor ICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQp OworICAgICAgICB1aW50OF90IHR5cGUgPSAoYnVmWzVdID4+IDMpOworCisgICAgICAgIGJ1ZiAr PSA0OworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZWQ19PUElfTlVU OgorICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgor ICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05V VDoKKyAgICAgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6CisgICAgICAgICAgICByZXQgPSB2 dmNjX2FkZF9uYWxfdW5pdChidWYsIGxlbiwgcHNfYXJyYXlfY29tcGxldGVuZXNzLCAmdnZjYyk7 CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgICBidWYgKz0gbGVuOworICAgIH0KKworICAgIHJldCA9IHZ2Y2Nf d3JpdGUocGIsICZ2dmNjKTsKKworICBlbmQ6CisgICAgdnZjY19jbG9zZSgmdnZjYyk7CisgICAg YXZfZnJlZShzdGFydCk7CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9y bWF0L3Z2Yy5oIGIvbGliYXZmb3JtYXQvdnZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMTc1NWFmNzI5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3Z2 Yy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBWVkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4 ZXJzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZp bGUKKyAqIGludGVybmFsIGhlYWRlciBmb3IgVlZDIChkZSltdXhlciB1dGlsaXRpZXMKKyAqLwor CisjaWZuZGVmIEFWRk9STUFUX1ZWQ19ICisjZGVmaW5lIEFWRk9STUFUX1ZWQ19ICisKKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJhdmlvLmgiCisKKy8qKgorICogV3JpdGVzIEFubmV4 IEIgZm9ybWF0dGVkIFZWQyBOQUwgdW5pdHMgdG8gdGhlIHByb3ZpZGVkIEFWSU9Db250ZXh0Lgor ICoKKyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBNUDQtY29tcGF0aWJsZSBm b3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKKyAqIGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6 ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KKyAqCisgKiBJZiBmaWx0ZXJfcHMg aXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVyIHNldHMgZm91bmQgaW4gdGhlIGlucHV0IHdp bGwgYmUKKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0byB0aGUgbnVt YmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCisgKgorICogQHBhcmFtIHBiIGFkZHJlc3Mg b2YgdGhlIEFWSU9Db250ZXh0IHdoZXJlIHRoZSBkYXRhIHNoYWxsIGJlIHdyaXR0ZW4KKyAqIEBw YXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEK KyAqIEBwYXJhbSBzaXplIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgaW5wdXQgYnVmZmVyCisgKiBA cGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIgdG8gd3JpdGUgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMg dG8gdGhlIG91dHB1dCAoMCkKKyAqICAgICAgICBvciB0byBkaXNjYXJkIHRoZW0gKG5vbi16ZXJv KQorICogQHBhcmFtIHBzX2NvdW50IGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIHdoZXJlIHRoZSBu dW1iZXIgb2YgZGlzY2FyZGVkCisgKiAgICAgICAgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgc2hh bGwgYmUgd3JpdHRlbiwgbWF5IGJlIE5VTEwKKyAqIEByZXR1cm4gdGhlIGFtb3VudCAoaW4gYnl0 ZXMpIG9mIGRhdGEgd3JpdHRlbiBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUKKyAqICAg ICAgICAgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBm YWlsdXJlCisgKi8KK2ludCBmZl92dmNfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0 IHVpbnQ4X3QgKmJ1Zl9pbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IGZp bHRlcl9wcywgaW50ICpwc19jb3VudCk7CisKKy8qKgorICogV3JpdGVzIEFubmV4IEIgZm9ybWF0 dGVkIFZWQyBOQUwgdW5pdHMgdG8gYSBkYXRhIGJ1ZmZlci4KKyAqCisgKiBUaGUgTkFMIHVuaXRz IGFyZSBjb252ZXJ0ZWQgdG8gYW4gTVA0LWNvbXBhdGlibGUgZm9ybWF0IChzdGFydCBjb2RlIHBy ZWZpeGVzCisgKiBhcmUgcmVwbGFjZWQgYnkgNC1ieXRlIHNpemUgZmllbGRzLCBhcyBwZXIgSVNP L0lFQyAxNDQ5Ni0xNSkuCisgKgorICogSWYgZmlsdGVyX3BzIGlzIG5vbi16ZXJvLCBhbnkgVlZD IHBhcmFtZXRlciBzZXRzIGZvdW5kIGluIHRoZSBpbnB1dCB3aWxsIGJlCisgKiBkaXNjYXJkZWQs IGFuZCAqcHNfY291bnQgd2lsbCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBkaXNjYXJkZWQgUFMg TkFMIHVuaXRzLgorICoKKyAqIE9uIHN1Y2Nlc3MsICpzaXplIGhvbGRzIHRoZSBzaXplIChpbiBi eXRlcykgb2YgdGhlIG91dHB1dCBkYXRhIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYnVmX2luIGFk ZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBAcGFyYW0gc2l6 ZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBzaXplIChpbiBieXRlcykgb2Yg dGhlIGlucHV0CisgKiAgICAgICAgYnVmZmVyIChvbiBpbnB1dCkgYW5kIG9mIHRoZSBvdXRwdXQg YnVmZmVyIChvbiBzdWNjZXNzKQorICogQHBhcmFtIGJ1Zl9vdXQgb24gc3VjY2VzcywgYWRkcmVz cyBvZiB0aGUgdmFyaWFibGUgaG9sZGluZyB0aGUgYWRkcmVzcyBvZgorICogICAgICAgIHRoZSBv dXRwdXQgYnVmZmVyCisgKiBAcGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIgdG8gd3JpdGUgcGFyYW1l dGVyIHNldCBOQUwgdW5pdHMgdG8gdGhlIG91dHB1dCAoMCkKKyAqICAgICAgICBvciB0byBkaXNj YXJkIHRoZW0gKG5vbi16ZXJvKQorICogQHBhcmFtIHBzX2NvdW50IGFkZHJlc3Mgb2YgdGhlIHZh cmlhYmxlIHdoZXJlIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkCisgKiAgICAgICAgcGFyYW1ldGVy IHNldCBOQUwgdW5pdHMgc2hhbGwgYmUgd3JpdHRlbiwgbWF5IGJlIE5VTEwKKyAqIEByZXR1cm4g MCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBh biBBVkVSUk9SCisgKiAgICAgICAgIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisgKiBAbm90ZSAq YnVmX291dCB3aWxsIGJlIHRyZWF0ZWQgYXMgdW5pbml0aWFsaXplZCBvbiBpbnB1dCBhbmQgd29u J3QgYmUgZnJlZWQuCisgKi8KK2ludCBmZl92dmNfYW5uZXhiMm1wNF9idWYoY29uc3QgdWludDhf dCAqYnVmX2luLCB1aW50OF90ICoqYnVmX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsKKworLyoqCisgKiBXcml0 ZXMgVlZDIGV4dHJhZGF0YSAocGFyYW1ldGVyIHNldHMsIGRlY2xhcmF0aXZlIFNFSSBOQUwgdW5p dHMpIHRvIHRoZQorICogcHJvdmlkZWQgQVZJT0NvbnRleHQuCisgKgorICogSWYgdGhlIGV4dHJh ZGF0YSBpcyBBbm5leCBCIGZvcm1hdCwgaXQgZ2V0cyBjb252ZXJ0ZWQgdG8gdnZjQyBmb3JtYXQg YmVmb3JlCisgKiB3cml0aW5nLgorICoKKyAqIEBwYXJhbSBwYiBhZGRyZXNzIG9mIHRoZSBBVklP Q29udGV4dCB3aGVyZSB0aGUgdnZjQyBzaGFsbCBiZSB3cml0dGVuCisgKiBAcGFyYW0gZGF0YSBh ZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgZGF0YSBuZWVkZWQgdG8gd3JpdGUgdGhl IHZ2Y0MKKyAqIEBwYXJhbSBzaXplIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSBidWZmZXIK KyAqIEBwYXJhbSBwc19hcnJheV9jb21wbGV0ZW5lc3Mgd2hldGhlciBhbGwgcGFyYW1ldGVyIHNl dHMgYXJlIGluIHRoZSB2dmNDICgxKQorICogICAgICAgIG9yIHRoZXJlIG1heSBiZSBhZGRpdGlv bmFsIHBhcmFtZXRlciBzZXRzIGluIHRoZSBiaXRzdHJlYW0gKDApCisgKiBAcmV0dXJuID49MCBp biBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBB VkVSUk9SCisgKiAgICAgICAgIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisgKi8KK2ludCBmZl9p c29tX3dyaXRlX3Z2Y2MoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpkYXRhLAorICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcyk7 CisKKyNlbmRpZiAvKiBBVkZPUk1BVF9WVkNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQv dnZjZGVjLmMgYi9saWJhdmZvcm1hdC92dmNkZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4zMDRmOTAwOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQv dnZjZGVjLmMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIFJBVyBWVkMgdmlkZW8gZGVtdXhlcgor ICogQ29weXJpZ2h0IChjKSAyMDIwIE51byBNaSA8bnVvbWkyMDIxQGdtYWlsLmNvbT4KKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2Y29kZWMv dnZjLmgiCisKKyNpbmNsdWRlICJhdmZvcm1hdC5oIgorI2luY2x1ZGUgInJhd2RlYy5oIgorCitz dGF0aWMgaW50IHZ2Y19wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKK3sKKyAgICB1aW50MzJf dCBjb2RlID0gLTE7CisgICAgaW50IHNwcyA9IDAsIHBwcyA9IDAsIGlyYXAgPSAwOworICAgIGlu dCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHAtPmJ1Zl9zaXplIC0gMTsgaSsrKSB7CisgICAg ICAgIGNvZGUgPSAoY29kZSA8PCA4KSArIHAtPmJ1ZltpXTsKKyAgICAgICAgaWYgKChjb2RlICYg MHhmZmZmZmYwMCkgPT0gMHgxMDApIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgbmFsMiA9IHAtPmJ1 ZltpICsgMV07CisgICAgICAgICAgICBpbnQgdHlwZSA9IChuYWwyICYgMHhGOCkgPj4gMzsKKwor ICAgICAgICAgICAgaWYgKGNvZGUgJiAweDgwKSAvLyBmb3JiaWRkZW5femVyb19iaXQKKyAgICAg ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYgKChuYWwyICYgMHg3KSA9PSAw KSAvLyBudWhfdGVtcG9yYWxfaWRfcGx1czEKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwor ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIFZWQ19TUFNfTlVU OiAgICAgICBzcHMrKzsgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWVkNfUFBTX05VVDogICAg ICAgcHBzKys7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVlZDX0lEUl9OX0xQOgorICAgICAg ICAgICAgY2FzZSBWVkNfSURSX1dfUkFETDoKKyAgICAgICAgICAgIGNhc2UgVlZDX0NSQV9OVVQ6 CisgICAgICAgICAgICBjYXNlIFZWQ19HRFJfTlVUOiAgICAgICBpcmFwKys7IGJyZWFrOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNwcyAmJiBwcHMgJiYgaXJh cCkKKyAgICAgICAgcmV0dXJuIEFWUFJPQkVfU0NPUkVfRVhURU5TSU9OICsgMTsgLy8gMSBtb3Jl IHRoYW4gLm1wZworICAgIHJldHVybiAwOworfQorCitGRl9ERUZfUkFXVklERU9fREVNVVhFUih2 dmMsICJyYXcgVlZDIHZpZGVvIiwgdnZjX3Byb2JlLCAiaDI2NiwyNjYsdnZjIiwgQVZfQ09ERUNf SURfVlZDKQotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==