From mboxrd@z Thu Jan 1 00:00:00 1970 From: Finn Thain Subject: [RFC v5 03/26] m68k/atari: Move Atari-specific code out of drivers/char/nvram.c Date: Sat, 25 Jul 2015 17:46:02 +1000 Message-ID: <20150725074600.283343996@telegraphics.com.au> References: <20150725074559.543547894@telegraphics.com.au> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline; filename=atari-nvram-move-to-arch-m68k List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: linux-kernel@vger.kernel.org, linux-m68k@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Geert Uytterhoeven , Arnd Bergmann , Greg Kroah-Hartman List-Id: linux-m68k@vger.kernel.org TW92ZSB0aGUgbTY4ay1zcGVjaWZpYyBjb2RlIGVsc2V3aGVyZSB0byBtYWtlIHRoZSBkcml2ZXIg Z2VuZXJpYy4KClNpZ25lZC1vZmYtYnk6IEZpbm4gVGhhaW4gPGZ0aGFpbkB0ZWxlZ3JhcGhpY3Mu Y29tLmF1PgpUZXN0ZWQtYnk6IENocmlzdGlhbiBULiBTdGVpZ2llcyA8Y3RzQGRlYmlhbi5vcmc+ CgotLS0KCkNoYW5nZXMgc2luY2UgdjM6Ci0gTW92ZSB0aGUgdm1vZGUgZml4IHRvIGEgc2VwYXJh dGUgcGF0Y2ggYXMgcmVxdWVzdGVkIGJ5IEdlZXJ0LgoKLS0tCiBhcmNoL202OGsvYXRhcmkvTWFr ZWZpbGUgfCAgICAyIAogYXJjaC9tNjhrL2F0YXJpL252cmFtLmMgIHwgIDI1NSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvY2hhci9udnJhbS5jICAg ICB8ICAyODAgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IDMgZmlsZXMgY2hhbmdlZCwgMjkyIGluc2VydGlvbnMoKyksIDI0NSBkZWxldGlvbnMoLSkKCklu ZGV4OiBsaW51eC9hcmNoL202OGsvYXRhcmkvbnZyYW0uYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251 bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4L2FyY2gvbTY4 ay9hdGFyaS9udnJhbS5jCTIwMTUtMDctMjUgMTc6NDU6MjYuMDAwMDAwMDAwICsxMDAwCkBAIC0w LDAgKzEsMjU1IEBACisvKgorICogQ01PUy9OVi1SQU0gZHJpdmVyIGZvciBBdGFyaS4gQWRhcHRl ZCBmcm9tIGRyaXZlcnMvY2hhci9udnJhbS5jLgorICogQ29weXJpZ2h0IChDKSAxOTk3IFJvbWFu IEhvZGVrIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKyAqIGlkZWEg YnkgYW5kIHdpdGggaGVscCBmcm9tIFJpY2hhcmQgSmVsaW5layA8cmpAc3VzZS5kZT4KKyAqIFBv cnRpb25zIGNvcHlyaWdodCAoYykgMjAwMSwyMDAyIFN1biBNaWNyb3N5c3RlbXMgKHRob2NraW5A c3VuLmNvbSkKKyAqIEZ1cnRoZXIgY29udHJpYnV0aW9ucyBmcm9tIENlc2FyIEJhcnJvcywgRXJp ayBHaWxsaW5nLCBUaW0gSG9ja2luIGFuZAorICogV2ltIFZhbiBTZWJyb2Vjay4KKyAqLworCisj aW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVk ZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9udnJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRl IDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFz bS9hdGFyaWludHMuaD4KKworI2RlZmluZSBOVlJBTV9CWVRFUwkJNTAKKworLyogSXQgaXMgd29y dGggbm90aW5nIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFsbCBhY2Nlc3MgYnl0ZXMgb2YgZ2VuZXJh bAorICogcHVycG9zZSBtZW1vcnkgaW4gdGhlIE5WUkFNIC0gdGhhdCBpcyB0byBzYXksIHRoZXkg YWxsIGFkZCB0aGUKKyAqIE5WUkFNX0ZJUlNUX0JZVEUgb2Zmc2V0LiBQYXNzIHRoZW0gb2Zmc2V0 cyBpbnRvIE5WUkFNIGFzIGlmIHlvdSBkaWQgbm90CisgKiBrbm93IGFib3V0IHRoZSBSVEMgY3J1 ZnQuCisgKi8KKworLyogTm90ZSB0aGF0ICphbGwqIGNhbGxzIHRvIENNT1NfUkVBRCBhbmQgQ01P U19XUklURSBtdXN0IGJlIGRvbmUgd2l0aAorICogcnRjX2xvY2sgaGVsZC4gRHVlIHRvIHRoZSBp bmRleC1wb3J0L2RhdGEtcG9ydCBkZXNpZ24gb2YgdGhlIFJUQywgd2UKKyAqIGRvbid0IHdhbnQg dHdvIGRpZmZlcmVudCB0aGluZ3MgdHJ5aW5nIHRvIGdldCB0byBpdCBhdCBvbmNlLiAoZS5nLiB0 aGUKKyAqIHBlcmlvZGljIDExIG1pbiBzeW5jIGZyb20ga2VybmVsL3RpbWUvbnRwLmMgdnMuIHRo aXMgZHJpdmVyLikKKyAqLworCit1bnNpZ25lZCBjaGFyIF9fbnZyYW1fcmVhZF9ieXRlKGludCBp KQoreworCXJldHVybiBDTU9TX1JFQUQoTlZSQU1fRklSU1RfQllURSArIGkpOworfQorCit1bnNp Z25lZCBjaGFyIG52cmFtX3JlYWRfYnl0ZShpbnQgaSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCXVuc2lnbmVkIGNoYXIgYzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxh Z3MpOworCWMgPSBfX252cmFtX3JlYWRfYnl0ZShpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZydGNfbG9jaywgZmxhZ3MpOworCXJldHVybiBjOworfQorRVhQT1JUX1NZTUJPTChudnJhbV9y ZWFkX2J5dGUpOworCisvKiBUaGlzIHJhY2VzIG5pY2VseSB3aXRoIHRyeWluZyB0byByZWFkIHdp dGggY2hlY2tzdW0gY2hlY2tpbmcgKi8KK3ZvaWQgX19udnJhbV93cml0ZV9ieXRlKHVuc2lnbmVk IGNoYXIgYywgaW50IGkpCit7CisJQ01PU19XUklURShjLCBOVlJBTV9GSVJTVF9CWVRFICsgaSk7 Cit9CisKK3ZvaWQgbnZyYW1fd3JpdGVfYnl0ZSh1bnNpZ25lZCBjaGFyIGMsIGludCBpKQorewor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZs YWdzKTsKKwlfX252cmFtX3dyaXRlX2J5dGUoYywgaSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcnRjX2xvY2ssIGZsYWdzKTsKK30KKworLyogT24gQXRhcmlzLCB0aGUgY2hlY2tzdW0gaXMg b3ZlciBhbGwgYnl0ZXMgZXhjZXB0IHRoZSBjaGVja3N1bSBieXRlcworICogdGhlbXNlbHZlczsg dGhlc2UgYXJlIGF0IHRoZSB2ZXJ5IGVuZC4KKyAqLworI2RlZmluZSBBVEFSSV9DS1NfUkFOR0Vf U1RBUlQJMAorI2RlZmluZSBBVEFSSV9DS1NfUkFOR0VfRU5ECTQ3CisjZGVmaW5lIEFUQVJJX0NL U19MT0MJCTQ4CisKK2ludCBfX252cmFtX2NoZWNrX2NoZWNrc3VtKHZvaWQpCit7CisJaW50IGk7 CisJdW5zaWduZWQgY2hhciBzdW0gPSAwOworCisJZm9yIChpID0gQVRBUklfQ0tTX1JBTkdFX1NU QVJUOyBpIDw9IEFUQVJJX0NLU19SQU5HRV9FTkQ7ICsraSkKKwkJc3VtICs9IF9fbnZyYW1fcmVh ZF9ieXRlKGkpOworCXJldHVybiAoX19udnJhbV9yZWFkX2J5dGUoQVRBUklfQ0tTX0xPQykgPT0g KH5zdW0gJiAweGZmKSkgJiYKKwkgICAgICAgKF9fbnZyYW1fcmVhZF9ieXRlKEFUQVJJX0NLU19M T0MgKyAxKSA9PSAoc3VtICYgMHhmZikpOworfQorCitpbnQgbnZyYW1fY2hlY2tfY2hlY2tzdW0o dm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBydjsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOworCXJ2ID0gX19udnJhbV9jaGVja19jaGVja3N1bSgp OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJ2 OworfQorRVhQT1JUX1NZTUJPTChudnJhbV9jaGVja19jaGVja3N1bSk7CisKK3N0YXRpYyB2b2lk IF9fbnZyYW1fc2V0X2NoZWNrc3VtKHZvaWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBz dW0gPSAwOworCisJZm9yIChpID0gQVRBUklfQ0tTX1JBTkdFX1NUQVJUOyBpIDw9IEFUQVJJX0NL U19SQU5HRV9FTkQ7ICsraSkKKwkJc3VtICs9IF9fbnZyYW1fcmVhZF9ieXRlKGkpOworCV9fbnZy YW1fd3JpdGVfYnl0ZSh+c3VtLCBBVEFSSV9DS1NfTE9DKTsKKwlfX252cmFtX3dyaXRlX2J5dGUo c3VtLCBBVEFSSV9DS1NfTE9DICsgMSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3Rh dGljIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciB2YWw7CisJY2hhciAqbmFtZTsKK30gYm9vdF9w cmVmc1tdID0geworCXsgMHg4MCwgIlRPUyIgfSwKKwl7IDB4NDAsICJBU1YiIH0sCisJeyAweDIw LCAiTmV0QlNEICg/KSIgfSwKKwl7IDB4MTAsICJMaW51eCIgfSwKKwl7IDB4MDAsICJ1bnNwZWNp ZmllZCIgfSwKK307CisKK3N0YXRpYyBjaGFyICpsYW5ndWFnZXNbXSA9IHsKKwkiRW5nbGlzaCAo VVMpIiwKKwkiR2VybWFuIiwKKwkiRnJlbmNoIiwKKwkiRW5nbGlzaCAoVUspIiwKKwkiU3Bhbmlz aCIsCisJIkl0YWxpYW4iLAorCSI2ICh1bmRlZmluZWQpIiwKKwkiU3dpc3MgKEZyZW5jaCkiLAor CSJTd2lzcyAoR2VybWFuKSIsCit9OworCitzdGF0aWMgY2hhciAqZGF0ZWZvcm1hdFtdID0gewor CSJNTSVjREQlY1lZIiwKKwkiREQlY01NJWNZWSIsCisJIllZJWNNTSVjREQiLAorCSJZWSVjREQl Y01NIiwKKwkiNCAodW5kZWZpbmVkKSIsCisJIjUgKHVuZGVmaW5lZCkiLAorCSI2ICh1bmRlZmlu ZWQpIiwKKwkiNyAodW5kZWZpbmVkKSIsCit9OworCitzdGF0aWMgY2hhciAqY29sb3JzW10gPSB7 CisJIjIiLCAiNCIsICIxNiIsICIyNTYiLCAiNjU1MzYiLCAiPz8iLCAiPz8iLCAiPz8iCit9Owor CitzdGF0aWMgdm9pZCBhdGFyaV9udnJhbV9wcm9jX3JlYWQodW5zaWduZWQgY2hhciAqbnZyYW0s IHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKm9mZnNldCkKK3sKKwlpbnQgY2hlY2tzdW07CisJaW50IGk7CisJdW5zaWduZWQgdm1v ZGU7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJY2hlY2tzdW0gPSBfX252cmFtX2No ZWNrX2NoZWNrc3VtKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlzZXFfcHJp bnRmKHNlcSwgIkNoZWNrc3VtIHN0YXR1cyAgOiAlc3ZhbGlkXG4iLCBjaGVja3N1bSA/ICIiIDog Im5vdCAiKTsKKworCXNlcV9wdXRzKHNlcSwgIkJvb3QgcHJlZmVyZW5jZSAgOiAiKTsKKwlmb3Ig KGkgPSBBUlJBWV9TSVpFKGJvb3RfcHJlZnMpIC0gMTsgaSA+PSAwOyAtLWkpCisJCWlmIChudnJh bVsxXSA9PSBib290X3ByZWZzW2ldLnZhbCkgeworCQkJc2VxX3ByaW50ZihzZXEsICIlc1xuIiwg Ym9vdF9wcmVmc1tpXS5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisJaWYgKGkgPCAwKQorCQlzZXFf cHJpbnRmKHNlcSwgIjB4JTAyeCAodW5kZWZpbmVkKVxuIiwgbnZyYW1bMV0pOworCisJc2VxX3By aW50ZihzZXEsICJTQ1NJIGFyYml0cmF0aW9uIDogJXNcbiIsCisJICAgICAgICAgICAobnZyYW1b MTZdICYgMHg4MCkgPyAib24iIDogIm9mZiIpOworCXNlcV9wdXRzKHNlcSwgIlNDU0kgaG9zdCBJ RCAgICAgOiAiKTsKKwlpZiAobnZyYW1bMTZdICYgMHg4MCkKKwkJc2VxX3ByaW50ZihzZXEsICIl ZFxuIiwgbnZyYW1bMTZdICYgNyk7CisJZWxzZQorCQlzZXFfcHV0cyhzZXEsICJuL2FcbiIpOwor CisJaWYgKCFNQUNIX0lTX0ZBTENPTikKKwkJcmV0dXJuOworCisJc2VxX3B1dHMoc2VxLCAiT1Mg bGFuZ3VhZ2UgICAgICA6ICIpOworCWlmIChudnJhbVs2XSA8IEFSUkFZX1NJWkUobGFuZ3VhZ2Vz KSkKKwkJc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgbGFuZ3VhZ2VzW252cmFtWzZdXSk7CisJZWxz ZQorCQlzZXFfcHJpbnRmKHNlcSwgIiV1ICh1bmRlZmluZWQpXG4iLCBudnJhbVs2XSk7CisJc2Vx X3B1dHMoc2VxLCAiS2V5Ym9hcmQgbGFuZ3VhZ2U6ICIpOworCWlmIChudnJhbVs3XSA8IEFSUkFZ X1NJWkUobGFuZ3VhZ2VzKSkKKwkJc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgbGFuZ3VhZ2VzW252 cmFtWzddXSk7CisJZWxzZQorCQlzZXFfcHJpbnRmKHNlcSwgIiV1ICh1bmRlZmluZWQpXG4iLCBu dnJhbVs3XSk7CisJc2VxX3B1dHMoc2VxLCAiRGF0ZSBmb3JtYXQgICAgICA6ICIpOworCXNlcV9w cmludGYoc2VxLCBkYXRlZm9ybWF0W252cmFtWzhdICYgN10sCisJICAgICAgICAgICBudnJhbVs5 XSA/IG52cmFtWzldIDogJy8nLCBudnJhbVs5XSA/IG52cmFtWzldIDogJy8nKTsKKwlzZXFfcHJp bnRmKHNlcSwgIiwgJWRoIGNsb2NrXG4iLCBudnJhbVs4XSAmIDE2ID8gMjQgOiAxMik7CisJc2Vx X3B1dHMoc2VxLCAiQm9vdCBkZWxheSAgICAgICA6ICIpOworCWlmIChudnJhbVsxMF0gPT0gMCkK KwkJc2VxX3B1dHMoc2VxLCAiZGVmYXVsdCIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihzZXEsICIl ZHMlc1xuIiwgbnZyYW1bMTBdLAorCQkgICAgICAgICAgIG52cmFtWzEwXSA8IDggPyAiLCBubyBt ZW1vcnkgdGVzdCIgOiAiIik7CisKKwl2bW9kZSA9IChudnJhbVsxNF0gPDwgOCkgfCBudnJhbVsx NV07CisJc2VxX3ByaW50ZihzZXEsCisJICAgICAgICAgICAiVmlkZW8gbW9kZSAgICAgICA6ICVz IGNvbG9ycywgJWQgY29sdW1ucywgJXMgJXMgbW9uaXRvclxuIiwKKwkgICAgICAgICAgIGNvbG9y c1t2bW9kZSAmIDddLCB2bW9kZSAmIDggPyA4MCA6IDQwLAorCSAgICAgICAgICAgdm1vZGUgJiAx NiA/ICJWR0EiIDogIlRWIiwgdm1vZGUgJiAzMiA/ICJQQUwiIDogIk5UU0MiKTsKKwlzZXFfcHJp bnRmKHNlcSwKKwkgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgJXNvdmVyc2NhbiwgY29t cGF0LiBtb2RlICVzJXNcbiIsCisJICAgICAgICAgICB2bW9kZSAmIDY0ID8gIiIgOiAibm8gIiwg dm1vZGUgJiAxMjggPyAib24iIDogIm9mZiIsCisJICAgICAgICAgICB2bW9kZSAmIDI1NiA/CisJ ICAgICAgICAgICAodm1vZGUgJiAxNiA/ICIsIGxpbmUgZG91YmxpbmciIDogIiwgaGFsZiBzY3Jl ZW4iKSA6ICIiKTsKK30KKworc3RhdGljIGludCBudnJhbV9wcm9jX3JlYWQoc3RydWN0IHNlcV9m aWxlICpzZXEsIHZvaWQgKm9mZnNldCkKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbnRlbnRzW05WUkFN X0JZVEVTXTsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKwlmb3IgKGkg PSAwOyBpIDwgTlZSQU1fQllURVM7ICsraSkKKwkJY29udGVudHNbaV0gPSBfX252cmFtX3JlYWRf Ynl0ZShpKTsKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWF0YXJpX252cmFtX3By b2NfcmVhZChjb250ZW50cywgc2VxLCBvZmZzZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbnZyYW1fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpm aWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBudnJhbV9wcm9jX3JlYWQsIE5VTEwp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudnJhbV9wcm9jX2Zv cHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG52cmFtX3Byb2Nfb3Bl biwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFz ZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRhcmlfbnZyYW1f aW5pdCh2b2lkKQoreworCWlmICghKE1BQ0hfSVNfQVRBUkkgJiYgQVRBUklIV19QUkVTRU5UKFRU X0NMSykpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcHJvY19jcmVhdGUoImRyaXZlci9u dnJhbSIsIDAsIE5VTEwsICZudnJhbV9wcm9jX2ZvcHMpKSB7CisJCXByX2VycigibnZyYW06IGNh bid0IGNyZWF0ZSAvcHJvYy9kcml2ZXIvbnZyYW1cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChhdGFyaV9udnJhbV9pbml0KTsKKyNl bmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwpJbmRleDogbGludXgvYXJjaC9tNjhrL2F0YXJpL01h a2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4Lm9yaWcvYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxl CTIwMTUtMDctMjUgMTc6NDI6MzQuMDAwMDAwMDAwICsxMDAwCisrKyBsaW51eC9hcmNoL202OGsv YXRhcmkvTWFrZWZpbGUJMjAxNS0wNy0yNSAxNzo0NToyNi4wMDAwMDAwMDAgKzEwMDAKQEAgLTYs MyArNiw1IEBAIG9iai15CQk6PSBjb25maWcubyB0aW1lLm8gZGVidWcubyBhdGFpbnQKIAkJCWF0 YXNvdW5kLm8gc3RyYW0ubwogCiBvYmotJChDT05GSUdfQVRBUklfS0JEX0NPUkUpCSs9IGF0YWtl eWIubworCitvYmotJChDT05GSUdfTlZSQU06bT15KQkJKz0gbnZyYW0ubwpJbmRleDogbGludXgv ZHJpdmVycy9jaGFyL252cmFtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgub3JpZy9kcml2ZXJzL2No YXIvbnZyYW0uYwkyMDE1LTA3LTI1IDE3OjQ1OjI1LjAwMDAwMDAwMCArMTAwMAorKysgbGludXgv ZHJpdmVycy9jaGFyL252cmFtLmMJMjAxNS0wNy0yNSAxNzo0NToyNi4wMDAwMDAwMDAgKzEwMDAK QEAgLTIxLDEzICsyMSw2IEBACiAgKiBpb2N0bChOVlJBTV9TRVRDS1MpIChkb2Vzbid0IGNoYW5n ZSBjb250ZW50cywganVzdCBtYWtlcyBjaGVja3N1bSB2YWxpZAogICogYWdhaW47IHVzZSB3aXRo IGNhcmUhKQogICoKLSAqIFRoaXMgZmlsZSBhbHNvIHByb3ZpZGVzIHNvbWUgZnVuY3Rpb25zIGZv ciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRoYXQKLSAqIHdhbnQgdG8gYWNjZXNzIHRoZSBO VlJBTTogbnZyYW1fe3JlYWQsd3JpdGUsY2hlY2tfY2hlY2tzdW0sc2V0X2NoZWNrc3VtfS4KLSAq IE9idmlvdXNseSB0aGlzIGNhbiBiZSB1c2VkIG9ubHkgaWYgdGhpcyBkcml2ZXIgaXMgYWx3YXlz IGNvbmZpZ3VyZWQgaW50bwotICogdGhlIGtlcm5lbCBhbmQgaXMgbm90IGEgbW9kdWxlLiBTaW5j ZSB0aGUgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IHNvbWUgQXRhcmkKLSAqIGRyaXZlcnMsIHRoaXMg aXMgdGhlIGNhc2Ugb24gdGhlIEF0YXJpLgotICoKLSAqCiAgKiAJMS4xCUNlc2FyIEJhcnJvczog U01QIGxvY2tpbmcgZml4ZXMKICAqIAkJYWRkZWQgY2hhbmdlbG9nCiAgKiAJMS4yCUVyaWsgR2ls bGluZzogQ29iYWx0IE5ldHdvcmtzIHN1cHBvcnQKQEAgLTM5LDY0ICszMiw2IEBACiAKICNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9udnJhbS5oPgotCi0jZGVmaW5l IFBDCQkxCi0jZGVmaW5lIEFUQVJJCQkyCi0KLS8qIHNlbGVjdCBtYWNoaW5lIGNvbmZpZ3VyYXRp b24gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkKLSMgIGRlZmluZSBNQUNIIEFUQVJJCi0j ZWxpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQo X19hcm1fXykgIC8qIGFuZCA/PyAqLwotIyAgZGVmaW5lIE1BQ0ggUEMKLSNlbHNlCi0jICBlcnJv ciBDYW5ub3QgYnVpbGQgbnZyYW0gZHJpdmVyIGZvciB0aGlzIG1hY2hpbmUgY29uZmlndXJhdGlv bi4KLSNlbmRpZgotCi0jaWYgTUFDSCA9PSBQQwotCi0vKiBSVEMgaW4gYSBQQyAqLwotI2RlZmlu ZSBDSEVDS19EUklWRVJfSU5JVCgpCTEKLQotLyogT24gUENzLCB0aGUgY2hlY2tzdW0gaXMgYnVp bHQgb25seSBvdmVyIGJ5dGVzIDIuLjMxICovCi0jZGVmaW5lIFBDX0NLU19SQU5HRV9TVEFSVAky Ci0jZGVmaW5lIFBDX0NLU19SQU5HRV9FTkQJMzEKLSNkZWZpbmUgUENfQ0tTX0xPQwkJMzIKLSNk ZWZpbmUgTlZSQU1fQllURVMJCSgxMjgtTlZSQU1fRklSU1RfQllURSkKLQotI2RlZmluZSBtYWNo X2NoZWNrX2NoZWNrc3VtCXBjX2NoZWNrX2NoZWNrc3VtCi0jZGVmaW5lIG1hY2hfc2V0X2NoZWNr c3VtCXBjX3NldF9jaGVja3N1bQotI2RlZmluZSBtYWNoX3Byb2NfaW5mb3MJCXBjX3Byb2NfaW5m b3MKLQotI2VuZGlmCi0KLSNpZiBNQUNIID09IEFUQVJJCi0KLS8qIFNwZWNpYWwgcGFyYW1ldGVy cyBmb3IgUlRDIGluIEF0YXJpIG1hY2hpbmVzICovCi0jaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4K LSNpbmNsdWRlIDxhc20vYXRhcmlpbnRzLmg+Ci0jZGVmaW5lIFJUQ19QT1JUKHgpCQkoVFRfUlRD X0JBUyArIDIqKHgpKQotI2RlZmluZSBDSEVDS19EUklWRVJfSU5JVCgpCShNQUNIX0lTX0FUQVJJ ICYmIEFUQVJJSFdfUFJFU0VOVChUVF9DTEspKQotCi0jZGVmaW5lIE5WUkFNX0JZVEVTCQk1MAot Ci0vKiBPbiBBdGFyaXMsIHRoZSBjaGVja3N1bSBpcyBvdmVyIGFsbCBieXRlcyBleGNlcHQgdGhl IGNoZWNrc3VtIGJ5dGVzCi0gKiB0aGVtc2VsdmVzOyB0aGVzZSBhcmUgYXQgdGhlIHZlcnkgZW5k ICovCi0jZGVmaW5lIEFUQVJJX0NLU19SQU5HRV9TVEFSVAkwCi0jZGVmaW5lIEFUQVJJX0NLU19S QU5HRV9FTkQJNDcKLSNkZWZpbmUgQVRBUklfQ0tTX0xPQwkJNDgKLQotI2RlZmluZSBtYWNoX2No ZWNrX2NoZWNrc3VtCWF0YXJpX2NoZWNrX2NoZWNrc3VtCi0jZGVmaW5lIG1hY2hfc2V0X2NoZWNr c3VtCWF0YXJpX3NldF9jaGVja3N1bQotI2RlZmluZSBtYWNoX3Byb2NfaW5mb3MJCWF0YXJpX3By b2NfaW5mb3MKLQotI2VuZGlmCi0KLS8qIE5vdGUgdGhhdCAqYWxsKiBjYWxscyB0byBDTU9TX1JF QUQgYW5kIENNT1NfV1JJVEUgbXVzdCBiZSBkb25lIHdpdGgKLSAqIHJ0Y19sb2NrIGhlbGQuIER1 ZSB0byB0aGUgaW5kZXgtcG9ydC9kYXRhLXBvcnQgZGVzaWduIG9mIHRoZSBSVEMsIHdlCi0gKiBk b24ndCB3YW50IHR3byBkaWZmZXJlbnQgdGhpbmdzIHRyeWluZyB0byBnZXQgdG8gaXQgYXQgb25j ZS4gKGUuZy4gdGhlCi0gKiBwZXJpb2RpYyAxMSBtaW4gc3luYyBmcm9tIGtlcm5lbC90aW1lL250 cC5jIHZzLiB0aGlzIGRyaXZlci4pCi0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAj aW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CkBA IC0xMTksMTIgKzU0LDkgQEAgc3RhdGljIGludCBudnJhbV9vcGVuX21vZGU7CS8qIHNwZWNpYWwg bwogI2RlZmluZSBOVlJBTV9XUklURQkJMSAvKiBvcGVuZWQgZm9yIHdyaXRpbmcgKGV4Y2x1c2l2 ZSkgKi8KICNkZWZpbmUgTlZSQU1fRVhDTAkJMiAvKiBvcGVuZWQgd2l0aCBPX0VYQ0wgKi8KIAot c3RhdGljIGludCBtYWNoX2NoZWNrX2NoZWNrc3VtKHZvaWQpOwotc3RhdGljIHZvaWQgbWFjaF9z ZXRfY2hlY2tzdW0odm9pZCk7Ci0KICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIHZvaWQg bWFjaF9wcm9jX2luZm9zKHVuc2lnbmVkIGNoYXIgKmNvbnRlbnRzLCBzdHJ1Y3Qgc2VxX2ZpbGUg KnNlcSwKLQkJCQkJCQkJdm9pZCAqb2Zmc2V0KTsKK3N0YXRpYyB2b2lkIHBjX252cmFtX3Byb2Nf cmVhZCh1bnNpZ25lZCBjaGFyICpjb250ZW50cywgc3RydWN0IHNlcV9maWxlICpzZXEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb2Zmc2V0KTsKICNlbmRpZgogCiAvKgpA QCAtMTM4LDYgKzcwLDE0IEBAIHN0YXRpYyB2b2lkIG1hY2hfcHJvY19pbmZvcyh1bnNpZ25lZCBj aGEKICAqIGtub3cgYWJvdXQgdGhlIFJUQyBjcnVmdC4KICAqLwogCisjZGVmaW5lIE5WUkFNX0JZ VEVTCQkoMTI4IC0gTlZSQU1fRklSU1RfQllURSkKKworLyogTm90ZSB0aGF0ICphbGwqIGNhbGxz IHRvIENNT1NfUkVBRCBhbmQgQ01PU19XUklURSBtdXN0IGJlIGRvbmUgd2l0aAorICogcnRjX2xv Y2sgaGVsZC4gRHVlIHRvIHRoZSBpbmRleC1wb3J0L2RhdGEtcG9ydCBkZXNpZ24gb2YgdGhlIFJU Qywgd2UKKyAqIGRvbid0IHdhbnQgdHdvIGRpZmZlcmVudCB0aGluZ3MgdHJ5aW5nIHRvIGdldCB0 byBpdCBhdCBvbmNlLiAoZS5nLiB0aGUKKyAqIHBlcmlvZGljIDExIG1pbiBzeW5jIGZyb20ga2Vy bmVsL3RpbWUvbnRwLmMgdnMuIHRoaXMgZHJpdmVyLikKKyAqLworCiB1bnNpZ25lZCBjaGFyIF9f bnZyYW1fcmVhZF9ieXRlKGludCBpKQogewogCXJldHVybiBDTU9TX1JFQUQoTlZSQU1fRklSU1Rf QllURSArIGkpOwpAQCAtMTczLDkgKzExMywyMiBAQCB2b2lkIG52cmFtX3dyaXRlX2J5dGUodW5z aWduZWQgY2hhciBjLCBpCiB9CiBFWFBPUlRfU1lNQk9MKG52cmFtX3dyaXRlX2J5dGUpOwogCisv KiBPbiBQQ3MsIHRoZSBjaGVja3N1bSBpcyBidWlsdCBvbmx5IG92ZXIgYnl0ZXMgMi4uMzEgKi8K KyNkZWZpbmUgUENfQ0tTX1JBTkdFX1NUQVJUCTIKKyNkZWZpbmUgUENfQ0tTX1JBTkdFX0VORAkz MQorI2RlZmluZSBQQ19DS1NfTE9DCQkzMgorCiBpbnQgX19udnJhbV9jaGVja19jaGVja3N1bSh2 b2lkKQogewotCXJldHVybiBtYWNoX2NoZWNrX2NoZWNrc3VtKCk7CisJaW50IGk7CisJdW5zaWdu ZWQgc2hvcnQgc3VtID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBleHBlY3Q7CisKKwlmb3IgKGkgPSBQ Q19DS1NfUkFOR0VfU1RBUlQ7IGkgPD0gUENfQ0tTX1JBTkdFX0VORDsgKytpKQorCQlzdW0gKz0g X19udnJhbV9yZWFkX2J5dGUoaSk7CisJZXhwZWN0ID0gX19udnJhbV9yZWFkX2J5dGUoUENfQ0tT X0xPQyk8PDggfAorCSAgICBfX252cmFtX3JlYWRfYnl0ZShQQ19DS1NfTE9DKzEpOworCXJldHVy biAoc3VtICYgMHhmZmZmKSA9PSBleHBlY3Q7CiB9CiBFWFBPUlRfU1lNQk9MKF9fbnZyYW1fY2hl Y2tfY2hlY2tzdW0pOwogCkBAIC0xOTMsNyArMTQ2LDEzIEBAIEVYUE9SVF9TWU1CT0wobnZyYW1f Y2hlY2tfY2hlY2tzdW0pOwogCiBzdGF0aWMgdm9pZCBfX252cmFtX3NldF9jaGVja3N1bSh2b2lk KQogewotCW1hY2hfc2V0X2NoZWNrc3VtKCk7CisJaW50IGk7CisJdW5zaWduZWQgc2hvcnQgc3Vt ID0gMDsKKworCWZvciAoaSA9IFBDX0NLU19SQU5HRV9TVEFSVDsgaSA8PSBQQ19DS1NfUkFOR0Vf RU5EOyArK2kpCisJCXN1bSArPSBfX252cmFtX3JlYWRfYnl0ZShpKTsKKwlfX252cmFtX3dyaXRl X2J5dGUoc3VtID4+IDgsIFBDX0NLU19MT0MpOworCV9fbnZyYW1fd3JpdGVfYnl0ZShzdW0gJiAw eGZmLCBQQ19DS1NfTE9DICsgMSk7CiB9CiAKICNpZiAwCkBAIC0zOTYsNyArMzU1LDcgQEAgc3Rh dGljIGludCBudnJhbV9wcm9jX3JlYWQoc3RydWN0IHNlcV9maQogCQljb250ZW50c1tpXSA9IF9f bnZyYW1fcmVhZF9ieXRlKGkpOwogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCi0JbWFj aF9wcm9jX2luZm9zKGNvbnRlbnRzLCBzZXEsIG9mZnNldCk7CisJcGNfbnZyYW1fcHJvY19yZWFk KGNvbnRlbnRzLCBzZXEsIG9mZnNldCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0MywxMCArNDAy LDYgQEAgc3RhdGljIGludCBfX2luaXQgbnZyYW1faW5pdCh2b2lkKQogewogCWludCByZXQ7CiAK LQkvKiBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIGRyaXZlciBzaG91bGQgaW5pdCBhdCBhbGwgKi8K LQlpZiAoIUNIRUNLX0RSSVZFUl9JTklUKCkpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0ID0g bWlzY19yZWdpc3RlcigmbnZyYW1fZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VS UiAibnZyYW06IGNhbid0IG1pc2NfcmVnaXN0ZXIgb24gbWlub3I9JWRcbiIsCkBAIC00NzYsMzYg KzQzMSw2IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBudnJhbV9jbGVhbnVwX21vZHVsZSgKIG1vZHVs ZV9pbml0KG52cmFtX2luaXQpOwogbW9kdWxlX2V4aXQobnZyYW1fY2xlYW51cF9tb2R1bGUpOwog Ci0vKgotICogTWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbnMKLSAqLwotCi0jaWYgTUFDSCA9PSBQ QwotCi1zdGF0aWMgaW50IHBjX2NoZWNrX2NoZWNrc3VtKHZvaWQpCi17Ci0JaW50IGk7Ci0JdW5z aWduZWQgc2hvcnQgc3VtID0gMDsKLQl1bnNpZ25lZCBzaG9ydCBleHBlY3Q7Ci0KLQlmb3IgKGkg PSBQQ19DS1NfUkFOR0VfU1RBUlQ7IGkgPD0gUENfQ0tTX1JBTkdFX0VORDsgKytpKQotCQlzdW0g Kz0gX19udnJhbV9yZWFkX2J5dGUoaSk7Ci0JZXhwZWN0ID0gX19udnJhbV9yZWFkX2J5dGUoUENf Q0tTX0xPQyk8PDggfAotCSAgICBfX252cmFtX3JlYWRfYnl0ZShQQ19DS1NfTE9DKzEpOwotCXJl dHVybiAoc3VtICYgMHhmZmZmKSA9PSBleHBlY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjX3NldF9j aGVja3N1bSh2b2lkKQotewotCWludCBpOwotCXVuc2lnbmVkIHNob3J0IHN1bSA9IDA7Ci0KLQlm b3IgKGkgPSBQQ19DS1NfUkFOR0VfU1RBUlQ7IGkgPD0gUENfQ0tTX1JBTkdFX0VORDsgKytpKQot CQlzdW0gKz0gX19udnJhbV9yZWFkX2J5dGUoaSk7Ci0JX19udnJhbV93cml0ZV9ieXRlKHN1bSA+ PiA4LCBQQ19DS1NfTE9DKTsKLQlfX252cmFtX3dyaXRlX2J5dGUoc3VtICYgMHhmZiwgUENfQ0tT X0xPQyArIDEpOwotfQotCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIGNoYXIgKmZs b3BweV90eXBlc1tdID0gewpAQCAtNTIwLDggKzQ0NSw4IEBAIHN0YXRpYyBjaGFyICpnZnhfdHlw ZXNbXSA9IHsKIAkibW9ub2Nocm9tZSIsCiB9OwogCi1zdGF0aWMgdm9pZCBwY19wcm9jX2luZm9z KHVuc2lnbmVkIGNoYXIgKm52cmFtLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQkJCQkJCQkJdm9p ZCAqb2Zmc2V0KQorc3RhdGljIHZvaWQgcGNfbnZyYW1fcHJvY19yZWFkKHVuc2lnbmVkIGNoYXIg Km52cmFtLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpvZmZzZXQpCiB7CiAJaW50IGNoZWNrc3VtOwogCWludCB0eXBlOwpAQCAtNTgy LDE0MyArNTA3LDggQEAgc3RhdGljIHZvaWQgcGNfcHJvY19pbmZvcyh1bnNpZ25lZCBjaGFyCiAK IAlyZXR1cm47CiB9Ci0jZW5kaWYKLQotI2VuZGlmIC8qIE1BQ0ggPT0gUEMgKi8KLQotI2lmIE1B Q0ggPT0gQVRBUkkKLQotc3RhdGljIGludCBhdGFyaV9jaGVja19jaGVja3N1bSh2b2lkKQotewot CWludCBpOwotCXVuc2lnbmVkIGNoYXIgc3VtID0gMDsKLQotCWZvciAoaSA9IEFUQVJJX0NLU19S QU5HRV9TVEFSVDsgaSA8PSBBVEFSSV9DS1NfUkFOR0VfRU5EOyArK2kpCi0JCXN1bSArPSBfX252 cmFtX3JlYWRfYnl0ZShpKTsKLQlyZXR1cm4gKF9fbnZyYW1fcmVhZF9ieXRlKEFUQVJJX0NLU19M T0MpID09ICh+c3VtICYgMHhmZikpICYmCi0JICAgIChfX252cmFtX3JlYWRfYnl0ZShBVEFSSV9D S1NfTE9DICsgMSkgPT0gKHN1bSAmIDB4ZmYpKTsKLX0KLQotc3RhdGljIHZvaWQgYXRhcmlfc2V0 X2NoZWNrc3VtKHZvaWQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciBzdW0gPSAwOwogCi0J Zm9yIChpID0gQVRBUklfQ0tTX1JBTkdFX1NUQVJUOyBpIDw9IEFUQVJJX0NLU19SQU5HRV9FTkQ7 ICsraSkKLQkJc3VtICs9IF9fbnZyYW1fcmVhZF9ieXRlKGkpOwotCV9fbnZyYW1fd3JpdGVfYnl0 ZSh+c3VtLCBBVEFSSV9DS1NfTE9DKTsKLQlfX252cmFtX3dyaXRlX2J5dGUoc3VtLCBBVEFSSV9D S1NfTE9DICsgMSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCi1zdGF0aWMgc3RydWN0 IHsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQljaGFyICpuYW1lOwotfSBib290X3ByZWZzW10gPSB7 Ci0JeyAweDgwLCAiVE9TIiB9LAotCXsgMHg0MCwgIkFTViIgfSwKLQl7IDB4MjAsICJOZXRCU0Qg KD8pIiB9LAotCXsgMHgxMCwgIkxpbnV4IiB9LAotCXsgMHgwMCwgInVuc3BlY2lmaWVkIiB9Ci19 OwotCi1zdGF0aWMgY2hhciAqbGFuZ3VhZ2VzW10gPSB7Ci0JIkVuZ2xpc2ggKFVTKSIsCi0JIkdl cm1hbiIsCi0JIkZyZW5jaCIsCi0JIkVuZ2xpc2ggKFVLKSIsCi0JIlNwYW5pc2giLAotCSJJdGFs aWFuIiwKLQkiNiAodW5kZWZpbmVkKSIsCi0JIlN3aXNzIChGcmVuY2gpIiwKLQkiU3dpc3MgKEdl cm1hbikiCi19OwotCi1zdGF0aWMgY2hhciAqZGF0ZWZvcm1hdFtdID0gewotCSJNTSVjREQlY1lZ IiwKLQkiREQlY01NJWNZWSIsCi0JIllZJWNNTSVjREQiLAotCSJZWSVjREQlY01NIiwKLQkiNCAo dW5kZWZpbmVkKSIsCi0JIjUgKHVuZGVmaW5lZCkiLAotCSI2ICh1bmRlZmluZWQpIiwKLQkiNyAo dW5kZWZpbmVkKSIKLX07Ci0KLXN0YXRpYyBjaGFyICpjb2xvcnNbXSA9IHsKLQkiMiIsICI0Iiwg IjE2IiwgIjI1NiIsICI2NTUzNiIsICI/PyIsICI/PyIsICI/PyIKLX07Ci0KLXN0YXRpYyB2b2lk IGF0YXJpX3Byb2NfaW5mb3ModW5zaWduZWQgY2hhciAqbnZyYW0sIHN0cnVjdCBzZXFfZmlsZSAq c2VxLAotCQkJCQkJCQl2b2lkICpvZmZzZXQpCi17Ci0JaW50IGNoZWNrc3VtID0gbnZyYW1fY2hl Y2tfY2hlY2tzdW0oKTsKLQlpbnQgaTsKLQl1bnNpZ25lZCB2bW9kZTsKLQotCXNlcV9wcmludGYo c2VxLCAiQ2hlY2tzdW0gc3RhdHVzICA6ICVzdmFsaWRcbiIsIGNoZWNrc3VtID8gIiIgOiAibm90 ICIpOwotCi0Jc2VxX3ByaW50ZihzZXEsICJCb290IHByZWZlcmVuY2UgIDogIik7Ci0JZm9yIChp ID0gQVJSQVlfU0laRShib290X3ByZWZzKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0JCWlmIChudnJh bVsxXSA9PSBib290X3ByZWZzW2ldLnZhbCkgewotCQkJc2VxX3ByaW50ZihzZXEsICIlc1xuIiwg Ym9vdF9wcmVmc1tpXS5uYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChpIDwgMCkKLQkJ c2VxX3ByaW50ZihzZXEsICIweCUwMnggKHVuZGVmaW5lZClcbiIsIG52cmFtWzFdKTsKLQotCXNl cV9wcmludGYoc2VxLCAiU0NTSSBhcmJpdHJhdGlvbiA6ICVzXG4iLAotCSAgICAobnZyYW1bMTZd ICYgMHg4MCkgPyAib24iIDogIm9mZiIpOwotCXNlcV9wcmludGYoc2VxLCAiU0NTSSBob3N0IElE ICAgICA6ICIpOwotCWlmIChudnJhbVsxNl0gJiAweDgwKQotCQlzZXFfcHJpbnRmKHNlcSwgIiVk XG4iLCBudnJhbVsxNl0gJiA3KTsKLQllbHNlCi0JCXNlcV9wcmludGYoc2VxLCAibi9hXG4iKTsK LQotCS8qIHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgZGVmaW5lZCBvbmx5IGZvciB0aGUgRmFs Y29uICovCi0JaWYgKChhdGFyaV9tY2hfY29va2llID4+IDE2KSAhPSBBVEFSSV9NQ0hfRkFMQ09O KQotCQlyZXR1cm47Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIk9TIGxhbmd1YWdlICAgICAgOiAiKTsK LQlpZiAobnZyYW1bNl0gPCBBUlJBWV9TSVpFKGxhbmd1YWdlcykpCi0JCXNlcV9wcmludGYoc2Vx LCAiJXNcbiIsIGxhbmd1YWdlc1tudnJhbVs2XV0pOwotCWVsc2UKLQkJc2VxX3ByaW50ZihzZXEs ICIldSAodW5kZWZpbmVkKVxuIiwgbnZyYW1bNl0pOwotCXNlcV9wcmludGYoc2VxLCAiS2V5Ym9h cmQgbGFuZ3VhZ2U6ICIpOwotCWlmIChudnJhbVs3XSA8IEFSUkFZX1NJWkUobGFuZ3VhZ2VzKSkK LQkJc2VxX3ByaW50ZihzZXEsICIlc1xuIiwgbGFuZ3VhZ2VzW252cmFtWzddXSk7Ci0JZWxzZQot CQlzZXFfcHJpbnRmKHNlcSwgIiV1ICh1bmRlZmluZWQpXG4iLCBudnJhbVs3XSk7Ci0Jc2VxX3By aW50ZihzZXEsICJEYXRlIGZvcm1hdCAgICAgIDogIik7Ci0Jc2VxX3ByaW50ZihzZXEsIGRhdGVm b3JtYXRbbnZyYW1bOF0gJiA3XSwKLQkgICAgbnZyYW1bOV0gPyBudnJhbVs5XSA6ICcvJywgbnZy YW1bOV0gPyBudnJhbVs5XSA6ICcvJyk7Ci0Jc2VxX3ByaW50ZihzZXEsICIsICVkaCBjbG9ja1xu IiwgbnZyYW1bOF0gJiAxNiA/IDI0IDogMTIpOwotCXNlcV9wcmludGYoc2VxLCAiQm9vdCBkZWxh eSAgICAgICA6ICIpOwotCWlmIChudnJhbVsxMF0gPT0gMCkKLQkJc2VxX3ByaW50ZihzZXEsICJk ZWZhdWx0Iik7Ci0JZWxzZQotCQlzZXFfcHJpbnRmKHNlcSwgIiVkcyVzXG4iLCBudnJhbVsxMF0s Ci0JCSAgICBudnJhbVsxMF0gPCA4ID8gIiwgbm8gbWVtb3J5IHRlc3QiIDogIiIpOwotCi0Jdm1v ZGUgPSAobnZyYW1bMTRdIDw8IDgpIHwgbnZyYW1bMTVdOwotCXNlcV9wcmludGYoc2VxLAotCSAg ICAiVmlkZW8gbW9kZSAgICAgICA6ICVzIGNvbG9ycywgJWQgY29sdW1ucywgJXMgJXMgbW9uaXRv clxuIiwKLQkgICAgY29sb3JzW3Ztb2RlICYgN10sCi0JICAgIHZtb2RlICYgOCA/IDgwIDogNDAs Ci0JICAgIHZtb2RlICYgMTYgPyAiVkdBIiA6ICJUViIsIHZtb2RlICYgMzIgPyAiUEFMIiA6ICJO VFNDIik7Ci0Jc2VxX3ByaW50ZihzZXEsICIgICAgICAgICAgICAgICAgICAgJXNvdmVyc2Nhbiwg Y29tcGF0LiBtb2RlICVzJXNcbiIsCi0JICAgIHZtb2RlICYgNjQgPyAiIiA6ICJubyAiLAotCSAg ICB2bW9kZSAmIDEyOCA/ICJvbiIgOiAib2ZmIiwKLQkgICAgdm1vZGUgJiAyNTYgPwotCSAgICAo dm1vZGUgJiAxNiA/ICIsIGxpbmUgZG91YmxpbmciIDogIiwgaGFsZiBzY3JlZW4iKSA6ICIiKTsK LQotCXJldHVybjsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogTUFDSCA9PSBBVEFSSSAqLworI2Vu ZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVM RV9BTElBU19NSVNDREVWKE5WUkFNX01JTk9SKTsKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpMaW51eHBwYy1kZXYgbWFpbGluZyBsaXN0CkxpbnV4cHBj LWRldkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0aW5mby9s aW51eHBwYy1kZXY=