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 E404646D0B for ; Sun, 9 Jul 2023 12:39:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E80AF68C60F; Sun, 9 Jul 2023 15:39:39 +0300 (EEST) Received: from mail-vs1-f43.google.com (mail-vs1-f43.google.com [209.85.217.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 72A7668C5AF for ; Sun, 9 Jul 2023 15:39:33 +0300 (EEST) Received: by mail-vs1-f43.google.com with SMTP id ada2fe7eead31-44504b2141bso1068856137.2 for ; Sun, 09 Jul 2023 05:39:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688906372; x=1691498372; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=8EQmYxGVLIhD7Qm8dgi9kGceR/34JNaYpkFjkU3fvzk=; b=CwLm3/SiTYVaWp+8h0cIry+ygV6S2qPgCKB5DXQIqvg0C1bJFJ+N6neiV+4hB6lwEe 1e7fagXEcgywzv95Ra+C+CbyMR+4LM6ezi6Re/+MbxrTVXuVT+bIUo7eq2RL0viXPY7Y WHRX6XKcGic7CMwhAJ432shBD57xZ0g0haEzsHbAZrulB1QkoemJ6vgcuGuhocj/WLkq UM/9qPMLRMkInXLZyATBUYeXlunJdfEoftgJNauRYx3MUcaNWBUFwGxCD+2+WbN88g4/ K14Bg4RarN1U3OQ3nUMD5Pbj8dhRuuIVZ/VyLypYCQ1M3/daDKB+reFMQh8naxzDF+ya uzLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688906372; x=1691498372; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=8EQmYxGVLIhD7Qm8dgi9kGceR/34JNaYpkFjkU3fvzk=; b=Zumw7pECcnYrhJaKNZ7E6sJ6emqMLXcWzz1I4yhWMiPd/+Zp1tnH0gbRRHv5IC4j97 Sci8MHi7v2UsltWoAi3+tHFEYhfexOoEx+mj6d4kYndBxzNlny6L2uSBLm+QhK9vIypP nwunGIy3WjQ+GPcS7R8AY2OSrhJZG1C6EcUhIb2Gat80eXtxyBR1RUHlWwiKIYCnB9j+ rDpYEivzl8ZBnRNg227JAJZXFzzxtrlBmaJGul5ySmgexW7JrhpH2sGBDrRw92sN+IyB hUfryAV1oG4I98/+0MwTeo9HzDaz9Z0JVjPnJ7BUfgGHm2YtjkFS/HDI/Uw4ANzsJZ5z TaRw== X-Gm-Message-State: ABy/qLahD2KgSzoS68l8Cx8kQKvWqD0H3lyBDT9S9m9m3rBCnh5AdMne eKPK/wHcaT0qYJoO/O2wz688BQMYUetjiv0lRCuQR5Fr X-Google-Smtp-Source: APBJJlECBGnjw10edfi8O3DHYd7jS0uH/aHwmKF1ylhI0dk6vu7EM47toVmDeuEbdMwNmmot2GsOjGt9XHmYm31qe6c= X-Received: by 2002:a05:6102:7d9:b0:445:91b:385d with SMTP id y25-20020a05610207d900b00445091b385dmr3893470vsg.12.1688906371762; Sun, 09 Jul 2023 05:39:31 -0700 (PDT) MIME-Version: 1.0 From: Paul B Mahol Date: Sun, 9 Jul 2023 14:46:29 +0200 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="00000000000059a61906000d2843" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] HVQM4 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --00000000000059a61906000d2843 Content-Type: text/plain; charset="UTF-8" Attached. --00000000000059a61906000d2843 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-avformat-add-hvqm4-demuxer.patch" Content-Disposition: attachment; filename="0001-avformat-add-hvqm4-demuxer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljvfh3412 RnJvbSBhY2RiMTM1NzcwZGEyYzUyZjNmNGY5NDE2YjIzMWIxYjU3M2NiMGFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IFN1biwgMSBBdWcgMjAyMSAyMDowNjoyNCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS8zXSBhdmZv cm1hdDogYWRkIGh2cW00IGRlbXV4ZXIKClNpZ25lZC1vZmYtYnk6IFBhdWwgQiBNYWhvbCA8b25l bWRhQGdtYWlsLmNvbT4KLS0tCiBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgfCAgIDEgKwogbGli YXZmb3JtYXQvYWxsZm9ybWF0cy5jIHwgICAxICsKIGxpYmF2Zm9ybWF0L2h2cW00ZGVjLmMgICB8 IDE4NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hh bmdlZCwgMTg4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9o dnFtNGRlYy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUgYi9saWJhdmZvcm1h dC9NYWtlZmlsZQppbmRleCA0Y2IwMGY4NzAwLi5lMmU1Zjk1YzhhIDEwMDY0NAotLS0gYS9saWJh dmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQpAQCAtMjU4LDYgKzI1 OCw3IEBAIE9CSlMtJChDT05GSUdfRVZDX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gcmF3ZW5j Lm8KIE9CSlMtJChDT05GSUdfSExTX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gaGxzLm8gaGxz X3NhbXBsZV9lbmNyeXB0aW9uLm8KIE9CSlMtJChDT05GSUdfSExTX01VWEVSKSAgICAgICAgICAg ICAgICAgKz0gaGxzZW5jLm8gaGxzcGxheWxpc3QubyBhdmMubwogT0JKUy0kKENPTkZJR19ITk1f REVNVVhFUikgICAgICAgICAgICAgICArPSBobm0ubworT0JKUy0kKENPTkZJR19IVlFNNF9ERU1V WEVSKSAgICAgICAgICAgICArPSBodnFtNGRlYy5vCiBPQkpTLSQoQ09ORklHX0lDT19ERU1VWEVS KSAgICAgICAgICAgICAgICs9IGljb2RlYy5vCiBPQkpTLSQoQ09ORklHX0lDT19NVVhFUikgICAg ICAgICAgICAgICAgICs9IGljb2VuYy5vCiBPQkpTLSQoQ09ORklHX0lEQ0lOX0RFTVVYRVIpICAg ICAgICAgICAgICs9IGlkY2luLm8KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMu YyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwppbmRleCA2MzI0OTUyYmQyLi4yMjgwMjRjMTVj IDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKKysrIGIvbGliYXZmb3JtYXQv YWxsZm9ybWF0cy5jCkBAIC0yMTIsNiArMjEyLDcgQEAgZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9y bWF0IGZmX2hldmNfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaGxzX2Rl bXV4ZXI7CiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfaGxzX211eGVyOwogZXh0ZXJu IGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2hubV9kZW11eGVyOworZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX2h2cW00X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAg ZmZfaWNvX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfaWNvX211eGVy OwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2lkY2luX2RlbXV4ZXI7CmRpZmYgLS1n aXQgYS9saWJhdmZvcm1hdC9odnFtNGRlYy5jIGIvbGliYXZmb3JtYXQvaHZxbTRkZWMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xZmVlMzVjZjg2Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliYXZmb3JtYXQvaHZxbTRkZWMuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAq IEhWUU00IGRlbXV4ZXIKKyAqIENvcHlyaWdodCAoYykgMjAyMSBQYXVsIEIgTWFob2wKKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9p bnRyZWFkd3JpdGUuaCIKKworI2luY2x1ZGUgImF2Zm9ybWF0LmgiCisjaW5jbHVkZSAiaW50ZXJu YWwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgSFZRTTRCbG9jayB7CisgICAgaW50NjRfdCBzdGFydDsK KyAgICBpbnQ2NF90IHN0b3A7Cit9IEhWUU00QmxvY2s7CisKK3R5cGVkZWYgc3RydWN0IEhWUU00 Q29udGV4dCB7CisgICAgdWludDMyX3QgbmJfYmxvY2tzOworICAgIEhWUU00QmxvY2sgKmJsb2Nr OworICAgIHVpbnQzMl90IGN1cnJlbnRfYmxvY2s7Cit9IEhWUU00Q29udGV4dDsKKworc3RhdGlj IGludCBodnFtNF9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKK3sKKyAgICBpZiAobWVtY21w KHAtPmJ1ZiwgIkhWUU00IDEuMyIsIDkpICYmCisgICAgICAgIG1lbWNtcChwLT5idWYsICJIVlFN NCAxLjUiLCA5KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gQVZQUk9CRV9TQ09S RV9NQVg7Cit9CisKK3N0YXRpYyBpbnQgaHZxbTRfcmVhZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0 ICpzKQoreworICAgIEFWSU9Db250ZXh0ICpwYiA9IHMtPnBiOworICAgIEFWU3RyZWFtICp2c3Qs ICphc3Q7CisgICAgdWludDMyX3QgaGVhZGVyX3NpemUsIHVzZWNfcGVyX2ZyYW1lOworICAgIGlu dCBhdWRpb19mb3JtYXQ7CisKKyAgICB2c3QgPSBhdmZvcm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwp OworICAgIGlmICghdnN0KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAg YXZpb19za2lwKHBiLCAxNik7CisKKyAgICBoZWFkZXJfc2l6ZSA9IGF2aW9fcmIzMihwYik7Cisg ICAgYXZpb19za2lwKHBiLCA4KTsKKyAgICB2c3QtPnN0YXJ0X3RpbWUgPSAwOworICAgIHZzdC0+ bmJfZnJhbWVzID0gYXZpb19yYjMyKHBiKTsKKyAgICB2c3QtPmR1cmF0aW9uID0gdnN0LT5uYl9m cmFtZXM7CisgICAgYXZpb19za2lwKHBiLCA0KTsKKyAgICB1c2VjX3Blcl9mcmFtZSA9IGF2aW9f cmIzMihwYik7CisgICAgYXZpb19za2lwKHBiLCAxMik7CisKKyAgICB2c3QtPmNvZGVjcGFyLT5j b2RlY190eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPOworICAgIHZzdC0+Y29kZWNwYXItPmNvZGVj X2lkICAgPSBBVl9DT0RFQ19JRF9IVlFNNDsKKyAgICB2c3QtPmNvZGVjcGFyLT53aWR0aCAgICAg ID0gYXZpb19yYjE2KHBiKTsKKyAgICB2c3QtPmNvZGVjcGFyLT5oZWlnaHQgICAgID0gYXZpb19y YjE2KHBiKTsKKworICAgIGF2aW9fc2tpcChwYiwgMik7CisgICAgYXZpb19za2lwKHBiLCAyKTsK KworICAgIGF2cHJpdl9zZXRfcHRzX2luZm8odnN0LCA2NCwgdXNlY19wZXJfZnJhbWUsIDEwMDAw MDApOworCisgICAgYXN0ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShzLCBOVUxMKTsKKyAgICBpZiAo IWFzdCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGFzdC0+Y29kZWNw YXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfQVVESU87CisgICAgYXN0LT5jb2RlY3Bhci0+ Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzID0gYXZpb19yOChwYik7CisgICAgYXN0LT5jb2RlY3Bhci0+ Yml0c19wZXJfY29kZWRfc2FtcGxlID0gYXZpb19yOChwYik7CisgICAgYXVkaW9fZm9ybWF0ICAg ICAgICAgICAgICA9IGF2aW9fcjgocGIpOworICAgIHN3aXRjaCAoYXVkaW9fZm9ybWF0KSB7Cisg ICAgY2FzZSAwOgorICAgICAgICBhc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lE X0FEUENNX0lNQV9IVlFNNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBh c3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX1BDTV9TMTZMRTsKKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIGF2aW9fc2tpcChwYiwgMSk7CisgICAgYXN0LT5jb2RlY3Bhci0+ c2FtcGxlX3JhdGUgPSBhdmlvX3JiMzIocGIpOworCisgICAgYXZpb19za2lwKHBiLCBoZWFkZXJf c2l6ZSAtIGF2aW9fdGVsbChwYikpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg aHZxbTRfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQorewor ICAgIEhWUU00Q29udGV4dCAqaHZxbTQgPSBzLT5wcml2X2RhdGE7CisgICAgQVZJT0NvbnRleHQg KnBiID0gcy0+cGI7CisgICAgaW50IG1lZGlhX3R5cGUsIGZyYW1lX3R5cGUsIHJldCwgbmV3X2Js b2NrID0gMTsKKyAgICBpbnQ2NF90IHBvcywgcHBvczsKKyAgICBpbnQzMl90IHNpemU7CisKKyAg ICBpZiAoYXZpb19mZW9mKHBiKSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOworCisgICAg cG9zID0gYXZpb190ZWxsKHBiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaHZxbTQtPm5i X2Jsb2NrczsgaSsrKSB7CisgICAgICAgIEhWUU00QmxvY2sgKmJsb2NrID0gJmh2cW00LT5ibG9j a1tpXTsKKworICAgICAgICBpZiAocG9zID49IGJsb2NrLT5zdGFydCAmJiBwb3MgPCBibG9jay0+ c3RvcCkgeworICAgICAgICAgICAgaHZxbTQtPmN1cnJlbnRfYmxvY2sgPSBpOworICAgICAgICAg ICAgbmV3X2Jsb2NrID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor CisgICAgaWYgKG5ld19ibG9jaykgeworICAgICAgICBIVlFNNEJsb2NrICpibG9jazsKKworICAg ICAgICBodnFtNC0+YmxvY2sgPSBhdl9yZWFsbG9jX2YoaHZxbTQtPmJsb2NrLCBzaXplb2YoKmh2 cW00LT5ibG9jayksIGh2cW00LT5uYl9ibG9ja3MrMSk7CisgICAgICAgIGlmICghaHZxbTQtPmJs b2NrKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgYmxvY2sg PSAmaHZxbTQtPmJsb2NrW2h2cW00LT5uYl9ibG9ja3NdOworICAgICAgICBibG9jay0+c3RhcnQg PSBwb3M7CisgICAgICAgIGF2aW9fc2tpcChwYiwgNCk7CisgICAgICAgIGJsb2NrLT5zdG9wID0g YmxvY2stPnN0YXJ0ICsgYXZpb19yYjMyKHBiKSArIDIwOworICAgICAgICBhdmlvX3NraXAocGIs IDgpOworICAgICAgICBhdmlvX3NraXAocGIsIDQpOworCisgICAgICAgIGh2cW00LT5uYl9ibG9j a3MrKzsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocG9zID09IGh2cW00LT5ibG9ja1todnFt NC0+Y3VycmVudF9ibG9ja10uc3RhcnQpCisgICAgICAgICAgICBhdmlvX3NraXAocGIsIDIwKTsK KyAgICB9CisKKyAgICBwcG9zID0gYXZpb190ZWxsKHBiKTsKKyAgICBtZWRpYV90eXBlID0gYXZp b19yYjE2KHBiKTsKKyAgICBmcmFtZV90eXBlID0gYXZpb19yYjE2KHBiKTsKKyAgICBzaXplID0g YXZpb19yYjMyKHBiKTsKKyAgICByZXQgPSBhdl9uZXdfcGFja2V0KHBrdCwgc2l6ZSArIDIpOwor ICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgQVZfV0IxNihwa3Qt PmRhdGEsIGZyYW1lX3R5cGUpOworICAgIHJldCA9IGF2aW9fcmVhZChwYiwgcGt0LT5kYXRhICsg Miwgc2l6ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBw a3QtPnBvcyA9IHBwb3M7CisgICAgcGt0LT5zdHJlYW1faW5kZXggPSBtZWRpYV90eXBlID8gMCA6 IDE7CisgICAgaWYgKChmcmFtZV90eXBlID09IDB4MTAgJiYgbWVkaWFfdHlwZSA9PSAxKSB8fAor ICAgICAgICBtZWRpYV90eXBlID09IDApCisgICAgICAgIHBrdC0+ZmxhZ3MgfD0gQVZfUEtUX0ZM QUdfS0VZOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBodnFtNF9yZWFkX2Ns b3NlKEFWRm9ybWF0Q29udGV4dCAqcykKK3sKKyAgICBIVlFNNENvbnRleHQgKmh2cW00ID0gcy0+ cHJpdl9kYXRhOworCisgICAgYXZfZnJlZXAoJmh2cW00LT5ibG9jayk7CisKKyAgICByZXR1cm4g MDsKK30KKworY29uc3QgQVZJbnB1dEZvcm1hdCBmZl9odnFtNF9kZW11eGVyID0geworICAgIC5u YW1lICAgICAgICAgICA9ICJodnFtNCIsCisgICAgLmxvbmdfbmFtZSAgICAgID0gTlVMTF9JRl9D T05GSUdfU01BTEwoIkhWUU00IiksCisgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKEhWUU00 Q29udGV4dCksCisgICAgLnJlYWRfcHJvYmUgICAgID0gaHZxbTRfcHJvYmUsCisgICAgLnJlYWRf aGVhZGVyICAgID0gaHZxbTRfcmVhZF9oZWFkZXIsCisgICAgLnJlYWRfcGFja2V0ICAgID0gaHZx bTRfcmVhZF9wYWNrZXQsCisgICAgLnJlYWRfY2xvc2UgICAgID0gaHZxbTRfcmVhZF9jbG9zZSwK KyAgICAuZXh0ZW5zaW9ucyAgICAgPSAiaDRtIiwKKyAgICAuZmxhZ3MgICAgICAgICAgPSBBVkZN VF9HRU5FUklDX0lOREVYLAorfTsKLS0gCjIuMzkuMQoK --00000000000059a61906000d2843 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-avcodec-add-ADPCM-IMA-HVQM4-decoder.patch" Content-Disposition: attachment; filename="0002-avcodec-add-ADPCM-IMA-HVQM4-decoder.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljvfh32h1 RnJvbSBjZWI2ZDNmZTU5YTlhYmY0NGZmNDlkN2MwMDE1MjUyNTMxOWE4OGY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IFN1biwgMSBBdWcgMjAyMSAyMToxMjo1NSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBhdmNv ZGVjOiBhZGQgQURQQ00gSU1BIEhWUU00IGRlY29kZXIKClNpZ25lZC1vZmYtYnk6IFBhdWwgQiBN YWhvbCA8b25lbWRhQGdtYWlsLmNvbT4KLS0tCiBsaWJhdmNvZGVjL01ha2VmaWxlICAgICB8ICAx ICsKIGxpYmF2Y29kZWMvYWRwY20uYyAgICAgIHwgNjQgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgIHwgIDEgKwogbGliYXZj b2RlYy9jb2RlY19kZXNjLmMgfCAgNyArKysrKwogbGliYXZjb2RlYy9jb2RlY19pZC5oICAgfCAg MSArCiA1IGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9saWJh dmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQppbmRleCAxYjAyMjZjMDg5Li4x ZWFkOTk2YzMwIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29k ZWMvTWFrZWZpbGUKQEAgLTk0OCw2ICs5NDgsNyBAQCBPQkpTLSQoQ09ORklHX0FEUENNX0lNQV9E SzNfREVDT0RFUikgICAgICArPSBhZHBjbS5vIGFkcGNtX2RhdGEubwogT0JKUy0kKENPTkZJR19B RFBDTV9JTUFfREs0X0RFQ09ERVIpICAgICAgKz0gYWRwY20ubyBhZHBjbV9kYXRhLm8KIE9CSlMt JChDT05GSUdfQURQQ01fSU1BX0VBX0VBQ1NfREVDT0RFUikgICs9IGFkcGNtLm8gYWRwY21fZGF0 YS5vCiBPQkpTLSQoQ09ORklHX0FEUENNX0lNQV9FQV9TRUFEX0RFQ09ERVIpICArPSBhZHBjbS5v IGFkcGNtX2RhdGEubworT0JKUy0kKENPTkZJR19BRFBDTV9JTUFfSFZNUTRfREVDT0RFUikgICAg Kz0gYWRwY20ubyBhZHBjbV9kYXRhLm8KIE9CSlMtJChDT05GSUdfQURQQ01fSU1BX0lTU19ERUNP REVSKSAgICAgICs9IGFkcGNtLm8gYWRwY21fZGF0YS5vCiBPQkpTLSQoQ09ORklHX0FEUENNX0lN QV9NT0ZMRVhfREVDT0RFUikgICArPSBhZHBjbS5vIGFkcGNtX2RhdGEubwogT0JKUy0kKENPTkZJ R19BRFBDTV9JTUFfTVRGX0RFQ09ERVIpICAgICAgKz0gYWRwY20ubyBhZHBjbV9kYXRhLm8KZGlm ZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWRwY20uYyBiL2xpYmF2Y29kZWMvYWRwY20uYwppbmRleCA1 OWI5ZWYzNDk3Li4yZmRjZjJhZmIyIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FkcGNtLmMKKysr IGIvbGliYXZjb2RlYy9hZHBjbS5jCkBAIC01MzEsNiArNTMxLDQ5IEBAIHN0YXRpYyBpbmxpbmUg aW50IGFkcGNtX2ltYV9xdF9leHBhbmRfbmliYmxlKEFEUENNQ2hhbm5lbFN0YXR1cyAqYywgaW50 IG5pYmJsZSkKICAgICByZXR1cm4gYy0+cHJlZGljdG9yOwogfQogCitzdGF0aWMgdm9pZCBkZWNv ZGVfYWRwY21faW1hX2h2cW00KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgaW50MTZfdCAqb3V0YnVm LCBpbnQgc2FtcGxlc190b19kbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGZyYW1lX2Zvcm1hdCwgR2V0Qnl0ZUNvbnRleHQgKmdiKQoreworICAgIEFEUENNRGVjb2Rl Q29udGV4dCAqYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgaW50IHN0ID0gYXZjdHgtPmNoX2xh eW91dC5uYl9jaGFubmVscyA9PSAyOworICAgIHVuc2lnbmVkIHRtcDsKKworICAgIGZvciAoaW50 IGNoID0gMDsgY2ggPCBhdmN0eC0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAg ICAgIHN3aXRjaCAoZnJhbWVfZm9ybWF0KSB7CisgICAgICAgIGNhc2UgMTogLyogY29tYmluZWQg aGlzdCtpbmRleCAqLworICAgICAgICAgICAgdG1wID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2Ip OworICAgICAgICAgICAgYy0+c3RhdHVzW2NoXS5wcmVkaWN0b3IgID0gc2lnbl9leHRlbmQodG1w ICYgMHhGRjgwLCAxNik7CisgICAgICAgICAgICBjLT5zdGF0dXNbY2hdLnN0ZXBfaW5kZXggPSB0 bXAgJiAweDdmOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogIC8qIG5vIGhp c3QvaW5kZXggKGNvbnRpbnVlcyBmcm9tIHByZXZpb3VzIGZyYW1lKSAqLworICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzogLyogc2VwYXJhdGUgaGlz dCtpbmRleCAqLworICAgICAgICAgICAgdG1wID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2IpOwor ICAgICAgICAgICAgYy0+c3RhdHVzW2NoXS5wcmVkaWN0b3IgID0gc2lnbl9leHRlbmQodG1wLCAx Nik7CisgICAgICAgICAgICBjLT5zdGF0dXNbY2hdLnN0ZXBfaW5kZXggPSBieXRlc3RyZWFtMl9n ZXRfYnl0ZShnYik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGMt PnN0YXR1c1tjaF0uc3RlcF9pbmRleCA9IGF2X2NsaXAoYy0+c3RhdHVzW2NoXS5zdGVwX2luZGV4 LCAwLCA4OCk7CisgICAgfQorCisgICAgaWYgKGZyYW1lX2Zvcm1hdCA9PSAxIHx8IGZyYW1lX2Zv cm1hdCA9PSAzKSB7CisgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBhdmN0eC0+Y2hfbGF5 b3V0Lm5iX2NoYW5uZWxzOyBjaCsrKQorICAgICAgICAgICAgKm91dGJ1ZisrID0gKGludDE2X3Qp Yy0+c3RhdHVzW3N0IC0gY2hdLnByZWRpY3RvcjsKKyAgICAgICAgc2FtcGxlc190b19kby0tOwor ICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2FtcGxlc190b19kbzsgaSsrKSB7Cisg ICAgICAgIHVpbnQ4X3QgbmliYmxlID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUoZ2IpOworCisgICAg ICAgICpvdXRidWYrKyA9IGFkcGNtX2ltYV9xdF9leHBhbmRfbmliYmxlKCZjLT5zdGF0dXNbc3Rd LCBuaWJibGUgJiAweEYpOworICAgICAgICAqb3V0YnVmKysgPSBhZHBjbV9pbWFfcXRfZXhwYW5k X25pYmJsZSgmYy0+c3RhdHVzWyAwXSwgbmliYmxlID4+ICA0KTsKKyAgICB9CisKKyAgICBieXRl c3RyZWFtMl9zZWVrKGdiLCAwLCBTRUVLX0VORCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50MTZf dCBhZHBjbV9tc19leHBhbmRfbmliYmxlKEFEUENNQ2hhbm5lbFN0YXR1cyAqYywgaW50IG5pYmJs ZSkKIHsKICAgICBpbnQgcHJlZGljdG9yOwpAQCAtOTE5LDYgKzk2MiwyMCBAQCBzdGF0aWMgaW50 IGdldF9uYl9zYW1wbGVzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdi LAogICAgICAgICAqY29kZWRfc2FtcGxlcyAtPSAqY29kZWRfc2FtcGxlcyAlIDI4OwogICAgICAg ICBuYl9zYW1wbGVzICAgICAgPSAoYnVmX3NpemUgLSAxMikgLyAzMCAqIDI4OwogICAgICAgICBi cmVhazsKKyAgICBjYXNlIEFWX0NPREVDX0lEX0FEUENNX0lNQV9IVlFNNDoKKyAgICAgICAgewor ICAgICAgICAgICAgaW50IGZyYW1lX2Zvcm1hdCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2KGdiKTsK KyAgICAgICAgICAgIGludCBza2lwID0gNjsKKworICAgICAgICAgICAgaWYgKGZyYW1lX2Zvcm1h dCA9PSAxKQorICAgICAgICAgICAgICAgIHNraXAgKz0gMiAqIGNoOworICAgICAgICAgICAgaWYg KGZyYW1lX2Zvcm1hdCA9PSAzKQorICAgICAgICAgICAgICAgIHNraXAgKz0gMyAqIGNoOworCisg ICAgICAgICAgICBuYl9zYW1wbGVzID0gKGJ1Zl9zaXplIC0gc2tpcCkgKiAyIC8gY2g7CisgICAg ICAgICAgICBieXRlc3RyZWFtMl9zZWVrKGdiLCAwLCBTRUVLX1NFVCk7CisgICAgICAgIH0KKyAg ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfRUFfRUFDUzoKICAg ICAgICAgaGFzX2NvZGVkX3NhbXBsZXMgPSAxOwogICAgICAgICAqY29kZWRfc2FtcGxlcyA9IGJ5 dGVzdHJlYW0yX2dldF9sZTMyKGdiKTsKQEAgLTE0NjUsNiArMTUyMiwxMiBAQCBzdGF0aWMgaW50 IGFkcGNtX2RlY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKmZyYW1l LAogICAgICAgICAgICAgKnNhbXBsZXMrKyA9IGFkcGNtX2ltYV9leHBhbmRfbmliYmxlKCZjLT5z dGF0dXNbc3RdLCB2ICYgMHgwRiwgMyk7CiAgICAgICAgIH0KICAgICAgICAgKSAvKiBFbmQgb2Yg Q0FTRSAqLworICAgIENBU0UoQURQQ01fSU1BX0hWUU00LAorICAgICAgICBpbnQgZm9ybWF0ID0g Ynl0ZXN0cmVhbTJfZ2V0X2JlMTYoJmdiKTsKKworICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZn YiwgNCk7CisgICAgICAgIGRlY29kZV9hZHBjbV9pbWFfaHZxbTQoYXZjdHgsIHNhbXBsZXMsIG5i X3NhbXBsZXMsIGZvcm1hdCwgJmdiKTsKKyAgICAgICAgKSAvKiBFbmQgb2YgQ0FTRSAqLwogICAg IENBU0UoQURQQ01fSU1BX1NTSSwKICAgICAgICAgZm9yIChpbnQgbiA9IG5iX3NhbXBsZXMgPj4g KDEgLSBzdCk7IG4gPiAwOyBuLS0pIHsKICAgICAgICAgICAgIGludCB2ID0gYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KCZnYik7CkBAIC0yMzcyLDYgKzI0MzUsNyBAQCBBRFBDTV9ERUNPREVSKEFEUENN X0lNQV9ESzMsICAgICBzYW1wbGVfZm10c19zMTYsICBhZHBjbV9pbWFfZGszLCAgICAgIkFEUENN IElNQQogQURQQ01fREVDT0RFUihBRFBDTV9JTUFfREs0LCAgICAgc2FtcGxlX2ZtdHNfczE2LCAg YWRwY21faW1hX2RrNCwgICAgICJBRFBDTSBJTUEgRHVjayBESzQiKQogQURQQ01fREVDT0RFUihB RFBDTV9JTUFfRUFfRUFDUywgc2FtcGxlX2ZtdHNfczE2LCAgYWRwY21faW1hX2VhX2VhY3MsICJB RFBDTSBJTUEgRWxlY3Ryb25pYyBBcnRzIEVBQ1MiKQogQURQQ01fREVDT0RFUihBRFBDTV9JTUFf RUFfU0VBRCwgc2FtcGxlX2ZtdHNfczE2LCAgYWRwY21faW1hX2VhX3NlYWQsICJBRFBDTSBJTUEg RWxlY3Ryb25pYyBBcnRzIFNFQUQiKQorQURQQ01fREVDT0RFUihBRFBDTV9JTUFfSFZRTTQsICAg c2FtcGxlX2ZtdHNfczE2LCAgYWRwY21faW1hX2h2cW00LCAgICJBRFBDTSBJTUEgSFZRTTQiKQog QURQQ01fREVDT0RFUihBRFBDTV9JTUFfSVNTLCAgICAgc2FtcGxlX2ZtdHNfczE2LCAgYWRwY21f aW1hX2lzcywgICAgICJBRFBDTSBJTUEgRnVuY29tIElTUyIpCiBBRFBDTV9ERUNPREVSKEFEUENN X0lNQV9NT0ZMRVgsICBzYW1wbGVfZm10c19zMTZwLCBhZHBjbV9pbWFfbW9mbGV4LCAgIkFEUENN IElNQSBNb2JpQ2xpcCBNT0ZMRVgiKQogQURQQ01fREVDT0RFUihBRFBDTV9JTUFfTVRGLCAgICAg c2FtcGxlX2ZtdHNfczE2LCAgYWRwY21faW1hX210ZiwgICAgICJBRFBDTSBJTUEgQ2FwY29tJ3Mg TVQgRnJhbWV3b3JrIikKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJh dmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IDg3NzVkMTVhNGYuLmVhNDlhMDJkNjkgMTAwNjQ0Ci0t LSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwpA QCAtNjc0LDYgKzY3NCw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2FkcGNtX2ltYV9kazNf ZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2FkcGNtX2ltYV9kazRfZGVjb2RlcjsK IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2FkcGNtX2ltYV9lYV9lYWNzX2RlY29kZXI7CiBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9hZHBjbV9pbWFfZWFfc2VhZF9kZWNvZGVyOworZXh0ZXJuIGNv bnN0IEZGQ29kZWMgZmZfYWRwY21faW1hX2h2cW00X2RlY29kZXI7CiBleHRlcm4gY29uc3QgRkZD b2RlYyBmZl9hZHBjbV9pbWFfaXNzX2RlY29kZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9h ZHBjbV9pbWFfbW9mbGV4X2RlY29kZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hZHBjbV9p bWFfbXRmX2RlY29kZXI7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2NvZGVjX2Rlc2MuYyBiL2xp YmF2Y29kZWMvY29kZWNfZGVzYy5jCmluZGV4IDQ0MDZkZDgzMTguLjg3NDAyNzFlMDAgMTAwNjQ0 Ci0tLSBhL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCisrKyBiL2xpYmF2Y29kZWMvY29kZWNfZGVz Yy5jCkBAIC0yNTgwLDYgKzI1ODAsMTMgQEAgc3RhdGljIGNvbnN0IEFWQ29kZWNEZXNjcmlwdG9y IGNvZGVjX2Rlc2NyaXB0b3JzW10gPSB7CiAgICAgICAgIC5sb25nX25hbWUgPSBOVUxMX0lGX0NP TkZJR19TTUFMTCgiQURQQ00gS29uYW1pIFhNRCIpLAogICAgICAgICAucHJvcHMgICAgID0gQVZf Q09ERUNfUFJPUF9JTlRSQV9PTkxZIHwgQVZfQ09ERUNfUFJPUF9MT1NTWSwKICAgICB9LAorICAg IHsKKyAgICAgICAgLmlkICAgICAgICA9IEFWX0NPREVDX0lEX0FEUENNX0lNQV9IVlFNNCwKKyAg ICAgICAgLnR5cGUgICAgICA9IEFWTUVESUFfVFlQRV9BVURJTywKKyAgICAgICAgLm5hbWUgICAg ICA9ICJhZHBjbV9pbWFfaHZxbTQiLAorICAgICAgICAubG9uZ19uYW1lID0gTlVMTF9JRl9DT05G SUdfU01BTEwoIkFEUENNIElNQSBIVlFNNCIpLAorICAgICAgICAucHJvcHMgICAgID0gQVZfQ09E RUNfUFJPUF9JTlRSQV9PTkxZIHwgQVZfQ09ERUNfUFJPUF9MT1NTWSwKKyAgICB9LAogCiAgICAg LyogQU1SICovCiAgICAgewpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9jb2RlY19pZC5oIGIvbGli YXZjb2RlYy9jb2RlY19pZC5oCmluZGV4IGE1YTBjYjg1MjUuLjBhZTdmMGRlZDEgMTAwNjQ0Ci0t LSBhL2xpYmF2Y29kZWMvY29kZWNfaWQuaAorKysgYi9saWJhdmNvZGVjL2NvZGVjX2lkLmgKQEAg LTQxOCw2ICs0MTgsNyBAQCBlbnVtIEFWQ29kZWNJRCB7CiAgICAgQVZfQ09ERUNfSURfQURQQ01f SU1BX01PRkxFWCwKICAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfQUNPUk4sCiAgICAgQVZfQ09E RUNfSURfQURQQ01fWE1ELAorICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9IVlFNNCwKIAogICAg IC8qIEFNUiAqLwogICAgIEFWX0NPREVDX0lEX0FNUl9OQiA9IDB4MTIwMDAsCi0tIAoyLjM5LjEK Cg== --00000000000059a61906000d2843 Content-Type: text/x-patch; charset="US-ASCII"; name="0003-avcodec-add-HVQM4-video-decoder.patch" Content-Disposition: attachment; filename="0003-avcodec-add-HVQM4-video-decoder.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljvfh2xy0 RnJvbSBkNWVmNmNkZjQzMWMwODZhYzUxN2VmZjViMDE3YmYxYzJmZjBjMzZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgNyBKdWwgMjAyMyAyMDo1OToxMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy8zXSBhdmNv ZGVjOiBhZGQgSFZRTTQgdmlkZW8gZGVjb2RlcgoKU2lnbmVkLW9mZi1ieTogUGF1bCBCIE1haG9s IDxvbmVtZGFAZ21haWwuY29tPgotLS0KIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgIHwgICAgMSAr CiBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jICB8ICAgIDEgKwogbGliYXZjb2RlYy9jb2RlY19kZXNj LmMgfCAgICA3ICsKIGxpYmF2Y29kZWMvY29kZWNfaWQuaCAgIHwgICAgMSArCiBsaWJhdmNvZGVj L2h2cW00LmMgICAgICB8IDE3OTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiA1IGZpbGVzIGNoYW5nZWQsIDE4MDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYmF2Y29kZWMvaHZxbTQuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUg Yi9saWJhdmNvZGVjL01ha2VmaWxlCmluZGV4IDFlYWQ5OTZjMzAuLjhmOWYyYmVlYmYgMTAwNjQ0 Ci0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQpAQCAt MTExLDYgKzExMSw3IEBAIE9CSlMtJChDT05GSUdfSFBFTERTUCkgICAgICAgICAgICAgICAgICs9 IGhwZWxkc3AubwogT0JKUy0kKENPTkZJR19IVUZGTUFOKSAgICAgICAgICAgICAgICAgKz0gaHVm Zm1hbi5vCiBPQkpTLSQoQ09ORklHX0hVRkZZVVZEU1ApICAgICAgICAgICAgICArPSBodWZmeXV2 ZHNwLm8KIE9CSlMtJChDT05GSUdfSFVGRllVVkVOQ0RTUCkgICAgICAgICAgICs9IGh1ZmZ5dXZl bmNkc3AubworT0JKUy0kKENPTkZJR19IVlFNNF9ERUNPREVSKSAgICAgICAgICAgKz0gaHZxbTQu bwogT0JKUy0kKENPTkZJR19JRENURFNQKSAgICAgICAgICAgICAgICAgKz0gaWRjdGRzcC5vIHNp bXBsZV9pZGN0Lm8ganJldmRjdC5vCiBPQkpTLSQoQ09ORklHX0lJUkZJTFRFUikgICAgICAgICAg ICAgICArPSBpaXJmaWx0ZXIubwogT0JKUy0kKENPTkZJR19JTkZMQVRFX1dSQVBQRVIpICAgICAg ICAgKz0gemxpYl93cmFwcGVyLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMg Yi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IGVhNDlhMDJkNjkuLjY0MWU0ZmQ2NTkgMTAw NjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZjb2RlYy9hbGxjb2Rl Y3MuYwpAQCAtMTY5LDYgKzE2OSw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hxX2hxYV9k ZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaHF4X2RlY29kZXI7CiBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9odWZmeXV2X2VuY29kZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9o dWZmeXV2X2RlY29kZXI7CitleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9odnFtNF9kZWNvZGVyOwog ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaHltdF9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29k ZWMgZmZfaWRjaW5fZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2lmZl9pbGJtX2Rl Y29kZXI7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2NvZGVjX2Rlc2MuYyBiL2xpYmF2Y29kZWMv Y29kZWNfZGVzYy5jCmluZGV4IDg3NDAyNzFlMDAuLmNhOTZiNDBlYjEgMTAwNjQ0Ci0tLSBhL2xp YmF2Y29kZWMvY29kZWNfZGVzYy5jCisrKyBiL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCkBAIC0x OTYwLDYgKzE5NjAsMTMgQEAgc3RhdGljIGNvbnN0IEFWQ29kZWNEZXNjcmlwdG9yIGNvZGVjX2Rl c2NyaXB0b3JzW10gPSB7CiAgICAgICAgIC5sb25nX25hbWUgPSBOVUxMX0lGX0NPTkZJR19TTUFM TCgidk1peCBWaWRlbyIpLAogICAgICAgICAucHJvcHMgICAgID0gQVZfQ09ERUNfUFJPUF9JTlRS QV9PTkxZIHwgQVZfQ09ERUNfUFJPUF9MT1NTWSwKICAgICB9LAorICAgIHsKKyAgICAgICAgLmlk ICAgICAgICA9IEFWX0NPREVDX0lEX0hWUU00LAorICAgICAgICAudHlwZSAgICAgID0gQVZNRURJ QV9UWVBFX1ZJREVPLAorICAgICAgICAubmFtZSAgICAgID0gImh2cW00IiwKKyAgICAgICAgLmxv bmdfbmFtZSA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJIVlFNNCBWaWRlbyIpLAorICAgICAgICAu cHJvcHMgICAgID0gQVZfQ09ERUNfUFJPUF9MT1NTWSwKKyAgICB9LAogCiAgICAgLyogdmFyaW91 cyBQQ00gImNvZGVjcyIgKi8KICAgICB7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2NvZGVjX2lk LmggYi9saWJhdmNvZGVjL2NvZGVjX2lkLmgKaW5kZXggMGFlN2YwZGVkMS4uNjJjNjk1NmEyNCAx MDA2NDQKLS0tIGEvbGliYXZjb2RlYy9jb2RlY19pZC5oCisrKyBiL2xpYmF2Y29kZWMvY29kZWNf aWQuaApAQCAtMzI0LDYgKzMyNCw3IEBAIGVudW0gQVZDb2RlY0lEIHsKICAgICBBVl9DT0RFQ19J RF9FVkMsCiAgICAgQVZfQ09ERUNfSURfUlRWMSwKICAgICBBVl9DT0RFQ19JRF9WTUlYLAorICAg IEFWX0NPREVDX0lEX0hWUU00LAogCiAgICAgLyogdmFyaW91cyBQQ00gImNvZGVjcyIgKi8KICAg ICBBVl9DT0RFQ19JRF9GSVJTVF9BVURJTyA9IDB4MTAwMDAsICAgICAvLy88IEEgZHVtbXkgaWQg cG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGF1ZGlvIGNvZGVjcwpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy9odnFtNC5jIGIvbGliYXZjb2RlYy9odnFtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmJhMWU5ZjBhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVj L2h2cW00LmMKQEAgLTAsMCArMSwxNzkyIEBACisvKgorICogSFZRTTQgVmlkZW8gZGVjb2Rlcgor ICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAgVGlsbG1hbm4gS2FycmFzCisgKiBDb3B5cmlnaHQg KGMpIDIwMjIgUGF1bCBCIE1haG9sCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVn LgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQor ICovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjaW5jbHVkZSAibGliYXZ1dGlsL3RocmVh ZC5oIgorCisjaW5jbHVkZSAiYXZjb2RlYy5oIgorI2luY2x1ZGUgImJ5dGVzdHJlYW0uaCIKKyNp bmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImRlY29kZS5oIgorI2luY2x1ZGUg ImdldF9iaXRzLmgiCisjaW5jbHVkZSAiZ29sb21iLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIK KworI2RlZmluZSBQTEFORV9DT1VOVCAzCisjZGVmaW5lIExVTUFfQ0hST01BIDIKKyNkZWZpbmUg TFVNQV9JRFggMAorI2RlZmluZSBDSFJPTUFfSURYIDEKKworZW51bSBGcmFtZVR5cGUgeworICAg IElfRlJBTUUgPSAweDEwLAorICAgIFBfRlJBTUUgPSAweDIwLAorICAgIEJfRlJBTUUgPSAweDMw LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgQmxvY2tEYXRhIHsKKyAgICB1aW50OF90IHZhbHVlOwor ICAgIHVpbnQ4X3QgdHlwZTsKK30gQmxvY2tEYXRhOworCit0eXBlZGVmIHN0cnVjdCBTdGFja1N0 YXRlIHsKKyAgICB1aW50MzJfdCBwbGFuZV9pZHg7CisgICAgQmxvY2tEYXRhIGNvbnN0ICpsaW5l X3ByZXY7CisgICAgQmxvY2tEYXRhIGNvbnN0ICpsaW5lX2N1cnI7CisgICAgQmxvY2tEYXRhIGNv bnN0ICpsaW5lX25leHQ7CisgICAgQmxvY2tEYXRhIG5leHQ7CisgICAgQmxvY2tEYXRhIGN1cnI7 CisgICAgdWludDhfdCB2YWx1ZV9wcmV2OworfSBTdGFja1N0YXRlOworCit0eXBlZGVmIHN0cnVj dCBHQkNXaXRoVkxDIHsKKyAgICBHZXRCaXRDb250ZXh0IGdiOworICAgIFZMQyAqdmxjOworfSBH QkNXaXRoVkxDOworCit0eXBlZGVmIHN0cnVjdCBIVlFQbGFuZURlc2MgeworICAgIEJsb2NrRGF0 YSAqYm9yZGVyOyAvLyAwLTMgYmVnaW5uaW5nIG9mIHRoZSBwbGFuZSBpbmNsdWRpbmcgdGhlIGJv cmRlcgorICAgIEJsb2NrRGF0YSAqcGF5bG9hZDsgLy8gNC03IGJlZ2lubmluZyBvZiB0aGUgbm9u LWJvcmRlciBwbGFuZSBkYXRhCisgICAgdWludDE2X3QgaF9ibG9ja3M7CisgICAgdWludDE2X3Qg dl9ibG9ja3M7CisgICAgdWludDE2X3QgaF9ibG9ja3Nfc2FmZTsKKyAgICB1aW50MTZfdCB2X2Js b2Nrc19zYWZlOworICAgIC8vIG9mZnNldHMgb2YgUEJzIHdpdGhpbiBvbmUgTUNCCisgICAgLy8g Ky0tLSstLS0rCisgICAgLy8gfCAwIHwgMyB8CisgICAgLy8gKy0tLSstLS0rCisgICAgLy8gfCAx IHwgMiB8CisgICAgLy8gKy0tLSstLS0rCisgICAgdWludDE2X3QgbWNiX29mZnNldFs0XTsKKyAg ICB1aW50MzJfdCBweF9vZmZzZXRbNF07CisgICAgdWludDMyX3QgcHlfb2Zmc2V0WzRdOworICAg IHVpbnQ4X3Qgd2lkdGhfc2hpZnQ7CisgICAgdWludDhfdCBoZWlnaHRfc2hpZnQ7CisgICAgdWlu dDhfdCBwYl9wZXJfbWNiX3g7CisgICAgdWludDhfdCBwYl9wZXJfbWNiX3k7CisgICAgdWludDhf dCBibG9ja3NfcGVyX21jYjsKK30gSFZRUGxhbmVEZXNjOworCit0eXBlZGVmIHZvaWQgKCptb3Rp b25fY29tcF9mdW5jKSh1aW50OF90ICpkc3QsIHB0cmRpZmZfdCBkc3RfbGluZXNpemUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMsIHB0cmRpZmZf dCBzcmNfbGluZXNpemUpOworCitzdGF0aWMgdm9pZCBtb3Rpb25fY29tcF8wMCh1aW50OF90ICpk c3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCB1aW50OF90IGNvbnN0ICpzcmMsIHB0cmRpZmZfdCBz cmNfc3RyaWRlKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgZHN0W2pdID0gc3JjW2pd OworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7 CisgICAgfQorfQorCisvLyBvZmZzZXQgdmVydGljYWxseSBieSBoYWxmIGEgc2FtcGxlCitzdGF0 aWMgdm9pZCBtb3Rpb25fY29tcF8wMSh1aW50OF90ICpkc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRl LCB1aW50OF90IGNvbnN0ICpzcmMsIHB0cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsg aisrKQorICAgICAgICAgICAgZHN0W2pdID0gKHNyY1tqXSArCisgICAgICAgICAgICAgICAgICAg ICAgc3JjW3NyY19zdHJpZGUgKyBqXSArIDEpIC8gMjsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJp ZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgIH0KK30KKworLy8gb2Zmc2V0IGhv cml6b250YWxseSBieSBoYWxmIGEgc2FtcGxlCitzdGF0aWMgdm9pZCBtb3Rpb25fY29tcF8xMCh1 aW50OF90ICpkc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCB1aW50OF90IGNvbnN0ICpzcmMsIHB0 cmRpZmZfdCBzcmNfc3RyaWRlKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7 CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgZHN0W2pd ID0gKHNyY1tqICsgMF0gKworICAgICAgICAgICAgICAgICAgICAgIHNyY1tqICsgMV0gKyAxKSAv IDI7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgICAgICBzcmMgKz0gc3JjX3N0cmlk ZTsKKyAgICB9Cit9CisKKy8vIG9mZnNldCBieSBoYWxmIGEgc2FtcGxlIGluIGJvdGggZGlyZWN0 aW9ucworc3RhdGljIHZvaWQgbW90aW9uX2NvbXBfMTEodWludDhfdCAqZHN0LCBwdHJkaWZmX3Qg ZHN0X3N0cmlkZSwgdWludDhfdCBjb25zdCAqc3JjLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSkKK3sK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0g MDsgaiA8IDQ7IGorKykKKyAgICAgICAgICAgIGRzdFtqXSA9IChzcmNbaiArIDBdICsKKyAgICAg ICAgICAgICAgICAgICAgICBzcmNbaiArIDFdICsKKyAgICAgICAgICAgICAgICAgICAgICBzcmNb c3JjX3N0cmlkZSArIGogKyAwXSArCisgICAgICAgICAgICAgICAgICAgICAgc3JjW3NyY19zdHJp ZGUgKyBqICsgMV0gKyAyKSA+PiAyOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAg ICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCBWaWRlb1N0 YXRlIHsKKyAgICBIVlFQbGFuZURlc2MgcGxhbmVzW1BMQU5FX0NPVU5UXTsKKyAgICBWTEMgdmxj WzZdOworICAgIEdCQ1dpdGhWTEMgZGNfdmFsdWVzW1BMQU5FX0NPVU5UXTsgLy8gREMgdmFsdWVz CisgICAgR0JDV2l0aFZMQyBkY19ybGVbUExBTkVfQ09VTlRdOyAvLyBEQyBydW4gbGVuZ3Rocwor ICAgIEdCQ1dpdGhWTEMgYnVmVHJlZTBbUExBTkVfQ09VTlRdOworICAgIEdCQ1dpdGhWTEMgYmFz aXNfbnVtW0xVTUFfQ0hST01BXTsKKyAgICBHQkNXaXRoVkxDIGJhc2lzX251bV9ydW5bTFVNQV9D SFJPTUFdOworICAgIEdldEJpdENvbnRleHQgZml4dmxbUExBTkVfQ09VTlRdOyAvLyB1bmNvbXBy ZXNzZWQgaGlnaC1lbnRyb3B5IGRhdGEKKyAgICBHQkNXaXRoVkxDIG12X2g7IC8vIGhvcml6b250 YWwgbW90aW9uIHZlY3RvcnMKKyAgICBHQkNXaXRoVkxDIG12X3Y7IC8vIHZlcnRpY2FsIG1vdGlv biB2ZWN0b3JzCisgICAgR0JDV2l0aFZMQyBtY2JfcHJvYzsgLy8gbWFjcm9ibG9jayBwcm9jCisg ICAgR0JDV2l0aFZMQyBtY2JfdHlwZTsgLy8gbWFjcm9ibG9jayB0eXBlCisgICAgaW50IGhfbmVz dF9zaXplOworICAgIGludCB2X25lc3Rfc2l6ZTsKKyAgICBpbnQgaXNfbGFuZHNjYXBlOyAvLyBG SVhNRTogY2hlY2sgd2hhdCBoYXBwZW5zIGZvciBzcXVhcmUgdmlkZW8KKyAgICB1aW50OF90IG5l c3RfZGF0YVs1MTIgKiAyNTZdOworICAgIGludCBkY19tYXg7CisgICAgaW50IGRjX21pbjsKKyAg ICBpbnQgdW5rX3NoaWZ0OworICAgIGludCBkY19zaGlmdDsKKyAgICAvLyBudW1iZXIgb2YgcmVz aWR1YWwgYml0cyB0byByZWFkIGZyb20gbXZfaC9tdl92LAorICAgIC8vIG9uZSBzZXR0aW5nIGZv ciBlYWNoIG9mIHBhc3QgYW5kIGZ1dHVyZQorICAgIGludCBtY19yZXNpZHVhbF9iaXRzX2hbM107 CisgICAgaW50IG1jX3Jlc2lkdWFsX2JpdHNfdlszXTsKKworICAgIG1vdGlvbl9jb21wX2Z1bmMg bW90aW9uX2NvbXBfZnVuY1syXVsyXTsKK30gVmlkZW9TdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3Qg U2VxT2JqIHsKKyAgICBWaWRlb1N0YXRlICpzdGF0ZTsKKyAgICB1aW50MTZfdCB3aWR0aDsKKyAg ICB1aW50MTZfdCBoZWlnaHQ7CisgICAgdWludDhfdCBoX3NhbXA7CisgICAgdWludDhfdCB2X3Nh bXA7Cit9IFNlcU9iajsKKwordHlwZWRlZiBzdHJ1Y3QgTUNQbGFuZSB7CisgICAgaW50IHJsZTsK KyAgICBpbnQgcGJfZGM7CisgICAgQmxvY2tEYXRhICpwYXlsb2FkX2N1cl9ibGs7CisgICAgQmxv Y2tEYXRhICpwYXlsb2FkX2N1cl9yb3c7CisgICAgdWludDhfdCAqcHJlc2VudDsKKyAgICBwdHJk aWZmX3QgcHJlc2VudF9zdHJpZGU7CisgICAgdWludDhfdCAqdG9wOworICAgIHB0cmRpZmZfdCB0 b3Bfc3RyaWRlOworICAgIHVpbnQ4X3QgKnRhcmdldDsKKyAgICBwdHJkaWZmX3QgdGFyZ2V0X3N0 cmlkZTsKKyAgICB1aW50OF90ICpwYXN0OworICAgIHB0cmRpZmZfdCBwYXN0X3N0cmlkZTsKKyAg ICB1aW50OF90ICpmdXR1cmU7CisgICAgcHRyZGlmZl90IGZ1dHVyZV9zdHJpZGU7CisgICAgcHRy ZGlmZl90IGhfbWNiX3N0cmlkZTsKKyAgICBwdHJkaWZmX3Qgdl9tY2Jfc3RyaWRlOworICAgIHVp bnQzMl90IHBiX3Blcl9tY2JfeDsKKyAgICBwdHJkaWZmX3Qgc3RyaWRlOworfSBNQ1BsYW5lOwor CitzdHJ1Y3QgUkxEZWNvZGVyIHsKKyAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICB1aW50MzJfdCBj b3VudDsKK307CisKK3R5cGVkZWYgc3RydWN0IEhWUU00Q29udGV4dCB7CisgICAgQVZGcmFtZSAq ZnJhbWVbM107CisKKyAgICBTZXFPYmogc2Vxb2JqOworICAgIFZpZGVvU3RhdGUgc3RhdGU7Cisg ICAgdWludDhfdCAqYnVmZmVyOworCisgICAgR2V0Qml0Q29udGV4dCBnYjsKK30gSFZRTTRDb250 ZXh0OworCitzdGF0aWMgaW50MzJfdCBkaXZfdGFiWzE2XTsKK3N0YXRpYyBpbnQzMl90IG1jZGl2 X3RhYls1MTJdOworCitzdGF0aWMgYXZfY29sZCB2b2lkIGh2cW00X2luaXRfc3RhdGljKHZvaWQp Cit7CisgICAgZGl2X3RhYlswXSA9IDA7CisgICAgbWNkaXZfdGFiWzBdID0gMDsKKworICAgIGZv ciAoaW50IGkgPSAxOyBpIDwgMTY7IGkrKykKKyAgICAgICAgZGl2X3RhYltpXSA9IDB4MTAwMCAv IChpICogMTYpICogMTY7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA1MTI7IGkrKykKKyAgICAg ICAgbWNkaXZfdGFiW2ldID0gMHgxMDAwIC8gaTsKK30KKworc3RhdGljIHZvaWQgc2V0X3BsYW5l X2Rlc2MoU2VxT2JqICpzZXFvYmosIHVpbnQ4X3QgcGxhbmVfaWR4LCB1aW50OF90IGhfc2FtcCwg dWludDhfdCB2X3NhbXApCit7CisgICAgSFZRUGxhbmVEZXNjICpwbGFuZSA9ICZzZXFvYmotPnN0 YXRlLT5wbGFuZXNbcGxhbmVfaWR4XTsKKworICAgIHBsYW5lLT53aWR0aF9zaGlmdCA9IGhfc2Ft cCA9PSAyID8gMSA6IDA7CisgICAgcGxhbmUtPmhlaWdodF9zaGlmdCA9IHZfc2FtcCA9PSAyID8g MSA6IDA7CisgICAgLy8gcGl4ZWxzIHBlciAyeDIgYmxvY2sKKyAgICBwbGFuZS0+cGJfcGVyX21j Yl94ID0gMiA+PiBwbGFuZS0+d2lkdGhfc2hpZnQ7IC8vIDEuLjIKKyAgICBwbGFuZS0+cGJfcGVy X21jYl95ID0gMiA+PiBwbGFuZS0+aGVpZ2h0X3NoaWZ0OyAvLyAxLi4yCisgICAgcGxhbmUtPmJs b2Nrc19wZXJfbWNiID0gcGxhbmUtPnBiX3Blcl9tY2JfeCAqIHBsYW5lLT5wYl9wZXJfbWNiX3k7 IC8vIDEuLjQKKyAgICAvLyBudW1iZXIgb2YgNHg0IGJsb2NrcworICAgIHBsYW5lLT5oX2Jsb2Nr cyA9IHNlcW9iai0+d2lkdGggLyAoaF9zYW1wICogNCk7CisgICAgcGxhbmUtPnZfYmxvY2tzID0g c2Vxb2JqLT5oZWlnaHQgLyAodl9zYW1wICogNCk7CisgICAgLy8gbnVtYmVyIG9mIDR4NCBibG9j a3MgKyBib3JkZXIKKyAgICBwbGFuZS0+aF9ibG9ja3Nfc2FmZSA9IHBsYW5lLT5oX2Jsb2NrcyAr IDI7CisgICAgcGxhbmUtPnZfYmxvY2tzX3NhZmUgPSBwbGFuZS0+dl9ibG9ja3MgKyAyOworICAg IC8vIG9mZnNldCBvZiBibG9ja3MgaW4gTUNCCisgICAgcGxhbmUtPm1jYl9vZmZzZXRbMF0gPSAw OworICAgIHBsYW5lLT5tY2Jfb2Zmc2V0WzFdID0gcGxhbmUtPmhfYmxvY2tzX3NhZmU7CisgICAg cGxhbmUtPm1jYl9vZmZzZXRbMl0gPSBwbGFuZS0+aF9ibG9ja3Nfc2FmZSArIDE7CisgICAgcGxh bmUtPm1jYl9vZmZzZXRbM10gPSAxOworICAgIHBsYW5lLT5weF9vZmZzZXRbMF0gPSAwOworICAg IHBsYW5lLT5weF9vZmZzZXRbMV0gPSAwOworICAgIHBsYW5lLT5weF9vZmZzZXRbMl0gPSA0Owor ICAgIHBsYW5lLT5weF9vZmZzZXRbM10gPSA0OworICAgIHBsYW5lLT5weV9vZmZzZXRbMF0gPSAw OworICAgIHBsYW5lLT5weV9vZmZzZXRbMV0gPSA0OworICAgIHBsYW5lLT5weV9vZmZzZXRbMl0g PSA0OworICAgIHBsYW5lLT5weV9vZmZzZXRbM10gPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRf Ym9yZGVyKEJsb2NrRGF0YSAqZHN0KQoreworICAgIGRzdC0+dmFsdWUgPSAxMjc7CisgICAgZHN0 LT50eXBlID0gMjU1OworfQorCitzdGF0aWMgdm9pZCBzZXRfYnVmZmVyKFNlcU9iaiAqc2Vxb2Jq LCB2b2lkICp3b3JrYnVmZiwgdWludDhfdCAqYnVmZmVyKQoreworICAgIFZpZGVvU3RhdGUgKnN0 YXRlID0gd29ya2J1ZmY7CisgICAgQmxvY2tEYXRhICpwbGFuZV9kYXRhOworCisgICAgc2Vxb2Jq LT5zdGF0ZSA9IHN0YXRlOworICAgIHNldF9wbGFuZV9kZXNjKHNlcW9iaiwgMCwgMSwgMSk7Cisg ICAgc2V0X3BsYW5lX2Rlc2Moc2Vxb2JqLCAxLCAyLCAyKTsKKyAgICBzZXRfcGxhbmVfZGVzYyhz ZXFvYmosIDIsIDIsIDIpOworCisgICAgc3RhdGUtPmlzX2xhbmRzY2FwZSA9IHNlcW9iai0+d2lk dGggPj0gc2Vxb2JqLT5oZWlnaHQ7CisgICAgaWYgKHN0YXRlLT5pc19sYW5kc2NhcGUpIHsKKyAg ICAgICAgc3RhdGUtPmhfbmVzdF9zaXplID0gNzA7CisgICAgICAgIHN0YXRlLT52X25lc3Rfc2l6 ZSA9IDM4OworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRlLT5oX25lc3Rfc2l6ZSA9IDM4Owor ICAgICAgICBzdGF0ZS0+dl9uZXN0X3NpemUgPSA3MDsKKyAgICB9CisKKyAgICBzdGF0ZS0+YmFz aXNfbnVtWzBdLnZsYyA9ICZzdGF0ZS0+dmxjWzNdOworICAgIHN0YXRlLT5iYXNpc19udW1bMV0u dmxjID0gJnN0YXRlLT52bGNbM107CisKKyAgICBzdGF0ZS0+YmFzaXNfbnVtX3J1blswXS52bGMg PSAmc3RhdGUtPnZsY1sxXTsKKyAgICBzdGF0ZS0+YmFzaXNfbnVtX3J1blsxXS52bGMgPSAmc3Rh dGUtPnZsY1sxXTsKKworICAgIHN0YXRlLT5kY192YWx1ZXNbMF0udmxjID0gJnN0YXRlLT52bGNb MF07CisgICAgc3RhdGUtPmRjX3ZhbHVlc1sxXS52bGMgPSAmc3RhdGUtPnZsY1swXTsKKyAgICBz dGF0ZS0+ZGNfdmFsdWVzWzJdLnZsYyA9ICZzdGF0ZS0+dmxjWzBdOworCisgICAgc3RhdGUtPmRj X3JsZVswXS52bGMgPSAmc3RhdGUtPnZsY1sxXTsgLy8gcmV1c2UhCisgICAgc3RhdGUtPmRjX3Js ZVsxXS52bGMgPSAmc3RhdGUtPnZsY1sxXTsgLy8KKyAgICBzdGF0ZS0+ZGNfcmxlWzJdLnZsYyA9 ICZzdGF0ZS0+dmxjWzFdOyAvLworCisgICAgc3RhdGUtPmJ1ZlRyZWUwWzBdLnZsYyA9ICZzdGF0 ZS0+dmxjWzJdOworICAgIHN0YXRlLT5idWZUcmVlMFsxXS52bGMgPSAmc3RhdGUtPnZsY1syXTsK KyAgICBzdGF0ZS0+YnVmVHJlZTBbMl0udmxjID0gJnN0YXRlLT52bGNbMl07CisKKyAgICBzdGF0 ZS0+bXZfaC52bGMgPSAmc3RhdGUtPnZsY1s0XTsKKyAgICBzdGF0ZS0+bXZfdi52bGMgPSAmc3Rh dGUtPnZsY1s0XTsKKworICAgIHN0YXRlLT5tY2JfcHJvYy52bGMgPSAmc3RhdGUtPnZsY1s1XTsK KyAgICBzdGF0ZS0+bWNiX3R5cGUudmxjID0gJnN0YXRlLT52bGNbNV07CisKKyAgICBzdGF0ZS0+ bW90aW9uX2NvbXBfZnVuY1swXVswXSA9IG1vdGlvbl9jb21wXzAwOworICAgIHN0YXRlLT5tb3Rp b25fY29tcF9mdW5jWzBdWzFdID0gbW90aW9uX2NvbXBfMDE7CisgICAgc3RhdGUtPm1vdGlvbl9j b21wX2Z1bmNbMV1bMF0gPSBtb3Rpb25fY29tcF8xMDsKKyAgICBzdGF0ZS0+bW90aW9uX2NvbXBf ZnVuY1sxXVsxXSA9IG1vdGlvbl9jb21wXzExOworCisgICAgcGxhbmVfZGF0YSA9IChCbG9ja0Rh dGEgKilidWZmZXI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBQTEFORV9DT1VOVDsgaSsrKSB7 CisgICAgICAgIEhWUVBsYW5lRGVzYyAqcGxhbmUgPSAmc3RhdGUtPnBsYW5lc1tpXTsKKyAgICAg ICAgcHRyZGlmZl90IHN0cmlkZSA9IHBsYW5lLT5oX2Jsb2Nrc19zYWZlOworICAgICAgICBCbG9j a0RhdGEgKnB0cjsKKworICAgICAgICBwbGFuZS0+Ym9yZGVyID0gcGxhbmVfZGF0YTsKKyAgICAg ICAgLy8gc2tpcCB0b3AgYm9yZGVyIChzdHJpZGUpIGFuZCBsZWZ0IGJvcmRlciAoMSkKKyAgICAg ICAgcGxhbmUtPnBheWxvYWQgPSBwbGFuZV9kYXRhICsgc3RyaWRlICsgMTsKKyAgICAgICAgcGxh bmVfZGF0YSArPSBwbGFuZS0+aF9ibG9ja3Nfc2FmZSAqIHBsYW5lLT52X2Jsb2Nrc19zYWZlOwor CisgICAgICAgIC8vIHNldCBob3Jpem9udGFsIGJvcmRlcnMKKyAgICAgICAgcHRyID0gcGxhbmUt PmJvcmRlcjsKKyAgICAgICAgZm9yIChpbnQgaSA9IHBsYW5lLT5oX2Jsb2Nrc19zYWZlOyBpID4g MDsgaS0tKSB7CisgICAgICAgICAgICBzZXRfYm9yZGVyKHB0cik7CisgICAgICAgICAgICBwdHIr KzsKKyAgICAgICAgfQorCisgICAgICAgIHB0ciA9IHBsYW5lX2RhdGE7CisgICAgICAgIGZvciAo aW50IGkgPSBwbGFuZS0+aF9ibG9ja3Nfc2FmZTsgaSA+IDA7IGktLSkgeworICAgICAgICAgICAg cHRyLS07CisgICAgICAgICAgICBzZXRfYm9yZGVyKHB0cik7CisgICAgICAgIH0KKworICAgICAg ICAvLyBzZXQgdmVydGljYWwgYm9yZGVycworICAgICAgICBwdHIgPSBwbGFuZS0+Ym9yZGVyICsg c3RyaWRlOworICAgICAgICBmb3IgKGludCBpID0gcGxhbmUtPnZfYmxvY2tzX3NhZmUgLSAyOyBp ID4gMDsgaS0tKSB7CisgICAgICAgICAgICBzZXRfYm9yZGVyKHB0cik7CisgICAgICAgICAgICBw dHIgKz0gc3RyaWRlOworICAgICAgICB9CisKKyAgICAgICAgcHRyID0gcGxhbmUtPmJvcmRlciAr IHN0cmlkZSAqIDIgLSAxOworICAgICAgICBmb3IgKGludCBpID0gcGxhbmUtPnZfYmxvY2tzX3Nh ZmUgLSAyOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICBzZXRfYm9yZGVyKHB0cik7CisgICAg ICAgICAgICBwdHIgKz0gc3RyaWRlOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdWlu dDMyX3QgaHZxbTRfYnVmZnNpemUoU2VxT2JqICpzZXFvYmopCit7CisgICAgdWludDMyX3QgaF9i bG9ja3MgPSBzZXFvYmotPndpZHRoIC8gNDsKKyAgICB1aW50MzJfdCB2X2Jsb2NrcyA9IHNlcW9i ai0+aGVpZ2h0IC8gNDsKKyAgICB1aW50MzJfdCB5X2Jsb2NrcyA9IChoX2Jsb2NrcyArIDIpICog KHZfYmxvY2tzICsgMik7CisKKyAgICB1aW50MzJfdCB1dl9oX2Jsb2NrcyA9IHNlcW9iai0+aF9z YW1wID09IDIgPyBoX2Jsb2NrcyAvIDIgOiBoX2Jsb2NrczsKKyAgICB1aW50MzJfdCB1dl92X2Js b2NrcyA9IHNlcW9iai0+dl9zYW1wID09IDIgPyB2X2Jsb2NrcyAvIDIgOiB2X2Jsb2NrczsKKyAg ICB1aW50MzJfdCB1dl9ibG9ja3MgPSAodXZfaF9ibG9ja3MgKyAyKSAqICh1dl92X2Jsb2NrcyAr IDIpOworCisgICAgdWludDMyX3QgdG90YWwgPSAoeV9ibG9ja3MgKyB1dl9ibG9ja3MgKiAyKSAq IHNpemVvZih1aW50MTZfdCk7CisKKyAgICByZXR1cm4gdG90YWw7Cit9CisKK3N0YXRpYyBhdl9j b2xkIGludCBodnFtNF9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBzdGF0aWMg QVZPbmNlIGluaXRfc3RhdGljX29uY2UgPSBBVl9PTkNFX0lOSVQ7CisgICAgSFZRTTRDb250ZXh0 ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZN VF9ZVVY0MjBQOworCisgICAgYXZjdHgtPmNvZGVkX3dpZHRoICA9IEZGQUxJR04oYXZjdHgtPndp ZHRoICwgOCkgKyAzMjsKKyAgICBhdmN0eC0+Y29kZWRfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+ aGVpZ2h0LCA4KSArIDMyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAg ICAgICAgcy0+ZnJhbWVbaV0gPSBhdl9mcmFtZV9hbGxvYygpOworICAgICAgICBpZiAoIXMtPmZy YW1lW2ldKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAg ICBmZl90aHJlYWRfb25jZSgmaW5pdF9zdGF0aWNfb25jZSwgaHZxbTRfaW5pdF9zdGF0aWMpOwor CisgICAgcy0+c2Vxb2JqLndpZHRoID0gYXZjdHgtPndpZHRoOworICAgIHMtPnNlcW9iai5oZWln aHQgPSBhdmN0eC0+aGVpZ2h0OworICAgIHMtPnNlcW9iai5oX3NhbXAgPSAyOworICAgIHMtPnNl cW9iai52X3NhbXAgPSAyOworCisgICAgcy0+YnVmZmVyID0gYXZfY2FsbG9jKGh2cW00X2J1ZmZz aXplKCZzLT5zZXFvYmopLCAxKTsKKyAgICBpZiAoIXMtPmJ1ZmZlcikKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKKworICAgIHNldF9idWZmZXIoJnMtPnNlcW9iaiwgJnMtPnN0YXRl LCBzLT5idWZmZXIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IEh1ZmZU cmVlIHsKKyAgICBpbnQgbmJfY29kZXM7CisgICAgaW50IG1heF9iaXRzOworICAgIHVpbnQ4X3Qg Yml0c1syNTZdOworICAgIGludDE2X3Qgc3ltYm9sc1syNTZdOworfSBIdWZmVHJlZTsKKworc3Rh dGljIGludCByZWFkX3RyZWVzKGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgSHVm ZlRyZWUgKmh1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsCisg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgdHJlZV9zaWduZWQsCisgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgdHJlZV9zY2FsZSkKK3sKKyAgICBpbnQgcmV0 OworCisgICAgaWYgKGdldF9iaXRzMShnYikgPT0gMCkgeyAvLyBsZWFmIG5vZGUKKyAgICAgICAg aW50IGJ5dGUgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgIGludDE2X3Qgc3ltYm9sID0gdHJl ZV9zaWduZWQgPyAoaW50OF90KWJ5dGUgOiBieXRlOworCisgICAgICAgIHN5bWJvbCAqPSAxIDw8 IHRyZWVfc2NhbGU7CisgICAgICAgIGlmIChodWZmLT5uYl9jb2RlcyA+PSBGRl9BUlJBWV9FTEVN UyhodWZmLT5iaXRzKSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgICAgICBodWZmLT5iaXRzW2h1ZmYtPm5iX2NvZGVzXSAgICA9IGxlbmd0aDsKKyAgICAgICAg aHVmZi0+c3ltYm9sc1todWZmLT5uYl9jb2Rlc10gPSBzeW1ib2w7CisgICAgICAgIGh1ZmYtPm1h eF9iaXRzID0gRkZNQVgoaHVmZi0+bWF4X2JpdHMsIGxlbmd0aCk7CisgICAgICAgIGh1ZmYtPm5i X2NvZGVzKys7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7IC8vIHJlY3Vyc2UKKyAg ICAgICAgaWYgKGxlbmd0aCA9PSAxNikKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgICAgICByZXQgPSByZWFkX3RyZWVzKGxlbmd0aCArIDEsIGh1ZmYsIGdiLCB0 cmVlX3NpZ25lZCwgdHJlZV9zY2FsZSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAg ICAgcmV0dXJuIHJldDsKKyAgICAgICAgcmV0dXJuIHJlYWRfdHJlZXMobGVuZ3RoICsgMSwgaHVm ZiwgZ2IsIHRyZWVfc2lnbmVkLCB0cmVlX3NjYWxlKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQg YnVpbGRfaHVmZihHQkNXaXRoVkxDICpidWYsIGludCBpc19zaWduZWQsIHVpbnQzMl90IHNjYWxl KQoreworICAgIGNvbnN0IGludCB0cmVlX3NpZ25lZCA9IGlzX3NpZ25lZDsKKyAgICBjb25zdCB1 aW50MzJfdCB0cmVlX3NjYWxlID0gc2NhbGU7CisgICAgSHVmZlRyZWUgaHVmZjsKKyAgICBWTEMg KnZsYyA9IGJ1Zi0+dmxjOworICAgIGludCByZXQ7CisKKyAgICBodWZmLm5iX2NvZGVzID0gMDsK KyAgICBodWZmLm1heF9iaXRzID0gMDsKKworICAgIGZmX2ZyZWVfdmxjKHZsYyk7CisgICAgcmV0 ID0gcmVhZF90cmVlcygwLCAmaHVmZiwgJmJ1Zi0+Z2IsIHRyZWVfc2lnbmVkLCB0cmVlX3NjYWxl KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBm Zl9pbml0X3ZsY19mcm9tX2xlbmd0aHModmxjLCBodWZmLm1heF9iaXRzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaHVmZi5uYl9jb2RlcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGh1ZmYuYml0cywgMSwgaHVmZi5zeW1ib2xzLCAyLCAyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTlVMTCk7Cit9CisKK3N0YXRp YyBpbnQgZ2V0X2NvZGUoR2V0Qml0Q29udGV4dCAqbmV3X2diLCBHZXRCaXRDb250ZXh0ICpnYiwg aW50IHNraXApCit7CisgICAgR2V0Qml0Q29udGV4dCB0bXBfZ2IgPSAqZ2I7CisgICAgdWludDMy X3QgbmV3X3NpemUsIG9mZnNldCA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICBpbnQgcmV0 OworCisgICAgaWYgKG9mZnNldCA+PSBJTlQzMl9NQVggLSBza2lwIC0gNCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBpZiAoKGdldF9iaXRzX2xlZnQoZ2IpID4+ IDMpIDwgb2Zmc2V0KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBv ZmZzZXQgKz0gc2tpcDsKKworICAgIHJldCA9IGluaXRfZ2V0X2JpdHM4KCZ0bXBfZ2IsIGdiLT5i dWZmZXIgKyBvZmZzZXQsIChnYi0+c2l6ZV9pbl9iaXRzID4+IDMpIC0gb2Zmc2V0KTsKKyAgICBp ZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIG5ld19zaXplID0gZ2V0X2Jp dHNfbG9uZygmdG1wX2diLCAzMik7CisKKyAgICBpZiAobmV3X3NpemUgPj0gSU5UMzJfTUFYIC0g NCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBpZiAoKGdldF9i aXRzX2xlZnQoJnRtcF9nYikgPj4gMykgPCBuZXdfc2l6ZSkKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICByZXR1cm4gaW5pdF9nZXRfYml0czgobmV3X2diLCB0bXBf Z2IuYnVmZmVyICsgNCwgbmV3X3NpemUpOworfQorCitzdGF0aWMgaW50IGRlY29kZV9odWZmKEdC Q1dpdGhWTEMgKmJ1ZikKK3sKKyAgICBhdl9hc3NlcnQwKCZidWYtPmdiKTsKKyAgICBpZiAoZ2V0 X2JpdHNfbGVmdCgmYnVmLT5nYikgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFi dWYtPnZsYy0+Yml0cykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgYXZfYXNzZXJ0MChidWYtPnZs Yy0+dGFibGUpOworICAgIHJldHVybiBnZXRfdmxjMigmYnVmLT5nYiwgYnVmLT52bGMtPnRhYmxl LCBidWYtPnZsYy0+Yml0cywgMyk7Cit9CisKK3N0YXRpYyBpbnQgaWZyYW1lX2Jhc2lzX251bWRl YyhWaWRlb1N0YXRlICpzdGF0ZSkKK3sKKyAgICBCbG9ja0RhdGEgKmx1bWFfZHN0ID0gc3RhdGUt PnBsYW5lc1tMVU1BX0lEWF0ucGF5bG9hZDsKKyAgICBjb25zdCB1aW50MzJfdCBsdW1hX2hfYmxv Y2tzID0gc3RhdGUtPnBsYW5lc1tMVU1BX0lEWF0uaF9ibG9ja3M7CisgICAgY29uc3QgdWludDMy X3QgbHVtYV92X2Jsb2NrcyA9IHN0YXRlLT5wbGFuZXNbTFVNQV9JRFhdLnZfYmxvY2tzOworICAg IGNvbnN0IHVpbnQzMl90IGNocm9tYV9oX2Jsb2NrcyA9IHN0YXRlLT5wbGFuZXNbQ0hST01BX0lE WF0uaF9ibG9ja3M7CisgICAgY29uc3QgdWludDMyX3QgY2hyb21hX3ZfYmxvY2tzID0gc3RhdGUt PnBsYW5lc1tDSFJPTUFfSURYXS52X2Jsb2NrczsKKyAgICBCbG9ja0RhdGEgKnVfZHN0ID0gc3Rh dGUtPnBsYW5lc1tDSFJPTUFfSURYXS5wYXlsb2FkOworICAgIEJsb2NrRGF0YSAqdl9kc3QgPSBz dGF0ZS0+cGxhbmVzW0NIUk9NQV9JRFgrMV0ucGF5bG9hZDsKKyAgICBpbnQgcmxlID0gMDsKKwor ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbHVtYV92X2Jsb2NrczsgeSsrKSB7CisgICAgICAgIGZv ciAoaW50IHggPSAwOyB4IDwgbHVtYV9oX2Jsb2NrczsgeCsrKSB7CisgICAgICAgICAgICBpZiAo cmxlKSB7CisgICAgICAgICAgICAgICAgbHVtYV9kc3QtPnR5cGUgPSAwOworICAgICAgICAgICAg ICAgIHJsZS0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgbnVt ID0gZGVjb2RlX2h1ZmYoJnN0YXRlLT5iYXNpc19udW1bTFVNQV9JRFhdKTsKKworICAgICAgICAg ICAgICAgIGlmIChudW0gPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICBpZiAobnVtID09IDApCisgICAgICAgICAgICAg ICAgICAgIHJsZSA9IGRlY29kZV9odWZmKCZzdGF0ZS0+YmFzaXNfbnVtX3J1bltMVU1BX0lEWF0p OworICAgICAgICAgICAgICAgIGlmIChybGUgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICBsdW1hX2RzdC0+dHlwZSA9 IG51bSAmIDB4RkY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsdW1hX2RzdCsrOworICAg ICAgICB9CisgICAgICAgIC8vIHNraXAgYm9yZGVycworICAgICAgICBsdW1hX2RzdCArPSAyOwor ICAgIH0KKworICAgIHJsZSA9IDA7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjaHJvbWFfdl9i bG9ja3M7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNocm9tYV9oX2Jsb2Nr czsgeCsrKSB7CisgICAgICAgICAgICBpZiAocmxlKSB7CisgICAgICAgICAgICAgICAgdV9kc3Qt PnR5cGUgPSAwOworICAgICAgICAgICAgICAgIHZfZHN0LT50eXBlID0gMDsKKyAgICAgICAgICAg ICAgICBybGUtLTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IG51 bSA9IGRlY29kZV9odWZmKCZzdGF0ZS0+YmFzaXNfbnVtW0NIUk9NQV9JRFhdKTsKKworICAgICAg ICAgICAgICAgIGlmIChudW0gPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICBpZiAobnVtID09IDApCisgICAgICAgICAg ICAgICAgICAgIHJsZSA9IGRlY29kZV9odWZmKCZzdGF0ZS0+YmFzaXNfbnVtX3J1bltDSFJPTUFf SURYXSk7CisgICAgICAgICAgICAgICAgaWYgKHJsZSA8IDApCisgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgIHVfZHN0LT50eXBl ID0gKG51bSA+PiAwKSAmIDB4RjsKKyAgICAgICAgICAgICAgICB2X2RzdC0+dHlwZSA9IChudW0g Pj4gNCkgJiAweEY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1X2RzdCsrOworICAgICAg ICAgICAgdl9kc3QrKzsKKyAgICAgICAgfQorICAgICAgICB1X2RzdCArPSAyOworICAgICAgICB2 X2RzdCArPSAyOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29k ZV9zb3ZmX3N5bShHQkNXaXRoVkxDICpidWYsIGludDMyX3QgbWluLCBpbnQzMl90IG1heCkKK3sK KyAgICBpbnQgc3VtID0gMCwgdmFsdWU7CisKKyAgICBkbyB7CisgICAgICAgIHZhbHVlID0gZGVj b2RlX2h1ZmYoYnVmKTsKKyAgICAgICAgc3VtICs9IHZhbHVlOworICAgIH0gd2hpbGUgKHZhbHVl IDw9IG1pbiB8fCB2YWx1ZSA+PSBtYXgpOworCisgICAgcmV0dXJuIHN1bTsKK30KKworc3RhdGlj IGludCBkZWNvZGVfdW92Zl9zeW0oR0JDV2l0aFZMQyAqYnVmLCBpbnQgbWF4KQoreworICAgIGlu dCBzdW0gPSAwLCB2YWx1ZTsKKworICAgIGRvIHsKKyAgICAgICAgdmFsdWUgPSBkZWNvZGVfaHVm ZihidWYpOworICAgICAgICBzdW0gKz0gdmFsdWU7CisgICAgfSB3aGlsZSAodmFsdWUgPj0gbWF4 KTsKKworICAgIHJldHVybiBzdW07Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RlbHRhX2RjKFZpZGVv U3RhdGUgKnN0YXRlLCB1aW50MzJfdCBwbGFuZV9pZHgsIGludCAqcmxlKQoreworICAgIGlmIChy bGVbMF0gPT0gMCkgeworICAgICAgICBpbnQgZGVsdGEgPSBkZWNvZGVfc292Zl9zeW0oJnN0YXRl LT5kY192YWx1ZXNbcGxhbmVfaWR4XSwgc3RhdGUtPmRjX21pbiwgc3RhdGUtPmRjX21heCk7CisK KyAgICAgICAgaWYgKGRlbHRhID09IDApIC8vIHN1Y2Nlc3NpdmUgemVyb2VzIGFyZSBydW4tbGVu Z3RoIGVuY29kZWQKKyAgICAgICAgICAgIHJsZVswXSA9IGRlY29kZV9odWZmKCZzdGF0ZS0+ZGNf cmxlW3BsYW5lX2lkeF0pOworICAgICAgICBpZiAocmxlWzBdIDwgMCkKKyAgICAgICAgICAgIHJl dHVybiAwOworICAgICAgICByZXR1cm4gZGVsdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmxl WzBdLS07CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIGludCBpZnJhbWVf ZGNfZGVjb2RlKFZpZGVvU3RhdGUgKnN0YXRlKQoreworICAgIGZvciAoaW50IHBsYW5lX2lkeCA9 IDA7IHBsYW5lX2lkeCA8IFBMQU5FX0NPVU5UOyBwbGFuZV9pZHgrKykgeworICAgICAgICBIVlFQ bGFuZURlc2MgKnBsYW5lID0gJnN0YXRlLT5wbGFuZXNbcGxhbmVfaWR4XTsKKyAgICAgICAgY29u c3QgdWludDMyX3Qgdl9ibG9ja3MgPSBwbGFuZS0+dl9ibG9ja3M7CisgICAgICAgIEJsb2NrRGF0 YSAqY3VyciA9IHBsYW5lLT5wYXlsb2FkOworICAgICAgICBpbnQgcmxlID0gMDsKKworICAgICAg ICBmb3IgKGludCB5ID0gMDsgeSA8IHZfYmxvY2tzOyB5KyspIHsKKyAgICAgICAgICAgIC8vIHBv aW50ZXIgdG8gcHJldmlvdXMgbGluZQorICAgICAgICAgICAgQmxvY2tEYXRhIGNvbnN0ICpwcmV2 ID0gY3VyciAtIHBsYW5lLT5oX2Jsb2Nrc19zYWZlOworICAgICAgICAgICAgLy8gZmlyc3QgcHJl ZGljdGlvbiBvbiBhIGxpbmUgaXMgb25seSB0aGUgcHJldmlvdXMgbGluZSdzIHZhbHVlCisgICAg ICAgICAgICB1aW50OF90IHZhbHVlID0gcHJldi0+dmFsdWU7CisgICAgICAgICAgICBmb3IgKGlu dCB4ID0gMDsgeCA8IHBsYW5lLT5oX2Jsb2NrczsgeCsrKSB7CisgICAgICAgICAgICAgICAgdmFs dWUgKz0gZ2V0X2RlbHRhX2RjKHN0YXRlLCBwbGFuZV9pZHgsICZybGUpOworCisgICAgICAgICAg ICAgICAgaWYgKHJsZSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworCisgICAgICAgICAgICAgICAgY3Vyci0+dmFsdWUgPSB2YWx1ZTsKKyAgICAg ICAgICAgICAgICBjdXJyKys7CisgICAgICAgICAgICAgICAgcHJldisrOworICAgICAgICAgICAg ICAgIC8vIG5leHQgcHJlZGljdGlvbiBvbiB0aGlzIGxpbmUgaXMgdGhlIG1lYW4gb2YgbGVmdCAo Y3VycmVudCkgYW5kIHRvcCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAvLyArLS0tKy0tLSsKKyAg ICAgICAgICAgICAgICAvLyB8ICAgfCBUIHwKKyAgICAgICAgICAgICAgICAvLyArLS0tKy0tLSsK KyAgICAgICAgICAgICAgICAvLyB8IEwgfCBQIHwKKyAgICAgICAgICAgICAgICAvLyArLS0tKy0t LSsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSArIHByZXYtPnZhbHVlICsgMSkgLyAy OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc2tpcCByaWdodCBib3JkZXIgb2YgdGhp cyBsaW5lIGFuZCBsZWZ0IGJvcmRlciBvZiBuZXh0IGxpbmUKKyAgICAgICAgICAgIGN1cnIgKz0g MjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBt YWtlX25lc3QoVmlkZW9TdGF0ZSAqc3RhdGUsIHVpbnQxNl90IG5lc3RfeCwgdWludDE2X3QgbmVz dF95KQoreworICAgIGludDMyX3Qgdl9lbXB0eSwgaF9lbXB0eSwgdl9uZXN0X2Jsb2NrcywgaF9u ZXN0X2Jsb2Nrcywgdl9taXJyb3IsIGhfbWlycm9yOworICAgIEhWUVBsYW5lRGVzYyAqeV9wbGFu ZSA9ICZzdGF0ZS0+cGxhbmVzWzBdOworICAgIEJsb2NrRGF0YSBjb25zdCAqcHRyID0geV9wbGFu ZS0+cGF5bG9hZCArIHlfcGxhbmUtPmhfYmxvY2tzX3NhZmUgKiBuZXN0X3kgKyBuZXN0X3g7Cisg ICAgdWludDhfdCBjb25zdCAqbmVzdDI7CisgICAgdWludDhfdCAqbmVzdDsKKworICAgIGlmICh5 X3BsYW5lLT5oX2Jsb2NrcyA8IHN0YXRlLT5oX25lc3Rfc2l6ZSkgeworICAgICAgICAvLyBzcGVj aWFsIGNhc2UgaWYgdGhlIHZpZGVvIGlzIGxlc3MgdGhhbiAyODAgcGl4ZWxzIHdpZGUgKGFzc3Vt aW5nIGxhbmRzY2FwZSBtb2RlKQorICAgICAgICBoX25lc3RfYmxvY2tzID0geV9wbGFuZS0+aF9i bG9ja3M7CisgICAgICAgIGhfbWlycm9yID0gc3RhdGUtPmhfbmVzdF9zaXplIC0geV9wbGFuZS0+ aF9ibG9ja3M7CisgICAgICAgIGlmIChoX21pcnJvciA+IHlfcGxhbmUtPmhfYmxvY2tzKQorICAg ICAgICAgICAgaF9taXJyb3IgPSB5X3BsYW5lLT5oX2Jsb2NrczsKKyAgICAgICAgaF9lbXB0eSA9 IHN0YXRlLT5oX25lc3Rfc2l6ZSAtIChoX25lc3RfYmxvY2tzICsgaF9taXJyb3IpOworICAgIH0g ZWxzZSB7CisgICAgICAgIGhfbmVzdF9ibG9ja3MgPSBzdGF0ZS0+aF9uZXN0X3NpemU7CisgICAg ICAgIGhfZW1wdHkgPSAwOworICAgICAgICBoX21pcnJvciA9IDA7CisgICAgfQorCisgICAgaWYg KHlfcGxhbmUtPnZfYmxvY2tzIDwgc3RhdGUtPnZfbmVzdF9zaXplKSB7CisgICAgICAgIC8vIHNw ZWNpYWwgY2FzZSBpZiB0aGUgdmlkZW8gaXMgbGVzcyB0aGFuIDE1MiBwaXhlbHMgaGlnaAorICAg ICAgICB2X25lc3RfYmxvY2tzID0geV9wbGFuZS0+dl9ibG9ja3M7CisgICAgICAgIHZfbWlycm9y ID0gc3RhdGUtPnZfbmVzdF9zaXplIC0geV9wbGFuZS0+dl9ibG9ja3M7CisgICAgICAgIGlmICh2 X21pcnJvciA+IHlfcGxhbmUtPnZfYmxvY2tzKQorICAgICAgICAgICAgdl9taXJyb3IgPSB5X3Bs YW5lLT52X2Jsb2NrczsKKyAgICAgICAgdl9lbXB0eSA9IHN0YXRlLT52X25lc3Rfc2l6ZSAtICh2 X25lc3RfYmxvY2tzICsgdl9taXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZfbmVzdF9i bG9ja3MgPSBzdGF0ZS0+dl9uZXN0X3NpemU7CisgICAgICAgIHZfZW1wdHkgPSAwOworICAgICAg ICB2X21pcnJvciA9IDA7CisgICAgfQorCisgICAgbmVzdCA9IHN0YXRlLT5uZXN0X2RhdGE7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2X25lc3RfYmxvY2tzOyBpKyspIHsKKyAgICAgICAgQmxv Y2tEYXRhIGNvbnN0ICpwID0gcHRyOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhfbmVz dF9ibG9ja3M7IGorKykgeworICAgICAgICAgICAgbmVzdFswXSA9IChwLT52YWx1ZSA+PiA0KSAm IDB4RjsKKyAgICAgICAgICAgIG5lc3QrKzsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQor ICAgICAgICAvLyBpZiB0aGUgdmlkZW8gaXMgdG9vIHNtYWxsLCBtaXJyb3IgaXQKKyAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCBoX21pcnJvcjsgaisrKSB7CisgICAgICAgICAgICBwLS07Cisg ICAgICAgICAgICBuZXN0WzBdID0gKHAtPnZhbHVlID4+IDQpICYgMHhGOworICAgICAgICAgICAg bmVzdCsrOworICAgICAgICB9CisgICAgICAgIC8vIGlmIGl0IGlzIHN0aWxsIHRvbyBzbWFsbCwg bnVsbCBvdXQgdGhlIHJlc3QKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoX2VtcHR5OyBq KyspIHsKKyAgICAgICAgICAgIG5lc3RbMF0gPSAwOworICAgICAgICAgICAgbmVzdCsrOworICAg ICAgICB9CisgICAgICAgIHB0ciArPSB5X3BsYW5lLT5oX2Jsb2Nrc19zYWZlOworICAgIH0KKwor ICAgIC8vIGhhbmRsZSB2ZXJ0aWNhbCBtaXJyb3JpbmcKKyAgICBuZXN0MiA9IG5lc3QgLSBzdGF0 ZS0+aF9uZXN0X3NpemU7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2X21pcnJvcjsgaSsrKSB7 CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RhdGUtPmhfbmVzdF9zaXplOyBqKyspIHsK KyAgICAgICAgICAgIG5lc3RbMF0gPSBuZXN0MltqXTsKKyAgICAgICAgICAgIG5lc3QrKzsKKyAg ICAgICAgfQorICAgICAgICBuZXN0MiAtPSBzdGF0ZS0+aF9uZXN0X3NpemU7CisgICAgfQorCisg ICAgLy8gYW5kIHZlcnRpY2FsIG51bGxpbmcKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHZfZW1w dHk7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0YXRlLT5oX25lc3Rfc2l6 ZTsgaisrKSB7CisgICAgICAgICAgICBuZXN0WzBdID0gMDsKKyAgICAgICAgICAgIG5lc3QrKzsK KyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHVpbnQ4X3Qgc2F0X21lYW44KHVpbnQzMl90 IHUpCit7CisgICAgcmV0dXJuIGF2X2NsaXBfdWludDgoKHUgKyA0KSAvIDgpOworfQorCitzdGF0 aWMgdm9pZCB3ZWlnaHRfaW1fYmxvY2sodWludDhfdCAqZHN0LCBwdHJkaWZmX3Qgc3RyaWRlLCB1 aW50OF90IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdG9wLCB1 aW50OF90IGJvdHRvbSwgdWludDhfdCBsZWZ0LCB1aW50OF90IHJpZ2h0KQoreworICAgIC8qCisg ICAgKy0tLSstLS0rLS0tKworICAgIHwgICB8IFQgfCAgIHwKKyAgICArLS0tKy0tLSstLS0rCisg ICAgfCBMIHwgRCB8IFIgfAorICAgICstLS0rLS0tKy0tLSsKKyAgICB8ICAgfCBCIHwgICB8Cisg ICAgKy0tLSstLS0rLS0tKworICAgICAqLworICAgIGludDMyX3QgdG1iID0gdG9wIC0gYm90dG9t OworICAgIGludDMyX3QgbG1yID0gbGVmdCAtIHJpZ2h0OworICAgIGludDMyX3QgdnBoID0gdG1i ICsgbG1yOworICAgIGludDMyX3Qgdm1oID0gdG1iIC0gbG1yOworCisgICAgaW50MzJfdCB2MiA9 IHZhbHVlICogMjsKKyAgICBpbnQzMl90IHY4ID0gdmFsdWUgKiA4OworCisgICAgaW50MzJfdCB0 cGwgPSAodG9wICsgbGVmdCkgLSB2MjsKKyAgICBpbnQzMl90IHRwciA9ICh0b3AgKyByaWdodCkg LSB2MjsKKyAgICBpbnQzMl90IGJwciA9IChib3R0b20gKyByaWdodCkgLSB2MjsKKyAgICBpbnQz Ml90IGJwbCA9IChib3R0b20gKyBsZWZ0KSAtIHYyOworCisgICAgaW50MzJfdCB0bWwgPSB0b3Ag LSBsZWZ0OworICAgIGludDMyX3QgdG1yID0gdG9wIC0gcmlnaHQ7CisgICAgaW50MzJfdCBibXIg PSBib3R0b20gLSByaWdodDsKKyAgICBpbnQzMl90IGJtbCA9IGJvdHRvbSAtIGxlZnQ7CisKKyAg ICAvLyBWOgorICAgIC8vIDYgIDggIDggNgorICAgIC8vIDggMTAgMTAgOAorICAgIC8vIDggMTAg MTAgOAorICAgIC8vIDYgIDggIDggNgorICAgIC8vCisgICAgLy8gVDoKKyAgICAvLyAgMiAgMiAg MiAgMgorICAgIC8vICAwICAwICAwICAwCisgICAgLy8gLTEgLTEgLTEgLTEKKyAgICAvLyAtMSAt MSAtMSAtMQorICAgIC8vCisgICAgLy8gQi9ML1I6IGxpa2UgVCBidXQgcm90YXRlZCBhY2NvcmRp bmdseQorCisgICAgLy8gKDYqViArIDIqVCAtIEIgKyAyKkwgLSAgIFIgKyA0KSAvIDgKKyAgICAv LyAoOCpWICsgMipUIC0gQiAgICAgICAtICAgUiArIDQpIC8gOAorICAgIC8vICg4KlYgKyAyKlQg LSBCIC0gICBMICAgICAgICsgNCkgLyA4CisgICAgLy8gKDYqViArIDIqVCAtIEIgLSAgIEwgKyAy KlIgKyA0KSAvIDgKKworICAgIGRzdFswXSA9IHNhdF9tZWFuOCh2OCArIHZwaCArIHRwbCk7Cisg ICAgZHN0WzFdID0gc2F0X21lYW44KHY4ICsgdnBoICsgdG1sKTsKKyAgICBkc3RbMl0gPSBzYXRf bWVhbjgodjggKyB2bWggKyB0bXIpOworICAgIGRzdFszXSA9IHNhdF9tZWFuOCh2OCArIHZtaCAr IHRwcik7CisKKyAgICBkc3QgKz0gc3RyaWRlOworCisgICAgLy8gKCA4KlYgLSBCICsgMipMIC0g ICBSICsgNCkgLyA4CisgICAgLy8gKDEwKlYgLSBCICAgICAgIC0gICBSICsgNCkgLyA4CisgICAg Ly8gKDEwKlYgLSBCIC0gICBMICAgICAgICsgNCkgLyA4CisgICAgLy8gKCA4KlYgLSBCIC0gICBM ICsgMipSICsgNCkgLyA4CisKKyAgICBkc3RbMF0gPSBzYXRfbWVhbjgodjggKyB2cGggLSB0bWwp OworICAgIGRzdFsxXSA9IHNhdF9tZWFuOCh2OCAtIGJwcik7CisgICAgZHN0WzJdID0gc2F0X21l YW44KHY4IC0gYnBsKTsKKyAgICBkc3RbM10gPSBzYXRfbWVhbjgodjggKyB2bWggLSB0bXIpOwor CisgICAgZHN0ICs9IHN0cmlkZTsKKworICAgIC8vICggOCpWIC0gVCArIDIqTCAtIFIgKyA0KSAv IDgKKyAgICAvLyAoMTAqViAtIFQgICAgICAgLSBSICsgNCkgLyA4CisgICAgLy8gKDEwKlYgLSBU IC0gTAorCisgICAgZHN0WzBdID0gc2F0X21lYW44KHY4IC0gdm1oIC0gYm1sKTsKKyAgICBkc3Rb MV0gPSBzYXRfbWVhbjgodjggLSB0cHIpOworICAgIGRzdFsyXSA9IHNhdF9tZWFuOCh2OCAtIHRw bCk7CisgICAgZHN0WzNdID0gc2F0X21lYW44KHY4IC0gdnBoIC0gYm1yKTsKKworICAgIGRzdCAr PSBzdHJpZGU7CisKKyAgICBkc3RbMF0gPSBzYXRfbWVhbjgodjggLSB2bWggKyBicGwpOworICAg IGRzdFsxXSA9IHNhdF9tZWFuOCh2OCAtIHZtaCArIGJtbCk7CisgICAgZHN0WzJdID0gc2F0X21l YW44KHY4IC0gdnBoICsgYm1yKTsKKyAgICBkc3RbM10gPSBzYXRfbWVhbjgodjggLSB2cGggKyBi cHIpOworfQorCitzdGF0aWMgdm9pZCBkY19ibG9jayh1aW50OF90ICpkc3QsIHB0cmRpZmZfdCBz dHJpZGUsIHVpbnQ4X3QgdmFsdWUpCit7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCA0OyB5Kysp IHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICBkc3Rb eF0gPSB2YWx1ZTsKKyAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyBp bnQgZ2V0X2FvdF9iYXNpcyhWaWRlb1N0YXRlICpzdGF0ZSwgdWludDhfdCBiYXNpc19vdXRbNF1b NF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqc3VtLCB1aW50OF90IGNvbnN0 ICpuZXN0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IG5lc3Rfc3Ry aWRlLCB1aW50MzJfdCBwbGFuZV9pZHgpCit7CisgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmc3Rh dGUtPmZpeHZsW3BsYW5lX2lkeF07CisgICAgdWludDE2X3QgYml0cyA9IGdldF9iaXRzKGdiLCAx Nik7CisgICAgcHRyZGlmZl90IHhfc3RyaWRlLCB5X3N0cmlkZTsKKyAgICB1aW50MzJfdCBvZmZz ZXQ3MCA9IGJpdHMgJiAweDNGOworICAgIHVpbnQzMl90IG9mZnNldDM4ID0gKGJpdHMgPj4gNikg JiAweDFGOworICAgIHB0cmRpZmZfdCBzdHJpZGU3MCA9IChiaXRzID4+IDExKSAmIDE7CisgICAg cHRyZGlmZl90IHN0cmlkZTM4ID0gKGJpdHMgPj4gMTIpICYgMTsKKyAgICBpbnQzMl90IGludmVy c2UsIG9mZnNldDsKKyAgICB1aW50OF90IG1pbiwgbWF4OworCisgICAgaWYgKHN0YXRlLT5pc19s YW5kc2NhcGUpIHsKKyAgICAgICAgbmVzdF9kYXRhICs9IG5lc3Rfc3RyaWRlICogb2Zmc2V0Mzgg KyBvZmZzZXQ3MDsKKyAgICAgICAgeF9zdHJpZGUgPSAxIDw8IHN0cmlkZTcwOworICAgICAgICB5 X3N0cmlkZSA9IG5lc3Rfc3RyaWRlIDw8IHN0cmlkZTM4OworICAgIH0gZWxzZSB7CisgICAgICAg IG5lc3RfZGF0YSArPSBuZXN0X3N0cmlkZSAqIG9mZnNldDcwICsgb2Zmc2V0Mzg7CisgICAgICAg IHhfc3RyaWRlID0gMSA8PCBzdHJpZGUzODsKKyAgICAgICAgeV9zdHJpZGUgPSBuZXN0X3N0cmlk ZSA8PCBzdHJpZGU3MDsKKyAgICB9CisKKyAgICAvLyBjb3B5IGJhc2lzIHZlY3RvciBmcm9tIHRo ZSBuZXN0CisgICAgbWluID0gbmVzdF9kYXRhWzBdOworICAgIG1heCA9IG5lc3RfZGF0YVswXTsK KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IDQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0g MDsgeCA8IDQ7IHgrKykgeworICAgICAgICAgICAgdWludDhfdCBuZXN0X3ZhbHVlID0gbmVzdF9k YXRhW3kgKiB5X3N0cmlkZSArIHggKiB4X3N0cmlkZV07CisgICAgICAgICAgICBiYXNpc19vdXRb eV1beF0gPSBuZXN0X3ZhbHVlOworICAgICAgICAgICAgbWluID0gbmVzdF92YWx1ZSA8IG1pbiA/ IG5lc3RfdmFsdWUgOiBtaW47CisgICAgICAgICAgICBtYXggPSBuZXN0X3ZhbHVlID4gbWF4ID8g bmVzdF92YWx1ZSA6IG1heDsKKyAgICAgICAgfQorICAgIH0KKyAgICBhdl9hc3NlcnQwKHBsYW5l X2lkeCA8IDMpOworICAgIHN1bVswXSArPSBkZWNvZGVfaHVmZigmc3RhdGUtPmJ1ZlRyZWUwW3Bs YW5lX2lkeF0pOworICAgIGludmVyc2UgPSBkaXZfdGFiW21heCAtIG1pbl07CisgICAgaWYgKGJp dHMgJiAweDgwMDApCisgICAgICAgIGludmVyc2UgPSAtaW52ZXJzZTsKKyAgICBvZmZzZXQgPSAo Yml0cyA+PiAxMykgJiAzOworICAgIHJldHVybiAoc3VtWzBdICsgb2Zmc2V0KSAqIGludmVyc2U7 Cit9CisKK3N0YXRpYyBpbnQzMl90IGdldF9hb3Rfc3VtKFZpZGVvU3RhdGUgKnN0YXRlLCBpbnQz Ml90IHJlc3VsdFs0XVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbnVt X2Jhc2VzLCB1aW50OF90IGNvbnN0ICpuZXN0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBwdHJkaWZmX3QgbmVzdF9zdHJpZGUsIHVpbnQzMl90IHBsYW5lX2lkeCkKK3sKKyAgICBp bnQzMl90IHRlbXAsIHN1bSwgbWVhbjsKKyAgICB1aW50OF90IGJhc2lzWzRdWzRdOworCisgICAg Zm9yIChpbnQgeSA9IDA7IHkgPCA0OyB5KyspCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg NDsgeCsrKQorICAgICAgICAgICAgcmVzdWx0W3ldW3hdID0gMDsKKyAgICB0ZW1wID0gMDsKKwor ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbnVtX2Jhc2VzOyBrKyspIHsKKyAgICAgICAgaW50IGZh Y3RvciA9IGdldF9hb3RfYmFzaXMoc3RhdGUsIGJhc2lzLCAmdGVtcCwgbmVzdF9kYXRhLCBuZXN0 X3N0cmlkZSwgcGxhbmVfaWR4KTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCA0OyB5Kysp CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAg ICByZXN1bHRbeV1beF0gKz0gZmFjdG9yICogYmFzaXNbeV1beF07CisgICAgfQorCisgICAgc3Vt ID0gMDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IDQ7IHkrKykKKyAgICAgICAgZm9yIChpbnQg eCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICBzdW0gKz0gcmVzdWx0W3ldW3hdOworICAg IG1lYW4gPSBzdW0gPj4gNDsKKyAgICByZXR1cm4gbWVhbjsKK30KKworc3RhdGljIHZvaWQgcmVh ZF9ibG9jayhWaWRlb1N0YXRlICpzdGF0ZSwgdWludDhfdCAqZHN0LCBwdHJkaWZmX3Qgc3RyaWRl LCB1aW50MzJfdCBwbGFuZV9pZHgpCit7CisgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmc3RhdGUt PmZpeHZsW3BsYW5lX2lkeF07CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IDQ7IHkrKykgewor ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIGRzdFt4XSA9 IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0 YXRpYyB2b2lkIGludHJhX2FvdF9ibG9jayhWaWRlb1N0YXRlICpzdGF0ZSwgdWludDhfdCAqZHN0 LCBwdHJkaWZmX3Qgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg dGFyZ2V0X2F2ZXJhZ2UsIHVpbnQ4X3QgYmxvY2tfdHlwZSwgdWludDMyX3QgcGxhbmVfaWR4KQor eworICAgIGludDMyX3QgcmVzdWx0WzRdWzRdLCBhb3RfYXZlcmFnZSwgZGVsdGE7CisKKyAgICBp ZiAoYmxvY2tfdHlwZSA9PSA2KSB7CisgICAgICAgIHJlYWRfYmxvY2soc3RhdGUsIGRzdCwgc3Ry aWRlLCBwbGFuZV9pZHgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gYmxvY2sg dHlwZXMgMS4uNSBzZXJ2ZSBhcyBudW1iZXIgb2YgYmFzZXMgdG8gdXNlLCA5Li4xNSBhcmUgdW51 c2VkCisgICAgYW90X2F2ZXJhZ2UgPSBnZXRfYW90X3N1bShzdGF0ZSwgcmVzdWx0LCBibG9ja190 eXBlLCBzdGF0ZS0+bmVzdF9kYXRhLCBzdGF0ZS0+aF9uZXN0X3NpemUsIHBsYW5lX2lkeCk7Cisg ICAgZGVsdGEgPSAodGFyZ2V0X2F2ZXJhZ2UgPDwgc3RhdGUtPnVua19zaGlmdCkgLSBhb3RfYXZl cmFnZTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IDQ7IHkrKykgeworICAgICAgICBmb3IgKGlu dCB4ID0gMDsgeCA8IDQ7IHgrKykgeworICAgICAgICAgICAgaW50MzJfdCB2YWx1ZSA9ICgocmVz dWx0W3ldW3hdICsgZGVsdGEpID4+IHN0YXRlLT51bmtfc2hpZnQpOworICAgICAgICAgICAgZHN0 W3hdID0gYXZfY2xpcF91aW50OCh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZHN0ICs9IHN0 cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9pZnJhbWVfYmxvY2soVmlkZW9T dGF0ZSAqc3RhdGUsIHVpbnQ4X3QgKmRzdCwgcHRyZGlmZl90IHN0cmlkZSwgU3RhY2tTdGF0ZSAq c3RhY2tfc3RhdGUpCit7CisgICAgaWYgKHN0YWNrX3N0YXRlLT5jdXJyLnR5cGUgPT0gMCkgewor ICAgICAgICB1aW50OF90IHRvcCA9IHN0YWNrX3N0YXRlLT5saW5lX3ByZXYtPnR5cGUgJiAweDc3 ID8gc3RhY2tfc3RhdGUtPmN1cnIudmFsdWUgOiBzdGFja19zdGF0ZS0+bGluZV9wcmV2LT52YWx1 ZTsKKyAgICAgICAgdWludDhfdCBib3R0b20gPSBzdGFja19zdGF0ZS0+bGluZV9uZXh0LT50eXBl ICYgMHg3NyA/IHN0YWNrX3N0YXRlLT5jdXJyLnZhbHVlIDogc3RhY2tfc3RhdGUtPmxpbmVfbmV4 dC0+dmFsdWU7CisgICAgICAgIHVpbnQ4X3QgcmlnaHQgPSBzdGFja19zdGF0ZS0+bmV4dC50eXBl ICYgMHg3NyA/IHN0YWNrX3N0YXRlLT5jdXJyLnZhbHVlIDogc3RhY2tfc3RhdGUtPm5leHQudmFs dWU7CisgICAgICAgIC8vIHRoZSBsZWZ0IHZhbHVlIGlzIHRyYWNrZWQgbWFudWFsbHksIHRoZSBs b2dpYyBpcyBlcXVpdmFsZW50IHdpdGggdGhlIG90aGVyIHN1cnJvdW5kaW5nIHZhbHVlcworICAg ICAgICB1aW50OF90IGxlZnQgPSBzdGFja19zdGF0ZS0+dmFsdWVfcHJldjsKKworICAgICAgICB3 ZWlnaHRfaW1fYmxvY2soZHN0LCBzdHJpZGUsIHN0YWNrX3N0YXRlLT5jdXJyLnZhbHVlLCB0b3As IGJvdHRvbSwgbGVmdCwgcmlnaHQpOworICAgICAgICBzdGFja19zdGF0ZS0+dmFsdWVfcHJldiA9 IHN0YWNrX3N0YXRlLT5jdXJyLnZhbHVlOworICAgIH0gZWxzZSBpZiAoc3RhY2tfc3RhdGUtPmN1 cnIudHlwZSA9PSA4KSB7CisgICAgICAgIGRjX2Jsb2NrKGRzdCwgc3RyaWRlLCBzdGFja19zdGF0 ZS0+Y3Vyci52YWx1ZSk7CisgICAgICAgIHN0YWNrX3N0YXRlLT52YWx1ZV9wcmV2ID0gc3RhY2tf c3RhdGUtPmN1cnIudmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50cmFfYW90X2Jsb2Nr KHN0YXRlLCBkc3QsIHN0cmlkZSwgc3RhY2tfc3RhdGUtPmN1cnIudmFsdWUsIHN0YWNrX3N0YXRl LT5jdXJyLnR5cGUsIHN0YWNrX3N0YXRlLT5wbGFuZV9pZHgpOworICAgICAgICAvLyBkb24ndCB1 c2UgdGhlIGN1cnJlbnQgREMgdmFsdWUgdG8gcHJlZGljdCB0aGUgbmV4dCBvbmUKKyAgICAgICAg c3RhY2tfc3RhdGUtPnZhbHVlX3ByZXYgPSBzdGFja19zdGF0ZS0+bmV4dC52YWx1ZTsKKyAgICB9 CisgICAgLy8gbmV4dCBibG9jaworICAgIHN0YWNrX3N0YXRlLT5saW5lX3ByZXYrKzsKKyAgICBz dGFja19zdGF0ZS0+bGluZV9uZXh0Kys7Cit9CisKK3N0YXRpYyB2b2lkIGlmcmFtZV9saW5lKFZp ZGVvU3RhdGUgKnN0YXRlLCB1aW50OF90ICpkc3QsIHB0cmRpZmZfdCBzdHJpZGUsIFN0YWNrU3Rh dGUgKnN0YWNrX3N0YXRlLCB1aW50MTZfdCBoX2Jsb2NrcykKK3sKKyAgICBzdGFja19zdGF0ZS0+ bmV4dCA9IHN0YWNrX3N0YXRlLT5saW5lX2N1cnJbMF07CisgICAgc3RhY2tfc3RhdGUtPnZhbHVl X3ByZXYgPSBzdGFja19zdGF0ZS0+bGluZV9jdXJyWzBdLnZhbHVlOworCisgICAgd2hpbGUgKC0t aF9ibG9ja3MgPiAwKSB7CisgICAgICAgIHN0YWNrX3N0YXRlLT5jdXJyID0gc3RhY2tfc3RhdGUt Pm5leHQ7CisgICAgICAgIHN0YWNrX3N0YXRlLT5saW5lX2N1cnIrKzsKKyAgICAgICAgc3RhY2tf c3RhdGUtPm5leHQgPSBzdGFja19zdGF0ZS0+bGluZV9jdXJyWzBdOworICAgICAgICBkZWNvZGVf aWZyYW1lX2Jsb2NrKHN0YXRlLCBkc3QsIHN0cmlkZSwgc3RhY2tfc3RhdGUpOworICAgICAgICAv LyBuZXh0IGJsb2NrIG9uIHNhbWUgbGluZQorICAgICAgICBkc3QgKz0gNDsKKyAgICB9CisKKyAg ICBzdGFja19zdGF0ZS0+Y3VyciA9IHN0YWNrX3N0YXRlLT5uZXh0OworICAgIGRlY29kZV9pZnJh bWVfYmxvY2soc3RhdGUsIGRzdCwgc3RyaWRlLCBzdGFja19zdGF0ZSk7CisKKyAgICAvLyBza2lw IGN1cnJlbnQsIHJpZ2h0IGJvcmRlciBvbiBzYW1lIGxpbmUsIGFuZCBsZWZ0IGJvcmRlciBvbiBu ZXh0IGxpbmUKKyAgICBzdGFja19zdGF0ZS0+bGluZV9jdXJyICs9IDM7CisKKyAgICAvLyB0aGVz ZSBoYXZlIGFscmVhZHkgYmVlbiBhZHZhbmNlZCB0byB0aGUgcmlnaHQgYm9yZGVyIGluIGRlY29k ZV9pZnJhbWVfYmxvY2sKKyAgICBzdGFja19zdGF0ZS0+bGluZV9wcmV2ICs9IDI7CisgICAgc3Rh Y2tfc3RhdGUtPmxpbmVfbmV4dCArPSAyOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfaWZyYW1l X3BsYW5lKFZpZGVvU3RhdGUgKnN0YXRlLCBpbnQgcGxhbmVfaWR4LCBBVkZyYW1lICpmcmFtZSkK K3sKKyAgICBIVlFQbGFuZURlc2MgKnBsYW5lID0gJnN0YXRlLT5wbGFuZXNbcGxhbmVfaWR4XTsK KyAgICBjb25zdCBpbnQgYm9yZGVyID0gMzIgPj4gKCEhcGxhbmVfaWR4KTsKKyAgICBwdHJkaWZm X3QgbGluZXNpemUgPSBmcmFtZS0+bGluZXNpemVbcGxhbmVfaWR4XTsKKyAgICB1aW50OF90ICpk c3QgPSBmcmFtZS0+ZGF0YVtwbGFuZV9pZHhdICsgbGluZXNpemUgKiBib3JkZXIgKyBib3JkZXI7 CisgICAgU3RhY2tTdGF0ZSBzdGFja19zdGF0ZTsKKyAgICBpbnQxNl90IHZfYmxvY2tzOworCisg ICAgc3RhY2tfc3RhdGUucGxhbmVfaWR4ID0gcGxhbmVfaWR4OworICAgIHN0YWNrX3N0YXRlLmxp bmVfcHJldiA9IHBsYW5lLT5wYXlsb2FkOworICAgIHN0YWNrX3N0YXRlLmxpbmVfY3VyciA9IHBs YW5lLT5wYXlsb2FkOworICAgIHN0YWNrX3N0YXRlLmxpbmVfbmV4dCA9IHBsYW5lLT5wYXlsb2Fk ICsgcGxhbmUtPmhfYmxvY2tzX3NhZmU7CisgICAgdl9ibG9ja3MgPSBwbGFuZS0+dl9ibG9ja3M7 CisKKyAgICAvLyBmaXJzdCBsaW5lCisgICAgaWYgKHZfYmxvY2tzID4gMCkgeworICAgICAgICBp ZnJhbWVfbGluZShzdGF0ZSwgZHN0LCBsaW5lc2l6ZSwgJnN0YWNrX3N0YXRlLCBwbGFuZS0+aF9i bG9ja3MpOworICAgICAgICAvLyBibG9ja3MgYXJlIDR4NCBzbyBhZHZhbmNlIGRzdCBieSA0IGxp bmVzCisgICAgICAgIGRzdCArPSBsaW5lc2l6ZSAqIDQ7CisgICAgICAgIHZfYmxvY2tzLS07Cisg ICAgfQorICAgIC8vIG1pZGRsZSBsaW5lcworICAgIHN0YWNrX3N0YXRlLmxpbmVfcHJldiA9IHBs YW5lLT5wYXlsb2FkOworICAgIHdoaWxlICh2X2Jsb2NrcyA+IDEpIHsKKyAgICAgICAgaWZyYW1l X2xpbmUoc3RhdGUsIGRzdCwgbGluZXNpemUsICZzdGFja19zdGF0ZSwgcGxhbmUtPmhfYmxvY2tz KTsKKyAgICAgICAgZHN0ICs9IGxpbmVzaXplICogNDsKKyAgICAgICAgdl9ibG9ja3MtLTsKKyAg ICB9CisgICAgLy8gbGFzdCBsaW5lCisgICAgaWYgKHZfYmxvY2tzID4gMCkgeworICAgICAgICBz dGFja19zdGF0ZS5saW5lX25leHQgPSBzdGFja19zdGF0ZS5saW5lX2N1cnI7CisgICAgICAgIGlm cmFtZV9saW5lKHN0YXRlLCBkc3QsIGxpbmVzaXplLCAmc3RhY2tfc3RhdGUsIHBsYW5lLT5oX2Js b2Nrcyk7CisgICAgfQorfQorCitzdGF0aWMgaW50IGRlY29kZV9pZnJhbWUoU2VxT2JqICpzZXFv YmosIEdldEJpdENvbnRleHQgKmdiLCBBVkZyYW1lICpmcmFtZSkKK3sKKyAgICBWaWRlb1N0YXRl ICpzdGF0ZSA9IHNlcW9iai0+c3RhdGU7CisgICAgaW50IGRjX3NoaWZ0ID0gZ2V0X2JpdHMoZ2Is IDgpOworICAgIHVpbnQxNl90IG5lc3RfeCwgbmVzdF95OworICAgIGludCByZXQ7CisKKyAgICBz dGF0ZS0+dW5rX3NoaWZ0ID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIHNraXBfYml0cyhnYiwgMTYp OworICAgIG5lc3RfeCA9IGdldF9iaXRzKGdiLCAxNik7CisgICAgbmVzdF95ID0gZ2V0X2JpdHMo Z2IsIDE2KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTFVNQV9DSFJPTUE7IGkrKykgewor ICAgICAgICByZXQgPSBnZXRfY29kZSgmc3RhdGUtPmJhc2lzX251bVtpXS5nYiwgZ2IsIDc4KTsK KyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBy ZXQgPSBnZXRfY29kZSgmc3RhdGUtPmJhc2lzX251bV9ydW5baV0uZ2IsIGdiLCA3OCk7CisgICAg ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IFBMQU5FX0NPVU5UOyBpKyspIHsKKyAgICAgICAgcmV0ID0gZ2V0 X2NvZGUoJnN0YXRlLT5kY192YWx1ZXNbaV0uZ2IsIGdiLCA3OCk7CisgICAgICAgIGlmIChyZXQg PCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgcmV0ID0gZ2V0X2NvZGUoJnN0 YXRlLT5idWZUcmVlMFtpXS5nYiwgZ2IsIDc4KTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAg ICAgICAgICByZXR1cm4gcmV0OworICAgICAgICByZXQgPSBnZXRfY29kZSgmc3RhdGUtPmZpeHZs W2ldLCBnYiwgNzgpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiBy ZXQ7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBQTEFORV9DT1VOVDsgaSsrKSB7 CisgICAgICAgIHJldCA9IGdldF9jb2RlKCZzdGF0ZS0+ZGNfcmxlW2ldLmdiLCBnYiwgNzgpOwor ICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisg ICAgcmV0ID0gYnVpbGRfaHVmZigmc3RhdGUtPmJhc2lzX251bVswXSwgMCwgMCk7CisgICAgaWYg KHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgcmV0ID0gYnVpbGRfaHVmZigmc3Rh dGUtPmJhc2lzX251bV9ydW5bMF0sIDAsIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBy ZXR1cm4gcmV0OworICAgIHJldCA9IGJ1aWxkX2h1ZmYoJnN0YXRlLT5kY192YWx1ZXNbMF0sIDEs IGRjX3NoaWZ0KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBy ZXQgPSBidWlsZF9odWZmKCZzdGF0ZS0+YnVmVHJlZTBbMF0sIDAsIDIpOworICAgIGlmIChyZXQg PCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgc3RhdGUtPmRjX21heCA9ICAgMTI3IDw8 IGRjX3NoaWZ0OworICAgIHN0YXRlLT5kY19taW4gPSAtKDEyOCA8PCBkY19zaGlmdCk7CisKKyAg ICAvLyA0eDQgYmxvY2sgdHlwZXMKKyAgICByZXQgPSBpZnJhbWVfYmFzaXNfbnVtZGVjKHN0YXRl KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICAvLyA0eDQgYmxv Y2sgREMgdmFsdWVzCisgICAgcmV0ID0gaWZyYW1lX2RjX2RlY29kZShzdGF0ZSk7CisgICAgaWYg KHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgLy8gNzB4MzggbmVzdCBjb3BpZWQg ZnJvbSB1cHBlciA0IGJpdHMgb2YgREMgdmFsdWVzIHNvbWV3aGVyZSBpbiB0aGUgbHVtYSBwbGFu ZQorICAgIG1ha2VfbmVzdChzdGF0ZSwgbmVzdF94LCBuZXN0X3kpOworCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBQTEFORV9DT1VOVDsgaSsrKQorICAgICAgICBkZWNvZGVfaWZyYW1lX3BsYW5l KHN0YXRlLCBpLCBmcmFtZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5p dF9tY19oYW5kbGVyKFZpZGVvU3RhdGUgKnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1DUGxhbmUgbWNwbGFuZXNbUExBTkVfQ09VTlRdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWRnJhbWUgKnByZXNlbnQsIEFWRnJhbWUgKnBhc3QsIEFWRnJhbWUgKmZ1dHVyZSkK K3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFBMQU5FX0NPVU5UOyBpKyspIHsKKyAgICAgICAg Y29uc3QgaW50IGJvcmRlciA9IDMyID4+ICghIWkpOworCisgICAgICAgIE1DUGxhbmUgKm1jcGxh bmUgPSAmbWNwbGFuZXNbaV07CisgICAgICAgIEhWUVBsYW5lRGVzYyAqcGxhbmUgPSAmc3RhdGUt PnBsYW5lc1tpXTsKKworICAgICAgICBtY3BsYW5lLT5ybGUgPSAwOworICAgICAgICBtY3BsYW5l LT5wYl9kYyA9IDEyNzsKKyAgICAgICAgbWNwbGFuZS0+cHJlc2VudCA9IHByZXNlbnQtPmRhdGFb aV0gKyBib3JkZXIgKiBwcmVzZW50LT5saW5lc2l6ZVtpXSArIGJvcmRlcjsKKyAgICAgICAgbWNw bGFuZS0+cHJlc2VudF9zdHJpZGUgPSBwcmVzZW50LT5saW5lc2l6ZVtpXTsKKyAgICAgICAgbWNw bGFuZS0+cGFzdCAgICA9IHBhc3QtPmRhdGFbaV0gKyBib3JkZXIgKiBwYXN0LT5saW5lc2l6ZVtp XSArIGJvcmRlcjsKKyAgICAgICAgbWNwbGFuZS0+cGFzdF9zdHJpZGUgPSBwYXN0LT5saW5lc2l6 ZVtpXTsKKyAgICAgICAgbWNwbGFuZS0+ZnV0dXJlICA9IGZ1dHVyZS0+ZGF0YVtpXSArIGJvcmRl ciAqIGZ1dHVyZS0+bGluZXNpemVbaV0gKyBib3JkZXI7CisgICAgICAgIG1jcGxhbmUtPmZ1dHVy ZV9zdHJpZGUgPSBmdXR1cmUtPmxpbmVzaXplW2ldOworICAgICAgICBtY3BsYW5lLT5wYXlsb2Fk X2N1cl9ibGsgPSBwbGFuZS0+cGF5bG9hZDsKKyAgICAgICAgbWNwbGFuZS0+cGF5bG9hZF9jdXJf cm93ID0gcGxhbmUtPnBheWxvYWQ7CisgICAgICAgIG1jcGxhbmUtPmhfbWNiX3N0cmlkZSA9IDgg Pj4gcGxhbmUtPndpZHRoX3NoaWZ0OworICAgICAgICBtY3BsYW5lLT52X21jYl9zdHJpZGUgPSBw cmVzZW50LT5saW5lc2l6ZVtpXSAqICg4ID4+IHBsYW5lLT5oZWlnaHRfc2hpZnQpOworICAgICAg ICBtY3BsYW5lLT5wYl9wZXJfbWNiX3ggPSBwbGFuZS0+cGJfcGVyX21jYl94OworICAgICAgICBt Y3BsYW5lLT5zdHJpZGUgPSBwbGFuZS0+aF9ibG9ja3Nfc2FmZSAqIHBsYW5lLT5wYl9wZXJfbWNi X3k7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBpbml0TUNCcHJvYyhHQkNXaXRoVkxDICpidWYs IHN0cnVjdCBSTERlY29kZXIgKnByb2MpCit7CisgICAgaWYgKGJ1Zi0+Z2IuYnVmZmVyKSB7Cisg ICAgICAgIHByb2MtPnZhbHVlID0gZ2V0X2JpdHMxKCZidWYtPmdiKTsKKyAgICAgICAgcHJvYy0+ Y291bnQgPSBkZWNvZGVfdW92Zl9zeW0oYnVmLCAyNTUpOworICAgIH0KK30KKworc3RhdGljIHZv aWQgaW5pdE1DQnR5cGUoR0JDV2l0aFZMQyAqYnVmLCBzdHJ1Y3QgUkxEZWNvZGVyICp0eXBlKQor eworICAgIGlmIChidWYtPmdiLmJ1ZmZlcikgeworICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IGdl dF9iaXRzMSgmYnVmLT5nYikgPDwgMTsKKworICAgICAgICB0eXBlLT52YWx1ZSA9IHZhbHVlIHwg Z2V0X2JpdHMxKCZidWYtPmdiKTsKKyAgICAgICAgdHlwZS0+Y291bnQgPSBkZWNvZGVfdW92Zl9z eW0oYnVmLCAyNTUpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0TUNUb3AoTUNQbGFuZSBt Y3BsYW5lc1tQTEFORV9DT1VOVF0pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBQTEFORV9D T1VOVDsgaSsrKSB7CisgICAgICAgIG1jcGxhbmVzW2ldLnRvcCA9IG1jcGxhbmVzW2ldLnByZXNl bnQ7CisgICAgICAgIG1jcGxhbmVzW2ldLnRvcF9zdHJpZGUgPSBtY3BsYW5lc1tpXS5wcmVzZW50 X3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCB1aW50OF90IG1jYnR5cGV0cmFuc1sy XVszXSA9IHsKKyAgICB7IDEsIDIsIDAgfSwKKyAgICB7IDIsIDAsIDEgfSwKK307CisKK3N0YXRp YyB1aW50MzJfdCBnZXRNQ0J0eXBlKEdCQ1dpdGhWTEMgKmJ1ZnRyZWUsIHN0cnVjdCBSTERlY29k ZXIgKnR5cGUpCit7CisgICAgaWYgKHR5cGUtPmNvdW50ID09IDApIHsKKyAgICAgICAgLy8gb25s eSB0aHJlZSBwb3NzaWJsZSB2YWx1ZXMsIHNvIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMsCisgICAg ICAgIC8vIGEgc2luZ2xlIGJpdCBkZWNpZGVzIHdoaWNoIG90aGVyIHZhbHVlIHRvIHNlbGVjdAor ICAgICAgICAvLyBiaXQgPT0gMCAtPiBpbmNyZW1lbnQKKyAgICAgICAgLy8gYml0ID09IDEgLT4g ZGVjcmVtZW50CisgICAgICAgIC8vIHRoZW4gd3JhcCB0byByYW5nZSAwLi4yCisgICAgICAgIGlu dCBiaXQgPSBnZXRfYml0czEoJmJ1ZnRyZWUtPmdiKTsKKworICAgICAgICB0eXBlLT52YWx1ZSA9 IG1jYnR5cGV0cmFuc1tiaXRdW3R5cGUtPnZhbHVlXTsKKyAgICAgICAgdHlwZS0+Y291bnQgPSBk ZWNvZGVfdW92Zl9zeW0oYnVmdHJlZSwgMjU1KTsKKyAgICB9CisKKyAgICBpZiAodHlwZS0+Y291 bnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0eXBlLT5jb3VudC0tOworCisgICAg cmV0dXJuIHR5cGUtPnZhbHVlOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfUEJfZGMoVmlkZW9T dGF0ZSAqc3RhdGUsIE1DUGxhbmUgbWNwbGFuZXNbUExBTkVfQ09VTlRdKQoreworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgUExBTkVfQ09VTlQ7IGkrKykgeworICAgICAgICBIVlFQbGFuZURlc2Mg KnBsYW5lID0gJnN0YXRlLT5wbGFuZXNbaV07CisgICAgICAgIE1DUGxhbmUgKm1jcGxhbmUgPSAm bWNwbGFuZXNbaV07CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwbGFuZS0+YmxvY2tz X3Blcl9tY2I7IGorKykgeworICAgICAgICAgICAgQmxvY2tEYXRhICpwYXlsb2FkOworCisgICAg ICAgICAgICBtY3BsYW5lLT5wYl9kYyArPSBkZWNvZGVfc292Zl9zeW0oJnN0YXRlLT5kY192YWx1 ZXNbaV0sIHN0YXRlLT5kY19taW4sIHN0YXRlLT5kY19tYXgpOworICAgICAgICAgICAgcGF5bG9h ZCA9IG1jcGxhbmUtPnBheWxvYWRfY3VyX2JsazsKKyAgICAgICAgICAgIHBheWxvYWRbcGxhbmUt Pm1jYl9vZmZzZXRbal1dLnZhbHVlID0gbWNwbGFuZS0+cGJfZGM7CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX1BCX2NjKFZpZGVvU3RhdGUgKnN0YXRlLCBNQ1BsYW5l IG1jcGxhbmVzW1BMQU5FX0NPVU5UXSwgdWludDMyX3QgcHJvYywgdWludDMyX3QgdHlwZSkKK3sK KyAgICB1aW50MzJfdCBibG9ja190eXBlID0gKHR5cGUgPDwgNSkgfCAocHJvYyA8PCA0KTsKKyAg ICBpZiAocHJvYyA9PSAxKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExBTkVfQ09V TlQ7IGkrKykgeworICAgICAgICAgICAgQmxvY2tEYXRhICpwYXlsb2FkID0gbWNwbGFuZXNbaV0u cGF5bG9hZF9jdXJfYmxrOworICAgICAgICAgICAgSFZRUGxhbmVEZXNjICpwbGFuZSA9ICZzdGF0 ZS0+cGxhbmVzW2ldOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwbGFuZS0+Ymxv Y2tzX3Blcl9tY2I7IGorKykKKyAgICAgICAgICAgICAgICBwYXlsb2FkW3BsYW5lLT5tY2Jfb2Zm c2V0W2pdXS50eXBlID0gYmxvY2tfdHlwZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg ICAgIEhWUVBsYW5lRGVzYyAqcGxhbmVZID0gJnN0YXRlLT5wbGFuZXNbMF07CisgICAgICAgIEhW UVBsYW5lRGVzYyAqcGxhbmVVID0gJnN0YXRlLT5wbGFuZXNbMV07CisgICAgICAgIE1DUGxhbmUg Km1jcGxhbmVZID0gJm1jcGxhbmVzWzBdOworICAgICAgICBNQ1BsYW5lICptY3BsYW5lVSA9ICZt Y3BsYW5lc1sxXTsKKyAgICAgICAgTUNQbGFuZSAqbWNwbGFuZVYgPSAmbWNwbGFuZXNbMl07Cisg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVZLT5ibG9ja3NfcGVyX21jYjsgaSsrKSB7 CisgICAgICAgICAgICBCbG9ja0RhdGEgKnB0ciA9IG1jcGxhbmVZLT5wYXlsb2FkX2N1cl9ibGs7 CisgICAgICAgICAgICBpZiAobWNwbGFuZVktPnJsZSkgeworICAgICAgICAgICAgICAgIHB0cltw bGFuZVktPm1jYl9vZmZzZXRbaV1dLnR5cGUgPSBibG9ja190eXBlOworICAgICAgICAgICAgICAg IG1jcGxhbmVZLT5ybGUtLTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg aW50IGh1ZmYgPSBkZWNvZGVfaHVmZigmc3RhdGUtPmJhc2lzX251bVtMVU1BX0lEWF0pOworCisg ICAgICAgICAgICAgICAgaWYgKGh1ZmYgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICBpZiAoaHVmZikgeworICAgICAg ICAgICAgICAgICAgICBwdHJbcGxhbmVZLT5tY2Jfb2Zmc2V0W2ldXS50eXBlID0gYmxvY2tfdHlw ZSB8IGh1ZmY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg cHRyW3BsYW5lWS0+bWNiX29mZnNldFtpXV0udHlwZSA9IGJsb2NrX3R5cGU7CisgICAgICAgICAg ICAgICAgICAgIG1jcGxhbmVZLT5ybGUgPSBkZWNvZGVfaHVmZigmc3RhdGUtPmJhc2lzX251bV9y dW5bTFVNQV9JRFhdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1jcGxhbmVVLT5ybGUgPCAw KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgcGxhbmVVLT5ibG9ja3NfcGVyX21jYjsgaSsrKSB7IC8vIGNocm9tYQor ICAgICAgICAgICAgQmxvY2tEYXRhICpwdHJVID0gbWNwbGFuZVUtPnBheWxvYWRfY3VyX2JsazsK KyAgICAgICAgICAgIEJsb2NrRGF0YSAqcHRyViA9IG1jcGxhbmVWLT5wYXlsb2FkX2N1cl9ibGs7 CisgICAgICAgICAgICBpZiAobWNwbGFuZVUtPnJsZSkgeworICAgICAgICAgICAgICAgIHB0clVb cGxhbmVVLT5tY2Jfb2Zmc2V0W2ldXS50eXBlID0gYmxvY2tfdHlwZTsKKyAgICAgICAgICAgICAg ICBwdHJWW3BsYW5lVS0+bWNiX29mZnNldFtpXV0udHlwZSA9IGJsb2NrX3R5cGU7CisgICAgICAg ICAgICAgICAgbWNwbGFuZVUtPnJsZS0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICBpbnQgaHVmZiA9IGRlY29kZV9odWZmKCZzdGF0ZS0+YmFzaXNfbnVtW0NIUk9NQV9J RFhdKTsKKworICAgICAgICAgICAgICAgIGlmIChodWZmIDwgMCkKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgaWYgKGh1ZmYp IHsKKyAgICAgICAgICAgICAgICAgICAgcHRyVVtwbGFuZVUtPm1jYl9vZmZzZXRbaV1dLnR5cGUg PSBibG9ja190eXBlIHwgKChodWZmID4+IDApICYgMHhGKTsKKyAgICAgICAgICAgICAgICAgICAg cHRyVltwbGFuZVUtPm1jYl9vZmZzZXRbaV1dLnR5cGUgPSBibG9ja190eXBlIHwgKChodWZmID4+ IDQpICYgMHhGKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICBwdHJVW3BsYW5lVS0+bWNiX29mZnNldFtpXV0udHlwZSA9IGJsb2NrX3R5cGU7CisgICAgICAg ICAgICAgICAgICAgIHB0clZbcGxhbmVVLT5tY2Jfb2Zmc2V0W2ldXS50eXBlID0gYmxvY2tfdHlw ZTsKKyAgICAgICAgICAgICAgICAgICAgbWNwbGFuZVUtPnJsZSA9IGRlY29kZV9odWZmKCZzdGF0 ZS0+YmFzaXNfbnVtX3J1bltDSFJPTUFfSURYXSk7CisgICAgICAgICAgICAgICAgICAgIGlmICht Y3BsYW5lVS0+cmxlIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZXNldF9QQl9kYyhN Q1BsYW5lIG1jcGxhbmVzW1BMQU5FX0NPVU5UXSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IFBMQU5FX0NPVU5UOyBpKyspCisgICAgICAgIG1jcGxhbmVzW2ldLnBiX2RjID0gMTI3OworfQor CitzdGF0aWMgdWludDMyX3QgZ2V0TUNCcHJvYyhHQkNXaXRoVkxDICpidWYsIHN0cnVjdCBSTERl Y29kZXIgKnByb2MpCit7CisgICAgaWYgKHByb2MtPmNvdW50ID09IDApIHsKKyAgICAgICAgcHJv Yy0+dmFsdWUgXj0gMTsKKyAgICAgICAgcHJvYy0+Y291bnQgPSBkZWNvZGVfdW92Zl9zeW0oYnVm LCAyNTUpOworICAgIH0KKworICAgIGlmIChwcm9jLT5jb3VudCA9PSAwKQorICAgICAgICByZXR1 cm4gMDsKKworICAgIHByb2MtPmNvdW50LS07CisKKyAgICByZXR1cm4gcHJvYy0+dmFsdWU7Cit9 CisKK3N0YXRpYyB2b2lkIHNldE1DTmV4dEJsayhNQ1BsYW5lIG1jcGxhbmVzW1BMQU5FX0NPVU5U XSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFBMQU5FX0NPVU5UOyBpKyspIHsKKyAgICAg ICAgbWNwbGFuZXNbaV0udG9wICs9IG1jcGxhbmVzW2ldLmhfbWNiX3N0cmlkZTsKKyAgICAgICAg bWNwbGFuZXNbaV0ucGF5bG9hZF9jdXJfYmxrICs9IG1jcGxhbmVzW2ldLnBiX3Blcl9tY2JfeDsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldE1DRG93bkJsayhNQ1BsYW5lIG1jcGxhbmVzW1BM QU5FX0NPVU5UXSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFBMQU5FX0NPVU5UOyBpKysp IHsKKyAgICAgICAgTUNQbGFuZSAqbWNwbGFuZSA9ICZtY3BsYW5lc1tpXTsKKyAgICAgICAgQmxv Y2tEYXRhICpmaXJzdF9ibG9ja19vbl9uZXh0X3JvdyA9IG1jcGxhbmUtPnBheWxvYWRfY3VyX3Jv dyArIG1jcGxhbmUtPnN0cmlkZTsKKworICAgICAgICBtY3BsYW5lLT5wcmVzZW50ICs9IG1jcGxh bmUtPnZfbWNiX3N0cmlkZTsKKyAgICAgICAgbWNwbGFuZS0+cGF5bG9hZF9jdXJfYmxrID0gZmly c3RfYmxvY2tfb25fbmV4dF9yb3c7CisgICAgICAgIG1jcGxhbmUtPnBheWxvYWRfY3VyX3JvdyA9 IGZpcnN0X2Jsb2NrX29uX25leHRfcm93OworICAgIH0KK30KKworc3RhdGljIGludCBzcHJlYWRf UEJfZGVzY01hcChTZXFPYmogKnNlcW9iaiwgTUNQbGFuZSBtY3BsYW5lc1tQTEFORV9DT1VOVF0p Cit7CisgICAgc3RydWN0IFJMRGVjb2RlciBwcm9jLCB0eXBlOworICAgIFZpZGVvU3RhdGUgKnN0 YXRlID0gc2Vxb2JqLT5zdGF0ZTsKKyAgICBpbnQgcmV0OworCisgICAgaW5pdE1DQnByb2MoJnN0 YXRlLT5tY2JfcHJvYywgJnByb2MpOworICAgIGluaXRNQ0J0eXBlKCZzdGF0ZS0+bWNiX3R5cGUs ICZ0eXBlKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2Vxb2JqLT5oZWlnaHQ7IGkgKz0g OCkgeworICAgICAgICBzZXRNQ1RvcChtY3BsYW5lcyk7CisgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgc2Vxb2JqLT53aWR0aDsgaiArPSA4KSB7CisgICAgICAgICAgICBnZXRNQ0J0eXBlKCZz dGF0ZS0+bWNiX3R5cGUsICZ0eXBlKTsKKyAgICAgICAgICAgIGlmICh0eXBlLnZhbHVlID09IDAp IHsKKyAgICAgICAgICAgICAgICBkZWNvZGVfUEJfZGMoc3RhdGUsIG1jcGxhbmVzKTsKKyAgICAg ICAgICAgICAgICByZXQgPSBkZWNvZGVfUEJfY2Moc3RhdGUsIG1jcGxhbmVzLCAwLCB0eXBlLnZh bHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzZXRfUEJfZGMo bWNwbGFuZXMpOworICAgICAgICAgICAgICAgIHJldCA9IGRlY29kZV9QQl9jYyhzdGF0ZSwgbWNw bGFuZXMsIGdldE1DQnByb2MoJnN0YXRlLT5tY2JfcHJvYywgJnByb2MpLCB0eXBlLnZhbHVlKTsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIHNldE1DTmV4dEJsayhtY3BsYW5lcyk7CisgICAg ICAgICAgICAgICAgLy8gZm9yIGFsbCBwbGFuZXMKKyAgICAgICAgICAgICAgICAvLyAgICAgdG9w ICAgICAgICAgICAgICs9IGhfbWNiX3N0cmlkZQorICAgICAgICAgICAgICAgIC8vICAgICBwYXls b2FkX2N1cl9ibGsgKz0gcGJfcGVyX21jYl94CisgICAgICAgIH0KKyAgICAgICAgc2V0TUNEb3du QmxrKG1jcGxhbmVzKTsKKyAgICAgICAgICAgIC8vIGZvciBhbGwgcGxhbmVzCisgICAgICAgICAg ICAvLyAgICAgcHJlc2VudCArPSB2X21jYl9zdHJpZGUKKyAgICAgICAgICAgIC8vICAgICBwYXls b2FkX2N1cl9yb3cgKz0gc3RyaWRlOworICAgICAgICAgICAgLy8gICAgIHBheWxvYWRfY3VyX2Js ayA9IHBheWxvYWRfY3VyX3JvdworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCByZXNldE1DSGFuZGxlcihWaWRlb1N0YXRlICpzdGF0ZSwgTUNQbGFuZSBtY3BsYW5lc1tQ TEFORV9DT1VOVF0sIEFWRnJhbWUgKmZyYW1lKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg UExBTkVfQ09VTlQ7IGkrKykgeworICAgICAgICBjb25zdCBpbnQgYm9yZGVyID0gMzIgPj4gKCEh aSk7CisgICAgICAgIHB0cmRpZmZfdCBsaW5lc2l6ZSA9IGZyYW1lLT5saW5lc2l6ZVtpXTsKKyAg ICAgICAgdWludDhfdCAqZHN0ID0gZnJhbWUtPmRhdGFbaV0gKyBsaW5lc2l6ZSAqIGJvcmRlciAr IGJvcmRlcjsKKworICAgICAgICBtY3BsYW5lc1tpXS5wcmVzZW50ID0gZHN0OworICAgICAgICBt Y3BsYW5lc1tpXS5wYXlsb2FkX2N1cl9ibGsgPSBzdGF0ZS0+cGxhbmVzW2ldLnBheWxvYWQ7Cisg ICAgICAgIG1jcGxhbmVzW2ldLnBheWxvYWRfY3VyX3JvdyA9IHN0YXRlLT5wbGFuZXNbaV0ucGF5 bG9hZDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIE1DQmxvY2tEZWNEQ05lc3QoVmlkZW9TdGF0 ZSAqc3RhdGUsIE1DUGxhbmUgbWNwbGFuZXNbUExBTkVfQ09VTlRdKQoreworICAgIGZvciAoaW50 IHBsYW5lX2lkeCA9IDA7IHBsYW5lX2lkeCA8IFBMQU5FX0NPVU5UOyBwbGFuZV9pZHgrKykgewor ICAgICAgICBCbG9ja0RhdGEgY29uc3QgKnB0ciA9IG1jcGxhbmVzW3BsYW5lX2lkeF0ucGF5bG9h ZF9jdXJfYmxrOworICAgICAgICBIVlFQbGFuZURlc2MgKnBsYW5lID0gJnN0YXRlLT5wbGFuZXNb cGxhbmVfaWR4XTsKKyAgICAgICAgcHRyZGlmZl90IHN0cmlkZSA9IG1jcGxhbmVzW3BsYW5lX2lk eF0udG9wX3N0cmlkZTsKKyAgICAgICAgaW50MzJfdCBsaW5lID0gcGxhbmUtPmhfYmxvY2tzX3Nh ZmU7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwbGFuZS0+YmxvY2tzX3Blcl9tY2I7 IGorKykgeworICAgICAgICAgICAgLy8gZHN0IGlzIGEgNHg0IHJlZ2lvbgorICAgICAgICAgICAg dWludDhfdCAqZHN0ID0gbWNwbGFuZXNbcGxhbmVfaWR4XS50b3AgKyBwbGFuZS0+cHhfb2Zmc2V0 W2pdICsgcGxhbmUtPnB5X29mZnNldFtqXSAqIG1jcGxhbmVzW3BsYW5lX2lkeF0udG9wX3N0cmlk ZTsKKyAgICAgICAgICAgIGludDMyX3QgYmxvY2tfaWR4ID0gcGxhbmUtPm1jYl9vZmZzZXRbal07 CisgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IHB0cltibG9ja19pZHhdLnZhbHVlOworICAg ICAgICAgICAgLy8gYmxvY2sgdHlwZToKKyAgICAgICAgICAgIC8vIDA6IHdlaWdodGVkCisgICAg ICAgICAgICAvLyA2OiBsaXRlcmFsIGJsb2NrCisgICAgICAgICAgICAvLyA4OiBzaW5nbGUgdmFs dWUKKyAgICAgICAgICAgIHVpbnQzMl90IHR5cGUgPSBwdHJbYmxvY2tfaWR4XS50eXBlICYgMHhG OworICAgICAgICAgICAgLy8gc2VlIGFsc28gSXBpY0Jsb2NrRGVjCisgICAgICAgICAgICBpZiAo dHlwZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdWludDhfdCB0b3AgICAgPSBwdHJbYmxvY2tf aWR4IC0gbGluZV0udHlwZSAmIDB4NzcgPyB2YWx1ZSA6IHB0cltibG9ja19pZHggLSBsaW5lXS52 YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50OF90IGxlZnQgICA9IHB0cltibG9ja19pZHggLSAg ICAxXS50eXBlICYgMHg3NyA/IHZhbHVlIDogcHRyW2Jsb2NrX2lkeCAtICAgIDFdLnZhbHVlOwor ICAgICAgICAgICAgICAgIHVpbnQ4X3QgcmlnaHQgID0gcHRyW2Jsb2NrX2lkeCArICAgIDFdLnR5 cGUgJiAweDc3ID8gdmFsdWUgOiBwdHJbYmxvY2tfaWR4ICsgICAgMV0udmFsdWU7CisgICAgICAg ICAgICAgICAgdWludDhfdCBib3R0b20gPSBwdHJbYmxvY2tfaWR4ICsgbGluZV0udHlwZSAmIDB4 NzcgPyB2YWx1ZSA6IHB0cltibG9ja19pZHggKyBsaW5lXS52YWx1ZTsKKyAgICAgICAgICAgICAg ICB3ZWlnaHRfaW1fYmxvY2soZHN0LCBzdHJpZGUsIHZhbHVlLCB0b3AsIGJvdHRvbSwgbGVmdCwg cmlnaHQpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IDgpIHsKKyAgICAgICAgICAg ICAgICBkY19ibG9jayhkc3QsIHN0cmlkZSwgdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBpbnRyYV9hb3RfYmxvY2soc3RhdGUsIGRzdCwgc3RyaWRlLCB2YWx1 ZSwgdHlwZSwgcGxhbmVfaWR4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K Kworc3RhdGljIHZvaWQgc2V0TUNUYXJnZXQoTUNQbGFuZSBtY3BsYW5lc1tQTEFORV9DT1VOVF0s IGludCByZWZlcmVuY2VfZnJhbWUpCit7CisgICAgaWYgKHJlZmVyZW5jZV9mcmFtZSA9PSAwKSB7 CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExBTkVfQ09VTlQ7IGkrKykgeworICAgICAg ICAgICAgbWNwbGFuZXNbaV0udGFyZ2V0ID0gbWNwbGFuZXNbaV0ucGFzdDsKKyAgICAgICAgICAg IG1jcGxhbmVzW2ldLnRhcmdldF9zdHJpZGUgPSBtY3BsYW5lc1tpXS5wYXN0X3N0cmlkZTsKKyAg ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUExBTkVf Q09VTlQ7IGkrKykgeworICAgICAgICAgICAgbWNwbGFuZXNbaV0udGFyZ2V0ID0gbWNwbGFuZXNb aV0uZnV0dXJlOworICAgICAgICAgICAgbWNwbGFuZXNbaV0udGFyZ2V0X3N0cmlkZSA9IG1jcGxh bmVzW2ldLmZ1dHVyZV9zdHJpZGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGdldF9tdl92ZWN0b3IoaW50ICpyZXN1bHQsIEdCQ1dpdGhWTEMgKmJ1ZiwgaW50IHJlc2lkdWFs X2JpdHMpCit7CisgICAgaW50IG1heF92YWxfcGx1c18xID0gMSA8PCAocmVzaWR1YWxfYml0cyAr IDUpOworICAgIGludCB2YWx1ZSA9IGRlY29kZV9odWZmKGJ1Zik7IC8vIHF1YW50aXplZCB2YWx1 ZQorCisgICAgdmFsdWUgKj0gKDEgPDwgcmVzaWR1YWxfYml0cyk7CisgICAgLy8gcmVzaWR1YWwg Yml0cworICAgIHZhbHVlICs9IGdldF9iaXRzX2xvbmcoJmJ1Zi0+Z2IsIHJlc2lkdWFsX2JpdHMp OworICAgIHJlc3VsdFswXSArPSB2YWx1ZTsKKyAgICAvLyBzaWduZWQgd3JhcCB0byAtbWF4X3Zh bF9wbHVzXzEgLi4gbWF4X3ZhbF9wbHVzXzEtMQorICAgIGlmIChyZXN1bHRbMF0gPj0gbWF4X3Zh bF9wbHVzXzEpCisgICAgICAgIHJlc3VsdFswXSAtPSBtYXhfdmFsX3BsdXNfMSA8PCAxOworICAg IGVsc2UgaWYgKHJlc3VsdFswXSA8IC1tYXhfdmFsX3BsdXNfMSkKKyAgICAgICAgcmVzdWx0WzBd ICs9IG1heF92YWxfcGx1c18xIDw8IDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X21jX2FvdF9iYXNp cyhWaWRlb1N0YXRlICpzdGF0ZSwgdWludDhfdCBiYXNpc19vdXRbNF1bNF0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50MzJfdCAqc3VtLCB1aW50OF90IGNvbnN0ICpuZXN0X2RhdGEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IG5lc3Rfc3RyaWRlLCB1aW50 MzJfdCBwbGFuZV9pZHgpCit7CisgICAgLy8gdGhlIG9ubHkgZGlmZmVyZW5jZSB0byBHZXRBb3RC YXNpcygpIHNlZW1zIHRvIGJlIHRoZSAiPj4gNCAmIDB4RiIKKyAgICBHZXRCaXRDb250ZXh0ICpn YiA9ICZzdGF0ZS0+Zml4dmxbcGxhbmVfaWR4XTsKKyAgICB1aW50MTZfdCBiaXRzID0gZ2V0X2Jp dHMoZ2IsIDE2KTsKKyAgICB1aW50MzJfdCBzdGVwLCBzdHJpZGU7CisgICAgdWludDMyX3QgYmln ID0gYml0cyAmIDB4M0Y7CisgICAgdWludDMyX3Qgc21hbGwgPSAoYml0cyA+PiA2KSAmIDB4MUY7 CisgICAgaW50MzJfdCBpbnZlcnNlLCBmb287CisgICAgdWludDhfdCBtaW4sIG1heDsKKworICAg IGlmIChzdGF0ZS0+aXNfbGFuZHNjYXBlKSB7CisgICAgICAgIG5lc3RfZGF0YSArPSBuZXN0X3N0 cmlkZSAqIHNtYWxsICsgYmlnOworICAgICAgICBzdGVwICAgPSAgICAgICAgICAgMSA8PCAoKGJp dHMgPj4gMTEpICYgMSk7CisgICAgICAgIHN0cmlkZSA9IG5lc3Rfc3RyaWRlIDw8ICgoYml0cyA+ PiAxMikgJiAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBuZXN0X2RhdGEgKz0gbmVzdF9zdHJp ZGUgKiBiaWcgKyBzbWFsbDsKKyAgICAgICAgc3RlcCAgID0gICAgICAgICAgIDEgPDwgKChiaXRz ID4+IDEyKSAmIDEpOworICAgICAgICBzdHJpZGUgPSBuZXN0X3N0cmlkZSA8PCAoKGJpdHMgPj4g MTEpICYgMSk7CisgICAgfQorICAgIG1pbiA9IG1heCA9IChuZXN0X2RhdGFbMF0gPj4gNCkgJiAw eEY7IC8vICEKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBmb3Ig KGludCBqID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgdWludDhfdCBuZXN0X3ZhbHVl ID0gKG5lc3RfZGF0YVtpICogc3RyaWRlICsgaiAqIHN0ZXBdID4+IDQpICYgMHhGOyAvLyAhCisK KyAgICAgICAgICAgIGJhc2lzX291dFtpXVtqXSA9IG5lc3RfdmFsdWU7CisgICAgICAgICAgICBt aW4gPSBuZXN0X3ZhbHVlIDwgbWluID8gbmVzdF92YWx1ZSA6IG1pbjsKKyAgICAgICAgICAgIG1h eCA9IG5lc3RfdmFsdWUgPiBtYXggPyBuZXN0X3ZhbHVlIDogbWF4OworICAgICAgICB9CisgICAg fQorICAgIHN1bVswXSArPSBkZWNvZGVfaHVmZigmc3RhdGUtPmJ1ZlRyZWUwW3BsYW5lX2lkeF0p OworICAgIGludmVyc2UgPSBkaXZfdGFiW21heCAtIG1pbl07CisgICAgaWYgKGJpdHMgJiAweDgw MDApCisgICAgICAgIGludmVyc2UgPSAtaW52ZXJzZTsKKyAgICBmb28gPSAoYml0cyA+PiAxMykg JiAzOworICAgIHJldHVybiAoc3VtWzBdICsgZm9vKSAqIGludmVyc2U7Cit9CisKK3N0YXRpYyBp bnQgZ2V0X21jX2FvdF9zdW0oVmlkZW9TdGF0ZSAqc3RhdGUsIGludDMyX3QgcmVzdWx0WzRdWzRd LCB1aW50OF90IG51bV9iYXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBj b25zdCAqbmVzdF9kYXRhLCBwdHJkaWZmX3QgbmVzdF9zdHJpZGUsIHVpbnQzMl90IHBsYW5lX2lk eCkKK3sKKyAgICB1aW50OF90IGJ5dGVfcmVzdWx0WzRdWzRdOworICAgIGludDMyX3Qgc3VtLCBt ZWFuLCB0ZW1wID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykKKyAgICAgICAgICAgIHJlc3VsdFtpXVtqXSA9 IDA7CisKKyAgICBmb3IgKGludCBrID0gMDsgayA8IG51bV9iYXNlczsgaysrKSB7CisgICAgICAg IGludCBmYWN0b3IgPSBnZXRfbWNfYW90X2Jhc2lzKHN0YXRlLCBieXRlX3Jlc3VsdCwgJnRlbXAs IG5lc3RfZGF0YSwgbmVzdF9zdHJpZGUsIHBsYW5lX2lkeCk7CisKKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGor KykKKyAgICAgICAgICAgICAgICByZXN1bHRbaV1bal0gKz0gZmFjdG9yICogYnl0ZV9yZXN1bHRb aV1bal07CisgICAgfQorCisgICAgc3VtID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7 IGkrKykKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICBz dW0gKz0gcmVzdWx0W2ldW2pdOworICAgIG1lYW4gPSBzdW0gPj4gNDsKKworICAgIHJldHVybiBt ZWFuOworfQorCitzdGF0aWMgdm9pZCBQcmVkaUFvdEJsb2NrKFZpZGVvU3RhdGUgKnN0YXRlLCB1 aW50OF90ICpkc3QsIHVpbnQ4X3QgY29uc3QgKnNyYywgcHRyZGlmZl90IHN0cmlkZSwgdWludDhf dCBibG9ja190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpuZXN0X2Rh dGEsIHB0cmRpZmZfdCBoX25lc3Rfc2l6ZSwgdWludDMyX3QgcGxhbmVfaWR4LCB1aW50MzJfdCBo cGVsX2R4LCB1aW50MzJfdCBocGVsX2R5KQoreworICAgIGludDMyX3QgcmVzdWx0WzRdWzRdLCBt ZWFuLCBkaWZmWzRdWzRdLCBtaW4sIG1heDsKKyAgICBpbnQzMl90IGFkZGVuZCwgZmFjdG9yOwor ICAgIGludCBhb3Rfc3VtID0gZ2V0X21jX2FvdF9zdW0oc3RhdGUsIHJlc3VsdCwgYmxvY2tfdHlw ZSAtIDEsIG5lc3RfZGF0YSwgaF9uZXN0X3NpemUsIHBsYW5lX2lkeCk7CisgICAgdWludDhfdCBt ZHN0WzRdWzRdOworICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlID0gNDsKKworICAgIHN0 YXRlLT5tb3Rpb25fY29tcF9mdW5jW2hwZWxfZHhdW2hwZWxfZHldKCh1aW50OF90ICopbWRzdCwg ZHN0X3N0cmlkZSwgc3JjLCBzdHJpZGUpOworICAgIG1lYW4gPSA4OworICAgIGZvciAoaW50IHkg PSAwOyB5IDwgNDsgeSsrKQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAg ICAgICAgICAgIG1lYW4gKz0gbWRzdFt5XVt4XTsKKyAgICBtZWFuIC89IDE2OworICAgIG1pbiA9 IG1heCA9IG1kc3RbMF1bMF0gLSBtZWFuOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr KSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAgICAgICAgICBp bnQzMl90IHZhbHVlID0gZGlmZltpXVtqXSA9IG1kc3RbaV1bal0gLSBtZWFuOworCisgICAgICAg ICAgICBtaW4gPSB2YWx1ZSA8IG1pbiA/IHZhbHVlIDogbWluOworICAgICAgICAgICAgbWF4ID0g dmFsdWUgPiBtYXggPyB2YWx1ZSA6IG1heDsKKyAgICAgICAgfQorICAgIH0KKyAgICBhZGRlbmQg PSAoZGVjb2RlX3NvdmZfc3ltKCZzdGF0ZS0+ZGNfdmFsdWVzW3BsYW5lX2lkeF0sIHN0YXRlLT5k Y19taW4sIHN0YXRlLT5kY19tYXgpID4+IHN0YXRlLT5kY19zaGlmdCA8PCBzdGF0ZS0+dW5rX3No aWZ0KSAtIGFvdF9zdW07CisgICAgZmFjdG9yID0gKGRlY29kZV9zb3ZmX3N5bSgmc3RhdGUtPmRj X3ZhbHVlc1twbGFuZV9pZHhdLCBzdGF0ZS0+ZGNfbWluLCBzdGF0ZS0+ZGNfbWF4KSA+PiBzdGF0 ZS0+ZGNfc2hpZnQpOworICAgIGZhY3RvciAqPSBtY2Rpdl90YWJbbWF4IC0gbWluXTsKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0 OyBqKyspCisgICAgICAgICAgICByZXN1bHRbaV1bal0gKz0gYWRkZW5kICsgZGlmZltpXVtqXSAq IGZhY3RvcjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAgICAgICAgICBpbnQgdmFsdWUgPSAocmVz dWx0W2ldW2pdID4+IHN0YXRlLT51bmtfc2hpZnQpICsgbWRzdFtpXVtqXTsKKworICAgICAgICAg ICAgZHN0W2kgKiBzdHJpZGUgKyBqXSA9IGF2X2NsaXBfdWludDgodmFsdWUpOworICAgICAgICB9 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBNQ0Jsb2NrRGVjTUNOZXN0KFZpZGVvU3RhdGUgKnN0 YXRlLCBNQ1BsYW5lIG1jcGxhbmVzW1BMQU5FX0NPVU5UXSwgaW50IHgsIGludCB5KQoreworICAg IGludCBocGVsX2R4ID0geCAmIDEsIGhwZWxfZHkgPSB5ICYgMTsKKyAgICB2b2lkICpuZXN0X2Rh dGE7CisKKyAgICBpZiAoc3RhdGUtPmlzX2xhbmRzY2FwZSkKKyAgICAgICAgbmVzdF9kYXRhID0g bWNwbGFuZXNbMF0udGFyZ2V0ICsgeC8yICsgKHkvMiAtIDE2KSptY3BsYW5lc1swXS50YXJnZXRf c3RyaWRlIC0gMzI7CisgICAgZWxzZQorICAgICAgICBuZXN0X2RhdGEgPSBtY3BsYW5lc1swXS50 YXJnZXQgKyB4LzIgKyAoeS8yIC0gMzIpKm1jcGxhbmVzWzBdLnRhcmdldF9zdHJpZGUgLSAxNjsK KyAgICBmb3IgKGludCBwbGFuZV9pZHggPSAwOyBwbGFuZV9pZHggPCBQTEFORV9DT1VOVDsgcGxh bmVfaWR4KyspIHsKKyAgICAgICAgTUNQbGFuZSAqbWNwbGFuZSA9ICZtY3BsYW5lc1twbGFuZV9p ZHhdOworICAgICAgICBIVlFQbGFuZURlc2MgKnBsYW5lID0gJnN0YXRlLT5wbGFuZXNbcGxhbmVf aWR4XTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZS0+YmxvY2tzX3Blcl9tY2I7 IGkrKykgeworICAgICAgICAgICAgQmxvY2tEYXRhIGNvbnN0ICpwdHIgPSBtY3BsYW5lLT5wYXls b2FkX2N1cl9ibGs7CisgICAgICAgICAgICB1aW50OF90IGJsb2NrX3R5cGUgPSBwdHJbcGxhbmUt Pm1jYl9vZmZzZXRbaV1dLnR5cGUgJiAweEY7CisgICAgICAgICAgICB1aW50OF90ICpkc3QgPSBt Y3BsYW5lLT50b3AgKyBwbGFuZS0+cHhfb2Zmc2V0W2ldICsgcGxhbmUtPnB5X29mZnNldFtpXSAq IG1jcGxhbmUtPnRvcF9zdHJpZGU7CisgICAgICAgICAgICBwdHJkaWZmX3Qgc3RyaWRlID0gbWNw bGFuZS0+dG9wX3N0cmlkZTsKKworICAgICAgICAgICAgaWYgKGJsb2NrX3R5cGUgPT0gNikgewor ICAgICAgICAgICAgICAgIHJlYWRfYmxvY2soc3RhdGUsIGRzdCwgc3RyaWRlLCBwbGFuZV9pZHgp OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcGxhbmVfZHggPSB4 ID4+IHBsYW5lLT53aWR0aF9zaGlmdDsKKyAgICAgICAgICAgICAgICBpbnQgcGxhbmVfZHkgPSB5 ID4+IHBsYW5lLT5oZWlnaHRfc2hpZnQ7CisgICAgICAgICAgICAgICAgdWludDhfdCBjb25zdCAq c3JjID0gbWNwbGFuZS0+dGFyZ2V0ICsgKHBsYW5lX2R5ID4+IDEpICogbWNwbGFuZS0+dGFyZ2V0 X3N0cmlkZSArIChwbGFuZV9keCA+PiAxKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGxhbmUtPnB4X29mZnNldFtpXSArIHBsYW5lLT5weV9vZmZzZXRbaV0gKiBtY3Bs YW5lLT50YXJnZXRfc3RyaWRlOworCisgICAgICAgICAgICAgICAgaHBlbF9keCA9IHBsYW5lX2R4 ICYgMTsKKyAgICAgICAgICAgICAgICBocGVsX2R5ID0gcGxhbmVfZHkgJiAxOworCisgICAgICAg ICAgICAgICAgaWYgKGJsb2NrX3R5cGUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBzdGF0 ZS0+bW90aW9uX2NvbXBfZnVuY1tocGVsX2R4XVtocGVsX2R5XShkc3QsIHN0cmlkZSwgc3JjLCBz dHJpZGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB0 cmRpZmZfdCBzdHJpZGVZID0gbWNwbGFuZXNbMF0udGFyZ2V0X3N0cmlkZTsKKyAgICAgICAgICAg ICAgICAgICAgUHJlZGlBb3RCbG9jayhzdGF0ZSwgZHN0LCBzcmMsIHN0cmlkZSwgYmxvY2tfdHlw ZSwgbmVzdF9kYXRhLCBzdHJpZGVZLCBwbGFuZV9pZHgsIGhwZWxfZHgsIGhwZWxfZHkpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3Rh dGljIHZvaWQgbW90aW9uX2NvbXAoVmlkZW9TdGF0ZSAqc3RhdGUsIE1DUGxhbmUgbWNwbGFuZXNb UExBTkVfQ09VTlRdLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR4LCBpbnQgZHksIGlu dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFBMQU5FX0NP VU5UOyBpKyspIHsKKyAgICAgICAgTUNQbGFuZSAqbWNwbGFuZSA9ICZtY3BsYW5lc1tpXTsKKyAg ICAgICAgSFZRUGxhbmVEZXNjICpwbGFuZSA9ICZzdGF0ZS0+cGxhbmVzW2ldOworICAgICAgICBp bnQgcGxhbmVfZHggPSBkeCA+PiBwbGFuZS0+d2lkdGhfc2hpZnQ7CisgICAgICAgIGludCBwbGFu ZV9keSA9IGR5ID4+IHBsYW5lLT5oZWlnaHRfc2hpZnQ7CisgICAgICAgIHVpbnQ4X3QgKnB0ciA9 IG1jcGxhbmUtPnRhcmdldDsKKyAgICAgICAgaW50IG1iX3ggPSBwbGFuZV9keCA+PiAxOworICAg ICAgICBpbnQgbWJfeSA9IHBsYW5lX2R5ID4+IDE7CisgICAgICAgIGludCBocGVsX2R4LCBocGVs X2R5OworCisgICAgICAgIGhwZWxfZHggPSBwbGFuZV9keCAmIDE7CisgICAgICAgIGhwZWxfZHkg PSBwbGFuZV9keSAmIDE7CisKKyAgICAgICAgaWYgKG1iX3kgPCAwIHx8IG1iX3kgPj0gaGVpZ2h0 ID4+IHBsYW5lLT5oZWlnaHRfc2hpZnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm IChtYl94IDwgMCB8fCBtYl94ID49IHdpZHRoID4+IHBsYW5lLT53aWR0aF9zaGlmdCkKKyAgICAg ICAgICAgIHJldHVybjsKKworICAgICAgICBwdHIgKz0gbWJfeSAqIG1jcGxhbmUtPnRhcmdldF9z dHJpZGUgKyBtYl94OworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBsYW5lLT5ibG9ja3Nf cGVyX21jYjsgaisrKSB7CisgICAgICAgICAgICBzdGF0ZS0+bW90aW9uX2NvbXBfZnVuY1tocGVs X2R4XVtocGVsX2R5XShtY3BsYW5lLT50b3AgKyBwbGFuZS0+cHhfb2Zmc2V0W2pdICsgcGxhbmUt PnB5X29mZnNldFtqXSAqIG1jcGxhbmUtPnRvcF9zdHJpZGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY3BsYW5lLT50b3Bfc3RyaWRlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRy ICsgcGxhbmUtPnB4X29mZnNldFtqXSArIHBsYW5lLT5weV9vZmZzZXRbal0gKiBtY3BsYW5lLT50 YXJnZXRfc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWNwbGFuZS0+dGFyZ2V0X3N0cmlkZSk7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyBpbnQgZGVjb2RlX2JmcmFtZV9wbGFuZShTZXFPYmogKnNlcW9iaiwgQVZGcmFt ZSAqcHJlc2VudCwgQVZGcmFtZSAqcGFzdCwgQVZGcmFtZSAqZnV0dXJlKQoreworICAgIE1DUGxh bmUgbWNwbGFuZXNbUExBTkVfQ09VTlRdOworICAgIFZpZGVvU3RhdGUgKnN0YXRlID0gc2Vxb2Jq LT5zdGF0ZTsKKyAgICBpbnQgcmVmZXJlbmNlX2ZyYW1lID0gLTE7CisgICAgaW50IG12X2gsIG12 X3YsIHJldDsKKworICAgIGluaXRfbWNfaGFuZGxlcihzdGF0ZSwgbWNwbGFuZXMsIHByZXNlbnQs IHBhc3QsIGZ1dHVyZSk7CisgICAgcmV0ID0gc3ByZWFkX1BCX2Rlc2NNYXAoc2Vxb2JqLCBtY3Bs YW5lcyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgcmVzZXRN Q0hhbmRsZXIoc3RhdGUsIG1jcGxhbmVzLCBwcmVzZW50KTsKKyAgICBmb3IgKGludCB5ID0gMDsg eSA8IHNlcW9iai0+aGVpZ2h0OyB5ICs9IDgpIHsgLy8gTUMgYmxvY2tzIGFyZSA4eDggcGl4ZWxz CisgICAgICAgIHNldE1DVG9wKG1jcGxhbmVzKTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg PCBzZXFvYmotPndpZHRoOyB4ICs9IDgpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYml0cyA9IG1j cGxhbmVzWzBdLnBheWxvYWRfY3VyX2Jsay0+dHlwZTsKKyAgICAgICAgICAgIC8vIDA6IGludHJh CisgICAgICAgICAgICAvLyAxOiBpbnRlciAtIHBhc3QKKyAgICAgICAgICAgIC8vIDI6IGludGVy IC0gZnV0dXJlCisgICAgICAgICAgICAvLyBzZWUgZ2V0TUNCdHlwZSgpCisgICAgICAgICAgICBp bnQgbmV3X3JlZmVyZW5jZV9mcmFtZSA9IChiaXRzID4+IDUpICYgMzsKKyAgICAgICAgICAgIGlm IChuZXdfcmVmZXJlbmNlX2ZyYW1lID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBpbnRyYQor ICAgICAgICAgICAgICAgIE1DQmxvY2tEZWNEQ05lc3Qoc3RhdGUsIG1jcGxhbmVzKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IG1jYl9wcm9jLCByZWZfeCwgcmVm X3k7CisKKyAgICAgICAgICAgICAgICBuZXdfcmVmZXJlbmNlX2ZyYW1lLS07CisgICAgICAgICAg ICAgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHJlZmVyZW5jZSBmcmFtZSBw b2ludGVycworICAgICAgICAgICAgICAgIGlmIChuZXdfcmVmZXJlbmNlX2ZyYW1lICE9IHJlZmVy ZW5jZV9mcmFtZSkgeworICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfZnJhbWUgPSBuZXdf cmVmZXJlbmNlX2ZyYW1lOworICAgICAgICAgICAgICAgICAgICBzZXRNQ1RhcmdldChtY3BsYW5l cywgcmVmZXJlbmNlX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbXZfaCA9IDA7CisgICAg ICAgICAgICAgICAgICAgIG12X3YgPSAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIGdldF9tdl92ZWN0b3IoJm12X2gsICZzdGF0ZS0+bXZfaCwgc3RhdGUtPm1jX3Jlc2lk dWFsX2JpdHNfaFtyZWZlcmVuY2VfZnJhbWVdKTsKKyAgICAgICAgICAgICAgICBnZXRfbXZfdmVj dG9yKCZtdl92LCAmc3RhdGUtPm12X3YsIHN0YXRlLT5tY19yZXNpZHVhbF9iaXRzX3ZbcmVmZXJl bmNlX2ZyYW1lXSk7CisKKyAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGhhbGYtcGl4ZWwgcG9z aXRpb24gb2YgcmVmZXJlbmNlIG1hY3JvYmxvY2sKKyAgICAgICAgICAgICAgICByZWZfeCA9IHgg KiAyICsgbXZfaDsKKyAgICAgICAgICAgICAgICByZWZfeSA9IHkgKiAyICsgbXZfdjsKKworICAg ICAgICAgICAgICAgIC8vIHNlZSBnZXRNQ0Jwcm9jKCkKKyAgICAgICAgICAgICAgICBtY2JfcHJv YyA9IChiaXRzID4+IDQpICYgMTsKKyAgICAgICAgICAgICAgICBpZiAobWNiX3Byb2MgPT0gMCkK KyAgICAgICAgICAgICAgICAgICAgTUNCbG9ja0RlY01DTmVzdChzdGF0ZSwgbWNwbGFuZXMsIHJl Zl94LCByZWZfeSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBt b3Rpb25fY29tcChzdGF0ZSwgbWNwbGFuZXMsIHJlZl94LCByZWZfeSwgc2Vxb2JqLT53aWR0aCwg c2Vxb2JqLT5oZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0TUNOZXh0Qmxr KG1jcGxhbmVzKTsKKyAgICAgICAgfQorICAgICAgICBzZXRNQ0Rvd25CbGsobWNwbGFuZXMpOwor ICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9iZnJhbWUoU2Vx T2JqICpzZXFvYmosIEdldEJpdENvbnRleHQgKmdiLCBBVkZyYW1lICpwcmVzZW50LCBBVkZyYW1l ICpwYXN0LCBBVkZyYW1lICpmdXR1cmUpCit7CisgICAgVmlkZW9TdGF0ZSAqc3RhdGUgPSBzZXFv YmotPnN0YXRlOworICAgIGludCByZXQ7CisKKyAgICBzdGF0ZS0+ZGNfc2hpZnQgPSBnZXRfYml0 cyhnYiwgOCk7CisgICAgc3RhdGUtPnVua19zaGlmdCA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICBz dGF0ZS0+bWNfcmVzaWR1YWxfYml0c19oWzBdID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIHN0YXRl LT5tY19yZXNpZHVhbF9iaXRzX3ZbMF0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgc3RhdGUtPm1j X3Jlc2lkdWFsX2JpdHNfaFsxXSA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICBzdGF0ZS0+bWNfcmVz aWR1YWxfYml0c192WzFdID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIHN0YXRlLT5tY19yZXNpZHVh bF9iaXRzX2hbMl0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgc3RhdGUtPm1jX3Jlc2lkdWFsX2Jp dHNfdlsyXSA9IGdldF9iaXRzKGdiLCA4KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTFVN QV9DSFJPTUE7IGkrKykgeworICAgICAgICByZXQgPSBnZXRfY29kZSgmc3RhdGUtPmJhc2lzX251 bVtpXS5nYiwgZ2IsIDgyKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1 cm4gcmV0OworICAgICAgICByZXQgPSBnZXRfY29kZSgmc3RhdGUtPmJhc2lzX251bV9ydW5baV0u Z2IsIGdiLCA4Mik7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJl dDsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFBMQU5FX0NPVU5UOyBpKyspIHsK KyAgICAgICAgcmV0ID0gZ2V0X2NvZGUoJnN0YXRlLT5kY192YWx1ZXNbaV0uZ2IsIGdiLCA4Mik7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg cmV0ID0gZ2V0X2NvZGUoJnN0YXRlLT5idWZUcmVlMFtpXS5nYiwgZ2IsIDgyKTsKKyAgICAgICAg aWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICByZXQgPSBnZXRf Y29kZSgmc3RhdGUtPmZpeHZsW2ldLCBnYiwgODIpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAg ICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcmV0ID0gZ2V0X2NvZGUoJnN0YXRl LT5tdl9oLmdiLCBnYiwgODIpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0 OworICAgIHJldCA9IGdldF9jb2RlKCZzdGF0ZS0+bXZfdi5nYiwgZ2IsIDgyKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSBnZXRfY29kZSgmc3RhdGUt Pm1jYl90eXBlLmdiLCBnYiwgODIpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworICAgIHJldCA9IGdldF9jb2RlKCZzdGF0ZS0+bWNiX3Byb2MuZ2IsIGdiLCA4Mik7Cisg ICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBidWlsZF9o dWZmKCZzdGF0ZS0+YmFzaXNfbnVtWzBdLCAwLCAwKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAg ICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSBidWlsZF9odWZmKCZzdGF0ZS0+YmFzaXNfbnVtX3J1 blswXSwgMCwgMCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAg cmV0ID0gYnVpbGRfaHVmZigmc3RhdGUtPmRjX3ZhbHVlc1swXSwgMSwgc3RhdGUtPmRjX3NoaWZ0 KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSBidWls ZF9odWZmKCZzdGF0ZS0+YnVmVHJlZTBbMF0sIDAsIDIpOworICAgIGlmIChyZXQgPCAwKQorICAg ICAgICByZXR1cm4gcmV0OworICAgIHJldCA9IGJ1aWxkX2h1ZmYoJnN0YXRlLT5tdl9oLCAxLCAw KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQgPSBidWls ZF9odWZmKCZzdGF0ZS0+bWNiX3R5cGUsIDAsIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAg ICByZXR1cm4gcmV0OworCisgICAgc3RhdGUtPmRjX21heCA9ICAgMTI3IDw8IHN0YXRlLT5kY19z aGlmdDsKKyAgICBzdGF0ZS0+ZGNfbWluID0gLSgxMjggPDwgc3RhdGUtPmRjX3NoaWZ0KTsKKwor ICAgIGRlY29kZV9iZnJhbWVfcGxhbmUoc2Vxb2JqLCBwcmVzZW50LCBwYXN0LCBmdXR1cmUpOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHZxbTRfZGVjb2RlKEFWQ29kZWNDb250 ZXh0ICphdmN0eCwgQVZGcmFtZSAqYXZmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqZ290X2ZyYW1lLCBBVlBhY2tldCAqcGt0KQoreworICAgIEhWUU00Q29udGV4dCAqcyA9IGF2 Y3R4LT5wcml2X2RhdGE7CisgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAmcy0+Z2I7CisgICAgQVZG cmFtZSAqZnJhbWUgPSBzLT5mcmFtZVswXTsKKyAgICBpbnQgZnJhbWVfdHlwZSwgcmV0OworCisg ICAgaWYgKChyZXQgPSBpbml0X2dldF9iaXRzOChnYiwgcGt0LT5kYXRhLCBwa3QtPnNpemUpKSA8 IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBmcmFtZV90eXBlID0gZ2V0X2JpdHMoZ2Is IDE2KTsKKyAgICBpZiAoZnJhbWVfdHlwZSAhPSBCX0ZSQU1FKQorICAgICAgICBGRlNXQVAoQVZG cmFtZSAqLCBzLT5mcmFtZVsxXSwgcy0+ZnJhbWVbMl0pOworCisgICAgaWYgKChyZXQgPSBmZl9y ZWdldF9idWZmZXIoYXZjdHgsIGZyYW1lLCAwKSkgPCAwKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgc2tpcF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICBzd2l0Y2ggKGZyYW1lX3R5cGUpIHsK KyAgICBjYXNlIElfRlJBTUU6CisgICAgICAgIGZyYW1lLT5waWN0X3R5cGUgPSBBVl9QSUNUVVJF X1RZUEVfSTsKKyAgICAgICAgZnJhbWUtPmZsYWdzIHw9IEFWX0ZSQU1FX0ZMQUdfS0VZOworICAg ICAgICByZXQgPSBkZWNvZGVfaWZyYW1lKCZzLT5zZXFvYmosIGdiLCBmcmFtZSk7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgUF9GUkFNRToKKyAgICAgICAgZnJhbWUtPnBpY3RfdHlwZSA9IEFW X1BJQ1RVUkVfVFlQRV9QOworICAgICAgICBpZiAoIXMtPmZyYW1lWzFdLT5kYXRhWzBdKQorICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIHJldCA9IGRlY29k ZV9iZnJhbWUoJnMtPnNlcW9iaiwgZ2IsIGZyYW1lLCBzLT5mcmFtZVsxXSwgZnJhbWUpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEJfRlJBTUU6CisgICAgICAgIGZyYW1lLT5waWN0X3R5cGUg PSBBVl9QSUNUVVJFX1RZUEVfQjsKKyAgICAgICAgaWYgKCFzLT5mcmFtZVsxXS0+ZGF0YVswXSB8 fAorICAgICAgICAgICAgIXMtPmZyYW1lWzJdLT5kYXRhWzBdKQorICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIHJldCA9IGRlY29kZV9iZnJhbWUoJnMtPnNl cW9iaiwgZ2IsIGZyYW1lLCBzLT5mcmFtZVsxXSwgcy0+ZnJhbWVbMl0pOworICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICB9CisKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9 IGF2X2ZyYW1lX3JlZihhdmZyYW1lLCBmcmFtZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IHJldHVybiByZXQ7CisKKyAgICBpZiAoZnJhbWVfdHlwZSAhPSBCX0ZSQU1FKQorICAgICAgICBG RlNXQVAoQVZGcmFtZSAqLCBzLT5mcmFtZVswXSwgcy0+ZnJhbWVbMl0pOworCisgICAgYXZmcmFt ZS0+Y3JvcF90b3AgPSAzMjsKKyAgICBhdmZyYW1lLT5jcm9wX2xlZnQgPSA2NDsKKworICAgICpn b3RfZnJhbWUgPSAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGh2cW00X2Zs dXNoKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBIVlFNNENvbnRleHQgKnMgPSBhdmN0 eC0+cHJpdl9kYXRhOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAg IGF2X2ZyYW1lX3VucmVmKHMtPmZyYW1lW2ldKTsKK30KKworc3RhdGljIGF2X2NvbGQgaW50IGh2 cW00X2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBIVlFNNENvbnRleHQgKnMg PSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgYXZfZnJlZXAoJnMtPmJ1ZmZlcik7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgICAgIGZmX2ZyZWVfdmxjKCZzLT5zdGF0ZS52 bGNbaV0pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQorICAgICAgICBhdl9mcmFt ZV9mcmVlKCZzLT5mcmFtZVtpXSk7CisKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgRkZDb2Rl YyBmZl9odnFtNF9kZWNvZGVyID0geworICAgIC5wLm5hbWUgICAgICAgICA9ICJodnFtNCIsCisg ICAgQ09ERUNfTE9OR19OQU1FKCJIVlFNNCBWaWRlbyIpLAorICAgIC5wLnR5cGUgICAgICAgICA9 IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAucC5pZCAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9I VlFNNCwKKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoSFZRTTRDb250ZXh0KSwKKyAgICAu aW5pdCAgICAgICAgICAgPSBodnFtNF9pbml0LAorICAgIEZGX0NPREVDX0RFQ09ERV9DQihodnFt NF9kZWNvZGUpLAorICAgIC5mbHVzaCAgICAgICAgICA9IGh2cW00X2ZsdXNoLAorICAgIC5jbG9z ZSAgICAgICAgICA9IGh2cW00X2Nsb3NlLAorICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVD X0NBUF9EUjEsCit9OwotLSAKMi4zOS4xCgo= --00000000000059a61906000d2843 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --00000000000059a61906000d2843--