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 7E0B1425F0 for ; Sun, 24 Apr 2022 10:49:41 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E211468B04B; Sun, 24 Apr 2022 13:49:37 +0300 (EEST) Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AD15668A261 for ; Sun, 24 Apr 2022 13:49:31 +0300 (EEST) Received: by mail-wm1-f48.google.com with SMTP id u17-20020a05600c211100b0038eaf4cdaaeso10782107wml.1 for ; Sun, 24 Apr 2022 03:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=Io67C5zCAe3VtGvEeahJ1MQBIOS/xqXkesvm+6Dgl5E=; b=JOhhnl1qust7ST3ev0qr56l5LOo9qlVtAvSKkFSVyo9npIi1C8oy2j2Krvle60xTRn 5+KiHfPoGv7YBUGyESgdiOa60jgQ/AkM+RNyLJeZlWIZf+WWYZuZ9a6FCcKV4G+S82l3 aVY0M1vhA79BiURK4g0Dp41omfRUveDdRHXa9SQU+8IaAiVQERCS6xkR2vhWbEVAAfy3 +shYqjO3fTKs+SJlL6y4mj9KO5h/uaZM/JPA8LOdEEfP2Ouw5i7JY/wAcPMPswONFCnV GeEkxtd2Ylpmh2z0cMmqFhhgHv5ci78aKceYGgba6SQVJvPm1hUJksA0yNLRdtrEM2BM k0HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=Io67C5zCAe3VtGvEeahJ1MQBIOS/xqXkesvm+6Dgl5E=; b=CK7DO9EME02vBh1Rh2m21xlQDyMursyVNTgmrmxNqxM8MSLmzoG6QrkTlFZm0cBpxy sItSXT7fFD0eXTXEYTKt2+bPivslXu+2IUHWkcXgMwiHnX1Pf/ErbmA10YdlcMBSgvfC H6YP06r9VzvOlXvPOYlZqUSgzm5DAg9nzFh8dtK9qCzYPBxJNqbauYV2GkW8LatshmYM xavWXdDwjH1Ghdd7HvFIv7HfxiYiuRgJ7uwHZ0gAoiIqXvVpk7DoDI3U4Q+oAWyWGhp0 jHvIxnbMqYc+DAmVcayU5fA5xdP7alRF4qwTwX5+Rd34nTsWViEXsjovmUwUMcr7IDsf gkeg== X-Gm-Message-State: AOAM533CNvQdwCSSiMeGVyIxRLQ2hi/RjHLqlCAZYDxVOZXjaFerqIQG /u+lKgokoLwxPLFYKWM+1nfMRGVyNfA= X-Google-Smtp-Source: ABdhPJxEXjV8tW3oE1sqMNr9DuH2SsWYjdY2JVnI88tNg2F4YNRCEOAUObbcGtXJgM3q1icHvwcxtg== X-Received: by 2002:a05:600c:1e89:b0:390:ba57:81c6 with SMTP id be9-20020a05600c1e8900b00390ba5781c6mr12329561wmb.29.1650797370314; Sun, 24 Apr 2022 03:49:30 -0700 (PDT) Received: from localhost.localdomain ([95.168.121.59]) by smtp.gmail.com with ESMTPSA id r3-20020a5d6c63000000b0020a94e82a3dsm6343286wrz.64.2022.04.24.03.49.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Apr 2022 03:49:29 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Sun, 24 Apr 2022 12:51:47 +0200 Message-Id: <20220424105147.87363-1-onemda@gmail.com> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avfilter: add ambisonic decoder 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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: U2lnbmVkLW9mZi1ieTogUGF1bCBCIE1haG9sIDxvbmVtZGFAZ21haWwuY29tPgotLS0KIGxpYmF2 ZmlsdGVyL01ha2VmaWxlICAgICAgIHwgICAgMSArCiBsaWJhdmZpbHRlci9hZl9hbWJpc29uaWMu YyB8IDIyOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmZpbHRl ci9hbGxmaWx0ZXJzLmMgICB8ICAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCAyMjk0IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9hZl9hbWJpc29uaWMuYwoKZGlm ZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKaW5k ZXggYzZiMDJkODcwMy4uN2VmZGUxZTdmNyAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvTWFrZWZp bGUKKysrIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKQEAgLTY3LDYgKzY3LDcgQEAgT0JKUy0kKENP TkZJR19BTEFURU5DWV9GSUxURVIpICAgICAgICAgICAgICAgKz0gZl9sYXRlbmN5Lm8KIE9CSlMt JChDT05GSUdfQUxJTUlURVJfRklMVEVSKSAgICAgICAgICAgICAgICs9IGFmX2FsaW1pdGVyLm8K IE9CSlMtJChDT05GSUdfQUxMUEFTU19GSUxURVIpICAgICAgICAgICAgICAgICs9IGFmX2JpcXVh ZHMubwogT0JKUy0kKENPTkZJR19BTE9PUF9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gZl9s b29wLm8KK09CSlMtJChDT05GSUdfQU1CSVNPTklDX0ZJTFRFUikgICAgICAgICAgICAgICs9IGFm X2FtYmlzb25pYy5vCiBPQkpTLSQoQ09ORklHX0FNRVJHRV9GSUxURVIpICAgICAgICAgICAgICAg ICArPSBhZl9hbWVyZ2UubwogT0JKUy0kKENPTkZJR19BTUVUQURBVEFfRklMVEVSKSAgICAgICAg ICAgICAgKz0gZl9tZXRhZGF0YS5vCiBPQkpTLSQoQ09ORklHX0FNSVhfRklMVEVSKSAgICAgICAg ICAgICAgICAgICArPSBhZl9hbWl4Lm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FmX2FtYmlz b25pYy5jIGIvbGliYXZmaWx0ZXIvYWZfYW1iaXNvbmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uMmI0MmNjOTAzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zmls dGVyL2FmX2FtYmlzb25pYy5jCkBAIC0wLDAgKzEsMjI5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAyMiBQYXVsIEIgTWFob2wKKyAqIENvcHlyaWdodCAoYykgMjAxNyBTYW5jaGl0IFNpbmhh CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxmbG9h dC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAi bGliYXZ1dGlsL2F2c3RyaW5nLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NoYW5uZWxfbGF5b3V0 LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2Zsb2F0X2RzcC5oIgorI2luY2x1ZGUgImxpYmF2dXRp bC9vcHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJhdWRp by5oIgorI2luY2x1ZGUgImF2ZmlsdGVyLmgiCisjaW5jbHVkZSAiZm9ybWF0cy5oIgorI2luY2x1 ZGUgImludGVybmFsLmgiCisKKyNkZWZpbmUgRVZFTiAwCisjZGVmaW5lIE9ERCAxCisjZGVmaW5l IE1BWF9PUkRFUiAzCisjZGVmaW5lIFNRUih4KSAoKHgpICogKHgpKQorI2RlZmluZSBNQVhfQ0hB Tk5FTFMgU1FSKE1BWF9PUkRFUiArIDEpCisKK2VudW0gQV9OQU1FIHsKKyAgICBBX1csIEFfWSwg QV9aLCBBX1gsIEFfViwgQV9ULCBBX1IsIEFfUywgQV9VLCBBX1EsIEFfTywgQV9NLCBBX0ssIEFf TCwgQV9OLCBBX1AsCit9OworCitlbnVtIE5lYXJGaWVsZFR5cGUgeworICAgIE5GX0FVVE8gPSAt MSwKKyAgICBORl9OT05FLAorICAgIE5GX0lOLAorICAgIE5GX09VVCwKKyAgICBOQl9ORlRZUEVT LAorfTsKKworZW51bSBQcmVjaXNpb25UeXBlIHsKKyAgICBQX0FVVE8gPSAtMSwKKyAgICBQX1NJ TkdMRSwKKyAgICBQX0RPVUJMRSwKKyAgICBOQl9QVFlQRVMsCit9OworCitlbnVtIFBUeXBlcyB7 CisgICAgUFRfQU1QLAorICAgIFBUX1JNUywKKyAgICBQVF9FTkVSR1ksCisgICAgUFRfTkJUWVBF UywKK307CisKK2VudW0gTm9ybVR5cGUgeworICAgIE4zRCwKKyAgICBTTjNELAorICAgIEZVTUEs CisgICAgTkJfTlRZUEVTLAorfTsKKworZW51bSBEaXJlY3Rpb25UeXBlIHsKKyAgICBEX1gsCisg ICAgRF9ZLAorICAgIERfWiwKKyAgICBEX0MsCisgICAgTkJfRFRZUEVTLAorfTsKKworZW51bSBT ZXF1ZW5jZVR5cGUgeworICAgIE1fQUNOLAorICAgIE1fRlVNQSwKKyAgICBNX1NJRCwKKyAgICBO Ql9NVFlQRVMsCit9OworCitlbnVtIExheW91dHMgeworICAgIE1PTk8sCisgICAgU1RFUkVPLAor ICAgIFNURVJFT19ET1dOTUlYLAorICAgIFNVUlJPVU5ELAorICAgIEwyXzEsCisgICAgVFJJQU5H TEUsCisgICAgUVVBRCwKKyAgICBTUVVBUkUsCisgICAgTDRfMCwKKyAgICBMNV8wLAorICAgIEw1 XzBfU0lERSwKKyAgICBMNl8wLAorICAgIEw3XzAsCisgICAgVEVUUkEsCisgICAgQ1VCRSwKKyAg ICBOQl9MQVlPVVRTLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgTmVhckZpZWxkIHsKKyAgICBkb3Vi bGUgZFtNQVhfT1JERVJdOworICAgIGRvdWJsZSB6W01BWF9PUkRFUl07Cit9IE5lYXJGaWVsZDsK KwordHlwZWRlZiBzdHJ1Y3QgWG92ZXIgeworICAgIGRvdWJsZSBiWzNdOworICAgIGRvdWJsZSBh WzNdOworICAgIGRvdWJsZSB3WzJdOworfSBYb3ZlcjsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBn YWluc18yZFtdWzRdID0KK3sKKyAgICB7IDEgfSwKKyAgICB7IDEsIDAuNzA3MTA3IH0sCisgICAg eyAxLCAwLjg2NjAyNSwgMC41IH0sCisgICAgeyAxLCAwLjkyMzg4LCAwLjcwNzEwNywgMC4zODI2 ODMgfSwKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZ2FpbnNfM2RbXVs0XSA9Cit7CisgICAg eyAxIH0sCisgICAgeyAxLCAwLjU3NzM1MDI3IH0sCisgICAgeyAxLCAwLjc3NDU5NywgMC40IH0s CisgICAgeyAxLCAwLjg2MTEzNiwgMC42MTIzMzQsIDAuMzA0NzQ3IH0sCit9OworCitzdGF0aWMg Y29uc3QgZG91YmxlIHNhbWVfZGlzdGFuY2VbXSA9Cit7CisgICAgMSwgMSwgMSwgMSwgMSwgMSwg MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUg Y3ViZV9hemltdXRoW10gPQoreworICAgIDMxNSwgNDUsIDEzNSwgMjI1LCAzMTUsIDQ1LCAxMzUs IDIyNSwKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgY3ViZV9lbGV2YXRpb25bXSA9Cit7Cisg ICAgIDM1LjI2NDM5LCAgMzUuMjY0MzksICAzNS4yNjQzOSwgIDM1LjI2NDM5LAorICAgIC0zNS4y NjQzOSwgLTM1LjI2NDM5LCAtMzUuMjY0MzksIC0zNS4yNjQzOQorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCB7CisgICAgY29uc3QgaW50ICAgICAgICAgICAgICBvcmRlcjsKKyAgICBjb25zdCBp bnQgICAgICAgICAgICAgIGlucHV0czsKKyAgICBjb25zdCBpbnQgICAgICAgICAgICAgIHNwZWFr ZXJzOworICAgIGNvbnN0IGludCAgICAgICAgICAgICAgbmVhcl9maWVsZDsKKyAgICBjb25zdCBp bnQgICAgICAgICAgICAgIHR5cGU7CisgICAgY29uc3QgZG91YmxlICAgICAgICAgICB4b3ZlcjsK KyAgICBjb25zdCBBVkNoYW5uZWxMYXlvdXQgIG91dGxheW91dDsKKyAgICBjb25zdCBkb3VibGUg ICAgICAgICAgKnNwZWFrZXJzX2F6aW11dGg7CisgICAgY29uc3QgZG91YmxlICAgICAgICAgICpz cGVha2Vyc19lbGV2YXRpb247CisgICAgY29uc3QgZG91YmxlICAgICAgICAgICpzcGVha2Vyc19k aXN0YW5jZTsKK30gYW1iaXNvbmljX3RhYltdID0geworICAgIFtNT05PXSA9IHsKKyAgICAgICAg Lm9yZGVyID0gMCwKKyAgICAgICAgLmlucHV0cyA9IDEsCisgICAgICAgIC5zcGVha2VycyA9IDEs CisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisg ICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX01P Tk8sCisgICAgICAgIC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVsxXSl7IDAuIH0s CisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5jZSA9IChjb25zdCBkb3VibGVbMV0peyAxLiB9LAor ICAgIH0sCisgICAgW1NURVJFT10gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5p bnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSAyLAorICAgICAgICAubmVhcl9maWVsZCA9 IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFW Q2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sCisgICAgICAgIC5zcGVha2Vy c19hemltdXRoID0gKGNvbnN0IGRvdWJsZVsyXSl7IC0zMCwgMzB9LAorICAgICAgICAuc3BlYWtl cnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAgW1NURVJFT19ET1dOTUlY XSA9IHsKKyAgICAgICAgLm9yZGVyID0gMSwKKyAgICAgICAgLmlucHV0cyA9IDQsCisgICAgICAg IC5zcGVha2VycyA9IDIsCisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAg LnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NI QU5ORUxfTEFZT1VUX1NURVJFT19ET1dOTUlYLAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9 IChjb25zdCBkb3VibGVbMl0peyAtOTAsIDkwIH0sCisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5j ZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKKyAgICBbU1VSUk9VTkRdID0geworICAgICAgICAu b3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gMywK KyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAg ICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfU1VS Uk9VTkQsCisgICAgICAgIC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVszXSl7IC00 NSwgNDUsIDAgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwK KyAgICB9LAorICAgIFtMMl8xXSA9IHsKKyAgICAgICAgLm9yZGVyID0gMSwKKyAgICAgICAgLmlu cHV0cyA9IDQsCisgICAgICAgIC5zcGVha2VycyA9IDMsCisgICAgICAgIC5uZWFyX2ZpZWxkID0g TkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlvdXQgPSAoQVZD aGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUXzJfMSwKKyAgICAgICAgLnNwZWFrZXJzX2F6 aW11dGggPSAoY29uc3QgZG91YmxlWzNdKXsgLTQ1LCA0NSwgMTgwIH0sCisgICAgICAgIC5zcGVh a2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKKyAgICBbVFJJQU5HTEVdID0g eworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNw ZWFrZXJzID0gMywKKyAgICAgICAgLnR5cGUgPSAxLAorICAgICAgICAubmVhcl9maWVsZCA9IE5G X05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hh bm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF9TVVJST1VORCwKKyAgICAgICAgLnNwZWFrZXJz X2F6aW11dGggPSAoY29uc3QgZG91YmxlWzNdKXsgLTEyMCwgMTIwLCAwIH0sCisgICAgICAgIC5z cGVha2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKKyAgICBbUVVBRF0gPSB7 CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAgICAgICAuc3Bl YWtlcnMgPSA0LAorICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54b3Zl ciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9DSEFOTkVM X0xBWU9VVF9RVUFELAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVb NF0peyAtNDUsIDQ1LCAtMTM1LCAxMzUgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0g c2FtZV9kaXN0YW5jZSwKKyAgICB9LAorICAgIFtTUVVBUkVdID0geworICAgICAgICAub3JkZXIg PSAxLAorICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gNCwKKyAgICAg ICAgLnR5cGUgPSAxLAorICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54 b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9DSEFO TkVMX0xBWU9VVF80UE9JTlQwLAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBk b3VibGVbNF0peyAwLCAtOTAsIDE4MCwgOTAgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNl ID0gc2FtZV9kaXN0YW5jZSwKKyAgICB9LAorICAgIFtMNF8wXSA9IHsKKyAgICAgICAgLm9yZGVy ID0gMSwKKyAgICAgICAgLmlucHV0cyA9IDQsCisgICAgICAgIC5zcGVha2VycyA9IDQsCisgICAg ICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAgICAg IC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUXzRQT0lOVDAs CisgICAgICAgIC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVs0XSl7IC0zMCwgMzAs IDAsIDE4MCB9LAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAor ICAgIH0sCisgICAgW0w1XzBdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5w dXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gNSwKKyAgICAgICAgLm5lYXJfZmllbGQgPSBO Rl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9IChBVkNo YW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMF9CQUNLLAorICAgICAgICAuc3Bl YWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbNV0peyAtMzAsIDMwLCAwLCAtMTQ1LCAxNDUg fSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwKKyAgICB9LAor ICAgIFtMNV8wX1NJREVdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRz ID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gNSwKKyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9O T05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9IChBVkNoYW5u ZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMCwKKyAgICAgICAgLnNwZWFrZXJzX2F6 aW11dGggPSAoY29uc3QgZG91YmxlWzVdKXsgLTMwLCAzMCwgMCwgLTExMCwgMTEwIH0sCisgICAg ICAgIC5zcGVha2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKKyAgICBbTDZf MF0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAgICAg ICAuc3BlYWtlcnMgPSA2LAorICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAg IC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9D SEFOTkVMX0xBWU9VVF82UE9JTlQwLAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25z dCBkb3VibGVbNl0peyAtMzAsIDMwLCAwLCAxODAsIC0xMTAsIDExMCB9LAorICAgICAgICAuc3Bl YWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAgW0w3XzBdID0gewor ICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFr ZXJzID0gNywKKyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIg PSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9M QVlPVVRfN1BPSU5UMCwKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGggPSAoY29uc3QgZG91Ymxl WzddKXsgLTMwLCAzMCwgMCwgLTE0NSwgMTQ1LCAtMTEwLCAxMTAgfSwKKyAgICAgICAgLnNwZWFr ZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwKKyAgICB9LAorICAgIFtURVRSQV0gPSB7Cisg ICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtl cnMgPSA0LAorICAgICAgICAudHlwZSA9IDIsCisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9O RSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVs TGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1FVQUQsCisgICAgICAgIC5zcGVha2Vyc19hemltdXRo ID0gKGNvbnN0IGRvdWJsZVs0XSl7IC05MCwgOTAsIDAsIDE4MCB9LAorICAgICAgICAuc3BlYWtl cnNfZWxldmF0aW9uID0gKGNvbnN0IGRvdWJsZVs0XSl7IC0zNS4zLCAtMzUuMywgMzUuMywgMzUu MyB9LAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0s CisgICAgW0NVQkVdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0g NCwKKyAgICAgICAgLnNwZWFrZXJzID0gOCwKKyAgICAgICAgLnR5cGUgPSAyLAorICAgICAgICAu bmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0 bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQxLAorICAg ICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IGN1YmVfYXppbXV0aCwKKyAgICAgICAgLnNwZWFrZXJz X2VsZXZhdGlvbiA9IGN1YmVfZWxldmF0aW9uLAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2Ug PSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCit9OworCit0eXBlZGVmIHN0cnVjdCBBbWJpc29uaWND b250ZXh0IHsKKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKKyAgICBpbnQgb3JkZXI7ICAgICAg ICAgICAgICAgICAgICAvKiBPcmRlciBvZiBhbWJpc29uaWMgKi8KKyAgICBpbnQgbGV2ZWw7ICAg ICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgTGV2ZWwgY29tcGVuc2F0aW9uICovCisgICAgZW51 bSBMYXlvdXRzIGxheW91dDsgICAgICAgICAgLyogT3V0cHV0IHNwZWFrZXIgbGF5b3V0ICovCisg ICAgZW51bSBOb3JtVHlwZSBzY2FsaW5nX25vcm07ICAgLyogTm9ybWFsaXphdGlvbiBUeXBlICov CisgICAgZW51bSBQcmVjaXNpb25UeXBlIHByZWNpc2lvbjsgLyogUHJvY2Vzc2luZyBQcmVjaXNp b24gVHlwZSAqLworICAgIGVudW0gU2VxdWVuY2VUeXBlIHNlcTsgICAgICAgIC8qIElucHV0IENo YW5uZWwgc2VxdWVuY2UgdHlwZSAqLworICAgIGVudW0gTmVhckZpZWxkVHlwZSBuZWFyX2ZpZWxk OyAvKiBOZWFyIEZpZWxkIGNvbXBlbnNhdGlvbiB0eXBlICovCisKKyAgICBpbnQgaW52ZXJ0W05C X0RUWVBFU107ICAgICAgICAvKiBBeGlzIE9kZC9FdmVuIEludmVydCAqLworICAgIGRvdWJsZSBn YWluWzJdW05CX0RUWVBFU107ICAgIC8qIEF4aXMgT2RkL0V2ZW4gR2FpbnMgKi8KKyAgICBkb3Vi bGUgcGdhaW5zWzJdW01BWF9PUkRFUisxXTsvKiBMRi9IRiBwZXJjZXB0dWFsIGdhaW5zICovCisK KyAgICBkb3VibGUgeWF3OyAgICAgICAgICAgICAgICAgICAvKiBBbmdsZSBmb3IgeWF3KHgpIHJv dGF0aW9uICovCisgICAgZG91YmxlIHBpdGNoOyAgICAgICAgICAgICAgICAgLyogQW5nbGUgZm9y IHBpdGNoKHkpIHJvdGF0aW9uICovCisgICAgZG91YmxlIHJvbGw7ICAgICAgICAgICAgICAgICAg LyogQW5nbGUgZm9yIHJvbGwoeikgcm90YXRpb24gKi8KKworICAgIGludCBwZ3R5cGU7CisgICAg aW50IG1heF9jaGFubmVsczsgICAgICAgICAgICAgLyogTWF4IENoYW5uZWxzICovCisgICAgaW50 IG1hdHJpeF9ub3JtOworICAgIGRvdWJsZSBtYXRjaGluZzsKKworICAgIGRvdWJsZSB0ZW1wOwor ICAgIGRvdWJsZSB4b3Zlcl9mcmVxOworICAgIGRvdWJsZSB4b3Zlcl9yYXRpbzsKKworICAgIFhv dmVyIHhvdmVyWzJdW01BWF9DSEFOTkVMU107CisgICAgTmVhckZpZWxkIG5mWzJdW01BWF9DSEFO TkVMU107CisKKyAgICBpbnQgICAgc2VxX3RhYltOQl9NVFlQRVNdW01BWF9DSEFOTkVMU107Cisg ICAgaW50ICAgIHNlcV9tYXBbTUFYX0NIQU5ORUxTXTsKKyAgICBkb3VibGUgbm9ybV90YWJbTkJf TlRZUEVTXVtNQVhfQ0hBTk5FTFNdOworICAgIGRvdWJsZSByb3RhdGVfbWF0W01BWF9DSEFOTkVM U11bTUFYX0NIQU5ORUxTXTsKKyAgICBkb3VibGUgZG9taW5hdGVfbWF0WzRdWzRdOworICAgIGRv dWJsZSBkaXJlY3Rpb25fbWF0WzRdWzRdOworICAgIGRvdWJsZSB6b29tX21hdFs0XVs0XTsKKyAg ICBkb3VibGUgZm9jdXNfbWF0WzRdWzRdOworICAgIGRvdWJsZSBwdXNoX21hdFs0XVs0XTsKKyAg ICBkb3VibGUgcHJlc3NfbWF0WzRdWzRdOworICAgIGRvdWJsZSBtaXJyb3JfbWF0W01BWF9DSEFO TkVMU107CisgICAgZG91YmxlIHRyYW5zZm9ybV9tYXRbTUFYX0NIQU5ORUxTXVtNQVhfQ0hBTk5F TFNdOworICAgIGRvdWJsZSBkZWNvZGVfbWF0W01BWF9DSEFOTkVMU11bTUFYX0NIQU5ORUxTXTsK KyAgICBkb3VibGUgdVtNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU107CisgICAgZG91YmxlIHZb TUFYX0NIQU5ORUxTXVtNQVhfQ0hBTk5FTFNdOworICAgIGRvdWJsZSB3W01BWF9DSEFOTkVMU107 CisgICAgZG91YmxlIGxldmVsX3RhYltNQVhfQ0hBTk5FTFNdOworICAgIGRvdWJsZSBnYWluc190 YWJbMl1bTUFYX0NIQU5ORUxTXTsKKyAgICBkb3VibGUgZG9taW5hbmNlWzRdOworICAgIGRvdWJs ZSBkaXJlY3Rpb25bNF07CisgICAgZG91YmxlIHpvb21bNF07CisgICAgZG91YmxlIGZvY3VzWzRd OworICAgIGRvdWJsZSBwdXNoWzRdOworICAgIGRvdWJsZSBwcmVzc1s0XTsKKworICAgIEFWRnJh bWUgKnNmcmFtZTsKKyAgICBBVkZyYW1lICpyZnJhbWU7CisgICAgQVZGcmFtZSAqZnJhbWUyOwor CisgICAgdm9pZCAoKm5mX2luaXRbTUFYX09SREVSXSkoTmVhckZpZWxkICpuZiwgZG91YmxlIHJh ZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3BlZWQsIGRvdWJs ZSByYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBnYWluKTsKKyAg ICB2b2lkICgqbmZfcHJvY2Vzc1tNQVhfT1JERVJdKShOZWFyRmllbGQgKm5mLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBjaCwgaW50IGFkZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgZ2Fpbik7CisgICAgdm9pZCAoKnByb2Nlc3MpKEFWRmlsdGVy Q29udGV4dCAqY3R4LCBBVkZyYW1lICppbiwgQVZGcmFtZSAqb3V0KTsKKworICAgIEFWRmxvYXRE U1BDb250ZXh0ICpmZHNwOworfSBBbWJpc29uaWNDb250ZXh0OworCisjZGVmaW5lIE9GRlNFVCh4 KSBvZmZzZXRvZihBbWJpc29uaWNDb250ZXh0LHgpCisjZGVmaW5lIEFGIEFWX09QVF9GTEFHX0FV RElPX1BBUkFNfEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTQorI2RlZmluZSBBRlQgQVZfT1BU X0ZMQUdfQVVESU9fUEFSQU18QVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNfEFWX09QVF9GTEFH X1JVTlRJTUVfUEFSQU0KKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIGFtYmlzb25pY19vcHRpb25z W10gPSB7CisgICAgeyAibGF5b3V0IiwgImxheW91dCBvZiBvdXRwdXQiLCBPRkZTRVQobGF5b3V0 KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND1TVEVSRU99LCAwLCBOQl9MQVlPVVRTLTEsIEFGICwg Imx5dCJ9LAorICAgIHsgICAibW9ubyIsICAgIm1vbm8gbGF5b3V0IiwgICAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQ9TU9OT30sICAgMCwgMCwgQUYgLCAibHl0In0sCisgICAgeyAgICJzdGVy ZW8iLCAic3RlcmVvIGxheW91dCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1TVEVSRU99 LCAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgImRvd25taXgiLCJzdGVyZW8gZG93bm1peCIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1TVEVSRU9fRE9XTk1JWH0sIDAsIDAsIEFGICwg Imx5dCJ9LAorICAgIHsgICAiMy4wIiwgICAgIjMuMCBsYXlvdXQiLCAgICAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQ9U1VSUk9VTkR9LCAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgIjMu MChiYWNrKSIsIjMuMChiYWNrKSBsYXlvdXQiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9 TDJfMX0sIDAsIDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAidHJpYW5nbGUiLCJ0cmlhbmdsZSBs YXlvdXQiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9VFJJQU5HTEV9LCAwLCAwLCBBRiAs ICJseXQifSwKKyAgICB7ICAgInF1YWQiLCAgICJxdWFkIGxheW91dCIsICAgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0PVFVQUR9LCAgIDAsIDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAic3F1 YXJlIiwgInNxdWFyZSBsYXlvdXQiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9U1FVQVJF fSwgMCwgMCwgQUYgLCAibHl0In0sCisgICAgeyAgICI0LjAiLCAgICAiNC4wIGxheW91dCIsICAg IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1MNF8wfSwgICAwLCAwLCBBRiAsICJseXQifSwK KyAgICB7ICAgIjUuMCIsICAgICI1LjAgbGF5b3V0IiwgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IHsuaTY0PUw1XzB9LCAgIDAsIDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAiNS4wKHNpZGUpIiwg IjUuMChzaWRlKSBsYXlvdXQiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TDVfMF9TSURF fSwgMCwgMCwgQUYgLCAibHl0In0sCisgICAgeyAgICI2LjAiLCAgICAiNi4wIGxheW91dCIsICAg IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1MNl8wfSwgICAwLCAwLCBBRiAsICJseXQifSwK KyAgICB7ICAgIjcuMCIsICAgICI3LjAgbGF5b3V0IiwgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IHsuaTY0PUw3XzB9LCAgIDAsIDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAidGV0cmEiLCAidGV0 cmFoZWRyb24gbGF5b3V0IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVRFVFJBfSwgICAw LCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgImN1YmUiLCAgICJjdWJlIGxheW91dCIsICAgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUNVQkV9LCAgIDAsIDAsIEFGICwgImx5dCJ9LAorICAg IHsgInNlcXVlbmNlIiwgImlucHV0IGNoYW5uZWwgc2VxdWVuY2UiLCBPRkZTRVQoc2VxKSwgQVZf T1BUX1RZUEVfSU5ULCB7Lmk2ND1NX0FDTn0sICAwLCBOQl9NVFlQRVMtMSwgQUYsICJzZXEifSwK KyAgICB7ICAgImFjbiIsICAiQUNOIiwgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1NX0FD Tn0sICAwLCAwLCBBRiwgInNlcSJ9LAorICAgIHsgICAiZnVtYSIsICJGdU1hIiwgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0PU1fRlVNQX0sIDAsIDAsIEFGLCAic2VxIn0sCisgICAgeyAgICJz aWQiLCAgIlNJRCIsICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TV9TSUR9LCAgMCwgMCwg QUYsICJzZXEifSwKKyAgICB7ICJzY2FsaW5nIiwgImlucHV0IHNjYWxpbmcgZm9ybWF0IiwgT0ZG U0VUKHNjYWxpbmdfbm9ybSksIEFWX09QVF9UWVBFX0lOVCwgICB7Lmk2ND1TTjNEfSwgMCwgTkJf TlRZUEVTLTEsIEFGLCAic2NsIn0sCisgICAgeyAgICJuM2QiLCAgIk4zRCBzY2FsaW5nIChub3Jt YWxpc2VkKSIsICAgICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1OM0R9LCAgMCwgMCwg QUYsICJzY2wifSwKKyAgICB7ICAgInNuM2QiLCAiU04zRCBzY2FsaW5nIChzZW1pLW5vcm1hbGlz ZWQpIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVNOM0R9LCAwLCAwLCBBRiwgInNjbCJ9 LAorICAgIHsgICAiZnVtYSIsICJmdXJzZSBtYWxoYW0gc2NhbGluZyIsICAgICAgICAgICAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9RlVNQX0sIDAsIDAsIEFGLCAic2NsIn0sCisgICAgeyAi bmVhcmZpZWxkIiwgIm5lYXItZmllbGQgY29tcGVuc3RhdGlvbiIsIE9GRlNFVChuZWFyX2ZpZWxk KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND1ORl9BVVRPfSwgTkZfQVVUTywgTkJfTkZUWVBFUy0x LCBBRiwgIm5mIn0sCisgICAgeyAgICJhdXRvIiwgImF1dG8iLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgey5pNjQ9TkZfQVVUT30sIDAsIDAsIEFGLCAibmYifSwKKyAgICB7ICAgIm5vbmUiLCAibm9u ZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1ORl9OT05FfSwgMCwgMCwgQUYsICJuZiJ9 LAorICAgIHsgICAiaW4iLCAgICJpbiIsICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PU5G X0lOfSwgICAwLCAwLCBBRiwgIm5mIn0sCisgICAgeyAgICJvdXQiLCAgIm91dCIsICAwLCBBVl9P UFRfVFlQRV9DT05TVCwgey5pNjQ9TkZfT1VUfSwgIDAsIDAsIEFGLCAibmYifSwKKyAgICB7ICJt YXRjaGluZyIsICJzZXQgbWF0Y2hpbmcgZm9yIGRlY29kZSBtYXRyaXgiLCBPRkZTRVQobWF0Y2hp bmcpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTB9LCAwLiwgMS4sIEFGLCAibWF0Y2hpbmci IH0sCisgICAgeyAgICJtb2RlIiwgICAic2V0IGV4YWN0IG1vZGUgbWF0Y2hpbmciLCAgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsuZGJsPTB9LCAwLCAwLCBBRiwgIm1hdGNoaW5nIiB9LAorICAgIHsg ICAiZW5lcmd5IiwgInNldCBldmVuIGVuZXJneSBtYXRjaGluZyIsIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7LmRibD0xfSwgMCwgMCwgQUYsICJtYXRjaGluZyIgfSwKKyAgICB7ICJ4b3ZlcmZyZXEi LCAiY3Jvc3Mtb3ZlciBmcmVxdWVuY3kiLCBPRkZTRVQoeG92ZXJfZnJlcSksIEFWX09QVF9UWVBF X0RPVUJMRSwgey5kYmw9LTEufSwgLTEuLCA4MDAuLCBBRiB9LAorICAgIHsgInhvdmVycmF0aW8i LCAiY3Jvc3Mtb3ZlciBIRi9MRiByYXRpbyIsIE9GRlNFVCh4b3Zlcl9yYXRpbyksIEFWX09QVF9U WVBFX0RPVUJMRSwgey5kYmw9MC59LCAtMzAuLCAzMC4sIEFGIH0sCisgICAgeyAicGd0eXBlIiwg InNldCBwZXJjZXB0dWFsIExGL0hGIGdhaW5zIHR5cGUiLCBPRkZTRVQocGd0eXBlKSwgQVZfT1BU X1RZUEVfSU5ULCB7Lmk2ND1QVF9STVN9LCAwLCBQVF9OQlRZUEVTLTEsIEFGLCAicGd0IiB9LAor ICAgIHsgICAiYW1wbGl0dWRlIiwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBU X0FNUH0sICAgIDAsIDAsIEFGLCAicGd0IiB9LAorICAgIHsgICAicm1zIiwgICAgICAgTlVMTCwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBUX1JNU30sICAgIDAsIDAsIEFGLCAicGd0IiB9 LAorICAgIHsgICAiZW5lcmd5IiwgICAgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0 PVBUX0VORVJHWX0sIDAsIDAsIEFGLCAicGd0IiB9LAorICAgIHsgInRlbXAiLCAic2V0IHRlbXBl cmF0dXJlIMKwQyIsIE9GRlNFVCh0ZW1wKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0yMC59 LCAtNTAuLCA1MC4sIEFGIH0sCisgICAgeyAieWF3IiwgICAgImFuZ2xlIGZvciB5YXcgKHgtYXhp cykiLCAgIE9GRlNFVCh5YXcpLCAgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LCAtMTgw LiwgMTgwLiwgQUZUIH0sCisgICAgeyAicGl0Y2giLCAgImFuZ2xlIGZvciBwaXRjaCAoeS1heGlz KSIsIE9GRlNFVChwaXRjaCksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LCAtMTgwLiwg MTgwLiwgQUZUIH0sCisgICAgeyAicm9sbCIsICAgImFuZ2xlIGZvciByb2xsICh6LWF4aXMpIiwg IE9GRlNFVChyb2xsKSwgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LCAtMTgwLiwgMTgw LiwgQUZUIH0sCisgICAgeyAibGV2ZWwiLCAgIm91dHB1dCBsZXZlbCBjb21wZW5zYXRpb24iLCBP RkZTRVQobGV2ZWwpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2ND0xfSwgMCwgMSwgQUYgfSwKKyAg ICB7ICJub3JtIiwgICAiZW5hYmxlIG1hdHJpeCBub3JtYWxpemF0aW9uIiwgT0ZGU0VUKG1hdHJp eF9ub3JtKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0sIDAsIDEsIEFGIH0sCisgICAgeyAi cHJlY2lzaW9uIiwgInByb2Nlc3NpbmcgcHJlY2lzaW9uIiwgT0ZGU0VUKHByZWNpc2lvbiksIEFW X09QVF9UWVBFX0lOVCwgey5pNjQ9UF9BVVRPfSwgUF9BVVRPLCBOQl9QVFlQRVMtMSwgQUYsICJw cmUifSwKKyAgICB7ICAgImF1dG8iLCAgICJhdXRvIiwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1QX0FVVE99LCAwLCAwLCBBRiwgInByZSJ9 LAorICAgIHsgICAic2luZ2xlIiwgInNpbmdsZSBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24iLCAg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBfU0lOR0xFfSwgMCwgMCwgQUYsICJwcmUifSwK KyAgICB7ICAgImRvdWJsZSIsICJkb3VibGUgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uIiAsIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1QX0RPVUJMRX0sIDAsIDAsIEFGLCAicHJlIn0sCisg ICAgeyAiaW52ZXJ0X3giLCAiaW52ZXJ0IFgiLCBPRkZTRVQoaW52ZXJ0W0RfWF0pLCBBVl9PUFRf VFlQRV9GTEFHUywgey5pNjQ9MH0sIDAsIDMsIEFGLCAiaXgifSwKKyAgICB7ICAgIm9kZCIsICAi aW52ZXJ0IG9kZCBoYXJtb25pY3MiLCAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PTF9LCAw LCAwLCBBRiwgIml4In0sCisgICAgeyAgICJldmVuIiwgImludmVydCBldmVuIGhhcm1vbmljcyIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND0yfSwgMCwgMCwgQUYsICJpeCJ9LAorICAgIHsg ImludmVydF95IiwgImludmVydCBZIiwgT0ZGU0VUKGludmVydFtEX1ldKSwgQVZfT1BUX1RZUEVf RkxBR1MsIHsuaTY0PTB9LCAwLCAzLCBBRiwgIml5In0sCisgICAgeyAgICJvZGQiLCAgImludmVy dCBvZGQgaGFybW9uaWNzIiwgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND0xfSwgMCwgMCwg QUYsICJpeSJ9LAorICAgIHsgICAiZXZlbiIsICJpbnZlcnQgZXZlbiBoYXJtb25pY3MiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9Mn0sIDAsIDAsIEFGLCAiaXkifSwKKyAgICB7ICJpbnZl cnRfeiIsICJpbnZlcnQgWiIsIE9GRlNFVChpbnZlcnRbRF9aXSksIEFWX09QVF9UWVBFX0ZMQUdT LCB7Lmk2ND0wfSwgMCwgMywgQUYsICJpeiJ9LAorICAgIHsgICAib2RkIiwgICJpbnZlcnQgb2Rk IGhhcm1vbmljcyIsICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9MX0sIDAsIDAsIEFGLCAi aXoifSwKKyAgICB7ICAgImV2ZW4iLCAiaW52ZXJ0IGV2ZW4gaGFybW9uaWNzIiwgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0PTJ9LCAwLCAwLCBBRiwgIml6In0sCisgICAgeyAiaW52ZXJ0X2Mi LCAiY2lyY3VsYXIgaW52ZXJ0IiwgT0ZGU0VUKGludmVydFtEX0NdKSwgQVZfT1BUX1RZUEVfQk9P TCwgey5pNjQ9MH0sIDAsIDEsIEFGfSwKKyAgICB7ICJ4X29kZCIsICAiWCBvZGQgaGFybW9uaWNz IGdhaW4iLCAgT0ZGU0VUKGdhaW5bT0REXVtEX1hdKSwgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5k Ymw9MS59LCAwLCAyLiwgQUYgfSwKKyAgICB7ICJ4X2V2ZW4iLCAiWCBldmVuIGhhcm1vbmljcyBn YWluIiwgT0ZGU0VUKGdhaW5bRVZFTl1bRF9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9 MS59LCAwLCAyLiwgQUYgfSwKKyAgICB7ICJ5X29kZCIsICAiWSBvZGQgaGFybW9uaWNzIGdhaW4i LCAgT0ZGU0VUKGdhaW5bT0REXVtEX1ldKSwgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MS59 LCAwLCAyLiwgQUYgfSwKKyAgICB7ICJ5X2V2ZW4iLCAiWSBldmVuIGhhcm1vbmljcyBnYWluIiwg T0ZGU0VUKGdhaW5bRVZFTl1bRF9ZXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MS59LCAw LCAyLiwgQUYgfSwKKyAgICB7ICJ6X29kZCIsICAiWiBvZGQgaGFybW9uaWNzIGdhaW4iLCAgT0ZG U0VUKGdhaW5bT0REXVtEX1pdKSwgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MS59LCAwLCAy LiwgQUYgfSwKKyAgICB7ICJ6X2V2ZW4iLCAiWiBldmVuIGhhcm1vbmljcyBnYWluIiwgT0ZGU0VU KGdhaW5bRVZFTl1bRF9aXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MS59LCAwLCAyLiwg QUYgfSwKKyAgICB7ICJjX2dhaW4iLCAic2V0IGNpcmN1bGFyIGdhaW4iLCAgICAgT0ZGU0VUKGdh aW5bMF1bRF9DXSksICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MS59LCAwLCAyLiwgQUYg fSwKKyAgICB7ICJmX2RvbSIsICAic2V0IGZvcndhcmQgZG9taW5hbmNlIiwgT0ZGU0VUKGRvbWlu YW5jZVtBX1hdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTEyLDEyLixBRlQgfSwK KyAgICB7ICJzX2RvbSIsICAic2V0IHNpZGUgZG9taW5hbmNlIiwgICAgT0ZGU0VUKGRvbWluYW5j ZVtBX1ldKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTEyLDEyLixBRlQgfSwKKyAg ICB7ICJ2X2RvbSIsICAic2V0IHZlcnRpY2FsIGRvbWluYW5jZSIsT0ZGU0VUKGRvbWluYW5jZVtB X1pdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTEyLDEyLixBRlQgfSwKKyAgICB7 ICJvX2RpciIsICAic2V0IG9yaWdpbiBzb3VuZGZpZWxkIGRpcmVjdGl2aXR5IiwgT0ZGU0VUKGRp cmVjdGlvbltBX1ddKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sMCw5MC4sQUZUIH0s CisgICAgeyAieF9kaXIiLCAgInNldCBYLWF4aXMgc291bmRmaWVsZCBkaXJlY3Rpdml0eSIsIE9G RlNFVChkaXJlY3Rpb25bQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LDAsOTAu LEFGVCB9LAorICAgIHsgInlfZGlyIiwgICJzZXQgWS1heGlzIHNvdW5kZmllbGQgZGlyZWN0aXZp dHkiLCBPRkZTRVQoZGlyZWN0aW9uW0FfWV0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAu fSwwLDkwLixBRlQgfSwKKyAgICB7ICJ6X2RpciIsICAic2V0IFotYXhpcyBzb3VuZGZpZWxkIGRp cmVjdGl2aXR5IiwgT0ZGU0VUKGRpcmVjdGlvbltBX1pdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7 LmRibD0wLn0sMCw5MC4sQUZUIH0sCisgICAgeyAieF96b29tIiwgInNldCBYLWF4aXMgc291bmRm aWVsZCB6b29tIiwgT0ZGU0VUKHpvb21bQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9 MC59LC05MCw5MC4sQUZUIH0sCisgICAgeyAieV96b29tIiwgInNldCBZLWF4aXMgc291bmRmaWVs ZCB6b29tIiwgT0ZGU0VUKHpvb21bQV9ZXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59 LC05MCw5MC4sQUZUIH0sCisgICAgeyAiel96b29tIiwgInNldCBaLWF4aXMgc291bmRmaWVsZCB6 b29tIiwgT0ZGU0VUKHpvb21bQV9aXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05 MCw5MC4sQUZUIH0sCisgICAgeyAieF9mb2N1cyIsICJzZXQgWC1heGlzIHNvdW5kZmllbGQgZm9j dXMiLCBPRkZTRVQoZm9jdXNbQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05 MCw5MC4sQUZUIH0sCisgICAgeyAieV9mb2N1cyIsICJzZXQgWS1heGlzIHNvdW5kZmllbGQgZm9j dXMiLCBPRkZTRVQoZm9jdXNbQV9ZXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05 MCw5MC4sQUZUIH0sCisgICAgeyAiel9mb2N1cyIsICJzZXQgWi1heGlzIHNvdW5kZmllbGQgZm9j dXMiLCBPRkZTRVQoZm9jdXNbQV9aXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05 MCw5MC4sQUZUIH0sCisgICAgeyAieF9wdXNoIiwgInNldCBYLWF4aXMgc291bmRmaWVsZCBwdXNo IiwgT0ZGU0VUKHB1c2hbQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5 MC4sQUZUIH0sCisgICAgeyAieV9wdXNoIiwgInNldCBZLWF4aXMgc291bmRmaWVsZCBwdXNoIiwg T0ZGU0VUKHB1c2hbQV9ZXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4s QUZUIH0sCisgICAgeyAiel9wdXNoIiwgInNldCBaLWF4aXMgc291bmRmaWVsZCBwdXNoIiwgT0ZG U0VUKHB1c2hbQV9aXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4sQUZU IH0sCisgICAgeyAieF9wcmVzcyIsICJzZXQgWC1heGlzIHNvdW5kZmllbGQgcHJlc3MiLCBPRkZT RVQocHJlc3NbQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4sQUZU IH0sCisgICAgeyAieV9wcmVzcyIsICJzZXQgWS1heGlzIHNvdW5kZmllbGQgcHJlc3MiLCBPRkZT RVQocHJlc3NbQV9ZXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4sQUZU IH0sCisgICAgeyAiel9wcmVzcyIsICJzZXQgWi1heGlzIHNvdW5kZmllbGQgcHJlc3MiLCBPRkZT RVQocHJlc3NbQV9aXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4sQUZU IH0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgZG91YmxlIGRiMmEoZG91YmxlIGRiKQorewor ICAgIHJldHVybiBwb3coMTAuLCBkYiAvIDIwLik7Cit9CisKK3N0YXRpYyBkb3VibGUgcHl0aGFn KGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAgICBkb3VibGUgYWJzYSA9IGZhYnMoYSk7CisgICAg ZG91YmxlIGFic2IgPSBmYWJzKGIpOworCisgICAgaWYgKGFic2EgPiBhYnNiKSB7CisgICAgICAg IHJldHVybiBhYnNhICogc3FydCgxLjArU1FSKGFic2IvYWJzYSkpOworICAgIH0gZWxzZSB7Cisg ICAgICAgIGlmIChhYnNiID09IDAuMCkKKyAgICAgICAgICAgIHJldHVybiAwLjA7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBhYnNiICogc3FydCgxLjArU1FSKGFic2EvYWJzYikp OworICAgIH0KK30KKworc3RhdGljIHZvaWQgbXN0ZXAoaW50IG0sIGludCBuLCBkb3VibGUgaCwg aW50IGwsIGludCBpLAorICAgICAgICAgICAgICAgICAgZG91YmxlIHVbTUFYX0NIQU5ORUxTXVtN QVhfQ0hBTk5FTFNdKQoreworICAgIGZvciAoaW50IGogPSBsOyBqIDwgbjsgaisrKSB7CisgICAg ICAgIGRvdWJsZSBzID0gMC4wLCBmOworCisgICAgICAgIGZvciAoaW50IGsgPSBpOyBrIDwgbTsg aysrKQorICAgICAgICAgICAgcyArPSB1W2tdW2ldICogdVtrXVtqXTsKKyAgICAgICAgZiA9IHMg LyBoOworICAgICAgICBmb3IgKGludCBrID0gaTsgayA8IG07IGsrKykKKyAgICAgICAgICAgIHVb a11bal0gKz0gZiAqIHVba11baV07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzdmRjbXAoQVZG aWx0ZXJDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHVbTUFYX0NIQU5O RUxTXVtNQVhfQ0hBTk5FTFNdLAorICAgICAgICAgICAgICAgICAgIGludCBtLCBpbnQgbiwKKyAg ICAgICAgICAgICAgICAgICBkb3VibGUgKnEsIGRvdWJsZSB2W01BWF9DSEFOTkVMU11bTUFYX0NI QU5ORUxTXSkKK3sKKyAgICBkb3VibGUgZVtNQVhfQ0hBTk5FTFNdID0geyAwLiB9OworICAgIGRv dWJsZSBnLCB4LCBzLCBmLCBoLCB6LCBjLCB5OworICAgIGRvdWJsZSBlcHMgPSAxZS0xNTsKKyAg ICBjb25zdCBkb3VibGUgdG9sID0gMWUtNjQgLyBlcHM7CisgICAgY29uc3QgaW50IGl0bWF4ID0g NTA7CisgICAgaW50IGwsIGwxOworCisgICAgYXZfYXNzZXJ0MCgxLjAgKyBlcHMgPiAxLjApOwor ICAgIGF2X2Fzc2VydDAodG9sID4gMC4wKTsKKworICAgIGcgPSAwLjA7CisgICAgeCA9IDAuMDsK KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIHMgPSAwLjA7CisK KyAgICAgICAgZVtpXSA9IGc7CisgICAgICAgIGwgPSBpICsgMTsKKyAgICAgICAgZm9yIChpbnQg aiA9IGk7IGogPCBtOyBqKyspCisgICAgICAgICAgICBzICs9IFNRUih1W2pdW2ldKTsKKyAgICAg ICAgaWYgKHMgPD0gdG9sKSB7CisgICAgICAgICAgICBnID0gMC4wOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgZiA9IHVbaV1baV07CisgICAgICAgICAgICBnID0gZiA8IDAuMCA/IHNx cnQocykgOiAtc3FydChzKTsKKyAgICAgICAgICAgIGggPSBmICogZyAtIHM7CisgICAgICAgICAg ICB1W2ldW2ldID0gZiAtIGc7CisgICAgICAgICAgICBtc3RlcChtLCBuLCBoLCBsLCBpLCB1KTsK KyAgICAgICAgfQorCisgICAgICAgIHFbaV0gPSBnOworICAgICAgICBzID0gMC4wOworICAgICAg ICBmb3IgKGludCBqID0gbDsgaiA8IG47IGorKykKKyAgICAgICAgICAgIHMgKz0gdVtpXVtqXSp1 W2ldW2pdOworICAgICAgICBpZiAocyA8PSB0b2wpIHsKKyAgICAgICAgICAgIGcgPSAwLjA7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmID0gdVtpXVtpKzFdOworICAgICAgICAgICAg ZyA9IGYgPCAwLjAgPyBzcXJ0KHMpIDogLXNxcnQocyk7CisgICAgICAgICAgICBoID0gZipnIC0g czsKKyAgICAgICAgICAgIHVbaV1baSsxXSA9IGYtZzsKKyAgICAgICAgICAgIGZvciAoaW50IGog PSBsOyBqIDwgbjsgaisrKQorICAgICAgICAgICAgICAgIGVbal0gPSB1W2ldW2pdIC8gaDsKKyAg ICAgICAgICAgIGZvciAoaW50IGogPSBsOyBqIDwgbTsgaisrKSB7CisgICAgICAgICAgICAgICAg cyA9IDAuMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gbDsgayA8IG47IGsrKykKKyAg ICAgICAgICAgICAgICAgICAgIHMgKz0gdVtqXVtrXSp1W2ldW2tdOworICAgICAgICAgICAgICAg IGZvciAoaW50IGsgPSBsOyBrIDwgbjsgaysrKQorICAgICAgICAgICAgICAgICAgICAgdVtqXVtr XSArPSBzICogZVtrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHkgPSBm YWJzKHFbaV0pK2ZhYnMoZVtpXSk7CisgICAgICAgIGlmICh5ID4geCkKKyAgICAgICAgICAgIHgg PSB5OworICAgIH0KKworICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+IC0xOyBpLS0pIHsKKyAg ICAgICAgaWYgKGcgIT0gMC4wKSB7CisgICAgICAgICAgICBoID0gZyp1W2ldW2krMV07CisKKyAg ICAgICAgICAgIGZvciAoaW50IGogPSBsOyBqIDwgbjsgaisrKQorICAgICAgICAgICAgICAgICB2 W2pdW2ldID0gdVtpXVtqXSAvIGg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGogPSBsOyBqIDwg bjsgaisrKSB7CisgICAgICAgICAgICAgICAgcyA9IDAuMDsKKyAgICAgICAgICAgICAgICBmb3Ig KGludCBrID0gbDsgayA8IG47IGsrKykKKyAgICAgICAgICAgICAgICAgICAgcyArPSB1W2ldW2td ICogdltrXVtqXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gbDsgayA8IG47IGsrKykK KyAgICAgICAgICAgICAgICAgICAgdltrXVtqXSArPSBzICogdltrXVtpXTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGogPSBsOyBqIDwgbjsgaisrKSB7Cisg ICAgICAgICAgICB2W2ldW2pdID0gMC4wOworICAgICAgICAgICAgdltqXVtpXSA9IDAuMDsKKyAg ICAgICAgfQorCisgICAgICAgIHZbaV1baV0gPSAxLjA7CisgICAgICAgIGcgPSBlW2ldOworICAg ICAgICBsID0gaTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gbiAtIDE7IGkgPiAtMTsgaS0t KSB7CisgICAgICAgIGwgPSBpKzE7CisgICAgICAgIGcgPSBxW2ldOworICAgICAgICBmb3IgKGlu dCBqID0gbDsgaiA8IG47IGorKykKKyAgICAgICAgICAgIHVbaV1bal0gPSAwLjA7CisgICAgICAg IGlmIChnICE9IDAuMCkgeworICAgICAgICAgICAgaCA9IHVbaV1baV0gKiBnOworICAgICAgICAg ICAgbXN0ZXAobSwgbiwgaCwgbCwgaSwgdSk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gaTsg aiA8IG07IGorKykKKyAgICAgICAgICAgICAgICB1W2pdW2ldID0gdVtqXVtpXSAvIGc7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8IG07IGorKykKKyAg ICAgICAgICAgICAgICB1W2pdW2ldID0gMC4wOworICAgICAgICB9CisgICAgICAgIHVbaV1baV0g Kz0gMS4wOworICAgIH0KKworICAgIGVwcyA9IGVwcyAqIHg7CisgICAgZm9yIChpbnQgayA9IG4t MTsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgZm9yIChpbnQgaXRlcmF0aW9uID0gMDsgaXRlcmF0 aW9uIDwgaXRtYXg7IGl0ZXJhdGlvbisrKSB7CisgICAgICAgICAgICBpbnQgZ290b190ZXN0X2Zf Y29udmVyZ2VuY2UgPSAwOworCisgICAgICAgICAgICBmb3IgKGwgPSBrOyBsID49IDA7IGwtLSkg eworICAgICAgICAgICAgICAgIGdvdG9fdGVzdF9mX2NvbnZlcmdlbmNlID0gMDsKKyAgICAgICAg ICAgICAgICBpZiAoZmFicyhlW2xdKSA8PSBlcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgZ290 b190ZXN0X2ZfY29udmVyZ2VuY2UgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdl9hc3NlcnQwKGwgPiAwKTsKKyAg ICAgICAgICAgICAgICBpZiAoZmFicyhxW2wtMV0pIDw9IGVwcykKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWdvdG9fdGVzdF9mX2Nv bnZlcmdlbmNlKSB7CisgICAgICAgICAgICAgICAgYyA9IDAuMDsKKyAgICAgICAgICAgICAgICBz ID0gMS4wOworICAgICAgICAgICAgICAgIGwxID0gbC0xOworICAgICAgICAgICAgICAgIGF2X2Fz c2VydDAobDEgPj0gMCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IGw7IGkgPD0gazsg aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGYgPSBzKmVbaV07CisgICAgICAgICAgICAgICAg ICAgIGVbaV0gPSBjKmVbaV07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhYnMoZikgPD0g ZXBzKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg ICAgZyA9IHFbaV07CisgICAgICAgICAgICAgICAgICAgIGggPSBweXRoYWcoZixnKTsKKyAgICAg ICAgICAgICAgICAgICAgcVtpXSA9IGg7CisgICAgICAgICAgICAgICAgICAgIGMgPSBnL2g7Cisg ICAgICAgICAgICAgICAgICAgIHMgPSAtZi9oOworICAgICAgICAgICAgICAgICAgICBmb3IgKGlu dCBqID0gMDsgaiA8IG07IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHVbal1b bDFdOworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IHVbal1baV07CisgICAgICAgICAgICAg ICAgICAgICAgICB1W2pdW2wxXSA9IHkqYyt6KnM7CisgICAgICAgICAgICAgICAgICAgICAgICB1 W2pdW2ldID0gLXkqcyt6KmM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6ID0gcVtrXTsKKyAgICAgICAgICAgIGlm IChsID09IGspIHsKKyAgICAgICAgICAgICAgICBpZiAoeiA8PSAwLjApIHsKKyAgICAgICAgICAg ICAgICAgICAgcVtrXSA9IC16OworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg aiA8IG47IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZbal1ba10gPSAtdltqXVtrXTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIGlmIChpdGVyYXRpb24gPj0gaXRtYXgtMSkKKyAgICAgICAgICAgICAg ICBicmVhazsKKworICAgICAgICAgICAgeCA9IHFbbF07CisgICAgICAgICAgICBhdl9hc3NlcnQw KGsgPiAwKTsKKyAgICAgICAgICAgIHkgPSBxW2stMV07CisgICAgICAgICAgICBnID0gZVtrLTFd OworICAgICAgICAgICAgaCA9IGVba107CisgICAgICAgICAgICBmID0gKCh5LXopKih5K3opKyhn LWgpKihnK2gpKS8oMi4wKmgqeSk7CisgICAgICAgICAgICBnID0gcHl0aGFnKGYsMS4wKTsKKyAg ICAgICAgICAgIGlmIChmIDwgMC4pCisgICAgICAgICAgICAgICAgZiA9ICgoeC16KSooeCt6KSto Kih5LyhmLWcpLWgpKS94OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGYgPSAo KHgteikqKHgreikraCooeS8oZitnKS1oKSkveDsKKyAgICAgICAgICAgIGMgPSAxLjA7CisgICAg ICAgICAgICBzID0gMS4wOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGwrMTsgaSA8IGsrMTsg aSsrKSB7CisgICAgICAgICAgICAgICAgZyA9IGVbaV07CisgICAgICAgICAgICAgICAgeSA9IHFb aV07CisgICAgICAgICAgICAgICAgaCA9IHMqZzsKKyAgICAgICAgICAgICAgICBnID0gYypnOwor ICAgICAgICAgICAgICAgIHogPSBweXRoYWcoZixoKTsKKyAgICAgICAgICAgICAgICBlW2ktMV0g PSB6OworICAgICAgICAgICAgICAgIGMgPSBmL3o7CisgICAgICAgICAgICAgICAgcyA9IGgvejsK KyAgICAgICAgICAgICAgICBmID0geCpjK2cqczsKKyAgICAgICAgICAgICAgICBnID0gLXgqcytn KmM7CisgICAgICAgICAgICAgICAgaCA9IHkqczsKKyAgICAgICAgICAgICAgICB5ID0geSpjOwor ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKSB7CisgICAgICAgICAg ICAgICAgICAgIHggPSB2W2pdW2ktMV07CisgICAgICAgICAgICAgICAgICAgIHogPSB2W2pdW2ld OworICAgICAgICAgICAgICAgICAgICB2W2pdW2ktMV0gPSB4KmMreipzOworICAgICAgICAgICAg ICAgICAgICB2W2pdW2ldID0gLXgqcyt6KmM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIHogPSBweXRoYWcoZixoKTsKKyAgICAgICAgICAgICAgICBxW2ktMV0gPSB6OworICAg ICAgICAgICAgICAgIGMgPSBmL3o7CisgICAgICAgICAgICAgICAgcyA9IGgvejsKKyAgICAgICAg ICAgICAgICBmID0gYypnK3MqeTsKKyAgICAgICAgICAgICAgICB4ID0gLXMqZytjKnk7CisgICAg ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtOyBqKyspIHsKKyAgICAgICAgICAgICAg ICAgICAgeSA9IHVbal1baS0xXTsKKyAgICAgICAgICAgICAgICAgICAgeiA9IHVbal1baV07Cisg ICAgICAgICAgICAgICAgICAgIHVbal1baS0xXSA9IHkqYyt6KnM7CisgICAgICAgICAgICAgICAg ICAgIHVbal1baV0gPSAteSpzK3oqYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIGVbbF0gPSAwLjA7CisgICAgICAgICAgICBlW2tdID0gZjsKKyAgICAg ICAgICAgIHFba10gPSB4OworICAgICAgICB9CisgICAgfQorCisgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0RFQlVHLCAidW06XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewor ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykKKyAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19ERUJVRywgIlx0JWcsIiwgdVtpXVtqXSk7CisgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19ERUJVRywgIlxuIik7CisgICAgfQorCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RF QlVHLCAid3Y6XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXHQlZywiLCBxW2ldKTsKKyAgICBhdl9sb2coY3R4 LCBBVl9MT0dfREVCVUcsICJcbiIpOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAi dm06XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBmb3Ig KGludCBqID0gMDsgaiA8IG47IGorKykKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19E RUJVRywgIlx0JWciLCB2W2ldW2pdKTsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVH LCAiXG4iKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGxldmVsZihBbWJpc29uaWNDb250ZXh0 ICpzLAorICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dCwgZG91YmxlIGxldmVsX3RhYltN QVhfQ0hBTk5FTFNdLAorICAgICAgICAgICAgICAgICAgIGludCBuYl9zYW1wbGVzLCBpbnQgbmJf Y2hhbm5lbHMpCit7CisgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsr KSB7CisgICAgICAgIGZsb2F0ICpkc3QgPSAoZmxvYXQgKilvdXQtPmV4dGVuZGVkX2RhdGFbY2hd OworICAgICAgICBjb25zdCBmbG9hdCBtdWwgPSBsZXZlbF90YWJbY2hdOworCisgICAgICAgIHMt PmZkc3AtPnZlY3Rvcl9mbXVsX3NjYWxhcihkc3QsIGRzdCwgbXVsLCBGRkFMSUdOKG5iX3NhbXBs ZXMsIDE2KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsZXZlbGQoQW1iaXNvbmljQ29udGV4 dCAqcywKKyAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpvdXQsIGRvdWJsZSBsZXZlbF90YWJb TUFYX0NIQU5ORUxTXSwKKyAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcywgaW50IG5i X2NoYW5uZWxzKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2gr KykgeworICAgICAgICBkb3VibGUgKmRzdCA9IChkb3VibGUgKilvdXQtPmV4dGVuZGVkX2RhdGFb Y2hdOworICAgICAgICBjb25zdCBkb3VibGUgbXVsID0gbGV2ZWxfdGFiW2NoXTsKKworICAgICAg ICBzLT5mZHNwLT52ZWN0b3JfZG11bF9zY2FsYXIoZHN0LCBkc3QsIG11bCwgRkZBTElHTihuYl9z YW1wbGVzLCAxNikpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtZihBbWJpc29u aWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFt ZSAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdHJhbnNmb3JtX21hdFtNQVhf Q0hBTk5FTFNdW01BWF9DSEFOTkVMU10sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBuYl9z YW1wbGVzLCBpbnQgbmJfY2hhbm5lbHMsIGludCAqc2VxX21hcCkKK3sKKyAgICBmb3IgKGludCBj aCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgY29uc3QgZmxvYXQgKnNy YyA9IChjb25zdCBmbG9hdCAqKWluLT5leHRlbmRlZF9kYXRhWzBdOworICAgICAgICBmbG9hdCAq ZHN0ID0gKGZsb2F0ICopb3V0LT5leHRlbmRlZF9kYXRhW2NoXTsKKyAgICAgICAgZmxvYXQgbXVs ID0gdHJhbnNmb3JtX21hdFtzZXFfbWFwW2NoXV1bc2VxX21hcFswXV07CisKKyAgICAgICAgcy0+ ZmRzcC0+dmVjdG9yX2ZtdWxfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJR04obmJfc2FtcGxl cywgMTYpKTsKKworICAgICAgICBmb3IgKGludCBjaDIgPSAxOyBjaDIgPCBuYl9jaGFubmVsczsg Y2gyKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpzcmMgPSAoY29uc3QgZmxvYXQgKilp bi0+ZXh0ZW5kZWRfZGF0YVtjaDJdOworICAgICAgICAgICAgZmxvYXQgbXVsID0gdHJhbnNmb3Jt X21hdFtzZXFfbWFwW2NoXV1bc2VxX21hcFtjaDJdXTsKKworICAgICAgICAgICAgcy0+ZmRzcC0+ dmVjdG9yX2ZtYWNfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJR04obmJfc2FtcGxlcywgMTYp KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtZChBbWJpc29u aWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFt ZSAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdHJhbnNmb3JtX21hdFtNQVhf Q0hBTk5FTFNdW01BWF9DSEFOTkVMU10sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBuYl9z YW1wbGVzLCBpbnQgbmJfY2hhbm5lbHMsIGludCAqc2VxX21hcCkKK3sKKyAgICBmb3IgKGludCBj aCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgY29uc3QgZG91YmxlICpz cmMgPSAoY29uc3QgZG91YmxlICopaW4tPmV4dGVuZGVkX2RhdGFbMF07CisgICAgICAgIGRvdWJs ZSAqZHN0ID0gKGRvdWJsZSAqKW91dC0+ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgICAgIGRvdWJs ZSBtdWwgPSB0cmFuc2Zvcm1fbWF0W3NlcV9tYXBbY2hdXVtzZXFfbWFwWzBdXTsKKworICAgICAg ICBzLT5mZHNwLT52ZWN0b3JfZG11bF9zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihuYl9z YW1wbGVzLCAxNikpOworCisgICAgICAgIGZvciAoaW50IGNoMiA9IDE7IGNoMiA8IG5iX2NoYW5u ZWxzOyBjaDIrKykgeworICAgICAgICAgICAgY29uc3QgZG91YmxlICpzcmMgPSAoY29uc3QgZG91 YmxlICopaW4tPmV4dGVuZGVkX2RhdGFbY2gyXTsKKyAgICAgICAgICAgIGRvdWJsZSBtdWwgPSB0 cmFuc2Zvcm1fbWF0W3NlcV9tYXBbY2hdXVtzZXFfbWFwW2NoMl1dOworCisgICAgICAgICAgICBz LT5mZHNwLT52ZWN0b3JfZG1hY19zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihuYl9zYW1w bGVzLCAxNikpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseWYo QW1iaXNvbmljQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg ZGVjb2RlX21hdHJpeFtNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU10sCisgICAgICAgICAgICAg ICAgICAgICAgaW50IGlucHV0cywgaW50IG91dHB1dHMsCisgICAgICAgICAgICAgICAgICAgICAg aW50ICpzZXFfbWFwLCBjb25zdCBkb3VibGUgKmdhaW5zX3RhYiwKKyAgICAgICAgICAgICAgICAg ICAgICBpbnQgbmJfY2hhbm5lbHMsIGludCBtYXhfY2hhbm5lbHMsCisgICAgICAgICAgICAgICAg ICAgICAgQVZGcmFtZSAqaW4sIEFWRnJhbWUgKm91dCkKK3sKKyAgICBmb3IgKGludCBjaCA9IDA7 IGNoIDwgb3V0cHV0czsgY2grKykgeworICAgICAgICBmbG9hdCAqZHN0ID0gKGZsb2F0ICopb3V0 LT5leHRlbmRlZF9kYXRhW2NoXTsKKworICAgICAgICBmb3IgKGludCBjaDIgPSAwOyBjaDIgPCBG Rk1JTjMobmJfY2hhbm5lbHMsIG1heF9jaGFubmVscywgaW5wdXRzKTsgY2gyKyspIHsKKyAgICAg ICAgICAgIGNvbnN0IGludCBpbmRleCA9IEZGTUlOKHNlcV9tYXBbY2gyXSwgbmJfY2hhbm5lbHMg LSAxKTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpzcmMgPSAoY29uc3QgZmxvYXQgKilpbi0+ ZXh0ZW5kZWRfZGF0YVtpbmRleF07CisgICAgICAgICAgICBjb25zdCBmbG9hdCBnYWluID0gZ2Fp bnNfdGFiID8gZ2FpbnNfdGFiW2NoMl0gOiAxLmY7CisgICAgICAgICAgICBjb25zdCBmbG9hdCBt dWwgPSBkZWNvZGVfbWF0cml4W2NoXVtjaDJdICogZ2FpbjsKKworICAgICAgICAgICAgcy0+ZmRz cC0+dmVjdG9yX2ZtYWNfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJR04oaW4tPm5iX3NhbXBs ZXMsIDE2KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG11bHRpcGx5ZChB bWJpc29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBk ZWNvZGVfbWF0cml4W01BWF9DSEFOTkVMU11bTUFYX0NIQU5ORUxTXSwKKyAgICAgICAgICAgICAg ICAgICAgICBpbnQgaW5wdXRzLCBpbnQgb3V0cHV0cywKKyAgICAgICAgICAgICAgICAgICAgICBp bnQgKnNlcV9tYXAsIGNvbnN0IGRvdWJsZSAqZ2FpbnNfdGFiLAorICAgICAgICAgICAgICAgICAg ICAgIGludCBuYl9jaGFubmVscywgaW50IG1heF9jaGFubmVscywKKyAgICAgICAgICAgICAgICAg ICAgICBBVkZyYW1lICppbiwgQVZGcmFtZSAqb3V0KQoreworICAgIGZvciAoaW50IGNoID0gMDsg Y2ggPCBvdXRwdXRzOyBjaCsrKSB7CisgICAgICAgIGRvdWJsZSAqZHN0ID0gKGRvdWJsZSAqKW91 dC0+ZXh0ZW5kZWRfZGF0YVtjaF07CisKKyAgICAgICAgZm9yIChpbnQgY2gyID0gMDsgY2gyIDwg RkZNSU4zKG5iX2NoYW5uZWxzLCBtYXhfY2hhbm5lbHMsIGlucHV0cyk7IGNoMisrKSB7CisgICAg ICAgICAgICBjb25zdCBpbnQgaW5kZXggPSBGRk1JTihzZXFfbWFwW2NoMl0sIG5iX2NoYW5uZWxz IC0gMSk7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgKnNyYyA9IChjb25zdCBkb3VibGUgKilp bi0+ZXh0ZW5kZWRfZGF0YVtpbmRleF07CisgICAgICAgICAgICBjb25zdCBkb3VibGUgZ2FpbiA9 IGdhaW5zX3RhYiA/IGdhaW5zX3RhYltjaDJdIDogMS5mOworICAgICAgICAgICAgY29uc3QgZG91 YmxlIG11bCA9IGRlY29kZV9tYXRyaXhbY2hdW2NoMl0gKiBnYWluOworCisgICAgICAgICAgICBz LT5mZHNwLT52ZWN0b3JfZG1hY19zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihpbi0+bmJf c2FtcGxlcywgMTYpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgc2NhbGVm KEFtYmlzb25pY0NvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqaW4sIEFW RnJhbWUgKm91dCwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgc2NhbGVbTUFYX0NIQU5ORUxT XSwKKyAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcywgaW50IG5iX2NoYW5uZWxzLCBp bnQgKnNlcV9tYXApCit7CisgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBj aCsrKSB7CisgICAgICAgIGNvbnN0IGZsb2F0ICpzcmMgPSAoY29uc3QgZmxvYXQgKilpbi0+ZXh0 ZW5kZWRfZGF0YVtjaF07CisgICAgICAgIGZsb2F0ICpkc3QgPSAoZmxvYXQgKilvdXQtPmV4dGVu ZGVkX2RhdGFbY2hdOworICAgICAgICBmbG9hdCBtdWwgPSBzY2FsZVtzZXFfbWFwW2NoXV07CisK KyAgICAgICAgcy0+ZmRzcC0+dmVjdG9yX2ZtdWxfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJ R04obmJfc2FtcGxlcywgMTYpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNjYWxlZChBbWJp c29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmluLCBBVkZyYW1l ICpvdXQsCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHNjYWxlW01BWF9DSEFOTkVMU10sCisg ICAgICAgICAgICAgICAgICAgaW50IG5iX3NhbXBsZXMsIGludCBuYl9jaGFubmVscywgaW50ICpz ZXFfbWFwKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykg eworICAgICAgICBjb25zdCBkb3VibGUgKnNyYyA9IChjb25zdCBkb3VibGUgKilpbi0+ZXh0ZW5k ZWRfZGF0YVtjaF07CisgICAgICAgIGRvdWJsZSAqZHN0ID0gKGRvdWJsZSAqKW91dC0+ZXh0ZW5k ZWRfZGF0YVtjaF07CisgICAgICAgIGRvdWJsZSBtdWwgPSBzY2FsZVtzZXFfbWFwW2NoXV07CisK KyAgICAgICAgcy0+ZmRzcC0+dmVjdG9yX2RtdWxfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJ R04obmJfc2FtcGxlcywgMTYpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcXVlcnlfZm9ybWF0 cyhBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4 LT5wcml2OworICAgIEFWRmlsdGVyRm9ybWF0cyAqZm9ybWF0cyA9IE5VTEw7CisgICAgQVZGaWx0 ZXJDaGFubmVsTGF5b3V0cyAqb3V0bGF5b3V0cyA9IE5VTEw7CisgICAgQVZGaWx0ZXJDaGFubmVs TGF5b3V0cyAqaW5sYXlvdXRzID0gTlVMTDsKKyAgICBBVkNoYW5uZWxMYXlvdXQgKm91dGxheW91 dCA9IChBVkNoYW5uZWxMYXlvdXQgKikmYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLm91dGxheW91 dDsKKyAgICBBVkNoYW5uZWxMYXlvdXQgKmlubGF5b3V0ID0gJihBVkNoYW5uZWxMYXlvdXQpQVZf Q0hBTk5FTF9MQVlPVVRfQU1CSVNPTklDX0ZJUlNUX09SREVSOworICAgIGludCByZXQgPSAwOwor CisgICAgaWYgKHMtPnByZWNpc2lvbiA9PSBQX0FVVE8pIHsKKyAgICAgICAgcmV0ID0gZmZfYWRk X2Zvcm1hdCgmZm9ybWF0cywgQVZfU0FNUExFX0ZNVF9GTFRQKTsKKyAgICAgICAgaWYgKHJldCkK KyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIHJldCA9IGZmX2FkZF9mb3JtYXQoJmZv cm1hdHMsIEFWX1NBTVBMRV9GTVRfREJMUCk7CisgICAgfSBlbHNlIGlmIChzLT5wcmVjaXNpb24g PT0gUF9TSU5HTEUpIHsKKyAgICAgICAgcmV0ID0gZmZfYWRkX2Zvcm1hdCgmZm9ybWF0cywgQVZf U0FNUExFX0ZNVF9GTFRQKTsKKyAgICB9IGVsc2UgaWYgKHMtPnByZWNpc2lvbiA9PSBQX0RPVUJM RSkgeworICAgICAgICByZXQgPSBmZl9hZGRfZm9ybWF0KCZmb3JtYXRzLCBBVl9TQU1QTEVfRk1U X0RCTFApOworICAgIH0KKyAgICBpZiAocmV0KQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJl dCA9IGZmX3NldF9jb21tb25fZm9ybWF0cyhjdHgsIGZvcm1hdHMpOworICAgIGlmIChyZXQpCisg ICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBmZl9hZGRfY2hhbm5lbF9sYXlvdXQoJm91 dGxheW91dHMsIG91dGxheW91dCk7CisgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIHJldCA9IGZmX2NoYW5uZWxfbGF5b3V0c19yZWYob3V0bGF5b3V0cywgJmN0eC0+b3V0 cHV0c1swXS0+aW5jZmcuY2hhbm5lbF9sYXlvdXRzKTsKKyAgICBpZiAocmV0KQorICAgICAgICBy ZXR1cm4gcmV0OworCisgICAgcmV0ID0gZmZfYWRkX2NoYW5uZWxfbGF5b3V0KCZpbmxheW91dHMs IGlubGF5b3V0KTsKKyAgICBpZiAocmV0KQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0 ID0gZmZfY2hhbm5lbF9sYXlvdXRzX3JlZihpbmxheW91dHMsICZjdHgtPmlucHV0c1swXS0+b3V0 Y2ZnLmNoYW5uZWxfbGF5b3V0cyk7CisgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIHJldHVybiBmZl9zZXRfY29tbW9uX2FsbF9zYW1wbGVyYXRlcyhjdHgpOworfQorCitz dGF0aWMgdm9pZCBhY25fdG9fbGV2ZWxfb3JkZXIoaW50IGFjbiwgaW50ICpsZXZlbCwgaW50ICpv cmRlcikKK3sKKyAgICAqbGV2ZWwgPSBmbG9vcihzcXJ0KGFjbikpOworICAgICpvcmRlciA9IGFj biAtICpsZXZlbCAqICpsZXZlbCAtICpsZXZlbDsKK30KKworc3RhdGljIHZvaWQgY2FsY19hY25f c2VxdWVuY2UoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBpbnQgKmRzdCA9IHMtPnNlcV90 YWJbTV9BQ05dOworCisgICAgZm9yIChpbnQgbiA9IDAsIGkgPSAwOyBuIDw9IHMtPm9yZGVyOyBu KyspIHsKKyAgICAgICAgZm9yIChpbnQgbSA9IC1uOyBtIDw9IG47IG0rKywgaSsrKQorICAgICAg ICAgICAgZHN0W2ldID0gbiAqIG4gKyBuICsgbTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNh bGNfZnVtYV9zZXF1ZW5jZShBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGludCAqZHN0ID0g cy0+c2VxX3RhYltNX0ZVTUFdOworCisgICAgZm9yIChpbnQgbiA9IDAsIGkgPSAwOyBuIDw9IHMt Pm9yZGVyOyBuKyspIHsKKyAgICAgICAgaWYgKG4gPCAyKSB7CisgICAgICAgICAgICBmb3IgKGlu dCBtID0gLW47IG0gPD0gbjsgbSsrKQorICAgICAgICAgICAgICAgIGRzdFtpKytdID0gbiAqIG4g KyAyICogKG4gLSBGRkFCUyhtKSkgKyAobSA8IDApOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgZm9yIChpbnQgbSA9IC1uOyBtIDw9IG47IG0rKykKKyAgICAgICAgICAgICAgICBkc3Rb aSsrXSA9IFNRUihuKSArIEZGQUJTKG0pICogMiAtIChtID4gMCk7CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfc2lkX3NlcXVlbmNlKEFtYmlzb25pY0NvbnRleHQgKnMp Cit7CisgICAgaW50ICpkc3QgPSBzLT5zZXFfdGFiW01fU0lEXTsKKworICAgIGZvciAoaW50IG4g PSAwLCBpID0gMDsgbiA8PSBzLT5vcmRlcjsgbisrKSB7CisgICAgICAgIGZvciAoaW50IG0gPSAt bjsgbSA8PSBuOyBtKyssIGkrKykKKyAgICAgICAgICAgIGRzdFtpXSA9IG4gKiBuICsgMiAqIChu IC0gRkZBQlMobSkpICsgKG0gPCAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfY2hf bWFwKEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgY29uc3QgaW50ICpzcmMwID0gcy0+c2Vx X3RhYltNX0FDTl07CisgICAgY29uc3QgaW50ICpzcmMxID0gcy0+c2VxX3RhYltzLT5zZXFdOwor ICAgIGludCAqZHN0ID0gcy0+c2VxX21hcDsKKworICAgIGZvciAoaW50IG4gPSAwOyBuIDwgU1FS KHMtPm9yZGVyICsgMSk7IG4rKykKKyAgICAgICAgZHN0W3NyYzBbbl1dID0gc3JjMVtuXTsKK30K Kworc3RhdGljIGRvdWJsZSBmYWN0b3JpYWwoaW50IHgpCit7CisgICAgZG91YmxlIHByb2QgPSAx LjsKKworICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHg7IGkrKykKKyAgICAgICAgcHJvZCAqPSBp OworCisgICAgcmV0dXJuIHByb2Q7Cit9CisKK3N0YXRpYyBkb3VibGUgbjNkX25vcm0oaW50IGkp Cit7CisgICAgaW50IG4sIG07CisKKyAgICBhY25fdG9fbGV2ZWxfb3JkZXIoaSwgJm4sICZtKTsK KworICAgIHJldHVybiBzcXJ0KCgyICogbiArIDEpICogKDIgLSAobSA9PSAwKSkgKiBmYWN0b3Jp YWwobiAtIEZGQUJTKG0pKSAvIGZhY3RvcmlhbChuICsgRkZBQlMobSkpKTsKK30KKworc3RhdGlj IGRvdWJsZSBzbjNkX25vcm0oaW50IGkpCit7CisgICAgaW50IG4sIG07CisKKyAgICBhY25fdG9f bGV2ZWxfb3JkZXIoaSwgJm4sICZtKTsKKworICAgIHJldHVybiBzcXJ0KCgyIC0gKG0gPT0gMCkp ICogZmFjdG9yaWFsKG4gLSBGRkFCUyhtKSkgLyBmYWN0b3JpYWwobiArIEZGQUJTKG0pKSk7Cit9 CisKK3N0YXRpYyB2b2lkIGNhbGNfbm9ybV9tYXRyaXgoQW1iaXNvbmljQ29udGV4dCAqcykKK3sK KyAgICBjb25zdCBpbnQgc3BlYWtlcnMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uc3BlYWtl cnM7CisgICAgY29uc3QgaW50IGlucHV0cyA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5pbnB1 dHM7CisKKyAgICBpZiAoIXMtPm1hdHJpeF9ub3JtKQorICAgICAgICByZXR1cm47CisKKyAgICBm b3IgKGludCB5ID0gMDsgeSA8IHNwZWFrZXJzOyB5KyspIHsKKyAgICAgICAgZG91YmxlIHNjYWxl ID0gMC47CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnB1dHM7IHgrKykKKyAgICAg ICAgICAgIHNjYWxlICs9IGZhYnMocy0+ZGVjb2RlX21hdFt5XVt4XSk7CisgICAgICAgIGlmIChz Y2FsZSA+IDEuKQorICAgICAgICAgICAgc2NhbGUgPSAxLiAvIHNjYWxlOworICAgICAgICBlbHNl CisgICAgICAgICAgICBzY2FsZSA9IDEuOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg aW5wdXRzOyB4KyspCisgICAgICAgICAgICBzLT5kZWNvZGVfbWF0W3ldW3hdICo9IHNjYWxlOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgY2FsY19zbjNkX3NjYWxpbmcoQW1iaXNvbmljQ29udGV4 dCAqcykKK3sKKyAgICBkb3VibGUgKmRzdCA9IHMtPm5vcm1fdGFiW1NOM0RdOworCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBzLT5tYXhfY2hhbm5lbHM7IGkrKykKKyAgICAgICAgZHN0W2ldID0g MS47Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfbjNkX3NjYWxpbmcoQW1iaXNvbmljQ29udGV4dCAq cykKK3sKKyAgICBkb3VibGUgKmRzdCA9IHMtPm5vcm1fdGFiW04zRF07CisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHMtPm1heF9jaGFubmVsczsgaSsrKQorICAgICAgICBkc3RbaV0gPSBuM2Rf bm9ybShpKSAvIHNuM2Rfbm9ybShpKTsKK30KKworc3RhdGljIHZvaWQgY2FsY19mdW1hX3NjYWxp bmcoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3VibGUgKmRzdCA9IHMtPm5vcm1fdGFi W0ZVTUFdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5tYXhfY2hhbm5lbHM7IGkrKykg eworICAgICAgICBkc3RbaV0gPSBzbjNkX25vcm0oaSk7CisKKyAgICAgICAgc3dpdGNoIChpKSB7 CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGRzdFtpXSAqPSAxLiAvIE1fU1FSVDI7Cisg ICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNlIDM6CisgICAgICAg IGNhc2UgMTI6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSA0OgorICAgICAgICAgICAgZHN0W2ldICo9IDIuIC8gc3FydCgzLik7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgZHN0W2ldICo9IDIuIC8gc3Fy dCgzLik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgIGRzdFtpXSAqPSAyLiAvIHNxcnQo My4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGRz dFtpXSAqPSAyLiAvIHNxcnQoMy4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug OToKKyAgICAgICAgICAgIGRzdFtpXSAqPSBzcXJ0KDguIC8gNS4pOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICBkc3RbaV0gKj0gMy4gLyBzcXJ0KDUu KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgZHN0 W2ldICo9IHNxcnQoNDUuIC8gMzIuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl IDEzOgorICAgICAgICAgICAgZHN0W2ldICo9IHNxcnQoNDUuIC8gMzIuKTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgZHN0W2ldICo9IDMuIC8gc3Fy dCg1Lik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAg IGRzdFtpXSAqPSBzcXJ0KDguLzUuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseV9tYXQoZG91YmxlIG91dFszXVszXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYVszXVszXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYlszXVszXSkKK3sKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IDM7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykgewor ICAgICAgICAgICAgZG91YmxlIHN1bSA9IDAuOworCisgICAgICAgICAgICBmb3IgKGludCBrID0g MDsgayA8IDM7IGsrKykKKyAgICAgICAgICAgICAgICBzdW0gKz0gYVtpXVtrXSAqIGJba11bal07 CisKKyAgICAgICAgICAgIG91dFtpXVtqXSA9IHN1bTsKKyAgICAgICAgfQorICAgIH0KK30KKwor c3RhdGljIGRvdWJsZSBQKGludCBpLCBpbnQgbCwgaW50IG11LCBpbnQgbV8sIGRvdWJsZSBSXzFb M11bM10sCisgICAgICAgICAgICAgICAgZG91YmxlIFJfbG0xWzIgKiBNQVhfT1JERVIgKyAxXVsy ICogTUFYX09SREVSICsgMV0pCit7CisgICAgZG91YmxlIHJldCA9IDAuOworICAgIGRvdWJsZSBy aTEgID0gUl8xW2kgKyAxXVsyXTsKKyAgICBkb3VibGUgcmltMSA9IFJfMVtpICsgMV1bMF07Cisg ICAgZG91YmxlIHJpMCAgPSBSXzFbaSArIDFdWzFdOworCisgICAgaWYgKG1fID09IC1sKSB7Cisg ICAgICAgIHJldCA9IHJpMSAqIFJfbG0xW211ICsgbCAtIDFdWzBdICsgcmltMSAqIFJfbG0xW211 ICsgbC0gMV1bMiAqIGwgLSAyXTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV8gPT0gbCkK KyAgICAgICAgICAgIHJldCA9IHJpMSAqIFJfbG0xW211ICsgbCAtIDFdWzIgKiBsIC0gMl0gLSBy aW0xICogUl9sbTFbbXUgKyBsIC0gMV1bMF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl dCA9IHJpMCAqIFJfbG0xW211ICsgbCAtIDFdW21fICsgbCAtIDFdOworICAgIH0KKyAgICByZXR1 cm4gcmV0OworfQorCitzdGF0aWMgZG91YmxlIFUoaW50IGwsIGludCBtLCBpbnQgbiwgZG91Ymxl IFJfMVszXVszXSwKKyAgICAgICAgICAgICAgICBkb3VibGUgUl9sbTFbMiAqIE1BWF9PUkRFUiAr IDFdWzIgKiBNQVhfT1JERVIgKyAxXSkKK3sKKyAgICByZXR1cm4gUCgwLCBsLCBtLCBuLCBSXzEs IFJfbG0xKTsKK30KKworc3RhdGljIGRvdWJsZSBWKGludCBsLCBpbnQgbSwgaW50IG4sIGRvdWJs ZSBSXzFbM11bM10sCisgICAgICAgICAgICAgICAgZG91YmxlIFJfbG0xWzIgKiBNQVhfT1JERVIg KyAxXVsyICogTUFYX09SREVSICsgMV0pCit7CisgICAgZG91YmxlIHJldCA9IDAuOworCisgICAg aWYgKG0gPT0gMCkgeworICAgICAgICBkb3VibGUgcDAgPSBQKCAxLCBsLCAgMSwgbiwgUl8xLCBS X2xtMSk7CisgICAgICAgIGRvdWJsZSBwMSA9IFAoLTEsIGwsIC0xLCBuLCBSXzEsIFJfbG0xKTsK KyAgICAgICAgcmV0ID0gcDArcDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG0gPiAwKSB7 CisgICAgICAgICAgICBpbnQgZCA9IChtID09IDEpID8gMSA6IDA7CisgICAgICAgICAgICBkb3Vi bGUgcDAgPSBQKCAxLCBsLCAgbSAtIDEsIG4sIFJfMSwgUl9sbTEpOworICAgICAgICAgICAgZG91 YmxlIHAxID0gUCgtMSwgbCwgLW0gKyAxLCBuLCBSXzEsIFJfbG0xKTsKKworICAgICAgICAgICAg cmV0ID0gcDAgKiBzcXJ0KDEgKyBkKSAtIHAxICogKDEgLSBkKTsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGludCBkID0gKG0gPT0gLTEpID8gMSA6IDA7CisgICAgICAgICAgICBkb3Vi bGUgcDAgPSBQKCAxLCBsLCAgbSArIDEsIG4sIFJfMSwgUl9sbTEpOworICAgICAgICAgICAgZG91 YmxlIHAxID0gUCgtMSwgbCwgLW0gLSAxLCBuLCBSXzEsIFJfbG0xKTsKKworICAgICAgICAgICAg cmV0ID0gcDAgKiAoMSAtIGQpICsgcDEgKiBzcXJ0KDEgKyBkKTsKKyAgICAgICAgfQorICAgIH0K KyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZG91YmxlIFcoaW50IGwsIGludCBtLCBpbnQg biwgZG91YmxlIFJfMVszXVszXSwKKyAgICAgICAgICAgICAgICBkb3VibGUgUl9sbTFbMiAqIE1B WF9PUkRFUiArIDFdWzIgKiBNQVhfT1JERVIgKyAxXSkKK3sKKyAgICBkb3VibGUgcmV0ID0gMC47 CisKKyAgICBpZiAobSAhPSAwKSB7CisgICAgICAgIGlmIChtID4gMCkgeworICAgICAgICAgICAg ZG91YmxlIHAwID0gUCggMSwgbCwgbSArIDEsIG4sIFJfMSwgUl9sbTEpOworICAgICAgICAgICAg ZG91YmxlIHAxID0gUCgtMSwgbCwtbSAtIDEsIG4sIFJfMSwgUl9sbTEpOworCisgICAgICAgICAg ICByZXQgPSBwMCArIHAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG91YmxlIHAw ID0gUCggMSwgbCwgIG0gLSAxLCBuLCBSXzEsIFJfbG0xKTsKKyAgICAgICAgICAgIGRvdWJsZSBw MSA9IFAoLTEsIGwsIC1tICsgMSwgbiwgUl8xLCBSX2xtMSk7CisKKyAgICAgICAgICAgIHJldCA9 IHAwIC0gcDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZCBjYWxjX3JvdGF0aW9uX21hdChBVkZpbHRlckNvbnRleHQgKmN0eCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFtYmlzb25pY0NvbnRleHQgKnMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkb3VibGUgeWF3LCBkb3VibGUgcGl0Y2gsIGRvdWJsZSByb2xsKQor eworICAgIGRvdWJsZSBYWzNdWzNdID0ge3swLn19LCBZWzNdWzNdID0ge3swLn19LCBaWzNdWzNd ID0ge3swLn19LCBSWzNdWzNdLCB0WzNdWzNdOworICAgIGRvdWJsZSBSX2xtMVsyICogTUFYX09S REVSICsgMV1bMiAqIE1BWF9PUkRFUiArIDFdID0ge3swLn19OworICAgIGRvdWJsZSBSXzFbM11b M107CisKKyAgICB5YXcgICA9IChNX1BJIC8gMTgwLikgKiB5YXc7CisgICAgcGl0Y2ggPSAoTV9Q SSAvIDE4MC4pICogcGl0Y2g7CisgICAgcm9sbCAgPSAoTV9QSSAvIDE4MC4pICogcm9sbDsKKwor ICAgIFhbMF1bMF0gPSAxLjsKKyAgICBYWzFdWzFdID0gWFsyXVsyXSA9IGNvcyhyb2xsKTsKKyAg ICBYWzFdWzJdID0gc2luKHJvbGwpOworICAgIFhbMl1bMV0gPSAtWFsxXVsyXTsKKworICAgIFlb MF1bMF0gPSBZWzJdWzJdID0gY29zKHBpdGNoKTsKKyAgICBZWzBdWzJdID0gc2luKHBpdGNoKTsK KyAgICBZWzJdWzBdID0gLVlbMF1bMl07CisgICAgWVsxXVsxXSA9IDEuOworCisgICAgWlswXVsw XSA9IFpbMV1bMV0gPSBjb3MoeWF3KTsKKyAgICBaWzBdWzFdID0gc2luKHlhdyk7CisgICAgWlsx XVswXSA9IC1aWzBdWzFdOworICAgIFpbMl1bMl0gPSAxLjsKKworICAgIG11bHRpcGx5X21hdCh0 LCBYLCBZKTsKKyAgICBtdWx0aXBseV9tYXQoUiwgdCwgWik7CisKKyAgICBSXzFbMF1bMF0gPSBS WzFdWzFdOworICAgIFJfMVswXVsxXSA9IFJbMV1bMl07CisgICAgUl8xWzBdWzJdID0gUlsxXVsw XTsKKyAgICBSXzFbMV1bMF0gPSBSWzJdWzFdOworICAgIFJfMVsxXVsxXSA9IFJbMl1bMl07Cisg ICAgUl8xWzFdWzJdID0gUlsyXVswXTsKKyAgICBSXzFbMl1bMF0gPSBSWzBdWzFdOworICAgIFJf MVsyXVsxXSA9IFJbMF1bMl07CisgICAgUl8xWzJdWzJdID0gUlswXVswXTsKKworICAgIG1lbXNl dChzLT5yb3RhdGVfbWF0LCAwLCBzaXplb2Yocy0+cm90YXRlX21hdCkpOworCisgICAgcy0+cm90 YXRlX21hdFswXVswXSA9IDEuOworICAgIHMtPnJvdGF0ZV9tYXRbMV1bMV0gPSBSXzFbMF1bMF07 CisgICAgcy0+cm90YXRlX21hdFsxXVsyXSA9IFJfMVswXVsxXTsKKyAgICBzLT5yb3RhdGVfbWF0 WzFdWzNdID0gUl8xWzBdWzJdOworICAgIHMtPnJvdGF0ZV9tYXRbMl1bMV0gPSBSXzFbMV1bMF07 CisgICAgcy0+cm90YXRlX21hdFsyXVsyXSA9IFJfMVsxXVsxXTsKKyAgICBzLT5yb3RhdGVfbWF0 WzJdWzNdID0gUl8xWzFdWzJdOworICAgIHMtPnJvdGF0ZV9tYXRbM11bMV0gPSBSXzFbMl1bMF07 CisgICAgcy0+cm90YXRlX21hdFszXVsyXSA9IFJfMVsyXVsxXTsKKyAgICBzLT5yb3RhdGVfbWF0 WzNdWzNdID0gUl8xWzJdWzJdOworCisgICAgUl9sbTFbMF1bMF0gPSBSXzFbMF1bMF07CisgICAg Ul9sbTFbMF1bMV0gPSBSXzFbMF1bMV07CisgICAgUl9sbTFbMF1bMl0gPSBSXzFbMF1bMl07Cisg ICAgUl9sbTFbMV1bMF0gPSBSXzFbMV1bMF07CisgICAgUl9sbTFbMV1bMV0gPSBSXzFbMV1bMV07 CisgICAgUl9sbTFbMV1bMl0gPSBSXzFbMV1bMl07CisgICAgUl9sbTFbMl1bMF0gPSBSXzFbMl1b MF07CisgICAgUl9sbTFbMl1bMV0gPSBSXzFbMl1bMV07CisgICAgUl9sbTFbMl1bMl0gPSBSXzFb Ml1bMl07CisKKyAgICBmb3IgKGludCBsID0gMjsgbCA8PSBzLT5vcmRlcjsgbCsrKSB7CisgICAg ICAgIGRvdWJsZSBSX2xbMiAqIE1BWF9PUkRFUiArIDFdWzIgKiBNQVhfT1JERVIgKyAxXSA9IHt7 MC59fTsKKworICAgICAgICBmb3IgKGludCBtID0gLWw7IG0gPD0gbDsgbSsrKSB7CisgICAgICAg ICAgICBmb3IgKGludCBuID0gLWw7IG4gPD0gbDsgbisrKSB7CisgICAgICAgICAgICAgICAgaW50 IGQgPSAobSA9PSAwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgIGRvdWJsZSBkZW5vbSA9IEZG QUJTKG4pID09IGwgPyAoMiAqIGwpICogKDIgKiBsIC0gMSkgOiBsICogbCAtIG4gKiBuOworICAg ICAgICAgICAgICAgIGRvdWJsZSB1ID0gc3FydCgobCAqIGwgLSBtICogbSkgLyBkZW5vbSk7Cisg ICAgICAgICAgICAgICAgZG91YmxlIHYgPSBzcXJ0KCgxLiArIGQpICogKGwgKyBGRkFCUyhtKSAt IDEuKSAqIChsICsgRkZBQlMobSkpIC8gZGVub20pICogKDEuIC0gMi4gKiBkKSAqIDAuNTsKKyAg ICAgICAgICAgICAgICBkb3VibGUgdyA9IHNxcnQoKGwgLSBGRkFCUyhtKSAtIDEuKSoobCAtIEZG QUJTKG0pKSAvIGRlbm9tKSAqICgxLiAtIGQpICogLTAuNTsKKworICAgICAgICAgICAgICAgIGlm ICh1KQorICAgICAgICAgICAgICAgICAgICB1ICo9IFUobCwgbSwgbiwgUl8xLCBSX2xtMSk7Cisg ICAgICAgICAgICAgICAgaWYgKHYpCisgICAgICAgICAgICAgICAgICAgIHYgKj0gVihsLCBtLCBu LCBSXzEsIFJfbG0xKTsKKyAgICAgICAgICAgICAgICBpZiAodykKKyAgICAgICAgICAgICAgICAg ICAgdyAqPSBXKGwsIG0sIG4sIFJfMSwgUl9sbTEpOworCisgICAgICAgICAgICAgICAgUl9sW20g KyBsXVtuICsgbF0gPSB1ICsgdiArIHc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIgKiBsICsgMTsgaSsrKSB7CisgICAgICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8IDIgKiBsICsgMTsgaisrKQorICAgICAgICAgICAgICAgIHMtPnJv dGF0ZV9tYXRbbCAqIGwgKyBpXVtsICogbCArIGpdID0gUl9sW2ldW2pdOworICAgICAgICB9CisK KyAgICAgICAgbWVtY3B5KFJfbG0xLCBSX2wsIHNpemVvZihSX2wpKTsKKyAgICB9CisKKyAgICBh dl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJyb3RhdGlvbiBtYXRyaXg6XG4iKTsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IFNRUihzLT5vcmRlciArIDEpOyBpKyspIHsKKyAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCBTUVIocy0+b3JkZXIgKyAxKTsgaisrKSB7CisgICAgICAgICAgICBpZiAo ZmFicyhzLT5yb3RhdGVfbWF0W2ldW2pdKSA8IDFlLTZmKQorICAgICAgICAgICAgICAgIHMtPnJv dGF0ZV9tYXRbaV1bal0gPSAwLjsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJV RywgIlx0JWciLCBzLT5yb3RhdGVfbWF0W2ldW2pdKTsKKyAgICAgICAgfQorICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfREVCVUcsICJcbiIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2Fs Y19taXJyb3JfbWF0KEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBzLT5tYXhfY2hhbm5lbHM7IGkrKykgeworICAgICAgICBkb3VibGUgZ2FpbiA9IDEuOwor ICAgICAgICBpbnQgbGV2ZWwsIG9yZGVyOworCisgICAgICAgIGFjbl90b19sZXZlbF9vcmRlcihp LCAmbGV2ZWwsICZvcmRlcik7CisKKyAgICAgICAgaWYgKGkgPT0gMCB8fCAoISgobGV2ZWwgKyBv cmRlcikgJiAxKSkpIHsKKyAgICAgICAgICAgIGdhaW4gKj0gcy0+Z2FpbltFVkVOXVtEX1pdOwor CisgICAgICAgICAgICBpZiAocy0+aW52ZXJ0W0RfWl0gJiAyKQorICAgICAgICAgICAgICAgIGdh aW4gKj0gLTEuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChsZXZlbCArIG9yZGVyKSAmIDEp IHsKKyAgICAgICAgICAgIGdhaW4gKj0gcy0+Z2FpbltPRERdW0RfWl07CisKKyAgICAgICAgICAg IGlmIChzLT5pbnZlcnRbRF9aXSAmIDEpCisgICAgICAgICAgICAgICAgZ2FpbiAqPSAtMS47Cisg ICAgICAgIH0KKworICAgICAgICBpZiAob3JkZXIgPj0gMCkgeworICAgICAgICAgICAgZ2FpbiAq PSBzLT5nYWluW0VWRU5dW0RfWV07CisKKyAgICAgICAgICAgIGlmIChzLT5pbnZlcnRbRF9ZXSAm IDIpCisgICAgICAgICAgICAgICAgZ2FpbiAqPSAtMS47CisgICAgICAgIH0KKworICAgICAgICBp ZiAob3JkZXIgPCAwKSB7CisgICAgICAgICAgICBnYWluICo9IHMtPmdhaW5bT0REXVtEX1ldOwor CisgICAgICAgICAgICBpZiAocy0+aW52ZXJ0W0RfWV0gJiAxKQorICAgICAgICAgICAgICAgIGdh aW4gKj0gLTEuOworICAgICAgICB9CisKKworICAgICAgICBpZiAoKChvcmRlciA8IDApICYmIChv cmRlciAmIDEpKSB8fCAoKG9yZGVyID49IDApICYmICEob3JkZXIgJiAxKSkgKSB7CisgICAgICAg ICAgICBnYWluICo9IHMtPmdhaW5bRVZFTl1bRF9YXTsKKworICAgICAgICAgICAgaWYgKHMtPmlu dmVydFtEX1hdICYgMikKKyAgICAgICAgICAgICAgICBnYWluICo9IC0xLjsKKyAgICAgICAgfQor CisgICAgICAgIGlmICgoKG9yZGVyIDwgMCkgJiYgIShvcmRlciAmIDEpKSB8fCAoKG9yZGVyID49 IDApICYmIChvcmRlciAmIDEpKSkgeworICAgICAgICAgICAgZ2FpbiAqPSBzLT5nYWluW09ERF1b RF9YXTsKKworICAgICAgICAgICAgaWYgKHMtPmludmVydFtEX1hdICYgMSkKKyAgICAgICAgICAg ICAgICBnYWluICo9IC0xLjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA9PSBvcmRl ciB8fCBsZXZlbCA9PSAtb3JkZXIpIHsKKyAgICAgICAgICAgIGdhaW4gKj0gcy0+Z2FpblswXVtE X0NdOworCisgICAgICAgICAgICBpZiAocy0+aW52ZXJ0W0RfQ10pCisgICAgICAgICAgICAgICAg Z2FpbiAqPSAtMS47CisgICAgICAgIH0KKworICAgICAgICBzLT5taXJyb3JfbWF0W2ldID0gZ2Fp bjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG11bHRpcGx5X21hdDE2KGRvdWJsZSBvdXRbMTZd WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBhWzE2XVsxNl0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYlsxNl1bMTZdLCBpbnQg eCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkrKykgeworICAgICAgICBmb3IgKGlu dCBqID0gMDsgaiA8IHg7IGorKykgeworICAgICAgICAgICAgZG91YmxlIHN1bSA9IDAuOworCisg ICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHg7IGsrKykKKyAgICAgICAgICAgICAgICBz dW0gKz0gYVtpXVtrXSAqIGJba11bal07CisKKyAgICAgICAgICAgIG91dFtpXVtqXSA9IHN1bTsK KyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgbXVsdGlwbHlfbWF0eChkb3VibGUg b3V0WzE2XVsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBhWzE2 XVsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBiWzRdWzRdKQor eworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGog PSAwOyBqIDwgNDsgaisrKSB7CisgICAgICAgICAgICBkb3VibGUgc3VtID0gMC47CisKKyAgICAg ICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgaysrKQorICAgICAgICAgICAgICAgIHN1bSAr PSBhW2ldW2tdICogYltrXVtqXTsKKworICAgICAgICAgICAgb3V0W2ldW2pdID0gc3VtOworICAg ICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseV9tYXQ0KGRvdWJsZSBvdXRb NF1bNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBhWzRdWzRdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYls0XVs0XSkKK3sKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IDQ7IGorKykgeworICAgICAgICAgICAgZG91YmxlIHN1bSA9IDAuOworCisgICAgICAgICAgICBm b3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgICAgICAgICBzdW0gKz0gYVtpXVtr XSAqIGJba11bal07CisKKyAgICAgICAgICAgIG91dFtpXVtqXSA9IHN1bTsKKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIHZvaWQgZG9taW5hdGVfbWF0KGRvdWJsZSBkLCBpbnQgaW5kZXgs IGRvdWJsZSBtWzRdWzRdKQoreworICAgIGRvdWJsZSBnMCwgZzEsIGssIGtyOworCisgICAgayA9 IGRiMmEoZCk7CisgICAga3IgPSAxLiAvIGs7CisKKyAgICBnMCA9IChrICsga3IpICogMC41Owor ICAgIGcxID0gKGsgLSBrcikgLyBNX1NRUlQyOworCisgICAgbVtBX1ddW0FfV10gICAgID0gZzA7 CisgICAgbVtBX1ddW2luZGV4XSAgID0gZzEgKiAwLjU7CisgICAgbVtpbmRleF1bQV9XXSAgID0g ZzE7CisgICAgbVtpbmRleF1baW5kZXhdID0gZzA7Cit9CisKK3N0YXRpYyB2b2lkIGRpcmVjdF9t YXQoZG91YmxlIGFuZ2xlLCBpbnQgaW5kZXgsIGRvdWJsZSBtWzRdWzRdKQoreworICAgIGRvdWJs ZSBnMCwgZzE7CisKKyAgICBnMCA9IHNxcnQoMS4gKyBzaW4oKE1fUEkvMTgwLikgKiBhbmdsZSkp OworICAgIGcxID0gc3FydCgxLiAtIHNpbigoTV9QSS8xODAuKSAqIGFuZ2xlKSk7CisKKyAgICBp ZiAoaW5kZXggPT0gMCkKKyAgICAgICAgRkZTV0FQKGRvdWJsZSwgZzAsIGcxKTsKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgICBtW2ldW2ldID0gaW5kZXggPT0gaSA/ IGcxIDogZzA7Cit9CisKK3N0YXRpYyB2b2lkIHpvb21fbWF0KGRvdWJsZSBhbmdsZSwgaW50IGlu ZGV4LCBkb3VibGUgbVs0XVs0XSkKK3sKKyAgICBkb3VibGUgZzAsIGcxOworCisgICAgYW5nbGUg PSBhbmdsZSAqIChNX1BJIC8gMTgwLik7CisKKyAgICBnMCA9IHNpbihhbmdsZSk7CisgICAgZzEg PSBjb3MoYW5nbGUpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAg ICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgbVtpXVtpXSA9IDEuOworICAgICAgICB9IGVs c2UgaWYgKGkgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgIG1baV1baV0gPSAxLjsKKyAgICAgICAg ICAgIG1bQV9XXVtpXSA9IGcwIC8gTV9TUVJUMjsKKyAgICAgICAgICAgIG1baV1bQV9XXSA9IGcw ICogTV9TUVJUMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1baV1baV0gPSBnMTsK KyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZm9jdXNfbWF0KGRvdWJsZSBhbmds ZSwgaW50IGluZGV4LCBkb3VibGUgbVs0XVs0XSkKK3sKKyAgICBkb3VibGUgZzAsIGcxLCBnMjsK KworICAgIGFuZ2xlID0gYW5nbGUgKiAoTV9QSSAvIDE4MC4pOworCisgICAgZzAgPSAxLiAvICgx LiArIHNpbihmYWJzKGFuZ2xlKSkpOworICAgIGcxID0gTV9TUVJUMiAqIHNpbihhbmdsZSkgKiBn MDsKKyAgICBnMiA9IGNvcyhhbmdsZSkgKiBnMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg NDsgaSsrKSB7CisgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgIG1baV1baV0gPSBn MDsKKyAgICAgICAgfSBlbHNlIGlmIChpID09IGluZGV4KSB7CisgICAgICAgICAgICBtW2ldW2ld ID0gZzA7CisgICAgICAgICAgICBtW0FfV11baV0gPSBnMSAvIDIuOworICAgICAgICAgICAgbVtp XVtBX1ddID0gZzE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtW2ldW2ldID0gZzI7 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hfbWF0KGRvdWJsZSBhbmds ZSwgaW50IGluZGV4LCBkb3VibGUgbVs0XVs0XSkKK3sKKyAgICBkb3VibGUgZzAsIGcxOworCisg ICAgYW5nbGUgPSBhbmdsZSAqIChNX1BJIC8gMTgwLik7CisKKyAgICBnMCA9IE1fU1FSVDIgKiBz aW4oYW5nbGUpICogc2luKGZhYnMoYW5nbGUpKTsKKyAgICBnMSA9IFNRUihjb3MoYW5nbGUpKTsK KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGlmIChpID09IDAp IHsKKyAgICAgICAgICAgIG1baV1baV0gPSAxLjsKKyAgICAgICAgfSBlbHNlIGlmIChpID09IGlu ZGV4KSB7CisgICAgICAgICAgICBtW2ldW2ldID0gZzE7CisgICAgICAgICAgICBtW2ldW0FfV10g PSBnMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1baV1baV0gPSBnMTsKKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgcHJlc3NfbWF0KGRvdWJsZSBhbmdsZSwgaW50 IGluZGV4LCBkb3VibGUgbVs0XVs0XSkKK3sKKyAgICBkb3VibGUgZzAsIGcxLCBnMjsKKworICAg IGFuZ2xlID0gYW5nbGUgKiAoTV9QSSAvIDE4MC4pOworCisgICAgZzAgPSBNX1NRUlQyICogc2lu KGFuZ2xlKSAqIHNpbihmYWJzKGFuZ2xlKSk7CisgICAgZzIgPSBjb3MoYW5nbGUpOworICAgIGcx ID0gU1FSKGcyKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAg IGlmIChpID09IDApIHsKKyAgICAgICAgICAgIG1baV1baV0gPSAxLjsKKyAgICAgICAgfSBlbHNl IGlmIChpID09IGluZGV4KSB7CisgICAgICAgICAgICBtW2ldW2ldID0gZzE7CisgICAgICAgICAg ICBtW2ldW0FfV10gPSBnMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1baV1baV0g PSBnMjsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGNvbnN0IGRvdWJsZSBpX21hdFs0 XVs0XSA9Cit7CisgICAgeyAxLCAwLCAwLCAwIH0sCisgICAgeyAwLCAxLCAwLCAwIH0sCisgICAg eyAwLCAwLCAxLCAwIH0sCisgICAgeyAwLCAwLCAwLCAxIH0sCit9OworCitzdGF0aWMgdm9pZCBj YWxjX3ByZXNzX21hdChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGRvdWJsZSB4X21hdFs0 XVs0XSA9IHsgMCB9OworICAgIGRvdWJsZSB5X21hdFs0XVs0XSA9IHsgMCB9OworICAgIGRvdWJs ZSB6X21hdFs0XVs0XSA9IHsgMCB9OworICAgIGRvdWJsZSBvX21hdFs0XVs0XTsKKworICAgIHBy ZXNzX21hdChzLT5wcmVzc1tBX1hdLCBBX1gsIHhfbWF0KTsKKyAgICBwcmVzc19tYXQocy0+cHJl c3NbQV9ZXSwgQV9ZLCB5X21hdCk7CisgICAgcHJlc3NfbWF0KHMtPnByZXNzW0FfWl0sIEFfWiwg el9tYXQpOworCisgICAgbXVsdGlwbHlfbWF0NChvX21hdCwgeF9tYXQsIHlfbWF0KTsKKyAgICBt dWx0aXBseV9tYXQ0KHMtPnByZXNzX21hdCwgb19tYXQsIHpfbWF0KTsKK30KKworc3RhdGljIHZv aWQgY2FsY19wdXNoX21hdChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGRvdWJsZSB4X21h dFs0XVs0XSA9IHsgMCB9OworICAgIGRvdWJsZSB5X21hdFs0XVs0XSA9IHsgMCB9OworICAgIGRv dWJsZSB6X21hdFs0XVs0XSA9IHsgMCB9OworICAgIGRvdWJsZSBvX21hdFs0XVs0XTsKKworICAg IHB1c2hfbWF0KHMtPnB1c2hbQV9YXSwgQV9YLCB4X21hdCk7CisgICAgcHVzaF9tYXQocy0+cHVz aFtBX1ldLCBBX1ksIHlfbWF0KTsKKyAgICBwdXNoX21hdChzLT5wdXNoW0FfWl0sIEFfWiwgel9t YXQpOworCisgICAgbXVsdGlwbHlfbWF0NChvX21hdCwgeF9tYXQsIHlfbWF0KTsKKyAgICBtdWx0 aXBseV9tYXQ0KHMtPnB1c2hfbWF0LCBvX21hdCwgel9tYXQpOworfQorCitzdGF0aWMgdm9pZCBj YWxjX2RvbWluYXRlX21hdChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGRvdWJsZSB4X21h dFs0XVs0XTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF07CisgICAgZG91YmxlIHpfbWF0WzRdWzRd OworICAgIGRvdWJsZSBvX21hdFs0XVs0XTsKKworICAgIG1lbWNweSh4X21hdCwgaV9tYXQsIHNp emVvZihpX21hdCkpOworICAgIG1lbWNweSh5X21hdCwgaV9tYXQsIHNpemVvZihpX21hdCkpOwor ICAgIG1lbWNweSh6X21hdCwgaV9tYXQsIHNpemVvZihpX21hdCkpOworCisgICAgZG9taW5hdGVf bWF0KHMtPmRvbWluYW5jZVtBX1hdLCBBX1gsIHhfbWF0KTsKKyAgICBkb21pbmF0ZV9tYXQocy0+ ZG9taW5hbmNlW0FfWV0sIEFfWSwgeV9tYXQpOworICAgIGRvbWluYXRlX21hdChzLT5kb21pbmFu Y2VbQV9aXSwgQV9aLCB6X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQ0KG9fbWF0LCB4X21hdCwg eV9tYXQpOworICAgIG11bHRpcGx5X21hdDQocy0+ZG9taW5hdGVfbWF0LCBvX21hdCwgel9tYXQp OworfQorCitzdGF0aWMgdm9pZCBjYWxjX2RpcmVjdGlvbl9tYXQoQW1iaXNvbmljQ29udGV4dCAq cykKK3sKKyAgICBkb3VibGUgd19tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeF9tYXRb NF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3Vi bGUgel9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgdF9tYXRbNF1bNF07CisKKyAgICBk aXJlY3RfbWF0KHMtPmRpcmVjdGlvbltBX1ddLCBBX1csIHdfbWF0KTsKKyAgICBkaXJlY3RfbWF0 KHMtPmRpcmVjdGlvbltBX1hdLCBBX1gsIHhfbWF0KTsKKyAgICBkaXJlY3RfbWF0KHMtPmRpcmVj dGlvbltBX1ldLCBBX1ksIHlfbWF0KTsKKyAgICBkaXJlY3RfbWF0KHMtPmRpcmVjdGlvbltBX1pd LCBBX1osIHpfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHdfbWF0LCB4X21hdCk7 CisgICAgbXVsdGlwbHlfbWF0NCh3X21hdCwgdF9tYXQsIHlfbWF0KTsKKyAgICBtdWx0aXBseV9t YXQ0KHMtPmRpcmVjdGlvbl9tYXQsIHdfbWF0LCB6X21hdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNh bGNfem9vbV9tYXQoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3VibGUgeF9tYXRbNF1b NF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUg el9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgdF9tYXRbNF1bNF07CisKKyAgICB6b29t X21hdChzLT56b29tW0FfWF0sIEFfWCwgeF9tYXQpOworICAgIHpvb21fbWF0KHMtPnpvb21bQV9Z XSwgQV9ZLCB5X21hdCk7CisgICAgem9vbV9tYXQocy0+em9vbVtBX1pdLCBBX1osIHpfbWF0KTsK KworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHhfbWF0LCB5X21hdCk7CisgICAgbXVsdGlwbHlf bWF0NChzLT56b29tX21hdCwgdF9tYXQsIHpfbWF0KTsKK30KKworc3RhdGljIHZvaWQgY2FsY19m b2N1c19tYXQoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3VibGUgeF9tYXRbNF1bNF0g PSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgel9t YXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgdF9tYXRbNF1bNF07CisKKyAgICBmb2N1c19t YXQocy0+Zm9jdXNbQV9YXSwgQV9YLCB4X21hdCk7CisgICAgZm9jdXNfbWF0KHMtPmZvY3VzW0Ff WV0sIEFfWSwgeV9tYXQpOworICAgIGZvY3VzX21hdChzLT5mb2N1c1tBX1pdLCBBX1osIHpfbWF0 KTsKKworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHhfbWF0LCB5X21hdCk7CisgICAgbXVsdGlw bHlfbWF0NChzLT5mb2N1c19tYXQsIHRfbWF0LCB6X21hdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNh bGNfdHJhbnNmb3JtX21hdChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGNvbnN0IGludCBp bnB1dHMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzOworICAgIGRvdWJsZSB0dF9t YXRbMTZdWzE2XSA9IHsgMCB9OworICAgIGRvdWJsZSBvX21hdFsxNl1bMTZdID0geyAwIH07Cisg ICAgZG91YmxlIHRfbWF0WzRdWzRdOworICAgIGRvdWJsZSByX21hdFs0XVs0XTsKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzOyBpKyspCisgICAgICAgIHR0X21hdFtpXVtpXSA9IHMt Pm1pcnJvcl9tYXRbaV07CisgCisgICAgbXVsdGlwbHlfbWF0NCh0X21hdCwgcy0+ZG9taW5hdGVf bWF0LCBzLT5kaXJlY3Rpb25fbWF0KTsKKyAgICBtdWx0aXBseV9tYXQ0KHJfbWF0LCB0X21hdCwg cy0+em9vbV9tYXQpOworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHJfbWF0LCBzLT5mb2N1c19t YXQpOworICAgIG11bHRpcGx5X21hdDQocl9tYXQsIHRfbWF0LCBzLT5wdXNoX21hdCk7CisgICAg bXVsdGlwbHlfbWF0NCh0X21hdCwgcl9tYXQsIHMtPnByZXNzX21hdCk7CisKKyAgICBtdWx0aXBs eV9tYXR4KG9fbWF0LCB0dF9tYXQsIHRfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDE2KHMtPnRy YW5zZm9ybV9tYXQsIHMtPnJvdGF0ZV9tYXQsIG9fbWF0LCBpbnB1dHMpOworfQorCitzdGF0aWMg dm9pZCBuZWFyX2ZpZWxkKEFtYmlzb25pY0NvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lLCBpbnQg b3V0LCBpbnQgYWRkKQoreworICAgIGZvciAoaW50IGNoID0gMSAtIG91dDsgY2ggPCBmcmFtZS0+ Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIGludCBuLCBtOworCisgICAg ICAgIGFjbl90b19sZXZlbF9vcmRlcihjaCwgJm4sICZtKTsKKworICAgICAgICBpZiAoIXMtPm5m X3Byb2Nlc3NbbiAtIDFdKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcy0+bmZfcHJv Y2Vzc1tuIC0gMV0oJnMtPm5mW291dF1bY2hdLCBmcmFtZSwgY2gsIGFkZCwgMS4pOworICAgIH0K K30KKworc3RhdGljIHZvaWQgeG92ZXJfcHJvY2Vzc2YoWG92ZXIgKnhvdmVyLCBjb25zdCBmbG9h dCAqc3JjLCBmbG9hdCAqZHN0LCBpbnQgbmJfc2FtcGxlcykKK3sKKyAgICBmbG9hdCBiMCA9IHhv dmVyLT5iWzBdOworICAgIGZsb2F0IGIxID0geG92ZXItPmJbMV07CisgICAgZmxvYXQgYjIgPSB4 b3Zlci0+YlsyXTsKKyAgICBmbG9hdCBhMSA9IHhvdmVyLT5hWzFdOworICAgIGZsb2F0IGEyID0g eG92ZXItPmFbMl07CisgICAgZmxvYXQgdzAgPSB4b3Zlci0+d1swXTsKKyAgICBmbG9hdCB3MSA9 IHhvdmVyLT53WzFdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9zYW1wbGVzOyBpKysp IHsKKyAgICAgICAgZmxvYXQgaW4gPSBzcmNbaV07CisgICAgICAgIGZsb2F0IG91dCA9IGIwICog aW4gKyB3MDsKKworICAgICAgICB3MCA9IGIxICogaW4gKyB3MSArIGExICogb3V0OworICAgICAg ICB3MSA9IGIyICogaW4gKyBhMiAqIG91dDsKKworICAgICAgICBkc3RbaV0gPSBvdXQ7CisgICAg fQorCisgICAgeG92ZXItPndbMF0gPSB3MDsKKyAgICB4b3Zlci0+d1sxXSA9IHcxOworfQorCitz dGF0aWMgdm9pZCB4b3Zlcl9wcm9jZXNzZChYb3ZlciAqeG92ZXIsIGNvbnN0IGRvdWJsZSAqc3Jj LCBkb3VibGUgKmRzdCwgaW50IG5iX3NhbXBsZXMpCit7CisgICAgZG91YmxlIGIwID0geG92ZXIt PmJbMF07CisgICAgZG91YmxlIGIxID0geG92ZXItPmJbMV07CisgICAgZG91YmxlIGIyID0geG92 ZXItPmJbMl07CisgICAgZG91YmxlIGExID0geG92ZXItPmFbMV07CisgICAgZG91YmxlIGEyID0g eG92ZXItPmFbMl07CisgICAgZG91YmxlIHcwID0geG92ZXItPndbMF07CisgICAgZG91YmxlIHcx ID0geG92ZXItPndbMV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3NhbXBsZXM7IGkr KykgeworICAgICAgICBkb3VibGUgaW4gPSBzcmNbaV07CisgICAgICAgIGRvdWJsZSBvdXQgPSBi MCAqIGluICsgdzA7CisKKyAgICAgICAgdzAgPSBiMSAqIGluICsgdzEgKyBhMSAqIG91dDsKKyAg ICAgICAgdzEgPSBiMiAqIGluICsgYTIgKiBvdXQ7CisKKyAgICAgICAgZHN0W2ldID0gb3V0Owor ICAgIH0KKworICAgIHhvdmVyLT53WzBdID0gdzA7CisgICAgeG92ZXItPndbMV0gPSB3MTsKK30K Kworc3RhdGljIHZvaWQgeG92ZXJmKEFtYmlzb25pY0NvbnRleHQgKnMsCisgICAgICAgICAgICAg ICAgICAgQVZGcmFtZSAqaW4sIEFWRnJhbWUgKmxmLCBBVkZyYW1lICpoZikKK3sKKyAgICBmb3Ig KGludCBjaCA9IDA7IGNoIDwgaW4tPmNoX2xheW91dC5uYl9jaGFubmVsczsgY2grKykgeworICAg ICAgICB4b3Zlcl9wcm9jZXNzZigmcy0+eG92ZXJbMF1bY2hdLAorICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgZmxvYXQgKilpbi0+ZXh0ZW5kZWRfZGF0YVtjaF0sCisgICAgICAgICAgICAg ICAgICAgICAgIChmbG9hdCAqKWxmLT5leHRlbmRlZF9kYXRhW2NoXSwgaW4tPm5iX3NhbXBsZXMp OworCisgICAgICAgIHhvdmVyX3Byb2Nlc3NmKCZzLT54b3ZlclsxXVtjaF0sCisgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdCBmbG9hdCAqKWluLT5leHRlbmRlZF9kYXRhW2NoXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgKGZsb2F0ICopaGYtPmV4dGVuZGVkX2RhdGFbY2hdLCBpbi0+bmJf c2FtcGxlcyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB4b3ZlcmQoQW1iaXNvbmljQ29udGV4 dCAqcywKKyAgICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFtZSAqbGYsIEFWRnJh bWUgKmhmKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBpbi0+Y2hfbGF5b3V0Lm5iX2No YW5uZWxzOyBjaCsrKSB7CisgICAgICAgIHhvdmVyX3Byb2Nlc3NkKCZzLT54b3ZlclswXVtjaF0s CisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBkb3VibGUgKilpbi0+ZXh0ZW5kZWRfZGF0 YVtjaF0sCisgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgKilsZi0+ZXh0ZW5kZWRfZGF0 YVtjaF0sIGluLT5uYl9zYW1wbGVzKTsKKworICAgICAgICB4b3Zlcl9wcm9jZXNzZCgmcy0+eG92 ZXJbMV1bY2hdLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgZG91YmxlICopaW4tPmV4 dGVuZGVkX2RhdGFbY2hdLAorICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlICopaGYtPmV4 dGVuZGVkX2RhdGFbY2hdLCBpbi0+bmJfc2FtcGxlcyk7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBwcm9jZXNzX2Zsb2F0KEFWRmlsdGVyQ29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFtZSAqb3V0KQoreworICAgIEFtYmlzb25pY0NvbnRl eHQgKnMgPSBjdHgtPnByaXY7CisKKyAgICBzY2FsZWYocywgaW4sIHMtPnNmcmFtZSwgcy0+bm9y bV90YWJbcy0+c2NhbGluZ19ub3JtXSwKKyAgICAgICAgICAgaW4tPm5iX3NhbXBsZXMsIEZGTUlO KGluLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMsIHMtPm1heF9jaGFubmVscyksCisgICAgICAgICAg IHMtPnNlcV9tYXApOworCisgICAgY2FsY190cmFuc2Zvcm1fbWF0KHMpOworCisgICAgdHJhbnNm b3JtZihzLCBzLT5zZnJhbWUsIHMtPnJmcmFtZSwgcy0+dHJhbnNmb3JtX21hdCwKKyAgICAgICAg ICAgICAgIGluLT5uYl9zYW1wbGVzLCBGRk1JTihpbi0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLCBz LT5tYXhfY2hhbm5lbHMpLAorICAgICAgICAgICAgICAgcy0+c2VxX21hcCk7CisKKyAgICBpZiAo cy0+bmVhcl9maWVsZCA9PSBORl9JTikKKyAgICAgICAgbmVhcl9maWVsZChzLCBzLT5yZnJhbWUs IDAsIDApOworCisgICAgaWYgKHMtPnhvdmVyX2ZyZXEgPiAwLikgeworICAgICAgICB4b3ZlcmYo cywgcy0+cmZyYW1lLCBzLT5mcmFtZTIsIHMtPnJmcmFtZSk7CisKKyAgICAgICAgbXVsdGlwbHlm KHMsIHMtPmRlY29kZV9tYXQsCisgICAgICAgICAgICAgICAgICBhbWJpc29uaWNfdGFiW3MtPmxh eW91dF0uaW5wdXRzLAorICAgICAgICAgICAgICAgICAgYW1iaXNvbmljX3RhYltzLT5sYXlvdXRd LnNwZWFrZXJzLAorICAgICAgICAgICAgICAgICAgcy0+c2VxX21hcCwKKyAgICAgICAgICAgICAg ICAgIHMtPmdhaW5zX3RhYlswXSwKKyAgICAgICAgICAgICAgICAgIGluLT5jaF9sYXlvdXQubmJf Y2hhbm5lbHMsCisgICAgICAgICAgICAgICAgICBzLT5tYXhfY2hhbm5lbHMsCisgICAgICAgICAg ICAgICAgICBzLT5mcmFtZTIsIG91dCk7CisgICAgfQorCisgICAgbXVsdGlwbHlmKHMsIHMtPmRl Y29kZV9tYXQsCisgICAgICAgICAgICAgIGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5pbnB1dHMs CisgICAgICAgICAgICAgIGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2VycywKKyAgICAg ICAgICAgICAgcy0+c2VxX21hcCwKKyAgICAgICAgICAgICAgcy0+eG92ZXJfZnJlcSA+IDAuID8g cy0+Z2FpbnNfdGFiWzFdIDogTlVMTCwKKyAgICAgICAgICAgICAgaW4tPmNoX2xheW91dC5uYl9j aGFubmVscywKKyAgICAgICAgICAgICAgcy0+bWF4X2NoYW5uZWxzLAorICAgICAgICAgICAgICBz LT5yZnJhbWUsIG91dCk7CisKKyAgICBpZiAocy0+bmVhcl9maWVsZCA9PSBORl9PVVQpCisgICAg ICAgIG5lYXJfZmllbGQocywgb3V0LCAxLCAxKTsKKworICAgIGxldmVsZihzLCBvdXQsIHMtPmxl dmVsX3RhYiwKKyAgICAgICAgICAgb3V0LT5uYl9zYW1wbGVzLCBvdXQtPmNoX2xheW91dC5uYl9j aGFubmVscyk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZG91YmxlKEFWRmlsdGVyQ29udGV4 dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqaW4sIEFWRnJhbWUg Km91dCkKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4LT5wcml2OworCisgICAgc2Nh bGVkKHMsIGluLCBzLT5zZnJhbWUsIHMtPm5vcm1fdGFiW3MtPnNjYWxpbmdfbm9ybV0sCisgICAg ICAgICAgIGluLT5uYl9zYW1wbGVzLCBGRk1JTihpbi0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLCBz LT5tYXhfY2hhbm5lbHMpLAorICAgICAgICAgICBzLT5zZXFfbWFwKTsKKworICAgIGNhbGNfdHJh bnNmb3JtX21hdChzKTsKKworICAgIHRyYW5zZm9ybWQocywgcy0+c2ZyYW1lLCBzLT5yZnJhbWUs IHMtPnRyYW5zZm9ybV9tYXQsCisgICAgICAgICAgICAgICBpbi0+bmJfc2FtcGxlcywgRkZNSU4o aW4tPmNoX2xheW91dC5uYl9jaGFubmVscywgcy0+bWF4X2NoYW5uZWxzKSwKKyAgICAgICAgICAg ICAgIHMtPnNlcV9tYXApOworCisgICAgaWYgKHMtPm5lYXJfZmllbGQgPT0gTkZfSU4pCisgICAg ICAgIG5lYXJfZmllbGQocywgcy0+cmZyYW1lLCAwLCAwKTsKKworICAgIGlmIChzLT54b3Zlcl9m cmVxID4gMC4pIHsKKyAgICAgICAgeG92ZXJkKHMsIHMtPnJmcmFtZSwgcy0+ZnJhbWUyLCBzLT5y ZnJhbWUpOworCisgICAgICAgIG11bHRpcGx5ZChzLCBzLT5kZWNvZGVfbWF0LAorICAgICAgICAg ICAgICAgICAgYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLmlucHV0cywKKyAgICAgICAgICAgICAg ICAgIGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2VycywKKyAgICAgICAgICAgICAgICAg IHMtPnNlcV9tYXAsCisgICAgICAgICAgICAgICAgICBzLT5nYWluc190YWJbMF0sCisgICAgICAg ICAgICAgICAgICBpbi0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLAorICAgICAgICAgICAgICAgICAg cy0+bWF4X2NoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgcy0+ZnJhbWUyLCBvdXQpOworICAg IH0KKworICAgIG11bHRpcGx5ZChzLCBzLT5kZWNvZGVfbWF0LAorICAgICAgICAgICAgICBhbWJp c29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzLAorICAgICAgICAgICAgICBhbWJpc29uaWNfdGFi W3MtPmxheW91dF0uc3BlYWtlcnMsCisgICAgICAgICAgICAgIHMtPnNlcV9tYXAsCisgICAgICAg ICAgICAgIHMtPnhvdmVyX2ZyZXEgPiAwLiA/IHMtPmdhaW5zX3RhYlsxXSA6IE5VTEwsCisgICAg ICAgICAgICAgIGluLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMsCisgICAgICAgICAgICAgIHMtPm1h eF9jaGFubmVscywKKyAgICAgICAgICAgICAgcy0+cmZyYW1lLCBvdXQpOworCisgICAgaWYgKHMt Pm5lYXJfZmllbGQgPT0gTkZfT1VUKQorICAgICAgICBuZWFyX2ZpZWxkKHMsIG91dCwgMSwgMSk7 CisKKyAgICBsZXZlbGQocywgb3V0LCBzLT5sZXZlbF90YWIsCisgICAgICAgICAgIG91dC0+bmJf c2FtcGxlcywgb3V0LT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpOworfQorCitzdGF0aWMgZG91Ymxl IHNwZWVkX29mX3NvdW5kKGRvdWJsZSB0ZW1wKQoreworICAgIHJldHVybiAxLjg1MzI1ICogKDY0 My45NSAqIHNxcnQoKCh0ZW1wICsgMjczLjE1KSAvIDI3My4xNSkpKSAqIDEwMDAuMCAvICg2MC4g KiA2MC4pOworfQorCitzdGF0aWMgdm9pZCBuZmllbGQxX2luaXQoTmVhckZpZWxkICpuZiwgZG91 YmxlIHJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3BlZWQsIGRvdWJs ZSByYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBnYWluKQoreworICAgIGRv dWJsZSB3ID0gMC41ICogc3BlZWQgLyAocmFkaXVzICogcmF0ZSk7CisKKyAgICBuZi0+ZFswXSA9 IDEuIC8gKDEuICsgdyk7CisgICAgbmYtPmRbMV0gPSAoMi4gKiB3KSAqIG5mLT5kWzBdOworfQor CitzdGF0aWMgdm9pZCBuZmllbGQxX3Byb2Nlc3NmKE5lYXJGaWVsZCAqbmYsIEFWRnJhbWUgKmZy YW1lLCBpbnQgY2gsIGludCBhZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSBnYWluKQoreworICAgIGZsb2F0ICpkc3QgPSAoZmxvYXQgKilmcmFtZS0+ZXh0ZW5kZWRfZGF0 YVtjaF07CisgICAgZmxvYXQgejAsIGQwLCBkMTsKKworICAgIHowID0gbmYtPnpbMF07CisgICAg ZDAgPSBuZi0+ZFswXSAqIGdhaW47CisgICAgZDEgPSBuZi0+ZFsxXTsKKworICAgIGZvciAoaW50 IG4gPSAwOyBuIDwgZnJhbWUtPm5iX3NhbXBsZXM7IG4rKykgeworICAgICAgICBmbG9hdCB4ID0g ZHN0W25dICogZDAgLSBkMSAqIHowOworICAgICAgICBkc3Rbbl0gPSB4ICsgKGFkZCA/IGRzdFtu XSA6IDAuZik7CisgICAgICAgIHowICs9IHg7CisgICAgfQorCisgICAgbmYtPnpbMF0gPSB6MDsK K30KKworc3RhdGljIHZvaWQgbmZpZWxkMV9wcm9jZXNzZChOZWFyRmllbGQgKm5mLCBBVkZyYW1l ICpmcmFtZSwgaW50IGNoLCBpbnQgYWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgZ2FpbikKK3sKKyAgICBkb3VibGUgKmRzdCA9IChkb3VibGUgKilmcmFtZS0+ZXh0ZW5k ZWRfZGF0YVtjaF07CisgICAgZG91YmxlIHowLCBkMCwgZDE7CisKKyAgICB6MCA9IG5mLT56WzBd OworICAgIGQwID0gbmYtPmRbMF0gKiBnYWluOworICAgIGQxID0gbmYtPmRbMV07CisKKyAgICBm b3IgKGludCBuID0gMDsgbiA8IGZyYW1lLT5uYl9zYW1wbGVzOyBuKyspIHsKKyAgICAgICAgZG91 YmxlIHggPSBkc3Rbbl0gKiBkMCAtIGQxICogejA7CisgICAgICAgIGRzdFtuXSA9IHggKyAoYWRk ID8gZHN0W25dIDogMC5mKTsKKyAgICAgICAgejAgKz0geDsKKyAgICB9CisKKyAgICBuZi0+elsw XSA9IHowOworfQorCitzdGF0aWMgdm9pZCBuZWFyX2ZpZWxkX2luaXQoQW1iaXNvbmljQ29udGV4 dCAqcywgaW50IG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3BlZWQs IGRvdWJsZSByYXRlLCBkb3VibGUgZ2FpbikKK3sKKyAgICBmb3IgKGludCBjaCA9IDEgLSBvdXQ7 IGNoIDwgcy0+bWF4X2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIGludCBuLCBtOworCisgICAg ICAgIGFjbl90b19sZXZlbF9vcmRlcihjaCwgJm4sICZtKTsKKworICAgICAgICBpZiAoIXMtPm5m X2luaXRbbiAtIDFdKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcy0+bmZfaW5pdFtu IC0gMV0oJnMtPm5mW291dF1bY2hdLCAxLiwgc3BlZWQsIHJhdGUsIGdhaW4pOworICAgIH0KK30K Kworc3RhdGljIHZvaWQgY2FsY19sZXZlbF90YWIoQW1iaXNvbmljQ29udGV4dCAqcywgaW50IGxh eW91dCkKK3sKKyAgICBkb3VibGUgbWF4X2Rpc3RhbmNlID0gMC47CisKKyAgICBmb3IgKGludCBz cGtyID0gMDsgc3BrciA8IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2Vyczsgc3Brcisr KSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSBzcGtyX2Rpc3RhbmNlID0gYW1iaXNvbmljX3RhYltz LT5sYXlvdXRdLnNwZWFrZXJzX2Rpc3RhbmNlW3Nwa3JdOworCisgICAgICAgIGlmIChzcGtyX2Rp c3RhbmNlID4gbWF4X2Rpc3RhbmNlKQorICAgICAgICAgICAgbWF4X2Rpc3RhbmNlID0gc3Brcl9k aXN0YW5jZTsKKyAgICB9CisKKyAgICBmb3IgKGludCBzcGtyID0gMDsgc3BrciA8IGFtYmlzb25p Y190YWJbcy0+bGF5b3V0XS5zcGVha2Vyczsgc3BrcisrKSB7CisgICAgICAgIGNvbnN0IGRvdWJs ZSBzY2FsZSA9IHMtPmxldmVsID8gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFrZXJzX2Rp c3RhbmNlW3Nwa3JdIC8gbWF4X2Rpc3RhbmNlIDogMS47CisKKyAgICAgICAgcy0+bGV2ZWxfdGFi W3Nwa3JdID0gc2NhbGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjYWxjX3BnYWluc190YWIo QW1iaXNvbmljQ29udGV4dCAqcywgaW50IHR5cGUpCit7CisgICAgY29uc3QgaW50IG9yZGVyID0g cy0+b3JkZXI7CisKKyAgICBpZiAoIXR5cGUpIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw OyBsZXZlbCA8IG9yZGVyICsgMTsgbGV2ZWwrKykKKyAgICAgICAgICAgIHMtPnBnYWluc1swXVts ZXZlbF0gPSBzLT5wZ2FpbnNbMV1bbGV2ZWxdID0gMS4wOworICAgIH0gZWxzZSBpZiAodHlwZSA9 PSAxIHx8IHR5cGUgPT0gMikgeworICAgICAgICBjb25zdCBpbnQgY29tcG9uZW50cyA9IHR5cGUg PT0gMSA/IDIgKiBvcmRlciArIDEgOiBTUVIob3JkZXIgKyAxKTsKKyAgICAgICAgY29uc3QgaW50 IHNwZWFrZXJzID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFrZXJzOworICAgICAgICBk b3VibGUgRV9nYWluID0gMDsKKyAgICAgICAgZG91YmxlIGcsIGcyID0gMC47CisKKyAgICAgICAg Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG9yZGVyICsgMTsgbGV2ZWwrKykgeworICAgICAg ICAgICAgY29uc3QgZG91YmxlIGYgPSB0eXBlID09IDEgPyAxICsgKGxldmVsID4gMCk6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBTUVIobGV2ZWwpICsgMTsK KyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBlID0gdHlwZSA9PSAxID8gZ2FpbnNfMmRbb3JkZXJd W2xldmVsXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FpbnNf M2Rbb3JkZXJdW2xldmVsXTsKKyAgICAgICAgICAgIEVfZ2FpbiArPSBTUVIoZSkgKiBmOworICAg ICAgICB9CisKKyAgICAgICAgaWYgKHMtPnBndHlwZSA9PSBQVF9FTkVSR1kpIHsKKyAgICAgICAg ICAgIGcyID0gc3BlYWtlcnMgLyBFX2dhaW47CisgICAgICAgIH0gZWxzZSBpZiAocy0+cGd0eXBl ID09IFBUX1JNUykgeworICAgICAgICAgICAgZzIgPSBjb21wb25lbnRzIC8gRV9nYWluOworICAg ICAgICB9IGVsc2UgaWYgKHMtPnBndHlwZSA9PSBQVF9BTVApIHsKKyAgICAgICAgICAgIGcyID0g MS47CisgICAgICAgIH0KKworICAgICAgICBnID0gc3FydChnMik7CisKKyAgICAgICAgZm9yIChp bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG9yZGVyICsgMTsgbGV2ZWwrKykgeworICAgICAgICAgICAg Y29uc3QgZG91YmxlIGUgPSB0eXBlID09IDEgPyBnYWluc18yZFtvcmRlcl1bbGV2ZWxdOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWluc18zZFtvcmRlcl1bbGV2 ZWxdOworICAgICAgICAgICAgcy0+cGdhaW5zWzBdW2xldmVsXSA9IDEuMDsKKyAgICAgICAgICAg IHMtPnBnYWluc1sxXVtsZXZlbF0gPSBnICogZTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3Rh dGljIHZvaWQgY2FsY19nYWluc190YWIoQVZGaWx0ZXJDb250ZXh0ICpjdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBBbWJpc29uaWNDb250ZXh0ICpzLCBkb3VibGUgeG92ZXJfcmF0aW8p Cit7CisgICAgY29uc3QgaW50IGlucHV0cyA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5pbnB1 dHM7CisgICAgY29uc3QgZG91YmxlIHhvdmVyX2dhaW4gPSBkYjJhKHhvdmVyX3JhdGlvKTsKKwor ICAgIGZvciAoaW50IGxldmVsID0gMCwgY2ggPSAwOyBsZXZlbCA8IHMtPm9yZGVyICsgMTsgbGV2 ZWwrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEgKyBsZXZlbCAqIDI7IGkrKywg Y2grKykgeworICAgICAgICAgICAgY29uc3QgZG91YmxlIGxmX2dhaW4gPSBzLT5wZ2FpbnNbMF1b bGV2ZWxdOworICAgICAgICAgICAgY29uc3QgZG91YmxlIGhmX2dhaW4gPSBzLT5wZ2FpbnNbMV1b bGV2ZWxdOworCisgICAgICAgICAgICBzLT5nYWluc190YWJbMF1bY2hdID0gbGZfZ2FpbiAvIHhv dmVyX2dhaW47CisgICAgICAgICAgICBzLT5nYWluc190YWJbMV1bY2hdID0gaGZfZ2FpbiAqIHhv dmVyX2dhaW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVC VUcsICJnYWlucyB0YWI6XG4iKTsKKyAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgaW5wdXRzOyBj aCsrKQorICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcdCVnIiwgcy0+Z2FpbnNf dGFiWzBdW2NoXSk7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKKyAgICBm b3IgKGludCBjaCA9IDA7IGNoIDwgaW5wdXRzOyBjaCsrKQorICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfREVCVUcsICJcdCVnIiwgcy0+Z2FpbnNfdGFiWzFdW2NoXSk7CisgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgeG92ZXJfaW5pdF9pbnB1 dChYb3ZlciAqeG92ZXIsIGRvdWJsZSBmcmVxLCBkb3VibGUgcmF0ZSwgaW50IGhmKQoreworICAg IGRvdWJsZSBrID0gdGFuKE1fUEkgKiBmcmVxIC8gcmF0ZSk7CisgICAgZG91YmxlIGsyID0gayAq IGs7CisgICAgZG91YmxlIGQgPSBrMiArIDIuICogayArIDEuOworCisgICAgaWYgKGhmKSB7Cisg ICAgICAgIHhvdmVyLT5iWzBdID0gLTEuIC8gZDsKKyAgICAgICAgeG92ZXItPmJbMV0gPSAgMi4g LyBkOworICAgICAgICB4b3Zlci0+YlsyXSA9IC0xLiAvIGQ7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgeG92ZXItPmJbMF0gPSBrMiAvIGQ7CisgICAgICAgIHhvdmVyLT5iWzFdID0gMi4gKiBrMiAv IGQ7CisgICAgICAgIHhvdmVyLT5iWzJdID0gazIgLyBkOworICAgIH0KKworICAgIHhvdmVyLT5h WzBdID0gMS47CisgICAgeG92ZXItPmFbMV0gPSAtMiAqIChrMiAtIDEuKSAvIGQ7CisgICAgeG92 ZXItPmFbMl0gPSAtKGsyIC0gMiAqIGsgKyAxLikgLyBkOworfQorCitzdGF0aWMgdm9pZCB4b3Zl cl9pbml0KEFtYmlzb25pY0NvbnRleHQgKnMsIGRvdWJsZSBmcmVxLCBkb3VibGUgcmF0ZSwgaW50 IGNoYW5uZWxzKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBjaGFubmVsczsgY2grKykg eworICAgICAgICB4b3Zlcl9pbml0X2lucHV0KCZzLT54b3ZlclswXVtjaF0sIGZyZXEsIHJhdGUs IDApOworICAgICAgICB4b3Zlcl9pbml0X2lucHV0KCZzLT54b3ZlclsxXVtjaF0sIGZyZXEsIHJh dGUsIDEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2FsY19mYWN0b3IoZG91YmxlICpmYWN0 b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0cywKKyAgICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSBhLCBkb3VibGUgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBtKQoreworICAgIGNvbnN0IGRvdWJsZSBjb3NfYSA9IGNvcyhhKTsKKyAgICBjb25zdCBkb3Vi bGUgc2luX2EgPSBzaW4oYSk7CisgICAgY29uc3QgZG91YmxlIGNvc19lID0gY29zKGUpOworICAg IGNvbnN0IGRvdWJsZSBzaW5fZSA9IHNpbihlKTsKKyAgICBjb25zdCBkb3VibGUgc3FydDMgPSBz cXJ0KDMuKTsKKworICAgIGZhY3RvcnNbQV9XXSA9IDEuOworCisgICAgaWYgKGlucHV0cyA8PSAx KQorICAgICAgICByZXR1cm47CisKKyAgICBmYWN0b3JzW0FfWV0gPSBzaW5fYSAqIGNvc19lOwor ICAgIGZhY3RvcnNbQV9aXSA9IHNpbl9lICogbTsKKyAgICBmYWN0b3JzW0FfWF0gPSBjb3NfYSAq IGNvc19lOworCisgICAgaWYgKGlucHV0cyA8PSA0KQorICAgICAgICByZXR1cm47CisKKyAgICBm YWN0b3JzW0FfVl0gPSBzcXJ0MyAqIHNpbl9hICogU1FSKGNvc19lKSAqIGNvc19hOworICAgIGZh Y3RvcnNbQV9UXSA9IDAuMjUgKiBzcXJ0MyAqIChjb3MoMi4gKiBlIC0gYSkgLSBjb3MoMi4gKiBl ICsgYSkpOworICAgIGZhY3RvcnNbQV9SXSA9ICgzLi8yLikgKiBTUVIoc2luX2UpIC0gMC41Owor ICAgIGZhY3RvcnNbQV9TXSA9IDAuMjUgKiBzcXJ0MyAqIChzaW4oMi4gKiBlIC0gYSkgKyBzaW4o Mi4gKiBlICsgYSkpOworICAgIGZhY3RvcnNbQV9VXSA9IDAuNSAqIHNxcnQzICogU1FSKGNvc19l KSpjb3MoMi4gKiBhKTsKKworICAgIGlmIChpbnB1dHMgPD0gOSkKKyAgICAgICAgcmV0dXJuOwor CisgICAgZmFjdG9yc1tBX1FdID0gMC4yNSAqIHNxcnQoMTAuKSAqICgtNC4gKiBTUVIoc2luX2Ep ICsgMy4pICogc2luX2EgKiBTUVIoY29zX2UpICogY29zX2U7CisgICAgZmFjdG9yc1tBX09dID0g c3FydCgxNS4pICogc2luX2UgKiBzaW5fYSAqIFNRUihjb3NfZSkgKiBjb3NfYTsKKyAgICBmYWN0 b3JzW0FfTV0gPSAwLjI1ICogc3FydCg2LikgKiAoNS4gKiBTUVIoc2luX2UpIC0gMS4pICogc2lu X2EgKiBjb3NfZTsKKyAgICBmYWN0b3JzW0FfS10gPSAwLjUgKiAoNSpTUVIoc2luX2UpIC0gMykq c2luX2U7CisgICAgZmFjdG9yc1tBX0xdID0gMC4yNSAqIHNxcnQoNi4pICogKDUuICogU1FSKHNp bl9lKSAtIDEuKSAqIGNvc19lICogY29zX2E7CisgICAgZmFjdG9yc1tBX05dID0gMC41ICogc3Fy dCgxNS4pICogc2luX2UgKiBTUVIoY29zX2UpICogY29zKDIuICogYSk7CisgICAgZmFjdG9yc1tB X1BdID0gMC4yNSAqIHNxcnQoMTAuKSooLTQuICogU1FSKHNpbl9hKSArIDEuKSAqIFNRUihjb3Nf ZSkgKiBjb3NfZSAqIGNvc19hOworfQorCitzdGF0aWMgdm9pZCBjYWxjX2ZhY3RvcnMoQVZGaWx0 ZXJDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgQW1iaXNvbmljQ29udGV4 dCAqcykKK3sKKyAgICBjb25zdCBpbnQgc3BlYWtlcnMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91 dF0uc3BlYWtlcnM7CisgICAgY29uc3QgZG91YmxlICplbGV2YXRpb24gPSBhbWJpc29uaWNfdGFi W3MtPmxheW91dF0uc3BlYWtlcnNfZWxldmF0aW9uOworICAgIGNvbnN0IGRvdWJsZSAqYXppbXV0 aCA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2Vyc19hemltdXRoOworICAgIGNvbnN0 IGludCBpbnB1dHMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzOworCisgICAgaWYg KGVsZXZhdGlvbikgeworICAgICAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgc3BlYWtlcnM7IGNo KyspCisgICAgICAgICAgICBjYWxjX2ZhY3RvcihzLT5kZWNvZGVfbWF0W2NoXSwgaW5wdXRzLAor ICAgICAgICAgICAgICAgICAgICAgICAgKE1fUEkgLyAxODAuKSAqIGF6aW11dGhbY2hdICogLTEu LAorICAgICAgICAgICAgICAgICAgICAgICAgKE1fUEkgLyAxODAuKSAqIGVsZXZhdGlvbltjaF0s IDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBzcGVha2Vy czsgY2grKykKKyAgICAgICAgICAgIGNhbGNfZmFjdG9yKHMtPmRlY29kZV9tYXRbY2hdLCBpbnB1 dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAoTV9QSSAvIDE4MC4pICogYXppbXV0aFtjaF0g KiAtMS4sCisgICAgICAgICAgICAgICAgICAgICAgICAwLiwgMCk7CisgICAgfQorCisgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiZmFjdG9ycyBtYXRyaXg6XG4iKTsKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHNwZWFrZXJzOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBpbnB1dHM7IGorKykKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlx0 JWciLCBzLT5kZWNvZGVfbWF0W2ldW2pdKTsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RF QlVHLCAiXG4iKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX291dHB1dChBVkZpbHRl ckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5z cmM7CisgICAgQW1iaXNvbmljQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBjb25zdCBpbnQg dHlwZSA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS50eXBlOworICAgIGNvbnN0IGludCBpbnB1 dHMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzOworICAgIGNvbnN0IGludCBzcGVh a2VycyA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2VyczsKKyAgICBjb25zdCBkb3Vi bGUgbWF0Y2hpbmcgPSBzLT5tYXRjaGluZzsKKyAgICBkb3VibGUgd19tZWFuID0gMC47CisKKyAg ICBzLT5vcmRlciA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5vcmRlcjsKKyAgICBzLT5tYXhf Y2hhbm5lbHMgPSBTUVIocy0+b3JkZXIgKyAxKTsKKworICAgIGlmIChzLT5uZWFyX2ZpZWxkID09 IE5GX0FVVE8pCisgICAgICAgIHMtPm5lYXJfZmllbGQgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91 dF0ubmVhcl9maWVsZDsKKyAgICBpZiAocy0+eG92ZXJfZnJlcSA8IDApCisgICAgICAgIHMtPnhv dmVyX2ZyZXEgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0ueG92ZXI7CisKKyAgICBjYWxjX2Zh Y3RvcnMoY3R4LCBzKTsKKworICAgIG1lbXNldChzLT52LCAwLCBzaXplb2Yocy0+dikpOworICAg IG1lbXNldChzLT53LCAwLCBzaXplb2Yocy0+dykpOworCisgICAgbWVtY3B5KHMtPnUsIHMtPmRl Y29kZV9tYXQsIHNpemVvZihzLT51KSk7CisgICAgc3ZkY21wKGN0eCwgcy0+dSwgc3BlYWtlcnMs IGlucHV0cywgcy0+dywgcy0+dik7CisKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlucHV0czsg eCsrKSB7CisgICAgICAgIHMtPndbeF0gPSBzLT53W3hdID4gMWUtOSA/IDEuIC8gcy0+d1t4XSA6 IDAuZjsKKyAgICAgICAgd19tZWFuICs9IHMtPndbeF07CisgICAgfQorCisgICAgd19tZWFuIC89 IGlucHV0czsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlucHV0czsgeCsrKQorICAgICAgICBz LT53W3hdID0gcy0+d1t4XSAqICgxLiAtIG1hdGNoaW5nKSArIG1hdGNoaW5nICogd19tZWFuOwor CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbnB1dHM7IHkrKykgeworICAgICAgICBmb3IgKGlu dCB4ID0gMDsgeCA8IGlucHV0czsgeCsrKQorICAgICAgICAgICAgcy0+dlt5XVt4XSAqPSBzLT53 W3hdOworICAgIH0KKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc3BlYWtlcnM7IHkrKykgewor ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlucHV0czsgeCsrKSB7CisgICAgICAgICAgICBk b3VibGUgc3VtID0gMC47CisKKyAgICAgICAgICAgIGZvciAoaW50IHogPSAwOyB6IDwgaW5wdXRz OyB6KyspCisgICAgICAgICAgICAgICAgc3VtICs9IHMtPnZbeF1bel0gKiBzLT51W3ldW3pdOwor ICAgICAgICAgICAgcy0+ZGVjb2RlX21hdFt5XVt4XSA9IHN1bTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgImRlY29kZSBtYXRyaXg6XG4iKTsKKyAg ICBmb3IgKGludCB5ID0gMDsgeSA8IHNwZWFrZXJzOyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQg eCA9IDA7IHggPCBpbnB1dHM7IHgrKykKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19E RUJVRywgIlx0JWciLCBzLT5kZWNvZGVfbWF0W3ldW3hdKTsKKyAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0RFQlVHLCAiXG4iKTsKKyAgICB9CisKKyAgICBjYWxjX25vcm1fbWF0cml4KHMpOwor ICAgIGNhbGNfc24zZF9zY2FsaW5nKHMpOworICAgIGNhbGNfbjNkX3NjYWxpbmcocyk7CisgICAg Y2FsY19mdW1hX3NjYWxpbmcocyk7CisKKyAgICBjYWxjX2Fjbl9zZXF1ZW5jZShzKTsKKyAgICBj YWxjX2Z1bWFfc2VxdWVuY2Uocyk7CisgICAgY2FsY19zaWRfc2VxdWVuY2Uocyk7CisKKyAgICBj YWxjX2NoX21hcChzKTsKKworICAgIG5lYXJfZmllbGRfaW5pdChzLCAwLCBzcGVlZF9vZl9zb3Vu ZChzLT50ZW1wKSwgb3V0bGluay0+c2FtcGxlX3JhdGUsIDEuKTsKKyAgICBuZWFyX2ZpZWxkX2lu aXQocywgMSwgc3BlZWRfb2Zfc291bmQocy0+dGVtcCksIG91dGxpbmstPnNhbXBsZV9yYXRlLCAx Lik7CisKKyAgICBjYWxjX3JvdGF0aW9uX21hdChjdHgsIHMsIHMtPnlhdywgcy0+cGl0Y2gsIHMt PnJvbGwpOworICAgIGNhbGNfbWlycm9yX21hdChzKTsKKworICAgIGNhbGNfZG9taW5hdGVfbWF0 KHMpOworICAgIGNhbGNfZGlyZWN0aW9uX21hdChzKTsKKyAgICBjYWxjX3pvb21fbWF0KHMpOwor ICAgIGNhbGNfZm9jdXNfbWF0KHMpOworICAgIGNhbGNfcHVzaF9tYXQocyk7CisgICAgY2FsY19w cmVzc19tYXQocyk7CisKKyAgICBjYWxjX2xldmVsX3RhYihzLCBzLT5sYXlvdXQpOworICAgIGNh bGNfcGdhaW5zX3RhYihzLCB0eXBlKTsKKyAgICBjYWxjX2dhaW5zX3RhYihjdHgsIHMsIHMtPnhv dmVyX3JhdGlvKTsKKyAgICB4b3Zlcl9pbml0KHMsIHMtPnhvdmVyX2ZyZXEsIG91dGxpbmstPnNh bXBsZV9yYXRlLCBzLT5tYXhfY2hhbm5lbHMpOworCisgICAgc3dpdGNoIChzLT5wcmVjaXNpb24p IHsKKyAgICBjYXNlIFBfQVVUTzoKKyAgICAgICAgcy0+bmZfcHJvY2Vzc1swXSA9IG91dGxpbmst PmZvcm1hdCA9PSBBVl9TQU1QTEVfRk1UX0ZMVFAgPyBuZmllbGQxX3Byb2Nlc3NmIDogbmZpZWxk MV9wcm9jZXNzZDsKKyAgICAgICAgcy0+cHJvY2VzcyA9IG91dGxpbmstPmZvcm1hdCA9PSBBVl9T QU1QTEVfRk1UX0ZMVFAgPyBwcm9jZXNzX2Zsb2F0IDogcHJvY2Vzc19kb3VibGU7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgUF9TSU5HTEU6CisgICAgICAgIHMtPm5mX3Byb2Nlc3NbMF0gPSBu ZmllbGQxX3Byb2Nlc3NmOworICAgICAgICBzLT5wcm9jZXNzID0gcHJvY2Vzc19mbG9hdDsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBQX0RPVUJMRToKKyAgICAgICAgcy0+bmZfcHJvY2Vzc1sw XSA9IG5maWVsZDFfcHJvY2Vzc2Q7CisgICAgICAgIHMtPnByb2Nlc3MgPSBwcm9jZXNzX2RvdWJs ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogYXZfYXNzZXJ0MCgwKTsKKyAgICB9CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5r ICppbmxpbmssIEFWRnJhbWUgKmluKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5s aW5rLT5kc3Q7CisgICAgQW1iaXNvbmljQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBBVkZp bHRlckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07CisgICAgQVZGcmFtZSAqb3V0Owor CisgICAgaWYgKCFzLT5yZnJhbWUgfHwgcy0+cmZyYW1lLT5uYl9zYW1wbGVzIDwgaW4tPm5iX3Nh bXBsZXMpIHsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmcy0+c2ZyYW1lKTsKKyAgICAgICAgYXZf ZnJhbWVfZnJlZSgmcy0+cmZyYW1lKTsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmcy0+ZnJhbWUy KTsKKyAgICAgICAgcy0+c2ZyYW1lID0gZmZfZ2V0X2F1ZGlvX2J1ZmZlcihpbmxpbmssIGluLT5u Yl9zYW1wbGVzKTsKKyAgICAgICAgcy0+cmZyYW1lID0gZmZfZ2V0X2F1ZGlvX2J1ZmZlcihpbmxp bmssIGluLT5uYl9zYW1wbGVzKTsKKyAgICAgICAgcy0+ZnJhbWUyID0gZmZfZ2V0X2F1ZGlvX2J1 ZmZlcihpbmxpbmssIGluLT5uYl9zYW1wbGVzKTsKKyAgICAgICAgaWYgKCFzLT5zZnJhbWUgfHwg IXMtPnJmcmFtZSB8fCAhcy0+ZnJhbWUyKSB7CisgICAgICAgICAgICBhdl9mcmFtZV9mcmVlKCZz LT5zZnJhbWUpOworICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmcy0+cmZyYW1lKTsKKyAgICAg ICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPmZyYW1lMik7CisgICAgICAgICAgICBhdl9mcmFtZV9m cmVlKCZpbik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB9 CisgICAgfQorCisgICAgb3V0ID0gZmZfZ2V0X2F1ZGlvX2J1ZmZlcihvdXRsaW5rLCBpbi0+bmJf c2FtcGxlcyk7CisgICAgaWYgKCFvdXQpIHsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW4pOwor ICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKyAgICBhdl9mcmFtZV9jb3B5 X3Byb3BzKG91dCwgaW4pOworCisgICAgcy0+cHJvY2VzcyhjdHgsIGluLCBvdXQpOworCisgICAg YXZfZnJhbWVfZnJlZSgmaW4pOworICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywg b3V0KTsKKworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0 eCkKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4LT5wcml2OworCisgICAgcy0+bmZf aW5pdFswXSA9IG5maWVsZDFfaW5pdDsKKworICAgIHMtPmZkc3AgPSBhdnByaXZfZmxvYXRfZHNw X2FsbG9jKDApOworICAgIGlmICghcy0+ZmRzcCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCB2b2lkIHVuaW5pdChB VkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4LT5w cml2OworCisgICAgYXZfZnJlZXAoJnMtPmZkc3ApOworICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPnNm cmFtZSk7CisgICAgYXZfZnJhbWVfZnJlZSgmcy0+cmZyYW1lKTsKKyAgICBhdl9mcmFtZV9mcmVl KCZzLT5mcmFtZTIpOworfQorCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgaW5wdXRzW10gPSB7 CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50 eXBlICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9BVURJTywKKyAgICAgICAgLmZpbHRlcl9mcmFt ZSAgID0gZmlsdGVyX2ZyYW1lLAorICAgIH0sCit9Oworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFk IG91dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIs CisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCisgICAgICAgIC5j b25maWdfcHJvcHMgPSBjb25maWdfb3V0cHV0LAorICAgIH0sCit9OworCitzdGF0aWMgaW50IHBy b2Nlc3NfY29tbWFuZChBVkZpbHRlckNvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqY21kLCBjb25z dCBjaGFyICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzLCBpbnQg cmVzX2xlbiwgaW50IGZsYWdzKQoreworICAgIEFtYmlzb25pY0NvbnRleHQgKnMgPSBjdHgtPnBy aXY7CisgICAgY29uc3QgZG91YmxlIHlhdyA9IHMtPnlhdywgcGl0Y2ggPSBzLT5waXRjaCwgcm9s bCA9IHMtPnJvbGw7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGZmX2ZpbHRlcl9wcm9jZXNz X2NvbW1hbmQoY3R4LCBjbWQsIGFyZ3MsIHJlcywgcmVzX2xlbiwgZmxhZ3MpOworICAgIGlmIChy ZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIGlmICh5YXcgIT0gcy0+eWF3IHx8IHBp dGNoICE9IHMtPnBpdGNoIHx8IHJvbGwgIT0gcy0+cm9sbCkKKyAgICAgICAgY2FsY19yb3RhdGlv bl9tYXQoY3R4LCBzLCBzLT55YXcsIHMtPnBpdGNoLCBzLT5yb2xsKTsKKworICAgIHJldHVybiAw OworfQorCitBVkZJTFRFUl9ERUZJTkVfQ0xBU1MoYW1iaXNvbmljKTsKKworY29uc3QgQVZGaWx0 ZXIgZmZfYWZfYW1iaXNvbmljID0geworICAgIC5uYW1lICAgICAgICAgICAgPSAiYW1iaXNvbmlj IiwKKyAgICAuZGVzY3JpcHRpb24gICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkFtYmlzb25p YyBkZWNvZGVyIiksCisgICAgLnByaXZfc2l6ZSAgICAgICA9IHNpemVvZihBbWJpc29uaWNDb250 ZXh0KSwKKyAgICAucHJpdl9jbGFzcyAgICAgID0gJmFtYmlzb25pY19jbGFzcywKKyAgICAuaW5p dCAgICAgICAgICAgID0gaW5pdCwKKyAgICAudW5pbml0ICAgICAgICAgID0gdW5pbml0LAorICAg IEZJTFRFUl9RVUVSWV9GVU5DKHF1ZXJ5X2Zvcm1hdHMpLAorICAgIEZJTFRFUl9JTlBVVFMoaW5w dXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhvdXRwdXRzKSwKKyAgICAucHJvY2Vzc19jb21tYW5k ID0gcHJvY2Vzc19jb21tYW5kLAorfTsKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRl cnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwppbmRleCA4OGFmY2QxZDU2Li4wNjQ0OTNj Yjc1IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKKysrIGIvbGliYXZmaWx0 ZXIvYWxsZmlsdGVycy5jCkBAIC01Nyw2ICs1Nyw3IEBAIGV4dGVybiBjb25zdCBBVkZpbHRlciBm Zl9hZl9hbGF0ZW5jeTsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hZl9hbGltaXRlcjsKIGV4 dGVybiBjb25zdCBBVkZpbHRlciBmZl9hZl9hbGxwYXNzOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVy IGZmX2FmX2Fsb29wOworZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX2FmX2FtYmlzb25pYzsKIGV4 dGVybiBjb25zdCBBVkZpbHRlciBmZl9hZl9hbWVyZ2U7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIg ZmZfYWZfYW1ldGFkYXRhOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX2FmX2FtaXg7Ci0tIAoy LjM1LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K