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 3E77342C04 for ; Sun, 30 Oct 2022 15:34:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C998768BD1D; Sun, 30 Oct 2022 17:34:47 +0200 (EET) Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2E5C768BBDD for ; Sun, 30 Oct 2022 17:34:40 +0200 (EET) Received: by mail-vs1-f46.google.com with SMTP id 128so84716vse.6 for ; Sun, 30 Oct 2022 08:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=arI/POiczd09CX7PjiN6STXtVBlK8stolPlDpghe5lg=; b=WHghh24nI5e1WvaLnrMX4RT6seiUPRsosXgzeYyLpJWNRMF/2Vb3YJyDnh71OuRRbn GOrUjmFRPZ8BAhz+jP+4WTV2d13xY1IHW2TpoXNKOmkj7cUum8q9AGXPUzEcSIVGl+RQ O882kz1hRqn8ZdgkzeNN3FLA910w6LhnoaB10HpzrJkvw3u/RbHxTgMJ5diuQHy4z0RN RERmtiplcgAv4GFfHPmN+OZ4jv7uFfVVTugbaKCWfjeNX4ccUceJg9o7TbX0AAKrlHZN F+MAuu8mlbFwJ7dthjiO0E0Xm+/stcECSJP9x1FjUqB9+rhG6prA8OAjYGJFY4SAvTGK uGIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=arI/POiczd09CX7PjiN6STXtVBlK8stolPlDpghe5lg=; b=XOM8Y+rJH/HjYY+DtVAJSVZgS1nu03NsE0puEp/ctImubyHFDoZYbPUFEUB63eNbwv ME0ZE/FhsNZwKC51L8cOx3VYK9vBlV/GObEhXoDexs/l4MlGPO7GrzpjMf/OBg7YBlTA Ma0B/J9yVYJQJ8KQ0iPTjbHbpymX5hiMwZgFJ5mFkrC1X5rfbk5uTDDcrh3roENvimuQ 974ioQ8fY9V5w0aStc+BhPH/04xUhZbZMTqR999LP+8FXq5kiEJa6Btd5axLvySy7ZsL tgOCTjiHETc8y5+eyKWdi+OEiZ+ziGhbU4/LyAPmUdV765TbAoXhZ3b1VsEEqH3DGZLH g6Ew== X-Gm-Message-State: ACrzQf0wpozzy0l8Nfiw4oHMo8bUY+ycrygv4NtG104p7DbpCNtac+dF qLWNyGtzkQ/gTdYfQAnS3m0PUmPNeaVeR1iNHxetKzOF X-Google-Smtp-Source: AMsMyM7/1iZ07POs5dypImyoiP3PZnChdFujWOHukRQZH+SwBDhuLbagawfIMiu1gzrip5F5KBKn+F+J9egPhiJlsfg= X-Received: by 2002:a05:6102:f0a:b0:3aa:312:7689 with SMTP id v10-20020a0561020f0a00b003aa03127689mr2835691vss.61.1667144078136; Sun, 30 Oct 2022 08:34:38 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a05:612c:612:b0:314:ac6a:1eb7 with HTTP; Sun, 30 Oct 2022 08:34:36 -0700 (PDT) From: Paul B Mahol Date: Sun, 30 Oct 2022 16:34:36 +0100 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000913b0105ec423aab" Subject: [FFmpeg-devel] [PATCH] avfilter: add ambisonic decoder filter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --000000000000913b0105ec423aab Content-Type: text/plain; charset="UTF-8" Patch attached. --000000000000913b0105ec423aab Content-Type: text/x-patch; charset="UTF-8"; name="0001-avfilter-add-ambisonic-decoder.patch" Content-Disposition: attachment; filename="0001-avfilter-add-ambisonic-decoder.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 RnJvbSAxYjBlNzVhOTk1ZGZkYjQ1ZTUxNGI4ZmY1YjcwNzdhZGFhZWQ2NWExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTEgSmFuIDIwMTggMjE6MzI6MjIgKzAxMDAKU3ViamVjdDogW1BBVENIXSBhdmZpbHRl cjogYWRkIGFtYmlzb25pYyBkZWNvZGVyCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIEIgTWFob2wgPG9u ZW1kYUBnbWFpbC5jb20+Ci0tLQogbGliYXZmaWx0ZXIvTWFrZWZpbGUgICAgICAgfCAgICAxICsK IGxpYmF2ZmlsdGVyL2FmX2FtYmlzb25pYy5jIHwgMjMzMiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIGxpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyAgIHwgICAgMSArCiAzIGZp bGVzIGNoYW5nZWQsIDIzMzQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2 ZmlsdGVyL2FmX2FtYmlzb25pYy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUg Yi9saWJhdmZpbHRlci9NYWtlZmlsZQppbmRleCBhY2UwZTYwYmExLi4wZTk3MWQ1YzNlIDEwMDY0 NAotLS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQorKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQpA QCAtNjksNiArNjksNyBAQCBPQkpTLSQoQ09ORklHX0FMQVRFTkNZX0ZJTFRFUikgICAgICAgICAg ICAgICArPSBmX2xhdGVuY3kubwogT0JKUy0kKENPTkZJR19BTElNSVRFUl9GSUxURVIpICAgICAg ICAgICAgICAgKz0gYWZfYWxpbWl0ZXIubwogT0JKUy0kKENPTkZJR19BTExQQVNTX0ZJTFRFUikg ICAgICAgICAgICAgICAgKz0gYWZfYmlxdWFkcy5vCiBPQkpTLSQoQ09ORklHX0FMT09QX0ZJTFRF UikgICAgICAgICAgICAgICAgICArPSBmX2xvb3AubworT0JKUy0kKENPTkZJR19BTUJJU09OSUNf RklMVEVSKSAgICAgICAgICAgICAgKz0gYWZfYW1iaXNvbmljLm8KIE9CSlMtJChDT05GSUdfQU1F UkdFX0ZJTFRFUikgICAgICAgICAgICAgICAgICs9IGFmX2FtZXJnZS5vCiBPQkpTLSQoQ09ORklH X0FNRVRBREFUQV9GSUxURVIpICAgICAgICAgICAgICArPSBmX21ldGFkYXRhLm8KIE9CSlMtJChD T05GSUdfQU1JWF9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IGFmX2FtaXgubwpkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvYWZfYW1iaXNvbmljLmMgYi9saWJhdmZpbHRlci9hZl9hbWJpc29u aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41NmJhZWJkMzY1Ci0t LSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvYWZfYW1iaXNvbmljLmMKQEAgLTAsMCArMSwy MzMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIFBhdWwgQiBNYWhvbAorICogQ29weXJp Z2h0IChjKSAyMDE3IFNhbmNoaXQgU2luaGEKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1 ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvZmxvYXRf ZHNwLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9h dmFzc2VydC5oIgorI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAiYXZmaWx0ZXIuaCIKKyNp bmNsdWRlICJmb3JtYXRzLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworI2RlZmluZSBFVkVO IDAKKyNkZWZpbmUgT0REIDEKKyNkZWZpbmUgTUFYX09SREVSIDMKKyNkZWZpbmUgU1FSKHgpICgo eCkgKiAoeCkpCisjZGVmaW5lIE1BWF9DSEFOTkVMUyBTUVIoTUFYX09SREVSICsgMSkKKworZW51 bSBBX05BTUUgeworICAgIEFfVywgQV9ZLCBBX1osIEFfWCwgQV9WLCBBX1QsIEFfUiwgQV9TLCBB X1UsIEFfUSwgQV9PLCBBX00sIEFfSywgQV9MLCBBX04sIEFfUCwKK307CisKK2VudW0gTmVhckZp ZWxkVHlwZSB7CisgICAgTkZfQVVUTyA9IC0xLAorICAgIE5GX05PTkUsCisgICAgTkZfSU4sCisg ICAgTkZfT1VULAorICAgIE5CX05GVFlQRVMsCit9OworCitlbnVtIFByZWNpc2lvblR5cGUgewor ICAgIFBfQVVUTyA9IC0xLAorICAgIFBfU0lOR0xFLAorICAgIFBfRE9VQkxFLAorICAgIE5CX1BU WVBFUywKK307CisKK2VudW0gUFR5cGVzIHsKKyAgICBQVF9BTVAsCisgICAgUFRfUk1TLAorICAg IFBUX0VORVJHWSwKKyAgICBQVF9OQlRZUEVTLAorfTsKKworZW51bSBOb3JtVHlwZSB7CisgICAg TjNELAorICAgIFNOM0QsCisgICAgRlVNQSwKKyAgICBOQl9OVFlQRVMsCit9OworCitlbnVtIERp cmVjdGlvblR5cGUgeworICAgIERfWCwKKyAgICBEX1ksCisgICAgRF9aLAorICAgIERfQywKKyAg ICBOQl9EVFlQRVMsCit9OworCitlbnVtIFNlcXVlbmNlVHlwZSB7CisgICAgTV9BQ04sCisgICAg TV9GVU1BLAorICAgIE1fU0lELAorICAgIE5CX01UWVBFUywKK307CisKK2VudW0gTGF5b3V0cyB7 CisgICAgTU9OTywKKyAgICBTVEVSRU8sCisgICAgU1RFUkVPX0RPV05NSVgsCisgICAgU1VSUk9V TkQsCisgICAgTDJfMSwKKyAgICBUUklBTkdMRSwKKyAgICBRVUFELAorICAgIFNRVUFSRSwKKyAg ICBMNF8wLAorICAgIEw1XzAsCisgICAgTDVfMF9TSURFLAorICAgIEw2XzAsCisgICAgTDdfMCwK KyAgICBURVRSQSwKKyAgICBDVUJFLAorICAgIE5CX0xBWU9VVFMsCit9OworCit0eXBlZGVmIHN0 cnVjdCBOZWFyRmllbGQgeworICAgIGRvdWJsZSBkW01BWF9PUkRFUl07CisgICAgZG91YmxlIHpb TUFYX09SREVSXTsKK30gTmVhckZpZWxkOworCit0eXBlZGVmIHN0cnVjdCBYb3ZlciB7CisgICAg ZG91YmxlIGJbM107CisgICAgZG91YmxlIGFbM107CisgICAgZG91YmxlIHdbMl07Cit9IFhvdmVy OworCitzdGF0aWMgY29uc3QgZG91YmxlIGdhaW5zXzJkW11bNF0gPQoreworICAgIHsgMSB9LAor ICAgIHsgMSwgMC43MDcxMDcgfSwKKyAgICB7IDEsIDAuODY2MDI1LCAwLjUgfSwKKyAgICB7IDEs IDAuOTIzODgsIDAuNzA3MTA3LCAwLjM4MjY4MyB9LAorfTsKKworc3RhdGljIGNvbnN0IGRvdWJs ZSBnYWluc18zZFtdWzRdID0KK3sKKyAgICB7IDEgfSwKKyAgICB7IDEsIDAuNTc3MzUwMjcgfSwK KyAgICB7IDEsIDAuNzc0NTk3LCAwLjQgfSwKKyAgICB7IDEsIDAuODYxMTM2LCAwLjYxMjMzNCwg MC4zMDQ3NDcgfSwKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgc2FtZV9kaXN0YW5jZVtdID0K K3sKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAor fTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBjdWJlX2F6aW11dGhbXSA9Cit7CisgICAgMzE1LCA0 NSwgMTM1LCAyMjUsIDMxNSwgNDUsIDEzNSwgMjI1LAorfTsKKworc3RhdGljIGNvbnN0IGRvdWJs ZSBjdWJlX2VsZXZhdGlvbltdID0KK3sKKyAgICAgMzUuMjY0MzksICAzNS4yNjQzOSwgIDM1LjI2 NDM5LCAgMzUuMjY0MzksCisgICAgLTM1LjI2NDM5LCAtMzUuMjY0MzksIC0zNS4yNjQzOSwgLTM1 LjI2NDM5Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICBjb25zdCBpbnQgICAgICAg ICAgICAgIG9yZGVyOworICAgIGNvbnN0IGludCAgICAgICAgICAgICAgaW5wdXRzOworICAgIGNv bnN0IGludCAgICAgICAgICAgICAgc3BlYWtlcnM7CisgICAgY29uc3QgaW50ICAgICAgICAgICAg ICBuZWFyX2ZpZWxkOworICAgIGNvbnN0IGludCAgICAgICAgICAgICAgdHlwZTsKKyAgICBjb25z dCBkb3VibGUgICAgICAgICAgIHhvdmVyOworICAgIGNvbnN0IEFWQ2hhbm5lbExheW91dCAgb3V0 bGF5b3V0OworICAgIGNvbnN0IGRvdWJsZSAgICAgICAgICAqc3BlYWtlcnNfYXppbXV0aDsKKyAg ICBjb25zdCBkb3VibGUgICAgICAgICAgKnNwZWFrZXJzX2VsZXZhdGlvbjsKKyAgICBjb25zdCBk b3VibGUgICAgICAgICAgKnNwZWFrZXJzX2Rpc3RhbmNlOworfSBhbWJpc29uaWNfdGFiW10gPSB7 CisgICAgW01PTk9dID0geworICAgICAgICAub3JkZXIgPSAwLAorICAgICAgICAuaW5wdXRzID0g MSwKKyAgICAgICAgLnNwZWFrZXJzID0gMSwKKyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05F LAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxM YXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfTU9OTywKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGgg PSAoY29uc3QgZG91YmxlWzFdKXsgMC4gfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0g KGNvbnN0IGRvdWJsZVsxXSl7IDEuIH0sCisgICAgfSwKKyAgICBbU1RFUkVPXSA9IHsKKyAgICAg ICAgLm9yZGVyID0gMSwKKyAgICAgICAgLmlucHV0cyA9IDQsCisgICAgICAgIC5zcGVha2VycyA9 IDIsCisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4s CisgICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VU X1NURVJFTywKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGggPSAoY29uc3QgZG91YmxlWzJdKXsg LTMwLCAzMH0sCisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisg ICAgfSwKKyAgICBbU1RFUkVPX0RPV05NSVhdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAg ICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gMiwKKyAgICAgICAgLm5lYXJf ZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91 dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0RPV05NSVgsCisg ICAgICAgIC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVsyXSl7IC05MCwgOTAgfSwK KyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwKKyAgICB9LAorICAg IFtTVVJST1VORF0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0 LAorICAgICAgICAuc3BlYWtlcnMgPSAzLAorICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUs CisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExh eW91dClBVl9DSEFOTkVMX0xBWU9VVF9TVVJST1VORCwKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11 dGggPSAoY29uc3QgZG91YmxlWzNdKXsgLTQ1LCA0NSwgMCB9LAorICAgICAgICAuc3BlYWtlcnNf ZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAgW0wyXzFdID0geworICAgICAg ICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0g MywKKyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwK KyAgICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRf Ml8xLAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbM10peyAtNDUs IDQ1LCAxODAgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwK KyAgICB9LAorICAgIFtUUklBTkdMRV0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAg IC5pbnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSAzLAorICAgICAgICAudHlwZSA9IDEs CisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisg ICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NV UlJPVU5ELAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbM10peyAt MTIwLCAxMjAsIDAgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5j ZSwKKyAgICB9LAorICAgIFtRVUFEXSA9IHsKKyAgICAgICAgLm9yZGVyID0gMSwKKyAgICAgICAg LmlucHV0cyA9IDQsCisgICAgICAgIC5zcGVha2VycyA9IDQsCisgICAgICAgIC5uZWFyX2ZpZWxk ID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlvdXQgPSAo QVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1FVQUQsCisgICAgICAgIC5zcGVha2Vy c19hemltdXRoID0gKGNvbnN0IGRvdWJsZVs0XSl7IC00NSwgNDUsIC0xMzUsIDEzNSB9LAorICAg ICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAgW1NR VUFSRV0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAg ICAgICAuc3BlYWtlcnMgPSA0LAorICAgICAgICAudHlwZSA9IDEsCisgICAgICAgIC5uZWFyX2Zp ZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlvdXQg PSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUXzRQT0lOVDAsCisgICAgICAgIC5z cGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVs0XSl7IDAsIC05MCwgMTgwLCA5MCB9LAor ICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAg W0w0XzBdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwKKyAg ICAgICAgLnNwZWFrZXJzID0gNCwKKyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAorICAg ICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQp QVZfQ0hBTk5FTF9MQVlPVVRfNFBPSU5UMCwKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGggPSAo Y29uc3QgZG91YmxlWzRdKXsgLTMwLCAzMCwgMCwgMTgwIH0sCisgICAgICAgIC5zcGVha2Vyc19k aXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKKyAgICBbTDVfMF0gPSB7CisgICAgICAg IC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSA1 LAorICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAor ICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF81 UE9JTlQwX0JBQ0ssCisgICAgICAgIC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVs1 XSl7IC0zMCwgMzAsIDAsIC0xNDUsIDE0NSB9LAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2Ug PSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAgW0w1XzBfU0lERV0gPSB7CisgICAgICAgIC5v cmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSA1LAor ICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAg ICAgICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF81UE9J TlQwLAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbNV0peyAtMzAs IDMwLCAwLCAtMTEwLCAxMTAgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9k aXN0YW5jZSwKKyAgICB9LAorICAgIFtMNl8wXSA9IHsKKyAgICAgICAgLm9yZGVyID0gMSwKKyAg ICAgICAgLmlucHV0cyA9IDQsCisgICAgICAgIC5zcGVha2VycyA9IDYsCisgICAgICAgIC5uZWFy X2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlv dXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUXzZQT0lOVDAsCisgICAgICAg IC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVs2XSl7IC0zMCwgMzAsIDAsIDE4MCwg LTExMCwgMTEwIH0sCisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2Us CisgICAgfSwKKyAgICBbTDdfMF0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5p bnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSA3LAorICAgICAgICAubmVhcl9maWVsZCA9 IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFW Q2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQwLAorICAgICAgICAuc3BlYWtl cnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbN10peyAtMzAsIDMwLCAwLCAtMTQ1LCAxNDUsIC0x MTAsIDExMCB9LAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAor ICAgIH0sCisgICAgW1RFVFJBXSA9IHsKKyAgICAgICAgLm9yZGVyID0gMSwKKyAgICAgICAgLmlu cHV0cyA9IDQsCisgICAgICAgIC5zcGVha2VycyA9IDQsCisgICAgICAgIC50eXBlID0gMiwKKyAg ICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAg ICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfUVVBRCwK KyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGggPSAoY29uc3QgZG91YmxlWzRdKXsgLTkwLCA5MCwg MCwgMTgwIH0sCisgICAgICAgIC5zcGVha2Vyc19lbGV2YXRpb24gPSAoY29uc3QgZG91YmxlWzRd KXsgLTM1LjMsIC0zNS4zLCAzNS4zLCAzNS4zIH0sCisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5j ZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKKyAgICBbQ1VCRV0gPSB7CisgICAgICAgIC5vcmRl ciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSA4LAorICAg ICAgICAudHlwZSA9IDIsCisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAg LnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NI QU5ORUxfTEFZT1VUXzdQT0lOVDEsCisgICAgICAgIC5zcGVha2Vyc19hemltdXRoID0gY3ViZV9h emltdXRoLAorICAgICAgICAuc3BlYWtlcnNfZWxldmF0aW9uID0gY3ViZV9lbGV2YXRpb24sCisg ICAgICAgIC5zcGVha2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKK307CisK K3R5cGVkZWYgc3RydWN0IEFtYmlzb25pY0NvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3MgKmNs YXNzOworICAgIGludCBvcmRlcjsgICAgICAgICAgICAgICAgICAgIC8qIE9yZGVyIG9mIGFtYmlz b25pYyAqLworICAgIGludCBsZXZlbDsgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBMZXZl bCBjb21wZW5zYXRpb24gKi8KKyAgICBlbnVtIExheW91dHMgbGF5b3V0OyAgICAgICAgICAvKiBP dXRwdXQgc3BlYWtlciBsYXlvdXQgKi8KKyAgICBlbnVtIE5vcm1UeXBlIHNjYWxpbmdfbm9ybTsg ICAvKiBOb3JtYWxpemF0aW9uIFR5cGUgKi8KKyAgICBlbnVtIFByZWNpc2lvblR5cGUgcHJlY2lz aW9uOyAvKiBQcm9jZXNzaW5nIFByZWNpc2lvbiBUeXBlICovCisgICAgZW51bSBTZXF1ZW5jZVR5 cGUgc2VxOyAgICAgICAgLyogSW5wdXQgQ2hhbm5lbCBzZXF1ZW5jZSB0eXBlICovCisgICAgZW51 bSBOZWFyRmllbGRUeXBlIG5lYXJfZmllbGQ7IC8qIE5lYXIgRmllbGQgY29tcGVuc2F0aW9uIHR5 cGUgKi8KKworICAgIGludCBpbnZlcnRbTkJfRFRZUEVTXTsgICAgICAgIC8qIEF4aXMgT2RkL0V2 ZW4gSW52ZXJ0ICovCisgICAgZG91YmxlIGdhaW5bMl1bTkJfRFRZUEVTXTsgICAgLyogQXhpcyBP ZGQvRXZlbiBHYWlucyAqLworICAgIGRvdWJsZSBwZ2FpbnNbMl1bTUFYX09SREVSKzFdOy8qIExG L0hGIHBlcmNlcHR1YWwgZ2FpbnMgKi8KKworICAgIGRvdWJsZSB5YXc7ICAgICAgICAgICAgICAg ICAgIC8qIEFuZ2xlIGZvciB5YXcoeCkgcm90YXRpb24gKi8KKyAgICBkb3VibGUgcGl0Y2g7ICAg ICAgICAgICAgICAgICAvKiBBbmdsZSBmb3IgcGl0Y2goeSkgcm90YXRpb24gKi8KKyAgICBkb3Vi bGUgcm9sbDsgICAgICAgICAgICAgICAgICAvKiBBbmdsZSBmb3Igcm9sbCh6KSByb3RhdGlvbiAq LworCisgICAgaW50IHBndHlwZTsKKyAgICBpbnQgbWF4X2NoYW5uZWxzOyAgICAgICAgICAgICAv KiBNYXggQ2hhbm5lbHMgKi8KKyAgICBpbnQgbWF0cml4X25vcm07CisgICAgZG91YmxlIG1hdGNo aW5nOworCisgICAgZG91YmxlIHRlbXA7CisgICAgZG91YmxlIHhvdmVyX2ZyZXE7CisgICAgZG91 YmxlIHhvdmVyX3JhdGlvOworCisgICAgWG92ZXIgeG92ZXJbMl1bTUFYX0NIQU5ORUxTXTsKKyAg ICBOZWFyRmllbGQgbmZbMl1bTUFYX0NIQU5ORUxTXTsKKworICAgIGludCAgICBzZXFfdGFiW05C X01UWVBFU11bTUFYX0NIQU5ORUxTXTsKKyAgICBpbnQgICAgc2VxX21hcFtNQVhfQ0hBTk5FTFNd OworICAgIGRvdWJsZSBub3JtX3RhYltOQl9OVFlQRVNdW01BWF9DSEFOTkVMU107CisgICAgZG91 YmxlIHJvdGF0ZV9tYXRbTUFYX0NIQU5ORUxTXVtNQVhfQ0hBTk5FTFNdOworICAgIGRvdWJsZSBk b21pbmFuY2VfbWF0WzRdWzRdOworICAgIGRvdWJsZSBkaXJlY3Rpb25fbWF0WzRdWzRdOworICAg IGRvdWJsZSB6b29tX21hdFs0XVs0XTsKKyAgICBkb3VibGUgZm9jdXNfbWF0WzRdWzRdOworICAg IGRvdWJsZSBwdXNoX21hdFs0XVs0XTsKKyAgICBkb3VibGUgcHJlc3NfbWF0WzRdWzRdOworICAg IGRvdWJsZSBtaXJyb3JfbWF0W01BWF9DSEFOTkVMU107CisgICAgZG91YmxlIHRyYW5zZm9ybV9t YXRbTUFYX0NIQU5ORUxTXVtNQVhfQ0hBTk5FTFNdOworICAgIGRvdWJsZSBkZWNvZGVfbWF0W01B WF9DSEFOTkVMU11bTUFYX0NIQU5ORUxTXTsKKyAgICBkb3VibGUgdVtNQVhfQ0hBTk5FTFNdW01B WF9DSEFOTkVMU107CisgICAgZG91YmxlIHZbTUFYX0NIQU5ORUxTXVtNQVhfQ0hBTk5FTFNdOwor ICAgIGRvdWJsZSB3W01BWF9DSEFOTkVMU107CisgICAgZG91YmxlIGxldmVsX3RhYltNQVhfQ0hB Tk5FTFNdOworICAgIGRvdWJsZSBnYWluc190YWJbMl1bTUFYX0NIQU5ORUxTXTsKKyAgICBkb3Vi bGUgZG9taW5hbmNlWzRdOworICAgIGRvdWJsZSBkaXJlY3Rpb25bNF07CisgICAgZG91YmxlIHpv b21bNF07CisgICAgZG91YmxlIGZvY3VzWzRdOworICAgIGRvdWJsZSBwdXNoWzRdOworICAgIGRv dWJsZSBwcmVzc1s0XTsKKworICAgIEFWRnJhbWUgKnNmcmFtZTsKKyAgICBBVkZyYW1lICpyZnJh bWU7CisgICAgQVZGcmFtZSAqZnJhbWUyOworCisgICAgdm9pZCAoKm5mX2luaXRbTUFYX09SREVS XSkoTmVhckZpZWxkICpuZiwgZG91YmxlIHJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkb3VibGUgc3BlZWQsIGRvdWJsZSByYXRlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSBnYWluKTsKKyAgICB2b2lkICgqbmZfcHJvY2Vzc1tNQVhfT1JERVJd KShOZWFyRmllbGQgKm5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJh bWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaCwgaW50 IGFkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZ2Fpbik7Cisg ICAgdm9pZCAoKnByb2Nlc3MpKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICppbiwgQVZG cmFtZSAqb3V0KTsKKworICAgIEFWRmxvYXREU1BDb250ZXh0ICpmZHNwOworfSBBbWJpc29uaWND b250ZXh0OworCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihBbWJpc29uaWNDb250ZXh0LHgp CisjZGVmaW5lIEFGIEFWX09QVF9GTEFHX0FVRElPX1BBUkFNfEFWX09QVF9GTEFHX0ZJTFRFUklO R19QQVJBTQorI2RlZmluZSBBRlQgQVZfT1BUX0ZMQUdfQVVESU9fUEFSQU18QVZfT1BUX0ZMQUdf RklMVEVSSU5HX1BBUkFNfEFWX09QVF9GTEFHX1JVTlRJTUVfUEFSQU0KKworc3RhdGljIGNvbnN0 IEFWT3B0aW9uIGFtYmlzb25pY19vcHRpb25zW10gPSB7CisgICAgeyAibGF5b3V0IiwgImxheW91 dCBvZiBvdXRwdXQiLCBPRkZTRVQobGF5b3V0KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND1TVEVS RU99LCAwLCBOQl9MQVlPVVRTLTEsIEFGICwgImx5dCJ9LAorICAgIHsgICAibW9ubyIsICAgIm1v bm8gbGF5b3V0IiwgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TU9OT30sICAgMCwgMCwg QUYgLCAibHl0In0sCisgICAgeyAgICJzdGVyZW8iLCAic3RlcmVvIGxheW91dCIsIDAsIEFWX09Q VF9UWVBFX0NPTlNULCB7Lmk2ND1TVEVSRU99LCAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAg ImRvd25taXgiLCJzdGVyZW8gZG93bm1peCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1T VEVSRU9fRE9XTk1JWH0sIDAsIDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAiMy4wIiwgICAgIjMu MCBsYXlvdXQiLCAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9U1VSUk9VTkR9LCAwLCAw LCBBRiAsICJseXQifSwKKyAgICB7ICAgIjMuMChiYWNrKSIsIjMuMChiYWNrKSBsYXlvdXQiLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TDJfMX0sIDAsIDAsIEFGICwgImx5dCJ9LAorICAg IHsgICAidHJpYW5nbGUiLCJ0cmlhbmdsZSBsYXlvdXQiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwg ey5pNjQ9VFJJQU5HTEV9LCAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgInF1YWQiLCAgICJx dWFkIGxheW91dCIsICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVFVQUR9LCAgIDAsIDAs IEFGICwgImx5dCJ9LAorICAgIHsgICAic3F1YXJlIiwgInNxdWFyZSBsYXlvdXQiLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwgey5pNjQ9U1FVQVJFfSwgMCwgMCwgQUYgLCAibHl0In0sCisgICAgeyAg ICI0LjAiLCAgICAiNC4wIGxheW91dCIsICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1M NF8wfSwgICAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgIjUuMCIsICAgICI1LjAgbGF5b3V0 IiwgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUw1XzB9LCAgIDAsIDAsIEFGICwgImx5 dCJ9LAorICAgIHsgICAiNS4wKHNpZGUpIiwgIjUuMChzaWRlKSBsYXlvdXQiLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQ9TDVfMF9TSURFfSwgMCwgMCwgQUYgLCAibHl0In0sCisgICAgeyAg ICI2LjAiLCAgICAiNi4wIGxheW91dCIsICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1M Nl8wfSwgICAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgIjcuMCIsICAgICI3LjAgbGF5b3V0 IiwgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUw3XzB9LCAgIDAsIDAsIEFGICwgImx5 dCJ9LAorICAgIHsgICAidGV0cmEiLCAidGV0cmFoZWRyb24gbGF5b3V0IiwgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0PVRFVFJBfSwgICAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgImN1 YmUiLCAgICJjdWJlIGxheW91dCIsICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUNVQkV9 LCAgIDAsIDAsIEFGICwgImx5dCJ9LAorICAgIHsgInNlcXVlbmNlIiwgImlucHV0IGNoYW5uZWwg c2VxdWVuY2UiLCBPRkZTRVQoc2VxKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND1NX0FDTn0sICAw LCBOQl9NVFlQRVMtMSwgQUYsICJzZXEifSwKKyAgICB7ICAgImFjbiIsICAiQUNOIiwgIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7Lmk2ND1NX0FDTn0sICAwLCAwLCBBRiwgInNlcSJ9LAorICAgIHsg ICAiZnVtYSIsICJGdU1hIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PU1fRlVNQX0sIDAs IDAsIEFGLCAic2VxIn0sCisgICAgeyAgICJzaWQiLCAgIlNJRCIsICAwLCBBVl9PUFRfVFlQRV9D T05TVCwgey5pNjQ9TV9TSUR9LCAgMCwgMCwgQUYsICJzZXEifSwKKyAgICB7ICJzY2FsaW5nIiwg ImlucHV0IHNjYWxpbmcgZm9ybWF0IiwgT0ZGU0VUKHNjYWxpbmdfbm9ybSksIEFWX09QVF9UWVBF X0lOVCwgICB7Lmk2ND1TTjNEfSwgMCwgTkJfTlRZUEVTLTEsIEFGLCAic2NsIn0sCisgICAgeyAg ICJuM2QiLCAgIk4zRCBzY2FsaW5nIChub3JtYWxpc2VkKSIsICAgICAgIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7Lmk2ND1OM0R9LCAgMCwgMCwgQUYsICJzY2wifSwKKyAgICB7ICAgInNuM2QiLCAi U04zRCBzY2FsaW5nIChzZW1pLW5vcm1hbGlzZWQpIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0PVNOM0R9LCAwLCAwLCBBRiwgInNjbCJ9LAorICAgIHsgICAiZnVtYSIsICJmdXJzZSBtYWxo YW0gc2NhbGluZyIsICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9RlVNQX0s IDAsIDAsIEFGLCAic2NsIn0sCisgICAgeyAibmVhcmZpZWxkIiwgIm5lYXItZmllbGQgY29tcGVu c3RhdGlvbiIsIE9GRlNFVChuZWFyX2ZpZWxkKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND1ORl9B VVRPfSwgTkZfQVVUTywgTkJfTkZUWVBFUy0xLCBBRiwgIm5mIn0sCisgICAgeyAgICJhdXRvIiwg ImF1dG8iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TkZfQVVUT30sIDAsIDAsIEFGLCAi bmYifSwKKyAgICB7ICAgIm5vbmUiLCAibm9uZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2 ND1ORl9OT05FfSwgMCwgMCwgQUYsICJuZiJ9LAorICAgIHsgICAiaW4iLCAgICJpbiIsICAgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PU5GX0lOfSwgICAwLCAwLCBBRiwgIm5mIn0sCisgICAg eyAgICJvdXQiLCAgIm91dCIsICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TkZfT1VUfSwg IDAsIDAsIEFGLCAibmYifSwKKyAgICB7ICJtYXRjaGluZyIsICJzZXQgbWF0Y2hpbmcgZm9yIGRl Y29kZSBtYXRyaXgiLCBPRkZTRVQobWF0Y2hpbmcpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJs PTB9LCAwLiwgMS4sIEFGLCAibWF0Y2hpbmciIH0sCisgICAgeyAgICJtb2RlIiwgICAic2V0IGV4 YWN0IG1vZGUgbWF0Y2hpbmciLCAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuZGJsPTB9LCAwLCAw LCBBRiwgIm1hdGNoaW5nIiB9LAorICAgIHsgICAiZW5lcmd5IiwgInNldCBldmVuIGVuZXJneSBt YXRjaGluZyIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7LmRibD0xfSwgMCwgMCwgQUYsICJtYXRj aGluZyIgfSwKKyAgICB7ICJ4b3ZlcmZyZXEiLCAiY3Jvc3Mtb3ZlciBmcmVxdWVuY3kiLCBPRkZT RVQoeG92ZXJfZnJlcSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9LTEufSwgLTEuLCA4MDAu LCBBRiB9LAorICAgIHsgInhvdmVycmF0aW8iLCAiY3Jvc3Mtb3ZlciBIRi9MRiByYXRpbyIsIE9G RlNFVCh4b3Zlcl9yYXRpbyksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LCAtMzAuLCAz MC4sIEFGIH0sCisgICAgeyAicGd0eXBlIiwgInNldCBwZXJjZXB0dWFsIExGL0hGIGdhaW5zIHR5 cGUiLCBPRkZTRVQocGd0eXBlKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND1QVF9STVN9LCAwLCBQ VF9OQlRZUEVTLTEsIEFGLCAicGd0IiB9LAorICAgIHsgICAiYW1wbGl0dWRlIiwgTlVMTCwgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBUX0FNUH0sICAgIDAsIDAsIEFGLCAicGd0IiB9LAor ICAgIHsgICAicm1zIiwgICAgICAgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBU X1JNU30sICAgIDAsIDAsIEFGLCAicGd0IiB9LAorICAgIHsgICAiZW5lcmd5IiwgICAgTlVMTCwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBUX0VORVJHWX0sIDAsIDAsIEFGLCAicGd0IiB9 LAorICAgIHsgInRlbXAiLCAic2V0IHRlbXBlcmF0dXJlIMKwQyIsIE9GRlNFVCh0ZW1wKSwgQVZf T1BUX1RZUEVfRE9VQkxFLCB7LmRibD0yMC59LCAtNTAuLCA1MC4sIEFGIH0sCisgICAgeyAieWF3 IiwgICAgImFuZ2xlIGZvciB5YXcgKHgtYXhpcykiLCAgIE9GRlNFVCh5YXcpLCAgIEFWX09QVF9U WVBFX0RPVUJMRSwgey5kYmw9MC59LCAtMTgwLiwgMTgwLiwgQUZUIH0sCisgICAgeyAicGl0Y2gi LCAgImFuZ2xlIGZvciBwaXRjaCAoeS1heGlzKSIsIE9GRlNFVChwaXRjaCksIEFWX09QVF9UWVBF X0RPVUJMRSwgey5kYmw9MC59LCAtMTgwLiwgMTgwLiwgQUZUIH0sCisgICAgeyAicm9sbCIsICAg ImFuZ2xlIGZvciByb2xsICh6LWF4aXMpIiwgIE9GRlNFVChyb2xsKSwgIEFWX09QVF9UWVBFX0RP VUJMRSwgey5kYmw9MC59LCAtMTgwLiwgMTgwLiwgQUZUIH0sCisgICAgeyAibGV2ZWwiLCAgIm91 dHB1dCBsZXZlbCBjb21wZW5zYXRpb24iLCBPRkZTRVQobGV2ZWwpLCBBVl9PUFRfVFlQRV9CT09M LCB7Lmk2ND0xfSwgMCwgMSwgQUYgfSwKKyAgICB7ICJub3JtIiwgICAiZW5hYmxlIG1hdHJpeCBu b3JtYWxpemF0aW9uIiwgT0ZGU0VUKG1hdHJpeF9ub3JtKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5p NjQ9MH0sIDAsIDEsIEFGIH0sCisgICAgeyAicHJlY2lzaW9uIiwgInByb2Nlc3NpbmcgcHJlY2lz aW9uIiwgT0ZGU0VUKHByZWNpc2lvbiksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQ9UF9BVVRPfSwg UF9BVVRPLCBOQl9QVFlQRVMtMSwgQUYsICJwcmUifSwKKyAgICB7ICAgImF1dG8iLCAgICJhdXRv IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2 ND1QX0FVVE99LCAwLCAwLCBBRiwgInByZSJ9LAorICAgIHsgICAic2luZ2xlIiwgInNpbmdsZSBm bG9hdGluZy1wb2ludCBwcmVjaXNpb24iLCAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBf U0lOR0xFfSwgMCwgMCwgQUYsICJwcmUifSwKKyAgICB7ICAgImRvdWJsZSIsICJkb3VibGUgZmxv YXRpbmctcG9pbnQgcHJlY2lzaW9uIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1QX0RP VUJMRX0sIDAsIDAsIEFGLCAicHJlIn0sCisgICAgeyAiaW52ZXJ0X3giLCAiaW52ZXJ0IFgiLCBP RkZTRVQoaW52ZXJ0W0RfWF0pLCBBVl9PUFRfVFlQRV9GTEFHUywgey5pNjQ9MH0sIDAsIDMsIEFG VCwgIml4In0sCisgICAgeyAgICJvZGQiLCAgImludmVydCBvZGQgaGFybW9uaWNzIiwgIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7Lmk2ND0xfSwgMCwgMCwgQUZULCAiaXgifSwKKyAgICB7ICAgImV2 ZW4iLCAiaW52ZXJ0IGV2ZW4gaGFybW9uaWNzIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0 PTJ9LCAwLCAwLCBBRlQsICJpeCJ9LAorICAgIHsgImludmVydF95IiwgImludmVydCBZIiwgT0ZG U0VUKGludmVydFtEX1ldKSwgQVZfT1BUX1RZUEVfRkxBR1MsIHsuaTY0PTB9LCAwLCAzLCBBRlQs ICJpeSJ9LAorICAgIHsgICAib2RkIiwgICJpbnZlcnQgb2RkIGhhcm1vbmljcyIsICAwLCBBVl9P UFRfVFlQRV9DT05TVCwgey5pNjQ9MX0sIDAsIDAsIEFGVCwgIml5In0sCisgICAgeyAgICJldmVu IiwgImludmVydCBldmVuIGhhcm1vbmljcyIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND0y fSwgMCwgMCwgQUZULCAiaXkifSwKKyAgICB7ICJpbnZlcnRfeiIsICJpbnZlcnQgWiIsIE9GRlNF VChpbnZlcnRbRF9aXSksIEFWX09QVF9UWVBFX0ZMQUdTLCB7Lmk2ND0wfSwgMCwgMywgQUZULCAi aXoifSwKKyAgICB7ICAgIm9kZCIsICAiaW52ZXJ0IG9kZCBoYXJtb25pY3MiLCAgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0PTF9LCAwLCAwLCBBRlQsICJpeiJ9LAorICAgIHsgICAiZXZlbiIs ICJpbnZlcnQgZXZlbiBoYXJtb25pY3MiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9Mn0s IDAsIDAsIEFGVCwgIml6In0sCisgICAgeyAiaW52ZXJ0X2MiLCAiY2lyY3VsYXIgaW52ZXJ0Iiwg T0ZGU0VUKGludmVydFtEX0NdKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0sIDAsIDEsIEFG VH0sCisgICAgeyAieF9vZGQiLCAgIlggb2RkIGhhcm1vbmljcyBnYWluIiwgIE9GRlNFVChnYWlu W09ERF1bRF9YXSksICBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTEufSwgMCwgMi4sIEFGVCB9 LAorICAgIHsgInhfZXZlbiIsICJYIGV2ZW4gaGFybW9uaWNzIGdhaW4iLCBPRkZTRVQoZ2FpbltF VkVOXVtEX1hdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0xLn0sIDAsIDIuLCBBRlQgfSwK KyAgICB7ICJ5X29kZCIsICAiWSBvZGQgaGFybW9uaWNzIGdhaW4iLCAgT0ZGU0VUKGdhaW5bT0RE XVtEX1ldKSwgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MS59LCAwLCAyLiwgQUZUIH0sCisg ICAgeyAieV9ldmVuIiwgIlkgZXZlbiBoYXJtb25pY3MgZ2FpbiIsIE9GRlNFVChnYWluW0VWRU5d W0RfWV0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTEufSwgMCwgMi4sIEFGVCB9LAorICAg IHsgInpfb2RkIiwgICJaIG9kZCBoYXJtb25pY3MgZ2FpbiIsICBPRkZTRVQoZ2FpbltPRERdW0Rf Wl0pLCAgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0xLn0sIDAsIDIuLCBBRlQgfSwKKyAgICB7 ICJ6X2V2ZW4iLCAiWiBldmVuIGhhcm1vbmljcyBnYWluIiwgT0ZGU0VUKGdhaW5bRVZFTl1bRF9a XSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MS59LCAwLCAyLiwgQUZUIH0sCisgICAgeyAi Y19nYWluIiwgInNldCBjaXJjdWxhciBnYWluIiwgICAgIE9GRlNFVChnYWluWzBdW0RfQ10pLCAg ICBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTEufSwgMCwgMi4sIEFGVCB9LAorICAgIHsgImZf ZG9tIiwgICJzZXQgZm9yd2FyZCBkb21pbmFuY2UiLCBPRkZTRVQoZG9taW5hbmNlW0FfWF0pLCBB Vl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwtMTIsMTIuLCBBRlQgfSwKKyAgICB7ICJzX2Rv bSIsICAic2V0IHNpZGUgZG9taW5hbmNlIiwgICAgT0ZGU0VUKGRvbWluYW5jZVtBX1ldKSwgQVZf T1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTEyLDEyLiwgQUZUIH0sCisgICAgeyAidl9kb20i LCAgInNldCB2ZXJ0aWNhbCBkb21pbmFuY2UiLE9GRlNFVChkb21pbmFuY2VbQV9aXSksIEFWX09Q VF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC0xMiwxMi4sIEFGVCB9LAorICAgIHsgIm9fZGlyIiwg ICJzZXQgb3JpZ2luIHNvdW5kZmllbGQgZGlyZWN0aXZpdHkiLCBPRkZTRVQoZGlyZWN0aW9uW0Ff V10pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwwLDkwLiwgQUZUIH0sCisgICAgeyAi eF9kaXIiLCAgInNldCBYLWF4aXMgc291bmRmaWVsZCBkaXJlY3Rpdml0eSIsIE9GRlNFVChkaXJl Y3Rpb25bQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LDAsOTAuLCBBRlQgfSwK KyAgICB7ICJ5X2RpciIsICAic2V0IFktYXhpcyBzb3VuZGZpZWxkIGRpcmVjdGl2aXR5IiwgT0ZG U0VUKGRpcmVjdGlvbltBX1ldKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sMCw5MC4s IEFGVCB9LAorICAgIHsgInpfZGlyIiwgICJzZXQgWi1heGlzIHNvdW5kZmllbGQgZGlyZWN0aXZp dHkiLCBPRkZTRVQoZGlyZWN0aW9uW0FfWl0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAu fSwwLDkwLiwgQUZUIH0sCisgICAgeyAieF96b29tIiwgInNldCBYLWF4aXMgc291bmRmaWVsZCB6 b29tIiwgT0ZGU0VUKHpvb21bQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05 MCw5MC4sIEFGVCB9LAorICAgIHsgInlfem9vbSIsICJzZXQgWS1heGlzIHNvdW5kZmllbGQgem9v bSIsIE9GRlNFVCh6b29tW0FfWV0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwtOTAs OTAuLCBBRlQgfSwKKyAgICB7ICJ6X3pvb20iLCAic2V0IFotYXhpcyBzb3VuZGZpZWxkIHpvb20i LCBPRkZTRVQoem9vbVtBX1pdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTkwLDkw LiwgQUZUIH0sCisgICAgeyAieF9mb2N1cyIsICJzZXQgWC1heGlzIHNvdW5kZmllbGQgZm9jdXMi LCBPRkZTRVQoZm9jdXNbQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5 MC4sIEFGVCB9LAorICAgIHsgInlfZm9jdXMiLCAic2V0IFktYXhpcyBzb3VuZGZpZWxkIGZvY3Vz IiwgT0ZGU0VUKGZvY3VzW0FfWV0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwtOTAs OTAuLCBBRlQgfSwKKyAgICB7ICJ6X2ZvY3VzIiwgInNldCBaLWF4aXMgc291bmRmaWVsZCBmb2N1 cyIsIE9GRlNFVChmb2N1c1tBX1pdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTkw LDkwLiwgQUZUIH0sCisgICAgeyAieF9wdXNoIiwgInNldCBYLWF4aXMgc291bmRmaWVsZCBwdXNo IiwgT0ZGU0VUKHB1c2hbQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5 MC4sIEFGVCB9LAorICAgIHsgInlfcHVzaCIsICJzZXQgWS1heGlzIHNvdW5kZmllbGQgcHVzaCIs IE9GRlNFVChwdXNoW0FfWV0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwtOTAsOTAu LCBBRlQgfSwKKyAgICB7ICJ6X3B1c2giLCAic2V0IFotYXhpcyBzb3VuZGZpZWxkIHB1c2giLCBP RkZTRVQocHVzaFtBX1pdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTkwLDkwLiwg QUZUIH0sCisgICAgeyAieF9wcmVzcyIsICJzZXQgWC1heGlzIHNvdW5kZmllbGQgcHJlc3MiLCBP RkZTRVQocHJlc3NbQV9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4s IEFGVCB9LAorICAgIHsgInlfcHJlc3MiLCAic2V0IFktYXhpcyBzb3VuZGZpZWxkIHByZXNzIiwg T0ZGU0VUKHByZXNzW0FfWV0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwtOTAsOTAu LCBBRlQgfSwKKyAgICB7ICJ6X3ByZXNzIiwgInNldCBaLWF4aXMgc291bmRmaWVsZCBwcmVzcyIs IE9GRlNFVChwcmVzc1tBX1pdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTkwLDkw LiwgQUZUIH0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgZG91YmxlIGRiMmEoZG91YmxlIGRi KQoreworICAgIHJldHVybiBwb3coMTAuLCBkYiAvIDIwLik7Cit9CisKK3N0YXRpYyBkb3VibGUg cHl0aGFnKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAgICBkb3VibGUgYWJzYSA9IGZhYnMoYSk7 CisgICAgZG91YmxlIGFic2IgPSBmYWJzKGIpOworCisgICAgaWYgKGFic2EgPiBhYnNiKSB7Cisg ICAgICAgIHJldHVybiBhYnNhICogc3FydCgxLjArU1FSKGFic2IvYWJzYSkpOworICAgIH0gZWxz ZSB7CisgICAgICAgIGlmIChhYnNiID09IDAuMCkKKyAgICAgICAgICAgIHJldHVybiAwLjA7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBhYnNiICogc3FydCgxLjArU1FSKGFic2Ev YWJzYikpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbXN0ZXAoaW50IG0sIGludCBuLCBkb3Vi bGUgaCwgaW50IGwsIGludCBpLAorICAgICAgICAgICAgICAgICAgZG91YmxlIHVbTUFYX0NIQU5O RUxTXVtNQVhfQ0hBTk5FTFNdKQoreworICAgIGZvciAoaW50IGogPSBsOyBqIDwgbjsgaisrKSB7 CisgICAgICAgIGRvdWJsZSBzID0gMC4wLCBmOworCisgICAgICAgIGZvciAoaW50IGsgPSBpOyBr IDwgbTsgaysrKQorICAgICAgICAgICAgcyArPSB1W2tdW2ldICogdVtrXVtqXTsKKyAgICAgICAg ZiA9IHMgLyBoOworICAgICAgICBmb3IgKGludCBrID0gaTsgayA8IG07IGsrKykKKyAgICAgICAg ICAgIHVba11bal0gKz0gZiAqIHVba11baV07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzdmRj bXAoQVZGaWx0ZXJDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHVbTUFY X0NIQU5ORUxTXVtNQVhfQ0hBTk5FTFNdLAorICAgICAgICAgICAgICAgICAgIGludCBtLCBpbnQg biwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgKnEsIGRvdWJsZSB2W01BWF9DSEFOTkVMU11b TUFYX0NIQU5ORUxTXSkKK3sKKyAgICBkb3VibGUgZVtNQVhfQ0hBTk5FTFNdID0geyAwLiB9Owor ICAgIGRvdWJsZSBnLCB4LCBzLCBmLCBoLCB6LCBjLCB5OworICAgIGRvdWJsZSBlcHMgPSAxZS0x NTsKKyAgICBjb25zdCBkb3VibGUgdG9sID0gMWUtNjQgLyBlcHM7CisgICAgY29uc3QgaW50IGl0 bWF4ID0gNTA7CisgICAgaW50IGwsIGwxOworCisgICAgYXZfYXNzZXJ0MCgxLjAgKyBlcHMgPiAx LjApOworICAgIGF2X2Fzc2VydDAodG9sID4gMC4wKTsKKworICAgIGcgPSAwLjA7CisgICAgeCA9 IDAuMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIHMgPSAw LjA7CisKKyAgICAgICAgZVtpXSA9IGc7CisgICAgICAgIGwgPSBpICsgMTsKKyAgICAgICAgZm9y IChpbnQgaiA9IGk7IGogPCBtOyBqKyspCisgICAgICAgICAgICBzICs9IFNRUih1W2pdW2ldKTsK KyAgICAgICAgaWYgKHMgPD0gdG9sKSB7CisgICAgICAgICAgICBnID0gMC4wOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZiA9IHVbaV1baV07CisgICAgICAgICAgICBnID0gZiA8IDAu MCA/IHNxcnQocykgOiAtc3FydChzKTsKKyAgICAgICAgICAgIGggPSBmICogZyAtIHM7CisgICAg ICAgICAgICB1W2ldW2ldID0gZiAtIGc7CisgICAgICAgICAgICBtc3RlcChtLCBuLCBoLCBsLCBp LCB1KTsKKyAgICAgICAgfQorCisgICAgICAgIHFbaV0gPSBnOworICAgICAgICBzID0gMC4wOwor ICAgICAgICBmb3IgKGludCBqID0gbDsgaiA8IG47IGorKykKKyAgICAgICAgICAgIHMgKz0gdVtp XVtqXSp1W2ldW2pdOworICAgICAgICBpZiAocyA8PSB0b2wpIHsKKyAgICAgICAgICAgIGcgPSAw LjA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmID0gdVtpXVtpKzFdOworICAgICAg ICAgICAgZyA9IGYgPCAwLjAgPyBzcXJ0KHMpIDogLXNxcnQocyk7CisgICAgICAgICAgICBoID0g ZipnIC0gczsKKyAgICAgICAgICAgIHVbaV1baSsxXSA9IGYtZzsKKyAgICAgICAgICAgIGZvciAo aW50IGogPSBsOyBqIDwgbjsgaisrKQorICAgICAgICAgICAgICAgIGVbal0gPSB1W2ldW2pdIC8g aDsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSBsOyBqIDwgbTsgaisrKSB7CisgICAgICAgICAg ICAgICAgcyA9IDAuMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gbDsgayA8IG47IGsr KykKKyAgICAgICAgICAgICAgICAgICAgIHMgKz0gdVtqXVtrXSp1W2ldW2tdOworICAgICAgICAg ICAgICAgIGZvciAoaW50IGsgPSBsOyBrIDwgbjsgaysrKQorICAgICAgICAgICAgICAgICAgICAg dVtqXVtrXSArPSBzICogZVtrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IHkgPSBmYWJzKHFbaV0pK2ZhYnMoZVtpXSk7CisgICAgICAgIGlmICh5ID4geCkKKyAgICAgICAg ICAgIHggPSB5OworICAgIH0KKworICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+IC0xOyBpLS0p IHsKKyAgICAgICAgaWYgKGcgIT0gMC4wKSB7CisgICAgICAgICAgICBoID0gZyp1W2ldW2krMV07 CisKKyAgICAgICAgICAgIGZvciAoaW50IGogPSBsOyBqIDwgbjsgaisrKQorICAgICAgICAgICAg ICAgICB2W2pdW2ldID0gdVtpXVtqXSAvIGg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGogPSBs OyBqIDwgbjsgaisrKSB7CisgICAgICAgICAgICAgICAgcyA9IDAuMDsKKyAgICAgICAgICAgICAg ICBmb3IgKGludCBrID0gbDsgayA8IG47IGsrKykKKyAgICAgICAgICAgICAgICAgICAgcyArPSB1 W2ldW2tdICogdltrXVtqXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gbDsgayA8IG47 IGsrKykKKyAgICAgICAgICAgICAgICAgICAgdltrXVtqXSArPSBzICogdltrXVtpXTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGogPSBsOyBqIDwgbjsgaisr KSB7CisgICAgICAgICAgICB2W2ldW2pdID0gMC4wOworICAgICAgICAgICAgdltqXVtpXSA9IDAu MDsKKyAgICAgICAgfQorCisgICAgICAgIHZbaV1baV0gPSAxLjA7CisgICAgICAgIGcgPSBlW2ld OworICAgICAgICBsID0gaTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gbiAtIDE7IGkgPiAt MTsgaS0tKSB7CisgICAgICAgIGwgPSBpKzE7CisgICAgICAgIGcgPSBxW2ldOworICAgICAgICBm b3IgKGludCBqID0gbDsgaiA8IG47IGorKykKKyAgICAgICAgICAgIHVbaV1bal0gPSAwLjA7Cisg ICAgICAgIGlmIChnICE9IDAuMCkgeworICAgICAgICAgICAgaCA9IHVbaV1baV0gKiBnOworICAg ICAgICAgICAgbXN0ZXAobSwgbiwgaCwgbCwgaSwgdSk7CisgICAgICAgICAgICBmb3IgKGludCBq ID0gaTsgaiA8IG07IGorKykKKyAgICAgICAgICAgICAgICB1W2pdW2ldID0gdVtqXVtpXSAvIGc7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8IG07IGor KykKKyAgICAgICAgICAgICAgICB1W2pdW2ldID0gMC4wOworICAgICAgICB9CisgICAgICAgIHVb aV1baV0gKz0gMS4wOworICAgIH0KKworICAgIGVwcyA9IGVwcyAqIHg7CisgICAgZm9yIChpbnQg ayA9IG4tMTsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgZm9yIChpbnQgaXRlcmF0aW9uID0gMDsg aXRlcmF0aW9uIDwgaXRtYXg7IGl0ZXJhdGlvbisrKSB7CisgICAgICAgICAgICBpbnQgZ290b190 ZXN0X2ZfY29udmVyZ2VuY2UgPSAwOworCisgICAgICAgICAgICBmb3IgKGwgPSBrOyBsID49IDA7 IGwtLSkgeworICAgICAgICAgICAgICAgIGdvdG9fdGVzdF9mX2NvbnZlcmdlbmNlID0gMDsKKyAg ICAgICAgICAgICAgICBpZiAoZmFicyhlW2xdKSA8PSBlcHMpIHsKKyAgICAgICAgICAgICAgICAg ICAgZ290b190ZXN0X2ZfY29udmVyZ2VuY2UgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdl9hc3NlcnQwKGwgPiAw KTsKKyAgICAgICAgICAgICAgICBpZiAoZmFicyhxW2wtMV0pIDw9IGVwcykKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWdvdG9fdGVz dF9mX2NvbnZlcmdlbmNlKSB7CisgICAgICAgICAgICAgICAgYyA9IDAuMDsKKyAgICAgICAgICAg ICAgICBzID0gMS4wOworICAgICAgICAgICAgICAgIGwxID0gbC0xOworICAgICAgICAgICAgICAg IGF2X2Fzc2VydDAobDEgPj0gMCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IGw7IGkg PD0gazsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGYgPSBzKmVbaV07CisgICAgICAgICAg ICAgICAgICAgIGVbaV0gPSBjKmVbaV07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhYnMo ZikgPD0gZXBzKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg ICAgICAgICAgZyA9IHFbaV07CisgICAgICAgICAgICAgICAgICAgIGggPSBweXRoYWcoZixnKTsK KyAgICAgICAgICAgICAgICAgICAgcVtpXSA9IGg7CisgICAgICAgICAgICAgICAgICAgIGMgPSBn L2g7CisgICAgICAgICAgICAgICAgICAgIHMgPSAtZi9oOworICAgICAgICAgICAgICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8IG07IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgeSA9 IHVbal1bbDFdOworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IHVbal1baV07CisgICAgICAg ICAgICAgICAgICAgICAgICB1W2pdW2wxXSA9IHkqYyt6KnM7CisgICAgICAgICAgICAgICAgICAg ICAgICB1W2pdW2ldID0gLXkqcyt6KmM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6ID0gcVtrXTsKKyAgICAgICAg ICAgIGlmIChsID09IGspIHsKKyAgICAgICAgICAgICAgICBpZiAoeiA8PSAwLjApIHsKKyAgICAg ICAgICAgICAgICAgICAgcVtrXSA9IC16OworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBq ID0gMDsgaiA8IG47IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZbal1ba10gPSAtdltq XVtrXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpdGVyYXRpb24gPj0gaXRtYXgtMSkKKyAgICAgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgeCA9IHFbbF07CisgICAgICAgICAgICBhdl9h c3NlcnQwKGsgPiAwKTsKKyAgICAgICAgICAgIHkgPSBxW2stMV07CisgICAgICAgICAgICBnID0g ZVtrLTFdOworICAgICAgICAgICAgaCA9IGVba107CisgICAgICAgICAgICBmID0gKCh5LXopKih5 K3opKyhnLWgpKihnK2gpKS8oMi4wKmgqeSk7CisgICAgICAgICAgICBnID0gcHl0aGFnKGYsMS4w KTsKKyAgICAgICAgICAgIGlmIChmIDwgMC4pCisgICAgICAgICAgICAgICAgZiA9ICgoeC16KSoo eCt6KStoKih5LyhmLWcpLWgpKS94OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IGYgPSAoKHgteikqKHgreikraCooeS8oZitnKS1oKSkveDsKKyAgICAgICAgICAgIGMgPSAxLjA7 CisgICAgICAgICAgICBzID0gMS4wOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGwrMTsgaSA8 IGsrMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZyA9IGVbaV07CisgICAgICAgICAgICAgICAg eSA9IHFbaV07CisgICAgICAgICAgICAgICAgaCA9IHMqZzsKKyAgICAgICAgICAgICAgICBnID0g YypnOworICAgICAgICAgICAgICAgIHogPSBweXRoYWcoZixoKTsKKyAgICAgICAgICAgICAgICBl W2ktMV0gPSB6OworICAgICAgICAgICAgICAgIGMgPSBmL3o7CisgICAgICAgICAgICAgICAgcyA9 IGgvejsKKyAgICAgICAgICAgICAgICBmID0geCpjK2cqczsKKyAgICAgICAgICAgICAgICBnID0g LXgqcytnKmM7CisgICAgICAgICAgICAgICAgaCA9IHkqczsKKyAgICAgICAgICAgICAgICB5ID0g eSpjOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKSB7CisgICAg ICAgICAgICAgICAgICAgIHggPSB2W2pdW2ktMV07CisgICAgICAgICAgICAgICAgICAgIHogPSB2 W2pdW2ldOworICAgICAgICAgICAgICAgICAgICB2W2pdW2ktMV0gPSB4KmMreipzOworICAgICAg ICAgICAgICAgICAgICB2W2pdW2ldID0gLXgqcyt6KmM7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIHogPSBweXRoYWcoZixoKTsKKyAgICAgICAgICAgICAgICBxW2ktMV0gPSB6 OworICAgICAgICAgICAgICAgIGMgPSBmL3o7CisgICAgICAgICAgICAgICAgcyA9IGgvejsKKyAg ICAgICAgICAgICAgICBmID0gYypnK3MqeTsKKyAgICAgICAgICAgICAgICB4ID0gLXMqZytjKnk7 CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtOyBqKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgeSA9IHVbal1baS0xXTsKKyAgICAgICAgICAgICAgICAgICAgeiA9IHVbal1b aV07CisgICAgICAgICAgICAgICAgICAgIHVbal1baS0xXSA9IHkqYyt6KnM7CisgICAgICAgICAg ICAgICAgICAgIHVbal1baV0gPSAteSpzK3oqYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIGVbbF0gPSAwLjA7CisgICAgICAgICAgICBlW2tdID0gZjsK KyAgICAgICAgICAgIHFba10gPSB4OworICAgICAgICB9CisgICAgfQorCisgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAidW06XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkr KykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykKKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlx0JWcsIiwgdVtpXVtqXSk7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19ERUJVRywgIlxuIik7CisgICAgfQorCisgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0RFQlVHLCAid3Y6XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXHQlZywiLCBxW2ldKTsKKyAgICBhdl9s b2coY3R4LCBBVl9MT0dfREVCVUcsICJcbiIpOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RF QlVHLCAidm06XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19ERUJVRywgIlx0JWciLCB2W2ldW2pdKTsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0RFQlVHLCAiXG4iKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGxldmVsZihBbWJpc29uaWND b250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dCwgZG91YmxlIGxldmVs X3RhYltNQVhfQ0hBTk5FTFNdLAorICAgICAgICAgICAgICAgICAgIGludCBuYl9zYW1wbGVzLCBp bnQgbmJfY2hhbm5lbHMpCit7CisgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxz OyBjaCsrKSB7CisgICAgICAgIGZsb2F0ICpkc3QgPSAoZmxvYXQgKilvdXQtPmV4dGVuZGVkX2Rh dGFbY2hdOworICAgICAgICBjb25zdCBmbG9hdCBtdWwgPSBsZXZlbF90YWJbY2hdOworCisgICAg ICAgIHMtPmZkc3AtPnZlY3Rvcl9mbXVsX3NjYWxhcihkc3QsIGRzdCwgbXVsLCBGRkFMSUdOKG5i X3NhbXBsZXMsIDE2KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsZXZlbGQoQW1iaXNvbmlj Q29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpvdXQsIGRvdWJsZSBsZXZl bF90YWJbTUFYX0NIQU5ORUxTXSwKKyAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcywg aW50IG5iX2NoYW5uZWxzKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVs czsgY2grKykgeworICAgICAgICBkb3VibGUgKmRzdCA9IChkb3VibGUgKilvdXQtPmV4dGVuZGVk X2RhdGFbY2hdOworICAgICAgICBjb25zdCBkb3VibGUgbXVsID0gbGV2ZWxfdGFiW2NoXTsKKwor ICAgICAgICBzLT5mZHNwLT52ZWN0b3JfZG11bF9zY2FsYXIoZHN0LCBkc3QsIG11bCwgRkZBTElH TihuYl9zYW1wbGVzLCAxNikpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtZihB bWJpc29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwg QVZGcmFtZSAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdHJhbnNmb3JtX21h dFtNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU10sCisgICAgICAgICAgICAgICAgICAgICAgIGlu dCBuYl9zYW1wbGVzLCBpbnQgbmJfY2hhbm5lbHMsIGludCAqc2VxX21hcCkKK3sKKyAgICBmb3Ig KGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgY29uc3QgZmxv YXQgKnNyYyA9IChjb25zdCBmbG9hdCAqKWluLT5leHRlbmRlZF9kYXRhWzBdOworICAgICAgICBm bG9hdCAqZHN0ID0gKGZsb2F0ICopb3V0LT5leHRlbmRlZF9kYXRhW2NoXTsKKyAgICAgICAgZmxv YXQgbXVsID0gdHJhbnNmb3JtX21hdFtzZXFfbWFwW2NoXV1bc2VxX21hcFswXV07CisKKyAgICAg ICAgcy0+ZmRzcC0+dmVjdG9yX2ZtdWxfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJR04obmJf c2FtcGxlcywgMTYpKTsKKworICAgICAgICBmb3IgKGludCBjaDIgPSAxOyBjaDIgPCBuYl9jaGFu bmVsczsgY2gyKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpzcmMgPSAoY29uc3QgZmxv YXQgKilpbi0+ZXh0ZW5kZWRfZGF0YVtjaDJdOworICAgICAgICAgICAgZmxvYXQgbXVsID0gdHJh bnNmb3JtX21hdFtzZXFfbWFwW2NoXV1bc2VxX21hcFtjaDJdXTsKKworICAgICAgICAgICAgcy0+ ZmRzcC0+dmVjdG9yX2ZtYWNfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJR04obmJfc2FtcGxl cywgMTYpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtZChB bWJpc29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwg QVZGcmFtZSAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdHJhbnNmb3JtX21h dFtNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU10sCisgICAgICAgICAgICAgICAgICAgICAgIGlu dCBuYl9zYW1wbGVzLCBpbnQgbmJfY2hhbm5lbHMsIGludCAqc2VxX21hcCkKK3sKKyAgICBmb3Ig KGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgY29uc3QgZG91 YmxlICpzcmMgPSAoY29uc3QgZG91YmxlICopaW4tPmV4dGVuZGVkX2RhdGFbMF07CisgICAgICAg IGRvdWJsZSAqZHN0ID0gKGRvdWJsZSAqKW91dC0+ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgICAg IGRvdWJsZSBtdWwgPSB0cmFuc2Zvcm1fbWF0W3NlcV9tYXBbY2hdXVtzZXFfbWFwWzBdXTsKKwor ICAgICAgICBzLT5mZHNwLT52ZWN0b3JfZG11bF9zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElH TihuYl9zYW1wbGVzLCAxNikpOworCisgICAgICAgIGZvciAoaW50IGNoMiA9IDE7IGNoMiA8IG5i X2NoYW5uZWxzOyBjaDIrKykgeworICAgICAgICAgICAgY29uc3QgZG91YmxlICpzcmMgPSAoY29u c3QgZG91YmxlICopaW4tPmV4dGVuZGVkX2RhdGFbY2gyXTsKKyAgICAgICAgICAgIGRvdWJsZSBt dWwgPSB0cmFuc2Zvcm1fbWF0W3NlcV9tYXBbY2hdXVtzZXFfbWFwW2NoMl1dOworCisgICAgICAg ICAgICBzLT5mZHNwLT52ZWN0b3JfZG1hY19zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihu Yl9zYW1wbGVzLCAxNikpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtdWx0 aXBseWYoQW1iaXNvbmljQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBk b3VibGUgZGVjb2RlX21hdHJpeFtNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU10sCisgICAgICAg ICAgICAgICAgICAgICAgaW50IGlucHV0cywgaW50IG91dHB1dHMsCisgICAgICAgICAgICAgICAg ICAgICAgaW50ICpzZXFfbWFwLCBjb25zdCBkb3VibGUgKmdhaW5zX3RhYiwKKyAgICAgICAgICAg ICAgICAgICAgICBpbnQgbmJfY2hhbm5lbHMsIGludCBtYXhfY2hhbm5lbHMsCisgICAgICAgICAg ICAgICAgICAgICAgQVZGcmFtZSAqaW4sIEFWRnJhbWUgKm91dCkKK3sKKyAgICBmb3IgKGludCBj aCA9IDA7IGNoIDwgb3V0cHV0czsgY2grKykgeworICAgICAgICBmbG9hdCAqZHN0ID0gKGZsb2F0 ICopb3V0LT5leHRlbmRlZF9kYXRhW2NoXTsKKworICAgICAgICBmb3IgKGludCBjaDIgPSAwOyBj aDIgPCBGRk1JTjMobmJfY2hhbm5lbHMsIG1heF9jaGFubmVscywgaW5wdXRzKTsgY2gyKyspIHsK KyAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IEZGTUlOKHNlcV9tYXBbY2gyXSwgbmJfY2hh bm5lbHMgLSAxKTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpzcmMgPSAoY29uc3QgZmxvYXQg Kilpbi0+ZXh0ZW5kZWRfZGF0YVtpbmRleF07CisgICAgICAgICAgICBjb25zdCBmbG9hdCBnYWlu ID0gZ2FpbnNfdGFiID8gZ2FpbnNfdGFiW2NoMl0gOiAxLmY7CisgICAgICAgICAgICBjb25zdCBm bG9hdCBtdWwgPSBkZWNvZGVfbWF0cml4W2NoXVtjaDJdICogZ2FpbjsKKworICAgICAgICAgICAg cy0+ZmRzcC0+dmVjdG9yX2ZtYWNfc2NhbGFyKGRzdCwgc3JjLCBtdWwsIEZGQUxJR04oaW4tPm5i X3NhbXBsZXMsIDE2KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG11bHRp cGx5ZChBbWJpc29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRv dWJsZSBkZWNvZGVfbWF0cml4W01BWF9DSEFOTkVMU11bTUFYX0NIQU5ORUxTXSwKKyAgICAgICAg ICAgICAgICAgICAgICBpbnQgaW5wdXRzLCBpbnQgb3V0cHV0cywKKyAgICAgICAgICAgICAgICAg ICAgICBpbnQgKnNlcV9tYXAsIGNvbnN0IGRvdWJsZSAqZ2FpbnNfdGFiLAorICAgICAgICAgICAg ICAgICAgICAgIGludCBuYl9jaGFubmVscywgaW50IG1heF9jaGFubmVscywKKyAgICAgICAgICAg ICAgICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFtZSAqb3V0KQoreworICAgIGZvciAoaW50IGNo ID0gMDsgY2ggPCBvdXRwdXRzOyBjaCsrKSB7CisgICAgICAgIGRvdWJsZSAqZHN0ID0gKGRvdWJs ZSAqKW91dC0+ZXh0ZW5kZWRfZGF0YVtjaF07CisKKyAgICAgICAgZm9yIChpbnQgY2gyID0gMDsg Y2gyIDwgRkZNSU4zKG5iX2NoYW5uZWxzLCBtYXhfY2hhbm5lbHMsIGlucHV0cyk7IGNoMisrKSB7 CisgICAgICAgICAgICBjb25zdCBpbnQgaW5kZXggPSBGRk1JTihzZXFfbWFwW2NoMl0sIG5iX2No YW5uZWxzIC0gMSk7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgKnNyYyA9IChjb25zdCBkb3Vi bGUgKilpbi0+ZXh0ZW5kZWRfZGF0YVtpbmRleF07CisgICAgICAgICAgICBjb25zdCBkb3VibGUg Z2FpbiA9IGdhaW5zX3RhYiA/IGdhaW5zX3RhYltjaDJdIDogMS5mOworICAgICAgICAgICAgY29u c3QgZG91YmxlIG11bCA9IGRlY29kZV9tYXRyaXhbY2hdW2NoMl0gKiBnYWluOworCisgICAgICAg ICAgICBzLT5mZHNwLT52ZWN0b3JfZG1hY19zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihp bi0+bmJfc2FtcGxlcywgMTYpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQg c2NhbGVmKEFtYmlzb25pY0NvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAq aW4sIEFWRnJhbWUgKm91dCwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgc2NhbGVbTUFYX0NI QU5ORUxTXSwKKyAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcywgaW50IG5iX2NoYW5u ZWxzLCBpbnQgKnNlcV9tYXApCit7CisgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5u ZWxzOyBjaCsrKSB7CisgICAgICAgIGNvbnN0IGZsb2F0ICpzcmMgPSAoY29uc3QgZmxvYXQgKilp bi0+ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgICAgIGZsb2F0ICpkc3QgPSAoZmxvYXQgKilvdXQt PmV4dGVuZGVkX2RhdGFbY2hdOworICAgICAgICBmbG9hdCBtdWwgPSBzY2FsZVtzZXFfbWFwW2No XV07CisKKyAgICAgICAgcy0+ZmRzcC0+dmVjdG9yX2ZtdWxfc2NhbGFyKGRzdCwgc3JjLCBtdWws IEZGQUxJR04obmJfc2FtcGxlcywgMTYpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNjYWxl ZChBbWJpc29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmluLCBB VkZyYW1lICpvdXQsCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHNjYWxlW01BWF9DSEFOTkVM U10sCisgICAgICAgICAgICAgICAgICAgaW50IG5iX3NhbXBsZXMsIGludCBuYl9jaGFubmVscywg aW50ICpzZXFfbWFwKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsg Y2grKykgeworICAgICAgICBjb25zdCBkb3VibGUgKnNyYyA9IChjb25zdCBkb3VibGUgKilpbi0+ ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgICAgIGRvdWJsZSAqZHN0ID0gKGRvdWJsZSAqKW91dC0+ ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgICAgIGRvdWJsZSBtdWwgPSBzY2FsZVtzZXFfbWFwW2No XV07CisKKyAgICAgICAgcy0+ZmRzcC0+dmVjdG9yX2RtdWxfc2NhbGFyKGRzdCwgc3JjLCBtdWws IEZGQUxJR04obmJfc2FtcGxlcywgMTYpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcXVlcnlf Zm9ybWF0cyhBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpz ID0gY3R4LT5wcml2OworICAgIEFWRmlsdGVyRm9ybWF0cyAqZm9ybWF0cyA9IE5VTEw7CisgICAg QVZGaWx0ZXJDaGFubmVsTGF5b3V0cyAqb3V0bGF5b3V0cyA9IE5VTEw7CisgICAgQVZGaWx0ZXJD aGFubmVsTGF5b3V0cyAqaW5sYXlvdXRzID0gTlVMTDsKKyAgICBBVkNoYW5uZWxMYXlvdXQgKm91 dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQgKikmYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLm91 dGxheW91dDsKKyAgICBBVkNoYW5uZWxMYXlvdXQgKmlubGF5b3V0ID0gJihBVkNoYW5uZWxMYXlv dXQpQVZfQ0hBTk5FTF9MQVlPVVRfQU1CSVNPTklDX0ZJUlNUX09SREVSOworICAgIGludCByZXQg PSAwOworCisgICAgaWYgKHMtPnByZWNpc2lvbiA9PSBQX0FVVE8pIHsKKyAgICAgICAgcmV0ID0g ZmZfYWRkX2Zvcm1hdCgmZm9ybWF0cywgQVZfU0FNUExFX0ZNVF9GTFRQKTsKKyAgICAgICAgaWYg KHJldCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIHJldCA9IGZmX2FkZF9mb3Jt YXQoJmZvcm1hdHMsIEFWX1NBTVBMRV9GTVRfREJMUCk7CisgICAgfSBlbHNlIGlmIChzLT5wcmVj aXNpb24gPT0gUF9TSU5HTEUpIHsKKyAgICAgICAgcmV0ID0gZmZfYWRkX2Zvcm1hdCgmZm9ybWF0 cywgQVZfU0FNUExFX0ZNVF9GTFRQKTsKKyAgICB9IGVsc2UgaWYgKHMtPnByZWNpc2lvbiA9PSBQ X0RPVUJMRSkgeworICAgICAgICByZXQgPSBmZl9hZGRfZm9ybWF0KCZmb3JtYXRzLCBBVl9TQU1Q TEVfRk1UX0RCTFApOworICAgIH0KKyAgICBpZiAocmV0KQorICAgICAgICByZXR1cm4gcmV0Owor ICAgIHJldCA9IGZmX3NldF9jb21tb25fZm9ybWF0cyhjdHgsIGZvcm1hdHMpOworICAgIGlmIChy ZXQpCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBmZl9hZGRfY2hhbm5lbF9sYXlv dXQoJm91dGxheW91dHMsIG91dGxheW91dCk7CisgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJu IHJldDsKKworICAgIHJldCA9IGZmX2NoYW5uZWxfbGF5b3V0c19yZWYob3V0bGF5b3V0cywgJmN0 eC0+b3V0cHV0c1swXS0+aW5jZmcuY2hhbm5lbF9sYXlvdXRzKTsKKyAgICBpZiAocmV0KQorICAg ICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gZmZfYWRkX2NoYW5uZWxfbGF5b3V0KCZpbmxh eW91dHMsIGlubGF5b3V0KTsKKyAgICBpZiAocmV0KQorICAgICAgICByZXR1cm4gcmV0OworCisg ICAgcmV0ID0gZmZfY2hhbm5lbF9sYXlvdXRzX3JlZihpbmxheW91dHMsICZjdHgtPmlucHV0c1sw XS0+b3V0Y2ZnLmNoYW5uZWxfbGF5b3V0cyk7CisgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJu IHJldDsKKworICAgIHJldHVybiBmZl9zZXRfY29tbW9uX2FsbF9zYW1wbGVyYXRlcyhjdHgpOwor fQorCitzdGF0aWMgdm9pZCBhY25fdG9fbGV2ZWxfb3JkZXIoaW50IGFjbiwgaW50ICpsZXZlbCwg aW50ICpvcmRlcikKK3sKKyAgICAqbGV2ZWwgPSBmbG9vcihzcXJ0KGFjbikpOworICAgICpvcmRl ciA9IGFjbiAtICpsZXZlbCAqICpsZXZlbCAtICpsZXZlbDsKK30KKworc3RhdGljIHZvaWQgY2Fs Y19hY25fc2VxdWVuY2UoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBpbnQgKmRzdCA9IHMt PnNlcV90YWJbTV9BQ05dOworCisgICAgZm9yIChpbnQgbiA9IDAsIGkgPSAwOyBuIDw9IHMtPm9y ZGVyOyBuKyspIHsKKyAgICAgICAgZm9yIChpbnQgbSA9IC1uOyBtIDw9IG47IG0rKywgaSsrKQor ICAgICAgICAgICAgZHN0W2ldID0gbiAqIG4gKyBuICsgbTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkIGNhbGNfZnVtYV9zZXF1ZW5jZShBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGludCAq ZHN0ID0gcy0+c2VxX3RhYltNX0ZVTUFdOworCisgICAgZm9yIChpbnQgbiA9IDAsIGkgPSAwOyBu IDw9IHMtPm9yZGVyOyBuKyspIHsKKyAgICAgICAgaWYgKG4gPCAyKSB7CisgICAgICAgICAgICBm b3IgKGludCBtID0gLW47IG0gPD0gbjsgbSsrKQorICAgICAgICAgICAgICAgIGRzdFtpKytdID0g biAqIG4gKyAyICogKG4gLSBGRkFCUyhtKSkgKyAobSA8IDApOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgZm9yIChpbnQgbSA9IC1uOyBtIDw9IG47IG0rKykKKyAgICAgICAgICAgICAg ICBkc3RbaSsrXSA9IFNRUihuKSArIEZGQUJTKG0pICogMiAtIChtID4gMCk7CisgICAgICAgIH0K KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfc2lkX3NlcXVlbmNlKEFtYmlzb25pY0NvbnRl eHQgKnMpCit7CisgICAgaW50ICpkc3QgPSBzLT5zZXFfdGFiW01fU0lEXTsKKworICAgIGZvciAo aW50IG4gPSAwLCBpID0gMDsgbiA8PSBzLT5vcmRlcjsgbisrKSB7CisgICAgICAgIGZvciAoaW50 IG0gPSAtbjsgbSA8PSBuOyBtKyssIGkrKykKKyAgICAgICAgICAgIGRzdFtpXSA9IG4gKiBuICsg MiAqIChuIC0gRkZBQlMobSkpICsgKG0gPCAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNh bGNfY2hfbWFwKEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgY29uc3QgaW50ICpzcmMwID0g cy0+c2VxX3RhYltNX0FDTl07CisgICAgY29uc3QgaW50ICpzcmMxID0gcy0+c2VxX3RhYltzLT5z ZXFdOworICAgIGludCAqZHN0ID0gcy0+c2VxX21hcDsKKworICAgIGZvciAoaW50IG4gPSAwOyBu IDwgU1FSKHMtPm9yZGVyICsgMSk7IG4rKykKKyAgICAgICAgZHN0W3NyYzBbbl1dID0gc3JjMVtu XTsKK30KKworc3RhdGljIGRvdWJsZSBmYWN0b3JpYWwoaW50IHgpCit7CisgICAgZG91YmxlIHBy b2QgPSAxLjsKKworICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHg7IGkrKykKKyAgICAgICAgcHJv ZCAqPSBpOworCisgICAgcmV0dXJuIHByb2Q7Cit9CisKK3N0YXRpYyBkb3VibGUgbjNkX25vcm0o aW50IGkpCit7CisgICAgaW50IG4sIG07CisKKyAgICBhY25fdG9fbGV2ZWxfb3JkZXIoaSwgJm4s ICZtKTsKKworICAgIHJldHVybiBzcXJ0KCgyICogbiArIDEpICogKDIgLSAobSA9PSAwKSkgKiBm YWN0b3JpYWwobiAtIEZGQUJTKG0pKSAvIGZhY3RvcmlhbChuICsgRkZBQlMobSkpKTsKK30KKwor c3RhdGljIGRvdWJsZSBzbjNkX25vcm0oaW50IGkpCit7CisgICAgaW50IG4sIG07CisKKyAgICBh Y25fdG9fbGV2ZWxfb3JkZXIoaSwgJm4sICZtKTsKKworICAgIHJldHVybiBzcXJ0KCgyIC0gKG0g PT0gMCkpICogZmFjdG9yaWFsKG4gLSBGRkFCUyhtKSkgLyBmYWN0b3JpYWwobiArIEZGQUJTKG0p KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfbm9ybV9tYXRyaXgoQW1iaXNvbmljQ29udGV4dCAq cykKK3sKKyAgICBjb25zdCBpbnQgc3BlYWtlcnMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0u c3BlYWtlcnM7CisgICAgY29uc3QgaW50IGlucHV0cyA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0 XS5pbnB1dHM7CisKKyAgICBpZiAoIXMtPm1hdHJpeF9ub3JtKQorICAgICAgICByZXR1cm47CisK KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNwZWFrZXJzOyB5KyspIHsKKyAgICAgICAgZG91Ymxl IHNjYWxlID0gMC47CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnB1dHM7IHgrKykK KyAgICAgICAgICAgIHNjYWxlICs9IGZhYnMocy0+ZGVjb2RlX21hdFt5XVt4XSk7CisgICAgICAg IGlmIChzY2FsZSA+IDEuKQorICAgICAgICAgICAgc2NhbGUgPSAxLiAvIHNjYWxlOworICAgICAg ICBlbHNlCisgICAgICAgICAgICBzY2FsZSA9IDEuOworCisgICAgICAgIGZvciAoaW50IHggPSAw OyB4IDwgaW5wdXRzOyB4KyspCisgICAgICAgICAgICBzLT5kZWNvZGVfbWF0W3ldW3hdICo9IHNj YWxlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2FsY19zbjNkX3NjYWxpbmcoQW1iaXNvbmlj Q29udGV4dCAqcykKK3sKKyAgICBkb3VibGUgKmRzdCA9IHMtPm5vcm1fdGFiW1NOM0RdOworCisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5tYXhfY2hhbm5lbHM7IGkrKykKKyAgICAgICAgZHN0 W2ldID0gMS47Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfbjNkX3NjYWxpbmcoQW1iaXNvbmljQ29u dGV4dCAqcykKK3sKKyAgICBkb3VibGUgKmRzdCA9IHMtPm5vcm1fdGFiW04zRF07CisKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IHMtPm1heF9jaGFubmVsczsgaSsrKQorICAgICAgICBkc3RbaV0g PSBuM2Rfbm9ybShpKSAvIHNuM2Rfbm9ybShpKTsKK30KKworc3RhdGljIHZvaWQgY2FsY19mdW1h X3NjYWxpbmcoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3VibGUgKmRzdCA9IHMtPm5v cm1fdGFiW0ZVTUFdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5tYXhfY2hhbm5lbHM7 IGkrKykgeworICAgICAgICBkc3RbaV0gPSBzbjNkX25vcm0oaSk7CisKKyAgICAgICAgc3dpdGNo IChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGRzdFtpXSAqPSAxLiAvIE1fU1FS VDI7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNlIDM6Cisg ICAgICAgIGNhc2UgMTI6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSA0OgorICAgICAgICAgICAgZHN0W2ldICo9IDIuIC8gc3FydCgzLik7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgZHN0W2ldICo9IDIu IC8gc3FydCgzLik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA2OgorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgIGRzdFtpXSAqPSAyLiAv IHNxcnQoMy4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAg ICAgIGRzdFtpXSAqPSAyLiAvIHNxcnQoMy4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgOToKKyAgICAgICAgICAgIGRzdFtpXSAqPSBzcXJ0KDguIC8gNS4pOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICBkc3RbaV0gKj0gMy4gLyBz cXJ0KDUuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDExOgorICAgICAgICAg ICAgZHN0W2ldICo9IHNxcnQoNDUuIC8gMzIuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIDEzOgorICAgICAgICAgICAgZHN0W2ldICo9IHNxcnQoNDUuIC8gMzIuKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE0OgorICAgICAgICAgICAgZHN0W2ldICo9IDMu IC8gc3FydCg1Lik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNToKKyAgICAg ICAgICAgIGRzdFtpXSAqPSBzcXJ0KDguLzUuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseV9tYXQoZG91YmxlIG91dFszXVsz XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYVszXVszXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYlszXVszXSkKK3sKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDM7IGor KykgeworICAgICAgICAgICAgZG91YmxlIHN1bSA9IDAuOworCisgICAgICAgICAgICBmb3IgKGlu dCBrID0gMDsgayA8IDM7IGsrKykKKyAgICAgICAgICAgICAgICBzdW0gKz0gYVtpXVtrXSAqIGJb a11bal07CisKKyAgICAgICAgICAgIG91dFtpXVtqXSA9IHN1bTsKKyAgICAgICAgfQorICAgIH0K K30KKworc3RhdGljIGRvdWJsZSBQKGludCBpLCBpbnQgbCwgaW50IG11LCBpbnQgbV8sIGRvdWJs ZSBSXzFbM11bM10sCisgICAgICAgICAgICAgICAgZG91YmxlIFJfbG0xWzIgKiBNQVhfT1JERVIg KyAxXVsyICogTUFYX09SREVSICsgMV0pCit7CisgICAgZG91YmxlIHJldCA9IDAuOworICAgIGRv dWJsZSByaTEgID0gUl8xW2kgKyAxXVsyXTsKKyAgICBkb3VibGUgcmltMSA9IFJfMVtpICsgMV1b MF07CisgICAgZG91YmxlIHJpMCAgPSBSXzFbaSArIDFdWzFdOworCisgICAgaWYgKG1fID09IC1s KSB7CisgICAgICAgIHJldCA9IHJpMSAqIFJfbG0xW211ICsgbCAtIDFdWzBdICsgcmltMSAqIFJf bG0xW211ICsgbC0gMV1bMiAqIGwgLSAyXTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV8g PT0gbCkKKyAgICAgICAgICAgIHJldCA9IHJpMSAqIFJfbG0xW211ICsgbCAtIDFdWzIgKiBsIC0g Ml0gLSByaW0xICogUl9sbTFbbXUgKyBsIC0gMV1bMF07CisgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHJldCA9IHJpMCAqIFJfbG0xW211ICsgbCAtIDFdW21fICsgbCAtIDFdOworICAgIH0KKyAg ICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZG91YmxlIFUoaW50IGwsIGludCBtLCBpbnQgbiwg ZG91YmxlIFJfMVszXVszXSwKKyAgICAgICAgICAgICAgICBkb3VibGUgUl9sbTFbMiAqIE1BWF9P UkRFUiArIDFdWzIgKiBNQVhfT1JERVIgKyAxXSkKK3sKKyAgICByZXR1cm4gUCgwLCBsLCBtLCBu LCBSXzEsIFJfbG0xKTsKK30KKworc3RhdGljIGRvdWJsZSBWKGludCBsLCBpbnQgbSwgaW50IG4s IGRvdWJsZSBSXzFbM11bM10sCisgICAgICAgICAgICAgICAgZG91YmxlIFJfbG0xWzIgKiBNQVhf T1JERVIgKyAxXVsyICogTUFYX09SREVSICsgMV0pCit7CisgICAgZG91YmxlIHJldCA9IDAuOwor CisgICAgaWYgKG0gPT0gMCkgeworICAgICAgICBkb3VibGUgcDAgPSBQKCAxLCBsLCAgMSwgbiwg Ul8xLCBSX2xtMSk7CisgICAgICAgIGRvdWJsZSBwMSA9IFAoLTEsIGwsIC0xLCBuLCBSXzEsIFJf bG0xKTsKKyAgICAgICAgcmV0ID0gcDArcDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG0g PiAwKSB7CisgICAgICAgICAgICBpbnQgZCA9IChtID09IDEpID8gMSA6IDA7CisgICAgICAgICAg ICBkb3VibGUgcDAgPSBQKCAxLCBsLCAgbSAtIDEsIG4sIFJfMSwgUl9sbTEpOworICAgICAgICAg ICAgZG91YmxlIHAxID0gUCgtMSwgbCwgLW0gKyAxLCBuLCBSXzEsIFJfbG0xKTsKKworICAgICAg ICAgICAgcmV0ID0gcDAgKiBzcXJ0KDEgKyBkKSAtIHAxICogKDEgLSBkKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGludCBkID0gKG0gPT0gLTEpID8gMSA6IDA7CisgICAgICAgICAg ICBkb3VibGUgcDAgPSBQKCAxLCBsLCAgbSArIDEsIG4sIFJfMSwgUl9sbTEpOworICAgICAgICAg ICAgZG91YmxlIHAxID0gUCgtMSwgbCwgLW0gLSAxLCBuLCBSXzEsIFJfbG0xKTsKKworICAgICAg ICAgICAgcmV0ID0gcDAgKiAoMSAtIGQpICsgcDEgKiBzcXJ0KDEgKyBkKTsKKyAgICAgICAgfQor ICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZG91YmxlIFcoaW50IGwsIGludCBt LCBpbnQgbiwgZG91YmxlIFJfMVszXVszXSwKKyAgICAgICAgICAgICAgICBkb3VibGUgUl9sbTFb MiAqIE1BWF9PUkRFUiArIDFdWzIgKiBNQVhfT1JERVIgKyAxXSkKK3sKKyAgICBkb3VibGUgcmV0 ID0gMC47CisKKyAgICBpZiAobSAhPSAwKSB7CisgICAgICAgIGlmIChtID4gMCkgeworICAgICAg ICAgICAgZG91YmxlIHAwID0gUCggMSwgbCwgbSArIDEsIG4sIFJfMSwgUl9sbTEpOworICAgICAg ICAgICAgZG91YmxlIHAxID0gUCgtMSwgbCwtbSAtIDEsIG4sIFJfMSwgUl9sbTEpOworCisgICAg ICAgICAgICByZXQgPSBwMCArIHAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG91 YmxlIHAwID0gUCggMSwgbCwgIG0gLSAxLCBuLCBSXzEsIFJfbG0xKTsKKyAgICAgICAgICAgIGRv dWJsZSBwMSA9IFAoLTEsIGwsIC1tICsgMSwgbiwgUl8xLCBSX2xtMSk7CisKKyAgICAgICAgICAg IHJldCA9IHAwIC0gcDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQor CitzdGF0aWMgdm9pZCBjYWxjX3JvdGF0aW9uX21hdChBVkZpbHRlckNvbnRleHQgKmN0eCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFtYmlzb25pY0NvbnRleHQgKnMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgeWF3LCBkb3VibGUgcGl0Y2gsIGRvdWJsZSBy b2xsKQoreworICAgIGRvdWJsZSBYWzNdWzNdID0ge3swLn19LCBZWzNdWzNdID0ge3swLn19LCBa WzNdWzNdID0ge3swLn19LCBSWzNdWzNdLCB0WzNdWzNdOworICAgIGRvdWJsZSBSX2xtMVsyICog TUFYX09SREVSICsgMV1bMiAqIE1BWF9PUkRFUiArIDFdID0ge3swLn19OworICAgIGRvdWJsZSBS XzFbM11bM107CisKKyAgICB5YXcgICA9IChNX1BJIC8gMTgwLikgKiB5YXc7CisgICAgcGl0Y2gg PSAoTV9QSSAvIDE4MC4pICogcGl0Y2g7CisgICAgcm9sbCAgPSAoTV9QSSAvIDE4MC4pICogcm9s bDsKKworICAgIFhbMF1bMF0gPSAxLjsKKyAgICBYWzFdWzFdID0gWFsyXVsyXSA9IGNvcyhyb2xs KTsKKyAgICBYWzFdWzJdID0gc2luKHJvbGwpOworICAgIFhbMl1bMV0gPSAtWFsxXVsyXTsKKwor ICAgIFlbMF1bMF0gPSBZWzJdWzJdID0gY29zKHBpdGNoKTsKKyAgICBZWzBdWzJdID0gc2luKHBp dGNoKTsKKyAgICBZWzJdWzBdID0gLVlbMF1bMl07CisgICAgWVsxXVsxXSA9IDEuOworCisgICAg WlswXVswXSA9IFpbMV1bMV0gPSBjb3MoeWF3KTsKKyAgICBaWzBdWzFdID0gc2luKHlhdyk7Cisg ICAgWlsxXVswXSA9IC1aWzBdWzFdOworICAgIFpbMl1bMl0gPSAxLjsKKworICAgIG11bHRpcGx5 X21hdCh0LCBYLCBZKTsKKyAgICBtdWx0aXBseV9tYXQoUiwgdCwgWik7CisKKyAgICBSXzFbMF1b MF0gPSBSWzFdWzFdOworICAgIFJfMVswXVsxXSA9IFJbMV1bMl07CisgICAgUl8xWzBdWzJdID0g UlsxXVswXTsKKyAgICBSXzFbMV1bMF0gPSBSWzJdWzFdOworICAgIFJfMVsxXVsxXSA9IFJbMl1b Ml07CisgICAgUl8xWzFdWzJdID0gUlsyXVswXTsKKyAgICBSXzFbMl1bMF0gPSBSWzBdWzFdOwor ICAgIFJfMVsyXVsxXSA9IFJbMF1bMl07CisgICAgUl8xWzJdWzJdID0gUlswXVswXTsKKworICAg IG1lbXNldChzLT5yb3RhdGVfbWF0LCAwLCBzaXplb2Yocy0+cm90YXRlX21hdCkpOworCisgICAg cy0+cm90YXRlX21hdFswXVswXSA9IDEuOworICAgIHMtPnJvdGF0ZV9tYXRbMV1bMV0gPSBSXzFb MF1bMF07CisgICAgcy0+cm90YXRlX21hdFsxXVsyXSA9IFJfMVswXVsxXTsKKyAgICBzLT5yb3Rh dGVfbWF0WzFdWzNdID0gUl8xWzBdWzJdOworICAgIHMtPnJvdGF0ZV9tYXRbMl1bMV0gPSBSXzFb MV1bMF07CisgICAgcy0+cm90YXRlX21hdFsyXVsyXSA9IFJfMVsxXVsxXTsKKyAgICBzLT5yb3Rh dGVfbWF0WzJdWzNdID0gUl8xWzFdWzJdOworICAgIHMtPnJvdGF0ZV9tYXRbM11bMV0gPSBSXzFb Ml1bMF07CisgICAgcy0+cm90YXRlX21hdFszXVsyXSA9IFJfMVsyXVsxXTsKKyAgICBzLT5yb3Rh dGVfbWF0WzNdWzNdID0gUl8xWzJdWzJdOworCisgICAgUl9sbTFbMF1bMF0gPSBSXzFbMF1bMF07 CisgICAgUl9sbTFbMF1bMV0gPSBSXzFbMF1bMV07CisgICAgUl9sbTFbMF1bMl0gPSBSXzFbMF1b Ml07CisgICAgUl9sbTFbMV1bMF0gPSBSXzFbMV1bMF07CisgICAgUl9sbTFbMV1bMV0gPSBSXzFb MV1bMV07CisgICAgUl9sbTFbMV1bMl0gPSBSXzFbMV1bMl07CisgICAgUl9sbTFbMl1bMF0gPSBS XzFbMl1bMF07CisgICAgUl9sbTFbMl1bMV0gPSBSXzFbMl1bMV07CisgICAgUl9sbTFbMl1bMl0g PSBSXzFbMl1bMl07CisKKyAgICBmb3IgKGludCBsID0gMjsgbCA8PSBzLT5vcmRlcjsgbCsrKSB7 CisgICAgICAgIGRvdWJsZSBSX2xbMiAqIE1BWF9PUkRFUiArIDFdWzIgKiBNQVhfT1JERVIgKyAx XSA9IHt7MC59fTsKKworICAgICAgICBmb3IgKGludCBtID0gLWw7IG0gPD0gbDsgbSsrKSB7Cisg ICAgICAgICAgICBmb3IgKGludCBuID0gLWw7IG4gPD0gbDsgbisrKSB7CisgICAgICAgICAgICAg ICAgaW50IGQgPSAobSA9PSAwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgIGRvdWJsZSBkZW5v bSA9IEZGQUJTKG4pID09IGwgPyAoMiAqIGwpICogKDIgKiBsIC0gMSkgOiBsICogbCAtIG4gKiBu OworICAgICAgICAgICAgICAgIGRvdWJsZSB1ID0gc3FydCgobCAqIGwgLSBtICogbSkgLyBkZW5v bSk7CisgICAgICAgICAgICAgICAgZG91YmxlIHYgPSBzcXJ0KCgxLiArIGQpICogKGwgKyBGRkFC UyhtKSAtIDEuKSAqIChsICsgRkZBQlMobSkpIC8gZGVub20pICogKDEuIC0gMi4gKiBkKSAqIDAu NTsKKyAgICAgICAgICAgICAgICBkb3VibGUgdyA9IHNxcnQoKGwgLSBGRkFCUyhtKSAtIDEuKSoo bCAtIEZGQUJTKG0pKSAvIGRlbm9tKSAqICgxLiAtIGQpICogLTAuNTsKKworICAgICAgICAgICAg ICAgIGlmICh1KQorICAgICAgICAgICAgICAgICAgICB1ICo9IFUobCwgbSwgbiwgUl8xLCBSX2xt MSk7CisgICAgICAgICAgICAgICAgaWYgKHYpCisgICAgICAgICAgICAgICAgICAgIHYgKj0gVihs LCBtLCBuLCBSXzEsIFJfbG0xKTsKKyAgICAgICAgICAgICAgICBpZiAodykKKyAgICAgICAgICAg ICAgICAgICAgdyAqPSBXKGwsIG0sIG4sIFJfMSwgUl9sbTEpOworCisgICAgICAgICAgICAgICAg Ul9sW20gKyBsXVtuICsgbF0gPSB1ICsgdiArIHc7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIgKiBsICsgMTsgaSsrKSB7CisgICAgICAg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IDIgKiBsICsgMTsgaisrKQorICAgICAgICAgICAgICAg IHMtPnJvdGF0ZV9tYXRbbCAqIGwgKyBpXVtsICogbCArIGpdID0gUl9sW2ldW2pdOworICAgICAg ICB9CisKKyAgICAgICAgbWVtY3B5KFJfbG0xLCBSX2wsIHNpemVvZihSX2wpKTsKKyAgICB9CisK KyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJyb3RhdGlvbiBtYXRyaXg6XG4iKTsKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IFNRUihzLT5vcmRlciArIDEpOyBpKyspIHsKKyAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCBTUVIocy0+b3JkZXIgKyAxKTsgaisrKSB7CisgICAgICAgICAg ICBpZiAoZmFicyhzLT5yb3RhdGVfbWF0W2ldW2pdKSA8IDFlLTZmKQorICAgICAgICAgICAgICAg IHMtPnJvdGF0ZV9tYXRbaV1bal0gPSAwLjsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19ERUJVRywgIlx0JWciLCBzLT5yb3RhdGVfbWF0W2ldW2pdKTsKKyAgICAgICAgfQorICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcbiIpOworICAgIH0KK30KKworc3RhdGljIHZv aWQgY2FsY19taXJyb3JfbWF0KEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBzLT5tYXhfY2hhbm5lbHM7IGkrKykgeworICAgICAgICBkb3VibGUgZ2FpbiA9 IDEuOworICAgICAgICBpbnQgbGV2ZWwsIG9yZGVyOworCisgICAgICAgIGFjbl90b19sZXZlbF9v cmRlcihpLCAmbGV2ZWwsICZvcmRlcik7CisKKyAgICAgICAgaWYgKGkgPT0gMCB8fCAoISgobGV2 ZWwgKyBvcmRlcikgJiAxKSkpIHsKKyAgICAgICAgICAgIGdhaW4gKj0gcy0+Z2FpbltFVkVOXVtE X1pdOworCisgICAgICAgICAgICBpZiAocy0+aW52ZXJ0W0RfWl0gJiAyKQorICAgICAgICAgICAg ICAgIGdhaW4gKj0gLTEuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChsZXZlbCArIG9yZGVy KSAmIDEpIHsKKyAgICAgICAgICAgIGdhaW4gKj0gcy0+Z2FpbltPRERdW0RfWl07CisKKyAgICAg ICAgICAgIGlmIChzLT5pbnZlcnRbRF9aXSAmIDEpCisgICAgICAgICAgICAgICAgZ2FpbiAqPSAt MS47CisgICAgICAgIH0KKworICAgICAgICBpZiAob3JkZXIgPj0gMCkgeworICAgICAgICAgICAg Z2FpbiAqPSBzLT5nYWluW0VWRU5dW0RfWV07CisKKyAgICAgICAgICAgIGlmIChzLT5pbnZlcnRb RF9ZXSAmIDIpCisgICAgICAgICAgICAgICAgZ2FpbiAqPSAtMS47CisgICAgICAgIH0KKworICAg ICAgICBpZiAob3JkZXIgPCAwKSB7CisgICAgICAgICAgICBnYWluICo9IHMtPmdhaW5bT0REXVtE X1ldOworCisgICAgICAgICAgICBpZiAocy0+aW52ZXJ0W0RfWV0gJiAxKQorICAgICAgICAgICAg ICAgIGdhaW4gKj0gLTEuOworICAgICAgICB9CisKKworICAgICAgICBpZiAoKChvcmRlciA8IDAp ICYmIChvcmRlciAmIDEpKSB8fCAoKG9yZGVyID49IDApICYmICEob3JkZXIgJiAxKSkgKSB7Cisg ICAgICAgICAgICBnYWluICo9IHMtPmdhaW5bRVZFTl1bRF9YXTsKKworICAgICAgICAgICAgaWYg KHMtPmludmVydFtEX1hdICYgMikKKyAgICAgICAgICAgICAgICBnYWluICo9IC0xLjsKKyAgICAg ICAgfQorCisgICAgICAgIGlmICgoKG9yZGVyIDwgMCkgJiYgIShvcmRlciAmIDEpKSB8fCAoKG9y ZGVyID49IDApICYmIChvcmRlciAmIDEpKSkgeworICAgICAgICAgICAgZ2FpbiAqPSBzLT5nYWlu W09ERF1bRF9YXTsKKworICAgICAgICAgICAgaWYgKHMtPmludmVydFtEX1hdICYgMSkKKyAgICAg ICAgICAgICAgICBnYWluICo9IC0xLjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA9 PSBvcmRlciB8fCBsZXZlbCA9PSAtb3JkZXIpIHsKKyAgICAgICAgICAgIGdhaW4gKj0gcy0+Z2Fp blswXVtEX0NdOworCisgICAgICAgICAgICBpZiAocy0+aW52ZXJ0W0RfQ10pCisgICAgICAgICAg ICAgICAgZ2FpbiAqPSAtMS47CisgICAgICAgIH0KKworICAgICAgICBzLT5taXJyb3JfbWF0W2ld ID0gZ2FpbjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG11bHRpcGx5X21hdDE2KGRvdWJsZSBv dXRbMTZdWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBhWzE2 XVsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYlsxNl1bMTZd LCBpbnQgeCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkrKykgeworICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8IHg7IGorKykgeworICAgICAgICAgICAgZG91YmxlIHN1bSA9IDAu OworCisgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHg7IGsrKykKKyAgICAgICAgICAg ICAgICBzdW0gKz0gYVtpXVtrXSAqIGJba11bal07CisKKyAgICAgICAgICAgIG91dFtpXVtqXSA9 IHN1bTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgbXVsdGlwbHlfbWF0eChk b3VibGUgb3V0WzE2XVsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJs ZSBhWzE2XVsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBiWzRd WzRdKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAgICAgICAgICBkb3VibGUgc3VtID0gMC47CisK KyAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgaysrKQorICAgICAgICAgICAgICAg IHN1bSArPSBhW2ldW2tdICogYltrXVtqXTsKKworICAgICAgICAgICAgb3V0W2ldW2pdID0gc3Vt OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseV9tYXQ0KGRvdWJs ZSBvdXRbNF1bNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBhWzRd WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYls0XVs0XSkKK3sK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0g MDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgZG91YmxlIHN1bSA9IDAuOworCisgICAgICAg ICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgICAgICAgICBzdW0gKz0g YVtpXVtrXSAqIGJba11bal07CisKKyAgICAgICAgICAgIG91dFtpXVtqXSA9IHN1bTsKKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZG9taW5hbmNlX21hdChkb3VibGUgZCwgaW50 IGluZGV4LCBkb3VibGUgbVs0XVs0XSkKK3sKKyAgICBkb3VibGUgZzAsIGcxLCBrLCBrcjsKKwor ICAgIGsgPSBkYjJhKGQpOworICAgIGtyID0gMS4gLyBrOworCisgICAgZzAgPSAoayArIGtyKSAq IDAuNTsKKyAgICBnMSA9IChrIC0ga3IpIC8gTV9TUVJUMjsKKworICAgIG1bQV9XXVtBX1ddICAg ICA9IGcwOworICAgIG1bQV9XXVtpbmRleF0gICA9IGcxICogMC41OworICAgIG1baW5kZXhdW0Ff V10gICA9IGcxOworICAgIG1baW5kZXhdW2luZGV4XSA9IGcwOworfQorCitzdGF0aWMgdm9pZCBk aXJlY3RfbWF0KGRvdWJsZSBhbmdsZSwgaW50IGluZGV4LCBkb3VibGUgbVs0XVs0XSkKK3sKKyAg ICBkb3VibGUgZzAsIGcxOworCisgICAgZzAgPSBzcXJ0KDEuICsgc2luKChNX1BJLzE4MC4pICog YW5nbGUpKTsKKyAgICBnMSA9IHNxcnQoMS4gLSBzaW4oKE1fUEkvMTgwLikgKiBhbmdsZSkpOwor CisgICAgaWYgKGluZGV4ID09IDApCisgICAgICAgIEZGU1dBUChkb3VibGUsIGcwLCBnMSk7CisK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgICAgbVtpXVtpXSA9IGluZGV4 ID09IGkgPyBnMSA6IGcwOworfQorCitzdGF0aWMgdm9pZCB6b29tX21hdChkb3VibGUgYW5nbGUs IGludCBpbmRleCwgZG91YmxlIG1bNF1bNF0pCit7CisgICAgZG91YmxlIGcwLCBnMTsKKworICAg IGFuZ2xlID0gYW5nbGUgKiAoTV9QSSAvIDE4MC4pOworCisgICAgZzAgPSBzaW4oYW5nbGUpOwor ICAgIGcxID0gY29zKGFuZ2xlKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7 CisgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgIG1baV1baV0gPSAxLjsKKyAgICAg ICAgfSBlbHNlIGlmIChpID09IGluZGV4KSB7CisgICAgICAgICAgICBtW2ldW2ldID0gMS47Cisg ICAgICAgICAgICBtW0FfV11baV0gPSBnMCAvIE1fU1FSVDI7CisgICAgICAgICAgICBtW2ldW0Ff V10gPSBnMCAqIE1fU1FSVDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtW2ldW2ld ID0gZzE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZvY3VzX21hdChkb3Vi bGUgYW5nbGUsIGludCBpbmRleCwgZG91YmxlIG1bNF1bNF0pCit7CisgICAgZG91YmxlIGcwLCBn MSwgZzI7CisKKyAgICBhbmdsZSA9IGFuZ2xlICogKE1fUEkgLyAxODAuKTsKKworICAgIGcwID0g MS4gLyAoMS4gKyBzaW4oZmFicyhhbmdsZSkpKTsKKyAgICBnMSA9IE1fU1FSVDIgKiBzaW4oYW5n bGUpICogZzA7CisgICAgZzIgPSBjb3MoYW5nbGUpICogZzA7CisKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IDQ7IGkrKykgeworICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICBtW2ld W2ldID0gZzA7CisgICAgICAgIH0gZWxzZSBpZiAoaSA9PSBpbmRleCkgeworICAgICAgICAgICAg bVtpXVtpXSA9IGcwOworICAgICAgICAgICAgbVtBX1ddW2ldID0gZzEgLyAyLjsKKyAgICAgICAg ICAgIG1baV1bQV9XXSA9IGcxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVtpXVtp XSA9IGcyOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwdXNoX21hdChkb3Vi bGUgYW5nbGUsIGludCBpbmRleCwgZG91YmxlIG1bNF1bNF0pCit7CisgICAgZG91YmxlIGcwLCBn MTsKKworICAgIGFuZ2xlID0gYW5nbGUgKiAoTV9QSSAvIDE4MC4pOworCisgICAgZzAgPSBNX1NR UlQyICogc2luKGFuZ2xlKSAqIHNpbihmYWJzKGFuZ2xlKSk7CisgICAgZzEgPSBTUVIoY29zKGFu Z2xlKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBpZiAo aSA9PSAwKSB7CisgICAgICAgICAgICBtW2ldW2ldID0gMS47CisgICAgICAgIH0gZWxzZSBpZiAo aSA9PSBpbmRleCkgeworICAgICAgICAgICAgbVtpXVtpXSA9IGcxOworICAgICAgICAgICAgbVtp XVtBX1ddID0gZzA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtW2ldW2ldID0gZzE7 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHByZXNzX21hdChkb3VibGUgYW5n bGUsIGludCBpbmRleCwgZG91YmxlIG1bNF1bNF0pCit7CisgICAgZG91YmxlIGcwLCBnMSwgZzI7 CisKKyAgICBhbmdsZSA9IGFuZ2xlICogKE1fUEkgLyAxODAuKTsKKworICAgIGcwID0gTV9TUVJU MiAqIHNpbihhbmdsZSkgKiBzaW4oZmFicyhhbmdsZSkpOworICAgIGcyID0gY29zKGFuZ2xlKTsK KyAgICBnMSA9IFNRUihnMik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewor ICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICBtW2ldW2ldID0gMS47CisgICAgICAg IH0gZWxzZSBpZiAoaSA9PSBpbmRleCkgeworICAgICAgICAgICAgbVtpXVtpXSA9IGcxOworICAg ICAgICAgICAgbVtpXVtBX1ddID0gZzA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt W2ldW2ldID0gZzI7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBkb3VibGUg aV9tYXRbNF1bNF0gPQoreworICAgIHsgMSwgMCwgMCwgMCB9LAorICAgIHsgMCwgMSwgMCwgMCB9 LAorICAgIHsgMCwgMCwgMSwgMCB9LAorICAgIHsgMCwgMCwgMCwgMSB9LAorfTsKKworc3RhdGlj IHZvaWQgY2FsY19wcmVzc19tYXQoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3VibGUg eF9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAgfTsKKyAg ICBkb3VibGUgel9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgb19tYXRbNF1bNF07CisK KyAgICBwcmVzc19tYXQocy0+cHJlc3NbQV9YXSwgQV9YLCB4X21hdCk7CisgICAgcHJlc3NfbWF0 KHMtPnByZXNzW0FfWV0sIEFfWSwgeV9tYXQpOworICAgIHByZXNzX21hdChzLT5wcmVzc1tBX1pd LCBBX1osIHpfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDQob19tYXQsIHhfbWF0LCB5X21hdCk7 CisgICAgbXVsdGlwbHlfbWF0NChzLT5wcmVzc19tYXQsIG9fbWF0LCB6X21hdCk7Cit9CisKK3N0 YXRpYyB2b2lkIGNhbGNfcHVzaF9tYXQoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3Vi bGUgeF9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAgfTsK KyAgICBkb3VibGUgel9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgb19tYXRbNF1bNF07 CisKKyAgICBwdXNoX21hdChzLT5wdXNoW0FfWF0sIEFfWCwgeF9tYXQpOworICAgIHB1c2hfbWF0 KHMtPnB1c2hbQV9ZXSwgQV9ZLCB5X21hdCk7CisgICAgcHVzaF9tYXQocy0+cHVzaFtBX1pdLCBB X1osIHpfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDQob19tYXQsIHhfbWF0LCB5X21hdCk7Cisg ICAgbXVsdGlwbHlfbWF0NChzLT5wdXNoX21hdCwgb19tYXQsIHpfbWF0KTsKK30KKworc3RhdGlj IHZvaWQgY2FsY19kb21pbmFuY2VfbWF0KEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZG91 YmxlIHhfbWF0WzRdWzRdOworICAgIGRvdWJsZSB5X21hdFs0XVs0XTsKKyAgICBkb3VibGUgel9t YXRbNF1bNF07CisgICAgZG91YmxlIG9fbWF0WzRdWzRdOworCisgICAgbWVtY3B5KHhfbWF0LCBp X21hdCwgc2l6ZW9mKGlfbWF0KSk7CisgICAgbWVtY3B5KHlfbWF0LCBpX21hdCwgc2l6ZW9mKGlf bWF0KSk7CisgICAgbWVtY3B5KHpfbWF0LCBpX21hdCwgc2l6ZW9mKGlfbWF0KSk7CisKKyAgICBk b21pbmFuY2VfbWF0KHMtPmRvbWluYW5jZVtBX1hdLCBBX1gsIHhfbWF0KTsKKyAgICBkb21pbmFu Y2VfbWF0KHMtPmRvbWluYW5jZVtBX1ldLCBBX1ksIHlfbWF0KTsKKyAgICBkb21pbmFuY2VfbWF0 KHMtPmRvbWluYW5jZVtBX1pdLCBBX1osIHpfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDQob19t YXQsIHhfbWF0LCB5X21hdCk7CisgICAgbXVsdGlwbHlfbWF0NChzLT5kb21pbmFuY2VfbWF0LCBv X21hdCwgel9tYXQpOworfQorCitzdGF0aWMgdm9pZCBjYWxjX2RpcmVjdGlvbl9tYXQoQW1iaXNv bmljQ29udGV4dCAqcykKK3sKKyAgICBkb3VibGUgd19tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBk b3VibGUgeF9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAg fTsKKyAgICBkb3VibGUgel9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgdF9tYXRbNF1b NF07CisKKyAgICBkaXJlY3RfbWF0KHMtPmRpcmVjdGlvbltBX1ddLCBBX1csIHdfbWF0KTsKKyAg ICBkaXJlY3RfbWF0KHMtPmRpcmVjdGlvbltBX1hdLCBBX1gsIHhfbWF0KTsKKyAgICBkaXJlY3Rf bWF0KHMtPmRpcmVjdGlvbltBX1ldLCBBX1ksIHlfbWF0KTsKKyAgICBkaXJlY3RfbWF0KHMtPmRp cmVjdGlvbltBX1pdLCBBX1osIHpfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHdf bWF0LCB4X21hdCk7CisgICAgbXVsdGlwbHlfbWF0NCh3X21hdCwgdF9tYXQsIHlfbWF0KTsKKyAg ICBtdWx0aXBseV9tYXQ0KHMtPmRpcmVjdGlvbl9tYXQsIHdfbWF0LCB6X21hdCk7Cit9CisKK3N0 YXRpYyB2b2lkIGNhbGNfem9vbV9tYXQoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3Vi bGUgeF9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAgfTsK KyAgICBkb3VibGUgel9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgdF9tYXRbNF1bNF07 CisKKyAgICB6b29tX21hdChzLT56b29tW0FfWF0sIEFfWCwgeF9tYXQpOworICAgIHpvb21fbWF0 KHMtPnpvb21bQV9ZXSwgQV9ZLCB5X21hdCk7CisgICAgem9vbV9tYXQocy0+em9vbVtBX1pdLCBB X1osIHpfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHhfbWF0LCB5X21hdCk7Cisg ICAgbXVsdGlwbHlfbWF0NChzLT56b29tX21hdCwgdF9tYXQsIHpfbWF0KTsKK30KKworc3RhdGlj IHZvaWQgY2FsY19mb2N1c19tYXQoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBkb3VibGUg eF9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF0gPSB7IDAgfTsKKyAg ICBkb3VibGUgel9tYXRbNF1bNF0gPSB7IDAgfTsKKyAgICBkb3VibGUgdF9tYXRbNF1bNF07CisK KyAgICBmb2N1c19tYXQocy0+Zm9jdXNbQV9YXSwgQV9YLCB4X21hdCk7CisgICAgZm9jdXNfbWF0 KHMtPmZvY3VzW0FfWV0sIEFfWSwgeV9tYXQpOworICAgIGZvY3VzX21hdChzLT5mb2N1c1tBX1pd LCBBX1osIHpfbWF0KTsKKworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHhfbWF0LCB5X21hdCk7 CisgICAgbXVsdGlwbHlfbWF0NChzLT5mb2N1c19tYXQsIHRfbWF0LCB6X21hdCk7Cit9CisKK3N0 YXRpYyB2b2lkIGNhbGNfdHJhbnNmb3JtX21hdChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAg IGNvbnN0IGludCBpbnB1dHMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzOworICAg IGRvdWJsZSB0dF9tYXRbMTZdWzE2XSA9IHsgMCB9OworICAgIGRvdWJsZSBvX21hdFsxNl1bMTZd ID0geyAwIH07CisgICAgZG91YmxlIHRfbWF0WzRdWzRdOworICAgIGRvdWJsZSByX21hdFs0XVs0 XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzOyBpKyspCisgICAgICAgIHR0X21h dFtpXVtpXSA9IHMtPm1pcnJvcl9tYXRbaV07CisKKyAgICBtdWx0aXBseV9tYXQ0KHRfbWF0LCBz LT5kb21pbmFuY2VfbWF0LCBzLT5kaXJlY3Rpb25fbWF0KTsKKyAgICBtdWx0aXBseV9tYXQ0KHJf bWF0LCB0X21hdCwgcy0+em9vbV9tYXQpOworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHJfbWF0 LCBzLT5mb2N1c19tYXQpOworICAgIG11bHRpcGx5X21hdDQocl9tYXQsIHRfbWF0LCBzLT5wdXNo X21hdCk7CisgICAgbXVsdGlwbHlfbWF0NCh0X21hdCwgcl9tYXQsIHMtPnByZXNzX21hdCk7CisK KyAgICBtdWx0aXBseV9tYXR4KG9fbWF0LCB0dF9tYXQsIHRfbWF0KTsKKworICAgIG11bHRpcGx5 X21hdDE2KHMtPnRyYW5zZm9ybV9tYXQsIHMtPnJvdGF0ZV9tYXQsIG9fbWF0LCBpbnB1dHMpOwor fQorCitzdGF0aWMgdm9pZCBuZWFyX2ZpZWxkKEFtYmlzb25pY0NvbnRleHQgKnMsIEFWRnJhbWUg KmZyYW1lLCBpbnQgb3V0LCBpbnQgYWRkKQoreworICAgIGZvciAoaW50IGNoID0gMSAtIG91dDsg Y2ggPCBmcmFtZS0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIGludCBu LCBtOworCisgICAgICAgIGFjbl90b19sZXZlbF9vcmRlcihjaCwgJm4sICZtKTsKKworICAgICAg ICBpZiAoIXMtPm5mX3Byb2Nlc3NbbiAtIDFdKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgcy0+bmZfcHJvY2Vzc1tuIC0gMV0oJnMtPm5mW291dF1bY2hdLCBmcmFtZSwgY2gsIGFkZCwg MS4pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgeG92ZXJfcHJvY2Vzc2YoWG92ZXIgKnhvdmVy LCBjb25zdCBmbG9hdCAqc3JjLCBmbG9hdCAqZHN0LCBpbnQgbmJfc2FtcGxlcykKK3sKKyAgICBm bG9hdCBiMCA9IHhvdmVyLT5iWzBdOworICAgIGZsb2F0IGIxID0geG92ZXItPmJbMV07CisgICAg ZmxvYXQgYjIgPSB4b3Zlci0+YlsyXTsKKyAgICBmbG9hdCBhMSA9IHhvdmVyLT5hWzFdOworICAg IGZsb2F0IGEyID0geG92ZXItPmFbMl07CisgICAgZmxvYXQgdzAgPSB4b3Zlci0+d1swXTsKKyAg ICBmbG9hdCB3MSA9IHhvdmVyLT53WzFdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9z YW1wbGVzOyBpKyspIHsKKyAgICAgICAgZmxvYXQgaW4gPSBzcmNbaV07CisgICAgICAgIGZsb2F0 IG91dCA9IGIwICogaW4gKyB3MDsKKworICAgICAgICB3MCA9IGIxICogaW4gKyB3MSArIGExICog b3V0OworICAgICAgICB3MSA9IGIyICogaW4gKyBhMiAqIG91dDsKKworICAgICAgICBkc3RbaV0g PSBvdXQ7CisgICAgfQorCisgICAgeG92ZXItPndbMF0gPSB3MDsKKyAgICB4b3Zlci0+d1sxXSA9 IHcxOworfQorCitzdGF0aWMgdm9pZCB4b3Zlcl9wcm9jZXNzZChYb3ZlciAqeG92ZXIsIGNvbnN0 IGRvdWJsZSAqc3JjLCBkb3VibGUgKmRzdCwgaW50IG5iX3NhbXBsZXMpCit7CisgICAgZG91Ymxl IGIwID0geG92ZXItPmJbMF07CisgICAgZG91YmxlIGIxID0geG92ZXItPmJbMV07CisgICAgZG91 YmxlIGIyID0geG92ZXItPmJbMl07CisgICAgZG91YmxlIGExID0geG92ZXItPmFbMV07CisgICAg ZG91YmxlIGEyID0geG92ZXItPmFbMl07CisgICAgZG91YmxlIHcwID0geG92ZXItPndbMF07Cisg ICAgZG91YmxlIHcxID0geG92ZXItPndbMV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5i X3NhbXBsZXM7IGkrKykgeworICAgICAgICBkb3VibGUgaW4gPSBzcmNbaV07CisgICAgICAgIGRv dWJsZSBvdXQgPSBiMCAqIGluICsgdzA7CisKKyAgICAgICAgdzAgPSBiMSAqIGluICsgdzEgKyBh MSAqIG91dDsKKyAgICAgICAgdzEgPSBiMiAqIGluICsgYTIgKiBvdXQ7CisKKyAgICAgICAgZHN0 W2ldID0gb3V0OworICAgIH0KKworICAgIHhvdmVyLT53WzBdID0gdzA7CisgICAgeG92ZXItPndb MV0gPSB3MTsKK30KKworc3RhdGljIHZvaWQgeG92ZXJmKEFtYmlzb25pY0NvbnRleHQgKnMsCisg ICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqaW4sIEFWRnJhbWUgKmxmLCBBVkZyYW1lICpoZikK K3sKKyAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgaW4tPmNoX2xheW91dC5uYl9jaGFubmVsczsg Y2grKykgeworICAgICAgICB4b3Zlcl9wcm9jZXNzZigmcy0+eG92ZXJbMF1bY2hdLAorICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3QgZmxvYXQgKilpbi0+ZXh0ZW5kZWRfZGF0YVtjaF0sCisg ICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCAqKWxmLT5leHRlbmRlZF9kYXRhW2NoXSwgaW4t Pm5iX3NhbXBsZXMpOworCisgICAgICAgIHhvdmVyX3Byb2Nlc3NmKCZzLT54b3ZlclsxXVtjaF0s CisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBmbG9hdCAqKWluLT5leHRlbmRlZF9kYXRh W2NoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0ICopaGYtPmV4dGVuZGVkX2RhdGFb Y2hdLCBpbi0+bmJfc2FtcGxlcyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB4b3ZlcmQoQW1i aXNvbmljQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFt ZSAqbGYsIEFWRnJhbWUgKmhmKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBpbi0+Y2hf bGF5b3V0Lm5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIHhvdmVyX3Byb2Nlc3NkKCZzLT54 b3ZlclswXVtjaF0sCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBkb3VibGUgKilpbi0+ ZXh0ZW5kZWRfZGF0YVtjaF0sCisgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgKilsZi0+ ZXh0ZW5kZWRfZGF0YVtjaF0sIGluLT5uYl9zYW1wbGVzKTsKKworICAgICAgICB4b3Zlcl9wcm9j ZXNzZCgmcy0+eG92ZXJbMV1bY2hdLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgZG91 YmxlICopaW4tPmV4dGVuZGVkX2RhdGFbY2hdLAorICAgICAgICAgICAgICAgICAgICAgICAoZG91 YmxlICopaGYtPmV4dGVuZGVkX2RhdGFbY2hdLCBpbi0+bmJfc2FtcGxlcyk7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBwcm9jZXNzX2Zsb2F0KEFWRmlsdGVyQ29udGV4dCAqY3R4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFtZSAqb3V0KQoreworICAgIEFt Ymlzb25pY0NvbnRleHQgKnMgPSBjdHgtPnByaXY7CisKKyAgICBzY2FsZWYocywgaW4sIHMtPnNm cmFtZSwgcy0+bm9ybV90YWJbcy0+c2NhbGluZ19ub3JtXSwKKyAgICAgICAgICAgaW4tPm5iX3Nh bXBsZXMsIEZGTUlOKGluLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMsIHMtPm1heF9jaGFubmVscyks CisgICAgICAgICAgIHMtPnNlcV9tYXApOworCisgICAgY2FsY190cmFuc2Zvcm1fbWF0KHMpOwor CisgICAgdHJhbnNmb3JtZihzLCBzLT5zZnJhbWUsIHMtPnJmcmFtZSwgcy0+dHJhbnNmb3JtX21h dCwKKyAgICAgICAgICAgICAgIGluLT5uYl9zYW1wbGVzLCBGRk1JTihpbi0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzLCBzLT5tYXhfY2hhbm5lbHMpLAorICAgICAgICAgICAgICAgcy0+c2VxX21hcCk7 CisKKyAgICBpZiAocy0+bmVhcl9maWVsZCA9PSBORl9JTikKKyAgICAgICAgbmVhcl9maWVsZChz LCBzLT5yZnJhbWUsIDAsIDApOworCisgICAgaWYgKHMtPnhvdmVyX2ZyZXEgPiAwLikgeworICAg ICAgICB4b3ZlcmYocywgcy0+cmZyYW1lLCBzLT5mcmFtZTIsIHMtPnJmcmFtZSk7CisKKyAgICAg ICAgbXVsdGlwbHlmKHMsIHMtPmRlY29kZV9tYXQsCisgICAgICAgICAgICAgICAgICBhbWJpc29u aWNfdGFiW3MtPmxheW91dF0uaW5wdXRzLAorICAgICAgICAgICAgICAgICAgYW1iaXNvbmljX3Rh YltzLT5sYXlvdXRdLnNwZWFrZXJzLAorICAgICAgICAgICAgICAgICAgcy0+c2VxX21hcCwKKyAg ICAgICAgICAgICAgICAgIHMtPmdhaW5zX3RhYlswXSwKKyAgICAgICAgICAgICAgICAgIGluLT5j aF9sYXlvdXQubmJfY2hhbm5lbHMsCisgICAgICAgICAgICAgICAgICBzLT5tYXhfY2hhbm5lbHMs CisgICAgICAgICAgICAgICAgICBzLT5mcmFtZTIsIG91dCk7CisgICAgfQorCisgICAgbXVsdGlw bHlmKHMsIHMtPmRlY29kZV9tYXQsCisgICAgICAgICAgICAgIGFtYmlzb25pY190YWJbcy0+bGF5 b3V0XS5pbnB1dHMsCisgICAgICAgICAgICAgIGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVh a2VycywKKyAgICAgICAgICAgICAgcy0+c2VxX21hcCwKKyAgICAgICAgICAgICAgcy0+eG92ZXJf ZnJlcSA+IDAuID8gcy0+Z2FpbnNfdGFiWzFdIDogTlVMTCwKKyAgICAgICAgICAgICAgaW4tPmNo X2xheW91dC5uYl9jaGFubmVscywKKyAgICAgICAgICAgICAgcy0+bWF4X2NoYW5uZWxzLAorICAg ICAgICAgICAgICBzLT5yZnJhbWUsIG91dCk7CisKKyAgICBpZiAocy0+bmVhcl9maWVsZCA9PSBO Rl9PVVQpCisgICAgICAgIG5lYXJfZmllbGQocywgb3V0LCAxLCAxKTsKKworICAgIGxldmVsZihz LCBvdXQsIHMtPmxldmVsX3RhYiwKKyAgICAgICAgICAgb3V0LT5uYl9zYW1wbGVzLCBvdXQtPmNo X2xheW91dC5uYl9jaGFubmVscyk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZG91YmxlKEFW RmlsdGVyQ29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAq aW4sIEFWRnJhbWUgKm91dCkKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4LT5wcml2 OworCisgICAgc2NhbGVkKHMsIGluLCBzLT5zZnJhbWUsIHMtPm5vcm1fdGFiW3MtPnNjYWxpbmdf bm9ybV0sCisgICAgICAgICAgIGluLT5uYl9zYW1wbGVzLCBGRk1JTihpbi0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzLCBzLT5tYXhfY2hhbm5lbHMpLAorICAgICAgICAgICBzLT5zZXFfbWFwKTsKKwor ICAgIGNhbGNfdHJhbnNmb3JtX21hdChzKTsKKworICAgIHRyYW5zZm9ybWQocywgcy0+c2ZyYW1l LCBzLT5yZnJhbWUsIHMtPnRyYW5zZm9ybV9tYXQsCisgICAgICAgICAgICAgICBpbi0+bmJfc2Ft cGxlcywgRkZNSU4oaW4tPmNoX2xheW91dC5uYl9jaGFubmVscywgcy0+bWF4X2NoYW5uZWxzKSwK KyAgICAgICAgICAgICAgIHMtPnNlcV9tYXApOworCisgICAgaWYgKHMtPm5lYXJfZmllbGQgPT0g TkZfSU4pCisgICAgICAgIG5lYXJfZmllbGQocywgcy0+cmZyYW1lLCAwLCAwKTsKKworICAgIGlm IChzLT54b3Zlcl9mcmVxID4gMC4pIHsKKyAgICAgICAgeG92ZXJkKHMsIHMtPnJmcmFtZSwgcy0+ ZnJhbWUyLCBzLT5yZnJhbWUpOworCisgICAgICAgIG11bHRpcGx5ZChzLCBzLT5kZWNvZGVfbWF0 LAorICAgICAgICAgICAgICAgICAgYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLmlucHV0cywKKyAg ICAgICAgICAgICAgICAgIGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2VycywKKyAgICAg ICAgICAgICAgICAgIHMtPnNlcV9tYXAsCisgICAgICAgICAgICAgICAgICBzLT5nYWluc190YWJb MF0sCisgICAgICAgICAgICAgICAgICBpbi0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLAorICAgICAg ICAgICAgICAgICAgcy0+bWF4X2NoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgcy0+ZnJhbWUy LCBvdXQpOworICAgIH0KKworICAgIG11bHRpcGx5ZChzLCBzLT5kZWNvZGVfbWF0LAorICAgICAg ICAgICAgICBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzLAorICAgICAgICAgICAgICBh bWJpc29uaWNfdGFiW3MtPmxheW91dF0uc3BlYWtlcnMsCisgICAgICAgICAgICAgIHMtPnNlcV9t YXAsCisgICAgICAgICAgICAgIHMtPnhvdmVyX2ZyZXEgPiAwLiA/IHMtPmdhaW5zX3RhYlsxXSA6 IE5VTEwsCisgICAgICAgICAgICAgIGluLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMsCisgICAgICAg ICAgICAgIHMtPm1heF9jaGFubmVscywKKyAgICAgICAgICAgICAgcy0+cmZyYW1lLCBvdXQpOwor CisgICAgaWYgKHMtPm5lYXJfZmllbGQgPT0gTkZfT1VUKQorICAgICAgICBuZWFyX2ZpZWxkKHMs IG91dCwgMSwgMSk7CisKKyAgICBsZXZlbGQocywgb3V0LCBzLT5sZXZlbF90YWIsCisgICAgICAg ICAgIG91dC0+bmJfc2FtcGxlcywgb3V0LT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpOworfQorCitz dGF0aWMgZG91YmxlIHNwZWVkX29mX3NvdW5kKGRvdWJsZSB0ZW1wKQoreworICAgIHJldHVybiAx Ljg1MzI1ICogKDY0My45NSAqIHNxcnQoKCh0ZW1wICsgMjczLjE1KSAvIDI3My4xNSkpKSAqIDEw MDAuMCAvICg2MC4gKiA2MC4pOworfQorCitzdGF0aWMgdm9pZCBuZmllbGQxX2luaXQoTmVhckZp ZWxkICpuZiwgZG91YmxlIHJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg c3BlZWQsIGRvdWJsZSByYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBnYWlu KQoreworICAgIGRvdWJsZSB3ID0gMC41ICogc3BlZWQgLyAocmFkaXVzICogcmF0ZSk7CisKKyAg ICBuZi0+ZFswXSA9IDEuIC8gKDEuICsgdyk7CisgICAgbmYtPmRbMV0gPSAoMi4gKiB3KSAqIG5m LT5kWzBdOworfQorCitzdGF0aWMgdm9pZCBuZmllbGQxX3Byb2Nlc3NmKE5lYXJGaWVsZCAqbmYs IEFWRnJhbWUgKmZyYW1lLCBpbnQgY2gsIGludCBhZGQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRvdWJsZSBnYWluKQoreworICAgIGZsb2F0ICpkc3QgPSAoZmxvYXQgKilmcmFtZS0+ ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgZmxvYXQgejAsIGQwLCBkMTsKKworICAgIHowID0gbmYt PnpbMF07CisgICAgZDAgPSBuZi0+ZFswXSAqIGdhaW47CisgICAgZDEgPSBuZi0+ZFsxXTsKKwor ICAgIGZvciAoaW50IG4gPSAwOyBuIDwgZnJhbWUtPm5iX3NhbXBsZXM7IG4rKykgeworICAgICAg ICBmbG9hdCB4ID0gZHN0W25dICogZDAgLSBkMSAqIHowOworICAgICAgICBkc3Rbbl0gPSB4ICsg KGFkZCA/IGRzdFtuXSA6IDAuZik7CisgICAgICAgIHowICs9IHg7CisgICAgfQorCisgICAgbmYt PnpbMF0gPSB6MDsKK30KKworc3RhdGljIHZvaWQgbmZpZWxkMV9wcm9jZXNzZChOZWFyRmllbGQg Km5mLCBBVkZyYW1lICpmcmFtZSwgaW50IGNoLCBpbnQgYWRkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkb3VibGUgZ2FpbikKK3sKKyAgICBkb3VibGUgKmRzdCA9IChkb3VibGUgKilm cmFtZS0+ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgZG91YmxlIHowLCBkMCwgZDE7CisKKyAgICB6 MCA9IG5mLT56WzBdOworICAgIGQwID0gbmYtPmRbMF0gKiBnYWluOworICAgIGQxID0gbmYtPmRb MV07CisKKyAgICBmb3IgKGludCBuID0gMDsgbiA8IGZyYW1lLT5uYl9zYW1wbGVzOyBuKyspIHsK KyAgICAgICAgZG91YmxlIHggPSBkc3Rbbl0gKiBkMCAtIGQxICogejA7CisgICAgICAgIGRzdFtu XSA9IHggKyAoYWRkID8gZHN0W25dIDogMC5mKTsKKyAgICAgICAgejAgKz0geDsKKyAgICB9CisK KyAgICBuZi0+elswXSA9IHowOworfQorCitzdGF0aWMgdm9pZCBuZWFyX2ZpZWxkX2luaXQoQW1i aXNvbmljQ29udGV4dCAqcywgaW50IG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgc3BlZWQsIGRvdWJsZSByYXRlLCBkb3VibGUgZ2FpbikKK3sKKyAgICBmb3IgKGludCBj aCA9IDEgLSBvdXQ7IGNoIDwgcy0+bWF4X2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIGludCBu LCBtOworCisgICAgICAgIGFjbl90b19sZXZlbF9vcmRlcihjaCwgJm4sICZtKTsKKworICAgICAg ICBpZiAoIXMtPm5mX2luaXRbbiAtIDFdKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg cy0+bmZfaW5pdFtuIC0gMV0oJnMtPm5mW291dF1bY2hdLCAxLiwgc3BlZWQsIHJhdGUsIGdhaW4p OworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2FsY19sZXZlbF90YWIoQW1iaXNvbmljQ29udGV4 dCAqcywgaW50IGxheW91dCkKK3sKKyAgICBkb3VibGUgbWF4X2Rpc3RhbmNlID0gMC47CisKKyAg ICBmb3IgKGludCBzcGtyID0gMDsgc3BrciA8IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVh a2Vyczsgc3BrcisrKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSBzcGtyX2Rpc3RhbmNlID0gYW1i aXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFrZXJzX2Rpc3RhbmNlW3Nwa3JdOworCisgICAgICAg IGlmIChzcGtyX2Rpc3RhbmNlID4gbWF4X2Rpc3RhbmNlKQorICAgICAgICAgICAgbWF4X2Rpc3Rh bmNlID0gc3Brcl9kaXN0YW5jZTsKKyAgICB9CisKKyAgICBmb3IgKGludCBzcGtyID0gMDsgc3Br ciA8IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2Vyczsgc3BrcisrKSB7CisgICAgICAg IGNvbnN0IGRvdWJsZSBzY2FsZSA9IHMtPmxldmVsID8gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRd LnNwZWFrZXJzX2Rpc3RhbmNlW3Nwa3JdIC8gbWF4X2Rpc3RhbmNlIDogMS47CisKKyAgICAgICAg cy0+bGV2ZWxfdGFiW3Nwa3JdID0gc2NhbGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjYWxj X3BnYWluc190YWIoQW1iaXNvbmljQ29udGV4dCAqcywgaW50IHR5cGUpCit7CisgICAgY29uc3Qg aW50IG9yZGVyID0gcy0+b3JkZXI7CisKKyAgICBpZiAoIXR5cGUpIHsKKyAgICAgICAgZm9yIChp bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG9yZGVyICsgMTsgbGV2ZWwrKykKKyAgICAgICAgICAgIHMt PnBnYWluc1swXVtsZXZlbF0gPSBzLT5wZ2FpbnNbMV1bbGV2ZWxdID0gMS4wOworICAgIH0gZWxz ZSBpZiAodHlwZSA9PSAxIHx8IHR5cGUgPT0gMikgeworICAgICAgICBjb25zdCBpbnQgY29tcG9u ZW50cyA9IHR5cGUgPT0gMSA/IDIgKiBvcmRlciArIDEgOiBTUVIob3JkZXIgKyAxKTsKKyAgICAg ICAgY29uc3QgaW50IHNwZWFrZXJzID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFrZXJz OworICAgICAgICBkb3VibGUgRV9nYWluID0gMDsKKyAgICAgICAgZG91YmxlIGcsIGcyID0gMC47 CisKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG9yZGVyICsgMTsgbGV2ZWwr KykgeworICAgICAgICAgICAgY29uc3QgZG91YmxlIGYgPSB0eXBlID09IDEgPyAxICsgKGxldmVs ID4gMCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKiBTUVIo bGV2ZWwpICsgMTsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBlID0gdHlwZSA9PSAxID8gZ2Fp bnNfMmRbb3JkZXJdW2xldmVsXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2FpbnNfM2Rbb3JkZXJdW2xldmVsXTsKKyAgICAgICAgICAgIEVfZ2FpbiArPSBTUVIo ZSkgKiBmOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHMtPnBndHlwZSA9PSBQVF9FTkVSR1kp IHsKKyAgICAgICAgICAgIGcyID0gc3BlYWtlcnMgLyBFX2dhaW47CisgICAgICAgIH0gZWxzZSBp ZiAocy0+cGd0eXBlID09IFBUX1JNUykgeworICAgICAgICAgICAgZzIgPSBjb21wb25lbnRzIC8g RV9nYWluOworICAgICAgICB9IGVsc2UgaWYgKHMtPnBndHlwZSA9PSBQVF9BTVApIHsKKyAgICAg ICAgICAgIGcyID0gMS47CisgICAgICAgIH0KKworICAgICAgICBnID0gc3FydChnMik7CisKKyAg ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG9yZGVyICsgMTsgbGV2ZWwrKykgewor ICAgICAgICAgICAgY29uc3QgZG91YmxlIGUgPSB0eXBlID09IDEgPyBnYWluc18yZFtvcmRlcl1b bGV2ZWxdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWluc18z ZFtvcmRlcl1bbGV2ZWxdOworICAgICAgICAgICAgcy0+cGdhaW5zWzBdW2xldmVsXSA9IDEuMDsK KyAgICAgICAgICAgIHMtPnBnYWluc1sxXVtsZXZlbF0gPSBnICogZTsKKyAgICAgICAgfQorICAg IH0KK30KKworc3RhdGljIHZvaWQgY2FsY19nYWluc190YWIoQVZGaWx0ZXJDb250ZXh0ICpjdHgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBBbWJpc29uaWNDb250ZXh0ICpzLCBkb3VibGUg eG92ZXJfcmF0aW8pCit7CisgICAgY29uc3QgaW50IGlucHV0cyA9IGFtYmlzb25pY190YWJbcy0+ bGF5b3V0XS5pbnB1dHM7CisgICAgY29uc3QgZG91YmxlIHhvdmVyX2dhaW4gPSBkYjJhKHhvdmVy X3JhdGlvKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMCwgY2ggPSAwOyBsZXZlbCA8IHMtPm9y ZGVyICsgMTsgbGV2ZWwrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEgKyBsZXZl bCAqIDI7IGkrKywgY2grKykgeworICAgICAgICAgICAgY29uc3QgZG91YmxlIGxmX2dhaW4gPSBz LT5wZ2FpbnNbMF1bbGV2ZWxdOworICAgICAgICAgICAgY29uc3QgZG91YmxlIGhmX2dhaW4gPSBz LT5wZ2FpbnNbMV1bbGV2ZWxdOworCisgICAgICAgICAgICBzLT5nYWluc190YWJbMF1bY2hdID0g bGZfZ2FpbiAvIHhvdmVyX2dhaW47CisgICAgICAgICAgICBzLT5nYWluc190YWJbMV1bY2hdID0g aGZfZ2FpbiAqIHhvdmVyX2dhaW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdl9sb2coY3R4 LCBBVl9MT0dfREVCVUcsICJnYWlucyB0YWI6XG4iKTsKKyAgICBmb3IgKGludCBjaCA9IDA7IGNo IDwgaW5wdXRzOyBjaCsrKQorICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcdCVn Iiwgcy0+Z2FpbnNfdGFiWzBdW2NoXSk7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAi XG4iKTsKKyAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgaW5wdXRzOyBjaCsrKQorICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcdCVnIiwgcy0+Z2FpbnNfdGFiWzFdW2NoXSk7Cisg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgeG92 ZXJfaW5pdF9pbnB1dChYb3ZlciAqeG92ZXIsIGRvdWJsZSBmcmVxLCBkb3VibGUgcmF0ZSwgaW50 IGhmKQoreworICAgIGRvdWJsZSBrID0gdGFuKE1fUEkgKiBmcmVxIC8gcmF0ZSk7CisgICAgZG91 YmxlIGsyID0gayAqIGs7CisgICAgZG91YmxlIGQgPSBrMiArIDIuICogayArIDEuOworCisgICAg aWYgKGhmKSB7CisgICAgICAgIHhvdmVyLT5iWzBdID0gLTEuIC8gZDsKKyAgICAgICAgeG92ZXIt PmJbMV0gPSAgMi4gLyBkOworICAgICAgICB4b3Zlci0+YlsyXSA9IC0xLiAvIGQ7CisgICAgfSBl bHNlIHsKKyAgICAgICAgeG92ZXItPmJbMF0gPSBrMiAvIGQ7CisgICAgICAgIHhvdmVyLT5iWzFd ID0gMi4gKiBrMiAvIGQ7CisgICAgICAgIHhvdmVyLT5iWzJdID0gazIgLyBkOworICAgIH0KKwor ICAgIHhvdmVyLT5hWzBdID0gMS47CisgICAgeG92ZXItPmFbMV0gPSAtMiAqIChrMiAtIDEuKSAv IGQ7CisgICAgeG92ZXItPmFbMl0gPSAtKGsyIC0gMiAqIGsgKyAxLikgLyBkOworfQorCitzdGF0 aWMgdm9pZCB4b3Zlcl9pbml0KEFtYmlzb25pY0NvbnRleHQgKnMsIGRvdWJsZSBmcmVxLCBkb3Vi bGUgcmF0ZSwgaW50IGNoYW5uZWxzKQoreworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBjaGFu bmVsczsgY2grKykgeworICAgICAgICB4b3Zlcl9pbml0X2lucHV0KCZzLT54b3ZlclswXVtjaF0s IGZyZXEsIHJhdGUsIDApOworICAgICAgICB4b3Zlcl9pbml0X2lucHV0KCZzLT54b3ZlclsxXVtj aF0sIGZyZXEsIHJhdGUsIDEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2FsY19mYWN0b3Io ZG91YmxlICpmYWN0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0cywKKyAg ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhLCBkb3VibGUgZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIGludCBtKQoreworICAgIGNvbnN0IGRvdWJsZSBjb3NfYSA9IGNvcyhhKTsKKyAg ICBjb25zdCBkb3VibGUgc2luX2EgPSBzaW4oYSk7CisgICAgY29uc3QgZG91YmxlIGNvc19lID0g Y29zKGUpOworICAgIGNvbnN0IGRvdWJsZSBzaW5fZSA9IHNpbihlKTsKKyAgICBjb25zdCBkb3Vi bGUgc3FydDMgPSBzcXJ0KDMuKTsKKworICAgIGZhY3RvcnNbQV9XXSA9IDEuOworCisgICAgaWYg KGlucHV0cyA8PSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBmYWN0b3JzW0FfWV0gPSBzaW5f YSAqIGNvc19lOworICAgIGZhY3RvcnNbQV9aXSA9IHNpbl9lICogbTsKKyAgICBmYWN0b3JzW0Ff WF0gPSBjb3NfYSAqIGNvc19lOworCisgICAgaWYgKGlucHV0cyA8PSA0KQorICAgICAgICByZXR1 cm47CisKKyAgICBmYWN0b3JzW0FfVl0gPSBzcXJ0MyAqIHNpbl9hICogU1FSKGNvc19lKSAqIGNv c19hOworICAgIGZhY3RvcnNbQV9UXSA9IDAuMjUgKiBzcXJ0MyAqIChjb3MoMi4gKiBlIC0gYSkg LSBjb3MoMi4gKiBlICsgYSkpOworICAgIGZhY3RvcnNbQV9SXSA9ICgzLi8yLikgKiBTUVIoc2lu X2UpIC0gMC41OworICAgIGZhY3RvcnNbQV9TXSA9IDAuMjUgKiBzcXJ0MyAqIChzaW4oMi4gKiBl IC0gYSkgKyBzaW4oMi4gKiBlICsgYSkpOworICAgIGZhY3RvcnNbQV9VXSA9IDAuNSAqIHNxcnQz ICogU1FSKGNvc19lKSpjb3MoMi4gKiBhKTsKKworICAgIGlmIChpbnB1dHMgPD0gOSkKKyAgICAg ICAgcmV0dXJuOworCisgICAgZmFjdG9yc1tBX1FdID0gMC4yNSAqIHNxcnQoMTAuKSAqICgtNC4g KiBTUVIoc2luX2EpICsgMy4pICogc2luX2EgKiBTUVIoY29zX2UpICogY29zX2U7CisgICAgZmFj dG9yc1tBX09dID0gc3FydCgxNS4pICogc2luX2UgKiBzaW5fYSAqIFNRUihjb3NfZSkgKiBjb3Nf YTsKKyAgICBmYWN0b3JzW0FfTV0gPSAwLjI1ICogc3FydCg2LikgKiAoNS4gKiBTUVIoc2luX2Up IC0gMS4pICogc2luX2EgKiBjb3NfZTsKKyAgICBmYWN0b3JzW0FfS10gPSAwLjUgKiAoNSpTUVIo c2luX2UpIC0gMykqc2luX2U7CisgICAgZmFjdG9yc1tBX0xdID0gMC4yNSAqIHNxcnQoNi4pICog KDUuICogU1FSKHNpbl9lKSAtIDEuKSAqIGNvc19lICogY29zX2E7CisgICAgZmFjdG9yc1tBX05d ID0gMC41ICogc3FydCgxNS4pICogc2luX2UgKiBTUVIoY29zX2UpICogY29zKDIuICogYSk7Cisg ICAgZmFjdG9yc1tBX1BdID0gMC4yNSAqIHNxcnQoMTAuKSooLTQuICogU1FSKHNpbl9hKSArIDEu KSAqIFNRUihjb3NfZSkgKiBjb3NfZSAqIGNvc19hOworfQorCitzdGF0aWMgdm9pZCBjYWxjX2Zh Y3RvcnMoQVZGaWx0ZXJDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgQW1i aXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBjb25zdCBpbnQgc3BlYWtlcnMgPSBhbWJpc29uaWNf dGFiW3MtPmxheW91dF0uc3BlYWtlcnM7CisgICAgY29uc3QgZG91YmxlICplbGV2YXRpb24gPSBh bWJpc29uaWNfdGFiW3MtPmxheW91dF0uc3BlYWtlcnNfZWxldmF0aW9uOworICAgIGNvbnN0IGRv dWJsZSAqYXppbXV0aCA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2Vyc19hemltdXRo OworICAgIGNvbnN0IGludCBpbnB1dHMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRz OworCisgICAgaWYgKGVsZXZhdGlvbikgeworICAgICAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwg c3BlYWtlcnM7IGNoKyspCisgICAgICAgICAgICBjYWxjX2ZhY3RvcihzLT5kZWNvZGVfbWF0W2No XSwgaW5wdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgKE1fUEkgLyAxODAuKSAqIGF6aW11 dGhbY2hdICogLTEuLAorICAgICAgICAgICAgICAgICAgICAgICAgKE1fUEkgLyAxODAuKSAqIGVs ZXZhdGlvbltjaF0sIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGNoID0gMDsg Y2ggPCBzcGVha2VyczsgY2grKykKKyAgICAgICAgICAgIGNhbGNfZmFjdG9yKHMtPmRlY29kZV9t YXRbY2hdLCBpbnB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAoTV9QSSAvIDE4MC4pICog YXppbXV0aFtjaF0gKiAtMS4sCisgICAgICAgICAgICAgICAgICAgICAgICAwLiwgMCk7CisgICAg fQorCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiZmFjdG9ycyBtYXRyaXg6XG4iKTsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwZWFrZXJzOyBpKyspIHsKKyAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCBpbnB1dHM7IGorKykKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19ERUJVRywgIlx0JWciLCBzLT5kZWNvZGVfbWF0W2ldW2pdKTsKKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX291 dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHgg PSBvdXRsaW5rLT5zcmM7CisgICAgQW1iaXNvbmljQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAg ICBjb25zdCBpbnQgdHlwZSA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS50eXBlOworICAgIGNv bnN0IGludCBpbnB1dHMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzOworICAgIGNv bnN0IGludCBzcGVha2VycyA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2VyczsKKyAg ICBjb25zdCBkb3VibGUgbWF0Y2hpbmcgPSBzLT5tYXRjaGluZzsKKyAgICBkb3VibGUgd19tZWFu ID0gMC47CisKKyAgICBzLT5vcmRlciA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5vcmRlcjsK KyAgICBzLT5tYXhfY2hhbm5lbHMgPSBTUVIocy0+b3JkZXIgKyAxKTsKKworICAgIGlmIChzLT5u ZWFyX2ZpZWxkID09IE5GX0FVVE8pCisgICAgICAgIHMtPm5lYXJfZmllbGQgPSBhbWJpc29uaWNf dGFiW3MtPmxheW91dF0ubmVhcl9maWVsZDsKKyAgICBpZiAocy0+eG92ZXJfZnJlcSA8IDApCisg ICAgICAgIHMtPnhvdmVyX2ZyZXEgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0ueG92ZXI7CisK KyAgICBjYWxjX2ZhY3RvcnMoY3R4LCBzKTsKKworICAgIG1lbXNldChzLT52LCAwLCBzaXplb2Yo cy0+dikpOworICAgIG1lbXNldChzLT53LCAwLCBzaXplb2Yocy0+dykpOworCisgICAgbWVtY3B5 KHMtPnUsIHMtPmRlY29kZV9tYXQsIHNpemVvZihzLT51KSk7CisgICAgc3ZkY21wKGN0eCwgcy0+ dSwgc3BlYWtlcnMsIGlucHV0cywgcy0+dywgcy0+dik7CisKKyAgICBmb3IgKGludCB4ID0gMDsg eCA8IGlucHV0czsgeCsrKSB7CisgICAgICAgIHMtPndbeF0gPSBzLT53W3hdID4gMWUtOSA/IDEu IC8gcy0+d1t4XSA6IDAuZjsKKyAgICAgICAgd19tZWFuICs9IHMtPndbeF07CisgICAgfQorCisg ICAgd19tZWFuIC89IGlucHV0czsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlucHV0czsgeCsr KQorICAgICAgICBzLT53W3hdID0gcy0+d1t4XSAqICgxLiAtIG1hdGNoaW5nKSArIG1hdGNoaW5n ICogd19tZWFuOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbnB1dHM7IHkrKykgeworICAg ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlucHV0czsgeCsrKQorICAgICAgICAgICAgcy0+dlt5 XVt4XSAqPSBzLT53W3hdOworICAgIH0KKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc3BlYWtl cnM7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlucHV0czsgeCsrKSB7Cisg ICAgICAgICAgICBkb3VibGUgc3VtID0gMC47CisKKyAgICAgICAgICAgIGZvciAoaW50IHogPSAw OyB6IDwgaW5wdXRzOyB6KyspCisgICAgICAgICAgICAgICAgc3VtICs9IHMtPnZbeF1bel0gKiBz LT51W3ldW3pdOworICAgICAgICAgICAgcy0+ZGVjb2RlX21hdFt5XVt4XSA9IHN1bTsKKyAgICAg ICAgfQorICAgIH0KKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgImRlY29kZSBtYXRy aXg6XG4iKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNwZWFrZXJzOyB5KyspIHsKKyAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnB1dHM7IHgrKykKKyAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19ERUJVRywgIlx0JWciLCBzLT5kZWNvZGVfbWF0W3ldW3hdKTsKKyAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKKyAgICB9CisKKyAgICBjYWxjX25vcm1f bWF0cml4KHMpOworICAgIGNhbGNfc24zZF9zY2FsaW5nKHMpOworICAgIGNhbGNfbjNkX3NjYWxp bmcocyk7CisgICAgY2FsY19mdW1hX3NjYWxpbmcocyk7CisKKyAgICBjYWxjX2Fjbl9zZXF1ZW5j ZShzKTsKKyAgICBjYWxjX2Z1bWFfc2VxdWVuY2Uocyk7CisgICAgY2FsY19zaWRfc2VxdWVuY2Uo cyk7CisKKyAgICBjYWxjX2NoX21hcChzKTsKKworICAgIG5lYXJfZmllbGRfaW5pdChzLCAwLCBz cGVlZF9vZl9zb3VuZChzLT50ZW1wKSwgb3V0bGluay0+c2FtcGxlX3JhdGUsIDEuKTsKKyAgICBu ZWFyX2ZpZWxkX2luaXQocywgMSwgc3BlZWRfb2Zfc291bmQocy0+dGVtcCksIG91dGxpbmstPnNh bXBsZV9yYXRlLCAxLik7CisKKyAgICBjYWxjX3JvdGF0aW9uX21hdChjdHgsIHMsIHMtPnlhdywg cy0+cGl0Y2gsIHMtPnJvbGwpOworICAgIGNhbGNfbWlycm9yX21hdChzKTsKKworICAgIGNhbGNf ZG9taW5hbmNlX21hdChzKTsKKyAgICBjYWxjX2RpcmVjdGlvbl9tYXQocyk7CisgICAgY2FsY196 b29tX21hdChzKTsKKyAgICBjYWxjX2ZvY3VzX21hdChzKTsKKyAgICBjYWxjX3B1c2hfbWF0KHMp OworICAgIGNhbGNfcHJlc3NfbWF0KHMpOworCisgICAgY2FsY19sZXZlbF90YWIocywgcy0+bGF5 b3V0KTsKKyAgICBjYWxjX3BnYWluc190YWIocywgdHlwZSk7CisgICAgY2FsY19nYWluc190YWIo Y3R4LCBzLCBzLT54b3Zlcl9yYXRpbyk7CisgICAgeG92ZXJfaW5pdChzLCBzLT54b3Zlcl9mcmVx LCBvdXRsaW5rLT5zYW1wbGVfcmF0ZSwgcy0+bWF4X2NoYW5uZWxzKTsKKworICAgIHN3aXRjaCAo cy0+cHJlY2lzaW9uKSB7CisgICAgY2FzZSBQX0FVVE86CisgICAgICAgIHMtPm5mX3Byb2Nlc3Nb MF0gPSBvdXRsaW5rLT5mb3JtYXQgPT0gQVZfU0FNUExFX0ZNVF9GTFRQID8gbmZpZWxkMV9wcm9j ZXNzZiA6IG5maWVsZDFfcHJvY2Vzc2Q7CisgICAgICAgIHMtPnByb2Nlc3MgPSBvdXRsaW5rLT5m b3JtYXQgPT0gQVZfU0FNUExFX0ZNVF9GTFRQID8gcHJvY2Vzc19mbG9hdCA6IHByb2Nlc3NfZG91 YmxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBfU0lOR0xFOgorICAgICAgICBzLT5uZl9w cm9jZXNzWzBdID0gbmZpZWxkMV9wcm9jZXNzZjsKKyAgICAgICAgcy0+cHJvY2VzcyA9IHByb2Nl c3NfZmxvYXQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUF9ET1VCTEU6CisgICAgICAgIHMt Pm5mX3Byb2Nlc3NbMF0gPSBuZmllbGQxX3Byb2Nlc3NkOworICAgICAgICBzLT5wcm9jZXNzID0g cHJvY2Vzc19kb3VibGU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGF2X2Fzc2VydDAo MCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX2ZyYW1l KEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICppbikKK3sKKyAgICBBVkZpbHRlckNvbnRl eHQgKmN0eCA9IGlubGluay0+ZHN0OworICAgIEFtYmlzb25pY0NvbnRleHQgKnMgPSBjdHgtPnBy aXY7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOworICAgIEFW RnJhbWUgKm91dDsKKworICAgIGlmICghcy0+cmZyYW1lIHx8IHMtPnJmcmFtZS0+bmJfc2FtcGxl cyA8IGluLT5uYl9zYW1wbGVzKSB7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPnNmcmFtZSk7 CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPnJmcmFtZSk7CisgICAgICAgIGF2X2ZyYW1lX2Zy ZWUoJnMtPmZyYW1lMik7CisgICAgICAgIHMtPnNmcmFtZSA9IGZmX2dldF9hdWRpb19idWZmZXIo aW5saW5rLCBpbi0+bmJfc2FtcGxlcyk7CisgICAgICAgIHMtPnJmcmFtZSA9IGZmX2dldF9hdWRp b19idWZmZXIoaW5saW5rLCBpbi0+bmJfc2FtcGxlcyk7CisgICAgICAgIHMtPmZyYW1lMiA9IGZm X2dldF9hdWRpb19idWZmZXIoaW5saW5rLCBpbi0+bmJfc2FtcGxlcyk7CisgICAgICAgIGlmICgh cy0+c2ZyYW1lIHx8ICFzLT5yZnJhbWUgfHwgIXMtPmZyYW1lMikgeworICAgICAgICAgICAgYXZf ZnJhbWVfZnJlZSgmcy0+c2ZyYW1lKTsKKyAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPnJm cmFtZSk7CisgICAgICAgICAgICBhdl9mcmFtZV9mcmVlKCZzLT5mcmFtZTIpOworICAgICAgICAg ICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG91dCA9IGZmX2dldF9hdWRpb19idWZmZXIob3V0 bGluaywgaW4tPm5iX3NhbXBsZXMpOworICAgIGlmICghb3V0KSB7CisgICAgICAgIGF2X2ZyYW1l X2ZyZWUoJmluKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisgICAg YXZfZnJhbWVfY29weV9wcm9wcyhvdXQsIGluKTsKKworICAgIHMtPnByb2Nlc3MoY3R4LCBpbiwg b3V0KTsKKworICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICByZXR1cm4gZmZfZmlsdGVyX2Zy YW1lKG91dGxpbmssIG91dCk7CisKK30KKworc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0 ZXJDb250ZXh0ICpjdHgpCit7CisgICAgQW1iaXNvbmljQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsK KworICAgIHMtPm5mX2luaXRbMF0gPSBuZmllbGQxX2luaXQ7CisKKyAgICBzLT5mZHNwID0gYXZw cml2X2Zsb2F0X2RzcF9hbGxvYygwKTsKKyAgICBpZiAoIXMtPmZkc3ApCisgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2NvbGQg dm9pZCB1bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgQW1iaXNvbmljQ29udGV4 dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIGF2X2ZyZWVwKCZzLT5mZHNwKTsKKyAgICBhdl9mcmFt ZV9mcmVlKCZzLT5zZnJhbWUpOworICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPnJmcmFtZSk7CisgICAg YXZfZnJhbWVfZnJlZSgmcy0+ZnJhbWUyKTsKK30KKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFk IGlucHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICAgID0gImRlZmF1bHQi LAorICAgICAgICAudHlwZSAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCisgICAgICAg IC5maWx0ZXJfZnJhbWUgICA9IGZpbHRlcl9mcmFtZSwKKyAgICB9LAorfTsKK3N0YXRpYyBjb25z dCBBVkZpbHRlclBhZCBvdXRwdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAg ID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX0FVRElP LAorICAgICAgICAuY29uZmlnX3Byb3BzID0gY29uZmlnX291dHB1dCwKKyAgICB9LAorfTsKKwor c3RhdGljIGludCBwcm9jZXNzX2NvbW1hbmQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IGNo YXIgKmNtZCwgY29uc3QgY2hhciAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKnJlcywgaW50IHJlc19sZW4sIGludCBmbGFncykKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0 ICpzID0gY3R4LT5wcml2OworICAgIGNvbnN0IGRvdWJsZSB5YXcgPSBzLT55YXcsIHBpdGNoID0g cy0+cGl0Y2gsIHJvbGwgPSBzLT5yb2xsOworICAgIGRvdWJsZSBnYWluWzJdW05CX0RUWVBFU107 CisgICAgaW50IGludmVydFtOQl9EVFlQRVNdOworICAgIGRvdWJsZSBkb21pbmFuY2VbNF07Cisg ICAgZG91YmxlIGRpcmVjdGlvbls0XTsKKyAgICBkb3VibGUgem9vbVs0XTsKKyAgICBkb3VibGUg Zm9jdXNbNF07CisgICAgZG91YmxlIHB1c2hbNF07CisgICAgZG91YmxlIHByZXNzWzRdOworICAg IGludCByZXQ7CisKKyAgICBtZW1jcHkoaW52ZXJ0LCBzLT5pbnZlcnQsIHNpemVvZihpbnZlcnQp KTsKKyAgICBtZW1jcHkoZ2Fpbiwgcy0+Z2Fpbiwgc2l6ZW9mKGdhaW4pKTsKKyAgICBtZW1jcHko ZG9taW5hbmNlLCBzLT5kb21pbmFuY2UsIHNpemVvZihkb21pbmFuY2UpKTsKKyAgICBtZW1jcHko ZGlyZWN0aW9uLCBzLT5kaXJlY3Rpb24sIHNpemVvZihkaXJlY3Rpb24pKTsKKyAgICBtZW1jcHko em9vbSwgcy0+em9vbSwgc2l6ZW9mKHpvb20pKTsKKyAgICBtZW1jcHkoZm9jdXMsIHMtPmZvY3Vz LCBzaXplb2YoZm9jdXMpKTsKKyAgICBtZW1jcHkocHVzaCwgcy0+cHVzaCwgc2l6ZW9mKHB1c2gp KTsKKyAgICBtZW1jcHkocHJlc3MsIHMtPnByZXNzLCBzaXplb2YocHJlc3MpKTsKKworICAgIHJl dCA9IGZmX2ZpbHRlcl9wcm9jZXNzX2NvbW1hbmQoY3R4LCBjbWQsIGFyZ3MsIHJlcywgcmVzX2xl biwgZmxhZ3MpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg aWYgKHlhdyAhPSBzLT55YXcgfHwgcGl0Y2ggIT0gcy0+cGl0Y2ggfHwgcm9sbCAhPSBzLT5yb2xs KQorICAgICAgICBjYWxjX3JvdGF0aW9uX21hdChjdHgsIHMsIHMtPnlhdywgcy0+cGl0Y2gsIHMt PnJvbGwpOworCisgICAgaWYgKG1lbWNtcChnYWluLCBzLT5nYWluLCBzaXplb2YoZ2FpbikpIHx8 CisgICAgICAgIG1lbWNtcChpbnZlcnQsIHMtPmludmVydCwgc2l6ZW9mKGludmVydCkpKQorICAg ICAgICBjYWxjX21pcnJvcl9tYXQocyk7CisKKyAgICBpZiAobWVtY21wKGRvbWluYW5jZSwgcy0+ ZG9taW5hbmNlLCBzaXplb2YoZG9taW5hbmNlKSkpCisgICAgICAgIGNhbGNfZG9taW5hbmNlX21h dChzKTsKKworICAgIGlmIChtZW1jbXAoZGlyZWN0aW9uLCBzLT5kaXJlY3Rpb24sIHNpemVvZihk aXJlY3Rpb24pKSkKKyAgICAgICAgY2FsY19kaXJlY3Rpb25fbWF0KHMpOworCisgICAgaWYgKG1l bWNtcCh6b29tLCBzLT56b29tLCBzaXplb2Yoem9vbSkpKQorICAgICAgICBjYWxjX3pvb21fbWF0 KHMpOworCisgICAgaWYgKG1lbWNtcChmb2N1cywgcy0+Zm9jdXMsIHNpemVvZihmb2N1cykpKQor ICAgICAgICBjYWxjX2ZvY3VzX21hdChzKTsKKworICAgIGlmIChtZW1jbXAocHVzaCwgcy0+cHVz aCwgc2l6ZW9mKHB1c2gpKSkKKyAgICAgICAgY2FsY19wdXNoX21hdChzKTsKKworICAgIGlmICht ZW1jbXAocHJlc3MsIHMtPnByZXNzLCBzaXplb2YocHJlc3MpKSkKKyAgICAgICAgY2FsY19wcmVz c19tYXQocyk7CisKKyAgICByZXR1cm4gMDsKK30KKworQVZGSUxURVJfREVGSU5FX0NMQVNTKGFt Ymlzb25pYyk7CisKK2NvbnN0IEFWRmlsdGVyIGZmX2FmX2FtYmlzb25pYyA9IHsKKyAgICAubmFt ZSAgICAgICAgICAgID0gImFtYmlzb25pYyIsCisgICAgLmRlc2NyaXB0aW9uICAgICA9IE5VTExf SUZfQ09ORklHX1NNQUxMKCJBbWJpc29uaWMgZGVjb2RlciIpLAorICAgIC5wcml2X3NpemUgICAg ICAgPSBzaXplb2YoQW1iaXNvbmljQ29udGV4dCksCisgICAgLnByaXZfY2xhc3MgICAgICA9ICZh bWJpc29uaWNfY2xhc3MsCisgICAgLmluaXQgICAgICAgICAgICA9IGluaXQsCisgICAgLnVuaW5p dCAgICAgICAgICA9IHVuaW5pdCwKKyAgICBGSUxURVJfUVVFUllfRlVOQyhxdWVyeV9mb3JtYXRz KSwKKyAgICBGSUxURVJfSU5QVVRTKGlucHV0cyksCisgICAgRklMVEVSX09VVFBVVFMob3V0cHV0 cyksCisgICAgLnByb2Nlc3NfY29tbWFuZCA9IHByb2Nlc3NfY29tbWFuZCwKK307CmRpZmYgLS1n aXQgYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMK aW5kZXggZTA1OThlOTk4Ni4uMWUwMzkxZjdhNCAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvYWxs ZmlsdGVycy5jCisrKyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwpAQCAtNTYsNiArNTYsNyBA QCBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfYWZfYWxhdGVuY3k7CiBleHRlcm4gY29uc3QgQVZG aWx0ZXIgZmZfYWZfYWxpbWl0ZXI7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfYWZfYWxscGFz czsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hZl9hbG9vcDsKK2V4dGVybiBjb25zdCBBVkZp bHRlciBmZl9hZl9hbWJpc29uaWM7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfYWZfYW1lcmdl OwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX2FmX2FtZXRhZGF0YTsKIGV4dGVybiBjb25zdCBB VkZpbHRlciBmZl9hZl9hbWl4OwotLSAKMi4zNy4yCgo= --000000000000913b0105ec423aab Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --000000000000913b0105ec423aab--