From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v6 10/29] libxc: remove dead HVM building code Date: Fri, 4 Sep 2015 14:08:49 +0200 Message-ID: <1441368548-43465-11-git-send-email-roger.pau@citrix.com> References: <1441368548-43465-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZXpoU-0005ah-IQ for xen-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:09:50 +0000 In-Reply-To: <1441368548-43465-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org UmVtb3ZlIHhjX2h2bV9idWlsZF94ODYuYyBhbmQgeGNfaHZtX2J1aWxkX2FybS5jIHNpbmNlIHhj X2h2bV9idWlsZCBpcyBub3QKbG9uZ2VyIHVzZWQgaW4gb3JkZXIgdG8gY3JlYXRlIEhWTSBndWVz dHMuCgpTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNv bT4KQWNrZWQtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+ClJldmlld2VkLWJ5OiBB bmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpDYzogSWFuIEphY2tzb24g PGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHN0ZWZh bm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tPgpDYzogSWFuIENhbXBiZWxsIDxpYW4uY2FtcGJl bGxAY2l0cml4LmNvbT4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQpDaGFu Z2VzIHNpbmNlIHY0OgogLSBBZGQgV2VpIExpdSBBY2tlZC1ieSBhbmQgQW5kcmV3IENvb3BlciBS ZXZpZXdlZC1ieS4KLS0tCiB0b29scy9saWJ4Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDIg LQogdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oICAgIHwgIDQ0IC0tLQogdG9vbHMvbGli eGMveGNfaHZtX2J1aWxkX2FybS5jICAgIHwgIDQ4IC0tLQogdG9vbHMvbGlieGMveGNfaHZtX2J1 aWxkX3g4Ni5jICAgIHwgODA4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiB0b29scy9saWJ4Yy94Z19wcml2YXRlLmMgICAgICAgICAgfCAgIDkgLQogdG9vbHMvcHl0aG9u L3hlbi9sb3dsZXZlbC94Yy94Yy5jIHwgIDgxIC0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgOTkyIGRl bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhjL3hjX2h2bV9idWlsZF9h cm0uYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhjL3hjX2h2bV9idWlsZF94ODYuYwoK ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL01ha2VmaWxlIGIvdG9vbHMvbGlieGMvTWFrZWZpbGUK aW5kZXggYmFhYWRkNi4uODE4ZjJlNCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMvTWFrZWZpbGUK KysrIGIvdG9vbHMvbGlieGMvTWFrZWZpbGUKQEAgLTkxLDkgKzkxLDcgQEAgR1VFU1RfU1JDUy15 ICAgICAgICAgICAgICAgICArPSB4Y19kb21fY29tcGF0X2xpbnV4LmMKIAogR1VFU1RfU1JDUy0k KENPTkZJR19YODYpICAgICArPSB4Y19kb21feDg2LmMKIEdVRVNUX1NSQ1MtJChDT05GSUdfWDg2 KSAgICAgKz0geGNfY3B1aWRfeDg2LmMKLUdVRVNUX1NSQ1MtJChDT05GSUdfWDg2KSAgICAgKz0g eGNfaHZtX2J1aWxkX3g4Ni5jCiBHVUVTVF9TUkNTLSQoQ09ORklHX0FSTSkgICAgICs9IHhjX2Rv bV9hcm0uYwotR1VFU1RfU1JDUy0kKENPTkZJR19BUk0pICAgICArPSB4Y19odm1fYnVpbGRfYXJt LmMKIAogaWZlcSAoJChDT05GSUdfTElCWENfTUlOSU9TKSx5KQogR1VFU1RfU1JDUy15ICAgICAg ICAgICAgICAgICArPSB4Y19kb21fZGVjb21wcmVzc191bnNhZmUuYwpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oIGIvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5ndWVz dC5oCmluZGV4IDFhMWExODUuLmVjNjdmYmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL2luY2x1 ZGUveGVuZ3Vlc3QuaAorKysgYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0LmgKQEAgLTIw NSw1MCArMjA1LDYgQEAgc3RydWN0IHhjX2h2bV9maXJtd2FyZV9tb2R1bGUgewogICAgIHVpbnQ2 NF90ICBndWVzdF9hZGRyX291dDsKIH07CiAKLXN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyB7Ci0g ICAgdWludDY0X3QgbWVtX3NpemU7ICAgICAgICAgICAvKiBNZW1vcnkgc2l6ZSBpbiBieXRlcy4g Ki8KLSAgICB1aW50NjRfdCBtZW1fdGFyZ2V0OyAgICAgICAgIC8qIE1lbW9yeSB0YXJnZXQgaW4g Ynl0ZXMuICovCi0gICAgdWludDY0X3QgbW1pb19zaXplOyAgICAgICAgICAvKiBTaXplIG9mIHRo ZSBNTUlPIGhvbGUgaW4gYnl0ZXMuICovCi0gICAgY29uc3QgY2hhciAqaW1hZ2VfZmlsZV9uYW1l OyAvKiBGaWxlIG5hbWUgb2YgdGhlIGltYWdlIHRvIGxvYWQuICovCi0KLSAgICAvKiBFeHRyYSBB Q1BJIHRhYmxlcyBwYXNzZWQgdG8gSFZNTE9BREVSICovCi0gICAgc3RydWN0IHhjX2h2bV9maXJt d2FyZV9tb2R1bGUgYWNwaV9tb2R1bGU7Ci0KLSAgICAvKiBFeHRyYSBTTUJJT1Mgc3RydWN0dXJl cyBwYXNzZWQgdG8gSFZNTE9BREVSICovCi0gICAgc3RydWN0IHhjX2h2bV9maXJtd2FyZV9tb2R1 bGUgc21iaW9zX21vZHVsZTsKLSAgICAvKiBXaGV0aGVyIHRvIHVzZSBjbGFpbSBoeXBlcmNhbGwg KDEgLSBlbmFibGUsIDAgLSBkaXNhYmxlKS4gKi8KLSAgICBpbnQgY2xhaW1fZW5hYmxlZDsKLQot ICAgIC8qIHZOVU1BIGluZm9ybWF0aW9uKi8KLSAgICB4ZW5fdm1lbXJhbmdlX3QgKnZtZW1yYW5n ZXM7Ci0gICAgdW5zaWduZWQgaW50IG5yX3ZtZW1yYW5nZXM7Ci0gICAgdW5zaWduZWQgaW50ICp2 bm9kZV90b19wbm9kZTsKLSAgICB1bnNpZ25lZCBpbnQgbnJfdm5vZGVzOwotCi0gICAgLyogT3V0 IHBhcmFtZXRlcnMgICovCi0gICAgdWludDY0X3QgbG93bWVtX2VuZDsKLSAgICB1aW50NjRfdCBo aWdobWVtX2VuZDsKLSAgICB1aW50NjRfdCBtbWlvX3N0YXJ0OwotfTsKLQotLyoqCi0gKiBCdWls ZCBhIEhWTSBkb21haW4uCi0gKiBAcGFybSB4Y2ggICAgICBsaWJ4YyBjb250ZXh0IGhhbmRsZS4K LSAqIEBwYXJtIGRvbWlkICAgIGRvbWFpbiBJRCBmb3IgdGhlIG5ldyBkb21haW4uCi0gKiBAcGFy bSBodm1fYXJncyBwYXJhbWV0ZXJzIGZvciB0aGUgbmV3IGRvbWFpbi4KLSAqCi0gKiBUaGUgbWVt b3J5IHNpemUgYW5kIGltYWdlIGZpbGUgcGFyYW1ldGVycyBhcmUgcmVxdWlyZWQsIHRoZSByZXN0 Ci0gKiBhcmUgb3B0aW9uYWwuCi0gKi8KLWludCB4Y19odm1fYnVpbGQoeGNfaW50ZXJmYWNlICp4 Y2gsIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxk X2FyZ3MgKmh2bV9hcmdzKTsKLQotaW50IHhjX2h2bV9idWlsZF90YXJnZXRfbWVtKHhjX2ludGVy ZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZW1zaXplLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqaW1hZ2VfbmFtZSk7Ci0KIC8qCiAgKiBTZXRzICpsb2NrZmQgdG8gLTEuCiAgKiBI YXMgZGVhbGxvY2F0ZWQgZXZlcnl0aGluZyBldmVuIG9uIGVycm9yLgpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGMveGNfaHZtX2J1aWxkX2FybS5jIGIvdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX2Fy bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGY3YzQ1Li4wMDAwMDAwCi0tLSBh L3Rvb2xzL2xpYnhjL3hjX2h2bV9idWlsZF9hcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICsw LDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Ci0gKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKgotICogQ29weXJpZ2h0IChj KSAyMDExLCBDaXRyaXggU3lzdGVtcwotICovCi0KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2lu Y2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8eGVuY3RybC5oPgotI2luY2x1ZGUgPHhlbmd1ZXN0 Lmg+Ci0KLWludCB4Y19odm1fYnVpbGQoeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWlk LAotICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmh2bV9hcmdzKQot ewotICAgIGVycm5vID0gRU5PU1lTOwotICAgIHJldHVybiAtMTsKLX0KLQotaW50IHhjX2h2bV9i dWlsZF90YXJnZXRfbWVtKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVt c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbWFnZV9uYW1lKQotewotICAgIGVycm5vID0g RU5PU1lTOwotICAgIHJldHVybiAtMTsKLX0KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAq IG1vZGU6IEMKLSAqIGMtZmlsZS1zdHlsZTogIkJTRCIKLSAqIGMtYmFzaWMtb2Zmc2V0OiA0Ci0g KiB0YWItd2lkdGg6IDQKLSAqIGluZGVudC10YWJzLW1vZGU6IG5pbAotICogRW5kOgotICovCmRp ZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19odm1fYnVpbGRfeDg2LmMgYi90b29scy9saWJ4Yy94 Y19odm1fYnVpbGRfeDg2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMzczNmIu LjAwMDAwMDAKLS0tIGEvdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5jCisrKyAvZGV2L251 bGwKQEAgLTEsODA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHhjX2h2bV9i dWlsZC5jCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8 aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp bmNsdWRlIDx6bGliLmg+Ci0KLSNpbmNsdWRlICJ4Z19wcml2YXRlLmgiCi0jaW5jbHVkZSAieGNf cHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8eGVuL2ZvcmVpZ24veDg2XzMyLmg+Ci0jaW5jbHVkZSA8 eGVuL2ZvcmVpZ24veDg2XzY0Lmg+Ci0jaW5jbHVkZSA8eGVuL2h2bS9odm1faW5mb190YWJsZS5o PgotI2luY2x1ZGUgPHhlbi9odm0vcGFyYW1zLmg+Ci0jaW5jbHVkZSA8eGVuL2h2bS9lODIwLmg+ Ci0KLSNpbmNsdWRlIDx4ZW4vbGliZWxmL2xpYmVsZi5oPgotCi0jZGVmaW5lIFNVUEVSUEFHRV8y TUJfU0hJRlQgICA5Ci0jZGVmaW5lIFNVUEVSUEFHRV8yTUJfTlJfUEZOUyAoMVVMIDw8IFNVUEVS UEFHRV8yTUJfU0hJRlQpCi0jZGVmaW5lIFNVUEVSUEFHRV8xR0JfU0hJRlQgICAxOAotI2RlZmlu ZSBTVVBFUlBBR0VfMUdCX05SX1BGTlMgKDFVTCA8PCBTVVBFUlBBR0VfMUdCX1NISUZUKQotCi0j ZGVmaW5lIFNQRUNJQUxQQUdFX1BBR0lORyAgIDAKLSNkZWZpbmUgU1BFQ0lBTFBBR0VfQUNDRVNT ICAgMQotI2RlZmluZSBTUEVDSUFMUEFHRV9TSEFSSU5HICAyCi0jZGVmaW5lIFNQRUNJQUxQQUdF X0JVRklPUkVRIDMKLSNkZWZpbmUgU1BFQ0lBTFBBR0VfWEVOU1RPUkUgNAotI2RlZmluZSBTUEVD SUFMUEFHRV9JT1JFUSAgICA1Ci0jZGVmaW5lIFNQRUNJQUxQQUdFX0lERU5UX1BUIDYKLSNkZWZp bmUgU1BFQ0lBTFBBR0VfQ09OU09MRSAgNwotI2RlZmluZSBOUl9TUEVDSUFMX1BBR0VTICAgICA4 Ci0jZGVmaW5lIHNwZWNpYWxfcGZuKHgpICgweGZmMDAwdSAtIE5SX1NQRUNJQUxfUEFHRVMgKyAo eCkpCi0KLSNkZWZpbmUgTlJfSU9SRVFfU0VSVkVSX1BBR0VTIDgKLSNkZWZpbmUgaW9yZXFfc2Vy dmVyX3Bmbih4KSAoc3BlY2lhbF9wZm4oMCkgLSBOUl9JT1JFUV9TRVJWRVJfUEFHRVMgKyAoeCkp Ci0KLSNkZWZpbmUgVkdBX0hPTEVfU0laRSAoMHgyMCkKLQotc3RhdGljIGludCBtb2R1bGVzX2lu aXQoc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdzLAotICAgICAgICAgICAgICAgICAgICAg ICAgdWludDY0X3QgdmVuZCwgc3RydWN0IGVsZl9iaW5hcnkgKmVsZiwKLSAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ2NF90ICptc3RhcnRfb3V0LCB1aW50NjRfdCAqbWVuZF9vdXQpCi17Ci0j ZGVmaW5lIE1PRFVMRV9BTElHTiAxVUwgPDwgNwotI2RlZmluZSBNQl9BTElHTiAgICAgMVVMIDw8 IDIwCi0jZGVmaW5lIE1LQUxJR04oeCwgYSkgKCgodWludDY0X3QpKHgpICsgKGEpIC0gMSkgJiB+ KHVpbnQ2NF90KSgoYSkgLSAxKSkKLSAgICB1aW50NjRfdCB0b3RhbF9sZW4gPSAwLCBvZmZzZXQx ID0gMDsKLQotICAgIGlmICggKGFyZ3MtPmFjcGlfbW9kdWxlLmxlbmd0aCA9PSAwKSYmKGFyZ3Mt PnNtYmlvc19tb2R1bGUubGVuZ3RoID09IDApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv KiBGaW5kIHRoZSB0b3RhbCBsZW5ndGggZm9yIHRoZSBmaXJtd2FyZSBtb2R1bGVzIHdpdGggYSBy ZWFzb25hYmxlIGxhcmdlCi0gICAgICogYWxpZ25tZW50IHNpemUgdG8gYWxpZ24gZWFjaCB0aGUg bW9kdWxlcy4KLSAgICAgKi8KLSAgICB0b3RhbF9sZW4gPSBNS0FMSUdOKGFyZ3MtPmFjcGlfbW9k dWxlLmxlbmd0aCwgTU9EVUxFX0FMSUdOKTsKLSAgICBvZmZzZXQxID0gdG90YWxfbGVuOwotICAg IHRvdGFsX2xlbiArPSBNS0FMSUdOKGFyZ3MtPnNtYmlvc19tb2R1bGUubGVuZ3RoLCBNT0RVTEVf QUxJR04pOwotCi0gICAgLyogV2FudCB0byBwbGFjZSB0aGUgbW9kdWxlcyAxTWIrY2hhbmdlIGJl aGluZCB0aGUgbG9hZGVyIGltYWdlLiAqLwotICAgICptc3RhcnRfb3V0ID0gTUtBTElHTihlbGYt PnBlbmQsIE1CX0FMSUdOKSArIChNQl9BTElHTik7Ci0gICAgKm1lbmRfb3V0ID0gKm1zdGFydF9v dXQgKyB0b3RhbF9sZW47Ci0KLSAgICBpZiAoICptZW5kX291dCA+IHZlbmQgKSAgICAKLSAgICAg ICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKCBhcmdzLT5hY3BpX21vZHVsZS5sZW5ndGggIT0gMCAp Ci0gICAgICAgIGFyZ3MtPmFjcGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0ID0gKm1zdGFydF9vdXQ7 Ci0gICAgaWYgKCBhcmdzLT5zbWJpb3NfbW9kdWxlLmxlbmd0aCAhPSAwICkKLSAgICAgICAgYXJn cy0+c21iaW9zX21vZHVsZS5ndWVzdF9hZGRyX291dCA9ICptc3RhcnRfb3V0ICsgb2Zmc2V0MTsK LQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBidWlsZF9odm1faW5mbyh2b2lkICpo dm1faW5mb19wYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9i dWlsZF9hcmdzICphcmdzKQotewotICAgIHN0cnVjdCBodm1faW5mb190YWJsZSAqaHZtX2luZm8g PSAoc3RydWN0IGh2bV9pbmZvX3RhYmxlICopCi0gICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKilo dm1faW5mb19wYWdlKSArIEhWTV9JTkZPX09GRlNFVCk7Ci0gICAgdWludDhfdCBzdW07Ci0gICAg aW50IGk7Ci0KLSAgICBtZW1zZXQoaHZtX2luZm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKLQotICAg IC8qIEZpbGwgaW4gdGhlIGhlYWRlci4gKi8KLSAgICBtZW1jcHkoaHZtX2luZm8tPnNpZ25hdHVy ZSwgIkhWTSBJTkZPIiwgc2l6ZW9mKGh2bV9pbmZvLT5zaWduYXR1cmUpKTsKLSAgICBodm1faW5m by0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBodm1faW5mb190YWJsZSk7Ci0KLSAgICAvKiBTZW5z aWJsZSBkZWZhdWx0czogdGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNhbGxlci4gKi8K LSAgICBodm1faW5mby0+YXBpY19tb2RlID0gMTsKLSAgICBodm1faW5mby0+bnJfdmNwdXMgPSAx OwotICAgIG1lbXNldChodm1faW5mby0+dmNwdV9vbmxpbmUsIDB4ZmYsIHNpemVvZihodm1faW5m by0+dmNwdV9vbmxpbmUpKTsKLQotICAgIC8qIE1lbW9yeSBwYXJhbWV0ZXJzLiAqLwotICAgIGh2 bV9pbmZvLT5sb3dfbWVtX3BnZW5kID0gYXJncy0+bG93bWVtX2VuZCA+PiBQQUdFX1NISUZUOwot ICAgIGh2bV9pbmZvLT5oaWdoX21lbV9wZ2VuZCA9IGFyZ3MtPmhpZ2htZW1fZW5kID4+IFBBR0Vf U0hJRlQ7Ci0gICAgaHZtX2luZm8tPnJlc2VydmVkX21lbV9wZ3N0YXJ0ID0gaW9yZXFfc2VydmVy X3BmbigwKTsKLQotICAgIC8qIEZpbmlzaCB3aXRoIHRoZSBjaGVja3N1bS4gKi8KLSAgICBmb3Ig KCBpID0gMCwgc3VtID0gMDsgaSA8IGh2bV9pbmZvLT5sZW5ndGg7IGkrKyApCi0gICAgICAgIHN1 bSArPSAoKHVpbnQ4X3QgKilodm1faW5mbylbaV07Ci0gICAgaHZtX2luZm8tPmNoZWNrc3VtID0g LXN1bTsKLX0KLQotc3RhdGljIGludCBsb2FkZWxmaW1hZ2UoeGNfaW50ZXJmYWNlICp4Y2gsIHN0 cnVjdCBlbGZfYmluYXJ5ICplbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBk b20sIHVuc2lnbmVkIGxvbmcgKnBhcnJheSkKLXsKLSAgICBwcml2Y21kX21tYXBfZW50cnlfdCAq ZW50cmllcyA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm5fc3RhcnQgPSBlbGYtPnBzdGFy dCA+PiBQQUdFX1NISUZUOwotICAgIHVuc2lnbmVkIGxvbmcgcGZuX2VuZCA9IChlbGYtPnBlbmQg KyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotICAgIHNpemVfdCBwYWdlcyA9IHBmbl9l bmQgLSBwZm5fc3RhcnQ7Ci0gICAgaW50IGksIHJjID0gLTE7Ci0KLSAgICAvKiBNYXAgYWRkcmVz cyBzcGFjZSBmb3IgaW5pdGlhbCBlbGYgaW1hZ2UuICovCi0gICAgZW50cmllcyA9IGNhbGxvYyhw YWdlcywgc2l6ZW9mKHByaXZjbWRfbW1hcF9lbnRyeV90KSk7Ci0gICAgaWYgKCBlbnRyaWVzID09 IE5VTEwgKQotICAgICAgICBnb3RvIGVycjsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgcGFnZXM7 IGkrKyApCi0gICAgICAgIGVudHJpZXNbaV0ubWZuID0gcGFycmF5WyhlbGYtPnBzdGFydCA+PiBQ QUdFX1NISUZUKSArIGldOwotCi0gICAgZWxmLT5kZXN0X2Jhc2UgPSB4Y19tYXBfZm9yZWlnbl9y YW5nZXMoCi0gICAgICAgIHhjaCwgZG9tLCBwYWdlcyA8PCBQQUdFX1NISUZULCBQUk9UX1JFQUQg fCBQUk9UX1dSSVRFLCAxIDw8IFBBR0VfU0hJRlQsCi0gICAgICAgIGVudHJpZXMsIHBhZ2VzKTsK LSAgICBpZiAoIGVsZi0+ZGVzdF9iYXNlID09IE5VTEwgKQotICAgICAgICBnb3RvIGVycjsKLSAg ICBlbGYtPmRlc3Rfc2l6ZSA9IHBhZ2VzICogUEFHRV9TSVpFOwotCi0gICAgRUxGX0FEVkFOQ0Vf REVTVChlbGYsIGVsZi0+cHN0YXJ0ICYgKFBBR0VfU0laRSAtIDEpKTsKLQotICAgIC8qIExvYWQg dGhlIGluaXRpYWwgZWxmIGltYWdlLiAqLwotICAgIHJjID0gZWxmX2xvYWRfYmluYXJ5KGVsZik7 Ci0gICAgaWYgKCByYyA8IDAgKQotICAgICAgICBQRVJST1IoIkZhaWxlZCB0byBsb2FkIGVsZiBi aW5hcnlcbiIpOwotCi0gICAgbXVubWFwKGVsZi0+ZGVzdF9iYXNlLCBwYWdlcyA8PCBQQUdFX1NI SUZUKTsKLSAgICBlbGYtPmRlc3RfYmFzZSA9IE5VTEw7Ci0gICAgZWxmLT5kZXN0X3NpemUgPSAw OwotCi0gZXJyOgotICAgIGZyZWUoZW50cmllcyk7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgbG9hZG1vZHVsZXMoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyAqYXJncywKLSAgICAgICAgICAgICAgICAg ICAgICAgdWludDY0X3QgbXN0YXJ0LCB1aW50NjRfdCBtZW5kLAotICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBkb20sIHVuc2lnbmVkIGxvbmcgKnBhcnJheSkKLXsKLSAgICBwcml2Y21k X21tYXBfZW50cnlfdCAqZW50cmllcyA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm5fc3Rh cnQ7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm5fZW5kOwotICAgIHNpemVfdCBwYWdlczsKLSAgICB1 aW50MzJfdCBpOwotICAgIHVpbnQ4X3QgKmRlc3Q7Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBp ZiAoIChtc3RhcnQgPT0gMCl8fChtZW5kID09IDApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg ICBwZm5fc3RhcnQgPSAodW5zaWduZWQgbG9uZykobXN0YXJ0ID4+IFBBR0VfU0hJRlQpOwotICAg IHBmbl9lbmQgPSAodW5zaWduZWQgbG9uZykoKG1lbmQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdF X1NISUZUKTsKLSAgICBwYWdlcyA9IHBmbl9lbmQgLSBwZm5fc3RhcnQ7Ci0KLSAgICAvKiBNYXAg YWRkcmVzcyBzcGFjZSBmb3IgbW9kdWxlIGxpc3QuICovCi0gICAgZW50cmllcyA9IGNhbGxvYyhw YWdlcywgc2l6ZW9mKHByaXZjbWRfbW1hcF9lbnRyeV90KSk7Ci0gICAgaWYgKCBlbnRyaWVzID09 IE5VTEwgKQotICAgICAgICBnb3RvIGVycm9yX291dDsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwg cGFnZXM7IGkrKyApCi0gICAgICAgIGVudHJpZXNbaV0ubWZuID0gcGFycmF5Wyhtc3RhcnQgPj4g UEFHRV9TSElGVCkgKyBpXTsKLQotICAgIGRlc3QgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZXMoCi0g ICAgICAgIHhjaCwgZG9tLCBwYWdlcyA8PCBQQUdFX1NISUZULCBQUk9UX1JFQUQgfCBQUk9UX1dS SVRFLCAxIDw8IFBBR0VfU0hJRlQsCi0gICAgICAgIGVudHJpZXMsIHBhZ2VzKTsKLSAgICBpZiAo IGRlc3QgPT0gTlVMTCApCi0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotCi0gICAgLyogWmVybyB0 aGUgcmFuZ2Ugc28gcGFkZGluZyBpcyBjbGVhciBiZXR3ZWVuIG1vZHVsZXMgKi8KLSAgICBtZW1z ZXQoZGVzdCwgMCwgcGFnZXMgPDwgUEFHRV9TSElGVCk7Ci0KLSAgICAvKiBMb2FkIG1vZHVsZXMg aW50byByYW5nZSAqLyAgICAKLSAgICBpZiAoIGFyZ3MtPmFjcGlfbW9kdWxlLmxlbmd0aCAhPSAw ICkKLSAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0LAotICAgICAgICAgICAgICAgYXJncy0+YWNw aV9tb2R1bGUuZGF0YSwKLSAgICAgICAgICAgICAgIGFyZ3MtPmFjcGlfbW9kdWxlLmxlbmd0aCk7 Ci0gICAgfQotICAgIGlmICggYXJncy0+c21iaW9zX21vZHVsZS5sZW5ndGggIT0gMCApCi0gICAg ewotICAgICAgICBtZW1jcHkoZGVzdCArIChhcmdzLT5zbWJpb3NfbW9kdWxlLmd1ZXN0X2FkZHJf b3V0IC0gbXN0YXJ0KSwKLSAgICAgICAgICAgICAgIGFyZ3MtPnNtYmlvc19tb2R1bGUuZGF0YSwK LSAgICAgICAgICAgICAgIGFyZ3MtPnNtYmlvc19tb2R1bGUubGVuZ3RoKTsKLSAgICB9Ci0KLSAg ICBtdW5tYXAoZGVzdCwgcGFnZXMgPDwgUEFHRV9TSElGVCk7Ci0gICAgcmMgPSAwOwotCi0gZXJy b3Jfb3V0OgotICAgIGZyZWUoZW50cmllcyk7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8qCi0g KiBDaGVjayB3aGV0aGVyIHRoZXJlIGV4aXN0cyBtbWlvIGhvbGUgaW4gdGhlIHNwZWNpZmllZCBt ZW1vcnkgcmFuZ2UuCi0gKiBSZXR1cm5zIDEgaWYgZXhpc3RzLCBlbHNlIHJldHVybnMgMC4KLSAq Lwotc3RhdGljIGludCBjaGVja19tbWlvX2hvbGUodWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IG1l bXNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtbWlvX3N0YXJ0LCB1 aW50NjRfdCBtbWlvX3NpemUpCi17Ci0gICAgaWYgKCBzdGFydCArIG1lbXNpemUgPD0gbW1pb19z dGFydCB8fCBzdGFydCA+PSBtbWlvX3N0YXJ0ICsgbW1pb19zaXplICkKLSAgICAgICAgcmV0dXJu IDA7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCB4Y19odm1f cG9wdWxhdGVfbWVtb3J5KHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBkb20sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAqcGFnZV9hcnJh eSkKLXsKLSAgICB1bnNpZ25lZCBsb25nIGksIHZtZW1pZCwgbnJfcGFnZXMgPSBhcmdzLT5tZW1f c2l6ZSA+PiBQQUdFX1NISUZUOwotICAgIHVuc2lnbmVkIGxvbmcgcDJtX3NpemU7Ci0gICAgdW5z aWduZWQgbG9uZyB0YXJnZXRfcGFnZXMgPSBhcmdzLT5tZW1fdGFyZ2V0ID4+IFBBR0VfU0hJRlQ7 Ci0gICAgdW5zaWduZWQgbG9uZyBjdXJfcGFnZXMsIGN1cl9wZm47Ci0gICAgaW50IHJjOwotICAg IHhlbl9jYXBhYmlsaXRpZXNfaW5mb190IGNhcHM7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGF0X25v cm1hbF9wYWdlcyA9IDAsIHN0YXRfMm1iX3BhZ2VzID0gMCwgCi0gICAgICAgIHN0YXRfMWdiX3Bh Z2VzID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MgPSAwOwotICAgIGludCBjbGFpbV9l bmFibGVkID0gYXJncy0+Y2xhaW1fZW5hYmxlZDsKLSAgICB1aW50NjRfdCB0b3RhbF9wYWdlczsK LSAgICB4ZW5fdm1lbXJhbmdlX3QgZHVtbXlfdm1lbXJhbmdlWzJdOwotICAgIHVuc2lnbmVkIGlu dCBkdW1teV92bm9kZV90b19wbm9kZVsxXTsKLSAgICB4ZW5fdm1lbXJhbmdlX3QgKnZtZW1yYW5n ZXM7Ci0gICAgdW5zaWduZWQgaW50ICp2bm9kZV90b19wbm9kZTsKLSAgICB1bnNpZ25lZCBpbnQg bnJfdm1lbXJhbmdlcywgbnJfdm5vZGVzOwotCi0gICAgaWYgKCBucl9wYWdlcyA+IHRhcmdldF9w YWdlcyApCi0gICAgICAgIG1lbWZsYWdzIHw9IFhFTk1FTUZfcG9wdWxhdGVfb25fZGVtYW5kOwot Ci0gICAgaWYgKCBhcmdzLT5ucl92bWVtcmFuZ2VzID09IDAgKQotICAgIHsKLSAgICAgICAgLyog QnVpbGQgZHVtbXkgdm5vZGUgaW5mb3JtYXRpb24KLSAgICAgICAgICoKLSAgICAgICAgICogR3Vl c3QgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBsYXlvdXQ6Ci0gICAgICAgICAqIFswLCBob2xlX3N0 YXJ0KSBbaG9sZV9zdGFydCwgNEcpIFs0RywgaGlnaG1lbV9lbmQpCi0gICAgICAgICAqCi0gICAg ICAgICAqIE9mIGNvdXJzZSBpZiB0aGVyZSBpcyBubyBoaWdoIG1lbW9yeSwgdGhlIHNlY29uZCB2 bWVtcmFuZ2UKLSAgICAgICAgICogaGFzIG5vIGVmZmVjdCBvbiB0aGUgYWN0dWFsIHJlc3VsdC4K LSAgICAgICAgICovCi0KLSAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzBdLnN0YXJ0ID0gMDsKLSAg ICAgICAgZHVtbXlfdm1lbXJhbmdlWzBdLmVuZCAgID0gYXJncy0+bG93bWVtX2VuZDsKLSAgICAg ICAgZHVtbXlfdm1lbXJhbmdlWzBdLmZsYWdzID0gMDsKLSAgICAgICAgZHVtbXlfdm1lbXJhbmdl WzBdLm5pZCAgID0gMDsKLSAgICAgICAgbnJfdm1lbXJhbmdlcyA9IDE7Ci0KLSAgICAgICAgaWYg KCBhcmdzLT5oaWdobWVtX2VuZCA+ICgxVUxMIDw8IDMyKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIGR1bW15X3ZtZW1yYW5nZVsxXS5zdGFydCA9IDFVTEwgPDwgMzI7Ci0gICAgICAgICAgICBk dW1teV92bWVtcmFuZ2VbMV0uZW5kICAgPSBhcmdzLT5oaWdobWVtX2VuZDsKLSAgICAgICAgICAg IGR1bW15X3ZtZW1yYW5nZVsxXS5mbGFncyA9IDA7Ci0gICAgICAgICAgICBkdW1teV92bWVtcmFu Z2VbMV0ubmlkICAgPSAwOwotCi0gICAgICAgICAgICBucl92bWVtcmFuZ2VzKys7Ci0gICAgICAg IH0KLQotICAgICAgICBkdW1teV92bm9kZV90b19wbm9kZVswXSA9IFhDX05VTUFfTk9fTk9ERTsK LSAgICAgICAgbnJfdm5vZGVzID0gMTsKLSAgICAgICAgdm1lbXJhbmdlcyA9IGR1bW15X3ZtZW1y YW5nZTsKLSAgICAgICAgdm5vZGVfdG9fcG5vZGUgPSBkdW1teV92bm9kZV90b19wbm9kZTsKLSAg ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCBucl9wYWdlcyA+IHRhcmdldF9wYWdl cyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBFUlJPUigiQ2Fubm90IGVuYWJsZSB2TlVNQSBh bmQgUG9EIGF0IHRoZSBzYW1lIHRpbWUiKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0Owot ICAgICAgICB9Ci0KLSAgICAgICAgbnJfdm1lbXJhbmdlcyA9IGFyZ3MtPm5yX3ZtZW1yYW5nZXM7 Ci0gICAgICAgIG5yX3Zub2RlcyA9IGFyZ3MtPm5yX3Zub2RlczsKLSAgICAgICAgdm1lbXJhbmdl cyA9IGFyZ3MtPnZtZW1yYW5nZXM7Ci0gICAgICAgIHZub2RlX3RvX3Bub2RlID0gYXJncy0+dm5v ZGVfdG9fcG5vZGU7Ci0gICAgfQotCi0gICAgdG90YWxfcGFnZXMgPSAwOwotICAgIHAybV9zaXpl ID0gMDsKLSAgICBmb3IgKCBpID0gMDsgaSA8IG5yX3ZtZW1yYW5nZXM7IGkrKyApCi0gICAgewot ICAgICAgICB0b3RhbF9wYWdlcyArPSAoKHZtZW1yYW5nZXNbaV0uZW5kIC0gdm1lbXJhbmdlc1tp XS5zdGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgID4+IFBBR0VfU0hJRlQpOwotICAgICAg ICBwMm1fc2l6ZSA9IHAybV9zaXplID4gKHZtZW1yYW5nZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQp ID8KLSAgICAgICAgICAgIHAybV9zaXplIDogKHZtZW1yYW5nZXNbaV0uZW5kID4+IFBBR0VfU0hJ RlQpOwotICAgIH0KLQotICAgIGlmICggdG90YWxfcGFnZXMgIT0gKGFyZ3MtPm1lbV9zaXplID4+ IFBBR0VfU0hJRlQpICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigidk5VTUEgbWVtb3J5IHBhZ2Vz IG1pc21hdGNoICgweCUiUFJJeDY0IiAhPSAweCUiUFJJeDY0IikiLAotICAgICAgICAgICAgICAg dG90YWxfcGFnZXMsIGFyZ3MtPm1lbV9zaXplID4+IFBBR0VfU0hJRlQpOwotICAgICAgICBnb3Rv IGVycm9yX291dDsKLSAgICB9Ci0KLSAgICBpZiAoIHhjX3ZlcnNpb24oeGNoLCBYRU5WRVJfY2Fw YWJpbGl0aWVzLCAmY2FwcykgIT0gMCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5v dCBnZXQgWGVuIGNhcGFiaWxpdGllcyIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9 Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IHAybV9zaXplOyBpKysgKQotICAgICAgICBwYWdlX2Fy cmF5W2ldID0gKCh4ZW5fcGZuX3QpLTEpOwotICAgIGZvciAoIHZtZW1pZCA9IDA7IHZtZW1pZCA8 IG5yX3ZtZW1yYW5nZXM7IHZtZW1pZCsrICkKLSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IHBmbjsK LQotICAgICAgICBmb3IgKCBwZm4gPSB2bWVtcmFuZ2VzW3ZtZW1pZF0uc3RhcnQgPj4gUEFHRV9T SElGVDsKLSAgICAgICAgICAgICAgcGZuIDwgdm1lbXJhbmdlc1t2bWVtaWRdLmVuZCA+PiBQQUdF X1NISUZUOwotICAgICAgICAgICAgICBwZm4rKyApCi0gICAgICAgICAgICBwYWdlX2FycmF5W3Bm bl0gPSBwZm47Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBUcnkgdG8gY2xhaW0gcGFnZXMgZm9y IGVhcmx5IHdhcm5pbmcgb2YgaW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUuCi0gICAgICog VGhpcyBzaG91bGQgZ28gYmVmb3JlIHhjX2RvbWFpbl9zZXRfcG9kX3RhcmdldCwgYmVjdWFzZSB0 aGF0IGZ1bmN0aW9uCi0gICAgICogYWN0dWFsbHkgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIGd1 ZXN0LiBDbGFpbWluZyBhZnRlciBtZW1vcnkgaGFzIGJlZW4KLSAgICAgKiBhbGxvY2F0ZWQgaXMg cG9pbnRsZXNzLgotICAgICAqLwotICAgIGlmICggY2xhaW1fZW5hYmxlZCApIHsKLSAgICAgICAg cmMgPSB4Y19kb21haW5fY2xhaW1fcGFnZXMoeGNoLCBkb20sIHRhcmdldF9wYWdlcyAtIFZHQV9I T0xFX1NJWkUpOwotICAgICAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBQRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIEhWTSBndWVzdCBhcyB3ZSBj YW5ub3QgY2xhaW0gbWVtb3J5ISIpOwotICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAg ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIG1lbWZsYWdzICYgWEVOTUVNRl9wb3B1bGF0ZV9vbl9k ZW1hbmQgKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogU3VidHJhY3QgVkdBX0hPTEVf U0laRSBmcm9tIHRhcmdldF9wYWdlcyBmb3IgdGhlIFZHQQotICAgICAgICAgKiAiaG9sZSIuICBY ZW4gd2lsbCBhZGp1c3QgdGhlIFBvRCBjYWNoZSBzaXplIHNvIHRoYXQgZG9tYWluCi0gICAgICAg ICAqIHRvdF9wYWdlcyB3aWxsIGJlIHRhcmdldF9wYWdlcyAtIFZHQV9IT0xFX1NJWkUgYWZ0ZXIK LSAgICAgICAgICogdGhpcyBjYWxsLgotICAgICAgICAgKi8KLSAgICAgICAgcmMgPSB4Y19kb21h aW5fc2V0X3BvZF90YXJnZXQoeGNoLCBkb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRhcmdldF9wYWdlcyAtIFZHQV9IT0xFX1NJWkUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgICBpZiAoIHJj ICE9IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBzZXQgUG9E IHRhcmdldCBmb3IgSFZNIGd1ZXN0LlxuIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yX291dDsK LSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogQWxsb2NhdGUgbWVtb3J5IGZvciBI Vk0gZ3Vlc3QsIHNraXBwaW5nIFZHQSBob2xlIDB4QTAwMDAtMHhDMDAwMC4KLSAgICAgKgotICAg ICAqIFdlIGF0dGVtcHQgdG8gYWxsb2NhdGUgMUdCIHBhZ2VzIGlmIHBvc3NpYmxlLiBJdCBmYWxs cyBiYWNrIG9uIDJNQgotICAgICAqIHBhZ2VzIGlmIDFHQiBhbGxvY2F0aW9uIGZhaWxzLiA0S0Ig cGFnZXMgd2lsbCBiZSB1c2VkIGV2ZW50dWFsbHkgaWYKLSAgICAgKiBib3RoIGZhaWwuCi0gICAg ICogCi0gICAgICogVW5kZXIgMk1CIG1vZGUsIHdlIGFsbG9jYXRlIHBhZ2VzIGluIGJhdGNoZXMg b2Ygbm8gbW9yZSB0aGFuIDhNQiB0byAKLSAgICAgKiBlbnN1cmUgdGhhdCB3ZSBjYW4gYmUgcHJl ZW1wdGVkIGFuZCBoZW5jZSBkb20wIHJlbWFpbnMgcmVzcG9uc2l2ZS4KLSAgICAgKi8KLSAgICBy YyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0KAotICAgICAgICB4Y2gsIGRvbSwg MHhhMCwgMCwgbWVtZmxhZ3MsICZwYWdlX2FycmF5WzB4MDBdKTsKLQotICAgIHN0YXRfbm9ybWFs X3BhZ2VzID0gMDsKLSAgICBmb3IgKCB2bWVtaWQgPSAwOyB2bWVtaWQgPCBucl92bWVtcmFuZ2Vz OyB2bWVtaWQrKyApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgbmV3X21lbWZsYWdzID0g bWVtZmxhZ3M7Ci0gICAgICAgIHVpbnQ2NF90IGVuZF9wYWdlczsKLSAgICAgICAgdW5zaWduZWQg aW50IHZub2RlID0gdm1lbXJhbmdlc1t2bWVtaWRdLm5pZDsKLSAgICAgICAgdW5zaWduZWQgaW50 IHBub2RlID0gdm5vZGVfdG9fcG5vZGVbdm5vZGVdOwotCi0gICAgICAgIGlmICggcG5vZGUgIT0g WENfTlVNQV9OT19OT0RFICkKLSAgICAgICAgICAgIG5ld19tZW1mbGFncyB8PSBYRU5NRU1GX2V4 YWN0X25vZGUocG5vZGUpOwotCi0gICAgICAgIGVuZF9wYWdlcyA9IHZtZW1yYW5nZXNbdm1lbWlk XS5lbmQgPj4gUEFHRV9TSElGVDsKLSAgICAgICAgLyoKLSAgICAgICAgICogQ29uc2lkZXIgdmdh IGhvbGUgYmVsb25ncyB0byB0aGUgdm1lbXJhbmdlIHRoYXQgY292ZXJzCi0gICAgICAgICAqIDB4 QTAwMDAtMHhDMDAwMC4gTm90ZSB0aGF0IDB4MDAwMDAtMHhBMDAwMCBpcyBwb3B1bGF0ZWQganVz dAotICAgICAgICAgKiBiZWZvcmUgdGhpcyBsb29wLgotICAgICAgICAgKi8KLSAgICAgICAgaWYg KCB2bWVtcmFuZ2VzW3ZtZW1pZF0uc3RhcnQgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAg IGN1cl9wYWdlcyA9IDB4YzA7Ci0gICAgICAgICAgICBzdGF0X25vcm1hbF9wYWdlcyArPSAweGMw OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cl9wYWdlcyA9IHZtZW1y YW5nZXNbdm1lbWlkXS5zdGFydCA+PiBQQUdFX1NISUZUOwotCi0gICAgICAgIHdoaWxlICggKHJj ID09IDApICYmIChlbmRfcGFnZXMgPiBjdXJfcGFnZXMpICkKLSAgICAgICAgewotICAgICAgICAg ICAgLyogQ2xpcCBjb3VudCB0byBtYXhpbXVtIDFHQiBleHRlbnQuICovCi0gICAgICAgICAgICB1 bnNpZ25lZCBsb25nIGNvdW50ID0gZW5kX3BhZ2VzIC0gY3VyX3BhZ2VzOwotICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBtYXhfcGFnZXMgPSBTVVBFUlBBR0VfMUdCX05SX1BGTlM7Ci0KLSAgICAg ICAgICAgIGlmICggY291bnQgPiBtYXhfcGFnZXMgKQotICAgICAgICAgICAgICAgIGNvdW50ID0g bWF4X3BhZ2VzOwotCi0gICAgICAgICAgICBjdXJfcGZuID0gcGFnZV9hcnJheVtjdXJfcGFnZXNd OwotCi0gICAgICAgICAgICAvKiBUYWtlIGNhcmUgdGhlIGNvcm5lciBjYXNlcyBvZiBzdXBlciBw YWdlIHRhaWxzICovCi0gICAgICAgICAgICBpZiAoICgoY3VyX3BmbiAmIChTVVBFUlBBR0VfMUdC X05SX1BGTlMtMSkpICE9IDApICYmCi0gICAgICAgICAgICAgICAgIChjb3VudCA+ICgtY3VyX3Bm biAmIChTVVBFUlBBR0VfMUdCX05SX1BGTlMtMSkpKSApCi0gICAgICAgICAgICAgICAgY291bnQg PSAtY3VyX3BmbiAmIChTVVBFUlBBR0VfMUdCX05SX1BGTlMtMSk7Ci0gICAgICAgICAgICBlbHNl IGlmICggKChjb3VudCAmIChTVVBFUlBBR0VfMUdCX05SX1BGTlMtMSkpICE9IDApICYmCi0gICAg ICAgICAgICAgICAgICAgICAgKGNvdW50ID4gU1VQRVJQQUdFXzFHQl9OUl9QRk5TKSApCi0gICAg ICAgICAgICAgICAgY291bnQgJj0gfihTVVBFUlBBR0VfMUdCX05SX1BGTlMgLSAxKTsKLQotICAg ICAgICAgICAgLyogQXR0ZW1wIHRvIGFsbG9jYXRlIDFHQiBzdXBlciBwYWdlLiBCZWNhdXNlIGlu IGVhY2ggcGFzcwotICAgICAgICAgICAgICogd2Ugb25seSBhbGxvY2F0ZSBhdCBtb3N0IDFHQiwg d2UgZG9uJ3QgaGF2ZSB0byBjbGlwCi0gICAgICAgICAgICAgKiBzdXBlciBwYWdlIGJvdW5kYXJp ZXMuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggKChjb3VudCB8IGN1cl9wZm4p ICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUyAtIDEpKSA9PSAwICYmCi0gICAgICAgICAgICAgICAg IC8qIENoZWNrIGlmIHRoZXJlIGV4aXN0cyBNTUlPIGhvbGUgaW4gdGhlIDFHQiBtZW1vcnkKLSAg ICAgICAgICAgICAgICAgICogcmFuZ2UgKi8KLSAgICAgICAgICAgICAgICAgIWNoZWNrX21taW9f aG9sZShjdXJfcGZuIDw8IFBBR0VfU0hJRlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU1VQRVJQQUdFXzFHQl9OUl9QRk5TIDw8IFBBR0VfU0hJRlQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXJncy0+bW1pb19zdGFydCwgYXJncy0+bW1pb19zaXplKSAp Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9uZyBkb25lOwotICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgbnJfZXh0ZW50cyA9IGNvdW50ID4+IFNVUEVSUEFHRV8xR0JfU0hJ RlQ7Ci0gICAgICAgICAgICAgICAgeGVuX3Bmbl90IHNwX2V4dGVudHNbbnJfZXh0ZW50c107Ci0K LSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5yX2V4dGVudHM7IGkrKyApCi0gICAg ICAgICAgICAgICAgICAgIHNwX2V4dGVudHNbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAg cGFnZV9hcnJheVtjdXJfcGFnZXMrKGk8PFNVUEVSUEFHRV8xR0JfU0hJRlQpXTsKLQotICAgICAg ICAgICAgICAgIGRvbmUgPSB4Y19kb21haW5fcG9wdWxhdGVfcGh5c21hcCh4Y2gsIGRvbSwgbnJf ZXh0ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU1VQRVJQQUdFXzFHQl9TSElGVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbmV3X21lbWZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcF9leHRlbnRzKTsKLQotICAgICAgICAgICAgICAg IGlmICggZG9uZSA+IDAgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg c3RhdF8xZ2JfcGFnZXMgKz0gZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZSA8PD0gU1VQ RVJQQUdFXzFHQl9TSElGVDsKLSAgICAgICAgICAgICAgICAgICAgY3VyX3BhZ2VzICs9IGRvbmU7 Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50IC09IGRvbmU7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIGNvdW50ICE9IDAgKQotICAgICAgICAg ICAgewotICAgICAgICAgICAgICAgIC8qIENsaXAgY291bnQgdG8gbWF4aW11bSA4TUIgZXh0ZW50 LiAqLwotICAgICAgICAgICAgICAgIG1heF9wYWdlcyA9IFNVUEVSUEFHRV8yTUJfTlJfUEZOUyAq IDQ7Ci0gICAgICAgICAgICAgICAgaWYgKCBjb3VudCA+IG1heF9wYWdlcyApCi0gICAgICAgICAg ICAgICAgICAgIGNvdW50ID0gbWF4X3BhZ2VzOwotCi0gICAgICAgICAgICAgICAgLyogQ2xpcCBw YXJ0aWFsIHN1cGVycGFnZSBleHRlbnRzIHRvIHN1cGVycGFnZQotICAgICAgICAgICAgICAgICAq IGJvdW5kYXJpZXMuICovCi0gICAgICAgICAgICAgICAgaWYgKCAoKGN1cl9wZm4gJiAoU1VQRVJQ QUdFXzJNQl9OUl9QRk5TLTEpKSAhPSAwKSAmJgotICAgICAgICAgICAgICAgICAgICAgKGNvdW50 ID4gKC1jdXJfcGZuICYgKFNVUEVSUEFHRV8yTUJfTlJfUEZOUy0xKSkpICkKLSAgICAgICAgICAg ICAgICAgICAgY291bnQgPSAtY3VyX3BmbiAmIChTVVBFUlBBR0VfMk1CX05SX1BGTlMtMSk7Ci0g ICAgICAgICAgICAgICAgZWxzZSBpZiAoICgoY291bnQgJiAoU1VQRVJQQUdFXzJNQl9OUl9QRk5T LTEpKSAhPSAwKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAoY291bnQgPiBTVVBFUlBB R0VfMk1CX05SX1BGTlMpICkKLSAgICAgICAgICAgICAgICAgICAgY291bnQgJj0gfihTVVBFUlBB R0VfMk1CX05SX1BGTlMgLSAxKTsgLyogY2xpcCBub24tcy5wLiB0YWlsICovCi0KLSAgICAgICAg ICAgICAgICAvKiBBdHRlbXB0IHRvIGFsbG9jYXRlIHN1cGVycGFnZSBleHRlbnRzLiAqLwotICAg ICAgICAgICAgICAgIGlmICggKChjb3VudCB8IGN1cl9wZm4pICYgKFNVUEVSUEFHRV8yTUJfTlJf UEZOUyAtIDEpKSA9PSAwICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg IGxvbmcgZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucl9leHRlbnRz ID0gY291bnQgPj4gU1VQRVJQQUdFXzJNQl9TSElGVDsKLSAgICAgICAgICAgICAgICAgICAgeGVu X3Bmbl90IHNwX2V4dGVudHNbbnJfZXh0ZW50c107Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9y ICggaSA9IDA7IGkgPCBucl9leHRlbnRzOyBpKysgKQotICAgICAgICAgICAgICAgICAgICAgICAg c3BfZXh0ZW50c1tpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9hcnJheVtj dXJfcGFnZXMrKGk8PFNVUEVSUEFHRV8yTUJfU0hJRlQpXTsKLQotICAgICAgICAgICAgICAgICAg ICBkb25lID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXAoeGNoLCBkb20sIG5yX2V4dGVudHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT VVBFUlBBR0VfMk1CX1NISUZULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbmV3X21lbWZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BfZXh0ZW50cyk7Ci0KLSAgICAgICAgICAg ICAgICAgICAgaWYgKCBkb25lID4gMCApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXRfMm1iX3BhZ2VzICs9IGRvbmU7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBkb25lIDw8PSBTVVBFUlBBR0VfMk1CX1NISUZUOwotICAgICAgICAgICAgICAgICAg ICAgICAgY3VyX3BhZ2VzICs9IGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAt PSBkb25lOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAvKiBGYWxsIGJhY2sgdG8gNGtCIGV4dGVudHMuICovCi0g ICAgICAgICAgICBpZiAoIGNvdW50ICE9IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgIHJjID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXBfZXhhY3QoCi0gICAgICAgICAgICAg ICAgICAgIHhjaCwgZG9tLCBjb3VudCwgMCwgbmV3X21lbWZsYWdzLCAmcGFnZV9hcnJheVtjdXJf cGFnZXNdKTsKLSAgICAgICAgICAgICAgICBjdXJfcGFnZXMgKz0gY291bnQ7Ci0gICAgICAgICAg ICAgICAgc3RhdF9ub3JtYWxfcGFnZXMgKz0gY291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLQotICAgICAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQot Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90IGFs bG9jYXRlIG1lbW9yeSBmb3IgSFZNIGd1ZXN0LiIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsK LSAgICB9Ci0KLSAgICBEUFJJTlRGKCJQSFlTSUNBTCBNRU1PUlkgQUxMT0NBVElPTjpcbiIpOwot ICAgIERQUklOVEYoIiAgNEtCIFBBR0VTOiAweCUwMTZseFxuIiwgc3RhdF9ub3JtYWxfcGFnZXMp OwotICAgIERQUklOVEYoIiAgMk1CIFBBR0VTOiAweCUwMTZseFxuIiwgc3RhdF8ybWJfcGFnZXMp OwotICAgIERQUklOVEYoIiAgMUdCIFBBR0VTOiAweCUwMTZseFxuIiwgc3RhdF8xZ2JfcGFnZXMp OwotCi0gICAgcmMgPSAwOwotICAgIGdvdG8gb3V0OwotIGVycm9yX291dDoKLSAgICByYyA9IC0x OwotIG91dDoKLQotICAgIC8qIGVuc3VyZSBubyB1bmNsYWltZWQgcGFnZXMgYXJlIGxlZnQgdW51 c2VkICovCi0gICAgeGNfZG9tYWluX2NsYWltX3BhZ2VzKHhjaCwgZG9tLCAwIC8qIGNhbmNlbHMg dGhlIGNsYWltICovKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludCB4Y19odm1f bG9hZF9pbWFnZSh4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgZG9tLCBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmFyZ3MsCi0gICAgICAgICAgICAg ICAgICAgICAgIHhlbl9wZm5fdCAqcGFnZV9hcnJheSkKLXsKLSAgICB1bnNpZ25lZCBsb25nIGVu dHJ5X2VpcCwgaW1hZ2Vfc2l6ZTsKLSAgICBzdHJ1Y3QgZWxmX2JpbmFyeSBlbGY7Ci0gICAgdWlu dDY0X3Qgdl9zdGFydCwgdl9lbmQ7Ci0gICAgdWludDY0X3QgbV9zdGFydCA9IDAsIG1fZW5kID0g MDsKLSAgICBjaGFyICppbWFnZTsKLSAgICBpbnQgcmM7Ci0KLSAgICBpbWFnZSA9IHhjX3JlYWRf aW1hZ2UoeGNoLCBhcmdzLT5pbWFnZV9maWxlX25hbWUsICZpbWFnZV9zaXplKTsKLSAgICBpZiAo IGltYWdlID09IE5VTEwgKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBtZW1zZXQoJmVsZiwg MCwgc2l6ZW9mKGVsZikpOwotICAgIGlmICggZWxmX2luaXQoJmVsZiwgaW1hZ2UsIGltYWdlX3Np emUpICE9IDAgKQotICAgICAgICBnb3RvIGVycm9yX291dDsKLQotICAgIHhjX2VsZl9zZXRfbG9n ZmlsZSh4Y2gsICZlbGYsIDEpOwotCi0gICAgZWxmX3BhcnNlX2JpbmFyeSgmZWxmKTsKLSAgICB2 X3N0YXJ0ID0gMDsKLSAgICB2X2VuZCA9IGFyZ3MtPm1lbV9zaXplOwotCi0gICAgaWYgKCBtb2R1 bGVzX2luaXQoYXJncywgdl9lbmQsICZlbGYsICZtX3N0YXJ0LCAmbV9lbmQpICE9IDAgKQotICAg IHsKLSAgICAgICAgRVJST1IoIkluc3VmZmljaWVudCBzcGFjZSB0byBsb2FkIG1vZHVsZXMuIik7 Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotICAgIH0KLQotICAgIERQUklOVEYoIlZJUlRVQUwg TUVNT1JZIEFSUkFOR0VNRU5UOlxuIik7Ci0gICAgRFBSSU5URigiICBMb2FkZXI6ICAgJTAxNiJQ Ukl4NjQiLT4lMDE2IlBSSXg2NCJcbiIsIGVsZi5wc3RhcnQsIGVsZi5wZW5kKTsKLSAgICBEUFJJ TlRGKCIgIE1vZHVsZXM6ICAlMDE2IlBSSXg2NCItPiUwMTYiUFJJeDY0IlxuIiwgbV9zdGFydCwg bV9lbmQpOwotCi0gICAgaWYgKCBsb2FkZWxmaW1hZ2UoeGNoLCAmZWxmLCBkb20sIHBhZ2VfYXJy YXkpICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgbG9hZCBFTEYgaW1h Z2UiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgfQotCi0gICAgaWYgKCBsb2FkbW9k dWxlcyh4Y2gsIGFyZ3MsIG1fc3RhcnQsIG1fZW5kLCBkb20sIHBhZ2VfYXJyYXkpICE9IDAgKQot ICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgbG9hZCBBQ1BJIG1vZHVsZXMiKTsKLSAg ICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgfQotCi0gICAgLyogSW5zZXJ0IEpNUCA8cmVsMzI+ IGluc3RydWN0aW9uIGF0IGFkZHJlc3MgMHgwIHRvIHJlYWNoIGVudHJ5IHBvaW50LiAqLwotICAg IGVudHJ5X2VpcCA9IGVsZl91dmFsKCZlbGYsIGVsZi5laGRyLCBlX2VudHJ5KTsKLSAgICBpZiAo IGVudHJ5X2VpcCAhPSAwICkKLSAgICB7Ci0gICAgICAgIGNoYXIgKnBhZ2UwID0geGNfbWFwX2Zv cmVpZ25fcmFuZ2UoCi0gICAgICAgICAgICB4Y2gsIGRvbSwgUEFHRV9TSVpFLCBQUk9UX1JFQUQg fCBQUk9UX1dSSVRFLCAwKTsKLSAgICAgICAgaWYgKCBwYWdlMCA9PSBOVUxMICkKLSAgICAgICAg ICAgIGdvdG8gZXJyb3Jfb3V0OwotICAgICAgICBwYWdlMFswXSA9IDB4ZTk7Ci0gICAgICAgICoo dWludDMyX3QgKikmcGFnZTBbMV0gPSBlbnRyeV9laXAgLSA1OwotICAgICAgICBtdW5tYXAocGFn ZTAsIFBBR0VfU0laRSk7Ci0gICAgfQotCi0gICAgcmMgPSAwOwotICAgIGdvdG8gb3V0OwotIGVy cm9yX291dDoKLSAgICByYyA9IC0xOwotIG91dDoKLSAgICBpZiAoIGVsZl9jaGVja19icm9rZW4o JmVsZikgKQotICAgICAgICBFUlJPUigiSFZNIEVMRiBicm9rZW46ICVzIiwgZWxmX2NoZWNrX2Jy b2tlbigmZWxmKSk7Ci0gICAgZnJlZShpbWFnZSk7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgeGNfaHZtX3BvcHVsYXRlX3BhcmFtcyh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMy X3QgZG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4Y19odm1f YnVpbGRfYXJncyAqYXJncykKLXsKLSAgICB1bnNpZ25lZCBsb25nIGk7Ci0gICAgdm9pZCAqaHZt X2luZm9fcGFnZTsKLSAgICB1aW50MzJfdCAqaWRlbnRfcHQ7Ci0gICAgdWludDY0X3Qgdl9lbmQ7 Ci0gICAgaW50IHJjOwotICAgIHhlbl9wZm5fdCBzcGVjaWFsX2FycmF5W05SX1NQRUNJQUxfUEFH RVNdOwotICAgIHhlbl9wZm5fdCBpb3JlcV9zZXJ2ZXJfYXJyYXlbTlJfSU9SRVFfU0VSVkVSX1BB R0VTXTsKLQotICAgIHZfZW5kID0gYXJncy0+bWVtX3NpemU7Ci0KLSAgICBpZiAoIChodm1faW5m b19wYWdlID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoCi0gICAgICAgICAgICAgIHhjaCwgZG9tLCBQ QUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAgICAgICAgIEhWTV9JTkZP X1BGTikpID09IE5VTEwgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgbWFwIGh2 bSBpbmZvIHBhZ2UiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgfQotICAgIGJ1aWxk X2h2bV9pbmZvKGh2bV9pbmZvX3BhZ2UsIGFyZ3MpOwotICAgIG11bm1hcChodm1faW5mb19wYWdl LCBQQUdFX1NJWkUpOwotCi0gICAgLyogQWxsb2NhdGUgYW5kIGNsZWFyIHNwZWNpYWwgcGFnZXMu ICovCi0gICAgZm9yICggaSA9IDA7IGkgPCBOUl9TUEVDSUFMX1BBR0VTOyBpKysgKQotICAgICAg ICBzcGVjaWFsX2FycmF5W2ldID0gc3BlY2lhbF9wZm4oaSk7Ci0KLSAgICByYyA9IHhjX2RvbWFp bl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0KHhjaCwgZG9tLCBOUl9TUEVDSUFMX1BBR0VTLCAwLCAw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbF9hcnJh eSk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90 IGFsbG9jYXRlIHNwZWNpYWwgcGFnZXMuIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotICAg IH0KLQotICAgIGlmICggeGNfY2xlYXJfZG9tYWluX3BhZ2VzKHhjaCwgZG9tLCBzcGVjaWFsX3Bm bigwKSwgTlJfU1BFQ0lBTF9QQUdFUykgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBu b3QgY2xlYXIgc3BlY2lhbCBwYWdlcyIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9 Ci0KLSAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fU1RPUkVfUEZOLAot ICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfWEVOU1RPUkUpKTsK LSAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fQlVGSU9SRVFfUEZOLAot ICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfQlVGSU9SRVEpKTsK LSAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fSU9SRVFfUEZOLAotICAg ICAgICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfSU9SRVEpKTsKLSAgICB4 Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fQ09OU09MRV9QRk4sCi0gICAgICAg ICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9DT05TT0xFKSk7Ci0gICAgeGNf aHZtX3BhcmFtX3NldCh4Y2gsIGRvbSwgSFZNX1BBUkFNX1BBR0lOR19SSU5HX1BGTiwKLSAgICAg ICAgICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX1BBR0lORykpOwotICAgIHhj X2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9NT05JVE9SX1JJTkdfUEZOLAotICAg ICAgICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfQUNDRVNTKSk7Ci0gICAg eGNfaHZtX3BhcmFtX3NldCh4Y2gsIGRvbSwgSFZNX1BBUkFNX1NIQVJJTkdfUklOR19QRk4sCi0g ICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9TSEFSSU5HKSk7Ci0K LSAgICAvKgotICAgICAqIEFsbG9jYXRlIGFuZCBjbGVhciBhZGRpdGlvbmFsIGlvcmVxIHNlcnZl ciBwYWdlcy4gVGhlIGRlZmF1bHQKLSAgICAgKiBzZXJ2ZXIgd2lsbCB1c2UgdGhlIElPUkVRIGFu ZCBCVUZJT1JFUSBzcGVjaWFsIHBhZ2VzIGFib3ZlLgotICAgICAqLwotICAgIGZvciAoIGkgPSAw OyBpIDwgTlJfSU9SRVFfU0VSVkVSX1BBR0VTOyBpKysgKQotICAgICAgICBpb3JlcV9zZXJ2ZXJf YXJyYXlbaV0gPSBpb3JlcV9zZXJ2ZXJfcGZuKGkpOwotCi0gICAgcmMgPSB4Y19kb21haW5fcG9w dWxhdGVfcGh5c21hcF9leGFjdCh4Y2gsIGRvbSwgTlJfSU9SRVFfU0VSVkVSX1BBR0VTLCAwLCAw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9yZXFfc2VydmVy X2FycmF5KTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3Vs ZCBub3QgYWxsb2NhdGUgaW9yZXEgc2VydmVyIHBhZ2VzLiIpOwotICAgICAgICBnb3RvIGVycm9y X291dDsKLSAgICB9Ci0KLSAgICBpZiAoIHhjX2NsZWFyX2RvbWFpbl9wYWdlcyh4Y2gsIGRvbSwg aW9yZXFfc2VydmVyX3BmbigwKSwgTlJfSU9SRVFfU0VSVkVSX1BBR0VTKSApCi0gICAgewotICAg ICAgICBQRVJST1IoIkNvdWxkIG5vdCBjbGVhciBpb3JlcSBwYWdlIik7Ci0gICAgICAgIGdvdG8g ZXJyb3Jfb3V0OwotICAgIH0KLQotICAgIC8qIFRlbGwgdGhlIGRvbWFpbiB3aGVyZSB0aGUgcGFn ZXMgYXJlIGFuZCBob3cgbWFueSB0aGVyZSBhcmUgKi8KLSAgICB4Y19odm1fcGFyYW1fc2V0KHhj aCwgZG9tLCBIVk1fUEFSQU1fSU9SRVFfU0VSVkVSX1BGTiwKLSAgICAgICAgICAgICAgICAgICAg IGlvcmVxX3NlcnZlcl9wZm4oMCkpOwotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhW TV9QQVJBTV9OUl9JT1JFUV9TRVJWRVJfUEFHRVMsCi0gICAgICAgICAgICAgICAgICAgICBOUl9J T1JFUV9TRVJWRVJfUEFHRVMpOwotCi0gICAgLyoKLSAgICAgKiBJZGVudGl0eS1tYXAgcGFnZSB0 YWJsZSBpcyByZXF1aXJlZCBmb3IgcnVubmluZyB3aXRoIENSMC5QRz0wIHdoZW4KLSAgICAgKiB1 c2luZyBJbnRlbCBFUFQuIENyZWF0ZSBhIDMyLWJpdCBub24tUEFFIHBhZ2UgZGlyZWN0b3J5IG9m IHN1cGVycGFnZXMuCi0gICAgICovCi0gICAgaWYgKCAoaWRlbnRfcHQgPSB4Y19tYXBfZm9yZWln bl9yYW5nZSgKLSAgICAgICAgICAgICAgeGNoLCBkb20sIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwg UFJPVF9XUklURSwKLSAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfSURFTlRf UFQpKSkgPT0gTlVMTCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBtYXAgc3Bl Y2lhbCBwYWdlIGlkZW50X3B0Iik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotICAgIH0KLSAg ICBmb3IgKCBpID0gMDsgaSA8IFBBR0VfU0laRSAvIHNpemVvZigqaWRlbnRfcHQpOyBpKysgKQot ICAgICAgICBpZGVudF9wdFtpXSA9ICgoaSA8PCAyMikgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0Vf UlcgfCBfUEFHRV9VU0VSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQg fCBfUEFHRV9ESVJUWSB8IF9QQUdFX1BTRSk7Ci0gICAgbXVubWFwKGlkZW50X3B0LCBQQUdFX1NJ WkUpOwotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9JREVOVF9QVCwK LSAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX0lERU5UX1BUKSA8 PCBQQUdFX1NISUZUKTsKLQotICAgIHJjID0gMDsKLSAgICBnb3RvIG91dDsKLSBlcnJvcl9vdXQ6 Ci0gICAgcmMgPSAtMTsKLSBvdXQ6Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8qIHhjX2h2bV9i dWlsZDoKLSAqIENyZWF0ZSBhIGRvbWFpbiBmb3IgYSB2aXJ0dWFsaXplZCBMaW51eCwgdXNpbmcg ZmlsZXMvZmlsZW5hbWVzLgotICovCi1pbnQgeGNfaHZtX2J1aWxkKHhjX2ludGVyZmFjZSAqeGNo LCB1aW50MzJfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9h cmdzICpodm1fYXJncykKLXsKLSAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgYXJncyA9ICpo dm1fYXJnczsKLSAgICB4ZW5fcGZuX3QgKnBhcnJheSA9IE5VTEw7Ci0gICAgaW50IHJjOwotCi0g ICAgaWYgKCBkb21pZCA9PSAwICkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICggYXJncy5p bWFnZV9maWxlX25hbWUgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIEFu IEhWTSBndWVzdCBtdXN0IGJlIGluaXRpYWxpc2VkIHdpdGggYXQgbGVhc3QgMk1CIG1lbW9yeS4g Ki8KLSAgICBpZiAoIGFyZ3MubWVtX3NpemUgPCAoMnVsbCA8PCAyMCkgfHwgYXJncy5tZW1fdGFy Z2V0IDwgKDJ1bGwgPDwgMjApICkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcGFycmF5ID0g bWFsbG9jKChhcmdzLm1lbV9zaXplID4+IFBBR0VfU0hJRlQpICogc2l6ZW9mKHhlbl9wZm5fdCkp OwotICAgIGlmICggcGFycmF5ID09IE5VTEwgKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBy YyA9IHhjX2h2bV9wb3B1bGF0ZV9tZW1vcnkoeGNoLCBkb21pZCwgJmFyZ3MsIHBhcnJheSk7Ci0g ICAgaWYgKCByYyAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigieGNfaHZtX3BvcHVsYXRl X21lbW9yeSBmYWlsZWQiKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHJjID0geGNf aHZtX2xvYWRfaW1hZ2UoeGNoLCBkb21pZCwgJmFyZ3MsIHBhcnJheSk7Ci0gICAgaWYgKCByYyAh PSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigieGNfaHZtX2xvYWRfaW1hZ2UgZmFpbGVkIik7 Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICByYyA9IHhjX2h2bV9wb3B1bGF0ZV9wYXJh bXMoeGNoLCBkb21pZCwgJmFyZ3MpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgewotICAgICAg ICBQRVJST1IoInhjX2h2bV9wb3B1bGF0ZV9wYXJhbXMgZmFpbGVkIik7Ci0gICAgICAgIGdvdG8g b3V0OwotICAgIH0KLQotICAgIC8qIFJldHVybiBtb2R1bGUgbG9hZCBhZGRyZXNzZXMgdG8gY2Fs bGVyICovCi0gICAgaHZtX2FyZ3MtPmFjcGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0ID0gYXJncy5h Y3BpX21vZHVsZS5ndWVzdF9hZGRyX291dDsKLSAgICBodm1fYXJncy0+c21iaW9zX21vZHVsZS5n dWVzdF9hZGRyX291dCA9IGFyZ3Muc21iaW9zX21vZHVsZS5ndWVzdF9hZGRyX291dDsKLQotb3V0 OgotICAgIGZyZWUocGFycmF5KTsKLQotICAgIHJldHVybiByYzsKLX0KLQotLyogeGNfaHZtX2J1 aWxkX3RhcmdldF9tZW06IAotICogQ3JlYXRlIGEgZG9tYWluIGZvciBhIHByZS1iYWxsb29uZWQg dmlydHVhbGl6ZWQgTGludXgsIHVzaW5nCi0gKiBmaWxlcy9maWxlbmFtZXMuICBJZiB0YXJnZXQg PCBtZW1zaXplLCBkb21haW4gaXMgY3JlYXRlZCB3aXRoCi0gKiBtZW1zaXplIHBhZ2VzIG1hcmtl ZCBwb3B1bGF0ZS1vbi1kZW1hbmQsIAotICogY2FsY3VsYXRpbmcgcG9kIGNhY2hlIHNpemUgYmFz ZWQgb24gdGFyZ2V0LgotICogSWYgdGFyZ2V0ID09IG1lbXNpemUsIHBhZ2VzIGFyZSBwb3B1bGF0 ZWQgbm9ybWFsbHkuCi0gKi8KLWludCB4Y19odm1fYnVpbGRfdGFyZ2V0X21lbSh4Y19pbnRlcmZh Y2UgKnhjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lbXNpemUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqaW1hZ2VfbmFtZSkKLXsKLSAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgYXJncyA9IHt9 OwotCi0gICAgbWVtc2V0KCZhcmdzLCAwLCBzaXplb2Yoc3RydWN0IHhjX2h2bV9idWlsZF9hcmdz KSk7Ci0gICAgYXJncy5tZW1fc2l6ZSA9ICh1aW50NjRfdCltZW1zaXplIDw8IDIwOwotICAgIGFy Z3MubWVtX3RhcmdldCA9ICh1aW50NjRfdCl0YXJnZXQgPDwgMjA7Ci0gICAgYXJncy5pbWFnZV9m aWxlX25hbWUgPSBpbWFnZV9uYW1lOwotICAgIGlmICggYXJncy5tbWlvX3NpemUgPT0gMCApCi0g ICAgICAgIGFyZ3MubW1pb19zaXplID0gSFZNX0JFTE9XXzRHX01NSU9fTEVOR1RIOwotCi0gICAg cmV0dXJuIHhjX2h2bV9idWlsZCh4Y2gsIGRvbWlkLCAmYXJncyk7Ci19Ci0KLS8qCi0gKiBMb2Nh bCB2YXJpYWJsZXM6Ci0gKiBtb2RlOiBDCi0gKiBjLWZpbGUtc3R5bGU6ICJCU0QiCi0gKiBjLWJh c2ljLW9mZnNldDogNAotICogdGFiLXdpZHRoOiA0Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwK LSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGdfcHJpdmF0ZS5jIGIvdG9v bHMvbGlieGMveGdfcHJpdmF0ZS5jCmluZGV4IDY3OTQ2ZTEuLmQ5OGYyODIgMTAwNjQ0Ci0tLSBh L3Rvb2xzL2xpYnhjL3hnX3ByaXZhdGUuYworKysgYi90b29scy9saWJ4Yy94Z19wcml2YXRlLmMK QEAgLTE4NywxNSArMTg3LDYgQEAgdW5zaWduZWQgbG9uZyBjc3VtX3BhZ2Uodm9pZCAqcGFnZSkK ICAgICByZXR1cm4gc3VtIF4gKHN1bT4+MzIpOwogfQogCi1fX2F0dHJpYnV0ZV9fKCh3ZWFrKSkg Ci0gICAgaW50IHhjX2h2bV9idWlsZCh4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2 bV9idWlsZF9hcmdzICpodm1fYXJncykKLXsKLSAgICBlcnJubyA9IEVOT1NZUzsKLSAgICByZXR1 cm4gLTE7Ci19Ci0KIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1n aXQgYS90b29scy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMgYi90b29scy9weXRob24veGVu L2xvd2xldmVsL3hjL3hjLmMKaW5kZXggOWFiNTNmYi4uNGFkOGZjMCAxMDA2NDQKLS0tIGEvdG9v bHMvcHl0aG9uL3hlbi9sb3dsZXZlbC94Yy94Yy5jCisrKyBiL3Rvb2xzL3B5dGhvbi94ZW4vbG93 bGV2ZWwveGMveGMuYwpAQCAtOTEwLDc3ICs5MTAsNiBAQCBzdGF0aWMgUHlPYmplY3QgKnB5eGNf ZG9tX3N1cHByZXNzX3NwdXJpb3VzX3BhZ2VfZmF1bHRzKFhjT2JqZWN0ICpzZWxmLAogfQogI2Vu ZGlmIC8qIF9faTM4Nl9fIHx8IF9feDg2XzY0X18gKi8KIAotc3RhdGljIFB5T2JqZWN0ICpweXhj X2h2bV9idWlsZChYY09iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHlPYmplY3QgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2Jq ZWN0ICprd2RzKQotewotICAgIHVpbnQzMl90IGRvbTsKLSAgICBzdHJ1Y3QgaHZtX2luZm9fdGFi bGUgKnZhX2h2bTsKLSAgICB1aW50OF90ICp2YV9tYXAsIHN1bTsKLSAgICBpbnQgaTsKLSAgICBj aGFyICppbWFnZTsKLSAgICBpbnQgbWVtc2l6ZSwgdGFyZ2V0PS0xLCB2Y3B1cyA9IDEsIGFjcGkg PSAwLCBhcGljID0gMTsKLSAgICBQeU9iamVjdCAqdmNwdV9hdmFpbF9oYW5kbGUgPSBOVUxMOwot ICAgIHVpbnQ4X3QgdmNwdV9hdmFpbFsoSFZNX01BWF9WQ1BVUyArIDcpLzhdOwotCi0gICAgc3Rh dGljIGNoYXIgKmt3ZF9saXN0W10gPSB7ICJkb21pZCIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJtZW1zaXplIiwgImltYWdlIiwgInRhcmdldCIsICJ2Y3B1cyIsIAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAidmNwdV9hdmFpbCIsICJhY3BpIiwgImFwaWMiLCBO VUxMIH07Ci0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMs ICJpaXN8aWlPaWkiLCBrd2RfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmRvbSwgJm1lbXNpemUsICZpbWFnZSwgJnRhcmdldCwgJnZjcHVzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmNwdV9hdmFpbF9oYW5kbGUsICZhY3BpLCAm YXBpYykgKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIG1lbXNldCh2Y3B1X2F2YWlsLCAw LCBzaXplb2YodmNwdV9hdmFpbCkpOwotICAgIHZjcHVfYXZhaWxbMF0gPSAxOwotICAgIGlmICgg dmNwdV9hdmFpbF9oYW5kbGUgIT0gTlVMTCApCi0gICAgewotICAgICAgICBpZiAoIFB5SW50X0No ZWNrKHZjcHVfYXZhaWxfaGFuZGxlKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgdiA9IFB5SW50X0FzTG9uZyh2Y3B1X2F2YWlsX2hhbmRsZSk7Ci0gICAgICAgICAgICBm b3IgKCBpID0gMDsgaSA8IHNpemVvZihsb25nKTsgaSsrICkKLSAgICAgICAgICAgICAgICB2Y3B1 X2F2YWlsW2ldID0gKHVpbnQ4X3QpKHY+PihpKjgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl IGlmICggUHlMb25nX0NoZWNrKHZjcHVfYXZhaWxfaGFuZGxlKSApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGlmICggX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdmNwdV9hdmFp bF9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVk IGNoYXIgKil2Y3B1X2F2YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZih2Y3B1X2F2YWlsKSwgMSwgMCkgKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxM OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZXJybm8g PSBFSU5WQUw7Ci0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oeGNfZXJyb3Jfb2JqKTsK LSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCB0 YXJnZXQgPT0gLTEgKQotICAgICAgICB0YXJnZXQgPSBtZW1zaXplOwotCi0gICAgaWYgKCB4Y19o dm1fYnVpbGRfdGFyZ2V0X21lbShzZWxmLT54Y19oYW5kbGUsIGRvbSwgbWVtc2l6ZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgaW1hZ2UpICE9IDAgKQotICAgICAg ICByZXR1cm4gcHl4Y19lcnJvcl90b19leGNlcHRpb24oc2VsZi0+eGNfaGFuZGxlKTsKLQotICAg IC8qIEZpeCB1cCB0aGUgSFZNIGluZm8gdGFibGUuICovCi0gICAgdmFfbWFwID0geGNfbWFwX2Zv cmVpZ25fcmFuZ2Uoc2VsZi0+eGNfaGFuZGxlLCBkb20sIFhDX1BBR0VfU0laRSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWTV9JTkZPX1BGTik7Ci0gICAgaWYgKCB2YV9t YXAgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oeGNfZXJyb3Jf b2JqKTsKLSAgICB2YV9odm0gPSAoc3RydWN0IGh2bV9pbmZvX3RhYmxlICopKHZhX21hcCArIEhW TV9JTkZPX09GRlNFVCk7Ci0gICAgdmFfaHZtLT5hcGljX21vZGUgICAgPSBhcGljOwotICAgIHZh X2h2bS0+bnJfdmNwdXMgICAgID0gdmNwdXM7Ci0gICAgbWVtY3B5KHZhX2h2bS0+dmNwdV9vbmxp bmUsIHZjcHVfYXZhaWwsIHNpemVvZih2Y3B1X2F2YWlsKSk7Ci0gICAgZm9yICggaSA9IDAsIHN1 bSA9IDA7IGkgPCB2YV9odm0tPmxlbmd0aDsgaSsrICkKLSAgICAgICAgc3VtICs9ICgodWludDhf dCAqKXZhX2h2bSlbaV07Ci0gICAgdmFfaHZtLT5jaGVja3N1bSAtPSBzdW07Ci0gICAgbXVubWFw KHZhX21hcCwgWENfUEFHRV9TSVpFKTsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJ7fSIp OwotfQotCiBzdGF0aWMgUHlPYmplY3QgKnB5eGNfZ250dGFiX2h2bV9zZWVkKFhjT2JqZWN0ICpz ZWxmLAogCQkJCSAgICAgIFB5T2JqZWN0ICphcmdzLAogCQkJCSAgICAgIFB5T2JqZWN0ICprd2Rz KQpAQCAtMjM2NiwxNiArMjI5NSw2IEBAIHN0YXRpYyBQeU1ldGhvZERlZiBweXhjX21ldGhvZHNb XSA9IHsKICAgICAgICIgaW1hZ2UgICBbc3RyXTogICAgICBOYW1lIG9mIGtlcm5lbCBpbWFnZSBm aWxlLiBNYXkgYmUgZ3ppcHBlZC5cbiIKICAgICAgICIgY21kbGluZSBbc3RyLCBuL2FdOiBLZXJu ZWwgcGFyYW1ldGVycywgaWYgYW55LlxuXG4ifSwKIAotICAgIHsgImh2bV9idWlsZCIsIAotICAg ICAgKFB5Q0Z1bmN0aW9uKXB5eGNfaHZtX2J1aWxkLCAKLSAgICAgIE1FVEhfVkFSQVJHUyB8IE1F VEhfS0VZV09SRFMsICJcbiIKLSAgICAgICJCdWlsZCBhIG5ldyBIVk0gZ3Vlc3QgT1MuXG4iCi0g ICAgICAiIGRvbSAgICAgW2ludF06ICAgICAgSWRlbnRpZmllciBvZiBkb21haW4gdG8gYnVpbGQg aW50by5cbiIKLSAgICAgICIgaW1hZ2UgICBbc3RyXTogICAgICBOYW1lIG9mIEhWTSBsb2FkZXIg aW1hZ2UgZmlsZS5cbiIKLSAgICAgICIgdmNwdXMgICBbaW50LCAxXTogICBOdW1iZXIgb2YgVmly dHVhbCBDUFVTIGluIGRvbWFpbi5cblxuIgotICAgICAgIiB2Y3B1X2F2YWlsIFtsb25nLCAxXTog V2hpY2ggVmlydHVhbCBDUFVTIGF2YWlsYWJsZS5cblxuIgotICAgICAgIlJldHVybnM6IFtpbnRd IDAgb24gc3VjY2VzczsgLTEgb24gZXJyb3IuXG4iIH0sCi0KICAgICB7ICJnbnR0YWJfaHZtX3Nl ZWQiLAogICAgICAgKFB5Q0Z1bmN0aW9uKXB5eGNfZ250dGFiX2h2bV9zZWVkLAogICAgICAgTUVU SF9LRVlXT1JEUywgIlxuIgotLSAKMS45LjUgKEFwcGxlIEdpdC01MC4zKQoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==