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 79A7049CF4 for ; Fri, 8 Mar 2024 13:21:20 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9F90B68CF3E; Fri, 8 Mar 2024 15:21:19 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E2B1868BA19 for ; Fri, 8 Mar 2024 15:21:13 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1709904073; bh=MHGOEF9qGOjgiHwV6HsxQVnsLPml0q0vLMEAz1yBR8A=; h=From:To:Cc:Subject:Date:From; b=l1naVnkZzdFtLWjiAI1VYbsMfjzlUASFao8rx9YacLJ0PYcjhWbcxZE3mwBLn8yX8 osqQYAJps8Ei0br0VHr7Wdp9IKK38SNYrFTf+MHUS3EiFnyzGlOCMwqO4NEN6rBruK UwE66EkWDSsICsO/GEjQrFtlOdInvi4ITEu4m1BQ= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A8A0D4197E; Fri, 8 Mar 2024 14:21:13 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 8 Mar 2024 14:21:04 +0100 Message-ID: <20240308132108.28337-1-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/4] avcodec/aom_film_grain: add AOM film grain synthesis X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CgpJbXBsZW1lbnRhdGlvbiBjb3BpZWQg d2hvbGVzYWxlIGZyb20gZGF2MWQsIHNhbnMgU0lNRCwgdW5kZXIgcGVybWlzc2l2ZQpsaWNlbnNl LiBUaGlzIGltcGxlbWVudGF0aW9uIHdhcyBleHRlbnNpdmVseSB2ZXJpZmllZCB0byBiZSBiaXQt ZXhhY3QsCnNvIGl0IHNlcnZlcyBhcyBhIG11Y2ggYmV0dGVyIHN0YXJ0aW5nIHBvaW50IHRoYW4g dHJ5aW5nIHRvIHJlLWVuZ2luZWVyCnRoaXMgZnJvbSBzY3JhdGNoIGZvciBubyByZWFzb24uIChJ IGFsc28gYXV0aG9yZWQgdGhlIG9yaWdpbmFsCmltcGxlbWVudGF0aW9uIGluIGRhdjFkLCBzbyBh bnkgImNsZWFuIHJvb20iIGltcGxlbWVudGF0aW9uIHdvdWxkIGVuZCB1cApsb29raW5nIG11Y2gg dGhlIHNhbWUsIGFueXdheSkKClRoZSBub3RhYmxlIGNoYW5nZXMgSSBoYWQgdG8gbWFrZSB3aGls ZSBhZGFwdGluZyB0aGlzIGZyb20gdGhlIGRhdjFkCmNvZGUtYmFzZSB0byB0aGUgRkZtcGVnIGNv ZGViYXNlIGluY2x1ZGU6CgotIHJlb3JkZXJpbmcgdmFyaWFibGUgZGVjbGFyYXRpb25zIHRvIGF2 b2lkIHRyaWdnZXJpbmcgd2FybmluZ3MKLSByZXBsYWNpbmcgc2V2ZXJhbCBpbmxpbmUgaGVscGVy cyBieSBhdnV0aWwgZXF1aXZhbGVudHMKLSBjaGFuZ2luZyBjb2RlIHRoYXQgYWNjZXNzZXMgZnJh bWUgbWV0YWRhdGEKLSByZXBsYWNpbmcgcmF3IHBsYW5lIGNvcHlpbmcgbG9naWMgYnkgYXZfaW1h Z2VfY29weV9wbGFuZQoKQXBhcnQgZnJvbSB0aGlzLCB0aGUgaW1wbGVtZW50YXRpb24gaXMgYmFz aWNhbGx5IHVubW9kaWZpZWQuCi0tLQogbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5jICAgICAg ICAgIHwgMzEwICsrKysrKysrKysrKysrCiBsaWJhdmNvZGVjL2FvbV9maWxtX2dyYWluLmggICAg ICAgICAgfCAgMzggKysKIGxpYmF2Y29kZWMvYW9tX2ZpbG1fZ3JhaW5fdGVtcGxhdGUuYyB8IDU3 NyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgOTI1IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2FvbV9maWxtX2dyYWluLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2FvbV9maWxtX2dyYWluLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdmNvZGVjL2FvbV9maWxtX2dyYWluX3RlbXBsYXRlLmMKCmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL2FvbV9maWxtX2dyYWluLmMgYi9saWJhdmNvZGVjL2FvbV9maWxtX2dy YWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZmY2Q3MWI1ODRi Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5jCkBAIC0wLDAg KzEsMzEwIEBACisvKgorICogQU9NIGZpbG0gZ3JhaW4gc3ludGhlc2lzCisgKiBDb3B5cmlnaHQg KGMpIDIwMjMgTmlrbGFzIEhhYXMgPGZmbXBlZ0BoYWFzbi54eXo+CisgKgorICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg KgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIEFPTSBmaWxtIGdyYWlu IHN5bnRoZXNpcy4KKyAqIEBhdXRob3IgTmlrbGFzIEhhYXMgPGZmbXBlZ0BoYWFzbi54eXo+Cisg Ki8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgorI2luY2x1ZGUgImxpYmF2dXRp bC9pbWd1dGlscy5oIgorCisjaW5jbHVkZSAiYW9tX2ZpbG1fZ3JhaW4uaCIKKworLy8gQ29tbW9u L3NoYXJlZCBoZWxwZXJzIChub3QgZGVwZW5kZW50IG9uIEJJVF9ERVBUSCkKK3N0YXRpYyBpbmxp bmUgaW50IGdldF9yYW5kb21fbnVtYmVyKGNvbnN0IGludCBiaXRzLCB1bnNpZ25lZCAqY29uc3Qg c3RhdGUpIHsKKyAgICBjb25zdCBpbnQgciA9ICpzdGF0ZTsKKyAgICB1bnNpZ25lZCBiaXQgPSAo KHIgPj4gMCkgXiAociA+PiAxKSBeIChyID4+IDMpIF4gKHIgPj4gMTIpKSAmIDE7CisgICAgKnN0 YXRlID0gKHIgPj4gMSkgfCAoYml0IDw8IDE1KTsKKworICAgIHJldHVybiAoKnN0YXRlID4+ICgx NiAtIGJpdHMpKSAmICgoMSA8PCBiaXRzKSAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBy b3VuZDIoY29uc3QgaW50IHgsIGNvbnN0IHVpbnQ2NF90IHNoaWZ0KSB7CisgICAgcmV0dXJuICh4 ICsgKCgxIDw8IHNoaWZ0KSA+PiAxKSkgPj4gc2hpZnQ7Cit9CisKK2VudW0geworICAgIEdSQUlO X1dJRFRIICAgICAgPSA4MiwKKyAgICBHUkFJTl9IRUlHSFQgICAgID0gNzMsCisgICAgU1VCX0dS QUlOX1dJRFRIICA9IDQ0LAorICAgIFNVQl9HUkFJTl9IRUlHSFQgPSAzOCwKKyAgICBGR19CTE9D S19TSVpFICAgID0gMzIsCit9OworCitzdGF0aWMgY29uc3QgaW50MTZfdCBnYXVzc2lhbl9zZXF1 ZW5jZVsyMDQ4XTsKKworI2RlZmluZSBCSVRfREVQVEggMTYKKyNpbmNsdWRlICJhb21fZmlsbV9n cmFpbl90ZW1wbGF0ZS5jIgorI3VuZGVmIEJJVF9ERVBUSAorCisjZGVmaW5lIEJJVF9ERVBUSCA4 CisjaW5jbHVkZSAiYW9tX2ZpbG1fZ3JhaW5fdGVtcGxhdGUuYyIKKyN1bmRlZiBCSVRfREVQVEgK KworCitpbnQgZmZfYW9tX2FwcGx5X2ZpbG1fZ3JhaW4oQVZGcmFtZSAqb3V0LCBjb25zdCBBVkZy YW1lICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZpbG1HcmFpblBh cmFtcyAqcGFyYW1zKQoreworICAgIGNvbnN0IEFWRmlsbUdyYWluQU9NUGFyYW1zICpjb25zdCBk YXRhID0gJnBhcmFtcy0+Y29kZWMuYW9tOworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAq ZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQob3V0LT5mb3JtYXQpOworICAgIGNvbnN0IGludCBz dWJ4ID0gZGVzYy0+bG9nMl9jaHJvbWFfdywgc3VieSA9IGRlc2MtPmxvZzJfY2hyb21hX2g7Cisg ICAgY29uc3QgaW50IHB4c3RlcCA9IGRlc2MtPmNvbXBbMF0uc3RlcDsKKworICAgIGF2X2Fzc2Vy dDAob3V0LT5mb3JtYXQgPT0gaW4tPmZvcm1hdCk7CisgICAgYXZfYXNzZXJ0MChwYXJhbXMtPnR5 cGUgPT0gQVZfRklMTV9HUkFJTl9QQVJBTVNfQVYxKTsKKworICAgIC8vIENvcHkgb3ZlciB0aGUg bm9uLW1vZGlmaWVkIHBsYW5lcworICAgIGlmICghcGFyYW1zLT5jb2RlYy5hb20ubnVtX3lfcG9p bnRzKSB7CisgICAgICAgIGF2X2ltYWdlX2NvcHlfcGxhbmUob3V0LT5kYXRhWzBdLCBvdXQtPmxp bmVzaXplWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5kYXRhWzBdLCBpbi0+ bGluZXNpemVbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LT53aWR0aCAqIHB4 c3RlcCwgb3V0LT5oZWlnaHQpOworICAgIH0KKyAgICBmb3IgKGludCB1diA9IDA7IHV2IDwgMjsg dXYrKykgeworICAgICAgICBpZiAoIWRhdGEtPm51bV91dl9wb2ludHNbdXZdKSB7CisgICAgICAg ICAgICBhdl9pbWFnZV9jb3B5X3BsYW5lKG91dC0+ZGF0YVsxK3V2XSwgb3V0LT5saW5lc2l6ZVsx K3V2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4tPmRhdGFbMSt1dl0sIGlu LT5saW5lc2l6ZVsxK3V2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfQ0VJ TF9SU0hJRlQob3V0LT53aWR0aCwgc3VieCkgKiBweHN0ZXAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFWX0NFSUxfUlNISUZUKG91dC0+aGVpZ2h0LCBzdWJ5KSk7CisgICAgICAg IH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGluLT5mb3JtYXQpIHsKKyAgICBjYXNlIEFWX1BJWF9G TVRfR1JBWTg6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6CisgICAgY2FzZSBBVl9QSVhf Rk1UX1lVVjQyMlA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6CisgICAgY2FzZSBBVl9Q SVhfRk1UX1lVVko0MjBQOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZKNDIyUDoKKyAgICBjYXNl IEFWX1BJWF9GTVRfWVVWSjQ0NFA6CisgICAgICAgIHJldHVybiBhcHBseV9maWxtX2dyYWluXzgo b3V0LCBpbiwgcGFyYW1zKTsKKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTk6CisgICAgY2FzZSBB Vl9QSVhfRk1UX1lVVjQyMFA5OgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQOToKKyAgICBj YXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDk6CisgICAgICAgIHJldHVybiBhcHBseV9maWxtX2dyYWlu XzE2KG91dCwgaW4sIHBhcmFtcywgOSk7CisgICAgY2FzZSBBVl9QSVhfRk1UX0dSQVkxMDoKKyAg ICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEwOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQ MTA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMDoKKyAgICAgICAgcmV0dXJuIGFwcGx5 X2ZpbG1fZ3JhaW5fMTYob3V0LCBpbiwgcGFyYW1zLCAxMCk7CisgICAgY2FzZSBBVl9QSVhfRk1U X0dSQVkxMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEyOgorICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVY0MjJQMTI6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMjoKKyAgICAgICAg cmV0dXJuIGFwcGx5X2ZpbG1fZ3JhaW5fMTYob3V0LCBpbiwgcGFyYW1zLCAxMik7CisgICAgfQor CisgICAgLyogVGhlIEFWMSBzcGVjIG9ubHkgZGVmaW5lcyBmaWxtIGdyYWluIHN5bnRoZXNpcyBm b3IgdGhlc2UgZm9ybWF0cyAqLworICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworfQor CisvLyBUYWtlbiBmcm9tIHRoZSBBVjEgc3BlYy4gUmFuZ2UgaXMgWy0yMDQ4LCAyMDQ3XSwgbWVh biBpcyAwIGFuZCBzdGRkZXYgaXMgNTEyCitzdGF0aWMgY29uc3QgaW50MTZfdCBnYXVzc2lhbl9z ZXF1ZW5jZVsyMDQ4XSA9IHsKKyAgICA1NiwgICAgNTY4LCAgIC0xODAsICAxNzIsICAgMTI0LCAg IC04NCwgICAxNzIsICAgLTY0LCAgIC05MDAsICAyNCwgICA4MjAsCisgICAgMjI0LCAgIDEyNDgs ICA5OTYsICAgMjcyLCAgIC04LCAgICAtOTE2LCAgLTM4OCwgIC03MzIsICAtMTA0LCAgLTE4OCwg ODAwLAorICAgIDExMiwgICAtNjUyLCAgLTMyMCwgIC0zNzYsICAxNDAsICAgLTI1MiwgIDQ5Miwg ICAtMTY4LCAgNDQsICAgIC03ODgsIDU4OCwKKyAgICAtNTg0LCAgNTAwLCAgIC0yMjgsICAxMiwg ICAgNjgwLCAgIDI3MiwgICAtNDc2LCAgOTcyLCAgIC0xMDAsICA2NTIsICAzNjgsCisgICAgNDMy LCAgIC0xOTYsICAtNzIwLCAgLTE5MiwgIDEwMDAsICAtMzMyLCAgNjUyLCAgIC0xMzYsICAtNTUy LCAgLTYwNCwgLTQsCisgICAgMTkyLCAgIC0yMjAsICAtMTM2LCAgMTAwMCwgIC01MiwgICAzNzIs ICAgLTk2LCAgIC02MjQsICAxMjQsICAgLTI0LCAgMzk2LAorICAgIDU0MCwgICAtMTIsICAgLTEw NCwgIDY0MCwgICA0NjQsICAgMjQ0LCAgIC0yMDgsICAtODQsICAgMzY4LCAgIC01MjgsIC03NDAs CisgICAgMjQ4LCAgIC05NjgsICAtODQ4LCAgNjA4LCAgIDM3NiwgICAtNjAsICAgLTI5MiwgIC00 MCwgICAtMTU2LCAgMjUyLCAgLTI5MiwKKyAgICAyNDgsICAgMjI0LCAgIC0yODAsICA0MDAsICAg LTI0NCwgIDI0NCwgICAtNjAsICAgNzYsICAgIC04MCwgICAyMTIsICA1MzIsCisgICAgMzQwLCAg IDEyOCwgICAtMzYsICAgODI0LCAgIC0zNTIsICAtNjAsICAgLTI2NCwgIC05NiwgICAtNjEyLCAg NDE2LCAgLTcwNCwKKyAgICAyMjAsICAgLTIwNCwgIDY0MCwgICAtMTYwLCAgMTIyMCwgIC00MDgs ICA5MDAsICAgMzM2LCAgIDIwLCAgICAtMzM2LCAtOTYsCisgICAgLTc5MiwgIDMwNCwgICA0OCwg ICAgLTI4LCAgIC0xMjMyLCAtMTE3MiwgLTQ0OCwgIDEwNCwgICAtMjkyLCAgLTUyMCwgMjQ0LAor ICAgIDYwLCAgICAtOTQ4LCAgMCwgICAgIC03MDgsICAyNjgsICAgMTA4LCAgIDM1NiwgICAtNTQ4 LCAgNDg4LCAgIC0zNDQsIC0xMzYsCisgICAgNDg4LCAgIC0xOTYsICAtMjI0LCAgNjU2LCAgIC0y MzYsICAtMTEyOCwgNjAsICAgIDQsICAgICAxNDAsICAgMjc2LCAgLTY3NiwKKyAgICAtMzc2LCAg MTY4LCAgIC0xMDgsICA0NjQsICAgOCwgICAgIDU2NCwgICA2NCwgICAgMjQwLCAgIDMwOCwgICAt MzAwLCAtNDAwLAorICAgIC00NTYsICAtMTM2LCAgNTYsICAgIDEyMCwgICAtNDA4LCAgLTExNiwg IDQzNiwgICA1MDQsICAgLTIzMiwgIDMyOCwgIDg0NCwKKyAgICAtMTY0LCAgLTg0LCAgIDc4NCwg ICAtMTY4LCAgMjMyLCAgIC0yMjQsICAzNDgsICAgLTM3NiwgIDEyOCwgICA1NjgsICA5NiwKKyAg ICAtMTI0NCwgLTI4OCwgIDI3NiwgICA4NDgsICAgODMyLCAgIC0zNjAsICA2NTYsICAgNDY0LCAg IC0zODQsICAtMzMyLCAtMzU2LAorICAgIDcyOCwgICAtMzg4LCAgMTYwLCAgIC0xOTIsICA0Njgs ICAgMjk2LCAgIDIyNCwgICAxNDAsICAgLTc3NiwgIC0xMDAsIDI4MCwKKyAgICA0LCAgICAgMTk2 LCAgIDQ0LCAgICAtMzYsICAgLTY0OCwgIDkzMiwgICAxNiwgICAgMTQyOCwgIDI4LCAgICA1Mjgs ICA4MDgsCisgICAgNzcyLCAgIDIwLCAgICAyNjgsICAgODgsICAgIC0zMzIsICAtMjg0LCAgMTI0 LCAgIC0zODQsICAtNDQ4LCAgMjA4LCAgLTIyOCwKKyAgICAtMTA0NCwgLTMyOCwgIDY2MCwgICAz ODAsICAgLTE0OCwgIC0zMDAsICA1ODgsICAgMjQwLCAgIDU0MCwgICAyOCwgICAxMzYsCisgICAg LTg4LCAgIC00MzYsICAyNTYsICAgMjk2LCAgIC0xMDAwLCAxNDAwLCAgMCwgICAgIC00OCwgICAx MDU2LCAgLTEzNiwgMjY0LAorICAgIC01MjgsICAtMTEwOCwgNjMyLCAgIC00ODQsICAtNTkyLCAg LTM0NCwgIDc5NiwgICAxMjQsICAgLTY2OCwgIC03NjgsIDM4OCwKKyAgICAxMjk2LCAgLTIzMiwg IC0xODgsICAtMjAwLCAgLTI4OCwgIC00LCAgICAzMDgsICAgMTAwLCAgIC0xNjgsICAyNTYsICAt NTAwLAorICAgIDIwNCwgICAtNTA4LCAgNjQ4LCAgIC0xMzYsICAzNzIsICAgLTI3MiwgIC0xMjAs ICAtMTAwNCwgLTU1MiwgIC01NDgsIC0zODQsCisgICAgNTQ4LCAgIC0yOTYsICA0MjgsICAgLTEw OCwgIC04LCAgICAtOTEyLCAgLTMyNCwgIC0yMjQsICAtODgsICAgLTExMiwgLTIyMCwKKyAgICAt MTAwLCAgOTk2LCAgIC03OTYsICA1NDgsICAgMzYwLCAgIC0yMTYsICAxODAsICAgNDI4LCAgIC0y MDAsICAtMjEyLCAxNDgsCisgICAgOTYsICAgIDE0OCwgICAyODQsICAgMjE2LCAgIC00MTIsICAt MzIwLCAgMTIwLCAgIC0zMDAsICAtMzg0LCAgLTYwNCwgLTU3MiwKKyAgICAtMzMyLCAgLTgsICAg IC0xODAsICAtMTc2LCAgNjk2LCAgIDExNiwgICAtODgsICAgNjI4LCAgIDc2LCAgICA0NCwgICAt NTE2LAorICAgIDI0MCwgICAtMjA4LCAgLTQwLCAgIDEwMCwgICAtNTkyLCAgMzQ0LCAgIC0zMDgs ICAtNDUyLCAgLTIyOCwgIDIwLCAgIDkxNiwKKyAgICAtMTc1MiwgLTEzNiwgIC0zNDAsICAtODA0 LCAgMTQwLCAgIDQwLCAgICA1MTIsICAgMzQwLCAgIDI0OCwgICAxODQsICAtNDkyLAorICAgIDg5 NiwgICAtMTU2LCAgOTMyLCAgIC02MjgsICAzMjgsICAgLTY4OCwgIC00NDgsICAtNjE2LCAgLTc1 MiwgIC0xMDAsIDU2MCwKKyAgICAtMTAyMCwgMTgwLCAgIC04MDAsICAtNjQsICAgNzYsICAgIDU3 NiwgICAxMDY4LCAgMzk2LCAgIDY2MCwgICA1NTIsICAtMTA4LAorICAgIC0yOCwgICAzMjAsICAg LTYyOCwgIDMxMiwgICAtOTIsICAgLTkyLCAgIC00NzIsICAyNjgsICAgMTYsICAgIDU2MCwgIDUx NiwKKyAgICAtNjcyLCAgLTUyLCAgIDQ5MiwgICAtMTAwLCAgMjYwLCAgIDM4NCwgICAyODQsICAg MjkyLCAgIDMwNCwgICAtMTQ4LCA4OCwKKyAgICAtMTUyLCAgMTAxMiwgIDEwNjQsICAtMjI4LCAg MTY0LCAgIC0zNzYsICAtNjg0LCAgNTkyLCAgIC0zOTIsICAxNTYsICAxOTYsCisgICAgLTUyNCwg IC02NCwgICAtODg0LCAgMTYwLCAgIC0xNzYsICA2MzYsICAgNjQ4LCAgIDQwNCwgICAtMzk2LCAg LTQzNiwgODY0LAorICAgIDQyNCwgICAtNzI4LCAgOTg4LCAgIC02MDQsICA5MDQsICAgLTU5Miwg IDI5NiwgICAtMjI0LCAgNTM2LCAgIC0xNzYsIC05MjAsCisgICAgNDM2LCAgIC00OCwgICAxMTc2 LCAgLTg4NCwgIDQxNiwgICAtNzc2LCAgLTgyNCwgIC04ODQsICA1MjQsICAgLTU0OCwgLTU2NCwK KyAgICAtNjgsICAgLTE2NCwgIC05NiwgICA2OTIsICAgMzY0LCAgIC02OTIsICAtMTAxMiwgLTY4 LCAgIDI2MCwgICAtNDgwLCA4NzYsCisgICAgLTExMTYsIDQ1MiwgICAtMzMyLCAgLTM1MiwgIDg5 MiwgICAtMTA4OCwgMTIyMCwgIC02NzYsICAxMiwgICAgLTI5MiwgMjQ0LAorICAgIDQ5NiwgICAz NzIsICAgLTMyLCAgIDI4MCwgICAyMDAsICAgMTEyLCAgIC00NDAsICAtOTYsICAgMjQsICAgIC02 NDQsIC0xODQsCisgICAgNTYsICAgIC00MzIsICAyMjQsICAgLTk4MCwgIDI3MiwgICAtMjYwLCAg MTQ0LCAgIC00MzYsICA0MjAsICAgMzU2LCAgMzY0LAorICAgIC01MjgsICA3NiwgICAgMTcyLCAg IC03NDQsICAtMzY4LCAgNDA0LCAgIC03NTIsICAtNDE2LCAgNjg0LCAgIC02ODgsIDcyLAorICAg IDU0MCwgICA0MTYsICAgOTIsICAgIDQ0NCwgICA0ODAsICAgLTcyLCAgIC0xNDE2LCAxNjQsICAg LTExNzIsIC02OCwgIDI0LAorICAgIDQyNCwgICAyNjQsICAgMTA0MCwgIDEyOCwgICAtOTEyLCAg LTUyNCwgIC0zNTYsICA2NCwgICAgODc2LCAgIC0xMiwgIDQsCisgICAgLTg4LCAgIDUzMiwgICAy NzIsICAgLTUyNCwgIDMyMCwgICAyNzYsICAgLTUwOCwgIDk0MCwgICAyNCwgICAgLTQwMCwgLTEy MCwKKyAgICA3NTYsICAgNjAsICAgIDIzNiwgICAtNDEyLCAgMTAwLCAgIDM3NiwgICAtNDg0LCAg NDAwLCAgIC0xMDAsICAtNzQwLCAtMTA4LAorICAgIC0yNjAsICAzMjgsICAgLTI2OCwgIDIyNCwg ICAtMjAwLCAgLTQxNiwgIDE4NCwgICAtNjA0LCAgLTU2NCwgIC0yMCwgIDI5NiwKKyAgICA2MCwg ICAgODkyLCAgIC04ODgsICA2MCwgICAgMTY0LCAgIDY4LCAgICAtNzYwLCAgMjE2LCAgIC0yOTYs ICA5MDQsICAtMzM2LAorICAgIC0yOCwgICA0MDQsICAgLTM1NiwgIC01NjgsICAtMjA4LCAgLTE0 ODAsIC01MTIsICAyOTYsICAgMzI4LCAgIC0zNjAsIC0xNjQsCisgICAgLTE1NjAsIC03NzYsICAx MTU2LCAgLTQyOCwgIDE2NCwgICAtNTA0LCAgLTExMiwgIDEyMCwgICAtMjE2LCAgLTE0OCwgLTI2 NCwKKyAgICAzMDgsICAgMzIsICAgIDY0LCAgICAtNzIsICAgNzIsICAgIDExNiwgICAxNzYsICAg LTY0LCAgIC0yNzIsICA0NjAsICAtNTM2LAorICAgIC03ODQsICAtMjgwLCAgMzQ4LCAgIDEwOCwg ICAtNzUyLCAgLTEzMiwgIDUyNCwgICAtNTQwLCAgLTc3NiwgIDExNiwgIC0yOTYsCisgICAgLTEx OTYsIC0yODgsICAtNTYwLCAgMTA0MCwgIC00NzIsICAxMTYsICAgLTg0OCwgIC0xMTE2LCAxMTYs ICAgNjM2LCAgNjk2LAorICAgIDI4NCwgICAtMTc2LCAgMTAxNiwgIDIwNCwgICAtODY0LCAgLTY0 OCwgIC0yNDgsICAzNTYsICAgOTcyLCAgIC01ODQsIC0yMDQsCisgICAgMjY0LCAgIDg4MCwgICA1 MjgsICAgLTI0LCAgIC0xODQsICAxMTYsICAgNDQ4LCAgIC0xNDQsICA4MjgsICAgNTI0LCAgMjEy LAorICAgIC0yMTIsICA1MiwgICAgMTIsICAgIDIwMCwgICAyNjgsICAgLTQ4OCwgIC00MDQsICAt ODgwLCAgODI0LCAgIC02NzIsIC00MCwKKyAgICA5MDgsICAgLTI0OCwgIDUwMCwgICA3MTYsICAg LTU3NiwgIDQ5MiwgICAtNTc2LCAgMTYsICAgIDcyMCwgICAtMTA4LCAzODQsCisgICAgMTI0LCAg IDM0NCwgICAyODAsICAgNTc2LCAgIC01MDAsICAyNTIsICAgMTA0LCAgIC0zMDgsICAxOTYsICAg LTE4OCwgLTgsCisgICAgMTI2OCwgIDI5NiwgICAxMDMyLCAgLTExOTYsIDQzNiwgICAzMTYsICAg MzcyLCAgIC00MzIsICAtMjAwLCAgLTY2MCwgNzA0LAorICAgIC0yMjQsICA1OTYsICAgLTEzMiwg IDI2OCwgICAzMiwgICAgLTQ1MiwgIDg4NCwgICAxMDQsICAgLTEwMDgsIDQyNCwgIC0xMzQ4LAor ICAgIC0yODAsICA0LCAgICAgLTExNjgsIDM2OCwgICA0NzYsICAgNjk2LCAgIDMwMCwgICAtOCwg ICAgMjQsICAgIDE4MCwgIC01OTIsCisgICAgLTE5NiwgIDM4OCwgICAzMDQsICAgNTAwLCAgIDcy NCwgICAtMTYwLCAgMjQ0LCAgIC04NCwgICAyNzIsICAgLTI1NiwgLTQyMCwKKyAgICAzMjAsICAg MjA4LCAgIC0xNDQsICAtMTU2LCAgMTU2LCAgIDM2NCwgICA0NTIsICAgMjgsICAgIDU0MCwgICAz MTYsICAyMjAsCisgICAgLTY0NCwgIC0yNDgsICA0NjQsICAgNzIsICAgIDM2MCwgICAzMiwgICAg LTM4OCwgIDQ5NiwgICAtNjgwLCAgLTQ4LCAgMjA4LAorICAgIC0xMTYsICAtNDA4LCAgNjAsICAg IC02MDQsICAtMzkyLCAgNTQ4LCAgIC04NDAsICA3ODQsICAgLTQ2MCwgIDY1NiwgIC01NDQsCisg ICAgLTM4OCwgIC0yNjQsICA5MDgsICAgLTgwMCwgIC02MjgsICAtNjEyLCAgLTU2OCwgIDU3Miwg ICAtMjIwLCAgMTY0LCAgMjg4LAorICAgIC0xNiwgICAtMzA4LCAgMzA4LCAgIC0xMTIsICAtNjM2 LCAgLTc2MCwgIDI4MCwgICAtNjY4LCAgNDMyLCAgIDM2NCwgIDI0MCwKKyAgICAtMTk2LCAgNjA0 LCAgIDM0MCwgICAzODQsICAgMTk2LCAgIDU5MiwgICAtNDQsICAgLTUwMCwgIDQzMiwgICAtNTgw LCAtMTMyLAorICAgIDYzNiwgICAtNzYsICAgMzkyLCAgIDQsICAgICAtNDEyLCAgNTQwLCAgIDUw OCwgICAzMjgsICAgLTM1NiwgIC0zNiwgIDE2LAorICAgIC0yMjAsICAtNjQsICAgLTI0OCwgIC02 MCwgICAyNCwgICAgLTE5MiwgIDM2OCwgICAxMDQwLCAgOTIsICAgIC0yNCwgIC0xMDQ0LAorICAg IC0zMiwgICA0MCwgICAgMTA0LCAgIDE0OCwgICAxOTIsICAgLTEzNiwgIC01MjAsICA1NiwgICAg LTgxNiwgIC0yMjQsIDczMiwKKyAgICAzOTIsICAgMzU2LCAgIDIxMiwgICAtODAsICAgLTQyNCwg IC0xMDA4LCAtMzI0LCAgNTg4LCAgIC0xNDk2LCA1NzYsICA0NjAsCisgICAgLTgxNiwgIC04NDgs ICA1NiwgICAgLTU4MCwgIC05MiwgICAtMTM3MiwgLTExMiwgIC00OTYsICAyMDAsICAgMzY0LCAg NTIsCisgICAgLTE0MCwgIDQ4LCAgICAtNDgsICAgLTYwLCAgIDg0LCAgICA3MiwgICAgNDAsICAg IDEzMiwgICAtMzU2LCAgLTI2OCwgLTEwNCwKKyAgICAtMjg0LCAgLTQwNCwgIDczMiwgICAtNTIw LCAgMTY0LCAgIC0zMDQsICAtNTQwLCAgMTIwLCAgIDMyOCwgICAtNzYsICAtNDYwLAorICAgIDc1 NiwgICAzODgsICAgNTg4LCAgIDIzNiwgICAtNDM2LCAgLTcyLCAgIC0xNzYsICAtNDA0LCAgLTMx NiwgIC0xNDgsIDcxNiwKKyAgICAtNjA0LCAgNDA0LCAgIC03MiwgICAtODgsICAgLTg4OCwgIC02 OCwgICA5NDQsICAgODgsICAgIC0yMjAsICAtMzQ0LCA5NjAsCisgICAgNDcyLCAgIDQ2MCwgICAt MjMyLCAgNzA0LCAgIDEyMCwgICA4MzIsICAgLTIyOCwgIDY5MiwgICAtNTA4LCAgMTMyLCAgLTQ3 NiwKKyAgICA4NDQsICAgLTc0OCwgIC0zNjQsICAtNDQsICAgMTExNiwgIC0xMTA0LCAtMTA1Niwg NzYsICAgIDQyOCwgICA1NTIsICAtNjkyLAorICAgIDYwLCAgICAzNTYsICAgOTYsICAgIC0zODQs ICAtMTg4LCAgLTYxMiwgIC01NzYsICA3MzYsICAgNTA4LCAgIDg5MiwgIDM1MiwKKyAgICAtMTEz MiwgNTA0LCAgIC0yNCwgICAtMzUyLCAgMzI0LCAgIDMzMiwgICAtNjAwLCAgLTMxMiwgIDI5Miwg ICA1MDgsICAtMTQ0LAorICAgIC04LCAgICA0ODQsICAgNDgsICAgIDI4NCwgICAtMjYwLCAgLTI0 MCwgIDI1NiwgICAtMTAwLCAgLTI5MiwgIC0yMDQsIC00NCwKKyAgICA0NzIsICAgLTIwNCwgIDkw OCwgICAtMTg4LCAgLTEwMDAsIC0yNTYsICA5MiwgICAgMTE2NCwgIC0zOTIsICA1NjQsICAzNTYs CisgICAgNjUyLCAgIC0yOCwgICAtODg0LCAgMjU2LCAgIDQ4NCwgICAtMTkyLCAgNzYwLCAgIC0x NzYsICAzNzYsICAgLTUyNCwgLTQ1MiwKKyAgICAtNDM2LCAgODYwLCAgIC03MzYsICAyMTIsICAg MTI0LCAgIDUwNCwgICAtNDc2LCAgNDY4LCAgIDc2LCAgICAtNDcyLCA1NTIsCisgICAgLTY5Miwg IC05NDQsICAtNjIwLCAgNzQwLCAgIC0yNDAsICA0MDAsICAgMTMyLCAgIDIwLCAgICAxOTIsICAg LTE5NiwgMjY0LAorICAgIC02NjgsICAtMTAxMiwgLTYwLCAgIDI5NiwgICAtMzE2LCAgLTgyOCwg IDc2LCAgICAtMTU2LCAgMjg0LCAgIC03NjgsIC00NDgsCisgICAgLTgzMiwgIDE0OCwgICAyNDgs ICAgNjUyLCAgIDYxNiwgICAxMjM2LCAgMjg4LCAgIC0zMjgsICAtNDAwLCAgLTEyNCwgNTg4LAor ICAgIDIyMCwgICA1MjAsICAgLTY5NiwgIDEwMzIsICA3NjgsICAgLTc0MCwgIC05MiwgICAtMjcy LCAgMjk2LCAgIDQ0OCwgIC00NjQsCisgICAgNDEyLCAgIC0yMDAsICAzOTIsICAgNDQwLCAgIC0y MDAsICAyNjQsICAgLTE1MiwgIC0yNjAsICAzMjAsICAgMTAzMiwgMjE2LAorICAgIDMyMCwgICAt OCwgICAgLTY0LCAgIDE1NiwgICAtMTAxNiwgMTA4NCwgIDExNzIsICA1MzYsICAgNDg0LCAgIC00 MzIsIDEzMiwKKyAgICAzNzIsICAgLTUyLCAgIC0yNTYsICA4NCwgICAgMTE2LCAgIC0zNTIsICA0 OCwgICAgMTE2LCAgIDMwNCwgICAtMzg0LCA0MTIsCisgICAgOTI0LCAgIC0zMDAsICA1MjgsICAg NjI4LCAgIDE4MCwgICA2NDgsICAgNDQsICAgIC05ODAsICAtMjIwLCAgMTMyMCwgNDgsCisgICAg MzMyLCAgIDc0OCwgICA1MjQsICAgLTI2OCwgIC03MjAsICA1NDAsICAgLTI3NiwgIDU2NCwgICAt MzQ0LCAgLTIwOCwgLTE5NiwKKyAgICA0MzYsICAgODk2LCAgIDg4LCAgICAtMzkyLCAgMTMyLCAg IDgwLCAgICAtOTY0LCAgLTI4OCwgIDU2OCwgICA1NiwgICAtNDgsCisgICAgLTQ1NiwgIDg4OCwg ICA4LCAgICAgNTUyLCAgIC0xNTYsICAtMjkyLCAgOTQ4LCAgIDI4OCwgICAxMjgsICAgLTcxNiwg LTI5MiwKKyAgICAxMTkyLCAgLTE1MiwgIDg3NiwgICAzNTIsICAgLTYwMCwgIC0yNjAsICAtODEy LCAgLTQ2OCwgIC0yOCwgICAtMTIwLCAtMzIsCisgICAgLTQ0LCAgIDEyODQsICA0OTYsICAgMTky LCAgIDQ2NCwgICAzMTIsICAgLTc2LCAgIC01MTYsICAtMzgwLCAgLTQ1NiwgLTEwMTIsCisgICAg LTQ4LCAgIDMwOCwgICAtMTU2LCAgMzYsICAgIDQ5MiwgICAtMTU2LCAgLTgwOCwgIDE4OCwgICAx NjUyLCAgNjgsICAgLTEyMCwKKyAgICAtMTE2LCAgMzE2LCAgIDE2MCwgICAtMTQwLCAgMzUyLCAg IDgwOCwgICAtNDE2LCAgNTkyLCAgIDMxNiwgICAtNDgwLCA1NiwKKyAgICA1MjgsICAgLTIwNCwg IC01NjgsICAzNzIsICAgLTIzMiwgIDc1MiwgICAtMzQ0LCAgNzQ0LCAgIC00LCAgICAzMjQsICAt NDE2LAorICAgIC02MDAsICA3NjgsICAgMjY4LCAgIC0yNDgsICAtODgsICAgLTEzMiwgIC00MjAs ICAtNDMyLCAgODAsICAgIC0yODgsIDQwNCwKKyAgICAtMzE2LCAgLTEyMTYsIC01ODgsICA1MjAs ICAgLTEwOCwgIDkyLCAgICAtMzIwLCAgMzY4LCAgIC00ODAsICAtMjE2LCAtOTIsCisgICAgMTY4 OCwgIC0zMDAsICAxODAsICAgMTAyMCwgIC0xNzYsICA4MjAsICAgLTY4LCAgIC0yMjgsICAtMjYw LCAgNDM2LCAgLTkwNCwKKyAgICAyMCwgICAgNDAsICAgIC01MDgsICA0NDAsICAgLTczNiwgIDMx MiwgICAzMzIsICAgMjA0LCAgIDc2MCwgICAtMzcyLCA3MjgsCisgICAgOTYsICAgIC0yMCwgICAt NjMyLCAgLTUyMCwgIC01NjAsICAzMzYsICAgMTA3NiwgIC02NCwgICAtNTMyLCAgNzc2LCAgNTg0 LAorICAgIDE5MiwgICAzOTYsICAgLTcyOCwgIC01MjAsICAyNzYsICAgLTE4OCwgIDgwLCAgICAt NTIsICAgLTYxMiwgIC0yNTIsIC00OCwKKyAgICA2NDgsICAgMjEyLCAgIC02ODgsICAyMjgsICAg LTUyLCAgIC0yNjAsICA0MjgsICAgLTQxMiwgIC0yNzIsICAtNDA0LCAxODAsCisgICAgODE2LCAg IC03OTYsICA0OCwgICAgMTUyLCAgIDQ4NCwgICAtODgsICAgLTIxNiwgIDk4OCwgICA2OTYsICAg MTg4LCAgLTUyOCwKKyAgICA2NDgsICAgLTExNiwgIC0xODAsICAzMTYsICAgNDc2LCAgIDEyLCAg ICAtNTY0LCAgOTYsICAgIDQ3NiwgICAtMjUyLCAtMzY0LAorICAgIC0zNzYsICAtMzkyLCAgNTU2 LCAgIC0yNTYsICAtNTc2LCAgMjYwLCAgIC0zNTIsICAxMjAsICAgLTE2LCAgIC0xMzYsIC0yNjAs CisgICAgLTQ5MiwgIDcyLCAgICA1NTYsICAgNjYwLCAgIDU4MCwgICA2MTYsICAgNzcyLCAgIDQz NiwgICA0MjQsICAgLTMyLCAgLTMyNCwKKyAgICAtMTI2OCwgNDE2LCAgIC0zMjQsICAtODAsICAg OTIwLCAgIDE2MCwgICAyMjgsICAgNzI0LCAgIDMyLCAgICAtNTE2LCA2NCwKKyAgICAzODQsICAg NjgsICAgIC0xMjgsICAxMzYsICAgMjQwLCAgIDI0OCwgICAtMjA0LCAgLTY4LCAgIDI1MiwgICAt OTMyLCAtMTIwLAorICAgIC00ODAsICAtNjI4LCAgLTg0LCAgIDE5MiwgICA4NTIsICAgLTQwNCwg IC0yODgsICAtMTMyLCAgMjA0LCAgIDEwMCwgIDE2OCwKKyAgICAtNjgsICAgLTE5NiwgIC04Njgs ICA0NjAsICAgMTA4MCwgIDM4MCwgICAtODAsICAgMjQ0LCAgIDAsICAgICA0ODQsICAtODg4LAor ICAgIDY0LCAgICAxODQsICAgMzUyLCAgIDYwMCwgICA0NjAsICAgMTY0LCAgIDYwNCwgICAtMTk2 LCAgMzIwLCAgIC02NCwgIDU4OCwKKyAgICAtMTg0LCAgMjI4LCAgIDEyLCAgICAzNzIsICAgNDgs ICAgIC04NDgsICAtMzQ0LCAgMjI0LCAgIDIwOCwgICAtMjAwLCA0ODQsCisgICAgMTI4LCAgIC0y MCwgICAyNzIsICAgLTQ2OCwgIC04NDAsICAzODQsICAgMjU2LCAgIC03MjAsICAtNTIwLCAgLTQ2 NCwgLTU4MCwKKyAgICAxMTIsICAgLTEyMCwgIDY0NCwgICAtMzU2LCAgLTIwOCwgIC02MDgsICAt NTI4LCAgNzA0LCAgIDU2MCwgICAtNDI0LCAzOTIsCisgICAgODI4LCAgIDQwLCAgICA4NCwgICAg MjAwLCAgIC0xNTIsICAwLCAgICAgLTE0NCwgIDU4NCwgICAyODAsICAgLTEyMCwgODAsCisgICAg LTU1NiwgIC05NzIsICAtMTk2LCAgLTQ3MiwgIDcyNCwgICA4MCwgICAgMTY4LCAgIC0zMiwgICA4 OCwgICAgMTYwLCAgLTY4OCwKKyAgICAwLCAgICAgMTYwLCAgIDM1NiwgICAzNzIsICAgLTc3Niwg IDc0MCwgICAtMTI4LCAgNjc2LCAgIC0yNDgsICAtNDgwLCA0LAorICAgIC0zNjQsICA5NiwgICAg NTQ0LCAgIDIzMiwgICAtMTAzMiwgOTU2LCAgIDIzNiwgICAzNTYsICAgMjAsICAgIC00MCwgIDMw MCwKKyAgICAyNCwgICAgLTY3NiwgIC01OTYsICAxMzIsICAgMTEyMCwgIC0xMDQsICA1MzIsICAg LTEwOTYsIDU2OCwgICA2NDgsICA0NDQsCisgICAgNTA4LCAgIDM4MCwgICAxODgsICAgLTM3Niwg IC02MDQsICAxNDg4LCAgNDI0LCAgIDI0LCAgICA3NTYsICAgLTIyMCwgLTE5MiwKKyAgICA3MTYs ICAgMTIwLCAgIDkyMCwgICA2ODgsICAgMTY4LCAgIDQ0LCAgICAtNDYwLCAgNTY4LCAgIDI4NCwg ICAxMTQ0LCAxMTYwLAorICAgIDYwMCwgICA0MjQsICAgODg4LCAgIDY1NiwgICAtMzU2LCAgLTMy MCwgIDIyMCwgICAzMTYsICAgLTE3NiwgIC03MjQsIC0xODgsCisgICAgLTgxNiwgIC02MjgsICAt MzQ4LCAgLTIyOCwgIC0zODAsICAxMDEyLCAgLTQ1MiwgIC02NjAsICA3MzYsICAgOTI4LCAgNDA0 LAorICAgIC02OTYsICAtNzIsICAgLTI2OCwgIC04OTIsICAxMjgsICAgMTg0LCAgIC0zNDQsICAt NzgwLCAgMzYwLCAgIDMzNiwgIDQwMCwKKyAgICAzNDQsICAgNDI4LCAgIDU0OCwgICAtMTEyLCAg MTM2LCAgIC0yMjgsICAtMjE2LCAgLTgyMCwgIC01MTYsICAzNDAsICA5MiwKKyAgICAtMTM2LCAg MTE2LCAgIC0zMDAsICAzNzYsICAgLTI0NCwgIDEwMCwgICAtMzE2LCAgLTUyMCwgIC0yODQsICAt MTIsICA4MjQsCisgICAgMTY0LCAgIC01NDgsICAtMTgwLCAgLTEyOCwgIDExNiwgICAtOTI0LCAg LTgyOCwgIDI2OCwgICAtMzY4LCAgLTU4MCwgNjIwLAorICAgIDE5MiwgICAxNjAsICAgMCwgICAg IC0xNjc2LCAxMDY4LCAgNDI0LCAgIC01NiwgICAtMzYwLCAgNDY4LCAgIC0xNTYsIDcyMCwKKyAg ICAyODgsICAgLTUyOCwgIDU1NiwgICAtMzY0LCAgNTQ4LCAgIC0xNDgsICA1MDQsICAgMzE2LCAg IDE1MiwgICAtNjQ4LCAtNjIwLAorICAgIC02ODQsICAtMjQsICAgLTM3NiwgIC0zODQsICAtMTA4 LCAgLTkyMCwgIC0xMDMyLCA3NjgsICAgMTgwLCAgIC0yNjQsIC01MDgsCisgICAgLTEyNjgsIC0y NjAsICAtNjAsICAgMzAwLCAgIC0yNDAsICA5ODgsICAgNzI0LCAgIC0zNzYsICAtNTc2LCAgLTIx MiwgLTczNiwKKyAgICA1NTYsICAgMTkyLCAgIDEwOTIsICAtNjIwLCAgLTg4MCwgIDM3NiwgICAt NTYsICAgLTQsICAgIC0yMTYsICAtMzIsICA4MzYsCisgICAgMjY4LCAgIDM5NiwgICAxMzMyLCAg ODY0LCAgIC02MDAsICAxMDAsICAgNTYsICAgIC00MTIsICAtOTIsICAgMzU2LCAgMTgwLAorICAg IDg4NCwgICAtNDY4LCAgLTQzNiwgIDI5MiwgICAtMzg4LCAgLTgwNCwgIC03MDQsICAtODQwLCAg MzY4LCAgIC0zNDgsIDE0MCwKKyAgICAtNzI0LCAgMTUzNiwgIDk0MCwgICAzNzIsICAgMTEyLCAg IC0zNzIsICA0MzYsICAgLTQ4MCwgIDExMzYsICAyOTYsICAtMzIsCisgICAgLTIyOCwgIDEzMiwg ICAtNDgsICAgLTIyMCwgIDg2OCwgICAtMTAxNiwgLTYwLCAgIC0xMDQ0LCAtNDY0LCAgMzI4LCAg OTE2LAorICAgIDI0NCwgICAxMiwgICAgLTczNiwgIC0yOTYsICAzNjAsICAgNDY4LCAgIC0zNzYs ICAtMTA4LCAgLTkyLCAgIDc4OCwgIDM2OCwKKyAgICAtNTYsICAgNTQ0LCAgIDQwMCwgICAtNjcy LCAgLTQyMCwgIDcyOCwgICAxNiwgICAgMzIwLCAgIDQ0LCAgICAtMjg0LCAtMzgwLAorICAgIC03 OTYsICA0ODgsICAgMTMyLCAgIDIwNCwgICAtNTk2LCAgLTM3MiwgIDg4LCAgICAtMTUyLCAgLTkw OCwgIC02MzYsIC01NzIsCisgICAgLTYyNCwgIC0xMTYsICAtNjkyLCAgLTIwMCwgIC01NiwgICAy NzYsICAgLTg4LCAgIDQ4NCwgICAtMzI0LCAgOTQ4LCAgODY0LAorICAgIDEwMDAsICAtNDU2LCAg LTE4NCwgIC0yNzYsICAyOTIsICAgLTI5NiwgIDE1NiwgICA2NzYsICAgMzIwLCAgIDE2MCwgIDkw OCwKKyAgICAtODQsICAgLTEyMzYsIC0yODgsICAtMTE2LCAgMjYwLCAgIC0zNzIsICAtNjQ0LCAg NzMyLCAgIC03NTYsICAtOTYsICA4NCwKKyAgICAzNDQsICAgLTUyMCwgIDM0OCwgICAtNjg4LCAg MjQwLCAgIC04NCwgICAyMTYsICAgLTEwNDQsIC0xMzYsICAtNjc2LCAtMzk2LAorICAgIC0xNTAw LCA5NjAsICAgLTQwLCAgIDE3NiwgICAxNjgsICAgMTUxNiwgIDQyMCwgICAtNTA0LCAgLTM0NCwg IC0zNjQsIC0zNjAsCisgICAgMTIxNiwgIC05NDAsICAtMzgwLCAgLTIxMiwgIDI1MiwgICAtNjYw LCAgLTcwOCwgIDQ4NCwgICAtNDQ0LCAgLTE1MiwgOTI4LAorICAgIC0xMjAsICAxMTEyLCAgNDc2 LCAgIC0yNjAsICA1NjAsICAgLTE0OCwgIC0zNDQsICAxMDgsICAgLTE5NiwgIDIyOCwgIC0yODgs CisgICAgNTA0LCAgIDU2MCwgICAtMzI4LCAgLTg4LCAgIDI4OCwgICAtMTAwOCwgNDYwLCAgIC0y MjgsICA0NjgsICAgLTgzNiwgLTE5NiwKKyAgICA3NiwgICAgMzg4LCAgIDIzMiwgICA0MTIsICAg LTExNjgsIC03MTYsICAtNjQ0LCAgNzU2LCAgIC0xNzIsICAtMzU2LCAtNTA0LAorICAgIDExNiwg ICA0MzIsICAgNTI4LCAgIDQ4LCAgICA0NzYsICAgLTE2OCwgIC02MDgsICA0NDgsICAgMTYwLCAg IC01MzIsIC0yNzIsCisgICAgMjgsICAgIC02NzYsICAtMTIsICAgODI4LCAgIDk4MCwgICA0NTYs ICAgNTIwLCAgIDEwNCwgICAtMTA0LCAgMjU2LCAgLTM0NCwKKyAgICAtNCwgICAgLTI4LCAgIC0z NjgsICAtNTIsICAgLTUyNCwgIC01NzIsICAtNTU2LCAgLTIwMCwgIDc2OCwgICAxMTI0LCAtMjA4 LAorICAgIC01MTIsICAxNzYsICAgMjMyLCAgIDI0OCwgICAtMTQ4LCAgLTg4OCwgIDYwNCwgICAt NjAwLCAgLTMwNCwgIDgwNCwgIC0xNTYsCisgICAgLTIxMiwgIDQ4OCwgICAtMTkyLCAgLTgwNCwg IC0yNTYsICAzNjgsICAgLTM2MCwgIC05MTYsICAtMzI4LCAgMjI4LCAgLTI0MCwKKyAgICAtNDQ4 LCAgLTQ3MiwgIDg1NiwgICAtNTU2LCAgLTM2NCwgIDU3MiwgICAtMTIsICAgLTE1NiwgIC0zNjgs ICAtMzQwLCA0MzIsCisgICAgMjUyLCAgIC03NTIsICAtMTUyLCAgMjg4LCAgIDI2OCwgICAtNTgw LCAgLTg0OCwgIC01OTIsICAxMDgsICAgLTc2LCAgMjQ0LAorICAgIDMxMiwgICAtNzE2LCAgNTky LCAgIC04MCwgICA0MzYsICAgMzYwLCAgIDQsICAgICAtMjQ4LCAgMTYwLCAgIDUxNiwgIDU4NCwK KyAgICA3MzIsICAgNDQsICAgIC00NjgsICAtMjgwLCAgLTI5MiwgIC0xNTYsICAtNTg4LCAgMjgs ICAgIDMwOCwgICA5MTIsICAyNCwKKyAgICAxMjQsICAgMTU2LCAgIDE4MCwgICAtMjUyLCAgOTQ0 LCAgIC05MjQsICAtNzcyLCAgLTUyMCwgIC00MjgsICAtNjI0LCAzMDAsCisgICAgLTIxMiwgIC0x MTQ0LCAzMiwgICAgLTcyNCwgIDgwMCwgICAtMTEyOCwgLTIxMiwgIC0xMjg4LCAtODQ4LCAgMTgw LCAgLTQxNiwKKyAgICA0NDAsICAgMTkyLCAgIC01NzYsICAtNzkyLCAgLTc2LCAgIC0xMDgwLCA4 MCwgICAgLTUzMiwgIC0zNTIsICAtMTMyLCAzODAsCisgICAgLTgyMCwgIDE0OCwgICAxMTEyLCAg MTI4LCAgIDE2NCwgICA0NTYsICAgNzAwLCAgIC05MjQsICAxNDQsICAgLTY2OCwgLTM4NCwKKyAg ICA2NDgsICAgLTgzMiwgIDUwOCwgICA1NTIsICAgLTUyLCAgIC0xMDAsICAtNjU2LCAgMjA4LCAg IC01NjgsICA3NDgsICAtODgsCisgICAgNjgwLCAgIDIzMiwgICAzMDAsICAgMTkyLCAgIC00MDgs ICAtMTAxMiwgLTE1MiwgIC0yNTIsICAtMjY4LCAgMjcyLCAgLTg3NiwKKyAgICAtNjY0LCAgLTY0 OCwgIC0zMzIsICAtMTM2LCAgMTYsICAgIDEyLCAgICAxMTUyLCAgLTI4LCAgIDMzMiwgICAtNTM2 LCAzMjAsCisgICAgLTY3MiwgIC00NjAsICAtMzE2LCAgNTMyLCAgIC0yNjAsICAyMjgsICAgLTQw LCAgIDEwNTIsICAtODE2LCAgMTgwLCAgODgsCisgICAgLTQ5NiwgIC01NTYsICAtNjcyLCAgLTM2 OCwgIDQyOCwgICA5MiwgICAgMzU2LCAgIDQwNCwgICAtNDA4LCAgMjUyLCAgMTk2LAorICAgIC0x NzYsICAtNTU2LCAgNzkyLCAgIDI2OCwgICAzMiwgICAgMzcyLCAgIDQwLCAgICA5NiwgICAgLTMz MiwgIDMyOCwgIDEyMCwKKyAgICAzNzIsICAgLTkwMCwgIC00MCwgICA0NzIsICAgLTI2NCwgIC01 OTIsICA5NTIsICAgMTI4LCAgIDY1NiwgICAxMTIsICA2NjQsCisgICAgLTIzMiwgIDQyMCwgICA0 LCAgICAgLTM0NCwgIC00NjQsICA1NTYsICAgMjQ0LCAgIC00MTYsICAtMzIsICAgMjUyLCAgMCwK KyAgICAtNDEyLCAgMTg4LCAgIC02OTYsICA1MDgsICAgLTQ3NiwgIDMyNCwgICAtMTA5NiwgNjU2 LCAgIC0zMTIsICA1NjAsICAyNjQsCisgICAgLTEzNiwgIDMwNCwgICAxNjAsICAgLTY0LCAgIC01 ODAsICAyNDgsICAgMzM2LCAgIC03MjAsICA1NjAsICAgLTM0OCwgLTI4OCwKKyAgICAtMjc2LCAg LTE5NiwgIC01MDAsICA4NTIsICAgLTU0NCwgIC0yMzYsICAtMTEyOCwgLTk5MiwgIC03NzYsICAx MTYsICA1NiwKKyAgICA1MiwgICAgODYwLCAgIDg4NCwgICAyMTIsICAgLTEyLCAgIDE2OCwgICAx MDIwLCAgNTEyLCAgIC01NTIsICA5MjQsICAtMTQ4LAorICAgIDcxNiwgICAxODgsICAgMTY0LCAg IC0zNDAsICAtNTIwLCAgLTE4NCwgIDg4MCwgICAtMTUyLCAgLTY4MCwgIC0yMDgsIC0xMTU2LAor ICAgIC0zMDAsICAtNTI4LCAgLTQ3MiwgIDM2NCwgICAxMDAsICAgLTc0NCwgIC0xMDU2LCAtMzIs ICAgNTQwLCAgIDI4MCwgIDE0NCwKKyAgICAtNjc2LCAgLTMyLCAgIC0yMzIsICAtMjgwLCAgLTIy NCwgIDk2LCAgICA1NjgsICAgLTc2LCAgIDE3MiwgICAxNDgsICAxNDgsCisgICAgMTA0LCAgIDMy LCAgICAtMjk2LCAgLTMyLCAgIDc4OCwgICAtODAsICAgMzIsICAgIC0xNiwgICAyODAsICAgMjg4 LCAgOTQ0LAorICAgIDQyOCwgICAtNDg0Cit9OwpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hb21f ZmlsbV9ncmFpbi5oIGIvbGliYXZjb2RlYy9hb21fZmlsbV9ncmFpbi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZDc3MmJkN2QxNwotLS0gL2Rldi9udWxsCisrKyBi L2xpYmF2Y29kZWMvYW9tX2ZpbG1fZ3JhaW4uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQU9N IGZpbG0gZ3JhaW4gc3ludGhlc2lzCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTmlrbGFzIEhhYXMg PGZmbXBlZ0BoYWFzbi54eXo+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisKKy8qKgorICogQGZpbGUKKyAqIEFPTSBmaWxtIGdyYWluIHN5bnRoZXNpcy4KKyAqIEBhdXRo b3IgTmlrbGFzIEhhYXMgPGZmbXBlZ0BoYWFzbi54eXo+CisgKi8KKworI2lmbmRlZiBBVkNPREVD X0FPTV9GSUxNX0dSQUlOX0gKKyNkZWZpbmUgQVZDT0RFQ19BT01fRklMTV9HUkFJTl9ICisKKyNp bmNsdWRlICJsaWJhdnV0aWwvZmlsbV9ncmFpbl9wYXJhbXMuaCIKKworLy8gU3ludGhlc2l6ZXMg ZmlsbSBncmFpbiBvbiB0b3Agb2YgYGluYCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgdG8gYG91dGAu IGBvdXRgCisvLyBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhbmQgc2V0IHRvIHRo ZSBzYW1lIHNpemUgYW5kIGZvcm1hdCBhcyBgaW5gLgoraW50IGZmX2FvbV9hcHBseV9maWxtX2dy YWluKEFWRnJhbWUgKm91dCwgY29uc3QgQVZGcmFtZSAqaW4sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQVZGaWxtR3JhaW5QYXJhbXMgKnBhcmFtcyk7CisKKyNlbmRpZiAvKiBB VkNPREVDX0FPTV9GSUxNX0dSQUlOX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYW9tX2Zp bG1fZ3JhaW5fdGVtcGxhdGUuYyBiL2xpYmF2Y29kZWMvYW9tX2ZpbG1fZ3JhaW5fdGVtcGxhdGUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWY5ZjI5ZjFmYWIKLS0t IC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2FvbV9maWxtX2dyYWluX3RlbXBsYXRlLmMKQEAg LTAsMCArMSw1NzcgQEAKKy8qCisgKiBBT00gZmlsbSBncmFpbiBzeW50aGVzaXMKKyAqIENvcHly aWdodCAoYykgMjAyMyBOaWtsYXMgSGFhcyA8ZmZtcGVnQGhhYXNuLnh5ej4KKyAqCisgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4LCBO aWtsYXMgSGFhcworICogQ29weXJpZ2h0IMKpIDIwMTgsIFZpZGVvTEFOIGFuZCBkYXYxZCBhdXRo b3JzCisgKiBDb3B5cmlnaHQgwqkgMjAxOCwgVHdvIE9yaW9sZXMsIExMQworICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICog ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJiaXRfZGVwdGhfdGVt cGxhdGUuYyIKKworI3VuZGVmIGVudHJ5CisjdW5kZWYgYml0ZGVwdGgKKyN1bmRlZiBiaXRkZXB0 aF9tYXgKKyN1bmRlZiBIQkRfREVDTAorI3VuZGVmIEhCRF9DQUxMCisjdW5kZWYgU0NBTElOR19T SVpFCisKKyNpZiBCSVRfREVQVEggPiA4CisjIGRlZmluZSBlbnRyeSBpbnQxNl90CisjIGRlZmlu ZSBiaXRkZXB0aF9tYXggKCgxIDw8IGJpdGRlcHRoKSAtIDEpCisjIGRlZmluZSBIQkRfREVDTCAs IGNvbnN0IGludCBiaXRkZXB0aAorIyBkZWZpbmUgSEJEX0NBTEwgLCBiaXRkZXB0aAorIyBkZWZp bmUgU0NBTElOR19TSVpFIDQwOTYKKyNlbHNlCisjIGRlZmluZSBlbnRyeSBpbnQ4X3QKKyMgZGVm aW5lIGJpdGRlcHRoIDgKKyMgZGVmaW5lIGJpdGRlcHRoX21heCBVSU5UOF9NQVgKKyMgZGVmaW5l IEhCRF9ERUNMCisjIGRlZmluZSBIQkRfQ0FMTAorIyBkZWZpbmUgU0NBTElOR19TSVpFIDI1Ngor I2VuZGlmCisKK3N0YXRpYyB2b2lkIEZVTkMoZ2VuZXJhdGVfZ3JhaW5feV9jKShlbnRyeSBidWZb XVtHUkFJTl9XSURUSF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQVZGaWxtR3JhaW5QYXJhbXMgKmNvbnN0IHBhcmFtcworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhCRF9ERUNMKQoreworICAgIGNvbnN0IEFWRmlsbUdyYWluQU9NUGFy YW1zICpjb25zdCBkYXRhID0gJnBhcmFtcy0+Y29kZWMuYW9tOworICAgIGNvbnN0IGludCBiaXRk ZXB0aF9taW5fOCA9IGJpdGRlcHRoIC0gODsKKyAgICB1bnNpZ25lZCBzZWVkID0gcGFyYW1zLT5z ZWVkOworICAgIGNvbnN0IGludCBzaGlmdCA9IDQgLSBiaXRkZXB0aF9taW5fOCArIGRhdGEtPmdy YWluX3NjYWxlX3NoaWZ0OworICAgIGNvbnN0IGludCBncmFpbl9jdHIgPSAxMjggPDwgYml0ZGVw dGhfbWluXzg7CisgICAgY29uc3QgaW50IGdyYWluX21pbiA9IC1ncmFpbl9jdHIsIGdyYWluX21h eCA9IGdyYWluX2N0ciAtIDE7CisKKyAgICBjb25zdCBpbnQgYXJfcGFkID0gMzsKKyAgICBjb25z dCBpbnQgYXJfbGFnID0gZGF0YS0+YXJfY29lZmZfbGFnOworCisgICAgZm9yIChpbnQgeSA9IDA7 IHkgPCBHUkFJTl9IRUlHSFQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IEdS QUlOX1dJRFRIOyB4KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCB2YWx1ZSA9IGdldF9yYW5k b21fbnVtYmVyKDExLCAmc2VlZCk7CisgICAgICAgICAgICBidWZbeV1beF0gPSByb3VuZDIoZ2F1 c3NpYW5fc2VxdWVuY2VbIHZhbHVlIF0sIHNoaWZ0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg IGZvciAoaW50IHkgPSBhcl9wYWQ7IHkgPCBHUkFJTl9IRUlHSFQ7IHkrKykgeworICAgICAgICBm b3IgKGludCB4ID0gYXJfcGFkOyB4IDwgR1JBSU5fV0lEVEggLSBhcl9wYWQ7IHgrKykgeworICAg ICAgICAgICAgY29uc3QgaW50OF90ICpjb2VmZiA9IGRhdGEtPmFyX2NvZWZmc195OworICAgICAg ICAgICAgaW50IHN1bSA9IDAsIGdyYWluOworICAgICAgICAgICAgZm9yIChpbnQgZHkgPSAtYXJf bGFnOyBkeSA8PSAwOyBkeSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgZHggPSAtYXJf bGFnOyBkeCA8PSBhcl9sYWc7IGR4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkeCAm JiAhZHkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgc3VtICs9ICooY29lZmYrKykgKiBidWZbeSArIGR5XVt4ICsgZHhdOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ3JhaW4gPSBidWZbeV1beF0gKyBy b3VuZDIoc3VtLCBkYXRhLT5hcl9jb2VmZl9zaGlmdCk7CisgICAgICAgICAgICBidWZbeV1beF0g PSBhdl9jbGlwKGdyYWluLCBncmFpbl9taW4sIGdyYWluX21heCk7CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkCitGVU5DKGdlbmVyYXRlX2dyYWluX3V2X2MpKGVudHJ5IGJ1Zltd W0dSQUlOX1dJRFRIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgYnVm X3lbXVtHUkFJTl9XSURUSF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRmls bUdyYWluUGFyYW1zICpjb25zdCBwYXJhbXMsIGNvbnN0IGludHB0cl90IHV2LAorICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3VieCwgY29uc3QgaW50IHN1YnkgSEJEX0RFQ0wp Cit7CisgICAgY29uc3QgQVZGaWxtR3JhaW5BT01QYXJhbXMgKmNvbnN0IGRhdGEgPSAmcGFyYW1z LT5jb2RlYy5hb207CisgICAgY29uc3QgaW50IGJpdGRlcHRoX21pbl84ID0gYml0ZGVwdGggLSA4 OworICAgIHVuc2lnbmVkIHNlZWQgPSBwYXJhbXMtPnNlZWQgXiAodXYgPyAweDQ5ZDggOiAweGI1 MjQpOworICAgIGNvbnN0IGludCBzaGlmdCA9IDQgLSBiaXRkZXB0aF9taW5fOCArIGRhdGEtPmdy YWluX3NjYWxlX3NoaWZ0OworICAgIGNvbnN0IGludCBncmFpbl9jdHIgPSAxMjggPDwgYml0ZGVw dGhfbWluXzg7CisgICAgY29uc3QgaW50IGdyYWluX21pbiA9IC1ncmFpbl9jdHIsIGdyYWluX21h eCA9IGdyYWluX2N0ciAtIDE7CisKKyAgICBjb25zdCBpbnQgY2hyb21hVyA9IHN1YnggPyBTVUJf R1JBSU5fV0lEVEggIDogR1JBSU5fV0lEVEg7CisgICAgY29uc3QgaW50IGNocm9tYUggPSBzdWJ5 ID8gU1VCX0dSQUlOX0hFSUdIVCA6IEdSQUlOX0hFSUdIVDsKKworICAgIGNvbnN0IGludCBhcl9w YWQgPSAzOworICAgIGNvbnN0IGludCBhcl9sYWcgPSBkYXRhLT5hcl9jb2VmZl9sYWc7CisKKyAg ICBmb3IgKGludCB5ID0gMDsgeSA8IGNocm9tYUg7IHkrKykgeworICAgICAgICBmb3IgKGludCB4 ID0gMDsgeCA8IGNocm9tYVc7IHgrKykgeworICAgICAgICAgICAgY29uc3QgaW50IHZhbHVlID0g Z2V0X3JhbmRvbV9udW1iZXIoMTEsICZzZWVkKTsKKyAgICAgICAgICAgIGJ1Zlt5XVt4XSA9IHJv dW5kMihnYXVzc2lhbl9zZXF1ZW5jZVsgdmFsdWUgXSwgc2hpZnQpOworICAgICAgICB9CisgICAg fQorCisgICAgZm9yIChpbnQgeSA9IGFyX3BhZDsgeSA8IGNocm9tYUg7IHkrKykgeworICAgICAg ICBmb3IgKGludCB4ID0gYXJfcGFkOyB4IDwgY2hyb21hVyAtIGFyX3BhZDsgeCsrKSB7CisgICAg ICAgICAgICBjb25zdCBpbnQ4X3QgKmNvZWZmID0gZGF0YS0+YXJfY29lZmZzX3V2W3V2XTsKKyAg ICAgICAgICAgIGludCBzdW0gPSAwLCBncmFpbjsKKyAgICAgICAgICAgIGZvciAoaW50IGR5ID0g LWFyX2xhZzsgZHkgPD0gMDsgZHkrKykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGR4ID0g LWFyX2xhZzsgZHggPD0gYXJfbGFnOyBkeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZv ciB0aGUgZmluYWwgKGN1cnJlbnQpIHBpeGVsLCB3ZSBuZWVkIHRvIGFkZCBpbiB0aGUKKyAgICAg ICAgICAgICAgICAgICAgLy8gY29udHJpYnV0aW9uIGZyb20gdGhlIGx1bWEgZ3JhaW4gdGV4dHVy ZQorICAgICAgICAgICAgICAgICAgICBpZiAoIWR4ICYmICFkeSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgaW50IGx1bWFYID0gKCh4IC0gYXJfcGFkKSA8PCBzdWJ4KSArIGFyX3Bh ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsdW1hWSA9ICgoeSAtIGFyX3Bh ZCkgPDwgc3VieSkgKyBhcl9wYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbHVtYSA9 IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEtPm51bV95X3BvaW50cykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDw9IHN1Ynk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHN1Yng7IGorKykgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsdW1hICs9IGJ1Zl95W2x1bWFZICsgaV1bbHVtYVggKyBqXTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICBsdW1hID0gcm91bmQyKGx1bWEsIHN1YnggKyBzdWJ5KTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSBsdW1hICogKCpjb2VmZik7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgICAgIHN1bSArPSAqKGNvZWZmKyspICogYnVmW3kgKyBkeV1beCArIGR4XTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdyYWluID0gYnVm W3ldW3hdICsgcm91bmQyKHN1bSwgZGF0YS0+YXJfY29lZmZfc2hpZnQpOworICAgICAgICAgICAg YnVmW3ldW3hdID0gYXZfY2xpcChncmFpbiwgZ3JhaW5fbWluLCBncmFpbl9tYXgpOworICAgICAg ICB9CisgICAgfQorfQorCisvLyBzYW1wbGVzIGZyb20gdGhlIGNvcnJlY3QgYmxvY2sgb2YgYSBn cmFpbiBMVVQsIHdoaWxlIHRha2luZyBpbnRvIGFjY291bnQgdGhlCisvLyBvZmZzZXRzIHByb3Zp ZGVkIGJ5IHRoZSBvZmZzZXRzIGNhY2hlCitzdGF0aWMgaW5saW5lIGVudHJ5IEZVTkMoc2FtcGxl X2x1dCkoY29uc3QgZW50cnkgZ3JhaW5fbHV0W11bR1JBSU5fV0lEVEhdLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmZzZXRzWzJdWzJdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBzdWJ4LCBjb25zdCBpbnQg c3VieSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYngs IGNvbnN0IGludCBieSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBpbnQgeCwgY29uc3QgaW50IHkpCit7CisgICAgY29uc3QgaW50IHJhbmR2YWwgPSBvZmZzZXRz W2J4XVtieV07CisgICAgY29uc3QgaW50IG9mZnggPSAzICsgKDIgPj4gc3VieCkgKiAoMyArIChy YW5kdmFsID4+IDQpKTsKKyAgICBjb25zdCBpbnQgb2ZmeSA9IDMgKyAoMiA+PiBzdWJ5KSAqICgz ICsgKHJhbmR2YWwgJiAweEYpKTsKKyAgICByZXR1cm4gZ3JhaW5fbHV0W29mZnkgKyB5ICsgKEZH X0JMT0NLX1NJWkUgPj4gc3VieSkgKiBieV0KKyAgICAgICAgICAgICAgICAgICAgW29mZnggKyB4 ICsgKEZHX0JMT0NLX1NJWkUgPj4gc3VieCkgKiBieF07Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMo Zmd5XzMyeDMyeG5fYykocGl4ZWwgKmNvbnN0IGRzdF9yb3csIGNvbnN0IHBpeGVsICpjb25zdCBz cmNfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdHJkaWZmX3Qg c3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZpbG1HcmFp blBhcmFtcyAqY29uc3QgcGFyYW1zLCBjb25zdCBzaXplX3QgcHcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qgc2NhbGluZ1tTQ0FMSU5HX1NJWkVdLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSBncmFpbl9sdXRbXVtHUkFJ Tl9XSURUSF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBiaCwg Y29uc3QgaW50IHJvd19udW0gSEJEX0RFQ0wpCit7CisgICAgY29uc3QgQVZGaWxtR3JhaW5BT01Q YXJhbXMgKmNvbnN0IGRhdGEgPSAmcGFyYW1zLT5jb2RlYy5hb207CisgICAgY29uc3QgaW50IHJv d3MgPSAxICsgKGRhdGEtPm92ZXJsYXBfZmxhZyAmJiByb3dfbnVtID4gMCk7CisgICAgY29uc3Qg aW50IGJpdGRlcHRoX21pbl84ID0gYml0ZGVwdGggLSA4OworICAgIGNvbnN0IGludCBncmFpbl9j dHIgPSAxMjggPDwgYml0ZGVwdGhfbWluXzg7CisgICAgY29uc3QgaW50IGdyYWluX21pbiA9IC1n cmFpbl9jdHIsIGdyYWluX21heCA9IGdyYWluX2N0ciAtIDE7CisgICAgdW5zaWduZWQgc2VlZFsy XTsKKyAgICBpbnQgb2Zmc2V0c1syIC8qIGNvbCBvZmZzZXQgKi9dWzIgLyogcm93IG9mZnNldCAq L107CisKKyAgICBpbnQgbWluX3ZhbHVlLCBtYXhfdmFsdWU7CisgICAgaWYgKGRhdGEtPmxpbWl0 X291dHB1dF9yYW5nZSkgeworICAgICAgICBtaW5fdmFsdWUgPSAxNiA8PCBiaXRkZXB0aF9taW5f ODsKKyAgICAgICAgbWF4X3ZhbHVlID0gMjM1IDw8IGJpdGRlcHRoX21pbl84OworICAgIH0gZWxz ZSB7CisgICAgICAgIG1pbl92YWx1ZSA9IDA7CisgICAgICAgIG1heF92YWx1ZSA9IGJpdGRlcHRo X21heDsKKyAgICB9CisKKyAgICAvLyBzZWVkWzBdIGNvbnRhaW5zIHRoZSBjdXJyZW50IHJvdywg c2VlZFsxXSBjb250YWlucyB0aGUgcHJldmlvdXMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJv d3M7IGkrKykgeworICAgICAgICBzZWVkW2ldID0gcGFyYW1zLT5zZWVkOworICAgICAgICBzZWVk W2ldIF49ICgoKHJvd19udW0gLSBpKSAqIDM3ICArIDE3OCkgJiAweEZGKSA8PCA4OworICAgICAg ICBzZWVkW2ldIF49ICgoKHJvd19udW0gLSBpKSAqIDE3MyArIDEwNSkgJiAweEZGKTsKKyAgICB9 CisKKyAgICBhdl9hc3NlcnQxKHN0cmlkZSAlIChGR19CTE9DS19TSVpFICogc2l6ZW9mKHBpeGVs KSkgPT0gMCk7CisKKyAgICAvLyBwcm9jZXNzIHRoaXMgcm93IGluIEZHX0JMT0NLX1NJWkVeMiBi bG9ja3MKKyAgICBmb3IgKHVuc2lnbmVkIGJ4ID0gMDsgYnggPCBwdzsgYnggKz0gRkdfQkxPQ0tf U0laRSkgeworICAgICAgICBjb25zdCBpbnQgYncgPSBGRk1JTihGR19CTE9DS19TSVpFLCAoaW50 KSBwdyAtIGJ4KTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnNyYzsKKyAgICAgICAgcGl4ZWwgKmRz dDsKKyAgICAgICAgaW50IG5vaXNlOworCisgICAgICAgIC8vIHgveSBibG9jayBvZmZzZXRzIHRv IGNvbXBlbnNhdGUgZm9yIG92ZXJsYXBwZWQgcmVnaW9ucworICAgICAgICBjb25zdCBpbnQgeXN0 YXJ0ID0gZGF0YS0+b3ZlcmxhcF9mbGFnICYmIHJvd19udW0gPyBGRk1JTigyLCBiaCkgOiAwOwor ICAgICAgICBjb25zdCBpbnQgeHN0YXJ0ID0gZGF0YS0+b3ZlcmxhcF9mbGFnICYmIGJ4ICAgICAg PyBGRk1JTigyLCBidykgOiAwOworCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgd1syXVsyXSA9 IHsgeyAyNywgMTcgfSwgeyAxNywgMjcgfSB9OworCisgICAgICAgIGlmIChkYXRhLT5vdmVybGFw X2ZsYWcgJiYgYngpIHsKKyAgICAgICAgICAgIC8vIHNoaWZ0IHByZXZpb3VzIG9mZnNldHMgbGVm dAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAg ICAgICAgb2Zmc2V0c1sxXVtpXSA9IG9mZnNldHNbMF1baV07CisgICAgICAgIH0KKworICAgICAg ICAvLyB1cGRhdGUgY3VycmVudCBvZmZzZXRzCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg cm93czsgaSsrKQorICAgICAgICAgICAgb2Zmc2V0c1swXVtpXSA9IGdldF9yYW5kb21fbnVtYmVy KDgsICZzZWVkW2ldKTsKKworI2RlZmluZSBhZGRfbm9pc2VfeSh4LCB5LCBncmFpbikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNyYyA9 IChjb25zdCBwaXhlbCopKChjb25zdCBjaGFyKilzcmNfcm93ICsgKHkpICogc3RyaWRlKSArICh4 KSArIGJ4OyAgIFwKKyAgICAgICAgZHN0ID0gKHBpeGVsKikoKGNoYXIqKWRzdF9yb3cgKyAoeSkg KiBzdHJpZGUpICsgKHgpICsgYng7ICAgICAgICAgICAgICAgXAorICAgICAgICBub2lzZSA9IHJv dW5kMihzY2FsaW5nWyAqc3JjIF0gKiAoZ3JhaW4pLCBkYXRhLT5zY2FsaW5nX3NoaWZ0KTsgICAg ICAgICBcCisgICAgICAgICpkc3QgPSBhdl9jbGlwKCpzcmMgKyBub2lzZSwgbWluX3ZhbHVlLCBt YXhfdmFsdWUpOworCisgICAgICAgIGZvciAoaW50IHkgPSB5c3RhcnQ7IHkgPCBiaDsgeSsrKSB7 CisgICAgICAgICAgICAvLyBOb24tb3ZlcmxhcHBlZCBpbWFnZSByZWdpb24gKHN0cmFpZ2h0Zm9y d2FyZCkKKyAgICAgICAgICAgIGZvciAoaW50IHggPSB4c3RhcnQ7IHggPCBidzsgeCsrKSB7Cisg ICAgICAgICAgICAgICAgaW50IGdyYWluID0gRlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9m ZnNldHMsIDAsIDAsIDAsIDAsIHgsIHkpOworICAgICAgICAgICAgICAgIGFkZF9ub2lzZV95KHgs IHksIGdyYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNl IGZvciBvdmVybGFwcGVkIGNvbHVtbgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB4 c3RhcnQ7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBncmFpbiA9IEZVTkMoc2FtcGxlX2x1 dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCAwLCAwLCAwLCAwLCB4LCB5KTsKKyAgICAgICAgICAgICAg ICBpbnQgb2xkICAgPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zmc2V0cywgMCwgMCwg MSwgMCwgeCwgeSk7CisgICAgICAgICAgICAgICAgZ3JhaW4gPSByb3VuZDIob2xkICogd1t4XVsw XSArIGdyYWluICogd1t4XVsxXSwgNSk7CisgICAgICAgICAgICAgICAgZ3JhaW4gPSBhdl9jbGlw KGdyYWluLCBncmFpbl9taW4sIGdyYWluX21heCk7CisgICAgICAgICAgICAgICAgYWRkX25vaXNl X3koeCwgeSwgZ3JhaW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9y IChpbnQgeSA9IDA7IHkgPCB5c3RhcnQ7IHkrKykgeworICAgICAgICAgICAgLy8gU3BlY2lhbCBj YXNlIGZvciBvdmVybGFwcGVkIHJvdyAoc2FucyBjb3JuZXIpCisgICAgICAgICAgICBmb3IgKGlu dCB4ID0geHN0YXJ0OyB4IDwgYnc7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBncmFpbiA9 IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCAwLCAwLCAwLCAwLCB4LCB5KTsK KyAgICAgICAgICAgICAgICBpbnQgb2xkICAgPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwg b2Zmc2V0cywgMCwgMCwgMCwgMSwgeCwgeSk7CisgICAgICAgICAgICAgICAgZ3JhaW4gPSByb3Vu ZDIob2xkICogd1t5XVswXSArIGdyYWluICogd1t5XVsxXSwgNSk7CisgICAgICAgICAgICAgICAg Z3JhaW4gPSBhdl9jbGlwKGdyYWluLCBncmFpbl9taW4sIGdyYWluX21heCk7CisgICAgICAgICAg ICAgICAgYWRkX25vaXNlX3koeCwgeSwgZ3JhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGRvdWJseS1vdmVybGFwcGVkIGNvcm5lcgorICAgICAg ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB4c3RhcnQ7IHgrKykgeworICAgICAgICAgICAgICAg IGludCBncmFpbiA9IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCAwLCAwLCAw LCAwLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBpbnQgdG9wID0gRlVOQyhzYW1wbGVfbHV0KShn cmFpbl9sdXQsIG9mZnNldHMsIDAsIDAsIDAsIDEsIHgsIHkpOworICAgICAgICAgICAgICAgIGlu dCBvbGQgPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zmc2V0cywgMCwgMCwgMSwgMSwg eCwgeSk7CisKKyAgICAgICAgICAgICAgICAvLyBCbGVuZCB0aGUgdG9wIHBpeGVsIHdpdGggdGhl IHRvcCBsZWZ0IGJsb2NrCisgICAgICAgICAgICAgICAgdG9wID0gcm91bmQyKG9sZCAqIHdbeF1b MF0gKyB0b3AgKiB3W3hdWzFdLCA1KTsKKyAgICAgICAgICAgICAgICB0b3AgPSBhdl9jbGlwKHRv cCwgZ3JhaW5fbWluLCBncmFpbl9tYXgpOworCisgICAgICAgICAgICAgICAgLy8gQmxlbmQgdGhl IGN1cnJlbnQgcGl4ZWwgd2l0aCB0aGUgbGVmdCBibG9jaworICAgICAgICAgICAgICAgIG9sZCA9 IEZVTkMoc2FtcGxlX2x1dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCAwLCAwLCAxLCAwLCB4LCB5KTsK KyAgICAgICAgICAgICAgICBncmFpbiA9IHJvdW5kMihvbGQgKiB3W3hdWzBdICsgZ3JhaW4gKiB3 W3hdWzFdLCA1KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IGF2X2NsaXAoZ3JhaW4sIGdyYWlu X21pbiwgZ3JhaW5fbWF4KTsKKworICAgICAgICAgICAgICAgIC8vIE1peCB0aGUgcm93IHJvd3Mg dG9nZXRoZXIgYW5kIGFwcGx5IGdyYWluCisgICAgICAgICAgICAgICAgZ3JhaW4gPSByb3VuZDIo dG9wICogd1t5XVswXSArIGdyYWluICogd1t5XVsxXSwgNSk7CisgICAgICAgICAgICAgICAgZ3Jh aW4gPSBhdl9jbGlwKGdyYWluLCBncmFpbl9taW4sIGdyYWluX21heCk7CisgICAgICAgICAgICAg ICAgYWRkX25vaXNlX3koeCwgeSwgZ3JhaW4pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZAorRlVOQyhmZ3V2XzMyeDMyeG5fYykocGl4ZWwgKmNvbnN0 IGRzdF9yb3csIGNvbnN0IHBpeGVsICpjb25zdCBzcmNfcm93LAorICAgICAgICAgICAgICAgICAg ICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSwgY29uc3QgQVZGaWxtR3JhaW5QYXJhbXMgKmNvbnN0 IHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwdywgY29uc3QgdWlu dDhfdCBzY2FsaW5nW1NDQUxJTkdfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBl bnRyeSBncmFpbl9sdXRbXVtHUkFJTl9XSURUSF0sIGNvbnN0IGludCBiaCwKKyAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGludCByb3dfbnVtLCBjb25zdCBwaXhlbCAqY29uc3QgbHVtYV9yb3cs CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdHJkaWZmX3QgbHVtYV9zdHJpZGUsIGNvbnN0 IGludCB1diwgY29uc3QgaW50IGlzX2lkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50 IHN4LCBjb25zdCBpbnQgc3kgSEJEX0RFQ0wpCit7CisgICAgY29uc3QgQVZGaWxtR3JhaW5BT01Q YXJhbXMgKmNvbnN0IGRhdGEgPSAmcGFyYW1zLT5jb2RlYy5hb207CisgICAgY29uc3QgaW50IHJv d3MgPSAxICsgKGRhdGEtPm92ZXJsYXBfZmxhZyAmJiByb3dfbnVtID4gMCk7CisgICAgY29uc3Qg aW50IGJpdGRlcHRoX21pbl84ID0gYml0ZGVwdGggLSA4OworICAgIGNvbnN0IGludCBncmFpbl9j dHIgPSAxMjggPDwgYml0ZGVwdGhfbWluXzg7CisgICAgY29uc3QgaW50IGdyYWluX21pbiA9IC1n cmFpbl9jdHIsIGdyYWluX21heCA9IGdyYWluX2N0ciAtIDE7CisgICAgdW5zaWduZWQgc2VlZFsy XTsKKyAgICBpbnQgb2Zmc2V0c1syIC8qIGNvbCBvZmZzZXQgKi9dWzIgLyogcm93IG9mZnNldCAq L107CisKKyAgICBpbnQgbWluX3ZhbHVlLCBtYXhfdmFsdWU7CisgICAgaWYgKGRhdGEtPmxpbWl0 X291dHB1dF9yYW5nZSkgeworICAgICAgICBtaW5fdmFsdWUgPSAxNiA8PCBiaXRkZXB0aF9taW5f ODsKKyAgICAgICAgbWF4X3ZhbHVlID0gKGlzX2lkID8gMjM1IDogMjQwKSA8PCBiaXRkZXB0aF9t aW5fODsKKyAgICB9IGVsc2UgeworICAgICAgICBtaW5fdmFsdWUgPSAwOworICAgICAgICBtYXhf dmFsdWUgPSBiaXRkZXB0aF9tYXg7CisgICAgfQorCisgICAgLy8gc2VlZFswXSBjb250YWlucyB0 aGUgY3VycmVudCByb3csIHNlZWRbMV0gY29udGFpbnMgdGhlIHByZXZpb3VzCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKKyAgICAgICAgc2VlZFtpXSA9IHBhcmFtcy0+c2Vl ZDsKKyAgICAgICAgc2VlZFtpXSBePSAoKChyb3dfbnVtIC0gaSkgKiAzNyAgKyAxNzgpICYgMHhG RikgPDwgODsKKyAgICAgICAgc2VlZFtpXSBePSAoKChyb3dfbnVtIC0gaSkgKiAxNzMgKyAxMDUp ICYgMHhGRik7CisgICAgfQorCisgICAgYXZfYXNzZXJ0MShzdHJpZGUgJSAoRkdfQkxPQ0tfU0la RSAqIHNpemVvZihwaXhlbCkpID09IDApOworCisgICAgLy8gcHJvY2VzcyB0aGlzIHJvdyBpbiBG R19CTE9DS19TSVpFXjIgYmxvY2tzIChzdWJzYW1wbGVkKQorICAgIGZvciAodW5zaWduZWQgYngg PSAwOyBieCA8IHB3OyBieCArPSBGR19CTE9DS19TSVpFID4+IHN4KSB7CisgICAgICAgIGNvbnN0 IGludCBidyA9IEZGTUlOKEZHX0JMT0NLX1NJWkUgPj4gc3gsIChpbnQpKHB3IC0gYngpKTsKKyAg ICAgICAgaW50IHZhbCwgbHgsIGx5LCBub2lzZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnNyYywg Kmx1bWE7CisgICAgICAgIHBpeGVsICpkc3QsIGF2ZzsKKworICAgICAgICAvLyB4L3kgYmxvY2sg b2Zmc2V0cyB0byBjb21wZW5zYXRlIGZvciBvdmVybGFwcGVkIHJlZ2lvbnMKKyAgICAgICAgY29u c3QgaW50IHlzdGFydCA9IGRhdGEtPm92ZXJsYXBfZmxhZyAmJiByb3dfbnVtID8gRkZNSU4oMiA+ PiBzeSwgYmgpIDogMDsKKyAgICAgICAgY29uc3QgaW50IHhzdGFydCA9IGRhdGEtPm92ZXJsYXBf ZmxhZyAmJiBieCAgICAgID8gRkZNSU4oMiA+PiBzeCwgYncpIDogMDsKKworICAgICAgICBzdGF0 aWMgY29uc3QgaW50IHdbMiAvKiBzdWIgKi9dWzIgLyogb2ZmICovXVsyXSA9IHsKKyAgICAgICAg ICAgIHsgeyAyNywgMTcgfSwgeyAxNywgMjcgfSB9LAorICAgICAgICAgICAgeyB7IDIzLCAyMiB9 IH0sCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGRhdGEtPm92ZXJsYXBfZmxhZyAmJiBieCkg eworICAgICAgICAgICAgLy8gc2hpZnQgcHJldmlvdXMgb2Zmc2V0cyBsZWZ0CisgICAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKKyAgICAgICAgICAgICAgICBvZmZzZXRz WzFdW2ldID0gb2Zmc2V0c1swXVtpXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHVwZGF0ZSBj dXJyZW50IG9mZnNldHMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisg ICAgICAgICAgICBvZmZzZXRzWzBdW2ldID0gZ2V0X3JhbmRvbV9udW1iZXIoOCwgJnNlZWRbaV0p OworCisjZGVmaW5lIGFkZF9ub2lzZV91dih4LCB5LCBncmFpbikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGx4ID0gKGJ4ICsgeCkg PDwgc3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgbHkgPSB5IDw8IHN5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBsdW1hID0gKGNvbnN0IHBpeGVs KikoKGNvbnN0IGNoYXIqKWx1bWFfcm93ICsgbHkgKiBsdW1hX3N0cmlkZSkgKyBseDtcCisgICAg ICAgICAgICBhdmcgPSBsdW1hWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChzeCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgICAgIGF2ZyA9IChhdmcgKyBsdW1hWzFdICsgMSkgPj4gMTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzcmMgPSAoY29uc3QgcGl4ZWwqKSgoY29uc3Qg Y2hhciAqKXNyY19yb3cgKyAoeSkgKiBzdHJpZGUpICsgYnggKyAoeCk7XAorICAgICAgICAgICAg ZHN0ID0gKHBpeGVsICopICgoY2hhciAqKSBkc3Rfcm93ICsgKHkpICogc3RyaWRlKSArIGJ4ICsg KHgpOyAgICAgICBcCisgICAgICAgICAgICB2YWwgPSBhdmc7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICgh ZGF0YS0+Y2hyb21hX3NjYWxpbmdfZnJvbV9sdW1hKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgIGNvbnN0IGludCBjb21iaW5lZCA9IGF2ZyAqIGRhdGEt PnV2X211bHRfbHVtYVt1dl0gKyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqc3JjICogZGF0YS0+dXZfbXVsdFt1dl07ICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgICAgICAgICB2YWwgPSBhdl9jbGlwKCAoY29tYmluZWQgPj4gNikgKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChkYXRhLT51dl9vZmZzZXRbdXZdICogKDEgPDwgYml0ZGVwdGhfbWluXzgpKSwgICBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYml0ZGVwdGhfbWF4ICk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgbm9pc2UgPSByb3VuZDIoc2NhbGluZ1sgdmFsIF0gKiAoZ3JhaW4pLCBkYXRhLT5zY2Fs aW5nX3NoaWZ0KTsgICAgICBcCisgICAgICAgICAgICAqZHN0ID0gYXZfY2xpcCgqc3JjICsgbm9p c2UsIG1pbl92YWx1ZSwgbWF4X3ZhbHVlKTsKKworICAgICAgICBmb3IgKGludCB5ID0geXN0YXJ0 OyB5IDwgYmg7IHkrKykgeworICAgICAgICAgICAgLy8gTm9uLW92ZXJsYXBwZWQgaW1hZ2UgcmVn aW9uIChzdHJhaWdodGZvcndhcmQpCisgICAgICAgICAgICBmb3IgKGludCB4ID0geHN0YXJ0OyB4 IDwgYnc7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBncmFpbiA9IEZVTkMoc2FtcGxlX2x1 dCkoZ3JhaW5fbHV0LCBvZmZzZXRzLCBzeCwgc3ksIDAsIDAsIHgsIHkpOworICAgICAgICAgICAg ICAgIGFkZF9ub2lzZV91dih4LCB5LCBncmFpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Igb3ZlcmxhcHBlZCBjb2x1bW4KKyAgICAgICAgICAgIGZv ciAoaW50IHggPSAwOyB4IDwgeHN0YXJ0OyB4KyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZ3Jh aW4gPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zmc2V0cywgc3gsIHN5LCAwLCAwLCB4 LCB5KTsKKyAgICAgICAgICAgICAgICBpbnQgb2xkICAgPSBGVU5DKHNhbXBsZV9sdXQpKGdyYWlu X2x1dCwgb2Zmc2V0cywgc3gsIHN5LCAxLCAwLCB4LCB5KTsKKyAgICAgICAgICAgICAgICBncmFp biA9IHJvdW5kMihvbGQgKiB3W3N4XVt4XVswXSArIGdyYWluICogd1tzeF1beF1bMV0sIDUpOwor ICAgICAgICAgICAgICAgIGdyYWluID0gYXZfY2xpcChncmFpbiwgZ3JhaW5fbWluLCBncmFpbl9t YXgpOworICAgICAgICAgICAgICAgIGFkZF9ub2lzZV91dih4LCB5LCBncmFpbik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHlzdGFydDsg eSsrKSB7CisgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIG92ZXJsYXBwZWQgcm93IChz YW5zIGNvcm5lcikKKyAgICAgICAgICAgIGZvciAoaW50IHggPSB4c3RhcnQ7IHggPCBidzsgeCsr KSB7CisgICAgICAgICAgICAgICAgaW50IGdyYWluID0gRlVOQyhzYW1wbGVfbHV0KShncmFpbl9s dXQsIG9mZnNldHMsIHN4LCBzeSwgMCwgMCwgeCwgeSk7CisgICAgICAgICAgICAgICAgaW50IG9s ZCAgID0gRlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9mZnNldHMsIHN4LCBzeSwgMCwgMSwg eCwgeSk7CisgICAgICAgICAgICAgICAgZ3JhaW4gPSByb3VuZDIob2xkICogd1tzeV1beV1bMF0g KyBncmFpbiAqIHdbc3ldW3ldWzFdLCA1KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IGF2X2Ns aXAoZ3JhaW4sIGdyYWluX21pbiwgZ3JhaW5fbWF4KTsKKyAgICAgICAgICAgICAgICBhZGRfbm9p c2VfdXYoeCwgeSwgZ3JhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTcGVj aWFsIGNhc2UgZm9yIGRvdWJseS1vdmVybGFwcGVkIGNvcm5lcgorICAgICAgICAgICAgZm9yIChp bnQgeCA9IDA7IHggPCB4c3RhcnQ7IHgrKykgeworICAgICAgICAgICAgICAgIGludCB0b3AgPSBG VU5DKHNhbXBsZV9sdXQpKGdyYWluX2x1dCwgb2Zmc2V0cywgc3gsIHN5LCAwLCAxLCB4LCB5KTsK KyAgICAgICAgICAgICAgICBpbnQgb2xkID0gRlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9m ZnNldHMsIHN4LCBzeSwgMSwgMSwgeCwgeSk7CisgICAgICAgICAgICAgICAgaW50IGdyYWluID0g RlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9mZnNldHMsIHN4LCBzeSwgMCwgMCwgeCwgeSk7 CisKKyAgICAgICAgICAgICAgICAvLyBCbGVuZCB0aGUgdG9wIHBpeGVsIHdpdGggdGhlIHRvcCBs ZWZ0IGJsb2NrCisgICAgICAgICAgICAgICAgdG9wID0gcm91bmQyKG9sZCAqIHdbc3hdW3hdWzBd ICsgdG9wICogd1tzeF1beF1bMV0sIDUpOworICAgICAgICAgICAgICAgIHRvcCA9IGF2X2NsaXAo dG9wLCBncmFpbl9taW4sIGdyYWluX21heCk7CisKKyAgICAgICAgICAgICAgICAvLyBCbGVuZCB0 aGUgY3VycmVudCBwaXhlbCB3aXRoIHRoZSBsZWZ0IGJsb2NrCisgICAgICAgICAgICAgICAgb2xk ID0gRlVOQyhzYW1wbGVfbHV0KShncmFpbl9sdXQsIG9mZnNldHMsIHN4LCBzeSwgMSwgMCwgeCwg eSk7CisgICAgICAgICAgICAgICAgZ3JhaW4gPSByb3VuZDIob2xkICogd1tzeF1beF1bMF0gKyBn cmFpbiAqIHdbc3hdW3hdWzFdLCA1KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IGF2X2NsaXAo Z3JhaW4sIGdyYWluX21pbiwgZ3JhaW5fbWF4KTsKKworICAgICAgICAgICAgICAgIC8vIE1peCB0 aGUgcm93IHJvd3MgdG9nZXRoZXIgYW5kIGFwcGx5IHRvIGltYWdlCisgICAgICAgICAgICAgICAg Z3JhaW4gPSByb3VuZDIodG9wICogd1tzeV1beV1bMF0gKyBncmFpbiAqIHdbc3ldW3ldWzFdLCA1 KTsKKyAgICAgICAgICAgICAgICBncmFpbiA9IGF2X2NsaXAoZ3JhaW4sIGdyYWluX21pbiwgZ3Jh aW5fbWF4KTsKKyAgICAgICAgICAgICAgICBhZGRfbm9pc2VfdXYoeCwgeSwgZ3JhaW4pOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGdlbmVy YXRlX3NjYWxpbmcpKGNvbnN0IHVpbnQ4X3QgcG9pbnRzW11bMl0sIGNvbnN0IGludCBudW0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2NhbGluZ1tTQ0FMSU5H X1NJWkVdIEhCRF9ERUNMKQoreworICAgIGNvbnN0IGludCBzaGlmdF94ID0gYml0ZGVwdGggLSA4 OworICAgIGNvbnN0IGludCBzY2FsaW5nX3NpemUgPSAxIDw8IGJpdGRlcHRoOworICAgIGNvbnN0 IGludCBtYXhfdmFsdWUgPSBwb2ludHNbbnVtIC0gMV1bMF0gPDwgc2hpZnRfeDsKKyAgICBhdl9h c3NlcnQwKHNjYWxpbmdfc2l6ZSA8PSBTQ0FMSU5HX1NJWkUpOworCisgICAgaWYgKG51bSA9PSAw KSB7CisgICAgICAgIG1lbXNldChzY2FsaW5nLCAwLCBzY2FsaW5nX3NpemUpOworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgLy8gRmlsbCB1cCB0aGUgcHJlY2VkaW5nIGVudHJpZXMgd2l0 aCB0aGUgaW5pdGlhbCB2YWx1ZQorICAgIG1lbXNldChzY2FsaW5nLCBwb2ludHNbMF1bMV0sIHBv aW50c1swXVswXSA8PCBzaGlmdF94KTsKKworICAgIC8vIExpbmVhcmx5IGludGVycG9sYXRlIHRo ZSB2YWx1ZXMgaW4gdGhlIG1pZGRsZQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtIC0gMTsg aSsrKSB7CisgICAgICAgIGNvbnN0IGludCBieCA9IHBvaW50c1tpXVswXTsKKyAgICAgICAgY29u c3QgaW50IGJ5ID0gcG9pbnRzW2ldWzFdOworICAgICAgICBjb25zdCBpbnQgZXggPSBwb2ludHNb aSsxXVswXTsKKyAgICAgICAgY29uc3QgaW50IGV5ID0gcG9pbnRzW2krMV1bMV07CisgICAgICAg IGNvbnN0IGludCBkeCA9IGV4IC0gYng7CisgICAgICAgIGNvbnN0IGludCBkeSA9IGV5IC0gYnk7 CisgICAgICAgIGNvbnN0IGludCBkZWx0YSA9IGR5ICogKCgweDEwMDAwICsgKGR4ID4+IDEpKSAv IGR4KTsKKyAgICAgICAgYXZfYXNzZXJ0MShkeCA+IDApOworICAgICAgICBmb3IgKGludCB4ID0g MCwgZCA9IDB4ODAwMDsgeCA8IGR4OyB4KyspIHsKKyAgICAgICAgICAgIHNjYWxpbmdbKGJ4ICsg eCkgPDwgc2hpZnRfeF0gPSBieSArIChkID4+IDE2KTsKKyAgICAgICAgICAgIGQgKz0gZGVsdGE7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaWxsIHVwIHRoZSByZW1haW5pbmcgZW50cmll cyB3aXRoIHRoZSBmaW5hbCB2YWx1ZQorICAgIG1lbXNldCgmc2NhbGluZ1ttYXhfdmFsdWVdLCBw b2ludHNbbnVtIC0gMV1bMV0sIHNjYWxpbmdfc2l6ZSAtIG1heF92YWx1ZSk7CisKKyNpZiBCSVRf REVQVEggIT0gOAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtIC0gMTsgaSsrKSB7CisgICAg ICAgIGNvbnN0IGludCBwYWQgPSAxIDw8IHNoaWZ0X3gsIHJuZCA9IHBhZCA+PiAxOworICAgICAg ICBjb25zdCBpbnQgYnggPSBwb2ludHNbaV1bMF0gPDwgc2hpZnRfeDsKKyAgICAgICAgY29uc3Qg aW50IGV4ID0gcG9pbnRzW2krMV1bMF0gPDwgc2hpZnRfeDsKKyAgICAgICAgY29uc3QgaW50IGR4 ID0gZXggLSBieDsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkeDsgeCArPSBwYWQpIHsK KyAgICAgICAgICAgIGNvbnN0IGludCByYW5nZSA9IHNjYWxpbmdbYnggKyB4ICsgcGFkXSAtIHNj YWxpbmdbYnggKyB4XTsKKyAgICAgICAgICAgIGZvciAoaW50IG4gPSAxLCByID0gcm5kOyBuIDwg cGFkOyBuKyspIHsKKyAgICAgICAgICAgICAgICByICs9IHJhbmdlOworICAgICAgICAgICAgICAg IHNjYWxpbmdbYnggKyB4ICsgbl0gPSBzY2FsaW5nW2J4ICsgeF0gKyAociA+PiBzaGlmdF94KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgYXZf YWx3YXlzX2lubGluZSB2b2lkCitGVU5DKGFwcGx5X2dyYWluX3JvdykoQVZGcmFtZSAqb3V0LCBj b25zdCBBVkZyYW1lICppbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc3NfeCwg Y29uc3QgaW50IHNzX3ksCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBzY2Fs aW5nWzNdW1NDQUxJTkdfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkg Z3JhaW5fbHV0WzNdW0dSQUlOX0hFSUdIVCsxXVtHUkFJTl9XSURUSF0sCisgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQVZGaWxtR3JhaW5QYXJhbXMgKnBhcmFtcywKKyAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBpbnQgcm93IEhCRF9ERUNMKQoreworICAgIC8vIFN5bnRoZXNpemUgZ3Jh aW4gZm9yIHRoZSBhZmZlY3RlZCBwbGFuZXMKKyAgICBjb25zdCBBVkZpbG1HcmFpbkFPTVBhcmFt cyAqY29uc3QgZGF0YSA9ICZwYXJhbXMtPmNvZGVjLmFvbTsKKyAgICBjb25zdCBpbnQgY3B3ID0g KG91dC0+d2lkdGggKyBzc194KSA+PiBzc194OworICAgIGNvbnN0IGludCBpc19pZCA9IG91dC0+ Y29sb3JzcGFjZSA9PSBBVkNPTF9TUENfUkdCOworICAgIGNvbnN0IGludCBiaCA9IChGRk1JTihv dXQtPmhlaWdodCAtIHJvdyAqIEZHX0JMT0NLX1NJWkUsIEZHX0JMT0NLX1NJWkUpICsgc3NfeSkg Pj4gc3NfeTsKKyAgICBjb25zdCBwdHJkaWZmX3QgdXZfb2ZmID0gcm93ICogRkdfQkxPQ0tfU0la RSAqIG91dC0+bGluZXNpemVbMV0gPj4gc3NfeTsKKyAgICBwaXhlbCAqY29uc3QgbHVtYV9zcmMg PSAocGl4ZWwgKikKKyAgICAgICAgKChjaGFyICopIGluLT5kYXRhWzBdICsgcm93ICogRkdfQkxP Q0tfU0laRSAqIGluLT5saW5lc2l6ZVswXSk7CisKKyAgICBpZiAoZGF0YS0+bnVtX3lfcG9pbnRz KSB7CisgICAgICAgIGNvbnN0IGludCBiaCA9IEZGTUlOKG91dC0+aGVpZ2h0IC0gcm93ICogRkdf QkxPQ0tfU0laRSwgRkdfQkxPQ0tfU0laRSk7CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBvZmYg PSByb3cgKiBGR19CTE9DS19TSVpFICogb3V0LT5saW5lc2l6ZVswXTsKKyAgICAgICAgRlVOQyhm Z3lfMzJ4MzJ4bl9jKSgocGl4ZWwgKikgKChjaGFyICopIG91dC0+ZGF0YVswXSArIG9mZiksIGx1 bWFfc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC0+bGluZXNpemVbMF0sIHBh cmFtcywgb3V0LT53aWR0aCwgc2NhbGluZ1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncmFpbl9sdXRbMF0sIGJoLCByb3cgSEJEX0NBTEwpOworICAgIH0KKworICAgIGlmICghZGF0 YS0+bnVtX3V2X3BvaW50c1swXSAmJiAhZGF0YS0+bnVtX3V2X3BvaW50c1sxXSAmJgorICAgICAg ICAhZGF0YS0+Y2hyb21hX3NjYWxpbmdfZnJvbV9sdW1hKQorICAgIHsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIC8vIGV4dGVuZCBwYWRkaW5nIHBpeGVscworICAgIGlmIChvdXQtPndp ZHRoICYgc3NfeCkgeworICAgICAgICBwaXhlbCAqcHRyID0gbHVtYV9zcmM7CisgICAgICAgIGZv ciAoaW50IHkgPSAwOyB5IDwgYmg7IHkrKykgeworICAgICAgICAgICAgcHRyW291dC0+d2lkdGhd ID0gcHRyW291dC0+d2lkdGggLSAxXTsKKyAgICAgICAgICAgIHB0ciA9IChwaXhlbCAqKSAoKGNo YXIgKikgcHRyICsgKGluLT5saW5lc2l6ZVswXSA8PCBzc195KSk7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBpZiAoZGF0YS0+Y2hyb21hX3NjYWxpbmdfZnJvbV9sdW1hKSB7CisgICAgICAgIGZv ciAoaW50IHBsID0gMDsgcGwgPCAyOyBwbCsrKQorICAgICAgICAgICAgRlVOQyhmZ3V2XzMyeDMy eG5fYykoKHBpeGVsICopICgoY2hhciAqKSBvdXQtPmRhdGFbMSArIHBsXSArIHV2X29mZiksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgcGl4ZWwgKikgKChjb25zdCBj aGFyICopIGluLT5kYXRhWzEgKyBwbF0gKyB1dl9vZmYpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW4tPmxpbmVzaXplWzFdLCBwYXJhbXMsIGNwdywgc2NhbGluZ1swXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYWluX2x1dFsxICsgcGxdLCBiaCwgcm93 LCBsdW1hX3NyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLT5saW5lc2l6 ZVswXSwgcGwsIGlzX2lkLCBzc194LCBzc195IEhCRF9DQUxMKTsKKyAgICB9IGVsc2UgeworICAg ICAgICBmb3IgKGludCBwbCA9IDA7IHBsIDwgMjsgcGwrKykgeworICAgICAgICAgICAgaWYgKGRh dGEtPm51bV91dl9wb2ludHNbcGxdKSB7CisgICAgICAgICAgICAgICAgRlVOQyhmZ3V2XzMyeDMy eG5fYykoKHBpeGVsICopICgoY2hhciAqKSBvdXQtPmRhdGFbMSArIHBsXSArIHV2X29mZiksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHBpeGVsICopICgoY29u c3QgY2hhciAqKSBpbi0+ZGF0YVsxICsgcGxdICsgdXZfb2ZmKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbi0+bGluZXNpemVbMV0sIHBhcmFtcywgY3B3LCBzY2FsaW5n WzEgKyBwbF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhaW5fbHV0 WzEgKyBwbF0sIGJoLCByb3csIGx1bWFfc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluLT5saW5lc2l6ZVswXSwgcGwsIGlzX2lkLCBzc194LCBzc195IEhCRF9DQUxM KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludCBGVU5D KGFwcGx5X2ZpbG1fZ3JhaW4pKEFWRnJhbWUgKm91dF9mcmFtZSwgY29uc3QgQVZGcmFtZSAqaW5f ZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGaWxtR3Jh aW5QYXJhbXMgKnBhcmFtcyBIQkRfREVDTCkKK3sKKyAgICBlbnRyeSBncmFpbl9sdXRbM11bR1JB SU5fSEVJR0hUICsgMV1bR1JBSU5fV0lEVEhdOworICAgIHVpbnQ4X3Qgc2NhbGluZ1szXVtTQ0FM SU5HX1NJWkVdOworCisgICAgY29uc3QgQVZGaWxtR3JhaW5BT01QYXJhbXMgKmNvbnN0IGRhdGEg PSAmcGFyYW1zLT5jb2RlYy5hb207CisgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNj ID0gYXZfcGl4X2ZtdF9kZXNjX2dldChvdXRfZnJhbWUtPmZvcm1hdCk7CisgICAgY29uc3QgaW50 IHJvd3MgPSBBVl9DRUlMX1JTSElGVChvdXRfZnJhbWUtPmhlaWdodCwgNSk7IC8qIGxvZzIoRkdf QkxPQ0tfU0laRSkgKi8KKyAgICBjb25zdCBpbnQgc3VieCA9IGRlc2MtPmxvZzJfY2hyb21hX3cs IHN1YnkgPSBkZXNjLT5sb2cyX2Nocm9tYV9oOworCisgICAgLy8gR2VuZXJhdGUgZ3JhaW4gTFVU cyBhcyBuZWVkZWQKKyAgICBGVU5DKGdlbmVyYXRlX2dyYWluX3lfYykoZ3JhaW5fbHV0WzBdLCBw YXJhbXMgSEJEX0NBTEwpOworICAgIGlmIChkYXRhLT5udW1fdXZfcG9pbnRzWzBdIHx8IGRhdGEt PmNocm9tYV9zY2FsaW5nX2Zyb21fbHVtYSkKKyAgICAgICAgRlVOQyhnZW5lcmF0ZV9ncmFpbl91 dl9jKShncmFpbl9sdXRbMV0sIGdyYWluX2x1dFswXSwgcGFyYW1zLCAwLCBzdWJ4LCBzdWJ5IEhC RF9DQUxMKTsKKyAgICBpZiAoZGF0YS0+bnVtX3V2X3BvaW50c1sxXSB8fCBkYXRhLT5jaHJvbWFf c2NhbGluZ19mcm9tX2x1bWEpCisgICAgICAgIEZVTkMoZ2VuZXJhdGVfZ3JhaW5fdXZfYykoZ3Jh aW5fbHV0WzJdLCBncmFpbl9sdXRbMF0sIHBhcmFtcywgMSwgc3VieCwgc3VieSBIQkRfQ0FMTCk7 CisKKyAgICAvLyBHZW5lcmF0ZSBzY2FsaW5nIExVVHMgYXMgbmVlZGVkCisgICAgaWYgKGRhdGEt Pm51bV95X3BvaW50cyB8fCBkYXRhLT5jaHJvbWFfc2NhbGluZ19mcm9tX2x1bWEpCisgICAgICAg IEZVTkMoZ2VuZXJhdGVfc2NhbGluZykoZGF0YS0+eV9wb2ludHMsIGRhdGEtPm51bV95X3BvaW50 cywgc2NhbGluZ1swXSBIQkRfQ0FMTCk7CisgICAgaWYgKGRhdGEtPm51bV91dl9wb2ludHNbMF0p CisgICAgICAgIEZVTkMoZ2VuZXJhdGVfc2NhbGluZykoZGF0YS0+dXZfcG9pbnRzWzBdLCBkYXRh LT5udW1fdXZfcG9pbnRzWzBdLCBzY2FsaW5nWzFdIEhCRF9DQUxMKTsKKyAgICBpZiAoZGF0YS0+ bnVtX3V2X3BvaW50c1sxXSkKKyAgICAgICAgRlVOQyhnZW5lcmF0ZV9zY2FsaW5nKShkYXRhLT51 dl9wb2ludHNbMV0sIGRhdGEtPm51bV91dl9wb2ludHNbMV0sIHNjYWxpbmdbMl0gSEJEX0NBTEwp OworCisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHsKKyAgICAgICAg RlVOQyhhcHBseV9ncmFpbl9yb3cpKG91dF9mcmFtZSwgaW5fZnJhbWUsIHN1YngsIHN1YnksIHNj YWxpbmcsIGdyYWluX2x1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcywg cm93IEhCRF9DQUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KLS0gCjIuNDQuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5r IGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo=