From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v3 extra 05/11] x86/mm: move pv_{alloc, free}_page_type Date: Sun, 30 Jul 2017 16:43:29 +0100 Message-ID: <20170730154335.24313-6-wei.liu2@citrix.com> References: <20170720160426.2343-1-wei.liu2@citrix.com> <20170730154335.24313-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dbqNc-0006Lx-L8 for xen-devel@lists.xenproject.org; Sun, 30 Jul 2017 15:43:44 +0000 In-Reply-To: <20170730154335.24313-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: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGVtIGFuZCB0aGUgaGVscGVyIGZ1bmN0aW9ucyB0byBwdi9tbS5jLiAgVXNlIGJvb2wg aW4gdGhlIG1vdmVkCmNvZGUgd2hlcmUgYXBwcm9wcmlhdGUuCgpTaWduZWQtb2ZmLWJ5OiBXZWkg TGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9kb21haW4uYyAgICAg ICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgfCA0OTIgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4Ni9wdi9tbS5jICAg ICAgICB8IDQ5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4 ZW4vaW5jbHVkZS9hc20teDg2L21tLmggICAgfCAgIDMgLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9w di9tbS5oIHwgIDEyICsrCiA1IGZpbGVzIGNoYW5nZWQsIDUwNCBpbnNlcnRpb25zKCspLCA0OTUg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2RvbWFpbi5jIGIveGVuL2Fy Y2gveDg2L2RvbWFpbi5jCmluZGV4IGQ5MmE5MzBkMjkuLjM2MjI1NjMxZWIgMTAwNjQ0Ci0tLSBh L3hlbi9hcmNoL3g4Ni9kb21haW4uYworKysgYi94ZW4vYXJjaC94ODYvZG9tYWluLmMKQEAgLTY0 LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxjb21wYXQvdmNwdS5oPgogI2luY2x1ZGUgPGFzbS9wc3Iu aD4KICNpbmNsdWRlIDxhc20vcHYvZG9tYWluLmg+CisjaW5jbHVkZSA8YXNtL3B2L21tLmg+CiAj aW5jbHVkZSA8YXNtL3B2L3Byb2Nlc3Nvci5oPgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdmNw dSAqLCBjdXJyX3ZjcHUpOwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJj aC94ODYvbW0uYwppbmRleCA1NTQ1YTZmNGRlLi5hYzBlMGJhMzQ2IDEwMDY0NAotLS0gYS94ZW4v YXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNTE0LDIxICs1MTQsNiBA QCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3NoYWRvd19sZHQoc3RydWN0IHZjcHUgKnYsIGludCBm bHVzaCkKIH0KIAogCi1zdGF0aWMgaW50IGFsbG9jX3NlZ2Rlc2NfcGFnZShzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlKQotewotICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gcGFnZV9nZXRf b3duZXIocGFnZSk7Ci0gICAgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjcyA9IF9fbWFwX2RvbWFp bl9wYWdlKHBhZ2UpOwotICAgIHVuc2lnbmVkIGk7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IDUx MjsgaSsrICkKLSAgICAgICAgaWYgKCB1bmxpa2VseSghY2hlY2tfZGVzY3JpcHRvcihvd25lciwg JmRlc2NzW2ldKSkgKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFn ZShkZXNjcyk7Ci0KLSAgICByZXR1cm4gaSA9PSA1MTIgPyAwIDogLUVJTlZBTDsKLX0KLQogYm9v bCBnZXRfcGFnZV9mcm9tX21mbihtZm5fdCBtZm4sIHN0cnVjdCBkb21haW4gKmQpCiB7CiAgICAg c3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKG1mbl94KG1mbikpOwpAQCAtNTQz LDcgKzUyOCw2IEBAIGJvb2wgZ2V0X3BhZ2VfZnJvbV9tZm4obWZuX3QgbWZuLCBzdHJ1Y3QgZG9t YWluICpkKQogICAgIHJldHVybiB0cnVlOwogfQogCi0KIGludCBnZXRfcGFnZV9hbmRfdHlwZV9m cm9tX21mbihtZm5fdCBtZm4sIHVuc2lnbmVkIGxvbmcgdHlwZSwgc3RydWN0IGRvbWFpbiAqZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFydGlhbCwgYm9vbCBwcmVlbXB0 aWJsZSkKIHsKQEAgLTExNjksMTcyICsxMTUzLDYgQEAgaW50IHB1dF9wYWdlX2Zyb21fbDRlKGw0 X3BnZW50cnlfdCBsNGUsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcGFydGlhbCwKICAgICByZXR1 cm4gMTsKIH0KIAotc3RhdGljIGludCBhbGxvY19sMV90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlKQotewotICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAg ICB1bnNpZ25lZCBsb25nICBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsMV9wZ2VudHJ5 X3QgICpwbDFlOwotICAgIHVuc2lnbmVkIGludCAgIGk7Ci0gICAgaW50ICAgICAgICAgICAgcmV0 ID0gMDsKLQotICAgIHBsMWUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLQotICAgIGZv ciAoIGkgPSAwOyBpIDwgTDFfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCi0gICAgewotICAgICAg ICBzd2l0Y2ggKCByZXQgPSBnZXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkLCBkKSApCi0gICAg ICAgIHsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAg Y2FzZSAwOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgX1BBR0VfUlcgLi4uIF9Q QUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUzoKLSAgICAgICAgICAgIEFTU0VSVCghKHJldCAmIH4o X1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTKSkpOwotICAgICAgICAgICAgbDFlX2ZsaXBfZmxh Z3MocGwxZVtpXSwgcmV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg ICAgYWRqdXN0X2d1ZXN0X2wxZShwbDFlW2ldLCBkKTsKLSAgICB9Ci0KLSAgICB1bm1hcF9kb21h aW5fcGFnZShwbDFlKTsKLSAgICByZXR1cm4gMDsKLQotIGZhaWw6Ci0gICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wxX3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7 Ci0gICAgd2hpbGUgKCBpLS0gPiAwICkKLSAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUocGwxZVtp XSwgZCk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKLSAgICByZXR1cm4gcmV0Owot fQotCi1zdGF0aWMgaW50IGFsbG9jX2wyX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVu c2lnbmVkIGxvbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWVtcHRp YmxlKQotewotICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAg ICB1bnNpZ25lZCBsb25nICBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsMl9wZ2VudHJ5 X3QgICpwbDJlOwotICAgIHVuc2lnbmVkIGludCAgIGk7Ci0gICAgaW50ICAgICAgICAgICAgcmMg PSAwOwotCi0gICAgcGwyZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgZm9y ICggaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDJfUEFHRVRBQkxFX0VOVFJJRVM7 IGkrKyApCi0gICAgewotICAgICAgICBpZiAoIHByZWVtcHRpYmxlICYmIGkgPiBwYWdlLT5ucl92 YWxpZGF0ZWRfcHRlcwotICAgICAgICAgICAgICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkg KQotICAgICAgICB7Ci0gICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0g ICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9 Ci0KLSAgICAgICAgaWYgKCAhaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBpKSB8fAotICAgICAg ICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbiwgZCkpID4gMCApCi0g ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIHJjIDwgMCApCi0gICAgICAgIHsK LSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRmFpbHVyZSBpbiBhbGxvY19s Ml90YWJsZTogc2xvdCAlI3hcbiIsIGkpOwotICAgICAgICAgICAgd2hpbGUgKCBpLS0gPiAwICkK LSAgICAgICAgICAgICAgICBpZiAoIGlzX2d1ZXN0X2wyX3Nsb3QoZCwgdHlwZSwgaSkgKQotICAg ICAgICAgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wyZShwbDJlW2ldLCBwZm4pOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGp1c3RfZ3Vlc3RfbDJlKHBsMmVb aV0sIGQpOwotICAgIH0KLQotICAgIGlmICggcmMgPj0gMCAmJiAodHlwZSAmIFBHVF9wYWVfeGVu X2wyKSApCi0gICAgewotICAgICAgICAvKiBYZW4gcHJpdmF0ZSBtYXBwaW5ncy4gKi8KLSAgICAg ICAgbWVtY3B5KCZwbDJlW0NPTVBBVF9MMl9QQUdFVEFCTEVfRklSU1RfWEVOX1NMT1QoZCldLAot ICAgICAgICAgICAgICAgJmNvbXBhdF9pZGxlX3BnX3RhYmxlX2wyWwotICAgICAgICAgICAgICAg ICAgIGwyX3RhYmxlX29mZnNldChISVJPX0NPTVBBVF9NUFRfVklSVF9TVEFSVCldLAotICAgICAg ICAgICAgICAgQ09NUEFUX0wyX1BBR0VUQUJMRV9YRU5fU0xPVFMoZCkgKiBzaXplb2YoKnBsMmUp KTsKLSAgICB9Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDJlKTsKLSAgICByZXR1cm4gcmMg PiAwID8gMCA6IHJjOwotfQotCi1zdGF0aWMgaW50IGFsbG9jX2wzX3RhYmxlKHN0cnVjdCBwYWdl X2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBh Z2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIGwz X3BnZW50cnlfdCAgKnBsM2U7Ci0gICAgdW5zaWduZWQgaW50ICAgaTsKLSAgICBpbnQgICAgICAg ICAgICByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKLQotICAgIHBsM2UgPSBt YXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLQotICAgIC8qCi0gICAgICogUEFFIGd1ZXN0cyBh bGxvY2F0ZSBmdWxsIHBhZ2VzLCBidXQgYXJlbid0IHJlcXVpcmVkIHRvIGluaXRpYWxpemUKLSAg ICAgKiBtb3JlIHRoYW4gdGhlIGZpcnN0IGZvdXIgZW50cmllczsgd2hlbiBydW5uaW5nIGluIGNv bXBhdGliaWxpdHkKLSAgICAgKiBtb2RlLCBob3dldmVyLCB0aGUgZnVsbCBwYWdlIGlzIHZpc2li bGUgdG8gdGhlIE1NVSwgYW5kIGhlbmNlIGFsbAotICAgICAqIDUxMiBlbnRyaWVzIG11c3QgYmUg dmFsaWQvdmVyaWZpZWQsIHdoaWNoIGlzIG1vc3QgZWFzaWx5IGFjaGlldmVkCi0gICAgICogYnkg Y2xlYXJpbmcgdGhlbSBvdXQuCi0gICAgICovCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4o ZCkgKQotICAgICAgICBtZW1zZXQocGwzZSArIDQsIDAsIChMM19QQUdFVEFCTEVfRU5UUklFUyAt IDQpICogc2l6ZW9mKCpwbDNlKSk7Ci0KLSAgICBmb3IgKCBpID0gcGFnZS0+bnJfdmFsaWRhdGVk X3B0ZXM7IGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUzsKLSAgICAgICAgICBpKyssIHBhcnRpYWwg PSAwICkKLSAgICB7Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICYmIChpID09 IDMpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCAhKGwzZV9nZXRfZmxhZ3MocGwzZVtp XSkgJiBfUEFHRV9QUkVTRU5UKSB8fAotICAgICAgICAgICAgICAgICAobDNlX2dldF9mbGFncyhw bDNlW2ldKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpICkKLSAgICAgICAgICAgICAgICByYyA9IC1F SU5WQUw7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSBnZXRfcGFnZV9h bmRfdHlwZV9mcm9tX21mbigKLSAgICAgICAgICAgICAgICAgICAgX21mbihsM2VfZ2V0X3Bmbihw bDNlW2ldKSksCi0gICAgICAgICAgICAgICAgICAgIFBHVF9sMl9wYWdlX3RhYmxlIHwgUEdUX3Bh ZV94ZW5fbDIsIGQsIHBhcnRpYWwsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg KCAhaXNfZ3Vlc3RfbDNfc2xvdChpKSB8fAotICAgICAgICAgICAgICAgICAgKHJjID0gZ2V0X3Bh Z2VfZnJvbV9sM2UocGwzZVtpXSwgcGZuLCBkLCBwYXJ0aWFsKSkgPiAwICkKLSAgICAgICAgICAg IGNvbnRpbnVlOwotCi0gICAgICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKLSAgICAgICAgewot ICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFn ZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp ZiAoIHJjID09IC1FSU5UUiAmJiBpICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZS0+bnJf dmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwot ICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCByYyA8 IDAgKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYWRqdXN0X2d1ZXN0X2wzZShwbDNl W2ldLCBkKTsKLSAgICB9Ci0KLSAgICBpZiAoIHJjID49IDAgJiYgIXB2X2NyZWF0ZV9wYWVfeGVu X21hcHBpbmdzKGQsIHBsM2UpICkKLSAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgIGlmICggcmMg PCAwICYmIHJjICE9IC1FUkVTVEFSVCAmJiByYyAhPSAtRUlOVFIgKQotICAgIHsKLSAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wzX3RhYmxlOiBzbG90 ICUjeFxuIiwgaSk7Ci0gICAgICAgIGlmICggaSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBh Z2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRl ID0gMDsKLSAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsK LSAgICAgICAgfQotICAgICAgICB3aGlsZSAoIGktLSA+IDAgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBpZiAoICFpc19ndWVzdF9sM19zbG90KGkpICkKLSAgICAgICAgICAgICAgICBjb250aW51 ZTsKLSAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKLSAgICAgICAg fQotICAgIH0KLQotICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOwotICAgIHJldHVybiByYyA+ IDAgPyAwIDogcmM7Ci19Ci0KIGJvb2wgZmlsbF9yb19tcHQodW5zaWduZWQgbG9uZyBtZm4pCiB7 CiAgICAgbDRfcGdlbnRyeV90ICpsNHRhYiA9IG1hcF9kb21haW5fcGFnZShfbWZuKG1mbikpOwpA QCAtMTM1OSwxODggKzExNzcsNiBAQCB2b2lkIHphcF9yb19tcHQodW5zaWduZWQgbG9uZyBtZm4p CiAgICAgdW5tYXBfZG9tYWluX3BhZ2UobDR0YWIpOwogfQogCi1zdGF0aWMgaW50IGFsbG9jX2w0 X3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9 IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9f bWZuKHBhZ2UpOwotICAgIGw0X3BnZW50cnlfdCAgKnBsNGUgPSBtYXBfZG9tYWluX3BhZ2UoX21m bihwZm4pKTsKLSAgICB1bnNpZ25lZCBpbnQgICBpOwotICAgIGludCAgICAgICAgICAgIHJjID0g MCwgcGFydGlhbCA9IHBhZ2UtPnBhcnRpYWxfcHRlOwotCi0gICAgZm9yICggaSA9IHBhZ2UtPm5y X3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDRfUEFHRVRBQkxFX0VOVFJJRVM7Ci0gICAgICAgICAgaSsr LCBwYXJ0aWFsID0gMCApCi0gICAgewotICAgICAgICBpZiAoICFpc19ndWVzdF9sNF9zbG90KGQs IGkpIHx8Ci0gICAgICAgICAgICAgKHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwgcGZu LCBkLCBwYXJ0aWFsKSkgPiAwICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm ICggcmMgPT0gLUVSRVNUQVJUICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZS0+bnJfdmFs aWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFs ID86IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHJjIDwgMCApCi0gICAgICAgIHsK LSAgICAgICAgICAgIGlmICggcmMgIT0gLUVJTlRSICkKLSAgICAgICAgICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbHVyZSBpbiBh bGxvY19sNF90YWJsZTogc2xvdCAlI3hcbiIsIGkpOwotICAgICAgICAgICAgaWYgKCBpICkKLSAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7 Ci0gICAgICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICAgICAgICAg IGlmICggcmMgPT0gLUVJTlRSICkKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7 Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCi0gICAgICAgICAgICAg ICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcysrOwotICAgICAgICAgICAgICAgICAg ICBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAg ICAgewotICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0gICAgICAgICAgICBy ZXR1cm4gcmM7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGp1c3RfZ3Vlc3RfbDRlKHBsNGVbaV0s IGQpOwotICAgIH0KLQotICAgIGlmICggcmMgPj0gMCApCi0gICAgewotICAgICAgICBwdl9pbml0 X2d1ZXN0X2w0X3RhYmxlKHBsNGUsIGQsICFWTV9BU1NJU1QoZCwgbTJwX3N0cmljdCkpOwotICAg ICAgICBhdG9taWNfaW5jKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9wYWdlcyk7Ci0gICAgICAg IHJjID0gMDsKLSAgICB9Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0KLSAgICByZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfbDFfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAq cGFnZSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0g ICAgdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsMV9wZ2VudHJ5 X3QgKnBsMWU7Ci0gICAgdW5zaWduZWQgaW50ICBpOwotCi0gICAgcGwxZSA9IG1hcF9kb21haW5f cGFnZShfbWZuKHBmbikpOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdFVEFCTEVfRU5U UklFUzsgaSsrICkKLSAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUocGwxZVtpXSwgZCk7Ci0KLSAg ICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKLX0KLQotCi1zdGF0aWMgaW50IGZyZWVfbDJfdGFi bGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHByZWVtcHRpYmxlKQotewotICAgIHN0cnVj dCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBsb25nIHBm biA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIGwyX3BnZW50cnlfdCAqcGwyZTsKLSAgICB1bnNp Z25lZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtIDE7Ci0gICAgaW50IGVyciA9 IDA7Ci0KLSAgICBwbDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7Ci0KLSAgICBBU1NF UlQocGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMpOwotICAgIGRvIHsKLSAgICAgICAgaWYgKCBpc19n dWVzdF9sMl9zbG90KGQsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCBpKSAmJgotICAgICAgICAg ICAgIHB1dF9wYWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbikgPT0gMCAmJgotICAgICAgICAgICAg IHByZWVtcHRpYmxlICYmIGkgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAg IHsKLSAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICBl cnIgPSAtRVJFU1RBUlQ7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICggIWVyciAmJiBpLS0gKTsK LQotICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMmUpOwotCi0gICAgaWYgKCAhZXJyICkKLSAgICAg ICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJj0gflBHVF9wYWVfeGVuX2wyOwotCi0gICAgcmV0 dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBmcmVlX2wzX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8g KnBhZ2UpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwot ICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19tZm4ocGFnZSk7Ci0gICAgbDNfcGdlbnRy eV90ICpwbDNlOwotICAgIGludCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsK LSAgICB1bnNpZ25lZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0aWFs OwotCi0gICAgcGwzZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgZG8gewot ICAgICAgICBpZiAoIGlzX2d1ZXN0X2wzX3Nsb3QoaSkgKQotICAgICAgICB7Ci0gICAgICAgICAg ICByYyA9IHB1dF9wYWdlX2Zyb21fbDNlKHBsM2VbaV0sIHBmbiwgcGFydGlhbCwgMCk7Ci0gICAg ICAgICAgICBpZiAoIHJjIDwgMCApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBwYXJ0aWFsID0gMDsKLSAgICAgICAgICAgIGlmICggcmMgPiAwICkKLSAgICAgICAgICAgICAg ICBjb250aW51ZTsKLSAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsK LSAgICAgICAgfQotICAgIH0gd2hpbGUgKCBpLS0gKTsKLQotICAgIHVubWFwX2RvbWFpbl9wYWdl KHBsM2UpOwotCi0gICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQotICAgIHsKLSAgICAgICAgcGFn ZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBh cnRpYWwgPzogLTE7Ci0gICAgfQotICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYgaSA8IEwz X1BBR0VUQUJMRV9FTlRSSUVTIC0gMSApCi0gICAgewotICAgICAgICBwYWdlLT5ucl92YWxpZGF0 ZWRfcHRlcyA9IGkgKyAxOwotICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7Ci0gICAgICAg IHJjID0gLUVSRVNUQVJUOwotICAgIH0KLSAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOwotfQot Ci1zdGF0aWMgaW50IGZyZWVfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKLXsKLSAg ICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgdW5zaWduZWQg bG9uZyBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsNF9wZ2VudHJ5X3QgKnBsNGUgPSBt YXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLSAgICBpbnQgcmMgPSAwLCBwYXJ0aWFsID0gcGFn ZS0+cGFydGlhbF9wdGU7Ci0gICAgdW5zaWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVk X3B0ZXMgLSAhcGFydGlhbDsKLQotICAgIGRvIHsKLSAgICAgICAgaWYgKCBpc19ndWVzdF9sNF9z bG90KGQsIGkpICkKLSAgICAgICAgICAgIHJjID0gcHV0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwg cGZuLCBwYXJ0aWFsLCAwKTsKLSAgICAgICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIHBhcnRpYWwgPSAwOwotICAgIH0gd2hpbGUgKCBpLS0gKTsKLQotICAgIGlm ICggcmMgPT0gLUVSRVNUQVJUICkKLSAgICB7Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9w dGVzID0gaTsKLSAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOwotICAg IH0KLSAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRSICYmIGkgPCBMNF9QQUdFVEFCTEVfRU5UUklF UyAtIDEgKQotICAgIHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsK LSAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICByYyA9IC1FUkVTVEFSVDsK LSAgICB9Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKLQotICAgIGlmICggcmMgPj0g MCApCi0gICAgewotICAgICAgICBhdG9taWNfZGVjKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9w YWdlcyk7Ci0gICAgICAgIHJjID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KIGlu dCBwYWdlX2xvY2soc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKIHsKICAgICB1bnNpZ25lZCBsb25n IHgsIG54OwpAQCAtMTk1NSwxMzQgKzE1OTEsNiBAQCB2b2lkIGdldF9wYWdlX2xpZ2h0KHN0cnVj dCBwYWdlX2luZm8gKnBhZ2UpCiAgICAgd2hpbGUgKCB1bmxpa2VseSh5ICE9IHgpICk7CiB9CiAK LXN0YXRpYyBpbnQgcHZfYWxsb2NfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVu c2lnbmVkIGxvbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJl ZW1wdGlibGUpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcihw YWdlKTsKLSAgICBpbnQgcmM7Ci0KLSAgICAvKiBBIHBhZ2UgdGFibGUgaXMgZGlydGllZCB3aGVu IGl0cyB0eXBlIGNvdW50IGJlY29tZXMgbm9uLXplcm8uICovCi0gICAgaWYgKCBsaWtlbHkob3du ZXIgIT0gTlVMTCkgKQotICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgX21mbihwYWdl X3RvX21mbihwYWdlKSkpOwotCi0gICAgc3dpdGNoICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQot ICAgIHsKLSAgICBjYXNlIFBHVF9sMV9wYWdlX3RhYmxlOgotICAgICAgICByYyA9IGFsbG9jX2wx X3RhYmxlKHBhZ2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBHVF9sMl9wYWdlX3RhYmxl OgotICAgICAgICByYyA9IGFsbG9jX2wyX3RhYmxlKHBhZ2UsIHR5cGUsIHByZWVtcHRpYmxlKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToKLSAgICAgICAgQVNT RVJUKHByZWVtcHRpYmxlKTsKLSAgICAgICAgcmMgPSBhbGxvY19sM190YWJsZShwYWdlKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKLSAgICAgICAgQVNTRVJU KHByZWVtcHRpYmxlKTsKLSAgICAgICAgcmMgPSBhbGxvY19sNF90YWJsZShwYWdlKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBQR1Rfc2VnX2Rlc2NfcGFnZToKLSAgICAgICAgcmMgPSBhbGxv Y19zZWdkZXNjX3BhZ2UocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg ICAgIHByaW50aygiQmFkIHR5cGUgaW4gYWxsb2NfcGFnZV90eXBlICVseCB0PSUiIFBSdHlwZV9p bmZvICIgYz0lbHhcbiIsCi0gICAgICAgICAgICAgICB0eXBlLCBwYWdlLT51LmludXNlLnR5cGVf aW5mbywKLSAgICAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8pOwotICAgICAgICByYyA9IC1F SU5WQUw7Ci0gICAgICAgIEJVRygpOwotICAgIH0KLQotICAgIC8qIE5vIG5lZWQgZm9yIGF0b21p YyB1cGRhdGUgb2YgdHlwZV9pbmZvIGhlcmU6IG5vb25lIGVsc2UgdXBkYXRlcyBpdC4gKi8KLSAg ICBzbXBfd21iKCk7Ci0gICAgc3dpdGNoICggcmMgKQotICAgIHsKLSAgICBjYXNlIDA6Ci0gICAg ICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvIHw9IFBHVF92YWxpZGF0ZWQ7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgLUVJTlRSOgotICAgICAgICBBU1NFUlQoKHBhZ2UtPnUuaW51c2UudHlw ZV9pbmZvICYKLSAgICAgICAgICAgICAgICAoUEdUX2NvdW50X21hc2t8UEdUX3ZhbGlkYXRlZHxQ R1RfcGFydGlhbCkpID09IDEpOwotICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmPSB+ UEdUX2NvdW50X21hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT U0VSVChyYyA8IDApOwotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkVycm9yIHdo aWxlIHZhbGlkYXRpbmcgbWZuICUiIFBSSV9tZm4KLSAgICAgICAgICAgICAgICAgIiAocGZuICUi IFBSSV9wZm4gIikgZm9yIHR5cGUgJSIgUFJ0eXBlX2luZm8KLSAgICAgICAgICAgICAgICAgIjog Y2FmPSUwOGx4IHRhZj0lIiBQUnR5cGVfaW5mbyAiXG4iLAotICAgICAgICAgICAgICAgICBwYWdl X3RvX21mbihwYWdlKSwgZ2V0X2dwZm5fZnJvbV9tZm4ocGFnZV90b19tZm4ocGFnZSkpLAotICAg ICAgICAgICAgICAgICB0eXBlLCBwYWdlLT5jb3VudF9pbmZvLCBwYWdlLT51LmludXNlLnR5cGVf aW5mbyk7Ci0gICAgICAgIGlmICggcGFnZSAhPSBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJs ZSApCi0gICAgICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyA9IDA7Ci0gICAgICAgIGVs c2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5m byAmCi0gICAgICAgICAgICAgICAgICAgIChQR1RfY291bnRfbWFzayB8IFBHVF92YWxpZGF0ZWQp KSA9PSAxKTsKLSAgICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAgIGdldF9wYWdlX2xpZ2h0 KHBhZ2UpOwotICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3BhcnRp YWw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwot fQotCi0KLWludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNp Z25lZCBsb25nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0aWJsZSkK LXsKLSAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAg IHVuc2lnbmVkIGxvbmcgZ21mbjsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoIGxpa2VseShvd25l ciAhPSBOVUxMKSAmJiB1bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkgKQotICAg IHsKLSAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlwZSBjb3Vu dCBiZWNvbWVzIHplcm8uICovCi0gICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93bmVyLCBfbWZu KHBhZ2VfdG9fbWZuKHBhZ2UpKSk7Ci0KLSAgICAgICAgQVNTRVJUKCFzaGFkb3dfbW9kZV9yZWZj b3VudHMob3duZXIpKTsKLQotICAgICAgICBnbWZuID0gbWZuX3RvX2dtZm4ob3duZXIsIHBhZ2Vf dG9fbWZuKHBhZ2UpKTsKLSAgICAgICAgQVNTRVJUKFZBTElEX00yUChnbWZuKSk7Ci0gICAgICAg IC8qIFBhZ2Ugc2hhcmluZyBub3Qgc3VwcG9ydGVkIGZvciBzaGFkb3dlZCBkb21haW5zICovCi0g ICAgICAgIGlmKCFTSEFSRURfTTJQKGdtZm4pKQotICAgICAgICAgICAgc2hhZG93X3JlbW92ZV9h bGxfc2hhZG93cyhvd25lciwgX21mbihnbWZuKSk7Ci0gICAgfQotCi0gICAgaWYgKCAhKHR5cGUg JiBQR1RfcGFydGlhbCkgKQotICAgIHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMg PSAxVSA8PCBQQUdFVEFCTEVfT1JERVI7Ci0gICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsK LSAgICB9Ci0KLSAgICBzd2l0Y2ggKCB0eXBlICYgUEdUX3R5cGVfbWFzayApCi0gICAgewotICAg IGNhc2UgUEdUX2wxX3BhZ2VfdGFibGU6Ci0gICAgICAgIGZyZWVfbDFfdGFibGUocGFnZSk7Ci0g ICAgICAgIHJjID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDJfcGFnZV90YWJs ZToKLSAgICAgICAgcmMgPSBmcmVlX2wyX3RhYmxlKHBhZ2UsIHByZWVtcHRpYmxlKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToKLSAgICAgICAgQVNTRVJUKHBy ZWVtcHRpYmxlKTsKLSAgICAgICAgcmMgPSBmcmVlX2wzX3RhYmxlKHBhZ2UpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIFBHVF9sNF9wYWdlX3RhYmxlOgotICAgICAgICBBU1NFUlQocHJlZW1w dGlibGUpOwotICAgICAgICByYyA9IGZyZWVfbDRfdGFibGUocGFnZSk7Ci0gICAgICAgIGJyZWFr OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAidHlwZSAl IiBQUnR5cGVfaW5mbyAiIG1mbiAlIiBQUklfbWZuICJcbiIsCi0gICAgICAgICAgICAgICAgIHR5 cGUsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKLSAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICBC VUcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQogc3RhdGljIGludCBfX3B1dF9m aW5hbF9wYWdlX3R5cGUoCiAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9u ZyB0eXBlLCBpbnQgcHJlZW1wdGlibGUpCiB7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYv bW0uYyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCmluZGV4IDQ2ZTFmY2Y0ZTUuLmYwMzkzYjllM2Mg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9t bS5jCkBAIC0yMCwxMCArMjAsMTMgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAorI2luY2x1ZGUg PHhlbi9ldmVudC5oPgogI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KIAorI2luY2x1ZGUg PGFzbS9tbS5oPgogI2luY2x1ZGUgPGFzbS9wdi9tbS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5o PgorI2luY2x1ZGUgPGFzbS9zaGFkb3cuaD4KIAogLyoKICAqIFBURSB1cGRhdGVzIGNhbiBiZSBk b25lIHdpdGggb3JkaW5hcnkgd3JpdGVzIGV4Y2VwdDoKQEAgLTI1MSw2ICsyNTQsNDk0IEBAIGJv b2wgcHZfY3JlYXRlX3BhZV94ZW5fbWFwcGluZ3Moc3RydWN0IGRvbWFpbiAqZCwgbDNfcGdlbnRy eV90ICpwbDNlKQogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW50IGFsbG9jX2wxX3Rh YmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBh Z2VfZ2V0X293bmVyKHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZu KHBhZ2UpOworICAgIGwxX3BnZW50cnlfdCAgKnBsMWU7CisgICAgdW5zaWduZWQgaW50ICAgaTsK KyAgICBpbnQgICAgICAgICAgICByZXQgPSAwOworCisgICAgcGwxZSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKHBmbikpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdFVEFCTEVfRU5UUklF UzsgaSsrICkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoIHJldCA9IGdldF9wYWdlX2Zyb21fbDFl KHBsMWVbaV0sIGQsIGQpICkKKyAgICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgZ290byBmYWlsOworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSBfUEFHRV9SVyAuLi4gX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTOgorICAgICAg ICAgICAgQVNTRVJUKCEocmV0ICYgfihfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlMpKSk7Cisg ICAgICAgICAgICBsMWVfZmxpcF9mbGFncyhwbDFlW2ldLCByZXQpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKworICAgICAgICBhZGp1c3RfZ3Vlc3RfbDFlKHBsMWVbaV0sIGQpOwor ICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworICAgIHJldHVybiAwOworCisg ZmFpbDoKKyAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkZhaWx1cmUgaW4gYWxsb2NfbDFf dGFibGU6IHNsb3QgJSN4XG4iLCBpKTsKKyAgICB3aGlsZSAoIGktLSA+IDAgKQorICAgICAgICBw dXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBs MWUpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfbDJfdGFibGUoc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sIHByZWVtcHRpYmxlKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBw YWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nICBwZm4gPSBwYWdlX3RvX21m bihwYWdlKTsKKyAgICBsMl9wZ2VudHJ5X3QgICpwbDJlOworICAgIHVuc2lnbmVkIGludCAgIGk7 CisgICAgaW50ICAgICAgICAgICAgcmMgPSAwOworCisgICAgcGwyZSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKHBmbikpOworCisgICAgZm9yICggaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBp IDwgTDJfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIHByZWVt cHRpYmxlICYmIGkgPiBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcworICAgICAgICAgICAgICYmIGh5 cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlLT5u cl92YWxpZGF0ZWRfcHRlcyA9IGk7CisgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhaXNfZ3Vlc3RfbDJfc2xv dChkLCB0eXBlLCBpKSB8fAorICAgICAgICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDJlKHBs MmVbaV0sIHBmbiwgZCkpID4gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp ZiAoIHJjIDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiRmFpbHVyZSBpbiBhbGxvY19sMl90YWJsZTogc2xvdCAlI3hcbiIsIGkpOworICAgICAg ICAgICAgd2hpbGUgKCBpLS0gPiAwICkKKyAgICAgICAgICAgICAgICBpZiAoIGlzX2d1ZXN0X2wy X3Nsb3QoZCwgdHlwZSwgaSkgKQorICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wy ZShwbDJlW2ldLCBwZm4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg ICBhZGp1c3RfZ3Vlc3RfbDJlKHBsMmVbaV0sIGQpOworICAgIH0KKworICAgIGlmICggcmMgPj0g MCAmJiAodHlwZSAmIFBHVF9wYWVfeGVuX2wyKSApCisgICAgeworICAgICAgICAvKiBYZW4gcHJp dmF0ZSBtYXBwaW5ncy4gKi8KKyAgICAgICAgbWVtY3B5KCZwbDJlW0NPTVBBVF9MMl9QQUdFVEFC TEVfRklSU1RfWEVOX1NMT1QoZCldLAorICAgICAgICAgICAgICAgJmNvbXBhdF9pZGxlX3BnX3Rh YmxlX2wyWworICAgICAgICAgICAgICAgICAgIGwyX3RhYmxlX29mZnNldChISVJPX0NPTVBBVF9N UFRfVklSVF9TVEFSVCldLAorICAgICAgICAgICAgICAgQ09NUEFUX0wyX1BBR0VUQUJMRV9YRU5f U0xPVFMoZCkgKiBzaXplb2YoKnBsMmUpKTsKKyAgICB9CisKKyAgICB1bm1hcF9kb21haW5fcGFn ZShwbDJlKTsKKyAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOworfQorCitzdGF0aWMgaW50IGFs bG9jX2wzX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFp biAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBh Z2VfdG9fbWZuKHBhZ2UpOworICAgIGwzX3BnZW50cnlfdCAgKnBsM2U7CisgICAgdW5zaWduZWQg aW50ICAgaTsKKyAgICBpbnQgICAgICAgICAgICByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0 aWFsX3B0ZTsKKworICAgIHBsM2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKKworICAg IC8qCisgICAgICogUEFFIGd1ZXN0cyBhbGxvY2F0ZSBmdWxsIHBhZ2VzLCBidXQgYXJlbid0IHJl cXVpcmVkIHRvIGluaXRpYWxpemUKKyAgICAgKiBtb3JlIHRoYW4gdGhlIGZpcnN0IGZvdXIgZW50 cmllczsgd2hlbiBydW5uaW5nIGluIGNvbXBhdGliaWxpdHkKKyAgICAgKiBtb2RlLCBob3dldmVy LCB0aGUgZnVsbCBwYWdlIGlzIHZpc2libGUgdG8gdGhlIE1NVSwgYW5kIGhlbmNlIGFsbAorICAg ICAqIDUxMiBlbnRyaWVzIG11c3QgYmUgdmFsaWQvdmVyaWZpZWQsIHdoaWNoIGlzIG1vc3QgZWFz aWx5IGFjaGlldmVkCisgICAgICogYnkgY2xlYXJpbmcgdGhlbSBvdXQuCisgICAgICovCisgICAg aWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQorICAgICAgICBtZW1zZXQocGwzZSArIDQsIDAs IChMM19QQUdFVEFCTEVfRU5UUklFUyAtIDQpICogc2l6ZW9mKCpwbDNlKSk7CisKKyAgICBmb3Ig KCBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUzsK KyAgICAgICAgICBpKyssIHBhcnRpYWwgPSAwICkKKyAgICB7CisgICAgICAgIGlmICggaXNfcHZf MzJiaXRfZG9tYWluKGQpICYmIChpID09IDMpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg KCAhKGwzZV9nZXRfZmxhZ3MocGwzZVtpXSkgJiBfUEFHRV9QUkVTRU5UKSB8fAorICAgICAgICAg ICAgICAgICAobDNlX2dldF9mbGFncyhwbDNlW2ldKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpICkK KyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgcmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKKyAgICAgICAgICAgICAg ICAgICAgX21mbihsM2VfZ2V0X3BmbihwbDNlW2ldKSksCisgICAgICAgICAgICAgICAgICAgIFBH VF9sMl9wYWdlX3RhYmxlIHwgUEdUX3BhZV94ZW5fbDIsIGQsIHBhcnRpYWwsIHRydWUpOworICAg ICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAhaXNfZ3Vlc3RfbDNfc2xvdChpKSB8fAorICAgICAg ICAgICAgICAgICAgKHJjID0gZ2V0X3BhZ2VfZnJvbV9sM2UocGwzZVtpXSwgcGZuLCBkLCBwYXJ0 aWFsKSkgPiAwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggcmMgPT0g LUVSRVNUQVJUICkKKyAgICAgICAgeworICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0 ZXMgPSBpOworICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IDE7Cisg ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHJjID09IC1FSU5UUiAmJiBpICkKKyAgICAgICAg eworICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICAg cGFnZS0+cGFydGlhbF9wdGUgPSAwOworICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCByYyA8IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID49 IDAgJiYgIXB2X2NyZWF0ZV9wYWVfeGVuX21hcHBpbmdzKGQsIHBsM2UpICkKKyAgICAgICAgcmMg PSAtRUlOVkFMOworICAgIGlmICggcmMgPCAwICYmIHJjICE9IC1FUkVTVEFSVCAmJiByYyAhPSAt RUlOVFIgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJl IGluIGFsbG9jX2wzX3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7CisgICAgICAgIGlmICggaSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAg ICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gu b2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIGktLSA+ IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFpc19ndWVzdF9sM19zbG90KGkpICkK KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wz ZShwbDNlW2ldLCBkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdl KHBsM2UpOworICAgIHJldHVybiByYyA+IDAgPyAwIDogcmM7Cit9CisKK3N0YXRpYyBpbnQgYWxs b2NfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWlu ICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyAgcGZuID0gcGFn ZV90b19tZm4ocGFnZSk7CisgICAgbDRfcGdlbnRyeV90ICAqcGw0ZSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKHBmbikpOworICAgIHVuc2lnbmVkIGludCAgIGk7CisgICAgaW50ICAgICAgICAgICAg cmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlhbF9wdGU7CisKKyAgICBmb3IgKCBpID0gcGFn ZS0+bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMNF9QQUdFVEFCTEVfRU5UUklFUzsKKyAgICAgICAg ICBpKyssIHBhcnRpYWwgPSAwICkKKyAgICB7CisgICAgICAgIGlmICggIWlzX2d1ZXN0X2w0X3Ns b3QoZCwgaSkgfHwKKyAgICAgICAgICAgICAocmMgPSBnZXRfcGFnZV9mcm9tX2w0ZShwbDRlW2ld LCBwZm4sIGQsIHBhcnRpYWwpKSA+IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg ICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlLT5u cl92YWxpZGF0ZWRfcHRlcyA9IGk7CisgICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBh cnRpYWwgPzogMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggcmMgPCAwICkKKyAgICAg ICAgeworICAgICAgICAgICAgaWYgKCByYyAhPSAtRUlOVFIgKQorICAgICAgICAgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsdXJl IGluIGFsbG9jX2w0X3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7CisgICAgICAgICAgICBpZiAoIGkg KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVz ID0gaTsKKyAgICAgICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7CisgICAgICAgICAg ICAgICAgaWYgKCByYyA9PSAtRUlOVFIgKQorICAgICAgICAgICAgICAgICAgICByYyA9IC1FUkVT VEFSVDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICBpZiAoIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkKKyAgICAgICAg ICAgICAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzKys7CisgICAgICAgICAgICAg ICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCByYyA8IDAgKQor ICAgICAgICB7CisgICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKyAgICAgICAg ICAgIHJldHVybiByYzsKKyAgICAgICAgfQorCisgICAgICAgIGFkanVzdF9ndWVzdF9sNGUocGw0 ZVtpXSwgZCk7CisgICAgfQorCisgICAgaWYgKCByYyA+PSAwICkKKyAgICB7CisgICAgICAgIHB2 X2luaXRfZ3Vlc3RfbDRfdGFibGUocGw0ZSwgZCwgIVZNX0FTU0lTVChkLCBtMnBfc3RyaWN0KSk7 CisgICAgICAgIGF0b21pY19pbmMoJmQtPmFyY2gucHZfZG9tYWluLm5yX2w0X3BhZ2VzKTsKKyAg ICAgICAgcmMgPSAwOworICAgIH0KKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKworICAg IHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZnJlZV9sMV90YWJsZShzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdl KTsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAgIGwxX3Bn ZW50cnlfdCAqcGwxZTsKKyAgICB1bnNpZ25lZCBpbnQgIGk7CisKKyAgICBwbDFlID0gbWFwX2Rv bWFpbl9wYWdlKF9tZm4ocGZuKSk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IEwxX1BBR0VUQUJM RV9FTlRSSUVTOyBpKysgKQorICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkKTsK KworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworfQorCitzdGF0aWMgaW50IGZyZWVfbDJf dGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHByZWVtcHRpYmxlKQoreworICAgIHN0 cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25n IHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAgIGwyX3BnZW50cnlfdCAqcGwyZTsKKyAgICB1 bnNpZ25lZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtIDE7CisgICAgaW50IGVy ciA9IDA7CisKKyAgICBwbDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7CisKKyAgICBB U1NFUlQocGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMpOworICAgIGRvIHsKKyAgICAgICAgaWYgKCBp c19ndWVzdF9sMl9zbG90KGQsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCBpKSAmJgorICAgICAg ICAgICAgIHB1dF9wYWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbikgPT0gMCAmJgorICAgICAgICAg ICAgIHByZWVtcHRpYmxlICYmIGkgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAg ICBlcnIgPSAtRVJFU1RBUlQ7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICggIWVyciAmJiBpLS0g KTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMmUpOworCisgICAgaWYgKCAhZXJyICkKKyAg ICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJj0gflBHVF9wYWVfeGVuX2wyOworCisgICAg cmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmcmVlX2wzX3RhYmxlKHN0cnVjdCBwYWdlX2lu Zm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2Up OworICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19tZm4ocGFnZSk7CisgICAgbDNfcGdl bnRyeV90ICpwbDNlOworICAgIGludCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0 ZTsKKyAgICB1bnNpZ25lZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0 aWFsOworCisgICAgcGwzZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOworCisgICAgZG8g eworICAgICAgICBpZiAoIGlzX2d1ZXN0X2wzX3Nsb3QoaSkgKQorICAgICAgICB7CisgICAgICAg ICAgICByYyA9IHB1dF9wYWdlX2Zyb21fbDNlKHBsM2VbaV0sIHBmbiwgcGFydGlhbCwgMCk7Cisg ICAgICAgICAgICBpZiAoIHJjIDwgMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBwYXJ0aWFsID0gMDsKKyAgICAgICAgICAgIGlmICggcmMgPiAwICkKKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBk KTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCBpLS0gKTsKKworICAgIHVubWFwX2RvbWFpbl9w YWdlKHBsM2UpOworCisgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgIHsKKyAgICAgICAg cGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9 IHBhcnRpYWwgPzogLTE7CisgICAgfQorICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYgaSA8 IEwzX1BBR0VUQUJMRV9FTlRSSUVTIC0gMSApCisgICAgeworICAgICAgICBwYWdlLT5ucl92YWxp ZGF0ZWRfcHRlcyA9IGkgKyAxOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7CisgICAg ICAgIHJjID0gLUVSRVNUQVJUOworICAgIH0KKyAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOwor fQorCitzdGF0aWMgaW50IGZyZWVfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sK KyAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWdu ZWQgbG9uZyBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKyAgICBsNF9wZ2VudHJ5X3QgKnBsNGUg PSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKKyAgICBpbnQgcmMgPSAwLCBwYXJ0aWFsID0g cGFnZS0+cGFydGlhbF9wdGU7CisgICAgdW5zaWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRh dGVkX3B0ZXMgLSAhcGFydGlhbDsKKworICAgIGRvIHsKKyAgICAgICAgaWYgKCBpc19ndWVzdF9s NF9zbG90KGQsIGkpICkKKyAgICAgICAgICAgIHJjID0gcHV0X3BhZ2VfZnJvbV9sNGUocGw0ZVtp XSwgcGZuLCBwYXJ0aWFsLCAwKTsKKyAgICAgICAgaWYgKCByYyA8IDAgKQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIHBhcnRpYWwgPSAwOworICAgIH0gd2hpbGUgKCBpLS0gKTsKKworICAg IGlmICggcmMgPT0gLUVSRVNUQVJUICkKKyAgICB7CisgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRl ZF9wdGVzID0gaTsKKyAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOwor ICAgIH0KKyAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRSICYmIGkgPCBMNF9QQUdFVEFCTEVfRU5U UklFUyAtIDEgKQorICAgIHsKKyAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsg MTsKKyAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOworICAgICAgICByYyA9IC1FUkVTVEFS VDsKKyAgICB9CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKworICAgIGlmICggcmMg Pj0gMCApCisgICAgeworICAgICAgICBhdG9taWNfZGVjKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9s NF9wYWdlcyk7CisgICAgICAgIHJjID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisK K3N0YXRpYyBpbnQgYWxsb2Nfc2VnZGVzY19wYWdlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7 CisgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsK KyAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2NzID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7 CisgICAgdW5zaWduZWQgaTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgNTEyOyBpKysgKQorICAg ICAgICBpZiAoIHVubGlrZWx5KCFjaGVja19kZXNjcmlwdG9yKG93bmVyLCAmZGVzY3NbaV0pKSAp CisgICAgICAgICAgICBicmVhazsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKGRlc2NzKTsKKwor ICAgIHJldHVybiBpID09IDUxMiA/IDAgOiAtRUlOVkFMOworfQorCitpbnQgcHZfYWxsb2NfcGFn ZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0aWJsZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWlu ICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOworICAgIGludCByYzsKKworICAgIC8qIEEg cGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVjb21lcyBub24temVy by4gKi8KKyAgICBpZiAoIGxpa2VseShvd25lciAhPSBOVUxMKSApCisgICAgICAgIHBhZ2luZ19t YXJrX2RpcnR5KG93bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisKKyAgICBzd2l0Y2gg KCB0eXBlICYgUEdUX3R5cGVfbWFzayApCisgICAgeworICAgIGNhc2UgUEdUX2wxX3BhZ2VfdGFi bGU6CisgICAgICAgIHJjID0gYWxsb2NfbDFfdGFibGUocGFnZSk7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgUEdUX2wyX3BhZ2VfdGFibGU6CisgICAgICAgIHJjID0gYWxsb2NfbDJfdGFibGUo cGFnZSwgdHlwZSwgcHJlZW1wdGlibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9s M19wYWdlX3RhYmxlOgorICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9 IGFsbG9jX2wzX3RhYmxlKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sNF9w YWdlX3RhYmxlOgorICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9IGFs bG9jX2w0X3RhYmxlKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9zZWdfZGVz Y19wYWdlOgorICAgICAgICByYyA9IGFsbG9jX3NlZ2Rlc2NfcGFnZShwYWdlKTsKKyAgICAgICAg YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRrKCJCYWQgdHlwZSBpbiBhbGxvY19w YWdlX3R5cGUgJWx4IHQ9JSIgUFJ0eXBlX2luZm8gIiBjPSVseFxuIiwKKyAgICAgICAgICAgICAg IHR5cGUsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLAorICAgICAgICAgICAgICAgcGFnZS0+Y291 bnRfaW5mbyk7CisgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgQlVHKCk7CisgICAgfQor CisgICAgLyogTm8gbmVlZCBmb3IgYXRvbWljIHVwZGF0ZSBvZiB0eXBlX2luZm8gaGVyZTogbm9v bmUgZWxzZSB1cGRhdGVzIGl0LiAqLworICAgIHNtcF93bWIoKTsKKyAgICBzd2l0Y2ggKCByYyAp CisgICAgeworICAgIGNhc2UgMDoKKyAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0g UEdUX3ZhbGlkYXRlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAtRUlOVFI6CisgICAgICAg IEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJgorICAgICAgICAgICAgICAgIChQR1Rf Y291bnRfbWFza3xQR1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgPT0gMSk7CisgICAgICAgIHBh Z2UtPnUuaW51c2UudHlwZV9pbmZvICY9IH5QR1RfY291bnRfbWFzazsKKyAgICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKHJjIDwgMCk7CisgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiRXJyb3Igd2hpbGUgdmFsaWRhdGluZyBtZm4gJSIgUFJJX21mbgor ICAgICAgICAgICAgICAgICAiIChwZm4gJSIgUFJJX3BmbiAiKSBmb3IgdHlwZSAlIiBQUnR5cGVf aW5mbworICAgICAgICAgICAgICAgICAiOiBjYWY9JTA4bHggdGFmPSUiIFBSdHlwZV9pbmZvICJc biIsCisgICAgICAgICAgICAgICAgIHBhZ2VfdG9fbWZuKHBhZ2UpLCBnZXRfZ3Bmbl9mcm9tX21m bihwYWdlX3RvX21mbihwYWdlKSksCisgICAgICAgICAgICAgICAgIHR5cGUsIHBhZ2UtPmNvdW50 X2luZm8sIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKTsKKyAgICAgICAgaWYgKCBwYWdlICE9IGN1 cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkKKyAgICAgICAgICAgIHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF UlQoKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYKKyAgICAgICAgICAgICAgICAgICAgKFBHVF9j b3VudF9tYXNrIHwgUEdUX3ZhbGlkYXRlZCkpID09IDEpOworICAgIGNhc2UgLUVSRVNUQVJUOgor ICAgICAgICAgICAgZ2V0X3BhZ2VfbGlnaHQocGFnZSk7CisgICAgICAgICAgICBwYWdlLT51Lmlu dXNlLnR5cGVfaW5mbyB8PSBQR1RfcGFydGlhbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK KyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1 Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBwcmVlbXB0aWJsZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBh Z2VfZ2V0X293bmVyKHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgZ21mbjsKKyAgICBpbnQgcmM7 CisKKyAgICBpZiAoIGxpa2VseShvd25lciAhPSBOVUxMKSAmJiB1bmxpa2VseShwYWdpbmdfbW9k ZV9lbmFibGVkKG93bmVyKSkgKQorICAgIHsKKyAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRp cnRpZWQgd2hlbiBpdHMgdHlwZSBjb3VudCBiZWNvbWVzIHplcm8uICovCisgICAgICAgIHBhZ2lu Z19tYXJrX2RpcnR5KG93bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisKKyAgICAgICAg QVNTRVJUKCFzaGFkb3dfbW9kZV9yZWZjb3VudHMob3duZXIpKTsKKworICAgICAgICBnbWZuID0g bWZuX3RvX2dtZm4ob3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICAgICAgQVNTRVJUKFZB TElEX00yUChnbWZuKSk7CisgICAgICAgIC8qIFBhZ2Ugc2hhcmluZyBub3Qgc3VwcG9ydGVkIGZv ciBzaGFkb3dlZCBkb21haW5zICovCisgICAgICAgIGlmKCFTSEFSRURfTTJQKGdtZm4pKQorICAg ICAgICAgICAgc2hhZG93X3JlbW92ZV9hbGxfc2hhZG93cyhvd25lciwgX21mbihnbWZuKSk7Cisg ICAgfQorCisgICAgaWYgKCAhKHR5cGUgJiBQR1RfcGFydGlhbCkgKQorICAgIHsKKyAgICAgICAg cGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSAxVSA8PCBQQUdFVEFCTEVfT1JERVI7CisgICAgICAg IHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCB0eXBlICYgUEdU X3R5cGVfbWFzayApCisgICAgeworICAgIGNhc2UgUEdUX2wxX3BhZ2VfdGFibGU6CisgICAgICAg IGZyZWVfbDFfdGFibGUocGFnZSk7CisgICAgICAgIHJjID0gMDsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBQR1RfbDJfcGFnZV90YWJsZToKKyAgICAgICAgcmMgPSBmcmVlX2wyX3RhYmxlKHBh Z2UsIHByZWVtcHRpYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQR1RfbDNfcGFnZV90 YWJsZToKKyAgICAgICAgQVNTRVJUKHByZWVtcHRpYmxlKTsKKyAgICAgICAgcmMgPSBmcmVlX2wz X3RhYmxlKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sNF9wYWdlX3RhYmxl OgorICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9IGZyZWVfbDRfdGFi bGUocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAidHlwZSAlIiBQUnR5cGVfaW5mbyAiIG1mbiAlIiBQUklfbWZuICJc biIsCisgICAgICAgICAgICAgICAgIHR5cGUsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICAgICAg cmMgPSAtRUlOVkFMOworICAgICAgICBCVUcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9 CisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS9hc20teDg2L21tLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKaW5kZXggNjg1 NzY1MWRiMS4uNzQ4MDM0MTI0MCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5o CisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbW0uaApAQCAtMzAyLDkgKzMwMiw2IEBAIHN0YXRp YyBpbmxpbmUgdm9pZCAqX19wYWdlX3RvX3ZpcnQoY29uc3Qgc3RydWN0IHBhZ2VfaW5mbyAqcGcp CiAgICAgICAgICAgICAgICAgICAgIChQQUdFX1NJWkUgLyAoc2l6ZW9mKCpwZykgJiAtc2l6ZW9m KCpwZykpKSk7CiB9CiAKLWludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVl bXB0aWJsZSk7Ci0KIGJvb2xfdCBmaWxsX3JvX21wdCh1bnNpZ25lZCBsb25nIG1mbik7CiB2b2lk IHphcF9yb19tcHQodW5zaWduZWQgbG9uZyBtZm4pOwogCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVk ZS9hc20teDg2L3B2L21tLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L21tLmgKaW5kZXggMDE5 MjU4MGI0MS4uODQxNjY2ZTdhMCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9t bS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvbW0uaApAQCAtOTYsNiArOTYsMTEgQEAg dm9pZCBwdl9hcmNoX2luaXRfbWVtb3J5KHZvaWQpOwogCiBpbnQgcHZfbmV3X2d1ZXN0X2NyMyh1 bnNpZ25lZCBsb25nIHBmbik7CiAKK2ludCBwdl9hbGxvY19wYWdlX3R5cGUoc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICBi b29sIHByZWVtcHRpYmxlKTsKK2ludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw cmVlbXB0aWJsZSk7CisKICNlbHNlCiAKICNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KQEAgLTEyNiw2 ICsxMzEsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHB2X2FyY2hfaW5pdF9tZW1vcnkodm9pZCkg e30KIAogc3RhdGljIGlubGluZSBpbnQgcHZfbmV3X2d1ZXN0X2NyMyh1bnNpZ25lZCBsb25nIHBm bikgeyByZXR1cm4gLUVJTlZBTDsgfQogCitzdGF0aWMgaW5saW5lIGludCBwdl9hbGxvY19wYWdl X3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlZW1wdGlibGUpCit7IHJldHVy biAtRUlOVkFMOyB9CitzdGF0aWMgaW5saW5lIGludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3Qg cGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBwcmVlbXB0aWJsZSkKK3sgcmV0dXJuIC1FSU5WQUw7IH0KKwogI2VuZGlmCiAKICNl bmRpZiAvKiBfX1g4Nl9QVl9NTV9IX18gKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVu LWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=