From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH for-next 8/8] x86/domain: move HVM specific code to hvm/domain.c Date: Mon, 10 Apr 2017 14:27:16 +0100 Message-ID: <20170410132716.31610-9-wei.liu2@citrix.com> References: <20170410132716.31610-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 1cxZxL-000354-Md for xen-devel@lists.xenproject.org; Mon, 10 Apr 2017 14:06:11 +0000 In-Reply-To: <20170410132716.31610-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 List-Id: xen-devel@lists.xenproject.org VGhlcmUgaXMgb25seSBvbmUgZnVuY3Rpb24gYXJjaF9zZXRfaW5mb19odm1fZ3Vlc3QgaXMgbW92 ZWQuIFRoZQpjaGVja19zZWdtZW50IGZ1bmN0aW9uIGlzIGFsc28gbW92ZWQgc2luY2UgYXJjaF9z ZXRfaW5mb19odm1fZ3Vlc3QgaXMKdGhlIG9ubHkgdXNlci4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdl LgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4v YXJjaC94ODYvZG9tYWluLmMgICAgIHwgMjkxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYvaHZtL01ha2VmaWxlIHwgICAxICsKIHhlbi9hcmNo L3g4Ni9odm0vZG9tYWluLmMgfCAzMjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzMjMgaW5zZXJ0aW9ucygrKSwgMjkxIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9odm0vZG9tYWluLmMK CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZG9tYWluLmMgYi94ZW4vYXJjaC94ODYvZG9tYWlu LmMKaW5kZXggNGEyMzYzZmM5Ni4uODBhODZlMWJhMiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2 L2RvbWFpbi5jCisrKyBiL3hlbi9hcmNoL3g4Ni9kb21haW4uYwpAQCAtMTA2MCwyOTcgKzEwNjAs NiBAQCBpbnQgYXJjaF9zZXRfaW5mb19ndWVzdCgKICN1bmRlZiBjCiB9CiAKLXN0YXRpYyBpbmxp bmUgaW50IGNoZWNrX3NlZ21lbnQoc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgKnJlZywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcpCi17Ci0KLSAg ICBpZiAoIHJlZy0+YXR0ci5maWVsZHMucGFkICE9IDAgKQotICAgIHsKLSAgICAgICAgZ3ByaW50 ayhYRU5MT0dfRVJSLCAiU2VnbWVudCBhdHRyaWJ1dGUgYml0cyAxMi0xNSBhcmUgbm90IHplcm9c biIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoIHJlZy0+YXR0 ci5ieXRlcyA9PSAwICkKLSAgICB7Ci0gICAgICAgIGlmICggc2VnICE9IHg4Nl9zZWdfZHMgJiYg c2VnICE9IHg4Nl9zZWdfZXMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBncHJpbnRrKFhFTkxP R19FUlIsICJOdWxsIHNlbGVjdG9yIHByb3ZpZGVkIGZvciBDUywgU1Mgb3IgVFJcbiIpOwotICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0g ICAgfQotCi0gICAgaWYgKCBzZWcgPT0geDg2X3NlZ190ciApCi0gICAgewotICAgICAgICBpZiAo IHJlZy0+YXR0ci5maWVsZHMucyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVO TE9HX0VSUiwgIkNvZGUgb3IgZGF0YSBzZWdtZW50IHByb3ZpZGVkIGZvciBUUlxuIik7Ci0gICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggcmVnLT5h dHRyLmZpZWxkcy50eXBlICE9IFNZU19ERVNDX3Rzc19idXN5ICkKLSAgICAgICAgewotICAgICAg ICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiTm9uLTMyLWJpdC1UU1Mgc2VnbWVudCBwcm92aWRl ZCBmb3IgVFJcbiIpOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgZWxzZSBpZiAoICFyZWctPmF0dHIuZmllbGRzLnMgKQotICAgIHsKLSAgICAgICAg Z3ByaW50ayhYRU5MT0dfRVJSLAotICAgICAgICAgICAgICAgICJTeXN0ZW0gc2VnbWVudCBwcm92 aWRlZCBmb3IgYSBjb2RlIG9yIGRhdGEgc2VnbWVudFxuIik7Ci0gICAgICAgIHJldHVybiAtRUlO VkFMOwotICAgIH0KLQotICAgIGlmICggIXJlZy0+YXR0ci5maWVsZHMucCApCi0gICAgewotICAg ICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOb24tcHJlc2VudCBzZWdtZW50IHByb3ZpZGVkXG4i KTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgaWYgKCBzZWcgPT0geDg2 X3NlZ19jcyAmJiAhKHJlZy0+YXR0ci5maWVsZHMudHlwZSAmIDB4OCkgKQotICAgIHsKLSAgICAg ICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiTm9uLWNvZGUgc2VnbWVudCBwcm92aWRlZCBmb3IgQ1Nc biIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoIHNlZyA9PSB4 ODZfc2VnX3NzICYmCi0gICAgICAgICAoKHJlZy0+YXR0ci5maWVsZHMudHlwZSAmIDB4OCkgfHwg IShyZWctPmF0dHIuZmllbGRzLnR5cGUgJiAweDIpKSApCi0gICAgewotICAgICAgICBncHJpbnRr KFhFTkxPR19FUlIsICJOb24td3JpdGVhYmxlIHNlZ21lbnQgcHJvdmlkZWQgZm9yIFNTXG4iKTsK LSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgaWYgKCByZWctPmF0dHIuZmll bGRzLnMgJiYgc2VnICE9IHg4Nl9zZWdfc3MgJiYgc2VnICE9IHg4Nl9zZWdfY3MgJiYKLSAgICAg ICAgIChyZWctPmF0dHIuZmllbGRzLnR5cGUgJiAweDgpICYmICEocmVnLT5hdHRyLmZpZWxkcy50 eXBlICYgMHgyKSApCi0gICAgewotICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOb24tcmVh ZGFibGUgc2VnbWVudCBwcm92aWRlZCBmb3IgRFMgb3IgRVNcbiIpOwotICAgICAgICByZXR1cm4g LUVJTlZBTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogQ2FsbGVkIGJ5IFZDUFVP UF9pbml0aWFsaXNlIGZvciBIVk0gZ3Vlc3RzLiAqLwotaW50IGFyY2hfc2V0X2luZm9faHZtX2d1 ZXN0KHN0cnVjdCB2Y3B1ICp2LCBjb25zdCB2Y3B1X2h2bV9jb250ZXh0X3QgKmN0eCkKLXsKLSAg ICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqdXJlZ3MgPSAmdi0+YXJjaC51c2VyX3JlZ3M7Ci0gICAg c3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgY3MsIGRzLCBzcywgZXMsIHRyOwotICAgIGNvbnN0IGNo YXIgKmVycnN0cjsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoIGN0eC0+cGFkICE9IDAgKQotICAg ICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIHN3aXRjaCAoIGN0eC0+bW9kZSApCi0gICAgewot ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAgY2FzZSBWQ1BVX0hW TV9NT0RFXzMyQjoKLSAgICB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfMzIg KnJlZ3MgPSAmY3R4LT5jcHVfcmVncy54ODZfMzI7Ci0gICAgICAgIHVpbnQzMl90IGxpbWl0Owot Ci0gICAgICAgIGlmICggY3R4LT5jcHVfcmVncy54ODZfMzIucGFkMSAhPSAwIHx8Ci0gICAgICAg ICAgICAgY3R4LT5jcHVfcmVncy54ODZfMzIucGFkMlswXSAhPSAwIHx8Ci0gICAgICAgICAgICAg Y3R4LT5jcHVfcmVncy54ODZfMzIucGFkMlsxXSAhPSAwIHx8Ci0gICAgICAgICAgICAgY3R4LT5j cHVfcmVncy54ODZfMzIucGFkMlsyXSAhPSAwICkKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFM OwotCi0jZGVmaW5lIFNFRyhzLCByKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHMgPSAoc3RydWN0IHNlZ21lbnRfcmVnaXN0 ZXIpeyAuYmFzZSA9IChyKS0+cyAjIyBfYmFzZSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxpbWl0ID0gKHIpLT5zICMjIF9saW1pdCwgICAg ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyLmJ5 dGVzID0gKHIpLT5zICMjIF9hciB9OyAgICAgICAgICAgXAotICAgIC8qIFNldCBhY2Nlc3NlZCAv IGJ1c3kgYml0IGZvciBwcmVzZW50IHNlZ21lbnRzLiAqLyAgICAgICAgICAgICAgICAgICAgIFwK LSAgICBpZiAoIHMuYXR0ci5maWVsZHMucCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHMuYXR0ci5maWVsZHMudHlwZSB8PSAoeDg2 X3NlZ18jI3MgIT0geDg2X3NlZ190ciA/IDEgOiAyKTsgICAgICAgICAgXAotICAgIGNoZWNrX3Nl Z21lbnQoJnMsIHg4Nl9zZWdfICMjIHMpOyB9KQotCi0gICAgICAgIHJjID0gU0VHKGNzLCByZWdz KTsKLSAgICAgICAgcmMgfD0gU0VHKGRzLCByZWdzKTsKLSAgICAgICAgcmMgfD0gU0VHKHNzLCBy ZWdzKTsKLSAgICAgICAgcmMgfD0gU0VHKGVzLCByZWdzKTsKLSAgICAgICAgcmMgfD0gU0VHKHRy LCByZWdzKTsKLSN1bmRlZiBTRUcKLQotICAgICAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICAg ICAgcmV0dXJuIHJjOwotCi0gICAgICAgIC8qIEJhc2ljIHNhbml0eSBjaGVja3MuICovCi0gICAg ICAgIGxpbWl0ID0gY3MubGltaXQ7Ci0gICAgICAgIGlmICggY3MuYXR0ci5maWVsZHMuZyApCi0g ICAgICAgICAgICBsaW1pdCA9IChsaW1pdCA8PCAxMikgfCAweGZmZjsKLSAgICAgICAgaWYgKCBy ZWdzLT5laXAgPiBsaW1pdCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9H X0VSUiwgIkVJUCAoJSMwOHgpIG91dHNpZGUgQ1MgbGltaXQgKCUjMDh4KVxuIiwKLSAgICAgICAg ICAgICAgICAgICAgcmVncy0+ZWlwLCBsaW1pdCk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZB TDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggc3MuYXR0ci5maWVsZHMuZHBsICE9IGNzLmF0 dHIuZmllbGRzLmRwbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VS UiwgIlNTLkRQTCAoJXUpIGlzIGRpZmZlcmVudCB0aGFuIENTLkRQTCAoJXUpXG4iLAotICAgICAg ICAgICAgICAgICAgICBzcy5hdHRyLmZpZWxkcy5kcGwsIGNzLmF0dHIuZmllbGRzLmRwbCk7Ci0g ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggZHMu YXR0ci5maWVsZHMucCAmJiBkcy5hdHRyLmZpZWxkcy5kcGwgPiBjcy5hdHRyLmZpZWxkcy5kcGwg KQotICAgICAgICB7Ci0gICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJEUy5EUEwgKCV1 KSBpcyBncmVhdGVyIHRoYW4gQ1MuRFBMICgldSlcbiIsCi0gICAgICAgICAgICAgICAgICAgIGRz LmF0dHIuZmllbGRzLmRwbCwgY3MuYXR0ci5maWVsZHMuZHBsKTsKLSAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBlcy5hdHRyLmZpZWxkcy5wICYm IGVzLmF0dHIuZmllbGRzLmRwbCA+IGNzLmF0dHIuZmllbGRzLmRwbCApCi0gICAgICAgIHsKLSAg ICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVTLkRQTCAoJXUpIGlzIGdyZWF0ZXIgdGhh biBDUy5EUEwgKCV1KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgZXMuYXR0ci5maWVsZHMuZHBs LCBjcy5hdHRyLmZpZWxkcy5kcGwpOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAg ICAgIH0KLQotICAgICAgICBpZiAoIChyZWdzLT5lZmVyICYgRUZFUl9MTUEpICYmICEocmVncy0+ ZWZlciAmIEVGRVJfTE1FKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9H X0VSUiwgIkVGRVIuTE1BIHNldCB3aXRob3V0IEVGRVIuTE1FICglIzAxNmx4KVxuIiwKLSAgICAg ICAgICAgICAgICAgICAgcmVncy0+ZWZlcik7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK LSAgICAgICAgfQotCi0gICAgICAgIHVyZWdzLT5yYXggICAgPSByZWdzLT5lYXg7Ci0gICAgICAg IHVyZWdzLT5yY3ggICAgPSByZWdzLT5lY3g7Ci0gICAgICAgIHVyZWdzLT5yZHggICAgPSByZWdz LT5lZHg7Ci0gICAgICAgIHVyZWdzLT5yYnggICAgPSByZWdzLT5lYng7Ci0gICAgICAgIHVyZWdz LT5yc3AgICAgPSByZWdzLT5lc3A7Ci0gICAgICAgIHVyZWdzLT5yYnAgICAgPSByZWdzLT5lYnA7 Ci0gICAgICAgIHVyZWdzLT5yc2kgICAgPSByZWdzLT5lc2k7Ci0gICAgICAgIHVyZWdzLT5yZGkg ICAgPSByZWdzLT5lZGk7Ci0gICAgICAgIHVyZWdzLT5yaXAgICAgPSByZWdzLT5laXA7Ci0gICAg ICAgIHVyZWdzLT5yZmxhZ3MgPSByZWdzLT5lZmxhZ3M7Ci0KLSAgICAgICAgdi0+YXJjaC5odm1f dmNwdS5ndWVzdF9jclswXSA9IHJlZ3MtPmNyMDsKLSAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5n dWVzdF9jclszXSA9IHJlZ3MtPmNyMzsKLSAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9j cls0XSA9IHJlZ3MtPmNyNDsKLSAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9lZmVyICA9 IHJlZ3MtPmVmZXI7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBWQ1BVX0hWTV9NT0RF XzY0QjoKLSAgICB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfNjQgKnJlZ3Mg PSAmY3R4LT5jcHVfcmVncy54ODZfNjQ7Ci0KLSAgICAgICAgLyogQmFzaWMgc2FuaXR5IGNoZWNr cy4gKi8KLSAgICAgICAgaWYgKCAhaXNfY2Fub25pY2FsX2FkZHJlc3MocmVncy0+cmlwKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIlJJUCBjb250YWlucyBh IG5vbi1jYW5vbmljYWwgYWRkcmVzcyAoJSNseClcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJl Z3MtPnJpcCk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmICggIShyZWdzLT5jcjAgJiBYODZfQ1IwX1BHKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkNSMCBkb2Vzbid0IGhhdmUgcGFnaW5nIGVuYWJsZWQg KCUjMDE2bHgpXG4iLAotICAgICAgICAgICAgICAgICAgICByZWdzLT5jcjApOwotICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICEocmVncy0+Y3I0 ICYgWDg2X0NSNF9QQUUpICkKLSAgICAgICAgewotICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiQ1I0IGRvZXNuJ3QgaGF2ZSBQQUUgZW5hYmxlZCAoJSMwMTZseClcbiIsCi0gICAgICAg ICAgICAgICAgICAgIHJlZ3MtPmNyNCk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAg ICAgICAgfQotCi0gICAgICAgIGlmICggIShyZWdzLT5lZmVyICYgRUZFUl9MTUUpICkKLSAgICAg ICAgewotICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiRUZFUiBkb2Vzbid0IGhhdmUg TE1FIGVuYWJsZWQgKCUjMDE2bHgpXG4iLAotICAgICAgICAgICAgICAgICAgICByZWdzLT5lZmVy KTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgdXJl Z3MtPnJheCAgICA9IHJlZ3MtPnJheDsKLSAgICAgICAgdXJlZ3MtPnJjeCAgICA9IHJlZ3MtPnJj eDsKLSAgICAgICAgdXJlZ3MtPnJkeCAgICA9IHJlZ3MtPnJkeDsKLSAgICAgICAgdXJlZ3MtPnJi eCAgICA9IHJlZ3MtPnJieDsKLSAgICAgICAgdXJlZ3MtPnJzcCAgICA9IHJlZ3MtPnJzcDsKLSAg ICAgICAgdXJlZ3MtPnJicCAgICA9IHJlZ3MtPnJicDsKLSAgICAgICAgdXJlZ3MtPnJzaSAgICA9 IHJlZ3MtPnJzaTsKLSAgICAgICAgdXJlZ3MtPnJkaSAgICA9IHJlZ3MtPnJkaTsKLSAgICAgICAg dXJlZ3MtPnJpcCAgICA9IHJlZ3MtPnJpcDsKLSAgICAgICAgdXJlZ3MtPnJmbGFncyA9IHJlZ3Mt PnJmbGFnczsKLQotICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdID0gcmVncy0+ Y3IwOwotICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID0gcmVncy0+Y3IzOwot ICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdID0gcmVncy0+Y3I0OwotICAgICAg ICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2VmZXIgID0gcmVncy0+ZWZlcjsKLQotI2RlZmluZSBT RUcobCwgYSkgKHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyKXsgLmxpbWl0ID0gKGwpLCAuYXR0ci5i eXRlcyA9IChhKSB9Ci0gICAgICAgIGNzID0gU0VHKH4wdSwgMHhhOWIpOyAvKiA2NGJpdCBjb2Rl IHNlZ21lbnQuICovCi0gICAgICAgIGRzID0gc3MgPSBlcyA9IFNFRyh+MHUsIDB4YzkzKTsKLSAg ICAgICAgdHIgPSBTRUcoMHg2NywgMHg4Yik7IC8qIDY0Yml0IFRTUyAoYnVzeSkuICovCi0jdW5k ZWYgU0VHCi0gICAgfQotICAgIGJyZWFrOwotCi0gICAgfQotCi0gICAgaWYgKCB2LT5hcmNoLmh2 bV92Y3B1Lmd1ZXN0X2VmZXIgJiBFRkVSX0xNRSApCi0gICAgICAgIHYtPmFyY2guaHZtX3ZjcHUu Z3Vlc3RfZWZlciB8PSBFRkVSX0xNQTsKLQotICAgIGlmICggdi0+YXJjaC5odm1fdmNwdS5ndWVz dF9jcls0XSAmIH5odm1fY3I0X2d1ZXN0X3ZhbGlkX2JpdHModiwgMCkgKQotICAgIHsKLSAgICAg ICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiQmFkIENSNCB2YWx1ZTogJSMwMTZseFxuIiwKLSAgICAg ICAgICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdKTsKLSAgICAgICAgcmV0dXJu IC1FSU5WQUw7Ci0gICAgfQotCi0gICAgZXJyc3RyID0gaHZtX2VmZXJfdmFsaWQodiwgdi0+YXJj aC5odm1fdmNwdS5ndWVzdF9lZmVyLCAtMSk7Ci0gICAgaWYgKCBlcnJzdHIgKQotICAgIHsKLSAg ICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiQmFkIEVGRVIgdmFsdWUgKCUjMDE2bHgpOiAlc1xu IiwKLSAgICAgICAgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciwgZXJyc3RyKTsK LSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgaHZtX3VwZGF0ZV9ndWVzdF9j cih2LCAwKTsKLSAgICBodm1fdXBkYXRlX2d1ZXN0X2NyKHYsIDMpOwotICAgIGh2bV91cGRhdGVf Z3Vlc3RfY3IodiwgNCk7Ci0gICAgaHZtX3VwZGF0ZV9ndWVzdF9lZmVyKHYpOwotCi0gICAgaWYg KCBodm1fcGFnaW5nX2VuYWJsZWQodikgJiYgIXBhZ2luZ19tb2RlX2hhcCh2LT5kb21haW4pICkK LSAgICB7Ci0gICAgICAgIC8qIFNoYWRvdy1tb2RlIENSMyBjaGFuZ2UuIENoZWNrIFBEQlIgYW5k IHVwZGF0ZSByZWZjb3VudHMuICovCi0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBn ZXRfcGFnZV9mcm9tX2dmbih2LT5kb21haW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID4+IFBBR0VfU0hJRlQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBQMk1fQUxMT0MpOwotICAgICAgICBpZiAo ICFwYWdlICkKLSAgICAgICAgewotICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiSW52 YWxpZCBDUjM6ICUjbHhcbiIsCi0gICAgICAgICAgICAgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUu Z3Vlc3RfY3JbM10pOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQot ICAgICAgICB2LT5hcmNoLmd1ZXN0X3RhYmxlID0gcGFnZXRhYmxlX2Zyb21fcGFnZShwYWdlKTsK LSAgICB9Ci0KLSAgICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19jcywgJmNz KTsKLSAgICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19kcywgJmRzKTsKLSAg ICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19zcywgJnNzKTsKLSAgICBodm1f c2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19lcywgJmVzKTsKLSAgICBodm1fc2V0X3Nl Z21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ190ciwgJnRyKTsKLQotICAgIC8qIFN5bmMgQVAncyBU U0Mgd2l0aCBCU1Ancy4gKi8KLSAgICB2LT5hcmNoLmh2bV92Y3B1LmNhY2hlX3RzY19vZmZzZXQg PQotICAgICAgICB2LT5kb21haW4tPnZjcHVbMF0tPmFyY2guaHZtX3ZjcHUuY2FjaGVfdHNjX29m ZnNldDsKLSAgICBodm1fZnVuY3Muc2V0X3RzY19vZmZzZXQodiwgdi0+YXJjaC5odm1fdmNwdS5j YWNoZV90c2Nfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5kb21haW4t PmFyY2guaHZtX2RvbWFpbi5zeW5jX3RzYyk7Ci0KLSAgICBwYWdpbmdfdXBkYXRlX3BhZ2luZ19t b2Rlcyh2KTsKLQotICAgIHYtPmlzX2luaXRpYWxpc2VkID0gMTsKLSAgICBzZXRfYml0KF9WUEZf ZG93biwgJnYtPnBhdXNlX2ZsYWdzKTsKLQotICAgIHJldHVybiAwOwotfQotCiBpbnQgYXJjaF9p bml0aWFsaXNlX3ZjcHUoc3RydWN0IHZjcHUgKnYsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9p ZCkgYXJnKQogewogICAgIGludCByYzsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vTWFr ZWZpbGUgYi94ZW4vYXJjaC94ODYvaHZtL01ha2VmaWxlCmluZGV4IDBhM2QwZjRmN2UuLjRkYzA3 NzNhOTMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vTWFrZWZpbGUKKysrIGIveGVuL2Fy Y2gveDg2L2h2bS9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAgc3ViZGlyLXkgKz0gdm14CiBvYmot eSArPSBhc2lkLm8KIG9iai15ICs9IGRtLm8KIG9iai1iaW4teSArPSBkb20wX2J1aWxkLmluaXQu bworb2JqLXkgKz0gZG9tYWluLm8KIG9iai15ICs9IGVtdWxhdGUubwogb2JqLXkgKz0gaHBldC5v CiBvYmoteSArPSBodm0ubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9kb21haW4uYyBi L3hlbi9hcmNoL3g4Ni9odm0vZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uYzMzNThmNGY4ZAotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0v ZG9tYWluLmMKQEAgLTAsMCArMSwzMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFy Y2gveDg2L2h2bS9kb21haW4uYworICoKKyAqIEhWTS1zcGVjaWZpYyBkb21haW4gaGFuZGxpbmcK KyAqLworCisvKgorICogIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKKyAqCisg KiAgUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKKyAqICBHYXJldGggSHVnaGVzIDxnYXJl dGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAorICovCisKKworI2luY2x1ZGUgPHhlbi9kb21haW5f cGFnZS5oPgorI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNp bmNsdWRlIDx4ZW4vcGFnaW5nLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisKKyNpbmNsdWRl IDxwdWJsaWMvaHZtL2h2bV92Y3B1Lmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NlZ21l bnQoc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgKnJlZywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcpCit7CisKKyAgICBpZiAoIHJlZy0+YXR0ci5m aWVsZHMucGFkICE9IDAgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiU2Vn bWVudCBhdHRyaWJ1dGUgYml0cyAxMi0xNSBhcmUgbm90IHplcm9cbiIpOworICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIHJlZy0+YXR0ci5ieXRlcyA9PSAwICkKKyAg ICB7CisgICAgICAgIGlmICggc2VnICE9IHg4Nl9zZWdfZHMgJiYgc2VnICE9IHg4Nl9zZWdfZXMg KQorICAgICAgICB7CisgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOdWxsIHNlbGVj dG9yIHByb3ZpZGVkIGZvciBDUywgU1Mgb3IgVFJcbiIpOworICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCBz ZWcgPT0geDg2X3NlZ190ciApCisgICAgeworICAgICAgICBpZiAoIHJlZy0+YXR0ci5maWVsZHMu cyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkNvZGUgb3Ig ZGF0YSBzZWdtZW50IHByb3ZpZGVkIGZvciBUUlxuIik7CisgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggcmVnLT5hdHRyLmZpZWxkcy50eXBlICE9 IFNZU19ERVNDX3Rzc19idXN5ICkKKyAgICAgICAgeworICAgICAgICAgICAgZ3ByaW50ayhYRU5M T0dfRVJSLCAiTm9uLTMyLWJpdC1UU1Mgc2VnbWVudCBwcm92aWRlZCBmb3IgVFJcbiIpOworICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAo ICFyZWctPmF0dHIuZmllbGRzLnMgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJS LAorICAgICAgICAgICAgICAgICJTeXN0ZW0gc2VnbWVudCBwcm92aWRlZCBmb3IgYSBjb2RlIG9y IGRhdGEgc2VnbWVudFxuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IGlmICggIXJlZy0+YXR0ci5maWVsZHMucCApCisgICAgeworICAgICAgICBncHJpbnRrKFhFTkxP R19FUlIsICJOb24tcHJlc2VudCBzZWdtZW50IHByb3ZpZGVkXG4iKTsKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCBzZWcgPT0geDg2X3NlZ19jcyAmJiAhKHJlZy0+ YXR0ci5maWVsZHMudHlwZSAmIDB4OCkgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiTm9uLWNvZGUgc2VnbWVudCBwcm92aWRlZCBmb3IgQ1NcbiIpOworICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIHNlZyA9PSB4ODZfc2VnX3NzICYmCisgICAg ICAgICAoKHJlZy0+YXR0ci5maWVsZHMudHlwZSAmIDB4OCkgfHwgIShyZWctPmF0dHIuZmllbGRz LnR5cGUgJiAweDIpKSApCisgICAgeworICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOb24t d3JpdGVhYmxlIHNlZ21lbnQgcHJvdmlkZWQgZm9yIFNTXG4iKTsKKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgfQorCisgICAgaWYgKCByZWctPmF0dHIuZmllbGRzLnMgJiYgc2VnICE9IHg4 Nl9zZWdfc3MgJiYgc2VnICE9IHg4Nl9zZWdfY3MgJiYKKyAgICAgICAgIChyZWctPmF0dHIuZmll bGRzLnR5cGUgJiAweDgpICYmICEocmVnLT5hdHRyLmZpZWxkcy50eXBlICYgMHgyKSApCisgICAg eworICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJOb24tcmVhZGFibGUgc2VnbWVudCBwcm92 aWRlZCBmb3IgRFMgb3IgRVNcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisK KyAgICByZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIGJ5IFZDUFVPUF9pbml0aWFsaXNlIGZvciBI Vk0gZ3Vlc3RzLiAqLworaW50IGFyY2hfc2V0X2luZm9faHZtX2d1ZXN0KHN0cnVjdCB2Y3B1ICp2 LCBjb25zdCB2Y3B1X2h2bV9jb250ZXh0X3QgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgY3B1X3VzZXJf cmVncyAqdXJlZ3MgPSAmdi0+YXJjaC51c2VyX3JlZ3M7CisgICAgc3RydWN0IHNlZ21lbnRfcmVn aXN0ZXIgY3MsIGRzLCBzcywgZXMsIHRyOworICAgIGNvbnN0IGNoYXIgKmVycnN0cjsKKyAgICBp bnQgcmM7CisKKyAgICBpZiAoIGN0eC0+cGFkICE9IDAgKQorICAgICAgICByZXR1cm4gLUVJTlZB TDsKKworICAgIHN3aXRjaCAoIGN0eC0+bW9kZSApCisgICAgeworICAgIGRlZmF1bHQ6CisgICAg ICAgIHJldHVybiAtRUlOVkFMOworCisgICAgY2FzZSBWQ1BVX0hWTV9NT0RFXzMyQjoKKyAgICB7 CisgICAgICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfMzIgKnJlZ3MgPSAmY3R4LT5jcHVf cmVncy54ODZfMzI7CisgICAgICAgIHVpbnQzMl90IGxpbWl0OworCisgICAgICAgIGlmICggY3R4 LT5jcHVfcmVncy54ODZfMzIucGFkMSAhPSAwIHx8CisgICAgICAgICAgICAgY3R4LT5jcHVfcmVn cy54ODZfMzIucGFkMlswXSAhPSAwIHx8CisgICAgICAgICAgICAgY3R4LT5jcHVfcmVncy54ODZf MzIucGFkMlsxXSAhPSAwIHx8CisgICAgICAgICAgICAgY3R4LT5jcHVfcmVncy54ODZfMzIucGFk MlsyXSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisjZGVmaW5lIFNFRyhz LCByKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIHMgPSAoc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIpeyAuYmFzZSA9IChyKS0+ cyAjIyBfYmFzZSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLmxpbWl0ID0gKHIpLT5zICMjIF9saW1pdCwgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyLmJ5dGVzID0gKHIpLT5zICMjIF9h ciB9OyAgICAgICAgICAgXAorICAgIC8qIFNldCBhY2Nlc3NlZCAvIGJ1c3kgYml0IGZvciBwcmVz ZW50IHNlZ21lbnRzLiAqLyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIHMuYXR0ci5m aWVsZHMucCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIHMuYXR0ci5maWVsZHMudHlwZSB8PSAoeDg2X3NlZ18jI3MgIT0geDg2X3Nl Z190ciA/IDEgOiAyKTsgICAgICAgICAgXAorICAgIGNoZWNrX3NlZ21lbnQoJnMsIHg4Nl9zZWdf ICMjIHMpOyB9KQorCisgICAgICAgIHJjID0gU0VHKGNzLCByZWdzKTsKKyAgICAgICAgcmMgfD0g U0VHKGRzLCByZWdzKTsKKyAgICAgICAgcmMgfD0gU0VHKHNzLCByZWdzKTsKKyAgICAgICAgcmMg fD0gU0VHKGVzLCByZWdzKTsKKyAgICAgICAgcmMgfD0gU0VHKHRyLCByZWdzKTsKKyN1bmRlZiBT RUcKKworICAgICAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisg ICAgICAgIC8qIEJhc2ljIHNhbml0eSBjaGVja3MuICovCisgICAgICAgIGxpbWl0ID0gY3MubGlt aXQ7CisgICAgICAgIGlmICggY3MuYXR0ci5maWVsZHMuZyApCisgICAgICAgICAgICBsaW1pdCA9 IChsaW1pdCA8PCAxMikgfCAweGZmZjsKKyAgICAgICAgaWYgKCByZWdzLT5laXAgPiBsaW1pdCAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVJUCAoJSMwOHgp IG91dHNpZGUgQ1MgbGltaXQgKCUjMDh4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcmVncy0+ ZWlwLCBsaW1pdCk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisg ICAgICAgIGlmICggc3MuYXR0ci5maWVsZHMuZHBsICE9IGNzLmF0dHIuZmllbGRzLmRwbCApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIlNTLkRQTCAoJXUpIGlz IGRpZmZlcmVudCB0aGFuIENTLkRQTCAoJXUpXG4iLAorICAgICAgICAgICAgICAgICAgICBzcy5h dHRyLmZpZWxkcy5kcGwsIGNzLmF0dHIuZmllbGRzLmRwbCk7CisgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZHMuYXR0ci5maWVsZHMucCAmJiBk cy5hdHRyLmZpZWxkcy5kcGwgPiBjcy5hdHRyLmZpZWxkcy5kcGwgKQorICAgICAgICB7CisgICAg ICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJEUy5EUEwgKCV1KSBpcyBncmVhdGVyIHRoYW4g Q1MuRFBMICgldSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGRzLmF0dHIuZmllbGRzLmRwbCwg Y3MuYXR0ci5maWVsZHMuZHBsKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAg ICB9CisKKyAgICAgICAgaWYgKCBlcy5hdHRyLmZpZWxkcy5wICYmIGVzLmF0dHIuZmllbGRzLmRw bCA+IGNzLmF0dHIuZmllbGRzLmRwbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGso WEVOTE9HX0VSUiwgIkVTLkRQTCAoJXUpIGlzIGdyZWF0ZXIgdGhhbiBDUy5EUEwgKCV1KVxuIiwK KyAgICAgICAgICAgICAgICAgICAgZXMuYXR0ci5maWVsZHMuZHBsLCBjcy5hdHRyLmZpZWxkcy5k cGwpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICBp ZiAoIChyZWdzLT5lZmVyICYgRUZFUl9MTUEpICYmICEocmVncy0+ZWZlciAmIEVGRVJfTE1FKSAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIkVGRVIuTE1BIHNl dCB3aXRob3V0IEVGRVIuTE1FICglIzAxNmx4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcmVn cy0+ZWZlcik7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAg ICAgIHVyZWdzLT5yYXggICAgPSByZWdzLT5lYXg7CisgICAgICAgIHVyZWdzLT5yY3ggICAgPSBy ZWdzLT5lY3g7CisgICAgICAgIHVyZWdzLT5yZHggICAgPSByZWdzLT5lZHg7CisgICAgICAgIHVy ZWdzLT5yYnggICAgPSByZWdzLT5lYng7CisgICAgICAgIHVyZWdzLT5yc3AgICAgPSByZWdzLT5l c3A7CisgICAgICAgIHVyZWdzLT5yYnAgICAgPSByZWdzLT5lYnA7CisgICAgICAgIHVyZWdzLT5y c2kgICAgPSByZWdzLT5lc2k7CisgICAgICAgIHVyZWdzLT5yZGkgICAgPSByZWdzLT5lZGk7Cisg ICAgICAgIHVyZWdzLT5yaXAgICAgPSByZWdzLT5laXA7CisgICAgICAgIHVyZWdzLT5yZmxhZ3Mg PSByZWdzLT5lZmxhZ3M7CisKKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclswXSA9 IHJlZ3MtPmNyMDsKKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclszXSA9IHJlZ3Mt PmNyMzsKKyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSA9IHJlZ3MtPmNyNDsK KyAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9lZmVyICA9IHJlZ3MtPmVmZXI7CisgICAg fQorICAgIGJyZWFrOworCisgICAgY2FzZSBWQ1BVX0hWTV9NT0RFXzY0QjoKKyAgICB7CisgICAg ICAgIGNvbnN0IHN0cnVjdCB2Y3B1X2h2bV94ODZfNjQgKnJlZ3MgPSAmY3R4LT5jcHVfcmVncy54 ODZfNjQ7CisKKyAgICAgICAgLyogQmFzaWMgc2FuaXR5IGNoZWNrcy4gKi8KKyAgICAgICAgaWYg KCAhaXNfY2Fub25pY2FsX2FkZHJlc3MocmVncy0+cmlwKSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGdwcmludGsoWEVOTE9HX0VSUiwgIlJJUCBjb250YWlucyBhIG5vbi1jYW5vbmljYWwgYWRk cmVzcyAoJSNseClcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlZ3MtPnJpcCk7CisgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIShyZWdzLT5j cjAgJiBYODZfQ1IwX1BHKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9H X0VSUiwgIkNSMCBkb2Vzbid0IGhhdmUgcGFnaW5nIGVuYWJsZWQgKCUjMDE2bHgpXG4iLAorICAg ICAgICAgICAgICAgICAgICByZWdzLT5jcjApOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 CisgICAgICAgIH0KKworICAgICAgICBpZiAoICEocmVncy0+Y3I0ICYgWDg2X0NSNF9QQUUpICkK KyAgICAgICAgeworICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiQ1I0IGRvZXNuJ3Qg aGF2ZSBQQUUgZW5hYmxlZCAoJSMwMTZseClcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlZ3Mt PmNyNCk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAg IGlmICggIShyZWdzLT5lZmVyICYgRUZFUl9MTUUpICkKKyAgICAgICAgeworICAgICAgICAgICAg Z3ByaW50ayhYRU5MT0dfRVJSLCAiRUZFUiBkb2Vzbid0IGhhdmUgTE1FIGVuYWJsZWQgKCUjMDE2 bHgpXG4iLAorICAgICAgICAgICAgICAgICAgICByZWdzLT5lZmVyKTsKKyAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAgdXJlZ3MtPnJheCAgICA9IHJlZ3Mt PnJheDsKKyAgICAgICAgdXJlZ3MtPnJjeCAgICA9IHJlZ3MtPnJjeDsKKyAgICAgICAgdXJlZ3Mt PnJkeCAgICA9IHJlZ3MtPnJkeDsKKyAgICAgICAgdXJlZ3MtPnJieCAgICA9IHJlZ3MtPnJieDsK KyAgICAgICAgdXJlZ3MtPnJzcCAgICA9IHJlZ3MtPnJzcDsKKyAgICAgICAgdXJlZ3MtPnJicCAg ICA9IHJlZ3MtPnJicDsKKyAgICAgICAgdXJlZ3MtPnJzaSAgICA9IHJlZ3MtPnJzaTsKKyAgICAg ICAgdXJlZ3MtPnJkaSAgICA9IHJlZ3MtPnJkaTsKKyAgICAgICAgdXJlZ3MtPnJpcCAgICA9IHJl Z3MtPnJpcDsKKyAgICAgICAgdXJlZ3MtPnJmbGFncyA9IHJlZ3MtPnJmbGFnczsKKworICAgICAg ICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdID0gcmVncy0+Y3IwOworICAgICAgICB2LT5h cmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID0gcmVncy0+Y3IzOworICAgICAgICB2LT5hcmNoLmh2 bV92Y3B1Lmd1ZXN0X2NyWzRdID0gcmVncy0+Y3I0OworICAgICAgICB2LT5hcmNoLmh2bV92Y3B1 Lmd1ZXN0X2VmZXIgID0gcmVncy0+ZWZlcjsKKworI2RlZmluZSBTRUcobCwgYSkgKHN0cnVjdCBz ZWdtZW50X3JlZ2lzdGVyKXsgLmxpbWl0ID0gKGwpLCAuYXR0ci5ieXRlcyA9IChhKSB9CisgICAg ICAgIGNzID0gU0VHKH4wdSwgMHhhOWIpOyAvKiA2NGJpdCBjb2RlIHNlZ21lbnQuICovCisgICAg ICAgIGRzID0gc3MgPSBlcyA9IFNFRyh+MHUsIDB4YzkzKTsKKyAgICAgICAgdHIgPSBTRUcoMHg2 NywgMHg4Yik7IC8qIDY0Yml0IFRTUyAoYnVzeSkuICovCisjdW5kZWYgU0VHCisgICAgfQorICAg IGJyZWFrOworCisgICAgfQorCisgICAgaWYgKCB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2VmZXIg JiBFRkVSX0xNRSApCisgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciB8PSBFRkVS X0xNQTsKKworICAgIGlmICggdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSAmIH5odm1fY3I0 X2d1ZXN0X3ZhbGlkX2JpdHModiwgMCkgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiQmFkIENSNCB2YWx1ZTogJSMwMTZseFxuIiwKKyAgICAgICAgICAgICAgICB2LT5hcmNo Lmh2bV92Y3B1Lmd1ZXN0X2NyWzRdKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQor CisgICAgZXJyc3RyID0gaHZtX2VmZXJfdmFsaWQodiwgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9l ZmVyLCAtMSk7CisgICAgaWYgKCBlcnJzdHIgKQorICAgIHsKKyAgICAgICAgZ3ByaW50ayhYRU5M T0dfRVJSLCAiQmFkIEVGRVIgdmFsdWUgKCUjMDE2bHgpOiAlc1xuIiwKKyAgICAgICAgICAgICAg IHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciwgZXJyc3RyKTsKKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgfQorCisgICAgaHZtX3VwZGF0ZV9ndWVzdF9jcih2LCAwKTsKKyAgICBodm1f dXBkYXRlX2d1ZXN0X2NyKHYsIDMpOworICAgIGh2bV91cGRhdGVfZ3Vlc3RfY3IodiwgNCk7Cisg ICAgaHZtX3VwZGF0ZV9ndWVzdF9lZmVyKHYpOworCisgICAgaWYgKCBodm1fcGFnaW5nX2VuYWJs ZWQodikgJiYgIXBhZ2luZ19tb2RlX2hhcCh2LT5kb21haW4pICkKKyAgICB7CisgICAgICAgIC8q IFNoYWRvdy1tb2RlIENSMyBjaGFuZ2UuIENoZWNrIFBEQlIgYW5kIHVwZGF0ZSByZWZjb3VudHMu ICovCisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbih2 LT5kb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5hcmNoLmh2bV92 Y3B1Lmd1ZXN0X2NyWzNdID4+IFBBR0VfU0hJRlQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCBQMk1fQUxMT0MpOworICAgICAgICBpZiAoICFwYWdlICkKKyAgICAgICAg eworICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAiSW52YWxpZCBDUjM6ICUjbHhcbiIs CisgICAgICAgICAgICAgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10pOworICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICB2LT5hcmNoLmd1 ZXN0X3RhYmxlID0gcGFnZXRhYmxlX2Zyb21fcGFnZShwYWdlKTsKKyAgICB9CisKKyAgICBodm1f c2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19jcywgJmNzKTsKKyAgICBodm1fc2V0X3Nl Z21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19kcywgJmRzKTsKKyAgICBodm1fc2V0X3NlZ21lbnRf cmVnaXN0ZXIodiwgeDg2X3NlZ19zcywgJnNzKTsKKyAgICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0 ZXIodiwgeDg2X3NlZ19lcywgJmVzKTsKKyAgICBodm1fc2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwg eDg2X3NlZ190ciwgJnRyKTsKKworICAgIC8qIFN5bmMgQVAncyBUU0Mgd2l0aCBCU1Ancy4gKi8K KyAgICB2LT5hcmNoLmh2bV92Y3B1LmNhY2hlX3RzY19vZmZzZXQgPQorICAgICAgICB2LT5kb21h aW4tPnZjcHVbMF0tPmFyY2guaHZtX3ZjcHUuY2FjaGVfdHNjX29mZnNldDsKKyAgICBodm1fZnVu Y3Muc2V0X3RzY19vZmZzZXQodiwgdi0+YXJjaC5odm1fdmNwdS5jYWNoZV90c2Nfb2Zmc2V0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5kb21haW4tPmFyY2guaHZtX2RvbWFpbi5z eW5jX3RzYyk7CisKKyAgICBwYWdpbmdfdXBkYXRlX3BhZ2luZ19tb2Rlcyh2KTsKKworICAgIHYt PmlzX2luaXRpYWxpc2VkID0gMTsKKyAgICBzZXRfYml0KF9WUEZfZG93biwgJnYtPnBhdXNlX2Zs YWdzKTsKKworICAgIHJldHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICog bW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAq IHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0g CjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=