From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id E568089AB6 for ; Mon, 27 Jul 2020 11:44:50 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Mon, 27 Jul 2020 13:44:08 +0200 Message-Id: <20200727114412.5101-13-zbigniew.kempczynski@intel.com> In-Reply-To: <20200727114412.5101-1-zbigniew.kempczynski@intel.com> References: <20200727114412.5101-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v8 12/16] tests/perf: remove libdrm dependency for rendercopy List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Chris Wilson List-ID: UmVuZGVyY29weSBub3cgdXNlcyBuby1kcm0gdmVyc2lvbiBzbyBhbGwgdXNlcnMgaGFzIHRvCm1p Z3JhdGUgdG8gbmV3IGludGVyZmFjZS4KClNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennF hHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgpDYzogTGlvbmVsIExhbmR3ZXJs aW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgpDYzogRG9taW5payBHcnplZ29yemVr IDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Ci0tLQogdGVzdHMvaTkxNS9wZXJmLmMgfCA2NTUgKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI3 MyBpbnNlcnRpb25zKCspLCAzODIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGVzdHMvaTkx NS9wZXJmLmMgYi90ZXN0cy9pOTE1L3BlcmYuYwppbmRleCA5MmVkYzlmMS4uNDAxZmU3MmYgMTAw NjQ0Ci0tLSBhL3Rlc3RzL2k5MTUvcGVyZi5jCisrKyBiL3Rlc3RzL2k5MTUvcGVyZi5jCkBAIC00 OTcsNjQgKzQ5Nyw0MiBAQCBvYV9yZXBvcnRfZ2V0X2N0eF9pZCh1aW50MzJfdCAqcmVwb3J0KQog fQogCiBzdGF0aWMgdm9pZAotc2NyYXRjaF9idWZfbWVtc2V0KGRybV9pbnRlbF9ibyAqYm8sIGlu dCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgY29sb3IpCitzY3JhdGNoX2J1Zl9tZW1zZXQo c3RydWN0IGludGVsX2J1ZiAqYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGNv bG9yKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCB0cnVlIC8q IHdyaXRhYmxlICovKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJaW50ZWxfYnVmX2NwdV9t YXAoYnVmLCB0cnVlKTsKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGggKiBoZWlnaHQ7IGkr KykKLQkJKCh1aW50MzJfdCAqKWJvLT52aXJ0dWFsKVtpXSA9IGNvbG9yOworCQlidWYtPnB0cltp XSA9IGNvbG9yOwogCi0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKKwlpbnRlbF9idWZfdW5tYXAo YnVmKTsKIH0KIAogc3RhdGljIHZvaWQKLXNjcmF0Y2hfYnVmX2luaXQoZHJtX2ludGVsX2J1Zm1n ciAqYnVmbWdyLAotCQkgc3RydWN0IGlndF9idWYgKmJ1ZiwKK3NjcmF0Y2hfYnVmX2luaXQoc3Ry dWN0IGJ1Zl9vcHMgKmJvcHMsCisJCSBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCiAJCSBpbnQgd2lk dGgsIGludCBoZWlnaHQsCiAJCSB1aW50MzJfdCBjb2xvcikKIHsKLQlzaXplX3Qgc3RyaWRlID0g d2lkdGggKiA0OwotCXNpemVfdCBzaXplID0gc3RyaWRlICogaGVpZ2h0OwotCWRybV9pbnRlbF9i byAqYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdyLCAiIiwgc2l6ZSwgNDA5Nik7Ci0KLQlz Y3JhdGNoX2J1Zl9tZW1zZXQoYm8sIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTsKLQotCW1lbXNldChi dWYsIDAsIHNpemVvZigqYnVmKSk7Ci0KLQlidWYtPmJvID0gYm87Ci0JYnVmLT5zdXJmYWNlWzBd LnN0cmlkZSA9IHN0cmlkZTsKLQlidWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX05PTkU7Ci0JYnVm LT5zdXJmYWNlWzBdLnNpemUgPSBzaXplOwotCWJ1Zi0+YnBwID0gMzI7CisJaW50ZWxfYnVmX2lu aXQoYm9wcywgYnVmLCB3aWR0aCwgaGVpZ2h0LCAzMiwgMCwKKwkJICAgICAgIEk5MTVfVElMSU5H X05PTkUsIEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CisJc2NyYXRjaF9idWZfbWVtc2V0KGJ1Ziwg d2lkdGgsIGhlaWdodCwgY29sb3IpOwogfQogCiBzdGF0aWMgdm9pZAotZW1pdF9yZXBvcnRfcGVy Zl9jb3VudChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgICAgICAgZHJtX2lu dGVsX2JvICpkc3RfYm8sCitlbWl0X3JlcG9ydF9wZXJmX2NvdW50KHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCQkgICAgICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAogCQkgICAgICAgaW50IGRzdF9v ZmZzZXQsCiAJCSAgICAgICB1aW50MzJfdCByZXBvcnRfaWQpCiB7Ci0JaWYgKElTX0hBU1dFTEwo ZGV2aWQpKSB7Ci0JCUJFR0lOX0JBVENIKDMsIDEpOwotCQlPVVRfQkFUQ0goR0VONl9NSV9SRVBP UlRfUEVSRl9DT1VOVCk7Ci0JCU9VVF9SRUxPQyhkc3RfYm8sIEk5MTVfR0VNX0RPTUFJTl9JTlNU UlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkJICBkc3Rfb2Zmc2V0KTsK LQkJT1VUX0JBVENIKHJlcG9ydF9pZCk7Ci0JCUFEVkFOQ0VfQkFUQ0goKTsKLQl9IGVsc2Ugewot CQkvKiBYWFg6IE5COiBuIGR3b3JkcyBhcmcgaXMgYWN0dWFsbHkgbWFnaWMgc2luY2UgaXQgaW50 ZXJuYWxseQotCQkgKiBhdXRvbWF0aWNhbGx5IGFjY291bnRzIGZvciBsYXJnZXIgYWRkcmVzc2Vz IG9uIGdlbiA+PSA4Li4uCi0JCSAqLwotCQlCRUdJTl9CQVRDSCgzLCAxKTsKLQkJT1VUX0JBVENI KEdFTjhfTUlfUkVQT1JUX1BFUkZfQ09VTlQpOwotCQlPVVRfUkVMT0MoZHN0X2JvLCBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKLQkJCSAg ZHN0X29mZnNldCk7Ci0JCU9VVF9CQVRDSChyZXBvcnRfaWQpOwotCQlBRFZBTkNFX0JBVENIKCk7 Ci0JfQorCWlmIChJU19IQVNXRUxMKGRldmlkKSkKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONl9N SV9SRVBPUlRfUEVSRl9DT1VOVCk7CisJZWxzZQorCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU44X01J X1JFUE9SVF9QRVJGX0NPVU5UKTsKKworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBkc3QtPmhh bmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwKKwkJCSAgICBkc3Rfb2Zmc2V0LCBkc3QtPmFkZHIub2Zmc2V0KTsKKwlp bnRlbF9iYl9vdXQoaWJiLCByZXBvcnRfaWQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQ5NSwx NCArMTQ3MywxMyBAQCBlbnVtIGxvYWQgewogCiBzdGF0aWMgc3RydWN0IGxvYWRfaGVscGVyIHsK IAlpbnQgZGV2aWQ7Ci0JZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwotCWRybV9pbnRlbF9jb250 ZXh0ICpjb250ZXh0OworCXN0cnVjdCBidWZfb3BzICpib3BzOwogCXVpbnQzMl90IGNvbnRleHRf aWQ7Ci0Jc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwlzdHJ1Y3QgaW50ZWxfYmIg KmliYjsKIAllbnVtIGxvYWQgbG9hZDsKIAlib29sIGV4aXQ7CiAJc3RydWN0IGlndF9oZWxwZXJf cHJvY2VzcyBpZ3RfcHJvYzsKLQlzdHJ1Y3QgaWd0X2J1ZiBzcmMsIGRzdDsKKwlzdHJ1Y3QgaW50 ZWxfYnVmIHNyYywgZHN0OwogfSBsaCA9IHsgMCwgfTsKIAogc3RhdGljIHZvaWQgbG9hZF9oZWxw ZXJfc2lnbmFsX2hhbmRsZXIoaW50IHNpZykKQEAgLTE1NDIsMjEgKzE1MTksMTIgQEAgc3RhdGlj IHZvaWQgbG9hZF9oZWxwZXJfcnVuKGVudW0gbG9hZCBsb2FkKQogCQlzaWduYWwoU0lHVVNSMiwg bG9hZF9oZWxwZXJfc2lnbmFsX2hhbmRsZXIpOwogCiAJCXdoaWxlICghbGguZXhpdCkgewotCQkJ aW50IHJldDsKLQotCQkJcmVuZGVyX2NvcHkobGguYmF0Y2gsCi0JCQkJICAgIGxoLmNvbnRleHQs CisJCQlyZW5kZXJfY29weShsaC5pYmIsCisJCQkJICAgIGxoLmNvbnRleHRfaWQsCiAJCQkJICAg ICZsaC5zcmMsIDAsIDAsIDE5MjAsIDEwODAsCiAJCQkJICAgICZsaC5kc3QsIDAsIDApOwogCi0J CQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQobGguYmF0Y2gsCi0JCQkJCQkJ ICAgICBsaC5jb250ZXh0KTsKLQotCQkJcmV0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2dldF9p ZChsaC5jb250ZXh0LAotCQkJCQkJCSAgICZsaC5jb250ZXh0X2lkKTsKLQkJCWlndF9hc3NlcnRf ZXEocmV0LCAwKTsKLQotCQkJZHJtX2ludGVsX2JvX3dhaXRfcmVuZGVyaW5nKGxoLmRzdC5ibyk7 CisJCQlpbnRlbF9iYl9zeW5jKGxoLmliYik7CiAKIAkJCS8qIExvd2VyIHRoZSBsb2FkIGJ5IHBh dXNpbmcgYWZ0ZXIgZXZlcnkgc3VibWl0dGVkCiAJCQkgKiB3cml0ZS4gKi8KQEAgLTE1NzQsNTIg KzE1NDIsMzYgQEAgc3RhdGljIHZvaWQgbG9hZF9oZWxwZXJfc3RvcCh2b2lkKQogCiBzdGF0aWMg dm9pZCBsb2FkX2hlbHBlcl9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQogCWxoLmRldmlkID0g aW50ZWxfZ2V0X2RybV9kZXZpZChkcm1fZmQpOwogCiAJLyogTUlfU1RPUkVfREFUQSBjYW4gb25s eSB1c2UgR1RUIGFkZHJlc3Mgb24gZ2VuNCsvZzMzIGFuZCBuZWVkcwogCSAqIHNub29wYWJsZSBt ZW0gb24gcHJlLWdlbjYuIEhlbmNlIGxvYWQtaGVscGVyIG9ubHkgd29ya3Mgb24gZ2VuNissIGJ1 dAogCSAqIHRoYXQncyBhbHNvIGFsbCB3ZSBjYXJlIGFib3V0IGZvciB0aGUgcnBzIHRlc3RjYXNl Ki8KIAlpZ3RfYXNzZXJ0KGludGVsX2dlbihsaC5kZXZpZCkgPj0gNik7Ci0JbGguYnVmbWdyID0g ZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkcm1fZmQsIDQwOTYpOwotCWlndF9hc3NlcnQobGgu YnVmbWdyKTsKLQotCWRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShsaC5idWZtZ3Ip OwogCi0JbGguY29udGV4dCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9jcmVhdGUobGguYnVmbWdy KTsKLQlpZ3RfYXNzZXJ0KGxoLmNvbnRleHQpOworCWxoLmJvcHMgPSBidWZfb3BzX2NyZWF0ZShk cm1fZmQpOwogCi0JbGguY29udGV4dF9pZCA9IDB4ZmZmZmZmZmY7Ci0JcmV0ID0gZHJtX2ludGVs X2dlbV9jb250ZXh0X2dldF9pZChsaC5jb250ZXh0LCAmbGguY29udGV4dF9pZCk7Ci0JaWd0X2Fz c2VydF9lcShyZXQsIDApOworCWxoLmNvbnRleHRfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJt X2ZkKTsKIAlpZ3RfYXNzZXJ0X25lcShsaC5jb250ZXh0X2lkLCAweGZmZmZmZmZmKTsKIAotCWxo LmJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MobGguYnVmbWdyLCBsaC5kZXZpZCk7Ci0J aWd0X2Fzc2VydChsaC5iYXRjaCk7CisJbGguaWJiID0gaW50ZWxfYmJfY3JlYXRlKGRybV9mZCwg QkFUQ0hfU1opOwogCi0Jc2NyYXRjaF9idWZfaW5pdChsaC5idWZtZ3IsICZsaC5kc3QsIDE5MjAs IDEwODAsIDApOwotCXNjcmF0Y2hfYnVmX2luaXQobGguYnVmbWdyLCAmbGguc3JjLCAxOTIwLCAx MDgwLCAwKTsKKwlzY3JhdGNoX2J1Zl9pbml0KGxoLmJvcHMsICZsaC5kc3QsIDE5MjAsIDEwODAs IDApOworCXNjcmF0Y2hfYnVmX2luaXQobGguYm9wcywgJmxoLnNyYywgMTkyMCwgMTA4MCwgMCk7 CiB9CiAKIHN0YXRpYyB2b2lkIGxvYWRfaGVscGVyX2Zpbmkodm9pZCkKIHsKKwlpbnQgaTkxNSA9 IGJ1Zl9vcHNfZ2V0X2ZkKGxoLmJvcHMpOworCiAJaWYgKGxoLmlndF9wcm9jLnJ1bm5pbmcpCiAJ CWxvYWRfaGVscGVyX3N0b3AoKTsKIAotCWlmIChsaC5zcmMuYm8pCi0JCWRybV9pbnRlbF9ib191 bnJlZmVyZW5jZShsaC5zcmMuYm8pOwotCWlmIChsaC5kc3QuYm8pCi0JCWRybV9pbnRlbF9ib191 bnJlZmVyZW5jZShsaC5kc3QuYm8pOwotCi0JaWYgKGxoLmJhdGNoKQotCQlpbnRlbF9iYXRjaGJ1 ZmZlcl9mcmVlKGxoLmJhdGNoKTsKLQotCWlmIChsaC5jb250ZXh0KQotCQlkcm1faW50ZWxfZ2Vt X2NvbnRleHRfZGVzdHJveShsaC5jb250ZXh0KTsKLQotCWlmIChsaC5idWZtZ3IpCi0JCWRybV9p bnRlbF9idWZtZ3JfZGVzdHJveShsaC5idWZtZ3IpOworCWludGVsX2J1Zl9jbG9zZShsaC5ib3Bz LCAmbGguc3JjKTsKKwlpbnRlbF9idWZfY2xvc2UobGguYm9wcywgJmxoLmRzdCk7CisJaW50ZWxf YmJfZGVzdHJveShsaC5pYmIpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgbGguY29udGV4 dF9pZCk7CisJYnVmX29wc19kZXN0cm95KGxoLmJvcHMpOwogfQogCiBzdGF0aWMgYm9vbCBleHBl Y3RlZF9yZXBvcnRfdGltaW5nX2RlbHRhKHVpbnQzMl90IGRlbHRhLCB1aW50MzJfdCBleHBlY3Rl ZF9kZWx0YSkKQEAgLTE4ODgsMjAgKzE4NDAsMTEgQEAgdGVzdF9wZXJfY29udGV4dF9tb2RlX3Vu cHJpdmlsZWdlZCh2b2lkKQogCXdyaXRlX3U2NF9maWxlKCIvcHJvYy9zeXMvZGV2L2k5MTUvcGVy Zl9zdHJlYW1fcGFyYW5vaWQiLCAxKTsKIAogCWlndF9mb3JrKGNoaWxkLCAxKSB7Ci0JCWRybV9p bnRlbF9jb250ZXh0ICpjb250ZXh0OwotCQlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CiAJCXVp bnQzMl90IGN0eF9pZCA9IDB4ZmZmZmZmZmY7IC8qIGludmFsaWQgaWQgKi8KLQkJaW50IHJldDsK IAogCQlpZ3RfZHJvcF9yb290KCk7CiAKLQkJYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1f aW5pdChkcm1fZmQsIDQwOTYpOwotCQljb250ZXh0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2Ny ZWF0ZShidWZtZ3IpOwotCi0JCWlndF9hc3NlcnQoY29udGV4dCk7Ci0KLQkJcmV0ID0gZHJtX2lu dGVsX2dlbV9jb250ZXh0X2dldF9pZChjb250ZXh0LCAmY3R4X2lkKTsKLQkJaWd0X2Fzc2VydF9l cShyZXQsIDApOworCQljdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsKIAkJaWd0 X2Fzc2VydF9uZXEoY3R4X2lkLCAweGZmZmZmZmZmKTsKIAogCQlwcm9wZXJ0aWVzWzFdID0gY3R4 X2lkOwpAQCAtMTkwOSw4ICsxODUyLDcgQEAgdGVzdF9wZXJfY29udGV4dF9tb2RlX3VucHJpdmls ZWdlZCh2b2lkKQogCQlzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJhbSwgZmFs c2UpOwogCQlfX3BlcmZfY2xvc2Uoc3RyZWFtX2ZkKTsKIAotCQlkcm1faW50ZWxfZ2VtX2NvbnRl eHRfZGVzdHJveShjb250ZXh0KTsKLQkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7 CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJtX2ZkLCBjdHhfaWQpOwogCX0KIAogCWlndF93YWl0 Y2hpbGRyZW4oKTsKQEAgLTI5MzYsNTUgKzI4NzgsNDQgQEAgZ2VuMTJfdGVzdF9taV9ycGModm9p ZCkKIAkJLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShwcm9wZXJ0aWVzKSAvIDIsCiAJCS5w cm9wZXJ0aWVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihwcm9wZXJ0aWVzKSwKIAl9OwotCWRybV9p bnRlbF9ibyAqYm87Ci0JZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwotCWRybV9pbnRlbF9jb250 ZXh0ICpjb250ZXh0OwotCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisJc3RydWN0 IGJ1Zl9vcHMgKmJvcHM7CisJc3RydWN0IGludGVsX2JiICppYmI7CisJc3RydWN0IGludGVsX2J1 ZiAqYnVmOwogI2RlZmluZSBJTlZBTElEX0NUWF9JRCAweGZmZmZmZmZmCiAJdWludDMyX3QgY3R4 X2lkID0gSU5WQUxJRF9DVFhfSUQ7CiAJdWludDMyX3QgKnJlcG9ydDMyOwotCWludCByZXQ7CiAJ c2l6ZV90IGZvcm1hdF9zaXplXzMyOwogCXN0cnVjdCBvYV9mb3JtYXQgZm9ybWF0ID0gZ2V0X29h X2Zvcm1hdCh0ZXN0X3NldC0+cGVyZl9vYV9mb3JtYXQpOwogCiAJLyogRW5zdXJlIHBlcmZfc3Ry ZWFtX3BhcmFub2lkIGlzIHNldCB0byAxIGJ5IGRlZmF1bHQgKi8KIAl3cml0ZV91NjRfZmlsZSgi L3Byb2Mvc3lzL2Rldi9pOTE1L3BlcmZfc3RyZWFtX3BhcmFub2lkIiwgMSk7CiAKLQlidWZtZ3Ig PSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Ci0JaWd0X2Fzc2VydChi dWZtZ3IpOwotCi0JZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1ncik7Ci0K LQljb250ZXh0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOwotCWlndF9h c3NlcnQoY29udGV4dCk7Ci0KLQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0X2lkKGNv bnRleHQsICZjdHhfaWQpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlib3BzID0gYnVmX29w c19jcmVhdGUoZHJtX2ZkKTsKKwljdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsK IAlpZ3RfYXNzZXJ0X25lcShjdHhfaWQsIElOVkFMSURfQ1RYX0lEKTsKIAlwcm9wZXJ0aWVzWzFd ID0gY3R4X2lkOwogCi0JYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3IsIGRl dmlkKTsKLQlibyA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3IsICJtaV9ycGMgZGVzdCBibyIs IDQwOTYsIDY0KTsKKwlpYmIgPSBpbnRlbF9iYl9jcmVhdGUoZHJtX2ZkLCBCQVRDSF9TWik7CisJ YnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA0MDk2LCAxLCA4LCA2NCwKKwkJCSAgICAgICBJ OTE1X1RJTElOR19OT05FLCBJOTE1X0NPTVBSRVNTSU9OX05PTkUpOwogCi0JcmV0ID0gZHJtX2lu dGVsX2JvX21hcChibywgdHJ1ZSk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOwotCW1lbXNldChi by0+dmlydHVhbCwgMHg4MCwgNDA5Nik7Ci0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKKwlpbnRl bF9idWZfY3B1X21hcChidWYsIHRydWUpOworCW1lbXNldChidWYtPnB0ciwgMHg4MCwgNDA5Nik7 CisJaW50ZWxfYnVmX3VubWFwKGJ1Zik7CiAKIAlzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1f ZmQsICZwYXJhbSwgZmFsc2UpOwogCiAjZGVmaW5lIFJFUE9SVF9JRCAweGRlYWRiZWVmCiAjZGVm aW5lIFJFUE9SVF9PRkZTRVQgMAotCWVtaXRfcmVwb3J0X3BlcmZfY291bnQoYmF0Y2gsCi0JCQkg ICAgICAgYm8sCisJZW1pdF9yZXBvcnRfcGVyZl9jb3VudChpYmIsCisJCQkgICAgICAgYnVmLAog CQkJICAgICAgIFJFUE9SVF9PRkZTRVQsCiAJCQkgICAgICAgUkVQT1JUX0lEKTsKLQlpbnRlbF9i YXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwotCi0JcmV0ID0g ZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlp bnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYiwgY3R4X2lkKTsKKwlpbnRlbF9i Yl9zeW5jKGliYik7CiAKLQlyZXBvcnQzMiA9IGJvLT52aXJ0dWFsOworCWludGVsX2J1Zl9jcHVf bWFwKGJ1ZiwgZmFsc2UpOworCXJlcG9ydDMyID0gYnVmLT5wdHI7CiAJZm9ybWF0X3NpemVfMzIg PSBmb3JtYXQuc2l6ZSA+PiAyOwogCWR1bXBfcmVwb3J0KHJlcG9ydDMyLCBmb3JtYXRfc2l6ZV8z MiwgIm1pLXJwYyIpOwogCkBAIC0zMDA2LDExICsyOTM3LDExIEBAIGdlbjEyX3Rlc3RfbWlfcnBj KHZvaWQpCiAJaWd0X2Fzc2VydF9uZXEocmVwb3J0MzJbZm9ybWF0LmJfb2ZmID4+IDJdLCAweDgw ODA4MDgwKTsKIAlpZ3RfYXNzZXJ0X2VxKHJlcG9ydDMyW2Zvcm1hdF9zaXplXzMyXSwgMHg4MDgw ODA4MCk7CiAKLQlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOwotCWRybV9pbnRlbF9ib191bnJlZmVy ZW5jZShibyk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Ci0JZHJtX2ludGVsX2dl bV9jb250ZXh0X2Rlc3Ryb3koY29udGV4dCk7Ci0JZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1 Zm1ncik7CisJaW50ZWxfYnVmX3VubWFwKGJ1Zik7CisJaW50ZWxfYnVmX2Rlc3Ryb3koYnVmKTsK KwlpbnRlbF9iYl9kZXN0cm95KGliYik7CisJZ2VtX2NvbnRleHRfZGVzdHJveShkcm1fZmQsIGN0 eF9pZCk7CisJYnVmX29wc19kZXN0cm95KGJvcHMpOwogCV9fcGVyZl9jbG9zZShzdHJlYW1fZmQp OwogfQogCkBAIC0zMDM0LDQxICsyOTY1LDMzIEBAIHRlc3RfbWlfcnBjKHZvaWQpCiAJCS5udW1f cHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAogCQkucHJvcGVydGllc19wdHIg PSB0b191c2VyX3BvaW50ZXIocHJvcGVydGllcyksCiAJfTsKLQlkcm1faW50ZWxfYnVmbWdyICpi dWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Ci0JZHJtX2lu dGVsX2NvbnRleHQgKmNvbnRleHQ7Ci0Jc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsK LQlkcm1faW50ZWxfYm8gKmJvOwotCXVpbnQzMl90ICpyZXBvcnQzMjsKLQlpbnQgcmV0OworCXN0 cnVjdCBidWZfb3BzICpib3BzID0gYnVmX29wc19jcmVhdGUoZHJtX2ZkKTsKKwlzdHJ1Y3QgaW50 ZWxfYmIgKmliYjsKKwlzdHJ1Y3QgaW50ZWxfYnVmICpidWY7CisJdWludDMyX3QgKnJlcG9ydDMy LCBjdHhfaWQ7CiAKIAlzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJhbSwgZmFs c2UpOwogCi0JZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1ncik7Ci0KLQlj b250ZXh0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOwotCWlndF9hc3Nl cnQoY29udGV4dCk7CisJY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGRybV9mZCk7CiAKLQli YXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQpOworCWliYiA9IGlu dGVsX2JiX2NyZWF0ZShkcm1fZmQsIEJBVENIX1NaKTsKKwlidWYgPSBpbnRlbF9idWZfY3JlYXRl KGJvcHMsIDQwOTYsIDEsIDgsIDY0LAorCQkJICAgICAgIEk5MTVfVElMSU5HX05PTkUsIEk5MTVf Q09NUFJFU1NJT05fTk9ORSk7CiAKLQlibyA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3IsICJt aV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKLQotCXJldCA9IGRybV9pbnRlbF9ib19tYXAoYm8s IHRydWUpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlpbnRlbF9idWZfY3B1X21hcChidWYs IHRydWUpOworCW1lbXNldChidWYtPnB0ciwgMHg4MCwgNDA5Nik7CisJaW50ZWxfYnVmX3VubWFw KGJ1Zik7CiAKLQltZW1zZXQoYm8tPnZpcnR1YWwsIDB4ODAsIDQwOTYpOwotCWRybV9pbnRlbF9i b191bm1hcChibyk7Ci0KLQllbWl0X3JlcG9ydF9wZXJmX2NvdW50KGJhdGNoLAotCQkJICAgICAg IGJvLCAvKiBkc3QgKi8KKwllbWl0X3JlcG9ydF9wZXJmX2NvdW50KGliYiwKKwkJCSAgICAgICBi dWYsIC8qIGRzdCAqLwogCQkJICAgICAgIDAsIC8qIGRzdCBvZmZzZXQgaW4gYnl0ZXMgKi8KIAkJ CSAgICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IElEICovCiAKLQlpbnRlbF9iYXRjaGJ1ZmZl cl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwotCi0JcmV0ID0gZHJtX2ludGVs X2JvX21hcChibywgZmFsc2UgLyogd3JpdGUgZW5hYmxlICovKTsKLQlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIsIGN0eF9pZCk7 CisJaW50ZWxfYmJfc3luYyhpYmIpOwogCi0JcmVwb3J0MzIgPSBiby0+dmlydHVhbDsKKwlpbnRl bF9idWZfY3B1X21hcChidWYsIGZhbHNlKTsKKwlyZXBvcnQzMiA9IGJ1Zi0+cHRyOwogCWR1bXBf cmVwb3J0KHJlcG9ydDMyLCA2NCwgIm1pLXJwYyIpOwogCWlndF9hc3NlcnRfZXEocmVwb3J0MzJb MF0sIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAlpZ3RfYXNzZXJ0X25lcShyZXBvcnQz MlsxXSwgMCk7IC8qIHRpbWVzdGFtcCAqLwpAQCAtMzA3NiwxNyArMjk5OSwxNyBAQCB0ZXN0X21p X3JwYyh2b2lkKQogCWlndF9hc3NlcnRfbmVxKHJlcG9ydDMyWzYzXSwgMHg4MDgwODA4MCk7IC8q IGVuZCBvZiByZXBvcnQgKi8KIAlpZ3RfYXNzZXJ0X2VxKHJlcG9ydDMyWzY0XSwgMHg4MDgwODA4 MCk7IC8qIGFmdGVyIDI1NiBieXRlIHJlcG9ydCAqLwogCi0JZHJtX2ludGVsX2JvX3VubWFwKGJv KTsKLQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwotCWludGVsX2JhdGNoYnVmZmVyX2Zy ZWUoYmF0Y2gpOwotCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNvbnRleHQpOwotCWRy bV9pbnRlbF9idWZtZ3JfZGVzdHJveShidWZtZ3IpOworCWludGVsX2J1Zl91bm1hcChidWYpOwor CWludGVsX2J1Zl9kZXN0cm95KGJ1Zik7CisJaW50ZWxfYmJfZGVzdHJveShpYmIpOworCWdlbV9j b250ZXh0X2Rlc3Ryb3koZHJtX2ZkLCBjdHhfaWQpOworCWJ1Zl9vcHNfZGVzdHJveShib3BzKTsK IAlfX3BlcmZfY2xvc2Uoc3RyZWFtX2ZkKTsKIH0KIAogc3RhdGljIHZvaWQKLWVtaXRfc3RhbGxf dGltZXN0YW1wX2FuZF9ycGMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAg ICAgZHJtX2ludGVsX2JvICpkc3QsCitlbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBjKHN0cnVj dCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCiAJCQkgICAg IGludCB0aW1lc3RhbXBfb2Zmc2V0LAogCQkJICAgICBpbnQgcmVwb3J0X2RzdF9vZmZzZXQsCiAJ CQkgICAgIHVpbnQzMl90IHJlcG9ydF9pZCkKQEAgLTMwOTUsMjcgKzMwMTgsMTkgQEAgZW1pdF9z dGFsbF90aW1lc3RhbXBfYW5kX3JwYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAog CQkJCSAgIFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0ZMVVNIIHwKIAkJCQkgICBQSVBFX0NP TlRST0xfV1JJVEVfVElNRVNUQU1QKTsKIAotCWlmIChpbnRlbF9nZW4oZGV2aWQpID49IDgpIHsK LQkJQkVHSU5fQkFUQ0goNSwgMSk7Ci0JCU9VVF9CQVRDSChHRlhfT1BfUElQRV9DT05UUk9MIHwg KDYgLSAyKSk7Ci0JCU9VVF9CQVRDSChwaXBlX2N0bF9mbGFncyk7Ci0JCU9VVF9SRUxPQyhkc3Qs IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9O LAotCQkJICB0aW1lc3RhbXBfb2Zmc2V0KTsKLQkJT1VUX0JBVENIKDApOyAvKiBpbW0gbG93ZXIg Ki8KLQkJT1VUX0JBVENIKDApOyAvKiBpbW0gdXBwZXIgKi8KLQkJQURWQU5DRV9CQVRDSCgpOwot CX0gZWxzZSB7Ci0JCUJFR0lOX0JBVENIKDUsIDEpOwotCQlPVVRfQkFUQ0goR0ZYX09QX1BJUEVf Q09OVFJPTCB8ICg1IC0gMikpOwotCQlPVVRfQkFUQ0gocGlwZV9jdGxfZmxhZ3MpOwotCQlPVVRf UkVMT0MoZHN0LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwKLQkJCSAgdGltZXN0YW1wX29mZnNldCk7Ci0JCU9VVF9CQVRDSCgwKTsgLyog aW1tIGxvd2VyICovCi0JCU9VVF9CQVRDSCgwKTsgLyogaW1tIHVwcGVyICovCi0JCUFEVkFOQ0Vf QkFUQ0goKTsKLQl9CisJaWYgKGludGVsX2dlbihkZXZpZCkgPj0gOCkKKwkJaW50ZWxfYmJfb3V0 KGliYiwgR0ZYX09QX1BJUEVfQ09OVFJPTCB8ICg2IC0gMikpOworCWVsc2UKKwkJaW50ZWxfYmJf b3V0KGliYiwgR0ZYX09QX1BJUEVfQ09OVFJPTCB8ICg1IC0gMikpOwogCi0JZW1pdF9yZXBvcnRf cGVyZl9jb3VudChiYXRjaCwgZHN0LCByZXBvcnRfZHN0X29mZnNldCwgcmVwb3J0X2lkKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBwaXBlX2N0bF9mbGFncyk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhp YmIsIGRzdC0+aGFuZGxlLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkx NV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAorCQkJICAgIHRpbWVzdGFtcF9vZmZzZXQsIGRzdC0+ YWRkci5vZmZzZXQpOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBpbW0gbG93ZXIgKi8KKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogaW1tIHVwcGVyICovCisKKwllbWl0X3JlcG9ydF9wZXJm X2NvdW50KGliYiwgZHN0LCByZXBvcnRfZHN0X29mZnNldCwgcmVwb3J0X2lkKTsKIH0KIAogLyog VGVzdHMgdGhlIElOVEVMX3BlcmZvcm1hbmNlX3F1ZXJ5IHVzZSBjYXNlIHdoZXJlIGFuIHVucHJp dmlsZWdlZCBwcm9jZXNzCkBAIC0zMTU2LDExICszMDcxLDEwIEBAIGhzd190ZXN0X3NpbmdsZV9j dHhfY291bnRlcnModm9pZCkKIAl3cml0ZV91NjRfZmlsZSgiL3Byb2Mvc3lzL2Rldi9pOTE1L3Bl cmZfc3RyZWFtX3BhcmFub2lkIiwgMSk7CiAKIAlpZ3RfZm9yayhjaGlsZCwgMSkgewotCQlkcm1f aW50ZWxfYnVmbWdyICpidWZtZ3I7Ci0JCWRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0MCwgKmNv bnRleHQxOwotCQlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwotCQlzdHJ1Y3QgaWd0 X2J1ZiBzcmNbM10sIGRzdFszXTsKLQkJZHJtX2ludGVsX2JvICpibzsKKwkJc3RydWN0IGJ1Zl9v cHMgKmJvcHM7CisJCXN0cnVjdCBpbnRlbF9idWYgc3JjWzNdLCBkc3RbM10sICpkc3RfYnVmOwor CQlzdHJ1Y3QgaW50ZWxfYmIgKmliYjAsICppYmIxOworCQl1aW50MzJfdCBjb250ZXh0MF9pZCwg Y29udGV4dDFfaWQ7CiAJCXVpbnQzMl90ICpyZXBvcnQwXzMyLCAqcmVwb3J0MV8zMjsKIAkJdWlu dDY0X3QgdGltZXN0YW1wMF82NCwgdGltZXN0YW1wMV82NDsKIAkJdWludDMyX3QgZGVsdGFfdHM2 NCwgZGVsdGFfb2EzMjsKQEAgLTMxNjksMjYgKzMwODMsMjQgQEAgaHN3X3Rlc3Rfc2luZ2xlX2N0 eF9jb3VudGVycyh2b2lkKQogCQlpbnQgbl9zYW1wbGVzX3dyaXR0ZW47CiAJCWludCB3aWR0aCA9 IDgwMDsKIAkJaW50IGhlaWdodCA9IDYwMDsKLQkJdWludDMyX3QgY3R4X2lkID0gMHhmZmZmZmZm ZjsgLyogaW52YWxpZCBpZCAqLwotCQlpbnQgcmV0OwogCiAJCWlndF9kcm9wX3Jvb3QoKTsKIAot CQlidWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Ci0JCWRy bV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShidWZtZ3IpOworCQlib3BzID0gYnVmX29w c19jcmVhdGUoZHJtX2ZkKTsKIAogCQlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3Jj KTsgaSsrKSB7Ci0JCQlzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1nciwgJnNyY1tpXSwgd2lkdGgsIGhl aWdodCwgMHhmZjAwMDBmZik7Ci0JCQlzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1nciwgJmRzdFtpXSwg d2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CisJCQlzY3JhdGNoX2J1Zl9pbml0KGJvcHMsICZz cmNbaV0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOworCQkJc2NyYXRjaF9idWZfaW5pdChi b3BzLCAmZHN0W2ldLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKIAkJfQogCi0JCWJhdGNo ID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYnVmbWdyLCBkZXZpZCk7Ci0KLQkJY29udGV4dDAg PSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7Ci0JCWlndF9hc3NlcnQoY29u dGV4dDApOwotCi0JCWNvbnRleHQxID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZt Z3IpOwotCQlpZ3RfYXNzZXJ0KGNvbnRleHQxKTsKKwkJLyoKKwkJICogV2UgY3VycmVudGx5IGNh Y2hlIGFkZHJlc3NlcyBmb3IgYnVmZmVycyB3aXRoaW4KKwkJICogaW50ZWxfYmIsIHNvIHVzZSBz ZXBhcmF0ZSBiYXRjaGVzIGZvciBkaWZmZXJlbnQgY29udGV4dHMKKwkJICovCisJCWliYjAgPSBp bnRlbF9iYl9jcmVhdGUoZHJtX2ZkLCBCQVRDSF9TWik7CisJCWliYjEgPSBpbnRlbF9iYl9jcmVh dGUoZHJtX2ZkLCBCQVRDSF9TWik7CisJCWNvbnRleHQwX2lkID0gZ2VtX2NvbnRleHRfY3JlYXRl KGRybV9mZCk7CisJCWNvbnRleHQxX2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGRybV9mZCk7CiAK IAkJaWd0X2RlYnVnKCJzdWJtaXR0aW5nIHdhcm0gdXAgcmVuZGVyX2NvcHlcbiIpOwogCkBAIC0z MjEyLDM0ICszMTI0LDMyIEBAIGhzd190ZXN0X3NpbmdsZV9jdHhfY291bnRlcnModm9pZCkKIAkJ ICogdXAgcGlubmluZyB0aGUgY29udGV4dCBzaW5jZSB0aGVyZSB3b24ndCBldmVyIGJlIGEgcGlu bmluZwogCQkgKiBob29rIGNhbGxiYWNrLgogCQkgKi8KLQkJcmVuZGVyX2NvcHkoYmF0Y2gsCi0J CQkgICAgY29udGV4dDAsCisJCXJlbmRlcl9jb3B5KGliYjAsCisJCQkgICAgY29udGV4dDBfaWQs CiAJCQkgICAgJnNyY1swXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKIAkJCSAgICAmZHN0WzBdLCAw LCAwKTsKIAotCQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0X2lkKGNvbnRleHQwLCAm Y3R4X2lkKTsKLQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwotCQlpZ3RfYXNzZXJ0X25lcShjdHhf aWQsIDB4ZmZmZmZmZmYpOwotCQlwcm9wZXJ0aWVzWzFdID0gY3R4X2lkOworCQlwcm9wZXJ0aWVz WzFdID0gY29udGV4dDBfaWQ7CiAKLQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250 ZXh0KGJhdGNoLCBjb250ZXh0MCk7CisJCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRl eHQoaWJiMCwgY29udGV4dDBfaWQpOworCQlpbnRlbF9iYl9zeW5jKGliYjApOwogCi0JCXNjcmF0 Y2hfYnVmX21lbXNldChzcmNbMF0uYm8sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOwotCQlz Y3JhdGNoX2J1Zl9tZW1zZXQoZHN0WzBdLmJvLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsK KwkJc2NyYXRjaF9idWZfbWVtc2V0KCZzcmNbMF0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYp OworCQlzY3JhdGNoX2J1Zl9tZW1zZXQoJmRzdFswXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBm Zik7CiAKIAkJaWd0X2RlYnVnKCJvcGVuaW5nIGk5MTUtcGVyZiBzdHJlYW1cbiIpOwogCQlzdHJl YW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJhbSwgZmFsc2UpOwogCi0JCWJvID0gZHJt X2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgIm1pX3JwYyBkZXN0IGJvIiwgNDA5NiwgNjQpOworCQlk c3RfYnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA0MDk2LCAxLCA4LCA2NCwKKwkJCQkJICAg STkxNV9USUxJTkdfTk9ORSwKKwkJCQkJICAgSTkxNV9DT01QUkVTU0lPTl9OT05FKTsKIAotCQly ZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCB0cnVlIC8qIHdyaXRlIGVuYWJsZSAqLyk7Ci0JCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJaW50ZWxfYnVmX2NwdV9tYXAoZHN0X2J1ZiwgdHJ1ZSAv KiB3cml0ZSBlbmFibGUgKi8pOworCQltZW1zZXQoZHN0X2J1Zi0+cHRyLCAweDgwLCA0MDk2KTsK KwkJaW50ZWxfYnVmX3VubWFwKGRzdF9idWYpOwogCi0JCW1lbXNldChiby0+dmlydHVhbCwgMHg4 MCwgNDA5Nik7Ci0JCWRybV9pbnRlbF9ib191bm1hcChibyk7Ci0KLQkJZW1pdF9zdGFsbF90aW1l c3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkJICAgICBibywKKwkJZW1pdF9zdGFsbF90aW1lc3Rh bXBfYW5kX3JwYyhpYmIwLAorCQkJCQkgICAgIGRzdF9idWYsCiAJCQkJCSAgICAgNTEyIC8qIHRp bWVzdGFtcCBvZmZzZXQgKi8sCiAJCQkJCSAgICAgMCwgLyogcmVwb3J0IGRzdCBvZmZzZXQgKi8K IAkJCQkJICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IGlkICovCkBAIC0zMjQ5LDQ1ICszMTU5 LDQ1IEBAIGhzd190ZXN0X3NpbmdsZV9jdHhfY291bnRlcnModm9pZCkKIAkJICogdGhhdCB0aGUg UElQRV9DT05UUk9MICsgTUlfUlBDIGNvbW1hbmRzIHdpbGwgYmUgaW4gYQogCQkgKiBzZXBhcmF0 ZSBiYXRjaCBmcm9tIHRoZSBjb3B5LgogCQkgKi8KLQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hf d2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MCk7CisJCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93 aXRoX2NvbnRleHQoaWJiMCwgY29udGV4dDBfaWQpOwogCi0JCXJlbmRlcl9jb3B5KGJhdGNoLAot CQkJICAgIGNvbnRleHQwLAorCQlyZW5kZXJfY29weShpYmIwLAorCQkJICAgIGNvbnRleHQwX2lk LAogCQkJICAgICZzcmNbMF0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJCQkgICAgJmRzdFswXSwg MCwgMCk7CiAKIAkJLyogQW5vdGhlciByZWR1bmRhbnQgZmx1c2ggdG8gY2xhcmlmeSBiYXRjaCBi byBpcyBmcmVlIHRvIHJldXNlICovCi0JCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29u dGV4dChiYXRjaCwgY29udGV4dDApOworCQlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250 ZXh0KGliYjAsIGNvbnRleHQwX2lkKTsKIAogCQkvKiBzdWJtaXQgdHdvIGNvcGllcyBvbiB0aGUg b3RoZXIgY29udGV4dCB0byBhdm9pZCBhIGZhbHNlCiAJCSAqIHBvc2l0aXZlIGluIGNhc2UgdGhl IGRyaXZlciBzb21laG93IGVuZGVkIHVwIGZpbHRlcmluZyBmb3IKIAkJICogY29udGV4dDEKIAkJ ICovCi0JCXJlbmRlcl9jb3B5KGJhdGNoLAotCQkJICAgIGNvbnRleHQxLAorCQlyZW5kZXJfY29w eShpYmIxLAorCQkJICAgIGNvbnRleHQxX2lkLAogCQkJICAgICZzcmNbMV0sIDAsIDAsIHdpZHRo LCBoZWlnaHQsCiAJCQkgICAgJmRzdFsxXSwgMCwgMCk7CiAKLQkJcmVuZGVyX2NvcHkoYmF0Y2gs Ci0JCQkgICAgY29udGV4dDEsCisJCXJlbmRlcl9jb3B5KGliYjEsCisJCQkgICAgY29udGV4dDFf aWQsCiAJCQkgICAgJnNyY1syXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKIAkJCSAgICAmZHN0WzJd LCAwLCAwKTsKIAogCQkvKiBBbmQgYW5vdGhlciAqLwotCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVz aF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQxKTsKKwkJaW50ZWxfYmJfZmx1c2hfcmVuZGVy X3dpdGhfY29udGV4dChpYmIxLCBjb250ZXh0MV9pZCk7CiAKLQkJZW1pdF9zdGFsbF90aW1lc3Rh bXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkJICAgICBibywKKwkJZW1pdF9zdGFsbF90aW1lc3RhbXBf YW5kX3JwYyhpYmIwLAorCQkJCQkgICAgIGRzdF9idWYsCiAJCQkJCSAgICAgNTIwIC8qIHRpbWVz dGFtcCBvZmZzZXQgKi8sCiAJCQkJCSAgICAgMjU2LCAvKiByZXBvcnQgZHN0IG9mZnNldCAqLwog CQkJCQkgICAgIDB4YmVlZmJlZWYpOyAvKiByZXBvcnQgaWQgKi8KIAotCQlpbnRlbF9iYXRjaGJ1 ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQwKTsKKwkJaW50ZWxfYmJfZmx1 c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIwLCBjb250ZXh0MF9pZCk7CisJCWludGVsX2JiX3N5 bmMoaWJiMCk7CiAKLQkJcmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UgLyogd3JpdGUg ZW5hYmxlICovKTsKLQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCQlpbnRlbF9idWZfY3B1X21h cChkc3RfYnVmLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUgKi8pOwogCi0JCXJlcG9ydDBfMzIgPSBi by0+dmlydHVhbDsKKwkJcmVwb3J0MF8zMiA9IGRzdF9idWYtPnB0cjsKIAkJaWd0X2Fzc2VydF9l cShyZXBvcnQwXzMyWzBdLCAweGRlYWRiZWVmKTsgLyogcmVwb3J0IElEICovCiAJCWlndF9hc3Nl cnRfbmVxKHJlcG9ydDBfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KIApAQCAtMzMwNyw4ICsz MjE3LDggQEAgaHN3X3Rlc3Rfc2luZ2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQlpZ3RfZGVidWco InRpbWVzdGFtcDMyIDAgPSAldVxuIiwgcmVwb3J0MF8zMlsxXSk7CiAJCWlndF9kZWJ1ZygidGlt ZXN0YW1wMzIgMSA9ICV1XG4iLCByZXBvcnQxXzMyWzFdKTsKIAotCQl0aW1lc3RhbXAwXzY0ID0g Kih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyA1MTIpOwotCQl0aW1lc3Rh bXAxXzY0ID0gKih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyA1MjApOwor CQl0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKilkc3RfYnVmLT5wdHIp ICsgNTEyKTsKKwkJdGltZXN0YW1wMV82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90ICopZHN0 X2J1Zi0+cHRyKSArIDUyMCk7CiAKIAkJaWd0X2RlYnVnKCJ0aW1lc3RhbXA2NCAwID0gJSJQUkl1 NjQiXG4iLCB0aW1lc3RhbXAwXzY0KTsKIAkJaWd0X2RlYnVnKCJ0aW1lc3RhbXA2NCAxID0gJSJQ Ukl1NjQiXG4iLCB0aW1lc3RhbXAxXzY0KTsKQEAgLTMzMzYsMTYgKzMyNDYsMTcgQEAgaHN3X3Rl c3Rfc2luZ2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQlpZ3RfYXNzZXJ0KGRlbHRhX2RlbHRhIDw9 IDMyMCk7CiAKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNyYyk7IGkrKykgewot CQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHNyY1tpXS5ibyk7Ci0JCQlkcm1faW50ZWxfYm9f dW5yZWZlcmVuY2UoZHN0W2ldLmJvKTsKKwkJCWludGVsX2J1Zl9jbG9zZShib3BzLCAmc3JjW2ld KTsKKwkJCWludGVsX2J1Zl9jbG9zZShib3BzLCAmZHN0W2ldKTsKIAkJfQogCi0JCWRybV9pbnRl bF9ib191bm1hcChibyk7Ci0JCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Ci0JCWludGVs X2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwotCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJv eShjb250ZXh0MCk7Ci0JCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNvbnRleHQxKTsK LQkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisJCWludGVsX2J1Zl91bm1hcChk c3RfYnVmKTsKKwkJaW50ZWxfYnVmX2Rlc3Ryb3koZHN0X2J1Zik7CisJCWludGVsX2JiX2Rlc3Ry b3koaWJiMCk7CisJCWludGVsX2JiX2Rlc3Ryb3koaWJiMSk7CisJCWdlbV9jb250ZXh0X2Rlc3Ry b3koZHJtX2ZkLCBjb250ZXh0MF9pZCk7CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJtX2ZkLCBj b250ZXh0MV9pZCk7CisJCWJ1Zl9vcHNfZGVzdHJveShib3BzKTsKIAkJX19wZXJmX2Nsb3NlKHN0 cmVhbV9mZCk7CiAJfQogCkBAIC0zNDA2LDExICszMzE3LDEwIEBAIGdlbjhfdGVzdF9zaW5nbGVf Y3R4X3JlbmRlcl90YXJnZXRfd3JpdGVzX2FfY291bnRlcih2b2lkKQogCiAJCWlndF9mb3JrX2hl bHBlcigmY2hpbGQpIHsKIAkJCXN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIgKmhl YWRlcjsKLQkJCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKLQkJCWRybV9pbnRlbF9jb250ZXh0 ICpjb250ZXh0MCwgKmNvbnRleHQxOwotCQkJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aDsKLQkJCXN0cnVjdCBpZ3RfYnVmIHNyY1szXSwgZHN0WzNdOwotCQkJZHJtX2ludGVsX2JvICpi bzsKKwkJCXN0cnVjdCBidWZfb3BzICpib3BzOworCQkJc3RydWN0IGludGVsX2JiICppYmIwLCAq aWJiMTsKKwkJCXN0cnVjdCBpbnRlbF9idWYgc3JjWzNdLCBkc3RbM10sICpkc3RfYnVmOworCQkJ dWludDMyX3QgY29udGV4dDBfaWQsIGNvbnRleHQxX2lkOwogCQkJdWludDMyX3QgKnJlcG9ydDBf MzIsICpyZXBvcnQxXzMyOwogCQkJdWludDMyX3QgKnByZXYsICpscHJldiA9IE5VTEw7CiAJCQl1 aW50NjRfdCB0aW1lc3RhbXAwXzY0LCB0aW1lc3RhbXAxXzY0OwpAQCAtMzQyOCwyMSArMzMzOCwx NyBAQCBnZW44X3Rlc3Rfc2luZ2xlX2N0eF9yZW5kZXJfdGFyZ2V0X3dyaXRlc19hX2NvdW50ZXIo dm9pZCkKIAkJCQkuZm9ybWF0ID0gdGVzdF9zZXQtPnBlcmZfb2FfZm9ybWF0CiAJCQl9OwogCi0J CQlidWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Ci0JCQlk cm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKKwkJCWJvcHMgPSBidWZf b3BzX2NyZWF0ZShkcm1fZmQpOwogCiAJCQlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUo c3JjKTsgaSsrKSB7Ci0JCQkJc2NyYXRjaF9idWZfaW5pdChidWZtZ3IsICZzcmNbaV0sIHdpZHRo LCBoZWlnaHQsIDB4ZmYwMDAwZmYpOwotCQkJCXNjcmF0Y2hfYnVmX2luaXQoYnVmbWdyLCAmZHN0 W2ldLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKKwkJCQlzY3JhdGNoX2J1Zl9pbml0KGJv cHMsICZzcmNbaV0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOworCQkJCXNjcmF0Y2hfYnVm X2luaXQoYm9wcywgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CiAJCQl9CiAK LQkJCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYnVmbWdyLCBkZXZpZCk7Ci0KLQkJ CWNvbnRleHQwID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOwotCQkJaWd0 X2Fzc2VydChjb250ZXh0MCk7Ci0KLQkJCWNvbnRleHQxID0gZHJtX2ludGVsX2dlbV9jb250ZXh0 X2NyZWF0ZShidWZtZ3IpOwotCQkJaWd0X2Fzc2VydChjb250ZXh0MSk7CisJCQlpYmIwID0gaW50 ZWxfYmJfY3JlYXRlKGRybV9mZCwgQkFUQ0hfU1opOworCQkJaWJiMSA9IGludGVsX2JiX2NyZWF0 ZShkcm1fZmQsIEJBVENIX1NaKTsKKwkJCWNvbnRleHQwX2lkID0gZ2VtX2NvbnRleHRfY3JlYXRl KGRybV9mZCk7CisJCQljb250ZXh0MV9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShkcm1fZmQpOwog CiAJCQlpZ3RfZGVidWcoInN1Ym1pdHRpbmcgd2FybSB1cCByZW5kZXJfY29weVxuIik7CiAKQEAg LTM0NjYsMzIgKzMzNzIsMzAgQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVuZGVyX3RhcmdldF93 cml0ZXNfYV9jb3VudGVyKHZvaWQpCiAJCQkgKiB1cCBwaW5uaW5nIHRoZSBjb250ZXh0IHNpbmNl IHRoZXJlIHdvbid0IGV2ZXIgYmUgYSBwaW5uaW5nCiAJCQkgKiBob29rIGNhbGxiYWNrLgogCQkJ ICovCi0JCQlyZW5kZXJfY29weShiYXRjaCwKLQkJCQkgICAgY29udGV4dDAsCisJCQlyZW5kZXJf Y29weShpYmIwLAorCQkJCSAgICBjb250ZXh0MF9pZCwKIAkJCQkgICAgJnNyY1swXSwgMCwgMCwg d2lkdGgsIGhlaWdodCwKIAkJCQkgICAgJmRzdFswXSwgMCwgMCk7CisJCQlpbnRlbF9iYl9zeW5j KGliYjApOwogCi0JCQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0X2lkKGNvbnRleHQw LCAmY3R4X2lkKTsKLQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKLQkJCWlndF9hc3NlcnRfbmVx KGN0eF9pZCwgMHhmZmZmZmZmZik7Ci0JCQlwcm9wZXJ0aWVzWzFdID0gY3R4X2lkOworCQkJcHJv cGVydGllc1sxXSA9IGNvbnRleHQwX2lkOwogCi0JCQlzY3JhdGNoX2J1Zl9tZW1zZXQoc3JjWzBd LmJvLCB3aWR0aCwgaGVpZ2h0LCAweGZmMDAwMGZmKTsKLQkJCXNjcmF0Y2hfYnVmX21lbXNldChk c3RbMF0uYm8sIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOworCQkJc2NyYXRjaF9idWZfbWVt c2V0KCZzcmNbMF0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOworCQkJc2NyYXRjaF9idWZf bWVtc2V0KCZkc3RbMF0sIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOwogCiAJCQlpZ3RfZGVi dWcoIm9wZW5pbmcgaTkxNS1wZXJmIHN0cmVhbVxuIik7CiAJCQlzdHJlYW1fZmQgPSBfX3BlcmZf b3Blbihkcm1fZmQsICZwYXJhbSwgZmFsc2UpOwogCi0JCQlibyA9IGRybV9pbnRlbF9ib19hbGxv YyhidWZtZ3IsICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKLQotCQkJcmV0ID0gZHJtX2lu dGVsX2JvX21hcChibywgdHJ1ZSAvKiB3cml0ZSBlbmFibGUgKi8pOwotCQkJaWd0X2Fzc2VydF9l cShyZXQsIDApOworCQkJZHN0X2J1ZiA9IGludGVsX2J1Zl9jcmVhdGUoYm9wcywgNDA5NiwgMSwg OCwgNjQsCisJCQkJCQkgICBJOTE1X1RJTElOR19OT05FLAorCQkJCQkJICAgSTkxNV9DT01QUkVT U0lPTl9OT05FKTsKIAotCQkJbWVtc2V0KGJvLT52aXJ0dWFsLCAweDgwLCA0MDk2KTsKLQkJCWRy bV9pbnRlbF9ib191bm1hcChibyk7CisJCQlpbnRlbF9idWZfY3B1X21hcChkc3RfYnVmLCB0cnVl IC8qIHdyaXRlIGVuYWJsZSAqLyk7CisJCQltZW1zZXQoZHN0X2J1Zi0+cHRyLCAweDgwLCA0MDk2 KTsKKwkJCWludGVsX2J1Zl91bm1hcChkc3RfYnVmKTsKIAotCQkJZW1pdF9zdGFsbF90aW1lc3Rh bXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkJCSAgICAgYm8sCisJCQllbWl0X3N0YWxsX3RpbWVzdGFt cF9hbmRfcnBjKGliYjAsCisJCQkJCQkgICAgIGRzdF9idWYsCiAJCQkJCQkgICAgIDUxMiAvKiB0 aW1lc3RhbXAgb2Zmc2V0ICovLAogCQkJCQkJICAgICAwLCAvKiByZXBvcnQgZHN0IG9mZnNldCAq LwogCQkJCQkJICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IGlkICovCkBAIC0zNTAxLDQ5ICsz NDA1LDQ2IEBAIGdlbjhfdGVzdF9zaW5nbGVfY3R4X3JlbmRlcl90YXJnZXRfd3JpdGVzX2FfY291 bnRlcih2b2lkKQogCQkJICogdGhhdCB0aGUgUElQRV9DT05UUk9MICsgTUlfUlBDIGNvbW1hbmRz IHdpbGwgYmUgaW4gYQogCQkJICogc2VwYXJhdGUgYmF0Y2ggZnJvbSB0aGUgY29weS4KIAkJCSAq LwotCQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0 MCk7CisJCQlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjAsIGNvbnRleHQw X2lkKTsKIAotCQkJcmVuZGVyX2NvcHkoYmF0Y2gsCi0JCQkJICAgIGNvbnRleHQwLAorCQkJcmVu ZGVyX2NvcHkoaWJiMCwKKwkJCQkgICAgY29udGV4dDBfaWQsCiAJCQkJICAgICZzcmNbMF0sIDAs IDAsIHdpZHRoLCBoZWlnaHQsCiAJCQkJICAgICZkc3RbMF0sIDAsIDApOwogCiAJCQkvKiBBbm90 aGVyIHJlZHVuZGFudCBmbHVzaCB0byBjbGFyaWZ5IGJhdGNoIGJvIGlzIGZyZWUgdG8gcmV1c2Ug Ki8KLQkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4 dDApOworCQkJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIwLCBjb250ZXh0 MF9pZCk7CiAKIAkJCS8qIHN1Ym1pdCB0d28gY29waWVzIG9uIHRoZSBvdGhlciBjb250ZXh0IHRv IGF2b2lkIGEgZmFsc2UKIAkJCSAqIHBvc2l0aXZlIGluIGNhc2UgdGhlIGRyaXZlciBzb21laG93 IGVuZGVkIHVwIGZpbHRlcmluZyBmb3IKIAkJCSAqIGNvbnRleHQxCiAJCQkgKi8KLQkJCXJlbmRl cl9jb3B5KGJhdGNoLAotCQkJCSAgICBjb250ZXh0MSwKKwkJCXJlbmRlcl9jb3B5KGliYjEsCisJ CQkJICAgIGNvbnRleHQxX2lkLAogCQkJCSAgICAmc3JjWzFdLCAwLCAwLCB3aWR0aCwgaGVpZ2h0 LAogCQkJCSAgICAmZHN0WzFdLCAwLCAwKTsKIAotCQkJcmV0ID0gZHJtX2ludGVsX2dlbV9jb250 ZXh0X2dldF9pZChjb250ZXh0MSwgJmN0eDFfaWQpOwotCQkJaWd0X2Fzc2VydF9lcShyZXQsIDAp OwotCQkJaWd0X2Fzc2VydF9uZXEoY3R4MV9pZCwgMHhmZmZmZmZmZik7Ci0KLQkJCXJlbmRlcl9j b3B5KGJhdGNoLAotCQkJCSAgICBjb250ZXh0MSwKKwkJCXJlbmRlcl9jb3B5KGliYjEsCisJCQkJ ICAgIGNvbnRleHQxX2lkLAogCQkJCSAgICAmc3JjWzJdLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LAog CQkJCSAgICAmZHN0WzJdLCAwLCAwKTsKIAogCQkJLyogQW5kIGFub3RoZXIgKi8KLQkJCWludGVs X2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDEpOworCQkJaW50 ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIxLCBjb250ZXh0MV9pZCk7CiAKLQkJ CWVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoYmF0Y2gsCi0JCQkJCQkgICAgIGJvLAorCQkJ ZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhpYmIxLAorCQkJCQkJICAgICBkc3RfYnVmLAog CQkJCQkJICAgICA1MjAgLyogdGltZXN0YW1wIG9mZnNldCAqLywKIAkJCQkJCSAgICAgMjU2LCAv KiByZXBvcnQgZHN0IG9mZnNldCAqLwogCQkJCQkJICAgICAweGJlZWZiZWVmKTsgLyogcmVwb3J0 IGlkICovCiAKLQkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwg Y29udGV4dDEpOworCQkJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIxLCBj b250ZXh0MV9pZCk7CisJCQlpbnRlbF9iYl9zeW5jKGliYjEpOworCQkJaW50ZWxfYmJfc3luYyhp YmIwKTsKIAotCQkJcmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UgLyogd3JpdGUgZW5h YmxlICovKTsKLQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJCWludGVsX2J1Zl9jcHVfbWFw KGRzdF9idWYsIGZhbHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7CiAKLQkJCXJlcG9ydDBfMzIgPSBi by0+dmlydHVhbDsKKwkJCXJlcG9ydDBfMzIgPSBkc3RfYnVmLT5wdHI7CiAJCQlpZ3RfYXNzZXJ0 X2VxKHJlcG9ydDBfMzJbMF0sIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAkJCWlndF9h c3NlcnRfbmVxKHJlcG9ydDBfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KIAkJCXByZXYgPSBy ZXBvcnQwXzMyOwpAQCAtMzU1NSw2ICszNDU2LDcgQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVu ZGVyX3RhcmdldF93cml0ZXNfYV9jb3VudGVyKHZvaWQpCiAJCQlpZ3RfYXNzZXJ0X2VxKHJlcG9y dDFfMzJbMF0sIDB4YmVlZmJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAkJCWlndF9hc3NlcnRfbmVx KHJlcG9ydDFfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KIAkJCWN0eDFfaWQgPSByZXBvcnQx XzMyWzJdOworCQkJaWd0X2RlYnVnKCJDVFgxIElEOiAldVxuIiwgY3R4MV9pZCk7CiAJCQlkdW1w X3JlcG9ydChyZXBvcnQxXzMyLCA2NCwgInJlcG9ydDFfMzIiKTsKIAogCQkJbWVtc2V0KGFjY3Vt dWxhdG9yLmRlbHRhcywgMCwgc2l6ZW9mKGFjY3VtdWxhdG9yLmRlbHRhcykpOwpAQCAtMzU2OSw4 ICszNDcxLDggQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVuZGVyX3RhcmdldF93cml0ZXNfYV9j b3VudGVyKHZvaWQpCiAJCQlpZ3RfZGVidWcoImN0eF9pZCAwID0gJXVcbiIsIHJlcG9ydDBfMzJb Ml0pOwogCQkJaWd0X2RlYnVnKCJjdHhfaWQgMSA9ICV1XG4iLCByZXBvcnQxXzMyWzJdKTsKIAot CQkJdGltZXN0YW1wMF82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90ICopYm8tPnZpcnR1YWwp ICsgNTEyKTsKLQkJCXRpbWVzdGFtcDFfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWJv LT52aXJ0dWFsKSArIDUyMCk7CisJCQl0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRfdCAqKSgoKHVp bnQ4X3QgKilkc3RfYnVmLT5wdHIpICsgNTEyKTsKKwkJCXRpbWVzdGFtcDFfNjQgPSAqKHVpbnQ2 NF90ICopKCgodWludDhfdCAqKWRzdF9idWYtPnB0cikgKyA1MjApOwogCiAJCQlpZ3RfZGVidWco InRzX3RpbWVzdGFtcDY0IDAgPSAlIlBSSXU2NCJcbiIsIHRpbWVzdGFtcDBfNjQpOwogCQkJaWd0 X2RlYnVnKCJ0c190aW1lc3RhbXA2NCAxID0gJSJQUkl1NjQiXG4iLCB0aW1lc3RhbXAxXzY0KTsK QEAgLTM3NTgsMjcgKzM2NjAsMjYgQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVuZGVyX3Rhcmdl dF93cml0ZXNfYV9jb3VudGVyKHZvaWQpCiAJCQkJICB3aWR0aCwgaGVpZ2h0KTsKIAkJCWFjY3Vt dWxhdG9yX3ByaW50KCZhY2N1bXVsYXRvciwgImZpbHRlcmVkIik7CiAKLQkJCXJldCA9IGRybV9p bnRlbF9ib19tYXAoc3JjWzBdLmJvLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUgKi8pOwotCQkJaWd0 X2Fzc2VydF9lcShyZXQsIDApOwotCQkJcmV0ID0gZHJtX2ludGVsX2JvX21hcChkc3RbMF0uYm8s IGZhbHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7Ci0JCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJ CQlpbnRlbF9idWZfY3B1X21hcCgmc3JjWzBdLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUgKi8pOwor CQkJaW50ZWxfYnVmX2NwdV9tYXAoJmRzdFswXSwgZmFsc2UgLyogd3JpdGUgZW5hYmxlICovKTsK IAotCQkJcmV0ID0gbWVtY21wKHNyY1swXS5iby0+dmlydHVhbCwgZHN0WzBdLmJvLT52aXJ0dWFs LCA0ICogd2lkdGggKiBoZWlnaHQpOwotCQkJZHJtX2ludGVsX2JvX3VubWFwKHNyY1swXS5ibyk7 Ci0JCQlkcm1faW50ZWxfYm9fdW5tYXAoZHN0WzBdLmJvKTsKKwkJCXJldCA9IG1lbWNtcChzcmNb MF0ucHRyLCBkc3RbMF0ucHRyLCA0ICogd2lkdGggKiBoZWlnaHQpOworCQkJaW50ZWxfYnVmX3Vu bWFwKCZzcmNbMF0pOworCQkJaW50ZWxfYnVmX3VubWFwKCZkc3RbMF0pOwogCiBhZ2FpbjoKIAkJ CWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcmMpOyBpKyspIHsKLQkJCQlkcm1faW50 ZWxfYm9fdW5yZWZlcmVuY2Uoc3JjW2ldLmJvKTsKLQkJCQlkcm1faW50ZWxfYm9fdW5yZWZlcmVu Y2UoZHN0W2ldLmJvKTsKKwkJCQlpbnRlbF9idWZfY2xvc2UoYm9wcywgJnNyY1tpXSk7CisJCQkJ aW50ZWxfYnVmX2Nsb3NlKGJvcHMsICZkc3RbaV0pOwogCQkJfQogCi0JCQlkcm1faW50ZWxfYm9f dW5tYXAoYm8pOwotCQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKLQkJCWludGVsX2Jh dGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwotCQkJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3ko Y29udGV4dDApOwotCQkJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koY29udGV4dDEpOwot CQkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisJCQlpbnRlbF9idWZfdW5tYXAo ZHN0X2J1Zik7CisJCQlpbnRlbF9idWZfZGVzdHJveShkc3RfYnVmKTsKKwkJCWludGVsX2JiX2Rl c3Ryb3koaWJiMCk7CisJCQlpbnRlbF9iYl9kZXN0cm95KGliYjEpOworCQkJZ2VtX2NvbnRleHRf ZGVzdHJveShkcm1fZmQsIGNvbnRleHQwX2lkKTsKKwkJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJt X2ZkLCBjb250ZXh0MV9pZCk7CisJCQlidWZfb3BzX2Rlc3Ryb3koYm9wcyk7CiAJCQlfX3BlcmZf Y2xvc2Uoc3RyZWFtX2ZkKTsKIAkJCWdlbV9xdWllc2NlbnRfZ3B1KGRybV9mZCk7CiAKQEAgLTM4 MjUsMTEgKzM3MjYsMTAgQEAgc3RhdGljIHZvaWQgZ2VuMTJfc2luZ2xlX2N0eF9oZWxwZXIodm9p ZCkKIAkJLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShwcm9wZXJ0aWVzKSAvIDIsCiAJCS5w cm9wZXJ0aWVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihwcm9wZXJ0aWVzKSwKIAl9OwotCWRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1ncjsKLQlkcm1faW50ZWxfY29udGV4dCAqY29udGV4dDAsICpjb250 ZXh0MTsKLQlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwotCXN0cnVjdCBpZ3RfYnVm IHNyY1szXSwgZHN0WzNdOwotCWRybV9pbnRlbF9ibyAqYm87CisJc3RydWN0IGJ1Zl9vcHMgKmJv cHM7CisJc3RydWN0IGludGVsX2JiICppYmIwLCAqaWJiMTsKKwlzdHJ1Y3QgaW50ZWxfYnVmIHNy Y1szXSwgZHN0WzNdLCAqZHN0X2J1ZjsKKwl1aW50MzJfdCBjb250ZXh0MF9pZCwgY29udGV4dDFf aWQ7CiAJdWludDMyX3QgKnJlcG9ydDBfMzIsICpyZXBvcnQxXzMyLCAqcmVwb3J0Ml8zMiwgKnJl cG9ydDNfMzI7CiAJdWludDY0X3QgdGltZXN0YW1wMF82NCwgdGltZXN0YW1wMV82NDsKIAl1aW50 MzJfdCBkZWx0YV90czY0LCBkZWx0YV9vYTMyOwpAQCAtMzg0NSwyMSArMzc0NSwxNyBAQCBzdGF0 aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogCQkuZm9ybWF0ID0gdGVzdF9z ZXQtPnBlcmZfb2FfZm9ybWF0CiAJfTsKIAotCWJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2Vt X2luaXQoZHJtX2ZkLCA0MDk2KTsKLQlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2Uo YnVmbWdyKTsKKwlib3BzID0gYnVmX29wc19jcmVhdGUoZHJtX2ZkKTsKIAogCWZvciAoaW50IGkg PSAwOyBpIDwgQVJSQVlfU0laRShzcmMpOyBpKyspIHsKLQkJc2NyYXRjaF9idWZfaW5pdChidWZt Z3IsICZzcmNbaV0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOwotCQlzY3JhdGNoX2J1Zl9p bml0KGJ1Zm1nciwgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CisJCXNjcmF0 Y2hfYnVmX2luaXQoYm9wcywgJnNyY1tpXSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7CisJ CXNjcmF0Y2hfYnVmX2luaXQoYm9wcywgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBm Zik7CiAJfQogCi0JYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3IsIGRldmlk KTsKLQotCWNvbnRleHQwID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOwot CWlndF9hc3NlcnQoY29udGV4dDApOwotCi0JY29udGV4dDEgPSBkcm1faW50ZWxfZ2VtX2NvbnRl eHRfY3JlYXRlKGJ1Zm1ncik7Ci0JaWd0X2Fzc2VydChjb250ZXh0MSk7CisJaWJiMCA9IGludGVs X2JiX2NyZWF0ZShkcm1fZmQsIEJBVENIX1NaKTsKKwlpYmIxID0gaW50ZWxfYmJfY3JlYXRlKGRy bV9mZCwgQkFUQ0hfU1opOworCWNvbnRleHQwX2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGRybV9m ZCk7CisJY29udGV4dDFfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsKIAogCWlndF9k ZWJ1Zygic3VibWl0dGluZyB3YXJtIHVwIHJlbmRlcl9jb3B5XG4iKTsKIApAQCAtMzg4Myw0NCAr Mzc3OSw0MiBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogCSAq IHVwIHBpbm5pbmcgdGhlIGNvbnRleHQgc2luY2UgdGhlcmUgd29uJ3QgZXZlciBiZSBhIHBpbm5p bmcKIAkgKiBob29rIGNhbGxiYWNrLgogCSAqLwotCXJlbmRlcl9jb3B5KGJhdGNoLCBjb250ZXh0 MCwKKwlyZW5kZXJfY29weShpYmIwLCBjb250ZXh0MF9pZCwKIAkJICAgICZzcmNbMF0sIDAsIDAs IHdpZHRoLCBoZWlnaHQsCiAJCSAgICAmZHN0WzBdLCAwLCAwKTsKIAogCS8qIEluaXRpYWxpemUg dGhlIGNvbnRleHQgcGFyYW1ldGVyIHRvIHRoZSBwZXJmIG9wZW4gaW9jdGwgaGVyZSAqLwotCXJl dCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfaWQoY29udGV4dDAsICZjdHgwX2lkKTsKLQlp Z3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0JaWd0X2Fzc2VydF9uZXEoY3R4MF9pZCwgMHhmZmZmZmZm Zik7Ci0JcHJvcGVydGllc1sxXSA9IGN0eDBfaWQ7CisJcHJvcGVydGllc1sxXSA9IGNvbnRleHQw X2lkOwogCiAJaWd0X2RlYnVnKCJvcGVuaW5nIGk5MTUtcGVyZiBzdHJlYW1cbiIpOwogCXN0cmVh bV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFtLCBmYWxzZSk7CiAKLQlibyA9IGRybV9p bnRlbF9ib19hbGxvYyhidWZtZ3IsICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKKwlkc3Rf YnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA0MDk2LCAxLCA4LCA2NCwKKwkJCQkgICBJOTE1 X1RJTElOR19OT05FLAorCQkJCSAgIEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CiAKIAkvKiBTZXQg d3JpdGUgZG9tYWluIHRvIGNwdSBicmllZmx5IHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIDgwcyAq LwotCXJldCA9IGRybV9pbnRlbF9ib19tYXAoYm8sIHRydWUpOwotCWlndF9hc3NlcnRfZXEocmV0 LCAwKTsKLQltZW1zZXQoYm8tPnZpcnR1YWwsIDB4ODAsIDIwNDgpOwotCW1lbXNldChiby0+dmly dHVhbCArIDIwNDgsIDAsIDIwNDgpOwotCWRybV9pbnRlbF9ib191bm1hcChibyk7CisJaW50ZWxf YnVmX2NwdV9tYXAoZHN0X2J1ZiwgdHJ1ZSAvKiB3cml0ZSBlbmFibGUgKi8pOworCW1lbXNldChk c3RfYnVmLT5wdHIsIDB4ODAsIDIwNDgpOworCW1lbXNldCgodWludDhfdCAqKSBkc3RfYnVmLT5w dHIgKyAyMDQ4LCAwLCAyMDQ4KTsKKwlpbnRlbF9idWZfdW5tYXAoZHN0X2J1Zik7CiAKIAkvKiBT dWJtaXQgYW4gbWktcnBjIHRvIGNvbnRleHQwIGJlZm9yZSBtZWFzdXJhYmxlIHdvcmsgKi8KICNk ZWZpbmUgQk9fVElNRVNUQU1QX09GRlNFVDAgMTAyNAogI2RlZmluZSBCT19SRVBPUlRfT0ZGU0VU MCAwCiAjZGVmaW5lIEJPX1JFUE9SVF9JRDAgMHhkZWFkYmVlZgotCWVtaXRfc3RhbGxfdGltZXN0 YW1wX2FuZF9ycGMoYmF0Y2gsCi0JCQkJICAgICBibywKKwllbWl0X3N0YWxsX3RpbWVzdGFtcF9h bmRfcnBjKGliYjAsCisJCQkJICAgICBkc3RfYnVmLAogCQkJCSAgICAgQk9fVElNRVNUQU1QX09G RlNFVDAsCiAJCQkJICAgICBCT19SRVBPUlRfT0ZGU0VUMCwKIAkJCQkgICAgIEJPX1JFUE9SVF9J RDApOwotCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4 dDApOworCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRleHQoaWJiMCwgY29udGV4dDBf aWQpOwogCiAJLyogVGhpcyBpcyB0aGUgd29yay9jb250ZXh0IHRoYXQgaXMgbWVhc3VyZWQgZm9y IGNvdW50ZXIgaW5jcmVtZW50cyAqLwotCXJlbmRlcl9jb3B5KGJhdGNoLCBjb250ZXh0MCwKKwly ZW5kZXJfY29weShpYmIwLCBjb250ZXh0MF9pZCwKIAkJICAgICZzcmNbMF0sIDAsIDAsIHdpZHRo LCBoZWlnaHQsCiAJCSAgICAmZHN0WzBdLCAwLCAwKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVz aF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQwKTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJf d2l0aF9jb250ZXh0KGliYjAsIGNvbnRleHQwX2lkKTsKIAogCS8qIFN1Ym1pdCBhbiBtaS1ycGMg dG8gY29udGV4dDEgYmVmb3JlIHdvcmsKIAkgKgpAQCAtMzkzMSw1NCArMzgyNSw1MSBAQCBzdGF0 aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogI2RlZmluZSBCT19USU1FU1RB TVBfT0ZGU0VUMiAxMDQwCiAjZGVmaW5lIEJPX1JFUE9SVF9PRkZTRVQyIDUxMgogI2RlZmluZSBC T19SRVBPUlRfSUQyIDB4MDBjMGZmZWUKLQllbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBjKGJh dGNoLAotCQkJCSAgICAgYm8sCisJZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhpYmIxLAor CQkJCSAgICAgZHN0X2J1ZiwKIAkJCQkgICAgIEJPX1RJTUVTVEFNUF9PRkZTRVQyLAogCQkJCSAg ICAgQk9fUkVQT1JUX09GRlNFVDIsCiAJCQkJICAgICBCT19SRVBPUlRfSUQyKTsKLQlpbnRlbF9i YXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQxKTsKKwlpbnRlbF9i Yl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjEsIGNvbnRleHQxX2lkKTsKIAogCS8qIFN1 Ym1pdCB0d28gY29waWVzIG9uIHRoZSBvdGhlciBjb250ZXh0IHRvIGF2b2lkIGEgZmFsc2UKIAkg KiBwb3NpdGl2ZSBpbiBjYXNlIHRoZSBkcml2ZXIgc29tZWhvdyBlbmRlZCB1cCBmaWx0ZXJpbmcg Zm9yCiAJICogY29udGV4dDEKIAkgKi8KLQlyZW5kZXJfY29weShiYXRjaCwgY29udGV4dDEsCisJ cmVuZGVyX2NvcHkoaWJiMSwgY29udGV4dDFfaWQsCiAJCSAgICAmc3JjWzFdLCAwLCAwLCB3aWR0 aCwgaGVpZ2h0LAogCQkgICAgJmRzdFsxXSwgMCwgMCk7Ci0JcmV0ID0gZHJtX2ludGVsX2dlbV9j b250ZXh0X2dldF9pZChjb250ZXh0MSwgJmN0eDFfaWQpOwotCWlndF9hc3NlcnRfZXEocmV0LCAw KTsKLQlpZ3RfYXNzZXJ0X25lcShjdHgxX2lkLCAweGZmZmZmZmZmKTsKIAotCXJlbmRlcl9jb3B5 KGJhdGNoLCBjb250ZXh0MSwKKwlyZW5kZXJfY29weShpYmIxLCBjb250ZXh0MV9pZCwKIAkJICAg ICZzcmNbMl0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJCSAgICAmZHN0WzJdLCAwLCAwKTsKLQlp bnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQxKTsKKwlp bnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjEsIGNvbnRleHQxX2lkKTsKIAog CS8qIFN1Ym1pdCBhbiBtaS1ycGMgdG8gY29udGV4dDEgYWZ0ZXIgYWxsIHdvcmsgKi8KICNkZWZp bmUgQk9fVElNRVNUQU1QX09GRlNFVDMgMTA0OAogI2RlZmluZSBCT19SRVBPUlRfT0ZGU0VUMyA3 NjgKICNkZWZpbmUgQk9fUkVQT1JUX0lEMyAweDAxYzBmZmVlCi0JZW1pdF9zdGFsbF90aW1lc3Rh bXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkgICAgIGJvLAorCWVtaXRfc3RhbGxfdGltZXN0YW1wX2Fu ZF9ycGMoaWJiMSwKKwkJCQkgICAgIGRzdF9idWYsCiAJCQkJICAgICBCT19USU1FU1RBTVBfT0ZG U0VUMywKIAkJCQkgICAgIEJPX1JFUE9SVF9PRkZTRVQzLAogCQkJCSAgICAgQk9fUkVQT1JUX0lE Myk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0 MSk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIxLCBjb250ZXh0MV9p ZCk7CiAKIAkvKiBTdWJtaXQgYW4gbWktcnBjIHRvIGNvbnRleHQwIGFmdGVyIGFsbCBtZWFzdXJh YmxlIHdvcmsgKi8KICNkZWZpbmUgQk9fVElNRVNUQU1QX09GRlNFVDEgMTAzMgogI2RlZmluZSBC T19SRVBPUlRfT0ZGU0VUMSAyNTYKICNkZWZpbmUgQk9fUkVQT1JUX0lEMSAweGJlZWZiZWVmCi0J ZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkgICAgIGJvLAorCWVtaXRf c3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoaWJiMCwKKwkJCQkgICAgIGRzdF9idWYsCiAJCQkJICAg ICBCT19USU1FU1RBTVBfT0ZGU0VUMSwKIAkJCQkgICAgIEJPX1JFUE9SVF9PRkZTRVQxLAogCQkJ CSAgICAgQk9fUkVQT1JUX0lEMSk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250 ZXh0KGJhdGNoLCBjb250ZXh0MCk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4 dChpYmIwLCBjb250ZXh0MF9pZCk7CisJaW50ZWxfYmJfc3luYyhpYmIwKTsKKwlpbnRlbF9iYl9z eW5jKGliYjEpOwogCi0JLyogU2V0IHdyaXRlIGRvbWFpbiB0byBub25lICovCi0JcmV0ID0gZHJt X2ludGVsX2JvX21hcChibywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlpbnRl bF9idWZfY3B1X21hcChkc3RfYnVmLCBmYWxzZSk7CiAKIAkvKiBTYW5pdHkgY2hlY2sgcmVwb3J0 cwogCSAqIHJlcG9ydFhfMzJbMF06IHJlcG9ydCBpZCBwYXNzZWQgd2l0aCBtaS1ycGMKQEAgLTM5 OTAsNyArMzg4MSw3IEBAIHN0YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQp CiAJICogcmVwb3J0Ml8zMjogc3RhcnQgb2Ygb3RoZXIgd29yawogCSAqIHJlcG9ydDNfMzI6IGVu ZCBvZiBvdGhlciB3b3JrCiAJICovCi0JcmVwb3J0MF8zMiA9IGJvLT52aXJ0dWFsOworCXJlcG9y dDBfMzIgPSBkc3RfYnVmLT5wdHI7CiAJaWd0X2Fzc2VydF9lcShyZXBvcnQwXzMyWzBdLCAweGRl YWRiZWVmKTsKIAlpZ3RfYXNzZXJ0X25lcShyZXBvcnQwXzMyWzFdLCAwKTsKIAljdHgwX2lkID0g cmVwb3J0MF8zMlsyXTsKQEAgLTQwMDEsNiArMzg5Miw3IEBAIHN0YXRpYyB2b2lkIGdlbjEyX3Np bmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJaWd0X2Fzc2VydF9lcShyZXBvcnQxXzMyWzBdLCAweGJl ZWZiZWVmKTsKIAlpZ3RfYXNzZXJ0X25lcShyZXBvcnQxXzMyWzFdLCAwKTsKIAljdHgxX2lkID0g cmVwb3J0MV8zMlsyXTsKKwlpZ3RfZGVidWcoIkNUWCBJRDE6ICV1XG4iLCBjdHgxX2lkKTsKIAlk dW1wX3JlcG9ydChyZXBvcnQxXzMyLCA2NCwgInJlcG9ydDFfMzIiKTsKIAogCS8qIFZlcmlmeSB0 aGF0IGNvdW50ZXJzIGluIGNvbnRleHQxIGFyZSBhbGwgemVyb2VzICovCkBAIC00MDA5LDcgKzM5 MDEsNyBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogCWlndF9h c3NlcnRfbmVxKHJlcG9ydDJfMzJbMV0sIDApOwogCWR1bXBfcmVwb3J0KHJlcG9ydDJfMzIsIDY0 LCAicmVwb3J0Ml8zMiIpOwogCWlndF9hc3NlcnRfZXEoMCwgbWVtY21wKCZyZXBvcnQyXzMyWzRd LAotCQkJCWJvLT52aXJ0dWFsICsgMjA0OCwKKwkJCQkodWludDhfdCAqKSBkc3RfYnVmLT5wdHIg KyAyMDQ4LAogCQkJCTI0MCkpOwogCiAJcmVwb3J0M18zMiA9IHJlcG9ydDBfMzIgKyAxOTI7CkBA IC00MDE3LDcgKzM5MDksNyBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2 b2lkKQogCWlndF9hc3NlcnRfbmVxKHJlcG9ydDNfMzJbMV0sIDApOwogCWR1bXBfcmVwb3J0KHJl cG9ydDNfMzIsIDY0LCAicmVwb3J0M18zMiIpOwogCWlndF9hc3NlcnRfZXEoMCwgbWVtY21wKCZy ZXBvcnQzXzMyWzRdLAotCQkJCWJvLT52aXJ0dWFsICsgMjA0OCwKKwkJCQkodWludDhfdCAqKSBk c3RfYnVmLT5wdHIgKyAyMDQ4LAogCQkJCTI0MCkpOwogCiAJLyogQWNjdW11bGF0ZSBkZWx0YXMg Zm9yIGNvdW50ZXJzIC0gQTAsIEEyMSBhbmQgQTI2ICovCkBAIC00MDM3LDggKzM5MjksOCBAQCBz dGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogCSAqIHRoZSBPQSByZXBv cnQgdGltZXN0YW1wcyBzaG91bGQgYmUgYWxtb3N0IGlkZW50aWNhbCBidXQKIAkgKiBhbGxvdyBh IDUwMCBuYW5vc2Vjb25kcyBtYXJnaW4uCiAJICovCi0JdGltZXN0YW1wMF82NCA9ICoodWludDY0 X3QgKikoKCh1aW50OF90ICopYm8tPnZpcnR1YWwpICsgQk9fVElNRVNUQU1QX09GRlNFVDApOwot CXRpbWVzdGFtcDFfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWJvLT52aXJ0dWFsKSAr IEJPX1RJTUVTVEFNUF9PRkZTRVQxKTsKKwl0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRfdCAqKSgo KHVpbnQ4X3QgKilkc3RfYnVmLT5wdHIpICsgQk9fVElNRVNUQU1QX09GRlNFVDApOworCXRpbWVz dGFtcDFfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWRzdF9idWYtPnB0cikgKyBCT19U SU1FU1RBTVBfT0ZGU0VUMSk7CiAKIAlpZ3RfZGVidWcoInRzX3RpbWVzdGFtcDY0IDAgPSAlIlBS SXU2NCJcbiIsIHRpbWVzdGFtcDBfNjQpOwogCWlndF9kZWJ1ZygidHNfdGltZXN0YW1wNjQgMSA9 ICUiUFJJdTY0IlxuIiwgdGltZXN0YW1wMV82NCk7CkBAIC00MDczLDIwICszOTY1LDE4IEBAIHN0 YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJLyogVmVyaWZ5IHRoYXQg dGhlIHdvcmsgYWN0dWFsbHkgaGFwcGVuZWQgYnkgY29tcGFyaW5nIHRoZSBzcmMKIAkgKiBhbmQg ZHN0IGJ1ZmZlcnMKIAkgKi8KLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKHNyY1swXS5ibywgZmFs c2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGRz dFswXS5ibywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlpbnRlbF9idWZfY3B1 X21hcCgmc3JjWzBdLCBmYWxzZSk7CisJaW50ZWxfYnVmX2NwdV9tYXAoJmRzdFswXSwgZmFsc2Up OworCisJcmV0ID0gbWVtY21wKHNyY1swXS5wdHIsIGRzdFswXS5wdHIsIDQgKiB3aWR0aCAqIGhl aWdodCk7CisJaW50ZWxfYnVmX3VubWFwKCZzcmNbMF0pOworCWludGVsX2J1Zl91bm1hcCgmZHN0 WzBdKTsKIAotCXJldCA9IG1lbWNtcChzcmNbMF0uYm8tPnZpcnR1YWwsIGRzdFswXS5iby0+dmly dHVhbCwgNCAqIHdpZHRoICogaGVpZ2h0KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJYWNjdW11bGF0 b3JfcHJpbnQoJmFjY3VtdWxhdG9yLCAidG90YWwiKTsKIAkJZXhpdChFQUdBSU4pOwogCX0KIAot CWRybV9pbnRlbF9ib191bm1hcChzcmNbMF0uYm8pOwotCWRybV9pbnRlbF9ib191bm1hcChkc3Rb MF0uYm8pOwotCiAJLyogQ2hlY2sgdGhhdCB0aGlzIHRlc3QgcGFzc2VkLiBUaGUgdGVzdCBtZWFz dXJlcyB0aGUgbnVtYmVyIG9mIDJ4MgogCSAqIHNhbXBsZXMgd3JpdHRlbiB0byB0aGUgcmVuZGVy IHRhcmdldCB1c2luZyB0aGUgY291bnRlciBBMjYuIEZvcgogCSAqIE9BUiwgdGhpcyBjb3VudGVy IHdpbGwgb25seSBoYXZlIGluY3JlbWVudHMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYwpAQCAt NDA5NiwxNiArMzk4NiwxNyBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2 b2lkKQogCiAJLyogQ2xlYW4gdXAgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUo c3JjKTsgaSsrKSB7Ci0JCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShzcmNbaV0uYm8pOwotCQlk cm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoZHN0W2ldLmJvKTsKKwkJaW50ZWxfYnVmX2Nsb3NlKGJv cHMsICZzcmNbaV0pOworCQlpbnRlbF9idWZfY2xvc2UoYm9wcywgJmRzdFtpXSk7CiAJfQogCi0J ZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKLQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwot CWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwotCWRybV9pbnRlbF9nZW1fY29udGV4dF9k ZXN0cm95KGNvbnRleHQwKTsKLQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShjb250ZXh0 MSk7Ci0JZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisJaW50ZWxfYnVmX3VubWFw KGRzdF9idWYpOworCWludGVsX2J1Zl9kZXN0cm95KGRzdF9idWYpOworCWludGVsX2JiX2Rlc3Ry b3koaWJiMCk7CisJaW50ZWxfYmJfZGVzdHJveShpYmIxKTsKKwlnZW1fY29udGV4dF9kZXN0cm95 KGRybV9mZCwgY29udGV4dDBfaWQpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJtX2ZkLCBjb250 ZXh0MV9pZCk7CisJYnVmX29wc19kZXN0cm95KGJvcHMpOwogCV9fcGVyZl9jbG9zZShzdHJlYW1f ZmQpOwogfQogCi0tIAoyLjI2LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0 LWRldgo=