From: Dave Airlie Subject: [PATCH] amdgpu/dc: separate out some common code from bios parsers. Date: Thu, 28 Sep 2017 11:24:06 +1000 Message-ID: <20170928012406.27378-1-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgZXh0cmFjdHMgdGhl IGJpb3MgcGFyc2VyIG9iamVjdCBpZCBoYW5kbGluZyBpbnRvIGEgY29tbW9uIGZpbGUuCgpTaWdu ZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9iaW9zL01ha2VmaWxlICAgICAgIHwgICAyICstCiBkcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvYmlvcy9iaW9zX3BhcnNlci5jICB8IDI3NCArLS0t LS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Jpb3MvYmlv c19wYXJzZXIyLmMgfCAyODQgKy0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9kcm0vYW1kL2Rpc3Bs YXkvZGMvYmlvcy9iaW9zX3BhcnNlcl9jb21tb24uYyAgIHwgMjg4ICsrKysrKysrKysrKysrKysr KysrKwogLi4uL2RybS9hbWQvZGlzcGxheS9kYy9iaW9zL2Jpb3NfcGFyc2VyX2NvbW1vbi5oICAg fCAgMzMgKysrCiA1IGZpbGVzIGNoYW5nZWQsIDMyNCBpbnNlcnRpb25zKCspLCA1NTcgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2Jpb3MvYmlvc19wYXJzZXJfY29tbW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvYmlvcy9iaW9zX3BhcnNlcl9jb21tb24uaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9iaW9zL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Jpb3MvTWFrZWZpbGUKaW5kZXggYTI2Y2M2MC4uNmVj ODE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Jpb3MvTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Jpb3MvTWFrZWZpbGUK QEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgJ2Jpb3MnIHN1Yi1jb21wb25lbnQg b2YgREFMLgogIyBJdCBwcm92aWRlcyB0aGUgcGFyc2luZyBhbmQgZXhlY3V0aW5nIGNvbnRyb2xz IGZvciBhdG9tIGJpb3MgaW1hZ2UuCiAKLUJJT1MgPSBiaW9zX3BhcnNlci5vIGJpb3NfcGFyc2Vy X2ludGVyZmFjZS5vICBiaW9zX3BhcnNlcl9oZWxwZXIubyBjb21tYW5kX3RhYmxlLm8gY29tbWFu ZF90YWJsZV9oZWxwZXIubworQklPUyA9IGJpb3NfcGFyc2VyLm8gYmlvc19wYXJzZXJfaW50ZXJm YWNlLm8gIGJpb3NfcGFyc2VyX2hlbHBlci5vIGNvbW1hbmRfdGFibGUubyBjb21tYW5kX3RhYmxl X2hlbHBlci5vIGJpb3NfcGFyc2VyX2NvbW1vbi5vCiAKIEJJT1MgKz0gY29tbWFuZF90YWJsZTIu byBjb21tYW5kX3RhYmxlX2hlbHBlcjIubyBiaW9zX3BhcnNlcjIubwogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvYmlvcy9iaW9zX3BhcnNlci5jIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Jpb3MvYmlvc19wYXJzZXIuYwppbmRleCAyYzQxMTQ0 Li5jNzQyNzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvYmlv cy9iaW9zX3BhcnNlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9iaW9z L2Jpb3NfcGFyc2VyLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJiaW9zX3BhcnNlcl90 eXBlc19pbnRlcm5hbC5oIgogI2luY2x1ZGUgImJpb3NfcGFyc2VyX2ludGVyZmFjZS5oIgogCisj aW5jbHVkZSAiYmlvc19wYXJzZXJfY29tbW9uLmgiCiAvKiBUT0RPIHJlbW92ZSAtIG9ubHkgbmVl ZGVkIGZvciBkZWZhdWx0IGkyYyBzcGVlZCAqLwogI2luY2x1ZGUgImRjLmgiCiAKQEAgLTU3LDE4 ICs1OCw2IEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGV4dF9kaXNwbGF5X2Nvbm5lY3Rpb25fZ3Vp ZFtOVU1CRVJfT0ZfVUNIQVJfRk9SX0dVSURdID0gewogCiAjZGVmaW5lIERBVEFfVEFCTEVTKHRh YmxlKSAoYnAtPm1hc3Rlcl9kYXRhX3RibC0+TGlzdE9mRGF0YVRhYmxlcy50YWJsZSkKIAotc3Rh dGljIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGVfZnJvbV9iaW9zX29iamVjdF9pZCgKLQl1 aW50MzJfdCBiaW9zX29iamVjdF9pZCk7Ci1zdGF0aWMgc3RydWN0IGdyYXBoaWNzX29iamVjdF9p ZCBvYmplY3RfaWRfZnJvbV9iaW9zX29iamVjdF9pZCgKLQl1aW50MzJfdCBiaW9zX29iamVjdF9p ZCk7Ci1zdGF0aWMgZW51bSBvYmplY3RfZW51bV9pZCBlbnVtX2lkX2Zyb21fYmlvc19vYmplY3Rf aWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpOwotc3RhdGljIGVudW0gZW5jb2Rlcl9pZCBlbmNv ZGVyX2lkX2Zyb21fYmlvc19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpOwotc3Rh dGljIGVudW0gY29ubmVjdG9yX2lkIGNvbm5lY3Rvcl9pZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKAot CXVpbnQzMl90IGJpb3Nfb2JqZWN0X2lkKTsKLXN0YXRpYyB1aW50MzJfdCBpZF9mcm9tX2Jpb3Nf b2JqZWN0X2lkKGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKLQl1aW50MzJfdCBiaW9zX29iamVjdF9p ZCk7Ci1zdGF0aWMgdWludDMyX3QgZ3B1X2lkX2Zyb21fYmlvc19vYmplY3RfaWQodWludDMyX3Qg Ymlvc19vYmplY3RfaWQpOwotc3RhdGljIGVudW0gZ2VuZXJpY19pZCBnZW5lcmljX2lkX2Zyb21f Ymlvc19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpOwogc3RhdGljIHZvaWQgZ2V0 X2F0b21fZGF0YV90YWJsZV9yZXZpc2lvbigKIAlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgKmF0 b21fZGF0YV90YmwsCiAJc3RydWN0IGF0b21fZGF0YV9yZXZpc2lvbiAqdGJsX3JldmlzaW9uKTsK QEAgLTI0MDMsMjY3ICsyMzkyLDYgQEAgc3RhdGljIHVpbnQzMl90IGdldF9kc3RfbnVtYmVyX2Zy b21fb2JqZWN0KHN0cnVjdCBiaW9zX3BhcnNlciAqYnAsCiAJcmV0dXJuICpudW1iZXI7CiB9CiAK LQotc3RhdGljIHN0cnVjdCBncmFwaGljc19vYmplY3RfaWQgb2JqZWN0X2lkX2Zyb21fYmlvc19v YmplY3RfaWQoCi0JdWludDMyX3QgYmlvc19vYmplY3RfaWQpCi17Ci0JZW51bSBvYmplY3RfdHlw ZSB0eXBlOwotCWVudW0gb2JqZWN0X2VudW1faWQgZW51bV9pZDsKLQlzdHJ1Y3QgZ3JhcGhpY3Nf b2JqZWN0X2lkIGdvX2lkID0geyAwIH07Ci0KLQl0eXBlID0gb2JqZWN0X3R5cGVfZnJvbV9iaW9z X29iamVjdF9pZChiaW9zX29iamVjdF9pZCk7Ci0KLQlpZiAoT0JKRUNUX1RZUEVfVU5LTk9XTiA9 PSB0eXBlKQotCQlyZXR1cm4gZ29faWQ7Ci0KLQllbnVtX2lkID0gZW51bV9pZF9mcm9tX2Jpb3Nf b2JqZWN0X2lkKGJpb3Nfb2JqZWN0X2lkKTsKLQotCWlmIChFTlVNX0lEX1VOS05PV04gPT0gZW51 bV9pZCkKLQkJcmV0dXJuIGdvX2lkOwotCi0JZ29faWQgPSBkYWxfZ3JhcGhpY3Nfb2JqZWN0X2lk X2luaXQoCi0JCQlpZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKHR5cGUsIGJpb3Nfb2JqZWN0X2lkKSwg ZW51bV9pZCwgdHlwZSk7Ci0KLQlyZXR1cm4gZ29faWQ7Ci19Ci0KLXN0YXRpYyBlbnVtIG9iamVj dF90eXBlIG9iamVjdF90eXBlX2Zyb21fYmlvc19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmpl Y3RfaWQpCi17Ci0JdWludDMyX3QgYmlvc19vYmplY3RfdHlwZSA9IChiaW9zX29iamVjdF9pZCAm IE9CSkVDVF9UWVBFX01BU0spCi0JCQkJPj4gT0JKRUNUX1RZUEVfU0hJRlQ7Ci0JZW51bSBvYmpl Y3RfdHlwZSBvYmplY3RfdHlwZTsKLQotCXN3aXRjaCAoYmlvc19vYmplY3RfdHlwZSkgewotCWNh c2UgR1JBUEhfT0JKRUNUX1RZUEVfR1BVOgotCQlvYmplY3RfdHlwZSA9IE9CSkVDVF9UWVBFX0dQ VTsKLQkJYnJlYWs7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSOgotCQlvYmplY3Rf dHlwZSA9IE9CSkVDVF9UWVBFX0VOQ09ERVI7Ci0JCWJyZWFrOwotCWNhc2UgR1JBUEhfT0JKRUNU X1RZUEVfQ09OTkVDVE9SOgotCQlvYmplY3RfdHlwZSA9IE9CSkVDVF9UWVBFX0NPTk5FQ1RPUjsK LQkJYnJlYWs7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfVFlQRV9ST1VURVI6Ci0JCW9iamVjdF90eXBl ID0gT0JKRUNUX1RZUEVfUk9VVEVSOwotCQlicmVhazsKLQljYXNlIEdSQVBIX09CSkVDVF9UWVBF X0dFTkVSSUM6Ci0JCW9iamVjdF90eXBlID0gT0JKRUNUX1RZUEVfR0VORVJJQzsKLQkJYnJlYWs7 Ci0JZGVmYXVsdDoKLQkJb2JqZWN0X3R5cGUgPSBPQkpFQ1RfVFlQRV9VTktOT1dOOwotCQlicmVh azsKLQl9Ci0KLQlyZXR1cm4gb2JqZWN0X3R5cGU7Ci19Ci0KLXN0YXRpYyBlbnVtIG9iamVjdF9l bnVtX2lkIGVudW1faWRfZnJvbV9iaW9zX29iamVjdF9pZCh1aW50MzJfdCBiaW9zX29iamVjdF9p ZCkKLXsKLQl1aW50MzJfdCBiaW9zX2VudW1faWQgPQotCQkJKGJpb3Nfb2JqZWN0X2lkICYgRU5V TV9JRF9NQVNLKSA+PiBFTlVNX0lEX1NISUZUOwotCWVudW0gb2JqZWN0X2VudW1faWQgaWQ7Ci0K LQlzd2l0Y2ggKGJpb3NfZW51bV9pZCkgewotCWNhc2UgR1JBUEhfT0JKRUNUX0VOVU1fSUQxOgot CQlpZCA9IEVOVU1fSURfMTsKLQkJYnJlYWs7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDI6 Ci0JCWlkID0gRU5VTV9JRF8yOwotCQlicmVhazsKLQljYXNlIEdSQVBIX09CSkVDVF9FTlVNX0lE MzoKLQkJaWQgPSBFTlVNX0lEXzM7Ci0JCWJyZWFrOwotCWNhc2UgR1JBUEhfT0JKRUNUX0VOVU1f SUQ0OgotCQlpZCA9IEVOVU1fSURfNDsKLQkJYnJlYWs7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfRU5V TV9JRDU6Ci0JCWlkID0gRU5VTV9JRF81OwotCQlicmVhazsKLQljYXNlIEdSQVBIX09CSkVDVF9F TlVNX0lENjoKLQkJaWQgPSBFTlVNX0lEXzY7Ci0JCWJyZWFrOwotCWNhc2UgR1JBUEhfT0JKRUNU X0VOVU1fSUQ3OgotCQlpZCA9IEVOVU1fSURfNzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWQg PSBFTlVNX0lEX1VOS05PV047Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBpZDsKLX0KLQotc3Rh dGljIHVpbnQzMl90IGlkX2Zyb21fYmlvc19vYmplY3RfaWQoZW51bSBvYmplY3RfdHlwZSB0eXBl LAotCXVpbnQzMl90IGJpb3Nfb2JqZWN0X2lkKQotewotCXN3aXRjaCAodHlwZSkgewotCWNhc2Ug T0JKRUNUX1RZUEVfR1BVOgotCQlyZXR1cm4gZ3B1X2lkX2Zyb21fYmlvc19vYmplY3RfaWQoYmlv c19vYmplY3RfaWQpOwotCWNhc2UgT0JKRUNUX1RZUEVfRU5DT0RFUjoKLQkJcmV0dXJuICh1aW50 MzJfdCllbmNvZGVyX2lkX2Zyb21fYmlvc19vYmplY3RfaWQoYmlvc19vYmplY3RfaWQpOwotCWNh c2UgT0JKRUNUX1RZUEVfQ09OTkVDVE9SOgotCQlyZXR1cm4gKHVpbnQzMl90KWNvbm5lY3Rvcl9p ZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKAotCQkJCWJpb3Nfb2JqZWN0X2lkKTsKLQljYXNlIE9CSkVD VF9UWVBFX0dFTkVSSUM6Ci0JCXJldHVybiBnZW5lcmljX2lkX2Zyb21fYmlvc19vYmplY3RfaWQo Ymlvc19vYmplY3RfaWQpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGlj IGVudW0gY29ubmVjdG9yX2lkIGNvbm5lY3Rvcl9pZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKAotCXVp bnQzMl90IGJpb3Nfb2JqZWN0X2lkKQotewotCXVpbnQzMl90IGJpb3NfY29ubmVjdG9yX2lkID0g Z3B1X2lkX2Zyb21fYmlvc19vYmplY3RfaWQoYmlvc19vYmplY3RfaWQpOwotCi0JZW51bSBjb25u ZWN0b3JfaWQgaWQ7Ci0KLQlzd2l0Y2ggKGJpb3NfY29ubmVjdG9yX2lkKSB7Ci0JY2FzZSBDT05O RUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOgotCQlpZCA9IENPTk5FQ1RPUl9JRF9T SU5HTEVfTElOS19EVklJOwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVB TF9MSU5LX0RWSV9JOgotCQlpZCA9IENPTk5FQ1RPUl9JRF9EVUFMX0xJTktfRFZJSTsKLQkJYnJl YWs7Ci0JY2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOgotCQlpZCA9 IENPTk5FQ1RPUl9JRF9TSU5HTEVfTElOS19EVklEOwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RP Ul9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOgotCQlpZCA9IENPTk5FQ1RPUl9JRF9EVUFMX0xJ TktfRFZJRDsKLQkJYnJlYWs7Ci0JY2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQToKLQkJaWQg PSBDT05ORUNUT1JfSURfVkdBOwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURf SERNSV9UWVBFX0E6Ci0JCWlkID0gQ09OTkVDVE9SX0lEX0hETUlfVFlQRV9BOwotCQlicmVhazsK LQljYXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUzoKLQkJaWQgPSBDT05ORUNUT1JfSURfTFZE UzsKLQkJYnJlYWs7Ci0JY2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX1BDSUVfQ09OTkVDVE9SOgot CQlpZCA9IENPTk5FQ1RPUl9JRF9QQ0lFOwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9PQkpF Q1RfSURfSEFSRENPREVfRFZJOgotCQlpZCA9IENPTk5FQ1RPUl9JRF9IQVJEQ09ERV9EVkk7Ci0J CWJyZWFrOwotCWNhc2UgQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVDoKLQkJaWQgPSBD T05ORUNUT1JfSURfRElTUExBWV9QT1JUOwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9PQkpF Q1RfSURfZURQOgotCQlpZCA9IENPTk5FQ1RPUl9JRF9FRFA7Ci0JCWJyZWFrOwotCWNhc2UgQ09O TkVDVE9SX09CSkVDVF9JRF9NWE06Ci0JCWlkID0gQ09OTkVDVE9SX0lEX01YTTsKLQkJYnJlYWs7 Ci0JZGVmYXVsdDoKLQkJaWQgPSBDT05ORUNUT1JfSURfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQot Ci0JcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgZW51bSBlbmNvZGVyX2lkIGVuY29kZXJfaWRfZnJv bV9iaW9zX29iamVjdF9pZCh1aW50MzJfdCBiaW9zX29iamVjdF9pZCkKLXsKLQl1aW50MzJfdCBi aW9zX2VuY29kZXJfaWQgPSBncHVfaWRfZnJvbV9iaW9zX29iamVjdF9pZChiaW9zX29iamVjdF9p ZCk7Ci0JZW51bSBlbmNvZGVyX2lkIGlkOwotCi0Jc3dpdGNoIChiaW9zX2VuY29kZXJfaWQpIHsK LQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0xWRFM6Ci0JCWlkID0gRU5DT0RFUl9J RF9JTlRFUk5BTF9MVkRTOwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVS TkFMX1RNRFMxOgotCQlpZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfVE1EUzE7Ci0JCWJyZWFrOwot CWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVE1EUzI6Ci0JCWlkID0gRU5DT0RFUl9J RF9JTlRFUk5BTF9UTURTMjsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRF Uk5BTF9EQUMxOgotCQlpZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfREFDMTsKLQkJYnJlYWs7Ci0J Y2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMyOgotCQlpZCA9IEVOQ09ERVJfSURf SU5URVJOQUxfREFDMjsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5B TF9MVlRNMToKLQkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX0xWVE0xOwotCQlicmVhazsKLQlj YXNlIEVOQ09ERVJfT0JKRUNUX0lEX0hETUlfSU5URVJOQUw6Ci0JCWlkID0gRU5DT0RFUl9JRF9J TlRFUk5BTF9IRE1JOwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFM X0tMRFNDUF9UTURTMToKLQkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX0tMRFNDUF9UTURTMTsK LQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToK LQkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMxOwotCQlicmVhazsKLQljYXNl IEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQlpZCA9IEVOQ09ERVJf SURfSU5URVJOQUxfS0xEU0NQX0RBQzI7Ci0JCWJyZWFrOwotCWNhc2UgRU5DT0RFUl9PQkpFQ1Rf SURfTVZQVV9GUEdBOgotCQlpZCA9IEVOQ09ERVJfSURfRVhURVJOQUxfTVZQVV9GUEdBOwotCQli cmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RESToKLQkJaWQgPSBFTkNP REVSX0lEX0lOVEVSTkFMX0RESTsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9J TlRFUk5BTF9VTklQSFk6Ci0JCWlkID0gRU5DT0RFUl9JRF9JTlRFUk5BTF9VTklQSFk7Ci0JCWJy ZWFrOwotCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOgotCQlp ZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOwotCQlicmVhazsKLQljYXNlIEVO Q09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTE6Ci0JCWlkID0gRU5DT0RFUl9JRF9JTlRF Uk5BTF9VTklQSFkxOwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFM X1VOSVBIWTI6Ci0JCWlkID0gRU5DT0RFUl9JRF9JTlRFUk5BTF9VTklQSFkyOwotCQlicmVhazsK LQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0FMTU9ORDogLyogRU5DT0RFUl9PQkpFQ1RfSURfTlVU TUVHICovCi0JCWlkID0gRU5DT0RFUl9JRF9FWFRFUk5BTF9OVVRNRUc7Ci0JCWJyZWFrOwotCWNh c2UgRU5DT0RFUl9PQkpFQ1RfSURfVFJBVklTOgotCQlpZCA9IEVOQ09ERVJfSURfRVhURVJOQUxf VFJBVklTOwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBI WTM6Ci0JCWlkID0gRU5DT0RFUl9JRF9JTlRFUk5BTF9VTklQSFkzOwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlpZCA9IEVOQ09ERVJfSURfVU5LTk9XTjsKLQkJQVNTRVJUKDApOwotCQlicmVhazsK LQl9Ci0KLQlyZXR1cm4gaWQ7Ci19Ci0KLXVpbnQzMl90IGdwdV9pZF9mcm9tX2Jpb3Nfb2JqZWN0 X2lkKHVpbnQzMl90IGJpb3Nfb2JqZWN0X2lkKQotewotCXJldHVybiAoYmlvc19vYmplY3RfaWQg JiBPQkpFQ1RfSURfTUFTSykgPj4gT0JKRUNUX0lEX1NISUZUOwotfQotCi1lbnVtIGdlbmVyaWNf aWQgZ2VuZXJpY19pZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKHVpbnQzMl90IGJpb3Nfb2JqZWN0X2lk KQotewotCXVpbnQzMl90IGJpb3NfZ2VuZXJpY19pZCA9IGdwdV9pZF9mcm9tX2Jpb3Nfb2JqZWN0 X2lkKGJpb3Nfb2JqZWN0X2lkKTsKLQotCWVudW0gZ2VuZXJpY19pZCBpZDsKLQotCXN3aXRjaCAo Ymlvc19nZW5lcmljX2lkKSB7Ci0JY2FzZSBHRU5FUklDX09CSkVDVF9JRF9NWE1fT1BNOgotCQlp ZCA9IEdFTkVSSUNfSURfTVhNX09QTTsKLQkJYnJlYWs7Ci0JY2FzZSBHRU5FUklDX09CSkVDVF9J RF9HTFNZTkM6Ci0JCWlkID0gR0VORVJJQ19JRF9HTFNZTkM7Ci0JCWJyZWFrOwotCWNhc2UgR0VO RVJJQ19PQkpFQ1RfSURfU1RFUkVPX1BJTjoKLQkJaWQgPSBHRU5FUklDX0lEX1NURVJFTzsKLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWQgPSBHRU5FUklDX0lEX1VOS05PV047Ci0JCWJyZWFrOwot CX0KLQotCXJldHVybiBpZDsKLX0KLQogc3RhdGljIHN0cnVjdCBkZXZpY2VfaWQgZGV2aWNlX3R5 cGVfZnJvbV9kZXZpY2VfaWQodWludDE2X3QgZGV2aWNlX2lkKQogewogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvYmlvcy9iaW9zX3BhcnNlcjIuYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9iaW9zL2Jpb3NfcGFyc2VyMi5jCmluZGV4IDk1ZmU1 MGYuLjFkZDdkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9i aW9zL2Jpb3NfcGFyc2VyMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9i aW9zL2Jpb3NfcGFyc2VyMi5jCkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbmNsdWRlICJkbV9zZXJ2 aWNlcy5oIgogCi0jZGVmaW5lIF9CSU9TX1BBUlNFUl8yXwotCiAjaW5jbHVkZSAiT2JqZWN0SUQu aCIKICNpbmNsdWRlICJhdG9tZmlybXdhcmUuaCIKIApAQCAtNDQsNiArNDIsNyBAQAogI2luY2x1 ZGUgImJpb3NfcGFyc2VyX3R5cGVzX2ludGVybmFsMi5oIgogI2luY2x1ZGUgImJpb3NfcGFyc2Vy X2ludGVyZmFjZS5oIgogCisjaW5jbHVkZSAiYmlvc19wYXJzZXJfY29tbW9uLmgiCiAjZGVmaW5l IExBU1RfUkVDT1JEX1RZUEUgMHhmZgogCiAKQEAgLTU0LDI2ICs1Myw2IEBAIHN0cnVjdCBpMmNf aWRfY29uZmlnX2FjY2VzcyB7CiAJdWludDhfdCB1Y0FjY2VzczsKIH07CiAKLXN0YXRpYyBlbnVt IG9iamVjdF90eXBlIG9iamVjdF90eXBlX2Zyb21fYmlvc19vYmplY3RfaWQoCi0JdWludDMyX3Qg Ymlvc19vYmplY3RfaWQpOwotCi1zdGF0aWMgZW51bSBvYmplY3RfZW51bV9pZCBlbnVtX2lkX2Zy b21fYmlvc19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpOwotCi1zdGF0aWMgc3Ry dWN0IGdyYXBoaWNzX29iamVjdF9pZCBvYmplY3RfaWRfZnJvbV9iaW9zX29iamVjdF9pZCgKLQl1 aW50MzJfdCBiaW9zX29iamVjdF9pZCk7Ci0KLXN0YXRpYyB1aW50MzJfdCBpZF9mcm9tX2Jpb3Nf b2JqZWN0X2lkKGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKLQl1aW50MzJfdCBiaW9zX29iamVjdF9p ZCk7Ci0KLXN0YXRpYyB1aW50MzJfdCBncHVfaWRfZnJvbV9iaW9zX29iamVjdF9pZCh1aW50MzJf dCBiaW9zX29iamVjdF9pZCk7Ci0KLXN0YXRpYyBlbnVtIGVuY29kZXJfaWQgZW5jb2Rlcl9pZF9m cm9tX2Jpb3Nfb2JqZWN0X2lkKHVpbnQzMl90IGJpb3Nfb2JqZWN0X2lkKTsKLQotc3RhdGljIGVu dW0gY29ubmVjdG9yX2lkIGNvbm5lY3Rvcl9pZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKAotCQkJCQkJ dWludDMyX3QgYmlvc19vYmplY3RfaWQpOwotCi1zdGF0aWMgZW51bSBnZW5lcmljX2lkIGdlbmVy aWNfaWRfZnJvbV9iaW9zX29iamVjdF9pZCh1aW50MzJfdCBiaW9zX29iamVjdF9pZCk7Ci0KIHN0 YXRpYyBlbnVtIGJwX3Jlc3VsdCBnZXRfZ3Bpb19pMmNfaW5mbyhzdHJ1Y3QgYmlvc19wYXJzZXIg KmJwLAogCXN0cnVjdCBhdG9tX2kyY19yZWNvcmQgKnJlY29yZCwKIAlzdHJ1Y3QgZ3JhcGhpY3Nf b2JqZWN0X2kyY19pbmZvICppbmZvKTsKQEAgLTE0OCwyNjcgKzEyNyw2IEBAIHN0YXRpYyB2b2lk IGdldF9hdG9tX2RhdGFfdGFibGVfcmV2aXNpb24oCiAJCQkodWludDMyX3QpIGF0b21fZGF0YV90 YmwtPmNvbnRlbnRfcmV2aXNpb24gJiAweDNmOwogfQogCi1zdGF0aWMgc3RydWN0IGdyYXBoaWNz X29iamVjdF9pZCBvYmplY3RfaWRfZnJvbV9iaW9zX29iamVjdF9pZCgKLQl1aW50MzJfdCBiaW9z X29iamVjdF9pZCkKLXsKLQllbnVtIG9iamVjdF90eXBlIHR5cGU7Ci0JZW51bSBvYmplY3RfZW51 bV9pZCBlbnVtX2lkOwotCXN0cnVjdCBncmFwaGljc19vYmplY3RfaWQgZ29faWQgPSB7IDAgfTsK LQotCXR5cGUgPSBvYmplY3RfdHlwZV9mcm9tX2Jpb3Nfb2JqZWN0X2lkKGJpb3Nfb2JqZWN0X2lk KTsKLQotCWlmICh0eXBlID09IE9CSkVDVF9UWVBFX1VOS05PV04pCi0JCXJldHVybiBnb19pZDsK LQotCWVudW1faWQgPSBlbnVtX2lkX2Zyb21fYmlvc19vYmplY3RfaWQoYmlvc19vYmplY3RfaWQp OwotCi0JaWYgKGVudW1faWQgPT0gRU5VTV9JRF9VTktOT1dOKQotCQlyZXR1cm4gZ29faWQ7Ci0K LQlnb19pZCA9IGRhbF9ncmFwaGljc19vYmplY3RfaWRfaW5pdCgKLQkJCWlkX2Zyb21fYmlvc19v YmplY3RfaWQodHlwZSwgYmlvc19vYmplY3RfaWQpLAotCQkJCQkJCQllbnVtX2lkLCB0eXBlKTsK LQotCXJldHVybiBnb19pZDsKLX0KLQotc3RhdGljIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5 cGVfZnJvbV9iaW9zX29iamVjdF9pZCh1aW50MzJfdCBiaW9zX29iamVjdF9pZCkKLXsKLQl1aW50 MzJfdCBiaW9zX29iamVjdF90eXBlID0gKGJpb3Nfb2JqZWN0X2lkICYgT0JKRUNUX1RZUEVfTUFT SykKLQkJCQk+PiBPQkpFQ1RfVFlQRV9TSElGVDsKLQllbnVtIG9iamVjdF90eXBlIG9iamVjdF90 eXBlOwotCi0Jc3dpdGNoIChiaW9zX29iamVjdF90eXBlKSB7Ci0JY2FzZSBHUkFQSF9PQkpFQ1Rf VFlQRV9HUFU6Ci0JCW9iamVjdF90eXBlID0gT0JKRUNUX1RZUEVfR1BVOwotCQlicmVhazsKLQlj YXNlIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVI6Ci0JCW9iamVjdF90eXBlID0gT0JKRUNUX1RZ UEVfRU5DT0RFUjsKLQkJYnJlYWs7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1I6 Ci0JCW9iamVjdF90eXBlID0gT0JKRUNUX1RZUEVfQ09OTkVDVE9SOwotCQlicmVhazsKLQljYXNl IEdSQVBIX09CSkVDVF9UWVBFX1JPVVRFUjoKLQkJb2JqZWN0X3R5cGUgPSBPQkpFQ1RfVFlQRV9S T1VURVI7Ci0JCWJyZWFrOwotCWNhc2UgR1JBUEhfT0JKRUNUX1RZUEVfR0VORVJJQzoKLQkJb2Jq ZWN0X3R5cGUgPSBPQkpFQ1RfVFlQRV9HRU5FUklDOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlv YmplY3RfdHlwZSA9IE9CSkVDVF9UWVBFX1VOS05PV047Ci0JCWJyZWFrOwotCX0KLQotCXJldHVy biBvYmplY3RfdHlwZTsKLX0KLQotc3RhdGljIGVudW0gb2JqZWN0X2VudW1faWQgZW51bV9pZF9m cm9tX2Jpb3Nfb2JqZWN0X2lkKHVpbnQzMl90IGJpb3Nfb2JqZWN0X2lkKQotewotCXVpbnQzMl90 IGJpb3NfZW51bV9pZCA9Ci0JCQkoYmlvc19vYmplY3RfaWQgJiBFTlVNX0lEX01BU0spID4+IEVO VU1fSURfU0hJRlQ7Ci0JZW51bSBvYmplY3RfZW51bV9pZCBpZDsKLQotCXN3aXRjaCAoYmlvc19l bnVtX2lkKSB7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDE6Ci0JCWlkID0gRU5VTV9JRF8x OwotCQlicmVhazsKLQljYXNlIEdSQVBIX09CSkVDVF9FTlVNX0lEMjoKLQkJaWQgPSBFTlVNX0lE XzI7Ci0JCWJyZWFrOwotCWNhc2UgR1JBUEhfT0JKRUNUX0VOVU1fSUQzOgotCQlpZCA9IEVOVU1f SURfMzsKLQkJYnJlYWs7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDQ6Ci0JCWlkID0gRU5V TV9JRF80OwotCQlicmVhazsKLQljYXNlIEdSQVBIX09CSkVDVF9FTlVNX0lENToKLQkJaWQgPSBF TlVNX0lEXzU7Ci0JCWJyZWFrOwotCWNhc2UgR1JBUEhfT0JKRUNUX0VOVU1fSUQ2OgotCQlpZCA9 IEVOVU1fSURfNjsKLQkJYnJlYWs7Ci0JY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDc6Ci0JCWlk ID0gRU5VTV9JRF83OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZCA9IEVOVU1fSURfVU5LTk9X TjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgdWludDMyX3QgaWRf ZnJvbV9iaW9zX29iamVjdF9pZChlbnVtIG9iamVjdF90eXBlIHR5cGUsCi0JdWludDMyX3QgYmlv c19vYmplY3RfaWQpCi17Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBPQkpFQ1RfVFlQRV9HUFU6 Ci0JCXJldHVybiBncHVfaWRfZnJvbV9iaW9zX29iamVjdF9pZChiaW9zX29iamVjdF9pZCk7Ci0J Y2FzZSBPQkpFQ1RfVFlQRV9FTkNPREVSOgotCQlyZXR1cm4gKHVpbnQzMl90KWVuY29kZXJfaWRf ZnJvbV9iaW9zX29iamVjdF9pZChiaW9zX29iamVjdF9pZCk7Ci0JY2FzZSBPQkpFQ1RfVFlQRV9D T05ORUNUT1I6Ci0JCXJldHVybiAodWludDMyX3QpY29ubmVjdG9yX2lkX2Zyb21fYmlvc19vYmpl Y3RfaWQoCi0JCQkJYmlvc19vYmplY3RfaWQpOwotCWNhc2UgT0JKRUNUX1RZUEVfR0VORVJJQzoK LQkJcmV0dXJuIGdlbmVyaWNfaWRfZnJvbV9iaW9zX29iamVjdF9pZChiaW9zX29iamVjdF9pZCk7 Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi11aW50MzJfdCBncHVfaWRfZnJvbV9i aW9zX29iamVjdF9pZCh1aW50MzJfdCBiaW9zX29iamVjdF9pZCkKLXsKLQlyZXR1cm4gKGJpb3Nf b2JqZWN0X2lkICYgT0JKRUNUX0lEX01BU0spID4+IE9CSkVDVF9JRF9TSElGVDsKLX0KLQotc3Rh dGljIGVudW0gZW5jb2Rlcl9pZCBlbmNvZGVyX2lkX2Zyb21fYmlvc19vYmplY3RfaWQodWludDMy X3QgYmlvc19vYmplY3RfaWQpCi17Ci0JdWludDMyX3QgYmlvc19lbmNvZGVyX2lkID0gZ3B1X2lk X2Zyb21fYmlvc19vYmplY3RfaWQoYmlvc19vYmplY3RfaWQpOwotCWVudW0gZW5jb2Rlcl9pZCBp ZDsKLQotCXN3aXRjaCAoYmlvc19lbmNvZGVyX2lkKSB7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9J RF9JTlRFUk5BTF9MVkRTOgotCQlpZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfTFZEUzsKLQkJYnJl YWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9UTURTMToKLQkJaWQgPSBFTkNP REVSX0lEX0lOVEVSTkFMX1RNRFMxOwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lE X0lOVEVSTkFMX1RNRFMyOgotCQlpZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfVE1EUzI7Ci0JCWJy ZWFrOwotCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMToKLQkJaWQgPSBFTkNP REVSX0lEX0lOVEVSTkFMX0RBQzE7Ci0JCWJyZWFrOwotCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURf SU5URVJOQUxfREFDMjoKLQkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX0RBQzI7Ci0JCWJyZWFr OwotCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfTFZUTTE6Ci0JCWlkID0gRU5DT0RF Ul9JRF9JTlRFUk5BTF9MVlRNMTsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9I RE1JX0lOVEVSTkFMOgotCQlpZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfSERNSTsKLQkJYnJlYWs7 Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfVE1EUzE6Ci0JCWlkID0g RU5DT0RFUl9JRF9JTlRFUk5BTF9LTERTQ1BfVE1EUzE7Ci0JCWJyZWFrOwotCWNhc2UgRU5DT0RF Ul9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzE6Ci0JCWlkID0gRU5DT0RFUl9JRF9JTlRF Uk5BTF9LTERTQ1BfREFDMTsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRF Uk5BTF9LTERTQ1BfREFDMjoKLQkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMy OwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX01WUFVfRlBHQToKLQkJaWQgPSBF TkNPREVSX0lEX0VYVEVSTkFMX01WUFVfRlBHQTsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09C SkVDVF9JRF9JTlRFUk5BTF9EREk6Ci0JCWlkID0gRU5DT0RFUl9JRF9JTlRFUk5BTF9EREk7Ci0J CWJyZWFrOwotCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgotCQlpZCA9 IEVOQ09ERVJfSURfSU5URVJOQUxfVU5JUEhZOwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JK RUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9MVlRNQToKLQkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFM X0tMRFNDUF9MVlRNQTsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5B TF9VTklQSFkxOgotCQlpZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfVU5JUEhZMTsKLQkJYnJlYWs7 Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgotCQlpZCA9IEVOQ09E RVJfSURfSU5URVJOQUxfVU5JUEhZMjsKLQkJYnJlYWs7Ci0JY2FzZSBFTkNPREVSX09CSkVDVF9J RF9BTE1PTkQ6IC8qIEVOQ09ERVJfT0JKRUNUX0lEX05VVE1FRyAqLwotCQlpZCA9IEVOQ09ERVJf SURfRVhURVJOQUxfTlVUTUVHOwotCQlicmVhazsKLQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX1RS QVZJUzoKLQkJaWQgPSBFTkNPREVSX0lEX0VYVEVSTkFMX1RSQVZJUzsKLQkJYnJlYWs7Ci0JY2Fz ZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkzOgotCQlpZCA9IEVOQ09ERVJfSURf SU5URVJOQUxfVU5JUEhZMzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWQgPSBFTkNPREVSX0lE X1VOS05PV047Ci0JCUFTU0VSVCgwKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGlkOwotfQot Ci1zdGF0aWMgZW51bSBjb25uZWN0b3JfaWQgY29ubmVjdG9yX2lkX2Zyb21fYmlvc19vYmplY3Rf aWQoCi0JdWludDMyX3QgYmlvc19vYmplY3RfaWQpCi17Ci0JdWludDMyX3QgYmlvc19jb25uZWN0 b3JfaWQgPSBncHVfaWRfZnJvbV9iaW9zX29iamVjdF9pZChiaW9zX29iamVjdF9pZCk7Ci0KLQll bnVtIGNvbm5lY3Rvcl9pZCBpZDsKLQotCXN3aXRjaCAoYmlvc19jb25uZWN0b3JfaWQpIHsKLQlj YXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k6Ci0JCWlkID0gQ09OTkVD VE9SX0lEX1NJTkdMRV9MSU5LX0RWSUk7Ci0JCWJyZWFrOwotCWNhc2UgQ09OTkVDVE9SX09CSkVD VF9JRF9EVUFMX0xJTktfRFZJX0k6Ci0JCWlkID0gQ09OTkVDVE9SX0lEX0RVQUxfTElOS19EVklJ OwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0Q6 Ci0JCWlkID0gQ09OTkVDVE9SX0lEX1NJTkdMRV9MSU5LX0RWSUQ7Ci0JCWJyZWFrOwotCWNhc2Ug Q09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0Q6Ci0JCWlkID0gQ09OTkVDVE9SX0lE X0RVQUxfTElOS19EVklEOwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdB OgotCQlpZCA9IENPTk5FQ1RPUl9JRF9WR0E7Ci0JCWJyZWFrOwotCWNhc2UgQ09OTkVDVE9SX09C SkVDVF9JRF9IRE1JX1RZUEVfQToKLQkJaWQgPSBDT05ORUNUT1JfSURfSERNSV9UWVBFX0E7Ci0J CWJyZWFrOwotCWNhc2UgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTOgotCQlpZCA9IENPTk5FQ1RP Ul9JRF9MVkRTOwotCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURfUENJRV9DT05O RUNUT1I6Ci0JCWlkID0gQ09OTkVDVE9SX0lEX1BDSUU7Ci0JCWJyZWFrOwotCWNhc2UgQ09OTkVD VE9SX09CSkVDVF9JRF9IQVJEQ09ERV9EVkk6Ci0JCWlkID0gQ09OTkVDVE9SX0lEX0hBUkRDT0RF X0RWSTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUOgot CQlpZCA9IENPTk5FQ1RPUl9JRF9ESVNQTEFZX1BPUlQ7Ci0JCWJyZWFrOwotCWNhc2UgQ09OTkVD VE9SX09CSkVDVF9JRF9lRFA6Ci0JCWlkID0gQ09OTkVDVE9SX0lEX0VEUDsKLQkJYnJlYWs7Ci0J Y2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX01YTToKLQkJaWQgPSBDT05ORUNUT1JfSURfTVhNOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlpZCA9IENPTk5FQ1RPUl9JRF9VTktOT1dOOwotCQlicmVh azsKLQl9Ci0KLQlyZXR1cm4gaWQ7Ci19Ci0KLWVudW0gZ2VuZXJpY19pZCBnZW5lcmljX2lkX2Zy b21fYmlvc19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpCi17Ci0JdWludDMyX3Qg Ymlvc19nZW5lcmljX2lkID0gZ3B1X2lkX2Zyb21fYmlvc19vYmplY3RfaWQoYmlvc19vYmplY3Rf aWQpOwotCi0JZW51bSBnZW5lcmljX2lkIGlkOwotCi0Jc3dpdGNoIChiaW9zX2dlbmVyaWNfaWQp IHsKLQljYXNlIEdFTkVSSUNfT0JKRUNUX0lEX01YTV9PUE06Ci0JCWlkID0gR0VORVJJQ19JRF9N WE1fT1BNOwotCQlicmVhazsKLQljYXNlIEdFTkVSSUNfT0JKRUNUX0lEX0dMU1lOQzoKLQkJaWQg PSBHRU5FUklDX0lEX0dMU1lOQzsKLQkJYnJlYWs7Ci0JY2FzZSBHRU5FUklDX09CSkVDVF9JRF9T VEVSRU9fUElOOgotCQlpZCA9IEdFTkVSSUNfSURfU1RFUkVPOwotCQlicmVhazsKLQlkZWZhdWx0 OgotCQlpZCA9IEdFTkVSSUNfSURfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGlk OwotfQotCiAvKiBCSU9TIG9qZWN0IHRhYmxlIGRpc3BsYXlwYXRoIGlzIHBlciBjb25uZWN0b3Iu CiAgKiBUaGVyZSBpcyBleHRyYSBwYXRoIG5vdCBmb3IgY29ubmVjdG9yLiBCSU9TIGZpbGwgaXRz IGVuY29kZXJpZCBhcyAwCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9kYy9iaW9zL2Jpb3NfcGFyc2VyX2NvbW1vbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2Jpb3MvYmlvc19wYXJzZXJfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYThjYjAzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9kYy9iaW9zL2Jpb3NfcGFyc2VyX2NvbW1vbi5jCkBAIC0wLDAgKzEsMjg4 IEBACisvKgorICogQ29weXJpZ2h0IDIwMTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5j LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdI VCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaW5jbHVk ZSAiYmlvc19wYXJzZXJfY29tbW9uLmgiCisjaW5jbHVkZSAiaW5jbHVkZS9ncnBoX29iamVjdF9j dHJsX2RlZnMuaCIKKworc3RhdGljIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGVfZnJvbV9i aW9zX29iamVjdF9pZCh1aW50MzJfdCBiaW9zX29iamVjdF9pZCkKK3sKKwl1aW50MzJfdCBiaW9z X29iamVjdF90eXBlID0gKGJpb3Nfb2JqZWN0X2lkICYgT0JKRUNUX1RZUEVfTUFTSykKKwkJCQk+ PiBPQkpFQ1RfVFlQRV9TSElGVDsKKwllbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlOworCisJ c3dpdGNoIChiaW9zX29iamVjdF90eXBlKSB7CisJY2FzZSBHUkFQSF9PQkpFQ1RfVFlQRV9HUFU6 CisJCW9iamVjdF90eXBlID0gT0JKRUNUX1RZUEVfR1BVOworCQlicmVhazsKKwljYXNlIEdSQVBI X09CSkVDVF9UWVBFX0VOQ09ERVI6CisJCW9iamVjdF90eXBlID0gT0JKRUNUX1RZUEVfRU5DT0RF UjsKKwkJYnJlYWs7CisJY2FzZSBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1I6CisJCW9iamVj dF90eXBlID0gT0JKRUNUX1RZUEVfQ09OTkVDVE9SOworCQlicmVhazsKKwljYXNlIEdSQVBIX09C SkVDVF9UWVBFX1JPVVRFUjoKKwkJb2JqZWN0X3R5cGUgPSBPQkpFQ1RfVFlQRV9ST1VURVI7CisJ CWJyZWFrOworCWNhc2UgR1JBUEhfT0JKRUNUX1RZUEVfR0VORVJJQzoKKwkJb2JqZWN0X3R5cGUg PSBPQkpFQ1RfVFlQRV9HRU5FUklDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvYmplY3RfdHlw ZSA9IE9CSkVDVF9UWVBFX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiBvYmplY3Rf dHlwZTsKK30KKworc3RhdGljIGVudW0gb2JqZWN0X2VudW1faWQgZW51bV9pZF9mcm9tX2Jpb3Nf b2JqZWN0X2lkKHVpbnQzMl90IGJpb3Nfb2JqZWN0X2lkKQoreworCXVpbnQzMl90IGJpb3NfZW51 bV9pZCA9CisJCQkoYmlvc19vYmplY3RfaWQgJiBFTlVNX0lEX01BU0spID4+IEVOVU1fSURfU0hJ RlQ7CisJZW51bSBvYmplY3RfZW51bV9pZCBpZDsKKworCXN3aXRjaCAoYmlvc19lbnVtX2lkKSB7 CisJY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDE6CisJCWlkID0gRU5VTV9JRF8xOworCQlicmVh azsKKwljYXNlIEdSQVBIX09CSkVDVF9FTlVNX0lEMjoKKwkJaWQgPSBFTlVNX0lEXzI7CisJCWJy ZWFrOworCWNhc2UgR1JBUEhfT0JKRUNUX0VOVU1fSUQzOgorCQlpZCA9IEVOVU1fSURfMzsKKwkJ YnJlYWs7CisJY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDQ6CisJCWlkID0gRU5VTV9JRF80Owor CQlicmVhazsKKwljYXNlIEdSQVBIX09CSkVDVF9FTlVNX0lENToKKwkJaWQgPSBFTlVNX0lEXzU7 CisJCWJyZWFrOworCWNhc2UgR1JBUEhfT0JKRUNUX0VOVU1fSUQ2OgorCQlpZCA9IEVOVU1fSURf NjsKKwkJYnJlYWs7CisJY2FzZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDc6CisJCWlkID0gRU5VTV9J RF83OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZCA9IEVOVU1fSURfVU5LTk9XTjsKKwkJYnJl YWs7CisJfQorCisJcmV0dXJuIGlkOworfQorCitzdGF0aWMgdWludDMyX3QgZ3B1X2lkX2Zyb21f Ymlvc19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpCit7CisJcmV0dXJuIChiaW9z X29iamVjdF9pZCAmIE9CSkVDVF9JRF9NQVNLKSA+PiBPQkpFQ1RfSURfU0hJRlQ7Cit9CisKK3N0 YXRpYyBlbnVtIGVuY29kZXJfaWQgZW5jb2Rlcl9pZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKHVpbnQz Ml90IGJpb3Nfb2JqZWN0X2lkKQoreworCXVpbnQzMl90IGJpb3NfZW5jb2Rlcl9pZCA9IGdwdV9p ZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKGJpb3Nfb2JqZWN0X2lkKTsKKwllbnVtIGVuY29kZXJfaWQg aWQ7CisKKwlzd2l0Y2ggKGJpb3NfZW5jb2Rlcl9pZCkgeworCWNhc2UgRU5DT0RFUl9PQkpFQ1Rf SURfSU5URVJOQUxfTFZEUzoKKwkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX0xWRFM7CisJCWJy ZWFrOworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVE1EUzE6CisJCWlkID0gRU5D T0RFUl9JRF9JTlRFUk5BTF9UTURTMTsKKwkJYnJlYWs7CisJY2FzZSBFTkNPREVSX09CSkVDVF9J RF9JTlRFUk5BTF9UTURTMjoKKwkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX1RNRFMyOworCQli cmVhazsKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CisJCWlkID0gRU5D T0RFUl9JRF9JTlRFUk5BTF9EQUMxOworCQlicmVhazsKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lE X0lOVEVSTkFMX0RBQzI6CisJCWlkID0gRU5DT0RFUl9JRF9JTlRFUk5BTF9EQUMyOworCQlicmVh azsKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0xWVE0xOgorCQlpZCA9IEVOQ09E RVJfSURfSU5URVJOQUxfTFZUTTE7CisJCWJyZWFrOworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURf SERNSV9JTlRFUk5BTDoKKwkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX0hETUk7CisJCWJyZWFr OworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxOgorCQlpZCA9 IEVOQ09ERVJfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxOworCQlicmVhazsKKwljYXNlIEVOQ09E RVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMxOgorCQlpZCA9IEVOQ09ERVJfSURfSU5U RVJOQUxfS0xEU0NQX0RBQzE7CisJCWJyZWFrOworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5U RVJOQUxfS0xEU0NQX0RBQzI6CisJCWlkID0gRU5DT0RFUl9JRF9JTlRFUk5BTF9LTERTQ1BfREFD MjsKKwkJYnJlYWs7CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9NVlBVX0ZQR0E6CisJCWlkID0g RU5DT0RFUl9JRF9FWFRFUk5BTF9NVlBVX0ZQR0E7CisJCWJyZWFrOworCWNhc2UgRU5DT0RFUl9P QkpFQ1RfSURfSU5URVJOQUxfRERJOgorCQlpZCA9IEVOQ09ERVJfSURfSU5URVJOQUxfRERJOwor CQlicmVhazsKKwljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKKwkJaWQg PSBFTkNPREVSX0lEX0lOVEVSTkFMX1VOSVBIWTsKKwkJYnJlYWs7CisJY2FzZSBFTkNPREVSX09C SkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6CisJCWlkID0gRU5DT0RFUl9JRF9JTlRFUk5B TF9LTERTQ1BfTFZUTUE7CisJCWJyZWFrOworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJO QUxfVU5JUEhZMToKKwkJaWQgPSBFTkNPREVSX0lEX0lOVEVSTkFMX1VOSVBIWTE7CisJCWJyZWFr OworCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMjoKKwkJaWQgPSBFTkNP REVSX0lEX0lOVEVSTkFMX1VOSVBIWTI7CisJCWJyZWFrOworCWNhc2UgRU5DT0RFUl9PQkpFQ1Rf SURfQUxNT05EOiAvKiBFTkNPREVSX09CSkVDVF9JRF9OVVRNRUcgKi8KKwkJaWQgPSBFTkNPREVS X0lEX0VYVEVSTkFMX05VVE1FRzsKKwkJYnJlYWs7CisJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9U UkFWSVM6CisJCWlkID0gRU5DT0RFUl9JRF9FWFRFUk5BTF9UUkFWSVM7CisJCWJyZWFrOworCWNh c2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMzoKKwkJaWQgPSBFTkNPREVSX0lE X0lOVEVSTkFMX1VOSVBIWTM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlkID0gRU5DT0RFUl9J RF9VTktOT1dOOworCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBpZDsKK30K Kworc3RhdGljIGVudW0gY29ubmVjdG9yX2lkIGNvbm5lY3Rvcl9pZF9mcm9tX2Jpb3Nfb2JqZWN0 X2lkKAorCXVpbnQzMl90IGJpb3Nfb2JqZWN0X2lkKQoreworCXVpbnQzMl90IGJpb3NfY29ubmVj dG9yX2lkID0gZ3B1X2lkX2Zyb21fYmlvc19vYmplY3RfaWQoYmlvc19vYmplY3RfaWQpOworCisJ ZW51bSBjb25uZWN0b3JfaWQgaWQ7CisKKwlzd2l0Y2ggKGJpb3NfY29ubmVjdG9yX2lkKSB7CisJ Y2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOgorCQlpZCA9IENPTk5F Q1RPUl9JRF9TSU5HTEVfTElOS19EVklJOworCQlicmVhazsKKwljYXNlIENPTk5FQ1RPUl9PQkpF Q1RfSURfRFVBTF9MSU5LX0RWSV9JOgorCQlpZCA9IENPTk5FQ1RPUl9JRF9EVUFMX0xJTktfRFZJ STsKKwkJYnJlYWs7CisJY2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9E OgorCQlpZCA9IENPTk5FQ1RPUl9JRF9TSU5HTEVfTElOS19EVklEOworCQlicmVhazsKKwljYXNl IENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOgorCQlpZCA9IENPTk5FQ1RPUl9J RF9EVUFMX0xJTktfRFZJRDsKKwkJYnJlYWs7CisJY2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX1ZH QToKKwkJaWQgPSBDT05ORUNUT1JfSURfVkdBOworCQlicmVhazsKKwljYXNlIENPTk5FQ1RPUl9P QkpFQ1RfSURfSERNSV9UWVBFX0E6CisJCWlkID0gQ09OTkVDVE9SX0lEX0hETUlfVFlQRV9BOwor CQlicmVhazsKKwljYXNlIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUzoKKwkJaWQgPSBDT05ORUNU T1JfSURfTFZEUzsKKwkJYnJlYWs7CisJY2FzZSBDT05ORUNUT1JfT0JKRUNUX0lEX1BDSUVfQ09O TkVDVE9SOgorCQlpZCA9IENPTk5FQ1RPUl9JRF9QQ0lFOworCQlicmVhazsKKwljYXNlIENPTk5F Q1RPUl9PQkpFQ1RfSURfSEFSRENPREVfRFZJOgorCQlpZCA9IENPTk5FQ1RPUl9JRF9IQVJEQ09E RV9EVkk7CisJCWJyZWFrOworCWNhc2UgQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVDoK KwkJaWQgPSBDT05ORUNUT1JfSURfRElTUExBWV9QT1JUOworCQlicmVhazsKKwljYXNlIENPTk5F Q1RPUl9PQkpFQ1RfSURfZURQOgorCQlpZCA9IENPTk5FQ1RPUl9JRF9FRFA7CisJCWJyZWFrOwor CWNhc2UgQ09OTkVDVE9SX09CSkVDVF9JRF9NWE06CisJCWlkID0gQ09OTkVDVE9SX0lEX01YTTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWQgPSBDT05ORUNUT1JfSURfVU5LTk9XTjsKKwkJYnJl YWs7CisJfQorCisJcmV0dXJuIGlkOworfQorCitzdGF0aWMgZW51bSBnZW5lcmljX2lkIGdlbmVy aWNfaWRfZnJvbV9iaW9zX29iamVjdF9pZCh1aW50MzJfdCBiaW9zX29iamVjdF9pZCkKK3sKKwl1 aW50MzJfdCBiaW9zX2dlbmVyaWNfaWQgPSBncHVfaWRfZnJvbV9iaW9zX29iamVjdF9pZChiaW9z X29iamVjdF9pZCk7CisKKwllbnVtIGdlbmVyaWNfaWQgaWQ7CisKKwlzd2l0Y2ggKGJpb3NfZ2Vu ZXJpY19pZCkgeworCWNhc2UgR0VORVJJQ19PQkpFQ1RfSURfTVhNX09QTToKKwkJaWQgPSBHRU5F UklDX0lEX01YTV9PUE07CisJCWJyZWFrOworCWNhc2UgR0VORVJJQ19PQkpFQ1RfSURfR0xTWU5D OgorCQlpZCA9IEdFTkVSSUNfSURfR0xTWU5DOworCQlicmVhazsKKwljYXNlIEdFTkVSSUNfT0JK RUNUX0lEX1NURVJFT19QSU46CisJCWlkID0gR0VORVJJQ19JRF9TVEVSRU87CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCWlkID0gR0VORVJJQ19JRF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwly ZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBpZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKGVu dW0gb2JqZWN0X3R5cGUgdHlwZSwKKwl1aW50MzJfdCBiaW9zX29iamVjdF9pZCkKK3sKKwlzd2l0 Y2ggKHR5cGUpIHsKKwljYXNlIE9CSkVDVF9UWVBFX0dQVToKKwkJcmV0dXJuIGdwdV9pZF9mcm9t X2Jpb3Nfb2JqZWN0X2lkKGJpb3Nfb2JqZWN0X2lkKTsKKwljYXNlIE9CSkVDVF9UWVBFX0VOQ09E RVI6CisJCXJldHVybiAodWludDMyX3QpZW5jb2Rlcl9pZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKGJp b3Nfb2JqZWN0X2lkKTsKKwljYXNlIE9CSkVDVF9UWVBFX0NPTk5FQ1RPUjoKKwkJcmV0dXJuICh1 aW50MzJfdCljb25uZWN0b3JfaWRfZnJvbV9iaW9zX29iamVjdF9pZCgKKwkJCQliaW9zX29iamVj dF9pZCk7CisJY2FzZSBPQkpFQ1RfVFlQRV9HRU5FUklDOgorCQlyZXR1cm4gZ2VuZXJpY19pZF9m cm9tX2Jpb3Nfb2JqZWN0X2lkKGJpb3Nfb2JqZWN0X2lkKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4g MDsKKwl9Cit9CisKK3N0cnVjdCBncmFwaGljc19vYmplY3RfaWQgb2JqZWN0X2lkX2Zyb21fYmlv c19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpCit7CisJZW51bSBvYmplY3RfdHlw ZSB0eXBlOworCWVudW0gb2JqZWN0X2VudW1faWQgZW51bV9pZDsKKwlzdHJ1Y3QgZ3JhcGhpY3Nf b2JqZWN0X2lkIGdvX2lkID0geyAwIH07CisKKwl0eXBlID0gb2JqZWN0X3R5cGVfZnJvbV9iaW9z X29iamVjdF9pZChiaW9zX29iamVjdF9pZCk7CisKKwlpZiAoT0JKRUNUX1RZUEVfVU5LTk9XTiA9 PSB0eXBlKQorCQlyZXR1cm4gZ29faWQ7CisKKwllbnVtX2lkID0gZW51bV9pZF9mcm9tX2Jpb3Nf b2JqZWN0X2lkKGJpb3Nfb2JqZWN0X2lkKTsKKworCWlmIChFTlVNX0lEX1VOS05PV04gPT0gZW51 bV9pZCkKKwkJcmV0dXJuIGdvX2lkOworCisJZ29faWQgPSBkYWxfZ3JhcGhpY3Nfb2JqZWN0X2lk X2luaXQoCisJCQlpZF9mcm9tX2Jpb3Nfb2JqZWN0X2lkKHR5cGUsIGJpb3Nfb2JqZWN0X2lkKSwg ZW51bV9pZCwgdHlwZSk7CisKKwlyZXR1cm4gZ29faWQ7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Jpb3MvYmlvc19wYXJzZXJfY29tbW9uLmggYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvYmlvcy9iaW9zX3BhcnNlcl9jb21tb24uaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDc2YzYxCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Jpb3MvYmlvc19wYXJzZXJfY29t bW9uLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyLTE1IEFkdmFuY2Vk IE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IK KyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQK KyAqCisgKi8KKworI2lmbmRlZiBfX0JJT1NfUEFSU0VSX0NPTU1PTl9IX18KKyNkZWZpbmUgX19C SU9TX1BBUlNFUl9DT01NT05fSF9fCisKKyNpbmNsdWRlICJkbV9zZXJ2aWNlcy5oIgorI2luY2x1 ZGUgIk9iamVjdElELmgiCisKK3N0cnVjdCBncmFwaGljc19vYmplY3RfaWQgb2JqZWN0X2lkX2Zy b21fYmlvc19vYmplY3RfaWQodWludDMyX3QgYmlvc19vYmplY3RfaWQpOworI2VuZGlmCi0tIAoy LjkuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1k LWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==