From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 2/4] x86: split PV dom0 builder to pv/dom0_builder.c Date: Thu, 16 Mar 2017 17:54:56 +0000 Message-ID: <20170316175458.22261-3-wei.liu2@citrix.com> References: <20170316175458.22261-1-wei.liu2@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.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coZcC-0002FM-Hh for xen-devel@lists.xenproject.org; Thu, 16 Mar 2017 17:55:08 +0000 In-Reply-To: <20170316175458.22261-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org TG9uZyB0ZXJtIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkaXNlbnRhbmdsZSBQViBhbmQgSFZNIGNv ZGUuIE1vdmUgdGhlIFBWCmRvbWFpbiBidWlsZGVyIHRvIGEgZGVkaWNhdGVkIGZpbGUuCgpUaGlz IGluIHR1cm4gcmVxdWlyZXMgZXhwb3NpbmcgYSBmZXcgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMg dmlhIGEgbmV3CmhlYWRlciBkb20wX2J1aWxkLmguIFRoZXNlIGZ1bmN0aW9ucyBhbmQgdmFyaWFi bGVzIGFyZSBub3cgcHJlZml4ZWQgd2l0aAoiZG9tMF8iIGlmIHRoZXkgd2VyZW4ndCBhbHJlYWR5 IHNvLgoKTm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgTGl1IDx3ZWku bGl1MkBjaXRyaXguY29tPgotLS0KdjI6CjEuIHB1dCBmaWxlIHVuZGVyIHB2IGRpcmVjdG9yeQoy LiB1c2UgZG9tMF8gcHJlZml4CjMuIGhlYWRlciBub3cgaW4gYXNtLXg4NgotLS0KIHhlbi9hcmNo L3g4Ni9kb20wX2J1aWxkLmMgICAgICAgIHwgOTExICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3B2L01ha2VmaWxlICAgICAgICAgfCAgIDEgKwog eGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYyAgICAgfCA5MTAgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS14ODYvZG9tMF9idWlsZC5oIHwg IDMyICsrCiA0IGZpbGVzIGNoYW5nZWQsIDk2MCBpbnNlcnRpb25zKCspLCA4OTQgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS14ODYvZG9tMF9idWlsZC5oCgpkaWZmIC0t Z2l0IGEveGVuL2FyY2gveDg2L2RvbTBfYnVpbGQuYyBiL3hlbi9hcmNoL3g4Ni9kb20wX2J1aWxk LmMKaW5kZXggMWM3MjNjOWVmMS4uYzc0ZjliNTJlMCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2 L2RvbTBfYnVpbGQuYworKysgYi94ZW4vYXJjaC94ODYvZG9tMF9idWlsZC5jCkBAIC0yOCw2ICsy OCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgog I2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2RvbTBfYnVpbGQuaD4KICNpbmNs dWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgPGFzbS9wYWdpbmcuaD4KICNpbmNsdWRlIDxhc20v cDJtLmg+CkBAIC0xNTQsMTEgKzE1NSwxMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfZG9t MF9ub2Rlcyhjb25zdCBjaGFyICpzKQogfQogY3VzdG9tX3BhcmFtKCJkb20wX25vZGVzIiwgcGFy c2VfZG9tMF9ub2Rlcyk7CiAKLXN0YXRpYyBjcHVtYXNrX3QgX19pbml0ZGF0YSBkb20wX2NwdXM7 CitjcHVtYXNrX3QgX19pbml0ZGF0YSBkb20wX2NwdXM7CiAKLXN0YXRpYyBzdHJ1Y3QgdmNwdSAq X19pbml0IHNldHVwX2RvbTBfdmNwdShzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2Y3B1X2lkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjcHUpCitz dHJ1Y3QgdmNwdSAqX19pbml0IGRvbTBfc2V0dXBfdmNwdShzdHJ1Y3QgZG9tYWluICpkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZjcHVfaWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3B1KQogewog ICAgIHN0cnVjdCB2Y3B1ICp2ID0gYWxsb2NfdmNwdShkLCB2Y3B1X2lkLCBjcHUpOwogCkBAIC0y MTUsNyArMjE2LDcgQEAgc3RydWN0IHZjcHUgKl9faW5pdCBhbGxvY19kb20wX3ZjcHUwKHN0cnVj dCBkb21haW4gKmRvbTApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGRvbTAtPm1heF92Y3B1 cyA9IG1heF92Y3B1czsKIAotICAgIHJldHVybiBzZXR1cF9kb20wX3ZjcHUoZG9tMCwgMCwgY3B1 bWFza19maXJzdCgmZG9tMF9jcHVzKSk7CisgICAgcmV0dXJuIGRvbTBfc2V0dXBfdmNwdShkb20w LCAwLCBjcHVtYXNrX2ZpcnN0KCZkb20wX2NwdXMpKTsKIH0KIAogI2lmZGVmIENPTkZJR19TSEFE T1dfUEFHSU5HCkBAIC0yNTgsNjYgKzI1OSw3IEBAIHN0cmluZ19wYXJhbSgiZG9tMF9pb3BvcnRz X2Rpc2FibGUiLCBvcHRfZG9tMF9pb3BvcnRzX2Rpc2FibGUpOwogc3RhdGljIGJvb2xfdCBfX2lu aXRkYXRhIHJvX2hwZXQgPSAxOwogYm9vbGVhbl9wYXJhbSgicm8taHBldCIsIHJvX2hwZXQpOwog Ci0vKiBBbGxvdyByaW5nLTMgYWNjZXNzIGluIGxvbmcgbW9kZSBhcyBndWVzdCBjYW5ub3QgdXNl IHJpbmcgMSAuLi4gKi8KLSNkZWZpbmUgQkFTRV9QUk9UIChfUEFHRV9QUkVTRU5UfF9QQUdFX1JX fF9QQUdFX0FDQ0VTU0VEfF9QQUdFX1VTRVIpCi0jZGVmaW5lIEwxX1BST1QgKEJBU0VfUFJPVHxf UEFHRV9HVUVTVF9LRVJORUwpCi0vKiAuLi4gZXhjZXB0IGZvciBjb21wYXRpYmlsaXR5IG1vZGUg Z3Vlc3RzLiAqLwotI2RlZmluZSBDT01QQVRfTDFfUFJPVCAoX1BBR0VfUFJFU0VOVHxfUEFHRV9S V3xfUEFHRV9BQ0NFU1NFRCkKLSNkZWZpbmUgTDJfUFJPVCAoQkFTRV9QUk9UfF9QQUdFX0RJUlRZ KQotI2RlZmluZSBMM19QUk9UIChCQVNFX1BST1R8X1BBR0VfRElSVFkpCi0jZGVmaW5lIEw0X1BS T1QgKEJBU0VfUFJPVHxfUEFHRV9ESVJUWSkKLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRk YXRhIG1lbWZsYWdzID0gTUVNRl9ub19kbWF8TUVNRl9leGFjdF9ub2RlOwotCi1zdGF0aWMgc3Ry dWN0IHBhZ2VfaW5mbyAqIF9faW5pdCBhbGxvY19jaHVuaygKLSAgICBzdHJ1Y3QgZG9tYWluICpk LCB1bnNpZ25lZCBsb25nIG1heF9wYWdlcykKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IF9f aW5pdGRhdGEgbGFzdF9vcmRlciA9IE1BWF9PUkRFUjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlOwotICAgIHVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcl9mcm9tX3BhZ2VzKG1heF9w YWdlcyksIGZyZWVfb3JkZXI7Ci0KLSAgICBpZiAoIG9yZGVyID4gbGFzdF9vcmRlciApCi0gICAg ICAgIG9yZGVyID0gbGFzdF9vcmRlcjsKLSAgICBlbHNlIGlmICggbWF4X3BhZ2VzICYgKG1heF9w YWdlcyAtIDEpICkKLSAgICAgICAgLS1vcmRlcjsKLSAgICB3aGlsZSAoIChwYWdlID0gYWxsb2Nf ZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgbWVtZmxhZ3MpKSA9PSBOVUxMICkKLSAgICAgICAgaWYg KCBvcmRlci0tID09IDAgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgaWYgKCBwYWdlICkKLSAg ICAgICAgbGFzdF9vcmRlciA9IG9yZGVyOwotICAgIGVsc2UgaWYgKCBtZW1mbGFncyApCi0gICAg ewotICAgICAgICAvKgotICAgICAgICAgKiBBbGxvY2F0ZSB1cCB0byAyTUIgYXQgYSB0aW1lOiBJ dCBwcmV2ZW50cyBhbGxvY2F0aW5nIHZlcnkgbGFyZ2UKLSAgICAgICAgICogY2h1bmtzIGZyb20g RE1BIHBvb2xzIGJlZm9yZSB0aGUgPjRHQiBwb29sIGlzIGZ1bGx5IGRlcGxldGVkLgotICAgICAg ICAgKi8KLSAgICAgICAgbGFzdF9vcmRlciA9IDIxIC0gUEFHRV9TSElGVDsKLSAgICAgICAgbWVt ZmxhZ3MgPSAwOwotICAgICAgICByZXR1cm4gYWxsb2NfY2h1bmsoZCwgbWF4X3BhZ2VzKTsKLSAg ICB9Ci0KLSAgICAvKgotICAgICAqIE1ha2UgYSByZWFzb25hYmxlIGF0dGVtcHQgYXQgZmluZGlu ZyBhIHNtYWxsZXIgY2h1bmsgYXQgYSBoaWdoZXIKLSAgICAgKiBhZGRyZXNzLCB0byBhdm9pZCBh bGxvY2F0aW5nIGZyb20gbG93IG1lbW9yeSBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICAgICAqLwot ICAgIGZvciAoIGZyZWVfb3JkZXIgPSBvcmRlcjsgIW1lbWZsYWdzICYmIHBhZ2UgJiYgb3JkZXIt LTsgKQotICAgIHsKLSAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGcyOwotCi0gICAgICAgIGlm ICggZC0+dG90X3BhZ2VzICsgKDEgPDwgb3JkZXIpID4gZC0+bWF4X3BhZ2VzICkKLSAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICBwZzIgPSBhbGxvY19kb21oZWFwX3BhZ2VzKGQsIG9yZGVy LCBNRU1GX2V4YWN0X25vZGUpOwotICAgICAgICBpZiAoIHBnMiA+IHBhZ2UgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBmcmVlX2RvbWhlYXBfcGFnZXMocGFnZSwgZnJlZV9vcmRlcik7Ci0gICAg ICAgICAgICBwYWdlID0gcGcyOwotICAgICAgICAgICAgZnJlZV9vcmRlciA9IG9yZGVyOwotICAg ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBwZzIgKQotICAgICAgICAgICAgZnJlZV9kb21oZWFw X3BhZ2VzKHBnMiwgb3JkZXIpOwotICAgIH0KLSAgICByZXR1cm4gcGFnZTsKLX0KK3Vuc2lnbmVk IGludCBfX2luaXRkYXRhIGRvbTBfbWVtZmxhZ3MgPSBNRU1GX25vX2RtYXxNRU1GX2V4YWN0X25v ZGU7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBkb20wX3BhZ2luZ19wYWdlcyhjb25z dCBzdHJ1Y3QgZG9tYWluICpkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCkBAIC0zMzAsNyArMjcyLDcgQEAgc3Rh dGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGRvbTBfcGFnaW5nX3BhZ2VzKGNvbnN0IHN0cnVjdCBk b21haW4gKmQsCiAgICAgcmV0dXJuICgobWVta2IgKyAxMDIzKSAvIDEwMjQpIDw8ICgyMCAtIFBB R0VfU0hJRlQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgY29tcHV0ZV9kb20w X25yX3BhZ2VzKAordW5zaWduZWQgbG9uZyBfX2luaXQgZG9tMF9jb21wdXRlX25yX3BhZ2VzKAog ICAgIHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBlbGZfZG9tX3Bhcm1zICpwYXJtcywgdW5zaWdu ZWQgbG9uZyBpbml0cmRfbGVuKQogewogICAgIG5vZGVpZF90IG5vZGU7CkBAIC00NjcsMTk5ICs0 MDksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHJvY2Vzc19kb20wX2lvcG9ydHNfZGlzYWJsZShz dHJ1Y3QgZG9tYWluICpkb20wKQogICAgIH0KIH0KIAotc3RhdGljIF9faW5pdCB2b2lkIGRvbTBf dXBkYXRlX3BoeXNtYXAoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuLCB1bnNpZ25l ZCBsb25nIHZwaHlzbWFwX3MpCi17Ci0gICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWluKGQpICkK LSAgICAgICAgKCh1bnNpZ25lZCBsb25nICopdnBoeXNtYXBfcylbcGZuXSA9IG1mbjsKLSAgICBl bHNlCi0gICAgICAgICgodW5zaWduZWQgaW50ICopdnBoeXNtYXBfcylbcGZuXSA9IG1mbjsKLQot ICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgcGZuKTsKLX0KLQotc3RhdGljIF9faW5pdCB2b2lk IG1hcmtfcHZfcHRfcGFnZXNfcmRvbmx5KHN0cnVjdCBkb21haW4gKmQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDRfcGdlbnRyeV90ICpsNHN0YXJ0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdnB0 X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgbnJfcHRfcGFnZXMpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLSAgICBz dHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIGw0X3BnZW50cnlfdCAqcGw0ZTsKLSAgICBsM19w Z2VudHJ5X3QgKnBsM2U7Ci0gICAgbDJfcGdlbnRyeV90ICpwbDJlOwotICAgIGwxX3BnZW50cnlf dCAqcGwxZTsKLQotICAgIHBsNGUgPSBsNHN0YXJ0ICsgbDRfdGFibGVfb2Zmc2V0KHZwdF9zdGFy dCk7Ci0gICAgcGwzZSA9IGw0ZV90b19sM2UoKnBsNGUpOwotICAgIHBsM2UgKz0gbDNfdGFibGVf b2Zmc2V0KHZwdF9zdGFydCk7Ci0gICAgcGwyZSA9IGwzZV90b19sMmUoKnBsM2UpOwotICAgIHBs MmUgKz0gbDJfdGFibGVfb2Zmc2V0KHZwdF9zdGFydCk7Ci0gICAgcGwxZSA9IGwyZV90b19sMWUo KnBsMmUpOwotICAgIHBsMWUgKz0gbDFfdGFibGVfb2Zmc2V0KHZwdF9zdGFydCk7Ci0gICAgZm9y ICggY291bnQgPSAwOyBjb3VudCA8IG5yX3B0X3BhZ2VzOyBjb3VudCsrICkKLSAgICB7Ci0gICAg ICAgIGwxZV9yZW1vdmVfZmxhZ3MoKnBsMWUsIF9QQUdFX1JXKTsKLSAgICAgICAgcGFnZSA9IG1m bl90b19wYWdlKGwxZV9nZXRfcGZuKCpwbDFlKSk7Ci0KLSAgICAgICAgLyogUmVhZC1vbmx5IG1h cHBpbmcgKyBQR0NfYWxsb2NhdGVkICsgcGFnZS10YWJsZSBwYWdlLiAqLwotICAgICAgICBwYWdl LT5jb3VudF9pbmZvICAgICAgICAgPSBQR0NfYWxsb2NhdGVkIHwgMzsKLSAgICAgICAgcGFnZS0+ dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3ZhbGlkYXRlZCB8IDE7Ci0KLSAgICAgICAgLyogVG9w LWxldmVsIHAudC4gaXMgcGlubmVkLiAqLwotICAgICAgICBpZiAoIChwYWdlLT51LmludXNlLnR5 cGVfaW5mbyAmIFBHVF90eXBlX21hc2spID09Ci0gICAgICAgICAgICAgKCFpc19wdl8zMmJpdF9k b21haW4oZCkgPwotICAgICAgICAgICAgICBQR1RfbDRfcGFnZV90YWJsZSA6IFBHVF9sM19wYWdl X3RhYmxlKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8gICAgICAg ICs9IDE7Ci0gICAgICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyArPSAxIHwgUEdUX3Bp bm5lZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEl0ZXJhdGUuICovCi0gICAgICAgIGlmICgg ISgodW5zaWduZWQgbG9uZykrK3BsMWUgJiAoUEFHRV9TSVpFIC0gMSkpICkKLSAgICAgICAgewot ICAgICAgICAgICAgaWYgKCAhKCh1bnNpZ25lZCBsb25nKSsrcGwyZSAmIChQQUdFX1NJWkUgLSAx KSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggISgodW5zaWduZWQgbG9u ZykrK3BsM2UgJiAoUEFHRV9TSVpFIC0gMSkpICkKLSAgICAgICAgICAgICAgICAgICAgcGwzZSA9 IGw0ZV90b19sM2UoKisrcGw0ZSk7Ci0gICAgICAgICAgICAgICAgcGwyZSA9IGwzZV90b19sMmUo KnBsM2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGwxZSA9IGwyZV90b19sMWUoKnBs MmUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgc2V0dXBfcHZf cGh5c21hcChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIHBndGJsX3BmbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdl9zdGFydCwgdW5z aWduZWQgbG9uZyB2X2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgdnBoeXNtYXBfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHZwaHlzbWFwX2VuZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCi17Ci0gICAgc3RydWN0IHBh Z2VfaW5mbyAqcGFnZSA9IE5VTEw7Ci0gICAgbDRfcGdlbnRyeV90ICpwbDRlLCAqbDRzdGFydCA9 IG1hcF9kb21haW5fcGFnZShfbWZuKHBndGJsX3BmbikpOwotICAgIGwzX3BnZW50cnlfdCAqcGwz ZSA9IE5VTEw7Ci0gICAgbDJfcGdlbnRyeV90ICpwbDJlID0gTlVMTDsKLSAgICBsMV9wZ2VudHJ5 X3QgKnBsMWUgPSBOVUxMOwotCi0gICAgaWYgKCB2X3N0YXJ0IDw9IHZwaHlzbWFwX2VuZCAmJiB2 cGh5c21hcF9zdGFydCA8PSB2X2VuZCApCi0gICAgICAgIHBhbmljKCJET00wIFAtPk0gdGFibGUg b3ZlcmxhcHMgaW5pdGlhbCBtYXBwaW5nIik7Ci0KLSAgICB3aGlsZSAoIHZwaHlzbWFwX3N0YXJ0 IDwgdnBoeXNtYXBfZW5kICkKLSAgICB7Ci0gICAgICAgIGlmICggZC0+dG90X3BhZ2VzICsgKChy b3VuZF9wZ3VwKHZwaHlzbWFwX2VuZCkgLSB2cGh5c21hcF9zdGFydCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPj4gUEFHRV9TSElGVCkgKyAzID4gbnJfcGFnZXMgKQotICAgICAgICAg ICAgcGFuaWMoIkRvbTAgYWxsb2NhdGlvbiB0b28gc21hbGwgZm9yIGluaXRpYWwgUC0+TSB0YWJs ZSIpOwotCi0gICAgICAgIGlmICggcGwxZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsMWUpOwotICAgICAgICAgICAgcGwxZSA9IE5VTEw7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKCBwbDJlICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5tYXBfZG9tYWlu X3BhZ2UocGwyZSk7Ci0gICAgICAgICAgICBwbDJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAg ICBpZiAoIHBsM2UgKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShw bDNlKTsKLSAgICAgICAgICAgIHBsM2UgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHBsNGUg PSBsNHN0YXJ0ICsgbDRfdGFibGVfb2Zmc2V0KHZwaHlzbWFwX3N0YXJ0KTsKLSAgICAgICAgaWYg KCAhbDRlX2dldF9pbnRwdGUoKnBsNGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZSA9 IGFsbG9jX2RvbWhlYXBfcGFnZShkLCAwKTsKLSAgICAgICAgICAgIGlmICggIXBhZ2UgKQotICAg ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvKiBObyBtYXBwaW5nLCBQR0NfYWxs b2NhdGVkICsgcGFnZS10YWJsZSBwYWdlLiAqLwotICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5m byA9IFBHQ19hbGxvY2F0ZWQgfCAyOwotICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2lu Zm8gPSBQR1RfbDNfcGFnZV90YWJsZSB8IFBHVF92YWxpZGF0ZWQgfCAxOwotICAgICAgICAgICAg cGwzZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgY2xlYXJfcGFnZShw bDNlKTsKLSAgICAgICAgICAgICpwbDRlID0gbDRlX2Zyb21fcGFnZShwYWdlLCBMNF9QUk9UKTsK LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbDNlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4o bDRlX2dldF9wZm4oKnBsNGUpKSk7Ci0KLSAgICAgICAgcGwzZSArPSBsM190YWJsZV9vZmZzZXQo dnBoeXNtYXBfc3RhcnQpOwotICAgICAgICBpZiAoICFsM2VfZ2V0X2ludHB0ZSgqcGwzZSkgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIGNwdV9oYXNfcGFnZTFnYiAmJgotICAgICAgICAg ICAgICAgICAhKHZwaHlzbWFwX3N0YXJ0ICYgKCgxVUwgPDwgTDNfUEFHRVRBQkxFX1NISUZUKSAt IDEpKSAmJgotICAgICAgICAgICAgICAgICB2cGh5c21hcF9lbmQgPj0gdnBoeXNtYXBfc3RhcnQg KyAoMVVMIDw8IEwzX1BBR0VUQUJMRV9TSElGVCkgJiYKLSAgICAgICAgICAgICAgICAgKHBhZ2Ug PSBhbGxvY19kb21oZWFwX3BhZ2VzKGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMM19QQUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NISUZULAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpICE9IE5VTEwgKQotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICpwbDNlID0gbDNlX2Zyb21fcGFnZShwYWdlLCBMMV9Q Uk9UfF9QQUdFX0RJUlRZfF9QQUdFX1BTRSk7Ci0gICAgICAgICAgICAgICAgdnBoeXNtYXBfc3Rh cnQgKz0gMVVMIDw8IEwzX1BBR0VUQUJMRV9TSElGVDsKLSAgICAgICAgICAgICAgICBjb250aW51 ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggKHBhZ2UgPSBhbGxvY19kb21oZWFw X3BhZ2UoZCwgMCkpID09IE5VTEwgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgICAvKiBObyBtYXBwaW5nLCBQR0NfYWxsb2NhdGVkICsgcGFnZS10YWJsZSBwYWdlLiAqLwot ICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5mbyA9IFBHQ19hbGxvY2F0ZWQgfCAyOwotICAgICAg ICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDJfcGFnZV90YWJsZSB8IFBHVF92 YWxpZGF0ZWQgfCAxOwotICAgICAgICAgICAgcGwyZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2Up OwotICAgICAgICAgICAgY2xlYXJfcGFnZShwbDJlKTsKLSAgICAgICAgICAgICpwbDNlID0gbDNl X2Zyb21fcGFnZShwYWdlLCBMM19QUk9UKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg ICAgICAgICBwbDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obDNlX2dldF9wZm4oKnBsM2UpKSk7 Ci0KLSAgICAgICAgcGwyZSArPSBsMl90YWJsZV9vZmZzZXQodnBoeXNtYXBfc3RhcnQpOwotICAg ICAgICBpZiAoICFsMmVfZ2V0X2ludHB0ZSgqcGwyZSkgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBpZiAoICEodnBoeXNtYXBfc3RhcnQgJiAoKDFVTCA8PCBMMl9QQUdFVEFCTEVfU0hJRlQpIC0g MSkpICYmCi0gICAgICAgICAgICAgICAgIHZwaHlzbWFwX2VuZCA+PSB2cGh5c21hcF9zdGFydCAr ICgxVUwgPDwgTDJfUEFHRVRBQkxFX1NISUZUKSAmJgotICAgICAgICAgICAgICAgICAocGFnZSA9 IGFsbG9jX2RvbWhlYXBfcGFnZXMoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEwyX1BBR0VUQUJMRV9TSElGVCAtIFBBR0VfU0hJRlQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkgIT0gTlVMTCApCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgKnBsMmUgPSBsMmVfZnJvbV9wYWdlKHBhZ2UsIEwxX1BS T1R8X1BBR0VfRElSVFl8X1BBR0VfUFNFKTsKLSAgICAgICAgICAgICAgICBpZiAoIG9wdF9hbGxv d19zdXBlcnBhZ2UgKQotICAgICAgICAgICAgICAgICAgICBnZXRfc3VwZXJwYWdlKHBhZ2VfdG9f bWZuKHBhZ2UpLCBkKTsKLSAgICAgICAgICAgICAgICB2cGh5c21hcF9zdGFydCArPSAxVUwgPDwg TDJfUEFHRVRBQkxFX1NISUZUOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKCAocGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZShkLCAwKSkg PT0gTlVMTCApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8qIE5vIG1h cHBpbmcsIFBHQ19hbGxvY2F0ZWQgKyBwYWdlLXRhYmxlIHBhZ2UuICovCi0gICAgICAgICAgICBw YWdlLT5jb3VudF9pbmZvID0gUEdDX2FsbG9jYXRlZCB8IDI7Ci0gICAgICAgICAgICBwYWdlLT51 LmludXNlLnR5cGVfaW5mbyA9IFBHVF9sMV9wYWdlX3RhYmxlIHwgUEdUX3ZhbGlkYXRlZCB8IDE7 Ci0gICAgICAgICAgICBwbDFlID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7Ci0gICAgICAgICAg ICBjbGVhcl9wYWdlKHBsMWUpOwotICAgICAgICAgICAgKnBsMmUgPSBsMmVfZnJvbV9wYWdlKHBh Z2UsIEwyX1BST1QpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBsMWUg PSBtYXBfZG9tYWluX3BhZ2UoX21mbihsMmVfZ2V0X3BmbigqcGwyZSkpKTsKLQotICAgICAgICBw bDFlICs9IGwxX3RhYmxlX29mZnNldCh2cGh5c21hcF9zdGFydCk7Ci0gICAgICAgIEJVR19PTihs MWVfZ2V0X2ludHB0ZSgqcGwxZSkpOwotICAgICAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdl KGQsIDApOwotICAgICAgICBpZiAoICFwYWdlICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgICpwbDFlID0gbDFlX2Zyb21fcGFnZShwYWdlLCBMMV9QUk9UfF9QQUdFX0RJUlRZKTsKLSAg ICAgICAgdnBoeXNtYXBfc3RhcnQgKz0gUEFHRV9TSVpFOwotICAgICAgICB2cGh5c21hcF9zdGFy dCAmPSBQQUdFX01BU0s7Ci0gICAgfQotICAgIGlmICggIXBhZ2UgKQotICAgICAgICBwYW5pYygi Tm90IGVub3VnaCBSQU0gZm9yIERPTTAgUC0+TSB0YWJsZSIpOwotCi0gICAgaWYgKCBwbDFlICkK LSAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7Ci0gICAgaWYgKCBwbDJlICkKLSAgICAg ICAgdW5tYXBfZG9tYWluX3BhZ2UocGwyZSk7Ci0gICAgaWYgKCBwbDNlICkKLSAgICAgICAgdW5t YXBfZG9tYWluX3BhZ2UocGwzZSk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShsNHN0YXJ0KTsK LX0KLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfcGVybWlzc2lvbnMoc3RydWN0IGRvbWFpbiAq ZCkKK2ludCBfX2luaXQgZG9tMF9zZXR1cF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZG9tYWluICpkKQog ewogICAgIHVuc2lnbmVkIGxvbmcgbWZuOwogICAgIHVuc2lnbmVkIGludCBpOwpAQCAtNzQxLDYz MyArNDkxLDYgQEAgc3RhdGljIGludCBfX2luaXQgc2V0dXBfcGVybWlzc2lvbnMoc3RydWN0IGRv bWFpbiAqZCkKICAgICByZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVj dF9kb20wX3B2KAotICAgIHN0cnVjdCBkb21haW4gKmQsCi0gICAgY29uc3QgbW9kdWxlX3QgKmlt YWdlLCB1bnNpZ25lZCBsb25nIGltYWdlX2hlYWRyb29tLAotICAgIG1vZHVsZV90ICppbml0cmQs Ci0gICAgdm9pZCAqKCpib290c3RyYXBfbWFwKShjb25zdCBtb2R1bGVfdCAqKSwKLSAgICBjaGFy ICpjbWRsaW5lKQotewotICAgIGludCBpLCBjcHUsIHJjLCBjb21wYXRpYmxlLCBjb21wYXQzMiwg b3JkZXIsIG1hY2hpbmU7Ci0gICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3M7Ci0gICAgdW5z aWduZWQgbG9uZyBwZm4sIG1mbjsKLSAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwotICAgIHVu c2lnbmVkIGxvbmcgbnJfcHRfcGFnZXM7Ci0gICAgdW5zaWduZWQgbG9uZyBhbGxvY19zcGZuOwot ICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NfZXBmbjsKLSAgICB1bnNpZ25lZCBsb25nIGluaXRyZF9w Zm4gPSAtMSwgaW5pdHJkX21mbiA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLSAgICBz dHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gTlVMTDsKLSAgICBzdGFydF9pbmZvX3QgKnNpOwotICAg IHN0cnVjdCB2Y3B1ICp2ID0gZC0+dmNwdVswXTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFs dWU7Ci0gICAgdm9pZCAqaW1hZ2VfYmFzZSA9IGJvb3RzdHJhcF9tYXAoaW1hZ2UpOwotICAgIHVu c2lnbmVkIGxvbmcgaW1hZ2VfbGVuID0gaW1hZ2UtPm1vZF9lbmQ7Ci0gICAgdm9pZCAqaW1hZ2Vf c3RhcnQgPSBpbWFnZV9iYXNlICsgaW1hZ2VfaGVhZHJvb207Ci0gICAgdW5zaWduZWQgbG9uZyBp bml0cmRfbGVuID0gaW5pdHJkID8gaW5pdHJkLT5tb2RfZW5kIDogMDsKLSAgICBsNF9wZ2VudHJ5 X3QgKmw0dGFiID0gTlVMTCwgKmw0c3RhcnQgPSBOVUxMOwotICAgIGwzX3BnZW50cnlfdCAqbDN0 YWIgPSBOVUxMLCAqbDNzdGFydCA9IE5VTEw7Ci0gICAgbDJfcGdlbnRyeV90ICpsMnRhYiA9IE5V TEwsICpsMnN0YXJ0ID0gTlVMTDsKLSAgICBsMV9wZ2VudHJ5X3QgKmwxdGFiID0gTlVMTCwgKmwx c3RhcnQgPSBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBUaGlzIGZ1bGx5IGRlc2NyaWJlcyB0aGUg bWVtb3J5IGxheW91dCBvZiB0aGUgaW5pdGlhbCBkb21haW4uIEFsbCAKLSAgICAgKiAqX3N0YXJ0 IGFkZHJlc3MgYXJlIHBhZ2UtYWxpZ25lZCwgZXhjZXB0IHZfc3RhcnQgKGFuZCB2X2VuZCkgd2hp Y2ggYXJlIAotICAgICAqIHN1cGVycGFnZS1hbGlnbmVkLgotICAgICAqLwotICAgIHN0cnVjdCBl bGZfYmluYXJ5IGVsZjsKLSAgICBzdHJ1Y3QgZWxmX2RvbV9wYXJtcyBwYXJtczsKLSAgICB1bnNp Z25lZCBsb25nIHZrZXJuX3N0YXJ0OwotICAgIHVuc2lnbmVkIGxvbmcgdmtlcm5fZW5kOwotICAg IHVuc2lnbmVkIGxvbmcgdmluaXRyZF9zdGFydDsKLSAgICB1bnNpZ25lZCBsb25nIHZpbml0cmRf ZW5kOwotICAgIHVuc2lnbmVkIGxvbmcgdnBoeXNtYXBfc3RhcnQ7Ci0gICAgdW5zaWduZWQgbG9u ZyB2cGh5c21hcF9lbmQ7Ci0gICAgdW5zaWduZWQgbG9uZyB2c3RhcnRpbmZvX3N0YXJ0OwotICAg IHVuc2lnbmVkIGxvbmcgdnN0YXJ0aW5mb19lbmQ7Ci0gICAgdW5zaWduZWQgbG9uZyB2c3RhY2tf c3RhcnQ7Ci0gICAgdW5zaWduZWQgbG9uZyB2c3RhY2tfZW5kOwotICAgIHVuc2lnbmVkIGxvbmcg dnB0X3N0YXJ0OwotICAgIHVuc2lnbmVkIGxvbmcgdnB0X2VuZDsKLSAgICB1bnNpZ25lZCBsb25n IHZfc3RhcnQ7Ci0gICAgdW5zaWduZWQgbG9uZyB2X2VuZDsKLQotICAgIC8qIE1hY2hpbmUgYWRk cmVzcyBvZiBuZXh0IGNhbmRpZGF0ZSBwYWdlLXRhYmxlIHBhZ2UuICovCi0gICAgcGFkZHJfdCBt cHRfYWxsb2M7Ci0KLSAgICBwcmludGsoIioqKiBMT0FESU5HIERPTUFJTiAwICoqKlxuIik7Ci0K LSAgICBkLT5tYXhfcGFnZXMgPSB+MFU7Ci0KLSAgICBpZiAoIChyYyA9IGJ6aW1hZ2VfcGFyc2Uo aW1hZ2VfYmFzZSwgJmltYWdlX3N0YXJ0LCAmaW1hZ2VfbGVuKSkgIT0gMCApCi0gICAgICAgIHJl dHVybiByYzsKLQotICAgIGlmICggKHJjID0gZWxmX2luaXQoJmVsZiwgaW1hZ2Vfc3RhcnQsIGlt YWdlX2xlbikpICE9IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0jaWZkZWYgQ09ORklHX1ZFUkJP U0VfREVCVUcKLSAgICBlbGZfc2V0X3ZlcmJvc2UoJmVsZik7Ci0jZW5kaWYKLSAgICBlbGZfcGFy c2VfYmluYXJ5KCZlbGYpOwotICAgIGlmICggKHJjID0gZWxmX3hlbl9wYXJzZSgmZWxmLCAmcGFy bXMpKSAhPSAwICkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAvKiBjb21wYXRpYmlsaXR5IGNo ZWNrICovCi0gICAgY29tcGF0aWJsZSA9IDA7Ci0gICAgY29tcGF0MzIgICA9IDA7Ci0gICAgbWFj aGluZSA9IGVsZl91dmFsKCZlbGYsIGVsZi5laGRyLCBlX21hY2hpbmUpOwotICAgIHByaW50aygi IFhlbiAga2VybmVsOiA2NC1iaXQsIGxzYiwgY29tcGF0MzJcbiIpOwotICAgIGlmIChlbGZfMzJi aXQoJmVsZikgJiYgcGFybXMucGFlID09IFhFTl9QQUVfQklNT0RBTCkKLSAgICAgICAgcGFybXMu cGFlID0gWEVOX1BBRV9FWFRDUjM7Ci0gICAgaWYgKGVsZl8zMmJpdCgmZWxmKSAmJiBwYXJtcy5w YWUgJiYgbWFjaGluZSA9PSBFTV8zODYpCi0gICAgewotICAgICAgICBjb21wYXQzMiA9IDE7Ci0g ICAgICAgIGNvbXBhdGlibGUgPSAxOwotICAgIH0KLSAgICBpZiAoZWxmXzY0Yml0KCZlbGYpICYm IG1hY2hpbmUgPT0gRU1fWDg2XzY0KQotICAgICAgICBjb21wYXRpYmxlID0gMTsKLSAgICBwcmlu dGsoIiBEb20wIGtlcm5lbDogJXMlcywgJXMsIHBhZGRyICUjIiBQUkl4NjQgIiAtPiAlIyIgUFJJ eDY0ICJcbiIsCi0gICAgICAgICAgIGVsZl82NGJpdCgmZWxmKSA/ICI2NC1iaXQiIDogIjMyLWJp dCIsCi0gICAgICAgICAgIHBhcm1zLnBhZSAgICAgICA/ICIsIFBBRSIgIDogIiIsCi0gICAgICAg ICAgIGVsZl9tc2IoJmVsZikgICA/ICJtc2IiICAgIDogImxzYiIsCi0gICAgICAgICAgIGVsZi5w c3RhcnQsIGVsZi5wZW5kKTsKLSAgICBpZiAoIGVsZi5ic2Rfc3ltdGFiX3BzdGFydCApCi0gICAg ICAgIHByaW50aygiIERvbTAgc3ltYm9sIG1hcCAlIyIgUFJJeDY0ICIgLT4gJSMiIFBSSXg2NCAi XG4iLAotICAgICAgICAgICAgICAgZWxmLmJzZF9zeW10YWJfcHN0YXJ0LCBlbGYuYnNkX3N5bXRh Yl9wZW5kKTsKLQotICAgIGlmICggIWNvbXBhdGlibGUgKQotICAgIHsKLSAgICAgICAgcHJpbnRr KCJNaXNtYXRjaCBiZXR3ZWVuIFhlbiBhbmQgRE9NMCBrZXJuZWxcbiIpOwotICAgICAgICByYyA9 IC1FSU5WQUw7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGlmICggcGFybXMuZWxm X25vdGVzW1hFTl9FTEZOT1RFX1NVUFBPUlRFRF9GRUFUVVJFU10udHlwZSAhPSBYRU5fRU5UX05P TkUgKQotICAgIHsKLSAgICAgICAgaWYgKCAhdGVzdF9iaXQoWEVORkVBVF9kb20wLCBwYXJtcy5m X3N1cHBvcnRlZCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGsoIktlcm5lbCBkb2Vz IG5vdCBzdXBwb3J0IERvbTAgb3BlcmF0aW9uXG4iKTsKLSAgICAgICAgICAgIHJjID0gLUVJTlZB TDsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBj b21wYXQzMiApCi0gICAgewotICAgICAgICBkLT5hcmNoLmlzXzMyYml0X3B2ID0gZC0+YXJjaC5o YXNfMzJiaXRfc2hpbmZvID0gMTsKLSAgICAgICAgdi0+dmNwdV9pbmZvID0gKHZvaWQgKikmZC0+ c2hhcmVkX2luZm8tPmNvbXBhdC52Y3B1X2luZm9bMF07Ci0gICAgICAgIGlmICggc2V0dXBfY29t cGF0X2FyZ194bGF0KHYpICE9IDAgKQotICAgICAgICAgICAgQlVHKCk7Ci0gICAgfQotCi0gICAg bnJfcGFnZXMgPSBjb21wdXRlX2RvbTBfbnJfcGFnZXMoZCwgJnBhcm1zLCBpbml0cmRfbGVuKTsK LQotICAgIGlmICggcGFybXMucGFlID09IFhFTl9QQUVfRVhUQ1IzICkKLSAgICAgICAgICAgIHNl dF9iaXQoVk1BU1NUX1RZUEVfcGFlX2V4dGVuZGVkX2NyMywgJmQtPnZtX2Fzc2lzdCk7Ci0KLSAg ICBpZiAoIChwYXJtcy52aXJ0X2h2X3N0YXJ0X2xvdyAhPSBVTlNFVF9BRERSKSAmJiBlbGZfMzJi aXQoJmVsZikgKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gKDFVTCA8PCBM Ml9QQUdFVEFCTEVfU0hJRlQpIC0gMTsKLSAgICAgICAgdmFsdWUgPSAocGFybXMudmlydF9odl9z dGFydF9sb3cgKyBtYXNrKSAmIH5tYXNrOwotICAgICAgICBCVUdfT04oIWlzX3B2XzMyYml0X2Rv bWFpbihkKSk7Ci0gICAgICAgIGlmICggdmFsdWUgPiBfX0hZUEVSVklTT1JfQ09NUEFUX1ZJUlRf U1RBUlQgKQotICAgICAgICAgICAgcGFuaWMoIkRvbWFpbiAwIGV4cGVjdHMgdG9vIGhpZ2ggYSBo eXBlcnZpc29yIHN0YXJ0IGFkZHJlc3MiKTsKLSAgICAgICAgSFlQRVJWSVNPUl9DT01QQVRfVklS VF9TVEFSVChkKSA9Ci0gICAgICAgICAgICBtYXhfdCh1bnNpZ25lZCBpbnQsIG0ycF9jb21wYXRf dnN0YXJ0LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKCAocGFybXMucDJtX2Jhc2UgIT0gVU5T RVRfQUREUikgJiYgZWxmXzMyYml0KCZlbGYpICkKLSAgICB7Ci0gICAgICAgIHByaW50ayhYRU5M T0dfV0FSTklORyAiUDJNIHRhYmxlIGJhc2UgaWdub3JlZFxuIik7Ci0gICAgICAgIHBhcm1zLnAy bV9iYXNlID0gVU5TRVRfQUREUjsKLSAgICB9Ci0KLSAgICBkb21haW5fc2V0X2FsbG9jX2JpdHNp emUoZCk7Ci0KLSAgICAvKgotICAgICAqIFdoeSBkbyB3ZSBuZWVkIHRoaXM/IFRoZSBudW1iZXIg b2YgcGFnZS10YWJsZSBmcmFtZXMgZGVwZW5kcyBvbiB0aGUgCi0gICAgICogc2l6ZSBvZiB0aGUg Ym9vdHN0cmFwIGFkZHJlc3Mgc3BhY2UuIEJ1dCB0aGUgc2l6ZSBvZiB0aGUgYWRkcmVzcyBzcGFj ZSAKLSAgICAgKiBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgcGFnZS10YWJsZSBmcmFtZXMgKHNp bmNlIGVhY2ggb25lIGlzIG1hcHBlZCAKLSAgICAgKiByZWFkLW9ubHkpLiBXZSBoYXZlIGEgcGFp ciBvZiBzaW11bHRhbmVvdXMgZXF1YXRpb25zIGluIHR3byB1bmtub3ducywgCi0gICAgICogd2hp Y2ggd2Ugc29sdmUgYnkgZXhoYXVzdGl2ZSBzZWFyY2guCi0gICAgICovCi0gICAgdl9zdGFydCAg ICAgICAgICA9IHBhcm1zLnZpcnRfYmFzZTsKLSAgICB2a2Vybl9zdGFydCAgICAgID0gcGFybXMu dmlydF9rc3RhcnQ7Ci0gICAgdmtlcm5fZW5kICAgICAgICA9IHBhcm1zLnZpcnRfa2VuZDsKLSAg ICBpZiAoIHBhcm1zLnVubWFwcGVkX2luaXRyZCApCi0gICAgewotICAgICAgICB2aW5pdHJkX3N0 YXJ0ICA9IHZpbml0cmRfZW5kID0gMDsKLSAgICAgICAgdnBoeXNtYXBfc3RhcnQgPSByb3VuZF9w Z3VwKHZrZXJuX2VuZCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZpbml0cmRf c3RhcnQgID0gcm91bmRfcGd1cCh2a2Vybl9lbmQpOwotICAgICAgICB2aW5pdHJkX2VuZCAgICA9 IHZpbml0cmRfc3RhcnQgKyBpbml0cmRfbGVuOwotICAgICAgICB2cGh5c21hcF9zdGFydCA9IHJv dW5kX3BndXAodmluaXRyZF9lbmQpOwotICAgIH0KLSAgICB2cGh5c21hcF9lbmQgICAgID0gdnBo eXNtYXBfc3RhcnQgKyAobnJfcGFnZXMgKiAoIWlzX3B2XzMyYml0X2RvbWFpbihkKSA/Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1 bnNpZ25lZCBsb25nKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZih1bnNpZ25lZCBpbnQpKSk7Ci0gICAgaWYgKCBwYXJtcy5wMm1f YmFzZSAhPSBVTlNFVF9BRERSICkKLSAgICAgICAgdnBoeXNtYXBfZW5kID0gdnBoeXNtYXBfc3Rh cnQ7Ci0gICAgdnN0YXJ0aW5mb19zdGFydCA9IHJvdW5kX3BndXAodnBoeXNtYXBfZW5kKTsKLSAg ICB2c3RhcnRpbmZvX2VuZCAgID0gKHZzdGFydGluZm9fc3RhcnQgKwotICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzdGFydF9pbmZvKSArCi0gICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2Yoc3RydWN0IGRvbTBfdmdhX2NvbnNvbGVfaW5mbykpOwotCi0gICAgdnB0X3N0 YXJ0ICAgICAgICA9IHJvdW5kX3BndXAodnN0YXJ0aW5mb19lbmQpOwotICAgIGZvciAoIG5yX3B0 X3BhZ2VzID0gMjsgOyBucl9wdF9wYWdlcysrICkKLSAgICB7Ci0gICAgICAgIHZwdF9lbmQgICAg ICAgICAgPSB2cHRfc3RhcnQgKyAobnJfcHRfcGFnZXMgKiBQQUdFX1NJWkUpOwotICAgICAgICB2 c3RhY2tfc3RhcnQgICAgID0gdnB0X2VuZDsKLSAgICAgICAgdnN0YWNrX2VuZCAgICAgICA9IHZz dGFja19zdGFydCArIFBBR0VfU0laRTsKLSAgICAgICAgdl9lbmQgICAgICAgICAgICA9ICh2c3Rh Y2tfZW5kICsgKDFVTDw8MjIpLTEpICYgfigoMVVMPDwyMiktMSk7Ci0gICAgICAgIGlmICggKHZf ZW5kIC0gdnN0YWNrX2VuZCkgPCAoNTEyVUwgPDwgMTApICkKLSAgICAgICAgICAgIHZfZW5kICs9 IDFVTCA8PCAyMjsgLyogQWRkIGV4dHJhIDRNQiB0byBnZXQgPj0gNTEya0IgcGFkZGluZy4gKi8K LSNkZWZpbmUgTlIoX2wsX2gsX3MpIFwKLSAgICAoKCgoKF9oKSArICgoMVVMPDwoX3MpKS0xKSkg JiB+KCgxVUw8PChfcykpLTEpKSAtIFwKLSAgICAgICAoKF9sKSAmIH4oKDFVTDw8KF9zKSktMSkp KSA+PiAoX3MpKQotICAgICAgICBpZiAoICghaXNfcHZfMzJiaXRfZG9tYWluKGQpICsgLyogIyBM NCAqLwotICAgICAgICAgICAgICBOUih2X3N0YXJ0LCB2X2VuZCwgTDRfUEFHRVRBQkxFX1NISUZU KSArIC8qICMgTDMgKi8KLSAgICAgICAgICAgICAgKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPwot ICAgICAgICAgICAgICAgTlIodl9zdGFydCwgdl9lbmQsIEwzX1BBR0VUQUJMRV9TSElGVCkgOiAv KiAjIEwyICovCi0gICAgICAgICAgICAgICA0KSArIC8qICMgY29tcGF0IEwyICovCi0gICAgICAg ICAgICAgIE5SKHZfc3RhcnQsIHZfZW5kLCBMMl9QQUdFVEFCTEVfU0hJRlQpKSAgLyogIyBMMSAq LwotICAgICAgICAgICAgIDw9IG5yX3B0X3BhZ2VzICkKLSAgICAgICAgICAgIGJyZWFrOwotICAg IH0KLQotICAgIGNvdW50ID0gdl9lbmQgLSB2X3N0YXJ0OwotICAgIGlmICggdmluaXRyZF9zdGFy dCApCi0gICAgICAgIGNvdW50IC09IFBBR0VfQUxJR04oaW5pdHJkX2xlbik7Ci0gICAgb3JkZXIg PSBnZXRfb3JkZXJfZnJvbV9ieXRlcyhjb3VudCk7Ci0gICAgaWYgKCAoMVVMIDw8IG9yZGVyKSAr IFBGTl9VUChpbml0cmRfbGVuKSA+IG5yX3BhZ2VzICkKLSAgICAgICAgcGFuaWMoIkRvbWFpbiAw IGFsbG9jYXRpb24gaXMgdG9vIHNtYWxsIGZvciBrZXJuZWwgaW1hZ2UiKTsKLQotICAgIGlmICgg cGFybXMucDJtX2Jhc2UgIT0gVU5TRVRfQUREUiApCi0gICAgewotICAgICAgICB2cGh5c21hcF9z dGFydCA9IHBhcm1zLnAybV9iYXNlOwotICAgICAgICB2cGh5c21hcF9lbmQgICA9IHZwaHlzbWFw X3N0YXJ0ICsgbnJfcGFnZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci0gICAgfQotICAgIHBh Z2UgPSBhbGxvY19kb21oZWFwX3BhZ2VzKGQsIG9yZGVyLCAwKTsKLSAgICBpZiAoIHBhZ2UgPT0g TlVMTCApCi0gICAgICAgIHBhbmljKCJOb3QgZW5vdWdoIFJBTSBmb3IgZG9tYWluIDAgYWxsb2Nh dGlvbiIpOwotICAgIGFsbG9jX3NwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBhbGxvY19l cGZuID0gYWxsb2Nfc3BmbiArIGQtPnRvdF9wYWdlczsKLQotICAgIGlmICggaW5pdHJkX2xlbiAp Ci0gICAgewotICAgICAgICBpbml0cmRfcGZuID0gdmluaXRyZF9zdGFydCA/Ci0gICAgICAgICAg ICAgICAgICAgICAodmluaXRyZF9zdGFydCAtIHZfc3RhcnQpID4+IFBBR0VfU0hJRlQgOgotICAg ICAgICAgICAgICAgICAgICAgZC0+dG90X3BhZ2VzOwotICAgICAgICBpbml0cmRfbWZuID0gbWZu ID0gaW5pdHJkLT5tb2Rfc3RhcnQ7Ci0gICAgICAgIGNvdW50ID0gUEZOX1VQKGluaXRyZF9sZW4p OwotICAgICAgICBpZiAoIGQtPmFyY2gucGh5c2FkZHJfYml0c2l6ZSAmJgotICAgICAgICAgICAg ICgobWZuICsgY291bnQgLSAxKSA+PiAoZC0+YXJjaC5waHlzYWRkcl9iaXRzaXplIC0gUEFHRV9T SElGVCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgb3JkZXIgPSBnZXRfb3JkZXJfZnJvbV9w YWdlcyhjb3VudCk7Ci0gICAgICAgICAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBv cmRlciwgMCk7Ci0gICAgICAgICAgICBpZiAoICFwYWdlICkKLSAgICAgICAgICAgICAgICBwYW5p YygiTm90IGVub3VnaCBSQU0gZm9yIGRvbWFpbiAwIGluaXRyZCIpOwotICAgICAgICAgICAgZm9y ICggY291bnQgPSAtY291bnQ7IG9yZGVyLS07ICkKLSAgICAgICAgICAgICAgICBpZiAoIGNvdW50 ICYgKDFVTCA8PCBvcmRlcikgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg ICAgZnJlZV9kb21oZWFwX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKLSAgICAgICAgICAgICAgICAgICAg cGFnZSArPSAxVUwgPDwgb3JkZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgbWVt Y3B5KHBhZ2VfdG9fdmlydChwYWdlKSwgbWZuX3RvX3ZpcnQoaW5pdHJkLT5tb2Rfc3RhcnQpLAot ICAgICAgICAgICAgICAgICAgIGluaXRyZF9sZW4pOwotICAgICAgICAgICAgbXB0X2FsbG9jID0g KHBhZGRyX3QpaW5pdHJkLT5tb2Rfc3RhcnQgPDwgUEFHRV9TSElGVDsKLSAgICAgICAgICAgIGlu aXRfZG9taGVhcF9wYWdlcyhtcHRfYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbXB0X2FsbG9jICsgUEFHRV9BTElHTihpbml0cmRfbGVuKSk7Ci0gICAgICAgICAgICBpbml0 cmQtPm1vZF9zdGFydCA9IGluaXRyZF9tZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICAgICAg fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICggY291bnQtLSAp Ci0gICAgICAgICAgICAgICAgaWYgKCBhc3NpZ25fcGFnZXMoZCwgbWZuX3RvX3BhZ2UobWZuKysp LCAwLCAwKSApCi0gICAgICAgICAgICAgICAgICAgIEJVRygpOwotICAgICAgICB9Ci0gICAgICAg IGluaXRyZC0+bW9kX2VuZCA9IDA7Ci0gICAgfQotCi0gICAgcHJpbnRrKCJQSFlTSUNBTCBNRU1P UlkgQVJSQU5HRU1FTlQ6XG4iCi0gICAgICAgICAgICIgRG9tMCBhbGxvYy46ICAgJSJQUklwYWRk ciItPiUiUFJJcGFkZHIsCi0gICAgICAgICAgIHBmbl90b19wYWRkcihhbGxvY19zcGZuKSwgcGZu X3RvX3BhZGRyKGFsbG9jX2VwZm4pKTsKLSAgICBpZiAoIGQtPnRvdF9wYWdlcyA8IG5yX3BhZ2Vz ICkKLSAgICAgICAgcHJpbnRrKCIgKCVsdSBwYWdlcyB0byBiZSBhbGxvY2F0ZWQpIiwKLSAgICAg ICAgICAgICAgIG5yX3BhZ2VzIC0gZC0+dG90X3BhZ2VzKTsKLSAgICBpZiAoIGluaXRyZCApCi0g ICAgewotICAgICAgICBtcHRfYWxsb2MgPSAocGFkZHJfdClpbml0cmQtPm1vZF9zdGFydCA8PCBQ QUdFX1NISUZUOwotICAgICAgICBwcmludGsoIlxuIEluaXQuIHJhbWRpc2s6ICUiUFJJcGFkZHIi LT4lIlBSSXBhZGRyLAotICAgICAgICAgICAgICAgbXB0X2FsbG9jLCBtcHRfYWxsb2MgKyBpbml0 cmRfbGVuKTsKLSAgICB9Ci0gICAgcHJpbnRrKCJcblZJUlRVQUwgTUVNT1JZIEFSUkFOR0VNRU5U OlxuIgotICAgICAgICAgICAiIExvYWRlZCBrZXJuZWw6ICVwLT4lcFxuIgotICAgICAgICAgICAi IEluaXQuIHJhbWRpc2s6ICVwLT4lcFxuIgotICAgICAgICAgICAiIFBoeXMtTWFjaCBtYXA6ICVw LT4lcFxuIgotICAgICAgICAgICAiIFN0YXJ0IGluZm86ICAgICVwLT4lcFxuIgotICAgICAgICAg ICAiIFBhZ2UgdGFibGVzOiAgICVwLT4lcFxuIgotICAgICAgICAgICAiIEJvb3Qgc3RhY2s6ICAg ICVwLT4lcFxuIgotICAgICAgICAgICAiIFRPVEFMOiAgICAgICAgICVwLT4lcFxuIiwKLSAgICAg ICAgICAgX3Aodmtlcm5fc3RhcnQpLCBfcCh2a2Vybl9lbmQpLAotICAgICAgICAgICBfcCh2aW5p dHJkX3N0YXJ0KSwgX3AodmluaXRyZF9lbmQpLAotICAgICAgICAgICBfcCh2cGh5c21hcF9zdGFy dCksIF9wKHZwaHlzbWFwX2VuZCksCi0gICAgICAgICAgIF9wKHZzdGFydGluZm9fc3RhcnQpLCBf cCh2c3RhcnRpbmZvX2VuZCksCi0gICAgICAgICAgIF9wKHZwdF9zdGFydCksIF9wKHZwdF9lbmQp LAotICAgICAgICAgICBfcCh2c3RhY2tfc3RhcnQpLCBfcCh2c3RhY2tfZW5kKSwKLSAgICAgICAg ICAgX3Aodl9zdGFydCksIF9wKHZfZW5kKSk7Ci0gICAgcHJpbnRrKCIgRU5UUlkgQUREUkVTUzog JXBcbiIsIF9wKHBhcm1zLnZpcnRfZW50cnkpKTsKLQotICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0 aXJxcygpOwotCi0gICAgbXB0X2FsbG9jID0gKHZwdF9zdGFydCAtIHZfc3RhcnQpICsgcGZuX3Rv X3BhZGRyKGFsbG9jX3NwZm4pOwotICAgIGlmICggdmluaXRyZF9zdGFydCApCi0gICAgICAgIG1w dF9hbGxvYyAtPSBQQUdFX0FMSUdOKGluaXRyZF9sZW4pOwotCi0gICAgLyogT3ZlcmxhcCB3aXRo IFhlbiBwcm90ZWN0ZWQgYXJlYT8gKi8KLSAgICBpZiAoICFpc19wdl8zMmJpdF9kb21haW4oZCkg PwotICAgICAgICAgKCh2X3N0YXJ0IDwgSFlQRVJWSVNPUl9WSVJUX0VORCkgJiYKLSAgICAgICAg ICAodl9lbmQgPiBIWVBFUlZJU09SX1ZJUlRfU1RBUlQpKSA6Ci0gICAgICAgICAodl9lbmQgPiBI WVBFUlZJU09SX0NPTVBBVF9WSVJUX1NUQVJUKGQpKSApCi0gICAgewotICAgICAgICBwcmludGso IkRPTTAgaW1hZ2Ugb3ZlcmxhcHMgd2l0aCBYZW4gcHJpdmF0ZSBhcmVhLlxuIik7Ci0gICAgICAg IHJjID0gLUVJTlZBTDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgaWYgKCBpc19w dl8zMmJpdF9kb21haW4oZCkgKQotICAgIHsKLSAgICAgICAgdi0+YXJjaC5wdl92Y3B1LmZhaWxz YWZlX2NhbGxiYWNrX2NzID0gRkxBVF9DT01QQVRfS0VSTkVMX0NTOwotICAgICAgICB2LT5hcmNo LnB2X3ZjcHUuZXZlbnRfY2FsbGJhY2tfY3MgICAgPSBGTEFUX0NPTVBBVF9LRVJORUxfQ1M7Ci0g ICAgfQotCi0gICAgLyogV0FSTklORzogVGhlIG5ldyBkb21haW4gbXVzdCBoYXZlIGl0cyAncHJv Y2Vzc29yJyBmaWVsZCBmaWxsZWQgaW4hICovCi0gICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWlu KGQpICkKLSAgICB7Ci0gICAgICAgIG1hZGRyX3RvX3BhZ2UobXB0X2FsbG9jKS0+dS5pbnVzZS50 eXBlX2luZm8gPSBQR1RfbDRfcGFnZV90YWJsZTsKLSAgICAgICAgbDRzdGFydCA9IGw0dGFiID0g X192YShtcHRfYWxsb2MpOyBtcHRfYWxsb2MgKz0gUEFHRV9TSVpFOwotICAgIH0KLSAgICBlbHNl Ci0gICAgewotICAgICAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlKGQsIE1FTUZfbm9fb3du ZXIpOwotICAgICAgICBpZiAoICFwYWdlICkKLSAgICAgICAgICAgIHBhbmljKCJOb3QgZW5vdWdo IFJBTSBmb3IgZG9tYWluIDAgUE1MNCIpOwotICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5m byA9IFBHVF9sNF9wYWdlX3RhYmxlfFBHVF92YWxpZGF0ZWR8MTsKLSAgICAgICAgbDRzdGFydCA9 IGw0dGFiID0gcGFnZV90b192aXJ0KHBhZ2UpOwotICAgICAgICBtYWRkcl90b19wYWdlKG1wdF9h bGxvYyktPnUuaW51c2UudHlwZV9pbmZvID0gUEdUX2wzX3BhZ2VfdGFibGU7Ci0gICAgICAgIGwz c3RhcnQgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJWkU7Ci0gICAgfQot ICAgIGNsZWFyX3BhZ2UobDR0YWIpOwotICAgIGluaXRfZ3Vlc3RfbDRfdGFibGUobDR0YWIsIGQs IDApOwotICAgIHYtPmFyY2guZ3Vlc3RfdGFibGUgPSBwYWdldGFibGVfZnJvbV9wYWRkcihfX3Bh KGw0c3RhcnQpKTsKLSAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSApCi0gICAgICAgIHYt PmFyY2guZ3Vlc3RfdGFibGVfdXNlciA9IHYtPmFyY2guZ3Vlc3RfdGFibGU7Ci0KLSAgICBsNHRh YiArPSBsNF90YWJsZV9vZmZzZXQodl9zdGFydCk7Ci0gICAgcGZuID0gYWxsb2Nfc3BmbjsKLSAg ICBmb3IgKCBjb3VudCA9IDA7IGNvdW50IDwgKCh2X2VuZC12X3N0YXJ0KT4+UEFHRV9TSElGVCk7 IGNvdW50KysgKQotICAgIHsKLSAgICAgICAgaWYgKCAhKCh1bnNpZ25lZCBsb25nKWwxdGFiICYg KFBBR0VfU0laRS0xKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBtYWRkcl90b19wYWdlKG1w dF9hbGxvYyktPnUuaW51c2UudHlwZV9pbmZvID0gUEdUX2wxX3BhZ2VfdGFibGU7Ci0gICAgICAg ICAgICBsMXN0YXJ0ID0gbDF0YWIgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyArPSBQQUdF X1NJWkU7Ci0gICAgICAgICAgICBjbGVhcl9wYWdlKGwxdGFiKTsKLSAgICAgICAgICAgIGlmICgg Y291bnQgPT0gMCApCi0gICAgICAgICAgICAgICAgbDF0YWIgKz0gbDFfdGFibGVfb2Zmc2V0KHZf c3RhcnQpOwotICAgICAgICAgICAgaWYgKCAhKCh1bnNpZ25lZCBsb25nKWwydGFiICYgKFBBR0Vf U0laRS0xKSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1hZGRyX3RvX3BhZ2Uo bXB0X2FsbG9jKS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDJfcGFnZV90YWJsZTsKLSAgICAg ICAgICAgICAgICBsMnN0YXJ0ID0gbDJ0YWIgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyAr PSBQQUdFX1NJWkU7Ci0gICAgICAgICAgICAgICAgY2xlYXJfcGFnZShsMnRhYik7Ci0gICAgICAg ICAgICAgICAgaWYgKCBjb3VudCA9PSAwICkKLSAgICAgICAgICAgICAgICAgICAgbDJ0YWIgKz0g bDJfdGFibGVfb2Zmc2V0KHZfc3RhcnQpOwotICAgICAgICAgICAgICAgIGlmICggISgodW5zaWdu ZWQgbG9uZylsM3RhYiAmIChQQUdFX1NJWkUtMSkpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICggY291bnQgfHwgIWwzc3RhcnQgKQotICAgICAgICAgICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWRkcl90b19wYWdlKG1wdF9hbGxvYykt PnUuaW51c2UudHlwZV9pbmZvID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1RfbDNf cGFnZV90YWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGwzc3RhcnQgPSBfX3ZhKG1wdF9h bGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJWkU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgbDN0YWIgPSBsM3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICBj bGVhcl9wYWdlKGwzdGFiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3VudCA9PSAwICkK LSAgICAgICAgICAgICAgICAgICAgICAgIGwzdGFiICs9IGwzX3RhYmxlX29mZnNldCh2X3N0YXJ0 KTsKLSAgICAgICAgICAgICAgICAgICAgKmw0dGFiID0gbDRlX2Zyb21fcGFkZHIoX19wYShsM3N0 YXJ0KSwgTDRfUFJPVCk7Ci0gICAgICAgICAgICAgICAgICAgIGw0dGFiKys7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICpsM3RhYiA9IGwzZV9mcm9tX3BhZGRyKF9fcGEobDJz dGFydCksIEwzX1BST1QpOwotICAgICAgICAgICAgICAgIGwzdGFiKys7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICAqbDJ0YWIgPSBsMmVfZnJvbV9wYWRkcihfX3BhKGwxc3RhcnQpLCBMMl9Q Uk9UKTsKLSAgICAgICAgICAgIGwydGFiKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBjb3Vu dCA8IGluaXRyZF9wZm4gfHwgY291bnQgPj0gaW5pdHJkX3BmbiArIFBGTl9VUChpbml0cmRfbGVu KSApCi0gICAgICAgICAgICBtZm4gPSBwZm4rKzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg bWZuID0gaW5pdHJkX21mbisrOwotICAgICAgICAqbDF0YWIgPSBsMWVfZnJvbV9wZm4obWZuLCAo IWlzX3B2XzMyYml0X2RvbWFpbihkKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMMV9QUk9UIDogQ09NUEFUX0wxX1BST1QpKTsKLSAgICAgICAgbDF0YWIrKzsKLQotICAg ICAgICBpZiAoICFwYWdpbmdfbW9kZV90cmFuc2xhdGUoZCkgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKLSAgICAgICAgICAgIGlmICggIXBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICYmCi0gICAgICAgICAgICAgICAgICFnZXRfcGFnZV9hbmRfdHlwZShw YWdlLCBkLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQotICAgICAgICAgICAgICAgIEJVRygpOwotICAg ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQotICAgIHsK LSAgICAgICAgLyogRW5zdXJlIHRoZSBmaXJzdCBmb3VyIEwzIGVudHJpZXMgYXJlIGFsbCBwb3B1 bGF0ZWQuICovCi0gICAgICAgIGZvciAoIGkgPSAwLCBsM3RhYiA9IGwzc3RhcnQ7IGkgPCA0OyAr K2ksICsrbDN0YWIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICFsM2VfZ2V0X2ludHB0 ZSgqbDN0YWIpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtYWRkcl90b19wYWdl KG1wdF9hbGxvYyktPnUuaW51c2UudHlwZV9pbmZvID0gUEdUX2wyX3BhZ2VfdGFibGU7Ci0gICAg ICAgICAgICAgICAgbDJ0YWIgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJ WkU7Ci0gICAgICAgICAgICAgICAgY2xlYXJfcGFnZShsMnRhYik7Ci0gICAgICAgICAgICAgICAg KmwzdGFiID0gbDNlX2Zyb21fcGFkZHIoX19wYShsMnRhYiksIEwzX1BST1QpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKCBpID09IDMgKQotICAgICAgICAgICAgICAgIGwzZV9nZXRf cGFnZSgqbDN0YWIpLT51LmludXNlLnR5cGVfaW5mbyB8PSBQR1RfcGFlX3hlbl9sMjsKLSAgICAg ICAgfQotICAgICAgICAvKiBJbnN0YWxsIHJlYWQtb25seSBndWVzdCB2aXNpYmxlIE1QVCBtYXBw aW5nLiAqLwotICAgICAgICBsMnRhYiA9IGwzZV90b19sMmUobDNzdGFydFszXSk7Ci0gICAgICAg IG1lbWNweSgmbDJ0YWJbQ09NUEFUX0wyX1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVChkKV0sCi0g ICAgICAgICAgICAgICAmY29tcGF0X2lkbGVfcGdfdGFibGVfbDJbbDJfdGFibGVfb2Zmc2V0KEhJ Uk9fQ09NUEFUX01QVF9WSVJUX1NUQVJUKV0sCi0gICAgICAgICAgICAgICBDT01QQVRfTDJfUEFH RVRBQkxFX1hFTl9TTE9UUyhkKSAqIHNpemVvZigqbDJ0YWIpKTsKLSAgICB9Ci0KLSAgICAvKiBQ YWdlcyB0aGF0IGFyZSBwYXJ0IG9mIHBhZ2UgdGFibGVzIG11c3QgYmUgcmVhZCBvbmx5LiAqLwot ICAgIGlmICAoIGlzX3B2X2RvbWFpbihkKSApCi0gICAgICAgIG1hcmtfcHZfcHRfcGFnZXNfcmRv bmx5KGQsIGw0c3RhcnQsIHZwdF9zdGFydCwgbnJfcHRfcGFnZXMpOwotCi0gICAgLyogTWFzayBh bGwgdXBjYWxscy4uLiAqLwotICAgIGZvciAoIGkgPSAwOyBpIDwgWEVOX0xFR0FDWV9NQVhfVkNQ VVM7IGkrKyApCi0gICAgICAgIHNoYXJlZF9pbmZvKGQsIHZjcHVfaW5mb1tpXS5ldnRjaG5fdXBj YWxsX21hc2spID0gMTsKLQotICAgIHByaW50aygiRG9tMCBoYXMgbWF4aW11bSAldSBWQ1BVc1xu IiwgZC0+bWF4X3ZjcHVzKTsKLQotICAgIGNwdSA9IHYtPnByb2Nlc3NvcjsKLSAgICBmb3IgKCBp ID0gMTsgaSA8IGQtPm1heF92Y3B1czsgaSsrICkKLSAgICB7Ci0gICAgICAgIGNwdSA9IGNwdW1h c2tfY3ljbGUoY3B1LCAmZG9tMF9jcHVzKTsKLSAgICAgICAgc2V0dXBfZG9tMF92Y3B1KGQsIGks IGNwdSk7Ci0gICAgfQotCi0gICAgZC0+YXJjaC5wYWdpbmcubW9kZSA9IDA7Ci0KLSAgICAvKiBT ZXQgdXAgQ1IzIHZhbHVlIGZvciB3cml0ZV9wdGJhc2UgKi8KLSAgICBpZiAoIHBhZ2luZ19tb2Rl X2VuYWJsZWQoZCkgKQotICAgICAgICBwYWdpbmdfdXBkYXRlX3BhZ2luZ19tb2Rlcyh2KTsKLSAg ICBlbHNlCi0gICAgICAgIHVwZGF0ZV9jcjModik7Ci0KLSAgICAvKiBXZSBydW4gb24gZG9tMCdz IHBhZ2UgdGFibGVzIGZvciB0aGUgZmluYWwgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4gKi8K LSAgICB3cml0ZV9wdGJhc2Uodik7Ci0gICAgbWFwY2FjaGVfb3ZlcnJpZGVfY3VycmVudCh2KTsK LQotICAgIC8qIENvcHkgdGhlIE9TIGltYWdlIGFuZCBmcmVlIHRlbXBvcmFyeSBidWZmZXIuICov Ci0gICAgZWxmLmRlc3RfYmFzZSA9ICh2b2lkKil2a2Vybl9zdGFydDsKLSAgICBlbGYuZGVzdF9z aXplID0gdmtlcm5fZW5kIC0gdmtlcm5fc3RhcnQ7Ci0gICAgZWxmX3NldF92Y3B1KCZlbGYsIHYp OwotICAgIHJjID0gZWxmX2xvYWRfYmluYXJ5KCZlbGYpOwotICAgIGlmICggcmMgPCAwICkKLSAg ICB7Ci0gICAgICAgIHByaW50aygiRmFpbGVkIHRvIGxvYWQgdGhlIGtlcm5lbCBiaW5hcnlcbiIp OwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgYm9vdHN0cmFwX21hcChOVUxMKTsKLQot ICAgIGlmICggVU5TRVRfQUREUiAhPSBwYXJtcy52aXJ0X2h5cGVyY2FsbCApCi0gICAgewotICAg ICAgICBpZiAoIChwYXJtcy52aXJ0X2h5cGVyY2FsbCA8IHZfc3RhcnQpIHx8Ci0gICAgICAgICAg ICAgKHBhcm1zLnZpcnRfaHlwZXJjYWxsID49IHZfZW5kKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIG1hcGNhY2hlX292ZXJyaWRlX2N1cnJlbnQoTlVMTCk7Ci0gICAgICAgICAgICB3cml0ZV9w dGJhc2UoY3VycmVudCk7Ci0gICAgICAgICAgICBwcmludGsoIkludmFsaWQgSFlQRVJDQUxMX1BB R0UgZmllbGQgaW4gRUxGIG5vdGVzLlxuIik7Ci0gICAgICAgICAgICByYyA9IC0xOwotICAgICAg ICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLSAgICAgICAgaHlwZXJjYWxsX3BhZ2VfaW5pdGlh bGlzZSgKLSAgICAgICAgICAgIGQsICh2b2lkICopKHVuc2lnbmVkIGxvbmcpcGFybXMudmlydF9o eXBlcmNhbGwpOwotICAgIH0KLQotICAgIC8qIEZyZWUgdGVtcG9yYXJ5IGJ1ZmZlcnMuICovCi0g ICAgZGlzY2FyZF9pbml0aWFsX2ltYWdlcygpOwotCi0gICAgLyogU2V0IHVwIHN0YXJ0IGluZm8g YXJlYS4gKi8KLSAgICBzaSA9IChzdGFydF9pbmZvX3QgKil2c3RhcnRpbmZvX3N0YXJ0OwotICAg IGNsZWFyX3BhZ2Uoc2kpOwotICAgIHNpLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwotCi0gICAgc2kt PnNoYXJlZF9pbmZvID0gdmlydF90b19tYWRkcihkLT5zaGFyZWRfaW5mbyk7Ci0KLSAgICBzaS0+ ZmxhZ3MgICAgICAgID0gU0lGX1BSSVZJTEVHRUQgfCBTSUZfSU5JVERPTUFJTjsKLSAgICBpZiAo ICF2aW5pdHJkX3N0YXJ0ICYmIGluaXRyZF9sZW4gKQotICAgICAgICBzaS0+ZmxhZ3MgICB8PSBT SUZfTU9EX1NUQVJUX1BGTjsKLSAgICBzaS0+ZmxhZ3MgICAgICAgfD0gKHhlbl9wcm9jZXNzb3Jf cG1iaXRzIDw8IDgpICYgU0lGX1BNX01BU0s7Ci0gICAgc2ktPnB0X2Jhc2UgICAgICA9IHZwdF9z dGFydDsKLSAgICBzaS0+bnJfcHRfZnJhbWVzID0gbnJfcHRfcGFnZXM7Ci0gICAgc2ktPm1mbl9s aXN0ICAgICA9IHZwaHlzbWFwX3N0YXJ0OwotICAgIHNucHJpbnRmKHNpLT5tYWdpYywgc2l6ZW9m KHNpLT5tYWdpYyksICJ4ZW4tMy4wLXg4Nl8lZCVzIiwKLSAgICAgICAgICAgICBlbGZfNjRiaXQo JmVsZikgPyA2NCA6IDMyLCBwYXJtcy5wYWUgPyAicCIgOiAiIik7Ci0KLSAgICBjb3VudCA9IGQt PnRvdF9wYWdlczsKLQotICAgIC8qIFNldCB1cCB0aGUgcGh5cy0+bWFjaGluZSB0YWJsZSBpZiBu b3QgcGFydCBvZiB0aGUgaW5pdGlhbCBtYXBwaW5nLiAqLwotICAgIGlmICggaXNfcHZfZG9tYWlu KGQpICYmIHBhcm1zLnAybV9iYXNlICE9IFVOU0VUX0FERFIgKQotICAgIHsKLSAgICAgICAgcGZu ID0gcGFnZXRhYmxlX2dldF9wZm4odi0+YXJjaC5ndWVzdF90YWJsZSk7Ci0gICAgICAgIHNldHVw X3B2X3BoeXNtYXAoZCwgcGZuLCB2X3N0YXJ0LCB2X2VuZCwgdnBoeXNtYXBfc3RhcnQsIHZwaHlz bWFwX2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBucl9wYWdlcyk7Ci0gICAgfQotCi0g ICAgLyogV3JpdGUgdGhlIHBoeXMtPm1hY2hpbmUgYW5kIG1hY2hpbmUtPnBoeXMgdGFibGUgZW50 cmllcy4gKi8KLSAgICBmb3IgKCBwZm4gPSAwOyBwZm4gPCBjb3VudDsgcGZuKysgKQotICAgIHsK LSAgICAgICAgbWZuID0gcGZuICsgYWxsb2Nfc3BmbjsKLSAgICAgICAgaWYgKCBwZm4gPj0gaW5p dHJkX3BmbiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcGZuIDwgaW5pdHJkX3BmbiAr IFBGTl9VUChpbml0cmRfbGVuKSApCi0gICAgICAgICAgICAgICAgbWZuID0gaW5pdHJkLT5tb2Rf c3RhcnQgKyAocGZuIC0gaW5pdHJkX3Bmbik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg ICAgICAgbWZuIC09IFBGTl9VUChpbml0cmRfbGVuKTsKLSAgICAgICAgfQotI2lmbmRlZiBOREVC VUcKLSNkZWZpbmUgUkVWRVJTRV9TVEFSVCAoKHZfZW5kIC0gdl9zdGFydCkgPj4gUEFHRV9TSElG VCkKLSAgICAgICAgaWYgKCBwZm4gPiBSRVZFUlNFX1NUQVJUICYmICh2aW5pdHJkX3N0YXJ0IHx8 IHBmbiA8IGluaXRyZF9wZm4pICkKLSAgICAgICAgICAgIG1mbiA9IGFsbG9jX2VwZm4gLSAocGZu IC0gUkVWRVJTRV9TVEFSVCk7Ci0jZW5kaWYKLSAgICAgICAgZG9tMF91cGRhdGVfcGh5c21hcChk LCBwZm4sIG1mbiwgdnBoeXNtYXBfc3RhcnQpOwotICAgICAgICBpZiAoIShwZm4gJiAweGZmZmZm KSkKLSAgICAgICAgICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOwotICAgIH0KLSAgICBz aS0+Zmlyc3RfcDJtX3BmbiA9IHBmbjsKLSAgICBzaS0+bnJfcDJtX2ZyYW1lcyA9IGQtPnRvdF9w YWdlcyAtIGNvdW50OwotICAgIHBhZ2VfbGlzdF9mb3JfZWFjaCAoIHBhZ2UsICZkLT5wYWdlX2xp c3QgKQotICAgIHsKLSAgICAgICAgbWZuID0gcGFnZV90b19tZm4ocGFnZSk7Ci0gICAgICAgIEJV R19PTihTSEFSRURfTTJQKGdldF9ncGZuX2Zyb21fbWZuKG1mbikpKTsKLSAgICAgICAgaWYgKCBn ZXRfZ3Bmbl9mcm9tX21mbihtZm4pID49IGNvdW50ICkKLSAgICAgICAgewotICAgICAgICAgICAg QlVHX09OKGlzX3B2XzMyYml0X2RvbWFpbihkKSk7Ci0gICAgICAgICAgICBpZiAoICFwYWdpbmdf bW9kZV90cmFuc2xhdGUoZCkgJiYgIXBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYmCi0gICAgICAg ICAgICAgICAgICFnZXRfcGFnZV9hbmRfdHlwZShwYWdlLCBkLCBQR1Rfd3JpdGFibGVfcGFnZSkg KQotICAgICAgICAgICAgICAgIEJVRygpOwotCi0gICAgICAgICAgICBkb20wX3VwZGF0ZV9waHlz bWFwKGQsIHBmbiwgbWZuLCB2cGh5c21hcF9zdGFydCk7Ci0gICAgICAgICAgICArK3BmbjsKLSAg ICAgICAgICAgIGlmICghKHBmbiAmIDB4ZmZmZmYpKQotICAgICAgICAgICAgICAgIHByb2Nlc3Nf cGVuZGluZ19zb2Z0aXJxcygpOwotICAgICAgICB9Ci0gICAgfQotICAgIEJVR19PTihwZm4gIT0g ZC0+dG90X3BhZ2VzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgYWxsb2NfZXBmbiArPSBQRk5fVVAo aW5pdHJkX2xlbikgKyBzaS0+bnJfcDJtX2ZyYW1lczsKLSNlbmRpZgotICAgIHdoaWxlICggcGZu IDwgbnJfcGFnZXMgKQotICAgIHsKLSAgICAgICAgaWYgKCAocGFnZSA9IGFsbG9jX2NodW5rKGQs IG5yX3BhZ2VzIC0gZC0+dG90X3BhZ2VzKSkgPT0gTlVMTCApCi0gICAgICAgICAgICBwYW5pYygi Tm90IGVub3VnaCBSQU0gZm9yIERPTTAgcmVzZXJ2YXRpb24iKTsKLSAgICAgICAgd2hpbGUgKCBw Zm4gPCBkLT50b3RfcGFnZXMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZm4gPSBwYWdlX3Rv X21mbihwYWdlKTsKLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIHBmbiAobnJfcGFnZXMgLSAxIC0g KHBmbiAtIChhbGxvY19lcGZuIC0gYWxsb2Nfc3BmbikpKQotI2VuZGlmCi0gICAgICAgICAgICBk b20wX3VwZGF0ZV9waHlzbWFwKGQsIHBmbiwgbWZuLCB2cGh5c21hcF9zdGFydCk7Ci0jdW5kZWYg cGZuCi0gICAgICAgICAgICBwYWdlKys7IHBmbisrOwotICAgICAgICAgICAgaWYgKCEocGZuICYg MHhmZmZmZikpCi0gICAgICAgICAgICAgICAgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7Ci0g ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIGluaXRyZF9sZW4gIT0gMCApCi0gICAgewotICAg ICAgICBzaS0+bW9kX3N0YXJ0ID0gdmluaXRyZF9zdGFydCA/OiBpbml0cmRfcGZuOwotICAgICAg ICBzaS0+bW9kX2xlbiAgID0gaW5pdHJkX2xlbjsKLSAgICB9Ci0KLSAgICBtZW1zZXQoc2ktPmNt ZF9saW5lLCAwLCBzaXplb2Yoc2ktPmNtZF9saW5lKSk7Ci0gICAgaWYgKCBjbWRsaW5lICE9IE5V TEwgKQotICAgICAgICBzdHJsY3B5KChjaGFyICopc2ktPmNtZF9saW5lLCBjbWRsaW5lLCBzaXpl b2Yoc2ktPmNtZF9saW5lKSk7Ci0KLSAgICBpZiAoIGZpbGxfY29uc29sZV9zdGFydF9pbmZvKCh2 b2lkICopKHNpICsgMSkpICkKLSAgICB7Ci0gICAgICAgIHNpLT5jb25zb2xlLmRvbTAuaW5mb19v ZmYgID0gc2l6ZW9mKHN0cnVjdCBzdGFydF9pbmZvKTsKLSAgICAgICAgc2ktPmNvbnNvbGUuZG9t MC5pbmZvX3NpemUgPSBzaXplb2Yoc3RydWN0IGRvbTBfdmdhX2NvbnNvbGVfaW5mbyk7Ci0gICAg fQotCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQotICAgICAgICB4bGF0X3N0YXJ0 X2luZm8oc2ksIFhMQVRfc3RhcnRfaW5mb19jb25zb2xlX2RvbTApOwotCi0gICAgLyogUmV0dXJu IHRvIGlkbGUgZG9tYWluJ3MgcGFnZSB0YWJsZXMuICovCi0gICAgbWFwY2FjaGVfb3ZlcnJpZGVf Y3VycmVudChOVUxMKTsKLSAgICB3cml0ZV9wdGJhc2UoY3VycmVudCk7Ci0KLSAgICB1cGRhdGVf ZG9tYWluX3dhbGxjbG9ja190aW1lKGQpOwotCi0gICAgdi0+aXNfaW5pdGlhbGlzZWQgPSAxOwot ICAgIGNsZWFyX2JpdChfVlBGX2Rvd24sICZ2LT5wYXVzZV9mbGFncyk7Ci0KLSAgICAvKgotICAg ICAqIEluaXRpYWwgcmVnaXN0ZXIgdmFsdWVzOgotICAgICAqICBEUyxFUyxGUyxHUyA9IEZMQVRf S0VSTkVMX0RTCi0gICAgICogICAgICAgQ1M6cklQID0gRkxBVF9LRVJORUxfQ1M6c3RhcnRfcGMK LSAgICAgKiAgICAgICBTUzpyU1AgPSBGTEFUX0tFUk5FTF9TUzpzdGFydF9zdGFjawotICAgICAq ICAgICAgICAgIHJTSSA9IHN0YXJ0X2luZm8KLSAgICAgKiAgW3JBWCxyQlgsckNYLHJEWCxyREks ckJQLFI4LVIxNSBhcmUgemVyb10KLSAgICAgKi8KLSAgICByZWdzID0gJnYtPmFyY2gudXNlcl9y ZWdzOwotICAgIHJlZ3MtPmRzID0gcmVncy0+ZXMgPSByZWdzLT5mcyA9IHJlZ3MtPmdzID0KLSAg ICAgICAgIWlzX3B2XzMyYml0X2RvbWFpbihkKSA/IEZMQVRfS0VSTkVMX0RTIDogRkxBVF9DT01Q QVRfS0VSTkVMX0RTOwotICAgIHJlZ3MtPnNzID0gKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPwot ICAgICAgICAgICAgICAgIEZMQVRfS0VSTkVMX1NTIDogRkxBVF9DT01QQVRfS0VSTkVMX1NTKTsK LSAgICByZWdzLT5jcyA9ICghaXNfcHZfMzJiaXRfZG9tYWluKGQpID8KLSAgICAgICAgICAgICAg ICBGTEFUX0tFUk5FTF9DUyA6IEZMQVRfQ09NUEFUX0tFUk5FTF9DUyk7Ci0gICAgcmVncy0+cmlw ID0gcGFybXMudmlydF9lbnRyeTsKLSAgICByZWdzLT5yc3AgPSB2c3RhY2tfZW5kOwotICAgIHJl Z3MtPnJzaSA9IHZzdGFydGluZm9fc3RhcnQ7Ci0gICAgcmVncy0+ZWZsYWdzID0gWDg2X0VGTEFH U19JRjsKLQotI2lmZGVmIENPTkZJR19TSEFET1dfUEFHSU5HCi0gICAgaWYgKCBvcHRfZG9tMF9z aGFkb3cgJiYgcGFnaW5nX2VuYWJsZShkLCBQR19TSF9lbmFibGUpID09IDAgKQotICAgICAgICBw YWdpbmdfdXBkYXRlX3BhZ2luZ19tb2Rlcyh2KTsKLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBQ VkggRml4bWU6IFhFTkZFQVRfc3VwZXJ2aXNvcl9tb2RlX2tlcm5lbCBoYXMgYmVlbiByZXVzZWQg aW4gUFZIIHdpdGggYQotICAgICAqIGRpZmZlcmVudCBtZWFuaW5nLgotICAgICAqLwotICAgIGlm ICggdGVzdF9iaXQoWEVORkVBVF9zdXBlcnZpc29yX21vZGVfa2VybmVsLCBwYXJtcy5mX3JlcXVp cmVkKSApCi0gICAgICAgIHBhbmljKCJEb20wIHJlcXVpcmVzIHN1cGVydmlzb3ItbW9kZSBleGVj dXRpb24iKTsKLQotICAgIHJjID0gc2V0dXBfcGVybWlzc2lvbnMoZCk7Ci0gICAgQlVHX09OKHJj ICE9IDApOwotCi0gICAgaWYgKCBlbGZfY2hlY2tfYnJva2VuKCZlbGYpICkKLSAgICAgICAgcHJp bnRrKCIgWGVuIHdhcm5pbmc6IGRvbTAga2VybmVsIGJyb2tlbiBFTEY6ICVzXG4iLAotICAgICAg ICAgICAgICAgZWxmX2NoZWNrX2Jyb2tlbigmZWxmKSk7Ci0KLSAgICBpZiAoIGQtPmRvbWFpbl9p ZCA9PSBoYXJkd2FyZV9kb21pZCApCi0gICAgICAgIGlvbW11X2h3ZG9tX2luaXQoZCk7Ci0KLSAg ICByZXR1cm4gMDsKLQotb3V0OgotICAgIGlmICggZWxmX2NoZWNrX2Jyb2tlbigmZWxmKSApCi0g ICAgICAgIHByaW50aygiIFhlbiBkb20wIGtlcm5lbCBicm9rZW4gRUxGOiAlc1xuIiwKLSAgICAg ICAgICAgICAgIGVsZl9jaGVja19icm9rZW4oJmVsZikpOwotCi0gICAgcmV0dXJuIHJjOwotfQog CiBzdGF0aWMgaW50IF9faW5pdCBtb2RpZnlfaWRlbnRpdHlfbW1pbyhzdHJ1Y3QgZG9tYWluICpk LCB1bnNpZ25lZCBsb25nIHBmbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGNvbnN0IGJvb2wgbWFwKQpAQCAtMTQxMSwxMyAr NTM0LDEzIEBAIHN0YXRpYyBpbnQgX19pbml0IHB2aF9wb3B1bGF0ZV9tZW1vcnlfcmFuZ2Uoc3Ry dWN0IGRvbWFpbiAqZCwKICAgICAgICAgdW5zaWduZWQgaW50IHJhbmdlX29yZGVyID0gZ2V0X29y ZGVyX2Zyb21fcGFnZXMobnJfcGFnZXMgKyAxKTsKIAogICAgICAgICBvcmRlciA9IG1pbihyYW5n ZV9vcmRlciA/IHJhbmdlX29yZGVyIC0gMSA6IDAsIG9yZGVyKTsKLSAgICAgICAgcGFnZSA9IGFs bG9jX2RvbWhlYXBfcGFnZXMoZCwgb3JkZXIsIG1lbWZsYWdzKTsKKyAgICAgICAgcGFnZSA9IGFs bG9jX2RvbWhlYXBfcGFnZXMoZCwgb3JkZXIsIGRvbTBfbWVtZmxhZ3MpOwogICAgICAgICBpZiAo IHBhZ2UgPT0gTlVMTCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggb3JkZXIgPT0gMCAm JiBtZW1mbGFncyApCisgICAgICAgICAgICBpZiAoIG9yZGVyID09IDAgJiYgZG9tMF9tZW1mbGFn cyApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogVHJ5IGFnYWluIHdpdGhvdXQg YW55IG1lbWZsYWdzLiAqLwotICAgICAgICAgICAgICAgIG1lbWZsYWdzID0gMDsKKyAgICAgICAg ICAgICAgICAvKiBUcnkgYWdhaW4gd2l0aG91dCBhbnkgZG9tMF9tZW1mbGFncy4gKi8KKyAgICAg ICAgICAgICAgICBkb20wX21lbWZsYWdzID0gMDsKICAgICAgICAgICAgICAgICBvcmRlciA9IE1B WF9PUkRFUjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTE2 OTEsNyArODE0LDcgQEAgc3RhdGljIGludCBfX2luaXQgcHZoX3NldHVwX3AybShzdHJ1Y3QgZG9t YWluICpkKQogICAgIGJvb2wgcHJlZW1wdGVkOwogI2RlZmluZSBNQjFfUEFHRVMgUEZOX0RPV04o TUIoMSkpCiAKLSAgICBucl9wYWdlcyA9IGNvbXB1dGVfZG9tMF9ucl9wYWdlcyhkLCBOVUxMLCAw KTsKKyAgICBucl9wYWdlcyA9IGRvbTBfY29tcHV0ZV9ucl9wYWdlcyhkLCBOVUxMLCAwKTsKIAog ICAgIHB2aF9zZXR1cF9lODIwKGQsIG5yX3BhZ2VzKTsKICAgICBkbyB7CkBAIC0xOTAzLDcgKzEw MjYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwdmhfc2V0dXBfY3B1cyhzdHJ1Y3QgZG9tYWluICpk LCBwYWRkcl90IGVudHJ5LAogICAgIGZvciAoIGkgPSAxOyBpIDwgZC0+bWF4X3ZjcHVzOyBpKysg KQogICAgIHsKICAgICAgICAgY3B1ID0gY3B1bWFza19jeWNsZShjcHUsICZkb20wX2NwdXMpOwot ICAgICAgICBzZXR1cF9kb20wX3ZjcHUoZCwgaSwgY3B1KTsKKyAgICAgICAgZG9tMF9zZXR1cF92 Y3B1KGQsIGksIGNwdSk7CiAgICAgfQogCiAgICAgcmMgPSBhcmNoX3NldF9pbmZvX2h2bV9ndWVz dCh2LCAmY3B1X2N0eCk7CkBAIC0xOTEzLDcgKzEwMzYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBw dmhfc2V0dXBfY3B1cyhzdHJ1Y3QgZG9tYWluICpkLCBwYWRkcl90IGVudHJ5LAogICAgICAgICBy ZXR1cm4gcmM7CiAgICAgfQogCi0gICAgcmMgPSBzZXR1cF9wZXJtaXNzaW9ucyhkKTsKKyAgICBy YyA9IGRvbTBfc2V0dXBfcGVybWlzc2lvbnMoZCk7CiAgICAgaWYgKCByYyApCiAgICAgewogICAg ICAgICBwYW5pYygiVW5hYmxlIHRvIHNldHVwIERvbTAgcGVybWlzc2lvbnM6ICVkXG4iLCByYyk7 CkBAIC0yNDIzLDcgKzE1NDYsNyBAQCBpbnQgX19pbml0IGNvbnN0cnVjdF9kb20wKHN0cnVjdCBk b21haW4gKmQsIGNvbnN0IG1vZHVsZV90ICppbWFnZSwKIAogICAgIHByb2Nlc3NfcGVuZGluZ19z b2Z0aXJxcygpOwogCi0gICAgcmV0dXJuIChpc19odm1fZG9tYWluKGQpID8gY29uc3RydWN0X2Rv bTBfcHZoIDogY29uc3RydWN0X2RvbTBfcHYpCisgICAgcmV0dXJuIChpc19odm1fZG9tYWluKGQp ID8gY29uc3RydWN0X2RvbTBfcHZoIDogZG9tMF9jb25zdHJ1Y3RfcHYpCiAgICAgICAgICAgIChk LCBpbWFnZSwgaW1hZ2VfaGVhZHJvb20sIGluaXRyZCxib290c3RyYXBfbWFwLCBjbWRsaW5lKTsK IH0KIApkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2 L3B2L01ha2VmaWxlCmluZGV4IGRlMjE5MzcxMjkuLmVhOTQ1OTk0MzggMTAwNjQ0Ci0tLSBhL3hl bi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKQEAg LTEgKzEsMiBAQAogb2JqLXkgKz0gaHlwZXJjYWxsLm8KK29iai1iaW4teSArPSBkb20wX2J1aWxk LmluaXQubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L2RvbTBfYnVpbGQuYyBiL3hlbi9h cmNoL3g4Ni9wdi9kb20wX2J1aWxkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uYmI4MmMzM2E0YwotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9kb20w X2J1aWxkLmMKQEAgLTAsMCArMSw5MTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHB2 L2RvbTBfYnVpbGQuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LCBLIEEgRnJhc2Vy CisgKi8KKworI2luY2x1ZGUgPHhlbi9jb25zb2xlLmg+CisjaW5jbHVkZSA8eGVuL2RvbWFpbi5o PgorI2luY2x1ZGUgPHhlbi9kb21haW5fcGFnZS5oPgorI2luY2x1ZGUgPHhlbi9pbml0Lmg+Cisj aW5jbHVkZSA8eGVuL2xpYmVsZi5oPgorI2luY2x1ZGUgPHhlbi9tdWx0aWJvb3QuaD4KKyNpbmNs dWRlIDx4ZW4vcGFnaW5nLmg+CisjaW5jbHVkZSA8eGVuL3Bmbi5oPgorI2luY2x1ZGUgPHhlbi9z Y2hlZC5oPgorI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYnppbWFn ZS5oPgorI2luY2x1ZGUgPGFzbS9kb20wX2J1aWxkLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4K KyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworLyogQWxsb3cgcmluZy0zIGFjY2VzcyBpbiBsb25n IG1vZGUgYXMgZ3Vlc3QgY2Fubm90IHVzZSByaW5nIDEgLi4uICovCisjZGVmaW5lIEJBU0VfUFJP VCAoX1BBR0VfUFJFU0VOVHxfUEFHRV9SV3xfUEFHRV9BQ0NFU1NFRHxfUEFHRV9VU0VSKQorI2Rl ZmluZSBMMV9QUk9UIChCQVNFX1BST1R8X1BBR0VfR1VFU1RfS0VSTkVMKQorLyogLi4uIGV4Y2Vw dCBmb3IgY29tcGF0aWJpbGl0eSBtb2RlIGd1ZXN0cy4gKi8KKyNkZWZpbmUgQ09NUEFUX0wxX1BS T1QgKF9QQUdFX1BSRVNFTlR8X1BBR0VfUld8X1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIEwyX1BS T1QgKEJBU0VfUFJPVHxfUEFHRV9ESVJUWSkKKyNkZWZpbmUgTDNfUFJPVCAoQkFTRV9QUk9UfF9Q QUdFX0RJUlRZKQorI2RlZmluZSBMNF9QUk9UIChCQVNFX1BST1R8X1BBR0VfRElSVFkpCisKK3N0 YXRpYyBfX2luaXQgdm9pZCBkb20wX3VwZGF0ZV9waHlzbWFwKHN0cnVjdCBkb21haW4gKmQsIHVu c2lnbmVkIGxvbmcgcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIG1mbiwgdW5zaWduZWQgbG9uZyB2cGh5c21hcF9zKQoreworICAgIGlmICggIWlz X3B2XzMyYml0X2RvbWFpbihkKSApCisgICAgICAgICgodW5zaWduZWQgbG9uZyAqKXZwaHlzbWFw X3MpW3Bmbl0gPSBtZm47CisgICAgZWxzZQorICAgICAgICAoKHVuc2lnbmVkIGludCAqKXZwaHlz bWFwX3MpW3Bmbl0gPSBtZm47CisKKyAgICBzZXRfZ3Bmbl9mcm9tX21mbihtZm4sIHBmbik7Cit9 CisKK3N0YXRpYyBfX2luaXQgdm9pZCBtYXJrX3B2X3B0X3BhZ2VzX3Jkb25seShzdHJ1Y3QgZG9t YWluICpkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw0X3Bn ZW50cnlfdCAqbDRzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHZwdF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5yX3B0X3BhZ2VzKQoreworICAgIHVuc2ln bmVkIGxvbmcgY291bnQ7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBsNF9wZ2Vu dHJ5X3QgKnBsNGU7CisgICAgbDNfcGdlbnRyeV90ICpwbDNlOworICAgIGwyX3BnZW50cnlfdCAq cGwyZTsKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7CisKKyAgICBwbDRlID0gbDRzdGFydCArIGw0 X3RhYmxlX29mZnNldCh2cHRfc3RhcnQpOworICAgIHBsM2UgPSBsNGVfdG9fbDNlKCpwbDRlKTsK KyAgICBwbDNlICs9IGwzX3RhYmxlX29mZnNldCh2cHRfc3RhcnQpOworICAgIHBsMmUgPSBsM2Vf dG9fbDJlKCpwbDNlKTsKKyAgICBwbDJlICs9IGwyX3RhYmxlX29mZnNldCh2cHRfc3RhcnQpOwor ICAgIHBsMWUgPSBsMmVfdG9fbDFlKCpwbDJlKTsKKyAgICBwbDFlICs9IGwxX3RhYmxlX29mZnNl dCh2cHRfc3RhcnQpOworICAgIGZvciAoIGNvdW50ID0gMDsgY291bnQgPCBucl9wdF9wYWdlczsg Y291bnQrKyApCisgICAgeworICAgICAgICBsMWVfcmVtb3ZlX2ZsYWdzKCpwbDFlLCBfUEFHRV9S Vyk7CisgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShsMWVfZ2V0X3BmbigqcGwxZSkpOworCisg ICAgICAgIC8qIFJlYWQtb25seSBtYXBwaW5nICsgUEdDX2FsbG9jYXRlZCArIHBhZ2UtdGFibGUg cGFnZS4gKi8KKyAgICAgICAgcGFnZS0+Y291bnRfaW5mbyAgICAgICAgID0gUEdDX2FsbG9jYXRl ZCB8IDM7CisgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvIHw9IFBHVF92YWxpZGF0ZWQg fCAxOworCisgICAgICAgIC8qIFRvcC1sZXZlbCBwLnQuIGlzIHBpbm5lZC4gKi8KKyAgICAgICAg aWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9PQorICAgICAg ICAgICAgICghaXNfcHZfMzJiaXRfZG9tYWluKGQpID8KKyAgICAgICAgICAgICAgUEdUX2w0X3Bh Z2VfdGFibGUgOiBQR1RfbDNfcGFnZV90YWJsZSkgKQorICAgICAgICB7CisgICAgICAgICAgICBw YWdlLT5jb3VudF9pbmZvICAgICAgICArPSAxOworICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50 eXBlX2luZm8gKz0gMSB8IFBHVF9waW5uZWQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBJdGVy YXRlLiAqLworICAgICAgICBpZiAoICEoKHVuc2lnbmVkIGxvbmcpKytwbDFlICYgKFBBR0VfU0la RSAtIDEpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggISgodW5zaWduZWQgbG9uZykr K3BsMmUgJiAoUEFHRV9TSVpFIC0gMSkpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBpZiAoICEoKHVuc2lnbmVkIGxvbmcpKytwbDNlICYgKFBBR0VfU0laRSAtIDEpKSApCisgICAg ICAgICAgICAgICAgICAgIHBsM2UgPSBsNGVfdG9fbDNlKCorK3BsNGUpOworICAgICAgICAgICAg ICAgIHBsMmUgPSBsM2VfdG9fbDJlKCpwbDNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHBsMWUgPSBsMmVfdG9fbDFlKCpwbDJlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGlj IF9faW5pdCB2b2lkIHNldHVwX3B2X3BoeXNtYXAoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQg bG9uZyBwZ3RibF9wZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIHZfc3RhcnQsIHVuc2lnbmVkIGxvbmcgdl9lbmQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZwaHlzbWFwX3N0YXJ0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2cGh5c21hcF9lbmQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5yX3Bh Z2VzKQoreworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBOVUxMOworICAgIGw0X3BnZW50 cnlfdCAqcGw0ZSwgKmw0c3RhcnQgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZ3RibF9wZm4pKTsK KyAgICBsM19wZ2VudHJ5X3QgKnBsM2UgPSBOVUxMOworICAgIGwyX3BnZW50cnlfdCAqcGwyZSA9 IE5VTEw7CisgICAgbDFfcGdlbnRyeV90ICpwbDFlID0gTlVMTDsKKworICAgIGlmICggdl9zdGFy dCA8PSB2cGh5c21hcF9lbmQgJiYgdnBoeXNtYXBfc3RhcnQgPD0gdl9lbmQgKQorICAgICAgICBw YW5pYygiRE9NMCBQLT5NIHRhYmxlIG92ZXJsYXBzIGluaXRpYWwgbWFwcGluZyIpOworCisgICAg d2hpbGUgKCB2cGh5c21hcF9zdGFydCA8IHZwaHlzbWFwX2VuZCApCisgICAgeworICAgICAgICBp ZiAoIGQtPnRvdF9wYWdlcyArICgocm91bmRfcGd1cCh2cGh5c21hcF9lbmQpIC0gdnBoeXNtYXBf c3RhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+IFBBR0VfU0hJRlQpICsgMyA+ IG5yX3BhZ2VzICkKKyAgICAgICAgICAgIHBhbmljKCJEb20wIGFsbG9jYXRpb24gdG9vIHNtYWxs IGZvciBpbml0aWFsIFAtPk0gdGFibGUiKTsKKworICAgICAgICBpZiAoIHBsMWUgKQorICAgICAg ICB7CisgICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKKyAgICAgICAgICAgIHBs MWUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICggcGwyZSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMmUpOworICAgICAgICAgICAgcGwyZSA9IE5V TEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBwbDNlICkKKyAgICAgICAgeworICAgICAgICAg ICAgdW5tYXBfZG9tYWluX3BhZ2UocGwzZSk7CisgICAgICAgICAgICBwbDNlID0gTlVMTDsKKyAg ICAgICAgfQorICAgICAgICBwbDRlID0gbDRzdGFydCArIGw0X3RhYmxlX29mZnNldCh2cGh5c21h cF9zdGFydCk7CisgICAgICAgIGlmICggIWw0ZV9nZXRfaW50cHRlKCpwbDRlKSApCisgICAgICAg IHsKKyAgICAgICAgICAgIHBhZ2UgPSBhbGxvY19kb21oZWFwX3BhZ2UoZCwgMCk7CisgICAgICAg ICAgICBpZiAoICFwYWdlICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg LyogTm8gbWFwcGluZywgUEdDX2FsbG9jYXRlZCArIHBhZ2UtdGFibGUgcGFnZS4gKi8KKyAgICAg ICAgICAgIHBhZ2UtPmNvdW50X2luZm8gPSBQR0NfYWxsb2NhdGVkIHwgMjsKKyAgICAgICAgICAg IHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvID0gUEdUX2wzX3BhZ2VfdGFibGUgfCBQR1RfdmFsaWRh dGVkIHwgMTsKKyAgICAgICAgICAgIHBsM2UgPSBfX21hcF9kb21haW5fcGFnZShwYWdlKTsKKyAg ICAgICAgICAgIGNsZWFyX3BhZ2UocGwzZSk7CisgICAgICAgICAgICAqcGw0ZSA9IGw0ZV9mcm9t X3BhZ2UocGFnZSwgTDRfUFJPVCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGwzZSA9 IG1hcF9kb21haW5fcGFnZShfbWZuKGw0ZV9nZXRfcGZuKCpwbDRlKSkpOworCisgICAgICAgIHBs M2UgKz0gbDNfdGFibGVfb2Zmc2V0KHZwaHlzbWFwX3N0YXJ0KTsKKyAgICAgICAgaWYgKCAhbDNl X2dldF9pbnRwdGUoKnBsM2UpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBjcHVfaGFz X3BhZ2UxZ2IgJiYKKyAgICAgICAgICAgICAgICAgISh2cGh5c21hcF9zdGFydCAmICgoMVVMIDw8 IEwzX1BBR0VUQUJMRV9TSElGVCkgLSAxKSkgJiYKKyAgICAgICAgICAgICAgICAgdnBoeXNtYXBf ZW5kID49IHZwaHlzbWFwX3N0YXJ0ICsgKDFVTCA8PCBMM19QQUdFVEFCTEVfU0hJRlQpICYmCisg ICAgICAgICAgICAgICAgIChwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDNfUEFHRVRBQkxFX1NISUZUIC0g UEFHRV9TSElGVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDApKSAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGwzZSA9IGwz ZV9mcm9tX3BhZ2UocGFnZSwgTDFfUFJPVHxfUEFHRV9ESVJUWXxfUEFHRV9QU0UpOworICAgICAg ICAgICAgICAgIHZwaHlzbWFwX3N0YXJ0ICs9IDFVTCA8PCBMM19QQUdFVEFCTEVfU0hJRlQ7Cisg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo IChwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlKGQsIDApKSA9PSBOVUxMICkKKyAgICAgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAgICAgLyogTm8gbWFwcGluZywgUEdDX2FsbG9jYXRlZCAr IHBhZ2UtdGFibGUgcGFnZS4gKi8KKyAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8gPSBQR0Nf YWxsb2NhdGVkIHwgMjsKKyAgICAgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvID0gUEdU X2wyX3BhZ2VfdGFibGUgfCBQR1RfdmFsaWRhdGVkIHwgMTsKKyAgICAgICAgICAgIHBsMmUgPSBf X21hcF9kb21haW5fcGFnZShwYWdlKTsKKyAgICAgICAgICAgIGNsZWFyX3BhZ2UocGwyZSk7Cisg ICAgICAgICAgICAqcGwzZSA9IGwzZV9mcm9tX3BhZ2UocGFnZSwgTDNfUFJPVCk7CisgICAgICAg IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGwyZSA9IG1hcF9kb21haW5fcGFnZShfbWZu KGwzZV9nZXRfcGZuKCpwbDNlKSkpOworCisgICAgICAgIHBsMmUgKz0gbDJfdGFibGVfb2Zmc2V0 KHZwaHlzbWFwX3N0YXJ0KTsKKyAgICAgICAgaWYgKCAhbDJlX2dldF9pbnRwdGUoKnBsMmUpICkK KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAhKHZwaHlzbWFwX3N0YXJ0ICYgKCgxVUwgPDwg TDJfUEFHRVRBQkxFX1NISUZUKSAtIDEpKSAmJgorICAgICAgICAgICAgICAgICB2cGh5c21hcF9l bmQgPj0gdnBoeXNtYXBfc3RhcnQgKyAoMVVMIDw8IEwyX1BBR0VUQUJMRV9TSElGVCkgJiYKKyAg ICAgICAgICAgICAgICAgKHBhZ2UgPSBhbGxvY19kb21oZWFwX3BhZ2VzKGQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMMl9QQUdFVEFCTEVfU0hJRlQgLSBQ QUdFX1NISUZULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCkpICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwbDJlID0gbDJl X2Zyb21fcGFnZShwYWdlLCBMMV9QUk9UfF9QQUdFX0RJUlRZfF9QQUdFX1BTRSk7CisgICAgICAg ICAgICAgICAgaWYgKCBvcHRfYWxsb3dfc3VwZXJwYWdlICkKKyAgICAgICAgICAgICAgICAgICAg Z2V0X3N1cGVycGFnZShwYWdlX3RvX21mbihwYWdlKSwgZCk7CisgICAgICAgICAgICAgICAgdnBo eXNtYXBfc3RhcnQgKz0gMVVMIDw8IEwyX1BBR0VUQUJMRV9TSElGVDsKKyAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggKHBhZ2UgPSBhbGxv Y19kb21oZWFwX3BhZ2UoZCwgMCkpID09IE5VTEwgKQorICAgICAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgICAvKiBObyBtYXBwaW5nLCBQR0NfYWxsb2NhdGVkICsgcGFnZS10YWJsZSBw YWdlLiAqLworICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5mbyA9IFBHQ19hbGxvY2F0ZWQgfCAy OworICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDFfcGFnZV90YWJs ZSB8IFBHVF92YWxpZGF0ZWQgfCAxOworICAgICAgICAgICAgcGwxZSA9IF9fbWFwX2RvbWFpbl9w YWdlKHBhZ2UpOworICAgICAgICAgICAgY2xlYXJfcGFnZShwbDFlKTsKKyAgICAgICAgICAgICpw bDJlID0gbDJlX2Zyb21fcGFnZShwYWdlLCBMMl9QUk9UKTsKKyAgICAgICAgfQorICAgICAgICBl bHNlCisgICAgICAgICAgICBwbDFlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obDJlX2dldF9wZm4o KnBsMmUpKSk7CisKKyAgICAgICAgcGwxZSArPSBsMV90YWJsZV9vZmZzZXQodnBoeXNtYXBfc3Rh cnQpOworICAgICAgICBCVUdfT04obDFlX2dldF9pbnRwdGUoKnBsMWUpKTsKKyAgICAgICAgcGFn ZSA9IGFsbG9jX2RvbWhlYXBfcGFnZShkLCAwKTsKKyAgICAgICAgaWYgKCAhcGFnZSApCisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAqcGwxZSA9IGwxZV9mcm9tX3BhZ2UocGFnZSwgTDFf UFJPVHxfUEFHRV9ESVJUWSk7CisgICAgICAgIHZwaHlzbWFwX3N0YXJ0ICs9IFBBR0VfU0laRTsK KyAgICAgICAgdnBoeXNtYXBfc3RhcnQgJj0gUEFHRV9NQVNLOworICAgIH0KKyAgICBpZiAoICFw YWdlICkKKyAgICAgICAgcGFuaWMoIk5vdCBlbm91Z2ggUkFNIGZvciBET00wIFAtPk0gdGFibGUi KTsKKworICAgIGlmICggcGwxZSApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOwor ICAgIGlmICggcGwyZSApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMmUpOworICAgIGlm ICggcGwzZSApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOworCisgICAgdW5tYXBf ZG9tYWluX3BhZ2UobDRzdGFydCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZV9pbmZvICogX19p bml0IGFsbG9jX2NodW5rKAorICAgIHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgbWF4 X3BhZ2VzKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBsYXN0X29yZGVy ID0gTUFYX09SREVSOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgdW5zaWduZWQg aW50IG9yZGVyID0gZ2V0X29yZGVyX2Zyb21fcGFnZXMobWF4X3BhZ2VzKSwgZnJlZV9vcmRlcjsK KworICAgIGlmICggb3JkZXIgPiBsYXN0X29yZGVyICkKKyAgICAgICAgb3JkZXIgPSBsYXN0X29y ZGVyOworICAgIGVsc2UgaWYgKCBtYXhfcGFnZXMgJiAobWF4X3BhZ2VzIC0gMSkgKQorICAgICAg ICAtLW9yZGVyOworICAgIHdoaWxlICggKHBhZ2UgPSBhbGxvY19kb21oZWFwX3BhZ2VzKGQsIG9y ZGVyLCBkb20wX21lbWZsYWdzKSkgPT0gTlVMTCApCisgICAgICAgIGlmICggb3JkZXItLSA9PSAw ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIGlmICggcGFnZSApCisgICAgICAgIGxhc3Rfb3Jk ZXIgPSBvcmRlcjsKKyAgICBlbHNlIGlmICggZG9tMF9tZW1mbGFncyApCisgICAgeworICAgICAg ICAvKgorICAgICAgICAgKiBBbGxvY2F0ZSB1cCB0byAyTUIgYXQgYSB0aW1lOiBJdCBwcmV2ZW50 cyBhbGxvY2F0aW5nIHZlcnkgbGFyZ2UKKyAgICAgICAgICogY2h1bmtzIGZyb20gRE1BIHBvb2xz IGJlZm9yZSB0aGUgPjRHQiBwb29sIGlzIGZ1bGx5IGRlcGxldGVkLgorICAgICAgICAgKi8KKyAg ICAgICAgbGFzdF9vcmRlciA9IDIxIC0gUEFHRV9TSElGVDsKKyAgICAgICAgZG9tMF9tZW1mbGFn cyA9IDA7CisgICAgICAgIHJldHVybiBhbGxvY19jaHVuayhkLCBtYXhfcGFnZXMpOworICAgIH0K KworICAgIC8qCisgICAgICogTWFrZSBhIHJlYXNvbmFibGUgYXR0ZW1wdCBhdCBmaW5kaW5nIGEg c21hbGxlciBjaHVuayBhdCBhIGhpZ2hlcgorICAgICAqIGFkZHJlc3MsIHRvIGF2b2lkIGFsbG9j YXRpbmcgZnJvbSBsb3cgbWVtb3J5IGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgICovCisgICAg Zm9yICggZnJlZV9vcmRlciA9IG9yZGVyOyAhZG9tMF9tZW1mbGFncyAmJiBwYWdlICYmIG9yZGVy LS07ICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnMjsKKworICAgICAgICBp ZiAoIGQtPnRvdF9wYWdlcyArICgxIDw8IG9yZGVyKSA+IGQtPm1heF9wYWdlcyApCisgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgcGcyID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRl ciwgTUVNRl9leGFjdF9ub2RlKTsKKyAgICAgICAgaWYgKCBwZzIgPiBwYWdlICkKKyAgICAgICAg eworICAgICAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2VzKHBhZ2UsIGZyZWVfb3JkZXIpOworICAg ICAgICAgICAgcGFnZSA9IHBnMjsKKyAgICAgICAgICAgIGZyZWVfb3JkZXIgPSBvcmRlcjsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIGlmICggcGcyICkKKyAgICAgICAgICAgIGZyZWVfZG9taGVh cF9wYWdlcyhwZzIsIG9yZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHBhZ2U7Cit9CisKK2ludCBf X2luaXQgZG9tMF9jb25zdHJ1Y3RfcHYoCisgICAgc3RydWN0IGRvbWFpbiAqZCwKKyAgICBjb25z dCBtb2R1bGVfdCAqaW1hZ2UsIHVuc2lnbmVkIGxvbmcgaW1hZ2VfaGVhZHJvb20sCisgICAgbW9k dWxlX3QgKmluaXRyZCwKKyAgICB2b2lkICooKmJvb3RzdHJhcF9tYXApKGNvbnN0IG1vZHVsZV90 ICopLAorICAgIGNoYXIgKmNtZGxpbmUpCit7CisgICAgaW50IGksIGNwdSwgcmMsIGNvbXBhdGli bGUsIGNvbXBhdDMyLCBvcmRlciwgbWFjaGluZTsKKyAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVnczsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiwgbWZuOworICAgIHVuc2lnbmVkIGxvbmcgbnJf cGFnZXM7CisgICAgdW5zaWduZWQgbG9uZyBucl9wdF9wYWdlczsKKyAgICB1bnNpZ25lZCBsb25n IGFsbG9jX3NwZm47CisgICAgdW5zaWduZWQgbG9uZyBhbGxvY19lcGZuOworICAgIHVuc2lnbmVk IGxvbmcgaW5pdHJkX3BmbiA9IC0xLCBpbml0cmRfbWZuID0gMDsKKyAgICB1bnNpZ25lZCBsb25n IGNvdW50OworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBOVUxMOworICAgIHN0YXJ0X2lu Zm9fdCAqc2k7CisgICAgc3RydWN0IHZjcHUgKnYgPSBkLT52Y3B1WzBdOworICAgIHVuc2lnbmVk IGxvbmcgbG9uZyB2YWx1ZTsKKyAgICB2b2lkICppbWFnZV9iYXNlID0gYm9vdHN0cmFwX21hcChp bWFnZSk7CisgICAgdW5zaWduZWQgbG9uZyBpbWFnZV9sZW4gPSBpbWFnZS0+bW9kX2VuZDsKKyAg ICB2b2lkICppbWFnZV9zdGFydCA9IGltYWdlX2Jhc2UgKyBpbWFnZV9oZWFkcm9vbTsKKyAgICB1 bnNpZ25lZCBsb25nIGluaXRyZF9sZW4gPSBpbml0cmQgPyBpbml0cmQtPm1vZF9lbmQgOiAwOwor ICAgIGw0X3BnZW50cnlfdCAqbDR0YWIgPSBOVUxMLCAqbDRzdGFydCA9IE5VTEw7CisgICAgbDNf cGdlbnRyeV90ICpsM3RhYiA9IE5VTEwsICpsM3N0YXJ0ID0gTlVMTDsKKyAgICBsMl9wZ2VudHJ5 X3QgKmwydGFiID0gTlVMTCwgKmwyc3RhcnQgPSBOVUxMOworICAgIGwxX3BnZW50cnlfdCAqbDF0 YWIgPSBOVUxMLCAqbDFzdGFydCA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIFRoaXMgZnVsbHkg ZGVzY3JpYmVzIHRoZSBtZW1vcnkgbGF5b3V0IG9mIHRoZSBpbml0aWFsIGRvbWFpbi4gQWxsCisg ICAgICogKl9zdGFydCBhZGRyZXNzIGFyZSBwYWdlLWFsaWduZWQsIGV4Y2VwdCB2X3N0YXJ0IChh bmQgdl9lbmQpIHdoaWNoIGFyZQorICAgICAqIHN1cGVycGFnZS1hbGlnbmVkLgorICAgICAqLwor ICAgIHN0cnVjdCBlbGZfYmluYXJ5IGVsZjsKKyAgICBzdHJ1Y3QgZWxmX2RvbV9wYXJtcyBwYXJt czsKKyAgICB1bnNpZ25lZCBsb25nIHZrZXJuX3N0YXJ0OworICAgIHVuc2lnbmVkIGxvbmcgdmtl cm5fZW5kOworICAgIHVuc2lnbmVkIGxvbmcgdmluaXRyZF9zdGFydDsKKyAgICB1bnNpZ25lZCBs b25nIHZpbml0cmRfZW5kOworICAgIHVuc2lnbmVkIGxvbmcgdnBoeXNtYXBfc3RhcnQ7CisgICAg dW5zaWduZWQgbG9uZyB2cGh5c21hcF9lbmQ7CisgICAgdW5zaWduZWQgbG9uZyB2c3RhcnRpbmZv X3N0YXJ0OworICAgIHVuc2lnbmVkIGxvbmcgdnN0YXJ0aW5mb19lbmQ7CisgICAgdW5zaWduZWQg bG9uZyB2c3RhY2tfc3RhcnQ7CisgICAgdW5zaWduZWQgbG9uZyB2c3RhY2tfZW5kOworICAgIHVu c2lnbmVkIGxvbmcgdnB0X3N0YXJ0OworICAgIHVuc2lnbmVkIGxvbmcgdnB0X2VuZDsKKyAgICB1 bnNpZ25lZCBsb25nIHZfc3RhcnQ7CisgICAgdW5zaWduZWQgbG9uZyB2X2VuZDsKKworICAgIC8q IE1hY2hpbmUgYWRkcmVzcyBvZiBuZXh0IGNhbmRpZGF0ZSBwYWdlLXRhYmxlIHBhZ2UuICovCisg ICAgcGFkZHJfdCBtcHRfYWxsb2M7CisKKyAgICBwcmludGsoIioqKiBMT0FESU5HIERPTUFJTiAw ICoqKlxuIik7CisKKyAgICBkLT5tYXhfcGFnZXMgPSB+MFU7CisKKyAgICBpZiAoIChyYyA9IGJ6 aW1hZ2VfcGFyc2UoaW1hZ2VfYmFzZSwgJmltYWdlX3N0YXJ0LCAmaW1hZ2VfbGVuKSkgIT0gMCAp CisgICAgICAgIHJldHVybiByYzsKKworICAgIGlmICggKHJjID0gZWxmX2luaXQoJmVsZiwgaW1h Z2Vfc3RhcnQsIGltYWdlX2xlbikpICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisjaWZkZWYg Q09ORklHX1ZFUkJPU0VfREVCVUcKKyAgICBlbGZfc2V0X3ZlcmJvc2UoJmVsZik7CisjZW5kaWYK KyAgICBlbGZfcGFyc2VfYmluYXJ5KCZlbGYpOworICAgIGlmICggKHJjID0gZWxmX3hlbl9wYXJz ZSgmZWxmLCAmcGFybXMpKSAhPSAwICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICAvKiBjb21w YXRpYmlsaXR5IGNoZWNrICovCisgICAgY29tcGF0aWJsZSA9IDA7CisgICAgY29tcGF0MzIgICA9 IDA7CisgICAgbWFjaGluZSA9IGVsZl91dmFsKCZlbGYsIGVsZi5laGRyLCBlX21hY2hpbmUpOwor ICAgIHByaW50aygiIFhlbiAga2VybmVsOiA2NC1iaXQsIGxzYiwgY29tcGF0MzJcbiIpOworICAg IGlmIChlbGZfMzJiaXQoJmVsZikgJiYgcGFybXMucGFlID09IFhFTl9QQUVfQklNT0RBTCkKKyAg ICAgICAgcGFybXMucGFlID0gWEVOX1BBRV9FWFRDUjM7CisgICAgaWYgKGVsZl8zMmJpdCgmZWxm KSAmJiBwYXJtcy5wYWUgJiYgbWFjaGluZSA9PSBFTV8zODYpCisgICAgeworICAgICAgICBjb21w YXQzMiA9IDE7CisgICAgICAgIGNvbXBhdGlibGUgPSAxOworICAgIH0KKyAgICBpZiAoZWxmXzY0 Yml0KCZlbGYpICYmIG1hY2hpbmUgPT0gRU1fWDg2XzY0KQorICAgICAgICBjb21wYXRpYmxlID0g MTsKKyAgICBwcmludGsoIiBEb20wIGtlcm5lbDogJXMlcywgJXMsIHBhZGRyICUjIiBQUkl4NjQg IiAtPiAlIyIgUFJJeDY0ICJcbiIsCisgICAgICAgICAgIGVsZl82NGJpdCgmZWxmKSA/ICI2NC1i aXQiIDogIjMyLWJpdCIsCisgICAgICAgICAgIHBhcm1zLnBhZSAgICAgICA/ICIsIFBBRSIgIDog IiIsCisgICAgICAgICAgIGVsZl9tc2IoJmVsZikgICA/ICJtc2IiICAgIDogImxzYiIsCisgICAg ICAgICAgIGVsZi5wc3RhcnQsIGVsZi5wZW5kKTsKKyAgICBpZiAoIGVsZi5ic2Rfc3ltdGFiX3Bz dGFydCApCisgICAgICAgIHByaW50aygiIERvbTAgc3ltYm9sIG1hcCAlIyIgUFJJeDY0ICIgLT4g JSMiIFBSSXg2NCAiXG4iLAorICAgICAgICAgICAgICAgZWxmLmJzZF9zeW10YWJfcHN0YXJ0LCBl bGYuYnNkX3N5bXRhYl9wZW5kKTsKKworICAgIGlmICggIWNvbXBhdGlibGUgKQorICAgIHsKKyAg ICAgICAgcHJpbnRrKCJNaXNtYXRjaCBiZXR3ZWVuIFhlbiBhbmQgRE9NMCBrZXJuZWxcbiIpOwor ICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlm ICggcGFybXMuZWxmX25vdGVzW1hFTl9FTEZOT1RFX1NVUFBPUlRFRF9GRUFUVVJFU10udHlwZSAh PSBYRU5fRU5UX05PTkUgKQorICAgIHsKKyAgICAgICAgaWYgKCAhdGVzdF9iaXQoWEVORkVBVF9k b20wLCBwYXJtcy5mX3N1cHBvcnRlZCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGso Iktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IERvbTAgb3BlcmF0aW9uXG4iKTsKKyAgICAgICAgICAg IHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQor CisgICAgaWYgKCBjb21wYXQzMiApCisgICAgeworICAgICAgICBkLT5hcmNoLmlzXzMyYml0X3B2 ID0gZC0+YXJjaC5oYXNfMzJiaXRfc2hpbmZvID0gMTsKKyAgICAgICAgdi0+dmNwdV9pbmZvID0g KHZvaWQgKikmZC0+c2hhcmVkX2luZm8tPmNvbXBhdC52Y3B1X2luZm9bMF07CisgICAgICAgIGlm ICggc2V0dXBfY29tcGF0X2FyZ194bGF0KHYpICE9IDAgKQorICAgICAgICAgICAgQlVHKCk7Cisg ICAgfQorCisgICAgbnJfcGFnZXMgPSBkb20wX2NvbXB1dGVfbnJfcGFnZXMoZCwgJnBhcm1zLCBp bml0cmRfbGVuKTsKKworICAgIGlmICggcGFybXMucGFlID09IFhFTl9QQUVfRVhUQ1IzICkKKyAg ICAgICAgICAgIHNldF9iaXQoVk1BU1NUX1RZUEVfcGFlX2V4dGVuZGVkX2NyMywgJmQtPnZtX2Fz c2lzdCk7CisKKyAgICBpZiAoIChwYXJtcy52aXJ0X2h2X3N0YXJ0X2xvdyAhPSBVTlNFVF9BRERS KSAmJiBlbGZfMzJiaXQoJmVsZikgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNr ID0gKDFVTCA8PCBMMl9QQUdFVEFCTEVfU0hJRlQpIC0gMTsKKyAgICAgICAgdmFsdWUgPSAocGFy bXMudmlydF9odl9zdGFydF9sb3cgKyBtYXNrKSAmIH5tYXNrOworICAgICAgICBCVUdfT04oIWlz X3B2XzMyYml0X2RvbWFpbihkKSk7CisgICAgICAgIGlmICggdmFsdWUgPiBfX0hZUEVSVklTT1Jf Q09NUEFUX1ZJUlRfU1RBUlQgKQorICAgICAgICAgICAgcGFuaWMoIkRvbWFpbiAwIGV4cGVjdHMg dG9vIGhpZ2ggYSBoeXBlcnZpc29yIHN0YXJ0IGFkZHJlc3MiKTsKKyAgICAgICAgSFlQRVJWSVNP Ul9DT01QQVRfVklSVF9TVEFSVChkKSA9CisgICAgICAgICAgICBtYXhfdCh1bnNpZ25lZCBpbnQs IG0ycF9jb21wYXRfdnN0YXJ0LCB2YWx1ZSk7CisgICAgfQorCisgICAgaWYgKCAocGFybXMucDJt X2Jhc2UgIT0gVU5TRVRfQUREUikgJiYgZWxmXzMyYml0KCZlbGYpICkKKyAgICB7CisgICAgICAg IHByaW50ayhYRU5MT0dfV0FSTklORyAiUDJNIHRhYmxlIGJhc2UgaWdub3JlZFxuIik7CisgICAg ICAgIHBhcm1zLnAybV9iYXNlID0gVU5TRVRfQUREUjsKKyAgICB9CisKKyAgICBkb21haW5fc2V0 X2FsbG9jX2JpdHNpemUoZCk7CisKKyAgICAvKgorICAgICAqIFdoeSBkbyB3ZSBuZWVkIHRoaXM/ IFRoZSBudW1iZXIgb2YgcGFnZS10YWJsZSBmcmFtZXMgZGVwZW5kcyBvbiB0aGUKKyAgICAgKiBz aXplIG9mIHRoZSBib290c3RyYXAgYWRkcmVzcyBzcGFjZS4gQnV0IHRoZSBzaXplIG9mIHRoZSBh ZGRyZXNzIHNwYWNlCisgICAgICogZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIHBhZ2UtdGFibGUg ZnJhbWVzIChzaW5jZSBlYWNoIG9uZSBpcyBtYXBwZWQKKyAgICAgKiByZWFkLW9ubHkpLiBXZSBo YXZlIGEgcGFpciBvZiBzaW11bHRhbmVvdXMgZXF1YXRpb25zIGluIHR3byB1bmtub3ducywKKyAg ICAgKiB3aGljaCB3ZSBzb2x2ZSBieSBleGhhdXN0aXZlIHNlYXJjaC4KKyAgICAgKi8KKyAgICB2 X3N0YXJ0ICAgICAgICAgID0gcGFybXMudmlydF9iYXNlOworICAgIHZrZXJuX3N0YXJ0ICAgICAg PSBwYXJtcy52aXJ0X2tzdGFydDsKKyAgICB2a2Vybl9lbmQgICAgICAgID0gcGFybXMudmlydF9r ZW5kOworICAgIGlmICggcGFybXMudW5tYXBwZWRfaW5pdHJkICkKKyAgICB7CisgICAgICAgIHZp bml0cmRfc3RhcnQgID0gdmluaXRyZF9lbmQgPSAwOworICAgICAgICB2cGh5c21hcF9zdGFydCA9 IHJvdW5kX3BndXAodmtlcm5fZW5kKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg dmluaXRyZF9zdGFydCAgPSByb3VuZF9wZ3VwKHZrZXJuX2VuZCk7CisgICAgICAgIHZpbml0cmRf ZW5kICAgID0gdmluaXRyZF9zdGFydCArIGluaXRyZF9sZW47CisgICAgICAgIHZwaHlzbWFwX3N0 YXJ0ID0gcm91bmRfcGd1cCh2aW5pdHJkX2VuZCk7CisgICAgfQorICAgIHZwaHlzbWFwX2VuZCAg ICAgPSB2cGh5c21hcF9zdGFydCArIChucl9wYWdlcyAqICghaXNfcHZfMzJiaXRfZG9tYWluKGQp ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGludCkpKTsKKyAgICBpZiAoIHBh cm1zLnAybV9iYXNlICE9IFVOU0VUX0FERFIgKQorICAgICAgICB2cGh5c21hcF9lbmQgPSB2cGh5 c21hcF9zdGFydDsKKyAgICB2c3RhcnRpbmZvX3N0YXJ0ID0gcm91bmRfcGd1cCh2cGh5c21hcF9l bmQpOworICAgIHZzdGFydGluZm9fZW5kICAgPSAodnN0YXJ0aW5mb19zdGFydCArCisgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHN0YXJ0X2luZm8pICsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZG9tMF92Z2FfY29uc29sZV9pbmZvKSk7CisKKyAg ICB2cHRfc3RhcnQgICAgICAgID0gcm91bmRfcGd1cCh2c3RhcnRpbmZvX2VuZCk7CisgICAgZm9y ICggbnJfcHRfcGFnZXMgPSAyOyA7IG5yX3B0X3BhZ2VzKysgKQorICAgIHsKKyAgICAgICAgdnB0 X2VuZCAgICAgICAgICA9IHZwdF9zdGFydCArIChucl9wdF9wYWdlcyAqIFBBR0VfU0laRSk7Cisg ICAgICAgIHZzdGFja19zdGFydCAgICAgPSB2cHRfZW5kOworICAgICAgICB2c3RhY2tfZW5kICAg ICAgID0gdnN0YWNrX3N0YXJ0ICsgUEFHRV9TSVpFOworICAgICAgICB2X2VuZCAgICAgICAgICAg ID0gKHZzdGFja19lbmQgKyAoMVVMPDwyMiktMSkgJiB+KCgxVUw8PDIyKS0xKTsKKyAgICAgICAg aWYgKCAodl9lbmQgLSB2c3RhY2tfZW5kKSA8ICg1MTJVTCA8PCAxMCkgKQorICAgICAgICAgICAg dl9lbmQgKz0gMVVMIDw8IDIyOyAvKiBBZGQgZXh0cmEgNE1CIHRvIGdldCA+PSA1MTJrQiBwYWRk aW5nLiAqLworI2RlZmluZSBOUihfbCxfaCxfcykgXAorICAgICgoKCgoX2gpICsgKCgxVUw8PChf cykpLTEpKSAmIH4oKDFVTDw8KF9zKSktMSkpIC0gXAorICAgICAgICgoX2wpICYgfigoMVVMPDwo X3MpKS0xKSkpID4+IChfcykpCisgICAgICAgIGlmICggKCFpc19wdl8zMmJpdF9kb21haW4oZCkg KyAvKiAjIEw0ICovCisgICAgICAgICAgICAgIE5SKHZfc3RhcnQsIHZfZW5kLCBMNF9QQUdFVEFC TEVfU0hJRlQpICsgLyogIyBMMyAqLworICAgICAgICAgICAgICAoIWlzX3B2XzMyYml0X2RvbWFp bihkKSA/CisgICAgICAgICAgICAgICBOUih2X3N0YXJ0LCB2X2VuZCwgTDNfUEFHRVRBQkxFX1NI SUZUKSA6IC8qICMgTDIgKi8KKyAgICAgICAgICAgICAgIDQpICsgLyogIyBjb21wYXQgTDIgKi8K KyAgICAgICAgICAgICAgTlIodl9zdGFydCwgdl9lbmQsIEwyX1BBR0VUQUJMRV9TSElGVCkpICAv KiAjIEwxICovCisgICAgICAgICAgICAgPD0gbnJfcHRfcGFnZXMgKQorICAgICAgICAgICAgYnJl YWs7CisgICAgfQorCisgICAgY291bnQgPSB2X2VuZCAtIHZfc3RhcnQ7CisgICAgaWYgKCB2aW5p dHJkX3N0YXJ0ICkKKyAgICAgICAgY291bnQgLT0gUEFHRV9BTElHTihpbml0cmRfbGVuKTsKKyAg ICBvcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKGNvdW50KTsKKyAgICBpZiAoICgxVUwgPDwg b3JkZXIpICsgUEZOX1VQKGluaXRyZF9sZW4pID4gbnJfcGFnZXMgKQorICAgICAgICBwYW5pYygi RG9tYWluIDAgYWxsb2NhdGlvbiBpcyB0b28gc21hbGwgZm9yIGtlcm5lbCBpbWFnZSIpOworCisg ICAgaWYgKCBwYXJtcy5wMm1fYmFzZSAhPSBVTlNFVF9BRERSICkKKyAgICB7CisgICAgICAgIHZw aHlzbWFwX3N0YXJ0ID0gcGFybXMucDJtX2Jhc2U7CisgICAgICAgIHZwaHlzbWFwX2VuZCAgID0g dnBoeXNtYXBfc3RhcnQgKyBucl9wYWdlcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyAgICB9 CisgICAgcGFnZSA9IGFsbG9jX2RvbWhlYXBfcGFnZXMoZCwgb3JkZXIsIDApOworICAgIGlmICgg cGFnZSA9PSBOVUxMICkKKyAgICAgICAgcGFuaWMoIk5vdCBlbm91Z2ggUkFNIGZvciBkb21haW4g MCBhbGxvY2F0aW9uIik7CisgICAgYWxsb2Nfc3BmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAg IGFsbG9jX2VwZm4gPSBhbGxvY19zcGZuICsgZC0+dG90X3BhZ2VzOworCisgICAgaWYgKCBpbml0 cmRfbGVuICkKKyAgICB7CisgICAgICAgIGluaXRyZF9wZm4gPSB2aW5pdHJkX3N0YXJ0ID8KKyAg ICAgICAgICAgICAgICAgICAgICh2aW5pdHJkX3N0YXJ0IC0gdl9zdGFydCkgPj4gUEFHRV9TSElG VCA6CisgICAgICAgICAgICAgICAgICAgICBkLT50b3RfcGFnZXM7CisgICAgICAgIGluaXRyZF9t Zm4gPSBtZm4gPSBpbml0cmQtPm1vZF9zdGFydDsKKyAgICAgICAgY291bnQgPSBQRk5fVVAoaW5p dHJkX2xlbik7CisgICAgICAgIGlmICggZC0+YXJjaC5waHlzYWRkcl9iaXRzaXplICYmCisgICAg ICAgICAgICAgKChtZm4gKyBjb3VudCAtIDEpID4+IChkLT5hcmNoLnBoeXNhZGRyX2JpdHNpemUg LSBQQUdFX1NISUZUKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBvcmRlciA9IGdldF9vcmRl cl9mcm9tX3BhZ2VzKGNvdW50KTsKKyAgICAgICAgICAgIHBhZ2UgPSBhbGxvY19kb21oZWFwX3Bh Z2VzKGQsIG9yZGVyLCAwKTsKKyAgICAgICAgICAgIGlmICggIXBhZ2UgKQorICAgICAgICAgICAg ICAgIHBhbmljKCJOb3QgZW5vdWdoIFJBTSBmb3IgZG9tYWluIDAgaW5pdHJkIik7CisgICAgICAg ICAgICBmb3IgKCBjb3VudCA9IC1jb3VudDsgb3JkZXItLTsgKQorICAgICAgICAgICAgICAgIGlm ICggY291bnQgJiAoMVVMIDw8IG9yZGVyKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICBmcmVlX2RvbWhlYXBfcGFnZXMocGFnZSwgb3JkZXIpOworICAgICAgICAgICAg ICAgICAgICBwYWdlICs9IDFVTCA8PCBvcmRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICBtZW1jcHkocGFnZV90b192aXJ0KHBhZ2UpLCBtZm5fdG9fdmlydChpbml0cmQtPm1vZF9z dGFydCksCisgICAgICAgICAgICAgICAgICAgaW5pdHJkX2xlbik7CisgICAgICAgICAgICBtcHRf YWxsb2MgPSAocGFkZHJfdClpbml0cmQtPm1vZF9zdGFydCA8PCBQQUdFX1NISUZUOworICAgICAg ICAgICAgaW5pdF9kb21oZWFwX3BhZ2VzKG1wdF9hbGxvYywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtcHRfYWxsb2MgKyBQQUdFX0FMSUdOKGluaXRyZF9sZW4pKTsKKyAgICAgICAg ICAgIGluaXRyZC0+bW9kX3N0YXJ0ID0gaW5pdHJkX21mbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwor ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCBj b3VudC0tICkKKyAgICAgICAgICAgICAgICBpZiAoIGFzc2lnbl9wYWdlcyhkLCBtZm5fdG9fcGFn ZShtZm4rKyksIDAsIDApICkKKyAgICAgICAgICAgICAgICAgICAgQlVHKCk7CisgICAgICAgIH0K KyAgICAgICAgaW5pdHJkLT5tb2RfZW5kID0gMDsKKyAgICB9CisKKyAgICBwcmludGsoIlBIWVNJ Q0FMIE1FTU9SWSBBUlJBTkdFTUVOVDpcbiIKKyAgICAgICAgICAgIiBEb20wIGFsbG9jLjogICAl IlBSSXBhZGRyIi0+JSJQUklwYWRkciwKKyAgICAgICAgICAgcGZuX3RvX3BhZGRyKGFsbG9jX3Nw Zm4pLCBwZm5fdG9fcGFkZHIoYWxsb2NfZXBmbikpOworICAgIGlmICggZC0+dG90X3BhZ2VzIDwg bnJfcGFnZXMgKQorICAgICAgICBwcmludGsoIiAoJWx1IHBhZ2VzIHRvIGJlIGFsbG9jYXRlZCki LAorICAgICAgICAgICAgICAgbnJfcGFnZXMgLSBkLT50b3RfcGFnZXMpOworICAgIGlmICggaW5p dHJkICkKKyAgICB7CisgICAgICAgIG1wdF9hbGxvYyA9IChwYWRkcl90KWluaXRyZC0+bW9kX3N0 YXJ0IDw8IFBBR0VfU0hJRlQ7CisgICAgICAgIHByaW50aygiXG4gSW5pdC4gcmFtZGlzazogJSJQ UklwYWRkciItPiUiUFJJcGFkZHIsCisgICAgICAgICAgICAgICBtcHRfYWxsb2MsIG1wdF9hbGxv YyArIGluaXRyZF9sZW4pOworICAgIH0KKyAgICBwcmludGsoIlxuVklSVFVBTCBNRU1PUlkgQVJS QU5HRU1FTlQ6XG4iCisgICAgICAgICAgICIgTG9hZGVkIGtlcm5lbDogJXAtPiVwXG4iCisgICAg ICAgICAgICIgSW5pdC4gcmFtZGlzazogJXAtPiVwXG4iCisgICAgICAgICAgICIgUGh5cy1NYWNo IG1hcDogJXAtPiVwXG4iCisgICAgICAgICAgICIgU3RhcnQgaW5mbzogICAgJXAtPiVwXG4iCisg ICAgICAgICAgICIgUGFnZSB0YWJsZXM6ICAgJXAtPiVwXG4iCisgICAgICAgICAgICIgQm9vdCBz dGFjazogICAgJXAtPiVwXG4iCisgICAgICAgICAgICIgVE9UQUw6ICAgICAgICAgJXAtPiVwXG4i LAorICAgICAgICAgICBfcCh2a2Vybl9zdGFydCksIF9wKHZrZXJuX2VuZCksCisgICAgICAgICAg IF9wKHZpbml0cmRfc3RhcnQpLCBfcCh2aW5pdHJkX2VuZCksCisgICAgICAgICAgIF9wKHZwaHlz bWFwX3N0YXJ0KSwgX3AodnBoeXNtYXBfZW5kKSwKKyAgICAgICAgICAgX3AodnN0YXJ0aW5mb19z dGFydCksIF9wKHZzdGFydGluZm9fZW5kKSwKKyAgICAgICAgICAgX3AodnB0X3N0YXJ0KSwgX3Ao dnB0X2VuZCksCisgICAgICAgICAgIF9wKHZzdGFja19zdGFydCksIF9wKHZzdGFja19lbmQpLAor ICAgICAgICAgICBfcCh2X3N0YXJ0KSwgX3Aodl9lbmQpKTsKKyAgICBwcmludGsoIiBFTlRSWSBB RERSRVNTOiAlcFxuIiwgX3AocGFybXMudmlydF9lbnRyeSkpOworCisgICAgcHJvY2Vzc19wZW5k aW5nX3NvZnRpcnFzKCk7CisKKyAgICBtcHRfYWxsb2MgPSAodnB0X3N0YXJ0IC0gdl9zdGFydCkg KyBwZm5fdG9fcGFkZHIoYWxsb2Nfc3Bmbik7CisgICAgaWYgKCB2aW5pdHJkX3N0YXJ0ICkKKyAg ICAgICAgbXB0X2FsbG9jIC09IFBBR0VfQUxJR04oaW5pdHJkX2xlbik7CisKKyAgICAvKiBPdmVy bGFwIHdpdGggWGVuIHByb3RlY3RlZCBhcmVhPyAqLworICAgIGlmICggIWlzX3B2XzMyYml0X2Rv bWFpbihkKSA/CisgICAgICAgICAoKHZfc3RhcnQgPCBIWVBFUlZJU09SX1ZJUlRfRU5EKSAmJgor ICAgICAgICAgICh2X2VuZCA+IEhZUEVSVklTT1JfVklSVF9TVEFSVCkpIDoKKyAgICAgICAgICh2 X2VuZCA+IEhZUEVSVklTT1JfQ09NUEFUX1ZJUlRfU1RBUlQoZCkpICkKKyAgICB7CisgICAgICAg IHByaW50aygiRE9NMCBpbWFnZSBvdmVybGFwcyB3aXRoIFhlbiBwcml2YXRlIGFyZWEuXG4iKTsK KyAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBp ZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSApCisgICAgeworICAgICAgICB2LT5hcmNoLnB2X3Zj cHUuZmFpbHNhZmVfY2FsbGJhY2tfY3MgPSBGTEFUX0NPTVBBVF9LRVJORUxfQ1M7CisgICAgICAg IHYtPmFyY2gucHZfdmNwdS5ldmVudF9jYWxsYmFja19jcyAgICA9IEZMQVRfQ09NUEFUX0tFUk5F TF9DUzsKKyAgICB9CisKKyAgICAvKiBXQVJOSU5HOiBUaGUgbmV3IGRvbWFpbiBtdXN0IGhhdmUg aXRzICdwcm9jZXNzb3InIGZpZWxkIGZpbGxlZCBpbiEgKi8KKyAgICBpZiAoICFpc19wdl8zMmJp dF9kb21haW4oZCkgKQorICAgIHsKKyAgICAgICAgbWFkZHJfdG9fcGFnZShtcHRfYWxsb2MpLT51 LmludXNlLnR5cGVfaW5mbyA9IFBHVF9sNF9wYWdlX3RhYmxlOworICAgICAgICBsNHN0YXJ0ID0g bDR0YWIgPSBfX3ZhKG1wdF9hbGxvYyk7IG1wdF9hbGxvYyArPSBQQUdFX1NJWkU7CisgICAgfQor ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBhZ2UgPSBhbGxvY19kb21oZWFwX3BhZ2UoZCwgTUVN Rl9ub19vd25lcik7CisgICAgICAgIGlmICggIXBhZ2UgKQorICAgICAgICAgICAgcGFuaWMoIk5v dCBlbm91Z2ggUkFNIGZvciBkb21haW4gMCBQTUw0Iik7CisgICAgICAgIHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvID0gUEdUX2w0X3BhZ2VfdGFibGV8UEdUX3ZhbGlkYXRlZHwxOworICAgICAgICBs NHN0YXJ0ID0gbDR0YWIgPSBwYWdlX3RvX3ZpcnQocGFnZSk7CisgICAgICAgIG1hZGRyX3RvX3Bh Z2UobXB0X2FsbG9jKS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDNfcGFnZV90YWJsZTsKKyAg ICAgICAgbDNzdGFydCA9IF9fdmEobXB0X2FsbG9jKTsgbXB0X2FsbG9jICs9IFBBR0VfU0laRTsK KyAgICB9CisgICAgY2xlYXJfcGFnZShsNHRhYik7CisgICAgaW5pdF9ndWVzdF9sNF90YWJsZShs NHRhYiwgZCwgMCk7CisgICAgdi0+YXJjaC5ndWVzdF90YWJsZSA9IHBhZ2V0YWJsZV9mcm9tX3Bh ZGRyKF9fcGEobDRzdGFydCkpOworICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKKyAg ICAgICAgdi0+YXJjaC5ndWVzdF90YWJsZV91c2VyID0gdi0+YXJjaC5ndWVzdF90YWJsZTsKKwor ICAgIGw0dGFiICs9IGw0X3RhYmxlX29mZnNldCh2X3N0YXJ0KTsKKyAgICBwZm4gPSBhbGxvY19z cGZuOworICAgIGZvciAoIGNvdW50ID0gMDsgY291bnQgPCAoKHZfZW5kLXZfc3RhcnQpPj5QQUdF X1NISUZUKTsgY291bnQrKyApCisgICAgeworICAgICAgICBpZiAoICEoKHVuc2lnbmVkIGxvbmcp bDF0YWIgJiAoUEFHRV9TSVpFLTEpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hZGRyX3Rv X3BhZ2UobXB0X2FsbG9jKS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDFfcGFnZV90YWJsZTsK KyAgICAgICAgICAgIGwxc3RhcnQgPSBsMXRhYiA9IF9fdmEobXB0X2FsbG9jKTsgbXB0X2FsbG9j ICs9IFBBR0VfU0laRTsKKyAgICAgICAgICAgIGNsZWFyX3BhZ2UobDF0YWIpOworICAgICAgICAg ICAgaWYgKCBjb3VudCA9PSAwICkKKyAgICAgICAgICAgICAgICBsMXRhYiArPSBsMV90YWJsZV9v ZmZzZXQodl9zdGFydCk7CisgICAgICAgICAgICBpZiAoICEoKHVuc2lnbmVkIGxvbmcpbDJ0YWIg JiAoUEFHRV9TSVpFLTEpKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWFkZHJf dG9fcGFnZShtcHRfYWxsb2MpLT51LmludXNlLnR5cGVfaW5mbyA9IFBHVF9sMl9wYWdlX3RhYmxl OworICAgICAgICAgICAgICAgIGwyc3RhcnQgPSBsMnRhYiA9IF9fdmEobXB0X2FsbG9jKTsgbXB0 X2FsbG9jICs9IFBBR0VfU0laRTsKKyAgICAgICAgICAgICAgICBjbGVhcl9wYWdlKGwydGFiKTsK KyAgICAgICAgICAgICAgICBpZiAoIGNvdW50ID09IDAgKQorICAgICAgICAgICAgICAgICAgICBs MnRhYiArPSBsMl90YWJsZV9vZmZzZXQodl9zdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKCAh KCh1bnNpZ25lZCBsb25nKWwzdGFiICYgKFBBR0VfU0laRS0xKSkgKQorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3VudCB8fCAhbDNzdGFydCApCisgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hZGRyX3RvX3BhZ2UobXB0 X2FsbG9jKS0+dS5pbnVzZS50eXBlX2luZm8gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBHVF9sM19wYWdlX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgbDNzdGFydCA9IF9f dmEobXB0X2FsbG9jKTsgbXB0X2FsbG9jICs9IFBBR0VfU0laRTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBsM3RhYiA9IGwzc3RhcnQ7CisgICAgICAgICAgICAg ICAgICAgIGNsZWFyX3BhZ2UobDN0YWIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIGNvdW50 ID09IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgbDN0YWIgKz0gbDNfdGFibGVfb2Zmc2V0 KHZfc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAqbDR0YWIgPSBsNGVfZnJvbV9wYWRkcihf X3BhKGwzc3RhcnQpLCBMNF9QUk9UKTsKKyAgICAgICAgICAgICAgICAgICAgbDR0YWIrKzsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKmwzdGFiID0gbDNlX2Zyb21fcGFkZHIo X19wYShsMnN0YXJ0KSwgTDNfUFJPVCk7CisgICAgICAgICAgICAgICAgbDN0YWIrKzsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICpsMnRhYiA9IGwyZV9mcm9tX3BhZGRyKF9fcGEobDFzdGFy dCksIEwyX1BST1QpOworICAgICAgICAgICAgbDJ0YWIrKzsKKyAgICAgICAgfQorICAgICAgICBp ZiAoIGNvdW50IDwgaW5pdHJkX3BmbiB8fCBjb3VudCA+PSBpbml0cmRfcGZuICsgUEZOX1VQKGlu aXRyZF9sZW4pICkKKyAgICAgICAgICAgIG1mbiA9IHBmbisrOworICAgICAgICBlbHNlCisgICAg ICAgICAgICBtZm4gPSBpbml0cmRfbWZuKys7CisgICAgICAgICpsMXRhYiA9IGwxZV9mcm9tX3Bm bihtZm4sICghaXNfcHZfMzJiaXRfZG9tYWluKGQpID8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEwxX1BST1QgOiBDT01QQVRfTDFfUFJPVCkpOworICAgICAgICBsMXRhYisr OworCisgICAgICAgIGlmICggIXBhZ2luZ19tb2RlX3RyYW5zbGF0ZShkKSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShtZm4pOworICAgICAgICAgICAgaWYgKCAh cGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiYKKyAgICAgICAgICAgICAgICAgIWdldF9wYWdlX2Fu ZF90eXBlKHBhZ2UsIGQsIFBHVF93cml0YWJsZV9wYWdlKSApCisgICAgICAgICAgICAgICAgQlVH KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSAp CisgICAgeworICAgICAgICAvKiBFbnN1cmUgdGhlIGZpcnN0IGZvdXIgTDMgZW50cmllcyBhcmUg YWxsIHBvcHVsYXRlZC4gKi8KKyAgICAgICAgZm9yICggaSA9IDAsIGwzdGFiID0gbDNzdGFydDsg aSA8IDQ7ICsraSwgKytsM3RhYiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggIWwzZV9n ZXRfaW50cHRlKCpsM3RhYikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1hZGRy X3RvX3BhZ2UobXB0X2FsbG9jKS0+dS5pbnVzZS50eXBlX2luZm8gPSBQR1RfbDJfcGFnZV90YWJs ZTsKKyAgICAgICAgICAgICAgICBsMnRhYiA9IF9fdmEobXB0X2FsbG9jKTsgbXB0X2FsbG9jICs9 IFBBR0VfU0laRTsKKyAgICAgICAgICAgICAgICBjbGVhcl9wYWdlKGwydGFiKTsKKyAgICAgICAg ICAgICAgICAqbDN0YWIgPSBsM2VfZnJvbV9wYWRkcihfX3BhKGwydGFiKSwgTDNfUFJPVCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGkgPT0gMyApCisgICAgICAgICAgICAgICAg bDNlX2dldF9wYWdlKCpsM3RhYiktPnUuaW51c2UudHlwZV9pbmZvIHw9IFBHVF9wYWVfeGVuX2wy OworICAgICAgICB9CisgICAgICAgIC8qIEluc3RhbGwgcmVhZC1vbmx5IGd1ZXN0IHZpc2libGUg TVBUIG1hcHBpbmcuICovCisgICAgICAgIGwydGFiID0gbDNlX3RvX2wyZShsM3N0YXJ0WzNdKTsK KyAgICAgICAgbWVtY3B5KCZsMnRhYltDT01QQVRfTDJfUEFHRVRBQkxFX0ZJUlNUX1hFTl9TTE9U KGQpXSwKKyAgICAgICAgICAgICAgICZjb21wYXRfaWRsZV9wZ190YWJsZV9sMltsMl90YWJsZV9v ZmZzZXQoSElST19DT01QQVRfTVBUX1ZJUlRfU1RBUlQpXSwKKyAgICAgICAgICAgICAgIENPTVBB VF9MMl9QQUdFVEFCTEVfWEVOX1NMT1RTKGQpICogc2l6ZW9mKCpsMnRhYikpOworICAgIH0KKwor ICAgIC8qIFBhZ2VzIHRoYXQgYXJlIHBhcnQgb2YgcGFnZSB0YWJsZXMgbXVzdCBiZSByZWFkIG9u bHkuICovCisgICAgaWYgICggaXNfcHZfZG9tYWluKGQpICkKKyAgICAgICAgbWFya19wdl9wdF9w YWdlc19yZG9ubHkoZCwgbDRzdGFydCwgdnB0X3N0YXJ0LCBucl9wdF9wYWdlcyk7CisKKyAgICAv KiBNYXNrIGFsbCB1cGNhbGxzLi4uICovCisgICAgZm9yICggaSA9IDA7IGkgPCBYRU5fTEVHQUNZ X01BWF9WQ1BVUzsgaSsrICkKKyAgICAgICAgc2hhcmVkX2luZm8oZCwgdmNwdV9pbmZvW2ldLmV2 dGNobl91cGNhbGxfbWFzaykgPSAxOworCisgICAgcHJpbnRrKCJEb20wIGhhcyBtYXhpbXVtICV1 IFZDUFVzXG4iLCBkLT5tYXhfdmNwdXMpOworCisgICAgY3B1ID0gdi0+cHJvY2Vzc29yOworICAg IGZvciAoIGkgPSAxOyBpIDwgZC0+bWF4X3ZjcHVzOyBpKysgKQorICAgIHsKKyAgICAgICAgY3B1 ID0gY3B1bWFza19jeWNsZShjcHUsICZkb20wX2NwdXMpOworICAgICAgICBkb20wX3NldHVwX3Zj cHUoZCwgaSwgY3B1KTsKKyAgICB9CisKKyAgICBkLT5hcmNoLnBhZ2luZy5tb2RlID0gMDsKKwor ICAgIC8qIFNldCB1cCBDUjMgdmFsdWUgZm9yIHdyaXRlX3B0YmFzZSAqLworICAgIGlmICggcGFn aW5nX21vZGVfZW5hYmxlZChkKSApCisgICAgICAgIHBhZ2luZ191cGRhdGVfcGFnaW5nX21vZGVz KHYpOworICAgIGVsc2UKKyAgICAgICAgdXBkYXRlX2NyMyh2KTsKKworICAgIC8qIFdlIHJ1biBv biBkb20wJ3MgcGFnZSB0YWJsZXMgZm9yIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSBidWlsZCBwcm9j ZXNzLiAqLworICAgIHdyaXRlX3B0YmFzZSh2KTsKKyAgICBtYXBjYWNoZV9vdmVycmlkZV9jdXJy ZW50KHYpOworCisgICAgLyogQ29weSB0aGUgT1MgaW1hZ2UgYW5kIGZyZWUgdGVtcG9yYXJ5IGJ1 ZmZlci4gKi8KKyAgICBlbGYuZGVzdF9iYXNlID0gKHZvaWQqKXZrZXJuX3N0YXJ0OworICAgIGVs Zi5kZXN0X3NpemUgPSB2a2Vybl9lbmQgLSB2a2Vybl9zdGFydDsKKyAgICBlbGZfc2V0X3ZjcHUo JmVsZiwgdik7CisgICAgcmMgPSBlbGZfbG9hZF9iaW5hcnkoJmVsZik7CisgICAgaWYgKCByYyA8 IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gbG9hZCB0aGUga2VybmVsIGJp bmFyeVxuIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBib290c3RyYXBfbWFwKE5V TEwpOworCisgICAgaWYgKCBVTlNFVF9BRERSICE9IHBhcm1zLnZpcnRfaHlwZXJjYWxsICkKKyAg ICB7CisgICAgICAgIGlmICggKHBhcm1zLnZpcnRfaHlwZXJjYWxsIDwgdl9zdGFydCkgfHwKKyAg ICAgICAgICAgICAocGFybXMudmlydF9oeXBlcmNhbGwgPj0gdl9lbmQpICkKKyAgICAgICAgewor ICAgICAgICAgICAgbWFwY2FjaGVfb3ZlcnJpZGVfY3VycmVudChOVUxMKTsKKyAgICAgICAgICAg IHdyaXRlX3B0YmFzZShjdXJyZW50KTsKKyAgICAgICAgICAgIHByaW50aygiSW52YWxpZCBIWVBF UkNBTExfUEFHRSBmaWVsZCBpbiBFTEYgbm90ZXMuXG4iKTsKKyAgICAgICAgICAgIHJjID0gLTE7 CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICBoeXBlcmNhbGxfcGFn ZV9pbml0aWFsaXNlKAorICAgICAgICAgICAgZCwgKHZvaWQgKikodW5zaWduZWQgbG9uZylwYXJt cy52aXJ0X2h5cGVyY2FsbCk7CisgICAgfQorCisgICAgLyogRnJlZSB0ZW1wb3JhcnkgYnVmZmVy cy4gKi8KKyAgICBkaXNjYXJkX2luaXRpYWxfaW1hZ2VzKCk7CisKKyAgICAvKiBTZXQgdXAgc3Rh cnQgaW5mbyBhcmVhLiAqLworICAgIHNpID0gKHN0YXJ0X2luZm9fdCAqKXZzdGFydGluZm9fc3Rh cnQ7CisgICAgY2xlYXJfcGFnZShzaSk7CisgICAgc2ktPm5yX3BhZ2VzID0gbnJfcGFnZXM7CisK KyAgICBzaS0+c2hhcmVkX2luZm8gPSB2aXJ0X3RvX21hZGRyKGQtPnNoYXJlZF9pbmZvKTsKKwor ICAgIHNpLT5mbGFncyAgICAgICAgPSBTSUZfUFJJVklMRUdFRCB8IFNJRl9JTklURE9NQUlOOwor ICAgIGlmICggIXZpbml0cmRfc3RhcnQgJiYgaW5pdHJkX2xlbiApCisgICAgICAgIHNpLT5mbGFn cyAgIHw9IFNJRl9NT0RfU1RBUlRfUEZOOworICAgIHNpLT5mbGFncyAgICAgICB8PSAoeGVuX3By b2Nlc3Nvcl9wbWJpdHMgPDwgOCkgJiBTSUZfUE1fTUFTSzsKKyAgICBzaS0+cHRfYmFzZSAgICAg ID0gdnB0X3N0YXJ0OworICAgIHNpLT5ucl9wdF9mcmFtZXMgPSBucl9wdF9wYWdlczsKKyAgICBz aS0+bWZuX2xpc3QgICAgID0gdnBoeXNtYXBfc3RhcnQ7CisgICAgc25wcmludGYoc2ktPm1hZ2lj LCBzaXplb2Yoc2ktPm1hZ2ljKSwgInhlbi0zLjAteDg2XyVkJXMiLAorICAgICAgICAgICAgIGVs Zl82NGJpdCgmZWxmKSA/IDY0IDogMzIsIHBhcm1zLnBhZSA/ICJwIiA6ICIiKTsKKworICAgIGNv dW50ID0gZC0+dG90X3BhZ2VzOworCisgICAgLyogU2V0IHVwIHRoZSBwaHlzLT5tYWNoaW5lIHRh YmxlIGlmIG5vdCBwYXJ0IG9mIHRoZSBpbml0aWFsIG1hcHBpbmcuICovCisgICAgaWYgKCBpc19w dl9kb21haW4oZCkgJiYgcGFybXMucDJtX2Jhc2UgIT0gVU5TRVRfQUREUiApCisgICAgeworICAg ICAgICBwZm4gPSBwYWdldGFibGVfZ2V0X3Bmbih2LT5hcmNoLmd1ZXN0X3RhYmxlKTsKKyAgICAg ICAgc2V0dXBfcHZfcGh5c21hcChkLCBwZm4sIHZfc3RhcnQsIHZfZW5kLCB2cGh5c21hcF9zdGFy dCwgdnBoeXNtYXBfZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5yX3BhZ2VzKTsKKyAg ICB9CisKKyAgICAvKiBXcml0ZSB0aGUgcGh5cy0+bWFjaGluZSBhbmQgbWFjaGluZS0+cGh5cyB0 YWJsZSBlbnRyaWVzLiAqLworICAgIGZvciAoIHBmbiA9IDA7IHBmbiA8IGNvdW50OyBwZm4rKyAp CisgICAgeworICAgICAgICBtZm4gPSBwZm4gKyBhbGxvY19zcGZuOworICAgICAgICBpZiAoIHBm biA+PSBpbml0cmRfcGZuICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBwZm4gPCBpbml0 cmRfcGZuICsgUEZOX1VQKGluaXRyZF9sZW4pICkKKyAgICAgICAgICAgICAgICBtZm4gPSBpbml0 cmQtPm1vZF9zdGFydCArIChwZm4gLSBpbml0cmRfcGZuKTsKKyAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICBtZm4gLT0gUEZOX1VQKGluaXRyZF9sZW4pOworICAgICAgICB9CisjaWZu ZGVmIE5ERUJVRworI2RlZmluZSBSRVZFUlNFX1NUQVJUICgodl9lbmQgLSB2X3N0YXJ0KSA+PiBQ QUdFX1NISUZUKQorICAgICAgICBpZiAoIHBmbiA+IFJFVkVSU0VfU1RBUlQgJiYgKHZpbml0cmRf c3RhcnQgfHwgcGZuIDwgaW5pdHJkX3BmbikgKQorICAgICAgICAgICAgbWZuID0gYWxsb2NfZXBm biAtIChwZm4gLSBSRVZFUlNFX1NUQVJUKTsKKyNlbmRpZgorICAgICAgICBkb20wX3VwZGF0ZV9w aHlzbWFwKGQsIHBmbiwgbWZuLCB2cGh5c21hcF9zdGFydCk7CisgICAgICAgIGlmICghKHBmbiAm IDB4ZmZmZmYpKQorICAgICAgICAgICAgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7CisgICAg fQorICAgIHNpLT5maXJzdF9wMm1fcGZuID0gcGZuOworICAgIHNpLT5ucl9wMm1fZnJhbWVzID0g ZC0+dG90X3BhZ2VzIC0gY291bnQ7CisgICAgcGFnZV9saXN0X2Zvcl9lYWNoICggcGFnZSwgJmQt PnBhZ2VfbGlzdCApCisgICAgeworICAgICAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKyAg ICAgICAgQlVHX09OKFNIQVJFRF9NMlAoZ2V0X2dwZm5fZnJvbV9tZm4obWZuKSkpOworICAgICAg ICBpZiAoIGdldF9ncGZuX2Zyb21fbWZuKG1mbikgPj0gY291bnQgKQorICAgICAgICB7CisgICAg ICAgICAgICBCVUdfT04oaXNfcHZfMzJiaXRfZG9tYWluKGQpKTsKKyAgICAgICAgICAgIGlmICgg IXBhZ2luZ19tb2RlX3RyYW5zbGF0ZShkKSAmJiAhcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiYK KyAgICAgICAgICAgICAgICAgIWdldF9wYWdlX2FuZF90eXBlKHBhZ2UsIGQsIFBHVF93cml0YWJs ZV9wYWdlKSApCisgICAgICAgICAgICAgICAgQlVHKCk7CisKKyAgICAgICAgICAgIGRvbTBfdXBk YXRlX3BoeXNtYXAoZCwgcGZuLCBtZm4sIHZwaHlzbWFwX3N0YXJ0KTsKKyAgICAgICAgICAgICsr cGZuOworICAgICAgICAgICAgaWYgKCEocGZuICYgMHhmZmZmZikpCisgICAgICAgICAgICAgICAg cHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQlVHX09O KHBmbiAhPSBkLT50b3RfcGFnZXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBhbGxvY19lcGZuICs9 IFBGTl9VUChpbml0cmRfbGVuKSArIHNpLT5ucl9wMm1fZnJhbWVzOworI2VuZGlmCisgICAgd2hp bGUgKCBwZm4gPCBucl9wYWdlcyApCisgICAgeworICAgICAgICBpZiAoIChwYWdlID0gYWxsb2Nf Y2h1bmsoZCwgbnJfcGFnZXMgLSBkLT50b3RfcGFnZXMpKSA9PSBOVUxMICkKKyAgICAgICAgICAg IHBhbmljKCJOb3QgZW5vdWdoIFJBTSBmb3IgRE9NMCByZXNlcnZhdGlvbiIpOworICAgICAgICB3 aGlsZSAoIHBmbiA8IGQtPnRvdF9wYWdlcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1mbiA9 IHBhZ2VfdG9fbWZuKHBhZ2UpOworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgcGZuIChucl9wYWdl cyAtIDEgLSAocGZuIC0gKGFsbG9jX2VwZm4gLSBhbGxvY19zcGZuKSkpCisjZW5kaWYKKyAgICAg ICAgICAgIGRvbTBfdXBkYXRlX3BoeXNtYXAoZCwgcGZuLCBtZm4sIHZwaHlzbWFwX3N0YXJ0KTsK KyN1bmRlZiBwZm4KKyAgICAgICAgICAgIHBhZ2UrKzsgcGZuKys7CisgICAgICAgICAgICBpZiAo IShwZm4gJiAweGZmZmZmKSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzX3BlbmRpbmdfc29mdGly cXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggaW5pdHJkX2xlbiAhPSAwICkKKyAg ICB7CisgICAgICAgIHNpLT5tb2Rfc3RhcnQgPSB2aW5pdHJkX3N0YXJ0ID86IGluaXRyZF9wZm47 CisgICAgICAgIHNpLT5tb2RfbGVuICAgPSBpbml0cmRfbGVuOworICAgIH0KKworICAgIG1lbXNl dChzaS0+Y21kX2xpbmUsIDAsIHNpemVvZihzaS0+Y21kX2xpbmUpKTsKKyAgICBpZiAoIGNtZGxp bmUgIT0gTlVMTCApCisgICAgICAgIHN0cmxjcHkoKGNoYXIgKilzaS0+Y21kX2xpbmUsIGNtZGxp bmUsIHNpemVvZihzaS0+Y21kX2xpbmUpKTsKKworICAgIGlmICggZmlsbF9jb25zb2xlX3N0YXJ0 X2luZm8oKHZvaWQgKikoc2kgKyAxKSkgKQorICAgIHsKKyAgICAgICAgc2ktPmNvbnNvbGUuZG9t MC5pbmZvX29mZiAgPSBzaXplb2Yoc3RydWN0IHN0YXJ0X2luZm8pOworICAgICAgICBzaS0+Y29u c29sZS5kb20wLmluZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZG9tMF92Z2FfY29uc29sZV9pbmZv KTsKKyAgICB9CisKKyAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSApCisgICAgICAgIHhs YXRfc3RhcnRfaW5mbyhzaSwgWExBVF9zdGFydF9pbmZvX2NvbnNvbGVfZG9tMCk7CisKKyAgICAv KiBSZXR1cm4gdG8gaWRsZSBkb21haW4ncyBwYWdlIHRhYmxlcy4gKi8KKyAgICBtYXBjYWNoZV9v dmVycmlkZV9jdXJyZW50KE5VTEwpOworICAgIHdyaXRlX3B0YmFzZShjdXJyZW50KTsKKworICAg IHVwZGF0ZV9kb21haW5fd2FsbGNsb2NrX3RpbWUoZCk7CisKKyAgICB2LT5pc19pbml0aWFsaXNl ZCA9IDE7CisgICAgY2xlYXJfYml0KF9WUEZfZG93biwgJnYtPnBhdXNlX2ZsYWdzKTsKKworICAg IC8qCisgICAgICogSW5pdGlhbCByZWdpc3RlciB2YWx1ZXM6CisgICAgICogIERTLEVTLEZTLEdT ID0gRkxBVF9LRVJORUxfRFMKKyAgICAgKiAgICAgICBDUzpySVAgPSBGTEFUX0tFUk5FTF9DUzpz dGFydF9wYworICAgICAqICAgICAgIFNTOnJTUCA9IEZMQVRfS0VSTkVMX1NTOnN0YXJ0X3N0YWNr CisgICAgICogICAgICAgICAgclNJID0gc3RhcnRfaW5mbworICAgICAqICBbckFYLHJCWCxyQ1gs ckRYLHJESSxyQlAsUjgtUjE1IGFyZSB6ZXJvXQorICAgICAqLworICAgIHJlZ3MgPSAmdi0+YXJj aC51c2VyX3JlZ3M7CisgICAgcmVncy0+ZHMgPSByZWdzLT5lcyA9IHJlZ3MtPmZzID0gcmVncy0+ Z3MgPQorICAgICAgICAhaXNfcHZfMzJiaXRfZG9tYWluKGQpID8gRkxBVF9LRVJORUxfRFMgOiBG TEFUX0NPTVBBVF9LRVJORUxfRFM7CisgICAgcmVncy0+c3MgPSAoIWlzX3B2XzMyYml0X2RvbWFp bihkKSA/CisgICAgICAgICAgICAgICAgRkxBVF9LRVJORUxfU1MgOiBGTEFUX0NPTVBBVF9LRVJO RUxfU1MpOworICAgIHJlZ3MtPmNzID0gKCFpc19wdl8zMmJpdF9kb21haW4oZCkgPworICAgICAg ICAgICAgICAgIEZMQVRfS0VSTkVMX0NTIDogRkxBVF9DT01QQVRfS0VSTkVMX0NTKTsKKyAgICBy ZWdzLT5yaXAgPSBwYXJtcy52aXJ0X2VudHJ5OworICAgIHJlZ3MtPnJzcCA9IHZzdGFja19lbmQ7 CisgICAgcmVncy0+cnNpID0gdnN0YXJ0aW5mb19zdGFydDsKKyAgICByZWdzLT5lZmxhZ3MgPSBY ODZfRUZMQUdTX0lGOworCisjaWZkZWYgQ09ORklHX1NIQURPV19QQUdJTkcKKyAgICBpZiAoIG9w dF9kb20wX3NoYWRvdyAmJiBwYWdpbmdfZW5hYmxlKGQsIFBHX1NIX2VuYWJsZSkgPT0gMCApCisg ICAgICAgIHBhZ2luZ191cGRhdGVfcGFnaW5nX21vZGVzKHYpOworI2VuZGlmCisKKyAgICAvKgor ICAgICAqIFBWSCBGaXhtZTogWEVORkVBVF9zdXBlcnZpc29yX21vZGVfa2VybmVsIGhhcyBiZWVu IHJldXNlZCBpbiBQVkggd2l0aCBhCisgICAgICogZGlmZmVyZW50IG1lYW5pbmcuCisgICAgICov CisgICAgaWYgKCB0ZXN0X2JpdChYRU5GRUFUX3N1cGVydmlzb3JfbW9kZV9rZXJuZWwsIHBhcm1z LmZfcmVxdWlyZWQpICkKKyAgICAgICAgcGFuaWMoIkRvbTAgcmVxdWlyZXMgc3VwZXJ2aXNvci1t b2RlIGV4ZWN1dGlvbiIpOworCisgICAgcmMgPSBkb20wX3NldHVwX3Blcm1pc3Npb25zKGQpOwor ICAgIEJVR19PTihyYyAhPSAwKTsKKworICAgIGlmICggZWxmX2NoZWNrX2Jyb2tlbigmZWxmKSAp CisgICAgICAgIHByaW50aygiIFhlbiB3YXJuaW5nOiBkb20wIGtlcm5lbCBicm9rZW4gRUxGOiAl c1xuIiwKKyAgICAgICAgICAgICAgIGVsZl9jaGVja19icm9rZW4oJmVsZikpOworCisgICAgaWYg KCBkLT5kb21haW5faWQgPT0gaGFyZHdhcmVfZG9taWQgKQorICAgICAgICBpb21tdV9od2RvbV9p bml0KGQpOworCisgICAgcmV0dXJuIDA7CisKK291dDoKKyAgICBpZiAoIGVsZl9jaGVja19icm9r ZW4oJmVsZikgKQorICAgICAgICBwcmludGsoIiBYZW4gZG9tMCBrZXJuZWwgYnJva2VuIEVMRjog JXNcbiIsCisgICAgICAgICAgICAgICBlbGZfY2hlY2tfYnJva2VuKCZlbGYpKTsKKworICAgIHJl dHVybiByYzsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMt ZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQK KyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS9hc20teDg2L2RvbTBfYnVpbGQuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tMF9i dWlsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJiYTM0OWU0NDUK LS0tIC9kZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2RvbTBfYnVpbGQuaApAQCAt MCwwICsxLDMyIEBACisjaWZuZGVmIF9ET00wX0JVSUxEX0hfCisjZGVmaW5lIF9ET00wX0JVSUxE X0hfCisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGludCBkb20w X21lbWZsYWdzOworZXh0ZXJuIGNwdW1hc2tfdCBkb20wX2NwdXM7CisKK3Vuc2lnbmVkIGxvbmcg ZG9tMF9jb21wdXRlX25yX3BhZ2VzKAorICAgIHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBlbGZf ZG9tX3Bhcm1zICpwYXJtcywgdW5zaWduZWQgbG9uZyBpbml0cmRfbGVuKTsKK3N0cnVjdCB2Y3B1 ICpkb20wX3NldHVwX3ZjcHUoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZjcHVfaWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3B1KTsK K2ludCBkb20wX3NldHVwX3Blcm1pc3Npb25zKHN0cnVjdCBkb21haW4gKmQpOworCitpbnQgZG9t MF9jb25zdHJ1Y3RfcHYoCisgICAgc3RydWN0IGRvbWFpbiAqZCwKKyAgICBjb25zdCBtb2R1bGVf dCAqaW1hZ2UsIHVuc2lnbmVkIGxvbmcgaW1hZ2VfaGVhZHJvb20sCisgICAgbW9kdWxlX3QgKmlu aXRyZCwKKyAgICB2b2lkICooKmJvb3RzdHJhcF9tYXApKGNvbnN0IG1vZHVsZV90ICopLAorICAg IGNoYXIgKmNtZGxpbmUpOworCisjZW5kaWYJLyogX0RPTTBfQlVJTERfSF8gKi8KKworLyoKKyAq IExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAq IGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6 IG5pbAorICogRW5kOgorICovCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK