From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-relay-3.sys.kth.se (smtp-relay-3.sys.kth.se [130.237.32.48]) by sourceware.org (Postfix) with ESMTPS id 23B6A3858001; Tue, 14 Dec 2021 17:22:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 23B6A3858001 Received: from exdb2.ug.kth.se (exdb2.ug.kth.se [192.168.32.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-relay-3.sys.kth.se (Postfix) with ESMTPS id 4JD4vg1bF3zPRyC; Tue, 14 Dec 2021 18:22:54 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-3.sys.kth.se 4JD4vg1bF3zPRyC Received: from exdb6.ug.kth.se (192.168.32.61) by exdb2.ug.kth.se (192.168.32.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.14; Tue, 14 Dec 2021 18:22:54 +0100 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0986.014; Tue, 14 Dec 2021 18:22:54 +0100 From: Petter Tomner To: "jit@gcc.gnu.org" , "gcc-patches@gcc.gnu.org" Subject: [commited] jit: Support for global rvalue initialization and constructors Thread-Topic: [commited] jit: Support for global rvalue initialization and constructors Thread-Index: AQHX8Q7ixdlNbnBpSk+COz6SqDTZPg== Date: Tue, 14 Dec 2021 17:22:53 +0000 Message-ID: <8c135550d44f43b9b80c2a3a50939128@kth.se> Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.32.250] Content-Type: multipart/mixed; boundary="_002_8c135550d44f43b9b80c2a3a50939128kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Dec 2021 17:23:04 -0000 --_002_8c135550d44f43b9b80c2a3a50939128kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi! I have pushed the patch for rvalue initialization and ctors for libgccjit, = for ABI 19. Please see attached patch. Regards, Petter = --_002_8c135550d44f43b9b80c2a3a50939128kthse_ Content-Type: text/x-patch; name="0001-Add-support-for-global-rvalue-initialization-and-con.patch" Content-Description: 0001-Add-support-for-global-rvalue-initialization-and-con.patch Content-Disposition: attachment; filename="0001-Add-support-for-global-rvalue-initialization-and-con.patch"; size=156955; creation-date="Tue, 14 Dec 2021 17:22:20 GMT"; modification-date="Tue, 14 Dec 2021 17:22:20 GMT" Content-Transfer-Encoding: base64 RnJvbSAzNzM2ODM3ODA2ZmRiMjZkYWE1MTMwMGJlZTE1NTRiZWY4OWRiOWZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBN b24sIDI5IE5vdiAyMDIxIDIwOjQ0OjA3ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBv cnQgZm9yIGdsb2JhbCBydmFsdWUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbnN0cnVjdG9ycwoKVGhp cyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGluaXRpYWxpemF0aW9uIG9mIGdsb2JhbCB2YXJpYWJs ZXMKd2l0aCBydmFsdWVzIGFuZCBjcmVhdGluZyBjb25zdHJ1Y3RvcnMgZm9yIGFycmF5LCBzdHJ1 Y3QgYW5kCnVuaW9uIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIHJ2YWx1ZXMuCgpTaWduZWQt b2ZmLWJ5OgoyMDIxLTEyLTE0CVBldHRlciBUb21uZXIJPHRvbW5lckBrdGguc2U+CgpnY2Mvaml0 LwoJKiBqaXQtY29tbW9uLmg6IE5ldyBlbnVtCgkqIGppdC1wbGF5YmFjay5jIDogRm9sZGluZyBh biBzZXR0aW5nIGludGl0aWFsCgkoZ2xvYmFsX25ld19kZWNsKSA6IEhhbmRsZSBjb25zdCBnbG9i YWwgZ2VuZXJhdGlvbgoJKG5ld19nbG9iYWwpIDogTmV3IGZsYWcKCShnbG9iYWxfc2V0X2luaXRf cnZhbHVlKSA6IE5ldwoJKG5ld19jdG9yKSA6IE5ldwoJKG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQp IDogRmxhZwoJKGFzX3RydXRoX3ZhbHVlKSA6IEZvbGQKCShuZXdfdW5hcnlfb3ApIDogRm9sZAoJ KG5ld19iaW5hcnlfb3ApIDogRm9sZAoJKG5ld19jb21wYXJpc29uKSA6IEZvbGQKCShuZXdfYXJy YXlfYWNjZXNzKSA6IEZvbGQKCShuZXdfZGVyZWZlcmVuY2UpIDogRm9sZAoJKGdldF9hZGRyZXNz KSA6IEZvbGQKCSogaml0LXBsYXliYWNrLmggOgoJKGdsb2JhbF9zZXRfaW5pdF9ydmFsdWUpIDog TmV3CgkobmV3X2N0b3IpIDogTmV3CgkqIGppdC1yZWNvcmRpbmcuYyA6CgkqIGppdC1yZWNvcmRp bmcuaCA6CgkobmV3X2dsb2JhbF9pbml0X3J2YWx1ZSkgOiBOZXcKCShuZXdfY3RvcikgOiBOZXcK CShjdG9yKSA6IE5ldywgaW5oZXJpdHMgcnZhbHVlCgkoZ2xvYmFsX2luaXRfcnZhbHVlKSA6IE5l dywgaW5oZXJpdHMgbWVtZW50bwoJKHR5cGU6OmlzX3VuaW9uKSA6IE5ldwoJKiBsaWJnY2NqaXQr Ky5oIDogTmV3IGVudHJ5cG9pbnRzLCBzZWUgQy1oZWFkZXIKCSogbGliZ2Njaml0LmMgOiBTZWUg LmgKCSogbGliZ2Njaml0LmggOiBOZXcgZW50cnlwb2ludHMKCShnY2Nfaml0X2NvbnRleHRfbmV3 X2FycmF5X2NvbnN0cnVjdG9yKSA6IE5ldwoJKGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2Nv bnN0cnVjdG9yKSA6IE5ldwoJKGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3Ip IDogTmV3CgkoZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSkgOiBOZXcKCShM SUJHQ0NKSVRfSEFWRV9DVE9SUykgOiBOZXcgZmV1dHVyZSBtYWNybwoJKiBsaWJnY2NqaXQubWFw IDogTmV3IGVudHJ5cG9pbnRzIGFkZGVkIHRvIEFCSSAxOQoJKiBkb2NzL3RvcGljcy9leHByZXNz aW9ucy5yc3QgOiBVcGRhdGVkIGRvY3MKCmdjYy90ZXN0c3VpdGUvCgkqIGppdC5kZy9hbGwtbm9u LWZhaWxpbmctdGVzdHMuaDogQWRkZWQgdHdvIHRlc3RzCgkqIGppdC5kZy90ZXN0LWVycm9yLWN0 b3ItYXJyYXktd3Jvbmctb2JqLmM6IE5ldwoJKiBqaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVj dC10b28tYmlnLmM6IE5ldwoJKiBqaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy1m aWVsZC1vYmouYzogTmV3CgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5 cGUuYzogTmV3CgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5cGUyLmMK CSogaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci11bmlvbi13cm9uZy1maWVsZC1uYW1lLmM6IE5ldwoJ KiBqaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxyZWFkeS1pbml0LmM6IE5ldwoJKiBqaXQuZGcv dGVzdC1lcnJvci1nbG9iYWwtY29tbW9uLXNlY3Rpb24uYzogTmV3CgkqIGppdC5kZy90ZXN0LWVy cm9yLWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJy b3ItZ2xvYmFsLWx2YWx1ZS1pbml0LmM6IE5ldwoJKiBqaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwt bm9uY29uc3QtaW5pdC5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmM6 IE5ldwoJKiBqaXQuZGcvdGVzdC1sb2NhbC1pbml0LXJ2YWx1ZS5jOiBOZXcKLS0tCiBnY2Mvaml0 L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdCAgICAgICAgICAgfCAgMTczICsrCiBnY2Mvaml0 L2ppdC1jb21tb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsKIGdjYy9qaXQv aml0LXBsYXliYWNrLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMjMgKystCiBnY2Mvaml0 L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiBnY2Mvaml0 L2ppdC1yZWNvcmRpbmcuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgNDcxICsrKystCiBnY2Mv aml0L2ppdC1yZWNvcmRpbmcuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk0ICsKIGdjYy9q aXQvbGliZ2Njaml0KysuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTAgKwogZ2NjL2pp dC9saWJnY2NqaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQwNSArKystCiBnY2Mv aml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTUzICsrCiBnY2Mv aml0L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKIGdjYy90 ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oICB8ICAgMjAgKwogLi4uL2pp dC5kZy90ZXN0LWVycm9yLWN0b3ItYXJyYXktd3Jvbmctb2JqLmMgIHwgICA1NCArCiAuLi4vaml0 LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3QtdG9vLWJpZy5jICAgfCAgIDcxICsKIC4uLi90ZXN0 LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLWZpZWxkLW9iai5jICB8ICAgODYgKwogLi4uL3Rlc3Qt ZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZS5jICAgICAgIHwgICA3NiArCiAuLi4vdGVzdC1l cnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jICAgICAgfCAgIDc3ICsKIC4uLi90ZXN0LWVy cm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jICB8ICAgNzYgKwogLi4uL2ppdC5kZy90 ZXN0LWVycm9yLWdsb2JhbC1hbHJlYWR5LWluaXQuYyAgIHwgICA0NiArCiAuLi4vaml0LmRnL3Rl c3QtZXJyb3ItZ2xvYmFsLWNvbW1vbi1zZWN0aW9uLmMgfCAgIDU0ICsKIC4uLi90ZXN0LWVycm9y LWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jICB8ICAgNjUgKwogLi4uL2ppdC5kZy90ZXN0 LWVycm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jICAgIHwgICA2MCArCiAuLi4vaml0LmRnL3Rlc3Qt ZXJyb3ItZ2xvYmFsLW5vbmNvbnN0LWluaXQuYyAgfCAgIDgwICsKIC4uLi9qaXQuZGcvdGVzdC1n bG9iYWwtaW5pdC1ydmFsdWUuYyAgICAgICAgICB8IDE2NDMgKysrKysrKysrKysrKysrKysKIGdj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyB8ICA3MDcgKysrKysr KwogMjQgZmlsZXMgY2hhbmdlZCwgNDcyNyBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3It YXJyYXktd3Jvbmctb2JqLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmllbGQtb2Jq LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0 b3Itc3RydWN0LXdyb25nLXR5cGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZTIuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci11bmlvbi13cm9uZy1m aWVsZC1uYW1lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWVycm9yLWdsb2JhbC1hbHJlYWR5LWluaXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWNvbW1vbi1zZWN0aW9uLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1pbml0LXRv by1zbWFsbC1hcnJheS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLW5vbmNvbnN0LWluaXQuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZhbHVl LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvY2FsLWlu aXQtcnZhbHVlLmMKCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25z LnJzdCBiL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CmluZGV4IDI4MGUwZWFl YTY4Li4wYTk2ODcyNTUxYiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNz aW9ucy5yc3QKKysrIGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKQEAgLTEy Niw2ICsxMjYsMTQ3IEBAIFNpbXBsZSBleHByZXNzaW9ucwogICAgdW5kZXJseWluZyBzdHJpbmcs IHNvIGl0IGlzIHZhbGlkIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIGFuIG9uLXN0YWNrCiAgICBi dWZmZXIuCiAKK0NvbnN0cnVjdG9yIGV4cHJlc3Npb25zCisqKioqKioqKioqKioqKioqKioqKioq KgorCisgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBtYWtlIGNvbnN0cnVjdG9ycyBmb3IgYXJy YXksIHN0cnVjdCBhbmQgdW5pb24KKyAgIHR5cGVzLgorCisgICBUaGUgY29uc3RydWN0b3IgcnZh bHVlIGNhbiBiZSB1c2VkIGZvciBhc3NpZ25tZW50IHRvIGxvY2Fscy4KKyAgIEl0IGNhbiBiZSB1 c2VkIHRvIGluaXRpYWxpemUgZ2xvYmFsIHZhcmlhYmxlcyB3aXRoCisgICA6ZnVuYzpgZ2NjX2pp dF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZWAuIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMg YQorICAgdGVtcG9yYXJ5IHZhbHVlIGZvciBmdW5jdGlvbiBjYWxscyBhbmQgcmV0dXJuIHZhbHVl cywgYnV0IGl0cyBhZGRyZXNzCisgICBjYW4ndCBiZSB0YWtlbi4KKworICAgTm90ZSB0aGF0IGFy cmF5cyBpbiBsaWJnY2NqaXQgZG8gbm90IGNvbGxhcHNlIHRvIHBvaW50ZXJzIGxpa2UgaW4KKyAg IEMuIEkuZS4gaWYgYW4gYXJyYXkgY29uc3RydWN0b3IgaXMgdXNlZCBhcyBlLmcuIGEgcmV0dXJu IHZhbHVlLCB0aGUgd2hvbGUKKyAgIGFycmF5IHdvdWxkIGJlIHJldHVybmVkIGJ5IHZhbHVlIC0g YXJyYXkgY29uc3RydWN0b3JzIGNhbiBiZSBhc3NpZ25lZCB0bworICAgYXJyYXkgdmFyaWFibGVz LgorCisgICBUaGUgY29uc3RydWN0b3IgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbnN0cnVjdG9ycy4K KworICAgTm90ZSB0aGF0IGEgc3RyaW5nIGxpdGVyYWwgcnZhbHVlIGNhbid0IGJlIHVzZWQgdG8g Y29uc3RydWN0IGEgY2hhciBhcnJheTsKKyAgIHRoZSBsYXR0ZXIgbmVlZHMgb25lIHJ2YWx1ZSBm b3IgZWFjaCBjaGFyLgorCisgICBUaGVzZSBlbnRyeXBvaW50cyB3ZXJlIGFkZGVkIGluIDpyZWY6 YExJQkdDQ0pJVF9BQklfMTlgOyB5b3UgY2FuIHRlc3QgZm9yCisgICB0aGVpciBwcmVzZW5jZSB1 c2luZzoKKworICAgLi4gY29kZS1ibG9jazo6IGMKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZF X0NUT1JTCisKKy4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKKwkgICAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAor CQkJCQkJICAgICBnY2Nfaml0X2xvY2F0aW9uICpsb2MsXAorCQkJCQkJICAgICBnY2Nfaml0X3R5 cGUgKnR5cGUsXAorCQkJCQkJICAgICBzaXplX3QgbnVtX3ZhbHVlcyxcCisJCQkJCQkgICAgIGdj Y19qaXRfcnZhbHVlICoqdmFsdWVzKQorCisgICBDcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgYW4g YXJyYXkgYXMgYW4gcnZhbHVlLgorCisgICBSZXR1cm5zIE5VTEwgb24gZXJyb3IuIGBgdmFsdWVz YGAgYXJlIGNvcGllZCBhbmQKKyAgIGRvIG5vdCBoYXZlIHRvIG91dGxpdmUgdGhlIGNvbnRleHQu CisKKyAgIGBgdHlwZWBgIHNwZWNpZmllcyB3aGF0IHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJ1aWxk IGFuZCBoYXMgdG8gYmUKKyAgIGFuIGFycmF5LgorCisgICBgYG51bV92YWx1ZXNgYCBzcGVjaWZp ZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBgYHZhbHVlc2BgIGFuZAorICAgaXQgY2FuJ3Qg aGF2ZSBtb3JlIGVsZW1lbnRzIHRoYW4gdGhlIGFycmF5IHR5cGUuCisKKyAgIEVhY2ggdmFsdWUg aW4gYGB2YWx1ZXNgYCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBhcnJheS4K KyAgIElmIHRoZSBhcnJheSB0eXBlIGl0c2VsZiBoYXMgbW9yZSBlbGVtZW50cyB0aGFuIGBgdmFs dWVzYGAsIHRoZQorICAgbGVmdC1vdmVyIGVsZW1lbnRzIHdpbGwgYmUgemVyb2VkLgorCisgICBF YWNoIHZhbHVlIGluIGBgdmFsdWVzYGAgbmVlZCB0byBiZSB0aGUgc2FtZSB1bnF1YWxpZmllZCB0 eXBlIGFzIHRoZQorICAgYXJyYXkgdHlwZSdzIGVsZW1lbnQgdHlwZS4KKworICAgSWYgYGBudW1f dmFsdWVzYGAgaXMgMCwgdGhlIGBgdmFsdWVzYGAgcGFyYW1ldGVyIHdpbGwgYmUKKyAgIGlnbm9y ZWQgYW5kIHplcm8gaW5pdGlhbGl6YXRpb24gd2lsbCBiZSB1c2VkLgorCisgICBUaGlzIGVudHJ5 cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMTlgOyB5b3UgY2FuIHRlc3Qg Zm9yIGl0cworICAgcHJlc2VuY2UgdXNpbmc6CisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisgICAg ICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworCisuLiBmdW5jdGlvbjo6IGdjY19qaXRfcnZh bHVlICpcCisJICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IgKGdj Y19qaXRfY29udGV4dCAqY3R4dCxcCisJCQkJCQkgICAgICBnY2Nfaml0X2xvY2F0aW9uICpsb2Ms XAorCQkJCQkJICAgICAgZ2NjX2ppdF90eXBlICp0eXBlLFwKKwkJCQkJCSAgICAgIHNpemVfdCBu dW1fdmFsdWVzLFwKKwkJCQkJCSAgICAgIGdjY19qaXRfZmllbGQgKipmaWVsZHMsXAorCQkJCQkJ ICAgICAgZ2NjX2ppdF9ydmFsdWUgKip2YWx1ZSkKKworCisgICBDcmVhdGUgYSBjb25zdHJ1Y3Rv ciBmb3IgYSBzdHJ1Y3QgYXMgYW4gcnZhbHVlLgorCisgICBSZXR1cm5zIE5VTEwgb24gZXJyb3Iu IFRoZSB0d28gcGFyYW1ldGVyIGFycmF5cyBhcmUgY29waWVkIGFuZAorICAgZG8gbm90IGhhdmUg dG8gb3V0bGl2ZSB0aGUgY29udGV4dC4KKworICAgYGB0eXBlYGAgc3BlY2lmaWVzIHdoYXQgdGhl IGNvbnN0cnVjdG9yIHdpbGwgYnVpbGQgYW5kIGhhcyB0byBiZQorICAgYSBzdHJ1Y3QuCisKKyAg IGBgbnVtX3ZhbHVlc2BgIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGBgdmFs dWVzYGAuCisKKyAgIGBgZmllbGRzYGAgbmVlZCB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBg YHZhbHVlc2BgLCBvciBiZSBOVUxMLgorCisgICBJZiBgYGZpZWxkc2BgIGlzIG51bGwsIHRoZSB2 YWx1ZXMgYXJlIGFwcGxpZWQgaW4gZGVmaW5pdGlvbiBvcmRlci4KKworICAgT3RoZXJ3aXNlLCBl YWNoIGZpZWxkIGluIGBgZmllbGRzYGAgc3BlY2lmaWVzIHdoaWNoIGZpZWxkIGluIHRoZSBzdHJ1 Y3QgdG8KKyAgIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiBgYHZhbHVlc2BgLiBg YGZpZWxkc2BgIGFuZCBgYHZhbHVlc2BgCisgICBhcmUgcGFpcmVkIGJ5IGluZGV4LgorCisgICBU aGUgZmllbGRzIGluIGBgZmllbGRzYGAgaGF2ZSB0byBiZSBpbiBkZWZpbml0aW9uIG9yZGVyLCBi dXQgdGhlcmUKKyAgIGNhbiBiZSBnYXBzLiBBbnkgZmllbGQgaW4gdGhlIHN0cnVjdCB0aGF0IGlz IG5vdCBzcGVjaWZpZWQgaW4KKyAgIGBgZmllbGRzYGAgd2lsbCBiZSB6ZXJvZWQuCisKKyAgIFRo ZSBmaWVsZHMgaW4gYGBmaWVsZHNgYCBuZWVkIHRvIGJlIHRoZSBzYW1lIG9iamVjdHMgdGhhdCB3 ZXJlIHVzZWQKKyAgIHRvIGNyZWF0ZSB0aGUgc3RydWN0LgorCisgICBFYWNoIHZhbHVlIGhhcyB0 byBoYXZlIGhhdmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSBhcyB0aGUgZmllbGQKKyAgIGl0 IGlzIGFwcGxpZWQgdG8uCisKKyAgIEEgTlVMTCB2YWx1ZSBlbGVtZW50ICBpbiBgYHZhbHVlc2Bg IGlzIGEgc2hvcnRoYW5kIGZvciB6ZXJvIGluaXRpYWxpemF0aW9uCisgICBvZiB0aGUgY29ycmVz cG9uZGluZyBmaWVsZC4KKworICAgSWYgYGBudW1fdmFsdWVzYGAgaXMgMCwgdGhlIGFycmF5IHBh cmFtZXRlcnMgd2lsbCBiZQorICAgaWdub3JlZCBhbmQgemVybyBpbml0aWFsaXphdGlvbiB3aWxs IGJlIHVzZWQuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0ND SklUX0FCSV8xOWA7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZzoKKwor ICAgLi4gY29kZS1ibG9jazo6IGMKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JTCisK Ky4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKKwkgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3VuaW9uX2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAorCQkJCQkJICAg ICBnY2Nfaml0X2xvY2F0aW9uICpsb2MsXAorCQkJCQkJICAgICBnY2Nfaml0X3R5cGUgKnR5cGUs XAorCQkJCQkJICAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZCxcCisJCQkJCQkgICAgIGdjY19qaXRf cnZhbHVlICp2YWx1ZSkKKworICAgQ3JlYXRlIGEgY29uc3RydWN0b3IgZm9yIGEgdW5pb24gYXMg YW4gcnZhbHVlLgorCisgICBSZXR1cm5zIE5VTEwgb24gZXJyb3IuCisKKyAgIGBgdHlwZWBgIHNw ZWNpZmllcyB3aGF0IHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJ1aWxkIGFuZCBoYXMgdG8gYmUKKyAg IGFuIHVuaW9uLgorCisgICBgYGZpZWxkYGAgc3BlY2lmaWVzIHdoaWNoIGZpZWxkIHRvIHNldC4g SWYgaXQgaXMgTlVMTCwgdGhlIGZpcnN0CisgICBmaWVsZCBpbiB0aGUgdW5pb24gd2lsbCBiZSBz ZXQuYGBmaWVsZGBgIG5lZWQgdG8gYmUgdGhlIHNhbWUgb2JqZWN0CisgICB0aGF0IHdlcmUgdXNl ZCB0byBjcmVhdGUgdGhlIHVuaW9uLgorCisgICBgYHZhbHVlYGAgc3BlY2lmaWVzIHdoYXQgdmFs dWUgdG8gc2V0IHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHRvLgorICAgSWYgYGB2YWx1ZWBgIGlz IE5VTEwsIHplcm8gaW5pdGlhbGl6YXRpb24gd2lsbCBiZSB1c2VkLgorCisgICBFYWNoIHZhbHVl IGhhcyB0byBoYXZlIGhhdmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSBhcyB0aGUgZmllbGQK KyAgIGl0IGlzIGFwcGxpZWQgdG8uCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4g OnJlZjpgTElCR0NDSklUX0FCSV8xOWA7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5j ZSB1c2luZzoKKworICAgLi4gY29kZS1ibG9jazo6IGMKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9I QVZFX0NUT1JTCisKIFZlY3RvciBleHByZXNzaW9ucwogKioqKioqKioqKioqKioqKioqCiAKQEAg LTY2MSw2ICs4MDIsMzggQEAgR2xvYmFsIHZhcmlhYmxlcwogCiAgICAgICAjaWZkZWYgTElCR0ND SklUX0hBVkVfZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyCiAKKy4uIGZ1bmN0aW9uOjog Z2NjX2ppdF9sdmFsdWUgKlwKKwkgICAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJf cnZhbHVlIChnY2Nfaml0X2x2YWx1ZSAqZ2xvYmFsLAorCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfcnZhbHVlICppbml0X3ZhbHVlKQorCisgICBT ZXQgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSBnbG9iYWwgd2l0aCBhbiBydmFsdWUuCisKKyAgIFRo ZSBydmFsdWUgbmVlZHMgdG8gYmUgYSBjb25zdGFudCBleHByZXNzaW9uLCBlLmcuIG5vIGZ1bmN0 aW9uIGNhbGxzLgorCisgICBUaGUgZ2xvYmFsIGNhbid0IGhhdmUgdGhlIGBga2luZGBgIDpyZWY6 YEdDQ19KSVRfR0xPQkFMX0lNUE9SVEVEYC4KKworICAgQXMgYSBub24tY29tcHJlaGVuc2l2ZSBl eGFtcGxlIGl0IGlzIE9LIHRvIGRvIHRoZSBlcXVpdmFsZW50IG9mOgorCisgICAuLiBjb2RlLWJs b2NrOjogYworCisgICAgICAgaW50IGZvbyA9IDMgKiAyOyAvKiBydmFsdWUgZnJvbSBnY2Nfaml0 X2NvbnRleHRfbmV3X2JpbmFyeV9vcC4gICovCisgICAgICAgaW50IGFycltdID0gezEsMiwzLDR9 OyAvKiBydmFsdWUgZnJvbSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yLiAgKi8KKyAg ICAgICBpbnQgKmJhciA9ICZhcnJbMl0gKyAxOyAvKiBydmFsdWUgZnJvbSBuZXN0ZWQgImdldCBh ZGRyZXNzIiBvZiAiYXJyYXkgYWNjZXNzIi4gICovCisgICAgICAgY29uc3QgaW50IGJheiA9IDM7 IC8qIHJ2YWx1ZSBmcm9tIGdjY19qaXRfY29udGV4dF9ydmFsdWVfZnJvbV9pbnQuICAqLworICAg ICAgIGludCBib3ogPSBiYXo7IC8qIHJ2YWx1ZSBmcm9tIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1 ZS4gICovCisKKyAgIFVzZSB0b2dldGhlciB3aXRoIDpyZWY6YGdjY19qaXRfY29udGV4dF9uZXdf Y29uc3RydWN0b3JgIHRvCisgICBpbml0aWFsaXplIHN0cnVjdHMsIHVuaW9ucyBhbmQgYXJyYXlz LgorCisgICBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBgYGdsb2JhbGBgIHBhcmFtZXRlciB1bmNo YW5nZWQuIE90aGVyd2lzZSwgYGBOVUxMYGAuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRk ZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8xOWA7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBw cmVzZW5jZSB1c2luZzoKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJ QkdDQ0pJVF9IQVZFX0NUT1JTCisKIFdvcmtpbmcgd2l0aCBwb2ludGVycywgc3RydWN0cyBhbmQg dW5pb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYg LS1naXQgYS9nY2Mvaml0L2ppdC1jb21tb24uaCBiL2djYy9qaXQvaml0LWNvbW1vbi5oCmluZGV4 IGY4OGU2NzU1YjAwLi4yZTcyM2MzOGQ3OCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtY29tbW9u LmgKKysrIGIvZ2NjL2ppdC9qaXQtY29tbW9uLmgKQEAgLTIwMiw2ICsyMDIsMTUgQEAgZW51bSBp bm5lcl9ib29sX29wdGlvbgogICBOVU1fSU5ORVJfQk9PTF9PUFRJT05TCiB9OwogCisvKiBGbGFn cyBmb3IgZ2xvYmFsIHZhcmlhYmxlcyBjbGFzcy4gIEZvciB3aGVuIHRoZSBwbGF5YmFjayBvZiB0 aGUKKyAgIGdsb2JhbCBuZWVkIHRvIGtub3cgd2hhdCB3aWxsIGhhcHBlbiB0byBpdCBsYXRlci4g ICovCitlbnVtIGdsb2JhbF92YXJfZmxhZ3MKK3sKKyAgR0xPQkFMX1ZBUl9GTEFHU19OT05FID0g MCwKKyAgR0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX1JWQUxfSU5JVCA9IDEsCisgIEdMT0JBTF9W QVJfRkxBR1NfV0lMTF9CRV9CTE9CX0lOSVQgPSAyLAorfTsKKwogfSAvLyBuYW1lc3BhY2UgZ2Nj OjpqaXQKIAogfSAvLyBuYW1lc3BhY2UgZ2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5 YmFjay5jIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suYwppbmRleCA3ODNhMDM3YjExZC4uNjQ3NTVi NmM2ZmUgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNrLmMKKysrIGIvZ2NjL2ppdC9q aXQtcGxheWJhY2suYwpAQCAtOTcsNiArOTcsNDMgQEAgbmFtZXNwYWNlIGppdCB7CiAgUGxheWJh Y2suCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KIAorLyogRm9sZCBhIHJlYWRvbmx5IG5vbi12b2xhdGlsZSB2 YXJpYWJsZSB3aXRoIGFuIGluaXRpYWwgY29uc3RhbnQgdmFsdWUsCisgICB0byB0aGF0IHZhbHVl LgorCisgICBPdGhlcndpc2UgcmV0dXJuIHRoZSBhcmd1bWVudCB1bmNoYW5nZWQuCisKKyAgIFRo aXMgZm9sZCBpcyBuZWVkZWQgZm9yIHNldHRpbmcgYSB2YXJpYWJsZSdzIERFQ0xfSU5JVElBTCB0 byB0aGUgdmFsdWUKKyAgIG9mIGEgY29uc3QgdmFyaWFibGUuICBUaGUgYy1mcm9udGVuZCBkb2Vz IHRoaXMgaW4gaXRzIG93biBzcGVjaWFsCisgICBmb2xkICgpLCBzbyB3ZSBsaWZ0IHRoaXMgcGFy dCBvdXQgYW5kIGRvIGl0IGV4cGxpY2l0bHkgd2hlcmUgdGhlcmUgaXMgYQorICAgcG90ZW50aWFs IGZvciB2YXJpYWJsZXMgdG8gYmUgdXNlZCBhcyBydmFsdWVzLiAgKi8KK3N0YXRpYyB0cmVlCitm b2xkX2NvbnN0X3ZhciAodHJlZSBub2RlKQoreworICAvKiBTZWUgY19mdWxseV9mb2xkX2ludGVy bmFsIGluIGMtZm9sZC5jIGFuZCBkZWNsX2NvbnN0YW50X3ZhbHVlXzEKKyAgICAgaW4gYy10eXBl Y2suYy4gICovCisgIGlmIChWQVJfUCAobm9kZSkKKyAgICAgICYmIFRSRUVfUkVBRE9OTFkgKG5v ZGUpCisgICAgICAmJiAhVFJFRV9USElTX1ZPTEFUSUxFIChub2RlKQorICAgICAgJiYgREVDTF9J TklUSUFMIChub2RlKSAhPSBOVUxMX1RSRUUKKyAgICAgIC8qICJUaGlzIGlzIGludmFsaWQgaWYg aW5pdGlhbCB2YWx1ZSBpcyBub3QgY29uc3RhbnQuCisJICBJZiBpdCBoYXMgZWl0aGVyIGEgZnVu Y3Rpb24gY2FsbCwgYSBtZW1vcnkgcmVmZXJlbmNlLAorCSAgb3IgYSB2YXJpYWJsZSwgdGhlbiBy ZS1ldmFsdWF0aW5nIGl0IGNvdWxkIGdpdmUgZGlmZmVyZW50CisJICByZXN1bHRzLiIgICovCisg ICAgICAmJiBUUkVFX0NPTlNUQU5UIChERUNMX0lOSVRJQUwgKG5vZGUpKSkKKyAgICB7CisgICAg ICB0cmVlIHJldCA9IERFQ0xfSU5JVElBTCAobm9kZSk7CisgICAgICAvKiAiQXZvaWQgdW53YW50 ZWQgdHJlZSBzaGFyaW5nIGJldHdlZW4gdGhlIGluaXRpYWxpemVyIGFuZCBjdXJyZW50CisJICBm dW5jdGlvbidzIGJvZHkgd2hlcmUgdGhlIHRyZWUgY2FuIGJlIG1vZGlmaWVkIGUuZy4gYnkgdGhl CisJICBnaW1wbGlmaWVyLiIgICovCisgICAgICBpZiAoVFJFRV9TVEFUSUMgKG5vZGUpKQorCXJl dCA9IHVuc2hhcmVfZXhwciAocmV0KTsKKworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAg cmV0dXJuIG5vZGU7Cit9CisKIC8qIEJ1aWxkIGEgU1RSSU5HX0NTVCB0cmVlIGZvciBTVFIsIG9y IHJldHVybiBOVUxMIGlmIGl0IGlzIE5VTEwuCiAgICBUaGUgVFJFRV9UWVBFIGlzIG5vdCBpbml0 aWFsaXplZC4gICovCiAKQEAgLTUzOCwxNSArNTc1LDI4IEBAIHBsYXliYWNrOjpjb250ZXh0OjoK IGdsb2JhbF9uZXdfZGVjbCAobG9jYXRpb24gKmxvYywKIAkJIGVudW0gZ2NjX2ppdF9nbG9iYWxf a2luZCBraW5kLAogCQkgdHlwZSAqdHlwZSwKLQkJIGNvbnN0IGNoYXIgKm5hbWUpCisJCSBjb25z dCBjaGFyICpuYW1lLAorCQkgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKQogewogICBnY2Nf YXNzZXJ0ICh0eXBlKTsKICAgZ2NjX2Fzc2VydCAobmFtZSk7CisKKyAgdHJlZSB0eXBlX3RyZWUg PSB0eXBlLT5hc190cmVlICgpOworCiAgIHRyZWUgaW5uZXIgPSBidWlsZF9kZWNsIChVTktOT1dO X0xPQ0FUSU9OLCBWQVJfREVDTCwKIAkJCSAgIGdldF9pZGVudGlmaWVyIChuYW1lKSwKLQkJCSAg IHR5cGUtPmFzX3RyZWUgKCkpOworCQkJICAgdHlwZV90cmVlKTsKKwogICBUUkVFX1BVQkxJQyAo aW5uZXIpID0gKGtpbmQgIT0gR0NDX0pJVF9HTE9CQUxfSU5URVJOQUwpOwotICBERUNMX0NPTU1P TiAoaW5uZXIpID0gMTsKKworCisgIGludCB3aWxsX2JlX2luaXQgPSBmbGFncyAmIChHTE9CQUxf VkFSX0ZMQUdTX1dJTExfQkVfUlZBTF9JTklUIHwKKwkJCSAgICAgIEdMT0JBTF9WQVJfRkxBR1Nf V0lMTF9CRV9CTE9CX0lOSVQpOworCisgIC8qIEEgVkFSX0RFQ0wgd2l0aCBERUNMX0lOSVRJQUwg d2lsbCBub3QgZW5kIHVwIGluIC5jb21tb24gc2VjdGlvbi4gICovCisgIGlmICghd2lsbF9iZV9p bml0KQorICAgIERFQ0xfQ09NTU9OIChpbm5lcikgPSAxOworCiAgIHN3aXRjaCAoa2luZCkKICAg ICB7CiAgICAgZGVmYXVsdDoKQEAgLTU2NSw2ICs2MTUsOSBAQCBnbG9iYWxfbmV3X2RlY2wgKGxv Y2F0aW9uICpsb2MsCiAgICAgICBicmVhazsKICAgICB9CiAKKyAgaWYgKFRZUEVfUkVBRE9OTFkg KHR5cGVfdHJlZSkpCisgICAgVFJFRV9SRUFET05MWSAoaW5uZXIpID0gMTsKKwogICBpZiAobG9j KQogICAgIHNldF90cmVlX2xvY2F0aW9uIChpbm5lciwgbG9jKTsKIApAQCAtNTg5LDEzICs2NDIs MTIxIEBAIHBsYXliYWNrOjpjb250ZXh0OjoKIG5ld19nbG9iYWwgKGxvY2F0aW9uICpsb2MsCiAJ ICAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCSAgICB0eXBlICp0eXBlLAotCSAg ICBjb25zdCBjaGFyICpuYW1lKQorCSAgICBjb25zdCBjaGFyICpuYW1lLAorCSAgICBlbnVtIGds b2JhbF92YXJfZmxhZ3MgZmxhZ3MpCiB7Ci0gIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3X2RlY2wg KGxvYywga2luZCwgdHlwZSwgbmFtZSk7CisgIHRyZWUgaW5uZXIgPQorICAgIGdsb2JhbF9uZXdf ZGVjbCAobG9jLCBraW5kLCB0eXBlLCBuYW1lLCBmbGFncyk7CiAKICAgcmV0dXJuIGdsb2JhbF9m aW5hbGl6ZV9sdmFsdWUgKGlubmVyKTsKIH0KIAordm9pZAorcGxheWJhY2s6OmNvbnRleHQ6Ogor Z2xvYmFsX3NldF9pbml0X3J2YWx1ZSAobHZhbHVlKiB2YXJpYWJsZSwKKwkJCXJ2YWx1ZSogaW5p dCkKK3sKKyAgdHJlZSBpbm5lciA9IHZhcmlhYmxlLT5hc190cmVlICgpOworCisgIC8qIFdlIG5l ZWQgdG8gZm9sZCBhbGwgZXhwcmVzc2lvbnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gIFRoZSBjb2Rl CisgICAgIGZvciBhIERFQ0xfSU5JVElBTCBvbmx5IGhhbmRsZXMgc29tZSBvcGVyYXRpb25zLAor ICAgICBldGMgYWRkaXRpb24sIG1pbnVzLCAnYWRkcmVzcyBvZicuICBTZWUgb3V0cHV0X2FkZHJl c3NlZF9jb25zdGFudHMgKCkKKyAgICAgaW4gdmFyYXNtLmMuICAqLworICB0cmVlIGluaXRfdHJl ZSA9IGluaXQtPmFzX3RyZWUgKCk7CisgIHRyZWUgZm9sZGVkID0gZm9sZF9jb25zdF92YXIgKGlu aXRfdHJlZSk7CisKKyAgaWYgKCFUUkVFX0NPTlNUQU5UIChmb2xkZWQpKQorICAgIHsKKyAgICAg IHRyZWUgbmFtZSA9IERFQ0xfTkFNRSAoaW5uZXIpOworCisgICAgICBpZiAobmFtZSAhPSBOVUxM X1RSRUUpCisJYWRkX2Vycm9yIChOVUxMLAorCQkgICAidW5hYmxlIHRvIGNvbnZlcnQgaW5pdGlh bCB2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSAlcyIKKwkJICAgIiB0byBhIGNvbXBpbGUt dGltZSBjb25zdGFudCIsCisJCSAgIElERU5USUZJRVJfUE9JTlRFUiAobmFtZSkpOworICAgICAg ZWxzZQorCWFkZF9lcnJvciAoTlVMTCwKKwkJICAgInVuYWJsZSB0byBjb252ZXJ0IGluaXRpYWwg dmFsdWUgZm9yIGdsb2JhbCB2YXJpYWJsZSIKKwkJICAgIiB0byBhIGNvbXBpbGUtdGltZSBjb25z dGFudCIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBERUNMX0lOSVRJQUwgKGlubmVyKSA9 IGZvbGRlZDsKK30KKworcGxheWJhY2s6OnJ2YWx1ZSAqCitwbGF5YmFjazo6Y29udGV4dDo6Citu ZXdfY3RvciAobG9jYXRpb24gKmxvYywKKwkgIHR5cGUgKnR5cGUsCisJICBjb25zdCBhdXRvX3Zl YzxmaWVsZCo+ICpmaWVsZHMsCisJICBjb25zdCBhdXRvX3ZlYzxydmFsdWUqPiAqcnZhbHVlcykK K3sKKyAgdHJlZSB0eXBlX3RyZWUgPSB0eXBlLT5hc190cmVlICgpOworCisgIC8qIEhhbmRsZSBl bXB0eSBjdG9ycyBmaXJzdC4gIEkuZS4gc2V0IGV2ZXJ5dGhpbmcgdG8gMC4gICovCisgIGlmIChy dmFsdWVzLT5sZW5ndGggKCkgPT0gMCkKKyAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgYnVp bGRfY29uc3RydWN0b3IgKHR5cGVfdHJlZSwgTlVMTCkpOworCisgIC8qIEhhbmRsZSBhcnJheXMg KGFuZCByZXR1cm4pLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAodHlwZV90cmVlKSA9PSBBUlJBWV9U WVBFKQorICAgIHsKKyAgICAgIGludCBuID0gcnZhbHVlcy0+bGVuZ3RoICgpOworICAgICAgLyog VGhlIHZlYyBmb3IgdGhlIGNvbnN0cnVjdG9yIG5vZGUuICAqLworICAgICAgdmVjPGNvbnN0cnVj dG9yX2VsdCwgdmFfZ2M+ICp2ID0gTlVMTDsKKyAgICAgIHZlY19hbGxvYyAodiwgbik7CisKKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorCXsKKwkgIHJ2YWx1ZSAqcnYgPSAoKnJ2 YWx1ZXMpW2ldOworCSAgLyogbnVsbCBydmFsdWVzIGluZGljYXRlIHRoYXQgdGhlIGVsZW1lbnQg c2hvdWxkIGJlIHplcm9lZC4gICovCisJICBpZiAocnYpCisJICAgIENPTlNUUlVDVE9SX0FQUEVO RF9FTFQgKHYsCisJCQkJICAgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCBpKSwKKwkJ CQkgICAgcnYtPmFzX3RyZWUgKCkpOworCSAgZWxzZQorCSAgICBDT05TVFJVQ1RPUl9BUFBFTkRf RUxUICh2LAorCQkJCSAgICBidWlsZF9pbnRfY3N0IChzaXplX3R5cGVfbm9kZSwgaSksCisJCQkJ ICAgIGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHR5cGVfdHJlZSkpKTsKKwl9CisKKyAgICAg IHRyZWUgY3RvciA9IGJ1aWxkX2NvbnN0cnVjdG9yICh0eXBlX3RyZWUsIHYpOworCisgICAgICBp ZiAobG9jKQorCXNldF90cmVlX2xvY2F0aW9uIChjdG9yLCBsb2MpOworCisgICAgICByZXR1cm4g bmV3IHJ2YWx1ZSAodGhpcywgY3Rvcik7CisgICAgfQorCisgIC8qIEhhbmRsZSBzdHJ1Y3RzIGFu ZCB1bmlvbnMuICAqLworICBpbnQgbiA9IGZpZWxkcy0+bGVuZ3RoICgpOworCisgIC8qIFRoZSB2 ZWMgZm9yIHRoZSBjb25zdHJ1Y3RvciBub2RlLiAgKi8KKyAgdmVjPGNvbnN0cnVjdG9yX2VsdCwg dmFfZ2M+ICp2ID0gTlVMTDsKKyAgdmVjX2FsbG9jICh2LCBuKTsKKworICAvKiBJdGVyYXRlIG92 ZXIgdGhlIGZpZWxkcywgYnVpbGRpbmcgaW5pdGlhbGl6YXRpb25zLiAgKi8KKyAgZm9yIChpbnQg aSA9IDA7aSA8IG47IGkrKykKKyAgICB7CisgICAgICB0cmVlIGZpZWxkID0gKCpmaWVsZHMpW2ld LT5hc190cmVlICgpOworICAgICAgcnZhbHVlICpydiA9ICgqcnZhbHVlcylbaV07CisgICAgICAv KiBJZiB0aGUgdmFsdWUgaXMgTlVMTCwgaXQgbWVhbnMgd2Ugc2hvdWxkIHplcm8gdGhlIGZpZWxk LiAgKi8KKyAgICAgIGlmIChydikKKwlDT05TVFJVQ1RPUl9BUFBFTkRfRUxUICh2LCBmaWVsZCwg cnYtPmFzX3RyZWUgKCkpOworICAgICAgZWxzZQorCXsKKwkgIHRyZWUgemVyb19jc3QgPSBidWls ZF96ZXJvX2NzdCAoVFJFRV9UWVBFIChmaWVsZCkpOworCSAgQ09OU1RSVUNUT1JfQVBQRU5EX0VM VCAodiwgZmllbGQsIHplcm9fY3N0KTsKKwl9CisgICAgfQorCisgIHRyZWUgY3RvciA9IGJ1aWxk X2NvbnN0cnVjdG9yICh0eXBlX3RyZWUsIHYpOworCisgIGlmIChsb2MpCisgICAgc2V0X3RyZWVf bG9jYXRpb24gKGN0b3IsIGxvYyk7CisKKyAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGJ1aWxk X2NvbnN0cnVjdG9yICh0eXBlX3RyZWUsIHYpKTsKK30KKwogLyogRmlsbCAnY29uc3RydWN0b3Jf ZWxlbWVudHMnIHdpdGggdGhlIG1lbW9yeSBjb250ZW50IG9mCiAgICAnaW5pdGlhbGl6ZXInLiAg RWFjaCBlbGVtZW50IG9mIHRoZSBpbml0aWFsaXplciBpcyBvZiB0aGUgc2l6ZSBvZgogICAgdHlw ZSBULiAgSW4gdXNlIGJ5IG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQuKi8KQEAgLTYyOSw5ICs3OTAs MTAgQEAgbmV3X2dsb2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBlbGVtZW50X3NpemUsCiAJCQlzaXplX3QgaW5pdGlhbGl6ZXJf bnVtX2VsZW0sCiAJCQljb25zdCB2b2lkICppbml0aWFsaXplciwKLQkJCWNvbnN0IGNoYXIgKm5h bWUpCisJCQljb25zdCBjaGFyICpuYW1lLAorCQkJZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdz KQogewotICB0cmVlIGlubmVyID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5h bWUpOworICB0cmVlIGlubmVyID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5h bWUsIGZsYWdzKTsKIAogICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKmNvbnN0cnVjdG9y X2VsZW1lbnRzID0gTlVMTDsKIApAQCAtODMxLDcgKzk5Myw4IEBAIGFzX3RydXRoX3ZhbHVlICh0 cmVlIGV4cHIsIGxvY2F0aW9uICpsb2MpCiAgIGlmIChsb2MpCiAgICAgc2V0X3RyZWVfbG9jYXRp b24gKHR5cGVkX3plcm8sIGxvYyk7CiAKLSAgZXhwciA9IGJ1aWxkMiAoTkVfRVhQUiwgaW50ZWdl cl90eXBlX25vZGUsIGV4cHIsIHR5cGVkX3plcm8pOworICBleHByID0gZm9sZF9idWlsZDJfbG9j IChVTktOT1dOX0xPQ0FUSU9OLAorICAgIE5FX0VYUFIsIGludGVnZXJfdHlwZV9ub2RlLCBleHBy LCB0eXBlZF96ZXJvKTsKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoZXhwciwg bG9jKTsKIApAQCAtODY3LDYgKzEwMzAsOCBAQCBuZXdfdW5hcnlfb3AgKGxvY2F0aW9uICpsb2Ms CiAgIGdjY19hc3NlcnQgKGEpOwogCiAgIHRyZWUgbm9kZSA9IGEtPmFzX3RyZWUgKCk7CisgIG5v ZGUgPSBmb2xkX2NvbnN0X3ZhciAobm9kZSk7CisKICAgdHJlZSBpbm5lcl9yZXN1bHQgPSBOVUxM OwogCiAgIHN3aXRjaCAob3ApCkBAIC04OTgsNiArMTA2MywxMCBAQCBuZXdfdW5hcnlfb3AgKGxv Y2F0aW9uICpsb2MsCiAgIGlubmVyX3Jlc3VsdCA9IGJ1aWxkMSAoaW5uZXJfb3AsCiAJCQkgcmVz dWx0X3R5cGUtPmFzX3RyZWUgKCksCiAJCQkgbm9kZSk7CisKKyAgLyogVHJ5IHRvIGZvbGQuICAq LworICBpbm5lcl9yZXN1bHQgPSBmb2xkIChpbm5lcl9yZXN1bHQpOworCiAgIGlmIChsb2MpCiAg ICAgc2V0X3RyZWVfbG9jYXRpb24gKGlubmVyX3Jlc3VsdCwgbG9jKTsKIApAQCAtOTIyLDcgKzEw OTEsMTAgQEAgbmV3X2JpbmFyeV9vcCAobG9jYXRpb24gKmxvYywKICAgZ2NjX2Fzc2VydCAoYik7 CiAKICAgdHJlZSBub2RlX2EgPSBhLT5hc190cmVlICgpOworICBub2RlX2EgPSBmb2xkX2NvbnN0 X3ZhciAobm9kZV9hKTsKKwogICB0cmVlIG5vZGVfYiA9IGItPmFzX3RyZWUgKCk7CisgIG5vZGVf YiA9IGZvbGRfY29uc3RfdmFyIChub2RlX2IpOwogCiAgIHN3aXRjaCAob3ApCiAgICAgewpAQCAt OTkyLDYgKzExNjQsMTAgQEAgbmV3X2JpbmFyeV9vcCAobG9jYXRpb24gKmxvYywKIAkJCSAgICBy ZXN1bHRfdHlwZS0+YXNfdHJlZSAoKSwKIAkJCSAgICBub2RlX2EsCiAJCQkgICAgbm9kZV9iKTsK KworICAvKiBUcnkgdG8gZm9sZCB0aGUgZXhwcmVzc2lvbi4gICovCisgIGlubmVyX2V4cHIgPSBm b2xkIChpbm5lcl9leHByKTsKKwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChp bm5lcl9leHByLCBsb2MpOwogCkBAIC0xMDM5LDEwICsxMjE1LDE5IEBAIG5ld19jb21wYXJpc29u IChsb2NhdGlvbiAqbG9jLAogICAgICAgYnJlYWs7CiAgICAgfQogCisgIHRyZWUgbm9kZV9hID0g YS0+YXNfdHJlZSAoKTsKKyAgbm9kZV9hID0gZm9sZF9jb25zdF92YXIgKG5vZGVfYSk7CisgIHRy ZWUgbm9kZV9iID0gYi0+YXNfdHJlZSAoKTsKKyAgbm9kZV9iID0gZm9sZF9jb25zdF92YXIgKG5v ZGVfYik7CisKICAgdHJlZSBpbm5lcl9leHByID0gYnVpbGQyIChpbm5lcl9vcCwKIAkJCSAgICBi b29sZWFuX3R5cGVfbm9kZSwKLQkJCSAgICBhLT5hc190cmVlICgpLAotCQkJICAgIGItPmFzX3Ry ZWUgKCkpOworCQkJICAgIG5vZGVfYSwKKwkJCSAgICBub2RlX2IpOworCisgIC8qIFRyeSB0byBm b2xkLiAgKi8KKyAgaW5uZXJfZXhwciA9IGZvbGQgKGlubmVyX2V4cHIpOworCiAgIGlmIChsb2Mp CiAgICAgc2V0X3RyZWVfbG9jYXRpb24gKGlubmVyX2V4cHIsIGxvYyk7CiAgIHJldHVybiBuZXcg cnZhbHVlICh0aGlzLCBpbm5lcl9leHByKTsKQEAgLTExNDIsNiArMTMyNyw4IEBAIHBsYXliYWNr Ojpjb250ZXh0OjpidWlsZF9jYXN0IChwbGF5YmFjazo6bG9jYXRpb24gKmxvYywKIAogICAgICBP bmx5IHNvbWUga2luZHMgb2YgY2FzdCBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBoZXJlLiAgKi8K ICAgdHJlZSB0X2V4cHIgPSBleHByLT5hc190cmVlICgpOworICB0X2V4cHIgPSBmb2xkX2NvbnN0 X3ZhciAodF9leHByKTsKKwogICB0cmVlIHRfZHN0X3R5cGUgPSB0eXBlXy0+YXNfdHJlZSAoKTsK ICAgdHJlZSB0X3JldCA9IE5VTEw7CiAgIHRfcmV0ID0gdGFyZ2V0bS5jb252ZXJ0X3RvX3R5cGUg KHRfZHN0X3R5cGUsIHRfZXhwcik7CkBAIC0xMjIwLDcgKzE0MDcsMTAgQEAgbmV3X2FycmF5X2Fj Y2VzcyAobG9jYXRpb24gKmxvYywKICAgICAgICBjLWZhbWlseS9jLWNvbW1vbi5jOiBwb2ludGVy X2ludF9zdW0KICAgKi8KICAgdHJlZSB0X3B0ciA9IHB0ci0+YXNfdHJlZSAoKTsKKyAgdF9wdHIg PSBmb2xkX2NvbnN0X3ZhciAodF9wdHIpOwogICB0cmVlIHRfaW5kZXggPSBpbmRleC0+YXNfdHJl ZSAoKTsKKyAgdF9pbmRleCA9IGZvbGRfY29uc3RfdmFyICh0X2luZGV4KTsKKwogICB0cmVlIHRf dHlwZV9wdHIgPSBUUkVFX1RZUEUgKHRfcHRyKTsKICAgdHJlZSB0X3R5cGVfc3Rhcl9wdHIgPSBU UkVFX1RZUEUgKHRfdHlwZV9wdHIpOwogCkBAIC0xMjI4LDYgKzE0MTgsNyBAQCBuZXdfYXJyYXlf YWNjZXNzIChsb2NhdGlvbiAqbG9jLAogICAgIHsKICAgICAgIHRyZWUgdF9yZXN1bHQgPSBidWls ZDQgKEFSUkFZX1JFRiwgdF90eXBlX3N0YXJfcHRyLCB0X3B0ciwgdF9pbmRleCwKIAkJCSAgICAg IE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKyAgICAgIHRfcmVzdWx0ID0gZm9sZCAodF9yZXN1bHQp OwogICAgICAgaWYgKGxvYykKIAlzZXRfdHJlZV9sb2NhdGlvbiAodF9yZXN1bHQsIGxvYyk7CiAg ICAgICByZXR1cm4gbmV3IGx2YWx1ZSAodGhpcywgdF9yZXN1bHQpOwpAQCAtMTIzNywxMiArMTQy OCwxNCBAQCBuZXdfYXJyYXlfYWNjZXNzIChsb2NhdGlvbiAqbG9jLAogICAgICAgLyogQ29udmVy dCBpbmRleCB0byBhbiBvZmZzZXQgaW4gYnl0ZXMuICAqLwogICAgICAgdHJlZSB0X3NpemVvZiA9 IHNpemVfaW5fYnl0ZXMgKHRfdHlwZV9zdGFyX3B0cik7CiAgICAgICB0X2luZGV4ID0gZm9sZF9i dWlsZDEgKENPTlZFUlRfRVhQUiwgc2l6ZXR5cGUsIHRfaW5kZXgpOwotICAgICAgdHJlZSB0X29m ZnNldCA9IGJ1aWxkMiAoTVVMVF9FWFBSLCBzaXpldHlwZSwgdF9pbmRleCwgdF9zaXplb2YpOwor ICAgICAgdHJlZSB0X29mZnNldCA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwK KwlNVUxUX0VYUFIsIHNpemV0eXBlLCB0X2luZGV4LCB0X3NpemVvZik7CiAKICAgICAgIC8qIExv Y2F0ZSAocHRyICsgb2Zmc2V0KS4gICovCi0gICAgICB0cmVlIHRfYWRkcmVzcyA9IGJ1aWxkMiAo UE9JTlRFUl9QTFVTX0VYUFIsIHRfdHlwZV9wdHIsIHRfcHRyLCB0X29mZnNldCk7CisgICAgICB0 cmVlIHRfYWRkcmVzcyA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwKKwlQT0lO VEVSX1BMVVNfRVhQUiwgdF90eXBlX3B0ciwgdF9wdHIsIHRfb2Zmc2V0KTsKIAotICAgICAgdHJl ZSB0X2luZGlyZWN0aW9uID0gYnVpbGQxIChJTkRJUkVDVF9SRUYsIHRfdHlwZV9zdGFyX3B0ciwg dF9hZGRyZXNzKTsKKyAgICAgIHRyZWUgdF9pbmRpcmVjdGlvbiA9IGZvbGRfYnVpbGQxIChJTkRJ UkVDVF9SRUYsIHRfdHlwZV9zdGFyX3B0ciwgdF9hZGRyZXNzKTsKICAgICAgIGlmIChsb2MpCiAJ ewogCSAgc2V0X3RyZWVfbG9jYXRpb24gKHRfc2l6ZW9mLCBsb2MpOwpAQCAtMTI5MCw3ICsxNDgz LDcgQEAgbmV3X2RlcmVmZXJlbmNlICh0cmVlIHB0ciwKICAgZ2NjX2Fzc2VydCAocHRyKTsKIAog ICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKFRSRUVfVFlQRShwdHIpKTsKLSAgdHJlZSBkYXR1bSA9 IGJ1aWxkMSAoSU5ESVJFQ1RfUkVGLCB0eXBlLCBwdHIpOworICB0cmVlIGRhdHVtID0gZm9sZF9i dWlsZDEgKElORElSRUNUX1JFRiwgdHlwZSwgcHRyKTsKICAgaWYgKGxvYykKICAgICBzZXRfdHJl ZV9sb2NhdGlvbiAoZGF0dW0sIGxvYyk7CiAgIHJldHVybiBkYXR1bTsKQEAgLTE0NDQsNyArMTYz Nyw3IEBAIGdldF9hZGRyZXNzIChsb2NhdGlvbiAqbG9jKQogICB0cmVlIHRfbHZhbHVlID0gYXNf dHJlZSAoKTsKICAgdHJlZSB0X3RoaXN0eXBlID0gVFJFRV9UWVBFICh0X2x2YWx1ZSk7CiAgIHRy ZWUgdF9wdHJ0eXBlID0gYnVpbGRfcG9pbnRlcl90eXBlICh0X3RoaXN0eXBlKTsKLSAgdHJlZSBw dHIgPSBidWlsZDEgKEFERFJfRVhQUiwgdF9wdHJ0eXBlLCB0X2x2YWx1ZSk7CisgIHRyZWUgcHRy ID0gZm9sZF9idWlsZDEgKEFERFJfRVhQUiwgdF9wdHJ0eXBlLCB0X2x2YWx1ZSk7CiAgIGlmIChs b2MpCiAgICAgZ2V0X2NvbnRleHQgKCktPnNldF90cmVlX2xvY2F0aW9uIChwdHIsIGxvYyk7CiAg IGlmIChtYXJrX2FkZHJlc3NhYmxlIChsb2MpKQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxh eWJhY2suaCBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgKaW5kZXggMjFkZGZmYjIyOGYuLjZjYTQ5 MmNjMmUwIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCisrKyBiL2djYy9qaXQv aml0LXBsYXliYWNrLmgKQEAgLTEwOSw3ICsxMDksOCBAQCBwdWJsaWM6CiAgIG5ld19nbG9iYWwg KGxvY2F0aW9uICpsb2MsCiAJICAgICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCiAJ ICAgICAgdHlwZSAqdHlwZSwKLQkgICAgICBjb25zdCBjaGFyICpuYW1lKTsKKwkgICAgICBjb25z dCBjaGFyICpuYW1lLAorCSAgICAgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncyk7CiAKICAg bHZhbHVlICoKICAgbmV3X2dsb2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKQEAgLTEx OCw3ICsxMTksMTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg ZWxlbWVudF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5pdGlhbGl6 ZXJfbnVtX2VsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluaXRp YWxpemVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKKwkJ CSAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKTsK KworICBydmFsdWUgKgorICBuZXdfY3RvciAobG9jYXRpb24gKmxvZywKKwkgICAgdHlwZSAqdHlw ZSwKKwkgICAgY29uc3QgYXV0b192ZWM8ZmllbGQqPiAqZmllbGRzLAorCSAgICBjb25zdCBhdXRv X3ZlYzxydmFsdWUqPiAqcnZhbHVlcyk7CisKKworICB2b2lkCisgIGdsb2JhbF9zZXRfaW5pdF9y dmFsdWUgKGx2YWx1ZSogdmFyaWFibGUsCisJCQkgIHJ2YWx1ZSogaW5pdCk7CiAKICAgdGVtcGxh dGUgPHR5cGVuYW1lIEhPU1RfVFlQRT4KICAgcnZhbHVlICoKQEAgLTI4Niw3ICsyOTksOCBAQCBw cml2YXRlOgogICBnbG9iYWxfbmV3X2RlY2wgKGxvY2F0aW9uICpsb2MsCiAgICAgICAgICAgICAg ICAgICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCiAgICAgICAgICAgICAgICAgICAg dHlwZSAqdHlwZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKKwkJICAg Y29uc3QgY2hhciAqbmFtZSwKKwkJICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKTsKICAg bHZhbHVlICoKICAgZ2xvYmFsX2ZpbmFsaXplX2x2YWx1ZSAodHJlZSBpbm5lcik7CiAKZGlmZiAt LWdpdCBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMK aW5kZXggYjQyNDA3OTA5NTcuLjc2NGU3YTMzYzc2IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1y ZWNvcmRpbmcuYworKysgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYwpAQCAtMTA2Miw2ICsxMDYy LDE4IEBAIHJlY29yZGluZzo6Y29udGV4dDo6bmV3X2dsb2JhbCAocmVjb3JkaW5nOjpsb2NhdGlv biAqbG9jLAogICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkCityZWNvcmRpbmc6OmNvbnRleHQ6 Om5ld19nbG9iYWxfaW5pdF9ydmFsdWUgKGx2YWx1ZSAqdmFyaWFibGUsCisJCQkJCSAgICBydmFs dWUgKmluaXQpCit7CisgIHJlY29yZGluZzo6Z2xvYmFsX2luaXRfcnZhbHVlICpvYmogPQorICAg IG5ldyByZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1ZSAodGhpcywgdmFyaWFibGUsIGluaXQp OworICByZWNvcmQgKG9iaik7CisKKyAgZ2xvYmFsICpnYmwgPSAoZ2xvYmFsICopIHZhcmlhYmxl OworICBnYmwtPnNldF9ydmFsdWVfaW5pdCAoaW5pdCk7IC8qIE5lZWRlZCBieSB0aGUgZ2xvYmFs IGZvciB3cml0ZSBkdW1wLiAgKi8KK30KKwogLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjptZW1lbnRv X29mX25ld19zdHJpbmdfbGl0ZXJhbCBpbnN0YW5jZSBhbmQgYWRkIGl0CiAgICB0byB0aGlzIGNv bnRleHQncyBsaXN0IG9mIG1lbWVudG9zLgogCkBAIC0xMDk0LDYgKzExMDYsNzIgQEAgcmVjb3Jk aW5nOjpjb250ZXh0OjpuZXdfcnZhbHVlX2Zyb21fdmVjdG9yIChsb2NhdGlvbiAqbG9jLAogICBy ZXR1cm4gcmVzdWx0OwogfQogCityZWNvcmRpbmc6OnJ2YWx1ZSAqCityZWNvcmRpbmc6OmNvbnRl eHQ6Om5ld19jdG9yIChyZWNvcmRpbmc6OmxvY2F0aW9uICpsb2MsCisJCQkgICAgICByZWNvcmRp bmc6OnR5cGUgKnR5cGUsCisJCQkgICAgICBzaXplX3QgbnVtX3ZhbHVlcywKKwkJCSAgICAgIGZp ZWxkICoqZmllbGRzLAorCQkJICAgICAgcnZhbHVlICoqdmFsdWVzKQoreworICByZWNvcmRpbmc6 OmN0b3IgKnJlc3VsdCA9IG5ldyBjdG9yICh0aGlzLCBsb2MsIHR5cGUpOworCisgIC8qIFNob3J0 IGN1dCBmb3IgemVybyBpbml0LiAgKi8KKyAgaWYgKCFudW1fdmFsdWVzKQorICAgIHsKKyAgICAg IHJlY29yZCAocmVzdWx0KTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgIGJvb2wg aXNfc3RydWN0X29yX3VuaW9uID0gdHlwZS0+aXNfc3RydWN0ICgpIHx8IHR5cGUtPmlzX3VuaW9u ICgpOworCisgIC8qIFdlIG5lZWQgdG8gY29weSBmaWVsZHMgYW5kIHZhbHVlcyBpbnRvIHJlc3Vs dCdzIGF1dG9fdmVjOnMuCisgICAgIEJvdGggZm9yIHN0cnVjdHMgYW5kIHVuaW9ucyBhbmQgb25s eSB2YWx1ZXMgZm9yIGFycmF5cy4gICovCisgIGlmICh0eXBlLT5pc19hcnJheSAoKSAhPSBOVUxM KQorICAgIHsKKyAgICAgIHJlc3VsdC0+bV92YWx1ZXMucmVzZXJ2ZSAobnVtX3ZhbHVlcywgZmFs c2UpOworCisgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykKKwly ZXN1bHQtPm1fdmFsdWVzLnF1aWNrX3B1c2ggKHZhbHVlc1tpXSk7CisgICAgfQorICBlbHNlIGlm IChpc19zdHJ1Y3Rfb3JfdW5pb24gJiYgZmllbGRzKQorICAgIHsKKyAgICAgIC8qIGN0b3IgdmFs dWVzIGFyZSBwYWlyZWQgd2l0aCB1c2VyIHNwZWNpZmllZCBmaWVsZHMuICAqLworCisgICAgICBy ZXN1bHQtPm1fdmFsdWVzLnJlc2VydmUgKG51bV92YWx1ZXMsIGZhbHNlKTsKKyAgICAgIHJlc3Vs dC0+bV9maWVsZHMucmVzZXJ2ZSAobnVtX3ZhbHVlcywgZmFsc2UpOworCisgICAgICBmb3IgKHNp emVfdCBpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykKKwl7CisJICByZXN1bHQtPm1fdmFsdWVz LnF1aWNrX3B1c2ggKHZhbHVlc1tpXSk7CisJICByZXN1bHQtPm1fZmllbGRzLnF1aWNrX3B1c2gg KGZpZWxkc1tpXSk7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoaXNfc3RydWN0X29yX3VuaW9uICYm ICFmaWVsZHMpCisgICAgeworICAgICAgLyogY3RvciB2YWx1ZXMgYXJlIGluIGRlZmluaXRpb24g b3JkZXIgb25lIGJ5IG9uZSwKKwkgc28gdGFrZSB0aGUgZmllbGRzIGZyb20gdGhlIHR5cGUgb2Jq ZWN0LiAgKi8KKworICAgICAgcmVzdWx0LT5tX3ZhbHVlcy5yZXNlcnZlIChudW1fdmFsdWVzLCBm YWxzZSk7CisgICAgICByZXN1bHQtPm1fZmllbGRzLnJlc2VydmUgKG51bV92YWx1ZXMsIGZhbHNl KTsKKworICAgICAgY29tcG91bmRfdHlwZSAqY3QgPSByZWludGVycHJldF9jYXN0PGNvbXBvdW5k X3R5cGUgKj4odHlwZSk7CisgICAgICByZWNvcmRpbmc6OmZpZWxkcyAqZmllbGRzID0gY3QtPmdl dF9maWVsZHMgKCk7CisKKyAgICAgIC8qIFRoZSBlbnRyeSBwb2ludCBjaGVja3MgdGhhdCBudW1f dmFsdWVzIGlzIG5vdCBncmVhdGVyIHRoYW4KKwkgdGhlIGFtb3VudCBvZiBmaWVsZHMgaW4gJ2Zp ZWxkcycuICAqLworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKysp CisJeworCSAgcmVzdWx0LT5tX3ZhbHVlcy5xdWlja19wdXNoICh2YWx1ZXNbaV0pOworCSAgcmVz dWx0LT5tX2ZpZWxkcy5xdWlja19wdXNoIChmaWVsZHMtPmdldF9maWVsZCAoaSkpOworCX0KKyAg ICB9CisgIGVsc2UKKyAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisKKyAgcmVjb3JkIChyZXN1bHQp OworICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBDcmVhdGUgYSByZWNvcmRpbmc6OnVuYXJ5X29w IGluc3RhbmNlIGFuZCBhZGQgaXQgdG8gdGhpcyBjb250ZXh0J3MKICAgIGxpc3Qgb2YgbWVtZW50 b3MuCiAKQEAgLTQ1ODEsMTEgKzQ2NTksMTMgQEAgcmVjb3JkaW5nOjpnbG9iYWw6OnJlcGxheV9p bnRvIChyZXBsYXllciAqcikKIAkJCQkgbV9pbml0aWFsaXplcl9udW1fYnl0ZXMKIAkJCQkgLyBt X3R5cGUtPmRlcmVmZXJlbmNlICgpLT5nZXRfc2l6ZSAoKSwKIAkJCQkgbV9pbml0aWFsaXplciwK LQkJCQkgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpKQotICA6IHItPm5ld19nbG9iYWwgKHBsYXli YWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCisJCQkJIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSwK KwkJCQkgbV9mbGFncykKKyAgICA6IHItPm5ld19nbG9iYWwgKHBsYXliYWNrX2xvY2F0aW9uIChy LCBtX2xvYyksCiAJCSAgICAgbV9raW5kLAogCQkgICAgIG1fdHlwZS0+cGxheWJhY2tfdHlwZSAo KSwKLQkJICAgICBwbGF5YmFja19zdHJpbmcgKG1fbmFtZSkpOworCQkgICAgIHBsYXliYWNrX3N0 cmluZyAobV9uYW1lKSwKKwkJICAgICBtX2ZsYWdzKTsKIAogICBpZiAobV90bHNfbW9kZWwgIT0g R0NDX0pJVF9UTFNfTU9ERUxfTk9ORSkKICAgICBnbG9iYWwtPnNldF90bHNfbW9kZWwgKHJlY29y ZGluZzo6dGxzX21vZGVsc1ttX3Rsc19tb2RlbF0pOwpAQCAtNDY0MiwyMSArNDcyMiwzMCBAQCBy ZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkKIAkgICBtX3R5cGUtPmdl dF9kZWJ1Z19zdHJpbmcgKCksCiAJICAgZ2V0X2RlYnVnX3N0cmluZyAoKSk7CiAKLSAgaWYgKCFt X2luaXRpYWxpemVyKQorICBpZiAoIW1faW5pdGlhbGl6ZXIgJiYgIW1fcnZhbHVlX2luaXQpCiAg ICAgewogICAgICAgZC53cml0ZSAoIjtcbiIpOwotICAgICAgcmV0dXJuOwogICAgIH0KLQotICBk LndyaXRlICgiPVxuICB7ICIpOwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKGNvbnN0IHVu c2lnbmVkIGNoYXIgKiltX2luaXRpYWxpemVyOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f aW5pdGlhbGl6ZXJfbnVtX2J5dGVzOyBpKyspCisgIGVsc2UgaWYgKG1faW5pdGlhbGl6ZXIpCiAg ICAgewotICAgICAgZC53cml0ZSAoIjB4JXgsICIsIHBbaV0pOwotICAgICAgaWYgKGkgJiYgIShp ICUgNjQpKQotCWQud3JpdGUgKCJcbiAgICAiKTsKKyAgICAgIGQud3JpdGUgKCI9XG4gIHsgIik7 CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilt X2luaXRpYWxpemVyOworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luaXRpYWxpemVy X251bV9ieXRlczsgaSsrKQorCXsKKwkgIGQud3JpdGUgKCIweCV4LCAiLCBwW2ldKTsKKwkgIGlm IChpICYmICEoaSAlIDY0KSkKKwkgICAgZC53cml0ZSAoIlxuICAgICIpOworCX0KKyAgICAgIGQu d3JpdGUgKCJ9O1xuIik7CiAgICAgfQotICBkLndyaXRlICgifTtcbiIpOworICBlbHNlIGlmICht X3J2YWx1ZV9pbml0KQorICAgIHsKKyAgICAgIGQud3JpdGUgKCIgPSAiKTsKKyAgICAgIGQud3Jp dGUgKG1fcnZhbHVlX2luaXQtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAgICAgZC53cml0ZSAo IjtcbiIpOworICAgIH0KKworICByZXR1cm47CiB9CiAKIC8qIEEgdGFibGUgb2YgZW51bSBnY2Nf aml0X2dsb2JhbF9raW5kIHZhbHVlcyBleHByZXNzZWQgaW4gc3RyaW5nCkBAIC01MTIzLDYgKzUy MTIsMjAxIEBAIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fdmVjdG9yOjp3 cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogCSAgIGVsZW1lbnRzX2lkKTsKIH0KIAor dm9pZAorcmVjb3JkaW5nOjpjdG9yOjp2aXNpdF9jaGlsZHJlbiAocnZhbHVlX3Zpc2l0b3IgKnYp Cit7CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV92YWx1ZXMubGVuZ3RoICgpOyBp KyspCisgICAgdi0+dmlzaXQgKG1fdmFsdWVzW2ldKTsKK30KKworcmVjb3JkaW5nOjpzdHJpbmcg KgorcmVjb3JkaW5nOjpjdG9yOjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICAvL01ha2UgYSBj b21wb3VuZCBsaXRlcmFsLWlzaAorICBwcmV0dHlfcHJpbnRlciBwcDsKKworICBwcF9zdHJpbmcg KCZwcCwgIigiKTsKKyAgcHBfc3RyaW5nICgmcHAsIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAo KSk7CisgIHBwX3N0cmluZyAoJnBwLCAiKSB7Iik7CisKKyAgc2l6ZV90IGZpZWxkX24gPSBtX2Zp ZWxkcy5sZW5ndGggKCk7CisgIHNpemVfdCB2YWx1ZXNfbiA9IG1fdmFsdWVzLmxlbmd0aCAoKTsK KworICBpZiAoIWZpZWxkX24gJiYgIXZhbHVlc19uKQorICAgIDsKKyAgZWxzZSBpZiAoIWZpZWxk X24gJiYgdmFsdWVzX24pCisgICAgeworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1 ZXNfbjsgaSsrKQorCXsKKwkgIGlmIChtX3ZhbHVlc1tpXSkKKwkgICAgcHBfc3RyaW5nICgmcHAs IG1fdmFsdWVzW2ldLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKwkgIGVsc2UKKwkgICAgcHBfc3Ry aW5nICgmcHAsICIwIik7CisJICBpZiAoaSArIDEgIT0gdmFsdWVzX24pCisJICAgIHBwX3N0cmlu ZyAoJnBwLCAiLCAiKTsKKwl9CisgICAgfQorICBlbHNlIGlmIChmaWVsZF9uICYmIHZhbHVlc19u KQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzX247IGkrKykKKwl7 CisJICBwcF9zdHJpbmcgKCZwcCwgIi4iKTsKKwkgIHBwX3N0cmluZyAoJnBwLCBtX2ZpZWxkc1tp XS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisJICBwcF9zdHJpbmcgKCZwcCwgIj0iKTsKKwkgIGlm IChtX3ZhbHVlc1tpXSkKKwkgICAgcHBfc3RyaW5nICgmcHAsIG1fdmFsdWVzW2ldLT5nZXRfZGVi dWdfc3RyaW5nICgpKTsKKwkgIGVsc2UKKwkgICAgcHBfc3RyaW5nICgmcHAsICIwIik7CisJICBp ZiAoaSArIDEgIT0gdmFsdWVzX24pCisJICAgIHBwX3N0cmluZyAoJnBwLCAiLCAiKTsKKwl9Cisg ICAgfQorICAvKiBtX2ZpZWxkcyBhcmUgbmV2ZXIgcG9wdWxhdGVkIHdpdGggbV92YWx1ZXMgZW1w dHkuICAqLworCisgIHBwX3N0cmluZyAoJnBwLCAifSIpOworCisgIHJldHVybiBuZXdfc3RyaW5n IChwcF9mb3JtYXR0ZWRfdGV4dCAoJnBwKSk7Cit9CisKK3ZvaWQKK3JlY29yZGluZzo6Y3Rvcjo6 d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKK3sKKyAgY29uc3QgY2hhciAqaWQgPSBy Lm1ha2VfaWRlbnRpZmllciAodGhpcywgInJ2YWx1ZSIpOworICB0eXBlICp0eXBlID0gZ2V0X3R5 cGUgKCk7CisKKyAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiVzO1xuIiwgaWQpOworICBy LndyaXRlICgiICB7XG4iKTsgLyogT3BlbiBzY29wZSBmb3IgbG9jYWxzLiAgKi8KKworICBpZiAo dHlwZS0+aXNfdW5pb24gKCkpCisgICAgeworICAgICAgaWYgKG1fdmFsdWVzLmxlbmd0aCAoKSA9 PSAwKQorCXIud3JpdGUgKCIgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlID0gTlVMTDtcbiIpOwor ICAgICAgZWxzZQorCXIud3JpdGUgKCIgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlID0gJXM7XG4i LAorCQkgci5nZXRfaWRlbnRpZmllciAobV92YWx1ZXNbMF0pKTsKKworICAgICAgaWYgKG1fZmll bGRzLmxlbmd0aCAoKSA9PSAwKQorCXIud3JpdGUgKCIgICAgZ2NjX2ppdF9maWVsZCAqZmllbGQg PSBOVUxMO1xuIik7CisgICAgICBlbHNlCisJci53cml0ZSAoIiAgICBnY2Nfaml0X2ZpZWxkICpm aWVsZCA9ICVzO1xuIiwKKwkJIHIuZ2V0X2lkZW50aWZpZXIgKG1fZmllbGRzWzBdKSk7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgLyogV3JpdGUgdGhlIGFycmF5IG9mIHZhbHVlcy4gICov CisgICAgICBpZiAobV92YWx1ZXMubGVuZ3RoICgpID09IDApCisJci53cml0ZSAoIiAgICBnY2Nf aml0X3J2YWx1ZSAqKnZhbHVlcyA9IE5VTEw7XG4iKTsKKyAgICAgIGVsc2UKKwl7CisJICByLndy aXRlICgiICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtcbiIpOworCSAgZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBtX3ZhbHVlcy5sZW5ndGggKCk7IGkrKykKKwkgICAgci53cml0ZSAoIiAg ICAgICAgJXMsXG4iLCByLmdldF9pZGVudGlmaWVyIChtX3ZhbHVlc1tpXSkpOworCSAgci53cml0 ZSAoIiAgICAgIH07XG4iKTsKKwl9CisgICAgICAvKiBXcml0ZSB0aGUgYXJyYXkgb2YgZmllbGRz LiAgKi8KKyAgICAgIGlmIChtX2ZpZWxkcy5sZW5ndGggKCkgPT0gMCkKKwlyLndyaXRlICgiICAg IGdjY19qaXRfZmllbGQgKipmaWVsZHMgPSBOVUxMO1xuIik7CisgICAgICBlbHNlCisJeworCSAg ci53cml0ZSAoIiAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtcbiIpOworCSAgZm9yIChz aXplX3QgaSA9IDA7IGkgPCBtX2ZpZWxkcy5sZW5ndGggKCk7IGkrKykKKwkgICAgci53cml0ZSAo IiAgICAgICAgJXMsXG4iLCByLmdldF9pZGVudGlmaWVyIChtX2ZpZWxkc1tpXSkpOworCSAgci53 cml0ZSAoIiAgICAgIH07XG4iKTsKKwl9CisgICAgfQorICBpZiAodHlwZS0+aXNfYXJyYXkgKCkp CisgICAgci53cml0ZSAoCisiICAgICVzID1cbiIKKyIgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2FycmF5X2NvbnN0cnVjdG9yICglcyxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF9sb2NhdGlvbiAqbG9jICovXG4iCisiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRf dHlwZSAqdHlwZSAqL1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICVpLCAvKiBpbnQgbnVtX3ZhbHVlcyAqL1xuIgorIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyk7XG4iLAorCSAgIGlkLAorCSAgIHIuZ2V0 X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKwkgICByLmdldF9pZGVudGlmaWVyIChtX2xv YyksCisJICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChnZXRfdHlwZSAoKSksCisJICAgbV92 YWx1ZXMubGVuZ3RoICgpKTsKKyAgZWxzZSBpZiAodHlwZS0+aXNfc3RydWN0ICgpKQorICAgIHIu d3JpdGUgKAorIiAgICAlcyA9XG4iCisiICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3Rf Y29uc3RydWN0b3IgKCVzLFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAlcywgLyogbG9jICovXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKnR5cGUgKi9cbiIKKyIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWksIC8qIGludCBudW1f dmFsdWVzICovXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZpZWxkcyxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsdWVzKTtcbiIsCisJICAgaWQsCisJICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2Nv bnRleHQgKCkpLAorCSAgIHIuZ2V0X2lkZW50aWZpZXIgKG1fbG9jKSwKKwkgICByLmdldF9pZGVu dGlmaWVyX2FzX3R5cGUgKGdldF90eXBlICgpKSwKKwkgICBtX3ZhbHVlcy5sZW5ndGggKCkpOwor ICBlbHNlIGlmICh0eXBlLT5pc191bmlvbiAoKSkKKyAgICByLndyaXRlICgKKyIgICAgJXMgPVxu IgorIiAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3IgKCVzLFxuIgor IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBsb2Mg Ki9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcywg LyogZ2NjX2ppdF90eXBlICp0eXBlICovXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmllbGQsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFsdWUpO1xuIiwKKwkgICBpZCwKKwkgICByLmdldF9pZGVudGlm aWVyIChnZXRfY29udGV4dCAoKSksCisJICAgci5nZXRfaWRlbnRpZmllciAobV9sb2MpLAorCSAg IHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAoZ2V0X3R5cGUgKCkpKTsKKyAgZWxzZQorICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKKworICByLndyaXRlICgiICB9XG4iKTsgLyogQ2xvc2Ugc2NvcGUg Zm9yIGxvY2Fscy4gICovCit9CisKK3ZvaWQKK3JlY29yZGluZzo6Y3Rvcjo6cmVwbGF5X2ludG8g KHJlcGxheWVyICpyKQoreworICBhdXRvX3ZlYzxwbGF5YmFjazo6cnZhbHVlICo+IHBsYXliYWNr X3ZhbHVlczsKKyAgYXV0b192ZWM8cGxheWJhY2s6OmZpZWxkICo+IHBsYXliYWNrX2ZpZWxkczsK KworICBpbnQgbiA9IG1fdmFsdWVzLmxlbmd0aCAoKTsKKworICB0eXBlICp0eXBlID0gZ2V0X3R5 cGUgKCk7CisKKyAgLyogSGFuZGxlIGFycmF5cywgYW5kIHJldHVybi4gICovCisgIGlmICh0eXBl LT5pc19hcnJheSAoKSkKKyAgICB7CisgICAgICBwbGF5YmFja192YWx1ZXMucmVzZXJ2ZSAobiwg ZmFsc2UpOworCisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKwl7CisJICAvKiBu dWxsIG1fdmFsdWVzIGVsZW1lbnQgaW5kaWNhdGVzIHplcm8gY3Rvci4gICovCisJICBwbGF5YmFj a192YWx1ZXMucXVpY2tfcHVzaCAobV92YWx1ZXNbaV0gPworCQkJCSAgICAgIG1fdmFsdWVzW2ld LT5wbGF5YmFja19ydmFsdWUgKCkgOgorCQkJCSAgICAgIE5VTEwpOworCX0KKyAgICAgIHNldF9w bGF5YmFja19vYmogKHItPm5ld19jdG9yIChwbGF5YmFja19sb2NhdGlvbiAociwgbV9sb2MpLAor CQkJCSAgICAgZ2V0X3R5cGUgKCktPnBsYXliYWNrX3R5cGUgKCksCisJCQkJICAgICBOVUxMLAor CQkJCSAgICAgJnBsYXliYWNrX3ZhbHVlcykpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyog Li4uIGVsc2UgaGFuZGxlIHVuaW9ucyBhbmQgc3RydWN0cy4gICovCisKKyAgcGxheWJhY2tfdmFs dWVzLnJlc2VydmUgKG4sIGZhbHNlKTsKKyAgcGxheWJhY2tfZmllbGRzLnJlc2VydmUgKG4sIGZh bHNlKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICAvKiBu dWxsIG1fdmFsdWVzIGVsZW1lbnQgaW5kaWNhdGVzIHplcm8gY3Rvci4gICovCisgICAgICBwbGF5 YmFja192YWx1ZXMucXVpY2tfcHVzaCAobV92YWx1ZXNbaV0gPworCQkJCSAgICBtX3ZhbHVlc1tp XS0+cGxheWJhY2tfcnZhbHVlICgpIDoKKwkJCQkgICAgTlVMTCk7CisgICAgICBwbGF5YmFja19m aWVsZHMucXVpY2tfcHVzaCAobV9maWVsZHNbaV0tPnBsYXliYWNrX2ZpZWxkICgpKTsKKyAgICB9 CisKKyAgc2V0X3BsYXliYWNrX29iaiAoci0+bmV3X2N0b3IgKHBsYXliYWNrX2xvY2F0aW9uIChy LCBtX2xvYyksCisJCQkJIGdldF90eXBlICgpLT5wbGF5YmFja190eXBlICgpLAorCQkJCSAmcGxh eWJhY2tfZmllbGRzLAorCQkJCSAmcGxheWJhY2tfdmFsdWVzKSk7Cit9CisKIC8qIFRoZSBpbXBs ZW1lbnRhdGlvbiBvZiBjbGFzcyBnY2M6OmppdDo6cmVjb3JkaW5nOjp1bmFyeV9vcC4gICovCiAK IC8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBob29rIHJlY29yZGluZzo6bWVtZW50 bzo6cmVwbGF5X2ludG8KQEAgLTcwODcsNiArNzM3MSwxNjcgQEAgcmVjb3JkaW5nOjp0b3BfbGV2 ZWxfYXNtOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogCSAgIG1fYXNtX3N0bXRz LT5nZXRfZGVidWdfc3RyaW5nICgpKTsKIH0KIAordm9pZAorcmVjb3JkaW5nOjpnbG9iYWxfaW5p dF9ydmFsdWU6OnJlcGxheV9pbnRvIChyZXBsYXllciAqcikKK3sKKyAgci0+Z2xvYmFsX3NldF9p bml0X3J2YWx1ZSAobV92YXJpYWJsZS0+cGxheWJhY2tfbHZhbHVlICgpLAorCQkJICAgICBtX2lu aXQtPnBsYXliYWNrX3J2YWx1ZSAoKSk7Cit9CisKK3ZvaWQKK3JlY29yZGluZzo6Z2xvYmFsX2lu aXRfcnZhbHVlOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQoreworICByLndyaXRl ICgKKyAgICAiICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICglcywgLyog bHZhbHVlICpnbG9iYWwgKi9cbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAlcyk7LyogcnZhbHVlICppbml0ICovXG4iLAorICAgIHIuZ2V0X2lkZW50aWZp ZXIgKG1fdmFyaWFibGUpLAorICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfcnZhbHVlIChtX2luaXQp KTsKK30KKwordm9pZAorcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWU6OndyaXRlX3RvX2R1 bXAgKGR1bXAgJmQpCit7CisgIGQud3JpdGUgKCIlcztcbiIsIGdldF9kZWJ1Z19zdHJpbmcgKCkp OworfQorCityZWNvcmRpbmc6OnN0cmluZyAqCityZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1 ZTo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkKK3sKKyAgICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50 ZiAobV9jdHh0LCAiJXMgPSAlcyIsCisgICAgICBtX3ZhcmlhYmxlLT5nZXRfZGVidWdfc3RyaW5n ICgpLAorICAgICAgbV9pbml0LT5nZXRfZGVidWdfc3RyaW5nICgpKTsKK30KKworZW51bSBzdHJp cF9mbGFncyB7CisgIFNUUklQX0ZMQUdfTk9ORSwKKyAgU1RSSVBfRkxBR19BUlIsCisgIFNUUklQ X0ZMQUdfVkVDCit9OworCisvKiBTdHJpcHMgdHlwZSBkb3duIHRvIGFycmF5LCB2ZWN0b3Igb3Ig YmFzZSB0eXBlICh3aGljaGV2ZXIgY29tZXMgZmlyc3QpCisKKyAgIEFsc28gc2F2ZXMgJ3B0cl9k ZXB0aCcgYW5kIHNldHMgJ2ZsYWdzJyBmb3IgYXJyYXkgb3IgdmVjdG9yIHR5cGVzLiAgKi8KK3N0 YXRpYworcmVjb3JkaW5nOjp0eXBlICoKK3N0cmlwX2FuZF9jb3VudCAocmVjb3JkaW5nOjp0eXBl ICp0eXBlX3RvX3N0cmlwLAorCQkgaW50ICZwdHJfZGVwdGgsCisJCSBzdHJpcF9mbGFncyAmZmxh Z3MpCit7CisgIHJlY29yZGluZzo6dHlwZSAqdCA9IHR5cGVfdG9fc3RyaXA7CisKKyAgd2hpbGUg KHRydWUpCisgICAgeworICAgICAgaWYgKCF0KQorCWdjY191bnJlYWNoYWJsZSAoKTsgLyogU2hv dWxkIG9ubHkgaGFwcGVuIG9uIGNvcnJ1cHQgaW5wdXQuICAqLworCisgICAgICByZWNvcmRpbmc6 OnR5cGUgKnBvaW50ZWRfdG9fdHlwZSA9IHQtPmlzX3BvaW50ZXIgKCk7CisgICAgICBpZiAocG9p bnRlZF90b190eXBlICE9IE5VTEwpCisJeworCSAgcHRyX2RlcHRoKys7CisJICB0ID0gcG9pbnRl ZF90b190eXBlOworCSAgY29udGludWU7CisJfQorCisgICAgICByZWNvcmRpbmc6OnR5cGUgKmFy cmF5X2VsID0gdC0+aXNfYXJyYXkgKCk7CisgICAgICBpZiAoYXJyYXlfZWwgIT0gTlVMTCkKKwl7 CisJICBmbGFncyA9IFNUUklQX0ZMQUdfQVJSOworCSAgYnJlYWs7CisJfQorCisgICAgICByZWNv cmRpbmc6OnR5cGUgKnZlYyA9IHQtPmR5bl9jYXN0X3ZlY3Rvcl90eXBlICgpOworICAgICAgaWYg KHZlYyAhPSBOVUxMKQorCXsKKwkgIGZsYWdzID0gU1RSSVBfRkxBR19WRUM7CisJICBicmVhazsK Kwl9CisKKyAgICAgIC8qIHVucXVhbGlmaWVkICgpIHJldHVybnMgJ3RoaXMnIG9uIGJhc2UgdHlw ZXMuICAqLworICAgICAgcmVjb3JkaW5nOjp0eXBlICpuZXh0ID0gdC0+dW5xdWFsaWZpZWQgKCk7 CisgICAgICBpZiAobmV4dCA9PSB0KQorCXsKKwkgIGJyZWFrOworCX0KKyAgICAgIHQgPSBuZXh0 OworICAgIH0KKworICByZXR1cm4gdDsKK30KKworLyogU3RyaXAgcXVhbGlmaWVycyBhbmQgY291 bnQgcG9pbnRlciBkZXB0aCwgcmV0dXJuaW5nIHRydWUKKyAgIGlmIHRoZSB0eXBlcycgYmFzZSB0 eXBlIGFuZCBwb2ludGVyIGRlcHRoIGFyZQorICAgdGhlIHNhbWUsIG90aGVyd2lzZSBmYWxzZS4K KworICAgRm9yIGFycmF5IGFuZCB2ZWN0b3IgdHlwZXMgdGhlIG51bWJlciBvZiBlbGVtZW50IGFs c28KKyAgIGhhcyB0byBtYXRjaC4KKworICAgRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseS4gIENh bGwgJ3R5cGVzX2tpbmRhX3NhbWUnLiAgKi8KK2Jvb2wKK3R5cGVzX2tpbmRhX3NhbWVfaW50ZXJu YWwgKHJlY29yZGluZzo6dHlwZSAqYSwgcmVjb3JkaW5nOjp0eXBlICpiKQoreworICBpbnQgcHRy X2RlcHRoX2EgPSAwOworICBpbnQgcHRyX2RlcHRoX2IgPSAwOworICByZWNvcmRpbmc6OnR5cGUg KmJhc2VfYTsKKyAgcmVjb3JkaW5nOjp0eXBlICpiYXNlX2I7CisKKyAgc3RyaXBfZmxhZ3MgZmxh Z3NfYSA9IFNUUklQX0ZMQUdfTk9ORTsKKyAgc3RyaXBfZmxhZ3MgZmxhZ3NfYiA9IFNUUklQX0ZM QUdfTk9ORTsKKworICBiYXNlX2EgPSBzdHJpcF9hbmRfY291bnQgKGEsIHB0cl9kZXB0aF9hLCBm bGFnc19hKTsKKyAgYmFzZV9iID0gc3RyaXBfYW5kX2NvdW50IChiLCBwdHJfZGVwdGhfYiwgZmxh Z3NfYik7CisKKyAgaWYgKHB0cl9kZXB0aF9hICE9IHB0cl9kZXB0aF9iKQorICAgIHJldHVybiBm YWxzZTsKKworICBpZiAoYmFzZV9hID09IGJhc2VfYikKKyAgICByZXR1cm4gdHJ1ZTsKKworICBp ZiAoZmxhZ3NfYSAhPSBmbGFnc19iKQorICAgIHJldHVybiBmYWxzZTsKKworICAvKiBJZiB0aGUg ImJhc2UgdHlwZSIgaXMgYW4gYXJyYXkgb3IgdmVjdG9yIHdlIG1pZ2h0IG5lZWQgdG8KKyAgICAg Y2hlY2sgZGVlcGVyLiAgKi8KKyAgaWYgKGZsYWdzX2EgPT0gU1RSSVBfRkxBR19BUlIpCisgICAg eworICAgICAgcmVjb3JkaW5nOjphcnJheV90eXBlICphcnJfYSA9CisJc3RhdGljX2Nhc3Q8cmVj b3JkaW5nOjphcnJheV90eXBlKj4gKGJhc2VfYSk7CisgICAgICByZWNvcmRpbmc6OmFycmF5X3R5 cGUgKmFycl9iID0KKwlzdGF0aWNfY2FzdDxyZWNvcmRpbmc6OmFycmF5X3R5cGUqPiAoYmFzZV9i KTsKKworICAgICAgaWYgKGFycl9hLT5udW1fZWxlbWVudHMgKCkgIT0gYXJyX2ItPm51bV9lbGVt ZW50cyAoKSkKKwlyZXR1cm4gZmFsc2U7CisKKyAgICAgIC8qIGlzX2FycmF5IHJldHVybnMgZWxl bWVudCB0eXBlLiAgKi8KKyAgICAgIHJlY29yZGluZzo6dHlwZSAqZWxfYSA9IGFycl9hLT5pc19h cnJheSAoKTsKKyAgICAgIHJlY29yZGluZzo6dHlwZSAqZWxfYiA9IGFycl9iLT5pc19hcnJheSAo KTsKKworICAgICAgaWYgKGVsX2EgPT0gZWxfYikKKwlyZXR1cm4gdHJ1ZTsKKworICAgICAgcmV0 dXJuIHR5cGVzX2tpbmRhX3NhbWVfaW50ZXJuYWwgKGVsX2EsIGVsX2IpOworICAgIH0KKyAgaWYg KGZsYWdzX2EgPT0gU1RSSVBfRkxBR19WRUMpCisgICAgeworICAgICAgcmVjb3JkaW5nOjp2ZWN0 b3JfdHlwZSAqYXJyX2EgPQorCXN0YXRpY19jYXN0PHJlY29yZGluZzo6dmVjdG9yX3R5cGUqPiAo YmFzZV9hKTsKKyAgICAgIHJlY29yZGluZzo6dmVjdG9yX3R5cGUgKmFycl9iID0KKwlzdGF0aWNf Y2FzdDxyZWNvcmRpbmc6OnZlY3Rvcl90eXBlKj4gKGJhc2VfYik7CisKKyAgICAgIGlmIChhcnJf YS0+Z2V0X251bV91bml0cyAoKSAhPSBhcnJfYi0+Z2V0X251bV91bml0cyAoKSkKKwlyZXR1cm4g ZmFsc2U7CisKKyAgICAgIHJlY29yZGluZzo6dHlwZSAqZWxfYSA9IGFycl9hLT5nZXRfZWxlbWVu dF90eXBlICgpOworICAgICAgcmVjb3JkaW5nOjp0eXBlICplbF9iID0gYXJyX2ItPmdldF9lbGVt ZW50X3R5cGUgKCk7CisKKyAgICAgIGlmIChlbF9hID09IGVsX2IpCisJcmV0dXJuIHRydWU7CisK KyAgICAgIHJldHVybiB0eXBlc19raW5kYV9zYW1lX2ludGVybmFsIChlbF9hLCBlbF9iKTsKKyAg ICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBnY2M6OmppdAogCiB9 IC8vIG5hbWVzcGFjZSBnY2MKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJlY29yZGluZy5oIGIv Z2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKaW5kZXggY2VkYjI0NzIwY2YuLmU5NzYwYzQ3YWQwIDEw MDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAorKysgYi9nY2Mvaml0L2ppdC1yZWNv cmRpbmcuaApAQCAtMTQ5LDYgKzE0OSwxNyBAQCBwdWJsaWM6CiAJICAgICAgdHlwZSAqdHlwZSwK IAkgICAgICBjb25zdCBjaGFyICpuYW1lKTsKIAorICBydmFsdWUgKgorICBuZXdfY3RvciAobG9j YXRpb24gKmxvYywKKwkgICAgdHlwZSAqdHlwZSwKKwkgICAgc2l6ZV90IG51bV92YWx1ZXMsCisJ ICAgIGZpZWxkICoqZmllbGRzLAorCSAgICBydmFsdWUgKip2YWx1ZXMpOworCisgIHZvaWQKKyAg bmV3X2dsb2JhbF9pbml0X3J2YWx1ZSAobHZhbHVlICp2YXJpYWJsZSwKKwkJCSAgcnZhbHVlICpp bml0KTsKKwogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSE9TVF9UWVBFPgogICBydmFsdWUgKgogICBu ZXdfcnZhbHVlX2Zyb21fY29uc3QgKHR5cGUgKnR5cGUsCkBAIC01NDksNiArNTYwLDcgQEAgcHVi bGljOgogICB2aXJ0dWFsIHR5cGUgKmlzX2NvbnN0ICgpIHsgcmV0dXJuIE5VTEw7IH0KICAgdmly dHVhbCB0eXBlICppc19hcnJheSAoKSA9IDA7CiAgIHZpcnR1YWwgc3RydWN0XyAqaXNfc3RydWN0 ICgpIHsgcmV0dXJuIE5VTEw7IH0KKyAgdmlydHVhbCBib29sIGlzX3VuaW9uICgpIGNvbnN0IHsg cmV0dXJuIGZhbHNlOyB9CiAgIHZpcnR1YWwgYm9vbCBpc192b2lkICgpIGNvbnN0IHsgcmV0dXJu IGZhbHNlOyB9CiAgIHZpcnR1YWwgdmVjdG9yX3R5cGUgKmlzX3ZlY3RvciAoKSB7IHJldHVybiBO VUxMOyB9CiAgIHZpcnR1YWwgYm9vbCBoYXNfa25vd25fc2l6ZSAoKSBjb25zdCB7IHJldHVybiB0 cnVlOyB9CkBAIC0xMDE2LDYgKzEwMjgsOCBAQCBwdWJsaWM6CiAKICAgdm9pZCByZXBsYXlfaW50 byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOwogCisgIHZpcnR1YWwgYm9vbCBpc191bmlv biAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKIHByaXZhdGU6CiAg IHN0cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURFOwogICB2b2lkIHdy aXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpIEZJTkFMIE9WRVJSSURFOwpAQCAtMTQyMSw2 ICsxNDM1LDIzIEBAIHB1YmxpYzoKICAgICBtX2luaXRpYWxpemVyX251bV9ieXRlcyA9IG51bV9i eXRlczsKICAgfQogCisgIHZvaWQgc2V0X2ZsYWdzIChpbnQgZmxhZ19maWVsZHMpCisgIHsKKyAg ICBtX2ZsYWdzID0gKGVudW0gZ2xvYmFsX3Zhcl9mbGFncykobV9mbGFncyB8IGZsYWdfZmllbGRz KTsKKyAgfQorICAvKiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBmbGFncyBpbiB0aGUgYXJn dW1lbnQgaXMgc2V0LiAgKi8KKyAgYm9vbCB0ZXN0X2ZsYWdzX2FueW9mIChpbnQgZmxhZ19maWVs ZHMpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbV9mbGFncyAmIGZsYWdfZmllbGRzOworICB9CisK KyAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGdldF9raW5kICgpIGNvbnN0CisgIHsKKyAgICBy ZXR1cm4gbV9raW5kOworICB9CisKKyAgdm9pZCBzZXRfcnZhbHVlX2luaXQgKHJ2YWx1ZSAqdmFs KSB7IG1fcnZhbHVlX2luaXQgPSB2YWw7IH0KKwogcHJpdmF0ZToKICAgc3RyaW5nICogbWFrZV9k ZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9uYW1lOyB9CiAgIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgpAQCAtMTQzMyw4ICsxNDY0LDEwIEBAIHByaXZhdGU6CiAKIHByaXZh dGU6CiAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBtX2tpbmQ7CisgIGVudW0gZ2xvYmFsX3Zh cl9mbGFncyBtX2ZsYWdzID0gR0xPQkFMX1ZBUl9GTEFHU19OT05FOwogICBzdHJpbmcgKm1fbmFt ZTsKICAgdm9pZCAqbV9pbml0aWFsaXplcjsKKyAgcnZhbHVlICptX3J2YWx1ZV9pbml0ID0gbnVs bHB0cjsgLyogT25seSBuZWVkZWQgZm9yIHdyaXRlX2R1bXAuICAqLwogICBzaXplX3QgbV9pbml0 aWFsaXplcl9udW1fYnl0ZXM7CiB9OwogCkBAIC0xNTE5LDYgKzE1NTIsMzIgQEAgcHJpdmF0ZToK ICAgYXV0b192ZWM8cnZhbHVlICo+IG1fZWxlbWVudHM7CiB9OwogCitjbGFzcyBjdG9yIDogcHVi bGljIHJ2YWx1ZQoreworcHVibGljOgorICBjdG9yIChjb250ZXh0ICpjdHh0LAorCWxvY2F0aW9u ICpsb2MsCisJdHlwZSAqdHlwZSkKKyAgOiBydmFsdWUgKGN0eHQsIGxvYywgdHlwZSkKKyAgeyB9 CisKKyAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOworCisg IHZvaWQgdmlzaXRfY2hpbGRyZW4gKHJ2YWx1ZV92aXNpdG9yICopIEZJTkFMIE9WRVJSSURFOwor Citwcml2YXRlOgorICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmluZyAoKSBGSU5BTCBPVkVSUklE RTsKKyAgdm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKSBGSU5BTCBPVkVSUklE RTsKKyAgZW51bSBwcmVjZWRlbmNlIGdldF9wcmVjZWRlbmNlICgpIGNvbnN0IEZJTkFMIE9WRVJS SURFCisgIHsKKyAgICByZXR1cm4gUFJFQ0VERU5DRV9QUklNQVJZOworICB9CisKK3B1YmxpYzoK KyAgYXV0b192ZWM8ZmllbGQgKj4gbV9maWVsZHM7CisgIGF1dG9fdmVjPHJ2YWx1ZSAqPiBtX3Zh bHVlczsKK307CisKIGNsYXNzIHVuYXJ5X29wIDogcHVibGljIHJ2YWx1ZQogewogcHVibGljOgpA QCAtMjM2Miw2ICsyNDIxLDI0IEBAIHByaXZhdGU6CiAgIHN0cmluZyAqbV9hc21fc3RtdHM7CiB9 OwogCitjbGFzcyBnbG9iYWxfaW5pdF9ydmFsdWUgOiBwdWJsaWMgbWVtZW50bworeworcHVibGlj OgorICBnbG9iYWxfaW5pdF9ydmFsdWUgKGNvbnRleHQgKmN0eHQsIGx2YWx1ZSAqdmFyaWFibGUs IHJ2YWx1ZSAqaW5pdCkgOgorICAgIG1lbWVudG8gKGN0eHQpLCBtX3ZhcmlhYmxlICh2YXJpYWJs ZSksIG1faW5pdCAoaW5pdCkge307CisKKyAgdm9pZCB3cml0ZV90b19kdW1wIChkdW1wICZkKSBG SU5BTCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIg KnIpIEZJTkFMIE9WRVJSSURFOworICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmluZyAoKSBGSU5B TCBPVkVSUklERTsKKyAgdm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKSBGSU5B TCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgbHZhbHVlICptX3ZhcmlhYmxlOworICBydmFsdWUg Km1faW5pdDsKK307CisKIH0gLy8gbmFtZXNwYWNlIGdjYzo6aml0OjpyZWNvcmRpbmcKIAogLyog Q3JlYXRlIGEgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCBpbnN0 YW5jZSBhbmQgYWRkCkBAIC0yMzgxLDYgKzI0NTgsMjMgQEAgcmVjb3JkaW5nOjpjb250ZXh0Ojpu ZXdfcnZhbHVlX2Zyb21fY29uc3QgKHJlY29yZGluZzo6dHlwZSAqdHlwZSwKICAgcmV0dXJuIHJl c3VsdDsKIH0KIAorLyogRG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiAgQ2FsbCB0eXBlc19raW5k YV9zYW1lLiAgKi8KK2Jvb2wKK3R5cGVzX2tpbmRhX3NhbWVfaW50ZXJuYWwgKHJlY29yZGluZzo6 dHlwZSAqYSwKKwkJCSAgIHJlY29yZGluZzo6dHlwZSAqYik7CisKKy8qIFN0cmlwIGFsbCBxdWFs aWZpZXJzIGFuZCBjb3VudCBwb2ludGVyIGRlcHRoLCByZXR1cm5pbmcgdHJ1ZQorICAgaWYgdGhl IHR5cGVzIGFuZCBwb2ludGVyIGRlcHRoIGFyZSB0aGUgc2FtZSwgb3RoZXJ3aXNlIGZhbHNlLgor CisgICBGb3IgYXJyYXkgYW5kIHZlY3RvciB0eXBlcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnQgYWxz bworICAgaGFzIHRvIG1hdGNoLCBhc3dlbGwgYXMgdGhlIGVsZW1lbnQgdHlwZXMgdGhlbXNlbGYu ICAqLworc3RhdGljIGlubGluZSBib29sCit0eXBlc19raW5kYV9zYW1lIChyZWNvcmRpbmc6OnR5 cGUgKmEsIHJlY29yZGluZzo6dHlwZSAqYikKK3sKKyAgLyogSGFuZGxlIHRyaXZpYWwgY2FzZSBo ZXJlLCB0byBhbGxvdyBmb3IgaW5saW5pbmcuICAqLworICByZXR1cm4gYSA9PSBiIHx8IHR5cGVz X2tpbmRhX3NhbWVfaW50ZXJuYWwgKGEsIGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBnY2M6Ompp dAogCiB9IC8vIG5hbWVzcGFjZSBnY2MKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Kysu aCBiL2djYy9qaXQvbGliZ2Njaml0KysuaAppbmRleCA4MjgzMWZmNWRhMC4uMjU0MTQ2MjBhZmIg MTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0KysuaAorKysgYi9nY2Mvaml0L2xpYmdjY2pp dCsrLmgKQEAgLTE5Nyw2ICsxOTcsMjAgQEAgbmFtZXNwYWNlIGdjY2ppdAogICAgIHJ2YWx1ZSBu ZXdfcnZhbHVlICh0eXBlIHZlY3Rvcl90eXBlLAogCQkgICAgICAgc3RkOjp2ZWN0b3I8cnZhbHVl PiBlbGVtZW50cykgY29uc3Q7CiAKKyAgICBydmFsdWUgbmV3X3N0cnVjdF9jdG9yICh0eXBlIHR5 cGVfLAorCQkJICAgIHN0ZDo6dmVjdG9yPGZpZWxkPiAmZmllbGRzLAorCQkJICAgIHN0ZDo6dmVj dG9yPHJ2YWx1ZT4gJnZhbHVlcywKKwkJCSAgICBsb2NhdGlvbiBsb2MgPSBsb2NhdGlvbiAoKSk7 CisKKyAgICBydmFsdWUgbmV3X2FycmF5X2N0b3IgKHR5cGUgdHlwZV8sCisJCQkgICBzdGQ6OnZl Y3RvcjxydmFsdWU+ICZ2YWx1ZXMsCisJCQkgICBsb2NhdGlvbiBsb2MgPSBsb2NhdGlvbiAoKSk7 CisKKyAgICBydmFsdWUgbmV3X3VuaW9uX2N0b3IgKHR5cGUgdHlwZV8sCisJCQkgICBmaWVsZCBm aWVsZCwKKwkJCSAgIHJ2YWx1ZSB2YWx1ZSwKKwkJCSAgIGxvY2F0aW9uIGxvYyA9IGxvY2F0aW9u ICgpKTsKKwogICAgIC8qIEdlbmVyaWMgdW5hcnkgb3BlcmF0aW9ucy4uLiAgKi8KICAgICBydmFs dWUgbmV3X3VuYXJ5X29wIChlbnVtIGdjY19qaXRfdW5hcnlfb3Agb3AsCiAJCQkgdHlwZSByZXN1 bHRfdHlwZSwKQEAgLTUwMCw2ICs1MTQsNyBAQCBuYW1lc3BhY2UgZ2Njaml0CiAKICAgICBydmFs dWUgZ2V0X2FkZHJlc3MgKGxvY2F0aW9uIGxvYyA9IGxvY2F0aW9uICgpKTsKICAgICBsdmFsdWUg c2V0X2luaXRpYWxpemVyIChjb25zdCB2b2lkICpibG9iLCBzaXplX3QgbnVtX2J5dGVzKTsKKyAg ICBsdmFsdWUgc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocnZhbHVlIGluaXRfdmFsdWUpOwogICB9 OwogCiAgIGNsYXNzIHBhcmFtIDogcHVibGljIGx2YWx1ZQpAQCAtMTgzMSw2ICsxODQ2LDgxIEBA IGx2YWx1ZTo6c2V0X2luaXRpYWxpemVyIChjb25zdCB2b2lkICpibG9iLCBzaXplX3QgbnVtX2J5 dGVzKQogICByZXR1cm4gKnRoaXM7CiB9CiAKK2lubGluZSBsdmFsdWUKK2x2YWx1ZTo6c2V0X2lu aXRpYWxpemVyX3J2YWx1ZSAocnZhbHVlIGluaXRfdmFsdWUpCit7CisgIHJldHVybiBsdmFsdWUg KGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKAorCQkgICBnZXRfaW5uZXJf bHZhbHVlICgpLAorCQkgICBpbml0X3ZhbHVlLmdldF9pbm5lcl9ydmFsdWUgKCkpKTsKK30KKwor aW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3N0cnVjdF9jdG9yICh0eXBlIHR5cGVfLAorCQkJ ICBzdGQ6OnZlY3RvcjxmaWVsZD4gJmZpZWxkcywKKwkJCSAgc3RkOjp2ZWN0b3I8cnZhbHVlPiAm dmFsdWVzLAorCQkJICBsb2NhdGlvbiBsb2MpCit7CisgIGZpZWxkICpwZmllbGRzID0gbnVsbHB0 cjsKKyAgaWYgKGZpZWxkcy5zaXplICgpKQorICAgIHBmaWVsZHMgPSAmZmllbGRzWzBdOworCisg IGdjY19qaXRfZmllbGQgKipmaWVsZHNfYXJyID0KKyAgICByZWludGVycHJldF9jYXN0PGdjY19q aXRfZmllbGQgKio+IChwZmllbGRzKTsKKworICBydmFsdWUgKnB2YWx1ZXMgPSBudWxscHRyOwor ICBpZiAodmFsdWVzLnNpemUgKCkpCisgICAgcHZhbHVlcyA9ICZ2YWx1ZXNbMF07CisKKyAgZ2Nj X2ppdF9ydmFsdWUgKip2YWx1ZXNfYXJyID0KKyAgICByZWludGVycHJldF9jYXN0PGdjY19qaXRf cnZhbHVlICoqPiAocHZhbHVlcyk7CisKKyAgcmV0dXJuIHJ2YWx1ZSAoCisJICAgZ2NjX2ppdF9j b250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IgKAorCSAgICAgbV9pbm5lcl9jdHh0LAorCSAg ICAgbG9jLmdldF9pbm5lcl9sb2NhdGlvbiAoKSwKKwkgICAgIHR5cGVfLmdldF9pbm5lcl90eXBl ICgpLAorCSAgICAgKGludCl2YWx1ZXMuc2l6ZSAoKSwKKwkgICAgIGZpZWxkc19hcnIsCisJICAg ICB2YWx1ZXNfYXJyKSk7Cit9CisKK2lubGluZSBydmFsdWUKK2NvbnRleHQ6Om5ld19hcnJheV9j dG9yICh0eXBlIHR5cGVfLAorCQkJIHN0ZDo6dmVjdG9yPHJ2YWx1ZT4gJnZhbHVlcywKKwkJCSBs b2NhdGlvbiBsb2MpCit7CisgIHJ2YWx1ZSAqcHZhbHVlcyA9IG51bGxwdHI7CisgIGlmICh2YWx1 ZXMuc2l6ZSAoKSkKKyAgICBwdmFsdWVzID0gJnZhbHVlc1swXTsKKworICBnY2Nfaml0X3J2YWx1 ZSAqKnZhbHVlc19hcnIgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjX2ppdF9ydmFsdWUgKio+ IChwdmFsdWVzKTsKKworICByZXR1cm4gcnZhbHVlICgKKwkgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2FycmF5X2NvbnN0cnVjdG9yICgKKwkgICAgIG1faW5uZXJfY3R4dCwKKwkgICAgIGxvYy5nZXRf aW5uZXJfbG9jYXRpb24gKCksCisJICAgICB0eXBlXy5nZXRfaW5uZXJfdHlwZSAoKSwKKwkgICAg IChpbnQpdmFsdWVzLnNpemUgKCksCisJICAgICB2YWx1ZXNfYXJyKSk7Cit9CisKK2lubGluZSBy dmFsdWUKK2NvbnRleHQ6Om5ld191bmlvbl9jdG9yICh0eXBlIHR5cGVfLAorCQkJIGZpZWxkIGZp ZWxkLAorCQkJIHJ2YWx1ZSB2YWx1ZSwKKwkJCSBsb2NhdGlvbiBsb2MpCit7CisgIHJldHVybiBy dmFsdWUgKAorCSAgIGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3IgKAorCSAg ICAgbV9pbm5lcl9jdHh0LAorCSAgICAgbG9jLmdldF9pbm5lcl9sb2NhdGlvbiAoKSwKKwkgICAg IHR5cGVfLmdldF9pbm5lcl90eXBlICgpLAorCSAgICAgZmllbGQuZ2V0X2lubmVyX2ZpZWxkICgp LAorCSAgICAgdmFsdWUuZ2V0X2lubmVyX3J2YWx1ZSAoKSkpOworfQorCisKIC8vIGNsYXNzIHBh cmFtIDogcHVibGljIGx2YWx1ZQogaW5saW5lIHBhcmFtOjpwYXJhbSAoKSA6IGx2YWx1ZSAoKSB7 fQogaW5saW5lIHBhcmFtOjpwYXJhbSAoZ2NjX2ppdF9wYXJhbSAqaW5uZXIpCmRpZmYgLS1naXQg YS9nY2Mvaml0L2xpYmdjY2ppdC5jIGIvZ2NjL2ppdC9saWJnY2NqaXQuYwppbmRleCA1OWNlZjYx NGQ0Yi4uNWNiMjdhMjBkNDEgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmMKKysrIGIv Z2NjL2ppdC9saWJnY2NqaXQuYwpAQCAtMTM4Niw2ICsxMzg2LDM5MyBAQCBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICByZXR1cm4gKGdjY19qaXRf bHZhbHVlICopY3R4dC0+bmV3X2dsb2JhbCAobG9jLCBraW5kLCB0eXBlLCBuYW1lKTsKIH0KIAor ZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0 cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJCWdjY19qaXRfbG9jYXRpb24gKmxv YywKKwkJCQkJZ2NjX2ppdF90eXBlICp0eXBlLAorCQkJCQlzaXplX3QgbnVtX3ZhbHVlcywKKwkJ CQkJZ2NjX2ppdF9maWVsZCAqKmZpZWxkcywKKwkJCQkJZ2NjX2ppdF9ydmFsdWUgKip2YWx1ZXMp Cit7CisgIHVzaW5nIG5hbWVzcGFjZSBnY2M6OmppdDo6cmVjb3JkaW5nOworCisgIFJFVFVSTl9O VUxMX0lGX0ZBSUwgKGN0eHQsIE5VTEwsIGxvYywgIk5VTEwgY29udGV4dCIpOworICBKSVRfTE9H X0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMICh0eXBl LCBjdHh0LCBsb2MsICJOVUxMIHR5cGUiKTsKKworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5U RjEgKHR5cGUtPmlzX3N0cnVjdCAoKSwKKwkJCSAgICAgICBjdHh0LCBsb2MsCisJCQkgICAgICAg ImNvbnN0cnVjdG9yIHR5cGUgaXMgbm90IGEgc3RydWN0OiAlcyIsCisJCQkgICAgICAgdHlwZS0+ Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgY29tcG91bmRfdHlwZSAqY3QgPSByZWludGVycHJl dF9jYXN0PGNvbXBvdW5kX3R5cGUgKj4odHlwZSk7CisgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmZp ZWxkcyAqZmllbGRzX3N0cnVjdCA9IGN0LT5nZXRfZmllbGRzICgpOworICBzaXplX3Qgbl9maWVs ZHMgPSBmaWVsZHNfc3RydWN0LT5sZW5ndGggKCk7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9Q UklOVEYxIChjdC0+aGFzX2tub3duX3NpemUgKCksCisJCQkgICAgICAgY3R4dCwgbG9jLAorCQkJ ICAgICAgICJzdHJ1Y3QgY2FuJ3QgYmUgb3BhcXVlOiAlcyIsCisJCQkgICAgICAgdHlwZS0+Z2V0 X2RlYnVnX3N0cmluZyAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAobl9maWVs ZHMsCisJCQkgICAgICAgY3R4dCwgbG9jLAorCQkJICAgICAgICJubyBmaWVsZHMgaW4gc3RydWN0 OiAlcyIsCisJCQkgICAgICAgdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgLyogSWYg dGhlcmUgaXMgbm8gYXJyYXkgaW5wdXQgd2UganVzdCBzaG9ydCBjaXJjdWl0IHRvIHplcm8gdGhl IHN0cnVjdC4gICovCisgIGlmICghbnVtX3ZhbHVlcykKKyAgICByZXR1cm4gKGdjY19qaXRfcnZh bHVlICopY3R4dC0+bmV3X2N0b3IgKGxvYywgdHlwZSwgMCwgTlVMTCwgTlVMTCk7CisKKyAgUkVU VVJOX05VTExfSUZfRkFJTF9QUklOVEYzIChuX2ZpZWxkcyA+PSBudW1fdmFsdWVzLAorCQkJICAg ICAgIGN0eHQsIGxvYywKKwkJCSAgICAgICAibW9yZSB2YWx1ZXMgaW4gY29uc3RydWN0b3IgKG49 JXp1KSB0aGFuIGZpZWxkcyIKKwkJCSAgICAgICAiIGluIHRhcmdldCAlcyAobj0lenUpIiwKKwkJ CSAgICAgICBudW1fdmFsdWVzLAorCQkJICAgICAgIHR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCks CisJCQkgICAgICAgbl9maWVsZHMpOworCisgIC8qIEl0IGlzIE9LIGlmIGZpZWxkcyBhcmUgbnVs bCBoZXJlLCBpbmRpY2F0aW5nIGRlZmluaXRvbiBvcmRlciwKKyAgICAgYnV0IHRoZXJlIGhhcyB0 byBiZSBhIHZhbHVlcyBhcnJheS4gICovCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKHZhbHVlcywK KwkJICAgICAgIGN0eHQsIGxvYywKKwkJICAgICAgICIndmFsdWVzJyBOVUxMIHdpdGggbm9uLXpl cm8gJ251bV92YWx1ZXMnIik7CisKKyAgc2l6ZV90IGlkeCA9IDA7IC8qIFJ1bm5lciBpbmRleCBm b3IgZmllbGRzIGluIHRoZSB0eXBlIG9iamVjdC4gICovCisKKyAgZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBudW1fdmFsdWVzOyBpKyspCisgICAgeworICAgICAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6 cnZhbHVlICpydiA9IHZhbHVlc1tpXTsKKworICAgICAgLyogcnYga2FuIGJlIE5VTEwsIHdoaWNo IHdvdWxkIGluZGljYXRlIHplcm8gaW5pdCBmb3IgdGhlIGZpZWxkLiAgKi8KKyAgICAgIGdjYzo6 aml0OjpyZWNvcmRpbmc6OnR5cGUgKnJ2X3R5cGUgPSBydiA/IHJ2LT5nZXRfdHlwZSAoKSA6IG51 bGxwdHI7CisKKyAgICAgIC8qIElmIGZpZWxkcyBhcmUgc3BlY2lmaWVkIHdlIG5lZWQgdG8gY2hl Y2sgdGhhdCB0aGV5IGFyZSBpbgorCSBkZWZpbml0aW9uIG9yZGVyLiAgKi8KKyAgICAgIGlmIChm aWVsZHMpCisJeworCSAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6ZmllbGQgKmYgPSBmaWVsZHNbaV07 CisKKwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoCisJICAgIGYsCisJICAgIGN0eHQs IGxvYywKKwkgICAgIk5VTEwgZmllbGQgaW4gJ2ZpZWxkcycsIGF0IGluZGV4ICV6dSIsIGkpOwor CisJICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjMgKAorCSAgICBmLT5nZXRfY29udGFpbmVy ICgpID09CisJICAgIHN0YXRpY19jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OnR5cGUqPih0eXBl KSwKKwkgICAgY3R4dCwgbG9jLAorCSAgICAiZmllbGQgb2JqZWN0IGF0IGluZGV4ICV6dSAoJXMp LCB3YXMgbm90IHVzZWQgd2hlbiBjcmVhdGluZyAiCisJICAgICJ0aGUgJXMiLAorCSAgICBpLAor CSAgICBmLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCSAgICB0eXBlLT5nZXRfZGVidWdfc3RyaW5n ICgpKTsKKworCSAgLyogRmllbGRzIGluIHRoZSBjb25zdHJ1Y3RvciBuZWVkIHRvIGJlIGluIHN0 cnVjdCBkZWZpbml0aW9uCisJICAgICBvcmRlciwgYnV0IHRoZXJlIGNhbiBiZSBnYXBzLiAgKi8K KwkgIHNpemVfdCBqOworCSAgZm9yIChqID0gaWR4OyBqIDwgbl9maWVsZHM7IGorKykKKwkgICAg eworCSAgICAgIGZpZWxkICpmcyA9IGZpZWxkc19zdHJ1Y3QtPmdldF9maWVsZCAoaik7CisJICAg ICAgaWYgKGZzID09IGYpCisJCXsKKwkJICBpZHggPSBqOyAvKiBBZHZhbmNlIHJ1bm5lciBpbmRl eCBmb3IgbmV4dCBpdGVyYXRpb24uICAqLworCQkgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAg UkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYzICgKKwkgICAgaiAhPSBuX2ZpZWxkcywKKwkgICAg Y3R4dCwgbG9jLAorCSAgICAiZmllbGQgYXQgaW5kZXggJXp1IGluICdmaWVsZHMnIGlzIG5vdCBp biBkZWZpbml0aW9uIG9yZGVyICIKKwkgICAgIihzdHJ1Y3Q6ICVzKSAoY3RvciBmaWVsZDogJXMp IiwKKwkgICAgaSwKKwkgICAgdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgZi0+Z2V0 X2RlYnVnX3N0cmluZyAoKSk7CisKKwkgIC8qIENoZWNrIHRoYXQgdGhlIHNwZWNpZmllZCBmaWVs ZCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUKKwkgICAgIHZhbHVlLCB1bmxlc3MgdGhlIHZhbHVl IGlzIG51bGwgKGEgemVybyB2YWx1ZSBpbml0KS4gICovCisJICBSRVRVUk5fTlVMTF9JRl9GQUlM X1BSSU5URjUgKAorCSAgICAhcnYgfHwgZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHJ2X3R5 cGUsCisJCQkJCSAgICAgICBmLT5nZXRfdHlwZSAoKSksCisJICAgIGN0eHQsIGxvYywKKwkgICAg InZhbHVlIGFuZCBmaWVsZCBub3QgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSwgYXQgaW5kZXgg JXp1IgorCSAgICAiICglcy4lczogJXMpKHZhbHVlIHR5cGU6ICVzKSIsCisJICAgIGksCisJICAg IHR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAgIGYtPmdldF9kZWJ1Z19zdHJpbmcgKCks CisJICAgIGYtPmdldF90eXBlICgpLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCSAgICBydl90eXBl LT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKwl9CisKKyAgICAgIC8qIElmIG5vIGZpZWxkcyBhcmUg c3BlY2lmaWVkLCBjaGVjayB0aGF0IHRoZSB2YWx1ZSBoYXMgdGhlIHNhbWUgdHlwZQorCSBhcyB0 aGUgZmllbGQgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0cnVjdC4gICovCisgICAgICBpZiAo cnYgJiYgIWZpZWxkcykKKwl7CisJICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjUgKAorCSAg ICBnY2M6OmppdDo6dHlwZXNfa2luZGFfc2FtZSAocnZfdHlwZSwKKwkJCQkJZmllbGRzX3N0cnVj dC0+CisJCQkJCSAgZ2V0X2ZpZWxkIChpKS0+Z2V0X3R5cGUgKCkpLAorCSAgICBjdHh0LCBsb2Ms CisJICAgICJ2YWx1ZSBhbmQgZmllbGQgbm90IHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUsIGF0 IGluZGV4ICV6dSIKKwkgICAgIiAoJXMuJXM6ICVzKSh2YWx1ZSB0eXBlOiAlcykiLAorCSAgICBp LAorCSAgICB0eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCSAgICBmaWVsZHNfc3RydWN0LT5n ZXRfZmllbGQgKGkpLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCSAgICBmaWVsZHNfc3RydWN0LT5n ZXRfZmllbGQgKGkpLT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgcnZf dHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisJfQorCisgICAgICBpZiAocnYpCisJeworCSAg UkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxICgKKwkgICAgIXJ2X3R5cGUtPmlzX3ZvaWQgKCks CisJICAgIGN0eHQsIGxvYywKKwkgICAgImNhbid0IGNvbnN0cnVjdCB0aGUgdm9pZCB0eXBlLCBh dCBpbmRleCAlenUiLCBpKTsKKwl9CisgICAgfQorCisgIHJldHVybiAoZ2NjX2ppdF9ydmFsdWUg KiljdHh0LT5uZXdfY3RvciAoCisgICAgbG9jLAorICAgIHR5cGUsCisgICAgbnVtX3ZhbHVlcywK KyAgICByZWludGVycHJldF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OmZpZWxkKio+KGZpZWxk cyksCisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpydmFsdWUqKj4o dmFsdWVzKSk7Cit9CisKK2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRf bmV3X3VuaW9uX2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJICAgICAg IGdjY19qaXRfbG9jYXRpb24gKmxvYywKKwkJCQkgICAgICAgZ2NjX2ppdF90eXBlICp0eXBlLAor CQkJCSAgICAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZCwKKwkJCQkgICAgICAgZ2NjX2ppdF9ydmFs dWUgKnZhbHVlKQoreworICB1c2luZyBuYW1lc3BhY2UgZ2NjOjpqaXQ6OnJlY29yZGluZzsKKwor ICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxMLCBsb2MsICJOVUxMIGNvbnRleHQiKTsK KyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZf RkFJTCAodHlwZSwgY3R4dCwgbG9jLCAiTlVMTCB0eXBlIik7CisKKyAgUkVUVVJOX05VTExfSUZf RkFJTF9QUklOVEYxICh0eXBlLT5pc191bmlvbiAoKSwKKwkJCSAgICAgICBjdHh0LCBsb2MsCisJ CQkgICAgICAgImNvbnN0cnVjdG9yIHR5cGUgaXMgbm90IGFuIHVuaW9uOiAlcyIsCisJCQkgICAg ICAgdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgY29tcG91bmRfdHlwZSAqY3QgPSBy ZWludGVycHJldF9jYXN0PGNvbXBvdW5kX3R5cGUgKj4odHlwZSk7CisgIGdjYzo6aml0OjpyZWNv cmRpbmc6OmZpZWxkcyAqZmllbGRzX3VuaW9uID0gY3QtPmdldF9maWVsZHMgKCk7CisgIHNpemVf dCBuX2ZpZWxkcyA9IGZpZWxkc191bmlvbi0+bGVuZ3RoICgpOworCisgIFJFVFVSTl9OVUxMX0lG X0ZBSUxfUFJJTlRGMSAoY3QtPmhhc19rbm93bl9zaXplICgpLAorCQkJICAgICAgIGN0eHQsIGxv YywKKwkJCSAgICAgICAidW5pb24gY2FuJ3QgYmUgb3BhcXVlOiAlcyIsCisJCQkgICAgICAgdHlw ZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAo bl9maWVsZHMsCisJCQkgICAgICAgY3R4dCwgbG9jLAorCQkJICAgICAgICJubyBmaWVsZHMgaW4g dW5pb246ICVzIiwKKwkJCSAgICAgICB0eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICAv KiBJZiB2YWx1ZSBpcyBOVUxMIHdlIGFyZSBqdXN0IHN1cHBvc2VkIHRvIHplcm8gdGhlIHdob2xl IHVuaW9uLiAgKi8KKyAgaWYgKCF2YWx1ZSkKKyAgICByZXR1cm4gKGdjY19qaXRfcnZhbHVlICop Y3R4dC0+bmV3X2N0b3IgKGxvYywgdHlwZSwgMCwgTlVMTCwgTlVMTCk7CisKKyAgZ2NjOjpqaXQ6 OnJlY29yZGluZzo6dHlwZSAqcnZfdHlwZSA9IHZhbHVlLT5nZXRfdHlwZSAoKTsKKworICBSRVRV Uk5fTlVMTF9JRl9GQUlMICgKKyAgICAhcnZfdHlwZS0+aXNfdm9pZCAoKSwKKyAgICBjdHh0LCBs b2MsCisgICAgImNhbid0IGNvbnN0cnVjdCB0aGUgdm9pZCB0eXBlIik7CisKKyAgaWYgKGZpZWxk KQorICAgIHsKKyAgICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMiAoCisJZmllbGQtPmdl dF9jb250YWluZXIgKCkgPT0KKwlzdGF0aWNfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBl Kj4odHlwZSksCisJY3R4dCwgbG9jLAorCSJmaWVsZCBvYmplY3QgKCVzKSB3YXMgbm90IHVzZWQg d2hlbiBjcmVhdGluZyAiCisJInRoZSB0eXBlICVzIiwKKwlmaWVsZC0+Z2V0X2RlYnVnX3N0cmlu ZyAoKSwKKwl0eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICAgICAgUkVUVVJOX05VTExf SUZfRkFJTF9QUklOVEY0ICgKKwlnY2M6OmppdDo6dHlwZXNfa2luZGFfc2FtZSAocnZfdHlwZSwK KwkJCQkgICAgZmllbGQtPmdldF90eXBlICgpKSwKKwljdHh0LCBsb2MsCisJInZhbHVlIGFuZCBm aWVsZCBhcmUgbm90IHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUiCisJIiAoJXMuJXM6ICVzKSh2 YWx1ZSB0eXBlOiAlcykiLAorCXR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJZmllbGQtPmdl dF9kZWJ1Z19zdHJpbmcgKCksCisJZmllbGQtPmdldF90eXBlICgpLT5nZXRfZGVidWdfc3RyaW5n ICgpLAorCXJ2X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAgIH0KKyAgLyogSWYgbm8g ZmllbGQgaXMgc3BlY2lmaWVkLCBjaGVjayB0aGF0IHRoZSB2YWx1ZSBoYXMgdGhlIHNhbWUgdHlw ZQorICAgICBhcyB0aGUgZmlyc3QgZmllbGQgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhlIHVuaW9u LiAgKi8KKyAgaWYgKCFmaWVsZCkKKyAgICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjIgKAor ICAgICAgZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHJ2X3R5cGUsCisJCQkJICBmaWVsZHNf dW5pb24tPgorCQkJCSAgICBnZXRfZmllbGQgKDApLT5nZXRfdHlwZSAoKSksCisgICAgICBjdHh0 LCBsb2MsCisgICAgICAidmFsdWUgYW5kIGZpcnN0IHVuaW9uIGZpZWxkIG5vdCB0aGUgc2FtZSB1 bnF1YWxpZmllZCB0eXBlIgorICAgICAgIiAoZmllbGQgdHlwZTogJXMpKHZhbHVlIHR5cGU6ICVz KSIsCisgICAgICBmaWVsZHNfdW5pb24tPmdldF9maWVsZCAoMCktPmdldF90eXBlICgpLT5nZXRf ZGVidWdfc3RyaW5nICgpLAorICAgICAgcnZfdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisK KworICByZXR1cm4gKGdjY19qaXRfcnZhbHVlICopY3R4dC0+bmV3X2N0b3IgKAorICAgIGxvYywK KyAgICB0eXBlLAorICAgIDEsCisgICAgLyogQSBOVUxMIGZpZWxkcyBhcnJheSB0ZWxscyBuZXdf Y3RvciB0byB0YWtlIGZpZWxkcyBmcm9tIHRoZSB0eXBlIG9iai4gICovCisgICAgcmVpbnRlcnBy ZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpmaWVsZCoqPihmaWVsZCA/ICZmaWVsZCA6IE5V TEwpLAorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6cnZhbHVlKio+ KCZ2YWx1ZSkpOworfQorCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0 X25ld19hcnJheV9jb25zdHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCSAgICAg ICBnY2Nfaml0X2xvY2F0aW9uICpsb2MsCisJCQkJICAgICAgIGdjY19qaXRfdHlwZSAqdHlwZSwK KwkJCQkgICAgICAgc2l6ZV90IG51bV92YWx1ZXMsCisJCQkJICAgICAgIGdjY19qaXRfcnZhbHVl ICoqdmFsdWVzKQoreworICB1c2luZyBuYW1lc3BhY2UgZ2NjOjpqaXQ6OnJlY29yZGluZzsKKwor ICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxMLCBsb2MsICJOVUxMIGNvbnRleHQiKTsK KyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZf RkFJTCAodHlwZSwgY3R4dCwgbG9jLCAiTlVMTCB0eXBlIik7CisKKyAgUkVUVVJOX05VTExfSUZf RkFJTCAodHlwZS0+aXNfYXJyYXkgKCkgIT0gTlVMTCwKKwkJICAgICAgIGN0eHQsIGxvYywKKwkJ ICAgICAgICJjb25zdHJ1Y3RvciB0eXBlIG5vdCBhbiBhcnJheSIpOworCisgIGlmICghbnVtX3Zh bHVlcykKKyAgICB2YWx1ZXMgPSBOVUxMOworCisgIGlmIChudW1fdmFsdWVzKQorICAgIHsKKyAg ICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorCXZhbHVlcywKKwljdHh0LCBsb2MsCisJIid2YWx1 ZXMnIE5VTEwgd2l0aCBub24temVybyAnbnVtX3ZhbHVlcyciKTsKKworICAgICAgZ2NjOjpqaXQ6 OnJlY29yZGluZzo6YXJyYXlfdHlwZSAqYXJyX3R5cGUgPQorCXJlaW50ZXJwcmV0X2Nhc3Q8Z2Nj OjpqaXQ6OnJlY29yZGluZzo6YXJyYXlfdHlwZSo+KHR5cGUpOworICAgICAgc2l6ZV90IG5fZWwg PSBhcnJfdHlwZS0+bnVtX2VsZW1lbnRzICgpOworCisgICAgICBSRVRVUk5fTlVMTF9JRl9GQUlM X1BSSU5URjIgKAorCW5fZWwgPj0gbnVtX3ZhbHVlcywKKwljdHh0LCBsb2MsCisJImFycmF5IGNv bnN0cnVjdG9yIGhhcyBtb3JlIHZhbHVlcyB0aGFuIHRoZSBhcnJheSB0eXBlJ3MgbGVuZ3RoIgor CSIgKGFycmF5IHR5cGUgbGVuZ3RoOiAlenUsIGNvbnN0cnVjdG9yIGxlbmd0aDogJXp1KSIsCisJ bl9lbCwKKwludW1fdmFsdWVzKTsKKworICAgICAgLyogRm9yIGFycmF5cywgYWxsIHZhbHVlcyBu ZWVkIHRvIGJlIHRoZSBzYW1lIGJhc2UgdHlwZS4gICovCisgICAgICBnY2M6OmppdDo6cmVjb3Jk aW5nOjp0eXBlICp0eXBlMCA9IE5VTEw7CisgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAvKiBG aW5kIGZpcnN0IG5vbi1udWxsIHZhbHVlLiAgKi8KKyAgICAgIGZvciAoO2kgPCBudW1fdmFsdWVz OyBpKyspCisJeworCSAgaWYgKHZhbHVlc1tpXSkKKwkgICAgYnJlYWs7CisJfQorCisgICAgICBp ZiAoaSA8IG51bV92YWx1ZXMpIC8qIEFsbCB2YWx1ZXMgbWlnaHQgYmUgbnVsbCBhbmQgaSA9PSBu dW1fdmFsdWVzLiAgKi8KKwl0eXBlMCA9IHZhbHVlc1tpXS0+Z2V0X3R5cGUgKCk7CisKKyAgICAg IC8qIElmIHdlIGdvdCBhIHR5cGUwLCBjaGVjayB0aGF0IGFsbCBvdGhlciB2YWx1ZXMgaGF2ZQor CSB0aGUgc2FtZSB0eXBlLiAgKi8KKyAgICAgIGZvciAoOyBpIDwgbnVtX3ZhbHVlczsgaSsrKQor CXsKKwkgIGlmICh2YWx1ZXNbaV0pCisJICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMyAo CisJICAgICAgZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHR5cGUwLAorCQkJCQkgIHZhbHVl c1tpXS0+Z2V0X3R5cGUgKCkpLAorCSAgICAgIGN0eHQsIGxvYywKKwkgICAgICAidmFsdWUgdHlw ZSBhdCBpbmRleCAlenUgZGlmZmVyIGZyb20gZmlyc3QgdmFsdWUgdHlwZSIKKwkgICAgICAiIChm aXJzdCB0eXBlOiAlcykoZGlmZmVyZW50IHR5cGU6ICVzKSIsCisJICAgICAgaSwKKwkgICAgICB0 eXBlMC0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgICB2YWx1ZXNbaV0tPmdldF90eXBlICgp LT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKwl9CisKKyAgICAgIC8qIENvbXBhcmUgdHlwZTAgd2l0 aCB0aGUgZWxlbWVudCB0eXBlIHNwZWNpZmllZCBpbiB0aGUKKwkgdHlwZSBvZiB0aGUgYXJyYXku ICAqLworICAgICAgaWYgKHR5cGUwKQorCXsKKwkgIGdjYzo6aml0OjpyZWNvcmRpbmc6OnR5cGUg KmVsX3R5cGUgPQorCSAgICB0eXBlLT5pc19hcnJheSAoKTsKKworCSAgUkVUVVJOX05VTExfSUZf RkFJTF9QUklOVEYyICgKKwkgICAgZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHR5cGUwLCBl bF90eXBlKSwKKwkgICAgY3R4dCwgbG9jLAorCSAgICAiYXJyYXkgZWxlbWVudCB2YWx1ZSB0eXBl cyBkaWZmZXIgZnJvbSB0eXBlcyBpbiAndmFsdWVzJyIKKwkgICAgIiAoZWxlbWVudCB0eXBlOiAl cykoJ3ZhbHVlcycgdHlwZTogJXMpIiwKKwkgICAgZWxfdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAo KSwKKwkgICAgdHlwZTAtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCX0KKyAgICB9CisKKyAgcmV0 dXJuIChnY2Nfaml0X3J2YWx1ZSAqKWN0eHQtPm5ld19jdG9yICgKKyAgICBsb2MsCisgICAgdHlw ZSwKKyAgICBudW1fdmFsdWVzLAorICAgIE5VTEwsCisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2M6 OmppdDo6cmVjb3JkaW5nOjpydmFsdWUqKj4odmFsdWVzKSk7Cit9CisKKy8qIFB1YmxpYyBlbnRy eXBvaW50LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxpYmdjY2ppdC5oLiAgKi8KKworZXh0ZXJuIGdj Y19qaXRfbHZhbHVlICoKK2djY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGdj Y19qaXRfbHZhbHVlICpnbG9iYWwsCisJCQkJICAgICAgIGdjY19qaXRfcnZhbHVlICppbml0X3J2 YWx1ZSkKK3sKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAoZ2xvYmFsLCBOVUxMLCBOVUxMLCJOVUxM IGdsb2JhbCIpOworCisgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmNvbnRleHQgKmN0eHQgPSBnbG9i YWwtPmdldF9jb250ZXh0ICgpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxMLCBO VUxMLCJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgp KTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAoaW5pdF9ydmFsdWUsIGN0eHQsIE5VTEwsIk5VTEwg aW5pdF9ydmFsdWUiKTsKKworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKGdsb2JhbC0+ aXNfZ2xvYmFsICgpLAorCQkJICAgICAgIGN0eHQsIE5VTEwsCisJCQkgICAgICAgImx2YWx1ZSBc IiVzXCIgbm90IGEgZ2xvYmFsIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9kZWJ1Z19zdHJpbmcg KCkpOworCisgIGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqZ2JsID0KKyAgICByZWludGVy cHJldF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqPiAoZ2xvYmFsKTsKKworICBS RVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKGdibC0+Z2V0X2tpbmQgKCkgIT0KKwkJCSAgICAg ICBHQ0NfSklUX0dMT0JBTF9JTVBPUlRFRCwKKwkJCSAgICAgICBjdHh0LCBOVUxMLAorCQkJICAg ICAgICJjYW4ndCBpbml0aWFsaXplIFwiJXNcIiwgaXQgaXMgaW1wb3J0ZWQiLAorCQkJICAgICAg IGdsb2JhbC0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9Q UklOVEY0IChnY2M6OmppdDo6dHlwZXNfa2luZGFfc2FtZSAoCisJCQkJIGdsb2JhbC0+Z2V0X3R5 cGUgKCksCisJCQkJIGluaXRfcnZhbHVlLT5nZXRfdHlwZSAoKSksCisJCQkgICAgICAgY3R4dCwg TlVMTCwKKwkJCSAgICAgICAibWlzbWF0Y2hpbmcgdHlwZXM6IgorCQkJICAgICAgICIgaW5pdGlh bGl6aW5nICVzICh0eXBlOiAlcykgd2l0aCAlcyAodHlwZTogJXMpIiwKKwkJCSAgICAgICBnbG9i YWwtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJCQkgICAgICAgZ2xvYmFsLT5nZXRfdHlwZSAoKS0+ Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkJCSAgICAgICBpbml0X3J2YWx1ZS0+Z2V0X2RlYnVnX3N0 cmluZyAoKSwKKwkJCSAgICAgICBpbml0X3J2YWx1ZS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19z dHJpbmcgKCkpOworCisgIC8qIENoZWNrIHRoYXQgdGhlcmUgYXJlIG5vIGluaXRpYWxpemVycyBz ZXQgZm9yIHRoZSBnbG9iYWwgeWV0LiAgKi8KKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYx ICghZ2JsLT50ZXN0X2ZsYWdzX2FueW9mICgKKwkJCQkgIGdjYzo6aml0OjpHTE9CQUxfVkFSX0ZM QUdTX1dJTExfQkVfUlZBTF9JTklUIHwKKwkJCQkgIGdjYzo6aml0OjpHTE9CQUxfVkFSX0ZMQUdT X1dJTExfQkVfQkxPQl9JTklUKSwKKwkJCSAgICAgICBjdHh0LCBOVUxMLAorCQkJICAgICAgICJn bG9iYWwgdmFyaWFibGUgYWxyZWFkeSBpbml0aWFsaXplZDogJXMiLAorCQkJICAgICAgIGdsb2Jh bC0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgLyogVGhlIGdsb2JhbCBuZWVkIHRvIGtub3cg ZHVyaW5nIHBsYXliYWNrIHRoYXQgaXQgd2lsbCBiZQorICAgICBpbml0aWFsaXplZC4gICovCisg IGdibC0+c2V0X2ZsYWdzIChnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX1JWQUxf SU5JVCk7CisKKyAgY3R4dC0+bmV3X2dsb2JhbF9pbml0X3J2YWx1ZSAoZ2xvYmFsLCBpbml0X3J2 YWx1ZSk7CisKKyAgcmV0dXJuIGdsb2JhbDsKK30KKwogLyogUHVibGljIGVudHJ5cG9pbnQuICBT ZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAKICAgIEFmdGVyIGVycm9yLWNoZWNraW5n LCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCkBAIC0xNDE5LDggKzE4MDYsMjIgQEAgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyIChnY2Nfaml0X2x2YWx1ZSAqZ2xvYmFsLAogICAg ICIgZ2xvYmFsIFwiJXNcIiBoYXMgc2l6ZSAlenUgd2hlcmVhcyBpbml0aWFsaXplciBoYXMgc2l6 ZSAlenUiLAogICAgIGdsb2JhbC0+Z2V0X2RlYnVnX3N0cmluZyAoKSwgbHZhbHVlX3NpemUsIG51 bV9ieXRlcyk7CiAKLSAgcmVpbnRlcnByZXRfY2FzdCA8Z2NjOjpqaXQ6OnJlY29yZGluZzo6Z2xv YmFsICo+IChnbG9iYWwpCi0gICAgLT5zZXRfaW5pdGlhbGl6ZXIgKGJsb2IsIG51bV9ieXRlcyk7 CisgIC8qIENoZWNrIHRoYXQgdGhlIHJ2YWx1ZSBpbml0aWFsaXplciBpcyBub3Qgc2V0IGZvciB0 aGlzIGdsb2JhbC4KKyAgICAgTm90ZSB0aGF0IHdlIGRvIG5vdCBjaGVjayBpZiB0aGlzIGJsb2Ig dHlwZSBpbml0aWFsaXplciBpcworICAgICBhbHJlYWR5IHNldCwgc2luY2UgdGhhdCBjaGVjayB3 YXMgbm90IHByZXNlbnQgd2hlbiB0aGUgZW50cnlwb2ludAorICAgICB3YXMgaW5pdGlhbGx5IHdy aXR0ZW4uICAqLworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpnbG9iYWwgKmdibCA9CisgICAgcmVp bnRlcnByZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpnbG9iYWwgKj4gKGdsb2JhbCk7Cisg IFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoIWdibC0+dGVzdF9mbGFnc19hbnlvZiAoCisJ CQkJICBnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX1JWQUxfSU5JVCksCisJCQkg ICAgICAgTlVMTCwgTlVMTCwKKwkJCSAgICAgICAiZ2xvYmFsIHZhcmlhYmxlIGFscmVhZHkgaW5p dGlhbGl6ZWQ6ICVzIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwor CisgIGdibC0+c2V0X2luaXRpYWxpemVyIChibG9iLCBudW1fYnl0ZXMpOworICAvKiBUaGUgZ2xv YmFsIG5lZWQgdG8ga25vdyBkdXJpbmcgcGxheWJhY2sgdGhhdCBpdCB3aWxsIGJlCisgICAgIGlu aXRpYWxpemVkLiAgKi8KKyAgZ2JsLT5zZXRfZmxhZ3MgKGdjYzo6aml0OjpHTE9CQUxfVkFSX0ZM QUdTX1dJTExfQkVfQkxPQl9JTklUKTsKIAogICByZXR1cm4gZ2xvYmFsOwogfQpkaWZmIC0tZ2l0 IGEvZ2NjL2ppdC9saWJnY2NqaXQuaCBiL2djYy9qaXQvbGliZ2Njaml0LmgKaW5kZXggMDI0Yzhk NzlmNGIuLjgwYTkxNWZiOGM0IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5oCisrKyBi L2djYy9qaXQvbGliZ2Njaml0LmgKQEAgLTgyMiw2ICs4MjIsMTU5IEBAIGdjY19qaXRfY29udGV4 dF9uZXdfZ2xvYmFsIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJCQkgICAgZ2NjX2ppdF90eXBl ICp0eXBlLAogCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCisjZGVmaW5lIExJQkdDQ0pJVF9I QVZFX0NUT1JTCisKKy8qIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhIHN0cnVjdCBhcyBhbiBy dmFsdWUuCisKKyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4gIFRoZSB0d28gcGFyYW1ldGVyIGFy cmF5cyBhcmUgY29waWVkIGFuZAorICAgZG8gbm90IGhhdmUgdG8gb3V0bGl2ZSB0aGUgY29udGV4 dC4KKworICAgYHR5cGVgIHNwZWNpZmllcyB3aGF0IHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJ1aWxk IGFuZCBoYXMgdG8gYmUKKyAgIGEgc3RydWN0LgorCisgICBgbnVtX3ZhbHVlc2Agc3BlY2lmaWVz IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYHZhbHVlc2AuCisKKyAgIGBmaWVsZHNgIG5lZWQg dG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgYHZhbHVlc2AsIG9yIGJlIE5VTEwuCisKKyAgIElm IGBmaWVsZHNgIGlzIG51bGwsIHRoZSB2YWx1ZXMgYXJlIGFwcGxpZWQgaW4gZGVmaW5pdGlvbiBv cmRlci4KKworICAgT3RoZXJ3aXNlLCBlYWNoIGZpZWxkIGluIGBmaWVsZHNgIHNwZWNpZmllcyB3 aGljaCBmaWVsZCBpbiB0aGUgc3RydWN0IHRvCisgICBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcg dmFsdWUgaW4gYHZhbHVlc2AuICBgZmllbGRzYCBhbmQgYHZhbHVlc2AKKyAgIGFyZSBwYWlyZWQg YnkgaW5kZXguCisKKyAgIEVhY2ggdmFsdWUgaGFzIHRvIGhhdmUgaGF2ZSB0aGUgc2FtZSB1bnF1 YWxpZmllZCB0eXBlIGFzIHRoZSBmaWVsZAorICAgaXQgaXMgYXBwbGllZCB0by4KKworICAgQSBO VUxMIHZhbHVlIGVsZW1lbnQgIGluIGB2YWx1ZXNgIGlzIGEgc2hvcnRoYW5kIGZvciB6ZXJvIGlu aXRpYWxpemF0aW9uCisgICBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZC4KKworICAgVGhlIGZp ZWxkcyBpbiBgZmllbGRzYCBoYXZlIHRvIGJlIGluIGRlZmluaXRpb24gb3JkZXIsIGJ1dCB0aGVy ZQorICAgY2FuIGJlIGdhcHMuICBBbnkgZmllbGQgaW4gdGhlIHN0cnVjdCB0aGF0IGlzIG5vdCBz cGVjaWZpZWQgaW4KKyAgIGBmaWVsZHNgIHdpbGwgYmUgemVyb2VkLgorCisgICBUaGUgZmllbGRz IGluIGBmaWVsZHNgIG5lZWQgdG8gYmUgdGhlIHNhbWUgb2JqZWN0cyB0aGF0IHdlcmUgdXNlZAor ICAgdG8gY3JlYXRlIHRoZSBzdHJ1Y3QuCisKKyAgIElmIGBudW1fdmFsdWVzYCBpcyAwLCB0aGUg YXJyYXkgcGFyYW1ldGVycyB3aWxsIGJlCisgICBpZ25vcmVkIGFuZCB6ZXJvIGluaXRpYWxpemF0 aW9uIHdpbGwgYmUgdXNlZC4KKworICAgVGhlIGNvbnN0cnVjdG9yIHJ2YWx1ZSBjYW4gYmUgdXNl ZCBmb3IgYXNzaWdubWVudCB0byBsb2NhbHMuCisgICBJdCBjYW4gYmUgdXNlZCB0byBpbml0aWFs aXplIGdsb2JhbCB2YXJpYWJsZXMgd2l0aAorICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZS4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYQorICAgdGVtcG9yYXJ5IHZhbHVl IGZvciBmdW5jdGlvbiBjYWxscyBhbmQgcmV0dXJuIHZhbHVlcy4KKworICAgVGhlIGNvbnN0cnVj dG9yIGNhbiBjb250YWluIG5lc3RlZCBjb25zdHJ1Y3RvcnMuCisKKyAgIFRoaXMgZW50cnlwb2lu dCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xOTsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAg IHByZXNlbmNlIHVzaW5nOgorICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JTCisqLworCitl eHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3Ry dWN0b3IgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkJZ2NjX2ppdF9sb2NhdGlvbiAqbG9j LAorCQkJCQlnY2Nfaml0X3R5cGUgKnR5cGUsCisJCQkJCXNpemVfdCBudW1fdmFsdWVzLAorCQkJ CQlnY2Nfaml0X2ZpZWxkICoqZmllbGRzLAorCQkJCQlnY2Nfaml0X3J2YWx1ZSAqKnZhbHVlcyk7 CisKKy8qIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhIHVuaW9uIGFzIGFuIHJ2YWx1ZS4KKwor ICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLgorCisgICBgdHlwZWAgc3BlY2lmaWVzIHdoYXQgdGhl IGNvbnN0cnVjdG9yIHdpbGwgYnVpbGQgYW5kIGhhcyB0byBiZQorICAgYW4gdW5pb24uCisKKyAg IGBmaWVsZGAgc3BlY2lmaWVzIHdoaWNoIGZpZWxkIHRvIHNldC4gIElmIGl0IGlzIE5VTEwsIHRo ZSBmaXJzdAorICAgZmllbGQgaW4gdGhlIHVuaW9uIHdpbGwgYmUgc2V0LiAgYGZpZWxkYCBuZWVk IHRvIGJlIHRoZSBzYW1lCisgICBvYmplY3QgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSB1 bmlvbi4KKworICAgYHZhbHVlYCBzcGVjaWZpZXMgd2hhdCB2YWx1ZSB0byBzZXQgdGhlIGNvcnJl c3BvbmRpbmcgZmllbGQgdG8uCisgICBJZiBgdmFsdWVgIGlzIE5VTEwsIHplcm8gaW5pdGlhbGl6 YXRpb24gd2lsbCBiZSB1c2VkLgorCisgICBFYWNoIHZhbHVlIGhhcyB0byBoYXZlIGhhdmUgdGhl IHNhbWUgdW5xdWFsaWZpZWQgdHlwZSBhcyB0aGUgZmllbGQKKyAgIGl0IGlzIGFwcGxpZWQgdG8u CisKKyAgIGBmaWVsZGAgbmVlZCB0byBiZSB0aGUgc2FtZSBvYmplY3RzIHRoYXQgd2VyZSB1c2Vk CisgICB0byBjcmVhdGUgdGhlIHVuaW9uLgorCisgICBUaGUgY29uc3RydWN0b3IgcnZhbHVlIGNh biBiZSB1c2VkIGZvciBhc3NpZ25tZW50IHRvIGxvY2Fscy4KKyAgIEl0IGNhbiBiZSB1c2VkIHRv IGluaXRpYWxpemUgZ2xvYmFsIHZhcmlhYmxlcyB3aXRoCisgICBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlLiAgSXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhCisgICB0ZW1wb3Jh cnkgdmFsdWUgZm9yIGZ1bmN0aW9uIGNhbGxzIGFuZCByZXR1cm4gdmFsdWVzLgorCisgICBUaGUg Y29uc3RydWN0b3IgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbnN0cnVjdG9ycy4KKworICAgVGhpcyBl bnRyeXBvaW50IHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzE5OyB5b3UgY2FuIHRlc3QgZm9y IGl0cworICAgcHJlc2VuY2UgdXNpbmc6CisgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMK KyovCisKK2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9u X2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJICAgICAgIGdjY19qaXRf bG9jYXRpb24gKmxvYywKKwkJCQkgICAgICAgZ2NjX2ppdF90eXBlICp0eXBlLAorCQkJCSAgICAg ICBnY2Nfaml0X2ZpZWxkICpmaWVsZCwKKwkJCQkgICAgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVl KTsKKworLyogQ3JlYXRlIGEgY29uc3RydWN0b3IgZm9yIGFuIGFycmF5IGFzIGFuIHJ2YWx1ZS4K KworICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLiAgYHZhbHVlc2AgYXJlIGNvcGllZCBhbmQKKyAg IGRvIG5vdCBoYXZlIHRvIG91dGxpdmUgdGhlIGNvbnRleHQuCisKKyAgIGB0eXBlYCBzcGVjaWZp ZXMgd2hhdCB0aGUgY29uc3RydWN0b3Igd2lsbCBidWlsZCBhbmQgaGFzIHRvIGJlCisgICBhbiBh cnJheS4KKworICAgYG51bV92YWx1ZXNgIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz IGluIGB2YWx1ZXNgIGFuZAorICAgaXQgY2FuJ3QgaGF2ZSBtb3JlIGVsZW1lbnRzIHRoYW4gdGhl IGFycmF5IHR5cGUuCisKKyAgIEVhY2ggdmFsdWUgaW4gYHZhbHVlc2Agc2V0cyB0aGUgY29ycmVz cG9uZGluZyB2YWx1ZSBpbiB0aGUgYXJyYXkuCisgICBJZiB0aGUgYXJyYXkgdHlwZSBpdHNlbGYg aGFzIG1vcmUgZWxlbWVudHMgdGhhbiBgdmFsdWVzYCwgdGhlCisgICBsZWZ0LW92ZXIgZWxlbWVu dHMgd2lsbCBiZSB6ZXJvZWQuCisKKyAgIEVhY2ggdmFsdWUgaW4gYHZhbHVlc2AgbmVlZCB0byBi ZSB0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlIGFzIHRoZQorICAgYXJyYXkgdHlwZSdzIGVsZW1l bnQgdHlwZS4KKworICAgSWYgYG51bV92YWx1ZXNgIGlzIDAsIHRoZSBgdmFsdWVzYCBwYXJhbWV0 ZXIgd2lsbCBiZQorICAgaWdub3JlZCBhbmQgemVybyBpbml0aWFsaXphdGlvbiB3aWxsIGJlIHVz ZWQuCisKKyAgIE5vdGUgdGhhdCBhIHN0cmluZyBsaXRlcmFsIHJ2YWx1ZSBjYW4ndCBiZSB1c2Vk IHRvIGNvbnN0cnVjdCBhIGNoYXIKKyAgIGFycmF5LiAgSXQgbmVlZHMgb25lIHJ2YWx1ZSBmb3Ig ZWFjaCBjaGFyLgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdDQ0pJVF9B QklfMTk7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZzoKKyAgICNpZmRl ZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworKi8KKworZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKK2dj Y19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGdjY19qaXRfY29udGV4dCAqY3R4 dCwKKwkJCQkgICAgICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLAorCQkJCSAgICAgICBnY2Nfaml0 X3R5cGUgKnR5cGUsCisJCQkJICAgICAgIHNpemVfdCBudW1fdmFsdWVzLAorCQkJCSAgICAgICBn Y2Nfaml0X3J2YWx1ZSAqKnZhbHVlcyk7CisKKy8qIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBh IGdsb2JhbCBvZiBhbnkgdHlwZSB3aXRoIGFuIHJ2YWx1ZS4KKworICAgVGhlIHJ2YWx1ZSBuZWVk cyB0byBiZSBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGUuZy4gbm8gZnVuY3Rpb24gY2FsbHMuCisK KyAgIFRoZSBnbG9iYWwgY2FuJ3QgaGF2ZSB0aGUgJ2tpbmQnIEdDQ19KSVRfR0xPQkFMX0lNUE9S VEVELgorCisgICBVc2UgdG9nZXRoZXIgd2l0aCBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVj dG9yICgpIHRvCisgICBpbml0aWFsaXplIHN0cnVjdHMsIHVuaW9ucyBhbmQgYXJyYXlzLgorCisg ICBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZSAnZ2xvYmFsJyBwYXJhbWV0ZXIgdW5jaGFuZ2VkLiAg T3RoZXJ3aXNlLCBOVUxMLgorCisgICAndmFsdWVzJyBpcyBjb3BpZWQgYW5kIGRvZXMgbm90IGhh dmUgdG8gb3V0bGl2ZSB0aGUgY29udGV4dC4KKworICAgVGhpcyBlbnRyeXBvaW50IHdhcyBhZGRl ZCBpbiBMSUJHQ0NKSVRfQUJJXzE5OyB5b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2VuY2Ug dXNpbmc6CisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworKi8KKworZXh0ZXJuIGdj Y19qaXRfbHZhbHVlICoKK2djY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGdj Y19qaXRfbHZhbHVlICpnbG9iYWwsCisJCQkJICAgICAgIGdjY19qaXRfcnZhbHVlICppbml0X3Zh bHVlKTsKKwogI2RlZmluZSBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXIKIAogLyogU2V0IGFuIGluaXRpYWwgdmFsdWUgZm9yIGEgZ2xvYmFsLCB3aGljaCBtdXN0 IGJlIGFuIGFycmF5IG9mCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAgYi9nY2Mv aml0L2xpYmdjY2ppdC5tYXAKaW5kZXggYjE3NjcxMTYzYzcuLmMwMTM1ZTBkYmQwIDEwMDY0NAot LS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCkBA IC0yMzYsMyArMjM2LDEwIEBAIExJQkdDQ0pJVF9BQklfMTggewogICBnbG9iYWw6CiAgICAgZ2Nj X2ppdF9sdmFsdWVfc2V0X2xpbmtfc2VjdGlvbjsKIH0gTElCR0NDSklUX0FCSV8xNzsKKworTElC R0NDSklUX0FCSV8xOSB7CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3Rv cjsKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcjsKKyAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yOworICAgIGdjY19qaXRfZ2xvYmFsX3Nl dF9pbml0aWFsaXplcl9ydmFsdWU7Cit9IExJQkdDQ0pJVF9BQklfMTg7CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4IDNlOGNjYmNhNjBlLi4yOWFm ZTA2NGRiNiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5n LXRlc3RzLmgKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3Rz LmgKQEAgLTE4MSw2ICsxODEsMTMgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlm eV9jb2RlCiAKKy8qIHRlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMgKi8KKyNkZWZpbmUgY3JlYXRl X2NvZGUgY3JlYXRlX2NvZGVfZ2xvYmFsX2luaXRfcnZhbHVlCisjZGVmaW5lIHZlcmlmeV9jb2Rl IHZlcmlmeV9jb2RlX2dsb2JhbF9pbml0X3J2YWx1ZQorI2luY2x1ZGUgInRlc3QtZ2xvYmFsLWlu aXQtcnZhbHVlLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29kZQorCiAv KiB0ZXN0LWdsb2JhbC1zZXQtaW5pdGlhbGl6ZXIuYyAqLwogI2RlZmluZSBjcmVhdGVfY29kZSBj cmVhdGVfY29kZV9nbG9iYWxfc2V0X2luaXRpYWxpemVyCiAjZGVmaW5lIHZlcmlmeV9jb2RlIHZl cmlmeV9jb2RlX2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIKQEAgLTIxOSw2ICsyMjYsMTMgQEAKICN1 bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8qIHRlc3QtbG9jYWwtaW5p dC1ydmFsdWUuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9sb2NhbF9pbml0 X3J2YWx1ZQorI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9sb2NhbF9pbml0X3J2YWx1 ZQorI2luY2x1ZGUgInRlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyIKKyN1bmRlZiBjcmVhdGVfY29k ZQorI3VuZGVmIHZlcmlmeV9jb2RlCisKIC8qIHRlc3QtbG9uZy1uYW1lcy5jICovCiAjZGVmaW5l IGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2xvbmdfbmFtZXMKICNkZWZpbmUgdmVyaWZ5X2NvZGUg dmVyaWZ5X2NvZGVfbG9uZ19uYW1lcwpAQCAtNDMxLDEyICs0NDUsMTggQEAgY29uc3Qgc3RydWN0 IHRlc3RjYXNlIHRlc3RjYXNlc1tdID0gewogICB7ImJ1aWx0aW4tdHlwZXMiLAogICAgY3JlYXRl X2NvZGVfYnVpbHRpbl90eXBlcywKICAgIHZlcmlmeV9jb2RlX2J1aWx0aW5fdHlwZXN9LAorICB7 Imdsb2JhbF9ydmFsdWVfaW5pdCIsCisgICBjcmVhdGVfY29kZV9nbG9iYWxfaW5pdF9ydmFsdWUs CisgICB2ZXJpZnlfY29kZV9nbG9iYWxfaW5pdF9ydmFsdWV9LAogICB7ImhlbGxvX3dvcmxkIiwK ICAgIGNyZWF0ZV9jb2RlX2hlbGxvX3dvcmxkLAogICAgdmVyaWZ5X2NvZGVfaGVsbG9fd29ybGR9 LAogICB7ImxpbmtlZF9saXN0IiwKICAgIGNyZWF0ZV9jb2RlX2xpbmtlZF9saXN0LAogICAgdmVy aWZ5X2NvZGVfbGlua2VkX2xpc3R9LAorICB7ImxvY2FsX3J2YWx1ZV9pbml0IiwKKyAgIGNyZWF0 ZV9jb2RlX2xvY2FsX2luaXRfcnZhbHVlLAorICAgdmVyaWZ5X2NvZGVfbG9jYWxfaW5pdF9ydmFs dWV9LAogICB7ImxvbmdfbmFtZXMiLAogICAgY3JlYXRlX2NvZGVfbG9uZ19uYW1lcywKICAgIHZl cmlmeV9jb2RlX2xvbmdfbmFtZXN9LApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1lcnJvci1jdG9yLWFycmF5LXdyb25nLW9iai5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1lcnJvci1jdG9yLWFycmF5LXdyb25nLW9iai5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi42YjU0Yjg1NDZmYwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1hcnJheS13cm9uZy1vYmouYwpAQCAtMCwwICsx LDU0IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3 aGVuIHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gYXJyYXkgdHlwZSwgYnV0IGhhcyB0aGUgdHlw ZSB3cm9uZyBvbiBhbiBlbGVtZW50LgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5l c3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAq dXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0 X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5cGUg KmZsb2F0X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJ VF9UWVBFX0ZMT0FUKTsKKworICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0KKyAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsIDAsIGludF90eXBlLCAxMCk7CisKKyAgZ2Nj X2ppdF9ydmFsdWUgKmZydiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91Ymxl IChjdHh0LAorCQkJCQkJCQlmbG9hdF90eXBlLAorCQkJCQkJCQkxMik7CisKKyAgZ2NjX2ppdF9y dmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yCisgICAg KGN0eHQsIDAsCisgICAgIGFycl90eXBlLAorICAgICAxLAorICAgICAmZnJ2KTsKKworICBDSEVD S19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0 IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAg cmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBW ZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBD SEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQp LAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvcjogYXJyYXkg ZWxlbWVudCAiCisJCSAgICAgICJ2YWx1ZSB0eXBlcyBkaWZmZXIgZnJvbSB0eXBlcyBpbiAndmFs dWVzJyAoZWxlbWVudCAiCisJCSAgICAgICJ0eXBlOiBpbnQpKCd2YWx1ZXMnIHR5cGU6IGZsb2F0 KSIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJv ciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9y OiBhcnJheSBlbGVtZW50ICIKKwkJICAgICAgInZhbHVlIHR5cGVzIGRpZmZlciBmcm9tIHR5cGVz IGluICd2YWx1ZXMnIChlbGVtZW50ICIKKwkJICAgICAgInR5cGU6IGludCkoJ3ZhbHVlcycgdHlw ZTogZmxvYXQpIik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVy cm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJy b3ItY3Rvci1zdHJ1Y3QtdG9vLWJpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi42YmMyMDQ1OWNkNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3QtdG9vLWJpZy5jCkBAIC0wLDAgKzEsNzEgQEAKKy8q CisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgYnVp bGQgYSBjdG9yCisgIGZvciBhbiBzdHJ1Y3QgdHlwZSwgYnV0IGhhdmUgdG9vIG1hbnkgZmllbGRz IGFuZCB2YWx1ZXMuCisKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2 b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEp Cit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUg KGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgZ2NjX2ppdF9maWVsZCAqYjEgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5 cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImIi KTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0 LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImMiKTsKKyAgZ2NjX2ppdF9m aWVsZCAqZmllbGRzX2JbXSA9IHtiMSwgYjIsIGIzfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVj dF9iYXJfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAg ICAiYmFyIiwKKwkJCQkgICAgICAgMywKKwkJCQkgICAgICAgZmllbGRzX2IpKTsKKworICBnY2Nf aml0X2ZpZWxkICpmaWVsZHNfY3RvcltdID0ge2IxLCBiMiwgYjMsIGIzfTsKKyAgZ2NjX2ppdF9y dmFsdWUgKnZhbHVlc1tdID0gezAsMCwwLDB9OworCisgIGdjY19qaXRfcnZhbHVlICpjdG9yID0g Z2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAoY3R4dCwgMCwKKyAg ICAgc3RydWN0X2Jhcl90eXBlLAorICAgICA0LAorICAgICBmaWVsZHNfY3RvciwKKyAgICAgdmFs dWVzKTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9j b2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7Cisg IC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5n IGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBO VUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBl bWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmly c3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29u c3RydWN0b3I6IG1vcmUgdmFsdWVzIGluICIKKwkJICAgICAgImNvbnN0cnVjdG9yIChuPTQpIHRo YW4gZmllbGRzIGluIHRhcmdldCBzdHJ1Y3QgIgorCQkgICAgICAiYmFyIChuPTMpIik7CisgIENI RUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwK KwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yOiBtb3JlIHZh bHVlcyBpbiAiCisJCSAgICAgICJjb25zdHJ1Y3RvciAobj00KSB0aGFuIGZpZWxkcyBpbiB0YXJn ZXQgc3RydWN0ICIKKwkJICAgICAgImJhciAobj0zKSIpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy1maWVsZC1vYmouYyBi L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmllbGQt b2JqLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJjMTkxZTE0ZDA3 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9y LXN0cnVjdC13cm9uZy1maWVsZC1vYmouYwpAQCAtMCwwICsxLDg2IEBACisvKgorCisgIFRlc3Qg dGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGJ1aWxkIGEgY3Rvcgor ICBmb3IgYW4gc3RydWN0IHR5cGUsIGJ1dCB0cnkgdG8gdXNlIGEgZmllbGQgb2JqZWN0IHRoYXQg d2FzIG5vdAorICB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RydWN0IHR5cGUuCisKKyovCisKKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0 LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5 cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lO VCk7CisKKyAgZ2NjX2ppdF9maWVsZCAqYjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2pp dF9maWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAs CisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5 cGUsCisJCQkJCQkgImMiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjQgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImQi KTsKKyAgZ2NjX2ppdF9maWVsZCAqYjUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0 LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImQiKTsKKyAgZ2NjX2ppdF9m aWVsZCAqZmllbGRzX2JbXSA9IHtiMSwgYjIsIGIzLCBiNCwgYjV9OworCisgIGdjY19qaXRfdHlw ZSAqc3RydWN0X2Jhcl90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAg IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJ CQkJICAgICAgICJiYXIiLAorCQkJCSAgICAgICA1LAorCQkJCSAgICAgICBmaWVsZHNfYikpOwor CisKKyAgZ2NjX2ppdF9maWVsZCAqYjQ0ID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4 dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgaW50X3R5cGUsCisJCQkJCQkgICJjIik7CisKKyAgZ2Nj X2ppdF9maWVsZCAqZmllbGRzX2N0b3JbXSA9IHtiMSwgYjIsIGI0NCwgYjV9OworICBnY2Nfaml0 X3J2YWx1ZSAqdmFsdWVzW10gPSB7MCwwLDAsMH07CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0b3Ig PSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgIChjdHh0LCAwLAor ICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisgICAgIDQsCisgICAgIGZpZWxkc19jdG9yLAorICAgICB2 YWx1ZXMpOworCisgIENIRUNLX1ZBTFVFIChjdG9yLCBOVUxMKTsKK30KKwordm9pZAordmVyaWZ5 X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sK KyAgLyogRW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZp bmcgYSBib2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQs IE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2Fz IGVtaXR0ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9m aXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9j b25zdHJ1Y3RvcjogZmllbGQgb2JqZWN0ICIKKwkJICAgICAgImF0IGluZGV4IDIgKGMpLCB3YXMg bm90IHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgIgorCQkgICAgICAic3RydWN0IGJhciIpOworICBD SEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJvciAoY3R4dCks CisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcjogZmllbGQg b2JqZWN0ICIKKwkJICAgICAgImF0IGluZGV4IDIgKGMpLCB3YXMgbm90IHVzZWQgd2hlbiBjcmVh dGluZyB0aGUgIgorCQkgICAgICAic3RydWN0IGJhciIpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlLmMgYi9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5cGUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzY0NjEwYmQyMWYKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdy b25nLXR5cGUuYwpAQCAtMCwwICsxLDc2IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVy IGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gc3RydWN0 IHR5cGUsIGJ1dCBoYXMgdGhlIHR5cGUgd3Jvbmcgb24gYSBmaWVsZC4KKworKi8KKworI2luY2x1 ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQu aCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlw ZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5U KTsKKyAgZ2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBl IChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisKKyAgZ2NjX2ppdF9maWVsZCAqYjEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50 X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkg ImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImMiKTsKKyAgZ2NjX2pp dF9maWVsZCAqZmllbGRzX2JbXSA9IHtiMSwgYjIsIGIzfTsKKworICBnY2Nfaml0X3R5cGUgKnN0 cnVjdF9iYXJfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAg ICAgICAiYmFyIiwKKwkJCQkgICAgICAgMywKKwkJCQkgICAgICAgZmllbGRzX2IpKTsKKyAgZ2Nj X2ppdF9ydmFsdWUgKmZydiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91Ymxl IChjdHh0LAorCQkJCQkJCQlmbG9hdF90eXBlLAorCQkJCQkJCQkxMik7CisKKyAgZ2NjX2ppdF9m aWVsZCAqZmllbGRzX2N0b3JbXSA9IHtiMn07CisgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9 IHtmcnZ9OworCisgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19z dHJ1Y3RfY29uc3RydWN0b3IKKyAgICAoY3R4dCwgMCwKKyAgICAgc3RydWN0X2Jhcl90eXBlLAor ICAgICAxLAorICAgICBmaWVsZHNfY3RvciwKKyAgICAgdmFsdWVzKTsKKworICBDSEVDS19WQUxV RSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBi YWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0 IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkg dGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19T VFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkg ICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3I6IHZhbHVlIGFuZCAi CisJCSAgICAgICJmaWVsZCBub3QgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSwgYXQgaW5kZXgg MCAiCisJCSAgICAgICIoc3RydWN0IGJhci5iOiBpbnQpKHZhbHVlIHR5cGU6IGZsb2F0KSIpOwor ICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJvciAoY3R4 dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcjogdmFs dWUgYW5kICIKKwkJICAgICAgImZpZWxkIG5vdCB0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlLCBh dCBpbmRleCAwICIKKwkJICAgICAgIihzdHJ1Y3QgYmFyLmI6IGludCkodmFsdWUgdHlwZTogZmxv YXQpIik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0 b3Itc3RydWN0LXdyb25nLXR5cGUyLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9y LWN0b3Itc3RydWN0LXdyb25nLXR5cGUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmMyMzA5ZGU4N2RmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jCkBAIC0wLDAgKzEsNzcg QEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4g d2UgYnVpbGQgYSBjdG9yCisgIGZvciBhbiBzdHJ1Y3QgdHlwZSwgYnV0IGhhcyB0aGUgdHlwZSB3 cm9uZyBvbiBhIGZpZWxkLgorCisgIExpa2UgdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10 eXBlLmMsIGJ1dCB3aXRoIGltcGxpY2l0IGZpZWxkcy4KKworKi8KKworI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNs dWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19q aXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2Nj X2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAor ICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisKKyAgZ2NjX2ppdF9maWVsZCAqYjEgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJ CQkJCQkgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Zp ZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImIiKTsKKyAg Z2NjX2ppdF9maWVsZCAqYjMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJ CQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImMiKTsKKyAgZ2NjX2ppdF9maWVsZCAq ZmllbGRzX2JbXSA9IHtiMSwgYjIsIGIzfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJf dHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiYmFy IiwKKwkJCQkgICAgICAgMywKKwkJCQkgICAgICAgZmllbGRzX2IpKTsKKyAgZ2NjX2ppdF9ydmFs dWUgKmZydiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlIChjdHh0LAor CQkJCQkJCQlmbG9hdF90eXBlLAorCQkJCQkJCQkxMik7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0 b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgIChjdHh0LCAw LAorICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisgICAgIDEsCisgICAgIDAsCisgICAgICZmcnYpOwor CisgIENIRUNLX1ZBTFVFIChjdG9yLCBOVUxMKTsKK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyogRW5z dXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBib2d1 cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwpOwor CisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQu ICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9lcnJv ciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3Rv cjogdmFsdWUgYW5kICIKKwkJICAgICAgImZpZWxkIG5vdCAiCisJCSAgICAgICJ0aGUgc2FtZSB1 bnF1YWxpZmllZCB0eXBlLCAiCisJCSAgICAgICJhdCBpbmRleCAwIChzdHJ1Y3QgYmFyLmE6IGlu dCkodmFsdWUgdHlwZTogZmxvYXQpIik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9j b250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9u ZXdfc3RydWN0X2NvbnN0cnVjdG9yOiB2YWx1ZSBhbmQgIgorCQkgICAgICAiZmllbGQgbm90ICIK KwkJICAgICAgInRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUsICIKKwkJICAgICAgImF0IGluZGV4 IDAgKHN0cnVjdCBiYXIuYTogaW50KSh2YWx1ZSB0eXBlOiBmbG9hdCkiKTsKK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci11bmlvbi13cm9uZy1maWVs ZC1uYW1lLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3ItdW5pb24td3Jv bmctZmllbGQtbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4y YmY4ZWU0MDIzZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt ZXJyb3ItY3Rvci11bmlvbi13cm9uZy1maWVsZC1uYW1lLmMKQEAgLTAsMCArMSw3NiBAQAorLyoK KworICBUZXN0IHRoYXQgdGhlIHByb3BlciBlcnJvciBpcyB0cmlnZ2VyZWQgd2hlbiB3ZSBidWls ZCBhIGN0b3IKKyAgZm9yIGFuIHVuaW9uIHR5cGUsIGJ1dCBkb24ndCBwcm92aWRlIGEgY29ycmVj dCBmaWVsZC4KKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQK K2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sK KyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4 dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0g Z2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7 CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUg KGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSk7CisKKyAgZ2NjX2ppdF9maWVsZCAqYjEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50 X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgZmxvYXRfdHlwZSwKKwkJCQkJ CSAiYiIpOworICBnY2Nfaml0X2ZpZWxkICpiMyA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQg KGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBkb3VibGVfdHlwZSwKKwkJCQkJCSAiYyIpOworICBn Y2Nfaml0X2ZpZWxkICpmaWVsZHNfYltdID0ge2IxLCBiMiwgYjN9OworCisgIGdjY19qaXRfdHlw ZSAqdW5pb25fYmFyX3R5cGUgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl90eXBl IChjdHh0LAorCQkJCSAgICAgIDAsCisJCQkJICAgICAgImJhciIsCisJCQkJICAgICAgMywKKwkJ CQkgICAgICBmaWVsZHNfYik7CisKKyAgZ2NjX2ppdF9maWVsZCAqYjMzID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgZG91YmxlX3R5cGUsCisJ CQkJCQkgICJjIik7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKnZhbCA9CisgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKGN0eHQsIGRvdWJsZV90eXBlLCAxKTsKKworICBn Y2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0 b3IKKyAgICAoY3R4dCwgMCwKKyAgICAgdW5pb25fYmFyX3R5cGUsCisgICAgIGIzMywKKyAgICAg dmFsKTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9j b2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7Cisg IC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5n IGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBO VUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBl bWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmly c3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl9jb25z dHJ1Y3RvcjogZmllbGQgb2JqZWN0IChjKSIKKwkJICAgICAgIiB3YXMgbm90IHVzZWQgd2hlbiBj cmVhdGluZyB0aGUgdHlwZSB1bmlvbiBiYXIiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nf aml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250 ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvcjogZmllbGQgb2JqZWN0IChjKSIKKwkJICAgICAgIiB3 YXMgbm90IHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgdHlwZSB1bmlvbiBiYXIiKTsKK30KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWFscmVhZHktaW5p dC5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxyZWFkeS1pbml0 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjZWFkODdmYzE1Ci0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwt YWxyZWFkeS1pbml0LmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKworICBUZXN0IHRoYXQgd2UgY2Fu J3Qgc2V0IHRoZSBpbml0aWFsaXplciBvbiBhIGdsb2JhbCB0d2ljZS4KKworKi8KKworI2luY2x1 ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQu aCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlw ZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisK KyAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisg ICAgY3R4dCwgTlVMTCwKKyAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICBpbnRfdHlw ZSwKKyAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzAiKTsKKworICBnY2Nfaml0X2dsb2JhbF9z ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICBiYXIsCisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAxKSk7CisgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWUgKAorICAgIGJhciwKKyAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDEpKTsKK30KKwordm9pZAordmVy aWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkK K3sKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBn aXZpbmcgYSBib2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1 bHQsIE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ug d2FzIGVtaXR0ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dl dF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlOiBnbG9iYWwgdmFyaWFibGUgIgorCQkgICAgICAiYWxyZWFkeSBpbml0aWFs aXplZDogZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzAiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChn Y2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9n bG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZTogZ2xvYmFsIHZhcmlhYmxlICIKKwkJICAgICAg ImFscmVhZHkgaW5pdGlhbGl6ZWQ6IGdsb2JhbF9sdmFsdWVpbml0X2ludF8wIik7Cit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1jb21tb24tc2Vj dGlvbi5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtY29tbW9uLXNl Y3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmY5OTQ1NDUx NjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWds b2JhbC1jb21tb24tc2VjdGlvbi5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisKKyAgVGVzdCB0aGF0 IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGds b2JhbCB3aXRoIGEgZ2xvYmFsIHRoYXQgaGFzIG5vIERFQ0xfSU5JVElBTCAoYW5kIGlzIG1hcmtl ZAorICBERUNMX0NPTU1PTihOT0RFKSA9IDEpLgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUg Imhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwg dm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9j b250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIGNv bnN0IGludCBmb287CisgICAgIGludCBiYXIgPSBmb287CisgICAqLworICBnY2Nfaml0X2x2YWx1 ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCBOVUxMLAor ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3Qg KGludF90eXBlKSwKKyAgICAiZ2xvYmFsX2NvbnN0X2ludF8wIik7CisgIGdjY19qaXRfbHZhbHVl ICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIE5VTEwsCisg ICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgaW50X3R5cGUsCisgICAgImdsb2JhbF9s dmFsdWVpbml0X2ludF8wIik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGJhciwKKwkJCQkJIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7Cit9CisKK3Zv aWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpy ZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRo ZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxV RSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBt ZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29u dGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAidW5hYmxlIHRvIGNvbnZlcnQg aW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGdsb2JhbCAiCisJCSAgICAgICJ2YXJpYWJsZSBnbG9iYWxf bHZhbHVlaW5pdF9pbnRfMCB0byBhIGNvbXBpbGUtdGltZSIKKwkJICAgICAgIiBjb25zdGFudCIp OworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJvciAo Y3R4dCksCisJCSAgICAgICJ1bmFibGUgdG8gY29udmVydCBpbml0aWFsIHZhbHVlIGZvciB0aGUg Z2xvYmFsICIKKwkJICAgICAgInZhcmlhYmxlIGdsb2JhbF9sdmFsdWVpbml0X2ludF8wIHRvIGEg Y29tcGlsZS10aW1lIgorCQkgICAgICAiIGNvbnN0YW50Iik7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5j IGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtaW5pdC10b28tc21hbGwt YXJyYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmEzZGI3YWYz NjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWds b2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisKKyAgVGVz dCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQor ICBhIGdsb2JhbCBhcnJheSB3aXRoIGEgY3RvciB3aXRoIHRvbyBtYW55IHZhbHVlcy4KKworICBV c2luZyBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKCkKKworKi8KKworI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2Nq aXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sgLyogZmxvYXQgZm9vWzFdID0gezEs Mn07ICovCisKKyAgZ2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dl dF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisgIGdjY19qaXRfdHlwZSAq YXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJ ICAgMCwKKwkJCQkJCQkgICBmbG9hdF90eXBlLAorCQkJCQkJCSAgIDEpOworICBnY2Nfaml0X3J2 YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg IGN0eHQsIGZsb2F0X3R5cGUsIDEpOworICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIp OworCisgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMn07CisKKyAg Z2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVj dG9yIChjdHh0LAorCQkJCQkJCQkwLAorCQkJCQkJCQlhcnJfdHlwZSwKKwkJCQkJCQkJMiwKKwkJ CQkJCQkJdmFsdWVzKTsKKyAgaWYgKCFjdG9yKQorICAgIHJldHVybjsKKworICBnY2Nfaml0X2x2 YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCBOVUxM LAorICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGFycl90eXBlLAorICAgICJnbG9i YWxfZmxvYXRhcnJfMTIiKTsKKyAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1 ZSAoZm9vLCBjdG9yKTsKK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAq Y3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGJh ZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBib2d1cworICAgICByZXN1bHQg YmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwpOworCisgIC8qIFZlcmlmeSB0 aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQuICovCisgIENIRUNLX1NU UklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAg ICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yOiBhcnJheSAiCisJCSAg ICAgICJjb25zdHJ1Y3RvciBoYXMgbW9yZSB2YWx1ZXMgdGhhbiB0aGUgYXJyYXkgdHlwZSdzICIK KwkJICAgICAgImxlbmd0aCAoYXJyYXkgdHlwZSBsZW5ndGg6IDEsIGNvbnN0cnVjdG9yIGxlbmd0 aDogMikiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3Rf ZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1 Y3RvcjogYXJyYXkgIgorCQkgICAgICAiY29uc3RydWN0b3IgaGFzIG1vcmUgdmFsdWVzIHRoYW4g dGhlIGFycmF5IHR5cGUncyAiCisJCSAgICAgICJsZW5ndGggKGFycmF5IHR5cGUgbGVuZ3RoOiAx LCBjb25zdHJ1Y3RvciBsZW5ndGg6IDIpIik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jIGIvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNjVhYThhODBiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jCkBAIC0wLDAg KzEsNjAgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVk IHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGdsb2JhbCB3aXRoIGFub3RoZXIgbm9uLWNvbnN0IGds b2JhbCdzIHJ2YWx1ZS4KKworICBVc2luZyBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJf cnZhbHVlKCkKKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQK K2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sK KyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4 dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKworICBnY2Nfaml0X2x2YWx1ZSAqZm9vOworICB7 IC8qIGludCBiYXI7ICovCisgICAgZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgK KyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAg IGludF90eXBlLAorICAgICAgImdsb2JhbF9sdmFsdWVpbml0X2ludDEiKTsKKyAgICBnY2Nfaml0 X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6 ZXJfcnZhbHVlIChmb28sCisgICAgICBydmFsKTsKKyAgfQorICB7IC8qIGludCBmb28gPSBiYXI7 ICovCisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9sdmFsdWVpbml0X2ludDIiKTsKKyAgICBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIsCisJCQkJCSAgIGdjY19q aXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0KK30KKwordm9pZAordmVyaWZ5X2NvZGUg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyog RW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBi b2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwp OworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0 ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9l cnJvciAoY3R4dCksCisJCSAgICAgICJ1bmFibGUgdG8gY29udmVydCBpbml0aWFsIHZhbHVlIGZv ciB0aGUgZ2xvYmFsIHZhcmlhYmxlIgorCQkgICAgICAiIGdsb2JhbF9sdmFsdWVpbml0X2ludDIg dG8gYSBjb21waWxlLXRpbWUgY29uc3RhbnQiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nf aml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAidW5hYmxlIHRvIGNv bnZlcnQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSIKKwkJICAgICAgIiBn bG9iYWxfbHZhbHVlaW5pdF9pbnQyIHRvIGEgY29tcGlsZS10aW1lIGNvbnN0YW50Iik7Cit9CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25z dC1pbml0LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25z dC1pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkZmZlMDZl YWMzCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1n bG9iYWwtbm9uY29uc3QtaW5pdC5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisKKyAgVGVzdCB0aGF0 IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGds b2JhbCB3aXRoIGEgZnVuY3Rpb24gY2FsbC4KKworICBVc2luZyBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlKCkKKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNz LmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVz ZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9n ZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKworICBnY2Nfaml0X2Z1bmN0 aW9uICpmbl9pbnRfMzsKKyAgeyAvKiBpbnQgZm9vICgpIHsgaW50IGxvY2FsID0gMzsgcmV0dXJu IGxvY2FsO30gKi8KKyAgICBmbl9pbnRfMyA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1 bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9S VEVELAorCQkJCSAgICBpbnRfdHlwZSwKKwkJCQkgICAgImZuX2ludF8zIiwKKwkJCQkgICAgMCwK KwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nf aml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm5faW50XzMsICJzdGFydCIpOworICAgIGdjY19qaXRf bHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmbl9pbnRfMywKKwkJ CQkJCQkwLAorCQkJCQkJCWludF90eXBlLAorCQkJCQkJCSJsb2NhbCIpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg ICAgY3R4dCwgaW50X3R5cGUsIDMpOworCisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVu dCAoYmxvY2ssIDAsIGxvY2FsLCBydmFsKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhf cmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1 ZShsb2NhbCkpOworCisgIH0KKworICB7IC8qIGludCBiYXIgPSBmb28oKTsgKi8KKyAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbCA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQs CisJCQkJMCwKKwkJCQlmbl9pbnRfMywKKwkJCQkwLDApOworCisgICAgZ2NjX2ppdF9sdmFsdWUg KmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAor ICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJn bG9iYWxfbm9uY29uc3RfaW50Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVy X3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisgIH0KK30KKwordm9pZAordmVyaWZ5X2NvZGUg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyog RW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBi b2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwp OworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0 ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9l cnJvciAoY3R4dCksCisJCSAgICAgICJ1bmFibGUgdG8gY29udmVydCBpbml0aWFsIHZhbHVlIGZv ciB0aGUgZ2xvYmFsIHZhcmlhYmxlIgorCQkgICAgICAiIGdsb2JhbF9ub25jb25zdF9pbnQgdG8g YSBjb21waWxlLXRpbWUgY29uc3RhbnQiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0 X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAidW5hYmxlIHRvIGNvbnZl cnQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSIKKwkJICAgICAgIiBnbG9i YWxfbm9uY29uc3RfaW50IHRvIGEgY29tcGlsZS10aW1lIGNvbnN0YW50Iik7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2YWx1ZS5jIGIvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDg2NjQ2MmZmNGEKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2YWx1ZS5jCkBAIC0wLDAg KzEsMTY0MyBAQAorLyogVGhpcyB0ZXN0Y2FzZSBjaGVja3MgdGhhdCBnY2Nfaml0X2dsb2JhbF9z ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKCkgd29ya3MKKyAgIHdpdGggcnZhbHVlcywgZXNwZWNpYWxs eSB3aXRoIGdjY19qaXRfY29udGV4dF9uZXdfKl9jb25zdHJ1Y3RvcigpIGZvcgorICAgc3RydWN0 LCB1bmlvbnMgYW5kIGFycmF5cy4gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8 c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgi CisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJf ZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpzaG9y dF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQ RV9TSE9SVCk7CisgIGdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9w b2ludGVyIChpbnRfdHlwZSk7CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5cGUgPSBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSk7CisgIGdj Y19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwK KyAgICBHQ0NfSklUX1RZUEVfRkxPQVQpOworICBnY2Nfaml0X3R5cGUgKmJvb2xfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQk9PTCk7Cisg IGdjY19qaXRfdHlwZSAqY2hhcl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0 LAorICAgIEdDQ19KSVRfVFlQRV9DSEFSKTsKKyAgZ2NjX2ppdF90eXBlICpjcGNoYXJfdHlwZSA9 IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQ09OU1Rf Q0hBUl9QVFIpOworICBnY2Nfaml0X3R5cGUgKnNpemVfdHlwZSA9IGdjY19qaXRfY29udGV4dF9n ZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfU0laRV9UKTsKKworICAvKiBNYWtlIGEg c3RydWN0OiBzdHJ1Y3QgZmkgeyBmbG9hdCBmOyBpbnQgaTt9ICovCisgIGdjY19qaXRfZmllbGQg KmZpX2YgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJ CQkJCSAgIGZsb2F0X3R5cGUsCisJCQkJCQkgICAiZiIpOworICBnY2Nfaml0X2ZpZWxkICpmaV9p ID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkg ICBpbnRfdHlwZSwKKwkJCQkJCSAgICJpIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0g e2ZpX2YsIGZpX2l9OworCisgIGdjY19qaXRfdHlwZSAqc3RydWN0X2ZpX3R5cGUgPQorICAgIGdj Y19qaXRfc3RydWN0X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3Rf dHlwZSAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImZpIiwKKwkJCQkgICAgICAg MiwKKwkJCQkgICAgICAgZmllbGRzKSk7CisKKyAgLyogTWFrZSBhIHN0cnVjdDoKKworICAgICBz dHJ1Y3QgYmFyIHsKKyAgICAgICBpbnQgaWk7CisgICAgICAgc3RydWN0IGZpIGZpOworICAgICAg IGZsb2F0IGZmOworICAgICB9CisgICovCisgIGdjY19qaXRfZmllbGQgKmJhcl9mZiA9IGdjY19q aXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAgIDAsCisJCQkJCQkgICAgIGZs b2F0X3R5cGUsCisJCQkJCQkgICAgICJmZiIpOworICBnY2Nfaml0X2ZpZWxkICpiYXJfaWkgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAwLAorCQkJCQkJICAg ICBpbnRfdHlwZSwKKwkJCQkJCSAgICAgImlpIik7CisgIGdjY19qaXRfZmllbGQgKmJhcl9maSA9 IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAgIDAsCisJCQkJCQkg ICAgIHN0cnVjdF9maV90eXBlLAorCQkJCQkJICAgICAiZmkiKTsKKyAgZ2NjX2ppdF9maWVsZCAq ZmllbGRzMltdID0ge2Jhcl9mZiwgYmFyX2ZpLCBiYXJfaWl9OworCisgIGdjY19qaXRfdHlwZSAq c3RydWN0X2Jhcl90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAgIGdj Y19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJ ICAgICAgICJiYXIiLAorCQkJCSAgICAgICAzLAorCQkJCSAgICAgICBmaWVsZHMyKSk7CisKKyAg LyogTWFrZSBhbiB1bmlvbjoKKworICAgICB1bmlvbiB1YmFyIHsKKyAgICAgICBmbG9hdCBmZjsK KyAgICAgICBpbnQgaWk7CisgICAgIH07CisgICovCisgIGdjY19qaXRfZmllbGQgKnViYXJfZmYg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgMCwKKwkJCQkJ CSAgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkgICAgICAiZmYiKTsKKyAgZ2NjX2ppdF9maWVsZCAq dWJhcl9paSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAgICAw LAorCQkJCQkJICAgICAgaW50X3R5cGUsCisJCQkJCQkgICAgICAiaWkiKTsKKyAgZ2NjX2ppdF9m aWVsZCAqZmllbGRzM1tdID0ge3ViYXJfZmYsIHViYXJfaWl9OworCisgIGdjY19qaXRfdHlwZSAq dWJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fdHlwZSAoY3R4dCwKKwkJCQkJCSAgICAg ICAwLAorCQkJCQkJICAgICAgICJ1YmFyIiwKKwkJCQkJCSAgICAgICAyLAorCQkJCQkJICAgICAg IGZpZWxkczMpOworCisgIHsgLyogc3RydWN0IGJhciBiYXIgPSB7LmZmPTEsIC5maT17LmY9Miwg Lmk9M30sIC5paT00fTsKKyAgICAgICBJLmUuIG5lc3RlZCBjdG9ycyBhbmQgd2l0aCBmaWVsZHMg c3BlY2lmaWVkCisgICAgICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9IGdjY19qaXRfY29u dGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JB TF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0 X2Jhcl8xMjM0XzEiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpmdmFsID0gZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKml2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAq dmFsc1tdID0geyBmdmFsLCBpdmFsfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtm aV9mLCBmaV9pfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0 X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9m aV90eXBlLAorICAgICAgIDIsCisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworCisgICAg aXZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQs IGludF90eXBlLCA0KTsKKyAgICBmdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqdmFsczJbXSA9IHtmdmFsLCBjdG9yLCBpdmFsfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVs ZHMyW10gPSB7YmFyX2ZmLCBiYXJfZmksIGJhcl9paX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAq Y3Rvcl9iYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgICAg KGN0eHQsIDAsCisgICAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICAgIDMsCisgICAgICAgZmll bGRzMiwKKyAgICAgICB2YWxzMik7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6 ZXJfcnZhbHVlIChiYXIsIGN0b3JfYmFyKTsKKyAgfQorICB7IC8qIHN0cnVjdCBiYXIgYmFyID0g ezEsIHsyLCAzfSwgNH07CisgICAgICAgSS5lLiBuZXN0ZWQgY3RvcnMgYW5kIGZpZWxkcyBpbXBs aWNpdCBpbiBkZWZpbml0aW9uIG9yZGVyIChmaWVsZHM9TlVMTCkKKyAgICAgKi8KKyAgICBnY2Nf aml0X2x2YWx1ZSAqYmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4 dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2Jh cl90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfYmFyXzEyMzRfMiIpOworCisgICAgZ2NjX2pp dF9ydmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAzKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IGZ2YWwsIGl2YWx9OworCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25z dHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAg MiwKKyAgICAgICAwLAorICAgICAgIHZhbHMpOworCisgICAgaXZhbCA9IGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0KTsKKyAgICBm dmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwg ZmxvYXRfdHlwZSwgMSk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsczJbXSA9IHtmdmFsLCBj dG9yLCBpdmFsfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yX2JhciA9IGdjY19qaXRfY29u dGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1 Y3RfYmFyX3R5cGUsCisgICAgICAgMywKKyAgICAgICAwLAorICAgICAgIHZhbHMyKTsKKworICAg IGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGJhciwgY3Rvcl9iYXIpOwor ICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHsuZj0yLCAuaT0zfTsgKi8KKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5 cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8yM18xIik7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOwor CisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgZnZhbCwgaXZhbH07CisgICAgZ2NjX2pp dF9maWVsZCAqZmllbGRzW10gPSB7ZmlfZiwgZmlfaX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAq Y3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgICAoY3R4 dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZpZWxkcywK KyAgICAgICB2YWxzKTsKKworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0gezIsIDN9OyAqLwor ICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisg ICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBz dHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2ZpXzIzXzIiKTsKKworICAgIGdj Y19qaXRfcnZhbHVlICpmdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQg KAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKml2YWwg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRf dHlwZSwgMyk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBmdmFsLCBpdmFsfTsK KworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3Rf Y29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAg ICAgIDIsCisgICAgICAgMCwKKyAgICAgICB2YWxzKTsKKworICAgIGdjY19qaXRfZ2xvYmFsX3Nl dF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkg Zm9vID0gey5pPTAsIC5mPTB9OyAobnVsbCBpbml0KSAqLworICAgIGdjY19qaXRfbHZhbHVlICpm b28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAg ICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAg ICJnbG9iYWxfc3RydWN0X2ZpXzAwXzEiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10g PSB7IDAsIDB9OworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9Owor CisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9j b25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAg ICAgMiwKKyAgICAgICBmaWVsZHMsCisgICAgICAgdmFscyk7CisKKyAgICBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0 IGZpIGZvbyA9IHswLCAwfTsgKG51bGwgZmllbGRzLCBudWxsIGVsZW1lbnRzIGluIHZhbHVlcykg Ki8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwg KAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAg ICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8wMF8yIik7CisKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyAwLCAwfTsKKworICAgIGdjY19qaXRfcnZhbHVl ICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChj dHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIsCisgICAgICAgMCwKKyAg ICAgICB2YWxzKTsKKworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUg KGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0gey5pID0gMH0gKG51bGwg aW5pdCk7CisKKyAgICAgICBOdWxsIGluaXQgdmFsdWVzLiAqLworICAgIGdjY19qaXRfbHZhbHVl ICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAor ICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAg ICAgICJnbG9iYWxfc3RydWN0X2ZpXzBfMSIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNb XSA9IHswfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9pfTsKKworICAgIGdj Y19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0 b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDEsCisg ICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0g ezB9OworCisgICAgICAgTnVsbCBpbml0IHZhbHVlcy4gKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAq Zm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAg ICAiZ2xvYmFsX3N0cnVjdF9maV8wXzIiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10g PSB7MH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdf c3RydWN0X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlw ZSwKKyAgICAgICAxLAorICAgICAgIDAsCisgICAgICAgdmFscyk7CisgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHN0cnVj dCBmaSBmb28gPSB7fTsgKG51bGwgaW5pdCkKKworICAgICAgIE51bGwgZmllbGRzIGFuZCB2YWx1 ZXMuICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlfNiIpOworCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25z dHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAg MCwKKyAgICAgICAwLAorICAgICAgIDApOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0gezIg KiAyLCAzfTsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25l d19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9S VEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8zIik7 CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZh bHVlICpmdmFsMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAg IGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMp OworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX211bCA9IGdjY19qaXRfY29udGV4dF9uZXdfYmlu YXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfTVVMVCwKKyAgICAgIGZs b2F0X3R5cGUsCisgICAgICBmdmFsLAorICAgICAgZnZhbDIpOworCisgICAgZ2NjX2ppdF9ydmFs dWUgKnZhbHNbXSA9IHsgcnZhbF9tdWwsIGl2YWx9OworICAgIGdjY19qaXRfZmllbGQgKmZpZWxk c1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAg c3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBmaWVsZHMsCisgICAgICAgdmFscyk7 CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3Ip OworICB9CisgIHsgLyogdW5pb24gdWJhciBmb28gPSB7LmZmID0gM307ICovCisgICAgIGdjY19q aXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0 LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICB1YmFyLAorICAg ICAgImdsb2JhbF91bmlvbl91Zm9vX2ZmMyIpOworCisgICAgIGdjY19qaXRfcnZhbHVlICpmdmFs ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgIGN0eHQsIGZs b2F0X3R5cGUsIDMpOworCisgICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250 ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvciAoCisgICAgICAgY3R4dCwKKyAgICAgICAwLAorICAg ICAgIHViYXIsCisgICAgICAgdWJhcl9mZiwKKyAgICAgICBmdmFsKTsKKworICAgICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyog dW5pb24gdWJhciBmb28gPSB7LmlpID0gMn07ICovCisgICAgIGdjY19qaXRfbHZhbHVlICpmb28g PSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAg R0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICB1YmFyLAorICAgICAgImdsb2JhbF91bmlv bl91Zm9vX2lpMiIpOworCisgICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0gZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKwor ICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fY29u c3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAgICAgMCwKKyAgICAgICB1YmFyLAorICAgICAg IHViYXJfaWksCisgICAgICAgaXZhbCk7CisKKyAgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRp YWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHVuaW9uIHViYXIgZm9vID0g ezEuMWZ9OyBzaG91bGQgaW5pdCBmaXJzdCBmaWVsZCAgKi8KKyAgICAgZ2NjX2ppdF9sdmFsdWUg KmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisg ICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHViYXIsCisgICAgICAiZ2xvYmFs X3VuaW9uX3Vmb29fZmYxYzEiKTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlICgKKyAgICAgICBjdHh0LCBmbG9hdF90 eXBlLCAxLjEpOworCisgICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0 X25ld191bmlvbl9jb25zdHJ1Y3RvciAoCisgICAgICAgY3R4dCwKKyAgICAgICAwLAorICAgICAg IHViYXIsCisgICAgICAgMCwKKyAgICAgICBmdmFsKTsKKworICAgICBnY2Nfaml0X2dsb2JhbF9z ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogdW5pb24gdWJh ciBmb28gPSAodW5pb24gdWJhcil7fTsgKi8KKyAgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdj Y19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0Nf SklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHViYXIsCisgICAgICAiZ2xvYmFsX3VuaW9uX3Vm b29fMCIpOworCisgICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25l d191bmlvbl9jb25zdHJ1Y3RvciAoCisgICAgICAgY3R4dCwKKyAgICAgICAwLAorICAgICAgIHVi YXIsCisgICAgICAgMCwKKyAgICAgICAwKTsKKworICAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5p dGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogaW50IGZvbyA9IDM7ICov CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9sdmFsdWUg KmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAor ICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJn bG9iYWxfaW50MV8zIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1 ZSAoZm9vLAorICAgICAgcnZhbCk7CisgIH0KKyAgeyAvKiBjb25zdCB2b2xhdGlsZSBpbnQgZm9v ID0gMzsgKi8KKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGdjY19qaXRfdHlw ZV9nZXRfY29uc3QgKGdjY19qaXRfdHlwZV9nZXRfdm9sYXRpbGUgKGludF90eXBlKSksCisgICAg ICAiZ2xvYmFsX2N2aW50MV8zIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVy X3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisgIH0KKyAgeyAvKiBUcnkgdGhlIGFib3ZlLCBi dXQgd2l0aCBvcHBvc2l0ZSBvcmRlciBvZiBnbG9iYWwgYW5kIGxpdGVyYWwgY2FsbHMgKi8KKyAg ICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAg ICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGlu dF90eXBlLAorICAgICAgImdsb2JhbF9pbnQyXzMiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZh bCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGlu dF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChm b28sCisgICAgICBydmFsKTsKKyAgfQorICB7IC8qIGludCBmb28gPSAzICogKDMgKyAzKSAqLwor ICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAor ICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAg aW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2ludDNfMTgiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbDNfMCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDNfMSA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDNfMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqcnZhbF9wbHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisg ICAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFs M18wLAorICAgICAgcnZhbDNfMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbXVsID0gZ2Nj X2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFS WV9PUF9NVUxULAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsX3BsdXMsCisgICAgICBydmFs M18yKTsKKworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywK KyAgICAgIHJ2YWxfbXVsKTsKKyAgfQorICB7IC8qIGludCBmb28gPSB+KC0oKCgoKDIgfCA4KSAm IDE1KSBeIDApIDw8IDMgPj4gMiAtIDEpIC8gMikpOyAqLworICAgIGdjY19qaXRfbHZhbHVlICpm b28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xv YmFsX2ludF9hbG90b2ZvcGVyYXRvcnMiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8wID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5 cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgOCk7CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGludF90eXBlLCAxNSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMyA9 IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90 eXBlLCAwKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF80ID0gZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19q aXRfcnZhbHVlICpydmFsXzUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LCBpbnRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNiA9 IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90 eXBlLCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF83ID0gZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworCisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWxfb3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4 dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX0JJVFdJU0VfT1IsCisgICAgICBpbnRfdHlw ZSwKKyAgICAgIHJ2YWxfMCwKKyAgICAgIHJ2YWxfMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2 YWxfYW5kID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBH Q0NfSklUX0JJTkFSWV9PUF9CSVRXSVNFX0FORCwKKyAgICAgIGludF90eXBlLAorICAgICAgcnZh bF9vciwKKyAgICAgIHJ2YWxfMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfeG9yID0gZ2Nj X2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFS WV9PUF9CSVRXSVNFX1hPUiwKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF9hbmQsCisgICAg ICBydmFsXzMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2xzaCA9IGdjY19qaXRfY29udGV4 dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfTFNISUZU LAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsX3hvciwKKyAgICAgIHJ2YWxfNCk7CisgICAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWxfcnNoID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3Ag KGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9SU0hJRlQsCisgICAgICBpbnRfdHlw ZSwKKyAgICAgIHJ2YWxfbHNoLAorICAgICAgcnZhbF81KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF9taW4gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwKKyAgICAg IEdDQ19KSVRfQklOQVJZX09QX01JTlVTLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsX3Jz aCwKKyAgICAgIHJ2YWxfNik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfZGl2ID0gZ2NjX2pp dF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9P UF9ESVZJREUsCisgICAgICBpbnRfdHlwZSwKKyAgICAgIHJ2YWxfbWluLAorICAgICAgcnZhbF83 KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF91bWluID0gIGdjY19qaXRfY29udGV4dF9uZXdf dW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX1VOQVJZX09QX01JTlVTLAorICAgICAg aW50X3R5cGUsCisgICAgICBydmFsX2Rpdik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbmVn ID0gIGdjY19qaXRfY29udGV4dF9uZXdfdW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklU X1VOQVJZX09QX0JJVFdJU0VfTkVHQVRFLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsX3Vt aW4pOworCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAor ICAgICAgcnZhbF9uZWcpOworICB9CisgIHsgLyogaW50IGZvbyA9IDM7IGludCAqcGZvbyA9ICZm b287ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50NF8zIik7CisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAg ICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVy X3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqcGZvbyA9 ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAg R0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBwaW50X3R5cGUsCisgICAgICAiZ2xvYmFs X3BpbnQ1Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocGZv bywKKyAgICAgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzIChmb28sIDApKTsKKyAgfQorICB7 IC8qIHN0YXRpYyBpbnQgZm9vOyBpbnQgKnBmb28gPSAmZm9vOyAqLworICAgIGdjY19qaXRfbHZh bHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVM TCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0lOVEVSTkFMLAorICAgICAgaW50X3R5cGUsCisgICAg ICAiZ2xvYmFsX2ludDVfMyIpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKnBmb28gPSAgZ2NjX2pp dF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRf R0xPQkFMX0VYUE9SVEVELAorICAgICAgcGludF90eXBlLAorICAgICAgImdsb2JhbF9waW50NiIp OworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKHBmb28sCisgICAg ICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAoZm9vLCAwKSk7CisKKyAgICBnY2Nfaml0X2Z1 bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAor CQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBn Y2Nfaml0X3R5cGVfZ2V0X3BvaW50ZXIoaW50X3R5cGUpLAorCQkJCSAgICAiZm5fcGludF8wIiwK KwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisKKyAgICBnY2Nfaml0X2Jsb2Nr ICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmbiwgInN0YXJ0Iik7CisKKyAg ICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkg ICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAoZm9vLCAwKSk7CisgIH0KKyAgeyAvKiBpbnQg Zm9vID0gMzsgaW50ICpwZm9vID0gJmZvbyArIDE7ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZv byA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAg ICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9i YWxfaW50Nl8zIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisK KyAgICBnY2Nfaml0X2x2YWx1ZSAqcGZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAo CisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAg ICBwaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX3BpbnQ3Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxf c2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocGZvbywKKyAgICAgIGdjY19qaXRfbHZhbHVlX2dldF9h ZGRyZXNzICgKKwlnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2FjY2VzcygKKwkgIGN0eHQsCisJ ICAwLAorCSAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MoZm9vLCAwKSwKKwkgIGdjY19qaXRf Y29udGV4dF9vbmUoY3R4dCwgaW50X3R5cGUpKSwKKwkwKSk7CisgIH0KKyAgeyAvKiBkb3VibGUg Zm9vID0gMzsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZG91YmxlMSA9ICBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisJY3R4dCwgTlVMTCwKKwlHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK Kwlkb3VibGVfdHlwZSwKKwkiZ2xvYmFsX2RvdWJsZTFfMyIpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgZG91YmxlX3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9y dmFsdWUgKGRvdWJsZTEsCisgICAgICBydmFsKTsKKyAgfQorICB7IC8qIGRvdWJsZSBmb28gPSAz ICogMyArIDMgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZG91YmxlMSA9ICBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisJY3R4dCwgTlVMTCwKKwlHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK Kwlkb3VibGVfdHlwZSwKKwkiZ2xvYmFsX2RvdWJsZTJfMTIiKTsKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGRvdWJsZV90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9tdWwgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZ X09QX01VTFQsCisgICAgICBkb3VibGVfdHlwZSwKKyAgICAgIHJ2YWwsCisgICAgICBydmFsKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9wbHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5h cnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgICAgZG91 YmxlX3R5cGUsCisgICAgICBydmFsX211bCwKKyAgICAgIHJ2YWwpOworICAgIGdjY19qaXRfZ2xv YmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGRvdWJsZTEsCisgICAgICBydmFsX3BsdXMpOwor ICB9CisgIHsgLyogYm9vbCBmb28gPSAzICsgMyA8PSA2OyAqLworICAgIGdjY19qaXRfbHZhbHVl ICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwK KyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYm9vbF90eXBlLAorICAgICAg Imdsb2JhbF9ib29sMV8xIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzAgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7 CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFs dWUgKnJ2YWw2ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAg Y3R4dCwgaW50X3R5cGUsIDYpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX3BsdXMgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwKKyAgICAgIDAsCisgICAgICBHQ0NfSklU X0JJTkFSWV9PUF9QTFVTLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsM18wLAorICAgICAg cnZhbDNfMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbGUgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2NvbXBhcmlzb24gKGN0eHQsCisgICAgICAwLAorICAgICAgR0NDX0pJVF9DT01QQVJJU09O X0xFLAorICAgICAgcnZhbF9wbHVzLAorICAgICAgcnZhbDYpOworCisgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbF9sZSk7CisgIH0KKyAg Z2NjX2ppdF9sdmFsdWUgKmdsb2JhbF9pbnRhcnJfMTIzNDsKKyAgeyAvKiBpbnQgZm9vW10gPSB7 MSwyLDMsNH07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250 ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIGlu dF90eXBlLAorCQkJCQkJCSAgICAgNCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsXzMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNCA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCA0KTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMiwg cnZhbF8zLCBydmFsXzR9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJ CSAgYXJyX3R5cGUsCisJCQkJCQkJCSAgNCwKKwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdsb2Jh bF9pbnRhcnJfMTIzNCA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAor ICAgICAgImdsb2JhbF9pbnRhcnJfMTIzNCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKGdsb2JhbF9pbnRhcnJfMTIzNCwgY3Rvcik7CisgIH0KKyAgeyAvKiBm bG9hdCBmb29bNF0gPSB7MSwyfTsgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJ CQkJCSAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBj dHh0LCBmbG9hdF90eXBlLCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwg Mik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8xLCBydmFsXzJ9Owor CisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2Nv bnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAgYXJyX3R5cGUsCisJCQkJ CQkJCSAgMiwKKwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAg Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdD Q19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2Zs b2F0YXJyXzEyIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAo Zm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGZsb2F0IGZvb1s0XSA9IHsxLDJ9OworICAgICAgIFdp dGggZGlmZmVyZW50IGFycmF5IG9iamVjdHMgb2Ygc2FtZSBzaXplIGFuZCB0eXBlLiAqLworCisg ICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlw ZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBmbG9hdF90eXBlLAorCQkJCQkJ CSAgICAgNCk7CisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZTEgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAgMCwKKwkJCQkJCQkgICAgICBmbG9h dF90eXBlLAorCQkJCQkJCSAgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzEgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90 eXBlLCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisKKyAgICBn Y2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8xLCBydmFsXzJ9OworCisgICAgZ2NjX2pp dF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChj dHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAgYXJyX3R5cGUxLAorCQkJCQkJCQkgIDIsCisJ CQkJCQkJCSAgdmFsdWVzKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29u dGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JB TF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9mbG9hdGFycl8xMl8y Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9y KTsKKyAgfQorICB7IC8qIGZsb2F0IGZvb1s0XSA9IHsxLDIsMH07IChudWxsIGluaXQpICovCisK KyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90 eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIGZsb2F0X3R5cGUsCisJCQkJ CQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUg KnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yLCAwfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpj dG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJ CQkJICAwLAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkgIDIsCisJCQkJCQkJCSAgdmFs dWVzKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9mbG9hdGFycl8xMjAiKTsKKyAgICBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsg LyogZmxvYXQgZm9vWzRdID0ge307IChudWxsIGluaXQpICovCisKKyAgICBnY2Nfaml0X3R5cGUg KmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJ CSAgICAgMCwKKwkJCQkJCQkgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKworICAg IGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1 Y3RvciAoY3R4dCwKKwkJCQkJCQkJICAwLAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkg IDAsCisJCQkJCQkJCSAgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2Nv bnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9C QUxfRVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAgICAgICJnbG9iYWxfZmxvYXRhcnJfMDAw MCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rv cik7CisgIH0KKyAgeyAvKiBmbG9hdCBmb29bNF0gPSB7TlVMTCAsIE5VTEwsIDMsIE5VTEwsIDUs IDZ9OyAobnVsbCBpbml0KSAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19q aXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJ ICAgICBmbG9hdF90eXBlLAorCQkJCQkJCSAgICAgOCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2 YWwzID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwg ZmxvYXRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWw1ID0gZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgNSk7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWw2ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgNik7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqdmFsdWVzW10gPSB7MCwgMCwgcnZhbDMsIDAsIHJ2YWw1LCBydmFsNiwgMCB9OworCisgICAg Z2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVj dG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAgYXJyX3R5cGUsCisJCQkJCQkJCSAg NywKKwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2pp dF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRf R0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2Zsb2F0YXJy XzAwMzA1NjAwIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAo Zm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGludCAqZm9vWzRdID0gezAsICZnbG9iYWxfaW50YXJy XzEyMzRbMV0sIDB9OyAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRf Y29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAg ICBwaW50X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8x ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50 X3R5cGUsIDEpOworICAgIGdjY19qaXRfbHZhbHVlICphcnJfYWNjZXNzID0gZ2NjX2ppdF9jb250 ZXh0X25ld19hcnJheV9hY2Nlc3MgKAorICAgICAgY3R4dCwKKyAgICAgIDAsCisgICAgICBnY2Nf aml0X2x2YWx1ZV9hc19ydmFsdWUgKGdsb2JhbF9pbnRhcnJfMTIzNCksCisgICAgICBydmFsXzEp OworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVz cyAoYXJyX2FjY2VzcywgMCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMyA9IGdjY19qaXRf Y29udGV4dF9udWxsIChjdHh0LCBwaW50X3R5cGUpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZh bHVlc1tdID0gezAsIHJ2YWxfMiwgcnZhbF8zfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9y ID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJ ICAwLAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkgIDIsCisJCQkJCQkJCSAgdmFsdWVz KTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFs ICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAg ICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9waW50YXJyX3gyeHgiKTsKKyAgICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyog Y2hhciBmb29bNF0gPSB7J3EnLCd3JywnZScsMH07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFy cl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAg ICAgMCwKKwkJCQkJCQkgICAgIGNoYXJfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworCisKKyAgICBn Y2Nfaml0X3J2YWx1ZSAqcnZhbHNbXSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICggY3R4dCwgY2hhcl90eXBlLCAncScpLAorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBjaGFyX3R5cGUsICd3JyksCisgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGNoYXJfdHlwZSwgJ2Un KSwKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgY2hh cl90eXBlLCAwKQorICAgIH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRf Y29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJCSAgMCwKKwkJCQkJ CQkJICBhcnJfdHlwZSwKKwkJCQkJCQkJICA0LAorCQkJCQkJCQkgIHJ2YWxzKTsKKyAgICBnY2Nf aml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0 eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBl LAorICAgICAgImdsb2JhbF9jaGFyYXJyX3F3ZSIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBpbnQgZm9vWzJdWzJd ID0ge3sxLDJ9LHszLDR9fTsgKi8KKworICAgIGdjY19qaXRfdHlwZSAqcm93X3R5cGUgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJ CSAgICAgaW50X3R5cGUsCisJCQkJCQkJICAgICAyKTsKKworICAgIGdjY19qaXRfdHlwZSAqYXJy X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAg ICAwLAorCQkJCQkJCSAgICAgcm93X3R5cGUsCisJCQkJCQkJICAgICAyKTsKKyAgICBnY2Nfaml0 X3J2YWx1ZSAqcnZhbHNfcm93MFtdID0geworICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9pbnQgKCBjdHh0LCBpbnRfdHlwZSwgMSksCisgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGludF90eXBlLCAyKQorICAgIH07CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWxzX3JvdzFbXSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICggY3R4dCwgaW50X3R5cGUsIDMpLAorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBpbnRfdHlwZSwgNCkKKyAgICB9OworCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3Jfcm93MCA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkgICAgIDAsCisJCQkJCSAgICAgcm93X3R5 cGUsCisJCQkJCSAgICAgMiwKKwkJCQkJICAgICBydmFsc19yb3cwKTsKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqY3Rvcl9yb3cxID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3Ry dWN0b3IgKGN0eHQsCisJCQkJCSAgICAgMCwKKwkJCQkJICAgICByb3dfdHlwZSwKKwkJCQkJICAg ICAyLAorCQkJCQkgICAgIHJ2YWxzX3JvdzEpOworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yc19y b3dbXSA9IHtjdG9yX3JvdzAsIGN0b3Jfcm93MX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rv cl9hcnIgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4 dCwKKwkJCQkJICAgICAwLAorCQkJCQkgICAgIGFycl90eXBlLAorCQkJCQkgICAgIDIsCisJCQkJ CSAgICAgY3RvcnNfcm93KTsKKworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9j b250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xP QkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2ludDJ4Mm1hdHJp eF8xMjM0Iik7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChm b28sIGN0b3JfYXJyKTsKKyAgfQorICB7IC8qIGNvbnN0IGNoYXIgKmZvb1s0XSA9IHsicXdlIiwg ImFzZCJ9OyAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4 dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBjcGNo YXJfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworCisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbHNb XSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RyaW5nX2xpdGVyYWwgKGN0eHQsICJx d2UiKSwKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RyaW5nX2xpdGVyYWwgKGN0eHQsICJh c2QiKQorICAgIH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4 dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJICBh cnJfdHlwZSwKKwkJCQkJCQkJICAyLAorCQkJCQkJCQkgIHJ2YWxzKTsKKyAgICBnY2Nfaml0X2x2 YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5V TEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAg ICAgImdsb2JhbF9jcGNoYXJhcnJfcXdlX2FzZCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBjb25zdCBpbnQgZm9v ID0gMzsKKyAgICAgICBpbnQgYmFyID0gZm9vOworICAgICAqLworICAgIGdjY19qaXRfbHZhbHVl ICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwK KyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9j b25zdCAoaW50X3R5cGUpLAorICAgICAgImdsb2JhbF9jb25zdF9pbnRfMyIpOworICAgIGdjY19q aXRfcnZhbHVlICpydmFsMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlIChmb28sCisJcnZhbDMpOworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAg Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdD Q19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2 YWx1ZWluaXRfaW50XzMiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZh bHVlIChiYXIsCisJCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0K KyAgeyAvKiBpbnQgZm9vID0gMyAqIDI7CisgICAgICAgaW50IGFycltdID0gezEsMiwzLDR9Owor ICAgICAgIGludCAqYmFyID0gJmFyclsyXSArIDEKKworICAgICAgIEV4YW1wbGUgaW4gdGhlIGRv Y3MuCisgICAgICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250 ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIGlu dF90eXBlLAorCQkJCQkJCSAgICAgNCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsXzMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNCA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCA0KTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMiwg cnZhbF8zLCBydmFsXzR9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJCQkJCQkJ CSAgYXJyX3R5cGUsCisJCQkJCQkJCSAgNCwKKwkJCQkJCQkJICB2YWx1ZXMpOworICAgIGdjY19q aXRfbHZhbHVlICpnbG9iYWxfaW50YXJyXzEyMzQgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25l d19nbG9iYWwgKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwkJ CQkgIGFycl90eXBlLAorCQkJCSAgImdsb2JhbF9pbnRhcnJfMTIzNF8yIik7CisKKyAgICBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChnbG9iYWxfaW50YXJyXzEyMzQsIGN0 b3IpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9CisgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoY3R4dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAor CQkJCSAgaW50X3R5cGUsCisJCQkJICAiZ2xvYmFsX2ludF82Iik7CisgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZQorICAgICAgKGJhciwKKyAgICAgICBnY2Nfaml0X2Nv bnRleHRfbmV3X2JpbmFyeV9vcAorCSAoY3R4dCwgMCwgR0NDX0pJVF9CSU5BUllfT1BfTVVMVCwK KwkgIGludF90eXBlLAorCSAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0 eHQsIGludF90eXBlLCAzKSwKKwkgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 IChjdHh0LCBpbnRfdHlwZSwgMikpKTsKKworICAgIGdjY19qaXRfbHZhbHVlICpwZm9vID0KKyAg ICAgIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsIChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisJCQkJICBnY2Nfaml0X3R5cGVfZ2V0X3BvaW50ZXIgKGludF90 eXBlKSwKKwkJCQkgICJnbG9iYWxfcGludF80Iik7CisgICAgLyogaW50ICpiYXIgPSAmYXJyWzJd ICsgMTsKKworICAgICAgIEluIHByYWN0aWNlIHdlIGNvdWxkIGp1c3QgZG8gJmZvb1szXQorICAg ICAgIGJ1dCBqdXN0IHByb3ZlIGZvbGRpbmcgdGhpcyB3b3Jrcy4gKi8KKyAgICBnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICAgICBwZm9vLAorICAgICAgIGdjY19q aXRfbHZhbHVlX2dldF9hZGRyZXNzICgKKwkgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nl c3MgKAorCSAgIGN0eHQsIDAsCisJICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKAorCSAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nlc3MgKAorCSAgICAgICBjdHh0LCAwLAor CSAgICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGdsb2JhbF9pbnRhcnJfMTIzNCksCisJ ICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlw ZSwgMikpLAorCSAgICAgICAwKSwKKwkgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoY3R4dCwgaW50X3R5cGUsIDEpKSwKKwkgICAwKSk7CisgIH0KKyAgeyAvKiAgc3RhdGlj IGludCBiYXIgPSAxMTsKKwlpbnQgZm9vICgpIHsgcmV0dXJuIGJhcjsgfSAqLworCisgICAgZ2Nj X2ppdF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBj dHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfSU5URVJOQUwsCisgICAgICBpbnRfdHlw ZSwKKyAgICAgICJnbG9iYWxfc3RhdGljX2ludF8xMSIpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQs IGludF90eXBlLCAxMSk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1 ZSAoYmFyLAorCXJ2YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAg R0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50X3R5cGUsCisJCQkJICAgICJm bl9pbnRfMTEiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKyAgICBnY2Nf aml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmbjExLCAic3Rh cnQiKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkg ICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShiYXIpKTsKKyAgfQorICB7IC8q IHN0YXRpYyBjb25zdCBpbnQgY2JhciA9IDExOworICAgICAgIGludCBjZm9vICgpIHsgcmV0dXJu IGNiYXI7IH0gKi8KKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0lO VEVSTkFMLAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAgICAg Imdsb2JhbF9zdGF0aWNfY2ludF8xMSIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAxMSk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLAor CXJ2YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAgICAgZ2NjX2ppdF9j b250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9G VU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50X3R5cGUsCisJCQkJICAgICJmbl9jaW50XzEx IiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9j ayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4xMSwgInN0YXJ0Iik7CisK KyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJ CQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoYmFyKSk7CisgIH0KKyAgeyAvKiBzdGF0aWMg Y29uc3QgaW50IGNiYXIgPSAxMjsKKyAgICAgICBjb25zdCBpbnQqIGNmb28gKCkgeyByZXR1cm4g JmNiYXI7IH0gKi8KKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0lO VEVSTkFMLAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAgICAg Imdsb2JhbF9zdGF0aWNfY2ludF8xMiIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAxMik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLAor CXJ2YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAgICAgZ2NjX2ppdF9j b250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9G VU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyKGludF90 eXBlKSwKKwkJCQkgICAgImZuX2NpbnRfMTIiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJ CSAgICAwKTsKKworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9u ZXdfYmxvY2sgKGZuMTEsICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9y ZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJl c3MgKGJhciwgMCkpOworICB9CisgIHsgLyogY29uc3QgaW50IGZvbyA9IDM7CisgICAgICAgc2hv cnQgYmFyID0gKHNob3J0KWZvbzsKKworICAgICAgIEFzc3VyZSBjYXN0cyBmb2xkCisgICAgICov CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAo CisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAg ICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0IChpbnRfdHlwZSksCisgICAgICAiZ2xvYmFsX2NvbnN0 X2ludF80Iik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzID0gZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKwlydmFsMyk7CisgICAgZ2Nj X2ppdF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBj dHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzaG9ydF90 eXBlLAorICAgICAgImdsb2JhbF9sdmFsdWVpbml0X3Nob3J0XzMiKTsKKyAgICBnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICAgIGJhciwKKyAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfY2FzdCggY3R4dCwgMCwKKwkJCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUg KGZvbyksCisJCQkJc2hvcnRfdHlwZSkpOworICB9CisgIHsgLyogY29uc3QgaW50IGZvbyA9IDM7 CisgICAgICAgY29uc3QgaW50IGNvbnN0ICpiYXIgPSAmZm9vOyAqLworICAgIGdjY19qaXRfbHZh bHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVM TCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dl dF9jb25zdCAoaW50X3R5cGUpLAorICAgICAgImdsb2JhbF9jb25zdF9pbnRfNiIpOworICAgIGdj Y19qaXRfcnZhbHVlICpydmFsMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5p dGlhbGl6ZXJfcnZhbHVlIChmb28sCisJcnZhbDMpOworICAgIGdjY19qaXRfbHZhbHVlICpiYXIg PSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAg IEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAo CisJZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyICgKKwkgIGdjY19qaXRfdHlwZV9nZXRfY29uc3Qg KAorCSAgICBpbnRfdHlwZSkpKSwKKyAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9jcGNpbnRfMyIp OworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKAorICAgICAgYmFy LAorICAgICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKGZvbywgMCkpOworICB9CisgIHsg LyogY29uc3QgaW50IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg2NCkpKSBmb28gPSAzOworICAg ICAgIGludCBiYXIgPSBmb287CisKKyAgICAgICBBc3N1cmUgYWxpZ25lbWVudCBkb2VzIG5vdCBt YWtlIHRoZSBjb25zdGFudCAibWlzcyIKKyAgICAgICBvciBzb21ldGhpbmcgc3RyYW5nZS4KKyAg ICAgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGdjY19qaXRfdHlwZV9nZXRfYWxpZ25lZCAo aW50X3R5cGUsIDY0KSksCisgICAgICAiZ2xvYmFsX2NvbnN0X2ludF83Iik7CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBpbnRfdHlwZSwgNCk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZSAoZm9vLAorCXJ2YWwpOworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2YWx1 ZWluaXRfaW50XzQiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl IChiYXIsCisJCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0KKyAg eworICAgIC8qIHVuaW9uIHVwaW50c2l6ZSB7IHNpemVfdCBzOyBpbnQgKnAgfSB1ID0gey5zID0g MHhFRUVGQkVFRn07ICovCisgICAgZ2NjX2ppdF9maWVsZCAqZjEgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHNpemVfdHlwZSwKKwkJCQkJ CSAgICJzIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Zp ZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHBpbnRfdHlwZSwKKwkJCQkJCSAgICJw Iik7CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMVtdID0ge2YxLCBmMn07CisKKyAgICBnY2Nf aml0X3R5cGUgKnViYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX3R5cGUgKGN0eHQsCisJ CQkJCQkJIDAsCisJCQkJCQkJICJ1cGludHNpemUiLAorCQkJCQkJCSAyLAorCQkJCQkJCSBmaWVs ZHMxKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKHViYXIpLAorICAgICAgImdsb2JhbF9jb25z dF91cGludHNpemVfMSIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbCA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZyAoCisgICAgICBjdHh0LCBzaXplX3R5cGUsIDB4RUVF RkJFRUYpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPQorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJICAgICAwLAorCQkJCQkgICAg IHViYXIsCisJCQkJCSAgICAgZjEsCisJCQkJCSAgICAgdmFsKTsKKworICAgIGdjY19qaXRfZ2xv YmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgey8qCisgICAg ICBzdHJ1Y3QgQjsKKyAgICAgIHN0cnVjdCBBIHsgQiogYjsgfTsKKyAgICAgIHN0cnVjdCBCIHsg QSogYTsgfTsKKyAgICAgIGV4dGVybiBzdHJ1Y3QgQiBiOworICAgICAgc3RydWN0IEEgYSA9IHsu YiA9IGJ9OworICAgICAgc3RydWN0IEIgYiA9IHsuYSA9IGF9OworCisgICAgICBTZWUgdGhhdCBv cGFxdWUgc3RydWN0cyBhbmQgY2lyY3VsYXIgcG9pbnRlcnMgd29ya3MuCisgICAqLworCisgICAg Z2NjX2ppdF9zdHJ1Y3QgKnN0cnVjdF9CID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfb3Bh cXVlX3N0cnVjdChjdHh0LAorCQkJCQkwLCAiQiIpOworCisgICAgZ2NjX2ppdF9maWVsZCAqZmll bGRzX0FbXSA9CisgICAgICB7CisJZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwgMCwK KwkJCQkgICBnY2Nfaml0X3R5cGVfZ2V0X3BvaW50ZXIgKAorCQkJCSAgICAgZ2NjX2ppdF9zdHJ1 Y3RfYXNfdHlwZSAoc3RydWN0X0IpKSwKKwkJCQkgICAiYiIpCisgICAgICB9OworCisgICAgZ2Nj X2ppdF9zdHJ1Y3QgKnN0cnVjdF9BID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0 X3R5cGUoY3R4dCwgMCwgIkEiLCAxLCBmaWVsZHNfQSk7CisKKyAgICBnY2Nfaml0X2ZpZWxkICpm aWVsZHNfQltdID0KKyAgICAgIHsKKwlnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LCAw LAorCQkJCSAgIGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAoCisJCQkJICAgICBnY2Nfaml0X3N0 cnVjdF9hc190eXBlIChzdHJ1Y3RfQSkpLAorCQkJCSAgICJhIikKKyAgICAgIH07CisKKyAgICBn Y2Nfaml0X3N0cnVjdF9zZXRfZmllbGRzIChzdHJ1Y3RfQiwgMCwgMSwgZmllbGRzX0IpOworCisg ICAgZ2NjX2ppdF9sdmFsdWUgKmEgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwg KGN0eHQsIDAsIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorCQkJCSAgZ2NjX2ppdF9zdHJ1Y3Rf YXNfdHlwZSAoc3RydWN0X0EpLAorCQkJCSAgImFfZ2xiIik7CisgICAgZ2NjX2ppdF9sdmFsdWUg KmIgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsIDAsIEdDQ19KSVRf R0xPQkFMX0VYUE9SVEVELAorCQkJCSAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoc3RydWN0X0Ip LAorCQkJCSAgImJfZ2xiIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKmJfYWRkciA9IGdjY19qaXRf bHZhbHVlX2dldF9hZGRyZXNzKCBiLCAwKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqYV9jdG9yID0K KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yIChjdHh0LCAwLAor CQkJCQkgICAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlIChzdHJ1Y3RfQSksCisJCQkJCSAgICAg IDEsIDAsCisJCQkJCSAgICAgICZiX2FkZHIpOworICAgIGdjY19qaXRfcnZhbHVlICphX2FkZHIg PSBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyggYSwgMCk7CisgICAgZ2NjX2ppdF9ydmFsdWUg KmJfY3RvciA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvciAo Y3R4dCwgMCwKKwkJCQkJICAgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoc3RydWN0X0IpLAor CQkJCQkgICAgICAxLCAwLAorCQkJCQkgICAgICAmYV9hZGRyKTsKKworICAgIGdjY19qaXRfZ2xv YmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUoYSwgYV9jdG9yKTsKKyAgICBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKGIsIGJfY3Rvcik7CisgIH0KK30KKworc3RydWN0IGZp IHsKKyAgZmxvYXQgZjsKKyAgaW50IGk7Cit9OworCitzdHJ1Y3QgYmFyMSB7CisgIGZsb2F0IGZm OworICBzdHJ1Y3QgZmkgZmk7CisgIGludCBpaTsKK307CisKK3VuaW9uIHViYXIxIHsKKyAgZmxv YXQgZmY7CisgIGludCBpaTsKK307CisKK3VuaW9uIHVwaW50c2l6ZSB7CisgIHNpemVfdCBzOwor ICBpbnQgKnA7Cit9OworCitzdHJ1Y3QgQl9nbGI7CitzdHJ1Y3QgQV9nbGIgeworICBzdHJ1Y3Qg Ql9nbGIgKmI7Cit9Oworc3RydWN0IEJfZ2xiIHsKKyAgc3RydWN0IEFfZ2xiICphOworfTsKKwor aW50IHRlc3RfYWxpZ25lZDY0X3dvcmtzX2luX2xpbmtlcl8xIF9fYXR0cmlidXRlX18gKChhbGln bmVkICg2NCkpKSA9IDA7CitpbnQgdGVzdF9hbGlnbmVkNjRfd29ya3NfaW5fbGlua2VyXzIgX19h dHRyaWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkpID0gMDsKKwordm9pZAordmVyaWZ5X2NvZGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tf Tk9OX05VTEwgKHJlc3VsdCk7CisKKyAgeworICAgIHN0cnVjdCBiYXIxICpiYXIgPQorICAgICAg Z2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9iYXJfMTIz NF8xIik7CisKKyAgICBDSEVDS19WQUxVRSAoYmFyLT5mZiwgMSk7CisgICAgQ0hFQ0tfVkFMVUUg KGJhci0+ZmkuZiwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+ZmkuaSwgMyk7CisgICAgQ0hF Q0tfVkFMVUUgKGJhci0+aWksIDQpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgYmFyMSAqYmFyID0K KyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3Rf YmFyXzEyMzRfMiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+ZmYsIDEpOworICAgIENIRUNL X1ZBTFVFIChiYXItPmZpLmYsIDIpOworICAgIENIRUNLX1ZBTFVFIChiYXItPmZpLmksIDMpOwor ICAgIENIRUNLX1ZBTFVFIChiYXItPmlpLCA0KTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpm aSA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlf MjNfMSIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAyKTsKKyAgICBDSEVDS19WQUxVRSAo ZmktPmksIDMpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9maV8yM18yIik7CisKKyAgICBDSEVD S19WQUxVRSAoZmktPmYsIDIpOworICAgIENIRUNLX1ZBTFVFIChmaS0+aSwgMyk7CisgIH0KKyAg eworICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQs ICJnbG9iYWxfc3RydWN0X2ZpXzAwXzEiKTsKKworICAgIENIRUNLX1ZBTFVFIChmaS0+ZiwgMCk7 CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAwKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpm aSA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlf MDBfMiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAwKTsKKyAgICBDSEVDS19WQUxVRSAo ZmktPmksIDApOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9maV8wXzEiKTsKKworICAgIENIRUNL X1ZBTFVFIChmaS0+ZiwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAwKTsKKyAgfQorICB7 CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwg Imdsb2JhbF9zdHJ1Y3RfZmlfMF8yIik7CisKKyAgICBDSEVDS19WQUxVRSAoZmktPmYsIDApOwor ICAgIENIRUNLX1ZBTFVFIChmaS0+aSwgMCk7CisgIH0KKyAgeworICAgIHN0cnVjdCBmaSAqZmkg PSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2ZpXzYi KTsKKworICAgIENIRUNLX1ZBTFVFIChmaS0+ZiwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5p LCAwKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0X2dldF9n bG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfMyIpOworCisgICAgQ0hFQ0tfVkFMVUUg KGZpLT5mLCAyICogMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAzKTsKKyAgfQorICB7Cisg ICAgdW5pb24gdWJhcjEgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwK KwkJCQkJCSAgImdsb2JhbF91bmlvbl91Zm9vX2ZmMyIpOworICAgIENIRUNLX1ZBTFVFIChmb28t PmZmLCAzKTsKKyAgfQorICB7CisgICAgdW5pb24gdWJhcjEgKmZvbyA9IGdjY19qaXRfcmVzdWx0 X2dldF9nbG9iYWwgKHJlc3VsdCwKKwkJCQkJCSAgImdsb2JhbF91bmlvbl91Zm9vX2lpMiIpOwor ICAgIENIRUNLX1ZBTFVFIChmb28tPmlpLCAyKTsKKyAgfQorICB7CisgICAgdW5pb24gdWJhcjEg KmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwKKwkJCQkJCSAgImdsb2Jh bF91bmlvbl91Zm9vX2ZmMWMxIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvby0+ZmYsIDEuMWYpOwor ICB9CisgIHsKKyAgICB1bmlvbiB1YmFyMSAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2Jh bCAocmVzdWx0LAorCQkJCQkJICAiZ2xvYmFsX3VuaW9uX3Vmb29fMCIpOworICAgIENIRUNLX1ZB TFVFIChmb28tPmlpLCAwKTsKKyAgfQorICB7CisgICAgaW50ICpmb28gPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50MV8zIik7CisKKyAgICBDSEVDS19WQUxV RSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0 X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2N2aW50MV8zIik7CisKKyAgICBDSEVDS19WQUxVRSAo KmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2ds b2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDJfMyIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpmb28s IDMpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwg KHJlc3VsdCwgImdsb2JhbF9pbnQzXzE4Iik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMTgp OworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJl c3VsdCwgImdsb2JhbF9pbnRfYWxvdG9mb3BlcmF0b3JzIik7CisKKyAgICBDSEVDS19WQUxVRSAo KmZvbywgfigtKCgoKCgoMiB8IDgpICYgMTUpIF4gMCkgPDwgMyA+PiAyKSAtIDEpIC8gMikpKTsK KyAgfQorICB7CisgICAgaW50ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1 bHQsICJnbG9iYWxfaW50NF8zIik7CisgICAgaW50ICoqcGZvbyA9IGdjY19qaXRfcmVzdWx0X2dl dF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9waW50NSIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpm b28sIDMpOworICAgIENIRUNLX1ZBTFVFIChmb28sICpwZm9vKTsKKyAgICBDSEVDS19WQUxVRSAo KipwZm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICogKCpmb28pICh2b2lkKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9waW50XzAiKTsKKyAgICBpbnQgKipwZm9vID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3BpbnQ2Iik7CisKKyAg ICBDSEVDS19WQUxVRSAoKmZvbyAoKSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvbyAoKSwgKnBm b28pOworICAgIENIRUNLX1ZBTFVFICgqKnBmb28sIDApOworICB9CisgIHsKKyAgICBpbnQgKmZv byA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnQ2XzMiKTsK KyAgICBpbnQgKipwZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xv YmFsX3BpbnQ3Iik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgICAgQ0hFQ0tfVkFM VUUgKGZvbyArIDEsICpwZm9vKTsKKyAgICBDSEVDS19WQUxVRSAoKigqcGZvbyAtIDEpLCAzKTsK KyAgfQorICB7CisgICAgZG91YmxlICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChy ZXN1bHQsICJnbG9iYWxfZG91YmxlMV8zIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7 CisgIH0KKyAgeworICAgIGRvdWJsZSAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAo cmVzdWx0LCAiZ2xvYmFsX2RvdWJsZTJfMTIiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAx Mik7CisgIH0KKyAgeworICAgIF9Cb29sICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFs IChyZXN1bHQsICJnbG9iYWxfYm9vbDFfMSIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDEp OworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJl c3VsdCwgImdsb2JhbF9pbnRhcnJfMTIzNCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZvb1swXSwg MSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sxXSwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sy XSwgMyk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1szXSwgNCk7CisgIH0KKyAgeworICAgIGZsb2F0 ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfZmxvYXRh cnJfMTIiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVF IChmb29bMV0sIDIpOworICAgIENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZB TFVFIChmb29bM10sIDApOworICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzEyXzIiKTsKKworICAgIENI RUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVFIChmb29bMV0sIDIpOworICAg IENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bM10sIDApOwor ICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVz dWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzEyMCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZvb1swXSwg MSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sxXSwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1sy XSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1szXSwgMCk7CisgIH0KKyAgeworICAgIGZsb2F0 ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfZmxvYXRh cnJfMDAwMCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZvb1swXSwgMCk7CisgICAgQ0hFQ0tfVkFM VUUgKGZvb1sxXSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZvb1syXSwgMCk7CisgICAgQ0hFQ0tf VkFMVUUgKGZvb1szXSwgMCk7CisgIH0KKyAgeworICAgIGZsb2F0ICpmb28gPSBnY2Nfaml0X3Jl c3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfZmxvYXRhcnJfMDAzMDU2MDAiKTsKKwor ICAgIGZsb2F0IGtleVtdID0gezAsMCwzLDAsNSw2LDAsMH07CisKKyAgICBDSEVDS19WQUxVRSAo bWVtY21wIChmb28sIGtleSwgc2l6ZW9mIGtleSksIDApOworICB9CisgIHsKKyAgICBpbnQgKipm b28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludGFycl94 Mnh4Iik7CisKKyAgICBDSEVDS19WQUxVRSAoZm9vWzBdLCAwKTsKKyAgICBDSEVDS19WQUxVRSAo KmZvb1sxXSwgMik7CisgIH0KKyAgeworICAgIGNoYXIgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dl dF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9jaGFyYXJyX3F3ZSIpOworICAgIGNvbnN0IGNoYXIg KmtleSA9ICJxd2UiOworICAgIENIRUNLX1ZBTFVFIChzdHJjbXAgKGZvbywga2V5KSwgMCk7Cisg IH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0 LCAiZ2xvYmFsX2ludDJ4Mm1hdHJpeF8xMjM0Iik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IDQ7IGkrKykKKyAgICAgIENIRUNLX1ZBTFVFIChmb29baV0sIGkgKyAxKTsKKyAgfQorICB7Cisg ICAgY29uc3QgY2hhciAqKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChy ZXN1bHQsICJnbG9iYWxfY3BjaGFyYXJyX3F3ZV9hc2QiKTsKKworICAgIENIRUNLX1ZBTFVFIChz dHJjbXAgKGZvb1swXSwgInF3ZSIpLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoc3RyY21wIChmb29b MV0sICJhc2QiKSwgMCk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzMiKTsKKworICAgIENI RUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICoqcGludCA9CisgICAgICBn Y2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludF80Iik7CisgICAg aW50ICpmb28gPQorICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xv YmFsX2ludF82Iik7CisgICAgQ0hFQ0tfVkFMVUUgKCoqcGludCwgNCk7CisgICAgQ0hFQ0tfVkFM VUUgKCpmb28sIDYpOworICB9CisgIHsKKyAgICBpbnQgKCpmbikodm9pZCkgPSBnY2Nfaml0X3Jl c3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5faW50XzExIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZu ICgpLCAxMSk7CisgIH0KKyAgeworICAgIGludCAoKmZuKSh2b2lkKSA9IGdjY19qaXRfcmVzdWx0 X2dldF9jb2RlIChyZXN1bHQsICJmbl9jaW50XzExIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZuICgp LCAxMSk7CisgIH0KKyAgeworICAgIGludCAqKCpmbikodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9n ZXRfY29kZSAocmVzdWx0LCAiZm5fY2ludF8xMiIpOworICAgIENIRUNLX1ZBTFVFICgqZm4gKCks IDEyKTsKKyAgfQorICB7CisgICAgc2hvcnQgKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9n ZXRfY29kZSAocmVzdWx0LCAiZ2xvYmFsX2x2YWx1ZWluaXRfc2hvcnRfMyIpOworICAgIENIRUNL X1ZBTFVFICgqZm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICoqZm9vID0KKyAgICAgIGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJnbG9iYWxfbHZhbHVlaW5pdF9jcGNpbnRfMyIp OworICAgIENIRUNLX1ZBTFVFICgqKmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0K KyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJnbG9iYWxfbHZhbHVlaW5p dF9pbnRfNCIpOworICAgIENIRUNLX1ZBTFVFICgqZm9vLCA0KTsKKworICAgIGludCAqYmFyID0K KyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJnbG9iYWxfY29uc3RfaW50 XzciKTsKKyAgICBDSEVDS19WQUxVRSAoKmJhciwgNCk7CisgICAgLyogVGhlIGxpbmtlciBkb2Vz IG5vdCBoYXZlIHRvIHN1cHBvcnQgdXAgdG8gNjQgYWxpZ25tZW50LCBzbyB0ZXN0IHRoYXQKKyAg ICAgICBpdCBkb2VzIGJlZm9yZSB0ZXN0aW5nIHRoYXQgaXQgd29ya3MgaW4gbGliZ2Njaml0LiAq LworICAgIGlmICgoc2l6ZV90KSAmdGVzdF9hbGlnbmVkNjRfd29ya3NfaW5fbGlua2VyXzEgJSA2 NCA9PSAwICYmCisJKHNpemVfdCkgJnRlc3RfYWxpZ25lZDY0X3dvcmtzX2luX2xpbmtlcl8yICUg NjQgPT0gMCkKKyAgICAgIENIRUNLX1ZBTFVFICgoc2l6ZV90KSBiYXIgJSA2NCwgMCk7IC8qIF9f YXR0cmlidXRlX18gKChhbGlnbmVkICg2NCkpKSAqLworICB9CisgIHsKKyAgICB1bmlvbiB1cGlu dHNpemUgKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZ2xv YmFsX2NvbnN0X3VwaW50c2l6ZV8xIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvby0+cCwgKHZvaWQq KTB4RUVFRkJFRUYpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgQV9nbGIgKmEgPQorICAgICAgZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImFfZ2xiIik7CisgICAgc3RydWN0IEJfZ2xi ICpiID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJiX2dsYiIpOwor CisgICAgQ0hFQ0tfVkFMVUUgKGEtPmIsIGIpOworICAgIENIRUNLX1ZBTFVFIChiLT5hLCBhKTsK KyAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1sb2NhbC1pbml0 LXJ2YWx1ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1sb2NhbC1pbml0LXJ2YWx1ZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDc0Njc5YzA3YwotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9jYWwtaW5pdC1ydmFs dWUuYwpAQCAtMCwwICsxLDcwNyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibGli Z2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCisvKiBUaGlzIHRlc3RjYXNlIGNoZWNr cyB0aGF0IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IoKSB3b3JrcworICAgd2l0aCBs b2NhbHMuIFRlc3RzIHRoYXQgY29uc3RydWN0b3JzIGNhbiBiZSB1c2VkIGFzIHJldHVybgorICAg dmFsdWVzIG9yIGZ1bmN0aW9uIGNhbGwgdmFsdWVzLiBUZXN0IHRoYXQgY29uc3RydWN0b3JzIGNh biBoYXZlIHNpZGUKKyAgIGVmZmVjdHMgYW5kIGJlIGFzc2lnbmVkIHRvIGxvY2Fscy4KKyAqLwor Cit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2Rh dGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5 cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqcGludF90 eXBlID0gZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyIChpbnRfdHlwZSk7CisgIGdjY19qaXRfdHlw ZSAqZG91YmxlX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0ND X0pJVF9UWVBFX0RPVUJMRSk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRf Y29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfRkxPQVQpOworICBnY2Nf aml0X3R5cGUgKmJvb2xfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAg ICBHQ0NfSklUX1RZUEVfQk9PTCk7CisgIGdjY19qaXRfdHlwZSAqY2hhcl90eXBlID0gZ2NjX2pp dF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9DSEFSKTsKKyAgZ2Nj X2ppdF90eXBlICpzaXplX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisg ICAgR0NDX0pJVF9UWVBFX1NJWkVfVCk7CisgIGdjY19qaXRfdHlwZSAqdm9pZHB0cl90eXBlID0g Z2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9WT0lEX1BU Uik7CisgIGdjY19qaXRfdHlwZSAqdm9pZF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBl IChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9WT0lEKTsKKworICAvKiBNYWtlIGEgc3RydWN0OiBz dHJ1Y3QgZmkgeyBmbG9hdCBmOyBpbnQgaTt9ICovCisgIGdjY19qaXRfZmllbGQgKmZpX2YgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgZmxvYXRf dHlwZSwKKwkJCQkJCSAiZiIpOworICBnY2Nfaml0X2ZpZWxkICpmaV9pID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJ ICJpIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgIGdj Y19qaXRfdHlwZSAqc3RydWN0X2ZpX3R5cGUgPQorICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUg KAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkgICAg ICAgMCwKKwkJCQkgICAgICAgImZpIiwKKwkJCQkgICAgICAgMiwKKwkJCQkgICAgICAgZmllbGRz KSk7CisKKyAgLyogTWFrZSBhIHN0cnVjdDoKKworICAgICBzdHJ1Y3QgYmFyIHsKKyAgICAgICBp bnQgaWk7CisgICAgICAgaW50IGFycls1MF07CisgICAgICAgZmxvYXQgZmY7CisgICAgICAgY2hh ciBjYzsKKyAgICAgfQorICAqLworICBnY2Nfaml0X2ZpZWxkICpiYXJfZmYgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCSAgMCwKKwkJCQkgIGZsb2F0X3R5cGUsCisJCQkJ ICAiZmYiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYmFyX2lpID0gZ2NjX2ppdF9jb250ZXh0X25ld19m aWVsZCAoY3R4dCwKKwkJCQkgIDAsCisJCQkJICBpbnRfdHlwZSwKKwkJCQkgICJpaSIpOworICBn Y2Nfaml0X2ZpZWxkICpiYXJfY2MgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAor CQkJCSAgMCwKKwkJCQkgIGNoYXJfdHlwZSwKKwkJCQkgICJjYyIpOworICBnY2Nfaml0X3R5cGUg KmludDUwYXJyX3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4 dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgaW50X3R5cGUsCisJCQkJICAgIDUwKTsKKyAgZ2NjX2pp dF9maWVsZCAqYmFyX2ZpID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJ CSAwLAorCQkJCQkJIGludDUwYXJyX3R5cGUsCisJCQkJCQkgImFyciIpOworICBnY2Nfaml0X2Zp ZWxkICpmaWVsZHMyW10gPSB7YmFyX2ZmLCBiYXJfZmksIGJhcl9paSwgYmFyX2NjfTsKKworICBn Y2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlw ZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAg ICAgICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkgICAgICAgNCwKKwkJCQkgICAgICAgZmll bGRzMikpOworCisgIC8qIE1ha2UgYW4gdW5pb246CisKKyAgICAgdW5pb24gdWJhciB7CisgICAg ICAgZmxvYXQgZmY7CisgICAgICAgaW50IGlpOworICAgICB9OworICAqLworICBnY2Nfaml0X2Zp ZWxkICp1YmFyX2ZmID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAg ICAgIDAsCisJCQkJCQkgICAgICBmbG9hdF90eXBlLAorCQkJCQkJICAgICAgImZmIik7CisgIGdj Y19qaXRfZmllbGQgKnViYXJfaWkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAor CQkJCQkJICAgICAgMCwKKwkJCQkJCSAgICAgIGludF90eXBlLAorCQkJCQkJICAgICAgImlpIik7 CisgIGdjY19qaXRfZmllbGQgKmZpZWxkczNbXSA9IHt1YmFyX2ZmLCB1YmFyX2lpfTsKKyAgZ2Nj X2ppdF90eXBlICp1YmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl90eXBlIChjdHh0LAor CQkJCQkJICAgICAgIDAsCisJCQkJCQkgICAgICAgInViYXIiLAorCQkJCQkJICAgICAgIDIsCisJ CQkJCQkgICAgICAgZmllbGRzMyk7CisKKyAgKHZvaWQpIHViYXI7CisgICh2b2lkKSBzdHJ1Y3Rf YmFyX3R5cGU7CisgICh2b2lkKSBzdHJ1Y3RfZmlfdHlwZTsKKyAgKHZvaWQpIGJvb2xfdHlwZTsK KyAgKHZvaWQpIGRvdWJsZV90eXBlOworICAodm9pZCkgcGludF90eXBlOworICAodm9pZCkgdm9p ZHB0cl90eXBlOworICAodm9pZCkgc2l6ZV90eXBlOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZu X2ludF8zOworICB7IC8qIGludCBmb28gKCkgeyBpbnQgbG9jYWwgPSAzOyByZXR1cm4gbG9jYWw7 fSAqLworICAgIGZuX2ludF8zID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24g KGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJ CQkJICAgIGludF90eXBlLAorCQkJCSAgICAiZm5faW50XzMiLAorCQkJCSAgICAwLAorCQkJCSAg ICAwLAorCQkJCSAgICAwKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVu Y3Rpb25fbmV3X2Jsb2NrIChmbl9pbnRfMywgInN0YXJ0Iik7CisgICAgZ2NjX2ppdF9sdmFsdWUg KmxvY2FsID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZuX2ludF8zLAorCQkJCQkJCTAs CisJCQkJCQkJaW50X3R5cGUsCisJCQkJCQkJImxvY2FsIik7CisgICAgZ2NjX2ppdF9ydmFsdWUg KnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMyk7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9j aywgMCwgbG9jYWwsIHJ2YWwpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4g KGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKGxvY2Fs KSk7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vKCkgeyByZXR1cm4gKHN0cnVjdCBmaSl7MSwy fTt9ICovCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElP Tl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0X2ZpX3R5cGUsCisJCQkJICAgICJmbl9maV8xXzIi LAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKyAgICBnY2Nfaml0X2Jsb2Nr ICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmbiwgInN0YXJ0Iik7CisKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9mMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDEpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsX2kyID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAg Y3R4dCwgaW50X3R5cGUsIDIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZh bF9mMSwgcnZhbF9pMn07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZmlfZiwgZmlf aX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3Ry dWN0X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwK KyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsKKworICAgIGdjY19qaXRf YmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGN0b3IpOwor ICB9CisgIHsgLyoKKyAgICAgICBzdHJ1Y3QgZmkgZm9vKCkKKyAgICAgICB7CisJIHN0cnVjdCBm aSBsb2NhbCA9IHsxLDJ9OworCSBsb2NhbCA9IChzdHJ1Y3QgZmkpezUsNn07CisJIHJldHVybiBs b2NhbDsKKyAgICAgICB9CisgICAgICovCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4gPQorICAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkg ICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0X2ZpX3R5cGUsCisJ CQkJICAgICJmbl9maV81XzYiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsK KyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAo Zm4sCisJCQkJCQkJMCwKKwkJCQkJCQlzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkJCQkibG9jYWwiKTsK KyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChm biwgInN0YXJ0Iik7CisKKyAgICB7CisgICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9mMSA9CisJ Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGZsb2F0X3R5cGUsIDEp OworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfaTIgPQorCWdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMik7CisKKyAgICAgIGdjY19qaXRfcnZh bHVlICp2YWxzW10gPSB7IHJ2YWxfZjEsIHJ2YWxfaTJ9OworICAgICAgZ2NjX2ppdF9maWVsZCAq ZmllbGRzW10gPSB7ZmlfZiwgZmlfaX07CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0g Z2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKwkoY3R4dCwgMCwKKwkgc3Ry dWN0X2ZpX3R5cGUsCisJIDIsCisJIGZpZWxkcywKKwkgdmFscyk7CisgICAgICBnY2Nfaml0X2Js b2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgbG9jYWwsIGN0b3IpOworICAgIH0KKyAgICB7 CisgICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9mMSA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKGN0eHQsIGZsb2F0X3R5cGUsIDUpOworICAgICAgZ2NjX2ppdF9ydmFs dWUgKnJ2YWxfaTIgPQorCWdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0 LCBpbnRfdHlwZSwgNik7CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IHJ2YWxf ZjEsIHJ2YWxfaTJ9OworICAgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZmlfZiwgZmlf aX07CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19z dHJ1Y3RfY29uc3RydWN0b3IKKwkoY3R4dCwgMCwKKwkgc3RydWN0X2ZpX3R5cGUsCisJIDIsCisJ IGZpZWxkcywKKwkgdmFscyk7CisgICAgICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChi bG9jaywgMCwgbG9jYWwsIGN0b3IpOworICAgIH0KKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dp dGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2 YWx1ZShsb2NhbCkpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbygpIHsgc3RydWN0IGZpIGxv Y2FsID0gezEsIGZuX2ludF8zKCl9OworCQkJIHJldHVybiBsb2NhbDt9CisKKyAgICAgICBUaGUg Y3RvciBoYXMgYSBzaWRlIGVmZmVjdCAoZnVuY2NhbGwpICovCisgICAgZ2NjX2ppdF9mdW5jdGlv biAqZm4gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkg ICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0 X2ZpX3R5cGUsCisJCQkJICAgICJmbl9maV8xXzMiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAor CQkJCSAgICAwKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19sb2NhbCAoZm4sCisJCQkJCQkJMCwKKwkJCQkJCQlzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkJ CQkibG9jYWwiKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25f bmV3X2Jsb2NrIChmbiwgInN0YXJ0Iik7CisKKyAgICB7CisgICAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF9mMSA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGZs b2F0X3R5cGUsIDEpOworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfaTIgPQorCWdjY19qaXRf Y29udGV4dF9uZXdfY2FsbCAoY3R4dCwgMCwgZm5faW50XzMsIDAsIDApOworCisgICAgICBnY2Nf aml0X3J2YWx1ZSAqdmFsc1tdID0geyBydmFsX2YxLCBydmFsX2kyfTsKKyAgICAgIGdjY19qaXRf ZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgICBnY2Nfaml0X3J2YWx1ZSAq Y3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisJKGN0eHQsIDAs CisJIHN0cnVjdF9maV90eXBlLAorCSAyLAorCSBmaWVsZHMsCisJIHZhbHMpOworICAgICAgZ2Nj X2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBjdG9yKTsKKyAgICB9 CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwK KwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAgfQorICB7IC8qIHN0 cnVjdCBmaSBmb28oZmkpIHsgcmV0dXJuIGZpO30KKyAgICAgICBzdHJ1Y3QgZmkgYmFyKCkgeyBy ZXR1cm4gZm9vKChzdHJ1Y3QgZmkpezMsIDR9KTsgfQorICAgICAqLworCisgICAgZ2NjX2ppdF9w YXJhbSAqZmlfcGFyYW0gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwg MCwgc3RydWN0X2ZpX3R5cGUsICJmaSIpOworCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4wID0K KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJ CQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVjdF9maV90eXBl LAorCQkJCSAgICAiZm5fZmlfeF94IiwKKwkJCQkgICAgMSwKKwkJCQkgICAgJmZpX3BhcmFtLAor CQkJCSAgICAwKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jazAgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19ibG9jayAoZm4wLCAic3RhcnQiKTsKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3Jl dHVybiAoYmxvY2swLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUg KAorCQkJCSAgICAgZ2NjX2ppdF9mdW5jdGlvbl9nZXRfcGFyYW0gKGZuMCwgMCkpKTsKKworICAg IGdjY19qaXRfZnVuY3Rpb24gKmZuID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rp b24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQs CisJCQkJICAgIHN0cnVjdF9maV90eXBlLAorCQkJCSAgICAiZm5fZmlfM180IiwKKwkJCQkgICAg MCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBn Y2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWxfZjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBmbG9hdF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9pMiA9 IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90 eXBlLCA0KTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IHJ2YWxfZjEsIHJ2YWxf aTJ9OworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAg Z2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1 Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwK KyAgICAgICBmaWVsZHMsCisgICAgICAgdmFscyk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY2Fs bCA9IGdjY19qaXRfY29udGV4dF9uZXdfY2FsbCAoY3R4dCwgMCwgZm4wLCAxLCAmY3Rvcik7CisK KyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJ CQkgICBjYWxsKTsKKyAgfQorICB7IC8qCisgICAgICAgdm9pZCBmb28oc3RydWN0IGJhciAqYikg eyAqYiA9IChzdHJ1Y3QgYmFyKSB7LmFyciA9IHsxLDJ9OyB9CisgICAgICovCisKKyAgICBnY2Nf aml0X3BhcmFtICpwYXJhbSA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0 LCAwLAorCQkJCSBnY2Nfaml0X3R5cGVfZ2V0X3BvaW50ZXIgKHN0cnVjdF9iYXJfdHlwZSksCisJ CQkJICJiIik7CisKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuID0KKyAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRf RlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHZvaWRfdHlwZSwKKwkJCQkgICAgImZuX3BiYXJf MTIiLAorCQkJCSAgICAxLAorCQkJCSAgICAmcGFyYW0sCisJCQkJICAgIDApOworICAgIGdjY19q aXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQi KTsKKworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2kxID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDEpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsX2kyID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAor ICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmFycl92YWxz W10gPSB7IHJ2YWxfaTEsIHJ2YWxfaTJ9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmFycl9jdG9y ID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAs CisgICAgICAgaW50NTBhcnJfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGFycl92YWxzKTsKKwor ICAgIGdjY19qaXRfcnZhbHVlICpzdHJfY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0 X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwKKyAgICAgICAwLAorICAgICAgIHN0cnVjdF9iYXJf dHlwZSwKKyAgICAgICAxLAorICAgICAgICZiYXJfZmksCisgICAgICAgJmFycl9jdG9yKTsKKwor ICAgIGdjY19qaXRfcGFyYW0gKnAwID0gZ2NjX2ppdF9mdW5jdGlvbl9nZXRfcGFyYW0gKGZuLCAw KTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbHYwID0gIGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlIChw MCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmRlcmVmID0KKyAgICAgIGdjY19qaXRfcnZhbHVlX2Rl cmVmZXJlbmNlIChnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGx2MCksIDApOworCisgICAgZ2Nj X2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsCisJCQkJICBkZXJlZiwKKwkJCQkg IHN0cl9jdG9yKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfdm9pZF9yZXR1cm4gKGJs b2NrLCAwKTsKKyAgfQorICB7IC8qIHN0cnVjdCBiYXIgZm9vKCkgeyBzdHJ1Y3QgYmFyIGxvY2Fs ID0ge307CisJCQkgIHJldHVybiBsb2NhbDt9CisgICAgICovCisgICAgZ2NjX2ppdF9mdW5jdGlv biAqZm4gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkg ICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0 X2Jhcl90eXBlLAorCQkJCSAgICAiZm5fYmFyXzBzIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwK KwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0KKyAgICAgIGdjY19qaXRf ZnVuY3Rpb25fbmV3X2xvY2FsIChmbiwKKwkJCQkgIDAsCisJCQkJICBzdHJ1Y3RfYmFyX3R5cGUs CisJCQkJICAibG9jYWwiKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVu Y3Rpb25fbmV3X2Jsb2NrIChmbiwgInN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rv ciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisJKGN0eHQsIDAsCisJ IHN0cnVjdF9iYXJfdHlwZSwKKwkgMCwKKwkgMCwKKwkgMCk7CisgICAgZ2NjX2ppdF9ibG9ja19h ZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBjdG9yKTsKKworICAgIGdjY19qaXRfYmxv Y2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZh bHVlX2FzX3J2YWx1ZShsb2NhbCkpOworICB9CisgIHsgLyogc3RydWN0IGJhciBmb28oKSB7IHN0 cnVjdCBiYXIgbG9jYWw7CisJCQkgIGxvY2FsLmFyciA9IChpbnQgWzUwXSl7MSwyLDMsNCw1LDZ9 OworCQkJICByZXR1cm4gbG9jYWw7fQorICAgICAqLworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZu ID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAs CisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVjdF9iYXJf dHlwZSwKKwkJCQkgICAgImZuX2Jhcl8xMjNzIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJ CQkgICAgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0KKyAgICAgIGdjY19qaXRfZnVu Y3Rpb25fbmV3X2xvY2FsIChmbiwKKwkJCQkgIDAsCisJCQkJICBzdHJ1Y3RfYmFyX3R5cGUsCisJ CQkJICAibG9jYWwiKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rp b25fbmV3X2Jsb2NrIChmbiwgInN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVz WzZdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgICB2YWx1ZXNbaV0g PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIGkg KyAxKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19h cnJheV9jb25zdHJ1Y3RvcgorCShjdHh0LCAwLAorCSBpbnQ1MGFycl90eXBlLAorCSA2LAorCSB2 YWx1ZXMpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKmFycl9sdiA9IGdjY19qaXRfbHZhbHVlX2Fj Y2Vzc19maWVsZCAobG9jYWwsCisJCQkJCQkJICAwLAorCQkJCQkJCSAgYmFyX2ZpKTsKKyAgICBn Y2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgYXJyX2x2LCBjdG9yKTsKKwor ICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJ CSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShsb2NhbCkpOworICB9CisgIHsgLyogaW50WzUw XSBmb28oKSB7IGludCBhcnJbNTBdOworCQkgICAgICAgYXJyID0gKGludCBbNTBdKXsxLDIsMyw0 LDUsNn07CisJCSAgICAgICByZXR1cm4gYXJyO30KKworICAgICAgIE4uQjogTm90IGEgdHlwbywg cmV0dXJuaW5nIGFuIGFycmF5LgorICAgICAqLworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuID0K KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJ CQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIGludDUwYXJyX3R5cGUs CisJCQkJICAgICJmbl9pbnQ1MGFycl8xMjNzIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJ CQkgICAgMCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0KKyAgICAgIGdjY19qaXRfZnVu Y3Rpb25fbmV3X2xvY2FsIChmbiwKKwkJCQkgIDAsCisJCQkJICBpbnQ1MGFycl90eXBlLAorCQkJ CSAgImxvY2FsIik7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1s2 XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgdmFsdWVzW2ldID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCBpICsg MSk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJy YXlfY29uc3RydWN0b3IgKAorCSBjdHh0LAorCSAwLAorCSBpbnQ1MGFycl90eXBlLAorCSA2LAor CSB2YWx1ZXMpOworCisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAs IGxvY2FsLCBjdG9yKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9j aywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShsb2NhbCkpOwor ICB9CisgIHsgLyoKKyAgICAgIFZlcmlmeSB0aGF0IGNpcmN1bGFyIGxpbmtlZCBsaXN0cyBjb21w aWxlcywgLmUuZy4KKyAgICAgIHRoYXQgdmlzaXRfY2hpbGRyZW4gZG9lcyBub3QgcnVuIGluIGNp cmNsZXMgb3Igc29tZXRoaW5nLgorCisgICAgICBzdHJ1Y3QgbGxpc3QgeyBzdHJ1Y3QgbGxpc3Qg Km5leHQ7IH07CisKKyAgICAgIGJvb2wgZm9vICh2b2lkKQorICAgICAgeworCXZvbGF0aWxlIHN0 cnVjdCBsbGlzdCBhOworCXZvbGF0aWxlIHN0cnVjdCBsbGlzdCBiOworCisJYSA9IChzdHJ1Y3Qg bGxpc3QpIHsubmV4dCA9ICZifTsKKwliID0gKHN0cnVjdCBsbGlzdCkgey5uZXh0ID0gJmF9Owor CisJcmV0dXJuIGEubmV4dCA9PSAmYjsKKyAgICAgIH0KKyAgICAqLworICAgIGdjY19qaXRfc3Ry dWN0ICpsbGlzdCA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X29wYXF1ZV9zdHJ1Y3QoY3R4 dCwKKwkJCQkJMCwgImxsaXN0X2xjbCIpOworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0K KyAgICAgIHsKKwlnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LCAwLAorCQkJCSAgIGdj Y19qaXRfdHlwZV9nZXRfcG9pbnRlciAoCisJCQkJICAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBl IChsbGlzdCkpLAorCQkJCSAgICJuZXh0IikKKyAgICAgIH07CisgICAgZ2NjX2ppdF9zdHJ1Y3Rf c2V0X2ZpZWxkcyAobGxpc3QsIDAsIDEsIGZpZWxkcyk7CisgICAgZ2NjX2ppdF90eXBlICp0X2xs aXN0ID0gZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAobGxpc3QpOworCisgICAgZ2NjX2ppdF9mdW5j dGlvbiAqZm4gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJ CQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgYm9v bF90eXBlLAorCQkJCSAgICAiZm5fbGxpc3QiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJ CSAgICAwKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3 X2Jsb2NrIChmbiwgInN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYSA9CisgICAgICBn Y2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJICAwLAorCQkJCSAgZ2NjX2ppdF90 eXBlX2dldF92b2xhdGlsZSAodF9sbGlzdCksCisJCQkJICAiYSIpOworICAgIGdjY19qaXRfbHZh bHVlICpiID0KKyAgICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmbiwKKwkJCQkgIDAs CisJCQkJICBnY2Nfaml0X3R5cGVfZ2V0X3ZvbGF0aWxlICh0X2xsaXN0KSwKKwkJCQkgICJiIik7 CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqYV9hZGRyID0gZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJl c3MoIGEsIDApOworICAgIGdjY19qaXRfcnZhbHVlICpiX2FkZHIgPSBnY2Nfaml0X2x2YWx1ZV9n ZXRfYWRkcmVzcyggYiwgMCk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqYV9jdG9yID0gZ2NjX2pp dF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IgKAorCSBjdHh0LAorCSAwLAorCSB0X2xs aXN0LAorCSAxLAorCSAwLAorCSAmYl9hZGRyKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpiX2N0 b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvciAoCisJIGN0eHQsCisJ IDAsCisJIHRfbGxpc3QsCisJIDEsCisJIDAsCisJICZhX2FkZHIpOworCisgICAgZ2NjX2ppdF9i bG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsCisJCQkJICBhLCBhX2N0b3IpOworICAgIGdj Y19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLAorCQkJCSAgYiwgYl9jdG9yKTsK KworICAgIGdjY19qaXRfcnZhbHVlICpjbXAgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19j b21wYXJpc29uICgKKwljdHh0LCAwLAorCUdDQ19KSVRfQ09NUEFSSVNPTl9FUSwKKwlnY2Nfaml0 X3J2YWx1ZV9hY2Nlc3NfZmllbGQgKGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoYSksCisJCQkJ ICAgICAwLCBmaWVsZHNbMF0pLAorCWdjY19qaXRfY29udGV4dF9uZXdfY2FzdCAoY3R4dCwgMCwK KwkJCQkgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzIChiLCAwKSwKKwkJCQkgIGdjY19qaXRf dHlwZV9nZXRfcG9pbnRlciAodF9sbGlzdCkpKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dp dGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLCBjbXApOworICB9Cit9CisKK3N0cnVjdCBmaTIg eworICBmbG9hdCBmOworICBpbnQgaTsKK307CisKK3N0cnVjdCBiYXIyIHsKKyAgZmxvYXQgZmY7 CisgIGludCBhcnJbNTBdOworICBpbnQgaWk7CisgIGNoYXIgYzsKK307CisKK3VuaW9uIHViYXIy IHsKKyAgZmxvYXQgZmY7CisgIGludCBpaTsKK307CisKK3N0cnVjdCBpbnQ1MGFyciB7CisgIGlu dCBhcnJbNTBdOworfTsKKwordm9pZCBfX2F0dHJpYnV0ZV9fKChvcHRpbWl6ZSgwKSkpCitzY3Jh bWJsZV9zdGFjayh2b2lkKQorICB7CisgICAgY2hhciAqcCA9IGFsbG9jYSgxMDApOworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAqcCsrID0gMHhGMDsKKyAgICBhc20o IiIpOyAvKiBNYXJrIGZvciBzaWRlLWVmZmVjdCAqLworICB9CisKK3ZvaWQgX19hdHRyaWJ1dGVf Xygob3B0aW1pemUoMCkpKQorc2NyYW1ibGVfYXJyIChjaGFyICphcnIsIGludCBsZW4pCit7Cisg IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgKmFycisrID0gaTsKKyAgYXNtKCIi KTsgLyogTWFyayBmb3Igc2lkZS1lZmZlY3QgKi8KK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tf Tk9OX05VTEwgKHJlc3VsdCk7CisKKyAgeworICAgIHN0cnVjdCBmaTIgKCpmbikgKHZvaWQpID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX2ZpXzFfMiIpOworICAgIHNjcmFt YmxlX3N0YWNrICgpOworICAgIHN0cnVjdCBmaTIgZmkgPSBmbiAoKTsKKyAgICBDSEVDS19WQUxV RSAoZmkuZiwgMSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmksIDIpOworICB9CisgIHsKKyAgICBz dHJ1Y3QgZmkyICgqZm4pICh2b2lkKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJmbl9maV81XzYiKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0gZm4gKCk7CisgICAgQ0hFQ0tfVkFM VUUgKGZpLmYsIDUpOworICAgIENIRUNLX1ZBTFVFIChmaS5pLCA2KTsKKyAgfQorICB7CisgICAg c3RydWN0IGZpMiAoKmZuKSAodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0 LCAiZm5fZmlfMV8zIik7CisgICAgc3RydWN0IGZpMiBmaSA9IGZuICgpOworICAgIENIRUNLX1ZB TFVFIChmaS5mLCAxKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuaSwgMyk7CisgIH0KKyAgeworICAg IHN0cnVjdCBmaTIgKCpmbikgKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3Vs dCwgImZuX2ZpXzNfNCIpOworICAgIHN0cnVjdCBmaTIgZmkgPSBmbiAoKTsKKyAgICBDSEVDS19W QUxVRSAoZmkuZiwgMyk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmksIDQpOworICB9CisgIHsKKyAg ICBzY3JhbWJsZV9zdGFjaygpOworICAgIHN0cnVjdCBiYXIyICgqZm4pICh2b2lkKSA9IGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9iYXJfMHMiKTsKKyAgICBzdHJ1Y3QgYmFy MiBiYXIgPSBmbiAoKTsKKyAgICBzdHJ1Y3QgYmFyMiBrZXkgPSB7fTsKKworICAgIENIRUNLX1ZB TFVFIChiYXIuZmYsIDApOworICAgIENIRUNLX1ZBTFVFIChiYXIuaWksIDApOworICAgIENIRUNL X1ZBTFVFIChtZW1jbXAgKCZiYXIuYXJyLCAma2V5LmFyciwgc2l6ZW9mIChrZXkuYXJyKSksIDAp OworICB9CisgIHsKKworICAgIHZvaWQgKCpmbikgKHN0cnVjdCBiYXIyICopID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX3BiYXJfMTIiKTsKKworICAgIHN0cnVjdCBiYXIy IGJhciA9IChzdHJ1Y3QgYmFyMikge307CisKKyAgICBzY3JhbWJsZV9hcnIgKChjaGFyKikmYmFy LCBzaXplb2YgYmFyKTsKKyAgICBzY3JhbWJsZV9zdGFjaygpOworCisgICAgZm4gKCZiYXIpOwor CisgICAgc3RydWN0IGJhcjIga2V5ID0gey5hcnIgPSB7MSwyfX07CisgICAgX19idWlsdGluX2Ns ZWFyX3BhZGRpbmcgKCZrZXkpOworCisgICAgQ0hFQ0tfVkFMVUUgKG1lbWNtcCAoJmJhciwgJmtl eSwgc2l6ZW9mIChrZXkpKSwgMCk7CisgIH0KKyAgeworICAgIHNjcmFtYmxlX3N0YWNrKCk7Cisg ICAgc3RydWN0IGJhcjIgKCpmbikgKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImZuX2Jhcl8xMjNzIik7CisgICAgc3RydWN0IGJhcjIgYmFyID0gZm4gKCk7CisgICAg c3RydWN0IGJhcjIga2V5ID0gey5hcnIgPSB7MSwyLDMsNCw1LDZ9IH07CisKKyAgICBDSEVDS19W QUxVRSAobWVtY21wICgmYmFyLmFyciwgJmtleS5hcnIsIHNpemVvZiAoa2V5LmFycikpLCAwKTsK KyAgfQorICB7CisgICAgc2NyYW1ibGVfc3RhY2sgKCk7CisgICAgLyogVGhpcyBpcyBhYml0IHNo YWR5LiBMZXRzIGp1c3QgcHJldGVuZCB0aGF0IGFycmF5IHJldHVybnMgw6AgbGEgRm9ydHJhbgor ICAgICAgIGlzIHRoZSBzYW1lIHRoaW5nIGFzIHJldHVybmluZyBhIHN0cnVjdCB3aXRoIGFuIGFy cmF5IGluIGl0IGluIEMuICovCisgICAgc3RydWN0IGludDUwYXJyICgqZm4pICh2b2lkKSA9Cisg ICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5faW50NTBhcnJfMTIzcyIp OworICAgIHN0cnVjdCBpbnQ1MGFyciBhbnMgPSBmbiAoKTsKKyAgICBpbnQga2V5WzUwXSA9IHsx LDIsMyw0LDUsNn07CisKKyAgICBDSEVDS19WQUxVRSAobWVtY21wIChhbnMuYXJyLCBrZXksIHNp emVvZiAoa2V5KSksIDApOworICB9CisgIHsKKyAgICBfQm9vbCAoKmZuKSAodm9pZCkgPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5fbGxpc3QiKTsKKyAgICBDSEVDS19WQUxV RSAoZm4gKCksIDEpOworICB9Cit9Ci0tIAoyLjM0LjEKCg== --_002_8c135550d44f43b9b80c2a3a50939128kthse_--