From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: [RFC PATCH 03/31] pmstat: move pmstat.c file to the xen/drivers/pm/stat.c location Date: Thu, 9 Nov 2017 19:09:53 +0200 Message-ID: <1510247421-24094-4-git-send-email-olekstysh@gmail.com> References: <1510247421-24094-1-git-send-email-olekstysh@gmail.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 1eCqLd-0003xL-Af for xen-devel@lists.xenproject.org; Thu, 09 Nov 2017 17:10:37 +0000 Received: by mail-lf0-f67.google.com with SMTP id r129so8037291lff.8 for ; Thu, 09 Nov 2017 09:10:35 -0800 (PST) In-Reply-To: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Andrew Cooper , Oleksandr Dmytryshyn , Julien Grall , Oleksandr Tyshchenko , Jan Beulich List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIERteXRyeXNoeW4gPG9sZWtzYW5kci5kbXl0cnlzaHluQGdsb2JhbGxv Z2ljLmNvbT4KCkNwdWZyZXEgZHJpdmVyIHNob3VsZCBiZSBtb3JlIGdlbmVyYWxpemFibGUgKG5v dCBBQ1BJLXNwZWNpZmljKS4KVGh1cyB0aGlzIGZpbGUgc2hvdWxkIGJlIHBsYWNlZCB0byBtb3Jl IGNvbnZlbmllbnQgbG9jYXRpb24uCgpUaGlzIGlzIGEgcmViYXNlZCB2ZXJzaW9uIG9mIHRoZSBv cmlnaW5hbCBwYXRjaDoKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRl dmVsLzIwMTQtMTEvbXNnMDA5MzUuaHRtbAoKU2lnbmVkLW9mZi1ieTogT2xla3NhbmRyIERteXRy eXNoeW4gPG9sZWtzYW5kci5kbXl0cnlzaHluQGdsb2JhbGxvZ2ljLmNvbT4KU2lnbmVkLW9mZi1i eTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29tPgpD QzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDQzogQW5kcmV3IENvb3BlciA8YW5k cmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQ0M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxp bmlAa2VybmVsLm9yZz4KQ0M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGxpbmFyby5vcmc+ Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvS2Nv bmZpZyAgICAgIHwgICAxICsKIHhlbi9jb21tb24vc3lzY3RsLmMgICAgICAgfCAgIDIgKy0KIHhl bi9kcml2ZXJzL0tjb25maWcgICAgICAgfCAgIDIgKwogeGVuL2RyaXZlcnMvTWFrZWZpbGUgICAg ICB8ICAgMSArCiB4ZW4vZHJpdmVycy9hY3BpL01ha2VmaWxlIHwgICAxIC0KIHhlbi9kcml2ZXJz L2FjcGkvcG1zdGF0LmMgfCA1MjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogeGVuL2RyaXZlcnMvcG0vS2NvbmZpZyAgICB8ICAgMyArCiB4ZW4vZHJpdmVy cy9wbS9NYWtlZmlsZSAgIHwgICAxICsKIHhlbi9kcml2ZXJzL3BtL3N0YXQuYyAgICAgfCA1MjYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMTAgZmlsZXMg Y2hhbmdlZCwgNTM2IGluc2VydGlvbnMoKyksIDUyOCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2Rl IDEwMDY0NCB4ZW4vZHJpdmVycy9hY3BpL3Btc3RhdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVu L2RyaXZlcnMvcG0vS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3BtL01h a2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2RyaXZlcnMvcG0vc3RhdC5jCgpkaWZmIC0t Z2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA5Nzk0YTgxLi44N2FkZTZmIDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjk0LDYgKzI5NCw3 IEBAIEY6CXhlbi9hcmNoL3g4Ni9hY3BpLwogWDoJeGVuL2FyY2gveDg2L2FjcGkvYm9vdC5jCiBY Ogl4ZW4vYXJjaC94ODYvYWNwaS9saWIuYwogRjoJeGVuL2RyaXZlcnMvY3B1ZnJlcS8KK0Y6CXhl bi9kcml2ZXJzL3BtLwogRjoJeGVuL2luY2x1ZGUveGVuL2NwdWZyZXEuaAogRjoJeGVuL2luY2x1 ZGUveGVuL3Byb2Nlc3Nvcl9wZXJmLmgKIApkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L0tjb25m aWcgYi94ZW4vYXJjaC94ODYvS2NvbmZpZwppbmRleCAzMGMyNzY5Li44NmM4ZWNhIDEwMDY0NAot LS0gYS94ZW4vYXJjaC94ODYvS2NvbmZpZworKysgYi94ZW4vYXJjaC94ODYvS2NvbmZpZwpAQCAt MjMsNiArMjMsNyBAQCBjb25maWcgWDg2CiAJc2VsZWN0IEhBU19QRFgKIAlzZWxlY3QgTlVNQQog CXNlbGVjdCBWR0EKKwlzZWxlY3QgSEFTX1BNCiAKIGNvbmZpZyBBUkNIX0RFRkNPTkZJRwogCXN0 cmluZwpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9zeXNjdGwuYyBiL3hlbi9jb21tb24vc3lzY3Rs LmMKaW5kZXggYTY4ODJkMS4uYWM5NjM0NyAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9zeXNjdGwu YworKysgYi94ZW4vY29tbW9uL3N5c2N0bC5jCkBAIC0xNzEsNyArMTcxLDcgQEAgbG9uZyBkb19z eXNjdGwoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh4ZW5fc3lzY3RsX3QpIHVfc3lzY3RsKQogICAg ICAgICBvcC0+dS5hdmFpbGhlYXAuYXZhaWxfYnl0ZXMgPDw9IFBBR0VfU0hJRlQ7CiAgICAgICAg IGJyZWFrOwogCi0jaWYgZGVmaW5lZCAoQ09ORklHX0FDUEkpICYmIGRlZmluZWQgKENPTkZJR19I QVNfQ1BVRlJFUSkKKyNpZiBkZWZpbmVkIChDT05GSUdfSEFTX1BNKSAmJiBkZWZpbmVkIChDT05G SUdfSEFTX0NQVUZSRVEpCiAgICAgY2FzZSBYRU5fU1lTQ1RMX2dldF9wbXN0YXQ6CiAgICAgICAg IHJldCA9IGRvX2dldF9wbV9pbmZvKCZvcC0+dS5nZXRfcG1zdGF0KTsKICAgICAgICAgYnJlYWs7 CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9LY29uZmlnIGIveGVuL2RyaXZlcnMvS2NvbmZpZwpp bmRleCBiYzNhNTRmLi5kZGFlYzExIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9LY29uZmlnCisr KyBiL3hlbi9kcml2ZXJzL0tjb25maWcKQEAgLTEyLDQgKzEyLDYgQEAgc291cmNlICJkcml2ZXJz L3BjaS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vS2NvbmZpZyIKIAorc291cmNl ICJkcml2ZXJzL3BtL0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJz L01ha2VmaWxlIGIveGVuL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMTkzOTE4MC4uZGQwYjQ5NiAx MDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIveGVuL2RyaXZlcnMvTWFrZWZp bGUKQEAgLTQsMyArNCw0IEBAIHN1YmRpci0kKENPTkZJR19IQVNfUENJKSArPSBwY2kKIHN1YmRp ci0kKENPTkZJR19IQVNfUEFTU1RIUk9VR0gpICs9IHBhc3N0aHJvdWdoCiBzdWJkaXItJChDT05G SUdfQUNQSSkgKz0gYWNwaQogc3ViZGlyLSQoQ09ORklHX1ZJREVPKSArPSB2aWRlbworc3ViZGly LSQoQ09ORklHX0hBU19QTSkgKz0gcG0KZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL2FjcGkvTWFr ZWZpbGUgYi94ZW4vZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IDQ0NGIxMWQuLjZmNjQ3MGEg MTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKKysrIGIveGVuL2RyaXZlcnMv YWNwaS9NYWtlZmlsZQpAQCAtNSw3ICs1LDYgQEAgc3ViZGlyLSQoQ09ORklHX1g4NikgKz0gYXBl aQogb2JqLWJpbi15ICs9IHRhYmxlcy5pbml0Lm8KIG9iai0kKENPTkZJR19OVU1BKSArPSBudW1h Lm8KIG9iai15ICs9IG9zbC5vCi1vYmotJChDT05GSUdfSEFTX0NQVUZSRVEpICs9IHBtc3RhdC5v CiAKIG9iai0kKENPTkZJR19YODYpICs9IGh3cmVncy5vCiBvYmotJChDT05GSUdfWDg2KSArPSBy ZWJvb3QubwpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvYWNwaS9wbXN0YXQuYyBiL3hlbi9kcml2 ZXJzL2FjcGkvcG1zdGF0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYmRlMWMu LjAwMDAwMDAKLS0tIGEveGVuL2RyaXZlcnMvYWNwaS9wbXN0YXQuYworKysgL2Rldi9udWxsCkBA IC0xLDUyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgIHBtc3RhdC5jIC0gUG93 ZXIgTWFuYWdlbWVudCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gKFB4L0N4L1R4LCBldGMuKQotIwot IyAgQ29weXJpZ2h0IChjKSAyMDA4LCBMaXUgSmluc29uZyA8amluc29uZy5saXVAaW50ZWwuY29t PgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKLSMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCi0jIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQg Ci0jIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F UkNIQU5UQUJJTElUWSBvciAKLSMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciAKLSMgbW9yZSBkZXRhaWxzLgot IwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0jIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotIwotIyBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSMg ZmlsZSBjYWxsZWQgTElDRU5TRS4KLSMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVk ZSA8eGVuL2xpYi5oPgotI2luY2x1ZGUgPHhlbi9lcnJuby5oPgotI2luY2x1ZGUgPHhlbi9zY2hl ZC5oPgotI2luY2x1ZGUgPHhlbi9ldmVudC5oPgotI2luY2x1ZGUgPHhlbi9pcnEuaD4KLSNpbmNs dWRlIDx4ZW4vaW9jYXAuaD4KLSNpbmNsdWRlIDx4ZW4vY29tcGF0Lmg+Ci0jaW5jbHVkZSA8eGVu L2d1ZXN0X2FjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Ci0jaW5jbHVkZSA8cHVi bGljL3hlbi5oPgotI2luY2x1ZGUgPHhlbi9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nl c3Nvci5oPgotI2luY2x1ZGUgPHhlbi9wZXJjcHUuaD4KLSNpbmNsdWRlIDx4ZW4vZG9tYWluLmg+ Ci0jaW5jbHVkZSA8eGVuL2FjcGkuaD4KLQotI2luY2x1ZGUgPHB1YmxpYy9zeXNjdGwuaD4KLSNp bmNsdWRlIDx4ZW4vY3B1ZnJlcS5oPgotI2luY2x1ZGUgPHhlbi9wbXN0YXQuaD4KLQotREVGSU5F X1BFUl9DUFVfUkVBRF9NT1NUTFkoc3RydWN0IHBtX3B4ICosIGNwdWZyZXFfc3RhdGlzdGljX2Rh dGEpOwotCi0vKgotICogR2V0IFBNIHN0YXRpc3RpYyBpbmZvCi0gKi8KLWludCBkb19nZXRfcG1f aW5mbyhzdHJ1Y3QgeGVuX3N5c2N0bF9nZXRfcG1zdGF0ICpvcCkKLXsKLSAgICBpbnQgcmV0ID0g MDsKLSAgICBjb25zdCBzdHJ1Y3QgcHJvY2Vzc29yX3BtaW5mbyAqcG1wdDsKLQotICAgIGlmICgg IW9wIHx8IChvcC0+Y3B1aWQgPj0gbnJfY3B1X2lkcykgfHwgIWNwdV9vbmxpbmUob3AtPmNwdWlk KSApCi0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIHBtcHQgPSBwcm9jZXNzb3JfcG1pbmZv W29wLT5jcHVpZF07Ci0KLSAgICBzd2l0Y2ggKCBvcC0+dHlwZSAmIFBNU1RBVF9DQVRFR09SWV9N QVNLICkKLSAgICB7Ci0gICAgY2FzZSBQTVNUQVRfQ1g6Ci0gICAgICAgIGlmICggISh4ZW5fcHJv Y2Vzc29yX3BtYml0cyAmIFhFTl9QUk9DRVNTT1JfUE1fQ1gpICkKLSAgICAgICAgICAgIHJldHVy biAtRU5PREVWOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBNU1RBVF9QWDoKLSAgICAgICAg aWYgKCAhKHhlbl9wcm9jZXNzb3JfcG1iaXRzICYgWEVOX1BST0NFU1NPUl9QTV9QWCkgKQotICAg ICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIGlmICggIWNwdWZyZXFfZHJpdmVyICkK LSAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICBpZiAoICFwbXB0IHx8ICEocG1w dC0+cGVyZi5pbml0ICYgWEVOX1BYX0lOSVQpICkKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFM OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLUVOT0RFVjsK LSAgICB9Ci0KLSAgICBzd2l0Y2ggKCBvcC0+dHlwZSApCi0gICAgewotICAgIGNhc2UgUE1TVEFU X2dldF9tYXhfcHg6Ci0gICAgewotICAgICAgICBvcC0+dS5nZXRweC50b3RhbCA9IHBtcHQtPnBl cmYuc3RhdGVfY291bnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUE1TVEFU X2dldF9weHN0YXQ6Ci0gICAgewotICAgICAgICB1aW50MzJfdCBjdDsKLSAgICAgICAgc3RydWN0 IHBtX3B4ICpweHB0OwotICAgICAgICBzcGlubG9ja190ICpjcHVmcmVxX3N0YXRpc3RpY19sb2Nr ID0gCi0gICAgICAgICAgICAgICAgICAgJnBlcl9jcHUoY3B1ZnJlcV9zdGF0aXN0aWNfbG9jaywg b3AtPmNwdWlkKTsKLQotICAgICAgICBzcGluX2xvY2soY3B1ZnJlcV9zdGF0aXN0aWNfbG9jayk7 Ci0KLSAgICAgICAgcHhwdCA9IHBlcl9jcHUoY3B1ZnJlcV9zdGF0aXN0aWNfZGF0YSwgb3AtPmNw dWlkKTsKLSAgICAgICAgaWYgKCAhcHhwdCB8fCAhcHhwdC0+dS5wdCB8fCAhcHhwdC0+dS50cmFu c19wdCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNwaW5fdW5sb2NrKGNwdWZyZXFfc3RhdGlz dGljX2xvY2spOwotICAgICAgICAgICAgcmV0dXJuIC1FTk9EQVRBOwotICAgICAgICB9Ci0KLSAg ICAgICAgcHhwdC0+dS51c2FibGUgPSBwbXB0LT5wZXJmLnN0YXRlX2NvdW50IC0gcG1wdC0+cGVy Zi5wbGF0Zm9ybV9saW1pdDsKLQotICAgICAgICBjcHVmcmVxX3Jlc2lkZW5jeV91cGRhdGUob3At PmNwdWlkLCBweHB0LT51LmN1cik7Ci0KLSAgICAgICAgY3QgPSBwbXB0LT5wZXJmLnN0YXRlX2Nv dW50OwotICAgICAgICBpZiAoIGNvcHlfdG9fZ3Vlc3Qob3AtPnUuZ2V0cHgudHJhbnNfcHQsIHB4 cHQtPnUudHJhbnNfcHQsIGN0KmN0KSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNwaW5fdW5s b2NrKGNwdWZyZXFfc3RhdGlzdGljX2xvY2spOwotICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBjb3B5X3RvX2d1 ZXN0KG9wLT51LmdldHB4LnB0LCBweHB0LT51LnB0LCBjdCkgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBzcGluX3VubG9jayhjcHVmcmVxX3N0YXRpc3RpY19sb2NrKTsKLSAgICAgICAgICAgIHJl dCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIG9w LT51LmdldHB4LnRvdGFsID0gcHhwdC0+dS50b3RhbDsKLSAgICAgICAgb3AtPnUuZ2V0cHgudXNh YmxlID0gcHhwdC0+dS51c2FibGU7Ci0gICAgICAgIG9wLT51LmdldHB4Lmxhc3QgPSBweHB0LT51 Lmxhc3Q7Ci0gICAgICAgIG9wLT51LmdldHB4LmN1ciA9IHB4cHQtPnUuY3VyOwotCi0gICAgICAg IHNwaW5fdW5sb2NrKGNwdWZyZXFfc3RhdGlzdGljX2xvY2spOwotCi0gICAgICAgIGJyZWFrOwot ICAgIH0KLQotICAgIGNhc2UgUE1TVEFUX3Jlc2V0X3B4c3RhdDoKLSAgICB7Ci0gICAgICAgIGNw dWZyZXFfc3RhdGlzdGljX3Jlc2V0KG9wLT5jcHVpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K LQotICAgIGNhc2UgUE1TVEFUX2dldF9tYXhfY3g6Ci0gICAgewotICAgICAgICBvcC0+dS5nZXRj eC5uciA9IHBtc3RhdF9nZXRfY3hfbnIob3AtPmNwdWlkKTsKLSAgICAgICAgcmV0ID0gMDsKLSAg ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBQTVNUQVRfZ2V0X2N4c3RhdDoKLSAgICB7 Ci0gICAgICAgIHJldCA9IHBtc3RhdF9nZXRfY3hfc3RhdChvcC0+Y3B1aWQsICZvcC0+dS5nZXRj eCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUE1TVEFUX3Jlc2V0X2N4c3Rh dDoKLSAgICB7Ci0gICAgICAgIHJldCA9IHBtc3RhdF9yZXNldF9jeF9zdGF0KG9wLT5jcHVpZCk7 Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50aygi bm90IGRlZmluZWQgc3ViLWh5cGVyY2FsbCBAIGRvX2dldF9wbV9pbmZvXG4iKTsKLSAgICAgICAg cmV0ID0gLUVOT1NZUzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsK LX0KLQotLyoKLSAqIDEuIEdldCBQTSBwYXJhbWV0ZXIKLSAqIDIuIFByb3ZpZGUgdXNlciBQTSBj b250cm9sCi0gKi8KLXN0YXRpYyBpbnQgcmVhZF9zY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMo Y2hhciAqc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLSAgICB1bnNpZ25l ZCBpbnQgaSA9IDA7Ci0gICAgc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKnQ7Ci0KLSAgICBpZiAo ICFzY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsK LQotICAgIGxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292 ZXJub3JfbGlzdCkKLSAgICB7Ci0gICAgICAgIGkgKz0gc2NucHJpbnRmKCZzY2FsaW5nX2F2YWls YWJsZV9nb3Zlcm5vcnNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgIENQVUZSRVFfTkFNRV9M RU4sICIlcyAiLCB0LT5uYW1lKTsKLSAgICAgICAgaWYgKCBpID4gc2l6ZSApCi0gICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3Jz W2ktMV0gPSAnXDAnOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2NwdWZy ZXFfcGFyYShzdHJ1Y3QgeGVuX3N5c2N0bF9wbV9vcCAqb3ApCi17Ci0gICAgdWludDMyX3QgcmV0 ID0gMDsKLSAgICBjb25zdCBzdHJ1Y3QgcHJvY2Vzc29yX3BtaW5mbyAqcG1wdDsKLSAgICBzdHJ1 Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKLSAgICB1aW50MzJfdCBnb3ZfbnVtID0gMDsKLSAg ICB1aW50MzJfdCAqYWZmZWN0ZWRfY3B1czsKLSAgICB1aW50MzJfdCAqc2NhbGluZ19hdmFpbGFi bGVfZnJlcXVlbmNpZXM7Ci0gICAgY2hhciAgICAgKnNjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9y czsKLSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7Ci0gICAgdWludDMyX3QgY3B1LCBpLCBqID0g MDsKLQotICAgIHBtcHQgPSBwcm9jZXNzb3JfcG1pbmZvW29wLT5jcHVpZF07Ci0gICAgcG9saWN5 ID0gcGVyX2NwdShjcHVmcmVxX2NwdV9wb2xpY3ksIG9wLT5jcHVpZCk7Ci0KLSAgICBpZiAoICFw bXB0IHx8ICFwbXB0LT5wZXJmLnN0YXRlcyB8fAotICAgICAgICAgIXBvbGljeSB8fCAhcG9saWN5 LT5nb3Zlcm5vciApCi0gICAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICAgbGlzdF9mb3JfZWFj aChwb3MsICZjcHVmcmVxX2dvdmVybm9yX2xpc3QpCi0gICAgICAgIGdvdl9udW0rKzsKLQotICAg IGlmICggKG9wLT51LmdldF9wYXJhLmNwdV9udW0gICE9IGNwdW1hc2tfd2VpZ2h0KHBvbGljeS0+ Y3B1cykpIHx8Ci0gICAgICAgICAob3AtPnUuZ2V0X3BhcmEuZnJlcV9udW0gIT0gcG1wdC0+cGVy Zi5zdGF0ZV9jb3VudCkgICAgfHwKLSAgICAgICAgIChvcC0+dS5nZXRfcGFyYS5nb3ZfbnVtICAh PSBnb3ZfbnVtKSApCi0gICAgewotICAgICAgICBvcC0+dS5nZXRfcGFyYS5jcHVfbnVtID0gIGNw dW1hc2tfd2VpZ2h0KHBvbGljeS0+Y3B1cyk7Ci0gICAgICAgIG9wLT51LmdldF9wYXJhLmZyZXFf bnVtID0gcG1wdC0+cGVyZi5zdGF0ZV9jb3VudDsKLSAgICAgICAgb3AtPnUuZ2V0X3BhcmEuZ292 X251bSAgPSBnb3ZfbnVtOwotICAgICAgICByZXR1cm4gLUVBR0FJTjsKLSAgICB9Ci0KLSAgICBp ZiAoICEoYWZmZWN0ZWRfY3B1cyA9IHh6YWxsb2NfYXJyYXkodWludDMyX3QsIG9wLT51LmdldF9w YXJhLmNwdV9udW0pKSApCi0gICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgIGZvcl9lYWNoX2Nw dShjcHUsIHBvbGljeS0+Y3B1cykKLSAgICAgICAgYWZmZWN0ZWRfY3B1c1tqKytdID0gY3B1Owot ICAgIHJldCA9IGNvcHlfdG9fZ3Vlc3Qob3AtPnUuZ2V0X3BhcmEuYWZmZWN0ZWRfY3B1cywKLSAg ICAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRfY3B1cywgb3AtPnUuZ2V0X3BhcmEuY3B1X251 bSk7Ci0gICAgeGZyZWUoYWZmZWN0ZWRfY3B1cyk7Ci0gICAgaWYgKCByZXQgKQotICAgICAgICBy ZXR1cm4gcmV0OwotCi0gICAgaWYgKCAhKHNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzID0K LSAgICAgICAgICAgeHphbGxvY19hcnJheSh1aW50MzJfdCwgb3AtPnUuZ2V0X3BhcmEuZnJlcV9u dW0pKSApCi0gICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgIGZvciAoIGkgPSAwOyBpIDwgb3At PnUuZ2V0X3BhcmEuZnJlcV9udW07IGkrKyApCi0gICAgICAgIHNjYWxpbmdfYXZhaWxhYmxlX2Zy ZXF1ZW5jaWVzW2ldID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBtcHQtPnBlcmYuc3RhdGVz W2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKLSAgICByZXQgPSBjb3B5X3RvX2d1ZXN0KG9wLT51 LmdldF9wYXJhLnNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzLAotICAgICAgICAgICAgICAg ICAgIHNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzLCBvcC0+dS5nZXRfcGFyYS5mcmVxX251 bSk7Ci0gICAgeGZyZWUoc2NhbGluZ19hdmFpbGFibGVfZnJlcXVlbmNpZXMpOwotICAgIGlmICgg cmV0ICkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIGlmICggIShzY2FsaW5nX2F2YWlsYWJs ZV9nb3Zlcm5vcnMgPQotICAgICAgICAgICB4emFsbG9jX2FycmF5KGNoYXIsIGdvdl9udW0gKiBD UFVGUkVRX05BTUVfTEVOKSkgKQotICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICBpZiAoIChy ZXQgPSByZWFkX3NjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycyhzY2FsaW5nX2F2YWlsYWJsZV9n b3Zlcm5vcnMsCi0gICAgICAgICAgICAgICAgZ292X251bSAqIENQVUZSRVFfTkFNRV9MRU4gKiBz aXplb2YoY2hhcikpKSApCi0gICAgewotICAgICAgICB4ZnJlZShzY2FsaW5nX2F2YWlsYWJsZV9n b3Zlcm5vcnMpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICByZXQgPSBjb3B5X3Rv X2d1ZXN0KG9wLT51LmdldF9wYXJhLnNjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycywKLSAgICAg ICAgICAgICAgICBzY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMsIGdvdl9udW0gKiBDUFVGUkVR X05BTUVfTEVOKTsKLSAgICB4ZnJlZShzY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMpOwotICAg IGlmICggcmV0ICkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIG9wLT51LmdldF9wYXJhLmNw dWluZm9fY3VyX2ZyZXEgPQotICAgICAgICBjcHVmcmVxX2RyaXZlci0+Z2V0ID8gY3B1ZnJlcV9k cml2ZXItPmdldChvcC0+Y3B1aWQpIDogcG9saWN5LT5jdXI7Ci0gICAgb3AtPnUuZ2V0X3BhcmEu Y3B1aW5mb19tYXhfZnJlcSA9IHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcTsKLSAgICBvcC0+dS5n ZXRfcGFyYS5jcHVpbmZvX21pbl9mcmVxID0gcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxOwotICAg IG9wLT51LmdldF9wYXJhLnNjYWxpbmdfY3VyX2ZyZXEgPSBwb2xpY3ktPmN1cjsKLSAgICBvcC0+ dS5nZXRfcGFyYS5zY2FsaW5nX21heF9mcmVxID0gcG9saWN5LT5tYXg7Ci0gICAgb3AtPnUuZ2V0 X3BhcmEuc2NhbGluZ19taW5fZnJlcSA9IHBvbGljeS0+bWluOwotCi0gICAgaWYgKCBjcHVmcmVx X2RyaXZlci0+bmFtZVswXSApCi0gICAgICAgIHN0cmxjcHkob3AtPnUuZ2V0X3BhcmEuc2NhbGlu Z19kcml2ZXIsIAotICAgICAgICAgICAgY3B1ZnJlcV9kcml2ZXItPm5hbWUsIENQVUZSRVFfTkFN RV9MRU4pOwotICAgIGVsc2UKLSAgICAgICAgc3RybGNweShvcC0+dS5nZXRfcGFyYS5zY2FsaW5n X2RyaXZlciwgIlVua25vd24iLCBDUFVGUkVRX05BTUVfTEVOKTsKLQotICAgIGlmICggcG9saWN5 LT5nb3Zlcm5vci0+bmFtZVswXSApCi0gICAgICAgIHN0cmxjcHkob3AtPnUuZ2V0X3BhcmEuc2Nh bGluZ19nb3Zlcm5vciwgCi0gICAgICAgICAgICBwb2xpY3ktPmdvdmVybm9yLT5uYW1lLCBDUFVG UkVRX05BTUVfTEVOKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmxjcHkob3AtPnUuZ2V0X3BhcmEu c2NhbGluZ19nb3Zlcm5vciwgIlVua25vd24iLCBDUFVGUkVRX05BTUVfTEVOKTsKLQotICAgIC8q IGdvdmVybm9yIHNwZWNpZmljIHBhcmEgKi8KLSAgICBpZiAoICFzdHJuaWNtcChvcC0+dS5nZXRf cGFyYS5zY2FsaW5nX2dvdmVybm9yLCAKLSAgICAgICAgICAgICAgICAgICAidXNlcnNwYWNlIiwg Q1BVRlJFUV9OQU1FX0xFTikgKQotICAgIHsKLSAgICAgICAgb3AtPnUuZ2V0X3BhcmEudS51c2Vy c3BhY2Uuc2NhbGluZ19zZXRzcGVlZCA9IHBvbGljeS0+Y3VyOwotICAgIH0KLQotICAgIGlmICgg IXN0cm5pY21wKG9wLT51LmdldF9wYXJhLnNjYWxpbmdfZ292ZXJub3IsIAotICAgICAgICAgICAg ICAgICAgICJvbmRlbWFuZCIsIENQVUZSRVFfTkFNRV9MRU4pICkKLSAgICB7Ci0gICAgICAgIHJl dCA9IGdldF9jcHVmcmVxX29uZGVtYW5kX3BhcmEoCi0gICAgICAgICAgICAmb3AtPnUuZ2V0X3Bh cmEudS5vbmRlbWFuZC5zYW1wbGluZ19yYXRlX21heCwKLSAgICAgICAgICAgICZvcC0+dS5nZXRf cGFyYS51Lm9uZGVtYW5kLnNhbXBsaW5nX3JhdGVfbWluLAotICAgICAgICAgICAgJm9wLT51Lmdl dF9wYXJhLnUub25kZW1hbmQuc2FtcGxpbmdfcmF0ZSwKLSAgICAgICAgICAgICZvcC0+dS5nZXRf cGFyYS51Lm9uZGVtYW5kLnVwX3RocmVzaG9sZCk7Ci0gICAgfQotICAgIG9wLT51LmdldF9wYXJh LnR1cmJvX2VuYWJsZWQgPSBjcHVmcmVxX2dldF90dXJib19zdGF0dXMob3AtPmNwdWlkKTsKLQot ICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2NwdWZyZXFfZ292KHN0cnVjdCB4 ZW5fc3lzY3RsX3BtX29wICpvcCkKLXsKLSAgICBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgbmV3X3Bv bGljeSwgKm9sZF9wb2xpY3k7Ci0KLSAgICBvbGRfcG9saWN5ID0gcGVyX2NwdShjcHVmcmVxX2Nw dV9wb2xpY3ksIG9wLT5jcHVpZCk7Ci0gICAgaWYgKCAhb2xkX3BvbGljeSApCi0gICAgICAgIHJl dHVybiAtRUlOVkFMOwotCi0gICAgbWVtY3B5KCZuZXdfcG9saWN5LCBvbGRfcG9saWN5LCBzaXpl b2Yoc3RydWN0IGNwdWZyZXFfcG9saWN5KSk7Ci0KLSAgICBuZXdfcG9saWN5LmdvdmVybm9yID0g X19maW5kX2dvdmVybm9yKG9wLT51LnNldF9nb3Yuc2NhbGluZ19nb3Zlcm5vcik7Ci0gICAgaWYg KG5ld19wb2xpY3kuZ292ZXJub3IgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0K LSAgICByZXR1cm4gX19jcHVmcmVxX3NldF9wb2xpY3kob2xkX3BvbGljeSwgJm5ld19wb2xpY3kp OwotfQotCi1zdGF0aWMgaW50IHNldF9jcHVmcmVxX3BhcmEoc3RydWN0IHhlbl9zeXNjdGxfcG1f b3AgKm9wKQotewotICAgIGludCByZXQgPSAwOwotICAgIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAq cG9saWN5OwotCi0gICAgcG9saWN5ID0gcGVyX2NwdShjcHVmcmVxX2NwdV9wb2xpY3ksIG9wLT5j cHVpZCk7Ci0KLSAgICBpZiAoICFwb2xpY3kgfHwgIXBvbGljeS0+Z292ZXJub3IgKQotICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLQotICAgIHN3aXRjaChvcC0+dS5zZXRfcGFyYS5jdHJsX3R5cGUp Ci0gICAgewotICAgIGNhc2UgU0NBTElOR19NQVhfRlJFUToKLSAgICB7Ci0gICAgICAgIHN0cnVj dCBjcHVmcmVxX3BvbGljeSBuZXdfcG9saWN5OwotCi0gICAgICAgIG1lbWNweSgmbmV3X3BvbGlj eSwgcG9saWN5LCBzaXplb2Yoc3RydWN0IGNwdWZyZXFfcG9saWN5KSk7Ci0gICAgICAgIG5ld19w b2xpY3kubWF4ID0gb3AtPnUuc2V0X3BhcmEuY3RybF92YWx1ZTsKLSAgICAgICAgcmV0ID0gX19j cHVmcmVxX3NldF9wb2xpY3kocG9saWN5LCAmbmV3X3BvbGljeSk7Ci0KLSAgICAgICAgYnJlYWs7 Ci0gICAgfQotCi0gICAgY2FzZSBTQ0FMSU5HX01JTl9GUkVROgotICAgIHsKLSAgICAgICAgc3Ry dWN0IGNwdWZyZXFfcG9saWN5IG5ld19wb2xpY3k7Ci0KLSAgICAgICAgbWVtY3B5KCZuZXdfcG9s aWN5LCBwb2xpY3ksIHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kpKTsKLSAgICAgICAgbmV3 X3BvbGljeS5taW4gPSBvcC0+dS5zZXRfcGFyYS5jdHJsX3ZhbHVlOwotICAgICAgICByZXQgPSBf X2NwdWZyZXFfc2V0X3BvbGljeShwb2xpY3ksICZuZXdfcG9saWN5KTsKLQotICAgICAgICBicmVh azsKLSAgICB9Ci0KLSAgICBjYXNlIFNDQUxJTkdfU0VUU1BFRUQ6Ci0gICAgewotICAgICAgICB1 bnNpZ25lZCBpbnQgZnJlcSA9b3AtPnUuc2V0X3BhcmEuY3RybF92YWx1ZTsKLQotICAgICAgICBp ZiAoICFzdHJuaWNtcChwb2xpY3ktPmdvdmVybm9yLT5uYW1lLAotICAgICAgICAgICAgICAgICAg ICAgICAidXNlcnNwYWNlIiwgQ1BVRlJFUV9OQU1FX0xFTikgKQotICAgICAgICAgICAgcmV0ID0g d3JpdGVfdXNlcnNwYWNlX3NjYWxpbmdfc2V0c3BlZWQob3AtPmNwdWlkLCBmcmVxKTsKLSAgICAg ICAgZWxzZQotICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKLQotICAgICAgICBicmVhazsKLSAg ICB9Ci0KLSAgICBjYXNlIFNBTVBMSU5HX1JBVEU6Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBp bnQgc2FtcGxpbmdfcmF0ZSA9IG9wLT51LnNldF9wYXJhLmN0cmxfdmFsdWU7Ci0KLSAgICAgICAg aWYgKCAhc3RybmljbXAocG9saWN5LT5nb3Zlcm5vci0+bmFtZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgIm9uZGVtYW5kIiwgQ1BVRlJFUV9OQU1FX0xFTikgKQotICAgICAgICAgICAgcmV0ID0g d3JpdGVfb25kZW1hbmRfc2FtcGxpbmdfcmF0ZShzYW1wbGluZ19yYXRlKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKLQotICAgICAgICBicmVhazsKLSAgICB9Ci0K LSAgICBjYXNlIFVQX1RIUkVTSE9MRDoKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCB1cF90 aHJlc2hvbGQgPSBvcC0+dS5zZXRfcGFyYS5jdHJsX3ZhbHVlOwotCi0gICAgICAgIGlmICggIXN0 cm5pY21wKHBvbGljeS0+Z292ZXJub3ItPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICJv bmRlbWFuZCIsIENQVUZSRVFfTkFNRV9MRU4pICkKLSAgICAgICAgICAgIHJldCA9IHdyaXRlX29u ZGVtYW5kX3VwX3RocmVzaG9sZCh1cF90aHJlc2hvbGQpOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgICByZXQgPSAtRUlOVkFMOwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1 bHQ6Ci0gICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg IHJldHVybiByZXQ7Ci19Ci0KLWludCBkb19wbV9vcChzdHJ1Y3QgeGVuX3N5c2N0bF9wbV9vcCAq b3ApCi17Ci0gICAgaW50IHJldCA9IDA7Ci0gICAgY29uc3Qgc3RydWN0IHByb2Nlc3Nvcl9wbWlu Zm8gKnBtcHQ7Ci0KLSAgICBpZiAoICFvcCB8fCBvcC0+Y3B1aWQgPj0gbnJfY3B1X2lkcyB8fCAh Y3B1X29ubGluZShvcC0+Y3B1aWQpICkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgcG1w dCA9IHByb2Nlc3Nvcl9wbWluZm9bb3AtPmNwdWlkXTsKLQotICAgIHN3aXRjaCAoIG9wLT5jbWQg JiBQTV9QQVJBX0NBVEVHT1JZX01BU0sgKQotICAgIHsKLSAgICBjYXNlIENQVUZSRVFfUEFSQToK LSAgICAgICAgaWYgKCAhKHhlbl9wcm9jZXNzb3JfcG1iaXRzICYgWEVOX1BST0NFU1NPUl9QTV9Q WCkgKQotICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIGlmICggIXBtcHQgfHwg IShwbXB0LT5wZXJmLmluaXQgJiBYRU5fUFhfSU5JVCkgKQotICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoIG9wLT5jbWQgKQot ICAgIHsKLSAgICBjYXNlIEdFVF9DUFVGUkVRX1BBUkE6Ci0gICAgewotICAgICAgICByZXQgPSBn ZXRfY3B1ZnJlcV9wYXJhKG9wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBT RVRfQ1BVRlJFUV9HT1Y6Ci0gICAgewotICAgICAgICByZXQgPSBzZXRfY3B1ZnJlcV9nb3Yob3Ap OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNFVF9DUFVGUkVRX1BBUkE6Ci0g ICAgewotICAgICAgICByZXQgPSBzZXRfY3B1ZnJlcV9wYXJhKG9wKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgfQotCi0gICAgY2FzZSBHRVRfQ1BVRlJFUV9BVkdGUkVROgotICAgIHsKLSAgICAgICAg b3AtPnUuZ2V0X2F2Z2ZyZXEgPSBjcHVmcmVxX2RyaXZlcl9nZXRhdmcob3AtPmNwdWlkLCBVU1Jf R0VUQVZHKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBYRU5fU1lTQ1RMX3Bt X29wX3NldF9zY2hlZF9vcHRfc210OgotICAgIHsKLSAgICAgICAgdWludDMyX3Qgc2F2ZWRfdmFs dWU7Ci0KLSAgICAgICAgc2F2ZWRfdmFsdWUgPSBzY2hlZF9zbXRfcG93ZXJfc2F2aW5nczsKLSAg ICAgICAgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgPSAhIW9wLT51LnNldF9zY2hlZF9vcHRfc210 OwotICAgICAgICBvcC0+dS5zZXRfc2NoZWRfb3B0X3NtdCA9IHNhdmVkX3ZhbHVlOwotCi0gICAg ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgWEVOX1NZU0NUTF9wbV9vcF9zZXRfdmNwdV9t aWdyYXRpb25fZGVsYXk6Ci0gICAgewotICAgICAgICBzZXRfdmNwdV9taWdyYXRpb25fZGVsYXko b3AtPnUuc2V0X3ZjcHVfbWlncmF0aW9uX2RlbGF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot Ci0gICAgY2FzZSBYRU5fU1lTQ1RMX3BtX29wX2dldF92Y3B1X21pZ3JhdGlvbl9kZWxheToKLSAg ICB7Ci0gICAgICAgIG9wLT51LmdldF92Y3B1X21pZ3JhdGlvbl9kZWxheSA9IGdldF92Y3B1X21p Z3JhdGlvbl9kZWxheSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFhFTl9T WVNDVExfcG1fb3BfZ2V0X21heF9jc3RhdGU6Ci0gICAgewotICAgICAgICBvcC0+dS5nZXRfbWF4 X2NzdGF0ZSA9IGFjcGlfZ2V0X2NzdGF0ZV9saW1pdCgpOwotICAgICAgICBicmVhazsKLSAgICB9 Ci0KLSAgICBjYXNlIFhFTl9TWVNDVExfcG1fb3Bfc2V0X21heF9jc3RhdGU6Ci0gICAgewotICAg ICAgICBhY3BpX3NldF9jc3RhdGVfbGltaXQob3AtPnUuc2V0X21heF9jc3RhdGUpOwotICAgICAg ICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFhFTl9TWVNDVExfcG1fb3BfZW5hYmxlX3R1cmJv OgotICAgIHsKLSAgICAgICAgcmV0ID0gY3B1ZnJlcV91cGRhdGVfdHVyYm8ob3AtPmNwdWlkLCBD UFVGUkVRX1RVUkJPX0VOQUJMRUQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNl IFhFTl9TWVNDVExfcG1fb3BfZGlzYWJsZV90dXJibzoKLSAgICB7Ci0gICAgICAgIHJldCA9IGNw dWZyZXFfdXBkYXRlX3R1cmJvKG9wLT5jcHVpZCwgQ1BVRlJFUV9UVVJCT19ESVNBQkxFRCk7Ci0g ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50aygibm90 IGRlZmluZWQgc3ViLWh5cGVyY2FsbCBAIGRvX3BtX29wXG4iKTsKLSAgICAgICAgcmV0ID0gLUVO T1NZUzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50 IGFjcGlfc2V0X3BkY19iaXRzKHUzMiBhY3BpX2lkLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHVp bnQzMikgcGRjKQotewotICAgIHUzMiBiaXRzWzNdOwotICAgIGludCByZXQ7Ci0KLSAgICBpZiAo IGNvcHlfZnJvbV9ndWVzdChiaXRzLCBwZGMsIDIpICkKLSAgICAgICAgcmV0ID0gLUVGQVVMVDsK LSAgICBlbHNlIGlmICggYml0c1swXSAhPSBBQ1BJX1BEQ19SRVZJU0lPTl9JRCB8fCAhYml0c1sx XSApCi0gICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgZWxzZSBpZiAoIGNvcHlfZnJvbV9ndWVz dF9vZmZzZXQoYml0cyArIDIsIHBkYywgMiwgMSkgKQotICAgICAgICByZXQgPSAtRUZBVUxUOwot ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHUzMiBtYXNrID0gMDsKLQotICAgICAgICBpZiAoIHhl bl9wcm9jZXNzb3JfcG1iaXRzICYgWEVOX1BST0NFU1NPUl9QTV9DWCApCi0gICAgICAgICAgICBt YXNrIHw9IEFDUElfUERDX0NfTUFTSyB8IEFDUElfUERDX1NNUF9DMVBUOwotICAgICAgICBpZiAo IHhlbl9wcm9jZXNzb3JfcG1iaXRzICYgWEVOX1BST0NFU1NPUl9QTV9QWCApCi0gICAgICAgICAg ICBtYXNrIHw9IEFDUElfUERDX1BfTUFTSyB8IEFDUElfUERDX1NNUF9DMVBUOwotICAgICAgICBp ZiAoIHhlbl9wcm9jZXNzb3JfcG1iaXRzICYgWEVOX1BST0NFU1NPUl9QTV9UWCApCi0gICAgICAg ICAgICBtYXNrIHw9IEFDUElfUERDX1RfTUFTSyB8IEFDUElfUERDX1NNUF9DMVBUOwotICAgICAg ICBiaXRzWzJdICY9IChBQ1BJX1BEQ19DX01BU0sgfCBBQ1BJX1BEQ19QX01BU0sgfCBBQ1BJX1BE Q19UX01BU0sgfAotICAgICAgICAgICAgICAgICAgICBBQ1BJX1BEQ19TTVBfQzFQVCkgJiB+bWFz azsKLSAgICAgICAgcmV0ID0gYXJjaF9hY3BpX3NldF9wZGNfYml0cyhhY3BpX2lkLCBiaXRzLCBt YXNrKTsKLSAgICB9Ci0gICAgaWYgKCAhcmV0ICYmIF9fY29weV90b19ndWVzdF9vZmZzZXQocGRj LCAyLCBiaXRzICsgMiwgMSkgKQotICAgICAgICByZXQgPSAtRUZBVUxUOwotCi0gICAgcmV0dXJu IHJldDsKLX0KZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3BtL0tjb25maWcgYi94ZW4vZHJpdmVy cy9wbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNGZkYTEK LS0tIC9kZXYvbnVsbAorKysgYi94ZW4vZHJpdmVycy9wbS9LY29uZmlnCkBAIC0wLDAgKzEsMyBA QAorCitjb25maWcgSEFTX1BNCisJYm9vbApkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcG0vTWFr ZWZpbGUgYi94ZW4vZHJpdmVycy9wbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4yMDczNjgzCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2RyaXZlcnMvcG0vTWFr ZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgKz0gc3RhdC5vCmRpZmYgLS1naXQgYS94ZW4vZHJp dmVycy9wbS9zdGF0LmMgYi94ZW4vZHJpdmVycy9wbS9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMmRiZGUxYwotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9kcml2ZXJz L3BtL3N0YXQuYwpAQCAtMCwwICsxLDUyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICBw bXN0YXQuYyAtIFBvd2VyIE1hbmFnZW1lbnQgc3RhdGlzdGljIGluZm9ybWF0aW9uIChQeC9DeC9U eCwgZXRjLikKKyMKKyMgIENvcHlyaWdodCAoYykgMjAwOCwgTGl1IEppbnNvbmcgPGppbnNvbmcu bGl1QGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCisjIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IAorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIAorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUIAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgCisjIG1v cmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgVGhlIGZ1bGwg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRp b24gaW4gdGhlCisjIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisjCisqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNs dWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRlIDx4ZW4v aXJxLmg+CisjaW5jbHVkZSA8eGVuL2lvY2FwLmg+CisjaW5jbHVkZSA8eGVuL2NvbXBhdC5oPgor I2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgor I2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vY3B1bWFzay5oPgorI2luY2x1 ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDx4ZW4vcGVyY3B1Lmg+CisjaW5jbHVkZSA8 eGVuL2RvbWFpbi5oPgorI2luY2x1ZGUgPHhlbi9hY3BpLmg+CisKKyNpbmNsdWRlIDxwdWJsaWMv c3lzY3RsLmg+CisjaW5jbHVkZSA8eGVuL2NwdWZyZXEuaD4KKyNpbmNsdWRlIDx4ZW4vcG1zdGF0 Lmg+CisKK0RFRklORV9QRVJfQ1BVX1JFQURfTU9TVExZKHN0cnVjdCBwbV9weCAqLCBjcHVmcmVx X3N0YXRpc3RpY19kYXRhKTsKKworLyoKKyAqIEdldCBQTSBzdGF0aXN0aWMgaW5mbworICovCitp bnQgZG9fZ2V0X3BtX2luZm8oc3RydWN0IHhlbl9zeXNjdGxfZ2V0X3Btc3RhdCAqb3ApCit7Cisg ICAgaW50IHJldCA9IDA7CisgICAgY29uc3Qgc3RydWN0IHByb2Nlc3Nvcl9wbWluZm8gKnBtcHQ7 CisKKyAgICBpZiAoICFvcCB8fCAob3AtPmNwdWlkID49IG5yX2NwdV9pZHMpIHx8ICFjcHVfb25s aW5lKG9wLT5jcHVpZCkgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICBwbXB0ID0gcHJv Y2Vzc29yX3BtaW5mb1tvcC0+Y3B1aWRdOworCisgICAgc3dpdGNoICggb3AtPnR5cGUgJiBQTVNU QVRfQ0FURUdPUllfTUFTSyApCisgICAgeworICAgIGNhc2UgUE1TVEFUX0NYOgorICAgICAgICBp ZiAoICEoeGVuX3Byb2Nlc3Nvcl9wbWJpdHMgJiBYRU5fUFJPQ0VTU09SX1BNX0NYKSApCisgICAg ICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQTVNUQVRf UFg6CisgICAgICAgIGlmICggISh4ZW5fcHJvY2Vzc29yX3BtYml0cyAmIFhFTl9QUk9DRVNTT1Jf UE1fUFgpICkKKyAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICBpZiAoICFjcHVm cmVxX2RyaXZlciApCisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgaWYgKCAh cG1wdCB8fCAhKHBtcHQtPnBlcmYuaW5pdCAmIFhFTl9QWF9JTklUKSApCisgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0 dXJuIC1FTk9ERVY7CisgICAgfQorCisgICAgc3dpdGNoICggb3AtPnR5cGUgKQorICAgIHsKKyAg ICBjYXNlIFBNU1RBVF9nZXRfbWF4X3B4OgorICAgIHsKKyAgICAgICAgb3AtPnUuZ2V0cHgudG90 YWwgPSBwbXB0LT5wZXJmLnN0YXRlX2NvdW50OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg ICBjYXNlIFBNU1RBVF9nZXRfcHhzdGF0OgorICAgIHsKKyAgICAgICAgdWludDMyX3QgY3Q7Cisg ICAgICAgIHN0cnVjdCBwbV9weCAqcHhwdDsKKyAgICAgICAgc3BpbmxvY2tfdCAqY3B1ZnJlcV9z dGF0aXN0aWNfbG9jayA9IAorICAgICAgICAgICAgICAgICAgICZwZXJfY3B1KGNwdWZyZXFfc3Rh dGlzdGljX2xvY2ssIG9wLT5jcHVpZCk7CisKKyAgICAgICAgc3Bpbl9sb2NrKGNwdWZyZXFfc3Rh dGlzdGljX2xvY2spOworCisgICAgICAgIHB4cHQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdGlzdGlj X2RhdGEsIG9wLT5jcHVpZCk7CisgICAgICAgIGlmICggIXB4cHQgfHwgIXB4cHQtPnUucHQgfHwg IXB4cHQtPnUudHJhbnNfcHQgKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluX3VubG9jayhj cHVmcmVxX3N0YXRpc3RpY19sb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAtRU5PREFUQTsKKyAg ICAgICAgfQorCisgICAgICAgIHB4cHQtPnUudXNhYmxlID0gcG1wdC0+cGVyZi5zdGF0ZV9jb3Vu dCAtIHBtcHQtPnBlcmYucGxhdGZvcm1fbGltaXQ7CisKKyAgICAgICAgY3B1ZnJlcV9yZXNpZGVu Y3lfdXBkYXRlKG9wLT5jcHVpZCwgcHhwdC0+dS5jdXIpOworCisgICAgICAgIGN0ID0gcG1wdC0+ cGVyZi5zdGF0ZV9jb3VudDsKKyAgICAgICAgaWYgKCBjb3B5X3RvX2d1ZXN0KG9wLT51LmdldHB4 LnRyYW5zX3B0LCBweHB0LT51LnRyYW5zX3B0LCBjdCpjdCkgKQorICAgICAgICB7CisgICAgICAg ICAgICBzcGluX3VubG9jayhjcHVmcmVxX3N0YXRpc3RpY19sb2NrKTsKKyAgICAgICAgICAgIHJl dCA9IC1FRkFVTFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlm ICggY29weV90b19ndWVzdChvcC0+dS5nZXRweC5wdCwgcHhwdC0+dS5wdCwgY3QpICkKKyAgICAg ICAgeworICAgICAgICAgICAgc3Bpbl91bmxvY2soY3B1ZnJlcV9zdGF0aXN0aWNfbG9jayk7Cisg ICAgICAgICAgICByZXQgPSAtRUZBVUxUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KworICAgICAgICBvcC0+dS5nZXRweC50b3RhbCA9IHB4cHQtPnUudG90YWw7CisgICAgICAgIG9w LT51LmdldHB4LnVzYWJsZSA9IHB4cHQtPnUudXNhYmxlOworICAgICAgICBvcC0+dS5nZXRweC5s YXN0ID0gcHhwdC0+dS5sYXN0OworICAgICAgICBvcC0+dS5nZXRweC5jdXIgPSBweHB0LT51LmN1 cjsKKworICAgICAgICBzcGluX3VubG9jayhjcHVmcmVxX3N0YXRpc3RpY19sb2NrKTsKKworICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFBNU1RBVF9yZXNldF9weHN0YXQ6CisgICAg eworICAgICAgICBjcHVmcmVxX3N0YXRpc3RpY19yZXNldChvcC0+Y3B1aWQpOworICAgICAgICBi cmVhazsKKyAgICB9CisKKyAgICBjYXNlIFBNU1RBVF9nZXRfbWF4X2N4OgorICAgIHsKKyAgICAg ICAgb3AtPnUuZ2V0Y3gubnIgPSBwbXN0YXRfZ2V0X2N4X25yKG9wLT5jcHVpZCk7CisgICAgICAg IHJldCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgUE1TVEFUX2dldF9j eHN0YXQ6CisgICAgeworICAgICAgICByZXQgPSBwbXN0YXRfZ2V0X2N4X3N0YXQob3AtPmNwdWlk LCAmb3AtPnUuZ2V0Y3gpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFBNU1RB VF9yZXNldF9jeHN0YXQ6CisgICAgeworICAgICAgICByZXQgPSBwbXN0YXRfcmVzZXRfY3hfc3Rh dChvcC0+Y3B1aWQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAg ICAgICBwcmludGsoIm5vdCBkZWZpbmVkIHN1Yi1oeXBlcmNhbGwgQCBkb19nZXRfcG1faW5mb1xu Iik7CisgICAgICAgIHJldCA9IC1FTk9TWVM7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IHJldHVybiByZXQ7Cit9CisKKy8qCisgKiAxLiBHZXQgUE0gcGFyYW1ldGVyCisgKiAyLiBQcm92 aWRlIHVzZXIgUE0gY29udHJvbAorICovCitzdGF0aWMgaW50IHJlYWRfc2NhbGluZ19hdmFpbGFi bGVfZ292ZXJub3JzKGNoYXIgKnNjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUpCit7 CisgICAgdW5zaWduZWQgaW50IGkgPSAwOworICAgIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICp0 OworCisgICAgaWYgKCAhc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzICkKKyAgICAgICAgcmV0 dXJuIC1FSU5WQUw7CisKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZjcHVmcmVxX2dvdmVy bm9yX2xpc3QsIGdvdmVybm9yX2xpc3QpCisgICAgeworICAgICAgICBpICs9IHNjbnByaW50Zigm c2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICBD UFVGUkVRX05BTUVfTEVOLCAiJXMgIiwgdC0+bmFtZSk7CisgICAgICAgIGlmICggaSA+IHNpemUg KQorICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAgIHNjYWxpbmdfYXZhaWxh YmxlX2dvdmVybm9yc1tpLTFdID0gJ1wwJzsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IGdldF9jcHVmcmVxX3BhcmEoc3RydWN0IHhlbl9zeXNjdGxfcG1fb3AgKm9wKQoreworICAg IHVpbnQzMl90IHJldCA9IDA7CisgICAgY29uc3Qgc3RydWN0IHByb2Nlc3Nvcl9wbWluZm8gKnBt cHQ7CisgICAgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisgICAgdWludDMyX3QgZ292 X251bSA9IDA7CisgICAgdWludDMyX3QgKmFmZmVjdGVkX2NwdXM7CisgICAgdWludDMyX3QgKnNj YWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzOworICAgIGNoYXIgICAgICpzY2FsaW5nX2F2YWls YWJsZV9nb3Zlcm5vcnM7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqcG9zOworICAgIHVpbnQzMl90 IGNwdSwgaSwgaiA9IDA7CisKKyAgICBwbXB0ID0gcHJvY2Vzc29yX3BtaW5mb1tvcC0+Y3B1aWRd OworICAgIHBvbGljeSA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfcG9saWN5LCBvcC0+Y3B1aWQpOwor CisgICAgaWYgKCAhcG1wdCB8fCAhcG1wdC0+cGVyZi5zdGF0ZXMgfHwKKyAgICAgICAgICFwb2xp Y3kgfHwgIXBvbGljeS0+Z292ZXJub3IgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAg IGxpc3RfZm9yX2VhY2gocG9zLCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0KQorICAgICAgICBnb3Zf bnVtKys7CisKKyAgICBpZiAoIChvcC0+dS5nZXRfcGFyYS5jcHVfbnVtICAhPSBjcHVtYXNrX3dl aWdodChwb2xpY3ktPmNwdXMpKSB8fAorICAgICAgICAgKG9wLT51LmdldF9wYXJhLmZyZXFfbnVt ICE9IHBtcHQtPnBlcmYuc3RhdGVfY291bnQpICAgIHx8CisgICAgICAgICAob3AtPnUuZ2V0X3Bh cmEuZ292X251bSAgIT0gZ292X251bSkgKQorICAgIHsKKyAgICAgICAgb3AtPnUuZ2V0X3BhcmEu Y3B1X251bSA9ICBjcHVtYXNrX3dlaWdodChwb2xpY3ktPmNwdXMpOworICAgICAgICBvcC0+dS5n ZXRfcGFyYS5mcmVxX251bSA9IHBtcHQtPnBlcmYuc3RhdGVfY291bnQ7CisgICAgICAgIG9wLT51 LmdldF9wYXJhLmdvdl9udW0gID0gZ292X251bTsKKyAgICAgICAgcmV0dXJuIC1FQUdBSU47Cisg ICAgfQorCisgICAgaWYgKCAhKGFmZmVjdGVkX2NwdXMgPSB4emFsbG9jX2FycmF5KHVpbnQzMl90 LCBvcC0+dS5nZXRfcGFyYS5jcHVfbnVtKSkgKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAg ICBmb3JfZWFjaF9jcHUoY3B1LCBwb2xpY3ktPmNwdXMpCisgICAgICAgIGFmZmVjdGVkX2NwdXNb aisrXSA9IGNwdTsKKyAgICByZXQgPSBjb3B5X3RvX2d1ZXN0KG9wLT51LmdldF9wYXJhLmFmZmVj dGVkX2NwdXMsCisgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkX2NwdXMsIG9wLT51Lmdl dF9wYXJhLmNwdV9udW0pOworICAgIHhmcmVlKGFmZmVjdGVkX2NwdXMpOworICAgIGlmICggcmV0 ICkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGlmICggIShzY2FsaW5nX2F2YWlsYWJsZV9m cmVxdWVuY2llcyA9CisgICAgICAgICAgIHh6YWxsb2NfYXJyYXkodWludDMyX3QsIG9wLT51Lmdl dF9wYXJhLmZyZXFfbnVtKSkgKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICBmb3IgKCBp ID0gMDsgaSA8IG9wLT51LmdldF9wYXJhLmZyZXFfbnVtOyBpKysgKQorICAgICAgICBzY2FsaW5n X2F2YWlsYWJsZV9mcmVxdWVuY2llc1tpXSA9CisgICAgICAgICAgICAgICAgICAgICAgICBwbXB0 LT5wZXJmLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CisgICAgcmV0ID0gY29weV90 b19ndWVzdChvcC0+dS5nZXRfcGFyYS5zY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llcywKKyAg ICAgICAgICAgICAgICAgICBzY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llcywgb3AtPnUuZ2V0 X3BhcmEuZnJlcV9udW0pOworICAgIHhmcmVlKHNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVz KTsKKyAgICBpZiAoIHJldCApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAoICEoc2Nh bGluZ19hdmFpbGFibGVfZ292ZXJub3JzID0KKyAgICAgICAgICAgeHphbGxvY19hcnJheShjaGFy LCBnb3ZfbnVtICogQ1BVRlJFUV9OQU1FX0xFTikpICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07 CisgICAgaWYgKCAocmV0ID0gcmVhZF9zY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMoc2NhbGlu Z19hdmFpbGFibGVfZ292ZXJub3JzLAorICAgICAgICAgICAgICAgIGdvdl9udW0gKiBDUFVGUkVR X05BTUVfTEVOICogc2l6ZW9mKGNoYXIpKSkgKQorICAgIHsKKyAgICAgICAgeGZyZWUoc2NhbGlu Z19hdmFpbGFibGVfZ292ZXJub3JzKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAg cmV0ID0gY29weV90b19ndWVzdChvcC0+dS5nZXRfcGFyYS5zY2FsaW5nX2F2YWlsYWJsZV9nb3Zl cm5vcnMsCisgICAgICAgICAgICAgICAgc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzLCBnb3Zf bnVtICogQ1BVRlJFUV9OQU1FX0xFTik7CisgICAgeGZyZWUoc2NhbGluZ19hdmFpbGFibGVfZ292 ZXJub3JzKTsKKyAgICBpZiAoIHJldCApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBvcC0+ dS5nZXRfcGFyYS5jcHVpbmZvX2N1cl9mcmVxID0KKyAgICAgICAgY3B1ZnJlcV9kcml2ZXItPmdl dCA/IGNwdWZyZXFfZHJpdmVyLT5nZXQob3AtPmNwdWlkKSA6IHBvbGljeS0+Y3VyOworICAgIG9w LT51LmdldF9wYXJhLmNwdWluZm9fbWF4X2ZyZXEgPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXE7 CisgICAgb3AtPnUuZ2V0X3BhcmEuY3B1aW5mb19taW5fZnJlcSA9IHBvbGljeS0+Y3B1aW5mby5t aW5fZnJlcTsKKyAgICBvcC0+dS5nZXRfcGFyYS5zY2FsaW5nX2N1cl9mcmVxID0gcG9saWN5LT5j dXI7CisgICAgb3AtPnUuZ2V0X3BhcmEuc2NhbGluZ19tYXhfZnJlcSA9IHBvbGljeS0+bWF4Owor ICAgIG9wLT51LmdldF9wYXJhLnNjYWxpbmdfbWluX2ZyZXEgPSBwb2xpY3ktPm1pbjsKKworICAg IGlmICggY3B1ZnJlcV9kcml2ZXItPm5hbWVbMF0gKQorICAgICAgICBzdHJsY3B5KG9wLT51Lmdl dF9wYXJhLnNjYWxpbmdfZHJpdmVyLCAKKyAgICAgICAgICAgIGNwdWZyZXFfZHJpdmVyLT5uYW1l LCBDUFVGUkVRX05BTUVfTEVOKTsKKyAgICBlbHNlCisgICAgICAgIHN0cmxjcHkob3AtPnUuZ2V0 X3BhcmEuc2NhbGluZ19kcml2ZXIsICJVbmtub3duIiwgQ1BVRlJFUV9OQU1FX0xFTik7CisKKyAg ICBpZiAoIHBvbGljeS0+Z292ZXJub3ItPm5hbWVbMF0gKQorICAgICAgICBzdHJsY3B5KG9wLT51 LmdldF9wYXJhLnNjYWxpbmdfZ292ZXJub3IsIAorICAgICAgICAgICAgcG9saWN5LT5nb3Zlcm5v ci0+bmFtZSwgQ1BVRlJFUV9OQU1FX0xFTik7CisgICAgZWxzZQorICAgICAgICBzdHJsY3B5KG9w LT51LmdldF9wYXJhLnNjYWxpbmdfZ292ZXJub3IsICJVbmtub3duIiwgQ1BVRlJFUV9OQU1FX0xF Tik7CisKKyAgICAvKiBnb3Zlcm5vciBzcGVjaWZpYyBwYXJhICovCisgICAgaWYgKCAhc3Rybmlj bXAob3AtPnUuZ2V0X3BhcmEuc2NhbGluZ19nb3Zlcm5vciwgCisgICAgICAgICAgICAgICAgICAg InVzZXJzcGFjZSIsIENQVUZSRVFfTkFNRV9MRU4pICkKKyAgICB7CisgICAgICAgIG9wLT51Lmdl dF9wYXJhLnUudXNlcnNwYWNlLnNjYWxpbmdfc2V0c3BlZWQgPSBwb2xpY3ktPmN1cjsKKyAgICB9 CisKKyAgICBpZiAoICFzdHJuaWNtcChvcC0+dS5nZXRfcGFyYS5zY2FsaW5nX2dvdmVybm9yLCAK KyAgICAgICAgICAgICAgICAgICAib25kZW1hbmQiLCBDUFVGUkVRX05BTUVfTEVOKSApCisgICAg eworICAgICAgICByZXQgPSBnZXRfY3B1ZnJlcV9vbmRlbWFuZF9wYXJhKAorICAgICAgICAgICAg Jm9wLT51LmdldF9wYXJhLnUub25kZW1hbmQuc2FtcGxpbmdfcmF0ZV9tYXgsCisgICAgICAgICAg ICAmb3AtPnUuZ2V0X3BhcmEudS5vbmRlbWFuZC5zYW1wbGluZ19yYXRlX21pbiwKKyAgICAgICAg ICAgICZvcC0+dS5nZXRfcGFyYS51Lm9uZGVtYW5kLnNhbXBsaW5nX3JhdGUsCisgICAgICAgICAg ICAmb3AtPnUuZ2V0X3BhcmEudS5vbmRlbWFuZC51cF90aHJlc2hvbGQpOworICAgIH0KKyAgICBv cC0+dS5nZXRfcGFyYS50dXJib19lbmFibGVkID0gY3B1ZnJlcV9nZXRfdHVyYm9fc3RhdHVzKG9w LT5jcHVpZCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNldF9jcHVmcmVx X2dvdihzdHJ1Y3QgeGVuX3N5c2N0bF9wbV9vcCAqb3ApCit7CisgICAgc3RydWN0IGNwdWZyZXFf cG9saWN5IG5ld19wb2xpY3ksICpvbGRfcG9saWN5OworCisgICAgb2xkX3BvbGljeSA9IHBlcl9j cHUoY3B1ZnJlcV9jcHVfcG9saWN5LCBvcC0+Y3B1aWQpOworICAgIGlmICggIW9sZF9wb2xpY3kg KQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIG1lbWNweSgmbmV3X3BvbGljeSwgb2xk X3BvbGljeSwgc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOworCisgICAgbmV3X3BvbGlj eS5nb3Zlcm5vciA9IF9fZmluZF9nb3Zlcm5vcihvcC0+dS5zZXRfZ292LnNjYWxpbmdfZ292ZXJu b3IpOworICAgIGlmIChuZXdfcG9saWN5LmdvdmVybm9yID09IE5VTEwpCisgICAgICAgIHJldHVy biAtRUlOVkFMOworCisgICAgcmV0dXJuIF9fY3B1ZnJlcV9zZXRfcG9saWN5KG9sZF9wb2xpY3ks ICZuZXdfcG9saWN5KTsKK30KKworc3RhdGljIGludCBzZXRfY3B1ZnJlcV9wYXJhKHN0cnVjdCB4 ZW5fc3lzY3RsX3BtX29wICpvcCkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzdHJ1Y3QgY3B1 ZnJlcV9wb2xpY3kgKnBvbGljeTsKKworICAgIHBvbGljeSA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVf cG9saWN5LCBvcC0+Y3B1aWQpOworCisgICAgaWYgKCAhcG9saWN5IHx8ICFwb2xpY3ktPmdvdmVy bm9yICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBzd2l0Y2gob3AtPnUuc2V0X3Bh cmEuY3RybF90eXBlKQorICAgIHsKKyAgICBjYXNlIFNDQUxJTkdfTUFYX0ZSRVE6CisgICAgewor ICAgICAgICBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgbmV3X3BvbGljeTsKKworICAgICAgICBtZW1j cHkoJm5ld19wb2xpY3ksIHBvbGljeSwgc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOwor ICAgICAgICBuZXdfcG9saWN5Lm1heCA9IG9wLT51LnNldF9wYXJhLmN0cmxfdmFsdWU7CisgICAg ICAgIHJldCA9IF9fY3B1ZnJlcV9zZXRfcG9saWN5KHBvbGljeSwgJm5ld19wb2xpY3kpOworCisg ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU0NBTElOR19NSU5fRlJFUToKKyAgICB7 CisgICAgICAgIHN0cnVjdCBjcHVmcmVxX3BvbGljeSBuZXdfcG9saWN5OworCisgICAgICAgIG1l bWNweSgmbmV3X3BvbGljeSwgcG9saWN5LCBzaXplb2Yoc3RydWN0IGNwdWZyZXFfcG9saWN5KSk7 CisgICAgICAgIG5ld19wb2xpY3kubWluID0gb3AtPnUuc2V0X3BhcmEuY3RybF92YWx1ZTsKKyAg ICAgICAgcmV0ID0gX19jcHVmcmVxX3NldF9wb2xpY3kocG9saWN5LCAmbmV3X3BvbGljeSk7CisK KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTQ0FMSU5HX1NFVFNQRUVEOgorICAg IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGZyZXEgPW9wLT51LnNldF9wYXJhLmN0cmxfdmFsdWU7 CisKKyAgICAgICAgaWYgKCAhc3RybmljbXAocG9saWN5LT5nb3Zlcm5vci0+bmFtZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgInVzZXJzcGFjZSIsIENQVUZSRVFfTkFNRV9MRU4pICkKKyAgICAg ICAgICAgIHJldCA9IHdyaXRlX3VzZXJzcGFjZV9zY2FsaW5nX3NldHNwZWVkKG9wLT5jcHVpZCwg ZnJlcSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisKKyAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTQU1QTElOR19SQVRFOgorICAgIHsKKyAgICAg ICAgdW5zaWduZWQgaW50IHNhbXBsaW5nX3JhdGUgPSBvcC0+dS5zZXRfcGFyYS5jdHJsX3ZhbHVl OworCisgICAgICAgIGlmICggIXN0cm5pY21wKHBvbGljeS0+Z292ZXJub3ItPm5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICJvbmRlbWFuZCIsIENQVUZSRVFfTkFNRV9MRU4pICkKKyAgICAg ICAgICAgIHJldCA9IHdyaXRlX29uZGVtYW5kX3NhbXBsaW5nX3JhdGUoc2FtcGxpbmdfcmF0ZSk7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisKKyAgICAgICAgYnJl YWs7CisgICAgfQorCisgICAgY2FzZSBVUF9USFJFU0hPTEQ6CisgICAgeworICAgICAgICB1bnNp Z25lZCBpbnQgdXBfdGhyZXNob2xkID0gb3AtPnUuc2V0X3BhcmEuY3RybF92YWx1ZTsKKworICAg ICAgICBpZiAoICFzdHJuaWNtcChwb2xpY3ktPmdvdmVybm9yLT5uYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAib25kZW1hbmQiLCBDUFVGUkVRX05BTUVfTEVOKSApCisgICAgICAgICAgICBy ZXQgPSB3cml0ZV9vbmRlbWFuZF91cF90aHJlc2hvbGQodXBfdGhyZXNob2xkKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKKworICAgICAgICBicmVhazsKKyAgICB9 CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXQgPSAtRUlOVkFMOworICAgICAgICBicmVhazsK KyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgZG9fcG1fb3Aoc3RydWN0IHhlbl9z eXNjdGxfcG1fb3AgKm9wKQoreworICAgIGludCByZXQgPSAwOworICAgIGNvbnN0IHN0cnVjdCBw cm9jZXNzb3JfcG1pbmZvICpwbXB0OworCisgICAgaWYgKCAhb3AgfHwgb3AtPmNwdWlkID49IG5y X2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUob3AtPmNwdWlkKSApCisgICAgICAgIHJldHVybiAtRUlO VkFMOworICAgIHBtcHQgPSBwcm9jZXNzb3JfcG1pbmZvW29wLT5jcHVpZF07CisKKyAgICBzd2l0 Y2ggKCBvcC0+Y21kICYgUE1fUEFSQV9DQVRFR09SWV9NQVNLICkKKyAgICB7CisgICAgY2FzZSBD UFVGUkVRX1BBUkE6CisgICAgICAgIGlmICggISh4ZW5fcHJvY2Vzc29yX3BtYml0cyAmIFhFTl9Q Uk9DRVNTT1JfUE1fUFgpICkKKyAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICBp ZiAoICFwbXB0IHx8ICEocG1wdC0+cGVyZi5pbml0ICYgWEVOX1BYX0lOSVQpICkKKyAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2gg KCBvcC0+Y21kICkKKyAgICB7CisgICAgY2FzZSBHRVRfQ1BVRlJFUV9QQVJBOgorICAgIHsKKyAg ICAgICAgcmV0ID0gZ2V0X2NwdWZyZXFfcGFyYShvcCk7CisgICAgICAgIGJyZWFrOworICAgIH0K KworICAgIGNhc2UgU0VUX0NQVUZSRVFfR09WOgorICAgIHsKKyAgICAgICAgcmV0ID0gc2V0X2Nw dWZyZXFfZ292KG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTRVRfQ1BV RlJFUV9QQVJBOgorICAgIHsKKyAgICAgICAgcmV0ID0gc2V0X2NwdWZyZXFfcGFyYShvcCk7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgR0VUX0NQVUZSRVFfQVZHRlJFUToKKyAg ICB7CisgICAgICAgIG9wLT51LmdldF9hdmdmcmVxID0gY3B1ZnJlcV9kcml2ZXJfZ2V0YXZnKG9w LT5jcHVpZCwgVVNSX0dFVEFWRyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug WEVOX1NZU0NUTF9wbV9vcF9zZXRfc2NoZWRfb3B0X3NtdDoKKyAgICB7CisgICAgICAgIHVpbnQz Ml90IHNhdmVkX3ZhbHVlOworCisgICAgICAgIHNhdmVkX3ZhbHVlID0gc2NoZWRfc210X3Bvd2Vy X3NhdmluZ3M7CisgICAgICAgIHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzID0gISFvcC0+dS5zZXRf c2NoZWRfb3B0X3NtdDsKKyAgICAgICAgb3AtPnUuc2V0X3NjaGVkX29wdF9zbXQgPSBzYXZlZF92 YWx1ZTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFhFTl9TWVNDVExfcG1f b3Bfc2V0X3ZjcHVfbWlncmF0aW9uX2RlbGF5OgorICAgIHsKKyAgICAgICAgc2V0X3ZjcHVfbWln cmF0aW9uX2RlbGF5KG9wLT51LnNldF92Y3B1X21pZ3JhdGlvbl9kZWxheSk7CisgICAgICAgIGJy ZWFrOworICAgIH0KKworICAgIGNhc2UgWEVOX1NZU0NUTF9wbV9vcF9nZXRfdmNwdV9taWdyYXRp b25fZGVsYXk6CisgICAgeworICAgICAgICBvcC0+dS5nZXRfdmNwdV9taWdyYXRpb25fZGVsYXkg PSBnZXRfdmNwdV9taWdyYXRpb25fZGVsYXkoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg ICAgY2FzZSBYRU5fU1lTQ1RMX3BtX29wX2dldF9tYXhfY3N0YXRlOgorICAgIHsKKyAgICAgICAg b3AtPnUuZ2V0X21heF9jc3RhdGUgPSBhY3BpX2dldF9jc3RhdGVfbGltaXQoKTsKKyAgICAgICAg YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBYRU5fU1lTQ1RMX3BtX29wX3NldF9tYXhfY3N0YXRl OgorICAgIHsKKyAgICAgICAgYWNwaV9zZXRfY3N0YXRlX2xpbWl0KG9wLT51LnNldF9tYXhfY3N0 YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBYRU5fU1lTQ1RMX3BtX29w X2VuYWJsZV90dXJibzoKKyAgICB7CisgICAgICAgIHJldCA9IGNwdWZyZXFfdXBkYXRlX3R1cmJv KG9wLT5jcHVpZCwgQ1BVRlJFUV9UVVJCT19FTkFCTEVEKTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorCisgICAgY2FzZSBYRU5fU1lTQ1RMX3BtX29wX2Rpc2FibGVfdHVyYm86CisgICAgeworICAg ICAgICByZXQgPSBjcHVmcmVxX3VwZGF0ZV90dXJibyhvcC0+Y3B1aWQsIENQVUZSRVFfVFVSQk9f RElTQUJMRUQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAg ICBwcmludGsoIm5vdCBkZWZpbmVkIHN1Yi1oeXBlcmNhbGwgQCBkb19wbV9vcFxuIik7CisgICAg ICAgIHJldCA9IC1FTk9TWVM7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBy ZXQ7Cit9CisKK2ludCBhY3BpX3NldF9wZGNfYml0cyh1MzIgYWNwaV9pZCwgWEVOX0dVRVNUX0hB TkRMRV9QQVJBTSh1aW50MzIpIHBkYykKK3sKKyAgICB1MzIgYml0c1szXTsKKyAgICBpbnQgcmV0 OworCisgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoYml0cywgcGRjLCAyKSApCisgICAgICAgIHJl dCA9IC1FRkFVTFQ7CisgICAgZWxzZSBpZiAoIGJpdHNbMF0gIT0gQUNQSV9QRENfUkVWSVNJT05f SUQgfHwgIWJpdHNbMV0gKQorICAgICAgICByZXQgPSAtRUlOVkFMOworICAgIGVsc2UgaWYgKCBj b3B5X2Zyb21fZ3Vlc3Rfb2Zmc2V0KGJpdHMgKyAyLCBwZGMsIDIsIDEpICkKKyAgICAgICAgcmV0 ID0gLUVGQVVMVDsKKyAgICBlbHNlCisgICAgeworICAgICAgICB1MzIgbWFzayA9IDA7CisKKyAg ICAgICAgaWYgKCB4ZW5fcHJvY2Vzc29yX3BtYml0cyAmIFhFTl9QUk9DRVNTT1JfUE1fQ1ggKQor ICAgICAgICAgICAgbWFzayB8PSBBQ1BJX1BEQ19DX01BU0sgfCBBQ1BJX1BEQ19TTVBfQzFQVDsK KyAgICAgICAgaWYgKCB4ZW5fcHJvY2Vzc29yX3BtYml0cyAmIFhFTl9QUk9DRVNTT1JfUE1fUFgg KQorICAgICAgICAgICAgbWFzayB8PSBBQ1BJX1BEQ19QX01BU0sgfCBBQ1BJX1BEQ19TTVBfQzFQ VDsKKyAgICAgICAgaWYgKCB4ZW5fcHJvY2Vzc29yX3BtYml0cyAmIFhFTl9QUk9DRVNTT1JfUE1f VFggKQorICAgICAgICAgICAgbWFzayB8PSBBQ1BJX1BEQ19UX01BU0sgfCBBQ1BJX1BEQ19TTVBf QzFQVDsKKyAgICAgICAgYml0c1syXSAmPSAoQUNQSV9QRENfQ19NQVNLIHwgQUNQSV9QRENfUF9N QVNLIHwgQUNQSV9QRENfVF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgQUNQSV9QRENfU01Q X0MxUFQpICYgfm1hc2s7CisgICAgICAgIHJldCA9IGFyY2hfYWNwaV9zZXRfcGRjX2JpdHMoYWNw aV9pZCwgYml0cywgbWFzayk7CisgICAgfQorICAgIGlmICggIXJldCAmJiBfX2NvcHlfdG9fZ3Vl c3Rfb2Zmc2V0KHBkYywgMiwgYml0cyArIDIsIDEpICkKKyAgICAgICAgcmV0ID0gLUVGQVVMVDsK KworICAgIHJldHVybiByZXQ7Cit9Ci0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=