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 CDE3146038 for ; Mon, 1 May 2023 11:02:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A144968BF63; Mon, 1 May 2023 14:02:07 +0300 (EEST) Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ECF9668BFBF for ; Mon, 1 May 2023 14:02:04 +0300 (EEST) Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-517c840f181so1150106a12.3 for ; Mon, 01 May 2023 04:02:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=superfashi-com.20221208.gappssmtp.com; s=20221208; t=1682938923; x=1685530923; 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=ixY/MfH9ovTa1kaJYTe0NfaB12dltaUtqUAS+uSHCBs=; b=Ws8c3+KvgbeeOBd1qrqNi6Z05iqj8YKF+YGHl/2RhELJwtRjGGIjfk8Pu/SdYPe4nI aFN00aTTRHlkYcjfgOW0i6XpHYAyREp7/cZJAKRYvuhuHP+e7cW2VzcDyzXTNoPKwuym 0zo/tw4+dV9UMr5HzuqjojGpc7pPQyYGXuZj7SKSbLi8r6YF3PAM8Ial/Q61RPGqpOxX aZ58zBvFcZAosHPEWe4+t2YFZkaJ75ERUkPjaZ92WuwGJpWc3721/3pIP5cenrao/8DV /rb/QY7IhfYfRtkdvBdGZgjSWI2ePlmEn14gucfXJK9LWypYqUeXyqHApKiGxcNp4AY8 mL8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682938923; x=1685530923; 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=ixY/MfH9ovTa1kaJYTe0NfaB12dltaUtqUAS+uSHCBs=; b=aL0LAElmJI7IBp+V9gRLOmZfumAi5gJOGrKsGaREEnLI9O9M2joS4OeEKXOc6pK8tu jxGiM+gHdOkYen4iDuZbWLpYn3WvlQAIyKTNmhle3wzh9lS7E33ef0yhjoRKMetHo3Cw 6lPXBEuCmiLmUZGthC+S04g5qcqjKSCG9lniS5fwYsYAzEtkj+N3HSPGiq+14LDHYVwH d8BnWO/BWtjgPhwPcwdqKPDjXFVIs5tLugKWR8ajWRLRqqu/LVtCsS36vgZbLsCyZ2Lw JLs2JMpobqmLjBohUCQMhh1+C0CI8Rh59YMRrt9LcUsmQz/dYdTxWu1GbKeGhmfvU/1p SujQ== X-Gm-Message-State: AC+VfDxUd0jb/s5yqYqsea6z4CXVgq4Ii2KVkk2k1iwbCIR7VH2TX+Xg ltEFBcqFggrCLliOvgiopg8LKZYJV6DUI+X8om8= X-Google-Smtp-Source: ACHHUZ5fMr1Iev8nuOuKGysywqC342OD8h55lWmpn0KNvuvkycQzRhInnGISEvVnHpWVCtooVsoaWw== X-Received: by 2002:a17:902:e14a:b0:1a9:765c:77ac with SMTP id d10-20020a170902e14a00b001a9765c77acmr9619404pla.7.1682938922048; Mon, 01 May 2023 04:02:02 -0700 (PDT) Received: from localhost.localdomain ([2404:7a80:800:5e00:127:9529:b633:e5e0]) by smtp.gmail.com with ESMTPSA id 21-20020a170902c11500b001a52c38350fsm17676623pli.169.2023.05.01.04.02.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 May 2023 04:02:01 -0700 (PDT) From: SuperFashi To: ffmpeg-devel@ffmpeg.org Date: Mon, 1 May 2023 20:01:21 +0900 Message-Id: <20230501110120.20778-1-admin@superfashi.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230429055306.7470-1-admin@superfashi.com> References: <20230429055306.7470-1-admin@superfashi.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5] avformat: add MMTP parser and MMT/TLV demuxer 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: SuperFashi 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: djEgLT4gdjI6IFJlZmFjdG9yIHVzaW5nIEdldEJ5dGVDb250ZXh0OyBGaXggY29tcGlsZSBlcnJv ci4KdjIgLT4gdjM6IFJlbW92ZSBkZWJ1ZyBzdGF0ZW1lbnQuCnYzIC0+IHY0OiBTcXVhc2ggY29t bWl0cwp2NCAtPiB2NTogSW1wcm92ZSBwb3J0YWJpbGl0eTsgQ29zbWV0aWMgY2hhbmdlcy4KClRo aXMgcGF0Y2ggYWRkcyBhbiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1UUCkgcGFy c2VyLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMjMwMDgtMSwgYW5kIGFuIE1NVCBwcm90b2NvbCBv dmVyIFRMViBwYWNrZXRzIChNTVQvVExWKSBkZW11eGVyLCBhcyBkZWZpbmVkIGluIEFSSUIgU1RE LUIzMi4gQ3VycmVudGx5LCBpdCBzdXBwb3J0cyBIRVZDLCBBQUMgTEFUTSwgYW5kIEFSSUItVFRN TCBkZW11eGluZy4KClNpbmNlIE1NVFAgaXMgZGVzaWduZWQgdG8gdHJhbnNtaXQgb3ZlciBJUCwg dGhlcmUgaXMgbm8gc2l6ZSBpbmZvcm1hdGlvbiB3aXRoaW4gZWFjaCBNTVRQIHBhY2tldCwgYW5k IHRoZXJlIGlzIG5vIG9uLWRpc2sgZm9ybWF0IGRlZmluZWQgYWxvbmdzaWRlIHRoZSBwcm90b2Nv bC4gT25lIGluZHVzdHJpYWwgc29sdXRpb24gaXMgYSBzaW1wbGUgY29udGFpbmVyIGZvcm1hdCB1 c2luZyB0eXBl4oCTbGVuZ3Ro4oCTdmFsdWUgcGFja2V0cywgd2hpY2ggaXMgZGVmaW5lZCBpbiBB UklCIFNURC1CMzIuCgpBbm90aGVyIGtub3duIGNvbnRhaW5lciBmb3JtYXQgZm9yIE1NVFAgaXMg dXNpbmcgcGFja2V0IGNhcHR1cmUgKHBjYXApIGZpbGVzIHdoaWNoIHJlY29yZHMgbmV0d29yayBw YWNrZXRzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlbXV4ZXIgZm9yIHRoaXMg Y29udGFpbmVyIGZvcm1hdC4KClNpZ25lZC1vZmYtYnk6IFN1cGVyRmFzaGkgPGFkbWluQHN1cGVy ZmFzaGkuY29tPgotLS0KIENoYW5nZWxvZyAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL2Rl bXV4ZXJzLnRleGkgICAgICAgIHwgICAgNCArCiBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgfCAg ICAxICsKIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyB8ICAgIDEgKwogbGliYXZmb3JtYXQvbW10 cC5jICAgICAgIHwgMTUyOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog bGliYXZmb3JtYXQvbW10cC5oICAgICAgIHwgICA2NCArKwogbGliYXZmb3JtYXQvbW10dGx2LmMg ICAgIHwgIDMzNCArKysrKysrKysKIGxpYmF2Zm9ybWF0L3ZlcnNpb24uaCAgICB8ICAgIDIgKy0K IDggZmlsZXMgY2hhbmdlZCwgMTkzNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvbW10cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZmb3JtYXQvbW10cC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvbW10dGx2LmMK CmRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKaW5kZXggNDkwMWVmNmFkNy4uNTk0 YzQ0NWVhMiAxMDA2NDQKLS0tIGEvQ2hhbmdlbG9nCisrKyBiL0NoYW5nZWxvZwpAQCAtNyw2ICs3 LDcgQEAgdmVyc2lvbiA8bmV4dD46CiAtIEV4dGVuZCBWQUFQSSBzdXBwb3J0IGZvciBsaWJ2YS13 aW4zMiBvbiBXaW5kb3dzCiAtIGFmaXJlcXNyYyBhdWRpbyBzb3VyY2UgZmlsdGVyCiAtIGFybHMg ZmlsdGVyCistIE1NVFAgcGFyc2VyIGFuZCBNTVQvVExWIGRlbXV4ZXIKIAogdmVyc2lvbiA2LjA6 CiAtIFJhZGlhbmNlIEhEUiBpbWFnZSBzdXBwb3J0CmRpZmYgLS1naXQgYS9kb2MvZGVtdXhlcnMu dGV4aSBiL2RvYy9kZW11eGVycy50ZXhpCmluZGV4IDJkMzNiNDdhNTYuLjU2YWFiMjUxYjIgMTAw NjQ0Ci0tLSBhL2RvYy9kZW11eGVycy50ZXhpCisrKyBiL2RvYy9kZW11eGVycy50ZXhpCkBAIC02 ODksNiArNjg5LDEwIEBAIFNldCB0aGUgc2FtcGxlIHJhdGUgZm9yIGxpYm9wZW5tcHQgdG8gb3V0 cHV0LgogUmFuZ2UgaXMgZnJvbSAxMDAwIHRvIElOVF9NQVguIFRoZSB2YWx1ZSBkZWZhdWx0IGlz IDQ4MDAwLgogQGVuZCB0YWJsZQogCitAc2VjdGlvbiBtbXR0bHYKKworRGVtdXhlciBmb3IgTU1U IHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKE1NVC9UTFYpLCBhcyBkZWZpbmVkIGluIEFSSUIg U1RELUIzMi4KKwogQHNlY3Rpb24gbW92L21wNC8zZ3AKIAogRGVtdXhlciBmb3IgUXVpY2t0aW1l IEZpbGUgRm9ybWF0ICYgSVNPL0lFQyBCYXNlIE1lZGlhIEZpbGUgRm9ybWF0IChJU08vSUVDIDE0 NDk2LTEyIG9yIE1QRUctNCBQYXJ0IDEyLCBJU08vSUVDIDE1NDQ0LTEyIG9yIEpQRUcgMjAwMCBQ YXJ0IDEyKS4KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3JtYXQv TWFrZWZpbGUKaW5kZXggZjhhZDdjNmExMS4uZTMyZDZlNzFhMyAxMDA2NDQKLS0tIGEvbGliYXZm b3JtYXQvTWFrZWZpbGUKKysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKQEAgLTM1NCw2ICszNTQs NyBAQCBPQkpTLSQoQ09ORklHX01MVl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IG1sdmRlYy5v IHJpZmZkZWMubwogT0JKUy0kKENPTkZJR19NTV9ERU1VWEVSKSAgICAgICAgICAgICAgICArPSBt bS5vCiBPQkpTLSQoQ09ORklHX01NRl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IG1tZi5vCiBP QkpTLSQoQ09ORklHX01NRl9NVVhFUikgICAgICAgICAgICAgICAgICs9IG1tZi5vIHJhd2VuYy5v CitPQkpTLSQoQ09ORklHX01NVFRMVl9ERU1VWEVSKSAgICAgICAgICAgICs9IG1tdHAubyBtbXR0 bHYubwogT0JKUy0kKENPTkZJR19NT0RTX0RFTVVYRVIpICAgICAgICAgICAgICArPSBtb2RzLm8K IE9CSlMtJChDT05GSUdfTU9GTEVYX0RFTVVYRVIpICAgICAgICAgICAgKz0gbW9mbGV4Lm8KIE9C SlMtJChDT05GSUdfTU9WX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gbW92Lm8gbW92X2NoYW4u byBtb3ZfZXNkcy5vIFwKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyBiL2xp YmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwppbmRleCBlZmRiMzRlMjlkLi5kNWY0ZjU2ODBlIDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKKysrIGIvbGliYXZmb3JtYXQvYWxsZm9y bWF0cy5jCkBAIC0yNzAsNiArMjcwLDcgQEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZm X21sdl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX21tX2RlbXV4ZXI7 CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfbW1mX2RlbXV4ZXI7CiBleHRlcm4gY29u c3QgRkZPdXRwdXRGb3JtYXQgZmZfbW1mX211eGVyOworZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3Jt YXQgIGZmX21tdHRsdl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX21v ZHNfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tb2ZsZXhfZGVtdXhl cjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tb3ZfZGVtdXhlcjsKZGlmZiAtLWdp dCBhL2xpYmF2Zm9ybWF0L21tdHAuYyBiL2xpYmF2Zm9ybWF0L21tdHAuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jNmVlYmJmZjM4Ci0tLSAvZGV2L251bGwKKysrIGIv bGliYXZmb3JtYXQvbW10cC5jCkBAIC0wLDAgKzEsMTUyOCBAQAorLyoKKyAqIE1QRUcgTWVkaWEg VHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBwYXJzZXIsIGFzIGRlZmluZWQgaW4gSVNPL0lFQyAy MzAwOC0xLgorICogQ29weXJpZ2h0IChjKSAyMDIzIFN1cGVyRmFzaGkKKyAqCisgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs b25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2luY2x1 ZGUgImxpYmF2Y29kZWMvYnl0ZXN0cmVhbS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2Vy dC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvbWVtLmgiCisjaW5jbHVkZSAiZGVtdXguaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgor I2luY2x1ZGUgIm1tdHAuaCIKKyNpbmNsdWRlICJuZXR3b3JrLmgiCisKK3N0cnVjdCBNTVRHZW5l cmFsTG9jYXRpb25JbmZvIHsKKyAgICB1aW50OF90IGxvY2F0aW9uX3R5cGU7CisgICAgdW5pb24g eworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDE2X3QgcGFja2V0X2lkOworICAg ICAgICB9IHR5cGUwOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IGluX2Fk ZHIgaXB2NF9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGlwdjRfZHN0X2Fk ZHI7CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICBkc3RfcG9ydDsKKyAgICAgICAgICAgIHVp bnQxNl90ICAgICAgIHBhY2tldF9pZDsKKyAgICAgICAgfSB0eXBlMTsKKyAgICAgICAgc3RydWN0 IHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X3NyY19hZGRyOworICAgICAgICAg ICAgc3RydWN0IGluNl9hZGRyIGlwdjZfZHN0X2FkZHI7CisgICAgICAgICAgICB1aW50MTZfdCAg ICAgICAgZHN0X3BvcnQ7CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgcGFja2V0X2lkOwor ICAgICAgICB9IHR5cGUyOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDE2X3Qg bmV0d29ya19pZDsKKyAgICAgICAgICAgIHVpbnQxNl90IE1QRUdfMl90cmFuc3BvcnRfc3RyZWFt X2lkOworICAgICAgICAgICAgdWludDE2X3QgTVBFR18yX1BJRDogMTM7CisgICAgICAgIH0gdHlw ZTM7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9z cmNfYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X2RzdF9hZGRyOworICAg ICAgICAgICAgdWludDE2X3QgICAgICAgIGRzdF9wb3J0OworICAgICAgICAgICAgdWludDE2X3Qg ICAgICAgIE1QRUdfMl9QSUQ6IDEzOworICAgICAgICB9IHR5cGU0OworICAgICAgICBzdHJ1Y3Qg eworICAgICAgICAgICAgY2hhciBVUkxbMHgxMDAgKyAxXTsKKyAgICAgICAgfSB0eXBlNTsKKyAg ICB9OworfTsKKworc3RhdGljIGludCBwYXJzZV9tbXRfZ2VuZXJhbF9sb2NhdGlvbl9pbmZvKAor ICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvICppbmZvLCBHZXRCeXRlQ29udGV4dCAq Z2JjKQoreworICAgIHVpbnQ4X3QgdXJsX3NpemU7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSA8IDEpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgIHN3aXRjaCAoaW5mby0+bG9jYXRpb25fdHlwZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRl dShnYmMpKSB7CisgICAgY2FzZSAweDAwOgorICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IDIpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKKyAgICAgICAgaW5mby0+dHlwZTAucGFja2V0X2lkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KGdiYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwMToKKyAgICAgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMzIgKyAzMiArIDE2ICsgMTYpIC8gOCkKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBieXRlc3RyZWFt Ml9nZXRfYnVmZmVydShnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBlMS5pcHY0X3NyY19hZGRy LCA0KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCAodWludDhfdCAqKSAm aW5mby0+dHlwZTEuaXB2NF9kc3RfYWRkciwgNCk7CisgICAgICAgIGluZm8tPnR5cGUxLmRzdF9w b3J0ICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBpbmZvLT50eXBlMS5w YWNrZXRfaWQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSAweDAyOgorICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2Jj KSA8ICgxMjggKyAxMjggKyAxNiArIDE2KSAvIDgpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoCisgICAgICAg ICAgICBnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBlMi5pcHY2X3NyY19hZGRyLCAxNik7Cisg ICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KAorICAgICAgICAgICAgZ2JjLCAodWludDhf dCAqKSAmaW5mby0+dHlwZTIuaXB2Nl9kc3RfYWRkciwgMTYpOworICAgICAgICBpbmZvLT50eXBl Mi5kc3RfcG9ydCAgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgaW5mby0+ dHlwZTIucGFja2V0X2lkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgMHgwMzoKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KGdiYykgPCAoMTYgKyAxNiArIDMgKyAxMykgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGluZm8tPnR5cGUzLm5ldHdvcmtfaWQgICAgICAg ICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8tPnR5 cGUzLk1QRUdfMl90cmFuc3BvcnRfc3RyZWFtX2lkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdi Yyk7CisgICAgICAgIGluZm8tPnR5cGUzLk1QRUdfMl9QSUQgPQorICAgICAgICAgICAgYnl0ZXN0 cmVhbTJfZ2V0X2JlMTZ1KGdiYykgJiAwYjExMTExMTExMTExMTE7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgMHgwNDoKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdi YykgPCAoMTI4ICsgMTI4ICsgMTYgKyAzICsgMTMpIC8gOCkKKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydSgKKyAg ICAgICAgICAgIGdiYywgKHVpbnQ4X3QgKikgJmluZm8tPnR5cGU0LmlwdjZfc3JjX2FkZHIsIDE2 KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoCisgICAgICAgICAgICBnYmMsICh1 aW50OF90ICopICZpbmZvLT50eXBlNC5pcHY2X2RzdF9hZGRyLCAxNik7CisgICAgICAgIGluZm8t PnR5cGU0LmRzdF9wb3J0ICAgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAg aW5mby0+dHlwZTQuTVBFR18yX1BJRCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICYgMGIx MTExMTExMTExMTExOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDU6CisgICAgICAgIHVy bF9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUoZ2JjKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJf Z2V0X2J1ZmZlcihnYmMsICh1aW50OF90ICopIGluZm8tPnR5cGU1LlVSTCwgdXJsX3NpemUpOwor ICAgICAgICBpbmZvLT50eXBlNS5VUkxbdXJsX3NpemVdID0gJ1wwJzsKKyAgICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAg fQorICAgIHJldHVybiAwOworfQorCitzdHJ1Y3QgU3RyZWFtcyB7CisgICAgQVZTdHJlYW0gKnN0 cmVhbTsKKworICAgIGludCBudW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOworICAgIHN0cnVjdCBN UFVUaW1lc3RhbXBEZXNjcmlwdG9yIHsKKyAgICAgICAgdWludDMyX3Qgc2VxX251bTsKKyAgICAg ICAgaW50NjRfdCAgcHJlc2VudGF0aW9uX3RpbWU7CisgICAgfSAqdGltZXN0YW1wX2Rlc2NyaXB0 b3I7CisKKyAgICBpbnQgbnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7CisgICAgc3RydWN0 IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciB7CisgICAgICAgIHVpbnQzMl90IHNlcV9u dW07CisgICAgICAgIHVpbnQxNl90IGRlY29kaW5nX3RpbWVfb2Zmc2V0OworICAgICAgICB1aW50 OF90ICBudW1fb2ZfYXU7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50MTZfdCBk dHNfcHRzX29mZnNldDsKKyAgICAgICAgICAgIHVpbnQxNl90IHB0c19vZmZzZXQ7CisgICAgICAg IH0gYXVbMHgxMDBdOworICAgIH0gKmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcjsKKworICAgIHVp bnQzMl90ICAgIGxhc3Rfc2VxdWVuY2VfbnVtYmVyOworICAgIHVpbnQxNl90ICAgIGF1X2NvdW50 OworICAgIEFWQnVmZmVyUmVmICpwZW5kaW5nX2J1ZmZlcjsKKyAgICBpbnQ2NF90ICAgICBvZmZz ZXQ7CisgICAgaW50ICAgICAgICAgZmxhZ3M7CisKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqbmV4dDsK K307CisKK3N0cnVjdCBNTVRQQ29udGV4dCB7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVy ICphc3NlbWJsZXI7CisgICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAgICpzdHJlYW1zOworICAg IEFWUHJvZ3JhbSAgICAgICAgICAgICAgICAqcHJvZ3JhbTsKKyAgICAvLyBzdHJ1Y3QgTU1UR2Vu ZXJhbExvY2F0aW9uSW5mbyBtcHRfbG9jYXRpb247IFRPRE8KKworICAgIC8vIGJlbG93IGFyZSB0 ZW1wb3JhcnkgZmllbGRzIGF2YWlsYWJsZSBmb3IgdGhlIHNjb3BlIG9mIGEgc2luZ2xlIHBhY2tl dAorICAgIEFWRm9ybWF0Q29udGV4dCAqczsKKyAgICBBVlBhY2tldCAgICAgICAgKnBrdDsKKyAg ICB1aW50MTZfdCAgICAgICAgY3VycmVudF9waWQ7CisgICAgYm9vbCAgICAgICAgICAgIGlzX3Jh cDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgU3RyZWFtcyAqZmluZF9jdXJyZW50X3N0cmVhbShzdHJ1 Y3QgTU1UUENvbnRleHQgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtczsKKyAg ICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVhbXMgIT0gTlVMTDsgc3RyZWFtcyA9 IHN0cmVhbXMtPm5leHQpCisgICAgICAgIGlmIChzdHJlYW1zLT5zdHJlYW0tPmlkID09IGN0eC0+ Y3VycmVudF9waWQpCisgICAgICAgICAgICByZXR1cm4gc3RyZWFtczsKKyAgICByZXR1cm4gTlVM TDsKK30KKworc3RhdGljIHN0cnVjdCBTdHJlYW1zICoKK2ZpbmRfb3JfYWxsb2NhdGVfc3RyZWFt KHN0cnVjdCBNTVRQQ29udGV4dCAqY3R4LCB1aW50MTZfdCBwaWQpCit7CisgICAgQVZTdHJlYW0g ICAgICAgKnN0cmVhbTsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtczsKKyAgICBmb3IgKHN0 cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVhbXMgIT0gTlVMTDsgc3RyZWFtcyA9IHN0cmVhbXMt Pm5leHQpCisgICAgICAgIGlmIChzdHJlYW1zLT5zdHJlYW0tPmlkID09IHBpZCkgeworICAgICAg ICAgICAgZmZzdHJlYW0oc3RyZWFtcy0+c3RyZWFtKS0+bmVlZF9jb250ZXh0X3VwZGF0ZSA9IDE7 CisgICAgICAgICAgICByZXR1cm4gc3RyZWFtczsKKyAgICAgICAgfQorCisgICAgc3RyZWFtID0g YXZmb3JtYXRfbmV3X3N0cmVhbShjdHgtPnMsIE5VTEwpOworICAgIGlmIChzdHJlYW0gPT0gTlVM TCkgcmV0dXJuIE5VTEw7CisgICAgc3RyZWFtLT5pZCA9IHBpZDsKKyAgICBhdl9wcm9ncmFtX2Fk ZF9zdHJlYW1faW5kZXgoY3R4LT5zLCBjdHgtPnByb2dyYW0tPmlkLCBzdHJlYW0tPmluZGV4KTsK KworICAgIHN0cmVhbXMgPSBhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgU3RyZWFtcykpOworICAg IGlmIChzdHJlYW1zID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIHN0cmVhbXMtPnN0cmVhbSA9 IHN0cmVhbTsKKyAgICBzdHJlYW1zLT5uZXh0ICAgPSBjdHgtPnN0cmVhbXM7CisgICAgc3RyZWFt cy0+b2Zmc2V0ID0gLTE7CisgICAgY3R4LT5zdHJlYW1zICAgID0gc3RyZWFtczsKKyAgICByZXR1 cm4gc3RyZWFtczsKK30KKworZW51bSB7CisgICAgTU1UX1BBQ0tBR0VfVEFCTEVfSUQgID0gMHgy MCwKKyAgICBQQUNLQUdFX0xJU1RfVEFCTEVfSUQgPSAweDgwLAorfTsKKworZW51bSB7CisgICAg TVBVX1RJTUVTVEFNUF9ERVNDUklQVE9SICAgICAgICAgID0gMHgwMDAxLAorICAgIEFDQ0VTU19D T05UUk9MX0RFU0NSSVBUT1IgICAgICAgICA9IDB4ODAwNCwKKyAgICBWSURFT19DT01QT05FTlRf REVTQ1JJUFRPUiAgICAgICAgPSAweDgwMTAsCisgICAgTUhfU1RSRUFNX0lERU5USUZJRVJfREVT Q1JJUFRPUiAgID0gMHg4MDExLAorICAgIE1IX0FVRElPX0NPTVBPTkVOVF9ERVNDUklQVE9SICAg ICA9IDB4ODAxNCwKKyAgICBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICAgPSAweDgw MjAsCisgICAgTVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVNDUklQVE9SID0gMHg4MDI2LAorfTsK Kworc3RhdGljIGludAorcGFyc2VfdmlkZW9fY29tcG9uZW50X2Rlc2NyaXB0b3IoQVZTdHJlYW0g KnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50OF90IGRlc2NyaXB0b3Jf bGVuZ3RoOworICAgIHVpbnQ4X3QgbGFuZ3VhZ2VfY29kZVs0XTsKKworICAgIGlmIChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykg IT0gVklERU9fQ09NUE9ORU5UX0RFU0NSSVBUT1IpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworICAgIGRlc2NyaXB0b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1 KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRlc2Ny aXB0b3JfbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB7 CisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQo Jm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisgICAgICAgIC8qCisgICAg ICAgICAqIHNraXA6CisgICAgICAgICAqIC0gdmlkZW9fcmVzb2x1dGlvbgorICAgICAgICAgKiAt IHZpZGVvX2FzcGVjdF9yYXRpbworICAgICAgICAgKiAtIHZpZGVvX3NjYW5fZmxhZworICAgICAg ICAgKiAtIHJlc2VydmVkCisgICAgICAgICAqIC0gdmlkZW9fZnJhbWVfcmF0ZQorICAgICAgICAg KiAtIGNvbXBvbmVudF90YWcKKyAgICAgICAgICogLSB2aWRlb190cmFuc2Zlcl9jaGFyYWN0ZXJp c3RpY3MKKyAgICAgICAgICogLSByZXNlcnZlZAorICAgICAgICAgKi8KKyAgICAgICAgYnl0ZXN0 cmVhbTJfc2tpcCgmbmdiYywgKDQgKyA0ICsgMSArIDIgKyA1ICsgMTYgKyA0ICsgNCkgLyA4KTsK KworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMykKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBieXRlc3RyZWFt Ml9nZXRfYnVmZmVydSgmbmdiYywgbGFuZ3VhZ2VfY29kZSwgMyk7CisgICAgICAgIGxhbmd1YWdl X2NvZGVbM10gPSAnXDAnOworICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2Ny aXB0b3JfbGVuZ3RoKTsKKworICAgIHJldHVybiBhdl9kaWN0X3NldCgmc3RyZWFtLT5tZXRhZGF0 YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2VfY29kZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNl X21oX2F1ZGlvX2NvbXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVD b250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKyAgICB1aW50 OF90IHN0cmVhbV9jb250ZW50OworICAgIHVpbnQ4X3Qgc3RyZWFtX3R5cGU7CisgICAgdWludDhf dCBsYW5ndWFnZV9jb2RlWzRdOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPCAoMTYgKyA4KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBNSF9BVURJT19DT01QT05F TlRfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAg ZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgdWludDhf dCBieXRlOworICAgICAgICBib29sIEVTX211bHRpX2xpbmd1YWxfZmxhZzsKKworICAgICAgICBH ZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMt PmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdCgmbmdiYykgPAorICAgICAgICAgICAgKDQgKyA0ICsgOCArIDE2ICsgOCAr IDggKyAxICsgMSArIDIgKyAzICsgMSArIDI0KSAvIDgpCisgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBieXRlICAgICAgICAgICA9IGJ5dGVzdHJlYW0y X2dldF9ieXRldSgmbmdiYyk7CisgICAgICAgIHN0cmVhbV9jb250ZW50ID0gYnl0ZSAmIDBiMTEx MTsKKworICAgICAgICAvKgorICAgICAgICAgKiBza2lwOgorICAgICAgICAgKiAtIGNvbXBvbmVu dF90eXBlCisgICAgICAgICAqIC0gY29tcG9uZW50X3RhZworICAgICAgICAgKi8KKyAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIDMpOworICAgICAgICBzdHJlYW1fdHlwZSA9IGJ5dGVz dHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgLy8gc2tpcDogc2ltdWxjYXN0X2dy b3VwX3RhZworICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMSk7CisKKyAgICAgICAg Ynl0ZSAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKyAg ICAgICAgRVNfbXVsdGlfbGluZ3VhbF9mbGFnID0gYnl0ZSA+PiA3OworCisgICAgICAgIGJ5dGVz dHJlYW0yX2dldF9idWZmZXJ1KCZuZ2JjLCBsYW5ndWFnZV9jb2RlLCAzKTsKKyAgICAgICAgbGFu Z3VhZ2VfY29kZVszXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKEVTX211bHRpX2xpbmd1YWxfZmxh ZykgeworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8 IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAg ICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMyk7CisgICAgICAgIH0KKyAgICB9CisgICAg Ynl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICBzd2l0Y2gg KHN0cmVhbV9jb250ZW50KSB7CisgICAgY2FzZSAweDM6CisgICAgICAgIHN3aXRjaCAoc3RyZWFt X3R5cGUpIHsKKyAgICAgICAgY2FzZSAweDExOgorICAgICAgICAgICAgc3RyZWFtLT5jb2RlY3Bh ci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9BQUNfTEFUTTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIDB4MWM6CisgICAgICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19p ZCA9IEFWX0NPREVDX0lEX0FBQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgMHg0OgorICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2Rl Y19pZCA9IEFWX0NPREVDX0lEX01QNEFMUzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg cmV0dXJuIGF2X2RpY3Rfc2V0KCZzdHJlYW0tPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFn ZV9jb2RlLCAwKTsKK30KKworI2RlZmluZSBNQVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SIDMy CisjZGVmaW5lIERJRkYoYSwgYikgKChhKSA+IChiKSA/ICgoYSkgLSAoYikpIDogKChiKSAtIChh KSkpCisKK3N0YXRpYyBpbnQKK3BhcnNlX21wdV90aW1lc3RhbXBfZGVzY3JpcHRvcihzdHJ1Y3Qg U3RyZWFtcyAqc3RyZWFtcywgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50OF90IGRl c2NyaXB0b3JfbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdi YykgPCAoMTYgKyA4KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IE1QVV9USU1FU1RBTVBfREVT Q1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3Jp cHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgR2V0Qnl0ZUNvbnRl eHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRl c2NyaXB0b3JfbGVuZ3RoKTsKKworICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoJm5nYmMpID4gMCkgeworICAgICAgICAgICAgdWludDY0X3QgbXB1X3NlcV9udW07Cisg ICAgICAgICAgICBpbnQ2NF90ICBtcHVfcHJlc2VudGF0aW9uX3RpbWU7CisgICAgICAgICAgICBz aXplX3QgICBpOworCisgICAgICAgICAgICBzdHJ1Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciAq ZGVzYzsKKworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2Jj KSA8ICgzMiArIDY0KSAvIDgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgICAgICBtcHVfc2VxX251bSA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydSgm bmdiYyk7CisgICAgICAgICAgICBtcHVfcHJlc2VudGF0aW9uX3RpbWUgPQorICAgICAgICAgICAg ICAgIGZmX3BhcnNlX250cF90aW1lKGJ5dGVzdHJlYW0yX2dldF9iZTY0dSgmbmdiYykpIC0gTlRQ X09GRlNFVF9VUzsKKworICAgICAgICAgICAgaWYgKG1wdV9zZXFfbnVtID49IHN0cmVhbXMtPmxh c3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0 cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPT0KKyAgICAg ICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjID0gc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBlbmQyOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9y czsgKytpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2Ny aXB0b3JbaV0uc2VxX251bSA8CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT5sYXN0 X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVh bXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHN0 cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnMgKyAxID4KKyAgICAgICAgICAgICAgICAg ICAgTUFYX05VTV9USU1FU1RBTVBfREVTQ1JJUFRPUikgeworICAgICAgICAgICAgICAgICAgICAv LyB3ZSBoYXZlIGFsbCBkZXNjcmlwdG9ycyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBzZXF1ZW5j ZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2FuJ3QgYWRkIG1vcmUsIHNvIHdl IHNob3VsZCBldmljdCB0aGUgb25lIHdpdGggdGhlIGxhcmdlc3QgZGlzdGFuY2UKKyAgICAgICAg ICAgICAgICAgICAgdWludDY0X3QgbWF4X2Rpc3QgPSAwOworICAgICAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERJRkYoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSA+IG1heF9kaXN0KSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyAgICAgPSBzdHJlYW1zLT50aW1lc3RhbXBf ZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Rpc3QgPSBE SUZGKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT50aW1lc3RhbXBf ZGVzY3JpcHRvcltpXS5zZXFfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt cHVfc2VxX251bSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIGF2X2Fzc2VydDEoZGVzYyAhPSBOVUxMKTsgLy8gc2hvdWxkIG5ldmVyIGZhaWwKKyAgICAg ICAgICAgICAgICAgICAgZ290byBlbmQxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIGRlc2MgPSBhdl9keW5hcnJheTJfYWRkKAorICAgICAgICAgICAgICAgICAgICAodm9p ZCAqKikgJnN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAg ICAmc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9ycywKKyAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yKSwgTlVMTCk7CisgICAgICAg ICAgICAgICAgaWYgKGRlc2MgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAg ICAgICAgICAgICAgIGVuZDE6CisgICAgICAgICAgICAgICAgZGVzYy0+c2VxX251bSAgICAgICAg ICAgPSBtcHVfc2VxX251bTsKKyAgICAgICAgICAgICAgICBlbmQyOgorICAgICAgICAgICAgICAg IGRlc2MtPnByZXNlbnRhdGlvbl90aW1lID0gbXB1X3ByZXNlbnRhdGlvbl90aW1lOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgZGVz Y3JpcHRvcl9sZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vf bXB1X2V4dGVuZGVkX3RpbWVzdGFtcF9kZXNjcmlwdG9yKAorICAgIHN0cnVjdCBTdHJlYW1zICpz dHJlYW1zLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9s ZW5ndGg7CisKKyAgICBBVlN0cmVhbSAqc3RyZWFtID0gc3RyZWFtcy0+c3RyZWFtOworCisgICAg aWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4KSAvIDgpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRf YmUxNnUoZ2JjKSAhPSBNUFVfRVhURU5ERURfVElNRVNUQU1QX0RFU0NSSVBUT1IpCisgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGRlc2NyaXB0b3JfbGVuZ3RoID0gYnl0 ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoZ2JjKSA8IGRlc2NyaXB0b3JfbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgIGJ5dGU7CisgICAgICAgIHVpbnQ4 X3QgIHB0c19vZmZzZXRfdHlwZTsKKyAgICAgICAgYm9vbCB0aW1lc2NhbGVfZmxhZzsKKyAgICAg ICAgdWludDE2X3QgZGVmYXVsdF9wdHNfb2Zmc2V0ID0gMDsKKworICAgICAgICBHZXRCeXRlQ29u dGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwg ZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdCgmbmdiYykgPCAoNSArIDIgKyAxKSAvIDgpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZSAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0 X2J5dGUoJm5nYmMpOworICAgICAgICBwdHNfb2Zmc2V0X3R5cGUgPSAoYnl0ZSA+PiAxKSAmIDBi MTE7CisgICAgICAgIHRpbWVzY2FsZV9mbGFnICA9IGJ5dGUgJiAxOworCisgICAgICAgIGlmICh0 aW1lc2NhbGVfZmxhZykgeworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KCZuZ2JjKSA8IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgICAgICAgICBzdHJlYW0tPnRpbWVfYmFzZS5udW0gPSAxOworICAgICAgICAgICAg c3RyZWFtLT50aW1lX2Jhc2UuZGVuID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KCZuZ2JjKTsKKyAg ICAgICAgfQorCisgICAgICAgIGlmIChwdHNfb2Zmc2V0X3R5cGUgPT0gMSkgeworICAgICAgICAg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDIpCisgICAgICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICBkZWZhdWx0X3B0 c19vZmZzZXQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAgICAgICB9CisKKyAg ICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA+IDApIHsKKyAg ICAgICAgICAgIHNpemVfdCAgIGk7CisgICAgICAgICAgICB1aW50OF90ICBudW1fb2ZfYXU7Cisg ICAgICAgICAgICB1aW50MTZfdCBkZWNvZGluZ190aW1lX29mZnNldDsKKyAgICAgICAgICAgIHVp bnQ2NF90IG1wdV9zZXFfbnVtOworCisgICAgICAgICAgICBzdHJ1Y3QgTVBVRXh0ZW5kZWRUaW1l c3RhbXBEZXNjcmlwdG9yICpkZXNjID0gTlVMTDsKKworICAgICAgICAgICAgaWYgKHB0c19vZmZz ZXRfdHlwZSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09N RTsgIC8vIHdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzCisKKyAgICAgICAgICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAoMzIgKyAyICsgNiArIDE2ICsg OCkgLyA4KQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICAgICAgbXB1X3NlcV9udW0gPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoJm5nYmMpOworICAg ICAgICAgICAgLy8gc2tpcDogbGVhcF9pbmRpY2F0b3IKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0y X3NraXAoJm5nYmMsICgyICsgNikgLyA4KTsKKyAgICAgICAgICAgIGRlY29kaW5nX3RpbWVfb2Zm c2V0ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsKKyAgICAgICAgICAgIG51bV9vZl9h dSAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKworICAgICAgICAg ICAgaWYgKG1wdV9zZXFfbnVtID49IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7Cisg ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1w X2Rlc2NyaXB0b3JzOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5leHRf dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSA9PQorICAgICAgICAgICAgICAgICAgICAg ICAgbXB1X3NlcV9udW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBzdHJlYW1z LT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAg Z290byBlbmQyOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkK KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRv cltpXS5zZXFfbnVtIDwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXMtPmxhc3Rfc2Vx dWVuY2VfbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gc3RyZWFtcy0+ ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZW5kMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHN0 cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JzICsgMSA+CisgICAgICAgICAgICAg ICAgICAgIE1BWF9OVU1fVElNRVNUQU1QX0RFU0NSSVBUT1IpIHsKKyAgICAgICAgICAgICAgICAg ICAgdWludDY0X3QgbWF4X2RpZmYgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgc3RyZWFtcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChESUZGKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXB1X3NlcV9udW0pID4gbWF4X2RpZmYpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjICAgICA9IHN0cmVhbXMtPmV4dF90aW1lc3Rh bXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2RpZmYg PSBESUZGKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT5leHRfdGlt ZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbXB1X3NlcV9udW0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICBhdl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7CisgICAgICAgICAgICAgICAgICAg IGdvdG8gZW5kMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZXNjID0g YXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZzdHJlYW1z LT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICZzdHJlYW1z LT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9ycywKKyAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKHN0cnVjdCBNUFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IpLCBOVUxMKTsKKyAgICAg ICAgICAgICAgICBpZiAoZGVzYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworCisgICAgICAgICAgICAgICAgZW5kMToKKyAgICAgICAgICAgICAg ICBkZXNjLT5zZXFfbnVtICAgICAgICAgICAgICA9IG1wdV9zZXFfbnVtOworICAgICAgICAgICAg ICAgIGVuZDI6CisgICAgICAgICAgICAgICAgZGVzYy0+ZGVjb2RpbmdfdGltZV9vZmZzZXQgPSBk ZWNvZGluZ190aW1lX29mZnNldDsKKyAgICAgICAgICAgICAgICBkZXNjLT5udW1fb2ZfYXUgICAg ICAgICAgICA9IG51bV9vZl9hdTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IG51bV9vZl9hdTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgIGlmIChkZXNjICE9IE5VTEwp CisgICAgICAgICAgICAgICAgICAgIGRlc2MtPmF1W2ldLmR0c19wdHNfb2Zmc2V0ID0gYnl0ZXN0 cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAyKTsKKworICAgICAgICAgICAgICAg IGlmIChwdHNfb2Zmc2V0X3R5cGUgPT0gMikgeworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMikKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgICAgICBpZiAo ZGVzYyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy0+YXVbaV0ucHRzX29m ZnNldCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAgICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAy KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlc2MgIT0gTlVMTCkgeworICAgICAgICAg ICAgICAgICAgICBkZXNjLT5hdVtpXS5wdHNfb2Zmc2V0ID0gZGVmYXVsdF9wdHNfb2Zmc2V0Owor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBi eXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50CitwYXJzZV9hZGRpdGlvbmFsX2FyaWJfc3VidGl0bGVfaW5mbyhB VlN0cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIGJvb2wgICAgc3Rh cnRfbXB1X3NlcXVlbmNlX251bWJlcl9mbGFnOworICAgIGNoYXIgICAgbGFuZ3VhZ2VfY29kZVs0 XTsKKyAgICB1aW50OF90IHN1YnRpdGxlX2Zvcm1hdDsKKworICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdChnYmMpIDwKKyAgICAgICAgKDggKyA0ICsgMSArIDMgKyAyNCArIDIgKyA0 ICsgMiArIDQgKyA0ICsgNCArIDQpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgLy8gc2tpcDogc3VidGl0bGVfdGFnCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUo Z2JjLCAxKTsKKyAgICBzdGFydF9tcHVfc2VxdWVuY2VfbnVtYmVyX2ZsYWcgPSAoYnl0ZXN0cmVh bTJfZ2V0X2J5dGV1KGdiYykgPj4gMykgJiAxOworICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1 KGdiYywgbGFuZ3VhZ2VfY29kZSwgMyk7CisgICAgbGFuZ3VhZ2VfY29kZVszXSA9ICdcMCc7Cisg ICAgc3VidGl0bGVfZm9ybWF0ID0gKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpID4+IDIpICYg MGIxMTExOworICAgIC8qCisgICAgICogc2tpcDoKKyAgICAgKiAtIFRNRAorICAgICAqIC0gRE1G CisgICAgICogLSByZXNvbHV0aW9uCisgICAgICogLSBjb21wcmVzc2lvbl90eXBlCisgICAgICov CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAoNCArIDQgKyA0ICsgNCkgLyA4KTsKKworICAg IGlmIChzdGFydF9tcHVfc2VxdWVuY2VfbnVtYmVyX2ZsYWcpCisgICAgICAgIGJ5dGVzdHJlYW0y X3NraXAoZ2JjLCAzMik7CisKKyAgICBzd2l0Y2ggKHN1YnRpdGxlX2Zvcm1hdCkgeworICAgIGNh c2UgMGIwMDAwOgorICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVD X0lEX1RUTUw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBhdl9kaWN0X3Nl dCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2VfY29kZSwgMCk7Cit9CisK K3N0YXRpYyBpbnQKK3BhcnNlX21oX2RhdGFfY29tcG9uZW50X2Rlc2NyaXB0b3IoQVZTdHJlYW0g KnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50OF90IGRlc2NyaXB0b3Jf bGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYg KyA4KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9S KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xl bmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0y X2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgeworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2Jj OworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRv cl9sZW5ndGgpOworICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVu Z3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwg MTYgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAg IHN3aXRjaCAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKSkgeworICAgICAgICBjYXNlIDB4 MDAyMDogLy8gYWRkaXRpb25hbCBBUklCIHN1YnRpdGxlIGluZm8gKFRhYmxlIDctNzQsIEFSSUIg U1RELUI2MCwgVmVyc2lvbiAxLjE0LUUxKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2FkZGl0 aW9uYWxfYXJpYl9zdWJ0aXRsZV9pbmZvKHN0cmVhbSwgJm5nYmMpOworICAgICAgICB9CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX3N0cmVhbV9pZGVudGlm aWVyX2Rlc2NyaXB0b3IoQVZTdHJlYW0gKnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sK KyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBNSF9T VFJFQU1fSURFTlRJRklFUl9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShn YmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlw dG9yX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgewor ICAgICAgICAvLyBubyBuZWVkIGZvciBub3cKKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUo Z2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBwYXJzZV9kZXNjcmlwdG9yKHN0cnVjdCBTdHJlYW1zICpzdHJlYW1zLCBHZXRCeXRlQ29udGV4 dCAqZ2JjKQoreworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgMykK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgc3dpdGNoIChieXRlc3Ry ZWFtMl9wZWVrX2JlMTZ1KGdiYykpIHsKKyAgICBjYXNlIE1QVV9USU1FU1RBTVBfREVTQ1JJUFRP UjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21wdV90aW1lc3RhbXBfZGVzY3JpcHRvcihzdHJlYW1z LCBnYmMpOworICAgIGNhc2UgVklERU9fQ09NUE9ORU5UX0RFU0NSSVBUT1I6CisgICAgICAgIHJl dHVybiBwYXJzZV92aWRlb19jb21wb25lbnRfZGVzY3JpcHRvcihzdHJlYW1zLT5zdHJlYW0sIGdi Yyk7CisgICAgY2FzZSBNSF9TVFJFQU1fSURFTlRJRklFUl9ERVNDUklQVE9SOgorICAgICAgICBy ZXR1cm4gcGFyc2Vfc3RyZWFtX2lkZW50aWZpZXJfZGVzY3JpcHRvcihzdHJlYW1zLT5zdHJlYW0s IGdiYyk7CisgICAgY2FzZSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUjoKKyAgICAgICAg cmV0dXJuIHBhcnNlX21oX2F1ZGlvX2NvbXBvbmVudF9kZXNjcmlwdG9yKHN0cmVhbXMtPnN0cmVh bSwgZ2JjKTsKKyAgICBjYXNlIE1IX0RBVEFfQ09NUE9ORU5UX0RFU0NSSVBUT1I6CisgICAgICAg IHJldHVybiBwYXJzZV9taF9kYXRhX2NvbXBvbmVudF9kZXNjcmlwdG9yKHN0cmVhbXMtPnN0cmVh bSwgZ2JjKTsKKyAgICBjYXNlIE1QVV9FWFRFTkRFRF9USU1FU1RBTVBfREVTQ1JJUFRPUjoKKyAg ICAgICAgcmV0dXJuIHBhcnNlX21wdV9leHRlbmRlZF90aW1lc3RhbXBfZGVzY3JpcHRvcihzdHJl YW1zLCBnYmMpOworICAgIGNhc2UgQUNDRVNTX0NPTlRST0xfREVTQ1JJUFRPUjoKKyAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAyKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMs IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor ICAgIGF2X2xvZyhzdHJlYW1zLT5zdHJlYW0sIEFWX0xPR19JTkZPLCAiVW5rbm93biBkZXNjcmlw dG9yOiAweCUwNHhcbiIsCisgICAgICAgICAgIGJ5dGVzdHJlYW0yX3BlZWtfYmUxNnUoZ2JjKSk7 CisgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworfQorCitzdGF0aWMgaW50IHBhcnNl X21tdF9wYWNrYWdlX3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMp Cit7CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KGdiYykgPCAoOCArIDggKyAxNikgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykgIT0gTU1UX1BB Q0tBR0VfVEFCTEVfSUQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IC8vIHNraXA6IHZlcnNpb24KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworICAgIGxl bmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0y X2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworICAgIHsKKyAgICAgICAgc2l6ZV90ICAgaSwgajsKKyAgICAgICAgdWludDhf dCAgcGFja2FnZV9pZF9sZW5ndGg7CisgICAgICAgIHVpbnQxNl90IGRlc2NyaXB0b3JzX2xlbmd0 aDsKKyAgICAgICAgdWludDhfdCAgbnVtYmVyX29mX2Fzc2V0czsKKworICAgICAgICBHZXRCeXRl Q29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZl ciwgbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5n YmMpIDwgKDYgKyAyICsgOCkgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisKKyAgICAgICAgLy8gc2tpcDogTVBUX21vZGUKKyAgICAgICAgYnl0ZXN0cmVhbTJf c2tpcHUoJm5nYmMsIDEpOworICAgICAgICBwYWNrYWdlX2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0y X2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgcGFj a2FnZV9pZF9sZW5ndGgpOworCisgICAgICAgIGRlc2NyaXB0b3JzX2xlbmd0aCA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2KCZuZ2JjKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgZGVz Y3JpcHRvcnNfbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xl ZnQoJm5nYmMpIDwgMSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgICAgICBudW1iZXJfb2ZfYXNzZXRzID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsK KworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX2Fzc2V0czsgKytpKSB7CisgICAg ICAgICAgICBpbnQgZXJyOworCisgICAgICAgICAgICB1aW50OF90ICBhc3NldF9pZF9sZW5ndGg7 CisgICAgICAgICAgICB1aW50OF90ICBsb2NhdGlvbl9jb3VudDsKKyAgICAgICAgICAgIHVpbnQx Nl90IGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aDsKKyAgICAgICAgICAgIHVpbnQzMl90IGFzc2V0 X3R5cGU7CisKKyAgICAgICAgICAgIHN0cnVjdCBTdHJlYW1zICpzdHJlYW0gPSBOVUxMOworCisg ICAgICAgICAgICBzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5mbyBpbmZvOworCisgICAgICAg ICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgKDggKyAzMiArIDgp IC8gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgKiBza2lwOgorICAgICAgICAgICAgICogLSBpZGVudGlm aWVyX3R5cGUKKyAgICAgICAgICAgICAqIC0gYXNzZXRfaWRfc2NoZW1lCisgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAoOCArIDMyKSAvIDgpOwor ICAgICAgICAgICAgYXNzZXRfaWRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2Jj KTsKKworICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgYXNzZXRfaWRfbGVuZ3Ro KTsKKworICAgICAgICAgICAgYXNzZXRfdHlwZSA9IGJ5dGVzdHJlYW0yX2dldF9sZTMyKCZuZ2Jj KTsKKworICAgICAgICAgICAgLy8gc2tpcDogYXNzZXRfY2xvY2tfcmVsYXRpb25fZmxhZworICAg ICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgMSk7CisKKyAgICAgICAgICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAxKQorICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgbG9jYXRpb25fY291bnQgPSBi eXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworCisgICAgICAgICAgICBmb3IgKGogPSAwOyBq IDwgbG9jYXRpb25fY291bnQ7ICsraikKKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IHBhcnNl X21tdF9nZW5lcmFsX2xvY2F0aW9uX2luZm8oJmluZm8sICZuZ2JjKSkgPCAwKQorICAgICAgICAg ICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAgICAgICBzd2l0Y2ggKGFzc2V0X3R5cGUp IHsKKyAgICAgICAgICAgIGNhc2UgTUtUQUcoJ2gnLCAnZScsICd2JywgJzEnKToKKyAgICAgICAg ICAgICAgICBpZiAoaW5mby5sb2NhdGlvbl90eXBlICE9IDB4MDApIHJldHVybiBBVkVSUk9SX1BB VENIV0VMQ09NRTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0 cmVhbShjdHgsIGluZm8udHlwZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3Ry ZWFtID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgc3Ry ZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPOwor ICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgICA9IEFW X0NPREVDX0lEX0hFVkM7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFy LT5jb2RlY190YWcgID0gYXNzZXRfdHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGNhc2UgTUtUQUcoJ20nLCAncCcsICc0JywgJ2EnKToKKyAgICAgICAgICAgICAgICBp ZiAoaW5mby5sb2NhdGlvbl90eXBlICE9IDB4MDApIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09N RTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgs IGluZm8udHlwZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09IE5V TEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJl YW0tPmNvZGVjcGFyLT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX0FVRElPOworICAgICAgICAg ICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFzc2V0X3R5cGU7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1LVEFHKCdzJywgJ3Qn LCAncCcsICdwJyk6CisgICAgICAgICAgICAgICAgaWYgKGluZm8ubG9jYXRpb25fdHlwZSA9PSAw eDAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGZpbmRfb3JfYWxsb2NhdGVfc3Ry ZWFtKGN0eCwgaW5mby50eXBlMC5wYWNrZXRfaWQpOworICAgICAgICAgICAgICAgICAgICBpZiAo c3RyZWFtID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAg ICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9T VUJUSVRMRTsKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5j b2RlY190YWcgID0gYXNzZXRfdHlwZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1LVEFHKCdhJywgJ2EnLCAncCcsICdwJyk6Cisg ICAgICAgICAgICBjYXNlIE1LVEFHKCdhJywgJ3MnLCAnZycsICdkJyk6CisgICAgICAgICAgICBj YXNlIE1LVEFHKCdhJywgJ2EnLCAnZycsICdkJyk6CisgICAgICAgICAgICAgICAgYnJlYWs7IC8v IFRPRE8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KCZuZ2JjKSA8IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisgICAgICAgICAgICBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KCZuZ2JjKSA8IGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aCkKKyAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIGlmIChzdHJlYW0g IT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEdldEJ5dGVDb250ZXh0IG5uZ2JjOworICAgICAg ICAgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5uZ2JjLCBuZ2JjLmJ1ZmZlciwgYXNzZXRfZGVz Y3JpcHRvcnNfbGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdCgmbm5nYmMpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKChlcnIg PSBwYXJzZV9kZXNjcmlwdG9yKHN0cmVhbSwgJm5uZ2JjKSkgPCAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ5dGVzdHJl YW0yX3NraXB1KCZuZ2JjLCBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGgpOworICAgICAgICB9Cisg ICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IHBhcnNlX3BhY2thZ2VfbGlzdF90YWJsZShNTVRQQ29udGV4dCAq Y3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHNpemVfdCAgIGk7CisgICAgdWludDMy X3QgbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAo OCArIDggKyAxNikgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykgIT0gUEFDS0FHRV9MSVNUX1RBQkxFX0lE KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAvLyBza2lwOiB2ZXJz aW9uCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBsZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpIDwgbGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICB7CisgICAgICAgIGludCAgICAgZXJyOworICAgICAgICB1aW50OF90IG51bV9vZl9wYWNrYWdl OworICAgICAgICB1aW50OF90IG51bV9vZl9pcF9kZWxpdmVyeTsKKworICAgICAgICBHZXRCeXRl Q29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZl ciwgbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2Jj KSA8IDEpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAg bnVtX29mX3BhY2thZ2UgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworCisgICAgICAg IGZvciAoaSA9IDA7IGkgPCBudW1fb2ZfcGFja2FnZTsgKytpKSB7CisgICAgICAgICAgICB1aW50 OF90ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2lkX2xlbmd0aDsKKyAgICAgICAgICAg IHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvIGluZm87CisKKyAgICAgICAgICAgIHBhY2th Z2VfaWRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUoJm5nYmMpOworICAgICAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgcGFja2FnZV9pZF9sZW5ndGgpOworCisgICAgICAgICAg ICBpZiAoKGVyciA9IHBhcnNlX21tdF9nZW5lcmFsX2xvY2F0aW9uX2luZm8oJmluZm8sICZuZ2Jj KSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMSkKKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBudW1fb2ZfaXBfZGVsaXZlcnkg PSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkg PCBudW1fb2ZfaXBfZGVsaXZlcnk7ICsraSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BB VENIV0VMQ09NRTsKKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgpOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfdGFibGUoTU1UUENvbnRleHQg KmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IDIpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19ieXRldShnYmMpKSB7CisgICAgY2FzZSBNTVRf UEFDS0FHRV9UQUJMRV9JRDoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21tdF9wYWNrYWdlX3RhYmxl KGN0eCwgZ2JjKTsKKyAgICBjYXNlIFBBQ0tBR0VfTElTVF9UQUJMRV9JRDoKKyAgICAgICAgcmV0 dXJuIHBhcnNlX3BhY2thZ2VfbGlzdF90YWJsZShjdHgsIGdiYyk7CisgICAgfQorICAgIGJ5dGVz dHJlYW0yX3NraXB1KGdiYywgYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSk7IC8vIFRP RE8KKyAgICByZXR1cm4gMDsKK30KKworZW51bSB7CisgICAgUEFfTUVTU0FHRV9JRCA9IDB4MDAw MCwKK307CisKK3N0YXRpYyBpbnQgcGFyc2VfcGFfbWVzc2FnZShNTVRQQ29udGV4dCAqY3R4LCBH ZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKworICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCArIDMyKSAvIDgpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRf YmUxNnUoZ2JjKSAhPSBQQV9NRVNTQUdFX0lEKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICAvLyBza2lwOiB2ZXJzaW9uCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2Jj LCAxKTsKKyAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoZ2JjKTsKKworICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgbGVuZ3RoKQorICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB7CisgICAgICAgIHNpemVfdCAgaTsKKyAgICAg ICAgdWludDhfdCBudW1fb2ZfdGFibGVzOworCisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7 CisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBsZW5ndGgpOwor CisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgMSkKKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBudW1fb2ZfdGFibGVz ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbnVtX29mX3RhYmxlczsgKytpKSB7CisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZu Z2JjLCAoOCArIDggKyAxNikgLyA4KTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPiAwKSB7CisgICAgICAgICAgICBpbnQgZXJy ID0gcGFyc2VfdGFibGUoY3R4LCAmbmdiYyk7CisgICAgICAgICAgICBpZiAoZXJyIDwgMCkgcmV0 dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxl bmd0aCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9zaWduYWxsaW5n X21lc3NhZ2UoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDQpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19iZTE2dShn YmMpKSB7CisgICAgY2FzZSBQQV9NRVNTQUdFX0lEOgorICAgICAgICByZXR1cm4gcGFyc2VfcGFf bWVzc2FnZShjdHgsIGdiYyk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitlbnVtIEZyYWdt ZW50YXRpb25JbmRpY2F0b3IgeworICAgIE5PVF9GUkFHTUVOVEVEICA9IDBiMDAsCisgICAgRklS U1RfRlJBR01FTlQgID0gMGIwMSwKKyAgICBNSURETEVfRlJBR01FTlQgPSAwYjEwLAorICAgIExB U1RfRlJBR01FTlQgICA9IDBiMTEsCit9OworCitzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgewor ICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICBwaWQ7CisgICAgc3RydWN0IEZyYWdtZW50QXNz ZW1ibGVyICpuZXh0OworCisgICAgdWludDhfdCAqZGF0YTsKKyAgICBzaXplX3QgIHNpemUsIGNh cDsKKworICAgIHVpbnQzMl90IGxhc3Rfc2VxOworCisgICAgZW51bSB7CisgICAgICAgIElOSVQg PSAwLAorICAgICAgICBOT1RfU1RBUlRFRCwKKyAgICAgICAgSU5fRlJBR01FTlQsCisgICAgICAg IFNLSVAsCisgICAgfSAgICAgICAgc3RhdGU7Cit9OworCitzdGF0aWMgaW50CithcHBlbmRfZGF0 YShzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmN0eCwgY29uc3QgdWludDhfdCAqZGF0YSwgdWlu dDMyX3Qgc2l6ZSkKK3sKKyAgICBpZiAoY3R4LT5zaXplICsgc2l6ZSA+IFVJTlQzMl9NQVgpIHJl dHVybiBBVkVSUk9SKEVPVkVSRkxPVyk7CisgICAgaWYgKGN0eC0+Y2FwIDwgY3R4LT5zaXplICsg c2l6ZSkgeworICAgICAgICB2b2lkICAgKm5ld19kYXRhOworICAgICAgICBzaXplX3QgbmV3X2Nh cCA9IGN0eC0+Y2FwID09IDAgPyAxMDI0IDogY3R4LT5jYXAgKiAyOworICAgICAgICB3aGlsZSAo bmV3X2NhcCA8IGN0eC0+c2l6ZSArIHNpemUpIG5ld19jYXAgKj0gMjsKKworICAgICAgICBuZXdf ZGF0YSA9IGF2X3JlYWxsb2MoY3R4LT5kYXRhLCBuZXdfY2FwKTsKKyAgICAgICAgaWYgKG5ld19k YXRhID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKyAgICAgICAgY3R4LT5kYXRhID0g bmV3X2RhdGE7CisgICAgICAgIGN0eC0+Y2FwICA9IG5ld19jYXA7CisgICAgfQorICAgIG1lbWNw eShjdHgtPmRhdGEgKyBjdHgtPnNpemUsIGRhdGEsIHNpemUpOworICAgIGN0eC0+c2l6ZSArPSBz aXplOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjaGVja19zdGF0ZShNTVRQQ29u dGV4dCAqY3R4LCBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzcywgdWludDMyX3Qgc2VxX251 bSkKK3sKKyAgICBpZiAoYXNzLT5zdGF0ZSA9PSBJTklUKSB7CisgICAgICAgIGFzcy0+c3RhdGUg PSBTS0lQOworICAgIH0gZWxzZSBpZiAoc2VxX251bSAhPSBhc3MtPmxhc3Rfc2VxICsgMSkgewor ICAgICAgICBpZiAoYXNzLT5zaXplICE9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgtPnMs IEFWX0xPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICJQYWNrZXQgc2VxdWVuY2UgbnVt YmVyIGp1bXA6ICV1ICsgMSAhPSAldSwgZHJvcCAlenUgYnl0ZXNcbiIsCisgICAgICAgICAgICAg ICAgICAgYXNzLT5sYXN0X3NlcSwgc2VxX251bSwgYXNzLT5zaXplKTsKKyAgICAgICAgICAgIGFz cy0+c2l6ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LT5z LCBBVl9MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAiUGFja2V0IHNlcXVlbmNlIG51 bWJlciBqdW1wOiAldSArIDEgIT0gJXVcbiIsCisgICAgICAgICAgICAgICAgICAgYXNzLT5sYXN0 X3NlcSwgc2VxX251bSk7CisgICAgICAgIH0KKyAgICAgICAgYXNzLT5zdGF0ZSA9IFNLSVA7Cisg ICAgfQorICAgIGFzcy0+bGFzdF9zZXEgPSBzZXFfbnVtOworICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50IGFzc2VtYmxlX2ZyYWdtZW50KAorICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxl ciAqY3R4LCB1aW50MzJfdCBzZXFfbnVtLAorICAgIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRv ciBpbmRpY2F0b3IsCisgICAgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3Qgc2l6ZSwKKyAg ICBpbnQgKCpwYXJzZXIpKE1NVFBDb250ZXh0ICosIEdldEJ5dGVDb250ZXh0ICopLAorICAgIE1N VFBDb250ZXh0ICpvcGFxdWUpCit7CisgICAgR2V0Qnl0ZUNvbnRleHQgZ2JjOworICAgIGludCAg ICAgICAgICAgIGVycjsKKworICAgIHN3aXRjaCAoaW5kaWNhdG9yKSB7CisgICAgY2FzZSBOT1Rf RlJBR01FTlRFRDoKKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gSU5fRlJBR01FTlQpIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBjdHgtPnN0YXRlID0gTk9UX1NUQVJURUQ7 CisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJmdiYywgZGF0YSwgc2l6ZSk7CisgICAgICAgIHJl dHVybiBwYXJzZXIob3BhcXVlLCAmZ2JjKTsKKyAgICBjYXNlIEZJUlNUX0ZSQUdNRU5UOgorICAg ICAgICBpZiAoY3R4LT5zdGF0ZSA9PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgIGN0eC0+c3RhdGUgPSBJTl9GUkFHTUVOVDsKKyAgICAgICAgcmV0dXJu IGFwcGVuZF9kYXRhKGN0eCwgZGF0YSwgc2l6ZSk7CisgICAgY2FzZSBNSURETEVfRlJBR01FTlQ6 CisgICAgICAgIGlmIChjdHgtPnN0YXRlID09IFNLSVApIHsKKyAgICAgICAgICAgIGF2X2xvZyhv cGFxdWUtPnMsIEFWX0xPR19WRVJCT1NFLCAiRHJvcCBwYWNrZXQgJXVcbiIsIHNlcV9udW0pOwor ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN0eC0+c3RhdGUg IT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICByZXR1 cm4gYXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKTsKKyAgICBjYXNlIExBU1RfRlJBR01FTlQ6 CisgICAgICAgIGlmIChjdHgtPnN0YXRlID09IFNLSVApIHsKKyAgICAgICAgICAgIGF2X2xvZyhv cGFxdWUtPnMsIEFWX0xPR19WRVJCT1NFLCAiRHJvcCBwYWNrZXQgJXVcbiIsIHNlcV9udW0pOwor ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN0eC0+c3RhdGUg IT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBpZiAo KGVyciA9IGFwcGVuZF9kYXRhKGN0eCwgZGF0YSwgc2l6ZSkpIDwgMCkgcmV0dXJuIGVycjsKKwor ICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZnYmMsIGN0eC0+ZGF0YSwgY3R4LT5zaXplKTsKKyAg ICAgICAgZXJyID0gcGFyc2VyKG9wYXF1ZSwgJmdiYyk7CisKKyAgICAgICAgY3R4LT5zaXplICA9 IDA7CisgICAgICAgIGN0eC0+c3RhdGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgcmV0dXJuIGVy cjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICB9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKgorZmluZF9vcl9hbGxv Y2F0ZV9hc3NlbWJsZXIoTU1UUENvbnRleHQgKmN0eCwgdWludDE2X3QgcGlkKQoreworICAgIHN0 cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzOworICAgIGZvciAoYXNzID0gY3R4LT5hc3NlbWJs ZXI7IGFzcyAhPSBOVUxMOyBhc3MgPSBhc3MtPm5leHQpCisgICAgICAgIGlmIChhc3MtPnBpZCA9 PSBwaWQpCisgICAgICAgICAgICByZXR1cm4gYXNzOworCisgICAgYXNzID0gYXZfbWFsbG9jeihz aXplb2Yoc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyKSk7CisgICAgaWYgKGFzcyA9PSBOVUxMKSBy ZXR1cm4gTlVMTDsKKyAgICBhc3MtPnBpZCAgICAgICAgICAgICAgPSBwaWQ7CisgICAgYXNzLT5u ZXh0ICAgICAgICAgICAgID0gY3R4LT5hc3NlbWJsZXI7CisgICAgcmV0dXJuIGN0eC0+YXNzZW1i bGVyID0gYXNzOworfQorCitzdGF0aWMgaW50IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZXMoCisg ICAgTU1UUENvbnRleHQgKmN0eCwgdWludDMyX3Qgc2VxX251bSwgR2V0Qnl0ZUNvbnRleHQgKmdi YykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZXJyOworICAgIHVpbnQ4X3Qg ICAgICAgICAgICAgICAgICAgICBieXRlOworICAgIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRv ciBmcmFnbWVudGF0aW9uX2luZGljYXRvcjsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAg ICAgbGVuZ3RoX2V4dGVuc2lvbl9mbGFnOworICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg ICBhZ2dyZWdhdGlvbl9mbGFnOworCisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3Nl bWJsZXIgPSBmaW5kX29yX2FsbG9jYXRlX2Fzc2VtYmxlcigKKyAgICAgICAgY3R4LCBjdHgtPmN1 cnJlbnRfcGlkKTsKKyAgICBpZiAoYXNzZW1ibGVyID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVy cm5vKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDIgKyA0 ICsgMSArIDEgKyA4KSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIGJ5dGUgICAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7 CisgICAgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IgPSBieXRlID4+IDY7CisgICAgbGVuZ3RoX2V4 dGVuc2lvbl9mbGFnICAgPSAoYnl0ZSA+PiAxKSAmIDE7CisgICAgYWdncmVnYXRpb25fZmxhZyAg ICAgICAgPSBieXRlICYgMTsKKworICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisKKyAg ICBpZiAoKGVyciA9IGNoZWNrX3N0YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtKSkgPCAwKQor ICAgICAgICByZXR1cm4gZXJyOworCisgICAgaWYgKCFhZ2dyZWdhdGlvbl9mbGFnKQorICAgICAg ICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAgICAgICBhc3NlbWJsZXIsIHNlcV9u dW0sIGZyYWdtZW50YXRpb25faW5kaWNhdG9yLAorICAgICAgICAgICAgZ2JjLT5idWZmZXIsIGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYyksCisgICAgICAgICAgICBwYXJzZV9zaWduYWxs aW5nX21lc3NhZ2UsIGN0eCk7CisKKyAgICBpZiAoZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IgIT0g Tk9UX0ZSQUdNRU5URUQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBj YW5ub3QgYmUgYm90aCBmcmFnbWVudGVkIGFuZCBhZ2dyZWdhdGVkCisKKyAgICB3aGlsZSAoYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA+IDApIHsKKyAgICAgICAgdWludDMyX3QgbGVu Z3RoOworCisgICAgICAgIGlmIChsZW5ndGhfZXh0ZW5zaW9uX2ZsYWcpCisgICAgICAgICAgICBs ZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOworICAgICAgICBlbHNlCisgICAgICAg ICAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNihnYmMpOworCisgICAgICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgbGVuZ3RoKQorICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGlmICgoZXJyID0gYXNzZW1ibGVfZnJh Z21lbnQoCisgICAgICAgICAgICBhc3NlbWJsZXIsIHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELAor ICAgICAgICAgICAgZ2JjLT5idWZmZXIsIGxlbmd0aCwgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdl LCBjdHgpKSA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBieXRlc3RyZWFt Ml9za2lwdShnYmMsIGxlbmd0aCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgZmlsbF9wdHNfZHRzKE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1zICpzKQor eworICAgIHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yICAgICAgICAgKmRlc2MgICAgID0g TlVMTDsKKyAgICBzdHJ1Y3QgTVBVRXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yICpleHRfZGVz YyA9IE5VTEw7CisKKyAgICBpbnQ2NF90IHB0aW1lOworICAgIHNpemVfdCAgaSwgajsKKworICAg IGZvciAoaSA9IDA7IGkgPCBzLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpIHsKKyAg ICAgICAgaWYgKHMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPT0KKyAgICAgICAg ICAgIHMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAgICAgICBkZXNjID0gcy0+dGlt ZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRv cnM7ICsraSkgeworICAgICAgICBpZiAocy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNl cV9udW0gPT0KKyAgICAgICAgICAgIHMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAg ICAgICBleHRfZGVzYyA9IHMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkZXNjID09IE5VTEwgfHwg ZXh0X2Rlc2MgPT0gTlVMTCkgcmV0dXJuIEZGRVJST1JfUkVETzsKKyAgICBwdGltZSA9IGF2X3Jl c2NhbGUoZGVzYy0+cHJlc2VudGF0aW9uX3RpbWUsIHMtPnN0cmVhbS0+dGltZV9iYXNlLmRlbiwK KyAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMGxsICogcy0+c3RyZWFtLT50aW1lX2Jhc2Uu bnVtKTsKKworICAgIGlmIChzLT5hdV9jb3VudCA+PSBleHRfZGVzYy0+bnVtX29mX2F1KQorICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIGN0eC0+cGt0LT5kdHMgPSBw dGltZSAtIGV4dF9kZXNjLT5kZWNvZGluZ190aW1lX29mZnNldDsKKworICAgIGZvciAoaiA9IDA7 IGogPCBzLT5hdV9jb3VudDsgKytqKQorICAgICAgICBjdHgtPnBrdC0+ZHRzICs9IGV4dF9kZXNj LT5hdVtqXS5wdHNfb2Zmc2V0OworCisgICAgY3R4LT5wa3QtPnB0cyA9IGN0eC0+cGt0LT5kdHMg KyBleHRfZGVzYy0+YXVbcy0+YXVfY291bnRdLmR0c19wdHNfb2Zmc2V0OworCisgICAgKytzLT5h dV9jb3VudDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbWl0X2Nsb3NlZF9jYXB0 aW9uX21mdShNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWlu dDhfdCAgZGF0YV90eXBlLCBzdWJzYW1wbGVfbnVtYmVyLCBsYXN0X3N1YnNhbXBsZV9udW1iZXIs IGJ5dGU7CisgICAgdWludDMyX3QgZGF0YV9zaXplOworICAgIHNpemVfdCAgIGk7CisgICAgaW50 ICAgICAgZXJyOworICAgIGJvb2wgICAgIGxlbmd0aF9leHRfZmxhZywgc3Vic2FtcGxlX2luZm9f bGlzdF9mbGFnOworCisgICAgYXZfYXNzZXJ0MChjdHgtPnBrdCAhPSBOVUxMKTsKKworICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDggKyA4ICsgOCArIDggKyA0ICsg MSArIDEgKyAyKSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisg ICAgLyoKKyAgICAgKiBza2lwOgorICAgICAqIC0gc3VidGl0bGVfdGFnCisgICAgICogLSBzdWJ0 aXRsZV9zZXF1ZW5jZV9udW1iZXIKKyAgICAgKi8KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMs ICg4ICsgOCkgLyA4KTsKKworICAgIHN1YnNhbXBsZV9udW1iZXIgICAgICA9IGJ5dGVzdHJlYW0y X2dldF9ieXRldShnYmMpOworICAgIGxhc3Rfc3Vic2FtcGxlX251bWJlciA9IGJ5dGVzdHJlYW0y X2dldF9ieXRldShnYmMpOworCisgICAgYnl0ZSAgICAgICAgICAgICAgICAgICAgID0gYnl0ZXN0 cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisgICAgZGF0YV90eXBlICAgICAgICAgICAgICAgID0gYnl0 ZSA+PiA0OworICAgIGxlbmd0aF9leHRfZmxhZyAgICAgICAgICA9IChieXRlID4+IDMpICYgMTsK KyAgICBzdWJzYW1wbGVfaW5mb19saXN0X2ZsYWcgPSAoYnl0ZSA+PiAyKSAmIDE7CisKKyAgICBp ZiAoZGF0YV90eXBlICE9IDBiMDAwMCkgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworCisg ICAgaWYgKGxlbmd0aF9leHRfZmxhZykKKyAgICAgICAgZGF0YV9zaXplID0gYnl0ZXN0cmVhbTJf Z2V0X2JlMzIoZ2JjKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGFfc2l6ZSA9IGJ5dGVzdHJlYW0y X2dldF9iZTE2KGdiYyk7CisKKyAgICBpZiAoc3Vic2FtcGxlX251bWJlciA9PSAwICYmIGxhc3Rf c3Vic2FtcGxlX251bWJlciA+IDAgJiYKKyAgICAgICAgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFn KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsYXN0X3N1YnNhbXBsZV9udW1iZXI7ICsraSkg eworICAgICAgICAgICAgLy8gc2tpcDogc3Vic2FtcGxlX2lfZGF0YV90eXBlCisgICAgICAgICAg ICBieXRlc3RyZWFtMl9za2lwKGdiYywgKDQgKyA0KSAvIDgpOworICAgICAgICAgICAgLy8gc2tp cDogc3Vic2FtcGxlX2lfZGF0YV9zaXplCisgICAgICAgICAgICBpZiAobGVuZ3RoX2V4dF9mbGFn KSB7CisgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDMyIC8gOCk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAx NiAvIDgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkYXRhX3NpemUpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmICgoZXJyID0gYXZfbmV3X3BhY2tldChjdHgtPnBr dCwgZGF0YV9zaXplKSkgPCAwKSByZXR1cm4gZXJyOworICAgIGJ5dGVzdHJlYW0yX2dldF9idWZm ZXJ1KGdiYywgY3R4LT5wa3QtPmRhdGEsIGRhdGFfc2l6ZSk7CisKKyAgICBjdHgtPnBrdC0+c3Ry ZWFtX2luZGV4ID0gc3QtPnN0cmVhbS0+aW5kZXg7CisgICAgY3R4LT5wa3QtPmZsYWdzICAgICAg IHw9IHN0LT5mbGFnczsKKyAgICBjdHgtPnBrdC0+cG9zICAgICAgICAgID0gc3QtPm9mZnNldDsK KyAgICBjdHgtPnBrdCAgICAgICAgICAgICAgID0gTlVMTDsKKworICAgIHN0LT5mbGFncyAgPSAw OworICAgIHN0LT5vZmZzZXQgPSAtMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBl bWl0X3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsIEFWQnVmZmVy UmVmICpidWYpCit7CisgICAgaW50IGVycjsKKyAgICBhdl9hc3NlcnQwKGN0eC0+cGt0ICE9IE5V TEwpOworICAgIGF2X3BhY2tldF91bnJlZihjdHgtPnBrdCk7CisgICAgaWYgKChlcnIgPSBmaWxs X3B0c19kdHMoY3R4LCBzdCkpIDwgMCkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7 CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIGN0eC0+cGt0LT5idWYgICAgICAgICAg PSBidWY7CisgICAgY3R4LT5wa3QtPmRhdGEgICAgICAgICA9IGJ1Zi0+ZGF0YTsKKyAgICBjdHgt PnBrdC0+c2l6ZSAgICAgICAgID0gYnVmLT5zaXplIC0gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdf U0laRTsKKyAgICBjdHgtPnBrdC0+c3RyZWFtX2luZGV4ID0gc3QtPnN0cmVhbS0+aW5kZXg7Cisg ICAgY3R4LT5wa3QtPmZsYWdzICAgICAgIHw9IHN0LT5mbGFnczsKKyAgICBjdHgtPnBrdC0+cG9z ICAgICAgICAgID0gc3QtPm9mZnNldDsKKyAgICBjdHgtPnBrdCAgICAgICAgICAgICAgID0gTlVM TDsKKworICAgIHN0LT5mbGFncyAgPSAwOworICAgIHN0LT5vZmZzZXQgPSAtMTsKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBjb25zdW1lX21mdShNTVRQQ29udGV4dCAqY3R4LCBHZXRC eXRlQ29udGV4dCAqZ2JjKQoreworICAgIGludCAgICAgICAgICAgIGVycjsKKyAgICBBVkJ1ZmZl clJlZiAgICAqYnVmX3JlZjsKKyAgICB1bnNpZ25lZCBpbnQgICBzaXplOworICAgIHVpbnQ4X3Qg ICAgICAgIGJ5dGU7CisgICAgc2l6ZV90ICAgICAgICAgb2xkX3NpemU7CisgICAgc3RydWN0IFN0 cmVhbXMgKnN0ID0gZmluZF9jdXJyZW50X3N0cmVhbShjdHgpOworICAgIGF2X2Fzc2VydDAoc3Qg IT0gTlVMTCk7CisKKyAgICBzd2l0Y2ggKHN0LT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCkg eworICAgIGNhc2UgQVZfQ09ERUNfSURfSEVWQzoKKyAgICAgICAgc2l6ZSA9IGJ5dGVzdHJlYW0y X2dldF9iZTMyKGdiYyk7CisgICAgICAgIGlmIChzaXplICE9IGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KGdiYykpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBpZiAoc2l6 ZSA8IDEpIC8vIHdlIGV4cGVjdCB0byBleHRyYWN0IE5BTCB1bml0IGhlYWRlciB0eXBlIGJlbG93 CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZSA9 IGJ5dGVzdHJlYW0yX3BlZWtfYnl0ZXUoZ2JjKTsKKyAgICAgICAgaWYgKChieXRlID4+IDcpICE9 IDApIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBmb3JiaWRkZW5femVyb19iaXQKKwor ICAgICAgICBvbGRfc2l6ZSA9IHN0LT5wZW5kaW5nX2J1ZmZlciA9PSBOVUxMID8gMCA6CisgICAg ICAgICAgICAgICAgICAgKHN0LT5wZW5kaW5nX2J1ZmZlci0+c2l6ZSAtIEFWX0lOUFVUX0JVRkZF Ul9QQURESU5HX1NJWkUpOworICAgICAgICBpZiAoKGVyciA9IGF2X2J1ZmZlcl9yZWFsbG9jKAor ICAgICAgICAgICAgJnN0LT5wZW5kaW5nX2J1ZmZlciwKKyAgICAgICAgICAgIG9sZF9zaXplICsg c2l6ZSArIDQgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKSkgPCAwKQorICAgICAgICAg ICAgcmV0dXJuIGVycjsKKyAgICAgICAgLy8gZml4IHN0YXJ0IGNvZGUgKDAwIDAwIDAwIDAxKQor ICAgICAgICBBVl9XQjMyKHN0LT5wZW5kaW5nX2J1ZmZlci0+ZGF0YSArIG9sZF9zaXplLCAxKTsK KyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoCisgICAgICAgICAgICBnYmMsIHN0LT5w ZW5kaW5nX2J1ZmZlci0+ZGF0YSArIG9sZF9zaXplICsgNCwgc2l6ZSk7CisgICAgICAgIGlmICgo KGJ5dGUgPj4gMSkgJiAwYjExMTExMSkgPCAweDIwKSB7IC8vIGEgVkNMIE5BTCB1bml0CisgICAg ICAgICAgICAvLyBCZWNhdXNlIHdlIGNhbid0IGVtaXQgYSBwYWNrZXQgd2l0aG91dCBhIHZhbGlk IFBUUywgd2UgbmVlZCB0bworICAgICAgICAgICAgLy8gYWdncmVnYXRlIHRoZSBub24tVkNMIE5B TCB1bml0cyB3aXRoIFZDTCBvbmVzLiBBbHRob3VnaCB3ZSBkaWRuJ3QKKyAgICAgICAgICAgIC8v IHRlY2huaWNhbGx5IGlkZW50aWZ5IGFuIGFjY2VzcyB1bml0IGhlcmUsIHRoaXMgd29ya3MgZm9y IGFsbCBzYW1wbGVzCisgICAgICAgICAgICAvLyB3ZSBoYXZlLgorICAgICAgICAgICAgYnVmX3Jl ZiA9IHN0LT5wZW5kaW5nX2J1ZmZlcjsKKyAgICAgICAgICAgIHN0LT5wZW5kaW5nX2J1ZmZlciA9 IE5VTEw7CisKKyAgICAgICAgICAgIG1lbXNldChidWZfcmVmLT5kYXRhICsgb2xkX3NpemUgKyBz aXplICsgNCwgMCwKKyAgICAgICAgICAgICAgICAgICBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19T SVpFKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0X3BhY2tldChjdHgsIHN0LCBidWZfcmVmKTsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIEFWX0NPREVDX0lEX0FBQ19M QVRNOgorICAgICAgICBzaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKTsKKyAg ICAgICAgaWYgKHNpemUgPj4gMTMpIHJldHVybiBBVkVSUk9SKEVPVkVSRkxPVyk7CisgICAgICAg IGlmICgoYnVmX3JlZiA9IGF2X2J1ZmZlcl9hbGxvYygKKyAgICAgICAgICAgIHNpemUgKyAzICsg QVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBidWZfcmVmLT5kYXRhWzBdID0gMHg1NjsKKyAg ICAgICAgYnVmX3JlZi0+ZGF0YVsxXSA9IDB4ZTAgfCAoc2l6ZSA+PiA4KTsKKyAgICAgICAgYnVm X3JlZi0+ZGF0YVsyXSA9IHNpemUgJiAweGZmOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVm ZmVydShnYmMsIGJ1Zl9yZWYtPmRhdGEgKyAzLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KGJ1Zl9y ZWYtPmRhdGEgKyAzICsgc2l6ZSwgMCwgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7Cisg ICAgICAgIHJldHVybiBlbWl0X3BhY2tldChjdHgsIHN0LCBidWZfcmVmKTsKKyAgICBjYXNlIEFW X0NPREVDX0lEX1RUTUw6CisgICAgICAgIHJldHVybiBlbWl0X2Nsb3NlZF9jYXB0aW9uX21mdShj dHgsIHN0LCBnYmMpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENI V0VMQ09NRTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbWZ1X3RpbWVkX2RhdGEoCisg ICAgTU1UUENvbnRleHQgKmN0eCwgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXIs CisgICAgdWludDMyX3Qgc2VxX251bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGlj YXRvciwKKyAgICBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIGJ5dGVzdHJlYW0yX3NraXAo Z2JjLCAoMzIgKyAzMiArIDMyICsgOCArIDgpIC8gOCk7CisgICAgcmV0dXJuIGFzc2VtYmxlX2Zy YWdtZW50KAorICAgICAgICBhc3NlbWJsZXIsIHNlcV9udW0sIGluZGljYXRvciwKKyAgICAgICAg Z2JjLT5idWZmZXIsIGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYyksCisgICAgICAgIGNv bnN1bWVfbWZ1LCBjdHgpOworfQorCitzdGF0aWMgaW50IHBhcnNlX21mdV9ub25fdGltZWRfZGF0 YSgKKyAgICBNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2Vt YmxlciwKKyAgICB1aW50MzJfdCBzZXFfbnVtLCBlbnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3Ig aW5kaWNhdG9yLAorICAgIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgYnl0ZXN0cmVhbTJf c2tpcChnYmMsIDMyIC8gOCk7CisgICAgcmV0dXJuIGFzc2VtYmxlX2ZyYWdtZW50KAorICAgICAg ICBhc3NlbWJsZXIsIHNlcV9udW0sIGluZGljYXRvciwKKyAgICAgICAgZ2JjLT5idWZmZXIsIGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYyksCisgICAgICAgIGNvbnN1bWVfbWZ1LCBjdHgp OworfQorCitzdGF0aWMgaW50IHBhcnNlX21wdShNTVRQQ29udGV4dCAqY3R4LCB1aW50MzJfdCBz ZXFfbnVtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIGludCAgICAgICAgICAgICAgICAg ICAgICAgICBlcnI7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGJ5dGUsIGZyYWdt ZW50X3R5cGU7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkX2ZsYWc7Cisg ICAgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGZyYWdtZW50YXRpb25faW5kaWNhdG9yOwor ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbl9mbGFnOworICAgIHVp bnQxNl90ICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisgICAgdWludDMyX3QgICAgICAgICAg ICAgICAgICAgIG1wdV9zZXF1ZW5jZV9udW1iZXI7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1i bGVyICAgICphc3NlbWJsZXI7CisgICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAgICAgICpzdHJl YW1zOworCisgICAgc3RyZWFtcyA9IGZpbmRfY3VycmVudF9zdHJlYW0oY3R4KTsKKyAgICBpZiAo c3RyZWFtcyA9PSBOVUxMIHx8IHN0cmVhbXMtPnN0cmVhbS0+ZGlzY2FyZCA+PSBBVkRJU0NBUkRf QUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFzc2VtYmxlciA9IGZpbmRfb3JfYWxsb2Nh dGVfYXNzZW1ibGVyKGN0eCwgY3R4LT5jdXJyZW50X3BpZCk7CisgICAgaWYgKGFzc2VtYmxlciA9 PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDQgKyAxICsgMiArIDEgKyA4ICsgMzIpIC8gOCkKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBsZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICBpZiAobGVuZ3RoICE9IGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGdiYykpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisg ICAgYnl0ZSAgICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsK KyAgICBmcmFnbWVudF90eXBlICAgICAgICAgICA9IGJ5dGUgPj4gNDsKKyAgICB0aW1lZF9mbGFn ICAgICAgICAgICAgICA9IChieXRlID4+IDMpICYgMTsKKyAgICBmcmFnbWVudGF0aW9uX2luZGlj YXRvciA9IChieXRlID4+IDEpICYgMGIxMTsKKyAgICBhZ2dyZWdhdGlvbl9mbGFnICAgICAgICA9 IGJ5dGUgJiAxOworCisgICAgLy8gc2tpcDogZnJhZ21lbnRfY291bnRlcgorICAgIGJ5dGVzdHJl YW0yX3NraXB1KGdiYywgMSk7CisKKyAgICBtcHVfc2VxdWVuY2VfbnVtYmVyID0gYnl0ZXN0cmVh bTJfZ2V0X2JlMzJ1KGdiYyk7CisKKyAgICBpZiAoYWdncmVnYXRpb25fZmxhZyAmJiBmcmFnbWVu dGF0aW9uX2luZGljYXRvciAhPSBOT1RfRlJBR01FTlRFRCkKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7IC8vIGNhbm5vdCBiZSBib3RoIGZyYWdtZW50ZWQgYW5kIGFnZ3JlZ2F0 ZWQKKworICAgIGlmIChmcmFnbWVudF90eXBlICE9IDIpCisgICAgICAgIHJldHVybiAwOyAvLyBu b3QgTUZVCisKKyAgICBpZiAoYXNzZW1ibGVyLT5zdGF0ZSA9PSBJTklUICYmICFjdHgtPmlzX3Jh cCkKKyAgICAgICAgcmV0dXJuIDA7IC8vIHdhaXQgZm9yIHRoZSBmaXJzdCBSQVAKKworICAgIGlm IChhc3NlbWJsZXItPnN0YXRlID09IElOSVQpIHsKKyAgICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1 ZW5jZV9udW1iZXIgPSBtcHVfc2VxdWVuY2VfbnVtYmVyOworICAgIH0gZWxzZSBpZiAobXB1X3Nl cXVlbmNlX251bWJlciA9PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciArIDEpIHsKKyAg ICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIgPSBtcHVfc2VxdWVuY2VfbnVtYmVy OworICAgICAgICBzdHJlYW1zLT5hdV9jb3VudCAgICAgICAgICAgICA9IDA7CisgICAgfSBlbHNl IGlmIChtcHVfc2VxdWVuY2VfbnVtYmVyICE9IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVy KSB7CisgICAgICAgIGF2X2xvZyhzdHJlYW1zLT5zdHJlYW0sIEFWX0xPR19FUlJPUiwKKyAgICAg ICAgICAgICAgICJNUFUgc2VxdWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAldVxuIiwKKyAg ICAgICAgICAgICAgIHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyLCBtcHVfc2VxdWVuY2Vf bnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisg ICAgaWYgKChlcnIgPSBjaGVja19zdGF0ZShjdHgsIGFzc2VtYmxlciwgc2VxX251bSkpIDwgMCkK KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmIChmcmFnbWVudGF0aW9uX2luZGljYXRvciA9 PSBOT1RfRlJBR01FTlRFRCB8fAorICAgICAgICBmcmFnbWVudGF0aW9uX2luZGljYXRvciA9PSBG SVJTVF9GUkFHTUVOVCkKKyAgICAgICAgc3RyZWFtcy0+b2Zmc2V0ID0gY3R4LT5wa3QtPnBvczsK KworICAgIGlmIChjdHgtPmlzX3JhcCkKKyAgICAgICAgc3RyZWFtcy0+ZmxhZ3MgfD0gQVZfUEtU X0ZMQUdfS0VZOworCisgICAgaWYgKHRpbWVkX2ZsYWcpIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0 aW9uX2ZsYWcpIHsKKyAgICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpID4gMCkgeworICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i ZTE2KGdiYyk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNv bnRleHQgbmdiYzsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywg Z2JjLT5idWZmZXIsIGxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2Vf bWZ1X3RpbWVkX2RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgsIGFzc2VtYmxlciwg c2VxX251bSwgTk9UX0ZSQUdNRU5URUQsICZuZ2JjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg KGVyciA8IDApIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZV9tZnVfdGltZWRfZGF0YSgKKyAgICAg ICAgICAgICAgICBjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0 b3IsIGdiYyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYWdncmVnYXRp b25fZmxhZykgeworICAgICAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0 KGdiYykgPiAwKSB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2Jl MTYoZ2JjKTsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQo Z2JjKSA8IGxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHZXRCeXRlQ29u dGV4dCBuZ2JjOworICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBn YmMtPmJ1ZmZlciwgbGVuZ3RoKTsKKworICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9t ZnVfbm9uX3RpbWVkX2RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgsIGFzc2VtYmxl ciwgc2VxX251bSwgTk9UX0ZSQUdNRU5URUQsICZuZ2JjKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKGVyciA8IDApIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZV9tZnVfbm9uX3RpbWVkX2RhdGEo CisgICAgICAgICAgICAgICAgY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0sIGZyYWdtZW50YXRpb25f aW5kaWNhdG9yLCBnYmMpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK K01NVFBDb250ZXh0ICpmZl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9ncmFtKQorewor ICAgIE1NVFBDb250ZXh0ICpjdHggPSBhdl9tYWxsb2N6KHNpemVvZihNTVRQQ29udGV4dCkpOwor ICAgIGlmIChjdHggPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgICAgY3R4LT5wcm9ncmFtID0gcHJv Z3JhbTsKKyAgICByZXR1cm4gY3R4OworfQorCitpbnQgZmZfbW10cF9wYXJzZV9wYWNrZXQoTU1U UENvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0LAorICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKK3sK KyAgICBib29sICAgICBwYWNrZXRfY291bnRlcl9mbGFnOworICAgIGJvb2wgICAgIGV4dGVuc2lv bl9oZWFkZXJfZmxhZzsKKyAgICB1aW50OF90ICBwYXlsb2FkX3R5cGU7CisgICAgdWludDMyX3Qg cGFja2V0X3NlcXVlbmNlX251bWJlcjsKKyAgICB1aW50OF90ICBieXRlOworICAgIGludCAgICAg IGVyciA9IDA7CisKKyAgICBHZXRCeXRlQ29udGV4dCBnYmM7CisKKyAgICBjdHgtPnMgICA9IHM7 CisgICAgY3R4LT5wa3QgPSBwa3Q7CisKKyAgICBieXRlc3RyZWFtMl9pbml0KCZnYmMsIGJ1Ziwg c2l6ZSk7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZnYmMpIDwKKyAgICAg ICAgKDIgKyAxICsgMiArIDEgKyAxICsgMSArIDIgKyA2ICsgMTYgKyAzMiArIDMyKSAvIDgpCisg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgYnl0ZSAgICAgICAgICAg ICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZnYmMpOworICAgIHBhY2tldF9jb3VudGVy X2ZsYWcgICA9IChieXRlID4+IDUpICYgMTsKKyAgICBleHRlbnNpb25faGVhZGVyX2ZsYWcgPSAo Ynl0ZSA+PiAxKSAmIDE7CisgICAgY3R4LT5pc19yYXAgPSBieXRlICYgMTsKKworICAgIGJ5dGUg ICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmZ2JjKTsKKyAgICBwYXlsb2FkX3R5cGUg PSBieXRlICYgMGIxMTExMTE7CisKKyAgICBjdHgtPmN1cnJlbnRfcGlkID0gYnl0ZXN0cmVhbTJf Z2V0X2JlMTZ1KCZnYmMpOworCisgICAgLy8gc2tpcDogZGlzdHJpYnV0ZV90aW1lc3RhbXAKKyAg ICBieXRlc3RyZWFtMl9za2lwdSgmZ2JjLCA0KTsKKworICAgIHBhY2tldF9zZXF1ZW5jZV9udW1i ZXIgPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoJmdiYyk7CisKKyAgICBpZiAocGFja2V0X2NvdW50 ZXJfZmxhZykKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmZ2JjLCA0KTsKKworICAgIGlmIChl eHRlbnNpb25faGVhZGVyX2ZsYWcpIHsKKyAgICAgICAgdWludDE2X3QgZXh0ZW5zaW9uX2hlYWRl cl9sZW5ndGg7CisgICAgICAgIC8vIHNraXA6IGV4dGVuc2lvbl90eXBlCisgICAgICAgIGJ5dGVz dHJlYW0yX3NraXAoJmdiYywgMik7CisgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoID0g Ynl0ZXN0cmVhbTJfZ2V0X2JlMTYoJmdiYyk7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdi YywgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGgpOworICAgIH0KKworICAgIHN3aXRjaCAocGF5bG9h ZF90eXBlKSB7CisgICAgY2FzZSAweDAwOiAvLyBNUFUKKyAgICAgICAgaWYgKHBrdCAhPSBOVUxM KQorICAgICAgICAgICAgZXJyID0gcGFyc2VfbXB1KGN0eCwgcGFja2V0X3NlcXVlbmNlX251bWJl ciwgJmdiYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwMjogLy8gc2lnbmFsbGluZyBt ZXNzYWdlcworICAgICAgICBlcnIgPSBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2VzKGN0eCwgcGFj a2V0X3NlcXVlbmNlX251bWJlciwgJmdiYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBp ZiAoZXJyIDwgMCkgcmV0dXJuIGVycjsKKyAgICByZXR1cm4gY3R4LT5wa3QgPT0gTlVMTCA/IDAg OiBGRkVSUk9SX1JFRE87Cit9CisKK3ZvaWQgZmZfbW10cF9yZXNldF9zdGF0ZShNTVRQQ29udGV4 dCAqY3R4KQoreworICAgIHN0cnVjdCBTdHJlYW1zICAgICAgICAgICAqc3RyZWFtczsKKyAgICBz dHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlcjsKKworICAgIGZvciAoYXNzZW1ibGVy ID0gY3R4LT5hc3NlbWJsZXI7CisgICAgICAgICBhc3NlbWJsZXIgIT0gTlVMTDsgYXNzZW1ibGVy ID0gYXNzZW1ibGVyLT5uZXh0KSB7CisgICAgICAgIGFzc2VtYmxlci0+c3RhdGUgPSBJTklUOwor ICAgICAgICBhc3NlbWJsZXItPnNpemUgID0gMDsKKyAgICB9CisgICAgZm9yIChzdHJlYW1zID0g Y3R4LT5zdHJlYW1zOyBzdHJlYW1zICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJlYW1zLT5uZXh0KSB7 CisgICAgICAgIHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyID0gMDsKKyAgICAgICAgc3Ry ZWFtcy0+YXVfY291bnQgICAgICAgICAgICAgPSAwOworICAgICAgICBzdHJlYW1zLT5mbGFncyAg ICAgICAgICAgICAgICA9IDA7CisgICAgICAgIHN0cmVhbXMtPm9mZnNldCAgICAgICAgICAgICAg ID0gLTE7CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmc3RyZWFtcy0+cGVuZGluZ19idWZmZXIp OworICAgIH0KK30KKwordm9pZCBmZl9tbXRwX3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgp Cit7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3M7CisgICAgc3RydWN0IFN0cmVh bXMgICAgICAgICAgICpzdHJlYW1zOworCisgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsg YXNzICE9IE5VTEw7KSB7CisgICAgICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqbmV4dCA9 IGFzcy0+bmV4dDsKKyAgICAgICAgaWYgKGFzcy0+ZGF0YSAhPSBOVUxMKQorICAgICAgICAgICAg YXZfZnJlZShhc3MtPmRhdGEpOworICAgICAgICBhdl9mcmVlKGFzcyk7CisgICAgICAgIGFzcyA9 IG5leHQ7CisgICAgfQorCisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1z ICE9IE5VTEw7KSB7CisgICAgICAgIHN0cnVjdCBTdHJlYW1zICpuZXh0ID0gc3RyZWFtcy0+bmV4 dDsKKyAgICAgICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICE9IE5VTEwpCisg ICAgICAgICAgICBhdl9mcmVlKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yKTsKKyAgICAg ICAgaWYgKHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciAhPSBOVUxMKQorICAgICAg ICAgICAgYXZfZnJlZShzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IpOworICAgICAg ICBhdl9idWZmZXJfdW5yZWYoJnN0cmVhbXMtPnBlbmRpbmdfYnVmZmVyKTsKKyAgICAgICAgYXZf ZnJlZShzdHJlYW1zKTsKKyAgICAgICAgc3RyZWFtcyA9IG5leHQ7CisgICAgfQorCisgICAgYXZf ZnJlZShjdHgpOworfQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10cC5oIGIvbGliYXZmb3Jt YXQvbW10cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjMwMGE2YTFh ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9tbXRwLmgKQEAgLTAsMCArMSw2NCBA QAorLyoKKyAqIE1QRUcgTWVkaWEgVHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBwYXJzZXIsIGFz IGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwOC0xLgorICogQ29weXJpZ2h0IChjKSAyMDIzIFN1cGVy RmFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpZm5kZWYgQVZG T1JNQVRfTU1UUF9ICisjZGVmaW5lIEFWRk9STUFUX01NVFBfSAorCisjaW5jbHVkZSAiYXZmb3Jt YXQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgTU1UUENvbnRleHQgTU1UUENvbnRleHQ7CisKKy8qKgor ICogT3BlbiBhbiBNTVQgcHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKiBAcGFyYW0gcHJvZ3Jh bSBUaGUgQVZQcm9ncmFtIHRoaXMgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGguCisgKiBAcmV0 dXJuIEEgbmV3IE1NVFBDb250ZXh0LCBvciBOVUxMIG9uIGFsbG9jYXRpb24gZXJyb3IuCisgKi8K K01NVFBDb250ZXh0ICpmZl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9ncmFtKTsKKwor LyoqCisgKiBQYXJzZSBhbiBNTVQgcHJvdG9jb2wgcGFja2V0LgorICoKKyAqIEBwYXJhbSBjdHgg VGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqIEBwYXJhbSBzIFRoZSBBVkZvcm1h dENvbnRleHQuCisgKiBAcGFyYW0gcGt0IFRoZSBBVlBhY2tldCB0byBmaWxsLgorICogQHBhcmFt IGJ1ZiBUaGUgcGFja2V0IGRhdGEuCisgKiBAcGFyYW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgcGFj a2V0IGRhdGEuCisgKiBAcmV0dXJuID49IDAgaWYgYSBuZXcgQVZQYWNrZXQgaXMgZW1pdHRlZCwK KyAqICAgICAgICAgRkZFUlJPUl9SRURPIGlmIHRoZSBuZXh0IHBhY2tldCBpcyBuZWVkZWQsCisg KiAgICAgICAgIG9yIGFub3RoZXIgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCisgKi8KK2ludCBm Zl9tbXRwX3BhcnNlX3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBBVkZvcm1hdENvbnRleHQgKnMs IEFWUGFja2V0ICpwa3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAq YnVmLCB1aW50MTZfdCBzaXplKTsKKworLyoqCisgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIE1N VFAgcGFyc2VyLiBVc2VmdWwgd2hlbiBzZWVraW5nLgorICoKKyAqIEBwYXJhbSBjdHggVGhlIE1N VCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqLwordm9pZCBmZl9tbXRwX3Jlc2V0X3N0YXRl KE1NVFBDb250ZXh0ICpjdHgpOworCisvKioKKyAqIENsb3NlIGFuIE1NVCBwcm90b2NvbCBwYXJz ZXIgY29udGV4dCwgZnJlZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICoKKyAqIEBwYXJh bSBjdHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqLwordm9pZCBmZl9tbXRw X3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgpOworCisjZW5kaWYgLyogQVZGT1JNQVRfTU1U UF9IICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tbXR0bHYuYyBiL2xpYmF2Zm9ybWF0L21t dHRsdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjUzYzk5MzljYTQK LS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9tbXR0bHYuYwpAQCAtMCwwICsxLDMzNCBA QAorLyoKKyAqIE1NVCBwcm90b2NvbCBvdmVyIFRMViBwYWNrZXRzIChNTVQvVExWKSBkZW11eGVy LCBhcyBkZWZpbmVkIGluIEFSSUIgU1RELUIzMi4KKyAqIENvcHlyaWdodCAoYykgMjAyMyBTdXBl ckZhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRl ICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIK KyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAiYXZmb3JtYXQu aCIKKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAiZGVtdXguaCIKKyNpbmNs dWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1tdHAuaCIKKworI2RlZmluZSBIRUFERVJfQllU RSAwYjAxMTExMTExCisKK2VudW0geworICAgIFVOREVGSU5FRF9QQUNLRVQgICAgICAgICAgICA9 IDB4MDAsCisgICAgSVBWNF9QQUNLRVQgICAgICAgICAgICAgICAgID0gMHgwMSwKKyAgICBJUFY2 X1BBQ0tFVCAgICAgICAgICAgICAgICAgPSAweDAyLAorICAgIEhFQURFUl9DT01QUkVTU0VEX0lQ X1BBQ0tFVCA9IDB4MDMsCisgICAgVFJBTlNNSVNTSU9OX0NPTlRST0xfUEFDS0VUID0gMHhGRSwK KyAgICBOVUxMX1BBQ0tFVCAgICAgICAgICAgICAgICAgPSAweEZGLAorfTsKKworZW51bSB7Cisg ICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFMX0lQVjRfQU5EX1BBUlRJQUxfVURQX0hF QURFUiA9IDB4MjAsCisgICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9JUFY0X0hFQURFUiAgICAg ICAgICAgICAgICAgICAgICAgICA9IDB4MjEsCisgICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9Q QVJUSUFMX0lQVjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUiA9IDB4NjAsCisgICAgQ09OVEVYVF9J REVOVElGSUNBVElPTl9OT19DT01QUkVTU0VEX0hFQURFUiAgICAgICAgICAgICAgICA9IDB4NjEs Cit9OworCitzdGF0aWMgaW50IG1tdHRsdl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKK3sK KyAgICBzaXplX3QgICBpLCBqOworICAgIHVpbnQ4X3QgIHBhY2tldF90eXBlOworICAgIHVpbnQx Nl90IGRhdGFfbGVuZ3RoOworCisgICAgaW50IHByb2Nlc3NlZCAgPSAwOworICAgIGludCByZWNv Z25pemVkID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgKyA0IDwgcC0+YnVmX3NpemUgJiYgcHJv Y2Vzc2VkIDwgMTAwOyArK3Byb2Nlc3NlZCkgeworICAgICAgICBpZiAocC0+YnVmW2ldICE9IEhF QURFUl9CWVRFKSByZXR1cm4gMDsKKworICAgICAgICBwYWNrZXRfdHlwZSA9IHAtPmJ1ZltpICsg MV07CisgICAgICAgIGRhdGFfbGVuZ3RoID0gQVZfUkIxNihwLT5idWYgKyBpICsgMik7CisgICAg ICAgIGkgKz0gNDsKKworICAgICAgICBpZiAocGFja2V0X3R5cGUgPT0gSEVBREVSX0NPTVBSRVNT RURfSVBfUEFDS0VUKSB7CisgICAgICAgICAgICBpZiAoZGF0YV9sZW5ndGggPCAzIHx8IGkgKyAy ID49IHAtPmJ1Zl9zaXplKSBnb3RvIHNraXA7CisgICAgICAgICAgICBzd2l0Y2ggKHAtPmJ1Zltp ICsgMl0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFM X0lQVjRfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9J REVOVElGSUNBVElPTl9JUFY0X0hFQURFUjoKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9JREVO VElGSUNBVElPTl9QQVJUSUFMX0lQVjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAgICAgICAg ICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9OT19DT01QUkVTU0VEX0hFQURFUjoKKyAg ICAgICAgICAgICAgICArK3JlY29nbml6ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSBpZiAocGFja2V0X3R5cGUgPT0gTlVMTF9QQUNLRVQpIHsKKyAgICAgICAgICAgIC8vIG51bGwg cGFja2V0cyBzaG91bGQgY29udGFpbiBhbGwgMHhGRnMKKyAgICAgICAgICAgIGZvciAoaiA9IGk7 IGogPCBpICsgZGF0YV9sZW5ndGggJiYgaiA8IHAtPmJ1Zl9zaXplOyArK2opIHsKKyAgICAgICAg ICAgICAgICBpZiAocC0+YnVmW2pdICE9IDB4RkYpIGdvdG8gc2tpcDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgICsrcmVjb2duaXplZDsKKyAgICAgICAgfQorCisgICAgICAgIHNraXA6Cisg ICAgICAgIGkgKz0gZGF0YV9sZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIHJlY29nbml6ZWQg KiBBVlBST0JFX1NDT1JFX01BWCAvIEZGTUFYKHByb2Nlc3NlZCwgMTApOworfQorCitzdHJ1Y3Qg TU1UVExWQ29udGV4dCB7CisgICAgc3RydWN0IFByb2dyYW0geworICAgICAgICB1aW50MzJfdCAg ICAgICBjaWQ7CisgICAgICAgIE1NVFBDb250ZXh0ICAgICptbXRwOworICAgICAgICBzdHJ1Y3Qg UHJvZ3JhbSAqbmV4dDsKKyAgICB9ICpwcm9ncmFtczsKKworICAgIGludDY0X3QgbGFzdF9wb3M7 CisgICAgc2l6ZV90ICByZXN5bmNfc2l6ZTsKKworICAgIHNpemVfdCAgY2FwOworICAgIHVpbnQ4 X3QgKmJ1ZjsKK307CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfY29tcHJlc3NlZF9pcF9wYWNr ZXQoCisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBB VlBhY2tldCAqcGt0LAorICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKK3sK KyAgICAvLyBwYXJ0aWFsIHVkcCBoZWFkZXIgYXJlIHVkcCBoZWFkZXIgd2l0aG91dCBkYXRhIGxl bmd0aCAoMTYgYml0cykgYW5kIGNoZWNrc3VtICgxNiBiaXRzKQorI2RlZmluZSBQQVJUSUFMX1VE UF9IRUFERVJfTEVOR1RIICg4IC0gNCkKKyAgICAvLyBwYXJ0aWFsIGlwdjYgaGVhZGVyIGFyZSBp cHY2IGhlYWRlciB3aXRob3V0IHBheWxvYWQgbGVuZ3RoICgxNiBiaXRzKQorI2RlZmluZSBQQVJU SUFMX0lQVjZfSEVBREVSX0xFTkdUSCAoNDAgLSAyKQorCisgICAgdWludDMyX3QgICAgICAgY29u dGV4dF9pZDsKKyAgICBzdHJ1Y3QgUHJvZ3JhbSAqcHJvZ3JhbTsKKworICAgIGlmIChzaXplIDwg MykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgY29udGV4dF9pZCA9 IEFWX1JCMTYoYnVmKSA+PiA0OworICAgIGJ1ZiArPSAzOworICAgIHNpemUgLT0gMzsKKworICAg IGZvciAocHJvZ3JhbSA9IGN0eC0+cHJvZ3JhbXM7IHByb2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9 IHByb2dyYW0tPm5leHQpCisgICAgICAgIGlmIChwcm9ncmFtLT5jaWQgPT0gY29udGV4dF9pZCkK KyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKHByb2dyYW0gPT0gTlVMTCkgeworICAgICAg ICBBVlByb2dyYW0gKnAgPSBhdl9uZXdfcHJvZ3JhbShzLCBjb250ZXh0X2lkKTsKKyAgICAgICAg aWYgKHAgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOworCisgICAgICAgIHByb2dyYW0g PSBhdl9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBQcm9ncmFtKSk7CisgICAgICAgIGlmIChwcm9ncmFt ID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgICAgICBwcm9ncmFtLT5tbXRw ID0gZmZfbW10cF9wYXJzZV9vcGVuKHApOworICAgICAgICBwcm9ncmFtLT5uZXh0ID0gY3R4LT5w cm9ncmFtczsKKyAgICAgICAgY3R4LT5wcm9ncmFtcyA9IHByb2dyYW07CisgICAgICAgIHByb2dy YW0tPmNpZCAgPSBjb250ZXh0X2lkOworICAgIH0KKworICAgIHN3aXRjaCAoYnVmWy0xXSkgewor ICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFMX0lQVjRfQU5EX1BBUlRJQUxf VURQX0hFQURFUjoKKyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fSVBWNF9IRUFERVI6 CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICBjYXNlIENPTlRFWFRf SURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6CisgICAg ICAgIGlmIChzaXplIDwgUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VEUF9I RUFERVJfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgICAgIHNpemUgLT0gUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VEUF9I RUFERVJfTEVOR1RIOworICAgICAgICBidWYgKz0gUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEgg KyBQQVJUSUFMX1VEUF9IRUFERVJfTEVOR1RIOworICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNB VElPTl9OT19DT01QUkVTU0VEX0hFQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgcmV0dXJu IGZmX21tdHBfcGFyc2VfcGFja2V0KHByb2dyYW0tPm1tdHAsIHMsIHBrdCwgYnVmLCBzaXplKTsK K30KKworc3RhdGljIGludCBtbXR0bHZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBB VlBhY2tldCAqcGt0KQoreworICAgIHVpbnQ4X3QgICAgICAgICAgICAgIGhlYWRlcls0XTsKKyAg ICB1aW50MTZfdCAgICAgICAgICAgICBzaXplOworICAgIGludCAgICAgICAgICAgICAgICAgIGVy cjsKKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOworICAgIGlu dDY0X3QgICAgICAgICAgICAgIHBvcyAgPSBhdmlvX3RlbGwocy0+cGIpOworCisgICAgaWYgKHBv cyA8IDApIHJldHVybiAoaW50KSBwb3M7CisgICAgaWYgKHBvcyAhPSBjdHgtPmxhc3RfcG9zKSB7 CisgICAgICAgIGN0eC0+bGFzdF9wb3MgPSBwb3M7CisKKyAgICAgICAgd2hpbGUgKHBvcyAtIGN0 eC0+bGFzdF9wb3MgPCBjdHgtPnJlc3luY19zaXplKSB7CisgICAgICAgICAgICBpZiAoKGVyciA9 IGZmaW9fZW5zdXJlX3NlZWtiYWNrKHMtPnBiLCA0KSkgPCAwKQorICAgICAgICAgICAgICAgIHJl dHVybiBlcnI7CisKKyAgICAgICAgICAgIGlmICgoZXJyID0gYXZpb19yZWFkKHMtPnBiLCBoZWFk ZXIsIDQpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBB VkVSUk9SX0VPRiA6IGVycjsKKworICAgICAgICAgICAgaWYgKGhlYWRlclswXSAhPSBIRUFERVJf QllURSkgeworICAgICAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCAtMywg U0VFS19DVVIpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7Cisg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNp emUgPSBBVl9SQjE2KGhlYWRlciArIDIpOworCisgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9f c2VlayhzLT5wYiwgLTQsIFNFRUtfQ1VSKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAo aW50KSBwb3M7CisKKyAgICAgICAgICAgIGlmICgoZXJyID0gZmZpb19lbnN1cmVfc2Vla2JhY2so cy0+cGIsIDQgKyBzaXplICsgMSkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwor CisgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9fc2tpcChzLT5wYiwgNCArIHNpemUpKSA8IDAp CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKworICAgICAgICAgICAgaWYgKChl cnIgPSBhdmlvX3JlYWQocy0+cGIsIGhlYWRlciwgMSkpIDwgMCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gYXZpb19mZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9GIDogZXJyOworCisgICAgICAgICAg ICBpZiAoaGVhZGVyWzBdID09IEhFQURFUl9CWVRFKSB7CisgICAgICAgICAgICAgICAgLy8gZm91 bmQgSEVBREVSLCBbc2l6ZV0sIEhFQURFUiwgc2hvdWxkIGJlIGdvb2QKKyAgICAgICAgICAgICAg ICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgLXNpemUgLSAxIC0gNCwgU0VFS19DVVIpKSA8 IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisgICAgICAgICAgICAg ICAgZ290byBzdWNjZXNzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHBvcyA9 IGF2aW9fc2VlayhzLT5wYiwgLXNpemUgLSAxIC0gMywgU0VFS19DVVIpKSA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBzdWNjZXNzOgorICAgICAgICBjdHgtPmxhc3Rf cG9zID0gcG9zOworCisgICAgICAgIGZvciAoc3RydWN0IFByb2dyYW0gKnByb2dyYW0gPSBjdHgt PnByb2dyYW1zOworICAgICAgICAgICAgIHByb2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9IHByb2dy YW0tPm5leHQpCisgICAgICAgICAgICBmZl9tbXRwX3Jlc2V0X3N0YXRlKHByb2dyYW0tPm1tdHAp OworICAgIH0KKworICAgIGlmIChwa3QgIT0gTlVMTCkgcGt0LT5wb3MgPSBjdHgtPmxhc3RfcG9z OworICAgIGlmICgoZXJyID0gZmZpb19yZWFkX3NpemUocy0+cGIsIGhlYWRlciwgNCkpIDwgMCkK KyAgICAgICAgcmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsKKyAg ICBjdHgtPmxhc3RfcG9zICs9IDQ7CisKKyAgICBpZiAoaGVhZGVyWzBdICE9IEhFQURFUl9CWVRF KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHNpemUgPSBBVl9S QjE2KGhlYWRlciArIDIpOworICAgIGlmIChoZWFkZXJbMV0gIT0gSEVBREVSX0NPTVBSRVNTRURf SVBfUEFDS0VUKSB7CisgICAgICAgIGlmICgoY3R4LT5sYXN0X3BvcyA9IGF2aW9fc2tpcChzLT5w Yiwgc2l6ZSkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOwor ICAgICAgICByZXR1cm4gRkZFUlJPUl9SRURPOworICAgIH0KKworICAgIGlmIChjdHgtPmNhcCA8 IHNpemUpIHsKKyAgICAgICAgaWYgKGN0eC0+YnVmICE9IE5VTEwpCisgICAgICAgICAgICBhdl9m cmVlKGN0eC0+YnVmKTsKKyAgICAgICAgaWYgKChjdHgtPmJ1ZiA9IGF2X21hbGxvYyhjdHgtPmNh cCA9IHNpemUpKSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoZXJybm8pOwor ICAgIH0KKyAgICBpZiAoKGVyciA9IGZmaW9fcmVhZF9zaXplKHMtPnBiLCBjdHgtPmJ1Ziwgc2l6 ZSkpIDwgMCkKKyAgICAgICAgcmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6 IGVycjsKKyAgICBjdHgtPmxhc3RfcG9zICs9IHNpemU7CisgICAgcmV0dXJuIG1tdHRsdl9yZWFk X2NvbXByZXNzZWRfaXBfcGFja2V0KGN0eCwgcywgcGt0LCBjdHgtPmJ1Ziwgc2l6ZSk7Cit9CisK K3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAg ICBpbnQ2NF90ICAgICAgICAgICAgICBwb3M7CisgICAgaW50NjRfdCAgICAgICAgICAgICAgYWxs b3cgPSBzLT5wcm9iZXNpemU7CisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCAgPSBzLT5w cml2X2RhdGE7CisKKyAgICBjdHgtPmxhc3RfcG9zID0gYXZpb190ZWxsKHMtPnBiKTsKKyAgICBp ZiAoY3R4LT5sYXN0X3BvcyA8IDApCisgICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9z OworICAgIGN0eC0+bGFzdF9wb3MgLT0gMTsgLy8gZm9yY2UgcmVzeW5jCisKKyAgICBjdHgtPnJl c3luY19zaXplID0gNDA5NjsKKyAgICBzLT5jdHhfZmxhZ3MgfD0gQVZGTVRDVFhfTk9IRUFERVI7 CisKKyAgICBpZiAoIXMtPnBiLT5zZWVrYWJsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp ZiAoKHBvcyA9IGF2aW9fdGVsbChzLT5wYikpIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIHBv czsKKworICAgIHdoaWxlIChzLT5uYl9zdHJlYW1zIDw9IDAgJiYgYWxsb3cgPiAwKSB7CisgICAg ICAgIGNvbnN0IGludDY0X3QgY3VyID0gY3R4LT5sYXN0X3BvczsKKyAgICAgICAgY29uc3QgaW50 ICAgICBlcnIgPSBtbXR0bHZfcmVhZF9wYWNrZXQocywgTlVMTCk7CisgICAgICAgIGlmIChlcnIg PCAwKSByZXR1cm4gZXJyOworICAgICAgICBhbGxvdyAtPSBjdHgtPmxhc3RfcG9zIC0gY3VyOwor ICAgIH0KKworICAgIGN0eC0+bGFzdF9wb3MgPSBhdmlvX3RlbGwocy0+cGIpOworICAgIGlmIChj dHgtPmxhc3RfcG9zIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIGN0eC0+bGFzdF9wb3M7CisK KyAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgcG9zLCBTRUVLX1NFVCkpIDwgMCkKKyAg ICAgICAgcmV0dXJuIChpbnQpIHBvczsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG1tdHRsdl9yZWFkX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqY3R4KQoreworICAgIHN0cnVjdCBQ cm9ncmFtICAgICAgICpwcm9ncmFtOworICAgIHN0cnVjdCBNTVRUTFZDb250ZXh0ICpwcml2ID0g Y3R4LT5wcml2X2RhdGE7CisgICAgZm9yIChwcm9ncmFtID0gcHJpdi0+cHJvZ3JhbXM7IHByb2dy YW0gIT0gTlVMTDspIHsKKyAgICAgICAgc3RydWN0IFByb2dyYW0gKm5leHQgPSBwcm9ncmFtLT5u ZXh0OworICAgICAgICBmZl9tbXRwX3BhcnNlX2Nsb3NlKHByb2dyYW0tPm1tdHApOworICAgICAg ICBhdl9mcmVlKHByb2dyYW0pOworICAgICAgICBwcm9ncmFtID0gbmV4dDsKKyAgICB9CisgICAg aWYgKHByaXYtPmJ1ZiAhPSBOVUxMKSBhdl9mcmVlKHByaXYtPmJ1Zik7CisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQ2NF90IG1tdHRsdl9yZWFkX3RpbWVzdGFtcCgKKyAgICBzdHJ1Y3Qg QVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFtX2luZGV4LAorICAgIGludDY0X3QgKnBvcywg aW50NjRfdCBwb3NfbGltaXQpCit7CisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCA9IHMt PnByaXZfZGF0YTsKKworICAgIGlmICgoKnBvcyA9IGF2aW9fc2VlayhzLT5wYiwgKnBvcywgU0VF S19TRVQpKSA8IDApCisgICAgICAgIHJldHVybiAoaW50KSAqcG9zOworCisgICAgd2hpbGUgKHBv c19saW1pdCA+IDApIHsKKyAgICAgICAgQVZQYWNrZXQgICAgICBwYWNrZXQgPSB7MH07CisgICAg ICAgIGNvbnN0IGludCAgICAgZXJyICAgID0gbW10dGx2X3JlYWRfcGFja2V0KHMsICZwYWNrZXQp OworICAgICAgICBjb25zdCBpbnQ2NF90IHRzICAgICA9IHBhY2tldC5kdHM7CisgICAgICAgIGNv bnN0IGludDY0X3Qgb2ZmICAgID0gcGFja2V0LnBvczsKKyAgICAgICAgY29uc3QgaW50ICAgICBz aWQgICAgPSBwYWNrZXQuc3RyZWFtX2luZGV4OworICAgICAgICBhdl9wYWNrZXRfdW5yZWYoJnBh Y2tldCk7CisgICAgICAgIGlmIChlcnIgPj0gMCAmJiAoc3RyZWFtX2luZGV4IDwgMCB8fCBzaWQg PT0gc3RyZWFtX2luZGV4KSkgeworICAgICAgICAgICAgKnBvcyA9IG9mZjsKKyAgICAgICAgICAg IHJldHVybiB0czsKKyAgICAgICAgfQorICAgICAgICBwb3NfbGltaXQgLT0gY3R4LT5sYXN0X3Bv cyAtICpwb3M7CisgICAgICAgICpwb3MgPSBjdHgtPmxhc3RfcG9zOworICAgICAgICBpZiAoZXJy IDwgMCAmJiBlcnIgIT0gRkZFUlJPUl9SRURPKQorICAgICAgICAgICAgcmV0dXJuIEFWX05PUFRT X1ZBTFVFOworICAgIH0KKworICAgIHJldHVybiBBVl9OT1BUU19WQUxVRTsKK30KKworY29uc3Qg QVZJbnB1dEZvcm1hdCBmZl9tbXR0bHZfZGVtdXhlciA9IHsKKyAgICAubmFtZSAgICAgICAgICAg PSAibW10dGx2IiwKKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgK KyAgICAgICAgIk1NVCBwcm90b2NvbCBvdmVyIFRMViBwYWNrZXRzIChBUklCIFNURC1CMzIpIiks CisgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBNTVRUTFZDb250ZXh0KSwKKyAg ICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GTVRfSU5JVF9DTEVBTlVQLAorICAgIC5yZWFkX3Byb2Jl ICAgICA9IG1tdHRsdl9wcm9iZSwKKyAgICAucmVhZF9oZWFkZXIgICAgPSBtbXR0bHZfcmVhZF9o ZWFkZXIsCisgICAgLnJlYWRfcGFja2V0ICAgID0gbW10dGx2X3JlYWRfcGFja2V0LAorICAgIC5y ZWFkX2Nsb3NlICAgICA9IG1tdHRsdl9yZWFkX2Nsb3NlLAorICAgIC5yZWFkX3RpbWVzdGFtcCA9 IG1tdHRsdl9yZWFkX3RpbWVzdGFtcCwKKyAgICAuZmxhZ3MgICAgICAgICAgPSBBVkZNVF9TSE9X X0lEUywKK307CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92ZXJzaW9uLmggYi9saWJhdmZvcm1h dC92ZXJzaW9uLmgKaW5kZXggZTI2MzRiODVhZS4uNGJkZTgyYWJiNCAxMDA2NDQKLS0tIGEvbGli YXZmb3JtYXQvdmVyc2lvbi5oCisrKyBiL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaApAQCAtMzEsNyAr MzEsNyBAQAogCiAjaW5jbHVkZSAidmVyc2lvbl9tYWpvci5oIgogCi0jZGVmaW5lIExJQkFWRk9S TUFUX1ZFUlNJT05fTUlOT1IgICA1CisjZGVmaW5lIExJQkFWRk9STUFUX1ZFUlNJT05fTUlOT1Ig ICA2CiAjZGVmaW5lIExJQkFWRk9STUFUX1ZFUlNJT05fTUlDUk8gMTAwCiAKICNkZWZpbmUgTElC QVZGT1JNQVRfVkVSU0lPTl9JTlQgQVZfVkVSU0lPTl9JTlQoTElCQVZGT1JNQVRfVkVSU0lPTl9N QUpPUiwgXAotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==